ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDllYjRiNzcuLjA2MGE3MWQgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtNDIsMyArNDIsNiBAQAogIyBxdWlsdCdzIGZpbGVzCiBwYXRjaGVzCiBzZXJpZXMKKworIyBjc2NvcGUgZmlsZXMKK2NzY29wZS4qCmRpZmYgLS1naXQgYS9DUkVESVRTIGIvQ1JFRElUUwppbmRleCBkMDg4MDA4Li5hZTA4ZTRjIDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTUxNiw5ICs1MTYsMTAgQEAKIFM6IFVTQQogCiBOOiBMZW5uZXJ0IEJ1eXRlbmhlawotRTogYnV5dGVuaEBnbnUub3JnCi1EOiBSZXdyaXRlIG9mIHRoZSBldGhlcm5ldCBicmlkZ2luZyBjb2RlCi1TOiBSYXZlbmhvcnN0IDU4QgorRToga2VybmVsQHdhbnRzdG9mbHkub3JnCitEOiBPcmlnaW5hbCAoMi40KSByZXdyaXRlIG9mIHRoZSBldGhlcm5ldCBicmlkZ2luZyBjb2RlCitEOiBWYXJpb3VzIEFSTSBiaXRzIGFuZCBwaWVjZXMKK1M6IFJhdmVuaG9yc3QgNTgKIFM6IDIzMTcgQUsgTGVpZGVuCiBTOiBUaGUgTmV0aGVybGFuZHMKIApAQCAtMTgwOCw2ICsxODA5LDE0IEBACiBTOiAxMDk4IFZBIEFtc3RlcmRhbSAKIFM6IFRoZSBOZXRoZXJsYW5kcwogCitOOiBKaXJpIEtvc2luYQorRTogamlrb3NAamlrb3MuY3oKK0U6IGprb3NpbmFAc3VzZS5jegorRDogR2VuZXJpYyBISUQgbGF5ZXIgLSBvcmlnaW5hbCBjb2RlIHNwbGl0LCBmaXhlcworRDogVmFyaW91cyBBQ1BJIGZpeGVzLCBrZWVwaW5nIGNvcnJlY3QgYmF0dGVyeSBzdGF0ZSB0aHJvdWdoIHN1c3BlbmQKK0Q6IHZhcmlvdXMgbG9ja2RlcCBhbm5vdGF0aW9ucywgYXV0b2ZzIGFuZCBvdGhlciByYW5kb20gYnVnZml4ZXMKK1M6IFByYWd1ZSwgQ3plY2ggUmVwdWJsaWMKKwogTjogR2VuZSBLb3ppbgogRTogNzQ2MDQuMTUyQGNvbXB1c2VydmUuY29tCiBXOiBodHRwOi8vd3d3LnNhbmdvbWEuY29tCkBAIC0zMjcwLDcgKzMyNzksNyBAQAogUzogU3BhaW4KIAogTjogTGludXMgVG9ydmFsZHMKLUU6IHRvcnZhbGRzQG9zZGwub3JnCitFOiB0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZwogRDogT3JpZ2luYWwga2VybmVsIGhhY2tlcgogUzogMTI3MjUgU1cgTWlsbGlrYW4gV2F5LCBTdWl0ZSA0MDAKIFM6IEJlYXZlcnRvbiwgT3JlZ29uIDk3MDA1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMtcGt0Y2R2ZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvZGVidWdmcy1wa3RjZHZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZGJkODgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMtcGt0Y2R2ZApAQCAtMCwwICsxLDIwIEBACitXaGF0OiAgICAgICAgICAgL2RlYnVnL3BrdGNkdmQvcGt0Y2R2ZFswLTddCitEYXRlOiAgICAgICAgICAgT2N0LiAyMDA2CitLZXJuZWxWZXJzaW9uOiAgMi42LjE5CitDb250YWN0OiAgICAgICAgVGhvbWFzIE1haWVyIDxiYWxhZ2lAanVzdG1haWwuZGU+CitEZXNjcmlwdGlvbjoKKworZGVidWdmcyBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBwa3RjZHZkIG1vZHVsZSAocGFja2V0IHdyaXRpbmcgZHJpdmVyKSBjcmVhdGVzCit0aGVzZSBmaWxlcyBpbiBkZWJ1Z2ZzOgorCisvZGVidWcvcGt0Y2R2ZC9wa3RjZHZkWzAtN10vCisgICAgaW5mbyAgICAgICAgICAgICgwNDQ0KSBMb3RzIG9mIGh1bWFuIHJlYWRhYmxlIGRyaXZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcyBhbmQgaW5mb3MuIE11bHRpcGxlIGxpbmVzIQorCitFeGFtcGxlOgorLS0tLS0tLQorCitjYXQgL2RlYnVnL3BrdGNkdmQvcGt0Y2R2ZDAvaW5mbwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1wa3RjZHZkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1wa3RjZHZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YzU1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXBrdGNkdmQKQEAgLTAsMCArMSw3MiBAQAorV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvcGt0Y2R2ZC8KK0RhdGU6ICAgICAgICAgICBPY3QuIDIwMDYKK0tlcm5lbFZlcnNpb246ICAyLjYuMTkKK0NvbnRhY3Q6ICAgICAgICBUaG9tYXMgTWFpZXIgPGJhbGFnaUBqdXN0bWFpbC5kZT4KK0Rlc2NyaXB0aW9uOgorCitzeXNmcyBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgcGt0Y2R2ZCBtb2R1bGUgKHBhY2tldCB3cml0aW5nIGRyaXZlcikgY3JlYXRlcwordGhlc2UgZmlsZXMgaW4gdGhlIHN5c2ZzOgorKDxkZXZpZD4gaXMgaW4gZm9ybWF0ICBtYWpvcjptaW5vciApCisKKy9zeXMvY2xhc3MvcGt0Y2R2ZC8KKyAgICBhZGQgICAgICAgICAgICAoMDIwMCkgIFdyaXRlIGEgYmxvY2sgZGV2aWNlIGlkIChtYWpvcjptaW5vcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSBhIG5ldyBwa3RjZHZkIGRldmljZSBhbmQgbWFwCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCB0byB0aGUgYmxvY2sgZGV2aWNlLgorCisgICAgcmVtb3ZlICAgICAgICAgKDAyMDApICBXcml0ZSB0aGUgcGt0Y2R2ZCBkZXZpY2UgaWQgKG1ham9yOm1pbm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gaXQgdG8gcmVtb3ZlIHRoZSBwa3RjZHZkIGRldmljZS4KKworICAgIGRldmljZV9tYXAgICAgICgwNDQ0KSAgU2hvd3MgdGhlIGRldmljZSBtYXBwaW5nIGluIGZvcm1hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGt0Y2R2ZFswLTddIDxwa3RkZXZpZD4gPGJsa2RldmlkPgorCisvc3lzL2NsYXNzL3BrdGNkdmQvcGt0Y2R2ZFswLTddLworICAgIGRldiAgICAgICAgICAgICAgICAgICAoMDQ0NCkgRGV2aWNlIGlkCisgICAgdWV2ZW50ICAgICAgICAgICAgICAgICgwMjAwKSBUbyBzZW5kIGFuIHVldmVudC4KKworL3N5cy9jbGFzcy9wa3RjZHZkL3BrdGNkdmRbMC03XS9zdGF0LworICAgIHBhY2tldHNfc3RhcnRlZCAgICAgICAoMDQ0NCkgTnVtYmVyIG9mIHN0YXJ0ZWQgcGFja2V0cy4KKyAgICBwYWNrZXRzX2ZpbmlzaGVkICAgICAgKDA0NDQpIE51bWJlciBvZiBmaW5pc2hlZCBwYWNrZXRzLgorCisgICAga2Jfd3JpdHRlbiAgICAgICAgICAgICgwNDQ0KSBrQnl0ZXMgd3JpdHRlbi4KKyAgICBrYl9yZWFkICAgICAgICAgICAgICAgKDA0NDQpIGtCeXRlcyByZWFkLgorICAgIGtiX3JlYWRfZ2F0aGVyICAgICAgICAoMDQ0NCkga0J5dGVzIHJlYWQgdG8gZmlsbCB3cml0ZSBwYWNrZXRzLgorCisgICAgcmVzZXQgICAgICAgICAgICAgICAgICgwMjAwKSBXcml0ZSBhbnkgdmFsdWUgdG8gaXQgdG8gcmVzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdGNkdmQgZGV2aWNlIHN0YXRpc3RpYyB2YWx1ZXMsIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHJlYWQvd3JpdHRlbi4KKworL3N5cy9jbGFzcy9wa3RjZHZkL3BrdGNkdmRbMC03XS93cml0ZV9xdWV1ZS8KKyAgICBzaXplICAgICAgICAgICAgICAgICAgKDA0NDQpIENvbnRhaW5zIHRoZSBzaXplIG9mIHRoZSBiaW8gd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLgorCisgICAgY29uZ2VzdGlvbl9vZmYgICAgICAgICgwNjQ0KSBJZiBiaW8gd3JpdGUgcXVldWUgc2l6ZSBpcyBiZWxvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtYXJrLCBhY2NlcHQgbmV3IGJpbyByZXF1ZXN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgYmxvY2sgbGF5ZXIuCisKKyAgICBjb25nZXN0aW9uX29uICAgICAgICAgKDA2NDQpIElmIGJpbyB3cml0ZSBxdWV1ZSBzaXplIGlzIGhpZ2hlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhpcyBtYXJrLCBkbyBubyBsb25nZXIgYWNjZXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW8gd3JpdGUgcmVxdWVzdHMgZnJvbSB0aGUgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIGFuZCB3YWl0IHRpbGwgdGhlIHBrdGNkdmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBoYXMgcHJvY2Vzc2VkIGVub3VnaCBiaW8ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc28gdGhhdCBiaW8gd3JpdGUgcXVldWUgc2l6ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3cgY29uZ2VzdGlvbiBvZmYgbWFyay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgdmFsdWUgb2YgPD0gMCBkaXNhYmxlcyBjb25nZXN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLgorCisKK0V4YW1wbGU6CistLS0tLS0tLQorVG8gdXNlIHRoZSBwa3RjZHZkIHN5c2ZzIGludGVyZmFjZSBkaXJlY3RseSwgeW91IGNhbiBkbzoKKworIyBjcmVhdGUgYSBuZXcgcGt0Y2R2ZCBkZXZpY2UgbWFwcGVkIHRvIC9kZXYvaGRjCitlY2hvICIyMjowIiA+L3N5cy9jbGFzcy9wa3RjZHZkL2FkZAorY2F0IC9zeXMvY2xhc3MvcGt0Y2R2ZC9kZXZpY2VfbWFwCisjIGFzc3VtaW5nIGRldmljZSBwa3RjZHZkMCB3YXMgY3JlYXRlZCwgbG9vayBhdCBzdGF0J3MKK2NhdCAvc3lzL2NsYXNzL3BrdGNkdmQvcGt0Y2R2ZDAvc3RhdC9rYl93cml0dGVuCisjIHByaW50IHRoZSBkZXZpY2UgaWQgb2YgdGhlIG1hcHBlZCBibG9jayBkZXZpY2UKK2ZncmVwIHBrdGNkdmQwIC9zeXMvY2xhc3MvcGt0Y2R2ZC9kZXZpY2VfbWFwCisjIHJlbW92ZSBkZXZpY2UsIHVzaW5nIHBrdGNkdmQwIGRldmljZSBpZCAgIDI1MzowCitlY2hvICIyNTM6MCIgPi9zeXMvY2xhc3MvcGt0Y2R2ZC9yZW1vdmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCmluZGV4IDI5YzE4OTYuLjkwNjkxODkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQpAQCAtMzUsMTIgKzM1LDM3IEBACiBiZW5lZml0IG9mIHdhcm5pbmcgeW91IHdoZW4geW91J3JlIG5lc3RpbmcgeW91ciBmdW5jdGlvbnMgdG9vIGRlZXAuCiBIZWVkIHRoYXQgd2FybmluZy4KIAorVGhlIHByZWZlcnJlZCB3YXkgdG8gZWFzZSBtdWx0aXBsZSBpbmRlbnRhdGlvbiBsZXZlbHMgaW4gYSBzd2l0Y2ggc3RhdGVtZW50IGlzCit0byBhbGlnbiB0aGUgInN3aXRjaCIgYW5kIGl0cyBzdWJvcmRpbmF0ZSAiY2FzZSIgbGFiZWxzIGluIHRoZSBzYW1lIGNvbHVtbgoraW5zdGVhZCBvZiAiZG91YmxlLWluZGVudGluZyIgdGhlICJjYXNlIiBsYWJlbHMuICBFLmcuOgorCisJc3dpdGNoIChzdWZmaXgpIHsKKwljYXNlICdHJzoKKwljYXNlICdnJzoKKwkJbWVtIDw8PSAzMDsKKwkJYnJlYWs7CisJY2FzZSAnTSc6CisJY2FzZSAnbSc6CisJCW1lbSA8PD0gMjA7CisJCWJyZWFrOworCWNhc2UgJ0snOgorCWNhc2UgJ2snOgorCQltZW0gPDw9IDEwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwogRG9uJ3QgcHV0IG11bHRpcGxlIHN0YXRlbWVudHMgb24gYSBzaW5nbGUgbGluZSB1bmxlc3MgeW91IGhhdmUKIHNvbWV0aGluZyB0byBoaWRlOgogCiAJaWYgKGNvbmRpdGlvbikgZG9fdGhpczsKIAkgIGRvX3NvbWV0aGluZ19ldmVyeXRpbWU7CiAKK0Rvbid0IHB1dCBtdWx0aXBsZSBhc3NpZ25tZW50cyBvbiBhIHNpbmdsZSBsaW5lIGVpdGhlci4gIEtlcm5lbCBjb2Rpbmcgc3R5bGUKK2lzIHN1cGVyIHNpbXBsZS4gIEF2b2lkIHRyaWNreSBleHByZXNzaW9ucy4KKwogT3V0c2lkZSBvZiBjb21tZW50cywgZG9jdW1lbnRhdGlvbiBhbmQgZXhjZXB0IGluIEtjb25maWcsIHNwYWNlcyBhcmUgbmV2ZXIKIHVzZWQgZm9yIGluZGVudGF0aW9uLCBhbmQgdGhlIGFib3ZlIGV4YW1wbGUgaXMgZGVsaWJlcmF0ZWx5IGJyb2tlbi4KIApAQCAtNjksNyArOTQsNyBAQAogCQluZXh0X3N0YXRlbWVudDsKIH0KIAotCQlDaGFwdGVyIDM6IFBsYWNpbmcgQnJhY2VzCisJCUNoYXB0ZXIgMzogUGxhY2luZyBCcmFjZXMgYW5kIFNwYWNlcwogCiBUaGUgb3RoZXIgaXNzdWUgdGhhdCBhbHdheXMgY29tZXMgdXAgaW4gQyBzdHlsaW5nIGlzIHRoZSBwbGFjZW1lbnQgb2YKIGJyYWNlcy4gIFVubGlrZSB0aGUgaW5kZW50IHNpemUsIHRoZXJlIGFyZSBmZXcgdGVjaG5pY2FsIHJlYXNvbnMgdG8KQEAgLTgxLDYgKzEwNiwyMCBAQAogCQl3ZSBkbyB5CiAJfQogCitUaGlzIGFwcGxpZXMgdG8gYWxsIG5vbi1mdW5jdGlvbiBzdGF0ZW1lbnQgYmxvY2tzIChpZiwgc3dpdGNoLCBmb3IsCit3aGlsZSwgZG8pLiAgRS5nLjoKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBLT0JKX0FERDoKKwkJcmV0dXJuICJhZGQiOworCWNhc2UgS09CSl9SRU1PVkU6CisJCXJldHVybiAicmVtb3ZlIjsKKwljYXNlIEtPQkpfQ0hBTkdFOgorCQlyZXR1cm4gImNoYW5nZSI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorCiBIb3dldmVyLCB0aGVyZSBpcyBvbmUgc3BlY2lhbCBjYXNlLCBuYW1lbHkgZnVuY3Rpb25zOiB0aGV5IGhhdmUgdGhlCiBvcGVuaW5nIGJyYWNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZSwgdGh1czoKIApAQCAtMTIxLDYgKzE2MCw0OSBAQAogMjUtbGluZSB0ZXJtaW5hbCBzY3JlZW5zIGhlcmUpLCB5b3UgaGF2ZSBtb3JlIGVtcHR5IGxpbmVzIHRvIHB1dAogY29tbWVudHMgb24uCiAKKwkJMy4xOiAgU3BhY2VzCisKK0xpbnV4IGtlcm5lbCBzdHlsZSBmb3IgdXNlIG9mIHNwYWNlcyBkZXBlbmRzIChtb3N0bHkpIG9uCitmdW5jdGlvbi12ZXJzdXMta2V5d29yZCB1c2FnZS4gIFVzZSBhIHNwYWNlIGFmdGVyIChtb3N0KSBrZXl3b3Jkcy4gIFRoZQorbm90YWJsZSBleGNlcHRpb25zIGFyZSBzaXplb2YsIHR5cGVvZiwgYWxpZ25vZiwgYW5kIF9fYXR0cmlidXRlX18sIHdoaWNoIGxvb2sKK3NvbWV3aGF0IGxpa2UgZnVuY3Rpb25zIChhbmQgYXJlIHVzdWFsbHkgdXNlZCB3aXRoIHBhcmVudGhlc2VzIGluIExpbnV4LAorYWx0aG91Z2ggdGhleSBhcmUgbm90IHJlcXVpcmVkIGluIHRoZSBsYW5ndWFnZSwgYXMgaW46ICJzaXplb2YgaW5mbyIgYWZ0ZXIKKyJzdHJ1Y3QgZmlsZWluZm8gaW5mbzsiIGlzIGRlY2xhcmVkKS4KKworU28gdXNlIGEgc3BhY2UgYWZ0ZXIgdGhlc2Uga2V5d29yZHM6CisJaWYsIHN3aXRjaCwgY2FzZSwgZm9yLCBkbywgd2hpbGUKK2J1dCBub3Qgd2l0aCBzaXplb2YsIHR5cGVvZiwgYWxpZ25vZiwgb3IgX19hdHRyaWJ1dGVfXy4gIEUuZy4sCisJcyA9IHNpemVvZihzdHJ1Y3QgZmlsZSk7CisKK0RvIG5vdCBhZGQgc3BhY2VzIGFyb3VuZCAoaW5zaWRlKSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25zLiAgVGhpcyBleGFtcGxlIGlzCisqYmFkKjoKKworCXMgPSBzaXplb2YoIHN0cnVjdCBmaWxlICk7CisKK1doZW4gZGVjbGFyaW5nIHBvaW50ZXIgZGF0YSBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHBvaW50ZXIgdHlwZSwgdGhlCitwcmVmZXJyZWQgdXNlIG9mICcqJyBpcyBhZGphY2VudCB0byB0aGUgZGF0YSBuYW1lIG9yIGZ1bmN0aW9uIG5hbWUgYW5kIG5vdAorYWRqYWNlbnQgdG8gdGhlIHR5cGUgbmFtZS4gIEV4YW1wbGVzOgorCisJY2hhciAqbGludXhfYmFubmVyOworCXVuc2lnbmVkIGxvbmcgbG9uZyBtZW1wYXJzZShjaGFyICpwdHIsIGNoYXIgKipyZXRwdHIpOworCWNoYXIgKm1hdGNoX3N0cmR1cChzdWJzdHJpbmdfdCAqcyk7CisKK1VzZSBvbmUgc3BhY2UgYXJvdW5kIChvbiBlYWNoIHNpZGUgb2YpIG1vc3QgYmluYXJ5IGFuZCB0ZXJuYXJ5IG9wZXJhdG9ycywKK3N1Y2ggYXMgYW55IG9mIHRoZXNlOgorCisJPSAgKyAgLSAgPCAgPiAgKiAgLyAgJSAgfCAgJiAgXiAgPD0gID49ICA9PSAgIT0gID8gIDoKKworYnV0IG5vIHNwYWNlIGFmdGVyIHVuYXJ5IG9wZXJhdG9yczoKKwkmICAqICArICAtICB+ICAhICBzaXplb2YgIHR5cGVvZiAgYWxpZ25vZiAgX19hdHRyaWJ1dGVfXyAgZGVmaW5lZAorCitubyBzcGFjZSBiZWZvcmUgdGhlIHBvc3RmaXggaW5jcmVtZW50ICYgZGVjcmVtZW50IHVuYXJ5IG9wZXJhdG9yczoKKwkrKyAgLS0KKworbm8gc3BhY2UgYWZ0ZXIgdGhlIHByZWZpeCBpbmNyZW1lbnQgJiBkZWNyZW1lbnQgdW5hcnkgb3BlcmF0b3JzOgorCSsrICAtLQorCithbmQgbm8gc3BhY2UgYXJvdW5kIHRoZSAnLicgYW5kICItPiIgc3RydWN0dXJlIG1lbWJlciBvcGVyYXRvcnMuCisKIAogCQlDaGFwdGVyIDQ6IE5hbWluZwogCkBAIC0xNTIsNyArMjM0LDcgQEAKIAogSWYgeW91IGFyZSBhZnJhaWQgdG8gbWl4IHVwIHlvdXIgbG9jYWwgdmFyaWFibGUgbmFtZXMsIHlvdSBoYXZlIGFub3RoZXIKIHByb2JsZW0sIHdoaWNoIGlzIGNhbGxlZCB0aGUgZnVuY3Rpb24tZ3Jvd3RoLWhvcm1vbmUtaW1iYWxhbmNlIHN5bmRyb21lLgotU2VlIG5leHQgY2hhcHRlci4KK1NlZSBjaGFwdGVyIDYgKEZ1bmN0aW9ucykuCiAKIAogCQlDaGFwdGVyIDU6IFR5cGVkZWZzCkBAIC0yNTgsNiArMzQwLDIwIEBACiBhbmQgaXQgZ2V0cyBjb25mdXNlZC4gIFlvdSBrbm93IHlvdSdyZSBicmlsbGlhbnQsIGJ1dCBtYXliZSB5b3UnZCBsaWtlCiB0byB1bmRlcnN0YW5kIHdoYXQgeW91IGRpZCAyIHdlZWtzIGZyb20gbm93LgogCitJbiBzb3VyY2UgZmlsZXMsIHNlcGFyYXRlIGZ1bmN0aW9ucyB3aXRoIG9uZSBibGFuayBsaW5lLiAgSWYgdGhlIGZ1bmN0aW9uIGlzCitleHBvcnRlZCwgdGhlIEVYUE9SVCogbWFjcm8gZm9yIGl0IHNob3VsZCBmb2xsb3cgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNsb3NpbmcKK2Z1bmN0aW9uIGJyYWNlIGxpbmUuICBFLmcuOgorCitpbnQgc3lzdGVtX2lzX3VwKHZvaWQpCit7CisJcmV0dXJuIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORzsKK30KK0VYUE9SVF9TWU1CT0woc3lzdGVtX2lzX3VwKTsKKworSW4gZnVuY3Rpb24gcHJvdG90eXBlcywgaW5jbHVkZSBwYXJhbWV0ZXIgbmFtZXMgd2l0aCB0aGVpciBkYXRhIHR5cGVzLgorQWx0aG91Z2ggdGhpcyBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIEMgbGFuZ3VhZ2UsIGl0IGlzIHByZWZlcnJlZCBpbiBMaW51eAorYmVjYXVzZSBpdCBpcyBhIHNpbXBsZSB3YXkgdG8gYWRkIHZhbHVhYmxlIGluZm9ybWF0aW9uIGZvciB0aGUgcmVhZGVyLgorCiAKIAkJQ2hhcHRlciA3OiBDZW50cmFsaXplZCBleGl0aW5nIG9mIGZ1bmN0aW9ucwogCkBAIC0zMDYsMTYgKzQwMiwzNiBAQAogR2VuZXJhbGx5LCB5b3Ugd2FudCB5b3VyIGNvbW1lbnRzIHRvIHRlbGwgV0hBVCB5b3VyIGNvZGUgZG9lcywgbm90IEhPVy4KIEFsc28sIHRyeSB0byBhdm9pZCBwdXR0aW5nIGNvbW1lbnRzIGluc2lkZSBhIGZ1bmN0aW9uIGJvZHk6IGlmIHRoZQogZnVuY3Rpb24gaXMgc28gY29tcGxleCB0aGF0IHlvdSBuZWVkIHRvIHNlcGFyYXRlbHkgY29tbWVudCBwYXJ0cyBvZiBpdCwKLXlvdSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayB0byBjaGFwdGVyIDUgZm9yIGEgd2hpbGUuICBZb3UgY2FuIG1ha2UKK3lvdSBzaG91bGQgcHJvYmFibHkgZ28gYmFjayB0byBjaGFwdGVyIDYgZm9yIGEgd2hpbGUuICBZb3UgY2FuIG1ha2UKIHNtYWxsIGNvbW1lbnRzIHRvIG5vdGUgb3Igd2FybiBhYm91dCBzb21ldGhpbmcgcGFydGljdWxhcmx5IGNsZXZlciAob3IKIHVnbHkpLCBidXQgdHJ5IHRvIGF2b2lkIGV4Y2Vzcy4gIEluc3RlYWQsIHB1dCB0aGUgY29tbWVudHMgYXQgdGhlIGhlYWQKIG9mIHRoZSBmdW5jdGlvbiwgdGVsbGluZyBwZW9wbGUgd2hhdCBpdCBkb2VzLCBhbmQgcG9zc2libHkgV0hZIGl0IGRvZXMKIGl0LgogCi1XaGVuIGNvbW1lbnRpbmcgdGhlIGtlcm5lbCBBUEkgZnVuY3Rpb25zLCBwbGVhc2UgdXNlIHRoZSBrZXJuZWxkb2MgZm9ybWF0LgorV2hlbiBjb21tZW50aW5nIHRoZSBrZXJuZWwgQVBJIGZ1bmN0aW9ucywgcGxlYXNlIHVzZSB0aGUga2VybmVsLWRvYyBmb3JtYXQuCiBTZWUgdGhlIGZpbGVzIERvY3VtZW50YXRpb24va2VybmVsLWRvYy1uYW5vLUhPV1RPLnR4dCBhbmQgc2NyaXB0cy9rZXJuZWwtZG9jCiBmb3IgZGV0YWlscy4KIAorTGludXggc3R5bGUgZm9yIGNvbW1lbnRzIGlzIHRoZSBDODkgIi8qIC4uLiAqLyIgc3R5bGUuCitEb24ndCB1c2UgQzk5LXN0eWxlICIvLyAuLi4iIGNvbW1lbnRzLgorCitUaGUgcHJlZmVycmVkIHN0eWxlIGZvciBsb25nIChtdWx0aS1saW5lKSBjb21tZW50cyBpczoKKworCS8qCisJICogVGhpcyBpcyB0aGUgcHJlZmVycmVkIHN0eWxlIGZvciBtdWx0aS1saW5lCisJICogY29tbWVudHMgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgY29kZS4KKwkgKiBQbGVhc2UgdXNlIGl0IGNvbnNpc3RlbnRseS4KKwkgKgorCSAqIERlc2NyaXB0aW9uOiAgQSBjb2x1bW4gb2YgYXN0ZXJpc2tzIG9uIHRoZSBsZWZ0IHNpZGUsCisJICogd2l0aCBiZWdpbm5pbmcgYW5kIGVuZGluZyBhbG1vc3QtYmxhbmsgbGluZXMuCisJICovCisKK0l0J3MgYWxzbyBpbXBvcnRhbnQgdG8gY29tbWVudCBkYXRhLCB3aGV0aGVyIHRoZXkgYXJlIGJhc2ljIHR5cGVzIG9yIGRlcml2ZWQKK3R5cGVzLiAgVG8gdGhpcyBlbmQsIHVzZSBqdXN0IG9uZSBkYXRhIGRlY2xhcmF0aW9uIHBlciBsaW5lIChubyBjb21tYXMgZm9yCittdWx0aXBsZSBkYXRhIGRlY2xhcmF0aW9ucykuICBUaGlzIGxlYXZlcyB5b3Ugcm9vbSBmb3IgYSBzbWFsbCBjb21tZW50IG9uIGVhY2gKK2l0ZW0sIGV4cGxhaW5pbmcgaXRzIHVzZS4KKworCiAJCUNoYXB0ZXIgOTogWW91J3ZlIG1hZGUgYSBtZXNzIG9mIGl0CiAKIFRoYXQncyBPSywgd2UgYWxsIGRvLiAgWW91J3ZlIHByb2JhYmx5IGJlZW4gdG9sZCBieSB5b3VyIGxvbmctdGltZSBVbml4CkBAIC01NjYsNiArNjgyLDI0IEBACiBOVUxMIG9yIHRoZSBFUlJfUFRSIG1lY2hhbmlzbSB0byByZXBvcnQgZmFpbHVyZS4KIAogCisJCUNoYXB0ZXIgMTc6ICBEb24ndCByZS1pbnZlbnQgdGhlIGtlcm5lbCBtYWNyb3MKKworVGhlIGhlYWRlciBmaWxlIGluY2x1ZGUvbGludXgva2VybmVsLmggY29udGFpbnMgYSBudW1iZXIgb2YgbWFjcm9zIHRoYXQKK3lvdSBzaG91bGQgdXNlLCByYXRoZXIgdGhhbiBleHBsaWNpdGx5IGNvZGluZyBzb21lIHZhcmlhbnQgb2YgdGhlbSB5b3Vyc2VsZi4KK0ZvciBleGFtcGxlLCBpZiB5b3UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhbiBhcnJheSwgdGFrZSBhZHZhbnRhZ2UKK29mIHRoZSBtYWNybworCisgICNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCisKK1NpbWlsYXJseSwgaWYgeW91IG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzaXplIG9mIHNvbWUgc3RydWN0dXJlIG1lbWJlciwgdXNlCisKKyAgI2RlZmluZSBGSUVMRF9TSVpFT0YodCwgZikgKHNpemVvZigoKHQqKTApLT5mKSkKKworVGhlcmUgYXJlIGFsc28gbWluKCkgYW5kIG1heCgpIG1hY3JvcyB0aGF0IGRvIHN0cmljdCB0eXBlIGNoZWNraW5nIGlmIHlvdQorbmVlZCB0aGVtLiAgRmVlbCBmcmVlIHRvIHBlcnVzZSB0aGF0IGhlYWRlciBmaWxlIHRvIHNlZSB3aGF0IGVsc2UgaXMgYWxyZWFkeQorZGVmaW5lZCB0aGF0IHlvdSBzaG91bGRuJ3QgcmVwcm9kdWNlIGluIHlvdXIgY29kZS4KKworCiAKIAkJQXBwZW5kaXggSTogUmVmZXJlbmNlcwogCkBAIC01OTEsNCArNzI1LDQgQEAKIGh0dHA6Ly93d3cua3JvYWguY29tL2xpbnV4L3RhbGtzL29sc18yMDAyX2tlcm5lbF9jb2RpbmdzdHlsZV90YWxrL2h0bWwvCiAKIC0tCi1MYXN0IHVwZGF0ZWQgb24gMzAgQXByaWwgMjAwNi4KK0xhc3QgdXBkYXRlZCBvbiAyMDA2LURlY2VtYmVyLTA2LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCmluZGV4IDM2NTI2YTEuLjg2NzYwOGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTUzLDggKzUzLDggQEAKIAogIyMjCiAjRXh0ZXJuYWwgcHJvZ3JhbXMgdXNlZAotS0VSTkVMRE9DID0gc2NyaXB0cy9rZXJuZWwtZG9jCi1ET0NQUk9DICAgPSBzY3JpcHRzL2Jhc2ljL2RvY3Byb2MKK0tFUk5FTERPQyA9ICQoc3JjdHJlZSkvc2NyaXB0cy9rZXJuZWwtZG9jCitET0NQUk9DICAgPSAkKG9ianRyZWUpL3NjcmlwdHMvYmFzaWMvZG9jcHJvYwogCiBYTUxUT0ZMQUdTID0gLW0gJChzcmN0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svc3R5bGVzaGVldC54c2wKICNYTUxUT0ZMQUdTICs9IC0tc2tpcC12YWxpZGF0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbAppbmRleCAwZjRhNGI2Li40MjE1ZjY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwKQEAgLTMwMywxMCArMzAzLDEwIEBACiBkbyB7CiAJaWYgKGRlc2MtPnN0YXR1cyAmYW1wOyBtYXNrZWQpCiAJCWRlc2MtPmNoaXAtPmVuYWJsZSgpOwotCWRlc2Mtc3RhdHVzICZhbXA7PSB+cGVuZGluZzsKKwlkZXNjLT5zdGF0dXMgJmFtcDs9IH5wZW5kaW5nOwogCWhhbmRsZV9JUlFfZXZlbnQoZGVzYy0+YWN0aW9uKTsKIH0gd2hpbGUgKHN0YXR1cyAmYW1wOyBwZW5kaW5nKTsKLWRlc2Mtc3RhdHVzICZhbXA7PSB+cnVubmluZzsKK2Rlc2MtPnN0YXR1cyAmYW1wOz0gfnJ1bm5pbmc7CiBkZXNjLT5jaGlwLT5lbmQoKTsKIAkJPC9wcm9ncmFtbGlzdGluZz4KIAkJPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKaW5kZXggY2EwOTQ5MS4uM2ZhMGM0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCkBAIC01NTksNCArNTU5LDEyIEBACiAtLT4KICAgICAgPC9zZWN0MT4KICAgPC9jaGFwdGVyPgorCisgIDxjaGFwdGVyIGlkPSJpbnB1dF9zdWJzeXN0ZW0iPgorICAgICA8dGl0bGU+SW5wdXQgU3Vic3lzdGVtPC90aXRsZT4KKyFJaW5jbHVkZS9saW51eC9pbnB1dC5oCishRWRyaXZlcnMvaW5wdXQvaW5wdXQuYworIUVkcml2ZXJzL2lucHV0L2ZmLWNvcmUuYworIUVkcml2ZXJzL2lucHV0L2ZmLW1lbWxlc3MuYworICA8L2NoYXB0ZXI+CiA8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwKaW5kZXggMDdhNjM1NS4uZTJlMjRiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbApAQCAtODgzLDcgKzg4Myw3IEBACiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlciBpZD0iYXRhRXhjZXB0aW9ucyI+Ci0gICAgIDx0aXRsZT5BVEEgZXJyb3JzICZhbXA7IGV4Y2VwdGlvbnM8L3RpdGxlPgorICAgICA8dGl0bGU+QVRBIGVycm9ycyBhbmQgZXhjZXB0aW9uczwvdGl0bGU+CiAKICAgPHBhcmE+CiAgIFRoaXMgY2hhcHRlciB0cmllcyB0byBpZGVudGlmeSB3aGF0IGVycm9yL2V4Y2VwdGlvbiBjb25kaXRpb25zIGV4aXN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdCBiL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0CmluZGV4IDdhYzYxZjYuLmJmYmIyNzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0CisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0CkBAIC02NiwzICs2NiwxMyBAQAogICAgIFNlZSBEb2N1bWVudGF0aW9uL0FCSS9SRUFETUUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIDIwOiBDaGVjayB0aGF0IGl0IGFsbCBwYXNzZXMgYG1ha2UgaGVhZGVyc19jaGVjaycuCisKKzIxOiBIYXMgYmVlbiBjaGVja2VkIHdpdGggaW5qZWN0aW9uIG9mIGF0IGxlYXN0IHNsYWIgYW5kIHBhZ2UtYWxsb2NhdGlvbgorICAgIGZhdWlsdXJlcy4gIFNlZSBEb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi8uCisKKyAgICBJZiB0aGUgbmV3IGNvZGUgaXMgc3Vic3RhbnRpYWwsIGFkZGl0aW9uIG9mIHN1YnN5c3RlbS1zcGVjaWZpYyBmYXVsdAorICAgIGluamVjdGlvbiBtaWdodCBiZSBhcHByb3ByaWF0ZS4KKworMjI6IE5ld2x5LWFkZGVkIGNvZGUgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBgZ2NjIC1XJy4gIFRoaXMgd2lsbCBnZW5lcmF0ZQorICAgIGxvdHMgb2Ygbm9pc2UsIGJ1dCBpcyBnb29kIGZvciBmaW5kaW5nIGJ1Z3MgbGlrZSAid2FybmluZzogY29tcGFyaXNvbgorICAgIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCAzMDJkMTQ4Li5iMGQwMDQzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTEzNCw5ICsxMzQsOSBAQAogCiAKIExpbnVzIFRvcnZhbGRzIGlzIHRoZSBmaW5hbCBhcmJpdGVyIG9mIGFsbCBjaGFuZ2VzIGFjY2VwdGVkIGludG8gdGhlCi1MaW51eCBrZXJuZWwuICBIaXMgZS1tYWlsIGFkZHJlc3MgaXMgPHRvcnZhbGRzQG9zZGwub3JnPi4gIEhlIGdldHMKLWEgbG90IG9mIGUtbWFpbCwgc28gdHlwaWNhbGx5IHlvdSBzaG91bGQgZG8geW91ciBiZXN0IHRvIC1hdm9pZC0gc2VuZGluZwotaGltIGUtbWFpbC4KK0xpbnV4IGtlcm5lbC4gIEhpcyBlLW1haWwgYWRkcmVzcyBpcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+LiAKK0hlIGdldHMgYSBsb3Qgb2YgZS1tYWlsLCBzbyB0eXBpY2FsbHkgeW91IHNob3VsZCBkbyB5b3VyIGJlc3QgdG8gLWF2b2lkLQorc2VuZGluZyBoaW0gZS1tYWlsLiAKIAogUGF0Y2hlcyB3aGljaCBhcmUgYnVnIGZpeGVzLCBhcmUgIm9idmlvdXMiIGNoYW5nZXMsIG9yIHNpbWlsYXJseQogcmVxdWlyZSBsaXR0bGUgZGlzY3Vzc2lvbiBzaG91bGQgYmUgc2VudCBvciBDQydkIHRvIExpbnVzLiAgUGF0Y2hlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL2dldGRlbGF5cy5jIGIvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL2dldGRlbGF5cy5jCmluZGV4IGJmMmIwZTIuLmU5MTI2ZTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9nZXRkZWxheXMuYworKysgYi9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZ2V0ZGVsYXlzLmMKQEAgLTcsNiArNyw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIEJhbGJpciBTaW5naCwgSUJNIENvcnAuIDIwMDYKICAqIENvcHlyaWdodCAoYykgSmF5IExhbiwgU0dJLiAyMDA2CiAgKgorICogQ29tcGlsZSB3aXRoCisgKglnY2MgLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIGdldGRlbGF5cy5jIC1vIGdldGRlbGF5cwogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMzUsMTMgKzM3LDIwIEBACiAjZGVmaW5lIE5MQV9EQVRBKG5hKQkJKCh2b2lkICopKChjaGFyKikobmEpICsgTkxBX0hEUkxFTikpCiAjZGVmaW5lIE5MQV9QQVlMT0FEKGxlbikJKGxlbiAtIE5MQV9IRFJMRU4pCiAKLSNkZWZpbmUgZXJyKGNvZGUsIGZtdCwgYXJnLi4uKSBkbyB7IHByaW50ZihmbXQsICMjYXJnKTsgZXhpdChjb2RlKTsgfSB3aGlsZSAoMCkKLWludCBkb25lID0gMDsKLWludCByY3ZidWZzej0wOworI2RlZmluZSBlcnIoY29kZSwgZm10LCBhcmcuLi4pCQkJXAorCWRvIHsJCQkJCVwKKwkJZnByaW50ZihzdGRlcnIsIGZtdCwgIyNhcmcpOwlcCisJCWV4aXQoY29kZSk7CQkJXAorCX0gd2hpbGUgKDApCiAKLSAgICBjaGFyIG5hbWVbMTAwXTsKLWludCBkYmc9MCwgcHJpbnRfZGVsYXlzPTA7CitpbnQgZG9uZTsKK2ludCByY3ZidWZzejsKK2NoYXIgbmFtZVsxMDBdOworaW50IGRiZzsKK2ludCBwcmludF9kZWxheXM7CitpbnQgcHJpbnRfaW9fYWNjb3VudGluZzsKIF9fdTY0IHN0aW1lLCB1dGltZTsKKwogI2RlZmluZSBQUklOVEYoZm10LCBhcmcuLi4pIHsJCQlcCiAJICAgIGlmIChkYmcpIHsJCQkJXAogCQlwcmludGYoZm10LCAjI2FyZyk7CQlcCkBAIC03OCw4ICs4Nyw5IEBACiAJaWYgKHJjdmJ1ZnN6KQogCQlpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLAogCQkJCSZyY3ZidWZzeiwgc2l6ZW9mKHJjdmJ1ZnN6KSkgPCAwKSB7Ci0JCQlwcmludGYoIlVuYWJsZSB0byBzZXQgc29ja2V0IHJjdiBidWYgc2l6ZSB0byAlZFxuIiwKLQkJCSAgICAgICByY3ZidWZzeik7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzZXQgc29ja2V0IHJjdiBidWYgc2l6ZSAiCisJCQkJCSJ0byAlZFxuIiwKKwkJCQlyY3ZidWZzeik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMTg2LDYgKzE5NiwxNSBAQAogCSAgICAgICAiY291bnQiLCAiZGVsYXkgdG90YWwiLCB0LT5zd2FwaW5fY291bnQsIHQtPnN3YXBpbl9kZWxheV90b3RhbCk7CiB9CiAKK3ZvaWQgcHJpbnRfaW9hY2N0KHN0cnVjdCB0YXNrc3RhdHMgKnQpCit7CisJcHJpbnRmKCIlczogcmVhZD0lbGx1LCB3cml0ZT0lbGx1LCBjYW5jZWxsZWRfd3JpdGU9JWxsdVxuIiwKKwkJdC0+YWNfY29tbSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0LT5yZWFkX2J5dGVzLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXQtPndyaXRlX2J5dGVzLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXQtPmNhbmNlbGxlZF93cml0ZV9ieXRlcyk7Cit9CisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJaW50IGMsIHJjLCByZXBfbGVuLCBhZ2dyX2xlbiwgbGVuMiwgY21kX3R5cGU7CkBAIC0yMDgsNyArMjI3LDcgQEAKIAlzdHJ1Y3QgbXNndGVtcGxhdGUgbXNnOwogCiAJd2hpbGUgKDEpIHsKLQkJYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiZHc6cjptOnQ6cDp2OmwiKTsKKwkJYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiZGl3OnI6bTp0OnA6djpsIik7CiAJCWlmIChjIDwgMCkKIAkJCWJyZWFrOwogCkBAIC0yMTcsNiArMjM2LDEwIEBACiAJCQlwcmludGYoInByaW50IGRlbGF5YWNjdCBzdGF0cyBPTlxuIik7CiAJCQlwcmludF9kZWxheXMgPSAxOwogCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJcHJpbnRmKCJwcmludGluZyBJTyBhY2NvdW50aW5nXG4iKTsKKwkJCXByaW50X2lvX2FjY291bnRpbmcgPSAxOworCQkJYnJlYWs7CiAJCWNhc2UgJ3cnOgogCQkJc3RybmNweShsb2dmaWxlLCBvcHRhcmcsIE1BWF9GSUxFTkFNRSk7CiAJCQlwcmludGYoIndyaXRlIHRvIGZpbGUgJXNcbiIsIGxvZ2ZpbGUpOwpAQCAtMjM4LDE0ICsyNjEsMTIgQEAKIAkJCWlmICghdGlkKQogCQkJCWVycigxLCAiSW52YWxpZCB0Z2lkXG4iKTsKIAkJCWNtZF90eXBlID0gVEFTS1NUQVRTX0NNRF9BVFRSX1RHSUQ7Ci0JCQlwcmludF9kZWxheXMgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgJ3AnOgogCQkJdGlkID0gYXRvaShvcHRhcmcpOwogCQkJaWYgKCF0aWQpCiAJCQkJZXJyKDEsICJJbnZhbGlkIHBpZFxuIik7CiAJCQljbWRfdHlwZSA9IFRBU0tTVEFUU19DTURfQVRUUl9QSUQ7Ci0JCQlwcmludF9kZWxheXMgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgJ3YnOgogCQkJcHJpbnRmKCJkZWJ1ZyBvblxuIik7CkBAIC0yNzcsNyArMjk4LDcgQEAKIAlteXBpZCA9IGdldHBpZCgpOwogCWlkID0gZ2V0X2ZhbWlseV9pZChubF9zZCk7CiAJaWYgKCFpZCkgewotCQlwcmludGYoIkVycm9yIGdldHRpbmcgZmFtaWx5IGlkLCBlcnJubyAlZCIsIGVycm5vKTsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIGZhbWlseSBpZCwgZXJybm8gJWRcbiIsIGVycm5vKTsKIAkJZ290byBlcnI7CiAJfQogCVBSSU5URigiZmFtaWx5IGlkICVkXG4iLCBpZCk7CkBAIC0yODgsNyArMzA5LDcgQEAKIAkJCSAgICAgICZjcHVtYXNrLCBzdHJsZW4oY3B1bWFzaykgKyAxKTsKIAkJUFJJTlRGKCJTZW50IHJlZ2lzdGVyIGNwdW1hc2ssIHJldHZhbCAlZFxuIiwgcmMpOwogCQlpZiAocmMgPCAwKSB7Ci0JCQlwcmludGYoImVycm9yIHNlbmRpbmcgcmVnaXN0ZXIgY3B1bWFza1xuIik7CisJCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIHNlbmRpbmcgcmVnaXN0ZXIgY3B1bWFza1xuIik7CiAJCQlnb3RvIGVycjsKIAkJfQogCX0KQEAgLTI5OCw3ICszMTksNyBAQAogCQkJICAgICAgY21kX3R5cGUsICZ0aWQsIHNpemVvZihfX3UzMikpOwogCQlQUklOVEYoIlNlbnQgcGlkL3RnaWQsIHJldHZhbCAlZFxuIiwgcmMpOwogCQlpZiAocmMgPCAwKSB7Ci0JCQlwcmludGYoImVycm9yIHNlbmRpbmcgdGlkL3RnaWQgY21kXG4iKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXJyb3Igc2VuZGluZyB0aWQvdGdpZCBjbWRcbiIpOwogCQkJZ290byBkb25lOwogCQl9CiAJfQpAQCAtMzEwLDEzICszMzEsMTUgQEAKIAkJUFJJTlRGKCJyZWNlaXZlZCAlZCBieXRlc1xuIiwgcmVwX2xlbik7CiAKIAkJaWYgKHJlcF9sZW4gPCAwKSB7Ci0JCQlwcmludGYoIm5vbmZhdGFsIHJlcGx5IGVycm9yOiBlcnJubyAlZFxuIiwgZXJybm8pOworCQkJZnByaW50ZihzdGRlcnIsICJub25mYXRhbCByZXBseSBlcnJvcjogZXJybm8gJWRcbiIsCisJCQkJZXJybm8pOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKG1zZy5uLm5sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IgfHwKIAkJICAgICFOTE1TR19PSygoJm1zZy5uKSwgcmVwX2xlbikpIHsKIAkJCXN0cnVjdCBubG1zZ2VyciAqZXJyID0gTkxNU0dfREFUQSgmbXNnKTsKLQkJCXByaW50ZigiZmF0YWwgcmVwbHkgZXJyb3IsICBlcnJubyAlZFxuIiwgZXJyLT5lcnJvcik7CisJCQlmcHJpbnRmKHN0ZGVyciwgImZhdGFsIHJlcGx5IGVycm9yLCAgZXJybm8gJWRcbiIsCisJCQkJZXJyLT5lcnJvcik7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIApAQCAtMzU2LDYgKzM3OSw4IEBACiAJCQkJCQljb3VudCsrOwogCQkJCQkJaWYgKHByaW50X2RlbGF5cykKIAkJCQkJCQlwcmludF9kZWxheWFjY3QoKHN0cnVjdCB0YXNrc3RhdHMgKikgTkxBX0RBVEEobmEpKTsKKwkJCQkJCWlmIChwcmludF9pb19hY2NvdW50aW5nKQorCQkJCQkJCXByaW50X2lvYWNjdCgoc3RydWN0IHRhc2tzdGF0cyAqKSBOTEFfREFUQShuYSkpOwogCQkJCQkJaWYgKGZkKSB7CiAJCQkJCQkJaWYgKHdyaXRlKGZkLCBOTEFfREFUQShuYSksIG5hLT5ubGFfbGVuKSA8IDApIHsKIAkJCQkJCQkJZXJyKDEsIndyaXRlIGVycm9yXG4iKTsKQEAgLTM2NSw3ICszOTAsOSBAQAogCQkJCQkJCWdvdG8gZG9uZTsKIAkJCQkJCWJyZWFrOwogCQkJCQlkZWZhdWx0OgotCQkJCQkJcHJpbnRmKCJVbmtub3duIG5lc3RlZCBubGFfdHlwZSAlZFxuIiwgbmEtPm5sYV90eXBlKTsKKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBuZXN0ZWQiCisJCQkJCQkJIiBubGFfdHlwZSAlZFxuIiwKKwkJCQkJCQluYS0+bmxhX3R5cGUpOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQkJbGVuMiArPSBOTEFfQUxJR04obmEtPm5sYV9sZW4pOwpAQCAtMzc0LDcgKzQwMSw4IEBACiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRmKCJVbmtub3duIG5sYV90eXBlICVkXG4iLCBuYS0+bmxhX3R5cGUpOworCQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBubGFfdHlwZSAlZFxuIiwKKwkJCQkJbmEtPm5sYV90eXBlKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW5hID0gKHN0cnVjdCBubGF0dHIgKikgKEdFTkxNU0dfREFUQSgmbXNnKSArIGxlbik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvT3ZlcnZpZXcudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL092ZXJ2aWV3LnR4dAppbmRleCBkZGE3ZWNkLi4yOGQwMTQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvT3ZlcnZpZXcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9PdmVydmlldy50eHQKQEAgLTc2LDYgKzc2LDE1IEBACiAgICAgQSBTM0MyNDEwIGJhc2VkIFBEQSBmcm9tIEFjZXIuICBUaGVyZSBpcyBhIFdpa2kgcGFnZSBhdAogICAgIGh0dHA6Ly9oYW5kaGVsZHMub3JnL21vaW4vbW9pbi5jZ2kvQWNlck4zMERvY3VtZW50YXRpb24gLgogCisgIEFNTCBNNTkwMAorCisgICAgQW1lcmljYW4gTWljcm9zeXN0ZW1zJyBNNTkwMAorCisgIE5leCBWaXNpb24gTmV4Y29kZXIKKyAgTmV4IFZpc2lvbiBPdG9tCisKKyAgICBUd28gbWFjaGluZXMgYnkgTmV4IFZpc2lvbgorCiAKIEFkZGluZyBOZXcgTWFjaGluZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExNSw2ICsxMjQsMTAgQEAKIAogICBTdXBwb3J0IGZvciB0aGUgb25ib2FyZCBSVEMgdW5pdCwgaW5jbHVkaW5nIGFsYXJtIGZ1bmN0aW9uLgogCisgIFRoaXMgaGFzIHJlY2VudGx5IGJlZW4gdXBncmFkZWQgdG8gdXNlIHRoZSBuZXcgUlRDIGNvcmUsCisgIGFuZCB0aGUgbW9kdWxlIGhhcyBiZWVuIHJlbmFtZWQgdG8gcnRjLXMzYyB0byBmaXQgaW4gd2l0aAorICB0aGUgbmV3IHJ0YyBuYW1pbmcgc2NoZW1lLgorCiAKIFdhdGNoZG9nCiAtLS0tLS0tLQpAQCAtMTI4LDcgKzE0MSw3IEBACiAKICAgVGhlIGN1cnJlbnQga2VybmVscyBub3cgaGF2ZSBzdXBwb3J0IGZvciB0aGUgczNjMjQxMCBOQU5ECiAgIGNvbnRyb2xsZXIuIElmIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMgdGhlIGxhdGVzdCBsaW51eC1tdGQKLSAgQ1ZTIGNhbiBiZSBmb3VuZCBmcm9tIGh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvCisgIGNvZGUgY2FuIGJlIGZvdW5kIGZyb20gaHR0cDovL3d3dy5saW51eC1tdGQuaW5mcmFkZWFkLm9yZy8KIAogCiBTZXJpYWwKQEAgLTE2OCw2ICsxODEsMjEgQEAKICAgU2VlIFN1c3BlbmQudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAKK1NQSQorLS0tCisKKyAgU1BJIGRyaXZlcnMgYXJlIGF2YWlsYWJsZSBmb3IgYm90aCB0aGUgaW4tYnVpbHQgaGFyZHdhcmUKKyAgKGFsdGhvdWdoIHRoZXJlIGlzIG5vIERNQSBzdXBwb3J0IHlldCkgYW5kIGEgZ2VuZXJpYworICBHUElPIGJhc2VkIHNvbHV0aW9uLgorCisKK0xFRHMKKy0tLS0KKworICBUaGVyZSBpcyBzdXBwb3J0IGZvciBHUElPIGJhc2VkIExFRHMgdmlhIGEgcGxhdGZvcm0gZHJpdmVyCisgIGluIHRoZSBMRUQgc3Vic3lzdGVtLgorCisKIFBsYXRmb3JtIERhdGEKIC0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CmluZGV4IGM2YzlhOWMuLjNhZGFhY2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKQEAgLTk0Niw2ICs5NDYsMTMgQEAKIAkJCQlzY2hlZHVsZXIgZm9yIGV4YW1wbGUsIHRvIHJlcG9zaXRpb24gdGhlIHJlcXVlc3QKIAkJCQlpZiBpdHMgc29ydGluZyBvcmRlciBoYXMgY2hhbmdlZC4KIAorZWxldmF0b3JfYWxsb3dfbWVyZ2VfZm4JCWNhbGxlZCB3aGVuZXZlciB0aGUgYmxvY2sgbGF5ZXIgZGV0ZXJtaW5lcworCQkJCXRoYXQgYSBiaW8gY2FuIGJlIG1lcmdlZCBpbnRvIGFuIGV4aXN0aW5nCisJCQkJcmVxdWVzdCBzYWZlbHkuIFRoZSBpbyBzY2hlZHVsZXIgbWF5IHN0aWxsCisJCQkJd2FudCB0byBzdG9wIGEgbWVyZ2UgYXQgdGhpcyBwb2ludCBpZiBpdAorCQkJCXJlc3VsdHMgaW4gc29tZSBzb3J0IG9mIGNvbmZsaWN0IGludGVybmFsbHksCisJCQkJdGhpcyBob29rIGFsbG93cyBpdCB0byBkbyB0aGF0LgorCiBlbGV2YXRvcl9kaXNwYXRjaF9mbgkJZmlsbHMgdGhlIGRpc3BhdGNoIHF1ZXVlIHdpdGggcmVhZHkgcmVxdWVzdHMuCiAJCQkJSS9PIHNjaGVkdWxlcnMgYXJlIGZyZWUgdG8gcG9zdHBvbmUgcmVxdWVzdHMgYnkKIAkJCQlub3QgZmlsbGluZyB0aGUgZGlzcGF0Y2ggcXVldWUgdW5sZXNzIEBmb3JjZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dAppbmRleCA1MzI0NWM0Li5kZWJmNjgxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dApAQCAtMTc5LDEwICsxNzksMjEgQEAKIAlsaW5lcyBhc3NvY2lhdGVkIHdpdGggJ21tJy4KIAogCVRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gaGFuZGxlIHdob2xlIGFkZHJlc3Mgc3BhY2UKLQlwYWdlIHRhYmxlIG9wZXJhdGlvbnMgc3VjaCBhcyB3aGF0IGhhcHBlbnMgZHVyaW5nCi0JZm9yaywgZXhpdCwgYW5kIGV4ZWMuCisJcGFnZSB0YWJsZSBvcGVyYXRpb25zIHN1Y2ggYXMgd2hhdCBoYXBwZW5zIGR1cmluZyBleGl0IGFuZCBleGVjLgogCi0yKSB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorMikgdm9pZCBmbHVzaF9jYWNoZV9kdXBfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCisKKwlUaGlzIGludGVyZmFjZSBmbHVzaGVzIGFuIGVudGlyZSB1c2VyIGFkZHJlc3Mgc3BhY2UgZnJvbQorCXRoZSBjYWNoZXMuICBUaGF0IGlzLCBhZnRlciBydW5uaW5nLCB0aGVyZSB3aWxsIGJlIG5vIGNhY2hlCisJbGluZXMgYXNzb2NpYXRlZCB3aXRoICdtbScuCisKKwlUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGhhbmRsZSB3aG9sZSBhZGRyZXNzIHNwYWNlCisJcGFnZSB0YWJsZSBvcGVyYXRpb25zIHN1Y2ggYXMgd2hhdCBoYXBwZW5zIGR1cmluZyBmb3JrLgorCisJVGhpcyBvcHRpb24gaXMgc2VwYXJhdGUgZnJvbSBmbHVzaF9jYWNoZV9tbSB0byBhbGxvdyBzb21lCisJb3B0aW1pemF0aW9ucyBmb3IgVklQVCBjYWNoZXMuCisKKzMpIHZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogCiAJSGVyZSB3ZSBhcmUgZmx1c2hpbmcgYSBzcGVjaWZpYyByYW5nZSBvZiAodXNlcikgdmlydHVhbApAQCAtMTk5LDcgKzIxMCw3IEBACiAJY2FsbCBmbHVzaF9jYWNoZV9wYWdlIChzZWUgYmVsb3cpIGZvciBlYWNoIGVudHJ5IHdoaWNoIG1heSBiZQogCW1vZGlmaWVkLgogCi0zKSB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pCis0KSB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwZm4pCiAKIAlUaGlzIHRpbWUgd2UgbmVlZCB0byByZW1vdmUgYSBQQUdFX1NJWkUgc2l6ZWQgcmFuZ2UKIAlmcm9tIHRoZSBjYWNoZS4gIFRoZSAndm1hJyBpcyB0aGUgYmFja2luZyBzdHJ1Y3R1cmUgdXNlZCBieQpAQCAtMjIwLDcgKzIzMSw3IEBACiAKIAlUaGlzIGlzIHVzZWQgcHJpbWFyaWx5IGR1cmluZyBmYXVsdCBwcm9jZXNzaW5nLgogCi00KSB2b2lkIGZsdXNoX2NhY2hlX2ttYXBzKHZvaWQpCis1KSB2b2lkIGZsdXNoX2NhY2hlX2ttYXBzKHZvaWQpCiAKIAlUaGlzIHJvdXRpbmUgbmVlZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmIHRoZSBwbGF0Zm9ybSB1dGlsaXplcwogCWhpZ2htZW0uICBJdCB3aWxsIGJlIGNhbGxlZCByaWdodCBiZWZvcmUgYWxsIG9mIHRoZSBrbWFwcwpAQCAtMjMyLDcgKzI0Myw3IEBACiAKIAlUaGlzIHJvdXRpbmcgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIGFzbS9oaWdobWVtLmgKIAotNSkgdm9pZCBmbHVzaF9jYWNoZV92bWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorNikgdm9pZCBmbHVzaF9jYWNoZV92bWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogICAgdm9pZCBmbHVzaF9jYWNoZV92dW5tYXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiAKIAlIZXJlIGluIHRoZXNlIHR3byBpbnRlcmZhY2VzIHdlIGFyZSBmbHVzaGluZyBhIHNwZWNpZmljIHJhbmdlCkBAIC0zNjIsMTQgKzM3MywxNSBAQAogCWxpa2VseSB0aGF0IHlvdSB3aWxsIG5lZWQgdG8gZmx1c2ggdGhlIGluc3RydWN0aW9uIGNhY2hlCiAJZm9yIGNvcHlfdG9fdXNlcl9wYWdlKCkuCiAKLSAgdm9pZCBmbHVzaF9hbm9uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQorICB2b2lkIGZsdXNoX2Fub25fcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQogICAJV2hlbiB0aGUga2VybmVsIG5lZWRzIHRvIGFjY2VzcyB0aGUgY29udGVudHMgb2YgYW4gYW5vbnltb3VzCiAJcGFnZSwgaXQgY2FsbHMgdGhpcyBmdW5jdGlvbiAoY3VycmVudGx5IG9ubHkKIAlnZXRfdXNlcl9wYWdlcygpKS4gIE5vdGU6IGZsdXNoX2RjYWNoZV9wYWdlKCkgZGVsaWJlcmF0ZWx5CiAJZG9lc24ndCB3b3JrIGZvciBhbiBhbm9ueW1vdXMgcGFnZS4gIFRoZSBkZWZhdWx0CiAJaW1wbGVtZW50YXRpb24gaXMgYSBub3AgKGFuZCBzaG91bGQgcmVtYWluIHNvIGZvciBhbGwgY29oZXJlbnQKIAlhcmNoaXRlY3R1cmVzKS4gIEZvciBpbmNvaGVyZW50IGFyY2hpdGVjdHVyZXMsIGl0IHNob3VsZCBmbHVzaAotCXRoZSBjYWNoZSBvZiB0aGUgcGFnZSBhdCB2bWFkZHIgaW4gdGhlIGN1cnJlbnQgdXNlciBwcm9jZXNzLgorCXRoZSBjYWNoZSBvZiB0aGUgcGFnZSBhdCB2bWFkZHIuCiAKICAgdm9pZCBmbHVzaF9rZXJuZWxfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiAJV2hlbiB0aGUga2VybmVsIG5lZWRzIHRvIG1vZGlmeSBhIHVzZXIgcGFnZSBpcyBoYXMgb2J0YWluZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Ryb20vcGFja2V0LXdyaXRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9wYWNrZXQtd3JpdGluZy50eHQKaW5kZXggM2Q0NGM1Ni4uNzcxNWQyMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZHJvbS9wYWNrZXQtd3JpdGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZHJvbS9wYWNrZXQtd3JpdGluZy50eHQKQEAgLTkwLDYgKzkwLDQxIEBACiAgIHRvIGNyZWF0ZSBhbiBleHQyIGZpbGVzeXN0ZW0gb24gdGhlIGRpc2MuCiAKIAorVXNpbmcgdGhlIHBrdGNkdmQgc3lzZnMgaW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2luY2UgTGludXggMi42LjE5LCB0aGUgcGt0Y2R2ZCBtb2R1bGUgaGFzIGEgc3lzZnMgaW50ZXJmYWNlCithbmQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgaXQuIEZvciBleGFtcGxlIHRoZSAicGt0Y2R2ZCIgdG9vbCB1c2VzCit0aGlzIGludGVyZmFjZS4gKHNlZSBodHRwOi8vcGVvcGxlLmZyZWVuZXQuZGUvQmFsYUdpI3BrdGNkdmQgKQorCisicGt0Y2R2ZCIgd29ya3Mgc2ltaWxhciB0byAicGt0c2V0dXAiLCBlLmcuOgorCisJIyBwa3RjZHZkIC1hIGRldl9uYW1lIC9kZXYvaGRjCisJIyBta3VkZmZzIC9kZXYvcGt0Y2R2ZC9kZXZfbmFtZQorCSMgbW91bnQgLXQgdWRmIC1vIHJ3LG5vYXRpbWUgL2Rldi9wa3RjZHZkL2Rldl9uYW1lIC9kdmRyYW0KKwkjIGNwIGZpbGVzIC9kdmRyYW0KKwkjIHVtb3VudCAvZHZkcmFtCisJIyBwa3RjZHZkIC1yIGRldl9uYW1lCisKKworRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHN5c2ZzIGludGVyZmFjZSBsb29rIGludG8gdGhlIGZpbGU6CisKKyAgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1ibG9jay1wa3RjZHZkCisKKworVXNpbmcgdGhlIHBrdGNkdmQgZGVidWdmcyBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHJlYWQgcGt0Y2R2ZCBkZXZpY2UgaW5mb3MgaW4gaHVtYW4gcmVhZGFibGUgZm9ybSwgZG86CisKKwkjIGNhdCAvZGVidWcvcGt0Y2R2ZC9wa3RjZHZkWzAtN10vaW5mbworCitGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZGVidWdmcyBpbnRlcmZhY2UgbG9vayBpbnRvIHRoZSBmaWxlOgorCisgIERvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvZGVidWdmcy1wa3RjZHZkCisKKworCiBMaW5rcwogLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jb3JlLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvY29yZS50eHQKaW5kZXggMjliM2Y5Zi4uY2UwNjY2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9jb3JlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2NvcmUudHh0CkBAIC0yNCw3ICsyNCw3IEBACiAxLiBHZW5lcmFsIEluZm9ybWF0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgQ1BVRnJlcSBjb3JlIGNvZGUgaXMgbG9jYXRlZCBpbiBsaW51eC9rZXJuZWwvY3B1ZnJlcS5jLiBUaGlzCitUaGUgQ1BVRnJlcSBjb3JlIGNvZGUgaXMgbG9jYXRlZCBpbiBkcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jLiBUaGlzCiBjcHVmcmVxIGNvZGUgb2ZmZXJzIGEgc3RhbmRhcmRpemVkIGludGVyZmFjZSBmb3IgdGhlIENQVUZyZXEKIGFyY2hpdGVjdHVyZSBkcml2ZXJzICh0aG9zZSBwaWVjZXMgb2YgY29kZSB0aGF0IGRvIGFjdHVhbAogZnJlcXVlbmN5IHRyYW5zaXRpb25zKSwgYXMgd2VsbCBhcyB0byAibm90aWZpZXJzIi4gVGhlc2UgYXJlIGRldmljZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvY2FyZHMudHh0IGIvRG9jdW1lbnRhdGlvbi9kdmIvY2FyZHMudHh0CmluZGV4IGNhNThlMzMuLmNjMDkxODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2NhcmRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9jYXJkcy50eHQKQEAgLTIyLDEwICsyMiwxMCBAQAogICAgLSB2ZXMxeDkzCQk6IEFscHMgQlNSVjIgKHZlczE4OTMgZGVtb2R1bGF0b3IpIGFuZCBkYm94MiAodmVzMTk5MykKICAgIC0gY3gyNDExMAkJOiBDb25leGFudCBITTEyMjEvSE0xODExIChjeDI0MTEwIG9yIGN4MjQxMDYgZGVtb2QsIGN4MjQxMDggUExMKQogICAgLSBncnVuZGlnXzI5NTA0LTQ5MQk6IEdydW5kaWcgMjk1MDQtNDkxIChQaGlsaXBzIFREQTgwODMgZGVtb2R1bGF0b3IpLCB0c2E1NTIyIFBMTAotICAgLSBtdDMxMgkJOiBaYXJsaW5rIG10MzEyIG9yIE1pdGVsIHZwMzEwIGRlbW9kdWxhdG9yLCBzbDE5MzUgb3IgdHNhNTA1OSBQTEwKKyAgIC0gbXQzMTIJCTogWmFybGluayBtdDMxMiBvciBNaXRlbCB2cDMxMCBkZW1vZHVsYXRvciwgc2wxOTM1IG9yIHRzYTUwNTkgUExMaSwgVGVjaG5pc2F0IFNreTJQYyB3aXRoIGJpb3MgUmV2LiAyLjMKICAgIC0gc3R2MDI5OQkJOiBBbHBzIEJTUlU2ICh0c2E1MDU5IFBMTCksIExHIFREUUItUzAweCAodHNhNTA1OSBQTEwpLAogCQkJICBMRyBURFFGLVMwMDFGIChzbDE5MzUgUExMKSwgUGhpbGlwcyBTVTEyNzggKHR1YTYxMDAgUExMKSwKLQkJCSAgUGhpbGlwcyBTVTEyNzhTSCAodHNhNTA1OSBQTEwpLCBTYW1zdW5nIFRCTVUyNDExMklNQgorCQkJICBQaGlsaXBzIFNVMTI3OFNIICh0c2E1MDU5IFBMTCksIFNhbXN1bmcgVEJNVTI0MTEySU1CLCBUZWNobmlzYXQgU2t5MlBjIHdpdGggYmlvcyBSZXYuIDIuNgogICBEVkItQzoKICAgIC0gdmVzMTgyMAkJOiB2YXJpb3VzICh2ZXMxODIwIGRlbW9kdWxhdG9yLCBzcDU2NTljIG9yIHNwWFhYWCBQTEwpCiAgICAtIGF0NzZjNjUxCQk6IEF0bWVsIEFUNzZjNjUxKEIpIHdpdGggREFUNzAyMSBQTEwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhaWxjbWQuc2ggYi9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYWlsY21kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMTc3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYWlsY21kLnNoCkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL2Jhc2gKKworZWNobyAxID4gL3Byb2Mvc2VsZi9tYWtlLWl0LWZhaWwKK2V4ZWMgJCoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhaWxtb2R1bGUuc2ggYi9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYWlsbW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NGE4YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYWlsbW9kdWxlLnNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9iYXNoCisjCisjIFVzYWdlOiBmYWlsbW9kdWxlIDxmYWlsbmFtZT4gPG1vZHVsZW5hbWU+IFtzdGFja3RyYWNlLWRlcHRoXQorIworIwk8ZmFpbG5hbWU+OiAiZmFpbHNsYWIiLCAiZmFpbF9hbGxvY19wYWdlIiwgb3IgImZhaWxfbWFrZV9yZXF1ZXN0IgorIworIwk8bW9kdWxlbmFtZT46IG1vZHVsZSBuYW1lIHRoYXQgeW91IHdhbnQgdG8gaW5qZWN0IGZhdWx0cy4KKyMKKyMJW3N0YWNrdHJhY2UtZGVwdGhdOiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhY2t0cmFjZSB3YWxraW5nIGFsbG93ZWQKKyMKKworU1RBQ0tUUkFDRV9ERVBUSD01CitpZiBbICQjIC1ndCAyIF07IHRoZW4KKwlTVEFDS1RSQUNFX0RFUFRIPSQzCitmaQorCitpZiBbICEgLWQgL2RlYnVnLyQxIF07IHRoZW4KKwllY2hvICJGYXVsdC1pbmplY3Rpb24gJDEgZG9lcyBub3QgZXhpc3QiID4mMgorCWV4aXQgMQorZmkKK2lmIFsgISAtZCAvc3lzL21vZHVsZS8kMiBdOyB0aGVuCisJZWNobyAiTW9kdWxlICQyIGRvZXMgbm90IGV4aXN0IiA+JjIKKwlleGl0IDEKK2ZpCisKKyMgRGlzYWJsZSBhbnkgZmF1bHQgaW5qZWN0aW9uCitlY2hvIDAgPiAvZGVidWcvJDEvc3RhY2t0cmFjZS1kZXB0aAorCitlY2hvIGBjYXQgL3N5cy9tb2R1bGUvJDIvc2VjdGlvbnMvLnRleHRgID4gL2RlYnVnLyQxL3JlcXVpcmUtc3RhcnQKK2VjaG8gYGNhdCAvc3lzL21vZHVsZS8kMi9zZWN0aW9ucy8uZXhpdC50ZXh0YCA+IC9kZWJ1Zy8kMS9yZXF1aXJlLWVuZAorZWNobyAkU1RBQ0tUUkFDRV9ERVBUSCA+IC9kZWJ1Zy8kMS9zdGFja3RyYWNlLWRlcHRoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYXVsdC1pbmplY3Rpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vZmF1bHQtaW5qZWN0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2NhNTYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vZmF1bHQtaW5qZWN0aW9uLnR4dApAQCAtMCwwICsxLDIyNSBAQAorRmF1bHQgaW5qZWN0aW9uIGNhcGFiaWxpdGllcyBpbmZyYXN0cnVjdHVyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTZWUgYWxzbyBkcml2ZXJzL21kL2ZhdWx0eS5jIGFuZCAiZXZlcnlfbnRoIiBtb2R1bGUgb3B0aW9uIGZvciBzY3NpX2RlYnVnLgorCisKK0F2YWlsYWJsZSBmYXVsdCBpbmplY3Rpb24gY2FwYWJpbGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvIGZhaWxzbGFiCisKKyAgaW5qZWN0cyBzbGFiIGFsbG9jYXRpb24gZmFpbHVyZXMuIChrbWFsbG9jKCksIGttZW1fY2FjaGVfYWxsb2MoKSwgLi4uKQorCitvIGZhaWxfcGFnZV9hbGxvYworCisgIGluamVjdHMgcGFnZSBhbGxvY2F0aW9uIGZhaWx1cmVzLiAoYWxsb2NfcGFnZXMoKSwgZ2V0X2ZyZWVfcGFnZXMoKSwgLi4uKQorCitvIGZhaWxfbWFrZV9yZXF1ZXN0CisKKyAgaW5qZWN0cyBkaXNrIElPIGVycm9ycyBvbiBkZXZpY2VzIHBlcm1pdHRlZCBieSBzZXR0aW5nCisgIC9zeXMvYmxvY2svPGRldmljZT4vbWFrZS1pdC1mYWlsIG9yCisgIC9zeXMvYmxvY2svPGRldmljZT4vPHBhcnRpdGlvbj4vbWFrZS1pdC1mYWlsLiAoZ2VuZXJpY19tYWtlX3JlcXVlc3QoKSkKKworQ29uZmlndXJlIGZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXRpZXMgYmVoYXZpb3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK28gZGVidWdmcyBlbnRyaWVzCisKK2ZhdWx0LWluamVjdC1kZWJ1Z2ZzIGtlcm5lbCBtb2R1bGUgcHJvdmlkZXMgc29tZSBkZWJ1Z2ZzIGVudHJpZXMgZm9yIHJ1bnRpbWUKK2NvbmZpZ3VyYXRpb24gb2YgZmF1bHQtaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4KKworLSAvZGVidWcvZmFpbCovcHJvYmFiaWxpdHk6CisKKwlsaWtlbGlob29kIG9mIGZhaWx1cmUgaW5qZWN0aW9uLCBpbiBwZXJjZW50LgorCUZvcm1hdDogPHBlcmNlbnQ+CisKKwlOb3RlIHRoYXQgb25lLWZhaWx1cmUtcGVyLWh1bmRyZWQgaXMgYSB2ZXJ5IGhpZ2ggZXJyb3IgcmF0ZQorCWZvciBzb21lIHRlc3RjYXNlcy4gIENvbnNpZGVyIHNldHRpbmcgcHJvYmFiaWxpdHk9MTAwIGFuZCBjb25maWd1cmUKKwkvZGVidWcvZmFpbCovaW50ZXJ2YWwgZm9yIHN1Y2ggdGVzdGNhc2VzLgorCistIC9kZWJ1Zy9mYWlsKi9pbnRlcnZhbDoKKworCXNwZWNpZmllcyB0aGUgaW50ZXJ2YWwgYmV0d2VlbiBmYWlsdXJlcywgZm9yIGNhbGxzIHRvCisJc2hvdWxkX2ZhaWwoKSB0aGF0IHBhc3MgYWxsIHRoZSBvdGhlciB0ZXN0cy4KKworCU5vdGUgdGhhdCBpZiB5b3UgZW5hYmxlIHRoaXMsIGJ5IHNldHRpbmcgaW50ZXJ2YWw+MSwgeW91IHdpbGwKKwlwcm9iYWJseSB3YW50IHRvIHNldCBwcm9iYWJpbGl0eT0xMDAuCisKKy0gL2RlYnVnL2ZhaWwqL3RpbWVzOgorCisJc3BlY2lmaWVzIGhvdyBtYW55IHRpbWVzIGZhaWx1cmVzIG1heSBoYXBwZW4gYXQgbW9zdC4KKwlBIHZhbHVlIG9mIC0xIG1lYW5zICJubyBsaW1pdCIuCisKKy0gL2RlYnVnL2ZhaWwqL3NwYWNlOgorCisJc3BlY2lmaWVzIGFuIGluaXRpYWwgcmVzb3VyY2UgImJ1ZGdldCIsIGRlY3JlbWVudGVkIGJ5ICJzaXplIgorCW9uIGVhY2ggY2FsbCB0byBzaG91bGRfZmFpbCgsc2l6ZSkuICBGYWlsdXJlIGluamVjdGlvbiBpcworCXN1cHByZXNzZWQgdW50aWwgInNwYWNlIiByZWFjaGVzIHplcm8uCisKKy0gL2RlYnVnL2ZhaWwqL3ZlcmJvc2UKKworCUZvcm1hdDogeyAwIHwgMSB8IDIgfQorCXNwZWNpZmllcyB0aGUgdmVyYm9zaXR5IG9mIHRoZSBtZXNzYWdlcyB3aGVuIGZhaWx1cmUgaXMKKwlpbmplY3RlZC4gICcwJyBtZWFucyBubyBtZXNzYWdlczsgJzEnIHdpbGwgcHJpbnQgb25seSBhIHNpbmdsZQorCWxvZyBsaW5lIHBlciBmYWlsdXJlOyAnMicgd2lsbCBwcmludCBhIGNhbGwgdHJhY2UgdG9vIC0tIHVzZWZ1bAorCXRvIGRlYnVnIHRoZSBwcm9ibGVtcyByZXZlYWxlZCBieSBmYXVsdCBpbmplY3Rpb24uCisKKy0gL2RlYnVnL2ZhaWwqL3Rhc2stZmlsdGVyOgorCisJRm9ybWF0OiB7ICdZJyB8ICdOJyB9CisJQSB2YWx1ZSBvZiAnTicgZGlzYWJsZXMgZmlsdGVyaW5nIGJ5IHByb2Nlc3MgKGRlZmF1bHQpLgorCUFueSBwb3NpdGl2ZSB2YWx1ZSBsaW1pdHMgZmFpbHVyZXMgdG8gb25seSBwcm9jZXNzZXMgaW5kaWNhdGVkIGJ5CisJL3Byb2MvPHBpZD4vbWFrZS1pdC1mYWlsPT0xLgorCistIC9kZWJ1Zy9mYWlsKi9yZXF1aXJlLXN0YXJ0OgorLSAvZGVidWcvZmFpbCovcmVxdWlyZS1lbmQ6CistIC9kZWJ1Zy9mYWlsKi9yZWplY3Qtc3RhcnQ6CistIC9kZWJ1Zy9mYWlsKi9yZWplY3QtZW5kOgorCisJc3BlY2lmaWVzIHRoZSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcyB0ZXN0ZWQgZHVyaW5nCisJc3RhY2t0cmFjZSB3YWxraW5nLiAgRmFpbHVyZSBpcyBpbmplY3RlZCBvbmx5IGlmIHNvbWUgY2FsbGVyCisJaW4gdGhlIHdhbGtlZCBzdGFja3RyYWNlIGxpZXMgd2l0aGluIHRoZSByZXF1aXJlZCByYW5nZSwgYW5kCisJbm9uZSBsaWVzIHdpdGhpbiB0aGUgcmVqZWN0ZWQgcmFuZ2UuCisJRGVmYXVsdCByZXF1aXJlZCByYW5nZSBpcyBbMCxVTE9OR19NQVgpICh3aG9sZSBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UpLgorCURlZmF1bHQgcmVqZWN0ZWQgcmFuZ2UgaXMgWzAsMCkuCisKKy0gL2RlYnVnL2ZhaWwqL3N0YWNrdHJhY2UtZGVwdGg6CisKKwlzcGVjaWZpZXMgdGhlIG1heGltdW0gc3RhY2t0cmFjZSBkZXB0aCB3YWxrZWQgZHVyaW5nIHNlYXJjaAorCWZvciBhIGNhbGxlciB3aXRoaW4gW3JlcXVpcmUtc3RhcnQscmVxdWlyZS1lbmQpIE9SCisJW3JlamVjdC1zdGFydCxyZWplY3QtZW5kKS4KKworLSAvZGVidWcvZmFpbF9wYWdlX2FsbG9jL2lnbm9yZS1nZnAtaGlnaG1lbToKKworCUZvcm1hdDogeyAnWScgfCAnTicgfQorCWRlZmF1bHQgaXMgJ04nLCBzZXR0aW5nIGl0IHRvICdZJyB3b24ndCBpbmplY3QgZmFpbHVyZXMgaW50bworCWhpZ2htZW0vdXNlciBhbGxvY2F0aW9ucy4KKworLSAvZGVidWcvZmFpbHNsYWIvaWdub3JlLWdmcC13YWl0OgorLSAvZGVidWcvZmFpbF9wYWdlX2FsbG9jL2lnbm9yZS1nZnAtd2FpdDoKKworCUZvcm1hdDogeyAnWScgfCAnTicgfQorCWRlZmF1bHQgaXMgJ04nLCBzZXR0aW5nIGl0IHRvICdZJyB3aWxsIGluamVjdCBmYWlsdXJlcworCW9ubHkgaW50byBub24tc2xlZXAgYWxsb2NhdGlvbnMgKEdGUF9BVE9NSUMgYWxsb2NhdGlvbnMpLgorCitvIEJvb3Qgb3B0aW9uCisKK0luIG9yZGVyIHRvIGluamVjdCBmYXVsdHMgd2hpbGUgZGVidWdmcyBpcyBub3QgYXZhaWxhYmxlIChlYXJseSBib290IHRpbWUpLAordXNlIHRoZSBib290IG9wdGlvbjoKKworCWZhaWxzbGFiPQorCWZhaWxfcGFnZV9hbGxvYz0KKwlmYWlsX21ha2VfcmVxdWVzdD08aW50ZXJ2YWw+LDxwcm9iYWJpbGl0eT4sPHNwYWNlPiw8dGltZXM+CisKK0hvdyB0byBhZGQgbmV3IGZhdWx0IGluamVjdGlvbiBjYXBhYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvICNpbmNsdWRlIDxsaW51eC9mYXVsdC1pbmplY3QuaD4KKworbyBkZWZpbmUgdGhlIGZhdWx0IGF0dHJpYnV0ZXMKKworICBERUNMQVJFX0ZBVUxUX0lOSkVDVElPTihuYW1lKTsKKworICBQbGVhc2Ugc2VlIHRoZSBkZWZpbml0aW9uIG9mIHN0cnVjdCBmYXVsdF9hdHRyIGluIGZhdWx0LWluamVjdC5oCisgIGZvciBkZXRhaWxzLgorCitvIHByb3ZpZGUgYSB3YXkgdG8gY29uZmlndXJlIGZhdWx0IGF0dHJpYnV0ZXMKKworLSBib290IG9wdGlvbgorCisgIElmIHlvdSBuZWVkIHRvIGVuYWJsZSB0aGUgZmF1bHQgaW5qZWN0aW9uIGNhcGFiaWxpdHkgZnJvbSBib290IHRpbWUsIHlvdSBjYW4KKyAgcHJvdmlkZSBib290IG9wdGlvbiB0byBjb25maWd1cmUgaXQuIFRoZXJlIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBpdDoKKworCXNldHVwX2ZhdWx0X2F0dHIoYXR0ciwgc3RyKTsKKworLSBkZWJ1Z2ZzIGVudHJpZXMKKworICBmYWlsc2xhYiwgZmFpbF9wYWdlX2FsbG9jLCBhbmQgZmFpbF9tYWtlX3JlcXVlc3QgdXNlIHRoaXMgd2F5LgorICBIZWxwZXIgZnVuY3Rpb25zOgorCisJaW5pdF9mYXVsdF9hdHRyX2VudHJpZXMoZW50cmllcywgYXR0ciwgbmFtZSk7CisJdm9pZCBjbGVhbnVwX2ZhdWx0X2F0dHJfZW50cmllcyhlbnRyaWVzKTsKKworLSBtb2R1bGUgcGFyYW1ldGVycworCisgIElmIHRoZSBzY29wZSBvZiB0aGUgZmF1bHQgaW5qZWN0aW9uIGNhcGFiaWxpdHkgaXMgbGltaXRlZCB0byBhCisgIHNpbmdsZSBrZXJuZWwgbW9kdWxlLCBpdCBpcyBiZXR0ZXIgdG8gcHJvdmlkZSBtb2R1bGUgcGFyYW1ldGVycyB0bworICBjb25maWd1cmUgdGhlIGZhdWx0IGF0dHJpYnV0ZXMuCisKK28gYWRkIGEgaG9vayB0byBpbnNlcnQgZmFpbHVyZXMKKworICBVcG9uIHNob3VsZF9mYWlsKCkgcmV0dXJuaW5nIHRydWUsIGNsaWVudCBjb2RlIHNob3VsZCBpbmplY3QgYSBmYWlsdXJlLgorCisJc2hvdWxkX2ZhaWwoYXR0ciwgc2l6ZSk7CisKK0FwcGxpY2F0aW9uIEV4YW1wbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvIGluamVjdCBzbGFiIGFsbG9jYXRpb24gZmFpbHVyZXMgaW50byBtb2R1bGUgaW5pdC9jbGVhbnVwIGNvZGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIS9iaW4vYmFzaAorCitGQUlMQ01EPURvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhaWxjbWQuc2gKK0JMQUNLTElTVD0icm9vdF9wbHVnIGV2YnVnIgorCitGQUlMTkFNRT1mYWlsc2xhYgorZWNobyBZID4gL2RlYnVnLyRGQUlMTkFNRS90YXNrLWZpbHRlcgorZWNobyAxMCA+IC9kZWJ1Zy8kRkFJTE5BTUUvcHJvYmFiaWxpdHkKK2VjaG8gMTAwID4gL2RlYnVnLyRGQUlMTkFNRS9pbnRlcnZhbAorZWNobyAtMSA+IC9kZWJ1Zy8kRkFJTE5BTUUvdGltZXMKK2VjaG8gMiA+IC9kZWJ1Zy8kRkFJTE5BTUUvdmVyYm9zZQorZWNobyAxID4gL2RlYnVnLyRGQUlMTkFNRS9pZ25vcmUtZ2ZwLXdhaXQKKworYmxhY2tsaXN0KCkKK3sKKwllY2hvICRCTEFDS0xJU1QgfCBncmVwICQxID4gL2Rldi9udWxsIDI+JjEKK30KKworb29wcygpCit7CisJZG1lc2cgfCBncmVwIEJVRyA+IC9kZXYvbnVsbCAyPiYxCit9CisKK2ZpbmQgL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAgLW5hbWUgJyoua28nIC1leGVjIGJhc2VuYW1lIHt9IC5rbyBcOyB8CisJd2hpbGUgcmVhZCBpCisJZG8KKwkJb29wcyAmJiBleGl0IDEKKworCQlpZiAhIGJsYWNrbGlzdCAkaQorCQl0aGVuCisJCQllY2hvIGluc2VydGluZyAkaS4uLgorCQkJYmFzaCAkRkFJTENNRCBtb2Rwcm9iZSAkaQorCQlmaQorCWRvbmUKKworbHNtb2QgfCBhd2sgJ3sgaWYgKCQzID09IDApIHsgcHJpbnQgJDEgfSB9JyB8CisJd2hpbGUgcmVhZCBpCisJZG8KKwkJb29wcyAmJiBleGl0IDEKKworCQlpZiAhIGJsYWNrbGlzdCAkaQorCQl0aGVuCisJCQllY2hvIHJlbW92aW5nICRpLi4uCisJCQliYXNoICRGQUlMQ01EIG1vZHByb2JlIC1yICRpCisJCWZpCisJZG9uZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbyBpbmplY3Qgc2xhYiBhbGxvY2F0aW9uIGZhaWx1cmVzIG9ubHkgZm9yIGEgc3BlY2lmaWMgbW9kdWxlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvYmluL2Jhc2gKKworRkFJTE1PRD1Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYWlsbW9kdWxlLnNoCisKK2VjaG8gaW5qZWN0aW5nIGVycm9ycyBpbnRvIHRoZSBtb2R1bGUgJDEuLi4KKworbW9kcHJvYmUgJDEKK2Jhc2ggJEZBSUxNT0QgZmFpbHNsYWIgJDEgMTAKK2VjaG8gMjUgPiAvZGVidWcvZmFpbHNsYWIvcHJvYmFiaWxpdHkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCA0NmYyYTU1Li4wYmE2YWYwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0xNTEsMTUgKzE1MSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglJMkMgaW50ZXJmYWNlIG9mIHRoZSBpdDg3IGRyaXZlcgotV2hlbjoJSmFudWFyeSAyMDA3Ci1XaHk6CVRoZSBJU0EgaW50ZXJmYWNlIGlzIGZhc3RlciBhbmQgc2hvdWxkIGJlIGFsd2F5cyBhdmFpbGFibGUuIFRoZSBJMkMKLQlwcm9iaW5nIGlzIGFsc28ga25vd24gdG8gY2F1c2UgdHJvdWJsZSBpbiBhdCBsZWFzdCBvbmUgY2FzZSAoc2VlCi0JYnVnICM1ODg5LikKLVdobzoJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglVbnVzZWQgRVhQT1JUX1NZTUJPTC9FWFBPUlRfU1lNQk9MX0dQTCBleHBvcnRzCiAJKHRlbXBvcmFyeSB0cmFuc2l0aW9uIGNvbmZpZyBvcHRpb24gcHJvdmlkZWQgdW50aWwgdGhlbikKIAlUaGUgdHJhbnNpdGlvbiBjb25maWcgb3B0aW9uIHdpbGwgYWxzbyBiZSByZW1vdmVkIGF0IHRoZSBzYW1lIHRpbWUuCkBAIC0yMTYsMzMgKzIwNyw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglpMmMtaXRlIGFuZCBpMmMtYWxnby1pdGUgZHJpdmVycwotV2hlbjoJU2VwdGVtYmVyIDIwMDYKLVdoeToJVGhlc2UgZHJpdmVycyBuZXZlciBjb21waWxlZCBzaW5jZSB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGtlcm5lbAotCXRyZWUgNSB5ZWFycyBhZ28uIFRoaXMgZmVhdHVyZSByZW1vdmFsIGNhbiBiZSByZWV2YWx1YXRlZCBpZgotCXNvbWVvbmUgc2hvd3MgaW50ZXJlc3QgaW4gdGhlIGRyaXZlcnMsIGZpeGVzIHRoZW0gYW5kIHRha2VzIG92ZXIKLQltYWludGVuYW5jZS4KLQlodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPWxpbnV4LW1pcHMmbT0xMTUwNDA1MTA4MTc0NDgKLVdobzoJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaGF0OglCcmlkZ2UgbmV0ZmlsdGVyIGRlZmVycmVkIElQdjQvSVB2NiBvdXRwdXQgaG9vayBjYWxsaW5nCi1XaGVuOglKYW51YXJ5IDIwMDcKLVdoeToJVGhlIGRlZmVycmVkIG91dHB1dCBob29rcyBhcmUgYSBsYXllcmluZyB2aW9sYXRpb24gY2F1c2luZyB1bnVzdWFsCi0JYW5kIGJyb2tlbiBiZWhhdmlvdXIgb24gYnJpZGdlIGRldmljZXMuIEV4YW1wbGVzIG9mIHRoaW5ncyB0aGV5Ci0JYnJlYWsgaW5jbHVkZSBRb1MgY2xhc3NpZmF0aW9uIHVzaW5nIHRoZSBNQVJLIG9yIENMQVNTSUZZIHRhcmdldHMsCi0JdGhlIElQc2VjIHBvbGljeSBtYXRjaCBhbmQgY29ubmVjdGlvbiB0cmFja2luZyB3aXRoIFZMQU5zIG9uIGEKLQlicmlkZ2UuIFRoZWlyIG9ubHkgdXNlIGlzIHRvIGVuYWJsZSBicmlkZ2Ugb3V0cHV0IHBvcnQgZmlsdGVyaW5nCi0Jd2l0aGluIGlwdGFibGVzIHdpdGggdGhlIHBoeXNkZXYgbWF0Y2gsIHdoaWNoIGNhbiBhbHNvIGJlIGRvbmUgYnkKLQljb21iaW5pbmcgaXB0YWJsZXMgYW5kIGVidGFibGVzIHVzaW5nIG5ldGZpbHRlciBtYXJrcy4gVW50aWwgaXQKLQl3aWxsIGdldCByZW1vdmVkIHRoZSBob29rIGRlZmVycmFsIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIGlzCi0Jb25seSBlbmFibGVkIHdoZW4gbmVlZGVkLgotCi1XaG86CVBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJUEhZU0RFVlBBVEgsIFBIWVNERVZCVVMsIFBIWVNERVZEUklWRVIgaW4gdGhlIHVldmVudCBlbnZpcm9ubWVudAogV2hlbjoJT2N0b2JlciAyMDA4CiBXaHk6CVRoZSBzdGFja2luZyBvZiBjbGFzcyBkZXZpY2VzIG1ha2VzIHRoZXNlIHZhbHVlcyBtaXNsZWFkaW5nIGFuZApAQCAtMjYyLDYgKzIyNiwyMyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hhdDoJaTJjX2FkYXB0ZXIuZGV2CisJaTJjX2FkYXB0ZXIubGlzdAorV2hlbjoJSnVseSAyMDA3CitXaHk6CVN1cGVyZmx1b3VzLCBnaXZlbiBpMmNfYWRhcHRlci5jbGFzc19kZXY6CisJICAqIFRoZSAiZGV2IiB3YXMgYSBzdGFuZC1pbiBmb3IgdGhlIHBoeXNpY2FsIGRldmljZSBub2RlIHRoYXQgbGVnYWN5CisJICAgIGRyaXZlcnMgd291bGQgbm90IGhhdmU7IGJ1dCBub3cgaXQncyBhbG1vc3QgYWx3YXlzIHByZXNlbnQuICBBbnkKKwkgICAgcmVtYWluaW5nIGxlZ2FjeSBkcml2ZXJzIG11c3QgdXBncmFkZSAodGhleSBub3cgdHJpZ2dlciB3YXJuaW5ncykuCisJICAqIFRoZSAibGlzdCIgZHVwbGljYXRlcyBjbGFzcyBkZXZpY2UgY2hpbGRyZW4uCisJVGhlIGRlbGF5IGluIHJlbW92aW5nIHRoaXMgaXMgc28gdXBncmFkZWQgbG1fc2Vuc29ycyBhbmQgbGlic2Vuc29ycworCWNhbiBnZXQgZGVwbG95ZWQuICAoUmVtb3ZhbCBjYXVzZXMgbWlub3IgY2hhbmdlcyBpbiB0aGUgc3lzZnMgbGF5b3V0LAorCW5vdGFibHkgdGhlIGxvY2F0aW9uIG9mIHRoZSBhZGFwdGVyIHR5cGUgbmFtZSBhbmQgcGFyZW50aW5nIHRoZSBpMmMKKwljbGllbnQgaGFyZHdhcmUgZGlyZWN0bHkgZnJvbSB0aGVpciBjb250cm9sbGVyLikKK1dobzoJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+LAorCURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJSVB2NCBvbmx5IGNvbm5lY3Rpb24gdHJhY2tpbmcvTkFUL2hlbHBlcnMKIFdoZW46CTIuNi4yMgogV2h5OglUaGUgbmV3IGxheWVyIDMgaW5kZXBlbmRhbnQgY29ubmVjdGlvbiB0cmFja2luZyByZXBsYWNlcyB0aGUgb2xkCkBAIC0yNzAsMyArMjUxLDc3IEBACiBXaG86CVBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJQUNQSSBob29rcyAoWDg2X1NQRUVEU1RFUF9DRU5UUklOT19BQ1BJKSBpbiBzcGVlZHN0ZXAtY2VudHJpbm8gZHJpdmVyCitXaGVuOglEZWNlbWJlciAyMDA2CitXaHk6CVNwZWVkc3RlcC1jZW50cmlubyBkcml2ZXIgd2l0aCBBQ1BJIGhvb2tzIGFuZCBhY3BpLWNwdWZyZXEgZHJpdmVyIGFyZQorCWZ1bmN0aW9uYWxseSB2ZXJ5IG11Y2ggc2ltaWxhci4gVGhleSB0YWxrIHRvIEFDUEkgaW4gc2FtZSB3YXkuIE9ubHkKKwlkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpcyB0aGUgd2F5IHRoZXkgZG8gZnJlcXVlbmN5IHRyYW5zaXRpb25zLgorCU9uZSB1c2VzIE1TUnMgYW5kIHRoZSBvdGhlciBvbmUgdXNlcyBJTyBwb3J0cy4gRnVuY3Rpb25hbGl5IG9mCisJc3BlZWRzdGVwX2NlbnRyaW5vIHdpdGggQUNQSSBob29rcyBpcyBub3cgbWVyZ2VkIGludG8gYWNwaS1jcHVmcmVxLgorCVRoYXQgbWVhbnMgb25lIGNvbW1vbiBkcml2ZXIgd2lsbCBzdXBwb3J0IGFsbCBJbnRlbCBFbmhhbmNlZCBTcGVlZHN0ZXAKKwljYXBhYmxlIENQVXMuIFRoYXQgbWVhbnMgbGVzcyBjb25mdXNpb24gb3ZlciBuYW1lIG9mCisJc3BlZWRzdGVwLWNlbnRyaW5vIGRyaXZlciAod2l0aCB0aGF0IGRyaXZlciBzdXBwb3NlZCB0byBiZSB1c2VkIG9uCisJbm9uLWNlbnRyaW5vIHBsYXRmb3JtcykuIFRoYXQgbWVhbnMgbGVzcyBkdXBsaWNhdGlvbiBvZiBjb2RlIGFuZAorCWxlc3MgbWFpbnRlbmFuY2UgZWZmb3J0IGFuZCBubyBwb3NzaWJpbGl0eSBvZiB0aGVzZSB0d28gZHJpdmVycworCWdvaW5nIG91dCBvZiBzeW5jLgorCUN1cnJlbnQgdXNlcnMgb2Ygc3BlZWRzdGVwX2NlbnRyaW5vIHdpdGggQUNQSSBob29rcyBhcmUgcmVxdWVzdGVkIHRvCisJc3dpdGNoIG92ZXIgdG8gYWNwaS1jcHVmcmVxIGRyaXZlci4gc3BlZWRzdGVwLWNlbnRyaW5vIHdpbGwgY29udGludWUKKwl0byB3b3JrIHVzaW5nIG9sZGVyIG5vbi1BQ1BJIHN0YXRpYyB0YWJsZSBiYXNlZCBzY2hlbWUgZXZlbiBhZnRlciB0aGlzCisJZGF0ZS4KKworV2hvOglWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CUFDUEkgaG90a2V5IGRyaXZlciAoQ09ORklHX0FDUElfSE9US0VZKQorV2hlbjoJMi42LjIxCitXaHk6CWhvdGtleS5jIHdhcyBhbiBhdHRlbXB0IHRvIGNvbnNvbGlkYXRlIG11bHRpcGxlIGRyaXZlcnMgdGhhdCB1c2UKKwlBQ1BJIHRvIGltcGxlbWVudCBob3RrZXlzLiAgSG93ZXZlciwgaG90a2V5cyBhcmUgbm90IGRvY3VtZW50ZWQKKwlpbiB0aGUgQUNQSSBzcGVjaWZpY2F0aW9uLCBzbyB0aGUgZHJpdmVycyB1c2VkIHVuZG9jdW1lbnRlZAorCXZlbmRvci1zcGVjaWZpYyBob29rcyBhbmQgdHVybmVkIG91dCB0byBiZSBtb3JlIGRpZmZlcmVudCB0aGFuCisJdGhlIHNhbWUuCisKKwlGdXJ0aGVyLCB0aGUga2V5cyBhbmQgdGhlIGZlYXR1cmVzIHN1cHBsaWVkIGJ5IGVhY2ggcGxhdGZvcm0KKwlhcmUgZGlmZmVyZW50LCBzbyB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhIG5lZWQgZm9yCisJcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVycy4KKworCVNvIHRoZSBuZXcgcGxhbiBpcyB0byBkZWxldGUgaG90a2V5LmMgYW5kIGluc3RlYWQsIHdvcmsgb24gdGhlCisJcGxhdGZvcm0gc3BlY2lmaWMgZHJpdmVycyB0byB0cnkgdG8gbWFrZSB0aGVtIGxvb2sgdGhlIHNhbWUKKwl0byB0aGUgdXNlciB3aGVuIHRoZXkgc3VwcGx5IHRoZSBzYW1lIGZlYXR1cmVzLgorCisJaG90a2V5LmMgaGFzIGFsd2F5cyBkZXBlbmRlZCBvbiBDT05GSUdfRVhQRVJJTUVOVEFMCisKK1dobzoJTGVuIEJyb3duIDxsZW4uYnJvd25AaW50ZWwuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJL3N5cy9maXJtd2FyZS9hY3BpL25hbWVzcGFjZQorV2hlbjoJMi42LjIxCitXaHk6CVRoZSBBQ1BJIG5hbWVzcGFjZSBpcyBlZmZlY3RpdmVseSB0aGUgc3ltYm9sIGxpc3QgZm9yCisJdGhlIEJJT1MuICBUaGUgZGV2aWNlIG5hbWVzIGFyZSBjb21wbGV0ZWx5IGFyYml0cmFyeQorCWFuZCBoYXZlIG5vIHBsYWNlIGJlaW5nIGV4cG9zZWQgdG8gdXNlci1zcGFjZS4KKworCUZvciB0aG9zZSBpbnRlcmVzdGVkIGluIHRoZSBCSU9TIEFDUEkgbmFtZXNwYWNlLAorCXRoZSBCSU9TIGNhbiBiZSBleHRyYWN0ZWQgYW5kIGRpc2Fzc2VtYmxlZCB3aXRoIGFjcGlkdW1wCisJYW5kIGlhc2wgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcG10b29scyBwYWNrYWdlIGhlcmU6CisJaHR0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2xlbmIvYWNwaS91dGlscworCitXaG86CUxlbiBCcm93biA8bGVuLmJyb3duQGludGVsLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CS9wcm9jL2FjcGkvYnV0dG9uCitXaGVuOglBdWd1c3QgMjAwNworV2h5OgkvcHJvYy9hY3BpL2J1dHRvbiBoYXMgYmVlbiByZXBsYWNlZCBieSBldmVudHMgdG8gdGhlIGlucHV0IGxheWVyCisJc2luY2UgMi42LjIwLgorV2hvOglMZW4gQnJvd24gPGxlbi5icm93bkBpbnRlbC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglKRkZTICh2ZXJzaW9uIDEpCitXaGVuOgkyLjYuMjEKK1doeToJVW5tYWludGFpbmVkIGZvciB5ZWFycywgc3VwZXJjZWRlZCBieSBKRkZTMiBmb3IgeWVhcnMuCitXaG86CUplZmYgR2FyemlrIDxqZWZmQGdhcnppay5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dAppbmRleCA0M2I4OWMyLi40ZDA3NWE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dApAQCAtNzMsOCArNzMsMjIgQEAKIFJFU09VUkNFUwogPT09PT09PT09CiAKLVRoZSBMaW51eCB2ZXJzaW9uIG9mIHRoZSA5cCBzZXJ2ZXIgaXMgbm93IG1haW50YWluZWQgdW5kZXIgdGhlIG5wZnMgcHJvamVjdAotb24gc291cmNlZm9yZ2UgKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbnBmcykuCitPdXIgY3VycmVudCByZWNvbW1lbmRhdGlvbiBpcyB0byB1c2UgSW5mZXJubyAoaHR0cDovL3d3dy52aXRhbnVvdmEuY29tL2luZmVybm8pCithcyB0aGUgOXAgc2VydmVyLiAgWW91IGNhbiBzdGFydCBhIDlwIHNlcnZlciB1bmRlciBJbmZlcm5vIGJ5IGlzc3VpbmcgdGhlCitmb2xsb3dpbmcgY29tbWFuZDoKKyAgIDsgc3R5eGxpc3RlbiAtQSB0Y3AhKiE1NjQgZXhwb3J0ICcjVSonCisKK1RoZSAtQSBzcGVjaWZpZXMgYW4gdW5hdXRoZW50aWNhdGVkIGV4cG9ydC4gIFRoZSA1NjQgaXMgdGhlIHBvcnQgIyAoeW91IG1heQoraGF2ZSB0byBjaG9vc2UgYSBoaWdoZXIgcG9ydCBudW1iZXIgaWYgcnVubmluZyBhcyBhIG5vcm1hbCB1c2VyKS4gIFRoZSAnI1UqJworc3BlY2lmaWVzIGV4cG9ydGluZyB0aGUgcm9vdCBvZiB0aGUgTGludXggbmFtZSBzcGFjZS4gIFlvdSBtYXkgc3BlY2lmeSBhCitzdWJzZXQgb2YgdGhlIG5hbWVzcGFjZSBieSBleHRlbmRpbmcgdGhlIHBhdGg6ICcjVSonL3RtcCB3b3VsZCBqdXN0IGV4cG9ydAorL3RtcC4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIEluZmVybm8gbWFudWFsIHBhZ2VzIGNvdmVyaW5nIHN0eXhsaXN0ZW4KK2FuZCBleHBvcnQuCisKK0EgTGludXggdmVyc2lvbiBvZiB0aGUgOXAgc2VydmVyIGlzIG5vdyBtYWludGFpbmVkIHVuZGVyIHRoZSBucGZzIHByb2plY3QKK29uIHNvdXJjZWZvcmdlIChodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL25wZnMpLiAgVGhlcmUgaXMgYWxzbyBhCittb3JlIHN0YWJsZSBzaW5nbGUtdGhyZWFkZWQgdmVyc2lvbiBvZiB0aGUgc2VydmVyIChuYW1lZCBzcGZzKSBhdmFpbGFibGUgZnJvbQordGhlIHNhbWUgQ1ZTIHJlcG9zaXRvcnkuCiAKIFRoZXJlIGFyZSB1c2VyIGFuZCBkZXZlbG9wZXIgbWFpbGluZyBsaXN0cyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgdjlmcyBwcm9qZWN0CiBvbiBzb3VyY2Vmb3JnZSAoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy92OWZzKS4KQEAgLTk2LDUgKzExMCw1IEBACiAKIFRoZSAyLjYga2VybmVsIHN1cHBvcnQgaXMgd29ya2luZyBvbiBQUEMgYW5kIHg4Ni4KIAotUExFQVNFIFVTRSBUSEUgU09VUkNFRk9SR0UgQlVHLVRSQUNLRVIgVE8gUkVQT1JUIFBST0JMRU1TLgorUExFQVNFIFVTRSBUSEUgS0VSTkVMIEJVR1pJTExBIFRPIFJFUE9SVCBQUk9CTEVNUy4gKGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKaW5kZXggNzkwZWY2Zi4uMjhiZmVhNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwpAQCAtMTcxLDYgKzE3MSw3IEBACiAJaW50ICgqcmVsZWFzZXBhZ2UpIChzdHJ1Y3QgcGFnZSAqLCBpbnQpOwogCWludCAoKmRpcmVjdF9JTykoaW50LCBzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCiAJCQlsb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpOworCWludCAoKmxhdW5kZXJfcGFnZSkgKHN0cnVjdCBwYWdlICopOwogCiBsb2NraW5nIHJ1bGVzOgogCUFsbCBleGNlcHQgc2V0X3BhZ2VfZGlydHkgbWF5IGJsb2NrCkBAIC0xODgsNiArMTg5LDcgQEAKIGludmFsaWRhdGVwYWdlOgkJbm8JeWVzCiByZWxlYXNlcGFnZToJCW5vCXllcwogZGlyZWN0X0lPOgkJbm8KK2xhdW5kZXJfcGFnZToJCW5vCXllcwogCiAJLT5wcmVwYXJlX3dyaXRlKCksIC0+Y29tbWl0X3dyaXRlKCksIC0+c3luY19wYWdlKCkgYW5kIC0+cmVhZHBhZ2UoKQogbWF5IGJlIGNhbGxlZCBmcm9tIHRoZSByZXF1ZXN0IGhhbmRsZXIgKC9kZXYvbG9vcCkuCkBAIC0yODEsNiArMjgzLDEyIEBACiBpbmRpY2F0ZSB0aGF0IHRoZSBidWZmZXJzIGFyZSAob3IgbWF5IGJlKSBmcmVlYWJsZS4gIElmIC0+cmVsZWFzZXBhZ2UgaXMgemVybywKIHRoZSBrZXJuZWwgYXNzdW1lcyB0aGF0IHRoZSBmcyBoYXMgbm8gcHJpdmF0ZSBpbnRlcmVzdCBpbiB0aGUgYnVmZmVycy4KIAorCS0+bGF1bmRlcl9wYWdlKCkgbWF5IGJlIGNhbGxlZCBwcmlvciB0byByZWxlYXNpbmcgYSBwYWdlIGlmCitpdCBpcyBzdGlsbCBmb3VuZCB0byBiZSBkaXJ0eS4gSXQgcmV0dXJucyB6ZXJvIGlmIHRoZSBwYWdlIHdhcyBzdWNjZXNzZnVsbHkKK2NsZWFuZWQsIG9yIGFuIGVycm9yIHZhbHVlIGlmIG5vdC4gTm90ZSB0aGF0IGluIG9yZGVyIHRvIHByZXZlbnQgdGhlIHBhZ2UKK2dldHRpbmcgbWFwcGVkIGJhY2sgaW4gYW5kIHJlZGlydGllZCwgaXQgbmVlZHMgdG8gYmUga2VwdCBsb2NrZWQKK2Fjcm9zcyB0aGUgZW50aXJlIG9wZXJhdGlvbi4KKwogCU5vdGU6IGN1cnJlbnRseSBhbG1vc3QgYWxsIGluc3RhbmNlcyBvZiBhZGRyZXNzX3NwYWNlIG1ldGhvZHMgYXJlCiB1c2luZyBCS0wgZm9yIGludGVybmFsIHNlcmlhbGl6YXRpb24gYW5kIHRoYXQncyBvbmUgb2YgdGhlIHdvcnN0IHNvdXJjZXMKIG9mIGNvbnRlbnRpb24uIE5vcm1hbGx5IHRoZXkgYXJlIGNhbGxpbmcgbGlicmFyeSBmdW5jdGlvbnMgKGluIGZzL2J1ZmZlci5jKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZnMudHh0CmluZGV4IGQyODQxZTAuLmVhODI1ZTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Jmcy50eHQKQEAgLTU0LDQgKzU0LDQgQEAKIElmIHlvdSBoYXZlIGFueSBwYXRjaGVzLCBxdWVzdGlvbnMgb3Igc3VnZ2VzdGlvbnMgcmVnYXJkaW5nIHRoaXMgQkZTCiBpbXBsZW1lbnRhdGlvbiBwbGVhc2UgY29udGFjdCB0aGUgYXV0aG9yOgogCi1UaWdyYW4gQS4gQWl2YXppYW4gPHRpZ3JhbkB2ZXJpdGFzLmNvbT4KK1RpZ3JhbiBBaXZhemlhbiA8dGlncmFuQGFpdmF6aWFuLmZzbmV0LmNvLnVrPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnVzZS50eHQKaW5kZXggMzQ1MzkyYy4uMzk3YTQxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mdXNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Z1c2UudHh0CkBAIC05NCw4ICs5NCw4IEBACiAgIGZpbGVzeXN0ZW0gaXMgZnJlZSB0byBpbXBsZW1lbnQgaXQncyBhY2Nlc3MgcG9saWN5IG9yIGxlYXZlIGl0IHRvCiAgIHRoZSB1bmRlcmx5aW5nIGZpbGUgYWNjZXNzIG1lY2hhbmlzbSAoZS5nLiBpbiBjYXNlIG9mIG5ldHdvcmsKICAgZmlsZXN5c3RlbXMpLiAgVGhpcyBvcHRpb24gZW5hYmxlcyBwZXJtaXNzaW9uIGNoZWNraW5nLCByZXN0cmljdGluZwotICBhY2Nlc3MgYmFzZWQgb24gZmlsZSBtb2RlLiAgVGhpcyBpcyBvcHRpb24gaXMgdXN1YWxseSB1c2VmdWwKLSAgdG9nZXRoZXIgd2l0aCB0aGUgJ2FsbG93X290aGVyJyBtb3VudCBvcHRpb24uCisgIGFjY2VzcyBiYXNlZCBvbiBmaWxlIG1vZGUuICBJdCBpcyB1c3VhbGx5IHVzZWZ1bCB0b2dldGhlciB3aXRoIHRoZQorICAnYWxsb3dfb3RoZXInIG1vdW50IG9wdGlvbi4KIAogJ2FsbG93X290aGVyJwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dAppbmRleCAxM2JhNjQ5Li44MTc3OTA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKQEAgLTQ1Nyw2ICs0NTcsOCBAQAogCiBOb3RlLCBhIHRlY2huaWNhbCBDaGFuZ2VMb2cgYWltZWQgYXQga2VybmVsIGhhY2tlcnMgaXMgaW4gZnMvbnRmcy9DaGFuZ2VMb2cuCiAKKzIuMS4yODoKKwktIEZpeCBhIGRlYWRsb2NrLgogMi4xLjI3OgogCS0gSW1wbGVtZW50IHBhZ2UgbWlncmF0aW9uIHN1cHBvcnQgc28gdGhlIGtlcm5lbCBjYW4gbW92ZSBtZW1vcnkgdXNlZAogCSAgYnkgTlRGUyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYXJvdW5kIGZvciBtYW5hZ2VtZW50IHB1cnBvc2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9vY2ZzMi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dAppbmRleCBhZjZkZWZkLi44Y2NmMGMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dApAQCAtNTQsMyArNTQsNiBAQAogaW50cgkJKCopCUFsbG93IHNpZ25hbHMgdG8gaW50ZXJydXB0IGNsdXN0ZXIgb3BlcmF0aW9ucy4KIG5vaW50cgkJCURvIG5vdCBhbGxvdyBzaWduYWxzIHRvIGludGVycnVwdCBjbHVzdGVyCiAJCQlvcGVyYXRpb25zLgorYXRpbWVfcXVhbnR1bT02MCgqKQlPQ0ZTMiB3aWxsIG5vdCB1cGRhdGUgYXRpbWUgdW5sZXNzIHRoaXMgbnVtYmVyCisJCQlvZiBzZWNvbmRzIGhhcyBwYXNzZWQgc2luY2UgdGhlIGxhc3QgdXBkYXRlLgorCQkJU2V0IHRvIHplcm8gdG8gYWx3YXlzIHVwZGF0ZSBhdGltZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vZjcxODA1ZiBiL0RvY3VtZW50YXRpb24vaHdtb24vZjcxODA1ZgppbmRleCAyY2E2OWRmLi5iZmQwZjE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2Y3MTgwNWYKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9mNzE4MDVmCkBAIC02LDYgKzYsMTAgQEAKICAgICBQcmVmaXg6ICdmNzE4MDVmJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCiAgICAgRGF0YXNoZWV0OiBQcm92aWRlZCBieSBGaW50ZWsgb24gcmVxdWVzdAorICAqIEZpbnRlayBGNzE4NzJGL0ZHCisgICAgUHJlZml4OiAnZjcxODcyZicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZSwgYWRkcmVzcyByZWFkIGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZQorICAgIERhdGFzaGVldDogUHJvdmlkZWQgYnkgRmludGVrIG9uIHJlcXVlc3QKIAogQXV0aG9yOiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIApAQCAtMTMsOCArMTcsOCBAQAogdGVzdCBzeXN0ZW0gKGN1c3RvbSBKZXR3YXkgSzhNOE1TIG1vdGhlcmJvYXJkLCB3aXRoIENQVSBhbmQgUkFNKSBhbmQKIGZvciBwcm92aWRpbmcgaW5pdGlhbCBkb2N1bWVudGF0aW9uLgogCi1UaGFua3MgdG8gS3JpcyBDaGVuIGZyb20gRmludGVrIGZvciBhbnN3ZXJpbmcgdGVjaG5pY2FsIHF1ZXN0aW9ucyBhbmQKLXByb3ZpZGluZyBhZGRpdGlvbmFsIGRvY3VtZW50YXRpb24uCitUaGFua3MgdG8gS3JpcyBDaGVuIGFuZCBBYXJvbiBIdWFuZyBmcm9tIEZpbnRlayBmb3IgYW5zd2VyaW5nIHRlY2huaWNhbAorcXVlc3Rpb25zIGFuZCBwcm92aWRpbmcgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uLgogCiBUaGFua3MgdG8gQ2hyaXMgTGluIGZyb20gSmV0d2F5IGZvciBwcm92aWRpbmcgd2lyaW5nIHNjaGVtYXRpY3MgYW5kCiBhbnN3ZXJpbmcgdGVjaG5pY2FsIHF1ZXN0aW9ucy4KQEAgLTI4LDggKzMyLDExIEBACiBzb3VyY2UpLCAzIGZhbnMgYW5kIDMgdGVtcGVyYXR1cmUgc2Vuc29ycy4KIAogVGhpcyBjaGlwIGFsc28gaGFzIGZhbiBjb250cm9sbGluZyBmZWF0dXJlcywgdXNpbmcgZWl0aGVyIERDIG9yIFBXTSwgaW4KLXRocmVlIGRpZmZlcmVudCBtb2RlcyAob25lIG1hbnVhbCwgdHdvIGF1dG9tYXRpYykuIFRoZSBkcml2ZXIgZG9lc24ndAotc3VwcG9ydCB0aGVzZSBmZWF0dXJlcyB5ZXQuCit0aHJlZSBkaWZmZXJlbnQgbW9kZXMgKG9uZSBtYW51YWwsIHR3byBhdXRvbWF0aWMpLgorCitUaGUgRmludGVrIEY3MTg3MkYvRkcgU3VwZXIgSS9PIGNoaXAgaXMgYWxtb3N0IHRoZSBzYW1lLCB3aXRoIHR3bworYWRkaXRpb25hbCBpbnRlcm5hbCB2b2x0YWdlcyBtb25pdG9yZWQgKFZTQiBhbmQgYmF0dGVyeSkuIEl0IGFsc28gZmVhdHVyZXMKKzYgVklEIGlucHV0cy4gVGhlIFZJRCBpbnB1dHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgogCiBUaGUgZHJpdmVyIGFzc3VtZXMgdGhhdCBubyBtb3JlIHRoYW4gb25lIGNoaXAgaXMgcHJlc2VudCwgd2hpY2ggc2VlbXMKIHJlYXNvbmFibGUuCkBAIC00Miw3ICs0OSw4IEBACiByYW5nZSBpcyB0aHVzIGZyb20gMCB0byAyLjA0MCBWLiBWb2x0YWdlIHZhbHVlcyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2UKIG5lZWQgZXh0ZXJuYWwgcmVzaXN0b3JzLiBBbiBleGNlcHRpb24gaXMgaW4wLCB3aGljaCBpcyB1c2VkIHRvIG1vbml0b3IKIHRoZSBjaGlwJ3Mgb3duIHBvd2VyIHNvdXJjZSAoKzMuM1YpLCBhbmQgaXMgZGl2aWRlZCBpbnRlcm5hbGx5IGJ5IGEKLWZhY3RvciAyLgorZmFjdG9yIDIuIEZvciB0aGUgRjcxODcyRi9GRywgaW45IChWU0IpIGFuZCBpbjEwIChiYXR0ZXJ5KSBhcmUgYWxzbworZGl2aWRlZCBpbnRlcm5hbGx5IGJ5IGEgZmFjdG9yIDIuCiAKIFRoZSB0d28gTFNCIG9mIHRoZSB2b2x0YWdlIGxpbWl0IHJlZ2lzdGVycyBhcmUgbm90IHVzZWQgKGFsd2F5cyAwKSwgc28KIHlvdSBjYW4gb25seSBzZXQgdGhlIGxpbWl0cyBpbiBzdGVwcyBvZiAzMiBtViAoYmVmb3JlIHNjYWxpbmcpLgpAQCAtNjEsOSArNjksMTIgQEAKIGluNiAgICAgVklONiAgICBWQ0MxLjVWICAgICAgMTBLICAgICAgIC0gICAgICAgIDEuMDAgICAgMS41MCBWCiBpbjcgICAgIFZJTjcgICAgVkNPUkUgICAgICAgIDEwSyAgICAgICAtICAgICAgICAxLjAwICAgfjEuNDAgViAoMSkKIGluOCAgICAgVklOOCAgICBWU0I1ViAgICAgICAyMDBLICAgICA0N0sgICAgICAgIDEuMDAgICAgMC45NSBWCitpbjEwICAgIFZTQiAgICAgVlNCMy4zViAgICAgaW50LiAgICBpbnQuICAgICAgICAyLjAwICAgIDEuNjUgViAoMykKK2luOSAgICAgVkJBVCAgICBWQkFUVEVSWSAgICBpbnQuICAgIGludC4gICAgICAgIDIuMDAgICAgMS41MCBWICgzKQogCiAoMSkgRGVwZW5kcyBvbiB5b3VyIGhhcmR3YXJlIHNldHVwLgogKDIpIE9idmlvdXNseSBub3QgY29ycmVjdCwgc3dhcHBpbmcgUjEgYW5kIFIyIHdvdWxkIG1ha2UgbW9yZSBzZW5zZS4KKygzKSBGNzE4NzJGL0ZHIG9ubHkuCiAKIFRoZXNlIHZhbHVlcyBjYW4gYmUgdXNlZCBhcyBoaW50cyBhdCBiZXN0LCBhcyBtb3RoZXJib2FyZCBtYW51ZmFjdHVyZXJzCiBhcmUgZnJlZSB0byB1c2UgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZXR1cC4gQXMgYSBtYXR0ZXIgb2YgZmFjdCwgdGhlCkBAIC0xMDMsMyArMTE0LDM4IEBACiBvciBhIHRoZXJtaXN0b3IuIFRoZSBkcml2ZXIgcmVwb3J0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG1vZGUsIGJ1dAogZG9lc24ndCBhbGxvdyBjaGFuZ2luZyBpdC4gSW4gdGhlb3J5LCB0aGUgQklPUyBzaG91bGQgaGF2ZSBjb25maWd1cmVkCiBldmVyeXRoaW5nIHByb3Blcmx5LgorCisKK0ZhbiBDb250cm9sCistLS0tLS0tLS0tLQorCitCb3RoIFBXTSAocHVsc2Utd2lkdGggbW9kdWxhdGlvbikgYW5kIERDIGZhbiBzcGVlZCBjb250cm9sIG1ldGhvZHMgYXJlCitzdXBwb3J0ZWQuIFRoZSByaWdodCBvbmUgdG8gdXNlIGRlcGVuZHMgb24gZXh0ZXJuYWwgY2lyY3VpdHJ5IG9uIHRoZQorbW90aGVyYm9hcmQsIHNvIHRoZSBkcml2ZXIgYXNzdW1lcyB0aGF0IHRoZSBCSU9TIHNldCB0aGUgbWV0aG9kCitwcm9wZXJseS4gVGhlIGRyaXZlciB3aWxsIHJlcG9ydCB0aGUgbWV0aG9kLCBidXQgd29uJ3QgbGV0IHlvdSBjaGFuZ2UKK2l0LgorCitXaGVuIHRoZSBQV00gbWV0aG9kIGlzIHVzZWQsIHlvdSBjYW4gc2VsZWN0IHRoZSBvcGVyYXRpbmcgZnJlcXVlbmN5LAorZnJvbSAxODcuNSBrSHogKGRlZmF1bHQpIHRvIDMxIEh6LiBUaGUgYmVzdCBmcmVxdWVuY3kgZGVwZW5kcyBvbiB0aGUKK2ZhbiBtb2RlbC4gQXMgYSBydWxlIG9mIHRodW1iLCBsb3dlciBmcmVxdWVuY2llcyBzZWVtIHRvIGdpdmUgYmV0dGVyCitjb250cm9sLCBidXQgbWF5IGdlbmVyYXRlIGFubm95aW5nIGhpZ2gtcGl0Y2ggbm9pc2UuIEZpbnRlayByZWNvbW1lbmRzCitub3QgZ29pbmcgYmVsb3cgMSBrSHosIGFzIHRoZSBmYW4gdGFjaG9tZXRlcnMgZ2V0IGNvbmZ1c2VkIGJ5IGxvd2VyCitmcmVxdWVuY2llcyBhcyB3ZWxsLgorCitXaGVuIHRoZSBEQyBtZXRob2QgaXMgdXNlZCwgRmludGVrIHJlY29tbWVuZHMgbm90IGdvaW5nIGJlbG93IDUgViwgd2hpY2gKK2NvcnJlc3BvbmRzIHRvIGEgcHdtIHZhbHVlIG9mIDEwNiBmb3IgdGhlIGRyaXZlci4gVGhlIGRyaXZlciBkb2Vzbid0CitlbmZvcmNlIHRoaXMgbGltaXQgdGhvdWdoLgorCitUaHJlZSBkaWZmZXJlbnQgZmFuIGNvbnRyb2wgbW9kZXMgYXJlIHN1cHBvcnRlZDoKKworKiBNYW51YWwgbW9kZQorICBZb3UgYXNrIGZvciBhIHNwZWNpZmljIFBXTSBkdXR5IGN5Y2xlIG9yIERDIHZvbHRhZ2UuCisKKyogRmFuIHNwZWVkIG1vZGUKKyAgWW91IGFzayBmb3IgYSBzcGVjaWZpYyBmYW4gc3BlZWQuIFRoaXMgbW9kZSBhc3N1bWVzIHRoYXQgcHdtMQorICBjb3JyZXNwb25kcyB0byBmYW4xLCBwd20yIHRvIGZhbjIgYW5kIHB3bTMgdG8gZmFuMy4KKworKiBUZW1wZXJhdHVyZSBtb2RlCisgIFlvdSBkZWZpbmUgMyB0ZW1wZXJhdHVyZS9mYW4gc3BlZWQgdHJpcCBwb2ludHMsIGFuZCB0aGUgZmFuIHNwZWVkIGlzCisgIGFkanVzdGVkIGRlcGVuZGluZyBvbiB0aGUgbWVhc3VyZWQgdGVtcGVyYXR1cmUsIHVzaW5nIGludGVycG9sYXRpb24uCisgIFRoaXMgbW9kZSBpcyBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3IGIvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3CmluZGV4IGU3ODNmZDYuLjc0YTgwOTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKQEAgLTksOCArOSw3IEBACiAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lml0ZS5jb20udHcvCiAgICogSVQ4NzEyRgogICAgIFByZWZpeDogJ2l0ODcxMicKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MmQKLSAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlICg4IEkvTyBwb3J0cykKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlICg4IEkvTyBwb3J0cykKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSVRFIHdlYnNpdGUKICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaXRlLmNvbS50dy8KICAgKiBJVDg3MTZGCkBAIC01Myw2ICs1MiwxOCBAQAogICBtaXNjb25maWd1cmVkIGJ5IEJJT1MgLSBQV00gdmFsdWVzIHdvdWxkIGJlIGludmVydGVkLiBUaGlzIG9wdGlvbiB0cmllcwogICB0byBmaXggdGhpcy4gUGxlYXNlIGNvbnRhY3QgeW91ciBCSU9TIG1hbnVmYWN0dXJlciBhbmQgYXNrIGhpbSBmb3IgZml4LgogCisKK0hhcmR3YXJlIEludGVyZmFjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIHRoZSBjaGlwcyBzdXBvcnRlZCBieSB0aGlzIGRyaXZlciBhcmUgTFBDIFN1cGVyLUkvTyBjaGlwcywgYWNjZXNzZWQKK3Rocm91Z2ggdGhlIExQQyBidXMgKElTQS1saWtlIEkvTyBwb3J0cykuIFRoZSBJVDg3MTJGIGFkZGl0aW9uYWxseSBoYXMgYW4KK1NNQnVzIGludGVyZmFjZSB0byB0aGUgaGFyZHdhcmUgbW9uaXRvcmluZyBmdW5jdGlvbnMuIFRoaXMgZHJpdmVyIG5vCitsb25nZXIgc3VwcG9ydHMgdGhpcyBpbnRlcmZhY2UgdGhvdWdoLCBhcyBpdCBpcyBzbG93ZXIgYW5kIGxlc3MgcmVsaWFibGUKK3RoYW4gdGhlIElTQSBhY2Nlc3MsIGFuZCB3YXMgb25seSBhdmFpbGFibGUgb24gYSBzbWFsbCBudW1iZXIgb2YKK21vdGhlcmJvYXJkIG1vZGVscy4KKworCiBEZXNjcmlwdGlvbgogLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9rOHRlbXAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2s4dGVtcAppbmRleCAzMGQxMjNiLi4wMDA1YzcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2s4dGVtcAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2s4dGVtcApAQCAtOCw3ICs4LDcgQEAKICAgICBEYXRhc2hlZXQ6IGh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzMyNTU5LnBkZgogCiBBdXRob3I6IFJ1ZG9sZiBNYXJlawotQ29udGFjdDogUnVkb2xmIE1hcmVrIDxyLm1hcmVrQHNoLmN2dXQuY3o+CitDb250YWN0OiBSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgogCiBEZXNjcmlwdGlvbgogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNyBiL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTA3MDhmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3NDI3CkBAIC0wLDAgKzEsMzggQEAKK0tlcm5lbCBkcml2ZXIgcGM4NzQyNworPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODc0MjcKKyAgICBQcmVmaXg6ICdwYzg3NDI3JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCisgICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3LndpbmJvbmQuY29tLnR3L0UtV0lOQk9OREhUTS9wYXJ0bmVyL2FwY18wMDcuaHRtbAorCitBdXRob3I6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorCitUaGFua3MgdG8gQW1pciBIYWJpYmkgYXQgQ2FuZGVsaXMgZm9yIHNldHRpbmcgdXAgYSB0ZXN0IHN5c3RlbSwgYW5kIHRvCitNaWNoYWVsIEtyZXNzIGZvciB0ZXN0aW5nIHNldmVyYWwgaXRlcmF0aW9ucyBvZiB0aGlzIGRyaXZlci4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgU3VwZXIgSS9PIGNoaXAgaW5jbHVkZXMgY29tcGxldGUgaGFyZHdhcmUKK21vbml0b3JpbmcgY2FwYWJpbGl0aWVzLiBJdCBjYW4gbW9uaXRvciB1cCB0byAxOCB2b2x0YWdlcywgOCBmYW5zIGFuZAorNiB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBPbmx5IHRoZSBmYW5zIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC4KKworVGhpcyBjaGlwIGFsc28gaGFzIGZhbiBjb250cm9sbGluZyBmZWF0dXJlcywgd2hpY2ggYXJlIG5vdCB5ZXQgc3VwcG9ydGVkCitieSB0aGlzIGRyaXZlciBlaXRoZXIuCisKK1RoZSBkcml2ZXIgYXNzdW1lcyB0aGF0IG5vIG1vcmUgdGhhbiBvbmUgY2hpcCBpcyBwcmVzZW50LCB3aGljaCBzZWVtcworcmVhc29uYWJsZS4KKworCitGYW4gTW9uaXRvcmluZworLS0tLS0tLS0tLS0tLS0KKworRmFuIHJvdGF0aW9uIHNwZWVkcyBhcmUgcmVwb3J0ZWQgYXMgMTQtYml0IHZhbHVlcyBmcm9tIGEgZ2F0ZWQgY2xvY2sKK3NpZ25hbC4gU3BlZWRzIGRvd24gdG8gODMgUlBNIGNhbiBiZSBtZWFzdXJlZC4KKworQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSByb3RhdGlvbiBzcGVlZCBkcm9wcyBiZWxvdyBhIHByb2dyYW1tYWJsZQorbGltaXQuIEFub3RoZXIgYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSBzcGVlZCBpcyB0b28gbG93IHRvIHRvIGJlIG1lYXN1cmVkCisoaW5jbHVkaW5nIHN0YWxsZWQgb3IgbWlzc2luZyBmYW4pLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQppbmRleCBkMWQzOTBhLi5lZmVmM2I5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQpAQCAtMjA4LDEyICsyMDgsMTQgQEAKICoqKioqKioqKioqKioqKioKIAogdGVtcFsxLSpdX3R5cGUJU2Vuc29yIHR5cGUgc2VsZWN0aW9uLgotCQlJbnRlZ2VycyAxIHRvIDQgb3IgdGhlcm1pc3RvciBCZXRhIHZhbHVlICh0eXBpY2FsbHkgMzQzNSkKKwkJSW50ZWdlcnMgMSB0byA2IG9yIHRoZXJtaXN0b3IgQmV0YSB2YWx1ZSAodHlwaWNhbGx5IDM0MzUpCiAJCVJXCiAJCTE6IFBJSS9DZWxlcm9uIERpb2RlCiAJCTI6IDM5MDQgdHJhbnNpc3RvcgogCQkzOiB0aGVybWFsIGRpb2RlCiAJCTQ6IHRoZXJtaXN0b3IgKGRlZmF1bHQvdW5rbm93biBCZXRhKQorCQk1OiBBTUQgQU1EU0kKKwkJNjogSW50ZWwgUEVDSQogCQlOb3QgYWxsIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYnkgYWxsIGNoaXBzCiAKIHRlbXBbMS0qXV9tYXgJVGVtcGVyYXR1cmUgbWF4IHZhbHVlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZgppbmRleCBjYWE2MTBhLi44YTE1YTc0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZgorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZgpAQCAtMTAsNyArMTAsNyBAQAogQXV0aG9yczoKICAgICAgICAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgICAgICAgIFl1YW4gTXUgKFdpbmJvbmQpCi0gICAgICAgIFJ1ZG9sZiBNYXJlayA8ci5tYXJla0BzaC5jdnV0LmN6PgorICAgICAgICBSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgogCiBEZXNjcmlwdGlvbgogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZCBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZAppbmRleCAxOWIyZWQ3Li5kYjk4ODFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkCkBAIC0xOCw3ICsxOCw3IEBACiAgICAgYW5kIE1hcmsgU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KICAgdzgzNzkyZC5jOgogICAgIENodW5oYW8gSHVhbmcgPERaU2hlbkBXaW5ib25kLmNvbS50dz4sCi0gICAgUnVkb2xmIE1hcmVrIDxyLm1hcmVrQHNoLmN2dXQuY3o+CisgICAgUnVkb2xmIE1hcmVrIDxyLm1hcmVrQGFzc2VtYmxlci5jej4KIAogQWRkaXRpb25hbCBjb250cmlidXRvcnM6CiAgICAgU3ZlbiBBbmRlcnMgPGFuZGVyc0BhbmR1cmFzLmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTMgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTE3MWE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTMKQEAgLTAsMCArMSwxMDYgQEAKK0tlcm5lbCBkcml2ZXIgdzgzNzkzCis9PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogV2luYm9uZCBXODM3OTNHL1c4Mzc5M1IKKyAgICBQcmVmaXg6ICd3ODM3OTMnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDJjIC0gMHgyZgorICAgIERhdGFzaGVldDogU3RpbGwgbm90IHB1Ymxpc2hlZAorCitBdXRob3JzOgorICAgIFl1YW4gTXUgKFdpbmJvbmQgRWxlY3Ryb25pY3MpCisgICAgUnVkb2xmIE1hcmVrIDxyLm1hcmVrQGFzc2VtYmxlci5jej4KKworCitNb2R1bGUgcGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0KKworKiByZXNldCBpbnQKKyAgKGRlZmF1bHQgMCkKKyAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHJlY29tbWVuZGVkLCBpdCB3aWxsIGxvc2UgbW90aGVyYm9hcmQgc3BlY2lmaWMKKyAgc2V0dGluZ3MuIFVzZSAncmVzZXQ9MScgdG8gcmVzZXQgdGhlIGNoaXAgd2hlbiBsb2FkaW5nIHRoaXMgbW9kdWxlLgorCisqIGZvcmNlX3N1YmNsaWVudHM9YnVzLGNhZGRyLHNhZGRyMSxzYWRkcjIKKyAgVGhpcyBpcyB1c2VkIHRvIGZvcmNlIHRoZSBpMmMgYWRkcmVzc2VzIGZvciBzdWJjbGllbnRzIG9mCisgIGEgY2VydGFpbiBjaGlwLiBUeXBpY2FsIHVzYWdlIGlzIGBmb3JjZV9zdWJjbGllbnRzPTAsMHgyZiwweDRhLDB4NGInCisgIHRvIGZvcmNlIHRoZSBzdWJjbGllbnRzIG9mIGNoaXAgMHgyZiBvbiBidXMgMCB0byBpMmMgYWRkcmVzc2VzCisgIDB4NGEgYW5kIDB4NGIuCisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgV2luYm9uZCBXODM3OTNHL1c4Mzc5M1IgY2hpcHMuCisKKyogRXhwb3J0ZWQgZmVhdHVyZXMKKyAgVGhpcyBkcml2ZXIgZXhwb3J0cyAxMCB2b2x0YWdlIHNlbnNvcnMsIHVwIHRvIDEyIGZhbiB0YWNob21ldGVyIGlucHV0cywKKyAgNiByZW1vdGUgdGVtcGVyYXR1cmVzLCB1cCB0byA4IHNldHMgb2YgUFdNIGZhbiBjb250cm9scywgU21hcnRGYW4KKyAgKGF1dG9tYXRpYyBmYW4gc3BlZWQgY29udHJvbCkgb24gYWxsIHRlbXBlcmF0dXJlL1BXTSBjb21iaW5hdGlvbnMsIDIKKyAgc2V0cyBvZiA2LXBpbiBDUFUgVklEIGlucHV0LgorCisqIFNlbnNvciByZXNvbHV0aW9ucworICBJZiB5b3VyIG1vdGhlcmJvYXJkIG1ha2VyIHVzZWQgdGhlIHJlZmVyZW5jZSBkZXNpZ24sIHRoZSByZXNvbHV0aW9uIG9mCisgIHZvbHRhZ2UwLTIgaXMgMm1WLCByZXNvbHV0aW9uIG9mIHZvbHRhZ2UzLzQvNSBpcyAxNm1WLCA4bVYgZm9yIHZvbHRhZ2U2LAorICAyNG1WIGZvciB2b2x0YWdlNy84LiBUZW1wMS00IGhhdmUgYSAwLjI1IGRlZ3JlZSBDZWxzaXVzIHJlc29sdXRpb24sCisgIHRlbXA1LTYgaGF2ZSBhIDEgZGVncmVlIENlbHNpaXMgcmVzb2x1dGlvbi4KKworKiBUZW1wZXJhdHVyZSBzZW5zb3IgdHlwZXMKKyAgVGVtcDEtNCBoYXZlIDIgcG9zc2libGUgdHlwZXMuIEl0IGNhbiBiZSByZWFkIGZyb20gKGFuZCB3cml0dGVuIHRvKQorICB0ZW1wWzEtNF1fdHlwZS4KKyAgLSBJZiB0aGUgdmFsdWUgaXMgMywgaXQgc3RhcnRzIG1vbml0b3JpbmcgdXNpbmcgYSByZW1vdGUgdGVybWFsIGRpb2RlCisgICAgKGRlZmF1bHQpLgorICAtIElmIHRoZSB2YWx1ZSBpcyA2LCBpdCBzdGFydHMgbW9uaXRvcmluZyB1c2luZyB0aGUgdGVtcGVyYXR1cmUgc2Vuc29yCisgICAgaW4gSW50ZWwgQ1BVIGFuZCBnZXQgcmVzdWx0IGJ5IFBFQ0kuCisgIFRlbXA1LTYgY2FuIGJlIGNvbm5lY3RlZCB0byBleHRlcm5hbCB0aGVybWlzdG9ycyAodmFsdWUgb2YKKyAgdGVtcFs1LTZdX3R5cGUgaXMgNCkuCisKKyogQWxhcm0gbWVjaGFuaXNtCisgIEZvciB2b2x0YWdlIHNlbnNvcnMsIGFuIGFsYXJtIHRyaWdnZXJzIGlmIHRoZSBtZWFzdXJlZCB2YWx1ZSBpcyBiZWxvdworICB0aGUgbG93IHZvbHRhZ2UgbGltaXQgb3Igb3ZlciB0aGUgaGlnaCB2b2x0YWdlIGxpbWl0LgorICBGb3IgdGVtcGVyYXR1cmUgc2Vuc29ycywgYW4gYWxhcm0gdHJpZ2dlcnMgaWYgdGhlIG1lYXN1cmVkIHZhbHVlIGdvZXMKKyAgYWJvdmUgdGhlIGhpZ2ggdGVtcGVyYXR1cmUgbGltaXQsIGFuZCB3ZWFycyBvZmYgb25seSBhZnRlciB0aGUgbWVhc3VyZWQKKyAgdmFsdWUgZHJvcHMgYmVsb3cgdGhlIGh5c3RlcmVzaXMgdmFsdWUuCisgIEZvciBmYW4gc2Vuc29ycywgYW4gYWxhcm0gdHJpZ2dlcnMgaWYgdGhlIG1lYXN1cmVkIHZhbHVlIGlzIGJlbG93IHRoZQorICBsb3cgc3BlZWQgbGltaXQuCisKKyogU21hcnRGYW4vUFdNIGNvbnRyb2wKKyAgSWYgeW91IHdhbnQgdG8gc2V0IGEgcHdtIGZhbiB0byBtYW51YWwgbW9kZSwgeW91IGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgaXQKKyAgaXMgbm90IGNvbnRyb2xsZWQgYnkgYW55IHRlbXAgY2hhbm5lbCwgZm9yIGV4YW1wbGUsIHlvdSB3YW50IHRvIHNldCBmYW4xCisgIHRvIG1hbnVhbCBtb2RlLCB5b3UgbmVlZCB0byBjaGVjayB0aGUgdmFsdWUgb2YgdGVtcFsxLTZdX2Zhbl9tYXAsIG1ha2UKKyAgc3VyZSBiaXQgMCBpcyBjbGVhcmVkIGluIHRoZSA2IHZhbHVlcy4gQW5kIHRoZW4gc2V0IHRoZSBwd20xIHZhbHVlIHRvCisgIGNvbnRyb2wgdGhlIGZhbi4KKworICBFYWNoIHRlbXBlcmF0dXJlIGNoYW5uZWwgY2FuIGNvbnRyb2wgYWxsIHRoZSA4IFBXTSBvdXRwdXRzIChieSBzZXR0aW5nIHRoZQorICBjb3JyZXNwb25kaW5nIGJpdCBpbiB0ZW1wWF9mYW5fbWFwKSwgeW91IGNhbiBzZXQgdGhlIHRlbXBlcmF0dXJlIGNoYW5uZWwKKyAgbW9kZSB1c2luZyB0ZW1wWzEtNl1fcHdtX2VuYWJsZSwgMiBpcyBUaGVybWFsIENydWlzZSBtb2RlIGFuZCAzCisgIGlzIHRoZSBTbWFydEZhbklJIG1vZGUuIFRlbXBlcmF0dXJlIGNoYW5uZWxzIHdpbGwgdHJ5IHRvIHNwZWVkIHVwIG9yCisgIHNsb3cgZG93biBhbGwgY29udHJvbGxlZCBmYW5zLCB0aGlzIG1lYW5zIG9uZSBmYW4gY2FuIHJlY2VpdmUgZGlmZmVyZW50CisgIFBXTSB2YWx1ZSByZXF1ZXN0cyBmcm9tIGRpZmZlcmVudCB0ZW1wZXJhdHVyZSBjaGFubmVscywgYnV0IHRoZSBjaGlwCisgIHdpbGwgYWx3YXlzIHBpY2sgdGhlIHNhZmVzdCAobWF4KSBQV00gdmFsdWUgZm9yIGVhY2ggZmFuLgorCisgIEluIFRoZXJtYWwgQ3J1aXNlIG1vZGUsIHRoZSBjaGlwIGF0dGVtcHRzIHRvIGtlZXAgdGhlIHRlbXBlcmF0dXJlIGF0IGEKKyAgcHJlZGVmaW5lZCB2YWx1ZSwgd2l0aGluIGEgdG9sZXJhbmNlIG1hcmdpbi4gU28gaWYgdGVtcFhfaW5wdXQgPgorICB0aGVybWFsX2NydWlzZVggKyB0b2xlcmFuY2VYLCB0aGUgY2hpcCB3aWxsIGluY3JlYXNlIHRoZSBQV00gdmFsdWUsCisgIGlmIHRlbXBYX2lucHV0IDwgdGhlcm1hbF9jcnVpc2VYIC0gdG9sZXJhbmNlWCwgdGhlIGNoaXAgd2lsbCBkZWNyZWFzZQorICB0aGUgUFdNIHZhbHVlLiBJZiB0aGUgdGVtcGVyYXR1cmUgaXMgd2l0aGluIHRoZSB0b2xlcmFuY2UgcmFuZ2UsIHRoZSBQV00KKyAgdmFsdWUgaXMgbGVmdCB1bmNoYW5nZWQuCisKKyAgU21hcnRGYW5JSSB3b3JrcyBkaWZmZXJlbnRseSwgeW91IGhhdmUgdG8gZGVmaW5lIHVwIHRvIDcgUFdNLCB0ZW1wZXJhdHVyZQorICB0cmlwIHBvaW50cywgZGVmaW5pbmcgYSBQV00vdGVtcGVyYXR1cmUgY3VydmUgd2hpY2ggdGhlIGNoaXAgd2lsbCBmb2xsb3cuCisgIFdoaWxlIG5vdCBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCBmcm9tIHRoZSBUaGVybWFsIENydWlzZSBtb2RlLCB0aGUKKyAgaW1wbGVtZW50YXRpb24gaXMgcXVpdGUgZGlmZmVyZW50LCBnaXZpbmcgeW91IGEgZmluZXItZ3JhaW5lZCBjb250cm9sLgorCisqIENoYXNzaXMKKyAgSWYgdGhlIGNhc2Ugb3BlbiBhbGFybSB0cmlnZ2VycywgaXQgd2lsbCBzdGF5IGluIHRoaXMgc3RhdGUgdW5sZXNzIGNsZWFyZWQKKyAgYnkgYW55IHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlICJjaGFzc2lzIi4KKworKiBWSUQgYW5kIFZSTQorICBUaGUgVlJNIHZlcnNpb24gaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgZG9uJ3QgbW9kaWZ5IHRoZSBpdCB1bmxlc3MgeW91CisgICpkbyoga25vdyB0aGUgY3B1IFZSTSB2ZXJzaW9uIGFuZCBpdCdzIG5vdCBwcm9wZXJseSBkZXRlY3RlZC4KKworCitOb3RlcworLS0tLS0KKworICBPbmx5IEZhbjEtNSBhbmQgUFdNMS0zIGFyZSBndWFyYW50ZWVkIHRvIGFsd2F5cyBleGlzdCwgb3RoZXIgZmFuIGlucHV0cyBhbmQKKyAgUFdNIG91dHB1dHMgbWF5IG9yIG1heSBub3QgZXhpc3QgZGVwZW5kaW5nIG9uIHRoZSBjaGlwIHBpbiBjb25maWd1cmF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExCmluZGV4IGRiMjk0ZWUuLjQ2MGRkNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYW1kODExMQorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEKQEAgLTUsNyArNSw3IEBACiAKIERhdGFzaGVldHM6CiAJQU1EIGRhdGFzaGVldCBub3QgeWV0IGF2YWlsYWJsZSwgYnV0IGFsbW9zdCBldmVyeXRoaW5nIGNhbiBiZSBmb3VuZAotCWluIHB1YmxpY2FsbHkgYXZhaWxhYmxlIEFDUEkgMi4wIHNwZWNpZmljYXRpb24sIHdoaWNoIHRoZSBhZGFwdGVyIAorCWluIHRoZSBwdWJsaWNseSBhdmFpbGFibGUgQUNQSSAyLjAgc3BlY2lmaWNhdGlvbiwgd2hpY2ggdGhlIGFkYXB0ZXIKIAlmb2xsb3dzLgogCiBBdXRob3I6IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MDEgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MDEKaW5kZXggZTQ2YzIzNC4uM2RiNjlhMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMQpAQCAtOSw3ICs5LDEwIEBACiAgICogSW50ZWwgODI4MDFFQi9FUiAoSUNINSkgKEhXIFBFQyBzdXBwb3J0ZWQsIDMyIGJ5dGUgYnVmZmVyIG5vdCBzdXBwb3J0ZWQpCiAgICogSW50ZWwgNjMwMEVTQgogICAqIEludGVsIDgyODAxRkIvRlIvRlcvRlJXIChJQ0g2KQotICAqIEludGVsIElDSDcKKyAgKiBJbnRlbCA4MjgwMUcgKElDSDcpCisgICogSW50ZWwgNjMxeEVTQi82MzJ4RVNCIChFU0IyKQorICAqIEludGVsIDgyODAxSCAoSUNIOCkKKyAgKiBJbnRlbCBJQ0g5CiAgICAgRGF0YXNoZWV0czogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJbnRlbCB3ZWJzaXRlCiAKIEF1dGhvcnM6IApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyCmluZGV4IGNkNDljNDIuLjdmNjFmYmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMgorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIKQEAgLTEwLDExICsxMCwxMSBAQAogICAqIG5Gb3JjZTQgTUNQNTEgICAgICAgICAgICAgIDEwZGU6MDI2NAogICAqIG5Gb3JjZTQgTUNQNTUgICAgICAgICAgICAgIDEwZGU6MDM2OAogCi1EYXRhc2hlZXQ6IG5vdCBwdWJsaWNhbGx5IGF2YWlsYWJsZSwgYnV0IHNlZW1zIHRvIGJlIHNpbWlsYXIgdG8gdGhlCitEYXRhc2hlZXQ6IG5vdCBwdWJsaWNseSBhdmFpbGFibGUsIGJ1dCBzZWVtcyB0byBiZSBzaW1pbGFyIHRvIHRoZQogICAgICAgICAgICBBTUQtODExMSBTTUJ1cyAyLjAgYWRhcHRlci4KIAogQXV0aG9yczoKLQlIYW5zLUZyaWVkZXIgVm9ndCA8aGZ2b2d0QGFyY29yLmRlPiwgCisJSGFucy1GcmllZGVyIFZvZ3QgPGhmdm9ndEBnbXgubmV0PiwKIAlUaG9tYXMgTGVpYm9sZCA8dGhvbWFzQHBseC5jb20+LCAKICAgICAgICAgUGF0cmljayBEcmVrZXIgPHBhdHJpY2tAZHJla2VyLmRlPgogCQpAQCAtMzgsNyArMzgsNyBAQAogLS0tLS0KIAogVGhlIFNNQnVzIGFkYXB0ZXIgaW4gdGhlIG5Gb3JjZTIgY2hpcHNldCBzZWVtcyB0byBiZSB2ZXJ5IHNpbWlsYXIgdG8gdGhlCi1TTUJ1cyAyLjAgYWRhcHRlciBpbiB0aGUgQU1ELTgxMTEgc291dGhicmlkZ2UuIEhvd2V2ZXIsIEkgY291bGQgb25seSBnZXQKK1NNQnVzIDIuMCBhZGFwdGVyIGluIHRoZSBBTUQtODExMSBzb3V0aCBicmlkZ2UuIEhvd2V2ZXIsIEkgY291bGQgb25seSBnZXQKIHRoZSBkcml2ZXIgdG8gd29yayB3aXRoIGRpcmVjdCBJL08gYWNjZXNzLCB3aGljaCBpcyBkaWZmZXJlbnQgdG8gdGhlIEVDCiBpbnRlcmZhY2Ugb2YgdGhlIEFNRC04MTExLiBUZXN0ZWQgb24gQXN1cyBBN044WC4gVGhlIEFDUEkgRFNEVCB0YWJsZSBvZiB0aGUKIEFzdXMgQTdOOFggbGlzdHMgdHdvIFNNQnVzZXMsIGJvdGggb2Ygd2hpY2ggYXJlIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dCBiL0RvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dAppbmRleCA5NTc1ZGUzLi4zOGZlMWYwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kzODYvYm9vdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMzg2L2Jvb3QudHh0CkBAIC0yLDcgKzIsNyBAQAogCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCQkgICAgSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+Ci0JCQlMYXN0IHVwZGF0ZSAyMDA2LTExLTE3CisJCQlMYXN0IHVwZGF0ZSAyMDA3LTAxLTI2CiAKIE9uIHRoZSBpMzg2IHBsYXRmb3JtLCB0aGUgTGludXgga2VybmVsIHVzZXMgYSByYXRoZXIgY29tcGxpY2F0ZWQgYm9vdAogY29udmVudGlvbi4gIFRoaXMgaGFzIGV2b2x2ZWQgcGFydGlhbGx5IGR1ZSB0byBoaXN0b3JpY2FsIGFzcGVjdHMsIGFzCkBAIC0xODYsNiArMTg2LDcgQEAKIAk3ICBHUnVCCiAJOCAgVS1CT09UCiAJOSAgWGVuCisJQSAgR3VqaW4KIAogCVBsZWFzZSBjb250YWN0IDxocGFAenl0b3IuY29tPiBpZiB5b3UgbmVlZCBhIGJvb3Rsb2FkZXIgSUQKIAl2YWx1ZSBhc3NpZ25lZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWJtLWFjcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9pYm0tYWNwaS50eHQKaW5kZXggZTUwNTk1Yi4uMDEzMmQzNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pYm0tYWNwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pYm0tYWNwaS50eHQKQEAgLTM5OCwyNiArMzk4LDY4IEBACiAKIE1vc3QgVGhpbmtQYWRzIGluY2x1ZGUgc2l4IG9yIG1vcmUgc2VwYXJhdGUgdGVtcGVyYXR1cmUgc2Vuc29ycyBidXQKIG9ubHkgZXhwb3NlIHRoZSBDUFUgdGVtcGVyYXR1cmUgdGhyb3VnaCB0aGUgc3RhbmRhcmQgQUNQSSBtZXRob2RzLgotVGhpcyBmZWF0dXJlIHNob3dzIHJlYWRpbmdzIGZyb20gdXAgdG8gZWlnaHQgZGlmZmVyZW50IHNlbnNvcnMuIFNvbWUKLXJlYWRpbmdzIG1heSBub3QgYmUgdmFsaWQsIGUuZy4gbWF5IHNob3cgbGFyZ2UgbmVnYXRpdmUgdmFsdWVzLiBGb3IKLWV4YW1wbGUsIG9uIHRoZSBYNDAsIGEgdHlwaWNhbCBvdXRwdXQgbWF5IGJlOgotCi10ZW1wZXJhdHVyZXM6ICAgNDIgNDIgNDUgNDEgMzYgLTEyOCAzMyAtMTI4Ci0KLVRob21hcyBHcnViZXIgdG9vayBoaXMgUjUxIGFwYXJ0IGFuZCB0cmFjZWQgYWxsIHNpeCBhY3RpdmUgc2Vuc29ycyBpbgotaGlzIGxhcHRvcCAodGhlIGxvY2F0aW9uIG9mIHNlbnNvcnMgbWF5IHZhcnkgb24gb3RoZXIgbW9kZWxzKToKLQotMTogIENQVQotMjogIE1pbmkgUENJIE1vZHVsZQotMzogIEhERAotNDogIEdQVQotNTogIEJhdHRlcnkKLTY6ICBOL0EKLTc6ICBCYXR0ZXJ5Ci04OiAgTi9BCitUaGlzIGZlYXR1cmUgc2hvd3MgcmVhZGluZ3MgZnJvbSB1cCB0byBlaWdodCBkaWZmZXJlbnQgc2Vuc29ycyBvbiBvbGRlcgorVGhpbmtQYWRzLCBhbmQgaXQgaGFzIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciB1cCB0byBzaXh0ZWVuIGRpZmZlcmVudAorc2Vuc29ycyBvbiBuZXdlciBUaGlua1BhZHMuICBSZWFkaW5ncyBmcm9tIHNlbnNvcnMgdGhhdCBhcmUgbm90IGF2YWlsYWJsZQorcmV0dXJuIC0xMjguCiAKIE5vIGNvbW1hbmRzIGNhbiBiZSB3cml0dGVuIHRvIHRoaXMgZmlsZS4KIAorRVhQRVJJTUVOVEFMOiBUaGUgMTYtc2Vuc29ycyBmZWF0dXJlIGlzIG1hcmtlZCBFWFBFUklNRU5UQUwgYmVjYXVzZSB0aGUKK2ltcGxlbWVudGF0aW9uIGRpcmVjdGx5IGFjY2Vzc2VzIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQgbWF5IG5vdCB3b3JrIGFzCitleHBlY3RlZC4gVVNFIFdJVEggQ0FVVElPTiEgVG8gdXNlIHRoaXMgZmVhdHVyZSwgeW91IG5lZWQgdG8gc3VwcGx5IHRoZQorZXhwZXJpbWVudGFsPTEgcGFyYW1ldGVyIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLiAgV2hlbiBFWFBFUklNRU5UQUwKK21vZGUgaXMgZW5hYmxlZCwgcmVhZGluZyB0aGUgZmlyc3QgOCBzZW5zb3JzIG9uIG5ld2VyIFRoaW5rUGFkcyB3aWxsCithbHNvIHVzZSBhbiBuZXcgZXhwZXJpbWVudGFsIHRoZXJtYWwgc2Vuc29yIGFjY2VzcyBtb2RlLgorCitGb3IgZXhhbXBsZSwgb24gdGhlIFg0MCwgYSB0eXBpY2FsIG91dHB1dCBtYXkgYmU6Cit0ZW1wZXJhdHVyZXM6ICAgNDIgNDIgNDUgNDEgMzYgLTEyOCAzMyAtMTI4CisKK0VYUEVSSU1FTlRBTDogT24gdGhlIFQ0My9wLCBhIHR5cGljYWwgb3V0cHV0IG1heSBiZToKK3RlbXBlcmF0dXJlczogICA0OCA0OCAzNiA1MiAzOCAtMTI4IDMxIC0xMjggNDggNTIgNDggLTEyOCAtMTI4IC0xMjggLTEyOCAtMTI4CisKK1RoZSBtYXBwaW5nIG9mIHRoZXJtYWwgc2Vuc29ycyB0byBwaHlzaWNhbCBsb2NhdGlvbnMgdmFyaWVzIGRlcGVuZGluZyBvbgorc3lzdGVtLWJvYXJkIG1vZGVsIChhbmQgdGh1cywgb24gVGhpbmtQYWQgbW9kZWwpLgorCitodHRwOi8vdGhpbmt3aWtpLm9yZy93aWtpL1RoZXJtYWxfU2Vuc29ycyBpcyBhIHB1YmxpYyB3aWtpIHBhZ2UgdGhhdAordHJpZXMgdG8gdHJhY2sgZG93biB0aGVzZSBsb2NhdGlvbnMgZm9yIHZhcmlvdXMgbW9kZWxzLgorCitNb3N0IChuZXdlcj8pIG1vZGVscyBzZWVtIHRvIGZvbGxvdyB0aGlzIHBhdHRlcm46CisKKzE6ICBDUFUKKzI6ICAoZGVwZW5kcyBvbiBtb2RlbCkKKzM6ICAoZGVwZW5kcyBvbiBtb2RlbCkKKzQ6ICBHUFUKKzU6ICBNYWluIGJhdHRlcnk6IG1haW4gc2Vuc29yCis2OiAgQmF5IGJhdHRlcnk6IG1haW4gc2Vuc29yCis3OiAgTWFpbiBiYXR0ZXJ5OiBzZWNvbmRhcnkgc2Vuc29yCis4OiAgQmF5IGJhdHRlcnk6IHNlY29uZGFyeSBzZW5zb3IKKzktMTU6IChkZXBlbmRzIG9uIG1vZGVsKQorCitGb3IgdGhlIFI1MSAoc291cmNlOiBUaG9tYXMgR3J1YmVyKToKKzI6ICBNaW5pLVBDSQorMzogIEludGVybmFsIEhERAorCitGb3IgdGhlIFQ0MywgVDQzL3AgKHNvdXJjZTogU2htaWRvYXgvVGhpbmt3aWtpLm9yZykKK2h0dHA6Ly90aGlua3dpa2kub3JnL3dpa2kvVGhlcm1hbF9TZW5zb3JzI1RoaW5rUGFkX1Q0My4yQ19UNDNwCisyOiAgU3lzdGVtIGJvYXJkLCBsZWZ0IHNpZGUgKG5lYXIgUENNQ0lBIHNsb3QpLCByZXBvcnRlZCBhcyBIREFQUyB0ZW1wCiszOiAgUENNQ0lBIHNsb3QKKzk6ICBNQ0ggKG5vcnRoYnJpZGdlKSB0byBEUkFNIEJ1cworMTA6IElDSCAoc291dGhicmlkZ2UpLCB1bmRlciBNaW5pLVBDSSBjYXJkLCB1bmRlciB0b3VjaHBhZAorMTE6IFBvd2VyIHJlZ3VsYXRvciwgdW5kZXJzaWRlIG9mIHN5c3RlbSBib2FyZCwgYmVsb3cgRjIga2V5CisKK1RoZSBBMzEgaGFzIGEgdmVyeSBhdHlwaWNhbCBsYXlvdXQgZm9yIHRoZSB0aGVybWFsIHNlbnNvcnMKKyhzb3VyY2U6IE1pbG9zIFBvcG92aWMsIGh0dHA6Ly90aGlua3dpa2kub3JnL3dpa2kvVGhlcm1hbF9TZW5zb3JzI1RoaW5rUGFkX0EzMSkKKzE6ICBDUFUKKzI6ICBNYWluIEJhdHRlcnk6IG1haW4gc2Vuc29yCiszOiAgUG93ZXIgQ29udmVydGVyCis0OiAgQmF5IEJhdHRlcnk6IG1haW4gc2Vuc29yCis1OiAgTUNIIChub3J0aGJyaWRnZSkKKzY6ICBQQ01DSUEvYW1iaWVudAorNzogIE1haW4gQmF0dGVyeTogc2Vjb25kYXJ5IHNlbnNvcgorODogIEJheSBCYXR0ZXJ5OiBzZWNvbmRhcnkgc2Vuc29yCisKKwogRVhQRVJJTUVOVEFMOiBFbWJlZGRlZCBjb250cm9sbGVyIHJlZ2lzdGVyIGR1bXAgLS0gL3Byb2MvYWNwaS9pYm0vZWNkdW1wCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTI5LDI3ICs1NzEsNTcgQEAKIFdJVEggQ0FVVElPTiEgVG8gdXNlIHRoaXMgZmVhdHVyZSwgeW91IG5lZWQgdG8gc3VwcGx5IHRoZQogZXhwZXJpbWVudGFsPTEgcGFyYW1ldGVyIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLgogCi1UaGlzIGZlYXR1cmUgYXR0ZW1wdHMgdG8gc2hvdyB0aGUgY3VycmVudCBmYW4gc3BlZWQuIFRoZSBzcGVlZCBpcyByZWFkCi1kaXJlY3RseSBmcm9tIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgb2YgdGhlIGVtYmVkZGVkIGNvbnRyb2xsZXIuIFRoaXMKLWlzIGtub3duIHRvIHdvcmsgb24gbGF0ZXIgUiwgVCBhbmQgWCBzZXJpZXMgVGhpbmtQYWRzIGJ1dCBtYXkgc2hvdyBhCi1ib2d1cyB2YWx1ZSBvbiBvdGhlciBtb2RlbHMuCitUaGlzIGZlYXR1cmUgYXR0ZW1wdHMgdG8gc2hvdyB0aGUgY3VycmVudCBmYW4gc3BlZWQsIGNvbnRyb2wgbW9kZSBhbmQKK290aGVyIGZhbiBkYXRhIHRoYXQgbWlnaHQgYmUgYXZhaWxhYmxlLiAgVGhlIHNwZWVkIGlzIHJlYWQgZGlyZWN0bHkKK2Zyb20gdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBvZiB0aGUgZW1iZWRkZWQgY29udHJvbGxlci4gIFRoaXMgaXMga25vd24KK3RvIHdvcmsgb24gbGF0ZXIgUiwgVCBhbmQgWCBzZXJpZXMgVGhpbmtQYWRzIGJ1dCBtYXkgc2hvdyBhIGJvZ3VzCit2YWx1ZSBvbiBvdGhlciBtb2RlbHMuCisKK01vc3QgVGhpbmtQYWQgZmFucyB3b3JrIGluICJsZXZlbHMiLiAgTGV2ZWwgMCBzdG9wcyB0aGUgZmFuLiAgVGhlIGhpZ2hlcgordGhlIGxldmVsLCB0aGUgaGlnaGVyIHRoZSBmYW4gc3BlZWQsIGFsdGhvdWdoIGFkamFjZW50IGxldmVscyBvZnRlbiBtYXAKK3RvIHRoZSBzYW1lIGZhbiBzcGVlZC4gIDcgaXMgdGhlIGhpZ2hlc3QgbGV2ZWwsIHdoZXJlIHRoZSBmYW4gcmVhY2hlcwordGhlIG1heGltdW0gcmVjb21tZW5kZWQgc3BlZWQuICBMZXZlbCAiYXV0byIgbWVhbnMgdGhlIEVDIGNoYW5nZXMgdGhlCitmYW4gbGV2ZWwgYWNjb3JkaW5nIHRvIHNvbWUgaW50ZXJuYWwgYWxnb3JpdGhtLCB1c3VhbGx5IGJhc2VkIG9uCityZWFkaW5ncyBmcm9tIHRoZSB0aGVybWFsIHNlbnNvcnMuICBMZXZlbCAiZGlzZW5nYWdlZCIgbWVhbnMgdGhlIEVDCitkaXNhYmxlcyB0aGUgc3BlZWQtbG9ja2VkIGNsb3NlZC1sb29wIGZhbiBjb250cm9sLCBhbmQgZHJpdmVzIHRoZSBmYW4gYXMKK2Zhc3QgYXMgaXQgY2FuIGdvLCB3aGljaCBtaWdodCBleGNlZWQgaGFyZHdhcmUgbGltaXRzLCBzbyB1c2UgdGhpcyBsZXZlbAord2l0aCBjYXV0aW9uLgorCitUaGUgZmFuIHVzdWFsbHkgcmFtcHMgdXAgb3IgZG93biBzbG93bHkgZnJvbSBvbmUgc3BlZWQgdG8gYW5vdGhlciwKK2FuZCBpdCBpcyBub3JtYWwgZm9yIHRoZSBFQyB0byB0YWtlIHNldmVyYWwgc2Vjb25kcyB0byByZWFjdCB0byBmYW4KK2NvbW1hbmRzLgogCiBUaGUgZmFuIG1heSBiZSBlbmFibGVkIG9yIGRpc2FibGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kczoKIAogCWVjaG8gZW5hYmxlICA+L3Byb2MvYWNwaS9pYm0vZmFuCiAJZWNobyBkaXNhYmxlID4vcHJvYy9hY3BpL2libS9mYW4KIAotV0FSTklORyBXQVJOSU5HIFdBUk5JTkc6IGRvIG5vdCBsZWF2ZSB0aGUgZmFuIGRpc2FibGVkIHVubGVzcyB5b3UgYXJlCi1tb25pdG9yaW5nIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3IgcmVhZGluZ3MgYW5kIHlvdSBhcmUgcmVhZHkgdG8gZW5hYmxlCi1pdCBpZiBuZWNlc3NhcnkgdG8gYXZvaWQgb3ZlcmhlYXRpbmcuCitQbGFjaW5nIGEgZmFuIG9uIGxldmVsIDAgaXMgdGhlIHNhbWUgYXMgZGlzYWJsaW5nIGl0LiAgRW5hYmxpbmcgYSBmYW4KK3dpbGwgdHJ5IHRvIHBsYWNlIGl0IGluIGEgc2FmZSBsZXZlbCBpZiBpdCBpcyB0b28gc2xvdyBvciBkaXNhYmxlZC4KIAotVGhlIGZhbiBvbmx5IHJ1bnMgaWYgaXQncyBlbmFibGVkICphbmQqIHRoZSB2YXJpb3VzIHRlbXBlcmF0dXJlCi1zZW5zb3JzIHdoaWNoIGNvbnRyb2wgaXQgcmVhZCBoaWdoIGVub3VnaC4gT24gdGhlIFg0MCwgdGhpcyBzZWVtcyB0bwotZGVwZW5kIG9uIHRoZSBDUFUgYW5kIEhERCB0ZW1wZXJhdHVyZXMuIFNwZWNpZmljYWxseSwgdGhlIGZhbiBpcwotdHVybmVkIG9uIHdoZW4gZWl0aGVyIHRoZSBDUFUgdGVtcGVyYXR1cmUgY2xpbWJzIHRvIDU2IGRlZ3JlZXMgb3IgdGhlCi1IREQgdGVtcGVyYXR1cmUgY2xpbWJzIHRvIDQ2IGRlZ3JlZXMuIFRoZSBmYW4gaXMgdHVybmVkIG9mZiB3aGVuIHRoZQotQ1BVIHRlbXBlcmF0dXJlIGRyb3BzIHRvIDQ5IGRlZ3JlZXMgYW5kIHRoZSBIREQgdGVtcGVyYXR1cmUgZHJvcHMgdG8KLTQxIGRlZ3JlZXMuIFRoZXNlIHRocmVzaG9sZHMgY2Fubm90IGN1cnJlbnRseSBiZSBjb250cm9sbGVkLgorV0FSTklORyBXQVJOSU5HIFdBUk5JTkc6IGRvIG5vdCBsZWF2ZSB0aGUgZmFuIGRpc2FibGVkIHVubGVzcyB5b3UgYXJlCittb25pdG9yaW5nIGFsbCBvZiB0aGUgdGVtcGVyYXR1cmUgc2Vuc29yIHJlYWRpbmdzIGFuZCB5b3UgYXJlIHJlYWR5IHRvCitlbmFibGUgaXQgaWYgbmVjZXNzYXJ5IHRvIGF2b2lkIG92ZXJoZWF0aW5nLgorCitBbiBlbmFibGVkIGZhbiBpbiBsZXZlbCAiYXV0byIgbWF5IHN0b3Agc3Bpbm5pbmcgaWYgdGhlIEVDIGRlY2lkZXMgdGhlCitUaGlua1BhZCBpcyBjb29sIGVub3VnaCBhbmQgZG9lc24ndCBuZWVkIHRoZSBleHRyYSBhaXJmbG93LiAgVGhpcyBpcworbm9ybWFsLCBhbmQgdGhlIEVDIHdpbGwgc3BpbiB0aGUgZmFuIHVwIGlmIHRoZSB2YXJpb3MgdGhlcm1hbCByZWFkaW5ncworcmlzZSB0b28gbXVjaC4KKworT24gdGhlIFg0MCwgdGhpcyBzZWVtcyB0byBkZXBlbmQgb24gdGhlIENQVSBhbmQgSEREIHRlbXBlcmF0dXJlcy4KK1NwZWNpZmljYWxseSwgdGhlIGZhbiBpcyB0dXJuZWQgb24gd2hlbiBlaXRoZXIgdGhlIENQVSB0ZW1wZXJhdHVyZQorY2xpbWJzIHRvIDU2IGRlZ3JlZXMgb3IgdGhlIEhERCB0ZW1wZXJhdHVyZSBjbGltYnMgdG8gNDYgZGVncmVlcy4gIFRoZQorZmFuIGlzIHR1cm5lZCBvZmYgd2hlbiB0aGUgQ1BVIHRlbXBlcmF0dXJlIGRyb3BzIHRvIDQ5IGRlZ3JlZXMgYW5kIHRoZQorSEREIHRlbXBlcmF0dXJlIGRyb3BzIHRvIDQxIGRlZ3JlZXMuICBUaGVzZSB0aHJlc2hvbGRzIGNhbm5vdAorY3VycmVudGx5IGJlIGNvbnRyb2xsZWQuCisKK1RoZSBmYW4gbGV2ZWwgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0aGUgY29tbWFuZDoKKworCWVjaG8gJ2xldmVsIDxsZXZlbD4nID4gL3Byb2MvYWNwaS9pYm0vdGhlcm1hbAorCitXaGVyZSA8bGV2ZWw+IGlzIGFuIGludGVnZXIgZnJvbSAwIHRvIDcsIG9yIG9uZSBvZiB0aGUgd29yZHMgImF1dG8iCitvciAiZGlzZW5nYWdlZCIgKHdpdGhvdXQgdGhlIHF1b3RlcykuICBOb3QgYWxsIFRoaW5rUGFkcyBzdXBwb3J0IHRoZQorImF1dG8iIGFuZCAiZGlzZW5nYWdlZCIgbGV2ZWxzLgogCiBPbiB0aGUgWDMxIGFuZCBYNDAgKGFuZCBPTkxZIG9uIHRob3NlIG1vZGVscyksIHRoZSBmYW4gc3BlZWQgY2FuIGJlCiBjb250cm9sbGVkIHRvIGEgY2VydGFpbiBkZWdyZWUuIE9uY2UgdGhlIGZhbiBpcyBydW5uaW5nLCBpdCBjYW4gYmUKQEAgLTU2MiwxMiArNjM0LDkgQEAKIGFueSBlZmZlY3Qgb3IgdGhlIGZhbiBzcGVlZCBldmVudHVhbGx5IHNldHRsZXMgc29tZXdoZXJlIGluIHRoYXQKIHJhbmdlLiBUaGUgZmFuIGNhbm5vdCBiZSBzdG9wcGVkIG9yIHN0YXJ0ZWQgd2l0aCB0aGlzIGNvbW1hbmQuCiAKLU9uIHRoZSA1NzAsIHRlbXBlcmF0dXJlIHJlYWRpbmdzIGFyZSBub3QgYXZhaWxhYmxlIHRocm91Z2ggdGhpcwotZmVhdHVyZSBhbmQgdGhlIGZhbiBjb250cm9sIHdvcmtzIGEgbGl0dGxlIGRpZmZlcmVudGx5LiBUaGUgZmFuIHNwZWVkCi1pcyByZXBvcnRlZCBpbiBsZXZlbHMgZnJvbSAwIChvZmYpIHRvIDcgKG1heCkgYW5kIGNhbiBiZSBjb250cm9sbGVkCi13aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKLQotCWVjaG8gJ2xldmVsIDxsZXZlbD4nID4gL3Byb2MvYWNwaS9pYm0vdGhlcm1hbAorVGhlIFRoaW5rUGFkJ3MgQUNQSSBEU0RUIGNvZGUgd2lsbCByZXByb2dyYW0gdGhlIGZhbiBvbiBpdHMgb3duIHdoZW4KK2NlcnRhaW4gY29uZGl0aW9ucyBhcmUgbWV0LiAgSXQgd2lsbCBvdmVycmlkZSBhbnkgZmFuIHByb2dyYW1taW5nIGRvbmUKK3Rocm91Z2ggaWJtLWFjcGkuCiAKIEVYUEVSSU1FTlRBTDogV0FOIC0tIC9wcm9jL2FjcGkvaWJtL3dhbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MDEsNiArNjcwLDI2IEBACiAKIAltb2Rwcm9iZSBpYm1fYWNwaSBob3RrZXk9ZW5hYmxlLDB4ZmZmZiB2aWRlbz1hdXRvX2Rpc2FibGUKIAorVGhlIGlibS1hY3BpIGtlcm5lbCBkcml2ZXIgY2FuIGJlIHByb2dyYW1tZWQgdG8gcmV2ZXJ0IHRoZSBmYW4gbGV2ZWwKK3RvIGEgc2FmZSBzZXR0aW5nIGlmIHVzZXJzcGFjZSBkb2VzIG5vdCBpc3N1ZSBvbmUgb2YgdGhlIGZhbiBjb21tYW5kczoKKyJlbmFibGUiLCAiZGlzYWJsZSIsICJsZXZlbCIgb3IgIndhdGNoZG9nIiB3aXRoaW4gYSBjb25maWd1cmFibGUKK2FtbW91bnQgb2YgdGltZS4gIFRvIGRvIHRoaXMsIHVzZSB0aGUgIndhdGNoZG9nIiBjb21tYW5kLgorCisJZWNobyAnd2F0Y2hkb2cgPGludGVydmFsPicgPiAvcHJvYy9hY3BpL2libS9mYW4KKworSW50ZXJ2YWwgaXMgdGhlIGFtbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRvIHdhaXQgZm9yIG9uZSBvZiB0aGUKK2Fib3ZlIG1lbnRpb25lZCBmYW4gY29tbWFuZHMgYmVmb3JlIHJlc2V0aW5nIHRoZSBmYW4gbGV2ZWwgdG8gYSBzYWZlCitvbmUuICBJZiBzZXQgdG8gemVybywgdGhlIHdhdGNoZG9nIGlzIGRpc2FibGVkIChkZWZhdWx0KS4gIFdoZW4gdGhlCit3YXRjaGRvZyB0aW1lciBydW5zIG91dCwgaXQgZG9lcyB0aGUgZXhhY3QgZXF1aXZhbGVudCBvZiB0aGUgImVuYWJsZSIKK2ZhbiBjb21tYW5kLgorCitOb3RlIHRoYXQgdGhlIHdhdGNoZG9nIHRpbWVyIHN0b3BzIGFmdGVyIGl0IGVuYWJsZXMgdGhlIGZhbi4gIEl0IHdpbGwKK2JlIHJlYXJtZWQgYWdhaW4gYXV0b21hdGljYWxseSAodXNpbmcgdGhlIHNhbWUgaW50ZXJ2YWwpIHdoZW4gb25lIG9mCit0aGUgYWJvdmUgbWVudGlvbmVkIGZhbiBjb21tYW5kcyBpcyByZWNlaXZlZC4gIFRoZSBmYW4gd2F0Y2hkb2cgaXMsCit0aGVyZWZvcmUsIG5vdCBzdWl0YWJsZSB0byBwcm90ZWN0IGFnYWluc3QgZmFuIG1vZGUgY2hhbmdlcyBtYWRlCit0aHJvdWdoIG1lYW5zIG90aGVyIHRoYW4gdGhlICJlbmFibGUiLCAiZGlzYWJsZSIsIGFuZCAibGV2ZWwiIGZhbgorY29tbWFuZHMuCisKIAogRXhhbXBsZSBDb25maWd1cmF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dAppbmRleCBlZGMwNGQ3Li41YThiZDViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0CkBAIC0xOTEsMyArMTkxLDUgQEAKIAkJCQkJPG1haWx0bzphaGVycm1hbkBkZS5pYm0uY29tPgogMHhGMwkwMC0zRgl2aWRlby9zaXNmYi5oCQlzaXNmYiAoaW4gZGV2ZWxvcG1lbnQpCiAJCQkJCTxtYWlsdG86dGhvbWFzQHdpbmlzY2hob2Zlci5uZXQ+CisweEY0CTAwLTFGCXZpZGVvL21ieGZiLmgJCW1ieGZiCisJCQkJCTxtYWlsdG86cmFwaEA4ZC5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLWRlY29kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtZGVjb2RpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGY3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLWRlY29kaW5nLnR4dApAQCAtMCwwICsxLDI0IEBACitUbyBkZWNvZGUgYSBoZXggSU9DVEwgY29kZToKKworTW9zdCBhcmNoaXRlY3VyZXMgdXNlIHRoaXMgZ2VuZXJpYyBmb3JtYXQsIGJ1dCBjaGVjaworaW5jbHVkZS9BUkNIL2lvY3RsLmggZm9yIHNwZWNpZmljcywgZS5nLiBwb3dlcnBjCit1c2VzIDMgYml0cyB0byBlbmNvZGUgcmVhZC93cml0ZSBhbmQgMTMgYml0cyBmb3Igc2l6ZS4KKworIGJpdHMgICAgbWVhbmluZworIDMxLTMwCTAwIC0gbm8gcGFyYW1ldGVyczogdXNlcyBfSU8gbWFjcm8KKwkxMCAtIHJlYWQ6IF9JT1IKKwkwMSAtIHdyaXRlOiBfSU9XCisJMTEgLSByZWFkL3dyaXRlOiBfSU9XUgorCisgMjktMTYJc2l6ZSBvZiBhcmd1bWVudHMKKworIDE1LTgJYXNjaWkgY2hhcmFjdGVyIHN1cHBvc2VkbHkKKwl1bmlxdWUgdG8gZWFjaCBkcml2ZXIKKworIDctMAlmdW5jdGlvbiAjCisKKworIFNvIGZvciBleGFtcGxlIDB4ODIxODcyMDEgaXMgYSByZWFkIHdpdGggYXJnIGxlbmd0aCBvZiAweDIxOCwKK2NoYXJhY3RlciAncicgZnVuY3Rpb24gMS4gR3JlcHBpbmcgdGhlIHNvdXJjZSByZXZlYWxzIHRoaXMgaXM6CisKKyNkZWZpbmUgVkZBVF9JT0NUTF9SRUFERElSX0JPVEggICAgICAgICBfSU9SKCdyJywgMSwgc3RydWN0IGRpcmVudCBbMl0pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CmluZGV4IDEyNTA5M2MuLjUzNmQ1YmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CkBAIC0yOSw3ICsyOSw3IEBACiAKIGNvbmZpZyBNT0RWRVJTSU9OUwogCWJvb2wgIlNldCB2ZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBtb2R1bGUgc3ltYm9scyIKLQlkZXBlbmRzIE1PRFVMRVMKKwlkZXBlbmRzIG9uIE1PRFVMRVMKIAloZWxwCiAJICBVc3VhbGx5LCBtb2R1bGVzIGhhdmUgdG8gYmUgcmVjb21waWxlZCB3aGVuZXZlciB5b3Ugc3dpdGNoIHRvIGEgbmV3CiAJICBrZXJuZWwuICAuLi4KQEAgLTE2Myw3ICsxNjMsNyBAQAogaXQgY2FuIGJlIHNwZWNpZmllZCBleHBsaWNpdGx5OgogCiBtZW51ICJOZXR3b3JrIGRldmljZSBzdXBwb3J0IgotCWRlcGVuZHMgTkVUCisJZGVwZW5kcyBvbiBORVQKIAogY29uZmlnIE5FVERFVklDRVMKIAkuLi4KQEAgLTE4OCwxMCArMTg4LDEwIEBACiAKIGNvbmZpZyBNT0RWRVJTSU9OUwogCWJvb2wgIlNldCB2ZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBtb2R1bGUgc3ltYm9scyIKLQlkZXBlbmRzIE1PRFVMRVMKKwlkZXBlbmRzIG9uIE1PRFVMRVMKIAogY29tbWVudCAibW9kdWxlIHN1cHBvcnQgZGlzYWJsZWQiCi0JZGVwZW5kcyAhTU9EVUxFUworCWRlcGVuZHMgb24gIU1PRFVMRVMKIAogTU9EVkVSU0lPTlMgZGlyZWN0bHkgZGVwZW5kcyBvbiBNT0RVTEVTLCB0aGlzIG1lYW5zIGl0J3Mgb25seSB2aXNpYmxlIGlmCiBNT0RVTEVTIGlzIGRpZmZlcmVudCBmcm9tICduJy4gVGhlIGNvbW1lbnQgb24gdGhlIG90aGVyIGhhbmQgaXMgYWx3YXlzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tkdW1wL2tkdW1wLnR4dCBiL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CmluZGV4IDk5ZjJkNGQuLjA3MzMwNjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CkBAIC0xNyw3ICsxNyw3IEBACiBtZW1vcnkgaW1hZ2UgdG8gYSBkdW1wIGZpbGUgb24gdGhlIGxvY2FsIGRpc2ssIG9yIGFjcm9zcyB0aGUgbmV0d29yayB0bwogYSByZW1vdGUgc3lzdGVtLgogCi1LZHVtcCBhbmQga2V4ZWMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgb24gdGhlIHg4NiwgeDg2XzY0LCBhbmQgcHBjNjQKK0tkdW1wIGFuZCBrZXhlYyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCBvbiB0aGUgeDg2LCB4ODZfNjQsIHBwYzY0IGFuZCBpYTY0CiBhcmNoaXRlY3R1cmVzLgogCiBXaGVuIHRoZSBzeXN0ZW0ga2VybmVsIGJvb3RzLCBpdCByZXNlcnZlcyBhIHNtYWxsIHNlY3Rpb24gb2YgbWVtb3J5IGZvcgpAQCAtNTQsNTkgKzU0LDY5IEBACiBTZXR1cCBhbmQgSW5zdGFsbGF0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09CiAKLUluc3RhbGwga2V4ZWMtdG9vbHMgYW5kIHRoZSBLZHVtcCBwYXRjaAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbnN0YWxsIGtleGVjLXRvb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tCiAKIDEpIExvZ2luIGFzIHRoZSByb290IHVzZXIuCiAKIDIpIERvd25sb2FkIHRoZSBrZXhlYy10b29scyB1c2VyLXNwYWNlIHBhY2thZ2UgZnJvbSB0aGUgZm9sbG93aW5nIFVSTDoKIAotICAgaHR0cDovL3d3dy54bWlzc2lvbi5jb20vfmViaWVkZXJtL2ZpbGVzL2tleGVjL2tleGVjLXRvb2xzLTEuMTAxLnRhci5negoraHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2hvcm1zL2tleGVjLXRvb2xzL2tleGVjLXRvb2xzLXRlc3RpbmcudGFyLmd6CisKK1RoaXMgaXMgYSBzeW1saW5rIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiwgd2hpY2ggYXQgdGhlIHRpbWUgb2Ygd3JpdGluZyBpcworMjAwNjEyMTQsIHRoZSBvbmx5IHJlbGVhc2Ugb2Yga2V4ZWMtdG9vbHMtdGVzdGluZyBzbyBmYXIuIEFzIG90aGVyIHZlcnNpb25zCithcmUgbWFkZSByZWxlYXNlZCwgdGhlIG9sZGVyIG9uZXNlIHdpbGwgcmVtYWluIGF2YWlsYWJsZSBhdAoraHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2hvcm1zL2tleGVjLXRvb2xzLworCitOb3RlOiBMYXRlc3Qga2V4ZWMtdG9vbHMtdGVzdGluZyBnaXQgdHJlZSBpcyBhdmFpbGFibGUgYXQKKworZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2hvcm1zL2tleGVjLXRvb2xzLXRlc3RpbmcuZ2l0CitvcgoraHR0cDovL3d3dy5rZXJuZWwub3JnL2dpdC8/cD1saW51eC9rZXJuZWwvZ2l0L2hvcm1zL2tleGVjLXRvb2xzLXRlc3RpbmcuZ2l0O2E9c3VtbWFyeQogCiAzKSBVbnBhY2sgdGhlIHRhcmJhbGwgd2l0aCB0aGUgdGFyIGNvbW1hbmQsIGFzIGZvbGxvd3M6CiAKLSAgIHRhciB4dnB6ZiBrZXhlYy10b29scy0xLjEwMS50YXIuZ3oKKyAgIHRhciB4dnB6ZiBrZXhlYy10b29scy10ZXN0aW5nLnRhci5negogCi00KSBEb3dubG9hZCB0aGUgbGF0ZXN0IGNvbnNvbGlkYXRlZCBLZHVtcCBwYXRjaCBmcm9tIHRoZSBmb2xsb3dpbmcgVVJMOgorNCkgQ2hhbmdlIHRvIHRoZSBrZXhlYy10b29scyBkaXJlY3RvcnksIGFzIGZvbGxvd3M6CiAKLSAgIGh0dHA6Ly9sc2Uuc291cmNlZm9yZ2UubmV0L2tkdW1wLworICAgY2Qga2V4ZWMtdG9vbHMtdGVzdGluZy1WRVJTSU9OCiAKLSAgIChUaGlzIGxvY2F0aW9uIGlzIGJlaW5nIHVzZWQgdW50aWwgYWxsIHRoZSB1c2VyLXNwYWNlIEtkdW1wIHBhdGNoZXMKLSAgIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIGtleGVjLXRvb2xzIHBhY2thZ2UuKQotCi01KSBDaGFuZ2UgdG8gdGhlIGtleGVjLXRvb2xzLTEuMTAxIGRpcmVjdG9yeSwgYXMgZm9sbG93czoKLQotICAgY2Qga2V4ZWMtdG9vbHMtMS4xMDEKLQotNikgQXBwbHkgdGhlIGNvbnNvbGlkYXRlZCBwYXRjaCB0byB0aGUga2V4ZWMtdG9vbHMtMS4xMDEgc291cmNlIHRyZWUKLSAgIHdpdGggdGhlIHBhdGNoIGNvbW1hbmQsIGFzIGZvbGxvd3MuIChNb2RpZnkgdGhlIHBhdGggdG8gdGhlIGRvd25sb2FkZWQKLSAgIHBhdGNoIGFzIG5lY2Vzc2FyeS4pCi0KLSAgIHBhdGNoIC1wMSA8IC9wYXRoLXRvLWtkdW1wLXBhdGNoL2tleGVjLXRvb2xzLTEuMTAxLWtkdW1wLnBhdGNoCi0KLTcpIENvbmZpZ3VyZSB0aGUgcGFja2FnZSwgYXMgZm9sbG93czoKKzUpIENvbmZpZ3VyZSB0aGUgcGFja2FnZSwgYXMgZm9sbG93czoKIAogICAgLi9jb25maWd1cmUKIAotOCkgQ29tcGlsZSB0aGUgcGFja2FnZSwgYXMgZm9sbG93czoKKzYpIENvbXBpbGUgdGhlIHBhY2thZ2UsIGFzIGZvbGxvd3M6CiAKICAgIG1ha2UKIAotOSkgSW5zdGFsbCB0aGUgcGFja2FnZSwgYXMgZm9sbG93czoKKzcpIEluc3RhbGwgdGhlIHBhY2thZ2UsIGFzIGZvbGxvd3M6CiAKICAgIG1ha2UgaW5zdGFsbAogCiAKLURvd25sb2FkIGFuZCBidWlsZCB0aGUgc3lzdGVtIGFuZCBkdW1wLWNhcHR1cmUga2VybmVscwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCdWlsZCB0aGUgc3lzdGVtIGFuZCBkdW1wLWNhcHR1cmUga2VybmVscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZXJlIGFyZSB0d28gcG9zc2libGUgbWV0aG9kcyBvZiB1c2luZyBLZHVtcC4KIAotRG93bmxvYWQgdGhlIG1haW5saW5lICh2YW5pbGxhKSBrZXJuZWwgc291cmNlIGNvZGUgKDIuNi4xMy1yYzEgb3IgbmV3ZXIpCi1mcm9tIGh0dHA6Ly93d3cua2VybmVsLm9yZy4gVHdvIGtlcm5lbHMgbXVzdCBiZSBidWlsdDogYSBzeXN0ZW0ga2VybmVsCi1hbmQgYSBkdW1wLWNhcHR1cmUga2VybmVsLiBVc2UgdGhlIGZvbGxvd2luZyBzdGVwcyB0byBjb25maWd1cmUgdGhlc2UKLWtlcm5lbHMgd2l0aCB0aGUgbmVjZXNzYXJ5IGtleGVjIGFuZCBLZHVtcCBmZWF0dXJlczoKKzEpIEJ1aWxkIGEgc2VwYXJhdGUgY3VzdG9tIGR1bXAtY2FwdHVyZSBrZXJuZWwgZm9yIGNhcHR1cmluZyB0aGUKKyAgIGtlcm5lbCBjb3JlIGR1bXAuCiAKLVN5c3RlbSBrZXJuZWwKLS0tLS0tLS0tLS0tLS0KKzIpIE9yIHVzZSB0aGUgc3lzdGVtIGtlcm5lbCBiaW5hcnkgaXRzZWxmIGFzIGR1bXAtY2FwdHVyZSBrZXJuZWwgYW5kIHRoZXJlIGlzCisgICBubyBuZWVkIHRvIGJ1aWxkIGEgc2VwYXJhdGUgZHVtcC1jYXB0dXJlIGtlcm5lbC4gVGhpcyBpcyBwb3NzaWJsZQorICAgb25seSB3aXRoIHRoZSBhcmNoaXRlY3V0cmVzIHdoaWNoIHN1cHBvcnQgYSByZWxvY2F0YWJsZSBrZXJuZWwuIEFzCisgICBvZiB0b2RheSBpMzg2IGFuZCBpYTY0IGFyY2hpdGVjdHVyZXMgc3VwcG9ydCByZWxvY2F0YWJsZSBrZXJuZWwuCisKK0J1aWxkaW5nIGEgcmVsb2NhdGFibGUga2VybmVsIGlzIGFkdmFudGFnZW91cyBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IHRoYXQKK29uZSBkb2VzIG5vdCBoYXZlIHRvIGJ1aWxkIGEgc2Vjb25kIGtlcm5lbCBmb3IgY2FwdHVyaW5nIHRoZSBkdW1wLiBCdXQKK2F0IHRoZSBzYW1lIHRpbWUgb25lIG1pZ2h0IHdhbnQgdG8gYnVpbGQgYSBjdXN0b20gZHVtcCBjYXB0dXJlIGtlcm5lbAorc3VpdGFibGUgdG8gaGlzIG5lZWRzLgorCitGb2xsb3dpbmcgYXJlIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgcmVxdWlyZWQgZm9yIHN5c3RlbSBhbmQKK2R1bXAtY2FwdHVyZSBrZXJuZWxzIGZvciBlbmFibGluZyBrZHVtcCBzdXBwb3J0LgorCitTeXN0ZW0ga2VybmVsIGNvbmZpZyBvcHRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIDEpIEVuYWJsZSAia2V4ZWMgc3lzdGVtIGNhbGwiIGluICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMuIgogCkBAIC0xMzIsODkgKzE0MiwxODMgQEAKICAgIGFuYWx5c2lzIHRvb2xzIHJlcXVpcmUgYSB2bWxpbnV4IHdpdGggZGVidWcgc3ltYm9scyBpbiBvcmRlciB0byByZWFkCiAgICBhbmQgYW5hbHl6ZSBhIGR1bXAgZmlsZS4KIAotNCkgTWFrZSBhbmQgaW5zdGFsbCB0aGUga2VybmVsIGFuZCBpdHMgbW9kdWxlcy4gVXBkYXRlIHRoZSBib290IGxvYWRlcgotICAgKHN1Y2ggYXMgZ3J1YiwgeWFib290LCBvciBsaWxvKSBjb25maWd1cmF0aW9uIGZpbGVzIGFzIG5lY2Vzc2FyeS4KK0R1bXAtY2FwdHVyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgKEFyY2ggSW5kZXBlbmRlbnQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi01KSBCb290IHRoZSBzeXN0ZW0ga2VybmVsIHdpdGggdGhlIGJvb3QgcGFyYW1ldGVyICJjcmFzaGtlcm5lbD1ZQFgiLAotICAgd2hlcmUgWSBzcGVjaWZpZXMgaG93IG11Y2ggbWVtb3J5IHRvIHJlc2VydmUgZm9yIHRoZSBkdW1wLWNhcHR1cmUga2VybmVsCi0gICBhbmQgWCBzcGVjaWZpZXMgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHJlc2VydmVkIG1lbW9yeS4gRm9yIGV4YW1wbGUsCi0gICAiY3Jhc2hrZXJuZWw9NjRNQDE2TSIgdGVsbHMgdGhlIHN5c3RlbSBrZXJuZWwgdG8gcmVzZXJ2ZSA2NCBNQiBvZiBtZW1vcnkKLSAgIHN0YXJ0aW5nIGF0IHBoeXNpY2FsIGFkZHJlc3MgMHgwMTAwMDAwMCBmb3IgdGhlIGR1bXAtY2FwdHVyZSBrZXJuZWwuCisxKSBFbmFibGUgImtlcm5lbCBjcmFzaCBkdW1wcyIgc3VwcG9ydCB1bmRlciAiUHJvY2Vzc29yIHR5cGUgYW5kCisgICBmZWF0dXJlcyI6CiAKLSAgIE9uIHg4NiBhbmQgeDg2XzY0LCB1c2UgImNyYXNoa2VybmVsPTY0TUAxNk0iLgorICAgQ09ORklHX0NSQVNIX0RVTVA9eQogCi0gICBPbiBwcGM2NCwgdXNlICJjcmFzaGtlcm5lbD0xMjhNQDMyTSIuCisyKSBFbmFibGUgIi9wcm9jL3ZtY29yZSBzdXBwb3J0IiB1bmRlciAiRmlsZXN5c3RlbXMiIC0+ICJQc2V1ZG8gZmlsZXN5c3RlbXMiLgogCisgICBDT05GSUdfUFJPQ19WTUNPUkU9eQorICAgKENPTkZJR19QUk9DX1ZNQ09SRSBpcyBzZXQgYnkgZGVmYXVsdCB3aGVuIENPTkZJR19DUkFTSF9EVU1QIGlzIHNlbGVjdGVkLikKIAotVGhlIGR1bXAtY2FwdHVyZSBrZXJuZWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLTEpIFVuZGVyICJHZW5lcmFsIHNldHVwLCIgYXBwZW5kICIta2R1bXAiIHRvIHRoZSBjdXJyZW50IHN0cmluZyBpbgotICAgIkxvY2FsIHZlcnNpb24uIgotCi0yKSBPbiB4ODYsIGVuYWJsZSBoaWdoIG1lbW9yeSBzdXBwb3J0IHVuZGVyICJQcm9jZXNzb3IgdHlwZSBhbmQKK0R1bXAtY2FwdHVyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgKEFyY2ggRGVwZW5kZW50LCBpMzg2KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEpIE9uIHg4NiwgZW5hYmxlIGhpZ2ggbWVtb3J5IHN1cHBvcnQgdW5kZXIgIlByb2Nlc3NvciB0eXBlIGFuZAogICAgZmVhdHVyZXMiOgogCiAgICBDT05GSUdfSElHSE1FTTY0Rz15CiAgICBvcgogICAgQ09ORklHX0hJR0hNRU00RwogCi0zKSBPbiB4ODYgYW5kIHg4Nl82NCwgZGlzYWJsZSBzeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0CisyKSBPbiB4ODYgYW5kIHg4Nl82NCwgZGlzYWJsZSBzeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0CiAgICB1bmRlciAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIjoKIAogICAgQ09ORklHX1NNUD1uCisKICAgIChJZiBDT05GSUdfU01QPXksIHRoZW4gc3BlY2lmeSBtYXhjcHVzPTEgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUKICAgIHdoZW4gbG9hZGluZyB0aGUgZHVtcC1jYXB0dXJlIGtlcm5lbCwgc2VlIHNlY3Rpb24gIkxvYWQgdGhlIER1bXAtY2FwdHVyZQogICAgS2VybmVsIi4pCiAKLTQpIE9uIHBwYzY0LCBkaXNhYmxlIE5VTUEgc3VwcG9ydCBhbmQgZW5hYmxlIEVNQkVEREVEIHN1cHBvcnQ6CiszKSBJZiBvbmUgd2FudHMgdG8gYnVpbGQgYW5kIHVzZSBhIHJlbG9jYXRhYmxlIGtlcm5lbCwKKyAgIEVuYWJsZSAiQnVpbGQgYSByZWxvY2F0YWJsZSBrZXJuZWwiIHN1cHBvcnQgdW5kZXIgIlByb2Nlc3NvciB0eXBlIGFuZAorICAgZmVhdHVyZXMiCiAKLSAgIENPTkZJR19OVU1BPW4KLSAgIENPTkZJR19FTUJFRERFRD15Ci0gICBDT05GSUdfRUVIPU4gZm9yIHRoZSBkdW1wLWNhcHR1cmUga2VybmVsCisgICBDT05GSUdfUkVMT0NBVEFCTEU9eQogCi01KSBFbmFibGUgImtlcm5lbCBjcmFzaCBkdW1wcyIgc3VwcG9ydCB1bmRlciAiUHJvY2Vzc29yIHR5cGUgYW5kCi0gICBmZWF0dXJlcyI6Cis0KSBVc2UgYSBzdWl0YWJsZSB2YWx1ZSBmb3IgIlBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUgdGhlIGtlcm5lbCBpcworICAgbG9hZGVkIiAodW5kZXIgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIpLiBUaGlzIG9ubHkgYXBwZWFycyB3aGVuCisgICAia2VybmVsIGNyYXNoIGR1bXBzIiBpcyBlbmFibGVkLiBBIHN1aXRhYmxlIHZhbHVlIGRlcGVuZHMgdXBvbgorICAgd2hldGhlciBrZXJuZWwgaXMgcmVsb2NhdGFibGUgb3Igbm90LgogCi0gICBDT05GSUdfQ1JBU0hfRFVNUD15CisgICBJZiB5b3UgYXJlIHVzaW5nIGEgcmVsb2NhdGFibGUga2VybmVsIHVzZSBDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgxMDAwMDAKKyAgIFRoaXMgd2lsbCBjb21waWxlIHRoZSBrZXJuZWwgZm9yIHBoeXNpY2FsIGFkZHJlc3MgMU1CLCBidXQgZ2l2ZW4gdGhlIGZhY3QKKyAgIGtlcm5lbCBpcyByZWxvY2F0YWJsZSwgaXQgY2FuIGJlIHJ1biBmcm9tIGFueSBwaHlzaWNhbCBhZGRyZXNzIGhlbmNlCisgICBrZXhlYyBib290IGxvYWRlciB3aWxsIGxvYWQgaXQgaW4gbWVtb3J5IHJlZ2lvbiByZXNlcnZlZCBmb3IgZHVtcC1jYXB0dXJlCisgICBrZXJuZWwuCiAKLTYpIFVzZSBhIHN1aXRhYmxlIHZhbHVlIGZvciAiUGh5c2ljYWwgYWRkcmVzcyB3aGVyZSB0aGUga2VybmVsIGlzCisgICBPdGhlcndpc2UgaXQgc2hvdWxkIGJlIHRoZSBzdGFydCBvZiBtZW1vcnkgcmVnaW9uIHJlc2VydmVkIGZvcgorICAgc2Vjb25kIGtlcm5lbCB1c2luZyBib290IHBhcmFtZXRlciAiY3Jhc2hrZXJuZWw9WUBYIi4gSGVyZSBYIGlzCisgICBzdGFydCBvZiBtZW1vcnkgcmVnaW9uIHJlc2VydmVkIGZvciBkdW1wLWNhcHR1cmUga2VybmVsLgorICAgR2VuZXJhbGx5IFggaXMgMTZNQiAoMHgxMDAwMDAwKS4gU28geW91IGNhbiBzZXQKKyAgIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDEwMDAwMDAKKworNSkgTWFrZSBhbmQgaW5zdGFsbCB0aGUga2VybmVsIGFuZCBpdHMgbW9kdWxlcy4gRE8gTk9UIGFkZCB0aGlzIGtlcm5lbAorICAgdG8gdGhlIGJvb3QgbG9hZGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKK0R1bXAtY2FwdHVyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgKEFyY2ggRGVwZW5kZW50LCB4ODZfNjQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxKSBPbiB4ODYgYW5kIHg4Nl82NCwgZGlzYWJsZSBzeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0CisgICB1bmRlciAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIjoKKworICAgQ09ORklHX1NNUD1uCisKKyAgIChJZiBDT05GSUdfU01QPXksIHRoZW4gc3BlY2lmeSBtYXhjcHVzPTEgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUKKyAgIHdoZW4gbG9hZGluZyB0aGUgZHVtcC1jYXB0dXJlIGtlcm5lbCwgc2VlIHNlY3Rpb24gIkxvYWQgdGhlIER1bXAtY2FwdHVyZQorICAgS2VybmVsIi4pCisKKzIpIFVzZSBhIHN1aXRhYmxlIHZhbHVlIGZvciAiUGh5c2ljYWwgYWRkcmVzcyB3aGVyZSB0aGUga2VybmVsIGlzCiAgICBsb2FkZWQiICh1bmRlciAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIikuIFRoaXMgb25seSBhcHBlYXJzIHdoZW4KICAgICJrZXJuZWwgY3Jhc2ggZHVtcHMiIGlzIGVuYWJsZWQuIEJ5IGRlZmF1bHQgdGhpcyB2YWx1ZSBpcyAweDEwMDAwMDAKICAgICgxNk1CKS4gSXQgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIFggaW4gdGhlICJjcmFzaGtlcm5lbD1ZQFgiIGJvb3QKLSAgIHBhcmFtZXRlciBkaXNjdXNzZWQgYWJvdmUuCisgICBwYXJhbWV0ZXIuCiAKLSAgIE9uIHg4NiBhbmQgeDg2XzY0LCB1c2UgIkNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDEwMDAwMDAiLgorICAgRm9yIHg4Nl82NCwgbm9ybWFsbHkgIkNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDEwMDAwMDAiLgogCi0gICBPbiBwcGM2NCB0aGUgdmFsdWUgaXMgYXV0b21hdGljYWxseSBzZXQgYXQgMzJNQiB3aGVuCi0gICBDT05GSUdfQ1JBU0hfRFVNUCBpcyBzZXQuCi0KLTYpIE9wdGlvbmFsbHkgZW5hYmxlICIvcHJvYy92bWNvcmUgc3VwcG9ydCIgdW5kZXIgIkZpbGVzeXN0ZW1zIiAtPgotICAgIlBzZXVkbyBmaWxlc3lzdGVtcyIuCi0KLSAgIENPTkZJR19QUk9DX1ZNQ09SRT15Ci0gICAoQ09ORklHX1BST0NfVk1DT1JFIGlzIHNldCBieSBkZWZhdWx0IHdoZW4gQ09ORklHX0NSQVNIX0RVTVAgaXMgc2VsZWN0ZWQuKQotCi03KSBNYWtlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgYW5kIGl0cyBtb2R1bGVzLiBETyBOT1QgYWRkIHRoaXMga2VybmVsCiszKSBNYWtlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgYW5kIGl0cyBtb2R1bGVzLiBETyBOT1QgYWRkIHRoaXMga2VybmVsCiAgICB0byB0aGUgYm9vdCBsb2FkZXIgY29uZmlndXJhdGlvbiBmaWxlcy4KIAorRHVtcC1jYXB0dXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyAoQXJjaCBEZXBlbmRlbnQsIHBwYzY0KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistICBNYWtlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgYW5kIGl0cyBtb2R1bGVzLiBETyBOT1QgYWRkIHRoaXMga2VybmVsCisgICB0byB0aGUgYm9vdCBsb2FkZXIgY29uZmlndXJhdGlvbiBmaWxlcy4KKworRHVtcC1jYXB0dXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyAoQXJjaCBEZXBlbmRlbnQsIGlhNjQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gTm8gc3BlY2lmaWMgb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gY3JlYXRlIGEgZHVtcC1jYXB0dXJlIGtlcm5lbAorICBmb3IgaWE2NCwgb3RoZXIgdGhhbiB0aG9zZSBzcGVjaWZpZWQgaW4gdGhlIGFyY2ggaWRlcGVuZGVudCBzZWN0aW9uCisgIGFib3ZlLiBUaGlzIG1lYW5zIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gdXNlIHRoZSBzeXN0ZW0ga2VybmVsCisgIGFzIGEgZHVtcC1jYXB0dXJlIGtlcm5lbCBpZiBkZXNpcmVkLgorCisgIFRoZSBjcmFzaGtlcm5lbCByZWdpb24gY2FuIGJlIGF1dG9tYXRpY2FsbHkgcGxhY2VkIGJ5IHRoZSBzeXN0ZW0KKyAga2VybmVsIGF0IHJ1biB0aW1lLiBUaGlzIGlzIGRvbmUgYnkgc3BlY2lmeWluZyB0aGUgYmFzZSBhZGRyZXNzIGFzIDAsCisgIG9yIG9taXR0aW5nIGl0IGFsbCB0b2dldGhlci4KKworICBjcmFzaGtlcm5lbD0yNTZNQDAKKyAgb3IKKyAgY3Jhc2hrZXJuZWw9MjU2TQorCisgIElmIHRoZSBzdGFydCBhZGRyZXNzIGlzIHNwZWNpZmllZCwgbm90ZSB0aGF0IHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZQorICBrZXJuZWwgd2lsbCBiZSBhbGlnbmVkIHRvIDY0TWIsIHNvIGlmIHRoZSBzdGFydCBhZGRyZXNzIGlzIG5vdCB0aGVuCisgIGFueSBzcGFjZSBiZWxvdyB0aGUgYWxpZ25tZW50IHBvaW50IHdpbGwgYmUgd2FzdGVkLgorCisKK0Jvb3QgaW50byBTeXN0ZW0gS2VybmVsCis9PT09PT09PT09PT09PT09PT09PT09PQorCisxKSBNYWtlIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgYW5kIGl0cyBtb2R1bGVzLiBVcGRhdGUgdGhlIGJvb3QgbG9hZGVyCisgICAoc3VjaCBhcyBncnViLCB5YWJvb3QsIG9yIGxpbG8pIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXMgbmVjZXNzYXJ5LgorCisyKSBCb290IHRoZSBzeXN0ZW0ga2VybmVsIHdpdGggdGhlIGJvb3QgcGFyYW1ldGVyICJjcmFzaGtlcm5lbD1ZQFgiLAorICAgd2hlcmUgWSBzcGVjaWZpZXMgaG93IG11Y2ggbWVtb3J5IHRvIHJlc2VydmUgZm9yIHRoZSBkdW1wLWNhcHR1cmUga2VybmVsCisgICBhbmQgWCBzcGVjaWZpZXMgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHJlc2VydmVkIG1lbW9yeS4gRm9yIGV4YW1wbGUsCisgICAiY3Jhc2hrZXJuZWw9NjRNQDE2TSIgdGVsbHMgdGhlIHN5c3RlbSBrZXJuZWwgdG8gcmVzZXJ2ZSA2NCBNQiBvZiBtZW1vcnkKKyAgIHN0YXJ0aW5nIGF0IHBoeXNpY2FsIGFkZHJlc3MgMHgwMTAwMDAwMCAoMTZNQikgZm9yIHRoZSBkdW1wLWNhcHR1cmUga2VybmVsLgorCisgICBPbiB4ODYgYW5kIHg4Nl82NCwgdXNlICJjcmFzaGtlcm5lbD02NE1AMTZNIi4KKworICAgT24gcHBjNjQsIHVzZSAiY3Jhc2hrZXJuZWw9MTI4TUAzMk0iLgorCisgICBPbiBpYTY0LCAyNTZNQDI1Nk0gaXMgYSBnZW5lcm91cyB2YWx1ZSB0aGF0IHR5cGljYWxseSB3b3Jrcy4KKyAgIFRoZSByZWdpb24gbWF5IGJlIGF1dG9tYXRpY2FsbHkgcGxhY2VkIG9uIGlhNjQsIHNlZSB0aGUKKyAgIGR1bXAtY2FwdHVyZSBrZXJuZWwgY29uZmlnIG9wdGlvbiBub3RlcyBhYm92ZS4KIAogTG9hZCB0aGUgRHVtcC1jYXB0dXJlIEtlcm5lbAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1BZnRlciBib290aW5nIHRvIHRoZSBzeXN0ZW0ga2VybmVsLCBsb2FkIHRoZSBkdW1wLWNhcHR1cmUga2VybmVsIHVzaW5nCi10aGUgZm9sbG93aW5nIGNvbW1hbmQ6CitBZnRlciBib290aW5nIHRvIHRoZSBzeXN0ZW0ga2VybmVsLCBkdW1wLWNhcHR1cmUga2VybmVsIG5lZWRzIHRvIGJlCitsb2FkZWQuCiAKLSAgIGtleGVjIC1wIDxkdW1wLWNhcHR1cmUta2VybmVsPiBcCitCYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0eXBlIG9mIGltYWdlIChyZWxvY2F0YWJsZSBvciBub3QpLCBvbmUKK2NhbiBjaG9vc2UgdG8gbG9hZCB0aGUgdW5jb21wcmVzc2VkIHZtbGludXggb3IgY29tcHJlc3NlZCBiekltYWdlL3ZtbGludXoKK29mIGR1bXAtY2FwdHVyZSBrZXJuZWwuIEZvbGxvd2luZyBpcyB0aGUgc3VtbWFyeS4KKworRm9yIGkzODY6CisJLSBVc2Ugdm1saW51eCBpZiBrZXJuZWwgaXMgbm90IHJlbG9jYXRhYmxlLgorCS0gVXNlIGJ6SW1hZ2Uvdm1saW51eiBpZiBrZXJuZWwgaXMgcmVsb2NhdGFibGUuCitGb3IgeDg2XzY0OgorCS0gVXNlIHZtbGludXgKK0ZvciBwcGM2NDoKKwktIFVzZSB2bWxpbnV4CitGb3IgaWE2NDoKKwktIFVzZSB2bWxpbnV4IG9yIHZtbGludXouZ3oKKworCitJZiB5b3UgYXJlIHVzaW5nIGEgdW5jb21wcmVzc2VkIHZtbGludXggaW1hZ2UgdGhlbiB1c2UgZm9sbG93aW5nIGNvbW1hbmQKK3RvIGxvYWQgZHVtcC1jYXB0dXJlIGtlcm5lbC4KKworICAga2V4ZWMgLXAgPGR1bXAtY2FwdHVyZS1rZXJuZWwtdm1saW51eC1pbWFnZT4gXAogICAgLS1pbml0cmQ9PGluaXRyZC1mb3ItZHVtcC1jYXB0dXJlLWtlcm5lbD4gLS1hcmdzLWxpbnV4IFwKLSAgIC0tYXBwZW5kPSJyb290PTxyb290LWRldj4gaW5pdCAxIGlycXBvbGwiCisgICAtLWFwcGVuZD0icm9vdD08cm9vdC1kZXY+IDxhcmNoLXNwZWNpZmljLW9wdGlvbnM+IgorCitJZiB5b3UgYXJlIHVzaW5nIGEgY29tcHJlc3NlZCBiekltYWdlL3ZtbGludXosIHRoZW4gdXNlIGZvbGxvd2luZyBjb21tYW5kCit0byBsb2FkIGR1bXAtY2FwdHVyZSBrZXJuZWwuCisKKyAgIGtleGVjIC1wIDxkdW1wLWNhcHR1cmUta2VybmVsLWJ6SW1hZ2U+IFwKKyAgIC0taW5pdHJkPTxpbml0cmQtZm9yLWR1bXAtY2FwdHVyZS1rZXJuZWw+IFwKKyAgIC0tYXBwZW5kPSJyb290PTxyb290LWRldj4gPGFyY2gtc3BlY2lmaWMtb3B0aW9ucz4iCisKK1BsZWFzZSBub3RlLCB0aGF0IC0tYXJncy1saW51eCBkb2VzIG5vdCBuZWVkIHRvIGJlIHNwZWNpZmllZCBmb3IgaWE2NC4KK0l0IGlzIHBsYW5uZWQgdG8gbWFrZSB0aGlzIGEgbm8tb3Agb24gdGhhdCBhcmNoaXRlY3R1cmUsIGJ1dCBmb3Igbm93CitpdCBzaG91bGQgYmUgb21pdHRlZAorCitGb2xsb3dpbmcgYXJlIHRoZSBhcmNoIHNwZWNpZmljIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIGJlIHVzZWQgd2hpbGUKK2xvYWRpbmcgZHVtcC1jYXB0dXJlIGtlcm5lbC4KKworRm9yIGkzODYsIHg4Nl82NCBhbmQgaWE2NDoKKwkiaW5pdCAxIGlycXBvbGwgbWF4Y3B1cz0xIgorCitGb3IgcHBjNjQ6CisJImluaXQgMSBtYXhjcHVzPTEgbm9pcnFkaXN0cmliIgogCiAKIE5vdGVzIG9uIGxvYWRpbmcgdGhlIGR1bXAtY2FwdHVyZSBrZXJuZWw6CiAKLSogPGR1bXAtY2FwdHVyZS1rZXJuZWw+IG11c3QgYmUgYSB2bWxpbnV4IGltYWdlICh0aGF0IGlzLCBhbgotICB1bmNvbXByZXNzZWQgRUxGIGltYWdlKS4gYnpJbWFnZSBkb2VzIG5vdCB3b3JrIGF0IHRoaXMgdGltZS4KLQogKiBCeSBkZWZhdWx0LCB0aGUgRUxGIGhlYWRlcnMgYXJlIHN0b3JlZCBpbiBFTEY2NCBmb3JtYXQgdG8gc3VwcG9ydAogICBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDRHQiBtZW1vcnkuIFRoZSAtLWVsZjMyLWNvcmUtaGVhZGVycyBvcHRpb24gY2FuCiAgIGJlIHVzZWQgdG8gZm9yY2UgdGhlIGdlbmVyYXRpb24gb2YgRUxGMzIgaGVhZGVycy4gVGhpcyBpcyBuZWNlc3NhcnkKQEAgLTIzMSw2ICszMzUsOSBAQAogKiAiaW5pdCAxIiBib290cyB0aGUgZHVtcC1jYXB0dXJlIGtlcm5lbCBpbnRvIHNpbmdsZS11c2VyIG1vZGUgd2l0aG91dAogICBuZXR3b3JraW5nLiBJZiB5b3Ugd2FudCBuZXR3b3JraW5nLCB1c2UgImluaXQgMy4iCiAKKyogV2UgZ2VuZXJhbGx5IGRvbicgaGF2ZSB0byBicmluZyB1cCBhIFNNUCBrZXJuZWwganVzdCB0byBjYXB0dXJlIHRoZQorICBkdW1wLiBIZW5jZSBnZW5lcmFsbHkgaXQgaXMgdXNlZnVsIGVpdGhlciB0byBidWlsZCBhIFVQIGR1bXAtY2FwdHVyZQorICBrZXJuZWwgb3Igc3BlY2lmeSBtYXhjcHVzPTEgb3B0aW9uIHdoaWxlIGxvYWRpbmcgZHVtcC1jYXB0dXJlIGtlcm5lbC4KIAogS2VybmVsIFBhbmljCiA9PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjc5YmNkZi4uMjVkMjk4NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTU0OCw2ICs1NDgsMTMgQEAKIAlldXJ3ZHQ9CQlbSFcsV0RUXSBFdXJvdGVjaCBDUFUtMTIyMC8xNDEwIG9uYm9hcmQgd2F0Y2hkb2cuCiAJCQlGb3JtYXQ6IDxpbz5bLDxpcnE+XQogCisJZmFpbHNsYWI9CisJZmFpbF9wYWdlX2FsbG9jPQorCWZhaWxfbWFrZV9yZXF1ZXN0PVtLTkxdCisJCQlHZW5lcmFsIGZhdWx0IGluamVjdGlvbiBtZWNoYW5pc20uCisJCQlGb3JtYXQ6IDxpbnRlcnZhbD4sPHByb2JhYmlsaXR5Piw8c3BhY2U+LDx0aW1lcz4KKwkJCVNlZSBhbHNvIC9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi8uCisKIAlmZF9tY3M9CQlbSFcsU0NTSV0KIAkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpL2ZkX21jcy5jLgogCkBAIC0xNjQ5LDYgKzE2NTYsMTIgQEAKIAlzeW01M2M0MTY9CVtIVyxTQ1NJXQogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvc3ltNTNjNDE2LmMuCiAKKwlzeXNycV9hbHdheXNfZW5hYmxlZAorCQkJW0tOTF0KKwkJCUlnbm9yZSBzeXNycSBzZXR0aW5nIC0gdGhpcyBib290IHBhcmFtZXRlciB3aWxsCisJCQluZXV0cmFsaXplIGFueSBlZmZlY3Qgb2YgL3Byb2Mvc3lzL2tlcm5lbC9zeXNycS4KKwkJCVVzZWZ1bCBmb3IgZGVidWdnaW5nLgorCiAJdDEyOD0JCVtIVyxTQ1NJXQogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvdDEyOC5jLgogCkBAIC0xNzAxLDYgKzE3MTQsMTQgQEAKIAl1YXJ0Njg1MD0JW0hXLE9TU10KIAkJCUZvcm1hdDogPGlvPiw8aXJxPgogCisJdWhjaS1oY2QuaWdub3JlX29jPQorCQkJW1VTQl0gSWdub3JlIG92ZXJjdXJyZW50IGV2ZW50cyAoZGVmYXVsdCBOKS4KKwkJCVNvbWUgYmFkbHktZGVzaWduZWQgbW90aGVyYm9hcmRzIGdlbmVyYXRlIGxvdHMgb2YKKwkJCWJvZ3VzIGV2ZW50cywgZm9yIHBvcnRzIHRoYXQgYXJlbid0IHdpcmVkIHRvCisJCQlhbnl0aGluZy4gIFNldCB0aGlzIHBhcmFtZXRlciB0byBhdm9pZCBsb2cgc3BhbW1pbmcuCisJCQlOb3RlIHRoYXQgZ2VudWluZSBvdmVyY3VycmVudCBldmVudHMgd29uJ3QgYmUKKwkJCXJlcG9ydGVkIGVpdGhlci4KKwogCXVzYmhpZC5tb3VzZXBvbGw9CiAJCQlbVVNCSElEXSBUaGUgaW50ZXJ2YWwgd2hpY2ggbWljZSBhcmUgdG8gYmUgcG9sbGVkIGF0LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKaW5kZXggZGRhMTU4OC4uMzg3NDgyZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dApAQCAtMTksNyArMTksOCBAQAogCiBJdCBoYXMgYSBiYXNlIHByb3RvY29sIGFuZCBwbHVnZ2FibGUgY29uZ2VzdGlvbiBjb250cm9sIElEcyAoQ0NJRHMpLgogCi1JdCBpcyBhdCBleHBlcmltZW50YWwgUkZDIHN0YXR1cyBhbmQgdGhlIGhvbWVwYWdlIGZvciBEQ0NQIGFzIGEgcHJvdG9jb2wgaXMgYXQ6CitJdCBpcyBhdCBwcm9wb3NlZCBzdGFuZGFyZCBSRkMgc3RhdHVzIGFuZCB0aGUgaG9tZXBhZ2UgZm9yIERDQ1AgYXMgYSBwcm90b2NvbAoraXMgYXQ6CiAJaHR0cDovL3d3dy5yZWFkLmNzLnVjbGEuZWR1L2RjY3AvCiAKIE1pc3NpbmcgZmVhdHVyZXMKQEAgLTM0LDkgKzM1LDYgQEAKIFNvY2tldCBvcHRpb25zCiA9PT09PT09PT09PT09PQogCi1EQ0NQX1NPQ0tPUFRfUEFDS0VUX1NJWkUgaXMgdXNlZCBmb3IgQ0NJRDMgdG8gc2V0IGRlZmF1bHQgcGFja2V0IHNpemUgZm9yCi1jYWxjdWxhdGlvbnMuCi0KIERDQ1BfU09DS09QVF9TRVJWSUNFIHNldHMgdGhlIHNlcnZpY2UuIFRoZSBzcGVjaWZpY2F0aW9uIG1hbmRhdGVzIHVzZSBvZgogc2VydmljZSBjb2RlcyAoUkZDIDQzNDAsIHNlYy4gOC4xLjIpOyBpZiB0aGlzIHNvY2tldCBvcHRpb24gaXMgbm90IHNldCwKIHRoZSBzb2NrZXQgd2lsbCBmYWxsIGJhY2sgdG8gMCAod2hpY2ggbWVhbnMgdGhhdCBubyBtZWFuaW5nZnVsIHNlcnZpY2UgY29kZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9wY2kudHh0CmluZGV4IDJiMzk1ZTQuLmZkNTAyOGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3BjaS50eHQKQEAgLTEsMTQyICsxLDIzMSBAQAotCQkJIEhvdyBUbyBXcml0ZSBMaW51eCBQQ0kgRHJpdmVycwogCi0JCSAgIGJ5IE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PiBvbiAwNy1GZWItMjAwMAorCQkJSG93IFRvIFdyaXRlIExpbnV4IFBDSSBEcml2ZXJzCisKKwkJYnkgTWFydGluIE1hcmVzIDxtakB1Y3cuY3o+IG9uIDA3LUZlYi0yMDAwCisJdXBkYXRlZCBieSBHcmFudCBHcnVuZGxlciA8Z3J1bmRsZXJAcGFyaXNjLWxpbnV4Lm9yZz4gb24gMjMtRGVjLTIwMDYKIAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLVRoZSB3b3JsZCBvZiBQQ0kgaXMgdmFzdCBhbmQgaXQncyBmdWxsIG9mIChtb3N0bHkgdW5wbGVhc2FudCkgc3VycHJpc2VzLgotRGlmZmVyZW50IFBDSSBkZXZpY2VzIGhhdmUgZGlmZmVyZW50IHJlcXVpcmVtZW50cyBhbmQgZGlmZmVyZW50IGJ1Z3MgLS0KLWJlY2F1c2Ugb2YgdGhpcywgdGhlIFBDSSBzdXBwb3J0IGxheWVyIGluIExpbnV4IGtlcm5lbCBpcyBub3QgYXMgdHJpdmlhbAotYXMgb25lIHdvdWxkIHdpc2guIFRoaXMgc2hvcnQgcGFtcGhsZXQgdHJpZXMgdG8gaGVscCBhbGwgcG90ZW50aWFsIGRyaXZlcgotYXV0aG9ycyBmaW5kIHRoZWlyIHdheSB0aHJvdWdoIHRoZSBkZWVwIGZvcmVzdHMgb2YgUENJIGhhbmRsaW5nLgorVGhlIHdvcmxkIG9mIFBDSSBpcyB2YXN0IGFuZCBmdWxsIG9mIChtb3N0bHkgdW5wbGVhc2FudCkgc3VycHJpc2VzLgorU2luY2UgZWFjaCBDUFUgYXJjaGl0ZWN0dXJlIGltcGxlbWVudHMgZGlmZmVyZW50IGNoaXAtc2V0cyBhbmQgUENJIGRldmljZXMKK2hhdmUgZGlmZmVyZW50IHJlcXVpcmVtZW50cyAoZXJtLCAiZmVhdHVyZXMiKSwgdGhlIHJlc3VsdCBpcyB0aGUgUENJIHN1cHBvcnQKK2luIHRoZSBMaW51eCBrZXJuZWwgaXMgbm90IGFzIHRyaXZpYWwgYXMgb25lIHdvdWxkIHdpc2guIFRoaXMgc2hvcnQgcGFwZXIKK3RyaWVzIHRvIGludHJvZHVjZSBhbGwgcG90ZW50aWFsIGRyaXZlciBhdXRob3JzIHRvIExpbnV4IEFQSXMgZm9yCitQQ0kgZGV2aWNlIGRyaXZlcnMuCisKK0EgbW9yZSBjb21wbGV0ZSByZXNvdXJjZSBpcyB0aGUgdGhpcmQgZWRpdGlvbiBvZiAiTGludXggRGV2aWNlIERyaXZlcnMiCitieSBKb25hdGhhbiBDb3JiZXQsIEFsZXNzYW5kcm8gUnViaW5pLCBhbmQgR3JlZyBLcm9haC1IYXJ0bWFuLgorTEREMyBpcyBhdmFpbGFibGUgZm9yIGZyZWUgKHVuZGVyIENyZWF0aXZlIENvbW1vbnMgTGljZW5zZSkgZnJvbToKKworCWh0dHA6Ly9sd24ubmV0L0tlcm5lbC9MREQzLworCitIb3dldmVyLCBrZWVwIGluIG1pbmQgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBzdWJqZWN0IHRvICJiaXQgcm90Ii4KK1JlZmVyIHRvIHRoZSBzb3VyY2UgY29kZSBpZiB0aGluZ3MgYXJlIG5vdCB3b3JraW5nIGFzIGRlc2NyaWJlZCBoZXJlLgorCitQbGVhc2Ugc2VuZCBxdWVzdGlvbnMvY29tbWVudHMvcGF0Y2hlcyBhYm91dCBMaW51eCBQQ0kgQVBJIHRvIHRoZQorIkxpbnV4IFBDSSIgPGxpbnV4LXBjaUBhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3o+IG1haWxpbmcgbGlzdC4KKwogCiAKIDAuIFN0cnVjdHVyZSBvZiBQQ0kgZHJpdmVycwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1UaGVyZSBleGlzdCB0d28ga2luZHMgb2YgUENJIGRyaXZlcnM6IG5ldy1zdHlsZSBvbmVzICh3aGljaCBsZWF2ZSBtb3N0IG9mCi1wcm9iaW5nIGZvciBkZXZpY2VzIHRvIHRoZSBQQ0kgbGF5ZXIgYW5kIHN1cHBvcnQgb25saW5lIGluc2VydGlvbiBhbmQgcmVtb3ZhbAotb2YgZGV2aWNlcyBbdGh1cyBzdXBwb3J0aW5nIFBDSSwgaG90LXBsdWdnYWJsZSBQQ0kgYW5kIENhcmRCdXMgaW4gYSBzaW5nbGUKLWRyaXZlcl0pIGFuZCBvbGQtc3R5bGUgb25lcyB3aGljaCBqdXN0IGRvIGFsbCB0aGUgcHJvYmluZyB0aGVtc2VsdmVzLiBVbmxlc3MKLXlvdSBoYXZlIGEgdmVyeSBnb29kIHJlYXNvbiB0byBkbyBzbywgcGxlYXNlIGRvbid0IHVzZSB0aGUgb2xkIHdheSBvZiBwcm9iaW5nCi1pbiBhbnkgbmV3IGNvZGUuIEFmdGVyIHRoZSBkcml2ZXIgZmluZHMgdGhlIGRldmljZXMgaXQgd2lzaGVzIHRvIG9wZXJhdGUKLW9uIChlaXRoZXIgdGhlIG9sZCBvciB0aGUgbmV3IHdheSksIGl0IG5lZWRzIHRvIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKK1BDSSBkcml2ZXJzICJkaXNjb3ZlciIgUENJIGRldmljZXMgaW4gYSBzeXN0ZW0gdmlhIHBjaV9yZWdpc3Rlcl9kcml2ZXIoKS4KK0FjdHVhbGx5LCBpdCdzIHRoZSBvdGhlciB3YXkgYXJvdW5kLiBXaGVuIHRoZSBQQ0kgZ2VuZXJpYyBjb2RlIGRpc2NvdmVycworYSBuZXcgZGV2aWNlLCB0aGUgZHJpdmVyIHdpdGggYSBtYXRjaGluZyAiZGVzY3JpcHRpb24iIHdpbGwgYmUgbm90aWZpZWQuCitEZXRhaWxzIG9uIHRoaXMgYmVsb3cuCisKK3BjaV9yZWdpc3Rlcl9kcml2ZXIoKSBsZWF2ZXMgbW9zdCBvZiB0aGUgcHJvYmluZyBmb3IgZGV2aWNlcyB0bwordGhlIFBDSSBsYXllciBhbmQgc3VwcG9ydHMgb25saW5lIGluc2VydGlvbi9yZW1vdmFsIG9mIGRldmljZXMgW3RodXMKK3N1cHBvcnRpbmcgaG90LXBsdWdnYWJsZSBQQ0ksIENhcmRCdXMsIGFuZCBFeHByZXNzLUNhcmQgaW4gYSBzaW5nbGUgZHJpdmVyXS4KK3BjaV9yZWdpc3Rlcl9kcml2ZXIoKSBjYWxsIHJlcXVpcmVzIHBhc3NpbmcgaW4gYSB0YWJsZSBvZiBmdW5jdGlvbgorcG9pbnRlcnMgYW5kIHRodXMgZGljdGF0ZXMgdGhlIGhpZ2ggbGV2ZWwgc3RydWN0dXJlIG9mIGEgZHJpdmVyLgorCitPbmNlIHRoZSBkcml2ZXIga25vd3MgYWJvdXQgYSBQQ0kgZGV2aWNlIGFuZCB0YWtlcyBvd25lcnNoaXAsIHRoZQorZHJpdmVyIGdlbmVyYWxseSBuZWVkcyB0byBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgaW5pdGlhbGl6YXRpb246CiAKIAlFbmFibGUgdGhlIGRldmljZQotCUFjY2VzcyBkZXZpY2UgY29uZmlndXJhdGlvbiBzcGFjZQotCURpc2NvdmVyIHJlc291cmNlcyAoYWRkcmVzc2VzIGFuZCBJUlEgbnVtYmVycykgcHJvdmlkZWQgYnkgdGhlIGRldmljZQotCUFsbG9jYXRlIHRoZXNlIHJlc291cmNlcwotCUNvbW11bmljYXRlIHdpdGggdGhlIGRldmljZQorCVJlcXVlc3QgTU1JTy9JT1AgcmVzb3VyY2VzCisJU2V0IHRoZSBETUEgbWFzayBzaXplIChmb3IgYm90aCBjb2hlcmVudCBhbmQgc3RyZWFtaW5nIERNQSkKKwlBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBzaGFyZWQgY29udHJvbCBkYXRhIChwY2lfYWxsb2NhdGVfY29oZXJlbnQoKSkKKwlBY2Nlc3MgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UgKGlmIG5lZWRlZCkKKwlSZWdpc3RlciBJUlEgaGFuZGxlciAocmVxdWVzdF9pcnEoKSkKKwlJbml0aWFsaXplIG5vbi1QQ0kgKGkuZS4gTEFOL1NDU0kvZXRjIHBhcnRzIG9mIHRoZSBjaGlwKQorCUVuYWJsZSBETUEvcHJvY2Vzc2luZyBlbmdpbmVzCisKK1doZW4gZG9uZSB1c2luZyB0aGUgZGV2aWNlLCBhbmQgcGVyaGFwcyB0aGUgbW9kdWxlIG5lZWRzIHRvIGJlIHVubG9hZGVkLAordGhlIGRyaXZlciBuZWVkcyB0byB0YWtlIHRoZSBmb2xsb3cgc3RlcHM6CisJRGlzYWJsZSB0aGUgZGV2aWNlIGZyb20gZ2VuZXJhdGluZyBJUlFzCisJUmVsZWFzZSB0aGUgSVJRIChmcmVlX2lycSgpKQorCVN0b3AgYWxsIERNQSBhY3Rpdml0eQorCVJlbGVhc2UgRE1BIGJ1ZmZlcnMgKGJvdGggc3RyZWFtaW5nIGFuZCBjb2hlcmVudCkKKwlVbnJlZ2lzdGVyIGZyb20gb3RoZXIgc3Vic3lzdGVtcyAoZS5nLiBzY3NpIG9yIG5ldGRldikKKwlSZWxlYXNlIE1NSU8vSU9QIHJlc291cmNlcwogCURpc2FibGUgdGhlIGRldmljZQogCi1Nb3N0IG9mIHRoZXNlIHRvcGljcyBhcmUgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCBmb3IgdGhlIHJlc3QKLWxvb2sgYXQgPGxpbnV4L3BjaS5oPiwgaXQncyBob3BlZnVsbHkgd2VsbCBjb21tZW50ZWQuCitNb3N0IG9mIHRoZXNlIHRvcGljcyBhcmUgY292ZXJlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorRm9yIHRoZSByZXN0IGxvb2sgYXQgTEREMyBvciA8bGludXgvcGNpLmg+IC4KIAogSWYgdGhlIFBDSSBzdWJzeXN0ZW0gaXMgbm90IGNvbmZpZ3VyZWQgKENPTkZJR19QQ0kgaXMgbm90IHNldCksIG1vc3Qgb2YKLXRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGJlbG93IGFyZSBkZWZpbmVkIGFzIGlubGluZSBmdW5jdGlvbnMgZWl0aGVyIGNvbXBsZXRlbHkKLWVtcHR5IG9yIGp1c3QgcmV0dXJuaW5nIGFuIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzIHRvIGF2b2lkIGxvdHMgb2YgaWZkZWZzCi1pbiB0aGUgZHJpdmVycy4KK3RoZSBQQ0kgZnVuY3Rpb25zIGRlc2NyaWJlZCBiZWxvdyBhcmUgZGVmaW5lZCBhcyBpbmxpbmUgZnVuY3Rpb25zIGVpdGhlcgorY29tcGxldGVseSBlbXB0eSBvciBqdXN0IHJldHVybmluZyBhbiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlcyB0byBhdm9pZAorbG90cyBvZiBpZmRlZnMgaW4gdGhlIGRyaXZlcnMuCiAKIAotMS4gTmV3LXN0eWxlIGRyaXZlcnMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1UaGUgbmV3LXN0eWxlIGRyaXZlcnMganVzdCBjYWxsIHBjaV9yZWdpc3Rlcl9kcml2ZXIgZHVyaW5nIHRoZWlyIGluaXRpYWxpemF0aW9uCi13aXRoIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIgKHN0cnVjdCBwY2lfZHJpdmVyKSB3aGljaAotY29udGFpbnM6CiAKLQluYW1lCQlOYW1lIG9mIHRoZSBkcml2ZXIKKzEuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoKSBjYWxsCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitQQ0kgZGV2aWNlIGRyaXZlcnMgY2FsbCBwY2lfcmVnaXN0ZXJfZHJpdmVyKCkgZHVyaW5nIHRoZWlyCitpbml0aWFsaXphdGlvbiB3aXRoIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIKKyhzdHJ1Y3QgcGNpX2RyaXZlcik6CisKKwlmaWVsZCBuYW1lCURlc2NyaXB0aW9uCisJLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAlpZF90YWJsZQlQb2ludGVyIHRvIHRhYmxlIG9mIGRldmljZSBJRCdzIHRoZSBkcml2ZXIgaXMKIAkJCWludGVyZXN0ZWQgaW4uICBNb3N0IGRyaXZlcnMgc2hvdWxkIGV4cG9ydCB0aGlzCiAJCQl0YWJsZSB1c2luZyBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwuLi4pLgotCXByb2JlCQlQb2ludGVyIHRvIGEgcHJvYmluZyBmdW5jdGlvbiB3aGljaCBnZXRzIGNhbGxlZCAoZHVyaW5nCi0JCQlleGVjdXRpb24gb2YgcGNpX3JlZ2lzdGVyX2RyaXZlciBmb3IgYWxyZWFkeSBleGlzdGluZwotCQkJZGV2aWNlcyBvciBsYXRlciBpZiBhIG5ldyBkZXZpY2UgZ2V0cyBpbnNlcnRlZCkgZm9yIGFsbAotCQkJUENJIGRldmljZXMgd2hpY2ggbWF0Y2ggdGhlIElEIHRhYmxlIGFuZCBhcmUgbm90IGhhbmRsZWQKLQkJCWJ5IHRoZSBvdGhlciBkcml2ZXJzIHlldC4gVGhpcyBmdW5jdGlvbiBnZXRzIHBhc3NlZCBhCi0JCQlwb2ludGVyIHRvIHRoZSBwY2lfZGV2IHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGRldmljZQotCQkJYW5kIGFsc28gd2hpY2ggZW50cnkgaW4gdGhlIElEIHRhYmxlIGRpZCB0aGUgZGV2aWNlCi0JCQltYXRjaC4gSXQgcmV0dXJucyB6ZXJvIHdoZW4gdGhlIGRyaXZlciBoYXMgYWNjZXB0ZWQgdGhlCi0JCQlkZXZpY2Ugb3IgYW4gZXJyb3IgY29kZSAobmVnYXRpdmUgbnVtYmVyKSBvdGhlcndpc2UuCi0JCQlUaGlzIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dCwKLQkJCXNvIGl0IGNhbiBzbGVlcC4KLQlyZW1vdmUJCVBvaW50ZXIgdG8gYSBmdW5jdGlvbiB3aGljaCBnZXRzIGNhbGxlZCB3aGVuZXZlciBhCi0JCQlkZXZpY2UgYmVpbmcgaGFuZGxlZCBieSB0aGlzIGRyaXZlciBpcyByZW1vdmVkIChlaXRoZXIKLQkJCWR1cmluZyBkZXJlZ2lzdHJhdGlvbiBvZiB0aGUgZHJpdmVyIG9yIHdoZW4gaXQncwotCQkJbWFudWFsbHkgcHVsbGVkIG91dCBvZiBhIGhvdC1wbHVnZ2FibGUgc2xvdCkuIFRoaXMKLQkJCWZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gaXQKLQkJCWNhbiBzbGVlcC4KLQlzYXZlX3N0YXRlCVNhdmUgYSBkZXZpY2UncyBzdGF0ZSBiZWZvcmUgaXQncyBzdXNwZW5kLgorCisJcHJvYmUJCVRoaXMgcHJvYmluZyBmdW5jdGlvbiBnZXRzIGNhbGxlZCAoZHVyaW5nIGV4ZWN1dGlvbgorCQkJb2YgcGNpX3JlZ2lzdGVyX2RyaXZlcigpIGZvciBhbHJlYWR5IGV4aXN0aW5nCisJCQlkZXZpY2VzIG9yIGxhdGVyIGlmIGEgbmV3IGRldmljZSBnZXRzIGluc2VydGVkKSBmb3IKKwkJCWFsbCBQQ0kgZGV2aWNlcyB3aGljaCBtYXRjaCB0aGUgSUQgdGFibGUgYW5kIGFyZSBub3QKKwkJCSJvd25lZCIgYnkgdGhlIG90aGVyIGRyaXZlcnMgeWV0LiBUaGlzIGZ1bmN0aW9uIGdldHMKKwkJCXBhc3NlZCBhICJzdHJ1Y3QgcGNpX2RldiAqIiBmb3IgZWFjaCBkZXZpY2Ugd2hvc2UKKwkJCWVudHJ5IGluIHRoZSBJRCB0YWJsZSBtYXRjaGVzIHRoZSBkZXZpY2UuIFRoZSBwcm9iZQorCQkJZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHdoZW4gdGhlIGRyaXZlciBjaG9vc2VzIHRvCisJCQl0YWtlICJvd25lcnNoaXAiIG9mIHRoZSBkZXZpY2Ugb3IgYW4gZXJyb3IgY29kZQorCQkJKG5lZ2F0aXZlIG51bWJlcikgb3RoZXJ3aXNlLgorCQkJVGhlIHByb2JlIGZ1bmN0aW9uIGFsd2F5cyBnZXRzIGNhbGxlZCBmcm9tIHByb2Nlc3MKKwkJCWNvbnRleHQsIHNvIGl0IGNhbiBzbGVlcC4KKworCXJlbW92ZQkJVGhlIHJlbW92ZSgpIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgZGV2aWNlCisJCQliZWluZyBoYW5kbGVkIGJ5IHRoaXMgZHJpdmVyIGlzIHJlbW92ZWQgKGVpdGhlciBkdXJpbmcKKwkJCWRlcmVnaXN0cmF0aW9uIG9mIHRoZSBkcml2ZXIgb3Igd2hlbiBpdCdzIG1hbnVhbGx5CisJCQlwdWxsZWQgb3V0IG9mIGEgaG90LXBsdWdnYWJsZSBzbG90KS4KKwkJCVRoZSByZW1vdmUgZnVuY3Rpb24gYWx3YXlzIGdldHMgY2FsbGVkIGZyb20gcHJvY2VzcworCQkJY29udGV4dCwgc28gaXQgY2FuIHNsZWVwLgorCiAJc3VzcGVuZAkJUHV0IGRldmljZSBpbnRvIGxvdyBwb3dlciBzdGF0ZS4KKwlzdXNwZW5kX2xhdGUJUHV0IGRldmljZSBpbnRvIGxvdyBwb3dlciBzdGF0ZS4KKworCXJlc3VtZV9lYXJseQlXYWtlIGRldmljZSBmcm9tIGxvdyBwb3dlciBzdGF0ZS4KIAlyZXN1bWUJCVdha2UgZGV2aWNlIGZyb20gbG93IHBvd2VyIHN0YXRlLgorCisJCShQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vcG93ZXIvcGNpLnR4dCBmb3IgZGVzY3JpcHRpb25zCisJCW9mIFBDSSBQb3dlciBNYW5hZ2VtZW50IGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMuKQorCiAJZW5hYmxlX3dha2UJRW5hYmxlIGRldmljZSB0byBnZW5lcmF0ZSB3YWtlIGV2ZW50cyBmcm9tIGEgbG93IHBvd2VyCiAJCQlzdGF0ZS4KIAotCQkJKFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9wb3dlci9wY2kudHh0IGZvciBkZXNjcmlwdGlvbnMKLQkJCW9mIFBDSSBQb3dlciBNYW5hZ2VtZW50IGFuZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMpCisJc2h1dGRvd24JSG9vayBpbnRvIHJlYm9vdF9ub3RpZmllcl9saXN0IChrZXJuZWwvc3lzLmMpLgorCQkJSW50ZW5kZWQgdG8gc3RvcCBhbnkgaWRsaW5nIERNQSBvcGVyYXRpb25zLgorCQkJVXNlZnVsIGZvciBlbmFibGluZyB3YWtlLW9uLWxhbiAoTklDKSBvciBjaGFuZ2luZworCQkJdGhlIHBvd2VyIHN0YXRlIG9mIGEgZGV2aWNlIGJlZm9yZSByZWJvb3QuCisJCQllLmcuIGRyaXZlcnMvbmV0L2UxMDAuYy4KIAotVGhlIElEIHRhYmxlIGlzIGFuIGFycmF5IG9mIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVuZGluZyB3aXRoIGEgYWxsLXplcm8gZW50cnkuCi1FYWNoIGVudHJ5IGNvbnNpc3RzIG9mOgorCWVycl9oYW5kbGVyCVNlZSBEb2N1bWVudGF0aW9uL3BjaS1lcnJvci1yZWNvdmVyeS50eHQKIAotCXZlbmRvciwgZGV2aWNlCVZlbmRvciBhbmQgZGV2aWNlIElEIHRvIG1hdGNoIChvciBQQ0lfQU5ZX0lEKQorCW11bHRpdGhyZWFkX3Byb2JlCUVuYWJsZSBtdWx0aS10aHJlYWRlZCBwcm9iZS9zY2FuLiBEcml2ZXIgbXVzdAorCQkJcHJvdmlkZSBpdHMgb3duIGxvY2tpbmcvc3luY3Jvbml6YXRpb24gZm9yIGluaXQKKwkJCW9wZXJhdGlvbnMgaWYgdGhpcyBpcyBlbmFibGVkLgorCisKK1RoZSBJRCB0YWJsZSBpcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlbnRyaWVzIGVuZGluZyB3aXRoIGFuCithbGwtemVybyBlbnRyeS4gIEVhY2ggZW50cnkgY29uc2lzdHMgb2Y6CisKKwl2ZW5kb3IsZGV2aWNlCVZlbmRvciBhbmQgZGV2aWNlIElEIHRvIG1hdGNoIChvciBQQ0lfQU5ZX0lEKQorCiAJc3VidmVuZG9yLAlTdWJzeXN0ZW0gdmVuZG9yIGFuZCBkZXZpY2UgSUQgdG8gbWF0Y2ggKG9yIFBDSV9BTllfSUQpCi0Jc3ViZGV2aWNlCi0JY2xhc3MsCQlEZXZpY2UgY2xhc3MgdG8gbWF0Y2guIFRoZSBjbGFzc19tYXNrIHRlbGxzIHdoaWNoIGJpdHMKLQljbGFzc19tYXNrCW9mIHRoZSBjbGFzcyBhcmUgaG9ub3JlZCBkdXJpbmcgdGhlIGNvbXBhcmlzb24uCisJc3ViZGV2aWNlLAorCisJY2xhc3MJCURldmljZSBjbGFzcywgc3ViY2xhc3MsIGFuZCAiaW50ZXJmYWNlIiB0byBtYXRjaC4KKwkJCVNlZSBBcHBlbmRpeCBEIG9mIHRoZSBQQ0kgTG9jYWwgQnVzIFNwZWMgb3IKKwkJCWluY2x1ZGUvbGludXgvcGNpX2lkcy5oIGZvciBhIGZ1bGwgbGlzdCBvZiBjbGFzc2VzLgorCQkJTW9zdCBkcml2ZXJzIGRvIG5vdCBuZWVkIHRvIHNwZWNpZnkgY2xhc3MvY2xhc3NfbWFzaworCQkJYXMgdmVuZG9yL2RldmljZSBpcyBub3JtYWxseSBzdWZmaWNpZW50LgorCisJY2xhc3NfbWFzawlsaW1pdCB3aGljaCBzdWItZmllbGRzIG9mIHRoZSBjbGFzcyBmaWVsZCBhcmUgY29tcGFyZWQuCisJCQlTZWUgZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yLyBmb3IgZXhhbXBsZSBvZiB1c2FnZS4KKwogCWRyaXZlcl9kYXRhCURhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyLgorCQkJTW9zdCBkcml2ZXJzIGRvbid0IG5lZWQgdG8gdXNlIGRyaXZlcl9kYXRhIGZpZWxkLgorCQkJQmVzdCBwcmFjdGljZSBpcyB0byB1c2UgZHJpdmVyX2RhdGEgYXMgYW4gaW5kZXgKKwkJCWludG8gYSBzdGF0aWMgbGlzdCBvZiBlcXVpdmFsZW50IGRldmljZSB0eXBlcywKKwkJCWluc3RlYWQgb2YgdXNpbmcgaXQgYXMgYSBwb2ludGVyLgogCi1Nb3N0IGRyaXZlcnMgZG9uJ3QgbmVlZCB0byB1c2UgdGhlIGRyaXZlcl9kYXRhIGZpZWxkLiAgQmVzdCBwcmFjdGljZQotZm9yIHVzZSBvZiBkcml2ZXJfZGF0YSBpcyB0byB1c2UgaXQgYXMgYW4gaW5kZXggaW50byBhIHN0YXRpYyBsaXN0IG9mCi1lcXVpdmFsZW50IGRldmljZSB0eXBlcywgbm90IHRvIHVzZSBpdCBhcyBhIHBvaW50ZXIuCiAKLUhhdmUgYSB0YWJsZSBlbnRyeSB7UENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRH0KLXRvIGhhdmUgcHJvYmUoKSBjYWxsZWQgZm9yIGV2ZXJ5IFBDSSBkZXZpY2Uga25vd24gdG8gdGhlIHN5c3RlbS4KK01vc3QgZHJpdmVycyBvbmx5IG5lZWQgUENJX0RFVklDRSgpIG9yIFBDSV9ERVZJQ0VfQ0xBU1MoKSB0byBzZXQgdXAKK2EgcGNpX2RldmljZV9pZCB0YWJsZS4KIAotTmV3IFBDSSBJRHMgbWF5IGJlIGFkZGVkIHRvIGEgZGV2aWNlIGRyaXZlciBhdCBydW50aW1lIGJ5IHdyaXRpbmcKLXRvIHRoZSBmaWxlIC9zeXMvYnVzL3BjaS9kcml2ZXJzL3tkcml2ZXJ9L25ld19pZC4gIFdoZW4gYWRkZWQsIHRoZQotZHJpdmVyIHdpbGwgcHJvYmUgZm9yIGFsbCBkZXZpY2VzIGl0IGNhbiBzdXBwb3J0LgorTmV3IFBDSSBJRHMgbWF5IGJlIGFkZGVkIHRvIGEgZGV2aWNlIGRyaXZlciBwY2lfaWRzIHRhYmxlIGF0IHJ1bnRpbWUKK2FzIHNob3duIGJlbG93OgogCiBlY2hvICJ2ZW5kb3IgZGV2aWNlIHN1YnZlbmRvciBzdWJkZXZpY2UgY2xhc3MgY2xhc3NfbWFzayBkcml2ZXJfZGF0YSIgPiBcCi0gL3N5cy9idXMvcGNpL2RyaXZlcnMve2RyaXZlcn0vbmV3X2lkCi13aGVyZSBhbGwgZmllbGRzIGFyZSBwYXNzZWQgaW4gYXMgaGV4YWRlY2ltYWwgdmFsdWVzIChubyBsZWFkaW5nIDB4KS4KLVVzZXJzIG5lZWQgcGFzcyBvbmx5IGFzIG1hbnkgZmllbGRzIGFzIG5lY2Vzc2FyeTsgdmVuZG9yLCBkZXZpY2UsCi1zdWJ2ZW5kb3IsIGFuZCBzdWJkZXZpY2UgZmllbGRzIGRlZmF1bHQgdG8gUENJX0FOWV9JRCAoRkZGRkZGRkYpLAotY2xhc3MgYW5kIGNsYXNzbWFzayBmaWVsZHMgZGVmYXVsdCB0byAwLCBhbmQgZHJpdmVyX2RhdGEgZGVmYXVsdHMgdG8KLTBVTC4gIERldmljZSBkcml2ZXJzIG11c3QgaW5pdGlhbGl6ZSB1c2VfZHJpdmVyX2RhdGEgaW4gdGhlIGR5bmlkcyBzdHJ1Y3QKLWluIHRoZWlyIHBjaV9kcml2ZXIgc3RydWN0IHByaW9yIHRvIGNhbGxpbmcgcGNpX3JlZ2lzdGVyX2RyaXZlciBpbiBvcmRlcgotZm9yIHRoZSBkcml2ZXJfZGF0YSBmaWVsZCB0byBnZXQgcGFzc2VkIHRvIHRoZSBkcml2ZXIuIE90aGVyd2lzZSwgb25seSBhCi0wIGlzIHBhc3NlZCBpbiB0aGF0IGZpZWxkLgorL3N5cy9idXMvcGNpL2RyaXZlcnMve2RyaXZlcn0vbmV3X2lkCisKK0FsbCBmaWVsZHMgYXJlIHBhc3NlZCBpbiBhcyBoZXhhZGVjaW1hbCB2YWx1ZXMgKG5vIGxlYWRpbmcgMHgpLgorVXNlcnMgbmVlZCBwYXNzIG9ubHkgYXMgbWFueSBmaWVsZHMgYXMgbmVjZXNzYXJ5OgorCW8gdmVuZG9yLCBkZXZpY2UsIHN1YnZlbmRvciwgYW5kIHN1YmRldmljZSBmaWVsZHMgZGVmYXVsdAorCSAgdG8gUENJX0FOWV9JRCAoRkZGRkZGRkYpLAorCW8gY2xhc3MgYW5kIGNsYXNzbWFzayBmaWVsZHMgZGVmYXVsdCB0byAwCisJbyBkcml2ZXJfZGF0YSBkZWZhdWx0cyB0byAwVUwuCisKK09uY2UgYWRkZWQsIHRoZSBkcml2ZXIgcHJvYmUgcm91dGluZSB3aWxsIGJlIGludm9rZWQgZm9yIGFueSB1bmNsYWltZWQKK1BDSSBkZXZpY2VzIGxpc3RlZCBpbiBpdHMgKG5ld2x5IHVwZGF0ZWQpIHBjaV9pZHMgbGlzdC4KIAogV2hlbiB0aGUgZHJpdmVyIGV4aXRzLCBpdCBqdXN0IGNhbGxzIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigpIGFuZCB0aGUgUENJIGxheWVyCiBhdXRvbWF0aWNhbGx5IGNhbGxzIHRoZSByZW1vdmUgaG9vayBmb3IgYWxsIGRldmljZXMgaGFuZGxlZCBieSB0aGUgZHJpdmVyLgogCisKKzEuMSAiQXR0cmlidXRlcyIgZm9yIGRyaXZlciBmdW5jdGlvbnMvZGF0YQorCiBQbGVhc2UgbWFyayB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgZnVuY3Rpb25zIHdoZXJlIGFwcHJvcHJpYXRlCiAodGhlIGNvcnJlc3BvbmRpbmcgbWFjcm9zIGFyZSBkZWZpbmVkIGluIDxsaW51eC9pbml0Lmg+KToKIAogCV9faW5pdAkJSW5pdGlhbGl6YXRpb24gY29kZS4gVGhyb3duIGF3YXkgYWZ0ZXIgdGhlIGRyaXZlcgogCQkJaW5pdGlhbGl6ZXMuCiAJX19leGl0CQlFeGl0IGNvZGUuIElnbm9yZWQgZm9yIG5vbi1tb2R1bGFyIGRyaXZlcnMuCi0JX19kZXZpbml0CURldmljZSBpbml0aWFsaXphdGlvbiBjb2RlLiBJZGVudGljYWwgdG8gX19pbml0IGlmCi0JCQl0aGUga2VybmVsIGlzIG5vdCBjb21waWxlZCB3aXRoIENPTkZJR19IT1RQTFVHLCBub3JtYWwKLQkJCWZ1bmN0aW9uIG90aGVyd2lzZS4KKworCisJX19kZXZpbml0CURldmljZSBpbml0aWFsaXphdGlvbiBjb2RlLgorCQkJSWRlbnRpY2FsIHRvIF9faW5pdCBpZiB0aGUga2VybmVsIGlzIG5vdCBjb21waWxlZAorCQkJd2l0aCBDT05GSUdfSE9UUExVRywgbm9ybWFsIGZ1bmN0aW9uIG90aGVyd2lzZS4KIAlfX2RldmV4aXQJVGhlIHNhbWUgZm9yIF9fZXhpdC4KIAotVGlwczoKLQlUaGUgbW9kdWxlX2luaXQoKS9tb2R1bGVfZXhpdCgpIGZ1bmN0aW9ucyAoYW5kIGFsbCBpbml0aWFsaXphdGlvbgotICAgICAgICBmdW5jdGlvbnMgY2FsbGVkIG9ubHkgZnJvbSB0aGVzZSkgc2hvdWxkIGJlIG1hcmtlZCBfX2luaXQvZXhpdC4KLQlUaGUgc3RydWN0IHBjaV9kcml2ZXIgc2hvdWxkbid0IGJlIG1hcmtlZCB3aXRoIGFueSBvZiB0aGVzZSB0YWdzLgotCVRoZSBJRCB0YWJsZSBhcnJheSBzaG91bGQgYmUgbWFya2VkIF9fZGV2aW5pdGRhdGEuCi0JVGhlIHByb2JlKCkgYW5kIHJlbW92ZSgpIGZ1bmN0aW9ucyAoYW5kIGFsbCBpbml0aWFsaXphdGlvbgotCWZ1bmN0aW9ucyBjYWxsZWQgb25seSBmcm9tIHRoZXNlKSBzaG91bGQgYmUgbWFya2VkIF9fZGV2aW5pdC9leGl0LgotCUlmIHlvdSBhcmUgc3VyZSB0aGUgZHJpdmVyIGlzIG5vdCBhIGhvdHBsdWcgZHJpdmVyIHRoZW4gdXNlIG9ubHkgCi0JX19pbml0L2V4aXQgX19pbml0ZGF0YS9leGl0ZGF0YS4KK1RpcHMgb24gd2hlbi93aGVyZSB0byB1c2UgdGhlIGFib3ZlIGF0dHJpYnV0ZXM6CisJbyBUaGUgbW9kdWxlX2luaXQoKS9tb2R1bGVfZXhpdCgpIGZ1bmN0aW9ucyAoYW5kIGFsbAorCSAgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGNhbGxlZCBfb25seV8gZnJvbSB0aGVzZSkKKwkgIHNob3VsZCBiZSBtYXJrZWQgX19pbml0L19fZXhpdC4KIAotICAgICAgICBQb2ludGVycyB0byBmdW5jdGlvbnMgbWFya2VkIGFzIF9fZGV2ZXhpdCBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLSAgICAgICAgX19kZXZleGl0X3AoZnVuY3Rpb25fbmFtZSkuICBUaGF0IHdpbGwgZ2VuZXJhdGUgdGhlIGZ1bmN0aW9uCi0gICAgICAgIG5hbWUgb3IgTlVMTCBpZiB0aGUgX19kZXZleGl0IGZ1bmN0aW9uIHdpbGwgYmUgZGlzY2FyZGVkLgorCW8gRG8gbm90IG1hcmsgdGhlIHN0cnVjdCBwY2lfZHJpdmVyLgorCisJbyBUaGUgSUQgdGFibGUgYXJyYXkgc2hvdWxkIGJlIG1hcmtlZCBfX2RldmluaXRkYXRhLgorCisJbyBUaGUgcHJvYmUoKSBhbmQgcmVtb3ZlKCkgZnVuY3Rpb25zIHNob3VsZCBiZSBtYXJrZWQgX19kZXZpbml0CisJICBhbmQgX19kZXZleGl0IHJlc3BlY3RpdmVseS4gIEFsbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKKwkgIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSB0aGUgcHJvYmUoKSByb3V0aW5lLCBjYW4gYmUgbWFya2VkIF9fZGV2aW5pdC4KKwkgIERpdHRvIGZvciByZW1vdmUoKSBhbmQgX19kZXZleGl0LgorCisJbyBJZiBteWRyaXZlcl9wcm9iZSgpIGlzIG1hcmtlZCB3aXRoIF9fZGV2aW5pdCgpLCB0aGVuIGFsbCBhZGRyZXNzCisJICByZWZlcmVuY2VzIHRvIG15ZHJpdmVyX3Byb2JlIG11c3QgdXNlIF9fZGV2ZXhpdF9wKG15ZHJpdmVyX3Byb2JlKQorCSAgKGluIHRoZSBzdHJ1Y3QgcGNpX2RyaXZlciBkZWNsYXJhdGlvbiBmb3IgZXhhbXBsZSkuCisJICBfX2RldmV4aXRfcCgpIHdpbGwgZ2VuZXJhdGUgdGhlIGZ1bmN0aW9uIG5hbWUgX29yXyBOVUxMIGlmIHRoZQorCSAgZnVuY3Rpb24gd2lsbCBiZSBkaXNjYXJkZWQuICBGb3IgYW4gZXhhbXBsZSwgc2VlIGRyaXZlcnMvbmV0L3RnMy5jLgorCisJbyBEbyBOT1QgbWFyayBhIGZ1bmN0aW9uIGlmIHlvdSBhcmUgbm90IHN1cmUgd2hpY2ggbWFyayB0byB1c2UuCisJICBCZXR0ZXIgdG8gbm90IG1hcmsgdGhlIGZ1bmN0aW9uIHRoYW4gbWFyayB0aGUgZnVuY3Rpb24gd3JvbmcuCiAKIAotMi4gSG93IHRvIGZpbmQgUENJIGRldmljZXMgbWFudWFsbHkgKHRoZSBvbGQgc3R5bGUpCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLVBDSSBkcml2ZXJzIG5vdCB1c2luZyB0aGUgcGNpX3JlZ2lzdGVyX2RyaXZlcigpIGludGVyZmFjZSBzZWFyY2gKLWZvciBQQ0kgZGV2aWNlcyBtYW51YWxseSB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnN0cnVjdHM6CisKKzIuIEhvdyB0byBmaW5kIFBDSSBkZXZpY2VzIG1hbnVhbGx5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitQQ0kgZHJpdmVycyBzaG91bGQgaGF2ZSBhIHJlYWxseSBnb29kIHJlYXNvbiBmb3Igbm90IHVzaW5nIHRoZQorcGNpX3JlZ2lzdGVyX2RyaXZlcigpIGludGVyZmFjZSB0byBzZWFyY2ggZm9yIFBDSSBkZXZpY2VzLgorVGhlIG1haW4gcmVhc29uIFBDSSBkZXZpY2VzIGFyZSBjb250cm9sbGVkIGJ5IG11bHRpcGxlIGRyaXZlcnMKK2lzIGJlY2F1c2Ugb25lIFBDSSBkZXZpY2UgaW1wbGVtZW50cyBzZXZlcmFsIGRpZmZlcmVudCBIVyBzZXJ2aWNlcy4KK0UuZy4gY29tYmluZWQgc2VyaWFsL3BhcmFsbGVsIHBvcnQvZmxvcHB5IGNvbnRyb2xsZXIuCisKK0EgbWFudWFsIHNlYXJjaCBtYXkgYmUgcGVyZm9ybWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29uc3RydWN0czoKIAogU2VhcmNoaW5nIGJ5IHZlbmRvciBhbmQgZGV2aWNlIElEOgogCkBAIC0xNTAsODcgKzIzOSwzMTEgQEAKIAogU2VhcmNoaW5nIGJ5IGJvdGggdmVuZG9yL2RldmljZSBhbmQgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2UgSUQ6CiAKLQlwY2lfZ2V0X3N1YnN5cyhWRU5ET1JfSUQsIERFVklDRV9JRCwgU1VCU1lTX1ZFTkRPUl9JRCwgU1VCU1lTX0RFVklDRV9JRCwgZGV2KS4KKwlwY2lfZ2V0X3N1YnN5cyhWRU5ET1JfSUQsREVWSUNFX0lELCBTVUJTWVNfVkVORE9SX0lELCBTVUJTWVNfREVWSUNFX0lELCBkZXYpLgogCi0gICBZb3UgY2FuIHVzZSB0aGUgY29uc3RhbnQgUENJX0FOWV9JRCBhcyBhIHdpbGRjYXJkIHJlcGxhY2VtZW50IGZvcgorWW91IGNhbiB1c2UgdGhlIGNvbnN0YW50IFBDSV9BTllfSUQgYXMgYSB3aWxkY2FyZCByZXBsYWNlbWVudCBmb3IKIFZFTkRPUl9JRCBvciBERVZJQ0VfSUQuICBUaGlzIGFsbG93cyBzZWFyY2hpbmcgZm9yIGFueSBkZXZpY2UgZnJvbSBhCiBzcGVjaWZpYyB2ZW5kb3IsIGZvciBleGFtcGxlLgogCi0gICBUaGVzZSBmdW5jdGlvbnMgYXJlIGhvdHBsdWctc2FmZS4gVGhleSBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvbgorVGhlc2UgZnVuY3Rpb25zIGFyZSBob3RwbHVnLXNhZmUuIFRoZXkgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24KIHRoZSBwY2lfZGV2IHRoYXQgdGhleSByZXR1cm4uIFlvdSBtdXN0IGV2ZW50dWFsbHkgKHBvc3NpYmx5IGF0IG1vZHVsZSB1bmxvYWQpCiBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGVzZSBkZXZpY2VzIGJ5IGNhbGxpbmcgcGNpX2Rldl9wdXQoKS4KIAogCi0zLiBFbmFibGluZyBhbmQgZGlzYWJsaW5nIGRldmljZXMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICAgQmVmb3JlIHlvdSBkbyBhbnl0aGluZyB3aXRoIHRoZSBkZXZpY2UgeW91J3ZlIGZvdW5kLCB5b3UgbmVlZCB0byBlbmFibGUKLWl0IGJ5IGNhbGxpbmcgcGNpX2VuYWJsZV9kZXZpY2UoKSB3aGljaCBlbmFibGVzIEkvTyBhbmQgbWVtb3J5IHJlZ2lvbnMgb2YKLXRoZSBkZXZpY2UsIGFsbG9jYXRlcyBhbiBJUlEgaWYgbmVjZXNzYXJ5LCBhc3NpZ25zIG1pc3NpbmcgcmVzb3VyY2VzIGlmCi1uZWVkZWQgYW5kIHdha2VzIHVwIHRoZSBkZXZpY2UgaWYgaXQgd2FzIGluIHN1c3BlbmRlZCBzdGF0ZS4gUGxlYXNlIG5vdGUKLXRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gZmFpbC4KIAotICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBkZXZpY2UgaW4gYnVzIG1hc3RlcmluZyBtb2RlLCBjYWxsIHBjaV9zZXRfbWFzdGVyKCkKLXdoaWNoIGVuYWJsZXMgdGhlIGJ1cyBtYXN0ZXIgYml0IGluIFBDSV9DT01NQU5EIHJlZ2lzdGVyIGFuZCBhbHNvIGZpeGVzCi10aGUgbGF0ZW5jeSB0aW1lciB2YWx1ZSBpZiBpdCdzIHNldCB0byBzb21ldGhpbmcgYm9ndXMgYnkgdGhlIEJJT1MuCiszLiBEZXZpY2UgSW5pdGlhbGl6YXRpb24gU3RlcHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi0gICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIFBDSSBNZW1vcnktV3JpdGUtSW52YWxpZGF0ZSB0cmFuc2FjdGlvbiwKK0FzIG5vdGVkIGluIHRoZSBpbnRyb2R1Y3Rpb24sIG1vc3QgUENJIGRyaXZlcnMgbmVlZCB0aGUgZm9sbG93aW5nIHN0ZXBzCitmb3IgZGV2aWNlIGluaXRpYWxpemF0aW9uOgorCisJRW5hYmxlIHRoZSBkZXZpY2UKKwlSZXF1ZXN0IE1NSU8vSU9QIHJlc291cmNlcworCVNldCB0aGUgRE1BIG1hc2sgc2l6ZSAoZm9yIGJvdGggY29oZXJlbnQgYW5kIHN0cmVhbWluZyBETUEpCisJQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgc2hhcmVkIGNvbnRyb2wgZGF0YSAocGNpX2FsbG9jYXRlX2NvaGVyZW50KCkpCisJQWNjZXNzIGRldmljZSBjb25maWd1cmF0aW9uIHNwYWNlIChpZiBuZWVkZWQpCisJUmVnaXN0ZXIgSVJRIGhhbmRsZXIgKHJlcXVlc3RfaXJxKCkpCisJSW5pdGlhbGl6ZSBub24tUENJIChpLmUuIExBTi9TQ1NJL2V0YyBwYXJ0cyBvZiB0aGUgY2hpcCkKKwlFbmFibGUgRE1BL3Byb2Nlc3NpbmcgZW5naW5lcy4KKworVGhlIGRyaXZlciBjYW4gYWNjZXNzIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXJzIGF0IGFueSB0aW1lLgorKFdlbGwsIGFsbW9zdC4gV2hlbiBydW5uaW5nIEJJU1QsIGNvbmZpZyBzcGFjZSBjYW4gZ28gYXdheS4uLmJ1dAordGhhdCB3aWxsIGp1c3QgcmVzdWx0IGluIGEgUENJIEJ1cyBNYXN0ZXIgQWJvcnQgYW5kIGNvbmZpZyByZWFkcword2lsbCByZXR1cm4gZ2FyYmFnZSkuCisKKworMy4xIEVuYWJsZSB0aGUgUENJIGRldmljZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorQmVmb3JlIHRvdWNoaW5nIGFueSBkZXZpY2UgcmVnaXN0ZXJzLCB0aGUgZHJpdmVyIG5lZWRzIHRvIGVuYWJsZQordGhlIFBDSSBkZXZpY2UgYnkgY2FsbGluZyBwY2lfZW5hYmxlX2RldmljZSgpLiBUaGlzIHdpbGw6CisJbyB3YWtlIHVwIHRoZSBkZXZpY2UgaWYgaXQgd2FzIGluIHN1c3BlbmRlZCBzdGF0ZSwKKwlvIGFsbG9jYXRlIEkvTyBhbmQgbWVtb3J5IHJlZ2lvbnMgb2YgdGhlIGRldmljZSAoaWYgQklPUyBkaWQgbm90KSwKKwlvIGFsbG9jYXRlIGFuIElSUSAoaWYgQklPUyBkaWQgbm90KS4KKworTk9URTogcGNpX2VuYWJsZV9kZXZpY2UoKSBjYW4gZmFpbCEgQ2hlY2sgdGhlIHJldHVybiB2YWx1ZS4KK05PVEUyOiBBbHNvIHNlZSBwY2lfZW5hYmxlX2RldmljZV9iYXJzKCkgYmVsb3cuIERyaXZlcnMgY2FuCisgICAgYXR0ZW1wdCB0byBlbmFibGUgb25seSBhIHN1YnNldCBvZiBCQVJzIHRoZXkgbmVlZC4KKworWyBPUyBCVUc6IHdlIGRvbid0IGNoZWNrIHJlc291cmNlIGFsbG9jYXRpb25zIGJlZm9yZSBlbmFibGluZyB0aG9zZQorICByZXNvdXJjZXMuIFRoZSBzZXF1ZW5jZSB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UgaWYgd2UgY2FsbGVkCisgIHBjaV9yZXF1ZXN0X3Jlc291cmNlcygpIGJlZm9yZSBjYWxsaW5nIHBjaV9lbmFibGVfZGV2aWNlKCkuCisgIEN1cnJlbnRseSwgdGhlIGRldmljZSBkcml2ZXJzIGNhbid0IGRldGVjdCB0aGUgYnVnIHdoZW4gd2hlbiB0d28KKyAgZGV2aWNlcyBoYXZlIGJlZW4gYWxsb2NhdGVkIHRoZSBzYW1lIHJhbmdlLiBUaGlzIGlzIG5vdCBhIGNvbW1vbgorICBwcm9ibGVtIGFuZCB1bmxpa2VseSB0byBnZXQgZml4ZWQgc29vbi4KKworICBUaGlzIGhhcyBiZWVuIGRpc2N1c3NlZCBiZWZvcmUgYnV0IG5vdCBjaGFuZ2VkIGFzIG9mIDIuNi4xOToKKwlodHRwOi8vbGttbC5vcmcvbGttbC8yMDA2LzMvMi8xOTQKK10KKworcGNpX3NldF9tYXN0ZXIoKSB3aWxsIGVuYWJsZSBETUEgYnkgc2V0dGluZyB0aGUgYnVzIG1hc3RlciBiaXQKK2luIHRoZSBQQ0lfQ09NTUFORCByZWdpc3Rlci4gSXQgYWxzbyBmaXhlcyB0aGUgbGF0ZW5jeSB0aW1lciB2YWx1ZSBpZgoraXQncyBzZXQgdG8gc29tZXRoaW5nIGJvZ3VzIGJ5IHRoZSBCSU9TLgorCitJZiB0aGUgUENJIGRldmljZSBjYW4gdXNlIHRoZSBQQ0kgTWVtb3J5LVdyaXRlLUludmFsaWRhdGUgdHJhbnNhY3Rpb24sCiBjYWxsIHBjaV9zZXRfbXdpKCkuICBUaGlzIGVuYWJsZXMgdGhlIFBDSV9DT01NQU5EIGJpdCBmb3IgTWVtLVdyLUludmFsCiBhbmQgYWxzbyBlbnN1cmVzIHRoYXQgdGhlIGNhY2hlIGxpbmUgc2l6ZSByZWdpc3RlciBpcyBzZXQgY29ycmVjdGx5LgotTWFrZSBzdXJlIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgcGNpX3NldF9td2koKSwgbm90IGFsbCBhcmNoaXRlY3R1cmVzCi1tYXkgc3VwcG9ydCBNZW1vcnktV3JpdGUtSW52YWxpZGF0ZS4KK0NoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgcGNpX3NldF9td2koKSBhcyBub3QgYWxsIGFyY2hpdGVjdHVyZXMKK29yIGNoaXAtc2V0cyBtYXkgc3VwcG9ydCBNZW1vcnktV3JpdGUtSW52YWxpZGF0ZS4KIAotICAgSWYgeW91ciBkcml2ZXIgZGVjaWRlcyB0byBzdG9wIHVzaW5nIHRoZSBkZXZpY2UgKGUuZy4sIHRoZXJlIHdhcyBhbgotZXJyb3Igd2hpbGUgc2V0dGluZyBpdCB1cCBvciB0aGUgZHJpdmVyIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCksIGl0Ci1zaG91bGQgY2FsbCBwY2lfZGlzYWJsZV9kZXZpY2UoKSB0byBkZWFsbG9jYXRlIGFueSBJUlEgcmVzb3VyY2VzLCBkaXNhYmxlCi1QQ0kgYnVzLW1hc3RlcmluZywgZXRjLiAgWW91IHNob3VsZCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGUgZGV2aWNlIGFmdGVyCisKKzMuMiBSZXF1ZXN0IE1NSU8vSU9QIHJlc291cmNlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNZW1vcnkgKE1NSU8pLCBhbmQgSS9PIHBvcnQgYWRkcmVzc2VzIHNob3VsZCBOT1QgYmUgcmVhZCBkaXJlY3RseQorZnJvbSB0aGUgUENJIGRldmljZSBjb25maWcgc3BhY2UuIFVzZSB0aGUgdmFsdWVzIGluIHRoZSBwY2lfZGV2IHN0cnVjdHVyZQorYXMgdGhlIFBDSSAiYnVzIGFkZHJlc3MiIG1pZ2h0IGhhdmUgYmVlbiByZW1hcHBlZCB0byBhICJob3N0IHBoeXNpY2FsIgorYWRkcmVzcyBieSB0aGUgYXJjaC9jaGlwLXNldCBzcGVjaWZpYyBrZXJuZWwgc3VwcG9ydC4KKworU2VlIERvY3VtZW50YXRpb24vSU8tbWFwcGluZy50eHQgZm9yIGhvdyB0byBhY2Nlc3MgZGV2aWNlIHJlZ2lzdGVycworb3IgZGV2aWNlIG1lbW9yeS4KKworVGhlIGRldmljZSBkcml2ZXIgbmVlZHMgdG8gY2FsbCBwY2lfcmVxdWVzdF9yZWdpb24oKSB0byB2ZXJpZnkKK25vIG90aGVyIGRldmljZSBpcyBhbHJlYWR5IHVzaW5nIHRoZSBzYW1lIGFkZHJlc3MgcmVzb3VyY2UuCitDb252ZXJzZWx5LCBkcml2ZXJzIHNob3VsZCBjYWxsIHBjaV9yZWxlYXNlX3JlZ2lvbigpIEFGVEVSCiBjYWxsaW5nIHBjaV9kaXNhYmxlX2RldmljZSgpLgorVGhlIGlkZWEgaXMgdG8gcHJldmVudCB0d28gZGV2aWNlcyBjb2xsaWRpbmcgb24gdGhlIHNhbWUgYWRkcmVzcyByYW5nZS4KIAotNC4gSG93IHRvIGFjY2VzcyBQQ0kgY29uZmlnIHNwYWNlCitbIFNlZSBPUyBCVUcgY29tbWVudCBhYm92ZS4gQ3VycmVudGx5ICgyLjYuMTkpLCBUaGUgZHJpdmVyIGNhbiBvbmx5CisgIGRldGVybWluZSBNTUlPIGFuZCBJTyBQb3J0IHJlc291cmNlIGF2YWlsYWJpbGl0eSBfYWZ0ZXJfIGNhbGxpbmcKKyAgcGNpX2VuYWJsZV9kZXZpY2UoKS4gXQorCitHZW5lcmljIGZsYXZvcnMgb2YgcGNpX3JlcXVlc3RfcmVnaW9uKCkgYXJlIHJlcXVlc3RfbWVtX3JlZ2lvbigpCisoZm9yIE1NSU8gcmFuZ2VzKSBhbmQgcmVxdWVzdF9yZWdpb24oKSAoZm9yIElPIFBvcnQgcmFuZ2VzKS4KK1VzZSB0aGVzZSBmb3IgYWRkcmVzcyByZXNvdXJjZXMgdGhhdCBhcmUgbm90IGRlc2NyaWJlZCBieSAibm9ybWFsIiBQQ0kKK0JBUnMuCisKK0Fsc28gc2VlIHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMoKSBiZWxvdy4KKworCiszLjMgU2V0IHRoZSBETUEgbWFzayBzaXplCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitbIElmIGFueXRoaW5nIGJlbG93IGRvZXNuJ3QgbWFrZSBzZW5zZSwgcGxlYXNlIHJlZmVyIHRvCisgIERvY3VtZW50YXRpb24vRE1BLUFQSS50eHQuIFRoaXMgc2VjdGlvbiBpcyBqdXN0IGEgcmVtaW5kZXIgdGhhdAorICBkcml2ZXJzIG5lZWQgdG8gaW5kaWNhdGUgRE1BIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV2aWNlIGFuZCBpcyBub3QKKyAgYW4gYXV0aG9yaXRhdGl2ZSBzb3VyY2UgZm9yIERNQSBpbnRlcmZhY2VzLiBdCisKK1doaWxlIGFsbCBkcml2ZXJzIHNob3VsZCBleHBsaWNpdGx5IGluZGljYXRlIHRoZSBETUEgY2FwYWJpbGl0eQorKGUuZy4gMzIgb3IgNjQgYml0KSBvZiB0aGUgUENJIGJ1cyBtYXN0ZXIsIGRldmljZXMgd2l0aCBtb3JlIHRoYW4KKzMyLWJpdCBidXMgbWFzdGVyIGNhcGFiaWxpdHkgZm9yIHN0cmVhbWluZyBkYXRhIG5lZWQgdGhlIGRyaXZlcgordG8gInJlZ2lzdGVyIiB0aGlzIGNhcGFiaWxpdHkgYnkgY2FsbGluZyBwY2lfc2V0X2RtYV9tYXNrKCkgd2l0aAorYXBwcm9wcmlhdGUgcGFyYW1ldGVycy4gIEluIGdlbmVyYWwgdGhpcyBhbGxvd3MgbW9yZSBlZmZpY2llbnQgRE1BCitvbiBzeXN0ZW1zIHdoZXJlIFN5c3RlbSBSQU0gZXhpc3RzIGFib3ZlIDRHIF9waHlzaWNhbF8gYWRkcmVzcy4KKworRHJpdmVycyBmb3IgYWxsIFBDSS1YIGFuZCBQQ0llIGNvbXBsaWFudCBkZXZpY2VzIG11c3QgY2FsbAorcGNpX3NldF9kbWFfbWFzaygpIGFzIHRoZXkgYXJlIDY0LWJpdCBETUEgZGV2aWNlcy4KKworU2ltaWxhcmx5LCBkcml2ZXJzIG11c3QgYWxzbyAicmVnaXN0ZXIiIHRoaXMgY2FwYWJpbGl0eSBpZiB0aGUgZGV2aWNlCitjYW4gZGlyZWN0bHkgYWRkcmVzcyAiY29uc2lzdGVudCBtZW1vcnkiIGluIFN5c3RlbSBSQU0gYWJvdmUgNEcgcGh5c2ljYWwKK2FkZHJlc3MgYnkgY2FsbGluZyBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soKS4KK0FnYWluLCB0aGlzIGluY2x1ZGVzIGRyaXZlcnMgZm9yIGFsbCBQQ0ktWCBhbmQgUENJZSBjb21wbGlhbnQgZGV2aWNlcy4KK01hbnkgNjQtYml0ICJQQ0kiIGRldmljZXMgKGJlZm9yZSBQQ0ktWCkgYW5kIHNvbWUgUENJLVggZGV2aWNlcyBhcmUKKzY0LWJpdCBETUEgY2FwYWJsZSBmb3IgcGF5bG9hZCAoInN0cmVhbWluZyIpIGRhdGEgYnV0IG5vdCBjb250cm9sCisoImNvbnNpc3RlbnQiKSBkYXRhLgorCisKKzMuNCBTZXR1cCBzaGFyZWQgY29udHJvbCBkYXRhCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitPbmNlIHRoZSBETUEgbWFza3MgYXJlIHNldCwgdGhlIGRyaXZlciBjYW4gYWxsb2NhdGUgImNvbnNpc3RlbnQiIChhLmsuYS4gc2hhcmVkKQorbWVtb3J5LiAgU2VlIERvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgZm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBvZgordGhlIERNQSBBUElzLiBUaGlzIHNlY3Rpb24gaXMganVzdCBhIHJlbWluZGVyIHRoYXQgaXQgbmVlZHMgdG8gYmUgZG9uZQorYmVmb3JlIGVuYWJsaW5nIERNQSBvbiB0aGUgZGV2aWNlLgorCisKKzMuNSBJbml0aWFsaXplIGRldmljZSByZWdpc3RlcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1NvbWUgZHJpdmVycyB3aWxsIG5lZWQgc3BlY2lmaWMgImNhcGFiaWxpdHkiIGZpZWxkcyBwcm9ncmFtbWVkCitvciBvdGhlciAidmVuZG9yIHNwZWNpZmljIiByZWdpc3RlciBpbml0aWFsaXplZCBvciByZXNldC4KK0UuZy4gY2xlYXJpbmcgcGVuZGluZyBpbnRlcnJ1cHRzLgorCisKKzMuNiBSZWdpc3RlciBJUlEgaGFuZGxlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitXaGlsZSBjYWxsaW5nIHJlcXVlc3RfaXJxKCkgaXMgdGhlIHRoZSBsYXN0IHN0ZXAgZGVzY3JpYmVkIGhlcmUsCit0aGlzIGlzIG9mdGVuIGp1c3QgYW5vdGhlciBpbnRlcm1lZGlhdGUgc3RlcCB0byBpbml0aWFsaXplIGEgZGV2aWNlLgorVGhpcyBzdGVwIGNhbiBvZnRlbiBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZGV2aWNlIGlzIG9wZW5lZCBmb3IgdXNlLgorCitBbGwgaW50ZXJydXB0IGhhbmRsZXJzIGZvciBJUlEgbGluZXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCBJUlFGX1NIQVJFRAorYW5kIHVzZSB0aGUgZGV2aWQgdG8gbWFwIElSUXMgdG8gZGV2aWNlcyAocmVtZW1iZXIgdGhhdCBhbGwgUENJIElSUSBsaW5lcworY2FuIGJlIHNoYXJlZCkuCisKK3JlcXVlc3RfaXJxKCkgd2lsbCBhc3NvY2lhdGUgYW4gaW50ZXJydXB0IGhhbmRsZXIgYW5kIGRldmljZSBoYW5kbGUKK3dpdGggYW4gaW50ZXJydXB0IG51bWJlci4gSGlzdG9yaWNhbGx5IGludGVycnVwdCBudW1iZXJzIHJlcHJlc2VudAorSVJRIGxpbmVzIHdoaWNoIHJ1biBmcm9tIHRoZSBQQ0kgZGV2aWNlIHRvIHRoZSBJbnRlcnJ1cHQgY29udHJvbGxlci4KK1dpdGggTVNJIGFuZCBNU0ktWCAobW9yZSBiZWxvdykgdGhlIGludGVycnVwdCBudW1iZXIgaXMgYSBDUFUgInZlY3RvciIuCisKK3JlcXVlc3RfaXJxKCkgYWxzbyBlbmFibGVzIHRoZSBpbnRlcnJ1cHQuIE1ha2Ugc3VyZSB0aGUgZGV2aWNlIGlzCitxdWllc2NlZCBhbmQgZG9lcyBub3QgaGF2ZSBhbnkgaW50ZXJydXB0cyBwZW5kaW5nIGJlZm9yZSByZWdpc3RlcmluZwordGhlIGludGVycnVwdCBoYW5kbGVyLgorCitNU0kgYW5kIE1TSS1YIGFyZSBQQ0kgY2FwYWJpbGl0aWVzLiBCb3RoIGFyZSAiTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzIgord2hpY2ggZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSBDUFUgdmlhIGEgRE1BIHdyaXRlIHRvIGEgTG9jYWwgQVBJQy4KK1RoZSBmdW5kYW1lbnRhbCBkaWZmZXJlbmNlIGJldHdlZW4gTVNJIGFuZCBNU0ktWCBpcyBob3cgbXVsdGlwbGUKKyJ2ZWN0b3JzIiBnZXQgYWxsb2NhdGVkLiBNU0kgcmVxdWlyZXMgY29udGlndW91cyBibG9ja3Mgb2YgdmVjdG9ycword2hpbGUgTVNJLVggY2FuIGFsbG9jYXRlIHNldmVyYWwgaW5kaXZpZHVhbCBvbmVzLgorCitNU0kgY2FwYWJpbGl0eSBjYW4gYmUgZW5hYmxlZCBieSBjYWxsaW5nIHBjaV9lbmFibGVfbXNpKCkgb3IKK3BjaV9lbmFibGVfbXNpeCgpIGJlZm9yZSBjYWxsaW5nIHJlcXVlc3RfaXJxKCkuIFRoaXMgY2F1c2VzCit0aGUgUENJIHN1cHBvcnQgdG8gcHJvZ3JhbSBDUFUgdmVjdG9yIGRhdGEgaW50byB0aGUgUENJIGRldmljZQorY2FwYWJpbGl0eSByZWdpc3RlcnMuCisKK0lmIHlvdXIgUENJIGRldmljZSBzdXBwb3J0cyBib3RoLCB0cnkgdG8gZW5hYmxlIE1TSS1YIGZpcnN0LgorT25seSBvbmUgY2FuIGJlIGVuYWJsZWQgYXQgYSB0aW1lLiAgTWFueSBhcmNoaXRlY3R1cmVzLCBjaGlwLXNldHMsCitvciBCSU9TZXMgZG8gTk9UIHN1cHBvcnQgTVNJIG9yIE1TSS1YIGFuZCB0aGUgY2FsbCB0byBwY2lfZW5hYmxlX21zaS9tc2l4Cit3aWxsIGZhaWwuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgc2luY2UgbWFueSBkcml2ZXJzIGhhdmUKK3R3byAob3IgbW9yZSkgaW50ZXJydXB0IGhhbmRsZXJzOiBvbmUgZm9yIE1TSS9NU0ktWCBhbmQgYW5vdGhlciBmb3IgSVJRcy4KK1RoZXkgY2hvb3NlIHdoaWNoIGhhbmRsZXIgdG8gcmVnaXN0ZXIgd2l0aCByZXF1ZXN0X2lycSgpIGJhc2VkIG9uIHRoZQorcmV0dXJuIHZhbHVlIGZyb20gcGNpX2VuYWJsZV9tc2kvbXNpeCgpLgorCitUaGVyZSBhcmUgKGF0IGxlYXN0KSB0d28gcmVhbGx5IGdvb2QgcmVhc29ucyBmb3IgdXNpbmcgTVNJOgorMSkgTVNJIGlzIGFuIGV4Y2x1c2l2ZSBpbnRlcnJ1cHQgdmVjdG9yIGJ5IGRlZmluaXRpb24uCisgICBUaGlzIG1lYW5zIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBkb2Vzbid0IGhhdmUgdG8gdmVyaWZ5CisgICBpdHMgZGV2aWNlIGNhdXNlZCB0aGUgaW50ZXJydXB0LgorCisyKSBNU0kgYXZvaWRzIERNQS9JUlEgcmFjZSBjb25kaXRpb25zLiBETUEgdG8gaG9zdCBtZW1vcnkgaXMgZ3VhcmFudGVlZAorICAgdG8gYmUgdmlzaWJsZSB0byB0aGUgaG9zdCBDUFUocykgd2hlbiB0aGUgTVNJIGlzIGRlbGl2ZXJlZC4gVGhpcworICAgaXMgaW1wb3J0YW50IGZvciBib3RoIGRhdGEgY29oZXJlbmN5IGFuZCBhdm9pZGluZyBzdGFsZSBjb250cm9sIGRhdGEuCisgICBUaGlzIGd1YXJhbnRlZSBhbGxvd3MgdGhlIGRyaXZlciB0byBvbWl0IE1NSU8gcmVhZHMgdG8gZmx1c2gKKyAgIHRoZSBETUEgc3RyZWFtLgorCitTZWUgZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhLyBvciBkcml2ZXJzL25ldC90ZzMuYyBmb3IgZXhhbXBsZXMKK29mIE1TSS9NU0ktWCB1c2FnZS4KKworCisKKzQuIFBDSSBkZXZpY2Ugc2h1dGRvd24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gYSBQQ0kgZGV2aWNlIGRyaXZlciBpcyBiZWluZyB1bmxvYWRlZCwgbW9zdCBvZiB0aGUgZm9sbG93aW5nCitzdGVwcyBuZWVkIHRvIGJlIHBlcmZvcm1lZDoKKworCURpc2FibGUgdGhlIGRldmljZSBmcm9tIGdlbmVyYXRpbmcgSVJRcworCVJlbGVhc2UgdGhlIElSUSAoZnJlZV9pcnEoKSkKKwlTdG9wIGFsbCBETUEgYWN0aXZpdHkKKwlSZWxlYXNlIERNQSBidWZmZXJzIChib3RoIHN0cmVhbWluZyBhbmQgY29uc2lzdGVudCkKKwlVbnJlZ2lzdGVyIGZyb20gb3RoZXIgc3Vic3lzdGVtcyAoZS5nLiBzY3NpIG9yIG5ldGRldikKKwlEaXNhYmxlIGRldmljZSBmcm9tIHJlc3BvbmRpbmcgdG8gTU1JTy9JTyBQb3J0IGFkZHJlc3NlcworCVJlbGVhc2UgTU1JTy9JTyBQb3J0IHJlc291cmNlKHMpCisKKworNC4xIFN0b3AgSVJRcyBvbiB0aGUgZGV2aWNlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0hvdyB0byBkbyB0aGlzIGlzIGNoaXAvZGV2aWNlIHNwZWNpZmljLiBJZiBpdCdzIG5vdCBkb25lLCBpdCBvcGVucwordGhlIHBvc3NpYmlsaXR5IG9mIGEgInNjcmVhbWluZyBpbnRlcnJ1cHQiIGlmIChhbmQgb25seSBpZikKK3RoZSBJUlEgaXMgc2hhcmVkIHdpdGggYW5vdGhlciBkZXZpY2UuCisKK1doZW4gdGhlIHNoYXJlZCBJUlEgaGFuZGxlciBpcyAidW5ob29rZWQiLCB0aGUgcmVtYWluaW5nIGRldmljZXMKK3VzaW5nIHRoZSBzYW1lIElSUSBsaW5lIHdpbGwgc3RpbGwgbmVlZCB0aGUgSVJRIGVuYWJsZWQuIFRodXMgaWYgdGhlCisidW5ob29rZWQiIGRldmljZSBhc3NlcnRzIElSUSBsaW5lLCB0aGUgc3lzdGVtIHdpbGwgcmVzcG9uZCBhc3N1bWluZworaXQgd2FzIG9uZSBvZiB0aGUgcmVtYWluaW5nIGRldmljZXMgYXNzZXJ0ZWQgdGhlIElSUSBsaW5lLiBTaW5jZSBub25lCitvZiB0aGUgb3RoZXIgZGV2aWNlcyB3aWxsIGhhbmRsZSB0aGUgSVJRLCB0aGUgc3lzdGVtIHdpbGwgImhhbmciIHVudGlsCitpdCBkZWNpZGVzIHRoZSBJUlEgaXNuJ3QgZ29pbmcgdG8gZ2V0IGhhbmRsZWQgYW5kIG1hc2tzIHRoZSBJUlEgKDEwMCwwMDAKK2l0ZXJhdGlvbnMgbGF0ZXIpLiBPbmNlIHRoZSBzaGFyZWQgSVJRIGlzIG1hc2tlZCwgdGhlIHJlbWFpbmluZyBkZXZpY2VzCit3aWxsIHN0b3AgZnVuY3Rpb25pbmcgcHJvcGVybHkuIE5vdCBhIG5pY2Ugc2l0dWF0aW9uLgorCitUaGlzIGlzIGFub3RoZXIgcmVhc29uIHRvIHVzZSBNU0kgb3IgTVNJLVggaWYgaXQncyBhdmFpbGFibGUuCitNU0kgYW5kIE1TSS1YIGFyZSBkZWZpbmVkIHRvIGJlIGV4Y2x1c2l2ZSBpbnRlcnJ1cHRzIGFuZCB0aHVzCithcmUgbm90IHN1c2NlcHRpYmxlIHRvIHRoZSAic2NyZWFtaW5nIGludGVycnVwdCIgcHJvYmxlbS4KKworCis0LjIgUmVsZWFzZSB0aGUgSVJRCit+fn5+fn5+fn5+fn5+fn5+fn5+CitPbmNlIHRoZSBkZXZpY2UgaXMgcXVpZXNjZWQgKG5vIG1vcmUgSVJRcyksIG9uZSBjYW4gY2FsbCBmcmVlX2lycSgpLgorVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBjb250cm9sIG9uY2UgYW55IHBlbmRpbmcgSVJRcyBhcmUgaGFuZGxlZCwKKyJ1bmhvb2siIHRoZSBkcml2ZXJzIElSUSBoYW5kbGVyIGZyb20gdGhhdCBJUlEsIGFuZCBmaW5hbGx5IHJlbGVhc2UKK3RoZSBJUlEgaWYgbm8gb25lIGVsc2UgaXMgdXNpbmcgaXQuCisKKworNC4zIFN0b3AgYWxsIERNQSBhY3Rpdml0eQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSXQncyBleHRyZW1lbHkgaW1wb3J0YW50IHRvIHN0b3AgYWxsIERNQSBvcGVyYXRpb25zIEJFRk9SRSBhdHRlbXB0aW5nCit0byBkZWFsbG9jYXRlIERNQSBjb250cm9sIGRhdGEuIEZhaWx1cmUgdG8gZG8gc28gY2FuIHJlc3VsdCBpbiBtZW1vcnkKK2NvcnJ1cHRpb24sIGhhbmdzLCBhbmQgb24gc29tZSBjaGlwLXNldHMgYSBoYXJkIGNyYXNoLgorCitTdG9wcGluZyBETUEgYWZ0ZXIgc3RvcHBpbmcgdGhlIElSUXMgY2FuIGF2b2lkIHJhY2VzIHdoZXJlIHRoZQorSVJRIGhhbmRsZXIgbWlnaHQgcmVzdGFydCBETUEgZW5naW5lcy4KKworV2hpbGUgdGhpcyBzdGVwIHNvdW5kcyBvYnZpb3VzIGFuZCB0cml2aWFsLCBzZXZlcmFsICJtYXR1cmUiIGRyaXZlcnMKK2RpZG4ndCBnZXQgdGhpcyBzdGVwIHJpZ2h0IGluIHRoZSBwYXN0LgorCisKKzQuNCBSZWxlYXNlIERNQSBidWZmZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorT25jZSBETUEgaXMgc3RvcHBlZCwgY2xlYW4gdXAgc3RyZWFtaW5nIERNQSBmaXJzdC4KK0kuZS4gdW5tYXAgZGF0YSBidWZmZXJzIGFuZCByZXR1cm4gYnVmZmVycyB0byAidXBzdHJlYW0iCitvd25lcnMgaWYgdGhlcmUgaXMgb25lLgorCitUaGVuIGNsZWFuIHVwICJjb25zaXN0ZW50IiBidWZmZXJzIHdoaWNoIGNvbnRhaW4gdGhlIGNvbnRyb2wgZGF0YS4KKworU2VlIERvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgZm9yIGRldGFpbHMgb24gdW5tYXBwaW5nIGludGVyZmFjZXMuCisKKworNC41IFVucmVnaXN0ZXIgZnJvbSBvdGhlciBzdWJzeXN0ZW1zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK01vc3QgbG93IGxldmVsIFBDSSBkZXZpY2UgZHJpdmVycyBzdXBwb3J0IHNvbWUgb3RoZXIgc3Vic3lzdGVtCitsaWtlIFVTQiwgQUxTQSwgU0NTSSwgTmV0RGV2LCBJbmZpbmliYW5kLCBldGMuIE1ha2Ugc3VyZSB5b3VyCitkcml2ZXIgaXNuJ3QgbG9zaW5nIHJlc291cmNlcyBmcm9tIHRoYXQgb3RoZXIgc3Vic3lzdGVtLgorSWYgdGhpcyBoYXBwZW5zLCB0eXBpY2FsbHkgdGhlIHN5bXB0b20gaXMgYW4gT29wcyAocGFuaWMpIHdoZW4KK3RoZSBzdWJzeXN0ZW0gYXR0ZW1wdHMgdG8gY2FsbCBpbnRvIGEgZHJpdmVyIHRoYXQgaGFzIGJlZW4gdW5sb2FkZWQuCisKKworNC42IERpc2FibGUgRGV2aWNlIGZyb20gcmVzcG9uZGluZyB0byBNTUlPL0lPIFBvcnQgYWRkcmVzc2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK2lvX3VubWFwKCkgTU1JTyBvciBJTyBQb3J0IHJlc291cmNlcyBhbmQgdGhlbiBjYWxsIHBjaV9kaXNhYmxlX2RldmljZSgpLgorVGhpcyBpcyB0aGUgc3ltbWV0cmljIG9wcG9zaXRlIG9mIHBjaV9lbmFibGVfZGV2aWNlKCkuCitEbyBub3QgYWNjZXNzIGRldmljZSByZWdpc3RlcnMgYWZ0ZXIgY2FsbGluZyBwY2lfZGlzYWJsZV9kZXZpY2UoKS4KKworCis0LjcgUmVsZWFzZSBNTUlPL0lPIFBvcnQgUmVzb3VyY2UocykKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorQ2FsbCBwY2lfcmVsZWFzZV9yZWdpb24oKSB0byBtYXJrIHRoZSBNTUlPIG9yIElPIFBvcnQgcmFuZ2UgYXMgYXZhaWxhYmxlLgorRmFpbHVyZSB0byBkbyBzbyB1c3VhbGx5IHJlc3VsdHMgaW4gdGhlIGluYWJpbGl0eSB0byByZWxvYWQgdGhlIGRyaXZlci4KKworCisKKzUuIEhvdyB0byBhY2Nlc3MgUENJIGNvbmZpZyBzcGFjZQogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gICBZb3UgY2FuIHVzZSBwY2lfKHJlYWR8d3JpdGUpX2NvbmZpZ18oYnl0ZXx3b3JkfGR3b3JkKSB0byBhY2Nlc3MgdGhlIGNvbmZpZworCitZb3UgY2FuIHVzZSBwY2lfKHJlYWR8d3JpdGUpX2NvbmZpZ18oYnl0ZXx3b3JkfGR3b3JkKSB0byBhY2Nlc3MgdGhlIGNvbmZpZwogc3BhY2Ugb2YgYSBkZXZpY2UgcmVwcmVzZW50ZWQgYnkgc3RydWN0IHBjaV9kZXYgKi4gQWxsIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gMAogd2hlbiBzdWNjZXNzZnVsIG9yIGFuIGVycm9yIGNvZGUgKFBDSUJJT1NfLi4uKSB3aGljaCBjYW4gYmUgdHJhbnNsYXRlZCB0byBhIHRleHQKIHN0cmluZyBieSBwY2liaW9zX3N0cmVycm9yLiBNb3N0IGRyaXZlcnMgZXhwZWN0IHRoYXQgYWNjZXNzZXMgdG8gdmFsaWQgUENJCiBkZXZpY2VzIGRvbid0IGZhaWwuCiAKLSAgIElmIHlvdSBkb24ndCBoYXZlIGEgc3RydWN0IHBjaV9kZXYgYXZhaWxhYmxlLCB5b3UgY2FuIGNhbGwKK0lmIHlvdSBkb24ndCBoYXZlIGEgc3RydWN0IHBjaV9kZXYgYXZhaWxhYmxlLCB5b3UgY2FuIGNhbGwKIHBjaV9idXNfKHJlYWR8d3JpdGUpX2NvbmZpZ18oYnl0ZXx3b3JkfGR3b3JkKSB0byBhY2Nlc3MgYSBnaXZlbiBkZXZpY2UKIGFuZCBmdW5jdGlvbiBvbiB0aGF0IGJ1cy4KIAotICAgSWYgeW91IGFjY2VzcyBmaWVsZHMgaW4gdGhlIHN0YW5kYXJkIHBvcnRpb24gb2YgdGhlIGNvbmZpZyBoZWFkZXIsIHBsZWFzZQorSWYgeW91IGFjY2VzcyBmaWVsZHMgaW4gdGhlIHN0YW5kYXJkIHBvcnRpb24gb2YgdGhlIGNvbmZpZyBoZWFkZXIsIHBsZWFzZQogdXNlIHN5bWJvbGljIG5hbWVzIG9mIGxvY2F0aW9ucyBhbmQgYml0cyBkZWNsYXJlZCBpbiA8bGludXgvcGNpLmg+LgogCi0gICBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgRXh0ZW5kZWQgUENJIENhcGFiaWxpdHkgcmVnaXN0ZXJzLCBqdXN0IGNhbGwKK0lmIHlvdSBuZWVkIHRvIGFjY2VzcyBFeHRlbmRlZCBQQ0kgQ2FwYWJpbGl0eSByZWdpc3RlcnMsIGp1c3QgY2FsbAogcGNpX2ZpbmRfY2FwYWJpbGl0eSgpIGZvciB0aGUgcGFydGljdWxhciBjYXBhYmlsaXR5IGFuZCBpdCB3aWxsIGZpbmQgdGhlCiBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGJsb2NrIGZvciB5b3UuCiAKIAotNS4gQWRkcmVzc2VzIGFuZCBpbnRlcnJ1cHRzCi1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLSAgIE1lbW9yeSBhbmQgcG9ydCBhZGRyZXNzZXMgYW5kIGludGVycnVwdCBudW1iZXJzIHNob3VsZCBOT1QgYmUgcmVhZCBmcm9tIHRoZQotY29uZmlnIHNwYWNlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdmFsdWVzIGluIHRoZSBwY2lfZGV2IHN0cnVjdHVyZSBhcyB0aGV5IG1pZ2h0Ci1oYXZlIGJlZW4gcmVtYXBwZWQgYnkgdGhlIGtlcm5lbC4KLQotICAgU2VlIERvY3VtZW50YXRpb24vSU8tbWFwcGluZy50eHQgZm9yIGhvdyB0byBhY2Nlc3MgZGV2aWNlIG1lbW9yeS4KLQotICAgVGhlIGRldmljZSBkcml2ZXIgbmVlZHMgdG8gY2FsbCBwY2lfcmVxdWVzdF9yZWdpb24oKSB0byBtYWtlIHN1cmUKLW5vIG90aGVyIGRldmljZSBpcyBhbHJlYWR5IHVzaW5nIHRoZSBzYW1lIHJlc291cmNlLiBUaGUgZHJpdmVyIGlzIGV4cGVjdGVkCi10byBkZXRlcm1pbmUgTU1JTyBhbmQgSU8gUG9ydCByZXNvdXJjZSBhdmFpbGFiaWxpdHkgX2JlZm9yZV8gY2FsbGluZwotcGNpX2VuYWJsZV9kZXZpY2UoKS4gIENvbnZlcnNlbHksIGRyaXZlcnMgc2hvdWxkIGNhbGwgcGNpX3JlbGVhc2VfcmVnaW9uKCkKLV9hZnRlcl8gY2FsbGluZyBwY2lfZGlzYWJsZV9kZXZpY2UoKS4gVGhlIGlkZWEgaXMgdG8gcHJldmVudCB0d28gZGV2aWNlcwotY29sbGlkaW5nIG9uIHRoZSBzYW1lIGFkZHJlc3MgcmFuZ2UuCi0KLUdlbmVyaWMgZmxhdm9ycyBvZiBwY2lfcmVxdWVzdF9yZWdpb24oKSBhcmUgcmVxdWVzdF9tZW1fcmVnaW9uKCkKLShmb3IgTU1JTyByYW5nZXMpIGFuZCByZXF1ZXN0X3JlZ2lvbigpIChmb3IgSU8gUG9ydCByYW5nZXMpLgotVXNlIHRoZXNlIGZvciBhZGRyZXNzIHJlc291cmNlcyB0aGF0IGFyZSBub3QgZGVzY3JpYmVkIGJ5ICJub3JtYWwiIFBDSQotaW50ZXJmYWNlcyAoZS5nLiBCQVIpLgotCi0gICBBbGwgaW50ZXJydXB0IGhhbmRsZXJzIHNob3VsZCBiZSByZWdpc3RlcmVkIHdpdGggSVJRRl9TSEFSRUQgYW5kIHVzZSB0aGUgZGV2aWQKLXRvIG1hcCBJUlFzIHRvIGRldmljZXMgKHJlbWVtYmVyIHRoYXQgYWxsIFBDSSBpbnRlcnJ1cHRzIGFyZSBzaGFyZWQpLgotCiAKIDYuIE90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKIHBjaV9maW5kX3Nsb3QoKQkJCUZpbmQgcGNpX2RldiBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGJ1cyBhbmQKIAkJCQlzbG90IG51bWJlcnMuCiBwY2lfc2V0X3Bvd2VyX3N0YXRlKCkJCVNldCBQQ0kgUG93ZXIgTWFuYWdlbWVudCBzdGF0ZSAoMD1EMCAuLi4gMz1EMykKQEAgLTI0NywxMSArNTYwLDEyIEBACiBwY2lfY2xlYXJfbXdpKCkJCQlEaXNhYmxlIE1lbW9yeS1Xcml0ZS1JbnZhbGlkYXRlIHRyYW5zYWN0aW9ucy4KIAogCisKIDcuIE1pc2NlbGxhbmVvdXMgaGludHMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLVdoZW4gZGlzcGxheWluZyBQQ0kgc2xvdCBuYW1lcyB0byB0aGUgdXNlciAoZm9yIGV4YW1wbGUgd2hlbiBhIGRyaXZlciB3YW50cwotdG8gdGVsbCB0aGUgdXNlciB3aGF0IGNhcmQgaGFzIGl0IGZvdW5kKSwgcGxlYXNlIHVzZSBwY2lfbmFtZShwY2lfZGV2KQotZm9yIHRoaXMgcHVycG9zZS4KKworV2hlbiBkaXNwbGF5aW5nIFBDSSBkZXZpY2UgbmFtZXMgdG8gdGhlIHVzZXIgKGZvciBleGFtcGxlIHdoZW4gYSBkcml2ZXIgd2FudHMKK3RvIHRlbGwgdGhlIHVzZXIgd2hhdCBjYXJkIGhhcyBpdCBmb3VuZCksIHBsZWFzZSB1c2UgcGNpX25hbWUocGNpX2RldikuCiAKIEFsd2F5cyByZWZlciB0byB0aGUgUENJIGRldmljZXMgYnkgYSBwb2ludGVyIHRvIHRoZSBwY2lfZGV2IHN0cnVjdHVyZS4KIEFsbCBQQ0kgbGF5ZXIgZnVuY3Rpb25zIHVzZSB0aGlzIGlkZW50aWZpY2F0aW9uIGFuZCBpdCdzIHRoZSBvbmx5CkBAIC0yNTksMzEgKzU3MywxMTMgQEAKIHNwZWNpYWwgcHVycG9zZXMgLS0gb24gc3lzdGVtcyB3aXRoIG11bHRpcGxlIHByaW1hcnkgYnVzZXMgdGhlaXIgc2VtYW50aWNzCiBjYW4gYmUgcHJldHR5IGNvbXBsZXguCiAKLUlmIHlvdSdyZSBnb2luZyB0byB1c2UgUENJIGJ1cyBtYXN0ZXJpbmcgRE1BLCB0YWtlIGEgbG9vayBhdAotRG9jdW1lbnRhdGlvbi9ETUEtbWFwcGluZy50eHQuCi0KIERvbid0IHRyeSB0byB0dXJuIG9uIEZhc3QgQmFjayB0byBCYWNrIHdyaXRlcyBpbiB5b3VyIGRyaXZlci4gIEFsbCBkZXZpY2VzCiBvbiB0aGUgYnVzIG5lZWQgdG8gYmUgY2FwYWJsZSBvZiBkb2luZyBpdCwgc28gdGhpcyBpcyBzb21ldGhpbmcgd2hpY2ggbmVlZHMKIHRvIGJlIGhhbmRsZWQgYnkgcGxhdGZvcm0gYW5kIGdlbmVyaWMgY29kZSwgbm90IGluZGl2aWR1YWwgZHJpdmVycy4KIAogCisKIDguIFZlbmRvciBhbmQgZGV2aWNlIGlkZW50aWZpY2F0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1Gb3IgdGhlIGZ1dHVyZSwgbGV0J3MgYXZvaWQgYWRkaW5nIGRldmljZSBpZHMgdG8gaW5jbHVkZS9saW51eC9wY2lfaWRzLmguCiAKLVBDSV9WRU5ET1JfSURfeHh4IGZvciB2ZW5kb3JzLCBhbmQgYSBoZXggY29uc3RhbnQgZm9yIGRldmljZSBpZHMuCitPbmUgaXMgbm90IG5vdCByZXF1aXJlZCB0byBhZGQgbmV3IGRldmljZSBpZHMgdG8gaW5jbHVkZS9saW51eC9wY2lfaWRzLmguCitQbGVhc2UgYWRkIFBDSV9WRU5ET1JfSURfeHh4IGZvciB2ZW5kb3JzIGFuZCBhIGhleCBjb25zdGFudCBmb3IgZGV2aWNlIGlkcy4KIAotUmF0aW9uYWxlOiAgUENJX1ZFTkRPUl9JRF94eHggY29uc3RhbnRzIGFyZSByZS11c2VkLCBidXQgZGV2aWNlIGlkcyBhcmUgbm90LgotICAgIEZ1cnRoZXIsIGRldmljZSBpZHMgYXJlIGFyYml0cmFyeSBoZXggbnVtYmVycywgbm9ybWFsbHkgdXNlZCBvbmx5IGluIGEKLSAgICBzaW5nbGUgbG9jYXRpb24sIHRoZSBwY2lfZGV2aWNlX2lkIHRhYmxlLgorUENJX1ZFTkRPUl9JRF94eHggY29uc3RhbnRzIGFyZSByZS11c2VkLiBUaGUgZGV2aWNlIGlkcyBhcmUgYXJiaXRyYXJ5CitoZXggbnVtYmVycyAodmVuZG9yIGNvbnRyb2xsZWQpIGFuZCBub3JtYWxseSB1c2VkIG9ubHkgaW4gYSBzaW5nbGUKK2xvY2F0aW9uLCB0aGUgcGNpX2RldmljZV9pZCB0YWJsZS4KKworUGxlYXNlIERPIHN1Ym1pdCBuZXcgdmVuZG9yL2RldmljZSBpZHMgdG8gcGNpaWRzLnNvdXJjZWZvcmdlLm5ldCBwcm9qZWN0LgorCisKIAogOS4gT2Jzb2xldGUgZnVuY3Rpb25zCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwogVGhlcmUgYXJlIHNldmVyYWwgZnVuY3Rpb25zIHdoaWNoIHlvdSBtaWdodCBjb21lIGFjcm9zcyB3aGVuIHRyeWluZyB0bwogcG9ydCBhbiBvbGQgZHJpdmVyIHRvIHRoZSBuZXcgUENJIGludGVyZmFjZS4gIFRoZXkgYXJlIG5vIGxvbmdlciBwcmVzZW50CiBpbiB0aGUga2VybmVsIGFzIHRoZXkgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBob3RwbHVnIG9yIFBDSSBkb21haW5zIG9yCiBoYXZpbmcgc2FuZSBsb2NraW5nLgogCi1wY2lfZmluZF9kZXZpY2UoKQkJU3VwZXJzZWRlZCBieSBwY2lfZ2V0X2RldmljZSgpCi1wY2lfZmluZF9zdWJzeXMoKQkJU3VwZXJzZWRlZCBieSBwY2lfZ2V0X3N1YnN5cygpCi1wY2lfZmluZF9zbG90KCkJCQlTdXBlcnNlZGVkIGJ5IHBjaV9nZXRfc2xvdCgpCitwY2lfZmluZF9kZXZpY2UoKQlTdXBlcnNlZGVkIGJ5IHBjaV9nZXRfZGV2aWNlKCkKK3BjaV9maW5kX3N1YnN5cygpCVN1cGVyc2VkZWQgYnkgcGNpX2dldF9zdWJzeXMoKQorcGNpX2ZpbmRfc2xvdCgpCQlTdXBlcnNlZGVkIGJ5IHBjaV9nZXRfc2xvdCgpCisKKworVGhlIGFsdGVybmF0aXZlIGlzIHRoZSB0cmFkaXRpb25hbCBQQ0kgZGV2aWNlIGRyaXZlciB0aGF0IHdhbGtzIFBDSQorZGV2aWNlIGxpc3RzLiBUaGlzIGlzIHN0aWxsIHBvc3NpYmxlIGJ1dCBkaXNjb3VyYWdlZC4KKworCisKKzEwLiBwY2lfZW5hYmxlX2RldmljZV9iYXJzKCkgYW5kIExlZ2FjeSBJL08gUG9ydCBzcGFjZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0xhcmdlIHNlcnZlcnMgbWF5IG5vdCBiZSBhYmxlIHRvIHByb3ZpZGUgSS9PIHBvcnQgcmVzb3VyY2VzIHRvIGFsbCBQQ0kKK2RldmljZXMuIEkvTyBQb3J0IHNwYWNlIGlzIG9ubHkgNjRLQiBvbiBJbnRlbCBBcmNoaXRlY3R1cmVbMV0gYW5kIGlzCitsaWtlbHkgYWxzbyBmcmFnbWVudGVkIHNpbmNlIHRoZSBJL08gYmFzZSByZWdpc3RlciBvZiBQQ0ktdG8tUENJCiticmlkZ2Ugd2lsbCB1c3VhbGx5IGJlIGFsaWduZWQgdG8gYSA0S0IgYm91bmRhcnlbMl0uIE9uIHN1Y2ggc3lzdGVtcywKK3BjaV9lbmFibGVfZGV2aWNlKCkgYW5kIHBjaV9yZXF1ZXN0X3JlZ2lvbigpIHdpbGwgZmFpbCB3aGVuCithdHRlbXB0aW5nIHRvIGVuYWJsZSBJL08gUG9ydCByZWdpb25zIHRoYXQgZG9uJ3QgaGF2ZSBJL08gUG9ydAorcmVzb3VyY2VzIGFzc2lnbmVkLgorCitGb3J0dW5hdGVseSwgbWFueSBQQ0kgZGV2aWNlcyB3aGljaCByZXF1ZXN0IEkvTyBQb3J0IHJlc291cmNlcyBhbHNvCitwcm92aWRlIGFjY2VzcyB0byB0aGUgc2FtZSByZWdpc3RlcnMgdmlhIE1NSU8gQkFScy4gVGhlc2UgZGV2aWNlcyBjYW4KK2JlIGhhbmRsZWQgd2l0aG91dCB1c2luZyBJL08gcG9ydCBzcGFjZSBhbmQgdGhlIGRyaXZlcnMgdHlwaWNhbGx5CitvZmZlciBhIENPTkZJR18gb3B0aW9uIHRvIG9ubHkgdXNlIE1NSU8gcmVnaW9ucworKGUuZy4gQ09ORklHX1RVTElQX01NSU8pLiBQQ0kgZGV2aWNlcyB0eXBpY2FsbHkgcHJvdmlkZSBJL08gcG9ydAoraW50ZXJmYWNlIGZvciBsZWdhY3kgT1NlcyBhbmQgd2lsbCB3b3JrIHdoZW4gSS9PIHBvcnQgcmVzb3VyY2VzIGFyZSBub3QKK2Fzc2lnbmVkLiBUaGUgIlBDSSBMb2NhbCBCdXMgU3BlY2lmaWNhdGlvbiBSZXZpc2lvbiAzLjAiIGRpc2N1c3NlcwordGhpcyBvbiBwLjQ0LCAiSU1QTEVNRU5UQVRJT04gTk9URSIuCisKK0lmIHlvdXIgUENJIGRldmljZSBkcml2ZXIgZG9lc24ndCBuZWVkIEkvTyBwb3J0IHJlc291cmNlcyBhc3NpZ25lZCB0bworSS9PIFBvcnQgQkFScywgeW91IHNob3VsZCB1c2UgcGNpX2VuYWJsZV9kZXZpY2VfYmFycygpIGluc3RlYWQgb2YKK3BjaV9lbmFibGVfZGV2aWNlKCkgaW4gb3JkZXIgbm90IHRvIGVuYWJsZSBJL08gcG9ydCByZWdpb25zIGZvciB0aGUKK2NvcnJlc3BvbmRpbmcgZGV2aWNlcy4gSW4gYWRkaXRpb24sIHlvdSBzaG91bGQgdXNlCitwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKCkgYW5kIHBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMoKQoraW5zdGVhZCBvZiBwY2lfcmVxdWVzdF9yZWdpb25zKCkvcGNpX3JlbGVhc2VfcmVnaW9ucygpIGluIG9yZGVyIG5vdCB0bworcmVxdWVzdC9yZWxlYXNlIEkvTyBwb3J0IHJlZ2lvbnMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZXMuCisKK1sxXSBTb21lIHN5c3RlbXMgc3VwcG9ydCA2NEtCIEkvTyBwb3J0IHNwYWNlIHBlciBQQ0kgc2VnbWVudC4KK1syXSBTb21lIFBDSS10by1QQ0kgYnJpZGdlcyBzdXBwb3J0IG9wdGlvbmFsIDFLQiBhbGlnbmVkIEkvTyBiYXNlLgorCisKKworMTEuIE1NSU8gU3BhY2UgYW5kICJXcml0ZSBQb3N0aW5nIgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitDb252ZXJ0aW5nIGEgZHJpdmVyIGZyb20gdXNpbmcgSS9PIFBvcnQgc3BhY2UgdG8gdXNpbmcgTU1JTyBzcGFjZQorb2Z0ZW4gcmVxdWlyZXMgc29tZSBhZGRpdGlvbmFsIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgIndyaXRlIHBvc3RpbmciCituZWVkcyB0byBiZSBoYW5kbGVkLiBNYW55IGRyaXZlcnMgKGUuZy4gdGczLCBhY2VuaWMsIHN5bTUzYzh4eF8yKQorYWxyZWFkeSBkbyB0aGlzLiBJL08gUG9ydCBzcGFjZSBndWFyYW50ZWVzIHdyaXRlIHRyYW5zYWN0aW9ucyByZWFjaCB0aGUgUENJCitkZXZpY2UgYmVmb3JlIHRoZSBDUFUgY2FuIGNvbnRpbnVlLiBXcml0ZXMgdG8gTU1JTyBzcGFjZSBhbGxvdyB0aGUgQ1BVCit0byBjb250aW51ZSBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIHJlYWNoZXMgdGhlIFBDSSBkZXZpY2UuIEhXIHdlZW5pZXMKK2NhbGwgdGhpcyAiV3JpdGUgUG9zdGluZyIgYmVjYXVzZSB0aGUgd3JpdGUgY29tcGxldGlvbiBpcyAicG9zdGVkIiB0bwordGhlIENQVSBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGhhcyByZWFjaGVkIGl0cyBkZXN0aW5hdGlvbi4KKworVGh1cywgdGltaW5nIHNlbnNpdGl2ZSBjb2RlIHNob3VsZCBhZGQgcmVhZGwoKSB3aGVyZSB0aGUgQ1BVIGlzCitleHBlY3RlZCB0byB3YWl0IGJlZm9yZSBkb2luZyBvdGhlciB3b3JrLiAgVGhlIGNsYXNzaWMgImJpdCBiYW5naW5nIgorc2VxdWVuY2Ugd29ya3MgZmluZSBmb3IgSS9PIFBvcnQgc3BhY2U6CisKKyAgICAgICBmb3IgKGkgPSA4OyAtLWk7IHZhbCA+Pj0gMSkgeworICAgICAgICAgICAgICAgb3V0Yih2YWwgJiAxLCBpb3BvcnRfcmVnKTsgICAgICAvKiB3cml0ZSBiaXQgKi8KKyAgICAgICAgICAgICAgIHVkZWxheSgxMCk7CisgICAgICAgfQorCitUaGUgc2FtZSBzZXF1ZW5jZSBmb3IgTU1JTyBzcGFjZSBzaG91bGQgYmU6CisKKyAgICAgICBmb3IgKGkgPSA4OyAtLWk7IHZhbCA+Pj0gMSkgeworICAgICAgICAgICAgICAgd3JpdGViKHZhbCAmIDEsIG1taW9fcmVnKTsgICAgICAvKiB3cml0ZSBiaXQgKi8KKyAgICAgICAgICAgICAgIHJlYWRiKHNhZmVfbW1pb19yZWcpOyAgICAgICAgICAgLyogZmx1c2ggcG9zdGVkIHdyaXRlICovCisgICAgICAgICAgICAgICB1ZGVsYXkoMTApOworICAgICAgIH0KKworSXQgaXMgaW1wb3J0YW50IHRoYXQgInNhZmVfbW1pb19yZWciIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdHMgdGhhdAoraW50ZXJmZXJlcyB3aXRoIHRoZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgZGV2aWNlLgorCitBbm90aGVyIGNhc2UgdG8gd2F0Y2ggb3V0IGZvciBpcyB3aGVuIHJlc2V0dGluZyBhIFBDSSBkZXZpY2UuIFVzZSBQQ0kKK0NvbmZpZ3VyYXRpb24gc3BhY2UgcmVhZHMgdG8gZmx1c2ggdGhlIHdyaXRlbCgpLiBUaGlzIHdpbGwgZ3JhY2VmdWxseQoraGFuZGxlIHRoZSBQQ0kgbWFzdGVyIGFib3J0IG9uIGFsbCBwbGF0Zm9ybXMgaWYgdGhlIFBDSSBkZXZpY2UgaXMKK2V4cGVjdGVkIHRvIG5vdCByZXNwb25kIHRvIGEgcmVhZGwoKS4gIE1vc3QgeDg2IHBsYXRmb3JtcyB3aWxsIGFsbG93CitNTUlPIHJlYWRzIHRvIG1hc3RlciBhYm9ydCAoYS5rLmEuICJTb2Z0IEZhaWwiKSBhbmQgcmV0dXJuIGdhcmJhZ2UKKyhlLmcuIH4wKS4gQnV0IG1hbnkgUklTQyBwbGF0Zm9ybXMgd2lsbCBjcmFzaCAoYS5rLmEuIkhhcmQgRmFpbCIpLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CmluZGV4IGIzYmQzNjYuLjMzOTk0MjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CkBAIC0xNzAzLDI5ICsxNzAzLDMyIEBACiAgICAgUmVxdWlyZWQgcHJvcGVydGllczoKIAogICAgICAtIGRldmljZV90eXBlIDogaGFzIHRvIGJlICJyb20iCi0gICAgIC0gY29tcGF0aWJsZSA6IFNob3VsZCBzcGVjaWZ5IHdoYXQgdGhpcyBST00gZGV2aWNlIGlzIGNvbXBhdGlibGUgd2l0aAotICAgICAgIChpLmUuICJvbmVuYW5kIikuIEN1cnJlbnRseSwgdGhpcyBpcyBtb3N0IGxpa2VseSB0byBiZSAiZGlyZWN0LW1hcHBlZCIKLSAgICAgICAod2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIE1URCBwaHlzbWFwIG1hcHBpbmcgZHJpdmVyKS4KLSAgICAgLSByZWdzIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCAob3IgbWVtb3J5IG1hcHBpbmcpIGZvcgorICAgICAtIGNvbXBhdGlibGUgOiBTaG91bGQgc3BlY2lmeSB3aGF0IHRoaXMgZmxhc2ggZGV2aWNlIGlzIGNvbXBhdGlibGUgd2l0aC4KKyAgICAgICBDdXJyZW50bHksIHRoaXMgaXMgbW9zdCBsaWtlbHkgdG8gYmUgImRpcmVjdC1tYXBwZWQiICh3aGljaAorICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBNVEQgcGh5c21hcCBtYXBwaW5nIGRyaXZlcikuCisgICAgIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCAob3IgbWVtb3J5IG1hcHBpbmcpIGZvcgogICAgICAgIHRoZSBkZXZpY2UuCisgICAgIC0gYmFuay13aWR0aCA6IFdpZHRoIG9mIHRoZSBmbGFzaCBkYXRhIGJ1cyBpbiBieXRlcy4gUmVxdWlyZWQKKyAgICAgICBmb3IgdGhlIE5PUiBmbGFzaGVzIChjb21wYXRpYmxlID09ICJkaXJlY3QtbWFwcGVkIiBhbmQgb3RoZXJzKSBPTkxZLgogCiAgICAgUmVjb21tZW5kZWQgcHJvcGVydGllcyA6CiAKLSAgICAgLSBiYW5rLXdpZHRoIDogV2lkdGggb2YgdGhlIGZsYXNoIGRhdGEgYnVzIGluIGJ5dGVzLiBSZXF1aXJlZAotICAgICAgIGZvciB0aGUgTk9SIGZsYXNoZXMgKGNvbXBhdGlibGUgPT0gImRpcmVjdC1tYXBwZWQiIGFuZCBvdGhlcnMpIE9OTFkuCiAgICAgIC0gcGFydGl0aW9ucyA6IFNldmVyYWwgcGFpcnMgb2YgMzItYml0IHZhbHVlcyB3aGVyZSB0aGUgZmlyc3QgdmFsdWUgaXMKICAgICAgICBwYXJ0aXRpb24ncyBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGRldmljZSBhbmQgdGhlIHNlY29uZCBvbmUgaXMKICAgICAgICBwYXJ0aXRpb24gc2l6ZSBpbiBieXRlcyB3aXRoIExTQiB1c2VkIHRvIHNpZ25pZnkgYSByZWFkIG9ubHkKLSAgICAgICBwYXJ0aXRpdG9uIChzbywgdGhlIHBhcml0aW9uIHNpemUgc2hvdWxkIGFsd2F5cyBiZSBhbiBldmVuIG51bWJlcikuCisgICAgICAgcGFydGl0aW9uIChzbywgdGhlIHBhcml0aW9uIHNpemUgc2hvdWxkIGFsd2F5cyBiZSBhbiBldmVuIG51bWJlcikuCiAgICAgIC0gcGFydGl0aW9uLW5hbWVzIDogVGhlIGxpc3Qgb2YgY29uY2F0ZW5hdGVkIHplcm8gdGVybWluYXRlZCBzdHJpbmdzCiAgICAgICAgcmVwcmVzZW50aW5nIHRoZSBwYXJ0aXRpb24gbmFtZXMuCisgICAgIC0gcHJvYmUtdHlwZSA6IFRoZSB0eXBlIG9mIHByb2JlIHdoaWNoIHNob3VsZCBiZSBkb25lIGZvciB0aGUgY2hpcAorICAgICAgIChKRURFQyB2cyBDRkkgYWN0dWFsbHkpLiBWYWxpZCBPTkxZIGZvciBOT1IgZmxhc2hlcy4KIAogICAgRXhhbXBsZToKIAogIAlmbGFzaEBmZjAwMDAwMCB7CiAgCQlkZXZpY2VfdHlwZSA9ICJyb20iOwogIAkJY29tcGF0aWJsZSA9ICJkaXJlY3QtbWFwcGVkIjsKLSAJCXJlZ3MgPSA8ZmYwMDAwMDAgMDEwMDAwMDA+OworIAkJcHJvYmUtdHlwZSA9ICJDRkkiOworIAkJcmVnID0gPGZmMDAwMDAwIDAxMDAwMDAwPjsKICAJCWJhbmstd2lkdGggPSA8ND47CiAgCQlwYXJ0aXRpb25zID0gPDAwMDAwMDAwIDAwZjgwMDAwCiAgCQkJICAgICAgMDBmODAwMDAgMDAwODAwMDE+OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL21wYzUyeHgtZGV2aWNlLXRyZWUtYmluZGluZ3MudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL21wYzUyeHgtZGV2aWNlLXRyZWUtYmluZGluZ3MudHh0CmluZGV4IGQwNzdkNzYuLjY5ZjAxNmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9tcGM1Mnh4LWRldmljZS10cmVlLWJpbmRpbmdzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvbXBjNTJ4eC1kZXZpY2UtdHJlZS1iaW5kaW5ncy50eHQKQEAgLTQsNiArNCwxMiBAQAogKGMpIDIwMDYgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkCiBHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseSBhdCBzZWNyZXRsYWIuY2E+CiAKKyoqKioqKioqKiogRFJBRlQgKioqKioqKioqKioKKyogV0FSTklORzogRG8gbm90IGRlcGVuZCBvbiB0aGUgc3RhYmlsaXR5IG9mIHRoZXNlIGJpbmRpbmdzIGp1c3QgeWV0LgorKiBUaGUgTVBDNTIwMCBkZXZpY2UgdHJlZSBjb252ZW50aW9ucyBhcmUgc3RpbGwgaW4gZmx1eAorKiBLZWVwIGFuIGV5ZSBvbiB0aGUgbGludXhwcGMtZGV2IG1haWxpbmcgbGlzdCBmb3IgbW9yZSBkZXRhaWxzCisqKioqKioqKioqIERSQUZUICoqKioqKioqKioqCisKIEkgLSBJbnRyb2R1Y3Rpb24KID09PT09PT09PT09PT09PT0KIEJvYXJkcyBzdXBwb3J0ZWQgYnkgdGhlIGFyY2gvcG93ZXJwYyBhcmNoaXRlY3R1cmUgcmVxdWlyZSBkZXZpY2UgdHJlZSBiZQpAQCAtMTU3LDggKzE2Myw4IEBACiBtc2NhbkA8YWRkcj4JbXNjYW4JCSotbXNjYW4JCUNBTiBidXMgY29udHJvbGxlcgogcGNpQDxhZGRyPglwY2kJCSotcGNpCQlQQ0kgYnJpZGdlCiBzZXJpYWxAPGFkZHI+CXNlcmlhbAkJKi1wc2MtdWFydAlQU0MgaW4gc2VyaWFsIG1vZGUKLWkyc0A8YWRkcj4JaTJzCQkqLXBzYy1pMnMJUFNDIGluIGkycyBtb2RlCi1hYzk3QDxhZGRyPglhYzk3CQkqLXBzYy1hYzk3CVBTQyBpbiBhYzk3IG1vZGUKK2kyc0A8YWRkcj4Jc291bmQJCSotcHNjLWkycwlQU0MgaW4gaTJzIG1vZGUKK2FjOTdAPGFkZHI+CXNvdW5kCQkqLXBzYy1hYzk3CVBTQyBpbiBhYzk3IG1vZGUKIHNwaUA8YWRkcj4Jc3BpCQkqLXBzYy1zcGkJUFNDIGluIHNwaSBtb2RlCiBpcmRhQDxhZGRyPglpcmRhCQkqLXBzYy1pcmRhCVBTQyBpbiBJckRBIG1vZGUKIHNwaUA8YWRkcj4Jc3BpCQkqLXNwaQkJTVBDNTJ4eCBzcGkgZGV2aWNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CmluZGV4IDc3YmY0NTAuLmU5MzhjNDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CkBAIC0xOCwxMSArMTgsMTggQEAKIAkgICAtIDAuMC4wMDAyLwogCSAgIC0gMC4xLjAwMDAvMC4xLjEyMzQvCiAJICAgLi4uCisJICAgLSBkZWZ1bmN0LwogCiBJbiB0aGlzIGV4YW1wbGUsIGRldmljZSAwODE1IGlzIGFjY2Vzc2VkIHZpYSBzdWJjaGFubmVsIDAgaW4gc3ViY2hhbm5lbCBzZXQgMCwKIGRldmljZSA0NzExIHZpYSBzdWJjaGFubmVsIDEgaW4gc3ViY2hhbm5lbCBzZXQgMCwgYW5kIHN1YmNoYW5uZWwgMiBpcyBhIG5vbi1JL08KIHN1YmNoYW5uZWwuIERldmljZSAxMjM0IGlzIGFjY2Vzc2VkIHZpYSBzdWJjaGFubmVsIDAgaW4gc3ViY2hhbm5lbCBzZXQgMS4KIAorVGhlIHN1YmNoYW5uZWwgbmFtZWQgJ2RlZnVuY3QnIGRvZXMgbm90IHJlcHJlc2VudCBhbnkgcmVhbCBzdWJjaGFubmVsIG9uIHRoZQorc3lzdGVtOyBpdCBpcyBhIHBzZXVkbyBzdWJjaGFubmVsIHdoZXJlIGRpc2Nvbm5uZWN0ZWQgY2N3IGRldmljZXMgYXJlIG1vdmVkIHRvCitpZiB0aGV5IGFyZSBkaXNwbGFjZWQgYnkgYW5vdGhlciBjY3cgZGV2aWNlIGJlY29taW5nIG9wZXJhdGlvbmFsIG9uIHRoZWlyCitmb3JtZXIgc3ViY2hhbm5lbC4gVGhlIGNjdyBkZXZpY2VzIHdpbGwgYmUgbW92ZWQgYWdhaW4gdG8gYSBwcm9wZXIgc3ViY2hhbm5lbAoraWYgdGhleSBiZWNvbWUgb3BlcmF0aW9uYWwgYWdhaW4gb24gdGhhdCBzdWJjaGFubmVsLgorCiBZb3Ugc2hvdWxkIGFkZHJlc3MgYSBjY3cgZGV2aWNlIHZpYSBpdHMgYnVzIGlkIChlLmcuIDAuMC40NzExKTsgdGhlIGRldmljZSBjYW4KIGJlIGZvdW5kIHVuZGVyIGJ1cy9jY3cvZGV2aWNlcy8uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9hYWNyYWlkLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9hYWNyYWlkLnR4dAppbmRleCAzMzY3MTMwLi5kYzhlNDRmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FhY3JhaWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9hYWNyYWlkLnR4dApAQCAtMTEsNDMgKzExLDQyIEBACiBTdXBwb3J0ZWQgQ2FyZHMvQ2hpcHNldHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAlQQ0kgSUQgKHBjaS5pZHMpCU9FTQlQcm9kdWN0Ci0JOTAwNTowMjgzOjkwMDU6MDI4MwlBZGFwdGVjCUNhdGFwdWx0ICgzMjEwUyB3aXRoIGFyYyBmaXJtd2FyZSkKLQk5MDA1OjAyODQ6OTAwNTowMjg0CUFkYXB0ZWMJVG9tY2F0ICgzNDEwUyB3aXRoIGFyYyBmaXJtd2FyZSkKIAk5MDA1OjAyODU6OTAwNTowMjg1CUFkYXB0ZWMJMjIwMFMgKFZ1bGNhbikKIAk5MDA1OjAyODU6OTAwNTowMjg2CUFkYXB0ZWMJMjEyMFMgKENydXNhZGVyKQogCTkwMDU6MDI4NTo5MDA1OjAyODcJQWRhcHRlYwkyMjAwUyAoVnVsY2FuLTJtKQogCTkwMDU6MDI4NTo5MDA1OjAyODgJQWRhcHRlYwkzMjMwUyAoSGFycmllcikKIAk5MDA1OjAyODU6OTAwNTowMjg5CUFkYXB0ZWMJMzI0MFMgKFRvcm5hZG8pCiAJOTAwNTowMjg1OjkwMDU6MDI4YQlBZGFwdGVjCTIwMjBaQ1IgKFNreWhhd2spCi0JOTAwNTowMjg1OjkwMDU6MDI4YglBZGFwdGVjIDIwMjVaQ1IgKFRlcm1pbmF0b3IpCisJOTAwNTowMjg1OjkwMDU6MDI4YglBZGFwdGVjCTIwMjVaQ1IgKFRlcm1pbmF0b3IpCiAJOTAwNTowMjg2OjkwMDU6MDI4YwlBZGFwdGVjCTIyMzBTIChMYW5jZXIpCiAJOTAwNTowMjg2OjkwMDU6MDI4YwlBZGFwdGVjCTIyMzBTTFAgKExhbmNlcikKIAk5MDA1OjAyODY6OTAwNTowMjhkCUFkYXB0ZWMJMjEzMFMgKExhbmNlcikKIAk5MDA1OjAyODU6OTAwNTowMjhlCUFkYXB0ZWMJMjAyMFNBIChTa3loYXdrKQotCTkwMDU6MDI4NTo5MDA1OjAyOGYJQWRhcHRlYyAyMDI1U0EgKFRlcm1pbmF0b3IpCisJOTAwNTowMjg1OjkwMDU6MDI4ZglBZGFwdGVjCTIwMjVTQSAoVGVybWluYXRvcikKIAk5MDA1OjAyODU6OTAwNTowMjkwCUFkYXB0ZWMJMjQxMFNBIChKYWd1YXIpCi0JOTAwNTowMjg1OjEwM2M6MzIyNwlBZGFwdGVjIDI2MTBTQSAoQmVhcmNhdCBIUCByZWxlYXNlKQotCTkwMDU6MDI4NTo5MDA1OjAyOTMJQWRhcHRlYyAyMTYxMFNBIChDb3JzYWlyLTE2KQorCTkwMDU6MDI4NToxMDNjOjMyMjcJQWRhcHRlYwkyNjEwU0EgKEJlYXJjYXQgSFAgcmVsZWFzZSkKKwk5MDA1OjAyODU6OTAwNTowMjkzCUFkYXB0ZWMJMjE2MTBTQSAoQ29yc2Fpci0xNikKIAk5MDA1OjAyODU6OTAwNTowMjk2CUFkYXB0ZWMJMjI0MFMgKFNhYnJlRXhwcmVzcykKIAk5MDA1OjAyODU6OTAwNTowMjkyCUFkYXB0ZWMJMjgxMFNBIChDb3JzYWlyLTgpCi0JOTAwNTowMjg1OjkwMDU6MDI5NAlBZGFwdGVjCVByb3dsZXIKLQk5MDA1OjAyODU6OTAwNTowMjk3CUFkYXB0ZWMJNDAwNVNBUyAoQXZvblBhcmspCi0JOTAwNTowMjg1OjkwMDU6MDI5OAlBZGFwdGVjCTQwMDBTQVMgKEJsYWNrQmlyZCkKKwk5MDA1OjAyODU6OTAwNTowMjk3CUFkYXB0ZWMJNDAwNSAoQXZvblBhcmspCisJOTAwNTowMjg1OjkwMDU6MDI5OAlBZGFwdGVjCTQwMDAgKEJsYWNrQmlyZCkKIAk5MDA1OjAyODU6OTAwNTowMjk5CUFkYXB0ZWMJNDgwMFNBUyAoTWFyYXVkZXItWCkKIAk5MDA1OjAyODU6OTAwNTowMjlhCUFkYXB0ZWMJNDgwNVNBUyAoTWFyYXVkZXItRSkKIAk5MDA1OjAyODY6OTAwNTowMjliCUFkYXB0ZWMJMjgyMFNBIChJbnRydWRlcikKIAk5MDA1OjAyODY6OTAwNTowMjljCUFkYXB0ZWMJMjYyMFNBIChJbnRydWRlcikKIAk5MDA1OjAyODY6OTAwNTowMjlkCUFkYXB0ZWMJMjQyMFNBIChJbnRydWRlciBIUCByZWxlYXNlKQotCTkwMDU6MDI4Njo5MDA1OjAyYTIJQWRhcHRlYwkzODAwU0FTIChIdXJyaWNhbmU0NCkKLQk5MDA1OjAyODY6OTAwNTowMmE3CUFkYXB0ZWMJMzgwNVNBUyAoSHVycmljYW5lODApCi0JOTAwNTowMjg2OjkwMDU6MDJhOAlBZGFwdGVjCTM0MDBTQVMgKEh1cnJpY2FuZTQwKQotCTkwMDU6MDI4Njo5MDA1OjAyYWMJQWRhcHRlYwkxODAwU0FTIChUeXBob29uNDQpCi0JOTAwNTowMjg2OjkwMDU6MDJiMwlBZGFwdGVjCTI0MDBTQVMgKEh1cnJpY2FuZTQwbG0pCi0JOTAwNTowMjg1OjkwMDU6MDJiNQlBZGFwdGVjIEFTUjU4MDAgKFZvb2RvbzQ0KQotCTkwMDU6MDI4NTo5MDA1OjAyYjYJQWRhcHRlYyBBU1I1ODA1IChWb29kb284MCkKLQk5MDA1OjAyODU6OTAwNTowMmI3CUFkYXB0ZWMgQVNSNTgwOCAoVm9vZG9vMDgpCisJOTAwNTowMjg2OjkwMDU6MDJhYwlBZGFwdGVjCTE4MDAgKFR5cGhvb240NCkKKwk5MDA1OjAyODU6OTAwNTowMmI1CUFkYXB0ZWMJNTQ0NSAoVm9vZG9vNDQpCisJOTAwNTowMjg1OjkwMDU6MDJiNglBZGFwdGVjCTU4MDUgKFZvb2RvbzgwKQorCTkwMDU6MDI4NTo5MDA1OjAyYjcJQWRhcHRlYwk1MDg1IChWb29kb28wOCkKKwk5MDA1OjAyODU6OTAwNTowMmJiCUFkYXB0ZWMJMzQwNSAoTWFyYXVkZXI0MExQKQorCTkwMDU6MDI4NTo5MDA1OjAyYmMJQWRhcHRlYwkzODA1IChNYXJhdWRlcjgwTFApCisJOTAwNTowMjg1OjkwMDU6MDJjNwlBZGFwdGVjCTMwODUgKE1hcmF1ZGVyMDhFTFApCisJOTAwNTowMjg1OjkwMDU6MDJiZAlBZGFwdGVjCTMxMjA1IChNYXJhdWRlcjEyMCkKKwk5MDA1OjAyODU6OTAwNTowMmJlCUFkYXB0ZWMJMzE2MDUgKE1hcmF1ZGVyMTYwKQorCTkwMDU6MDI4NTo5MDA1OjAyYzMJQWRhcHRlYwk1MTIwNSAoVm9vZG9vMTIwKQorCTkwMDU6MDI4NTo5MDA1OjAyYzQJQWRhcHRlYwk1MTYwNSAoVm9vZG9vMTYwKQogCTEwMTE6MDA0Njo5MDA1OjAzNjQJQWRhcHRlYwk1NDAwUyAoTXVzdGFuZykKLQkxMDExOjAwNDY6OTAwNTowMzY1CUFkYXB0ZWMJNTQwMFMgKE11c3RhbmcpCiAJOTAwNTowMjg3OjkwMDU6MDgwMAlBZGFwdGVjCVRoZW1pc3RvIChKdXBpdGVyKQogCTkwMDU6MDIwMDo5MDA1OjAyMDAJQWRhcHRlYwlUaGVtaXN0byAoSnVwaXRlcikKIAk5MDA1OjAyODY6OTAwNTowODAwCUFkYXB0ZWMJQ2FsbGlzdG8gKEp1cGl0ZXIpCkBAIC02OCwyMSArNjcsMzIgQEAKIAk5MDA1OjAyODU6MTdhYTowMjg3CUxlZ2VuZAlTMjMwIChWdWxjYW4pCiAJOTAwNTowMjg1OjkwMDU6MDI5MAlJQk0JU2VydmVSQUlEIDd0IChKYWd1YXIpCiAJOTAwNTowMjg1OjEwMTQ6MDJGMglJQk0JU2VydmVSQUlEIDhpIChBdm9uUGFyaykKLQk5MDA1OjAyODU6MTAxNDowMzEyCUlCTQlTZXJ2ZVJBSUQgOGkgKEF2b25QYXJrTGl0ZSkKIAk5MDA1OjAyODY6MTAxNDo5NTQwCUlCTQlTZXJ2ZVJBSUQgOGsvOGstbDQgKEF1cm9yYUxpdGUpCiAJOTAwNTowMjg2OjEwMTQ6OTU4MAlJQk0JU2VydmVSQUlEIDhrLzhrLWw4IChBdXJvcmEpCi0JOTAwNTowMjg2OjEwMTQ6MDM0ZAlJQk0JU2VydmVSQUlEIDhzIChIdXJyaWNhbmUpCi0JOTAwNTowMjg2OjkwMDU6MDI5ZQlJQ1AJSUNQOTAyNFIwIChMYW5jZXIpCi0JOTAwNTowMjg2OjkwMDU6MDI5ZglJQ1AJSUNQOTAxNFIwIChMYW5jZXIpCisJOTAwNTowMjg1OjEwMTQ6MDM0ZAlJQk0JU2VydmVSQUlEIDhzIChNYXJhdWRlci1FKQorCTkwMDU6MDI4Njo5MDA1OjAyOWUJSUNQCUlDUDkwMjRSTyAoTGFuY2VyKQorCTkwMDU6MDI4Njo5MDA1OjAyOWYJSUNQCUlDUDkwMTRSTyAoTGFuY2VyKQogCTkwMDU6MDI4Njo5MDA1OjAyYTAJSUNQCUlDUDkwNDdNQSAoTGFuY2VyKQogCTkwMDU6MDI4Njo5MDA1OjAyYTEJSUNQCUlDUDkwODdNQSAoTGFuY2VyKQotCTkwMDU6MDI4Njo5MDA1OjAyYTMJSUNQCUlDUDU0NDVBVSAoSHVycmljYW5lNDQpCi0JOTAwNTowMjg2OjkwMDU6MDJhNAlJQ1AJSUNQOTA4NUxJIChNYXJhdWRlci1YKQotCTkwMDU6MDI4Njo5MDA1OjAyYTUJSUNQCUlDUDUwODVCUiAoTWFyYXVkZXItRSkKKwk5MDA1OjAyODU6OTAwNTowMmE0CUlDUAlJQ1A5MDg1TEkgKE1hcmF1ZGVyLVgpCisJOTAwNTowMjg1OjkwMDU6MDJhNQlJQ1AJSUNQNTA4NUJSIChNYXJhdWRlci1FKQogCTkwMDU6MDI4Njo5MDA1OjAyYTYJSUNQCUlDUDkwNjdNQSAoSW50cnVkZXItNikKLQk5MDA1OjAyODY6OTAwNTowMmE5CUlDUAlJQ1A1MDg1QVUgKEh1cnJpY2FuZTgwKQotCTkwMDU6MDI4Njo5MDA1OjAyYWEJSUNQCUlDUDUwNDVBVSAoSHVycmljYW5lNDApCi0JOTAwNTowMjg2OjkwMDU6MDJiNAlJQ1AJSUNQNTA0NUFMIChIdXJyaWNhbmU0MGxtKQorCTkwMDU6MDI4NTo5MDA1OjAyYjIJSUNQCShWb29kb28gOCBpbnRlcm5hbCA4IGV4dGVybmFsKQorCTkwMDU6MDI4NTo5MDA1OjAyYjgJSUNQCUlDUDU0NDVTTCAoVm9vZG9vNDQpCisJOTAwNTowMjg1OjkwMDU6MDJiOQlJQ1AJSUNQNTA4NVNMIChWb29kb284MCkKKwk5MDA1OjAyODU6OTAwNTowMmJhCUlDUAlJQ1A1ODA1U0wgKFZvb2RvbzA4KQorCTkwMDU6MDI4NTo5MDA1OjAyYmYJSUNQCUlDUDUwNDVCTCAoTWFyYXVkZXI0MExQKQorCTkwMDU6MDI4NTo5MDA1OjAyYzAJSUNQCUlDUDUwODVCTCAoTWFyYXVkZXI4MExQKQorCTkwMDU6MDI4NTo5MDA1OjAyYzgJSUNQCUlDUDU4MDVCTCAoTWFyYXVkZXIwOEVMUCkKKwk5MDA1OjAyODU6OTAwNTowMmMxCUlDUAlJQ1A1MTI1QlIgKE1hcmF1ZGVyMTIwKQorCTkwMDU6MDI4NTo5MDA1OjAyYzIJSUNQCUlDUDUxNjVCUiAoTWFyYXVkZXIxNjApCisJOTAwNTowMjg1OjkwMDU6MDJjNQlJQ1AJSUNQNTEyNVNMIChWb29kb28xMjApCisJOTAwNTowMjg1OjkwMDU6MDJjNglJQ1AJSUNQNTE2NVNMIChWb29kb28xNjApCisJOTAwNTowMjg2OjkwMDU6MDJhYgkJKFR5cGhvb240MCkKKwk5MDA1OjAyODY6OTAwNTowMmFkCQkoQXVyb3JhIEFSSykKKwk5MDA1OjAyODY6OTAwNTowMmFlCQkoQXVyb3JhIExpdGUgQVJLKQorCTkwMDU6MDI4NTo5MDA1OjAyYjAJCShTdW5yaXNlIExha2UgQVJLKQorCTkwMDU6MDI4NTo5MDA1OjAyYjEJQWRhcHRlYwkoVm9vZG9vIDggaW50ZXJuYWwgOCBleHRlcm5hbCkKIAogUGVvcGxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKaW5kZXggMDc3ZmJlMi4uY2NkMGE5NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApAQCAtOTI3LDcgKzkyNyw3IEBACiAgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KICAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIDwhW0NEQVRBWwotICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gKHN0cnVjdCBteWNoaXAgKiljYXJkLT5wcml2YXRlX2RhdGE7CisgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiBdXT4KICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CkBAIC0xMDk1LDcgKzEwOTUsNyBAQAogCiAgICAgICAgICAgLyogcmVsZWFzZSB0aGUgaXJxICovCiAgICAgICAgICAgaWYgKGNoaXAtPmlycSA+PSAwKQotICAgICAgICAgICAgICAgICAgZnJlZV9pcnEoY2hpcC0+aXJxLCAodm9pZCAqKWNoaXApOworICAgICAgICAgICAgICAgICAgZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKICAgICAgICAgICAvKiByZWxlYXNlIHRoZSBpL28gcG9ydHMgJiBtZW1vcnkgKi8KICAgICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CiAgICAgICAgICAgLyogZGlzYWJsZSB0aGUgUENJIGVudHJ5ICovCkBAIC0xMTQ4LDcgKzExNDgsNyBAQAogICAgICAgICAgIH0KICAgICAgICAgICBjaGlwLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CiAgICAgICAgICAgaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbXljaGlwX2ludGVycnVwdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIk15IENoaXAiLCBjaGlwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBJUlFGX1NIQVJFRCwgIk15IENoaXAiLCBjaGlwKSkgewogICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnEgJWRcbiIsIHBjaS0+aXJxKTsKICAgICAgICAgICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CkBAIC0xMzg3LDcgKzEzODcsNyBAQAogICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KIDwhW0NEQVRBWwogICBpZiAoY2hpcC0+aXJxID49IDApCi0gICAgICAgICAgZnJlZV9pcnEoY2hpcC0+aXJxLCAodm9pZCAqKWNoaXApOworICAgICAgICAgIGZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CiBdXT4KICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eCBiL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eAppbmRleCBhMWUwZWUyLi5mOTcxN2ZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHgKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4CkBAIC0xMDIsNyArMTAyLDcgQEAKIAl1OCB0eF90aHJlc2hvbGQ7CiAJdTggcnhfdGhyZXNob2xkOwogCXU4IGRtYV9idXJzdF9zaXplOwotCXUzMiB0aW1lb3V0X21pY3Jvc2VjczsKKwl1MzIgdGltZW91dDsKIAl1OCBlbmFibGVfbG9vcGJhY2s7CiAJdm9pZCAoKmNzX2NvbnRyb2wpKHUzMiBjb21tYW5kKTsKIH07CkBAIC0xMjEsNyArMTIxLDcgQEAKIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2YWx1ZS4gQW4gU1NQIGNvbmZpZ3VyZWQgZm9yIGJ5dGUtd2lkZSB0cmFuc2ZlcnMgd291bGQKIHVzZSBhIHZhbHVlIG9mIDguCiAKLVRoZSAicHhhMnh4X3NwaV9jaGlwLnRpbWVvdXRfbWljcm9zZWNzIiBmaWVsZHMgaXMgdXNlZCB0byBlZmZpY2llbnRseSBoYW5kbGUKK1RoZSAicHhhMnh4X3NwaV9jaGlwLnRpbWVvdXQiIGZpZWxkcyBpcyB1c2VkIHRvIGVmZmljaWVudGx5IGhhbmRsZQogdHJhaWxpbmcgYnl0ZXMgaW4gdGhlIFNTUCByZWNlaXZlciBmaWZvLiAgVGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoaXMgZmllbGQgaXMKIGRlcGVuZGVudCBvbiB0aGUgU1BJIGJ1cyBzcGVlZCAoInNwaV9ib2FyZF9pbmZvLm1heF9zcGVlZF9oeiIpIGFuZCB0aGUgc3BlY2lmaWMKIHNsYXZlIGRldmljZS4gIFBsZWFzZSBub3RlIHRoYXQgdGhlIFBYQTJ4eCBTU1AgMSBkb2VzIG5vdCBzdXBwb3J0IHRyYWlsaW5nIGJ5dGUKQEAgLTE2MiwxOCArMTYyLDE4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIGNzODQxNWFfY2hpcF9pbmZvID0gewotCS50eF90aHJlc2hvbGQgPSAxMiwgLyogU1NQIGhhcmR3YXJkIEZJRk8gdGhyZXNob2xkICovCi0JLnJ4X3RocmVzaG9sZCA9IDQsIC8qIFNTUCBoYXJkd2FyZCBGSUZPIHRocmVzaG9sZCAqLworCS50eF90aHJlc2hvbGQgPSA4LCAvKiBTU1AgaGFyZHdhcmQgRklGTyB0aHJlc2hvbGQgKi8KKwkucnhfdGhyZXNob2xkID0gOCwgLyogU1NQIGhhcmR3YXJkIEZJRk8gdGhyZXNob2xkICovCiAJLmRtYV9idXJzdF9zaXplID0gOCwgLyogQnl0ZSB3aWRlIHRyYW5zZmVycyB1c2VkIHNvIDggYnl0ZSBidXJzdHMgKi8KLQkudGltZW91dF9taWNyb3NlY3MgPSA2NCwgLyogV2FpdCBhdCBsZWFzdCA2NHVzZWMgdG8gaGFuZGxlIHRyYWlsaW5nICovCisJLnRpbWVvdXQgPSAyMzUsIC8qIFNlZSBJbnRlbCBkb2N1bWVudGF0aW9uICovCiAJLmNzX2NvbnRyb2wgPSBjczg0MTVhX2NzX2NvbnRyb2wsIC8qIFVzZSBleHRlcm5hbCBjaGlwIHNlbGVjdCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX2NoaXAgY3M4NDA1YV9jaGlwX2luZm8gPSB7Ci0JLnR4X3RocmVzaG9sZCA9IDEyLCAvKiBTU1AgaGFyZHdhcmQgRklGTyB0aHJlc2hvbGQgKi8KLQkucnhfdGhyZXNob2xkID0gNCwgLyogU1NQIGhhcmR3YXJkIEZJRk8gdGhyZXNob2xkICovCisJLnR4X3RocmVzaG9sZCA9IDgsIC8qIFNTUCBoYXJkd2FyZCBGSUZPIHRocmVzaG9sZCAqLworCS5yeF90aHJlc2hvbGQgPSA4LCAvKiBTU1AgaGFyZHdhcmQgRklGTyB0aHJlc2hvbGQgKi8KIAkuZG1hX2J1cnN0X3NpemUgPSA4LCAvKiBCeXRlIHdpZGUgdHJhbnNmZXJzIHVzZWQgc28gOCBieXRlIGJ1cnN0cyAqLwotCS50aW1lb3V0X21pY3Jvc2VjcyA9IDY0LCAvKiBXYWl0IGF0IGxlYXN0IDY0dXNlYyB0byBoYW5kbGUgdHJhaWxpbmcgKi8KKwkudGltZW91dCA9IDIzNSwgLyogU2VlIEludGVsIGRvY3VtZW50YXRpb24gKi8KIAkuY3NfY29udHJvbCA9IGNzODQwNWFfY3NfY29udHJvbCwgLyogVXNlIGV4dGVybmFsIGNoaXAgc2VsZWN0ICovCiB9OwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CmluZGV4IGUwMTg4YTIuLjYxNjEzMTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzcnEudHh0CkBAIC0xLDYgKzEsNiBAQAogTGludXggTWFnaWMgU3lzdGVtIFJlcXVlc3QgS2V5IEhhY2tzCi1Eb2N1bWVudGF0aW9uIGZvciBzeXNycS5jIHZlcnNpb24gMS4xNQotTGFzdCB1cGRhdGU6ICREYXRlOiAyMDAxLzAxLzI4IDEwOjE1OjU5ICQKK0RvY3VtZW50YXRpb24gZm9yIHN5c3JxLmMKK0xhc3QgdXBkYXRlOiAyMDA3LUpBTi0wNgogCiAqICBXaGF0IGlzIHRoZSBtYWdpYyBTeXNScSBrZXk/CiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0zNSw3ICszNSw3IEBACiAKIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2YgL3Byb2Mvc3lzL2tlcm5lbC9zeXNycSBpbmZsdWVuY2VzIG9ubHkgdGhlIGludm9jYXRpb24KIHZpYSBhIGtleWJvYXJkLiBJbnZvY2F0aW9uIG9mIGFueSBvcGVyYXRpb24gdmlhIC9wcm9jL3N5c3JxLXRyaWdnZXIgaXMgYWx3YXlzCi1hbGxvd2VkLgorYWxsb3dlZCAoYnkgYSB1c2VyIHdpdGggYWRtaW4gcHJpdmlsZWdlcykuCiAKICogIEhvdyBkbyBJIHVzZSB0aGUgbWFnaWMgU3lzUnEga2V5Pwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC01OCw3ICs1OCw3IEBACiBPbiBvdGhlciAtIElmIHlvdSBrbm93IG9mIHRoZSBrZXkgY29tYm9zIGZvciBvdGhlciBhcmNoaXRlY3R1cmVzLCBwbGVhc2UKICAgICAgICAgICAgbGV0IG1lIGtub3cgc28gSSBjYW4gYWRkIHRoZW0gdG8gdGhpcyBzZWN0aW9uLgogCi1PbiBhbGwgLSAgd3JpdGUgYSBjaGFyYWN0ZXIgdG8gL3Byb2Mvc3lzcnEtdHJpZ2dlci4gIGVnOgorT24gYWxsIC0gIHdyaXRlIGEgY2hhcmFjdGVyIHRvIC9wcm9jL3N5c3JxLXRyaWdnZXIuICBlLmcuOgogCiAJCWVjaG8gdCA+IC9wcm9jL3N5c3JxLXRyaWdnZXIKIApAQCAtNzQsNiArNzQsOCBAQAogCiAnYycJLSBXaWxsIHBlcmZvcm0gYSBrZXhlYyByZWJvb3QgaW4gb3JkZXIgdG8gdGFrZSBhIGNyYXNoZHVtcC4KIAorJ2QnCS0gU2hvd3MgYWxsIGxvY2tzIHRoYXQgYXJlIGhlbGQuCisKICdvJyAgICAgLSBXaWxsIHNodXQgeW91ciBzeXN0ZW0gb2ZmIChpZiBjb25maWd1cmVkIGFuZCBzdXBwb3J0ZWQpLgogCiAncycgICAgIC0gV2lsbCBhdHRlbXB0IHRvIHN5bmMgYWxsIG1vdW50ZWQgZmlsZXN5c3RlbXMuCkBAIC04NywzOCArODksNDMgQEAKIAogJ20nICAgICAtIFdpbGwgZHVtcCBjdXJyZW50IG1lbW9yeSBpbmZvIHRvIHlvdXIgY29uc29sZS4KIAorJ24nCS0gVXNlZCB0byBtYWtlIFJUIHRhc2tzIG5pY2UtYWJsZQorCiAndicJLSBEdW1wcyBWb3lhZ2VyIFNNUCBwcm9jZXNzb3IgaW5mbyB0byB5b3VyIGNvbnNvbGUuCiAKKyd3JwktIER1bXBzIHRhc2tzIHRoYXQgYXJlIGluIHVuaW50ZXJydXB0YWJsZSAoYmxvY2tlZCkgc3RhdGUuCisKKyd4JwktIFVzZWQgYnkgeG1vbiBpbnRlcmZhY2Ugb24gcHBjL3Bvd2VycGMgcGxhdGZvcm1zLgorCiAnMCctJzknIC0gU2V0cyB0aGUgY29uc29sZSBsb2cgbGV2ZWwsIGNvbnRyb2xsaW5nIHdoaWNoIGtlcm5lbCBtZXNzYWdlcwogICAgICAgICAgIHdpbGwgYmUgcHJpbnRlZCB0byB5b3VyIGNvbnNvbGUuICgnMCcsIGZvciBleGFtcGxlIHdvdWxkIG1ha2UKICAgICAgICAgICBpdCBzbyB0aGF0IG9ubHkgZW1lcmdlbmN5IG1lc3NhZ2VzIGxpa2UgUEFOSUNzIG9yIE9PUFNlcyB3b3VsZAogICAgICAgICAgIG1ha2UgaXQgdG8geW91ciBjb25zb2xlLikKIAotJ2YnCS0gV2lsbCBjYWxsIG9vbV9raWxsIHRvIGtpbGwgYSBtZW1vcnkgaG9nIHByb2Nlc3MKKydmJwktIFdpbGwgY2FsbCBvb21fa2lsbCB0byBraWxsIGEgbWVtb3J5IGhvZyBwcm9jZXNzLgogCiAnZScgICAgIC0gU2VuZCBhIFNJR1RFUk0gdG8gYWxsIHByb2Nlc3NlcywgZXhjZXB0IGZvciBpbml0LgogCisnZycJLSBVc2VkIGJ5IGtnZGIgb24gcHBjIHBsYXRmb3Jtcy4KKwogJ2knICAgICAtIFNlbmQgYSBTSUdLSUxMIHRvIGFsbCBwcm9jZXNzZXMsIGV4Y2VwdCBmb3IgaW5pdC4KIAotJ2wnICAgICAtIFNlbmQgYSBTSUdLSUxMIHRvIGFsbCBwcm9jZXNzZXMsIElOQ0xVRElORyBpbml0LiAoWW91ciBzeXN0ZW0KLSAgICAgICAgICB3aWxsIGJlIG5vbi1mdW5jdGlvbmFsIGFmdGVyIHRoaXMuKQotCi0naCcgICAgIC0gV2lsbCBkaXNwbGF5IGhlbHAgKCBhY3R1YWxseSBhbnkgb3RoZXIga2V5IHRoYW4gdGhvc2UgbGlzdGVkCisnaCcgICAgIC0gV2lsbCBkaXNwbGF5IGhlbHAgKGFjdHVhbGx5IGFueSBvdGhlciBrZXkgdGhhbiB0aG9zZSBsaXN0ZWQKICAgICAgICAgICBhYm92ZSB3aWxsIGRpc3BsYXkgaGVscC4gYnV0ICdoJyBpcyBlYXN5IHRvIHJlbWVtYmVyIDotKQogCiAqICBPa2F5LCBzbyB3aGF0IGNhbiBJIHVzZSB0aGVtIGZvcj8KIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogV2VsbCwgdW4nUidhdyBpcyB2ZXJ5IGhhbmR5IHdoZW4geW91ciBYIHNlcnZlciBvciBhIHN2Z2FsaWIgcHJvZ3JhbSBjcmFzaGVzLgogCi1zYSdLJyAoU2VjdXJlIEFjY2VzcyBLZXkpIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGJlIHN1cmUgdGhlcmUgYXJlIG5vCi10cm9qYW4gcHJvZ3JhbSBpcyBydW5uaW5nIGF0IGNvbnNvbGUgYW5kIHdoaWNoIGNvdWxkIGdyYWIgeW91ciBwYXNzd29yZAotd2hlbiB5b3Ugd291bGQgdHJ5IHRvIGxvZ2luLiBJdCB3aWxsIGtpbGwgYWxsIHByb2dyYW1zIG9uIGdpdmVuIGNvbnNvbGUKLWFuZCB0aHVzIGxldHRpbmcgeW91IG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2dpbiBwcm9tcHQgeW91IHNlZSBpcyBhY3R1YWxseQorc2EnSycgKFNlY3VyZSBBY2Nlc3MgS2V5KSBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBiZSBzdXJlIHRoZXJlIGlzIG5vCit0cm9qYW4gcHJvZ3JhbSBydW5uaW5nIGF0IGNvbnNvbGUgd2hpY2ggY291bGQgZ3JhYiB5b3VyIHBhc3N3b3JkCit3aGVuIHlvdSB3b3VsZCB0cnkgdG8gbG9naW4uIEl0IHdpbGwga2lsbCBhbGwgcHJvZ3JhbXMgb24gZ2l2ZW4gY29uc29sZSwKK3RodXMgbGV0dGluZyB5b3UgbWFrZSBzdXJlIHRoYXQgdGhlIGxvZ2luIHByb21wdCB5b3Ugc2VlIGlzIGFjdHVhbGx5CiB0aGUgb25lIGZyb20gaW5pdCwgbm90IHNvbWUgdHJvamFuIHByb2dyYW0uCiBJTVBPUlRBTlQ6IEluIGl0cyB0cnVlIGZvcm0gaXQgaXMgbm90IGEgdHJ1ZSBTQUsgbGlrZSB0aGUgb25lIGluIGEgOklNUE9SVEFOVAogSU1QT1JUQU5UOiBjMiBjb21wbGlhbnQgc3lzdGVtLCBhbmQgaXQgc2hvdWxkIG5vdCBiZSBtaXN0YWtlbiBhcyAgIDpJTVBPUlRBTlQKIElNUE9SVEFOVDogc3VjaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6SU1QT1JUQU5UCi0gICAgICAgSXQgc2VlbXMgb3RoZXIgZmluZCBpdCB1c2VmdWwgYXMgKFN5c3RlbSBBdHRlbnRpb24gS2V5KSB3aGljaCBpcworICAgICAgIEl0IHNlZW1zIG90aGVycyBmaW5kIGl0IHVzZWZ1bCBhcyAoU3lzdGVtIEF0dGVudGlvbiBLZXkpIHdoaWNoIGlzCiB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBleGl0IGEgcHJvZ3JhbSB0aGF0IHdpbGwgbm90IGxldCB5b3Ugc3dpdGNoIGNvbnNvbGVzLgogKEZvciBleGFtcGxlLCBYIG9yIGEgc3ZnYWxpYiBwcm9ncmFtLikKIApAQCAtMTM5LDggKzE0Niw4IEBACiBBZ2FpbiwgdGhlIHVubW91bnQgKHJlbW91bnQgcmVhZC1vbmx5KSBoYXNuJ3QgdGFrZW4gcGxhY2UgdW50aWwgeW91IHNlZSB0aGUKICJPSyIgYW5kICJEb25lIiBtZXNzYWdlIGFwcGVhciBvbiB0aGUgc2NyZWVuLgogCi1UaGUgbG9nbGV2ZWwnMCctJzknIGlzIHVzZWZ1bCB3aGVuIHlvdXIgY29uc29sZSBpcyBiZWluZyBmbG9vZGVkIHdpdGgKLWtlcm5lbCBtZXNzYWdlcyB5b3UgZG8gbm90IHdhbnQgdG8gc2VlLiBTZXR0aW5nICcwJyB3aWxsIHByZXZlbnQgYWxsIGJ1dAorVGhlIGxvZ2xldmVscyAnMCctJzknIGFyZSB1c2VmdWwgd2hlbiB5b3VyIGNvbnNvbGUgaXMgYmVpbmcgZmxvb2RlZCB3aXRoCitrZXJuZWwgbWVzc2FnZXMgeW91IGRvIG5vdCB3YW50IHRvIHNlZS4gU2VsZWN0aW5nICcwJyB3aWxsIHByZXZlbnQgYWxsIGJ1dAogdGhlIG1vc3QgdXJnZW50IGtlcm5lbCBtZXNzYWdlcyBmcm9tIHJlYWNoaW5nIHlvdXIgY29uc29sZS4gKFRoZXkgd2lsbAogc3RpbGwgYmUgbG9nZ2VkIGlmIHN5c2xvZ2Qva2xvZ2QgYXJlIGFsaXZlLCB0aG91Z2guKQogCkBAIC0xNTIsNyArMTU5LDcgQEAKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIFRoYXQgaGFwcGVucyB0byBtZSwgYWxzby4gSSd2ZSBmb3VuZCB0aGF0IHRhcHBpbmcgc2hpZnQsIGFsdCwgYW5kIGNvbnRyb2wKIG9uIGJvdGggc2lkZXMgb2YgdGhlIGtleWJvYXJkLCBhbmQgaGl0dGluZyBhbiBpbnZhbGlkIHN5c3JxIHNlcXVlbmNlIGFnYWluCi13aWxsIGZpeCB0aGUgcHJvYmxlbS4gKGllLCBzb21ldGhpbmcgbGlrZSBhbHQtc3lzcnEteikuIFN3aXRjaGluZyB0byBhbm90aGVyCit3aWxsIGZpeCB0aGUgcHJvYmxlbS4gKGkuZS4sIHNvbWV0aGluZyBsaWtlIGFsdC1zeXNycS16KS4gU3dpdGNoaW5nIHRvIGFub3RoZXIKIHZpcnR1YWwgY29uc29sZSAoQUxUK0ZuKSBhbmQgdGhlbiBiYWNrIGFnYWluIHNob3VsZCBhbHNvIGhlbHAuCiAKICogIEkgaGl0IFN5c1JxLCBidXQgbm90aGluZyBzZWVtcyB0byBoYXBwZW4sIHdoYXQncyB3cm9uZz8KQEAgLTE3NCwxMSArMTgxLDExIEBACiBwcmludHMgaGVscCwgYW5kIEMpIGFuIGFjdGlvbl9tc2cgc3RyaW5nLCB0aGF0IHdpbGwgcHJpbnQgcmlnaHQgYmVmb3JlIHlvdXIKIGhhbmRsZXIgaXMgY2FsbGVkLiBZb3VyIGhhbmRsZXIgbXVzdCBjb25mb3JtIHRvIHRoZSBwcm90b3R5cGUgaW4gJ3N5c3JxLmgnLgogCi1BZnRlciB0aGUgc3lzcnFfa2V5X29wIGlzIGNyZWF0ZWQsIHlvdSBjYW4gY2FsbCB0aGUgbWFjcm8gCi1yZWdpc3Rlcl9zeXNycV9rZXkoaW50IGtleSwgc3RydWN0IHN5c3JxX2tleV9vcCAqb3BfcCkgdGhhdCBpcyBkZWZpbmVkIGluCi1zeXNycS5oLCB0aGlzIHdpbGwgcmVnaXN0ZXIgdGhlIG9wZXJhdGlvbiBwb2ludGVkIHRvIGJ5ICdvcF9wJyBhdCB0YWJsZQota2V5ICdrZXknLCBpZiB0aGF0IHNsb3QgaW4gdGhlIHRhYmxlIGlzIGJsYW5rLiBBdCBtb2R1bGUgdW5sb2FkIHRpbWUsIHlvdSBtdXN0Ci1jYWxsIHRoZSBtYWNybyB1bnJlZ2lzdGVyX3N5c3JxX2tleShpbnQga2V5LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpvcF9wKSwgd2hpY2gKK0FmdGVyIHRoZSBzeXNycV9rZXlfb3AgaXMgY3JlYXRlZCwgeW91IGNhbiBjYWxsIHRoZSBrZXJuZWwgZnVuY3Rpb24KK3JlZ2lzdGVyX3N5c3JxX2tleShpbnQga2V5LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpvcF9wKTsgdGhpcyB3aWxsCityZWdpc3RlciB0aGUgb3BlcmF0aW9uIHBvaW50ZWQgdG8gYnkgJ29wX3AnIGF0IHRhYmxlIGtleSAna2V5JywKK2lmIHRoYXQgc2xvdCBpbiB0aGUgdGFibGUgaXMgYmxhbmsuIEF0IG1vZHVsZSB1bmxvYWQgdGltZSwgeW91IG11c3QgY2FsbAordGhlIGZ1bmN0aW9uIHVucmVnaXN0ZXJfc3lzcnFfa2V5KGludCBrZXksIHN0cnVjdCBzeXNycV9rZXlfb3AgKm9wX3ApLCB3aGljaAogd2lsbCByZW1vdmUgdGhlIGtleSBvcCBwb2ludGVkIHRvIGJ5ICdvcF9wJyBmcm9tIHRoZSBrZXkgJ2tleScsIGlmIGFuZCBvbmx5IGlmCiBpdCBpcyBjdXJyZW50bHkgcmVnaXN0ZXJlZCBpbiB0aGF0IHNsb3QuIFRoaXMgaXMgaW4gY2FzZSB0aGUgc2xvdCBoYXMgYmVlbgogb3ZlcndyaXR0ZW4gc2luY2UgeW91IHJlZ2lzdGVyZWQgaXQuCkBAIC0xODYsMTUgKzE5MywxMiBAQAogVGhlIE1hZ2ljIFN5c1JRIHN5c3RlbSB3b3JrcyBieSByZWdpc3RlcmluZyBrZXkgb3BlcmF0aW9ucyBhZ2FpbnN0IGEga2V5IG9wCiBsb29rdXAgdGFibGUsIHdoaWNoIGlzIGRlZmluZWQgaW4gJ2RyaXZlcnMvY2hhci9zeXNycS5jJy4gVGhpcyBrZXkgdGFibGUgaGFzCiBhIG51bWJlciBvZiBvcGVyYXRpb25zIHJlZ2lzdGVyZWQgaW50byBpdCBhdCBjb21waWxlIHRpbWUsIGJ1dCBpcyBtdXRhYmxlLAotYW5kIDQgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBmb3IgaW50ZXJmYWNlIHRvIGl0OiBfX3N5c3JxX2xvY2tfdGFibGUsCi1fX3N5c3JxX3VubG9ja190YWJsZSwgX19zeXNycV9nZXRfa2V5X29wLCBhbmQgX19zeXNycV9wdXRfa2V5X29wLiBUaGUKLWZ1bmN0aW9ucyBfX3N5c3JxX3N3YXBfa2V5X29wcyBhbmQgX19zeXNycV9zd2FwX2tleV9vcHNfbm9sb2NrIGFyZSBkZWZpbmVkCi1pbiB0aGUgaGVhZGVyIGl0c2VsZiwgYW5kIHRoZSBSRUdJU1RFUiBhbmQgVU5SRUdJU1RFUiBtYWNyb3MgYXJlIGJ1aWx0IGZyb20KLXRoZXNlLiBNb3JlIGNvbXBsZXggKGFuZCBkYW5nZXJvdXMhKSBtYW5pcHVsYXRpb25zIG9mIHRoZSB0YWJsZSBhcmUgcG9zc2libGUKLXVzaW5nIHRoZXNlIGZ1bmN0aW9ucywgYnV0IHlvdSBtdXN0IGJlIGNhcmVmdWwgdG8gYWx3YXlzIGxvY2sgdGhlIHRhYmxlIGJlZm9yZQoteW91IHJlYWQgb3Igd3JpdGUgZnJvbSBpdCwgYW5kIHRvIHVubG9jayBpdCBhZ2FpbiB3aGVuIHlvdSBhcmUgZG9uZS4gKEFuZCBvZgotY291cnNlLCB0byBuZXZlciBldmVyIGxlYXZlIGFuIGludmFsaWQgcG9pbnRlciBpbiB0aGUgdGFibGUpLiBOdWxsIHBvaW50ZXJzIGluCi10aGUgdGFibGUgYXJlIGFsd2F5cyBzYWZlIDopCithbmQgMiBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciBpbnRlcmZhY2UgdG8gaXQ6CisJcmVnaXN0ZXJfc3lzcnFfa2V5IGFuZCB1bnJlZ2lzdGVyX3N5c3JxX2tleS4KK09mIGNvdXJzZSwgbmV2ZXIgZXZlciBsZWF2ZSBhbiBpbnZhbGlkIHBvaW50ZXIgaW4gdGhlIHRhYmxlLiBJLmUuLCB3aGVuCit5b3VyIG1vZHVsZSB0aGF0IGNhbGxlZCByZWdpc3Rlcl9zeXNycV9rZXkoKSBleGl0cywgaXQgbXVzdCBjYWxsCit1bnJlZ2lzdGVyX3N5c3JxX2tleSgpIHRvIGNsZWFuIHVwIHRoZSBzeXNycSBrZXkgdGFibGUgZW50cnkgdGhhdCBpdCB1c2VkLgorTnVsbCBwb2ludGVycyBpbiB0aGUgdGFibGUgYXJlIGFsd2F5cyBzYWZlLiA6KQogCiBJZiBmb3Igc29tZSByZWFzb24geW91IGZlZWwgdGhlIG5lZWQgdG8gY2FsbCB0aGUgaGFuZGxlX3N5c3JxIGZ1bmN0aW9uIGZyb20KIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGxlZCBieSBoYW5kbGVfc3lzcnEsIHlvdSBtdXN0IGJlIGF3YXJlIHRoYXQgeW91IGFyZSBpbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90dHkudHh0IGIvRG9jdW1lbnRhdGlvbi90dHkudHh0CmluZGV4IGRhYjU2NjAuLjVmNzk5ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHR5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3R0eS50eHQKQEAgLTM5LDI4ICszOSwzNyBAQAogCiBUVFkgc2lkZSBpbnRlcmZhY2VzOgogCi1jbG9zZSgpCQktCVRoaXMgaXMgY2FsbGVkIG9uIGEgdGVybWluYWwgd2hlbiB0aGUgbGluZQotCQkJZGlzY2lwbGluZSBpcyBiZWluZyB1bnBsdWdnZWQuIEF0IHRoZSBwb2ludCBvZgotCQkJZXhlY3V0aW9uIG5vIGZ1cnRoZXIgdXNlcnMgd2lsbCBlbnRlciB0aGUKLQkJCWxkaXNjIGNvZGUgZm9yIHRoaXMgdHR5LiBDYW4gc2xlZXAuCi0KIG9wZW4oKQkJLQlDYWxsZWQgd2hlbiB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIGF0dGFjaGVkIHRvCiAJCQl0aGUgdGVybWluYWwuIE5vIG90aGVyIGNhbGwgaW50byB0aGUgbGluZQogCQkJZGlzY2lwbGluZSBmb3IgdGhpcyB0dHkgd2lsbCBvY2N1ciB1bnRpbCBpdAogCQkJY29tcGxldGVzIHN1Y2Nlc3NmdWxseS4gQ2FuIHNsZWVwLgogCitjbG9zZSgpCQktCVRoaXMgaXMgY2FsbGVkIG9uIGEgdGVybWluYWwgd2hlbiB0aGUgbGluZQorCQkJZGlzY2lwbGluZSBpcyBiZWluZyB1bnBsdWdnZWQuIEF0IHRoZSBwb2ludCBvZgorCQkJZXhlY3V0aW9uIG5vIGZ1cnRoZXIgdXNlcnMgd2lsbCBlbnRlciB0aGUKKwkJCWxkaXNjIGNvZGUgZm9yIHRoaXMgdHR5LiBDYW4gc2xlZXAuCisKK2hhbmd1cCgpCS0JQ2FsbGVkIHdoZW4gdGhlIHR0eSBsaW5lIGlzIGh1bmcgdXAuCisJCQlUaGUgbGluZSBkaXNjaXBsaW5lIHNob3VsZCBjZWFzZSBJL08gdG8gdGhlIHR0eS4KKwkJCU5vIGZ1cnRoZXIgY2FsbHMgaW50byB0aGUgbGRpc2MgY29kZSB3aWxsIG9jY3VyLgorCQkJQ2FuIHNsZWVwLgorCiB3cml0ZSgpCQktCUEgcHJvY2VzcyBpcyB3cml0aW5nIGRhdGEgdGhyb3VnaCB0aGUgbGluZQogCQkJZGlzY2lwbGluZS4gIE11bHRpcGxlIHdyaXRlIGNhbGxzIGFyZSBzZXJpYWxpemVkCiAJCQlieSB0aGUgdHR5IGxheWVyIGZvciB0aGUgbGRpc2MuICBNYXkgc2xlZXAuIAogCi1mbHVzaF9idWZmZXIoKQktCU1heSBiZSBjYWxsZWQgYXQgYW55IHBvaW50IGJldHdlZW4gb3BlbiBhbmQgY2xvc2UuCitmbHVzaF9idWZmZXIoKQktCShvcHRpb25hbCkgTWF5IGJlIGNhbGxlZCBhdCBhbnkgcG9pbnQgYmV0d2VlbgorCQkJb3BlbiBhbmQgY2xvc2UsIGFuZCBpbnN0cnVjdHMgdGhlIGxpbmUgZGlzY2lwbGluZQorCQkJdG8gZW1wdHkgaXRzIGlucHV0IGJ1ZmZlci4KIAotY2hhcnNfaW5fYnVmZmVyKCkgLQlSZXBvcnQgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyLgorY2hhcnNfaW5fYnVmZmVyKCkgLQkob3B0aW9uYWwpIFJlcG9ydCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBpbnB1dAorCQkJYnVmZmVyLgogCi1zZXRfdGVybWlvcygpCS0JQ2FsbGVkIG9uIHRlcm1pb3Mgc3RydWN0dXJlIGNoYW5nZXMuIFRoZSBjYWxsZXIKLQkJCXBhc3NlcyB0aGUgb2xkIHRlcm1pb3MgZGF0YSBhbmQgdGhlIGN1cnJlbnQgZGF0YQotCQkJaXMgaW4gdGhlIHR0eS4gQ2FsbGVkIHVuZGVyIHRoZSB0ZXJtaW9zIHNlbWFwaG9yZSBzbwotCQkJYWxsb3dlZCB0byBzbGVlcC4gU2VyaWFsaXplZCBhZ2FpbnN0IGl0c2VsZiBvbmx5Lgorc2V0X3Rlcm1pb3MoKQktCShvcHRpb25hbCkgQ2FsbGVkIG9uIHRlcm1pb3Mgc3RydWN0dXJlIGNoYW5nZXMuCisJCQlUaGUgY2FsbGVyIHBhc3NlcyB0aGUgb2xkIHRlcm1pb3MgZGF0YSBhbmQgdGhlCisJCQljdXJyZW50IGRhdGEgaXMgaW4gdGhlIHR0eS4gQ2FsbGVkIHVuZGVyIHRoZQorCQkJdGVybWlvcyBzZW1hcGhvcmUgc28gYWxsb3dlZCB0byBzbGVlcC4gU2VyaWFsaXplZAorCQkJYWdhaW5zdCBpdHNlbGYgb25seS4KIAogcmVhZCgpCQktCU1vdmUgZGF0YSBmcm9tIHRoZSBsaW5lIGRpc2NpcGxpbmUgdG8gdGhlIHVzZXIuCiAJCQlNdWx0aXBsZSByZWFkIGNhbGxzIG1heSBvY2N1ciBpbiBwYXJhbGxlbCBhbmQgdGhlCkBAIC05Miw2ICsxMDEsODggQEAKIAkJCXRoaXMgZnVuY3Rpb24uIEluIHN1Y2ggYSBzaXR1YXRpb24gZGVmZXIgaXQuCiAKIAorRHJpdmVyIEFjY2VzcworCitMaW5lIGRpc2NpcGxpbmUgbWV0aG9kcyBjYW4gY2FsbCB0aGUgZm9sbG93aW5nIG1ldGhvZHMgb2YgdGhlIHVuZGVybHlpbmcKK2hhcmR3YXJlIGRyaXZlciB0aHJvdWdoIHRoZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIHR0eS0+ZHJpdmVyCitzdHJ1Y3R1cmU6CisKK3dyaXRlKCkJCQlXcml0ZSBhIGJsb2NrIG9mIGNoYXJhY3RlcnMgdG8gdGhlIHR0eSBkZXZpY2UuCisJCQlSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY2NlcHRlZC4KKworcHV0X2NoYXIoKQkJUXVldWVzIGEgY2hhcmFjdGVyIGZvciB3cml0aW5nIHRvIHRoZSB0dHkgZGV2aWNlLgorCQkJSWYgdGhlcmUgaXMgbm8gcm9vbSBpbiB0aGUgcXVldWUsIHRoZSBjaGFyYWN0ZXIgaXMKKwkJCWlnbm9yZWQuCisKK2ZsdXNoX2NoYXJzKCkJCShPcHRpb25hbCkgSWYgZGVmaW5lZCwgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIKKwkJCXF1ZXVlaW5nIGNoYXJhY3RlcnMgd2l0aCBwdXRfY2hhcigpIGluIG9yZGVyIHRvCisJCQlzdGFydCB0cmFuc21pc3Npb24uCisKK3dyaXRlX3Jvb20oKQkJUmV0dXJucyB0aGUgbnVtYmVycyBvZiBjaGFyYWN0ZXJzIHRoZSB0dHkgZHJpdmVyCisJCQl3aWxsIGFjY2VwdCBmb3IgcXVldWVpbmcgdG8gYmUgd3JpdHRlbi4KKworaW9jdGwoKQkJCUludm9rZSBkZXZpY2Ugc3BlY2lmaWMgaW9jdGwuCisJCQlFeHBlY3RzIGRhdGEgcG9pbnRlcnMgdG8gcmVmZXIgdG8gdXNlcnNwYWNlLgorCQkJUmV0dXJucyBFTk9JT0NUTENNRCBmb3IgdW5yZWNvZ25pemVkIGlvY3RsIG51bWJlcnMuCisKK3NldF90ZXJtaW9zKCkJCU5vdGlmeSB0aGUgdHR5IGRyaXZlciB0aGF0IHRoZSBkZXZpY2UncyB0ZXJtaW9zCisJCQlzZXR0aW5ncyBoYXZlIGNoYW5nZWQuIE5ldyBzZXR0aW5ncyBhcmUgaW4KKwkJCXR0eS0+dGVybWlvcy4gUHJldmlvdXMgc2V0dGluZ3Mgc2hvdWxkIGJlIHBhc3NlZCBpbgorCQkJdGhlICJvbGQiIGFyZ3VtZW50LgorCit0aHJvdHRsZSgpCQlOb3RpZnkgdGhlIHR0eSBkcml2ZXIgdGhhdCBpbnB1dCBidWZmZXJzIGZvciB0aGUKKwkJCWxpbmUgZGlzY2lwbGluZSBhcmUgY2xvc2UgdG8gZnVsbCwgYW5kIGl0IHNob3VsZAorCQkJc29tZWhvdyBzaWduYWwgdGhhdCBubyBtb3JlIGNoYXJhY3RlcnMgc2hvdWxkIGJlCisJCQlzZW50IHRvIHRoZSB0dHkuCisKK3VudGhyb3R0bGUoKQkJTm90aWZ5IHRoZSB0dHkgZHJpdmVyIHRoYXQgY2hhcmFjdGVycyBjYW4gbm93IGJlCisJCQlzZW50IHRvIHRoZSB0dHkgd2l0aG91dCBmZWFyIG9mIG92ZXJydW5uaW5nIHRoZQorCQkJaW5wdXQgYnVmZmVycyBvZiB0aGUgbGluZSBkaXNjaXBsaW5lcy4KKworc3RvcCgpCQkJQXNrIHRoZSB0dHkgZHJpdmVyIHRvIHN0b3Agb3V0cHV0dGluZyBjaGFyYWN0ZXJzCisJCQl0byB0aGUgdHR5IGRldmljZS4KKworc3RhcnQoKQkJCUFzayB0aGUgdHR5IGRyaXZlciB0byByZXN1bWUgc2VuZGluZyBjaGFyYWN0ZXJzCisJCQl0byB0aGUgdHR5IGRldmljZS4KKworaGFuZ3VwKCkJCUFzayB0aGUgdHR5IGRyaXZlciB0byBoYW5nIHVwIHRoZSB0dHkgZGV2aWNlLgorCiticmVha19jdGwoKQkJKE9wdGlvbmFsKSBBc2sgdGhlIHR0eSBkcml2ZXIgdG8gdHVybiBvbiBvciBvZmYKKwkJCUJSRUFLIHN0YXR1cyBvbiB0aGUgUlMtMjMyIHBvcnQuICBJZiBzdGF0ZSBpcyAtMSwKKwkJCXRoZW4gdGhlIEJSRUFLIHN0YXR1cyBzaG91bGQgYmUgdHVybmVkIG9uOyBpZgorCQkJc3RhdGUgaXMgMCwgdGhlbiBCUkVBSyBzaG91bGQgYmUgdHVybmVkIG9mZi4KKwkJCUlmIHRoaXMgcm91dGluZSBpcyBub3QgaW1wbGVtZW50ZWQsIHVzZSBpb2N0bHMKKwkJCVRJT0NTQlJLIC8gVElPQ0NCUksgaW5zdGVhZC4KKword2FpdF91bnRpbF9zZW50KCkJV2FpdHMgdW50aWwgdGhlIGRldmljZSBoYXMgd3JpdHRlbiBvdXQgYWxsIG9mIHRoZQorCQkJY2hhcmFjdGVycyBpbiBpdHMgdHJhbnNtaXR0ZXIgRklGTy4KKworc2VuZF94Y2hhcigpCQlTZW5kIGEgaGlnaC1wcmlvcml0eSBYT04vWE9GRiBjaGFyYWN0ZXIgdG8gdGhlIGRldmljZS4KKworCitGbGFncworCitMaW5lIGRpc2NpcGxpbmUgbWV0aG9kcyBoYXZlIGFjY2VzcyB0byB0dHktPmZsYWdzIGZpZWxkIGNvbnRhaW5pbmcgdGhlCitmb2xsb3dpbmcgaW50ZXJlc3RpbmcgZmxhZ3M6CisKK1RUWV9USFJPVFRMRUQJCURyaXZlciBpbnB1dCBpcyB0aHJvdHRsZWQuIFRoZSBsZGlzYyBzaG91bGQgY2FsbAorCQkJdHR5LT5kcml2ZXItPnVudGhyb3R0bGUoKSBpbiBvcmRlciB0byByZXN1bWUKKwkJCXJlY2VwdGlvbiB3aGVuIGl0IGlzIHJlYWR5IHRvIHByb2Nlc3MgbW9yZSBkYXRhLgorCitUVFlfRE9fV1JJVEVfV0FLRVVQCUlmIHNldCwgY2F1c2VzIHRoZSBkcml2ZXIgdG8gY2FsbCB0aGUgbGRpc2MncworCQkJd3JpdGVfd2FrZXVwKCkgbWV0aG9kIGluIG9yZGVyIHRvIHJlc3VtZQorCQkJdHJhbnNtaXNzaW9uIHdoZW4gaXQgY2FuIGFjY2VwdCBtb3JlIGRhdGEKKwkJCXRvIHRyYW5zbWl0LgorCitUVFlfSU9fRVJST1IJCUlmIHNldCwgY2F1c2VzIGFsbCBzdWJzZXF1ZW50IHVzZXJzcGFjZSByZWFkL3dyaXRlCisJCQljYWxscyBvbiB0aGUgdHR5IHRvIGZhaWwsIHJldHVybmluZyAtRUlPLgorCitUVFlfT1RIRVJfQ0xPU0VECURldmljZSBpcyBhIHB0eSBhbmQgdGhlIG90aGVyIHNpZGUgaGFzIGNsb3NlZC4KKworVFRZX05PX1dSSVRFX1NQTElUCVByZXZlbnQgZHJpdmVyIGZyb20gc3BsaXR0aW5nIHVwIHdyaXRlcyBpbnRvCisJCQlzbWFsbGVyIGNodW5rcy4KKworCiBMb2NraW5nCiAKIENhbGxlcnMgdG8gdGhlIGxpbmUgZGlzY2lwbGluZSBmdW5jdGlvbnMgZnJvbSB0aGUgdHR5IGxheWVyIGFyZSByZXF1aXJlZCB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvQ1JFRElUUyBiL0RvY3VtZW50YXRpb24vdXNiL0NSRURJVFMKaW5kZXggMDFlN2Y4NS4uMjdhNzIxNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvQ1JFRElUUworKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9DUkVESVRTCkBAIC0yMSw3ICsyMSw3IEBACiAgIEJpbGwgUnlkZXIgPGJyeWRlckBzZ2kuY29tPgogICBUaG9tYXMgU2FpbGVyIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+CiAgIEdyZWdvcnkgUC4gU21pdGggPGdyZWdAZWxlY3RyaWNyYWluLmNvbT4KLSAgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorICBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CiAgIFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KICAgPEthenVraS5ZYXN1bWF0c3VAZnVqaXhlcm94LmNvLmpwPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9hY20udHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvYWNtLnR4dAppbmRleCA3MzdkNjEwLi4xN2Y1YzJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9hY20udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2FjbS50eHQKQEAgLTQ2LDYgKzQ2LDEwIEBACiAKIAkzQ29tIFVTUiBJU0ROIFBybyBUQQogCisgIFNvbWUgY2VsbCBwaG9uZXMgYWxzbyBjb25uZWN0IHZpYSBVU0IuIEkga25vdyB0aGUgZm9sbG93aW5nIHBob25lcyB3b3JrOgorCisJU29ueUVyaWNzc29uIEs4MDBpCisKICAgVW5mb3J0dW5hdGVseSBtYW55IG1vZGVtcyBhbmQgbW9zdCBJU0ROIFRBcyB1c2UgcHJvcHJpZXRhcnkgaW50ZXJmYWNlcyBhbmQKIHRodXMgd29uJ3Qgd29yayB3aXRoIHRoaXMgZHJpdmVycy4gQ2hlY2sgZm9yIEFDTSBjb21wbGlhbmNlIGJlZm9yZSBidXlpbmcuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAppbmRleCA4NzU1YjNlLi42MmUzMmI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CkBAIC00Myw3ICs0Myw3IEBACiAgNDIgLT4gZGlnaXRhbG5vdyBETlRWIExpdmUhIERWQi1UIFBybyAgICAgICAgICAgICAgICAgICAgIFsxODIyOjAwMjUsMTgyMjowMDE5XQogIDQzIC0+IEtXb3JsZC9WU3RyZWFtIFhQZXJ0IERWQi1UIHdpdGggY3gyMjcwMiAgICAgICAgICAgICBbMTdkZTowOGExLDEyYWI6MjMwMF0KICA0NCAtPiBEVmlDTyBGdXNpb25IRFRWIERWQi1UIER1YWwgRGlnaXRhbCAgICAgICAgICAgICAgICAgWzE4YWM6ZGI1MCwxOGFjOmRiNTRdCi0gNDUgLT4gS1dvcmxkIEhhcmR3YXJlTXBlZ1RWIFhQZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgIFsxN2RlOjA4NDBdCisgNDUgLT4gS1dvcmxkIEhhcmR3YXJlTXBlZ1RWIFhQZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgIFsxN2RlOjA4NDAsMTQyMTowMzA1XQogIDQ2IC0+IERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgSHlicmlkICAgICAgICAgICAgICAgICAgICAgICBbMThhYzpkYjQwLDE4YWM6ZGI0NF0KICA0NyAtPiBwY0hEVFYgSEQ1NTAwIEhEVFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzcwNjM6NTUwMF0KICA0OCAtPiBLd29ybGQgTUNFIDIwMCBEZWx1eGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE3ZGU6MDg0MV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCA1M2NlNmEzLi5mNjIwMWNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC03Niw3ICs3Niw3IEBACiAgNzUgLT4gQVZlck1lZGlhIEFWZXJUVkhEIE1DRSBBMTgwICAgICAgICAgICAgICBbMTQ2MToxMDQ0XQogIDc2IC0+IFNLTmV0IE1vbnN0ZXJUViBNb2JpbGUgICAgICAgICAgICAgICAgICAgWzExMzE6NGVlOV0KICA3NyAtPiBQaW5uYWNsZSBQQ1RWIDQwaS81MGkvMTEwaSAoc2FhNzEzMykgICAgIFsxMWJkOjAwMmVdCi0gNzggLT4gQVNVU1RlSyBQNzEzMSBEdWFsICAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODYyXQorIDc4IC0+IEFTVVNUZUsgUDcxMzEgRHVhbCAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg2MiwxMDQzOjQ4NzZdCiAgNzkgLT4gU2VkbmEvTXVjaFRWIFBDIFRWIENhcmRidXMgVFYvUmFkaW8gKElUTzI1IFJldjoyQikKICA4MCAtPiBBU1VTIERpZ2ltYXRyaXggVFYgICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjAyMTBdCiAgODEgLT4gUGhpbGlwcyBUaWdlciByZWZlcmVuY2UgZGVzaWduICAgICAgICAgICBbMTEzMToyMDE4XQpAQCAtOTksMyArOTksOCBAQAogIDk4IC0+IFByb3RldXMgUHJvIDIzMDkgICAgICAgICAgICAgICAgICAgICAgICAgWzA5MTk6MjAwM10KICA5OSAtPiBBVmVyTWVkaWEgVFYgSHlicmlkIEExNkFSICAgICAgICAgICAgICAgIFsxNDYxOjJjMDBdCiAxMDAgLT4gQXN1cyBFdXJvcGEyIE9FTSAgICAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODYwXQorMTAxIC0+IFBpbm5hY2xlIFBDVFYgMzEwaSAgICAgICAgICAgICAgICAgICAgICAgWzExYmQ6MDAyZl0KKzEwMiAtPiBBdmVybWVkaWEgQVZlclRWIFN0dWRpbyA1MDcgICAgICAgICAgICAgIFsxNDYxOjk3MTVdCisxMDMgLT4gQ29tcHJvIFZpZGVvbWF0ZSBEVkItVDIwMEEKKzEwNCAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTExMCBEVkItVC9IeWJyaWQgICAgIFswMDcwOjY3MDFdCisxMDUgLT4gVGVycmF0ZWMgQ2luZXJneSBIVCBQQ01DSUEgICAgICAgICAgICAgICBbMTUzYjoxMTcyXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jYWZlX2NjaWMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2NhZmVfY2NpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODgyMTAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jYWZlX2NjaWMKQEAgLTAsMCArMSw1NCBAQAorImNhZmVfY2NpYyIgaXMgYSBkcml2ZXIgZm9yIHRoZSBNYXJ2ZWxsIDg4QUxQMDEgImNhZmUiIENNT1MgY2FtZXJhCitjb250cm9sbGVyLiAgVGhpcyBpcyB0aGUgY29udHJvbGxlciBmb3VuZCBpbiBmaXJzdC1nZW5lcmF0aW9uIE9MUEMgc3lzdGVtcywKK2FuZCB0aGlzIGRyaXZlciB3YXMgd3JpdHRlbiB3aXRoIHN1cHBvcnQgZnJvbSB0aGUgT0xQQyBwcm9qZWN0LgorCitDdXJyZW50IHN0YXR1czogdGhlIGNvcmUgZHJpdmVyIHdvcmtzLiAgSXQgY2FuIGdlbmVyYXRlIGRhdGEgaW4gWVVWNDIyLAorUkdCNTY1LCBhbmQgUkdCNDQ0IGZvcm1hdHMuICAoQW55Ym9keSBsb29raW5nIGF0IHRoZSBjb2RlIHdpbGwgc2VlIFJHQjMyIGFzCit3ZWxsLCBidXQgdGhhdCBpcyBhIGRlYnVnZ2luZyBhaWQgd2hpY2ggd2lsbCBiZSByZW1vdmVkIHNob3J0bHkpLiAgVkdBIGFuZAorUVZHQSBtb2RlcyB3b3JrOyBDSUYgaXMgdGhlcmUgYnV0IHRoZSBjb2xvcnMgcmVtYWluIGZ1bmt5LiAgT25seSB0aGUgT1Y3NjcwCitzZW5zb3IgaXMga25vd24gdG8gd29yayB3aXRoIHRoaXMgY29udHJvbGxlciBhdCB0aGlzIHRpbWUuCisKK1RvIHRyeSBpdCBvdXQ6IGVpdGhlciBvZiB0aGVzZSBjb21tYW5kcyB3aWxsIHdvcms6CisKKyAgICAgbXBsYXllciB0djovLyAtdHYgZHJpdmVyPXY0bDI6d2lkdGg9NjQwOmhlaWdodD00ODAgLW5vc291bmQKKyAgICAgbXBsYXllciB0djovLyAtdHYgZHJpdmVyPXY0bDI6d2lkdGg9NjQwOmhlaWdodD00ODA6b3V0Zm10PWJncjE2IC1ub3NvdW5kCisKK1RoZSAieGF3dHYiIHV0aWxpdHkgYWxzbyB3b3JrczsgZ3FjYW0gZG9lcyBub3QsIGZvciB1bmtub3duIHJlYXNvbnMuCisKK1RoZXJlIGFyZSBhIGZldyBsb2FkLXRpbWUgb3B0aW9ucywgbW9zdCBvZiB3aGljaCBjYW4gYmUgY2hhbmdlZCBhZnRlcgorbG9hZGluZyB2aWEgc3lzZnMgYXMgd2VsbDoKKworIC0gYWxsb2NfYnVmc19hdF9sb2FkOiAgTm9ybWFsbHksIHRoZSBkcml2ZXIgd2lsbCBub3QgYWxsb2NhdGUgYW55IERNQQorICAgYnVmZmVycyB1bnRpbCB0aGUgdGltZSBjb21lcyB0byB0cmFuc2ZlciBkYXRhLiAgSWYgdGhpcyBvcHRpb24gaXMgc2V0LAorICAgdGhlbiB3b3JzdC1jYXNlLXNpemVkIGJ1ZmZlcnMgd2lsbCBiZSBhbGxvY2F0ZWQgYXQgbW9kdWxlIGxvYWQgdGltZS4KKyAgIFRoaXMgb3B0aW9uIG5haWxzIGRvd24gdGhlIG1lbW9yeSBmb3IgdGhlIGxpZmUgb2YgdGhlIG1vZHVsZSwgYnV0CisgICBwZXJoYXBzIGRlY3JlYXNlcyB0aGUgY2hhbmNlcyBvZiBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgbGF0ZXIgb24uCisKKyAtIGRtYV9idWZfc2l6ZTogVGhlIHNpemUgb2YgRE1BIGJ1ZmZlcnMgdG8gYWxsb2NhdGUuICBOb3RlIHRoYXQgdGhpcworICAgb3B0aW9uIGlzIG9ubHkgY29uc3VsdGVkIGZvciBsb2FkLXRpbWUgYWxsb2NhdGlvbjsgd2hlbiBidWZmZXJzIGFyZQorICAgYWxsb2NhdGVkIGF0IHJ1biB0aW1lLCB0aGV5IHdpbGwgYmUgc2l6ZWQgYXBwcm9wcmlhdGVseSBmb3IgdGhlIGN1cnJlbnQKKyAgIGNhbWVyYSBzZXR0aW5ncy4KKworIC0gbl9kbWFfYnVmczogVGhlIGNvbnRyb2xsZXIgY2FuIGN5Y2xlIHRocm91Z2ggZWl0aGVyIHR3byBvciB0aHJlZSBETUEKKyAgIGJ1ZmZlcnMuICBOb3JtYWxseSwgdGhlIGRyaXZlciB0cmllcyB0byB1c2UgdGhyZWUgYnVmZmVyczsgb24gZmFzdGVyCisgICBzeXN0ZW1zLCBob3dldmVyLCBpdCB3aWxsIHdvcmsgd2VsbCB3aXRoIG9ubHkgdHdvLgorCisgLSBtaW5fYnVmZmVyczogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHN0cmVhbWluZyBJL08gYnVmZmVycyB0aGF0IHRoZSBkcml2ZXIKKyAgIHdpbGwgY29uc2VudCB0byB3b3JrIHdpdGguICBEZWZhdWx0IGlzIG9uZSwgYnV0LCBvbiBzbG93ZXIgc3lzdGVtcywKKyAgIGJldHRlciBiZWhhdmlvciB3aXRoIG1wbGF5ZXIgY2FuIGJlIGFjaGlldmVkIGJ5IHNldHRpbmcgdG8gYSBoaWdoZXIKKyAgIHZhbHVlIChsaWtlIHNpeCkuCisKKyAtIG1heF9idWZmZXJzOiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3RyZWFtaW5nIEkvTyBidWZmZXJzOyBkZWZhdWx0IGlzCisgICB0ZW4uICBUaGF0IG51bWJlciB3YXMgY2FyZWZ1bGx5IHBpY2tlZCBvdXQgb2YgYSBoYXQgYW5kIHNob3VsZCBub3QgYmUKKyAgIGFzc3VtZWQgdG8gYWN0dWFsbHkgbWVhbiBtdWNoIG9mIGFueXRoaW5nLgorCisgLSBmbGlwOiBJZiB0aGlzIGJvb2xlYW4gcGFyYW1ldGVyIGlzIHNldCwgdGhlIHNlbnNvciB3aWxsIGJlIGluc3RydWN0ZWQgdG8KKyAgIGludmVydCB0aGUgdmlkZW8gaW1hZ2UuICBXaGV0aGVyIGl0IG1ha2VzIHNlbnNlIGlzIGRldGVybWluZWQgYnkgaG93CisgICB5b3VyIHBhcnRpY3VsYXIgY2FtZXJhIGlzIG1vdW50ZWQuCisKK1dvcmsgaXMgb25nb2luZyB3aXRoIHRoaXMgZHJpdmVyLCBzdGF5IHR1bmVkLgorCitqb24KKworSm9uYXRoYW4gQ29yYmV0Citjb3JiZXRAbHduLm5ldApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2MTIwLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjEyMC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMWMyZDAuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2MTIwLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi1Ecml2ZXIgZm9yIFRydXN0IENvbXB1dGVyIFByb2R1Y3RzIEZyYW1lZ3JhYmJlciwgdmVyc2lvbiAwLjYuMQotLS0tLS0tIC0tLSAtLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0gIC0tLS0tLS0gLSAtIC0KLQotLSBaT1JBTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBBdXRob3I6IFBhdWxpbmUgTWlkZGVsaW5rIDxtaWRkZWxpbkBwb2x5d2FyZS5ubD4KLSAgIERhdGU6IDE4IFNlcHRlbWJlciAxOTk5Ci1WZXJzaW9uOiAwLjYuMQotCi0tIERlc2NyaXB0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1WaWRlbzRMaW51eCBjb21wYXRpYmxlIGRyaXZlciBmb3IgYW4gdW5rbm93biBicmFuZCBmcmFtZWdyYWJiZXIKLShTb2xkIGluIHRoZSBOZXRoZXJsYW5kcyBieSBUUlVTVCBDb21wdXRlciBQcm9kdWN0cykgYW5kIHZhcmlvdXMKLW90aGVyIHpvcmFuIHpyMzYxMjAgYmFzZWQgZnJhbWVncmFiYmVycy4KLQotVGhlIGNhcmQgY29udGFpbnMgYSBaUjM2MTIwIE11bHRpbWVkaWEgUENJIEludGVyZmFjZSBhbmQgYSBQaGlsaXBzCi1TQUE3MTEwIE9uZWNoaXAgRnJvbnRlbmQgdmlkZW9kZWNvZGVyLiBUaGVyZSBpcyBhbHNvIGFuIERTUCBvZgotd2hpY2ggSSBoYXZlIGZvcmdvdHRlbiB0aGUgbnVtYmVyLCBzaW5jZSBpIHdpbGwgbmV2ZXIgZ2V0IHRoYXQgdGhpbmcKLXRvIHdvcmsgd2l0aG91dCBzcGVjcyBmcm9tIHRoZSB2ZW5kb3IgaXRzZWxmLgotCi1UaGUgU0FBNzExeCBhcmUgY2FwYWJsZSBvZiBwcm9jZXNzaW5nIDYgZGlmZmVyZW50IHZpZGVvIGlucHV0cywKLUNWQlMxLi42IGFuZCBZMStDMSwgWTIrQzIsIFkzK0MzLiBBbGwgaW4gNTAvNjBIeiwgTlRTQywgUEFMIG9yCi1TRUNBTSBhbmQgZGVsaXZlcmluZyBhIFlVViBkYXRhc3RyZWFtLiAgT24gbXkgY2FyZCB0aGUgaW5wdXQKLSdDVkJTLTAnIGNvcnJlc3BvbmRzIHRvIGNoYW5uZWwgQ1ZCUzIgYW5kICdTLVZpZGVvJyB0byBZMitDMi4KLQotSSBoYXZlIHNvbWUgcmVwb3J0cyBvZiBvdGhlciBjYXJkcyB3b3JraW5nIHdpdGggdGhlIG1lbnRpb25lZAotY2hpcCBzZXRzLiBGb3IgYSBsaXN0IG9mIG90aGVyIHdvcmtpbmcgY2FyZHMgcGxlYXNlIGhhdmUgYSBsb29rCi1hdCB0aGUgY2FyZHMgbmFtZWQgaW4gdGhlIHR2Y2FyZHMgc3RydWN0IGluIHRoZSBiZWdpbm5pbmcgb2YKLXpyMzYxMjAuYwotCi1BZnRlciBzb21lIHRlc3RpbmcsIEkgZGlzY292ZXJlZCB0aGF0IHRoZSBjYXJkZGVzaWduZXIgbWVzc2VkIHVwCi1vbiB0aGUgSTJDIGludGVyZmFjZS4gVGhlIFpvcmFuIGNoaXAgaW5jbHVkZXMgMiBsaW5lcyBTREEgYW5kIFNDTAotd2hpY2ggKHMpaGUgY29ubmVjdGVkIHJldmVyc2VseS4gU28gd2UgaGF2ZSB0byBjbG9jayBvbiB0aGUgU0RBCi1hbmQgci93IGRhdGEgb24gdGhlIFNDTCBwaW4uIExpZmUgaXMgZnVuLi4uIEVhY2ggY2FyZHR5cGUgbm93IGhhcwotYSBiaXQgd2hpY2ggc2lnbmlmaWVzIGlmIHlvdSBoYXZlIGEgY2FyZCB3aXRoIHRoZSBzYW1lIGRlZmljaWVuY3kuCi0KLU9oLCBmb3IgdGhlIGNvbXBsZXRlbmVzcyBvZiB0aGlzIHN0b3J5IEkgbXVzdCBtZW50aW9uIHRoYXQgbXkKLWNhcmQgZGVsaXZlcnMgdGhlIFZTWU5DIHB1bHNlIG9mIHRoZSBTQUEgY2hpcCB0byBHSVJRMSwgbm90Ci1HSVJRMCBhcyBzb21lIG90aGVyIGNhcmRzIGhhdmUuIFRoaXMgaXMgYWxzbyBpbmNvcnBvcmF0ZWQgaW4KLXRoZSBkcml2ZXIgYmUgY2xlYXJpbmcvc2V0dGluZyB0aGUgJ3VzZWlycTEnIGJpdCBpbiB0aGUgdHZjYXJkCi1kZXNjcmlwdGlvbi4KLQotQW5vdGhlciBwcm9ibGVtcyBvZiBjb250aW51b3VzIGNhcHR1cmluZyBkYXRhIHdpdGggYSBab3JhbiBjaGlwCi1pcyBzb21ldGhpbmcgbmFzdHkgaW5zaWRlIHRoZSBjaGlwLiBJdCBlZmZlY3RpdmVseSBoYWx2ZXMgdGhlCi1mcHMgd2Ugb3VnaHQgdG8gZ2V0Li4uIEhlcmUgaXMgdGhlIHNjZW5hcmlvOiBjYXB0dXJpbmcgZnJhbWVzCi10byBtZW1vcnkgaXMgZG9uZSBpbiB0aGUgc28tY2FsbGVkIHNuYXBzaG90IG1vZGUuIEluIHRoaXMgbW9kZQotdGhlIFpvcmFuIHN0b3BzIGFmdGVyIGNhcHR1cmluZyBhIGZyYW1lIHdvcnRoIG9mIGRhdGEgYW5kIHdhaXQKLXRpbGwgdGhlIGFwcGxpY2F0aW9uIHNldCBHUkFCIGJpdCB0byBpbmRpY2F0ZSByZWFkaW5lc3MgZm9yIHRoZQotbmV4dCBmcmFtZS4gQWZ0ZXIgZGV0ZWN0aW5nIGEgc2V0IGJpdCwgdGhlIGNoaXAgbmVhdGx5IHdhaXRzCi10aWxsIHRoZSBzdGFydCBvZiBhIGZyYW1lLCBjYXB0dXJlcyBpdCBhbmQgaXQgZ29lcyBiYWNrIHRvIG9mZi4KLVNtYXJ0IHBwbCB3aWxsIG5vdGljZSB0aGUgcHJvYmxlbSBoZXJlLiBJdHMgdGhlIHdhaXRpbmcgb24gdGhlCi1fbmV4dF8gZnJhbWUgZWFjaCB0aW1lIHdlIHNldCB0aGUgR1JBQiBiaXQuLi4gT2ggd2VsbCwgMTIsNSBmcHMKLWlzIHN0aWxsIHBsZW50eSBmYXN0IGZvciBtZS4KLS0tIHVwZGF0ZSAyOC83LzE5OTkgLS0KLURvbid0IGJlbGlldmUgYSB3b3JkIEkganVzdCBzYWlkLi4uIFByb29mIGlzIHRoZSBvdXRwdXQKLW9mIGBzdHJlYW1lciAtdCAzMDAgLXIgMjUgLWYgYXZpMTUgLW8gL2Rldi9udWxsYAotCSsrLS0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQotCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKLQkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstIDI1LzI1Ci0JKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQotCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKLQkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstIDI1LzI1Ci0JKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQotCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKLQkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstIDI1LzI1Ci0JKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy1zKy0rLSstKy0rLSstKy0rLSstKy0rLSAyNS8yNQotCSstcystKy0rLSstKy0rLSstKy0rLSstKy0rLSstcystKy0rLSstKy0rLSstKy0rLSstKy0gMjUvMjUKLQkrLXMrLSstKy0rLSstKy0rLSstKy0rLSstKy0rLXMrLSstKy0rLSstKy0rLSstKy0rLSstCi0Jc3luY2VyOiBkb25lCi0Jd3JpdGVyOiBkb25lCi0obm90ZSB0aGUgL2Rldi9udWxsIGlzIHBydWRlbnQgaGVyZSwgbXkgc3lzdGVtIGlzIG5vdCBhYmxlIHRvCi0gZ3JhYiAvYW5kLyB3cml0ZSAyNSBmcHMgdG8gYSBmaWxlLi4uIGdpZnRzIHdlbGNvbWUgOikgKQotVGhlIHRlY2huaWNhbCByZWFzb25pbmcgZm9sbG93czogVGhlIHpvcmFuIGNvbXBsZXRlZCB0aGUgbGFzdAotZnJhbWUsIHRoZSBWU1lOQyBnb2VzIGxvdywgYW5kIEdSQUIgaXMgY2xlYXJlZC4gVGhlIGludGVycnVwdAotcm91dGluZSBzdGFydHMgdG8gd29yayBzaW5jZSBpdHMgVlNZTkMgZHJpdmVuLCBhbmQgYWdhaW4KLWFjdGl2YXRlcyB0aGUgR1JBQiBiaXQuIEEgZmV3IG1zIGxhdGVyIHRoZSBWU1lOQyAocmUtKXJpc2VzIGFuZAotdGhlIHpvcmFuIHN0YXJ0cyB0byB3b3JrIG9uIGEgbmV3IGFuZCBmcmVzaGx5IGJyb2FkY2FzdGVkIGZyYW1lLi4uLgotCi1Gb3IgcG9pbnRlcnMgSSB1c2VkIHRoZSBzcGVjcyBvZiBib3RoIGNoaXBzLiBCZWxvdyBhcmUgdGhlIFVSTHM6Ci0gIGh0dHA6Ly93d3cuem9yYW4uY29tL2Z0cC9kb3dubG9hZC9kZXZpY2VzL3BjaS9aUjM2MTIwLzM2MTIwZGF0YS5wZGYKLSAgaHR0cDovL3d3dy11cy5zZW1pY29uZHVjdG9yLnBoaWxpcHMuY29tL2Fjcm9iYXQvZGF0YXNoZWV0cy9TQUFfNzExMF9BXzEucGRmCi1Tb21lIGFsdGVybmF0aXZlcyBmb3IgdGhlIFBoaWxpcHMgU0FBIDcxMTAgZGF0YXNoZWV0IGFyZToKLSAgaHR0cDovL3d3dy5kYXRhc2hlZXRjYXRhbG9nLmNvbS9kYXRhc2hlZXRzX3BkZi9TL0EvQS83L1NBQTcxMTAuc2h0bWwKLSAgaHR0cDovL3d3dy5kYXRhc2hlZXRhcmNoaXZlLmNvbS9zZWFyY2gucGhwP3NlYXJjaD1TQUE3MTEwJnNUeXBlPXBhcnQKLQotVGhlIGRvY3VtZW50YXRpb24gaGFzIHZlcnkgbGl0dGxlIG9uIGFic29sdXRlIG51bWJlcnMgb3IgdGltaW5ncwotbmVlZGVkIGZvciB0aGUgdmFyaW91cyBtb2Rlcy9yZXNvbHV0aW9ucywgYnV0IHRoZXJlIGFyZSBvdGhlcgotcHJvZ3JhbXMgeW91IGNhbiBib3Jyb3cgdGhvc2UgZnJvbS4KLQotLS0tLS0tIEluc3RhbGwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlYWQgdGhlIGZpbGUgY2FsbGVkIFRPRE8uICBOb3RlIGl0cyBsb25nIGxpc3Qgb2YgbGltaXRhdGlvbnMuCi0KLUJ1aWxkIGEga2VybmVsIHdpdGggVklERU80TElOVVggZW5hYmxlZC4gQWN0aXZhdGUgdGhlCi1CVDg0OCBkcml2ZXI7IHdlIG5lZWQgdGhpcyBiZWNhdXNlIHdlIGhhdmUgbmVlZCBmb3IgdGhlCi1vdGhlciBtb2R1bGVzIChpMmMgYW5kIHZpZGVvZGV2KSBpdCBlbmFibGVzLgotCi1UbyBpbnN0YWxsIHRoaXMgc29mdHdhcmUsIGV4dHJhY3QgaXQgaW50byBhIHN1aXRhYmxlIGRpcmVjdG9yeS4KLUV4YW1pbmUgdGhlIG1ha2VmaWxlIGFuZCBjaGFuZ2UgYW55dGhpbmcgeW91IGRvbid0IGxpa2UuICBUeXBlICJtYWtlIi4KLQotQWZ0ZXIgbWFraW5nIHRoZSBtb2R1bGVzIGNoZWNrIGlmIHlvdSBoYXZlIHRoZSBtdWNoIG5lZWRlZAotL2Rldi92aWRlbyBkZXZpY2VzLiBJZiBub3QsIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyA0IGxpbmVzOgotCW1rbm9kIC9kZXYvdmlkZW8gYyA4MSAwCi0JbWtub2QgL2Rldi92aWRlbzEgYyA4MSAxCi0JbWtub2QgL2Rldi92aWRlbzIgYyA4MSAyCi0JbWtub2QgL2Rldi92aWRlbzMgYyA4MSAzCi0JbWtub2QgL2Rldi92aWRlbzQgYyA4MSA0Ci0KLUFmdGVyIG1ha2luZy9jaGVja2luZyB0aGUgZGV2aWNlcyBkbzoKLQltb2Rwcm9iZSBpMmMKLQltb2Rwcm9iZSB2aWRlb2RldgotCW1vZHByb2JlIHNhYTcxMTAJKG9wdGlvbmFsKQotCW1vZHByb2JlIHNhYTcxMTEJKG9wdGlvbmFsKQotCW1vZHByb2JlIHR1bmVyCQkob3B0aW9uYWwpCi0JaW5zbW9kIHpvcmFuIGNhcmR0eXBlPTxuPgotCi08bj4gaXMgdGhlIGNhcmR0eXBlIG9mIHRoZSBjYXJkIHlvdSBoYXZlLiBUaGUgY2FyZG51bWJlciBjYW4KLWJlIGZvdW5kIGluIHRoZSBzb3VyY2Ugb2YgenIzNjEyMC4gTG9vayBmb3IgdHZjYXJkcy4gSWYgeW91cgotY2FyZCBpcyBub3QgdGhlcmUsIHBsZWFzZSB0cnkgaWYgYW55IG90aGVyIGNhcmQgZ2l2ZXMgc29tZQotcmVzcG9uc2UsIGFuZCBtYWlsIG1lIGlmIHlvdSBnb3QgYSB3b3JraW5nIHR2Y2FyZCBhZGRpdGlvbi4KLQotUFMuIDxUVkNhcmQgZWRpdG9ycyBiZWhvbGQhKQotICAgIERvbid0IGZvcmdldCB0byBzZXQgdmlkZW9faW5wdXQgdG8gdGhlIG51bWJlciBvZiBpbnB1dHMKLSAgICB5b3UgZGVmaW5lZCBpbiB0aGUgdmlkZW9fbXV4IHBhcnQgb2YgdGhlIHR2Y2FyZCBkZWZpbml0aW9uLgotICAgIEl0J3MgYSBjb21tb24gZXJyb3IgdG8gYWRkIGEgY2hhbm5lbCBidXQgbm90IGluY3JlbWVudGluZwotICAgIHZpZGVvX2lucHV0IGFuZCBnZXR0aW5nIGFuZ3J5IHdpdGggbWUvdjRsL2xpbnV4L2xpbnVzIDooCi0KLVlvdSBhcmUgbm93IHJlYWR5IHRvIHRlc3QgdGhlIGZyYW1lZ3JhYmJlciB3aXRoIHlvdXIgZmF2b3JpdGUKLXZpZGVvNGxpbnV4IGNvbXBhdGlibGUgdG9vbAotCi0tLS0tLS0gQXBwbGljYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRldmljZSB3b3JrcyB3aXRoIGFsbCBWaWRlbzRMaW51eCBjb21wYXRpYmxlIGFwcGxpY2F0aW9ucywKLWdpdmVuIHRoZSBsaW1pdGF0aW9ucyBpbiB0aGUgVE9ETyBmaWxlLgotCi0tLS0tLS0gQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIHVzZXMgdGhlIFY0TCBpbnRlcmZhY2UgYXMgb2Yga2VybmVsIHJlbGVhc2UgMi4xLjExNiwgYW5kIGluCi1mYWN0IGhhcyBub3QgYmVlbiB0ZXN0ZWQgb24gYW55IGxvd2VyIHZlcnNpb24uICBUaGVyZSBhcmUgYSBjb3VwbGUKLW9mIG1pbm9yIGRpZmZlcmVuY2VzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBhbW91bnQgb2YgZGF0YSByZXR1cm5lZAotd2l0aCBlYWNoIGZyYW1lIHZhcmllcywgYW5kIG5vIGRvdWJ0IHRoZXJlIGFyZSBkaXNjcmVwYW5jaWVzIGR1ZSB0byBteQotbWlzdW5kZXJzdGFuZGluZyBvZiB0aGUgQVBJLiAgSSBpbnRlbmQgdG8gY29udmVydCB0aGlzIGRyaXZlciB0byB0aGUKLW5ldyBWNEwyIEFQSSB3aGVuIGl0IGhhcyBzdGFiaWxpemVkIG1vcmUuCi0KLS0tLS0tLSBDdXJyZW50IHN0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBkcml2ZXIgaXMgY2FwYWJsZSBvZiBvdmVybGF5aW5nIGEgdmlkZW8gaW1hZ2UgaW4gc2NyZWVuLCBhbmQKLWV2ZW4gY2FwYWJsZSBvZiBncmFiYmluZyBmcmFtZXMuIEl0IHVzZXMgdGhlIEJJR1BIWVNBUkVBIHBhdGNoCi10byBhbGxvY2F0ZSBsb3RzIG9mIGxhcmdlIG1lbW9yeSBibG9ja3Mgd2hlbiB0aXMgcGF0Y2ggaXMKLWZvdW5kIGluIHRoZSBrZXJuZWwsIGJ1dCBpdCBkb2Vzbid0IG5lZWQgaXQuCi1UaGUgY29uc2VxdWVuY2UgaXMgdGhhdCwgd2hlbiBsb2FkaW5nIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUsCi10aGUgbW9kdWxlIG1heSB0ZWxsIHlvdSBpdCdzIG91dCBvZiBtZW1vcnksIGJ1dCAnZnJlZScgc2F5cwotb3RoZXJ3aXNlLiBUaGUgcmVhc29uIGlzIHNpbXBsZTsgdGhlIG1vZHVsZXMgd2FudHMgaXRzIG1lbW9yeQotY29udGlndW91cywgbm90IGZyYWdtZW50ZWQsIGFuZCBhZnRlciBhIGxvbmcgdXB0aW1lIHRoZXJlCi1wcm9iYWJseSBpc24ndCBhIGZyYWdtZW50IG9mIG1lbW9yeSBsYXJnZSBlbm91Z2guLi4KLQotVGhlIGRyaXZlciB1c2VzIGEgZG91YmxlIGJ1ZmZlcmluZyBzY2hlbWUsIHdoaWNoIHNob3VsZCByZWFsbHkKLWJlIGFuIG4td2F5IGJ1ZmZlciwgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGFsbG9jYXRlZCBmcmFtZWJ1ZmZlcgotYW5kIHRoZSByZXF1ZXN0ZWQgZ3JhYi1zaXplL2Zvcm1hdC4KLVRoaXMgY3VycmVudCB2ZXJzaW9uIGFsc28gZml4ZXMgYSBkZWFkLWxvY2sgc2l0dWF0aW9uIGR1cmluZyBpcnEKLXRpbWUsIHdoaWNoIHJlYWxseSwgcmVhbGx5IGZyb3plIG15IHN5c3RlbS4uLiA6KQotCi1Hb29kIGx1Y2suCi0gIFBhdWxpbmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0CmluZGV4IGRiZGNhZjYuLjVjODZlZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dApAQCAtNTIsNiArNTIsMTAgQEAKIAkJIGFwaWNtYWludGltZXIuIFVzZWZ1bCB3aGVuIHlvdXIgUElUIHRpbWVyIGlzIHRvdGFsbHkKIAkJIGJyb2tlbi4KIAorICAgZGlzYWJsZV84MjU0X3RpbWVyIC8gZW5hYmxlXzgyNTRfdGltZXIKKwkJIEVuYWJsZSBpbnRlcnJ1cHQgMCB0aW1lciByb3V0aW5nIG92ZXIgdGhlIDgyNTQgaW4gYWRkaXRpb24gdG8gb3ZlcgorCSAgICAgICAgIHRoZSBJTy1BUElDLiBUaGUga2VybmVsIHRyaWVzIHRvIHNldCBhIHNlbnNpYmxlIGRlZmF1bHQuCisKIEVhcmx5IENvbnNvbGUKIAogICAgc3ludGF4OiBlYXJseXByaW50az12Z2EKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggODllZjAxOC4uMGFkODgwMyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTIwNywxNiArMjA3LDQ1IEBACiBBQ1BJCiBQOglMZW4gQnJvd24KIE06CWxlbi5icm93bkBpbnRlbC5jb20KK006CWxlbmJAa2VybmVsLm9yZwogTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9hY3BpLnNvdXJjZWZvcmdlLm5ldC8KIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGVuYi9saW51eC1hY3BpLTIuNi5naXQKLVM6CU1haW50YWluZWQKK1M6CVN1cHBvcnRlZAorCitBQ1BJIEJBVFRFUlkgRFJJVkVSUworUDoJVmxhZGltaXIgUC4gTGViZWRldgorTToJdmxhZGltaXIucC5sZWJlZGV2QGludGVsLmNvbQorTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly9hY3BpLnNvdXJjZWZvcmdlLm5ldC8KK1M6CVN1cHBvcnRlZAorCitBQ1BJIEVDIERSSVZFUgorUDoJQWxleGV5IFN0YXJpa292c2tpeQorTToJYWxleGV5Lnkuc3Rhcmlrb3Zza2l5QGxpbnV4LmludGVsLmNvbQorTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly9hY3BpLnNvdXJjZWZvcmdlLm5ldC8KK1M6CVN1cHBvcnRlZAorCitBQ1BJIEZBTiBEUklWRVIKK1A6CUtvbnN0YW50aW4gQS4gS2FyYXN5b3YKK006CWtvbnN0YW50aW4uYS5rYXJhc3lvdkBpbnRlbC5jb20KK0w6CWxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vYWNwaS5zb3VyY2Vmb3JnZS5uZXQvCitTOglTdXBwb3J0ZWQKIAogQUNQSSBQQ0kgSE9UUExVRyBEUklWRVIKIFA6CUtyaXN0ZW4gQ2FybHNvbiBBY2NhcmRpCiBNOglrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20KIEw6CXBjaWhwZC1kaXNjdXNzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotUzoJTWFpbnRhaW5lZAorUzoJU3VwcG9ydGVkCisKK0FDUEkgVEhFUk1BTCBEUklWRVIKK1A6CUtvbnN0YW50aW4gQS4gS2FyYXN5b3YKK006CWtvbnN0YW50aW4uYS5rYXJhc3lvdkBpbnRlbC5jb20KK0w6CWxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vYWNwaS5zb3VyY2Vmb3JnZS5uZXQvCitTOglTdXBwb3J0ZWQKIAogQUQxODE2IFNPVU5EIERSSVZFUgogUDoJVGhvcnN0ZW4gS25hYmUKQEAgLTI3Nyw3ICszMDYsNyBAQAogCiBBTEkxNTYzIEkyQyBEUklWRVIKIFA6CVJ1ZG9sZiBNYXJlawotTToJci5tYXJla0BzaC5jdnV0LmN6CitNOglyLm1hcmVrQGFzc2VtYmxlci5jegogTDoJaTJjQGxtLXNlbnNvcnMub3JnCiBTOglNYWludGFpbmVkCiAKQEAgLTI5Niw2ICszMjUsMTMgQEAKIFc6CWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9Db25uZWN0aXZpdHlTb2x1dGlvbnMvVGVjaG5pY2FsUmVzb3VyY2VzLzAsLDUwXzIzMzRfMjQ1Ml8xMTM2MywwMC5odG1sCiBTOglTdXBwb3J0ZWQKIAorQU1TIChBcHBsZSBNb3Rpb24gU2Vuc29yKSBEUklWRVIKK1A6CVN0ZWxpYW4gUG9wCitNOglzdGVsaWFuQHBvcGllcy5uZXQKK1A6CU1pY2hhZWwgSGFuc2VsbWFubgorTToJbGludXgta2VybmVsQGhhbnNtaS5jaAorUzoJU3VwcG9ydGVkCisKIEFNU08xMTAwIFJOSUMgRFJJVkVSCiBQOglUb20gVHVja2VyCiBNOgl0b21Ab3BlbmdyaWRjb21wdXRpbmcuY29tCkBAIC0zNDgsNiArMzg0LDI0IEBACiBNOglzcHlyb0BmMnMuY29tCiBTOglNYWludGFpbmVkCiAKK0FSTS9BREkgUk9BRFJVTk5FUiBNQUNISU5FIFNVUFBPUlQKK1A6CUxlbm5lcnQgQnV5dGVuaGVrCitNOglrZXJuZWxAd2FudHN0b2ZseS5vcmcKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CU1haW50YWluZWQKKworQVJNL0FEUyBTUEhFUkUgTUFDSElORSBTVVBQT1JUCitQOglMZW5uZXJ0IEJ1eXRlbmhlaworTToJa2VybmVsQHdhbnRzdG9mbHkub3JnCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitTOglNYWludGFpbmVkCisKK0FSTS9BSkVDTyAxQVJNIE1BQ0hJTkUgU1VQUE9SVAorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorUzoJTWFpbnRhaW5lZAorCiBBUk0vQVRNRUwgQVQ5MVJNOTIwMCBBUk0gQVJDSElURUNUVVJFCiBQOiAgICAgIEFuZHJldyBWaWN0b3IKIE06ICAgICAgYW5kcmV3QHNhbnBlb3BsZS5jb20KQEAgLTM1NSwxNyArNDA5LDEwMyBAQAogVzogICAgICBodHRwOi8vbWF4aW0ub3JnLnphL2F0OTFfMjYuaHRtbAogUzogICAgICBNYWludGFpbmVkCiAKK0FSTS9DSVJSVVMgTE9HSUMgRVA5M1hYIEFSTSBBUkNISVRFQ1RVUkUKK1A6CUxlbm5lcnQgQnV5dGVuaGVrCitNOglrZXJuZWxAd2FudHN0b2ZseS5vcmcKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CU1haW50YWluZWQKKworQVJNL0NJUlJVUyBMT0dJQyBFREI5MzE1QSBNQUNISU5FIFNVUFBPUlQKK1A6CUxlbm5lcnQgQnV5dGVuaGVrCitNOglrZXJuZWxAd2FudHN0b2ZseS5vcmcKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CU1haW50YWluZWQKKwogQVJNL0NPUkdJIE1BQ0hJTkUgU1VQUE9SVAogUDoJUmljaGFyZCBQdXJkaWUKIE06CXJwdXJkaWVAcnBzeXMubmV0CiBTOglNYWludGFpbmVkCiAKK0FSTS9HTE9NQVRJT04gR0VTQkM5MzEyU1ggTUFDSElORSBTVVBQT1JUCitQOglMZW5uZXJ0IEJ1eXRlbmhlaworTToJa2VybmVsQHdhbnRzdG9mbHkub3JnCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitTOglNYWludGFpbmVkCisKIEFSTS9IUCBKT1JOQURBIDdYWCBNQUNISU5FIFNVUFBPUlQKIFA6ICAgICAgS3Jpc3RvZmZlciBFcmljc29uCiBNOiAgICAgIGtyaXN0b2ZmZXJfZTFAaG90bWFpbC5jb20KIFc6ICAgICAgd3d3LmpsaW1lLmNvbQogUzogICAgICBNYWludGFpbmVkCiAKK0FSTS9JTlRFTCBJT1AzMlggQVJNIEFSQ0hJVEVDVFVSRQorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworUDoJRGFuIFdpbGxpYW1zCitNOglkYW4uai53aWxsaWFtc0BpbnRlbC5jb20KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CVN1cHBvcnRlZAorCitBUk0vSU5URUwgSU9QMzNYIEFSTSBBUkNISVRFQ1RVUkUKK1A6CURhbiBXaWxsaWFtcworTToJZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitTOglTdXBwb3J0ZWQKKworQVJNL0lOVEVMIElPUDEzWFggQVJNIEFSQ0hJVEVDVFVSRQorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworUDoJRGFuIFdpbGxpYW1zCitNOglkYW4uai53aWxsaWFtc0BpbnRlbC5jb20KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CVN1cHBvcnRlZAorCitBUk0vSU5URUwgSVE4MTM0MkVYIE1BQ0hJTkUgU1VQUE9SVAorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworUDoJRGFuIFdpbGxpYW1zCitNOglkYW4uai53aWxsaWFtc0BpbnRlbC5jb20KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CVN1cHBvcnRlZAorCitBUk0vSU5URUwgSVhQMjAwMCBBUk0gQVJDSElURUNUVVJFCitQOglMZW5uZXJ0IEJ1eXRlbmhlaworTToJa2VybmVsQHdhbnRzdG9mbHkub3JnCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitTOglNYWludGFpbmVkCisKK0FSTS9JTlRFTCBJWERQMjg1MCBNQUNISU5FIFNVUFBPUlQKK1A6CUxlbm5lcnQgQnV5dGVuaGVrCitNOglrZXJuZWxAd2FudHN0b2ZseS5vcmcKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CU1haW50YWluZWQKKworQVJNL0lOVEVMIElYUDIzWFggQVJNIEFSQ0hJVEVDVFVSRQorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorUzoJTWFpbnRhaW5lZAorCitBUk0vSU5URUwgWFNDMyAoTUFOWkFOTykgQVJNIENPUkUKK1A6CUxlbm5lcnQgQnV5dGVuaGVrCitNOglrZXJuZWxAd2FudHN0b2ZseS5vcmcKK1A6CURhbiBXaWxsaWFtcworTToJZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitTOglTdXBwb3J0ZWQKKworQVJNL0lQIEZBQlJJQ1MgRE9VQkxFIEVTUFJFU1NPIE1BQ0hJTkUgU1VQUE9SVAorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorUzoJTWFpbnRhaW5lZAorCitBUk0vTE9HSUNQRCBQWEEyNzAgTUFDSElORSBTVVBQT1JUCitQOglMZW5uZXJ0IEJ1eXRlbmhlaworTToJa2VybmVsQHdhbnRzdG9mbHkub3JnCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitTOglNYWludGFpbmVkCisKIEFSTS9UT1NBIE1BQ0hJTkUgU1VQUE9SVAogUDoJRGlyayBPcGZlcgogTToJZGlya0BvcGZlci1vbmxpbmUuZGUKQEAgLTM4NCw2ICs1MjQsMTIgQEAKIFc6CWh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay8KIFM6CU1haW50YWluZWQKIAorQVJNL1JBRElTWVMgRU5QMjYxMSBNQUNISU5FIFNVUFBPUlQKK1A6CUxlbm5lcnQgQnV5dGVuaGVrCitNOglrZXJuZWxAd2FudHN0b2ZseS5vcmcKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CU1haW50YWluZWQKKwogQVJNL1NIQVJLIE1BQ0hJTkUgU1VQUE9SVAogUDoJQWxleGFuZGVyIFNjaHVsegogTToJYWxleEBzaGFyay1saW51eC5kZQpAQCAtMzk5LDMxICs1NDUsNDMgQEAKIAogQVJNL1MzQzI0MTAgQVJNIEFSQ0hJVEVDVFVSRQogUDoJQmVuIERvb2tzCi1NOgliZW4tczNjMjQxMEBmbHVmZi5vcmcKK006CWJlbi1saW51eEBmbHVmZi5vcmcKIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKIFc6CWh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9saW51eC8KIFM6CU1haW50YWluZWQKIAogQVJNL1MzQzI0NDAgQVJNIEFSQ0hJVEVDVFVSRQogUDoJQmVuIERvb2tzCi1NOgliZW4tczNjMjQ0MEBmbHVmZi5vcmcKK006CWJlbi1saW51eEBmbHVmZi5vcmcKIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKIFc6CWh0dHA6Ly93d3cuZmx1ZmYub3JnL2Jlbi9saW51eC8KIFM6CU1haW50YWluZWQKIAorQVJNL1RFQ0hOT0xPR0lDIFNZU1RFTVMgVFM3MjUwIE1BQ0hJTkUgU1VQUE9SVAorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorUzoJTWFpbnRhaW5lZAorCitBUk0vVEhFQ1VTIE4yMTAwIE1BQ0hJTkUgU1VQUE9SVAorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQorUzoJTWFpbnRhaW5lZAorCiBBUlBEIFNVUFBPUlQKIFA6CUpvbmF0aGFuIExheWVzCiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKIEFTVVMgQUNQSSBFWFRSQVMgRFJJVkVSCitQOglDb3JlbnRpbiBDaGFyeQorTToJY29yZW50aW5jakBpa3NhaWYubmV0CiBQOglLYXJvbCBLb3ppbW9yCiBNOglzeml3YW5AdXNlcnMuc291cmNlZm9yZ2UubmV0Ci1QOglKdWxpZW4gTGVyb3VnZQotTToJanVsaWVuLmxlcm91Z2VAZnJlZS5mcgogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2FjcGk0YXN1cwotVzoJaHR0cDovL2p1bGllbi5sZXJvdWdlLmZyZWUuZnIKK1c6CWh0dHA6Ly94Zi5pa3NhaWYubmV0L2FjcGk0YXN1cwogUzoJTWFpbnRhaW5lZAogCiBBVEEgT1ZFUiBFVEhFUk5FVCBEUklWRVIKQEAgLTQ0MCw4ICs1OTgsNiBAQAogUzoJTWFpbnRhaW5lZAogCiBBVE1FTCBNQUNCIEVUSEVSTkVUIERSSVZFUgotUDoJQXRtZWwgQVZSMzIgU3VwcG9ydCBUZWFtCi1NOglhdnIzMkBhdG1lbC5jb20KIFA6CUhhYXZhcmQgU2tpbm5lbW9lbgogTToJaHNraW5uZW1vZW5AYXRtZWwuY29tCiBTOglTdXBwb3J0ZWQKQEAgLTQ2Miw4ICs2MTgsNiBAQAogUzoJTWFpbnRhaW5lZAogCiBBVlIzMiBBUkNISVRFQ1RVUkUKLVA6CUF0bWVsIEFWUjMyIFN1cHBvcnQgVGVhbQotTToJYXZyMzJAYXRtZWwuY29tCiBQOglIYWF2YXJkIFNraW5uZW1vZW4KIE06CWhza2lubmVtb2VuQGF0bWVsLmNvbQogVzoJaHR0cDovL3d3dy5hdG1lbC5jb20vcHJvZHVjdHMvQVZSMzIvCkBAIC00NzIsOCArNjI2LDYgQEAKIFM6CVN1cHBvcnRlZAogCiBBVlIzMi9BVDMyQVAgTUFDSElORSBTVVBQT1JUCi1QOglBdG1lbCBBVlIzMiBTdXBwb3J0IFRlYW0KLU06CWF2cjMyQGF0bWVsLmNvbQogUDoJSGFhdmFyZCBTa2lubmVtb2VuCiBNOgloc2tpbm5lbW9lbkBhdG1lbC5jb20KIFM6CVN1cHBvcnRlZApAQCAtNjgxLDEyICs4MzMsMjQgQEAKIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogCitDSVJSVVMgTE9HSUMgRVA5M1hYIEVUSEVSTkVUIERSSVZFUgorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBDSVJSVVMgTE9HSUMgR0VORVJJQyBGQkRFViBEUklWRVIKIFA6CUplZmYgR2FyemlrCiBNOglqZ2FyemlrQHBvYm94LmNvbQotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCiBTOglPZGQgRml4ZXMKIAorQ0lSUlVTIExPR0lDIEVQOTNYWCBPSENJIFVTQiBIT1NUIERSSVZFUgorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworTDoJbGludXgtdXNiLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorUzoJTWFpbnRhaW5lZAorCiBDSVJSVVMgTE9HSUMgQ1M0MjgwL0NTNDYxeCBTT1VORERSSVZFUgogUDoJQ2lycnVzIExvZ2ljIENvcnBvcmF0aW9uIChrZXJuZWwgMi4yIGRyaXZlcikKIE06CUNpcnJ1cyBMb2dpYyBDb3Jwb3JhdGlvbiwgVGhvbWFzIFdvbGxlciA8dHdvbGxlckBjcnlzdGFsLmNpcnJ1cy5jb20+CkBAIC03NDAsNyArOTA0LDcgQEAKIE06CWRhdmVqQGNvZGVtb25rZXkub3JnLnVrCiBMOgljcHVmcmVxQGxpc3RzLmxpbnV4Lm9yZy51awogVzoJaHR0cDovL3d3dy5jb2RlbW9ua2V5Lm9yZy51ay9wcm9qZWN0cy9jcHVmcmVxLwotVDoJZ2l0IGtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZGF2ZWovY3B1ZnJlcS5naXQKK1Q6CWdpdCBrZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlai9jcHVmcmVxLmdpdAogUzoJTWFpbnRhaW5lZAogCiBDUFVJRC9NU1IgRFJJVkVSCkBAIC03OTEsNyArOTU1LDcgQEAKIENZQkxBRkIgRlJBTUVCVUZGRVIgRFJJVkVSCiBQOglLbnV0IFBldGVyc2VuCiBNOglLbnV0X1BldGVyc2VuQHQtb25saW5lLmRlCi1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKIFM6CU1haW50YWluZWQKIAogQ1lDTEFERVMgMlggU1lOQyBDQVJEIERSSVZFUgpAQCAtOTM2LDE4ICsxMTAwLDE1IEBACiBTOglNYWludGFpbmVkCiAKIERPQ0JPT0sgRk9SIERPQ1VNRU5UQVRJT04KLVA6CU1hcnRpbiBXYWl0egotTToJdGFsaUBhZG1pbmdpbGRlLm9yZwogUDoJUmFuZHkgRHVubGFwCiBNOglyZHVubGFwQHhlbm90aW1lLm5ldAotVDoJZ2l0IGh0dHA6Ly90YWxpLmFkbWluZ2lsZGUub3JnL2dpdC9saW51eC1kb2Nib29rLmdpdAogUzoJTWFpbnRhaW5lZAogCiBET0NLSU5HIFNUQVRJT04gRFJJVkVSCiBQOglLcmlzdGVuIENhcmxzb24gQWNjYXJkaQogTToJa3Jpc3Rlbi5jLmFjY2FyZGlAaW50ZWwuY29tCiBMOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAorUzoJU3VwcG9ydGVkCiAKIERPVUJMRVRBTEsgRFJJVkVSCiBQOglKYW1lcyBSLiBWYW4gWmFuZHQKQEAgLTk3MCw5ICsxMTMxLDkgQEAKIFM6CU1haW50YWluZWQKIAogRFNDQzQgRFJJVkVSCi1QOglGcmFu529pcyBSb21pZXUKLU06CXJvbWlldUBjb2dlbml0LmZyCi1NOglyb21pZXVAZW5zdGEuZnIKK1A6CUZyYW5jb2lzIFJvbWlldQorTToJcm9taWV1QGZyLnpvcmVpbC5jb20KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAogRFZCIFNVQlNZU1RFTSBBTkQgRFJJVkVSUwpAQCAtMTA4Nyw3ICsxMjQ4LDcgQEAKIAogRVRIRVJORVQgQlJJREdFCiBQOglTdGVwaGVuIEhlbW1pbmdlcgotTToJc2hlbW1pbmdlckBvc2RsLm9yZworTToJc2hlbW1pbmdlckBsaW51eC1mb3VuZGF0aW9uLm9yZwogTDoJYnJpZGdlQG9zZGwub3JnCiBXOglodHRwOi8vYnJpZGdlLnNvdXJjZWZvcmdlLm5ldC8KIFM6CU1haW50YWluZWQKQEAgLTExMjgsNyArMTI4OSw3IEBACiBGUkFNRUJVRkZFUiBMQVlFUgogUDoJQW50b25pbm8gRGFwbGFzCiBNOglhZGFwbGFzQHBvbC5uZXQKLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAkKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKIFc6CWh0dHA6Ly9saW51eC1mYmRldi5zb3VyY2Vmb3JnZS5uZXQvCiBTOglNYWludGFpbmVkCiAKQEAgLTEyNzAsNiArMTQzMSwxMiBAQAogVzoJaHR0cDovL2RyYW1hLm9idWRhLmthbmRvLmh1L35mZXJvL2NnaS1iaW4vaGdhZmIuc2h0bWwKIFM6CU1haW50YWluZWQKIAorSElEIENPUkUgTEFZRVIKK1A6CUppcmkgS29zaW5hCitNOglqa29zaW5hQHN1c2UuY3oKK0w6CWxpbnV4LWlucHV0QGF0cmV5Lmthcmxpbi5tZmYuY3VuaS5jegorUzoJTWFpbnRhaW5lZAorCiBISUdILVNQRUVEIFNDQyBEUklWRVIgRk9SIEFYLjI1CiBQOglLbGF1cyBLdWRpZWxrYQogTToJa2xhdXMua3VkaWVsa2FAaWVlZS5vcmcKQEAgLTEzOTAsNiArMTU1NywxNSBAQAogVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9hZWdsL2xpbnV4LTIuNi5naXQKIFM6CU1haW50YWluZWQKIAorSUJNIEFDUEkgRVhUUkFTIERSSVZFUgorUDoJSGVucmlxdWUgZGUgTW9yYWVzIEhvbHNjaHVoCitNOglpYm0tYWNwaUBobWguZW5nLmJyCitMOglpYm0tYWNwaS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK1c6CWh0dHA6Ly9pYm0tYWNwaS5zb3VyY2Vmb3JnZS5uZXQKK1c6CWh0dHA6Ly90aGlua3dpa2kub3JnL3dpa2kvSWJtLWFjcGkKK1Q6CWdpdCByZXBvLm9yLmN6L2xpbnV4LTIuNi9saW51eC1hY3BpLTIuNi9pYm0tYWNwaS0yLjYuZ2l0CitTOglNYWludGFpbmVkCisKIFNOLUlBNjQgKEl0YW5pdW0pIFNVQi1QTEFURk9STQogUDoJSmVzIFNvcmVuc2VuCiBNOglqZXNAc2dpLmNvbQpAQCAtMTQxNiwxOSArMTU5MiwxNyBAQAogVzoJaHR0cDovL3d3dy5kZXZlbG9wZXIuaWJtLmNvbS93ZWxjb21lL25ldGZpbml0eS9zZXJ2ZXJhaWQuaHRtbAogUzoJU3VwcG9ydGVkIAogCi1JREUgRFJJVkVSIFtHRU5FUkFMXQorSURFIFNVQlNZU1RFTQogUDoJQmFydGxvbWllaiBab2xuaWVya2lld2ljegotTToJQi5ab2xuaWVya2lld2ljekBlbGthLnB3LmVkdS5wbAotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworTToJYnpvbG5pZXJAZ21haWwuY29tCiBMOglsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnCi1UOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2JhcnQvaWRlLTIuNi5naXQKK1Q6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvYmFydC9wYXRhLTIuNi8KIFM6CU1haW50YWluZWQKIAogSURFL0FUQVBJIENEUk9NIERSSVZFUgotUDoJSmVucyBBeGJvZQotTToJYXhib2VAa2VybmVsLmRrCi1MOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3Lmtlcm5lbC5kaworUDoJQWxhbiBDb3gKK006CWFsYW5AbHhvcmd1ay51a3V1Lm9yZy51aworTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCiBJREUvQVRBUEkgRkxPUFBZIERSSVZFUlMKQEAgLTE0NzksNyArMTY1Myw3IEBACiBJTVMgVFdJTlRVUkJPIEZSQU1FQlVGRkVSIERSSVZFUgogUDoJUGF1bCBNdW5kdAogTToJbGV0aGFsQGNoYW90aWNkcmVhbXMub3JnCi1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKIFM6CU1haW50YWluZWQKIAogSU5GSU5JQkFORCBTVUJTWVNURU0KQEAgLTE1MDQsMjEgKzE2NzgsMjMgQEAKIFM6CU1haW50YWluZWQKIAogSU5PVElGWQotUDoJSm9obiBNY0N1dGNoYW4gYW5kIFJvYmVydCBMb3ZlCi1NOgl0dGJAdGVudGFjbGUuZGhzLm9yZyBhbmQgcm1sQG5vdmVsbC5jb20KK1A6CUpvaG4gTWNDdXRjaGFuCitNOgl0dGJAdGVudGFjbGUuZGhzLm9yZworUDoJUm9iZXJ0IExvdmUKK006CXJtbEBub3ZlbGwuY29tCiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKIElOVEVMIEZSQU1FQlVGRkVSIERSSVZFUiAoZXhjbHVkaW5nIDgxMCBhbmQgODE1KQogUDoJU3lsdmFpbiBNZXllcgogTToJc3lsdmFpbi5tZXllckB3b3JsZG9ubGluZS5mcgotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCiBTOglNYWludGFpbmVkCiAKIElOVEVMIDgxMC84MTUgRlJBTUVCVUZGRVIgRFJJVkVSCiBQOglBbnRvbmlubyBEYXBsYXMKIE06CWFkYXBsYXNAcG9sLm5ldAotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCiBTOglNYWludGFpbmVkCiAKIElOVEVMIEFQSUMvSU9BUElDLCBMT1dMRVZFTCBYODYgU01QIFNVUFBPUlQKQEAgLTE1NDIsNiArMTcxOCwxMiBAQAogTToJZHNheGVuYUBwbGV4aXR5Lm5ldAogUzoJTWFpbnRhaW5lZAogCitJTlRFTCBJWFAyMDAwIEVUSEVSTkVUIERSSVZFUgorUDoJTGVubmVydCBCdXl0ZW5oZWsKK006CWtlcm5lbEB3YW50c3RvZmx5Lm9yZworTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBJTlRFTCBQUk8vMTAwIEVUSEVSTkVUIFNVUFBPUlQKIFA6CUpvaG4gUm9uY2lhawogTToJam9obi5yb25jaWFrQGludGVsLmNvbQpAQCAtMTczOSwxMSArMTkyMSwxNyBAQAogCiBLRVJORUwgTkZTRAogUDoJTmVpbCBCcm93bgotTToJbmVpbGJAY3NlLnVuc3cuZWR1LmF1CitNOgluZWlsYkBzdXNlLmRlCiBMOgluZnNAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vbmZzLnNvdXJjZWZvcmdlLm5ldC8KLVc6CWh0dHA6Ly93d3cuY3NlLnVuc3cuZWR1LmF1L35uZWlsYi9wYXRjaGVzL2xpbnV4LWRldmVsLwotUzoJTWFpbnRhaW5lZAorUzoJU3VwcG9ydGVkCisKK0tFUk5FTCBWSVJUVUFMIE1BQ0hJTkUgKEtWTSkKK1A6CUF2aSBLaXZpdHkKK006CWF2aUBxdW1yYW5ldC5jb20KK0w6CWt2bS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK1c6CWt2bS5zb3VyY2Vmb3JnZS5uZXQKK1M6CVN1cHBvcnRlZAogCiBLRVhFQwogUDoJRXJpYyBCaWVkZXJtYW4KQEAgLTE5MDMsOSArMjA5MSw5IEBACiAKIExTSUxPR0lDIE1QVCBGVVNJT04gRFJJVkVSUyAoRkMvU0FTL1NQSSkKIFA6CUVyaWMgTW9vcmUKLU06CUVyaWMuTW9vcmVAbHNpbC5jb20KLU06CXN1cHBvcnRAbHNpbC5jb20KLUw6CW1wdF9saW51eF9kZXZlbG9wZXJAbHNpbC5jb20KK006CUVyaWMuTW9vcmVAbHNpLmNvbQorTToJc3VwcG9ydEBsc2kuY29tCitMOgltcHRfbGludXhfZGV2ZWxvcGVyQGxzaS5jb20KIEw6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmxzaWxvZ2ljLmNvbS9zdXBwb3J0CiBTOglTdXBwb3J0ZWQKQEAgLTE5NjQsNyArMjE1Miw3IEBACiBNQVRST1ggRlJBTUVCVUZGRVIgRFJJVkVSCiBQOglQZXRyIFZhbmRyb3ZlYwogTToJdmFuZHJvdmVAdmMuY3Z1dC5jegotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCiBTOglNYWludGFpbmVkCiAKIE1FR0FSQUlEIFNDU0kgRFJJVkVSUwpAQCAtMjAyNSw2ICsyMjEzLDEyIEBACiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKK01PWEEgU01BUlRJTy9JTkRVU1RJTyBTRVJJQUwgQ0FSRCAoTVhTRVIgMi4wKQorUDoJSmlyaSBTbGFieQorTToJamlyaXNsYWJ5QGdtYWlsLmNvbQorTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBNU0kgTEFQVE9QIFNVUFBPUlQKIFA6CUxlbm5hcnQgUG9ldHRlcmluZwogTToJbXp4cmVhcnlAMHBvaW50ZXIuZGUKQEAgLTIwNTAsNiArMjI0NCwxMiBAQAogTToJYW5kcmV3dHZAdXNhLm5ldAogUzoJTWFpbnRhaW5lZAogCitNVUxUSVRFQ0ggTVVMVElQT1JUIENBUkQgKElTSUNPTSkKK1A6CUppcmkgU2xhYnkKK006CWppcmlzbGFieUBnbWFpbC5jb20KK0w6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogTkFUU0VNSSBFVEhFUk5FVCBEUklWRVIgKERQODM4MXgpCiBQOiAJVGltIEhvY2tpbgogTToJdGhvY2tpbkBob2NraW4ub3JnCkBAIC0yMDY5LDcgKzIyNjksNyBAQAogCiBORVRFTSBORVRXT1JLIEVNVUxBVE9SCiBQOglTdGVwaGVuIEhlbW1pbmdlcgotTToJc2hlbW1pbmdlckBvc2RsLm9yZworTToJc2hlbW1pbmdlckBsaW51eC1mb3VuZGF0aW9uLm9yZwogTDoJbmV0ZW1Ab3NkbC5vcmcKIFM6CU1haW50YWluZWQKIApAQCAtMjA4Miw3ICsyMjgyLDcgQEAKIFA6CVBhdHJpY2sgTWNIYXJkeQogTToJa2FiZXJAdHJhc2gubmV0CiBMOgluZXRmaWx0ZXItZGV2ZWxAbGlzdHMubmV0ZmlsdGVyLm9yZwotTDoJbmV0ZmlsdGVyQGxpc3RzLm5ldGZpbHRlci5vcmcKK0w6CW5ldGZpbHRlckBsaXN0cy5uZXRmaWx0ZXIub3JnIChzdWJzY3JpYmVycy1vbmx5KQogTDoJY29yZXRlYW1AbmV0ZmlsdGVyLm9yZwogVzoJaHR0cDovL3d3dy5uZXRmaWx0ZXIub3JnLwogVzoJaHR0cDovL3d3dy5pcHRhYmxlcy5vcmcvCkBAIC0yMjEwLDcgKzI0MTAsNyBAQAogTlZJRElBIChyaXZhZmIgYW5kIG52aWRpYWZiKSBGUkFNRUJVRkZFUiBEUklWRVIKIFA6CUFudG9uaW5vIERhcGxhcwogTToJYWRhcGxhc0Bwb2wubmV0Ci1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKIFM6CU1haW50YWluZWQKIAogT1BFTkNPUkVTIEkyQyBCVVMgRFJJVkVSCkBAIC0yMzU2LDcgKzI1NTYsNyBAQAogUDoJS3Jpc3RlbiBDYXJsc29uIEFjY2FyZGkKIE06CWtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbQogTDoJcGNpaHBkLWRpc2N1c3NAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1TOglNYWludGFpbmVkCitTOglTdXBwb3J0ZWQKIAogUENNQ0lBIFNVQlNZU1RFTQogUDoJTGludXggUENNQ0lBIFRlYW0KQEAgLTI0MTQsNiArMjYxNCwxMiBAQAogTToJYW1ieDFAbmVvLnJyLmNvbQogUzoJTWFpbnRhaW5lZAogCitQTlh4eHh4IEkyQyBEUklWRVIKK1A6CVZpdGFseSBXb29sCitNOgl2aXRhbHl3b29sQGdtYWlsLmNvbQorTDoJaTJjQGxtLXNlbnNvcnMub3JnCitTOglNYWludGFpbmVkCisKIFBQUCBQUk9UT0NPTCBEUklWRVJTIEFORCBDT01QUkVTU09SUwogUDoJUGF1bCBNYWNrZXJyYXMKIE06CXBhdWx1c0BzYW1iYS5vcmcKQEAgLTI0NTEsNiArMjY1NywxMiBAQAogVzoJaHR0cDovL3d3dy5wbmQtcGMuZGVtb24uY28udWsvcHJvbWlzZS8KIFM6CU1haW50YWluZWQKIAorUFJPTUlTRSBTQVRBIFRYMi9UWDQgQ09OVFJPTExFUiBMSUJBVEEgRFJJVkVSCitQOglNaWthZWwgUGV0dGVyc3NvbgorTToJbWlrcGVAaXQudXUuc2UKK0w6CWxpbnV4LWlkZUB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogUFMzIFBMQVRGT1JNIFNVUFBPUlQKIFA6CUdlb2ZmIExldmFuZAogTToJZ2VvZmZyZXkubGV2YW5kQGFtLnNvbnkuY29tCkBAIC0yNDk0LDEzICsyNzA2LDEzIEBACiBSQURFT04gRlJBTUVCVUZGRVIgRElTUExBWSBEUklWRVIKIFA6CUJlbmphbWluIEhlcnJlbnNjaG1pZHQKIE06CWJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZwotTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCiBTOglNYWludGFpbmVkCiAKIFJBR0UxMjggRlJBTUVCVUZGRVIgRElTUExBWSBEUklWRVIKIFA6CVBhdWwgTWFja2VycmFzCiBNOglwYXVsdXNAc2FtYmEub3JnCi1MOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAoc3Vic2NyaWJlcnMtb25seSkKIFM6CU1haW50YWluZWQKIAogUkFZTElOSy9XRUJHRUFSIDgwMi4xMSBXSVJFTEVTUyBMQU4gRFJJVkVSCkBAIC0yNTQyLDcgKzI3NTQsNyBAQAogUkVBTCBUSU1FIENMT0NLIChSVEMpIFNVQlNZU1RFTQogUDoJQWxlc3NhbmRybyBadW1tbwogTToJYS56dW1tb0B0b3dlcnRlY2guaXQKLUw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK0w6CXJ0Yy1saW51eEBnb29nbGVncm91cHMuY29tCiBTOglNYWludGFpbmVkCiAKIFJFSVNFUkZTIEZJTEUgU1lTVEVNCkBAIC0yNTcwLDcgKzI3ODIsNyBAQAogUzMgU0FWQUdFIEZSQU1FQlVGRkVSIERSSVZFUgogUDoJQW50b25pbm8gRGFwbGFzCiBNOglhZGFwbGFzQHBvbC5uZXQKLUw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQogUzoJTWFpbnRhaW5lZAogCiBTMzkwCkBAIC0yNzczLDkgKzI5ODUsOSBAQAogUDoJSW5nbyBNb2xuYXIKIE06CW1pbmdvQHJlZGhhdC5jb20KIFA6CU5laWwgQnJvd24KLU06CW5laWxiQGNzZS51bnN3LmVkdS5hdQorTToJbmVpbGJAc3VzZS5kZQogTDoJbGludXgtcmFpZEB2Z2VyLmtlcm5lbC5vcmcKLVM6CU1haW50YWluZWQKK1M6CVN1cHBvcnRlZAogCiBTT0ZUV0FSRSBTVVNQRU5EOgogUDoJUGF2ZWwgTWFjaGVrCkBAIC0yODUwLDcgKzMwNjIsNyBAQAogUDoJS3Jpc3RlbiBDYXJsc29uIEFjY2FyZGkKIE06CWtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbQogTDoJcGNpaHBkLWRpc2N1c3NAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1TOglNYWludGFpbmVkCitTOglTdXBwb3J0ZWQKIAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSBEUklWRVIKIFA6CVBpZXJyZSBPc3NtYW4KQEAgLTI4NjEsNyArMzA3Myw3IEBACiAKIFNLR0UsIFNLWTIgMTAvMTAwLzEwMDAgR0lHQUJJVCBFVEhFUk5FVCBEUklWRVJTCiBQOglTdGVwaGVuIEhlbW1pbmdlcgotTToJc2hlbW1pbmdlckBvc2RsLm9yZworTToJc2hlbW1pbmdlckBsaW51eC1mb3VuZGF0aW9uLm9yZwogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCkBAIC0zMDk2LDcgKzMzMDgsNyBAQAogUDoJRGF2aWQgQnJvd25lbGwKIE06CWRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKIEw6CWxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLVM6CU1haW50YWluZWQKK1M6CU9kZCBGaXhlcwogCiBVU0IgRVQ2MVhbMTJdNTEgRFJJVkVSCiBQOglMdWNhIFJpc29saWEKQEAgLTMxMTQsOSArMzMyNiw4IEBACiBTOglNYWludGFpbmVkCiAKIFVTQiBISUQvSElEQlAgRFJJVkVSUwotUDoJVm9qdGVjaCBQYXZsaWsKLU06CXZvanRlY2hAc3VzZS5jegotTDoJbGludXgtdXNiLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorUDoJSmlyaSBLb3NpbmEKK006CWprb3NpbmFAc3VzZS5jegogTDoJbGludXgtdXNiLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogCkBAIC0zMTQ5LDExICszMzYwLDExIEBACiBXOglodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYi8KIAogVVNCIE9IQ0kgRFJJVkVSCi1QOglSb21hbiBXZWlzc2dhZXJiZXIKLU06CXdlaXNzZ0B2aWVubmEuYXQKK1A6CURhdmlkIEJyb3duZWxsCitNOglkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0CiBMOglsaW51eC11c2ItdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBMOglsaW51eC11c2ItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1TOglNYWludGFpbmVkCitTOglPZGQgRml4ZXMKIAogVVNCIE9QVElPTi1DQVJEIERSSVZFUgogUDoJTWF0dGhpYXMgVXJsaWNocwpAQCAtMzM1Niw2ICszNTY3LDEyIEBACiBMOglpMmNAbG0tc2Vuc29ycy5vcmcKIFM6CU1haW50YWluZWQKIAorVklBIFZFTE9DSVRZIE5FVFdPUksgRFJJVkVSCitQOglGcmFuY29pcyBSb21pZXUKK006CXJvbWlldUBmci56b3JlaWwuY29tCitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCisKIFVDTElOVVggKEFORCBNNjhLTk9NTVUpCiBQOglHcmVnIFVuZ2VyZXIKIE06CWdlcmdAdWNsaW51eC5vcmcKQEAgLTMzNzYsNiArMzU5MywxMiBAQAogVzoJaHR0cDovL3VjbGludXgtaDguc291cmNlZm9yZ2UuanAvCiBTOglTdXBwb3J0ZWQKIAorVUZTIEZJTEVTWVNURU0KK1A6IEV2Z2VuaXkgRHVzaGlzdG92CitNOiBkdXNoaXN0b3ZAbWFpbC5ydQorTDogbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworUzogTWFpbnRhaW5lZAorCiBVU0IgRElBTU9ORCBSSU81MDAgRFJJVkVSCiBQOglDZXNhciBNaXF1ZWwKIE06CW1pcXVlbEBkZi51YmEuYXIKQEAgLTM0MTUsNiArMzYzOCwxMiBAQAogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogCitXODM3OTMgSEFSRFdBUkUgTU9OSVRPUklORyBEUklWRVIKK1A6CVJ1ZG9sZiBNYXJlaworTToJci5tYXJla0Bhc3NlbWJsZXIuY3oKK0w6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKK1M6CU1haW50YWluZWQKKwogVzgzTDUxeEQgU0QvTU1DIENBUkQgSU5URVJGQUNFIERSSVZFUgogUDoJUGllcnJlIE9zc21hbgogTToJZHJ6ZXVzLXdic2RAZHJ6ZXVzLmN4CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGFlZjk2MjUuLjdlMjc1MGYgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDggKzEsOCBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2Ci1TVUJMRVZFTCA9IDE5CitTVUJMRVZFTCA9IDIwCiBFWFRSQVZFUlNJT04gPQotTkFNRT1BdmFzdCEgQSBiaWxnZSByYXQhCitOQU1FID0gSG9taWNpZGFsIER3YXJmIEhhbXN0ZXIKIAogIyAqRE9DVU1FTlRBVElPTioKICMgVG8gc2VlIGEgbGlzdCBvZiB0eXBpY2FsIHRhcmdldHMgZXhlY3V0ZSAibWFrZSBoZWxwIgpAQCAtMTAsOCArMTAsMTEgQEAKICMgQ29tbWVudHMgaW4gdGhpcyBmaWxlIGFyZSB0YXJnZXRlZCBvbmx5IHRvIHRoZSBkZXZlbG9wZXIsIGRvIG5vdAogIyBleHBlY3QgdG8gbGVhcm4gaG93IHRvIGJ1aWxkIHRoZSBrZXJuZWwgcmVhZGluZyB0aGlzIGZpbGUuCiAKLSMgRG8gbm90IHByaW50ICJFbnRlcmluZyBkaXJlY3RvcnkgLi4uIgotTUFLRUZMQUdTICs9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisjIERvIG5vdDoKKyMgbyAgdXNlIG1ha2UncyBidWlsdC1pbiBydWxlcyBhbmQgdmFyaWFibGVzCisjICAgICh0aGlzIGluY3JlYXNlcyBwZXJmb3JtYW5jZSBhbmQgYXZvaWQgaGFyZC10by1kZWJ1ZyBiZWhhdm91cik7CisjIG8gIHByaW50ICJFbnRlcmluZyBkaXJlY3RvcnkgLi4uIjsKK01BS0VGTEFHUyArPSAtclIgLS1uby1wcmludC1kaXJlY3RvcnkKIAogIyBXZSBhcmUgdXNpbmcgYSByZWN1cnNpdmUgYnVpbGQsIHNvIHdlIG5lZWQgdG8gZG8gYSBsaXR0bGUgdGhpbmtpbmcKICMgdG8gZ2V0IHRoZSBvcmRlcmluZyByaWdodC4KQEAgLTI3MSwxMiArMjc0LDggQEAKICMgTG9vayBmb3IgbWFrZSBpbmNsdWRlIGZpbGVzIHJlbGF0aXZlIHRvIHJvb3Qgb2Yga2VybmVsIHNyYwogTUFLRUZMQUdTICs9IC0taW5jbHVkZS1kaXI9JChzcmN0cmVlKQogCi0jIFdlIG5lZWQgc29tZSBnZW5lcmljIGRlZmluaXRpb25zCi1pbmNsdWRlICAkKHNyY3RyZWUpL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKLQotIyBEbyBub3QgdXNlIG1ha2UncyBidWlsdC1pbiBydWxlcyBhbmQgdmFyaWFibGVzCi0jIFRoaXMgaW5jcmVhc2VzIHBlcmZvcm1hbmNlIGFuZCBhdm9pZCBoYXJkLXRvLWRlYnVnIGJlaGF2b3VyCi1NQUtFRkxBR1MgKz0gLXJSCisjIFdlIG5lZWQgc29tZSBnZW5lcmljIGRlZmluaXRpb25zLgoraW5jbHVkZSAkKHNyY3RyZWUpL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKIAogIyBNYWtlIHZhcmlhYmxlcyAoQ0MsIGV0Yy4uLikKIApAQCAtNDk3LDExICs0OTYsNiBAQAogQ0ZMQUdTCQkrPSAtZm9taXQtZnJhbWUtcG9pbnRlcgogZW5kaWYKIAotaWZkZWYgQ09ORklHX1VOV0lORF9JTkZPCi1DRkxBR1MJCSs9IC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKLUxERkxBR1Nfdm1saW51eAkrPSAtLWVoLWZyYW1lLWhkcgotZW5kaWYKLQogaWZkZWYgQ09ORklHX0RFQlVHX0lORk8KIENGTEFHUwkJKz0gLWcKIGVuZGlmCkBAIC0xMTAxLDkgKzEwOTUsOSBAQAogCiBoZWxwOgogCUBlY2hvICAnQ2xlYW5pbmcgdGFyZ2V0czonCi0JQGVjaG8gICcgIGNsZWFuCQkgIC0gcmVtb3ZlIG1vc3QgZ2VuZXJhdGVkIGZpbGVzIGJ1dCBrZWVwIHRoZSBjb25maWcgYW5kJworCUBlY2hvICAnICBjbGVhbgkJICAtIFJlbW92ZSBtb3N0IGdlbmVyYXRlZCBmaWxlcyBidXQga2VlcCB0aGUgY29uZmlnIGFuZCcKIAlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgZW5vdWdoIGJ1aWxkIHN1cHBvcnQgdG8gYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcycKLQlAZWNobyAgJyAgbXJwcm9wZXIJICAtIHJlbW92ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzICsgY29uZmlnICsgdmFyaW91cyBiYWNrdXAgZmlsZXMnCisJQGVjaG8gICcgIG1ycHJvcGVyCSAgLSBSZW1vdmUgYWxsIGdlbmVyYXRlZCBmaWxlcyArIGNvbmZpZyArIHZhcmlvdXMgYmFja3VwIGZpbGVzJwogCUBlY2hvICAnICBkaXN0Y2xlYW4JICAtIG1ycHJvcGVyICsgcmVtb3ZlIGVkaXRvciBiYWNrdXAgYW5kIHBhdGNoIGZpbGVzJwogCUBlY2hvICAnJwogCUBlY2hvICAnQ29uZmlndXJhdGlvbiB0YXJnZXRzOicKQEAgLTExMjIsMTUgKzExMTYsMTUgQEAKIAlAZWNobyAgJyAgY3Njb3BlCSAgLSBHZW5lcmF0ZSBjc2NvcGUgaW5kZXgnCiAJQGVjaG8gICcgIGtlcm5lbHJlbGVhc2UJICAtIE91dHB1dCB0aGUgcmVsZWFzZSB2ZXJzaW9uIHN0cmluZycKIAlAZWNobyAgJyAga2VybmVsdmVyc2lvbgkgIC0gT3V0cHV0IHRoZSB2ZXJzaW9uIHN0b3JlZCBpbiBNYWtlZmlsZScKLQlAaWYgWyAtciBpbmNsdWRlL2FzbS0kKEFSQ0gpL0tidWlsZCBdOyB0aGVuIFwKKwlAaWYgWyAtciAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLSQoQVJDSCkvS2J1aWxkIF07IHRoZW4gXAogCSBlY2hvICAnICBoZWFkZXJzX2luc3RhbGwgLSBJbnN0YWxsIHNhbml0aXNlZCBrZXJuZWwgaGVhZGVycyB0byBJTlNUQUxMX0hEUl9QQVRIJzsgXAorCSBlY2hvICAnICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDogJChJTlNUQUxMX0hEUl9QQVRIKSknOyBcCiAJIGZpCi0JQGVjaG8gICcgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiAkKElOU1RBTExfSERSX1BBVEgpKScKIAlAZWNobyAgJycKIAlAZWNobyAgJ1N0YXRpYyBhbmFseXNlcnMnCiAJQGVjaG8gICcgIGNoZWNrc3RhY2sgICAgICAtIEdlbmVyYXRlIGEgbGlzdCBvZiBzdGFjayBob2dzJwogCUBlY2hvICAnICBuYW1lc3BhY2VjaGVjayAgLSBOYW1lIHNwYWNlIGFuYWx5c2lzIG9uIGNvbXBpbGVkIGtlcm5lbCcKLQlAaWYgWyAtciBpbmNsdWRlL2FzbS0kKEFSQ0gpL0tidWlsZCBdOyB0aGVuIFwKKwlAaWYgWyAtciAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLSQoQVJDSCkvS2J1aWxkIF07IHRoZW4gXAogCSBlY2hvICAnICBoZWFkZXJzX2NoZWNrICAgLSBTYW5pdHkgY2hlY2sgb24gZXhwb3J0ZWQgaGVhZGVycyc7IFwKIAkgZmkKIAlAZWNobyAgJycKQEAgLTEzOTEsMTIgKzEzODUsMTggQEAKIAogUEhPTlkgKz0gY2hlY2tzdGFjayBrZXJuZWxyZWxlYXNlIGtlcm5lbHZlcnNpb24KIAotIyBVc2UgJChTVUJBUkNIKSBoZXJlIGluc3RlYWQgb2YgJChBUkNIKSBzbyB0aGF0IHRoaXMgd29ya3MgZm9yIFVNTC4KLSMgSW4gdGhlIFVNTCBjYXNlLCAkKFNVQkFSQ0gpIGlzIHRoZSBuYW1lIG9mIHRoZSB1bmRlcmx5aW5nCi0jIGFyY2hpdGVjdHVyZSwgd2hpbGUgZm9yIGFsbCBvdGhlciBhcmNoZXMsIGl0IGlzIHRoZSBzYW1lIGFzICQoQVJDSCkuCisjIFVNTCBuZWVkcyBhIGxpdHRsZSBzcGVjaWFsIHRyZWF0bWVudCBoZXJlLiAgSXQgd2FudHMgdG8gdXNlIHRoZSBob3N0CisjIHRvb2xjaGFpbiwgc28gbmVlZHMgJChTVUJBUkNIKSBwYXNzZWQgdG8gY2hlY2tzdGFjay5wbC4gIEV2ZXJ5b25lCisjIGVsc2Ugd2FudHMgJChBUkNIKSwgaW5jbHVkaW5nIHBlb3BsZSBkb2luZyBjcm9zcy1idWlsZHMsIHdoaWNoIG1lYW5zCisjIHRoYXQgJChTVUJBUkNIKSBkb2Vzbid0IHdvcmsgaGVyZS4KK2lmZXEgKCQoQVJDSCksIHVtKQorQ0hFQ0tTVEFDS19BUkNIIDo9ICQoU1VCQVJDSCkKK2Vsc2UKK0NIRUNLU1RBQ0tfQVJDSCA6PSAkKEFSQ0gpCitlbmRpZgogY2hlY2tzdGFjazoKIAkkKE9CSkRVTVApIC1kIHZtbGludXggJCQoZmluZCAuIC1uYW1lICcqLmtvJykgfCBcCi0JJChQRVJMKSAkKHNyYykvc2NyaXB0cy9jaGVja3N0YWNrLnBsICQoU1VCQVJDSCkKKwkkKFBFUkwpICQoc3JjKS9zY3JpcHRzL2NoZWNrc3RhY2sucGwgJChDSEVDS1NUQUNLX0FSQ0gpCiAKIGtlcm5lbHJlbGVhc2U6CiAJJChpZiAkKHdpbGRjYXJkIGluY2x1ZGUvY29uZmlnL2tlcm5lbC5yZWxlYXNlKSwgJChRKWVjaG8gJChLRVJORUxSRUxFQVNFKSwgXApAQCAtMTQ4NCw2ICsxNDg0LDggQEAKIFBIT05ZICs9IEZPUkNFCiBGT1JDRToKIAorIyBDYW5jZWwgaW1wbGljaXQgcnVsZXMgb24gdG9wIE1ha2VmaWxlLCBgLXJSJyB3aWxsIGFwcGx5IHRvIHN1Yi1tYWtlcy4KK01ha2VmaWxlOiA7CiAKICMgRGVjbGFyZSB0aGUgY29udGVudHMgb2YgdGhlIC5QSE9OWSB2YXJpYWJsZSBhcyBwaG9ueS4gIFdlIGtlZXAgdGhhdAogIyBpbmZvcm1hdGlvbiBpbiBhIHZhcmlhYmxlIHNlIHdlIGNhbiB1c2UgaXQgaW4gaWZfY2hhbmdlZCBhbmQgZnJpZW5kcy4KZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCBjMDU1NjE1Li40NmE2NmM2IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0yNzgsOCArMjc4LDggQEAKICAgIHRoZSBmaWxlIE1BSU5UQUlORVJTIHRvIHNlZSBpZiB0aGVyZSBpcyBhIHBhcnRpY3VsYXIgcGVyc29uIGFzc29jaWF0ZWQKICAgIHdpdGggdGhlIHBhcnQgb2YgdGhlIGtlcm5lbCB0aGF0IHlvdSBhcmUgaGF2aW5nIHRyb3VibGUgd2l0aC4gSWYgdGhlcmUKICAgIGlzbid0IGFueW9uZSBsaXN0ZWQgdGhlcmUsIHRoZW4gdGhlIHNlY29uZCBiZXN0IHRoaW5nIGlzIHRvIG1haWwKLSAgIHRoZW0gdG8gbWUgKHRvcnZhbGRzQG9zZGwub3JnKSwgYW5kIHBvc3NpYmx5IHRvIGFueSBvdGhlciByZWxldmFudAotICAgbWFpbGluZy1saXN0IG9yIHRvIHRoZSBuZXdzZ3JvdXAuCisgICB0aGVtIHRvIG1lICh0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZyksIGFuZCBwb3NzaWJseSB0byBhbnkgb3RoZXIKKyAgIHJlbGV2YW50IG1haWxpbmctbGlzdCBvciB0byB0aGUgbmV3c2dyb3VwLgogCiAgLSBJbiBhbGwgYnVnLXJlcG9ydHMsICpwbGVhc2UqIHRlbGwgd2hhdCBrZXJuZWwgeW91IGFyZSB0YWxraW5nIGFib3V0LAogICAgaG93IHRvIGR1cGxpY2F0ZSB0aGUgcHJvYmxlbSwgYW5kIHdoYXQgeW91ciBzZXR1cCBpcyAodXNlIHlvdXIgY29tbW9uCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggN2U1NWVhNi4uODRjYWY1MCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCisrKyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTQgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKKwlib29sCisJZGVmYXVsdCBuCisKIGNvbmZpZyBHRU5FUklDX0ZJTkRfTkVYVF9CSVQKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKaW5kZXggYWQ2MTczNi4uYmUxMzNmMSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJcmV0dmFsID0gLUVCQURGOwogCWZpbGUgPSBmZ2V0KGZkKTsKIAlpZiAoZmlsZSkgewotCQlyZXR2YWwgPSBkb19vc2Zfc3RhdGZzKGZpbGUtPmZfZGVudHJ5LCBidWZmZXIsIGJ1ZnNpeik7CisJCXJldHZhbCA9IGRvX29zZl9zdGF0ZnMoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgYnVmZmVyLCBidWZzaXopOwogCQlmcHV0KGZpbGUpOwogCX0KIAlyZXR1cm4gcmV0dmFsOwpAQCAtOTc5LDcgKzk3OSw3IEBACiAJbG9uZyB0aW1lb3V0OwogCWludCByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCBmZHRhYmxlICpmZHQ7Ci0JaW50IG1heF9mZHNldDsKKwlpbnQgbWF4X2ZkczsKIAogCXRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKIAlpZiAodHZwKSB7CkBAIC0xMDAzLDkgKzEwMDMsOSBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZkdCA9IGZpbGVzX2ZkdGFibGUoY3VycmVudC0+ZmlsZXMpOwotCW1heF9mZHNldCA9IGZkdC0+bWF4X2Zkc2V0OworCW1heF9mZHMgPSBmZHQtPm1heF9mZHM7CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JaWYgKG4gPCAwIHx8IG4gPiBtYXhfZmRzZXQpCisJaWYgKG4gPCAwIHx8IG4gPiBtYXhfZmRzKQogCQlnb3RvIG91dF9ub2ZkczsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMzM3MGU2Zi4uYzE1MTg2MyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDcsNiArNDcsNyBAQAogICogUG93ZXIgb2ZmIGZ1bmN0aW9uLCBpZiBhbnkKICAqLwogdm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBtYWNoaW5lX3Bvd2VyX29mZjsKK0VYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKIAogdm9pZAogY3B1X2lkbGUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDhjMDVkNDMuLjY3ODNjMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtNzQsNiArNzQsMTQgQEAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWJvb2wKIAorY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgorCWJvb2wKKwlkZWZhdWx0IG4KKworY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAorCWJvb2wKKwlkZWZhdWx0IG4KKwogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTczMiw3ICs3NDAsNyBAQAogCiBlbmRtZW51CiAKLWlmIChBUkNIX1NBMTEwMCB8fCBBUkNIX0lOVEVHUkFUT1IgfHwgQVJDSF9PTUFQKQoraWYgKEFSQ0hfU0ExMTAwIHx8IEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX09NQVAgfHwgQVJDSF9JTVggKQogCiBtZW51ICJDUFUgRnJlcXVlbmN5IHNjYWxpbmciCiAKQEAgLTc1OSw2ICs3NjcsMTUgQEAKIAogCSAgSWYgaW4gZG91YnQsIHNheSBZLgogCitjb25maWcgQ1BVX0ZSRVFfSU1YCisJdHJpc3RhdGUgIkNQVWZyZXEgZHJpdmVyIGZvciBpLk1YIENQVXMiCisJZGVwZW5kcyBvbiBBUkNIX0lNWCAmJiBDUFVfRlJFUQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgQ1BVZnJlcSBkcml2ZXIgZm9yIGkuTVggQ1BVcy4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOLgorCiBlbmRtZW51CiAKIGVuZGlmCkBAIC05MzcsNiArOTU0LDggQEAKIAogc291cmNlICJzb3VuZC9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvaGlkL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy91c2IvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21tYy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjBla19kZWZjb25maWcKaW5kZXggNzkwNDkyMC4uNDZiMGM3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MGVrX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYwZWtfZGVmY29uZmlnCkBAIC05MjMsNyArOTIzLDYgQEAKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKICMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxc2FtOTI2MWVrX2RlZmNvbmZpZwppbmRleCA3ODRhZDdjLi5mY2Q4ZmEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2F0OTFzYW05MjYxZWtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXQ5MXNhbTkyNjFla19kZWZjb25maWcKQEAgLTEwNzksNyArMTA3OSw2IEBACiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CiAjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCmluZGV4IGY4YTY2YjcuLjI0YTcwMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEtZ2l0OQotIyBTYXQgSnVsIDE1IDE1OjA4OjEwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzEKKyMgU2F0IERlYyAxNiAwNjowNToyNCAyMDA2CiAjCiBDT05GSUdfQVJNPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCkBAIC0yOCwxOCArMzIsMjIgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1VJRDE2PXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC00OCwxMiArNTYsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC03MSw3ICs3OSwxMCBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTAzLDcgKzExNCw5IEBACiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CkBAIC0xMjcsNiArMTQwLDcgQEAKICMKIENPTkZJR19NQUNIX0FEU1NQSEVSRT15CiBDT05GSUdfTUFDSF9FREI5MzAyPXkKK0NPTkZJR19NQUNIX0VEQjkzMDJBPXkKIENPTkZJR19NQUNIX0VEQjkzMTI9eQogQ09ORklHX01BQ0hfRURCOTMxNT15CiBDT05GSUdfTUFDSF9FREI5MzE1QT15CkBAIC0xMzgsMTIgKzE1MiwxNCBAQAogIwogQ09ORklHX0NQVV8zMj15CiBDT05GSUdfQ1BVX0FSTTkyMFQ9eQotQ09ORklHX0NQVV8zMnY0PXkKK0NPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQogQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX0NPUFlfVjRXQj15CiBDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CiAKICMKICMgUHJvY2Vzc29yIEZlYXR1cmVzCkBAIC0yMzAsNiArMjQ2LDcgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKQEAgLTI1MCwxMyArMjY3LDI5IEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9TSVQgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKQEAgLTI4Myw3ICszMTYsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTMzMCw3ICszNjIsNyBAQAogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAogCiAjCkBAIC0zNDIsNiArMzc0LDcgQEAKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQzMCw3ICs0NjMsNyBAQAogIwogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9eQogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CkBAIC00NDIsNiArNDc1LDggQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2MCwyMyArNDk1LDI5IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKIAogIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjIFNDU0kgVHJhbnNwb3J0cwogIwogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwogIwogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIAogIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisKKyMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKICMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKQEAgLTUxMyw2ICs1NTQsNyBAQAogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKK0NPTkZJR19FUDkzWFhfRVRIPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCkBAIC02MDcsMTcgKzY0OSwxMiBAQAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTY0NSw3ICs2ODIsNyBAQAogIwogIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKQEAgLTY2NCw2ICs3MDEsNyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC02OTcsMTIgKzczNSwxNSBAQAogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKQEAgLTcxMSw2ICs3NTIsNyBAQAogIwogIyBNaXNjIGRldmljZXMKICMKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAKICMKICMgTEVEIGRldmljZXMKQEAgLTcyOSw3ICs3NzEsNiBAQAogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNzQyLDYgKzc4Myw3IEBACiAjCiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTc2Myw2ICs4MDUsNyBAQAogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfVVNCX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCkBAIC03OTcsMTIgKzg0MCwxMiBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCi0jIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwpAQCAtODIxLDYgKzg2NCw3IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUlRMODE1MD15CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCkBAIC04MzQsOCArODc4LDggQEAKIENPTkZJR19VU0JfU0VSSUFMPXkKIENPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEU9eQogIyBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FOWURBVEEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKQEAgLTg1Nyw2ICs5MDEsOCBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9eQogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKQEAgLTg2NywxMiArOTEzLDE0IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwogIwogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKQEAgLTg4MCwxMSArOTI4LDEyIEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTA4LDYgKzk1Nyw3IEBACiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CiBDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBSVEMgaW50ZXJmYWNlcwpAQCAtOTIxLDcgKzk3MSw3IEBACiAjIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldApAQCAtOTQzLDEyICs5OTMsMTQgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk4MCw4ICsxMDMyLDEwIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtMTEwMiw2ICsxMTU2LDExIEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCiAjIFByb2ZpbGluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldApAQCAtMTExMCw4ICsxMTY5LDExIEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKQEAgLTExMjgsMTAgKzExOTAsOSBAQAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKQEAgLTExNTEsMTIgKzEyMTIsOSBAQAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQpAQCAtMTE2NCwzICsxMjIyLDQgQEAKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0lPTUFQX0NPUFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pb3AxM3h4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMTN4eF9kZWZjb25maWcKaW5kZXggZjZlNDYxOS4uNDNjNGEzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pb3AxM3h4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lvcDEzeHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5Ci0jIEZyaSBEZWMgIDEgMTA6NTE6MDEgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjMS1naXQ1CisjIFR1ZSBEZWMgMTkgMjE6Mzg6MDEgMjAwNgogIwogQ09ORklHX0FSTT15CiAjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldApAQCAtMTEsNiArMTEsOCBAQAogQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKQEAgLTM5LDYgKzQxLDcgQEAKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApAQCAtNzcsNyArODAsOSBAQAogIyBCbG9jayBsYXllcgogIwogQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTU0LDExICsxNTksMTMgQEAKIENPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTU1YVCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIHN1cHBvcnQKICMKIENPTkZJR19QQ0k9eQorIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CkBAIC0yNTksOSArMjY2LDIzIEBACiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCkBAIC00MzMsNyArNDU0LDcgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD15CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTIKQEAgLTQ0OCw2ICs0NjksNyBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTQ2Nyw2ICs0ODksNyBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNTEwLDYgKzUzMyw3IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwpAQCAtNjA1LDYgKzYyOSw3IEBACiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC03MTEsMTAgKzczNiw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtODIwLDYgKzg0MSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKQEAgLTgzMCw2ICs4NTIsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CkBAIC04ODMsNiArOTA2LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC05NzAsNiArOTk4LDcgQEAKICMKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRUNSWVBUX0ZTPXkKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldApAQCAtMTA5Miw2ICsxMTIxLDExIEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCiAjIFByb2ZpbGluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldApAQCAtMTEwMywyOCArMTEzNyw2OCBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlTPXkKK0NPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9eQorQ09ORklHX0NSWVBUT19OVUxMPXkKK0NPTkZJR19DUllQVE9fTUQ0PXkKK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT15CitDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CitDT05GSUdfQ1JZUFRPX1NIQTUxMj15CitDT05GSUdfQ1JZUFRPX1dQNTEyPXkKK0NPTkZJR19DUllQVE9fVEdSMTkyPXkKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9eQorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19MUlc9eQorQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD15CitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9eQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj15CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9eQorQ09ORklHX0NSWVBUT19BRVM9eQorQ09ORklHX0NSWVBUT19DQVNUNT15CitDT05GSUdfQ1JZUFRPX0NBU1Q2PXkKK0NPTkZJR19DUllQVE9fVEVBPXkKK0NPTkZJR19DUllQVE9fQVJDND15CitDT05GSUdfQ1JZUFRPX0tIQVpBRD15CitDT05GSUdfQ1JZUFRPX0FOVUJJUz15CitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPXkKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CkBAIC0xMTMyLDMgKzEyMDYsNCBAQAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lvcDMyeF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lvcDMyeF9kZWZjb25maWcKaW5kZXggYjI3NWM1My4uNzkwOWE1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pb3AzMnhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzJ4X2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNwotIyBUdWUgU2VwIDE5IDAwOjMwOjE4IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzEtZ2l0NQorIyBUdWUgRGVjIDE5IDIxOjM3OjUyIDIwMDYKICMKIENPTkZJR19BUk09eQorIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKQEAgLTI5LDE4ICszMiwyMiBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtNDksMTIgKzU2LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtNzIsNyArNzksMTAgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEwNiw2ICsxMTYsNyBAQAogIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSU9QMzJYPXkKICMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKQEAgLTE0MSwxNyArMTUyLDIyIEBACiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQogCiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwogIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JV01NWFQgaXMgbm90IHNldAogQ09ORklHX1hTQ0FMRV9QTVU9eQogCiAjCiAjIEJ1cyBzdXBwb3J0CiAjCiBDT05GSUdfUENJPXkKKyMgQ09ORklHX1BDSV9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0yMjUsNiArMjQxLDcgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTI0NiwxMyArMjYzLDI5IEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9TSVQgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKQEAgLTI3OSw3ICszMTIsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTMzOCw2ICszNzAsNyBAQAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDE5LDkgKzQ1MiwxMSBAQAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgpAQCAtNDQwLDYgKzQ3NSw4IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwpAQCAtNDU4LDE0ICs0OTUsMTYgQEAKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCkBAIC00NzgsMjYgKzUxNyw4NCBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworQ09ORklHX0FUQT15CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTD15CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC01MTIsNiArNjA5LDcgQEAKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09eQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAogIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKQEAgLTYxMiw2ICs3MTAsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQpAQCAtNjIwLDYgKzcxOSw3IEBACiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02NTQsNiArNzU0LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03MjUsMTAgKzgyNiw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNzM2LDcgKzgzMyw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtODAxLDYgKzg5Nyw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTgzNCwxNSArOTMxLDE4IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CkBAIC04NTEsNiArOTUxLDggQEAKICMKICMgTWlzYyBkZXZpY2VzCiAjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogCiAjCiAjIExFRCBkZXZpY2VzCkBAIC04NjksMTIgKzk3MSwxMiBAQAogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwogIwogIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTg5NSw2ICs5OTcsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTkwOSw2ICsxMDE2LDcgQEAKICMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKICMKQEAgLTk0Niw2ICsxMDU0LDcgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtOTg0LDYgKzEwOTMsNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIApAQCAtMTAwMSw2ICsxMTExLDcgQEAKICMKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CkBAIC0xMDA4LDEyICsxMTE5LDEzIEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydApAQCAtMTA0NSw2ICsxMTU3LDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC0xMDU2LDYgKzExNjksNyBAQAogQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMDg0LDggKzExOTgsMTAgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDk1LDYgKzEyMTEsNyBAQAogIwogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FQ1JZUFRfRlM9eQogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTI5LDcgKzEyNDYsNyBAQAogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9UQ1A9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQpAQCAtMTE3Miw2ICsxMjg5LDExIEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTExODAsOCArMTMwMiwxMSBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CkBAIC0xMTk3LDEwICsxMzIyLDkgQEAKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFRF9JTkxJTklORyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKQEAgLTEyMTEsMTMgKzEzMzUsNDggQEAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfS0VZUz15CitDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogCiAjCiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPXkKK0NPTkZJR19DUllQVE9fTlVMTD15CitDT05GSUdfQ1JZUFRPX01END15CitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9eQorQ09ORklHX0NSWVBUT19TSEE1MTI9eQorQ09ORklHX0NSWVBUT19XUDUxMj15CitDT05GSUdfQ1JZUFRPX1RHUjE5Mj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fTFJXPXkKK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9eQorQ09ORklHX0NSWVBUT19UV09GSVNIPXkKK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049eQorQ09ORklHX0NSWVBUT19TRVJQRU5UPXkKK0NPTkZJR19DUllQVE9fQUVTPXkKK0NPTkZJR19DUllQVE9fQ0FTVDU9eQorQ09ORklHX0NSWVBUT19DQVNUNj15CitDT05GSUdfQ1JZUFRPX1RFQT15CitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorQ09ORklHX0NSWVBUT19LSEFaQUQ9eQorQ09ORklHX0NSWVBUT19BTlVCSVM9eQorQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQorQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCkBAIC0xMjI2LDEwICsxMzg1LDEyIEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9eQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKaW5kZXggODQ4ZTNhYy4uZmEyNzFiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNwotIyBUdWUgU2VwIDE5IDAwOjMwOjQyIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzEKKyMgU2F0IERlYyAxNiAwNjowNTozNCAyMDA2CiAjCiBDT05GSUdfQVJNPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCkBAIC0yOSwxOCArMzIsMjIgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfVUlEMTY9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTQ5LDEyICs1NiwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTcyLDcgKzc5LDEwIEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMDYsNiArMTE2LDcgQEAKICMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lPUDMzWD15CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CkBAIC0xMzksMTcgKzE1MCwyMiBAQAogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKIAogIwogIyBQcm9jZXNzb3IgRmVhdHVyZXMKICMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVdNTVhUIGlzIG5vdCBzZXQKIENPTkZJR19YU0NBTEVfUE1VPXkKIAogIwogIyBCdXMgc3VwcG9ydAogIwogQ09ORklHX1BDST15CisjIENPTkZJR19QQ0lfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMjIzLDYgKzIzOSw3IEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0yNDQsMTMgKzI2MSwyOSBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCkBAIC0yNzcsNyArMzEwLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zMzYsNiArMzY4LDcgQEAKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQyMyw3ICs0NTYsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKQEAgLTQ0Myw2ICs0NzYsOCBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKQEAgLTQ2MSwxNCArNDk2LDE2IEBACiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKIAogIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjIFNDU0kgVHJhbnNwb3J0cwogIwogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwpAQCAtNDgxLDI2ICs1MTgsMzQgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTUxNSw2ICs1NjAsNyBAQAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9ETT15CisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETV9DUllQVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETV9TTkFQU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETV9NSVJST1IgaXMgbm90IHNldApAQCAtNTgwLDYgKzYyNiw3IEBACiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQpAQCAtNTg4LDYgKzYzNSw3IEBACiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02MjIsNiArNjcwLDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02OTMsMTAgKzc0Miw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtNzA0LDcgKzc0OSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNzY5LDYgKzgxMyw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTgwMiwxNSArODQ3LDE4IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CkBAIC04MTksNiArODY3LDggQEAKICMKICMgTWlzYyBkZXZpY2VzCiAjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogCiAjCiAjIExFRCBkZXZpY2VzCkBAIC04MzcsNyArODg3LDYgQEAKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTg2Myw2ICs5MTIsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTkwMCw2ICs5NTQsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTkxMSw2ICs5NjYsNyBAQAogQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC05MzksOCArOTk1LDEwIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtMTAxOSw2ICsxMDc3LDExIEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTEwMjcsOCArMTA5MCwxMSBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CkBAIC0xMDQ0LDEwICsxMTEwLDkgQEAKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFRF9JTkxJTklORyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKQEAgLTEwNjcsMTAgKzExMzIsNiBAQAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CkBAIC0xMDc4LDMgKzExMzksNCBAQAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peHAyMDAwX2RlZmNvbmZpZwppbmRleCBiYmQyZGNmLi5mOGY5NzkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgU3VuIEp1bCAgOSAxNToyODo1MCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmMxCisjIFNhdCBEZWMgMTYgMDY6MDU6MzkgMjAwNgogIwogQ09ORklHX0FSTT15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMApAQCAtMjgsMTcgKzMyLDIyIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1VJRDE2PXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC00NywxMiArNTYsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC03MCw3ICs3OSwxMCBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTAyLDcgKzExNCw5IEBACiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSVhQMjAwMD15CiAjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldApAQCAtMTQzLDI0ICsxNTcsMjggQEAKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CiAKICMKICMgUHJvY2Vzc29yIEZlYXR1cmVzCiAjCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAogQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JV01NWFQgaXMgbm90IHNldAogQ09ORklHX1hTQ0FMRV9QTVU9eQogCiAjCiAjIEJ1cyBzdXBwb3J0CiAjCiBDT05GSUdfUENJPXkKKyMgQ09ORklHX1BDSV9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKICMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIEZlYXR1cmVzCkBAIC0yMjgsNiArMjQ2LDcgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMjQ4LDEzICsyNjcsMjkgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1NJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIApAQCAtMjgxLDcgKzMxNiw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtMzA4LDcgKzM0Miw2IEBACiAjCiBDT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCkBAIC0zNDAsNiArMzczLDcgQEAKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQyMiwxMSArNDU2LDEyIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKQEAgLTQzNiw2ICs0NzEsMTIgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNTAxLDggKzU0Miw4IEBACiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogQ09ORklHX0NTODl4MD15CiAjIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBSTzEwMD15Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPXkKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKQEAgLTUzMiw2ICs1NzMsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQpAQCAtNTQwLDYgKzU4Miw3IEBACiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC01NTUsNyArNTk4LDYgQEAKICMgV2FuIGludGVyZmFjZXMKICMKIENPTkZJR19XQU49eQotIyBDT05GSUdfRFNDQzQgaXMgbm90IHNldAogIyBDT05GSUdfTEFOTUVESUEgaXMgbm90IHNldAogQ09ORklHX0hETEM9eQogQ09ORklHX0hETENfUkFXPXkKQEAgLTU3MSw2ICs2MTMsNyBAQAogIyBDT05GSUdfV0FOWEwgaXMgbm90IHNldAogIyBDT05GSUdfUEMzMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkFSU1lOQyBpcyBub3Qgc2V0CisjIENPTkZJR19EU0NDNCBpcyBub3Qgc2V0CiBDT05GSUdfRExDST15CiBDT05GSUdfRExDSV9DT1VOVD0yNAogQ09ORklHX0RMQ0lfTUFYPTgKQEAgLTU5Miw2ICs2MzUsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY3MywxMCArNzE3LDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCkBAIC02ODQsNyArNzI0LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC03NDksNiArNzg4LDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNzgyLDE1ICs4MjIsMTggQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKQEAgLTc5OSw2ICs4NDIsOCBAQAogIwogIyBNaXNjIGRldmljZXMKICMKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAKICMKICMgTEVEIGRldmljZXMKQEAgLTgxNyw3ICs4NjIsNiBAQAogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtODI5LDYgKzg3Myw3IEBACiAjCiAjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTgzNiw2ICs4ODEsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTg3NSw2ICs5MjUsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC04ODIsNiArOTMzLDcgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkxMCw4ICs5NjIsMTAgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CkBAIC05NjEsNyArMTAxNSw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC05OTQsNiArMTA0NywxMSBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMDAyLDggKzEwNjAsMTEgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQpAQCAtMTAxOSwxMCArMTA4MCw5IEBACiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQpAQCAtMTA0MiwxMiArMTEwMiw5IEBACiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CkBAIC0xMDU1LDMgKzExMTIsNCBAQAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peHAyM3h4X2RlZmNvbmZpZwppbmRleCAwNmRlZWZhLi4yN2NmMDIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4cDIzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwMjN4eF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgU3VuIEp1bCAgOSAxNDoxMzozNSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmMxCisjIFNhdCBEZWMgMTYgMDY6MDU6NDUgMjAwNgogIwogQ09ORklHX0FSTT15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMApAQCAtMjgsMTcgKzMyLDIyIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1VJRDE2PXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC00NywxMiArNTYsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC03MCw3ICs3OSwxMCBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTAyLDcgKzExNCw5IEBACiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lYUDIzWFg9eQpAQCAtMTM3LDYgKzE1MSw4IEBACiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQogQ09ORklHX0lPXzM2PXkKIAogIwpAQCAtMTQ0LDExICsxNjAsMTUgQEAKICMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0JJR19FTkRJQU49eQorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTU1YVCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIHN1cHBvcnQKICMKIENPTkZJR19QQ0k9eQorIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTIyMiw2ICsyNDIsNyBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0yNDIsMTMgKzI2MywyOSBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCkBAIC0yNzUsNyArMzEyLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zMzQsNiArMzcwLDcgQEAKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQxOCwxMiArNDU1LDEzIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldApAQCAtNDMyLDYgKzQ3MCw3IEBACiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwpAQCAtNDU1LDcgKzQ5NCw2IEBACiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKICMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVETUFfUENJX0FVVE8gaXMgbm90IHNldApAQCAtNDY5LDYgKzUwNyw3IEBACiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKQEAgLTQ3Nyw2ICs1MTYsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TSUlNQUdFPXkKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CkBAIC00OTEsNiArNTMxLDggQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC01MDksMTQgKzU1MSwxNiBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CiAKICMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIyBTQ1NJIFRyYW5zcG9ydHMKICMKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTUyOSwyNiArNTczLDM0IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC02NDksNiArNzAxLDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKQEAgLTY1Nyw2ICs3MTAsNyBAQAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNjcyLDcgKzcyNiw2IEBACiAjIFdhbiBpbnRlcmZhY2VzCiAjCiBDT05GSUdfV0FOPXkKLSMgQ09ORklHX0RTQ0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBTk1FRElBIGlzIG5vdCBzZXQKIENPTkZJR19IRExDPXkKIENPTkZJR19IRExDX1JBVz15CkBAIC02ODgsNiArNzQxLDcgQEAKICMgQ09ORklHX1dBTlhMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBUlNZTkMgaXMgbm90IHNldAorIyBDT05GSUdfRFNDQzQgaXMgbm90IHNldAogQ09ORklHX0RMQ0k9eQogQ09ORklHX0RMQ0lfQ09VTlQ9MjQKIENPTkZJR19ETENJX01BWD04CkBAIC03MTAsNiArNzY0LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03OTUsMTAgKzg1MCw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIApAQCAtODA2LDcgKzg1Nyw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtODcwLDYgKzkyMCw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTkwMywxNSArOTU0LDE4IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CkBAIC05MjAsNiArOTc0LDggQEAKICMKICMgTWlzYyBkZXZpY2VzCiAjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogCiAjCiAjIExFRCBkZXZpY2VzCkBAIC05MzgsNyArOTk0LDYgQEAKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTk1MSw2ICsxMDA2LDcgQEAKICMKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtOTU4LDYgKzEwMTQsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTk3Miw2ICsxMDMzLDcgQEAKICMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMTIsNiArMTA3NCw3IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNTAsNiArMTExMyw3IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogCkBAIC0xMDY3LDE5ICsxMTMxLDIxIEBACiAjCiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CkBAIC0xMTEzLDYgKzExNzksNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC0xMTIwLDYgKzExODcsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTE1MCw4ICsxMjE4LDEwIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtMTIwMSw3ICsxMjcxLDYgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEyNzMsNiArMTM0MiwxMSBAQAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTEyODEsOCArMTM1NSwxMSBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CkBAIC0xMjk4LDEwICsxMzc1LDkgQEAKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CkBAIC0xMzIxLDEyICsxMzk3LDkgQEAKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAKICMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKQEAgLTEzMzQsMyArMTQwNyw0IEBACiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkMjcwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkMjcwX2RlZmNvbmZpZwppbmRleCBlMTQ2MTg5Li5hM2JmNTgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDI3MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9scGQyNzBfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE4IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFN1biBKdWwgIDkgMTQ6MTU6MjMgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjMQorIyBTYXQgRGVjIDE2IDA2OjA1OjUxIDIwMDYKICMKIENPTkZJR19BUk09eQorIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfQVJDSF9NVERfWElQPXkKQEAgLTI5LDE2ICszMywyMSBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC00NywxMiArNTYsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC02OSw3ICs3OCwxMCBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTAxLDcgKzExMyw5IEBACiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CkBAIC0xMjUsNyArMTM5LDYgQEAKICMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAogQ09ORklHX1BYQTI3eD15Ci1DT05GSUdfSVdNTVhUPXkKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpAQCAtMTM2LDExICsxNDksMTUgQEAKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CiAKICMKICMgUHJvY2Vzc29yIEZlYXR1cmVzCiAjCiAjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19JV01NWFQ9eQogQ09ORklHX1hTQ0FMRV9QTVU9eQogCiAjCkBAIC0yMTcsNiArMjM0LDcgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMjM3LDEzICsyNTUsMjkgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1NJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIApAQCAtMjcwLDcgKzMwNCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtMzI5LDYgKzM2Miw3IEBACiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00MTAsNyArNDQ0LDcgQEAKICMKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldApAQCAtNDQ3LDYgKzQ4MSwxMiBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC01MjYsNiArNTY2LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01NDgsNiArNTg5LDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CkBAIC02MDAsMTcgKzY0MiwxMiBAQAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTYyNiw2ICs2NjMsNyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC02MzQsMTEgKzY3MiwxNCBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCiAjCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogCiAjCiAjIExFRCBkZXZpY2VzCkBAIC02NTcsNyArNjk4LDYgQEAKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTY3OSw2ICs3MTksNyBAQAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX1BYQT15CiAjIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTcyNSw3ICs3NjYsNiBAQAogIyBHZW5lcmljIGRldmljZXMKICMKIENPTkZJR19TTkRfQUM5N19DT0RFQz15Ci1DT05GSUdfU05EX0FDOTdfQlVTPXkKICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldApAQCAtNzQxLDYgKzc4MSwxMiBAQAogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPXkKKworIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CiAKICMKICMgVVNCIHN1cHBvcnQKQEAgLTc3NywxMCArODIzLDEyIEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgxMSw2ICs4NTksNyBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKQEAgLTg2MCw3ICs5MDksNiBAQAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldApAQCAtOTE3LDYgKzk2NSwxMSBAQAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKQEAgLTkyNSw4ICs5NzgsMTEgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQpAQCAtOTQyLDEwICs5OTgsOSBAQAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CkBAIC05NjUsMTIgKzEwMjAsOSBAQAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQpAQCAtOTc4LDMgKzEwMzAsNCBAQAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29uZWFybV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29uZWFybV9kZWZjb25maWcKaW5kZXggMDQ5OGViZC4uNjUwYTI0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbmVhcm1fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb25lYXJtX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBTdW4gSnVsICA5IDE0OjE2OjIwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzEKKyMgU2F0IERlYyAxNiAwNjowNToxOCAyMDA2CiAjCiBDT05GSUdfQVJNPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCkBAIC0yOCwxNiArMzIsMjEgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtNDYsMTIgKzU1LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtNjksNyArNzgsMTAgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEwMSw3ICsxMTMsOSBAQAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldApAQCAtMTE4LDEwICsxMzIsNiBAQAogIwogIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCiAjCi0KLSMKLSMgQXRtZWwgQVQ5MSBQcm9jZXNzb3JzCi0jCiBDT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKICMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CkBAIC0xNDAsNiArMTUwLDEwIEBACiAjIENPTkZJR19NQUNIX0tBRkEgaXMgbm90IHNldAogCiAjCisjIEFUOTEgQm9hcmQgT3B0aW9ucworIworCisjCiAjIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCiAjCiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTPXkKQEAgLTE0OSwxMiArMTYzLDE0IEBACiAjCiBDT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15Ci1DT05GSUdfQ1BVXzMydjQ9eQorQ09ORklHX0NQVV8zMnY0VD15CiBDT05GSUdfQ1BVX0FCUlRfRVY0VD15CiBDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9WNFdCPXkKIENPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKIAogIwogIyBQcm9jZXNzb3IgRmVhdHVyZXMKQEAgLTI1MSw2ICsyNjcsNyBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0yNzEsMTMgKzI4OCwyOSBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCkBAIC0zMDQsNyArMzM3LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zNjAsNiArMzkyLDcgQEAKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQzOCwxMSArNDcxLDEyIEBACiAjCiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD15CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKQEAgLTQ1Nyw2ICs0OTEsMTIgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNTQxLDYgKzU4MSw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNjE5LDEwICs2NjAsNiBAQAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotCi0jCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldApAQCAtNjM0LDcgKzY3MSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNjUyLDYgKzY4OCw3IEBACiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIworIyBDT05GSUdfSTJDX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CkBAIC02ODEsNiArNzE4LDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNzE0LDEyICs3NTIsMTUgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CkBAIC03MjgsNiArNzY5LDcgQEAKICMKICMgTWlzYyBkZXZpY2VzCiAjCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogCiAjCiAjIExFRCBkZXZpY2VzCkBAIC03NDYsNyArNzg4LDYgQEAKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTc1OSw2ICs4MDAsNyBAQAogIwogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC03NjYsNiArODA4LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC03ODAsNiArODI3LDcgQEAKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCkBAIC04MDQsNyArODUyLDYgQEAKICMKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwotIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtODQyLDYgKzg4OSw3IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogCkBAIC04NTksMTggKzkwNywyMCBAQAogIwogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtODk3LDYgKzk0Nyw3IEBACiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKIAogIwogIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CkBAIC05MDQsNyArOTU1LDggQEAKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19BVDkxUk05MjAwPXkKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKIAogIwogIyBSZWFsIFRpbWUgQ2xvY2sKQEAgLTkxOSwxMCArOTcxLDEyIEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC05NTEsOCArMTAwNSwxMCBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk5NSw3ICsxMDUxLDYgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMTMsNiArMTA2OCwxMSBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgUHJvZmlsaW5nIHN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CkBAIC0xMDIxLDggKzEwODEsMTEgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CkBAIC0xMDM4LDEwICsxMTAxLDkgQEAKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CkBAIC0xMDYxLDE1ICsxMTIzLDEzIEBACiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAogCiAjCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0lPTUFQX0NPUFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FwbS5jIGIvYXJjaC9hcm0va2VybmVsL2FwbS5jCmluZGV4IGExMWZiOWEuLjJjMzdiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hcG0uYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXBtLmMKQEAgLTQyMyw3ICs0MjMsNyBAQAogewogCXN0cnVjdCBhcG1fdXNlciAqYXM7CiAKLQlhcyA9IChzdHJ1Y3QgYXBtX3VzZXIgKilremFsbG9jKHNpemVvZigqYXMpLCBHRlBfS0VSTkVMKTsKKwlhcyA9IGt6YWxsb2Moc2l6ZW9mKCphcyksIEdGUF9LRVJORUwpOwogCWlmIChhcykgewogCQkvKgogCQkgKiBYWFggLSB0aGlzIGlzIGEgdGlueSBiaXQgYnJva2VuLCB3aGVuIHdlIGNvbnNpZGVyIEJTRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMgYi9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUwppbmRleCAzMTczOTI0Li5mNzU5OGNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiB3YXMgc3lzX3Byb2ZpbCAqLwogCQlDQUxMKHN5c19zdGF0ZnMpCiAvKiAxMDAgKi8JQ0FMTChzeXNfZnN0YXRmcykKLQkJQ0FMTChzeXNfbmlfc3lzY2FsbCkKKwkJQ0FMTChzeXNfbmlfc3lzY2FsbCkJCS8qIHN5c19pb3Blcm0gKi8KIAkJQ0FMTChPQlNPTEVURShBQkkoc3lzX3NvY2tldGNhbGwsIHN5c19vYWJpX3NvY2tldGNhbGwpKSkKIAkJQ0FMTChzeXNfc3lzbG9nKQogCQlDQUxMKHN5c19zZXRpdGltZXIpCkBAIC0xMzIsNyArMTMyLDcgQEAKIC8qIDEyMCAqLwlDQUxMKHN5c19jbG9uZV93cmFwcGVyKQogCQlDQUxMKHN5c19zZXRkb21haW5uYW1lKQogCQlDQUxMKHN5c19uZXd1bmFtZSkKLQkJQ0FMTChzeXNfbmlfc3lzY2FsbCkKKwkJQ0FMTChzeXNfbmlfc3lzY2FsbCkJCS8qIG1vZGlmeV9sZHQgKi8KIAkJQ0FMTChzeXNfYWRqdGltZXgpCiAvKiAxMjUgKi8JQ0FMTChzeXNfbXByb3RlY3QpCiAJCUNBTEwoc3lzX3NpZ3Byb2NtYXNrKQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCUNBTEwoc3lzX2JkZmx1c2gpCiAvKiAxMzUgKi8JQ0FMTChzeXNfc3lzZnMpCiAJCUNBTEwoc3lzX3BlcnNvbmFsaXR5KQotCQlDQUxMKHN5c19uaV9zeXNjYWxsKQkJLyogQ0FMTChfc3lzX2Fmc19zeXNjYWxsKSAqLworCQlDQUxMKHN5c19uaV9zeXNjYWxsKQkJLyogcmVzZXJ2ZWQgZm9yIGFmc19zeXNjYWxsICovCiAJCUNBTEwoc3lzX3NldGZzdWlkMTYpCiAJCUNBTEwoc3lzX3NldGZzZ2lkMTYpCiAvKiAxNDAgKi8JQ0FMTChzeXNfbGxzZWVrKQpAQCAtMTc1LDcgKzE3NSw3IEBACiAJCUNBTEwoc3lzX2FybV9tcmVtYXApCiAJCUNBTEwoc3lzX3NldHJlc3VpZDE2KQogLyogMTY1ICovCUNBTEwoc3lzX2dldHJlc3VpZDE2KQotCQlDQUxMKHN5c19uaV9zeXNjYWxsKQorCQlDQUxMKHN5c19uaV9zeXNjYWxsKQkJLyogdm04NiAqLwogCQlDQUxMKHN5c19uaV9zeXNjYWxsKQkJLyogd2FzIHN5c19xdWVyeV9tb2R1bGUgKi8KIAkJQ0FMTChzeXNfcG9sbCkKIAkJQ0FMTChzeXNfbmZzc2VydmN0bCkKQEAgLTE5Nyw4ICsxOTcsOCBAQAogLyogMTg1ICovCUNBTEwoc3lzX2NhcHNldCkKIAkJQ0FMTChzeXNfc2lnYWx0c3RhY2tfd3JhcHBlcikKIAkJQ0FMTChzeXNfc2VuZGZpbGUpCi0JCUNBTEwoc3lzX25pX3N5c2NhbGwpCi0JCUNBTEwoc3lzX25pX3N5c2NhbGwpCisJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiBnZXRwbXNnICovCisJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiBwdXRwbXNnICovCiAvKiAxOTAgKi8JQ0FMTChzeXNfdmZvcmtfd3JhcHBlcikKIAkJQ0FMTChzeXNfZ2V0cmxpbWl0KQogCQlDQUxMKHN5c19tbWFwMikKQEAgLTMzMSw2ICszMzEsMzEgQEAKIAkJQ0FMTChzeXNfbWJpbmQpCiAvKiAzMjAgKi8JQ0FMTChzeXNfZ2V0X21lbXBvbGljeSkKIAkJQ0FMTChzeXNfc2V0X21lbXBvbGljeSkKKwkJQ0FMTChzeXNfb3BlbmF0KQorCQlDQUxMKHN5c19ta2RpcmF0KQorCQlDQUxMKHN5c19ta25vZGF0KQorLyogMzI1ICovCUNBTEwoc3lzX2ZjaG93bmF0KQorCQlDQUxMKHN5c19mdXRpbWVzYXQpCisJCUNBTEwoc3lzX2ZzdGF0YXQ2NCkKKwkJQ0FMTChzeXNfdW5saW5rYXQpCisJCUNBTEwoc3lzX3JlbmFtZWF0KQorLyogMzMwICovCUNBTEwoc3lzX2xpbmthdCkKKwkJQ0FMTChzeXNfc3ltbGlua2F0KQorCQlDQUxMKHN5c19yZWFkbGlua2F0KQorCQlDQUxMKHN5c19mY2htb2RhdCkKKwkJQ0FMTChzeXNfZmFjY2Vzc2F0KQorLyogMzM1ICovCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiBldmVudHVhbGx5IHBzZWxlY3Q2ICovCisJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiBldmVudHVhbGx5IHBwb2xsICovCisJCUNBTEwoc3lzX3Vuc2hhcmUpCisJCUNBTEwoc3lzX3NldF9yb2J1c3RfbGlzdCkKKwkJQ0FMTChzeXNfZ2V0X3JvYnVzdF9saXN0KQorLyogMzQwICovCUNBTEwoc3lzX3NwbGljZSkKKwkJQ0FMTChzeXNfYXJtX3N5bmNfZmlsZV9yYW5nZSkKKwkJQ0FMTChzeXNfdGVlKQorCQlDQUxMKHN5c192bXNwbGljZSkKKwkJQ0FMTChzeXNfbW92ZV9wYWdlcykKKy8qIDM0NSAqLwlDQUxMKHN5c19nZXRjcHUpCisJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiBldmVudHVhbGx5IGVwb2xsX3B3YWl0ICovCiAjaWZuZGVmIHN5c2NhbGxzX2NvdW50ZWQKIC5lcXUgc3lzY2FsbHNfcGFkZGluZywgKChOUl9zeXNjYWxscyArIDMpICYgfjMpIC0gTlJfc3lzY2FsbHMKICNkZWZpbmUgc3lzY2FsbHNfY291bnRlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMgYi9hcmNoL2FybS9rZXJuZWwvZWNhcmQuYwppbmRleCBhNzg2Zjc2Li43MTI1N2UzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZWNhcmQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvZWNhcmQuYwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJCX0KIAkJaWYgKGNfaWQoJmV4Y2QpID09IDB4ODApIHsgLyogbG9hZGVyICovCiAJCQlpZiAoIWVjLT5sb2FkZXIpIHsKLQkJCQllYy0+bG9hZGVyID0gKGxvYWRlcl90KWttYWxsb2MoY19sZW4oJmV4Y2QpLAorCQkJCWVjLT5sb2FkZXIgPSBrbWFsbG9jKGNfbGVuKCZleGNkKSwKIAkJCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKGVjLT5sb2FkZXIpCiAJCQkJCWVjYXJkX3JlYWRieXRlcyhlYy0+bG9hZGVyLCBlYywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IDJkYjQyYjEuLjg1MTdjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtNDM2LDcgKzQzNiw3IEBACiAJdXNyX2VudHJ5CiAKIAl0c3QJcjMsICNQU1JfVF9CSVQJCQlAIFRodW1iIG1vZGU/Ci0JYm5lCWZwdW5kZWZpbnN0cgkJCUAgaWdub3JlIEZQCisJYm5lCV9fdW5kX3Vzcl91bmtub3duCQlAIGlnbm9yZSBGUAogCXN1YglyNCwgcjIsICM0CiAKIAlACkBAIC00NDgsNyArNDQ4LDcgQEAKIAlACiAxOglsZHJ0CXIwLCBbcjRdCiAJYWRyCXI5LCByZXRfZnJvbV9leGNlcHRpb24KLQlhZHIJbHIsIGZwdW5kZWZpbnN0cgorCWFkcglsciwgX191bmRfdXNyX3Vua25vd24KIAlACiAJQCBmYWxsdGhyb3VnaCB0byBjYWxsX2ZwZQogCUAKQEAgLTQ3Niw3ICs0NzYsOSBAQAogICogRW11bGF0b3JzIG1heSB3aXNoIHRvIG1ha2UgdXNlIG9mIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzOgogICogIHIwICA9IGluc3RydWN0aW9uIG9wY29kZS4KICAqICByMiAgPSBQQys0CisgKiAgcjkgID0gbm9ybWFsICJzdWNjZXNzZnVsIiByZXR1cm4gYWRkcmVzcwogICogIHIxMCA9IHRoaXMgdGhyZWFkcyB0aHJlYWRfaW5mbyBzdHJ1Y3R1cmUuCisgKiAgbHIgID0gdW5yZWNvZ25pc2VkIGluc3RydWN0aW9uIHJldHVybiBhZGRyZXNzCiAgKi8KIGNhbGxfZnBlOgogCXRzdAlyMCwgIzB4MDgwMDAwMDAJCQlAIG9ubHkgQ0RQL0NQUlQvTERDL1NUQyBoYXZlIGJpdCAyNwpAQCAtNTQ1LDEwICs1NDcsMTIgQEAKIAogCS5kYXRhCiBFTlRSWShmcF9lbnRlcikKLQkud29yZAlmcHVuZGVmaW5zdHIKKwkud29yZAlub19mcAogCS50ZXh0CiAKLWZwdW5kZWZpbnN0cjoKK25vX2ZwOgltb3YJcGMsIGxyCisKK19fdW5kX3Vzcl91bmtub3duOgogCW1vdglyMCwgc3AKIAlhZHIJbHIsIHJldF9mcm9tX2V4Y2VwdGlvbgogCWIJZG9fdW5kZWZpbnN0cgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQuUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKaW5kZXggYmRhMDc0OC4uY2Y0OTVhMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwpAQCAtMjIsMzAgKzIyLDM1IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jZGVmaW5lIEtFUk5FTF9SQU1fQUREUgkoUEFHRV9PRkZTRVQgKyBURVhUX09GRlNFVCkKKyNpZiAoUEhZU19PRkZTRVQgJiAweDAwMWZmZmZmKQorI2Vycm9yICJQSFlTX09GRlNFVCBtdXN0IGJlIGF0IGFuIGV2ZW4gMk1pQiBib3VuZGFyeSEiCisjZW5kaWYKKworI2RlZmluZSBLRVJORUxfUkFNX1ZBRERSCShQQUdFX09GRlNFVCArIFRFWFRfT0ZGU0VUKQorI2RlZmluZSBLRVJORUxfUkFNX1BBRERSCShQSFlTX09GRlNFVCArIFRFWFRfT0ZGU0VUKQogCiAvKgogICogc3dhcHBlcl9wZ19kaXIgaXMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgaW5pdGlhbCBwYWdlIHRhYmxlLgotICogV2UgcGxhY2UgdGhlIHBhZ2UgdGFibGVzIDE2SyBiZWxvdyBLRVJORUxfUkFNX0FERFIuICBUaGVyZWZvcmUsIHdlIG11c3QKLSAqIG1ha2Ugc3VyZSB0aGF0IEtFUk5FTF9SQU1fQUREUiBpcyBjb3JyZWN0bHkgc2V0LiAgQ3VycmVudGx5LCB3ZSBleHBlY3QKKyAqIFdlIHBsYWNlIHRoZSBwYWdlIHRhYmxlcyAxNksgYmVsb3cgS0VSTkVMX1JBTV9WQUREUi4gIFRoZXJlZm9yZSwgd2UgbXVzdAorICogbWFrZSBzdXJlIHRoYXQgS0VSTkVMX1JBTV9WQUREUiBpcyBjb3JyZWN0bHkgc2V0LiAgQ3VycmVudGx5LCB3ZSBleHBlY3QKICAqIHRoZSBsZWFzdCBzaWduaWZpY2FudCAxNiBiaXRzIHRvIGJlIDB4ODAwMCwgYnV0IHdlIGNvdWxkIHByb2JhYmx5Ci0gKiByZWxheCB0aGlzIHJlc3RyaWN0aW9uIHRvIEtFUk5FTF9SQU1fQUREUiA+PSBQQUdFX09GRlNFVCArIDB4NDAwMC4KKyAqIHJlbGF4IHRoaXMgcmVzdHJpY3Rpb24gdG8gS0VSTkVMX1JBTV9WQUREUiA+PSBQQUdFX09GRlNFVCArIDB4NDAwMC4KICAqLwotI2lmIChLRVJORUxfUkFNX0FERFIgJiAweGZmZmYpICE9IDB4ODAwMAotI2Vycm9yIEtFUk5FTF9SQU1fQUREUiBtdXN0IHN0YXJ0IGF0IDB4WFhYWDgwMDAKKyNpZiAoS0VSTkVMX1JBTV9WQUREUiAmIDB4ZmZmZikgIT0gMHg4MDAwCisjZXJyb3IgS0VSTkVMX1JBTV9WQUREUiBtdXN0IHN0YXJ0IGF0IDB4WFhYWDgwMDAKICNlbmRpZgogCiAJLmdsb2JsCXN3YXBwZXJfcGdfZGlyCi0JLmVxdQlzd2FwcGVyX3BnX2RpciwgS0VSTkVMX1JBTV9BRERSIC0gMHg0MDAwCisJLmVxdQlzd2FwcGVyX3BnX2RpciwgS0VSTkVMX1JBTV9WQUREUiAtIDB4NDAwMAogCiAJLm1hY3JvCXBndGJsLCByZAotCWxkcglccmQsID0oX192aXJ0X3RvX3BoeXMoS0VSTkVMX1JBTV9BRERSIC0gMHg0MDAwKSkKKwlsZHIJXHJkLCA9KEtFUk5FTF9SQU1fUEFERFIgLSAweDQwMDApCiAJLmVuZG0KIAogI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCiAjZGVmaW5lIFRFWFRBRERSICBYSVBfVklSVF9BRERSKENPTkZJR19YSVBfUEhZU19BRERSKQogI2Vsc2UKLSNkZWZpbmUgVEVYVEFERFIgIEtFUk5FTF9SQU1fQUREUgorI2RlZmluZSBURVhUQUREUiAgS0VSTkVMX1JBTV9WQUREUgogI2VuZGlmCiAKIC8qCkBAIC0yNTAsNyArMjU1LDggQEAKIAkgKiBUaGVuIG1hcCBmaXJzdCAxTUIgb2YgcmFtIGluIGNhc2UgaXQgY29udGFpbnMgb3VyIGJvb3QgcGFyYW1zLgogCSAqLwogCWFkZAlyMCwgcjQsICNQQUdFX09GRlNFVCA+PiAxOAotCW9ycglyNiwgcjcsICNQSFlTX09GRlNFVAorCW9ycglyNiwgcjcsICMoUEhZU19PRkZTRVQgJiAweGZmMDAwMDAwKQorCW9ycglyNiwgcjYsICMoUEhZU19PRkZTRVQgJiAweDAwZTAwMDAwKQogCXN0cglyNiwgW3IwXQogCiAjaWZkZWYgQ09ORklHX1hJUF9LRVJORUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggMjM4ZGQ5Yi4uYmJhYjEzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTM1NCw5ICszNTQsNiBAQAogI2lmbmRlZiBDT05GSUdfQVJNX1RIVU1CCiAJZWxmX2h3Y2FwICY9IH5IV0NBUF9USFVNQjsKICNlbmRpZgotI2lmbmRlZiBDT05GSUdfVkZQCi0JZWxmX2h3Y2FwICY9IH5IV0NBUF9WRlA7Ci0jZW5kaWYKIAogCWNwdV9wcm9jX2luaXQoKTsKIH0KQEAgLTg1OCw2ICs4NTUsNyBAQAogCSJlZHNwIiwKIAkiamF2YSIsCiAJIml3bW14dCIsCisJImNydW5jaCIsCiAJTlVMTAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3N5c19hcm0uYyBiL2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMKaW5kZXggMDBjMThkMy4uM2Q0ZmNiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N5c19hcm0uYworKysgYi9hcmNoL2FybS9rZXJuZWwvc3lzX2FybS5jCkBAIC0zMjgsMyArMzI4LDE2IEBACiB7CiAJcmV0dXJuIHN5c19mYWR2aXNlNjRfNjQoZmQsIG9mZnNldCwgbGVuLCBhZHZpY2UpOwogfQorCisvKgorICogWWV0IG1vcmUgc3lzY2FsbCBmc2NrYWdlIC0gd2UgY2FuJ3QgZml0IHN5c19zeW5jX2ZpbGVfcmFuZ2UncworICogYXJndW1lbnRzIGludG8gdGhlIGF2YWlsYWJsZSByZWdpc3RlcnMgd2l0aCBFQUJJLiAgU28sIGxldCdzCisgKiBjcmVhdGUgYW4gQVJNIHNwZWNpZmljIHN5c2NhbGwgZm9yIHRoaXMgd2hpY2ggaGFzIF9zYW5lXworICogYXJndW1lbnRzLiAgKFRoaXMgaW5jaWRlbnRhbGx5IGFsc28gaGFzIGFuIEFCSS1pbmRlcGVuZGVudAorICogYXJndW1lbnQgbGF5b3V0LikKKyAqLworYXNtbGlua2FnZSBsb25nIHN5c19hcm1fc3luY19maWxlX3JhbmdlKGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJCQlsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbmJ5dGVzKQoreworCXJldHVybiBzeXNfc3luY19maWxlX3JhbmdlKGZkLCBvZmZzZXQsIG5ieXRlcywgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggNmZmNWUzZi4uM2M4Y2RjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisKICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KQEAgLTg1LDYgKzg3LDE3IEBACiAJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpamlmZmllcyAqICgxMDAwMDAwMDAwIC8gSFopOwogfQogCisvKgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgcHJpbnRrX2Nsb2NrKCkgaW5kZXBlbmRlbnQgZnJvbQorICogc2NoZWRfY2xvY2soKS4gIFRoaXMgYXZvaWRzIG5vbi1ib290YWJsZSBrZXJuZWxzIHdoZW4KKyAqIHByaW50a19jbG9jayBpcyBlbmFibGVkLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgcHJpbnRrX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpKGppZmZpZXMgLSBJTklUSUFMX0pJRkZJRVMpICoKKwkJCSgxMDAwMDAwMDAwIC8gSFopOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuZXh0X3J0Y191cGRhdGU7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCmluZGV4IDA0MmExMjkuLjkwODkxNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJwdHJhY2UuaCIKICNpbmNsdWRlICJzaWduYWwuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX2RldmljZXMuYwppbmRleCA0NjQxYjk5Li41N2ZhYzcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfZGV2aWNlcy5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEyLCAwKTsJLyogTkNTNi9DRkNFMiAqLwogCiAJLyogbldBSVQgaXMgX25vdF8gYSBkZWZhdWx0IHNldHRpbmcgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzYsIDEpOwkvKiAgbldBSVQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzYsIDEpOwkvKiBuV0FJVCAqLwogCiAJY2ZfZGF0YSA9ICpkYXRhOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXJtOTIwMF9jZl9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjAuYwppbmRleCAyMDNmMDczLi5iMTQ4NzFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjAuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9wbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3JzdGMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJjbG9jay5oIgpAQCAtMjEyLDcgKzIxMyw3IEBACiAKIHN0YXRpYyB2b2lkIGF0OTFzYW05MjYwX3Jlc2V0KHZvaWQpCiB7Ci0jd2FybmluZyAiSW1wbGVtZW50IENQVSByZXNldCIKKwlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsICgweEE1IDw8IDI0KSB8IEFUOTFfUlNUQ19QUk9DUlNUIHwgQVQ5MV9SU1RDX1BFUlJTVCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKaW5kZXggYTZjNTk2ZC4uZjQyZDNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjBfZGV2aWNlcy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYwLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTkyNnhfbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2MF9tYXRyaXguaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjEuYwppbmRleCA1YTgyZjM1Li5kMjQyYmI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjEuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFzYW05MjYxLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9wbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3JzdGMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJjbG9jay5oIgpAQCAtMjA3LDcgKzIwOCw3IEBACiAKIHN0YXRpYyB2b2lkIGF0OTFzYW05MjYxX3Jlc2V0KHZvaWQpCiB7Ci0jd2FybmluZyAiSW1wbGVtZW50IENQVSByZXNldCIKKwlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsICgweEE1IDw8IDI0KSB8IEFUOTFfUlNUQ19QUk9DUlNUIHwgQVQ5MV9SU1RDX1BFUlJTVCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLXNhbTkyNjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLXNhbTkyNjBlay5jCmluZGV4IGZmY2E5YmQuLmRhNWQ1OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1zYW05MjYwZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtc2FtOTI2MGVrLmMKQEAgLTExOSw2ICsxMTksNyBAQAogICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKICAqLwogc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIGV0aF9wbGF0Zm9ybV9kYXRhIGVrX21hY2JfZGF0YSA9IHsKKwkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQTcsCiAJLmlzX3JtaWkJPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMKaW5kZXggM2YxODg1MC4uYWYyMjY1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9waW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKQEAgLTIyNCwxNyArMjIzLDE3IEBACiBzdGF0aWMgaW50IGdwaW9faXJxX3NldF93YWtlKHVuc2lnbmVkIHBpbiwgdW5zaWduZWQgc3RhdGUpCiB7CiAJdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7CisJdW5zaWduZWQJYmFuayA9IChwaW4gLSBQSU5fQkFTRSkgLyAzMjsKIAotCXBpbiAtPSBQSU5fQkFTRTsKLQlwaW4gLz0gMzI7Ci0KLQlpZiAodW5saWtlbHkocGluID49IE1BWF9HUElPX0JBTktTKSkKKwlpZiAodW5saWtlbHkoYmFuayA+PSBNQVhfR1BJT19CQU5LUykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHN0YXRlKQotCQl3YWtldXBzW3Bpbl0gfD0gbWFzazsKKwkJd2FrZXVwc1tiYW5rXSB8PSBtYXNrOwogCWVsc2UKLQkJd2FrZXVwc1twaW5dICY9IH5tYXNrOworCQl3YWtldXBzW2JhbmtdICY9IH5tYXNrOworCisJc2V0X2lycV93YWtlKGdwaW9bYmFua10uaWQsIHN0YXRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjQ2LDI5ICsyNDUsMTUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7CiAJCXUzMiBwaW8gPSBncGlvW2ldLm9mZnNldDsKIAotCQkvKgotCQkgKiBOb3RlOiBkcml2ZXJzIHNob3VsZCBoYXZlIGRpc2FibGVkIEdQSU8gaW50ZXJydXB0cyB0aGF0Ci0JCSAqIGFyZW4ndCBzdXBwb3NlZCB0byBiZSB3YWtldXAgc291cmNlcy4KLQkJICogQnV0IHRoYXQgaXMgbm90IG11Y2ggZ29vZCBvbiBBUk0uLi4uLiAgZGlzYWJsZV9pcnEoKSBkb2VzCi0JCSAqIG5vdCB1cGRhdGUgdGhlIGhhcmR3YXJlIGltbWVkaWF0ZWx5LCBzbyB0aGUgaGFyZHdhcmUgbWFzawotCQkgKiAoSU1SKSBoYXMgdGhlIHdyb25nIHZhbHVlIChub3QgY3VycmVudCwgdG9vIG11Y2ggaXMKLQkJICogcGVybWl0dGVkKS4KLQkJICoKLQkJICogT3VyIHdvcmthcm91bmQgaXMgdG8gZGlzYWJsZSBhbGwgbm9uLXdha2V1cCBJUlFzIC4uLgotCQkgKiB3aGljaCBpcyBleGFjdGx5IHdoYXQgY29ycmVjdCBkcml2ZXJzIGFza2VkIGZvciBpbiB0aGUKLQkJICogZmlyc3QgcGxhY2UhCi0JCSAqLwogCQliYWNrdXBzW2ldID0gYXQ5MV9zeXNfcmVhZChwaW8gKyBQSU9fSU1SKTsKIAkJYXQ5MV9zeXNfd3JpdGUocGlvICsgUElPX0lEUiwgYmFja3Vwc1tpXSk7CiAJCWF0OTFfc3lzX3dyaXRlKHBpbyArIFBJT19JRVIsIHdha2V1cHNbaV0pOwogCi0JCWlmICghd2FrZXVwc1tpXSkgewotCQkJZGlzYWJsZV9pcnFfd2FrZShncGlvW2ldLmlkKTsKLQkJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1BDRFIsIDEgPDwgZ3Bpb1tpXS5pZCk7Ci0JCX0gZWxzZSB7Ci0JCQllbmFibGVfaXJxX3dha2UoZ3Bpb1tpXS5pZCk7CisJCWlmICghd2FrZXVwc1tpXSkKKwkJCWNsa19kaXNhYmxlKGdwaW9baV0uY2xvY2spOworCQllbHNlIHsKICNpZmRlZiBDT05GSUdfUE1fREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICJHUElPLSVjIG1heSB3YWtlIGZvciAlMDh4XG4iLCAiQUJDRCJbaV0sIHdha2V1cHNbaV0pOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIkdQSU8tJWMgbWF5IHdha2UgZm9yICUwOHhcbiIsICdBJytpLCB3YWtldXBzW2ldKTsKICNlbmRpZgogCQl9CiAJfQpAQCAtMjgxLDkgKzI2NiwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspIHsKIAkJdTMyIHBpbyA9IGdwaW9baV0ub2Zmc2V0OwogCisJCWlmICghd2FrZXVwc1tpXSkKKwkJCWNsa19lbmFibGUoZ3Bpb1tpXS5jbG9jayk7CisKIAkJYXQ5MV9zeXNfd3JpdGUocGlvICsgUElPX0lEUiwgd2FrZXVwc1tpXSk7CiAJCWF0OTFfc3lzX3dyaXRlKHBpbyArIFBJT19JRVIsIGJhY2t1cHNbaV0pOwotCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0VSLCAxIDw8IGdwaW9baV0uaWQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IGQ2NDliMzkuLjZiMjYzNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTQ3Nyw0ICs0NzcsOCBAQAogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfcnRjX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfb2hjaV9kZXZpY2UpOworCisjaWZkZWYgQ09ORklHX0NSVU5DSAorCWVsZl9od2NhcCB8PSBIV0NBUF9DUlVOQ0g7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1pbXgvTWFrZWZpbGUKaW5kZXggMGIyN2Q3OWYuLjAyMjcyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L01ha2VmaWxlCkBAIC05LDYgKzksOCBAQAogCiBvYmoteQkJCSs9IGlycS5vIHRpbWUubyBkbWEubyBnZW5lcmljLm8KIAorb2JqLSQoQ09ORklHX0NQVV9GUkVRX0lNWCkJKz0gY3B1ZnJlcS5vCisKICMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydAogb2JqLSQoQ09ORklHX0FSQ0hfTVgxQURTKSArPSBteDFhZHMubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jcHVmcmVxLmMgYi9hcmNoL2FybS9tYWNoLWlteC9jcHVmcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2NmU5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2NwdWZyZXEuYwpAQCAtMCwwICsxLDI5OSBAQAorLyoKKyAqIGNwdS5jOiBjbG9jayBzY2FsaW5nIGZvciB0aGUgaU1YCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIDIwMDEsIFRoZSBEZWxmdCBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTYXNjaGEgSGF1ZXIgPHNhc2NoYUBzYXNjaGFoYXVlci5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBJbmt5IEx1bmcgPGlsdW5nQGN3bGludXguY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFBhdmVsIFBpc2EsIFBpS1JPTiA8cHBpc2FAcGlrcm9uLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBTQTExMDAgdmVyc2lvbiB3cml0dGVuIGJ5OgorICogLSBKb2hhbiBQb3V3ZWxzZSAoSi5BLlBvdXdlbHNlQGl0cy50dWRlbGZ0Lm5sKTogaW5pdGlhbCB2ZXJzaW9uCisgKiAtIEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCk6CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisvKiNkZWZpbmUgREVCVUcqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisjaWZuZGVmIF9fdmFsMm1mbGQKKyNkZWZpbmUgX192YWwybWZsZChtYXNrLHZhbCkgKCgobWFzaykmfigobWFzayk8PDEpKSoodmFsKSYobWFzaykpCisjZW5kaWYKKyNpZm5kZWYgX19tZmxkMnZhbAorI2RlZmluZSBfX21mbGQydmFsKG1hc2ssdmFsKSAoKCh2YWwpJihtYXNrKSkvKChtYXNrKSZ+KChtYXNrKTw8MSkpKQorI2VuZGlmCisKKyNkZWZpbmUgQ1JfOTIwVF9DTE9DS19NT0RFCTB4QzAwMDAwMDAKKyNkZWZpbmUgQ1JfOTIwVF9GQVNUQlVTX01PREUJMHgwMDAwMDAwMAorI2RlZmluZSBDUl85MjBUX0FTWU5DX01PREUJMHhDMDAwMDAwMAorCitzdGF0aWMgdTMyIG1wY3RsMF9hdF9ib290OworCitzdGF0aWMgdm9pZCBpbXhfc2V0X2FzeW5jX21vZGUodm9pZCkKK3sKKwlhZGp1c3RfY3IoQ1JfOTIwVF9DTE9DS19NT0RFLCBDUl85MjBUX0FTWU5DX01PREUpOworfQorCitzdGF0aWMgdm9pZCBpbXhfc2V0X2Zhc3RidXNfbW9kZSh2b2lkKQoreworCWFkanVzdF9jcihDUl85MjBUX0NMT0NLX01PREUsIENSXzkyMFRfRkFTVEJVU19NT0RFKTsKK30KKworc3RhdGljIHZvaWQgaW14X3NldF9tcGN0bDAodTMyIG1wY3RsMCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG1wY3RsMCA9PSAwKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJQ1NDUiAmPSB+Q1NDUl9NUEVOOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJTVBDVEwwID0gbXBjdGwwOworCUNTQ1IgfD0gQ1NDUl9NUEVOOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoqCisgKiBpbXhfY29tcHV0ZV9tcGN0bCAtIGNvbXB1dGUgbmV3IFBMTCBwYXJhbWV0ZXJzCisgKiBAbmV3X21wY3RsOglwb2ludGVyIHRvIGxvY2F0aW9uIGFzc2lnbmVkIGJ5IG5ldyBQTEwgY29udHJvbCByZWdpc3RlciB2YWx1ZQorICogQGN1cl9tcGN0bDoJY3VycmVudCBQTEwgY29udHJvbCByZWdpc3RlciBwYXJhbWV0ZXJzCisgKiBAZnJlcToJcmVxdWlyZWQgZnJlcXVlbmN5IGluIEh6CisgKiBAcmVsYXRpb246CWlzIG9uZSBvZiAlQ1BVRlJFUV9SRUxBVElPTl9MIChzdXByZW11bSkKKyAqCQlhbmQgJUNQVUZSRVFfUkVMQVRJT05fSCAoaW5maW11bSkKKyAqLworbG9uZyBpbXhfY29tcHV0ZV9tcGN0bCh1MzIgKm5ld19tcGN0bCwgdTMyIGN1cl9tcGN0bCwgdW5zaWduZWQgbG9uZyBmcmVxLCBpbnQgcmVsYXRpb24pCit7CisgICAgICAgIHUzMiBmX3JlZiA9IChDU0NSICYgQ1NDUl9TWVNURU1fU0VMKSA/IDE2MDAwMDAwIDogKENMSzMyICogNTEyKTsKKyAgICAgICAgdTMyIG1maTsKKyAgICAgICAgdTMyIG1mbjsKKyAgICAgICAgdTMyIG1mZDsKKyAgICAgICAgdTMyIHBkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBsbDsKKwlsb25nIGw7CisJbG9uZyBxdW90OworCisJLyogRmRwcGw9MipGcmVmKihNRkkrTUZOLyhNRkQrMSkpLyhQRCsxKSAqLworCS8qICBQRD08MCwxNT4sIE1GRD08MSwxMDIzPiwgTUZJPTw1LDE1PiBNRk49PDAsMTAyMj4gKi8KKworCWlmIChjdXJfbXBjdGwpIHsKKwkJbWZkID0gKChjdXJfbXBjdGwgPj4gMTYpICYgMHgzZmYpICsgMTsKKwkJcGQgPSAgKChjdXJfbXBjdGwgPj4gMjYpICYgMHhmKSArIDE7CisJfSBlbHNlIHsKKwkJcGQ9MjsgbWZkPTMxMzsKKwl9CisKKwkvKiBwZD0yOyBtZmQ9MzEzOyBtZmk9ODsgbWZuPTE4MzsgKi8KKwkvKiAoTUZJK01GTi8oTUZEKSkgPSBGZHBwbCAvICgyKkZyZWYpICogKFBEKTsgKi8KKworCXF1b3QgPSAoZl9yZWYgKyAoMSA8PCA5KSkgPj4gMTA7CisJbCA9IChmcmVxICogcGQgKyBxdW90KSAvICgyICogcXVvdCk7CisJbWZpID0gbCA+PiAxMDsKKwltZm4gPSAoKGwgJiAoKDEgPDwgMTApIC0gMSkpICogbWZkICsgKDEgPDwgOSkpID4+IDEwOworCisJbWZkIC09IDE7CisJcGQgLT0gMTsKKworCSpuZXdfbXBjdGwgPSAoKG1maSAmIDB4ZikgPDwgMTApIHwgKG1mbiAmIDB4M2ZmKSB8ICgobWZkICYgMHgzZmYpIDw8IDE2KQorCQl8ICgocGQgJiAweGYpIDw8IDI2KTsKKworCWxsID0gMiAqICh1bnNpZ25lZCBsb25nIGxvbmcpZl9yZWYgKiAoIChtZmk8PDE2KSArIChtZm48PDE2KSAvIChtZmQrMSkgKTsKKwlxdW90ID0gKHBkKzEpICogKDE8PDE2KTsKKwlsbCArPSBxdW90IC8gMjsKKwlkb19kaXYobGwsIHF1b3QpOworCWZyZXEgPSBsbDsKKworCXByX2RlYnVnKEtFUk5fREVCVUcgImlteDogbmV3IFBMTCBwYXJhbWV0ZXJzIHBkPSVkIG1mZD0lZCBtZmk9JWQgbWZuPSVkLCBmcmVxPSVsZFxuIiwKKwkJcGQsIG1mZCwgbWZpLCBtZm4sIGZyZXEpOworCisJcmV0dXJuIGZyZXE7Cit9CisKKworc3RhdGljIGludCBpbXhfdmVyaWZ5X3NwZWVkKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQoreworCWlmIChwb2xpY3ktPmNwdSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEsIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpbXhfZ2V0X3NwZWVkKHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgaW50IGZyZXE7CisJdW5zaWduZWQgaW50IGNyOworCXVuc2lnbmVkIGludCBjc2NyOworCXVuc2lnbmVkIGludCBiY2xrX2RpdjsKKworCWlmIChjcHUpCisJCXJldHVybiAwOworCisJY3NjciA9IENTQ1I7CisJYmNsa19kaXYgPSBfX21mbGQydmFsKENTQ1JfQkNMS19ESVYsIGNzY3IpICsgMTsKKwljciA9IGdldF9jcigpOworCisJaWYoKGNyICYgQ1JfOTIwVF9DTE9DS19NT0RFKSA9PSBDUl85MjBUX0ZBU1RCVVNfTU9ERSkgeworCQlmcmVxID0gaW14X2dldF9zeXN0ZW1fY2xrKCk7CisJCWZyZXEgPSAoZnJlcSArIGJjbGtfZGl2LzIpIC8gYmNsa19kaXY7CisJfSBlbHNlIHsKKwkJZnJlcSA9IGlteF9nZXRfbWN1X2NsaygpOworCQlpZiAoY3NjciAmIENTQ1JfTVBVX1BSRVNDKQorCQkJZnJlcSAvPSAyOworCX0KKworCWZyZXEgPSAoZnJlcSArIDUwMCkgLyAxMDAwOworCisJcmV0dXJuIGZyZXE7Cit9CisKK3N0YXRpYyBpbnQgaW14X3NldF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCQkgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKKwkJCSAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQoreworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOworCXUzMiBtcGN0bDAgPSAwOworCXUzMiBjc2NyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyBmcmVxOworCWxvbmcgc3lzY2xrOworCXVuc2lnbmVkIGludCBiY2xrX2RpdiA9IDE7CisKKwkvKgorCSAqIFNvbWUgZ292ZXJub3JzIGRvIG5vdCByZXNwZWN0cyBDUFUgYW5kIHBvbGljeSBsb3dlciBsaW1pdHMKKwkgKiB3aGljaCBsZWFkcyB0byBiYWQgdGhpbmdzIChkaXZpc2lvbiBieSB6ZXJvIGV0YyksIGVuc3VyZQorCSAqIHRoYXQgc3VjaCB0aGluZ3MgZG8gbm90IGhhcHBlbi4KKwkgKi8KKwlpZih0YXJnZXRfZnJlcSA8IHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSkKKwkJdGFyZ2V0X2ZyZXEgPSBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXE7CisKKwlpZih0YXJnZXRfZnJlcSA8IHBvbGljeS0+bWluKQorCQl0YXJnZXRfZnJlcSA9IHBvbGljeS0+bWluOworCisJZnJlcSA9IHRhcmdldF9mcmVxICogMTAwMDsKKworCXByX2RlYnVnKEtFUk5fREVCVUcgImlteDogcmVxdWVzdGVkIGZyZXF1ZW5jeSAlbGQgSHosIG1wY3RsMCBhdCBib290IDB4JTA4eFxuIiwKKwkJCWZyZXEsIG1wY3RsMF9hdF9ib290KTsKKworCXN5c2NsayA9IGlteF9nZXRfc3lzdGVtX2NsaygpOworCisJaWYgKGZyZXEgPiBzeXNjbGsgKyAxMDAwMDAwKSB7CisJCWZyZXEgPSBpbXhfY29tcHV0ZV9tcGN0bCgmbXBjdGwwLCBtcGN0bDBfYXRfYm9vdCwgZnJlcSwgcmVsYXRpb24pOworCQlpZiAoZnJlcSA8IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlteDogdGFyZ2V0IGZyZXF1ZW5jeSAlbGQgSHogY2Fubm90IGJlIHNldFxuIiwgZnJlcSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCWlmKGZyZXEgKyAxMDAwIDwgc3lzY2xrKSB7CisJCQlpZiAocmVsYXRpb24gPT0gQ1BVRlJFUV9SRUxBVElPTl9MKQorCQkJCWJjbGtfZGl2ID0gKHN5c2NsayAtIDEwMDApIC8gZnJlcTsKKwkJCWVsc2UKKwkJCQliY2xrX2RpdiA9IChzeXNjbGsgKyBmcmVxICsgMTAwMCkgLyBmcmVxOworCisJCQlpZihiY2xrX2RpdiA+IDE2KQorCQkJCWJjbGtfZGl2ID0gMTY7CisJCX0KKwkJZnJlcSA9IChzeXNjbGsgKyBiY2xrX2RpdiAvIDIpIC8gYmNsa19kaXY7CisJfQorCisJZnJlcXMub2xkID0gaW14X2dldF9zcGVlZCgwKTsKKwlmcmVxcy5uZXcgPSAoZnJlcSArIDUwMCkgLyAxMDAwOworCWZyZXFzLmNwdSA9IDA7CisJZnJlcXMuZmxhZ3MgPSAwOworCisJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlteF9zZXRfZmFzdGJ1c19tb2RlKCk7CisKKwlpbXhfc2V0X21wY3RsMChtcGN0bDApOworCisJY3NjciA9IENTQ1I7CisJY3NjciAmPSB+Q1NDUl9CQ0xLX0RJVjsKKwljc2NyIHw9IF9fdmFsMm1mbGQoQ1NDUl9CQ0xLX0RJViwgYmNsa19kaXYgLSAxKTsKKwlDU0NSID0gY3NjcjsKKworCWlmKG1wY3RsMCkgeworCQlDU0NSIHw9IENTQ1JfTVBMTF9SRVNUQVJUOworCisJCS8qIFdhaXQgdW50aWwgTVBMTCBpcyBzdGFibGl6ZWQgKi8KKwkJd2hpbGUoIENTQ1IgJiBDU0NSX01QTExfUkVTVEFSVCApOworCisJCWlteF9zZXRfYXN5bmNfbW9kZSgpOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOworCisJcHJfZGVidWcoS0VSTl9JTkZPICJpbXg6IHNldCBmcmVxdWVuY3kgJWxkIEh6LCBydW5uaW5nIGZyb20gJXNcbiIsCisJCQlmcmVxLCBtcGN0bDA/ICJNUExMIjogIlNQTEwiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbXhfY3B1ZnJlcV9kcml2ZXJfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJpLk1YIGNwdSBmcmVxIGNoYW5nZSBkcml2ZXIgdjEuMFxuIik7CisKKwlpZiAocG9saWN5LT5jcHUgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwb2xpY3ktPmN1ciA9IHBvbGljeS0+bWluID0gcG9saWN5LT5tYXggPSBpbXhfZ2V0X3NwZWVkKDApOworCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CisJcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gODAwMDsKKwlwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEgPSAyMDAwMDA7CisJIC8qIE1hbnVhbCBzdGF0ZXMsIHRoYXQgUExMIHN0YWJpbGl6ZXMgaW4gdHdvIENMSzMyIHBlcmlvZHMgKi8KKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gNCAqIDEwMDAwMDAwMDBMTCAvIENMSzMyOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIGlteF9kcml2ZXIgPSB7CisJLmZsYWdzCQk9IENQVUZSRVFfU1RJQ0tZLAorCS52ZXJpZnkJCT0gaW14X3ZlcmlmeV9zcGVlZCwKKwkudGFyZ2V0CQk9IGlteF9zZXRfdGFyZ2V0LAorCS5nZXQJCT0gaW14X2dldF9zcGVlZCwKKwkuaW5pdAkJPSBpbXhfY3B1ZnJlcV9kcml2ZXJfaW5pdCwKKwkubmFtZQkJPSAiaW14IiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlteF9jcHVmcmVxX2luaXQodm9pZCkKK3sKKworCW1wY3RsMF9hdF9ib290ID0gMDsKKworCWlmKChDU0NSICYgQ1NDUl9NUEVOKSAmJgorCSAgICgoZ2V0X2NyKCkgJiBDUl85MjBUX0NMT0NLX01PREUpICE9IENSXzkyMFRfRkFTVEJVU19NT0RFKSkKKwkJbXBjdGwwX2F0X2Jvb3QgPSBNUENUTDA7CisKKwlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmlteF9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKGlteF9jcHVmcmVxX2luaXQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW8uYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pby5jCmluZGV4IGZiZjlmODguLmU3OWExYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pby5jCkBAIC0yMSw2ICsyMSwyNSBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCit2b2lkICogX19pb21lbSBfX2lvcDEzeHhfaW8odW5zaWduZWQgbG9uZyBpb19hZGRyKQoreworCXZvaWQgX19pb21lbSAqIGlvX3ZpcnQ7CisKKwlzd2l0Y2ggKGlvX2FkZHIpIHsKKwljYXNlIElPUDEzWFhfUENJRV9MT1dFUl9JT19QQSAuLi4gSU9QMTNYWF9QQ0lFX1VQUEVSX0lPX1BBOgorCQlpb192aXJ0ID0gKHZvaWQgKikgSU9QMTNYWF9QQ0lFX0lPX1BIWVNfVE9fVklSVChpb19hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBJT1AxM1hYX1BDSVhfTE9XRVJfSU9fUEEgLi4uIElPUDEzWFhfUENJWF9VUFBFUl9JT19QQToKKwkJaW9fdmlydCA9ICh2b2lkICopIElPUDEzWFhfUENJWF9JT19QSFlTX1RPX1ZJUlQoaW9fYWRkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiBpb192aXJ0OworfQorRVhQT1JUX1NZTUJPTChfX2lvcDEzeHhfaW8pOworCiB2b2lkICogX19pb21lbSBfX2lvcDEzeHhfaW9yZW1hcCh1bnNpZ25lZCBsb25nIGNvb2tpZSwgc2l6ZV90IHNpemUsCiAJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwbWMuYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwbWMuYwppbmRleCBlZTU5NTc4Li4yYTFiYmZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXE4MTM0MG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lxODEzNDBtYy5jCkBAIC04OCwxMSArODgsMTEgQEAKIAogTUFDSElORV9TVEFSVChJUTgxMzQwTUMsICJJbnRlbCBJUTgxMzQwTUMiKQogCS8qIE1haW50YWluZXI6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPiAqLwotCS5waHlzX2lvICAgICAgICA9IFBIWVNfSU8sCi0JLmlvX3BnX29mZnN0ICAgID0gSU9fUEdfT0ZGU0VULAorCS5waHlzX2lvICAgICAgICA9IElPUDEzWFhfUE1NUl9QSFlTX01FTV9CQVNFLAorCS5pb19wZ19vZmZzdCAgICA9IChJT1AxM1hYX1BNTVJfVklSVF9NRU1fQkFTRSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gMHgwMDAwMDEwMCwKIAkubWFwX2lvICAgICAgICAgPSBpb3AxM3h4X21hcF9pbywKIAkuaW5pdF9pcnEgICAgICAgPSBpb3AxM3h4X2luaXRfaXJxLAogCS50aW1lciAgICAgICAgICA9ICZpcTgxMzQwbWNfdGltZXIsCi0JLmJvb3RfcGFyYW1zICAgID0gQk9PVF9QQVJBTV9PRkZTRVQsCiAJLmluaXRfbWFjaGluZSAgID0gaXE4MTM0MG1jX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lxODEzNDBzYy5jIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lxODEzNDBzYy5jCmluZGV4IDY2NzdlMTQuLjVhZDJiNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwc2MuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXE4MTM0MHNjLmMKQEAgLTkwLDExICs5MCwxMSBAQAogCiBNQUNISU5FX1NUQVJUKElRODEzNDBTQywgIkludGVsIElRODEzNDBTQyIpCiAJLyogTWFpbnRhaW5lcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+ICovCi0JLnBoeXNfaW8gICAgICAgID0gUEhZU19JTywKLQkuaW9fcGdfb2Zmc3QgICAgPSBJT19QR19PRkZTRVQsCisJLnBoeXNfaW8JPSBJT1AxM1hYX1BNTVJfUEhZU19NRU1fQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoSU9QMTNYWF9QTU1SX1ZJUlRfTUVNX0JBU0UgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gaW9wMTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxICAgICAgID0gaW9wMTN4eF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmaXE4MTM0MHNjX3RpbWVyLAotCS5ib290X3BhcmFtcyAgICA9IEJPT1RfUEFSQU1fT0ZGU0VULAogCS5pbml0X21hY2hpbmUgICA9IGlxODEzNDBzY19pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcnEuYwppbmRleCBjNGQ5YzhjLi5kYmJjMDdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lycS5jCkBAIC0yMjIsMjUgKzIyMiwyOSBAQAogCWlvcDEzeHhfY3A2X3Jlc3RvcmUoY3BfZmxhZ3MpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgaW9wMTN4eF9pcnFjaGlwMCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9wMTN4eF9pcnFjaGlwMSA9IHsKKwkubmFtZQk9ICJJT1AxM3h4LTEiLAogCS5hY2sgICAgPSBpb3AxM3h4X2lycV9tYXNrMCwKIAkubWFzayAgID0gaW9wMTN4eF9pcnFfbWFzazAsCiAJLnVubWFzayA9IGlvcDEzeHhfaXJxX3VubWFzazAsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgaW9wMTN4eF9pcnFjaGlwMSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9wMTN4eF9pcnFjaGlwMiA9IHsKKwkubmFtZQk9ICJJT1AxM3h4LTIiLAogCS5hY2sgICAgPSBpb3AxM3h4X2lycV9tYXNrMSwKIAkubWFzayAgID0gaW9wMTN4eF9pcnFfbWFzazEsCiAJLnVubWFzayA9IGlvcDEzeHhfaXJxX3VubWFzazEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgaW9wMTN4eF9pcnFjaGlwMiA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9wMTN4eF9pcnFjaGlwMyA9IHsKKwkubmFtZQk9ICJJT1AxM3h4LTMiLAogCS5hY2sgICAgPSBpb3AxM3h4X2lycV9tYXNrMiwKIAkubWFzayAgID0gaW9wMTN4eF9pcnFfbWFzazIsCiAJLnVubWFzayA9IGlvcDEzeHhfaXJxX3VubWFzazIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgaW9wMTN4eF9pcnFjaGlwMyA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9wMTN4eF9pcnFjaGlwNCA9IHsKKwkubmFtZQk9ICJJT1AxM3h4LTQiLAogCS5hY2sgICAgPSBpb3AxM3h4X2lycV9tYXNrMywKIAkubWFzayAgID0gaW9wMTN4eF9pcnFfbWFzazMsCiAJLnVubWFzayA9IGlvcDEzeHhfaXJxX3VubWFzazMsCkBAIC0yNzAsMTUgKzI3NCwxNSBAQAogCiAJZm9yKGkgPSAwOyBpIDwgTlJfSU9QMTNYWF9JUlFTOyBpKyspIHsKIAkJaWYgKGkgPCAzMikKLQkJCXNldF9pcnFfY2hpcChpLCAmaW9wMTN4eF9pcnFjaGlwMCk7Ci0JCWVsc2UgaWYgKGkgPCA2NCkKIAkJCXNldF9pcnFfY2hpcChpLCAmaW9wMTN4eF9pcnFjaGlwMSk7Ci0JCWVsc2UgaWYgKGkgPCA5NikKKwkJZWxzZSBpZiAoaSA8IDY0KQogCQkJc2V0X2lycV9jaGlwKGksICZpb3AxM3h4X2lycWNoaXAyKTsKLQkJZWxzZQorCQllbHNlIGlmIChpIDwgOTYpCiAJCQlzZXRfaXJxX2NoaXAoaSwgJmlvcDEzeHhfaXJxY2hpcDMpOworCQllbHNlCisJCQlzZXRfaXJxX2NoaXAoaSwgJmlvcDEzeHhfaXJxY2hpcDQpOwogCi0JCXNldF9pcnFfaGFuZGxlcihpLCBkb19sZXZlbF9JUlEpOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CiAJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3NldHVwLmMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvc2V0dXAuYwppbmRleCAzNzU2ZDJjLi41ZmJlYjI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvc2V0dXAuYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAKICNpZmRlZiBDT05GSUdfTVREX1BIWVNNQVAKIAlpcTgxMzR4X2ZsYXNoX3Jlc291cmNlLmVuZCA9IGlxODEzNHhfZmxhc2hfcmVzb3VyY2Uuc3RhcnQgKwotCQkJCWlxODEzNHhfcHJvYmVfZmxhc2hfc2l6ZSgpOworCQkJCWlxODEzNHhfcHJvYmVfZmxhc2hfc2l6ZSgpIC0gMTsKIAlpZiAoaXE4MTM0eF9mbGFzaF9yZXNvdXJjZS5lbmQgPiBpcTgxMzR4X2ZsYXNoX3Jlc291cmNlLnN0YXJ0KQogCQlpb3AxM3h4X2RldmljZXNbcGxhdF9pZHgrK10gPSAmaXE4MTM0eF9mbGFzaDsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1uZXR4L3RpbWUuYwppbmRleCAwOTkzMzM2Li41NzczYjU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5ldHgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC90aW1lLmMKQEAgLTE5LDYgKzE5LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0yNiwxNSArMjgsNiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL25ldHgtcmVncy5oPgogCiAvKgotICogUmV0dXJucyBudW1iZXIgb2YgdXMgc2luY2UgbGFzdCBjbG9jayBpbnRlcnJ1cHQuICBOb3RlIHRoYXQgaW50ZXJydXB0cwotICogd2lsbCBoYXZlIGJlZW4gZGlzYWJsZWQgYnkgZG9fZ2V0dGltZW9mZnNldCgpCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG5ldHhfZ2V0dGltZW9mZnNldCh2b2lkKQotewotCXJldHVybiByZWFkbChORVRYX0dQSU9fQ09VTlRFUl9DVVJSRU5UKDApKSAvIDEwMDsKLX0KLQotLyoKICAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIKICAqLwogc3RhdGljIGlycXJldHVybl90CkBAIC00Myw2ICszNiw3IEBACiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAKIAl0aW1lcl90aWNrKCk7CisKIAl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwogCiAJLyogYWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCkBAIC01MSwxMyArNDUsMjYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbmV0eF90aW1lcl9pcnEgPSB7CiAJLm5hbWUgICAgICAgICAgID0gIk5ldFggVGltZXIgVGljayIsCiAJLmZsYWdzICAgICAgICAgID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiAJLmhhbmRsZXIgICAgICAgID0gbmV0eF90aW1lcl9pbnRlcnJ1cHQsCiB9OwogCitjeWNsZV90IG5ldHhfZ2V0X2N5Y2xlcyh2b2lkKQoreworCXJldHVybiByZWFkbChORVRYX0dQSU9fQ09VTlRFUl9DVVJSRU5UKDEpKTsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9uZXR4ID0geworCS5uYW1lIAkJPSAibmV0eF90aW1lciIsCisJLnJhdGluZwkJPSAyMDAsCisJLnJlYWQJCT0gbmV0eF9nZXRfY3ljbGVzLAorCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5zaGlmdCAJCT0gMjAsCisJLmlzX2NvbnRpbnVvdXMgCT0gMSwKK307CisKIC8qCiAgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0CiAgKi8KQEAgLTgwLDkgKzg3LDIwIEBACiAJCU5FVFhfR1BJT19DT1VOVEVSX0NUUkwoMCkpOwogCiAJc2V0dXBfaXJxKE5FVFhfSVJRX1RJTUVSMCwgJm5ldHhfdGltZXJfaXJxKTsKKworCS8qIFNldHVwIHRpbWVyIG9uZSBmb3IgY2xvY2tzb3VyY2UgKi8KKyAgICAgICAgd3JpdGVsKDAsIE5FVFhfR1BJT19DT1VOVEVSX0NUUkwoMSkpOworICAgICAgICB3cml0ZWwoMCwgTkVUWF9HUElPX0NPVU5URVJfQ1VSUkVOVCgxKSk7CisgICAgICAgIHdyaXRlbCgweEZGRkZGRkZGLCBORVRYX0dQSU9fQ09VTlRFUl9NQVgoMSkpOworCisgICAgICAgIHdyaXRlbChORVRYX0dQSU9fQ09VTlRFUl9DVFJMX1JVTiwKKyAgICAgICAgICAgICAgICBORVRYX0dQSU9fQ09VTlRFUl9DVFJMKDEpKTsKKworCWNsb2Nrc291cmNlX25ldHgubXVsdCA9CisJCWNsb2Nrc291cmNlX2h6Mm11bHQoQ0xPQ0tfVElDS19SQVRFLCBjbG9ja3NvdXJjZV9uZXR4LnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfbmV0eCk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgbmV0eF90aW1lciA9IHsKLQkuaW5pdCAgICAgICAgICAgPSBuZXR4X3RpbWVyX2luaXQsCi0JLm9mZnNldCAgICAgICAgID0gbmV0eF9nZXR0aW1lb2Zmc2V0LAorCS5pbml0CQk9IG5ldHhfdGltZXJfaW5pdCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKaW5kZXggZDEzNTU2OC4uODc4MWFhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwpAQCAtNDMsNiArNDMsNyBAQAogY29uZmlnIE1BQ0hfT01BUF9PU0sKIAlib29sICJUSSBPU0sgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTZYWAorCXNlbGVjdCBUUFM2NTAxMAogICAgIAloZWxwCiAJICBUSSBPTUFQIDU5MTIgT1NLIChPTUFQIFN0YXJ0ZXIgS2l0KSBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlCiAgICAgICAgICAgaWYgeW91IGhhdmUgc3VjaCBhIGJvYXJkLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggM2E2MjI4MC4uN2QwY2Y3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCmluZGV4IDAzZDY5MDUuLjg3OGZmOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCmluZGV4IGY0ZjA0ZDguLmQ4ZjU3ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3BtYy5oPgogCiAjdW5kZWYgREVCVUcKQEAgLTMzOCwxOSArMzM5LDEzIEBACiAJaW50IGNzOwogCXVuc2lnbmVkIGxvbmcgYm9vdF9yb21fc3BhY2UgPSAwOwogCi0JaWYgKGNwdV9pc19vbWFwMjQyeCgpKSB7Ci0JCXUzMiBsOwotCQlsID0gb21hcF9yZWFkbChPTUFQMjQyWF9DT05UUk9MX1NUQVRVUyk7Ci0JCS8qIEluIGNhc2Ugb2YgaW50ZXJuYWwgYm9vdCB0aGUgMXN0IE1CIGlzIHJlZGlyZWN0ZWQgdG8gdGhlCi0JCSAqIGJvb3QgUk9NIG1lbW9yeSBzcGFjZS4KLQkJICovCi0JCWlmIChsICYgKDEgPDwgMykpCi0JCQlib290X3JvbV9zcGFjZSA9IEJPT1RfUk9NX1NQQUNFOwotCX0gZWxzZQotCQkvKiBXZSBhc3N1bWUgaW50ZXJuYWwgYm9vdCBpZiB0aGUgbW9kZSBjYW4ndCBiZQotCQkgKiBkZXRlcm1pbmVkLgotCQkgKi8KLQkJYm9vdF9yb21fc3BhY2UgPSBCT09UX1JPTV9TUEFDRTsKKwkvKiBuZXZlciBhbGxvY2F0ZSB0aGUgZmlyc3QgcGFnZSwgdG8gZmFjaWxpdGF0ZSBidWcgZGV0ZWN0aW9uOworCSAqIGV2ZW4gaWYgd2UgZGlkbid0IGJvb3QgZnJvbSBST00uCisJICovCisJYm9vdF9yb21fc3BhY2UgPSBCT09UX1JPTV9TUEFDRTsKKwkvKiBJbiBhcG9sbG9uIHRoZSBDUzAgaXMgbWFwcGVkIGFzIDB4MDAwMCAwMDAwICovCisJaWYgKG1hY2hpbmVfaXNfb21hcF9hcG9sbG9uKCkpCisJCWJvb3Rfcm9tX3NwYWNlID0gMDsKIAlncG1jX21lbV9yb290LnN0YXJ0ID0gR1BNQ19NRU1fU1RBUlQgKyBib290X3JvbV9zcGFjZTsKIAlncG1jX21lbV9yb290LmVuZCA9IEdQTUNfTUVNX0VORDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L01ha2VmaWxlCmluZGV4IGI0NTdjYTAuLjc3NzU2NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwogCi1vYmoteQkJCTo9IGNvcmUubyBpcnEubyB0aW1lLm8gY2xvY2subyBncGlvLm8gc2VyaWFsLm8gZG1hLm8KK29iai15CQkJOj0gY29yZS5vIGlycS5vIHRpbWUubyBjbG9jay5vIGdwaW8ubyBzZXJpYWwubyBkbWEubyBpMmMubwogb2JqLW0JCQk6PQogb2JqLW4JCQk6PQogb2JqLQkJCTo9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaTJjLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzMDg4MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pMmMuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIEkyQyBpbml0aWFsaXphdGlvbiBmb3IgUE5YNDAwOC4KKyAqCisgKiBBdXRob3I6IFZpdGFseSBXb29sIDx2aXRhbHl3b29sQGdtYWlsLmNvbT4KKyAqCisgKiAyMDA1LTIwMDYgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1wbnguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2kyYy5oPgorCitzdGF0aWMgaW50IHNldF9jbG9ja19ydW4oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY2xrICpjbGs7CisJY2hhciBuYW1lWzEwXTsKKwlpbnQgcmV0dmFsID0gMDsKKworCXNucHJpbnRmKG5hbWUsIDEwLCAiaTJjJWRfY2siLCBwZGV2LT5pZCk7CisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBuYW1lKTsKKwlpZiAoIUlTX0VSUihjbGspKSB7CisJCWNsa19zZXRfcmF0ZShjbGssIDEpOworCQljbGtfcHV0KGNsayk7CisJfSBlbHNlCisJCXJldHZhbCA9IC1FTk9FTlQ7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHNldF9jbG9ja19zdG9wKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNsayAqY2xrOworCWNoYXIgbmFtZVsxMF07CisJaW50IHJldHZhbCA9IDA7CisKKwlzbnByaW50ZihuYW1lLCAxMCwgImkyYyVkX2NrIiwgcGRldi0+aWQpOworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgbmFtZSk7CisJaWYgKCFJU19FUlIoY2xrKSkgeworCQljbGtfc2V0X3JhdGUoY2xrLCAwKTsKKwkJY2xrX3B1dChjbGspOworCX0gZWxzZQorCQlyZXR2YWwgPSAtRU5PRU5UOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBpMmNfcG54X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWludCByZXR2YWwgPSAwOworI2lmZGVmIENPTkZJR19QTQorCXJldHZhbCA9IHNldF9jbG9ja19ydW4ocGRldik7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGkyY19wbnhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldHZhbCA9IDA7CisjaWZkZWYgQ09ORklHX1BNCisJcmV0dmFsID0gc2V0X2Nsb2NrX3J1bihwZGV2KTsKKyNlbmRpZgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB1MzIgY2FsY3VsYXRlX2lucHV0X2ZyZXEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gSENMS19NSFo7Cit9CisKKworc3RhdGljIHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSBwbnhfYWxnb19kYXRhMCA9IHsKKwkuYmFzZSA9IFBOWDQwMDhfSTJDMV9CQVNFLAorCS5pcnEgPSBJMkNfMV9JTlQsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19wbnhfYWxnb19kYXRhIHBueF9hbGdvX2RhdGExID0geworCS5iYXNlID0gUE5YNDAwOF9JMkMyX0JBU0UsCisJLmlycSA9IEkyQ18yX0lOVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgcG54X2FsZ29fZGF0YTIgPSB7CisJLmJhc2UgPSAoUE5YNDAwOF9VU0JfQ09ORklHX0JBU0UgKyAweDMwMCksCisJLmlycSA9IFVTQl9JMkNfSU5ULAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBwbnhfYWRhcHRlcjAgPSB7CisJLm5hbWUgPSBJMkNfQ0hJUF9OQU1FICIwIiwKKwkuYWxnb19kYXRhID0gJnBueF9hbGdvX2RhdGEwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgcG54X2FkYXB0ZXIxID0geworCS5uYW1lID0gSTJDX0NISVBfTkFNRSAiMSIsCisJLmFsZ29fZGF0YSA9ICZwbnhfYWxnb19kYXRhMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgcG54X2FkYXB0ZXIyID0geworCS5uYW1lID0gIlVTQi1JMkMiLAorCS5hbGdvX2RhdGEgPSAmcG54X2FsZ29fZGF0YTIsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19wbnhfZGF0YSBpMmMwX2RhdGEgPSB7CisJLnN1c3BlbmQgPSBpMmNfcG54X3N1c3BlbmQsCisJLnJlc3VtZSA9IGkyY19wbnhfcmVzdW1lLAorCS5jYWxjdWxhdGVfaW5wdXRfZnJlcSA9IGNhbGN1bGF0ZV9pbnB1dF9mcmVxLAorCS5zZXRfY2xvY2tfcnVuID0gc2V0X2Nsb2NrX3J1biwKKwkuc2V0X2Nsb2NrX3N0b3AgPSBzZXRfY2xvY2tfc3RvcCwKKwkuYWRhcHRlciA9ICZwbnhfYWRhcHRlcjAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19wbnhfZGF0YSBpMmMxX2RhdGEgPSB7CisJLnN1c3BlbmQgPSBpMmNfcG54X3N1c3BlbmQsCisJLnJlc3VtZSA9IGkyY19wbnhfcmVzdW1lLAorCS5jYWxjdWxhdGVfaW5wdXRfZnJlcSA9IGNhbGN1bGF0ZV9pbnB1dF9mcmVxLAorCS5zZXRfY2xvY2tfcnVuID0gc2V0X2Nsb2NrX3J1biwKKwkuc2V0X2Nsb2NrX3N0b3AgPSBzZXRfY2xvY2tfc3RvcCwKKwkuYWRhcHRlciA9ICZwbnhfYWRhcHRlcjEsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19wbnhfZGF0YSBpMmMyX2RhdGEgPSB7CisJLnN1c3BlbmQgPSBpMmNfcG54X3N1c3BlbmQsCisJLnJlc3VtZSA9IGkyY19wbnhfcmVzdW1lLAorCS5jYWxjdWxhdGVfaW5wdXRfZnJlcSA9IGNhbGN1bGF0ZV9pbnB1dF9mcmVxLAorCS5zZXRfY2xvY2tfcnVuID0gc2V0X2Nsb2NrX3J1biwKKwkuc2V0X2Nsb2NrX3N0b3AgPSBzZXRfY2xvY2tfc3RvcCwKKwkuYWRhcHRlciA9ICZwbnhfYWRhcHRlcjIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMwX2RldmljZSA9IHsKKwkubmFtZSA9ICJwbngtaTJjIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmkyYzBfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjMV9kZXZpY2UgPSB7CisJLm5hbWUgPSAicG54LWkyYyIsCisJLmlkID0gMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpMmMxX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyYzJfZGV2aWNlID0geworCS5uYW1lID0gInBueC1pMmMiLAorCS5pZCA9IDIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaTJjMl9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmkyYzBfZGV2aWNlLAorCSZpMmMxX2RldmljZSwKKwkmaTJjMl9kZXZpY2UsCit9OworCit2b2lkIF9faW5pdCBwbng0MDA4X3JlZ2lzdGVyX2kyY19kZXZpY2VzKHZvaWQpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwppbmRleCA5ZTNkMGJkLi41YzBhMTAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKQEAgLTc1LDI4ICs3NSwyOCBAQAogCiBjb25maWcgTUFDSF9QT09ETEUKIAlib29sICJFbmFibGUgU2hhcnAgU0wtNTYwMCAoUG9vZGxlKSBTdXBwb3J0IgotCWRlcGVuZHMgUFhBX1NIQVJQU0xfMjV4CisJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTF8yNXgKIAlzZWxlY3QgU0hBUlBfTE9DT01PCiAJc2VsZWN0IFBYQV9TU1AKIAogY29uZmlnIE1BQ0hfQ09SR0kKIAlib29sICJFbmFibGUgU2hhcnAgU0wtQzcwMCAoQ29yZ2kpIFN1cHBvcnQiCi0JZGVwZW5kcyBQWEFfU0hBUlBTTF8yNXgKKwlkZXBlbmRzIG9uIFBYQV9TSEFSUFNMXzI1eAogCXNlbGVjdCBQWEFfU0hBUlBfQzd4eAogCiBjb25maWcgTUFDSF9TSEVQSEVSRAogCWJvb2wgIkVuYWJsZSBTaGFycCBTTC1DNzUwIChTaGVwaGVyZCkgU3VwcG9ydCIKLQlkZXBlbmRzIFBYQV9TSEFSUFNMXzI1eAorCWRlcGVuZHMgb24gUFhBX1NIQVJQU0xfMjV4CiAJc2VsZWN0IFBYQV9TSEFSUF9DN3h4CiAKIGNvbmZpZyBNQUNIX0hVU0tZCiAJYm9vbCAiRW5hYmxlIFNoYXJwIFNMLUM3NjAgKEh1c2t5KSBTdXBwb3J0IgotCWRlcGVuZHMgUFhBX1NIQVJQU0xfMjV4CisJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTF8yNXgKIAlzZWxlY3QgUFhBX1NIQVJQX0M3eHgKIAogY29uZmlnIE1BQ0hfQUtJVEEKIAlib29sICJFbmFibGUgU2hhcnAgU0wtMTAwMCAoQWtpdGEpIFN1cHBvcnQiCi0JZGVwZW5kcyBQWEFfU0hBUlBTTF8yN3gKKwlkZXBlbmRzIG9uIFBYQV9TSEFSUFNMXzI3eAogCXNlbGVjdCBQWEFfU0hBUlBfQ3h4MDAKIAlzZWxlY3QgTUFDSF9TUElUWgogCXNlbGVjdCBJMkMKQEAgLTEwNCwxNyArMTA0LDE3IEBACiAKIGNvbmZpZyBNQUNIX1NQSVRaCiAJYm9vbCAiRW5hYmxlIFNoYXJwIFphdXJ1cyBTTC0zMDAwIChTcGl0eikgU3VwcG9ydCIKLQlkZXBlbmRzIFBYQV9TSEFSUFNMXzI3eAorCWRlcGVuZHMgb24gUFhBX1NIQVJQU0xfMjd4CiAJc2VsZWN0IFBYQV9TSEFSUF9DeHgwMAogCiBjb25maWcgTUFDSF9CT1JaT0kKIAlib29sICJFbmFibGUgU2hhcnAgWmF1cnVzIFNMLTMxMDAgKEJvcnpvaSkgU3VwcG9ydCIKLQlkZXBlbmRzIFBYQV9TSEFSUFNMXzI3eAorCWRlcGVuZHMgb24gUFhBX1NIQVJQU0xfMjd4CiAJc2VsZWN0IFBYQV9TSEFSUF9DeHgwMAogCiBjb25maWcgTUFDSF9UT1NBCiAJYm9vbCAiRW5hYmxlIFNoYXJwIFNMLTYwMDB4IChUb3NhKSBTdXBwb3J0IgotCWRlcGVuZHMgUFhBX1NIQVJQU0xfMjV4CisJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTF8yNXgKIAogY29uZmlnIFBYQTI1eAogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYwppbmRleCA2YWU2MDU4Li45ZGUxMjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jCkBAIC03Niw3ICs3Niw5IEBACiAJLyoKIAkgKiA5Ni1iaXQgbWF0aCB0byBwZXJmb3JtIHRpY2sgKiBOU0VDX1BFUl9TRUMgLyBDTE9DS19USUNLX1JBVEUgZm9yCiAJICogYW55IHZhbHVlIG9mIENMT0NLX1RJQ0tfUkFURS4gTWF4IHZhbHVlIGlzIGluIHRoZSA4MCB0aG91c2FuZAotCSAqIHllYXJzIHJhbmdlIHdoaWNoIGlzIG5pY2UsIGJ1dCB3aXRoIGhpZ2hlciBjb21wdXRhdGlvbiBjb3N0LgorCSAqIHllYXJzIHJhbmdlIGFuZCB0cnVuY2F0aW9uIHRvIHVuc2lnbmVkIGxvbmcgbG9uZyBsaW1pdHMgaXQgdG8KKwkgKiBzY2hlZF9jbG9jaydzIG1heCByYW5nZSBvZiB+NTg0IHllYXJzLiAgVGhpcyBpcyBuaWNlIGJ1dCB3aXRoCisJICogaGlnaGVyIGNvbXB1dGF0aW9uIGNvc3QuCiAJICovCiAJewogCQl1bmlvbiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKaW5kZXggYjkxNDY2OC4uZWUyYmViNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgpAQCAtNDgsMjcgKzQ5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogSVJRcyBhcmUgZGlzYWJsZWQgYmVmb3JlIGVudGVyaW5nIGhlcmUgZnJvbSBkb19nZXR0aW1lb2ZkYXkoKSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcHhhX2dldHRpbWVvZmZzZXQgKHZvaWQpCi17Ci0JbG9uZyB0aWNrc190b19tYXRjaCwgZWxhcHNlZCwgdXNlYzsKLQotCS8qIEdldCB0aWNrcyBiZWZvcmUgbmV4dCB0aW1lciBtYXRjaCAqLwotCXRpY2tzX3RvX21hdGNoID0gT1NNUjAgLSBPU0NSOwotCi0JLyogV2UgbmVlZCBlbGFwc2VkIHRpY2tzIHNpbmNlIGxhc3QgbWF0Y2ggKi8KLQllbGFwc2VkID0gTEFUQ0ggLSB0aWNrc190b19tYXRjaDsKLQotCS8qIGRvbid0IGdldCBmb29sZWQgYnkgdGhlIHdvcmthcm91bmQgaW4gcHhhX3RpbWVyX2ludGVycnVwdCgpICovCi0JaWYgKGVsYXBzZWQgPD0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBOb3cgY29udmVydCB0aGVtIHRvIHVzZWMgKi8KLQl1c2VjID0gKHVuc2lnbmVkIGxvbmcpKGVsYXBzZWQgKiAodGlja19uc2VjIC8gMTAwMCkpL0xBVENIOwotCi0JcmV0dXJuIHVzZWM7Ci19Ci0KICNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5pdGlhbF9tYXRjaDsKIHN0YXRpYyBpbnQgbWF0Y2hfcG9zcG9uZWQ7CkBAIC0xMjEsNiArMTAxLDIwIEBACiAJLmhhbmRsZXIJPSBweGFfdGltZXJfaW50ZXJydXB0LAogfTsKIAorc3RhdGljIGN5Y2xlX3QgcHhhX2dldF9jeWNsZXModm9pZCkKK3sKKwlyZXR1cm4gT1NDUjsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9weGEgPSB7CisJLm5hbWUgICAgICAgICAgID0gInB4YV90aW1lciIsCisJLnJhdGluZyAgICAgICAgID0gMjAwLAorCS5yZWFkICAgICAgICAgICA9IHB4YV9nZXRfY3ljbGVzLAorCS5tYXNrICAgICAgICAgICA9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5zaGlmdCAgICAgICAgICA9IDIwLAorCS5pc19jb250aW51b3VzICA9IDEsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcHhhX3RpbWVyX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHY7CkBAIC0xMzksNiArMTMzLDE0IEBACiAJT0lFUiA9IE9JRVJfRTA7CQkvKiBlbmFibGUgbWF0Y2ggb24gdGltZXIgMCB0byBjYXVzZSBpbnRlcnJ1cHRzICovCiAJT1NNUjAgPSBPU0NSICsgTEFUQ0g7CS8qIHNldCBpbml0aWFsIG1hdGNoICovCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyoKKwkgKiBPU0NSIHJ1bnMgY29udGludW91c2x5IG9uIFBYQSBhbmQgaXMgbm90IHdyaXR0ZW4gdG8sCisJICogc28gd2UgY2FuIHVzZSBpdCBhcyBjbG9jayBzb3VyY2UgZGlyZWN0bHkuCisJICovCisJY2xvY2tzb3VyY2VfcHhhLm11bHQgPQorCQljbG9ja3NvdXJjZV9oejJtdWx0KENMT0NLX1RJQ0tfUkFURSwgY2xvY2tzb3VyY2VfcHhhLnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfcHhhKTsKIH0KIAogI2lmZGVmIENPTkZJR19OT19JRExFX0haCkBAIC0yMTEsNyArMjEzLDYgQEAKIAkuaW5pdAkJPSBweGFfdGltZXJfaW5pdCwKIAkuc3VzcGVuZAk9IHB4YV90aW1lcl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhX3RpbWVyX3Jlc3VtZSwKLQkub2Zmc2V0CQk9IHB4YV9nZXR0aW1lb2Zmc2V0LAogI2lmZGVmIENPTkZJR19OT19JRExFX0haCiAJLmR5bl90aWNrCT0gJnB4YV9keW5fdGljaywKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKaW5kZXggYzE4MjdkMC4uMTE5YzY0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCkBAIC0zOTMsMTAgKzM5Myw2IEBACiAgICAgLnB4YWZiX2JhY2tsaWdodF9wb3dlciA9IGJvYXJkX2JhY2tsaWdodF9wb3dlciwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCB0cml6ZXBzNF9maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLCBjaGFyICoqY21kbGluZSwgc3RydWN0IG1lbWluZm8gKm1pKQotewotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgdHJpemVwczRfaW5pdCh2b2lkKQogewogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHRyaXplcHM0X2RldmljZXMsIEFSUkFZX1NJWkUodHJpemVwczRfZGV2aWNlcykpOwpAQCAtNDY5LDcgKzQ2NSw2IEBACiAJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IFRSSVpFUFM0X1NEUkFNX0JBU0UgKyAweDEwMCwKLQkuZml4dXAJCT0gdHJpemVwczRfZml4dXAsCiAJLmluaXRfbWFjaGluZQk9IHRyaXplcHM0X2luaXQsCiAJLm1hcF9pbwkJPSB0cml6ZXBzNF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gcHhhX2luaXRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCA2OGM2NzA1Li44NGQzZmU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtMTQxLDYgKzE0MSwxOSBAQAogCS5yZXNvdXJjZQk9IHJlYWx2aWV3X3NtYzkxeF9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X2kyY19yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gUkVBTFZJRVdfSTJDX0JBU0UsCisJLmVuZAkJPSBSRUFMVklFV19JMkNfQkFTRSArIFNaXzRLIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2kyY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInZlcnNhdGlsZS1pMmMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnJlYWx2aWV3X2kyY19yZXNvdXJjZSwKK307CisKICNkZWZpbmUgUkVBTFZJRVdfU1lTTUNJCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfU1lTX01DSV9PRkZTRVQpCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVhbHZpZXdfbW1jX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCmluZGV4IDkzZTg2ZDkuLjJiNTM0MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCkBAIC0xMDgsNiArMTA4LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfZmxhc2hfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfc21jOTF4X2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2kyY19kZXZpY2U7CiBleHRlcm4gc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhOwogZXh0ZXJuIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMxX3BsYXRfZGF0YTsKIGV4dGVybiBzdHJ1Y3QgY2xrIHJlYWx2aWV3X2NsY2RfY2xrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCmluZGV4IDg0YTk1OTUuLjk3NDFiNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKQEAgLTE1NSw2ICsxNTUsNyBAQAogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19mbGFzaF9kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfc21jOTF4X2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19pMmNfZGV2aWNlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgewogCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IDlmNDZiZjMuLmViNGVjNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogY29uZmlnIE1BQ0hfQU1MX001OTAwCiAJYm9vbCAiQU1MIE01OTAwIFNlcmllcyIKIAlzZWxlY3QgQ1BVX1MzQzI0MTAKKwlzZWxlY3QgUE1fU0lNVEVDIGlmIFBNCiAJaGVscAogCSAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgQW1lcmljYW4gTWljcm9zeXN0ZW1zIE01OTAwIFNlcmllcwogICAgICAgICAgICA8aHR0cDovL3d3dy5hbWx0ZC5jb20+CkBAIC0xMiw2ICsxMyw3IEBACiBjb25maWcgTUFDSF9BTlVCSVMKIAlib29sICJTaW10ZWMgRWxlY3Ryb25pY3MgQU5VQklTIgogCXNlbGVjdCBDUFVfUzNDMjQ0MAorCXNlbGVjdCBQTV9TSU1URUMgaWYgUE0KIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNpbXRlYyBFbGVjdHJvbmljcyBBTlVCSVMKIAkgIGRldmVsb3BtZW50IHN5c3RlbQpAQCAtMTksNiArMjEsNyBAQAogY29uZmlnIE1BQ0hfT1NJUklTCiAJYm9vbCAiU2ltdGVjIElNMjQ0MEQyMCAoT1NJUklTKSBtb2R1bGUiCiAJc2VsZWN0IENQVV9TM0MyNDQwCisJc2VsZWN0IFBNX1NJTVRFQyBpZiBQTQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIElNMjQ0MEQyMCBtb2R1bGUsIGFsc28KIAkgIGtub3duIGFzIHRoZSBPc2lyaXMuCkBAIC0yNiw2ICsyOSw3IEBACiBjb25maWcgQVJDSF9CQVNUCiAJYm9vbCAiU2ltdGVjIEVsZWN0cm9uaWNzIEJBU1QgKEVCMjQxMElUWCkiCiAJc2VsZWN0IENQVV9TM0MyNDEwCisJc2VsZWN0IFBNX1NJTVRFQyBpZiBQTQogCXNlbGVjdCBJU0EKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNpbXRlYyBFbGVjdHJvbmljcyBFQjI0MTBJVFgKQEAgLTQzLDE0ICs0NywxMyBAQAogCiBjb25maWcgUE1fSDE5NDAKIAlib29sCi0JZGVwZW5kcyBvbiBQTQogCWhlbHAKIAkgIEludGVybmFsIG5vZGUgZm9yIEgxOTQwIGFuZCByZWxhdGVkIFBNCiAKIGNvbmZpZyBBUkNIX0gxOTQwCiAJYm9vbCAiSVBBUSBIMTk0MCIKIAlzZWxlY3QgQ1BVX1MzQzI0MTAKLQlzZWxlY3QgUE1fSDE5NDAKKwlzZWxlY3QgUE1fSDE5NDAgaWYgUE0KIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEhQIElQQVEgSDE5NDAKIApAQCAtMTEyLDYgKzExNSw3IEBACiAKIGNvbmZpZyBNQUNIX1ZSMTAwMAogCWJvb2wgIlRob3Jjb20gVlIxMDAwIgorCXNlbGVjdCBQTV9TSU1URUMgaWYgUE0KIAlzZWxlY3QgQ1BVX1MzQzI0MTAKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFRob3Jjb20gVlIxMDAwIGJvYXJkLgpAQCAtMTIyLDcgKzEyNiw3IEBACiBjb25maWcgTUFDSF9SWDM3MTUKIAlib29sICJIUCBpUEFRIHJ4MzcxNSIKIAlzZWxlY3QgQ1BVX1MzQzI0NDAKLQlzZWxlY3QgUE1fSDE5NDAKKwlzZWxlY3QgUE1fSDE5NDAgaWYgUE0KIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEhQIGlQQVEgcngzNzE1LgogCkBAIC0xNTYsNyArMTYwLDYgQEAKIAogY29uZmlnIFMzQzI0MTBfUE0KIAlib29sCi0JZGVwZW5kcyBvbiBDT05GSUdfUE0KIAloZWxwCiAJICBQb3dlciBNYW5hZ2VtZW50IGNvZGUgY29tbW9uIHRvIFMzQzI0MTAgYW5kIGJldHRlcgogCkBAIC0xNzEsNyArMTc0LDcgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKIAlzZWxlY3QgUzNDMjQxMF9DTE9DSwotCXNlbGVjdCBTM0MyNDEwX1BNCisJc2VsZWN0IFMzQzI0MTBfUE0gaWYgUE0KIAloZWxwCiAJICBTdXBwb3J0IGZvciBTM0MyNDEwIGFuZCBTM0MyNDEwQSBmYW1pbHkgZnJvbSB0aGUgUzNDMjRYWCBsaW5lCiAJICBvZiBTYW1zdW5nIE1vYmlsZSBDUFVzLgpAQCAtMTg2LDE0ICsxODksMTMgQEAKIAogY29uZmlnIFMzQzI0MTJfUE0KIAlib29sCi0JZGVmYXVsdCB5IGlmIFBNCi0JZGVwZW5kcyBvbiBDUFVfUzNDMjQxMgogCWhlbHAKIAkgIEludGVybmFsIGNvbmZpZyBub2RlIHRvIGFwcGx5IFMzQzI0MTIgcG93ZXIgbWFuYWdlbWVudAogCiBjb25maWcgQ1BVX1MzQzI0MTIKIAlib29sCiAJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwlzZWxlY3QgUzNDMjQxMl9QTSBpZiBQTQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBTM0MyNDEyIGFuZCBTM0MyNDEzIFNvQ3MgZnJvbSB0aGUgUzNDMjRYWCBsaW5lCiAKQEAgLTIwNyw3ICsyMDksNyBAQAogCWJvb2wKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAogCXNlbGVjdCBTM0MyNDEwX0NMT0NLCi0Jc2VsZWN0IFMzQzI0MTBfUE0KKwlzZWxlY3QgUzNDMjQxMF9QTSBpZiBQTQogCXNlbGVjdCBDUFVfUzNDMjQ0WAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFMzQzI0NDAgU2Ftc3VuZyBNb2JpbGUgQ1BVIGJhc2VkIHN5c3RlbXMuCkBAIC0yMTYsNyArMjE4LDcgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MjAKIAlzZWxlY3QgUzNDMjQxMF9DTE9DSwotCXNlbGVjdCBTM0MyNDEwX1BNCisJc2VsZWN0IFMzQzI0MTBfUE0gaWYgUE0KIAlzZWxlY3QgQ1BVX1MzQzI0NFgKIAloZWxwCiAJICBTdXBwb3J0IGZvciBTM0MyNDQyIFNhbXN1bmcgTW9iaWxlIENQVSBiYXNlZCBzeXN0ZW1zLgpAQCAtMzAwLDggKzMwMiw5IEBACiAKIGNvbmZpZyBQTV9TSU1URUMKIAlib29sCi0JZGVwZW5kcyBvbiBQTSAmJiAoQVJDSF9CQVNUIHx8IE1BQ0hfVlIxMDAwIHx8IE1BQ0hfQU1MX001OTAwKQotCWRlZmF1bHQgeQorCWhlbHAKKwkgIENvbW1vbiBwb3dlciBtYW5hZ2VtZW50IGNvZGUgZm9yIHN5c3RlbXMgdGhhdCBhcmUKKwkgIGNvbXBhdGlibGUgd2l0aCB0aGUgU2ltdGVjIHN0eWxlIG9mIHBvd2VyIG1hbmFnZW1lbnQKIAogY29uZmlnIFMzQzI0MTBfTE9XTEVWRUxfVUFSVF9QT1JUCiAJaW50ICJTM0MyNDEwIFVBUlQgdG8gdXNlIGZvciBsb3ctbGV2ZWwgbWVzc2FnZXMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMKaW5kZXggOWQ0ODk5ZS4uYWUxZjViYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jCmluZGV4IGNhZTM1ZmYuLmZhY2NkZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCmluZGV4IDAxYWJiMGEuLmZhODYwZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKICAqCi0gKiAoYykgMjAwMy0yMDA1LDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSwyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFMzQzI0MTAgRE1BIGNvcmUKQEAgLTEwNTMsMTEgKzEwNTMsMTEgQEAKIAlpZiAoY2hhbiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXByaW50aygiSW5pdGlhbCBkY29uIGlzICUwOHhcbiIsIGRjb24pOworCXByX2RlYnVnKCIlczogSW5pdGlhbCBkY29uIGlzICUwOHhcbiIsIF9fRlVOQ1RJT05fXywgZGNvbik7CiAKIAlkY29uIHw9IGNoYW4tPmRjb24gJiBkbWFfc2VsLmRjb25fbWFzazsKIAotCXByaW50aygiTmV3IGRjb24gaXMgJTA4eFxuIiwgZGNvbik7CisJcHJfZGVidWcoIiVzOiBOZXcgZGNvbiBpcyAlMDh4XG4iLCBfX0ZVTkNUSU9OX18sIGRjb24pOwogCiAJc3dpdGNoICh4ZmVydW5pdCkgewogCWNhc2UgMToKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jCmluZGV4IGJhMzQ2NTQuLmY2ZmIyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYwpAQCAtNTcsNiArNTcsNyBAQAogCWNhc2UgUzNDMjQxMF9HUElPX1NGTjI6CiAJY2FzZSBTM0MyNDEwX0dQSU9fU0ZOMzoKIAkJaWYgKHBpbiA8IFMzQzI0MTBfR1BJT19CQU5LQikgeworCQkJZnVuY3Rpb24gLT0gMTsKIAkJCWZ1bmN0aW9uICY9IDE7CiAJCQlmdW5jdGlvbiA8PD0gUzNDMjQxMF9HUElPX09GRlNFVChwaW4pOwogCQl9IGVsc2UgewpAQCAtODMsMTUgKzg0LDE4IEBACiB1bnNpZ25lZCBpbnQgczNjMjQxMF9ncGlvX2dldGNmZyh1bnNpZ25lZCBpbnQgcGluKQogewogCXZvaWQgX19pb21lbSAqYmFzZSA9IFMzQzI0WFhfR1BJT19CQVNFKHBpbik7Ci0JdW5zaWduZWQgbG9uZyBtYXNrOworCXVuc2lnbmVkIGxvbmcgdmFsID0gX19yYXdfcmVhZGwoYmFzZSk7CiAKIAlpZiAocGluIDwgUzNDMjQxMF9HUElPX0JBTktCKSB7Ci0JCW1hc2sgPSAxIDw8IFMzQzI0MTBfR1BJT19PRkZTRVQocGluKTsKKwkJdmFsID4+PSBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbik7CisJCXZhbCAmPSAxOworCQl2YWwgKz0gMTsKIAl9IGVsc2UgewotCQltYXNrID0gMyA8PCBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikqMjsKKwkJdmFsID4+PSBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikqMjsKKwkJdmFsICY9IDM7CiAJfQogCi0JcmV0dXJuIF9fcmF3X3JlYWRsKGJhc2UpICYgbWFzazsKKwlyZXR1cm4gdmFsIHwgUzNDMjQxMF9HUElPX0lOUFVUOwogfQogCiBFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZ3Bpb19nZXRjZmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5oCmluZGV4IDM2ODZhMDAuLmU1OTEzZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmgKQEAgLTgsOCArOCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6CiAqLwogCiAjZGVmaW5lIGlycWRiZih4Li4uKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYwppbmRleCBlOTRjZGNkLi4wZmFkMGMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCmluZGV4IDI5NjhmYjIuLmI4Yjc2NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbTkwMDAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKaW5kZXggZjViOTgwOS4uMTViNjI1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0zNyw4ICszOCw2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvaDE5NDAtbGF0Y2guaD4KICNpbmNsdWRlIDxhc20vYXJjaC9mYi5oPgogCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLQogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiZGV2cy5oIgogI2luY2x1ZGUgImNwdS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwppbmRleCAxMTZhYzMxLi4wNDExZTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKQEAgLTM3LDggKzM4LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9paWMuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0KICNpbmNsdWRlICJzM2MyNDEwLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJkZXZzLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbmV4Y29kZXIuYwppbmRleCAwNjVhMWQ0Li5kNmRmZGFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3NpcmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYwppbmRleCBhNGFiMTQ0Li4zN2I0MDg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKaW5kZXggYzcxNjczZi4uMmM3MzhiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKaW5kZXggYjNiMDE3MS4uMDFjMGM5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTMuYwppbmRleCAzYTRjYTdmLi40Zjg5YWJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEzLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCmluZGV4IGUyMjA1ZmYuLjJiNjFmNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYwppbmRleCBlMmVkYTM5Li5hMzgyZmMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYwpAQCAtMzUyLDcgKzM1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZyMTAwMF9sZWQzID0gewogCS5uYW1lCQk9ICJzM2MyNHh4X2xlZCIsCi0JLmlkCQk9IDEsCisJLmlkCQk9IDMsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnZyMTAwMF9sZWQzX3BkYXRhLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12c3Rtcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnN0bXMuYwppbmRleCBlYTU1NGU3Li4wMzYwZTEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12c3Rtcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZzdG1zLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS1zaW10ZWMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS1zaW10ZWMuYwppbmRleCA0MmNkMDVlLi42MTkxMzNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0tc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLXNpbXRlYy5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbWVtLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKaW5kZXggYjQ5YTBiMy4uZWJmMjk0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CkBAIC00NTAsMTUgKzQ1MSwxNCBAQAogCQlpcnFzdGF0ZSA9IHMzY19pcnF3YWtlX2VpbnRtYXNrICYgKDFMPDxpcnFvZmZzKTsKIAogCXBpbnN0YXRlID0gczNjMjQxMF9ncGlvX2dldGNmZyhwaW4pOwotCXBpbnN0YXRlID4+PSBTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikqMjsKIAogCWlmICghaXJxc3RhdGUpIHsKLQkJaWYgKHBpbnN0YXRlID09IDB4MDIpCisJCWlmIChwaW5zdGF0ZSA9PSBTM0MyNDEwX0dQSU9fSVJRKQogCQkJREJHKCJMZWF2aW5nIElSUSAlZCAocGluICVkKSBlbmFibGVkXG4iLCBpcnEsIHBpbik7CiAJfSBlbHNlIHsKLQkJaWYgKHBpbnN0YXRlID09IDB4MDIpIHsKKwkJaWYgKHBpbnN0YXRlID09IFMzQzI0MTBfR1BJT19JUlEpIHsKIAkJCURCRygiRGlzYWJsaW5nIElSUSAlZCAocGluICVkKVxuIiwgaXJxLCBwaW4pOwotCQkJczNjMjQxMF9ncGlvX2NmZ3BpbihwaW4sIDB4MDApOworCQkJczNjMjQxMF9ncGlvX2NmZ3BpbihwaW4sIFMzQzI0MTBfR1BJT19JTlBVVCk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtY2xvY2suYwppbmRleCAwMGFiZTE5Li45OTJjYzZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWNsb2NrLmMKQEAgLTMwLDEzICszMCwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogCisjaW5jbHVkZSAiczNjMjQxMC5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAiY3B1LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWRtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtZG1hLmMKaW5kZXggNTFlNTA5OC4uZTY3YmEzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtZG1hLmMKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1kbWEuYwogICoKLSAqIChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFMzQzI0MTAgRE1BIHNlbGVjdGlvbgpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogCiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgpAQCAtMTMxLDYgKzEzMiw3IEBACiAJcmV0dXJuIHMzYzI0eHhfZG1hX2luaXRfbWFwKCZzM2MyNDEwX2RtYV9zZWwpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTApCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9kbWFfZHJpdmVyID0gewogCS5hZGQJPSBzM2MyNDEwX2RtYV9hZGQsCiB9OwpAQCAtMTQxLDkgKzE0MywxMCBAQAogfQogCiBhcmNoX2luaXRjYWxsKHMzYzI0MTBfZG1hX2luaXQpOworI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKIC8qIFMzQzI0NDIgRE1BIGNvbnRhaW5zIHRoZSBzYW1lIHNlbGVjdGlvbiB0YWJsZSBhcyB0aGUgUzNDMjQxMCAqLwotCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9kbWFfZHJpdmVyID0gewogCS5hZGQJPSBzM2MyNDEwX2RtYV9hZGQsCiB9OwpAQCAtMTU0LDUgKzE1Nyw1IEBACiB9CiAKIGFyY2hfaW5pdGNhbGwoczNjMjQ0Ml9kbWFfaW5pdCk7Ci0KKyNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtcG0uYwppbmRleCA3N2M2ODE0Li44YmI2ZTVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLXBtLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAogfQogCi1pbnQgczNjMjQxMF9wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMF9wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIApAQCAtMTExLDYgKzExMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMCkKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwX3BtX2RyaXZlciA9IHsKIAkuYWRkCQk9IHMzYzI0MTBfcG1fYWRkLAogCS5yZXN1bWUJCT0gczNjMjQxMF9wbV9yZXN1bWUsCkBAIC0xMjQsNyArMTI1LDkgQEAKIH0KIAogYXJjaF9pbml0Y2FsbChzM2MyNDEwX3BtX2RydmluaXQpOworI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MCkKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQwX3BtX2RyaXZlciA9IHsKIAkuYWRkCQk9IHMzYzI0MTBfcG1fYWRkLAogCS5yZXN1bWUJCT0gczNjMjQxMF9wbV9yZXN1bWUsCkBAIC0xMzYsNyArMTM5LDkgQEAKIH0KIAogYXJjaF9pbml0Y2FsbChzM2MyNDQwX3BtX2RydmluaXQpOworI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQyX3BtX2RyaXZlciA9IHsKIAkuYWRkCQk9IHMzYzI0MTBfcG1fYWRkLAogCS5yZXN1bWUJCT0gczNjMjQxMF9wbV9yZXN1bWUsCkBAIC0xNDgsMyArMTUzLDQgQEAKIH0KIAogYXJjaF9pbml0Y2FsbChzM2MyNDQyX3BtX2RydmluaXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwppbmRleCAxODNlNDAzLi40Y2RjMGQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMzgsMTEgKzM5LDkgQEAKIC8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2MyNDEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JSU9ERVNDX0VOVChVU0JIT1NUKSwKIAlJT0RFU0NfRU5UKENMS1BXUiksCiAJSU9ERVNDX0VOVChMQ0QpLAogCUlPREVTQ19FTlQoVElNRVIpLAotCUlPREVTQ19FTlQoQURDKSwKIAlJT0RFU0NfRU5UKFdBVENIRE9HKSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLWNsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1jbG9jay5jCmluZGV4IGM5NWVkM2UuLjhmOTRhZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItY2xvY2suYwpAQCAtMzAsMTMgKzMwLDE4IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAKKyNpbmNsdWRlICJzM2MyNDEyLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJjcHUuaCIKIApAQCAtNDksNyArNTQsNyBAQAogICogc2V0IHRoZSBjb3JyZWN0IG11eGluZyBhdCBpbml0aWFsaXNhdGlvbgogKi8KIAotaW50IHMzYzI0MTJfY2xrY29uX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCitzdGF0aWMgaW50IHMzYzI0MTJfY2xrY29uX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNsb2NrcyA9IGNsay0+Y3RybGJpdDsKIAl1bnNpZ25lZCBsb25nIGNsa2NvbjsKQEAgLTU1Niw3ICs1NjEsNyBAQAogCXN0cnVjdCBjbGsJKnNyY18xOwogfTsKIAotc3RydWN0IGNsa19pbml0IGNsa3Nfc3JjW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2luaXQgY2xrc19zcmNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLmNsawk9ICZjbGtfdXN5c2NsaywKIAkJLmJpdAk9IFMzQzI0MTJfQ0xLU1JDX1VTQkNMS19IQ0xLLApAQCAtNjE5LDcgKzYyNCw3IEBACiAKIC8qIGNsb2NrcyB0byBhZGQgc3RyYWlnaHQgYXdheSAqLwogCi1zdHJ1Y3QgY2xrICpjbGtzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW10gX19pbml0ZGF0YSA9IHsKIAkmY2xrX2V4dCwKIAkmY2xrX3VzYl9idXMsCiAJJmNsa19lcmVmY2xrLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1kbWEuYwppbmRleCAxNzFmMzcwLi4xMzhmNzI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1kbWEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLWRtYS5jCiAgKgotICogKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgogICogUzNDMjQxMiBETUEgc2VsZWN0aW9uCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CkBAIC0xMzIsOCArMTMzLDggQEAKIHN0YXRpYyB2b2lkIHMzYzI0MTJfZG1hX3NlbGVjdChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwKIAkJCSAgICAgICBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICptYXApCiB7Ci0Jd3JpdGVsKGNoYW4tPnJlZ3MgKyBTM0MyNDEyX0RNQV9ETUFSRVFTRUwsCi0JICAgICAgIG1hcC0+Y2hhbm5lbHNbMF0gfCBTM0MyNDEyX0RNQVJFUVNFTF9IVyk7CisJd3JpdGVsKG1hcC0+Y2hhbm5lbHNbMF0gfCBTM0MyNDEyX0RNQVJFUVNFTF9IVywKKwkgICAgICAgY2hhbi0+cmVncyArIFMzQzI0MTJfRE1BX0RNQVJFUVNFTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9kbWFfc2VsZWN0aW9uIF9faW5pdGRhdGEgczNjMjQxMl9kbWFfc2VsID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLmMKaW5kZXggZTc2NDMxYy4uMmY2NTFhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTYwLDcgKzYxLDYgQEAKIAlJT0RFU0NfRU5UKENMS1BXUiksCiAJSU9ERVNDX0VOVChMQ0QpLAogCUlPREVTQ19FTlQoVElNRVIpLAotCUlPREVTQ19FTlQoQURDKSwKIAlJT0RFU0NfRU5UKFdBVENIRE9HKSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWNsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1jbG9jay5jCmluZGV4IDE1Nzk2ODYuLmJhMTNjMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtY2xvY2suYwpAQCAtMTEzLDE4ICsxMTMsMTggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGNhbWRpdm4gPSBfX3Jhd19yZWFkbChTM0MyNDQwX0NBTURJVk4pOwogCXVuc2lnbmVkIGxvbmcgY2xrZGl2bjsKLQlzdHJ1Y3QgY2xrICpjbGtfaDsKLQlzdHJ1Y3QgY2xrICpjbGtfcDsKLQlzdHJ1Y3QgY2xrICpjbGtfdXBsbDsKKwlzdHJ1Y3QgY2xrICpjbG9ja19oOworCXN0cnVjdCBjbGsgKmNsb2NrX3A7CisJc3RydWN0IGNsayAqY2xvY2tfdXBsbDsKIAogCXByaW50aygiUzNDMjQ0MDogQ2xvY2sgU3VwcG9ydCwgRFZTICVzXG4iLAogCSAgICAgICAoY2FtZGl2biAmIFMzQzI0NDBfQ0FNRElWTl9EVlNFTikgPyAib24iIDogIm9mZiIpOwogCi0JY2xrX3AgPSBjbGtfZ2V0KE5VTEwsICJwY2xrIik7Ci0JY2xrX2ggPSBjbGtfZ2V0KE5VTEwsICJoY2xrIik7Ci0JY2xrX3VwbGwgPSBjbGtfZ2V0KE5VTEwsICJ1cGxsIik7CisJY2xvY2tfcCA9IGNsa19nZXQoTlVMTCwgInBjbGsiKTsKKwljbG9ja19oID0gY2xrX2dldChOVUxMLCAiaGNsayIpOworCWNsb2NrX3VwbGwgPSBjbGtfZ2V0KE5VTEwsICJ1cGxsIik7CiAKLQlpZiAoSVNfRVJSKGNsa19wKSB8fCBJU19FUlIoY2xrX2gpIHx8IElTX0VSUihjbGtfdXBsbCkpIHsKKwlpZiAoSVNfRVJSKGNsb2NrX3ApIHx8IElTX0VSUihjbG9ja19oKSB8fCBJU19FUlIoY2xvY2tfdXBsbCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTM0MyNDQwOiBGYWlsZWQgdG8gZ2V0IHBhcmVudCBjbG9ja3NcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMzIsOCArMTMyLDggQEAKIAkvKiBjaGVjayByYXRlIG9mIFVQTEwsIGFuZCBpZiBpdCBpcyBuZWFyIDk2TUh6LCB0aGVuIGNoYW5nZQogCSAqIHRvIHVzaW5nIGhhbGYgdGhlIFVQTEwgcmF0ZSBmb3IgdGhlIHN5c3RlbSAqLwogCi0JaWYgKGNsa19nZXRfcmF0ZShjbGtfdXBsbCkgPiAoOTQgKiBNSFopKSB7Ci0JCWNsa191c2JfYnVzLnJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrX3VwbGwpIC8gMjsKKwlpZiAoY2xrX2dldF9yYXRlKGNsb2NrX3VwbGwpID4gKDk0ICogTUhaKSkgeworCQljbGtfdXNiX2J1cy5yYXRlID0gY2xrX2dldF9yYXRlKGNsb2NrX3VwbGwpIC8gMjsKIAogCQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwogCkBAIC0xNDQsOSArMTQ0LDkgQEAKIAkJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwogCX0KIAotCXMzYzI0NDBfY2xrX2NhbS5wYXJlbnQgPSBjbGtfaDsKLQlzM2MyNDQwX2Nsa19hYzk3LnBhcmVudCA9IGNsa19wOwotCXMzYzI0NDBfY2xrX2NhbV91cGxsLnBhcmVudCA9IGNsa191cGxsOworCXMzYzI0NDBfY2xrX2NhbS5wYXJlbnQgPSBjbG9ja19oOworCXMzYzI0NDBfY2xrX2FjOTcucGFyZW50ID0gY2xvY2tfcDsKKwlzM2MyNDQwX2Nsa19jYW1fdXBsbC5wYXJlbnQgPSBjbG9ja191cGxsOwogCiAJczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0MF9jbGtfYWM5Nyk7CiAJczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0MF9jbGtfY2FtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtZG1hLmMKaW5kZXggMTFlMTA5Yy4uNDdiODYxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtZG1hLmMKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1kbWEuYwogICoKLSAqIChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFMzQzI0NDAgRE1BIHNlbGVjdGlvbgpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogCiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMKaW5kZXggMGFiNTBmNC4uMzQ0ZWIyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIApAQCAtMjgsMTcgKzI5LDkgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW9qLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1kc2MuaD4KLQogI2luY2x1ZGUgInMzYzI0NDAuaCIKLSNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImRldnMuaCIKICNpbmNsdWRlICJjcHUuaCIKLSNpbmNsdWRlICJwbS5oIgogCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjMjQ0MF9zeXNkZXYgPSB7CiAJLmNscwkJPSAmczNjMjQ0MF9zeXNjbGFzcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5oCmluZGV4IDI5Y2I2ZGYuLmRjZDMxNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuaApAQCAtOCwyOCArOCwxMCBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBNb2RpZmljYXRpb25zOgotICoJMjQtQXVnLTIwMDQgQkpEICBTdGFydCBvZiBTM0MyNDQwIENQVSBzdXBwb3J0Ci0gKgkwNC1Ob3YtMjAwNCBCSkQgIEFkZGVkIHMzYzI0NDBfaW5pdF91YXJ0cygpCi0gKgkwNC1KYW4tMjAwNSBCSkQgIE1vdmVkIHVhcnQgaW5pdCB0byBjcHUgY29kZQotICoJMTAtSmFuLTIwMDUgQkpEICBNb3ZlZCAyNDQwIHNwZWNpZmljIGluaXQgaGVyZQotICoJMTQtSmFuLTIwMDUgQkpEICBTcGxpdCB0aGUgY2xvY2sgaW5pdGlhbGlzYXRpb24gY29kZQogKi8KIAogI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAotCiBleHRlcm4gIGludCBzM2MyNDQwX2luaXQodm9pZCk7Ci0KLWV4dGVybiB2b2lkIHMzYzI0NDBfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7Ci0KLWV4dGVybiB2b2lkIHMzYzI0NDBfaW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7Ci0KLWV4dGVybiB2b2lkIHMzYzI0NDBfaW5pdF9jbG9ja3MoaW50IHh0YWwpOwotCiAjZWxzZQotI2RlZmluZSBzM2MyNDQwX2luaXRfY2xvY2tzIE5VTEwKLSNkZWZpbmUgczNjMjQ0MF9pbml0X3VhcnRzIE5VTEwKLSNkZWZpbmUgczNjMjQ0MF9tYXBfaW8gTlVMTAogI2RlZmluZSBzM2MyNDQwX2luaXQgTlVMTAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi1jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDItY2xvY2suYwppbmRleCBkOWY1NGI1Li40ZTI5MmNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi1jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLWNsb2NrLmMKQEAgLTExNywxOCArMTE3LDE4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBjYW1kaXZuID0gX19yYXdfcmVhZGwoUzNDMjQ0MF9DQU1ESVZOKTsKIAl1bnNpZ25lZCBsb25nIGNsa2Rpdm47Ci0Jc3RydWN0IGNsayAqY2xrX2g7Ci0Jc3RydWN0IGNsayAqY2xrX3A7Ci0Jc3RydWN0IGNsayAqY2xrX3VwbGw7CisJc3RydWN0IGNsayAqY2xvY2tfaDsKKwlzdHJ1Y3QgY2xrICpjbG9ja19wOworCXN0cnVjdCBjbGsgKmNsb2NrX3VwbGw7CiAKIAlwcmludGsoIlMzQzI0NDI6IENsb2NrIFN1cHBvcnQsIERWUyAlc1xuIiwKIAkgICAgICAgKGNhbWRpdm4gJiBTM0MyNDQwX0NBTURJVk5fRFZTRU4pID8gIm9uIiA6ICJvZmYiKTsKIAotCWNsa19wID0gY2xrX2dldChOVUxMLCAicGNsayIpOwotCWNsa19oID0gY2xrX2dldChOVUxMLCAiaGNsayIpOwotCWNsa191cGxsID0gY2xrX2dldChOVUxMLCAidXBsbCIpOworCWNsb2NrX3AgPSBjbGtfZ2V0KE5VTEwsICJwY2xrIik7CisJY2xvY2tfaCA9IGNsa19nZXQoTlVMTCwgImhjbGsiKTsKKwljbG9ja191cGxsID0gY2xrX2dldChOVUxMLCAidXBsbCIpOwogCi0JaWYgKElTX0VSUihjbGtfcCkgfHwgSVNfRVJSKGNsa19oKSB8fCBJU19FUlIoY2xrX3VwbGwpKSB7CisJaWYgKElTX0VSUihjbG9ja19wKSB8fCBJU19FUlIoY2xvY2tfaCkgfHwgSVNfRVJSKGNsb2NrX3VwbGwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUzNDMjQ0MjogRmFpbGVkIHRvIGdldCBwYXJlbnQgY2xvY2tzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTM2LDggKzEzNiw4IEBACiAJLyogY2hlY2sgcmF0ZSBvZiBVUExMLCBhbmQgaWYgaXQgaXMgbmVhciA5Nk1IeiwgdGhlbiBjaGFuZ2UKIAkgKiB0byB1c2luZyBoYWxmIHRoZSBVUExMIHJhdGUgZm9yIHRoZSBzeXN0ZW0gKi8KIAotCWlmIChjbGtfZ2V0X3JhdGUoY2xrX3VwbGwpID4gKDk0ICogTUhaKSkgewotCQljbGtfdXNiX2J1cy5yYXRlID0gY2xrX2dldF9yYXRlKGNsa191cGxsKSAvIDI7CisJaWYgKGNsa19nZXRfcmF0ZShjbG9ja191cGxsKSA+ICg5NCAqIE1IWikpIHsKKwkJY2xrX3VzYl9idXMucmF0ZSA9IGNsa19nZXRfcmF0ZShjbG9ja191cGxsKSAvIDI7CiAKIAkJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKIApAQCAtMTQ4LDggKzE0OCw4IEBACiAJCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKIAl9CiAKLQlzM2MyNDQyX2Nsa19jYW0ucGFyZW50ID0gY2xrX2g7Ci0JczNjMjQ0Ml9jbGtfY2FtX3VwbGwucGFyZW50ID0gY2xrX3VwbGw7CisJczNjMjQ0Ml9jbGtfY2FtLnBhcmVudCA9IGNsb2NrX2g7CisJczNjMjQ0Ml9jbGtfY2FtX3VwbGwucGFyZW50ID0gY2xvY2tfdXBsbDsKIAogCXMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJnMzYzI0NDJfY2xrX2NhbSk7CiAJczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0Ml9jbGtfY2FtX3VwbGwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLmMKaW5kZXggNTgxNjY3ZS4uNDI4NzMyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi5jCkBAIC0xNiwyOSArMTYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpb2ouaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWRzYy5oPgogCiAjaW5jbHVkZSAiczNjMjQ0Mi5oIgotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiZGV2cy5oIgogI2luY2x1ZGUgImNwdS5oIgotI2luY2x1ZGUgInBtLmgiCiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2MyNDQyX3N5c2RldiA9IHsKIAkuY2xzCQk9ICZzM2MyNDQyX3N5c2NsYXNzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHguYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LmMKaW5kZXggOWEyMjU4Mi4uMjNjNzQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHguYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CkBAIC00Nyw4ICs0OCw2IEBACiAJSU9ERVNDX0VOVChUSU1FUiksCiAJSU9ERVNDX0VOVChXQVRDSERPRyksCiAJSU9ERVNDX0VOVChMQ0QpLAotCUlPREVTQ19FTlQoQURDKSwKLQlJT0RFU0NfRU5UKFVTQkhPU1QpLAogfTsKIAogLyogdWFydCBpbml0aWFsaXNhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmgKaW5kZXggZDhhYTYxMi4uMDM4NDJlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5oCkBAIC0xMCw5ICsxMCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKgkyMC1BdWctMjAwNCBCSkQgIENyZWF0ZWQKICovCiAKIGV4dGVybiBpbnQgdXNiX3NpbXRlY19pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMC5jCmluZGV4IDE3ZjVhNDMuLjU0ZWNkYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwLmMKQEAgLTEsNSArMSwxNSBAQAogLyoKICAqIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYworICoKKyAqIEhQIEpvcm5hZGE3MjAgaW5pdCBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEZpbGlwIFp5em5pZXdza2kgPGZpbGlwLnp5em5pZXdza2lAdGVmbmV0LnBsPgorICogIENvcHlyaWdodCAoQykgMjAwNSBNaWNoYWVsIEdlcm5vdGggPG1pY2hhZWxAZ2Vybm90aC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEwLDEzICsyMCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPHZpZGVvL3MxZDEzeHh4ZmIuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zYTExMTEuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMjQsMTMgKzM0LDE3MCBAQAogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCisvKgorICogSFAgRG9jdW1lbnRhdGlvbiByZWZlcnJlZCBpbiB0aGlzIGZpbGU6CisgKiBodHRwOi8vd3d3LmpsaW1lLmNvbS9kb3dubG9hZHMvZGV2ZWxvcG1lbnQvZG9jcy9qb3JuYWRhN3h4L2pvcm5hZGE3MjAudHh0CisgKi8KIAotI2RlZmluZSBKT1JUVUNSX1ZBTAkweDIwMDAwNDAwCisvKiBsaW5lIDExMCBvZiBIUCdzIGRvYyAqLworI2RlZmluZSBUVUNSX1ZBTAkweDIwMDAwNDAwCisKKy8qIG1lbW9yeSBzcGFjZSAobGluZSA1MiBvZiBIUCdzIGRvYykgKi8KKyNkZWZpbmUgU0ExMTExUkVHU1RBUlQJMHg0MDAwMDAwMAorI2RlZmluZSBTQTExMTFSRUdMRU4JMHgwMDAwMWZmZgorI2RlZmluZSBFUFNPTlJFR1NUQVJUCTB4NDgwMDAwMDAKKyNkZWZpbmUgRVBTT05SRUdMRU4JMHgwMDEwMDAwMAorI2RlZmluZSBFUFNPTkZCU1RBUlQJMHg0ODIwMDAwMAorLyogNTEya0IgZnJhbWVidWZmZXIgKi8KKyNkZWZpbmUgRVBTT05GQkxFTgk1MTIqMTAyNAorCitzdGF0aWMgc3RydWN0IHMxZDEzeHh4ZmJfcmVndmFsIHMxZDEzeHh4ZmJfaW5pdHJlZ3NbXSA9IHsKKwkvKiBsaW5lIDM0NCBvZiBIUCdzIGRvYyAqLworCXsweDAwMDEsMHgwMH0sCS8vIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIKKwl7MHgwMUZDLDB4MDB9LAkvLyBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIKKwl7MHgwMDA0LDB4MDB9LAkvLyBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwCisJezB4MDAwNSwweDAwfSwJLy8gR2VuZXJhbCBJTyBQaW5zIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorCXsweDAwMDgsMHgwMH0sCS8vIEdlbmVyYWwgSU8gUGlucyBDb250cm9sIFJlZ2lzdGVyIDAKKwl7MHgwMDA5LDB4MDB9LAkvLyBHZW5lcmFsIElPIFBpbnMgQ29udHJvbCBSZWdpc3RlciAxCisJezB4MDAxMCwweDAxfSwJLy8gTWVtb3J5IENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKwl7MHgwMDE0LDB4MTF9LAkvLyBMQ0QgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorCXsweDAwMTgsMHgwMX0sCS8vIENSVC9UViBQaXhlbCBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisJezB4MDAxQywweDAxfSwJLy8gTWVkaWFQbHVnIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKwl7MHgwMDFFLDB4MDF9LAkvLyBDUFUgVG8gTWVtb3J5IFdhaXQgU3RhdGUgU2VsZWN0IFJlZ2lzdGVyCisJezB4MDAyMCwweDAwfSwJLy8gTWVtb3J5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKwl7MHgwMDIxLDB4NDV9LAkvLyBEUkFNIFJlZnJlc2ggUmF0ZSBSZWdpc3RlcgorCXsweDAwMkEsMHgwMX0sCS8vIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDAKKwl7MHgwMDJCLDB4MDN9LAkvLyBEUkFNIFRpbWluZ3MgQ29udHJvbCBSZWdpc3RlciAxCisJezB4MDAzMCwweDFjfSwJLy8gUGFuZWwgVHlwZSBSZWdpc3RlcgorCXsweDAwMzEsMHgwMH0sCS8vIE1PRCBSYXRlIFJlZ2lzdGVyCisJezB4MDAzMiwweDRGfSwJLy8gTENEIEhvcml6b250YWwgRGlzcGxheSBXaWR0aCBSZWdpc3RlcgorCXsweDAwMzQsMHgwN30sCS8vIExDRCBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlcgorCXsweDAwMzUsMHgwMX0sCS8vIFRGVCBGUExJTkUgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIKKwl7MHgwMDM2LDB4MEJ9LAkvLyBURlQgRlBMSU5FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyCisJezB4MDAzOCwweEVGfSwJLy8gTENEIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDAKKwl7MHgwMDM5LDB4MDB9LAkvLyBMQ0QgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMQorCXsweDAwM0EsMHgxM30sCS8vIExDRCBWZXJ0aWNhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIKKwl7MHgwMDNCLDB4MEJ9LAkvLyBURlQgRlBGUkFNRSBTdGFydCBQb3NpdGlvbiBSZWdpc3RlcgorCXsweDAwM0MsMHgwMX0sCS8vIFRGVCBGUEZSQU1FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyCisJezB4MDA0MCwweDA1fSwJLy8gTENEIERpc3BsYXkgTW9kZSBSZWdpc3RlciAoMjo0YnBwLDM6OGJwcCw1OjE2YnBwKQorCXsweDAwNDEsMHgwMH0sCS8vIExDRCBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyCisJezB4MDA0MiwweDAwfSwJLy8gTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwCisJezB4MDA0MywweDAwfSwJLy8gTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxCisJezB4MDA0NCwweDAwfSwJLy8gTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyCisJezB4MDA0NiwweDgwfSwJLy8gTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwCisJezB4MDA0NywweDAyfSwJLy8gTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxCisJezB4MDA0OCwweDAwfSwJLy8gTENEIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIKKwl7MHgwMDRBLDB4MDB9LAkvLyBMQ0QgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIKKwl7MHgwMDRCLDB4MDB9LAkvLyBMQ0QgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlcgorCXsweDAwNTAsMHg0Rn0sCS8vIENSVC9UViBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIKKwl7MHgwMDUyLDB4MTN9LAkvLyBDUlQvVFYgSG9yaXpvbnRhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIKKwl7MHgwMDUzLDB4MDF9LAkvLyBDUlQvVFYgSFJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlcgorCXsweDAwNTQsMHgwQn0sCS8vIENSVC9UViBIUlRDIFB1bHNlIFdpZHRoIFJlZ2lzdGVyCisJezB4MDA1NiwweERGfSwJLy8gQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDAKKwl7MHgwMDU3LDB4MDF9LAkvLyBDUlQvVFYgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMQorCXsweDAwNTgsMHgyQn0sCS8vIENSVC9UViBWZXJ0aWNhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIKKwl7MHgwMDU5LDB4MDl9LAkvLyBDUlQvVFYgVlJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlcgorCXsweDAwNUEsMHgwMX0sCS8vIENSVC9UViBWUlRDIFB1bHNlIFdpZHRoIFJlZ2lzdGVyCisJezB4MDA1QiwweDEwfSwJLy8gVFYgT3V0cHV0IENvbnRyb2wgUmVnaXN0ZXIKKwl7MHgwMDYwLDB4MDN9LAkvLyBDUlQvVFYgRGlzcGxheSBNb2RlIFJlZ2lzdGVyICgyOjRicHAsMzo4YnBwLDU6MTZicHApCisJezB4MDA2MiwweDAwfSwJLy8gQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwCisJezB4MDA2MywweDAwfSwJLy8gQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxCisJezB4MDA2NCwweDAwfSwJLy8gQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyCisJezB4MDA2NiwweDQwfSwJLy8gQ1JUL1RWIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwCisJezB4MDA2NywweDAxfSwJLy8gQ1JUL1RWIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxCisJezB4MDA2OCwweDAwfSwJLy8gQ1JUL1RWIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIKKwl7MHgwMDZBLDB4MDB9LAkvLyBDUlQvVFYgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIKKwl7MHgwMDZCLDB4MDB9LAkvLyBDUlQvVFYgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlcgorCXsweDAwNzAsMHgwMH0sCS8vIExDRCBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIKKwl7MHgwMDcxLDB4MDF9LAkvLyBMQ0QgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCisJezB4MDA3MiwweDAwfSwJLy8gTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAKKwl7MHgwMDczLDB4MDB9LAkvLyBMQ0QgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMQorCXsweDAwNzQsMHgwMH0sCS8vIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwCisJezB4MDA3NSwweDAwfSwJLy8gTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEKKwl7MHgwMDc2LDB4MDB9LAkvLyBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIKKwl7MHgwMDc3LDB4MDB9LAkvLyBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyCisJezB4MDA3OCwweDAwfSwJLy8gTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIKKwl7MHgwMDdBLDB4MUZ9LAkvLyBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIKKwl7MHgwMDdCLDB4M0Z9LAkvLyBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyCisJezB4MDA3QywweDFGfSwJLy8gTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIKKwl7MHgwMDdFLDB4MDB9LAkvLyBMQ0QgSW5rL0N1cnNvciBGSUZPIFRocmVzaG9sZCBSZWdpc3RlcgorCXsweDAwODAsMHgwMH0sCS8vIENSVC9UViBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIKKwl7MHgwMDgxLDB4MDF9LAkvLyBDUlQvVFYgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCisJezB4MDA4MiwweDAwfSwJLy8gQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAKKwl7MHgwMDgzLDB4MDB9LAkvLyBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMQorCXsweDAwODQsMHgwMH0sCS8vIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwCisJezB4MDA4NSwweDAwfSwJLy8gQ1JUL1RWIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEKKwl7MHgwMDg2LDB4MDB9LAkvLyBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIKKwl7MHgwMDg3LDB4MDB9LAkvLyBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyCisJezB4MDA4OCwweDAwfSwJLy8gQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIKKwl7MHgwMDhBLDB4MUZ9LAkvLyBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIKKwl7MHgwMDhCLDB4M0Z9LAkvLyBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyCisJezB4MDA4QywweDFGfSwJLy8gQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIKKwl7MHgwMDhFLDB4MDB9LAkvLyBDUlQvVFYgSW5rL0N1cnNvciBGSUZPIFRocmVzaG9sZCBSZWdpc3RlcgorCXsweDAxMDAsMHgwMH0sCS8vIEJpdEJsdCBDb250cm9sIFJlZ2lzdGVyIDAKKwl7MHgwMTAxLDB4MDB9LAkvLyBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAxCisJezB4MDEwMiwweDAwfSwJLy8gQml0Qmx0IFJPUCBDb2RlL0NvbG9yIEV4cGFuc2lvbiBSZWdpc3RlcgorCXsweDAxMDMsMHgwMH0sCS8vIEJpdEJsdCBPcGVyYXRpb24gUmVnaXN0ZXIKKwl7MHgwMTA0LDB4MDB9LAkvLyBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMAorCXsweDAxMDUsMHgwMH0sCS8vIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxCisJezB4MDEwNiwweDAwfSwJLy8gQml0Qmx0IFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIKKwl7MHgwMTA4LDB4MDB9LAkvLyBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwCisJezB4MDEwOSwweDAwfSwJLy8gQml0Qmx0IERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMQorCXsweDAxMEEsMHgwMH0sCS8vIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIKKwl7MHgwMTBDLDB4MDB9LAkvLyBCaXRCbHQgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAKKwl7MHgwMTBELDB4MDB9LAkvLyBCaXRCbHQgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEKKwl7MHgwMTEwLDB4MDB9LAkvLyBCaXRCbHQgV2lkdGggUmVnaXN0ZXIgMAorCXsweDAxMTEsMHgwMH0sCS8vIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAxCisJezB4MDExMiwweDAwfSwJLy8gQml0Qmx0IEhlaWdodCBSZWdpc3RlciAwCisJezB4MDExMywweDAwfSwJLy8gQml0Qmx0IEhlaWdodCBSZWdpc3RlciAxCisJezB4MDExNCwweDAwfSwJLy8gQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMAorCXsweDAxMTUsMHgwMH0sCS8vIEJpdEJsdCBCYWNrZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDEKKwl7MHgwMTE4LDB4MDB9LAkvLyBCaXRCbHQgRm9yZWdyb3VuZCBDb2xvciBSZWdpc3RlciAwCisJezB4MDExOSwweDAwfSwJLy8gQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMQorCXsweDAxRTAsMHgwMH0sCS8vIExvb2stVXAgVGFibGUgTW9kZSBSZWdpc3RlcgorCXsweDAxRTIsMHgwMH0sCS8vIExvb2stVXAgVGFibGUgQWRkcmVzcyBSZWdpc3RlcgorCS8qIG5vdCBzdXJlLCB3b3VsZG4ndCBsaWtlIHRvIG1lc3Mgd2l0aCB0aGUgZHJpdmVyICovCisJezB4MDFFNCwweDAwfSwJLy8gTG9vay1VcCBUYWJsZSBEYXRhIFJlZ2lzdGVyCisJLyogam9ybmFkYSBkb2Mgc2F5cyAweDAwLCBidXQgSSB0cnVzdCB0aGUgZHJpdmVyICovCisJezB4MDFGMCwweDEwfSwJLy8gUG93ZXIgU2F2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisJezB4MDFGMSwweDAwfSwJLy8gUG93ZXIgU2F2ZSBTdGF0dXMgUmVnaXN0ZXIKKwl7MHgwMUY0LDB4MDB9LAkvLyBDUFUtdG8tTWVtb3J5IEFjY2VzcyBXYXRjaGRvZyBUaW1lciBSZWdpc3RlcgorCXsweDAxRkMsMHgwMX0sCS8vIERpc3BsYXkgTW9kZSBSZWdpc3RlcigweDAxOkxDRCwgMHgwMjpDUlQsIDB4MDM6TENEJkNSVCkKK307CisKK3N0YXRpYyBzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSBzMWQxM3h4eGZiX2RhdGEgPSB7CisJLmluaXRyZWdzCQk9IHMxZDEzeHh4ZmJfaW5pdHJlZ3MsCisJLmluaXRyZWdzc2l6ZQkJPSBBUlJBWV9TSVpFKHMxZDEzeHh4ZmJfaW5pdHJlZ3MpLAorCS5wbGF0Zm9ybV9pbml0X3ZpZGVvCT0gTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzMWQxM3h4eGZiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gRVBTT05GQlNUQVJULAorCQkuZW5kCT0gRVBTT05GQlNUQVJUICsgRVBTT05GQkxFTiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEVQU09OUkVHU1RBUlQsCisJCS5lbmQJPSBFUFNPTlJFR1NUQVJUICsgRVBTT05SRUdMRU4sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMxZDEzeHh4ZmJfZGV2aWNlID0geworCS5uYW1lCQk9IFMxRF9ERVZJQ0VOQU1FLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzMWQxM3h4eGZiX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczFkMTN4eHhmYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHMxZDEzeHh4ZmJfcmVzb3VyY2VzLAorfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzYTExMTFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJCT0gMHg0MDAwMDAwMCwKLQkJLmVuZAkJPSAweDQwMDAxZmZmLAorCQkuc3RhcnQJCT0gU0ExMTExUkVHU1RBUlQsCisJCS5lbmQJCT0gU0ExMTExUkVHU1RBUlQgKyBTQTExMTFSRUdMRU4sCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTUzLDE4ICsyMjAsMzIgQEAKIAkucmVzb3VyY2UJPSBzYTExMTFfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugam9ybmFkYTcyMF9tY3VfZGV2aWNlID0geworCS5uYW1lCQk9ICJqb3JuYWRhNzIwX21jdSIsCisJLmlkCQk9IC0xLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzYTExMTFfZGV2aWNlLAorCSZqb3JuYWRhNzIwX21jdV9kZXZpY2UsCisJJnMxZDEzeHh4ZmJfZGV2aWNlLAogfTsKIAorLyogYSBzdHViIGZvciBub3csIHdlIHRoZW9yZXRpY2FsbHkgY2Fubm90IHN1c3BlbmQgd2l0aG91dCBhIGZsYXNoYm9hcmQgKi8KK2ludCBwbV9zdXNwZW5kKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gLTE7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGpvcm5hZGE3MjBfaW5pdCh2b2lkKQogewogCWludCByZXQgPSAtRU5PREVWOwogCiAJaWYgKG1hY2hpbmVfaXNfam9ybmFkYTcyMCgpKSB7CiAJCUdQRFIgfD0gR1BJT19HUElPMjA7Ci0JCVRVQ1IgPSBKT1JUVUNSX1ZBTDsJLyogc2V0IHRoZSBvc2NpbGxhdG9yIG91dCB0byB0aGUgU0EtMTEwMSAqLwotCisJCS8qIG9zY2lsbGF0b3Igc2V0dXAgKGxpbmUgMTE2IG9mIEhQJ3MgZG9jKSAqLworCQlUVUNSID0gVFVDUl9WQUw7CisJCS8qIHJlc2V0dGluZyBTQTExMTEgKGxpbmUgMTE4IG9mIEhQJ3MgZG9jKSAqLwogCQlHUFNSID0gR1BJT19HUElPMjA7CiAJCXVkZWxheSgxKTsKIAkJR1BDUiA9IEdQSU9fR1BJTzIwOwpAQCAtNzIsMTAgKzI1Myw2IEBACiAJCUdQU1IgPSBHUElPX0dQSU8yMDsKIAkJdWRlbGF5KDIwKTsKIAotCQkvKiBMREQ0IGlzIHNwZWFrZXIsIExERDMgaXMgbWljcm9waG9uZSAqLwotCQlQUFNSICY9IH4oUFBDX0xERDMgfCBQUENfTERENCk7Ci0JCVBQRFIgfD0gUFBDX0xERDMgfCBQUENfTERENDsKLQogCQlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTg1LDE5ICsyNjIsMTkgQEAKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBqb3JuYWRhNzIwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsJLyogRXBzb24gcmVnaXN0ZXJzICovCi0JCS52aXJ0dWFsCT0gIDB4ZjAwMDAwMDAsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbigweDQ4MDAwMDAwKSwKLQkJLmxlbmd0aAkJPSAweDAwMTAwMDAwLAorCQkudmlydHVhbAk9IDB4ZjAwMDAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFUFNPTlJFR1NUQVJUKSwKKwkJLmxlbmd0aAkJPSBFUFNPTlJFR0xFTiwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewkvKiBFcHNvbiBmcmFtZSBidWZmZXIgKi8KLQkJLnZpcnR1YWwJPSAgMHhmMTAwMDAwMCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4NDgyMDAwMDApLAotCQkubGVuZ3RoCQk9IDB4MDAxMDAwMDAsCisJCS52aXJ0dWFsCT0gMHhmMTAwMDAwMCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEVQU09ORkJTVEFSVCksCisJCS5sZW5ndGgJCT0gRVBTT05GQkxFTiwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewkvKiBTQS0xMTExICovCi0JCS52aXJ0dWFsCT0gIDB4ZjQwMDAwMDAsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbigweDQwMDAwMDAwKSwKLQkJLmxlbmd0aAkJPSAweDAwMTAwMDAwLAorCQkudmlydHVhbAk9IDB4ZjQwMDAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTQTExMTFSRUdTVEFSVCksCisJCS5sZW5ndGgJCT0gU0ExMTExUkVHTEVOLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9CiB9OwpAQCAtMTA2LDcgKzI4Myw3IEBACiB7CiAJc2ExMTAwX21hcF9pbygpOwogCWlvdGFibGVfaW5pdChqb3JuYWRhNzIwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoam9ybmFkYTcyMF9pb19kZXNjKSk7Ci0JCisKIAlzYTExMDBfcmVnaXN0ZXJfdWFydCgwLCAzKTsKIAlzYTExMDBfcmVnaXN0ZXJfdWFydCgxLCAxKTsKIH0KQEAgLTExNiw3ICsyOTMsNyBAQAogCQkubmFtZQkJPSAiSk9STkFEQTcyMCBib290IGZpcm13YXJlIiwKIAkJLnNpemUJCT0gMHgwMDA0MDAwMCwKIAkJLm9mZnNldAkJPSAwLAotCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KIAl9LCB7CiAJCS5uYW1lCQk9ICJKT1JOQURBNzIwIGtlcm5lbCIsCiAJCS5zaXplCQk9IDB4MDAwYzAwMDAsCkBAIC0xMzksNyArMzE2LDcgQEAKIAkJLm9mZnNldAkJPSAweDAwNTQwMDAwLAogCX0sIHsKIAkJLm5hbWUJCT0gIkpPUk5BREE3MjAgdXNyIGxvY2FsIiwKLQkJLnNpemUJCT0gMCwgIC8qIHdpbGwgZXhwYW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZsYXNoICovCisJCS5zaXplCQk9IDAsIC8qIHdpbGwgZXhwYW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZsYXNoICovCiAJCS5vZmZzZXQJCT0gMHgwMGQwMDAwMCwKIAl9CiB9OwpAQCAtMTQ3LDEwICszMjQsMTIgQEAKIHN0YXRpYyB2b2lkIGpvcm5hZGE3MjBfc2V0X3ZwcChpbnQgdnBwKQogewogCWlmICh2cHApCi0JCVBQU1IgfD0gMHg4MDsKKwkJLyogZW5hYmxpbmcgZmxhc2ggd3JpdGUgKGxpbmUgNDcwIG9mIEhQJ3MgZG9jKSAqLworCQlQUFNSIHw9IFBQQ19MREQ3OwogCWVsc2UKLQkJUFBTUiAmPSB+MHg4MDsKLQlQUERSIHw9IDB4ODA7CisJCS8qIGRpc2FibGluZyBmbGFzaCB3cml0ZSAobGluZSA0NzAgb2YgSFAncyBkb2MpICovCisJCVBQU1IgJj0gflBQQ19MREQ3OworCVBQRFIgfD0gUFBDX0xERDc7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBqb3JuYWRhNzIwX2ZsYXNoX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggNTcxOTY5NC4uYmY3MTUwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtMzI1LDYgKzMyNSwxOSBAQAogCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHZlcnNhdGlsZV9pMmNfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQkJPSBWRVJTQVRJTEVfSTJDX0JBU0UsCisJLmVuZAkJCT0gVkVSU0FUSUxFX0kyQ19CQVNFICsgU1pfNEsgLSAxLAorCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2ZXJzYXRpbGVfaTJjX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInZlcnNhdGlsZS1pMmMiLAorCS5pZAkJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJCT0gMSwKKwkucmVzb3VyY2UJCT0gJnZlcnNhdGlsZV9pMmNfcmVzb3VyY2UsCit9OworCiAjZGVmaW5lIFZFUlNBVElMRV9TWVNNQ0kJKF9faW9fYWRkcmVzcyhWRVJTQVRJTEVfU1lTX0JBU0UpICsgVkVSU0FUSUxFX1NZU19NQ0lfT0ZGU0VUKQogCiB1bnNpZ25lZCBpbnQgbW1jX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC03NzUsNiArNzg4LDcgQEAKIAljbGtfcmVnaXN0ZXIoJnZlcnNhdGlsZV9jbGNkX2Nsayk7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZlcnNhdGlsZV9mbGFzaF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdmVyc2F0aWxlX2kyY19kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21jOTF4X2RldmljZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYyBiL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYwppbmRleCBiNzk3MjE3Li42YTljMzYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb25zaXN0ZW50LmMKKysrIGIvYXJjaC9hcm0vbW0vY29uc2lzdGVudC5jCkBAIC0yMzgsNyArMjM4LDcgQEAKIAkJCSAqIHg4NiBkb2VzIG5vdCBtYXJrIHRoZSBwYWdlcyByZXNlcnZlZC4uLgogCQkJICovCiAJCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JCQlzZXRfcHRlKHB0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpKTsKKwkJCXNldF9wdGVfZXh0KHB0ZSwgbWtfcHRlKHBhZ2UsIHByb3QpLCAwKTsKIAkJCXBhZ2UrKzsKIAkJCXB0ZSsrOwogCQkJb2ZmKys7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLmMKaW5kZXggZGYxNjQ1ZS4uZGVkMGU5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjRtYy5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAibW0uaCIKIApAQCAtNjksOSArNzAsMTQgQEAKIAogdm9pZCB2NF9tY19jb3B5X3VzZXJfcGFnZSh2b2lkICprdG8sIGNvbnN0IHZvaWQgKmtmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyKQogeworCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKGtmcm9tKTsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpKQorCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VfbWFwcGluZyhwYWdlKSwgcGFnZSk7CisKIAlzcGluX2xvY2soJm1pbmljYWNoZV9sb2NrKTsKIAotCXNldF9wdGUoVE9QX1BURSgweGZmZmY4MDAwKSwgcGZuX3B0ZShfX3BhKGtmcm9tKSA+PiBQQUdFX1NISUZULCBtaW5pY2FjaGVfcGdwcm90KSk7CisJc2V0X3B0ZV9leHQoVE9QX1BURSgweGZmZmY4MDAwKSwgcGZuX3B0ZShfX3BhKGtmcm9tKSA+PiBQQUdFX1NISUZULCBtaW5pY2FjaGVfcGdwcm90KSwgMCk7CiAJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKDB4ZmZmZjgwMDApOwogCiAJbWNfY29weV91c2VyX3BhZ2UoKHZvaWQgKikweGZmZmY4MDAwLCBrdG8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKaW5kZXggM2QwZDNhOS4uM2FkYjc5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12Ni5jCkBAIC01Myw2ICs1MywxMCBAQAogewogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBDQUNIRV9DT0xPVVIodmFkZHIpOwogCXVuc2lnbmVkIGxvbmcgZnJvbSwgdG87CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoa2Zyb20pOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncykpCisJCV9fZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9tYXBwaW5nKHBhZ2UpLCBwYWdlKTsKIAogCS8qCiAJICogRGlzY2FyZCBkYXRhIGluIHRoZSBrZXJuZWwgbWFwcGluZyBmb3IgdGhlIG5ldyBwYWdlLgpAQCAtNzAsOCArNzQsOCBAQAogCSAqLwogCXNwaW5fbG9jaygmdjZfbG9jayk7CiAKLQlzZXRfcHRlKFRPUF9QVEUoZnJvbV9hZGRyZXNzKSArIG9mZnNldCwgcGZuX3B0ZShfX3BhKGtmcm9tKSA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCkpOwotCXNldF9wdGUoVE9QX1BURSh0b19hZGRyZXNzKSArIG9mZnNldCwgcGZuX3B0ZShfX3BhKGt0bykgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpKTsKKwlzZXRfcHRlX2V4dChUT1BfUFRFKGZyb21fYWRkcmVzcykgKyBvZmZzZXQsIHBmbl9wdGUoX19wYShrZnJvbSkgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpLCAwKTsKKwlzZXRfcHRlX2V4dChUT1BfUFRFKHRvX2FkZHJlc3MpICsgb2Zmc2V0LCBwZm5fcHRlKF9fcGEoa3RvKSA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCksIDApOwogCiAJZnJvbSA9IGZyb21fYWRkcmVzcyArIChvZmZzZXQgPDwgUEFHRV9TSElGVCk7CiAJdG8gICA9IHRvX2FkZHJlc3MgKyAob2Zmc2V0IDw8IFBBR0VfU0hJRlQpOwpAQCAtMTEwLDcgKzExNCw3IEBACiAJICovCiAJc3Bpbl9sb2NrKCZ2Nl9sb2NrKTsKIAotCXNldF9wdGUoVE9QX1BURSh0b19hZGRyZXNzKSArIG9mZnNldCwgcGZuX3B0ZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCkpOworCXNldF9wdGVfZXh0KFRPUF9QVEUodG9fYWRkcmVzcykgKyBvZmZzZXQsIHBmbl9wdGUoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpLCAwKTsKIAlmbHVzaF90bGJfa2VybmVsX3BhZ2UodG8pOwogCWNsZWFyX3BhZ2UoKHZvaWQgKil0byk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLmMKaW5kZXggODRlYmUwYS4uMmU0NTVmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAogI2luY2x1ZGUgIm1tLmgiCiAKQEAgLTkxLDkgKzkyLDE0IEBACiAKIHZvaWQgeHNjYWxlX21jX2NvcHlfdXNlcl9wYWdlKHZvaWQgKmt0bywgY29uc3Qgdm9pZCAqa2Zyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIpCiB7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoa2Zyb20pOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncykpCisJCV9fZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9tYXBwaW5nKHBhZ2UpLCBwYWdlKTsKKwogCXNwaW5fbG9jaygmbWluaWNhY2hlX2xvY2spOwogCi0Jc2V0X3B0ZShUT1BfUFRFKENPUFlQQUdFX01JTklDQUNIRSksIHBmbl9wdGUoX19wYShrZnJvbSkgPj4gUEFHRV9TSElGVCwgbWluaWNhY2hlX3BncHJvdCkpOworCXNldF9wdGVfZXh0KFRPUF9QVEUoQ09QWVBBR0VfTUlOSUNBQ0hFKSwgcGZuX3B0ZShfX3BhKGtmcm9tKSA+PiBQQUdFX1NISUZULCBtaW5pY2FjaGVfcGdwcm90KSwgMCk7CiAJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKENPUFlQQUdFX01JTklDQUNIRSk7CiAKIAltY19jb3B5X3VzZXJfcGFnZSgodm9pZCAqKUNPUFlQQUdFX01JTklDQUNIRSwga3RvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwppbmRleCA3ZmMxYjM1Li5jZjk1YzVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCkBAIC02MSw3ICs2MSw3IEBACiAJaWYgKHB0ZV9wcmVzZW50KGVudHJ5KSAmJiBwdGVfdmFsKGVudHJ5KSAmIHNoYXJlZF9wdGVfbWFzaykgewogCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkcmVzcywgcHRlX3BmbihlbnRyeSkpOwogCQlwdGVfdmFsKGVudHJ5KSAmPSB+c2hhcmVkX3B0ZV9tYXNrOwotCQlzZXRfcHRlKHB0ZSwgZW50cnkpOworCQlzZXRfcHRlX2F0KHZtYS0+dm1fbW0sIGFkZHJlc3MsIHB0ZSwgZW50cnkpOwogCQlmbHVzaF90bGJfcGFnZSh2bWEsIGFkZHJlc3MpOwogCQlyZXQgPSAxOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZsdXNoLmMgYi9hcmNoL2FybS9tbS9mbHVzaC5jCmluZGV4IDQ1NDIwNWIuLjlkZjUwN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZsdXNoLmMKKysrIGIvYXJjaC9hcm0vbW0vZmx1c2guYwpAQCAtMjYsNyArMjYsNyBAQAogCXVuc2lnbmVkIGxvbmcgdG8gPSBBTElBU19GTFVTSF9TVEFSVCArIChDQUNIRV9DT0xPVVIodmFkZHIpIDw8IFBBR0VfU0hJRlQpOwogCWNvbnN0IGludCB6ZXJvID0gMDsKIAotCXNldF9wdGUoVE9QX1BURSh0byksIHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTCkpOworCXNldF9wdGVfZXh0KFRPUF9QVEUodG8pLCBwZm5fcHRlKHBmbiwgUEFHRV9LRVJORUwpLCAwKTsKIAlmbHVzaF90bGJfa2VybmVsX3BhZ2UodG8pOwogCiAJYXNtKAkibWNycglwMTUsIDAsICUxLCAlMCwgYzE0XG4iCkBAIC0yMDIsMyArMjAyLDQyIEBACiAJfQogfQogRVhQT1JUX1NZTUJPTChmbHVzaF9kY2FjaGVfcGFnZSk7CisKKy8qCisgKiBGbHVzaCBhbiBhbm9ueW1vdXMgcGFnZSBzbyB0aGF0IHVzZXJzIG9mIGdldF91c2VyX3BhZ2VzKCkKKyAqIGNhbiBzYWZlbHkgYWNjZXNzIHRoZSBkYXRhLiAgVGhlIGV4cGVjdGVkIHNlcXVlbmNlIGlzOgorICoKKyAqICBnZXRfdXNlcl9wYWdlcygpCisgKiAgICAtPiBmbHVzaF9hbm9uX3BhZ2UKKyAqICBtZW1jcHkoKSB0by9mcm9tIHBhZ2UKKyAqICBpZiB3cml0dGVuIHRvIHBhZ2UsIGZsdXNoX2RjYWNoZV9wYWdlKCkKKyAqLwordm9pZCBfX2ZsdXNoX2Fub25fcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQoreworCXVuc2lnbmVkIGxvbmcgcGZuOworCisJLyogVklQVCBub24tYWxpYXNpbmcgY2FjaGVzIG5lZWQgZG8gbm90aGluZyAqLworCWlmIChjYWNoZV9pc192aXB0X25vbmFsaWFzaW5nKCkpCisJCXJldHVybjsKKworCS8qCisJICogV3JpdGUgYmFjayBhbmQgaW52YWxpZGF0ZSB1c2Vyc3BhY2UgbWFwcGluZy4KKwkgKi8KKwlwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwlpZiAoY2FjaGVfaXNfdml2dCgpKSB7CisJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRm9yIGFsaWFzaW5nIFZJUFQsIHdlIGNhbiBmbHVzaCBhbiBhbGlhcyBvZiB0aGUKKwkJICogdXNlcnNwYWNlIGFkZHJlc3Mgb25seS4KKwkJICovCisJCWZsdXNoX3Bmbl9hbGlhcyhwZm4sIHZtYWRkcik7CisJfQorCisJLyoKKwkgKiBJbnZhbGlkYXRlIGtlcm5lbCBtYXBwaW5nLiAgTm8gZGF0YSBzaG91bGQgYmUgY29udGFpbmVkCisJICogaW4gdGhpcyBtYXBwaW5nIG9mIHRoZSBwYWdlLiAgRklYTUU6IHRoaXMgaXMgb3ZlcmtpbGwKKwkgKiBzaW5jZSB3ZSBhY3R1YWxseSBhc2sgZm9yIGEgd3JpdGUtYmFjayBhbmQgaW52YWxpZGF0ZS4KKwkgKi8KKwlfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9hZGRyZXNzKHBhZ2UpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCBiNTgxNGI0Li43NzYwMTkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC01MiwxNSArNTIsMTggQEAKIAlwcmludGsoIkZyZWUgc3dhcDogICAgICAgJTZsZGtCXG4iLCBucl9zd2FwX3BhZ2VzPDwoUEFHRV9TSElGVC0xMCkpOwogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQlwZ19kYXRhX3QgKm4gPSBOT0RFX0RBVEEobm9kZSk7CisJCXN0cnVjdCBwYWdlICptYXAgPSBuLT5ub2RlX21lbV9tYXAgLSBuLT5ub2RlX3N0YXJ0X3BmbjsKKwogCQlmb3JfZWFjaF9ub2RlYmFuayAoaSxtaSxub2RlKSB7CiAJCQl1bnNpZ25lZCBpbnQgcGZuMSwgcGZuMjsKIAkJCXN0cnVjdCBwYWdlICpwYWdlLCAqZW5kOwogCi0JCQlwZm4xID0gbWktPmJhbmtbaV0uc3RhcnQgPj4gUEFHRV9TSElGVDsKLQkJCXBmbjIgPSAobWktPmJhbmtbaV0uc2l6ZSArIG1pLT5iYW5rW2ldLnN0YXJ0KSA+PiBQQUdFX1NISUZUOworCQkJcGZuMSA9IF9fcGh5c190b19wZm4obWktPmJhbmtbaV0uc3RhcnQpOworCQkJcGZuMiA9IF9fcGh5c190b19wZm4obWktPmJhbmtbaV0uc2l6ZSArIG1pLT5iYW5rW2ldLnN0YXJ0KTsKIAotCQkJcGFnZSA9IE5PREVfTUVNX01BUChub2RlKSArIHBmbjE7Ci0JCQllbmQgID0gTk9ERV9NRU1fTUFQKG5vZGUpICsgcGZuMjsKKwkJCXBhZ2UgPSBtYXAgKyBwZm4xOworCQkJZW5kICA9IG1hcCArIHBmbjI7CiAKIAkJCWRvIHsKIAkJCQl0b3RhbCsrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jIGIvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCmluZGV4IDQ2NTQ0MDUuLjBhYzYxNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2lvcmVtYXAuYworKysgYi9hcmNoL2FybS9tbS9pb3JlbWFwLmMKQEAgLTM4LDg5ICszOCw3MSBAQAogICovCiAjZGVmaW5lIFZNX0FSTV9TRUNUSU9OX01BUFBJTkcJMHg4MDAwMDAwMAogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXJlbWFwX2FyZWFfcHRlKHB0ZV90ICogcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHBncHJvdCkKK3N0YXRpYyBpbnQgcmVtYXBfYXJlYV9wdGUocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCiB7Ci0JdW5zaWduZWQgbG9uZyBlbmQ7CisJcHRlX3QgKnB0ZTsKIAotCWFkZHJlc3MgJj0gflBNRF9NQVNLOwotCWVuZCA9IGFkZHJlc3MgKyBzaXplOwotCWlmIChlbmQgPiBQTURfU0laRSkKLQkJZW5kID0gUE1EX1NJWkU7Ci0JQlVHX09OKGFkZHJlc3MgPj0gZW5kKTsKKwlwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcik7CisJaWYgKCFwdGUpCisJCXJldHVybiAtRU5PTUVNOworCiAJZG8gewogCQlpZiAoIXB0ZV9ub25lKCpwdGUpKQogCQkJZ290byBiYWQ7CiAKLQkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGh5c19hZGRyID4+IFBBR0VfU0hJRlQsIHBncHJvdCkpOwotCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKKwkJc2V0X3B0ZV9leHQocHRlLCBwZm5fcHRlKHBoeXNfYWRkciA+PiBQQUdFX1NISUZULCBwcm90KSwgMCk7CiAJCXBoeXNfYWRkciArPSBQQUdFX1NJWkU7Ci0JCXB0ZSsrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLQlyZXR1cm47CisJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CisJcmV0dXJuIDA7CiAKICBiYWQ6Ci0JcHJpbnRrKCJyZW1hcF9hcmVhX3B0ZTogcGFnZSBhbHJlYWR5IGV4aXN0c1xuIik7CisJcHJpbnRrKEtFUk5fQ1JJVCAicmVtYXBfYXJlYV9wdGU6IHBhZ2UgYWxyZWFkeSBleGlzdHNcbiIpOwogCUJVRygpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotcmVtYXBfYXJlYV9wbWQocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLAotCSAgICAgICB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyBpbmxpbmUgaW50IHJlbWFwX2FyZWFfcG1kKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAorCQkJCSBwZ3Byb3RfdCBwcm90KQogewotCXVuc2lnbmVkIGxvbmcgZW5kOwotCXBncHJvdF90IHBncHJvdDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisJcG1kX3QgKnBtZDsKKwlpbnQgcmV0ID0gMDsKIAotCWFkZHJlc3MgJj0gflBHRElSX01BU0s7Ci0JZW5kID0gYWRkcmVzcyArIHNpemU7CisJcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwZ2QsIGFkZHIpOworCWlmICghcG1kKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChlbmQgPiBQR0RJUl9TSVpFKQotCQllbmQgPSBQR0RJUl9TSVpFOwotCi0JcGh5c19hZGRyIC09IGFkZHJlc3M7Ci0JQlVHX09OKGFkZHJlc3MgPj0gZW5kKTsKLQotCXBncHJvdCA9IF9fcGdwcm90KExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX0RJUlRZIHwgTF9QVEVfV1JJVEUgfCBmbGFncyk7CiAJZG8gewotCQlwdGVfdCAqIHB0ZSA9IHB0ZV9hbGxvY19rZXJuZWwocG1kLCBhZGRyZXNzKTsKLQkJaWYgKCFwdGUpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJcmVtYXBfYXJlYV9wdGUocHRlLCBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzLCBhZGRyZXNzICsgcGh5c19hZGRyLCBwZ3Byb3QpOwotCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQTURfU0laRSkgJiBQTURfTUFTSzsKLQkJcG1kKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCXJldHVybiAwOworCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCXJldCA9IHJlbWFwX2FyZWFfcHRlKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXBoeXNfYWRkciArPSBuZXh0IC0gYWRkcjsKKwl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1yZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcGZuLAotCQkgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorc3RhdGljIGludCByZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcGZuLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSBzdGFydDsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydDsKKwl1bnNpZ25lZCBsb25nIG5leHQsIGVuZCA9IHN0YXJ0ICsgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHBoeXNfYWRkciA9IF9fcGZuX3RvX3BoeXMocGZuKTsKKwlwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QoTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwKKwkJCQkgTF9QVEVfRElSVFkgfCBMX1BURV9XUklURSB8IGZsYWdzKTsKKwlwZ2RfdCAqcGdkOwogCWludCBlcnIgPSAwOwotCXBnZF90ICogZGlyOwogCi0JcGh5c19hZGRyIC09IGFkZHJlc3M7Ci0JZGlyID0gcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcyk7Ci0JQlVHX09OKGFkZHJlc3MgPj0gZW5kKTsKKwlCVUdfT04oYWRkciA+PSBlbmQpOworCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKIAlkbyB7Ci0JCXBtZF90ICpwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIGRpciwgYWRkcmVzcyk7Ci0JCWlmICghcG1kKSB7Ci0JCQllcnIgPSAtRU5PTUVNOworCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWVyciA9IHJlbWFwX2FyZWFfcG1kKHBnZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90KTsKKwkJaWYgKGVycikKIAkJCWJyZWFrOwotCQl9Ci0JCWlmIChyZW1hcF9hcmVhX3BtZChwbWQsIGFkZHJlc3MsIGVuZCAtIGFkZHJlc3MsCi0JCQkJCSBwaHlzX2FkZHIgKyBhZGRyZXNzLCBmbGFncykpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlicmVhazsKLQkJfQotCi0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBHRElSX1NJWkUpICYgUEdESVJfTUFTSzsKLQkJZGlyKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOworCQlwaHlzX2FkZHIgKz0gbmV4dCAtIGFkZHI7CisJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzEwLDEzICsyOTIsMTYgQEAKIAlpZiAocGZuID49IDB4MTAwMDAwICYmIChfX3Bmbl90b19waHlzKHBmbikgJiB+U1VQRVJTRUNUSU9OX01BU0spKQogCQlyZXR1cm4gTlVMTDsKIAorCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCiAgCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKTsKICAJaWYgKCFhcmVhKQogIAkJcmV0dXJuIE5VTEw7CiAgCWFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOwogCiAjaWZuZGVmIENPTkZJR19TTVAKLQlpZiAoKCgoY3B1X2FyY2hpdGVjdHVyZSgpID49IENQVV9BUkNIX0FSTXY2KSAmJiAoZ2V0X2NyKCkgJiBDUl9YUCkpIHx8CisJaWYgKERPTUFJTl9JTyA9PSAwICYmCisJICAgICgoKGNwdV9hcmNoaXRlY3R1cmUoKSA+PSBDUFVfQVJDSF9BUk12NikgJiYgKGdldF9jcigpICYgQ1JfWFApKSB8fAogCSAgICAgICBjcHVfaXNfeHNjMygpKSAmJgogCSAgICAgICAhKChfX3Bmbl90b19waHlzKHBmbikgfCBzaXplIHwgYWRkcikgJiB+U1VQRVJTRUNUSU9OX01BU0spKSB7CiAJCWFyZWEtPmZsYWdzIHw9IFZNX0FSTV9TRUNUSU9OX01BUFBJTkc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbXUuYyBiL2FyY2gvYXJtL21tL21tdS5jCmluZGV4IGI3ZjE5NGEuLjY1NWM4MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tdS5jCisrKyBiL2FyY2gvYXJtL21tL21tdS5jCkBAIC0xNTQsNiArMTU0LDI2IEBACiB9CiBfX3NldHVwKCJub2FsaWduIiwgbm9hbGlnbl9zZXR1cCk7CiAKKyNpZm5kZWYgQ09ORklHX1NNUAordm9pZCBhZGp1c3RfY3IodW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIHNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbWFzayAmPSB+Q1JfQTsKKworCXNldCAmPSBtYXNrOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJY3Jfbm9fYWxpZ25tZW50ID0gKGNyX25vX2FsaWdubWVudCAmIH5tYXNrKSB8IHNldDsKKwljcl9hbGlnbm1lbnQgPSAoY3JfYWxpZ25tZW50ICYgfm1hc2spIHwgc2V0OworCisJc2V0X2NyKChnZXRfY3IoKSAmIH5tYXNrKSB8IHNldCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisjZW5kaWYKKwogc3RydWN0IG1lbV90eXBlcyB7CiAJdW5zaWduZWQgaW50CXByb3RfcHRlOwogCXVuc2lnbmVkIGludAlwcm90X2wxOwpAQCAtMjk0LDEyICszMTQsNiBAQAogCQltZW1fdHlwZXNbTVRfREVWSUNFXS5wcm90X3B0ZSB8PSBMX1BURV9CVUZGRVJBQkxFOwogCQltZW1fdHlwZXNbTVRfREVWSUNFXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfQlVGRkVSRUQ7CiAKLQkJLyoKLQkJICogVXNlciBwYWdlcyBuZWVkIHRvIGJlIG1hcHBlZCB3aXRoIHRoZSBBU0lECi0JCSAqIChpb3csIG5vbi1nbG9iYWwpCi0JCSAqLwotCQl1c2VyX3BncHJvdCB8PSBMX1BURV9BU0lEOwotCiAjaWZkZWYgQ09ORklHX1NNUAogCQkvKgogCQkgKiBNYXJrIG1lbW9yeSB3aXRoIHRoZSAic2hhcmVkIiBhdHRyaWJ1dGUgZm9yIFNNUCBzeXN0ZW1zCkBAIC00MDgsNyArNDIyLDcgQEAKIAl9CiAJcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIHZpcnQpOwogCi0Jc2V0X3B0ZShwdGVwLCBwZm5fcHRlKHBoeXMgPj4gUEFHRV9TSElGVCwgcHJvdCkpOworCXNldF9wdGVfZXh0KHB0ZXAsIHBmbl9wdGUocGh5cyA+PiBQQUdFX1NISUZULCBwcm90KSwgMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wZ2QuYyBiL2FyY2gvYXJtL21tL3BnZC5jCmluZGV4IDIwYzFiMGQuLjUwYjlhZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3BnZC5jCisrKyBiL2FyY2gvYXJtL21tL3BnZC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAKIAkJaW5pdF9wbWQgPSBwbWRfb2Zmc2V0KGluaXRfcGdkLCAwKTsKIAkJaW5pdF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoaW5pdF9wbWQsIDApOwotCQlzZXRfcHRlKG5ld19wdGUsICppbml0X3B0ZSk7CisJCXNldF9wdGVfZXh0KG5ld19wdGUsICppbml0X3B0ZSwgMCk7CiAJCXB0ZV91bm1hcF9uZXN0ZWQoaW5pdF9wdGUpOwogCQlwdGVfdW5tYXAobmV3X3B0ZSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwppbmRleCAyODliOGU2Li43MDBjMDRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAogICovCiAJLmFsaWduCTUKLUVOVFJZKGNwdV9hcm0xMDIwX3NldF9wdGUpCitFTlRSWShjcHVfYXJtMTAyMF9zZXRfcHRlX2V4dCkKICNpZmRlZiBDT05GSUdfTU1VCiAJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgogCkBAIC00NzcsNyArNDc3LDcgQEAKIAkud29yZAljcHVfYXJtMTAyMF9kb19pZGxlCiAJLndvcmQJY3B1X2FybTEwMjBfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyMF9zd2l0Y2hfbW0KLQkud29yZAljcHVfYXJtMTAyMF9zZXRfcHRlCisJLndvcmQJY3B1X2FybTEwMjBfc2V0X3B0ZV9leHQKIAkuc2l6ZQlhcm0xMDIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm0xMDIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCmluZGV4IGJlZDlkYjYuLjFjYzIwNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKQEAgLTM4MSw3ICszODEsNyBAQAogICogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQKICAqLwogCS5hbGlnbgk1Ci1FTlRSWShjcHVfYXJtMTAyMGVfc2V0X3B0ZSkKK0VOVFJZKGNwdV9hcm0xMDIwZV9zZXRfcHRlX2V4dCkKICNpZmRlZiBDT05GSUdfTU1VCiAJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgogCkBAIC00NTgsNyArNDU4LDcgQEAKIAkud29yZAljcHVfYXJtMTAyMGVfZG9faWRsZQogCS53b3JkCWNwdV9hcm0xMDIwZV9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm0xMDIwZV9zd2l0Y2hfbW0KLQkud29yZAljcHVfYXJtMTAyMGVfc2V0X3B0ZQorCS53b3JkCWNwdV9hcm0xMDIwZV9zZXRfcHRlX2V4dAogCS5zaXplCWFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm0xMDIwZV9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKaW5kZXggZDJhN2MxYi4uYWZmMGVhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKQEAgLTM1OCwxMiArMzU4LDEyIEBACiAJbW92CXBjLCBscgogICAgICAgICAKIC8qCi0gKiBjcHVfYXJtMTAyMl9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqIGNwdV9hcm0xMDIyX3NldF9wdGVfZXh0KHB0ZXAsIHB0ZSwgZXh0KQogICoKICAqIFNldCBhIFBURSBhbmQgZmx1c2ggaXQgb3V0CiAgKi8KIAkuYWxpZ24JNQotRU5UUlkoY3B1X2FybTEwMjJfc2V0X3B0ZSkKK0VOVFJZKGNwdV9hcm0xMDIyX3NldF9wdGVfZXh0KQogI2lmZGVmIENPTkZJR19NTVUKIAlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCiAKQEAgLTQ0MSw3ICs0NDEsNyBAQAogCS53b3JkCWNwdV9hcm0xMDIyX2RvX2lkbGUKIAkud29yZAljcHVfYXJtMTAyMl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm0xMDIyX3N3aXRjaF9tbQotCS53b3JkCWNwdV9hcm0xMDIyX3NldF9wdGUKKwkud29yZAljcHVfYXJtMTAyMl9zZXRfcHRlX2V4dAogCS5zaXplCWFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCmluZGV4IDMyNDdjZTUuLjY1ZTQzYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCkBAIC0zNDcsMTIgKzM0NywxMiBAQAogCW1vdglwYywgbHIKICAgICAgICAgCiAvKgotICogY3B1X2FybTEwMjZfc2V0X3B0ZShwdGVwLCBwdGUpCisgKiBjcHVfYXJtMTAyNl9zZXRfcHRlX2V4dChwdGVwLCBwdGUsIGV4dCkKICAqCiAgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAogICovCiAJLmFsaWduCTUKLUVOVFJZKGNwdV9hcm0xMDI2X3NldF9wdGUpCitFTlRSWShjcHVfYXJtMTAyNl9zZXRfcHRlX2V4dCkKICNpZmRlZiBDT05GSUdfTU1VCiAJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgogCkBAIC00MzYsNyArNDM2LDcgQEAKIAkud29yZAljcHVfYXJtMTAyNl9kb19pZGxlCiAJLndvcmQJY3B1X2FybTEwMjZfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyNl9zd2l0Y2hfbW0KLQkud29yZAljcHVfYXJtMTAyNl9zZXRfcHRlCisJLndvcmQJY3B1X2FybTEwMjZfc2V0X3B0ZV9leHQKIAkuc2l6ZQlhcm0xMDI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm0xMDI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uIC5yb2RhdGEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCmluZGV4IGNlNGY5ZWUuLjEyM2E3ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwpAQCAtMjA5LDE0ICsyMDksMTQgQEAKIAkJbW92CXBjLCBscgogCiAvKgotICogRnVuY3Rpb246IGFybTZfN19zZXRfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCisgKiBGdW5jdGlvbjogYXJtNl83X3NldF9wdGVfZXh0KHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsIHVuc2lnbmVkIGludCBleHQpCiAgKiBQYXJhbXMgIDogcjAgPSBBZGRyZXNzIHRvIHNldAogICoJICAgOiByMSA9IHZhbHVlIHRvIHNldAogICogUHVycG9zZSA6IFNldCBhIFBURSBhbmQgZmx1c2ggaXQgb3V0IG9mIGFueSBXQiBjYWNoZQogICovCiAJCS5hbGlnbgk1Ci1FTlRSWShjcHVfYXJtNl9zZXRfcHRlKQotRU5UUlkoY3B1X2FybTdfc2V0X3B0ZSkKK0VOVFJZKGNwdV9hcm02X3NldF9wdGVfZXh0KQorRU5UUlkoY3B1X2FybTdfc2V0X3B0ZV9leHQpCiAjaWZkZWYgQ09ORklHX01NVQogCQlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCiAKQEAgLTI5OSw3ICsyOTksNyBAQAogCQkud29yZAljcHVfYXJtNl9kb19pZGxlCiAJCS53b3JkCWNwdV9hcm02X2RjYWNoZV9jbGVhbl9hcmVhCiAJCS53b3JkCWNwdV9hcm02X3N3aXRjaF9tbQotCQkud29yZAljcHVfYXJtNl9zZXRfcHRlCisJCS53b3JkCWNwdV9hcm02X3NldF9wdGVfZXh0CiAJCS5zaXplCWFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAvKgpAQCAtMzE1LDcgKzMxNSw3IEBACiAJCS53b3JkCWNwdV9hcm03X2RvX2lkbGUKIAkJLndvcmQJY3B1X2FybTdfZGNhY2hlX2NsZWFuX2FyZWEKIAkJLndvcmQJY3B1X2FybTdfc3dpdGNoX21tCi0JCS53b3JkCWNwdV9hcm03X3NldF9wdGUKKwkJLndvcmQJY3B1X2FybTdfc2V0X3B0ZV9leHQKIAkJLnNpemUJYXJtN19wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtN19wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwppbmRleCBjMDRjMTk0Li5kYzc2M2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKQEAgLTg4LDEzICs4OCwxMyBAQAogCQltb3YJcGMsIGxyCiAKIC8qCi0gKiBGdW5jdGlvbjogYXJtNzIwX3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKKyAqIEZ1bmN0aW9uOiBhcm03MjBfc2V0X3B0ZV9leHQocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IGV4dCkKICAqIFBhcmFtcyAgOiByMCA9IEFkZHJlc3MgdG8gc2V0CiAgKgkgICA6IHIxID0gdmFsdWUgdG8gc2V0CiAgKiBQdXJwb3NlIDogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQgb2YgYW55IFdCIGNhY2hlCiAgKi8KIAkJLmFsaWduCTUKLUVOVFJZKGNwdV9hcm03MjBfc2V0X3B0ZSkKK0VOVFJZKGNwdV9hcm03MjBfc2V0X3B0ZV9leHQpCiAjaWZkZWYgQ09ORklHX01NVQogCQlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCiAKQEAgLTIwNCw3ICsyMDQsNyBAQAogCQkud29yZAljcHVfYXJtNzIwX2RvX2lkbGUKIAkJLndvcmQJY3B1X2FybTcyMF9kY2FjaGVfY2xlYW5fYXJlYQogCQkud29yZAljcHVfYXJtNzIwX3N3aXRjaF9tbQotCQkud29yZAljcHVfYXJtNzIwX3NldF9wdGUKKwkJLndvcmQJY3B1X2FybTcyMF9zZXRfcHRlX2V4dAogCQkuc2l6ZQlhcm03MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTcyMF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwppbmRleCA2NWNiYjI4Li43NWM5NDVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKQEAgLTM0NCwxMiArMzQ0LDEyIEBACiAJbW92CXBjLCBscgogCiAvKgotICogY3B1X2FybTkyMF9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqIGNwdV9hcm05MjBfc2V0X3B0ZShwdGVwLCBwdGUsIGV4dCkKICAqCiAgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAogICovCiAJLmFsaWduCTUKLUVOVFJZKGNwdV9hcm05MjBfc2V0X3B0ZSkKK0VOVFJZKGNwdV9hcm05MjBfc2V0X3B0ZV9leHQpCiAjaWZkZWYgQ09ORklHX01NVQogCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIApAQCAtNDIzLDcgKzQyMyw3IEBACiAJLndvcmQgICBjcHVfYXJtOTIwX2RvX2lkbGUKIAkud29yZAljcHVfYXJtOTIwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyMF9zd2l0Y2hfbW0KLQkud29yZAljcHVfYXJtOTIwX3NldF9wdGUKKwkud29yZAljcHVfYXJtOTIwX3NldF9wdGVfZXh0CiAJLnNpemUJYXJtOTIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm05MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwppbmRleCA1Mjc2MWI3Li5mZmI3NTFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKQEAgLTM0OCwxMiArMzQ4LDEyIEBACiAJbW92CXBjLCBscgogCiAvKgotICogY3B1X2FybTkyMl9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqIGNwdV9hcm05MjJfc2V0X3B0ZV9leHQocHRlcCwgcHRlLCBleHQpCiAgKgogICogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQKICAqLwogCS5hbGlnbgk1Ci1FTlRSWShjcHVfYXJtOTIyX3NldF9wdGUpCitFTlRSWShjcHVfYXJtOTIyX3NldF9wdGVfZXh0KQogI2lmZGVmIENPTkZJR19NTVUKIAlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCiAKQEAgLTQyNyw3ICs0MjcsNyBAQAogCS53b3JkICAgY3B1X2FybTkyMl9kb19pZGxlCiAJLndvcmQJY3B1X2FybTkyMl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm05MjJfc3dpdGNoX21tCi0JLndvcmQJY3B1X2FybTkyMl9zZXRfcHRlCisJLndvcmQJY3B1X2FybTkyMl9zZXRfcHRlX2V4dAogCS5zaXplCWFybTkyMl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKaW5kZXggNWI3NDMzOS4uNDRjMmM5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC0zOTEsMTIgKzM5MSwxMiBAQAogCW1vdglwYywgbHIKIAogLyoKLSAqIGNwdV9hcm05MjVfc2V0X3B0ZShwdGVwLCBwdGUpCisgKiBjcHVfYXJtOTI1X3NldF9wdGVfZXh0KHB0ZXAsIHB0ZSwgZXh0KQogICoKICAqIFNldCBhIFBURSBhbmQgZmx1c2ggaXQgb3V0CiAgKi8KIAkuYWxpZ24JNQotRU5UUlkoY3B1X2FybTkyNV9zZXRfcHRlKQorRU5UUlkoY3B1X2FybTkyNV9zZXRfcHRlX2V4dCkKICNpZmRlZiBDT05GSUdfTU1VCiAJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgogCkBAIC00OTAsNyArNDkwLDcgQEAKIAkud29yZCAgIGNwdV9hcm05MjVfZG9faWRsZQogCS53b3JkCWNwdV9hcm05MjVfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtOTI1X3N3aXRjaF9tbQotCS53b3JkCWNwdV9hcm05MjVfc2V0X3B0ZQorCS53b3JkCWNwdV9hcm05MjVfc2V0X3B0ZV9leHQKIAkuc2l6ZQlhcm05MjVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTkyNV9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCmluZGV4IDg2MjhlZDIuLjViODBiNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwpAQCAtMzQ4LDEyICszNDgsMTIgQEAKIAltb3YJcGMsIGxyCiAKIC8qCi0gKiBjcHVfYXJtOTI2X3NldF9wdGUocHRlcCwgcHRlKQorICogY3B1X2FybTkyNl9zZXRfcHRlX2V4dChwdGVwLCBwdGUsIGV4dCkKICAqCiAgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAogICovCiAJLmFsaWduCTUKLUVOVFJZKGNwdV9hcm05MjZfc2V0X3B0ZSkKK0VOVFJZKGNwdV9hcm05MjZfc2V0X3B0ZV9leHQpCiAjaWZkZWYgQ09ORklHX01NVQogCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIApAQCAtNDM5LDcgKzQzOSw3IEBACiAJLndvcmQJY3B1X2FybTkyNl9kb19pZGxlCiAJLndvcmQJY3B1X2FybTkyNl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm05MjZfc3dpdGNoX21tCi0JLndvcmQJY3B1X2FybTkyNl9zZXRfcHRlCisJLndvcmQJY3B1X2FybTkyNl9zZXRfcHRlX2V4dAogCS5zaXplCWFybTkyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpAQCAtNDgwLDcgKzQ4MCw3IEBACiAJYglfX2FybTkyNl9zZXR1cAogCS5sb25nCWNwdV9hcmNoX25hbWUKIAkubG9uZwljcHVfZWxmX25hbWUKLQkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfVkZQfEhXQ0FQX0VEU1B8SFdDQVBfSkFWQQorCS5sb25nCUhXQ0FQX1NXUHxIV0NBUF9IQUxGfEhXQ0FQX1RIVU1CfEhXQ0FQX0ZBU1RfTVVMVHxIV0NBUF9FRFNQfEhXQ0FQX0pBVkEKIAkubG9uZwljcHVfYXJtOTI2X25hbWUKIAkubG9uZwlhcm05MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCS5sb25nCXY0d2JpX3RsYl9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUwppbmRleCBjZDdkODY1Li42ZTIyNmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCkBAIC0xNDYsMTIgKzE0NiwxMiBAQAogI2VuZGlmCiAKIC8qCi0gKiBjcHVfc2ExMTBfc2V0X3B0ZShwdGVwLCBwdGUpCisgKiBjcHVfc2ExMTBfc2V0X3B0ZV9leHQocHRlcCwgcHRlLCBleHQpCiAgKgogICogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQKICAqLwogCS5hbGlnbgk1Ci1FTlRSWShjcHVfc2ExMTBfc2V0X3B0ZSkKK0VOVFJZKGNwdV9zYTExMF9zZXRfcHRlX2V4dCkKICNpZmRlZiBDT05GSUdfTU1VCiAJc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgogCkBAIC0yMjIsNyArMjIyLDcgQEAKIAkud29yZAljcHVfc2ExMTBfZG9faWRsZQogCS53b3JkCWNwdV9zYTExMF9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9zYTExMF9zd2l0Y2hfbW0KLQkud29yZAljcHVfc2ExMTBfc2V0X3B0ZQorCS53b3JkCWNwdV9zYTExMF9zZXRfcHRlX2V4dAogCS5zaXplCXNhMTEwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBzYTExMF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCmluZGV4IGI3NzY2NTMuLjlhZmIxMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwpAQCAtMTU5LDEyICsxNTksMTIgQEAKICNlbmRpZgogCiAvKgotICogY3B1X3NhMTEwMF9zZXRfcHRlKHB0ZXAsIHB0ZSkKKyAqIGNwdV9zYTExMDBfc2V0X3B0ZV9leHQocHRlcCwgcHRlLCBleHQpCiAgKgogICogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQKICAqLwogCS5hbGlnbgk1Ci1FTlRSWShjcHVfc2ExMTAwX3NldF9wdGUpCitFTlRSWShjcHVfc2ExMTAwX3NldF9wdGVfZXh0KQogI2lmZGVmIENPTkZJR19NTVUKIAlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCiAKQEAgLTIzNyw3ICsyMzcsNyBAQAogCS53b3JkCWNwdV9zYTExMDBfZG9faWRsZQogCS53b3JkCWNwdV9zYTExMDBfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfc2ExMTAwX3N3aXRjaF9tbQotCS53b3JkCWNwdV9zYTExMDBfc2V0X3B0ZQorCS53b3JkCWNwdV9zYTExMDBfc2V0X3B0ZV9leHQKIAkuc2l6ZQlzYTExMDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHNhMTEwMF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jIGIvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKaW5kZXggYWIxNDM1NS4uOWYzOTZiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogI2lmbmRlZiBNVUxUSV9DUFUKIEVYUE9SVF9TWU1CT0woY3B1X2RjYWNoZV9jbGVhbl9hcmVhKTsKLUVYUE9SVF9TWU1CT0woY3B1X3NldF9wdGUpOworRVhQT1JUX1NZTUJPTChjcHVfc2V0X3B0ZV9leHQpOwogI2Vsc2UKIEVYUE9SVF9TWU1CT0wocHJvY2Vzc29yKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCmluZGV4IGI0NDBjOGEuLjdiMTg0M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKQEAgLTEwMywxMyArMTAzLDE0IEBACiAJbW92CXBjLCBscgogCiAvKgotICoJY3B1X3Y2X3NldF9wdGUocHRlcCwgcHRlKQorICoJY3B1X3Y2X3NldF9wdGVfZXh0KHB0ZXAsIHB0ZSwgZXh0KQogICoKICAqCVNldCBhIGxldmVsIDIgdHJhbnNsYXRpb24gdGFibGUgZW50cnkuCiAgKgogICoJLSBwdGVwICAtIHBvaW50ZXIgdG8gbGV2ZWwgMiB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeQogICoJCSAgKGhhcmR3YXJlIHZlcnNpb24gaXMgc3RvcmVkIGF0IC0xMDI0IGJ5dGVzKQogICoJLSBwdGUgICAtIFBURSB2YWx1ZSB0byBzdG9yZQorICoJLSBleHQJLSB2YWx1ZSBmb3IgZXh0ZW5kZWQgUFRFIGJpdHMKICAqCiAgKglQZXJtaXNzaW9uczoKICAqCSAgWVVXRCAgQVBYIEFQMSBBUDAJU1ZDCVVzZXIKQEAgLTEyMSwzMyArMTIyLDM0IEBACiAgKgkgIDExeDAgICAwICAgMSAgIDAJci93CXIvbwogICoJICAxMTExICAgMCAgIDEgICAxCXIvdwlyL3cKICAqLwotRU5UUlkoY3B1X3Y2X3NldF9wdGUpCitFTlRSWShjcHVfdjZfc2V0X3B0ZV9leHQpCiAjaWZkZWYgQ09ORklHX01NVQogCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIAotCWJpYwlyMiwgcjEsICMweDAwMDAwM2YwCi0JYmljCXIyLCByMiwgIzB4MDAwMDAwMDMKLQlvcnIJcjIsIHIyLCAjUFRFX0VYVF9BUDAgfCAyCisJYmljCXIzLCByMSwgIzB4MDAwMDAzZjAKKwliaWMJcjMsIHIzLCAjMHgwMDAwMDAwMworCW9ycglyMywgcjMsIHIyCisJb3JyCXIzLCByMywgI1BURV9FWFRfQVAwIHwgMgogCiAJdHN0CXIxLCAjTF9QVEVfV1JJVEUKIAl0c3RuZQlyMSwgI0xfUFRFX0RJUlRZCi0Jb3JyZXEJcjIsIHIyLCAjUFRFX0VYVF9BUFgKKwlvcnJlcQlyMywgcjMsICNQVEVfRVhUX0FQWAogCiAJdHN0CXIxLCAjTF9QVEVfVVNFUgotCW9ycm5lCXIyLCByMiwgI1BURV9FWFRfQVAxCi0JdHN0bmUJcjIsICNQVEVfRVhUX0FQWAotCWJpY25lCXIyLCByMiwgI1BURV9FWFRfQVBYIHwgUFRFX0VYVF9BUDAKKwlvcnJuZQlyMywgcjMsICNQVEVfRVhUX0FQMQorCXRzdG5lCXIzLCAjUFRFX0VYVF9BUFgKKwliaWNuZQlyMywgcjMsICNQVEVfRVhUX0FQWCB8IFBURV9FWFRfQVAwCiAKIAl0c3QJcjEsICNMX1BURV9ZT1VORwotCWJpY2VxCXIyLCByMiwgI1BURV9FWFRfQVBYIHwgUFRFX0VYVF9BUF9NQVNLCisJYmljZXEJcjMsIHIzLCAjUFRFX0VYVF9BUFggfCBQVEVfRVhUX0FQX01BU0sKIAogCXRzdAlyMSwgI0xfUFRFX0VYRUMKLQlvcnJlcQlyMiwgcjIsICNQVEVfRVhUX1hOCisJb3JyZXEJcjMsIHIzLCAjUFRFX0VYVF9YTgogCiAJdHN0CXIxLCAjTF9QVEVfUFJFU0VOVAotCW1vdmVxCXIyLCAjMAorCW1vdmVxCXIzLCAjMAogCi0Jc3RyCXIyLCBbcjBdCisJc3RyCXIzLCBbcjBdCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEgQCBmbHVzaF9wdGUKICNlbmRpZgogCW1vdglwYywgbHIKQEAgLTE1Niw3ICsxNTgsNyBAQAogCiAKIGNwdV92Nl9uYW1lOgotCS5hc2NpegkiU29tZSBSYW5kb20gVjYgUHJvY2Vzc29yIgorCS5hc2NpegkiQVJNdjYtY29tcGF0aWJsZSBwcm9jZXNzb3IiCiAJLmFsaWduCiAKIAkuc2VjdGlvbiAiLnRleHQuaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgpAQCAtMjA3LDExICsyMDksNiBAQAogI2VuZGlmCiAJbWNyCXAxNSwgMCwgcjQsIGMyLCBjMCwgMQkJQCBsb2FkIFRUQjEKICNlbmRpZiAvKiBDT05GSUdfTU1VICovCi0jaWZkZWYgQ09ORklHX1ZGUAotCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDIKLQlvcnIJcjAsIHIwLCAjKDB4ZiA8PCAyMCkKLQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAyCQlAIEVuYWJsZSBmdWxsIGFjY2VzcyB0byBWRlAKLSNlbmRpZgogCWFkcglyNSwgdjZfY3J2YWwKIAlsZG1pYQlyNSwge3I1LCByNn0KIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIHJlYWQgY29udHJvbCByZWdpc3RlcgpAQCAtMjM4LDcgKzIzNSw3IEBACiAJLndvcmQJY3B1X3Y2X2RvX2lkbGUKIAkud29yZAljcHVfdjZfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfdjZfc3dpdGNoX21tCi0JLndvcmQJY3B1X3Y2X3NldF9wdGUKKwkud29yZAljcHVfdjZfc2V0X3B0ZV9leHQKIAkuc2l6ZQl2Nl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gdjZfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdApAQCAtMjczLDcgKzI3MCw3IEBACiAJYglfX3Y2X3NldHVwCiAJLmxvbmcJY3B1X2FyY2hfbmFtZQogCS5sb25nCWNwdV9lbGZfbmFtZQotCS5sb25nCUhXQ0FQX1NXUHxIV0NBUF9IQUxGfEhXQ0FQX1RIVU1CfEhXQ0FQX0ZBU1RfTVVMVHxIV0NBUF9WRlB8SFdDQVBfRURTUHxIV0NBUF9KQVZBCisJLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1B8SFdDQVBfSkFWQQogCS5sb25nCWNwdV92Nl9uYW1lCiAJLmxvbmcJdjZfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCS5sb25nCXY2d2JpX3RsYl9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKaW5kZXggMWVmNTY0ZC4uOTRhNTg0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKQEAgLTIsNyArMiw3IEBACiAgKiBsaW51eC9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwogICoKICAqIE9yaWdpbmFsIEF1dGhvcjogTWF0dGhldyBHaWxiZXJ0Ci0gKiBDdXJyZW50IE1haW50YWluZXI6IERlZXBhayBTYXhlbmEgPGRzYXhlbmFAcGxleGl0eS5uZXQ+CisgKiBDdXJyZW50IE1haW50YWluZXI6IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgogICoKICAqIENvcHlyaWdodCAyMDA0IChDKSBJbnRlbCBDb3JwLgogICogQ29weXJpZ2h0IDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KQEAgLTM1NywxMyArMzU3LDEzIEBACiAJY3B3YWl0X3JldCBsciwgaXAKIAogLyoKLSAqIGNwdV94c2MzX3NldF9wdGUocHRlcCwgcHRlKQorICogY3B1X3hzYzNfc2V0X3B0ZV9leHQocHRlcCwgcHRlLCBleHQpCiAgKgogICogU2V0IGEgUFRFIGFuZCBmbHVzaCBpdCBvdXQKICAqCiAgKi8KIAkuYWxpZ24JNQotRU5UUlkoY3B1X3hzYzNfc2V0X3B0ZSkKK0VOVFJZKGNwdV94c2MzX3NldF9wdGVfZXh0KQogCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KIAogCWJpYwlyMiwgcjEsICMweGZmMAkJCUAgS2VlcCBDLCBCIGJpdHMKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCS53b3JkCWNwdV94c2MzX2RvX2lkbGUKIAkud29yZAljcHVfeHNjM19kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV94c2MzX3N3aXRjaF9tbQotCS53b3JkCWNwdV94c2MzX3NldF9wdGUKKwkud29yZAljcHVfeHNjM19zZXRfcHRlX2V4dAogCS5zaXplCXhzYzNfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHhzYzNfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCBjYzEwMDRiLi5kMjlmZTkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKQEAgLTQyMSwxNCArNDIxLDE0IEBACiAJY3B3YWl0X3JldCBsciwgaXAKIAogLyoKLSAqIGNwdV94c2NhbGVfc2V0X3B0ZShwdGVwLCBwdGUpCisgKiBjcHVfeHNjYWxlX3NldF9wdGVfZXh0KHB0ZXAsIHB0ZSwgZXh0KQogICoKICAqIFNldCBhIFBURSBhbmQgZmx1c2ggaXQgb3V0CiAgKgogICogRXJyYXRhIDQwOiBtdXN0IHNldCBtZW1vcnkgdG8gd3JpdGUtdGhyb3VnaCBmb3IgdXNlciByZWFkLW9ubHkgcGFnZXMuCiAgKi8KIAkuYWxpZ24JNQotRU5UUlkoY3B1X3hzY2FsZV9zZXRfcHRlKQorRU5UUlkoY3B1X3hzY2FsZV9zZXRfcHRlX2V4dCkKIAlzdHIJcjEsIFtyMF0sICMtMjA0OAkJQCBsaW51eCB2ZXJzaW9uCiAKIAliaWMJcjIsIHIxLCAjMHhmZjAKQEAgLTUyOSw3ICs1MjksNyBAQAogCS53b3JkCWNwdV94c2NhbGVfZG9faWRsZQogCS53b3JkCWNwdV94c2NhbGVfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfeHNjYWxlX3N3aXRjaF9tbQotCS53b3JkCWNwdV94c2NhbGVfc2V0X3B0ZQorCS53b3JkCWNwdV94c2NhbGVfc2V0X3B0ZV9leHQKIAkuc2l6ZQl4c2NhbGVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKQEAgLTcwOCw3ICs3MDgsNyBAQAogCS50eXBlCV9fODAzM3hfcHJvY19pbmZvLCNvYmplY3QKIF9fODAzM3hfcHJvY19pbmZvOgogCS5sb25nCTB4NjkwNTQwMTAKLQkubG9uZwkweGZmZmZmZjMwCisJLmxvbmcJMHhmZmZmZmQzMAogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKIAkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwppbmRleCBlYzc1MmUxLi5mMmRjMzYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIGNvbmZpZyBPTUFQX1NFUklBTF9XQUtFCiAJYm9vbCAiRW5hYmxlIHdha2UtdXAgZXZlbnRzIGZvciBzZXJpYWwgcG9ydHMiCi0JZGVwZW5kcyBPTUFQX01VWAorCWRlcGVuZHMgb24gT01BUF9NVVgKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gaGF2ZSB5b3VyIHN5c3RlbSB3YWtlIHVwCmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCA4YmNiODM4Li5iZDc4MDU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBUaHUgRGVjIDcgMTc6MTk6MjAgMjAwNgorIyBMYXN0IHVwZGF0ZTogVHVlIEphbiAxNiAxNjo1Mjo1NiAyMDA3CiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTEyMTksMyArMTIxOSwyNiBAQAogaGl0cmFjawkJCU1BQ0hfSElUUkFDSwkJSElUUkFDSwkJCTEyMDgKIHN5bWUxCQkJTUFDSF9TWU1FMQkJU1lNRTEJCQkxMjA5CiBzeWhsMQkJCU1BQ0hfU1lITDEJCVNZSEwxCQkJMTIxMAorZW1wY2E0MDAJCU1BQ0hfRU1QQ0E0MDAJCUVNUENBNDAwCQkxMjExCitlbTcyMTAJCQlNQUNIX0VNNzIxMAkJRU03MjEwCQkJMTIxMgoraHRjaGVybWVzCQlNQUNIX0hUQ0hFUk1FUwkJSFRDSEVSTUVTCQkxMjEzCitldGlfYzEJCQlNQUNIX0VUSV9DMQkJRVRJX0MxCQkJMTIxNAorbWFjaF9kZXAyNDEwCQlNQUNIX01BQ0hfREVQMjQxMAlNQUNIX0RFUDI0MTAJCTEyMTUKK2FjMTAwCQkJTUFDSF9BQzEwMAkJQUMxMDAJCQkxMjE2CitzbmVldGNoCQkJTUFDSF9TTkVFVENICQlTTkVFVENICQkJMTIxNworc3R1ZGVudG1hdGUJCU1BQ0hfU1RVREVOVE1BVEUJU1RVREVOVE1BVEUJCTEyMTgKK3ppcjI0MTAJCQlNQUNIX1pJUjI0MTAJCVpJUjI0MTAJCQkxMjE5Cit6aXIyNDEzCQkJTUFDSF9aSVIyNDEzCQlaSVIyNDEzCQkJMTIyMAorZGxvbmlwMwkJCU1BQ0hfRExPTklQMwkJRExPTklQMwkJCTEyMjEKK2luc3RyZWFtCQlNQUNIX0lOU1RSRUFNCQlJTlNUUkVBTQkJMTIyMgorYW1iYXJlbGxhCQlNQUNIX0FNQkFSRUxMQQkJQU1CQVJFTExBCQkxMjIzCituZXZpcwkJCU1BQ0hfTkVWSVMJCU5FVklTCQkJMTIyNAoraHRjX3RyaW5pdHkJCU1BQ0hfSFRDX1RSSU5JVFkJSFRDX1RSSU5JVFkJCTEyMjUKK3FsMjAyYgkJCU1BQ0hfUUwyMDJCCQlRTDIwMkIJCQkxMjI2Cit2cGFjMjcwCQkJTUFDSF9WUEFDMjcwCQlWUEFDMjcwCQkJMTIyNworcmQxMjkJCQlNQUNIX1JEMTI5CQlSRDEyOQkJCTEyMjgKK2h0Y3dpemFyZAkJTUFDSF9IVENXSVpBUkQJCUhUQ1dJWkFSRAkJMTIyOQoreHNjYWxlX3RyZW82ODAJCU1BQ0hfWFNDQUxFX1RSRU82ODAJWFNDQUxFX1RSRU82ODAJCTEyMzAKK3RlY29uX3RtZXpvbgkJTUFDSF9URUNPTl9UTUVaT04JVEVDT05fVE1FWk9OCQkxMjMxCit6eWxvbml0ZQkJTUFDSF9aWUxPTklURQkJWllMT05JVEUJCTEyMzMKK2dlbmUxMjcwCQlNQUNIX0dFTkUxMjcwCQlHRU5FMTI3MAkJMTIzNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL2VudHJ5LlMgYi9hcmNoL2FybS92ZnAvZW50cnkuUwppbmRleCA3YjU5NTU0Li5jYTJhNWFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvZW50cnkuUworKysgYi9hcmNoL2FybS92ZnAvZW50cnkuUwpAQCAtMjUsNiArMjUsNyBAQAogZG9fdmZwOgogCWVuYWJsZV9pcnEKICAJbGRyCXI0LCAuTEN2ZnAKKwlsZHIJcjExLCBbcjEwLCAjVElfQ1BVXQlAIENQVSBudW1iZXIKIAlhZGQJcjEwLCByMTAsICNUSV9WRlBTVEFURQlAIHIxMCA9IHdvcmtzcGFjZQogCWxkcglwYywgW3I0XQkJQCBjYWxsIFZGUCBlbnRyeSBwb2ludAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwLmggYi9hcmNoL2FybS92ZnAvdmZwLmgKaW5kZXggZjI3OTc4OS4uNTRhMmFkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcC5oCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnAuaApAQCAtMzcwLDMgKzM3MCw3IEBACiAJdTMyICgqIGNvbnN0IGZuKShpbnQgZGQsIGludCBkbiwgaW50IGRtLCB1MzIgZnBzY3IpOwogCXUzMiBmbGFnczsKIH07CisKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gdm9pZCB2ZnBfc2F2ZV9zdGF0ZSh2b2lkICpsb2NhdGlvbiwgdTMyIGZwZXhjKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwppbmRleCBlNTFlNjY3Li5kNGI3YjIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwaHcuUworKysgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwpAQCAtNjUsNiArNjUsNyBAQAogQCAgcjIgID0gZmF1bHRlZCBQQys0CiBAICByOSAgPSBzdWNjZXNzZnVsIHJldHVybgogQCAgcjEwID0gdmZwX3N0YXRlIHVuaW9uCitAICByMTEgPSBDUFUgbnVtYmVyCiBAICBsciAgPSBmYWlsdXJlIHJldHVybgogCiAJLmdsb2JsCXZmcF9zdXBwb3J0X2VudHJ5CkBAIC03OSw3ICs4MCw3IEBACiAJREJHU1RSMSAiZW5hYmxlICV4IiwgcjEwCiAJbGRyCXIzLCBsYXN0X1ZGUF9jb250ZXh0X2FkZHJlc3MKIAlvcnIJcjEsIHIxLCAjRlBFWENfRU5BQkxFCUAgdXNlciBGUEVYQyBoYXMgdGhlIGVuYWJsZSBiaXQgc2V0Ci0JbGRyCXI0LCBbcjNdCQlAIGxhc3RfVkZQX2NvbnRleHQgcG9pbnRlcgorCWxkcglyNCwgW3IzLCByMTEsIGxzbCAjMl0JQCBsYXN0X1ZGUF9jb250ZXh0IHBvaW50ZXIKIAliaWMJcjUsIHIxLCAjRlBFWENfRVhDRVBUSU9OIEAgbWFrZSBzdXJlIGV4Y2VwdGlvbnMgYXJlIGRpc2FibGVkCiAJY21wCXI0LCByMTAKIAliZXEJY2hlY2tfZm9yX2V4Y2VwdGlvbglAIHdlIGFyZSByZXR1cm5pbmcgdG8gdGhlIHNhbWUKQEAgLTkxLDcgKzkyLDkgQEAKIAkJCQkJQCBleGNlcHRpb25zLCBzbyB3ZSBjYW4gZ2V0IGF0IHRoZQogCQkJCQlAIHJlc3Qgb2YgaXQKIAorI2lmbmRlZiBDT05GSUdfU01QCiAJQCBTYXZlIG91dCB0aGUgY3VycmVudCByZWdpc3RlcnMgdG8gdGhlIG9sZCB0aHJlYWQgc3RhdGUKKwlAIE5vIG5lZWQgZm9yIFNNUCBzaW5jZSB0aGlzIGlzIG5vdCBkb25lIGxhemlseQogCiAJREJHU1RSMQkic2F2ZSBvbGQgc3RhdGUgJXAiLCByNAogCWNtcAlyNCwgIzAKQEAgLTEwNSwxMCArMTA4LDExIEBACiAJc3RtaWEJcjQsIHtyMSwgcjUsIHI2LCByOH0JQCBzYXZlIEZQRVhDLCBGUFNDUiwgRlBJTlNULCBGUElOU1QyCiAJCQkJCUAgYW5kIHBvaW50IHI0IGF0IHRoZSB3b3JkIGF0IHRoZQogCQkJCQlAIHN0YXJ0IG9mIHRoZSByZWdpc3RlciBkdW1wCisjZW5kaWYKIAogbm9fb2xkX1ZGUF9wcm9jZXNzOgogCURCR1NUUjEJImxvYWQgc3RhdGUgJXAiLCByMTAKLQlzdHIJcjEwLCBbcjNdCQlAIHVwZGF0ZSB0aGUgbGFzdF9WRlBfY29udGV4dCBwb2ludGVyCisJc3RyCXIxMCwgW3IzLCByMTEsIGxzbCAjMl0JQCB1cGRhdGUgdGhlIGxhc3RfVkZQX2NvbnRleHQgcG9pbnRlcgogCQkJCQlAIExvYWQgdGhlIHNhdmVkIHN0YXRlIGJhY2sgaW50byB0aGUgVkZQCiAJVkZQRkxETUlBIHIxMAkgCQlAIHJlbG9hZCB0aGUgd29ya2luZyByZWdpc3RlcnMgd2hpbGUKIAkJCQkJQCBGUEVYQyBpcyBpbiBhIHNhZmUgc3RhdGUKQEAgLTE2Miw2ICsxNjYsMjQgQEAKIAkJCQkJQCByZXF1aXJlZC4gSWYgbm90LCB0aGUgdXNlciBjb2RlIHdpbGwKIAkJCQkJQCByZXRyeSB0aGUgZmF1bHRlZCBpbnN0cnVjdGlvbgogCisjaWZkZWYgQ09ORklHX1NNUAorCS5nbG9ibAl2ZnBfc2F2ZV9zdGF0ZQorCS50eXBlCXZmcF9zYXZlX3N0YXRlLCAlZnVuY3Rpb24KK3ZmcF9zYXZlX3N0YXRlOgorCUAgU2F2ZSB0aGUgY3VycmVudCBWRlAgc3RhdGUKKwlAIHIwIC0gc2F2ZSBsb2NhdGlvbgorCUAgcjEgLSBGUEVYQworCURCR1NUUjEJInNhdmUgVkZQIHN0YXRlICVwIiwgcjAKKwlWRlBGTVJYCXIyLCBGUFNDUgkJQCBjdXJyZW50IHN0YXR1cworCVZGUEZNUlgJcjMsIEZQSU5TVAkJQCBGUElOU1QgKGFsd2F5cyB0aGVyZSwgcmV2MCBvbndhcmRzKQorCXRzdAlyMSwgI0ZQRVhDX0ZQVjIJCUAgaXMgdGhlcmUgYW4gRlBJTlNUMiB0byByZWFkPworCVZGUEZNUlgJcjEyLCBGUElOU1QyLCBORQlAIEZQSU5TVDIgaWYgbmVlZGVkIC0gYXZvaWRzIHJlYWRpbmcKKwkJCQkJQCBub25leGlzdGFudCByZWcgb24gcmV2MAorCVZGUEZTVE1JQSByMCAJCQlAIHNhdmUgdGhlIHdvcmtpbmcgcmVnaXN0ZXJzCisJc3RtaWEJcjAsIHtyMSwgcjIsIHIzLCByMTJ9CUAgc2F2ZSBGUEVYQywgRlBTQ1IsIEZQSU5TVCwgRlBJTlNUMgorCW1vdglwYywgbHIKKyNlbmRpZgorCiBsYXN0X1ZGUF9jb250ZXh0X2FkZHJlc3M6CiAJLndvcmQJbGFzdF9WRlBfY29udGV4dAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggZjA4ZWFmYi4uZjFlNTk1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtMjgsNyArMjgsNyBAQAogdm9pZCB2ZnBfc3VwcG9ydF9lbnRyeSh2b2lkKTsKIAogdm9pZCAoKnZmcF92ZWN0b3IpKHZvaWQpID0gdmZwX3Rlc3RpbmdfZW50cnk7Ci11bmlvbiB2ZnBfc3RhdGUgKmxhc3RfVkZQX2NvbnRleHQ7Cit1bmlvbiB2ZnBfc3RhdGUgKmxhc3RfVkZQX2NvbnRleHRbTlJfQ1BVU107CiAKIC8qCiAgKiBEdWFsLXVzZSB2YXJpYWJsZS4KQEAgLTQxLDEzICs0MSwzNSBAQAogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gdjsKIAl1bmlvbiB2ZnBfc3RhdGUgKnZmcDsKKwlfX3UzMiBjcHUgPSB0aHJlYWQtPmNwdTsKIAogCWlmIChsaWtlbHkoY21kID09IFRIUkVBRF9OT1RJRllfU1dJVENIKSkgeworCQl1MzIgZnBleGMgPSBmbXJ4KEZQRVhDKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwkJLyoKKwkJICogT24gU01QLCBpZiBWRlAgaXMgZW5hYmxlZCwgc2F2ZSB0aGUgb2xkIHN0YXRlIGluCisJCSAqIGNhc2UgdGhlIHRocmVhZCBtaWdyYXRlcyB0byBhIGRpZmZlcmVudCBDUFUuIFRoZQorCQkgKiByZXN0b3JpbmcgaXMgZG9uZSBsYXppbHkuCisJCSAqLworCQlpZiAoKGZwZXhjICYgRlBFWENfRU5BQkxFKSAmJiBsYXN0X1ZGUF9jb250ZXh0W2NwdV0pIHsKKwkJCXZmcF9zYXZlX3N0YXRlKGxhc3RfVkZQX2NvbnRleHRbY3B1XSwgZnBleGMpOworCQkJbGFzdF9WRlBfY29udGV4dFtjcHVdLT5oYXJkLmNwdSA9IGNwdTsKKwkJfQorCQkvKgorCQkgKiBUaHJlYWQgbWlncmF0aW9uLCBqdXN0IGZvcmNlIHRoZSByZWxvYWRpbmcgb2YgdGhlCisJCSAqIHN0YXRlIG9uIHRoZSBuZXcgQ1BVIGluIGNhc2UgdGhlIFZGUCByZWdpc3RlcnMKKwkJICogY29udGFpbiBzdGFsZSBkYXRhLgorCQkgKi8KKwkJaWYgKHRocmVhZC0+dmZwc3RhdGUuaGFyZC5jcHUgIT0gY3B1KQorCQkJbGFzdF9WRlBfY29udGV4dFtjcHVdID0gTlVMTDsKKyNlbmRpZgorCiAJCS8qCiAJCSAqIEFsd2F5cyBkaXNhYmxlIFZGUCBzbyB3ZSBjYW4gbGF6aWx5IHNhdmUvcmVzdG9yZSB0aGUKIAkJICogb2xkIHN0YXRlLgogCQkgKi8KLQkJZm14cihGUEVYQywgZm1yeChGUEVYQykgJiB+RlBFWENfRU5BQkxFKTsKKwkJZm14cihGUEVYQywgZnBleGMgJiB+RlBFWENfRU5BQkxFKTsKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCX0KIApAQCAtNjgsOCArOTAsOCBAQAogCX0KIAogCS8qIGZsdXNoIGFuZCByZWxlYXNlIGNhc2U6IFBlci10aHJlYWQgVkZQIGNsZWFudXAuICovCi0JaWYgKGxhc3RfVkZQX2NvbnRleHQgPT0gdmZwKQotCQlsYXN0X1ZGUF9jb250ZXh0ID0gTlVMTDsKKwlpZiAobGFzdF9WRlBfY29udGV4dFtjcHVdID09IHZmcCkKKwkJbGFzdF9WRlBfY29udGV4dFtjcHVdID0gTlVMTDsKIAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTI2MywxMyArMjg1LDM2IEBACiAJaWYgKGV4Y2VwdGlvbnMpCiAJCXZmcF9yYWlzZV9leGNlcHRpb25zKGV4Y2VwdGlvbnMsIHRyaWdnZXIsIG9yaWdfZnBzY3IsIHJlZ3MpOwogfQotIAorCitzdGF0aWMgdm9pZCB2ZnBfZW5hYmxlKHZvaWQgKnVudXNlZCkKK3sKKwl1MzIgYWNjZXNzID0gZ2V0X2NvcHJvX2FjY2VzcygpOworCisJLyoKKwkgKiBFbmFibGUgZnVsbCBhY2Nlc3MgdG8gVkZQIChjcDEwIGFuZCBjcDExKQorCSAqLworCXNldF9jb3Byb19hY2Nlc3MoYWNjZXNzIHwgQ1BBQ0NfRlVMTCgxMCkgfCBDUEFDQ19GVUxMKDExKSk7Cit9CisKKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKwogLyoKICAqIFZGUCBzdXBwb3J0IGNvZGUgaW5pdGlhbGlzYXRpb24uCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHZmcF9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHZmcHNpZDsKKwl1bnNpZ25lZCBpbnQgY3B1X2FyY2ggPSBjcHVfYXJjaGl0ZWN0dXJlKCk7CisJdTMyIGFjY2VzcyA9IDA7CisKKwlpZiAoY3B1X2FyY2ggPj0gQ1BVX0FSQ0hfQVJNdjYpIHsKKwkJYWNjZXNzID0gZ2V0X2NvcHJvX2FjY2VzcygpOworCisJCS8qCisJCSAqIEVuYWJsZSBmdWxsIGFjY2VzcyB0byBWRlAgKGNwMTAgYW5kIGNwMTEpCisJCSAqLworCQlzZXRfY29wcm9fYWNjZXNzKGFjY2VzcyB8IENQQUNDX0ZVTEwoMTApIHwgQ1BBQ0NfRlVMTCgxMSkpOworCX0KIAogCS8qCiAJICogRmlyc3QgY2hlY2sgdGhhdCB0aGVyZSBpcyBhIFZGUCB0aGF0IHdlIGNhbiB1c2UuCkBAIC0yNzcsMTMgKzMyMiwyMiBAQAogCSAqIHdlIGp1c3QgbmVlZCB0byByZWFkIHRoZSBWRlBTSUQgcmVnaXN0ZXIuCiAJICovCiAJdmZwc2lkID0gZm1yeChGUFNJRCk7CisJYmFycmllcigpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiVkZQIHN1cHBvcnQgdjAuMzogIik7CiAJaWYgKFZGUF9hcmNoKSB7CiAJCXByaW50aygibm90IHByZXNlbnRcbiIpOworCisJCS8qCisJCSAqIFJlc3RvcmUgdGhlIGNvcHJvIGFjY2VzcyByZWdpc3Rlci4KKwkJICovCisJCWlmIChjcHVfYXJjaCA+PSBDUFVfQVJDSF9BUk12NikKKwkJCXNldF9jb3Byb19hY2Nlc3MoYWNjZXNzKTsKIAl9IGVsc2UgaWYgKHZmcHNpZCAmIEZQU0lEX05PRE9VQkxFKSB7CiAJCXByaW50aygibm8gZG91YmxlIHByZWNpc2lvbiBzdXBwb3J0XG4iKTsKIAl9IGVsc2UgeworCQlzbXBfY2FsbF9mdW5jdGlvbih2ZnBfZW5hYmxlLCBOVUxMLCAxLCAxKTsKKwogCQlWRlBfYXJjaCA9ICh2ZnBzaWQgJiBGUFNJRF9BUkNIX01BU0spID4+IEZQU0lEX0FSQ0hfQklUOyAgLyogRXh0cmFjdCB0aGUgYXJjaGl0ZWN0dXJlIHZlcnNpb24gKi8KIAkJcHJpbnRrKCJpbXBsZW1lbnRvciAlMDJ4IGFyY2hpdGVjdHVyZSAlZCBwYXJ0ICUwMnggdmFyaWFudCAleCByZXYgJXhcbiIsCiAJCQkodmZwc2lkICYgRlBTSURfSU1QTEVNRU5URVJfTUFTSykgPj4gRlBTSURfSU1QTEVNRU5URVJfQklULApAQCAtMjkxLDkgKzM0NSwxNiBAQAogCQkJKHZmcHNpZCAmIEZQU0lEX1BBUlRfTUFTSykgPj4gRlBTSURfUEFSVF9CSVQsCiAJCQkodmZwc2lkICYgRlBTSURfVkFSSUFOVF9NQVNLKSA+PiBGUFNJRF9WQVJJQU5UX0JJVCwKIAkJCSh2ZnBzaWQgJiBGUFNJRF9SRVZfTUFTSykgPj4gRlBTSURfUkVWX0JJVCk7CisKIAkJdmZwX3ZlY3RvciA9IHZmcF9zdXBwb3J0X2VudHJ5OwogCiAJCXRocmVhZF9yZWdpc3Rlcl9ub3RpZmllcigmdmZwX25vdGlmaWVyX2Jsb2NrKTsKKworCQkvKgorCQkgKiBXZSBkZXRlY3RlZCBWRlAsIGFuZCB0aGUgc3VwcG9ydCBjb2RlIGlzCisJCSAqIGluIHBsYWNlOyByZXBvcnQgVkZQIHN1cHBvcnQgdG8gdXNlcnNwYWNlLgorCQkgKi8KKwkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1ZGUDsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L0tjb25maWcgYi9hcmNoL2FybTI2L0tjb25maWcKaW5kZXggYzE0ZmU5MS4uNzRlYmE4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0yNi9LY29uZmlnCisrKyBiL2FyY2gvYXJtMjYvS2NvbmZpZwpAQCAtNDEsNiArNDEsMTQgQEAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWJvb2wKIAorY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgorCWJvb2wKKwlkZWZhdWx0IG4KKworY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAorCWJvb2wKKwlkZWZhdWx0IG4KKwogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtMjYva2VybmVsL2VjYXJkLmMgYi9hcmNoL2FybTI2L2tlcm5lbC9lY2FyZC5jCmluZGV4IDQzZGQ0MWIuLjlkYmMxNzI0IDEwMDY0NAotLS0gYS9hcmNoL2FybTI2L2tlcm5lbC9lY2FyZC5jCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL2VjYXJkLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCQl9CiAJCWlmIChjX2lkKCZleGNkKSA9PSAweDgwKSB7IC8qIGxvYWRlciAqLwogCQkJaWYgKCFlYy0+bG9hZGVyKSB7Ci0JCQkJZWMtPmxvYWRlciA9IChsb2FkZXJfdClrbWFsbG9jKGNfbGVuKCZleGNkKSwKKwkJCQllYy0+bG9hZGVyID0ga21hbGxvYyhjX2xlbigmZXhjZCksCiAJCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOwogCQkJCWlmIChlYy0+bG9hZGVyKQogCQkJCQllY2FyZF9yZWFkYnl0ZXMoZWMtPmxvYWRlciwgZWMsCmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtMjYva2VybmVsL2lycS5jCmluZGV4IGQ4N2Q2OGIuLmQ1MzM4MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJtMjYva2VybmVsL2lycS5jCkBAIC01NDUsNyArNTQ1LDcgQEAKIAkgICAgKGlycV9mbGFncyAmIElSUUZfU0hBUkVEICYmICFkZXZfaWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFjdGlvbiA9IChzdHJ1Y3QgaXJxYWN0aW9uICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGlycWFjdGlvbiksIEdGUF9LRVJORUwpOworCWFjdGlvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcnFhY3Rpb24pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFjdGlvbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvS2NvbmZpZyBiL2FyY2gvYXZyMzIvS2NvbmZpZwppbmRleCA1ZjE2OTRlLi5iYjA1OWE0IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL0tjb25maWcKKysrIGIvYXJjaC9hdnIzMi9LY29uZmlnCkBAIC00NSw2ICs0NSwxNCBAQAogY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCiAJYm9vbAogCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0CisJYm9vbAorCWRlZmF1bHQgbgorCiBjb25maWcgR0VORVJJQ19CVVNUX1NQSU5MT0NLCiAJYm9vbAogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAyLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAyLmMKaW5kZXggY2NlZDczYy4uMzJiMzYxZiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMi5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDIuYwpAQCAtNywyMCArNyw4MyBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaW5pdC5oPgogCi1zdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBldGgwX2RhdGEgPSB7Ci0JLnZhbGlkCQk9IDEsCi0JLm1paV9waHlfYWRkcgk9IDB4MTAsCi0JLmlzX3JtaWkJPSAwLAotCS5od19hZGRyCT0geyAweDZhLCAweDg3LCAweDcxLCAweDE0LCAweGNkLCAweGNiIH0sCitzdHJ1Y3QgZXRoX2FkZHIgeworCXU4IGFkZHJbNl07CiB9OwogCitzdGF0aWMgc3RydWN0IGV0aF9hZGRyIF9faW5pdGRhdGEgaHdfYWRkclsyXTsKKworc3RhdGljIHN0cnVjdCBldGhfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGV0aF9kYXRhWzJdOwogZXh0ZXJuIHN0cnVjdCBsY2RjX3BsYXRmb3JtX2RhdGEgYXRzdGsxMDAwX2ZiMF9kYXRhOwogCisvKgorICogVGhlIG5leHQgdHdvIGZ1bmN0aW9ucyBzaG91bGQgZ28gYXdheSBhcyB0aGUgYm9vdCBsb2FkZXIgaXMKKyAqIHN1cHBvc2VkIHRvIGluaXRpYWxpemUgdGhlIG1hY2IgYWRkcmVzcyByZWdpc3RlcnMgd2l0aCBhIHZhbGlkCisgKiBldGhlcm5ldCBhZGRyZXNzLiBCdXQgd2UgbmVlZCB0byBrZWVwIGl0IGFyb3VuZCBmb3IgYSB3aGlsZSB1bnRpbAorICogd2UgY2FuIGJlIHJlYXNvbmFibHkgc3VyZSB0aGUgYm9vdCBsb2FkZXIgZG9lcyB0aGlzLgorICoKKyAqIFRoZSBwaHlfaWQgaXMgaWdub3JlZCBhcyB0aGUgZHJpdmVyIHdpbGwgcHJvYmUgZm9yIGl0LgorICovCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfZXRoZXJuZXQoc3RydWN0IHRhZyAqdGFnKQoreworCWludCBpOworCisJaSA9IHRhZy0+dS5ldGhlcm5ldC5tYWNfaW5kZXg7CisJaWYgKGkgPCBBUlJBWV9TSVpFKGh3X2FkZHIpKQorCQltZW1jcHkoaHdfYWRkcltpXS5hZGRyLCB0YWctPnUuZXRoZXJuZXQuaHdfYWRkcmVzcywKKwkJICAgICAgIHNpemVvZihod19hZGRyW2ldLmFkZHIpKTsKKworCXJldHVybiAwOworfQorX190YWd0YWJsZShBVEFHX0VUSEVSTkVULCBwYXJzZV90YWdfZXRoZXJuZXQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2h3X2FkZHIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJY29uc3QgdTggKmFkZHI7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKnBjbGs7CisKKwlpZiAoIXJlcykKKwkJcmV0dXJuOworCWlmIChwZGV2LT5pZCA+PSBBUlJBWV9TSVpFKGh3X2FkZHIpKQorCQlyZXR1cm47CisKKwlhZGRyID0gaHdfYWRkcltwZGV2LT5pZF0uYWRkcjsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpCisJCXJldHVybjsKKworCS8qCisJICogU2luY2UgdGhpcyBpcyBib2FyZC1zcGVjaWZpYyBjb2RlLCB3ZSdsbCBjaGVhdCBhbmQgdXNlIHRoZQorCSAqIHBoeXNpY2FsIGFkZHJlc3MgZGlyZWN0bHkgYXMgd2UgaGFwcGVuIHRvIGtub3cgdGhhdCBpdCdzCisJICogdGhlIHNhbWUgYXMgdGhlIHZpcnR1YWwgYWRkcmVzcy4KKwkgKi8KKwlyZWdzID0gKHZvaWQgX19pb21lbSBfX2ZvcmNlICopcmVzLT5zdGFydDsKKwlwY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicGNsayIpOworCWlmICghcGNsaykKKwkJcmV0dXJuOworCisJY2xrX2VuYWJsZShwY2xrKTsKKwlfX3Jhd193cml0ZWwoKGFkZHJbM10gPDwgMjQpIHwgKGFkZHJbMl0gPDwgMTYpCisJCSAgICAgfCAoYWRkclsxXSA8PCA4KSB8IGFkZHJbMF0sIHJlZ3MgKyAweDk4KTsKKwlfX3Jhd193cml0ZWwoKGFkZHJbNV0gPDwgOCkgfCBhZGRyWzRdLCByZWdzICsgMHg5Yyk7CisJY2xrX2Rpc2FibGUocGNsayk7CisJY2xrX3B1dChwY2xrKTsKK30KKwogdm9pZCBfX2luaXQgc2V0dXBfYm9hcmQodm9pZCkKIHsKIAlhdDMyX21hcF91c2FydCgxLCAwKTsJLyogL2Rldi90dHlTMCAqLwpAQCAtMzgsNyArMTAxLDggQEAKIAlhdDMyX2FkZF9kZXZpY2VfdXNhcnQoMSk7CiAJYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KDIpOwogCi0JYXQzMl9hZGRfZGV2aWNlX2V0aCgwLCAmZXRoMF9kYXRhKTsKKwlzZXRfaHdfYWRkcihhdDMyX2FkZF9kZXZpY2VfZXRoKDAsICZldGhfZGF0YVswXSkpOworCiAJYXQzMl9hZGRfZGV2aWNlX3NwaSgwKTsKIAlhdDMyX2FkZF9kZXZpY2VfbGNkYygwLCAmYXRzdGsxMDAwX2ZiMF9kYXRhKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAyX2RlZmNvbmZpZwppbmRleCBhZTkyYTE0Li43N2RhY2U5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAyX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzIKLSMgRnJpIE9jdCAyMCAxMTo1MjozNyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmM2CisjIEZyaSBKYW4gMjYgMTM6MTI6NTkgMjAwNwogIwogQ09ORklHX0FWUjMyPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKQEAgLTksNiArOSw4IEBACiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0zNiw2ICszOCw3IEBACiAjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19SRUxBWT15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKQEAgLTc1LDcgKzc4LDkgQEAKICMgQmxvY2sgbGF5ZXIKICMKIENPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEyNSw2ICsxMzAsNyBAQAogIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKIENPTkZJR19DTURMSU5FPSIiCkBAIC0xODIsNiArMTg4LDcgQEAKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTI2MCw2ICsyNjcsNyBAQAogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwogIwogQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKICMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKQEAgLTM1NSw3ICszNjMsNiBAQAogIwogIyBNaXNjIGRldmljZXMKICMKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAKICMKQEAgLTQwNSwxMSArNDEyLDE0IEBACiAjCiAjIFBIWSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKICMKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX01BQ0I9eQogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC01MDUsMTAgKzUxNSw2IEBACiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTYyMSw2ICs2MjcsMTAgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9bQpAQCAtNjgzLDcgKzY5Myw2IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CkBAIC03NjMsNiArNzcyLDExIEBACiBDT05GSUdfTkxTX1VURjg9bQogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQpAQCAtNzcwLDYgKzc4NCw4IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CkBAIC03ODUsMTMgKzgwMSwxMCBAQAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogCkBAIC04MDksNiArODIyLDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQpAQCAtODE3LDMgKzgzMSw0IEBACiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2F2cjMyX2tzeW1zLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9hdnIzMl9rc3ltcy5jCmluZGV4IDM3MmUzZjguLjgwZjU1ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL2F2cjMyX2tzeW1zLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvYXZyMzJfa3N5bXMuYwpAQCAtNywxMiArNywxMiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KIAogLyoKICAqIEdDQyBmdW5jdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICAqLwogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwogRVhQT1JUX1NZTUJPTChtZW1jcHkpOworRVhQT1JUX1NZTUJPTChjbGVhcl9wYWdlKTsKIAogLyoKICAqIFVzZXJzcGFjZSBhY2Nlc3Mgc3R1ZmYuCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMzE3ZGM1MC4uMGI0MzI1OSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3Byb2Nlc3MuYwpAQCAtMzgsNiArMzgsMTMgQEAKIAogdm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKIHsKKwkvKgorCSAqIEVudGVyIFN0b3AgbW9kZS4gVGhlIDMyIGtIeiBvc2NpbGxhdG9yIHdpbGwga2VlcCBydW5uaW5nIHNvCisJICogdGhlIFJUQyB3aWxsIGtlZXAgdGhlIHRpbWUgcHJvcGVybHkgYW5kIHRoZSBzeXN0ZW0gd2lsbAorCSAqIGJvb3QgcXVpY2tseS4KKwkgKi8KKwlhc20gdm9sYXRpbGUoInNsZWVwIDNcblx0IgorCQkgICAgICJzdWIgcGMsIC0yIik7CiB9CiAKIHZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL3NldHVwLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9zZXR1cC5jCmluZGV4IGVhMmQxZmYuLmEzNDIxMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvc2V0dXAuYwpAQCAtMjI5LDMwICsyMjksNiBAQAogfQogX190YWd0YWJsZShBVEFHX1JTVkRfTUVNLCBwYXJzZV90YWdfcnN2ZF9tZW0pOwogCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfZXRoZXJuZXQoc3RydWN0IHRhZyAqdGFnKQotewotI2lmIDAKLQljb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JLyoKLQkgKiBXZSByZWFsbHkgbmVlZCBhIGJ1cyB0eXBlIHRoYXQgc3VwcG9ydHMgImNsYXNzZXMiLi4udGhpcwotCSAqIHdpbGwgZG8gZm9yIG5vdyAodW50aWwgd2UgbXVzdCBoYW5kbGUgb3RoZXIga2luZHMgb2YKLQkgKiBldGhlcm5ldCBjb250cm9sbGVycykKLQkgKi8KLQlwZGV2ID0gcGxhdGZvcm1fZ2V0X2RldmljZSgibWFjYiIsIHRhZy0+dS5ldGhlcm5ldC5tYWNfaW5kZXgpOwotCWlmIChwZGV2ICYmIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7Ci0JCXN0cnVjdCBldGhfcGxhdGZvcm1fZGF0YSAqZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCi0JCWRhdGEtPnZhbGlkID0gMTsKLQkJZGF0YS0+bWlpX3BoeV9hZGRyID0gdGFnLT51LmV0aGVybmV0Lm1paV9waHlfYWRkcjsKLQkJbWVtY3B5KGRhdGEtPmh3X2FkZHIsIHRhZy0+dS5ldGhlcm5ldC5od19hZGRyZXNzLAotCQkgICAgICAgc2l6ZW9mKGRhdGEtPmh3X2FkZHIpKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLV9fdGFndGFibGUoQVRBR19FVEhFUk5FVCwgcGFyc2VfdGFnX2V0aGVybmV0KTsKLQogLyoKICAqIFNjYW4gdGhlIHRhZyB0YWJsZSBmb3IgdGhpcyB0YWcsIGFuZCBjYWxsIGl0cyBwYXJzZSBmdW5jdGlvbi4gVGhlCiAgKiB0YWcgdGFibGUgaXMgYnVpbHQgYnkgdGhlIGxpbmtlciBmcm9tIGFsbCB0aGUgX190YWd0YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9saWIvZGVsYXkuYyBiL2FyY2gvYXZyMzIvbGliL2RlbGF5LmMKaW5kZXggNDYyYzgzMC4uYjNiYzBiNSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9saWIvZGVsYXkuYworKysgYi9hcmNoL2F2cjMyL2xpYi9kZWxheS5jCkBAIC0xMiw5ICsxMiw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzcmVnLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAwMC5jIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDAwLmMKaW5kZXggN2ZmNmFkOC4uNDhmNGVmMyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDAwLmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDAwLmMKQEAgLTExLDYgKzExLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCisjaW5jbHVkZSA8YXNtL2FyY2gvYXQzMmFwNzAwMC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcG9ydG11eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3NtLmg+CkBAIC01Nyw2ICs1OCw5IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKF9uYW1lIyNfaWQjI19yZXNvdXJjZSksCVwKIH0KIAorI2RlZmluZSBzZWxlY3RfcGVyaXBoZXJhbChwaW4sIHBlcmlwaCwgZmxhZ3MpCQkJXAorCWF0MzJfc2VsZWN0X3BlcmlwaChHUElPX1BJTl8jI3BpbiwgR1BJT18jI3BlcmlwaCwgZmxhZ3MpCisKICNkZWZpbmUgREVWX0NMSyhfbmFtZSwgZGV2bmFtZSwgYnVzLCBfaW5kZXgpCQkJXAogc3RhdGljIHN0cnVjdCBjbGsgZGV2bmFtZSMjXyMjX25hbWUgPSB7CQkJCVwKIAkubmFtZQkJPSAjX25hbWUsCQkJCVwKQEAgLTY3LDE4ICs3MSw2IEBACiAJLmluZGV4CQk9IF9pbmRleCwJCQkJXAogfQogCi1lbnVtIHsKLQlQSU9BLAotCVBJT0IsCi0JUElPQywKLQlQSU9ELAotfTsKLQotZW51bSB7Ci0JRlVOQ19BLAotCUZVTkNfQiwKLX07Ci0KIHVuc2lnbmVkIGxvbmcgYXQzMmFwNzAwMF9vc2NfcmF0ZXNbM10gPSB7CiAJWzBdID0gMzI3NjgsCiAJLyogRklYTUU6IHRoZXNlIGFyZSBBVFNUSzEwMDItc3BlY2lmaWMgKi8KQEAgLTU2OSwyNiArNTYxLDI2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModm9pZCkKIHsKLQlwb3J0bXV4X3NldF9mdW5jKFBJT0EsICA4LCBGVU5DX0IpOwkvKiBSWEQJKi8KLQlwb3J0bXV4X3NldF9mdW5jKFBJT0EsICA5LCBGVU5DX0IpOwkvKiBUWEQJKi8KKwlzZWxlY3RfcGVyaXBoZXJhbChQQSg4KSwgIFBFUklQSF9CLCAwKTsJLyogUlhECSovCisJc2VsZWN0X3BlcmlwaGVyYWwoUEEoOSksICBQRVJJUEhfQiwgMCk7CS8qIFRYRAkqLwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHZvaWQpCiB7Ci0JcG9ydG11eF9zZXRfZnVuYyhQSU9BLCAxNywgRlVOQ19BKTsJLyogUlhECSovCi0JcG9ydG11eF9zZXRfZnVuYyhQSU9BLCAxOCwgRlVOQ19BKTsJLyogVFhECSovCisJc2VsZWN0X3BlcmlwaGVyYWwoUEEoMTcpLCBQRVJJUEhfQSwgMCk7CS8qIFJYRAkqLworCXNlbGVjdF9wZXJpcGhlcmFsKFBBKDE4KSwgUEVSSVBIX0EsIDApOwkvKiBUWEQJKi8KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDJfcGlucyh2b2lkKQogewotCXBvcnRtdXhfc2V0X2Z1bmMoUElPQiwgMjYsIEZVTkNfQik7CS8qIFJYRAkqLwotCXBvcnRtdXhfc2V0X2Z1bmMoUElPQiwgMjcsIEZVTkNfQik7CS8qIFRYRAkqLworCXNlbGVjdF9wZXJpcGhlcmFsKFBCKDI2KSwgUEVSSVBIX0IsIDApOwkvKiBSWEQJKi8KKwlzZWxlY3RfcGVyaXBoZXJhbChQQigyNyksIFBFUklQSF9CLCAwKTsJLyogVFhECSovCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQzX3BpbnModm9pZCkKIHsKLQlwb3J0bXV4X3NldF9mdW5jKFBJT0IsIDE4LCBGVU5DX0IpOwkvKiBSWEQJKi8KLQlwb3J0bXV4X3NldF9mdW5jKFBJT0IsIDE3LCBGVU5DX0IpOwkvKiBUWEQJKi8KKwlzZWxlY3RfcGVyaXBoZXJhbChQQigxOCksIFBFUklQSF9CLCAwKTsJLyogUlhECSovCisJc2VsZWN0X3BlcmlwaGVyYWwoUEIoMTcpLCBQRVJJUEhfQiwgMCk7CS8qIFRYRAkqLwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQzMl91c2FydHNbNF07CkBAIC02NTQsNiArNjQ2LDE1IEBACiBERVZfQ0xLKGhjbGssIG1hY2IwLCBoc2IsIDgpOwogREVWX0NMSyhwY2xrLCBtYWNiMCwgcGJiLCA2KTsKIAorc3RhdGljIHN0cnVjdCBldGhfcGxhdGZvcm1fZGF0YSBtYWNiMV9kYXRhOworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtYWNiMV9yZXNvdXJjZVtdID0geworCVBCTUVNKDB4ZmZmMDFjMDApLAorCUlSUSgyNiksCit9OworREVGSU5FX0RFVl9EQVRBKG1hY2IsIDEpOworREVWX0NMSyhoY2xrLCBtYWNiMSwgaHNiLCA5KTsKK0RFVl9DTEsocGNsaywgbWFjYjEsIHBiYiwgNyk7CisKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdAogYXQzMl9hZGRfZGV2aWNlX2V0aCh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBldGhfcGxhdGZvcm1fZGF0YSAqZGF0YSkKIHsKQEAgLTY2MywyNyArNjY0LDU0IEBACiAJY2FzZSAwOgogCQlwZGV2ID0gJm1hY2IwX2RldmljZTsKIAotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0MsICAzLCBGVU5DX0EpOwkvKiBUWEQwCSovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgIDQsIEZVTkNfQSk7CS8qIFRYRDEJKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9DLCAgNywgRlVOQ19BKTsJLyogVFhFTgkqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0MsICA4LCBGVU5DX0EpOwkvKiBUWENLICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgIDksIEZVTkNfQSk7CS8qIFJYRDAJKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9DLCAxMCwgRlVOQ19BKTsJLyogUlhEMQkqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0MsIDEzLCBGVU5DX0EpOwkvKiBSWEVSCSovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgMTUsIEZVTkNfQSk7CS8qIFJYRFYJKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9DLCAxNiwgRlVOQ19BKTsJLyogTURDCSovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgMTcsIEZVTkNfQSk7CS8qIE1ESU8JKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMyksICBQRVJJUEhfQSwgMCk7CS8qIFRYRDAJKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoNCksICBQRVJJUEhfQSwgMCk7CS8qIFRYRDEJKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoNyksICBQRVJJUEhfQSwgMCk7CS8qIFRYRU4JKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoOCksICBQRVJJUEhfQSwgMCk7CS8qIFRYQ0sgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoOSksICBQRVJJUEhfQSwgMCk7CS8qIFJYRDAJKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMTApLCBQRVJJUEhfQSwgMCk7CS8qIFJYRDEJKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMTMpLCBQRVJJUEhfQSwgMCk7CS8qIFJYRVIJKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMTUpLCBQRVJJUEhfQSwgMCk7CS8qIFJYRFYJKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMTYpLCBQRVJJUEhfQSwgMCk7CS8qIE1EQwkqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQQygxNyksIFBFUklQSF9BLCAwKTsJLyogTURJTwkqLwogCiAJCWlmICghZGF0YS0+aXNfcm1paSkgewotCQkJcG9ydG11eF9zZXRfZnVuYyhQSU9DLCAgMCwgRlVOQ19BKTsJLyogQ09MCSovCi0JCQlwb3J0bXV4X3NldF9mdW5jKFBJT0MsICAxLCBGVU5DX0EpOwkvKiBDUlMJKi8KLQkJCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgIDIsIEZVTkNfQSk7CS8qIFRYRVIJKi8KLQkJCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgIDUsIEZVTkNfQSk7CS8qIFRYRDIJKi8KLQkJCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgIDYsIEZVTkNfQSk7CS8qIFRYRDMgKi8KLQkJCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgMTEsIEZVTkNfQSk7CS8qIFJYRDIJKi8KLQkJCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgMTIsIEZVTkNfQSk7CS8qIFJYRDMJKi8KLQkJCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgMTQsIEZVTkNfQSk7CS8qIFJYQ0sJKi8KLQkJCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgMTgsIEZVTkNfQSk7CS8qIFNQRAkqLworCQkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMCksICBQRVJJUEhfQSwgMCk7CS8qIENPTAkqLworCQkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMSksICBQRVJJUEhfQSwgMCk7CS8qIENSUwkqLworCQkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMiksICBQRVJJUEhfQSwgMCk7CS8qIFRYRVIJKi8KKwkJCXNlbGVjdF9wZXJpcGhlcmFsKFBDKDUpLCAgUEVSSVBIX0EsIDApOwkvKiBUWEQyCSovCisJCQlzZWxlY3RfcGVyaXBoZXJhbChQQyg2KSwgIFBFUklQSF9BLCAwKTsJLyogVFhEMyAqLworCQkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMTEpLCBQRVJJUEhfQSwgMCk7CS8qIFJYRDIJKi8KKwkJCXNlbGVjdF9wZXJpcGhlcmFsKFBDKDEyKSwgUEVSSVBIX0EsIDApOwkvKiBSWEQzCSovCisJCQlzZWxlY3RfcGVyaXBoZXJhbChQQygxNCksIFBFUklQSF9BLCAwKTsJLyogUlhDSwkqLworCQkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMTgpLCBQRVJJUEhfQSwgMCk7CS8qIFNQRAkqLworCQl9CisJCWJyZWFrOworCisJY2FzZSAxOgorCQlwZGV2ID0gJm1hY2IxX2RldmljZTsKKworCQlzZWxlY3RfcGVyaXBoZXJhbChQRCgxMyksIFBFUklQSF9CLCAwKTsJCS8qIFRYRDAJKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEQoMTQpLCBQRVJJUEhfQiwgMCk7CQkvKiBUWEQxCSovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDExKSwgUEVSSVBIX0IsIDApOwkJLyogVFhFTgkqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQRCgxMiksIFBFUklQSF9CLCAwKTsJCS8qIFRYQ0sgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEQoMTApLCBQRVJJUEhfQiwgMCk7CQkvKiBSWEQwCSovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDYpLCAgUEVSSVBIX0IsIDApOwkJLyogUlhEMQkqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQRCg1KSwgIFBFUklQSF9CLCAwKTsJCS8qIFJYRVIJKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEQoNCksICBQRVJJUEhfQiwgMCk7CQkvKiBSWERWCSovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDMpLCAgUEVSSVBIX0IsIDApOwkJLyogTURDCSovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDIpLCAgUEVSSVBIX0IsIDApOwkJLyogTURJTwkqLworCisJCWlmICghZGF0YS0+aXNfcm1paSkgeworCQkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMTkpLCBQRVJJUEhfQiwgMCk7CS8qIENPTAkqLworCQkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMjMpLCBQRVJJUEhfQiwgMCk7CS8qIENSUwkqLworCQkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMjYpLCBQRVJJUEhfQiwgMCk7CS8qIFRYRVIJKi8KKwkJCXNlbGVjdF9wZXJpcGhlcmFsKFBDKDI3KSwgUEVSSVBIX0IsIDApOwkvKiBUWEQyCSovCisJCQlzZWxlY3RfcGVyaXBoZXJhbChQQygyOCksIFBFUklQSF9CLCAwKTsJLyogVFhEMyAqLworCQkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMjkpLCBQRVJJUEhfQiwgMCk7CS8qIFJYRDIJKi8KKwkJCXNlbGVjdF9wZXJpcGhlcmFsKFBDKDMwKSwgUEVSSVBIX0IsIDApOwkvKiBSWEQzCSovCisJCQlzZWxlY3RfcGVyaXBoZXJhbChQQygyNCksIFBFUklQSF9CLCAwKTsJLyogUlhDSwkqLworCQkJc2VsZWN0X3BlcmlwaGVyYWwoUEQoMTUpLCBQRVJJUEhfQiwgMCk7CS8qIFNQRAkqLwogCQl9CiAJCWJyZWFrOwogCkBAIC03MTQsMTIgKzc0MiwxMiBAQAogCXN3aXRjaCAoaWQpIHsKIAljYXNlIDA6CiAJCXBkZXYgPSAmc3BpMF9kZXZpY2U7Ci0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQSwgIDAsIEZVTkNfQSk7CS8qIE1JU08JICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQSwgIDEsIEZVTkNfQSk7CS8qIE1PU0kJICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQSwgIDIsIEZVTkNfQSk7CS8qIFNDSwkgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9BLCAgMywgRlVOQ19BKTsJLyogTlBDUzAgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9BLCAgNCwgRlVOQ19BKTsJLyogTlBDUzEgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9BLCAgNSwgRlVOQ19BKTsJLyogTlBDUzIgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEEoMCksICBQRVJJUEhfQSwgMCk7CS8qIE1JU08JICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBBKDEpLCAgUEVSSVBIX0EsIDApOwkvKiBNT1NJCSAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQQSgyKSwgIFBFUklQSF9BLCAwKTsJLyogU0NLCSAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQQSgzKSwgIFBFUklQSF9BLCAwKTsJLyogTlBDUzAgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEEoNCksICBQRVJJUEhfQSwgMCk7CS8qIE5QQ1MxICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBBKDUpLCAgUEVSSVBIX0EsIDApOwkvKiBOUENTMiAqLwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC03NjIsMzcgKzc5MCwzNyBAQAogCXN3aXRjaCAoaWQpIHsKIAljYXNlIDA6CiAJCXBkZXYgPSAmbGNkYzBfZGV2aWNlOwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0MsIDE5LCBGVU5DX0EpOwkvKiBDQwkgICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgMjAsIEZVTkNfQSk7CS8qIEhTWU5DICAqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0MsIDIxLCBGVU5DX0EpOwkvKiBQQ0xLCSAgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9DLCAyMiwgRlVOQ19BKTsJLyogVlNZTkMgICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgMjMsIEZVTkNfQSk7CS8qIERWQUwJICAqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0MsIDI0LCBGVU5DX0EpOwkvKiBNT0RFCSAgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9DLCAyNSwgRlVOQ19BKTsJLyogUFdSCSAgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9DLCAyNiwgRlVOQ19BKTsJLyogREFUQTAgICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgMjcsIEZVTkNfQSk7CS8qIERBVEExICAqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0MsIDI4LCBGVU5DX0EpOwkvKiBEQVRBMiAgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9DLCAyOSwgRlVOQ19BKTsJLyogREFUQTMgICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPQywgMzAsIEZVTkNfQSk7CS8qIERBVEE0ICAqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0MsIDMxLCBGVU5DX0EpOwkvKiBEQVRBNSAgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9ELCAgMCwgRlVOQ19BKTsJLyogREFUQTYgICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPRCwgIDEsIEZVTkNfQSk7CS8qIERBVEE3ICAqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0QsICAyLCBGVU5DX0EpOwkvKiBEQVRBOCAgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9ELCAgMywgRlVOQ19BKTsJLyogREFUQTkgICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPRCwgIDQsIEZVTkNfQSk7CS8qIERBVEExMCAqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0QsICA1LCBGVU5DX0EpOwkvKiBEQVRBMTEgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9ELCAgNiwgRlVOQ19BKTsJLyogREFUQTEyICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPRCwgIDcsIEZVTkNfQSk7CS8qIERBVEExMyAqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0QsICA4LCBGVU5DX0EpOwkvKiBEQVRBMTQgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9ELCAgOSwgRlVOQ19BKTsJLyogREFUQTE1ICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPRCwgMTAsIEZVTkNfQSk7CS8qIERBVEExNiAqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0QsIDExLCBGVU5DX0EpOwkvKiBEQVRBMTcgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9ELCAxMiwgRlVOQ19BKTsJLyogREFUQTE4ICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPRCwgMTMsIEZVTkNfQSk7CS8qIERBVEExOSAqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0QsIDE0LCBGVU5DX0EpOwkvKiBEQVRBMjAgKi8KLQkJcG9ydG11eF9zZXRfZnVuYyhQSU9ELCAxNSwgRlVOQ19BKTsJLyogREFUQTIxICovCi0JCXBvcnRtdXhfc2V0X2Z1bmMoUElPRCwgMTYsIEZVTkNfQSk7CS8qIERBVEEyMiAqLwotCQlwb3J0bXV4X3NldF9mdW5jKFBJT0QsIDE3LCBGVU5DX0EpOwkvKiBEQVRBMjMgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMTkpLCBQRVJJUEhfQSwgMCk7CS8qIENDCSAgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMjApLCBQRVJJUEhfQSwgMCk7CS8qIEhTWU5DICAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQQygyMSksIFBFUklQSF9BLCAwKTsJLyogUENMSwkgICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBDKDIyKSwgUEVSSVBIX0EsIDApOwkvKiBWU1lOQyAgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMjMpLCBQRVJJUEhfQSwgMCk7CS8qIERWQUwJICAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQQygyNCksIFBFUklQSF9BLCAwKTsJLyogTU9ERQkgICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBDKDI1KSwgUEVSSVBIX0EsIDApOwkvKiBQV1IJICAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQQygyNiksIFBFUklQSF9BLCAwKTsJLyogREFUQTAgICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBDKDI3KSwgUEVSSVBIX0EsIDApOwkvKiBEQVRBMSAgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMjgpLCBQRVJJUEhfQSwgMCk7CS8qIERBVEEyICAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQQygyOSksIFBFUklQSF9BLCAwKTsJLyogREFUQTMgICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBDKDMwKSwgUEVSSVBIX0EsIDApOwkvKiBEQVRBNCAgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEMoMzEpLCBQRVJJUEhfQSwgMCk7CS8qIERBVEE1ICAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQRCgwKSwgIFBFUklQSF9BLCAwKTsJLyogREFUQTYgICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDEpLCAgUEVSSVBIX0EsIDApOwkvKiBEQVRBNyAgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEQoMiksICBQRVJJUEhfQSwgMCk7CS8qIERBVEE4ICAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQRCgzKSwgIFBFUklQSF9BLCAwKTsJLyogREFUQTkgICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDQpLCAgUEVSSVBIX0EsIDApOwkvKiBEQVRBMTAgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEQoNSksICBQRVJJUEhfQSwgMCk7CS8qIERBVEExMSAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQRCg2KSwgIFBFUklQSF9BLCAwKTsJLyogREFUQTEyICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDcpLCAgUEVSSVBIX0EsIDApOwkvKiBEQVRBMTMgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEQoOCksICBQRVJJUEhfQSwgMCk7CS8qIERBVEExNCAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQRCg5KSwgIFBFUklQSF9BLCAwKTsJLyogREFUQTE1ICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDEwKSwgUEVSSVBIX0EsIDApOwkvKiBEQVRBMTYgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEQoMTEpLCBQRVJJUEhfQSwgMCk7CS8qIERBVEExNyAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQRCgxMiksIFBFUklQSF9BLCAwKTsJLyogREFUQTE4ICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDEzKSwgUEVSSVBIX0EsIDApOwkvKiBEQVRBMTkgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEQoMTQpLCBQRVJJUEhfQSwgMCk7CS8qIERBVEEyMCAqLworCQlzZWxlY3RfcGVyaXBoZXJhbChQRCgxNSksIFBFUklQSF9BLCAwKTsJLyogREFUQTIxICovCisJCXNlbGVjdF9wZXJpcGhlcmFsKFBEKDE2KSwgUEVSSVBIX0EsIDApOwkvKiBEQVRBMjIgKi8KKwkJc2VsZWN0X3BlcmlwaGVyYWwoUEQoMTcpLCBQRVJJUEhfQSwgMCk7CS8qIERBVEEyMyAqLwogCiAJCWNsa19zZXRfcGFyZW50KCZsY2RjMF9waXhjbGssICZwbGwwKTsKIAkJY2xrX3NldF9yYXRlKCZsY2RjMF9waXhjbGssIGNsa19nZXRfcmF0ZSgmcGxsMCkpOwpAQCAtODM4LDYgKzg2Niw4IEBACiAJJmF0bWVsX3VzYXJ0M191c2FydCwKIAkmbWFjYjBfaGNsaywKIAkmbWFjYjBfcGNsaywKKwkmbWFjYjFfaGNsaywKKwkmbWFjYjFfcGNsaywKIAkmc3BpMF9tY2ssCiAJJmxjZGMwX2hjbGssCiAJJmxjZGMwX3BpeGNsaywKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvZXh0aW50LmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2V4dGludC5jCmluZGV4IDRkZmYxZjkuLmI1OTI3MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvZXh0aW50LmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYwpAQCAtNDksMTIgKzQ5LDI1IEBACiBzdGF0aWMgaW50IGVpbV9zZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKIAlzdHJ1Y3QgYXQzMl9zbSAqc20gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBpbnQgaSA9IGlycSAtIHNtLT5laW1fZmlyc3RfaXJxOwogCXUzMiBtb2RlLCBlZGdlLCBsZXZlbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0JZmxvd190eXBlICY9IElSUV9UWVBFX1NFTlNFX01BU0s7CisJaWYgKGZsb3dfdHlwZSA9PSBJUlFfVFlQRV9OT05FKQorCQlmbG93X3R5cGUgPSBJUlFfVFlQRV9MRVZFTF9MT1c7CisKKwlkZXNjID0gJmlycV9kZXNjW2lycV07CisJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1RZUEVfU0VOU0VfTUFTSyB8IElSUV9MRVZFTCk7CisJZGVzYy0+c3RhdHVzIHw9IGZsb3dfdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7CisKKwlpZiAoZmxvd190eXBlICYgKElSUV9UWVBFX0xFVkVMX0xPVyB8IElSUV9UWVBFX0xFVkVMX0hJR0gpKSB7CisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCX0gZWxzZSB7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7CiAKQEAgLTE0OCwxMCArMTYxLDE1IEBACiAJcGF0dGVybiA9IHNtX3JlYWRsKHNtLCBFSU1fTU9ERSk7CiAJbnJfaXJxcyA9IGZscyhwYXR0ZXJuKTsKIAorCS8qIFRyaWdnZXIgb24gZmFsbGluZyBlZGdlIHVubGVzcyBvdmVycmlkZGVuIGJ5IGRyaXZlciAqLworCXNtX3dyaXRlbChzbSwgRUlNX01PREUsIDBVTCk7CisJc21fd3JpdGVsKHNtLCBFSU1fRURHRSwgMFVMKTsKKwogCXNtLT5laW1fY2hpcCA9ICZlaW1fY2hpcDsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKHNtLT5laW1fZmlyc3RfaXJxICsgaSwgJmVpbV9jaGlwKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHNtLT5laW1fZmlyc3RfaXJxICsgaSwgJmVpbV9jaGlwLAorCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKIAkJc2V0X2lycV9jaGlwX2RhdGEoc20tPmVpbV9maXJzdF9pcnEgKyBpLCBzbSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2ludGMuYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5jCmluZGV4IGViODdhMTguLmRkNWMwMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5jCkBAIC0xMzYsMyArMTM2LDcgQEAKIAlwYW5pYygiSW50ZXJydXB0IGNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkIVxuIik7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgaW50Y19nZXRfcGVuZGluZyhpbnQgZ3JvdXApCit7CisJcmV0dXJuIGludGNfcmVhZGwoJmludGMwLCBJTlRSRVEwICsgNCAqIGdyb3VwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvcGlvLmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3Bpby5jCmluZGV4IGQzYWFiZmMuLmYxMjgwZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvcGlvLmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9waW8uYwpAQCAtMjUsMjcgKzI1LDk4IEBACiAJdm9pZCBfX2lvbWVtICpyZWdzOwogCWNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IGNsayAqY2xrOwotCXUzMiBhbGxvY19tYXNrOworCXUzMiBwaW5tdXhfbWFzazsKIAljaGFyIG5hbWVbMzJdOwogfTsKIAogc3RhdGljIHN0cnVjdCBwaW9fZGV2aWNlIHBpb19kZXZbTUFYX05SX1BJT19ERVZJQ0VTXTsKIAotdm9pZCBwb3J0bXV4X3NldF9mdW5jKHVuc2lnbmVkIGludCBwb3J0bXV4X2lkLCB1bnNpZ25lZCBpbnQgcGluX2lkLAotCQkgICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb25faWQpCitzdGF0aWMgc3RydWN0IHBpb19kZXZpY2UgKmdwaW9fdG9fcGlvKHVuc2lnbmVkIGludCBncGlvKQogewogCXN0cnVjdCBwaW9fZGV2aWNlICpwaW87Ci0JdTMyIG1hc2sgPSAxIDw8IHBpbl9pZDsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CiAKLQlCVUdfT04ocG9ydG11eF9pZCA+PSBNQVhfTlJfUElPX0RFVklDRVMpOworCWluZGV4ID0gZ3BpbyA+PiA1OworCWlmIChpbmRleCA+PSBNQVhfTlJfUElPX0RFVklDRVMpCisJCXJldHVybiBOVUxMOworCXBpbyA9ICZwaW9fZGV2W2luZGV4XTsKKwlpZiAoIXBpby0+cmVncykKKwkJcmV0dXJuIE5VTEw7CiAKLQlwaW8gPSAmcGlvX2Rldltwb3J0bXV4X2lkXTsKKwlyZXR1cm4gcGlvOworfQogCi0JaWYgKGZ1bmN0aW9uX2lkKQorLyogUGluIG11bHRpcGxleGluZyBBUEkgKi8KKwordm9pZCBfX2luaXQgYXQzMl9zZWxlY3RfcGVyaXBoKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBwZXJpcGgsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgcGlvX2RldmljZSAqcGlvOworCXVuc2lnbmVkIGludCBwaW5faW5kZXggPSBwaW4gJiAweDFmOworCXUzMiBtYXNrID0gMSA8PCBwaW5faW5kZXg7CisKKwlwaW8gPSBncGlvX3RvX3BpbyhwaW4pOworCWlmICh1bmxpa2VseSghcGlvKSkgeworCQlwcmludGsoInBpbzogaW52YWxpZCBwaW4gJXVcbiIsIHBpbik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAodW5saWtlbHkodGVzdF9hbmRfc2V0X2JpdChwaW5faW5kZXgsICZwaW8tPnBpbm11eF9tYXNrKSkpIHsKKwkJcHJpbnRrKCIlczogcGluICV1IGlzIGJ1c3lcbiIsIHBpby0+bmFtZSwgcGluX2luZGV4KTsKKwkJZ290byBmYWlsOworCX0KKworCXBpb193cml0ZWwocGlvLCBQVUVSLCBtYXNrKTsKKwlpZiAocGVyaXBoKQogCQlwaW9fd3JpdGVsKHBpbywgQlNSLCBtYXNrKTsKIAllbHNlCiAJCXBpb193cml0ZWwocGlvLCBBU1IsIG1hc2spOworCiAJcGlvX3dyaXRlbChwaW8sIFBEUiwgbWFzayk7CisJaWYgKCEoZmxhZ3MgJiBBVDMyX0dQSU9GX1BVTExVUCkpCisJCXBpb193cml0ZWwocGlvLCBQVURSLCBtYXNrKTsKKworCXJldHVybjsKKworZmFpbDoKKwlkdW1wX3N0YWNrKCk7Cit9CisKK3ZvaWQgX19pbml0IGF0MzJfc2VsZWN0X2dwaW8odW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgcGlvX2RldmljZSAqcGlvOworCXVuc2lnbmVkIGludCBwaW5faW5kZXggPSBwaW4gJiAweDFmOworCXUzMiBtYXNrID0gMSA8PCBwaW5faW5kZXg7CisKKwlwaW8gPSBncGlvX3RvX3BpbyhwaW4pOworCWlmICh1bmxpa2VseSghcGlvKSkgeworCQlwcmludGsoInBpbzogaW52YWxpZCBwaW4gJXVcbiIsIHBpbik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAodW5saWtlbHkodGVzdF9hbmRfc2V0X2JpdChwaW5faW5kZXgsICZwaW8tPnBpbm11eF9tYXNrKSkpIHsKKwkJcHJpbnRrKCIlczogcGluICV1IGlzIGJ1c3lcbiIsIHBpby0+bmFtZSwgcGluX2luZGV4KTsKKwkJZ290byBmYWlsOworCX0KKworCXBpb193cml0ZWwocGlvLCBQVUVSLCBtYXNrKTsKKwlpZiAoZmxhZ3MgJiBBVDMyX0dQSU9GX0hJR0gpCisJCXBpb193cml0ZWwocGlvLCBTT0RSLCBtYXNrKTsKKwllbHNlCisJCXBpb193cml0ZWwocGlvLCBDT0RSLCBtYXNrKTsKKwlpZiAoZmxhZ3MgJiBBVDMyX0dQSU9GX09VVFBVVCkKKwkJcGlvX3dyaXRlbChwaW8sIE9FUiwgbWFzayk7CisJZWxzZQorCQlwaW9fd3JpdGVsKHBpbywgT0RSLCBtYXNrKTsKKworCXBpb193cml0ZWwocGlvLCBQRVIsIG1hc2spOworCWlmICghKGZsYWdzICYgQVQzMl9HUElPRl9QVUxMVVApKQorCQlwaW9fd3JpdGVsKHBpbywgUFVEUiwgbWFzayk7CisKKwlyZXR1cm47CisKK2ZhaWw6CisJZHVtcF9zdGFjaygpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvc20uYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvc20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMzMDZlYi4uMDAwMDAwMAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3NtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBAQAotLyoKLSAqIFN5c3RlbSBNYW5hZ2VyIGRyaXZlciBmb3IgQVQzMkFQIENQVXMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXRtZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCi0jaW5jbHVkZSA8YXNtL2ludGMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXJjaC9zbS5oPgotCi0jaW5jbHVkZSAic20uaCIKLQotI2RlZmluZSBTTV9FSU1fSVJRX1JFU09VUkNFCTEKLSNkZWZpbmUgU01fUE1fSVJRX1JFU09VUkNFCTIKLSNkZWZpbmUgU01fUlRDX0lSUV9SRVNPVVJDRQkzCi0KLSNkZWZpbmUgdG9fZWltKGlycWMpIGNvbnRhaW5lcl9vZihpcnFjLCBzdHJ1Y3QgYXQzMl9zbSwgaXJxYykKLQotc3RydWN0IGF0MzJfc20gc3lzdGVtX21hbmFnZXI7Ci0KLWludCBfX2luaXQgYXQzMl9zbV9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHJlc291cmNlICpyZWdzOwotCXN0cnVjdCBhdDMyX3NtICpzbSA9ICZzeXN0ZW1fbWFuYWdlcjsKLQlpbnQgcmV0ID0gLUVOWElPOwotCi0JcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZSgmYXQzMl9zbV9kZXZpY2UsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJlZ3MpCi0JCWdvdG8gZmFpbDsKLQotCXNwaW5fbG9ja19pbml0KCZzbS0+bG9jayk7Ci0Jc20tPnBkZXYgPSAmYXQzMl9zbV9kZXZpY2U7Ci0KLQlyZXQgPSAtRU5PTUVNOwotCXNtLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxKTsKLQlpZiAoIXNtLT5yZWdzKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBpbml0aWFsaXplIFN5c3RlbSBNYW5hZ2VyOiAlZFxuIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogRXh0ZXJuYWwgSW50ZXJydXB0IE1vZHVsZSAoRUlNKS4KLSAqCi0gKiBFSU0gZ2V0cyBsZXZlbC0gb3IgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyBvZiBlaXRoZXIgcG9sYXJpdHkKLSAqIGZyb20gdGhlIG91dHNpZGUgYW5kIGNvbnZlcnRzIGl0IHRvIGFjdGl2ZS1oaWdoIGxldmVsLXRyaWdnZXJlZAotICogaW50ZXJydXB0cyB0aGF0IHRoZSBpbnRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbGxlciBjYW4gaGFuZGxlLiBFSU0KLSAqIGFsc28gcHJvdmlkZXMgbWFza2luZy91bm1hc2tpbmcgb2YgaW50ZXJydXB0cywgYXMgd2VsbCBhcwotICogYWNrbm93bGVkZ2luZyBvZiBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzLgotICovCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzcHVyaW91c19laW1faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKLQkJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJTcHVyaW91cyBFSU0gaW50ZXJydXB0ICVkXG4iLCBpcnEpOwotCWRpc2FibGVfaXJxKGlycSk7Ci0JcmV0dXJuIElSUV9OT05FOwotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBlaW1fc3B1cmlvdXNfYWN0aW9uID0gewotCS5oYW5kbGVyID0gc3B1cmlvdXNfZWltX2ludGVycnVwdCwKLX07Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBlaW1faGFuZGxlX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBpcnFfY29udHJvbGxlciAqIGlycWMgPSBkZXZfaWQ7Ci0Jc3RydWN0IGF0MzJfc20gKnNtID0gdG9fZWltKGlycWMpOwotCXVuc2lnbmVkIGxvbmcgcGVuZGluZzsKLQotCS8qCi0JICogTm8gbmVlZCB0byBkaXNhYmxlIGludGVycnVwdHMgZ2xvYmFsbHkuICBUaGUgaW50ZXJydXB0Ci0JICogbGV2ZWwgcmVsZXZhbnQgdG8gdGhpcyBncm91cCBtdXN0IGJlIG1hc2tlZCBhbGwgdGhlIHRpbWUsCi0JICogc28gd2Uga25vdyB0aGF0IHRoaXMgcGFydGljdWxhciBFSU0gaW5zdGFuY2Ugd2lsbCBub3QgYmUKLQkgKiByZS1lbnRlcmVkLgotCSAqLwotCXNwaW5fbG9jaygmc20tPmxvY2spOwotCi0JcGVuZGluZyA9IGludGNfZ2V0X3BlbmRpbmcoc20tPmlycWMuaXJxX2dyb3VwKTsKLQlpZiAodW5saWtlbHkoIXBlbmRpbmcpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRUlNIChncm91cCAldSk6IE5vIGludGVycnVwdHMgcGVuZGluZyFcbiIsCi0JCSAgICAgICBzbS0+aXJxYy5pcnFfZ3JvdXApOwotCQlnb3RvIHVubG9jazsKLQl9Ci0KLQlkbyB7Ci0JCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKLQkJdW5zaWduZWQgaW50IGk7Ci0KLQkJaSA9IGZscyhwZW5kaW5nKSAtIDE7Ci0JCXBlbmRpbmcgJj0gfigxIDw8IGkpOwotCQlhY3Rpb24gPSBzbS0+YWN0aW9uW2ldOwotCi0JCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KLQkJc21fd3JpdGVsKHNtLCBFSU1fSUNSLCAxIDw8IGkpOwotCi0JCXNwaW5fdW5sb2NrKCZzbS0+bG9jayk7Ci0KLQkJaWYgKGFjdGlvbi0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpCi0JCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQlhY3Rpb24tPmhhbmRsZXIoc20tPmlycWMuZmlyc3RfaXJxICsgaSwgYWN0aW9uLT5kZXZfaWQsIHJlZ3MpOwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCXNwaW5fbG9jaygmc20tPmxvY2spOwotCQlpZiAoYWN0aW9uLT5mbGFncyAmIFNBX1NBTVBMRV9SQU5ET00pCi0JCQlhZGRfaW50ZXJydXB0X3JhbmRvbW5lc3Moc20tPmlycWMuZmlyc3RfaXJxICsgaSk7Ci0JfSB3aGlsZSAocGVuZGluZyk7Ci0KLXVubG9jazoKLQlzcGluX3VubG9jaygmc20tPmxvY2spOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHZvaWQgZWltX21hc2soc3RydWN0IGlycV9jb250cm9sbGVyICppcnFjLCB1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBhdDMyX3NtICpzbSA9IHRvX2VpbShpcnFjKTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWkgPSBpcnEgLSBzbS0+aXJxYy5maXJzdF9pcnE7Ci0Jc21fd3JpdGVsKHNtLCBFSU1fSURSLCAxIDw8IGkpOwotfQotCi1zdGF0aWMgdm9pZCBlaW1fdW5tYXNrKHN0cnVjdCBpcnFfY29udHJvbGxlciAqaXJxYywgdW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgYXQzMl9zbSAqc20gPSB0b19laW0oaXJxYyk7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpID0gaXJxIC0gc20tPmlycWMuZmlyc3RfaXJxOwotCXNtX3dyaXRlbChzbSwgRUlNX0lFUiwgMSA8PCBpKTsKLX0KLQotc3RhdGljIGludCBlaW1fc2V0dXAoc3RydWN0IGlycV9jb250cm9sbGVyICppcnFjLCB1bnNpZ25lZCBpbnQgaXJxLAotCQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pCi17Ci0Jc3RydWN0IGF0MzJfc20gKnNtID0gdG9fZWltKGlycWMpOwotCXNtLT5hY3Rpb25baXJxIC0gc20tPmlycWMuZmlyc3RfaXJxXSA9IGFjdGlvbjsKLQkvKiBBY2tub3dsZWRnZSBlYXJsaWVyIGludGVycnVwdHMgKi8KLQlzbV93cml0ZWwoc20sIEVJTV9JQ1IsICgxPDwoaXJxIC0gc20tPmlycWMuZmlyc3RfaXJxKSkpOwotCWVpbV91bm1hc2soaXJxYywgaXJxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZWltX2ZyZWUoc3RydWN0IGlycV9jb250cm9sbGVyICppcnFjLCB1bnNpZ25lZCBpbnQgaXJxLAotCQl2b2lkICpkZXYpCi17Ci0Jc3RydWN0IGF0MzJfc20gKnNtID0gdG9fZWltKGlycWMpOwotCWVpbV9tYXNrKGlycWMsIGlycSk7Ci0Jc20tPmFjdGlvbltpcnEgLSBzbS0+aXJxYy5maXJzdF9pcnFdID0gJmVpbV9zcHVyaW91c19hY3Rpb247Ci19Ci0KLXN0YXRpYyBpbnQgZWltX3NldF90eXBlKHN0cnVjdCBpcnFfY29udHJvbGxlciAqaXJxYywgdW5zaWduZWQgaW50IGlycSwKLQkJCXVuc2lnbmVkIGludCB0eXBlKQotewotCXN0cnVjdCBhdDMyX3NtICpzbSA9IHRvX2VpbShpcnFjKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiB2YWx1ZSwgcGF0dGVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOwotCi0JcGF0dGVybiA9IDEgPDwgKGlycSAtIHNtLT5pcnFjLmZpcnN0X2lycSk7Ci0KLQl2YWx1ZSA9IHNtX3JlYWRsKHNtLCBFSU1fTU9ERSk7Ci0JaWYgKHR5cGUgJiBJUlFfVFlQRV9MRVZFTCkKLQkJdmFsdWUgfD0gcGF0dGVybjsKLQllbHNlCi0JCXZhbHVlICY9IH5wYXR0ZXJuOwotCXNtX3dyaXRlbChzbSwgRUlNX01PREUsIHZhbHVlKTsKLQl2YWx1ZSA9IHNtX3JlYWRsKHNtLCBFSU1fRURHRSk7Ci0JaWYgKHR5cGUgJiBJUlFfRURHRV9SSVNJTkcpCi0JCXZhbHVlIHw9IHBhdHRlcm47Ci0JZWxzZQotCQl2YWx1ZSAmPSB+cGF0dGVybjsKLQlzbV93cml0ZWwoc20sIEVJTV9FREdFLCB2YWx1ZSk7Ci0JdmFsdWUgPSBzbV9yZWFkbChzbSwgRUlNX0xFVkVMKTsKLQlpZiAodHlwZSAmIElSUV9MRVZFTF9ISUdIKQotCQl2YWx1ZSB8PSBwYXR0ZXJuOwotCWVsc2UKLQkJdmFsdWUgJj0gfnBhdHRlcm47Ci0Jc21fd3JpdGVsKHNtLCBFSU1fTEVWRUwsIHZhbHVlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBlaW1fZ2V0X3R5cGUoc3RydWN0IGlycV9jb250cm9sbGVyICppcnFjLAotCQkJCSB1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBhdDMyX3NtICpzbSA9IHRvX2VpbShpcnFjKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCB0eXBlID0gMDsKLQl1MzIgbW9kZSwgZWRnZSwgbGV2ZWwsIHBhdHRlcm47Ci0KLQlwYXR0ZXJuID0gMSA8PCAoaXJxIC0gc20tPmlycWMuZmlyc3RfaXJxKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOwotCW1vZGUgPSBzbV9yZWFkbChzbSwgRUlNX01PREUpOwotCWVkZ2UgPSBzbV9yZWFkbChzbSwgRUlNX0VER0UpOwotCWxldmVsID0gc21fcmVhZGwoc20sIEVJTV9MRVZFTCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKLQotCWlmIChtb2RlICYgcGF0dGVybikKLQkJdHlwZSB8PSBJUlFfVFlQRV9MRVZFTDsKLQlpZiAoZWRnZSAmIHBhdHRlcm4pCi0JCXR5cGUgfD0gSVJRX0VER0VfUklTSU5HOwotCWlmIChsZXZlbCAmIHBhdHRlcm4pCi0JCXR5cGUgfD0gSVJRX0xFVkVMX0hJR0g7Ci0KLQlyZXR1cm4gdHlwZTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY29udHJvbGxlcl9jbGFzcyBlaW1faXJxX2NsYXNzID0gewotCS50eXBlbmFtZQk9ICJFSU0iLAotCS5oYW5kbGUJCT0gZWltX2hhbmRsZV9pcnEsCi0JLnNldHVwCQk9IGVpbV9zZXR1cCwKLQkuZnJlZQkJPSBlaW1fZnJlZSwKLQkubWFzawkJPSBlaW1fbWFzaywKLQkudW5tYXNrCQk9IGVpbV91bm1hc2ssCi0JLnNldF90eXBlCT0gZWltX3NldF90eXBlLAotCS5nZXRfdHlwZQk9IGVpbV9nZXRfdHlwZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVpbV9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGF0MzJfc20gKnNtID0gJnN5c3RlbV9tYW5hZ2VyOwotCXVuc2lnbmVkIGludCBpOwotCXUzMiBwYXR0ZXJuOwotCWludCByZXQ7Ci0KLQkvKgotCSAqIFRoZSBFSU0gaXMgcmVhbGx5IHRoZSBzYW1lIG1vZHVsZSBhcyBTTSwgc28gcmVnaXN0ZXIKLQkgKiBtYXBwaW5nLCBldGMuIGhhcyBiZWVuIHRha2VuIGNhcmUgb2YgYWxyZWFkeS4KLQkgKi8KLQotCS8qCi0JICogRmluZCBvdXQgaG93IG1hbnkgaW50ZXJydXB0IGxpbmVzIHRoYXQgYXJlIGFjdHVhbGx5Ci0JICogaW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUuCi0JICovCi0Jc21fd3JpdGVsKHNtLCBFSU1fSURSLCB+MFVMKTsKLQlzbV93cml0ZWwoc20sIEVJTV9NT0RFLCB+MFVMKTsKLQlwYXR0ZXJuID0gc21fcmVhZGwoc20sIEVJTV9NT0RFKTsKLQlzbS0+aXJxYy5ucl9pcnFzID0gZmxzKHBhdHRlcm4pOwotCi0JcmV0ID0gLUVOT01FTTsKLQlzbS0+YWN0aW9uID0ga21hbGxvYyhzaXplb2YoKnNtLT5hY3Rpb24pICogc20tPmlycWMubnJfaXJxcywKLQkJCSAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzbS0+YWN0aW9uKQotCQlnb3RvIG91dDsKLQotCWZvciAoaSA9IDA7IGkgPCBzbS0+aXJxYy5ucl9pcnFzOyBpKyspCi0JCXNtLT5hY3Rpb25baV0gPSAmZWltX3NwdXJpb3VzX2FjdGlvbjsKLQotCXNwaW5fbG9ja19pbml0KCZzbS0+bG9jayk7Ci0Jc20tPmlycWMuaXJxX2dyb3VwID0gc20tPnBkZXYtPnJlc291cmNlW1NNX0VJTV9JUlFfUkVTT1VSQ0VdLnN0YXJ0OwotCXNtLT5pcnFjLmNsYXNzID0gJmVpbV9pcnFfY2xhc3M7Ci0KLQlyZXQgPSBpbnRjX3JlZ2lzdGVyX2NvbnRyb2xsZXIoJnNtLT5pcnFjKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9hY3Rpb25zOwotCi0JcHJpbnRrKCJFSU06IEV4dGVybmFsIEludGVycnVwdCBNb2R1bGUgYXQgMHglcCwgSVJRIGdyb3VwICV1XG4iLAotCSAgICAgICBzbS0+cmVncywgc20tPmlycWMuaXJxX2dyb3VwKTsKLQlwcmludGsoIkVJTTogSGFuZGxpbmcgJXUgZXh0ZXJuYWwgSVJRcywgc3RhcnRpbmcgd2l0aCBJUlEldVxuIiwKLQkgICAgICAgc20tPmlycWMubnJfaXJxcywgc20tPmlycWMuZmlyc3RfaXJxKTsKLQotCXJldHVybiAwOwotCi1vdXRfZnJlZV9hY3Rpb25zOgotCWtmcmVlKHNtLT5hY3Rpb24pOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci1hcmNoX2luaXRjYWxsKGVpbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9LY29uZmlnIGIvYXJjaC9jcmlzL0tjb25maWcKaW5kZXggNmExMjM4YS4uMzQ3NDMwOSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL0tjb25maWcKQEAgLTE2LDYgKzE2LDE0IEBACiBjb25maWcgUldTRU1fWENIR0FERF9BTEdPUklUSE0KIAlib29sCiAKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKKwlib29sCisJZGVmYXVsdCBuCisKIGNvbmZpZyBHRU5FUklDX0ZJTkRfTkVYVF9CSVQKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9heGlzZmxhc2htYXAuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2F4aXNmbGFzaG1hcC5jCmluZGV4IDRmYTgxYWIuLmZmYWRlMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2F4aXNmbGFzaG1hcC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2F4aXNmbGFzaG1hcC5jCkBAIC01MTYsNyArNTE2LDcgQEAKICNlbHNlCiAJCXN0cnVjdCBtdGRfaW5mbyAqbXRkX3JhbTsKIAotCQltdGRfcmFtID0gKHN0cnVjdCBtdGRfaW5mbyAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbyksCisJCW10ZF9yYW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pLAogCQkJCQkJICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFtdGRfcmFtKSB7CiAJCQlwYW5pYygiYXhpc2ZsYXNobWFwIGNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZ3Bpby5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZ3Bpby5jCmluZGV4IGZjYmE2NjMuLjlhYmExOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2dwaW8uYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9ncGlvLmMKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCWlmIChwID4gR1BJT19NSU5PUl9MQVNUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXByaXYgPSAoc3RydWN0IGdwaW9fcHJpdmF0ZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBncGlvX3ByaXZhdGUpLCAKKwlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdwaW9fcHJpdmF0ZSksCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCiAJaWYgKCFwcml2KQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvYXhpc2ZsYXNobWFwLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9heGlzZmxhc2htYXAuYwppbmRleCA0MTk1MjMyLi41MTgwZDQ1IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9heGlzZmxhc2htYXAuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9heGlzZmxhc2htYXAuYwpAQCAtNDI3LDcgKzQyNyw3IEBACiAjZWxzZQogCQlzdHJ1Y3QgbXRkX2luZm8gKm10ZF9yYW07CiAKLQkJbXRkX3JhbSA9IChzdHJ1Y3QgbXRkX2luZm8gKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pLAorCQltdGRfcmFtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSwKIAkJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghbXRkX3JhbSkgewogCQkJcGFuaWMoImF4aXNmbGFzaG1hcCBjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2dwaW8uYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2dwaW8uYwppbmRleCBjM2Y4NzZiLi4wOGQzNmYwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9ncGlvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvZ3Bpby5jCkBAIC00MjMsNyArNDIzLDcgQEAKIAlpZiAocCA+IEdQSU9fTUlOT1JfTEFTVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwcml2ID0gKHN0cnVjdCBncGlvX3ByaXZhdGUgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3Bpb19wcml2YXRlKSwKKwlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdwaW9fcHJpdmF0ZSksCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCiAJaWYgKCFwcml2KQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvc3luY19zZXJpYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKaW5kZXggZTA2NzgwNi4uNDI0ZWIwZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvc3luY19zZXJpYWwuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9zeW5jX3NlcmlhbC5jCkBAIC01MDQsNyArNTA0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBzeW5jX3NlcmlhbF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCWludCBkZXYgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWludCBkZXYgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCXN5bmNfcG9ydCogcG9ydDsKIAlERUJVR1BPTEwoIHN0YXRpYyB1bnNpZ25lZCBpbnQgcHJldl9tYXNrID0gMDsgKTsKQEAgLTUzMSw3ICs1MzEsNyBAQAogCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCByZXR1cm5fdmFsID0gMDsKLQlpbnQgZGV2ID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlpbnQgZGV2ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN5bmNfcG9ydCogcG9ydDsKIAlyZWdfc3Nlcl9yd190cl9jZmcgdHJfY2ZnOwogCXJlZ19zc2VyX3J3X3JlY19jZmcgcmVjX2NmZzsKQEAgLTc4OSw3ICs3ODksNyBAQAogc3RhdGljIHNzaXplX3Qgc3luY19zZXJpYWxfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyICogYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50IGRldiA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJaW50IGRldiA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlzeW5jX3BvcnQgKnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBjLCBjMTsKQEAgLTkxOSw3ICs5MTksNyBAQAogc3RhdGljIHNzaXplX3Qgc3luY19zZXJpYWxfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgKiBidWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50IGRldiA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJaW50IGRldiA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpbnQgYXZhaWw7CiAJc3luY19wb3J0ICpwb3J0OwogCXVuc2lnbmVkIGNoYXIqIHN0YXJ0OwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggOTllNTliMy4uN2NkNmFjOCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NpZ25hbC5jCkBAIC02ODYsNyArNjg2LDcgQEAKIGludCBfX2luaXQKIGNyaXNfaW5pdF9zaWduYWwodm9pZCkKIHsKLQl1MTYqIGRhdGEgPSAodTE2KilrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJdTE2KiBkYXRhID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCiAJLyogVGhpcyBpcyBtb3Z1LncgX19OUl9zaWdyZXR1cm4sIHI5OyBicmVhayAxMzsgKi8KIAlkYXRhWzBdID0gMHg5YzVmOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKaW5kZXggMmQwMDIzZi4uNzdlNjU1ZiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCkBAIC0xOTUsNyArMTk1LDcgQEAKICAqLwogdW5zaWduZWQgbG9uZyBjYWNoZV9kZWNheV90aWNrcyA9IDE7CiAKLWludCBfX2RldmluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKK2ludCBfX2NwdWluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKIHsKIAlzbXBfYm9vdF9vbmVfY3B1KGNwdSk7CiAJcmV0dXJuIGNwdV9vbmxpbmUoY3B1KSA/IDAgOiAtRU5PU1lTOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9wcm9maWxlLmMgYi9hcmNoL2NyaXMva2VybmVsL3Byb2ZpbGUuYwppbmRleCA2OWM1MjE4Li5mNjBhYjc4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3Byb2ZpbGUuYworKysgYi9hcmNoL2NyaXMva2VybmVsL3Byb2ZpbGUuYwpAQCAtNTksNyArNTksNyBAQAogX19pbml0IGluaXRfY3Jpc19wcm9maWxlKHZvaWQpCiB7CiAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7Ci0gIHNhbXBsZV9idWZmZXIgPSAoY2hhciopa21hbGxvYyhTQU1QTEVfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworICBzYW1wbGVfYnVmZmVyID0ga21hbGxvYyhTQU1QTEVfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOwogICBzYW1wbGVfYnVmZmVyX3BvcyA9IHNhbXBsZV9idWZmZXI7CiAgIGVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInN5c3RlbV9wcm9maWxlIiwgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwpOwogICBpZiAoZW50cnkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L0tjb25maWcgYi9hcmNoL2Zydi9LY29uZmlnCmluZGV4IGNmMWM0NDYuLjc1NjFkN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L0tjb25maWcKKysrIGIvYXJjaC9mcnYvS2NvbmZpZwpAQCAtNDEsNiArNDEsMTQgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKKwlib29sCisJZGVmYXVsdCB5CisKIG1haW5tZW51ICJGdWppdHN1IEZSLVYgS2VybmVsIENvbmZpZ3VyYXRpb24iCiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3BtLmMgYi9hcmNoL2Zydi9rZXJuZWwvcG0uYwppbmRleCBjMWQ5ZmM4Li5lZTY3N2NlIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvcG0uYworKysgYi9hcmNoL2Zydi9rZXJuZWwvcG0uYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAKIHN0YXRpYyBpbnQgY21vZGVfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKLQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sIHZvaWQgKipjb250ZXh0KQorCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpZiAob2xkdmFsICYmIG9sZGxlbnApIHsKIAkJc2l6ZV90IG9sZGxlbjsKQEAgLTMyNiw3ICszMjYsNyBAQAogCiBzdGF0aWMgaW50IHAwX3N5c2N0bChjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJICAgICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkgICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sIHZvaWQgKipjb250ZXh0KQorCQkgICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJaWYgKG9sZHZhbCAmJiBvbGRsZW5wKSB7CiAJCXNpemVfdCBvbGRsZW47CkBAIC0zNzAsNyArMzcwLDcgQEAKIAogc3RhdGljIGludCBjbV9zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCSAgICAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKLQkJICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqY29udGV4dCkKKwkJICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCWlmIChvbGR2YWwgJiYgb2xkbGVucCkgewogCQlzaXplX3Qgb2xkbGVuOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vZWxmLWZkcGljLmMgYi9hcmNoL2Zydi9tbS9lbGYtZmRwaWMuYwppbmRleCBmNWE2NTMwLi45NDc3Y2NjIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tbS9lbGYtZmRwaWMuYworKysgYi9hcmNoL2Zydi9tbS9lbGYtZmRwaWMuYwpAQCAtMTEwLDE0ICsxMTAsMTQgQEAKIAogI2lmIDAKIAlwcmludGsoIlthcmVhXSBsPSVseCAoRU5PTUVNKSBmPSclcydcbiIsCi0JICAgICAgIGxlbiwgZmlscCA/IGZpbHAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSA6ICIiKTsKKwkgICAgICAgbGVuLCBmaWxwID8gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUgOiAiIik7CiAjZW5kaWYKIAlyZXR1cm4gLUVOT01FTTsKIAogIHN1Y2Nlc3M6CiAjaWYgMAogCXByaW50aygiW2FyZWFdIGw9JWx4IGFkPSVseCBmPSclcydcbiIsCi0JICAgICAgIGxlbiwgYWRkciwgZmlscCA/IGZpbHAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSA6ICIiKTsKKwkgICAgICAgbGVuLCBhZGRyLCBmaWxwID8gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUgOiAiIik7CiAjZW5kaWYKIAlyZXR1cm4gYWRkcjsKIH0gLyogZW5kIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnIGIvYXJjaC9oODMwMC9LY29uZmlnCmluZGV4IGNhYmYwYmYuLjM0YTg0YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvS2NvbmZpZworKysgYi9hcmNoL2g4MzAwL0tjb25maWcKQEAgLTI5LDYgKzI5LDE0IEBACiAJYm9vbAogCWRlZmF1bHQgbgogCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0CisJYm9vbAorCWRlZmF1bHQgbgorCiBjb25maWcgR0VORVJJQ19GSU5EX05FWFRfQklUCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvaW50cy5jIGIvYXJjaC9oODMwMC9rZXJuZWwvaW50cy5jCmluZGV4IDFiZmM3N2UuLjU4N2VmN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL2ludHMuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9pbnRzLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKHVzZV9rbWFsbG9jKQotCQlpcnFfaGFuZGxlID0gKGlycV9oYW5kbGVyX3QgKilrbWFsbG9jKHNpemVvZihpcnFfaGFuZGxlcl90KSwgR0ZQX0FUT01JQyk7CisJCWlycV9oYW5kbGUgPSBrbWFsbG9jKHNpemVvZihpcnFfaGFuZGxlcl90KSwgR0ZQX0FUT01JQyk7CiAJZWxzZSB7CiAJCS8qIHVzZSBib290bWVtIGFsbG9jYXRlciAqLwogCQlpcnFfaGFuZGxlID0gKGlycV9oYW5kbGVyX3QgKilhbGxvY19ib290bWVtKHNpemVvZihpcnFfaGFuZGxlcl90KSk7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzLmMKaW5kZXggMjcwNDQwZC4uNTY3ZjY4MSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaW50cy5jCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2ludHMuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJfQkJCiAKIAlpZiAodXNlX2ttYWxsb2MpCi0JCWlycV9oYW5kbGUgPSAoaXJxX2hhbmRsZXJfdCAqKWttYWxsb2Moc2l6ZW9mKGlycV9oYW5kbGVyX3QpLCBHRlBfQVRPTUlDKTsKKwkJaXJxX2hhbmRsZSA9IGttYWxsb2Moc2l6ZW9mKGlycV9oYW5kbGVyX3QpLCBHRlBfQVRPTUlDKTsKIAllbHNlIHsKIAkJLyogdXNlIGJvb3RtZW0gYWxsb2NhdGVyICovCiAJCWlycV9oYW5kbGUgPSAoaXJxX2hhbmRsZXJfdCAqKWFsbG9jX2Jvb3RtZW0oc2l6ZW9mKGlycV9oYW5kbGVyX3QpKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9LY29uZmlnIGIvYXJjaC9pMzg2L0tjb25maWcKaW5kZXggZWE3MDM1OS4uMGRmZWU4MSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L0tjb25maWcKKysrIGIvYXJjaC9pMzg2L0tjb25maWcKQEAgLTQ5LDYgKzQ5LDExIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19CVUcKKwlib29sCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBCVUcKKwogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTE4NSw2ICsxOTAsNyBAQAogY29uZmlnIFBBUkFWSVJUCiAJYm9vbCAiUGFyYXZpcnR1YWxpemF0aW9uIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uICEoWDg2X1ZJU1dTIHx8IFg4Nl9WT1lBR0VSKQogCWhlbHAKIAkgIFBhcmF2aXJ0dWFsaXphdGlvbiBpcyBhIHdheSBvZiBydW5uaW5nIG11bHRpcGxlIGluc3RhbmNlcyBvZgogCSAgTGludXggb24gdGhlIHNhbWUgbWFjaGluZSwgdW5kZXIgYSBoeXBlcnZpc29yLiAgVGhpcyBvcHRpb24KQEAgLTc3MSw2ICs3NzcsNDcgQEAKICAgICAgICAgICBQSFlTSUNBTF9TVEFSVC4KIAkgIEZvciBtb3JlIGRldGFpbHMgc2VlIERvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CiAKK2NvbmZpZyBQSFlTSUNBTF9TVEFSVAorCWhleCAiUGh5c2ljYWwgYWRkcmVzcyB3aGVyZSB0aGUga2VybmVsIGlzIGxvYWRlZCIgaWYgKEVNQkVEREVEIHx8IENSQVNIX0RVTVApCisJZGVmYXVsdCAiMHgxMDAwMDAiCisJaGVscAorCSAgVGhpcyBnaXZlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyB3aGVyZSB0aGUga2VybmVsIGlzIGxvYWRlZC4KKworCSAgSWYga2VybmVsIGlzIGEgbm90IHJlbG9jYXRhYmxlIChDT05GSUdfUkVMT0NBVEFCTEU9bikgdGhlbgorCSAgYnpJbWFnZSB3aWxsIGRlY29tcHJlc3MgaXRzZWxmIHRvIGFib3ZlIHBoeXNpY2FsIGFkZHJlc3MgYW5kCisJICBydW4gZnJvbSB0aGVyZS4gT3RoZXJ3aXNlLCBiekltYWdlIHdpbGwgcnVuIGZyb20gdGhlIGFkZHJlc3Mgd2hlcmUKKwkgIGl0IGhhcyBiZWVuIGxvYWRlZCBieSB0aGUgYm9vdCBsb2FkZXIgYW5kIHdpbGwgaWdub3JlIGFib3ZlIHBoeXNpY2FsCisJICBhZGRyZXNzLgorCisJICBJbiBub3JtYWwga2R1bXAgY2FzZXMgb25lIGRvZXMgbm90IGhhdmUgdG8gc2V0L2NoYW5nZSB0aGlzIG9wdGlvbgorCSAgYXMgbm93IGJ6SW1hZ2UgY2FuIGJlIGNvbXBpbGVkIGFzIGEgY29tcGxldGVseSByZWxvY2F0YWJsZSBpbWFnZQorCSAgKENPTkZJR19SRUxPQ0FUQUJMRT15KSBhbmQgYmUgdXNlZCB0byBsb2FkIGFuZCBydW4gZnJvbSBhIGRpZmZlcmVudAorCSAgYWRkcmVzcy4gVGhpcyBvcHRpb24gaXMgbWFpbmx5IHVzZWZ1bCBmb3IgdGhlIGZvbGtzIHdobyBkb24ndCB3YW50CisJICB0byB1c2UgYSBiekltYWdlIGZvciBjYXB0dXJpbmcgdGhlIGNyYXNoIGR1bXAgYW5kIHdhbnQgdG8gdXNlIGEKKwkgIHZtbGludXggaW5zdGVhZC4gdm1saW51eCBpcyBub3QgcmVsb2NhdGFibGUgaGVuY2UgYSBrZXJuZWwgbmVlZHMKKwkgIHRvIGJlIHNwZWNpZmljYWxseSBjb21waWxlZCB0byBydW4gZnJvbSBhIHNwZWNpZmljIG1lbW9yeSBhcmVhCisJICAobm9ybWFsbHkgYSByZXNlcnZlZCByZWdpb24pIGFuZCB0aGlzIG9wdGlvbiBjb21lcyBoYW5keS4KKworCSAgU28gaWYgeW91IGFyZSB1c2luZyBiekltYWdlIGZvciBjYXB0dXJpbmcgdGhlIGNyYXNoIGR1bXAsIGxlYXZlCisJICB0aGUgdmFsdWUgaGVyZSB1bmNoYW5nZWQgdG8gMHgxMDAwMDAgYW5kIHNldCBDT05GSUdfUkVMT0NBVEFCTEU9eS4KKwkgIE90aGVyd2lzZSBpZiB5b3UgcGxhbiB0byB1c2Ugdm1saW51eCBmb3IgY2FwdHVyaW5nIHRoZSBjcmFzaCBkdW1wCisJICBjaGFuZ2UgdGhpcyB2YWx1ZSB0byBzdGFydCBvZiB0aGUgcmVzZXJ2ZWQgcmVnaW9uIChUeXBpY2FsbHkgMTZNQgorCSAgMHgxMDAwMDAwKS4gSW4gb3RoZXIgd29yZHMsIGl0IGNhbiBiZSBzZXQgYmFzZWQgb24gdGhlICJYIiB2YWx1ZSBhcworCSAgc3BlY2lmaWVkIGluIHRoZSAiY3Jhc2hrZXJuZWw9WU1AWE0iIGNvbW1hbmQgbGluZSBib290IHBhcmFtZXRlcgorCSAgcGFzc2VkIHRvIHRoZSBwYW5pYy1lZCBrZXJuZWwuIFR5cGljYWxseSB0aGlzIHBhcmFtZXRlciBpcyBzZXQgYXMKKwkgIGNyYXNoa2VybmVsPTY0TUAxNk0uIFBsZWFzZSB0YWtlIGEgbG9vayBhdAorCSAgRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQgZm9yIG1vcmUgZGV0YWlscyBhYm91dCBjcmFzaCBkdW1wcy4KKworCSAgVXNhZ2Ugb2YgYnpJbWFnZSBmb3IgY2FwdHVyaW5nIHRoZSBjcmFzaCBkdW1wIGlzIHJlY29tbWVuZGVkIGFzCisJICBvbmUgZG9lcyBub3QgaGF2ZSB0byBidWlsZCB0d28ga2VybmVscy4gU2FtZSBrZXJuZWwgY2FuIGJlIHVzZWQKKwkgIGFzIHByb2R1Y3Rpb24ga2VybmVsIGFuZCBjYXB0dXJlIGtlcm5lbC4gQWJvdmUgb3B0aW9uIHNob3VsZCBoYXZlCisJICBnb25lIGF3YXkgYWZ0ZXIgcmVsb2NhdGFibGUgYnpJbWFnZSBzdXBwb3J0IGlzIGludHJvZHVjZWQuIEJ1dCBpdAorCSAgaXMgcHJlc2VudCBiZWNhdXNlIHRoZXJlIGFyZSB1c2VycyBvdXQgdGhlcmUgd2hvIGNvbnRpbnVlIHRvIHVzZQorCSAgdm1saW51eCBmb3IgZHVtcCBjYXB0dXJlLiBUaGlzIG9wdGlvbiBzaG91bGQgZ28gYXdheSBkb3duIHRoZQorCSAgbGluZS4KKworCSAgRG9uJ3QgY2hhbmdlIHRoaXMgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKwogY29uZmlnIFJFTE9DQVRBQkxFCiAJYm9vbCAiQnVpbGQgYSByZWxvY2F0YWJsZSBrZXJuZWwoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcuY3B1IGIvYXJjaC9pMzg2L0tjb25maWcuY3B1CmluZGV4IDgyMWZkMjYuLjJhZWNmYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL2kzODYvS2NvbmZpZy5jcHUKQEAgLTI0OCw2ICsyNDgsMTQgQEAKIAlkZXBlbmRzIG9uICFNMzg2CiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKKwlib29sCisJZGVmYXVsdCBuCisKIGNvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9ib290L2NvbXByZXNzZWQvLmdpdGlnbm9yZSBiL2FyY2gvaTM4Ni9ib290L2NvbXByZXNzZWQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTBlZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3JlbG9jcwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2kzODYvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCBmMzk1YTRiLi4zNTE3YTMyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2kzODYvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3QuaD4KIAotLnNlY3Rpb24gIi50ZXh0LmhlYWQiCisuc2VjdGlvbiAiLnRleHQuaGVhZCIsImF4IixAcHJvZ2JpdHMKIAkuZ2xvYmwgc3RhcnR1cF8zMgogCiBzdGFydHVwXzMyOgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC9yZWxvY3MuYyBiL2FyY2gvaTM4Ni9ib290L2NvbXByZXNzZWQvcmVsb2NzLmMKaW5kZXggNDY4ZGE4OS4uODgxOTUxYyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2Jvb3QvY29tcHJlc3NlZC9yZWxvY3MuYworKysgYi9hcmNoL2kzODYvYm9vdC9jb21wcmVzc2VkL3JlbG9jcy5jCkBAIC00Myw2ICs0Myw4IEBACiAJCQkvKiBNYXRjaCBmb3VuZCAqLwogCQkJcmV0dXJuIDE7CiAJfQorCWlmIChzdHJuY21wKHN5bV9uYW1lLCAiX19jcmNfIiwgNikgPT0gMCkKKwkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9kZWZjb25maWcgYi9hcmNoL2kzODYvZGVmY29uZmlnCmluZGV4IDY1ODkxZjEuLjVkODBlZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9kZWZjb25maWcKKysrIGIvYXJjaC9pMzg2L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1naXQ3Ci0jIFdlZCBEZWMgIDYgMjM6NTA6NDkgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjMworIyBGcmkgSmFuICA1IDExOjU0OjQ2IDIwMDcKICMKIENPTkZJR19YODZfMzI9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CkBAIC0xMiw2ICsxMiw3IEBACiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQogQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKIENPTkZJR19ETUk9eQpAQCAtMTQxLDYgKzE0Miw4IEBACiBDT05GSUdfWDg2X1hBREQ9eQogQ09ORklHX1g4Nl9MMV9DQUNIRV9TSElGVD03CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1g4Nl9XUF9XT1JLU19PSz15CiBDT05GSUdfWDg2X0lOVkxQRz15CkBAIC0yMDMsNiArMjA2LDcgQEAKIENPTkZJR19TRUNDT01QPXkKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKQEAgLTU2Myw2ICs1NjcsNyBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9ORVRMSU5LPXkKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CiAKQEAgLTU4Myw2ICs1ODgsNyBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBUcmFuc3BvcnRzCkBAIC02NDIsNiArNjQ4LDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCkBAIC0xMDgyLDEwICsxMDg5LDcgQEAKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKIENPTkZJR19TT1VORF9QUklNRT15Ci1DT05GSUdfT1NTX09CU09MRVRFX0RSSVZFUj15CiAjIENPTkZJR19TT1VORF9CVDg3OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0ZVU0lPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9FUzEzNzEgaXMgbm90IHNldAogQ09ORklHX1NPVU5EX0lDSD15CiAjIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKQEAgLTEwOTUsNiArMTA5OSwxMSBAQAogIyBDT05GSUdfU09VTkRfT1NTIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTExNTgsNyArMTE2Nyw2IEBACiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci1DT05GSUdfVVNCX0hJRElOUFVUPXkKICMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldApAQCAtMTI3OSw2ICsxMjg3LDExIEBACiAjCiAKICMKKyMgVmlydHVhbGl6YXRpb24KKyMKKyMgQ09ORklHX0tWTSBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xNDQ0LDYgKzE0NTcsMTEgQEAKIENPTkZJR19OTFNfVVRGOD15CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CiAjCiBDT05GSUdfUFJPRklMSU5HPXkKQEAgLTE0NTgsNiArMTQ3Niw4IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xOAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKQEAgLTE0NzYsMTQgKzE0OTYsMTAgQEAKICMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAotQ09ORklHX1VOV0lORF9JTkZPPXkKLUNPTkZJR19TVEFDS19VTldJTkQ9eQogIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKQEAgLTE1MDksMTIgKzE1MjUsMTQgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0lPTUFQX0NPUFk9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRPXkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IGM4Zjk2Y2YuLmNiY2IyYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiAvKgogICogUGFyc2UgSW50ZXJydXB0IFNvdXJjZSBPdmVycmlkZSBmb3IgdGhlIEFDUEkgU0NJCiAgKi8KLXN0YXRpYyB2b2lkIGFjcGlfc2NpX2lvYXBpY19zZXR1cCh1MzIgZ3NpLCB1MTYgcG9sYXJpdHksIHUxNiB0cmlnZ2VyKQorc3RhdGljIHZvaWQgX19pbml0IGFjcGlfc2NpX2lvYXBpY19zZXR1cCh1MzIgZ3NpLCB1MTYgcG9sYXJpdHksIHUxNiB0cmlnZ2VyKQogewogCWlmICh0cmlnZ2VyID09IDApCS8qIGNvbXBhdGlibGUgU0NJIHRyaWdnZXIgaXMgbGV2ZWwgKi8KIAkJdHJpZ2dlciA9IDM7CkBAIC0xMzI3LDMgKzEzMjcsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIGVhcmx5X3BhcmFtKCJhY3BpX3NjaSIsIHNldHVwX2FjcGlfc2NpKTsKKworaW50IF9fYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKHVuc2lnbmVkIGludCAqbG9jaykKK3sKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXcsIHZhbDsKKwlkbyB7CisJCW9sZCA9ICpsb2NrOworCQluZXcgPSAoKChvbGQgJiB+MHgzKSArIDIpICsgKChvbGQgPj4gMSkgJiAweDEpKTsKKwkJdmFsID0gY21weGNoZyhsb2NrLCBvbGQsIG5ldyk7CisJfSB3aGlsZSAodW5saWtlbHkgKHZhbCAhPSBvbGQpKTsKKwlyZXR1cm4gKG5ldyA8IDMpID8gLTEgOiAwOworfQorCitpbnQgX19hY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2sodW5zaWduZWQgaW50ICpsb2NrKQoreworCXVuc2lnbmVkIGludCBvbGQsIG5ldywgdmFsOworCWRvIHsKKwkJb2xkID0gKmxvY2s7CisJCW5ldyA9IG9sZCAmIH4weDM7CisJCXZhbCA9IGNtcHhjaGcobG9jaywgb2xkLCBuZXcpOworCX0gd2hpbGUgKHVubGlrZWx5ICh2YWwgIT0gb2xkKSk7CisJcmV0dXJuIG9sZCAmIDB4MTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwppbmRleCAxMmU5MzdjLi4yZDM5ZjU1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FjcGkvY3N0YXRlLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCkBAIC00NywxMyArNDcsMTMgQEAKIAogLyogVGhlIGNvZGUgYmVsb3cgaGFuZGxlcyBjc3RhdGUgZW50cnkgd2l0aCBtb25pdG9yLW13YWl0IHBhaXIgb24gSW50ZWwqLwogCi1zdHJ1Y3QgY3N0YXRlX2VudHJ5X3Mgeworc3RydWN0IGNzdGF0ZV9lbnRyeSB7CiAJc3RydWN0IHsKIAkJdW5zaWduZWQgaW50IGVheDsKIAkJdW5zaWduZWQgaW50IGVjeDsKIAl9IHN0YXRlc1tBQ1BJX1BST0NFU1NPUl9NQVhfUE9XRVJdOwogfTsKLXN0YXRpYyBzdHJ1Y3QgY3N0YXRlX2VudHJ5X3MgKmNwdV9jc3RhdGVfZW50cnk7CS8qIHBlciBDUFUgcHRyICovCitzdGF0aWMgc3RydWN0IGNzdGF0ZV9lbnRyeSAqY3B1X2NzdGF0ZV9lbnRyeTsJLyogcGVyIENQVSBwdHIgKi8KIAogc3RhdGljIHNob3J0IG13YWl0X3N1cHBvcnRlZFtBQ1BJX1BST0NFU1NPUl9NQVhfUE9XRVJdOwogCkBAIC03MSw3ICs3MSw3IEBACiBpbnQgYWNwaV9wcm9jZXNzb3JfZmZoX2NzdGF0ZV9wcm9iZSh1bnNpZ25lZCBpbnQgY3B1LAogCQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4LCBzdHJ1Y3QgYWNwaV9wb3dlcl9yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCBjc3RhdGVfZW50cnlfcyAqcGVyY3B1X2VudHJ5OworCXN0cnVjdCBjc3RhdGVfZW50cnkgKnBlcmNwdV9lbnRyeTsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YSArIGNwdTsKIAogCWNwdW1hc2tfdCBzYXZlZF9tYXNrOwpAQCAtMTM2LDcgKzEzNiw3IEBACiB2b2lkIGFjcGlfcHJvY2Vzc29yX2ZmaF9jc3RhdGVfZW50ZXIoc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBjc3RhdGVfZW50cnlfcyAqcGVyY3B1X2VudHJ5OworCXN0cnVjdCBjc3RhdGVfZW50cnkgKnBlcmNwdV9lbnRyeTsKIAogCXBlcmNwdV9lbnRyeSA9IHBlcl9jcHVfcHRyKGNwdV9jc3RhdGVfZW50cnksIGNwdSk7CiAJbXdhaXRfaWRsZV93aXRoX2hpbnRzKHBlcmNwdV9lbnRyeS0+c3RhdGVzW2N4LT5pbmRleF0uZWF4LApAQCAtMTUwLDcgKzE1MCw3IEBACiAJaWYgKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKIAkJcmV0dXJuIC0xOwogCi0JY3B1X2NzdGF0ZV9lbnRyeSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgY3N0YXRlX2VudHJ5X3MpOworCWNwdV9jc3RhdGVfZW50cnkgPSBhbGxvY19wZXJjcHUoc3RydWN0IGNzdGF0ZV9lbnRyeSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCmluZGV4IGE5Nzg0N2QuLjE5OTAxNjkyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FwbS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKQEAgLTc4NSw3ICs3ODUsMTEgQEAKIAlwb2xsaW5nID0gISEoY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJiBUU19QT0xMSU5HKTsKIAlpZiAocG9sbGluZykgewogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKLQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJLyoKKwkJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UKKwkJICogdGVzdCBORUVEX1JFU0NIRUQ6CisJCSAqLworCQlzbXBfbWIoKTsKIAl9CiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQlpZGxlZCA9IDE7CkBAIC0xNjA0LDcgKzE2MDgsNyBAQAogewogCXN0cnVjdCBhcG1fdXNlciAqCWFzOwogCi0JYXMgPSAoc3RydWN0IGFwbV91c2VyICopa21hbGxvYyhzaXplb2YoKmFzKSwgR0ZQX0tFUk5FTCk7CisJYXMgPSBrbWFsbG9jKHNpemVvZigqYXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYXMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImFwbTogY2Fubm90IGFsbG9jYXRlIHN0cnVjdCBvZiBzaXplICVkIGJ5dGVzXG4iLAogCQkgICAgICAgc2l6ZW9mKCphcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCAxYjM0YzU2Li44YThiYmRhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtNTQsNyArNTQsNyBAQAogCS5jX2luaXQJPSBkZWZhdWx0X2luaXQsCiAJLmNfdmVuZG9yID0gIlVua25vd24iLAogfTsKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiAqIHRoaXNfY3B1ID0gJmRlZmF1bHRfY3B1Oworc3RhdGljIHN0cnVjdCBjcHVfZGV2ICogdGhpc19jcHUgX19jcHVpbml0ZGF0YSA9ICZkZWZhdWx0X2NwdTsKIAogc3RhdGljIGludCBfX2luaXQgY2FjaGVzaXplX3NldHVwKGNoYXIgKnN0cikKIHsKQEAgLTcxMCwxMSArNzEwLDggQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogQ29tbW9uIENQVSBpbml0IGZvciBib3RoIGJvb3QgYW5kIHNlY29uZGFyeSBDUFVzICovCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgX2NwdV9pbml0KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKK3ZvaWQgX19jcHVpbml0IGNwdV9zZXRfZ2R0KGludCBjcHUpCiB7Ci0Jc3RydWN0IHRzc19zdHJ1Y3QgKiB0ID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7Ci0Jc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCA9ICZjdXJyLT50aHJlYWQ7CiAJc3RydWN0IFhndF9kZXNjX3N0cnVjdCAqY3B1X2dkdF9kZXNjciA9ICZwZXJfY3B1KGNwdV9nZHRfZGVzY3IsIGNwdSk7CiAKIAkvKiBSZWluaXQgdGhlc2UgYW55d2F5LCBldmVuIGlmIHRoZXkndmUgYWxyZWFkeSBiZWVuIGRvbmUgKG9uCkBAIC03MjIsNiArNzE5LDEzIEBACiAJICAgdGhlIHJlYWwgb25lcykuICovCiAJbG9hZF9nZHQoY3B1X2dkdF9kZXNjcik7CiAJc2V0X2tlcm5lbF9ncygpOworfQorCisvKiBDb21tb24gQ1BVIGluaXQgZm9yIGJvdGggYm9vdCBhbmQgc2Vjb25kYXJ5IENQVXMgKi8KK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBfY3B1X2luaXQoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKQoreworCXN0cnVjdCB0c3Nfc3RydWN0ICogdCA9ICZwZXJfY3B1KGluaXRfdHNzLCBjcHUpOworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQgPSAmY3Vyci0+dGhyZWFkOwogCiAJaWYgKGNwdV90ZXN0X2FuZF9zZXQoY3B1LCBjcHVfaW5pdGlhbGl6ZWQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNQVSMlZCBhbHJlYWR5IGluaXRpYWxpemVkIVxuIiwgY3B1KTsKQEAgLTgwNyw2ICs4MTEsNyBAQAogCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCX0KIAorCWNwdV9zZXRfZ2R0KGNwdSk7CiAJX2NwdV9pbml0KGNwdSwgY3Vycik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwppbmRleCBjY2MxZWRmLi41Mjk5YzViIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnCkBAIC0xNyw2ICsxNyw3IEBACiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyBhIENQVUZyZXEgZHJpdmVyIHdoaWNoIHV0aWxpemVzIHRoZSBBQ1BJCiAJICBQcm9jZXNzb3IgUGVyZm9ybWFuY2UgU3RhdGVzLgorCSAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyBJbnRlbCBFbmhhbmNlZCBTcGVlZHN0ZXAuCiAKIAkgIEZvciBkZXRhaWxzLCB0YWtlIGEgbG9vayBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL2NwdS1mcmVxLz4uCiAKQEAgLTEyMSwxMSArMTIyLDE0IEBACiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKIGNvbmZpZyBYODZfU1BFRURTVEVQX0NFTlRSSU5PX0FDUEkKLQlib29sICJVc2UgQUNQSSB0YWJsZXMgdG8gZGVjb2RlIHZhbGlkIGZyZXF1ZW5jeS92b2x0YWdlIHBhaXJzIgorCWJvb2wgIlVzZSBBQ1BJIHRhYmxlcyB0byBkZWNvZGUgdmFsaWQgZnJlcXVlbmN5L3ZvbHRhZ2UgKGRlcHJlY2F0ZWQpIgogCWRlcGVuZHMgb24gWDg2X1NQRUVEU1RFUF9DRU5UUklOTyAmJiBBQ1BJX1BST0NFU1NPUgogCWRlcGVuZHMgb24gIShYODZfU1BFRURTVEVQX0NFTlRSSU5PID0geSAmJiBBQ1BJX1BST0NFU1NPUiA9IG0pCiAJZGVmYXVsdCB5CiAJaGVscAorCSAgVGhpcyBpcyBkZXByZWNhdGVkIGFuZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm93IG1lcmdlZCBpbnRvCisJICBhY3BpX2NwdWZyZXEgKFg4Nl9BQ1BJX0NQVUZSRVEpLiBVc2UgdGhhdCBkcml2ZXIgaW5zdGVhZCBvZgorCSAgc3BlZWRzdGVwX2NlbnRyaW5vLgogCSAgVXNlIHByaW1hcmlseSB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhlIEJJT1MgQUNQSSB0YWJsZXMKIAkgIHRvIGRldGVybWluZSB2YWxpZCBDUFUgZnJlcXVlbmN5IGFuZCB2b2x0YWdlIHBhaXJpbmdzLiBJdCBpcwogCSAgcmVxdWlyZWQgZm9yIHRoZSBkcml2ZXIgdG8gd29yayBvbiBub24tQmFuaWFzIENQVXMuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQppbmRleCAyZTg5NGYxLi44ZGUzYWJlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKQEAgLTcsOSArNyw5IEBACiBvYmotJChDT05GSUdfWDg2X0xPTkdSVU4pCQkrPSBsb25ncnVuLm8gIAogb2JqLSQoQ09ORklHX1g4Nl9HWF9TVVNQTU9EKQkJKz0gZ3gtc3VzcG1vZC5vCiBvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9JQ0gpCQkrPSBzcGVlZHN0ZXAtaWNoLm8KLW9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0NFTlRSSU5PKQkrPSBzcGVlZHN0ZXAtY2VudHJpbm8ubwogb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCKQkJKz0gc3BlZWRzdGVwLWxpYi5vCiBvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9TTUkpCQkrPSBzcGVlZHN0ZXAtc21pLm8KIG9iai0kKENPTkZJR19YODZfQUNQSV9DUFVGUkVRKQkJKz0gYWNwaS1jcHVmcmVxLm8KK29iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0NFTlRSSU5PKQkrPSBzcGVlZHN0ZXAtY2VudHJpbm8ubwogb2JqLSQoQ09ORklHX1g4Nl9QNF9DTE9DS01PRCkJCSs9IHA0LWNsb2NrbW9kLm8KIG9iai0kKENPTkZJR19YODZfQ1BVRlJFUV9ORk9SQ0UyKQkrPSBjcHVmcmVxLW5mb3JjZTIubwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggNTdjODgwYi4uMTBiYWEzNSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC0xLDkgKzEsMTAgQEAKIC8qCi0gKiBhY3BpLWNwdWZyZXEuYyAtIEFDUEkgUHJvY2Vzc29yIFAtU3RhdGVzIERyaXZlciAoJFJldmlzaW9uOiAxLjMgJCkKKyAqIGFjcGktY3B1ZnJlcS5jIC0gQUNQSSBQcm9jZXNzb3IgUC1TdGF0ZXMgRHJpdmVyICgkUmV2aXNpb246IDEuNCAkKQogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgQW5keSBHcm92ZXIgPGFuZHJldy5ncm92ZXJAaW50ZWwuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBQYXVsIERpZWZlbmJhdWdoIDxwYXVsLnMuZGllZmVuYmF1Z2hAaW50ZWwuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDQgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwNiAgICAgICBEZW5pcyBTYWR5a292IDxkZW5pcy5tLnNhZHlrb3ZAaW50ZWwuY29tPgogICoKICAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAgKgpAQCAtMjcsMjAyICsyOCwzNzAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBjdXJyZW50ICovCiAjaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgogCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKICNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAiYWNwaS1jcHVmcmVxIiwgbXNnKQogCiBNT0RVTEVfQVVUSE9SKCJQYXVsIERpZWZlbmJhdWdoLCBEb21pbmlrIEJyb2Rvd3NraSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIFByb2Nlc3NvciBQLVN0YXRlcyBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCi1zdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvIHsKLQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UJKmFjcGlfZGF0YTsKLQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUJCSpmcmVxX3RhYmxlOwotCXVuc2lnbmVkIGludAkJCQlyZXN1bWU7CitlbnVtIHsKKwlVTkRFRklORURfQ0FQQUJMRSA9IDAsCisJU1lTVEVNX0lOVEVMX01TUl9DQVBBQkxFLAorCVNZU1RFTV9JT19DQVBBQkxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBjcHVmcmVxX2FjcGlfaW8JKmFjcGlfaW9fZGF0YVtOUl9DUFVTXTsKLXN0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UJKmFjcGlfcGVyZl9kYXRhW05SX0NQVVNdOworI2RlZmluZSBJTlRFTF9NU1JfUkFOR0UJCSgweGZmZmYpCisjZGVmaW5lIENQVUlEXzZfRUNYX0FQRVJGTVBFUkZfQ0FQQUJJTElUWQkoMHgxKQorCitzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEgeworCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9wZXJmb3JtYW5jZSAqYWNwaV9kYXRhOworCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZnJlcV90YWJsZTsKKwl1bnNpZ25lZCBpbnQgbWF4X2ZyZXE7CisJdW5zaWduZWQgaW50IHJlc3VtZTsKKwl1bnNpZ25lZCBpbnQgY3B1X2ZlYXR1cmU7Cit9OworCitzdGF0aWMgc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkcnZfZGF0YVtOUl9DUFVTXTsKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKmFjcGlfcGVyZl9kYXRhW05SX0NQVVNdOwogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIGFjcGlfY3B1ZnJlcV9kcml2ZXI7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYWNwaV9wc3RhdGVfc3RyaWN0OwogCi1zdGF0aWMgaW50Ci1hY3BpX3Byb2Nlc3Nvcl93cml0ZV9wb3J0KAotCXUxNglwb3J0LAotCXU4CWJpdF93aWR0aCwKLQl1MzIJdmFsdWUpCitzdGF0aWMgaW50IGNoZWNrX2VzdF9jcHUodW5zaWduZWQgaW50IGNwdWlkKQogewotCWlmIChiaXRfd2lkdGggPD0gOCkgewotCQlvdXRiKHZhbHVlLCBwb3J0KTsKLQl9IGVsc2UgaWYgKGJpdF93aWR0aCA8PSAxNikgewotCQlvdXR3KHZhbHVlLCBwb3J0KTsKLQl9IGVsc2UgaWYgKGJpdF93aWR0aCA8PSAzMikgewotCQlvdXRsKHZhbHVlLCBwb3J0KTsKLQl9IGVsc2UgewotCQlyZXR1cm4gLUVOT0RFVjsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmNwdSA9ICZjcHVfZGF0YVtjcHVpZF07CisKKwlpZiAoY3B1LT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwgfHwKKwkgICAgIWNwdV9oYXMoY3B1LCBYODZfRkVBVFVSRV9FU1QpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgZXh0cmFjdF9pbyh1MzIgdmFsdWUsIHN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CisJaW50IGk7CisKKwlwZXJmID0gZGF0YS0+YWNwaV9kYXRhOworCisJZm9yIChpPTA7IGk8cGVyZi0+c3RhdGVfY291bnQ7IGkrKykgeworCQlpZiAodmFsdWUgPT0gcGVyZi0+c3RhdGVzW2ldLnN0YXR1cykKKwkJCXJldHVybiBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWFjcGlfcHJvY2Vzc29yX3JlYWRfcG9ydCgKLQl1MTYJcG9ydCwKLQl1OAliaXRfd2lkdGgsCi0JdTMyCSpyZXQpCitzdGF0aWMgdW5zaWduZWQgZXh0cmFjdF9tc3IodTMyIG1zciwgc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhKQogewotCSpyZXQgPSAwOwotCWlmIChiaXRfd2lkdGggPD0gOCkgewotCQkqcmV0ID0gaW5iKHBvcnQpOwotCX0gZWxzZSBpZiAoYml0X3dpZHRoIDw9IDE2KSB7Ci0JCSpyZXQgPSBpbncocG9ydCk7Ci0JfSBlbHNlIGlmIChiaXRfd2lkdGggPD0gMzIpIHsKLQkJKnJldCA9IGlubChwb3J0KTsKLQl9IGVsc2UgewotCQlyZXR1cm4gLUVOT0RFVjsKKwlpbnQgaTsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CisKKwltc3IgJj0gSU5URUxfTVNSX1JBTkdFOworCXBlcmYgPSBkYXRhLT5hY3BpX2RhdGE7CisKKwlmb3IgKGk9MDsgZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgeworCQlpZiAobXNyID09IHBlcmYtPnN0YXRlc1tkYXRhLT5mcmVxX3RhYmxlW2ldLmluZGV4XS5zdGF0dXMpCisJCQlyZXR1cm4gZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3k7CisJfQorCXJldHVybiBkYXRhLT5mcmVxX3RhYmxlWzBdLmZyZXF1ZW5jeTsKK30KKworc3RhdGljIHVuc2lnbmVkIGV4dHJhY3RfZnJlcSh1MzIgdmFsLCBzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEgKmRhdGEpCit7CisJc3dpdGNoIChkYXRhLT5jcHVfZmVhdHVyZSkgeworCWNhc2UgU1lTVEVNX0lOVEVMX01TUl9DQVBBQkxFOgorCQlyZXR1cm4gZXh0cmFjdF9tc3IodmFsLCBkYXRhKTsKKwljYXNlIFNZU1RFTV9JT19DQVBBQkxFOgorCQlyZXR1cm4gZXh0cmFjdF9pbyh2YWwsIGRhdGEpOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RydWN0IG1zcl9hZGRyIHsKKwl1MzIgcmVnOworfTsKKworc3RydWN0IGlvX2FkZHIgeworCXUxNiBwb3J0OworCXU4IGJpdF93aWR0aDsKK307CisKK3R5cGVkZWYgdW5pb24geworCXN0cnVjdCBtc3JfYWRkciBtc3I7CisJc3RydWN0IGlvX2FkZHIgaW87Cit9IGRydl9hZGRyX3VuaW9uOworCitzdHJ1Y3QgZHJ2X2NtZCB7CisJdW5zaWduZWQgaW50IHR5cGU7CisJY3B1bWFza190IG1hc2s7CisJZHJ2X2FkZHJfdW5pb24gYWRkcjsKKwl1MzIgdmFsOworfTsKKworc3RhdGljIHZvaWQgZG9fZHJ2X3JlYWQoc3RydWN0IGRydl9jbWQgKmNtZCkKK3sKKwl1MzIgaDsKKworCXN3aXRjaCAoY21kLT50eXBlKSB7CisJY2FzZSBTWVNURU1fSU5URUxfTVNSX0NBUEFCTEU6CisJCXJkbXNyKGNtZC0+YWRkci5tc3IucmVnLCBjbWQtPnZhbCwgaCk7CisJCWJyZWFrOworCWNhc2UgU1lTVEVNX0lPX0NBUEFCTEU6CisJCWFjcGlfb3NfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpY21kLT5hZGRyLmlvLnBvcnQsCisJCQkJJmNtZC0+dmFsLAorCQkJCSh1MzIpY21kLT5hZGRyLmlvLmJpdF93aWR0aCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZG9fZHJ2X3dyaXRlKHN0cnVjdCBkcnZfY21kICpjbWQpCit7CisJdTMyIGggPSAwOworCisJc3dpdGNoIChjbWQtPnR5cGUpIHsKKwljYXNlIFNZU1RFTV9JTlRFTF9NU1JfQ0FQQUJMRToKKwkJd3Jtc3IoY21kLT5hZGRyLm1zci5yZWcsIGNtZC0+dmFsLCBoKTsKKwkJYnJlYWs7CisJY2FzZSBTWVNURU1fSU9fQ0FQQUJMRToKKwkJYWNwaV9vc193cml0ZV9wb3J0KChhY3BpX2lvX2FkZHJlc3MpY21kLT5hZGRyLmlvLnBvcnQsCisJCQkJY21kLT52YWwsCisJCQkJKHUzMiljbWQtPmFkZHIuaW8uYml0X3dpZHRoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcnZfcmVhZChzdHJ1Y3QgZHJ2X2NtZCAqY21kKQoreworCWNwdW1hc2tfdCBzYXZlZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCWNtZC0+dmFsID0gMDsKKworCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY21kLT5tYXNrKTsKKwlkb19kcnZfcmVhZChjbWQpOworCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgc2F2ZWRfbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGRydl93cml0ZShzdHJ1Y3QgZHJ2X2NtZCAqY21kKQoreworCWNwdW1hc2tfdCBzYXZlZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCXVuc2lnbmVkIGludCBpOworCisJZm9yX2VhY2hfY3B1X21hc2soaSwgY21kLT5tYXNrKSB7CisJCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoaSkpOworCQlkb19kcnZfd3JpdGUoY21kKTsKKwl9CisKKwlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHNhdmVkX21hc2spOworCXJldHVybjsKK30KKworc3RhdGljIHUzMiBnZXRfY3VyX3ZhbChjcHVtYXNrX3QgbWFzaykKK3sKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CisJc3RydWN0IGRydl9jbWQgY21kOworCisJaWYgKHVubGlrZWx5KGNwdXNfZW1wdHkobWFzaykpKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZHJ2X2RhdGFbZmlyc3RfY3B1KG1hc2spXS0+Y3B1X2ZlYXR1cmUpIHsKKwljYXNlIFNZU1RFTV9JTlRFTF9NU1JfQ0FQQUJMRToKKwkJY21kLnR5cGUgPSBTWVNURU1fSU5URUxfTVNSX0NBUEFCTEU7CisJCWNtZC5hZGRyLm1zci5yZWcgPSBNU1JfSUEzMl9QRVJGX1NUQVRVUzsKKwkJYnJlYWs7CisJY2FzZSBTWVNURU1fSU9fQ0FQQUJMRToKKwkJY21kLnR5cGUgPSBTWVNURU1fSU9fQ0FQQUJMRTsKKwkJcGVyZiA9IGRydl9kYXRhW2ZpcnN0X2NwdShtYXNrKV0tPmFjcGlfZGF0YTsKKwkJY21kLmFkZHIuaW8ucG9ydCA9IHBlcmYtPmNvbnRyb2xfcmVnaXN0ZXIuYWRkcmVzczsKKwkJY21kLmFkZHIuaW8uYml0X3dpZHRoID0gcGVyZi0+Y29udHJvbF9yZWdpc3Rlci5iaXRfd2lkdGg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCWNtZC5tYXNrID0gbWFzazsKKworCWRydl9yZWFkKCZjbWQpOworCisJZHByaW50aygiZ2V0X2N1cl92YWwgPSAldVxuIiwgY21kLnZhbCk7CisKKwlyZXR1cm4gY21kLnZhbDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbWVhc3VyZWQgYWN0aXZlIChDMCkgZnJlcXVlbmN5IG9uIHRoaXMgQ1BVIHNpbmNlIGxhc3QgY2FsbAorICogdG8gdGhpcyBmdW5jdGlvbi4KKyAqIElucHV0OiBjcHUgbnVtYmVyCisgKiBSZXR1cm46IEF2ZXJhZ2UgQ1BVIGZyZXF1ZW5jeSBpbiB0ZXJtcyBvZiBtYXggZnJlcXVlbmN5ICh6ZXJvIG9uIGVycm9yKQorICoKKyAqIFdlIHVzZSBJQTMyX01QRVJGIGFuZCBJQTMyX0FQRVJGIE1TUnMgdG8gZ2V0IHRoZSBtZWFzdXJlZCBwZXJmb3JtYW5jZQorICogb3ZlciBhIHBlcmlvZCBvZiB0aW1lLCB3aGlsZSBDUFUgaXMgaW4gQzAgc3RhdGUuCisgKiBJQTMyX01QRVJGIGNvdW50cyBhdCB0aGUgcmF0ZSBvZiBtYXggYWR2ZXJ0aXNlZCBmcmVxdWVuY3kKKyAqIElBMzJfQVBFUkYgY291bnRzIGF0IHRoZSByYXRlIG9mIGFjdHVhbCBDUFUgZnJlcXVlbmN5CisgKiBPbmx5IElBMzJfQVBFUkYvSUEzMl9NUEVSRiByYXRpbyBpcyBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZCBhbmQKKyAqIG5vIG1lYW5pbmcgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBhYnNvbHV0ZSB2YWx1ZXMgb2YgdGhlc2UgTVNScy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbWVhc3VyZWRfcGVyZih1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBsbzsKKwkJCXUzMiBoaTsKKwkJfSBzcGxpdDsKKwkJdTY0IHdob2xlOworCX0gYXBlcmZfY3VyLCBtcGVyZl9jdXI7CisKKwljcHVtYXNrX3Qgc2F2ZWRfbWFzazsKKwl1bnNpZ25lZCBpbnQgcGVyZl9wZXJjZW50OworCXVuc2lnbmVkIGludCByZXR2YWw7CisKKwlzYXZlZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoY3B1KSk7CisJaWYgKGdldF9jcHUoKSAhPSBjcHUpIHsKKwkJLyogV2Ugd2VyZSBub3QgYWJsZSB0byBydW4gb24gcmVxdWVzdGVkIHByb2Nlc3NvciAqLworCQlwdXRfY3B1KCk7CisJCXJldHVybiAwOworCX0KKworCXJkbXNyKE1TUl9JQTMyX0FQRVJGLCBhcGVyZl9jdXIuc3BsaXQubG8sIGFwZXJmX2N1ci5zcGxpdC5oaSk7CisJcmRtc3IoTVNSX0lBMzJfTVBFUkYsIG1wZXJmX2N1ci5zcGxpdC5sbywgbXBlcmZfY3VyLnNwbGl0LmhpKTsKKworCXdybXNyKE1TUl9JQTMyX0FQRVJGLCAwLDApOworCXdybXNyKE1TUl9JQTMyX01QRVJGLCAwLDApOworCisjaWZkZWYgX19pMzg2X18KKwkvKgorCSAqIFdlIGRvbnQgd2FudCB0byBkbyA2NCBiaXQgZGl2aWRlIHdpdGggMzIgYml0IGtlcm5lbAorCSAqIEdldCBhbiBhcHByb3hpbWF0ZSB2YWx1ZS4gUmV0dXJuIGZhaWx1cmUgaW4gY2FzZSB3ZSBjYW5ub3QgZ2V0CisJICogYW4gYXBwcm94aW1hdGUgdmFsdWUuCisJICovCisJaWYgKHVubGlrZWx5KGFwZXJmX2N1ci5zcGxpdC5oaSB8fCBtcGVyZl9jdXIuc3BsaXQuaGkpKSB7CisJCWludCBzaGlmdF9jb3VudDsKKwkJdTMyIGg7CisKKwkJaCA9IG1heF90KHUzMiwgYXBlcmZfY3VyLnNwbGl0LmhpLCBtcGVyZl9jdXIuc3BsaXQuaGkpOworCQlzaGlmdF9jb3VudCA9IGZscyhoKTsKKworCQlhcGVyZl9jdXIud2hvbGUgPj49IHNoaWZ0X2NvdW50OworCQltcGVyZl9jdXIud2hvbGUgPj49IHNoaWZ0X2NvdW50OworCX0KKworCWlmICgoKHVuc2lnbmVkIGxvbmcpKC0xKSAvIDEwMCkgPCBhcGVyZl9jdXIuc3BsaXQubG8pIHsKKwkJaW50IHNoaWZ0X2NvdW50ID0gNzsKKwkJYXBlcmZfY3VyLnNwbGl0LmxvID4+PSBzaGlmdF9jb3VudDsKKwkJbXBlcmZfY3VyLnNwbGl0LmxvID4+PSBzaGlmdF9jb3VudDsKKwl9CisKKwlpZiAoYXBlcmZfY3VyLnNwbGl0LmxvICYmIG1wZXJmX2N1ci5zcGxpdC5sbykKKwkJcGVyZl9wZXJjZW50ID0gKGFwZXJmX2N1ci5zcGxpdC5sbyAqIDEwMCkgLyBtcGVyZl9jdXIuc3BsaXQubG87CisJZWxzZQorCQlwZXJmX3BlcmNlbnQgPSAwOworCisjZWxzZQorCWlmICh1bmxpa2VseSgoKHVuc2lnbmVkIGxvbmcpKC0xKSAvIDEwMCkgPCBhcGVyZl9jdXIud2hvbGUpKSB7CisJCWludCBzaGlmdF9jb3VudCA9IDc7CisJCWFwZXJmX2N1ci53aG9sZSA+Pj0gc2hpZnRfY291bnQ7CisJCW1wZXJmX2N1ci53aG9sZSA+Pj0gc2hpZnRfY291bnQ7CisJfQorCisJaWYgKGFwZXJmX2N1ci53aG9sZSAmJiBtcGVyZl9jdXIud2hvbGUpCisJCXBlcmZfcGVyY2VudCA9IChhcGVyZl9jdXIud2hvbGUgKiAxMDApIC8gbXBlcmZfY3VyLndob2xlOworCWVsc2UKKwkJcGVyZl9wZXJjZW50ID0gMDsKKworI2VuZGlmCisKKwlyZXR2YWwgPSBkcnZfZGF0YVtjcHVdLT5tYXhfZnJlcSAqIHBlcmZfcGVyY2VudCAvIDEwMDsKKworCXB1dF9jcHUoKTsKKwlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHNhdmVkX21hc2spOworCisJZHByaW50aygiY3B1ICVkOiBwZXJmb3JtYW5jZSBwZXJjZW50ICVkXG4iLCBjcHUsIHBlcmZfcGVyY2VudCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfY3VyX2ZyZXFfb25fY3B1KHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhID0gZHJ2X2RhdGFbY3B1XTsKKwl1bnNpZ25lZCBpbnQgZnJlcTsKKworCWRwcmludGsoImdldF9jdXJfZnJlcV9vbl9jcHUgKCVkKVxuIiwgY3B1KTsKKworCWlmICh1bmxpa2VseShkYXRhID09IE5VTEwgfHwKKwkJICAgICBkYXRhLT5hY3BpX2RhdGEgPT0gTlVMTCB8fCBkYXRhLT5mcmVxX3RhYmxlID09IE5VTEwpKSB7CisJCXJldHVybiAwOworCX0KKworCWZyZXEgPSBleHRyYWN0X2ZyZXEoZ2V0X2N1cl92YWwoY3B1bWFza19vZl9jcHUoY3B1KSksIGRhdGEpOworCWRwcmludGsoImN1ciBmcmVxID0gJXVcbiIsIGZyZXEpOworCisJcmV0dXJuIGZyZXE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2hlY2tfZnJlcXMoY3B1bWFza190IG1hc2ssIHVuc2lnbmVkIGludCBmcmVxLAorCQkJCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgY3VyX2ZyZXE7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGk9MDsgaTwxMDA7IGkrKykgeworCQljdXJfZnJlcSA9IGV4dHJhY3RfZnJlcShnZXRfY3VyX3ZhbChtYXNrKSwgZGF0YSk7CisJCWlmIChjdXJfZnJlcSA9PSBmcmVxKQorCQkJcmV0dXJuIDE7CisJCXVkZWxheSgxMCk7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1hY3BpX3Byb2Nlc3Nvcl9zZXRfcGVyZm9ybWFuY2UgKAotCXN0cnVjdCBjcHVmcmVxX2FjcGlfaW8JKmRhdGEsCi0JdW5zaWduZWQgaW50CQljcHUsCi0JaW50CQkJc3RhdGUpCitzdGF0aWMgaW50IGFjcGlfY3B1ZnJlcV90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCQkgICAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLCB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7Ci0JdTE2CQkJcG9ydCA9IDA7Ci0JdTgJCQliaXRfd2lkdGggPSAwOwotCWludAkJCWkgPSAwOwotCWludAkJCXJldCA9IDA7Ci0JdTMyCQkJdmFsdWUgPSAwOwotCWludAkJCXJldHZhbDsKLQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UJKnBlcmY7Ci0KLQlkcHJpbnRrKCJhY3BpX3Byb2Nlc3Nvcl9zZXRfcGVyZm9ybWFuY2VcbiIpOwotCi0JcmV0dmFsID0gMDsKLQlwZXJmID0gZGF0YS0+YWNwaV9kYXRhOwkKLQlpZiAoc3RhdGUgPT0gcGVyZi0+c3RhdGUpIHsKLQkJaWYgKHVubGlrZWx5KGRhdGEtPnJlc3VtZSkpIHsKLQkJCWRwcmludGsoIkNhbGxlZCBhZnRlciByZXN1bWUsIHJlc2V0dGluZyB0byBQJWRcbiIsIHN0YXRlKTsKLQkJCWRhdGEtPnJlc3VtZSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKCJBbHJlYWR5IGF0IHRhcmdldCBzdGF0ZSAoUCVkKVxuIiwgc3RhdGUpOwotCQkJcmV0dXJuIChyZXR2YWwpOwotCQl9Ci0JfQotCi0JZHByaW50aygiVHJhbnNpdGlvbmluZyBmcm9tIFAlZCB0byBQJWRcbiIsIHBlcmYtPnN0YXRlLCBzdGF0ZSk7Ci0KLQkvKgotCSAqIEZpcnN0IHdlIHdyaXRlIHRoZSB0YXJnZXQgc3RhdGUncyAnY29udHJvbCcgdmFsdWUgdG8gdGhlCi0JICogY29udHJvbF9yZWdpc3Rlci4KLQkgKi8KLQotCXBvcnQgPSBwZXJmLT5jb250cm9sX3JlZ2lzdGVyLmFkZHJlc3M7Ci0JYml0X3dpZHRoID0gcGVyZi0+Y29udHJvbF9yZWdpc3Rlci5iaXRfd2lkdGg7Ci0JdmFsdWUgPSAodTMyKSBwZXJmLT5zdGF0ZXNbc3RhdGVdLmNvbnRyb2w7Ci0KLQlkcHJpbnRrKCJXcml0aW5nIDB4JTA4eCB0byBwb3J0IDB4JTA0eFxuIiwgdmFsdWUsIHBvcnQpOwotCi0JcmV0ID0gYWNwaV9wcm9jZXNzb3Jfd3JpdGVfcG9ydChwb3J0LCBiaXRfd2lkdGgsIHZhbHVlKTsKLQlpZiAocmV0KSB7Ci0JCWRwcmludGsoIkludmFsaWQgcG9ydCB3aWR0aCAweCUwNHhcbiIsIGJpdF93aWR0aCk7Ci0JCXJldHVybiAocmV0KTsKLQl9Ci0KLQkvKgotCSAqIEFzc3VtZSB0aGUgd3JpdGUgd2VudCB0aHJvdWdoIHdoZW4gYWNwaV9wc3RhdGVfc3RyaWN0IGlzIG5vdCB1c2VkLgotCSAqIEFzIHJlYWQgc3RhdHVzX3JlZ2lzdGVyIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24gYW5kIHRoZXJlIAotCSAqIGFyZSBubyBzcGVjaWZpYyBlcnJvciBjYXNlcyB3aGVyZSBhbiBJTyBwb3J0IHdyaXRlIHdpbGwgZmFpbC4KLQkgKi8KLQlpZiAoYWNwaV9wc3RhdGVfc3RyaWN0KSB7Ci0JCS8qIFRoZW4gd2UgcmVhZCB0aGUgJ3N0YXR1c19yZWdpc3RlcicgYW5kIGNvbXBhcmUgdGhlIHZhbHVlIAotCQkgKiB3aXRoIHRoZSB0YXJnZXQgc3RhdGUncyAnc3RhdHVzJyB0byBtYWtlIHN1cmUgdGhlIAotCQkgKiB0cmFuc2l0aW9uIHdhcyBzdWNjZXNzZnVsLgotCQkgKiBOb3RlIHRoYXQgd2UnbGwgcG9sbCBmb3IgdXAgdG8gMW1zICgxMDAgY3ljbGVzIG9mIDEwdXMpIAotCQkgKiBiZWZvcmUgZ2l2aW5nIHVwLgotCQkgKi8KLQotCQlwb3J0ID0gcGVyZi0+c3RhdHVzX3JlZ2lzdGVyLmFkZHJlc3M7Ci0JCWJpdF93aWR0aCA9IHBlcmYtPnN0YXR1c19yZWdpc3Rlci5iaXRfd2lkdGg7Ci0KLQkJZHByaW50aygiTG9va2luZyBmb3IgMHglMDh4IGZyb20gcG9ydCAweCUwNHhcbiIsCi0JCQkodTMyKSBwZXJmLT5zdGF0ZXNbc3RhdGVdLnN0YXR1cywgcG9ydCk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCQlyZXQgPSBhY3BpX3Byb2Nlc3Nvcl9yZWFkX3BvcnQocG9ydCwgYml0X3dpZHRoLCAmdmFsdWUpOwotCQkJaWYgKHJldCkgewkKLQkJCQlkcHJpbnRrKCJJbnZhbGlkIHBvcnQgd2lkdGggMHglMDR4XG4iLCBiaXRfd2lkdGgpOwotCQkJCXJldHVybiAocmV0KTsKLQkJCX0KLQkJCWlmICh2YWx1ZSA9PSAodTMyKSBwZXJmLT5zdGF0ZXNbc3RhdGVdLnN0YXR1cykKLQkJCQlicmVhazsKLQkJCXVkZWxheSgxMCk7Ci0JCX0KLQl9IGVsc2UgewotCQl2YWx1ZSA9ICh1MzIpIHBlcmYtPnN0YXRlc1tzdGF0ZV0uc3RhdHVzOwotCX0KLQotCWlmICh1bmxpa2VseSh2YWx1ZSAhPSAodTMyKSBwZXJmLT5zdGF0ZXNbc3RhdGVdLnN0YXR1cykpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWNwaS1jcHVmcmVxOiBUcmFuc2l0aW9uIGZhaWxlZFxuIik7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCXJldHVybiAocmV0dmFsKTsKLQl9Ci0KLQlkcHJpbnRrKCJUcmFuc2l0aW9uIHN1Y2Nlc3NmdWwgYWZ0ZXIgJWQgbWljcm9zZWNvbmRzXG4iLCBpICogMTApOwotCi0JcGVyZi0+c3RhdGUgPSBzdGF0ZTsKLQlyZXR1cm4gKHJldHZhbCk7Ci19Ci0KLQotc3RhdGljIGludAotYWNwaV9jcHVmcmVxX3RhcmdldCAoCi0Jc3RydWN0IGNwdWZyZXFfcG9saWN5ICAgKnBvbGljeSwKLQl1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCi0JdW5zaWduZWQgaW50IHJlbGF0aW9uKQotewotCXN0cnVjdCBjcHVmcmVxX2FjcGlfaW8gKmRhdGEgPSBhY3BpX2lvX2RhdGFbcG9saWN5LT5jcHVdOworCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSA9IGRydl9kYXRhW3BvbGljeS0+Y3B1XTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAJY3B1bWFza190IG9ubGluZV9wb2xpY3lfY3B1czsKLQljcHVtYXNrX3Qgc2F2ZWRfbWFzazsKLQljcHVtYXNrX3Qgc2V0X21hc2s7Ci0JY3B1bWFza190IGNvdmVyZWRfY3B1czsKLQl1bnNpZ25lZCBpbnQgY3VyX3N0YXRlID0gMDsKLQl1bnNpZ25lZCBpbnQgbmV4dF9zdGF0ZSA9IDA7Ci0JdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7Ci0JdW5zaWduZWQgaW50IGo7Ci0JdW5zaWduZWQgaW50IHRtcDsKKwlzdHJ1Y3QgZHJ2X2NtZCBjbWQ7CisJdW5zaWduZWQgaW50IG1zcjsKKwl1bnNpZ25lZCBpbnQgbmV4dF9zdGF0ZSA9IDA7IC8qIEluZGV4IGludG8gZnJlcV90YWJsZSAqLworCXVuc2lnbmVkIGludCBuZXh0X3BlcmZfc3RhdGUgPSAwOyAvKiBJbmRleCBpbnRvIHBlcmYgdGFibGUgKi8KKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmVzdWx0ID0gMDsKIAotCWRwcmludGsoImFjcGlfY3B1ZnJlcV9zZXRwb2xpY3lcbiIpOworCWRwcmludGsoImFjcGlfY3B1ZnJlcV90YXJnZXQgJWQgKCVkKVxuIiwgdGFyZ2V0X2ZyZXEsIHBvbGljeS0+Y3B1KTsKIAotCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksCi0JCQlkYXRhLT5mcmVxX3RhYmxlLAotCQkJdGFyZ2V0X2ZyZXEsCi0JCQlyZWxhdGlvbiwKLQkJCSZuZXh0X3N0YXRlKTsKLQlpZiAodW5saWtlbHkocmVzdWx0KSkKLQkJcmV0dXJuIChyZXN1bHQpOworCWlmICh1bmxpa2VseShkYXRhID09IE5VTEwgfHwKKwkgICAgIGRhdGEtPmFjcGlfZGF0YSA9PSBOVUxMIHx8IGRhdGEtPmZyZXFfdGFibGUgPT0gTlVMTCkpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJcGVyZiA9IGRhdGEtPmFjcGlfZGF0YTsKLQljdXJfc3RhdGUgPSBwZXJmLT5zdGF0ZTsKLQlmcmVxcy5vbGQgPSBkYXRhLT5mcmVxX3RhYmxlW2N1cl9zdGF0ZV0uZnJlcXVlbmN5OwotCWZyZXFzLm5ldyA9IGRhdGEtPmZyZXFfdGFibGVbbmV4dF9zdGF0ZV0uZnJlcXVlbmN5OworCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksCisJCQkJCQlkYXRhLT5mcmVxX3RhYmxlLAorCQkJCQkJdGFyZ2V0X2ZyZXEsCisJCQkJCQlyZWxhdGlvbiwgJm5leHRfc3RhdGUpOworCWlmICh1bmxpa2VseShyZXN1bHQpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCS8qIGNwdWZyZXEgaG9sZHMgdGhlIGhvdHBsdWcgbG9jaywgc28gd2UgYXJlIHNhZmUgZnJvbSBoZXJlIG9uICovCkBAIC0yMzEsMTA2ICs0MDAsODUgQEAKIAlvbmxpbmVfcG9saWN5X2NwdXMgPSBwb2xpY3ktPmNwdXM7CiAjZW5kaWYKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGosIG9ubGluZV9wb2xpY3lfY3B1cykgewotCQlmcmVxcy5jcHUgPSBqOworCW5leHRfcGVyZl9zdGF0ZSA9IGRhdGEtPmZyZXFfdGFibGVbbmV4dF9zdGF0ZV0uaW5kZXg7CisJaWYgKHBlcmYtPnN0YXRlID09IG5leHRfcGVyZl9zdGF0ZSkgeworCQlpZiAodW5saWtlbHkoZGF0YS0+cmVzdW1lKSkgeworCQkJZHByaW50aygiQ2FsbGVkIGFmdGVyIHJlc3VtZSwgcmVzZXR0aW5nIHRvIFAlZFxuIiwKKwkJCQluZXh0X3BlcmZfc3RhdGUpOworCQkJZGF0YS0+cmVzdW1lID0gMDsKKwkJfSBlbHNlIHsKKwkJCWRwcmludGsoIkFscmVhZHkgYXQgdGFyZ2V0IHN0YXRlIChQJWQpXG4iLAorCQkJCW5leHRfcGVyZl9zdGF0ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXN3aXRjaCAoZGF0YS0+Y3B1X2ZlYXR1cmUpIHsKKwljYXNlIFNZU1RFTV9JTlRFTF9NU1JfQ0FQQUJMRToKKwkJY21kLnR5cGUgPSBTWVNURU1fSU5URUxfTVNSX0NBUEFCTEU7CisJCWNtZC5hZGRyLm1zci5yZWcgPSBNU1JfSUEzMl9QRVJGX0NUTDsKKwkJbXNyID0KKwkJICAgICh1MzIpIHBlcmYtPnN0YXRlc1tuZXh0X3BlcmZfc3RhdGVdLgorCQkgICAgY29udHJvbCAmIElOVEVMX01TUl9SQU5HRTsKKwkJY21kLnZhbCA9IGdldF9jdXJfdmFsKG9ubGluZV9wb2xpY3lfY3B1cyk7CisJCWNtZC52YWwgPSAoY21kLnZhbCAmIH5JTlRFTF9NU1JfUkFOR0UpIHwgbXNyOworCQlicmVhazsKKwljYXNlIFNZU1RFTV9JT19DQVBBQkxFOgorCQljbWQudHlwZSA9IFNZU1RFTV9JT19DQVBBQkxFOworCQljbWQuYWRkci5pby5wb3J0ID0gcGVyZi0+Y29udHJvbF9yZWdpc3Rlci5hZGRyZXNzOworCQljbWQuYWRkci5pby5iaXRfd2lkdGggPSBwZXJmLT5jb250cm9sX3JlZ2lzdGVyLmJpdF93aWR0aDsKKwkJY21kLnZhbCA9ICh1MzIpIHBlcmYtPnN0YXRlc1tuZXh0X3BlcmZfc3RhdGVdLmNvbnRyb2w7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNwdXNfY2xlYXIoY21kLm1hc2spOworCisJaWYgKHBvbGljeS0+c2hhcmVkX3R5cGUgIT0gQ1BVRlJFUV9TSEFSRURfVFlQRV9BTlkpCisJCWNtZC5tYXNrID0gb25saW5lX3BvbGljeV9jcHVzOworCWVsc2UKKwkJY3B1X3NldChwb2xpY3ktPmNwdSwgY21kLm1hc2spOworCisJZnJlcXMub2xkID0gcGVyZi0+c3RhdGVzW3BlcmYtPnN0YXRlXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CisJZnJlcXMubmV3ID0gZGF0YS0+ZnJlcV90YWJsZVtuZXh0X3N0YXRlXS5mcmVxdWVuY3k7CisJZm9yX2VhY2hfY3B1X21hc2soaSwgY21kLm1hc2spIHsKKwkJZnJlcXMuY3B1ID0gaTsKIAkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAl9CiAKLQkvKgotCSAqIFdlIG5lZWQgdG8gY2FsbCBkcml2ZXItPnRhcmdldCgpIG9uIGFsbCBvciBhbnkgQ1BVIGluCi0JICogcG9saWN5LT5jcHVzLCBkZXBlbmRpbmcgb24gcG9saWN5LT5zaGFyZWRfdHlwZS4KLQkgKi8KLQlzYXZlZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCWNwdXNfY2xlYXIoY292ZXJlZF9jcHVzKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhqLCBvbmxpbmVfcG9saWN5X2NwdXMpIHsKLQkJLyoKLQkJICogU3VwcG9ydCBmb3IgU01QIHN5c3RlbXMuCi0JCSAqIE1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBvbiBDUFUgdGhhdCB3YW50cyB0byBjaGFuZ2UgZnJlcQotCQkgKi8KLQkJY3B1c19jbGVhcihzZXRfbWFzayk7Ci0JCWlmIChwb2xpY3ktPnNoYXJlZF90eXBlID09IENQVUZSRVFfU0hBUkVEX1RZUEVfQU5ZKQotCQkJY3B1c19vcihzZXRfbWFzaywgc2V0X21hc2ssIG9ubGluZV9wb2xpY3lfY3B1cyk7Ci0JCWVsc2UKLQkJCWNwdV9zZXQoaiwgc2V0X21hc2spOworCWRydl93cml0ZSgmY21kKTsKIAotCQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIHNldF9tYXNrKTsKLQkJaWYgKHVubGlrZWx5KCFjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBzZXRfbWFzaykpKSB7Ci0JCQlkcHJpbnRrKCJjb3VsZG4ndCBsaW1pdCB0byBDUFVzIGluIHRoaXMgZG9tYWluXG4iKTsKLQkJCXJlc3VsdCA9IC1FQUdBSU47Ci0JCQlicmVhazsKKwlpZiAoYWNwaV9wc3RhdGVfc3RyaWN0KSB7CisJCWlmICghY2hlY2tfZnJlcXMoY21kLm1hc2ssIGZyZXFzLm5ldywgZGF0YSkpIHsKKwkJCWRwcmludGsoImFjcGlfY3B1ZnJlcV90YXJnZXQgZmFpbGVkICglZClcbiIsCisJCQkJcG9saWN5LT5jcHUpOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KLQotCQlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9zZXRfcGVyZm9ybWFuY2UgKGRhdGEsIGosIG5leHRfc3RhdGUpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlyZXN1bHQgPSAtRUFHQUlOOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAocG9saWN5LT5zaGFyZWRfdHlwZSA9PSBDUFVGUkVRX1NIQVJFRF9UWVBFX0FOWSkKLQkJCWJyZWFrOwotIAotCQljcHVfc2V0KGosIGNvdmVyZWRfY3B1cyk7CiAJfQogCi0JZm9yX2VhY2hfY3B1X21hc2soaiwgb25saW5lX3BvbGljeV9jcHVzKSB7Ci0JCWZyZXFzLmNwdSA9IGo7CisJZm9yX2VhY2hfY3B1X21hc2soaSwgY21kLm1hc2spIHsKKwkJZnJlcXMuY3B1ID0gaTsKIAkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiAJfQorCXBlcmYtPnN0YXRlID0gbmV4dF9wZXJmX3N0YXRlOwogCi0JaWYgKHVubGlrZWx5KHJlc3VsdCkpIHsKLQkJLyoKLQkJICogV2UgaGF2ZSBmYWlsZWQgaGFsZndheSB0aHJvdWdoIHRoZSBmcmVxdWVuY3kgY2hhbmdlLgotCQkgKiBXZSBoYXZlIHNlbnQgY2FsbGJhY2tzIHRvIG9ubGluZV9wb2xpY3lfY3B1cyBhbmQKLQkJICogYWNwaV9wcm9jZXNzb3Jfc2V0X3BlcmZvcm1hbmNlKCkgaGFzIGJlZW4gY2FsbGVkIG9uIAotCQkgKiBjb3ZlcmRfY3B1cy4gQmVzdCBlZmZvcnQgdW5kby4uCi0JCSAqLwotCi0JCWlmICghY3B1c19lbXB0eShjb3ZlcmVkX2NwdXMpKSB7Ci0JCQlmb3JfZWFjaF9jcHVfbWFzayhqLCBjb3ZlcmVkX2NwdXMpIHsKLQkJCQlwb2xpY3ktPmNwdSA9IGo7Ci0JCQkJYWNwaV9wcm9jZXNzb3Jfc2V0X3BlcmZvcm1hbmNlIChkYXRhLCAKLQkJCQkJCWosIAotCQkJCQkJY3VyX3N0YXRlKTsKLQkJCX0KLQkJfQotCi0JCXRtcCA9IGZyZXFzLm5ldzsKLQkJZnJlcXMubmV3ID0gZnJlcXMub2xkOwotCQlmcmVxcy5vbGQgPSB0bXA7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrKGosIG9ubGluZV9wb2xpY3lfY3B1cykgewotCQkJZnJlcXMuY3B1ID0gajsKLQkJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7Ci0JCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKLQkJfQotCX0KLQotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgc2F2ZWRfbWFzayk7Ci0JcmV0dXJuIChyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKLQotc3RhdGljIGludAotYWNwaV9jcHVmcmVxX3ZlcmlmeSAoCi0Jc3RydWN0IGNwdWZyZXFfcG9saWN5ICAgKnBvbGljeSkKK3N0YXRpYyBpbnQgYWNwaV9jcHVmcmVxX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvICpkYXRhID0gYWNwaV9pb19kYXRhW3BvbGljeS0+Y3B1XTsKKwlzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEgKmRhdGEgPSBkcnZfZGF0YVtwb2xpY3ktPmNwdV07CiAKIAlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfdmVyaWZ5XG4iKTsKIAotCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksIAotCQkJZGF0YS0+ZnJlcV90YWJsZSk7Ci0KLQlyZXR1cm4gKHJlc3VsdCk7CisJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksIGRhdGEtPmZyZXFfdGFibGUpOwogfQogCi0KIHN0YXRpYyB1bnNpZ25lZCBsb25nCi1hY3BpX2NwdWZyZXFfZ3Vlc3NfZnJlcSAoCi0Jc3RydWN0IGNwdWZyZXFfYWNwaV9pbwkqZGF0YSwKLQl1bnNpZ25lZCBpbnQJCWNwdSkKK2FjcGlfY3B1ZnJlcV9ndWVzc19mcmVxKHN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IGNwdSkKIHsKLQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UJKnBlcmYgPSBkYXRhLT5hY3BpX2RhdGE7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlICpwZXJmID0gZGF0YS0+YWNwaV9kYXRhOwogCiAJaWYgKGNwdV9raHopIHsKIAkJLyogc2VhcmNoIHRoZSBjbG9zZXN0IG1hdGNoIHRvIGNwdV9raHogKi8KQEAgLTMzOCwxNiArNDg2LDE2IEBACiAJCXVuc2lnbmVkIGxvbmcgZnJlcTsKIAkJdW5zaWduZWQgbG9uZyBmcmVxbiA9IHBlcmYtPnN0YXRlc1swXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAKLQkJZm9yIChpID0gMDsgaSA8IChwZXJmLT5zdGF0ZV9jb3VudCAtIDEpOyBpKyspIHsKKwkJZm9yIChpPTA7IGk8KHBlcmYtPnN0YXRlX2NvdW50LTEpOyBpKyspIHsKIAkJCWZyZXEgPSBmcmVxbjsKIAkJCWZyZXFuID0gcGVyZi0+c3RhdGVzW2krMV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOwogCQkJaWYgKCgyICogY3B1X2toeikgPiAoZnJlcW4gKyBmcmVxKSkgewogCQkJCXBlcmYtPnN0YXRlID0gaTsKLQkJCQlyZXR1cm4gKGZyZXEpOworCQkJCXJldHVybiBmcmVxOwogCQkJfQogCQl9Ci0JCXBlcmYtPnN0YXRlID0gcGVyZi0+c3RhdGVfY291bnQgLSAxOwotCQlyZXR1cm4gKGZyZXFuKTsKKwkJcGVyZi0+c3RhdGUgPSBwZXJmLT5zdGF0ZV9jb3VudC0xOworCQlyZXR1cm4gZnJlcW47CiAJfSBlbHNlIHsKIAkJLyogYXNzdW1lIENQVSBpcyBhdCBQMC4uLiAqLwogCQlwZXJmLT5zdGF0ZSA9IDA7CkBAIC0zNTUsNyArNTAzLDYgQEAKIAl9CiB9CiAKLQogLyoKICAqIGFjcGlfY3B1ZnJlcV9lYXJseV9pbml0IC0gaW5pdGlhbGl6ZSBBQ1BJIFAtU3RhdGVzIGxpYnJhcnkKICAqCkBAIC0zNjQsMzAgKzUxMSwzNCBAQAogICogZG8gX1BEQyBhbmQgX1BTRCBhbmQgZmluZCBvdXQgdGhlIHByb2Nlc3NvciBkZXBlbmRlbmN5IGZvciB0aGUKICAqIGFjdHVhbCBpbml0IHRoYXQgd2lsbCBoYXBwZW4gbGF0ZXIuLi4KICAqLwotc3RhdGljIGludCBhY3BpX2NwdWZyZXFfZWFybHlfaW5pdF9hY3BpKHZvaWQpCitzdGF0aWMgaW50IGFjcGlfY3B1ZnJlcV9lYXJseV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlCSpkYXRhOwotCXVuc2lnbmVkIGludAkJCQlpLCBqOworCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9wZXJmb3JtYW5jZSAqZGF0YTsKKwljcHVtYXNrX3QgY292ZXJlZDsKKwl1bnNpZ25lZCBpbnQgaSwgajsKIAogCWRwcmludGsoImFjcGlfY3B1ZnJlcV9lYXJseV9pbml0XG4iKTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UpLCAKLQkJCUdGUF9LRVJORUwpOworCQlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFkYXRhKSB7Ci0JCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaikgeworCQkJZm9yX2VhY2hfY3B1X21hc2soaiwgY292ZXJlZCkgewogCQkJCWtmcmVlKGFjcGlfcGVyZl9kYXRhW2pdKTsKIAkJCQlhY3BpX3BlcmZfZGF0YVtqXSA9IE5VTEw7CiAJCQl9Ci0JCQlyZXR1cm4gKC1FTk9NRU0pOworCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJYWNwaV9wZXJmX2RhdGFbaV0gPSBkYXRhOworCQljcHVfc2V0KGksIGNvdmVyZWQpOwogCX0KIAogCS8qIERvIGluaXRpYWxpemF0aW9uIGluIEFDUEkgY29yZSAqLwotCXJldHVybiBhY3BpX3Byb2Nlc3Nvcl9wcmVyZWdpc3Rlcl9wZXJmb3JtYW5jZShhY3BpX3BlcmZfZGF0YSk7CisJYWNwaV9wcm9jZXNzb3JfcHJlcmVnaXN0ZXJfcGVyZm9ybWFuY2UoYWNwaV9wZXJmX2RhdGEpOworCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1NNUAogLyoKICAqIFNvbWUgQklPU2VzIGRvIFNXX0FOWSBjb29yZGluYXRpb24gaW50ZXJuYWxseSwgZWl0aGVyIHNldCBpdCB1cCBpbiBodwogICogb3IgZG8gaXQgaW4gQklPUyBmaXJtd2FyZSBhbmQgd29uJ3QgaW5mb3JtIGFib3V0IGl0IHRvIE9TLiBJZiBub3QKQEAgLTQxNCwzOSArNTY1LDQyIEBACiAJfSwKIAl7IH0KIH07CisjZW5kaWYKIAotc3RhdGljIGludAotYWNwaV9jcHVmcmVxX2NwdV9pbml0ICgKLQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgICAqcG9saWN5KQorc3RhdGljIGludCBhY3BpX2NwdWZyZXFfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0JdW5zaWduZWQgaW50CQlpOwotCXVuc2lnbmVkIGludAkJY3B1ID0gcG9saWN5LT5jcHU7Ci0Jc3RydWN0IGNwdWZyZXFfYWNwaV9pbwkqZGF0YTsKLQl1bnNpZ25lZCBpbnQJCXJlc3VsdCA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IHZhbGlkX3N0YXRlcyA9IDA7CisJdW5zaWduZWQgaW50IGNwdSA9IHBvbGljeS0+Y3B1OworCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGFbcG9saWN5LT5jcHVdOwotCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9wZXJmb3JtYW5jZQkqcGVyZjsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CiAKIAlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfY3B1X2luaXRcbiIpOwogCiAJaWYgKCFhY3BpX3BlcmZfZGF0YVtjcHVdKQotCQlyZXR1cm4gKC1FTk9ERVYpOworCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvKSwgR0ZQX0tFUk5FTCk7CisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKLQkJcmV0dXJuICgtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlkYXRhLT5hY3BpX2RhdGEgPSBhY3BpX3BlcmZfZGF0YVtjcHVdOwotCWFjcGlfaW9fZGF0YVtjcHVdID0gZGF0YTsKKwlkcnZfZGF0YVtjcHVdID0gZGF0YTsKKworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpCisJCWFjcGlfY3B1ZnJlcV9kcml2ZXIuZmxhZ3MgfD0gQ1BVRlJFUV9DT05TVF9MT09QUzsKIAogCXJlc3VsdCA9IGFjcGlfcHJvY2Vzc29yX3JlZ2lzdGVyX3BlcmZvcm1hbmNlKGRhdGEtPmFjcGlfZGF0YSwgY3B1KTsKLQogCWlmIChyZXN1bHQpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKIAlwZXJmID0gZGF0YS0+YWNwaV9kYXRhOwogCXBvbGljeS0+c2hhcmVkX3R5cGUgPSBwZXJmLT5zaGFyZWRfdHlwZTsKKwogCS8qCi0JICogV2lsbCBsZXQgcG9saWN5LT5jcHVzIGtub3cgYWJvdXQgZGVwZW5kZW5jeSBvbmx5IHdoZW4gc29mdHdhcmUgCisJICogV2lsbCBsZXQgcG9saWN5LT5jcHVzIGtub3cgYWJvdXQgZGVwZW5kZW5jeSBvbmx5IHdoZW4gc29mdHdhcmUKIAkgKiBjb29yZGluYXRpb24gaXMgcmVxdWlyZWQuCiAJICovCiAJaWYgKHBvbGljeS0+c2hhcmVkX3R5cGUgPT0gQ1BVRlJFUV9TSEFSRURfVFlQRV9BTEwgfHwKQEAgLTQ2MiwxMCArNjE2LDYgQEAKIAl9CiAjZW5kaWYKIAotCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpIHsKLQkJYWNwaV9jcHVmcmVxX2RyaXZlci5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOwotCX0KLQogCS8qIGNhcGFiaWxpdHkgY2hlY2sgKi8KIAlpZiAocGVyZi0+c3RhdGVfY291bnQgPD0gMSkgewogCQlkcHJpbnRrKCJObyBQLVN0YXRlc1xuIik7CkBAIC00NzMsMTcgKzYyMywzMyBAQAogCQlnb3RvIGVycl91bnJlZzsKIAl9CiAKLQlpZiAoKHBlcmYtPmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQgIT0gQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPKSB8fAotCSAgICAocGVyZi0+c3RhdHVzX3JlZ2lzdGVyLnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTykpIHsKLQkJZHByaW50aygiVW5zdXBwb3J0ZWQgYWRkcmVzcyBzcGFjZSBbJWQsICVkXVxuIiwKLQkJCSh1MzIpIChwZXJmLT5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkKSwKLQkJCSh1MzIpIChwZXJmLT5zdGF0dXNfcmVnaXN0ZXIuc3BhY2VfaWQpKTsKKwlpZiAocGVyZi0+Y29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCAhPSBwZXJmLT5zdGF0dXNfcmVnaXN0ZXIuc3BhY2VfaWQpIHsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlcnJfdW5yZWc7CiAJfQogCi0JLyogYWxsb2MgZnJlcV90YWJsZSAqLwotCWRhdGEtPmZyZXFfdGFibGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpICogKHBlcmYtPnN0YXRlX2NvdW50ICsgMSksIEdGUF9LRVJORUwpOworCXN3aXRjaCAocGVyZi0+Y29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCkgeworCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPOgorCQlkcHJpbnRrKCJTWVNURU0gSU8gYWRkciBzcGFjZVxuIik7CisJCWRhdGEtPmNwdV9mZWF0dXJlID0gU1lTVEVNX0lPX0NBUEFCTEU7CisJCWJyZWFrOworCWNhc2UgQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkU6CisJCWRwcmludGsoIkhBUkRXQVJFIGFkZHIgc3BhY2VcbiIpOworCQlpZiAoIWNoZWNrX2VzdF9jcHUoY3B1KSkgeworCQkJcmVzdWx0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyX3VucmVnOworCQl9CisJCWRhdGEtPmNwdV9mZWF0dXJlID0gU1lTVEVNX0lOVEVMX01TUl9DQVBBQkxFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCJVbmtub3duIGFkZHIgc3BhY2UgJWRcbiIsCisJCQkodTMyKSAocGVyZi0+Y29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCkpOworCQlyZXN1bHQgPSAtRU5PREVWOworCQlnb3RvIGVycl91bnJlZzsKKwl9CisKKwlkYXRhLT5mcmVxX3RhYmxlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSAqCisJCSAgICAocGVyZi0+c3RhdGVfY291bnQrMSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YS0+ZnJlcV90YWJsZSkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl91bnJlZzsKQEAgLTQ5MiwxMjkgKzY1OCwxNDEgQEAKIAkvKiBkZXRlY3QgdHJhbnNpdGlvbiBsYXRlbmN5ICovCiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDA7CiAJZm9yIChpPTA7IGk8cGVyZi0+c3RhdGVfY291bnQ7IGkrKykgewotCQlpZiAoKHBlcmYtPnN0YXRlc1tpXS50cmFuc2l0aW9uX2xhdGVuY3kgKiAxMDAwKSA+IHBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kpCi0JCQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gcGVyZi0+c3RhdGVzW2ldLnRyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMDA7CisJCWlmICgocGVyZi0+c3RhdGVzW2ldLnRyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMDApID4KKwkJICAgIHBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kpCisJCQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0KKwkJCSAgICBwZXJmLT5zdGF0ZXNbaV0udHJhbnNpdGlvbl9sYXRlbmN5ICogMTAwMDsKIAl9CiAJcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAotCS8qIFRoZSBjdXJyZW50IHNwZWVkIGlzIHVua25vd24gYW5kIG5vdCBkZXRlY3RhYmxlIGJ5IEFDUEkuLi4gICovCi0JcG9saWN5LT5jdXIgPSBhY3BpX2NwdWZyZXFfZ3Vlc3NfZnJlcShkYXRhLCBwb2xpY3ktPmNwdSk7Ci0KKwlkYXRhLT5tYXhfZnJlcSA9IHBlcmYtPnN0YXRlc1swXS5jb3JlX2ZyZXF1ZW5jeSAqIDEwMDA7CiAJLyogdGFibGUgaW5pdCAqLwotCWZvciAoaT0wOyBpPD1wZXJmLT5zdGF0ZV9jb3VudDsgaSsrKQotCXsKLQkJZGF0YS0+ZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7Ci0JCWlmIChpPHBlcmYtPnN0YXRlX2NvdW50KQotCQkJZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBwZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOwotCQllbHNlCi0JCQlkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOworCWZvciAoaT0wOyBpPHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKKwkJaWYgKGk+MCAmJiBwZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgPT0KKwkJICAgIHBlcmYtPnN0YXRlc1tpLTFdLmNvcmVfZnJlcXVlbmN5KQorCQkJY29udGludWU7CisKKwkJZGF0YS0+ZnJlcV90YWJsZVt2YWxpZF9zdGF0ZXNdLmluZGV4ID0gaTsKKwkJZGF0YS0+ZnJlcV90YWJsZVt2YWxpZF9zdGF0ZXNdLmZyZXF1ZW5jeSA9CisJCSAgICBwZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOworCQl2YWxpZF9zdGF0ZXMrKzsKIAl9CisJZGF0YS0+ZnJlcV90YWJsZVt2YWxpZF9zdGF0ZXNdLmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOworCXBlcmYtPnN0YXRlID0gMDsKIAogCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCBkYXRhLT5mcmVxX3RhYmxlKTsKLQlpZiAocmVzdWx0KSB7CisJaWYgKHJlc3VsdCkKIAkJZ290byBlcnJfZnJlcWZyZWU7CisKKwlzd2l0Y2ggKHBlcmYtPmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQpIHsKKwljYXNlIEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTzoKKwkJLyogQ3VycmVudCBzcGVlZCBpcyB1bmtub3duIGFuZCBub3QgZGV0ZWN0YWJsZSBieSBJTyBwb3J0ICovCisJCXBvbGljeS0+Y3VyID0gYWNwaV9jcHVmcmVxX2d1ZXNzX2ZyZXEoZGF0YSwgcG9saWN5LT5jcHUpOworCQlicmVhazsKKwljYXNlIEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFOgorCQlhY3BpX2NwdWZyZXFfZHJpdmVyLmdldCA9IGdldF9jdXJfZnJlcV9vbl9jcHU7CisJCXBvbGljeS0+Y3VyID0gZ2V0X2N1cl9mcmVxX29uX2NwdShjcHUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAkvKiBub3RpZnkgQklPUyB0aGF0IHdlIGV4aXN0ICovCiAJYWNwaV9wcm9jZXNzb3Jfbm90aWZ5X3NtbShUSElTX01PRFVMRSk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJhY3BpLWNwdWZyZXE6IENQVSV1IC0gQUNQSSBwZXJmb3JtYW5jZSBtYW5hZ2VtZW50IGFjdGl2YXRlZC5cbiIsCi0JICAgICAgIGNwdSk7CisJLyogQ2hlY2sgZm9yIEFQRVJGL01QRVJGIHN1cHBvcnQgaW4gaGFyZHdhcmUgKi8KKwlpZiAoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMICYmIGMtPmNwdWlkX2xldmVsID49IDYpIHsKKwkJdW5zaWduZWQgaW50IGVjeDsKKwkJZWN4ID0gY3B1aWRfZWN4KDYpOworCQlpZiAoZWN4ICYgQ1BVSURfNl9FQ1hfQVBFUkZNUEVSRl9DQVBBQklMSVRZKQorCQkJYWNwaV9jcHVmcmVxX2RyaXZlci5nZXRhdmcgPSBnZXRfbWVhc3VyZWRfcGVyZjsKKwl9CisKKwlkcHJpbnRrKCJDUFUldSAtIEFDUEkgcGVyZm9ybWFuY2UgbWFuYWdlbWVudCBhY3RpdmF0ZWQuXG4iLCBjcHUpOwogCWZvciAoaSA9IDA7IGkgPCBwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKQogCQlkcHJpbnRrKCIgICAgICVjUCVkOiAlZCBNSHosICVkIG1XLCAlZCB1U1xuIiwKLQkJCShpID09IHBlcmYtPnN0YXRlPycqJzonICcpLCBpLAorCQkJKGkgPT0gcGVyZi0+c3RhdGUgPyAnKicgOiAnICcpLCBpLAogCQkJKHUzMikgcGVyZi0+c3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5LAogCQkJKHUzMikgcGVyZi0+c3RhdGVzW2ldLnBvd2VyLAogCQkJKHUzMikgcGVyZi0+c3RhdGVzW2ldLnRyYW5zaXRpb25fbGF0ZW5jeSk7CiAKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihkYXRhLT5mcmVxX3RhYmxlLCBwb2xpY3ktPmNwdSk7Ci0JCisKIAkvKgogCSAqIHRoZSBmaXJzdCBjYWxsIHRvIC0+dGFyZ2V0KCkgc2hvdWxkIHJlc3VsdCBpbiB1cyBhY3R1YWxseQogCSAqIHdyaXRpbmcgc29tZXRoaW5nIHRvIHRoZSBhcHByb3ByaWF0ZSByZWdpc3RlcnMuCiAJICovCiAJZGF0YS0+cmVzdW1lID0gMTsKLQkKLQlyZXR1cm4gKHJlc3VsdCk7CiAKLSBlcnJfZnJlcWZyZWU6CisJcmV0dXJuIHJlc3VsdDsKKworZXJyX2ZyZXFmcmVlOgogCWtmcmVlKGRhdGEtPmZyZXFfdGFibGUpOwotIGVycl91bnJlZzoKK2Vycl91bnJlZzoKIAlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKHBlcmYsIGNwdSk7Ci0gZXJyX2ZyZWU6CitlcnJfZnJlZToKIAlrZnJlZShkYXRhKTsKLQlhY3BpX2lvX2RhdGFbY3B1XSA9IE5VTEw7CisJZHJ2X2RhdGFbY3B1XSA9IE5VTEw7CiAKLQlyZXR1cm4gKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAotCi1zdGF0aWMgaW50Ci1hY3BpX2NwdWZyZXFfY3B1X2V4aXQgKAotCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAgICpwb2xpY3kpCitzdGF0aWMgaW50IGFjcGlfY3B1ZnJlcV9jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQlzdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvICpkYXRhID0gYWNwaV9pb19kYXRhW3BvbGljeS0+Y3B1XTsKLQorCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSA9IGRydl9kYXRhW3BvbGljeS0+Y3B1XTsKIAogCWRwcmludGsoImFjcGlfY3B1ZnJlcV9jcHVfZXhpdFxuIik7CiAKIAlpZiAoZGF0YSkgewogCQljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cihwb2xpY3ktPmNwdSk7Ci0JCWFjcGlfaW9fZGF0YVtwb2xpY3ktPmNwdV0gPSBOVUxMOwotCQlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKGRhdGEtPmFjcGlfZGF0YSwgcG9saWN5LT5jcHUpOworCQlkcnZfZGF0YVtwb2xpY3ktPmNwdV0gPSBOVUxMOworCQlhY3BpX3Byb2Nlc3Nvcl91bnJlZ2lzdGVyX3BlcmZvcm1hbmNlKGRhdGEtPmFjcGlfZGF0YSwKKwkJCQkJCSAgICAgIHBvbGljeS0+Y3B1KTsKIAkJa2ZyZWUoZGF0YSk7CiAJfQogCi0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYWNwaV9jcHVmcmVxX3Jlc3VtZSAoCi0Jc3RydWN0IGNwdWZyZXFfcG9saWN5ICAgKnBvbGljeSkKK3N0YXRpYyBpbnQgYWNwaV9jcHVmcmVxX3Jlc3VtZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQlzdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvICpkYXRhID0gYWNwaV9pb19kYXRhW3BvbGljeS0+Y3B1XTsKLQorCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSA9IGRydl9kYXRhW3BvbGljeS0+Y3B1XTsKIAogCWRwcmludGsoImFjcGlfY3B1ZnJlcV9yZXN1bWVcbiIpOwogCiAJZGF0YS0+cmVzdW1lID0gMTsKIAotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIGFjcGlfY3B1ZnJlcV9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqYWNwaV9jcHVmcmVxX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgYWNwaV9jcHVmcmVxX2RyaXZlciA9IHsKLQkudmVyaWZ5CT0gYWNwaV9jcHVmcmVxX3ZlcmlmeSwKLQkudGFyZ2V0CT0gYWNwaV9jcHVmcmVxX3RhcmdldCwKLQkuaW5pdAk9IGFjcGlfY3B1ZnJlcV9jcHVfaW5pdCwKLQkuZXhpdAk9IGFjcGlfY3B1ZnJlcV9jcHVfZXhpdCwKLQkucmVzdW1lCT0gYWNwaV9jcHVmcmVxX3Jlc3VtZSwKLQkubmFtZQk9ICJhY3BpLWNwdWZyZXEiLAotCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCS5hdHRyCT0gYWNwaV9jcHVmcmVxX2F0dHIsCisJLnZlcmlmeSA9IGFjcGlfY3B1ZnJlcV92ZXJpZnksCisJLnRhcmdldCA9IGFjcGlfY3B1ZnJlcV90YXJnZXQsCisJLmluaXQgPSBhY3BpX2NwdWZyZXFfY3B1X2luaXQsCisJLmV4aXQgPSBhY3BpX2NwdWZyZXFfY3B1X2V4aXQsCisJLnJlc3VtZSA9IGFjcGlfY3B1ZnJlcV9yZXN1bWUsCisJLm5hbWUgPSAiYWNwaS1jcHVmcmVxIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuYXR0ciA9IGFjcGlfY3B1ZnJlcV9hdHRyLAogfTsKIAotCi1zdGF0aWMgaW50IF9faW5pdAotYWNwaV9jcHVmcmVxX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX2NwdWZyZXFfaW5pdCh2b2lkKQogewogCWRwcmludGsoImFjcGlfY3B1ZnJlcV9pbml0XG4iKTsKIAotCWFjcGlfY3B1ZnJlcV9lYXJseV9pbml0X2FjcGkoKTsKKwlhY3BpX2NwdWZyZXFfZWFybHlfaW5pdCgpOwogCiAJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2NwdWZyZXFfZHJpdmVyKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWFjcGlfY3B1ZnJlcV9leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGFjcGlfY3B1ZnJlcV9leGl0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50CWk7CisJdW5zaWduZWQgaW50IGk7CiAJZHByaW50aygiYWNwaV9jcHVmcmVxX2V4aXRcbiIpOwogCiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9jcHVmcmVxX2RyaXZlcik7CkBAIC02MjcsNyArODA1LDkgQEAKIH0KIAogbW9kdWxlX3BhcmFtKGFjcGlfcHN0YXRlX3N0cmljdCwgdWludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFjcGlfcHN0YXRlX3N0cmljdCwgInZhbHVlIDAgb3Igbm9uLXplcm8uIG5vbi16ZXJvIC0+IHN0cmljdCBBQ1BJIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGR1cmluZyBmcmVxdWVuY3kgY2hhbmdlcy4iKTsKK01PRFVMRV9QQVJNX0RFU0MoYWNwaV9wc3RhdGVfc3RyaWN0LAorCSJ2YWx1ZSAwIG9yIG5vbi16ZXJvLiBub24temVybyAtPiBzdHJpY3QgQUNQSSBjaGVja3MgYXJlICIKKwkicGVyZm9ybWVkIGR1cmluZyBmcmVxdWVuY3kgY2hhbmdlcy4iKTsKIAogbGF0ZV9pbml0Y2FsbChhY3BpX2NwdWZyZXFfaW5pdCk7CiBtb2R1bGVfZXhpdChhY3BpX2NwdWZyZXFfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCmluZGV4IDkyYWZhM2IuLjY2NjdlOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCkBAIC00NDcsNyArNDQ3LDYgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBneGZyZXFfcGFyYW1zICpwYXJhbXM7CiAJc3RydWN0IHBjaV9kZXYgKmd4X3BjaTsKLQl1MzIgY2xhc3NfcmV2OwogCiAJLyogVGVzdCBpZiB3ZSBoYXZlIHRoZSByaWdodCBoYXJkd2FyZSAqLwogCWlmICgoZ3hfcGNpID0gZ3hfZGV0ZWN0X2NoaXBzZXQoKSkgPT0gTlVMTCkKQEAgLTQ3Miw4ICs0NzEsNyBAQAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfUE1FUjIsICYocGFyYW1zLT5wY2lfcG1lcjIpKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX01PRE9OLCAmKHBhcmFtcy0+b25fZHVyYXRpb24pKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX01PRE9GRiwgJihwYXJhbXMtPm9mZl9kdXJhdGlvbikpOwotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQocGFyYW1zLT5jczU1eDAsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNsYXNzX3Jldik7Ci0JcGFyYW1zLT5wY2lfcmV2ID0gY2xhc3NfcmV2ICYmIDB4ZmY7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9SRVZJU0lPTl9JRCwgJnBhcmFtcy0+cGNpX3Jldik7CiAKIAlpZiAoKHJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZneF9zdXNwbW9kX2RyaXZlcikpKSB7CiAJCWtmcmVlKHBhcmFtcyk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKaW5kZXggNzIzM2FiZS4uZTk0MGUwMCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwpAQCAtNTIsNiArNTIsMTAgQEAKICNkZWZpbmUJQ1BVX0VaUkFfVAk0CiAjZGVmaW5lCUNQVV9ORUhFTUlBSAk1CiAKKy8qIEZsYWdzICovCisjZGVmaW5lIFVTRV9BQ1BJX0MzCQkoMSA8PCAxKQorI2RlZmluZSBVU0VfTk9SVEhCUklER0UJCSgxIDw8IDIpCisKIHN0YXRpYyBpbnQgY3B1X21vZGVsOwogc3RhdGljIHVuc2lnbmVkIGludCBudW1zY2FsZXM9MTY7CiBzdGF0aWMgdW5zaWduZWQgaW50IGZzYjsKQEAgLTY4LDcgKzcyLDcgQEAKIHN0YXRpYyBpbnQgY2FuX3NjYWxlX3ZvbHRhZ2U7CiBzdGF0aWMgc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IE5VTEw7CiBzdGF0aWMgc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IE5VTEw7Ci1zdGF0aWMgaW50IHBvcnQyMl9lbjsKK3N0YXRpYyB1OCBsb25naGF1bF9mbGFnczsKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIHN0YXRpYyBpbnQgc2NhbGVfdm9sdGFnZTsKQEAgLTgwLDcgKzg0LDYgQEAKIC8qIENsb2NrIHJhdGlvcyBtdWx0aXBsaWVkIGJ5IDEwICovCiBzdGF0aWMgaW50IGNsb2NrX3JhdGlvWzMyXTsKIHN0YXRpYyBpbnQgZWJsY3JfdGFibGVbMzJdOwotc3RhdGljIHVuc2lnbmVkIGludCBoaWdoZXN0X3NwZWVkLCBsb3dlc3Rfc3BlZWQ7IC8qIGtIeiAqLwogc3RhdGljIGludCBsb25naGF1bF92ZXJzaW9uOwogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqbG9uZ2hhdWxfdGFibGU7CiAKQEAgLTE3OCw3ICsxODEsNyBAQAogCXNhZmVfaGFsdCgpOwogCS8qIENoYW5nZSBmcmVxdWVuY3kgb24gbmV4dCBoYWx0IG9yIHNsZWVwICovCiAJd3Jtc3JsKE1TUl9WSUFfTE9OR0hBVUwsIGxvbmdoYXVsLnZhbCk7Ci0JaWYgKHBvcnQyMl9lbikgeworCWlmICghY3hfYWRkcmVzcykgewogCQlBQ1BJX0ZMVVNIX0NQVV9DQUNIRSgpOwogCQkvKiBJbnZva2UgQzEgKi8KIAkJaGFsdCgpOwpAQCAtMTg5LDcgKzE5Miw2IEBACiAJCS8qIER1bW15IG9wIC0gbXVzdCBkbyBzb21ldGhpbmcgdXNlbGVzcyBhZnRlciBQX0xWTDMgcmVhZCAqLwogCQl0ID0gaW5sKGFjcGlfZmFkdC54cG1fdG1yX2Jsay5hZGRyZXNzKTsKIAl9Ci0KIAkvKiBEaXNhYmxlIGJ1cyByYXRpbyBiaXQgKi8KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWxvbmdoYXVsLmJpdHMuUmV2aXNpb25LZXkgPSBsb25naGF1bC5iaXRzLlJldmlzaW9uSUQ7CkBAIC0yNDMsMTUgKzI0NSwxNCBAQAogCW91dGIoMHhGRiwweEExKTsJLyogT3ZlcmtpbGwgKi8KIAlvdXRiKDB4RkUsMHgyMSk7CS8qIFRNUjAgb25seSAqLwogCi0JaWYgKHByLT5mbGFncy5ibV9jb250cm9sKSB7CisJaWYgKGxvbmdoYXVsX2ZsYWdzICYgVVNFX05PUlRIQlJJREdFKSB7CisJCS8qIERpc2FibGUgQUdQIGFuZCBQQ0kgYXJiaXRlcnMgKi8KKwkJb3V0YigzLCAweDIyKTsKKwl9IGVsc2UgaWYgKChwciAhPSBOVUxMKSAmJiBwci0+ZmxhZ3MuYm1fY29udHJvbCkgewogIAkJLyogRGlzYWJsZSBidXMgbWFzdGVyIGFyYml0cmF0aW9uICovCiAJCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAxLAogCQkJCSAgQUNQSV9NVFhfRE9fTk9UX0xPQ0spOwotCX0gZWxzZSBpZiAocG9ydDIyX2VuKSB7Ci0JCS8qIERpc2FibGUgQUdQIGFuZCBQQ0kgYXJiaXRlcnMgKi8KLQkJb3V0YigzLCAweDIyKTsKIAl9Ci0KIAlzd2l0Y2ggKGxvbmdoYXVsX3ZlcnNpb24pIHsKIAogCS8qCkBAIC0yNzgsMjIgKzI3OSwyNSBAQAogCSAqIHRvIHdvcmsgaW4gcHJhY3RpY2UuCiAJICovCiAJY2FzZSBUWVBFX1BPV0VSU0FWRVI6Ci0JCS8qIERvbid0IGFsbG93IHdha2V1cCAqLwotCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1JMRCwgMCwKLQkJCQkgIEFDUElfTVRYX0RPX05PVF9MT0NLKTsKLQkJZG9fcG93ZXJzYXZlcihjeC0+YWRkcmVzcywgY2xvY2tfcmF0aW9faW5kZXgpOworCQlpZiAobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfQUNQSV9DMykgeworCQkJLyogRG9uJ3QgYWxsb3cgd2FrZXVwICovCisJCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1JMRCwgMCwKKwkJCQkJICBBQ1BJX01UWF9ET19OT1RfTE9DSyk7CisJCQlkb19wb3dlcnNhdmVyKGN4LT5hZGRyZXNzLCBjbG9ja19yYXRpb19pbmRleCk7CisJCX0gZWxzZSB7CisJCQlkb19wb3dlcnNhdmVyKDAsIGNsb2NrX3JhdGlvX2luZGV4KTsKKwkJfQogCQlicmVhazsKIAl9CiAKLQlpZiAocHItPmZsYWdzLmJtX2NvbnRyb2wpIHsKKwlpZiAobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfTk9SVEhCUklER0UpIHsKKwkJLyogRW5hYmxlIGFyYml0ZXJzICovCisJCW91dGIoMCwgMHgyMik7CisJfSBlbHNlIGlmICgocHIgIT0gTlVMTCkgJiYgcHItPmZsYWdzLmJtX2NvbnRyb2wpIHsKIAkJLyogRW5hYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gKi8KIAkJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUsIDAsCiAJCQkJICBBQ1BJX01UWF9ET19OT1RfTE9DSyk7Ci0JfSBlbHNlIGlmIChwb3J0MjJfZW4pIHsKLQkJLyogRW5hYmxlIGFyYml0ZXJzICovCi0JCW91dGIoMCwgMHgyMik7CiAJfQotCiAJb3V0YihwaWMyX21hc2ssMHhBMSk7CS8qIHJlc3RvcmUgbWFzayAqLwogCW91dGIocGljMV9tYXNrLDB4MjEpOwogCkBAIC0zMTQsMTIgKzMxOCwxMiBAQAogCiAjZGVmaW5lIFJPVU5ESU5HCTB4ZgogCi1zdGF0aWMgaW50IF9ndWVzcyhpbnQgZ3Vlc3MpCitzdGF0aWMgaW50IF9ndWVzcyhpbnQgZ3Vlc3MsIGludCBtdWx0KQogewogCWludCB0YXJnZXQ7CiAKLQl0YXJnZXQgPSAoKG1heG11bHQvMTApKmd1ZXNzKTsKLQlpZiAobWF4bXVsdCUxMCAhPSAwKQorCXRhcmdldCA9ICgobXVsdC8xMCkqZ3Vlc3MpOworCWlmIChtdWx0JTEwICE9IDApCiAJCXRhcmdldCArPSAoZ3Vlc3MvMik7CiAJdGFyZ2V0ICs9IFJPVU5ESU5HLzI7CiAJdGFyZ2V0ICY9IH5ST1VORElORzsKQEAgLTMyNywxNyArMzMxLDE3IEBACiB9CiAKIAotc3RhdGljIGludCBndWVzc19mc2Iodm9pZCkKK3N0YXRpYyBpbnQgZ3Vlc3NfZnNiKGludCBtdWx0KQogewogCWludCBzcGVlZCA9IChjcHVfa2h6LzEwMDApOwogCWludCBpOwotCWludCBzcGVlZHNbM10gPSB7IDY2LCAxMDAsIDEzMyB9OworCWludCBzcGVlZHNbXSA9IHsgNjYsIDEwMCwgMTMzLCAyMDAgfTsKIAogCXNwZWVkICs9IFJPVU5ESU5HLzI7CiAJc3BlZWQgJj0gflJPVU5ESU5HOwogCi0JZm9yIChpPTA7IGk8MzsgaSsrKSB7Ci0JCWlmIChfZ3Vlc3Moc3BlZWRzW2ldKSA9PSBzcGVlZCkKKwlmb3IgKGk9MDsgaTw0OyBpKyspIHsKKwkJaWYgKF9ndWVzcyhzcGVlZHNbaV0sIG11bHQpID09IHNwZWVkKQogCQkJcmV0dXJuIHNwZWVkc1tpXTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zNTQsOSArMzU4LDcgQEAKIAkJCTEzMCwgMTUwLCAxNjAsIDE0MCwgIC0xLCAxNTUsICAtMSwgMTQ1IH07CiAJdW5zaWduZWQgaW50IGosIGsgPSAwOwogCXVuaW9uIG1zcl9sb25naGF1bCBsb25naGF1bDsKLQl1bnNpZ25lZCBsb25nIGxvLCBoaTsKLQl1bnNpZ25lZCBpbnQgZWJsY3JfZnNiX3RhYmxlX3YxW10gPSB7IDY2LCAxMzMsIDEwMCwgLTEgfTsKLQl1bnNpZ25lZCBpbnQgZWJsY3JfZnNiX3RhYmxlX3YyW10gPSB7IDEzMywgMTAwLCAtMSwgNjYgfTsKKwlpbnQgbXVsdCA9IDA7CiAKIAlzd2l0Y2ggKGxvbmdoYXVsX3ZlcnNpb24pIHsKIAljYXNlIFRZUEVfTE9OR0hBVUxfVjE6CkBAIC0zNjQsMzAgKzM2NiwxOCBAQAogCQkvKiBVZ2gsIExvbmdoYXVsIHYxIGRpZG4ndCBoYXZlIHRoZSBtaW4vbWF4IE1TUnMuCiAJCSAgIEFzc3VtZSBtaW49My4weCAmIG1heCA9IHdoYXRldmVyIHdlIGJvb3RlZCBhdC4gKi8KIAkJbWlubXVsdCA9IDMwOwotCQltYXhtdWx0ID0gbG9uZ2hhdWxfZ2V0X2NwdV9tdWx0KCk7Ci0JCXJkbXNyIChNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbG8sIGhpKTsKLQkJaW52YWx1ZSA9IChsbyAmICgxPDwxOHwxPDwxOSkpID4+MTg7Ci0JCWlmIChjcHVfbW9kZWw9PUNQVV9TQU1VRUwgfHwgY3B1X21vZGVsPT1DUFVfU0FNVUVMMikKLQkJCWZzYiA9IGVibGNyX2ZzYl90YWJsZV92MVtpbnZhbHVlXTsKLQkJZWxzZQotCQkJZnNiID0gZ3Vlc3NfZnNiKCk7CisJCW1heG11bHQgPSBtdWx0ID0gbG9uZ2hhdWxfZ2V0X2NwdV9tdWx0KCk7CiAJCWJyZWFrOwogCiAJY2FzZSBUWVBFX1BPV0VSU0FWRVI6CiAJCS8qIEV6cmEtVCAqLwogCQlpZiAoY3B1X21vZGVsPT1DUFVfRVpSQV9UKSB7CisJCQltaW5tdWx0ID0gMzA7CiAJCQlyZG1zcmwgKE1TUl9WSUFfTE9OR0hBVUwsIGxvbmdoYXVsLnZhbCk7CiAJCQlpbnZhbHVlID0gbG9uZ2hhdWwuYml0cy5NYXhNSHpCUjsKIAkJCWlmIChsb25naGF1bC5iaXRzLk1heE1IekJSNCkKIAkJCQlpbnZhbHVlICs9IDE2OwotCQkJbWF4bXVsdD1lenJhX3RfbXVsdGlwbGllcnNbaW52YWx1ZV07Ci0KLQkJCWludmFsdWUgPSBsb25naGF1bC5iaXRzLk1pbk1IekJSOwotCQkJaWYgKGxvbmdoYXVsLmJpdHMuTWluTUh6QlI0ID09IDEpCi0JCQkJbWlubXVsdCA9IDMwOwotCQkJZWxzZQotCQkJCW1pbm11bHQgPSBlenJhX3RfbXVsdGlwbGllcnNbaW52YWx1ZV07Ci0JCQlmc2IgPSBlYmxjcl9mc2JfdGFibGVfdjJbbG9uZ2hhdWwuYml0cy5NYXhNSHpGU0JdOworCQkJbWF4bXVsdCA9IG11bHQgPSBlenJhX3RfbXVsdGlwbGllcnNbaW52YWx1ZV07CiAJCQlicmVhazsKIAkJfQogCkBAIC00MDcsMjEgKzM5NywxNiBAQAogCQkJICogICBCdXQgaXQgd29ya3MsIHNvIHdlIGRvbid0IGdydW1ibGUuCiAJCQkgKi8KIAkJCW1pbm11bHQ9NDA7Ci0JCQltYXhtdWx0PWxvbmdoYXVsX2dldF9jcHVfbXVsdCgpOwotCi0JCQkvKiBTdGFydGluZyB3aXRoIHRoZSAxLjJHSHogcGFydHMsIHRoZXJlcyBhIDIwME1IeiBidXMuICovCi0JCQlpZiAoKGNwdV9raHovMTAwMCkgPiAxMjAwKQotCQkJCWZzYiA9IDIwMDsKLQkJCWVsc2UKLQkJCQlmc2IgPSBlYmxjcl9mc2JfdGFibGVfdjJbbG9uZ2hhdWwuYml0cy5NYXhNSHpGU0JdOworCQkJbWF4bXVsdCA9IG11bHQgPSBsb25naGF1bF9nZXRfY3B1X211bHQoKTsKIAkJCWJyZWFrOwogCQl9CiAJfQorCWZzYiA9IGd1ZXNzX2ZzYihtdWx0KTsKIAogCWRwcmludGsgKCJNaW5NdWx0OiVkLiVkeCBNYXhNdWx0OiVkLiVkeFxuIiwKIAkJIG1pbm11bHQvMTAsIG1pbm11bHQlMTAsIG1heG11bHQvMTAsIG1heG11bHQlMTApOwogCi0JaWYgKGZzYiA9PSAtMSkgeworCWlmIChmc2IgPT0gMCkgewogCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIkludmFsaWQgKHJlc2VydmVkKSBGU0IhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTgzLDYgKzU2OCwxMCBAQAogCWlmIChkZXYgPT0gTlVMTCkgewogCQlyZWcgPSAweDc2OwogCQlkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzg2MlhfMCwgTlVMTCk7CisJCS8qIEZpbmQgQ040MDAgVi1MaW5rIGhvc3QgYnJpZGdlICovCisJCWlmIChkZXYgPT0gTlVMTCkKKwkJCWRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwgMHg3MjU5LCBOVUxMKTsKKwogCX0KIAlpZiAoZGV2ICE9IE5VTEwpIHsKIAkJLyogRW5hYmxlIGFjY2VzcyB0byBwb3J0IDB4MjIgKi8KQEAgLTY4NywyNyArNjc2LDMyIEBACiAJLyogRmluZCBBQ1BJIGRhdGEgZm9yIHByb2Nlc3NvciAqLwogCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX1BST0NFU1NPUiwgQUNQSV9ST09UX09CSkVDVCwgQUNQSV9VSU5UMzJfTUFYLAogCQkJICAgICZsb25naGF1bF93YWxrX2NhbGxiYWNrLCBOVUxMLCAodm9pZCAqKSZwcik7Ci0JaWYgKHByID09IE5VTEwpCi0JCWdvdG8gZXJyX2FjcGk7CiAKLQlpZiAobG9uZ2hhdWxfdmVyc2lvbiA9PSBUWVBFX1BPV0VSU0FWRVIpIHsKLQkJLyogQ2hlY2sgQUNQSSBzdXBwb3J0IGZvciBDMyBzdGF0ZSAqLworCS8qIENoZWNrIEFDUEkgc3VwcG9ydCBmb3IgQzMgc3RhdGUgKi8KKwlpZiAoKHByICE9IE5VTEwpICYmIChsb25naGF1bF92ZXJzaW9uID09IFRZUEVfUE9XRVJTQVZFUikpIHsKIAkJY3ggPSAmcHItPnBvd2VyLnN0YXRlc1tBQ1BJX1NUQVRFX0MzXTsKIAkJaWYgKGN4LT5hZGRyZXNzID4gMCAmJgogCQkgICAoY3gtPmxhdGVuY3kgPD0gMTAwMCB8fCBpZ25vcmVfbGF0ZW5jeSAhPSAwKSApIHsKKwkJCWxvbmdoYXVsX2ZsYWdzIHw9IFVTRV9BQ1BJX0MzOwogCQkJZ290byBwcmludF9zdXBwb3J0X3R5cGU7CiAJCX0KIAl9Ci0JLyogQ2hlY2sgQUNQSSBzdXBwb3J0IGZvciBidXMgbWFzdGVyIGFyYml0ZXIgZGlzYWJsZSAqLwotCWlmICghcHItPmZsYWdzLmJtX2NvbnRyb2wpIHsKLQkJaWYgKGVuYWJsZV9hcmJpdGVyX2Rpc2FibGUoKSkgewotCQkJcG9ydDIyX2VuID0gMTsKLQkJfSBlbHNlIHsKLQkJCWdvdG8gZXJyX2FjcGk7Ci0JCX0KKwkvKiBDaGVjayBpZiBub3J0aGJyaWRnZSBpcyBmcmllbmRseSAqLworCWlmIChlbmFibGVfYXJiaXRlcl9kaXNhYmxlKCkpIHsKKwkJbG9uZ2hhdWxfZmxhZ3MgfD0gVVNFX05PUlRIQlJJREdFOworCQlnb3RvIHByaW50X3N1cHBvcnRfdHlwZTsKIAl9CisKKwkvKiBObyBBQ1BJIEMzIG9yIHdlIGNhbid0IHVzZSBpdCAqLworCS8qIENoZWNrIEFDUEkgc3VwcG9ydCBmb3IgYnVzIG1hc3RlciBhcmJpdGVyIGRpc2FibGUgKi8KKwlpZiAoKHByID09IE5VTEwpIHx8ICEocHItPmZsYWdzLmJtX2NvbnRyb2wpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJObyBBQ1BJIHN1cHBvcnQuIFVuc3VwcG9ydGVkIG5vcnRoYnJpZGdlLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogcHJpbnRfc3VwcG9ydF90eXBlOgotCWlmICghcG9ydDIyX2VuKSB7CisJaWYgKCEobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfTk9SVEhCUklER0UpKSB7CiAJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVXNpbmcgQUNQSSBzdXBwb3J0LlxuIik7CiAJfSBlbHNlIHsKIAkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJVc2luZyBub3J0aGJyaWRnZSBzdXBwb3J0LlxuIik7CkBAIC03MzIsMTAgKzcyNiw2IEBACiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIobG9uZ2hhdWxfdGFibGUsIHBvbGljeS0+Y3B1KTsKIAogCXJldHVybiAwOwotCi1lcnJfYWNwaToKLQlwcmludGsoS0VSTl9FUlIgUEZYICJObyBBQ1BJIHN1cHBvcnQuIE5vIFZUODYwMSBvciBWVDg2MjMgbm9ydGhicmlkZ2UuIEFib3J0aW5nLlxuIik7Ci0JcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGxvbmdoYXVsX2NwdV9leGl0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQpAQCAtNzcwLDggKzc2MCw4IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKG51bV9vbmxpbmVfY3B1cygpID4gMSkgewotCQlyZXR1cm4gLUVOT0RFVjsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTW9yZSB0aGFuIDEgQ1BVIGRldGVjdGVkLCBsb25naGF1bCBkaXNhYmxlZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKQEAgLTc4Myw4ICs3NzMsMTAgQEAKIAlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgewogCWNhc2UgNiAuLi4gOToKIAkJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZsb25naGF1bF9kcml2ZXIpOworCWNhc2UgMTA6CisJCXByaW50ayhLRVJOX0VSUiBQRlggIlVzZSBhY3BpLWNwdWZyZXEgZHJpdmVyIGZvciBWSUEgQzdcbiIpOwogCWRlZmF1bHQ6Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVW5rbm93biBWSUEgQ1BVLiBDb250YWN0IGRhdmVqQGNvZGVtb25rZXkub3JnLnVrXG4iKTsKKwkJOzsKIAl9CiAKIAlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwppbmRleCAzMDRkMmVhLi40Nzg2ZmVkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCkBAIC01MSw3ICs1MSw2IEBACiAKIAogc3RhdGljIGludCBoYXNfTjQ0X08xN19lcnJhdGFbTlJfQ1BVU107Ci1zdGF0aWMgaW50IGhhc19ONjBfZXJyYXRhW05SX0NQVVNdOwogc3RhdGljIHVuc2lnbmVkIGludCBzdG9ja19mcmVxOwogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBwNGNsb2NrbW9kX2RyaXZlcjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9wNF9nZXQodW5zaWduZWQgaW50IGNwdSk7CkBAIC0xNjMsMjkgKzE2MiwyNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNwdWZyZXFfcDRfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JaWYgKChjLT54ODYgPT0gMHgwNikgJiYgKGMtPng4Nl9tb2RlbCA9PSAweDA5KSkgewotCQkvKiBQZW50aXVtIE0gKEJhbmlhcykgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldhcm5pbmc6IFBlbnRpdW0gTSBkZXRlY3RlZC4gIgotCQkgICAgICAgIlRoZSBzcGVlZHN0ZXBfY2VudHJpbm8gbW9kdWxlIG9mZmVycyB2b2x0YWdlIHNjYWxpbmciCi0JCSAgICAgICAiIGluIGFkZGl0aW9uIG9mIGZyZXF1ZW5jeSBzY2FsaW5nLiBZb3Ugc2hvdWxkIHVzZSAiCi0JCSAgICAgICAidGhhdCBpbnN0ZWFkIG9mIHA0LWNsb2NrbW9kLCBpZiBwb3NzaWJsZS5cbiIpOwotCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUE0pOwotCX0KLQotCWlmICgoYy0+eDg2ID09IDB4MDYpICYmIChjLT54ODZfbW9kZWwgPT0gMHgwRCkpIHsKLQkJLyogUGVudGl1bSBNIChEb3RoYW4pICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJXYXJuaW5nOiBQZW50aXVtIE0gZGV0ZWN0ZWQuICIKLQkJICAgICAgICJUaGUgc3BlZWRzdGVwX2NlbnRyaW5vIG1vZHVsZSBvZmZlcnMgdm9sdGFnZSBzY2FsaW5nIgotCQkgICAgICAgIiBpbiBhZGRpdGlvbiBvZiBmcmVxdWVuY3kgc2NhbGluZy4gWW91IHNob3VsZCB1c2UgIgotCQkgICAgICAgInRoYXQgaW5zdGVhZCBvZiBwNC1jbG9ja21vZCwgaWYgcG9zc2libGUuXG4iKTsKLQkJLyogb24gUC00cywgdGhlIFRTQyBydW5zIHdpdGggY29uc3RhbnQgZnJlcXVlbmN5IGluZGVwZW5kZW50IHdoZXRoZXIKLQkJICogdGhyb3R0bGluZyBpcyBhY3RpdmUgb3Igbm90LiAqLwotCQlwNGNsb2NrbW9kX2RyaXZlci5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOwotCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUE0pOworCWlmIChjLT54ODYgPT0gMHgwNikgeworCQlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9FU1QpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldhcm5pbmc6IEVTVC1jYXBhYmxlIENQVSBkZXRlY3RlZC4gIgorCQkJICAgICAgICJUaGUgYWNwaS1jcHVmcmVxIG1vZHVsZSBvZmZlcnMgdm9sdGFnZSBzY2FsaW5nIgorCQkJICAgICAgICIgaW4gYWRkaXRpb24gb2YgZnJlcXVlbmN5IHNjYWxpbmcuIFlvdSBzaG91bGQgdXNlICIKKwkJCSAgICAgICAidGhhdCBpbnN0ZWFkIG9mIHA0LWNsb2NrbW9kLCBpZiBwb3NzaWJsZS5cbiIpOworCQlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgeworCQljYXNlIDB4MEU6IC8qIENvcmUgKi8KKwkJY2FzZSAweDBGOiAvKiBDb3JlIER1byAqLworCQkJcDRjbG9ja21vZF9kcml2ZXIuZmxhZ3MgfD0gQ1BVRlJFUV9DT05TVF9MT09QUzsKKwkJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koU1BFRURTVEVQX1BST0NFU1NPUl9QQ09SRSk7CisJCWNhc2UgMHgwRDogLyogUGVudGl1bSBNIChEb3RoYW4pICovCisJCQlwNGNsb2NrbW9kX2RyaXZlci5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgMHgwOTogLyogUGVudGl1bSBNIChCYW5pYXMpICovCisJCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KFNQRUVEU1RFUF9QUk9DRVNTT1JfUE0pOworCQl9CiAJfQogCiAJaWYgKGMtPng4NiAhPSAweEYpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vd24gcDQtY2xvY2ttb2QtY2FwYWJsZSBDUFUuIFBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byA8bGludXhAYnJvZG8uZGU+XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vd24gcDQtY2xvY2ttb2QtY2FwYWJsZSBDUFUuIFBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byA8Y3B1ZnJlcUBsaXN0cy5saW51eC5vcmcudWs+XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjYsMTIgKzIyMyw2IEBACiAJY2FzZSAweDBmMTI6CiAJCWhhc19ONDRfTzE3X2VycmF0YVtwb2xpY3ktPmNwdV0gPSAxOwogCQlkcHJpbnRrKCJoYXMgZXJyYXRhIC0tIGRpc2FibGluZyBsb3cgZnJlcXVlbmNpZXNcbiIpOwotCQlicmVhazsKLQotCWNhc2UgMHgwZjI5OgotCQloYXNfTjYwX2VycmF0YVtwb2xpY3ktPmNwdV0gPSAxOwotCQlkcHJpbnRrKCJoYXMgZXJyYXRhIC0tIGRpc2FibGluZyBmcmVxdWVuY2llcyBsb3dlciB0aGFuIDJnaHpcbiIpOwotCQlicmVhazsKIAl9CiAKIAkvKiBnZXQgbWF4IGZyZXF1ZW5jeSAqLwpAQCAtMjQzLDggKzIzNCw2IEBACiAJZm9yIChpPTE7IChwNGNsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewogCQlpZiAoKGk8MikgJiYgKGhhc19ONDRfTzE3X2VycmF0YVtwb2xpY3ktPmNwdV0pKQogCQkJcDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQ7Ci0JCWVsc2UgaWYgKGhhc19ONjBfZXJyYXRhW3BvbGljeS0+Y3B1XSAmJiAoKHN0b2NrX2ZyZXEgKiBpKS84KSA8IDIwMDAwMDApCi0JCQlwNGNsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSA9IENQVUZSRVFfRU5UUllfSU5WQUxJRDsKIAkJZWxzZQogCQkJcDRjbG9ja21vZF90YWJsZVtpXS5mcmVxdWVuY3kgPSAoc3RvY2tfZnJlcSAqIGkpLzg7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYwppbmRleCBlZjQ1N2Q1Li5iOGZiNGI1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYwpAQCAtMTUzLDYgKzE1Myw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBzYzUyMF9mcmVxX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YTsKKwlpbnQgZXJyOwogCiAJLyogVGVzdCBpZiB3ZSBoYXZlIHRoZSByaWdodCBoYXJkd2FyZSAqLwogCWlmKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgfHwKQEAgLTE2Niw3ICsxNjcsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZzYzUyMF9mcmVxX2RyaXZlcik7CisJZXJyID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnNjNTIwX2ZyZXFfZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlpb3VubWFwKGNwdWN0bCk7CisKKwlyZXR1cm4gZXJyOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCmluZGV4IGU4OTkzYmEuLmY0M2I5ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYwpAQCAtMzYsNiArMzYsNyBAQAogCiAjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1jZW50cmlubyIsIG1zZykKIAorI2RlZmluZSBJTlRFTF9NU1JfUkFOR0UJKDB4ZmZmZikKIAogc3RydWN0IGNwdV9pZAogewpAQCAtMzc5LDYgKzM4MCw3IEBACiB9CiAKIAorI2lmZGVmIENPTkZJR19TTVAKIC8qCiAgKiBTb21lIEJJT1NlcyBkbyBTV19BTlkgY29vcmRpbmF0aW9uIGludGVybmFsbHksIGVpdGhlciBzZXQgaXQgdXAgaW4gaHcKICAqIG9yIGRvIGl0IGluIEJJT1MgZmlybXdhcmUgYW5kIHdvbid0IGluZm9ybSBhYm91dCBpdCB0byBPUy4gSWYgbm90CkBAIC0zOTIsNyArMzk0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgc3dfYW55X2J1Z19kbWlfdGFibGVbXSA9IHsKIAl7CiAJCS5jYWxsYmFjayA9IHN3X2FueV9idWdfZm91bmQsCkBAIC00MDUsNyArNDA2LDcgQEAKIAl9LAogCXsgfQogfTsKLQorI2VuZGlmCiAKIC8qCiAgKiBjZW50cmlub19jcHVfaW5pdF9hY3BpIC0gcmVnaXN0ZXIgd2l0aCBBQ1BJIFAtU3RhdGVzIGxpYnJhcnkKQEAgLTQ2Myw4ICs0NjQsOSBAQAogCX0KIAogCWZvciAoaT0wOyBpPHAtPnN0YXRlX2NvdW50OyBpKyspIHsKLQkJaWYgKHAtPnN0YXRlc1tpXS5jb250cm9sICE9IHAtPnN0YXRlc1tpXS5zdGF0dXMpIHsKLQkJCWRwcmludGsoIkRpZmZlcmVudCBjb250cm9sICglbGx1KSBhbmQgc3RhdHVzIHZhbHVlcyAoJWxsdSlcbiIsCisJCWlmICgocC0+c3RhdGVzW2ldLmNvbnRyb2wgJiBJTlRFTF9NU1JfUkFOR0UpICE9CisJCSAgICAocC0+c3RhdGVzW2ldLnN0YXR1cyAmIElOVEVMX01TUl9SQU5HRSkpIHsKKwkJCWRwcmludGsoIkRpZmZlcmVudCBNU1IgYml0cyBpbiBjb250cm9sICglbGx1KSBhbmQgc3RhdHVzICglbGx1KVxuIiwKIAkJCQlwLT5zdGF0ZXNbaV0uY29udHJvbCwgcC0+c3RhdGVzW2ldLnN0YXR1cyk7CiAJCQlyZXN1bHQgPSAtRUlOVkFMOwogCQkJZ290byBlcnJfdW5yZWc7CkBAIC01MDAsNyArNTAyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaT0wOyBpPHAtPnN0YXRlX2NvdW50OyBpKyspIHsKLQkJY2VudHJpbm9fbW9kZWxbY3B1XS0+b3BfcG9pbnRzW2ldLmluZGV4ID0gcC0+c3RhdGVzW2ldLmNvbnRyb2w7CisJCWNlbnRyaW5vX21vZGVsW2NwdV0tPm9wX3BvaW50c1tpXS5pbmRleCA9IHAtPnN0YXRlc1tpXS5jb250cm9sICYgSU5URUxfTVNSX1JBTkdFOwogCQljZW50cmlub19tb2RlbFtjcHVdLT5vcF9wb2ludHNbaV0uZnJlcXVlbmN5ID0gcC0+c3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAkJZHByaW50aygiYWRkaW5nIHN0YXRlICVpIHdpdGggZnJlcXVlbmN5ICV1IGFuZCBjb250cm9sIHZhbHVlICUwNHhcbiIsIAogCQkJaSwgY2VudHJpbm9fbW9kZWxbY3B1XS0+b3BfcG9pbnRzW2ldLmZyZXF1ZW5jeSwgY2VudHJpbm9fbW9kZWxbY3B1XS0+b3BfcG9pbnRzW2ldLmluZGV4KTsKQEAgLTUzMSw2ICs1MzMsOSBAQAogCiAJLyogbm90aWZ5IEJJT1MgdGhhdCB3ZSBleGlzdCAqLwogCWFjcGlfcHJvY2Vzc29yX25vdGlmeV9zbW0oVEhJU19NT0RVTEUpOworCXByaW50aygic3BlZWRzdGVwLWNlbnRyaW5vIHdpdGggWDg2X1NQRUVEU1RFUF9DRU5UUklOT19BQ1BJICIKKwkgICAgICAgImNvbmZpZyBpcyBkZXByZWNhdGVkLlxuICIKKwkgICAgICAgIlVzZSBYODZfQUNQSV9DUFVGUkVRIChhY3BpLWNwdWZyZXEpIGluc3RlYWQuXG4iICk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYwppbmRleCA0ZjQ2Y2FjLi5kNTkyNzdjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYwpAQCAtMTIzLDYgKzEyMywzNiBAQAogCXJldHVybiAobXNyX3RtcCAqIDEwMCAqIDEwMDApOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHBlbnRpdW1fY29yZV9nZXRfZnJlcXVlbmN5KHZvaWQpCit7CisJdTMyIGZzYiA9IDA7CisJdTMyIG1zcl9sbywgbXNyX3RtcDsKKworCXJkbXNyKE1TUl9GU0JfRlJFUSwgbXNyX2xvLCBtc3JfdG1wKTsKKwkvKiBzZWUgdGFibGUgQi0yIG9mIDI1MzY2OTIwLnBkZiAqLworCXN3aXRjaCAobXNyX2xvICYgMHgwNykgeworCWNhc2UgNToKKwkJZnNiID0gMTAwMDAwOworCQlicmVhazsKKwljYXNlIDE6CisJCWZzYiA9IDEzMzMzMzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlmc2IgPSAxNjY2Njc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiUENPUkUgLSBNU1JfRlNCX0ZSRVEgdW5kZWZpbmVkIHZhbHVlIik7CisJfQorCisJcmRtc3IoTVNSX0lBMzJfRUJMX0NSX1BPV0VST04sIG1zcl9sbywgbXNyX3RtcCk7CisJZHByaW50aygiUENPUkUgLSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjogMHgleCAweCV4XG4iLCBtc3JfbG8sIG1zcl90bXApOworCisJbXNyX3RtcCA9IChtc3JfbG8gPj4gMjIpICYgMHgxZjsKKwlkcHJpbnRrKCJiaXRzIDIyLTI2IGFyZSAweCV4LCBzcGVlZCBpcyAldVxuIiwgbXNyX3RtcCwgKG1zcl90bXAgKiBmc2IpKTsKKworCXJldHVybiAobXNyX3RtcCAqIGZzYik7Cit9CisKIAogc3RhdGljIHVuc2lnbmVkIGludCBwZW50aXVtNF9nZXRfZnJlcXVlbmN5KHZvaWQpCiB7CkBAIC0xNzQsNiArMjA0LDggQEAKIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kodW5zaWduZWQgaW50IHByb2Nlc3NvcikKIHsKIAlzd2l0Y2ggKHByb2Nlc3NvcikgeworCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QQ09SRToKKwkJcmV0dXJuIHBlbnRpdW1fY29yZV9nZXRfZnJlcXVlbmN5KCk7CiAJY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BNOgogCQlyZXR1cm4gcGVudGl1bU1fZ2V0X2ZyZXF1ZW5jeSgpOwogCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QNEQ6CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaCBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oCmluZGV4IGI3MzU0MjkuLmIxMWJjYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oCkBAIC0yMiw2ICsyMiw3IEBACiAgKiB0aGUgc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KCkgY2FsbC4gKi8KICNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QTQkJCTB4RkZGRkZGMDMgIC8qIFBlbnRpdW0gTSAgKi8KICNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QNEQJCQkweEZGRkZGRjA0ICAvKiBkZXNrdG9wIFA0ICAqLworI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BDT1JFCQkweEZGRkZGRjA1ICAvKiBDb3JlICovCiAKIC8qIHNwZWVkc3RlcCBzdGF0ZXMgLS0gb25seSB0d28gb2YgdGhlbSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCmluZGV4IGMyODMzM2QuLmZmMGQ4OTggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCkBAIC0zNjAsOSArMzYwLDYgQEAKIAljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DOgogCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFk6CiAJCWJyZWFrOwotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QNE06Ci0JCXByaW50ayhLRVJOX0lORk8gInNwZWVkc3RlcC1zbWk6IHlvdSdyZSB0cnlpbmcgdG8gdXNlIHRoaXMgY3B1ZnJlcSBkcml2ZXIgb24gYSBQZW50aXVtIDQtYmFzZWQgQ1BVLiBNb3N0IGxpa2VseSBpdCB3aWxsIG5vdCB3b3JrLlxuIik7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1aWQuYwppbmRleCBkYjZkZDIwLi41MTEzMGIzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdWlkLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHVpZC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAljaGFyIF9fdXNlciAqdG1wID0gYnVmOwogCXUzMiBkYXRhWzRdOwogCXUzMiByZWcgPSAqcHBvczsKLQlpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCiAJaWYgKGNvdW50ICUgMTYpCiAJCXJldHVybiAtRUlOVkFMOwkvKiBJbnZhbGlkIGNodW5rIHNpemUgKi8KQEAgLTEzNCw3ICsxMzQsNyBAQAogCiBzdGF0aWMgaW50IGNwdWlkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJdW5zaWduZWQgaW50IGNwdSA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmKGNwdV9kYXRhKVtjcHVdOwogCiAJaWYgKGNwdSA+PSBOUl9DUFVTIHx8ICFjcHVfb25saW5lKGNwdSkpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2U4MjAuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IDJmN2QwYTkuLmYzOTFhYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvZTgyMC5jCkBAIC02NjgsNyArNjY4LDcgQEAKIAl9CiB9CiAKLXZvaWQgX19pbml0IHJlZ2lzdGVyX21lbW9yeSh2b2lkKQordm9pZCBfX2luaXQgZTgyMF9yZWdpc3Rlcl9tZW1vcnkodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGdhcHN0YXJ0LCBnYXBzaXplLCByb3VuZDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbGFzdDsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvZWZpLmMgYi9hcmNoL2kzODYva2VybmVsL2VmaS5jCmluZGV4IGI5MmM3ZjAuLjhmOWM2MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9lZmkuYwpAQCAtNDczLDYgKzQ3Myw3MCBAQAogfQogCiAvKgorICogV3JhcCBhbGwgdGhlIHZpcnR1YWwgY2FsbHMgaW4gYSB3YXkgdGhhdCBmb3JjZXMgdGhlIHBhcmFtZXRlcnMgb24gdGhlIHN0YWNrLgorICovCisKKyNkZWZpbmUgZWZpX2NhbGxfdmlydChmLCBhcmdzLi4uKSBcCisgICAgICgoZWZpXyMjZiMjX3QgX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpKillZmkuc3lzdGFiLT5ydW50aW1lLT5mKShhcmdzKQorCitzdGF0aWMgZWZpX3N0YXR1c190IHZpcnRfZWZpX2dldF90aW1lKGVmaV90aW1lX3QgKnRtLCBlZmlfdGltZV9jYXBfdCAqdGMpCit7CisJcmV0dXJuIGVmaV9jYWxsX3ZpcnQoZ2V0X3RpbWUsIHRtLCB0Yyk7Cit9CisKK3N0YXRpYyBlZmlfc3RhdHVzX3QgdmlydF9lZmlfc2V0X3RpbWUgKGVmaV90aW1lX3QgKnRtKQoreworCXJldHVybiBlZmlfY2FsbF92aXJ0KHNldF90aW1lLCB0bSk7Cit9CisKK3N0YXRpYyBlZmlfc3RhdHVzX3QgdmlydF9lZmlfZ2V0X3dha2V1cF90aW1lIChlZmlfYm9vbF90ICplbmFibGVkLAorCQkJCQkgICAgICBlZmlfYm9vbF90ICpwZW5kaW5nLAorCQkJCQkgICAgICBlZmlfdGltZV90ICp0bSkKK3sKKwlyZXR1cm4gZWZpX2NhbGxfdmlydChnZXRfd2FrZXVwX3RpbWUsIGVuYWJsZWQsIHBlbmRpbmcsIHRtKTsKK30KKworc3RhdGljIGVmaV9zdGF0dXNfdCB2aXJ0X2VmaV9zZXRfd2FrZXVwX3RpbWUgKGVmaV9ib29sX3QgZW5hYmxlZCwKKwkJCQkJICAgICAgZWZpX3RpbWVfdCAqdG0pCit7CisJcmV0dXJuIGVmaV9jYWxsX3ZpcnQoc2V0X3dha2V1cF90aW1lLCBlbmFibGVkLCB0bSk7Cit9CisKK3N0YXRpYyBlZmlfc3RhdHVzX3QgdmlydF9lZmlfZ2V0X3ZhcmlhYmxlIChlZmlfY2hhcjE2X3QgKm5hbWUsCisJCQkJCSAgIGVmaV9ndWlkX3QgKnZlbmRvciwgdTMyICphdHRyLAorCQkJCQkgICB1bnNpZ25lZCBsb25nICpkYXRhX3NpemUsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGVmaV9jYWxsX3ZpcnQoZ2V0X3ZhcmlhYmxlLCBuYW1lLCB2ZW5kb3IsIGF0dHIsIGRhdGFfc2l6ZSwgZGF0YSk7Cit9CisKK3N0YXRpYyBlZmlfc3RhdHVzX3QgdmlydF9lZmlfZ2V0X25leHRfdmFyaWFibGUgKHVuc2lnbmVkIGxvbmcgKm5hbWVfc2l6ZSwKKwkJCQkJCWVmaV9jaGFyMTZfdCAqbmFtZSwKKwkJCQkJCWVmaV9ndWlkX3QgKnZlbmRvcikKK3sKKwlyZXR1cm4gZWZpX2NhbGxfdmlydChnZXRfbmV4dF92YXJpYWJsZSwgbmFtZV9zaXplLCBuYW1lLCB2ZW5kb3IpOworfQorCitzdGF0aWMgZWZpX3N0YXR1c190IHZpcnRfZWZpX3NldF92YXJpYWJsZSAoZWZpX2NoYXIxNl90ICpuYW1lLAorCQkJCQkgICBlZmlfZ3VpZF90ICp2ZW5kb3IsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYXR0ciwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhX3NpemUsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGVmaV9jYWxsX3ZpcnQoc2V0X3ZhcmlhYmxlLCBuYW1lLCB2ZW5kb3IsIGF0dHIsIGRhdGFfc2l6ZSwgZGF0YSk7Cit9CisKK3N0YXRpYyBlZmlfc3RhdHVzX3QgdmlydF9lZmlfZ2V0X25leHRfaGlnaF9tb25vX2NvdW50ICh1MzIgKmNvdW50KQoreworCXJldHVybiBlZmlfY2FsbF92aXJ0KGdldF9uZXh0X2hpZ2hfbW9ub19jb3VudCwgY291bnQpOworfQorCitzdGF0aWMgdm9pZCB2aXJ0X2VmaV9yZXNldF9zeXN0ZW0gKGludCByZXNldF90eXBlLCBlZmlfc3RhdHVzX3Qgc3RhdHVzLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGF0YV9zaXplLAorCQkJCSAgIGVmaV9jaGFyMTZfdCAqZGF0YSkKK3sKKwllZmlfY2FsbF92aXJ0KHJlc2V0X3N5c3RlbSwgcmVzZXRfdHlwZSwgc3RhdHVzLCBkYXRhX3NpemUsIGRhdGEpOworfQorCisvKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIHN3aXRjaCB0aGUgRUZJIHJ1bnRpbWUgc2VydmljZXMgdG8gdmlydHVhbCBtb2RlLgogICogRXNzZW50aWFsbHksIGxvb2sgdGhyb3VnaCB0aGUgRUZJIG1lbW1hcCBhbmQgbWFwIGV2ZXJ5IHJlZ2lvbiB0aGF0CiAgKiBoYXMgdGhlIHJ1bnRpbWUgYXR0cmlidXRlIGJpdCBzZXQgaW4gaXRzIG1lbW9yeSBkZXNjcmlwdG9yIGFuZCB1cGRhdGUKQEAgLTUyNSwyMiArNTg5LDE1IEBACiAJICogcG9pbnRlcnMgaW4gdGhlIHJ1bnRpbWUgc2VydmljZSB0YWJsZSB0byB0aGUgbmV3IHZpcnR1YWwgYWRkcmVzc2VzLgogCSAqLwogCi0JZWZpLmdldF90aW1lID0gKGVmaV9nZXRfdGltZV90ICopIGVmaS5zeXN0YWItPnJ1bnRpbWUtPmdldF90aW1lOwotCWVmaS5zZXRfdGltZSA9IChlZmlfc2V0X3RpbWVfdCAqKSBlZmkuc3lzdGFiLT5ydW50aW1lLT5zZXRfdGltZTsKLQllZmkuZ2V0X3dha2V1cF90aW1lID0gKGVmaV9nZXRfd2FrZXVwX3RpbWVfdCAqKQotCQkJCQllZmkuc3lzdGFiLT5ydW50aW1lLT5nZXRfd2FrZXVwX3RpbWU7Ci0JZWZpLnNldF93YWtldXBfdGltZSA9IChlZmlfc2V0X3dha2V1cF90aW1lX3QgKikKLQkJCQkJZWZpLnN5c3RhYi0+cnVudGltZS0+c2V0X3dha2V1cF90aW1lOwotCWVmaS5nZXRfdmFyaWFibGUgPSAoZWZpX2dldF92YXJpYWJsZV90ICopCi0JCQkJCWVmaS5zeXN0YWItPnJ1bnRpbWUtPmdldF92YXJpYWJsZTsKLQllZmkuZ2V0X25leHRfdmFyaWFibGUgPSAoZWZpX2dldF9uZXh0X3ZhcmlhYmxlX3QgKikKLQkJCQkJZWZpLnN5c3RhYi0+cnVudGltZS0+Z2V0X25leHRfdmFyaWFibGU7Ci0JZWZpLnNldF92YXJpYWJsZSA9IChlZmlfc2V0X3ZhcmlhYmxlX3QgKikKLQkJCQkJZWZpLnN5c3RhYi0+cnVudGltZS0+c2V0X3ZhcmlhYmxlOwotCWVmaS5nZXRfbmV4dF9oaWdoX21vbm9fY291bnQgPSAoZWZpX2dldF9uZXh0X2hpZ2hfbW9ub19jb3VudF90ICopCi0JCQkJCWVmaS5zeXN0YWItPnJ1bnRpbWUtPmdldF9uZXh0X2hpZ2hfbW9ub19jb3VudDsKLQllZmkucmVzZXRfc3lzdGVtID0gKGVmaV9yZXNldF9zeXN0ZW1fdCAqKQotCQkJCQllZmkuc3lzdGFiLT5ydW50aW1lLT5yZXNldF9zeXN0ZW07CisJZWZpLmdldF90aW1lID0gdmlydF9lZmlfZ2V0X3RpbWU7CisJZWZpLnNldF90aW1lID0gdmlydF9lZmlfc2V0X3RpbWU7CisJZWZpLmdldF93YWtldXBfdGltZSA9IHZpcnRfZWZpX2dldF93YWtldXBfdGltZTsKKwllZmkuc2V0X3dha2V1cF90aW1lID0gdmlydF9lZmlfc2V0X3dha2V1cF90aW1lOworCWVmaS5nZXRfdmFyaWFibGUgPSB2aXJ0X2VmaV9nZXRfdmFyaWFibGU7CisJZWZpLmdldF9uZXh0X3ZhcmlhYmxlID0gdmlydF9lZmlfZ2V0X25leHRfdmFyaWFibGU7CisJZWZpLnNldF92YXJpYWJsZSA9IHZpcnRfZWZpX3NldF92YXJpYWJsZTsKKwllZmkuZ2V0X25leHRfaGlnaF9tb25vX2NvdW50ID0gdmlydF9lZmlfZ2V0X25leHRfaGlnaF9tb25vX2NvdW50OworCWVmaS5yZXNldF9zeXN0ZW0gPSB2aXJ0X2VmaV9yZXNldF9zeXN0ZW07CiB9CiAKIHZvaWQgX19pbml0CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMgYi9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMKaW5kZXggZGUzNGI3ZmUuLjVlNDc2ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMKQEAgLTMwMiwxMiArMzAyLDE2IEBACiAJcHVzaGwgJChfX1VTRVJfQ1MpCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAkvKkNGSV9SRUxfT0ZGU0VUIGNzLCAwKi8KKyNpZm5kZWYgQ09ORklHX0NPTVBBVF9WRFNPCiAJLyoKIAkgKiBQdXNoIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3lzZW50ZXJfcmV0dXJuIHRvIHRoZSBzdGFjay4KIAkgKiBBIHRpbnkgYml0IG9mIG9mZnNldCBmaXh1cCBpcyBuZWNlc3NhcnkgLSA0KjQgbWVhbnMgdGhlIDQgd29yZHMKIAkgKiBwdXNoZWQgYWJvdmU7ICs4IGNvcnJlc3BvbmRzIHRvIGNvcHlfdGhyZWFkJ3MgZXNwMCBzZXR0aW5nLgogCSAqLwogCXB1c2hsIChUSV9zeXNlbnRlcl9yZXR1cm4tVEhSRUFEX1NJWkUrOCs0KjQpKCVlc3ApCisjZWxzZQorCXB1c2hsICRTWVNFTlRFUl9SRVRVUk4KKyNlbmRpZgogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJQ0ZJX1JFTF9PRkZTRVQgZWlwLCAwCiAKQEAgLTk3OSwzOCArOTgzLDYgQEAKIAlqbXAgZXJyb3JfY29kZQogCUNGSV9FTkRQUk9DCiAKLSNpZmRlZiBDT05GSUdfU1RBQ0tfVU5XSU5ECi1FTlRSWShhcmNoX3Vud2luZF9pbml0X3J1bm5pbmcpCi0JQ0ZJX1NUQVJUUFJPQwotCW1vdmwJNCglZXNwKSwgJWVkeAotCW1vdmwJKCVlc3ApLCAlZWN4Ci0JbGVhbAk0KCVlc3ApLCAlZWF4Ci0JbW92bAklZWJ4LCBQVF9FQlgoJWVkeCkKLQl4b3JsCSVlYngsICVlYngKLQltb3ZsCSVlYngsIFBUX0VDWCglZWR4KQotCW1vdmwJJWVieCwgUFRfRURYKCVlZHgpCi0JbW92bAklZXNpLCBQVF9FU0koJWVkeCkKLQltb3ZsCSVlZGksIFBUX0VESSglZWR4KQotCW1vdmwJJWVicCwgUFRfRUJQKCVlZHgpCi0JbW92bAklZWJ4LCBQVF9FQVgoJWVkeCkKLQltb3ZsCSRfX1VTRVJfRFMsIFBUX0RTKCVlZHgpCi0JbW92bAkkX19VU0VSX0RTLCBQVF9FUyglZWR4KQotCW1vdmwJJDAsIFBUX0dTKCVlZHgpCi0JbW92bAklZWJ4LCBQVF9PUklHX0VBWCglZWR4KQotCW1vdmwJJWVjeCwgUFRfRUlQKCVlZHgpCi0JbW92bAkxMiglZXNwKSwgJWVjeAotCW1vdmwJJF9fS0VSTkVMX0NTLCBQVF9DUyglZWR4KQotCW1vdmwJJWVieCwgUFRfRUZMQUdTKCVlZHgpCi0JbW92bAklZWF4LCBQVF9PTERFU1AoJWVkeCkKLQltb3ZsCTgoJWVzcCksICVlYXgKLQltb3ZsCSVlY3gsIDgoJWVzcCkKLQltb3ZsCVBUX0VCWCglZWR4KSwgJWVieAotCW1vdmwJJF9fS0VSTkVMX0RTLCBQVF9PTERTUyglZWR4KQotCWptcGwJKiVlYXgKLQlDRklfRU5EUFJPQwotRU5EUFJPQyhhcmNoX3Vud2luZF9pbml0X3J1bm5pbmcpCi0jZW5kaWYKLQogRU5UUlkoa2VybmVsX3RocmVhZF9oZWxwZXIpCiAJcHVzaGwgJDAJCSMgZmFrZSByZXR1cm4gYWRkcmVzcyBmb3IgdW53aW5kZXIKIAlDRklfU1RBUlRQUk9DCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCmluZGV4IGUyMWRjZGUuLjZhMzg3NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jCkBAIC0xMjI3LDI2ICsxMjI3LDMyIEBACiAKIHN0YXRpYyBpbnQgX19hc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxKQogewotCXN0YXRpYyBpbnQgY3VycmVudF92ZWN0b3IgPSBGSVJTVF9ERVZJQ0VfVkVDVE9SLCBvZmZzZXQgPSAwOwotCWludCB2ZWN0b3I7CisJc3RhdGljIGludCBjdXJyZW50X3ZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IsIGN1cnJlbnRfb2Zmc2V0ID0gMDsKKwlpbnQgdmVjdG9yLCBvZmZzZXQsIGk7CiAKIAlCVUdfT04oKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFfVkVDVE9SUyk7CiAKIAlpZiAoaXJxX3ZlY3RvcltpcnFdID4gMCkKIAkJcmV0dXJuIGlycV92ZWN0b3JbaXJxXTsKIAotCWN1cnJlbnRfdmVjdG9yICs9IDg7Ci0JaWYgKGN1cnJlbnRfdmVjdG9yID09IFNZU0NBTExfVkVDVE9SKQotCQljdXJyZW50X3ZlY3RvciArPSA4OwotCi0JaWYgKGN1cnJlbnRfdmVjdG9yID49IEZJUlNUX1NZU1RFTV9WRUNUT1IpIHsKLQkJb2Zmc2V0Kys7Ci0JCWlmICghKG9mZnNldCAlIDgpKQotCQkJcmV0dXJuIC1FTk9TUEM7Ci0JCWN1cnJlbnRfdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiArIG9mZnNldDsKLQl9Ci0KIAl2ZWN0b3IgPSBjdXJyZW50X3ZlY3RvcjsKKwlvZmZzZXQgPSBjdXJyZW50X29mZnNldDsKK25leHQ6CisJdmVjdG9yICs9IDg7CisJaWYgKHZlY3RvciA+PSBGSVJTVF9TWVNURU1fVkVDVE9SKSB7CisJCW9mZnNldCA9IChvZmZzZXQgKyAxKSAlIDg7CisJCXZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IgKyBvZmZzZXQ7CisJfQorCWlmICh2ZWN0b3IgPT0gY3VycmVudF92ZWN0b3IpCisJCXJldHVybiAtRU5PU1BDOworCWlmICh2ZWN0b3IgPT0gU1lTQ0FMTF9WRUNUT1IpCisJCWdvdG8gbmV4dDsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRX1ZFQ1RPUlM7IGkrKykKKwkJaWYgKGlycV92ZWN0b3JbaV0gPT0gdmVjdG9yKQorCQkJZ290byBuZXh0OworCisJY3VycmVudF92ZWN0b3IgPSB2ZWN0b3I7CisJY3VycmVudF9vZmZzZXQgPSBvZmZzZXQ7CiAJaXJxX3ZlY3RvcltpcnFdID0gdmVjdG9yOwogCiAJcmV0dXJuIHZlY3RvcjsKQEAgLTI0ODUsNyArMjQ5MSw3IEBACiBpbnQgY3JlYXRlX2lycSh2b2lkKQogewogCS8qIEFsbG9jYXRlIGFuIHVudXNlZCBpcnEgKi8KLQlpbnQgaXJxLCBuZXcsIHZlY3RvcjsKKwlpbnQgaXJxLCBuZXcsIHZlY3RvciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlycSA9IC1FTk9TUEM7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9taWNyb2NvZGUuYwppbmRleCA5NzIzNDY2Li5jOGZhMTM3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbWljcm9jb2RlLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJSW50ZWwgQ1BVIE1pY3JvY29kZSBVcGRhdGUgRHJpdmVyIGZvciBMaW51eAogICoKLSAqCUNvcHlyaWdodCAoQykgMjAwMC0yMDA0IFRpZ3JhbiBBaXZhemlhbgorICoJQ29weXJpZ2h0IChDKSAyMDAwLTIwMDYgVGlncmFuIEFpdmF6aWFuIDx0aWdyYW5AYWl2YXppYW4uZnNuZXQuY28udWs+CiAgKgkJICAgICAgMjAwNglTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KICAqCiAgKglUaGlzIGRyaXZlciBhbGxvd3MgdG8gdXBncmFkZSBtaWNyb2NvZGUgb24gSW50ZWwgcHJvY2Vzc29ycwpAQCAtOTIsNyArOTIsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBDUFUgKElBLTMyKSBNaWNyb2NvZGUgVXBkYXRlIERyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiVGlncmFuIEFpdmF6aWFuIDx0aWdyYW5AdmVyaXRhcy5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJUaWdyYW4gQWl2YXppYW4gPHRpZ3JhbkBhaXZhemlhbi5mc25ldC5jby51az4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2RlZmluZSBNSUNST0NPREVfVkVSU0lPTiAJIjEuMTRhIgpAQCAtNzIyLDcgKzcyMiw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBtY19jcHVfbm90aWZpZXIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgbWNfY3B1X25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gbWNfY3B1X2NhbGxiYWNrLAogfTsKIApAQCAtNzUyLDcgKzc1Miw3IEBACiAJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZtY19jcHVfbm90aWZpZXIpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAKLQkJIklBLTMyIE1pY3JvY29kZSBVcGRhdGUgRHJpdmVyOiB2IiBNSUNST0NPREVfVkVSU0lPTiAiIDx0aWdyYW5AdmVyaXRhcy5jb20+XG4iKTsKKwkJIklBLTMyIE1pY3JvY29kZSBVcGRhdGUgRHJpdmVyOiB2IiBNSUNST0NPREVfVkVSU0lPTiAiIDx0aWdyYW5AYWl2YXppYW4uZnNuZXQuY28udWs+XG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZDdkOWM4YjIuLjNkYjBhNTQ0IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbW9kdWxlLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogCiAjaWYgMAogI2RlZmluZSBERUJVR1AgcHJpbnRrCkBAIC0xNDEsMTAgKzE0MiwxMSBAQAogCQlhcHBseV9wYXJhdmlydChwc2VnLCBwc2VnICsgcGFyYS0+c2hfc2l6ZSk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIG1vZHVsZV9idWdfZmluYWxpemUoaGRyLCBzZWNoZHJzLCBtZSk7CiB9CiAKIHZvaWQgbW9kdWxlX2FyY2hfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKG1vZCk7CisJbW9kdWxlX2J1Z19jbGVhbnVwKG1vZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IDJjZTY3MjIuLjQ5YmZmMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC0zNiw3ICszNiw3IEBACiAKIC8qIEhhdmUgd2UgZm91bmQgYW4gTVAgdGFibGUgKi8KIGludCBzbXBfZm91bmRfY29uZmlnOwotdW5zaWduZWQgaW50IF9faW5pdGRhdGEgbWF4Y3B1cyA9IE5SX0NQVVM7Cit1bnNpZ25lZCBpbnQgX19jcHVpbml0ZGF0YSBtYXhjcHVzID0gTlJfQ1BVUzsKIAogLyoKICAqIFZhcmlvdXMgTGludXgtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGNyZWF0ZWQgZnJvbSB0aGUKQEAgLTEwMiw5ICsxMDIsOSBAQAogICovCiAKIHN0YXRpYyBpbnQgbXBjX3JlY29yZDsgCi1zdGF0aWMgc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnRyYW5zbGF0aW9uX3RhYmxlW01BWF9NUENfRU5UUlldIF9faW5pdGRhdGE7CitzdGF0aWMgc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnRyYW5zbGF0aW9uX3RhYmxlW01BWF9NUENfRU5UUlldIF9fY3B1aW5pdGRhdGE7CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBNUF9wcm9jZXNzb3JfaW5mbyAoc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptKQorc3RhdGljIHZvaWQgX19jcHVpbml0IE1QX3Byb2Nlc3Nvcl9pbmZvIChzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0pCiB7CiAgCWludCB2ZXIsIGFwaWNpZDsKIAlwaHlzaWRfbWFza190IHBoeXNfY3B1OwpAQCAtODIyLDcgKzgyMiw3IEBACiAJRHByaW50aygiQm9vdCBDUFUgPSAlZFxuIiwgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKIH0KIAotdm9pZCBfX2RldmluaXQgbXBfcmVnaXN0ZXJfbGFwaWMgKHU4IGlkLCB1OCBlbmFibGVkKQordm9pZCBfX2NwdWluaXQgbXBfcmVnaXN0ZXJfbGFwaWMgKHU4IGlkLCB1OCBlbmFibGVkKQogewogCXN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciBwcm9jZXNzb3I7CiAJaW50IGJvb3RfY3B1ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbXNyLmMgYi9hcmNoL2kzODYva2VybmVsL21zci5jCmluZGV4IDFkMWE1NmMuLjRhNDcyYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbXNyLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9tc3IuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJdTMyIF9fdXNlciAqdG1wID0gKHUzMiBfX3VzZXIgKikgYnVmOwogCXUzMiBkYXRhWzJdOwogCXUzMiByZWcgPSAqcHBvczsKLQlpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWludCBlcnI7CiAKIAlpZiAoY291bnQgJSA4KQpAQCAtMTk2LDcgKzE5Niw3IEBACiAJY29uc3QgdTMyIF9fdXNlciAqdG1wID0gKGNvbnN0IHUzMiBfX3VzZXIgKilidWY7CiAJdTMyIGRhdGFbMl07CiAJdTMyIHJlZyA9ICpwcG9zOwotCWludCBjcHUgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWludCBjcHUgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaW50IGVycjsKIAogCWlmIChjb3VudCAlIDgpCkBAIC0yMTYsNyArMjE2LDcgQEAKIAogc3RhdGljIGludCBtc3Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICYoY3B1X2RhdGEpW2NwdV07CiAKIAlpZiAoY3B1ID49IE5SX0NQVVMgfHwgIWNwdV9vbmxpbmUoY3B1KSkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMgYi9hcmNoL2kzODYva2VybmVsL25taS5jCmluZGV4IGY1YmM3ZTEuLjFhNmY4YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYwpAQCAtMTk1LDYgKzE5NSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZW5kZmxhZyBfX2luaXRkYXRhID0gMDsKKwogI2lmZGVmIENPTkZJR19TTVAKIC8qIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyB1c2VkIGJ5IE5NSV9MT0NBTF9BUElDIGRvbid0IHRyaWdnZXIgd2hlbgogICogdGhlIENQVSBpcyBpZGxlLiBUbyBtYWtlIHN1cmUgdGhlIE5NSSB3YXRjaGRvZyByZWFsbHkgdGlja3Mgb24gYWxsCkBAIC0yMDIsNyArMjA0LDYgQEAKICAqLwogc3RhdGljIF9faW5pdCB2b2lkIG5taV9jcHVfYnVzeSh2b2lkICpkYXRhKQogewotCXZvbGF0aWxlIGludCAqZW5kZmxhZyA9IGRhdGE7CiAJbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7CiAJLyogSW50ZW50aW9uYWxseSBkb24ndCB1c2UgY3B1X3JlbGF4IGhlcmUuIFRoaXMgaXMKIAkgICB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcGVyZm9ybWFuY2UgY291bnRlciByZWFsbHkgdGlja3MsCkBAIC0yMTAsMTQgKzIxMSwxMyBAQAogCSAgIHBhdXNlIGluc3RydWN0aW9uLiBPbiBhIHJlYWwgSFQgbWFjaGluZSB0aGlzIGlzIGZpbmUgYmVjYXVzZQogCSAgIGFsbCBvdGhlciBDUFVzIGFyZSBidXN5IHdpdGggInVzZWxlc3MiIGRlbGF5IGxvb3BzIGFuZCBkb24ndAogCSAgIGNhcmUgaWYgdGhleSBnZXQgc29tZXdoYXQgbGVzcyBjeWNsZXMuICovCi0Jd2hpbGUgKCplbmRmbGFnID09IDApCi0JCWJhcnJpZXIoKTsKKwl3aGlsZSAoZW5kZmxhZyA9PSAwKQorCQltYigpOwogfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IGNoZWNrX25taV93YXRjaGRvZyh2b2lkKQogewotCXZvbGF0aWxlIGludCBlbmRmbGFnID0gMDsKIAl1bnNpZ25lZCBpbnQgKnByZXZfbm1pX2NvdW50OwogCWludCBjcHU7CiAKQEAgLTMxMCwxMyArMzEwLDcgQEAKIAogCWlmICgobm1pID49IE5NSV9JTlZBTElEKSB8fCAobm1pIDwgTk1JX05PTkUpKQogCQlyZXR1cm4gMDsKLQkvKgotCSAqIElmIGFueSBvdGhlciB4ODYgQ1BVIGhhcyBhIGxvY2FsIEFQSUMsIHRoZW4KLQkgKiBwbGVhc2UgdGVzdCB0aGUgTk1JIHN0dWZmIHRoZXJlIGFuZCBzZW5kIG1lIHRoZQotCSAqIG1pc3NpbmcgYml0cy4gUmlnaHQgbm93IEludGVsIFA2L1A0IGFuZCBBTUQgSzcgb25seS4KLQkgKi8KLQlpZiAoKG5taSA9PSBOTUlfTE9DQUxfQVBJQykgJiYgKG5taV9rbm93bl9jcHUoKSA9PSAwKSkKLQkJcmV0dXJuIDA7ICAvKiBubyBsYXBpYyBzdXBwb3J0ICovCisKIAlubWlfd2F0Y2hkb2cgPSBubWk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3BhcmF2aXJ0LmMgYi9hcmNoL2kzODYva2VybmVsL3BhcmF2aXJ0LmMKaW5kZXggM2RjZWFiNS4uZTU1ZmQwNSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wYXJhdmlydC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcGFyYXZpcnQuYwpAQCAtNTY2LDQgKzU2NiwxMSBAQAogCS5pcnFfZW5hYmxlX3N5c2V4aXQgPSBuYXRpdmVfaXJxX2VuYWJsZV9zeXNleGl0LAogCS5pcmV0ID0gbmF0aXZlX2lyZXQsCiB9OwotRVhQT1JUX1NZTUJPTChwYXJhdmlydF9vcHMpOworCisvKgorICogTk9URTogQ09ORklHX1BBUkFWSVJUIGlzIGV4cGVyaW1lbnRhbCBhbmQgdGhlIHBhcmF2aXJ0X29wcworICogc2VtYW50aWNzIGFyZSBzdWJqZWN0IHRvIGNoYW5nZS4gSGVuY2Ugd2Ugb25seSBkbyB0aGlzCisgKiBpbnRlcm5hbC1vbmx5IGV4cG9ydCBvZiB0aGlzLCB1bnRpbCBpdCBnZXRzIHNvcnRlZCBvdXQgYW5kCisgKiBhbGwgbG93bGV2ZWwgQ1BVIG9wcyB1c2VkIGJ5IG1vZHVsZXMgYXJlIHNlcGFyYXRlbHkgZXhwb3J0ZWQuCisgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKHBhcmF2aXJ0X29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDk5MzA4NTEuLmM2NDEwNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMDIsNyArMTAyLDEyIEBACiB7CiAJaWYgKCFobHRfY291bnRlciAmJiBib290X2NwdV9kYXRhLmhsdF93b3Jrc19vaykgewogCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKLQkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJLyoKKwkJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UKKwkJICogdGVzdCBORUVEX1JFU0NIRUQ6CisJCSAqLworCQlzbXBfbWIoKTsKKwogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQogCQkJc2FmZV9oYWx0KCk7CS8qIGVuYWJsZXMgaW50ZXJydXB0cyByYWNlbGVzc2x5ICovCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCBmM2Y5NGFjLi5hZjhhYWJlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIC8qCiAgKiBPZmZzZXQgb2YgZWZsYWdzIG9uIGNoaWxkIHN0YWNrLi4KICAqLwotI2RlZmluZSBFRkxfT0ZGU0VUICgoRUZMLTIpKjQtc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkKKyNkZWZpbmUgRUZMX09GRlNFVCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZWZsYWdzKQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwdF9yZWdzICpnZXRfY2hpbGRfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CkBAIC01NCwyNCArNTQsMjQgQEAKIH0KIAogLyoKLSAqIHRoaXMgcm91dGluZSB3aWxsIGdldCBhIHdvcmQgb2ZmIG9mIHRoZSBwcm9jZXNzZXMgcHJpdmlsZWdlZCBzdGFjay4gCi0gKiB0aGUgb2Zmc2V0IGlzIGhvdyBmYXIgZnJvbSB0aGUgYmFzZSBhZGRyIGFzIHN0b3JlZCBpbiB0aGUgVFNTLiAgCi0gKiB0aGlzIHJvdXRpbmUgYXNzdW1lcyB0aGF0IGFsbCB0aGUgcHJpdmlsZWdlZCBzdGFja3MgYXJlIGluIG91cgorICogVGhpcyByb3V0aW5lIHdpbGwgZ2V0IGEgd29yZCBvZmYgb2YgdGhlIHByb2Nlc3NlcyBwcml2aWxlZ2VkIHN0YWNrLgorICogdGhlIG9mZnNldCBpcyBieXRlcyBpbnRvIHRoZSBwdF9yZWdzIHN0cnVjdHVyZSBvbiB0aGUgc3RhY2suCisgKiBUaGlzIHJvdXRpbmUgYXNzdW1lcyB0aGF0IGFsbCB0aGUgcHJpdmlsZWdlZCBzdGFja3MgYXJlIGluIG91cgogICogZGF0YSBzcGFjZS4KICAqLyAgIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X3N0YWNrX2xvbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgb2Zmc2V0KQogewogCXVuc2lnbmVkIGNoYXIgKnN0YWNrOwogCi0Jc3RhY2sgPSAodW5zaWduZWQgY2hhciAqKXRhc2stPnRocmVhZC5lc3AwOworCXN0YWNrID0gKHVuc2lnbmVkIGNoYXIgKil0YXNrLT50aHJlYWQuZXNwMCAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncyk7CiAJc3RhY2sgKz0gb2Zmc2V0OwogCXJldHVybiAoKigoaW50ICopc3RhY2spKTsKIH0KIAogLyoKLSAqIHRoaXMgcm91dGluZSB3aWxsIHB1dCBhIHdvcmQgb24gdGhlIHByb2Nlc3NlcyBwcml2aWxlZ2VkIHN0YWNrLiAKLSAqIHRoZSBvZmZzZXQgaXMgaG93IGZhciBmcm9tIHRoZSBiYXNlIGFkZHIgYXMgc3RvcmVkIGluIHRoZSBUU1MuICAKLSAqIHRoaXMgcm91dGluZSBhc3N1bWVzIHRoYXQgYWxsIHRoZSBwcml2aWxlZ2VkIHN0YWNrcyBhcmUgaW4gb3VyCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBwdXQgYSB3b3JkIG9uIHRoZSBwcm9jZXNzZXMgcHJpdmlsZWdlZCBzdGFjay4KKyAqIHRoZSBvZmZzZXQgaXMgYnl0ZXMgaW50byB0aGUgcHRfcmVncyBzdHJ1Y3R1cmUgb24gdGhlIHN0YWNrLgorICogVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCBhbGwgdGhlIHByaXZpbGVnZWQgc3RhY2tzIGFyZSBpbiBvdXIKICAqIGRhdGEgc3BhY2UuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHB1dF9zdGFja19sb25nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IG9mZnNldCwKQEAgLTc5LDcgKzc5LDcgQEAKIHsKIAl1bnNpZ25lZCBjaGFyICogc3RhY2s7CiAKLQlzdGFjayA9ICh1bnNpZ25lZCBjaGFyICopIHRhc2stPnRocmVhZC5lc3AwOworCXN0YWNrID0gKHVuc2lnbmVkIGNoYXIgKil0YXNrLT50aHJlYWQuZXNwMCAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncyk7CiAJc3RhY2sgKz0gb2Zmc2V0OwogCSoodW5zaWduZWQgbG9uZyAqKSBzdGFjayA9IGRhdGE7CiAJcmV0dXJuIDA7CkBAIC0xMTQsNyArMTE0LDcgQEAKIAl9CiAJaWYgKHJlZ25vID4gRVMqNCkKIAkJcmVnbm8gLT0gMSo0OwotCXB1dF9zdGFja19sb25nKGNoaWxkLCByZWdubyAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncyksIHZhbHVlKTsKKwlwdXRfc3RhY2tfbG9uZyhjaGlsZCwgcmVnbm8sIHZhbHVlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM3LDcgKzEzNyw2IEBACiAJCWRlZmF1bHQ6CiAJCQlpZiAocmVnbm8gPiBFUyo0KQogCQkJCXJlZ25vIC09IDEqNDsKLQkJCXJlZ25vID0gcmVnbm8gLSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpOwogCQkJcmV0dmFsICY9IGdldF9zdGFja19sb25nKGNoaWxkLCByZWdubyk7CiAJfQogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3F1aXJrcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9xdWlya3MuYwppbmRleCBhMDEzMjBhLi4zNDg3NGMzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3F1aXJrcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcXVpcmtzLmMKQEAgLTEwLDEzICsxMCwzOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9JT19BUElDKSAmJiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX1BDSSkKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB2ZXJpZnlfcXVpcmtfaW50ZWxfaXJxYmFsYW5jZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogeworCXU4IGNvbmZpZywgcmV2OworCXUzMiB3b3JkOworCisJLyogQklPUyBtYXkgZW5hYmxlIGhhcmR3YXJlIElSUSBiYWxhbmNpbmcgZm9yCisJICogRTc1MjAvRTczMjAvRTc1MjUocmV2aXNpb24gSUQgMHg5IGFuZCBiZWxvdykKKwkgKiBiYXNlZCBwbGF0Zm9ybXMuCisJICogRm9yIHRob3NlIHBsYXRmb3JtcywgbWFrZSBzdXJlIHRoYXQgdGhlIGdlbmFwaWMgaXMgc2V0IHRvICdmbGF0JworCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmcmV2KTsKKwlpZiAocmV2ID4gMHg5KQorCQlyZXR1cm47CisKKwkvKiBlbmFibGUgYWNjZXNzIHRvIGNvbmZpZyBzcGFjZSovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweGY0LCAmY29uZmlnKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweGY0LCBjb25maWd8MHgyKTsKKworCS8qIHJlYWQgeFRQUiByZWdpc3RlciAqLworCXJhd19wY2lfb3BzLT5yZWFkKDAsIDAsIDB4NDAsIDB4NGMsIDIsICZ3b3JkKTsKKworCWlmICghKHdvcmQgJiAoMSA8PCAxMykpKSB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCWlmIChnZW5hcGljICE9ICAmYXBpY19mbGF0KQotCQlwYW5pYygiQVBJQyBtb2RlIG11c3QgYmUgZmxhdCBvbiB0aGlzIHN5c3RlbVxuIik7CisJCWlmIChnZW5hcGljICE9ICAmYXBpY19mbGF0KQorCQkJcGFuaWMoIkFQSUMgbW9kZSBtdXN0IGJlIGZsYXQgb24gdGhpcyBzeXN0ZW1cbiIpOwogI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2X0dFTkVSSUNBUkNIKQotCWlmIChnZW5hcGljICE9ICZhcGljX2RlZmF1bHQpCi0JCXBhbmljKCJBUElDIG1vZGUgbXVzdCBiZSBkZWZhdWx0KGZsYXQpIG9uIHRoaXMgc3lzdGVtLiBVc2UgYXBpYz1kZWZhdWx0XG4iKTsKKwkJaWYgKGdlbmFwaWMgIT0gJmFwaWNfZGVmYXVsdCkKKwkJCXBhbmljKCJBUElDIG1vZGUgbXVzdCBiZSBkZWZhdWx0KGZsYXQpIG9uIHRoaXMgc3lzdGVtLiBVc2UgYXBpYz1kZWZhdWx0XG4iKTsKICNlbmRpZgorCX0KKworCS8qIHB1dCBiYWNrIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgY29uZmlnIHNwYWNlKi8KKwlpZiAoIShjb25maWcgJiAweDIpKQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweGY0LCBjb25maWcpOwogfQogCiB2b2lkIF9faW5pdCBxdWlya19pbnRlbF9pcnFiYWxhbmNlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NldHVwLmMgYi9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKaW5kZXggNzlkZjZlNi4uNGIzMWFkNyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtNzcsNyArNzcsNyBAQAogZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBkYXRhX3Jlc291cmNlOwogCiAvKiBjcHUgZGF0YSBhcyBkZXRlY3RlZCBieSB0aGUgYXNzZW1ibHkgY29kZSBpbiBoZWFkLlMgKi8KLXN0cnVjdCBjcHVpbmZvX3g4NiBuZXdfY3B1X2RhdGEgX19pbml0ZGF0YSA9IHsgMCwgMCwgMCwgMCwgLTEsIDEsIDAsIDAsIC0xIH07CitzdHJ1Y3QgY3B1aW5mb194ODYgbmV3X2NwdV9kYXRhIF9fY3B1aW5pdGRhdGEgPSB7IDAsIDAsIDAsIDAsIC0xLCAxLCAwLCAwLCAtMSB9OwogLyogY29tbW9uIGNwdSBkYXRhIGZvciBhbGwgY3B1cyAqLwogc3RydWN0IGNwdWluZm9feDg2IGJvb3RfY3B1X2RhdGEgX19yZWFkX21vc3RseSA9IHsgMCwgMCwgMCwgMCwgLTEsIDEsIDAsIDAsIC0xIH07CiBFWFBPUlRfU1lNQk9MKGJvb3RfY3B1X2RhdGEpOwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAjZW5kaWYKIAogLyogT3ZlcnJpZGRlbiBpbiBwYXJhdmlydC5jIGlmIENPTkZJR19QQVJBVklSVCAqLwotY2hhciAqIF9fYXR0cmlidXRlX18oKHdlYWspKSBtZW1vcnlfc2V0dXAodm9pZCkKK2NoYXIgKiBfX2luaXQgX19hdHRyaWJ1dGVfXygod2VhaykpIG1lbW9yeV9zZXR1cCh2b2lkKQogewogCXJldHVybiBtYWNoaW5lX3NwZWNpZmljX21lbW9yeV9zZXR1cCgpOwogfQpAQCAtNjM5LDcgKzYzOSw3IEBACiAJCWdldF9zbXBfY29uZmlnKCk7CiAjZW5kaWYKIAotCXJlZ2lzdGVyX21lbW9yeSgpOworCWU4MjBfcmVnaXN0ZXJfbWVtb3J5KCk7CiAKICNpZmRlZiBDT05GSUdfVlQKICNpZiBkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggNGJmMGUzYy4uOGM2YzhjNSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKQEAgLTY5LDkgKzY5LDcgQEAKIAogLyogTnVtYmVyIG9mIHNpYmxpbmdzIHBlciBDUFUgcGFja2FnZSAqLwogaW50IHNtcF9udW1fc2libGluZ3MgPSAxOwotI2lmZGVmIENPTkZJR19YODZfSFQKIEVYUE9SVF9TWU1CT0woc21wX251bV9zaWJsaW5ncyk7Ci0jZW5kaWYKIAogLyogTGFzdCBsZXZlbCBjYWNoZSBJRCBvZiBlYWNoIGxvZ2ljYWwgQ1BVICovCiBpbnQgY3B1X2xsY19pZFtOUl9DUFVTXSBfX2NwdWluaXRkYXRhID0ge1swIC4uLiBOUl9DUFVTLTFdID0gQkFEX0FQSUNJRH07CkBAIC0xNjEsNyArMTU5LDcgQEAKICAqIGEgZ2l2ZW4gQ1BVCiAgKi8KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQgaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgc21wX3N0b3JlX2NwdV9pbmZvKGludCBpZCkKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YSArIGlkOwogCkBAIC0yMjksNyArMjI3LDcgQEAKIAlhdG9taWNfdCBjb3VudF9zdGFydDsKIAlhdG9taWNfdCBjb3VudF9zdG9wOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZXNbTlJfQ1BVU107Ci19IHRzYyBfX2luaXRkYXRhID0geworfSB0c2MgX19jcHVpbml0ZGF0YSA9IHsKIAkuc3RhcnRfZmxhZyA9IEFUT01JQ19JTklUKDApLAogCS5jb3VudF9zdGFydCA9IEFUT01JQ19JTklUKDApLAogCS5jb3VudF9zdG9wID0gQVRPTUlDX0lOSVQoMCksCkBAIC0zMzQsNyArMzMyLDcgQEAKIAkJcHJpbnRrKCJwYXNzZWQuXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHN5bmNocm9uaXplX3RzY19hcCh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHN5bmNocm9uaXplX3RzY19hcCh2b2lkKQogewogCWludCBpOwogCkBAIC0zNjYsNyArMzY0LDcgQEAKIAogc3RhdGljIGF0b21pY190IGluaXRfZGVhc3NlcnRlZDsKIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHNtcF9jYWxsaW4odm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBzbXBfY2FsbGluKHZvaWQpCiB7CiAJaW50IGNwdWlkLCBwaHlzX2lkOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKQEAgLTU0MCw3ICs1MzgsNyBAQAogLyoKICAqIEFjdGl2YXRlIGEgc2Vjb25kYXJ5IHByb2Nlc3Nvci4KICAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHN0YXJ0X3NlY29uZGFyeSh2b2lkICp1bnVzZWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgc3RhcnRfc2Vjb25kYXJ5KHZvaWQgKnVudXNlZCkKIHsKIAkvKgogCSAqIERvbid0IHB1dCAqYW55dGhpbmcqIGJlZm9yZSBzZWNvbmRhcnlfY3B1X2luaXQoKSwgU01QCkBAIC01OTgsNiArNTk2LDEyIEBACiB2b2lkIF9fZGV2aW5pdCBpbml0aWFsaXplX3NlY29uZGFyeSh2b2lkKQogewogCS8qCisJICogc3dpdGNoIHRvIHRoZSBwZXIgQ1BVIEdEVCB3ZSBhbHJlYWR5IHNldCB1cAorCSAqIGluIGRvX2Jvb3RfY3B1KCkKKwkgKi8KKwljcHVfc2V0X2dkdChjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSk7CisKKwkvKgogCSAqIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gbG9hZCB0aGUgZnVsbCBUU1MsCiAJICogYmFzaWNhbGx5IGp1c3QgdGhlIHN0YWNrIHBvaW50ZXIgYW5kIHRoZSBlaXAuCiAJICovCkBAIC05MzMsNyArOTM3LDcgQEAKICNkZWZpbmUgYWxsb2NfaWRsZV90YXNrKGNwdSkgZm9ya19pZGxlKGNwdSkKICNlbmRpZgogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkb19ib290X2NwdShpbnQgYXBpY2lkLCBpbnQgY3B1KQorc3RhdGljIGludCBfX2NwdWluaXQgZG9fYm9vdF9jcHUoaW50IGFwaWNpZCwgaW50IGNwdSkKIC8qCiAgKiBOT1RFIC0gb24gbW9zdCBzeXN0ZW1zIHRoaXMgaXMgYSBQSFlTSUNBTCBhcGljIElELCBidXQgb24gbXVsdGlxdWFkCiAgKiAoaWUgY2x1c3RlcmVkIGFwaWMgYWRkcmVzc2luZyBtb2RlKSwgdGhpcyBpcyBhIExPR0lDQUwgYXBpYyBJRC4KQEAgLTk3NCw5ICs5NzgsNiBAQAogCS8qIFN0YWNrIGZvciBzdGFydHVwXzMyIGNhbiBiZSBqdXN0IGFzIGZvciBzdGFydF9zZWNvbmRhcnkgb253YXJkcyAqLwogCXN0YWNrX3N0YXJ0LmVzcCA9ICh2b2lkICopIGlkbGUtPnRocmVhZC5lc3A7CiAKLQlzdGFydF9wZGEgPSBjcHVfcGRhKGNwdSk7Ci0JY3B1X2dkdF9kZXNjciA9IHBlcl9jcHUoY3B1X2dkdF9kZXNjciwgY3B1KTsKLQogCWlycV9jdHhfaW5pdChjcHUpOwogCiAJeDg2X2NwdV90b19hcGljaWRbY3B1XSA9IGFwaWNpZDsKQEAgLTExMTgsNyArMTExOSw3IEBACiAKIAkvKiBpbml0IGxvdyBtZW0gbWFwcGluZyAqLwogCWNsb25lX3BnZF9yYW5nZShzd2FwcGVyX3BnX2Rpciwgc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BHRF9QVFJTLAotCQkJS0VSTkVMX1BHRF9QVFJTKTsKKwkJCW1pbl90KHVuc2lnbmVkIGxvbmcsIEtFUk5FTF9QR0RfUFRSUywgVVNFUl9QR0RfUFRSUykpOwogCWZsdXNoX3RsYl9hbGwoKTsKIAlzY2hlZHVsZV93b3JrKCZpbmZvLnRhc2spOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOwpAQCAtMTQzNCw3ICsxNDM1LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotaW50IF9fZGV2aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQoraW50IF9fY3B1aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQogewogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCWludCByZXQ9MDsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc3lzZW50ZXIuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc3lzZW50ZXIuYwppbmRleCA3ZGU5MTE3Li41ZGE3NDQyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3N5c2VudGVyLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zeXNlbnRlci5jCkBAIC03OSwxMSArNzksNiBAQAogI2lmZGVmIENPTkZJR19DT01QQVRfVkRTTwogCV9fc2V0X2ZpeG1hcChGSVhfVkRTTywgX19wYShzeXNjYWxsX3BhZ2UpLCBQQUdFX1JFQURPTkxZKTsKIAlwcmludGsoIkNvbXBhdCB2RFNPIG1hcHBlZCB0byAlMDhseC5cbiIsIF9fZml4X3RvX3ZpcnQoRklYX1ZEU08pKTsKLSNlbHNlCi0JLyoKLQkgKiBJbiB0aGUgbm9uLWNvbXBhdCBjYXNlIHRoZSBFTEYgY29yZWR1bXBpbmcgY29kZSBuZWVkcyB0aGUgZml4bWFwOgotCSAqLwotCV9fc2V0X2ZpeG1hcChGSVhfVkRTTywgX19wYShzeXNjYWxsX3BhZ2UpLCBQQUdFX0tFUk5FTF9STyk7CiAjZW5kaWYKIAogCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFUCkpIHsKQEAgLTEwMCw2ICs5NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZm5kZWYgQ09ORklHX0NPTVBBVF9WRFNPCiBzdGF0aWMgc3RydWN0IHBhZ2UgKnN5c2NhbGxfbm9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRyLCBpbnQgKnR5cGUpCiB7CkBAIC0xNDYsNiArMTQyLDEzIEBACiAJdm1hLT52bV9lbmQgPSBhZGRyICsgUEFHRV9TSVpFOwogCS8qIE1BWVdSSVRFIHRvIGFsbG93IGdkYiB0byBDT1cgYW5kIHNldCBicmVha3BvaW50cyAqLwogCXZtYS0+dm1fZmxhZ3MgPSBWTV9SRUFEfFZNX0VYRUN8Vk1fTUFZUkVBRHxWTV9NQVlFWEVDfFZNX01BWVdSSVRFOworCS8qCisJICogTWFrZSBzdXJlIHRoZSB2RFNPIGdldHMgaW50byBldmVyeSBjb3JlIGR1bXAuCisJICogRHVtcGluZyBpdHMgY29udGVudHMgbWFrZXMgcG9zdC1tb3J0ZW0gZnVsbHkgaW50ZXJwcmV0YWJsZSBsYXRlcgorCSAqIHdpdGhvdXQgbWF0Y2hpbmcgdXAgdGhlIHNhbWUga2VybmVsIGFuZCBoYXJkd2FyZSBjb25maWcgdG8gc2VlCisJICogd2hhdCBQQyB2YWx1ZXMgbWVhbnQuCisJICovCisJdm1hLT52bV9mbGFncyB8PSBWTV9BTFdBWVNEVU1QOwogCXZtYS0+dm1fZmxhZ3MgfD0gbW0tPmRlZl9mbGFnczsKIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IHByb3RlY3Rpb25fbWFwW3ZtYS0+dm1fZmxhZ3MgJiA3XTsKIAl2bWEtPnZtX29wcyA9ICZzeXNjYWxsX3ZtX29wczsKQEAgLTE4NywzICsxOTAsNCBAQAogewogCXJldHVybiAwOwogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RyYW1wb2xpbmUuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhbXBvbGluZS5TCmluZGV4IGZjY2UwZTYuLjJmMTgxNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhbXBvbGluZS5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhbXBvbGluZS5TCkBAIC0zOCw2ICszOCwxMSBAQAogCiAuZGF0YQogCisvKiBXZSBjYW4gZnJlZSB1cCB0cmFtcG9saW5lIGFmdGVyIGJvb3R1cCBpZiBjcHUgaG90cGx1ZyBpcyBub3Qgc3VwcG9ydGVkLiAqLworI2lmbmRlZiBDT05GSUdfSE9UUExVR19DUFUKKy5zZWN0aW9uICIuaW5pdC5kYXRhIiwiYXciLEBwcm9nYml0cworI2VuZGlmCisKIC5jb2RlMTYKIAogRU5UUlkodHJhbXBvbGluZV9kYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCmluZGV4IDY4ZGU0OGUuLjBlZmFkOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC91bndpbmQuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAKICNpZmRlZiBDT05GSUdfRUlTQQogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpAQCAtOTMsMTEgKzk0LDYgQEAKIGFzbWxpbmthZ2Ugdm9pZCBtYWNoaW5lX2NoZWNrKHZvaWQpOwogCiBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMjQ7Ci0jaWZkZWYgQ09ORklHX1NUQUNLX1VOV0lORAotc3RhdGljIGludCBjYWxsX3RyYWNlID0gMTsKLSNlbHNlCi0jZGVmaW5lIGNhbGxfdHJhY2UgKC0xKQotI2VuZGlmCiBBVE9NSUNfTk9USUZJRVJfSEVBRChpMzg2ZGllX2NoYWluKTsKIAogaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQpAQCAtMTUxLDMzICsxNDcsNiBAQAogCXJldHVybiBlYnA7CiB9CiAKLXN0cnVjdCBvcHNfYW5kX2RhdGEgewotCXN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzOwotCXZvaWQgKmRhdGE7Ci19OwotCi1zdGF0aWMgYXNtbGlua2FnZSBpbnQKLWR1bXBfdHJhY2VfdW53aW5kKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qgb3BzX2FuZF9kYXRhICpvYWQgPSAoc3RydWN0IG9wc19hbmRfZGF0YSAqKWRhdGE7Ci0JaW50IG4gPSAwOwotCXVuc2lnbmVkIGxvbmcgc3AgPSBVTldfU1AoaW5mbyk7Ci0KLQlpZiAoYXJjaF91bndfdXNlcl9tb2RlKGluZm8pKQotCQlyZXR1cm4gLTE7Ci0Jd2hpbGUgKHVud2luZChpbmZvKSA9PSAwICYmIFVOV19QQyhpbmZvKSkgewotCQluKys7Ci0JCW9hZC0+b3BzLT5hZGRyZXNzKG9hZC0+ZGF0YSwgVU5XX1BDKGluZm8pKTsKLQkJaWYgKGFyY2hfdW53X3VzZXJfbW9kZShpbmZvKSkKLQkJCWJyZWFrOwotCQlpZiAoKHNwICYgfihQQUdFX1NJWkUgLSAxKSkgPT0gKFVOV19TUChpbmZvKSAmIH4oUEFHRV9TSVpFIC0gMSkpCi0JCSAgICAmJiBzcCA+IFVOV19TUChpbmZvKSkKLQkJCWJyZWFrOwotCQlzcCA9IFVOV19TUChpbmZvKTsKLQl9Ci0JcmV0dXJuIG47Ci19Ci0KICNkZWZpbmUgTVNHKG1zZykgb3BzLT53YXJuaW5nKGRhdGEsIG1zZykKIAogdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCkBAIC0xODksNDEgKzE1OCw2IEBACiAJaWYgKCF0YXNrKQogCQl0YXNrID0gY3VycmVudDsKIAotCWlmIChjYWxsX3RyYWNlID49IDApIHsKLQkJaW50IHVud19yZXQgPSAwOwotCQlzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gaW5mbzsKLQkJc3RydWN0IG9wc19hbmRfZGF0YSBvYWQgPSB7IC5vcHMgPSBvcHMsIC5kYXRhID0gZGF0YSB9OwotCi0JCWlmIChyZWdzKSB7Ci0JCQlpZiAodW53aW5kX2luaXRfZnJhbWVfaW5mbygmaW5mbywgdGFzaywgcmVncykgPT0gMCkKLQkJCQl1bndfcmV0ID0gZHVtcF90cmFjZV91bndpbmQoJmluZm8sICZvYWQpOwotCQl9IGVsc2UgaWYgKHRhc2sgPT0gY3VycmVudCkKLQkJCXVud19yZXQgPSB1bndpbmRfaW5pdF9ydW5uaW5nKCZpbmZvLCBkdW1wX3RyYWNlX3Vud2luZCwKLQkJCQkJCSAgICAgICZvYWQpOwotCQllbHNlIHsKLQkJCWlmICh1bndpbmRfaW5pdF9ibG9ja2VkKCZpbmZvLCB0YXNrKSA9PSAwKQotCQkJCXVud19yZXQgPSBkdW1wX3RyYWNlX3Vud2luZCgmaW5mbywgJm9hZCk7Ci0JCX0KLQkJaWYgKHVud19yZXQgPiAwKSB7Ci0JCQlpZiAoY2FsbF90cmFjZSA9PSAxICYmICFhcmNoX3Vud191c2VyX21vZGUoJmluZm8pKSB7Ci0JCQkJb3BzLT53YXJuaW5nX3N5bWJvbChkYXRhLAotCQkJCQkgICAgICJEV0FSRjIgdW53aW5kZXIgc3R1Y2sgYXQgJXMiLAotCQkJCQkgICAgIFVOV19QQygmaW5mbykpOwotCQkJCWlmIChVTldfU1AoJmluZm8pID49IFBBR0VfT0ZGU0VUKSB7Ci0JCQkJCU1TRygiTGVmdG92ZXIgaW5leGFjdCBiYWNrdHJhY2U6Iik7Ci0JCQkJCXN0YWNrID0gKHZvaWQgKilVTldfU1AoJmluZm8pOwotCQkJCQlpZiAoIXN0YWNrKQotCQkJCQkJcmV0dXJuOwotCQkJCQllYnAgPSBVTldfRlAoJmluZm8pOwotCQkJCX0gZWxzZQotCQkJCQlNU0coIkZ1bGwgaW5leGFjdCBiYWNrdHJhY2UgYWdhaW46Iik7Ci0JCQl9IGVsc2UgaWYgKGNhbGxfdHJhY2UgPj0gMSkKLQkJCQlyZXR1cm47Ci0JCQllbHNlCi0JCQkJTVNHKCJGdWxsIGluZXhhY3QgYmFja3RyYWNlIGFnYWluOiIpOwotCQl9IGVsc2UKLQkJCU1TRygiSW5leGFjdCBiYWNrdHJhY2U6Iik7Ci0JfQogCWlmICghc3RhY2spIHsKIAkJdW5zaWduZWQgbG9uZyBkdW1teTsKIAkJc3RhY2sgPSAmZHVtbXk7CkBAIC00MjAsNDMgKzM1NCwyMiBAQAogCXByaW50aygiXG4iKTsKIH0JCiAKLXN0YXRpYyB2b2lkIGhhbmRsZV9CVUcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitpbnQgaXNfdmFsaWRfYnVnYWRkcih1bnNpZ25lZCBsb25nIGVpcCkKIHsKLQl1bnNpZ25lZCBsb25nIGVpcCA9IHJlZ3MtPmVpcDsKIAl1bnNpZ25lZCBzaG9ydCB1ZDI7CiAKIAlpZiAoZWlwIDwgUEFHRV9PRkZTRVQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJaWYgKHByb2JlX2tlcm5lbF9hZGRyZXNzKCh1bnNpZ25lZCBzaG9ydCAqKWVpcCwgdWQyKSkKLQkJcmV0dXJuOwotCWlmICh1ZDIgIT0gMHgwYjBmKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCi0JcHJpbnRrKEtFUk5fRU1FUkcgIi0tLS0tLS0tLS0tLVsgY3V0IGhlcmUgXS0tLS0tLS0tLS0tLVxuIik7Ci0KLSNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQotCWRvIHsKLQkJdW5zaWduZWQgc2hvcnQgbGluZTsKLQkJY2hhciAqZmlsZTsKLQkJY2hhciBjOwotCi0JCWlmIChwcm9iZV9rZXJuZWxfYWRkcmVzcygodW5zaWduZWQgc2hvcnQgKikoZWlwICsgMiksIGxpbmUpKQotCQkJYnJlYWs7Ci0JCWlmIChwcm9iZV9rZXJuZWxfYWRkcmVzcygoY2hhciAqKikoZWlwICsgNCksIGZpbGUpIHx8Ci0JCSAgICAodW5zaWduZWQgbG9uZylmaWxlIDwgUEFHRV9PRkZTRVQgfHwKLQkJCXByb2JlX2tlcm5lbF9hZGRyZXNzKGZpbGUsIGMpKQotCQkJZmlsZSA9ICI8YmFkIGZpbGVuYW1lPiI7Ci0KLQkJcHJpbnRrKEtFUk5fRU1FUkcgImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBmaWxlLCBsaW5lKTsKLQkJcmV0dXJuOwotCX0gd2hpbGUgKDApOwotI2VuZGlmCi0JcHJpbnRrKEtFUk5fRU1FUkcgIktlcm5lbCBCVUcgYXQgW3ZlcmJvc2UgZGVidWcgaW5mbyB1bmF2YWlsYWJsZV1cbiIpOworCXJldHVybiB1ZDIgPT0gMHgwYjBmOwogfQogCi0vKiBUaGlzIGlzIGdvbmUgdGhyb3VnaCB3aGVuIHNvbWV0aGluZyBpbiB0aGUga2VybmVsCi0gKiBoYXMgZG9uZSBzb21ldGhpbmcgYmFkIGFuZCBpcyBhYm91dCB0byBiZSB0ZXJtaW5hdGVkLgotKi8KKy8qCisgKiBUaGlzIGlzIGdvbmUgdGhyb3VnaCB3aGVuIHNvbWV0aGluZyBpbiB0aGUga2VybmVsIGhhcyBkb25lIHNvbWV0aGluZyBiYWQgYW5kCisgKiBpcyBhYm91dCB0byBiZSB0ZXJtaW5hdGVkLgorICovCiB2b2lkIGRpZShjb25zdCBjaGFyICogc3RyLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyKQogewogCXN0YXRpYyBzdHJ1Y3QgewpAQCAtNDg4LDcgKzQwMSw4IEBACiAJCXVuc2lnbmVkIGxvbmcgZXNwOwogCQl1bnNpZ25lZCBzaG9ydCBzczsKIAotCQloYW5kbGVfQlVHKHJlZ3MpOworCQlyZXBvcnRfYnVnKHJlZ3MtPmVpcCk7CisKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiAlMDRseCBbIyVkXVxuIiwgc3RyLCBlcnIgJiAweGZmZmYsICsrZGllX2NvdW50ZXIpOwogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAJCXByaW50ayhLRVJOX0VNRVJHICJQUkVFTVBUICIpOwpAQCAtMTI3NywxOSArMTE5MSwzIEBACiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJrc3RhY2s9Iiwga3N0YWNrX3NldHVwKTsKLQotI2lmZGVmIENPTkZJR19TVEFDS19VTldJTkQKLXN0YXRpYyBpbnQgX19pbml0IGNhbGxfdHJhY2Vfc2V0dXAoY2hhciAqcykKLXsKLQlpZiAoc3RyY21wKHMsICJvbGQiKSA9PSAwKQotCQljYWxsX3RyYWNlID0gLTE7Ci0JZWxzZSBpZiAoc3RyY21wKHMsICJib3RoIikgPT0gMCkKLQkJY2FsbF90cmFjZSA9IDA7Ci0JZWxzZSBpZiAoc3RyY21wKHMsICJuZXdmYWxsYmFjayIpID09IDApCi0JCWNhbGxfdHJhY2UgPSAxOwotCWVsc2UgaWYgKHN0cmNtcChzLCAibmV3IikgPT0gMikKLQkJY2FsbF90cmFjZSA9IDI7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJjYWxsX3RyYWNlPSIsIGNhbGxfdHJhY2Vfc2V0dXApOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RzYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC90c2MuYwppbmRleCAxYmJlNDVkLi4yY2ZjN2IwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHNjLmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogdW5zaWduZWQgaW50IHRzY19raHo7CiAKLWludCB0c2NfZGlzYWJsZSBfX2NwdWluaXRkYXRhID0gMDsKK2ludCB0c2NfZGlzYWJsZTsKIAogI2lmZGVmIENPTkZJR19YODZfVFNDCiBzdGF0aWMgaW50IF9faW5pdCB0c2Nfc2V0dXAoY2hhciAqc3RyKQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9pMzg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDU2ZTZhZDVjLi5hNTNjOGIxIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0yNiw2ICsyNiw3IEBACiBPVVRQVVRfQVJDSChpMzg2KQogRU5UUlkocGh5c19zdGFydHVwXzMyKQogamlmZmllcyA9IGppZmZpZXNfNjQ7CitfcHJveHlfcGRhID0gMDsKIAogUEhEUlMgewogCXRleHQgUFRfTE9BRCBGTEFHUyg1KTsJLyogUl9FICovCkBAIC01Nyw2ICs1OCw4IEBACiAKICAgUk9EQVRBCiAKKyAgQlVHX1RBQkxFCisKICAgLiA9IEFMSUdOKDQpOwogICAudHJhY2VkYXRhIDogQVQoQUREUigudHJhY2VkYXRhKSAtIExPQURfT0ZGU0VUKSB7CiAgIAlfX3RyYWNlZGF0YV9zdGFydCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC1kZWZhdWx0L3NldHVwLmMgYi9hcmNoL2kzODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKaW5kZXggYzUxMTcwNS4uY2MyZjUxOSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtZGVmYXVsdC9zZXR1cC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvc2V0dXAuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAgKglhbG9uZyB0aGUgTUNBIGJ1cy4gIFVzZSB0aGlzIHRvIGhvb2sgaW50byB0aGF0IGNoYWluIGlmIHlvdSB3aWxsIG5lZWQKICAqCWl0LgogICoqLwotdm9pZCBfX2luaXQgbWNhX25taV9ob29rKHZvaWQpCit2b2lkIG1jYV9ubWlfaG9vayh2b2lkKQogewogCS8qIElmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhlcmUncyBhIHdob2xlIGJ1bmNoIG9mIG90aGVyIHRoaW5ncyB0aGF0CiAJICogd2UgY2FuIGRvIHRvIGNoZWNrIGZvciBOTUkgcHJvYmxlbXMsIGJ1dCB0aGF0J3MgYWxsIEkga25vdyBhYm91dApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYyBiL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMKaW5kZXggMzNkOWY5My4uOGEyMTBmYSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYworKysgYi9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jCkBAIC00NSw3ICs0NSw3IEBACiB9OwogCiAKLXN0YXRpYyBfX2luaXQgaW50IHByb2JlX2JpZ3NtcCh2b2lkKQorc3RhdGljIGludCBwcm9iZV9iaWdzbXAodm9pZCkKIHsgCiAJaWYgKGRlZl90b19iaWdzbXApCiAgICAgICAgIAlkbWlfYmlnc21wID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvZGVmYXVsdC5jIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9kZWZhdWx0LmMKaW5kZXggOTZjMTk4Mi4uODY4NTIwOCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9kZWZhdWx0LmMKKysrIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9kZWZhdWx0LmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC1kZWZhdWx0L21hY2hfbXBwYXJzZS5oPgogCiAvKiBzaG91bGQgYmUgY2FsbGVkIGxhc3QuICovCi1zdGF0aWMgX19pbml0IGludCBwcm9iZV9kZWZhdWx0KHZvaWQpCitzdGF0aWMgaW50IHByb2JlX2RlZmF1bHQodm9pZCkKIHsgCiAJcmV0dXJuIDE7CiB9IApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYyBiL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvZXM3MDAwLmMKaW5kZXggYWExNDRkOC4uYjg5NjNhNSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYworKysgYi9hcmNoL2kzODYvbWFjaC1nZW5lcmljL2VzNzAwMC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtZXM3MDAwL21hY2hfbXBwYXJzZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWVzNzAwMC9tYWNoX3dha2VjcHUuaD4KIAotc3RhdGljIF9faW5pdCBpbnQgcHJvYmVfZXM3MDAwKHZvaWQpCitzdGF0aWMgaW50IHByb2JlX2VzNzAwMCh2b2lkKQogewogCS8qIHByb2JlZCBsYXRlciBpbiBtcHRhYmxlL0FDUEkgaG9va3MgKi8KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMgYi9hcmNoL2kzODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jCmluZGV4IGY3ZTVkNjYuLjc0ODgzY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMKKysrIGIvYXJjaC9pMzg2L21hY2gtZ2VuZXJpYy9zdW1taXQuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXN1bW1pdC9tYWNoX2lwaS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXN1bW1pdC9tYWNoX21wcGFyc2UuaD4KIAotc3RhdGljIF9faW5pdCBpbnQgcHJvYmVfc3VtbWl0KHZvaWQpCitzdGF0aWMgaW50IHByb2JlX3N1bW1pdCh2b2lkKQogeyAKIAkvKiBwcm9iZWQgbGF0ZXIgaW4gbXB0YWJsZS9BQ1BJIGhvb2tzICovCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12aXN3cy9zZXR1cC5jIGIvYXJjaC9pMzg2L21hY2gtdmlzd3Mvc2V0dXAuYwppbmRleCA4ODVjN2NiLi4yMzNlZTIwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12aXN3cy9zZXR1cC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3NldHVwLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+CkBAIC0xNDIsNiArMTQzLDggQEAKIAogdW5zaWduZWQgbG9uZyBzZ2l2d2ZiX21lbV9waHlzOwogdW5zaWduZWQgbG9uZyBzZ2l2d2ZiX21lbV9zaXplOworRVhQT1JUX1NZTUJPTChzZ2l2d2ZiX21lbV9waHlzKTsKK0VYUE9SVF9TWU1CT0woc2dpdndmYl9tZW1fc2l6ZSk7CiAKIGxvbmcgbG9uZyBtZW1fc2l6ZSBfX2luaXRkYXRhID0gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCmluZGV4IDU1NDI4ZTYuLjc0YWVlZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYworKysgYi9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMKQEAgLTc3Myw2ICs3NzMsMTIgQEAKICNlbmRpZgogCiAJLyoKKwkgKiBzd2l0Y2ggdG8gdGhlIHBlciBDUFUgR0RUIHdlIGFscmVhZHkgc2V0IHVwCisJICogaW4gZG9fYm9vdF9jcHUoKQorCSAqLworCWNwdV9zZXRfZ2R0KGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KTsKKworCS8qCiAJICogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBsb2FkIHRoZSBmdWxsIFRTUywKIAkgKiBiYXNpY2FsbHkganVzdCB0aGUgc3RhY2sgcG9pbnRlciBhbmQgdGhlIGVpcC4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9kaXNjb250aWcuYyBiL2FyY2gvaTM4Ni9tbS9kaXNjb250aWcuYwppbmRleCAxMDNiNzZlLi5lMGMzOTBkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vZGlzY29udGlnLmMKKysrIGIvYXJjaC9pMzg2L21tL2Rpc2NvbnRpZy5jCkBAIC00MDUsMyArNDA1LDMxIEBACiAJdG90YWxyYW1fcGFnZXMgKz0gdG90YWxoaWdoX3BhZ2VzOwogI2VuZGlmCiB9CisKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKK2ludCBwYWRkcl90b19uaWQodTY0IGFkZHIpCit7CisJaW50IG5pZDsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IFBGTl9ET1dOKGFkZHIpOworCisJZm9yX2VhY2hfbm9kZShuaWQpCisJCWlmIChub2RlX3N0YXJ0X3BmbltuaWRdIDw9IHBmbiAmJgorCQkgICAgcGZuIDwgbm9kZV9lbmRfcGZuW25pZF0pCisJCQlyZXR1cm4gbmlkOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFzayBub2RlIGlkIEJFRk9SRSBtZW1tYXAgYW5kIG1lbV9zZWN0aW9uJ3MKKyAqIGluaXRpYWxpemF0aW9uIChwZm5fdG9fbmlkKCkgY2FuJ3QgYmUgdXNlZCB5ZXQpLgorICogSWYgX1BYTSBpcyBub3QgZGVmaW5lZCBvbiBBQ1BJJ3MgRFNEVCwgbm9kZSBpZCBtdXN0IGJlIGZvdW5kIGJ5IHRoaXMuCisgKi8KK2ludCBtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZCh1NjQgYWRkcikKK3sKKwlpbnQgbmlkID0gcGFkZHJfdG9fbmlkKGFkZHIpOworCXJldHVybiAobmlkID49IDApID8gbmlkIDogMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwobWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vaW5pdC5jIGIvYXJjaC9pMzg2L21tL2luaXQuYwppbmRleCA4NDY5N2RmLi5jNWM1ZWE3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vaW5pdC5jCisrKyBiL2FyY2gvaTM4Ni9tbS9pbml0LmMKQEAgLTI4Myw3ICsyODMsNyBAQAogCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7CiB9CiAKLXN0YXRpYyBpbnQgYWRkX29uZV9oaWdocGFnZV9ob3RwbHVnKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbikKK3N0YXRpYyBpbnQgX19tZW1pbml0IGFkZF9vbmVfaGlnaHBhZ2VfaG90cGx1ZyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJZnJlZV9uZXdfaGlnaHBhZ2UocGFnZSk7CiAJdG90YWxyYW1fcGFnZXMrKzsKQEAgLTMwMCw3ICszMDAsNyBAQAogICogaGFzIGJlZW4gYWRkZWQgZHluYW1pY2FsbHkgdGhhdCB3b3VsZCBiZQogICogb25saW5lZCBoZXJlIGlzIGluIEhJR0hNRU0KICAqLwotdm9pZCBvbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3ZvaWQgX19tZW1pbml0IG9ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwogCWFkZF9vbmVfaGlnaHBhZ2VfaG90cGx1ZyhwYWdlLCBwYWdlX3RvX3BmbihwYWdlKSk7CkBAIC02NzMsMTYgKzY3MywxMCBAQAogI2VuZGlmCiB9CiAKLS8qCi0gKiB0aGlzIGlzIGZvciB0aGUgbm9uLU5VTUEsIHNpbmdsZSBub2RlIFNNUCBzeXN0ZW0gY2FzZS4KLSAqIFNwZWNpZmljYWxseSwgaW4gdGhlIGNhc2Ugb2YgeDg2LCB3ZSB3aWxsIGFsd2F5cyBhZGQKLSAqIG1lbW9yeSB0byB0aGUgaGlnaG1lbSBmb3Igbm93LgotICovCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCi0jaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUpCiB7Ci0Jc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdGEgPSAmY29udGlnX3BhZ2VfZGF0YTsKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YSA9IE5PREVfREFUQShuaWQpOwogCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXRhLT5ub2RlX3pvbmVzICsgWk9ORV9ISUdITUVNOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwpAQCAtNjk0LDcgKzY4OCw3IEBACiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci0jZW5kaWYKK0VYUE9SVF9TWU1CT0xfR1BMKHJlbW92ZV9tZW1vcnkpOwogI2VuZGlmCiAKIHN0cnVjdCBrbWVtX2NhY2hlICpwZ2RfY2FjaGU7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2ZpeHVwLmMgYi9hcmNoL2kzODYvcGNpL2ZpeHVwLmMKaW5kZXggY2RlMTE3MC4uODA1M2IxNyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9maXh1cC5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvZml4dXAuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAjZGVmaW5lIFZJQV84MzYzX0tMMTMzX1JFVklTSU9OX0lEIDB4ODEKICNkZWZpbmUgVklBXzgzNjNfS00xMzNfUkVWSVNJT05fSUQgMHg4NAogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX2ZpeHVwX3ZpYV9ub3J0aGJyaWRnZV9idWcoc3RydWN0IHBjaV9kZXYgKmQpCitzdGF0aWMgdm9pZCBwY2lfZml4dXBfdmlhX25vcnRoYnJpZGdlX2J1ZyhzdHJ1Y3QgcGNpX2RldiAqZCkKIHsKIAl1OCB2OwogCXU4IHJldmlzaW9uOwpAQCAtMTUxLDYgKzE1MSwxMCBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84NjIyLCBwY2lfZml4dXBfdmlhX25vcnRoYnJpZGdlX2J1Zyk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgzNjEsIHBjaV9maXh1cF92aWFfbm9ydGhicmlkZ2VfYnVnKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODM2N18wLCBwY2lfZml4dXBfdmlhX25vcnRoYnJpZGdlX2J1Zyk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgzNjNfMCwgcGNpX2ZpeHVwX3ZpYV9ub3J0aGJyaWRnZV9idWcpOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84NjIyLCBwY2lfZml4dXBfdmlhX25vcnRoYnJpZGdlX2J1Zyk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgzNjEsIHBjaV9maXh1cF92aWFfbm9ydGhicmlkZ2VfYnVnKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODM2N18wLCBwY2lfZml4dXBfdmlhX25vcnRoYnJpZGdlX2J1Zyk7CiAKIC8qCiAgKiBGb3Igc29tZSByZWFzb25zIEludGVsIGRlY2lkZWQgdGhhdCBjZXJ0YWluIHBhcnRzIG9mIHRoZWlyCkBAIC0xODEsNyArMTg1LDcgQEAKICAqIGlzc3VlIGFub3RoZXIgSEFMVCB3aXRoaW4gODAgbnMgb2YgdGhlIGluaXRpYWwgSEFMVCwgdGhlIGZhaWx1cmUgY29uZGl0aW9uCiAgKiBpcyBhdm9pZGVkLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpX2ZpeHVwX25mb3JjZTIoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIHBjaV9maXh1cF9uZm9yY2UyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTMyIHZhbDsKIApAQCAtMjA0LDYgKzIwOCw3IEBACiAJfQogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyLCBwY2lfZml4dXBfbmZvcmNlMik7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTIsIHBjaV9maXh1cF9uZm9yY2UyKTsKIAogLyogTWF4IFBDSSBFeHByZXNzIHJvb3QgcG9ydHMgKi8KICNkZWZpbmUgTUFYX1BDSUVST09UCTYKQEAgLTQxOSw3ICs0MjQsNyBAQAogICogUHJldmVudCB0aGUgQklPUyB0cmFwcGluZyBhY2Nlc3NlcyB0byB0aGUgQ3lyaXggQ1M1NTMwQSB2aWRlbyBkZXZpY2UKICAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuCiAgKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfZWFybHlfZml4dXBfY3lyaXhfNTUzMChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcGNpX2Vhcmx5X2ZpeHVwX2N5cml4XzU1MzAoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1OCByOwogCS8qIGNsZWFyICdGNCBWaWRlbyBDb25maWd1cmF0aW9uIFRyYXAnIGJpdCAqLwpAQCAtNDI5LDMgKzQzNCw1IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZLAogCQkJcGNpX2Vhcmx5X2ZpeHVwX2N5cml4XzU1MzApOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FKFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9MRUdBQ1ksCisJCQlwY2lfZWFybHlfZml4dXBfY3lyaXhfNTUzMCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMgYi9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMKaW5kZXggYzZiNmQ5Yi4uZTI2MTZhMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYwpAQCAtMjYsNiArMjYsNyBAQAogCiAvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBsYXN0IE1NQ09ORklHIGRldmljZSBhY2Nlc3NlZCAqLwogc3RhdGljIHUzMiBtbWNmZ19sYXN0X2FjY2Vzc2VkX2RldmljZTsKK3N0YXRpYyBpbnQgbW1jZmdfbGFzdF9hY2Nlc3NlZF9jcHU7CiAKIHN0YXRpYyBERUNMQVJFX0JJVE1BUChmYWxsYmFja19zbG90cywgTUFYX0NIRUNLX0JVUyozMik7CiAKQEAgLTczLDggKzc0LDExIEBACiBzdGF0aWMgdm9pZCBwY2lfZXhwX3NldF9kZXZfYmFzZSh1bnNpZ25lZCBpbnQgYmFzZSwgaW50IGJ1cywgaW50IGRldmZuKQogewogCXUzMiBkZXZfYmFzZSA9IGJhc2UgfCAoYnVzIDw8IDIwKSB8IChkZXZmbiA8PCAxMik7Ci0JaWYgKGRldl9iYXNlICE9IG1tY2ZnX2xhc3RfYWNjZXNzZWRfZGV2aWNlKSB7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpZiAoZGV2X2Jhc2UgIT0gbW1jZmdfbGFzdF9hY2Nlc3NlZF9kZXZpY2UgfHwKKwkgICAgY3B1ICE9IG1tY2ZnX2xhc3RfYWNjZXNzZWRfY3B1KSB7CiAJCW1tY2ZnX2xhc3RfYWNjZXNzZWRfZGV2aWNlID0gZGV2X2Jhc2U7CisJCW1tY2ZnX2xhc3RfYWNjZXNzZWRfY3B1ID0gY3B1OwogCQlzZXRfZml4bWFwX25vY2FjaGUoRklYX1BDSUVfTUNGRywgZGV2X2Jhc2UpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggNzVkODM5Ny4uZmNhY2ZlMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTM0LDYgKzM0LDE0IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0CisJYm9vbAorCWRlZmF1bHQgbgorCiBjb25maWcgR0VORVJJQ19GSU5EX05FWFRfQklUCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYyBiL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMKaW5kZXggMWYxNmViYjkuLjMyNGVhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYwpAQCAtNDg4LDcgKzQ4OCw3IEBACiAKICNkZWZpbmUgUkVMRVZBTlRfSUZMQUcoaWZsYWcpIChpZmxhZyAmIChJR05CUkt8QlJLSU5UfElHTlBBUnxQQVJNUkt8SU5QQ0spKQogCi1zdGF0aWMgdm9pZCByc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCByc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXVuc2lnbmVkIGludCBjZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYyBiL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKaW5kZXggYTRhNmUxNC4uOTU3NjgxYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYworKysgYi9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCkBAIC0yMzUsNyArMjM1LDcgQEAKIAogCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKIAkJLyogcmVhZCB0aGUgZmlsZSBjb250ZW50cyAqLwotCQlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJCWlmICghaW5vZGUtPmlfZm9wIHx8ICFmaWxlLT5mX29wLT5yZWFkCiAJCSAgICB8fCAoKCpmaWxlLT5mX29wLT5yZWFkKShmaWxlLCAoY2hhciBfX3VzZXIgKikgc3RhcnQsIGVuZCAtIHN0YXJ0LCAmb2ZmKSA8IDApKQogCQl7CkBAIC04MzcsNyArODM3LDcgQEAKIAogCWlmICghaXNfY29uZ3J1ZW50KSB7CiAJCS8qIHJlYWQgdGhlIGZpbGUgY29udGVudHMgKi8KLQkJaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwkJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCQlpZiAoIWlub2RlLT5pX2ZvcCB8fCAhZmlsZS0+Zl9vcC0+cmVhZAogCQkgICAgfHwgKCgqZmlsZS0+Zl9vcC0+cmVhZCkoZmlsZSwgKGNoYXIgX191c2VyICopIHBzdGFydCwgcGVuZCAtIHBzdGFydCwgJnBvZmYpCiAJCQk8IDApKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggOGFlMzg0ZS4uMDk4ZWU2MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw3IEBACiBvYmotJChDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlkpCSs9IG1jYV9yZWNvdmVyeS5vCiBvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubyBqcHJvYmVzLm8KIG9iai0kKENPTkZJR19LRVhFQykJCSs9IG1hY2hpbmVfa2V4ZWMubyByZWxvY2F0ZV9rZXJuZWwubyBjcmFzaC5vCitvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkJKz0gY3Jhc2hfZHVtcC5vCiBvYmotJChDT05GSUdfSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IpCSs9IHVuY2FjaGVkLm8KIG9iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0Lm8KIG9iai0kKENPTkZJR19QQ0lfTVNJKQkJKz0gbXNpX2lhNjQubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwppbmRleCA3M2VmNGE4NS4uMjlmMDVkNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKQEAgLTU5MCw2ICs1OTAsOSBAQAogICovCiBpbnQgYWNwaV9yZWdpc3Rlcl9nc2kodTMyIGdzaSwgaW50IHRyaWdnZXJpbmcsIGludCBwb2xhcml0eSkKIHsKKwlpZiAoYWNwaV9pcnFfbW9kZWwgPT0gQUNQSV9JUlFfTU9ERUxfUExBVEZPUk0pCisJCXJldHVybiBnc2k7CisKIAlpZiAoaGFzXzgyNTkgJiYgZ3NpIDwgMTYpCiAJCXJldHVybiBpc2FfaXJxX3RvX3ZlY3Rvcihnc2kpOwogCkBAIC02MDYsNiArNjA5LDkgQEAKIAogdm9pZCBhY3BpX3VucmVnaXN0ZXJfZ3NpKHUzMiBnc2kpCiB7CisJaWYgKGFjcGlfaXJxX21vZGVsID09IEFDUElfSVJRX01PREVMX1BMQVRGT1JNKQorCQlyZXR1cm47CisKIAlpb3NhcGljX3VucmVnaXN0ZXJfaW50cihnc2kpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL2lhNjQva2VybmVsL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggMDg4ZjEzMC4uMTVjMDhkNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtMjc2LDEyICsyNzYsMTAgQEAKIAogCWRwcmludGsoImFjcGlfY3B1ZnJlcV9jcHVfaW5pdFxuIik7CiAKLQlkYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfYWNwaV9pbyksIEdGUF9LRVJORUwpOworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gKC1FTk9NRU0pOwogCi0JbWVtc2V0KGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvKSk7Ci0KIAlhY3BpX2lvX2RhdGFbY3B1XSA9IGRhdGE7CiAKIAlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9yZWdpc3Rlcl9wZXJmb3JtYW5jZSgmZGF0YS0+YWNwaV9kYXRhLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaC5jCmluZGV4IDBhYWJlZGYuLmJjMmY2NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL2lhNjQva2VybmVsL2NyYXNoLmMKQEAgLTE5LDI5ICsxOSwxMSBAQAogCiAjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9tY2EuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBpbnQga2R1bXBfc3RhdHVzW05SX0NQVVNdOwogYXRvbWljX3Qga2R1bXBfY3B1X2ZyZWV6ZWQ7CiBhdG9taWNfdCBrZHVtcF9pbl9wcm9ncmVzczsKIGludCBrZHVtcF9vbl9pbml0ID0gMTsKLXNzaXplX3QKLWNvcHlfb2xkbWVtX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGNoYXIgKmJ1ZiwKLQkJc2l6ZV90IGNzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IHVzZXJidWYpCi17Ci0Jdm9pZCAgKnZhZGRyOwotCi0JaWYgKCFjc2l6ZSkKLQkJcmV0dXJuIDA7Ci0JdmFkZHIgPSBfX3ZhKHBmbjw8UEFHRV9TSElGVCk7Ci0JaWYgKHVzZXJidWYpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsICh2YWRkciArIG9mZnNldCksIGNzaXplKSkgewotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9IGVsc2UKLQkJbWVtY3B5KGJ1ZiwgKHZhZGRyICsgb2Zmc2V0KSwgY3NpemUpOwotCXJldHVybiBjc2l6ZTsKLX0KIAogc3RhdGljIGlubGluZSBFbGY2NF9Xb3JkCiAqYXBwZW5kX2VsZl9ub3RlKEVsZjY0X1dvcmQgKmJ1ZiwgY2hhciAqbmFtZSwgdW5zaWduZWQgdHlwZSwgdm9pZCAqZGF0YSwKQEAgLTIyNSwxNCArMjA3LDEwIEBACiBzdGF0aWMgaW50CiBtYWNoaW5lX2NyYXNoX3NldHVwKHZvaWQpCiB7Ci0JY2hhciAqZnJvbSA9IHN0cnN0cihzYXZlZF9jb21tYW5kX2xpbmUsICJlbGZjb3JlaGRyPSIpOwogCXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2R1bXBfaW5pdF9ub3RpZmllcl9uYiA9IHsKIAkJLm5vdGlmaWVyX2NhbGwgPSBrZHVtcF9pbml0X25vdGlmaWVyLAogCX07CiAJaW50IHJldDsKLQlpZiAoZnJvbSkKLQkJZWxmY29yZWhkcl9hZGRyID0gbWVtcGFyc2UoZnJvbSsxMSwgJmZyb20pOwotCXNhdmVkX21heF9wZm4gPSAodW5zaWduZWQgbG9uZyktMTsKIAlpZigocmV0ID0gcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZrZHVtcF9pbml0X25vdGlmaWVyX25iKSkgIT0gMCkKIAkJcmV0dXJuIHJldDsKICNpZmRlZiBDT05GSUdfU1lTQ1RMCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2hfZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYjhjOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICoJa2VybmVsL2NyYXNoX2R1bXAuYyAtIE1lbW9yeSBwcmVzZXJ2aW5nIHJlYm9vdCByZWxhdGVkIGNvZGUuCisgKgorICoJQ3JlYXRlZCBieTogU2ltb24gSG9ybWFuIDxob3Jtc0B2ZXJnZS5uZXQuYXU+CisgKglPcmlnaW5hbCBjb2RlIG1vdmVkIGZyb20ga2VybmVsL2NyYXNoLmMKKyAqCU9yaWdpbmFsIGNvZGUgY29tbWVudCBjb3BpZWQgZnJvbSB0aGUgaTM4NiB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKy8qKgorICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgorICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCisgKiBAYnVmOiB0YXJnZXQgbWVtb3J5IGFkZHJlc3MgZm9yIHRoZSBjb3B5OyB0aGlzIGNhbiBiZSBpbiBrZXJuZWwgYWRkcmVzcworICoJc3BhY2Ugb3IgdXNlciBhZGRyZXNzIHNwYWNlIChzZWUgQHVzZXJidWYpCisgKiBAY3NpemU6IG51bWJlciBvZiBieXRlcyB0byBjb3B5CisgKiBAb2Zmc2V0OiBvZmZzZXQgaW4gYnl0ZXMgaW50byB0aGUgcGFnZSAoYmFzZWQgb24gcGZuKSB0byBiZWdpbiB0aGUgY29weQorICogQHVzZXJidWY6IGlmIHNldCwgQGJ1ZiBpcyBpbiB1c2VyIGFkZHJlc3Mgc3BhY2UsIHVzZSBjb3B5X3RvX3VzZXIoKSwKKyAqCW90aGVyd2lzZSBAYnVmIGlzIGluIGtlcm5lbCBhZGRyZXNzIHNwYWNlLCB1c2UgbWVtY3B5KCkuCisgKgorICogQ29weSBhIHBhZ2UgZnJvbSAib2xkbWVtIi4gRm9yIHRoaXMgcGFnZSwgdGhlcmUgaXMgbm8gcHRlIG1hcHBlZAorICogaW4gdGhlIGN1cnJlbnQga2VybmVsLiBXZSBzdGl0Y2ggdXAgYSBwdGUsIHNpbWlsYXIgdG8ga21hcF9hdG9taWMuCisgKgorICogQ2FsbGluZyBjb3B5X3RvX3VzZXIoKSBpbiBhdG9taWMgY29udGV4dCBpcyBub3QgZGVzaXJhYmxlLiBIZW5jZSBmaXJzdAorICogY29weWluZyB0aGUgZGF0YSB0byBhIHByZS1hbGxvY2F0ZWQga2VybmVsIHBhZ2UgYW5kIHRoZW4gY29weWluZyB0byB1c2VyCisgKiBzcGFjZSBpbiBub24tYXRvbWljIGNvbnRleHQuCisgKi8KK3NzaXplX3QKK2NvcHlfb2xkbWVtX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IGNzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IHVzZXJidWYpCit7CisJdm9pZCAgKnZhZGRyOworCisJaWYgKCFjc2l6ZSkKKwkJcmV0dXJuIDA7CisJdmFkZHIgPSBfX3ZhKHBmbjw8UEFHRV9TSElGVCk7CisJaWYgKHVzZXJidWYpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsICh2YWRkciArIG9mZnNldCksIGNzaXplKSkgeworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9IGVsc2UKKwkJbWVtY3B5KGJ1ZiwgKHZhZGRyICsgb2Zmc2V0KSwgY3NpemUpOworCXJldHVybiBjc2l6ZTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKaW5kZXggNTRkNTVlNC4uY2U0OWM4NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCkBAIC0xMjIsNiArMTIyLDkgQEAKIAlmb3IgKGlycT0wOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgewogCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAKKwkJaWYgKGRlc2MtPnN0YXR1cyA9PSBJUlFfRElTQUJMRUQpCisJCQljb250aW51ZTsKKwogCQkvKgogCQkgKiBObyBoYW5kbGluZyBmb3Igbm93LgogCQkgKiBUQkQ6IEltcGxlbWVudCBhIGRpc2FibGUgZnVuY3Rpb24gc28gd2UgY2FuIG5vdwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9qcHJvYmVzLlMgYi9hcmNoL2lhNjQva2VybmVsL2pwcm9iZXMuUwppbmRleCA1Y2Q2MjI2Li42MjE2MzAyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2pwcm9iZXMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2pwcm9iZXMuUwpAQCAtNDUsMTMgKzQ1LDE0IEBACiAgKiB0byB0aGUgY29ycmVjdCBsb2NhdGlvbi4KICAqLwogI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgorI2luY2x1ZGUgPGFzbS1pYTY0L2JyZWFrLmg+CiAKIAkvKgogCSAqIHZvaWQganByb2JlX2JyZWFrKHZvaWQpCiAJICovCiAJLnNlY3Rpb24gLmtwcm9iZXMudGV4dCwgImF4IgogRU5UUlkoanByb2JlX2JyZWFrKQotCWJyZWFrLm0gMHg4MDMwMAorCWJyZWFrLm0gX19JQTY0X0JSRUFLX0pQUk9CRQogRU5EKGpwcm9iZV9icmVhaykKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDc2ZTc3ODkuLjZjYjU2ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC04OCw2ICs4OCw3IEBACiB7CiAJcC0+YWluc24uaW5zdF9mbGFnID0gMDsKIAlwLT5haW5zbi50YXJnZXRfYnJfcmVnID0gMDsKKwlwLT5haW5zbi5zbG90ID0gc2xvdDsKIAogCS8qIENoZWNrIGZvciBCcmVhayBpbnN0cnVjdGlvbgogCSAqIEJpdHMgMzc6NDAgTWFqb3Igb3Bjb2RlIHRvIGJlIHplcm8KQEAgLTEyOSw0OCArMTMwLDYgQEAKIAogLyoKICAqIEluIHRoaXMgZnVuY3Rpb24gd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBpbnN0cnVjdGlvbgotICogb24gd2hpY2ggd2UgYXJlIGluc2VydGluZyBrcHJvYmUgaXMgc3VwcG9ydGVkLgotICogUmV0dXJucyAwIGlmIHN1cHBvcnRlZAotICogUmV0dXJucyAtRUlOVkFMIGlmIHVuc3VwcG9ydGVkCi0gKi8KLXN0YXRpYyBpbnQgX19rcHJvYmVzIHVuc3VwcG9ydGVkX2luc3QodWludCB0ZW1wbGF0ZSwgdWludCAgc2xvdCwKLQkJCQkgICAgICB1aW50IG1ham9yX29wY29kZSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGtwcm9iZV9pbnN0LAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlpZiAoYnVuZGxlX2VuY29kaW5nW3RlbXBsYXRlXVtzbG90XSA9PSBJKSB7Ci0JCXN3aXRjaCAobWFqb3Jfb3Bjb2RlKSB7Ci0JCQljYXNlIDB4MDogLy9JX1VOSVRfTUlTQ19PUENPREU6Ci0JCQkvKgotCQkJICogQ2hlY2sgZm9yIEludGVnZXIgc3BlY3VsYXRpb24gaW5zdHJ1Y3Rpb24KLQkJCSAqIC0gQml0IDMzLTM1IHRvIGJlIGVxdWFsIHRvIDB4MQotCQkJICovCi0JCQlpZiAoKChrcHJvYmVfaW5zdCA+PiAzMykgJiAweDcpID09IDEpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSJLcHJvYmVzIG9uIHNwZWN1bGF0aW9uIGluc3QgYXQgPDB4JWx4PiBub3Qgc3VwcG9ydGVkXG4iLAotCQkJCQlhZGRyKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIElQIHJlbGF0aXZlIG1vdiBpbnN0cnVjdGlvbgotCQkJICogIC0gQml0IDI3LTM1IHRvIGJlIGVxdWFsIHRvIDB4MzAKLQkJCSAqLwotCQkJaWYgKCgoa3Byb2JlX2luc3QgPj4gMjcpICYgMHgxRkYpID09IDB4MzApIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSJLcHJvYmVzIG9uIFwibW92IHIxPWlwXCIgYXQgPDB4JWx4PiBub3Qgc3VwcG9ydGVkXG4iLAotCQkJCQlhZGRyKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJfQotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBJbiB0aGlzIGZ1bmN0aW9uIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgaW5zdHJ1Y3Rpb24KICAqIChxcCkgY21weC5jcmVsLmN0eXBlIHAxLHAyPXIyLHIzCiAgKiBvbiB3aGljaCB3ZSBhcmUgaW5zZXJ0aW5nIGtwcm9iZSBpcyBjbXAgaW5zdHJ1Y3Rpb24KICAqIHdpdGggY3R5cGUgYXMgdW5jLgpAQCAtMjA2LDI2ICsxNjUsMTM2IEBACiB9CiAKIC8qCisgKiBJbiB0aGlzIGZ1bmN0aW9uIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgaW5zdHJ1Y3Rpb24KKyAqIG9uIHdoaWNoIHdlIGFyZSBpbnNlcnRpbmcga3Byb2JlIGlzIHN1cHBvcnRlZC4KKyAqIFJldHVybnMgcXAgdmFsdWUgaWYgc3VwcG9ydGVkCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgdW5zdXBwb3J0ZWQKKyAqLworc3RhdGljIGludCBfX2twcm9iZXMgdW5zdXBwb3J0ZWRfaW5zdCh1aW50IHRlbXBsYXRlLCB1aW50ICBzbG90LAorCQkJCSAgICAgIHVpbnQgbWFqb3Jfb3Bjb2RlLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcga3Byb2JlX2luc3QsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWludCBxcDsKKworCXFwID0ga3Byb2JlX2luc3QgJiAweDNmOworCWlmIChpc19jbXBfY3R5cGVfdW5jX2luc3QodGVtcGxhdGUsIHNsb3QsIG1ham9yX29wY29kZSwga3Byb2JlX2luc3QpKSB7CisJCWlmIChzbG90ID09IDEgJiYgcXApICB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJLcHJvYmVzIG9uIGNtcCB1bmMiCisJCQkJCSJpbnN0cnVjdGlvbiBvbiBzbG90IDEgYXQgPDB4JWx4PiIKKwkJCQkJImlzIG5vdCBzdXBwb3J0ZWRcbiIsIGFkZHIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJfQorCQlxcCA9IDA7CisJfQorCWVsc2UgaWYgKGJ1bmRsZV9lbmNvZGluZ1t0ZW1wbGF0ZV1bc2xvdF0gPT0gSSkgeworCQlpZiAobWFqb3Jfb3Bjb2RlID09IDApIHsKKwkJCS8qCisJCQkgKiBDaGVjayBmb3IgSW50ZWdlciBzcGVjdWxhdGlvbiBpbnN0cnVjdGlvbgorCQkJICogLSBCaXQgMzMtMzUgdG8gYmUgZXF1YWwgdG8gMHgxCisJCQkgKi8KKwkJCWlmICgoKGtwcm9iZV9pbnN0ID4+IDMzKSAmIDB4NykgPT0gMSkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJIktwcm9iZXMgb24gc3BlY3VsYXRpb24gaW5zdCBhdCA8MHglbHg+IG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJCQlhZGRyKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCS8qCisJCQkgKiBJUCByZWxhdGl2ZSBtb3YgaW5zdHJ1Y3Rpb24KKwkJCSAqICAtIEJpdCAyNy0zNSB0byBiZSBlcXVhbCB0byAweDMwCisJCQkgKi8KKwkJCWlmICgoKGtwcm9iZV9pbnN0ID4+IDI3KSAmIDB4MUZGKSA9PSAweDMwKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkiS3Byb2JlcyBvbiBcIm1vdiByMT1pcFwiIGF0IDwweCVseD4gbm90IHN1cHBvcnRlZFxuIiwKKwkJCQkJCWFkZHIpOworCQkJCXJldHVybiAtRUlOVkFMOworCisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKG1ham9yX29wY29kZSA9PSA1KSAmJgkhKGtwcm9iZV9pbnN0ICYgKDB4RlVsIDw8IDMzKSkgJiYKKwkJCQkoa3Byb2JlX2luc3QgJiAoMHgxVUwgPDwgMTIpKSkgeworCQkJLyogdGVzdCBiaXQgaW5zdHJ1Y3Rpb25zLCB0Yml0LHRuYXQsdGYKKwkJCSAqIGJpdCAzMy0zNiB0byBiZSBlcXVhbCB0byAwCisJCQkgKiBiaXQgMTIgdG8gYmUgZXF1YWwgdG8gMQorCQkJICovCisJCQlpZiAoc2xvdCA9PSAxICYmIHFwKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiS3Byb2JlcyBvbiB0ZXN0IGJpdCIKKwkJCQkJCSJpbnN0cnVjdGlvbiBvbiBzbG90IGF0IDwweCVseD4iCisJCQkJCQkiaXMgbm90IHN1cHBvcnRlZFxuIiwgYWRkcik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlxcCA9IDA7CisJCX0KKwl9CisJZWxzZSBpZiAoYnVuZGxlX2VuY29kaW5nW3RlbXBsYXRlXVtzbG90XSA9PSBCKSB7CisJCWlmIChtYWpvcl9vcGNvZGUgPT0gNykgeworCQkJLyogSVAtUmVsYXRpdmUgUHJlZGljdCBtYWpvciBjb2RlIGlzIDcgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIktwcm9iZXMgb24gSVAtUmVsYXRpdmUiCisJCQkJCSJQcmVkaWN0IGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZWxzZSBpZiAobWFqb3Jfb3Bjb2RlID09IDIpIHsKKwkJCS8qIEluZGlyZWN0IFByZWRpY3QsIG1ham9yIGNvZGUgaXMgMgorCQkJICogYml0IDI3LTMyIHRvIGJlIGVxdWFsIHRvIDEwIG9yIDExCisJCQkgKi8KKwkJCWludCB4Nj0oa3Byb2JlX2luc3QgPj4gMjcpICYgMHgzRjsKKwkJCWlmICgoeDYgPT0gMHgxMCkgfHwgKHg2ID09IDB4MTEpKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiS3Byb2JlcyBvbiIKKwkJCQkJIkluZGlyZWN0IFByZWRpY3QgaXMgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisJLyoga2VybmVsIGRvZXMgbm90IHVzZSBmbG9hdCBpbnN0cnVjdGlvbiwgaGVyZSBmb3Igc2FmZXR5IGtwcm9iZQorCSAqIHdpbGwganVkZ2Ugd2hldGhlciBpdCBpcyBmY21wL2ZsYXNzL2Zsb2F0IGFwcHJveGltYXRpb24gaW5zdHJ1Y3Rpb24KKwkgKi8KKwllbHNlIGlmICh1bmxpa2VseShidW5kbGVfZW5jb2RpbmdbdGVtcGxhdGVdW3Nsb3RdID09IEYpKSB7CisJCWlmICgobWFqb3Jfb3Bjb2RlID09IDQgfHwgbWFqb3Jfb3Bjb2RlID09IDUpICYmCisJCQkJKGtwcm9iZV9pbnN0ICAmICgweDEgPDwgMTIpKSkgeworCQkJLyogZmNtcC9mY2xhc3MgdW5jIGluc3RydWN0aW9uICovCisJCQlpZiAoc2xvdCA9PSAxICYmIHFwKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiS3Byb2JlcyBvbiBmY21wL2ZjbGFzcyAiCisJCQkJCSJpbnN0cnVjdGlvbiBvbiBzbG90IGF0IDwweCVseD4gIgorCQkJCQkiaXMgbm90IHN1cHBvcnRlZFxuIiwgYWRkcik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCX0KKwkJCXFwID0gMDsKKwkJfQorCQlpZiAoKG1ham9yX29wY29kZSA9PSAwIHx8IG1ham9yX29wY29kZSA9PSAxKSAmJgorCQkJKGtwcm9iZV9pbnN0ICYgKDB4MVVMIDw8IDMzKSkpIHsKKwkJCS8qIGZsb2F0IEFwcHJveGltYXRpb24gaW5zdHJ1Y3Rpb24gKi8KKwkJCWlmIChzbG90ID09IDEgJiYgcXApIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJLcHJvYmVzIG9uIGZsb2F0IEFwcHJveCAiCisJCQkJCSJpbnN0ciBhdCA8MHglbHg+IGlzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJCQlhZGRyKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXFwID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gcXA7Cit9CisKKy8qCiAgKiBJbiB0aGlzIGZ1bmN0aW9uIHdlIG92ZXJyaWRlIHRoZSBidW5kbGUgd2l0aAogICogdGhlIGJyZWFrIGluc3RydWN0aW9uIGF0IHRoZSBnaXZlbiBzbG90LgogICovCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgcHJlcGFyZV9icmVha19pbnN0KHVpbnQgdGVtcGxhdGUsIHVpbnQgIHNsb3QsCiAJCQkJCSB1aW50IG1ham9yX29wY29kZSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcga3Byb2JlX2luc3QsCi0JCQkJCSBzdHJ1Y3Qga3Byb2JlICpwKQorCQkJCQkgc3RydWN0IGtwcm9iZSAqcCwKKwkJCQkJIGludCBxcCkKIHsKIAl1bnNpZ25lZCBsb25nIGJyZWFrX2luc3QgPSBCUkVBS19JTlNUOwogCWJ1bmRsZV90ICpidW5kbGUgPSAmcC0+b3Bjb2RlLmJ1bmRsZTsKIAogCS8qCiAJICogQ29weSB0aGUgb3JpZ2luYWwga3Byb2JlX2luc3QgcXVhbGlmeWluZyBwcmVkaWNhdGUocXApCi0JICogdG8gdGhlIGJyZWFrIGluc3RydWN0aW9uIGlmZiAhaXNfY21wX2N0eXBlX3VuY19pbnN0Ci0JICogYmVjYXVzZSBmb3IgY21wIGluc3RydWN0aW9uIHdpdGggY3R5cGUgZXF1YWwgdG8gdW5jLAotCSAqIHdoaWNoIGlzIGEgc3BlY2lhbCBpbnN0cnVjdGlvbiBhbHdheXMgbmVlZHMgdG8gYmUKLQkgKiBleGVjdXRlZCByZWdyYWRsZXNzIG9mIHFwCisJICogdG8gdGhlIGJyZWFrIGluc3RydWN0aW9uCiAJICovCi0JaWYgKCFpc19jbXBfY3R5cGVfdW5jX2luc3QodGVtcGxhdGUsIHNsb3QsIG1ham9yX29wY29kZSwga3Byb2JlX2luc3QpKQotCQlicmVha19pbnN0IHw9ICgweDNmICYga3Byb2JlX2luc3QpOworCWJyZWFrX2luc3QgfD0gcXA7CiAKIAlzd2l0Y2ggKHNsb3QpIHsKIAkgIGNhc2UgMDoKQEAgLTI5NiwxMiArMzY1LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHNsb3QgPT0gMSAmJiBidW5kbGVfZW5jb2RpbmdbdGVtcGxhdGVdWzFdICE9IEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW5zZXJ0aW5nIGtwcm9iZXMgb24gc2xvdCAjMSAiCi0JCSAgICAgICAiaXMgbm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC00MjcsNiArNDkwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGtwcm9iZV9pbnN0PTA7CiAJdW5zaWduZWQgaW50IHNsb3QgPSBhZGRyICYgMHhmLCB0ZW1wbGF0ZSwgbWFqb3Jfb3Bjb2RlID0gMDsKIAlidW5kbGVfdCAqYnVuZGxlOworCWludCBxcDsKIAogCWJ1bmRsZSA9ICYoKGtwcm9iZV9vcGNvZGVfdCAqKWtwcm9iZV9hZGRyKS0+YnVuZGxlOwogCXRlbXBsYXRlID0gYnVuZGxlLT5xdWFkMC50ZW1wbGF0ZTsKQEAgLTQ0MSw5ICs1MDUsOSBAQAogCS8qIEdldCBrcHJvYmVfaW5zdCBhbmQgbWFqb3Jfb3Bjb2RlIGZyb20gdGhlIGJ1bmRsZSAqLwogCWdldF9rcHJvYmVfaW5zdChidW5kbGUsIHNsb3QsICZrcHJvYmVfaW5zdCwgJm1ham9yX29wY29kZSk7CiAKLQlpZiAodW5zdXBwb3J0ZWRfaW5zdCh0ZW1wbGF0ZSwgc2xvdCwgbWFqb3Jfb3Bjb2RlLCBrcHJvYmVfaW5zdCwgYWRkcikpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQorCXFwID0gdW5zdXBwb3J0ZWRfaW5zdCh0ZW1wbGF0ZSwgc2xvdCwgbWFqb3Jfb3Bjb2RlLCBrcHJvYmVfaW5zdCwgYWRkcik7CisJaWYgKHFwIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwLT5haW5zbi5pbnNuID0gZ2V0X2luc25fc2xvdCgpOwogCWlmICghcC0+YWluc24uaW5zbikKQEAgLTQ1MSwzMCArNTE1LDU2IEBACiAJbWVtY3B5KCZwLT5vcGNvZGUsIGtwcm9iZV9hZGRyLCBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CiAJbWVtY3B5KHAtPmFpbnNuLmluc24sIGtwcm9iZV9hZGRyLCBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CiAKLQlwcmVwYXJlX2JyZWFrX2luc3QodGVtcGxhdGUsIHNsb3QsIG1ham9yX29wY29kZSwga3Byb2JlX2luc3QsIHApOworCXByZXBhcmVfYnJlYWtfaW5zdCh0ZW1wbGF0ZSwgc2xvdCwgbWFqb3Jfb3Bjb2RlLCBrcHJvYmVfaW5zdCwgcCwgcXApOwogCiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgX19rcHJvYmVzIGFyY2hfYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewotCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXAtPmFkZHI7Ci0JdW5zaWduZWQgbG9uZyBhcm1fYWRkciA9IGFkZHIgJiB+MHhGVUxMOworCXVuc2lnbmVkIGxvbmcgYXJtX2FkZHI7CisJYnVuZGxlX3QgKnNyYywgKmRlc3Q7CisKKwlhcm1fYWRkciA9ICgodW5zaWduZWQgbG9uZylwLT5hZGRyKSAmIH4weEZVTDsKKwlkZXN0ID0gJigoa3Byb2JlX29wY29kZV90ICopYXJtX2FkZHIpLT5idW5kbGU7CisJc3JjID0gJnAtPm9wY29kZS5idW5kbGU7CiAKIAlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpcC0+YWluc24uaW5zbiwKIAkJCSh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc24gKyBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7Ci0JbWVtY3B5KChjaGFyICopYXJtX2FkZHIsICZwLT5vcGNvZGUsIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKKwlzd2l0Y2ggKHAtPmFpbnNuLnNsb3QpIHsKKwkJY2FzZSAwOgorCQkJZGVzdC0+cXVhZDAuc2xvdDAgPSBzcmMtPnF1YWQwLnNsb3QwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRlc3QtPnF1YWQxLnNsb3QxX3AxID0gc3JjLT5xdWFkMS5zbG90MV9wMTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlkZXN0LT5xdWFkMS5zbG90MiA9IHNyYy0+cXVhZDEuc2xvdDI7CisJCQlicmVhazsKKwl9CiAJZmx1c2hfaWNhY2hlX3JhbmdlKGFybV9hZGRyLCBhcm1fYWRkciArIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKIH0KIAogdm9pZCBfX2twcm9iZXMgYXJjaF9kaXNhcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkcjsKLQl1bnNpZ25lZCBsb25nIGFybV9hZGRyID0gYWRkciAmIH4weEZVTEw7CisJdW5zaWduZWQgbG9uZyBhcm1fYWRkcjsKKwlidW5kbGVfdCAqc3JjLCAqZGVzdDsKIAorCWFybV9hZGRyID0gKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIpICYgfjB4RlVMOworCWRlc3QgPSAmKChrcHJvYmVfb3Bjb2RlX3QgKilhcm1fYWRkciktPmJ1bmRsZTsKIAkvKiBwLT5haW5zbi5pbnNuIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCB1bmFsdGVyZWQga3Byb2JlX29wY29kZV90ICovCi0JbWVtY3B5KChjaGFyICopIGFybV9hZGRyLCAoY2hhciAqKSBwLT5haW5zbi5pbnNuLAotCQkJCQkgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworCXNyYyA9ICZwLT5haW5zbi5pbnNuLT5idW5kbGU7CisJc3dpdGNoIChwLT5haW5zbi5zbG90KSB7CisJCWNhc2UgMDoKKwkJCWRlc3QtPnF1YWQwLnNsb3QwID0gc3JjLT5xdWFkMC5zbG90MDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkZXN0LT5xdWFkMS5zbG90MV9wMSA9IHNyYy0+cXVhZDEuc2xvdDFfcDE7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJZGVzdC0+cXVhZDEuc2xvdDIgPSBzcmMtPnF1YWQxLnNsb3QyOworCQkJYnJlYWs7CisJfQogCWZsdXNoX2ljYWNoZV9yYW5nZShhcm1fYWRkciwgYXJtX2FkZHIgKyBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CiB9CiAKQEAgLTgwNyw3ICs4OTcsOSBAQAogCXN3aXRjaCh2YWwpIHsKIAljYXNlIERJRV9CUkVBSzoKIAkJLyogZXJyIGlzIGJyZWFrIG51bWJlciBmcm9tIGlhNjRfYmFkX2JyZWFrKCkgKi8KLQkJaWYgKGFyZ3MtPmVyciA9PSAweDgwMjAwIHx8IGFyZ3MtPmVyciA9PSAweDgwMzAwIHx8IGFyZ3MtPmVyciA9PSAwKQorCQlpZiAoKGFyZ3MtPmVyciA+PiAxMikgPT0gKF9fSUE2NF9CUkVBS19LUFJPQkUgPj4gMTIpCisJCQl8fCBhcmdzLT5lcnIgPT0gX19JQTY0X0JSRUFLX0pQUk9CRQorCQkJfHwgYXJncy0+ZXJyID09IDApCiAJCQlpZiAocHJlX2twcm9iZXNfaGFuZGxlcihhcmdzKSkKIAkJCQlyZXQgPSBOT1RJRllfU1RPUDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDQ2ODIzM2YuLmUyY2NjOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0xOSw4ICsxOSwxMSBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9tZW1pbml0Lmg+CiAKLXR5cGVkZWYgdm9pZCAoKnJlbG9jYXRlX25ld19rZXJuZWxfdCkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKLQkJc3RydWN0IGlhNjRfYm9vdF9wYXJhbSAqLCB1bnNpZ25lZCBsb25nKTsKK3R5cGVkZWYgTk9SRVRfVFlQRSB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSgKKwkJCQkJdW5zaWduZWQgbG9uZyBpbmRpcmVjdGlvbl9wYWdlLAorCQkJCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MsCisJCQkJCXN0cnVjdCBpYTY0X2Jvb3RfcGFyYW0gKmJvb3RfcGFyYW0sCisJCQkJCXVuc2lnbmVkIGxvbmcgcGFsX2FkZHIpIEFUVFJJQl9OT1JFVDsKIAogc3RydWN0IGtpbWFnZSAqaWE2NF9raW1hZ2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IDg3YzFjNGYuLmE3NmFkZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKIAl9IGVsc2UgewogCQkvKiBEdW1wIGJ1ZmZlcmVkIG1lc3NhZ2UgdG8gY29uc29sZSAqLwogCQlpYTY0X21sb2didWZfZmluaXNoKDEpOwotI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCisjaWZkZWYgQ09ORklHX0tFWEVDCiAJCWF0b21pY19zZXQoJmtkdW1wX2luX3Byb2dyZXNzLCAxKTsKIAkJbW9uYXJjaF9jcHUgPSAtMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwppbmRleCBkYmIyODE2Li5hYTk0ZjYwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwpAQCAtMjE4OCwxMyArMjE4OCwxMyBAQAogCS8qCiAJICogYWxsb2NhdGUgYSBuZXcgZGNhY2hlIGVudHJ5CiAJICovCi0JZmlsZS0+Zl9kZW50cnkgPSBkX2FsbG9jKHBmbWZzX21udC0+bW50X3NiLT5zX3Jvb3QsICZ0aGlzKTsKLQlpZiAoIWZpbGUtPmZfZGVudHJ5KSBnb3RvIG91dDsKKwlmaWxlLT5mX3BhdGguZGVudHJ5ID0gZF9hbGxvYyhwZm1mc19tbnQtPm1udF9zYi0+c19yb290LCAmdGhpcyk7CisJaWYgKCFmaWxlLT5mX3BhdGguZGVudHJ5KSBnb3RvIG91dDsKIAotCWZpbGUtPmZfZGVudHJ5LT5kX29wID0gJnBmbWZzX2RlbnRyeV9vcGVyYXRpb25zOworCWZpbGUtPmZfcGF0aC5kZW50cnktPmRfb3AgPSAmcGZtZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKLQlkX2FkZChmaWxlLT5mX2RlbnRyeSwgaW5vZGUpOwotCWZpbGUtPmZfdmZzbW50ID0gbW50Z2V0KHBmbWZzX21udCk7CisJZF9hZGQoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgaW5vZGUpOworCWZpbGUtPmZfcGF0aC5tbnQgPSBtbnRnZXQocGZtZnNfbW50KTsKIAlmaWxlLT5mX21hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCiAJZmlsZS0+Zl9vcCAgICA9ICZwZm1fZmlsZV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDUxOTIyYjkuLjE3Njg1YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yNjgsMTAgKzI2OCwxNiBAQAogCiAJLyogZW5kbGVzcyBpZGxlIGxvb3Agd2l0aCBubyBwcmlvcml0eSBhdCBhbGwgKi8KIAl3aGlsZSAoMSkgewotCQlpZiAoY2FuX2RvX3BhbF9oYWx0KQorCQlpZiAoY2FuX2RvX3BhbF9oYWx0KSB7CiAJCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKLQkJZWxzZQorCQkJLyoKKwkJCSAqIFRTX1BPTExJTkctY2xlYXJlZCBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlCisJCQkgKiB0ZXN0IE5FRURfUkVTQ0hFRDoKKwkJCSAqLworCQkJc21wX21iKCk7CisJCX0gZWxzZSB7CiAJCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOworCQl9CiAKIAkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQkJdm9pZCAoKmlkbGUpKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zYWxpbmZvLmMgYi9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYwppbmRleCBmZDYwN2NhLi5lMzc1YTJmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYwpAQCAtMzAyLDcgKzMwMiw3IEBACiBzdGF0aWMgc3NpemVfdAogc2FsaW5mb19ldmVudF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IFBERShpbm9kZSk7CiAJc3RydWN0IHNhbGluZm9fZGF0YSAqZGF0YSA9IGVudHJ5LT5kYXRhOwogCWNoYXIgY21kWzMyXTsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogc3RhdGljIHNzaXplX3QKIHNhbGluZm9fbG9nX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0gUERFKGlub2RlKTsKIAlzdHJ1Y3Qgc2FsaW5mb19kYXRhICpkYXRhID0gZW50cnktPmRhdGE7CiAJdTggKmJ1ZjsKQEAgLTUyNSw3ICs1MjUsNyBAQAogc3RhdGljIHNzaXplX3QKIHNhbGluZm9fbG9nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IFBERShpbm9kZSk7CiAJc3RydWN0IHNhbGluZm9fZGF0YSAqZGF0YSA9IGVudHJ5LT5kYXRhOwogCWNoYXIgY21kWzMyXTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCAxNGUxMjAwLi5hZDU2N2I4ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiAKICNpZmRlZiBDT05GSUdfS0VYRUMKIAkvKiBjcmFzaGtlcm5lbD1zaXplQG9mZnNldCBzcGVjaWZpZXMgdGhlIHNpemUgdG8gcmVzZXJ2ZSBmb3IgYSBjcmFzaAotCSAqIGtlcm5lbC4ob2Zmc2V0IGlzIGluZ29yZWQgZm9yIGtlZXAgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGFyY2hzKQorCSAqIGtlcm5lbC4gSWYgb2Zmc2V0IGlzIDAsIHRoZW4gaXQgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LgogCSAqIEJ5IHJlc2VydmluZyB0aGlzIG1lbW9yeSB3ZSBndWFyYW50ZWUgdGhhdCBsaW51eCBuZXZlciBzZXQncyBpdAogCSAqIHVwIGFzIGEgRE1BIHRhcmdldC5Vc2VmdWwgZm9yIGhvbGRpbmcgY29kZSB0byBkbyBzb21ldGhpbmcKIAkgKiBhcHByb3ByaWF0ZSBhZnRlciBhIGtlcm5lbCBwYW5pYy4KQEAgLTI2NiwxMCArMjY2LDE2IEBACiAJCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZTsKIAkJaWYgKGZyb20pIHsKIAkJCXNpemUgPSBtZW1wYXJzZShmcm9tICsgMTIsICZmcm9tKTsKKwkJCWlmICgqZnJvbSA9PSAnQCcpCisJCQkJYmFzZSA9IG1lbXBhcnNlKGZyb20rMSwgJmZyb20pOworCQkJZWxzZQorCQkJCWJhc2UgPSAwOwogCQkJaWYgKHNpemUpIHsKLQkJCQlzb3J0X3JlZ2lvbnMocnN2ZF9yZWdpb24sIG4pOwotCQkJCWJhc2UgPSBrZHVtcF9maW5kX3JzdmRfcmVnaW9uKHNpemUsCi0JCQkJcnN2ZF9yZWdpb24sIG4pOworCQkJCWlmICghYmFzZSkgeworCQkJCQlzb3J0X3JlZ2lvbnMocnN2ZF9yZWdpb24sIG4pOworCQkJCQliYXNlID0ga2R1bXBfZmluZF9yc3ZkX3JlZ2lvbihzaXplLAorCQkJCQkJCSAgICAgIAlyc3ZkX3JlZ2lvbiwgbik7CisJCQkJCX0KIAkJCQlpZiAoYmFzZSAhPSB+MFVMKSB7CiAJCQkJCXJzdmRfcmVnaW9uW25dLnN0YXJ0ID0KIAkJCQkJCSh1bnNpZ25lZCBsb25nKV9fdmEoYmFzZSk7CkBAIC00MzQsNiArNDQwLDIxIEBACiB9CiBlYXJseV9wYXJhbSgibm9tY2EiLCBzZXR1cF9ub21jYSk7CiAKKyNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKy8qIGVsZmNvcmVoZHI9IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgZWxmIGNvcmUgaGVhZGVyCisgKiBzdG9yZWQgYnkgdGhlIGNyYXNoZWQga2VybmVsLgorICovCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9lbGZjb3JlaGRyKGNoYXIgKmFyZykKK3sKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAgZWxmY29yZWhkcl9hZGRyID0gbWVtcGFyc2UoYXJnLCAmYXJnKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJlbGZjb3JlaGRyIiwgcGFyc2VfZWxmY29yZWhkcik7CisjZW5kaWYgLyogQ09ORklHX1BST0NfVk1DT1JFICovCisKIHZvaWQgX19pbml0CiBzZXR1cF9hcmNoIChjaGFyICoqY21kbGluZV9wKQogewpAQCAtNjUzLDYgKzY3NCw3IEBACiB7CiAJY2hhciBicmFuZFsxMjhdOwogCisJbWVtY3B5KGJyYW5kLCAiVW5rbm93biIsIDgpOwogCWlmIChpYTY0X3BhbF9nZXRfYnJhbmRfaW5mbyhicmFuZCkpIHsKIAkJaWYgKGZhbWlseSA9PSAweDcpCiAJCQltZW1jcHkoYnJhbmQsICJNZXJjZWQiLCA3KTsKQEAgLTY2MCw4ICs2ODIsNyBAQAogCQkJY2FzZSAwOiBtZW1jcHkoYnJhbmQsICJNY0tpbmxleSIsIDkpOyBicmVhazsKIAkJCWNhc2UgMTogbWVtY3B5KGJyYW5kLCAiTWFkaXNvbiIsIDgpOyBicmVhazsKIAkJCWNhc2UgMjogbWVtY3B5KGJyYW5kLCAiTWFkaXNvbiB1cCB0byA5TSBjYWNoZSIsIDIzKTsgYnJlYWs7Ci0JCX0gZWxzZQotCQkJbWVtY3B5KGJyYW5kLCAiVW5rbm93biIsIDgpOworCQl9CiAJfQogCWlmIChicmFuZG5hbWVbMF0gPT0gJ1wwJykKIAkJcmV0dXJuIHN0cmNweShicmFuZG5hbWUsIGJyYW5kKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcC5jCmluZGV4IGIxYjlhYTQuLmY0YzdmNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJCQkgICAgICBjYXNlIElQSV9DUFVfU1RPUDoKIAkJCQlzdG9wX3RoaXNfY3B1KCk7CiAJCQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKyNpZmRlZiBDT05GSUdfS0VYRUMKIAkJCSAgICAgIGNhc2UgSVBJX0tEVU1QX0NQVV9TVE9QOgogCQkJCXVud19pbml0X3J1bm5pbmcoa2R1bXBfY3B1X2ZyZWV6ZSwgTlVMTCk7CiAJCQkJYnJlYWs7CkBAIC0yMTksNyArMjE5LDcgQEAKIAlzZW5kX0lQSV9zaW5nbGUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBvcCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAorI2lmZGVmIENPTkZJR19LRVhFQwogdm9pZAoga2R1bXBfc21wX3NlbmRfc3RvcCgpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZmZmYTllMC4uYWI2ODQ3NCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMzA3LDYgKzMwNywxNSBAQAogCXJldHVybiByZXQuc3RhdHVzOwogfQogCitzdHJ1Y3QgZnB1X3N3YV9tc2cgeworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJdW5zaWduZWQgbG9uZyB0aW1lOworfTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZnB1X3N3YV9tc2csIGNwdWxhc3QpOworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBmcHVfc3dhX21zZywgY3B1bGFzdCk7CitzdGF0aWMgc3RydWN0IGZwdV9zd2FfbXNnIGxhc3QgX19jYWNoZWxpbmVfYWxpZ25lZDsKKworCiAvKgogICogSGFuZGxlIGZsb2F0aW5nLXBvaW50IGFzc2lzdCBmYXVsdHMgYW5kIHRyYXBzLgogICovCkBAIC0zMTYsOCArMzI1LDYgQEAKIAlsb25nIGV4Y2VwdGlvbiwgYnVuZGxlWzJdOwogCXVuc2lnbmVkIGxvbmcgZmF1bHRfaXA7CiAJc3RydWN0IHNpZ2luZm8gc2lnaW5mbzsKLQlzdGF0aWMgaW50IGZwdV9zd2FfY291bnQgPSAwOwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfdGltZTsKIAogCWZhdWx0X2lwID0gcmVncy0+Y3JfaWlwOwogCWlmICghZnBfZmF1bHQgJiYgKGlhNjRfcHNyKHJlZ3MpLT5yaSA9PSAwKSkKQEAgLTMyNSwxNCArMzMyLDM3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1bmRsZSwgKHZvaWQgX191c2VyICopIGZhdWx0X2lwLCBzaXplb2YoYnVuZGxlKSkpCiAJCXJldHVybiAtMTsKIAotCWlmIChqaWZmaWVzIC0gbGFzdF90aW1lID4gNSpIWikKLQkJZnB1X3N3YV9jb3VudCA9IDA7Ci0JaWYgKChmcHVfc3dhX2NvdW50IDwgNCkgJiYgIShjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiBJQTY0X1RIUkVBRF9GUEVNVV9OT1BSSU5UKSkgewotCQlsYXN0X3RpbWUgPSBqaWZmaWVzOwotCQkrK2ZwdV9zd2FfY291bnQ7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICIlcyglZCk6IGZsb2F0aW5nLXBvaW50IGFzc2lzdCBmYXVsdCBhdCBpcCAlMDE2bHgsIGlzciAlMDE2bHhcbiIsCi0JCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHJlZ3MtPmNyX2lpcCArIGlhNjRfcHNyKHJlZ3MpLT5yaSwgaXNyKTsKKwlpZiAoIShjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiBJQTY0X1RIUkVBRF9GUEVNVV9OT1BSSU5UKSkgIHsKKwkJdW5zaWduZWQgbG9uZyBjb3VudCwgY3VycmVudF9qaWZmaWVzID0gamlmZmllczsKKwkJc3RydWN0IGZwdV9zd2FfbXNnICpjcCA9ICZfX2dldF9jcHVfdmFyKGNwdWxhc3QpOworCisJCWlmICh1bmxpa2VseShjdXJyZW50X2ppZmZpZXMgPiBjcC0+dGltZSkpCisJCQljcC0+Y291bnQgPSAwOworCQlpZiAodW5saWtlbHkoY3AtPmNvdW50IDwgNSkpIHsKKwkJCWNwLT5jb3VudCsrOworCQkJY3AtPnRpbWUgPSBjdXJyZW50X2ppZmZpZXMgKyA1ICogSFo7CisKKwkJCS8qIG1pbmltaXplIHJhY2VzIGJ5IGdyYWJiaW5nIGEgY29weSBvZiBjb3VudCBCRUZPUkUgY2hlY2tpbmcgbGFzdC50aW1lLiAqLworCQkJY291bnQgPSBsYXN0LmNvdW50OworCQkJYmFycmllcigpOworCisJCQkvKgorCQkJICogTG93ZXIgNCBiaXRzIGFyZSB1c2VkIGFzIGEgY291bnQuIFVwcGVyIGJpdHMgYXJlIGEgc2VxdWVuY2UKKwkJCSAqIG51bWJlciB0aGF0IGlzIHVwZGF0ZWQgd2hlbiBjb3VudCBpcyByZXNldC4gVGhlIGNtcHhjaGcgd2lsbAorCQkJICogZmFpbCBpcyBzZXFubyBoYXMgY2hhbmdlZC4gVGhpcyBtaW5pbWl6ZXMgbXV0aXBsZSBjcHVzCisJCQkgKiByZXNldGluZyB0aGUgY291bnQuCisJCQkgKi8KKwkJCWlmIChjdXJyZW50X2ppZmZpZXMgPiBsYXN0LnRpbWUpCisJCQkJKHZvaWQpIGNtcHhjaGdfYWNxKCZsYXN0LmNvdW50LCBjb3VudCwgMTYgKyAoY291bnQgJiB+MTUpKTsKKworCQkJLyogdXNlZCBmZXRjaGFkZCB0byBhdG9taWNhbGx5IHVwZGF0ZSB0aGUgY291bnQgKi8KKwkJCWlmICgobGFzdC5jb3VudCAmIDE1KSA8IDUgJiYgKGlhNjRfZmV0Y2hhZGQoMSwgJmxhc3QuY291bnQsIGFjcSkgJiAxNSkgPCA1KSB7CisJCQkJbGFzdC50aW1lID0gY3VycmVudF9qaWZmaWVzICsgNSAqIEhaOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgIAkJCSIlcyglZCk6IGZsb2F0aW5nLXBvaW50IGFzc2lzdCBmYXVsdCBhdCBpcCAlMDE2bHgsIGlzciAlMDE2bHhcbiIsCisJCSAgICAgICAJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHJlZ3MtPmNyX2lpcCArIGlhNjRfcHNyKHJlZ3MpLT5yaSwgaXNyKTsKKwkJCX0KKwkJfQogCX0KIAogCWV4Y2VwdGlvbiA9IGZwX2VtdWxhdGUoZnBfZmF1bHQsIGJ1bmRsZSwgJnJlZ3MtPmNyX2lwc3IsICZyZWdzLT5hcl9mcHNyLCAmaXNyLCAmcmVncy0+cHIsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vY29udGlnLmMKaW5kZXggODJkZWFhMy4uMWU3OTU1MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9jb250aWcuYwpAQCAtMTc0LDYgKzE3NCwxMiBAQAogCXJlc2VydmVfYm9vdG1lbShib290bWFwX3N0YXJ0LCBib290bWFwX3NpemUpOwogCiAJZmluZF9pbml0cmQoKTsKKworI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCisJLyogSWYgd2UgYXJlIGRvaW5nIGEgY3Jhc2ggZHVtcCwgd2Ugc3RpbGwgbmVlZCB0byBrbm93IHRoZSByZWFsIG1lbQorCSAqIHNpemUgYmVmb3JlIG9yaWdpbmFsIG1lbW9yeSBtYXAgaXMgKiByZXNldC4gKi8KKwlzYXZlZF9tYXhfcGZuID0gbWF4X3BmbjsKKyNlbmRpZgogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMjI2LDcgKzIzMiw2IEBACiBwYWdpbmdfaW5pdCAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG1heF9kbWE7Ci0JdW5zaWduZWQgbG9uZyBuaWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgbWF4X3pvbmVfcGZuc1tNQVhfTlJfWk9ORVNdOwogCiAJbnVtX3BoeXNwYWdlcyA9IDA7CkBAIC0yMzgsNyArMjQzLDcgQEAKIAltYXhfem9uZV9wZm5zW1pPTkVfTk9STUFMXSA9IG1heF9sb3dfcGZuOwogCiAjaWZkZWYgQ09ORklHX1ZJUlRVQUxfTUVNX01BUAotCWVmaV9tZW1tYXBfd2FsayhyZWdpc3Rlcl9hY3RpdmVfcmFuZ2VzLCAmbmlkKTsKKwllZmlfbWVtbWFwX3dhbGsocmVnaXN0ZXJfYWN0aXZlX3JhbmdlcywgTlVMTCk7CiAJZWZpX21lbW1hcF93YWxrKGZpbmRfbGFyZ2VzdF9ob2xlLCAodTY0ICopJm1heF9nYXApOwogCWlmIChtYXhfZ2FwIDwgTEFSR0VfR0FQKSB7CiAJCXZtZW1fbWFwID0gKHN0cnVjdCBwYWdlICopIDA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vaW5pdC5jIGIvYXJjaC9pYTY0L21tL2luaXQuYwppbmRleCA1NmRjMjAyNC4uMTM3M2ZhZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2luaXQuYworKysgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCkBAIC01NDMsNyArNTQzLDggQEAKIAogCWlmIChtYXBfc3RhcnQgPCBtYXBfZW5kKQogCQltZW1tYXBfaW5pdF96b25lKCh1bnNpZ25lZCBsb25nKShtYXBfZW5kIC0gbWFwX3N0YXJ0KSwKLQkJCQkgYXJncy0+bmlkLCBhcmdzLT56b25lLCBwYWdlX3RvX3BmbihtYXBfc3RhcnQpKTsKKwkJCQkgYXJncy0+bmlkLCBhcmdzLT56b25lLCBwYWdlX3RvX3BmbihtYXBfc3RhcnQpLAorCQkJCSBNRU1NQVBfRUFSTFkpOwogCXJldHVybiAwOwogfQogCkBAIC01NTIsNyArNTUzLDcgQEAKIAkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuKQogewogCWlmICghdm1lbV9tYXApCi0JCW1lbW1hcF9pbml0X3pvbmUoc2l6ZSwgbmlkLCB6b25lLCBzdGFydF9wZm4pOworCQltZW1tYXBfaW5pdF96b25lKHNpemUsIG5pZCwgem9uZSwgc3RhcnRfcGZuLCBNRU1NQVBfRUFSTFkpOwogCWVsc2UgewogCQlzdHJ1Y3QgcGFnZSAqc3RhcnQ7CiAJCXN0cnVjdCBtZW1tYXBfaW5pdF9jYWxsYmFja19kYXRhIGFyZ3M7CkBAIC01OTUsMTQgKzU5Niw5IEBACiB9CiAKIGludCBfX2luaXQKLXJlZ2lzdGVyX2FjdGl2ZV9yYW5nZXModTY0IHN0YXJ0LCB1NjQgZW5kLCB2b2lkICpuaWQpCityZWdpc3Rlcl9hY3RpdmVfcmFuZ2VzKHU2NCBzdGFydCwgdTY0IGVuZCwgdm9pZCAqYXJnKQogewotCUJVR19PTihuaWQgPT0gTlVMTCk7Ci0JQlVHX09OKCoodW5zaWduZWQgbG9uZyAqKW5pZCA+PSBNQVhfTlVNTk9ERVMpOwotCi0JYWRkX2FjdGl2ZV9yYW5nZSgqKHVuc2lnbmVkIGxvbmcgKiluaWQsCi0JCQkJX19wYShzdGFydCkgPj4gUEFHRV9TSElGVCwKLQkJCQlfX3BhKGVuZCkgPj4gUEFHRV9TSElGVCk7CisJYWRkX2FjdGl2ZV9yYW5nZSgwLCBfX3BhKHN0YXJ0KSA+PiBQQUdFX1NISUZULCBfX3BhKGVuZCkgPj4gUEFHRV9TSElGVCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1ZJUlRVQUxfTUVNX01BUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19hY3BpX2luaXQuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fYWNwaV9pbml0LmMKaW5kZXggOTlkN2YyNy4uY2I5NmI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19hY3BpX2luaXQuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2FjcGlfaW5pdC5jCkBAIC0yMjMsNiArMjIzLDkgQEAKIAl1NjQgcmVzdWx0OwogCXM2NCBzdGF0dXM7CiAKKwkvKiBTTiBBbHRpeCBkb2VzIG5vdCBmb2xsb3cgdGhlIElPU0FQSUMgSVJRIHJvdXRpbmcgbW9kZWwgKi8KKwlhY3BpX2lycV9tb2RlbCA9IEFDUElfSVJRX01PREVMX1BMQVRGT1JNOworCiAJYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3NuX2h1YmRldl9kcml2ZXIpOwogCXN0YXR1cyA9IHNhbF9pb2lmX2luaXQoJnJlc3VsdCk7CiAJaWYgKHN0YXR1cyB8fCByZXN1bHQpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKaW5kZXggYTkzNGFkMC4uODU3MWU1MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYwpAQCAtNTgwLDcgKzU4MCw3IEBACiAJaW50IHNsaWNlOwogCWludCBjbm9kZTsKIAlpbnQgaTsKLQlzdGF0aWMgaW50IHdhcnNfaGF2ZV9iZWVuX2NoZWNrZWQ7CisJc3RhdGljIGludCB3YXJzX2hhdmVfYmVlbl9jaGVja2VkLCBzZXRfY3B1MF9udW1iZXI7CiAKIAljcHVpZCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpZiAoY3B1aWQgPT0gMCAmJiBJU19NRURVU0EoKSkgewpAQCAtNjA1LDggKzYwNSwxNiBAQAogCS8qCiAJICogRG9uJ3QgY2hlY2sgc3RhdHVzLiBUaGUgU0FMIGNhbGwgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgUFJPTXMKIAkgKiBidXQgYSBmYWlsdXJlIGlzIGhhcm1sZXNzLgorCSAqIEFyY2hpdGVjaHR1YWxsbHksIGNwdV9pbml0IGlzIGFsd2F5cyBjYWxsZWQgdHdpY2Ugb24gY3B1IDAuIFdlCisJICogc2hvdWxkIHNldCBjcHVfbnVtYmVyIG9uIGNwdSAwIG9uY2UuCiAJICovCi0JKHZvaWQpIGlhNjRfc25fc2V0X2NwdV9udW1iZXIoY3B1aWQpOworCWlmIChjcHVpZCA9PSAwKSB7CisJCWlmICghc2V0X2NwdTBfbnVtYmVyKSB7CisJCQkodm9pZCkgaWE2NF9zbl9zZXRfY3B1X251bWJlcihjcHVpZCk7CisJCQlzZXRfY3B1MF9udW1iZXIgPSAxOworCQl9CisJfSBlbHNlCisJCSh2b2lkKSBpYTY0X3NuX3NldF9jcHVfbnVtYmVyKGNwdWlkKTsKIAogCS8qCiAJICogVGhlIGJvb3QgY3B1IG1ha2VzIHRoaXMgY2FsbCBhZ2FpbiBhZnRlciBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiBpcwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwppbmRleCA0NjJlYTE3Li4zMzM2Nzk5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJaW50IGU7CiAKIAlmb3IgKHN6ID0gUEFHRV9TSVpFOyBzeiA8IDE2ICogUEFHRV9TSVpFOyBzeiArPSBQQUdFX1NJWkUpIHsKLQkJaWYgKCEocCA9IChjaGFyICopa21hbGxvYyhzeiwgR0ZQX0tFUk5FTCkpKQorCQlpZiAoIShwID0ga21hbGxvYyhzeiwgR0ZQX0tFUk5FTCkpKQogCQkJYnJlYWs7CiAJCWUgPSBpYTY0X3NuX2lvaWZfZ2V0X3BjaV90b3BvbG9neShfX3BhKHApLCBzeik7CiAJCWlmIChlID09IFNBTFJFVF9PSykKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYwppbmRleCAxZjM1NDA4Li5jMDhkYjljIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jCkBAIC02MzIsNyArNjMyLDcgQEAKIAkJY2gtPm51bWJlciwgY2gtPnBhcnRpZCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgKmlycV9mbGFncyk7Ci0JeHBjX2NyZWF0ZV9rdGhyZWFkcyhjaCwgMSk7CisJeHBjX2NyZWF0ZV9rdGhyZWFkcyhjaCwgMSwgMCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCAqaXJxX2ZsYWdzKTsKIH0KIApAQCAtNzU0LDEyICs3NTQsMTIgQEAKIAogCS8qIG1ha2Ugc3VyZSBhbGwgYWN0aXZpdHkgaGFzIHNldHRsZWQgZG93biBmaXJzdCAqLwogCi0JaWYgKGF0b21pY19yZWFkKCZjaC0+cmVmZXJlbmNlcykgPiAwIHx8Ci0JCQkoKGNoLT5mbGFncyAmIFhQQ19DX0NPTk5FQ1RFRENBTExPVVRfTUFERSkgJiYKLQkJCSEoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElOR0NBTExPVVRfTUFERSkpKSB7CisJaWYgKGF0b21pY19yZWFkKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpID4gMCB8fAorCQkJCWF0b21pY19yZWFkKCZjaC0+cmVmZXJlbmNlcykgPiAwKSB7CiAJCXJldHVybjsKIAl9Ci0JREJVR19PTihhdG9taWNfcmVhZCgmY2gtPmt0aHJlYWRzX2Fzc2lnbmVkKSAhPSAwKTsKKwlEQlVHX09OKChjaC0+ZmxhZ3MgJiBYUENfQ19DT05ORUNURURDQUxMT1VUX01BREUpICYmCisJCQkhKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkdDQUxMT1VUX01BREUpKTsKIAogCWlmIChwYXJ0LT5hY3Rfc3RhdGUgPT0gWFBDX1BfREVBQ1RJVkFUSU5HKSB7CiAJCS8qIGNhbid0IHByb2NlZWQgdW50aWwgdGhlIG90aGVyIHNpZGUgZGlzZW5nYWdlcyBmcm9tIHVzICovCkBAIC0xNjUxLDYgKzE2NTEsMTEgQEAKIAkvKiB3YWtlIGFsbCBpZGxlIGt0aHJlYWRzIHNvIHRoZXkgY2FuIGV4aXQgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmNoLT5rdGhyZWFkc19pZGxlKSA+IDApIHsKIAkJd2FrZV91cF9hbGwoJmNoLT5pZGxlX3dxKTsKKworCX0gZWxzZSBpZiAoKGNoLT5mbGFncyAmIFhQQ19DX0NPTk5FQ1RFRENBTExPVVRfTUFERSkgJiYKKwkJCSEoY2gtPmZsYWdzICYgWFBDX0NfRElTQ09OTkVDVElOR0NBTExPVVQpKSB7CisJCS8qIHN0YXJ0IGEga3RocmVhZCB0aGF0IHdpbGwgZG8gdGhlIHhwY0Rpc2Nvbm5lY3RpbmcgY2FsbG91dCAqLworCQl4cGNfY3JlYXRlX2t0aHJlYWRzKGNoLCAxLCAxKTsKIAl9CiAKIAkvKiB3YWtlIHRob3NlIHdhaXRpbmcgdG8gYWxsb2NhdGUgYW4gZW50cnkgZnJvbSB0aGUgbG9jYWwgbXNnIHF1ZXVlICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMKaW5kZXggZmE5NmRmYy4uN2EzODdkMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYwpAQCAtNjgxLDcgKzY4MSw3IEBACiAJZGV2X2RiZyh4cGNfY2hhbiwgImNyZWF0ZSAlZCBuZXcga3RocmVhZHMsIHBhcnRpZD0lZCwgY2hhbm5lbD0lZFxuIiwKIAkJbmVlZGVkLCBjaC0+cGFydGlkLCBjaC0+bnVtYmVyKTsKIAotCXhwY19jcmVhdGVfa3RocmVhZHMoY2gsIG5lZWRlZCk7CisJeHBjX2NyZWF0ZV9rdGhyZWFkcyhjaCwgbmVlZGVkLCAwKTsKIH0KIAogCkBAIC03NzUsMjYgKzc3NSwyOCBAQAogCQl4cGNfa3RocmVhZF93YWl0bXNncyhwYXJ0LCBjaCk7CiAJfQogCi0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpID09IDApIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOwotCQlpZiAoKGNoLT5mbGFncyAmIFhQQ19DX0NPTk5FQ1RFRENBTExPVVRfTUFERSkgJiYKLQkJCQkhKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkdDQUxMT1VUKSkgewotCQkJY2gtPmZsYWdzIHw9IFhQQ19DX0RJU0NPTk5FQ1RJTkdDQUxMT1VUOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJLyogbGV0IHJlZ2lzdGVyZXIga25vdyB0aGF0IGNvbm5lY3Rpb24gaXMgZGlzY29ubmVjdGluZyAqLwogCi0JCQl4cGNfZGlzY29ubmVjdF9jYWxsb3V0KGNoLCB4cGNEaXNjb25uZWN0aW5nKTsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOwotCQkJY2gtPmZsYWdzIHw9IFhQQ19DX0RJU0NPTk5FQ1RJTkdDQUxMT1VUX01BREU7Ci0JCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CisJaWYgKChjaC0+ZmxhZ3MgJiBYUENfQ19DT05ORUNURURDQUxMT1VUX01BREUpICYmCisJCQkhKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkdDQUxMT1VUKSkgeworCQljaC0+ZmxhZ3MgfD0gWFBDX0NfRElTQ09OTkVDVElOR0NBTExPVVQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCisJCXhwY19kaXNjb25uZWN0X2NhbGxvdXQoY2gsIHhwY0Rpc2Nvbm5lY3RpbmcpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKKwkJY2gtPmZsYWdzIHw9IFhQQ19DX0RJU0NPTk5FQ1RJTkdDQUxMT1VUX01BREU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpID09IDApIHsKIAkJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZwYXJ0LT5uY2hhbm5lbHNfZW5nYWdlZCkgPT0gMCkgewogCQkJeHBjX21hcmtfcGFydGl0aW9uX2Rpc2VuZ2FnZWQocGFydCk7CiAJCQl4cGNfSVBJX3NlbmRfZGlzZW5nYWdlKHBhcnQpOwogCQl9CiAJfQogCi0KIAl4cGNfbXNncXVldWVfZGVyZWYoY2gpOwogCiAJZGV2X2RiZyh4cGNfY2hhbiwgImt0aHJlYWQgZXhpdGluZywgcGFydGlkPSVkLCBjaGFubmVsPSVkXG4iLApAQCAtODE4LDcgKzgyMCw4IEBACiAgKiBwYXJ0aXRpb24uCiAgKi8KIHZvaWQKLXhwY19jcmVhdGVfa3RocmVhZHMoc3RydWN0IHhwY19jaGFubmVsICpjaCwgaW50IG5lZWRlZCkKK3hwY19jcmVhdGVfa3RocmVhZHMoc3RydWN0IHhwY19jaGFubmVsICpjaCwgaW50IG5lZWRlZCwKKwkJCWludCBpZ25vcmVfZGlzY29ubmVjdGluZykKIHsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAlwaWRfdCBwaWQ7CkBAIC04MzMsMTYgKzgzNiwzOCBAQAogCQkgKiBrdGhyZWFkLiBUaGF0IGt0aHJlYWQgaXMgcmVzcG9uc2libGUgZm9yIGRvaW5nIHRoZQogCQkgKiBjb3VudGVycGFydCB0byB0aGUgZm9sbG93aW5nIGJlZm9yZSBpdCBleGl0cy4KIAkJICovCisJCWlmIChpZ25vcmVfZGlzY29ubmVjdGluZykgeworCQkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpKSB7CisJCQkJLyoga3RocmVhZHMgYXNzaWduZWQgaGFkIGdvbmUgdG8gemVybyAqLworCQkJCUJVR19PTighKGNoLT5mbGFncyAmCisJCQkJCVhQQ19DX0RJU0NPTk5FQ1RJTkdDQUxMT1VUX01BREUpKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQl9IGVsc2UgaWYgKGNoLT5mbGFncyAmIFhQQ19DX0RJU0NPTk5FQ1RJTkcpIHsKKwkJCWJyZWFrOworCisJCX0gZWxzZSBpZiAoYXRvbWljX2luY19yZXR1cm4oJmNoLT5rdGhyZWFkc19hc3NpZ25lZCkgPT0gMSkgeworCQkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwYXJ0LT5uY2hhbm5lbHNfZW5nYWdlZCkgPT0gMSkKKwkJCQl4cGNfbWFya19wYXJ0aXRpb25fZW5nYWdlZChwYXJ0KTsKKwkJfQogCQkodm9pZCkgeHBjX3BhcnRfcmVmKHBhcnQpOwogCQl4cGNfbXNncXVldWVfcmVmKGNoKTsKLQkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZjaC0+a3RocmVhZHNfYXNzaWduZWQpID09IDEgJiYKLQkJICAgIGF0b21pY19pbmNfcmV0dXJuKCZwYXJ0LT5uY2hhbm5lbHNfZW5nYWdlZCkgPT0gMSkgewotCQkJeHBjX21hcmtfcGFydGl0aW9uX2VuZ2FnZWQocGFydCk7Ci0JCX0KIAogCQlwaWQgPSBrZXJuZWxfdGhyZWFkKHhwY19kYWVtb25pemVfa3RocmVhZCwgKHZvaWQgKikgYXJncywgMCk7CiAJCWlmIChwaWQgPCAwKSB7CiAJCQkvKiB0aGUgZm9yayBmYWlsZWQgKi8KKworCQkJLyoKKwkJCSAqIE5PVEU6IGlmIChpZ25vcmVfZGlzY29ubmVjdGluZyAmJgorCQkJICogIShjaC0+ZmxhZ3MgJiBYUENfQ19ESVNDT05ORUNUSU5HQ0FMTE9VVCkpIGlzIHRydWUsCisJCQkgKiB0aGVuIHdlJ2xsIGRlYWRsb2NrIGlmIGFsbCBvdGhlciBrdGhyZWFkcyBhc3NpZ25lZAorCQkJICogdG8gdGhpcyBjaGFubmVsIGFyZSBibG9ja2VkIGluIHRoZSBjaGFubmVsJ3MKKwkJCSAqIHJlZ2lzdGVyZXIsIGJlY2F1c2UgdGhlIG9ubHkgdGhpbmcgdGhhdCB3aWxsIHVuYmxvY2sKKwkJCSAqIHRoZW0gaXMgdGhlIHhwY0Rpc2Nvbm5lY3RpbmcgY2FsbG91dCB0aGF0IHRoaXMKKwkJCSAqIGZhaWxlZCBrZXJuZWxfdGhyZWFkIHdvdWxkIGhhdmUgbWFkZS4KKwkJCSAqLworCiAJCQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNoLT5rdGhyZWFkc19hc3NpZ25lZCkgPT0gMCAmJgogCQkJICAgIGF0b21pY19kZWNfcmV0dXJuKCZwYXJ0LT5uY2hhbm5lbHNfZW5nYWdlZCkgPT0gMCkgewogCQkJCXhwY19tYXJrX3BhcnRpdGlvbl9kaXNlbmdhZ2VkKHBhcnQpOwpAQCAtODU3LDkgKzg4Miw2IEBACiAJCQkJICogRmxhZyB0aGlzIGFzIGFuIGVycm9yIG9ubHkgaWYgd2UgaGF2ZSBhbgogCQkJCSAqIGluc3VmZmljaWVudCAjb2Yga3RocmVhZHMgZm9yIHRoZSBjaGFubmVsCiAJCQkJICogdG8gZnVuY3Rpb24uCi0JCQkJICoKLQkJCQkgKiBObyB4cGNfbXNncXVldWVfcmVmKCkgaXMgbmVlZGVkIGhlcmUgc2luY2UKLQkJCQkgKiB0aGUgY2hhbm5lbCBtZ3IgaXMgZG9pbmcgdGhpcy4KIAkJCQkgKi8KIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CiAJCQkJWFBDX0RJU0NPTk5FQ1RfQ0hBTk5FTChjaCwgeHBjTGFja09mUmVzb3VyY2VzLApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCA0MWZkNDkwLi5mMzgzZGFiIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtMjE0LDYgKzIxNCwxNCBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAorY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgorCWJvb2wKKwlkZWZhdWx0IG4KKworY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAorCWJvb2wKKwlkZWZhdWx0IG4KKwogY29uZmlnIEdFTkVSSUNfRklORF9ORVhUX0JJVAogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbTMycl9zaW8uYyBiL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbTMycl9zaW8uYwppbmRleCBiY2U4YWY1Li5lZTNjOGJlIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL20zMnJfc2lvLmMKKysrIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9tMzJyX3Npby5jCkBAIC0yLDYgKzIsNyBAQAogICogYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9tMzJyX3Npby5jCiAgKgogICogMjAwMy0wMi0xMjoJVGFrZW8gVGFrYWhhc2hpCisgKiAyMDA2LTExLTMwOglPUFNQVVQgc3VwcG9ydCBieSBLYXp1aGlybyBJbmFva2EKICAqCiAgKi8KIApAQCAtMTYsNyArMTcsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVF9BbHBoYSkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVCkKKyNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUX0FscGhhKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX09QU1BVVCkKICNpbmNsdWRlIDxhc20vbTMyci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC0zMSw3ICszMiwxMSBAQAogI2RlZmluZSBCT09UX1NJTzBUWEIJKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKDB4MDJjMDAwMDAgKyAweDIwMDBjKQogI2Vsc2UKICN1bmRlZiBQTERfQkFTRQorI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfT1BTUFVUKQorI2RlZmluZSBQTERfQkFTRQkweDFjYzAwMDAwCisjZWxzZQogI2RlZmluZSBQTERfQkFTRQkweGE0YzAwMDAwCisjZW5kaWYKICNkZWZpbmUgQk9PVF9TSU8wU1RTCVBMRF9FU0lPMFNUUwogI2RlZmluZSBCT09UX1NJTzBUWEIJUExEX0VTSU8wVFhCCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUwppbmRleCBhYzZkODQwLi5hMmM0NzJjIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCkBAIC0yMywzNSArMjMsMzUgQEAKICAqCXVwZGF0ZWQgaW4gZm9yay5jOmNvcHlfdGhyZWFkLCBzaWduYWwuYzpkb19zaWduYWwsCiAgKglwdHJhY2UuYyBhbmQgcHRyYWNlLmgKICAqCi0gKiBNMzJSeC9NMzJSMgkJCQlNMzJSCi0gKiAgICAgICBAKHNwKSAgICAgIC0gcjQJCWRpdHRvCi0gKiAgICAgICBAKDB4MDQsc3ApIC0gcjUJCWRpdHRvCi0gKiAgICAgICBAKDB4MDgsc3ApIC0gcjYJCWRpdHRvCi0gKiAgICAgICBAKDB4MGMsc3ApIC0gKnB0X3JlZ3MJCWRpdHRvCi0gKiAgICAgICBAKDB4MTAsc3ApIC0gcjAJCWRpdHRvCi0gKiAgICAgICBAKDB4MTQsc3ApIC0gcjEJCWRpdHRvCi0gKiAgICAgICBAKDB4MTgsc3ApIC0gcjIJCWRpdHRvCi0gKiAgICAgICBAKDB4MWMsc3ApIC0gcjMJCWRpdHRvCi0gKiAgICAgICBAKDB4MjAsc3ApIC0gcjcJCWRpdHRvCi0gKiAgICAgICBAKDB4MjQsc3ApIC0gcjgJCWRpdHRvCi0gKiAgICAgICBAKDB4Mjgsc3ApIC0gcjkJCWRpdHRvCi0gKiAgICAgICBAKDB4MmMsc3ApIC0gcjEwCQlkaXR0bwotICogICAgICAgQCgweDMwLHNwKSAtIHIxMQkJZGl0dG8KLSAqICAgICAgIEAoMHgzNCxzcCkgLSByMTIJCWRpdHRvCi0gKiAgICAgICBAKDB4Mzgsc3ApIC0gc3lzY2FsbF9ucglkaXR0bwotICogICAgICAgQCgweDNjLHNwKSAtIGFjYzBoCQlAKDB4M2Msc3ApIC0gYWNjaAotICogICAgICAgQCgweDQwLHNwKSAtIGFjYzBsCQlAKDB4NDAsc3ApIC0gYWNjbAotICogICAgICAgQCgweDQ0LHNwKSAtIGFjYzFoCQlAKDB4NDQsc3ApIC0gZHVtbXlfYWNjMWgKLSAqICAgICAgIEAoMHg0OCxzcCkgLSBhY2MxbAkJQCgweDQ4LHNwKSAtIGR1bW15X2FjYzFsCi0gKiAgICAgICBAKDB4NGMsc3ApIC0gcHN3CQlkaXR0bwotICogICAgICAgQCgweDUwLHNwKSAtIGJwYwkJZGl0dG8KLSAqICAgICAgIEAoMHg1NCxzcCkgLSBiYnBzdwkJZGl0dG8KLSAqICAgICAgIEAoMHg1OCxzcCkgLSBiYnBjCQlkaXR0bwotICogICAgICAgQCgweDVjLHNwKSAtIHNwdSAoY3IzKQkJZGl0dG8KLSAqICAgICAgIEAoMHg2MCxzcCkgLSBmcCAocjEzKQkJZGl0dG8KLSAqICAgICAgIEAoMHg2NCxzcCkgLSBsciAocjE0KQkJZGl0dG8KLSAqICAgICAgIEAoMHg2OCxzcCkgLSBzcGkgKGNyMikJCWRpdHRvCi0gKiAgICAgICBAKDB4NmMsc3ApIC0gb3JpZ19yMAkJZGl0dG8KKyAqIE0zMlIvTTMyUngvTTMyUjIKKyAqICAgICAgIEAoc3ApICAgICAgLSByNAorICogICAgICAgQCgweDA0LHNwKSAtIHI1CisgKiAgICAgICBAKDB4MDgsc3ApIC0gcjYKKyAqICAgICAgIEAoMHgwYyxzcCkgLSAqcHRfcmVncworICogICAgICAgQCgweDEwLHNwKSAtIHIwCisgKiAgICAgICBAKDB4MTQsc3ApIC0gcjEKKyAqICAgICAgIEAoMHgxOCxzcCkgLSByMgorICogICAgICAgQCgweDFjLHNwKSAtIHIzCisgKiAgICAgICBAKDB4MjAsc3ApIC0gcjcKKyAqICAgICAgIEAoMHgyNCxzcCkgLSByOAorICogICAgICAgQCgweDI4LHNwKSAtIHI5CisgKiAgICAgICBAKDB4MmMsc3ApIC0gcjEwCisgKiAgICAgICBAKDB4MzAsc3ApIC0gcjExCisgKiAgICAgICBAKDB4MzQsc3ApIC0gcjEyCisgKiAgICAgICBAKDB4Mzgsc3ApIC0gc3lzY2FsbF9ucgorICogICAgICAgQCgweDNjLHNwKSAtIGFjYzBoCisgKiAgICAgICBAKDB4NDAsc3ApIC0gYWNjMGwKKyAqICAgICAgIEAoMHg0NCxzcCkgLSBhY2MxaAkJOyBJU0FfRFNQX0xFVkVMMiBvbmx5CisgKiAgICAgICBAKDB4NDgsc3ApIC0gYWNjMWwJCTsgSVNBX0RTUF9MRVZFTDIgb25seQorICogICAgICAgQCgweDRjLHNwKSAtIHBzdworICogICAgICAgQCgweDUwLHNwKSAtIGJwYworICogICAgICAgQCgweDU0LHNwKSAtIGJicHN3CisgKiAgICAgICBAKDB4NTgsc3ApIC0gYmJwYworICogICAgICAgQCgweDVjLHNwKSAtIHNwdSAoY3IzKQorICogICAgICAgQCgweDYwLHNwKSAtIGZwIChyMTMpCisgKiAgICAgICBAKDB4NjQsc3ApIC0gbHIgKHIxNCkKKyAqICAgICAgIEAoMHg2OCxzcCkgLSBzcGkgKGNyMikKKyAqICAgICAgIEAoMHg2YyxzcCkgLSBvcmlnX3IwCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KQEAgLTk1LDE3ICs5NSwxMCBAQAogI2RlZmluZSBSMTEocmVnKQkJQCgweDMwLHJlZykKICNkZWZpbmUgUjEyKHJlZykJCUAoMHgzNCxyZWcpCiAjZGVmaW5lIFNZU0NBTExfTlIocmVnKQkJQCgweDM4LHJlZykKLSNpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpICYmIGRlZmluZWQoQ09ORklHX0lTQV9EU1BfTEVWRUwyKQogI2RlZmluZSBBQ0MwSChyZWcpCQlAKDB4M0MscmVnKQogI2RlZmluZSBBQ0MwTChyZWcpCQlAKDB4NDAscmVnKQogI2RlZmluZSBBQ0MxSChyZWcpCQlAKDB4NDQscmVnKQogI2RlZmluZSBBQ0MxTChyZWcpCQlAKDB4NDgscmVnKQotI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKLSNkZWZpbmUgQUNDSChyZWcpCQlAKDB4M0MscmVnKQotI2RlZmluZSBBQ0NMKHJlZykJCUAoMHg0MCxyZWcpCi0jZWxzZQotI2Vycm9yIHVua25vd24gaXNhIGNvbmZpZ3VyYXRpb24KLSNlbmRpZgogI2RlZmluZSBQU1cocmVnKQkJQCgweDRDLHJlZykKICNkZWZpbmUgQlBDKHJlZykJCUAoMHg1MCxyZWcpCiAjZGVmaW5lIEJCUFNXKHJlZykJCUAoMHg1NCxyZWcpCkBAIC02MDMsOCArNTk2LDYgQEAKIAliZXF6CXIxLCBpbnN0CiBvcHJhbmQ6CiAJbGQJcjIsIEAobG93KE1ERVZBX29mZnNldCkscjIpCTsgc2V0IGFkZHJlc3MKLQlzcmxpCXIyLCAjMTIKLQlzbGxpCXIyLCAjMTIKIAlzcmxpCXIxLCAjMQogCWJyYQkxZgogaW5zdDoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvaW9fb3BzcHV0LmMgYi9hcmNoL20zMnIva2VybmVsL2lvX29wc3B1dC5jCmluZGV4IGRhNmM1ZjUuLjNjYmIxZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvaW9fb3BzcHV0LmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9pb19vcHNwdXQuYwpAQCAtMzAsMTQgKzMwLDM0IEBACiBleHRlcm4gdm9pZCBwY2NfaW93cml0ZV93b3JkKGludCwgdW5zaWduZWQgbG9uZywgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgaW50KTsKICNlbmRpZiAvKiBDT05GSUdfUENNQ0lBICYmIENPTkZJR19NMzJSX0NGQyAqLwogCi0jZGVmaW5lIFBPUlQyQUREUihwb3J0KSAgX3BvcnQyYWRkcihwb3J0KQotI2RlZmluZSBQT1JUMkFERFJfVVNCKHBvcnQpIF9wb3J0MmFkZHJfdXNiKHBvcnQpCisjZGVmaW5lIFBPUlQyQUREUihwb3J0KQkJX3BvcnQyYWRkcihwb3J0KQorI2RlZmluZSBQT1JUMkFERFJfVVNCKHBvcnQpCV9wb3J0MmFkZHJfdXNiKHBvcnQpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJcmV0dXJuICh2b2lkICopKHBvcnQgfCBOT05DQUNIRV9PRkZTRVQpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCitzdGF0aWMgaW5saW5lIHZvaWQgKl9fcG9ydDJhZGRyX2F0YSh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJc3RhdGljIGludAlkdW1teV9yZWc7CisKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDB4MWYwOglyZXR1cm4gKHZvaWQgKikoMHgwYzAwMjAwMCB8IE5PTkNBQ0hFX09GRlNFVCk7CisJY2FzZSAweDFmMToJcmV0dXJuICh2b2lkICopKDB4MGMwMTI4MDAgfCBOT05DQUNIRV9PRkZTRVQpOworCWNhc2UgMHgxZjI6CXJldHVybiAodm9pZCAqKSgweDBjMDEyMDAyIHwgTk9OQ0FDSEVfT0ZGU0VUKTsKKwljYXNlIDB4MWYzOglyZXR1cm4gKHZvaWQgKikoMHgwYzAxMjgwMiB8IE5PTkNBQ0hFX09GRlNFVCk7CisJY2FzZSAweDFmNDoJcmV0dXJuICh2b2lkICopKDB4MGMwMTIwMDQgfCBOT05DQUNIRV9PRkZTRVQpOworCWNhc2UgMHgxZjU6CXJldHVybiAodm9pZCAqKSgweDBjMDEyODA0IHwgTk9OQ0FDSEVfT0ZGU0VUKTsKKwljYXNlIDB4MWY2OglyZXR1cm4gKHZvaWQgKikoMHgwYzAxMjAwNiB8IE5PTkNBQ0hFX09GRlNFVCk7CisJY2FzZSAweDFmNzoJcmV0dXJuICh2b2lkICopKDB4MGMwMTI4MDYgfCBOT05DQUNIRV9PRkZTRVQpOworCWNhc2UgMHgzZjY6CXJldHVybiAodm9pZCAqKSgweDBjMDEyMDBlIHwgTk9OQ0FDSEVfT0ZGU0VUKTsKKwlkZWZhdWx0OiAJcmV0dXJuICh2b2lkICopJmR1bW15X3JlZzsKKwl9Cit9CisjZW5kaWYKKwogLyoKICAqIE9QU1BVVC1MQU4gaXMgbG9jYXRlZCBpbiB0aGUgZXh0ZW5kZWQgYnVzIHNwYWNlCiAgKiBmcm9tIDB4MTAwMDAwMDAgdG8gMHgxM2ZmZmZmZiBvbiBwaHlzaWNhbCBhZGRyZXNzLgpAQCAtOTcsNiArMTE3LDEyIEBACiB7CiAJaWYgKHBvcnQgPj0gTEFOX0lPU1RBUlQgJiYgcG9ydCA8IExBTl9JT0VORCkKIAkJcmV0dXJuIF9uZV9pbmIoUE9SVDJBRERSX05FKHBvcnQpKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0lERSkgJiYgIWRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQorCWVsc2UgaWYgKChwb3J0ID49IDB4MWYwICYmIHBvcnQgPD0weDFmNykgfHwgcG9ydCA9PSAweDNmNikgeworCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopX19wb3J0MmFkZHJfYXRhKHBvcnQpOworCX0KKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgJiYgZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCiAJZWxzZSBpZiAocG9ydCA+PSBNMzJSX1BDQ19JT1NUQVJUMCAmJiBwb3J0IDw9IE0zMlJfUENDX0lPRU5EMCkgewogCQl1bnNpZ25lZCBjaGFyIGI7CkBAIC0xMTIsNiArMTM4LDExIEBACiB7CiAJaWYgKHBvcnQgPj0gTEFOX0lPU1RBUlQgJiYgcG9ydCA8IExBTl9JT0VORCkKIAkJcmV0dXJuIF9uZV9pbncoUE9SVDJBRERSX05FKHBvcnQpKTsKKyNpZiBkZWZpbmVkKENPTkZJR19JREUpICYmICFkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKKwllbHNlIGlmICgocG9ydCA+PSAweDFmMCAmJiBwb3J0IDw9MHgxZjcpIHx8IHBvcnQgPT0gMHgzZjYpIHsKKwkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilfX3BvcnQyYWRkcl9hdGEocG9ydCk7CisJfQorI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCKQogCWVsc2UgaWYocG9ydCA+PSAweDM0MCAmJiBwb3J0IDwgMHgzYTApCiAJCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUE9SVDJBRERSX1VTQihwb3J0KTsKQEAgLTE2NCw2ICsxOTUsMTEgQEAKIAlpZiAocG9ydCA+PSBMQU5fSU9TVEFSVCAmJiBwb3J0IDwgTEFOX0lPRU5EKQogCQlfbmVfb3V0YihiLCBQT1JUMkFERFJfTkUocG9ydCkpOwogCWVsc2UKKyNpZiBkZWZpbmVkKENPTkZJR19JREUpICYmICFkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKKwlpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7CisJCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKV9fcG9ydDJhZGRyX2F0YShwb3J0KSA9IGI7CisJfSBlbHNlCisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQogCWlmIChwb3J0ID49IE0zMlJfUENDX0lPU1RBUlQwICYmIHBvcnQgPD0gTTMyUl9QQ0NfSU9FTkQwKSB7CiAJCXBjY19pb3dyaXRlX2J5dGUoMCwgcG9ydCwgJmIsIHNpemVvZihiKSwgMSwgMCk7CkBAIC0xNzcsNiArMjEzLDExIEBACiAJaWYgKHBvcnQgPj0gTEFOX0lPU1RBUlQgJiYgcG9ydCA8IExBTl9JT0VORCkKIAkJX25lX291dHcodywgUE9SVDJBRERSX05FKHBvcnQpKTsKIAllbHNlCisjaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJaWYgKChwb3J0ID49IDB4MWYwICYmIHBvcnQgPD0weDFmNykgfHwgcG9ydCA9PSAweDNmNikgeworCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopX19wb3J0MmFkZHJfYXRhKHBvcnQpID0gdzsKKwl9IGVsc2UKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1VTQikKIAlpZihwb3J0ID49IDB4MzQwICYmIHBvcnQgPCAweDNhMCkKIAkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBPUlQyQUREUl9VU0IocG9ydCkgPSB3OwpAQCAtMjIyLDYgKzI2MywxNCBAQAogewogCWlmIChwb3J0ID49IExBTl9JT1NUQVJUICYmIHBvcnQgPCBMQU5fSU9FTkQpCiAJCV9uZV9pbnNiKFBPUlQyQUREUl9ORShwb3J0KSwgYWRkciwgY291bnQpOworI2lmIGRlZmluZWQoQ09ORklHX0lERSkgJiYgIWRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQorCWVsc2UgaWYgKChwb3J0ID49IDB4MWYwICYmIHBvcnQgPD0weDFmNykgfHwgcG9ydCA9PSAweDNmNikgeworCQl1bnNpZ25lZCBjaGFyICpidWYgPSBhZGRyOworCQl1bnNpZ25lZCBjaGFyICpwb3J0cCA9IF9fcG9ydDJhZGRyX2F0YShwb3J0KTsKKwkJd2hpbGUgKGNvdW50LS0pCisJCQkqYnVmKysgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0cDsKKwl9CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQogCWVsc2UgaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKIAkJcGNjX2lvcmVhZF9ieXRlKDAsIHBvcnQsICh2b2lkICopYWRkciwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpLApAQCAtMjU0LDYgKzMwMywxMiBAQAogCQlwY2NfaW9yZWFkX3dvcmQoOSwgcG9ydCwgKHZvaWQgKilhZGRyLCBzaXplb2YodW5zaWduZWQgc2hvcnQpLAogCQkJCWNvdW50LCAxKTsKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0lERSkgJiYgIWRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQorCX0gZWxzZSBpZiAoKHBvcnQgPj0gMHgxZjAgJiYgcG9ydCA8PTB4MWY3KSB8fCBwb3J0ID09IDB4M2Y2KSB7CisJCXBvcnRwID0gX19wb3J0MmFkZHJfYXRhKHBvcnQpOworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpidWYrKyA9ICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0cDsKKyNlbmRpZgogCX0gZWxzZSB7CiAJCXBvcnRwID0gUE9SVDJBRERSKHBvcnQpOwogCQl3aGlsZSAoY291bnQtLSkKQEAgLTI4MCw2ICszMzUsMTIgQEAKIAkJcG9ydHAgPSBQT1JUMkFERFJfTkUocG9ydCk7CiAJCXdoaWxlIChjb3VudC0tKQogCQkJX25lX291dGIoKmJ1ZisrLCBwb3J0cCk7CisjaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJfSBlbHNlIGlmICgocG9ydCA+PSAweDFmMCAmJiBwb3J0IDw9MHgxZjcpIHx8IHBvcnQgPT0gMHgzZjYpIHsKKwkJcG9ydHAgPSBfX3BvcnQyYWRkcl9hdGEocG9ydCk7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcG9ydHAgPSAqYnVmKys7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX00zMlJfQ0ZDKQogCX0gZWxzZSBpZiAocG9ydCA+PSBNMzJSX1BDQ19JT1NUQVJUMCAmJiBwb3J0IDw9IE0zMlJfUENDX0lPRU5EMCkgewogCQlwY2NfaW93cml0ZV9ieXRlKDAsIHBvcnQsICh2b2lkICopYWRkciwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpLApAQCAtMzA1LDYgKzM2NiwxMiBAQAogCQlwb3J0cCA9IFBPUlQyQUREUl9ORShwb3J0KTsKIAkJd2hpbGUgKGNvdW50LS0pCiAJCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydHAgPSAqYnVmKys7CisjaWYgZGVmaW5lZChDT05GSUdfSURFKSAmJiAhZGVmaW5lZChDT05GSUdfTTMyUl9DRkMpCisJfSBlbHNlIGlmICgocG9ydCA+PSAweDFmMCAmJiBwb3J0IDw9MHgxZjcpIHx8IHBvcnQgPT0gMHgzZjYpIHsKKwkJcG9ydHAgPSBfX3BvcnQyYWRkcl9hdGEocG9ydCk7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnRwID0gKmJ1ZisrOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBKSAmJiBkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKIAl9IGVsc2UgaWYgKHBvcnQgPj0gTTMyUl9QQ0NfSU9TVEFSVDAgJiYgcG9ydCA8PSBNMzJSX1BDQ19JT0VORDApIHsKIAkJcGNjX2lvd3JpdGVfd29yZCg5LCBwb3J0LCAodm9pZCAqKWFkZHIsIHNpemVvZih1bnNpZ25lZCBzaG9ydCksCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NldHVwX29wc3B1dC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zZXR1cF9vcHNwdXQuYwppbmRleCA2MWQzYjAxLi42MmQ2YjcxIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NldHVwX29wc3B1dC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc2V0dXBfb3BzcHV0LmMKQEAgLTIxOCwxMyArMjE4LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgb3BzcHV0X2xhbnBsZF9pcnFfdHlwZSA9CiB7Ci0JIk9QU1BVVC1QTEQtTEFOLUlSUSIsCi0Jc3RhcnR1cF9vcHNwdXRfbGFucGxkX2lycSwKLQlzaHV0ZG93bl9vcHNwdXRfbGFucGxkX2lycSwKLQllbmFibGVfb3BzcHV0X2xhbnBsZF9pcnEsCi0JZGlzYWJsZV9vcHNwdXRfbGFucGxkX2lycSwKLQltYXNrX2FuZF9hY2tfb3BzcHV0X2xhbnBsZCwKLQllbmRfb3BzcHV0X2xhbnBsZF9pcnEKKwkudHlwZW5hbWUgPSAiT1BTUFVULVBMRC1MQU4tSVJRIiwKKwkuc3RhcnR1cCA9IHN0YXJ0dXBfb3BzcHV0X2xhbnBsZF9pcnEsCisJLnNodXRkb3duID0gc2h1dGRvd25fb3BzcHV0X2xhbnBsZF9pcnEsCisJLmVuYWJsZSA9IGVuYWJsZV9vcHNwdXRfbGFucGxkX2lycSwKKwkuZGlzYWJsZSA9IGRpc2FibGVfb3BzcHV0X2xhbnBsZF9pcnEsCisJLmFjayA9IG1hc2tfYW5kX2Fja19vcHNwdXRfbGFucGxkLAorCS5lbmQgPSBlbmRfb3BzcHV0X2xhbnBsZF9pcnEKIH07CiAKIC8qCkBAIC0zNzQsNyArMzc0LDYgQEAKIAlkaXNhYmxlX29wc3B1dF9wbGRfaXJxKFBMRF9JUlFfU0lPMF9TTkQpOwogI2VuZGlmICAvKiBDT05GSUdfU0VSSUFMX00zMlJfUExEU0lPICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NMzJSX0NGQykKIAkvKiBJTlQjMTogQ0ZDIElSRVEgb24gUExEICovCiAJaXJxX2Rlc2NbUExEX0lSUV9DRklSRVFdLnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKIAlpcnFfZGVzY1tQTERfSVJRX0NGSVJFUV0uY2hpcCA9ICZvcHNwdXRfcGxkX2lycV90eXBlOwpAQCAtMzk4LDggKzM5Nyw2IEBACiAJaXJxX2Rlc2NbUExEX0lSUV9DRkNfRUpFQ1RdLmRlcHRoID0gMTsJLyogZGlzYWJsZSBuZXN0ZWQgaXJxICovCiAJcGxkX2ljdV9kYXRhW2lycTJwbGRpcnEoUExEX0lSUV9DRkNfRUpFQ1QpXS5pY3VjciA9IFBMRF9JQ1VDUl9JRU58UExEX0lDVUNSX0lTTU9EMDI7CS8qICdIJyBlZGdlIHNlbnNlICovCiAJZGlzYWJsZV9vcHNwdXRfcGxkX2lycShQTERfSVJRX0NGQ19FSkVDVCk7Ci0jZW5kaWYgLyogQ09ORklHX00zMlJfQ0ZDICovCi0KIAogCS8qCiAJICogSU5UMCMgaXMgdXNlZCBmb3IgTEFOLCBESU8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKaW5kZXggZmE3ODY1Ni4uNDhkMzc2ZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMKQEAgLTM1MSw3ICszNTEsNyBAQAogCX0KIH0KIAotaW50IF9fZGV2aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1X2lkKQoraW50IF9fY3B1aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1X2lkKQogewogCWludCB0aW1lb3V0OwogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbW0vZmF1bHQuYyBiL2FyY2gvbTMyci9tbS9mYXVsdC5jCmluZGV4IDhkNWY1NTEuLjliOWZlYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbTMyci9tbS9mYXVsdC5jCkBAIC0xNzMsNyArMTczLDcgQEAKIAkJZ290byBnb29kX2FyZWE7CiAJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpCiAJCWdvdG8gYmFkX2FyZWE7Ci0jaWYgMAorCiAJaWYgKGVycm9yX2NvZGUgJiBBQ0VfVVNFUk1PREUpIHsKIAkJLyoKIAkJICogYWNjZXNzaW5nIHRoZSBzdGFjayBiZWxvdyAic3B1IiBpcyBhbHdheXMgYSBidWcuCkBAIC0xODQsNyArMTg0LDcgQEAKIAkJaWYgKGFkZHJlc3MgKyA0IDwgcmVncy0+c3B1KQogCQkJZ290byBiYWRfYXJlYTsKIAl9Ci0jZW5kaWYKKwogCWlmIChleHBhbmRfc3RhY2sodm1hLCBhZGRyZXNzKSkKIAkJZ290byBiYWRfYXJlYTsKIC8qCmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IDdiYzE0NDYuLjcwYTU3N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC0xNyw2ICsxNywxNCBAQAogY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCiAJYm9vbAogCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0CisJYm9vbAorCWRlZmF1bHQgbgorCiBjb25maWcgR0VORVJJQ19IV0VJR0hUCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3N0ZG1hLmMgYi9hcmNoL202OGsvYXRhcmkvc3RkbWEuYwppbmRleCBkNjRiNTgwLi5kMDFkZWI0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvc3RkbWEuYworKysgYi9hcmNoL202OGsvYXRhcmkvc3RkbWEuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiB2b2lkIF9faW5pdCBzdGRtYV9pbml0KHZvaWQpCiB7CiAJc3RkbWFfaXNyID0gTlVMTDsKLQlyZXF1ZXN0X2lycShJUlFfTUZQX0ZEQywgc3RkbWFfaW50LCBJUlFfVFlQRV9TTE9XLAorCXJlcXVlc3RfaXJxKElSUV9NRlBfRkRDLCBzdGRtYV9pbnQsIElSUV9UWVBFX1NMT1cgfCBTQV9TSElSUSwKIAkgICAgICAgICAgICAiU1QtRE1BOiBmbG9wcHkvQUNTSS9JREUvRmFsY29uLVNDU0kiLCBzdGRtYV9pbnQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3N1bjMtaGVhZC5TIGIvYXJjaC9tNjhrL2tlcm5lbC9zdW4zLWhlYWQuUwppbmRleCBiZmZkNjlhLi40YjVmMDUwIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3N1bjMtaGVhZC5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3VuMy1oZWFkLlMKQEAgLTY3LDE2ICs2Nyw2IEBACiAxOglsZWEJaW5pdF90YXNrLCVjdXJwdHIJCQl8IGdldCBpbml0aWFsIHRocmVhZC4uLgogCWxlYQlpbml0X3RocmVhZF91bmlvbitUSFJFQURfU0laRSwlc3AJfCAuLi5hbmQgaXRzIHN0YWNrLgogCi0vKiBjb3B5IGJvb3RpbmZvIHJlY29yZHMgZnJvbSB0aGUgbG9hZGVyIHRvIF9lbmQgKi8KLQlsZWEJX2VuZCwgJWExCi0JbGVhCUJJX1NUQVJULCAlYTAKLQkvKiBudW1iZXIgb2YgbG9uZ3MgdG8gY29weSAqLwotCW1vdmVsCSVhMEAsICVkMAotMToJYWRkbAkjNCwgJWEwCi0JbW92ZWwgICAlYTBALCAlYTFACi0JYWRkbAkjNCwgJWExCi0JZGJmCSVkMCwgMWIKLQogLyogUG9pbnQgTVNQIGF0IGFuIGludmFsaWQgcGFnZSB0byB0cmFwIGlmIGl0J3MgdXNlZC4gLS1tICovCiAJbW92bAkjKFBBR0VTSVpFKSwlZDAKIAltb3ZjCSVkMCwlbXNwCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3VuMy5sZHMgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3VuMy5sZHMKaW5kZXggMjU1MGI0YS4uOGM3ZWNjYiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcwpAQCAtOCw3ICs4LDcgQEAKIGppZmZpZXMgPSBqaWZmaWVzXzY0ICsgNDsKIFNFQ1RJT05TCiB7Ci0gIC4gPSAweEUwMDQwMDA7CisgIC4gPSAweEUwMDIwMDA7CiAgIF90ZXh0ID0gLjsJCQkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLwogICAudGV4dCA6IHsKIAkqKC5oZWFkKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2ttYXAuYyBiL2FyY2gvbTY4ay9tbS9rbWFwLmMKaW5kZXggYjU0ZWYxNy4uNDZiN2Q2MCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL2ttYXAuYworKysgYi9hcmNoL202OGsvbW0va21hcC5jCkBAIC01OSw3ICs1OSw3IEBACiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wLCAqYXJlYTsKIAotCWFyZWEgPSAoc3RydWN0IHZtX3N0cnVjdCAqKWttYWxsb2Moc2l6ZW9mKCphcmVhKSwgR0ZQX0tFUk5FTCk7CisJYXJlYSA9IGttYWxsb2Moc2l6ZW9mKCphcmVhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhcmVhKQogCQlyZXR1cm4gTlVMTDsKIAlhZGRyID0gS01BUF9TVEFSVDsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tZW1vcnkuYyBiL2FyY2gvbTY4ay9tbS9tZW1vcnkuYwppbmRleCAwZjg4ODEyLi4xM2MwYjRhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vbWVtb3J5LmMKKysrIGIvYXJjaC9tNjhrL21tL21lbW9yeS5jCkBAIC0yOTksNyArMjk5LDcgQEAKIAltYWNoX2wyX2ZsdXNoKDApOwogI2VuZGlmCiB9Ci1FWFBPUlRfU1lNQk9MKGNhY2hlX2NsZWFyKTsJLyogcHJvYmFibHkgY2FuIGJlIHVuZXhwb3J0ZWQgKi8KK0VYUE9SVF9TWU1CT0woY2FjaGVfY2xlYXIpOwogCiAKIC8qCkBAIC0zNTIsNyArMzUyLDcgQEAKIAltYWNoX2wyX2ZsdXNoKDEpOwogI2VuZGlmCiB9Ci1FWFBPUlRfU1lNQk9MKGNhY2hlX3B1c2gpOwkvKiBwcm9iYWJseSBjYW4gYmUgdW5leHBvcnRlZCAqLworRVhQT1JUX1NZTUJPTChjYWNoZV9wdXNoKTsKIAogI2lmbmRlZiBDT05GSUdfU0lOR0xFX01FTU9SWV9DSFVOSwogaW50IG1tX2VuZF9vZl9jaHVuayAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL3N1bjNtbXUuYyBiL2FyY2gvbTY4ay9tbS9zdW4zbW11LmMKaW5kZXggYWM2NjQwYS4uNmE2NTEzYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL3N1bjNtbXUuYworKysgYi9hcmNoL202OGsvbW0vc3VuM21tdS5jCkBAIC00OSw3ICs0OSw2IEBACiAJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU10gPSB7IDAsIH07CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCi0KICNpZmRlZiBURVNUX1ZFUklGWV9BUkVBCiAJd3Bfd29ya3Nfb2sgPSAwOwogI2VuZGlmCkBAIC05NCw3ICs5MywxMSBAQAogCS8qIG1lbW9yeSBzaXppbmcgaXMgYSBoYWNrIHN0b2xlbiBmcm9tIG1vdG9yb2xhLmMuLiAgaG9wZSBpdCB3b3JrcyBmb3IgdXMgKi8KIAl6b25lc19zaXplW1pPTkVfRE1BXSA9ICgodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUOwogCi0JZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7CisJLyogSSByZWFsbHkgd2lzaCBJIGtuZXcgd2h5IHRoZSBmb2xsb3dpbmcgY2hhbmdlIG1hZGUgdGhpbmdzIGJldHRlci4uLiAgLS0gU2FtICovCisvKglmcmVlX2FyZWFfaW5pdCh6b25lc19zaXplKTsgKi8KKwlmcmVlX2FyZWFfaW5pdF9ub2RlKDAsIE5PREVfREFUQSgwKSwgem9uZXNfc2l6ZSwKKwkJCSAgICAoX19wYShQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkgKyAxLCBOVUxMKTsKKwogCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L0tjb25maWcgYi9hcmNoL202OGtub21tdS9LY29uZmlnCmluZGV4IGFhNzBkZGUuLjI1OTkzYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L0tjb25maWcKKysrIGIvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTQgQEAKIAlib29sCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKKwlib29sCisJZGVmYXVsdCBuCisKIGNvbmZpZyBHRU5FUklDX0ZJTkRfTkVYVF9CSVQKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGQ4YWY4NThmLi5iYmQzODZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMTY1LDYgKzE2NSw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTCBpZiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBNQUNIX0RFQ1NUQVRJT04KIAlib29sICJERUNzdGF0aW9ucyIKQEAgLTIyNSw2ICsyMjYsNyBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFNZU19TVVBQT1JUU18xMDBIWgorCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAloZWxwCiAJIFRoaXMgYSBmYW1pbHkgb2YgbWFjaGluZXMgYmFzZWQgb24gdGhlIE1JUFMgUjQwMzAgY2hpcHNldCB3aGljaCB3YXMKIAkgdXNlZCBieSBzZXZlcmFsIHZlbmRvcnMgdG8gYnVpbGQgUklTQy9vcyBhbmQgV2luZG93cyBOVCB3b3Jrc3RhdGlvbnMuCkBAIC00NTksNiArNDYxLDExIEBACiAJc2VsZWN0IFBOWDg1NTAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAorY29uZmlnIFBOWDg1NTBfU1RCODEwCisJYm9vbCAiU3VwcG9ydCBmb3IgUGhpbGlwcyBQTlg4NTUwIGJhc2VkIFNUQjgxMCBib2FyZCIKKwlzZWxlY3QgUE5YODU1MAorCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCiBjb25maWcgRERCNTQ3NwogCWJvb2wgIk5FQyBEREIgVnJjLTU0NzciCiAJc2VsZWN0IEREQjVYWFhfQ09NTU9OCkBAIC00ODIsNiArNDg5LDcgQEAKIAlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTCBpZiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBQTUNfWU9TRU1JVEUKIAlib29sICJQTUMtU2llcnJhIFlvc2VtaXRlIGV2YWwgYm9hcmQiCkBAIC01MTUsNiArNTIzLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCWhlbHAKIAkgIFFlbXUgaXMgYSBzb2Z0d2FyZSBlbXVsYXRvciB3aGljaCBhbW9uZyBvdGhlciBhcmNoaXRlY3R1cmVzIGFsc28KIAkgIGNhbiBzaW11bGF0ZSBhIE1JUFMzMiA0S2Mgc3lzdGVtLiAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZQpAQCAtNzAxLDggKzcxMCw4IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAKLWNvbmZpZyBTTklfUk0yMDBfUENJCi0JYm9vbCAiU05JIFJNMjAwIFBDSSIKK2NvbmZpZyBTTklfUk0KKwlib29sICJTTkkgUk0yMDAvMzAwLzQwMCIKIAlzZWxlY3QgQVJDIGlmIENQVV9MSVRUTEVfRU5ESUFOCiAJc2VsZWN0IEFSQzMyIGlmIENQVV9MSVRUTEVfRU5ESUFOCiAJc2VsZWN0IEFSQ0hfTUFZX0hBVkVfUENfRkRDCkBAIC03MjUsOCArNzM0LDggQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAloZWxwCi0JICBUaGUgU05JIFJNMjAwIFBDSSB3YXMgYSBNSVBTLWJhc2VkIHBsYXRmb3JtIG1hbnVmYWN0dXJlZCBieSBTaWVtZW5zCi0JICBOaXhkb3JmIEluZm9ybWF0aW9uc3N5c3RlbWUgKFNOSSksIHBhcmVudCBjb21wYW55IG9mIFB5cmFtaWQKKwkgIFRoZSBTTkkgUk0yMDAvMzAwLzQwMCBhcmUgTUlQUy1iYXNlZCBtYWNoaW5lcyBtYW51ZmFjdHVyZWQgYnkKKwkgIFNpZW1lbnMgTml4ZG9yZiBJbmZvcm1hdGlvbnNzeXN0ZW1lIChTTkkpLCBwYXJlbnQgY29tcGFueSBvZiBQeXJhbWlkCiAJICBUZWNobm9sb2d5IGFuZCBub3cgaW4gdHVybiBtZXJnZWQgd2l0aCBGdWppdHN1LiAgU2F5IFkgaGVyZSB0bwogCSAgc3VwcG9ydCB0aGlzIG1hY2hpbmUgdHlwZS4KIApAQCAtNzU0LDYgKzc2Myw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KIAlzZWxlY3QgVE9TSElCQV9CT0FSRFMKKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJaGVscAogCSAgVGhpcyBUb3NoaWJhIGJvYXJkIGlzIGJhc2VkIG9uIHRoZSBUWDQ5MjcgcHJvY2Vzc29yLiBTYXkgWSBoZXJlIHRvCiAJICBzdXBwb3J0IHRoaXMgbWFjaGluZSB0eXBlCkBAIC03NzMsNiArNzgzLDcgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KIAlzZWxlY3QgVE9TSElCQV9CT0FSRFMKKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJaGVscAogCSAgVGhpcyBUb3NoaWJhIGJvYXJkIGlzIGJhc2VkIG9uIHRoZSBUWDQ5MzggcHJvY2Vzc29yLiBTYXkgWSBoZXJlIHRvCiAJICBzdXBwb3J0IHRoaXMgbWFjaGluZSB0eXBlCkBAIC04MTksNiArODMwLDE0IEBACiBjb25maWcgUldTRU1fWENIR0FERF9BTEdPUklUSE0KIAlib29sCiAKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKKwlib29sCisJZGVmYXVsdCBuCisKIGNvbmZpZyBHRU5FUklDX0ZJTkRfTkVYVF9CSVQKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0xMDYyLDE2ICsxMDgxLDE2IEBACiAKIGNvbmZpZyBBUkNfQ09OU09MRQogCWJvb2wgIkFSQyBjb25zb2xlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTR0lfSVAyMiB8fCBTTklfUk0yMDBfUENJCisJZGVwZW5kcyBvbiBTR0lfSVAyMiB8fCBTTklfUk0KIAogY29uZmlnIEFSQ19NRU1PUlkKIAlib29sCi0JZGVwZW5kcyBvbiBNQUNIX0pBWlogfHwgU05JX1JNMjAwX1BDSSB8fCBTR0lfSVAzMgorCWRlcGVuZHMgb24gTUFDSF9KQVpaIHx8IFNOSV9STSB8fCBTR0lfSVAzMgogCWRlZmF1bHQgeQogCiBjb25maWcgQVJDX1BST01MSUIKIAlib29sCi0JZGVwZW5kcyBvbiBNQUNIX0pBWlogfHwgU05JX1JNMjAwX1BDSSB8fCBTR0lfSVAyMiB8fCBTR0lfSVAzMgorCWRlcGVuZHMgb24gTUFDSF9KQVpaIHx8IFNOSV9STSB8fCBTR0lfSVAyMiB8fCBTR0lfSVAzMgogCWRlZmF1bHQgeQogCiBjb25maWcgQVJDNjQKQEAgLTE1NDksNiArMTU2OCwyMCBAQAogCWRlcGVuZHMgb24gTUlQU19NVAogCWRlZmF1bHQgeQogCitjb25maWcgTUlQU19NVF9TTVRDX0lOU1RBTlRfUkVQTEFZCisJYm9vbCAiTG93LWxhdGVuY3kgRGlzcGF0Y2ggb2YgRGVmZXJyZWQgU01UQyBJUElzIgorCWRlcGVuZHMgb24gTUlQU19NVF9TTVRDCisJZGVmYXVsdCB5CisJaGVscAorCSAgU01UQyBwc2V1ZG8taW50ZXJydXB0cyBiZXR3ZWVuIFRDcyBhcmUgZGVmZXJyZWQgYW5kIHF1ZXVlZAorCSAgaWYgdGhlIHRhcmdldCBUQyBpcyBpbnRlcnJ1cHQtaW5oaWJpdGVkIChJWE1UKS4gSW4gdGhlIGZpcnN0CisJICBTTVRDIHByb3RvdHlwZXMsIHRoZXNlIHF1ZXVlZCBJUElzIHdlcmUgc2VydmljZWQgb24gcmV0dXJuCisJICB0byB1c2VyIG1vZGUsIG9yIG9uIGVudHJ5IGludG8gdGhlIGtlcm5lbCBpZGxlIGxvb3AuIFRoZQorCSAgSU5TVEFOVF9SRVBMQVkgb3B0aW9uIGRpc3BhdGNoZXMgdGhlbSBhcyBwYXJ0IG9mIGxvY2FsX2lycV9yZXN0b3JlKCkKKwkgIHByb2Nlc3NpbmcsIHdoaWNoIGFkZHMgcnVudGltZSBvdmVyaGVhZCAoaGVuY2UgdGhlIG9wdGlvbiB0byB0dXJuCisJICBpdCBvZmYpLCBidXQgZW5zdXJlcyB0aGF0IElQSXMgYXJlIGhhbmRsZWQgcHJvbXB0bHkgZXZlbiB1bmRlcgorCSAgaGVhdnkgSS9PIGludGVycnVwdCBsb2FkLgorCiBjb25maWcgTUlQU19WUEVfTE9BREVSX1RPTQogCWJvb2wgIkxvYWQgVlBFIHByb2dyYW0gaW50byBtZW1vcnkgaGlkZGVuIGZyb20gbGludXgiCiAJZGVwZW5kcyBvbiBNSVBTX1ZQRV9MT0FERVIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9NYWtlZmlsZQppbmRleCA2NDFhYTMwLi5jNjhiNWQzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL01ha2VmaWxlCkBAIC00NjMsNiArNDYzLDExIEBACiAjY2ZsYWdzLSQoQ09ORklHX1BOWDg1NTBfSkJTKQkrPSAtSWluY2x1ZGUvYXNtLW1pcHMvbWFjaC1wbng4NTUwCiBsb2FkLSQoQ09ORklHX1BOWDg1NTBfSkJTKQkrPSAweGZmZmZmZmZmODAwNjAwMDAKIAorIyBQaGlsaXBzIFBOWDg1NTAgU1RCODEwIGJvYXJkCisjCitsaWJzLSQoQ09ORklHX1BOWDg1NTBfU1RCODEwKQkrPSBhcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL3N0YjgxMC8KK2xvYWQtJChDT05GSUdfUE5YODU1MF9TVEI4MTApCSs9IDB4ZmZmZmZmZmY4MDA2MDAwMAorCiAjIE5FQyBFTU1BMlJIIGJvYXJkcwogIwogY29yZS0kKENPTkZJR19FTU1BMlJIKSAgICAgICAgICArPSBhcmNoL21pcHMvZW1tYTJyaC9jb21tb24vCkBAIC01NjksMTEgKzU3NCwxMSBAQAogbG9hZC0kKENPTkZJR19TSUJZVEVfQklHU1VSKQk6PSAweGZmZmZmZmZmODAxMDAwMDAKIAogIwotIyBTTkkgUk0yMDAgUENJCisjIFNOSSBSTQogIwotY29yZS0kKENPTkZJR19TTklfUk0yMDBfUENJKQkrPSBhcmNoL21pcHMvc25pLwotY2ZsYWdzLSQoQ09ORklHX1NOSV9STTIwMF9QQ0kpCSs9IC1JaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtMjAwCi1sb2FkLSQoQ09ORklHX1NOSV9STTIwMF9QQ0kpCSs9IDB4ZmZmZmZmZmY4MDYwMDAwMAorY29yZS0kKENPTkZJR19TTklfUk0pCQkrPSBhcmNoL21pcHMvc25pLworY2ZsYWdzLSQoQ09ORklHX1NOSV9STSkJCSs9IC1JaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtCitsb2FkLSQoQ09ORklHX1NOSV9STSkJCSs9IDB4ZmZmZmZmZmY4MDYwMDAwMAogCiAjCiAjIFRvc2hpYmEgSk1SLVRYMzkyNyBib2FyZApAQCAtNjE4LDcgKzYyMyw3IEBACiAKIGlmZGVmIENPTkZJR19NSVBTCiBDSEVDS0ZMQUdTICs9ICQoc2hlbGwgJChDQykgJChDRkxBR1MpIC1kTSAtRSAteGMgL2Rldi9udWxsIHwgXAotCWVncmVwIC12dyAnX19HTlVDXyhNQUpPUnxNSU5PUnxQQVRDSExFVkVMKV9fJyB8IFwKKwllZ3JlcCAtdncgJ19fR05VQ18ofE1JTk9SX3xQQVRDSExFVkVMXylfJyB8IFwKIAlzZWQgLWUgJ3MvXlwjZGVmaW5lIC8tRC8nIC1lICJzLyAvPScvIiAtZSAicy8kJC8nLyIpCiBpZmRlZiBDT05GSUdfNjRCSVQKIENIRUNLRkxBR1MJCSs9IC1tNjQKQEAgLTY5NSw3ICs3MDAsNyBAQAogYWxsOgl2bWxpbnV4LmJpbgogZW5kaWYKIAotaWZkZWYgQ09ORklHX1NOSV9STTIwMF9QQ0kKK2lmZGVmIENPTkZJR19TTklfUk0KIGFsbDoJdm1saW51eC5lY29mZgogZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcGNpLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wY2kuYwppbmRleCBkYTU5MWY2Li45ZjhjZTA4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wY2kuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wY2kuYwpAQCAtMzksMTUgKzM5LDE1IEBACiAKIC8qIFRCRCAqLwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfaW9fcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gUENJX0lPX1NUQVJULAotCS5lbmQJPSBQQ0lfSU9fRU5ELAorCS5zdGFydAk9IChyZXNvdXJjZV9zaXplX3QpUENJX0lPX1NUQVJULAorCS5lbmQJPSAocmVzb3VyY2Vfc2l6ZV90KVBDSV9JT19FTkQsCiAJLm5hbWUJPSAiUENJIElPIHNwYWNlIiwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9tZW1fcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gUENJX01FTV9TVEFSVCwKLQkuZW5kCT0gUENJX01FTV9FTkQsCisJLnN0YXJ0CT0gKHJlc291cmNlX3NpemVfdClQQ0lfTUVNX1NUQVJULAorCS5lbmQJPSAocmVzb3VyY2Vfc2l6ZV90KVBDSV9NRU1fRU5ELAogCS5uYW1lCT0gIlBDSSBtZW1vcnkgc3BhY2UiLAogCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnCmluZGV4IDM1OTMxYmUuLmFjMTg5MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2F0bGFzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9hdGxhc19kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKaW5kZXggYmEzYmY3My4uOTU1NDI1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCkBAIC01Nyw3ICs1Nyw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZwppbmRleCBlNTM1ODEyLi40OTU5MGQ0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCmluZGV4IGFkZjFlOGMuLjA2MDdmYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwppbmRleCA0ZmQyOWZmLi4xYTU3YjMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKaW5kZXggMDI1Yjk2MC4uMDA1NWVjNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCmluZGV4IDgwYzlkZDkuLmM0MTgyM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwppbmRleCA2Y2FhOTBiLi43ZDZkOTIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKaW5kZXggYzZjYWU4Ni4uYzY4MWM5MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKaW5kZXggNzJmMjQwMC4uZGQ0YmIwMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZwppbmRleCBmZTEzODdlLi44YTMxY2U0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZwppbmRleCA2MTMzYzI4Li42ZmE0ZjkxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZW1tYTJyaF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9lbW1hMnJoX2RlZmNvbmZpZwppbmRleCBhNDg0YjdkLi40YzlkMDQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9lbW1hMnJoX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9lbW1hMnJoX2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ldjY0MTIwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCmluZGV4IDIxYmZjZGUuLmQ1YjQ5NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2V4Y2l0ZV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9leGNpdGVfZGVmY29uZmlnCmluZGV4IDFhNWIwNmMuLjY5NzE0MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2V4Y2l0ZV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXhjaXRlX2RlZmNvbmZpZwpAQCAtNjAsNyArNjAsNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCmluZGV4IDIxZDUzZTAuLmY5ODEyZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKaW5kZXggZTNlOTRjNy4uOTYwOTBmMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwppbmRleCBiNGFiMmJlLi42MWUwNjlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qYWd1YXItYXR4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCmluZGV4IDlkNGQxN2EuLjg4OTY2NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2phenpfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvamF6el9kZWZjb25maWcKaW5kZXggMzgyMDgzZS4uODM1NzY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvamF6el9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvamF6el9kZWZjb25maWcKQEAgLTU3LDcgKzU3LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZwppbmRleCBkMDM3NDY2Li41MGZkOTU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogQ09ORklHX1RPU0hJQkFfSk1SMzkyNz15CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnCmluZGV4IDFkYjgyNDkuLjA1ZjUzOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCmluZGV4IDEwMWU4MDMuLjk2ZTk0MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKQEAgLTU3LDcgKzU3LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApAQCAtNjQ0LDcgKzY0NCw4NSBAQAogIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCi0jIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTAKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCiAjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZwppbmRleCBhM2NiZDIzYi4uMDNlZmNmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKaW5kZXggNjU3MGI0Ny4uZTQyMjFhYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZwppbmRleCA0NDBkNjVmLi4zMmIxYWZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZwppbmRleCBjMmM3YWU3Li5lYmU3NWMxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2NfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnCmluZGV4IDY3ZWZlMjcuLjVhOTYwM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcKaW5kZXggYTEwZjM0ZC4uNDZhOTQyYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2dfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwppbmRleCA5ZTY3MmY2Li43ZDNjNjg4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKaW5kZXggZDBjMGY0YS4uYTc3ODA1YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCmluZGV4IDNkYjc0MjcuLjgzMThkNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKaW5kZXggMjgwYTgwMC4uZmNiOGZlYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZwpAQCAtNTcsNyArNTcsNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXN0YjgxMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXN0YjgxMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4YTJjMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtc3RiODEwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyMjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOQorIyBUaHUgRGVjICA3IDE2OjM1OjEyIDIwMDYKKyMKK0NPTkZJR19NSVBTPXkKKworIworIyBNYWNoaW5lIHNlbGVjdGlvbgorIworIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0FUTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fT0NFTE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PTUVOQ09fT0NFTE9UXzMgaXMgbm90IHNldAorIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT01FTkNPX09DRUxPVF9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKK0NPTkZJR19QTlg4NTUwX1NUQjgxMD15CisjIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19RRU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9QVFNXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKK0NPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CitDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1BOWDg1NTA9eQorQ09ORklHX1NPQ19QTlg4NTUwPXkKK0NPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKKworIworIyBDUFUgc2VsZWN0aW9uCisjCitDT05GSUdfQ1BVX01JUFMzMl9SMT15CisjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQorQ09ORklHX0NQVV9NSVBTMzI9eQorQ09ORklHX0NQVV9NSVBTUjE9eQorQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorCisjCisjIEtlcm5lbCB0eXBlCisjCitDT05GSUdfMzJCSVQ9eQorIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CitDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CisjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19MTFNDPXkKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15CitDT05GSUdfSFo9MjUwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBCbG9jayBsYXllcgorIworQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKKyMKK0NPTkZJR19IV19IQVNfUENJPXkKK0NPTkZJR19QQ0k9eQorIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisKKyMKKyMgUENJIEhvdHBsdWcgU3VwcG9ydAorIworCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfVFJBRF9TSUdOQUxTPXkKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ0Q9bQorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERVNDU0k9eQorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQorQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQ9eQorQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0hQVDM2Nj15CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKKyMgQ09ORklHX0lERURNQV9JVkIgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCitDT05GSUdfSVNDU0lfVENQPW0KKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisKKyMKKyMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKK0NPTkZJR19OQVRTRU1JPXkKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1BOWDhYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDA9eQorQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQorQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15CitDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKKyMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKworIworIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisKKyMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjCisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKworIworIyBETUEgRGV2aWNlcworIworCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9bQorIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TTEFCPXkKKyMgQ09ORklHX0RFQlVHX1NMQUJfTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorQ09ORklHX0hFQURFUlNfQ0hFQ0s9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMxLDM4NDAwbjgga2dkYj10dHlTMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfVU5DQUNIRUQgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT1tCisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9bQorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19QTElTVD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCmluZGV4IDY0YjlmYmYuLjViYzMyNDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCkBAIC01Nyw3ICs1Nyw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKaW5kZXggOWIwZGFiOC4uYWE2MWYwZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKaW5kZXggZGQwMjk2MC4uZjllOGY0MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiBDT05GSUdfVE9TSElCQV9SQlRYNDkzOD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKaW5kZXggZDhhNDk4ZC4uNDk2YWE2NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotQ09ORklHX1NOSV9STTIwMF9QQ0k9eQorQ09ORklHX1NOSV9STT15CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCmluZGV4IDgwNWE0ZmUuLmUzM2MxNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3NlYWRfZGVmY29uZmlnCmluZGV4IDZmY2I2NTYuLjgzZmI5MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3NlYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3NlYWRfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCmluZGV4IGRjMzEyZjEuLmU5ZDRlYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZwppbmRleCA4NTYxNWQ5Li5jMTk1OTdmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcKaW5kZXggZjdlODE5NC4uOTdkOTRmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCkBAIC01Nyw3ICs1Nyw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKaW5kZXggODYzZjZhNy4uNTUzNzM0YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd29ya3BhZF9kZWZjb25maWcKQEAgLTU5LDcgKzU5LDcgQEAKICMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NOSV9STTIwMF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3dycHBtY19kZWZjb25maWcKaW5kZXggYzEwMjY3ZC4uZDNkZmI3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy93cnBwbWNfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZwppbmRleCA0ZDNjMTMyLi5iOWY3NGQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYyBiL2FyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYwppbmRleCAzMDI3Y2U3Li4zYWEwMWQyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJYWRkciArPSBQQUdFX1NJWkU7CiAJfQogCi0JcHJpbnRrKCJGcmVlaW5nIHVudXNlZCBQUk9NIG1lbW9yeTogJWxkayBmcmVlZFxuIiwKKwlwcmludGsoIkZyZWVpbmcgdW51c2VkIFBST00gbWVtb3J5OiAlbGRrYiBmcmVlZFxuIiwKIAkgICAgICAgKGVuZCAtIFBBR0VfU0laRSkgPj4gMTApOwogCiAJcmV0dXJuIGVuZCAtIFBBR0VfU0laRTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWZjb25maWcgYi9hcmNoL21pcHMvZGVmY29uZmlnCmluZGV4IDIxZDUzZTAuLmY5ODEyZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2RlZmNvbmZpZwpAQCAtNTksNyArNTksNyBAQAogIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2FwbS5jIGIvYXJjaC9taXBzL2tlcm5lbC9hcG0uYwppbmRleCA1MjhlNzMxLi5iYTE2ZDA3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2FwbS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvYXBtLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogewogCXN0cnVjdCBhcG1fdXNlciAqYXM7CiAKLQlhcyA9IChzdHJ1Y3QgYXBtX3VzZXIgKilremFsbG9jKHNpemVvZigqYXMpLCBHRlBfS0VSTkVMKTsKKwlhcyA9IGt6YWxsb2Moc2l6ZW9mKCphcyksIEdGUF9LRVJORUwpOwogCWlmIChhcykgewogCQkvKgogCQkgKiBYWFggLSB0aGlzIGlzIGEgdGlueSBiaXQgYnJva2VuLCB3aGVuIHdlIGNvbnNpZGVyIEJTRApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwppbmRleCBhMmUwOTVhLi45YTc4MTFkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUworKysgYi9hcmNoL21pcHMva2VybmVsL2hlYWQuUwpAQCAtMTM4LDcgKzEzOCw3IEBACiBFWFBPUlQoc3RleHQpCQkJCQkjIHVzZWQgZm9yIHByb2ZpbGluZwogRVhQT1JUKF9zdGV4dCkKIAotI2lmIGRlZmluZWQoQ09ORklHX1FFTVUpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfU0lNKQorI2lmZGVmIENPTkZJR19NSVBTX1NJTQogCS8qCiAJICogR2l2ZSB1cyBhIGZpZ2h0aW5nIGNoYW5jZSBvZiBydW5uaW5nIGlmIGV4ZWN1dGlvbiBiZWluZ3MgYXQgdGhlCiAJICoga2VybmVsIGxvYWQgYWRkcmVzcy4gIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBwbGF0Zm9ybSBkb2VzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lyaXhlbGYuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeGVsZi5jCmluZGV4IDFiYmVmYmYuLjM3Y2FkNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJpeGVsZi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeGVsZi5jCkBAIC0xMTQ1LDcgKzExNDUsNyBAQAogCXBzaW5mby5wcl9waWQgPSBwcnN0YXR1cy5wcl9waWQgPSBjdXJyZW50LT5waWQ7CiAJcHNpbmZvLnByX3BwaWQgPSBwcnN0YXR1cy5wcl9wcGlkID0gY3VycmVudC0+cGFyZW50LT5waWQ7CiAJcHNpbmZvLnByX3BncnAgPSBwcnN0YXR1cy5wcl9wZ3JwID0gcHJvY2Vzc19ncm91cChjdXJyZW50KTsKLQlwc2luZm8ucHJfc2lkID0gcHJzdGF0dXMucHJfc2lkID0gY3VycmVudC0+c2lnbmFsLT5zZXNzaW9uOworCXBzaW5mby5wcl9zaWQgPSBwcnN0YXR1cy5wcl9zaWQgPSBwcm9jZXNzX3Nlc3Npb24oY3VycmVudCk7CiAJaWYgKGN1cnJlbnQtPnBpZCA9PSBjdXJyZW50LT50Z2lkKSB7CiAJCS8qCiAJCSAqIFRoaXMgaXMgdGhlIHJlY29yZCBmb3IgdGhlIGdyb3VwIGxlYWRlci4gIEFkZCBpbiB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jIGIvYXJjaC9taXBzL2tlcm5lbC9rc3BkLmMKaW5kZXggMmM4MjQxMi4uNTkyOWY4ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCkBAIC0zMDEsNyArMzAxLDcgQEAKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgc2V0OwogCQlpID0gaiAqIF9fTkZEQklUUzsKLQkJaWYgKGkgPj0gZmR0LT5tYXhfZmRzZXQgfHwgaSA+PSBmZHQtPm1heF9mZHMpCisJCWlmIChpID49IGZkdC0+bWF4X2ZkcykKIAkJCWJyZWFrOwogCQlzZXQgPSBmZHQtPm9wZW5fZmRzLT5mZHNfYml0c1tqKytdOwogCQl3aGlsZSAoc2V0KSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IGIwNjFjOWEuLmRlM2ZhZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC00NDAsMTQgKzQ0MCwyNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX01JUFMzMl9OMzIKLWFzbWxpbmthZ2UgbG9uZyBzeXNuMzJfc2VtY3RsKGludCBzZW1pZCwgaW50IHNlbW51bSwgaW50IGNtZCwgdW5pb24gc2VtdW4gYXJnKQorYXNtbGlua2FnZSBsb25nIHN5c24zMl9zZW1jdGwoaW50IHNlbWlkLCBpbnQgc2VtbnVtLCBpbnQgY21kLCB1MzIgYXJnKQogewogCS8qIGNvbXBhdF9zeXNfc2VtY3RsIGV4cGVjdHMgYSBwb2ludGVyIHRvIHVuaW9uIHNlbXVuICovCiAJdTMyIF9fdXNlciAqdXB0ciA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZih1MzIpKTsKLQlpZiAocHV0X3VzZXIocHRyX3RvX2NvbXBhdChhcmcuX19wYWQpLCB1cHRyKSkKKwlpZiAocHV0X3VzZXIoYXJnLCB1cHRyKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIGNvbXBhdF9zeXNfc2VtY3RsKHNlbWlkLCBzZW1udW0sIGNtZCwgdXB0cik7CiB9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNuMzJfbXNnc25kKGludCBtc3FpZCwgdTMyIG1zZ3AsIHVuc2lnbmVkIG1zZ3N6LCBpbnQgbXNnZmxnKQoreworCXJldHVybiBjb21wYXRfc3lzX21zZ3NuZChtc3FpZCwgbXNnc3osIG1zZ2ZsZywgY29tcGF0X3B0cihtc2dwKSk7Cit9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNuMzJfbXNncmN2KGludCBtc3FpZCwgdTMyIG1zZ3AsIHNpemVfdCBtc2dzeiwgaW50IG1zZ3R5cCwKKwkJCSAgICAgIGludCBtc2dmbGcpCit7CisJcmV0dXJuIGNvbXBhdF9zeXNfbXNncmN2KG1zcWlkLCBtc2dzeiwgbXNndHlwLCBtc2dmbGcsIElQQ182NCwKKwkJCQkgY29tcGF0X3B0cihtc2dwKSk7Cit9CiAjZW5kaWYKIAogc3RydWN0IHN5c2N0bF9hcmdzMzIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbWlwc19rc3ltcy5jIGIvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMKaW5kZXggZjQ0YTAxMy4uMmVmODU3YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9taXBzX2tzeW1zLmMKQEAgLTQ2LDUgKzQ2LDcgQEAKIEVYUE9SVF9TWU1CT0woX19zdHJubGVuX3VzZXJfYXNtKTsKIAogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWwpOworRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKTsKK0VYUE9SVF9TWU1CT0woX19jc3VtX3BhcnRpYWxfY29weV91c2VyKTsKIAogRVhQT1JUX1NZTUJPTChpbnZhbGlkX3B0ZV90YWJsZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Jlc2V0LmMgYi9hcmNoL21pcHMva2VybmVsL3Jlc2V0LmMKaW5kZXggNjIxMDM3ZC4uMDYwNTYzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcmVzZXQuYwpAQCAtMjMsNiArMjMsOCBAQAogdm9pZCAoKl9tYWNoaW5lX2hhbHQpKHZvaWQpOwogdm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCk7CiAKK0VYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKKwogdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKIHsKIAlpZiAoX21hY2hpbmVfcmVzdGFydCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKaW5kZXggOGM4YzgzMi4uNWE5OWUzZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKQEAgLTQxNSw3ICs0MTUsNyBAQAogCWludCBtaW5vcjsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAKLQltaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAKIAlwb2xsX3dhaXQoZmlsZSwgJmNoYW5uZWxfd3FzW21pbm9yXS5ydF9xdWV1ZSwgd2FpdCk7CiAJcG9sbF93YWl0KGZpbGUsICZjaGFubmVsX3dxc1ttaW5vcl0ubHhfcXVldWUsIHdhaXQpOwpAQCAtNDM3LDcgKzQzNyw3IEBACiBzdGF0aWMgc3NpemVfdCBmaWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLCBzaXplX3QgY291bnQsCiAJCQkgbG9mZl90ICogcHBvcykKIHsKLQlpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAogCS8qIGRhdGEgYXZhaWxhYmxlPyAqLwogCWlmICghcnRseF9yZWFkX3BvbGwobWlub3IsIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyAwIDogMSkpIHsKQEAgLTQ1NCw3ICs0NTQsNyBAQAogCXN0cnVjdCBydGx4X2NoYW5uZWwgKnJ0OwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCi0JbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCW1pbm9yID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXJ0ID0gJnJ0bHgtPmNoYW5uZWxbbWlub3JdOwogCiAJLyogYW55IHNwYWNlIGxlZnQuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwppbmRleCAzNDU2N2Q4Li5hN2JmZjJhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCkBAIC0xODcsOCArMTg3LDggQEAKIAlQVFIJc3lzbjMyX3NlbWN0bAogCVBUUglzeXNfc2htZHQJCQkvKiA2MDY1ICovCiAJUFRSCXN5c19tc2dnZXQKLQlQVFIJY29tcGF0X3N5c19tc2dzbmQKLQlQVFIJY29tcGF0X3N5c19tc2dyY3YKKwlQVFIJc3lzbjMyX21zZ3NuZAorCVBUUglzeXNuMzJfbXNncmN2CiAJUFRSCWNvbXBhdF9zeXNfbXNnY3RsCiAJUFRSCWNvbXBhdF9zeXNfZmNudGwJCS8qIDYwNzAgKi8KIAlQVFIJc3lzX2Zsb2NrCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtcC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwppbmRleCBmMmE4NzAxLi4wNTU1ZmM1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKQEAgLTI3MSw3ICsyNzEsNyBAQAogICogYW5kIGtlZXAgY29udHJvbCB1bnRpbCAiY3B1X29ubGluZShjcHUpIiBpcyBzZXQuICBOb3RlOiBjcHUgaXMKICAqIHBoeXNpY2FsLCBub3QgbG9naWNhbC4KICAqLwotaW50IF9fZGV2aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQoraW50IF9fY3B1aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwppbmRleCA4MDJmZWJlLi42YTg1N2JmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0yNjEsNiArMjYyLDcgQEAKIAkJICAgIH0KIAkJfQogCQl3cml0ZV9jMF9tdnBjb250cm9sKHJlYWRfYzBfbXZwY29udHJvbCgpIHwgTVZQQ09OVFJPTF9TVExCKTsKKwkJZWhiKCk7CiAKIAkJLyoKIAkJICogU2V0dXAga2VybmVsIGRhdGEgc3RydWN0dXJlcyB0byB1c2Ugc29mdHdhcmUgdG90YWwsCkBAIC0yNjksOSArMjcxLDEyIEBACiAJCSAqIG9mIHRoZWlyIGluaXRpYWxpemF0aW9uIGluIHNtdGNfY3B1X3NldHVwKCkuCiAJCSAqLwogCi0JCXRsYnNpeiA9IHRsYnNpeiAmIDB4M2Y7CS8qIE1JUFMzMiBsaW1pdHMgVExCIGluZGljZXMgdG8gNjQgKi8KLQkJY3B1X2RhdGFbMF0udGxic2l6ZSA9IHRsYnNpejsKKwkJLyogTUlQUzMyIGxpbWl0cyBUTEIgaW5kaWNlcyB0byA2NCAqLworCQlpZiAodGxic2l6ID4gNjQpCisJCQl0bGJzaXogPSA2NDsKKwkJY3B1X2RhdGFbMF0udGxic2l6ZSA9IGN1cnJlbnRfY3B1X2RhdGEudGxic2l6ZSA9IHRsYnNpejsKIAkJc210Y19zdGF0dXMgfD0gU01UQ19UTEJfU0hBUkVEOworCQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiAKIAkJcHJpbnRrKCJUTEIgb2YgJWQgZW50cnkgcGFpcnMgc2hhcmVkIGJ5ICVkIFZQRXNcbiIsCiAJCQl0bGJzaXosIHZwZXMpOwpAQCAtMTAxNiw2ICsxMDIxLDM1IEBACiAgKiBTTVRDLXNwZWNpZmljIGhhY2tzIGludm9rZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIGtlcm5lbC4KICAqLwogCit2b2lkIHNtdGNfaXBpX3JlcGxheSh2b2lkKQoreworCS8qCisJICogVG8gdGhlIGV4dGVudCB0aGF0IHdlJ3ZlIGV2ZXIgdHVybmVkIGludGVycnVwdHMgb2ZmLAorCSAqIHdlIG1heSBoYXZlIGFjY3VtdWxhdGVkIGRlZmVycmVkIElQSXMuICBUaGlzIGlzIHN1YnRsZS4KKwkgKiBJZiB3ZSB1c2UgdGhlIHNtdGNfaXBpX3FkZXB0aCgpIG1hY3JvLCB3ZSdsbCBnZXQgYW4KKwkgKiBleGFjdCBudW1iZXIgLSBidXQgd2UnbGwgYWxzbyBkaXNhYmxlIGludGVycnVwdHMKKwkgKiBhbmQgY3JlYXRlIGEgd2luZG93IG9mIGZhaWx1cmUgd2hlcmUgYSBuZXcgSVBJIGdldHMKKwkgKiBxdWV1ZWQgYWZ0ZXIgd2UgdGVzdCB0aGUgZGVwdGggYnV0IGJlZm9yZSB3ZSByZS1lbmFibGUKKwkgKiBpbnRlcnJ1cHRzLiBTbyBsb25nIGFzIElYTVQgbmV2ZXIgZ2V0cyBzZXQsIGhvd2V2ZXIsCisJICogd2Ugc2hvdWxkIGJlIE9LOiAgSWYgd2UgcGljayB1cCBzb21ldGhpbmcgYW5kIGRpc3BhdGNoCisJICogaXQgaGVyZSwgdGhhdCdzIGdyZWF0LiBJZiB3ZSBzZWUgbm90aGluZywgYnV0IGNvbmN1cnJlbnQKKwkgKiB3aXRoIHRoaXMgb3BlcmF0aW9uLCBhbm90aGVyIFRDIHNlbmRzIHVzIGFuIElQSSwgSVhNVAorCSAqIGlzIGNsZWFyLCBhbmQgd2UnbGwgaGFuZGxlIGl0IGFzIGEgcmVhbCBwc2V1ZG8taW50ZXJydXB0CisJICogYW5kIG5vdCBhIHBzZXVkby1wc2V1ZG8gaW50ZXJydXB0LgorCSAqLworCWlmIChJUElRW3NtcF9wcm9jZXNzb3JfaWQoKV0uZGVwdGggPiAwKSB7CisJCXN0cnVjdCBzbXRjX2lwaSAqcGlwaTsKKwkJZXh0ZXJuIHZvaWQgc2VsZl9pcGkoc3RydWN0IHNtdGNfaXBpICopOworCisJCXdoaWxlICgocGlwaSA9IHNtdGNfaXBpX2RxKCZJUElRW3NtcF9wcm9jZXNzb3JfaWQoKV0pKSkgeworCQkJc2VsZl9pcGkocGlwaSk7CisJCQlzbXRjX2NwdV9zdGF0c1tzbXBfcHJvY2Vzc29yX2lkKCldLnNlbGZpcGlzKys7CisJCX0KKwl9Cit9CisKK0VYUE9SVF9TWU1CT0woc210Y19pcGlfcmVwbGF5KTsKKwogdm9pZCBzbXRjX2lkbGVfbG9vcF9ob29rKHZvaWQpCiB7CiAjaWZkZWYgU01UQ19JRExFX0hPT0tfREVCVUcKQEAgLTExMTIsMjkgKzExNDYsMTQgQEAKIAlpZiAocGRiX21zZyAhPSAmaWRfaG9fZGJfbXNnWzBdKQogCQlwcmludGsoIkNQVSVkOiAlcyIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaWRfaG9fZGJfbXNnKTsKICNlbmRpZiAvKiBTTVRDX0lETEVfSE9PS19ERUJVRyAqLwotCS8qCi0JICogVG8gdGhlIGV4dGVudCB0aGF0IHdlJ3ZlIGV2ZXIgdHVybmVkIGludGVycnVwdHMgb2ZmLAotCSAqIHdlIG1heSBoYXZlIGFjY3VtdWxhdGVkIGRlZmVycmVkIElQSXMuICBUaGlzIGlzIHN1YnRsZS4KLQkgKiBJZiB3ZSB1c2UgdGhlIHNtdGNfaXBpX3FkZXB0aCgpIG1hY3JvLCB3ZSdsbCBnZXQgYW4KLQkgKiBleGFjdCBudW1iZXIgLSBidXQgd2UnbGwgYWxzbyBkaXNhYmxlIGludGVycnVwdHMKLQkgKiBhbmQgY3JlYXRlIGEgd2luZG93IG9mIGZhaWx1cmUgd2hlcmUgYSBuZXcgSVBJIGdldHMKLQkgKiBxdWV1ZWQgYWZ0ZXIgd2UgdGVzdCB0aGUgZGVwdGggYnV0IGJlZm9yZSB3ZSByZS1lbmFibGUKLQkgKiBpbnRlcnJ1cHRzLiBTbyBsb25nIGFzIElYTVQgbmV2ZXIgZ2V0cyBzZXQsIGhvd2V2ZXIsCi0JICogd2Ugc2hvdWxkIGJlIE9LOiAgSWYgd2UgcGljayB1cCBzb21ldGhpbmcgYW5kIGRpc3BhdGNoCi0JICogaXQgaGVyZSwgdGhhdCdzIGdyZWF0LiBJZiB3ZSBzZWUgbm90aGluZywgYnV0IGNvbmN1cnJlbnQKLQkgKiB3aXRoIHRoaXMgb3BlcmF0aW9uLCBhbm90aGVyIFRDIHNlbmRzIHVzIGFuIElQSSwgSVhNVAotCSAqIGlzIGNsZWFyLCBhbmQgd2UnbGwgaGFuZGxlIGl0IGFzIGEgcmVhbCBwc2V1ZG8taW50ZXJydXB0Ci0JICogYW5kIG5vdCBhIHBzZXVkby1wc2V1ZG8gaW50ZXJydXB0LgotCSAqLwotCWlmIChJUElRW3NtcF9wcm9jZXNzb3JfaWQoKV0uZGVwdGggPiAwKSB7Ci0JCXN0cnVjdCBzbXRjX2lwaSAqcGlwaTsKLQkJZXh0ZXJuIHZvaWQgc2VsZl9pcGkoc3RydWN0IHNtdGNfaXBpICopOwogCi0JCWlmICgocGlwaSA9IHNtdGNfaXBpX2RxKCZJUElRW3NtcF9wcm9jZXNzb3JfaWQoKV0pKSAhPSBOVUxMKSB7Ci0JCQlzZWxmX2lwaShwaXBpKTsKLQkJCXNtdGNfY3B1X3N0YXRzW3NtcF9wcm9jZXNzb3JfaWQoKV0uc2VsZmlwaXMrKzsKLQkJfQotCX0KKwkvKgorCSAqIFJlcGxheSBhbnkgYWNjdW11bGF0ZWQgZGVmZXJyZWQgSVBJcy4gSWYgIkluc3RhbnQgUmVwbGF5IgorCSAqIGlzIGluIHVzZSwgdGhlcmUgc2hvdWxkIG5ldmVyIGJlIGFueS4KKwkgKi8KKyNpZm5kZWYgQ09ORklHX01JUFNfTVRfU01UQ19JTlNUQU5UX1JFUExBWQorCXNtdGNfaXBpX3JlcGxheSgpOworI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVENfSU5TVEFOVF9SRVBMQVkgKi8KIH0KIAogdm9pZCBzbXRjX3NvZnRfZHVtcCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNpcml4LmMgYi9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYwppbmRleCA5M2M3NGZlLi42YzI0MDZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYworKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYwpAQCAtNzMyLDcgKzczMiw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVycm9yID0gdmZzX3N0YXRmcyhmaWxlLT5mX2RlbnRyeSwgJmtidWYpOworCWVycm9yID0gdmZzX3N0YXRmcyhmaWxlLT5mX3BhdGguZGVudHJ5LCAma2J1Zik7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9mOwogCkBAIC0xMDQxLDcgKzEwNDEsNyBAQAogCQkJdW5zaWduZWQgbG9uZyBvbGRfcG9zOwogCQkJbG9uZyBtYXhfc2l6ZSA9IG9mZnNldCArIGxlbjsKIAotCQkJaWYgKG1heF9zaXplID4gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSkgeworCQkJaWYgKG1heF9zaXplID4gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplKSB7CiAJCQkJb2xkX3BvcyA9IHN5c19sc2VlayAoZmQsIG1heF9zaXplIC0gMSwgMCk7CiAJCQkJc3lzX3dyaXRlIChmZCwgKHZvaWQgX191c2VyICopICIiLCAxKTsKIAkJCQlzeXNfbHNlZWsgKGZkLCBvbGRfcG9zLCAwKTsKQEAgLTE0MDYsNyArMTQwNiw3IEBACiAJCWVycm9yID0gLUVCQURGOwogCQlnb3RvIG91dDsKIAl9Ci0JZXJyb3IgPSB2ZnNfc3RhdGZzKGZpbGUtPmZfZGVudHJ5LCAma2J1Zik7CisJZXJyb3IgPSB2ZnNfc3RhdGZzKGZpbGUtPmZfcGF0aC5kZW50cnksICZrYnVmKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2Y7CiAKQEAgLTE1MjYsNyArMTUyNiw3IEBACiAJCQl1bnNpZ25lZCBsb25nIG9sZF9wb3M7CiAJCQlsb25nIG1heF9zaXplID0gb2ZmMiArIGxlbjsKIAotCQkJaWYgKG1heF9zaXplID4gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSkgeworCQkJaWYgKG1heF9zaXplID4gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplKSB7CiAJCQkJb2xkX3BvcyA9IHN5c19sc2VlayAoZmQsIG1heF9zaXplIC0gMSwgMCk7CiAJCQkJc3lzX3dyaXRlIChmZCwgKHZvaWQgX191c2VyICopICIiLCAxKTsKIAkJCQlzeXNfbHNlZWsgKGZkLCBvbGRfcG9zLCAwKTsKQEAgLTE2NTgsNyArMTY1OCw3IEBACiAJCWVycm9yID0gLUVCQURGOwogCQlnb3RvIG91dDsKIAl9Ci0JZXJyb3IgPSB2ZnNfc3RhdGZzKGZpbGUtPmZfZGVudHJ5LCAma2J1Zik7CisJZXJyb3IgPSB2ZnNfc3RhdGZzKGZpbGUtPmZfcGF0aC5kZW50cnksICZrYnVmKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2Y7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKaW5kZXggMTFhYWI2ZC4uOGFhNTQ0ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCkBAIC05NCwxMCArOTQsOCBAQAogewogCXVuc2lnbmVkIGludCBjb3VudDsKIAotI2lmbmRlZiBDT05GSUdfU09DX1BOWDg1NTAJLyogcG54ODU1MCByZXNldHMgdG8gemVybyAqLwogCS8qIEFjayB0aGlzIHRpbWVyIGludGVycnVwdCBhbmQgc2V0IHRoZSBuZXh0IG9uZS4gICovCiAJZXhwaXJlbG8gKz0gY3ljbGVzX3Blcl9qaWZmeTsKLSNlbmRpZgogCXdyaXRlX2MwX2NvbXBhcmUoZXhwaXJlbG8pOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgbWlzc2VkIGFueSB0aW1lciBpbnRlcnJ1cHRzLiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA3OWYwMzE3Li5jZWNmZjI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMTIsNiArMTEyLDcgQEAKICAgICAvKiAuZXhpdC50ZXh0IGlzIGRpc2NhcmRlZCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLCB0byBkZWFsIHdpdGgKICAgICAgcmVmZXJlbmNlcyBmcm9tIC5yb2RhdGEgKi8KICAgLmV4aXQudGV4dCA6IHsgKiguZXhpdC50ZXh0KSB9CisgIC5leGl0LmRhdGEgOiB7ICooLmV4aXQuZGF0YSkgfQogICAuID0gQUxJR04oX1BBR0VfU0laRSk7CiAgIF9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKICAgLmluaXQucmFtZnMgOiB7ICooLmluaXQucmFtZnMpIH0KQEAgLTEzOSw3ICsxNDAsNiBAQAogCiAgIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLwogICAvRElTQ0FSRC8gOiB7Ci0gICAgICAgICooLmV4aXQuZGF0YSkKICAgICAgICAgKiguZXhpdGNhbGwuZXhpdCkKIAogCS8qIEFCSSBjcmFwIHN0YXJ0cyBoZXJlICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwppbmRleCA1MWRkZDIxLi40NThmY2NmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKQEAgLTEzOSwxMyArMTM5LDE2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAotc3RydWN0IHZwZWNvbnRyb2xfIHsKK3N0cnVjdCB7CiAJLyogVmlydHVhbCBwcm9jZXNzaW5nIGVsZW1lbnRzICovCiAJc3RydWN0IGxpc3RfaGVhZCB2cGVfbGlzdDsKIAogCS8qIFRocmVhZCBjb250ZXh0cyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgdGNfbGlzdDsKLX0gdnBlY29udHJvbDsKK30gdnBlY29udHJvbCA9IHsKKwkudnBlX2xpc3QgPSBMSVNUX0hFQURfSU5JVCh2cGVjb250cm9sLnZwZV9saXN0KSwKKwkudGNfbGlzdCA9IExJU1RfSEVBRF9JTklUKHZwZWNvbnRyb2wudGNfbGlzdCkKK307CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfcHJvZ21lbSh2b2lkICpwdHIpOwogLyogc3RhdGljIF9fYXR0cmlidXRlX3VzZWRfXyB2b2lkIGR1bXBfdnBlKHN0cnVjdCB2cGUgKiB2KTsgKi8KQEAgLTExNzksNyArMTE4Miw3IEBACiAJc2l6ZV90IHJldCA9IGNvdW50OwogCXN0cnVjdCB2cGUgKnY7CiAKLQltaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKCh2ID0gZ2V0X3ZwZShtaW5vcikpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xMzg4LDggKzEzOTEsNiBAQAogCiAJLyogZHVtcF9tdHJlZ3MoKTsgKi8KIAotCUlOSVRfTElTVF9IRUFEKCZ2cGVjb250cm9sLnZwZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmdnBlY29udHJvbC50Y19saXN0KTsKIAogCXZhbCA9IHJlYWRfYzBfbXZwY29uZjAoKTsKIAlmb3IgKGkgPSAwOyBpIDwgKCh2YWwgJiBNVlBDT05GMF9QVEMpICsgMSk7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L3N5c2N0bC5jIGIvYXJjaC9taXBzL2xhc2F0L3N5c2N0bC5jCmluZGV4IDZkZDdhZTEuLjEyODc4MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9zeXNjdGwuYworKysgYi9hcmNoL21pcHMvbGFzYXQvc3lzY3RsLmMKQEAgLTQwLDEyICs0MCwxMiBAQAogLyogU3RyYXRlZ3kgZnVuY3Rpb24gdG8gd3JpdGUgRUVQUk9NIGFmdGVyIGNoYW5naW5nIHN0cmluZyBlbnRyeSAqLwogaW50IHN5c2N0bF9sYXNhdHN0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgKm5hbWUsIGludCBubGVuLAogCQl2b2lkICpvbGR2YWwsIHNpemVfdCAqb2xkbGVucCwKLQkJdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqY29udGV4dCkKKwkJdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCWludCByOwogCW11dGV4X2xvY2soJmxhc2F0X2luZm9fbXV0ZXgpOwogCXIgPSBzeXNjdGxfc3RyaW5nKHRhYmxlLCBuYW1lLAotCQkJICBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuLCBjb250ZXh0KTsKKwkJCSAgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHIgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmbGFzYXRfaW5mb19tdXRleCk7CiAJCXJldHVybiByOwpAQCAtMTE5LDExICsxMTksMTEgQEAKIC8qIFN5c2N0bCBmb3Igc2V0dGluZyB0aGUgSVAgYWRkcmVzc2VzICovCiBpbnQgc3lzY3RsX2xhc2F0X2ludHZlYyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgKm5hbWUsIGludCBubGVuLAogCQkgICAgdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxlbnAsCi0JCSAgICB2b2lkICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sIHZvaWQgKipjb250ZXh0KQorCQkgICAgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCWludCByOwogCW11dGV4X2xvY2soJmxhc2F0X2luZm9fbXV0ZXgpOwotCXIgPSBzeXNjdGxfaW50dmVjKHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuLCBjb250ZXh0KTsKKwlyID0gc3lzY3RsX2ludHZlYyh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHIgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmbGFzYXRfaW5mb19tdXRleCk7CiAJCXJldHVybiByOwpAQCAtMTM5LDE0ICsxMzksMTQgQEAKIC8qIFNhbWUgZm9yIFJUQyAqLwogaW50IHN5c2N0bF9sYXNhdF9ydGMoY3RsX3RhYmxlICp0YWJsZSwgaW50ICpuYW1lLCBpbnQgbmxlbiwKIAkJICAgIHZvaWQgKm9sZHZhbCwgc2l6ZV90ICpvbGRsZW5wLAotCQkgICAgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqY29udGV4dCkKKwkJICAgIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgcjsKIAltdXRleF9sb2NrKCZsYXNhdF9pbmZvX211dGV4KTsKIAlydGN0bXAgPSBkczE2MDNfcmVhZCgpOwogCWlmIChydGN0bXAgPCAwKQogCQlydGN0bXAgPSAwOwotCXIgPSBzeXNjdGxfaW50dmVjKHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuLCBjb250ZXh0KTsKKwlyID0gc3lzY3RsX2ludHZlYyh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHIgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmbGFzYXRfaW5mb19tdXRleCk7CiAJCXJldHVybiByOwpAQCAtMjUxLDEzICsyNTEsMTIgQEAKIAogc3RhdGljIGludCBzeXNjdGxfbGFzYXRfZWVwcm9tX3ZhbHVlKGN0bF90YWJsZSAqdGFibGUsIGludCAqbmFtZSwgaW50IG5sZW4sCiAJCQkJICAgICB2b2lkICpvbGR2YWwsIHNpemVfdCAqb2xkbGVucCwKLQkJCQkgICAgIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwKLQkJCQkgICAgIHZvaWQgKipjb250ZXh0KQorCQkJCSAgICAgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCWludCByOwogCiAJbXV0ZXhfbG9jaygmbGFzYXRfaW5mb19tdXRleCk7Ci0JciA9IHN5c2N0bF9pbnR2ZWModGFibGUsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4sIGNvbnRleHQpOworCXIgPSBzeXNjdGxfaW50dmVjKHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAlpZiAociA8IDApIHsKIAkJbXV0ZXhfdW5sb2NrKCZsYXNhdF9pbmZvX211dGV4KTsKIAkJcmV0dXJuIHI7CkBAIC0yODYsMTEgKzI4NSwxMSBAQAogCQltdXRleF91bmxvY2soJmxhc2F0X2luZm9fbXV0ZXgpOwogCQlyZXR1cm4gcjsKIAl9Ci0JaWYgKGZpbHAgJiYgZmlscC0+Zl9kZW50cnkpCisJaWYgKGZpbHAgJiYgZmlscC0+Zl9wYXRoLmRlbnRyeSkKIAl7Ci0JCWlmICghc3RyY21wKGZpbHAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwgInByaWQiKSkKKwkJaWYgKCFzdHJjbXAoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUsICJwcmlkIikpCiAJCQlsYXNhdF9ib2FyZF9pbmZvLmxpX2VlcHJvbV9pbmZvLnByaWQgPSBsYXNhdF9ib2FyZF9pbmZvLmxpX3ByaWQ7Ci0JCWlmICghc3RyY21wKGZpbHAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwgImRlYnVnYWNjZXNzIikpCisJCWlmICghc3RyY21wKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lLCAiZGVidWdhY2Nlc3MiKSkKIAkJCWxhc2F0X2JvYXJkX2luZm8ubGlfZWVwcm9tX2luZm8uZGVidWdhY2Nlc3MgPSBsYXNhdF9ib2FyZF9pbmZvLmxpX2RlYnVnYWNjZXNzOwogCX0KIAlsYXNhdF93cml0ZV9lZXByb21faW5mbygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUKaW5kZXggODg4YjYxZS4uOTg5YzkwMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbGliL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgTUlQUy1zcGVjaWZpYyBsaWJyYXJ5IGZpbGVzLi4KICMKIAotbGliLXkJKz0gY3N1bV9wYXJ0aWFsLm8gY3N1bV9wYXJ0aWFsX2NvcHkubyBtZW1jcHkubyBwcm9tbGliLm8gXAorbGliLXkJKz0gY3N1bV9wYXJ0aWFsLm8gbWVtY3B5Lm8gcHJvbWxpYi5vIFwKIAkgICBzdHJsZW5fdXNlci5vIHN0cm5jcHlfdXNlci5vIHN0cm5sZW5fdXNlci5vIHVuY2FjaGVkLm8KIAogb2JqLXkJKz0gaW9tYXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9jc3VtX3BhcnRpYWwuUyBiL2FyY2gvbWlwcy9saWIvY3N1bV9wYXJ0aWFsLlMKaW5kZXggMTU2MTFkOS4uYzBhNzdmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9jc3VtX3BhcnRpYWwuUworKysgYi9hcmNoL21pcHMvbGliL2NzdW1fcGFydGlhbC5TCkBAIC04LDQ3ICs4LDcyIEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgUmFsZiBCYWVjaGxlCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgogCiAjaWZkZWYgQ09ORklHXzY0QklUCi0jZGVmaW5lIFQwCXRhMAotI2RlZmluZSBUMQl0YTEKLSNkZWZpbmUgVDIJdGEyCi0jZGVmaW5lIFQzCXRhMwotI2RlZmluZSBUNAl0MAotI2RlZmluZSBUNwl0MwotI2Vsc2UKLSNkZWZpbmUgVDAJdDAKLSNkZWZpbmUgVDEJdDEKLSNkZWZpbmUgVDIJdDIKLSNkZWZpbmUgVDMJdDMKLSNkZWZpbmUgVDQJdDQKLSNkZWZpbmUgVDcJdDcKKy8qCisgKiBBcyB3ZSBhcmUgc2hhcmluZyBjb2RlIGJhc2Ugd2l0aCB0aGUgbWlwczMyIHRyZWUgKHdoaWNoIHVzZSB0aGUgbzMyIEFCSQorICogcmVnaXN0ZXIgZGVmaW5pdGlvbnMpLiBXZSBuZWVkIHRvIHJlZGVmaW5lIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyBmcm9tCisgKiB0aGUgbjY0IEFCSSByZWdpc3RlciBuYW1pbmcgdG8gdGhlIG8zMiBBQkkgcmVnaXN0ZXIgbmFtaW5nLgorICovCisjdW5kZWYgdDAKKyN1bmRlZiB0MQorI3VuZGVmIHQyCisjdW5kZWYgdDMKKyNkZWZpbmUgdDAJJDgKKyNkZWZpbmUgdDEJJDkKKyNkZWZpbmUgdDIJJDEwCisjZGVmaW5lIHQzCSQxMQorI2RlZmluZSB0NAkkMTIKKyNkZWZpbmUgdDUJJDEzCisjZGVmaW5lIHQ2CSQxNAorI2RlZmluZSB0NwkkMTUKKworI2RlZmluZSBVU0VfRE9VQkxFCiAjZW5kaWYKIAotI2RlZmluZSBBRERDKHN1bSxyZWcpCQkJCQkJXAotCWFkZHUJc3VtLCByZWc7CQkJCQlcCi0Jc2x0dQl2MSwgc3VtLCByZWc7CQkJCQlcCi0JYWRkdQlzdW0sIHYxCisjaWZkZWYgVVNFX0RPVUJMRQogCisjZGVmaW5lIExPQUQgICBsZAorI2RlZmluZSBBREQgICAgZGFkZHUKKyNkZWZpbmUgTkJZVEVTIDgKKworI2Vsc2UKKworI2RlZmluZSBMT0FEICAgbHcKKyNkZWZpbmUgQUREICAgIGFkZHUKKyNkZWZpbmUgTkJZVEVTIDQKKworI2VuZGlmIC8qIFVTRV9ET1VCTEUgKi8KKworI2RlZmluZSBVTklUKHVuaXQpICAoKHVuaXQpKk5CWVRFUykKKworI2RlZmluZSBBRERDKHN1bSxyZWcpCQkJCQkJXAorCUFERAlzdW0sIHJlZzsJCQkJCVwKKwlzbHR1CXYxLCBzdW0sIHJlZzsJCQkJCVwKKwlBREQJc3VtLCB2MQorCisjZGVmaW5lIENTVU1fQklHQ0hVTksxKHNyYywgb2Zmc2V0LCBzdW0sIF90MCwgX3QxLCBfdDIsIF90MykJXAorCUxPQUQJX3QwLCAob2Zmc2V0ICsgVU5JVCgwKSkoc3JjKTsJCQlcCisJTE9BRAlfdDEsIChvZmZzZXQgKyBVTklUKDEpKShzcmMpOwkJCVwKKwlMT0FECV90MiwgKG9mZnNldCArIFVOSVQoMikpKHNyYyk7IAkJCVwKKwlMT0FECV90MywgKG9mZnNldCArIFVOSVQoMykpKHNyYyk7IAkJCVwKKwlBRERDKHN1bSwgX3QwKTsJCQkJCQlcCisJQUREQyhzdW0sIF90MSk7CQkJCQkJXAorCUFEREMoc3VtLCBfdDIpOwkJCQkJCVwKKwlBRERDKHN1bSwgX3QzKQorCisjaWZkZWYgVVNFX0RPVUJMRQogI2RlZmluZSBDU1VNX0JJR0NIVU5LKHNyYywgb2Zmc2V0LCBzdW0sIF90MCwgX3QxLCBfdDIsIF90MykJXAotCWx3CV90MCwgKG9mZnNldCArIDB4MDApKHNyYyk7CQkJXAotCWx3CV90MSwgKG9mZnNldCArIDB4MDQpKHNyYyk7CQkJXAotCWx3CV90MiwgKG9mZnNldCArIDB4MDgpKHNyYyk7IAkJCVwKLQlsdwlfdDMsIChvZmZzZXQgKyAweDBjKShzcmMpOyAJCQlcCi0JQUREQyhzdW0sIF90MCk7CQkJCQkJXAotCUFEREMoc3VtLCBfdDEpOwkJCQkJCVwKLQlBRERDKHN1bSwgX3QyKTsJCQkJCQlcCi0JQUREQyhzdW0sIF90Myk7CQkJCQkJXAotCWx3CV90MCwgKG9mZnNldCArIDB4MTApKHNyYyk7CQkJXAotCWx3CV90MSwgKG9mZnNldCArIDB4MTQpKHNyYyk7CQkJXAotCWx3CV90MiwgKG9mZnNldCArIDB4MTgpKHNyYyk7CQkJXAotCWx3CV90MywgKG9mZnNldCArIDB4MWMpKHNyYyk7CQkJXAotCUFEREMoc3VtLCBfdDApOwkJCQkJCVwKLQlBRERDKHN1bSwgX3QxKTsJCQkJCQlcCi0JQUREQyhzdW0sIF90Mik7CQkJCQkJXAotCUFEREMoc3VtLCBfdDMpOwkJCQkJCVwKKwlDU1VNX0JJR0NIVU5LMShzcmMsIG9mZnNldCwgc3VtLCBfdDAsIF90MSwgX3QyLCBfdDMpCisjZWxzZQorI2RlZmluZSBDU1VNX0JJR0NIVU5LKHNyYywgb2Zmc2V0LCBzdW0sIF90MCwgX3QxLCBfdDIsIF90MykJXAorCUNTVU1fQklHQ0hVTksxKHNyYywgb2Zmc2V0LCBzdW0sIF90MCwgX3QxLCBfdDIsIF90Myk7CVwKKwlDU1VNX0JJR0NIVU5LMShzcmMsIG9mZnNldCArIDB4MTAsIHN1bSwgX3QwLCBfdDEsIF90MiwgX3QzKQorI2VuZGlmCiAKIC8qCiAgKiBhMDogc291cmNlIGFkZHJlc3MKQEAgLTYxLDg2ICs4NiwyNyBAQAogCiAJLnRleHQKIAkuc2V0CW5vcmVvcmRlcgotCi0vKiB1bmtub3duIHNyYyBhbGlnbm1lbnQgYW5kIDwgOCBieXRlcyB0byBnbyAgKi8KLXNtYWxsX2NzdW1jcHk6Ci0JbW92ZQlhMSwgVDIKLQotCWFuZGkJVDAsIGExLCA0Ci0JYmVxeglUMCwgMWYKLQkgYW5kaQlUMCwgYTEsIDIKLQotCS8qIFN0aWxsIGEgZnVsbCB3b3JkIHRvIGdvICAqLwotCXVsdwlUMSwgKHNyYykKLQlQVFJfQURESVUJc3JjLCA0Ci0JQUREQyhzdW0sIFQxKQotCi0xOgltb3ZlCVQxLCB6ZXJvCi0JYmVxeglUMCwgMWYKLQkgYW5kaQlUMCwgYTEsIDEKLQotCS8qIFN0aWxsIGEgaGFsZndvcmQgdG8gZ28gICovCi0JdWxodQlUMSwgKHNyYykKLQlQVFJfQURESVUJc3JjLCAyCi0KLTE6CWJlcXoJVDAsIDFmCi0JIHNsbAlUMSwgVDEsIDE2Ci0KLQlsYnUJVDIsIChzcmMpCi0JIG5vcAotCi0jaWZkZWYgX19NSVBTRUJfXwotCXNsbAlUMiwgVDIsIDgKLSNlbmRpZgotCW9yCVQxLCBUMgotCi0xOglBRERDKHN1bSwgVDEpCi0KLQkvKiBmb2xkIGNoZWNrc3VtICovCi0Jc2xsCXYxLCBzdW0sIDE2Ci0JYWRkdQlzdW0sIHYxCi0Jc2x0dQl2MSwgc3VtLCB2MQotCXNybAlzdW0sIHN1bSwgMTYKLQlhZGR1CXN1bSwgdjEKLQotCS8qIG9kZCBidWZmZXIgYWxpZ25tZW50PyAqLwotCWJlcXoJVDcsIDFmCi0JIG5vcAotCXNsbAl2MSwgc3VtLCA4Ci0Jc3JsCXN1bSwgc3VtLCA4Ci0Jb3IJc3VtLCB2MQotCWFuZGkJc3VtLCAweGZmZmYKLTE6Ci0JLnNldAlyZW9yZGVyCi0JLyogQWRkIHRoZSBwYXNzZWQgcGFydGlhbCBjc3VtLiAgKi8KLQlBRERDKHN1bSwgYTIpCi0JanIJcmEKLQkuc2V0CW5vcmVvcmRlcgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIAkuYWxpZ24JNQogTEVBRihjc3VtX3BhcnRpYWwpCiAJbW92ZQlzdW0sIHplcm8KLQltb3ZlCVQ3LCB6ZXJvCisJbW92ZQl0NywgemVybwogCiAJc2x0aXUJdDgsIGExLCAweDgKIAlibmV6CXQ4LCBzbWFsbF9jc3VtY3B5CQkvKiA8IDggYnl0ZXMgdG8gY29weSAqLwotCSBtb3ZlCVQyLCBhMQorCSBtb3ZlCXQyLCBhMQogCi0JYmVxeglhMSwgb3V0Ci0JIGFuZGkJVDcsIHNyYywgMHgxCQkJLyogb2RkIGJ1ZmZlcj8gKi8KKwlhbmRpCXQ3LCBzcmMsIDB4MQkJCS8qIG9kZCBidWZmZXI/ICovCiAKIGh3b3JkX2FsaWduOgotCWJlcXoJVDcsIHdvcmRfYWxpZ24KKwliZXF6CXQ3LCB3b3JkX2FsaWduCiAJIGFuZGkJdDgsIHNyYywgMHgyCiAKLQlsYnUJVDAsIChzcmMpCisJbGJ1CXQwLCAoc3JjKQogCUxPTkdfU1VCVQlhMSwgYTEsIDB4MQogI2lmZGVmIF9fTUlQU0VMX18KLQlzbGwJVDAsIFQwLCA4CisJc2xsCXQwLCB0MCwgOAogI2VuZGlmCi0JQUREQyhzdW0sIFQwKQorCUFEREMoc3VtLCB0MCkKIAlQVFJfQUREVQlzcmMsIHNyYywgMHgxCiAJYW5kaQl0OCwgc3JjLCAweDIKIApAQCAtMTQ4LDkgKzExNCw5IEBACiAJYmVxegl0OCwgZHdvcmRfYWxpZ24KIAkgc2x0aXUJdDgsIGExLCA1NgogCi0JbGh1CVQwLCAoc3JjKQorCWxodQl0MCwgKHNyYykKIAlMT05HX1NVQlUJYTEsIGExLCAweDIKLQlBRERDKHN1bSwgVDApCisJQUREQyhzdW0sIHQwKQogCXNsdGl1CXQ4LCBhMSwgNTYKIAlQVFJfQUREVQlzcmMsIHNyYywgMHgyCiAKQEAgLTE2Miw5ICsxMjgsOSBAQAogCWJlcXoJdDgsIHF3b3JkX2FsaWduCiAJIGFuZGkJdDgsIHNyYywgMHg4CiAKLQlsdwlUMCwgMHgwMChzcmMpCisJbHcJdDAsIDB4MDAoc3JjKQogCUxPTkdfU1VCVQlhMSwgYTEsIDB4NAotCUFEREMoc3VtLCBUMCkKKwlBRERDKHN1bSwgdDApCiAJUFRSX0FERFUJc3JjLCBzcmMsIDB4NAogCWFuZGkJdDgsIHNyYywgMHg4CiAKQEAgLTE3MiwxMSArMTM4LDE3IEBACiAJYmVxegl0OCwgb3dvcmRfYWxpZ24KIAkgYW5kaQl0OCwgc3JjLCAweDEwCiAKLQlsdwlUMCwgMHgwMChzcmMpCi0JbHcJVDEsIDB4MDQoc3JjKQorI2lmZGVmIFVTRV9ET1VCTEUKKwlsZAl0MCwgMHgwMChzcmMpCiAJTE9OR19TVUJVCWExLCBhMSwgMHg4Ci0JQUREQyhzdW0sIFQwKQotCUFEREMoc3VtLCBUMSkKKwlBRERDKHN1bSwgdDApCisjZWxzZQorCWx3CXQwLCAweDAwKHNyYykKKwlsdwl0MSwgMHgwNChzcmMpCisJTE9OR19TVUJVCWExLCBhMSwgMHg4CisJQUREQyhzdW0sIHQwKQorCUFEREMoc3VtLCB0MSkKKyNlbmRpZgogCVBUUl9BRERVCXNyYywgc3JjLCAweDgKIAlhbmRpCXQ4LCBzcmMsIDB4MTAKIApAQCAtMTg0LDc1ICsxNTYsNTYwIEBACiAJYmVxegl0OCwgYmVnaW5fbW92ZW1lbnQKIAkgTE9OR19TUkwJdDgsIGExLCAweDcKIAotCWx3CVQzLCAweDA4KHNyYykKLQlsdwlUNCwgMHgwYyhzcmMpCi0JbHcJVDAsIDB4MDAoc3JjKQotCWx3CVQxLCAweDA0KHNyYykKLQlBRERDKHN1bSwgVDMpCi0JQUREQyhzdW0sIFQ0KQotCUFEREMoc3VtLCBUMCkKLQlBRERDKHN1bSwgVDEpCisjaWZkZWYgVVNFX0RPVUJMRQorCWxkCXQwLCAweDAwKHNyYykKKwlsZAl0MSwgMHgwOChzcmMpCisJQUREQyhzdW0sIHQwKQorCUFEREMoc3VtLCB0MSkKKyNlbHNlCisJQ1NVTV9CSUdDSFVOSzEoc3JjLCAweDAwLCBzdW0sIHQwLCB0MSwgdDMsIHQ0KQorI2VuZGlmCiAJTE9OR19TVUJVCWExLCBhMSwgMHgxMAogCVBUUl9BRERVCXNyYywgc3JjLCAweDEwCiAJTE9OR19TUkwJdDgsIGExLCAweDcKIAogYmVnaW5fbW92ZW1lbnQ6CiAJYmVxegl0OCwgMWYKLQkgYW5kaQlUMiwgYTEsIDB4NDAKKwkgYW5kaQl0MiwgYTEsIDB4NDAKIAogbW92ZV8xMjhieXRlczoKLQlDU1VNX0JJR0NIVU5LKHNyYywgMHgwMCwgc3VtLCBUMCwgVDEsIFQzLCBUNCkKLQlDU1VNX0JJR0NIVU5LKHNyYywgMHgyMCwgc3VtLCBUMCwgVDEsIFQzLCBUNCkKLQlDU1VNX0JJR0NIVU5LKHNyYywgMHg0MCwgc3VtLCBUMCwgVDEsIFQzLCBUNCkKLQlDU1VNX0JJR0NIVU5LKHNyYywgMHg2MCwgc3VtLCBUMCwgVDEsIFQzLCBUNCkKKwlDU1VNX0JJR0NIVU5LKHNyYywgMHgwMCwgc3VtLCB0MCwgdDEsIHQzLCB0NCkKKwlDU1VNX0JJR0NIVU5LKHNyYywgMHgyMCwgc3VtLCB0MCwgdDEsIHQzLCB0NCkKKwlDU1VNX0JJR0NIVU5LKHNyYywgMHg0MCwgc3VtLCB0MCwgdDEsIHQzLCB0NCkKKwlDU1VNX0JJR0NIVU5LKHNyYywgMHg2MCwgc3VtLCB0MCwgdDEsIHQzLCB0NCkKIAlMT05HX1NVQlUJdDgsIHQ4LCAweDAxCiAJYm5legl0OCwgbW92ZV8xMjhieXRlcwogCSBQVFJfQUREVQlzcmMsIHNyYywgMHg4MAogCiAxOgotCWJlcXoJVDIsIDFmCi0JIGFuZGkJVDIsIGExLCAweDIwCisJYmVxegl0MiwgMWYKKwkgYW5kaQl0MiwgYTEsIDB4MjAKIAogbW92ZV82NGJ5dGVzOgotCUNTVU1fQklHQ0hVTksoc3JjLCAweDAwLCBzdW0sIFQwLCBUMSwgVDMsIFQ0KQotCUNTVU1fQklHQ0hVTksoc3JjLCAweDIwLCBzdW0sIFQwLCBUMSwgVDMsIFQ0KQorCUNTVU1fQklHQ0hVTksoc3JjLCAweDAwLCBzdW0sIHQwLCB0MSwgdDMsIHQ0KQorCUNTVU1fQklHQ0hVTksoc3JjLCAweDIwLCBzdW0sIHQwLCB0MSwgdDMsIHQ0KQogCVBUUl9BRERVCXNyYywgc3JjLCAweDQwCiAKIDE6Ci0JYmVxeglUMiwgZG9fZW5kX3dvcmRzCisJYmVxegl0MiwgZG9fZW5kX3dvcmRzCiAJIGFuZGkJdDgsIGExLCAweDFjCiAKIG1vdmVfMzJieXRlczoKLQlDU1VNX0JJR0NIVU5LKHNyYywgMHgwMCwgc3VtLCBUMCwgVDEsIFQzLCBUNCkKKwlDU1VNX0JJR0NIVU5LKHNyYywgMHgwMCwgc3VtLCB0MCwgdDEsIHQzLCB0NCkKIAlhbmRpCXQ4LCBhMSwgMHgxYwogCVBUUl9BRERVCXNyYywgc3JjLCAweDIwCiAKIGRvX2VuZF93b3JkczoKLQliZXF6CXQ4LCBtYXliZV9lbmRfY3J1ZnQKLQkgTE9OR19TUkwJdDgsIHQ4LCAweDIKKwliZXF6CXQ4LCBzbWFsbF9jc3VtY3B5CisJIGFuZGkJdDIsIGExLCAweDMKKwlMT05HX1NSTAl0OCwgdDgsIDB4MgogCiBlbmRfd29yZHM6Ci0JbHcJVDAsIChzcmMpCisJbHcJdDAsIChzcmMpCiAJTE9OR19TVUJVCXQ4LCB0OCwgMHgxCi0JQUREQyhzdW0sIFQwKQorCUFEREMoc3VtLCB0MCkKIAlibmV6CXQ4LCBlbmRfd29yZHMKIAkgUFRSX0FERFUJc3JjLCBzcmMsIDB4NAogCi1tYXliZV9lbmRfY3J1ZnQ6Ci0JYW5kaQlUMiwgYTEsIDB4MworLyogdW5rbm93biBzcmMgYWxpZ25tZW50IGFuZCA8IDggYnl0ZXMgdG8gZ28gICovCitzbWFsbF9jc3VtY3B5OgorCW1vdmUJYTEsIHQyCiAKLXNtYWxsX21lbWNweToKLSBqIHNtYWxsX2NzdW1jcHk7IG1vdmUgYTEsIFQyCQkvKiBYWFggPz8/ICovCi0JYmVxegl0Miwgb3V0Ci0JIG1vdmUJYTEsIFQyCisJYW5kaQl0MCwgYTEsIDQKKwliZXF6CXQwLCAxZgorCSBhbmRpCXQwLCBhMSwgMgogCi1lbmRfYnl0ZXM6Ci0JbGIJVDAsIChzcmMpCi0JTE9OR19TVUJVCWExLCBhMSwgMHgxCi0JYm5leglhMiwgZW5kX2J5dGVzCi0JIFBUUl9BRERVCXNyYywgc3JjLCAweDEKKwkvKiBTdGlsbCBhIGZ1bGwgd29yZCB0byBnbyAgKi8KKwl1bHcJdDEsIChzcmMpCisJUFRSX0FERElVCXNyYywgNAorCUFEREMoc3VtLCB0MSkKIAotb3V0OgorMToJbW92ZQl0MSwgemVybworCWJlcXoJdDAsIDFmCisJIGFuZGkJdDAsIGExLCAxCisKKwkvKiBTdGlsbCBhIGhhbGZ3b3JkIHRvIGdvICAqLworCXVsaHUJdDEsIChzcmMpCisJUFRSX0FERElVCXNyYywgMgorCisxOgliZXF6CXQwLCAxZgorCSBzbGwJdDEsIHQxLCAxNgorCisJbGJ1CXQyLCAoc3JjKQorCSBub3AKKworI2lmZGVmIF9fTUlQU0VCX18KKwlzbGwJdDIsIHQyLCA4CisjZW5kaWYKKwlvcgl0MSwgdDIKKworMToJQUREQyhzdW0sIHQxKQorCisJLyogZm9sZCBjaGVja3N1bSAqLworI2lmZGVmIFVTRV9ET1VCTEUKKwlkc2xsMzIJdjEsIHN1bSwgMAorCWRhZGR1CXN1bSwgdjEKKwlzbHR1CXYxLCBzdW0sIHYxCisJZHNyYTMyCXN1bSwgc3VtLCAwCisJYWRkdQlzdW0sIHYxCisjZW5kaWYKKwlzbGwJdjEsIHN1bSwgMTYKKwlhZGR1CXN1bSwgdjEKKwlzbHR1CXYxLCBzdW0sIHYxCisJc3JsCXN1bSwgc3VtLCAxNgorCWFkZHUJc3VtLCB2MQorCisJLyogb2RkIGJ1ZmZlciBhbGlnbm1lbnQ/ICovCisJYmVxegl0NywgMWYKKwkgbm9wCisJc2xsCXYxLCBzdW0sIDgKKwlzcmwJc3VtLCBzdW0sIDgKKwlvcglzdW0sIHYxCisJYW5kaQlzdW0sIDB4ZmZmZgorMToKKwkuc2V0CXJlb3JkZXIKKwkvKiBBZGQgdGhlIHBhc3NlZCBwYXJ0aWFsIGNzdW0uICAqLworCUFEREMoc3VtLCBhMikKIAlqcglyYQotCSBtb3ZlCXYwLCBzdW0KKwkuc2V0CW5vcmVvcmRlcgogCUVORChjc3VtX3BhcnRpYWwpCisKKworLyoKKyAqIGNoZWNrc3VtIGFuZCBjb3B5IHJvdXRpbmVzIGJhc2VkIG9uIG1lbWNweS5TCisgKgorICoJY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhzcmMsIGRzdCwgbGVuLCBzdW0pCisgKglfX2NzdW1fcGFydGlhbF9jb3B5X3VzZXIoc3JjLCBkc3QsIGxlbiwgc3VtLCBlcnJwKQorICoKKyAqIFNlZSAiU3BlYyIgaW4gbWVtY3B5LlMgZm9yIGRldGFpbHMuICBVbmxpa2UgX19jb3B5X3VzZXIsIGFsbAorICogZnVuY3Rpb24gaW4gdGhpcyBmaWxlIHVzZSB0aGUgc3RhbmRhcmQgY2FsbGluZyBjb252ZW50aW9uLgorICovCisKKyNkZWZpbmUgc3JjIGEwCisjZGVmaW5lIGRzdCBhMQorI2RlZmluZSBsZW4gYTIKKyNkZWZpbmUgcHN1bSBhMworI2RlZmluZSBzdW0gdjAKKyNkZWZpbmUgb2RkIHQ4CisjZGVmaW5lIGVycnB0ciB0OQorCisvKgorICogVGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGZvciBsb2FkcyByZXF1aXJlcyB0aGF0OgorICogIDEtIEFUIGNvbnRhaW4gdGhlIGFkZHJlc3Mgb2YgdGhlIGJ5dGUganVzdCBwYXN0IHRoZSBlbmQgb2YgdGhlIHNvdXJjZQorICogICAgIG9mIHRoZSBjb3B5LAorICogIDItIHNyY19lbnRyeSA8PSBzcmMgPCBBVCwgYW5kCisgKiAgMy0gKGRzdCAtIHNyYykgPT0gKGRzdF9lbnRyeSAtIHNyY19lbnRyeSksCisgKiBUaGUgX2VudHJ5IHN1ZmZpeCBkZW5vdGVzIHZhbHVlcyB3aGVuIF9fY29weV91c2VyIHdhcyBjYWxsZWQuCisgKgorICogKDEpIGlzIHNldCB1cCB1cCBieSBfX2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciBhbmQgbWFpbnRhaW5lZCBieQorICoJbm90IHdyaXRpbmcgQVQgaW4gX19jc3VtX3BhcnRpYWxfY29weQorICogKDIpIGlzIG1ldCBieSBpbmNyZW1lbnRpbmcgc3JjIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkCisgKiAoMykgaXMgbWV0IGJ5IG5vdCBkb2luZyBsb2FkcyBiZXR3ZWVuIGEgcGFpciBvZiBpbmNyZW1lbnRzIG9mIGRzdCBhbmQgc3JjCisgKgorICogVGhlIGV4Y2VwdGlvbiBoYW5kbGVycyBmb3Igc3RvcmVzIHN0b3JlcyAtRUZBVUxUIHRvIGVycnB0ciBhbmQgcmV0dXJuLgorICogVGhlc2UgaGFuZGxlcnMgZG8gbm90IG5lZWQgdG8gb3ZlcndyaXRlIGFueSBkYXRhLgorICovCisKKyNkZWZpbmUgRVhDKGluc3RfcmVnLGFkZHIsaGFuZGxlcikJCVwKKzk6CWluc3RfcmVnLCBhZGRyOwkJCQlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7CQlcCisJUFRSCTliLCBoYW5kbGVyOwkJCVwKKwkucHJldmlvdXMKKworI2lmZGVmIFVTRV9ET1VCTEUKKworI2RlZmluZSBMT0FEICAgbGQKKyNkZWZpbmUgTE9BREwgIGxkbAorI2RlZmluZSBMT0FEUiAgbGRyCisjZGVmaW5lIFNUT1JFTCBzZGwKKyNkZWZpbmUgU1RPUkVSIHNkcgorI2RlZmluZSBTVE9SRSAgc2QKKyNkZWZpbmUgQUREICAgIGRhZGR1CisjZGVmaW5lIFNVQiAgICBkc3VidQorI2RlZmluZSBTUkwgICAgZHNybAorI2RlZmluZSBTTEwgICAgZHNsbAorI2RlZmluZSBTTExWICAgZHNsbHYKKyNkZWZpbmUgU1JMViAgIGRzcmx2CisjZGVmaW5lIE5CWVRFUyA4CisjZGVmaW5lIExPR19OQllURVMgMworCisjZWxzZQorCisjZGVmaW5lIExPQUQgICBsdworI2RlZmluZSBMT0FETCAgbHdsCisjZGVmaW5lIExPQURSICBsd3IKKyNkZWZpbmUgU1RPUkVMIHN3bAorI2RlZmluZSBTVE9SRVIgc3dyCisjZGVmaW5lIFNUT1JFICBzdworI2RlZmluZSBBREQgICAgYWRkdQorI2RlZmluZSBTVUIgICAgc3VidQorI2RlZmluZSBTUkwgICAgc3JsCisjZGVmaW5lIFNMTCAgICBzbGwKKyNkZWZpbmUgU0xMViAgIHNsbHYKKyNkZWZpbmUgU1JMViAgIHNybHYKKyNkZWZpbmUgTkJZVEVTIDQKKyNkZWZpbmUgTE9HX05CWVRFUyAyCisKKyNlbmRpZiAvKiBVU0VfRE9VQkxFICovCisKKyNpZmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgTERGSVJTVCBMT0FEUgorI2RlZmluZSBMRFJFU1QgIExPQURMCisjZGVmaW5lIFNURklSU1QgU1RPUkVSCisjZGVmaW5lIFNUUkVTVCAgU1RPUkVMCisjZGVmaW5lIFNISUZUX0RJU0NBUkQgU0xMVgorI2RlZmluZSBTSElGVF9ESVNDQVJEX1JFVkVSVCBTUkxWCisjZWxzZQorI2RlZmluZSBMREZJUlNUIExPQURMCisjZGVmaW5lIExEUkVTVCAgTE9BRFIKKyNkZWZpbmUgU1RGSVJTVCBTVE9SRUwKKyNkZWZpbmUgU1RSRVNUICBTVE9SRVIKKyNkZWZpbmUgU0hJRlRfRElTQ0FSRCBTUkxWCisjZGVmaW5lIFNISUZUX0RJU0NBUkRfUkVWRVJUIFNMTFYKKyNlbmRpZgorCisjZGVmaW5lIEZJUlNUKHVuaXQpICgodW5pdCkqTkJZVEVTKQorI2RlZmluZSBSRVNUKHVuaXQpICAoRklSU1QodW5pdCkrTkJZVEVTLTEpCisKKyNkZWZpbmUgQUREUk1BU0sgKE5CWVRFUy0xKQorCisJLnNldAlub2F0CisKK0xFQUYoX19jc3VtX3BhcnRpYWxfY29weV91c2VyKQorCVBUUl9BRERVCUFULCBzcmMsIGxlbgkvKiBTZWUgKDEpIGFib3ZlLiAqLworI2lmZGVmIENPTkZJR182NEJJVAorCW1vdmUJZXJycHRyLCBhNAorI2Vsc2UKKwlsdwllcnJwdHIsIDE2KHNwKQorI2VuZGlmCitGRVhQT1JUKGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2spCisJbW92ZQlzdW0sIHplcm8KKwltb3ZlCW9kZCwgemVybworCS8qCisJICogTm90ZTogZHN0ICYgc3JjIG1heSBiZSB1bmFsaWduZWQsIGxlbiBtYXkgYmUgMAorCSAqIFRlbXBzCisJICovCisJLyoKKwkgKiBUaGUgImlzc3VlIGJyZWFrInMgYmVsb3cgYXJlIHZlcnkgYXBwcm94aW1hdGUuCisJICogSXNzdWUgZGVsYXlzIGZvciBkY2FjaGUgZmlsbHMgd2lsbCBwZXJ0dXJiIHRoZSBzY2hlZHVsZSwgYXMgd2lsbAorCSAqIGxvYWQgcXVldWUgZnVsbCByZXBsYXkgdHJhcHMsIGV0Yy4KKwkgKgorCSAqIElmIGxlbiA8IE5CWVRFUyB1c2UgYnl0ZSBvcGVyYXRpb25zLgorCSAqLworCXNsdHUJdDIsIGxlbiwgTkJZVEVTCisJYW5kCXQxLCBkc3QsIEFERFJNQVNLCisJYm5legl0MiwgY29weV9ieXRlc19jaGVja2xlbgorCSBhbmQJdDAsIHNyYywgQUREUk1BU0sKKwlhbmRpCW9kZCwgZHN0LCAweDEJCQkvKiBvZGQgYnVmZmVyPyAqLworCWJuZXoJdDEsIGRzdF91bmFsaWduZWQKKwkgbm9wCisJYm5legl0MCwgc3JjX3VuYWxpZ25lZF9kc3RfYWxpZ25lZAorCS8qCisJICogdXNlIGRlbGF5IHNsb3QgZm9yIGZhbGwtdGhyb3VnaAorCSAqIHNyYyBhbmQgZHN0IGFyZSBhbGlnbmVkOyBuZWVkIHRvIGNvbXB1dGUgcmVtCisJICovCitib3RoX2FsaWduZWQ6CisJIFNSTAl0MCwgbGVuLCBMT0dfTkJZVEVTKzMgICAgIyArMyBmb3IgOCB1bml0cy9pdGVyCisJYmVxegl0MCwgY2xlYW51cF9ib3RoX2FsaWduZWQgIyBsZW4gPCA4Kk5CWVRFUworCSBub3AKKwlTVUIJbGVuLCA4Kk5CWVRFUwkJIyBzdWJ0cmFjdCBoZXJlIGZvciBiZ2V6IGxvb3AKKwkuYWxpZ24JNAorMToKK0VYQygJTE9BRAl0MCwgVU5JVCgwKShzcmMpLAlsX2V4YykKK0VYQygJTE9BRAl0MSwgVU5JVCgxKShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMT0FECXQyLCBVTklUKDIpKHNyYyksCWxfZXhjX2NvcHkpCitFWEMoCUxPQUQJdDMsIFVOSVQoMykoc3JjKSwJbF9leGNfY29weSkKK0VYQygJTE9BRAl0NCwgVU5JVCg0KShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMT0FECXQ1LCBVTklUKDUpKHNyYyksCWxfZXhjX2NvcHkpCitFWEMoCUxPQUQJdDYsIFVOSVQoNikoc3JjKSwJbF9leGNfY29weSkKK0VYQygJTE9BRAl0NywgVU5JVCg3KShzcmMpLAlsX2V4Y19jb3B5KQorCVNVQglsZW4sIGxlbiwgOCpOQllURVMKKwlBREQJc3JjLCBzcmMsIDgqTkJZVEVTCitFWEMoCVNUT1JFCXQwLCBVTklUKDApKGRzdCksCXNfZXhjKQorCUFEREMoc3VtLCB0MCkKK0VYQygJU1RPUkUJdDEsIFVOSVQoMSkoZHN0KSwJc19leGMpCisJQUREQyhzdW0sIHQxKQorRVhDKAlTVE9SRQl0MiwgVU5JVCgyKShkc3QpLAlzX2V4YykKKwlBRERDKHN1bSwgdDIpCitFWEMoCVNUT1JFCXQzLCBVTklUKDMpKGRzdCksCXNfZXhjKQorCUFEREMoc3VtLCB0MykKK0VYQygJU1RPUkUJdDQsIFVOSVQoNCkoZHN0KSwJc19leGMpCisJQUREQyhzdW0sIHQ0KQorRVhDKAlTVE9SRQl0NSwgVU5JVCg1KShkc3QpLAlzX2V4YykKKwlBRERDKHN1bSwgdDUpCitFWEMoCVNUT1JFCXQ2LCBVTklUKDYpKGRzdCksCXNfZXhjKQorCUFEREMoc3VtLCB0NikKK0VYQygJU1RPUkUJdDcsIFVOSVQoNykoZHN0KSwJc19leGMpCisJQUREQyhzdW0sIHQ3KQorCWJnZXoJbGVuLCAxYgorCSBBREQJZHN0LCBkc3QsIDgqTkJZVEVTCisJQURECWxlbiwgOCpOQllURVMJCSMgcmV2ZXJ0IGxlbiAoc2VlIGFib3ZlKQorCisJLyoKKwkgKiBsZW4gPT0gdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IHRvIGNvcHkgPCA4Kk5CWVRFUworCSAqLworY2xlYW51cF9ib3RoX2FsaWduZWQ6CisjZGVmaW5lIHJlbSB0NworCWJlcXoJbGVuLCBkb25lCisJIHNsdHUJdDAsIGxlbiwgNCpOQllURVMKKwlibmV6CXQwLCBsZXNzX3RoYW5fNHVuaXRzCisJIGFuZAlyZW0sIGxlbiwgKE5CWVRFUy0xKQkjIHJlbSA9IGxlbiAlIE5CWVRFUworCS8qCisJICogbGVuID49IDQqTkJZVEVTCisJICovCitFWEMoCUxPQUQJdDAsIFVOSVQoMCkoc3JjKSwJbF9leGMpCitFWEMoCUxPQUQJdDEsIFVOSVQoMSkoc3JjKSwJbF9leGNfY29weSkKK0VYQygJTE9BRAl0MiwgVU5JVCgyKShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMT0FECXQzLCBVTklUKDMpKHNyYyksCWxfZXhjX2NvcHkpCisJU1VCCWxlbiwgbGVuLCA0Kk5CWVRFUworCUFERAlzcmMsIHNyYywgNCpOQllURVMKK0VYQygJU1RPUkUJdDAsIFVOSVQoMCkoZHN0KSwJc19leGMpCisJQUREQyhzdW0sIHQwKQorRVhDKAlTVE9SRQl0MSwgVU5JVCgxKShkc3QpLAlzX2V4YykKKwlBRERDKHN1bSwgdDEpCitFWEMoCVNUT1JFCXQyLCBVTklUKDIpKGRzdCksCXNfZXhjKQorCUFEREMoc3VtLCB0MikKK0VYQygJU1RPUkUJdDMsIFVOSVQoMykoZHN0KSwJc19leGMpCisJQUREQyhzdW0sIHQzKQorCWJlcXoJbGVuLCBkb25lCisJIEFERAlkc3QsIGRzdCwgNCpOQllURVMKK2xlc3NfdGhhbl80dW5pdHM6CisJLyoKKwkgKiByZW0gPSBsZW4gJSBOQllURVMKKwkgKi8KKwliZXEJcmVtLCBsZW4sIGNvcHlfYnl0ZXMKKwkgbm9wCisxOgorRVhDKAlMT0FECXQwLCAwKHNyYyksCQlsX2V4YykKKwlBREQJc3JjLCBzcmMsIE5CWVRFUworCVNVQglsZW4sIGxlbiwgTkJZVEVTCitFWEMoCVNUT1JFCXQwLCAwKGRzdCksCQlzX2V4YykKKwlBRERDKHN1bSwgdDApCisJYm5lCXJlbSwgbGVuLCAxYgorCSBBREQJZHN0LCBkc3QsIE5CWVRFUworCisJLyoKKwkgKiBzcmMgYW5kIGRzdCBhcmUgYWxpZ25lZCwgbmVlZCB0byBjb3B5IHJlbSBieXRlcyAocmVtIDwgTkJZVEVTKQorCSAqIEEgbG9vcCB3b3VsZCBkbyBvbmx5IGEgYnl0ZSBhdCBhIHRpbWUgd2l0aCBwb3NzaWJsZSBicmFuY2gKKwkgKiBtaXNwcmVkaWN0cy4gIENhbid0IGRvIGFuIGV4cGxpY2l0IExPQUQgZHN0LG1hc2ssb3IsU1RPUkUKKwkgKiBiZWNhdXNlIGNhbid0IGFzc3VtZSByZWFkLWFjY2VzcyB0byBkc3QuICBJbnN0ZWFkLCB1c2UKKwkgKiBTVFJFU1QgZHN0LCB3aGljaCBkb2Vzbid0IHJlcXVpcmUgcmVhZCBhY2Nlc3MgdG8gZHN0LgorCSAqCisJICogVGhpcyBjb2RlIHNob3VsZCBwZXJmb3JtIGJldHRlciB0aGFuIGEgc2ltcGxlIGxvb3Agb24gbW9kZXJuLAorCSAqIHdpZGUtaXNzdWUgbWlwcyBwcm9jZXNzb3JzIGJlY2F1c2UgdGhlIGNvZGUgaGFzIGZld2VyIGJyYW5jaGVzIGFuZAorCSAqIG1vcmUgaW5zdHJ1Y3Rpb24tbGV2ZWwgcGFyYWxsZWxpc20uCisJICovCisjZGVmaW5lIGJpdHMgdDIKKwliZXF6CWxlbiwgZG9uZQorCSBBREQJdDEsIGRzdCwgbGVuCSMgdDEgaXMganVzdCBwYXN0IGxhc3QgYnl0ZSBvZiBkc3QKKwlsaQliaXRzLCA4Kk5CWVRFUworCVNMTAlyZW0sIGxlbiwgMwkjIHJlbSA9IG51bWJlciBvZiBiaXRzIHRvIGtlZXAKK0VYQygJTE9BRAl0MCwgMChzcmMpLAkJbF9leGMpCisJU1VCCWJpdHMsIGJpdHMsIHJlbQkjIGJpdHMgPSBudW1iZXIgb2YgYml0cyB0byBkaXNjYXJkCisJU0hJRlRfRElTQ0FSRCB0MCwgdDAsIGJpdHMKK0VYQygJU1RSRVNUCXQwLCAtMSh0MSksCQlzX2V4YykKKwlTSElGVF9ESVNDQVJEX1JFVkVSVCB0MCwgdDAsIGJpdHMKKwkuc2V0IHJlb3JkZXIKKwlBRERDKHN1bSwgdDApCisJYglkb25lCisJLnNldCBub3Jlb3JkZXIKK2RzdF91bmFsaWduZWQ6CisJLyoKKwkgKiBkc3QgaXMgdW5hbGlnbmVkCisJICogdDAgPSBzcmMgJiBBRERSTUFTSworCSAqIHQxID0gZHN0ICYgQUREUk1BU0s7IFQxID4gMAorCSAqIGxlbiA+PSBOQllURVMKKwkgKgorCSAqIENvcHkgZW5vdWdoIGJ5dGVzIHRvIGFsaWduIGRzdAorCSAqIFNldCBtYXRjaCA9IChzcmMgYW5kIGRzdCBoYXZlIHNhbWUgYWxpZ25tZW50KQorCSAqLworI2RlZmluZSBtYXRjaCByZW0KK0VYQygJTERGSVJTVAl0MywgRklSU1QoMCkoc3JjKSwJbF9leGMpCisJQURECXQyLCB6ZXJvLCBOQllURVMKK0VYQygJTERSRVNUCXQzLCBSRVNUKDApKHNyYyksCWxfZXhjX2NvcHkpCisJU1VCCXQyLCB0MiwgdDEJIyB0MiA9IG51bWJlciBvZiBieXRlcyBjb3BpZWQKKwl4b3IJbWF0Y2gsIHQwLCB0MQorRVhDKAlTVEZJUlNUIHQzLCBGSVJTVCgwKShkc3QpLAlzX2V4YykKKwlTTEwJdDQsIHQxLCAzCQkjIHQ0ID0gbnVtYmVyIG9mIGJpdHMgdG8gZGlzY2FyZAorCVNISUZUX0RJU0NBUkQgdDMsIHQzLCB0NAorCS8qIG5vIFNISUZUX0RJU0NBUkRfUkVWRVJUIHRvIGhhbmRsZSBvZGQgYnVmZmVyIHByb3Blcmx5ICovCisJQUREQyhzdW0sIHQzKQorCWJlcQlsZW4sIHQyLCBkb25lCisJIFNVQglsZW4sIGxlbiwgdDIKKwlBREQJZHN0LCBkc3QsIHQyCisJYmVxegltYXRjaCwgYm90aF9hbGlnbmVkCisJIEFERAlzcmMsIHNyYywgdDIKKworc3JjX3VuYWxpZ25lZF9kc3RfYWxpZ25lZDoKKwlTUkwJdDAsIGxlbiwgTE9HX05CWVRFUysyICAgICMgKzIgZm9yIDQgdW5pdHMvaXRlcgorCWJlcXoJdDAsIGNsZWFudXBfc3JjX3VuYWxpZ25lZAorCSBhbmQJcmVtLCBsZW4sICg0Kk5CWVRFUy0xKSAgICMgcmVtID0gbGVuICUgNCpOQllURVMKKzE6CisvKgorICogQXZvaWQgY29uc2VjdXRpdmUgTEQqJ3MgdG8gdGhlIHNhbWUgcmVnaXN0ZXIgc2luY2Ugc29tZSBtaXBzCisgKiBpbXBsZW1lbnRhdGlvbnMgY2FuJ3QgaXNzdWUgdGhlbSBpbiB0aGUgc2FtZSBjeWNsZS4KKyAqIEl0J3MgT0sgdG8gbG9hZCBGSVJTVChOKzEpIGJlZm9yZSBSRVNUKE4pIGJlY2F1c2UgdGhlIHR3byBhZGRyZXNzZXMKKyAqIGFyZSB0byB0aGUgc2FtZSB1bml0ICh1bmxlc3Mgc3JjIGlzIGFsaWduZWQsIGJ1dCBpdCdzIG5vdCkuCisgKi8KK0VYQygJTERGSVJTVAl0MCwgRklSU1QoMCkoc3JjKSwJbF9leGMpCitFWEMoCUxERklSU1QJdDEsIEZJUlNUKDEpKHNyYyksCWxfZXhjX2NvcHkpCisJU1VCICAgICBsZW4sIGxlbiwgNCpOQllURVMKK0VYQygJTERSRVNUCXQwLCBSRVNUKDApKHNyYyksCWxfZXhjX2NvcHkpCitFWEMoCUxEUkVTVAl0MSwgUkVTVCgxKShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMREZJUlNUCXQyLCBGSVJTVCgyKShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMREZJUlNUCXQzLCBGSVJTVCgzKShzcmMpLAlsX2V4Y19jb3B5KQorRVhDKAlMRFJFU1QJdDIsIFJFU1QoMikoc3JjKSwJbF9leGNfY29weSkKK0VYQygJTERSRVNUCXQzLCBSRVNUKDMpKHNyYyksCWxfZXhjX2NvcHkpCisJQURECXNyYywgc3JjLCA0Kk5CWVRFUworI2lmZGVmIENPTkZJR19DUFVfU0IxCisJbm9wCQkJCSMgaW1wcm92ZXMgc2xvdHRpbmcKKyNlbmRpZgorRVhDKAlTVE9SRQl0MCwgVU5JVCgwKShkc3QpLAlzX2V4YykKKwlBRERDKHN1bSwgdDApCitFWEMoCVNUT1JFCXQxLCBVTklUKDEpKGRzdCksCXNfZXhjKQorCUFEREMoc3VtLCB0MSkKK0VYQygJU1RPUkUJdDIsIFVOSVQoMikoZHN0KSwJc19leGMpCisJQUREQyhzdW0sIHQyKQorRVhDKAlTVE9SRQl0MywgVU5JVCgzKShkc3QpLAlzX2V4YykKKwlBRERDKHN1bSwgdDMpCisJYm5lCWxlbiwgcmVtLCAxYgorCSBBREQJZHN0LCBkc3QsIDQqTkJZVEVTCisKK2NsZWFudXBfc3JjX3VuYWxpZ25lZDoKKwliZXF6CWxlbiwgZG9uZQorCSBhbmQJcmVtLCBsZW4sIE5CWVRFUy0xICAjIHJlbSA9IGxlbiAlIE5CWVRFUworCWJlcQlyZW0sIGxlbiwgY29weV9ieXRlcworCSBub3AKKzE6CitFWEMoCUxERklSU1QgdDAsIEZJUlNUKDApKHNyYyksCWxfZXhjKQorRVhDKAlMRFJFU1QJdDAsIFJFU1QoMCkoc3JjKSwJbF9leGNfY29weSkKKwlBREQJc3JjLCBzcmMsIE5CWVRFUworCVNVQglsZW4sIGxlbiwgTkJZVEVTCitFWEMoCVNUT1JFCXQwLCAwKGRzdCksCQlzX2V4YykKKwlBRERDKHN1bSwgdDApCisJYm5lCWxlbiwgcmVtLCAxYgorCSBBREQJZHN0LCBkc3QsIE5CWVRFUworCitjb3B5X2J5dGVzX2NoZWNrbGVuOgorCWJlcXoJbGVuLCBkb25lCisJIG5vcAorY29weV9ieXRlczoKKwkvKiAwIDwgbGVuIDwgTkJZVEVTICAqLworI2lmZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgorI2RlZmluZSBTSElGVF9TVEFSVCAwCisjZGVmaW5lIFNISUZUX0lOQyA4CisjZWxzZQorI2RlZmluZSBTSElGVF9TVEFSVCA4KihOQllURVMtMSkKKyNkZWZpbmUgU0hJRlRfSU5DIC04CisjZW5kaWYKKwltb3ZlCXQyLCB6ZXJvCSMgcGFydGlhbCB3b3JkCisJbGkJdDMsIFNISUZUX1NUQVJUCSMgc2hpZnQKKy8qIHVzZSBsX2V4Y19jb3B5IGhlcmUgdG8gcmV0dXJuIGNvcnJlY3Qgc3VtIG9uIGZhdWx0ICovCisjZGVmaW5lIENPUFlfQllURShOKQkJCVwKK0VYQygJbGJ1CXQwLCBOKHNyYyksIGxfZXhjX2NvcHkpOwlcCisJU1VCCWxlbiwgbGVuLCAxOwkJXAorRVhDKAlzYgl0MCwgTihkc3QpLCBzX2V4Yyk7CVwKKwlTTExWCXQwLCB0MCwgdDM7CQlcCisJYWRkdQl0MywgU0hJRlRfSU5DOwkJXAorCWJlcXoJbGVuLCBjb3B5X2J5dGVzX2RvbmU7CVwKKwkgb3IJdDIsIHQwCisKKwlDT1BZX0JZVEUoMCkKKwlDT1BZX0JZVEUoMSkKKyNpZmRlZiBVU0VfRE9VQkxFCisJQ09QWV9CWVRFKDIpCisJQ09QWV9CWVRFKDMpCisJQ09QWV9CWVRFKDQpCisJQ09QWV9CWVRFKDUpCisjZW5kaWYKK0VYQygJbGJ1CXQwLCBOQllURVMtMihzcmMpLCBsX2V4Y19jb3B5KQorCVNVQglsZW4sIGxlbiwgMQorRVhDKAlzYgl0MCwgTkJZVEVTLTIoZHN0KSwgc19leGMpCisJU0xMVgl0MCwgdDAsIHQzCisJb3IJdDIsIHQwCitjb3B5X2J5dGVzX2RvbmU6CisJQUREQyhzdW0sIHQyKQorZG9uZToKKwkvKiBmb2xkIGNoZWNrc3VtICovCisjaWZkZWYgVVNFX0RPVUJMRQorCWRzbGwzMgl2MSwgc3VtLCAwCisJZGFkZHUJc3VtLCB2MQorCXNsdHUJdjEsIHN1bSwgdjEKKwlkc3JhMzIJc3VtLCBzdW0sIDAKKwlhZGR1CXN1bSwgdjEKKyNlbmRpZgorCXNsbAl2MSwgc3VtLCAxNgorCWFkZHUJc3VtLCB2MQorCXNsdHUJdjEsIHN1bSwgdjEKKwlzcmwJc3VtLCBzdW0sIDE2CisJYWRkdQlzdW0sIHYxCisKKwkvKiBvZGQgYnVmZmVyIGFsaWdubWVudD8gKi8KKwliZXF6CW9kZCwgMWYKKwkgbm9wCisJc2xsCXYxLCBzdW0sIDgKKwlzcmwJc3VtLCBzdW0sIDgKKwlvcglzdW0sIHYxCisJYW5kaQlzdW0sIDB4ZmZmZgorMToKKwkuc2V0IHJlb3JkZXIKKwlBRERDKHN1bSwgcHN1bSkKKwlqcglyYQorCS5zZXQgbm9yZW9yZGVyCisKK2xfZXhjX2NvcHk6CisJLyoKKwkgKiBDb3B5IGJ5dGVzIGZyb20gc3JjIHVudGlsIGZhdWx0aW5nIGxvYWQgYWRkcmVzcyAob3IgdW50aWwgYQorCSAqIGxiIGZhdWx0cykKKwkgKgorCSAqIFdoZW4gcmVhY2hlZCBieSBhIGZhdWx0aW5nIExERklSU1QvTERSRVNULCBUSFJFQURfQlVBRERSKCQyOCkKKwkgKiBtYXkgYmUgbW9yZSB0aGFuIGEgYnl0ZSBiZXlvbmQgdGhlIGxhc3QgYWRkcmVzcy4KKwkgKiBIZW5jZSwgdGhlIGxiIGJlbG93IG1heSBnZXQgYW4gZXhjZXB0aW9uLgorCSAqCisJICogQXNzdW1lcyBzcmMgPCBUSFJFQURfQlVBRERSKCQyOCkKKwkgKi8KKwlMT0FECXQwLCBUSV9UQVNLKCQyOCkKKwkgbGkJdDIsIFNISUZUX1NUQVJUCisJTE9BRAl0MCwgVEhSRUFEX0JVQUREUih0MCkKKzE6CitFWEMoCWxidQl0MSwgMChzcmMpLAlsX2V4YykKKwlBREQJc3JjLCBzcmMsIDEKKwlzYgl0MSwgMChkc3QpCSMgY2FuJ3QgZmF1bHQgLS0gd2UncmUgY29weV9mcm9tX3VzZXIKKwlTTExWCXQxLCB0MSwgdDIKKwlhZGR1CXQyLCBTSElGVF9JTkMKKwlBRERDKHN1bSwgdDEpCisJYm5lCXNyYywgdDAsIDFiCisJIEFERAlkc3QsIGRzdCwgMQorbF9leGM6CisJTE9BRAl0MCwgVElfVEFTSygkMjgpCisJIG5vcAorCUxPQUQJdDAsIFRIUkVBRF9CVUFERFIodDApCSMgdDAgaXMganVzdCBwYXN0IGxhc3QgZ29vZCBhZGRyZXNzCisJIG5vcAorCVNVQglsZW4sIEFULCB0MAkJIyBsZW4gbnVtYmVyIG9mIHVuY29waWVkIGJ5dGVzCisJLyoKKwkgKiBIZXJlJ3Mgd2hlcmUgd2UgcmVseSBvbiBzcmMgYW5kIGRzdCBiZWluZyBpbmNyZW1lbnRlZCBpbiB0YW5kZW0sCisJICogICBTZWUgKDMpIGFib3ZlLgorCSAqIGRzdCArPSAoZmF1bHQgYWRkciAtIHNyYykgdG8gcHV0IGRzdCBhdCBmaXJzdCBieXRlIHRvIGNsZWFyCisJICovCisJQURECWRzdCwgdDAJCQkjIGNvbXB1dGUgc3RhcnQgYWRkcmVzcyBpbiBhMQorCVNVQglkc3QsIHNyYworCS8qCisJICogQ2xlYXIgbGVuIGJ5dGVzIHN0YXJ0aW5nIGF0IGRzdC4gIENhbid0IGNhbGwgX19iemVybyBiZWNhdXNlIGl0CisJICogbWlnaHQgbW9kaWZ5IGxlbi4gIEFuIGluZWZmaWNpZW50IGxvb3AgZm9yIHRoZXNlIHJhcmUgdGltZXMuLi4KKwkgKi8KKwliZXF6CWxlbiwgZG9uZQorCSBTVUIJc3JjLCBsZW4sIDEKKzE6CXNiCXplcm8sIDAoZHN0KQorCUFERAlkc3QsIGRzdCwgMQorCWJuZXoJc3JjLCAxYgorCSBTVUIJc3JjLCBzcmMsIDEKKwlsaQl2MSwgLUVGQVVMVAorCWIJZG9uZQorCSBzdwl2MSwgKGVycnB0cikKKworc19leGM6CisJbGkJdjAsIC0xIC8qIGludmFsaWQgY2hlY2tzdW0gKi8KKwlsaQl2MSwgLUVGQVVMVAorCWpyCXJhCisJIHN3CXYxLCAoZXJycHRyKQorCUVORChfX2NzdW1fcGFydGlhbF9jb3B5X3VzZXIpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGliL2NzdW1fcGFydGlhbF9jb3B5LmMgYi9hcmNoL21pcHMvbGliL2NzdW1fcGFydGlhbF9jb3B5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MjBmMmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2xpYi9jc3VtX3BhcnRpYWxfY29weS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSBXYWxkb3JmIEVsZWN0cm9uaWNzIEdtYkgKLSAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBSYWxmIEJhZWNobGUKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgotCi0vKgotICogY29weSB3aGlsZSBjaGVja3N1bW1pbmcsIG90aGVyd2lzZSBsaWtlIGNzdW1fcGFydGlhbAotICovCi1fX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsCi0Jdm9pZCAqZHN0LCBpbnQgbGVuLCBfX3dzdW0gc3VtKQotewotCS8qCi0JICogSXQncyAyOjMwIGFtIGFuZCBJIGRvbid0IGZlZWwgbGlrZSBkb2luZyBpdCByZWFsIC4uLgotCSAqIFRoaXMgaXMgbG90cyBzbG93ZXIgdGhhbiB0aGUgcmVhbCB0aGluZyAodG0pCi0JICovCi0Jc3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgbGVuLCBzdW0pOwotCW1lbWNweShkc3QsIHNyYywgbGVuKTsKLQotCXJldHVybiBzdW07Ci19Ci0KLS8qCi0gKiBDb3B5IGZyb20gdXNlcnNwYWNlIGFuZCBjb21wdXRlIGNoZWNrc3VtLiAgSWYgd2UgY2F0Y2ggYW4gZXhjZXB0aW9uCi0gKiB0aGVuIHplcm8gdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlci4KLSAqLwotX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKLQl2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqZXJyX3B0cikKLXsKLQlpbnQgbWlzc2luZzsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JbWlzc2luZyA9IGNvcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBsZW4pOwotCWlmIChtaXNzaW5nKSB7Ci0JCW1lbXNldChkc3QgKyBsZW4gLSBtaXNzaW5nLCAwLCBtaXNzaW5nKTsKLQkJKmVycl9wdHIgPSAtRUZBVUxUOwotCX0KLQotCXJldHVybiBjc3VtX3BhcnRpYWwoZHN0LCBsZW4sIHN1bSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy90aW1lLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy90aW1lLmMKaW5kZXggZTQ2MDRjNy4uYTNjM2ExZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3RpbWUuYwpAQCAtNDcsNiArNDcsOSBAQAogI2lmZGVmIENPTkZJR19NSVBTX01BTFRBCiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL21hbHRhaW50Lmg+CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQU19TRUFECisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL3NlYWRpbnQuaD4KKyNlbmRpZgogCiB1bnNpZ25lZCBsb25nIGNwdV9raHo7CiAKQEAgLTI2MywxMSArMjY2LDEzIEBACiAKIHZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQogeworI2lmZGVmIE1TQzAxRV9JTlRfQkFTRQogCWlmIChjcHVfaGFzX3ZlaWMpIHsKIAkJc2V0X3ZpX2hhbmRsZXIgKE1TQzAxRV9JTlRfQ1BVQ1RSLCBtaXBzX3RpbWVyX2Rpc3BhdGNoKTsKIAkJbWlwc19jcHVfdGltZXJfaXJxID0gTVNDMDFFX0lOVF9CQVNFICsgTVNDMDFFX0lOVF9DUFVDVFI7Ci0JfQotCWVsc2UgeworCX0gZWxzZQorI2VuZGlmCisJewogCQlpZiAoY3B1X2hhc192aW50KQogCQkJc2V0X3ZpX2hhbmRsZXIgKE1JUFNDUFVfSU5UX0NQVUNUUiwgbWlwc190aW1lcl9kaXNwYXRjaCk7CiAJCW1pcHNfY3B1X3RpbWVyX2lycSA9IE1JUFNDUFVfSU5UX0JBU0UgKyBNSVBTQ1BVX0lOVF9DUFVDVFI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvTWFrZWZpbGUgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvTWFrZWZpbGUKaW5kZXggNzdlZTVjNi4uY2I3ZjM0OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvTWFrZWZpbGUKQEAgLTIwLDQgKzIwLDUgQEAKICMKIAogb2JqLXkgOj0gbWFsdGFfaW50Lm8gbWFsdGFfc2V0dXAubworb2JqLSQoQ09ORklHX01URCkgKz0gbWFsdGFfbXRkLm8KIG9iai0kKENPTkZJR19TTVApICs9IG1hbHRhX3NtcC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfbXRkLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfbXRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkOWJkZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9tdGQuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKiAgICAgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bXRkL210ZC1hYmkuaD4KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG1hbHRhX210ZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9CQkiWUFNT04iLAorCQkub2Zmc2V0ID0JMHgwLAorCQkuc2l6ZSA9CQkweDEwMDAwMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFCisJfSwgeworCQkubmFtZSA9CQkiVXNlciBGUyIsCisJCS5vZmZzZXQgPSAJMHgxMDAwMDAsCisJCS5zaXplID0JCTB4MmUwMDAwCisJfSwgeworCQkubmFtZSA9CQkiQm9hcmQgQ29uZmlnIiwKKwkJLm9mZnNldCA9CTB4M2UwMDAwLAorCQkuc2l6ZSA9CQkweDAyMDAwMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWFsdGFfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gNCwKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG1hbHRhX210ZF9wYXJ0aXRpb25zKSwKKwkucGFydHMJCT0gbWFsdGFfbXRkX3BhcnRpdGlvbnMKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWFsdGFfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IDB4MWUwMDAwMDAsCisJLmVuZAkJPSAweDFlM2ZmZmZmLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWFsdGFfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZtYWx0YV9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZtYWx0YV9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1hbHRhX210ZF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtYWx0YV9mbGFzaCk7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobWFsdGFfbXRkX2luaXQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvbWFsdGEvbWFsdGFfc2V0dXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zZXR1cC5jCmluZGV4IDI4MmYzZTUuLjU2ZWE3NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9tYWx0YS9tYWx0YV9zZXR1cC5jCkBAIC0yMSwxMyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CiAKLSNpZmRlZiBDT05GSUdfTVRECi0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC01OCwzMCArNTEsNiBAQAogCXsgLm5hbWUgPSAiZG1hMiIsIC5zdGFydCA9IDB4YzAsIC5lbmQgPSAweGRmLCAuZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1kgfSwKIH07CiAKLSNpZmRlZiBDT05GSUdfTVRECi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbWFsdGFfbXRkX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lID0JCSJZQU1PTiIsCi0JCS5vZmZzZXQgPQkweDAsCi0JCS5zaXplID0JCTB4MTAwMDAwLAotCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUKLQl9LAotCXsKLQkJLm5hbWUgPQkJIlVzZXIgRlMiLAotCQkub2Zmc2V0ID0gCTB4MTAwMDAwLAotCQkuc2l6ZSA9CQkweDJlMDAwMAotCX0sCi0JewotCQkubmFtZSA9CQkiQm9hcmQgQ29uZmlnIiwKLQkJLm9mZnNldCA9CTB4M2UwMDAwLAotCQkuc2l6ZSA9CQkweDAyMDAwMCwKLQkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFCi0JfQotfTsKLQotI2RlZmluZSBudW1iZXJfcGFydGl0aW9ucwkoc2l6ZW9mKG1hbHRhX210ZF9wYXJ0aXRpb25zKS9zaXplb2Yoc3RydWN0IG10ZF9wYXJ0aXRpb24pKQotI2VuZGlmCi0KIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewogCXJldHVybiAiTUlQUyBNYWx0YSI7CkBAIC0yMTEsMTQgKzE4MCw2IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01URAotCS8qCi0JICogU3VwcG9ydCBmb3IgTVREIG9uIE1hbHRhLiBVc2UgdGhlIGdlbmVyaWMgcGh5c21hcCBkcml2ZXIKLQkgKi8KLQlwaHlzbWFwX2NvbmZpZ3VyZSgweDFlMDAwMDAwLCAweDQwMDAwMCwgNCwgTlVMTCk7Ci0JcGh5c21hcF9zZXRfcGFydGl0aW9ucyhtYWx0YV9tdGRfcGFydGl0aW9ucywgbnVtYmVyX3BhcnRpdGlvbnMpOwotI2VuZGlmCi0KIAltaXBzX3JlYm9vdF9zZXR1cCgpOwogCiAJYm9hcmRfdGltZV9pbml0ID0gbWlwc190aW1lX2luaXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC9zZWFkX2ludC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NlYWQvc2VhZF9pbnQuYwppbmRleCBmNDQ1ZmNkLi44NzRjY2IwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC9zZWFkX2ludC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zZWFkL3NlYWRfaW50LmMKQEAgLTIxLDcgKzIxLDcgQEAKICAqIFNlYWQgYm9hcmQuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgpAQCAtMTA4LDcgKzEwOCw3IEBACiAJaWYgKGlycSA+PSAwKQogCQlkb19JUlEoTUlQU0NQVV9JTlRfQkFTRSArIGlycSk7CiAJZWxzZQotCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7CisJCXNwdXJpb3VzX2ludGVycnVwdCgpOwogfQogCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zZXR1cC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1fc2V0dXAuYwppbmRleCAyNjU5YzFjLi5lYTIwNjZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NldHVwLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAlib2FyZF90aW1lX2luaXQgPSBzaW1fdGltZV9pbml0OwogCXByb21fcHJpbnRmKCJMaW51eCBzdGFydGVkLi4uXG4iKTsKIAotI2lmZGVmIENPTkZJR19NVF9TTVAKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVAKIAlzYW5pdGl6ZV90bGJfZW50cmllcygpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vY2FjaGUuYyBiL2FyY2gvbWlwcy9tbS9jYWNoZS5jCmluZGV4IGNhZjgwN2QuLjFmOTU0YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jYWNoZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9jYWNoZS5jCkBAIC0zMiw2ICszMiw3IEBACiB2b2lkICgqZmx1c2hfZGF0YV9jYWNoZV9wYWdlKSh1bnNpZ25lZCBsb25nIGFkZHIpOwogdm9pZCAoKmZsdXNoX2ljYWNoZV9hbGwpKHZvaWQpOwogCitFWFBPUlRfU1lNQk9MX0dQTChsb2NhbF9mbHVzaF9kYXRhX2NhY2hlX3BhZ2UpOwogRVhQT1JUX1NZTUJPTChmbHVzaF9kYXRhX2NhY2hlX3BhZ2UpOwogCiAjaWZkZWYgQ09ORklHX0RNQV9OT05DT0hFUkVOVApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2luaXQuYyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKaW5kZXggOWUyOWJhOS4uNDkwNjVjMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2luaXQuYworKysgYi9hcmNoL21pcHMvbW0vaW5pdC5jCkBAIC0yMDMsNiArMjAzLDMxIEBACiAJcHJlZW1wdF9jaGVja19yZXNjaGVkKCk7CiB9CiAKK3ZvaWQgY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCisJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdm9pZCAqdmZyb20sICp2dG87CisKKwl2dG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjEpOworCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMpIHsKKwkJdmZyb20gPSBrbWFwX2NvaGVyZW50KGZyb20sIHZhZGRyKTsKKwkJY29weV9wYWdlKHZ0bywgdmZyb20pOworCQlrdW5tYXBfY29oZXJlbnQoZnJvbSk7CisJfSBlbHNlIHsKKwkJdmZyb20gPSBrbWFwX2F0b21pYyhmcm9tLCBLTV9VU0VSMCk7CisJCWNvcHlfcGFnZSh2dG8sIHZmcm9tKTsKKwkJa3VubWFwX2F0b21pYyh2ZnJvbSwgS01fVVNFUjApOworCX0KKwlpZiAoKCh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykgJiYgIWNwdV9oYXNfaWNfZmlsbHNfZl9kYykgfHwKKwkgICAgcGFnZXNfZG9fYWxpYXMoKHVuc2lnbmVkIGxvbmcpdnRvLCB2YWRkciAmIFBBR0VfTUFTSykpCisJCWZsdXNoX2RhdGFfY2FjaGVfcGFnZSgodW5zaWduZWQgbG9uZyl2dG8pOworCWt1bm1hcF9hdG9taWModnRvLCBLTV9VU0VSMSk7CisJLyogTWFrZSBzdXJlIHRoaXMgcGFnZSBpcyBjbGVhcmVkIG9uIG90aGVyIENQVSdzIHRvbyBiZWZvcmUgdXNpbmcgaXQgKi8KKwlzbXBfd21iKCk7Cit9CisKK0VYUE9SVF9TWU1CT0woY29weV91c2VyX2hpZ2hwYWdlKTsKKwogdm9pZCBjb3B5X3RvX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiAJdW5zaWduZWQgbG9uZyBsZW4pCkBAIC0zMTYsNyArMzQxLDcgQEAKIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU10gPSB7IDAsIH07Ci0JdW5zaWduZWQgbG9uZyBtYXhfZG1hLCBoaWdoLCBsb3c7CisJdW5zaWduZWQgbG9uZyBtYXhfZG1hLCBsb3c7CiAjaWZuZGVmIENPTkZJR19GTEFUTUVNCiAJdW5zaWduZWQgbG9uZyB6aG9sZXNfc2l6ZVtNQVhfTlJfWk9ORVNdID0geyAwLCB9OwogCXVuc2lnbmVkIGxvbmcgaSwgaiwgcGZuOwpAQCAtMzMxLDcgKzM1Niw2IEBACiAKIAltYXhfZG1hID0gdmlydF90b19waHlzKChjaGFyICopTUFYX0RNQV9BRERSRVNTKSA+PiBQQUdFX1NISUZUOwogCWxvdyA9IG1heF9sb3dfcGZuOwotCWhpZ2ggPSBoaWdoZW5kX3BmbjsKIAogI2lmZGVmIENPTkZJR19JU0EKIAlpZiAobG93IDwgbWF4X2RtYSkKQEAgLTM0NCwxMyArMzY4LDEzIEBACiAJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBsb3c7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQotCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVGhpcyBwcm9jZXNzb3IgZG9lc24ndCBzdXBwb3J0IGhpZ2htZW0uIik7Ci0JCWlmIChoaWdoIC0gbG93KQotCQkJcHJpbnRrKCIgJWxkayBoaWdobWVtIGlnbm9yZWQiLCBoaWdoIC0gbG93KTsKLQkJcHJpbnRrKCJcbiIpOwotCX0gZWxzZQotCQl6b25lc19zaXplW1pPTkVfSElHSE1FTV0gPSBoaWdoIC0gbG93OworCXpvbmVzX3NpemVbWk9ORV9ISUdITUVNXSA9IGhpZ2hlbmRfcGZuIC0gaGlnaHN0YXJ0X3BmbjsKKworCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMgJiYgem9uZXNfc2l6ZVtaT05FX0hJR0hNRU1dKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRoaXMgcHJvY2Vzc29yIGRvZXNuJ3Qgc3VwcG9ydCBoaWdobWVtLiIKKwkJICAgICAgICIgJWxkayBoaWdobWVtIGlnbm9yZWRcbiIsIHpvbmVzX3NpemVbWk9ORV9ISUdITUVNXSk7CisJCXpvbmVzX3NpemVbWk9ORV9ISUdITUVNXSA9IDA7CisJfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkxBVE1FTQpAQCAtNDc3LDcgKzUwMSw4IEBACiAKIAlmcmVlZCA9IHByb21fZnJlZV9wcm9tX21lbW9yeSgpOwogCWlmIChmcmVlZCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyBmaXJtd2FyZSBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsZnJlZWQpOworCQlwcmludGsoS0VSTl9JTkZPICJGcmVlaW5nIGZpcm13YXJlIG1lbW9yeTogJWxka2IgZnJlZWRcbiIsCisJCSAgICAgICBmcmVlZCA+PiAxMCk7CiAKIAlmcmVlX2luaXRfcGFnZXMoInVudXNlZCBrZXJuZWwgbWVtb3J5IiwKIAkJCV9fcGFfc3ltYm9sKCZfX2luaXRfYmVnaW4pLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2lvcmVtYXAuYyBiL2FyY2gvbWlwcy9tbS9pb3JlbWFwLmMKaW5kZXggY2VhN2QwZS4uZmMyYzk2ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2lvcmVtYXAuYworKysgYi9hcmNoL21pcHMvbW0vaW9yZW1hcC5jCkBAIC02LDk4ICs2LDEzIEBACiAgKiAoQykgQ29weXJpZ2h0IDE5OTUgMTk5NiBMaW51cyBUb3J2YWxkcwogICogKEMpIENvcHlyaWdodCAyMDAxLCAyMDAyIFJhbGYgQmFlY2hsZQogICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZW1hcF9hcmVhX3B0ZShwdGVfdCAqIHB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCXBoeXNfdCBzaXplLCBwaHlzX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXBoeXNfdCBlbmQ7Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0JcGdwcm90X3QgcGdwcm90ID0gX19wZ3Byb3QoX1BBR0VfR0xPQkFMIHwgX1BBR0VfUFJFU0VOVCB8IF9fUkVBREFCTEUKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICB8IF9fV1JJVEVBQkxFIHwgZmxhZ3MpOwotCi0JYWRkcmVzcyAmPSB+UE1EX01BU0s7Ci0JZW5kID0gYWRkcmVzcyArIHNpemU7Ci0JaWYgKGVuZCA+IFBNRF9TSVpFKQotCQllbmQgPSBQTURfU0laRTsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCXBmbiA9IHBoeXNfYWRkciA+PiBQQUdFX1NISUZUOwotCWRvIHsKLQkJaWYgKCFwdGVfbm9uZSgqcHRlKSkgewotCQkJcHJpbnRrKCJyZW1hcF9hcmVhX3B0ZTogcGFnZSBhbHJlYWR5IGV4aXN0c1xuIik7Ci0JCQlCVUcoKTsKLQkJfQotCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwZm4sIHBncHJvdCkpOwotCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKLQkJcGZuKys7Ci0JCXB0ZSsrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmVtYXBfYXJlYV9wbWQocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQlwaHlzX3Qgc2l6ZSwgcGh5c190IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlwaHlzX3QgZW5kOwotCi0JYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUEdESVJfU0laRSkKLQkJZW5kID0gUEdESVJfU0laRTsKLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcHRlX3QgKiBwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcmVzcyk7Ci0JCWlmICghcHRlKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXJlbWFwX2FyZWFfcHRlKHB0ZSwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywgYWRkcmVzcyArIHBoeXNfYWRkciwgZmxhZ3MpOwotCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQTURfU0laRSkgJiBQTURfTUFTSzsKLQkJcG1kKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJlbWFwX2FyZWFfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwaHlzX3QgcGh5c19hZGRyLAotCXBoeXNfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCWludCBlcnJvcjsKLQlwZ2RfdCAqIGRpcjsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHJlc3MgKyBzaXplOwotCi0JcGh5c19hZGRyIC09IGFkZHJlc3M7Ci0JZGlyID0gcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcyk7Ci0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0JaWYgKGFkZHJlc3MgPj0gZW5kKQotCQlCVUcoKTsKLQlkbyB7Ci0JCXB1ZF90ICpwdWQ7Ci0JCXBtZF90ICpwbWQ7Ci0KLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlwdWQgPSBwdWRfYWxsb2MoJmluaXRfbW0sIGRpciwgYWRkcmVzcyk7Ci0JCWlmICghcHVkKQotCQkJYnJlYWs7Ci0JCXBtZCA9IHBtZF9hbGxvYygmaW5pdF9tbSwgcHVkLCBhZGRyZXNzKTsKLQkJaWYgKCFwbWQpCi0JCQlicmVhazsKLQkJaWYgKHJlbWFwX2FyZWFfcG1kKHBtZCwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywKLQkJCQkJIHBoeXNfYWRkciArIGFkZHJlc3MsIGZsYWdzKSkKLQkJCWJyZWFrOwotCQllcnJvciA9IDA7Ci0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBHRElSX1NJWkUpICYgUEdESVJfTUFTSzsKLQkJZGlyKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCWZsdXNoX3RsYl9hbGwoKTsKLQlyZXR1cm4gZXJyb3I7Ci19CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogLyoKICAqIEdlbmVyaWMgbWFwcGluZyBmdW5jdGlvbiAobm90IHZpc2libGUgb3V0c2lkZSk6CkBAIC0xMjEsNiArMzYsNyBAQAogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXBoeXNfdCBsYXN0X2FkZHI7CiAJdm9pZCAqIGFkZHI7CisJcGdwcm90X3QgcGdwcm90OwogCiAJcGh5c19hZGRyID0gZml4dXBfYmlncGh5c19hZGRyKHBoeXNfYWRkciwgc2l6ZSk7CiAKQEAgLTE1Miw2ICs2OCw5IEBACiAJCQkJcmV0dXJuIE5VTEw7CiAJfQogCisJcGdwcm90ID0gX19wZ3Byb3QoX1BBR0VfR0xPQkFMIHwgX1BBR0VfUFJFU0VOVCB8IF9fUkVBREFCTEUKKwkJCSAgfCBfX1dSSVRFQUJMRSB8IGZsYWdzKTsKKwogCS8qCiAJICogTWFwcGluZ3MgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQKIAkgKi8KQEAgLTE2Niw3ICs4NSw4IEBACiAJaWYgKCFhcmVhKQogCQlyZXR1cm4gTlVMTDsKIAlhZGRyID0gYXJlYS0+YWRkcjsKLQlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZykgYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncykpIHsKKwlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsICh1bnNpZ25lZCBsb25nKWFkZHIgKyBzaXplLAorCQkJICAgICAgIHBoeXNfYWRkciwgcGdwcm90KSkgewogCQl2dW5tYXAoYWRkcik7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9wZy1yNGsuYwppbmRleCBkNDFmYzU4Li5kYzc5NWJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vcGctcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL3BnLXI0ay5jCkBAIC0yNDMsMTEgKzI0MywxMCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYnVpbGRfc3RvcmVfcmVnKGludCByZWcpCiB7Ci0JaWYgKGNwdV9oYXNfcHJlZmV0Y2gpCi0JCWlmIChyZWcpCi0JCQlidWlsZF9kc3RfcHJlZihwcmVmX29mZnNldF9jb3B5KTsKLQkJZWxzZQotCQkJYnVpbGRfZHN0X3ByZWYocHJlZl9vZmZzZXRfY2xlYXIpOworCWludCBwcmVmX29mZiA9IGNwdV9oYXNfcHJlZmV0Y2ggPworCQkocmVnID8gcHJlZl9vZmZzZXRfY29weSA6IHByZWZfb2Zmc2V0X2NsZWFyKSA6IDA7CisJaWYgKHByZWZfb2ZmKQorCQlidWlsZF9kc3RfcHJlZihwcmVmX29mZik7CiAJZWxzZSBpZiAoY3B1X2hhc19jYWNoZV9jZGV4X3MpCiAJCWJ1aWxkX2NkZXhfcygpOwogCWVsc2UgaWYgKGNwdV9oYXNfY2FjaGVfY2RleF9wKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggMmUwZTIxZS4uNjUxNjBkNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCkBAIC0xMDYsNyArMTA2LDYgQEAKIAkJRU5URVJfQ1JJVElDQUwoZmxhZ3MpOwogCQlzaXplID0gKGVuZCAtIHN0YXJ0ICsgKFBBR0VfU0laRSAtIDEpKSA+PiBQQUdFX1NISUZUOwogCQlzaXplID0gKHNpemUgKyAxKSA+PiAxOwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCWlmIChzaXplIDw9IGN1cnJlbnRfY3B1X2RhdGEudGxic2l6ZS8yKSB7CiAJCQlpbnQgb2xkcGlkID0gcmVhZF9jMF9lbnRyeWhpKCk7CiAJCQlpbnQgbmV3cGlkID0gY3B1X2FzaWQoY3B1LCBtbSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvcHJvbS5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3Byb20uYwppbmRleCA2NTA5YTljLi4yZjc1YzZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9wcm9tLmMKQEAgLTI4LDcgKzI4LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1hcnZlbGxfYmFzZTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGJ1c19jbG9jazsKIAotI2lmZGVmIENPTkZJR19HQUxJTExFT19HVDY0MjQwX0VUSAorI2lmZGVmIENPTkZJR19HQUxJTEVPX0dUNjQyNDBfRVRICiBleHRlcm4gdW5zaWduZWQgY2hhciBwcm9tX21hY19hZGRyX2Jhc2VbNl07CiAjZW5kaWYKIApAQCAtNjEsNyArNjEsNyBAQAogCW1pcHNfbWFjaGdyb3VwID0gTUFDSF9HUk9VUF9NT01FTkNPOwogCW1pcHNfbWFjaHR5cGUgPSBNQUNIX01PTUVOQ09fT0NFTE9UX0c7CiAKLSNpZmRlZiBDT05GSUdfR0FMSUxMRU9fR1Q2NDI0MF9FVEgKKyNpZmRlZiBDT05GSUdfR0FMSUxFT19HVDY0MjQwX0VUSAogCS8qIGdldCB0aGUgYmFzZSBNQUMgYWRkcmVzcyBmb3Igb24tYm9hcmQgZXRoZXJuZXQgcG9ydHMgKi8KIAltZW1jcHkocHJvbV9tYWNfYWRkcl9iYXNlLCAodm9pZCopMHhmYzgwN2NmMiwgNik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9zZXR1cC5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3NldHVwLmMKaW5kZXggZDI4OGY3Yi4uOWRiNjM4YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL3NldHVwLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogI2luY2x1ZGUgIm9jZWxvdF9wbGQuaCIKIAotI2lmZGVmIENPTkZJR19HQUxJTExFT19HVDY0MjQwX0VUSAorI2lmZGVmIENPTkZJR19HQUxJTEVPX0dUNjQyNDBfRVRICiBleHRlcm4gdW5zaWduZWQgY2hhciBwcm9tX21hY19hZGRyX2Jhc2VbNl07CiAjZW5kaWYKIApAQCAtMTg1LDcgKzE4NSw3IEBACiAJLyogZG8gaGFuZG9mZiByZWNvbmZpZ3VyYXRpb24gKi8KIAlQTU9OX3YyX3NldHVwKCk7CiAKLSNpZmRlZiBDT05GSUdfR0FMSUxMRU9fR1Q2NDI0MF9FVEgKKyNpZmRlZiBDT05GSUdfR0FMSUxFT19HVDY0MjQwX0VUSAogCS8qIGdldCB0aGUgbWFjIGFkZHIgKi8KIAltZW1jcHkocHJvbV9tYWNfYWRkcl9iYXNlLCAodm9pZCopMHhmYzgwN2NmMiwgNik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUgYi9hcmNoL21pcHMvcGNpL01ha2VmaWxlCmluZGV4IDcwY2I1NWIuLjgyYjIwYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQpAQCAtNDMsNyArNDMsNyBAQAogb2JqLSQoQ09ORklHX1NJQllURV9TQjEyNTApCSs9IGZpeHVwLXNiMTI1MC5vIHBjaS1zYjEyNTAubwogb2JqLSQoQ09ORklHX1NJQllURV9CQ00xMTJYKQkrPSBmaXh1cC1zYjEyNTAubyBwY2ktc2IxMjUwLm8KIG9iai0kKENPTkZJR19TSUJZVEVfQkNNMXg4MCkJKz0gcGNpLWJjbTE0ODAubyBwY2ktYmNtMTQ4MGh0Lm8KLW9iai0kKENPTkZJR19TTklfUk0yMDBfUENJKQkrPSBmaXh1cC1zbmkubyBvcHMtc25pLm8KK29iai0kKENPTkZJR19TTklfUk0pCQkrPSBmaXh1cC1zbmkubyBvcHMtc25pLm8KIG9iai0kKENPTkZJR19UQU5CQUNfVEIwMjE5KQkrPSBmaXh1cC10YjAyMTkubwogb2JqLSQoQ09ORklHX1RBTkJBQ19UQjAyMjYpCSs9IGZpeHVwLXRiMDIyNi5vCiBvYmotJChDT05GSUdfVEFOQkFDX1RCMDI4NykJKz0gZml4dXAtdGIwMjg3Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtcG54ODU1MC5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1wbng4NTUwLmMKaW5kZXggNDI1NmIzYi4uNTA1NDZkYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9maXh1cC1wbng4NTUwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC1wbng4NTUwLmMKQEAgLTMzLDcgKzMzLDcgQEAKICNkZWZpbmUJREJHKHguLi4pCiAjZW5kaWYKIAotZXh0ZXJuIGNoYXIgaXJxX3RhYl9qYnNbXVs1XTsKK2V4dGVybiBjaGFyIHBueDg1NTBfaXJxX3RhYltdWzVdOwogCiB2b2lkIF9faW5pdCBwY2liaW9zX2ZpeHVwX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewpAQCAtNDcsNyArNDcsNyBAQAogCiBpbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7Ci0JcmV0dXJuIGlycV90YWJfamJzW3Nsb3RdW3Bpbl07CisJcmV0dXJuIHBueDg1NTBfaXJxX3RhYltzbG90XVtwaW5dOwogfQogCiAvKiBEbyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYXQgcGNpX2VuYWJsZV9kZXZpY2UoKSB0aW1lICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1wbng4NTUwLmMgYi9hcmNoL21pcHMvcGNpL29wcy1wbng4NTUwLmMKaW5kZXggNDU0YjY1Yy4uZjU1NmI3YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtcG54ODU1MC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBueDg1NTAuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJCWJyZWFrOwogCX0KIAotCWVyciA9IGNvbmZpZ19hY2Nlc3MoUENJX0NNRF9DT05GSUdfUkVBRCwgYnVzLCBkZXZmbiwgd2hlcmUsIH4oMSA8PCAod2hlcmUgJiAzKSksICZkYXRhKTsKKwllcnIgPSBjb25maWdfYWNjZXNzKFBDSV9DTURfQ09ORklHX1dSSVRFLCBidXMsIGRldmZuLCB3aGVyZSwgfigxIDw8ICh3aGVyZSAmIDMpKSwgJmRhdGEpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3Byb20uYyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3Byb20uYwppbmRleCBmODk1MmMxLi5lYjZlYzExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi9wcm9tLmMKKysrIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vcHJvbS5jCkBAIC0zNSwyMyArMzUsMTUgQEAKIAlyZXR1cm4gJihhcmNzX2NtZGxpbmVbMF0pOwogfQogCi12b2lkICBwcm9tX2luaXRfY21kbGluZSh2b2lkKQordm9pZCBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKLQljaGFyICpjcDsKLQlpbnQgYWN0cjsKKwlpbnQgaTsKIAotCWFjdHIgPSAxOyAvKiBBbHdheXMgaWdub3JlIGFyZ3ZbMF0gKi8KLQotCWNwID0gJihhcmNzX2NtZGxpbmVbMF0pOwotCXdoaWxlKGFjdHIgPCBwcm9tX2FyZ2MpIHsKLQkgICAgICAgIHN0cmNweShjcCwgcHJvbV9hcmd2W2FjdHJdKTsKLQkJY3AgKz0gc3RybGVuKHByb21fYXJndlthY3RyXSk7Ci0JCSpjcCsrID0gJyAnOwotCQlhY3RyKys7CisJYXJjc19jbWRsaW5lWzBdID0gJ1wwJzsKKwlmb3IgKGkgPSAwOyBpIDwgcHJvbV9hcmdjOyBpKyspIHsKKwkJc3RyY2F0KGFyY3NfY21kbGluZSwgcHJvbV9hcmd2W2ldKTsKKwkJc3RyY2F0KGFyY3NfY21kbGluZSwgIiAiKTsKIAl9Ci0JaWYgKGNwICE9ICYoYXJjc19jbWRsaW5lWzBdKSkgLyogZ2V0IHJpZCBvZiB0cmFpbGluZyBzcGFjZSAqLwotCQktLWNwOwotCSpjcCA9ICdcMCc7CiB9CiAKIGNoYXIgKnByb21fZ2V0ZW52KGNoYXIgKmVudm5hbWUpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2NvbW1vbi90aW1lLmMKaW5kZXggNjVjNDQwZS4uNjhkZWYzOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL3RpbWUuYwpAQCAtMzMsNyArMzMsMTcgQEAKICNpbmNsdWRlIDxpbnQuaD4KICNpbmNsdWRlIDxjbS5oPgogCi1leHRlcm4gdW5zaWduZWQgaW50IG1pcHNfaHB0X2ZyZXF1ZW5jeTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNwajsKKworc3RhdGljIGN5Y2xlX3QgaHB0X3JlYWQodm9pZCkKK3sKKwlyZXR1cm4gcmVhZF9jMF9jb3VudDIoKTsKK30KKworc3RhdGljIHZvaWQgdGltZXJfYWNrKHZvaWQpCit7CisJd3JpdGVfYzBfY29tcGFyZShjcGopOworfQogCiAvKgogICogcG54ODU1MF90aW1lX2luaXQoKSAtIGl0IGRvZXMgdGhlIGZvbGxvd2luZyB0aGluZ3M6CkBAIC02OCwyNyArNzgsNDggQEAKIAkgKiBIWiB0aW1lciBpbnRlcnJ1cHRzIHBlciBzZWNvbmQuCiAJICovCiAJbWlwc19ocHRfZnJlcXVlbmN5ID0gMjdVTCAqICgoMTAwMDAwMFVMICogbikvKG0gKiBwb3cycCkpOworCWNwaiA9IChtaXBzX2hwdF9mcmVxdWVuY3kgKyBIWiAvIDIpIC8gSFo7CisJd3JpdGVfYzBfY291bnQoMCk7CisJdGltZXJfYWNrKCk7CisKKwkvKiBTZXR1cCBUaW1lciAyICovCisJd3JpdGVfYzBfY291bnQyKDApOworCXdyaXRlX2MwX2NvbXBhcmUyKDB4ZmZmZmZmZmYpOworCisJY2xvY2tzb3VyY2VfbWlwcy5yZWFkID0gaHB0X3JlYWQ7CisJbWlwc190aW1lcl9hY2sgPSB0aW1lcl9hY2s7CiB9CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBtb25vdG9uaWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwkvKiBUaW1lciAyIGNsZWFyIGludGVycnVwdCAqLworCXdyaXRlX2MwX2NvbXBhcmUyKC0xKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG1vbm90b25pY19pcnFhY3Rpb24gPSB7CisJLmhhbmRsZXIgPSBtb25vdG9uaWNfaW50ZXJydXB0LAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCisJLm5hbWUgPSAiTW9ub3RvbmljIHRpbWVyIiwKK307CisKIHZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQogewogCWludCBjb25maWdQUjsKIAogCXNldHVwX2lycShQTlg4NTUwX0lOVF9USU1FUjEsIGlycSk7CisJc2V0dXBfaXJxKFBOWDg1NTBfSU5UX1RJTUVSMiwgJm1vbm90b25pY19pcnFhY3Rpb24pOwogCi0JLyogU3RhcnQgdGltZXIxICovCisJLyogVGltZXIgMSBzdGFydCAqLwogCWNvbmZpZ1BSID0gcmVhZF9jMF9jb25maWc3KCk7CiAJY29uZmlnUFIgJj0gfjB4MDAwMDAwMDg7CiAJd3JpdGVfYzBfY29uZmlnNyhjb25maWdQUik7CiAKLQkvKiBUaW1lciAyIHN0b3AgKi8KKwkvKiBUaW1lciAyIHN0YXJ0ICovCiAJY29uZmlnUFIgPSByZWFkX2MwX2NvbmZpZzcoKTsKLQljb25maWdQUiB8PSAweDAwMDAwMDEwOworCWNvbmZpZ1BSICY9IH4weDAwMDAwMDEwOwogCXdyaXRlX2MwX2NvbmZpZzcoY29uZmlnUFIpOwogCi0Jd3JpdGVfYzBfY291bnQyKDApOwotCXdyaXRlX2MwX2NvbXBhcmUyKDB4ZmZmZmZmZmYpOwotCiAJLyogVGltZXIgMyBzdG9wICovCiAJY29uZmlnUFIgPSByZWFkX2MwX2NvbmZpZzcoKTsKIAljb25maWdQUiB8PSAweDAwMDAwMDIwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9qYnMvaXJxbWFwLmMgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2picy9pcnFtYXAuYwppbmRleCBmNzhlMDQyLi45OGMzNDI5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2picy9pcnFtYXAuYworKysgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2picy9pcnFtYXAuYwpAQCAtMjgsOSArMjgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxpbnQuaD4KIAotY2hhciBpcnFfdGFiX2pic1tdWzVdIF9faW5pdGRhdGEgPSB7Ci0gWzhdID0JeyAtMSwgUE5YODU1MF9JTlRfUENJX0lOVEEsIDB4ZmYsIDB4ZmYsIDB4ZmZ9LAotIFs5XSA9CXsgLTEsIFBOWDg1NTBfSU5UX1BDSV9JTlRBLCAweGZmLCAweGZmLCAweGZmfSwKLSBbMTddID0JeyAtMSwgUE5YODU1MF9JTlRfUENJX0lOVEEsIDB4ZmYsIDB4ZmYsIDB4ZmZ9LAorY2hhciBwbng4NTUwX2lycV90YWJbXVs1XSBfX2luaXRkYXRhID0geworCVs4XQk9IHsgLTEsIFBOWDg1NTBfSU5UX1BDSV9JTlRBLCAweGZmLCAweGZmLCAweGZmfSwKKwlbOV0JPSB7IC0xLCBQTlg4NTUwX0lOVF9QQ0lfSU5UQSwgMHhmZiwgMHhmZiwgMHhmZn0sCisJWzE3XQk9IHsgLTEsIFBOWDg1NTBfSU5UX1BDSV9JTlRBLCAweGZmLCAweGZmLCAweGZmfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvc3RiODEwL01ha2VmaWxlIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9zdGI4MTAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE0YjU5MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvc3RiODEwL01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorCisjIE1ha2VmaWxlIGZvciB0aGUgUGhpbGlwcyBTVEI4MTAgQm9hcmQuCisKK2xpYi15IDo9IHByb21faW5pdC5vIGJvYXJkX3NldHVwLm8gaXJxbWFwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvc3RiODEwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL3N0YjgxMC9ib2FyZF9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NWQ3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL3N0YjgxMC9ib2FyZF9zZXR1cC5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiAgU1RCODEwIHNwZWNpZmljIGJvYXJkIHN0YXJ0dXAgcm91dGluZXMuCisgKgorICogIEJhc2VkIG9uIHRoZSBhcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL2picy9ib2FyZF9zZXR1cC5jCisgKgorICogIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAgICAgICAgc291cmNlQG12aXN0YS5jb20KKyAqCisgKiAgQ29weXJpZ2h0IDIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKyNpbmNsdWRlIDxnbGIuaD4KKwordm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNvbmZpZzAsIGNvbmZpZ3ByOworCisJY29uZmlnMCA9IHJlYWRfYzBfY29uZmlnKCk7CisKKwkvKiBjbGVhciBhbGwgdGhyZWUgY2FjaGUgY29oZXJlbmN5IGZpZWxkcyAqLworCWNvbmZpZzAgJj0gfigweDcgfCAoNzw8MjUpIHwgKDc8PDI4KSk7CisJY29uZmlnMCB8PSAoQ09ORl9DTV9ERUZBVUxUIHwgKENPTkZfQ01fREVGQVVMVDw8MjUpIHwKKwkJCShDT05GX0NNX0RFRkFVTFQ8PDI4KSk7CisJd3JpdGVfYzBfY29uZmlnKGNvbmZpZzApOworCisJY29uZmlncHIgPSByZWFkX2MwX2NvbmZpZzcoKTsKKwljb25maWdwciB8PSAoMTw8MTkpOyAvKiBlbmFibGUgdGxiICovCisJd3JpdGVfYzBfY29uZmlnNyhjb25maWdwcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL3N0YjgxMC9pcnFtYXAuYyBiL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvc3RiODEwL2lycW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTExZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL3N0YjgxMC9pcnFtYXAuYwpAQCAtMCwwICsxLDIzIEBACisvKgorICogIFBoaWxpcHMgU1RCODEwIGJvYXJkIGlycW1hcC4KKyAqCisgKiAgQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgICBzb3VyY2VAbXZpc3RhLmNvbQorICoKKyAqICBDb3B5cmlnaHQgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGludC5oPgorCitjaGFyIHBueDg1NTBfaXJxX3RhYltdWzVdIF9faW5pdGRhdGEgPSB7CisJWzhdCT0geyAtMSwgUE5YODU1MF9JTlRfUENJX0lOVEEsIDB4ZmYsIDB4ZmYsIDB4ZmZ9LAorCVs5XQk9IHsgLTEsIFBOWDg1NTBfSU5UX1BDSV9JTlRBLCAweGZmLCAweGZmLCAweGZmfSwKKwlbMTBdCT0geyAtMSwgUE5YODU1MF9JTlRfUENJX0lOVEEsIDB4ZmYsIDB4ZmYsIDB4ZmZ9LAorfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9zdGI4MTAvcHJvbV9pbml0LmMgYi9hcmNoL21pcHMvcGhpbGlwcy9wbng4NTUwL3N0YjgxMC9wcm9tX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTViNGUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9zdGI4MTAvcHJvbV9pbml0LmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqICBTVEI4MTAgc3BlY2lmaWMgcHJvbSByb3V0aW5lcworICoKKyAqICBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgICAgICAgIHNvdXJjZUBtdmlzdGEuY29tCisgKgorICogIENvcHlyaWdodCAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKK2ludCBwcm9tX2FyZ2M7CitjaGFyICoqcHJvbV9hcmd2LCAqKnByb21fZW52cDsKK2V4dGVybiB2b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7CitleHRlcm4gY2hhciAqcHJvbV9nZXRlbnYoY2hhciAqZW52bmFtZSk7CisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiAiUGhpbGlwcyBQTlg4NTUwL1NUQjgxMCI7Cit9CisKK3ZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKKworCXByb21fYXJnYyA9IChpbnQpIGZ3X2FyZzA7CisJcHJvbV9hcmd2ID0gKGNoYXIgKiopIGZ3X2FyZzE7CisJcHJvbV9lbnZwID0gKGNoYXIgKiopIGZ3X2FyZzI7CisKKwlwcm9tX2luaXRfY21kbGluZSgpOworCisJbWlwc19tYWNoZ3JvdXAgPSBNQUNIX0dST1VQX1BISUxJUFM7CisJbWlwc19tYWNodHlwZSA9IE1BQ0hfUEhJTElQU19TVEI4MTA7CisKKwltZW1zaXplID0gMHgwODAwMDAwMDsgLyogVHJpbWVkaWEgdXNlcyBtZW1vcnkgYWJvdmUgKi8KKwlhZGRfbWVtb3J5X3JlZ2lvbigwLCBtZW1zaXplLCBCT09UX01FTV9SQU0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjdfaXJxLmMgYi9hcmNoL21pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcvdG9zaGliYV9yYnR4NDkyN19pcnEuYwppbmRleCA1YTVlYTZjLi5iNTRiNTI5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcvdG9zaGliYV9yYnR4NDkyN19pcnEuYworKysgYi9hcmNoL21pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcvdG9zaGliYV9yYnR4NDkyN19pcnEuYwpAQCAtMTU4LDcgKzE1OCw2IEBACiAjZGVmaW5lIFRPU0hJQkFfUkJUWDQ5MjdfSVJRX0lTQV9FTkFCTEUgICAgKCAxIDw8IDIzICkKICNkZWZpbmUgVE9TSElCQV9SQlRYNDkyN19JUlFfSVNBX0RJU0FCTEUgICAoIDEgPDwgMjQgKQogI2RlZmluZSBUT1NISUJBX1JCVFg0OTI3X0lSUV9JU0FfTUFTSyAgICAgICggMSA8PCAyNSApCi0jZGVmaW5lIFRPU0hJQkFfUkJUWDQ5MjdfSVJRX0lTQV9FTkRJUlEgICAgKCAxIDw8IDI2ICkKIAogI2RlZmluZSBUT1NISUJBX1JCVFg0OTI3X1NFVFVQX0FMTCAgICAgICAgIDB4ZmZmZmZmZmYKICNlbmRpZgpAQCAtMTc1LDcgKzE3NCw2IEBACiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRPU0hJQkFfUkJUWDQ5MjdfSVJRX0lTQV9FTkFCTEUKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVE9TSElCQV9SQlRYNDkyN19JUlFfSVNBX0RJU0FCTEUKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVE9TSElCQV9SQlRYNDkyN19JUlFfSVNBX01BU0sKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVE9TSElCQV9SQlRYNDkyN19JUlFfSVNBX0VORElSUQogICAgICk7CiAjZW5kaWYKIApAQCAtMjI2LDcgKzIyNCw2IEBACiBzdGF0aWMgdm9pZCB0b3NoaWJhX3JidHg0OTI3X2lycV9pc2FfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpOwogc3RhdGljIHZvaWQgdG9zaGliYV9yYnR4NDkyN19pcnFfaXNhX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSk7CiBzdGF0aWMgdm9pZCB0b3NoaWJhX3JidHg0OTI3X2lycV9pc2FfbWFza19hbmRfYWNrKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHZvaWQgdG9zaGliYV9yYnR4NDkyN19pcnFfaXNhX2VuZCh1bnNpZ25lZCBpbnQgaXJxKTsKICNlbmRpZgogCiAjZGVmaW5lIFRPU0hJQkFfUkJUWDQ5MjdfSU9DX05BTUUgIlJCVFg0OTI3LUlPQyIKQEAgLTI0OSw3ICsyNDYsNiBAQAogCS5tYXNrID0gdG9zaGliYV9yYnR4NDkyN19pcnFfaXNhX2Rpc2FibGUsCiAJLm1hc2tfYWNrID0gdG9zaGliYV9yYnR4NDkyN19pcnFfaXNhX21hc2tfYW5kX2FjaywKIAkudW5tYXNrID0gdG9zaGliYV9yYnR4NDkyN19pcnFfaXNhX2VuYWJsZSwKLQkuZW5kID0gdG9zaGliYV9yYnR4NDkyN19pcnFfaXNhX2VuZCwKIH07CiAjZW5kaWYKIApAQCAtNDAyLDcgKzM5OCw4IEBACiAKIAlmb3IgKGkgPSBUT1NISUJBX1JCVFg0OTI3X0lSUV9JU0FfQkVHOwogCSAgICAgaSA8PSBUT1NISUJBX1JCVFg0OTI3X0lSUV9JU0FfRU5EOyBpKyspCi0JCXNldF9pcnFfY2hpcChpLCAmdG9zaGliYV9yYnR4NDkyN19pcnFfaXNhX3R5cGUpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnRvc2hpYmFfcmJ0eDQ5MjdfaXJxX2lzYV90eXBlLAorCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CiAKIAlzZXR1cF9pcnEoVE9TSElCQV9SQlRYNDkyN19JUlFfTkVTVF9JU0FfT05fSU9DLAogCQkgICZ0b3NoaWJhX3JidHg0OTI3X2lycV9pc2FfbWFzdGVyKTsKQEAgLTQ3MCwyNiArNDY3LDYgQEAKICNlbmRpZgogCiAKLSNpZmRlZiBDT05GSUdfVE9TSElCQV9GUENJQjAKLXN0YXRpYyB2b2lkIHRvc2hpYmFfcmJ0eDQ5MjdfaXJxX2lzYV9lbmQodW5zaWduZWQgaW50IGlycSkKLXsKLQlUT1NISUJBX1JCVFg0OTI3X0lSUV9EUFJJTlRLKFRPU0hJQkFfUkJUWDQ5MjdfSVJRX0lTQV9FTkRJUlEsCi0JCQkJICAgICAiaXJxPSVkXG4iLCBpcnEpOwotCi0JaWYgKGlycSA8IFRPU0hJQkFfUkJUWDQ5MjdfSVJRX0lTQV9CRUcKLQkgICAgfHwgaXJxID4gVE9TSElCQV9SQlRYNDkyN19JUlFfSVNBX0VORCkgewotCQlUT1NISUJBX1JCVFg0OTI3X0lSUV9EUFJJTlRLKFRPU0hJQkFfUkJUWDQ5MjdfSVJRX0VST1IsCi0JCQkJCSAgICAgImJhZCBpcnE9JWRcbiIsIGlycSk7Ci0JCXBhbmljKCJcbiIpOwotCX0KLQotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpIHsKLQkJdG9zaGliYV9yYnR4NDkyN19pcnFfaXNhX2VuYWJsZShpcnEpOwotCX0KLX0KLSNlbmRpZgotCi0KIHZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKIHsKIAlleHRlcm4gdm9pZCB0eDQ5MjdfaXJxX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdnI0MXh4L0tjb25maWcgYi9hcmNoL21pcHMvdnI0MXh4L0tjb25maWcKaW5kZXggYzhkZmQ4MC4uOTJmNDFmNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3ZyNDF4eC9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZwpAQCAtNiw3ICs2LDYgQEAKIAlzZWxlY3QgSVNBCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBJQk1fV09SS1BBRAogCWJvb2wgIlN1cHBvcnQgZm9yIElCTSBXb3JrUGFkIHo1MCIKQEAgLTE2LDcgKzE1LDYgQEAKIAlzZWxlY3QgSVNBCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBORUNfQ01CVlI0MTMzCiAJYm9vbCAiU3VwcG9ydCBmb3IgTkVDIENNQi1WUjQxMzMiCkBAIC00MSw3ICszOSw2IEBACiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAloZWxwCiAJICBUaGUgVEFOQkFDIFZSNDEzMSBtdWx0aWNoaXAgbW9kdWxlKFRCMDIyNSkgYW5kCiAJICB0aGUgVEFOQkFDIFZSNDEzMURJTU0oVEIwMjI5KSBhcmUgTUlQUy1iYXNlZCBwbGF0Zm9ybXMKQEAgLTc0LDcgKzcxLDYgQEAKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCiBjb25maWcgWkFPX0NBUENFTExBCiAJYm9vbCAiU3VwcG9ydCBmb3IgWkFPIE5ldHdvcmtzIENhcGNlbGxhIgpAQCAtODQsNyArODAsNiBAQAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBQQ0lfVlI0MVhYCiAJYm9vbCAiQWRkIFBDSSBjb250cm9sIHVuaXQgc3VwcG9ydCBvZiBORUMgVlI0MTAwIHNlcmllcyIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMKaW5kZXggMzk3YmE5NC4uMTZkZWNmNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIEludGVycnVwdCBoYW5kaW5nIHJvdXRpbmVzIGZvciBORUMgVlI0MTAwIHNlcmllcy4KICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1ICBZb2ljaGkgWXVhc2EgPHlvaWNoaV95dWFzYUB0cmlwZWFrcy5jby5qcD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTczLDEzICs3MywxOSBAQAogCWlmIChjYXNjYWRlLT5nZXRfaXJxICE9IE5VTEwpIHsKIAkJdW5zaWduZWQgaW50IHNvdXJjZV9pcnEgPSBpcnE7CiAJCWRlc2MgPSBpcnFfZGVzYyArIHNvdXJjZV9pcnE7Ci0JCWRlc2MtPmNoaXAtPmFjayhzb3VyY2VfaXJxKTsKKwkJaWYgKGRlc2MtPmNoaXAtPm1hc2tfYWNrKQorCQkJZGVzYy0+Y2hpcC0+bWFza19hY2soc291cmNlX2lycSk7CisJCWVsc2UgeworCQkJZGVzYy0+Y2hpcC0+bWFzayhzb3VyY2VfaXJxKTsKKwkJCWRlc2MtPmNoaXAtPmFjayhzb3VyY2VfaXJxKTsKKwkJfQogCQlpcnEgPSBjYXNjYWRlLT5nZXRfaXJxKGlycSk7CiAJCWlmIChpcnEgPCAwKQogCQkJYXRvbWljX2luYygmaXJxX2Vycl9jb3VudCk7CiAJCWVsc2UKIAkJCWlycV9kaXNwYXRjaChpcnEpOwotCQlkZXNjLT5jaGlwLT5lbmQoc291cmNlX2lycSk7CisJCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgJiYgZGVzYy0+Y2hpcC0+dW5tYXNrKQorCQkJZGVzYy0+Y2hpcC0+dW5tYXNrKHNvdXJjZV9pcnEpOwogCX0gZWxzZQogCQlkb19JUlEoaXJxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvbmVjLWNtYnZyNDEzMy9pcnEuYyBiL2FyY2gvbWlwcy92cjQxeHgvbmVjLWNtYnZyNDEzMy9pcnEuYwppbmRleCBhMDM5YmI3Li4xMjhlZDhkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L25lYy1jbWJ2cjQxMzMvaXJxLmMKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9uZWMtY21idnI0MTMzL2lycS5jCkBAIC00NSwxOSArNDUsMTIgQEAKIAltYXNrX2FuZF9hY2tfODI1OUEoaXJxIC0gSTgyNTlfSVJRX0JBU0UpOwogfQogCi1zdGF0aWMgdm9pZCBlbmRfaTgyNTlfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEfElSUV9JTlBST0dSRVNTKSkpCi0JCWVuYWJsZV84MjU5QV9pcnEoaXJxIC0gSTgyNTlfSVJRX0JBU0UpOwotfQotCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGk4MjU5X2lycV90eXBlID0gewogCS50eXBlbmFtZSAgICAgICA9ICJYVC1QSUMiLAogCS5hY2sgICAgICAgICAgICA9IGFja19pODI1OV9pcnEsCiAJLm1hc2sJCT0gZGlzYWJsZV9pODI1OV9pcnEsCiAJLm1hc2tfYWNrCT0gYWNrX2k4MjU5X2lycSwKIAkudW5tYXNrCQk9IGVuYWJsZV9pODI1OV9pcnEsCi0JLmVuZCAgICAgICAgICAgID0gZW5kX2k4MjU5X2lycSwKIH07CiAKIHN0YXRpYyBpbnQgaTgyNTlfZ2V0X2lycV9udW1iZXIoaW50IGlycSkKQEAgLTkyLDcgKzg1LDcgQEAKIAl9CiAKIAlmb3IgKGkgPSBJODI1OV9JUlFfQkFTRTsgaSA8PSBJODI1OV9JUlFfTEFTVDsgaSsrKQotCQlzZXRfaXJxX2NoaXAoaSwgJmk4MjU5X2lycV90eXBlKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZpODI1OV9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAKIAlzZXR1cF9pcnEoSTgyNTlfU0xBVkVfSVJRLCAmaTgyNTlfc2xhdmVfY2FzY2FkZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IGQyMTAxMjMuLjBmOWZmNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTQgQEAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWJvb2wKIAorY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgorCWJvb2wKKwlkZWZhdWx0IG4KKworY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAorCWJvb2wKKwlkZWZhdWx0IG4KKwogY29uZmlnIEdFTkVSSUNfRklORF9ORVhUX0JJVAogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2hwdXgvc3lzX2hwdXguYyBiL2FyY2gvcGFyaXNjL2hwdXgvc3lzX2hwdXguYwppbmRleCAzNzJlZGIwLi5jNTdmY2I0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9ocHV4L3N5c19ocHV4LmMKKysrIGIvYXJjaC9wYXJpc2MvaHB1eC9zeXNfaHB1eC5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAlmaWxlID0gZmdldChmZCk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dDsKLQllcnJvciA9IHZmc19zdGF0ZnNfaHB1eChmaWxlLT5mX2RlbnRyeSwgJnRtcCk7CisJZXJyb3IgPSB2ZnNfc3RhdGZzX2hwdXgoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgJnRtcCk7CiAJaWYgKCFlcnJvciAmJiBjb3B5X3RvX3VzZXIoYnVmLCAmdG1wLCBzaXplb2YodG1wKSkpCiAJCWVycm9yID0gLUVGQVVMVDsKIAlmcHV0KGZpbGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jCmluZGV4IDViNmJjNmUuLjNiNjdkMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMKQEAgLTYxMSw3ICs2MTEsNyBAQAogfQogCiAKLWludCBfX2RldmluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKK2ludCBfX2NwdWluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKIHsKIAlpZiAoY3B1ICE9IDAgJiYgY3B1IDwgcGFyaXNjX21heF9jcHVzKQogCQlzbXBfYm9vdF9vbmVfY3B1KGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMKaW5kZXggOTIwYmRiZi4uYzEwYWI0NyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJc3RydWN0IHB0X3JlZ3MgKnIgPSAmdC0+dGhyZWFkLnJlZ3M7CiAJc3RydWN0IHB0X3JlZ3MgKnIyOwogCi0JcjIgPSAoc3RydWN0IHB0X3JlZ3MgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHRfcmVncyksIEdGUF9LRVJORUwpOworCXIyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB0X3JlZ3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXIyKQogCQlyZXR1cm47CiAJKnIyID0gKnI7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tbS9pb3JlbWFwLmMgYi9hcmNoL3BhcmlzYy9tbS9pb3JlbWFwLmMKaW5kZXggNmM2MTAyMzAuLjkyZDQ5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21tL2lvcmVtYXAuYworKysgYi9hcmNoL3BhcmlzYy9tbS9pb3JlbWFwLmMKQEAgLTksMTEwICs5LDggQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLQotc3RhdGljIGlubGluZSB2b2lkIAotcmVtYXBfYXJlYV9wdGUocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVuc2lnbmVkIGxvbmcgZW5kLCBwZm47Ci0JcGdwcm90X3QgcGdwcm90ID0gX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfAotCQkJCSAgIF9QQUdFX0FDQ0VTU0VEIHwgZmxhZ3MpOwotCi0JYWRkcmVzcyAmPSB+UE1EX01BU0s7Ci0KLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUE1EX1NJWkUpCi0JCWVuZCA9IFBNRF9TSVpFOwotCi0JQlVHX09OKGFkZHJlc3MgPj0gZW5kKTsKLQotCXBmbiA9IHBoeXNfYWRkciA+PiBQQUdFX1NISUZUOwotCWRvIHsKLQkJQlVHX09OKCFwdGVfbm9uZSgqcHRlKSk7Ci0KLQkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBwZ3Byb3QpKTsKLQotCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKLQkJcGZuKys7Ci0JCXB0ZSsrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgCi1yZW1hcF9hcmVhX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkgICAgICAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0KLQlhZGRyZXNzICY9IH5QR0RJUl9NQVNLOwotCi0JZW5kID0gYWRkcmVzcyArIHNpemU7Ci0JaWYgKGVuZCA+IFBHRElSX1NJWkUpCi0JCWVuZCA9IFBHRElSX1NJWkU7Ci0KLQlCVUdfT04oYWRkcmVzcyA+PSBlbmQpOwotCi0JcGh5c19hZGRyIC09IGFkZHJlc3M7Ci0JZG8gewotCQlwdGVfdCAqcHRlID0gcHRlX2FsbG9jX2tlcm5lbChwbWQsIGFkZHJlc3MpOwotCQlpZiAoIXB0ZSkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCXJlbWFwX2FyZWFfcHRlKHB0ZSwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywgCi0JCQkgICAgICAgYWRkcmVzcyArIHBoeXNfYWRkciwgZmxhZ3MpOwotCi0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOwotCQlwbWQrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCAKLXJlbWFwX2FyZWFfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKLQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlwZ2RfdCAqZGlyOwotCWludCBlcnJvciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQotCUJVR19PTihhZGRyZXNzID49IGVuZCk7Ci0KLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlkaXIgPSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcyk7Ci0KLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQotCWRvIHsKLQkJcHVkX3QgKnB1ZDsKLQkJcG1kX3QgKnBtZDsKLQotCQllcnJvciA9IC1FTk9NRU07Ci0JCXB1ZCA9IHB1ZF9hbGxvYygmaW5pdF9tbSwgZGlyLCBhZGRyZXNzKTsKLQkJaWYgKCFwdWQpCi0JCQlicmVhazsKLQotCQlwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIHB1ZCwgYWRkcmVzcyk7Ci0JCWlmICghcG1kKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHJlbWFwX2FyZWFfcG1kKHBtZCwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywKLQkJCQkgICBwaHlzX2FkZHIgKyBhZGRyZXNzLCBmbGFncykpCi0JCQlicmVhazsKLQotCQllcnJvciA9IDA7Ci0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBHRElSX1NJWkUpICYgUEdESVJfTUFTSzsKLQkJZGlyKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCi0JZmx1c2hfdGxiX2FsbCgpOwotCi0JcmV0dXJuIGVycm9yOwotfQogCiAvKgogICogR2VuZXJpYyBtYXBwaW5nIGZ1bmN0aW9uIChub3QgdmlzaWJsZSBvdXRzaWRlKToKQEAgLTEzMSw2ICsyOSw3IEBACiAJdm9pZCBfX2lvbWVtICphZGRyOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxhc3RfYWRkcjsKKwlwZ3Byb3RfdCBwZ3Byb3Q7CiAKICNpZmRlZiBDT05GSUdfRUlTQQogCXVuc2lnbmVkIGxvbmcgZW5kID0gcGh5c19hZGRyICsgc2l6ZSAtIDE7CkBAIC0xNjQsNiArNjMsOSBAQAogCQl9CiAJfQogCisJcGdwcm90ID0gX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfAorCQkJICBfUEFHRV9BQ0NFU1NFRCB8IGZsYWdzKTsKKwogCS8qCiAJICogTWFwcGluZ3MgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQKIAkgKi8KQEAgLTE3OSw3ICs4MSw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJYWRkciA9ICh2b2lkIF9faW9tZW0gKikgYXJlYS0+YWRkcjsKLQlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZykgYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncykpIHsKKwlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsICh1bnNpZ25lZCBsb25nKWFkZHIgKyBzaXplLAorCQkJICAgICAgIHBoeXNfYWRkciwgcGdwcm90KSkgewogCQl2ZnJlZShhZGRyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCAyOTFjOTVhLi5kNmFiZTQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtNDEsNiArNDEsMTQgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKKwlib29sCisJZGVmYXVsdCB5IGlmIDY0QklUCisKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCiAJZGVmYXVsdCB5CkBAIC05OSw2ICsxMDcsMTEgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBHRU5FUklDX0JVRworCWJvb2wKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEJVRworCiBjb25maWcgREVGQVVMVF9VSU1BR0UKIAlib29sCiAJaGVscApAQCAtNDIzLDcgKzQzNiw3IEBACiAJc2VsZWN0IFJUQVNfUFJPQwogCXNlbGVjdCBQUENfTVBDNTJ4eAogCXNlbGVjdCBQUENfTkFUSVZFCi0JZGVmYXVsdCB5CisJZGVmYXVsdCBuCiAKIGNvbmZpZyBQUENfTElURTUyMDAKIAlib29sICJGcmVlc2NhbGUgTGl0ZTUyMDAgRXZhbCBCb2FyZCIKQEAgLTQ1OCw3ICs0NzEsNyBAQAogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IFBQQ19OQVRJVkUKLQlkZWZhdWx0IHkKKwlkZWZhdWx0IG4KIAogY29uZmlnIFBQQ19NQVBMRQogCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKQEAgLTQ3MCw2ICs0ODMsOCBAQAogCXNlbGVjdCBQUENfVURCR18xNjU1MAogCXNlbGVjdCBQUENfOTcwX05BUAogCXNlbGVjdCBQUENfTkFUSVZFCisJc2VsZWN0IFBQQ19SVEFTCisJc2VsZWN0IEFUQV9OT05TVEFOREFSRCBpZiBBVEEKIAlkZWZhdWx0IG4KIAloZWxwCiAgICAgICAgICAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFwbGUgOTcwRlggRXZhbHVhdGlvbiBCb2FyZC4KQEAgLTUxMSwxMiArNTI2LDE1IEBACiAJc2VsZWN0IFVEQkdfUlRBU19DT05TT0xFCiAKIGNvbmZpZyBQUENfUFMzCi0JYm9vbCAiU29ueSBQUzMiCisJYm9vbCAiU29ueSBQUzMgKGluY29tcGxldGUpIgogCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKIAlzZWxlY3QgUFBDX0NFTEwKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBTb255IFBTMyBnYW1lIGNvbnNvbGUKIAkgIGFuZCBvdGhlciBwbGF0Zm9ybXMgdXNpbmcgdGhlIFBTMyBoeXBlcnZpc29yLgorCSAgU3VwcG9ydCBmb3IgdGhpcyBwbGF0Zm9ybSBpcyBub3QgeWV0IGNvbXBsZXRlLCBzbworCSAgZW5hYmxpbmcgdGhpcyB3aWxsIG5vdCByZXN1bHQgaW4gYSBib290YWJsZSBrZXJuZWwgb24gYQorCSAgUFMzIHN5c3RlbS4KIAogY29uZmlnIFBQQ19OQVRJVkUKIAlib29sCkBAIC03MDYsNyArNzI0LDcgQEAKIAogY29uZmlnIE1BVEhfRU1VTEFUSU9OCiAJYm9vbCAiTWF0aCBlbXVsYXRpb24iCi0JZGVwZW5kcyBvbiA0eHggfHwgOHh4IHx8IEUyMDAgfHwgRTUwMAorCWRlcGVuZHMgb24gNHh4IHx8IDh4eCB8fCBFMjAwIHx8IFBQQ184M3h4IHx8IEU1MDAKIAktLS1oZWxwLS0tCiAJICBTb21lIFBvd2VyUEMgY2hpcHMgZGVzaWduZWQgZm9yIGVtYmVkZGVkIGFwcGxpY2F0aW9ucyBkbyBub3QgaGF2ZQogCSAgYSBmbG9hdGluZy1wb2ludCB1bml0IGFuZCB0aGVyZWZvcmUgZG8gbm90IGltcGxlbWVudCB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKaW5kZXggMzQzZGJjZi4uOTgzOTJmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKQEAgLTE1Miw2ICsxNTIsOSBAQAogJChvYmopL3pJbWFnZS5wczM6IHZtbGludXgKIAkkKFNUUklQKSAtcyAtUiAuY29tbWVudCAkPCAtbyAkQAogCiskKG9iaikvekltYWdlLmluaXRyZC5wczM6IHZtbGludXgKKwlAZWNobyAiICBXQVJOSU5HIHpJbWFnZS5pbml0cmQucHMzIG5vdCBzdXBwb3J0ZWQgKHlldCkiCisKICQob2JqKS91SW1hZ2U6IHZtbGludXggJCh3cmFwcGVyYml0cykKIAkkKGNhbGwgY21kLHdyYXAsdWJvb3QpCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCmluZGV4IDhiYzBkMjUuLjE4Njg3MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwpAQCAtMTAsNiArMTAsMTIgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorLyoKKyAqIFdBUk5JTkc6IERvIG5vdCBkZXBlbmQgb24gdGhpcyB0cmVlIGxheW91dCByZW1haW5pbmcgc3RhdGljIGp1c3QgeWV0LgorICogVGhlIE1QQzUyMDAgZGV2aWNlIHRyZWUgY29udmVudGlvbnMgYXJlIHN0aWxsIGluIGZsdXgKKyAqIEtlZXAgYW4gZXllIG9uIHRoZSBsaW51eHBwYy1kZXYgbWFpbGluZyBsaXN0IGZvciBtb3JlIGRldGFpbHMKKyAqLworCiAvIHsKIAltb2RlbCA9ICJMaXRlNTIwMCI7CiAJY29tcGF0aWJsZSA9ICJsaXRlNTIwMFwwbGl0ZTUyeHhcMG1wYzUyMDBcMG1wYzUyeHgiOwpAQCAtMjM4LDcgKzI0NCw3IEBACiAKIAkJLy8gUFNDMyBpbiBDT0RFQyBtb2RlIGV4YW1wbGUKIAkJaTJzQDI0MDAgewkJLy8gUFNDMwotCQkJZGV2aWNlX3R5cGUgPSAiaTJzIjsKKwkJCWRldmljZV90eXBlID0gInNvdW5kIjsKIAkJCWNvbXBhdGlibGUgPSAibXBjNTIwMC1wc2MtaTJzXDBtcGM1Mnh4LXBzYy1pMnMiOwogCQkJcmVnID0gPDI0MDAgMTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAzIDA+OwpAQCAtMjY1LDcgKzI3MSw3IEBACiAKIAkJLy8gUFNDNiBpbiBBQzk3IG1vZGUgZXhhbXBsZQogCQlhYzk3QDJjMDAgewkJLy8gUFNDNgotCQkJZGV2aWNlX3R5cGUgPSAiYWM5NyI7CisJCQlkZXZpY2VfdHlwZSA9ICJzb3VuZCI7CiAJCQljb21wYXRpYmxlID0gIm1wYzUyMDAtcHNjLWFjOTdcMG1wYzUyeHgtcHNjLWFjOTciOwogCQkJcmVnID0gPDJjMDAgMTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiA0IDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwppbmRleCA4MWNiNzY0Li41YmIyNzYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwpAQCAtMTAsNiArMTAsMTIgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorLyoKKyAqIFdBUk5JTkc6IERvIG5vdCBkZXBlbmQgb24gdGhpcyB0cmVlIGxheW91dCByZW1haW5pbmcgc3RhdGljIGp1c3QgeWV0LgorICogVGhlIE1QQzUyMDAgZGV2aWNlIHRyZWUgY29udmVudGlvbnMgYXJlIHN0aWxsIGluIGZsdXgKKyAqIEtlZXAgYW4gZXllIG9uIHRoZSBsaW51eHBwYy1kZXYgbWFpbGluZyBsaXN0IGZvciBtb3JlIGRldGFpbHMKKyAqLworCiAvIHsKIAltb2RlbCA9ICJMaXRlNTIwMGIiOwogCWNvbXBhdGlibGUgPSAibGl0ZTUyMDBiXDBsaXRlNTJ4eFwwbXBjNTIwMGJcMG1wYzUyeHgiOwpAQCAtMjQzLDcgKzI0OSw3IEBACiAKIAkJLy8gUFNDMyBpbiBDT0RFQyBtb2RlIGV4YW1wbGUKIAkJaTJzQDI0MDAgewkJLy8gUFNDMwotCQkJZGV2aWNlX3R5cGUgPSAiaTJzIjsKKwkJCWRldmljZV90eXBlID0gInNvdW5kIjsKIAkJCWNvbXBhdGlibGUgPSAibXBjNTIwMGItcHNjLWkyc1wwbXBjNTJ4eC1wc2MtaTJzIjsKIAkJCXJlZyA9IDwyNDAwIDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMyAwPjsKQEAgLTI3MCw3ICsyNzYsNyBAQAogCiAJCS8vIFBTQzYgaW4gQUM5NyBtb2RlIGV4YW1wbGUKIAkJYWM5N0AyYzAwIHsJCS8vIFBTQzYKLQkJCWRldmljZV90eXBlID0gImFjOTciOworCQkJZGV2aWNlX3R5cGUgPSAic291bmQiOwogCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwYi1wc2MtYWM5N1wwbXBjNTJ4eC1wc2MtYWM5NyI7CiAJCQlyZWcgPSA8MmMwMCAxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDQgMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCmluZGV4IGE5OGM5ODIuLmU5NTY1NDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjNgotIyBXZWQgTm92IDIyIDE1OjMzOjA0IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzUKKyMgTW9uIEphbiAyMiAyMjoxMjo1NiAyMDA3CiAjCiBDT05GSUdfUFBDNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTEwLDYgKzEwLDggQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0PXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQpAQCAtMjMsNiArMjUsNyBAQAogQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CiAKICMKQEAgLTY2LDYgKzY5LDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKQEAgLTEyOCwxNCArMTMyLDE2IEBACiAjIENPTkZJR19BUFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUEFTRU1JIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQ0VMTD15CiBDT05GSUdfUFBDX0NFTExfTkFUSVZFPXkKIENPTkZJR19QUENfSUJNX0NFTExfQkxBREU9eQotQ09ORklHX1VEQkdfUlRBU19DT05TT0xFPXkKIENPTkZJR19QUENfUFMzPXkKK0NPTkZJR19QUENfTkFUSVZFPXkKK0NPTkZJR19VREJHX1JUQVNfQ09OU09MRT15CiAjIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUlRBUz15CiAjIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldApAQCAtMTc3LDEyICsxODMsMTQgQEAKIENPTkZJR19QUzNfSFRBQl9TSVpFPTIwCiAjIENPTkZJR19QUzNfRFlOQU1JQ19ETUEgaXMgbm90IHNldAogQ09ORklHX1BTM19VU0VfTFBBUl9BRERSPXkKK0NPTkZJR19QUzNfVlVBUlQ9eQogCiAjCiAjIEtlcm5lbCBvcHRpb25zCiAjCiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKQEAgLTI3MCw3ICsyNzgsMTAgQEAKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQogQ09ORklHX05FVF9JUElQPXkKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMjg5LDYgKzMwMCw3IEBACiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTMxNywzMSArMzI5LDY3IEBACiAjCiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz15Ci0jIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFA9eQotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLSMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi0jIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfU0lQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0FIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIAogIwogIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKICMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCkBAIC0zNzMsNiArNDIxLDcgQEAKICMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCiAjCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwpAQCAtNDI4LDYgKzQ3Nyw3IEBACiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKQEAgLTQ1Nyw2ICs1MDcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKIAogIwpAQCAtNDY4LDcgKzUxOSw2IEBACiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CiAjIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAogQ09ORklHX0lERURNQV9QQ0lfQVVUTz15CkBAIC00OTIsNiArNTQyLDcgQEAKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU0lJTUFHRT15CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldApAQCAtNTA1LDggKzU1Niw3NCBAQAogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorQ09ORklHX1NDU0k9bQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD1tCisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj1tCisjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwpAQCAtNTM4LDYgKzY1NSw5IEBACiAjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CkBAIC01NTIsNiArNjcyLDcgQEAKICMKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogCiAjCkBAIC01NTksNyArNjgwLDcgQEAKICMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLUNPTkZJR19CT05ESU5HPXkKK0NPTkZJR19CT05ESU5HPW0KICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPXkKIApAQCAtNjA0LDExICs3MjUsMTEgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiBDT05GSUdfU0tHRT1tCi0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKK0NPTkZJR19TS1kyPW0KICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKK0NPTkZJR19USUdPTjM9eQogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJREVSX05FVD1tCitDT05GSUdfU1BJREVSX05FVD15CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKIAogIwpAQCAtNjE4LDYgKzczOSw3IEBACiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02MzcsNiArNzU5LDcgQEAKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKQEAgLTcwMyw2ICs4MjYsNyBAQAogIyBDT05GSUdfRElHSUVQQ0EgaXMgbm90IHNldAogIyBDT05GSUdfTU9YQV9JTlRFTExJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1hBX1NNQVJUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9TTUFSVElPX05FVyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTksgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CkBAIC03NTYsMTYgKzg4MCwxNyBAQAogIwogIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTg1NSwxMiArOTgwLDE0IEBACiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiBDT05GSUdfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC04NzUsMTggKzEwMDIsMTQ1IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9bQorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPW0KKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfVVNCX0VIQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD1tCisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogCiAjCiAjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKICMKIAogIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKKyMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC05MTIsNyArMTE2Niw3IEBACiAjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwotQ09ORklHX0lORklOSUJBTkQ9eQorQ09ORklHX0lORklOSUJBTkQ9bQogQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQ9bQogQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1M9bQogQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CkBAIC05MjIsNiArMTE3Niw4IEBACiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBPXkKKyMgQ09ORklHX0lORklOSUJBTkRfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfSVNFUiBpcyBub3Qgc2V0CiAKICMKICMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCkBAIC05NDYsNiArMTIwMiwxMCBAQAogIwogCiAjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xMDI4LDIzICsxMjg4LDE4IEBACiAjCiAjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCiAjCi1DT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YyX0FDTD15Ci1DT05GSUdfTkZTRF9WMz15Ci1DT05GSUdfTkZTRF9WM19BQ0w9eQotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX0xPQ0tEPW0KKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CiBDT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPW0KK0NPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTExMjAsOCArMTM3NSwxNCBAQAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKQEAgLTExMzAsNyArMTM5MSwxMCBAQAogQ09ORklHX1pMSUJfREVGTEFURT1tCiBDT05GSUdfVEVYVFNFQVJDSD15CiBDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTExNDYsNiArMTQxMCw4IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKQEAgLTExNTksMTIgKzE0MjUsMTEgQEAKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFRF9JTkxJTklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMTkxLDYgKzE0NTYsNyBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT1tCkBAIC0xMTk5LDggKzE0NjUsMTAgQEAKICMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9bQogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jaHJwMzJfZGVmY29uZmlnCmluZGV4IGZlZTcyZjguLjAyOWM5YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzYKLSMgU3VuIFNlcCAxMCAxMDoyMjo1NCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmM1CisjIE1vbiBKYW4gMjIgMjI6MTI6NTggMjAwNwogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKQEAgLTEwLDYgKzEwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKQEAgLTIxLDEzICsyMiwxNCBAQAogQ09ORklHX1BQQ19PRj15CiBDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQogQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKIENPTkZJR19DTEFTU0lDMzI9eQotIyBDT05GSUdfUFBDXzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldApAQCAtMzgsNiArNDAsOCBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQpAQCAtNTksMTggKzYzLDIyIEBACiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTc5LDEyICs4NywxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEwMyw2ICsxMTEsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKIENPTkZJR19MQkQ9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMTI0LDEzICsxMzMsMTYgQEAKICMgUGxhdGZvcm0gc3VwcG9ydAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKLSMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQVVMgaXMgbm90IHNldAogQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FRklLQSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTElURTUyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTkFUSVZFPXkKICMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUlRBUz15CiAjIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldApAQCAtMTM4LDYgKzE1MCw4IEBACiAjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTVBDMTA2PXkKICMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CkBAIC0xNDksNiArMTYzLDcgQEAKIENPTkZJR19ISUdITUVNPXkKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKIENPTkZJR19QUkVFTVBUX05PTkU9eQpAQCAtMTYxLDYgKzE3Niw3IEBACiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0yNDMsMTAgKzI1OSwxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTI2MywyNCArMjgyLDI5IEBACiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19QUFRQIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLSMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9GVFA9bQotQ09ORklHX0lQX05GX0lSQz1tCi0jIENPTkZJR19JUF9ORl9ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9URlRQPW0KLUNPTkZJR19JUF9ORl9BTUFOREE9bQotIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9IMzIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1NJUCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiAjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiAKICMKQEAgLTMwNiw3ICszMzAsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM4MSw2ICs0MDQsMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQpAQCAtNDA3LDcgKzQzNiw2IEBACiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NMODJDMTA1PXkKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQogIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19JREVETUFfUENJX0FVVE89eQpAQCAtNDIyLDYgKzQ1MCw3IEBACiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKQEAgLTQzMCw2ICs0NTksNyBAQAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU0w4MkMxMDU9eQogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQpAQCAtNDQ1LDYgKzQ3NSw4IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwpAQCAtNDY0LDE0ICs0OTYsMTYgQEAKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKIAogIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjIFNDU0kgVHJhbnNwb3J0cwogIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTQ4NywxMiArNTIxLDEzIEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKQEAgLTUwNiwxNyArNTQxLDE4IEBACiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCiBDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QU0kyNDBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CkBAIC01MjUsNiArNTYxLDEyIEBACiAjIENPTkZJR19TQ1NJX1UxNF8zNEYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgT2xkIENELVJPTSBkcml2ZXJzIChub3QgU0NTSSwgbm90IElERSkKQEAgLTU1Nyw2ICs1OTksNyBAQAogIwogIyBNYWNpbnRvc2ggZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01BQ19FTVVNT1VTRUJUTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XSU5ERkFSTSBpcyBub3Qgc2V0CiAKICMKQEAgLTYwNyw2ICs2NTAsNyBAQAogIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiBDT05GSUdfUENORVQzMj15CisjIENPTkZJR19QQ05FVDMyX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BQzMyMDAgaXMgbm90IHNldApAQCAtNjU1LDYgKzY5OSw3IEBACiAjIENPTkZJR19NVjY0M1hYX0VUSF8wIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIXzEgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKQEAgLTY2Myw2ICs3MDgsNyBAQAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNjkwLDYgKzczNiw3IEBACiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKQEAgLTcxMCw2ICs3NTcsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTczMiw2ICs3ODAsNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPXkKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CkBAIC03NzgsMTIgKzgyNywxNCBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19CUklRX1BBTkVMPW0KICMgQ09ORklHX0hWQ19SVEFTIGlzIG5vdCBzZXQKIAogIwpAQCAtODAyLDEwICs4NTMsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtODE0LDcgKzg2MSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtODgxLDYgKzkyNyw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTg4OSwxNCArOTM2LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTkwOSw2ICs5NTEsNyBAQAogIwogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9EREM9eQogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTk0OSw2ICs5OTIsNyBAQAogIyBDT05GSUdfRkJfM0RGWF9BQ0NFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTk3OSw2ICsxMDIzLDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC05OTMsNiArMTA0Miw3IEBACiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzNCwxMyArMTA4NCwxMyBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKLUNPTkZJR19VU0JfSElESU5QVVQ9eQogIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CkBAIC0xMDcwLDYgKzExMjAsNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIApAQCAtMTA4Nyw2ICsxMTM4LDcgQEAKICMKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CkBAIC0xMDk0LDEyICsxMTQ2LDEzIEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMTU3LDYgKzEyMTAsMTAgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTE2Niw2ICsxMjIzLDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC0xMTczLDYgKzEyMzEsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMjA3LDggKzEyNjYsMTAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEzMDgsMTcgKzEzNjksMjIgQEAKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9bQogQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtMTMyOSw4ICsxMzk1LDExIEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKQEAgLTEzNDUsMTQgKzE0MTQsMTYgQEAKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdHRVI9eQogQ09ORklHX1hNT049eQogQ09ORklHX1hNT05fREVGQVVMVD15CitDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CiAjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEzNjcsNyArMTQzOCwxMSBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CkBAIC0xMzc2LDYgKzE0NTEsMTAgQEAKICMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCmluZGV4IDkyZDBhOWQuLjc3MjQ4NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM2Ci0jIFN1biBTZXAgMTAgMTA6MjI6NTUgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjNQorIyBNb24gSmFuIDIyIDIyOjE1OjA0IDIwMDcKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtMTAsNiArMTAsOCBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CkBAIC0yMiw2ICsyNCw4IEBACiBDT05GSUdfUFBDX09GPXkKICMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogCiAjCkBAIC0zMCw2ICszNCw5IEBACiBDT05GSUdfUE9XRVI0X09OTFk9eQogQ09ORklHX1BPV0VSND15CiBDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfQUxUSVZFQz15CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQpAQCAtNTEsMTggKzU4LDIyIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtNzEsMTIgKzgyLDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtOTUsNiArMTA2LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE0LDIzICsxMjYsMjggQEAKICMgUGxhdGZvcm0gc3VwcG9ydAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKLSMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQVVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogQ09ORklHX1BQQ19QTUFDPXkKIENPTkZJR19QUENfUE1BQzY0PXkKICMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUEFTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAotIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BTMyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX05BVElWRT15CiBDT05GSUdfVTNfREFSVD15CiAjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19NUElDX0JST0tFTl9VMz15CiAjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKIENPTkZJR19QUENfOTcwX05BUD15CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVE9eQogQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKICMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE1Miw2ICsxNjksNyBAQAogIwogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0xNzEsNiArMTg5LDcgQEAKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMjI1LDYgKzI0NCw3IEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT1tCiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTI0MywxMCArMjYzLDEzIEBACiBDT05GSUdfSU5FVF9UVU5ORUw9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTI2MywyNCArMjg2LDI5IEBACiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CisjIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREEgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQogIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfQ1RfQUNDVD15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLSMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi0jIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfU0lQIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKIENPTkZJR19JUF9ORl9RVUVVRT1tCiAKICMKQEAgLTMwNyw3ICszMzUsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM4Miw2ICs0MDksMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQpAQCAtNDA4LDcgKzQ0MSw2IEBACiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKICMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfSURFRE1BX1BDSV9BVVRPPXkKQEAgLTQyMyw2ICs0NTUsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CkBAIC00MzEsNiArNDY0LDcgQEAKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CkBAIC00NDgsNiArNDgyLDggQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC00NjcsMTQgKzUwMywxNiBAQAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKIAogIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjIFNDU0kgVHJhbnNwb3J0cwogIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTQ4NywxNyArNTI1LDQyIEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCiBDT05GSUdfQVRBPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TVlc9eQotIyBDT05GSUdfU0NTSV9BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CkBAIC01MDcsMjIgKzU3MCw0MCBAQAogIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTUzNyw2ICs2MTgsNyBAQAogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPXkKKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ETV9DUllQVD1tCiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX01JUlJPUj1tCkBAIC01OTEsMTEgKzY3MywxMyBAQAogQ09ORklHX0FEQl9QTVU9eQogIyBDT05GSUdfQURCX1BNVV9MRUQgaXMgbm90IHNldAogQ09ORklHX1BNQUNfU01VPXkKK0NPTkZJR19NQUNfRU1VTU9VU0VCVE49eQogQ09ORklHX1RIRVJNX1BNNzI9eQogQ09ORklHX1dJTkRGQVJNPXkKIENPTkZJR19XSU5ERkFSTV9QTTgxPXkKIENPTkZJR19XSU5ERkFSTV9QTTkxPXkKIENPTkZJR19XSU5ERkFSTV9QTTExMj15CisjIENPTkZJR19QTUFDX1JBQ0tNRVRFUiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNjUyLDcgKzczNiw3IEBACiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKQEAgLTY2MSw2ICs3NDUsNyBAQAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNjkxLDYgKzc3Niw3IEBACiAjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQT0U9bQogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldApAQCAtNzExLDYgKzc5Nyw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9eQogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTczMyw2ICs4MjAsNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTc4OSwxMyArODc3LDcgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogQ09ORklHX0FHUD1tCi0jIENPTkZJR19BR1BfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FHUF9WSUEgaXMgbm90IHNldAogQ09ORklHX0FHUF9VTklOT1JUSD1tCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogQ09ORklHX1JBV19EUklWRVI9eQpAQCAtODA2LDcgKzg4OCw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtODcxLDYgKzk1Miw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTg3OSwxNCArOTYxLDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTg5OSw2ICs5NzYsNyBAQAogIwogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9EREM9eQogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTkzMCw2ICsxMDA4LDcgQEAKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMDgwLDYgKzExNTksMTEgQEAKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTEwOTQsNiArMTE3OCw3IEBACiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEzNSwxOCArMTIyMCwxOSBAQAogQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci1DT05GSUdfVVNCX0hJRElOUFVUPXkKICMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAogQ09ORklHX0hJRF9GRj15CiBDT05GSUdfSElEX1BJRD15CiBDT05GSUdfTE9HSVRFQ0hfRkY9eQogQ09ORklHX1RIUlVTVE1BU1RFUl9GRj15CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CiAjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CkBAIC0xMTc0LDEyICsxMjYwLDE0IEBACiBDT05GSUdfVVNCX0tBV0VUSD1tCiBDT05GSUdfVVNCX1BFR0FTVVM9bQogQ09ORklHX1VTQl9SVEw4MTUwPW0KKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVVNCTkVUPW0KICMgQ09ORklHX1VTQl9ORVRfQVg4ODE3WCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCiAjIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX05FVDEwODAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX1pBVVJVUyBpcyBub3Qgc2V0CkBAIC0xMTk0LDYgKzEyODIsNyBAQAogIwogQ09ORklHX1VTQl9TRVJJQUw9bQogQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15CisjIENPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTj1tCkBAIC0xMjI4LDYgKzEzMTcsOCBAQAogQ09ORklHX1VTQl9TRVJJQUxfS0xTST1tCiBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQogQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKQEAgLTEyMzksNiArMTMzMCw3IEBACiBDT05GSUdfVVNCX1NFUklBTF9YSVJDT009bQogIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCisjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVpVU0I9eQogCiAjCkBAIC0xMjQ2LDYgKzEzMzgsNyBAQAogIwogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKQEAgLTEyNTMsMTIgKzEzNDYsMTMgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FQUExFRElTUExBWT1tCiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMzE2LDYgKzE0MTAsMTAgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTMyOCw2ICsxNDI2LDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTEzNDQsNiArMTQ0Myw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEzODAsOCArMTQ4MCwxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQpAQCAtMTUwNSwxNyArMTYwNywyMiBAQAogQ09ORklHX05MU19VVEY4PXkKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTE1MjgsOCArMTYzNSwxMSBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQpAQCAtMTU0Myw5ICsxNjUzLDEwIEBACiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKQEAgLTE1NjUsNyArMTY3NiwxMiBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKQEAgLTE1NzQsOSArMTY5MCwxNCBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwppbmRleCBiNTAwNTUwLi41ZmM4NzQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOS1yYzEKLSMgRnJpIE9jdCAgNiAxMzoyNTowNCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmM1CisjIE1vbiBKYW4gMjIgMjI6MTY6NDQgMjAwNwogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC0xMCw2ICsxMCw4IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKQEAgLTIzLDYgKzI1LDcgQEAKICMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CiAKICMKQEAgLTMyLDYgKzM1LDkgQEAKIENPTkZJR19QT1dFUjM9eQogQ09ORklHX1BPV0VSND15CiBDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CkBAIC02MywxMiArNjksMTMgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTEyNSwxOCArMTMyLDIyIEBACiAjIENPTkZJR19BUFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfSVNFUklFUz15CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BBU0VNSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QUzMgaXMgbm90IHNldAogIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19JQk1WSU89eQogIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0lORElSRUNUX0lPPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01QSUMgaXMgbm90IHNldApAQCAtMTQ2LDYgKzE1Nyw3IEBACiAjCiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKQEAgLTE3OCw2ICsxOTAsNyBAQAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKQEAgLTE5Miw3ICsyMDUsNiBAQAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTI0NSw2ICsyNTcsNyBAQAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogCiAjCiAjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCkBAIC0yNjEsMjEgKzI3NCwzNyBAQAogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorIyBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19TSVAgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCkBAIC0yODYsMjcgKzMxNSwxNyBAQAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19JUF9ORl9DVF9BQ0NUPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfVEZUUD1tCi1DT05GSUdfSVBfTkZfQU1BTkRBPW0KLSMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9TSVAgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCkBAIC0zMTcsMjMgKzMzNiwyNSBAQAogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KKyMgQ09ORklHX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCisjIENPTkZJR19ORl9OQVRfQU1BTkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9TSVAgaXMgbm90IHNldAogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCkBAIC00NDAsNiArNDYxLDEyIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNDQ5LDYgKzQ3Niw3IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX05FVExJTks9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTQ2OSw2ICs0OTcsNyBAQAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIFRyYW5zcG9ydHMKQEAgLTUxNSw2ICs1NDQsNyBAQAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCkBAIC01NjIsNiArNTkyLDcgQEAKICMKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogCiAjCkBAIC02NDcsNiArNjc4LDcgQEAKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTc2NSwxMCArNzk3LDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15CkBAIC03NzksNyArODA3LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC03OTUsNiArODIyLDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtODAzLDExICs4MzEsNiBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtODIyLDYgKzg0NSw3IEBACiAjCiBDT05GSUdfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC04MzAsNiArODU0LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTg5Miw2ICs5MjEsMTAgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtOTA0LDYgKzkzNyw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC05MzcsNiArOTcxLDcgQEAKIENPTkZJR19BVVRPRlNfRlM9bQogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtMTAyNCw3ICsxMDU5LDYgQEAKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC0xMDgwLDYgKzExMTQsOCBAQAogIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKICMKIENPTkZJR19ETE09bQorQ09ORklHX0RMTV9UQ1A9eQorIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAogIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5NCw2ICsxMTMwLDcgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQpAQCAtMTEwNSw2ICsxMTQyLDcgQEAKIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0lPTUFQX0NPUFk9eQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC0xMTE5LDYgKzExNTcsOCBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQpAQCAtMTEzMiw4ICsxMTcyLDggQEAKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKQEAgLTExNDIsNiArMTE4Miw3IEBACiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAogQ09ORklHX0lSUVNUQUNLUz15CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNTUsMTAgKzExOTYsMTEgQEAKICMKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC0xMTY3LDggKzEyMDksMTAgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCmluZGV4IDIzZmQyMTAuLjQwNWMxYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTktcmM0Ci0jIFdlZCBOb3YgMTUgMjA6MzY6MzAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjNQorIyBNb24gSmFuIDIyIDIyOjE3OjU4IDIwMDcKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CkBAIC0xMCw2ICsxMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CkBAIC0yMiwxMyArMjMsMTMgQEAKIENPTkZJR19QUENfVURCR18xNjU1MD15CiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCiBDT05GSUdfQ0xBU1NJQzMyPXkKLSMgQ09ORklHX1BQQ181Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKQEAgLTY5LDEyICs3MCwxMyBAQAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtMTMwLDYgKzEzMiw3IEBACiAjIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ2eHg9eQogIyBDT05GSUdfQVBVUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldApAQCAtMTY2LDcgKzE2OSw2IEBACiAjIENPTkZJR19UUU04MjYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FEUzgyNzIgaXMgbm90IHNldAogIyBDT05GSUdfUFEyRkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSVRFNTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FVjY0MzYwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfR0VONTUwPXkKIENPTkZJR19NUEMxMFhfQlJJREdFPXkKQEAgLTE4MSw2ICsxODMsNyBAQAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKQEAgLTIxNyw3ICsyMjAsNiBAQAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotIyBDT05GSUdfUENJX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTI4Niw2ICsyODgsNyBAQAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogCiAjCiAjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCkBAIC0zMDIsMTggKzMwNSwzNSBAQAogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQSBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfSDMyMyBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfU0lQIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQpAQCAtMzI0LDI3ICszNDQsMTcgQEAKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLSMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9GVFA9bQotQ09ORklHX0lQX05GX0lSQz1tCi0jIENPTkZJR19JUF9ORl9ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9URlRQPW0KLSMgQ09ORklHX0lQX05GX0FNQU5EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfU0lQIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCkBAIC0zNTUsMjIgKzM2NSwyNSBAQAogIyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX01BVENIX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KICMgQ09ORklHX0lQX05GX1RBUkdFVF9MT0cgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTkFUPW0KLUNPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KLSMgQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9OQVRfSVJDPW0KLUNPTkZJR19JUF9ORl9OQVRfRlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfVEZUUD1tCisjIENPTkZJR19ORl9OQVRfU05NUF9CQVNJQyBpcyBub3Qgc2V0CitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorIyBDT05GSUdfTkZfTkFUX0FNQU5EQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfSDMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfU0lQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQpAQCAtNTgwLDYgKzU5Myw3IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtNTk5LDYgKzYxMyw3IEBACiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBUcmFuc3BvcnRzCkBAIC02NDYsNiArNjYxLDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCkBAIC02ODMsNiArNjk5LDcgQEAKICMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CkBAIC03MjYsNiArNzQzLDcgQEAKICMKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogCiAjCkBAIC03NzcsNiArNzk1LDcgQEAKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTg5OSw2ICs5MTgsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldApAQCAtOTIxLDEwICs5NDEsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtMTAzMiw2ICsxMDQ4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldApAQCAtMTA0Miw2ICsxMDU5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldApAQCAtMTA2Myw2ICsxMDgxLDcgQEAKICMKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTEwNzcsNiArMTA5NiwxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtMTA5MSw2ICsxMTE1LDcgQEAKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCkBAIC0xMTcwLDYgKzExOTUsNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIApAQCAtMTIxOCw2ICsxMjQ0LDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCkBAIC0xMzI0LDYgKzEzNTEsMTAgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTM5OCw3ICsxNDI5LDYgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE0ODgsOCArMTUxOCwxNCBAQAogQ09ORklHX05MU19VVEY4PW0KIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CkBAIC0xNDk3LDYgKzE1MzMsNyBAQAogQ09ORklHX1pMSUJfSU5GTEFURT1tCiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTE1MTEsNiArMTU0OCw4IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKQEAgLTE1MjQsMTIgKzE1NjMsMTEgQEAKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKQEAgLTE1NTEsNiArMTU4OSw3IEBACiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtMTU1OSw4ICsxNTk4LDEwIEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpdGU1MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpdGU1MjAwX2RlZmNvbmZpZwppbmRleCBlZTc2NTU3Li44Y2JkODdkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9saXRlNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGl0ZTUyMDBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjNgotIyBNb24gTm92IDI3IDExOjA4OjIwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzUKKyMgTW9uIEphbiAyMiAyMjoxODoxOCAyMDA3CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQpAQCAtMTAsNiArMTAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQpAQCAtMjIsMTMgKzIzLDEzIEBACiAjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCiBDT05GSUdfQ0xBU1NJQzMyPXkKLSMgQ09ORklHX1BQQ181Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKQEAgLTY4LDYgKzY5LDcgQEAKICMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApAQCAtMTUxLDYgKzE1Myw3IEBACiAjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKIENPTkZJR19QUkVFTVBUX05PTkU9eQpAQCAtMjU5LDYgKzI2Miw3IEBACiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zNzQsNiArMzc4LDcgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CiAKQEAgLTM5Myw2ICszOTgsNyBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBUcmFuc3BvcnRzCkBAIC00NDAsNiArNDQ2LDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCkBAIC00NzcsNyArNDg0LDcgQEAKICMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotQ09ORklHX1BBVEFfTVBDNTJ4eD15CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKQEAgLTQ5NCw2ICs1MDEsNyBAQAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC01MjEsNiArNTI5LDcgQEAKICMKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogCiAjCkBAIC01NzIsNiArNTgxLDcgQEAKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTYzMiw2ICs2NDIsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfTVBDNTJ4eD15CkBAIC02NTcsMTAgKzY2OCw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03MDcsNiArNzE0LDcgQEAKICMKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNzc3LDYgKzc4NSwxMCBAQAogIwogCiAjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC04NzMsNiArODg1LDExIEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldApAQCAtODgwLDYgKzg5Nyw3IEBACiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtODkzLDYgKzkxMSw4IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQpAQCAtOTA2LDEyICs5MjYsMTEgQEAKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZwppbmRleCBhZTk2YTViLi5kZTk3ZjJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tYXBsZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4Ci0jIE1vbiBPY3QgIDkgMTE6NTk6MzQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjNQorIyBNb24gSmFuIDIyIDIyOjE5OjAyIDIwMDcKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtMTAsNiArMTAsOCBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CkBAIC0yMyw2ICsyNSw3IEBACiBDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQogQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKIENPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CiAKICMKQEAgLTMxLDYgKzM0LDkgQEAKIENPTkZJR19QT1dFUjRfT05MWT15CiBDT05GSUdfUE9XRVI0PXkKIENPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfT0ZfUExBVEZPUk1fUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKQEAgLTYxLDEyICs2NywxMyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTEyMywxOCArMTMwLDI3IEBACiAjIENPTkZJR19BUFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTUFQTEU9eQogIyBDT05GSUdfUFBDX1BBU0VNSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QUzMgaXMgbm90IHNldAorQ09ORklHX1BQQ19OQVRJVkU9eQorQ09ORklHX1VEQkdfUlRBU19DT05TT0xFPXkKIENPTkZJR19VM19EQVJUPXkKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfUlRBUz15CisjIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAorQ09ORklHX1JUQVNfUFJPQz15CisjIENPTkZJR19SVEFTX0ZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAogQ09ORklHX01QSUNfQlJPS0VOX1UzPXkKICMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAogQ09ORklHX1BQQ185NzBfTkFQPXkKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKQEAgLTE0NCw2ICsxNjAsNyBAQAogIwogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0xOTAsNyArMjA3LDYgQEAKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0yNDYsNiArMjYyLDcgQEAKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTM0Niw2ICszNjMsMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQpAQCAtMzcxLDcgKzM5NCw2IEBACiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CiAjIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAogQ09ORklHX0lERURNQV9QQ0lfQVVUTz15CkBAIC0zOTUsNiArNDE3LDcgQEAKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CkBAIC00MzksNiArNDYyLDcgQEAKICMKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogCiAjCkBAIC01MjMsNiArNTQ3LDcgQEAKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTYxOCw2ICs2NDMsOCBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19IVkNfRFJJVkVSPXkKK0NPTkZJR19IVkNfUlRBUz15CiAKICMKICMgSVBNSQpAQCAtNjM0LDEwICs2NjEsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNjQ3LDcgKzY3MCw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNzExLDYgKzczMyw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTcxOSwxNSArNzQyLDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC03NDAsNiArNzU3LDcgQEAKICMKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTc1NCw2ICs3NzIsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTc2OCw2ICs3OTEsNyBAQAogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKICMKQEAgLTgwMyw3ICs4MjcsNiBAQAogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotQ09ORklHX1VTQl9ISURJTlBVVD15CiAjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKQEAgLTgxOSw3ICs4NDIsNiBAQAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTgzMyw2ICs4NTUsNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BFR0FTVVM9eQogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiAKQEAgLTg4MSw2ICs5MDQsNyBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMyBpcyBub3Qgc2V0CkBAIC04OTIsNiArOTE2LDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVpVU0I9eQogCiAjCkBAIC05MTMsNiArOTM4LDcgQEAKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTcwLDYgKzk5NiwxMCBAQAogIwogCiAjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC05NzgsMTIgKzEwMDgsMTQgQEAKIENPTkZJR19GU19YSVA9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExMzMsMTQgKzExNjUsMjEgQEAKIENPTkZJR19OTFNfVVRGOD15CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTExNTUsNiArMTE5NCw4IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CkBAIC0xMTY5LDggKzEyMTAsOCBAQAogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKQEAgLTExODAsNiArMTIyMSw3IEBACiBDT05GSUdfREVCVUdHRVI9eQogQ09ORklHX1hNT049eQogQ09ORklHX1hNT05fREVGQVVMVD15CitDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CiAjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0JPT1RYX1RFWFQ9eQogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTExOTUsOSArMTIzNywxMCBAQAogIwogQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtMTIwNiw4ICsxMjQ5LDEwIEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwppbmRleCBkMTgxMWU3Li5mZGYwOWVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM2Ci0jIFN1biBTZXAgMTAgMTA6MjY6NTUgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjNQorIyBNb24gSmFuIDIyIDIyOjIwOjUzIDIwMDcKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CkBAIC0xMCw2ICsxMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CkBAIC0yMSwxMyArMjIsMTQgQEAKIENPTkZJR19QUENfT0Y9eQogQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCiBDT05GSUdfQ0xBU1NJQzMyPXkKLSMgQ09ORklHX1BQQ181Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKQEAgLTM4LDYgKzQwLDggQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKQEAgLTU4LDE2ICs2MiwyMCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CkBAIC03NSwxMiArODMsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC05Myw2ICsxMDEsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKIENPTkZJR19MQkQ9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMTE0LDE5ICsxMjMsMTkgQEAKICMgUGxhdGZvcm0gc3VwcG9ydAogIwogIyBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVENnh4PXkKICMgQ09ORklHX0FQVVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1RPREMgaXMgbm90IHNldAogIyBDT05GSUdfS0FUQU5BIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTExPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUENJNjkwIGlzIG5vdCBzZXQKQEAgLTE0MSw2ICsxNTAsNyBAQAogIyBDT05GSUdfUFJQTUM3NTAgaXMgbm90IHNldAogIyBDT05GSUdfUFJQTUM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0FORFBPSU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJTktTVEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19NUEM3NDQ4SFBDMj15CiAjIENPTkZJR19SQURTVE9ORV9QUEM3RCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUw0IGlzIG5vdCBzZXQKQEAgLTE1Miw3ICsxNjIsNiBAQAogIyBDT05GSUdfVFFNODI2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRFM4MjcyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkZBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTElURTUyMDAgaXMgbm90IHNldAogIyBDT05GSUdfRVY2NDM2MCBpcyBub3Qgc2V0CiBDT05GSUdfVFNJMTA4X0JSSURHRT15CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CkBAIC0xNjQsNiArMTczLDcgQEAKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0xNzMsNiArMTgzLDcgQEAKIENPTkZJR19CSU5GTVRfTUlTQz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTIzNyw2ICsyNDgsNyBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTI1OCwxMCArMjcwLDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTI5MSw3ICszMDYsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTM2Miw2ICszNzYsMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zNzEsNiArMzkxLDggQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC0zODksMTQgKzQxMSwxNiBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CiAKICMKLSMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIyBTQ1NJIFRyYW5zcG9ydHMKICMKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTQwOSwxOCArNDMzLDQ0IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCiBDT05GSUdfQVRBPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX01WPXkKICMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CkBAIC00MzAsMjMgKzQ4MCw0MSBAQAogIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC00NzQsNiArNTQyLDcgQEAKICMKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogCiAjCkBAIC01MDUsNiArNTc0LDcgQEAKICMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKQEAgLTU2Myw2ICs2MzMsOCBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19UU0kxMDhfRVRIPXkKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQpAQCAtNTcxLDYgKzY0Myw3IEBACiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02MTAsNiArNjgzLDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02NTQsNiArNzI4LDcgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKQEAgLTY3NywxMCArNzUyLDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTY4OSw3ICs3NjAsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTcwNSw2ICs3NzUsNyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC03MTMsMTcgKzc4NCwxNCBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTczNSw2ICs4MDMsNyBAQAogIwogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNzQzLDYgKzgxMiwxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtODA1LDYgKzg3OSwxMCBAQAogIwogCiAjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC04MTQsNiArODkyLDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC04MjEsNiArOTAwLDcgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtODUwLDggKzkzMCwxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtOTIxLDEzICsxMDAzLDIwIEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0lPTUFQX0NPUFk9eQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC05MzgsMTIgKzEwMjcsMTQgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTk1Nyw3ICsxMDQ4LDMgQEAKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzR4X2l0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzR4X2l0eF9kZWZjb25maWcKaW5kZXggMDU2MWI3My4uNDU3NTdiNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM0eF9pdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfaXR4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOAotIyBNb24gU2VwIDI1IDE5OjQxOjE0IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzUKKyMgTW9uIEphbiAyMiAyMjoyMzo0MyAyMDA3CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQpAQCAtMTAsNiArMTAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQpAQCAtMjIsMTMgKzIzLDEzIEBACiBDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKICMgQ09ORklHX0NMQVNTSUMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldApAQCAtNDAsNiArNDEsOCBAQAogQ09ORklHXzZ4eD15CiBDT05GSUdfODN4eD15CiBDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtNTksMTYgKzYyLDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CkBAIC05OCw2ICsxMDUsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0xMjAsOCArMTI4LDEwIEBACiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKICMKKyMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzgzNHhfU1lTIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4MzR4X0lUWD15CisjIENPTkZJR19NUEM4MzYwRV9QQiBpcyBub3Qgc2V0CiBDT05GSUdfTVBDODM0eD15CiAjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKIApAQCAtMTMxLDYgKzE0MSw3IEBACiAjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKIENPTkZJR19QUkVFTVBUX05PTkU9eQpAQCAtMTM4LDggKzE0OSwxMCBAQAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfTUFUSF9FTVVMQVRJT049eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0yMDYsNiArMjE5LDcgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKICMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTIyNywxMCArMjQxLDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTQxMSw5ICs0MjgsMTYgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogIyBDT05GSUdfQkxLX0RFVl9JREUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRF9PTkxZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldApAQCAtNDIzLDYgKzQ0Nyw4IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwpAQCAtNDQxLDE0ICs0NjcsMTYgQEAKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwpAQCAtNDYxLDE4ICs0ODksNDQgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKIENPTkZJR19BVEE9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldApAQCAtNDgyLDIzICs1MzYsNDEgQEAKICMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNTM1LDYgKzYwNyw3IEBACiAjCiAjIE1hY2ludG9zaCBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTkRGQVJNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTY2LDYgKzYzOSw3IEBACiBDT05GSUdfQ0lDQURBX1BIWT15CiAjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwpAQCAtNjIyLDYgKzY5Niw3IEBACiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKIENPTkZJR19HSUFORkFSPXkKIENPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCkBAIC02MzAsNiArNzA1LDcgQEAKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTY2OSw2ICs3NDUsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTcxMyw2ICs3OTAsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldApAQCAtNzUzLDEwICs4MzEsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNzY1LDcgKzgzOSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtODQyLDYgKzkxNSw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTg3NiwyOSArOTUwLDI3IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtOTExLDYgKzk4Myw3IEBACiAjCiBDT05GSUdfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05MTksNiArOTkyLDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC05MzMsNiArMTAxMSw3IEBACiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIAogIwpAQCAtOTcyLDYgKzEwNTEsNyBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMDEwLDYgKzEwOTAsNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIApAQCAtMTAyNyw2ICsxMTA4LDcgQEAKICMKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CkBAIC0xMDM0LDEyICsxMTE2LDEzIEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMDY3LDYgKzExNTAsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKICMgTU1DL1NEIENhcmQgc3VwcG9ydApAQCAtMTEwMiw2ICsxMTg2LDcgQEAKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKIENPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFJUQyBpbnRlcmZhY2VzCkBAIC0xMTQ1LDYgKzEyMzAsMTAgQEAKIENPTkZJR19JTlRFTF9JT0FURE1BPXkKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTE1NCw2ICsxMjQzLDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC0xMTYxLDYgKzEyNTEsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMTkwLDggKzEyODEsMTAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEyMDYsNyArMTI5OSw2IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC0xMjQ5LDYgKzEzNDEsMTAgQEAKICMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CkBAIC0xMjYyLDEzICsxMzU4LDIwIEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0lPTUFQX0NPUFk9eQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC0xMjc5LDggKzEzODIsMTEgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CkBAIC0xMjk0LDkgKzE0MDAsMTAgQEAKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CkBAIC0xMzE2LDggKzE0MjMsMTAgQEAKICMKIENPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19BTEdBUEk9eQotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtMTMyNiw4ICsxNDM1LDEwIEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM0eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM0eF9tZHNfZGVmY29uZmlnCmluZGV4IDllZWZhYjkuLmMyNGRiNTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzR4X21kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM2Ci0jIFN1biBTZXAgMTAgMTA6Mjg6NTQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjNQorIyBNb24gSmFuIDIyIDIyOjI0OjEwIDIwMDcKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CkBAIC0xMCw2ICsxMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CkBAIC0yMSwxMyArMjIsMTQgQEAKIENPTkZJR19QUENfT0Y9eQogQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCiAjIENPTkZJR19DTEFTU0lDMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKQEAgLTM5LDYgKzQxLDggQEAKIENPTkZJR182eHg9eQogQ09ORklHXzgzeHg9eQogQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTU4LDI4ICs2MiwzMiBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTk3LDYgKzEwNSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTExOSw4ICsxMjgsMTAgQEAKICMKICMgUGxhdGZvcm0gc3VwcG9ydAogIworIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAogQ09ORklHX01QQzgzNHhfU1lTPXkKICMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgzNjBFX1BCIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4MzR4PXkKICMgQ09ORklHX01QSUMgaXMgbm90IHNldAogCkBAIC0xMzAsNiArMTQxLDcgQEAKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0xMzcsOCArMTQ5LDEwIEBACiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTIwNCw2ICsyMTgsNyBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTIyNSwxMCArMjQwLDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTI1OCw3ICsyNzYsNiBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAKQEAgLTMyOSw2ICszNDYsMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC0zMzgsNiArMzYxLDEyIEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTM2Miw2ICszOTEsNyBAQAogIwogIyBNYWNpbnRvc2ggZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01BQ19FTVVNT1VTRUJUTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XSU5ERkFSTSBpcyBub3Qgc2V0CiAKICMKQEAgLTM5Myw2ICs0MjMsNyBAQAogIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwpAQCAtNDQ5LDYgKzQ4MCw3IEBACiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKIENPTkZJR19HSUFORkFSPXkKICMgQ09ORklHX0dGQVJfTkFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKQEAgLTQ1Nyw2ICs0ODksNyBAQAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNDk1LDYgKzUyOCw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNTM5LDYgKzU3Myw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CkBAIC01NzUsMTAgKzYxMCw2IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC01ODcsNyArNjE4LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC02NTMsNiArNjgzLDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNjg2LDI5ICs3MTcsMjcgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC03MjAsNiArNzQ5LDcgQEAKICMKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTcyOCw2ICs3NTgsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTc5MCw2ICs4MjUsMTAgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzk5LDYgKzgzOCw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtODA2LDYgKzg0Niw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTgzNSw4ICs4NzYsMTAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkwNSwxMyArOTQ4LDIwIEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfUExJU1Q9eQorQ09ORklHX0lPTUFQX0NPUFk9eQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC05MjIsMTEgKzk3MiwxNCBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX1RFWFRfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTk0MSw3ICs5OTQsMTEgQEAKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKQEAgLTk1MCw2ICsxMDA3LDEwIEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzYwZW1kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzYwZW1kc19kZWZjb25maWcKaW5kZXggYzA3MDM0MS4uNThlNjc5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM2MGVtZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNjBlbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOAotIyBUaHUgU2VwIDIxIDE4OjE0OjI3IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzUKKyMgTW9uIEphbiAyMiAyMjoyNDo0MCAyMDA3CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQpAQCAtMTAsNiArMTAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQpAQCAtMjIsMTMgKzIzLDEzIEBACiBDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKICMgQ09ORklHX0NMQVNTSUMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldApAQCAtNDAsNiArNDEsOCBAQAogQ09ORklHXzZ4eD15CiBDT05GSUdfODN4eD15CiBDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtNTksMTYgKzYyLDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CkBAIC05OCw2ICsxMDUsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0xMjEsNiArMTI5LDcgQEAKICMKICMgUGxhdGZvcm0gc3VwcG9ydAogIworIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODM0eF9TWVMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAogQ09ORklHX01QQzgzNjBFX1BCPXkKQEAgLTEzMyw2ICsxNDIsNyBAQAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKQEAgLTE0MCw4ICsxNTAsMTAgQEAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMjA3LDYgKzIxOSw3IEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0yMjgsMTAgKzI0MSwxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zMzEsNiArMzQ3LDEyIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtMzQwLDYgKzM2Miw4IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwpAQCAtMzU4LDE0ICszODIsMTYgQEAKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCkBAIC0zNzgsMTEgKzQwNCwxMiBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CkBAIC0zOTIsMTUgKzQxOSwyMiBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC00MjgsNiArNDYyLDcgQEAKICMKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogCiAjCkBAIC00ODgsNiArNTIzLDcgQEAKICMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9GSUxURVJJTkcgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQpAQCAtNDk2LDYgKzUzMiw3IEBACiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC01MzUsNiArNTcyLDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01NzksNiArNjE3LDcgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKQEAgLTYxNSwxMCArNjU0LDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTYyNyw3ICs2NjIsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTY5Myw2ICs3MjcsNyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC03MjYsMjkgKzc2MSwyNyBAQAogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTc2MCw2ICs3OTMsNyBAQAogIwogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY4LDYgKzgwMiwxMSBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtODMwLDYgKzg2OSwxMCBAQAogIwogCiAjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC04MzksNiArODgyLDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC04NDYsNiArODkwLDcgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtODc1LDggKzkyMCwxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtOTQ1LDIwICs5OTIsMjcgQEAKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCiAjIFFFIE9wdGlvbnMKICMKLSMgQ09ORklHX1VDQ19TTE9XIGlzIG5vdCBzZXQKK0NPTkZJR19VQ0NfU0xPVz15CiBDT05GSUdfVUNDX0ZBU1Q9eQogQ09ORklHX1VDQz15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtOTY5LDExICsxMDIzLDE0IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfVEVYVF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldApAQCAtOTg4LDcgKzEwNDUsMTEgQEAKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKQEAgLTk5Nyw2ICsxMDU4LDEwIEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NTQwX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NTQwX2Fkc19kZWZjb25maWcKaW5kZXggNjdlN2QwYi4uMTcxMjBjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU0MF9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NDBfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzYKLSMgU3VuIFNlcCAxMCAxMDoyOToyMyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmM1CisjIE1vbiBKYW4gMjIgMjI6MjU6MjQgMjAwNwogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKQEAgLTEwLDYgKzEwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKQEAgLTIxLDEzICsyMiwxNCBAQAogQ09ORklHX1BQQ19PRj15CiBDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKICMgQ09ORklHX0NMQVNTSUMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg1eHg9eQpAQCAtMzgsNiArNDAsOCBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfODV4eD15CiBDT05GSUdfRTUwMD15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0JPT0tFPXkKIENPTkZJR19GU0xfQk9PS0U9eQogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CkBAIC01OCwxNiArNjIsMjAgQEAKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTc2LDEyICs4NCwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTk0LDYgKzEwMiw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKQEAgLTExNiw2ICsxMjUsNyBAQAogIyBQbGF0Zm9ybSBzdXBwb3J0CiAjCiBDT05GSUdfTVBDODU0MF9BRFM9eQorIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAogQ09ORklHX01QQzg1NDA9eQogQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0lfQkU9eQpAQCAtMTI3LDYgKzEzNyw3IEBACiAjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKIENPTkZJR19QUkVFTVBUX05PTkU9eQpAQCAtMTM3LDYgKzE0OCw3IEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0xOTksNiArMjExLDcgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0yMjAsMTAgKzIzMywxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0yNTMsNyArMjY5LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zMjAsNiArMzM1LDExIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtMzI5LDYgKzM0OSwxMiBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC0zNTEsNiArMzc3LDcgQEAKICMKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogCiAjCkBAIC0zNzcsNiArNDA0LDcgQEAKICMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKQEAgLTQyOSw2ICs0NTcsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTQ3Miw2ICs1MDEsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CkBAIC00OTMsMTcgKzUyMywxMiBAQAogIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC01MTksNiArNTQ0LDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNTI3LDE3ICs1NTMsMTQgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC01NDksNiArNTcyLDcgQEAKICMKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTU1Nyw2ICs1ODEsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKICMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldApAQCAtNjE3LDYgKzY0NiwxMCBAQAogIwogCiAjCisjIFZpcnR1YWxpemF0aW9uCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC02MjYsNiArNjU5LDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC02MzMsNiArNjY3LDcgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtNjYyLDggKzY5NywxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtNzI5LDEzICs3NjYsMjAgQEAKICMgQ09ORklHX05MUyBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTc0Niw4ICs3OTAsMTEgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CkBAIC03NjEsMTAgKzgwOCwxMCBAQAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKQEAgLTc4Miw3ICs4MjksMyBAQAogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NjBfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NjBfYWRzX2RlZmNvbmZpZwppbmRleCBkZGMyYTdiLi5lY2FhMjY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NTYwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU2MF9hZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNAotIyBGcmkgQXVnIDExIDE2OjQ1OjA1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzUKKyMgTW9uIEphbiAyMiAyMjoyNTo1MyAyMDA3CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQpAQCAtMTAsNiArMTAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQpAQCAtMjEsMTMgKzIyLDE0IEBACiBDT05GSUdfUFBDX09GPXkKICMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCiAjIENPTkZJR19DTEFTU0lDMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogQ09ORklHX1BQQ184NXh4PXkKQEAgLTM4LDYgKzQwLDggQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzg1eHg9eQogQ09ORklHX0U1MDA9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19CT09LRT15CiBDT05GSUdfRlNMX0JPT0tFPXkKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldApAQCAtNTgsMTYgKzYyLDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC03NiwxMiArODQsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC05NCw2ICsxMDIsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0xMTAsNyArMTE5LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfTVBJQz15CiBDT05GSUdfQ1BNMj15CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CiAKQEAgLTEyMiw2ICsxMzAsNyBAQAogIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAogQ09ORklHX01QQzg1NjA9eQogQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0lfQkU9eQorQ09ORklHX01QSUM9eQogCiAjCiAjIEtlcm5lbCBvcHRpb25zCkBAIC0xMjksNiArMTM4LDcgQEAKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0xNDAsNiArMTUwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiAjIENPTkZJR19QQ19LRVlCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTUyLDEzICsxNjMsMTMgQEAKICMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAotIyBDT05GSUdfU09GVFdBUkVfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKICMgQnVzIG9wdGlvbnMKICMKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKIENPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKIENPTkZJR19GU0xfU09DPXkKQEAgLTIwNSw2ICsyMTYsNyBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMjI2LDEwICsyMzgsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldApAQCAtMjU5LDcgKzI3NCw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtMzMxLDYgKzM0NSwxMiBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIworIyBNaXNjIGRldmljZXMKKyMKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKQEAgLTM0MCw2ICszNjAsMTIgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtMzY0LDYgKzM5MCw3IEBACiAjCiAjIE1hY2ludG9zaCBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTkRGQVJNIGlzIG5vdCBzZXQKIAogIwpAQCAtMzk1LDYgKzQyMiw3IEBACiAjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCkBAIC00MzcsNiArNDY1LDcgQEAKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX0dGQVJfTkFQST15CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKQEAgLTQ0NSw2ICs0NzQsNyBAQAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNDgzLDYgKzUxMyw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNTIyLDYgKzU1Myw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9DUE09eQpAQCAtNTM2LDcgKzU2OCw2IEBACiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfQlJJUV9QQU5FTCBpcyBub3Qgc2V0CiAKICMKICMgSVBNSQpAQCAtNTU0LDEwICs1ODUsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNTY2LDcgKzU5Myw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNTgyLDYgKzYwOCw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTU5MCwxNyArNjE3LDE0IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjEyLDYgKzYzNiw3IEBACiAjCiBDT05GSUdfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC02MjAsNiArNjQ1LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC02ODIsNiArNzEyLDEwIEBACiAjCiAKICMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTY5MSw2ICs3MjUsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTY5OCw2ICs3MzMsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC03MjcsOCArNzYzLDEwIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CkBAIC03OTQsMTMgKzgzMiwyMCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtODExLDggKzg1NiwxMSBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKQEAgLTgyNiwxMCArODc0LDEwIEBACiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldApAQCAtODQ4LDcgKzg5NiwzIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9jZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9jZHNfZGVmY29uZmlnCmluZGV4IDcyZWRmOWYuLjFmNjFiY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfY2RzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2Nkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM2Ci0jIFN1biBTZXAgMTAgMTA6Mjk6NDkgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjNQorIyBNb24gSmFuIDIyIDIyOjI2OjQ2IDIwMDcKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CkBAIC0xMCw2ICsxMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CkBAIC0yMSwxMyArMjIsMTQgQEAKIENPTkZJR19QUENfT0Y9eQogQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCiAjIENPTkZJR19DTEFTU0lDMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogQ09ORklHX1BQQ184NXh4PXkKQEAgLTM4LDYgKzQwLDggQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzg1eHg9eQogQ09ORklHX0U1MDA9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19CT09LRT15CiBDT05GSUdfRlNMX0JPT0tFPXkKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldApAQCAtNTgsMTYgKzYyLDIwIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC03NiwxMiArODQsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC05NCw2ICsxMDIsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CkBAIC0xMTYsNiArMTI1LDcgQEAKICMgUGxhdGZvcm0gc3VwcG9ydAogIwogIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAogQ09ORklHX01QQzg1eHhfQ0RTPXkKIENPTkZJR19NUEM4NTQwPXkKIENPTkZJR19QUENfSU5ESVJFQ1RfUENJX0JFPXkKQEAgLTEyNyw2ICsxMzcsNyBAQAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKQEAgLTEzNyw2ICsxNDgsNyBAQAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMjAyLDYgKzIxNCw3IEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMjIzLDEwICsyMzYsMTMgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldApAQCAtMjU2LDcgKzI3Miw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtMzI4LDkgKzM0MywxNiBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIworIyBNaXNjIGRldmljZXMKKyMKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCkBAIC0zNTMsNyArMzc1LDYgQEAKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKICMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVETUFfUENJX0FVVE8gaXMgbm90IHNldApAQCAtMzY3LDYgKzM4OCw3IEBACiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKQEAgLTM3NSw2ICszOTcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15CkBAIC0zODksNiArNDEyLDEyIEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKQEAgLTQxMyw2ICs0NDIsNyBAQAogIwogIyBNYWNpbnRvc2ggZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01BQ19FTVVNT1VTRUJUTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XSU5ERkFSTSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ0NCw2ICs0NzQsNyBAQAogIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwpAQCAtNDgzLDYgKzUxNCw3IEBACiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKIENPTkZJR19HSUFORkFSPXkKIENPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCkBAIC00OTEsNiArNTIzLDcgQEAKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTUyOSw2ICs1NjIsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTU3Myw2ICs2MDcsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldApAQCAtNTk2LDEwICs2MzEsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNjA4LDcgKzYzOSw2IEBACiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNjI0LDYgKzY1NCw3IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTYzMiwxNyArNjYzLDE0IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjU0LDYgKzY4Miw3IEBACiAjCiBDT05GSUdfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC02NjIsNiArNjkxLDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC03MjQsNiArNzU4LDEwIEBACiAjCiAKICMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTczMyw2ICs3NzEsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTc0MCw2ICs3NzksNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC03NjksOCArODA5LDEwIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CkBAIC04MzYsMTMgKzg3OCwyMCBAQAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtODUzLDggKzkwMiwxMSBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKQEAgLTg2OCwxMCArOTIwLDEwIEBACiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldApAQCAtODg5LDcgKzk0MSwzIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY0MV9ocGNuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2NDFfaHBjbl9kZWZjb25maWcKaW5kZXggOTJhNTI3Zi4uNTNmY2Q2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY0MV9ocGNuX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjQxX2hwY25fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNgotIyBTdW4gU2VwIDEwIDEwOjMwOjE1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzUKKyMgTW9uIEphbiAyMiAyMjoyNzoxNCAyMDA3CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQpAQCAtMTAsNiArMTAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQpAQCAtMjEsMTMgKzIyLDE0IEBACiBDT05GSUdfUFBDX09GPXkKIENPTkZJR19QUENfVURCR18xNjU1MD15CiBDT05GSUdfR0VORVJJQ19UQlNZTkM9eQorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKICMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwogIyBDT05GSUdfQ0xBU1NJQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ181Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKQEAgLTM4LDYgKzQwLDggQEAKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FMVElWRUM9eQogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CkBAIC02MiwxNSArNjYsMTggQEAKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQpAQCAtNzksMTUgKzg2LDE1IEBACiBDT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfU0xPQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtOTcsNiArMTA0LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldApAQCAtMTI5LDYgKzEzNyw3IEBACiBDT05GSUdfSElHSE1FTT15CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15CiBDT05GSUdfSFo9MTAwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0xNDAsNiArMTQ5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTIwNiw2ICsyMTYsNyBAQAogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMjI2LDIxICsyMzcsMjkgQEAKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQogIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCkBAIC0yNjcsNyArMjg2LDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC0zMzksNiArMzU3LDEyIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtMzQ4LDYgKzM3MiwxMiBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC0zNzIsNiArNDAyLDcgQEAKICMKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogCiAjCkBAIC00MDMsNiArNDM0LDcgQEAKICMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAogQ09ORklHX1ZJVEVTU0VfUEhZPXkKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCkBAIC00NDAsNiArNDcyLDcgQEAKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfR0ZBUl9OQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQpAQCAtNDQ4LDYgKzQ4MSw3IEBACiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC00ODYsNiArNTIwLDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC01NDIsNiArNTc3LDcgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKQEAgLTU2MywxMCArNTk5LDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTU3NSw3ICs2MDcsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTY0MCw2ICs2NzEsNyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC02NDgsMTQgKzY4MCw5IEBACiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC02NjcsNiArNjk0LDcgQEAKICMKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTY4Miw2ICs3MTAsMTEgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTc0NCw2ICs3NzcsMTAgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzUzLDYgKzc5MCw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiAjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQpAQCAtNzYwLDYgKzc5OCw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc4OCw4ICs4MjcsMTAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkwNCwxMyArOTQ1LDIwIEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCisjCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTkyMSwxMiArOTY5LDE2IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTkzNiwxMCArOTg4LDEwIEBACiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CkBAIC05NTcsNyArMTAwOSwzIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKaW5kZXggNzY1YzhiYi4uZjYxMWRmNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNgotIyBTdW4gU2VwIDEwIDEwOjMwOjIzIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzUKKyMgTW9uIEphbiAyMiAyMjoyODo1NiAyMDA3CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQpAQCAtMTAsNiArMTAsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQpAQCAtMjEsMTMgKzIyLDE0IEBACiBDT05GSUdfUFBDX09GPXkKICMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKIENPTkZJR19DTEFTU0lDMzI9eQotIyBDT05GSUdfUFBDXzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldApAQCAtMzgsNiArNDAsOCBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQUxUSVZFQz15CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKQEAgLTU4LDE3ICs2MiwyMSBAQAogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtNzcsMTIgKzg1LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTAwLDYgKzEwOCw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCitDT05GSUdfQkxPQ0s9eQogQ09ORklHX0xCRD15CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19MU0Y9eQpAQCAtMTIxLDE4ICsxMzAsMjIgQEAKICMgUGxhdGZvcm0gc3VwcG9ydAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKLSMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQVVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VGSUtBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19MSVRFNTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAogQ09ORklHX1BQQ19NUEMxMDY9eQogIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRPXkKIENPTkZJR19DUFVfRlJFUV9UQUJMRT15CiAjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNTcsNiArMTcwLDcgQEAKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0xNjcsNiArMTgxLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTgxLDYgKzE5Niw4IEBACiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKIENPTkZJR19QTV9ERUJVRz15CisjIENPTkZJR19ESVNBQkxFX0NPTlNPTEVfU1VTUEVORCBpcyBub3Qgc2V0CitDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU09GVFdBUkVfU1VTUEVORD15CiBDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgogQ09ORklHX1NFQ0NPTVA9eQpAQCAtMjU0LDYgKzI3MSw3IEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTI3MiwxMCArMjkwLDEzIEBACiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTI5MiwxNCArMzEzLDMzIEBACiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19TSVAgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQpAQCAtMzEyLDYxICszNTIsNDkgQEAKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwotQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotQ09ORklHX0lQX05GX05FVEJJT1NfTlM9bQotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi1DT05GSUdfSVBfTkZfUFBUUD1tCi1DT05GSUdfSVBfTkZfSDMyMz1tCi0jIENPTkZJR19JUF9ORl9TSVAgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTkFUPW0KLUNPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KLUNPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfSVBfTkZfTkFUX0lSQz1tCi1DT05GSUdfSVBfTkZfTkFUX0ZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX1RGVFA9bQotQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQotQ09ORklHX0lQX05GX05BVF9QUFRQPW0KLUNPTkZJR19JUF9ORl9OQVRfSDMyMz1tCisjIENPTkZJR19ORl9OQVRfU05NUF9CQVNJQyBpcyBub3Qgc2V0CitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorIyBDT05GSUdfTkZfTkFUX0FNQU5EQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfSDMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfU0lQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9SQVc9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCkBAIC0zODQsOCArNDEyLDExIEBACiAjIERDQ1AgQ0NJRHMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogQ09ORklHX0lQX0RDQ1BfQ0NJRDI9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEMl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRENDUF9DQ0lEMz1tCiBDT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCisjIENPTkZJR19JUF9EQ0NQX0NDSUQzX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9EQ0NQX0NDSUQzX1JUTz0xMDAKIAogIwogIyBEQ0NQIEtlcm5lbCBIYWNraW5nCkBAIC00MTAsNyArNDQxLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC01NjcsNiArNTk3LDEyIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiBDT05GSUdfSURFPXkKQEAgLTU5NCw3ICs2MzAsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TTDgyQzEwNT15CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKICMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfSURFRE1BX1BDSV9BVVRPPXkKQEAgLTYwOSw2ICs2NDQsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CkBAIC02MTcsNiArNjUzLDcgQEAKIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVz15CiAjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TTDgyQzEwNT15CiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKQEAgLTYzNCw2ICs2NzEsOCBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9ORVRMSU5LPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC02NTMsMTQgKzY5MiwxNiBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTY3OCwxMSArNzE5LDEyIEBACiBDT05GSUdfQUlDN1hYWF9SRUdfUFJFVFRZX1BSSU5UPXkKIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEPW0KICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldApAQCAtNjkyLDE0ICs3MzQsMTUgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MAogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgogQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CkBAIC03MDksNiArNzUyLDcgQEAKIENPTkZJR19TQ1NJX01FU0hfU1lOQ19SQVRFPTUKIENPTkZJR19TQ1NJX01FU0hfUkVTRVRfREVMQVlfTVM9NDAwMAogQ09ORklHX1NDU0lfTUFDNTNDOTQ9eQorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBTQ1NJIGFkYXB0ZXIgc3VwcG9ydApAQCAtNzIwLDYgKzc2NCwxMSBAQAogIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0CiAKICMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCiAjCiBDT05GSUdfTUQ9eQpAQCAtNzMyLDYgKzc4MSw3IEBACiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQogQ09ORklHX0JMS19ERVZfRE09bQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RNX0NSWVBUPW0KIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fTUlSUk9SPW0KQEAgLTc5OCw2ICs4NDgsNyBAQAogQ09ORklHX1RIRVJNX0FEVDc0Nlg9bQogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogIyBDT05GSUdfQU5TTENEIGlzIG5vdCBzZXQKK0NPTkZJR19QTUFDX1JBQ0tNRVRFUj1tCiAKICMKICMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtODM4LDYgKzg4OSw3IEBACiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiBDT05GSUdfUENORVQzMj15CisjIENPTkZJR19QQ05FVDMyX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldApAQCAtODc0LDYgKzkyNiw3IEBACiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKQEAgLTg4Miw2ICs5MzUsNyBAQAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtOTU3LDYgKzEwMTEsNyBAQAogIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz15CiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldApAQCAtOTc3LDYgKzEwMzIsNyBAQAogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTk5OSw2ICsxMDU1LDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CkBAIC0xMDM5LDYgKzEwOTYsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPW0KIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HPW0KICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldApAQCAtMTA2MiwxMyArMTEyMCw3IEBACiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKIENPTkZJR19BR1A9bQotIyBDT05GSUdfQUdQX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BR1BfVklBIGlzIG5vdCBzZXQKIENPTkZJR19BR1BfVU5JTk9SVEg9bQogQ09ORklHX0RSTT1tCiAjIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0CkBAIC0xMDkxLDcgKzExNDMsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTExNjcsMTQgKzEyMTgsOSBAQAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIAogIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtMTE4Nyw2ICsxMjMzLDcgQEAKICMKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9EREM9eQogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTEyMzUsNiArMTI4Miw3IEBACiAjIENPTkZJR19GQl8zREZYX0FDQ0VMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM5Myw2ICsxNDQxLDExIEBACiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC0xNDA4LDYgKzE0NjEsNyBAQAogIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKICMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ0OCwxMyArMTUwMiwxMyBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci1DT05GSUdfVVNCX0hJRElOUFVUPXkKIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LPXkKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKQEAgLTE0ODQsMTIgKzE1MzgsMTQgQEAKICMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorQ09ORklHX1VTQl9VU0JORVRfTUlJPW0KIENPTkZJR19VU0JfVVNCTkVUPW0KIENPTkZJR19VU0JfTkVUX0FYODgxN1g9bQogQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQogIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAogQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCiAjIENPTkZJR19VU0JfTkVUX1BMVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfTUNTNzgzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTkVUX1pBVVJVUz1tCkBAIC0xNTA0LDYgKzE1NjAsNyBAQAogIwogQ09ORklHX1VTQl9TRVJJQUw9bQogIyBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldApAQCAtMTUzOCw2ICsxNTk1LDggQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKQEAgLTE1NDgsNiArMTYwNyw3IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VaVVNCPXkKIAogIwpAQCAtMTU1NSw2ICsxNjE1LDcgQEAKICMKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CkBAIC0xNTYyLDEyICsxNjIzLDEzIEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9BUFBMRURJU1BMQVk9bQogIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTYzMCw2ICsxNjkyLDEwIEBACiAjCiAKICMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTE2MzksNiArMTcwNSw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTE2NDYsNiArMTcxMyw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC0xNjgyLDggKzE3NTAsMTAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE4MDIsOCArMTg3MiwxNCBAQAogQ09ORklHX05MU19VVEY4PW0KIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD15CiBDT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQzMyPXkKQEAgLTE4MTUsNiArMTg5MSw3IEBACiBDT05GSUdfVEVYVFNFQVJDSF9CTT1tCiBDT05GSUdfVEVYVFNFQVJDSF9GU009bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtMTgyNiw4ICsxOTAzLDExIEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKQEAgLTE4NDEsMTQgKzE5MjEsMTYgQEAKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdHRVI9eQogQ09ORklHX1hNT049eQogQ09ORklHX1hNT05fREVGQVVMVD15CitDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CiAjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKIENPTkZJR19CT09UWF9URVhUPXkKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xODYzLDcgKzE5NDUsMTIgQEAKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC0xODcyLDkgKzE5NTksMTQgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKaW5kZXggMWMwMDk2NS4uZGViYWM2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzYKLSMgU3VuIFNlcCAxMCAxMDo0NToxMSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmM1CisjIE1vbiBKYW4gMjIgMjI6Mjg6NTggMjAwNwogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC0xMCw2ICsxMCw4IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKQEAgLTIyLDYgKzI0LDggQEAKIENPTkZJR19QUENfT0Y9eQogQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKIENPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogCiAjCkBAIC0zMSw2ICszNSwxMCBAQAogQ09ORklHX1BPV0VSMz15CiBDT05GSUdfUE9XRVI0PXkKIENPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX01NSU89eQorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0k9eQogQ09ORklHX0FMVElWRUM9eQogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKQEAgLTUyLDE5ICs2MCwyNCBAQAogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1RBU0tTVEFUUz15CiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CisjIENPTkZJR19UQVNLX1hBQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtNzMsMTIgKzg2LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUlRfTVVURVhFUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtOTcsNiArMTEwLDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTE9DSz15CiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15CiAKICMKQEAgLTExNiwxNiArMTMwLDIwIEBACiAjIFBsYXRmb3JtIHN1cHBvcnQKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci0jIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFVTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUFNFUklFUz15CitDT05GSUdfUFBDX0lTRVJJRVM9eQorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogQ09ORklHX1BQQ19QTUFDPXkKIENPTkZJR19QUENfUE1BQzY0PXkKIENPTkZJR19QUENfTUFQTEU9eQorIyBDT05GSUdfUFBDX1BBU0VNSSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0NFTEw9eQogQ09ORklHX1BQQ19DRUxMX05BVElWRT15CiBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFPXkKKyMgQ09ORklHX1BQQ19QUzMgaXMgbm90IHNldAorQ09ORklHX1BQQ19OQVRJVkU9eQogQ09ORklHX1VEQkdfUlRBU19DT05TT0xFPXkKIENPTkZJR19YSUNTPXkKIENPTkZJR19VM19EQVJUPXkKQEAgLTEzOSw2ICsxNTcsOCBAQAogIyBDT05GSUdfSUJNRUJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKIENPTkZJR19QUENfOTcwX05BUD15CitDT05GSUdfUFBDX0lORElSRUNUX0lPPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKIENPTkZJR19DUFVfRlJFUT15CiBDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQogIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldApAQCAtMTYwLDE0ICsxODAsMTYgQEAKICMKIENPTkZJR19TUFVfRlM9bQogQ09ORklHX1NQVV9CQVNFPXkKLUNPTkZJR19TUFVGU19NTUFQPXkKIENPTkZJR19DQkVfUkFTPXkKK0NPTkZJR19DQkVfVEhFUk09bQorQ09ORklHX0NCRV9DUFVGUkVRPW0KIAogIwogIyBLZXJuZWwgb3B0aW9ucwogIwogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0xOTIsNiArMjE0LDcgQEAKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMjAxLDYgKzIyNCw3IEBACiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiBDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX1JFU09VUkNFU182NEJJVD15CiBDT05GSUdfQVJDSF9NRU1PUllfUFJPQkU9eQpAQCAtMjU0LDYgKzI3OCw3IEBACiBDT05GSUdfVU5JWD15CiBDT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT1tCiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTI3MiwxMCArMjk3LDEzIEBACiBDT05GSUdfSU5FVF9UVU5ORUw9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KQEAgLTI5NCwyNSArMzIyLDMxIEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTks9eQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19JUF9ORl9DVF9BQ0NUPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTks9bQotQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLSMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi0jIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogCiAjCkBAIC0zMzksNyArMzczLDYgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogCkBAIC00MTIsNiArNDQ1LDEyIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCisjIE1pc2MgZGV2aWNlcworIworIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKworIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiBDT05GSUdfSURFPXkKQEAgLTQzOCw3ICs0NzcsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TTDgyQzEwNT15CiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKICMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfSURFRE1BX1BDSV9BVVRPPXkKQEAgLTQ1Myw2ICs0OTEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CkBAIC00NjEsNiArNTAwLDcgQEAKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NMODJDMTA1PXkKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldApAQCAtNDc4LDYgKzUxOCw4IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX05FVExJTks9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKQEAgLTQ5NywxNCArNTM5LDE2IEBACiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCkBAIC01MTcsMjYgKzU2MSwxMiBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBPXkKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0FUQV9TVlc9eQotIyBDT05GSUdfU0NTSV9BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QRENfQURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKQEAgLTU0Niw2ICs1NzYsNyBAQAogQ09ORklHX1NDU0lfSUJNVlNDU0k9eQogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCiBDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CkBAIC01NTYsMTAgKzU4Nyw2NiBAQAogQ09ORklHX1NDU0lfSVBSX0RVTVA9eQogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MUEZDPW0KICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0RFQlVHPW0KKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NWVz15CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNTc1LDYgKzY2Miw3IEBACiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQogQ09ORklHX0JMS19ERVZfRE09eQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RNX0NSWVBUPW0KIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fTUlSUk9SPW0KQEAgLTYzMCwxMSArNzE4LDEzIEBACiBDT05GSUdfQURCX1BNVT15CiAjIENPTkZJR19BREJfUE1VX0xFRCBpcyBub3Qgc2V0CiBDT05GSUdfUE1BQ19TTVU9eQorIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTV9QTTcyPXkKIENPTkZJR19XSU5ERkFSTT15CiBDT05GSUdfV0lOREZBUk1fUE04MT15CiBDT05GSUdfV0lOREZBUk1fUE05MT15CiBDT05GSUdfV0lOREZBUk1fUE0xMTI9eQorIyBDT05GSUdfUE1BQ19SQUNLTUVURVIgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTY3NSw2ICs3NjUsNyBAQAogQ09ORklHX0lCTVZFVEg9bQogQ09ORklHX05FVF9QQ0k9eQogQ09ORklHX1BDTkVUMzI9eQorIyBDT05GSUdfUENORVQzMl9OQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKQEAgLTcxMyw3ICs4MDQsNyBAQAogQ09ORklHX1RJR09OMz15CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKIENPTkZJR19TUElERVJfTkVUPW0KLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwMCBNYml0KQpAQCAtNzIzLDYgKzgxNCw3IEBACiAjIENPTkZJR19JWEdCX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTc0MSw2ICs4MzMsNyBAQAogIyBXYW4gaW50ZXJmYWNlcwogIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19JU0VSSUVTX1ZFVEg9bQogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KQEAgLTc1Myw2ICs4NDYsNyBAQAogIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAogQ09ORklHX1BQUE9FPW0KICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUQ09OU09MRT15CkBAIC03NzUsNiArODY5LDcgQEAKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03OTcsNiArODkyLDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldApAQCAtODUwLDYgKzk0Niw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKIENPTkZJR19IVkNfRFJJVkVSPXkKIENPTkZJR19IVkNfQ09OU09MRT15CitDT05GSUdfSFZDX0lTRVJJRVM9eQogQ09ORklHX0hWQ19SVEFTPXkKIENPTkZJR19IVkNTPW0KIApAQCAtODY4LDEwICs5NjUsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKQEAgLTg4Miw3ICs5NzUsNiBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTk0Nyw2ICsxMDM5LDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtOTU1LDE0ICsxMDQ4LDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTk3NSw2ICsxMDYzLDcgQEAKICMKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQj15CitDT05GSUdfRkJfRERDPXkKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CkBAIC0xMDExLDYgKzExMDAsNyBAQAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0lCTV9HWFQ0NTAwPXkKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMTU5LDYgKzEyNDksMTEgQEAKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIAogIworIyBISUQgRGV2aWNlcworIworQ09ORklHX0hJRD15CisKKyMKICMgVVNCIHN1cHBvcnQKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTExNzMsNiArMTI2OCw3IEBACiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIxNCwxMyArMTMxMCwxMyBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKLUNPTkZJR19VU0JfSElESU5QVVQ9eQogIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9ISURERVY9eQpAQCAtMTI1MCw2ICsxMzQ2LDcgQEAKICMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVF9NSUkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIApAQCAtMTI2Nyw2ICsxMzY0LDcgQEAKICMKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CkBAIC0xMjc0LDEyICsxMzcyLDEzIEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9BUFBMRURJU1BMQVk9bQogIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMxOCw2ICsxNDE3LDcgQEAKIENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQorIyBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CiAjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldApAQCAtMTM0Nyw2ICsxNDQ3LDEwIEBACiAjCiAKICMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTEzNTksNiArMTQ2Myw3IEBACiBDT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CkBAIC0xMzc5LDYgKzE0ODQsNyBAQAogQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkBAIC0xNDE0LDggKzE1MjAsMTAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX1JBTUZTPXkKQEAgLTE1NDAsOCArMTY0OCwyMyBAQAogQ09ORklHX05MU19VVEY4PW0KIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgaVNlcmllcyBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfVklPQ09OUyBpcyBub3Qgc2V0CitDT05GSUdfVklPREFTRD15CitDT05GSUdfVklPQ0Q9bQorQ09ORklHX1ZJT1RBUEU9bQorQ09ORklHX1ZJT1BBVEg9eQorCisjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKQEAgLTE1NTEsNiArMTY3NCw3IEBACiBDT05GSUdfVEVYVFNFQVJDSD15CiBDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtMTU2Myw4ICsxNjg3LDExIEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CkBAIC0xNTc4LDE2ICsxNzA1LDE5IEBACiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQorIyBDT05GSUdfSENBTExfU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHR0VSPXkKIENPTkZJR19YTU9OPXkKICMgQ09ORklHX1hNT05fREVGQVVMVCBpcyBub3Qgc2V0CitDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CiBDT05GSUdfSVJRU1RBQ0tTPXkKIENPTkZJR19CT09UWF9URVhUPXkKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNjAyLDcgKzE3MzIsMTIgQEAKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiBDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CkBAIC0xNjExLDkgKzE3NDYsMTQgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZwppbmRleCBmMmQ4ODhlLi4zMjU2MDg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTktcmM2Ci0jIFR1ZSBOb3YgMjEgMTk6Mzg6NTMgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjNQorIyBNb24gSmFuIDIyIDIyOjI5OjExIDIwMDcKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtMTAsNiArMTAsOCBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CkBAIC0yMyw2ICsyNSw3IEBACiAjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogCiAjCkBAIC02NCw2ICs2Nyw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CkBAIC0xMjYsNiArMTMwLDcgQEAKICMgQ09ORklHX0FQVVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldApAQCAtMTU3LDEyICsxNjIsMTQgQEAKIENPTkZJR19QUzNfSFRBQl9TSVpFPTIwCiBDT05GSUdfUFMzX0RZTkFNSUNfRE1BPXkKIENPTkZJR19QUzNfVVNFX0xQQVJfQUREUj15CitDT05GSUdfUFMzX1ZVQVJUPXkKIAogIwogIyBLZXJuZWwgb3B0aW9ucwogIwogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0yNjAsNiArMjY3LDcgQEAKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKQEAgLTM2NSw2ICszNzMsNyBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTM4NCw2ICszOTMsNyBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBUcmFuc3BvcnRzCkBAIC00MjYsNiArNDM2LDcgQEAKICMKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAogIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogCiAjCkBAIC01NDgsMTAgKzU1OSw2IEBACiAjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0CiAKQEAgLTU5Nyw2ICs2MDQsNyBAQAogIwogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CkBAIC02MTEsNiArNjE5LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiAjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKQEAgLTY3MSw2ICs2ODQsMTAgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CkBAIC03NzEsNiArNzg4LDExIEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldApAQCAtNzc4LDYgKzgwMCw3IEBACiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtNzkyLDYgKzgxNSw4IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQpAQCAtODA1LDEyICs4MzAsMTEgQEAKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MSVNUPXkKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCBkMjgzM2MxLi4xYzc5NGZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzYKLSMgU3VuIFNlcCAxMCAxMDo0NToxMiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmM1CisjIE1vbiBKYW4gMjIgMjI6MzE6MjcgMjAwNwogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC0xMCw2ICsxMCw4IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKQEAgLTIyLDYgKzI0LDggQEAKIENPTkZJR19QUENfT0Y9eQogQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CiAjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CiAKICMKQEAgLTMxLDYgKzM1LDkgQEAKIENPTkZJR19QT1dFUjM9eQogQ09ORklHX1BPV0VSND15CiBDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfQUxUSVZFQz15CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQpAQCAtNTIsMTkgKzU5LDIyIEBACiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19DUFVTRVRTPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CkBAIC03MywxMiArODMsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC05Nyw2ICsxMDcsNyBAQAogIwogIyBCbG9jayBsYXllcgogIworQ09ORklHX0JMT0NLPXkKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogCiAjCkBAIC0xMTYsMTUgKzEyNywxOSBAQAogIyBQbGF0Zm9ybSBzdXBwb3J0CiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQotIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAogIyBDT05GSUdfQVBVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1BTRVJJRVM9eQorIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUFMzIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTkFUSVZFPXkKICMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19YSUNTPXkKICMgQ09ORklHX1UzX0RBUlQgaXMgbm90IHNldApAQCAtMTM3LDYgKzE1Miw4IEBACiBDT05GSUdfSUJNRUJVUz15CiAjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKQEAgLTE0Niw2ICsxNjMsNyBAQAogIwogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogQ09ORklHX0haPTI1MAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0xNzAsNiArMTg4LDcgQEAKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0xODMsNyArMjAyLDYgQEAKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKIENPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEPXkKIENPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX1NDSEVEX1NNVD15CkBAIC0yMzUsNiArMjUzLDcgQEAKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPW0KIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMjUzLDEwICsyNzIsMTMgQEAKIENPTkZJR19JTkVUX1RVTk5FTD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKIAogIwogIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgpAQCAtMjc1LDI1ICsyOTcsMzAgQEAKIENPTkZJR19ORVRGSUxURVJfTkVUTElOSz15CiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorIyBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19TSVAgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX0NUX0FDQ1Q9eQotQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSz1tCi1DT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfSVBfTkZfRlRQPW0KLUNPTkZJR19JUF9ORl9JUkM9bQotIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfVEZUUD1tCi1DT05GSUdfSVBfTkZfQU1BTkRBPW0KLSMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9TSVAgaXMgbm90IHNldAorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIAogIwpAQCAtMzIwLDcgKzM0Nyw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtNDAyLDYgKzQyOCwxMiBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIworIyBNaXNjIGRldmljZXMKKyMKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CkBAIC00MjgsNyArNDYwLDYgQEAKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfU0w4MkMxMDU9eQogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CiAjIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAogQ09ORklHX0lERURNQV9QQ0lfQVVUTz15CkBAIC00NDMsNiArNDc0LDcgQEAKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldApAQCAtNDUxLDYgKzQ4Myw3IEBACiAjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TTDgyQzEwNT15CiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKQEAgLTQ2NSw2ICs0OTgsOCBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9ORVRMSU5LPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCiAjCkBAIC00ODQsMTQgKzUxOSwxNiBAQAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKIAogIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjIFNDU0kgVHJhbnNwb3J0cwogIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKIENPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KIENPTkZJR19TQ1NJX1NBU19BVFRSUz1tCisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTUwNCwxMCArNTQxLDExIEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLUNPTkZJR19BVEE9eQogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKQEAgLTUyMCw2ICs1NTgsNyBAQAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCiBDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CkBAIC01MzAsMTAgKzU2OSw2NiBAQAogQ09ORklHX1NDU0lfSVBSX0RVTVA9eQogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9RTEFfRkM9bQorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTFBGQz1tCiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKKyMKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC01NDgsNiArNjQzLDcgQEAKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT15CisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRE1fQ1JZUFQ9bQogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9NSVJST1I9bQpAQCAtNTc2LDYgKzY3Miw3IEBACiAjCiAjIE1hY2ludG9zaCBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTkRGQVJNIGlzIG5vdCBzZXQKIAogIwpAQCAtNjE3LDYgKzcxNCw3IEBACiBDT05GSUdfSUJNVkVUSD15CiBDT05GSUdfTkVUX1BDST15CiBDT05GSUdfUENORVQzMj15CisjIENPTkZJR19QQ05FVDMyX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldApAQCAtNjU1LDE3ICs3NTMsMTkgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPXkKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19FSEVBPW0KIENPTkZJR19JWEdCPW0KICMgQ09ORklHX0lYR0JfTkFQSSBpcyBub3Qgc2V0CiBDT05GSUdfUzJJTz1tCiAjIENPTkZJR19TMklPX05BUEkgaXMgbm90IHNldAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02OTcsNiArNzk3LDcgQEAKICMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKIENPTkZJR19QUFBPRT1tCiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogQ09ORklHX05FVENPTlNPTEU9eQpAQCAtNzE5LDYgKzgyMCw3IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzQxLDYgKzg0Myw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKIENPTkZJR19NT1VTRV9QUzI9eQogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTgxNSwxMCArOTE4LDYgQEAKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15CkBAIC04MjksNyArOTI4LDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC04OTQsNiArOTkyLDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtOTAyLDE0ICsxMDAxLDkgQEAKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTkyMiw2ICsxMDE2LDcgQEAKICMKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQj15CitDT05GSUdfRkJfRERDPXkKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CkBAIC05NTcsNiArMTA1Miw3IEBACiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfSUJNX0dYVDQ1MDA9eQogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTk4OSw2ICsxMDg1LDExIEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAKICMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCiAjIFVTQiBzdXBwb3J0CiAjCiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CkBAIC0xMDAzLDYgKzExMDQsNyBAQAogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDMsMTMgKzExNDUsMTMgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotQ09ORklHX1VTQl9ISURJTlBVVD15CiAjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CkBAIC0xMDc5LDYgKzExODEsNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIApAQCAtMTA5Nyw2ICsxMjAwLDcgQEAKICMKICMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CkBAIC0xMTA0LDEyICsxMjA4LDEzIEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMTQ4LDYgKzEyNTMsOSBAQAogQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15CitDT05GSUdfSU5GSU5JQkFORF9FSENBPW0KK0NPTkZJR19JTkZJTklCQU5EX0VIQ0FfU0NBTElORz15CisjIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKICMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSBpcyBub3Qgc2V0CkBAIC0xMTc3LDYgKzEyODUsMTAgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTE4OSw2ICsxMzAxLDcgQEAKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTEyMDksNiArMTMyMiw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19PQ0ZTMl9GUz1tCiBDT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRz15CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CkBAIC0xMjQ2LDggKzEzNjAsMTAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX1JBTUZTPXkKQEAgLTEzNTcsMTcgKzE0NzMsMjIgQEAKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIworIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKKyMKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKICMgTGlicmFyeSByb3V0aW5lcwogIworQ09ORklHX0JJVFJFVkVSU0U9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTEzODAsOCArMTUwMSwxMSBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQpAQCAtMTM5NSwxNiArMTUxOSwyMCBAQAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0hDQUxMX1NUQVRTPXkKIENPTkZJR19ERUJVR0dFUj15CiBDT05GSUdfWE1PTj15CiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKK0NPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKIENPTkZJR19JUlFTVEFDS1M9eQogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldApAQCAtMTQxOSw3ICsxNTQ3LDEyIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQpAQCAtMTQyOCw5ICsxNTYxLDE0IEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNGZlNTNkMC4uZDJkZWQxOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCkBAIC03Nyw2ICs3Nyw3IEBACiAKIGlmZXEgKCQoQ09ORklHX1BQQ19JU0VSSUVTKSx5KQogZXh0cmEteSArPSBscGFybWFwLnMKKyQob2JqKS9oZWFkXzY0Lm86CSQob2JqKS9scGFybWFwLnMKIEFGTEFHU19oZWFkXzY0Lm8gKz0gLUkkKG9iaikKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBlOTY1MjE1Li4wMzBkMzAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0zMDMsNSArMzAzLDggQEAKIAlERUZJTkUoTlNFQ19QRVJfU0VDLCBOU0VDX1BFUl9TRUMpOwogCURFRklORShDTE9DS19SRUFMVElNRV9SRVMsIFRJQ0tfTlNFQyk7CiAKKyNpZmRlZiBDT05GSUdfQlVHCisJREVGSU5FKEJVR19FTlRSWV9TSVpFLCBzaXplb2Yoc3RydWN0IGJ1Z19lbnRyeSkpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggOWQxNjE0Yy4uYjc0MjAxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtODMzLDcgKzgzMyw3IEBACiAJCS5wdnJfbWFzawkJPSAweDdmZmYwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MDA4NDAwMDAsCiAJCS5jcHVfbmFtZQkJPSAiZTMwMGMyIiwKLQkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FMzAwLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX0UzMDBDMiwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gUFBDX0ZFQVRVUkVfMzIgfCBQUENfRkVBVFVSRV9IQVNfTU1VLAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLApAQCAtMTEzNiw4ICsxMTM2LDcgQEAKIAkJLnB2cl9tYXNrCQk9IDB4ZmYwMDBmZmYsCiAJCS5wdnJfdmFsdWUJCT0gMHg1MzAwMDg5MCwKIAkJLmNwdV9uYW1lCQk9ICI0NDBTUGUgUmV2LiBBIiwKLQkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwKLQkJCUNQVV9GVFJfVVNFX1RCLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTXzQ0WCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfQk9PS0UsCiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggMWEzZDRkZS4uMjU1MWMwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KIAogLyoKICAqIFN5c3RlbSBjYWxscy4KQEAgLTYzNCwxOSArNjM1LDE1IEBACiAJbGkJcjAsMAogCW10Y3IJcjAKIAorI2lmZGVmIENPTkZJR19CVUcJCiAJLyogVGhlcmUgaXMgbm8gd2F5IGl0IGlzIGFjY2VwdGFibGUgdG8gZ2V0IGhlcmUgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQsCiAJICogY2hlY2sgaXQgd2l0aCB0aGUgYXNtIGVxdWl2YWxlbnQgb2YgV0FSTl9PTgogCSAqLwogCWxieglyMCxQQUNBU09GVElSUUVOKHIxMykKIDE6CXRkbmVpCXIwLDAKLS5zZWN0aW9uIF9fYnVnX3RhYmxlLCJhIgotCS5sbG9uZwkxYixfX0xJTkVfXyArIDB4MTAwMDAwMCwgMWYsIDJmCi0ucHJldmlvdXMKLS5zZWN0aW9uIC5yb2RhdGEsImEiCi0xOgkuYXNjaXoJX19GSUxFX18KLTI6CS5hc2NpeiAiZW50ZXJfcnRhcyIKLS5wcmV2aW91cwotCisJRU1JVF9CVUdfRU5UUlkgMWIsX19GSUxFX18sX19MSU5FX18sQlVHRkxBR19XQVJOSU5HCisjZW5kaWYKKwkKIAkvKiBIYXJkLWRpc2FibGUgaW50ZXJydXB0cyAqLwogCW1mbXNyCXI2CiAJcmxkaWNsCXI3LHI2LDQ4LDEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggZDg4ZTE4Mi4uOTQxN2NmNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKQEAgLTQzNyw2ICs0MzcsMTMgQEAKIC8qIEZsb2F0aW5nLXBvaW50IHVuYXZhaWxhYmxlICovCiAJLiA9IDB4ODAwCiBGUFVuYXZhaWxhYmxlOgorQkVHSU5fRlRSX1NFQ1RJT04KKy8qCisgKiBDZXJ0YWluIEZyZWVzY2FsZSBjb3JlcyBkb24ndCBoYXZlIGEgRlBVIGFuZCB0cmVhdCBmcCBpbnN0cnVjdGlvbnMKKyAqIGFzIGEgRlAgVW5hdmFpbGFibGUgZXhjZXB0aW9uLiAgUmVkaXJlY3QgdG8gaWxsZWdhbC9lbXVsYXRpb24gaGFuZGxpbmcuCisgKi8KKwliIAlQcm9ncmFtQ2hlY2sKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0ZQVV9VTkFWQUlMQUJMRSkKIAlFWENFUFRJT05fUFJPTE9HCiAJYm5lCWxvYWRfdXBfZnB1CQkvKiBpZiBmcm9tIHVzZXIsIGp1c3QgbG9hZCBpdCB1cCAqLwogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV8zMi5jCmluZGV4IGUyYzNjNmEuLjgzMzlmZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAKICNpbmNsdWRlICJzZXR1cC5oIgogCkBAIC0yOTAsMjMgKzI5MSwxMSBAQAogCQkgICAgc3RydWN0IG1vZHVsZSAqbWUpCiB7CiAJY29uc3QgRWxmX1NoZHIgKnNlY3Q7CisJaW50IGVycjsKIAotCW1lLT5hcmNoLmJ1Z190YWJsZSA9IE5VTEw7Ci0JbWUtPmFyY2gubnVtX2J1Z3MgPSAwOwotCi0JLyogRmluZCB0aGUgX19idWdfdGFibGUgc2VjdGlvbiwgaWYgcHJlc2VudCAqLwotCXNlY3QgPSBmaW5kX3NlY3Rpb24oaGRyLCBzZWNoZHJzLCAiX19idWdfdGFibGUiKTsKLQlpZiAoc2VjdCAhPSBOVUxMKSB7Ci0JCW1lLT5hcmNoLmJ1Z190YWJsZSA9ICh2b2lkICopIHNlY3QtPnNoX2FkZHI7Ci0JCW1lLT5hcmNoLm51bV9idWdzID0gc2VjdC0+c2hfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgYnVnX2VudHJ5KTsKLQl9Ci0KLSAJLyoKLQkgKiBTdHJpY3RseSBzcGVha2luZyB0aGlzIHNob3VsZCBoYXZlIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0Ci0JICogdHJhdmVyc2FscywgYnV0IHNpbmNlIHdlIG9ubHkgdHJhdmVyc2Ugb24gQlVHKClzLCBhIHNwaW5sb2NrCi0JICogY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBkZWFkbG9jayBhbmQgdGh1cyBiZSBjb3VudGVyLXByb2R1Y3RpdmUuCi0JICovCi0JbGlzdF9hZGQoJm1lLT5hcmNoLmJ1Z19saXN0LCAmbW9kdWxlX2J1Z19saXN0KTsKKwllcnIgPSBtb2R1bGVfYnVnX2ZpbmFsaXplKGhkciwgc2VjaGRycywgbWUpOworCWlmIChlcnIpCQkvKiBuZXZlciB0cnVlLCBjdXJyZW50bHkgKi8KKwkJcmV0dXJuIGVycjsKIAogCS8qIEFwcGx5IGZlYXR1cmUgZml4dXBzICovCiAJc2VjdCA9IGZpbmRfc2VjdGlvbihoZHIsIHNlY2hkcnMsICJfX2Z0cl9maXh1cCIpOwpAQCAtMzIwLDcgKzMwOSw3IEBACiAKIHZvaWQgbW9kdWxlX2FyY2hfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JbGlzdF9kZWwoJm1vZC0+YXJjaC5idWdfbGlzdCk7CisJbW9kdWxlX2J1Z19jbGVhbnVwKG1vZCk7CiB9CiAKIHN0cnVjdCBidWdfZW50cnkgKm1vZHVsZV9maW5kX2J1Zyh1bnNpZ25lZCBsb25nIGJ1Z2FkZHIpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfNjQuYwppbmRleCA4ZGQxZjBhLi43NWM3YzRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8YXNtL21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CkBAIC00MzksMjMgKzQ0MCwxMSBAQAogCQljb25zdCBFbGZfU2hkciAqc2VjaGRycywgc3RydWN0IG1vZHVsZSAqbWUpCiB7CiAJY29uc3QgRWxmX1NoZHIgKnNlY3Q7CisJaW50IGVycjsKIAotCW1lLT5hcmNoLmJ1Z190YWJsZSA9IE5VTEw7Ci0JbWUtPmFyY2gubnVtX2J1Z3MgPSAwOwotCi0JLyogRmluZCB0aGUgX19idWdfdGFibGUgc2VjdGlvbiwgaWYgcHJlc2VudCAqLwotCXNlY3QgPSBmaW5kX3NlY3Rpb24oaGRyLCBzZWNoZHJzLCAiX19idWdfdGFibGUiKTsKLQlpZiAoc2VjdCAhPSBOVUxMKSB7Ci0JCW1lLT5hcmNoLmJ1Z190YWJsZSA9ICh2b2lkICopIHNlY3QtPnNoX2FkZHI7Ci0JCW1lLT5hcmNoLm51bV9idWdzID0gc2VjdC0+c2hfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgYnVnX2VudHJ5KTsKLQl9Ci0KLQkvKgotCSAqIFN0cmljdGx5IHNwZWFraW5nIHRoaXMgc2hvdWxkIGhhdmUgYSBzcGlubG9jayB0byBwcm90ZWN0IGFnYWluc3QKLQkgKiB0cmF2ZXJzYWxzLCBidXQgc2luY2Ugd2Ugb25seSB0cmF2ZXJzZSBvbiBCVUcoKXMsIGEgc3BpbmxvY2sKLQkgKiBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGRlYWRsb2NrIGFuZCB0aHVzIGJlIGNvdW50ZXItcHJvZHVjdGl2ZS4KLQkgKi8KLQlsaXN0X2FkZCgmbWUtPmFyY2guYnVnX2xpc3QsICZtb2R1bGVfYnVnX2xpc3QpOworCWVyciA9IG1vZHVsZV9idWdfZmluYWxpemUoaGRyLCBzZWNoZHJzLCBtZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCS8qIEFwcGx5IGZlYXR1cmUgZml4dXBzICovCiAJc2VjdCA9IGZpbmRfc2VjdGlvbihoZHIsIHNlY2hkcnMsICJfX2Z0cl9maXh1cCIpOwpAQCAtNDc1LDcgKzQ2NCw3IEBACiAKIHZvaWQgbW9kdWxlX2FyY2hfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JbGlzdF9kZWwoJm1vZC0+YXJjaC5idWdfbGlzdCk7CisJbW9kdWxlX2J1Z19jbGVhbnVwKG1vZCk7CiB9CiAKIHN0cnVjdCBidWdfZW50cnkgKm1vZHVsZV9maW5kX2J1Zyh1bnNpZ25lZCBsb25nIGJ1Z2FkZHIpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMKaW5kZXggNjk2MGYwOS4uODY5Y2ViYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYwpAQCAtNTA1LDcgKzUwNSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCXRvdGFsX3NpemUgPSBwcGNfbWQubnZyYW1fc2l6ZSgpOwogCQotCWhlYWRlciA9IChjaGFyICopIGttYWxsb2MoTlZSQU1fSEVBREVSX0xFTiwgR0ZQX0tFUk5FTCk7CisJaGVhZGVyID0ga21hbGxvYyhOVlJBTV9IRUFERVJfTEVOLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhlYWRlcikgewogCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX3NjYW5fcGFydGl0aW9uczogRmFpbGVkIGttYWxsb2NcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTU3NCw3ICs1NzQsNyBAQAogCX0KICAgCQogICAJLyogaW5pdGlhbGl6ZSBvdXIgYW5jaG9yIGZvciB0aGUgbnZyYW0gcGFydGl0aW9uIGxpc3QgKi8KLSAgCW52cmFtX3BhcnQgPSAoc3RydWN0IG52cmFtX3BhcnRpdGlvbiAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnZyYW1fcGFydGl0aW9uKSwgR0ZQX0tFUk5FTCk7CisgIAludnJhbV9wYXJ0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG52cmFtX3BhcnRpdGlvbiksIEdGUF9LRVJORUwpOwogICAJaWYgKCFudnJhbV9wYXJ0KSB7CiAgIAkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9pbml0OiBGYWlsZWQga21hbGxvY1xuIik7CiAgIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9kZXZpY2UuYwppbmRleCA4YTA2NzI0Li5lOTIxNTE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfZGV2aWNlLmMKQEAgLTEwOSw5ICsxMDksNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZvZmRldi0+ZGV2LCAmZGV2X2F0dHJfZGV2c3BlYyk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKCZvZmRldi0+ZGV2LCAmZGV2X2F0dHJfZGV2c3BlYyk7CiB9CiAKIHZvaWQgb2ZfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMKaW5kZXggYjMxODlkMC4uYjczNDUxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYwpAQCAtNTAsNiArNTAsNyBAQAogCXsgLnR5cGUgPSAicGxiNSIsIH0sCiAJeyAudHlwZSA9ICJwbGI0IiwgfSwKIAl7IC50eXBlID0gIm9wYiIsIH0sCisJeyAudHlwZSA9ICJlYmMiLCB9LAogCXt9LAogfTsKIApAQCAtMTY5LDcgKzE3MCw3IEBACiAJY2hhciAqbmFtZSA9IGRldi0+ZGV2LmJ1c19pZDsKIAljb25zdCB1MzIgKnJlZzsKIAl1NjQgYWRkcjsKLQlsb25nIG1hZ2ljOworCWludCBtYWdpYzsKIAogCS8qCiAJICogSWYgaXQncyBhIERDUiBiYXNlZCBkZXZpY2UsIHVzZSAnZCcgZm9yIG5hdGl2ZSBEQ1JzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYwppbmRleCAyZjU0Y2Q4Li5jNTRmMzYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKQEAgLTY3MCw3ICs2NzAsNyBAQAogCXN0cnVjdCBwY2lfY29udHJvbGxlciogaG9zZTsKIAlzdHJ1Y3QgcHJvcGVydHkgKm1hcF9wcm9wOwogCi0JcGNpX3RvX09GX2J1c19tYXAgPSAodTgqKWttYWxsb2MocGNpX2J1c19jb3VudCwgR0ZQX0tFUk5FTCk7CisJcGNpX3RvX09GX2J1c19tYXAgPSBrbWFsbG9jKHBjaV9idXNfY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghcGNpX3RvX09GX2J1c19tYXApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBhbGxvY2F0ZSBPRiBidXMgbWFwICFcbiIpOwogCQlyZXR1cm47CkBAIC03MzYsMjUgKzczNiw0NiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50Ci1zY2FuX09GX3BjaV9jaGlsZHNfaXRlcmF0b3Ioc3RydWN0IGRldmljZV9ub2RlKiBub2RlLCB2b2lkKiBkYXRhKQorc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqc2Nhbl9PRl9mb3JfcGNpX2RldihzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBkZXZmbikKIHsKLQljb25zdCB1bnNpZ25lZCBpbnQgKnJlZzsKLQl1OCogZmRhdGEgPSAodTgqKWRhdGE7Ci0JCi0JcmVnID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJyZWciLCBOVUxMKTsKLQlpZiAocmVnICYmICgocmVnWzBdID4+IDgpICYgMHhmZikgPT0gZmRhdGFbMV0KLQkJJiYgKChyZWdbMF0gPj4gMTYpICYgMHhmZikgPT0gZmRhdGFbMF0pCi0JCXJldHVybiAxOwotCXJldHVybiAwOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOworCWNvbnN0IHUzMiAqcmVnOworCXVuc2lnbmVkIGludCBwc2l6ZTsKKworCXdoaWxlICgobnAgPSBvZl9nZXRfbmV4dF9jaGlsZChwYXJlbnQsIG5wKSkgIT0gTlVMTCkgeworCQlyZWcgPSBnZXRfcHJvcGVydHkobnAsICJyZWciLCAmcHNpemUpOworCQlpZiAocmVnID09IE5VTEwgfHwgcHNpemUgPCA0KQorCQkJY29udGludWU7CisJCWlmICgoKHJlZ1swXSA+PiA4KSAmIDB4ZmYpID09IGRldmZuKQorCQkJcmV0dXJuIG5wOworCX0KKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSoKLXNjYW5fT0ZfY2hpbGRzX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZV9ub2RlKiBub2RlLCB1OCBidXMsIHU4IGRldl9mbikKLXsKLQl1OCBmaWx0ZXJfZGF0YVsyXSA9IHtidXMsIGRldl9mbn07CiAKLQlyZXR1cm4gc2Nhbl9PRl9wY2lfY2hpbGRzKG5vZGUsIHNjYW5fT0ZfcGNpX2NoaWxkc19pdGVyYXRvciwgZmlsdGVyX2RhdGEpOworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqc2Nhbl9PRl9mb3JfcGNpX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCAqbnA7CisKKwkvKiBBcmUgd2UgYSByb290IGJ1cyA/ICovCisJaWYgKGJ1cy0+c2VsZiA9PSBOVUxMIHx8IGJ1cy0+cGFyZW50ID09IE5VTEwpIHsKKwkJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3NlKGJ1cy0+bnVtYmVyKTsKKwkJaWYgKGhvc2UgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCQlyZXR1cm4gb2Zfbm9kZV9nZXQoaG9zZS0+YXJjaF9kYXRhKTsKKwl9CisKKwkvKiBub3QgYSByb290IGJ1cywgd2UgbmVlZCB0byBnZXQgb3VyIHBhcmVudCAqLworCXBhcmVudCA9IHNjYW5fT0ZfZm9yX3BjaV9idXMoYnVzLT5wYXJlbnQpOworCWlmIChwYXJlbnQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBub3cgaXRlcmF0ZSBmb3IgY2hpbGRyZW4gZm9yIGEgbWF0Y2ggKi8KKwlucCA9IHNjYW5fT0ZfZm9yX3BjaV9kZXYocGFyZW50LCBidXMtPnNlbGYtPmRldmZuKTsKKwlvZl9ub2RlX3B1dChwYXJlbnQpOworCisJcmV0dXJuIG5wOwogfQogCiAvKgpAQCAtNzYzLDQzICs3ODQsMjUgQEAKIHN0cnVjdCBkZXZpY2Vfbm9kZSAqCiBwY2lfYnVzZGV2X3RvX09GX25vZGUoc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IGRldmZuKQogewotCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Ci0JaW50IGJ1c25yOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCAqbnA7CiAKIAlpZiAoIWhhdmVfb2YpCiAJCXJldHVybiBOVUxMOwotCQotCS8qIExvb2t1cCB0aGUgaG9zZSAqLwotCWJ1c25yID0gYnVzLT5udW1iZXI7Ci0JaG9zZSA9IHBjaV9idXNfdG9faG9zZShidXNucik7Ci0JaWYgKCFob3NlKQotCQlyZXR1cm4gTlVMTDsKIAotCS8qIENoZWNrIGl0IGhhcyBhbiBPRiBub2RlIGFzc29jaWF0ZWQgKi8KLQlub2RlID0gKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKSBob3NlLT5hcmNoX2RhdGE7Ci0JaWYgKCFub2RlKQorCURCRygicGNpX2J1c2Rldl90b19PRl9ub2RlKCVkLDB4JXgpXG4iLCBidXMtPm51bWJlciwgZGV2Zm4pOworCXBhcmVudCA9IHNjYW5fT0ZfZm9yX3BjaV9idXMoYnVzKTsKKwlpZiAocGFyZW50ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOworCURCRygiIHBhcmVudCBpcyAlc1xuIiwgcGFyZW50ID8gcGFyZW50LT5mdWxsX25hbWUgOiAiPE5VTEw+Iik7CisJbnAgPSBzY2FuX09GX2Zvcl9wY2lfZGV2KHBhcmVudCwgZGV2Zm4pOworCW9mX25vZGVfcHV0KHBhcmVudCk7CisJREJHKCIgcmVzdWx0IGlzICVzXG4iLCBucCA/IG5wLT5mdWxsX25hbWUgOiAiPE5VTEw+Iik7CiAKLQkvKiBGaXh1cCBidXMgbnVtYmVyIGFjY29yZGluZyB0byB3aGF0IE9GIHRoaW5rIGl0IGlzLiAqLwotI2lmZGVmIENPTkZJR19QUENfUE1BQwotCS8qIFRoZSBHNSBuZWVkIGEgc3BlY2lhbCBjYXNlIGhlcmUuIEJhc2ljYWxseSwgd2UgZG9uJ3QgcmVtYXAgYWxsCi0JICogYnVzc2VzIG9uIGl0IHNvIHdlIGRvbid0IGNyZWF0ZSB0aGUgcGNpLU9GLW1hcC4gSG93ZXZlciwgd2UgZG8KLQkgKiByZW1hcCB0aGUgQUdQIGJ1cyBhbmQgc28gaGF2ZSB0byBkZWFsIHdpdGggaXQuIEEgZnV0dXJlIGJldHRlcgotCSAqIGZpeCBoYXMgdG8gYmUgZG9uZSBieSBtYWtpbmcgdGhlIHJlbWFwcGluZyBwZXItaG9zdCBhbmQgYWx3YXlzCi0JICogZmlsbGluZyB0aGUgcGNpX3RvX09GIG1hcC4gLS1CZW5ICisJLyogWFhYIG1vc3QgY2FsbGVycyBkb24ndCByZWxlYXNlIHRoZSByZXR1cm5lZCBub2RlCisJICogbW9zdGx5IGJlY2F1c2UgcHBjNjQgZG9lc24ndCBpbmNyZWFzZSB0aGUgcmVmY291bnQsCisJICogd2UgbmVlZCB0byBmaXggdGhhdC4KIAkgKi8KLQlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykgJiYgYnVzbnIgPj0gMHhmMCkKLQkJYnVzbnIgLT0gMHhmMDsKLQllbHNlCi0jZW5kaWYKLQlpZiAocGNpX3RvX09GX2J1c19tYXApCi0JCWJ1c25yID0gcGNpX3RvX09GX2J1c19tYXBbYnVzbnJdOwotCWlmIChidXNuciA9PSAweGZmKQotCQlyZXR1cm4gTlVMTDsKLQkKLQkvKiBOb3csIGxvb2t1cCBjaGlsZHMgb2YgdGhlIGhvc2UgKi8KLQlyZXR1cm4gc2Nhbl9PRl9jaGlsZHNfZm9yX2RldmljZShub2RlLT5jaGlsZCwgYnVzbnIsIGRldmZuKTsKKwlyZXR1cm4gbnA7CiB9CiBFWFBPUlRfU1lNQk9MKHBjaV9idXNkZXZfdG9fT0Zfbm9kZSk7CiAKQEAgLTE1NDQsNyArMTU0Nyw3IEBACiAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqX19wY2lfbW1hcF9tYWtlX29mZnNldChzdHJ1Y3QgcGNpX2RldiAqZGV2LAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqb2Zmc2V0LAorCQkJCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90ICpvZmZzZXQsCiAJCQkJCSAgICAgICBlbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3NlKGRldi0+YnVzLT5udW1iZXIpOwpAQCAtMTU1Niw3ICsxNTU5LDkgQEAKIAogCS8qIElmIG1lbW9yeSwgYWRkIG9uIHRoZSBQQ0kgYnJpZGdlIGFkZHJlc3Mgb2Zmc2V0ICovCiAJaWYgKG1tYXBfc3RhdGUgPT0gcGNpX21tYXBfbWVtKSB7CisjaWYgMCAvKiBTZWUgY29tbWVudCBpbiBwY2lfcmVzb3VyY2VfdG9fdXNlcigpIGZvciB3aHkgdGhpcyBpcyBkaXNhYmxlZCAqLwogCQkqb2Zmc2V0ICs9IGhvc2UtPnBjaV9tZW1fb2Zmc2V0OworI2VuZGlmCiAJCXJlc19iaXQgPSBJT1JFU09VUkNFX01FTTsKIAl9IGVsc2UgewogCQlpb19vZmZzZXQgPSBob3NlLT5pb19iYXNlX3ZpcnQgLSAodm9pZCBfX2lvbWVtICopX0lPX0JBU0U7CkBAIC0xNjI0LDkgKzE2MjksNiBAQAogCWVsc2UKIAkJcHJvdCB8PSBfUEFHRV9HVUFSREVEOwogCi0JcHJpbnRrKCJQQ0kgbWFwIGZvciAlczolbGx4LCBwcm90OiAlbHhcbiIsIHBjaV9uYW1lKGRldiksCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpcnAtPnN0YXJ0LCBwcm90KTsKLQogCXJldHVybiBfX3BncHJvdChwcm90KTsKIH0KIApAQCAtMTY5NSw3ICsxNjk3LDcgQEAKIAkJCWVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwKIAkJCWludCB3cml0ZV9jb21iaW5lKQogewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCXJlc291cmNlX3NpemVfdCBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CiAJc3RydWN0IHJlc291cmNlICpycDsKIAlpbnQgcmV0OwogCkBAIC0xODA4LDIyICsxODEwLDQyIEBACiAJCQkgIHJlc291cmNlX3NpemVfdCAqc3RhcnQsIHJlc291cmNlX3NpemVfdCAqZW5kKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zZShkZXYtPmJ1cy0+bnVtYmVyKTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCA9IDA7CiAKIAlpZiAoaG9zZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlpZiAocnNyYy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQotCQlvZmZzZXQgPSAodm9pZCBfX2lvbWVtICopX0lPX0JBU0UgLSBob3NlLT5pb19iYXNlX3ZpcnQKLQkJCSsgaG9zZS0+aW9fYmFzZV9waHlzOworCQlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBfSU9fQkFTRTsKIAotCSpzdGFydCA9IHJzcmMtPnN0YXJ0ICsgb2Zmc2V0OwotCSplbmQgPSByc3JjLT5lbmQgKyBvZmZzZXQ7CisJLyogV2UgcGFzcyBhIGZ1bGx5IGZpeGVkIHVwIGFkZHJlc3MgdG8gdXNlcmxhbmQgZm9yIE1NSU8gaW5zdGVhZCBvZgorCSAqIGEgQkFSIHZhbHVlIGJlY2F1c2UgWCBpcyBsYW1lIGFuZCBleHBlY3RzIHRvIGJlIGFibGUgdG8gdXNlIHRoYXQKKwkgKiB0byBwYXNzIHRvIC9kZXYvbWVtICEKKwkgKgorCSAqIFRoYXQgbWVhbnMgdGhhdCB3ZSdsbCBoYXZlIHBvdGVudGlhbGx5IDY0IGJpdHMgdmFsdWVzIHdoZXJlIHNvbWUKKwkgKiB1c2VybGFuZCBhcHBzIG9ubHkgZXhwZWN0IDMyIChsaWtlIFggaXRzZWxmIHNpbmNlIGl0IHRoaW5rcyBvbmx5CisJICogU3BhcmMgaGFzIDY0IGJpdHMgTU1JTykgYnV0IGlmIHdlIGRvbid0IGRvIHRoYXQsIHdlIGJyZWFrIGl0IG9uCisJICogMzIgYml0cyBDSFJQcyA6LSgKKwkgKgorCSAqIEhvcGVmdWxseSwgdGhlIHN5c2ZzIGluc3RlcmZhY2UgaXMgaW1tdW5lIHRvIHRoYXQgZ3Vuay4gT25jZSBYCisJICogaGFzIGJlZW4gZml4ZWQgKGFuZCB0aGUgZml4IHNwcmVhZCBlbm91Z2gpLCB3ZSBjYW4gcmUtZW5hYmxlIHRoZQorCSAqIDIgbGluZXMgYmVsb3cgYW5kIHBhc3MgZG93biBhIEJBUiB2YWx1ZSB0byB1c2VybGFuZC4gSW4gdGhhdCBjYXNlCisJICogd2UnbGwgYWxzbyBoYXZlIHRvIHJlLWVuYWJsZSB0aGUgbWF0Y2hpbmcgY29kZSBpbgorCSAqIF9fcGNpX21tYXBfbWFrZV9vZmZzZXQoKS4KKwkgKgorCSAqIEJlbkguCisJICovCisjaWYgMAorCWVsc2UgaWYgKHJzcmMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCW9mZnNldCA9IGhvc2UtPnBjaV9tZW1fb2Zmc2V0OworI2VuZGlmCisKKwkqc3RhcnQgPSByc3JjLT5zdGFydCAtIG9mZnNldDsKKwkqZW5kID0gcnNyYy0+ZW5kIC0gb2Zmc2V0OwogfQogCi12b2lkIF9faW5pdAotcGNpX2luaXRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkgIGludCBmbGFncywgY2hhciAqbmFtZSkKK3ZvaWQgX19pbml0IHBjaV9pbml0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCisJCQkgICAgICByZXNvdXJjZV9zaXplX3QgZW5kLCBpbnQgZmxhZ3MsIGNoYXIgKm5hbWUpCiB7CiAJcmVzLT5zdGFydCA9IHN0YXJ0OwogCXJlcy0+ZW5kID0gZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggNmZhOWEwYS4uMDFmMThjNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC0zNjAsNiArMzYwLDcgQEAKIAlEQkcoIiAgICBjbGFzczogMHgleFxuIiwgZGV2LT5jbGFzcyk7CiAKIAlkZXYtPmN1cnJlbnRfc3RhdGUgPSA0OwkJLyogdW5rbm93biBwb3dlciBzdGF0ZSAqLworCWRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CiAKIAlpZiAoIXN0cmNtcCh0eXBlLCAicGNpIikgfHwgIXN0cmNtcCh0eXBlLCAicGNpZXgiKSkgewogCQkvKiBhIFBDSS1QQ0kgYnJpZGdlICovCkBAIC02ODIsNyArNjgzLDcgQEAKICAqIFJldHVybnMgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB6ZXJvIG9uIHN1Y2Nlc3MuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKl9fcGNpX21tYXBfbWFrZV9vZmZzZXQoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm9mZnNldCwKKwkJCQkJICAgICAgIHJlc291cmNlX3NpemVfdCAqb2Zmc2V0LAogCQkJCQkgICAgICAgZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChkZXYtPmJ1cyk7CkBAIC02OTQsNyArNjk1LDkgQEAKIAogCS8qIElmIG1lbW9yeSwgYWRkIG9uIHRoZSBQQ0kgYnJpZGdlIGFkZHJlc3Mgb2Zmc2V0ICovCiAJaWYgKG1tYXBfc3RhdGUgPT0gcGNpX21tYXBfbWVtKSB7CisjaWYgMCAvKiBTZWUgY29tbWVudCBpbiBwY2lfcmVzb3VyY2VfdG9fdXNlcigpIGZvciB3aHkgdGhpcyBpcyBkaXNhYmxlZCAqLwogCQkqb2Zmc2V0ICs9IGhvc2UtPnBjaV9tZW1fb2Zmc2V0OworI2VuZGlmCiAJCXJlc19iaXQgPSBJT1JFU09VUkNFX01FTTsKIAl9IGVsc2UgewogCQlpb19vZmZzZXQgPSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBwY2lfaW9fYmFzZTsKQEAgLTc2Miw5ICs3NjUsNiBAQAogCWVsc2UKIAkJcHJvdCB8PSBfUEFHRV9HVUFSREVEOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIlBDSSBtYXAgZm9yICVzOiVseCwgcHJvdDogJWx4XG4iLCBwY2lfbmFtZShkZXYpLCBycC0+c3RhcnQsCi0JICAgICAgIHByb3QpOwotCiAJcmV0dXJuIF9fcGdwcm90KHByb3QpOwogfQogCkBAIC04MzIsNyArODMyLDcgQEAKIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLCBpbnQgd3JpdGVfY29tYmluZSkKIHsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwogCXN0cnVjdCByZXNvdXJjZSAqcnA7CiAJaW50IHJldDsKIApAQCAtMTMzMywyMCArMTMzMyw0MSBAQAogCiB2b2lkIHBjaV9yZXNvdXJjZV90b191c2VyKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsCiAJCQkgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcnNyYywKLQkJCSAgdTY0ICpzdGFydCwgdTY0ICplbmQpCisJCQkgIHJlc291cmNlX3NpemVfdCAqc3RhcnQsIHJlc291cmNlX3NpemVfdCAqZW5kKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChkZXYtPmJ1cyk7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOworCXJlc291cmNlX3NpemVfdCBvZmZzZXQgPSAwOwogCiAJaWYgKGhvc2UgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJaWYgKHJzcmMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKLQkJb2Zmc2V0ID0gcGNpX2lvX2Jhc2UgLSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgKwotCQkJaG9zZS0+aW9fYmFzZV9waHlzOworCQlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBwY2lfaW9fYmFzZTsKIAotCSpzdGFydCA9IHJzcmMtPnN0YXJ0ICsgb2Zmc2V0OwotCSplbmQgPSByc3JjLT5lbmQgKyBvZmZzZXQ7CisJLyogV2UgcGFzcyBhIGZ1bGx5IGZpeGVkIHVwIGFkZHJlc3MgdG8gdXNlcmxhbmQgZm9yIE1NSU8gaW5zdGVhZCBvZgorCSAqIGEgQkFSIHZhbHVlIGJlY2F1c2UgWCBpcyBsYW1lIGFuZCBleHBlY3RzIHRvIGJlIGFibGUgdG8gdXNlIHRoYXQKKwkgKiB0byBwYXNzIHRvIC9kZXYvbWVtICEKKwkgKgorCSAqIFRoYXQgbWVhbnMgdGhhdCB3ZSdsbCBoYXZlIHBvdGVudGlhbGx5IDY0IGJpdHMgdmFsdWVzIHdoZXJlIHNvbWUKKwkgKiB1c2VybGFuZCBhcHBzIG9ubHkgZXhwZWN0IDMyIChsaWtlIFggaXRzZWxmIHNpbmNlIGl0IHRoaW5rcyBvbmx5CisJICogU3BhcmMgaGFzIDY0IGJpdHMgTU1JTykgYnV0IGlmIHdlIGRvbid0IGRvIHRoYXQsIHdlIGJyZWFrIGl0IG9uCisJICogMzIgYml0cyBDSFJQcyA6LSgKKwkgKgorCSAqIEhvcGVmdWxseSwgdGhlIHN5c2ZzIGluc3RlcmZhY2UgaXMgaW1tdW5lIHRvIHRoYXQgZ3Vuay4gT25jZSBYCisJICogaGFzIGJlZW4gZml4ZWQgKGFuZCB0aGUgZml4IHNwcmVhZCBlbm91Z2gpLCB3ZSBjYW4gcmUtZW5hYmxlIHRoZQorCSAqIDIgbGluZXMgYmVsb3cgYW5kIHBhc3MgZG93biBhIEJBUiB2YWx1ZSB0byB1c2VybGFuZC4gSW4gdGhhdCBjYXNlCisJICogd2UnbGwgYWxzbyBoYXZlIHRvIHJlLWVuYWJsZSB0aGUgbWF0Y2hpbmcgY29kZSBpbgorCSAqIF9fcGNpX21tYXBfbWFrZV9vZmZzZXQoKS4KKwkgKgorCSAqIEJlbkguCisJICovCisjaWYgMAorCWVsc2UgaWYgKHJzcmMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCW9mZnNldCA9IGhvc2UtPnBjaV9tZW1fb2Zmc2V0OworI2VuZGlmCisKKwkqc3RhcnQgPSByc3JjLT5zdGFydCAtIG9mZnNldDsKKwkqZW5kID0gcnNyYy0+ZW5kIC0gb2Zmc2V0OwogfQogCiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIqIHBjaV9maW5kX2hvc2VfZm9yX09GX2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUpCkBAIC0xNDA5LDcgKzE0MzAsNyBAQAogCiAJZm9yIChsbiA9IHBjaV9yb290X2J1c2VzLm5leHQ7IGxuICE9ICZwY2lfcm9vdF9idXNlczsgbG4gPSBsbi0+bmV4dCkgewogCQlidXMgPSBwY2lfYnVzX2IobG4pOwotCQlpZiAoaW5fYnVzID49IGJ1cy0+bnVtYmVyICYmIGluX2J1cyA8IChidXMtPm51bWJlciArIGJ1cy0+c3Vib3JkaW5hdGUpKQorCQlpZiAoaW5fYnVzID49IGJ1cy0+bnVtYmVyICYmIGluX2J1cyA8PSBidXMtPnN1Ym9yZGluYXRlKQogCQkJYnJlYWs7CiAJCWJ1cyA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKaW5kZXggOTE3OWYwNy4uOTU3NzZiNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIGV4dGVybiBsb25nICppbnRlcmNlcHRfdGFibGU7CiBFWFBPUlRfU1lNQk9MKGludGVyY2VwdF90YWJsZSk7CiAjZW5kaWYgLyogQ09ORklHX1BQQ19TVERfTU1VXzMyICovCi0jaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0RDUl9OQVRJVkUKIEVYUE9SVF9TWU1CT0woX19tdGRjcik7CiBFWFBPUlRfU1lNQk9MKF9fbWZkY3IpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2NfcHBjNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY19wcGM2NC5jCmluZGV4IGY1OThjYjUuLmRkNzAwMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY19wcGM2NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY19wcGM2NC5jCkBAIC04Myw3ICs4Myw3IEBACiBzdGF0aWMgbG9mZl90IHBhZ2VfbWFwX3NlZWsoIHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQogewogCWxvZmZfdCBuZXc7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAogCXN3aXRjaCh3aGVuY2UpIHsKIAljYXNlIDA6CkBAIC0xMDYsMTMgKzEwNiwxMyBAQAogc3RhdGljIHNzaXplX3QgcGFnZV9tYXBfcmVhZCggc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCiAJCQkgICAgICBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIGRwLT5kYXRhLCBkcC0+c2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQgcGFnZV9tYXBfbW1hcCggc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hICkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCiAJaWYgKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4gZHAtPnNpemUpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCBjMThkYmU3Li4xZmM3MzJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtODA0LDYgKzgwNCw1NiBAQAogCXJldHVybiBvZl9yZWFkX3Vsb25nKHAsIHMpOwogfQogCisjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCisvKgorICogSW50ZXJwcmV0IHRoZSBpYm0sZHluYW1pYy1tZW1vcnkgcHJvcGVydHkgaW4gdGhlCisgKiAvaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSBub2RlLgorICogVGhpcyBjb250YWlucyBhIGxpc3Qgb2YgbWVtb3J5IGJsb2NrcyBhbG9uZyB3aXRoIE5VTUEgYWZmaW5pdHkKKyAqIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fZHJjb25mX21lbW9yeSh1bnNpZ25lZCBsb25nIG5vZGUpCit7CisJY2VsbF90ICpkbSwgKmxzOworCXVuc2lnbmVkIGxvbmcgbCwgbjsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemUsIGxtYl9zaXplLCBmbGFnczsKKworCWxzID0gKGNlbGxfdCAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImlibSxsbWItc2l6ZSIsICZsKTsKKwlpZiAobHMgPT0gTlVMTCB8fCBsIDwgZHRfcm9vdF9zaXplX2NlbGxzICogc2l6ZW9mKGNlbGxfdCkpCisJCXJldHVybiAwOworCWxtYl9zaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZscyk7CisKKwlkbSA9IChjZWxsX3QgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJpYm0sZHluYW1pYy1tZW1vcnkiLCAmbCk7CisJaWYgKGRtID09IE5VTEwgfHwgbCA8IHNpemVvZihjZWxsX3QpKQorCQlyZXR1cm4gMDsKKworCW4gPSAqZG0rKzsJLyogbnVtYmVyIG9mIGVudHJpZXMgKi8KKwlpZiAobCA8IChuICogKGR0X3Jvb3RfYWRkcl9jZWxscyArIDQpICsgMSkgKiBzaXplb2YoY2VsbF90KSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKDsgbiAhPSAwOyAtLW4pIHsKKwkJYmFzZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9hZGRyX2NlbGxzLCAmZG0pOworCQlmbGFncyA9IGRtWzNdOworCQkvKiBza2lwIERSQyBpbmRleCwgcGFkLCBhc3NvYy4gbGlzdCBpbmRleCwgZmxhZ3MgKi8KKwkJZG0gKz0gNDsKKwkJLyogc2tpcCB0aGlzIGJsb2NrIGlmIHRoZSByZXNlcnZlZCBiaXQgaXMgc2V0IGluIGZsYWdzICgweDgwKQorCQkgICBvciBpZiB0aGUgYmxvY2sgaXMgbm90IGFzc2lnbmVkIHRvIHRoaXMgcGFydGl0aW9uICgweDgpICovCisJCWlmICgoZmxhZ3MgJiAweDgwKSB8fCAhKGZsYWdzICYgMHg4KSkKKwkJCWNvbnRpbnVlOworCQlzaXplID0gbG1iX3NpemU7CisJCWlmIChpb21tdV9pc19vZmYpIHsKKwkJCWlmIChiYXNlID49IDB4ODAwMDAwMDB1bCkKKwkJCQljb250aW51ZTsKKwkJCWlmICgoYmFzZSArIHNpemUpID4gMHg4MDAwMDAwMHVsKQorCQkJCXNpemUgPSAweDgwMDAwMDAwdWwgLSBiYXNlOworCQl9CisJCWxtYl9hZGQoYmFzZSwgc2l6ZSk7CisJfQorCWxtYl9kdW1wX2FsbCgpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgZWFybHlfaW5pdF9kdF9zY2FuX2RyY29uZl9tZW1vcnkobm9kZSkJMAorI2VuZGlmIC8qIENPTkZJR19QUENfUFNFUklFUyAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwKIAkJCQkJICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCkBAIC04MTIsNiArODYyLDExIEBACiAJY2VsbF90ICpyZWcsICplbmRwOwogCXVuc2lnbmVkIGxvbmcgbDsKIAorCS8qIExvb2sgZm9yIHRoZSBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IG5vZGUgKi8KKwlpZiAoZGVwdGggPT0gMSAmJgorCSAgICBzdHJjbXAodW5hbWUsICJpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IikgPT0gMCkKKwkJcmV0dXJuIGVhcmx5X2luaXRfZHRfc2Nhbl9kcmNvbmZfbWVtb3J5KG5vZGUpOworCiAJLyogV2UgYXJlIHNjYW5uaW5nICJtZW1vcnkiIG5vZGVzIG9ubHkgKi8KIAlpZiAodHlwZSA9PSBOVUxMKSB7CiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCA0NmNmMzI2Li41MjBlZjQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTY3OSw3ICs2NzksNyBAQAogCS8qIG9wdGlvbiB2ZWN0b3IgNTogUEFQUi9PRiBvcHRpb25zICovCiAJMyAtIDIsCQkJCS8qIGxlbmd0aCAqLwogCTAsCQkJCS8qIGRvbid0IGlnbm9yZSwgZG9uJ3QgaGFsdCAqLwotCU9WNV9MUEFSIHwgT1Y1X1NQTFBBUiB8IE9WNV9MQVJHRV9QQUdFUywKKwlPVjVfTFBBUiB8IE9WNV9TUExQQVIgfCBPVjVfTEFSR0VfUEFHRVMgfCBPVjVfRFJDT05GX01FTU9SWSwKIH07CiAKIC8qIE9sZCBtZXRob2QgLSBFTEYgaGVhZGVyIHdpdGggUFRfTk9URSBzZWN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYwppbmRleCAwZGZiZTFjLi4xMmM1MWU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYwpAQCAtOTIwLDkgKzkyMCwyMCBAQAogCiAJLyoKIAkgKiBPbGQgbWFjaGluZXMganVzdCBoYXZlIGEgbGlzdCBvZiBpbnRlcnJ1cHQgbnVtYmVycwotCSAqIGFuZCBubyBpbnRlcnJ1cHQtY29udHJvbGxlciBub2Rlcy4KKwkgKiBhbmQgbm8gaW50ZXJydXB0LWNvbnRyb2xsZXIgbm9kZXMuIFdlIGFsc28gaGF2ZSBkb2RneQorCSAqIGNhc2VzIHdoZXJlIHRoZSBBUFBMLGludGVycnVwdHMgcHJvcGVydHkgaXMgY29tcGxldGVseQorCSAqIG1pc3NpbmcgYmVoaW5kIHBjaS1wY2kgYnJpZGdlcyBhbmQgd2UgaGF2ZSB0byBnZXQgaXQKKwkgKiBmcm9tIHRoZSBwYXJlbnQgKHRoZSBicmlkZ2UgaXRzZWxmLCBhcyBhcHBsZSBqdXN0IHdpcmVkCisJICogZXZlcnl0aGluZyB0b2dldGhlciBvbiB0aGVzZSkKIAkgKi8KLQlpbnRzID0gZ2V0X3Byb3BlcnR5KGRldmljZSwgIkFBUEwsaW50ZXJydXB0cyIsICZpbnRsZW4pOworCXdoaWxlIChkZXZpY2UpIHsKKwkJaW50cyA9IGdldF9wcm9wZXJ0eShkZXZpY2UsICJBQVBMLGludGVycnVwdHMiLCAmaW50bGVuKTsKKwkJaWYgKGludHMgIT0gTlVMTCkKKwkJCWJyZWFrOworCQlkZXZpY2UgPSBkZXZpY2UtPnBhcmVudDsKKwkJaWYgKGRldmljZSAmJiBzdHJjbXAoZGV2aWNlLT50eXBlLCAicGNpIikgIT0gMCkKKwkJCWJyZWFrOworCX0KIAlpZiAoaW50cyA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpbnRsZW4gLz0gc2l6ZW9mKHUzMik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCmluZGV4IDM4N2VkMGQuLjc2YjVkN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCkBAIC0zMDMsNiArMzAzLDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKHJ0YXNfdG9rZW4pOwogCitpbnQgcnRhc19zZXJ2aWNlX3ByZXNlbnQoY29uc3QgY2hhciAqc2VydmljZSkKK3sKKwlyZXR1cm4gcnRhc190b2tlbihzZXJ2aWNlKSAhPSBSVEFTX1VOS05PV05fU0VSVklDRTsKK30KK0VYUE9SVF9TWU1CT0wocnRhc19zZXJ2aWNlX3ByZXNlbnQpOworCiAjaWZkZWYgQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORwogLyoKICAqIFJldHVybiB0aGUgZmlybXdhcmUtc3BlY2lmaWVkIHNpemUgb2YgdGhlIGVycm9yIGxvZyBidWZmZXIKQEAgLTgxMCwzMiArODE2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotLyogVGhpcyB2ZXJzaW9uIGNhbid0IHRha2UgdGhlIHNwaW5sb2NrLCBiZWNhdXNlIGl0IG5ldmVyIHJldHVybnMgKi8KLXN0YXRpYyBzdHJ1Y3QgcnRhc19hcmdzIHJ0YXNfc3RvcF9zZWxmX2FyZ3MgPSB7Ci0JLyogVGhlIHRva2VuIGlzIGluaXRpYWxpemVkIGZvciByZWFsIGluIHNldHVwX3N5c3RlbSgpICovCi0JLnRva2VuID0gUlRBU19VTktOT1dOX1NFUlZJQ0UsCi0JLm5hcmdzID0gMCwKLQkubnJldCA9IDEsCi0JLnJldHMgPSAmcnRhc19zdG9wX3NlbGZfYXJncy5hcmdzWzBdLAotfTsKLQotdm9pZCBydGFzX3N0b3Bfc2VsZih2b2lkKQotewotCXN0cnVjdCBydGFzX2FyZ3MgKnJ0YXNfYXJncyA9ICZydGFzX3N0b3Bfc2VsZl9hcmdzOwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCUJVR19PTihydGFzX2FyZ3MtPnRva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKTsKLQotCXByaW50aygiY3B1ICV1IChod2lkICV1KSBSZWFkeSB0byBkaWUuLi5cbiIsCi0JICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwotCWVudGVyX3J0YXMoX19wYShydGFzX2FyZ3MpKTsKLQotCXBhbmljKCJBbGFzLCBJIHN1cnZpdmVkLlxuIik7Ci19Ci0jZW5kaWYKLQogLyoKICAqIENhbGwgZWFybHkgZHVyaW5nIGJvb3QsIGJlZm9yZSBtZW0gaW5pdCBvciBib290bWVtLCB0byByZXRyaWV2ZSB0aGUgUlRBUwogICogaW5mb3JtYXRpb25zIGZyb20gdGhlIGRldmljZS10cmVlIGFuZCBhbGxvY2F0ZSB0aGUgUk1PIGJ1ZmZlciBmb3IgdXNlcmxhbmQKQEAgLTg4MCw5ICs4NjAsNiBAQAogI2VuZGlmCiAJcnRhc19ybW9fYnVmID0gbG1iX2FsbG9jX2Jhc2UoUlRBU19STU9CVUZfTUFYLCBQQUdFX1NJWkUsIHJ0YXNfcmVnaW9uKTsKIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCXJ0YXNfc3RvcF9zZWxmX2FyZ3MudG9rZW4gPSBydGFzX3Rva2VuKCJzdG9wLXNlbGYiKTsKLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KICNpZmRlZiBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HCiAJcnRhc19sYXN0X2Vycm9yX3Rva2VuID0gcnRhc190b2tlbigicnRhcy1sYXN0LWVycm9yIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19mbGFzaC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMKaW5kZXggN2QwZjEzZi4uMGM0ZmNkMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogCiBzdGF0aWMgaW50IHJ0YXNfZmxhc2hfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBydGFzX3VwZGF0ZV9mbGFzaF90ICp1ZjsKIAkKIAl1ZiA9IChzdHJ1Y3QgcnRhc191cGRhdGVfZmxhc2hfdCAqKSBkcC0+ZGF0YTsKQEAgLTI1NSw3ICsyNTUsNyBAQAogc3RhdGljIHNzaXplX3QgcnRhc19mbGFzaF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IHJ0YXNfdXBkYXRlX2ZsYXNoX3QgKnVmOwogCWNoYXIgbXNnW1JUQVNfTVNHX01BWExFTl07CiAJaW50IG1zZ2xlbjsKQEAgLTI5OSw3ICsyOTksNyBAQAogc3RhdGljIHNzaXplX3QgcnRhc19mbGFzaF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IHJ0YXNfdXBkYXRlX2ZsYXNoX3QgKnVmOwogCWNoYXIgKnA7CiAJaW50IG5leHRfZnJlZTsKQEAgLTM5MSw3ICszOTEsNyBAQAogc3RhdGljIHNzaXplX3QgbWFuYWdlX2ZsYXNoX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgcnRhc19tYW5hZ2VfZmxhc2hfdCAqYXJnc19idWY7CiAJY2hhciBtc2dbUlRBU19NU0dfTUFYTEVOXTsKIAlpbnQgbXNnbGVuOwpAQCAtNDIxLDcgKzQyMSw3IEBACiBzdGF0aWMgc3NpemVfdCBtYW5hZ2VfZmxhc2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBydGFzX21hbmFnZV9mbGFzaF90ICphcmdzX2J1ZjsKIAljb25zdCBjaGFyIHJlamVjdF9zdHJbXSA9ICIwIjsKIAljb25zdCBjaGFyIGNvbW1pdF9zdHJbXSA9ICIxIjsKQEAgLTQ5Miw3ICs0OTIsNyBAQAogc3RhdGljIHNzaXplX3QgdmFsaWRhdGVfZmxhc2hfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBydGFzX3ZhbGlkYXRlX2ZsYXNoX3QgKmFyZ3NfYnVmOwogCWNoYXIgbXNnW1JUQVNfTVNHX01BWExFTl07CiAJaW50IG1zZ2xlbjsKQEAgLTUyMCw3ICs1MjAsNyBAQAogc3RhdGljIHNzaXplX3QgdmFsaWRhdGVfZmxhc2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgcnRhc192YWxpZGF0ZV9mbGFzaF90ICphcmdzX2J1ZjsKIAlpbnQgcmM7CiAKQEAgLTU2OSw3ICs1NjksNyBAQAogCiBzdGF0aWMgaW50IHZhbGlkYXRlX2ZsYXNoX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgcnRhc192YWxpZGF0ZV9mbGFzaF90ICphcmdzX2J1ZjsKIAogCWFyZ3NfYnVmID0gKHN0cnVjdCBydGFzX3ZhbGlkYXRlX2ZsYXNoX3QgKikgZHAtPmRhdGE7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCBlNGViZTFhLi42YjQwNWEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTgzNSwxMSArODM1LDIxIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG9sZF9jdHggIT0gTlVMTCkgeworCQlzdHJ1Y3QgbWNvbnRleHQgX191c2VyICptY3R4OworCisJCS8qCisJCSAqIG9sZF9jdHggbWlnaHQgbm90IGJlIDE2LWJ5dGUgYWxpZ25lZCwgaW4gd2hpY2gKKwkJICogY2FzZSBvbGRfY3R4LT51Y19tY29udGV4dCB3b24ndCBiZSBlaXRoZXIuCisJCSAqIEJlY2F1c2Ugd2UgaGF2ZSB0aGUgb2xkX2N0eC0+dWNfcGFkMiBmaWVsZAorCQkgKiBiZWZvcmUgb2xkX2N0eC0+dWNfbWNvbnRleHQsIHdlIG5lZWQgdG8gcm91bmQgZG93bgorCQkgKiBmcm9tICZvbGRfY3R4LT51Y19tY29udGV4dCB0byBhIDE2LWJ5dGUgYm91bmRhcnkuCisJCSAqLworCQltY3R4ID0gKHN0cnVjdCBtY29udGV4dCBfX3VzZXIgKikKKwkJCSgodW5zaWduZWQgbG9uZykgJm9sZF9jdHgtPnVjX21jb250ZXh0ICYgfjB4ZlVMKTsKIAkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvbGRfY3R4LCBzaXplb2YoKm9sZF9jdHgpKQotCQkgICAgfHwgc2F2ZV91c2VyX3JlZ3MocmVncywgJm9sZF9jdHgtPnVjX21jb250ZXh0LCAwKQorCQkgICAgfHwgc2F2ZV91c2VyX3JlZ3MocmVncywgbWN0eCwgMCkKIAkJICAgIHx8IHB1dF9zaWdzZXRfdCgmb2xkX2N0eC0+dWNfc2lnbWFzaywgJmN1cnJlbnQtPmJsb2NrZWQpCi0JCSAgICB8fCBfX3B1dF91c2VyKHRvX3VzZXJfcHRyKCZvbGRfY3R4LT51Y19tY29udGV4dCksCi0JCQkgICAgJm9sZF9jdHgtPnVjX3JlZ3MpKQorCQkgICAgfHwgX19wdXRfdXNlcih0b191c2VyX3B0cihtY3R4KSwgJm9sZF9jdHgtPnVjX3JlZ3MpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCWlmIChuZXdfY3R4ID09IE5VTEwpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwppbmRleCA5YjI4YzIzLi4wZThiZWNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCXJldHVybiAtRU5PU1lTOwogfQogCi1pbnQgX19kZXZpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCitpbnQgX19jcHVpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJaW50IGM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwppbmRleCA2M2VkMjY1Li40MDBhYjJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCkBAIC0xODEsNiArMTgxLDggQEAKIFNZU0ZTX1BNQ1NFVFVQKHBtYzcsIFNQUk5fUE1DNyk7CiBTWVNGU19QTUNTRVRVUChwbWM4LCBTUFJOX1BNQzgpOwogU1lTRlNfUE1DU0VUVVAocHVyciwgU1BSTl9QVVJSKTsKK1NZU0ZTX1BNQ1NFVFVQKHNwdXJyLCBTUFJOX1NQVVJSKTsKK1NZU0ZTX1BNQ1NFVFVQKGRzY3IsIFNQUk5fRFNDUik7CiAKIHN0YXRpYyBTWVNERVZfQVRUUihtbWNyMCwgMDYwMCwgc2hvd19tbWNyMCwgc3RvcmVfbW1jcjApOwogc3RhdGljIFNZU0RFVl9BVFRSKG1tY3IxLCAwNjAwLCBzaG93X21tY3IxLCBzdG9yZV9tbWNyMSk7CkBAIC0xOTQsNiArMTk2LDggQEAKIHN0YXRpYyBTWVNERVZfQVRUUihwbWM3LCAwNjAwLCBzaG93X3BtYzcsIHN0b3JlX3BtYzcpOwogc3RhdGljIFNZU0RFVl9BVFRSKHBtYzgsIDA2MDAsIHNob3dfcG1jOCwgc3RvcmVfcG1jOCk7CiBzdGF0aWMgU1lTREVWX0FUVFIocHVyciwgMDYwMCwgc2hvd19wdXJyLCBOVUxMKTsKK3N0YXRpYyBTWVNERVZfQVRUUihzcHVyciwgMDYwMCwgc2hvd19zcHVyciwgTlVMTCk7CitzdGF0aWMgU1lTREVWX0FUVFIoZHNjciwgMDYwMCwgc2hvd19kc2NyLCBzdG9yZV9kc2NyKTsKIAogc3RhdGljIHZvaWQgcmVnaXN0ZXJfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KQogewpAQCAtMjMxLDYgKzIzNSwxMiBAQAogCiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1BVUlIpKQogCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfcHVycik7CisKKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU1BVUlIpKQorCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfc3B1cnIpOworCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0RTQ1IpKQorCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfZHNjcik7CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKQEAgLTI3Miw2ICsyODIsMTIgQEAKIAogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9QVVJSKSkKIAkJc3lzZGV2X3JlbW92ZV9maWxlKHMsICZhdHRyX3B1cnIpOworCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NQVVJSKSkKKwkJc3lzZGV2X3JlbW92ZV9maWxlKHMsICZhdHRyX3NwdXJyKTsKKworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9EU0NSKSkKKwkJc3lzZGV2X3JlbW92ZV9maWxlKHMsICZhdHRyX2RzY3IpOwogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggMGQ0ZTIwMy4uNTM1ZjUwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC03MjcsNTQgKzcyOCw5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLS8qCi0gKiBMb29rIHRocm91Z2ggdGhlIGxpc3Qgb2YgdHJhcCBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgdXNlZCBmb3IgQlVHKCksCi0gKiBCVUdfT04oKSBhbmQgV0FSTl9PTigpIGFuZCBzZWUgaWYgd2UgaGl0IG9uZS4gIEF0IHRoaXMgcG9pbnQgd2Uga25vdwotICogdGhhdCB0aGUgZXhjZXB0aW9uIHdhcyBjYXVzZWQgYnkgYSB0cmFwIGluc3RydWN0aW9uIG9mIHNvbWUga2luZC4KLSAqIFJldHVybnMgMSBpZiB3ZSBzaG91bGQgY29udGludWUgKGkuZS4gaXQgd2FzIGEgV0FSTl9PTikgb3IgMAotICogb3RoZXJ3aXNlLgotICovCi1leHRlcm4gc3RydWN0IGJ1Z19lbnRyeSBfX3N0YXJ0X19fYnVnX3RhYmxlW10sIF9fc3RvcF9fX2J1Z190YWJsZVtdOwotCi0jaWZuZGVmIENPTkZJR19NT0RVTEVTCi0jZGVmaW5lIG1vZHVsZV9maW5kX2J1Zyh4KQlOVUxMCi0jZW5kaWYKLQotc3RydWN0IGJ1Z19lbnRyeSAqZmluZF9idWcodW5zaWduZWQgbG9uZyBidWdhZGRyKQoraW50IGlzX3ZhbGlkX2J1Z2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCBidWdfZW50cnkgKmJ1ZzsKLQotCWZvciAoYnVnID0gX19zdGFydF9fX2J1Z190YWJsZTsgYnVnIDwgX19zdG9wX19fYnVnX3RhYmxlOyArK2J1ZykKLQkJaWYgKGJ1Z2FkZHIgPT0gYnVnLT5idWdfYWRkcikKLQkJCXJldHVybiBidWc7Ci0JcmV0dXJuIG1vZHVsZV9maW5kX2J1ZyhidWdhZGRyKTsKLX0KLQotc3RhdGljIGludCBjaGVja19idWdfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgYnVnX2VudHJ5ICpidWc7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCi0JaWYgKHJlZ3MtPm1zciAmIE1TUl9QUikKLQkJcmV0dXJuIDA7CS8qIG5vdCBpbiBrZXJuZWwgKi8KLQlhZGRyID0gcmVncy0+bmlwOwkvKiBhZGRyZXNzIG9mIHRyYXAgaW5zdHJ1Y3Rpb24gKi8KLQlpZiAoYWRkciA8IFBBR0VfT0ZGU0VUKQotCQlyZXR1cm4gMDsKLQlidWcgPSBmaW5kX2J1ZyhyZWdzLT5uaXApOwotCWlmIChidWcgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGJ1Zy0+bGluZSAmIEJVR19XQVJOSU5HX1RSQVApIHsKLQkJLyogdGhpcyBpcyBhIFdBUk5fT04gcmF0aGVyIHRoYW4gQlVHL0JVR19PTiAqLwotCQlwcmludGsoS0VSTl9FUlIgIkJhZG5lc3MgaW4gJXMgYXQgJXM6JWxkXG4iLAotCQkgICAgICAgYnVnLT5mdW5jdGlvbiwgYnVnLT5maWxlLAotCQkgICAgICAgYnVnLT5saW5lICYgfkJVR19XQVJOSU5HX1RSQVApOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXJldHVybiAxOwotCX0KLQlwcmludGsoS0VSTl9DUklUICJrZXJuZWwgQlVHIGluICVzIGF0ICVzOiVsZCFcbiIsCi0JICAgICAgIGJ1Zy0+ZnVuY3Rpb24sIGJ1Zy0+ZmlsZSwgYnVnLT5saW5lKTsKLQotCXJldHVybiAwOworCXJldHVybiBpc19rZXJuZWxfYWRkcihhZGRyKTsKIH0KIAogdm9pZCBfX2twcm9iZXMgcHJvZ3JhbV9jaGVja19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC03ODIsNiArNzM4LDggQEAKIAl1bnNpZ25lZCBpbnQgcmVhc29uID0gZ2V0X3JlYXNvbihyZWdzKTsKIAlleHRlcm4gaW50IGRvX21hdGhlbXUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCisJLyogV2UgY2FuIG5vdyBnZXQgaGVyZSB2aWEgYSBGUCBVbmF2YWlsYWJsZSBleGNlcHRpb24gaWYgdGhlIGNvcmUKKwkgKiBoYXMgbm8gRlBVLCBpbiB0aGF0IGNhc2Ugbm8gcmVhc29uIGZsYWdzIHdpbGwgYmUgc2V0ICovCiAjaWZkZWYgQ09ORklHX01BVEhfRU1VTEFUSU9OCiAJLyogKHJlYXNvbiAmIFJFQVNPTl9JTExFR0FMKSB3b3VsZCBiZSB0aGUgb2J2aW91cyB0aGluZyBoZXJlLAogCSAqIGJ1dCB0aGVyZSBzZWVtcyB0byBiZSBhIGhhcmR3YXJlIGJ1ZyBvbiB0aGUgNDA1R1AgKFJldkQpCkBAIC04MDgsNyArNzY2LDkgQEAKIAkJCXJldHVybjsKIAkJaWYgKGRlYnVnZ2VyX2JwdChyZWdzKSkKIAkJCXJldHVybjsKLQkJaWYgKGNoZWNrX2J1Z190cmFwKHJlZ3MpKSB7CisKKwkJaWYgKCEocmVncy0+bXNyICYgTVNSX1BSKSAmJiAgLyogbm90IHVzZXItbW9kZSAqLworCQkgICAgcmVwb3J0X2J1ZyhyZWdzLT5uaXApID09IEJVR19UUkFQX1RZUEVfV0FSTikgewogCQkJcmVncy0+bmlwICs9IDQ7CiAJCQlyZXR1cm47CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKaW5kZXggYTRiMjhjNy4uYWUwZWRlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMKQEAgLTI4NCw2ICsyODQsMTMgQEAKIAkgKiBwYWdlcyB0aG91Z2gKIAkgKi8KIAl2bWEtPnZtX2ZsYWdzID0gVk1fUkVBRHxWTV9FWEVDfFZNX01BWVJFQUR8Vk1fTUFZV1JJVEV8Vk1fTUFZRVhFQzsKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgdkRTTyBnZXRzIGludG8gZXZlcnkgY29yZSBkdW1wLgorCSAqIER1bXBpbmcgaXRzIGNvbnRlbnRzIG1ha2VzIHBvc3QtbW9ydGVtIGZ1bGx5IGludGVycHJldGFibGUgbGF0ZXIKKwkgKiB3aXRob3V0IG1hdGNoaW5nIHVwIHRoZSBzYW1lIGtlcm5lbCBhbmQgaGFyZHdhcmUgY29uZmlnIHRvIHNlZQorCSAqIHdoYXQgUEMgdmFsdWVzIG1lYW50LgorCSAqLworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fQUxXQVlTRFVNUDsKIAl2bWEtPnZtX2ZsYWdzIHw9IG1tLT5kZWZfZmxhZ3M7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSBwcm90ZWN0aW9uX21hcFt2bWEtPnZtX2ZsYWdzICYgMHg3XTsKIAl2bWEtPnZtX29wcyA9ICZ2ZHNvX3Ztb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDA0Yjk4NjcuLjA0YjhlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTYyLDExICs2Miw3IEBACiAJCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKIAl9CiAKLQlfX2J1Z190YWJsZSA6IHsKLQkJX19zdGFydF9fX2J1Z190YWJsZSA9IC47Ci0JCSooX19idWdfdGFibGUpCi0JCV9fc3RvcF9fX2J1Z190YWJsZSA9IC47Ci0JfQorCUJVR19UQUJMRQogCiAvKgogICogSW5pdCBzZWN0aW9ucyBkaXNjYXJkZWQgYXQgcnVudGltZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCA4OWM4MzZkLi4xYmIyMGQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtNzQ0LDcgKzc0NCw4IEBACiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKIAl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7Ci0JaWYgKCF2bWEgfHwgKChhZGRyICsgbGVuKSA8PSB2bWEtPnZtX3N0YXJ0KSkKKwlpZiAoVEFTS19TSVpFIC0gbGVuID49IGFkZHIgJiYKKwkgICAgKCF2bWEgfHwgKChhZGRyICsgbGVuKSA8PSB2bWEtPnZtX3N0YXJ0KSkpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC1FTk9NRU07CkBAIC04MTUsNiArODE2LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGxlbiAmIH5IUEFHRV9NQVNLKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobGVuID4gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmICghY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfMTZNX1BBR0UpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgyMyw5ICs4MjYsNiBAQAogCUJVR19PTigoYWRkciArIGxlbikgIDwgYWRkcik7CiAKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSB7Ci0JCS8qIFBhcmFub2lhLCBjYWxsZXIgc2hvdWxkIGhhdmUgZGVhbHQgd2l0aCB0aGlzICovCi0JCUJVR19PTigoYWRkciArIGxlbikgPiAweDEwMDAwMDAwMFVMKTsKLQogCQljdXJhcmVhcyA9IGN1cnJlbnQtPm1tLT5jb250ZXh0Lmxvd19odGxiX2FyZWFzOwogCiAJCS8qIEZpcnN0IHNlZSBpZiB3ZSBjYW4gdXNlIHRoZSBoaW50IGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbWFsbG9jLmMgYi9hcmNoL3Bvd2VycGMvbW0vaW1hbGxvYy5jCmluZGV4IGFkZDhjMWEuLmM4MzE4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbWFsbG9jLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ltYWxsb2MuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJc3RydWN0IHZtX3N0cnVjdCAqdm0yID0gTlVMTDsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICpuZXdfdm0gPSBOVUxMOwogCQotCXZtMSA9IChzdHJ1Y3Qgdm1fc3RydWN0ICopIGttYWxsb2Moc2l6ZW9mKCp2bTEpLCBHRlBfS0VSTkVMKTsKKwl2bTEgPSBrbWFsbG9jKHNpemVvZigqdm0xKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHZtMQk9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQkgKiB1cHBlcm1vc3QgcmVtYWluZGVyLCBhbmQgdXNlIGV4aXN0aW5nIHBhcmVudCBvbmUgZm9yIHRoZQogCQkgKiBsb3dlciByZW1haW5kZXIgb2YgcGFyZW50IHJhbmdlCiAJCSAqLwotCQl2bTIgPSAoc3RydWN0IHZtX3N0cnVjdCAqKSBrbWFsbG9jKHNpemVvZigqdm0yKSwgR0ZQX0tFUk5FTCk7CisJCXZtMiA9IGttYWxsb2Moc2l6ZW9mKCp2bTIpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHZtMiA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKIAkJCWtmcmVlKHZtMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJCWJyZWFrOwogCX0KIAkKLQlhcmVhID0gKHN0cnVjdCB2bV9zdHJ1Y3QgKikga21hbGxvYyhzaXplb2YoKmFyZWEpLCBHRlBfS0VSTkVMKTsKKwlhcmVhID0ga21hbGxvYyhzaXplb2YoKmFyZWEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFyZWEpCiAJCXJldHVybiBOVUxMOwogCWFyZWEtPmZsYWdzID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IDlkYTAxZGMuLjI2Mjc5MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtMjk1LDYgKzI5NSw2MyBAQAogCXJldHVybiBsbWJfZW5kX29mX0RSQU0oKSAtIHN0YXJ0OwogfQogCisvKgorICogRXh0cmFjdCBOVU1BIGluZm9ybWF0aW9uIGZyb20gdGhlIGlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkKKyAqIG5vZGUuICBUaGlzIGFzc3VtZXMgbl9tZW1fe2FkZHIsc2l6ZX1fY2VsbHMgaGF2ZSBiZWVuIHNldC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHBhcnNlX2RyY29uZl9tZW1vcnkoc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkpCit7CisJY29uc3QgdW5zaWduZWQgaW50ICpsbSwgKmRtLCAqYWE7CisJdW5zaWduZWQgaW50IGxzLCBsZCwgbGE7CisJdW5zaWduZWQgaW50IG4sIGFhbSwgYWFsZW47CisJdW5zaWduZWQgbG9uZyBsbWJfc2l6ZSwgc2l6ZTsKKwlpbnQgbmlkLCBkZWZhdWx0X25pZCA9IDA7CisJdW5zaWduZWQgaW50IHN0YXJ0LCBhaSwgZmxhZ3M7CisKKwlsbSA9IGdldF9wcm9wZXJ0eShtZW1vcnksICJpYm0sbG1iLXNpemUiLCAmbHMpOworCWRtID0gZ2V0X3Byb3BlcnR5KG1lbW9yeSwgImlibSxkeW5hbWljLW1lbW9yeSIsICZsZCk7CisJYWEgPSBnZXRfcHJvcGVydHkobWVtb3J5LCAiaWJtLGFzc29jaWF0aXZpdHktbG9va3VwLWFycmF5cyIsICZsYSk7CisJaWYgKCFsbSB8fCAhZG0gfHwgIWFhIHx8CisJICAgIGxzIDwgc2l6ZW9mKHVuc2lnbmVkIGludCkgfHwgbGQgPCBzaXplb2YodW5zaWduZWQgaW50KSB8fAorCSAgICBsYSA8IDIgKiBzaXplb2YodW5zaWduZWQgaW50KSkKKwkJcmV0dXJuOworCisJbG1iX3NpemUgPSByZWFkX25fY2VsbHMobl9tZW1fc2l6ZV9jZWxscywgJmxtKTsKKwluID0gKmRtKys7CQkvKiBudW1iZXIgb2YgTE1CcyAqLworCWFhbSA9ICphYSsrOwkJLyogbnVtYmVyIG9mIGFzc29jaWF0aXZpdHkgbGlzdHMgKi8KKwlhYWxlbiA9ICphYSsrOwkJLyogbGVuZ3RoIG9mIGVhY2ggYXNzb2NpYXRpdml0eSBsaXN0ICovCisJaWYgKGxkIDwgKG4gKiAobl9tZW1fYWRkcl9jZWxscyArIDQpICsgMSkgKiBzaXplb2YodW5zaWduZWQgaW50KSB8fAorCSAgICBsYSA8IChhYW0gKiBhYWxlbiArIDIpICogc2l6ZW9mKHVuc2lnbmVkIGludCkpCisJCXJldHVybjsKKworCWZvciAoOyBuICE9IDA7IC0tbikgeworCQlzdGFydCA9IHJlYWRfbl9jZWxscyhuX21lbV9hZGRyX2NlbGxzLCAmZG0pOworCQlhaSA9IGRtWzJdOworCQlmbGFncyA9IGRtWzNdOworCQlkbSArPSA0OworCQkvKiAweDgwID09IHJlc2VydmVkLCAweDggPSBhc3NpZ25lZCB0byB1cyAqLworCQlpZiAoKGZsYWdzICYgMHg4MCkgfHwgIShmbGFncyAmIDB4OCkpCisJCQljb250aW51ZTsKKwkJbmlkID0gZGVmYXVsdF9uaWQ7CisJCS8qIGZsYWdzICYgMHg0MCBtZWFucyBhc3NvY2lhdGl2aXR5IGluZGV4IGlzIGludmFsaWQgKi8KKwkJaWYgKG1pbl9jb21tb25fZGVwdGggPiAwICYmIG1pbl9jb21tb25fZGVwdGggPD0gYWFsZW4gJiYKKwkJICAgIChmbGFncyAmIDB4NDApID09IDAgJiYgYWkgPCBhYW0pIHsKKwkJCS8qIHRoaXMgaXMgbGlrZSBvZl9ub2RlX3RvX25pZF9zaW5nbGUgKi8KKwkJCW5pZCA9IGFhW2FpICogYWFsZW4gKyBtaW5fY29tbW9uX2RlcHRoIC0gMV07CisJCQlpZiAobmlkID09IDB4ZmZmZiB8fCBuaWQgPj0gTUFYX05VTU5PREVTKQorCQkJCW5pZCA9IGRlZmF1bHRfbmlkOworCQl9CisJCW5vZGVfc2V0X29ubGluZShuaWQpOworCisJCXNpemUgPSBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHN0YXJ0LCBsbWJfc2l6ZSk7CisJCWlmICghc2l6ZSkKKwkJCWNvbnRpbnVlOworCisJCWFkZF9hY3RpdmVfcmFuZ2UobmlkLCBzdGFydCA+PiBQQUdFX1NISUZULAorCQkJCSAoc3RhcnQgPj4gUEFHRV9TSElGVCkgKyAoc2l6ZSA+PiBQQUdFX1NISUZUKSk7CisJfQorfQorCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9udW1hX3Byb3BlcnRpZXModm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSA9IE5VTEw7CkBAIC0zODUsNiArNDQyLDE0IEBACiAJCQlnb3RvIG5ld19yYW5nZTsKIAl9CiAKKwkvKgorCSAqIE5vdyBkbyB0aGUgc2FtZSB0aGluZyBmb3IgZWFjaCBMTUIgbGlzdGVkIGluIHRoZSBpYm0sZHluYW1pYy1tZW1vcnkKKwkgKiBwcm9wZXJ0eSBpbiB0aGUgaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSBub2RlLgorCSAqLworCW1lbW9yeSA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSIpOworCWlmIChtZW1vcnkpCisJCXBhcnNlX2RyY29uZl9tZW1vcnkobWVtb3J5KTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzR4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80eHgvS2NvbmZpZwppbmRleCBlZDM5ZDZhLi4yZjJhMTNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzR4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNHh4L0tjb25maWcKQEAgLTE3OSw3ICsxNzksNyBAQAogIyBPQUsgZG9lc24ndCBleGlzdCBidXQgd2FudGVkIHRvIGtlZXAgdGhpcyBhcm91bmQgZm9yIGFueSBmdXR1cmUgNDAzR0NYIGJvYXJkcwogY29uZmlnIDQwM0dDWAogCWJvb2wKLQlkZXBlbmRzIE9BSworCWRlcGVuZHMgb24gT0FLCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyA0MDVFUApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L2xpdGU1MjAwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDAuYwppbmRleCBhMzc1YzE1Li4wZjIxYmFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbGl0ZTUyMDAuYwpAQCAtNDAsOCArNDAsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgotI2luY2x1ZGUgPGFzbS9xZS5oPgotI2luY2x1ZGUgPGFzbS9xZV9pYy5oPgogI2luY2x1ZGUgPGFzbS9vZl9wbGF0Zm9ybS5oPgogCiAjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KQEAgLTE1NSw2ICsxNTMsNyBAQAogCS5uYW1lIAkJPSAibGl0ZTUyeHgiLAogCS5wcm9iZSAJCT0gbGl0ZTUyeHhfcHJvYmUsCiAJLnNldHVwX2FyY2ggCT0gbGl0ZTUyeHhfc2V0dXBfYXJjaCwKKwkuaW5pdAkJPSBtcGM1Mnh4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcywKIAkuaW5pdF9JUlEgCT0gbXBjNTJ4eF9pbml0X2lycSwKIAkuZ2V0X2lycSAJPSBtcGM1Mnh4X2dldF9pcnEsCiAJLnNob3dfY3B1aW5mbwk9IGxpdGU1Mnh4X3Nob3dfY3B1aW5mbywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKaW5kZXggODMzMWZmNC4uY2M0MDg4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKQEAgLTExNiwxMSArMTE2LDEyIEBACiAJaWYgKHhsYikgaW91bm1hcCh4bGIpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdAordm9pZCBfX2luaXQKIG1wYzUyeHhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCiB7CiAJLyogRmluZCBldmVyeSBjaGlsZCBvZiB0aGUgU09DIG5vZGUgYW5kIGFkZCBpdCB0byBvZl9wbGF0Zm9ybSAqLwotCXJldHVybiBvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgTlVMTCwgTlVMTCk7CisJaWYgKG9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBOVUxMLCBOVUxMKSkKKwkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6ICIKKwkJCSJFcnJvciB3aGlsZSBwcm9iaW5nIG9mX3BsYXRmb3JtIGJ1c1xuIik7CiB9CiAKLWRldmljZV9pbml0Y2FsbChtcGM1Mnh4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X21kcy5jCmluZGV4IGY1OGM5NzguLjRkNDcxMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X21kcy5jCkBAIC0xMDMsNyArMTAzLDcgQEAKICNpZmRlZiBDT05GSUdfUVVJQ0NfRU5HSU5FCiAJcWVfcmVzZXQoKTsKIAotCWlmICgobnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShucCwgInBhcl9pbyIpKSAhPSBOVUxMKSB7CisJaWYgKChucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJwYXJfaW8iKSkgIT0gTlVMTCkgewogCQlwYXJfaW9faW5pdChucCk7CiAJCW9mX25vZGVfcHV0KG5wKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNjBlX3BiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2MGVfcGIuYwppbmRleCA3YmZkNDdhLi41M2I5MmE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2MGVfcGIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM2MGVfcGIuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAjaWZkZWYgQ09ORklHX1FVSUNDX0VOR0lORQogCXFlX3Jlc2V0KCk7CiAKLQlpZiAoKG5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUobnAsICJwYXJfaW8iKSkgIT0gTlVMTCkgeworCWlmICgobnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAicGFyX2lvIikpICE9IE5VTEwpIHsKIAkJcGFyX2lvX2luaXQobnApOwogCQlvZl9ub2RlX3B1dChucCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCmluZGV4IDQ0ZDk1ZWEuLjUwN2QxYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQpAQCAtNSw5ICs1LDkgQEAKIG9iai0kKENPTkZJR19QUENfUE1BQykJCSs9IHBvd2VybWFjLwogZW5kaWYKIGVuZGlmCitvYmotJChDT05GSUdfUFBDX01QQzUyeHgpCSs9IDUyeHgvCiBvYmotJChDT05GSUdfUFBDX0NIUlApCQkrPSBjaHJwLwogb2JqLSQoQ09ORklHXzR4eCkJCSs9IDR4eC8KLW9iai0kKENPTkZJR19QUENfTVBDNTJ4eCkJKz0gNTJ4eC8KIG9iai0kKENPTkZJR19QUENfODN4eCkJCSs9IDgzeHgvCiBvYmotJChDT05GSUdfUFBDXzg1eHgpCQkrPSA4NXh4Lwogb2JqLSQoQ09ORklHX1BQQ184Nnh4KQkJKz0gODZ4eC8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfdGhlcm1hbC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV90aGVybWFsLmMKaW5kZXggNjE2YTBhMy4uNzBlMGQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV90aGVybWFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV90aGVybWFsLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc3B1X2F0dHJpYnV0ZXNbXSA9IHsKIAkmYXR0cl9zcHVfdGVtcGVyYXR1cmUuYXR0ciwKKwlOVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc3B1X2F0dHJpYnV0ZV9ncm91cCA9IHsKQEAgLTEzNSw2ICsxMzYsNyBAQAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBwZV9hdHRyaWJ1dGVzW10gPSB7CiAJJmF0dHJfcHBlX3RlbXBlcmF0dXJlMC5hdHRyLAogCSZhdHRyX3BwZV90ZW1wZXJhdHVyZTEuYXR0ciwKKwlOVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcHBlX2F0dHJpYnV0ZV9ncm91cCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKaW5kZXggNTgwZDQyNS4uN2M3MzEyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKQEAgLTM3LDcgKzM3LDcgQEAKICAqLwogI2RlZmluZSBTUElERVJfRElTQUJMRV9QUkVGRVRDSAogCi0jZGVmaW5lIE1BWF9TUElERVJTCTIKKyNkZWZpbmUgTUFYX1NQSURFUlMJMwogCiBzdGF0aWMgc3RydWN0IHNwaWRlcl9wY2lfYnVzIHsKIAl2b2lkIF9faW9tZW0JKnJlZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcG11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcG11LmMKaW5kZXggOTljNjEyMC4uZDA0YWUxNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3BtdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9wbXUuYwpAQCAtMzgyLDExICszODIsMTQgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLWludCBfX2luaXQgY2JlX2luaXRfcG1faXJxKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjYmVfaW5pdF9wbV9pcnEodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCWludCByYywgbm9kZTsKIAorCWlmICghbWFjaGluZV9pcyhjZWxsKSkKKwkJcmV0dXJuIDA7CisKIAlmb3JfZWFjaF9ub2RlKG5vZGUpIHsKIAkJaXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKE5VTEwsIElJQ19JUlFfSU9FWF9QTUkgfAogCQkJCQkgICAgICAgKG5vZGUgPDwgSUlDX0lSUV9OT0RFX1NISUZUKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3ByaXYxX21taW8uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfcHJpdjFfbW1pby5jCmluZGV4IGE1ZGUwNDMuLjkxMGE5MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfcHJpdjFfbW1pby5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfcHJpdjFfbW1pby5jCkBAIC0zNyw4ICszNyw5IEBACiAjaW5jbHVkZSAiaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAic3B1X3ByaXYxX21taW8uaCIKIAorc3RhdGljIERFRklORV9NVVRFWChhZGRfc3B1bWVtX211dGV4KTsKKwogc3RydWN0IHNwdV9wZGF0YSB7Ci0JaW50IG5pZDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldm5vZGU7CiAJc3RydWN0IHNwdV9wcml2MSBfX2lvbWVtICpwcml2MTsKIH07CkBAIC01NiwyMCArNTcsOSBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChzcHVfZGV2bm9kZSk7CiAKLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfc3B1X25vZGVfaWQoc3RydWN0IGRldmljZV9ub2RlICpzcGUpCi17Ci0JY29uc3QgdW5zaWduZWQgaW50ICppZDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKLQljcHUgPSBzcGUtPnBhcmVudC0+cGFyZW50OwotCWlkID0gZ2V0X3Byb3BlcnR5KGNwdSwgIm5vZGUtaWQiLCBOVUxMKTsKLQlyZXR1cm4gaWQgPyAqaWQgOiAwOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBjZWxsX3NwdXByb3BfcHJlc2VudChzdHJ1Y3Qgc3B1ICpzcHUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqc3BlLAogCQljb25zdCBjaGFyICpwcm9wKQogewotCXN0YXRpYyBERUZJTkVfTVVURVgoYWRkX3NwdW1lbV9tdXRleCk7Ci0KIAljb25zdCBzdHJ1Y3QgYWRkcmVzc19wcm9wIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCQl1bnNpZ25lZCBpbnQgbGVuOwpAQCAtODcsNyArNzcsNyBAQAogCXN0YXJ0X3BmbiA9IHAtPmFkZHJlc3MgPj4gUEFHRV9TSElGVDsKIAlucl9wYWdlcyA9ICgodW5zaWduZWQgbG9uZylwLT5sZW4gKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogCi0JcGdkYXRhID0gTk9ERV9EQVRBKHNwdV9nZXRfcGRhdGEoc3B1KS0+bmlkKTsKKwlwZ2RhdGEgPSBOT0RFX0RBVEEoc3B1LT5ub2RlKTsKIAl6b25lID0gcGdkYXRhLT5ub2RlX3pvbmVzOwogCiAJLyogWFhYIHJldGhpbmsgbG9ja2luZyBoZXJlICovCkBAIC0xNDAsNiArMTMwLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaXNyYzsKIAljb25zdCB1MzIgKnRtcDsKKwlpbnQgbmlkOwogCiAJLyogR2V0IHRoZSBpbnRlcnJ1cHQgc291cmNlIHVuaXQgZnJvbSB0aGUgZGV2aWNlLXRyZWUgKi8KIAl0bXAgPSBnZXRfcHJvcGVydHkobnAsICJpc3JjIiwgTlVMTCk7CkBAIC0xNDcsOCArMTM4LDE1IEBACiAJCXJldHVybiAtRU5PREVWOwogCWlzcmMgPSB0bXBbMF07CiAKKwl0bXAgPSBnZXRfcHJvcGVydHkobnAtPnBhcmVudC0+cGFyZW50LCAibm9kZS1pZCIsIE5VTEwpOworCWlmICghdG1wKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4ndCBmaW5kIG5vZGUtaWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCW5pZCA9IHNwdS0+bm9kZTsKKwl9IGVsc2UKKwkJbmlkID0gdG1wWzBdOworCiAJLyogQWRkIHRoZSBub2RlIG51bWJlciAqLwotCWlzcmMgfD0gc3B1LT5ub2RlIDw8IElJQ19JUlFfTk9ERV9TSElGVDsKKwlpc3JjIHw9IG5pZCA8PCBJSUNfSVJRX05PREVfU0hJRlQ7CiAKIAkvKiBOb3cgbWFwIGludGVycnVwdHMgb2YgYWxsIDMgY2xhc3NlcyAqLwogCXNwdS0+aXJxc1swXSA9IGlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCBJSUNfSVJRX0NMQVNTXzAgfCBpc3JjKTsKQEAgLTIzNyw3MCArMjM1LDg4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzcHVfbWFwX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgaW50IG5yLAotCQl2b2lkIF9faW9tZW0qKiB2aXJ0LCB1bnNpZ25lZCBsb25nICpwaHlzKQorc3RhdGljIGludCBzcHVfbWFwX3Jlc291cmNlKHN0cnVjdCBzcHUgKnNwdSwgaW50IG5yLAorCQkJICAgIHZvaWQgX19pb21lbSoqIHZpcnQsIHVuc2lnbmVkIGxvbmcgKnBoeXMpCiB7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHNwdV9nZXRfcGRhdGEoc3B1KS0+ZGV2bm9kZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnJfcGFnZXM7CisJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdGE7CisJc3RydWN0IHpvbmUgKnpvbmU7CiAJc3RydWN0IHJlc291cmNlIHJlc291cmNlID0geyB9OworCXVuc2lnbmVkIGxvbmcgbGVuOwogCWludCByZXQ7CiAKLQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5vZGUsIG5yLCAmcmVzb3VyY2UpOworCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIG5yLCAmcmVzb3VyY2UpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCiAJaWYgKHBoeXMpCiAJCSpwaHlzID0gcmVzb3VyY2Uuc3RhcnQ7Ci0JKnZpcnQgPSBpb3JlbWFwKHJlc291cmNlLnN0YXJ0LCByZXNvdXJjZS5lbmQgLSByZXNvdXJjZS5zdGFydCk7CisJbGVuID0gcmVzb3VyY2UuZW5kIC0gcmVzb3VyY2Uuc3RhcnQgKyAxOworCSp2aXJ0ID0gaW9yZW1hcChyZXNvdXJjZS5zdGFydCwgbGVuKTsKIAlpZiAoISp2aXJ0KQogCQlyZXQgPSAtRUlOVkFMOwogCisJc3RhcnRfcGZuID0gcmVzb3VyY2Uuc3RhcnQgPj4gUEFHRV9TSElGVDsKKwlucl9wYWdlcyA9IChsZW4gKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworCisJcGdkYXRhID0gTk9ERV9EQVRBKHNwdS0+bm9kZSk7CisJem9uZSA9IHBnZGF0YS0+bm9kZV96b25lczsKKworCS8qIFhYWCByZXRoaW5rIGxvY2tpbmcgaGVyZSAqLworCW11dGV4X2xvY2soJmFkZF9zcHVtZW1fbXV0ZXgpOworCXJldCA9IF9fYWRkX3BhZ2VzKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpOworCW11dGV4X3VubG9jaygmYWRkX3NwdW1lbV9tdXRleCk7CisKIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzcHVfbWFwX2RldmljZShzdHJ1Y3Qgc3B1ICpzcHUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3N0YXRpYyBpbnQgX19pbml0IHNwdV9tYXBfZGV2aWNlKHN0cnVjdCBzcHUgKnNwdSkKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gc3B1X2dldF9wZGF0YShzcHUpLT5kZXZub2RlOwogCWludCByZXQgPSAtRU5PREVWOwotCXNwdS0+bmFtZSA9IGdldF9wcm9wZXJ0eShub2RlLCAibmFtZSIsIE5VTEwpOworCisJc3B1LT5uYW1lID0gZ2V0X3Byb3BlcnR5KG5wLCAibmFtZSIsIE5VTEwpOwogCWlmICghc3B1LT5uYW1lKQogCQlnb3RvIG91dDsKIAotCXJldCA9IHNwdV9tYXBfcmVzb3VyY2Uobm9kZSwgMCwgKHZvaWQgX19pb21lbSoqKSZzcHUtPmxvY2FsX3N0b3JlLAotCQkJCQkmc3B1LT5sb2NhbF9zdG9yZV9waHlzKTsKKwlyZXQgPSBzcHVfbWFwX3Jlc291cmNlKHNwdSwgMCwgKHZvaWQgX19pb21lbSoqKSZzcHUtPmxvY2FsX3N0b3JlLAorCQkJICAgICAgICZzcHUtPmxvY2FsX3N0b3JlX3BoeXMpOwogCWlmIChyZXQpIHsKIAkJcHJfZGVidWcoInNwdV9uZXc6IGZhaWxlZCB0byBtYXAgJXMgcmVzb3VyY2UgMFxuIiwKLQkJCSBub2RlLT5mdWxsX25hbWUpOworCQkJIG5wLT5mdWxsX25hbWUpOwogCQlnb3RvIG91dDsKIAl9Ci0JcmV0ID0gc3B1X21hcF9yZXNvdXJjZShub2RlLCAxLCAodm9pZCBfX2lvbWVtKiopJnNwdS0+cHJvYmxlbSwKLQkJCQkJJnNwdS0+cHJvYmxlbV9waHlzKTsKKwlyZXQgPSBzcHVfbWFwX3Jlc291cmNlKHNwdSwgMSwgKHZvaWQgX19pb21lbSoqKSZzcHUtPnByb2JsZW0sCisJCQkgICAgICAgJnNwdS0+cHJvYmxlbV9waHlzKTsKIAlpZiAocmV0KSB7CiAJCXByX2RlYnVnKCJzcHVfbmV3OiBmYWlsZWQgdG8gbWFwICVzIHJlc291cmNlIDFcbiIsCi0JCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCSBucC0+ZnVsbF9uYW1lKTsKIAkJZ290byBvdXRfdW5tYXA7CiAJfQotCXJldCA9IHNwdV9tYXBfcmVzb3VyY2Uobm9kZSwgMiwgKHZvaWQgX19pb21lbSoqKSZzcHUtPnByaXYyLAotCQkJCQlOVUxMKTsKKwlyZXQgPSBzcHVfbWFwX3Jlc291cmNlKHNwdSwgMiwgKHZvaWQgX19pb21lbSoqKSZzcHUtPnByaXYyLCBOVUxMKTsKIAlpZiAocmV0KSB7CiAJCXByX2RlYnVnKCJzcHVfbmV3OiBmYWlsZWQgdG8gbWFwICVzIHJlc291cmNlIDJcbiIsCi0JCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCSBucC0+ZnVsbF9uYW1lKTsKIAkJZ290byBvdXRfdW5tYXA7CiAJfQogCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKLQkJcmV0ID0gc3B1X21hcF9yZXNvdXJjZShub2RlLCAzLAotCQkJKHZvaWQgX19pb21lbSoqKSZzcHVfZ2V0X3BkYXRhKHNwdSktPnByaXYxLCBOVUxMKTsKKwkJcmV0ID0gc3B1X21hcF9yZXNvdXJjZShzcHUsIDMsCisJCQkgICAgICAgKHZvaWQgX19pb21lbSoqKSZzcHVfZ2V0X3BkYXRhKHNwdSktPnByaXYxLCBOVUxMKTsKIAlpZiAocmV0KSB7CiAJCXByX2RlYnVnKCJzcHVfbmV3OiBmYWlsZWQgdG8gbWFwICVzIHJlc291cmNlIDNcbiIsCi0JCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCSBucC0+ZnVsbF9uYW1lKTsKIAkJZ290byBvdXRfdW5tYXA7CiAJfQotCXByX2RlYnVnKCJzcHVfbmV3OiAlcyBtYXBzOlxuIiwgbm9kZS0+ZnVsbF9uYW1lKTsKKwlwcl9kZWJ1Zygic3B1X25ldzogJXMgbWFwczpcbiIsIG5wLT5mdWxsX25hbWUpOwogCXByX2RlYnVnKCIgIGxvY2FsIHN0b3JlICAgOiAweCUwMTZseCAtPiAweCVwXG4iLAogCQkgc3B1LT5sb2NhbF9zdG9yZV9waHlzLCBzcHUtPmxvY2FsX3N0b3JlKTsKIAlwcl9kZWJ1ZygiICBwcm9ibGVtIHN0YXRlIDogMHglMDE2bHggLT4gMHglcFxuIiwKIAkJIHNwdS0+cHJvYmxlbV9waHlzLCBzcHUtPnByb2JsZW0pOwogCXByX2RlYnVnKCIgIHByaXYyICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgMHglcFxuIiwgc3B1LT5wcml2Mik7CiAJcHJfZGVidWcoIiAgcHJpdjEgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAweCVwXG4iLAotCQkJCQkJc3B1X2dldF9wZGF0YShzcHUpLT5wcml2MSk7CisJCSBzcHVfZ2V0X3BkYXRhKHNwdSktPnByaXYxKTsKIAogCXJldHVybiAwOwogCkBAIC0zNDAsOCArMzU2LDkgQEAKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQorCXNwdV9nZXRfcGRhdGEoc3B1KS0+ZGV2bm9kZSA9IG9mX25vZGVfZ2V0KHNwZSk7CiAKLQlzcHUtPm5vZGUgPSBmaW5kX3NwdV9ub2RlX2lkKHNwZSk7CisJc3B1LT5ub2RlID0gb2Zfbm9kZV90b19uaWQoc3BlKTsKIAlpZiAoc3B1LT5ub2RlID49IE1BWF9OVU1OT0RFUykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJTUEUgJXMgb24gbm9kZSAlZCBpZ25vcmVkLCIKIAkJICAgICAgICIgbm9kZSBudW1iZXIgdG9vIGJpZ1xuIiwgc3BlLT5mdWxsX25hbWUsIHNwdS0+bm9kZSk7CkBAIC0zNTAsMTEgKzM2Nyw3IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCi0Jc3B1X2dldF9wZGF0YShzcHUpLT5uaWQgPSBvZl9ub2RlX3RvX25pZChzcGUpOwotCWlmIChzcHVfZ2V0X3BkYXRhKHNwdSktPm5pZCA9PSAtMSkKLQkJc3B1X2dldF9wZGF0YShzcHUpLT5uaWQgPSAwOwotCi0JcmV0ID0gc3B1X21hcF9kZXZpY2Uoc3B1LCBzcGUpOworCXJldCA9IHNwdV9tYXBfZGV2aWNlKHNwdSk7CiAJLyogdHJ5IG9sZCBtZXRob2QgKi8KIAlpZiAocmV0KQogCQlyZXQgPSBzcHVfbWFwX2RldmljZV9vbGQoc3B1LCBzcGUpOwpAQCAtMzY3LDggKzM4MCw2IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5tYXA7CiAKLQlzcHVfZ2V0X3BkYXRhKHNwdSktPmRldm5vZGUgPSBvZl9ub2RlX2dldChzcGUpOwotCiAJcHJfZGVidWcoS0VSTl9ERUJVRyAiVXNpbmcgU1BFICVzICVwICVwICVwICVwICVkXG4iLCBzcHUtPm5hbWUsCiAJCXNwdS0+bG9jYWxfc3RvcmUsIHNwdS0+cHJvYmxlbSwgc3B1X2dldF9wZGF0YShzcHUpLT5wcml2MSwKIAkJc3B1LT5wcml2Miwgc3B1LT5udW1iZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYwppbmRleCAyNjk0NWM0Li43MjVlMTk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJc3RydWN0IGZkdGFibGUgKmZkdCA9IGZpbGVzX2ZkdGFibGUoY3VycmVudC0+ZmlsZXMpOwogCWludCBzaXplID0gMCwgZmQ7CiAKLQlmb3IgKGZkID0gMDsgZmQgPCBmZHQtPm1heF9mZHNldCAmJiBmZCA8IGZkdC0+bWF4X2ZkczsgZmQrKykgeworCWZvciAoZmQgPSAwOyBmZCA8IGZkdC0+bWF4X2ZkczsgZmQrKykgewogCQlpZiAoRkRfSVNTRVQoZmQsIGZkdC0+b3Blbl9mZHMpKSB7CiAJCQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZjaGVjayhmZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKaW5kZXggZTNhZjkxMS4uNzM4YjkyNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRpcjsKIAlpbnQgcmV0OwogCi0JZGlyID0gZmlsZS0+Zl9kZW50cnk7CisJZGlyID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlwYXJlbnQgPSBkaXItPmRfcGFyZW50LT5kX2lub2RlOwogCWN0eCA9IFNQVUZTX0koZGlyLT5kX2lub2RlKS0+aV9jdHg7CiAKQEAgLTM2Myw3ICszNjMsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRpcjsKIAlpbnQgcmV0OwogCi0JZGlyID0gZmlsZS0+Zl9kZW50cnk7CisJZGlyID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlwYXJlbnQgPSBkaXItPmRfcGFyZW50LT5kX2lub2RlOwogCiAJcmV0ID0gc3B1ZnNfcm1nYW5nKHBhcmVudCwgZGlyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMKaW5kZXggYTZkMWFlNC4uOGUzN2JkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAlpZiAoZmlscC0+Zl9vcCAhPSAmc3B1ZnNfY29udGV4dF9mb3BzKQogCQlnb3RvIG91dDsKIAotCWkgPSBTUFVGU19JKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlpID0gU1BVRlNfSShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlyZXQgPSBzcHVmc19ydW5fc3B1KGZpbHAsIGktPmlfY3R4LCAmbnBjLCAmc3RhdHVzKTsKIAogCWlmIChwdXRfdXNlcihucGMsIHVucGMpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnCmluZGV4IGRkYmUzOTguLmIzYzJjZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcKQEAgLTM1LDcgKzM1LDcgQEAKIAkgIFNlbGVjdCBIRFBVIGlmIGNvbmZpZ3VyaW5nIGEgU2t5IENvbXB1dGVycyBDb21wdXRlIEJsYWRlLgogCiBjb25maWcgSERQVV9GRUFUVVJFUwotCWRlcGVuZHMgSERQVQorCWRlcGVuZHMgb24gSERQVQogCXRyaXN0YXRlICJIRFBVLUZlYXR1cmVzIgogCWhlbHAKIAkgIFNlbGVjdCB0byBlbmFibGUgSERQVSBlbmhhbmNlZCBmZWF0dXJlcy4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcKaW5kZXggODg3YjY4OC4uNTRlNmIzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcKQEAgLTMxLDUgKzMxLDUgQEAKIAogY29uZmlnIFZJT1BBVEgKIAlib29sCi0JZGVwZW5kcyBvbiBWSU9DT05TIHx8IFZJT0RBU0QgfHwgVklPQ0QgfHwgVklPVEFQRSB8fCBWRVRICisJZGVwZW5kcyBvbiBWSU9DT05TIHx8IFZJT0RBU0QgfHwgVklPQ0QgfHwgVklPVEFQRSB8fCBJU0VSSUVTX1ZFVEgKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9scGV2ZW50cy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwZXZlbnRzLmMKaW5kZXggZTNlOTI5ZS4uYzFmNDUwMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwZXZlbnRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwZXZlbnRzLmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfbHBfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9jYWxsX2V2ZW50Lmg+CkBAIC0zMTgsNiArMzE5LDkgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmU7CiAKKwlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCXJldHVybiAwOworCiAJZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJpU2VyaWVzL2xwZXZlbnRzIiwgU19JRlJFR3xTX0lSVUdPLCBOVUxMKTsKIAlpZiAoZSkKIAkJZS0+cHJvY19mb3BzID0gJnByb2NfbHBldmVudHNfb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKaW5kZXggYjU3MzdkNi4uMWFkMGU0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvdmlvLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvbWYuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9jb25maWcuaD4KQEAgLTExNzgsNyArMTE3OSw3IEBACiAJCQkJICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXNzaXplX3QgcmM7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAljaGFyICpwYWdlOwpAQCAtMTIzNSw2ICsxMjM2LDkgQEAKIAljaGFyIG5hbWVbMl07CiAJaW50IGk7CiAKKwlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCXJldHVybiAwOworCiAJbWZfcHJvY19yb290ID0gcHJvY19ta2RpcigiaVNlcmllcy9tZiIsIE5VTEwpOwogCWlmICghbWZfcHJvY19yb290KQogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wcm9jLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcHJvYy5jCmluZGV4IGMyNDE0MTMuLmI1NGUzNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wcm9jLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Byb2MuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9jYWxsX3htLmg+CiAKICNpbmNsdWRlICJwcm9jZXNzb3JfdnBkLmgiCkBAIC0zMSw3ICszMiwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpc2VyaWVzX3Byb2NfY3JlYXRlKHZvaWQpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICplID0gcHJvY19ta2RpcigiaVNlcmllcyIsIDApOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKKworCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKKwkJcmV0dXJuIDA7CisKKwllID0gcHJvY19ta2RpcigiaVNlcmllcyIsIDApOwogCWlmICghZSkKIAkJcmV0dXJuIDE7CiAKQEAgLTEwNiw2ICsxMTIsOSBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKIAorCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKKwkJcmV0dXJuIDA7CisKIAllID0gY3JlYXRlX3Byb2NfZW50cnkoImlTZXJpZXMvdGl0YW5Ub2QiLCBTX0lGUkVHfFNfSVJVR08sIE5VTEwpOwogCWlmIChlKQogCQllLT5wcm9jX2ZvcHMgPSAmcHJvY190aXRhbnRvZF9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwppbmRleCBiZGYyYWZiLi5jY2U3ZTMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwpAQCAtNTI3LDcgKzUyNyw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBpU2VyaWVzX3NyY19pbml0KHZvaWQpCiB7CiAgICAgICAgIC8qIGNsZWFyIHRoZSBwcm9ncmVzcyBsaW5lICovCi0gICAgICAgIHBwY19tZC5wcm9ncmVzcygiICIsIDB4ZmZmZik7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCXBwY19tZC5wcm9ncmVzcygiICIsIDB4ZmZmZik7CiAgICAgICAgIHJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpb3BhdGguYwppbmRleCA4NGU3ZWUyLi5hNjc5OWVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2h2X3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfbHBfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9jb25maWcuaD4KQEAgLTE4Myw2ICsxODQsOSBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKIAorCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKKwkJcmV0dXJuIDA7CisKIAllID0gY3JlYXRlX3Byb2NfZW50cnkoImlTZXJpZXMvY29uZmlnIiwgMCwgTlVMTCk7CiAJaWYgKGUpCiAJCWUtPnByb2NfZm9wcyA9ICZwcm9jX3Zpb3BhdGhfb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jCmluZGV4IDNhMzJkZWQuLjNmNmE2OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJZm9yIChucCA9IE5VTEw7IChucCA9IG9mX2dldF9uZXh0X2NoaWxkKHJvb3QsIG5wKSkgIT0gTlVMTDspIHsKIAkJaWYgKG5wLT5uYW1lID09IE5VTEwpCiAJCQljb250aW51ZTsKLQkJaWYgKHN0cmNtcChucC0+bmFtZSwgInBjaSIpID09IDApIHsKKwkJaWYgKCFzdHJjbXAobnAtPm5hbWUsICJwY2kiKSB8fCAhc3RyY21wKG5wLT5uYW1lLCAicGNpZSIpKSB7CiAJCQlpZiAoYWRkX2JyaWRnZShucCkgPT0gMCkKIAkJCQlvZl9ub2RlX2dldChucCk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYwppbmRleCAwOTQ5ODlkLi41MDg1NWQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9sbWIuaD4KICNpbmNsdWRlIDxhc20vbXBpYy5oPgorI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KIAogI2luY2x1ZGUgIm1hcGxlLmgiCkBAIC0xNjYsNiArMTY3LDE2IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG1hcGxlX3VzZV9ydGFzX3JlYm9vdF9hbmRfaGFsdF9pZl9wcmVzZW50KHZvaWQpCit7CisJaWYgKHJ0YXNfc2VydmljZV9wcmVzZW50KCJzeXN0ZW0tcmVib290IikgJiYKKwkgICAgcnRhc19zZXJ2aWNlX3ByZXNlbnQoInBvd2VyLW9mZiIpKSB7CisJCXBwY19tZC5yZXN0YXJ0ID0gcnRhc19yZXN0YXJ0OworCQlwcGNfbWQucG93ZXJfb2ZmID0gcnRhc19wb3dlcl9vZmY7CisJCXBwY19tZC5oYWx0ID0gcnRhc19oYWx0OworCX0KK30KKwogdm9pZCBfX2luaXQgbWFwbGVfc2V0dXBfYXJjaCh2b2lkKQogewogCS8qIGluaXQgdG8gc29tZSB+c2FuZSB2YWx1ZSB1bnRpbCBjYWxpYnJhdGVfZGVsYXkoKSBydW5zICovCkBAIC0xODEsNiArMTkyLDcgQEAKICNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwogI2VuZGlmCisJbWFwbGVfdXNlX3J0YXNfcmVib290X2FuZF9oYWx0X2lmX3ByZXNlbnQoKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJVc2luZyBuYXRpdmUvTkFQIGlkbGUgbG9vcFxuIik7CiB9CkBAIC0yNDIsNyArMjU0LDYgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIk9wZW5QSUMgYWRkcjogJWx4LCBoYXMgSVNVczogJWRcbiIsCiAJCSAgICAgICBvcGVucGljX2FkZHIsIGhhc19pc3VzKTsKIAl9Ci0Jb2Zfbm9kZV9wdXQocm9vdCk7CiAKIAlCVUdfT04ob3BlbnBpY19hZGRyID09IDApOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvc2V0dXAuYwppbmRleCA4OWQ2ZTI5Li5iZWE3ZDFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3NldHVwLmMKQEAgLTEyOSw3ICsxMjksNiBAQAogCX0KIAlvcGVucGljX2FkZHIgPSBvZl9yZWFkX251bWJlcihvcHByb3AsIG5hZGRyKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiT3BlblBJQyBhZGRyOiAlbHhcbiIsIG9wZW5waWNfYWRkcik7Ci0Jb2Zfbm9kZV9wdXQocm9vdCk7CiAKIAltcGljID0gbXBpY19hbGxvYyhtcGljX25vZGUsIG9wZW5waWNfYWRkciwgTVBJQ19QUklNQVJZLCAwLCAwLAogCQkJICAiIFBBUy1PUElDICAiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnCmluZGV4IDQ1MWJmY2QuLmRlNTJlYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZwpAQCAtNDAsNCArNDAsMTUgQEAKIAogCSAgSWYgeW91IGhhdmUgYW55IGRvdWJ0LCBjaG9vc2UgdGhlIGRlZmF1bHQgeS4KIAorY29uZmlnIFBTM19WVUFSVAorCWRlcGVuZHMgb24gUFBDX1BTMworCWJvb2wgIlBTMyBWaXJ0dWFsIFVBUlQgc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBQUzMgVmlydHVhbCBVQVJULgorCisJICBUaGlzIHN1cHBvcnQgaXMgcmVxdWlyZWQgZm9yIHNldmVyYWwgc3lzdGVtIHNlcnZpY2VzCisJICBpbmNsdWRpbmcgdGhlIFN5c3RlbSBNYW5hZ2VyIGFuZCBBViBTZXR0aW5ncy4gIEluCisJICBnZW5lcmFsLCBhbGwgdXNlcnMgd2lsbCBzYXkgWS4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9NYWtlZmlsZQppbmRleCAzNzU3Y2ZhLi4xOTk0OTA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKLW9iai15ICs9IHNldHVwLm8gbW0ubyBzbXAubyB0aW1lLm8gaHZjYWxsLm8gaHRhYi5vIHJlcG9zaXRvcnkubworb2JqLXkgKz0gc2V0dXAubyBtbS5vIHRpbWUubyBodmNhbGwubyBodGFiLm8gcmVwb3NpdG9yeS5vCiBvYmoteSArPSBpbnRlcnJ1cHQubyBleHBvcnRzLm8gb3MtYXJlYS5vCiAKK29iai0kKENPTkZJR19TTVApICs9IHNtcC5vCiBvYmotJChDT05GSUdfU1BVX0JBU0UpICs9IHNwdS5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jCmluZGV4IDA1NmMxZTQuLjZmNWRlNDM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9pbnRlcnJ1cHQuYwpAQCAtNzEsNyArNzEsNyBAQAogCiAJcmVzdWx0ID0gbHYxX2Rlc3RydWN0X2lvX2lycV9vdXRsZXQodmlycV90b19odyh2aXJxKSk7CiAKLQlpZiAoIXJlc3VsdCkKKwlpZiAocmVzdWx0KQogCQlwcl9kZWJ1ZygiJXM6JWQ6IGx2MV9kZXN0cnVjdF9pb19pcnFfb3V0bGV0IGZhaWxlZDogJXNcbiIsCiAJCQlfX2Z1bmNfXywgX19MSU5FX18sIHBzM19yZXN1bHQocmVzdWx0KSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQppbmRleCA5OTcyNDNhLi42OTU5MGZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw4IEBACiBvYmotJChDT05GSUdfU0NBTkxPRykJKz0gc2NhbmxvZy5vCiBvYmotJChDT05GSUdfRUVIKQkrPSBlZWgubyBlZWhfY2FjaGUubyBlZWhfZHJpdmVyLm8gZWVoX2V2ZW50Lm8KIAorb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBob3RwbHVnLWNwdS5vCisKIG9iai0kKENPTkZJR19IVkNfQ09OU09MRSkJKz0gaHZjb25zb2xlLm8KIG9iai0kKENPTkZJR19IVkNTKQkJKz0gaHZjc2VydmVyLm8KIG9iai0kKENPTkZJR19IQ0FMTF9TVEFUUykJKz0gaHZDYWxsX2luc3QubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IDNjMmQ2M2UuLmRhNmU1MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTMzNyw2ICszMzcsNyBAQAogCQkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiBEZXZpY2UgZHJpdmVyIGlnbm9yZWQgJWQgYmFkIHJlYWRzLCBwYW5pY2luZ1xuIiwKIAkJCSAgICAgICAgcGRuLT5lZWhfY2hlY2tfY291bnQpOwogCQkJZHVtcF9zdGFjaygpOworCQkJbXNsZWVwKDUwMDApOwogCQkJCiAJCQkvKiByZS1yZWFkIHRoZSBzbG90IHJlc2V0IHN0YXRlICovCiAJCQlpZiAocmVhZF9zbG90X3Jlc2V0X3N0YXRlKHBkbiwgcmV0cykgIT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfY2FjaGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfY2FjaGUuYwppbmRleCBiNmI0NjJkLi5mMmJhZTA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2NhY2hlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9jYWNoZS5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJCXJldHVybiBwaWFyOwogCQl9CiAJfQotCXBpYXIgPSAoc3RydWN0IHBjaV9pb19hZGRyX3JhbmdlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9pb19hZGRyX3JhbmdlKSwgR0ZQX0FUT01JQyk7CisJcGlhciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfaW9fYWRkcl9yYW5nZSksIEdGUF9BVE9NSUMpOwogCWlmICghcGlhcikKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IGMyYmM5OTAuLmNiZDZiMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtMTcwLDE0ICsxNzAsMTkgQEAKIHN0YXRpYyB2b2lkIGVlaF9yZXBvcnRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKnVzZXJkYXRhKQogewogCXN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXIgPSBkZXYtPmRyaXZlcjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CiAKIAlkZXYtPmVycm9yX3N0YXRlID0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsOwogCiAJaWYgKCFkcml2ZXIpCiAJCXJldHVybjsKLQlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIpCi0JCXJldHVybjsKLQlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXItPnJlc3VtZSkKKworCWlmICgoUENJX0ROKGRuKS0+ZWVoX21vZGUpICYgRUVIX01PREVfSVJRX0RJU0FCTEVEKSB7CisJCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5FRUhfTU9ERV9JUlFfRElTQUJMRUQ7CisJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCX0KKwlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKKwkgICAgIWRyaXZlci0+ZXJyX2hhbmRsZXItPnJlc3VtZSkKIAkJcmV0dXJuOwogCiAJZHJpdmVyLT5lcnJfaGFuZGxlci0+cmVzdW1lKGRldik7CkBAIC00MDcsNiArNDEyLDggQEAKIAogCQlpZiAocmMpCiAJCQlyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworCQllbHNlCisJCQlyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiAJfQogCiAJLyogSWYgYW55IGRldmljZSBoYXMgYSBoYXJkIGZhaWx1cmUsIHRoZW4gc2h1dCBvZmYgZXZlcnl0aGluZy4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2MGI5YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogcHNlcmllcyBDUFUgSG90cGx1ZyBpbmZyYXN0cnVjdHVyZS4KKyAqCisgKiBTcGxpdCBvdXQgZnJvbSBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYworICogIGFyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jLCBhbmQgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCisgKgorICogUGV0ZXIgQmVyZ25lciwgSUJNCU1hcmNoIDIwMDEuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgSUJNLgorICogRGF2ZSBFbmdlYnJldHNlbiwgUGV0ZXIgQmVyZ25lciwgYW5kCisgKiBNaWtlIENvcnJpZ2FuIHtlbmdlYnJldHxiZXJnbmVyfG1pa2VjfUB1cy5pYm0uY29tCisgKiBQbHVzIHZhcmlvdXMgY2hhbmdlcyBmcm9tIG90aGVyIElCTSB0ZWFtcy4uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVsbGVybWFuLCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3J0YXMuaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BTZXJpZXNfcmVjb25maWcuaD4KKyNpbmNsdWRlICJ4aWNzLmgiCisKKy8qIFRoaXMgdmVyc2lvbiBjYW4ndCB0YWtlIHRoZSBzcGlubG9jaywgYmVjYXVzZSBpdCBuZXZlciByZXR1cm5zICovCitzdGF0aWMgc3RydWN0IHJ0YXNfYXJncyBydGFzX3N0b3Bfc2VsZl9hcmdzID0geworCS50b2tlbiA9IFJUQVNfVU5LTk9XTl9TRVJWSUNFLAorCS5uYXJncyA9IDAsCisJLm5yZXQgPSAxLAorCS5yZXRzID0gJnJ0YXNfc3RvcF9zZWxmX2FyZ3MuYXJnc1swXSwKK307CisKK3N0YXRpYyB2b2lkIHJ0YXNfc3RvcF9zZWxmKHZvaWQpCit7CisJc3RydWN0IHJ0YXNfYXJncyAqYXJncyA9ICZydGFzX3N0b3Bfc2VsZl9hcmdzOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCUJVR19PTihhcmdzLT50b2tlbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSk7CisKKwlwcmludGsoImNwdSAldSAoaHdpZCAldSkgUmVhZHkgdG8gZGllLi4uXG4iLAorCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwllbnRlcl9ydGFzKF9fcGEoYXJncykpOworCisJcGFuaWMoIkFsYXMsIEkgc3Vydml2ZWQuXG4iKTsKK30KKworc3RhdGljIHZvaWQgcHNlcmllc19tYWNoX2NwdV9kaWUodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlkbGVfdGFza19leGl0KCk7CisJeGljc190ZWFyZG93bl9jcHUoMCk7CisJcnRhc19zdG9wX3NlbGYoKTsKKwkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUuLi4gKi8KKwlCVUcoKTsKKwlmb3IoOzspOworfQorCitzdGF0aWMgaW50IHFjc3NfdG9rOwkvKiBxdWVyeS1jcHUtc3RvcHBlZC1zdGF0ZSB0b2tlbiAqLworCisvKiBHZXQgc3RhdGUgb2YgcGh5c2ljYWwgQ1BVLgorICogUmV0dXJuIGNvZGVzOgorICoJMAktIFRoZSBwcm9jZXNzb3IgaXMgaW4gdGhlIFJUQVMgc3RvcHBlZCBzdGF0ZQorICoJMQktIHN0b3Atc2VsZiBpcyBpbiBwcm9ncmVzcworICoJMgktIFRoZSBwcm9jZXNzb3IgaXMgbm90IGluIHRoZSBSVEFTIHN0b3BwZWQgc3RhdGUKKyAqCS0xCS0gSGFyZHdhcmUgRXJyb3IKKyAqCS0yCS0gSGFyZHdhcmUgQnVzeSwgVHJ5IGFnYWluIGxhdGVyLgorICovCitzdGF0aWMgaW50IHF1ZXJ5X2NwdV9zdG9wcGVkKHVuc2lnbmVkIGludCBwY3B1KQoreworCWludCBjcHVfc3RhdHVzLCBzdGF0dXM7CisKKwlzdGF0dXMgPSBydGFzX2NhbGwocWNzc190b2ssIDEsIDIsICZjcHVfc3RhdHVzLCBwY3B1KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiUlRBUyBxdWVyeS1jcHUtc3RvcHBlZC1zdGF0ZSBmYWlsZWQ6ICVpXG4iLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXJldHVybiBjcHVfc3RhdHVzOworfQorCitzdGF0aWMgaW50IHBzZXJpZXNfY3B1X2Rpc2FibGUodm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJY3B1X2NsZWFyKGNwdSwgY3B1X29ubGluZV9tYXApOworCXZkc29fZGF0YS0+cHJvY2Vzc29yQ291bnQtLTsKKworCS8qZml4IGJvb3RfY3B1aWQgaGVyZSovCisJaWYgKGNwdSA9PSBib290X2NwdWlkKQorCQlib290X2NwdWlkID0gYW55X29ubGluZV9jcHUoY3B1X29ubGluZV9tYXApOworCisJLyogRklYTUU6IGFic3RyYWN0IHRoaXMgdG8gbm90IGJlIHBsYXRmb3JtIHNwZWNpZmljIGxhdGVyIG9uICovCisJeGljc19taWdyYXRlX2lycXNfYXdheSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwc2VyaWVzX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgdHJpZXM7CisJaW50IGNwdV9zdGF0dXM7CisJdW5zaWduZWQgaW50IHBjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CisKKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCAyNTsgdHJpZXMrKykgeworCQljcHVfc3RhdHVzID0gcXVlcnlfY3B1X3N0b3BwZWQocGNwdSk7CisJCWlmIChjcHVfc3RhdHVzID09IDAgfHwgY3B1X3N0YXR1cyA9PSAtMSkKKwkJCWJyZWFrOworCQltc2xlZXAoMjAwKTsKKwl9CisJaWYgKGNwdV9zdGF0dXMgIT0gMCkgeworCQlwcmludGsoIlF1ZXJ5aW5nIERFQUQ/IGNwdSAlaSAoJWkpIHNob3dzICVpXG4iLAorCQkgICAgICAgY3B1LCBwY3B1LCBjcHVfc3RhdHVzKTsKKwl9CisKKwkvKiBJc29sYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBhcmUgZGVmaW5hdGx5IGRvbmUgYnkKKwkgKiBkcnNsb3RfY2hycF9jcHUuICBJZiB0aGV5IHdlcmUgbm90IHRoZXkgd291bGQgYmUKKwkgKiBkb25lIGhlcmUuICBDaGFuZ2UgaXNvbGF0ZSBzdGF0ZSB0byBJc29sYXRlIGFuZAorCSAqIGNoYW5nZSBhbGxvY2F0aW9uLXN0YXRlIHRvIFVudXNhYmxlLgorCSAqLworCXBhY2FbY3B1XS5jcHVfc3RhcnQgPSAwOworfQorCisvKgorICogVXBkYXRlIGNwdV9wcmVzZW50X21hcCBhbmQgcGFjYShzKSBmb3IgYSBuZXcgY3B1IG5vZGUuICBUaGUgd3JpbmtsZQorICogaGVyZSBpcyB0aGF0IGEgY3B1IGRldmljZSBub2RlIG1heSByZXByZXNlbnQgdXAgdG8gdHdvIGxvZ2ljYWwgY3B1cworICogaW4gdGhlIFNNVCBjYXNlLiAgV2UgbXVzdCBob25vciB0aGUgYXNzdW1wdGlvbiBpbiBvdGhlciBjb2RlIHRoYXQKKyAqIHRoZSBsb2dpY2FsIGlkcyBmb3Igc2libGluZyBTTVQgdGhyZWFkcyB4IGFuZCB5IGFyZSBhZGphY2VudCwgc3VjaAorICogdGhhdCB4XjEgPT0geSBhbmQgeV4xID09IHguCisgKi8KK3N0YXRpYyBpbnQgcHNlcmllc19hZGRfcHJvY2Vzc29yKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwljcHVtYXNrX3QgY2FuZGlkYXRlX21hcCwgdG1wID0gQ1BVX01BU0tfTk9ORTsKKwlpbnQgZXJyID0gLUVOT1NQQywgbGVuLCBudGhyZWFkcywgaTsKKwljb25zdCB1MzIgKmludHNlcnY7CisKKwlpbnRzZXJ2ID0gZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLHBwYy1pbnRlcnJ1cHQtc2VydmVyI3MiLCAmbGVuKTsKKwlpZiAoIWludHNlcnYpCisJCXJldHVybiAwOworCisJbnRocmVhZHMgPSBsZW4gLyBzaXplb2YodTMyKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnRocmVhZHM7IGkrKykKKwkJY3B1X3NldChpLCB0bXApOworCisJbG9ja19jcHVfaG90cGx1ZygpOworCisJQlVHX09OKCFjcHVzX3N1YnNldChjcHVfcHJlc2VudF9tYXAsIGNwdV9wb3NzaWJsZV9tYXApKTsKKworCS8qIEdldCBhIGJpdG1hcCBvZiB1bm9jY3VwaWVkIHNsb3RzLiAqLworCWNwdXNfeG9yKGNhbmRpZGF0ZV9tYXAsIGNwdV9wb3NzaWJsZV9tYXAsIGNwdV9wcmVzZW50X21hcCk7CisJaWYgKGNwdXNfZW1wdHkoY2FuZGlkYXRlX21hcCkpIHsKKwkJLyogSWYgd2UgZ2V0IGhlcmUsIGl0IG1vc3QgbGlrZWx5IG1lYW5zIHRoYXQgTlJfQ1BVUyBpcworCQkgKiBsZXNzIHRoYW4gdGhlIHBhcnRpdGlvbidzIG1heCBwcm9jZXNzb3JzIHNldHRpbmcuCisJCSAqLworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBhZGQgY3B1ICVzOyB0aGlzIHN5c3RlbSBjb25maWd1cmF0aW9uIgorCQkgICAgICAgIiBzdXBwb3J0cyAlZCBsb2dpY2FsIGNwdXMuXG4iLCBucC0+ZnVsbF9uYW1lLAorCQkgICAgICAgY3B1c193ZWlnaHQoY3B1X3Bvc3NpYmxlX21hcCkpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJd2hpbGUgKCFjcHVzX2VtcHR5KHRtcCkpCisJCWlmIChjcHVzX3N1YnNldCh0bXAsIGNhbmRpZGF0ZV9tYXApKQorCQkJLyogRm91bmQgYSByYW5nZSB3aGVyZSB3ZSBjYW4gaW5zZXJ0IHRoZSBuZXcgY3B1KHMpICovCisJCQlicmVhazsKKwkJZWxzZQorCQkJY3B1c19zaGlmdF9sZWZ0KHRtcCwgdG1wLCBudGhyZWFkcyk7CisKKwlpZiAoY3B1c19lbXB0eSh0bXApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGZpbmQgc3BhY2UgaW4gY3B1X3ByZXNlbnRfbWFwIGZvciIKKwkJICAgICAgICIgcHJvY2Vzc29yICVzIHdpdGggJWQgdGhyZWFkKHMpXG4iLCBucC0+bmFtZSwKKwkJICAgICAgIG50aHJlYWRzKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgdG1wKSB7CisJCUJVR19PTihjcHVfaXNzZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApKTsKKwkJY3B1X3NldChjcHUsIGNwdV9wcmVzZW50X21hcCk7CisJCXNldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1LCAqaW50c2VydisrKTsKKwl9CisJZXJyID0gMDsKK291dF91bmxvY2s6CisJdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgcHJlc2VudCBtYXAgZm9yIGEgY3B1IG5vZGUgd2hpY2ggaXMgZ29pbmcgYXdheSwgYW5kIHNldAorICogdGhlIGhhcmQgaWQgaW4gdGhlIHBhY2EocykgdG8gLTEgdG8gYmUgY29uc2lzdGVudCB3aXRoIGJvb3QgdGltZQorICogY29udmVudGlvbiBmb3Igbm9uLXByZXNlbnQgY3B1cy4KKyAqLworc3RhdGljIHZvaWQgcHNlcmllc19yZW1vdmVfcHJvY2Vzc29yKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwlpbnQgbGVuLCBudGhyZWFkcywgaTsKKwljb25zdCB1MzIgKmludHNlcnY7CisKKwlpbnRzZXJ2ID0gZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLHBwYy1pbnRlcnJ1cHQtc2VydmVyI3MiLCAmbGVuKTsKKwlpZiAoIWludHNlcnYpCisJCXJldHVybjsKKworCW50aHJlYWRzID0gbGVuIC8gc2l6ZW9mKHUzMik7CisKKwlsb2NrX2NwdV9ob3RwbHVnKCk7CisJZm9yIChpID0gMDsgaSA8IG50aHJlYWRzOyBpKyspIHsKKwkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CisJCQlpZiAoZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpICE9IGludHNlcnZbaV0pCisJCQkJY29udGludWU7CisJCQlCVUdfT04oY3B1X29ubGluZShjcHUpKTsKKwkJCWNwdV9jbGVhcihjcHUsIGNwdV9wcmVzZW50X21hcCk7CisJCQlzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSwgLTEpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNwdSA9PSBOUl9DUFVTKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGQgbm90IGZpbmQgY3B1IHRvIHJlbW92ZSAiCisJCQkgICAgICAgIndpdGggcGh5c2ljYWwgaWQgMHgleFxuIiwgaW50c2VydltpXSk7CisJfQorCXVubG9ja19jcHVfaG90cGx1ZygpOworfQorCitzdGF0aWMgaW50IHBzZXJpZXNfc21wX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKm5vZGUpCit7CisJaW50IGVyciA9IE5PVElGWV9PSzsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBQU0VSSUVTX1JFQ09ORklHX0FERDoKKwkJaWYgKHBzZXJpZXNfYWRkX3Byb2Nlc3Nvcihub2RlKSkKKwkJCWVyciA9IE5PVElGWV9CQUQ7CisJCWJyZWFrOworCWNhc2UgUFNFUklFU19SRUNPTkZJR19SRU1PVkU6CisJCXBzZXJpZXNfcmVtb3ZlX3Byb2Nlc3Nvcihub2RlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gTk9USUZZX0RPTkU7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBzZXJpZXNfc21wX25iID0geworCS5ub3RpZmllcl9jYWxsID0gcHNlcmllc19zbXBfbm90aWZpZXIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwc2VyaWVzX2NwdV9ob3RwbHVnX2luaXQodm9pZCkKK3sKKwlydGFzX3N0b3Bfc2VsZl9hcmdzLnRva2VuID0gcnRhc190b2tlbigic3RvcC1zZWxmIik7CisJcWNzc190b2sgPSBydGFzX3Rva2VuKCJxdWVyeS1jcHUtc3RvcHBlZC1zdGF0ZSIpOworCisJaWYgKHJ0YXNfc3RvcF9zZWxmX2FyZ3MudG9rZW4gPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UgfHwKKwkJCXFjc3NfdG9rID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVSBIb3RwbHVnIG5vdCBzdXBwb3J0ZWQgYnkgZmlybXdhcmUgIgorCQkJCSItIGRpc2FibGluZy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcGNfbWQuY3B1X2RpZSA9IHBzZXJpZXNfbWFjaF9jcHVfZGllOworCXNtcF9vcHMtPmNwdV9kaXNhYmxlID0gcHNlcmllc19jcHVfZGlzYWJsZTsKKwlzbXBfb3BzLT5jcHVfZGllID0gcHNlcmllc19jcHVfZGllOworCisJLyogUHJvY2Vzc29ycyBjYW4gYmUgYWRkZWQvcmVtb3ZlZCBvbmx5IG9uIExQQVIgKi8KKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKKwkJcFNlcmllc19yZWNvbmZpZ19ub3RpZmllcl9yZWdpc3RlcigmcHNlcmllc19zbXBfbmIpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHBzZXJpZXNfY3B1X2hvdHBsdWdfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMKaW5kZXggYzAwY2ZlZC4uNWM3ZTM4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbC5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUwpAQCAtMjYsNyArMjYsNyBAQAogQkVHSU5fRlRSX1NFQ1RJT047CQkJCQkJXAogCW1mc3ByCXIwLFNQUk5fUFVSUjsJCS8qIGdldCBQVVJSIGFuZCAqLwlcCiAJc3RkCXIwLFNUS19QQVJNKHI2KShyMSk7CS8qIHNhdmUgZm9yIGxhdGVyICovCVwKLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1BVUlIpOworRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfUFVSUik7CiAJCiAvKgogICogcG9zdGNhbGwgaXMgcGVyZm9ybWVkIGltbWVkaWF0ZWx5IGJlZm9yZSBmdW5jdGlvbiByZXR1cm4gd2hpY2gKQEAgLTQzLDcgKzQzLDcgQEAKIAltZnNwcglyOCxTUFJOX1BVUlI7CQkvKiBQVVJSIGFmdGVyICovCVwKIAlsZAlyNixTVEtfUEFSTShyNikocjEpOwkvKiBQVVJSIGJlZm9yZSAqLwlcCiAJc3ViZglyNixyNixyODsJCS8qIGRlbHRhICovCQlcCi1FTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9QVVJSKTsJCQkJXAorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfUFVSUik7CQkJCVwKIAlsZAlyNSxTVEtfUEFSTShyNSkocjEpOwkvKiB0aW1lYmFzZSBiZWZvcmUgKi8JXAogCXN1YmYJcjUscjUscjc7CQkvKiB0aW1lIGRlbHRhICovCVwKIAkJCQkJCQkJXApAQCAtNjYsNyArNjYsNyBAQAogCWxkCXI3LEhDQUxMX1NUQVRfUFVSUihyNCk7CS8qIFBVUlIgKi8JCVwKIAlhZGQJcjcscjcscjY7CQkJCQlcCiAJc3RkCXI3LEhDQUxMX1NUQVRfUFVSUihyNCk7CQkJCVwKLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1BVUlIpOwkJCQlcCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9QVVJSKTsJCQkJXAogMToKICNlbHNlCiAjZGVmaW5lIEhDQUxMX0lOU1RfUFJFQ0FMTApAQCAtMTQ1LDYgKzE0NSw3IEBACiAKIAlIVlNDCQkJCS8qIGludm9rZSB0aGUgaHlwZXJ2aXNvciAqLwogCisJbXIJcjAscjEyCiAJbGQJcjEyLFNUS19QQVJNKHI0KShyMSkKIAlzdGQJcjQsICAwKHIxMikKIAlzdGQJcjUsICA4KHIxMikKQEAgLTE1NCw3ICsxNTUsNyBAQAogCXN0ZAlyOSwgNDAocjEyKQogCXN0ZAlyMTAsNDgocjEyKQogCXN0ZAlyMTEsNTYocjEyKQotCXN0ZAlyMTIsNjQocjEyKQorCXN0ZAlyMCwgNjQocjEyKQogCiAJSENBTExfSU5TVF9QT1NUQ0FMTAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCmluZGV4IDQ0NmUxN2QuLjNkZGMwNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jCkBAIC0zNCw3ICszNCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkICpoY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewotCWlmICgoaW50KSpwb3MgPCBIQ0FMTF9TVEFUX0FSUkFZX1NJWkUpCisJaWYgKChpbnQpKnBvcyA8IChIQ0FMTF9TVEFUX0FSUkFZX1NJWkUtMSkpCiAJCXJldHVybiAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSgqcG9zICsgMSk7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTU3LDcgKzU3LDcgQEAKIAlzdHJ1Y3QgaGNhbGxfc3RhdHMgKmhzID0gKHN0cnVjdCBoY2FsbF9zdGF0cyAqKW0tPnByaXZhdGU7CiAKIAlpZiAoaHNbaF9udW1dLm51bV9jYWxscykgewotCQlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1BVUlIpKQorCQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfUFVSUikpCiAJCQlzZXFfcHJpbnRmKG0sICIlbHUgJWx1ICVsdSAlbHVcbiIsIGhfbnVtPDwyLAogCQkJCSAgIGhzW2hfbnVtXS5udW1fY2FsbHMsCiAJCQkJICAgaHNbaF9udW1dLnRiX3RvdGFsLApAQCAtODUsNyArODUsNyBAQAogCiAJcmMgPSBzZXFfb3BlbihmaWxlLCAmaGNhbGxfaW5zdF9zZXFfb3BzKTsKIAlzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc2VxLT5wcml2YXRlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKKwlzZXEtPnByaXZhdGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCmluZGV4IDNjOTUzOTIuLmU2NjUzYTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCkBAIC00NTksNyArNDU5LDggQEAKIAkJdGJsID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgaW9tbXVfdGFibGUpLCBHRlBfS0VSTkVMLAogCQkJCSAgIHBoYi0+bm9kZSk7CiAJCWlvbW11X3RhYmxlX3NldHBhcm1zKHBoYiwgZG4sIHRibCk7Ci0JCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gaW9tbXVfaW5pdF90YWJsZSh0YmwsIHBoYi0+bm9kZSk7CisJCVBDSV9ETihkbiktPmlvbW11X3RhYmxlID0gaW9tbXVfaW5pdF90YWJsZSh0YmwsIHBoYi0+bm9kZSk7CisJCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gUENJX0ROKGRuKS0+aW9tbXVfdGFibGU7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zY2FubG9nLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2NhbmxvZy5jCmluZGV4IDc3YTViYjEuLjQ1MzY4YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zY2FubG9nLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NjYW5sb2cuYwpAQCAtNDcsNyArNDcsNyBAQAogc3RhdGljIHNzaXplX3Qgc2NhbmxvZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotICAgICAgICBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworICAgICAgICBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcDsKIAl1bnNpZ25lZCBpbnQgKmRhdGE7CiAJaW50IHN0YXR1czsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggMGRjMjU0OC4uMDQyZWNhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTM0NywyMSArMzQ3LDYgQEAKIH0KIGFyY2hfaW5pdGNhbGwocFNlcmllc19pbml0X3BhbmVsKTsKIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIHZvaWQgcFNlcmllc19tYWNoX2NwdV9kaWUodm9pZCkKLXsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWlkbGVfdGFza19leGl0KCk7Ci0JeGljc190ZWFyZG93bl9jcHUoMCk7Ci0JcnRhc19zdG9wX3NlbGYoKTsKLQkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUuLi4gKi8KLQlCVUcoKTsKLQlmb3IoOzspOwotfQotI2Vsc2UKLSNkZWZpbmUgcFNlcmllc19tYWNoX2NwdV9kaWUgTlVMTAotI2VuZGlmCi0KIHN0YXRpYyBpbnQgcHNlcmllc19zZXRfZGFicih1bnNpZ25lZCBsb25nIGRhYnIpCiB7CiAJcmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX1NFVF9EQUJSLCBkYWJyKTsKQEAgLTQzNywxOSArNDIyLDE0IEBACiAJaWYgKG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImlibSxoeXBlcnRhcy1mdW5jdGlvbnMiLCBOVUxMKSAhPSBOVUxMKQogIAkJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0xQQVI7CiAKLQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKLQkJaHB0ZV9pbml0X2xwYXIoKTsKLQllbHNlCi0JCWhwdGVfaW5pdF9uYXRpdmUoKTsKLQogIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcFNlcmllc19wcm9iZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKLSAJY2hhciAqZHR5cGUgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG9mX2dldF9mbGF0X2R0X3Jvb3QoKSwKLSAJCQkJCSAgImRldmljZV90eXBlIiwgTlVMTCk7CisgCWNoYXIgKmR0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChyb290LCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKKwogIAlpZiAoZHR5cGUgPT0gTlVMTCkKICAJCXJldHVybiAwOwogIAlpZiAoc3RyY21wKGR0eXBlLCAiY2hycCIpKQpAQCAtNDY3LDYgKzQ0NywxMSBAQAogCS8qIE5vdyB0cnkgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgcnVubmluZyBvbiBMUEFSICovCiAJb2Zfc2Nhbl9mbGF0X2R0KHBTZXJpZXNfcHJvYmVfaHlwZXJ0YXMsIE5VTEwpOwogCisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCWhwdGVfaW5pdF9scGFyKCk7CisJZWxzZQorCQlocHRlX2luaXRfbmF0aXZlKCk7CisKIAlEQkcoIk1hY2hpbmUgaXMlcyBMUEFSICFcbiIsCiAJICAgIChwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzICYgRldfRkVBVFVSRV9MUEFSKSA/ICIiIDogIiBub3QiKTsKIApAQCAtNTYxLDcgKzU0Niw2IEBACiAJLnBvd2VyX29mZgkJPSBydGFzX3Bvd2VyX29mZiwKIAkuaGFsdAkJCT0gcnRhc19oYWx0LAogCS5wYW5pYwkJCT0gcnRhc19vc190ZXJtLAotCS5jcHVfZGllCQk9IHBTZXJpZXNfbWFjaF9jcHVfZGllLAogCS5nZXRfYm9vdF90aW1lCQk9IHJ0YXNfZ2V0X2Jvb3RfdGltZSwKIAkuZ2V0X3J0Y190aW1lCQk9IHJ0YXNfZ2V0X3J0Y190aW1lLAogCS5zZXRfcnRjX3RpbWUJCT0gcnRhc19zZXRfcnRjX3RpbWUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKaW5kZXggYzY2MjRiOC4uNDQwODUxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwpAQCAtNjQsMTk3ICs2NCw2IEBACiAKIGV4dGVybiB2b2lkIGdlbmVyaWNfc2Vjb25kYXJ5X3NtcF9pbml0KHVuc2lnbmVkIGxvbmcpOwogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0KLS8qIEdldCBzdGF0ZSBvZiBwaHlzaWNhbCBDUFUuCi0gKiBSZXR1cm4gY29kZXM6Ci0gKgkwCS0gVGhlIHByb2Nlc3NvciBpcyBpbiB0aGUgUlRBUyBzdG9wcGVkIHN0YXRlCi0gKgkxCS0gc3RvcC1zZWxmIGlzIGluIHByb2dyZXNzCi0gKgkyCS0gVGhlIHByb2Nlc3NvciBpcyBub3QgaW4gdGhlIFJUQVMgc3RvcHBlZCBzdGF0ZQotICoJLTEJLSBIYXJkd2FyZSBFcnJvcgotICoJLTIJLSBIYXJkd2FyZSBCdXN5LCBUcnkgYWdhaW4gbGF0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgcXVlcnlfY3B1X3N0b3BwZWQodW5zaWduZWQgaW50IHBjcHUpCi17Ci0JaW50IGNwdV9zdGF0dXM7Ci0JaW50IHN0YXR1cywgcWNzc190b2s7Ci0KLQlxY3NzX3RvayA9IHJ0YXNfdG9rZW4oInF1ZXJ5LWNwdS1zdG9wcGVkLXN0YXRlIik7Ci0JaWYgKHFjc3NfdG9rID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKQotCQlyZXR1cm4gLTE7Ci0Jc3RhdHVzID0gcnRhc19jYWxsKHFjc3NfdG9rLCAxLCAyLCAmY3B1X3N0YXR1cywgcGNwdSk7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIlJUQVMgcXVlcnktY3B1LXN0b3BwZWQtc3RhdGUgZmFpbGVkOiAlaVxuIiwgc3RhdHVzKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlyZXR1cm4gY3B1X3N0YXR1czsKLX0KLQotc3RhdGljIGludCBwU2VyaWVzX2NwdV9kaXNhYmxlKHZvaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWNwdV9jbGVhcihjcHUsIGNwdV9vbmxpbmVfbWFwKTsKLQl2ZHNvX2RhdGEtPnByb2Nlc3NvckNvdW50LS07Ci0KLQkvKmZpeCBib290X2NwdWlkIGhlcmUqLwotCWlmIChjcHUgPT0gYm9vdF9jcHVpZCkKLQkJYm9vdF9jcHVpZCA9IGFueV9vbmxpbmVfY3B1KGNwdV9vbmxpbmVfbWFwKTsKLQotCS8qIEZJWE1FOiBhYnN0cmFjdCB0aGlzIHRvIG5vdCBiZSBwbGF0Zm9ybSBzcGVjaWZpYyBsYXRlciBvbiAqLwotCXhpY3NfbWlncmF0ZV9pcnFzX2F3YXkoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcFNlcmllc19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCi17Ci0JaW50IHRyaWVzOwotCWludCBjcHVfc3RhdHVzOwotCXVuc2lnbmVkIGludCBwY3B1ID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpOwotCi0JZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgMjU7IHRyaWVzKyspIHsKLQkJY3B1X3N0YXR1cyA9IHF1ZXJ5X2NwdV9zdG9wcGVkKHBjcHUpOwotCQlpZiAoY3B1X3N0YXR1cyA9PSAwIHx8IGNwdV9zdGF0dXMgPT0gLTEpCi0JCQlicmVhazsKLQkJbXNsZWVwKDIwMCk7Ci0JfQotCWlmIChjcHVfc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKCJRdWVyeWluZyBERUFEPyBjcHUgJWkgKCVpKSBzaG93cyAlaVxuIiwKLQkJICAgICAgIGNwdSwgcGNwdSwgY3B1X3N0YXR1cyk7Ci0JfQotCi0JLyogSXNvbGF0aW9uIGFuZCBkZWFsbG9jYXRpb24gYXJlIGRlZmluYXRseSBkb25lIGJ5Ci0JICogZHJzbG90X2NocnBfY3B1LiAgSWYgdGhleSB3ZXJlIG5vdCB0aGV5IHdvdWxkIGJlCi0JICogZG9uZSBoZXJlLiAgQ2hhbmdlIGlzb2xhdGUgc3RhdGUgdG8gSXNvbGF0ZSBhbmQKLQkgKiBjaGFuZ2UgYWxsb2NhdGlvbi1zdGF0ZSB0byBVbnVzYWJsZS4KLQkgKi8KLQlwYWNhW2NwdV0uY3B1X3N0YXJ0ID0gMDsKLX0KLQotLyoKLSAqIFVwZGF0ZSBjcHVfcHJlc2VudF9tYXAgYW5kIHBhY2EocykgZm9yIGEgbmV3IGNwdSBub2RlLiAgVGhlIHdyaW5rbGUKLSAqIGhlcmUgaXMgdGhhdCBhIGNwdSBkZXZpY2Ugbm9kZSBtYXkgcmVwcmVzZW50IHVwIHRvIHR3byBsb2dpY2FsIGNwdXMKLSAqIGluIHRoZSBTTVQgY2FzZS4gIFdlIG11c3QgaG9ub3IgdGhlIGFzc3VtcHRpb24gaW4gb3RoZXIgY29kZSB0aGF0Ci0gKiB0aGUgbG9naWNhbCBpZHMgZm9yIHNpYmxpbmcgU01UIHRocmVhZHMgeCBhbmQgeSBhcmUgYWRqYWNlbnQsIHN1Y2gKLSAqIHRoYXQgeF4xID09IHkgYW5kIHleMSA9PSB4LgotICovCi1zdGF0aWMgaW50IHBTZXJpZXNfYWRkX3Byb2Nlc3NvcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCXVuc2lnbmVkIGludCBjcHU7Ci0JY3B1bWFza190IGNhbmRpZGF0ZV9tYXAsIHRtcCA9IENQVV9NQVNLX05PTkU7Ci0JaW50IGVyciA9IC1FTk9TUEMsIGxlbiwgbnRocmVhZHMsIGk7Ci0JY29uc3QgdTMyICppbnRzZXJ2OwotCi0JaW50c2VydiA9IGdldF9wcm9wZXJ0eShucCwgImlibSxwcGMtaW50ZXJydXB0LXNlcnZlciNzIiwgJmxlbik7Ci0JaWYgKCFpbnRzZXJ2KQotCQlyZXR1cm4gMDsKLQotCW50aHJlYWRzID0gbGVuIC8gc2l6ZW9mKHUzMik7Ci0JZm9yIChpID0gMDsgaSA8IG50aHJlYWRzOyBpKyspCi0JCWNwdV9zZXQoaSwgdG1wKTsKLQotCWxvY2tfY3B1X2hvdHBsdWcoKTsKLQotCUJVR19PTighY3B1c19zdWJzZXQoY3B1X3ByZXNlbnRfbWFwLCBjcHVfcG9zc2libGVfbWFwKSk7Ci0KLQkvKiBHZXQgYSBiaXRtYXAgb2YgdW5vY2N1cGllZCBzbG90cy4gKi8KLQljcHVzX3hvcihjYW5kaWRhdGVfbWFwLCBjcHVfcG9zc2libGVfbWFwLCBjcHVfcHJlc2VudF9tYXApOwotCWlmIChjcHVzX2VtcHR5KGNhbmRpZGF0ZV9tYXApKSB7Ci0JCS8qIElmIHdlIGdldCBoZXJlLCBpdCBtb3N0IGxpa2VseSBtZWFucyB0aGF0IE5SX0NQVVMgaXMKLQkJICogbGVzcyB0aGFuIHRoZSBwYXJ0aXRpb24ncyBtYXggcHJvY2Vzc29ycyBzZXR0aW5nLgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgYWRkIGNwdSAlczsgdGhpcyBzeXN0ZW0gY29uZmlndXJhdGlvbiIKLQkJICAgICAgICIgc3VwcG9ydHMgJWQgbG9naWNhbCBjcHVzLlxuIiwgbnAtPmZ1bGxfbmFtZSwKLQkJICAgICAgIGNwdXNfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXApKTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCXdoaWxlICghY3B1c19lbXB0eSh0bXApKQotCQlpZiAoY3B1c19zdWJzZXQodG1wLCBjYW5kaWRhdGVfbWFwKSkKLQkJCS8qIEZvdW5kIGEgcmFuZ2Ugd2hlcmUgd2UgY2FuIGluc2VydCB0aGUgbmV3IGNwdShzKSAqLwotCQkJYnJlYWs7Ci0JCWVsc2UKLQkJCWNwdXNfc2hpZnRfbGVmdCh0bXAsIHRtcCwgbnRocmVhZHMpOwotCi0JaWYgKGNwdXNfZW1wdHkodG1wKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBmaW5kIHNwYWNlIGluIGNwdV9wcmVzZW50X21hcCBmb3IiCi0JCSAgICAgICAiIHByb2Nlc3NvciAlcyB3aXRoICVkIHRocmVhZChzKVxuIiwgbnAtPm5hbWUsCi0JCSAgICAgICBudGhyZWFkcyk7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIHRtcCkgewotCQlCVUdfT04oY3B1X2lzc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFwKSk7Ci0JCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOwotCQlzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSwgKmludHNlcnYrKyk7Ci0JfQotCWVyciA9IDA7Ci1vdXRfdW5sb2NrOgotCXVubG9ja19jcHVfaG90cGx1ZygpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgdGhlIHByZXNlbnQgbWFwIGZvciBhIGNwdSBub2RlIHdoaWNoIGlzIGdvaW5nIGF3YXksIGFuZCBzZXQKLSAqIHRoZSBoYXJkIGlkIGluIHRoZSBwYWNhKHMpIHRvIC0xIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBib290IHRpbWUKLSAqIGNvbnZlbnRpb24gZm9yIG5vbi1wcmVzZW50IGNwdXMuCi0gKi8KLXN0YXRpYyB2b2lkIHBTZXJpZXNfcmVtb3ZlX3Byb2Nlc3NvcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCXVuc2lnbmVkIGludCBjcHU7Ci0JaW50IGxlbiwgbnRocmVhZHMsIGk7Ci0JY29uc3QgdTMyICppbnRzZXJ2OwotCi0JaW50c2VydiA9IGdldF9wcm9wZXJ0eShucCwgImlibSxwcGMtaW50ZXJydXB0LXNlcnZlciNzIiwgJmxlbik7Ci0JaWYgKCFpbnRzZXJ2KQotCQlyZXR1cm47Ci0KLQludGhyZWFkcyA9IGxlbiAvIHNpemVvZih1MzIpOwotCi0JbG9ja19jcHVfaG90cGx1ZygpOwotCWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKSB7Ci0JCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgewotCQkJaWYgKGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KSAhPSBpbnRzZXJ2W2ldKQotCQkJCWNvbnRpbnVlOwotCQkJQlVHX09OKGNwdV9vbmxpbmUoY3B1KSk7Ci0JCQljcHVfY2xlYXIoY3B1LCBjcHVfcHJlc2VudF9tYXApOwotCQkJc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUsIC0xKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChjcHUgPT0gTlJfQ1BVUykKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNvdWxkIG5vdCBmaW5kIGNwdSB0byByZW1vdmUgIgotCQkJICAgICAgICJ3aXRoIHBoeXNpY2FsIGlkIDB4JXhcbiIsIGludHNlcnZbaV0pOwotCX0KLQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKLX0KLQotc3RhdGljIGludCBwU2VyaWVzX3NtcF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqbm9kZSkKLXsKLQlpbnQgZXJyID0gTk9USUZZX09LOwotCi0Jc3dpdGNoIChhY3Rpb24pIHsKLQljYXNlIFBTRVJJRVNfUkVDT05GSUdfQUREOgotCQlpZiAocFNlcmllc19hZGRfcHJvY2Vzc29yKG5vZGUpKQotCQkJZXJyID0gTk9USUZZX0JBRDsKLQkJYnJlYWs7Ci0JY2FzZSBQU0VSSUVTX1JFQ09ORklHX1JFTU9WRToKLQkJcFNlcmllc19yZW1vdmVfcHJvY2Vzc29yKG5vZGUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIgPSBOT1RJRllfRE9ORTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcFNlcmllc19zbXBfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBwU2VyaWVzX3NtcF9ub3RpZmllciwKLX07Ci0KLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KLQogLyoqCiAgKiBzbXBfc3RhcnR1cF9jcHUoKSAtIHN0YXJ0IHRoZSBnaXZlbiBjcHUKICAqCkBAIC00MjIsMTUgKzIzMSw2IEBACiAKIAlEQkcoIiAtPiBzbXBfaW5pdF9wU2VyaWVzKClcbiIpOwogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0Jc21wX29wcy0+Y3B1X2Rpc2FibGUgPSBwU2VyaWVzX2NwdV9kaXNhYmxlOwotCXNtcF9vcHMtPmNwdV9kaWUgPSBwU2VyaWVzX2NwdV9kaWU7Ci0KLQkvKiBQcm9jZXNzb3JzIGNhbiBiZSBhZGRlZC9yZW1vdmVkIG9ubHkgb24gTFBBUiAqLwotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlwU2VyaWVzX3JlY29uZmlnX25vdGlmaWVyX3JlZ2lzdGVyKCZwU2VyaWVzX3NtcF9uYik7Ci0jZW5kaWYKLQogCS8qIE1hcmsgdGhyZWFkcyB3aGljaCBhcmUgc3RpbGwgc3Bpbm5pbmcgaW4gaG9sZCBsb29wcy4gKi8KIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU01UKSkgewogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShpKSB7IApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggYjViMmIxMS4uODFkMTcyZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC0yMjQsNyArMjI0LDYgQEAKIHN0YXRpYyB2b2lkIHhpY3NfbWFza19yZWFsX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBjYWxsX3N0YXR1czsKLQl1bnNpZ25lZCBpbnQgc2VydmVyOwogCiAJaWYgKGlycSA9PSBYSUNTX0lQSSkKIAkJcmV0dXJuOwpAQCAtMjM2LDkgKzIzNSw5IEBACiAJCXJldHVybjsKIAl9CiAKLQlzZXJ2ZXIgPSBnZXRfaXJxX3NlcnZlcihpcnEpOwogCS8qIEhhdmUgdG8gc2V0IFhJVkUgdG8gMHhmZiB0byBiZSBhYmxlIHRvIHJlbW92ZSBhIHNsb3QgKi8KLQljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1fc2V0X3hpdmUsIDMsIDEsIE5VTEwsIGlycSwgc2VydmVyLCAweGZmKTsKKwljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1fc2V0X3hpdmUsIDMsIDEsIE5VTEwsIGlycSwKKwkJCQlkZWZhdWx0X3NlcnZlciwgMHhmZik7CiAJaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ4aWNzX2Rpc2FibGVfaXJxOiBpcnE9JXU6IGlibV9zZXRfeGl2ZSgweGZmKSIKIAkJICAgICAgICIgcmV0dXJuZWQgJWRcbiIsIGlycSwgY2FsbF9zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKaW5kZXggNmNjMzQ1OS4uMjYyMWE3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCkBAIC01LDEzICs1LDEzIEBACiBvYmotJChDT05GSUdfTVBJQykJCSs9IG1waWMubwogb2JqLSQoQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kpCSs9IGluZGlyZWN0X3BjaS5vCiBvYmotJChDT05GSUdfUFBDX01QQzEwNikJKz0gZ3JhY2tsZS5vCi1vYmotJChDT05GSUdfUFBDX0RDUikJCSs9IGRjci5vIGRjci1sb3cubworb2JqLSQoQ09ORklHX1BQQ19EQ1IpCQkrPSBkY3Iubworb2JqLSQoQ09ORklHX1BQQ19EQ1JfTkFUSVZFKQkrPSBkY3ItbG93Lm8KIG9iai0kKENPTkZJR19VM19EQVJUKQkJKz0gZGFydF9pb21tdS5vCiBvYmotJChDT05GSUdfTU1JT19OVlJBTSkJKz0gbW1pb19udnJhbS5vCiBvYmotJChDT05GSUdfRlNMX1NPQykJCSs9IGZzbF9zb2Mubwogb2JqLSQoQ09ORklHX1RTSTEwOF9CUklER0UpCSs9IHRzaTEwOF9wY2kubyB0c2kxMDhfZGV2Lm8KIG9iai0kKENPTkZJR19RVUlDQ19FTkdJTkUpCSs9IHFlX2xpYi8KLW9iai0kKENPTkZJR19NVEQpCQkrPSByb20ubwogCiBpZmVxICgkKENPTkZJR19QUENfTUVSR0UpLHkpCiBvYmotJChDT05GSUdfUFBDX0k4MjU5KQkJKz0gaTgyNTkubwpAQCAtMjAsNSArMjAsNiBAQAogCiAjIFRlbXBvcmFyeSBoYWNrIHVudGlsIHdlIGhhdmUgbWlncmF0ZWQgdG8gYXNtLXBvd2VycGMKIGlmZXEgKCQoQVJDSCkscG93ZXJwYykKK29iai0kKENPTkZJR19NVEQpCQkrPSByb20ubwogb2JqLSQoQ09ORklHX0NQTTIpCQkrPSBjcG0yX2NvbW1vbi5vIGNwbTJfcGljLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2Rjci5TIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kY3IuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA3OGYzOS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2Rjci5TCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqICJJbmRpcmVjdCIgRENSIGFjY2VzcwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBFdWdlbmUgU3Vyb3ZlZ2luIDxlYnNAZWJzaG9tZS5uZXQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KLSNkZWZpbmUgRENSX0FDQ0VTU19QUk9MT0codGFibGUpIFwKLQlybHdpbm0gIHIzLHIzLDQsMTgsMjc7ICAgXAotCWxpcyAgICAgcjUsdGFibGVAaDsgICAgICBcCi0Jb3JpICAgICByNSxyNSx0YWJsZUBsOyAgIFwKLQlhZGQgICAgIHIzLHIzLHI1OyAgICAgICAgXAotCW10Y3RyICAgcjM7ICAgICAgICAgICAgICBcCi0JYmN0cgotCi1fR0xPQkFMKF9fbWZkY3IpCi0JRENSX0FDQ0VTU19QUk9MT0coX19tZmRjcl90YWJsZSkKLQotX0dMT0JBTChfX210ZGNyKQotCURDUl9BQ0NFU1NfUFJPTE9HKF9fbXRkY3JfdGFibGUpCi0KLV9fbWZkY3JfdGFibGU6Ci0JbWZkY3IgIHIzLDA7IGJscgotX19tdGRjcl90YWJsZToKLQltdGRjciAgMCxyNDsgYmxyCi0KLWRjciAgICAgPSAxCi0gICAgICAgIC5yZXB0ICAgMTAyMwotCW1mZGNyICAgcjMsZGNyOyBibHIKLQltdGRjciAgIGRjcixyNDsgYmxyCi0JZGNyICAgICA9IGRjciArIDEKLQkuZW5kcgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tbWlvX252cmFtLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYwppbmRleCBmZjIzZjVhLi5lMDczZTI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYwpAQCAtODAsMzMgKzgwLDM5IEBACiBpbnQgX19pbml0IG1taW9fbnZyYW1faW5pdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnZyYW1fbm9kZTsKLQljb25zdCB1bnNpZ25lZCBsb25nICpidWZmZXI7Ci0JaW50IHByb3BsZW47CiAJdW5zaWduZWQgbG9uZyBudnJhbV9hZGRyOworCXN0cnVjdCByZXNvdXJjZSByOwogCWludCByZXQ7CiAKLQlyZXQgPSAtRU5PREVWOwogCW52cmFtX25vZGUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAibnZyYW0iKTsKLQlpZiAoIW52cmFtX25vZGUpCi0JCWdvdG8gb3V0OworCWlmICghbnZyYW1fbm9kZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJudnJhbTogbm8gbm9kZSBmb3VuZCBpbiBkZXZpY2UtdHJlZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotCXJldCA9IC1FSU87Ci0JYnVmZmVyID0gZ2V0X3Byb3BlcnR5KG52cmFtX25vZGUsICJyZWciLCAmcHJvcGxlbik7Ci0JaWYgKHByb3BsZW4gIT0gMipzaXplb2YodW5zaWduZWQgbG9uZykpCisJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShudnJhbV9ub2RlLCAwLCAmcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJudnJhbTogZmFpbGVkIHRvIGdldCBhZGRyZXNzIChlcnIgJWQpXG4iLAorCQkgICAgICAgcmV0KTsKIAkJZ290byBvdXQ7Ci0KLQlyZXQgPSAtRU5PREVWOwotCW52cmFtX2FkZHIgPSBidWZmZXJbMF07Ci0JbW1pb19udnJhbV9sZW4gPSBidWZmZXJbMV07Ci0JaWYgKCAoIW1taW9fbnZyYW1fbGVuKSB8fCAoIW52cmFtX2FkZHIpICkKKwl9CisJbnZyYW1fYWRkciA9IHIuc3RhcnQ7CisJbW1pb19udnJhbV9sZW4gPSByLmVuZCAtIHIuc3RhcnQgKyAxOworCWlmICggKCFtbWlvX252cmFtX2xlbikgfHwgKCFudnJhbV9hZGRyKSApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibnZyYW06IGFkZHJlc3Mgb3IgbGVuZ2h0IGlzIDBcbiIpOworCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKKwl9CiAKIAltbWlvX252cmFtX3N0YXJ0ID0gaW9yZW1hcChudnJhbV9hZGRyLCBtbWlvX252cmFtX2xlbik7Ci0JaWYgKCFtbWlvX252cmFtX3N0YXJ0KQorCWlmICghbW1pb19udnJhbV9zdGFydCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJudnJhbTogZmFpbGVkIHRvIGlvcmVtYXBcbiIpOworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKKwl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJtbWlvIE5WUkFNLCAlbHVrIG1hcHBlZCB0byAlcFxuIiwKLQkgICAgICAgbW1pb19udnJhbV9sZW4gPj4gMTAsIG1taW9fbnZyYW1fc3RhcnQpOworCXByaW50ayhLRVJOX0lORk8gIm1taW8gTlZSQU0sICVsdWsgYXQgMHglbHggbWFwcGVkIHRvICVwXG4iLAorCSAgICAgICBtbWlvX252cmFtX2xlbiA+PiAxMCwgbnZyYW1fYWRkciwgbW1pb19udnJhbV9zdGFydCk7CiAKIAlwcGNfbWQubnZyYW1fcmVhZAk9IG1taW9fbnZyYW1fcmVhZDsKIAlwcGNfbWQubnZyYW1fd3JpdGUJPSBtbWlvX252cmFtX3dyaXRlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwppbmRleCA0MTE0ODBkLi5kMDFjZWQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwpAQCAtMzkwLDcgKzM5MCw3IEBACiAJCXU4IGlkID0gcmVhZGIoZGV2YmFzZSArIHBvcyArIFBDSV9DQVBfTElTVF9JRCk7CiAJCWlmIChpZCA9PSBQQ0lfQ0FQX0lEX0hUKSB7CiAJCQlpZCA9IHJlYWRiKGRldmJhc2UgKyBwb3MgKyAzKTsKLQkJCWlmIChpZCA9PSBIVF9DQVBUWVBFX0lSUSkKKwkJCWlmICgoaWQgJiBIVF81QklUX0NBUF9NQVNLKSA9PSBIVF9DQVBUWVBFX0lSUSkKIAkJCQlicmVhazsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCmluZGV4IDY5OTVmNTEuLjc0ZTQ4ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYwpAQCAtMjIzLDIzICsyMjMsMTUgQEAKIAlxZV9pY193cml0ZShxZV9pYy0+cmVncywgcWVfaWNfaW5mb1tzcmNdLm1hc2tfcmVnLAogCQkgICAgdGVtcCAmIH5xZV9pY19pbmZvW3NyY10ubWFzayk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZV9pY19sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHFlX2ljX21hc2tfaXJxX2FuZF9hY2sodW5zaWduZWQgaW50IHZpcnEpCi17Ci0Jc3RydWN0IHFlX2ljICpxZV9pYyA9IHFlX2ljX2Zyb21faXJxKHZpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KHZpcnEpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHRlbXA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcWVfaWNfbG9jaywgZmxhZ3MpOwotCi0JdGVtcCA9IHFlX2ljX3JlYWQocWVfaWMtPnJlZ3MsIHFlX2ljX2luZm9bc3JjXS5tYXNrX3JlZyk7Ci0JcWVfaWNfd3JpdGUocWVfaWMtPnJlZ3MsIHFlX2ljX2luZm9bc3JjXS5tYXNrX3JlZywKLQkJICAgIHRlbXAgJiB+cWVfaWNfaW5mb1tzcmNdLm1hc2spOwotCi0JLyogVGhlcmUgaXMgbm90aGluZyB0byBkbyBmb3IgYWNrIGhlcmUsIGFjayBpcyBoYW5kbGVkIGluIElTUiAqLworCS8qIEZsdXNoIHRoZSBhYm92ZSB3cml0ZSBiZWZvcmUgZW5hYmxpbmcgaW50ZXJydXB0czsgb3RoZXJ3aXNlLAorCSAqIHNwdXJpb3VzIGludGVycnVwdHMgd2lsbCBzb21ldGltZXMgaGFwcGVuLiAgVG8gYmUgMTAwJSBzdXJlCisJICogdGhhdCB0aGUgd3JpdGUgaGFzIHJlYWNoZWQgdGhlIGRldmljZSBiZWZvcmUgaW50ZXJydXB0cyBhcmUKKwkgKiBlbmFibGVkLCB0aGUgbWFzayByZWdpc3RlciB3b3VsZCBoYXZlIHRvIGJlIHJlYWQgYmFjazsgaG93ZXZlciwKKwkgKiB0aGlzIGlzIG5vdCByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MsIG9ubHkgdG8gYXZvaWQgd2FzdGluZworCSAqIHRpbWUgb24gYSBsYXJnZSBudW1iZXIgb2Ygc3B1cmlvdXMgaW50ZXJydXB0cy4gIEluIHRlc3RpbmcsCisJICogYSBzeW5jIHJlZHVjZWQgdGhlIG9ic2VydmVkIHNwdXJpb3VzIGludGVycnVwdHMgdG8gemVyby4KKwkgKi8KKwltYigpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWVfaWNfbG9jaywgZmxhZ3MpOwogfQpAQCAtMjQ4LDcgKzI0MCw3IEBACiAJLnR5cGVuYW1lID0gIiBRRUlDICAiLAogCS51bm1hc2sgPSBxZV9pY191bm1hc2tfaXJxLAogCS5tYXNrID0gcWVfaWNfbWFza19pcnEsCi0JLm1hc2tfYWNrID0gcWVfaWNfbWFza19pcnFfYW5kX2FjaywKKwkubWFza19hY2sgPSBxZV9pY19tYXNrX2lycSwKIH07CiAKIHN0YXRpYyBpbnQgcWVfaWNfaG9zdF9tYXRjaChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKQEAgLTMzMSwzNCArMzIzLDIyIEBACiAJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKHFlX2ljLT5pcnFob3N0LCBpcnEpOwogfQogCi0vKiBGSVhNRTogV2UgbWFzayBhbGwgdGhlIFFFIExvdyBpbnRlcnJ1cHRzIHdoaWxlIGhhbmRsaW5nLiAgV2Ugc2hvdWxkCi0gKiBsZXQgb3RoZXIgaW50ZXJydXB0IGNvbWUgaW4sIGJ1dCBCQUQgaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkICovCiB2b2lkIGZhc3RjYWxsIHFlX2ljX2Nhc2NhZGVfbG93KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgcWVfaWMgKnFlX2ljID0gZGVzYy0+aGFuZGxlcl9kYXRhOwotCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kZXNjW2lycV0uY2hpcDsKLQogCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycSA9IHFlX2ljX2dldF9sb3dfaXJxKHFlX2ljKTsKIAotCWNoaXAtPm1hc2tfYWNrKGlycSk7CiAJaWYgKGNhc2NhZGVfaXJxICE9IE5PX0lSUSkKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxKTsKLQljaGlwLT51bm1hc2soaXJxKTsKIH0KIAotLyogRklYTUU6IFdlIG1hc2sgYWxsIHRoZSBRRSBIaWdoIGludGVycnVwdHMgd2hpbGUgaGFuZGxpbmcuICBXZSBzaG91bGQKLSAqIGxldCBvdGhlciBpbnRlcnJ1cHQgY29tZSBpbiwgYnV0IEJBRCBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQgKi8KIHZvaWQgZmFzdGNhbGwgcWVfaWNfY2FzY2FkZV9oaWdoKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgcWVfaWMgKnFlX2ljID0gZGVzYy0+aGFuZGxlcl9kYXRhOwotCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kZXNjW2lycV0uY2hpcDsKLQogCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycSA9IHFlX2ljX2dldF9oaWdoX2lycShxZV9pYyk7CiAKLQljaGlwLT5tYXNrX2FjayhpcnEpOwogCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCiAJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7Ci0JY2hpcC0+dW5tYXNrKGlycSk7CiB9CiAKIHZvaWQgX19pbml0IHFlX2ljX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3JvbS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9yb20uYwppbmRleCBiZjViM2YxLi5jODU1YTNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3JvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcm9tLmMKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL29mX3BsYXRmb3JtLmg+CiAKIHN0YXRpYyBpbnQgX19pbml0IHBvd2VycGNfZmxhc2hfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCmluZGV4IGEzNGVkNDkuLjc3NTQwYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KQEAgLTM1LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vcnRhcy5oPgogI2luY2x1ZGUgPGFzbS9zc3RlcC5oPgotI2luY2x1ZGUgPGFzbS9idWcuaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3NwdV9wcml2MS5oPgpAQCAtMTM0Niw3ICsxMzQ2LDcgQEAKIAogc3RhdGljIHZvaWQgcHJpbnRfYnVnX3RyYXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGJ1Z19lbnRyeSAqYnVnOworCWNvbnN0IHN0cnVjdCBidWdfZW50cnkgKmJ1ZzsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlpZiAocmVncy0+bXNyICYgTVNSX1BSKQpAQCAtMTM1NywxMSArMTM1NywxMSBAQAogCWJ1ZyA9IGZpbmRfYnVnKHJlZ3MtPm5pcCk7CiAJaWYgKGJ1ZyA9PSBOVUxMKQogCQlyZXR1cm47Ci0JaWYgKGJ1Zy0+bGluZSAmIEJVR19XQVJOSU5HX1RSQVApCisJaWYgKGlzX3dhcm5pbmdfYnVnKGJ1ZykpCiAJCXJldHVybjsKIAotCXByaW50Zigia2VybmVsIEJVRyBpbiAlcyBhdCAlczolZCFcbiIsCi0JICAgICAgIGJ1Zy0+ZnVuY3Rpb24sIGJ1Zy0+ZmlsZSwgKHVuc2lnbmVkIGludClidWctPmxpbmUpOworCXByaW50Zigia2VybmVsIEJVRyBhdCAlczoldSFcbiIsCisJICAgICAgIGJ1Zy0+ZmlsZSwgYnVnLT5saW5lKTsKIH0KIAogdm9pZCBleGNwcmludChzdHJ1Y3QgcHRfcmVncyAqZnApCmRpZmYgLS1naXQgYS9hcmNoL3BwYy84MjYwX2lvL2ZjY19lbmV0LmMgYi9hcmNoL3BwYy84MjYwX2lvL2ZjY19lbmV0LmMKaW5kZXggNzA5OTUyYy4uMDZiODRjMyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvODI2MF9pby9mY2NfZW5ldC5jCisrKyBiL2FyY2gvcHBjLzgyNjBfaW8vZmNjX2VuZXQuYwpAQCAtMTg5MiwxMCArMTg5MiwxMCBAQAogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgYnVmZmVyIGRlc2NyaXB0b3JzIGZyb20gcmVndWxhciBtZW1vcnkuCiAJICogSW5pdGlhbGl6ZSBiYXNlIGFkZHJlc3NlcyBmb3IgdGhlIGJ1ZmZlciBkZXNjcmlwdG9ycy4KIAkgKi8KLQljZXAtPnJ4X2JkX2Jhc2UgPSAoY2JkX3QgKilrbWFsbG9jKHNpemVvZihjYmRfdCkgKiBSWF9SSU5HX1NJWkUsCisJY2VwLT5yeF9iZF9iYXNlID0ga21hbGxvYyhzaXplb2YoY2JkX3QpICogUlhfUklOR19TSVpFLAogCQkJR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWVwLT5mZW5fZ2VuZmNjLmZjY19yYmFzZSA9IF9fcGEoY2VwLT5yeF9iZF9iYXNlKTsKLQljZXAtPnR4X2JkX2Jhc2UgPSAoY2JkX3QgKilrbWFsbG9jKHNpemVvZihjYmRfdCkgKiBUWF9SSU5HX1NJWkUsCisJY2VwLT50eF9iZF9iYXNlID0ga21hbGxvYyhzaXplb2YoY2JkX3QpICogVFhfUklOR19TSVpFLAogCQkJR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWVwLT5mZW5fZ2VuZmNjLmZjY190YmFzZSA9IF9fcGEoY2VwLT50eF9iZF9iYXNlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvOHh4X2lvL2NzNDIxOF90ZG0uYyBiL2FyY2gvcHBjLzh4eF9pby9jczQyMThfdGRtLmMKaW5kZXggOTU5ZDMxYy4uYjdiYjVmMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvOHh4X2lvL2NzNDIxOF90ZG0uYworKysgYi9hcmNoL3BwYy84eHhfaW8vY3M0MjE4X3RkbS5jCkBAIC0yMTY1LDcgKzIxNjUsNyBAQAogCWludCByYyA9IDA7CiAKIAlpZiAoc3EuYnVzeSkKLQkJcmMgPSBzcV9mc3luYyhmaWxlLCBmaWxlLT5mX2RlbnRyeSk7CisJCXJjID0gc3FfZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJc291bmQuc29mdCA9IHNvdW5kLmRzcDsKIAlzb3VuZC5oYXJkID0gc291bmQuZHNwOwogCXNvdW5kX3NpbGVuY2UoKTsKQEAgLTIyMTgsMjUgKzIyMTgsMjUgQEAKIAkJcmV0dXJuIDA7CiAJY2FzZSBTTkRDVExfRFNQX1BPU1Q6CiAJY2FzZSBTTkRDVExfRFNQX1NZTkM6Ci0JCXJldHVybiBzcV9mc3luYyhmaWxlLCBmaWxlLT5mX2RlbnRyeSk7CisJCXJldHVybiBzcV9mc3luYyhmaWxlLCBmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAogCQkvKiArK1RlU2NoZTogYmVmb3JlIGNoYW5naW5nIGFueSBvZiB0aGVzZSBpdCdzCiAJCSAqIHByb2JhYmx5IHdpc2UgdG8gd2FpdCB1bnRpbCBzb3VuZCBwbGF5aW5nIGhhcwogCQkgKiBzZXR0bGVkIGRvd24uICovCiAJY2FzZSBTTkRDVExfRFNQX1NQRUVEOgotCQlzcV9mc3luYyhmaWxlLCBmaWxlLT5mX2RlbnRyeSk7CisJCXNxX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCQlJT0NUTF9JTihhcmcsIGRhdGEpOwogCQlyZXR1cm4gSU9DVExfT1VUKGFyZywgc291bmRfc2V0X3NwZWVkKGRhdGEpKTsKIAljYXNlIFNORENUTF9EU1BfU1RFUkVPOgotCQlzcV9mc3luYyhmaWxlLCBmaWxlLT5mX2RlbnRyeSk7CisJCXNxX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCQlJT0NUTF9JTihhcmcsIGRhdGEpOwogCQlyZXR1cm4gSU9DVExfT1VUKGFyZywgc291bmRfc2V0X3N0ZXJlbyhkYXRhKSk7CiAJY2FzZSBTT1VORF9QQ01fV1JJVEVfQ0hBTk5FTFM6Ci0JCXNxX2ZzeW5jKGZpbGUsIGZpbGUtPmZfZGVudHJ5KTsKKwkJc3FfZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCUlPQ1RMX0lOKGFyZywgZGF0YSk7CiAJCXJldHVybiBJT0NUTF9PVVQoYXJnLCBzb3VuZF9zZXRfc3RlcmVvKGRhdGEtMSkrMSk7CiAJY2FzZSBTTkRDVExfRFNQX1NFVEZNVDoKLQkJc3FfZnN5bmMoZmlsZSwgZmlsZS0+Zl9kZW50cnkpOworCQlzcV9mc3luYyhmaWxlLCBmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAkJSU9DVExfSU4oYXJnLCBkYXRhKTsKIAkJcmV0dXJuIElPQ1RMX09VVChhcmcsIHNvdW5kX3NldF9mb3JtYXQoZGF0YSkpOwogCWNhc2UgU05EQ1RMX0RTUF9HRVRGTVRTOgpAQCAtMjYwMSw3ICsyNjAxLDcgQEAKIAkvKiBJbml0aWFsaXplIGJlZXAgc3R1ZmYgKi8KIAlvcmlnX21rc291bmQgPSBrZF9ta3NvdW5kOwogCWtkX21rc291bmQgPSBjc19ta3NvdW5kOwotCWJlZXBfYnVmID0gKHNob3J0ICopIGttYWxsb2MoQkVFUF9CVUZMRU4gKiA0LCBHRlBfS0VSTkVMKTsKKwliZWVwX2J1ZiA9IGttYWxsb2MoQkVFUF9CVUZMRU4gKiA0LCBHRlBfS0VSTkVMKTsKIAlpZiAoYmVlcF9idWYgPT0gTlVMTCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiZG1hc291bmQ6IG5vIG1lbW9yeSBmb3IgIgogCQkgICAgICAgImJlZXAgYnVmZmVyXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL0tjb25maWcgYi9hcmNoL3BwYy9LY29uZmlnCmluZGV4IGVkZjcxYTQuLjhlYjgyZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL0tjb25maWcKKysrIGIvYXJjaC9wcGMvS2NvbmZpZwpAQCAtMTksNiArMTksMTQgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKKwlib29sCisJZGVmYXVsdCBuCisKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCiAJZGVmYXVsdCB5CkBAIC01Miw2ICs2MCwxMSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfQlVHCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQlVHCisKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCiBtZW51ICJQcm9jZXNzb3IiCkBAIC02MTEsNyArNjI0LDcgQEAKIAkgIFNlbGVjdCBIRFBVIGlmIGNvbmZpZ3VyaW5nIGEgU2t5IENvbXB1dGVycyBDb21wdXRlIEJsYWRlLgogCiBjb25maWcgSERQVV9GRUFUVVJFUwotCWRlcGVuZHMgSERQVQorCWRlcGVuZHMgb24gSERQVQogCXRyaXN0YXRlICJIRFBVLUZlYXR1cmVzIgogCWhlbHAKIAkgIFNlbGVjdCB0byBlbmFibGUgSERQVSBlbmhhbmNlZCBmZWF0dXJlcy4KQEAgLTcyMiw3ICs3MzUsNyBAQAogCiBjb25maWcgTElURTUyMDBCCiAJYm9vbCAiRnJlZXNjYWxlIExJVEU1MjAwQiIKLQlkZXBlbmRzIExJVEU1MjAwCisJZGVwZW5kcyBvbiBMSVRFNTIwMAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBMSVRFNTIwMEIgZGV2IGJvYXJkIGZvciB0aGUgTVBDNTIwMCBmcm9tIEZyZWVzY2FsZS4KIAkgIFRoaXMgaXMgdGhlIG5ldyBib2FyZCB3aXRoIDIgUENJIHNsb3RzLgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BjaS5jIGIvYXJjaC9wcGMva2VybmVsL3BjaS5jCmluZGV4IDYzODA4ZTAuLjVlNzIzYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcGNpLmMKQEAgLTg3OSw3ICs4NzksNyBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKl9fcGNpX21tYXBfbWFrZV9vZmZzZXQoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm9mZnNldCwKKwkJCQkJICAgICAgIHJlc291cmNlX3NpemVfdCAqb2Zmc2V0LAogCQkJCQkgICAgICAgZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zZShkZXYtPmJ1cy0+bnVtYmVyKTsKQEAgLTg5MSw3ICs4OTEsOSBAQAogCiAJLyogSWYgbWVtb3J5LCBhZGQgb24gdGhlIFBDSSBicmlkZ2UgYWRkcmVzcyBvZmZzZXQgKi8KIAlpZiAobW1hcF9zdGF0ZSA9PSBwY2lfbW1hcF9tZW0pIHsKKyNpZiAwIC8qIFNlZSBjb21tZW50IGluIHBjaV9yZXNvdXJjZV90b191c2VyKCkgZm9yIHdoeSB0aGlzIGlzIGRpc2FibGVkICovCiAJCSpvZmZzZXQgKz0gaG9zZS0+cGNpX21lbV9vZmZzZXQ7CisjZW5kaWYKIAkJcmVzX2JpdCA9IElPUkVTT1VSQ0VfTUVNOwogCX0gZWxzZSB7CiAJCWlvX29mZnNldCA9IGhvc2UtPmlvX2Jhc2VfdmlydCAtIF9fX0lPX0JBU0U7CkBAIC0xMDMwLDcgKzEwMzIsNyBAQAogCQkJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLAogCQkJaW50IHdyaXRlX2NvbWJpbmUpCiB7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJwOwogCWludCByZXQ7CiAKQEAgLTExMzIsMjEgKzExMzQsNDIgQEAKIAkJCSAgcmVzb3VyY2Vfc2l6ZV90ICpzdGFydCwgcmVzb3VyY2Vfc2l6ZV90ICplbmQpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3NlKGRldi0+YnVzLT5udW1iZXIpOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKKwlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0gMDsKIAogCWlmIChob3NlID09IE5VTEwpCiAJCXJldHVybjsKIAogCWlmIChyc3JjLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCW9mZnNldCA9IF9fX0lPX0JBU0UgLSBob3NlLT5pb19iYXNlX3ZpcnQgKyBob3NlLT5pb19iYXNlX3BoeXM7CisJCW9mZnNldCA9ICh1bnNpZ25lZCBsb25nKWhvc2UtPmlvX2Jhc2VfdmlydCAtIF9JT19CQVNFOwogCi0JKnN0YXJ0ID0gcnNyYy0+c3RhcnQgKyBvZmZzZXQ7Ci0JKmVuZCA9IHJzcmMtPmVuZCArIG9mZnNldDsKKwkvKiBXZSBwYXNzIGEgZnVsbHkgZml4ZWQgdXAgYWRkcmVzcyB0byB1c2VybGFuZCBmb3IgTU1JTyBpbnN0ZWFkIG9mCisJICogYSBCQVIgdmFsdWUgYmVjYXVzZSBYIGlzIGxhbWUgYW5kIGV4cGVjdHMgdG8gYmUgYWJsZSB0byB1c2UgdGhhdAorCSAqIHRvIHBhc3MgdG8gL2Rldi9tZW0gIQorCSAqCisJICogVGhhdCBtZWFucyB0aGF0IHdlJ2xsIGhhdmUgcG90ZW50aWFsbHkgNjQgYml0cyB2YWx1ZXMgd2hlcmUgc29tZQorCSAqIHVzZXJsYW5kIGFwcHMgb25seSBleHBlY3QgMzIgKGxpa2UgWCBpdHNlbGYgc2luY2UgaXQgdGhpbmtzIG9ubHkKKwkgKiBTcGFyYyBoYXMgNjQgYml0cyBNTUlPKSBidXQgaWYgd2UgZG9uJ3QgZG8gdGhhdCwgd2UgYnJlYWsgaXQgb24KKwkgKiAzMiBiaXRzIENIUlBzIDotKAorCSAqCisJICogSG9wZWZ1bGx5LCB0aGUgc3lzZnMgaW5zdGVyZmFjZSBpcyBpbW11bmUgdG8gdGhhdCBndW5rLiBPbmNlIFgKKwkgKiBoYXMgYmVlbiBmaXhlZCAoYW5kIHRoZSBmaXggc3ByZWFkIGVub3VnaCksIHdlIGNhbiByZS1lbmFibGUgdGhlCisJICogMiBsaW5lcyBiZWxvdyBhbmQgcGFzcyBkb3duIGEgQkFSIHZhbHVlIHRvIHVzZXJsYW5kLiBJbiB0aGF0IGNhc2UKKwkgKiB3ZSdsbCBhbHNvIGhhdmUgdG8gcmUtZW5hYmxlIHRoZSBtYXRjaGluZyBjb2RlIGluCisJICogX19wY2lfbW1hcF9tYWtlX29mZnNldCgpLgorCSAqCisJICogQmVuSC4KKwkgKi8KKyNpZiAwCisJZWxzZSBpZiAocnNyYy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkKKwkJb2Zmc2V0ID0gaG9zZS0+cGNpX21lbV9vZmZzZXQ7CisjZW5kaWYKKworCSpzdGFydCA9IHJzcmMtPnN0YXJ0IC0gb2Zmc2V0OworCSplbmQgPSByc3JjLT5lbmQgLSBvZmZzZXQ7CiB9CiAKLXZvaWQgX19pbml0Ci1wY2lfaW5pdF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCSAgaW50IGZsYWdzLCBjaGFyICpuYW1lKQordm9pZCBfX2luaXQgcGNpX2luaXRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzdGFydCwKKwkJCSAgICAgIHJlc291cmNlX3NpemVfdCBlbmQsIGludCBmbGFncywgY2hhciAqbmFtZSkKIHsKIAlyZXMtPnN0YXJ0ID0gc3RhcnQ7CiAJcmVzLT5lbmQgPSBlbmQ7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDJmODM1YjkuLjgxMGY3YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC01NTksNjQgKzU2MCw5IEBACiAJfQogfQogCi0vKgotICogTG9vayB0aHJvdWdoIHRoZSBsaXN0IG9mIHRyYXAgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIHVzZWQgZm9yIEJVRygpLAotICogQlVHX09OKCkgYW5kIFdBUk5fT04oKSBhbmQgc2VlIGlmIHdlIGhpdCBvbmUuICBBdCB0aGlzIHBvaW50IHdlIGtub3cKLSAqIHRoYXQgdGhlIGV4Y2VwdGlvbiB3YXMgY2F1c2VkIGJ5IGEgdHJhcCBpbnN0cnVjdGlvbiBvZiBzb21lIGtpbmQuCi0gKiBSZXR1cm5zIDEgaWYgd2Ugc2hvdWxkIGNvbnRpbnVlIChpLmUuIGl0IHdhcyBhIFdBUk5fT04pIG9yIDAKLSAqIG90aGVyd2lzZS4KLSAqLwotZXh0ZXJuIHN0cnVjdCBidWdfZW50cnkgX19zdGFydF9fX2J1Z190YWJsZVtdLCBfX3N0b3BfX19idWdfdGFibGVbXTsKLQotI2lmbmRlZiBDT05GSUdfTU9EVUxFUwotI2RlZmluZSBtb2R1bGVfZmluZF9idWcoeCkJTlVMTAotI2VuZGlmCi0KLXN0cnVjdCBidWdfZW50cnkgKmZpbmRfYnVnKHVuc2lnbmVkIGxvbmcgYnVnYWRkcikKK2ludCBpc192YWxpZF9idWdhZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlzdHJ1Y3QgYnVnX2VudHJ5ICpidWc7Ci0KLQlmb3IgKGJ1ZyA9IF9fc3RhcnRfX19idWdfdGFibGU7IGJ1ZyA8IF9fc3RvcF9fX2J1Z190YWJsZTsgKytidWcpCi0JCWlmIChidWdhZGRyID09IGJ1Zy0+YnVnX2FkZHIpCi0JCQlyZXR1cm4gYnVnOwotCXJldHVybiBtb2R1bGVfZmluZF9idWcoYnVnYWRkcik7Ci19Ci0KLWludCBjaGVja19idWdfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgYnVnX2VudHJ5ICpidWc7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCi0JaWYgKHJlZ3MtPm1zciAmIE1TUl9QUikKLQkJcmV0dXJuIDA7CS8qIG5vdCBpbiBrZXJuZWwgKi8KLQlhZGRyID0gcmVncy0+bmlwOwkvKiBhZGRyZXNzIG9mIHRyYXAgaW5zdHJ1Y3Rpb24gKi8KLQlpZiAoYWRkciA8IFBBR0VfT0ZGU0VUKQotCQlyZXR1cm4gMDsKLQlidWcgPSBmaW5kX2J1ZyhyZWdzLT5uaXApOwotCWlmIChidWcgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGJ1Zy0+bGluZSAmIEJVR19XQVJOSU5HX1RSQVApIHsKLQkJLyogdGhpcyBpcyBhIFdBUk5fT04gcmF0aGVyIHRoYW4gQlVHL0JVR19PTiAqLwotI2lmZGVmIENPTkZJR19YTU9OCi0JCXhtb25fcHJpbnRmKEtFUk5fRVJSICJCYWRuZXNzIGluICVzIGF0ICVzOiVsZFxuIiwKLQkJICAgICAgIGJ1Zy0+ZnVuY3Rpb24sIGJ1Zy0+ZmlsZSwKLQkJICAgICAgIGJ1Zy0+bGluZSAmIH5CVUdfV0FSTklOR19UUkFQKTsKLSNlbmRpZiAvKiBDT05GSUdfWE1PTiAqLwkJCi0JCXByaW50ayhLRVJOX0VSUiAiQmFkbmVzcyBpbiAlcyBhdCAlczolbGRcbiIsCi0JCSAgICAgICBidWctPmZ1bmN0aW9uLCBidWctPmZpbGUsCi0JCSAgICAgICBidWctPmxpbmUgJiB+QlVHX1dBUk5JTkdfVFJBUCk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIDE7Ci0JfQotI2lmZGVmIENPTkZJR19YTU9OCi0JeG1vbl9wcmludGYoS0VSTl9DUklUICJrZXJuZWwgQlVHIGluICVzIGF0ICVzOiVsZCFcbiIsCi0JICAgICAgIGJ1Zy0+ZnVuY3Rpb24sIGJ1Zy0+ZmlsZSwgYnVnLT5saW5lKTsKLQl4bW9uKHJlZ3MpOwotI2VuZGlmIC8qIENPTkZJR19YTU9OICovCi0JcHJpbnRrKEtFUk5fQ1JJVCAia2VybmVsIEJVRyBpbiAlcyBhdCAlczolbGQhXG4iLAotCSAgICAgICBidWctPmZ1bmN0aW9uLCBidWctPmZpbGUsIGJ1Zy0+bGluZSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYWRkciA+PSBQQUdFX09GRlNFVDsKIH0KIAogdm9pZCBwcm9ncmFtX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTY3MSw3ICs2MTcsOSBAQAogCQkvKiB0cmFwIGV4Y2VwdGlvbiAqLwogCQlpZiAoZGVidWdnZXJfYnB0KHJlZ3MpKQogCQkJcmV0dXJuOwotCQlpZiAoY2hlY2tfYnVnX3RyYXAocmVncykpIHsKKworCQlpZiAoIShyZWdzLT5tc3IgJiBNU1JfUFIpICYmICAvKiBub3QgdXNlci1tb2RlICovCisJCSAgICByZXBvcnRfYnVnKHJlZ3MtPm5pcCkgPT0gQlVHX1RSQVBfVFlQRV9XQVJOKSB7CiAJCQlyZWdzLT5uaXAgKz0gNDsKIAkJCXJldHVybjsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9LY29uZmlnIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9LY29uZmlnCmluZGV4IDI5M2JkNDguLjY5ODBkZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvS2NvbmZpZworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L0tjb25maWcKQEAgLTE4OSw3ICsxODksNyBAQAogIyBPQUsgZG9lc24ndCBleGlzdCBidXQgd2FudGVkIHRvIGtlZXAgdGhpcyBhcm91bmQgZm9yIGFueSBmdXR1cmUgNDAzR0NYIGJvYXJkcwogY29uZmlnIDQwM0dDWAogCWJvb2wKLQlkZXBlbmRzIE9BSworCWRlcGVuZHMgb24gT0FLCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyA0MDVFUApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQzNjAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MzYwLmMKaW5kZXggOTBlZDM3NS4uZjg3ZTA2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQzNjAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDM2MC5jCkBAIC0zNTgsMTMgKzM1OCwxMiBAQAogCiAJcHRibF9lbnRyaWVzID0gMzsKIAotCWlmICgocHRibCA9IGttYWxsb2MocHRibF9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBtdGRfcGFydGl0aW9uKSwKKwlpZiAoKHB0YmwgPSBremFsbG9jKHB0YmxfZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbXRkX3BhcnRpdGlvbiksCiAJCUdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgYWxsb2MgTVREIHBhcnRpdGlvbiB0YWJsZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQocHRibCwgMCwgcHRibF9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBtdGRfcGFydGl0aW9uKSk7CiAKIAlwdGJsWzBdLm5hbWUgPSAicmVzZXJ2ZWQiOwogCXB0YmxbMF0ub2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggNTgzZDlmZi4uMTIyNzIzNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTIyLDYgKzIyLDE0IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0CisJYm9vbAorCWRlZmF1bHQgbgorCiBjb25maWcgR0VORVJJQ19IV0VJR0hUCiAJYm9vbAogCWRlZmF1bHQgeQpAQCAtMjMzLDggKzI0MSwxNCBAQAogCSAgVGhpcyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIG1heGltdW0gZnJhbWUgc2l6ZSBhIGZ1bmN0aW9uIG1heQogCSAgaGF2ZSB3aXRob3V0IHRoZSBjb21waWxlciBjb21wbGFpbmluZyBhYm91dCBpdC4KIAorY29uZmlnIEFSQ0hfUE9QVUxBVEVTX05PREVfTUFQCisJZGVmX2Jvb2wgeQorCiBzb3VyY2UgIm1tL0tjb25maWciCiAKK2NvbmZpZyBIT0xFU19JTl9aT05FCisJZGVmX2Jvb2wgeQorCiBjb21tZW50ICJJL08gc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb24iCiAKIGNvbmZpZyBNQUNIQ0hLX1dBUk5JTkcKQEAgLTI1OCwxNCArMjcyLDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAotY29uZmlnIFFESU9fUEVSRl9TVEFUUwotCWJvb2wgIlBlcmZvcm1hbmNlIHN0YXRpc3RpY3MgaW4gL3Byb2MiCi0JZGVwZW5kcyBvbiBRRElPCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBnZXQgcGVyZm9ybWFuY2Ugc3RhdGlzdGljcyBpbiAvcHJvYy9xZGlvX3BlcmYKLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIFFESU9fREVCVUcKIAlib29sICJFeHRlbmRlZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24iCiAJZGVwZW5kcyBvbiBRRElPCkBAIC00MDEsNyArNDA3LDcgQEAKIAogY29uZmlnIEFQUExEQVRBX01FTQogCXRyaXN0YXRlICJNb25pdG9yIG1lbW9yeSBtYW5hZ2VtZW50IHN0YXRpc3RpY3MiCi0JZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFCisJZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFICYmIFZNX0VWRU5UX0NPVU5URVJTCiAJaGVscAogCSAgVGhpcyBwcm92aWRlcyBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGRhdGEgdG8gdGhlIExpbnV4IC0gVk0gTW9uaXRvcgogCSAgU3RyZWFtLCBsaWtlIHBhZ2luZy9zd2FwcGluZyByYXRlLCBtZW1vcnkgdXRpbGlzYXRpb24sIGV0Yy4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9kZWZjb25maWcgYi9hcmNoL3MzOTAvZGVmY29uZmlnCmluZGV4IDdjZDUxZTcuLjUzNjhjZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9kZWZjb25maWcKKysrIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjMgotIyBXZWQgT2N0IDE4IDE3OjExOjEwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzEKKyMgRnJpIERlYyAxNSAxNjo1MjoyOCAyMDA2CiAjCiBDT05GSUdfTU1VPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19TMzkwPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkBAIC0zNywxMiArMzgsMTMgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApAQCAtMTE5LDYgKzEyMSw3IEBACiBDT05GSUdfQ0hFQ0tfU1RBQ0s9eQogQ09ORklHX1NUQUNLX0dVQVJEPTI1NgogIyBDT05GSUdfV0FSTl9TVEFDSyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTI4LDEzICsxMzEsMTMgQEAKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQorQ09ORklHX0hPTEVTX0lOX1pPTkU9eQogCiAjCiAjIEkvTyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbgogIwogQ09ORklHX01BQ0hDSEtfV0FSTklORz15CiBDT05GSUdfUURJTz15Ci0jIENPTkZJR19RRElPX1BFUkZfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfUURJT19ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTE5Nyw2ICsyMDAsNyBAQAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQogIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldApAQCAtMjEyLDcgKzIxNiw2IEBACiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPXkKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfU1VCVFJFRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC0yNDcsNiArMjUwLDcgQEAKICMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCiAjCiBDT05GSUdfTkVUX1NDSEVEPXkKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQogQ09ORklHX05FVF9TQ0hfQ0xLX0pJRkZJRVM9eQogIyBDT05GSUdfTkVUX1NDSF9DTEtfR0VUVElNRU9GREFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hfQ0xLX0NQVSBpcyBub3Qgc2V0CkBAIC0yNzgsNiArMjgyLDcgQEAKIENPTkZJR19ORVRfQ0xTX0ZXPW0KIENPTkZJR19ORVRfQ0xTX1UzMj1tCiAjIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAorQ09ORklHX0NMU19VMzJfTUFSSz15CiBDT05GSUdfTkVUX0NMU19SU1ZQPW0KIENPTkZJR19ORVRfQ0xTX1JTVlA2PW0KICMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldApAQCAtMzE2LDYgKzMyMSw3IEBACiAjCiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX05FVExJTks9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTMzNiw2ICszNDIsNyBAQAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNTQ3LDYgKzU1NCw3IEBACiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtNTcyLDcgKzU4MCw3IEBACiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC02MTcsNyArNjI1LDYgQEAKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0FDTD15CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC02NDcsNiArNjU0LDE0IEBACiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworQ09ORklHX0RMTT1tCitDT05GSUdfRExNX1RDUD15CisjIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAorCisjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CiAjCiAKQEAgLTY2NCw2ICs2NzksOCBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorQ09ORklHX0hFQURFUlNfQ0hFQ0s9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CkBAIC02ODAsMTMgKzY5NywxMSBAQAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotQ09ORklHX0hFQURFUlNfQ0hFQ0s9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAKQEAgLTcwMCwxMCArNzE1LDExIEBACiAjIENyeXB0b2dyYXBoaWMgb3B0aW9ucwogIwogQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CkBAIC03MTQsOCArNzMwLDEwIEBACiAjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0RFU19TMzkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CkBAIC03NDEsOCArNzU5LDEwIEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPW0KICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9bQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwppbmRleCA0NDNmYTM3Li4yNzgyY2Y5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKQEAgLTM3OSw3ICszNzksNyBAQAogc3RhdGljIHZvaWQgKmRpYWcyMDRfYWxsb2NfcmJ1Zih2b2lkKQogewogCWRpYWcyMDRfYnVmID0gKHZvaWQqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwwKTsKLQlpZiAoZGlhZzIwNF9idWYpCisJaWYgKCFkaWFnMjA0X2J1ZikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJZGlhZzIwNF9idWZfcGFnZXMgPSAxOwogCXJldHVybiBkaWFnMjA0X2J1ZjsKQEAgLTUyMSw3ICs1MjEsNyBAQAogCX0KIAlyYyA9IGRpYWcyMjRfZ2V0X25hbWVfdGFibGUoKTsKIAlpZiAocmMpIHsKLQkJZGlhZzIyNF9kZWxldGVfbmFtZV90YWJsZSgpOworCQlkaWFnMjA0X2ZyZWVfYnVmZmVyKCk7CiAJCXByaW50ayhLRVJOX0VSUiAiaHlwZnM6IGNvdWxkIG5vdCBnZXQgbmFtZSB0YWJsZS5cbiIpOwogCX0KIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYyBiL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCmluZGV4IGNkNzAyYWUuLmI2NzE2YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAogc3RhdGljIGludCBoeXBmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWNoYXIgKmRhdGEgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOworCWNoYXIgKmRhdGEgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CiAJc3RydWN0IGh5cGZzX3NiX2luZm8gKmZzX2luZm87CiAKIAlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKQEAgLTE3NCw3ICsxNzQsNyBAQAogCXN0cnVjdCBoeXBmc19zYl9pbmZvICpmc19pbmZvOwogCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKIAotCXNiID0gaW9jYi0+a2lfZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2I7CisJc2IgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NiOwogCWZzX2luZm8gPSBzYi0+c19mc19pbmZvOwogCS8qCiAJICogQ3VycmVudGx5IHdlIG9ubHkgYWxsb3cgb25lIHVwZGF0ZSBwZXIgc2Vjb25kIGZvciB0d28gcmVhc29uczoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYwppbmRleCA0M2YzZDBjLi5iYjU3YmMwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCkBAIC0xOTEsMTMgKzE5MSwxMyBAQAogCWRlYnVnX2VudHJ5X3QqKiogYXJlYXM7CiAJaW50IGksajsKIAotCWFyZWFzID0gKGRlYnVnX2VudHJ5X3QgKioqKSBrbWFsbG9jKG5yX2FyZWFzICoKKwlhcmVhcyA9IGttYWxsb2MobnJfYXJlYXMgKgogCQkJCQlzaXplb2YoZGVidWdfZW50cnlfdCoqKSwKIAkJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFhcmVhcykKIAkJZ290byBmYWlsX21hbGxvY19hcmVhczsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfYXJlYXM7IGkrKykgewotCQlhcmVhc1tpXSA9IChkZWJ1Z19lbnRyeV90KiopIGttYWxsb2MocGFnZXNfcGVyX2FyZWEgKgorCQlhcmVhc1tpXSA9IGttYWxsb2MocGFnZXNfcGVyX2FyZWEgKgogCQkJCXNpemVvZihkZWJ1Z19lbnRyeV90KiksR0ZQX0tFUk5FTCk7CiAJCWlmICghYXJlYXNbaV0pIHsKIAkJCWdvdG8gZmFpbF9tYWxsb2NfYXJlYXMyOwpAQCAtMjQyLDcgKzI0Miw3IEBACiAKIAkvKiBhbGxvYyBldmVyeXRoaW5nICovCiAKLQlyYyA9IChkZWJ1Z19pbmZvX3QqKSBrbWFsbG9jKHNpemVvZihkZWJ1Z19pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwlyYyA9IGttYWxsb2Moc2l6ZW9mKGRlYnVnX2luZm9fdCksIEdGUF9LRVJORUwpOwogCWlmKCFyYykKIAkJZ290byBmYWlsX21hbGxvY19yYzsKIAlyYy0+YWN0aXZlX2VudHJpZXMgPSBrY2FsbG9jKG5yX2FyZWFzLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CkBAIC02MDMsMTMgKzYwMywxMyBAQAogCWRlYnVnX2luZm9fdCAqZGVidWdfaW5mbywgKmRlYnVnX2luZm9fc25hcHNob3Q7CiAKIAlkb3duKCZkZWJ1Z19sb2NrKTsKLQlkZWJ1Z19pbmZvID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKKwlkZWJ1Z19pbmZvID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCS8qIGZpbmQgZGVidWcgdmlldyAqLwogCWZvciAoaSA9IDA7IGkgPCBERUJVR19NQVhfVklFV1M7IGkrKykgewogCQlpZiAoIWRlYnVnX2luZm8tPnZpZXdzW2ldKQogCQkJY29udGludWU7CiAJCWVsc2UgaWYgKGRlYnVnX2luZm8tPmRlYnVnZnNfZW50cmllc1tpXSA9PQotCQkJIGZpbGUtPmZfZGVudHJ5KSB7CisJCQkgZmlsZS0+Zl9wYXRoLmRlbnRyeSkgewogCQkJZ290byBmb3VuZDsJLyogZm91bmQgdmlldyAhICovCiAJCX0KIAl9CkBAIC02MzQsNyArNjM0LDcgQEAKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0JcF9pbmZvID0gKGZpbGVfcHJpdmF0ZV9pbmZvX3QgKikga21hbGxvYyhzaXplb2YoZmlsZV9wcml2YXRlX2luZm9fdCksCisJcF9pbmZvID0ga21hbGxvYyhzaXplb2YoZmlsZV9wcml2YXRlX2luZm9fdCksCiAJCQkJCQlHRlBfS0VSTkVMKTsKIAlpZighcF9pbmZvKXsKIAkJaWYoZGVidWdfaW5mb19zbmFwc2hvdCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCmluZGV4IDQzODhiMzMuLmVjYTUwNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwpAQCAtMTY0LDExICsxNjQsMTQgQEAKIAlzcmwJJXI3LDI4CiAJY2xyCSVyNiwlcjcJCQkjIGNvbXBhcmUgY2Mgd2l0aCBsYXN0IGFjY2VzcyBjb2RlCiAJYmUJLkxzYW1lLS5MUEcxKCVyMTMpCi0JYgkuTGNoa21lbS0uTFBHMSglcjEzKQorCWxoaQklcjgsMAkJCSMgbm8gcHJvZ3JhbSBjaGVja3MKKwliCS5Mc2F2Y2hrLS5MUEcxKCVyMTMpCiAuTHNhbWU6CiAJYXIJJXI1LCVyMQkJCSMgYWRkIDEyOEtCIHRvIGVuZCBvZiBjaHVuawogCWJubwkuTGxvb3AtLkxQRzEoJXIxMykJIyByMSA8IDB4ODAwMDAwMDAgLT4gbG9vcAogLkxjaGttZW06CQkJCSMgPiAyR0Igb3IgdHByb3QgZ290IGEgcHJvZ3JhbSBjaGVjaworCWxoaQklcjgsMQkJCSMgc2V0IHByb2dyYW0gY2hlY2sgZmxhZworLkxzYXZjaGs6CiAJY2xyCSVyNCwlcjUJCQkjIGNodW5rIHNpemUgPiAwPwogCWJlCS5MY2hrbG9vcC0uTFBHMSglcjEzKQogCXN0CSVyNCwwKCVyMykJCSMgc3RvcmUgc3RhcnQgYWRkcmVzcyBvZiBjaHVuawpAQCAtMTkwLDggKzE5MywxNSBAQAogCWplCS5MZG9uZW1lbQkJIyBpZiBub3QsIGxlYXZlCiAJY2hpCSVyMTAsMAkJCSMgZG8gd2UgaGF2ZSBjaHVua3MgbGVmdD8KIAlqZQkuTGRvbmVtZW0KKwljaGkJJXI4LDEJCQkjIHByb2dyYW0gY2hlY2sgPworCWplCS5McGdtY2hrCisJbHIJJXI0LCVyNQkJCSMgcG90ZW50aWFsIG5ldyBjaHVuaworCWFscgklcjUsJXIxCQkJIyBhZGQgMTI4S0IgdG8gZW5kIG9mIGNodW5rCisJagkuTGxwY250CisuTHBnbWNoazoKIAlhbHIJJXI1LCVyMQkJCSMgYWRkIDEyOEtCIHRvIGVuZCBvZiBjaHVuawogCWxyCSVyNCwlcjUJCQkjIHBvdGVudGlhbCBuZXcgY2h1bmsKKy5MbHBjbnQ6CiAJY2xyCSVyNSwlcjkJCQkjIHNob3VsZCB3ZSBnbyBvbj8KIAlqbAkuTGxvb3AKIC5MZG9uZW1lbToKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCmluZGV4IGM1MjYyNzllMS4uNmJhM2Y0NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCkBAIC0xNzIsMTIgKzE3MiwxNSBAQAogCXNybAklcjcsMjgKIAljbHIJJXI2LCVyNwkJCSMgY29tcGFyZSBjYyB3aXRoIGxhc3QgYWNjZXNzIGNvZGUKIAlqZQkuTHNhbWUKLQlqCS5MY2hrbWVtCisJbGdoaQklcjgsMAkJCSMgbm8gcHJvZ3JhbSBjaGVja3MKKwlqCS5Mc2F2Y2hrCiAuTHNhbWU6CiAJYWxncgklcjUsJXIxCQkJIyBhZGQgMTI4S0IgdG8gZW5kIG9mIGNodW5rCiAJCQkJCSMgbm8gbmVlZCB0byBjaGVjayBoZXJlLAogCWJyYwkxMiwuTGxvb3AJCSMgdGhpcyBpcyB0aGUgc2FtZSBjaHVuawogLkxjaGttZW06CQkJCSMgPiAxNkVCIG9yIHRwcm90IGdvdCBhIHByb2dyYW0gY2hlY2sKKwlsZ2hpCSVyOCwxCQkJIyBzZXQgcHJvZ3JhbSBjaGVjayBmbGFnCisuTHNhdmNoazoKIAljbGdyCSVyNCwlcjUJCQkjIGNodW5rIHNpemUgPiAwPwogCWplCS5MY2hrbG9vcAogCXN0ZwklcjQsMCglcjMpCQkjIHN0b3JlIHN0YXJ0IGFkZHJlc3Mgb2YgY2h1bmsKQEAgLTIwNCw4ICsyMDcsMTUgQEAKIAljaGkJJXIxMCwgMAkJCSMgZG8gd2UgaGF2ZSBjaHVua3MgbGVmdD8KIAlqZQkuTGRvbmVtZW0KIC5MaHNhc2tpcDoKKwljaGkJJXI4LDEJCQkjIHByb2dyYW0gY2hlY2sgPworCWplCS5McGdtY2hrCisJbGdyCSVyNCwlcjUJCQkjIHBvdGVudGlhbCBuZXcgY2h1bmsKKwlhbGdyCSVyNSwlcjEJCQkjIGFkZCAxMjhLQiB0byBlbmQgb2YgY2h1bmsKKwlqCS5MbHBjbnQKKy5McGdtY2hrOgogCWFsZ3IJJXI1LCVyMQkJCSMgYWRkIDEyOEtCIHRvIGVuZCBvZiBjaHVuawogCWxncgklcjQsJXI1CQkJIyBwb3RlbnRpYWwgbmV3IGNodW5rCisuTGxwY250OgogCWNsZ3IJJXI1LCVyOQkJCSMgc2hvdWxkIHdlIGdvIG9uPwogCWpsCS5MbG9vcAogLkxkb25lbWVtOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggYTM2YmVhMS4uOWU5OTcyZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC02MDksNDIgKzYwOSwxMiBAQAogc3RhdGljIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlIG9uX3BhbmljX2F0dHIgPQogCQlfX0FUVFIob25fcGFuaWMsIDA2NDQsIG9uX3BhbmljX3Nob3csIG9uX3BhbmljX3N0b3JlKTsKIAotc3RhdGljIHZvaWQgcHJpbnRfZmNwX2Jsb2NrKHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpmY3BfYmxvY2spCi17Ci0JcHJpbnRrKEtFUk5fRU1FUkcgInd3cG46ICAgICAgJTAxNmxseFxuIiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZylmY3BfYmxvY2stPmlwbF9pbmZvLmZjcC53d3BuKTsKLQlwcmludGsoS0VSTl9FTUVSRyAibHVuOiAgICAgICAlMDE2bGx4XG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWZjcF9ibG9jay0+aXBsX2luZm8uZmNwLmx1bik7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgImJvb3Rwcm9nOiAgJWxsZFxuIiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZylmY3BfYmxvY2stPmlwbF9pbmZvLmZjcC5ib290cHJvZyk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgImJyX2xiYTogICAgJWxsZFxuIiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZylmY3BfYmxvY2stPmlwbF9pbmZvLmZjcC5icl9sYmEpOwotCXByaW50ayhLRVJOX0VNRVJHICJkZXZpY2U6ICAgICVsbHhcbiIsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpZmNwX2Jsb2NrLT5pcGxfaW5mby5mY3AuZGV2bm8pOwotCXByaW50ayhLRVJOX0VNRVJHICJvcHQ6ICAgICAgICV4XG4iLCBmY3BfYmxvY2stPmlwbF9pbmZvLmZjcC5vcHQpOwotfQotCiB2b2lkIGRvX3JlaXBsKHZvaWQpCiB7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2aWQ7CiAJc3RhdGljIGNoYXIgYnVmWzEwMF07CiAJY2hhciBsb2FkcGFybVtMT0FEUEFSTV9MRU4gKyAxXTsKIAotCXN3aXRjaCAocmVpcGxfdHlwZSkgewotCWNhc2UgSVBMX1RZUEVfQ0NXOgotCQlyZWlwbF9nZXRfYXNjaWlfbG9hZHBhcm0obG9hZHBhcm0pOwotCQlwcmludGsoS0VSTl9FTUVSRyAicmVib290IG9uIGNjdyBkZXZpY2U6IDAuMC4lMDR4XG4iLAotCQkJcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm8pOwotCQlwcmludGsoS0VSTl9FTUVSRyAibG9hZHBhcm0gPSAnJXMnXG4iLCBsb2FkcGFybSk7Ci0JCWJyZWFrOwotCWNhc2UgSVBMX1RZUEVfRkNQOgotCQlwcmludGsoS0VSTl9FTUVSRyAicmVib290IG9uIGZjcCBkZXZpY2U6XG4iKTsKLQkJcHJpbnRfZmNwX2Jsb2NrKHJlaXBsX2Jsb2NrX2ZjcCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQogCXN3aXRjaCAocmVpcGxfbWV0aG9kKSB7CiAJY2FzZSBJUExfTUVUSE9EX0NDV19DSU86CiAJCWRldmlkLmRldm5vID0gcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm87CkBAIC02NTQsNiArNjI0LDcgQEAKIAkJcmVpcGxfY2N3X2RldigmZGV2aWQpOwogCQlicmVhazsKIAljYXNlIElQTF9NRVRIT0RfQ0NXX1ZNOgorCQlyZWlwbF9nZXRfYXNjaWlfbG9hZHBhcm0obG9hZHBhcm0pOwogCQlpZiAoc3RybGVuKGxvYWRwYXJtKSA9PSAwKQogCQkJc3ByaW50ZihidWYsICJJUEwgJVgiLAogCQkJCXJlaXBsX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmRldm5vKTsKQEAgLTY4Myw3ICs2NTQsNiBAQAogCQlkaWFnMzA4KERJQUczMDhfSVBMLCBOVUxMKTsKIAkJYnJlYWs7CiAJfQotCXByaW50ayhLRVJOX0VNRVJHICJyZWJvb3QgZmFpbGVkIVxuIik7CiAJc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcF9hbmRfc3RvcmVfc3RhdHVzKTsKIH0KIApAQCAtNjkyLDE5ICs2NjIsNiBAQAogCXN0cnVjdCBjY3dfZGV2X2lkIGRldmlkOwogCXN0YXRpYyBjaGFyIGJ1ZlsxMDBdOwogCi0Jc3dpdGNoIChkdW1wX3R5cGUpIHsKLQljYXNlIElQTF9UWVBFX0NDVzoKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIkF1dG9tYXRpYyBkdW1wIG9uIGNjdyBkZXZpY2U6IDAuMC4lMDR4XG4iLAotCQkgICAgICAgZHVtcF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubyk7Ci0JCWJyZWFrOwotCWNhc2UgSVBMX1RZUEVfRkNQOgotCQlwcmludGsoS0VSTl9FTUVSRyAiQXV0b21hdGljIGR1bXAgb24gZmNwIGRldmljZTpcbiIpOwotCQlwcmludF9mY3BfYmxvY2soZHVtcF9ibG9ja19mY3ApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCiAJc3dpdGNoIChkdW1wX21ldGhvZCkgewogCWNhc2UgSVBMX01FVEhPRF9DQ1dfQ0lPOgogCQlzbXBfc2VuZF9zdG9wKCk7CkBAIC0xMDM3LDE1ICs5OTQsMjEgQEAKIH0KIAogZXh0ZXJuIHZvaWQgcmVzZXRfbWNja19oYW5kbGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVzZXRfcGdtX2hhbmRsZXIodm9pZCk7CitleHRlcm4gX191MzIgZHVtcF9wcmVmaXhfcGFnZTsKIAogdm9pZCBzMzkwX3Jlc2V0X3N5c3RlbSh2b2lkKQogewogCXN0cnVjdCBfbG93Y29yZSAqbGM7CiAKLQkvKiBTdGFjayBmb3IgaW50ZXJydXB0L21hY2hpbmUgY2hlY2sgaGFuZGxlciAqLwogCWxjID0gKHN0cnVjdCBfbG93Y29yZSAqKSh1bnNpZ25lZCBsb25nKSBzdG9yZV9wcmVmaXgoKTsKKworCS8qIFN0YWNrIGZvciBpbnRlcnJ1cHQvbWFjaGluZSBjaGVjayBoYW5kbGVyICovCiAJbGMtPnBhbmljX3N0YWNrID0gUzM5MF9sb3djb3JlLnBhbmljX3N0YWNrOwogCisJLyogU2F2ZSBwcmVmaXggcGFnZSBhZGRyZXNzIGZvciBkdW1wIGNhc2UgKi8KKwlkdW1wX3ByZWZpeF9wYWdlID0gKHVuc2lnbmVkIGxvbmcpIGxjOworCiAJLyogRGlzYWJsZSBwcmVmaXhpbmcgKi8KIAlzZXRfcHJlZml4KDApOwogCkBAIC0xMDU2LDUgKzEwMTksMTEgQEAKIAlTMzkwX2xvd2NvcmUubWNja19uZXdfcHN3Lm1hc2sgPSBQU1dfS0VSTkVMX0JJVFMgJiB+UFNXX01BU0tfTUNIRUNLOwogCVMzOTBfbG93Y29yZS5tY2NrX25ld19wc3cuYWRkciA9CiAJCVBTV19BRERSX0FNT0RFIHwgKHVuc2lnbmVkIGxvbmcpICZyZXNldF9tY2NrX2hhbmRsZXI7CisKKwkvKiBTZXQgbmV3IHByb2dyYW0gY2hlY2sgaGFuZGxlciAqLworCVMzOTBfbG93Y29yZS5wcm9ncmFtX25ld19wc3cubWFzayA9IFBTV19LRVJORUxfQklUUyAmIH5QU1dfTUFTS19NQ0hFQ0s7CisJUzM5MF9sb3djb3JlLnByb2dyYW1fbmV3X3Bzdy5hZGRyID0KKwkJUFNXX0FERFJfQU1PREUgfCAodW5zaWduZWQgbG9uZykgJnJlc2V0X3BnbV9oYW5kbGVyOworCiAJZG9fcmVzZXRfY2FsbHMoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUwppbmRleCBmOTQzNGQ0Li5jM2Y0ZDliIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbC5TCkBAIC0xNiw3ICsxNiw3IEBACiAJCXN0bQklcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEKIAkJc3RjdGwJJWMwLCVjMTUsX19MQ19DUkVHU19TQVZFX0FSRUEKIAkJc3RhbQklYTAsJWExNSxfX0xDX0FSRUdTX1NBVkVfQVJFQQotCQlzdHB4CV9fTENfUFJFRklYX1NBVkVfQVJFQQorCQltdmMJX19MQ19QUkVGSVhfU0FWRV9BUkVBKDQpLGR1bXBfcHJlZml4X3BhZ2UtLkxwZzAoJXIxMykKIAkJc3Rja2MJLkxjbGtjbXAtLkxwZzAoJXIxMykKIAkJbXZjCV9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEoOCksLkxjbGtjbXAtLkxwZzAoJXIxMykKIAkJc3RwdAlfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEKQEAgLTc5LDMgKzc5LDcgQEAKIAkJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCiAJCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMAogCQkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkuZ2xvYmwgZHVtcF9wcmVmaXhfcGFnZQorZHVtcF9wcmVmaXhfcGFnZToKKwkubG9uZyAweDAwMDAwMDAwCisKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKaW5kZXggZjE4ZWYyNi4uZGJiM2VlZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKQEAgLTIwLDcgKzIwLDcgQEAKIAkJc3RnCSVyMCxfX0xDX0dQUkVHU19TQVZFX0FSRUEtMHgxMDAwKzgoJXIxKQogCQlzdGN0ZwklYzAsJWMxNSxfX0xDX0NSRUdTX1NBVkVfQVJFQS0weDEwMDAoJXIxKQogCQlzdGFtCSVhMCwlYTE1LF9fTENfQVJFR1NfU0FWRV9BUkVBLTB4MTAwMCglcjEpCi0JCXN0cHgJX19MQ19QUkVGSVhfU0FWRV9BUkVBLTB4MTAwMCglcjEpCisJCW12YwlfX0xDX1BSRUZJWF9TQVZFX0FSRUEtMHgxMDAwKDQsJXIxKSxkdW1wX3ByZWZpeF9wYWdlLS5McGcwKCVyMTMpCiAJCXN0ZnBjCV9fTENfRlBfQ1JFR19TQVZFX0FSRUEtMHgxMDAwKCVyMSkKIAkJc3Rja2MJLkxjbGtjbXAtLkxwZzAoJXIxMykKIAkJbXZjCV9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEtMHgxMDAwKDgsJXIxKSwuTGNsa2NtcC0uTHBnMCglcjEzKQpAQCAtMTAzLDMgKzEwMyw2IEBACiAJCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMAogCQkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKIAkJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmdsb2JsIGR1bXBfcHJlZml4X3BhZ2UKK2R1bXBfcHJlZml4X3BhZ2U6CisJLmxvbmcgMHgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZXNldC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZXNldC5TCmluZGV4IGJlODY4OGMuLjhhODczNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVzZXQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3Jlc2V0LlMKQEAgLTMsNiArMyw3IEBACiAgKgogICogICAgQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMjAwNgogICogICAgQXV0aG9yKHMpOiBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KKyAqCQkgTWljaGFlbCBIb2x6aGV1IDxob2x6aGV1QGRlLmlibS5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTI3LDYgKzI4LDI2IEBACiBzMzkwX3Jlc2V0X21jY2tfaGFuZGxlcjoKIAkucXVhZAkwCiAKKwkuZ2xvYmwJcmVzZXRfcGdtX2hhbmRsZXIKK3Jlc2V0X3BnbV9oYW5kbGVyOgorCXN0bWcJJXIwLCVyMTUsX19MQ19TQVZFX0FSRUEKKwliYXNyCSVyMTMsMAorMDoJbGcJJXIxNSxfX0xDX1BBTklDX1NUQUNLCSMgbG9hZCBwYW5pYyBzdGFjaworCWFnaGkJJXIxNSwtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlsZwklcjEsczM5MF9yZXNldF9wZ21faGFuZGxlci0wYiglcjEzKQorCWx0Z3IJJXIxLCVyMQorCWp6CTFmCisJYmFzcgklcjE0LCVyMQorCWxtZwklcjAsJXIxNSxfX0xDX1NBVkVfQVJFQQorCWxwc3dlCV9fTENfUEdNX09MRF9QU1cKKzE6CWxwc3dlCWRpc2FibGVkX3dhaXRfcHN3LTBiKCVyMTMpCisJLmdsb2JsIHMzOTBfcmVzZXRfcGdtX2hhbmRsZXIKK3MzOTBfcmVzZXRfcGdtX2hhbmRsZXI6CisJLnF1YWQJMAorCS5hbGlnbgk4CitkaXNhYmxlZF93YWl0X3BzdzoKKwkucXVhZAkweDAwMDIwMDAxODAwMDAwMDAsMHgwMDAwMDAwMDAwMDAwMDAwICsgcmVzZXRfcGdtX2hhbmRsZXIKKwogI2Vsc2UgLyogQ09ORklHXzY0QklUICovCiAKIAkuZ2xvYmwJcmVzZXRfbWNja19oYW5kbGVyCkBAIC00NSw0ICs2NiwyNSBAQAogczM5MF9yZXNldF9tY2NrX2hhbmRsZXI6CiAJLmxvbmcJMAogCisJLmdsb2JsCXJlc2V0X3BnbV9oYW5kbGVyCityZXNldF9wZ21faGFuZGxlcjoKKwlzdG0JJXIwLCVyMTUsX19MQ19TQVZFX0FSRUEKKwliYXNyCSVyMTMsMAorMDoJbAklcjE1LF9fTENfUEFOSUNfU1RBQ0sJIyBsb2FkIHBhbmljIHN0YWNrCisJYWhpCSVyMTUsLVNUQUNLX0ZSQU1FX09WRVJIRUFECisJbAklcjEsczM5MF9yZXNldF9wZ21faGFuZGxlci0wYiglcjEzKQorCWx0cgklcjEsJXIxCisJanoJMWYKKwliYXNyCSVyMTQsJXIxCisJbG0JJXIwLCVyMTUsX19MQ19TQVZFX0FSRUEKKwlscHN3CV9fTENfUEdNX09MRF9QU1cKKworMToJbHBzdwlkaXNhYmxlZF93YWl0X3Bzdy0wYiglcjEzKQorCS5nbG9ibAlzMzkwX3Jlc2V0X3BnbV9oYW5kbGVyCitzMzkwX3Jlc2V0X3BnbV9oYW5kbGVyOgorCS5sb25nCTAKK2Rpc2FibGVkX3dhaXRfcHN3OgorCS5hbGlnbiA4CisJLmxvbmcJMHgwMDBhMDAwMCwweDAwMDAwMDAwICsgcmVzZXRfcGdtX2hhbmRsZXIKKwogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2V4dC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2V4dC5jCmluZGV4IDRmYWY5NmYuLmJjNWJlYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvczM5MF9leHQuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfZXh0LmMKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgZXh0X2ludF9pbmZvX3QgKnA7CiAgICAgICAgIGludCBpbmRleDsKIAotCXAgPSAoZXh0X2ludF9pbmZvX3QgKikga21hbGxvYyhzaXplb2YoZXh0X2ludF9pbmZvX3QpLCBHRlBfQVRPTUlDKTsKKwlwID0ga21hbGxvYyhzaXplb2YoZXh0X2ludF9pbmZvX3QpLCBHRlBfQVRPTUlDKTsKICAgICAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKICAgICAgICAgcC0+Y29kZSA9IGNvZGU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggYjkyOGZlYy4uNWQ4ZWUzYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNjQsOSArNjQsOCBAQAogdW5zaWduZWQgaW50IGNvbnNvbGVfaXJxID0gLTE7CiB1bnNpZ25lZCBsb25nIG1hY2hpbmVfZmxhZ3MgPSAwOwogCi1zdHJ1Y3QgbWVtX2NodW5rIG1lbW9yeV9jaHVua1tNRU1PUllfQ0hVTktTXTsKK3N0cnVjdCBtZW1fY2h1bmsgX19pbml0ZGF0YSBtZW1vcnlfY2h1bmtbTUVNT1JZX0NIVU5LU107CiB2b2xhdGlsZSBpbnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107IC8qIGxvZ2ljYWwgY3B1IHRvIGNwdSBhZGRyZXNzICovCi11bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgemhvbGVzX3NpemVbTUFYX05SX1pPTkVTXTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbWVtb3J5X2VuZDsKIAogLyoKQEAgLTM1NCwyMSArMzUzLDYgQEAKICAqLwogdm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBtYWNoaW5lX3Bvd2VyX29mZjsKIAotc3RhdGljIHZvaWQgX19pbml0Ci1hZGRfbWVtb3J5X2hvbGUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JdW5zaWduZWQgbG9uZyBkbWFfcGZuID0gTUFYX0RNQV9BRERSRVNTID4+IFBBR0VfU0hJRlQ7Ci0KLQlpZiAoZW5kIDw9IGRtYV9wZm4pCi0JCXpob2xlc19zaXplW1pPTkVfRE1BXSArPSBlbmQgLSBzdGFydCArIDE7Ci0JZWxzZSBpZiAoc3RhcnQgPiBkbWFfcGZuKQotCQl6aG9sZXNfc2l6ZVtaT05FX05PUk1BTF0gKz0gZW5kIC0gc3RhcnQgKyAxOwotCWVsc2UgewotCQl6aG9sZXNfc2l6ZVtaT05FX0RNQV0gKz0gZG1hX3BmbiAtIHN0YXJ0ICsgMTsKLQkJemhvbGVzX3NpemVbWk9ORV9OT1JNQUxdICs9IGVuZCAtIGRtYV9wZm47Ci0JfQotfQotCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9wYXJzZV9tZW0oY2hhciAqcCkKIHsKIAltZW1vcnlfZW5kID0gbWVtcGFyc2UocCwgJnApOwpAQCAtNDkyLDcgKzQ3Niw3IEBACiAJaW50IGk7CiAKIAltZW1vcnlfc2l6ZSA9IHJlYWxfc2l6ZSA9IDA7Ci0JbWF4X3BoeXMgPSBWTUFMTE9DX0VORCAtIFZNQUxMT0NfTUlOX1NJWkU7CisJbWF4X3BoeXMgPSBWTUFMTE9DX0VORF9JTklUIC0gVk1BTExPQ19NSU5fU0laRTsKIAltZW1vcnlfZW5kICY9IFBBR0VfTUFTSzsKIAogCW1heF9tZW0gPSBtZW1vcnlfZW5kID8gbWluKG1heF9waHlzLCBtZW1vcnlfZW5kKSA6IG1heF9waHlzOwpAQCAtNTIxLDcgKzUwNSw2IEBACiB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYm9vdG1hcF9zaXplOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuLCBpbml0X3BmbjsKLQl1bnNpZ25lZCBsb25nIGxhc3RfcndfZW5kOwogCWludCBpOwogCiAJLyoKQEAgLTU3NywzOSArNTYwLDI3IEBACiAJLyoKIAkgKiBSZWdpc3RlciBSQU0gYXJlYXMgd2l0aCB0aGUgYm9vdG1lbSBhbGxvY2F0b3IuCiAJICovCi0JbGFzdF9yd19lbmQgPSBzdGFydF9wZm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUyAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2NodW5rLCBlbmRfY2h1bms7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfY2h1bmssIGVuZF9jaHVuaywgcGZuOwogCiAJCWlmIChtZW1vcnlfY2h1bmtbaV0udHlwZSAhPSBDSFVOS19SRUFEX1dSSVRFKQogCQkJY29udGludWU7Ci0JCXN0YXJ0X2NodW5rID0gKG1lbW9yeV9jaHVua1tpXS5hZGRyICsgUEFHRV9TSVpFIC0gMSk7Ci0JCXN0YXJ0X2NodW5rID4+PSBQQUdFX1NISUZUOwotCQllbmRfY2h1bmsgPSAobWVtb3J5X2NodW5rW2ldLmFkZHIgKyBtZW1vcnlfY2h1bmtbaV0uc2l6ZSk7Ci0JCWVuZF9jaHVuayA+Pj0gUEFHRV9TSElGVDsKLQkJaWYgKHN0YXJ0X2NodW5rIDwgc3RhcnRfcGZuKQotCQkJc3RhcnRfY2h1bmsgPSBzdGFydF9wZm47Ci0JCWlmIChlbmRfY2h1bmsgPiBlbmRfcGZuKQotCQkJZW5kX2NodW5rID0gZW5kX3BmbjsKLQkJaWYgKHN0YXJ0X2NodW5rIDwgZW5kX2NodW5rKSB7Ci0JCQkvKiBJbml0aWFsaXplIHN0b3JhZ2Uga2V5IGZvciBSQU0gcGFnZXMgKi8KLQkJCWZvciAoaW5pdF9wZm4gPSBzdGFydF9jaHVuayA7IGluaXRfcGZuIDwgZW5kX2NodW5rOwotCQkJICAgICBpbml0X3BmbisrKQotCQkJCXBhZ2Vfc2V0X3N0b3JhZ2Vfa2V5KGluaXRfcGZuIDw8IFBBR0VfU0hJRlQsCi0JCQkJCQkgICAgIFBBR0VfREVGQVVMVF9LRVkpOwotCQkJZnJlZV9ib290bWVtKHN0YXJ0X2NodW5rIDw8IFBBR0VfU0hJRlQsCi0JCQkJICAgICAoZW5kX2NodW5rIC0gc3RhcnRfY2h1bmspIDw8IFBBR0VfU0hJRlQpOwotCQkJaWYgKGxhc3RfcndfZW5kIDwgc3RhcnRfY2h1bmspCi0JCQkJYWRkX21lbW9yeV9ob2xlKGxhc3RfcndfZW5kLCBzdGFydF9jaHVuayAtIDEpOwotCQkJbGFzdF9yd19lbmQgPSBlbmRfY2h1bms7Ci0JCX0KKwkJc3RhcnRfY2h1bmsgPSBQRk5fRE9XTihtZW1vcnlfY2h1bmtbaV0uYWRkcik7CisJCWVuZF9jaHVuayA9IHN0YXJ0X2NodW5rICsgUEZOX0RPV04obWVtb3J5X2NodW5rW2ldLnNpemUpIC0gMTsKKwkJZW5kX2NodW5rID0gbWluKGVuZF9jaHVuaywgZW5kX3Bmbik7CisJCWlmIChzdGFydF9jaHVuayA+PSBlbmRfY2h1bmspCisJCQljb250aW51ZTsKKwkJYWRkX2FjdGl2ZV9yYW5nZSgwLCBzdGFydF9jaHVuaywgZW5kX2NodW5rKTsKKwkJcGZuID0gbWF4KHN0YXJ0X2NodW5rLCBzdGFydF9wZm4pOworCQlmb3IgKDsgcGZuIDw9IGVuZF9jaHVuazsgcGZuKyspCisJCQlwYWdlX3NldF9zdG9yYWdlX2tleShQRk5fUEhZUyhwZm4pLCBQQUdFX0RFRkFVTFRfS0VZKTsKIAl9CiAKIAlwc3dfc2V0X2tleShQQUdFX0RFRkFVTFRfS0VZKTsKIAotCWlmIChsYXN0X3J3X2VuZCA8IGVuZF9wZm4gLSAxKQotCQlhZGRfbWVtb3J5X2hvbGUobGFzdF9yd19lbmQsIGVuZF9wZm4gLSAxKTsKKwlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucygwLCBtYXhfcGZuKTsKKwlyZXNlcnZlX2Jvb3RtZW0oMCwgUEZOX1BIWVMoc3RhcnRfcGZuKSk7CiAKIAkvKgogCSAqIFJlc2VydmUgdGhlIGJvb3RtZW0gYml0bWFwIGl0c2VsZiBhcyB3ZWxsLiBXZSBkbyB0aGlzIGluIHR3bwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggMTkwOTBmNy4uYzBjZDI1NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC03OTQsNyArNzk0LDEwIEBACiAJaW50IHJldDsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJcmV0ID0gcmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kZXZpY2VzLCBjcHUpLCBjcHUpOworCQlzdHJ1Y3QgY3B1ICpjID0gJnBlcl9jcHUoY3B1X2RldmljZXMsIGNwdSk7CisKKwkJYy0+aG90cGx1Z2dhYmxlID0gMTsKKwkJcmV0ID0gcmVnaXN0ZXJfY3B1KGMsIGNwdSk7CiAJCWlmIChyZXQpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0b3BvbG9neV9pbml0OiByZWdpc3Rlcl9jcHUgJWQgIgogCQkJICAgICAgICJmYWlsZWQgKCVkKVxuIiwgY3B1LCByZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYwppbmRleCA4NzQxYmRjLi40OWMzZTQ2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYwpAQCAtOCw4ICs4LDkgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2Z1dGV4Lmg+CiAKIHN0YXRpYyBpbmxpbmUgaW50IF9faGFuZGxlX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCkBAIC0xOCw2ICsxOSw4IEBACiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJaW50IHJldCA9IC1FRkFVTFQ7CiAKKwlpZiAoaW5fYXRvbWljKCkpCisJCXJldHVybiByZXQ7CiAJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyZXNzKTsKIAlpZiAodW5saWtlbHkoIXZtYSkpCkBAIC02MCw4ICs2Myw5IEBACiAKIG91dF9vZl9tZW1vcnk6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoY3VycmVudC0+cGlkID09IDEpIHsKKwlpZiAoaXNfaW5pdChjdXJyZW50KSkgewogCQl5aWVsZCgpOworCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKIAl9CiAJcHJpbnRrKCJWTToga2lsbGluZyBwcm9jZXNzICVzXG4iLCBjdXJyZW50LT5jb21tKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwppbmRleCBiYmFjYTY2Li41NmEwMjE0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCkBAIC0yNTgsOCArMjU4LDYgQEAKIHsKIAlpbnQgb2xkdmFsID0gMCwgbmV3dmFsLCByZXQ7CiAKLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCiAJc3dpdGNoIChvcCkgewogCWNhc2UgRlVURVhfT1BfU0VUOgogCQlfX2Z1dGV4X2F0b21pY19vcCgibHIgJTIsJTVcbiIsCkBAIC0yODQsNyArMjgyLDYgQEAKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PU1lTOwogCX0KLQlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJKm9sZCA9IG9sZHZhbDsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL01ha2VmaWxlIGIvYXJjaC9zMzkwL21tL01ha2VmaWxlCmluZGV4IGFhOWE0MmIuLjhlMDlkYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvbW0vTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXggczM5MC1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCiAjCiAKLW9iai15CSA6PSBpbml0Lm8gZmF1bHQubyBpb3JlbWFwLm8gZXh0bWVtLm8gbW1hcC5vCitvYmoteQkgOj0gaW5pdC5vIGZhdWx0Lm8gaW9yZW1hcC5vIGV4dG1lbS5vIG1tYXAubyB2bWVtLm8KIG9iai0kKENPTkZJR19DTU0pICs9IGNtbS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRtZW0uYyBiL2FyY2gvczM5MC9tbS9leHRtZW0uYwppbmRleCA5ZTliYzQ4Li43NzViZjE5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKKysrIGIvYXJjaC9zMzkwL21tL2V4dG1lbS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vZXh0bWVtLmg+CkBAIC0yMzgsNjUgKzIzOSw2IEBACiB9CiAKIC8qCi0gKiBjaGVjayBpZiB0aGUgZ2l2ZW4gc2VnbWVudCBjb2xsaWRlcyB3aXRoIGd1ZXN0IHN0b3JhZ2UuCi0gKiByZXR1cm5zIDEgaWYgdGhpcyBpcyB0aGUgY2FzZSwgMCBpZiBubyBjb2xsaXNpb24gd2FzIGZvdW5kCi0gKi8KLXN0YXRpYyBpbnQKLXNlZ21lbnRfb3ZlcmxhcHNfc3RvcmFnZShzdHJ1Y3QgZGNzc19zZWdtZW50ICpzZWcpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUyAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykgewotCQlpZiAobWVtb3J5X2NodW5rW2ldLnR5cGUgIT0gQ0hVTktfUkVBRF9XUklURSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKG1lbW9yeV9jaHVua1tpXS5hZGRyID4+IDIwKSA+IChzZWctPmVuZCA+PiAyMCkpCi0JCQljb250aW51ZTsKLQkJaWYgKCgobWVtb3J5X2NodW5rW2ldLmFkZHIgKyBtZW1vcnlfY2h1bmtbaV0uc2l6ZSAtIDEpID4+IDIwKQotCQkJCTwgKHNlZy0+c3RhcnRfYWRkciA+PiAyMCkpCi0JCQljb250aW51ZTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogY2hlY2sgaWYgc2VnbWVudCBjb2xsaWRlcyB3aXRoIG90aGVyIHNlZ21lbnRzIHRoYXQgYXJlIGN1cnJlbnRseSBsb2FkZWQKLSAqIHJldHVybnMgMSBpZiB0aGlzIGlzIHRoZSBjYXNlLCAwIGlmIG5vIGNvbGxpc2lvbiB3YXMgZm91bmQKLSAqLwotc3RhdGljIGludAotc2VnbWVudF9vdmVybGFwc19vdGhlcnMgKHN0cnVjdCBkY3NzX3NlZ21lbnQgKnNlZykKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsOwotCXN0cnVjdCBkY3NzX3NlZ21lbnQgKnRtcDsKLQotCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkY3NzX2xvY2spKTsKLQlsaXN0X2Zvcl9lYWNoKGwsICZkY3NzX2xpc3QpIHsKLQkJdG1wID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgZGNzc19zZWdtZW50LCBsaXN0KTsKLQkJaWYgKCh0bXAtPnN0YXJ0X2FkZHIgPj4gMjApID4gKHNlZy0+ZW5kID4+IDIwKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKHRtcC0+ZW5kID4+IDIwKSA8IChzZWctPnN0YXJ0X2FkZHIgPj4gMjApKQotCQkJY29udGludWU7Ci0JCWlmIChzZWcgPT0gdG1wKQotCQkJY29udGludWU7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGNoZWNrIGlmIHNlZ21lbnQgZXhjZWVkcyB0aGUga2VybmVsIG1hcHBpbmcgcmFuZ2UgKGRldGVjdGVkIG9yIHNldCB2aWEgbWVtPSkKLSAqIHJldHVybnMgMSBpZiB0aGlzIGlzIHRoZSBjYXNlLCAwIGlmIHNlZ21lbnQgZml0cyBpbnRvIHRoZSByYW5nZQotICovCi1zdGF0aWMgaW5saW5lIGludAotc2VnbWVudF9leGNlZWRzX3JhbmdlIChzdHJ1Y3QgZGNzc19zZWdtZW50ICpzZWcpCi17Ci0JaW50IHNlZ19sYXN0X3BmbiA9IChzZWctPmVuZCkgPj4gUEFHRV9TSElGVDsKLQlpZiAoc2VnX2xhc3RfcGZuID4gbWF4X3BmbikKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBnZXQgaW5mbyBhYm91dCBhIHNlZ21lbnQKICAqIHBvc3NpYmxlIHJldHVybiB2YWx1ZXM6CiAgKiAtRU5PU1lTICA6IHdlIGFyZSBub3QgcnVubmluZyBvbiBWTQpAQCAtMzQxLDI0ICsyODMsMjYgQEAKIAlyYyA9IHF1ZXJ5X3NlZ21lbnRfdHlwZSAoc2VnKTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIG91dF9mcmVlOwotCWlmIChzZWdtZW50X2V4Y2VlZHNfcmFuZ2Uoc2VnKSkgewotCQlQUklOVF9XQVJOICgic2VnbWVudF9sb2FkOiBub3QgbG9hZGluZyBzZWdtZW50ICVzIC0gZXhjZWVkcyIKLQkJCQkiIGtlcm5lbCBtYXBwaW5nIHJhbmdlXG4iLG5hbWUpOwotCQlyYyA9IC1FUkFOR0U7CisKKwlyYyA9IGFkZF9zaGFyZWRfbWVtb3J5KHNlZy0+c3RhcnRfYWRkciwgc2VnLT5lbmQgLSBzZWctPnN0YXJ0X2FkZHIgKyAxKTsKKworCXN3aXRjaCAocmMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVOT1NQQzoKKwkJUFJJTlRfV0FSTigic2VnbWVudF9sb2FkOiBub3QgbG9hZGluZyBzZWdtZW50ICVzIC0gb3ZlcmxhcHMgIgorCQkJICAgInN0b3JhZ2Uvc2VnbWVudFxuIiwgbmFtZSk7CisJCWdvdG8gb3V0X2ZyZWU7CisJY2FzZSAtRVJBTkdFOgorCQlQUklOVF9XQVJOKCJzZWdtZW50X2xvYWQ6IG5vdCBsb2FkaW5nIHNlZ21lbnQgJXMgLSBleGNlZWRzICIKKwkJCSAgICJrZXJuZWwgbWFwcGluZyByYW5nZVxuIiwgbmFtZSk7CisJCWdvdG8gb3V0X2ZyZWU7CisJZGVmYXVsdDoKKwkJUFJJTlRfV0FSTigic2VnbWVudF9sb2FkOiBub3QgbG9hZGluZyBzZWdtZW50ICVzIChyYzogJWQpXG4iLAorCQkJICAgbmFtZSwgcmMpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KLQlpZiAoc2VnbWVudF9vdmVybGFwc19zdG9yYWdlKHNlZykpIHsKLQkJUFJJTlRfV0FSTiAoInNlZ21lbnRfbG9hZDogbm90IGxvYWRpbmcgc2VnbWVudCAlcyAtIG92ZXJsYXBzIgotCQkJCSIgc3RvcmFnZVxuIixuYW1lKTsKLQkJcmMgPSAtRU5PU1BDOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQlpZiAoc2VnbWVudF9vdmVybGFwc19vdGhlcnMoc2VnKSkgewotCQlQUklOVF9XQVJOICgic2VnbWVudF9sb2FkOiBub3QgbG9hZGluZyBzZWdtZW50ICVzIC0gb3ZlcmxhcHMiCi0JCQkJIiBvdGhlciBzZWdtZW50c1xuIixuYW1lKTsKLQkJcmMgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQorCiAJaWYgKGRvX25vbnNoYXJlZCkKIAkJZGNzc19jb21tYW5kID0gRENTU19MT0FETlNSOwogCWVsc2UKQEAgLTM3Miw3ICszMTYsNyBAQAogCQlyYyA9IGRjc3NfZGlhZ190cmFuc2xhdGVfcmMgKHNlZy0+ZW5kKTsKIAkJZGNzc19kaWFnKERDU1NfUFVSR0VTRUcsIHNlZy0+ZGNzc19uYW1lLAogCQkJCSZzZWctPnN0YXJ0X2FkZHIsICZzZWctPmVuZCk7Ci0JCWdvdG8gb3V0X2ZyZWU7CisJCWdvdG8gb3V0X3NoYXJlZDsKIAl9CiAJc2VnLT5kb19ub25zaGFyZWQgPSBkb19ub25zaGFyZWQ7CiAJYXRvbWljX3NldCgmc2VnLT5yZWZfY291bnQsIDEpOwpAQCAtMzkxLDYgKzMzNSw4IEBACiAJCQkJKHZvaWQqKXNlZy0+c3RhcnRfYWRkciwgKHZvaWQqKXNlZy0+ZW5kLAogCQkJCXNlZ3R5cGVfc3RyaW5nW3NlZy0+dm1fc2VndHlwZV0pOwogCWdvdG8gb3V0OworIG91dF9zaGFyZWQ6CisJcmVtb3ZlX3NoYXJlZF9tZW1vcnkoc2VnLT5zdGFydF9hZGRyLCBzZWctPmVuZCAtIHNlZy0+c3RhcnRfYWRkciArIDEpOwogIG91dF9mcmVlOgogCWtmcmVlKHNlZyk7CiAgb3V0OgpAQCAtNTMwLDEyICs0NzYsMTIgQEAKIAkJCQkicGxlYXNlIHJlcG9ydCB0byBsaW51eDM5MEBkZS5pYm0uY29tXG4iLG5hbWUpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCWlmIChhdG9taWNfZGVjX3JldHVybigmc2VnLT5yZWZfY291bnQpID09IDApIHsKLQkJbGlzdF9kZWwoJnNlZy0+bGlzdCk7Ci0JCWRjc3NfZGlhZyhEQ1NTX1BVUkdFU0VHLCBzZWctPmRjc3NfbmFtZSwKLQkJCSAgJmR1bW15LCAmZHVtbXkpOwotCQlrZnJlZShzZWcpOwotCX0KKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnNlZy0+cmVmX2NvdW50KSAhPSAwKQorCQlnb3RvIG91dF91bmxvY2s7CisJcmVtb3ZlX3NoYXJlZF9tZW1vcnkoc2VnLT5zdGFydF9hZGRyLCBzZWctPmVuZCAtIHNlZy0+c3RhcnRfYWRkciArIDEpOworCWxpc3RfZGVsKCZzZWctPmxpc3QpOworCWRjc3NfZGlhZyhEQ1NTX1BVUkdFU0VHLCBzZWctPmRjc3NfbmFtZSwgJmR1bW15LCAmZHVtbXkpOworCWtmcmVlKHNlZyk7CiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGNzc19sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9pbml0LmMgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCmluZGV4IGUxODgxYzMuLjRiYjIxYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL21tL2luaXQuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNjksNiArNzAsOCBAQAogICAgICAgICBwcmludGsoIkZyZWUgc3dhcDogICAgICAgJTZsZGtCXG4iLCBucl9zd2FwX3BhZ2VzPDwoUEFHRV9TSElGVC0xMCkpOwogICAgICAgICBpID0gbWF4X21hcG5yOwogICAgICAgICB3aGlsZSAoaS0tID4gMCkgeworCQlpZiAoIXBmbl92YWxpZChpKSkKKwkJCWNvbnRpbnVlOwogCQlwYWdlID0gcGZuX3RvX3BhZ2UoaSk7CiAgICAgICAgICAgICAgICAgdG90YWwrKzsKIAkJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKQEAgLTg0LDE1MCArODcsNTIgQEAKICAgICAgICAgcHJpbnRrKCIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIixjYWNoZWQpOwogfQogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHpob2xlc19zaXplW107CitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfcm9fcmVnaW9uKHZvaWQpCit7CisJcGdkX3QgKnBnZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGU7CisJcHRlX3QgbmV3X3B0ZTsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGVuZDsKKworCWFkZHJlc3MgPSAoKHVuc2lnbmVkIGxvbmcpJl9fc3RhcnRfcm9kYXRhKSAmIFBBR0VfTUFTSzsKKwllbmQgPSBQRk5fQUxJR04oKHVuc2lnbmVkIGxvbmcpJl9fZW5kX3JvZGF0YSk7CisKKwlmb3IgKDsgYWRkcmVzcyA8IGVuZDsgYWRkcmVzcyArPSBQQUdFX1NJWkUpIHsKKwkJcGdkID0gcGdkX29mZnNldF9rKGFkZHJlc3MpOworCQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CisJCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7CisJCW5ld19wdGUgPSBta19wdGVfcGh5cyhhZGRyZXNzLCBfX3BncHJvdChfUEFHRV9STykpOworCQlzZXRfcHRlKHB0ZSwgbmV3X3B0ZSk7CisJfQorfQorCitleHRlcm4gdm9pZCB2bWVtX21hcF9pbml0KHZvaWQpOworCiAvKgogICogcGFnaW5nX2luaXQoKSBzZXRzIHVwIHRoZSBwYWdlIHRhYmxlcwogICovCi0KLSNpZm5kZWYgQ09ORklHXzY0QklUCiB2b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKQogewotICAgICAgICBwZ2RfdCAqIHBnX2RpcjsKLSAgICAgICAgcHRlX3QgKiBwZ190YWJsZTsKLSAgICAgICAgcHRlX3QgICBwdGU7Ci0JaW50ICAgICBpOwotICAgICAgICB1bnNpZ25lZCBsb25nIHRtcDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4gPSAwOwotICAgICAgICB1bnNpZ25lZCBsb25nIHBnZGlyX2sgPSAoX19wYShzd2FwcGVyX3BnX2RpcikgJiBQQUdFX01BU0spIHwgX0tFUk5TRUdfVEFCTEU7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc3NtX21hc2sgPSAweDA0MDAwMDAwTDsKLQl1bnNpZ25lZCBsb25nIHJvX3N0YXJ0X3Bmbiwgcm9fZW5kX3BmbjsKLQl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKLQotCXJvX3N0YXJ0X3BmbiA9IFBGTl9ET1dOKCh1bnNpZ25lZCBsb25nKSZfX3N0YXJ0X3JvZGF0YSk7Ci0Jcm9fZW5kX3BmbiA9IFBGTl9VUCgodW5zaWduZWQgbG9uZykmX19lbmRfcm9kYXRhKTsKLQotCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOwotCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbWF4X2xvd19wZm47Ci0JZnJlZV9hcmVhX2luaXRfbm9kZSgwLCAmY29udGlnX3BhZ2VfZGF0YSwgem9uZXNfc2l6ZSwKLQkJCSAgICBfX3BhKFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZULAotCQkJICAgIHpob2xlc19zaXplKTsKLQotCS8qIHVubWFwIHdob2xlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLwotCQotICAgICAgICBwZ19kaXIgPSBzd2FwcGVyX3BnX2RpcjsKLQotCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKykKLQkJcG1kX2NsZWFyKChwbWRfdCAqKSBwZ19kaXIrKyk7Ci0JCQotCS8qCi0JICogbWFwIHdob2xlIHBoeXNpY2FsIG1lbW9yeSB0byB2aXJ0dWFsIG1lbW9yeSAoaWRlbnRpdHkgbWFwcGluZykgCi0JICovCi0KLSAgICAgICAgcGdfZGlyID0gc3dhcHBlcl9wZ19kaXI7Ci0KLSAgICAgICAgd2hpbGUgKHBmbiA8IG1heF9sb3dfcGZuKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBwZ190YWJsZSBpcyBwaHlzaWNhbCBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICAgICAgICovCi0JCXBnX3RhYmxlID0gKHB0ZV90ICopIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQotCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZpbml0X21tLCAocG1kX3QgKikgcGdfZGlyLCBwZ190YWJsZSk7Ci0gICAgICAgICAgICAgICAgcGdfZGlyKys7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHRtcCA9IDAgOyB0bXAgPCBQVFJTX1BFUl9QVEUgOyB0bXArKyxwZ190YWJsZSsrKSB7Ci0JCQlpZiAocGZuID49IHJvX3N0YXJ0X3BmbiAmJiBwZm4gPCByb19lbmRfcGZuKQotCQkJCXB0ZSA9IHBmbl9wdGUocGZuLCBfX3BncHJvdChfUEFHRV9STykpOwotCQkJZWxzZQotCQkJCXB0ZSA9IHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGZuID49IG1heF9sb3dfcGZuKQotCQkJCXB0ZV92YWwocHRlKSA9IF9QQUdFX1RZUEVfRU1QVFk7Ci0JCQlzZXRfcHRlKHBnX3RhYmxlLCBwdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGZuKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLQlTMzkwX2xvd2NvcmUua2VybmVsX2FzY2UgPSBwZ2Rpcl9rOwotCi0gICAgICAgIC8qIGVuYWJsZSB2aXJ0dWFsIG1hcHBpbmcgaW4ga2VybmVsIG1vZGUgKi8KLQlfX2N0bF9sb2FkKHBnZGlyX2ssIDEsIDEpOwotCV9fY3RsX2xvYWQocGdkaXJfaywgNywgNyk7Ci0JX19jdGxfbG9hZChwZ2Rpcl9rLCAxMywgMTMpOwotCV9fcmF3X2xvY2FsX2lycV9zc20oc3NtX21hc2spOwotCi0gICAgICAgIGxvY2FsX2ZsdXNoX3RsYigpOwotfQotCi0jZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KLQotdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKLXsKLSAgICAgICAgcGdkX3QgKiBwZ19kaXI7Ci0JcG1kX3QgKiBwbV9kaXI7Ci0gICAgICAgIHB0ZV90ICogcHRfZGlyOwotICAgICAgICBwdGVfdCAgIHB0ZTsKLQlpbnQgICAgIGksaixrOwotICAgICAgICB1bnNpZ25lZCBsb25nIHBmbiA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcGdkaXJfayA9IChfX3BhKHN3YXBwZXJfcGdfZGlyKSAmIFBBR0VfTUFTSykgfAotICAgICAgICAgIF9LRVJOX1JFR0lPTl9UQUJMRTsKKwlwZ2RfdCAqcGdfZGlyOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgcGdkaXJfazsKIAlzdGF0aWMgY29uc3QgaW50IHNzbV9tYXNrID0gMHgwNDAwMDAwMEw7Ci0JdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU107Ci0JdW5zaWduZWQgbG9uZyBkbWFfcGZuLCBoaWdoX3BmbjsKLQl1bnNpZ25lZCBsb25nIHJvX3N0YXJ0X3Bmbiwgcm9fZW5kX3BmbjsKKwl1bnNpZ25lZCBsb25nIG1heF96b25lX3BmbnNbTUFYX05SX1pPTkVTXTsKIAotCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOwotCWRtYV9wZm4gPSBNQVhfRE1BX0FERFJFU1MgPj4gUEFHRV9TSElGVDsKLQloaWdoX3BmbiA9IG1heF9sb3dfcGZuOwotCXJvX3N0YXJ0X3BmbiA9IFBGTl9ET1dOKCh1bnNpZ25lZCBsb25nKSZfX3N0YXJ0X3JvZGF0YSk7Ci0Jcm9fZW5kX3BmbiA9IFBGTl9VUCgodW5zaWduZWQgbG9uZykmX19lbmRfcm9kYXRhKTsKLQotCWlmIChkbWFfcGZuID4gaGlnaF9wZm4pCi0JCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gaGlnaF9wZm47Ci0JZWxzZSB7Ci0JCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gZG1hX3BmbjsKLQkJem9uZXNfc2l6ZVtaT05FX05PUk1BTF0gPSBoaWdoX3BmbiAtIGRtYV9wZm47Ci0JfQotCi0JLyogSW5pdGlhbGl6ZSBtZW1fbWFwW10uICAqLwotCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgJmNvbnRpZ19wYWdlX2RhdGEsIHpvbmVzX3NpemUsCi0JCQkgICAgX19wYShQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCwgemhvbGVzX3NpemUpOwotCi0JLyoKLQkgKiBtYXAgd2hvbGUgcGh5c2ljYWwgbWVtb3J5IHRvIHZpcnR1YWwgbWVtb3J5IChpZGVudGl0eSBtYXBwaW5nKSAKLQkgKi8KLQotICAgICAgICBwZ19kaXIgPSBzd2FwcGVyX3BnX2RpcjsKKwlwZ19kaXIgPSBzd2FwcGVyX3BnX2RpcjsKIAkKLSAgICAgICAgZm9yIChpID0gMCA7IGkgPCBQVFJTX1BFUl9QR0QgOyBpKysscGdfZGlyKyspIHsKLQkKLSAgICAgICAgICAgICAgICBpZiAocGZuID49IG1heF9sb3dfcGZuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwZ2RfY2xlYXIocGdfZGlyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgCi0gICAgICAgIAotCQlwbV9kaXIgPSAocG1kX3QgKikgYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUgKiA0KTsKLSAgICAgICAgICAgICAgICBwZ2RfcG9wdWxhdGUoJmluaXRfbW0sIHBnX2RpciwgcG1fZGlyKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaiA9IDAgOyBqIDwgUFRSU19QRVJfUE1EIDsgaisrLHBtX2RpcisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGZuID49IG1heF9sb3dfcGZuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtZF9jbGVhcihwbV9kaXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgCi0gICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQlwdF9kaXIgPSAocHRlX3QgKikgYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1fZGlyLCBwdF9kaXIpOwotCQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMCA7IGsgPCBQVFJTX1BFUl9QVEUgOyBrKysscHRfZGlyKyspIHsKLQkJCQlpZiAocGZuID49IHJvX3N0YXJ0X3BmbiAmJiBwZm4gPCByb19lbmRfcGZuKQotCQkJCQlwdGUgPSBwZm5fcHRlKHBmbiwgX19wZ3Byb3QoX1BBR0VfUk8pKTsKLQkJCQllbHNlCi0JCQkJCXB0ZSA9IHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTCk7Ci0JCQkJaWYgKHBmbiA+PSBtYXhfbG93X3BmbikKLQkJCQkJcHRlX3ZhbChwdGUpID0gX1BBR0VfVFlQRV9FTVBUWTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3B0ZShwdF9kaXIsIHB0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBmbisrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorI2lmZGVmIENPTkZJR182NEJJVAorCXBnZGlyX2sgPSAoX19wYShzd2FwcGVyX3BnX2RpcikgJiBQQUdFX01BU0spIHwgX0tFUk5fUkVHSU9OX1RBQkxFOworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKykKKwkJcGdkX2NsZWFyKHBnX2RpciArIGkpOworI2Vsc2UKKwlwZ2Rpcl9rID0gKF9fcGEoc3dhcHBlcl9wZ19kaXIpICYgUEFHRV9NQVNLKSB8IF9LRVJOU0VHX1RBQkxFOworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKykKKwkJcG1kX2NsZWFyKChwbWRfdCAqKShwZ19kaXIgKyBpKSk7CisjZW5kaWYKKwl2bWVtX21hcF9pbml0KCk7CisJc2V0dXBfcm9fcmVnaW9uKCk7CiAKIAlTMzkwX2xvd2NvcmUua2VybmVsX2FzY2UgPSBwZ2Rpcl9rOwogCkBAIC0yMzcsOSArMTQyLDExIEBACiAJX19jdGxfbG9hZChwZ2Rpcl9rLCAxMywgMTMpOwogCV9fcmF3X2xvY2FsX2lycV9zc20oc3NtX21hc2spOwogCi0gICAgICAgIGxvY2FsX2ZsdXNoX3RsYigpOworCW1lbXNldChtYXhfem9uZV9wZm5zLCAwLCBzaXplb2YobWF4X3pvbmVfcGZucykpOworCW1heF96b25lX3BmbnNbWk9ORV9ETUFdID0gUEZOX0RPV04oTUFYX0RNQV9BRERSRVNTKTsKKwltYXhfem9uZV9wZm5zW1pPTkVfTk9STUFMXSA9IG1heF9sb3dfcGZuOworCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogfQotI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCiB2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQogewpAQCAtMjY5LDYgKzE3Niw4IEBACiAJcHJpbnRrKCJXcml0ZSBwcm90ZWN0ZWQga2VybmVsIHJlYWQtb25seSBkYXRhOiAlI2x4IC0gJSNseFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcpJl9fc3RhcnRfcm9kYXRhLAogCSAgICAgICBQRk5fQUxJR04oKHVuc2lnbmVkIGxvbmcpJl9fZW5kX3JvZGF0YSkgLSAxKTsKKwlwcmludGsoIlZpcnR1YWwgbWVtbWFwIHNpemU6ICVsZGtcbiIsCisJICAgICAgIChtYXhfcGZuICogc2l6ZW9mKHN0cnVjdCBwYWdlKSkgPj4gMTApOwogfQogCiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQpAQCAtMjc5LDYgKzE4OCw3IEBACiAgICAgICAgIGZvciAoOyBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKTsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKIAkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CisJCW1lbXNldCgodm9pZCAqKWFkZHIsIFBPSVNPTl9GUkVFX0lOSVRNRU0sIFBBR0VfU0laRSk7CiAJCWZyZWVfcGFnZShhZGRyKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2lvcmVtYXAuYyBiL2FyY2gvczM5MC9tbS9pb3JlbWFwLmMKaW5kZXggMGY2ZTllYy4uM2QyMTAwYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2lvcmVtYXAuYworKysgYi9hcmNoL3MzOTAvbW0vaW9yZW1hcC5jCkBAIC0xNSw4NyArMTUsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZW1hcF9hcmVhX3B0ZShwdGVfdCAqIHB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotICAgICAgICB1bnNpZ25lZCBsb25nIGVuZDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBwZm47Ci0KLSAgICAgICAgYWRkcmVzcyAmPSB+UE1EX01BU0s7Ci0gICAgICAgIGVuZCA9IGFkZHJlc3MgKyBzaXplOwotICAgICAgICBpZiAoZW5kID4gUE1EX1NJWkUpCi0gICAgICAgICAgICAgICAgZW5kID0gUE1EX1NJWkU7Ci0JaWYgKGFkZHJlc3MgPj0gZW5kKQotCQlCVUcoKTsKLSAgICAgICAgcGZuID0gcGh5c19hZGRyID4+IFBBR0VfU0hJRlQ7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAoIXB0ZV9ub25lKCpwdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoInJlbWFwX2FyZWFfcHRlOiBwYWdlIGFscmVhZHkgZXhpc3RzXG4iKTsKLQkJCUJVRygpOwotCQl9Ci0gICAgICAgICAgICAgICAgc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBfX3BncHJvdChmbGFncykpKTsKLSAgICAgICAgICAgICAgICBhZGRyZXNzICs9IFBBR0VfU0laRTsKLSAgICAgICAgICAgICAgICBwZm4rKzsKLSAgICAgICAgICAgICAgICBwdGUrKzsKLSAgICAgICAgfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByZW1hcF9hcmVhX3BtZChwbWRfdCAqIHBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVuc2lnbmVkIGxvbmcgZW5kOwotCi0JYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUEdESVJfU0laRSkKLQkJZW5kID0gUEdESVJfU0laRTsKLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcHRlX3QgKiBwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcmVzcyk7Ci0JCWlmICghcHRlKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXJlbWFwX2FyZWFfcHRlKHB0ZSwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywgYWRkcmVzcyArIHBoeXNfYWRkciwgZmxhZ3MpOwotCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQTURfU0laRSkgJiBQTURfTUFTSzsKLQkJcG1kKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJlbWFwX2FyZWFfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKLQkJCQkgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCWludCBlcnJvcjsKLQlwZ2RfdCAqIGRpcjsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHJlc3MgKyBzaXplOwotCi0JcGh5c19hZGRyIC09IGFkZHJlc3M7Ci0JZGlyID0gcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcyk7Ci0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0JaWYgKGFkZHJlc3MgPj0gZW5kKQotCQlCVUcoKTsKLQlkbyB7Ci0JCXBtZF90ICpwbWQ7Ci0JCXBtZCA9IHBtZF9hbGxvYygmaW5pdF9tbSwgZGlyLCBhZGRyZXNzKTsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlpZiAoIXBtZCkKLQkJCWJyZWFrOwotCQlpZiAocmVtYXBfYXJlYV9wbWQocG1kLCBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzLAotCQkJCQkgcGh5c19hZGRyICsgYWRkcmVzcywgZmxhZ3MpKQotCQkJYnJlYWs7Ci0JCWVycm9yID0gMDsKLQkJYWRkcmVzcyA9IChhZGRyZXNzICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOwotCQlkaXIrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Ci0JZmx1c2hfdGxiX2FsbCgpOwotCXJldHVybiAwOwotfQogCiAvKgogICogR2VuZXJpYyBtYXBwaW5nIGZ1bmN0aW9uIChub3QgdmlzaWJsZSBvdXRzaWRlKToKQEAgLTEyMiw3ICs0Myw4IEBACiAJaWYgKCFhcmVhKQogCQlyZXR1cm4gTlVMTDsKIAlhZGRyID0gYXJlYS0+YWRkcjsKLQlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZykgYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncykpIHsKKwlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsICh1bnNpZ25lZCBsb25nKWFkZHIgKyBzaXplLAorCQkJICAgICAgIHBoeXNfYWRkciwgX19wZ3Byb3QoZmxhZ3MpKSkgewogCQl2ZnJlZShhZGRyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3ZtZW0uYyBiL2FyY2gvczM5MC9tbS92bWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzZDkzZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9tbS92bWVtLmMKQEAgLTAsMCArMSwzODIgQEAKKy8qCisgKiAgYXJjaC9zMzkwL21tL3ZtZW0uYworICoKKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNgorICogICAgQXV0aG9yKHMpOiBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKwordW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZDsKK0VYUE9SVF9TWU1CT0wodm1hbGxvY19lbmQpOworCitzdGF0aWMgc3RydWN0IHBhZ2UgKnZtZW1fbWFwOworc3RhdGljIERFRklORV9NVVRFWCh2bWVtX211dGV4KTsKKworc3RydWN0IG1lbW9yeV9zZWdtZW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKG1lbV9zZWdzKTsKKwordm9pZCBtZW1tYXBfaW5pdCh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSwKKwkJIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuKQoreworCXN0cnVjdCBwYWdlICpzdGFydCwgKmVuZDsKKwlzdHJ1Y3QgcGFnZSAqbWFwX3N0YXJ0LCAqbWFwX2VuZDsKKwlpbnQgaTsKKworCXN0YXJ0ID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTsKKwllbmQgPSBzdGFydCArIHNpemU7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUyAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGNzdGFydCwgY2VuZDsKKworCQljc3RhcnQgPSBQRk5fRE9XTihtZW1vcnlfY2h1bmtbaV0uYWRkcik7CisJCWNlbmQgPSBjc3RhcnQgKyBQRk5fRE9XTihtZW1vcnlfY2h1bmtbaV0uc2l6ZSk7CisKKwkJbWFwX3N0YXJ0ID0gbWVtX21hcCArIGNzdGFydDsKKwkJbWFwX2VuZCA9IG1lbV9tYXAgKyBjZW5kOworCisJCWlmIChtYXBfc3RhcnQgPCBzdGFydCkKKwkJCW1hcF9zdGFydCA9IHN0YXJ0OworCQlpZiAobWFwX2VuZCA+IGVuZCkKKwkJCW1hcF9lbmQgPSBlbmQ7CisKKwkJbWFwX3N0YXJ0IC09ICgodW5zaWduZWQgbG9uZykgbWFwX3N0YXJ0ICYgKFBBR0VfU0laRSAtIDEpKQorCQkJLyBzaXplb2Yoc3RydWN0IHBhZ2UpOworCQltYXBfZW5kICs9ICgoUEZOX0FMSUdOKCh1bnNpZ25lZCBsb25nKSBtYXBfZW5kKQorCQkJICAgICAtICh1bnNpZ25lZCBsb25nKSBtYXBfZW5kKQorCQkJICAgIC8gc2l6ZW9mKHN0cnVjdCBwYWdlKSk7CisKKwkJaWYgKG1hcF9zdGFydCA8IG1hcF9lbmQpCisJCQltZW1tYXBfaW5pdF96b25lKCh1bnNpZ25lZCBsb25nKShtYXBfZW5kIC0gbWFwX3N0YXJ0KSwKKwkJCQkJIG5pZCwgem9uZSwgcGFnZV90b19wZm4obWFwX3N0YXJ0KSwKKwkJCQkJIE1FTU1BUF9FQVJMWSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnZtZW1fYWxsb2NfcGFnZXModW5zaWduZWQgaW50IG9yZGVyKQoreworCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKQorCQlyZXR1cm4gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIG9yZGVyKTsKKwlyZXR1cm4gYWxsb2NfYm9vdG1lbV9wYWdlcygoMSA8PCBvcmRlcikgKiBQQUdFX1NJWkUpOworfQorCitzdGF0aWMgaW5saW5lIHBtZF90ICp2bWVtX3BtZF9hbGxvYyh2b2lkKQoreworCXBtZF90ICpwbWQ7CisJaW50IGk7CisKKwlwbWQgPSB2bWVtX2FsbG9jX3BhZ2VzKFBNRF9BTExPQ19PUkRFUik7CisJaWYgKCFwbWQpCisJCXJldHVybiBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QTUQ7IGkrKykKKwkJcG1kX2NsZWFyKHBtZCArIGkpOworCXJldHVybiBwbWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgKnZtZW1fcHRlX2FsbG9jKHZvaWQpCit7CisJcHRlX3QgKnB0ZTsKKwlwdGVfdCBlbXB0eV9wdGU7CisJaW50IGk7CisKKwlwdGUgPSB2bWVtX2FsbG9jX3BhZ2VzKFBURV9BTExPQ19PUkRFUik7CisJaWYgKCFwdGUpCisJCXJldHVybiBOVUxMOworCXB0ZV92YWwoZW1wdHlfcHRlKSA9IF9QQUdFX1RZUEVfRU1QVFk7CisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BURTsgaSsrKQorCQlzZXRfcHRlKHB0ZSArIGksIGVtcHR5X3B0ZSk7CisJcmV0dXJuIHB0ZTsKK30KKworLyoKKyAqIEFkZCBhIHBoeXNpY2FsIG1lbW9yeSByYW5nZSB0byB0aGUgMToxIG1hcHBpbmcuCisgKi8KK3N0YXRpYyBpbnQgdm1lbV9hZGRfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwlwZ2RfdCAqcGdfZGlyOworCXBtZF90ICpwbV9kaXI7CisJcHRlX3QgKnB0X2RpcjsKKwlwdGVfdCAgcHRlOworCWludCByZXQgPSAtRU5PTUVNOworCisJZm9yIChhZGRyZXNzID0gc3RhcnQ7IGFkZHJlc3MgPCBzdGFydCArIHNpemU7IGFkZHJlc3MgKz0gUEFHRV9TSVpFKSB7CisJCXBnX2RpciA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKKwkJaWYgKHBnZF9ub25lKCpwZ19kaXIpKSB7CisJCQlwbV9kaXIgPSB2bWVtX3BtZF9hbGxvYygpOworCQkJaWYgKCFwbV9kaXIpCisJCQkJZ290byBvdXQ7CisJCQlwZ2RfcG9wdWxhdGUoJmluaXRfbW0sIHBnX2RpciwgcG1fZGlyKTsKKwkJfQorCisJCXBtX2RpciA9IHBtZF9vZmZzZXQocGdfZGlyLCBhZGRyZXNzKTsKKwkJaWYgKHBtZF9ub25lKCpwbV9kaXIpKSB7CisJCQlwdF9kaXIgPSB2bWVtX3B0ZV9hbGxvYygpOworCQkJaWYgKCFwdF9kaXIpCisJCQkJZ290byBvdXQ7CisJCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZpbml0X21tLCBwbV9kaXIsIHB0X2Rpcik7CisJCX0KKworCQlwdF9kaXIgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbV9kaXIsIGFkZHJlc3MpOworCQlwdGUgPSBwZm5fcHRlKGFkZHJlc3MgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpOworCQlzZXRfcHRlKHB0X2RpciwgcHRlKTsKKwl9CisJcmV0ID0gMDsKK291dDoKKwlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBzdGFydCArIHNpemUpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBwaHlzaWNhbCBtZW1vcnkgcmFuZ2UgZnJvbSB0aGUgMToxIG1hcHBpbmcuCisgKiBDdXJyZW50bHkgb25seSBpbnZhbGlkYXRlcyBwYWdlIHRhYmxlIGVudHJpZXMuCisgKi8KK3N0YXRpYyB2b2lkIHZtZW1fcmVtb3ZlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJcGdkX3QgKnBnX2RpcjsKKwlwbWRfdCAqcG1fZGlyOworCXB0ZV90ICpwdF9kaXI7CisJcHRlX3QgIHB0ZTsKKworCXB0ZV92YWwocHRlKSA9IF9QQUdFX1RZUEVfRU1QVFk7CisJZm9yIChhZGRyZXNzID0gc3RhcnQ7IGFkZHJlc3MgPCBzdGFydCArIHNpemU7IGFkZHJlc3MgKz0gUEFHRV9TSVpFKSB7CisJCXBnX2RpciA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKKwkJaWYgKHBnZF9ub25lKCpwZ19kaXIpKQorCQkJY29udGludWU7CisJCXBtX2RpciA9IHBtZF9vZmZzZXQocGdfZGlyLCBhZGRyZXNzKTsKKwkJaWYgKHBtZF9ub25lKCpwbV9kaXIpKQorCQkJY29udGludWU7CisJCXB0X2RpciA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtX2RpciwgYWRkcmVzcyk7CisJCXNldF9wdGUocHRfZGlyLCBwdGUpOworCX0KKwlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBzdGFydCArIHNpemUpOworfQorCisvKgorICogQWRkIGEgYmFja2VkIG1lbV9tYXAgYXJyYXkgdG8gdGhlIHZpcnR1YWwgbWVtX21hcCBhcnJheS4KKyAqLworc3RhdGljIGludCB2bWVtX2FkZF9tZW1fbWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0YXJ0X2FkZHIsIGVuZF9hZGRyOworCXN0cnVjdCBwYWdlICptYXBfc3RhcnQsICptYXBfZW5kOworCXBnZF90ICpwZ19kaXI7CisJcG1kX3QgKnBtX2RpcjsKKwlwdGVfdCAqcHRfZGlyOworCXB0ZV90ICBwdGU7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwltYXBfc3RhcnQgPSB2bWVtX21hcCArIFBGTl9ET1dOKHN0YXJ0KTsKKwltYXBfZW5kCT0gdm1lbV9tYXAgKyBQRk5fRE9XTihzdGFydCArIHNpemUpOworCisJc3RhcnRfYWRkciA9ICh1bnNpZ25lZCBsb25nKSBtYXBfc3RhcnQgJiBQQUdFX01BU0s7CisJZW5kX2FkZHIgPSBQRk5fQUxJR04oKHVuc2lnbmVkIGxvbmcpIG1hcF9lbmQpOworCisJZm9yIChhZGRyZXNzID0gc3RhcnRfYWRkcjsgYWRkcmVzcyA8IGVuZF9hZGRyOyBhZGRyZXNzICs9IFBBR0VfU0laRSkgeworCQlwZ19kaXIgPSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcyk7CisJCWlmIChwZ2Rfbm9uZSgqcGdfZGlyKSkgeworCQkJcG1fZGlyID0gdm1lbV9wbWRfYWxsb2MoKTsKKwkJCWlmICghcG1fZGlyKQorCQkJCWdvdG8gb3V0OworCQkJcGdkX3BvcHVsYXRlKCZpbml0X21tLCBwZ19kaXIsIHBtX2Rpcik7CisJCX0KKworCQlwbV9kaXIgPSBwbWRfb2Zmc2V0KHBnX2RpciwgYWRkcmVzcyk7CisJCWlmIChwbWRfbm9uZSgqcG1fZGlyKSkgeworCQkJcHRfZGlyID0gdm1lbV9wdGVfYWxsb2MoKTsKKwkJCWlmICghcHRfZGlyKQorCQkJCWdvdG8gb3V0OworCQkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1fZGlyLCBwdF9kaXIpOworCQl9CisKKwkJcHRfZGlyID0gcHRlX29mZnNldF9rZXJuZWwocG1fZGlyLCBhZGRyZXNzKTsKKwkJaWYgKHB0ZV9ub25lKCpwdF9kaXIpKSB7CisJCQl1bnNpZ25lZCBsb25nIG5ld19wYWdlOworCisJCQluZXdfcGFnZSA9X19wYSh2bWVtX2FsbG9jX3BhZ2VzKDApKTsKKwkJCWlmICghbmV3X3BhZ2UpCisJCQkJZ290byBvdXQ7CisJCQlwdGUgPSBwZm5fcHRlKG5ld19wYWdlID4+IFBBR0VfU0hJRlQsIFBBR0VfS0VSTkVMKTsKKwkJCXNldF9wdGUocHRfZGlyLCBwdGUpOworCQl9CisJfQorCXJldCA9IDA7CitvdXQ6CisJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydF9hZGRyLCBlbmRfYWRkcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2bWVtX2FkZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSB2bWVtX2FkZF9yYW5nZShzdGFydCwgc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gdm1lbV9hZGRfbWVtX21hcChzdGFydCwgc2l6ZSk7Cit9CisKKy8qCisgKiBBZGQgbWVtb3J5IHNlZ21lbnQgdG8gdGhlIHNlZ21lbnQgbGlzdCBpZiBpdCBkb2Vzbid0IG92ZXJsYXAgd2l0aAorICogYW4gYWxyZWFkeSBwcmVzZW50IHNlZ21lbnQuCisgKi8KK3N0YXRpYyBpbnQgaW5zZXJ0X21lbW9yeV9zZWdtZW50KHN0cnVjdCBtZW1vcnlfc2VnbWVudCAqc2VnKQoreworCXN0cnVjdCBtZW1vcnlfc2VnbWVudCAqdG1wOworCisJaWYgKFBGTl9ET1dOKHNlZy0+c3RhcnQgKyBzZWctPnNpemUpID4gbWF4X3BmbiB8fAorCSAgICBzZWctPnN0YXJ0ICsgc2VnLT5zaXplIDwgc2VnLT5zdGFydCkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJm1lbV9zZWdzLCBsaXN0KSB7CisJCWlmIChzZWctPnN0YXJ0ID49IHRtcC0+c3RhcnQgKyB0bXAtPnNpemUpCisJCQljb250aW51ZTsKKwkJaWYgKHNlZy0+c3RhcnQgKyBzZWctPnNpemUgPD0gdG1wLT5zdGFydCkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisJbGlzdF9hZGQoJnNlZy0+bGlzdCwgJm1lbV9zZWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSBtZW1vcnkgc2VnbWVudCBmcm9tIHRoZSBzZWdtZW50IGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9tZW1vcnlfc2VnbWVudChzdHJ1Y3QgbWVtb3J5X3NlZ21lbnQgKnNlZykKK3sKKwlsaXN0X2RlbCgmc2VnLT5saXN0KTsKK30KKworc3RhdGljIHZvaWQgX19yZW1vdmVfc2hhcmVkX21lbW9yeShzdHJ1Y3QgbWVtb3J5X3NlZ21lbnQgKnNlZykKK3sKKwlyZW1vdmVfbWVtb3J5X3NlZ21lbnQoc2VnKTsKKwl2bWVtX3JlbW92ZV9yYW5nZShzZWctPnN0YXJ0LCBzZWctPnNpemUpOworfQorCitpbnQgcmVtb3ZlX3NoYXJlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBtZW1vcnlfc2VnbWVudCAqc2VnOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ2bWVtX211dGV4KTsKKworCXJldCA9IC1FTk9FTlQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZWcsICZtZW1fc2VncywgbGlzdCkgeworCQlpZiAoc2VnLT5zdGFydCA9PSBzdGFydCAmJiBzZWctPnNpemUgPT0gc2l6ZSkKKwkJCWJyZWFrOworCX0KKworCWlmIChzZWctPnN0YXJ0ICE9IHN0YXJ0IHx8IHNlZy0+c2l6ZSAhPSBzaXplKQorCQlnb3RvIG91dDsKKworCXJldCA9IDA7CisJX19yZW1vdmVfc2hhcmVkX21lbW9yeShzZWcpOworCWtmcmVlKHNlZyk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ2bWVtX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgYWRkX3NoYXJlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBtZW1vcnlfc2VnbWVudCAqc2VnOworCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGxvbmcgcGZuLCBudW1fcGZuLCBlbmRfcGZuOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ2bWVtX211dGV4KTsKKwlyZXQgPSAtRU5PTUVNOworCXNlZyA9IGt6YWxsb2Moc2l6ZW9mKCpzZWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNlZykKKwkJZ290byBvdXQ7CisJc2VnLT5zdGFydCA9IHN0YXJ0OworCXNlZy0+c2l6ZSA9IHNpemU7CisKKwlyZXQgPSBpbnNlcnRfbWVtb3J5X3NlZ21lbnQoc2VnKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCisJcmV0ID0gdm1lbV9hZGRfbWVtKHN0YXJ0LCBzaXplKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZW1vdmU7CisKKwlwZm4gPSBQRk5fRE9XTihzdGFydCk7CisJbnVtX3BmbiA9IFBGTl9ET1dOKHNpemUpOworCWVuZF9wZm4gPSBwZm4gKyBudW1fcGZuOworCisJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisJbWVtc2V0KHBhZ2UsIDAsIG51bV9wZm4gKiBzaXplb2Yoc3RydWN0IHBhZ2UpKTsKKworCWZvciAoOyBwZm4gPCBlbmRfcGZuOyBwZm4rKykgeworCQlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKwkJaW5pdF9wYWdlX2NvdW50KHBhZ2UpOworCQlyZXNldF9wYWdlX21hcGNvdW50KHBhZ2UpOworCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7CisJCUlOSVRfTElTVF9IRUFEKCZwYWdlLT5scnUpOworCX0KKwlnb3RvIG91dDsKKworb3V0X3JlbW92ZToKKwlfX3JlbW92ZV9zaGFyZWRfbWVtb3J5KHNlZyk7CitvdXRfZnJlZToKKwlrZnJlZShzZWcpOworb3V0OgorCW11dGV4X3VubG9jaygmdm1lbV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIG1hcCB3aG9sZSBwaHlzaWNhbCBtZW1vcnkgdG8gdmlydHVhbCBtZW1vcnkgKGlkZW50aXR5IG1hcHBpbmcpCisgKi8KK3ZvaWQgX19pbml0IHZtZW1fbWFwX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1hcF9zaXplOworCWludCBpOworCisJbWFwX3NpemUgPSBBTElHTihtYXhfbG93X3BmbiwgTUFYX09SREVSX05SX1BBR0VTKSAqIHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJdm1hbGxvY19lbmQgPSBQRk5fQUxJR04oVk1BTExPQ19FTkRfSU5JVCkgLSBQRk5fQUxJR04obWFwX3NpemUpOworCXZtZW1fbWFwID0gKHN0cnVjdCBwYWdlICopIHZtYWxsb2NfZW5kOworCU5PREVfREFUQSgwKS0+bm9kZV9tZW1fbWFwID0gdm1lbV9tYXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUyAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykKKwkJdm1lbV9hZGRfbWVtKG1lbW9yeV9jaHVua1tpXS5hZGRyLCBtZW1vcnlfY2h1bmtbaV0uc2l6ZSk7Cit9CisKKy8qCisgKiBDb252ZXJ0IG1lbW9yeSBjaHVuayBhcnJheSB0byBhIG1lbW9yeSBzZWdtZW50IGxpc3Qgc28gdGhlcmUgaXMgYSBzaW5nbGUKKyAqIGxpc3QgdGhhdCBjb250YWlucyBib3RoIHIvdyBtZW1vcnkgYW5kIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHZtZW1fY29udmVydF9tZW1vcnlfY2h1bmsodm9pZCkKK3sKKwlzdHJ1Y3QgbWVtb3J5X3NlZ21lbnQgKnNlZzsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJnZtZW1fbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBNRU1PUllfQ0hVTktTICYmIG1lbW9yeV9jaHVua1tpXS5zaXplID4gMDsgaSsrKSB7CisJCWlmICghbWVtb3J5X2NodW5rW2ldLnNpemUpCisJCQljb250aW51ZTsKKwkJc2VnID0ga3phbGxvYyhzaXplb2YoKnNlZyksIEdGUF9LRVJORUwpOworCQlpZiAoIXNlZykKKwkJCXBhbmljKCJPdXQgb2YgbWVtb3J5Li4uXG4iKTsKKwkJc2VnLT5zdGFydCA9IG1lbW9yeV9jaHVua1tpXS5hZGRyOworCQlzZWctPnNpemUgPSBtZW1vcnlfY2h1bmtbaV0uc2l6ZTsKKwkJaW5zZXJ0X21lbW9yeV9zZWdtZW50KHNlZyk7CisJfQorCW11dGV4X3VubG9jaygmdm1lbV9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK2NvcmVfaW5pdGNhbGwodm1lbV9jb252ZXJ0X21lbW9yeV9jaHVuayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggZDgzZDY0YS4uM2FhM2I4OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtNTksNiArNTksMTQgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKKwlib29sCisJZGVmYXVsdCBuCisKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCiBtZW51ICJTeXN0ZW0gdHlwZSIKQEAgLTQ3MSw3ICs0NzksNyBAQAogCWludCAiQ1BVIE1vZGUgUGluIFNldHRpbmciCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc2MTkgfHwgQ1BVX1NVQlRZUEVfU0g3MjA2CiAJaGVscAotCSAgTUQyIC0gTUQwIFNldHRpbmcuCisJICBNRDIgLSBNRDAgcGluIHNldHRpbmcuCiAKIG1lbnUgIkNQVSBGcmVxdWVuY3kgc2NhbGluZyIKIApAQCAtNTcyLDE4ICs1ODAsNiBAQAogCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLnByZWVtcHQiCiAKLWNvbmZpZyBDUFVfSEFTX1NSX1JCCi0JYm9vbCAiQ1BVIGhhcyBTUi5SQiIKLQlkZXBlbmRzIG9uIENQVV9TSDMgfHwgQ1BVX1NINAotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMgd2lsbCBlbmFibGUgdGhlIHVzZSBvZiBTUi5SQiByZWdpc3RlciBiYW5rIHVzYWdlLiBQcm9jZXNzb3JzCi0JICB0aGF0IGFyZSBsYWNraW5nIHRoaXMgYml0IG11c3QgaGF2ZSBhbm90aGVyIG1ldGhvZCBpbiBwbGFjZSBmb3IKLQkgIGFjY29tcGxpc2hpbmcgd2hhdCBpcyB0YWtlbiBjYXJlIG9mIGJ5IHRoZSBiYW5rZWQgcmVnaXN0ZXJzLgotCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zaC9yZWdpc3Rlci1iYW5rcy50eHQ+IGZvciBmdXJ0aGVyCi0JICBpbmZvcm1hdGlvbiBvbiBTUi5SQiBhbmQgcmVnaXN0ZXIgYmFua2luZyBpbiB0aGUga2VybmVsIGluIGdlbmVyYWwuCi0KIGNvbmZpZyBOT0RFU19TSElGVAogCWludAogCWRlZmF1bHQgIjEiCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuZGVidWcgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKaW5kZXggNjZhMjVlZjQuLjg3OTAyZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKQEAgLTMxLDcgKzMxLDggQEAKIAloZXggIlNDSUYgcG9ydCBmb3IgZWFybHkgY29uc29sZSIKIAlkZXBlbmRzIG9uIEVBUkxZX1NDSUZfQ09OU09MRQogCWRlZmF1bHQgIjB4ZmZlMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc4MAotCWRlZmF1bHQgIjB4ZmZmZTk4MDAiIGlmIENQVV9TVUJUWVBFX1NINzIwNjAKKwlkZWZhdWx0ICIweGZmZmU5ODAwIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDYKKwlkZWZhdWx0ICIweGY4NDIwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc2MTkKIAlkZWZhdWx0ICIweGZmZTgwMDAwIiBpZiBDUFVfU0g0CiAKIGNvbmZpZyBFQVJMWV9QUklOVEsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IGQxMGJiYTUuLmMxZGJlZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMTc5LDcgKzE3OSw3IEBACiAKIGFsbDogekltYWdlCiAKLXpJbWFnZTogdm1saW51eAorekltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB2bWxpbnV4LnNyZWM6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoYm9vdCkvJEAKIAogY29tcHJlc3NlZDogekltYWdlCkBAIC0xOTAsNSArMTkwLDggQEAKIENMRUFOX0ZJTEVTICs9IGluY2x1ZGUvYXNtLXNoL21hY2h0eXBlcy5oCiAKIGRlZmluZSBhcmNoaGVscAotCUBlY2hvICcgIHpJbWFnZSAJICAgICAgICAgICAtIENvbXByZXNzZWQga2VybmVsIGltYWdlIChhcmNoL3NoL2Jvb3QvekltYWdlKScKKwlAZWNobyAnKiB6SW1hZ2UgCSAgICAgICAgICAgLSBDb21wcmVzc2VkIGtlcm5lbCBpbWFnZScKKwlAZWNobyAnICB2bWxpbnV4LnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBFTEYgUy1yZWNvcmQnCisJQGVjaG8gJyAgdUltYWdlICAJICAgICAgICAgICAtIENyZWF0ZSBhIGJvb3RhYmxlIGltYWdlIGZvciBVLUJvb3QnCisJQGVjaG8gJyAgdUltYWdlLnNyZWMgIAkgICAgICAgICAgIC0gQ3JlYXRlIGFuIFMtcmVjb3JkIGZvciBVLUJvb3QnCiBlbmRlZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL2xhbmRpc2svaXJxLmMKaW5kZXggOGYyZTFjNi4uM2ViYTZkMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9sYW5kaXNrL2lycS5jCkBAIC0xNiw4ICsxNiw4IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2xhbmRpc2svaW9kYXRhX2xhbmRpc2suaD4KIAogc3RhdGljIHZvaWQgZW5hYmxlX2xhbmRpc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzIwNi9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzcyMDYvaXJxLmMKaW5kZXggM2ZiMGM1Zi4uMjdkYTg4NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzIwNi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MjA2L2lycS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vc2U3MjA2Lmg+CiAKICNkZWZpbmUgSU5UU1RTMCAweDMxODAwMDAwCkBAIC0xOCw2ICsxOSwxMyBAQAogI2RlZmluZSBJTlRNU0sxIDB4MzE4MDAwMDYKICNkZWZpbmUgSU5UU0VMICAweDMxODAwMDA4CiAKKyNkZWZpbmUgSVJRMF9JUlEgNjQKKyNkZWZpbmUgSVJRMV9JUlEgNjUKKyNkZWZpbmUgSVJRM19JUlEgNjcKKworI2RlZmluZSBJTlRDX0lQUjAxIDB4ZmZmZTA4MTgKKyNkZWZpbmUgSU5UQ19JQ1IxICAweGZmZmUwODAyCisKIHN0YXRpYyB2b2lkIGRpc2FibGVfc2U3MjA2X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIHNob3J0IHZhbDsKQEAgLTM5LDcgKzQ3LDcgQEAKIAljYXNlIElSUTFfSVJROgogCQltc2swIHw9IDB4MDAwZjsKIAkJYnJlYWs7Ci0JY2FzZSBJUlEyX0lSUToKKwljYXNlIElSUTNfSVJROgogCQltc2swIHw9IDB4MGYwMDsKIAkJbXNrMSB8PSAweDAwZmY7CiAJCWJyZWFrOwpAQCAtNzAsNyArNzgsNyBAQAogCWNhc2UgSVJRMV9JUlE6CiAJCW1zazAgJj0gfjB4MDAwZjsKIAkJYnJlYWs7Ci0JY2FzZSBJUlEyX0lSUToKKwljYXNlIElSUTNfSVJROgogCQltc2swICY9IH4weDBmMDA7CiAJCW1zazEgJj0gfjB4MDBmZjsKIAkJYnJlYWs7CkBAIC05Niw3ICsxMDQsNyBAQAogCWNhc2UgSVJRMV9JUlE6CiAJCXN0czAgJj0gfjB4MDAwZjsKIAkJYnJlYWs7Ci0JY2FzZSBJUlEyX0lSUToKKwljYXNlIElSUTNfSVJROgogCQlzdHMwICY9IH4weDBmMDA7CiAJCXN0czEgJj0gfjB4MDBmZjsKIAkJYnJlYWs7CkBAIC0xMDYsNyArMTE0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzZTcyMDZfaXJxX2NoaXAgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkJPSAiU0U3MjA2LUZQR0EtSVJRIiwKKwkubmFtZQkJPSAiU0U3MjA2LUZQR0EiLAogCS5tYXNrCQk9IGRpc2FibGVfc2U3MjA2X2lycSwKIAkudW5tYXNrCQk9IGVuYWJsZV9zZTcyMDZfaXJxLAogCS5tYXNrX2Fjawk9IGRpc2FibGVfc2U3MjA2X2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc2MTkvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9zZS83NjE5L01ha2VmaWxlCmluZGV4IDM2NjZlY2EuLmQyMTc3NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc2MTkvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzYxOS9NYWtlZmlsZQpAQCAtMiw0ICsyLDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSA3NjE5IFNvbHV0aW9uRW5naW5lIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwKICMKIAotb2JqLXkJIDo9IHNldHVwLm8gaW8ubworb2JqLXkJIDo9IHNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc2MTkvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc2MTkvaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc2ZjFmMzljLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc2MTkvaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICoKLSAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL3NlLzc2MTkvaW8uYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiAgWW9zaGlub3JpIFNhdG8KLSAqCi0gKiBJL08gcm91dGluZSBmb3IgSGl0YWNoaSA3NjE5IFNvbHV0aW9uRW5naW5lLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2U3NjE5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0vKiBGSVhNRTogTTNBLVpBQjcgQ29tcGFjdCBGbGFzaCBTbG90IHN1cHBvcnQgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGRlbGF5KHZvaWQpCi17Ci0JY3RybF9pbncoMHhhMDAwMDAwMCk7CS8qIFVuY2FjaGVkIFJPTSBhcmVhIChQMikgKi8KLX0KLQotI2RlZmluZSBiYWRpbyhuYW1lLHBvcnQpIFwKLSAgcHJpbnRrKCJiYWQgSS9PIG9wZXJhdGlvbiAoJXMpIGZvciBwb3J0IDB4JWx4IGF0IDB4JTA4eFxuIiwgXAotCSAjbmFtZSwgKHBvcnQpLCAoX191MzIpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKLQotdW5zaWduZWQgY2hhciBzZTc2MTlfX19pbmIodW5zaWduZWQgbG9uZyBwb3J0KQotewotCWJhZGlvKGluYiwgcG9ydCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIGNoYXIgc2U3NjE5X19faW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQotewotCWJhZGlvKGluYl9wLCBwb3J0KTsKLQlkZWxheSgpOwotCXJldHVybiAwOwotfQotCi11bnNpZ25lZCBzaG9ydCBzZTc2MTlfX19pbncodW5zaWduZWQgbG9uZyBwb3J0KQotewotCWJhZGlvKGludywgcG9ydCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIGludCBzZTc2MTlfX19pbmwodW5zaWduZWQgbG9uZyBwb3J0KQotewotCWJhZGlvKGlubCwgcG9ydCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgc2U3NjE5X19fb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JYmFkaW8ob3V0YiwgcG9ydCk7Ci19Ci0KLXZvaWQgc2U3NjE5X19fb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQliYWRpbyhvdXRiX3AsIHBvcnQpOwotCWRlbGF5KCk7Ci19Ci0KLXZvaWQgc2U3NjE5X19fb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotCWJhZGlvKG91dHcsIHBvcnQpOwotfQotCi12b2lkIHNlNzYxOV9fX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JYmFkaW8ob3V0bCwgcG9ydCk7Ci19Ci0KLXZvaWQgc2U3NjE5X19faW5zYih1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JYmFkaW8oaW53LCBwb3J0KTsKLX0KLQotdm9pZCBzZTc2MTlfX19pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQliYWRpbyhpbncsIHBvcnQpOwotfQotCi12b2lkIHNlNzYxOV9fX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotCWJhZGlvKGluc2wsIHBvcnQpOwotfQotCi12b2lkIHNlNzYxOV9fX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQliYWRpbyhpbnNsLCBwb3J0KTsKLX0KLQotdm9pZCBzZTc2MTlfX19vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JYmFkaW8oaW5zbCwgcG9ydCk7Ci19Ci0KLXZvaWQgc2U3NjE5X19fb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotCWJhZGlvKG91dHN3LCBwb3J0KTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc2MTkvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc2MTkvc2V0dXAuYwppbmRleCBlNjI3YjI2Li41MmQyYzRkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NjE5L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzYxOS9zZXR1cC5jCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2U3NjE5Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KIAogLyoKQEAgLTE5LDI1ICsxOCw1IEBACiBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfc2UgX19pbml0bXYgPSB7CiAJLm12X25hbWUJCT0gIlNvbHV0aW9uRW5naW5lIiwKIAkubXZfbnJfaXJxcwkJPSAxMDgsCi0JLm12X2luYgkJCT0gc2U3NjE5X19faW5iLAotCS5tdl9pbncJCQk9IHNlNzYxOV9fX2ludywKLQkubXZfaW5sCQkJPSBzZTc2MTlfX19pbmwsCi0JLm12X291dGIJCT0gc2U3NjE5X19fb3V0YiwKLQkubXZfb3V0dwkJPSBzZTc2MTlfX19vdXR3LAotCS5tdl9vdXRsCQk9IHNlNzYxOV9fX291dGwsCi0KLQkubXZfaW5iX3AJCT0gc2U3NjE5X19faW5iX3AsCi0JLm12X2lud19wCQk9IHNlNzYxOV9fX2ludywKLQkubXZfaW5sX3AJCT0gc2U3NjE5X19faW5sLAotCS5tdl9vdXRiX3AJCT0gc2U3NjE5X19fb3V0Yl9wLAotCS5tdl9vdXR3X3AJCT0gc2U3NjE5X19fb3V0dywKLQkubXZfb3V0bF9wCQk9IHNlNzYxOV9fX291dGwsCi0KLQkubXZfaW5zYgkJPSBzZTc2MTlfX19pbnNiLAotCS5tdl9pbnN3CQk9IHNlNzYxOV9fX2luc3csCi0JLm12X2luc2wJCT0gc2U3NjE5X19faW5zbCwKLQkubXZfb3V0c2IJCT0gc2U3NjE5X19fb3V0c2IsCi0JLm12X291dHN3CQk9IHNlNzYxOV9fX291dHN3LAotCS5tdl9vdXRzbAkJPSBzZTc2MTlfX19vdXRzbCwKIH07CiBBTElBU19NVihzZSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQppbmRleCA2MDc5N2IzLi4xMWRjMjcyYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtOCwxMyArOCw0OSBAQAogIyBDb3B5cmlnaHQgKEMpIDE5OTkgU3R1YXJ0IE1lbmVmeQogIwogCi10YXJnZXRzIDo9IHpJbWFnZQorTUtJTUFHRSA6PSAkKHNyY3RyZWUpL3NjcmlwdHMvbWt1Ym9vdC5zaAorCisjCisjIEFzc2lnbiBzYWZlIGR1bW15IHZhbHVlcyBpZiB0aGVzZSB2YXJpYWJsZXMgYXJlIG5vdCBkZWZpbmVkLAorIyBpbiBvcmRlciB0byBzdXBwcmVzcyBlcnJvciBtZXNzYWdlLgorIworQ09ORklHX1BBR0VfT0ZGU0VUCT89IDB4ODAwMDAwMDAKK0NPTkZJR19NRU1PUllfU1RBUlQJPz0gMHgwYzAwMDAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQJPz0gMHgwMDgwMDAwMAorQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQJPz0gMHgwMDAwMTAwMAorCitleHBvcnQgQ09ORklHX1BBR0VfT0ZGU0VUIENPTkZJR19NRU1PUllfU1RBUlQgQ09ORklHX0JPT1RfTElOS19PRkZTRVQgXAorICAgICAgIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUCisKK3RhcmdldHMgOj0gekltYWdlIHZtbGludXguc3JlYyB1SW1hZ2UgdUltYWdlLnNyZWMKIHN1YmRpci0gOj0gY29tcHJlc3NlZAogCiAkKG9iaikvekltYWdlOiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4IEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKLQlAZWNobyAnS2VybmVsOiAkQCBpcyByZWFkeScKKwlAZWNobyAnICBLZXJuZWw6ICRAIGlzIHJlYWR5JwogCiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACiAKK0tFUk5FTF9MT0FECTo9ICQoc2hlbGwgcHJpbnRmICIweCU4eCIgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKKwkJCQkJICAgICAkKENPTkZJR19NRU1PUllfU1RBUlQpICsgXAorCQkJCQkgICAgICQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpKzB4MTAwMF0pCisKK3F1aWV0X2NtZF91aW1hZ2UgPSBVSU1BR0UgICRACisgICAgICBjbWRfdWltYWdlID0gJChDT05GSUdfU0hFTEwpICQoTUtJTUFHRSkgLUEgc2ggLU8gbGludXggLVQga2VybmVsIFwKKwkJICAgLUMgZ3ppcCAtYSAkKEtFUk5FTF9MT0FEKSAtZSAkKEtFUk5FTF9MT0FEKSBcCisJCSAgIC1uICdMaW51eC0kKEtFUk5FTFJFTEVBU0UpJyAtZCAkPCAkQAorCiskKG9iaikvdUltYWdlOiAkKG9iaikvekltYWdlIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlKQorCUBlY2hvICcgIEltYWdlICRAIGlzIHJlYWR5JworCitPQkpDT1BZRkxBR1Nfdm1saW51eC5zcmVjIDo9IC1JIGJpbmFyeSAtTyBzcmVjCiskKG9iaikvdm1saW51eC5zcmVjOiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4CisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKKworT0JKQ09QWUZMQUdTX3VJbWFnZS5zcmVjIDo9IC1JIGJpbmFyeSAtTyBzcmVjCiskKG9iaikvdUltYWdlLnNyZWM6ICQob2JqKS91SW1hZ2UKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCitjbGVhbi1maWxlcwkrPSB1SW1hZ2UgdUltYWdlLnNyZWMgdm1saW51eC5zcmVjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IGU1ZjQ0MzcuLmQ5NTEyNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC0xNSwxMyArMTUsNyBAQAogCiAjCiAjIElNQUdFX09GRlNFVCBpcyB0aGUgbG9hZCBvZmZzZXQgb2YgdGhlIGNvbXByZXNzaW9uIGxvYWRlcgotIyBBc3NpZ24gZHVtbXkgdmFsdWVzIGlmIHRoZXNlIDIgdmFyaWFibGVzIGFyZSBub3QgZGVmaW5lZCwKLSMgaW4gb3JkZXIgdG8gc3VwcHJlc3MgZXJyb3IgbWVzc2FnZS4KICMKLUNPTkZJR19QQUdFX09GRlNFVAk/PSAweDgwMDAwMDAwCi1DT05GSUdfTUVNT1JZX1NUQVJUICAgICA/PSAweDBjMDAwMDAwCi1DT05GSUdfQk9PVF9MSU5LX09GRlNFVCA/PSAweDAwODAwMDAwCi0KIElNQUdFX09GRlNFVAk6PSAkKHNoZWxsIHByaW50ZiAiMHglMDh4IiAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAogCQkJCQkgICAgICAkKENPTkZJR19NRU1PUllfU1RBUlQpICsgXAogCQkJCQkgICAgICAkKENPTkZJR19CT09UX0xJTktfT0ZGU0VUKV0pCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggNGMyNmExOS4uYTgzOTliMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtOCw2ICs4LDcgQEAKIC50ZXh0CiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogCS5nbG9iYWwJc3RhcnR1cAogc3RhcnR1cDoKQEAgLTk3LDcgKzk4LDcgQEAKIGRlY29tcHJlc3Nfa2VybmVsX2FkZHI6CiAJLmxvbmcJZGVjb21wcmVzc19rZXJuZWwKIGtlcm5lbF9zdGFydF9hZGRyOgotCS5sb25nCV90ZXh0KzB4MTAwMAorCS5sb25nCV90ZXh0K1BBR0VfU0laRQogCiAJLmFsaWduCTkKIGZha2VfaGVhZGVyc19hc19iekltYWdlOgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDM1NDUyZDguLmRmNjVlMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKICNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgogI2VuZGlmCkBAIC0yMjksNyArMjMwLDcgQEAKIHZvaWQgZGVjb21wcmVzc19rZXJuZWwodm9pZCkKIHsKIAlvdXRwdXRfZGF0YSA9IDA7Ci0Jb3V0cHV0X3B0ciA9IFAyU0VHQUREUigodW5zaWduZWQgbG9uZykmX3RleHQrMHgxMDAwKTsKKwlvdXRwdXRfcHRyID0gUDJTRUdBRERSKCh1bnNpZ25lZCBsb25nKSZfdGV4dCtQQUdFX1NJWkUpOwogCWZyZWVfbWVtX3B0ciA9ICh1bnNpZ25lZCBsb25nKSZfZW5kOwogCWZyZWVfbWVtX2VuZF9wdHIgPSBmcmVlX21lbV9wdHIgKyBIRUFQX1NJWkU7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZwppbmRleCAyMzhjMGYxLi5lN2Y4ZGRiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4Ci0jIFR1ZSBPY3QgIDMgMTE6MTQ6MTMgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5CisjIFRodSBEZWMgIDcgMTc6MTM6MDQgMjAwNgogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CkBAIC0xMCw2ICsxMCw5IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMzMsNiArMzYsNyBAQAogIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtMTE0LDYgKzExOCw4IEBACiBDT05GSUdfU0hfTEFORElTSz15CiAjIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TSE1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83MjA2X1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83NjE5X1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9VTktOT1dOIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI1LDYgKzEzMSwxMiBAQAogIyBTSC0yIFByb2Nlc3NvciBTdXBwb3J0CiAjCiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKworIworIyBTSC0yQSBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKIAogIwogIyBTSC0zIFByb2Nlc3NvciBTdXBwb3J0CkBAIC0xNjAsNiArMTcyLDcgQEAKICMKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKIAogIwogIyBTSDRBTC1EU1AgUHJvY2Vzc29yIFN1cHBvcnQKQEAgLTE3NSw2ICsxODgsOSBAQAogQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAogQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTk2LDE2ICsyMTIsMjEgQEAKICMgUHJvY2Vzc29yIGZlYXR1cmVzCiAjCiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX1NIX0ZQVT15CiAjIENPTkZJR19TSF9EU1AgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RPUkVfUVVFVUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19JUFJfSVJRPXkKIENPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUE9eQogCiAjCiAjIFRpbWVyIHN1cHBvcnQKICMKIENPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CiBDT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiAKICMKQEAgLTIxNiw5ICsyMzcsNyBAQAogIwogIyBETUEgc3VwcG9ydAogIwotQ09ORklHX1NIX0RNQT15Ci1DT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz00Ci0jIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAogCiAjCiAjIENvbXBhbmlvbiBDaGlwcwpAQCAtMjI3LDYgKzI0NiwxMSBAQAogQ09ORklHX0hFQVJUQkVBVD15CiAKICMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIwogIyBLZXJuZWwgZmVhdHVyZXMKICMKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CkBAIC0zNDAsMTEgKzM2NCwxMyBAQAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogCiAjCiAjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCkBAIC0zNjEsMjQgKzM4NywxMiBAQAogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCi1DT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19JUF9ORl9DVF9BQ0NUPXkKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAotQ09ORklHX0lQX05GX0ZUUD1tCi1DT05GSUdfSVBfTkZfSVJDPW0KLSMgQ09ORklHX0lQX05GX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1RGVFA9bQotQ09ORklHX0lQX05GX0FNQU5EQT1tCi0jIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfU0lQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiAKICMKQEAgLTQ3Nyw2ICs0OTEsMTIgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQpAQCAtNTE5LDYgKzUzOSw3IEBACiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKQEAgLTU0Miw2ICs1NjMsNyBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTU2MSw2ICs1ODMsNyBAQAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNjAyLDEyICs2MjUsMTIgQEAKICMgQ09ORklHX1NDU0lfTkNSNTNDNDA2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFNJMjQwSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldApAQCAtNjE1LDYgKzYzOCw3IEBACiAjIENPTkZJR19TQ1NJX1QxMjggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKIAogIwogIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKQEAgLTc1Nyw2ICs3ODEsNyBAQAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtODcxLDEwICs4OTYsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCkBAIC04ODksNyArOTEwLDYgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC05MDUsNiArOTI1LDcgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtOTE3LDEwICs5MzgsNiBAQAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiBDT05GSUdfVklERU9fREVWPW0KQEAgLTEwMzcsNiArMTA1NCw3IEBACiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9CQU5EV0lEVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEwNiw3ICsxMTI0LDYgQEAKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC0xMTIxLDYgKzExMzgsNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BFR0FTVVM9bQogQ09ORklHX1VTQl9SVEw4MTUwPW0KKyMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogCkBAIC0xMTU2LDYgKzExNzQsNyBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQpAQCAtMTE2Nyw2ICsxMTg2LDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCkBAIC0xMTg4LDYgKzEyMDgsNyBAQAogQ09ORklHX1VTQl9TSVNVU0JWR0E9bQogQ09ORklHX1VTQl9TSVNVU0JWR0FfQ09OPXkKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCkBAIC0xMjU0LDYgKzEyNzUsNyBAQAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKQEAgLTEyNjQsNiArMTI4Niw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15CkBAIC0xNDE0LDYgKzE0MzcsNyBAQAogIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKQEAgLTE0MjIsNiArMTQ0Niw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldApAQCAtMTQ0NSw2ICsxNDcwLDQgQEAKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KIENPTkZJR19QTElTVD15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCmluZGV4IDM2Y2VjMGIuLjg3YWI5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjNAotIyBTdW4gTm92ICA1IDE2OjIwOjEwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOQorIyBXZWQgRGVjICA2IDE0OjQwOjE1IDIwMDYKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQpAQCAtMTEsNiArMTEsOCBAQAogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiAjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTM0LDI0ICszNiwyMyBAQAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQorIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVElOWV9TSE1FTT15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfQkFTRV9TTUFMTD0xCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwpAQCAtMTYwLDYgKzE2MSw3IEBACiAjCiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CiAKICMKICMgU0g0QUwtRFNQIFByb2Nlc3NvciBTdXBwb3J0CkBAIC0xNzIsNyArMTc0LDEwIEBACiAjCiBDT05GSUdfUEFHRV9PRkZTRVQ9MHgwMDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCi1DT05GSUdfTUVNT1JZX1NJWkU9MHgwMjAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MDQwMDAwMDAKK0NPTkZJR19QQUdFX1NJWkVfNEtCPXkKKyMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMTk0LDYgKzE5OSw3IEBACiAjIFByb2Nlc3NvciBmZWF0dXJlcwogIwogIyBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKICMgQ09ORklHX1NIX0ZQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9GUFVfRU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX0RTUCBpcyBub3Qgc2V0CkBAIC0yMDMsNiArMjA5LDggQEAKICMKIENPTkZJR19TSF9DTVQ9eQogIyBDT05GSUdfU0hfTVRVMiBpcyBub3Qgc2V0CitDT05GSUdfU0hfVElNRVJfSVJRPTE0MAorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CiBDT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfU0hfQ0xLX01EPTYKIApAQCAtMjIyLDYgKzIzMCwxMSBAQAogIyBDT05GSUdfSEQ2NDQ2WF9TRVJJRVMgaXMgbm90IHNldAogCiAjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKICMgS2VybmVsIGZlYXR1cmVzCiAjCiBDT05GSUdfSFpfMTAwPXkKQEAgLTI3OSw5ICsyOTIsNiBAQAogIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOSVggaXMgbm90IHNldAotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKICMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CkBAIC0yOTcsOSArMzA3LDkgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKQEAgLTM3MSw3ICszODEsNyBAQAogIwogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKQEAgLTQyMiw3ICs0MzIsNyBAQAogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKIENPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDIwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MTAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAxMDAwMDAwCiBDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKICMgQ09ORklHX01URF9TT0xVVElPTkVOR0lORSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfVUNMSU5VWCBpcyBub3Qgc2V0CkBAIC00NjgsMTAgKzQ3OCw3IEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldApAQCAtNTE5LDcgKzUyNiw1MCBAQAogIwogIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi0jIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIApAQCAtNTM2LDcgKzU4NiwyNiBAQAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwotIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwpAQCAtNTY0LDggKzYzMyw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfVU5JWDk4X1BUWVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogCiAjCiAjIElQTUkKQEAgLTU3Niw3ICs2NDQsNyBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKQEAgLTYxMCwxMiArNjc4LDggQEAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCi1DT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKQEAgLTYzMCw3ICs2OTQsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi1DT05GSUdfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzAxLDggKzc2NSw3IEBACiAjCiAjIEZpbGUgc3lzdGVtcwogIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CkBAIC03NTUsNyArODE4LDcgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldApAQCAtNzkzLDggKzg1Niw5IEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTgxOSw3ICs4ODMsNyBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCi1DT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc2MTlfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhYzdmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc2MTlfZGVmY29uZmlnCkBAIC0wLDAgKzEsNzQ0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTkKKyMgV2VkIERlYyAgNiAxNjozNTozNiAyMDA2CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKyMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1RJTllfU0hNRU09eQorQ09ORklHX0JBU0VfU01BTEw9MQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorCisjCisjIEJsb2NrIGxheWVyCisjCitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKworIworIyBTeXN0ZW0gdHlwZQorIworIyBDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzc3NTFfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzczMDBfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzczNDNfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzczMTgwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83NzUxX1NZU1RFTUggaXMgbm90IHNldAorIyBDT05GSUdfU0hfSFA2WFggaXMgbm90IHNldAorIyBDT05GSUdfU0hfRUMzMTA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NBVFVSTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9EUkVBTUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0hfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX01QQzEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0gwMyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9IUzc3NTFSVk9JUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83NzEwVk9JUEdXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1JUUzc3NTFSMkQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfUjc3ODBSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9FRE9TSzc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0g0MjAyX01JQ1JPREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0hNSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzIwNl9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX1NIXzc2MTlfU09MVVRJT05fRU5HSU5FPXkKKyMgQ09ORklHX1NIX1VOS05PV04gaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzZWxlY3Rpb24KKyMKK0NPTkZJR19DUFVfU0gyPXkKKworIworIyBTSC0yIFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MDQgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOT15CisKKyMKKyMgU0gtMkEgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNiBpcyBub3Qgc2V0CisKKyMKKyMgU0gtMyBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKKworIworIyBTSC00IFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisKKyMKKyMgU1Q0MCBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MEdYMSBpcyBub3Qgc2V0CisKKyMKKyMgU0gtNEEgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKworIworIyBTSDRBTC1EU1AgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUEFHRV9PRkZTRVQ9MHgwMDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX1NIX1dSSVRFVEhST1VHSD15CisjIENPTkZJR19TSF9PQ1JBTSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCisjIENPTkZJR19DUFVfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0JJR19FTkRJQU49eQorIyBDT05GSUdfU0hfRlBVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0ZQVV9FTVUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRFNQIGlzIG5vdCBzZXQKKworIworIyBUaW1lciBzdXBwb3J0CisjCitDT05GSUdfU0hfQ01UPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9ODYKKyMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAorQ09ORklHX1NIX1BDTEtfRlJFUT0zMTI1MDAwMAorQ09ORklHX1NIX0NMS19NRD01CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisjIENPTkZJR19IRDY0NDZYX1NFUklFUyBpcyBub3Qgc2V0CisKKyMKKyMgQWRkaXRpb25hbCBTdXBlckggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKK0NPTkZJR19IWl8xMDA9eQorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCisjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9GTEFUPXkKK0NPTkZJR19CSU5GTVRfWkZMQVQ9eQorIyBDT05GSUdfQklORk1UX1NIQVJFRF9GTEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCisjIENPTkZJR19ORVQgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weGEwMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDEwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorIyBDT05GSUdfTVREX1NPTFVUSU9ORU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9VQ0xJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorCisjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCisjCisjIENPTkZJR19BVEEgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz0zCitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19VTklYOThfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisKKyMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjCisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKworIworIyBETUEgRGV2aWNlcworIworCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcHVzaC1zd2l0Y2guYyBiL2FyY2gvc2gvZHJpdmVycy9wdXNoLXN3aXRjaC5jCmluZGV4IGYyYjkxNTcuLmIzZDIwYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wdXNoLXN3aXRjaC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wdXNoLXN3aXRjaC5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL3B1c2gtc3dpdGNoLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInB1c2gtc3dpdGNoIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4xLjAiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjEuMSIKIAogc3RhdGljIHNzaXplX3Qgc3dpdGNoX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0zMiwxMCArMzIsMTAgQEAKIAlzY2hlZHVsZV93b3JrKCZwc3ctPndvcmspOwogfQogCi1zdGF0aWMgdm9pZCBzd2l0Y2hfd29ya19oYW5kbGVyKHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBzd2l0Y2hfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgcHVzaF9zd2l0Y2ggKnBzdyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBwdXNoX3N3aXRjaCAqcHN3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwdXNoX3N3aXRjaCwgd29yayk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBzdy0+cGRldjsKIAogCXBzdy0+c3RhdGUgPSAwOwogCkBAIC03NiwxMiArNzYsMTUgQEAKIAkJfQogCX0KIAotCUlOSVRfV09SSygmcHN3LT53b3JrLCBzd2l0Y2hfd29ya19oYW5kbGVyLCBwZGV2KTsKKwlJTklUX1dPUksoJnBzdy0+d29yaywgc3dpdGNoX3dvcmtfaGFuZGxlcik7CiAJaW5pdF90aW1lcigmcHN3LT5kZWJvdW5jZSk7CiAKIAlwc3ctPmRlYm91bmNlLmZ1bmN0aW9uID0gc3dpdGNoX3RpbWVyOwogCXBzdy0+ZGVib3VuY2UuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBzdzsKIAorCS8qIFdvcmtxdWV1ZSBBUEkgYnJhaW4tZGFtYWdlICovCisJcHN3LT5wZGV2ID0gcGRldjsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBzdyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCAwNTgyZTY3Li5kMDU1YTNlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9TSDJBKQkJPSBzaDJhLwogb2JqLSQoQ09ORklHX0NQVV9TSDMpCQk9IHNoMy8KIG9iai0kKENPTkZJR19DUFVfU0g0KQkJPSBzaDQvCitvYmotJChDT05GSUdfQ1BVX1NINEEpCQkrPSBzaDRhLwogCiBvYmotJChDT05GSUdfVUJDX1dBS0VVUCkJKz0gdWJjLm8KIG9iai0kKENPTkZJR19TSF9BREMpCQkrPSBhZGMubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9lbnRyeS5TCmluZGV4IDM0ZDUxYjMuLmQ1MWZhNWU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2VudHJ5LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9lbnRyeS5TCkBAIC0xNzcsMTUgKzE3NywyMSBAQAogNzoJLmxvbmcJZG9fSVJRCiA4OgkubG9uZwlkb19leGNlcHRpb25fZXJyb3IKIAkKLXRyYXBfZW50cnk6CQotCWFkZAkjLTB4MTAscjkKK3RyYXBfZW50cnk6CisJLyogdmVyYm9zZSBCVUcgdHJhcGEgZW50cnkgY2hlY2sgKi8KKwltb3YJIzB4M2UscjgKKwljbXAvZ2UJcjgscjkKKwliZi9zCTFmCisJIGFkZAkjLTB4MTAscjkKKwlhZGQJIzB4MTAscjkKKzE6CQogCXNobGwyCXI5CQkJISBUUkEKIAltb3YJI09GRl9UUkEscjgKIAlhZGQJcjE1LHI4CiAJbW92LmwJcjksQHI4CiAJbW92CXI5LHI4CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JbW92LmwJNWYsIHI5CisJbW92LmwJMmYsIHI5CiAJanNyCUByOQogCSBub3AKICNlbmRpZgpAQCAtMTk0LDEyICsyMDAsOCBAQAogCSBub3AKIAkKIAkuYWxpZ24JMgotMToJLmxvbmcJc3lzY2FsbF9leGl0Ci0yOgkubG9uZwlicmVha19wb2ludF90cmFwX3NvZnR3YXJlCi0zOgkubG9uZwlOUl9zeXNjYWxscwotNDoJLmxvbmcJc3lzX2NhbGxfdGFibGUKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLTU6CS5sb25nCXRyYWNlX2hhcmRpcnFzX29uCisyOgkubG9uZwl0cmFjZV9oYXJkaXJxc19vbgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQpAQCAtMjY0LDcgKzI2Niw3IEBACiByZXN0b3JlX2FsbDoKIAljbGkKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQltb3YubAkzZiwgcjAKKwltb3YubAkxZiwgcjAKIAlqc3IJQHIwCiAJIG5vcAogI2VuZGlmCkBAIC0zMDksMjAgKzMxMSwxNCBAQAogCW1vdi5sCUByMTUscjE1CiAJcnRlCiAJIG5vcAotMjoKLQltb3YubAkxZixyOAotCW1vdi5sCTJmLHI5Ci0Jam1wCUByOQotCSBsZHMJcjgscHIKIAotCS5hbGlnbgkyCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisxOiAgICAgLmxvbmcgICB0cmFjZV9oYXJkaXJxc19vZmYKKyNlbmRpZgogJGN1cnJlbnRfdGhyZWFkX2luZm86CiAJLmxvbmcJX19jdXJyZW50X3RocmVhZF9pbmZvCiAkY3B1X21vZGU6CQogCS5sb25nCV9fY3B1X21vZGUKLSNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLTM6CS5sb25nCXRyYWNlX2hhcmRpcnFzX29mZgotI2VuZGlmCiAJCQogISBjb21tb24gZXhjZXB0aW9uIGhhbmRsZXIKICNpbmNsdWRlICIuLi8uLi9lbnRyeS1jb21tb24uUyIKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCmluZGV4IDgyYzJkOTAuLjc5MjgzZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYwpAQCAtNTEsMyArNTEsNDQgQEAKIAkJCQkgICAgQVJSQVlfU0laRShzaDc2MTlfZGV2aWNlcykpOwogfQogX19pbml0Y2FsbChzaDc2MTlfZGV2aWNlc19zZXR1cCk7CisKKyNkZWZpbmUgSU5UQ19JUFJDICAgICAgMHhmODA4MDAwMFVMCisjZGVmaW5lIElOVENfSVBSRCAgICAgIDB4ZjgwODAwMDJVTAorCisjZGVmaW5lIENNSTBfSVJRICAgICAgIDg2CisKKyNkZWZpbmUgU0NJRjBfRVJJX0lSUSAgODgKKyNkZWZpbmUgU0NJRjBfUlhJX0lSUSAgODkKKyNkZWZpbmUgU0NJRjBfQlJJX0lSUSAgOTAKKyNkZWZpbmUgU0NJRjBfVFhJX0lSUSAgOTEKKworI2RlZmluZSBTQ0lGMV9FUklfSVJRICA5MgorI2RlZmluZSBTQ0lGMV9SWElfSVJRICA5MworI2RlZmluZSBTQ0lGMV9CUklfSVJRICA5NAorI2RlZmluZSBTQ0lGMV9UWElfSVJRICA5NQorCisjZGVmaW5lIFNDSUYyX0JSSV9JUlEgIDk2CisjZGVmaW5lIFNDSUYyX0VSSV9JUlEgIDk3CisjZGVmaW5lIFNDSUYyX1JYSV9JUlEgIDk4CisjZGVmaW5lIFNDSUYyX1RYSV9JUlEgIDk5CisKK3N0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgc2g3NjE5X2lwcl9tYXBbXSA9IHsKKwl7IENNSTBfSVJRLCAgICAgIElOVENfSVBSQywgMSwgMiB9LAorCXsgU0NJRjBfRVJJX0lSUSwgSU5UQ19JUFJELCAzLCAzIH0sCisJeyBTQ0lGMF9SWElfSVJRLCBJTlRDX0lQUkQsIDMsIDMgfSwKKwl7IFNDSUYwX0JSSV9JUlEsIElOVENfSVBSRCwgMywgMyB9LAorCXsgU0NJRjBfVFhJX0lSUSwgSU5UQ19JUFJELCAzLCAzIH0sCisJeyBTQ0lGMV9FUklfSVJRLCBJTlRDX0lQUkQsIDIsIDMgfSwKKwl7IFNDSUYxX1JYSV9JUlEsIElOVENfSVBSRCwgMiwgMyB9LAorCXsgU0NJRjFfQlJJX0lSUSwgSU5UQ19JUFJELCAyLCAzIH0sCisJeyBTQ0lGMV9UWElfSVJRLCBJTlRDX0lQUkQsIDIsIDMgfSwKKwl7IFNDSUYyX0VSSV9JUlEsIElOVENfSVBSRCwgMSwgMyB9LAorCXsgU0NJRjJfUlhJX0lSUSwgSU5UQ19JUFJELCAxLCAzIH0sCisJeyBTQ0lGMl9CUklfSVJRLCBJTlRDX0lQUkQsIDEsIDMgfSwKKwl7IFNDSUYyX1RYSV9JUlEsIElOVENfSVBSRCwgMSwgMyB9LAorfTsKKwordm9pZCBfX2luaXQgaW5pdF9JUlFfaXByKHZvaWQpCit7CisJbWFrZV9pcHJfaXJxKHNoNzYxOV9pcHJfbWFwLCBBUlJBWV9TSVpFKHNoNzYxOV9pcHJfbWFwKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwNi5jCmluZGV4IGNkZmVlZjQ5Li40YjYwZmNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYwpAQCAtMTcsMjIgKzE3LDIyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDI0MCwgMjQxLCAyNDIsIDI0M30sCisJCS5pcnFzCQk9ICB7IDI0MSwgMjQyLCAyNDMsIDI0MH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNDQsIDI0NSwgMjQ2LCAyNDd9LAorCQkuaXJxcwkJPSAgeyAyNDcsIDI0NCwgMjQ1LCAyNDZ9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjQ4LCAyNDksIDI1MCwgMjUxfSwKKwkJLmlycXMJCT0gIHsgMjQ5LCAyNTAsIDI1MSwgMjQ4fSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDI1MiwgMjUzLCAyNTQsIDI1NX0sCisJCS5pcnFzCQk9ICB7IDI1MywgMjU0LCAyNTUsIDI1Mn0sCiAJfSwgewogCQkuZmxhZ3MgPSAwLAogCX0KQEAgLTU2LDMgKzU2LDU3IEBACiAJCQkJICAgIEFSUkFZX1NJWkUoc2g3MjA2X2RldmljZXMpKTsKIH0KIF9faW5pdGNhbGwoc2g3MjA2X2RldmljZXNfc2V0dXApOworCisjZGVmaW5lIElOVENfSVBSMDggICAgIDB4ZmZmZTBjMDRVTAorI2RlZmluZSBJTlRDX0lQUjA5ICAgICAweGZmZmUwYzA2VUwKKyNkZWZpbmUgSU5UQ19JUFIxNCAgICAgMHhmZmZlMGMxMFVMCisKKyNkZWZpbmUgQ01JMF9JUlEgICAgICAgMTQwCisKKyNkZWZpbmUgTVRVMV9UR0kxQSAgICAgMTY0CisKKyNkZWZpbmUgU0NJRjBfQlJJX0lSUSAgMjQwCisjZGVmaW5lIFNDSUYwX0VSSV9JUlEgIDI0MQorI2RlZmluZSBTQ0lGMF9SWElfSVJRICAyNDIKKyNkZWZpbmUgU0NJRjBfVFhJX0lSUSAgMjQzCisKKyNkZWZpbmUgU0NJRjFfQlJJX0lSUSAgMjQ0CisjZGVmaW5lIFNDSUYxX0VSSV9JUlEgIDI0NQorI2RlZmluZSBTQ0lGMV9SWElfSVJRICAyNDYKKyNkZWZpbmUgU0NJRjFfVFhJX0lSUSAgMjQ3CisKKyNkZWZpbmUgU0NJRjJfQlJJX0lSUSAgMjQ4CisjZGVmaW5lIFNDSUYyX0VSSV9JUlEgIDI0OQorI2RlZmluZSBTQ0lGMl9SWElfSVJRICAyNTAKKyNkZWZpbmUgU0NJRjJfVFhJX0lSUSAgMjUxCisKKyNkZWZpbmUgU0NJRjNfQlJJX0lSUSAgMjUyCisjZGVmaW5lIFNDSUYzX0VSSV9JUlEgIDI1MworI2RlZmluZSBTQ0lGM19SWElfSVJRICAyNTQKKyNkZWZpbmUgU0NJRjNfVFhJX0lSUSAgMjU1CisKK3N0YXRpYyBzdHJ1Y3QgaXByX2RhdGEgc2g3MjA2X2lwcl9tYXBbXSA9IHsKKwl7IENNSTBfSVJRLCAgICAgIElOVENfSVBSMDgsIDMsIDIgfSwKKwl7IE1UVTJfVEdJMUEsICAgIElOVENfSVBSMDksIDEsIDIgfSwKKwl7IFNDSUYwX0VSSV9JUlEsIElOVENfSVBSMTQsIDMsIDMgfSwKKwl7IFNDSUYwX1JYSV9JUlEsIElOVENfSVBSMTQsIDMsIDMgfSwKKwl7IFNDSUYwX0JSSV9JUlEsIElOVENfSVBSMTQsIDMsIDMgfSwKKwl7IFNDSUYwX1RYSV9JUlEsIElOVENfSVBSMTQsIDMsIDMgfSwKKwl7IFNDSUYxX0VSSV9JUlEsIElOVENfSVBSMTQsIDIsIDMgfSwKKwl7IFNDSUYxX1JYSV9JUlEsIElOVENfSVBSMTQsIDIsIDMgfSwKKwl7IFNDSUYxX0JSSV9JUlEsIElOVENfSVBSMTQsIDIsIDMgfSwKKwl7IFNDSUYxX1RYSV9JUlEsIElOVENfSVBSMTQsIDIsIDMgfSwKKwl7IFNDSUYyX0VSSV9JUlEsIElOVENfSVBSMTQsIDEsIDMgfSwKKwl7IFNDSUYyX1JYSV9JUlEsIElOVENfSVBSMTQsIDEsIDMgfSwKKwl7IFNDSUYyX0JSSV9JUlEsIElOVENfSVBSMTQsIDEsIDMgfSwKKwl7IFNDSUYyX1RYSV9JUlEsIElOVENfSVBSMTQsIDEsIDMgfSwKKwl7IFNDSUYzX0VSSV9JUlEsIElOVENfSVBSMTQsIDAsIDMgfSwKKwl7IFNDSUYzX1JYSV9JUlEsIElOVENfSVBSMTQsIDAsIDMgfSwKKwl7IFNDSUYzX0JSSV9JUlEsIElOVENfSVBSMTQsIDAsIDMgfSwKKwl7IFNDSUYzX1RYSV9JUlEsIElOVENfSVBSMTQsIDAsIDMgfSwKK307CisKK3ZvaWQgX19pbml0IGluaXRfSVJRX2lwcih2b2lkKQoreworCW1ha2VfaXByX2lycShzaDcyMDZfaXByX21hcCwgQVJSQVlfU0laRShzaDcyMDZfaXByX21hcCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKaW5kZXggNmU0MTViYS4uMTljYTY4YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCkBAIC0xMiwxNyArMTIsMTIgQEAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTApCSs9IHNldHVwLXNoNzc1MC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxKQkrPSBzZXR1cC1zaDc3NTAubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkJKz0gc2V0dXAtc2g3NzYwLm8KLW9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCSs9IHNldHVwLXNoNzc3MC5vCi1vYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQkrPSBzZXR1cC1zaDc3ODAubwotb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODApCSs9IHNldHVwLXNoNzMxODAubwotb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykJKz0gc2V0dXAtc2g3MzQzLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyKQkrPSBzZXR1cC1zaDQtMjAyLm8KIAogIyBQcmltYXJ5IG9uLWNoaXAgY2xvY2tzIChjb21tb24pCitpZm5kZWYgQ09ORklHX0NQVV9TSDRBCiBjbG9jay0kKENPTkZJR19DUFVfU0g0KQkJCTo9IGNsb2NrLXNoNC5vCi1jbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwKQk6PSBjbG9jay1zaDczMTgwLm8KLWNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCkJOj0gY2xvY2stc2g3NzcwLm8KLWNsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJOj0gY2xvY2stc2g3NzgwLm8KK2VuZGlmCiAKICMgQWRkaXRpb25hbCBjbG9ja3MgYnkgc3VidHlwZQogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMikJKz0gY2xvY2stc2g0LTIwMi5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKaW5kZXggYWZlMGYxYi4uOTAzMWEyMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwpAQCAtMTE5LDExICsxMTksMjAgQEAKIAkJYnJlYWs7CiAJY2FzZSAweDMwMDA6CiAJY2FzZSAweDMwMDM6CisJY2FzZSAweDMwMDk6CiAJCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzM0MzsKIAkJY3B1X2RhdGEtPmljYWNoZS53YXlzID0gNDsKIAkJY3B1X2RhdGEtPmRjYWNoZS53YXlzID0gNDsKIAkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfTExTQzsKIAkJYnJlYWs7CisJY2FzZSAweDMwMDg6CisJCWlmIChwcnIgPT0gMHhhMCkgeworCQkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3NzIyOworCQkJY3B1X2RhdGEtPmljYWNoZS53YXlzID0gNDsKKwkJCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDQ7CisJCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19MTFNDOworCQl9CisJCWJyZWFrOwogCWNhc2UgMHg4MDAwOgogCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TVDQwUkE7CiAJCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCmluZGV4IGJiY2IwNmYuLmNiYWMyNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwpAQCAtMTQsNiArMTQsMzYgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9zY2kuaD4KIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweGZmYzgwMDAwLAorCQkuZW5kCT0gMHhmZmM4MDAwMCArIDB4NTggLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX0sCisJWzFdID0geworCQkvKiBQZXJpb2QgSVJRICovCisJCS5zdGFydAk9IDIxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLyogQ2FycnkgSVJRICovCisJCS5zdGFydAk9IDIyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVszXSA9IHsKKwkJLyogQWxhcm0gSVJRICovCisJCS5zdGFydAk9IDIwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtcnRjIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHJ0Y19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKQEAgLTM5LDYgKzY5LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3NTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnJ0Y19kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKaW5kZXggMGM5ZWEzOC4uZDdmZmY3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYwpAQCAtMTExLDggKzExMSw5IEBACiAKIAl2bWEtPnBoeXNfYWRkciA9IG1hcC0+YWRkcjsKIAotCWlmIChyZW1hcF9hcmVhX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZtYS0+YWRkciwgdm1hLT5waHlzX2FkZHIsCi0JCQkgICAgIG1hcC0+c2l6ZSwgZmxhZ3MpKSB7CisJaWYgKGlvcmVtYXBfcGFnZV9yYW5nZSgodW5zaWduZWQgbG9uZyl2bWEtPmFkZHIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpdm1hLT5hZGRyICsgbWFwLT5zaXplLAorCQkJICAgICAgIHZtYS0+cGh5c19hZGRyLCBfX3BncHJvdChmbGFncykpKSB7CiAJCXZ1bm1hcCh2bWEtPmFkZHIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CkBAIC0xNzYsNyArMTc3LDcgQEAKIAogCW1hcC0+c3FfYWRkciA9IFA0U0VHX1NUT1JFX1FVRSArIChwYWdlIDw8IFBBR0VfU0hJRlQpOwogCi0JcmV0ID0gX19zcV9yZW1hcChtYXAsIGZsYWdzKTsKKwlyZXQgPSBfX3NxX3JlbWFwKG1hcCwgcGdwcm90X3ZhbChQQUdFX0tFUk5FTF9OT0NBQ0hFKSB8IGZsYWdzKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGY0OTNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKQEAgLTAsMCArMSwxOSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4L1N1cGVySCBTSC00IGJhY2tlbmRzLgorIworCisjIENQVSBzdWJ0eXBlIHNldHVwCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwKQkrPSBzZXR1cC1zaDc3NzAubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJKz0gc2V0dXAtc2g3NzgwLm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwKQkrPSBzZXR1cC1zaDczMTgwLm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpCSs9IHNldHVwLXNoNzM0My5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQkrPSBzZXR1cC1zaDc3MjIubworCisjIFByaW1hcnkgb24tY2hpcCBjbG9ja3MgKGNvbW1vbikKK2Nsb2NrLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODApCTo9IGNsb2NrLXNoNzMxODAubworY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwKQk6PSBjbG9jay1zaDc3NzAubworY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQk6PSBjbG9jay1zaDc3ODAubworY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQk6PSBjbG9jay1zaDczNDMubworY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBjbG9jay1zaDczNDMubworCitvYmoteQkrPSAkKGNsb2NrLXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNzMxODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzMxODAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDczMTgwLmMKcmVuYW1lIHRvIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzMxODAuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDczNDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzA3YTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g3MzQzLmMKKyAqCisgKiBTSDczNDMvU0g3NzIyIHN1cHBvcnQgZm9yIHRoZSBjbG9jayBmcmFtZXdvcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vZnJlcS5oPgorCisvKgorICogU0g3MzQzL1NINzcyMiB1c2VzIGEgY29tbW9uIHNldCBvZiBtdWx0aXBsaWVycyBhbmQgZGl2aXNvcnMsIHNvIHRoaXMKKyAqIGlzIHF1aXRlIHNpbXBsZS4uCisgKi8KK3N0YXRpYyBpbnQgbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgMSwgMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9Oworc3RhdGljIGludCBkaXZpc29yc1tdID0geyAxLCAzLCAyLCA1LCAzLCA0LCA1LCA2LCA4LCAxMCwgMTIsIDE2LCAyMCB9OworCisjZGVmaW5lIHBsbF9jYWxjKCkgKCgoY3RybF9pbmwoRlJRQ1IpID4+IDI0KSAmIDB4MWYpICsgMSkKKworc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnBhcmVudCA9IGNsa19nZXQoTlVMTCwgImNwdV9jbGsiKTsKK30KKworc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoRlJRQ1IpICYgMHgwMDBmKTsKKwljbGstPnJhdGUgKj0gY2xrLT5wYXJlbnQtPnJhdGUgKiBtdWx0aXBsaWVyc1tpZHhdIC8gZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzM0M19tYXN0ZXJfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSBtYXN0ZXJfY2xrX2luaXQsCisJLnJlY2FsYwkJPSBtYXN0ZXJfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIG1vZHVsZV9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xrLT5wYXJlbnQgPSBOVUxMOworCWNsay0+cmF0ZSA9IENPTkZJR19TSF9QQ0xLX0ZSRVE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDczNDNfbW9kdWxlX2Nsa19vcHMgPSB7CisJLmluaXQJCT0gbW9kdWxlX2Nsa19pbml0LAorfTsKKworc3RhdGljIHZvaWQgYnVzX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnBhcmVudCA9IGNsa19nZXQoTlVMTCwgImNwdV9jbGsiKTsKK30KKworc3RhdGljIHZvaWQgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoRlJRQ1IpID4+IDgpICYgMHgwMDBmOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlICogbXVsdGlwbGllcnNbaWR4XSAvIGRpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDczNDNfYnVzX2Nsa19vcHMgPSB7CisJLmluaXQJCT0gYnVzX2Nsa19pbml0LAorCS5yZWNhbGMJCT0gYnVzX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgdm9pZCBjcHVfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCWNsay0+cGFyZW50ID0gY2xrX2dldChOVUxMLCAibW9kdWxlX2NsayIpOworCWNsay0+ZmxhZ3MgfD0gQ0xLX1JBVEVfUFJPUEFHQVRFUzsKKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfZ2V0X3JhdGUoY2xrKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUUNSKSA+PiAyMCkgJiAweDAwMGY7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgKiBwbGxfY2FsYygpICoKKwkJbXVsdGlwbGllcnNbaWR4XSAvIGRpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDczNDNfY3B1X2Nsa19vcHMgPSB7CisJLmluaXQJCT0gY3B1X2Nsa19pbml0LAorCS5yZWNhbGMJCT0gY3B1X2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgKnNoNzM0M19jbGtfb3BzW10gPSB7CisJJnNoNzM0M19tYXN0ZXJfY2xrX29wcywKKwkmc2g3MzQzX21vZHVsZV9jbGtfb3BzLAorCSZzaDczNDNfYnVzX2Nsa19vcHMsCisJJnNoNzM0M19jcHVfY2xrX29wcywKK307CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqb3BzLCBpbnQgaWR4KQoreworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNzM0M19jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNzM0M19jbGtfb3BzW2lkeF07Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNzc3MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzcwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g3NzcwLmMKcmVuYW1lIHRvIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g3NzgwLmMKcmVuYW1lIHRvIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzMxODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzMxODAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDczMTgwLmMKcmVuYW1lIHRvIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzMxODAuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDczNDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzM0My5jCnJlbmFtZSB0byBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNDMuYwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTQzZmJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIFNINzcyMiBTZXR1cAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vc2NpLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA4MCwgODEsIDgzLCA4MiB9LAorCX0sIHsKKwkJLmZsYWdzID0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcyMl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzcyMl9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzcyMl9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHNoNzcyMl9kZXZpY2VzKSk7Cit9CitfX2luaXRjYWxsKHNoNzcyMl9kZXZpY2VzX3NldHVwKTsKKworc3RhdGljIHN0cnVjdCBpcHJfZGF0YSBzaDc3MjJfaXByX21hcFtdID0geworCS8qIElSUSwgSVBSLWlkeCwgc2hpZnQsIHByaW8gKi8KKwl7IDE2LCAwLCAxMiwgMiB9LCAvKiBUTVUwICovCisJeyAxNywgMCwgIDgsIDIgfSwgLyogVE1VMSAqLworCXsgODAsIDYsIDEyLCAzIH0sIC8qIFNDSUYgRVJJICovCisJeyA4MSwgNiwgMTIsIDMgfSwgLyogU0NJRiBSWEkgKi8KKwl7IDgyLCA2LCAxMiwgMyB9LCAvKiBTQ0lGIEJSSSAqLworCXsgODMsIDYsIDEyLCAzIH0sIC8qIFNDSUYgVFhJICovCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpcHJfb2Zmc2V0c1tdID0geworCTB4YTQwODAwMDAsIC8qICAwOiBJUFJBICovCisJMHhhNDA4MDAwNCwgLyogIDE6IElQUkIgKi8KKwkweGE0MDgwMDA4LCAvKiAgMjogSVBSQyAqLworCTB4YTQwODAwMGMsIC8qICAzOiBJUFJEICovCisJMHhhNDA4MDAxMCwgLyogIDQ6IElQUkUgKi8KKwkweGE0MDgwMDE0LCAvKiAgNTogSVBSRiAqLworCTB4YTQwODAwMTgsIC8qICA2OiBJUFJHICovCisJMHhhNDA4MDAxYywgLyogIDc6IElQUkggKi8KKwkweGE0MDgwMDIwLCAvKiAgODogSVBSSSAqLworCTB4YTQwODAwMjQsIC8qICA5OiBJUFJKICovCisJMHhhNDA4MDAyOCwgLyogMTA6IElQUksgKi8KKwkweGE0MDgwMDJjLCAvKiAxMTogSVBSTCAqLworfTsKKwordW5zaWduZWQgaW50IG1hcF9pcHJpZHhfdG9fYWRkcihpbnQgaWR4KQoreworCWlmICh1bmxpa2VseShpZHggPj0gQVJSQVlfU0laRShpcHJfb2Zmc2V0cykpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gaXByX29mZnNldHNbaWR4XTsKK30KKwordm9pZCBfX2luaXQgaW5pdF9JUlFfaXByKHZvaWQpCit7CisJbWFrZV9pcHJfaXJxKHNoNzcyMl9pcHJfbWFwLCBBUlJBWV9TSVpFKHNoNzcyMl9pcHJfbWFwKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc3MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzcwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzcwLmMKcmVuYW1lIHRvIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzgwLmMKcmVuYW1lIHRvIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gvc2gva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDYwMzQwODIuLjU2MGI5MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2Vhcmx5X3ByaW50ay5jCkBAIC0xNDQsMTYgKzE0NCwxNiBAQAogCTsKIAogc3RhdGljIGludCBfX2luaXRkYXRhIGtlZXBfZWFybHk7CitzdGF0aWMgaW50IGVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQ7CiAKLWludCBfX2luaXQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKm9wdCkKK2ludCBfX2luaXQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKmJ1ZikKIHsKLQljaGFyICpzcGFjZTsKLQljaGFyIGJ1ZlsyNTZdOworCWlmICghYnVmKQorCQlyZXR1cm4gMDsKIAotCXN0cmxjcHkoYnVmLCBvcHQsIHNpemVvZihidWYpKTsKLQlzcGFjZSA9IHN0cmNocihidWYsICcgJyk7Ci0JaWYgKHNwYWNlKQotCQkqc3BhY2UgPSAwOworCWlmIChlYXJseV9jb25zb2xlX2luaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKwllYXJseV9jb25zb2xlX2luaXRpYWxpemVkID0gMTsKIAogCWlmIChzdHJzdHIoYnVmLCAia2VlcCIpKQogCQlrZWVwX2Vhcmx5ID0gMTsKQEAgLTE3NSwxMiArMTc1LDE0IEBACiAJaWYgKGxpa2VseShlYXJseV9jb25zb2xlKSkKIAkJcmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsKIAotCXJldHVybiAxOworCXJldHVybiAwOwogfQotX19zZXR1cCgiZWFybHlwcmludGs9Iiwgc2V0dXBfZWFybHlfcHJpbnRrKTsKK2Vhcmx5X3BhcmFtKCJlYXJseXByaW50ayIsIHNldHVwX2Vhcmx5X3ByaW50ayk7CiAKIHZvaWQgX19pbml0IGRpc2FibGVfZWFybHlfcHJpbnRrKHZvaWQpCiB7CisJaWYgKCFlYXJseV9jb25zb2xlX2luaXRpYWxpemVkIHx8ICFlYXJseV9jb25zb2xlKQorCQlyZXR1cm47CiAJaWYgKCFrZWVwX2Vhcmx5KSB7CiAJCXByaW50aygiZGlzYWJsaW5nIGVhcmx5IGNvbnNvbGVcbiIpOwogCQl1bnJlZ2lzdGVyX2NvbnNvbGUoZWFybHlfY29uc29sZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IDI5MTM2YTMuLmZjMjc5YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC03OSwxOCArNzksMjkgQEAKIAkuYWxpZ24JMgogMzoJLmxvbmcJa2dkYl9oYW5kbGVfZXhjZXB0aW9uCiAjZW5kaWYgLyogQ09ORklHX1NIX0tHREIgKi8KLQorI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCisJYnJhCWRlYnVnX2tlcm5lbF9mdworCSBub3AKKyNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIHx8IENPTkZJR19TSF9LR0RCICovCiAKLQogCS5hbGlnbgkyCiBkZWJ1Z190cmFwOgkKICNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKSB8fCBkZWZpbmVkKENPTkZJR19TSF9LR0RCKQorCW1vdglyOCwgcjAKKwlzaGxyMglyMAorCWNtcC9lcQkjMHgzZiwgcjAJCSEgc2hfYmlvcygpIHRyYXAKKwliZgkxZgorI2lmZGVmIENPTkZJR19TSF9LR0RCCisJY21wL2VxCSMweGZmLCByMAkJISBYWFg6IEtHREIgdHJhcCwgZml4IGZvciBTSC0yLgorCWJmCTFmCisjZW5kaWYKIAltb3YJI09GRl9TUiwgcjAKIAltb3YubAlAKHIwLHIxNSksIHIwCQkhIGdldCBzdGF0dXMgcmVnaXN0ZXIKIAlzaGxsCXIwCiAJc2hsbAlyMAkJCSEga2VybmVsIHNwYWNlPwogCWJ0L3MJZGVidWdfa2VybmVsCisxOgogI2VuZGlmCiAJIG1vdi5sCUByMTUsIHIwCQkhIFJlc3RvcmUgUjAgdmFsdWUKIAltb3YubAkxZiwgcjgKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2hlYWQuUyBiL2FyY2gvc2gva2VybmVsL2hlYWQuUwppbmRleCA2YWNhNGJjLi43MWEzYWQ3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaGVhZC5TCkBAIC0zMyw3ICszMyw4IEBACiAJLmxvbmcJMHgwMDM2MDAwMAkvKiBJTklUUkRfU1RBUlQgKi8KIAkubG9uZwkweDAwMGEwMDAwCS8qIElOSVRSRF9TSVpFICovCiAJLmxvbmcJMAotCS5iYWxpZ24gUEFHRV9TSVpFLDAsUEFHRV9TSVpFCisxOgorCS5za2lwCVBBR0VfU0laRSAtIGVtcHR5X3plcm9fcGFnZSAtIDFiCiAKIAkudGV4dAkKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZjNlMjYzMS4uNDg2YzA2ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDcwLDkgKzQ3MCwxMCBAQAogCSAqLwogCXBjID0gdGhyZWFkX3NhdmVkX3BjKHApOwogCWlmIChpbl9zY2hlZF9mdW5jdGlvbnMocGMpKSB7Ci0JCXNjaGVkdWxlX2ZyYW1lID0gKCh1bnNpZ25lZCBsb25nICopKGxvbmcpcC0+dGhyZWFkLnNwKVsxXTsKLQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSgodW5zaWduZWQgbG9uZyAqKXNjaGVkdWxlX2ZyYW1lKVsxXTsKKwkJc2NoZWR1bGVfZnJhbWUgPSAodW5zaWduZWQgbG9uZylwLT50aHJlYWQuc3A7CisJCXJldHVybiAoKHVuc2lnbmVkIGxvbmcgKilzY2hlZHVsZV9mcmFtZSlbMjFdOwogCX0KKwogCXJldHVybiBwYzsKIH0KIApAQCAtNDk4LDYgKzQ5OSwxNiBAQAogewogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gUkVMT0NfSElERSgmX19yZWdzLCAwKTsKIAorCS8qIFJld2luZCAqLwogCXJlZ3MtPnBjIC09IDI7CisKKyNpZmRlZiBDT05GSUdfQlVHCisJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKSkgeworCQl1MTYgaW5zbiA9ICoodTE2ICopaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKKwkJaWYgKGluc24gPT0gVFJBUEFfQlVHX09QQ09ERSkKKwkJCWhhbmRsZV9CVUcocmVncyk7CisJfQorI2VuZGlmCisKIAlmb3JjZV9zaWcoU0lHVFJBUCwgY3VycmVudCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwppbmRleCBmOGRkNmI3Li4yMjVmOWVhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKQEAgLTg0LDggKzg0LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHBhcnNlX2NtZGxpbmUgKGNoYXIgKiogY21kbGluZV9wLCBjaGFyIG12X25hbWVbTVZfTkFNRV9TSVpFXSwKIAkJCQkgIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvcioqIG12cCwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgKm12X2lvX2Jhc2UsCi0JCQkJICBpbnQgKm12X21taW9fZW5hYmxlKQorCQkJCSAgdW5zaWduZWQgbG9uZyAqbXZfaW9fYmFzZSkKIHsKIAljaGFyIGMgPSAnICcsICp0byA9IGNvbW1hbmRfbGluZSwgKmZyb20gPSBDT01NQU5EX0xJTkU7CiAJaW50IGxlbiA9IDA7CkBAIC0xMTIsMjMgKzExMSw2IEBACiAJCQl9CiAJCX0KIAotI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKLQkJaWYgKGMgPT0gJyAnICYmICFtZW1jbXAoZnJvbSwgImVhcmx5cHJpbnRrPSIsIDEyKSkgewotCQkJY2hhciAqZXBfZW5kOwotCi0JCQlpZiAodG8gIT0gY29tbWFuZF9saW5lKQotCQkJCXRvLS07Ci0KLQkJCWZyb20gKz0gMTI7Ci0JCQllcF9lbmQgPSBzdHJjaHIoZnJvbSwgJyAnKTsKLQotCQkJc2V0dXBfZWFybHlfcHJpbnRrKGZyb20pOwotCQkJcHJpbnRrKCJlYXJseSBjb25zb2xlIGVuYWJsZWRcbiIpOwotCi0JCQlmcm9tID0gZXBfZW5kOwotCQl9Ci0jZW5kaWYKLQogCQlpZiAoYyA9PSAnICcgJiYgIW1lbWNtcChmcm9tLCAic2hfbXY9IiwgNikpIHsKIAkJCWNoYXIqIG12X2VuZDsKIAkJCWNoYXIqIG12X2NvbW1hOwpAQCAtMTQ1LDcgKzEyNyw2IEBACiAJCQkJaW50IGludHNbM107CiAJCQkJZ2V0X29wdGlvbnMobXZfY29tbWErMSwgQVJSQVlfU0laRShpbnRzKSwgaW50cyk7CiAJCQkJKm12X2lvX2Jhc2UgPSBpbnRzWzFdOwotCQkJCSptdl9tbWlvX2VuYWJsZSA9IGludHNbMl07CiAJCQkJbXZfbGVuID0gbXZfY29tbWEgLSBmcm9tOwogCQkJfSBlbHNlIHsKIAkJCQltdl9sZW4gPSBtdl9lbmQgLSBmcm9tOwpAQCAtMTU4LDYgKzEzOSw3IEBACiAKIAkJCSptdnAgPSBnZXRfbXZfYnluYW1lKG12X25hbWUpOwogCQl9CisKIAkJYyA9ICooZnJvbSsrKTsKIAkJaWYgKCFjKQogCQkJYnJlYWs7CkBAIC0xNzcsOSArMTU5LDggQEAKIAlzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgKm12ID0gTlVMTDsKIAljaGFyIG12X25hbWVbTVZfTkFNRV9TSVpFXSA9ICIiOwogCXVuc2lnbmVkIGxvbmcgbXZfaW9fYmFzZSA9IDA7Ci0JaW50IG12X21taW9fZW5hYmxlID0gMDsKIAotCXBhcnNlX2NtZGxpbmUoY21kbGluZV9wLCBtdl9uYW1lLCAmbXYsICZtdl9pb19iYXNlLCAmbXZfbW1pb19lbmFibGUpOworCXBhcnNlX2NtZGxpbmUoY21kbGluZV9wLCBtdl9uYW1lLCAmbXYsICZtdl9pb19iYXNlKTsKIAogI2lmZGVmIENPTkZJR19TSF9VTktOT1dOCiAJaWYgKG12ID09IE5VTEwpIHsKQEAgLTI1OCw2ICsyMzksNyBAQAogCiAJc2hfbXZfc2V0dXAoY21kbGluZV9wKTsKIAorCiAJLyoKIAkgKiBGaW5kIHRoZSBoaWdoZXN0IHBhZ2UgZnJhbWUgbnVtYmVyIHdlIGhhdmUgYXZhaWxhYmxlCiAJICovCkBAIC0zMDUsNiArMjg3LDcgQEAKIAkJCQkgIFBGTl9QSFlTKHBhZ2VzKSk7CiAJfQogCisKIAkvKgogCSAqIFJlc2VydmUgdGhlIGtlcm5lbCB0ZXh0IGFuZAogCSAqIFJlc2VydmUgdGhlIGJvb3RtZW0gYml0bWFwLiBXZSBkbyB0aGlzIGluIHR3byBzdGVwcyAoZmlyc3Qgc3RlcApAQCAtMzI1LDE0ICszMDgsMTggQEAKIAlST09UX0RFViA9IE1LREVWKFJBTURJU0tfTUFKT1IsIDApOwogCWlmICgmX19yZF9zdGFydCAhPSAmX19yZF9lbmQpIHsKIAkJTE9BREVSX1RZUEUgPSAxOwotCQlJTklUUkRfU1RBUlQgPSBQSFlTQUREUigodW5zaWduZWQgbG9uZykmX19yZF9zdGFydCkgLSBfX01FTU9SWV9TVEFSVDsKLQkJSU5JVFJEX1NJWkUgPSAodW5zaWduZWQgbG9uZykmX19yZF9lbmQgLSAodW5zaWduZWQgbG9uZykmX19yZF9zdGFydDsKKwkJSU5JVFJEX1NUQVJUID0gUEhZU0FERFIoKHVuc2lnbmVkIGxvbmcpJl9fcmRfc3RhcnQpIC0KKwkJCQkJX19NRU1PUllfU1RBUlQ7CisJCUlOSVRSRF9TSVpFID0gKHVuc2lnbmVkIGxvbmcpJl9fcmRfZW5kIC0KKwkJCSAgICAgICh1bnNpZ25lZCBsb25nKSZfX3JkX3N0YXJ0OwogCX0KIAogCWlmIChMT0FERVJfVFlQRSAmJiBJTklUUkRfU1RBUlQpIHsKIAkJaWYgKElOSVRSRF9TVEFSVCArIElOSVRSRF9TSVpFIDw9IChtYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKSkgewotCQkJcmVzZXJ2ZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBJTklUUkRfU1RBUlQrX19NRU1PUllfU1RBUlQsIElOSVRSRF9TSVpFKTsKLQkJCWluaXRyZF9zdGFydCA9IElOSVRSRF9TVEFSVCArIFBBR0VfT0ZGU0VUICsgX19NRU1PUllfU1RBUlQ7CisJCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIElOSVRSRF9TVEFSVCArCisJCQkJCQlfX01FTU9SWV9TVEFSVCwgSU5JVFJEX1NJWkUpOworCQkJaW5pdHJkX3N0YXJ0ID0gSU5JVFJEX1NUQVJUICsgUEFHRV9PRkZTRVQgKworCQkJCQlfX01FTU9SWV9TVEFSVDsKIAkJCWluaXRyZF9lbmQgPSBpbml0cmRfc3RhcnQgKyBJTklUUkRfU0laRTsKIAkJfSBlbHNlIHsKIAkJCXByaW50aygiaW5pdHJkIGV4dGVuZHMgYmV5b25kIGVuZCBvZiBtZW1vcnkgIgpAQCAtNDA0LDcgKzM5MSw3IEBACiAJW0NQVV9TSDRfMjAyXQk9ICJTSDQtMjAyIiwJW0NQVV9TSDRfNTAxXQk9ICJTSDQtNTAxIiwKIAlbQ1BVX1NINzc3MF0JPSAiU0g3NzcwIiwJW0NQVV9TSDc3ODBdCT0gIlNINzc4MCIsCiAJW0NQVV9TSDc3ODFdCT0gIlNINzc4MSIsCVtDUFVfU0g3MzQzXQk9ICJTSDczNDMiLAotCVtDUFVfU0g3Nzg1XQk9ICJTSDc3ODUiLAorCVtDUFVfU0g3Nzg1XQk9ICJTSDc3ODUiLAlbQ1BVX1NINzcyMl0JPSAiU0g3NzIyIiwKIAlbQ1BVX1NIX05PTkVdCT0gIlVua25vd24iCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYwppbmRleCBjZWVlNzkxLi5lNjEwNjIzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMKQEAgLTcwLDEzICs3MCwyNiBAQAogREVDTEFSRV9FWFBPUlQoX19hc2hyZGkzKTsKIERFQ0xBUkVfRVhQT1JUKF9fYXNobGRpMyk7CiBERUNMQVJFX0VYUE9SVChfX2xzaHJkaTMpOwotREVDTEFSRV9FWFBPUlQoX19tb3ZzdHIpOwogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJTSTE2KTsKKyNpZiBfX0dOVUNfXyA9PSA0CitERUNMQVJFX0VYUE9SVChfX21vdm1lbSk7CisjZWxzZQorREVDTEFSRV9FWFBPUlQoX19tb3ZzdHIpOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ1BVX1NINAorI2lmIF9fR05VQ19fID09IDQKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtX2k0X2V2ZW4pOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1faTRfb2RkKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kxMl9pNCk7CitERUNMQVJFX0VYUE9SVChfX3NkaXZzaTNfaTRpKTsKK0RFQ0xBUkVfRVhQT1JUKF9fdWRpdl9xcm5uZF8xNik7CitERUNMQVJFX0VYUE9SVChfX3VkaXZzaTNfaTRpKTsKKyNlbHNlIC8qIEdDQyAzLnggKi8KIERFQ0xBUkVfRVhQT1JUKF9fbW92c3RyX2k0X2V2ZW4pOwogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJfaTRfb2RkKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92c3RyU0kxMl9pNCk7CisjZW5kaWYgLyogX19HTlVDX18gPT0gNCAqLwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSB8fCBkZWZpbmVkKENPTkZJR19TSDc3MDVfQ0FDSEVfMzJLQikKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYmIxYzQ4MC4uMzc5Yzg4YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogICovCiAKICNkZWZpbmUgTU9WVyhuKQkgKDB4OTMwMHwoKG4pLTIpKQkvKiBNb3ZlIG1lbSB3b3JkIGF0IFBDK24gdG8gUjMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gyKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0gyQSkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gyKQogI2RlZmluZSBUUkFQX05PQVJHIDB4YzMyMAkJLyogU3lzY2FsbCB3L25vIGFyZ3MgKE5SIGluIFIzKSAqLwogI2Vsc2UKICNkZWZpbmUgVFJBUF9OT0FSRyAweGMzMTAJCS8qIFN5c2NhbGwgdy9ubyBhcmdzIChOUiBpbiBSMykgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c19zaC5jIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKaW5kZXggNTA4M2I2ZS4uZTE4ZjE4MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKQEAgLTMxNCw2ICszMTQsMTIgQEAKICNlbmRpZgogfQogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NIMkEpCisjZGVmaW5lIFNZU0NBTExfQVJHMwkidHJhcGEgIzB4MjMiCisjZWxzZQorI2RlZmluZSBTWVNDQUxMX0FSRzMJInRyYXBhICMweDEzIgorI2VuZGlmCisKIC8qCiAgKiBEbyBhIHN5c3RlbSBjYWxsIGZyb20ga2VybmVsIGluc3RlYWQgb2YgY2FsbGluZyBzeXNfZXhlY3ZlIHNvIHdlCiAgKiBlbmQgdXAgd2l0aCBwcm9wZXIgcHRfcmVncy4KQEAgLTMyNCw3ICszMzAsNyBAQAogCXJlZ2lzdGVyIGxvbmcgX19zYzQgX19hc21fXyAoInI0IikgPSAobG9uZykgZmlsZW5hbWU7CiAJcmVnaXN0ZXIgbG9uZyBfX3NjNSBfX2FzbV9fICgicjUiKSA9IChsb25nKSBhcmd2OwogCXJlZ2lzdGVyIGxvbmcgX19zYzYgX19hc21fXyAoInI2IikgPSAobG9uZykgZW52cDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXBhCSMweDEzIiA6ICI9eiIgKF9fc2MwKQorCV9fYXNtX18gX192b2xhdGlsZV9fIChTWVNDQUxMX0FSRzMgOiAiPXoiIChfX3NjMCkJCiAJCQk6ICIwIiAoX19zYzApLCAiciIgKF9fc2M0KSwgInIiIChfX3NjNSksICJyIiAoX19zYzYpCiAJCQk6ICJtZW1vcnkiKTsKIAlyZXR1cm4gX19zYzA7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYwppbmRleCAzNzYyZDlkLi5lYzExMDE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMTI5LDYgKzEzMCw0MCBAQAogCXJldHVybiAtRUZBVUxUOwogfQogCisjaWZkZWYgQ09ORklHX0JVRworI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fYnVnX3ZlcmJvc2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGJ1Z19mcmFtZSBmOworCWxvbmcgbGVuOworCisJaWYgKF9fY29weV9mcm9tX3VzZXIoJmYsIChjb25zdCB2b2lkIF9fdXNlciAqKXJlZ3MtPnBjLAorCQkJICAgICBzaXplb2Yoc3RydWN0IGJ1Z19mcmFtZSkpKQorCQlyZXR1cm47CisKKwlsZW4gPSBfX3N0cm5sZW5fdXNlcihmLmZpbGUsIFBBVEhfTUFYKSAtIDE7CisJaWYgKHVubGlrZWx5KGxlbiA8IDAgfHwgbGVuID49IFBBVEhfTUFYKSkKKwkJZi5maWxlID0gIjxiYWQgZmlsZW5hbWU+IjsKKwlsZW4gPSBfX3N0cm5sZW5fdXNlcihmLmZ1bmMsIFBBVEhfTUFYKSAtIDE7CisJaWYgKHVubGlrZWx5KGxlbiA8IDAgfHwgbGVuID49IFBBVEhfTUFYKSkKKwkJZi5mdW5jID0gIjxiYWQgZnVuY3Rpb24+IjsKKworCXByaW50ayhLRVJOX0FMRVJUICJrZXJuZWwgQlVHIGluICVzKCkgYXQgJXM6JWQhXG4iLAorCSAgICAgICBmLmZ1bmMsIGYuZmlsZSwgZi5saW5lKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fYnVnX3ZlcmJvc2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgKi8KKyNlbmRpZiAvKiBDT05GSUdfQlVHICovCisKK3ZvaWQgaGFuZGxlX0JVRyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlkb19idWdfdmVyYm9zZShyZWdzKTsKKwlkaWUoIktlcm5lbCBCVUciLCByZWdzLCBUUkFQQV9CVUdfT1BDT0RFICYgMHhmZik7Cit9CisKIC8qCiAgKiBoYW5kbGUgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBkb2VzIGFuIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGJ5IGVtdWxhdGluZyB0aGUKICAqIGRlc2lyZWQgYmVoYXZpb3VyCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA3N2I0MDI2Li5mMzRiZGNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTUxLDcgKzUxLDcgQEAKIAl9CiAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0gIC5kYXRhLnBhZ2VfYWxpZ25lZCA6IHsgKiguZGF0YS5pZHQpIH0KKyAgLmRhdGEucGFnZV9hbGlnbmVkIDogeyAqKC5kYXRhLnBhZ2VfYWxpZ25lZCkgfQogCiAgIC4gPSBBTElHTigzMik7CiAgIF9fcGVyX2NwdV9zdGFydCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL0tjb25maWcgYi9hcmNoL3NoL21tL0tjb25maWcKaW5kZXggNGUwMzYyZi4uMjlmNGVlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9LY29uZmlnCisrKyBiL2FyY2gvc2gvbW0vS2NvbmZpZwpAQCAtMzUsNiArMzUsOSBAQAogCXNlbGVjdCBDUFVfU0g0CiAJc2VsZWN0IENQVV9IQVNfSU5UQzJfSVJRCiAKK2NvbmZpZyBDUFVfU0hYMgorCWJvb2wKKwogIwogIyBQcm9jZXNzb3Igc3VidHlwZXMKICMKQEAgLTE4MCw2ICsxODMsNyBAQAogY29uZmlnIENQVV9TVUJUWVBFX1NINzc4NQogCWJvb2wgIlN1cHBvcnQgU0g3Nzg1IHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEEKKwlzZWxlY3QgQ1BVX1NIWDIKIAlzZWxlY3QgQ1BVX0hBU19JTlRDMl9JUlEKIAogY29tbWVudCAiU0g0QUwtRFNQIFByb2Nlc3NvciBTdXBwb3J0IgpAQCAtMTkyLDYgKzE5NiwxMiBAQAogCWJvb2wgIlN1cHBvcnQgU0g3MzQzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEFMX0RTUAogCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzIyCisJYm9vbCAiU3VwcG9ydCBTSDc3MjIgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0g0QUxfRFNQCisJc2VsZWN0IENQVV9TSFgyCisJc2VsZWN0IENQVV9IQVNfSVBSX0lSUQorCiBlbmRtZW51CiAKIG1lbnUgIk1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMiCkBAIC0yNTAsNyArMjYwLDcgQEAKIAogY29uZmlnIFgyVExCCiAJYm9vbCAiRW5hYmxlIGV4dGVuZGVkIFRMQiBtb2RlIgotCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3Nzg1ICYmIE1NVSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIENQVV9TSFgyICYmIE1NVSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gd2lsbCBlbmFibGUgdGhlIGV4dGVuZGVkIG1vZGUgb2YgdGhlIFNILVgyCiAJICBUTEIuIEZvciBsZWdhY3kgU0gtWCBiZWhhdmlvdXIgYW5kIGludGVyb3BlcmFiaWxpdHksIHNheSBOLiBGb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCmluZGV4IGFlNTMxYWYuLmM2OTU1MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIAllbWl0X2NhY2hlX3BhcmFtcygpOwogCi0JaWYgKHJlbWFwX2FyZWFfcGFnZXMoUDNTRUcsIDAsIFBBR0VfU0laRSAqIDQsIF9QQUdFX0NBQ0hBQkxFKSkKKwlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKFAzU0VHLCBQM1NFRyArIChQQUdFX1NJWkUgKiA0KSwgMCwgUEFHRV9LRVJORUwpKQogCQlwYW5pYygiJXMgZmFpbGVkLiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY3B1X2RhdGEtPmRjYWNoZS5uX2FsaWFzZXM7IGkrKykKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW5pdC5jIGIvYXJjaC9zaC9tbS9pbml0LmMKaW5kZXggNTlmNGNjMS4uMjliZDM3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pbml0LmMKKysrIGIvYXJjaC9zaC9tbS9pbml0LmMKQEAgLTc3LDYgKzc3LDcgQEAKIAlwcmludGsoIiVkIHBhZ2VzIHN3YXAgY2FjaGVkXG4iLGNhY2hlZCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTU1VCiBzdGF0aWMgdm9pZCBzZXRfcHRlX3BoeXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IHByb3QpCiB7CiAJcGdkX3QgKnBnZDsKQEAgLTEzOSw2ICsxNDAsNyBAQAogCiAJc2V0X3B0ZV9waHlzKGFkZHJlc3MsIHBoeXMsIHByb3QpOwogfQorI2VuZGlmCS8qIENPTkZJR19NTVUgKi8KIAogLyogUmVmZXJlbmNlcyB0byBzZWN0aW9uIGJvdW5kYXJpZXMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwLmMgYi9hcmNoL3NoL21tL2lvcmVtYXAuYwppbmRleCAxMWQ1NGMxLi45MGI0OTRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2lvcmVtYXAuYworKysgYi9hcmNoL3NoL21tL2lvcmVtYXAuYwpAQCAtMTYsOTcgKzE2LDEzIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAotc3RhdGljIGlubGluZSB2b2lkIHJlbWFwX2FyZWFfcHRlKHB0ZV90ICogcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQl1bnNpZ25lZCBsb25nIGVuZDsKLQl1bnNpZ25lZCBsb25nIHBmbjsKLQlwZ3Byb3RfdCBwZ3Byb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX05PQ0FDSEUpIHwgZmxhZ3MpOwotCi0JYWRkcmVzcyAmPSB+UE1EX01BU0s7Ci0JZW5kID0gYWRkcmVzcyArIHNpemU7Ci0JaWYgKGVuZCA+IFBNRF9TSVpFKQotCQllbmQgPSBQTURfU0laRTsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCXBmbiA9IHBoeXNfYWRkciA+PiBQQUdFX1NISUZUOwotCWRvIHsKLQkJaWYgKCFwdGVfbm9uZSgqcHRlKSkgewotCQkJcHJpbnRrKCJyZW1hcF9hcmVhX3B0ZTogcGFnZSBhbHJlYWR5IGV4aXN0c1xuIik7Ci0JCQlCVUcoKTsKLQkJfQotCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwZm4sIHBncHJvdCkpOwotCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKLQkJcGZuKys7Ci0JCXB0ZSsrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmVtYXBfYXJlYV9wbWQocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVuc2lnbmVkIGxvbmcgZW5kOwotCi0JYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUEdESVJfU0laRSkKLQkJZW5kID0gUEdESVJfU0laRTsKLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcHRlX3QgKiBwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcmVzcyk7Ci0JCWlmICghcHRlKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXJlbWFwX2FyZWFfcHRlKHB0ZSwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywgYWRkcmVzcyArIHBoeXNfYWRkciwgZmxhZ3MpOwotCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQTURfU0laRSkgJiBQTURfTUFTSzsKLQkJcG1kKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCXJldHVybiAwOwotfQotCi1pbnQgcmVtYXBfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlpbnQgZXJyb3I7Ci0JcGdkX3QgKiBkaXI7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQotCXBoeXNfYWRkciAtPSBhZGRyZXNzOwotCWRpciA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcHVkX3QgKnB1ZDsKLQkJcG1kX3QgKnBtZDsKLQotCQllcnJvciA9IC1FTk9NRU07Ci0KLQkJcHVkID0gcHVkX2FsbG9jKCZpbml0X21tLCBkaXIsIGFkZHJlc3MpOwotCQlpZiAoIXB1ZCkKLQkJCWJyZWFrOwotCQlwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIHB1ZCwgYWRkcmVzcyk7Ci0JCWlmICghcG1kKQotCQkJYnJlYWs7Ci0JCWlmIChyZW1hcF9hcmVhX3BtZChwbWQsIGFkZHJlc3MsIGVuZCAtIGFkZHJlc3MsCi0JCQkJCXBoeXNfYWRkciArIGFkZHJlc3MsIGZsYWdzKSkKLQkJCWJyZWFrOwotCQllcnJvciA9IDA7Ci0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBHRElSX1NJWkUpICYgUEdESVJfTUFTSzsKLQkJZGlyKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCWZsdXNoX3RsYl9hbGwoKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIC8qCiAgKiBSZW1hcCBhbiBhcmJpdHJhcnkgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBpbnRvIHRoZSBrZXJuZWwgdmlydHVhbAogICogYWRkcmVzcyBzcGFjZS4gTmVlZGVkIHdoZW4gdGhlIGtlcm5lbCB3YW50cyB0byBhY2Nlc3MgaGlnaCBhZGRyZXNzZXMKQEAgLTEyMSw2ICszNyw3IEBACiB7CiAJc3RydWN0IHZtX3N0cnVjdCAqIGFyZWE7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxhc3RfYWRkciwgYWRkciwgb3JpZ19hZGRyOworCXBncHJvdF90IHBncHJvdDsKIAogCS8qIERvbid0IGFsbG93IHdyYXBhcm91bmQgb3IgemVybyBzaXplICovCiAJbGFzdF9hZGRyID0gcGh5c19hZGRyICsgc2l6ZSAtIDE7CkBAIC0xOTAsOCArMTA3LDkgQEAKIAl9CiAjZW5kaWYKIAorCXBncHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwoUEFHRV9LRVJORUxfTk9DQUNIRSkgfCBmbGFncyk7CiAJaWYgKGxpa2VseShzaXplKSkKLQkJaWYgKHJlbWFwX2FyZWFfcGFnZXMoYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncykpIHsKKwkJaWYgKGlvcmVtYXBfcGFnZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwZ3Byb3QpKSB7CiAJCQl2dW5tYXAoKHZvaWQgKilvcmlnX2FkZHIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvb3Byb2ZpbGUvb3BfbW9kZWxfc2g3NzUwLmMgYi9hcmNoL3NoL29wcm9maWxlL29wX21vZGVsX3NoNzc1MC5jCmluZGV4IGMyNjUxODUuLjYwNDAyZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvb3Byb2ZpbGUvb3BfbW9kZWxfc2g3NzUwLmMKKysrIGIvYXJjaC9zaC9vcHJvZmlsZS9vcF9tb2RlbF9zaDc3NTAuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRvX2NvdW50ZXIoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZTsKIAogCXJldHVybiAoaW50KXNpbXBsZV9zdHJ0b2wobmFtZSwgTlVMTCwgMTApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L0tjb25maWcgYi9hcmNoL3NoNjQvS2NvbmZpZwppbmRleCA1OGM2NzhlLi43YmMwNzQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvS2NvbmZpZworKysgYi9hcmNoL3NoNjQvS2NvbmZpZwpAQCAtMzksNiArMzksMTQgQEAKIGNvbmZpZyBHRU5FUklDX0lTQV9ETUEKIAlib29sCiAKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKKwlib29sCisJZGVmYXVsdCBuCisKIHNvdXJjZSBpbml0L0tjb25maWcKIAogbWVudSAiU3lzdGVtIHR5cGUiCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvbW0vaW9yZW1hcC5jIGIvYXJjaC9zaDY0L21tL2lvcmVtYXAuYwppbmRleCA4MGM1Njc1Li5mZjI2YzAyIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvc2g2NC9tbS9pb3JlbWFwLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC0yOCw5NiArMjgsNiBAQAogc3RhdGljIHZvaWQgc2htZWRpYV9tYXBpb2FkZHIodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lZGlhX2lvcmVtYXAoc3RydWN0IHJlc291cmNlICosIHUzMiwgaW50KTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJlbWFwX2FyZWFfcHRlKHB0ZV90ICogcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQl1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQl1bnNpZ25lZCBsb25nIGVuZDsKLQl1bnNpZ25lZCBsb25nIHBmbjsKLQlwZ3Byb3RfdCBwZ3Byb3QgPSBfX3BncHJvdChfUEFHRV9QUkVTRU5UICB8IF9QQUdFX1JFQUQgICB8Ci0JCQkJICAgX1BBR0VfV1JJVEUgICAgfCBfUEFHRV9ESVJUWSAgfAotCQkJCSAgIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfU0hBUkVEIHwgZmxhZ3MpOwotCi0JYWRkcmVzcyAmPSB+UE1EX01BU0s7Ci0JZW5kID0gYWRkcmVzcyArIHNpemU7Ci0JaWYgKGVuZCA+IFBNRF9TSVpFKQotCQllbmQgPSBQTURfU0laRTsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCi0JcGZuID0gcGh5c19hZGRyID4+IFBBR0VfU0hJRlQ7Ci0KLQlwcl9kZWJ1ZygiICAgICVzOiBwdGUgJXAgYWRkcmVzcyAlbHggc2l6ZSAlbHggcGh5c19hZGRyICVseFxuIiwKLQkJIF9fRlVOQ1RJT05fXyxwdGUsYWRkcmVzcyxzaXplLHBoeXNfYWRkcik7Ci0KLQlkbyB7Ci0JCWlmICghcHRlX25vbmUoKnB0ZSkpIHsKLQkJCXByaW50aygicmVtYXBfYXJlYV9wdGU6IHBhZ2UgYWxyZWFkeSBleGlzdHNcbiIpOwotCQkJQlVHKCk7Ci0JCX0KLQotCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwZm4sIHBncHJvdCkpOwotCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKLQkJcGZuKys7Ci0JCXB0ZSsrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmVtYXBfYXJlYV9wbWQocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLAotCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVuc2lnbmVkIGxvbmcgZW5kOwotCi0JYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQotCWlmIChlbmQgPiBQR0RJUl9TSVpFKQotCQllbmQgPSBQR0RJUl9TSVpFOwotCi0JcGh5c19hZGRyIC09IGFkZHJlc3M7Ci0KLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCi0JZG8gewotCQlwdGVfdCAqIHB0ZSA9IHB0ZV9hbGxvY19rZXJuZWwocG1kLCBhZGRyZXNzKTsKLQkJaWYgKCFwdGUpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJcmVtYXBfYXJlYV9wdGUocHRlLCBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzLCBhZGRyZXNzICsgcGh5c19hZGRyLCBmbGFncyk7Ci0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOwotCQlwbWQrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmVtYXBfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAotCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JaW50IGVycm9yOwotCXBnZF90ICogZGlyOwotCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkcmVzcyArIHNpemU7Ci0KLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlkaXIgPSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcyk7Ci0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0JaWYgKGFkZHJlc3MgPj0gZW5kKQotCQlCVUcoKTsKLQlkbyB7Ci0JCXBtZF90ICpwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIGRpciwgYWRkcmVzcyk7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJaWYgKCFwbWQpCi0JCQlicmVhazsKLQkJaWYgKHJlbWFwX2FyZWFfcG1kKHBtZCwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywKLQkJCQkgICBwaHlzX2FkZHIgKyBhZGRyZXNzLCBmbGFncykpIHsKLQkJCSBicmVhazsKLQkJfQotCQllcnJvciA9IDA7Ci0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBHRElSX1NJWkUpICYgUEdESVJfTUFTSzsKLQkJZGlyKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCWZsdXNoX3RsYl9hbGwoKTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIEdlbmVyaWMgbWFwcGluZyBmdW5jdGlvbiAobm90IHZpc2libGUgb3V0c2lkZSk6CiAgKi8KQEAgLTEzNiwxMiArNDYsMTcgQEAKIAl2b2lkICogYWRkcjsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICogYXJlYTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGFzdF9hZGRyOworCXBncHJvdF90IHBncHJvdDsKIAogCS8qIERvbid0IGFsbG93IHdyYXBhcm91bmQgb3IgemVybyBzaXplICovCiAJbGFzdF9hZGRyID0gcGh5c19hZGRyICsgc2l6ZSAtIDE7CiAJaWYgKCFzaXplIHx8IGxhc3RfYWRkciA8IHBoeXNfYWRkcikKIAkJcmV0dXJuIE5VTEw7CiAKKwlwZ3Byb3QgPSBfX3BncHJvdChfUEFHRV9QUkVTRU5UICB8IF9QQUdFX1JFQUQgICB8CisJCQkgIF9QQUdFX1dSSVRFICAgIHwgX1BBR0VfRElSVFkgIHwKKwkJCSAgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9TSEFSRUQgfCBmbGFncyk7CisKIAkvKgogCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCiAJICovCkBAIC0xNTgsNyArNzMsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJYWRkciA9IGFyZWEtPmFkZHI7Ci0JaWYgKHJlbWFwX2FyZWFfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncykpIHsKKwlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsICh1bnNpZ25lZCBsb25nKWFkZHIgKyBzaXplLAorCQkJICAgICAgIHBoeXNfYWRkciwgcGdwcm90KSkgewogCQl2dW5tYXAoYWRkcik7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCA5MmE3YzhhLi5kMGRlYzFlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0xNjYsNiArMTY2LDE0IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0CisJYm9vbAorCWRlZmF1bHQgbgorCiBjb25maWcgU1VOX1BNCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9kZWZjb25maWcgYi9hcmNoL3NwYXJjL2RlZmNvbmZpZwppbmRleCBhNjk4NTYyLi43OWU1NDg5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2RlZmNvbmZpZworKysgYi9hcmNoL3NwYXJjL2RlZmNvbmZpZwpAQCAtMSw0MSArMSw1OSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwLXJjMQorIyBTdW4gRGVjIDE3IDE0OjIwOjQ3IDIwMDYKICMKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKIENPTkZJR19ISUdITUVNPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTQzLDE3ICs2MSwzNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQogCiAjCi0jIEdlbmVyYWwgc2V0dXAKKyMgQmxvY2sgbGF5ZXIKICMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisKKyMKKyMgR2VuZXJhbCBtYWNoaW5lIHNldHVwCisjCiAjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX1NQQVJDPXkKIENPTkZJR19TUEFSQzMyPXkKIENPTkZJR19TQlVTPXkKIENPTkZJR19TQlVTQ0hBUj15CkBAIC02MSwxOTUgKzk4LDUzIEBACiBDT05GSUdfU1VOX0FVWElPPXkKIENPTkZJR19TVU5fSU89eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfU1VOX1BNPXkKICMgQ09ORklHX1NVTjQgaXMgbm90IHNldAogQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTEVHQUNZX1BST0MgaXMgbm90IHNldAotIyBDT05GSUdfUENJX05BTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NVTl9PUEVOUFJPTUZTPW0KKyMgQ09ORklHX1NQQVJDX0xFRCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX0FPVVQ9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19TVU5PU19FTVVMPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST01fQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfU1VOQ09SRT15Ci1DT05GSUdfU0VSSUFMX1NVTlpJTE9HPXkKLUNPTkZJR19TRVJJQUxfU1VOWklMT0dfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX1NVTlNVPXkKLUNPTkZJR19TRVJJQUxfU1VOU1VfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfU1VOU0FCIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0KLSMKLSMgTWlzYyBMaW51eC9TUEFSQyBkcml2ZXJzCi0jCi1DT05GSUdfU1VOX09QRU5QUk9NSU89bQotQ09ORklHX1NVTl9NT1NURUtfUlRDPW0KLSMgQ09ORklHX1NVTl9CUFAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1ZJREVPUElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9BVVJPUkEgaXMgbm90IHNldAotIyBDT05GSUdfVEFEUE9MRV9UUzEwMl9VQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fSlNGTEFTSCBpcyBub3Qgc2V0Ci1DT05GSUdfQVBNX1JUQ19JU19HTVQ9eQotQ09ORklHX1JUQz1tCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ0FSTUVMIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TUj1tCi0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz1tCi0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKLSMKLUNPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCi0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NRUdBUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEFfUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfSVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxPR0lDUFRJPW0KLUNPTkZJR19TQ1NJX1FMQTJYWFg9eQotIyBDT05GSUdfU0NTSV9RTEEyMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBNjMxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTYzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NVTkVTUD15Ci0KLSMKLSMgRmlicmUgQ2hhbm5lbCBzdXBwb3J0Ci0jCi0jIENPTkZJR19GQzQgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmtpbmcKICMKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUTElOS19ERVY9eQogQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9bQogQ09ORklHX0lORVQ9eQogIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKQEAgLTI2MSwxNSArMTU2LDQwIEBACiBDT05GSUdfSU5FVF9BSD15CiBDT05GSUdfSU5FVF9FU1A9eQogQ09ORklHX0lORVRfSVBDT01QPXkKK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPXkKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj1tCiBDT05GSUdfSVBWNl9QUklWQUNZPXkKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKIAogIwogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKQEAgLTI4MCw2ICsyMDAsMTEgQEAKICMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI4OSwxMCArMjE0LDggQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0hXX0ZMT1dDT05UUk9MIGlzIG5vdCBzZXQKIAogIwogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKQEAgLTMwMywxNyArMjI2LDE4NSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKIENPTkZJR19ORVRfUEtUR0VOPW0KLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9bQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9RTE9HSUNQVEk9bQorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TVU5FU1A9eQorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPW0KLSMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKIAogIwogIyBBUkNuZXQgZGV2aWNlcwpAQCAtMzIxLDYgKzQxMiwxMSBAQAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTMzMCw2ICs0MjYsNyBAQAogQ09ORklHX1NVTkJNQUM9bQogQ09ORklHX1NVTlFFPW0KICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAKICMKQEAgLTM1MCwxNCArNDQ3LDIyIEBACiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTM4MCwxNyArNDg1LDI0IEBACiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKIAogIwotIyBVbml4OTggUFRZIHN1cHBvcnQKKyMgSVNETiBzdWJzeXN0ZW0KICMKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfVU5JWDk4X1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKICMKIENPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC00MDUsMTcgKzUxNyw2IEBACiBDT05GSUdfSU5QVVRfRVZCVUc9bQogCiAjCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotQ09ORklHX1NFUklPPW0KLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPW0KLSMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0KLSMKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CkBAIC00MjQsNiArNTI1LDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj1tCiBDT05GSUdfTU9VU0VfU0VSSUFMPW0KQEAgLTQzMywyOSArNTM1LDIzOSBAQAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89bQorIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9bQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TVU5DT1JFPXkKK0NPTkZJR19TRVJJQUxfU1VOWklMT0c9eQorQ09ORklHX1NFUklBTF9TVU5aSUxPR19DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfU1VOU1U9eQorQ09ORklHX1NFUklBTF9TVU5TVV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9TVU5TQUIgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPW0KK0NPTkZJR19SVEM9bQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST01fQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgSElEIERldmljZXMKKyMKK0NPTkZJR19ISUQ9eQorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKworIworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIEVuZ2luZSBzdXBwb3J0CisjCisjIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKKworIworIyBETUEgQ2xpZW50cworIworCisjCisjIERNQSBEZXZpY2VzCisjCisKKyMKKyMgVmlydHVhbGl6YXRpb24KKyMKKworIworIyBNaXNjIExpbnV4L1NQQVJDIGRyaXZlcnMKKyMKK0NPTkZJR19TVU5fT1BFTlBST01JTz1tCitDT05GSUdfU1VOX01PU1RFS19SVEM9bQorIyBDT05GSUdfU1VOX0JQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fVklERU9QSVggaXMgbm90IHNldAorIyBDT05GSUdfVEFEUE9MRV9UUzEwMl9VQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fSlNGTEFTSCBpcyBub3Qgc2V0CisKKyMKKyMgVW5peDk4IFBUWSBzdXBwb3J0CisjCitDT05GSUdfVU5JWDk4X1BUWV9DT1VOVD0yNTYKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19YRlNfRlM9bQotQ09ORklHX1hGU19SVD15CiBDT05GSUdfWEZTX1FVT1RBPXkKIENPTkZJR19YRlNfU0VDVVJJVFk9eQogQ09ORklHX1hGU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19SVD15CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz1tCitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTQ2OCw3ICs3ODAsOCBAQAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCi0jIENPTkZJR19GQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNDc2LDEzICs3ODksMTIgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0RFVlBUU19GU19YQVRUUj15Ci0jIENPTkZJR19ERVZQVFNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNTEyLDE3ICs4MjQsMjMgQEAKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15Ci0jIENPTkZJR19FWFBPUlRGUyBpcyBub3Qgc2V0CitDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPW0KIENPTkZJR19SUENTRUNfR1NTX0tSQjU9bQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQogIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BRlNfRlM9bQogQ09ORklHX1JYUlBDPW0KKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTU1OSw2ICs4NzcsNyBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldApAQCAtNTc1LDcwICs4OTQsMTA0IEBACiAjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAKICMKLSMgU291bmQKKyMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCiAjCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCi0jIFVTQiBzdXBwb3J0CisjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CiAjCi0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKICMKIENPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PXkKIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fU0hBMT15CiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15CiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KIENPTkZJR19DUllQVE9fQ0FTVDY9bQorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVGTEFURT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKIAogIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19JT01BUF9DT1BZPXkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKaW5kZXggNTRkNTFiNC4uOTg3ZWM2NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTChvZl9pb3JlbWFwKTsKIAotdm9pZCBvZl9pb3VubWFwKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQordm9pZCBvZl9pb3VubWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpb3VubWFwKGJhc2UpOwogfQpAQCAtMzE3LDkgKzMxNyw4IEBACiAJaWYgKCh2YSA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9DT01QLCBvcmRlcikpID09IDApCiAJCWdvdG8gZXJyX25vcGFnZXM7CiAKLQlpZiAoKHJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICgocmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCWdvdG8gZXJyX25vbWVtOwotCW1lbXNldCgoY2hhciopcmVzLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CiAKIAlpZiAoYWxsb2NhdGVfcmVzb3VyY2UoJl9zcGFyY19kdm1hLCByZXMsIGxlbl90b3RhbCwKIAkgICAgX3NwYXJjX2R2bWEuc3RhcnQsIF9zcGFyY19kdm1hLmVuZCwgUEFHRV9TSVpFLCBOVUxMLCBOVUxMKSAhPSAwKSB7CkBAIC01ODksMTIgKzU4OCwxMSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoKHJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJaWYgKChyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQlmcmVlX3BhZ2VzKHZhLCBvcmRlcik7CiAJCXByaW50aygicGNpX2FsbG9jX2NvbnNpc3RlbnQ6IG5vIGNvcmVcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KChjaGFyKilyZXMsIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKIAogCWlmIChhbGxvY2F0ZV9yZXNvdXJjZSgmX3NwYXJjX2R2bWEsIHJlcywgbGVuX3RvdGFsLAogCSAgICBfc3BhcmNfZHZtYS5zdGFydCwgX3NwYXJjX2R2bWEuZW5kLCBQQUdFX1NJWkUsIE5VTEwsIE5VTEwpICE9IDApIHsKQEAgLTcyOCw3ICs3MjYsOCBAQAogCS8qIElJZXAgaXMgd3JpdGUtdGhyb3VnaCwgbm90IGZsdXNoaW5nLiAqLwogCWZvciAobiA9IDA7IG4gPCBuZW50czsgbisrKSB7CiAJCUJVR19PTihwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpID09IE5VTEwpOwotCQlzZy0+ZHZtYV9hZGRyZXNzID0gdmlydF90b19waHlzKHBhZ2VfYWRkcmVzcyhzZy0+cGFnZSkpOworCQlzZy0+ZHZtYV9hZGRyZXNzID0KKwkJCXZpcnRfdG9fcGh5cyhwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpKSArIHNnLT5vZmZzZXQ7CiAJCXNnLT5kdm1hX2xlbmd0aCA9IHNnLT5sZW5ndGg7CiAJCXNnKys7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnEuYwppbmRleCBjOGNiMjExLi41YjQ4NDFkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnEuYwpAQCAtNDI1LDcgKzQyNSw3IEBACiAJfQogCQogCWlmIChhY3Rpb24gPT0gTlVMTCkKLQkgICAgYWN0aW9uID0gKHN0cnVjdCBpcnFhY3Rpb24gKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxYWN0aW9uKSwKKwkgICAgYWN0aW9uID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlycWFjdGlvbiksCiAJCQkJCQkgR0ZQX0FUT01JQyk7CiAJCiAJaWYgKCFhY3Rpb24pIHsgCkBAIC01MjgsNyArNTI4LDcgQEAKIAl9CiAJCiAJaWYgKGFjdGlvbiA9PSBOVUxMKQotCQlhY3Rpb24gPSAoc3RydWN0IGlycWFjdGlvbiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcnFhY3Rpb24pLAorCQlhY3Rpb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxYWN0aW9uKSwKIAkJCQkJCSAgICAgR0ZQX0FUT01JQyk7CiAJCiAJaWYgKCFhY3Rpb24pIHsgCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2UuYyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZS5jCmluZGV4IDQ2MjAwYzQuLmRhYjYxNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZS5jCkBAIC03OTMsMTAgKzc5Myw5IEBACiB7CiAJc3RydWN0IG9mX2RldmljZSAqZGV2OwogCi0JZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KGRldiwgMCwgc2l6ZW9mKCpkZXYpKTsKIAogCWRldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAlkZXYtPmRldi5idXMgPSBidXM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggODlhMjhjYy4uMTEzYmQ0OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3MuYwpAQCAtNTQsNiArNTQsNyBAQAogICogaGFuZGxlciB3aGVuIGF1eGlvIGlzIG5vdCBwcmVzZW50LS0gdW51c2VkIGZvciBub3cuLi4KICAqLwogdm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBtYWNoaW5lX3Bvd2VyX29mZjsKK0VYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKIAogLyoKICAqIHN5c2N0bCAtIHRvZ2dsZSBwb3dlci1vZmYgcmVzdHJpY3Rpb24gZm9yIHNlcmlhbCBjb25zb2xlIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2UuYwppbmRleCAxYmFmMTNlLi4wMDNmOGVlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjg5LDcgKzI4OSwxMCBAQAogCiAJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1RSQUNFTUUpIHsKIAkJcmV0ID0gcHRyYWNlX3RyYWNlbWUoKTsKLQkJcHRfc3VjY19yZXR1cm4ocmVncywgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJcHRfZXJyb3JfcmV0dXJuKHJlZ3MsIC1yZXQpOworCQllbHNlCisJCQlwdF9zdWNjX3JldHVybihyZWdzLCAwKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCmluZGV4IDI3NmYyMjguLjZiNWYyNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jCkBAIC0yOTIsOCArMjkyLDggQEAKIAogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7Ci0JZXh0ZXJuIHZvaWQgc21wNG1fYm9vdF9jcHVzKHZvaWQpOwotCWV4dGVybiB2b2lkIHNtcDRkX2Jvb3RfY3B1cyh2b2lkKTsKKwlleHRlcm4gdm9pZCBfX2luaXQgc21wNG1fYm9vdF9jcHVzKHZvaWQpOworCWV4dGVybiB2b2lkIF9faW5pdCBzbXA0ZF9ib290X2NwdXModm9pZCk7CiAJaW50IGksIGNwdWlkLCBleHRyYTsKIAogCXByaW50aygiRW50ZXJpbmcgU01QIE1vZGUuLi5cbiIpOwpAQCAtMzc1LDggKzM3NSw4IEBACiAKIGludCBfX2NwdWluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKIHsKLQlleHRlcm4gaW50IHNtcDRtX2Jvb3Rfb25lX2NwdShpbnQpOwotCWV4dGVybiBpbnQgc21wNGRfYm9vdF9vbmVfY3B1KGludCk7CisJZXh0ZXJuIGludCBfX2NwdWluaXQgc21wNG1fYm9vdF9vbmVfY3B1KGludCk7CisJZXh0ZXJuIGludCBfX2NwdWluaXQgc21wNGRfYm9vdF9vbmVfY3B1KGludCk7CiAJaW50IHJldD0wOwogCiAJc3dpdGNoKHNwYXJjX2NwdV9tb2RlbCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMKaW5kZXggMzNkYWRkOS4uZDhlMDA4YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jCkBAIC04Myw5ICs4Myw2IEBACiAvKiBQcml2YXRlIGZ1bmN0aW9ucyB3aXRoIG9kZCBjYWxsaW5nIGNvbnZlbnRpb25zLiAqLwogZXh0ZXJuIHZvaWQgX19fYXRvbWljMjRfYWRkKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19fYXRvbWljMjRfc3ViKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19fc2V0X2JpdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9fX2NsZWFyX2JpdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9fX2NoYW5nZV9iaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX19yd19yZWFkX2VudGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19fcndfcmVhZF90cnkodm9pZCk7CiBleHRlcm4gdm9pZCBfX19yd19yZWFkX2V4aXQodm9pZCk7CkBAIC0xMjUsMTEgKzEyMiw2IEBACiBFWFBPUlRfU1lNQk9MKF9fX2F0b21pYzI0X2FkZCk7CiBFWFBPUlRfU1lNQk9MKF9fX2F0b21pYzI0X3N1Yik7CiAKLS8qIEJpdCBvcGVyYXRpb25zLiAqLwotRVhQT1JUX1NZTUJPTChfX19zZXRfYml0KTsKLUVYUE9SVF9TWU1CT0woX19fY2xlYXJfYml0KTsKLUVYUE9SVF9TWU1CT0woX19fY2hhbmdlX2JpdCk7Ci0KIC8qIFBlci1DUFUgaW5mb3JtYXRpb24gdGFibGUgKi8KIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChfX2NwdV9kYXRhKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwppbmRleCBkNGY5ZGE4Li4wZTI3ZTIyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJfQogCQogCWlmIChhY3Rpb24gPT0gTlVMTCkKLQkJYWN0aW9uID0gKHN0cnVjdCBpcnFhY3Rpb24gKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxYWN0aW9uKSwKKwkJYWN0aW9uID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlycWFjdGlvbiksCiAJCQkJCQkgICAgIEdGUF9BVE9NSUMpOwogCQogCWlmICghYWN0aW9uKSB7IApAQCAtNTQ1LDggKzU0NSwxMSBAQAogCW5zYmkgPSAwOwogCWZvcl9lYWNoX3NidXMoc2J1cykKIAkJbnNiaSsrOwotCXNidXNfYWN0aW9ucyA9IChzdHJ1Y3Qgc2J1c19hY3Rpb24gKilrbWFsbG9jIChuc2JpICogOCAqIDQgKiBzaXplb2Yoc3RydWN0IHNidXNfYWN0aW9uKSwgR0ZQX0FUT01JQyk7Ci0JbWVtc2V0IChzYnVzX2FjdGlvbnMsIDAsIChuc2JpICogOCAqIDQgKiBzaXplb2Yoc3RydWN0IHNidXNfYWN0aW9uKSkpOworCXNidXNfYWN0aW9ucyA9IGt6YWxsb2MgKG5zYmkgKiA4ICogNCAqIHNpemVvZihzdHJ1Y3Qgc2J1c19hY3Rpb24pLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNidXNfYWN0aW9ucykgeworCQlwcm9tX3ByaW50ZigiU1VONEQ6IENhbm5vdCBhbGxvY2F0ZSBzYnVzX2FjdGlvbnMsIGhhbHRpbmcuXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQogCWZvcl9lYWNoX3NidXMoc2J1cykgewogI2lmZGVmIENPTkZJR19TTVAJCiAJCWV4dGVybiB1bnNpZ25lZCBjaGFyIGJvb3RfY3B1X2lkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYwppbmRleCBjODBlYTYxLi5jNjlkZTVkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKCk7CiB9CiAKLWludCBzbXA0ZF9ib290X29uZV9jcHUoaW50IGkpCitpbnQgX19jcHVpbml0IHNtcDRkX2Jvb3Rfb25lX2NwdShpbnQgaSkKIHsKIAkJCWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjRkX2NwdV9zdGFydHVwOwogCQkJdW5zaWduZWQgbG9uZyAqZW50cnkgPSAmc3VuNGRfY3B1X3N0YXJ0dXA7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3Vub3MuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zdW5vcy5jCmluZGV4IDZmM2FjNTQuLjBiZjhjMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zdW5vcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zdW5vcy5jCkBAIC05NCw4ICs5NCw4IEBACiAJICogU3VuT1MgaXMgc28gc3R1cGlkIHNvbWUgdGltZXMuLi4gaG1waCEKIAkgKi8KIAlpZiAoZmlsZSkgewotCQlpZiAoaW1ham9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSA9PSBNRU1fTUFKT1IgJiYKLQkJICAgIGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkgPT0gNSkgeworCQlpZiAoaW1ham9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpID09IE1FTV9NQUpPUiAmJgorCQkgICAgaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpID09IDUpIHsKIAkJCWZsYWdzIHw9IE1BUF9BTk9OWU1PVVM7CiAJCQlmcHV0KGZpbGUpOwogCQkJZmlsZSA9IE5VTEw7CkBAIC02NTUsNyArNjU1LDcgQEAKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0OwogCi0JaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAlzb2NrZXQgPSBTT0NLRVRfSShpbm9kZSk7CiAJbG9jYWwuc2luX2ZhbWlseSA9IEFGX0lORVQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMKaW5kZXggNmM3YWE1MS4uMmZjY2UwMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWUuYwpAQCAtNzgsNyArNzgsNiBAQAogCWV4dGVybiBjaGFyIF9fY29weV91c2VyX2JlZ2luW10sIF9fY29weV91c2VyX2VuZFtdOwogCWV4dGVybiBjaGFyIF9fYXRvbWljX2JlZ2luW10sIF9fYXRvbWljX2VuZFtdOwogCWV4dGVybiBjaGFyIF9fYnplcm9fYmVnaW5bXSwgX19iemVyb19lbmRbXTsKLQlleHRlcm4gY2hhciBfX2JpdG9wc19iZWdpbltdLCBfX2JpdG9wc19lbmRbXTsKIAogCXVuc2lnbmVkIGxvbmcgcGMgPSByZWdzLT5wYzsKIApAQCAtODgsOSArODcsNyBAQAogCSAgICAocGMgPj0gKHVuc2lnbmVkIGxvbmcpIF9fYXRvbWljX2JlZ2luICYmCiAJICAgICBwYyA8ICh1bnNpZ25lZCBsb25nKSBfX2F0b21pY19lbmQpIHx8CiAJICAgIChwYyA+PSAodW5zaWduZWQgbG9uZykgX19iemVyb19iZWdpbiAmJgotCSAgICAgcGMgPCAodW5zaWduZWQgbG9uZykgX19iemVyb19lbmQpIHx8Ci0JICAgIChwYyA+PSAodW5zaWduZWQgbG9uZykgX19iaXRvcHNfYmVnaW4gJiYKLQkgICAgIHBjIDwgKHVuc2lnbmVkIGxvbmcpIF9fYml0b3BzX2VuZCkpCisJICAgICBwYyA8ICh1bnNpZ25lZCBsb25nKSBfX2J6ZXJvX2VuZCkpCiAJCXBjID0gcmVncy0+dV9yZWdzW1VSRUdfUkVUUENdOwogCXJldHVybiBwYzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL01ha2VmaWxlIGIvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUKaW5kZXggNWRiN2UxZC4uOWRkYzViOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiBsaWIteSA6PSBtdWwubyByZW0ubyBzZGl2Lm8gdWRpdi5vIHVtdWwubyB1cmVtLm8gYXNocmRpMy5vIG1lbWNweS5vIG1lbXNldC5vIFwKICAgICAgICAgIHN0cmxlbi5vIGNoZWNrc3VtLm8gYmxvY2tvcHMubyBtZW1zY2FuLm8gbWVtY21wLm8gc3RybmNtcC5vIFwKIAkgc3RybmNweV9mcm9tX3VzZXIubyBkaXZkaTMubyB1ZGl2ZGkzLm8gc3RybGVuX3VzZXIubyBcCi0JIGNvcHlfdXNlci5vIGxvY2tzLm8gYXRvbWljLm8gYXRvbWljMzIubyBiaXRvcHMubyBcCisJIGNvcHlfdXNlci5vIGxvY2tzLm8gYXRvbWljLm8gXAogCSBsc2hyZGkzLm8gYXNobGRpMy5vIHJ3c2VtLm8gbXVsZGkzLm8gYml0ZXh0Lm8KIAotb2JqLXkgKz0gaW9tYXAubworb2JqLXkgKz0gaW9tYXAubyBhdG9taWMzMi5vCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9hdG9taWMzMi5jIGIvYXJjaC9zcGFyYy9saWIvYXRvbWljMzIuYwppbmRleCBkZTg0Zjg1Li41M2RkY2Q5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9hdG9taWMzMi5jCisrKyBiL2FyY2gvc3BhcmMvbGliL2F0b21pYzMyLmMKQEAgLTc2LDMgKzc2LDQyIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShBVE9NSUNfSEFTSCh2KSwgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChhdG9taWNfc2V0KTsKKwordW5zaWduZWQgbG9uZyBfX19zZXRfYml0KHVuc2lnbmVkIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIG9sZCwgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShBVE9NSUNfSEFTSChhZGRyKSwgZmxhZ3MpOworCW9sZCA9ICphZGRyOworCSphZGRyID0gb2xkIHwgbWFzazsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKEFUT01JQ19IQVNIKGFkZHIpLCBmbGFncyk7CisKKwlyZXR1cm4gb2xkICYgbWFzazsKK30KK0VYUE9SVF9TWU1CT0woX19fc2V0X2JpdCk7CisKK3Vuc2lnbmVkIGxvbmcgX19fY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIG9sZCwgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShBVE9NSUNfSEFTSChhZGRyKSwgZmxhZ3MpOworCW9sZCA9ICphZGRyOworCSphZGRyID0gb2xkICYgfm1hc2s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShBVE9NSUNfSEFTSChhZGRyKSwgZmxhZ3MpOworCisJcmV0dXJuIG9sZCAmIG1hc2s7Cit9CitFWFBPUlRfU1lNQk9MKF9fX2NsZWFyX2JpdCk7CisKK3Vuc2lnbmVkIGxvbmcgX19fY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBvbGQsIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoQVRPTUlDX0hBU0goYWRkciksIGZsYWdzKTsKKwlvbGQgPSAqYWRkcjsKKwkqYWRkciA9IG9sZCBeIG1hc2s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShBVE9NSUNfSEFTSChhZGRyKSwgZmxhZ3MpOworCisJcmV0dXJuIG9sZCAmIG1hc2s7Cit9CitFWFBPUlRfU1lNQk9MKF9fX2NoYW5nZV9iaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvYml0b3BzLlMgYi9hcmNoL3NwYXJjL2xpYi9iaXRvcHMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I3ZmI2Ni4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2xpYi9iaXRvcHMuUworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKiBiaXRvcHMuUzogTG93IGxldmVsIGFzc2VtYmxlciBiaXQgb3BlcmF0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICovCi0KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3Bzci5oPgotCi0JLnRleHQKLQkuYWxpZ24JNAotCi0JLmdsb2JsICBfX2JpdG9wc19iZWdpbgotX19iaXRvcHNfYmVnaW46Ci0KLQkvKiBUYWtlIGJpdHMgaW4gJWcyIGFuZCBzZXQgdGhlbSBpbiB3b3JkIGF0ICVnMSwKLQkgKiByZXR1cm4gd2hldGhlciBiaXRzIHdlcmUgc2V0IGluIG9yaWdpbmFsIHZhbHVlCi0JICogaW4gJWcyLiAgJWc0IGhvbGRzIHZhbHVlIHRvIHJlc3RvcmUgaW50byAlbzcKLQkgKiBpbiBkZWxheSBzbG90IG9mIGptcGwgcmV0dXJuLCAlZzMgKyAlZzUgKyAlZzcgY2FuIGJlCi0JICogdXNlZCBhcyB0ZW1wb3JhcmllcyBhbmQgdGh1cyBpcyBjb25zaWRlcmVkIGNsb2JiZXJlZAotCSAqIGJ5IGFsbCBjYWxsZXJzLgotCSAqLwotCS5nbG9ibAlfX19zZXRfYml0Ci1fX19zZXRfYml0OgotCXJkCSVwc3IsICVnMwotCW5vcDsgbm9wOyBub3A7Ci0Jb3IJJWczLCBQU1JfUElMLCAlZzUKLQl3cgklZzUsIDB4MCwgJXBzcgotCW5vcDsgbm9wOyBub3AKLSNpZmRlZiBDT05GSUdfU01QCi0Jc2V0CWJpdG9wc19zcGlubG9jaywgJWc1Ci0yOglsZHN0dWIJWyVnNV0sICVnNwkJISBTcGluIG9uIHRoZSBieXRlIGxvY2sgZm9yIFNNUC4KLQlvcmNjCSVnNywgMHgwLCAlZzAJCSEgRGlkIHdlIGdldCBpdD8KLQlibmUJMmIJCQkhIE5vcGUuLi4KLSNlbmRpZgotCSBsZAlbJWcxXSwgJWc3Ci0Jb3IJJWc3LCAlZzIsICVnNQotCWFuZAklZzcsICVnMiwgJWcyCi0jaWZkZWYgQ09ORklHX1NNUAotCXN0CSVnNSwgWyVnMV0KLQlzZXQJYml0b3BzX3NwaW5sb2NrLCAlZzUKLQlzdGIJJWcwLCBbJWc1XQotI2Vsc2UKLQlzdAklZzUsIFslZzFdCi0jZW5kaWYKLQl3cgklZzMsIDB4MCwgJXBzcgotCW5vcDsgbm9wOyBub3AKLQlqbXBsCSVvNywgJWcwCi0JIG1vdgklZzQsICVvNwotCi0JLyogU2FtZSBhcyBhYm92ZSwgYnV0IGNsZWFycyB0aGUgYml0cyBmcm9tICVnMiBpbnN0ZWFkLiAqLwotCS5nbG9ibAlfX19jbGVhcl9iaXQKLV9fX2NsZWFyX2JpdDoKLQlyZAklcHNyLCAlZzMKLQlub3A7IG5vcDsgbm9wCi0Jb3IJJWczLCBQU1JfUElMLCAlZzUKLQl3cgklZzUsIDB4MCwgJXBzcgotCW5vcDsgbm9wOyBub3AKLSNpZmRlZiBDT05GSUdfU01QCi0Jc2V0CWJpdG9wc19zcGlubG9jaywgJWc1Ci0yOglsZHN0dWIJWyVnNV0sICVnNwkJISBTcGluIG9uIHRoZSBieXRlIGxvY2sgZm9yIFNNUC4KLQlvcmNjCSVnNywgMHgwLCAlZzAJCSEgRGlkIHdlIGdldCBpdD8KLQlibmUJMmIJCQkhIE5vcGUuLi4KLSNlbmRpZgotCSBsZAlbJWcxXSwgJWc3Ci0JYW5kbgklZzcsICVnMiwgJWc1Ci0JYW5kCSVnNywgJWcyLCAlZzIKLSNpZmRlZiBDT05GSUdfU01QCi0Jc3QJJWc1LCBbJWcxXQotCXNldAliaXRvcHNfc3BpbmxvY2ssICVnNQotCXN0YgklZzAsIFslZzVdCi0jZWxzZQotCXN0CSVnNSwgWyVnMV0KLSNlbmRpZgotCXdyCSVnMywgMHgwLCAlcHNyCi0Jbm9wOyBub3A7IG5vcAotCWptcGwJJW83LCAlZzAKLQkgbW92CSVnNCwgJW83Ci0KLQkvKiBTYW1lIHRoaW5nIGFnYWluLCBidXQgdGhpcyB0aW1lIHRvZ2dsZXMgdGhlIGJpdHMgZnJvbSAlZzIuICovCi0JLmdsb2JsCV9fX2NoYW5nZV9iaXQKLV9fX2NoYW5nZV9iaXQ6Ci0JcmQJJXBzciwgJWczCi0Jbm9wOyBub3A7IG5vcAotCW9yCSVnMywgUFNSX1BJTCwgJWc1Ci0Jd3IJJWc1LCAweDAsICVwc3IKLQlub3A7IG5vcDsgbm9wCi0jaWZkZWYgQ09ORklHX1NNUAotCXNldAliaXRvcHNfc3BpbmxvY2ssICVnNQotMjoJbGRzdHViCVslZzVdLCAlZzcJCSEgU3BpbiBvbiB0aGUgYnl0ZSBsb2NrIGZvciBTTVAuCi0Jb3JjYwklZzcsIDB4MCwgJWcwCQkhIERpZCB3ZSBnZXQgaXQ/Ci0JYm5lCTJiCQkJISBOb3BlLi4uCi0jZW5kaWYKLQkgbGQJWyVnMV0sICVnNwotCXhvcgklZzcsICVnMiwgJWc1Ci0JYW5kCSVnNywgJWcyLCAlZzIKLSNpZmRlZiBDT05GSUdfU01QCi0Jc3QJJWc1LCBbJWcxXQotCXNldAliaXRvcHNfc3BpbmxvY2ssICVnNQotCXN0YgklZzAsIFslZzVdCi0jZWxzZQotCXN0CSVnNSwgWyVnMV0KLSNlbmRpZgotCXdyCSVnMywgMHgwLCAlcHNyCi0Jbm9wOyBub3A7IG5vcAotCWptcGwJJW83LCAlZzAKLQkgbW92CSVnNCwgJW83Ci0KLQkuZ2xvYmwgIF9fYml0b3BzX2VuZAotX19iaXRvcHNfZW5kOgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pby11bml0LmMgYi9hcmNoL3NwYXJjL21tL2lvLXVuaXQuYwppbmRleCAyYmIxMzA5Li40Y2NkYTc3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2lvLXVuaXQuYworKysgYi9hcmNoL3NwYXJjL21tL2lvLXVuaXQuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogCiAvKiAjZGVmaW5lIElPVU5JVF9ERUJVRyAqLwogI2lmZGVmIElPVU5JVF9ERUJVRwpAQCAtNDEsOSArNDIsMTIgQEAKIAlzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgaW9tbXVfcHJvbXJlZ3NbUFJPTVJFR19NQVhdOwogCXN0cnVjdCByZXNvdXJjZSByOwogCi0JaW91bml0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlvdW5pdF9zdHJ1Y3QpLCBHRlBfQVRPTUlDKTsKKwlpb3VuaXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW91bml0X3N0cnVjdCksIEdGUF9BVE9NSUMpOworCWlmICghaW91bml0KSB7CisJCXByb21fcHJpbnRmKCJTVU40RDogQ2Fubm90IGFsbG9jIGlvdW5pdCwgaGFsdGluZy5cbiIpOworCQlwcm9tX2hhbHQoKTsKKwl9CiAKLQltZW1zZXQoaW91bml0LCAwLCBzaXplb2YoKmlvdW5pdCkpOwogCWlvdW5pdC0+bGltaXRbMF0gPSBJT1VOSVRfQk1BUDFfU1RBUlQ7CiAJaW91bml0LT5saW1pdFsxXSA9IElPVU5JVF9CTUFQMl9TVEFSVDsKIAlpb3VuaXQtPmxpbWl0WzJdID0gSU9VTklUX0JNQVBNX1NUQVJUOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L0tjb25maWcgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwppbmRleCBiNjI3ZjhkLi5kNDFmNjZhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwpAQCAtMjYsNiArMjYsMTQgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlQKKwlib29sCisJZGVmYXVsdCB5CisKK2NvbmZpZyBMT0NLREVQX1NVUFBPUlQKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBUSU1FX0lOVEVSUE9MQVRJT04KIAlib29sCiAJZGVmYXVsdCB5CkBAIC0zNCw2ICs0MiwxNCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgorCWJvb2wKKwlkZWZhdWx0IG4KKworY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAorCWJvb2wKKwlkZWZhdWx0IG4KKwogY29uZmlnIEFVRElUX0FSQ0gKIAlib29sCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnCmluZGV4IGFmZTBhNzcuLjFmMTMwZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnCkBAIC0xLDUgKzEsOSBAQAogbWVudSAiS2VybmVsIGhhY2tpbmciCiAKK2NvbmZpZyBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCisJYm9vbAorCWRlZmF1bHQgeQorCiBzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgogCiBjb25maWcgREVCVUdfU1RBQ0tfVVNBR0UKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcgYi9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCmluZGV4IDJmNDYxMmYuLjVhOWU2OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZwpAQCAtMSwyNCArMSwyOSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LXJjMgotIyBUdWUgT2N0IDE3IDE5OjI5OjIwIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1yYzIKKyMgVGh1IERlYyAyOCAxNTowOTo0OSAyMDA2CiAjCiBDT05GSUdfU1BBUkM9eQogQ09ORklHX1NQQVJDNjQ9eQogQ09ORklHXzY0QklUPXkKIENPTkZJR19NTVU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19USU1FX0lOVEVSUE9MQVRJT049eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzhLQj15CiAjIENPTkZJR19TUEFSQzY0X1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzUxMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzRNQiBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00MiwxMyArNDcsMTQgQEAKICMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VSUQxNj15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTIwMyw2ICsyMDksNyBAQAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15CiBDT05GSUdfSVBWNl9ST1VURVJfUFJFRj15CkBAIC0yMTksNyArMjI2LDYgQEAKICMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9TSVQ9bQogQ09ORklHX0lQVjZfVFVOTkVMPW0KLSMgQ09ORklHX0lQVjZfU1VCVFJFRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CkBAIC0yMzgsNiArMjQ0LDggQEAKICMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQogQ09ORklHX0lQX0RDQ1BfVEZSQ19MSUI9bQorIyBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBfRENDUF9DQ0lEM19SVE89MTAwCiAKICMKICMgRENDUCBLZXJuZWwgSGFja2luZwpAQCAtMzI2LDcgKzMzNCw3IEBACiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KIENPTkZJR19CTEtfREVWX05CRD1tCiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9VQj1tCisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KQEAgLTQwNSw2ICs0MTMsNyBAQAogIwogQ09ORklHX1JBSURfQVRUUlM9bQogQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTkVUTElOSz15CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtNDI1LDYgKzQzNCw3IEBACiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNDY4LDYgKzQ3OCw3IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1VORVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKQEAgLTU5OCw2ICs2MDksNyBAQAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNzI0LDEwICs3MzYsNiBAQAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKQEAgLTgzMiw2ICs4NDAsNyBAQAogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CkBAIC04NDIsNiArODUxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldApAQCAtOTU0LDcgKzk2NCw2IEBACiAjCiBDT05GSUdfU05EX01QVTQwMV9VQVJUPW0KIENPTkZJR19TTkRfQUM5N19DT0RFQz1tCi1DT05GSUdfU05EX0FDOTdfQlVTPW0KIENPTkZJR19TTkRfRFVNTVk9bQogQ09ORklHX1NORF9WSVJNSURJPW0KIENPTkZJR19TTkRfTVRQQVY9bQpAQCAtMTAzNyw2ICsxMDQ2LDEyIEBACiAjIE9wZW4gU291bmQgU3lzdGVtCiAjCiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9bQorCisjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKIAogIwogIyBVU0Igc3VwcG9ydApAQCAtMTA1Myw2ICsxMDY4LDcgQEAKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VTFRJVEhSRUFEX1BST0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogCiAjCkBAIC0xMDgyLDE0ICsxMDk4LDI1IEBACiAjCiAjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKLSMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQotQ09ORklHX1VTQl9ISURJTlBVVD15CiAjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CkBAIC0xMTE5LDYgKzExNDYsNyBAQAogIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUX01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCkBAIC0xMjA4LDYgKzEyMzYsMTAgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworCisjCiAjIE1pc2MgTGludXgvU1BBUkMgZHJpdmVycwogIwogQ09ORklHX1NVTl9PUEVOUFJPTUlPPW0KQEAgLTEzNjQsNiArMTM5NiwxMSBAQAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAogIwogQ09ORklHX1BST0ZJTElORz15CkBAIC0xMzczLDEwICsxNDEwLDEzIEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfUFJJTlRLX1RJTUU9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE4CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQpAQCAtMTM4NywxNyArMTQyNywxNiBAQAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAogQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTQyMCw4ICsxNDU5LDkgQEAKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKIENPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9eQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fTUQ0PXkKIENPTkZJR19DUllQVE9fTUQ1PXkKQEAgLTE0MzAsOCArMTQ3MCwxMCBAQAogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fREVTPXkKIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KQEAgLTE0NTYsNiArMTQ5OCw3IEBACiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkMzMj15CkBAIC0xNDYzLDMgKzE1MDYsNCBAQAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCBlMWVhYmViLi5lZmYwYzAxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAKIAkJICAgcG93ZXIubyBzYnVzLm8gaW9tbXVfY29tbW9uLm8gc3BhcmM2NF9rc3ltcy5vIGNobWMubyBcCiAJCSAgIHZpc2VtdWwubyBwcm9tLm8gb2ZfZGV2aWNlLm8KIAorb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpICs9IHN0YWNrdHJhY2Uubwogb2JqLSQoQ09ORklHX1BDSSkJICs9IGVidXMubyBpc2EubyBwY2lfY29tbW9uLm8gcGNpX2lvbW11Lm8gXAogCQkJICAgIHBjaV9wc3ljaG8ubyBwY2lfc2FicmUubyBwY2lfc2NoaXpvLm8gXAogCQkJICAgIHBjaV9zdW40di5vIHBjaV9zdW40dl9hc20ubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9iaW5mbXRfYW91dDMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2JpbmZtdF9hb3V0MzIuYwppbmRleCBkN2NhYTYwLi5mMjA1ZmM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2JpbmZtdF9hb3V0MzIuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2JpbmZtdF9hb3V0MzIuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJaWYgKChOX01BR0lDKGV4KSAhPSBaTUFHSUMgJiYgTl9NQUdJQyhleCkgIT0gT01BR0lDICYmCiAJICAgICBOX01BR0lDKGV4KSAhPSBRTUFHSUMgJiYgTl9NQUdJQyhleCkgIT0gTk1BR0lDKSB8fAogCSAgICBOX1RSU0laRShleCkgfHwgTl9EUlNJWkUoZXgpIHx8Ci0JICAgIGJwcm0tPmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NpemUgPCBleC5hX3RleHQrZXguYV9kYXRhK05fU1lNU0laRShleCkrTl9UWFRPRkYoZXgpKSB7CisJICAgIGJwcm0tPmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSA8IGV4LmFfdGV4dCtleC5hX2RhdGErTl9TWU1TSVpFKGV4KStOX1RYVE9GRihleCkpIHsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIApAQCAtMzQ5LDcgKzM0OSw3IEBACiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgZXhlYyBleDsKIAotCWlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJcmV0dmFsID0gLUVOT0VYRUM7CiAJZXJyb3IgPSBrZXJuZWxfcmVhZChmaWxlLCAwLCAoY2hhciAqKSAmZXgsIHNpemVvZihleCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9jaG1jLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2NobWMuYwppbmRleCAyNTlmMzdlLi45Njk5YWJlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2NobWMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2NobWMuYwpAQCAtMzQxLDcgKzM0MSw3IEBACiAKIHN0YXRpYyBpbnQgaW5pdF9vbmVfbWN0cmwoc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKLQlzdHJ1Y3QgbWN0cmxfaW5mbyAqbXAgPSBrbWFsbG9jKHNpemVvZigqbXApLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgbWN0cmxfaW5mbyAqbXAgPSBremFsbG9jKHNpemVvZigqbXApLCBHRlBfS0VSTkVMKTsKIAlpbnQgcG9ydGlkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAicG9ydGlkIiwgLTEpOwogCXN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpyZWdzOwogCXZvaWQgKnB2YWw7CkBAIC0zNDksNyArMzQ5LDYgQEAKIAogCWlmICghbXApCiAJCXJldHVybiAtMTsKLQltZW1zZXQobXAsIDAsIHNpemVvZigqbXApKTsKIAlpZiAocG9ydGlkID09IC0xKQogCQlnb3RvIGZhaWw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUwppbmRleCA2ZjI4YmVjLi5jMTVhM2VkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCkBAIC01OTcsNyArNTk3LDEyIEBACiAxOgliYSxwdAkJJXhjYywgZXRyYXBfaXJxCiAJIHJkCQklcGMsICVnNwogCi0yOgltb3YJCSVsNCwgJW8xCisyOgorI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWNhbGwJdHJhY2VfaGFyZGlycXNfb2ZmCisJIG5vcAorI2VuZGlmCisJbW92CQklbDQsICVvMQogCW1vdgkJJWw1LCAlbzIKIAljYWxsCQlzcGl0ZmlyZV9hY2Nlc3NfZXJyb3IKIAkgYWRkCQklc3AsIFBUUkVHU19PRkYsICVvMApAQCAtODI0LDYgKzgyOSwxMCBAQAogCXdycHIJCSVnMCwgMTUsICVwaWwKIAliYSxwdAkJJXhjYywgZXRyYXBfaXJxCiAJIHJkCQklcGMsICVnNworI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWNhbGwJCXRyYWNlX2hhcmRpcnFzX29mZgorCSBub3AKKyNlbmRpZgogCW1vdgkJMHgwLCAlbzAKIAljYWxsCQljaGVldGFoX3BsdXNfcGFyaXR5X2Vycm9yCiAJIGFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzEKQEAgLTg1NSw2ICs4NjQsMTAgQEAKIAl3cnByCQklZzAsIDE1LCAlcGlsCiAJYmEscHQJCSV4Y2MsIGV0cmFwX2lycQogCSByZAkJJXBjLCAlZzcKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwljYWxsCQl0cmFjZV9oYXJkaXJxc19vZmYKKwkgbm9wCisjZW5kaWYKIAltb3YJCTB4MSwgJW8wCiAJY2FsbAkJY2hlZXRhaF9wbHVzX3Bhcml0eV9lcnJvcgogCSBhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8xCkBAIC0xMTgzLDYgKzExOTYsMTAgQEAKIAl3cnByCQklZzAsIDE1LCAlcGlsCiAJYmEscHQJCSV4Y2MsIGV0cmFwX2lycQogCSByZAkJJXBjLCAlZzcKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwljYWxsCQl0cmFjZV9oYXJkaXJxc19vZmYKKwkgbm9wCisjZW5kaWYKIAltb3YJCSVsNCwgJW8xCiAJbW92CQklbDUsICVvMgogCWNhbGwJCWNoZWV0YWhfZmVjY19oYW5kbGVyCkBAIC0xMjExLDYgKzEyMjgsMTAgQEAKIAl3cnByCQklZzAsIDE1LCAlcGlsCiAJYmEscHQJCSV4Y2MsIGV0cmFwX2lycQogCSByZAkJJXBjLCAlZzcKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwljYWxsCQl0cmFjZV9oYXJkaXJxc19vZmYKKwkgbm9wCisjZW5kaWYKIAltb3YJCSVsNCwgJW8xCiAJbW92CQklbDUsICVvMgogCWNhbGwJCWNoZWV0YWhfY2VlX2hhbmRsZXIKQEAgLTEyMzksNiArMTI2MCwxMCBAQAogCXdycHIJCSVnMCwgMTUsICVwaWwKIAliYSxwdAkJJXhjYywgZXRyYXBfaXJxCiAJIHJkCQklcGMsICVnNworI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWNhbGwJCXRyYWNlX2hhcmRpcnFzX29mZgorCSBub3AKKyNlbmRpZgogCW1vdgkJJWw0LCAlbzEKIAltb3YJCSVsNSwgJW8yCiAJY2FsbAkJY2hlZXRhaF9kZWZlcnJlZF9oYW5kbGVyCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TCmluZGV4IGM4ZTlkYzkuLmJhZWExMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TCkBAIC03OCwxMSArNzgsNyBAQAogCiAJLyogUFJPTSBjaWYgaGFuZGxlciBjb2RlIGFkZHJlc3MgaXMgaW4gJW80LiAgKi8KIHNwYXJjNjRfYm9vdDoKLTE6CXJkCSVwYywgJWc3Ci0Jc2V0CTFiLCAlZzEKLQljbXAJJWcxLCAlZzcKLQliZSxwbgkleGNjLCBzcGFyYzY0X2Jvb3RfYWZ0ZXJfcmVtYXAKLQkgbW92CSVvNCwgJWw3CisJbW92CSVvNCwgJWw3CiAKIAkvKiBXZSBuZWVkIHRvIHJlbWFwIHRoZSBrZXJuZWwuICBVc2UgcG9zaXRpb24gaW5kZXBlbmRhbnQKIAkgKiBjb2RlIHRvIHJlbWFwIHVzIHRvIEtFUk5CQVNFLgpAQCAtMjk1LDcgKzI5MSw2IEBACiAKIAlhZGQJJXNwLCAoMTkyICsgMTI4KSwgJXNwCiAKLXNwYXJjNjRfYm9vdF9hZnRlcl9yZW1hcDoKIAlzZXRoaQklaGkocHJvbV9yb290X2NvbXBhdGlibGUpLCAlZzEKIAlvcgklZzEsICVsbyhwcm9tX3Jvb3RfY29tcGF0aWJsZSksICVnMQogCXNldGhpCSVoaShwcm9tX3N1bjR2X25hbWUpLCAlZzcKQEAgLTQ4OSw2ICs0ODQsMTQgQEAKIAljYWxsCV9fYnplcm8KIAkgc3ViCSVvMSwgJW8wLCAlbzEKIAorI2lmZGVmIENPTkZJR19MT0NLREVQCisJLyogV2UgaGF2ZSB0aGlzIGNhbGwgdGhpcyBzdXBlciBlYXJseSwgYXMgZXZlbiBwcm9tX2luaXQgY2FuIGdyYWIKKwkgKiBzcGlubG9ja3MgYW5kIHRodXMgY2FsbCBpbnRvIHRoZSBsb2NrZGVwIGNvZGUuCisJICovCisJY2FsbAlsb2NrZGVwX2luaXQKKwkgbm9wCisjZW5kaWYKKwogCW1vdgklbDYsICVvMQkJCSEgT3BlblBST00gc3RhY2sKIAljYWxsCXByb21faW5pdAogCSBtb3YJJWw3LCAlbzAJCQkhIE9wZW5QUk9NIGNpZiBoYW5kbGVyCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYwppbmRleCBkNjRiMWVhOC4uYzNkMDY4YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jCkBAIC0zNzIsMTQgKzM3MiwxNCBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBzdW40dV9pcnEgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHN1bjR1X2lycSA9IHsKIAkudHlwZW5hbWUJPSAic3VuNHUiLAogCS5lbmFibGUJCT0gc3VuNHVfaXJxX2VuYWJsZSwKIAkuZGlzYWJsZQk9IHN1bjR1X2lycV9kaXNhYmxlLAogCS5lbmQJCT0gc3VuNHVfaXJxX2VuZCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgc3VuNHVfaXJxX2FjayA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc3VuNHVfaXJxX2FjayA9IHsKIAkudHlwZW5hbWUJPSAic3VuNHUrYWNrIiwKIAkuZW5hYmxlCQk9IHN1bjR1X2lycV9lbmFibGUsCiAJLmRpc2FibGUJPSBzdW40dV9pcnFfZGlzYWJsZSwKQEAgLTM4NywxNCArMzg3LDE0IEBACiAJLmVuZAkJPSBzdW40dV9pcnFfZW5kLAogfTsKIAotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBzdW40dl9pcnEgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHN1bjR2X2lycSA9IHsKIAkudHlwZW5hbWUJPSAic3VuNHYiLAogCS5lbmFibGUJCT0gc3VuNHZfaXJxX2VuYWJsZSwKIAkuZGlzYWJsZQk9IHN1bjR2X2lycV9kaXNhYmxlLAogCS5lbmQJCT0gc3VuNHZfaXJxX2VuZCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgc3VuNHZfaXJxX2FjayA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc3VuNHZfaXJxX2FjayA9IHsKIAkudHlwZW5hbWUJPSAic3VuNHYrYWNrIiwKIAkuZW5hYmxlCQk9IHN1bjR2X2lycV9lbmFibGUsCiAJLmRpc2FibGUJPSBzdW40dl9pcnFfZGlzYWJsZSwKQEAgLTQ5MywyMiArNDkzLDYgQEAKIAlyZXR1cm4gYnVja2V0LT52aXJ0X2lycTsKIH0KIAotdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaGFuZGxlciwgdW5zaWduZWQgaW50IHZpcnRfaXJxKQotewotCXN0cnVjdCBpbm9fYnVja2V0ICpidWNrZXQgPSB2aXJ0X2lycV90b19idWNrZXQodmlydF9pcnEpOwotCXVuc2lnbmVkIGxvbmcgcHN0YXRlOwotCXVuc2lnbmVkIGludCAqZW50OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oInJkcHIgJSVwc3RhdGUsICUwIiA6ICI9ciIgKHBzdGF0ZSkpOwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJ3cnByICUwLCAlMSwgJSVwc3RhdGUiCi0JCQkgICAgIDogOiAiciIgKHBzdGF0ZSksICJpIiAoUFNUQVRFX0lFKSk7Ci0JZW50ID0gaXJxX3dvcmsoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlidWNrZXQtPmlycV9jaGFpbiA9ICplbnQ7Ci0JKmVudCA9IF9faXJxKGJ1Y2tldCk7Ci0Jc2V0X3NvZnRpbnQoMSA8PCBQSUxfREVWSUNFX0lSUSk7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oIndycHIgJTAsIDB4MCwgJSVwc3RhdGUiIDogOiAiciIgKHBzdGF0ZSkpOwotfQotCiB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCB2aXJ0X2lycSkKIHsKIAlzdHJ1Y3QgaW5vX2J1Y2tldCAqYnVja2V0ID0gdmlydF9pcnFfdG9fYnVja2V0KHZpcnRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXNhLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lzYS5jCmluZGV4IGYwMjhlNjguLjk4NzIxYTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXNhLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pc2EuYwpAQCAtMjIsMTQgKzIyLDE1IEBACiAJCXByaW50aygiIFslcyIsIGlzYV9kZXYtPnByb21fbm9kZS0+bmFtZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgKiBfX2luaXQKLWlzYV9kZXZfZ2V0X3Jlc291cmNlKHN0cnVjdCBzcGFyY19pc2FfZGV2aWNlICppc2FfZGV2KQorc3RhdGljIHZvaWQgX19pbml0IGlzYV9kZXZfZ2V0X3Jlc291cmNlKHN0cnVjdCBzcGFyY19pc2FfZGV2aWNlICppc2FfZGV2KQogewogCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcHJlZ3M7CiAJdW5zaWduZWQgbG9uZyBiYXNlLCBsZW47CiAJaW50IHByb3BfbGVuOwogCiAJcHJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoaXNhX2Rldi0+cHJvbV9ub2RlLCAicmVnIiwgJnByb3BfbGVuKTsKKwlpZiAoIXByZWdzKQorCQlyZXR1cm47CiAKIAkvKiBPbmx5IHRoZSBmaXJzdCBvbmUgaXMgaW50ZXJlc3RpbmcuICovCiAJbGVuID0gcHJlZ3NbMF0ucmVnX3NpemU7CkBAIC00NCwxMiArNDUsOSBAQAogCiAJcmVxdWVzdF9yZXNvdXJjZSgmaXNhX2Rldi0+YnVzLT5wYXJlbnQtPmlvX3NwYWNlLAogCQkJICZpc2FfZGV2LT5yZXNvdXJjZSk7Ci0KLQlyZXR1cm4gcHJlZ3M7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpc2FfZGV2X2dldF9pcnEoc3RydWN0IHNwYXJjX2lzYV9kZXZpY2UgKmlzYV9kZXYsCi0JCQkJICAgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpwcmVncykKK3N0YXRpYyB2b2lkIF9faW5pdCBpc2FfZGV2X2dldF9pcnEoc3RydWN0IHNwYXJjX2lzYV9kZXZpY2UgKmlzYV9kZXYpCiB7CiAJc3RydWN0IG9mX2RldmljZSAqb3AgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGlzYV9kZXYtPnByb21fbm9kZSk7CiAKQEAgLTY5LDE3ICs2NywxNCBAQAogCiAJcHJpbnRrKCIgLT4iKTsKIAl3aGlsZSAoZHApIHsKLQkJc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdzOwogCQlzdHJ1Y3Qgc3BhcmNfaXNhX2RldmljZSAqaXNhX2RldjsKIAotCQlpc2FfZGV2ID0ga21hbGxvYyhzaXplb2YoKmlzYV9kZXYpLCBHRlBfS0VSTkVMKTsKKwkJaXNhX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCppc2FfZGV2KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaXNhX2RldikgewogCQkJZmF0YWxfZXJyKCJjYW5ub3QgYWxsb2NhdGUgY2hpbGQgaXNhX2RldiIpOwogCQkJcHJvbV9oYWx0KCk7CiAJCX0KIAotCQltZW1zZXQoaXNhX2RldiwgMCwgc2l6ZW9mKCppc2FfZGV2KSk7Ci0KIAkJLyogTGluayBpdCBpbiB0byBwYXJlbnQuICovCiAJCWlzYV9kZXYtPm5leHQgPSBwYXJlbnRfaXNhX2Rldi0+Y2hpbGQ7CiAJCXBhcmVudF9pc2FfZGV2LT5jaGlsZCA9IGlzYV9kZXY7CkBAIC04Nyw4ICs4Miw4IEBACiAJCWlzYV9kZXYtPmJ1cyA9IHBhcmVudF9pc2FfZGV2LT5idXM7CiAJCWlzYV9kZXYtPnByb21fbm9kZSA9IGRwOwogCi0JCXJlZ3MgPSBpc2FfZGV2X2dldF9yZXNvdXJjZShpc2FfZGV2KTsKLQkJaXNhX2Rldl9nZXRfaXJxKGlzYV9kZXYsIHJlZ3MpOworCQlpc2FfZGV2X2dldF9yZXNvdXJjZShpc2FfZGV2KTsKKwkJaXNhX2Rldl9nZXRfaXJxKGlzYV9kZXYpOwogCiAJCXJlcG9ydF9kZXYoaXNhX2RldiwgMSk7CiAKQEAgLTEwMSwxNyArOTYsMTQgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gaXNhX2JyLT5wcm9tX25vZGUtPmNoaWxkOwogCiAJd2hpbGUgKGRwKSB7Ci0JCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVnczsKIAkJc3RydWN0IHNwYXJjX2lzYV9kZXZpY2UgKmlzYV9kZXY7CiAKLQkJaXNhX2RldiA9IGttYWxsb2Moc2l6ZW9mKCppc2FfZGV2KSwgR0ZQX0tFUk5FTCk7CisJCWlzYV9kZXYgPSBremFsbG9jKHNpemVvZigqaXNhX2RldiksIEdGUF9LRVJORUwpOwogCQlpZiAoIWlzYV9kZXYpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJJU0E6IGNhbm5vdCBhbGxvY2F0ZSBpc2FfZGV2Iik7CiAJCQlyZXR1cm47CiAJCX0KIAotCQltZW1zZXQoaXNhX2RldiwgMCwgc2l6ZW9mKCppc2FfZGV2KSk7Ci0KIAkJaXNhX2Rldi0+b2ZkZXYubm9kZSA9IGRwOwogCQlpc2FfZGV2LT5vZmRldi5kZXYucGFyZW50ID0gJmlzYV9ici0+b2ZkZXYuZGV2OwogCQlpc2FfZGV2LT5vZmRldi5kZXYuYnVzID0gJmlzYV9idXNfdHlwZTsKQEAgLTE0MSw4ICsxMzMsOCBAQAogCQlpc2FfZGV2LT5idXMgPSBpc2FfYnI7CiAJCWlzYV9kZXYtPnByb21fbm9kZSA9IGRwOwogCi0JCXJlZ3MgPSBpc2FfZGV2X2dldF9yZXNvdXJjZShpc2FfZGV2KTsKLQkJaXNhX2Rldl9nZXRfaXJxKGlzYV9kZXYsIHJlZ3MpOworCQlpc2FfZGV2X2dldF9yZXNvdXJjZShpc2FfZGV2KTsKKwkJaXNhX2Rldl9nZXRfaXJxKGlzYV9kZXYpOwogCiAJCXJlcG9ydF9kZXYoaXNhX2RldiwgMCk7CiAKQEAgLTE4MCwxNCArMTcyLDEyIEBACiAJCXBibSA9IHBkZXZfY29va2llLT5wYm07CiAJCWRwID0gcGRldl9jb29raWUtPnByb21fbm9kZTsKIAotCQlpc2FfYnIgPSBrbWFsbG9jKHNpemVvZigqaXNhX2JyKSwgR0ZQX0tFUk5FTCk7CisJCWlzYV9iciA9IGt6YWxsb2Moc2l6ZW9mKCppc2FfYnIpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFpc2FfYnIpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJpc2E6IGNhbm5vdCBhbGxvY2F0ZSBzcGFyY19pc2FfYnJpZGdlIik7CiAJCQlyZXR1cm47CiAJCX0KIAotCQltZW1zZXQoaXNhX2JyLCAwLCBzaXplb2YoKmlzYV9icikpOwotCiAJCWlzYV9ici0+b2ZkZXYubm9kZSA9IGRwOwogCQlpc2FfYnItPm9mZGV2LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCQlpc2FfYnItPm9mZGV2LmRldi5idXMgPSAmaXNhX2J1c190eXBlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2twcm9iZXMuYwppbmRleCA4ZTc1ZWQ3Li5hZTIyMWYwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2twcm9iZXMuYwpAQCAtNDUsNyArNDUsMTEgQEAKIGludCBfX2twcm9iZXMgYXJjaF9wcmVwYXJlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewogCXAtPmFpbnNuLmluc25bMF0gPSAqcC0+YWRkcjsKKwlmbHVzaGkoJnAtPmFpbnNuLmluc25bMF0pOworCiAJcC0+YWluc24uaW5zblsxXSA9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT05fMjsKKwlmbHVzaGkoJnAtPmFpbnNuLmluc25bMV0pOworCiAJcC0+b3Bjb2RlID0gKnAtPmFkZHI7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODUsMTYgKzE4OSwxOSBAQAogLyogSWYgSU5TTiBpcyBhIHJlbGF0aXZlIGNvbnRyb2wgdHJhbnNmZXIgaW5zdHJ1Y3Rpb24sCiAgKiByZXR1cm4gdGhlIGNvcnJlY3RlZCBicmFuY2ggZGVzdGluYXRpb24gdmFsdWUuCiAgKgotICogVGhlIG9yaWdpbmFsIElOU04gbG9jYXRpb24gd2FzIFJFQUxfUEMsIGl0IGFjdHVhbGx5Ci0gKiBleGVjdXRlZCBhdCBQQyBhbmQgcHJvZHVjZWQgZGVzdGluYXRpb24gYWRkcmVzcyBOUEMuCisgKiByZWdzLT50cGMgYW5kIHJlZ3MtPnRucGMgc3RpbGwgaG9sZCB0aGUgdmFsdWVzIG9mIHRoZQorICogcHJvZ3JhbSBjb3VudGVycyBhdCB0aGUgdGltZSBvZiB0cmFwIGR1ZSB0byB0aGUgZXhlY3V0aW9uCisgKiBvZiB0aGUgQlJFQUtQT0lOVF9JTlNUUlVDVElPTl8yIGF0IHAtPmFpbnNuLmluc25bMV0KKyAqIAogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgcmVsYnJhbmNoX2ZpeHVwKHUzMiBpbnNuLCB1bnNpZ25lZCBsb25nIHJlYWxfcGMsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBjLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBucGMpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgcmVsYnJhbmNoX2ZpeHVwKHUzMiBpbnNuLCBzdHJ1Y3Qga3Byb2JlICpwLAorCQkJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJdW5zaWduZWQgbG9uZyByZWFsX3BjID0gKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHI7CisKIAkvKiBCcmFuY2ggbm90IHRha2VuLCBubyBtb2RzIG5lY2Vzc2FyeS4gICovCi0JaWYgKG5wYyA9PSBwYyArIDB4NFVMKQotCQlyZXR1cm4gcmVhbF9wYyArIDB4NFVMOworCWlmIChyZWdzLT50bnBjID09IHJlZ3MtPnRwYyArIDB4NFVMKQorCQlyZXR1cm4gcmVhbF9wYyArIDB4OFVMOwogCiAJLyogVGhlIHRocmVlIGNhc2VzIGFyZSBjYWxsLCBicmFuY2ggdy9wcmVkaWN0aW9uLAogCSAqIGFuZCB0cmFkaXRpb25hbCBicmFuY2guCkBAIC0yMDIsMTQgKzIwOSwyMSBAQAogCWlmICgoaW5zbiAmIDB4YzAwMDAwMDApID09IDB4NDAwMDAwMDAgfHwKIAkgICAgKGluc24gJiAweGMxYzAwMDAwKSA9PSAweDAwNDAwMDAwIHx8CiAJICAgIChpbnNuICYgMHhjMWMwMDAwMCkgPT0gMHgwMDgwMDAwMCkgeworCQl1bnNpZ25lZCBsb25nIGFpbnNuX2FkZHI7CisKKwkJYWluc25fYWRkciA9ICh1bnNpZ25lZCBsb25nKSAmcC0+YWluc24uaW5zblswXTsKKwogCQkvKiBUaGUgaW5zdHJ1Y3Rpb24gZGlkIGFsbCB0aGUgd29yayBmb3IgdXMKIAkJICogYWxyZWFkeSwganVzdCBhcHBseSB0aGUgb2Zmc2V0IHRvIHRoZSBjb3JyZWN0CiAJCSAqIGluc3RydWN0aW9uIGxvY2F0aW9uLgogCQkgKi8KLQkJcmV0dXJuIChyZWFsX3BjICsgKG5wYyAtIHBjKSk7CisJCXJldHVybiAocmVhbF9wYyArIChyZWdzLT50bnBjIC0gYWluc25fYWRkcikpOwogCX0KIAotCXJldHVybiByZWFsX3BjICsgMHg0VUw7CisJLyogSXQgaXMgam1wbCBvciBzb21lIG90aGVyIGFic29sdXRlIFBDIG1vZGlmaWNhdGlvbiBpbnN0cnVjdGlvbiwKKwkgKiBsZWF2ZSBOUEMgYXMtaXMuCisJICovCisJcmV0dXJuIHJlZ3MtPnRucGM7CiB9CiAKIC8qIElmIElOU04gaXMgYW4gaW5zdHJ1Y3Rpb24gd2hpY2ggd3JpdGVzIGl0J3MgUEMgbG9jYXRpb24KQEAgLTIyMCwxMiArMjM0LDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyAqc2xvdCA9IE5VTEw7CiAKLQkvKiBTaW1wbGVzdCBjYXN0IGlzIGNhbGwsIHdoaWNoIGFsd2F5cyB1c2VzICVvNyAqLworCS8qIFNpbXBsZXN0IGNhc2UgaXMgJ2NhbGwnLCB3aGljaCBhbHdheXMgdXNlcyAlbzcgKi8KIAlpZiAoKGluc24gJiAweGMwMDAwMDAwKSA9PSAweDQwMDAwMDAwKSB7CiAJCXNsb3QgPSAmcmVncy0+dV9yZWdzW1VSRUdfSTddOwogCX0KIAotCS8qIEptcGwgZW5jb2RlcyB0aGUgcmVnaXN0ZXIgaW5zaWRlIG9mIHRoZSBvcGNvZGUgKi8KKwkvKiAnam1wbCcgZW5jb2RlcyB0aGUgcmVnaXN0ZXIgaW5zaWRlIG9mIHRoZSBvcGNvZGUgKi8KIAlpZiAoKGluc24gJiAweGMxZjgwMDAwKSA9PSAweDgxYzAwMDAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgcmQgPSAoKGluc24gPj4gMjUpICYgMHgxZik7CiAKQEAgLTI0NywxMSArMjYxLDExIEBACiAKIC8qCiAgKiBDYWxsZWQgYWZ0ZXIgc2luZ2xlLXN0ZXBwaW5nLiAgcC0+YWRkciBpcyB0aGUgYWRkcmVzcyBvZiB0aGUKLSAqIGluc3RydWN0aW9uIHdob3NlIGZpcnN0IGJ5dGUgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIGJyZWFrcG9pbnQKKyAqIGluc3RydWN0aW9uIHdoaWNoIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBicmVha3BvaW50CiAgKiBpbnN0cnVjdGlvbi4gIFRvIGF2b2lkIHRoZSBTTVAgcHJvYmxlbXMgdGhhdCBjYW4gb2NjdXIgd2hlbiB3ZQogICogdGVtcG9yYXJpbHkgcHV0IGJhY2sgdGhlIG9yaWdpbmFsIG9wY29kZSB0byBzaW5nbGUtc3RlcCwgd2UKICAqIHNpbmdsZS1zdGVwcGVkIGEgY29weSBvZiB0aGUgaW5zdHJ1Y3Rpb24uICBUaGUgYWRkcmVzcyBvZiB0aGlzCi0gKiBjb3B5IGlzIHAtPmFpbnNuLmluc24uCisgKiBjb3B5IGlzICZwLT5haW5zbi5pbnNuWzBdLgogICoKICAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdG8gcmV0dXJuIGZyb20gdGhlIHBvc3Qtc2luZ2xlLXN0ZXAKICAqIGJyZWFrcG9pbnQgdHJhcC4KQEAgLTI2MSwxMSArMjc1LDExIEBACiB7CiAJdTMyIGluc24gPSBwLT5haW5zbi5pbnNuWzBdOwogCisJcmVncy0+dG5wYyA9IHJlbGJyYW5jaF9maXh1cChpbnNuLCBwLCByZWdzKTsKKworCS8qIFRoaXMgYXNzaWdubWVudCBtdXN0IG9jY3VyIGFmdGVyIHJlbGJyYW5jaF9maXh1cCgpICovCiAJcmVncy0+dHBjID0ga2NiLT5rcHJvYmVfb3JpZ190bnBjOwotCXJlZ3MtPnRucGMgPSByZWxicmFuY2hfZml4dXAoaW5zbiwKLQkJCQkgICAgICh1bnNpZ25lZCBsb25nKSBwLT5hZGRyLAotCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpICZwLT5haW5zbi5pbnNuWzBdLAotCQkJCSAgICAgcmVncy0+dG5wYyk7CisKIAlyZXRwY19maXh1cChyZWdzLCBpbnNuLCAodW5zaWduZWQgbG9uZykgcC0+YWRkcik7CiAKIAlyZWdzLT50c3RhdGUgPSAoKHJlZ3MtPnRzdGF0ZSAmIH5UU1RBVEVfUElMKSB8CkBAIC00MzAsMTcgKzQ0NCw4IEBACiAJc3RydWN0IGpwcm9iZSAqanAgPSBjb250YWluZXJfb2YocCwgc3RydWN0IGpwcm9iZSwga3ApOwogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOwogCi0Ja2NiLT5qcHJvYmVfc2F2ZWRfcmVnc19sb2NhdGlvbiA9IHJlZ3M7CiAJbWVtY3B5KCYoa2NiLT5qcHJvYmVfc2F2ZWRfcmVncyksIHJlZ3MsIHNpemVvZigqcmVncykpOwogCi0JLyogU2F2ZSBhIHdob2xlIHN0YWNrIGZyYW1lLCB0aGlzIGdldHMgYXJndW1lbnRzCi0JICogcHVzaGVkIG9udG8gdGhlIHN0YWNrIGFmdGVyIHVzaW5nIHVwIGFsbCB0aGUKLQkgKiBhcmcgcmVnaXN0ZXJzLgotCSAqLwotCW1lbWNweSgmKGtjYi0+anByb2JlX3NhdmVkX3N0YWNrKSwKLQkgICAgICAgKGNoYXIgKikgKHJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSArIFNUQUNLX0JJQVMpLAotCSAgICAgICBzaXplb2Yoa2NiLT5qcHJvYmVfc2F2ZWRfc3RhY2spKTsKLQogCXJlZ3MtPnRwYyAgPSAodW5zaWduZWQgbG9uZykganAtPmVudHJ5OwogCXJlZ3MtPnRucGMgPSAoKHVuc2lnbmVkIGxvbmcpIGpwLT5lbnRyeSkgKyAweDRVTDsKIAlyZWdzLT50c3RhdGUgfD0gVFNUQVRFX1BJTDsKQEAgLTQ1MCwxMCArNDU1LDE5IEBACiAKIHZvaWQgX19rcHJvYmVzIGpwcm9iZV9yZXR1cm4odm9pZCkKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIi5nbG9ibAlqcHJvYmVfcmV0dXJuX3RyYXBfaW5zdHJ1Y3Rpb25cbiIKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIG9yaWdfZnAgYXNtKCJnMSIpOworCisJb3JpZ19mcCA9IGtjYi0+anByb2JlX3NhdmVkX3JlZ3MudV9yZWdzW1VSRUdfRlBdOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJcbiIKKyIxOgljbXAJCSUlc3AsICUwXG5cdCIKKwkiYmx1LGEscHQJJSV4Y2MsIDFiXG5cdCIKKwkiIHJlc3RvcmVcblx0IgorCSIuZ2xvYmwJCWpwcm9iZV9yZXR1cm5fdHJhcF9pbnN0cnVjdGlvblxuIgogImpwcm9iZV9yZXR1cm5fdHJhcF9pbnN0cnVjdGlvbjpcblx0IgotCQkidGEgMHg3MCIpOworCSJ0YQkJMHg3MCIKKwk6IC8qIG5vIG91dHB1dHMgKi8KKwk6ICJyIiAob3JpZ19mcCkpOwogfQogCiBleHRlcm4gdm9pZCBqcHJvYmVfcmV0dXJuX3RyYXBfaW5zdHJ1Y3Rpb24odm9pZCk7CkBAIC00NjYsMjYgKzQ4MCw3IEBACiAJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CiAKIAlpZiAoYWRkciA9PSAodTMyICopIGpwcm9iZV9yZXR1cm5fdHJhcF9pbnN0cnVjdGlvbikgewotCQlpZiAoa2NiLT5qcHJvYmVfc2F2ZWRfcmVnc19sb2NhdGlvbiAhPSByZWdzKSB7Ci0JCQlwcmludGsoIkpQUk9CRTogQ3VycmVudCByZWdzICglcCkgZG9lcyBub3QgbWF0Y2ggIgotCQkJICAgICAgICJzYXZlZCByZWdzICglcCkuXG4iLAotCQkJICAgICAgIHJlZ3MsIGtjYi0+anByb2JlX3NhdmVkX3JlZ3NfbG9jYXRpb24pOwotCQkJcHJpbnRrKCJKUFJPQkU6IFNhdmVkIHJlZ2lzdGVyc1xuIik7Ci0JCQlfX3Nob3dfcmVncyhrY2ItPmpwcm9iZV9zYXZlZF9yZWdzX2xvY2F0aW9uKTsKLQkJCXByaW50aygiSlBST0JFOiBDdXJyZW50IHJlZ2lzdGVyc1xuIik7Ci0JCQlfX3Nob3dfcmVncyhyZWdzKTsKLQkJCUJVRygpOwotCQl9Ci0JCS8qIFJlc3RvcmUgb2xkIHJlZ2lzdGVyIHN0YXRlLiAgRG8gcHRfcmVncwotCQkgKiBmaXJzdCBzbyB0aGF0IFVSRUdfRlAgaXMgdGhlIG9yaWdpbmFsIG9uZSBmb3IKLQkJICogdGhlIHN0YWNrIGZyYW1lIHJlc3RvcmUuCi0JCSAqLwogCQltZW1jcHkocmVncywgJihrY2ItPmpwcm9iZV9zYXZlZF9yZWdzKSwgc2l6ZW9mKCpyZWdzKSk7Ci0KLQkJbWVtY3B5KChjaGFyICopIChyZWdzLT51X3JlZ3NbVVJFR19GUF0gKyBTVEFDS19CSUFTKSwKLQkJICAgICAgICYoa2NiLT5qcHJvYmVfc2F2ZWRfc3RhY2spLAotCQkgICAgICAgc2l6ZW9mKGtjYi0+anByb2JlX3NhdmVkX3N0YWNrKSk7Ci0KIAkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9vZl9kZXZpY2UuYwppbmRleCA4Y2MxNGZjLi5iMGYzZTAwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL29mX2RldmljZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMKQEAgLTE0NCw5ICsxNDQsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0wob2ZfaW9yZW1hcCk7CiAKLXZvaWQgb2ZfaW91bm1hcCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3ZvaWQgb2ZfaW91bm1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmVsZWFzZV9yZWdpb24oKHVuc2lnbmVkIGxvbmcpIGJhc2UsIHNpemUpOworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCXJlbGVhc2VfbWVtX3JlZ2lvbigodW5zaWduZWQgbG9uZykgYmFzZSwgc2l6ZSk7CisJZWxzZQorCQlyZWxlYXNlX3JlZ2lvbigodW5zaWduZWQgbG9uZykgYmFzZSwgc2l6ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX2lvdW5tYXApOwogCkBAIC0xMDA3LDEwICsxMDEwLDkgQEAKIHsKIAlzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBrbWFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOwogCiAJZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCWRldi0+ZGV2LmJ1cyA9IGJ1czsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCmluZGV4IDAzYWQ0YzAuLjZiMDQ3OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwpAQCAtNzk4LDcgKzc5OCw3IEBACiBzdGF0aWMgdm9pZCBwYm1fc2Nhbl9idXMoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnAsCiAJCQkgc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQogewotCXN0cnVjdCBwY2lkZXZfY29va2llICpjb29raWUgPSBrbWFsbG9jKHNpemVvZigqY29va2llKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHBjaWRldl9jb29raWUgKmNvb2tpZSA9IGt6YWxsb2Moc2l6ZW9mKCpjb29raWUpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghY29va2llKSB7CiAJCXByb21fcHJpbnRmKCIlczogQ3JpdGljYWwgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIiwgcGJtLT5uYW1lKTsKQEAgLTgwNiw3ICs4MDYsNiBAQAogCX0KIAogCS8qIEFsbCB3ZSBjYXJlIGFib3V0IGlzIHRoZSBQQk0uICovCi0JbWVtc2V0KGNvb2tpZSwgMCwgc2l6ZW9mKCpjb29raWUpKTsKIAljb29raWUtPnBibSA9IHBibTsKIAogCXBibS0+cGNpX2J1cyA9IHBjaV9zY2FuX2J1cyhwYm0tPnBjaV9maXJzdF9idXNubywgcC0+cGNpX29wcywgcGJtKTsKQEAgLTEwNDgsMTIgKzEwNDcsMTEgQEAKIAkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgZnJlZSBhcmVhIG1hcC4gICovCiAJc3ogPSBudW1fdHNiX2VudHJpZXMgLyA4OwogCXN6ID0gKHN6ICsgN1VMKSAmIH43VUw7Ci0JaW9tbXUtPmFyZW5hLm1hcCA9IGttYWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlvbW11LT5hcmVuYS5tYXAgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlvbW11LT5hcmVuYS5tYXApIHsKIAkJcHJvbV9wcmludGYoIlBDSV9JT01NVTogRXJyb3IsIGttYWxsb2MoYXJlbmEubWFwKSBmYWlsZWQuXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQotCW1lbXNldChpb21tdS0+YXJlbmEubWFwLCAwLCBzeik7CiAJaW9tbXUtPmFyZW5hLmxpbWl0ID0gbnVtX3RzYl9lbnRyaWVzOwogCiAJc3ogPSBwcm9iZV9leGlzdGluZ19lbnRyaWVzKHBibSwgaW9tbXUpOwpAQCAtMTE2NCwyNCArMTE2MiwyMCBAQAogCQlwZXJfY3B1KHBjaV9pb21tdV9iYXRjaCwgaSkucGdsaXN0ID0gKHU2NCAqKSBwYWdlOwogCX0KIAotCXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyksIEdGUF9BVE9NSUMpOworCXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyksIEdGUF9BVE9NSUMpOwogCWlmICghcCkKIAkJZ290byBmYXRhbF9tZW1vcnlfZXJyb3I7CiAKLQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0KLQlpb21tdSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfaW9tbXUpLCBHRlBfQVRPTUlDKTsKKwlpb21tdSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfaW9tbXUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWlvbW11KQogCQlnb3RvIGZhdGFsX21lbW9yeV9lcnJvcjsKIAotCW1lbXNldChpb21tdSwgMCwgc2l6ZW9mKCppb21tdSkpOwogCXAtPnBibV9BLmlvbW11ID0gaW9tbXU7CiAKLQlpb21tdSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfaW9tbXUpLCBHRlBfQVRPTUlDKTsKKwlpb21tdSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfaW9tbXUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWlvbW11KQogCQlnb3RvIGZhdGFsX21lbW9yeV9lcnJvcjsKIAotCW1lbXNldChpb21tdSwgMCwgc2l6ZW9mKCppb21tdSkpOwogCXAtPnBibV9CLmlvbW11ID0gaW9tbXU7CiAKIAlwLT5uZXh0ID0gcGNpX2NvbnRyb2xsZXJfcm9vdDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCmluZGV4IGQzMTk3NWUuLjgxMTExYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYwpAQCAtMjAyLDcgKzIwMiwxMCBAQAogI2VuZGlmCiAJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1RSQUNFTUUpIHsKIAkJcmV0ID0gcHRyYWNlX3RyYWNlbWUoKTsKLQkJcHRfc3VjY19yZXR1cm4ocmVncywgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJcHRfZXJyb3JfcmV0dXJuKHJlZ3MsIC1yZXQpOworCQllbHNlCisJCQlwdF9zdWNjX3JldHVybihyZWdzLCAwKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3J0cmFwLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3J0cmFwLlMKaW5kZXggMzUyMmNkNi4uMDc5ZDE4YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9ydHJhcC5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcnRyYXAuUwpAQCAtMTY1LDE0ICsxNjUsMjYgQEAKIF9faGFuZGxlX3NvZnRpcnFfY29udGludWU6CiBydHJhcF94Y2FsbDoKIAkJc2V0aGkJCQklaGkoMHhmIDw8IDIwKSwgJWw0Ci0JCWFuZGNjCQkJJWwxLCBUU1RBVEVfUFJJViwgJWwzCiAJCWFuZAkJCSVsMSwgJWw0LCAlbDQKKwkJYW5kbgkJCSVsMSwgJWw0LCAlbDEKKwkJc3JsCQkJJWw0LCAyMCwgJWw0CisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJCWJybnoscG4JCQklbDQsIHJ0cmFwX25vX2lycV9lbmFibGUKKwkJIG5vcAorCQljYWxsCQkJdHJhY2VfaGFyZGlycXNfb24KKwkJIG5vcAorCQl3cnByCQkJJWw0LCAlcGlsCitydHJhcF9ub19pcnFfZW5hYmxlOgorI2VuZGlmCisJCWFuZGNjCQkJJWwxLCBUU1RBVEVfUFJJViwgJWwzCiAJCWJuZSxwbgkJCSVpY2MsIHRvX2tlcm5lbAotCQkgYW5kbgkJCSVsMSwgJWw0LCAlbDEKKwkJIG5vcAogCiAJCS8qIFdlIG11c3QgaG9sZCBJUlFzIG9mZiBhbmQgYXRvbWljYWxseSB0ZXN0IHNjaGVkdWxlK3NpZ25hbAogCQkgKiBzdGF0ZSwgdGhlbiBob2xkIHRoZW0gb2ZmIGFsbCB0aGUgd2F5IGJhY2sgdG8gdXNlcnNwYWNlLgotCQkgKiBJZiB3ZSBhcmUgcmV0dXJuaW5nIHRvIGtlcm5lbCwgbm9uZSBvZiB0aGlzIG1hdHRlcnMuCisJCSAqIElmIHdlIGFyZSByZXR1cm5pbmcgdG8ga2VybmVsLCBub25lIG9mIHRoaXMgbWF0dGVycy4gIE5vdGUKKwkJICogdGhhdCB3ZSBhcmUgZGlzYWJsaW5nIGludGVycnVwdHMgdmlhIFBTVEFURV9JRSwgbm90IHVzaW5nCisJCSAqICVwaWwuCiAJCSAqCiAJCSAqIElmIHdlIGRvIG5vdCBkbyB0aGlzLCB0aGVyZSBpcyBhIHdpbmRvdyB3aGVyZSB3ZSB3b3VsZCBkbwogCQkgKiB0aGUgdGVzdHMsIGxhdGVyIHRoZSBzaWduYWwvcmVzY2hlZCBldmVudCBhcnJpdmVzIGJ1dCB3ZSBkbwpAQCAtMjU2LDcgKzI2OCw2IEBACiAKIAkJbGQJCQlbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X1ldLCAlbzMKIAkJd3IJCQklbzMsICVnMCwgJXkKLQkJc3JsCQkJJWw0LCAyMCwgJWw0CiAJCXdycHIJCQklbDQsIDB4MCwgJXBpbAogCQl3cnByCQkJJWcwLCAweDEsICV0bAogCQl3cnByCQkJJWwxLCAlZzAsICV0c3RhdGUKQEAgLTM3NCw4ICszODUsOCBAQAogCQkgbGR4CQkJWyVnNiArIFRJX0ZMQUdTXSwgJWw1CiAJCWFuZGNjCQkJJWw1LCBfVElGX05FRURfUkVTQ0hFRCwgJWcwCiAJCWJlLHB0CQkJJXhjYywga2Vybl9mcHVjaGVjawotCQkgc3JsCQkJJWw0LCAyMCwgJWw1Ci0JCWNtcAkJCSVsNSwgMAorCQkgbm9wCisJCWNtcAkJCSVsNCwgMAogCQlibmUscG4JCQkleGNjLCBrZXJuX2ZwdWNoZWNrCiAJCSBzZXRoaQkJCSVoaShQUkVFTVBUX0FDVElWRSksICVsNgogCQlzdHcJCQklbDYsIFslZzYgKyBUSV9QUkVfQ09VTlRdCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwppbmRleCBjYzA5ZDgyLi5mYzk5ZjdiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKQEAgLTEzODgsNyArMTM4OCw3IEBACiB7CiB9CiAKLWludCBfX2RldmluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKK2ludCBfX2NwdWluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKIHsKIAlpbnQgcmV0ID0gc21wX2Jvb3Rfb25lX2NwdShjcHUpOwogCkBAIC0xNDQ3LDExICsxNDQ3LDggQEAKIAljaGFyICpwdHI7CiAKIAkvKiBDb3B5IHNlY3Rpb24gZm9yIGVhY2ggQ1BVICh3ZSBkaXNjYXJkIHRoZSBvcmlnaW5hbCkgKi8KLQlnb2FsID0gQUxJR04oX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCwgU01QX0NBQ0hFX0JZVEVTKTsKLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCWlmIChnb2FsIDwgUEVSQ1BVX0VOT1VHSF9ST09NKQotCQlnb2FsID0gUEVSQ1BVX0VOT1VHSF9ST09NOwotI2VuZGlmCisJZ29hbCA9IFBFUkNQVV9FTk9VR0hfUk9PTTsKKwogCV9fcGVyX2NwdV9zaGlmdCA9IDA7CiAJZm9yIChzaXplID0gMVVMOyBzaXplIDwgZ29hbDsgc2l6ZSA8PD0gMVVMKQogCQlfX3Blcl9jcHVfc2hpZnQrKzsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdGFja3RyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkMTVmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0wLDAgKzEsNDEgQEAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKwordm9pZCBzYXZlX3N0YWNrX3RyYWNlKHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGtzcCwgZnAsIHRocmVhZF9iYXNlOworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdHA7CisKKwlpZiAoIXRhc2spCisJCXRhc2sgPSBjdXJyZW50OworCXRwID0gdGFza190aHJlYWRfaW5mbyh0YXNrKTsKKwlpZiAodGFzayA9PSBjdXJyZW50KSB7CisJCWZsdXNod19hbGwoKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCQkibW92CSUlZnAsICUwIgorCQkJOiAiPXIiIChrc3ApCisJCSk7CisJfSBlbHNlCisJCWtzcCA9IHRwLT5rc3A7CisKKwlmcCA9IGtzcCArIFNUQUNLX0JJQVM7CisJdGhyZWFkX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgdHA7CisJZG8geworCQlzdHJ1Y3QgcmVnX3dpbmRvdyAqcnc7CisKKwkJLyogQm9ndXMgZnJhbWUgcG9pbnRlcj8gKi8KKwkJaWYgKGZwIDwgKHRocmVhZF9iYXNlICsgc2l6ZW9mKHN0cnVjdCB0aHJlYWRfaW5mbykpIHx8CisJCSAgICBmcCA+PSAodGhyZWFkX2Jhc2UgKyBUSFJFQURfU0laRSkpCisJCQlicmVhazsKKworCQlydyA9IChzdHJ1Y3QgcmVnX3dpbmRvdyAqKSBmcDsKKwkJaWYgKHRyYWNlLT5za2lwID4gMCkKKwkJCXRyYWNlLT5za2lwLS07CisJCWVsc2UKKwkJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gcnctPmluc1s3XTsKKworCQlmcCA9IHJ3LT5pbnNbNl0gKyBTVEFDS19CSUFTOworCX0gd2hpbGUgKHRyYWNlLT5ucl9lbnRyaWVzIDwgdHJhY2UtPm1heF9lbnRyaWVzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3VuNHZfaXZlYy5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl9pdmVjLlMKaW5kZXggNDk3MDNjMy4uNDA1ODU1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl9pdmVjLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl9pdmVjLlMKQEAgLTE5MCw3ICsxOTAsMTAgQEAKIAltb3YJJWcxLCAlZzQKIAliYSxwdAkleGNjLCBldHJhcF9pcnEKIAkgcmQJJXBjLCAlZzcKLQorI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWNhbGwJCXRyYWNlX2hhcmRpcnFzX29mZgorCSBub3AKKyNlbmRpZgogCS8qIExvZyB0aGUgZXZlbnQuICAqLwogCWFkZAklc3AsIFBUUkVHU19PRkYsICVvMAogCWNhbGwJc3VuNHZfcmVzdW1fZXJyb3IKQEAgLTIxNiw3ICsyMTksMTAgQEAKIAl3cnByCSVnMCwgMTUsICVwaWwKIAliYSxwdAkleGNjLCBldHJhcF9pcnEKIAkgcmQJJXBjLCAlZzcKLQorI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWNhbGwJCXRyYWNlX2hhcmRpcnFzX29mZgorCSBub3AKKyNlbmRpZgogCWNhbGwJc3VuNHZfcmVzdW1fb3ZlcmZsb3cKIAkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wCiAKQEAgLTI5NSw3ICszMDEsMTAgQEAKIAltb3YJJWcxLCAlZzQKIAliYSxwdAkleGNjLCBldHJhcF9pcnEKIAkgcmQJJXBjLCAlZzcKLQorI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWNhbGwJCXRyYWNlX2hhcmRpcnFzX29mZgorCSBub3AKKyNlbmRpZgogCS8qIExvZyB0aGUgZXZlbnQuICAqLwogCWFkZAklc3AsIFBUUkVHU19PRkYsICVvMAogCWNhbGwJc3VuNHZfbm9ucmVzdW1fZXJyb3IKQEAgLTMyMSw3ICszMzAsMTAgQEAKIAl3cnByCSVnMCwgMTUsICVwaWwKIAliYSxwdAkleGNjLCBldHJhcF9pcnEKIAkgcmQJJXBjLCAlZzcKLQorI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWNhbGwJCXRyYWNlX2hhcmRpcnFzX29mZgorCSBub3AKKyNlbmRpZgogCWNhbGwJc3VuNHZfbm9ucmVzdW1fb3ZlcmZsb3cKIAkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3VuNHZfdGxiX21pc3MuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3VuNHZfdGxiX21pc3MuUwppbmRleCBiNzMxODgxLi45ODcxZGJiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N1bjR2X3RsYl9taXNzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl90bGJfbWlzcy5TCkBAIC0xNDIsOSArMTQyLDkgQEAKIAlyZHByCSV0bCwgJWcxCiAJY21wCSVnMSwgMQogCWJndSxwbgkleGNjLCB3aW5maXhfdHJhbXBvbGluZQotCSBub3AKLQliYSxwdAkleGNjLCBzcGFyYzY0X3JlYWxmYXVsdF9jb21tb24KIAkgbW92CUZBVUxUX0NPREVfRFRMQiB8IEZBVUxUX0NPREVfV1JJVEUsICVnNAorCWJhLHB0CSV4Y2MsIHNwYXJjNjRfcmVhbGZhdWx0X2NvbW1vbgorCSBub3AKIAogCS8qIENhbGxlZCBmcm9tIHRyYXAgdGFibGU6CiAJICogJWc0Ogl2YWRkcgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3Vub3MzMi5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3Vub3MzMi5jCmluZGV4IDdkYTcyZDMuLjJlYmMyYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3N1bm9zMzIuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zdW5vczMyLmMKQEAgLTgzLDcgKzgzLDcgQEAKICAJCWZpbGUgPSBmZ2V0KGZkKTsKIAkJaWYgKCFmaWxlKQogCQkJZ290byBvdXQ7Ci0JCWlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJaWYgKGltYWpvcihpbm9kZSkgPT0gTUVNX01BSk9SICYmIGltaW5vcihpbm9kZSkgPT0gNSkgewogCQkJZmxhZ3MgfD0gTUFQX0FOT05ZTU9VUzsKIAkJCWZwdXQoZmlsZSk7CkBAIC02MTUsNyArNjE1LDcgQEAKIAlpZiAoIWZpbGUpCiAJCXJldHVybiAwOwogCi0JaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAlzb2NrZXQgPSBTT0NLRVRfSShpbm9kZSk7CiAJbG9jYWwuc2luX2ZhbWlseSA9IEFGX0lORVQ7CkBAIC0xMDU1LDcgKzEwNTUsNyBAQAogCQlicmVhazsKIAljYXNlIDI6CiAJCXJ2YWwgPSAtRUZBVUxUOwotCQlrbWJ1ZiA9IChzdHJ1Y3QgbXNnYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IG1zZ2J1ZikgKyBhcmczLAorCQlrbWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2didWYpICsgYXJnMywKIAkJCQkJCSBHRlBfS0VSTkVMKTsKIAkJaWYgKCFrbWJ1ZikKIAkJCWJyZWFrOwpAQCAtMTA3OCw3ICsxMDc4LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSAzOgogCQlydmFsID0gLUVGQVVMVDsKLQkJa21idWYgPSAoc3RydWN0IG1zZ2J1ZiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2didWYpICsgYXJnMywKKwkJa21idWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXNnYnVmKSArIGFyZzMsCiAJCQkJCQkgR0ZQX0tFUk5FTCk7CiAJCWlmICgha21idWYgfHwgc3Vub3NfbXNnYnVmX2dldCgoc3RydWN0IG1zZ2J1ZjMyIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWFyZzIsCiAJCQkJCSAgICAgICBrbWJ1ZiwgYXJnMykpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZmUxNzk2Yy4uYWQ2Nzc4NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPiAgLyogZm9yIGppZmZpZXMgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CkBAIC0xODczLDYgKzE4NzMsMTYgQEAKIAogCXB1dF9jcHUoKTsKIAorCWlmIChlbnQtPmVycl90eXBlID09IFNVTjRWX0VSUl9UWVBFX1dBUk5JTkdfUkVTKSB7CisJCS8qIElmIGVycl90eXBlIGlzIDB4NCwgaXQncyBhIHBvd2VyZG93biByZXF1ZXN0LiAgRG8KKwkJICogbm90IGRvIHRoZSB1c3VhbCByZXN1bWFibGUgZXJyb3IgbG9nIGJlY2F1c2UgdGhhdAorCQkgKiBtYWtlcyBpdCBsb29rIGxpa2Ugc29tZSBhYm5vcm1hbCBlcnJvci4KKwkJICovCisJCXByaW50ayhLRVJOX0lORk8gIlBvd2VyIGRvd24gcmVxdWVzdC4uLlxuIik7CisJCWtpbGxfY2FkX3BpZChTSUdJTlQsIDEpOworCQlyZXR1cm47CisJfQorCiAJc3VuNHZfbG9nX2Vycm9yKHJlZ3MsICZsb2NhbF9jb3B5LCBjcHUsCiAJCQlLRVJOX0VSUiAiUkVTVU1BQkxFIEVSUk9SIiwKIAkJCSZzdW40dl9yZXN1bV9vZmxvd19jbnQpOwpAQCAtMjI2MSw4ICsyMjcxLDEyIEBACiAJZG9fZXhpdChTSUdTRUdWKTsKIH0KIAorI2RlZmluZSBWSVNfT1BDT0RFX01BU0sJKCgweDMgPDwgMzApIHwgKDB4M2YgPDwgMTkpKQorI2RlZmluZSBWSVNfT1BDT0RFX1ZBTAkoKDB4MiA8PCAzMCkgfCAoMHgzNiA8PCAxOSkpCisKIGV4dGVybiBpbnQgaGFuZGxlX3BvcGModTMyIGluc24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiBpbnQgaGFuZGxlX2xkZl9zdHEodTMyIGluc24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpbnQgdmlzX2VtdWwoc3RydWN0IHB0X3JlZ3MgKiwgdW5zaWduZWQgaW50KTsKIAogdm9pZCBkb19pbGxlZ2FsX2luc3RydWN0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtMjI4NywxMCArMjMwMSwxOCBAQAogCQkJaWYgKGhhbmRsZV9sZGZfc3RxKGluc24sIHJlZ3MpKQogCQkJCXJldHVybjsKIAkJfSBlbHNlIGlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7Ci0JCQlleHRlcm4gaW50IHZpc19lbXVsKHN0cnVjdCBwdF9yZWdzICosIHVuc2lnbmVkIGludCk7CisJCQlpZiAoKGluc24gJiBWSVNfT1BDT0RFX01BU0spID09IFZJU19PUENPREVfVkFMKSB7CisJCQkJaWYgKCF2aXNfZW11bChyZWdzLCBpbnNuKSkKKwkJCQkJcmV0dXJuOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgZnB1c3RhdGUgKmYgPSBGUFVTVEFURTsKIAotCQkJaWYgKCF2aXNfZW11bChyZWdzLCBpbnNuKSkKLQkJCQlyZXR1cm47CisJCQkJLyogWFhYIG1heWJlIHZlcmlmeSBYRlNSIGJpdHMgbGlrZQorCQkJCSAqIFhYWCBkb19mcG90aGVyKCkgZG9lcz8KKwkJCQkgKi8KKwkJCQlpZiAoZG9fbWF0aGVtdShyZWdzLCBmKSkKKwkJCQkJcmV0dXJuOworCQkJfQogCQl9CiAJfQogCWluZm8uc2lfc2lnbm8gPSBTSUdJTEw7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3VuYWxpZ25lZC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYwppbmRleCBhOWI3NjUyLi5iYzE4ZDQ4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3VuYWxpZ25lZC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogCXJldHVybiAhZmxvYXRpbmdfcG9pbnRfbG9hZF9vcl9zdG9yZV9wKGluc24pOwogfQogCi1zdGF0aWMgdm9pZCBrZXJuZWxfbW5hX3RyYXBfZmF1bHQodm9pZCkKK3N0YXRpYyB2b2lkIGtlcm5lbF9tbmFfdHJhcF9mYXVsdChpbnQgZml4dXBfdHN0YXRlX2FzaSkKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2Vybl91bmFfcmVnczsKIAl1bnNpZ25lZCBpbnQgaW5zbiA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2Vybl91bmFfaW5zbjsKQEAgLTI3NCwxOCArMjc0LDE1IEBACiAJcmVncy0+dHBjID0gZW50cnktPmZpeHVwOwogCXJlZ3MtPnRucGMgPSByZWdzLT50cGMgKyA0OwogCi0JcmVncy0+dHN0YXRlICY9IH5UU1RBVEVfQVNJOwotCXJlZ3MtPnRzdGF0ZSB8PSAoQVNJX0FJVVMgPDwgMjRVTCk7CisJaWYgKGZpeHVwX3RzdGF0ZV9hc2kpIHsKKwkJcmVncy0+dHN0YXRlICY9IH5UU1RBVEVfQVNJOworCQlyZWdzLT50c3RhdGUgfD0gKEFTSV9BSVVTIDw8IDI0VUwpOworCX0KIH0KIAotYXNtbGlua2FnZSB2b2lkIGtlcm5lbF91bmFsaWduZWRfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc24pCitzdGF0aWMgdm9pZCBsb2dfdW5hbGlnbmVkKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50LCBsYXN0X3RpbWU7Ci0JZW51bSBkaXJlY3Rpb24gZGlyID0gZGVjb2RlX2RpcmVjdGlvbihpbnNuKTsKLQlpbnQgc2l6ZSA9IGRlY29kZV9hY2Nlc3Nfc2l6ZShpbnNuKTsKLQotCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2Vybl91bmFfcmVncyA9IHJlZ3M7Ci0JY3VycmVudF90aHJlYWRfaW5mbygpLT5rZXJuX3VuYV9pbnNuID0gaW5zbjsKIAogCWlmIChqaWZmaWVzIC0gbGFzdF90aW1lID4gNSAqIEhaKQogCQljb3VudCA9IDA7CkBAIC0yOTUsNiArMjkyLDI4IEBACiAJCXByaW50aygiS2VybmVsIHVuYWxpZ25lZCBhY2Nlc3MgYXQgVFBDWyVseF0gIiwgcmVncy0+dHBjKTsKIAkJcHJpbnRfc3ltYm9sKCIlc1xuIiwgcmVncy0+dHBjKTsKIAl9Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBrZXJuZWxfdW5hbGlnbmVkX3RyYXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnNuKQoreworCWVudW0gZGlyZWN0aW9uIGRpciA9IGRlY29kZV9kaXJlY3Rpb24oaW5zbik7CisJaW50IHNpemUgPSBkZWNvZGVfYWNjZXNzX3NpemUoaW5zbik7CisJaW50IG9yaWdfYXNpLCBhc2k7CisKKwljdXJyZW50X3RocmVhZF9pbmZvKCktPmtlcm5fdW5hX3JlZ3MgPSByZWdzOworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2Vybl91bmFfaW5zbiA9IGluc247CisKKwlvcmlnX2FzaSA9IGFzaSA9IGRlY29kZV9hc2koaW5zbiwgcmVncyk7CisKKwkvKiBJZiB0aGlzIGlzIGEge2dldCxwdXR9X3VzZXIoKSBvbiBhbiB1bmFsaWduZWQgdXNlcnNwYWNlIHBvaW50ZXIsCisJICoganVzdCBzaWduYWwgYSBmYXVsdCBhbmQgZG8gbm90IGxvZyB0aGUgZXZlbnQuCisJICovCisJaWYgKGFzaSA9PSBBU0lfQUlVUykgeworCQlrZXJuZWxfbW5hX3RyYXBfZmF1bHQoMCk7CisJCXJldHVybjsKKwl9CisKKwlsb2dfdW5hbGlnbmVkKHJlZ3MpOwogCiAJaWYgKCFva19mb3Jfa2VybmVsKGluc24pIHx8IGRpciA9PSBib3RoKSB7CiAJCXByaW50aygiVW5zdXBwb3J0ZWQgdW5hbGlnbmVkIGxvYWQvc3RvcmUgdHJhcCBmb3Iga2VybmVsICIKQEAgLTMwMiwxMCArMzIxLDEwIEBACiAJCXVuYWxpZ25lZF9wYW5pYygiS2VybmVsIGRvZXMgZnB1L2F0b21pYyAiCiAJCQkJInVuYWxpZ25lZCBsb2FkL3N0b3JlLiIsIHJlZ3MpOwogCi0JCWtlcm5lbF9tbmFfdHJhcF9mYXVsdCgpOworCQlrZXJuZWxfbW5hX3RyYXBfZmF1bHQoMCk7CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCAqcmVnX2FkZHI7Ci0JCWludCBvcmlnX2FzaSwgYXNpLCBlcnI7CisJCWludCBlcnI7CiAKIAkJYWRkciA9IGNvbXB1dGVfZWZmZWN0aXZlX2FkZHJlc3MocmVncywgaW5zbiwKIAkJCQkJCSAoKGluc24gPj4gMjUpICYgMHgxZikpOwpAQCAtMzE1LDcgKzMzNCw2IEBACiAJCSAgICAgICByZWdzLT50cGMsIGRpcnN0cmluZ3NbZGlyXSwgYWRkciwgc2l6ZSwKIAkJICAgICAgIHJlZ3MtPnVfcmVnc1tVUkVHX1JFVFBDXSk7CiAjZW5kaWYKLQkJb3JpZ19hc2kgPSBhc2kgPSBkZWNvZGVfYXNpKGluc24sIHJlZ3MpOwogCQlzd2l0Y2ggKGFzaSkgewogCQljYXNlIEFTSV9OTDoKIAkJY2FzZSBBU0lfQUlVUEw6CkBAIC0zNjUsNyArMzgzLDcgQEAKIAkJCS8qIE5vdCByZWFjaGVkLi4uICovCiAJCX0KIAkJaWYgKHVubGlrZWx5KGVycikpCi0JCQlrZXJuZWxfbW5hX3RyYXBfZmF1bHQoKTsKKwkJCWtlcm5lbF9tbmFfdHJhcF9mYXVsdCgxKTsKIAkJZWxzZQogCQkJYWR2YW5jZShyZWdzKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3Zpc2VtdWwuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdmlzZW11bC5jCmluZGV4IDg0ZmVkYWEuLmMzZmQ2NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdmlzZW11bC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdmlzZW11bC5jCkBAIC0xMjgsOSArMTI4LDYgQEAKIC8qIDAwMTAwMTEwMCAtIFBlcm11dGUgYnl0ZXMgYXMgc3BlY2lmaWVkIGJ5IEdTUi5NQVNLICAqLwogI2RlZmluZSBCU0hVRkZMRV9PUEYJMHgwNGMKIAotI2RlZmluZSBWSVNfT1BDT0RFX01BU0sJKCgweDMgPDwgMzApIHwgKDB4M2YgPDwgMTkpKQotI2RlZmluZSBWSVNfT1BDT0RFX1ZBTAkoKDB4MiA8PCAzMCkgfCAoMHgzNiA8PCAxOSkpCi0KICNkZWZpbmUgVklTX09QRl9TSElGVAk1CiAjZGVmaW5lIFZJU19PUEZfTUFTSwkoMHgxZmYgPDwgVklTX09QRl9TSElGVCkKIApAQCAtODEwLDkgKzgwNyw2IEBACiAJaWYgKGdldF91c2VyKGluc24sICh1MzIgX191c2VyICopIHBjKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoKGluc24gJiBWSVNfT1BDT0RFX01BU0spICE9IFZJU19PUENPREVfVkFMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW9wZiA9IChpbnNuICYgVklTX09QRl9NQVNLKSA+PiBWSVNfT1BGX1NISUZUOwogCXN3aXRjaCAob3BmKSB7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMgYi9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jCmluZGV4IGE4ZTg4MDIuLjA1NDgyMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2luaXQuYwpAQCAtODcyLDYgKzg3MiwxMTUgQEAKIAlwcm9tX2hhbHQoKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHRyaW1fcGF2YWlsKHVuc2lnbmVkIGxvbmcgKmN1cl9zaXplX3AsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZW5kX29mX3BoeXNfcCkKK3sKKwl1bnNpZ25lZCBsb25nIHRvX3RyaW0gPSAqY3VyX3NpemVfcCAtIGNtZGxpbmVfbWVtb3J5X3NpemU7CisJdW5zaWduZWQgbG9uZyBhdm9pZF9zdGFydCwgYXZvaWRfZW5kOworCWludCBpOworCisJdG9fdHJpbSA9IFBBR0VfQUxJR04odG9fdHJpbSk7CisKKwlhdm9pZF9zdGFydCA9IGF2b2lkX2VuZCA9IDA7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJYXZvaWRfc3RhcnQgPSBpbml0cmRfc3RhcnQ7CisJYXZvaWRfZW5kID0gUEFHRV9BTElHTihpbml0cmRfZW5kKTsKKyNlbmRpZgorCisJLyogVHJpbSBzb21lIHBhdmFpbFtdIGVudHJpZXMgaW4gb3JkZXIgdG8gc2F0aXNmeSB0aGUKKwkgKiByZXF1ZXN0ZWQgIm1lbT14eHgiIGtlcm5lbCBjb21tYW5kIGxpbmUgc3BlY2lmaWNhdGlvbi4KKwkgKgorCSAqIFdlIG11c3Qgbm90IHRyaW0gb2ZmIHRoZSBrZXJuZWwgaW1hZ2UgYXJlYSBub3IgdGhlCisJICogaW5pdGlhbCByYW1kaXNrIHJhbmdlIChpZiBhbnkpLiAgQWxzbywgd2UgbXVzdCBub3QgdHJpbQorCSAqIGFueSBwYXZhaWxbXSBlbnRyeSBkb3duIHRvIHplcm8gaW4gb3JkZXIgdG8gcHJlc2VydmUKKwkgKiB0aGUgaW52YXJpYW50IHRoYXQgYWxsIHBhdmFpbFtdIGVudHJpZXMgaGF2ZSBhIG5vbi16ZXJvCisJICogc2l6ZSB3aGljaCBpcyBhc3N1bWVkIGJ5IGFsbCBvZiB0aGUgY29kZSBpbiBoZXJlLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwYXZhaWxfZW50czsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwga2Vybl9lbmQ7CisJCXVuc2lnbmVkIGxvbmcgdHJpbV9sb3csIHRyaW1faGlnaCwgbjsKKworCQlrZXJuX2VuZCA9IFBBR0VfQUxJR04oa2Vybl9iYXNlICsga2Vybl9zaXplKTsKKworCQl0cmltX2xvdyA9IHN0YXJ0ID0gcGF2YWlsW2ldLnBoeXNfYWRkcjsKKwkJdHJpbV9oaWdoID0gZW5kID0gc3RhcnQgKyBwYXZhaWxbaV0ucmVnX3NpemU7CisKKwkJaWYgKGtlcm5fYmFzZSA+PSBzdGFydCAmJgorCQkgICAga2Vybl9iYXNlIDwgZW5kKSB7CisJCQl0cmltX2xvdyA9IGtlcm5fYmFzZTsKKwkJCWlmIChrZXJuX2VuZCA+PSBlbmQpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKGtlcm5fZW5kID49IHN0YXJ0ICYmCisJCSAgICBrZXJuX2VuZCA8IGVuZCkgeworCQkJdHJpbV9oaWdoID0ga2Vybl9lbmQ7CisJCX0KKwkJaWYgKGF2b2lkX3N0YXJ0ICYmCisJCSAgICBhdm9pZF9zdGFydCA+PSBzdGFydCAmJgorCQkgICAgYXZvaWRfc3RhcnQgPCBlbmQpIHsKKwkJCWlmICh0cmltX2xvdyA+IGF2b2lkX3N0YXJ0KQorCQkJCXRyaW1fbG93ID0gYXZvaWRfc3RhcnQ7CisJCQlpZiAoYXZvaWRfZW5kID49IGVuZCkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYXZvaWRfZW5kICYmCisJCSAgICBhdm9pZF9lbmQgPj0gc3RhcnQgJiYKKwkJICAgIGF2b2lkX2VuZCA8IGVuZCkgeworCQkJaWYgKHRyaW1faGlnaCA8IGF2b2lkX2VuZCkKKwkJCQl0cmltX2hpZ2ggPSBhdm9pZF9lbmQ7CisJCX0KKworCQlpZiAodHJpbV9oaWdoIDw9IHRyaW1fbG93KQorCQkJY29udGludWU7CisKKwkJaWYgKHRyaW1fbG93ID09IHN0YXJ0ICYmIHRyaW1faGlnaCA9PSBlbmQpIHsKKwkJCS8qIFdob2xlIGNodW5rIGlzIGF2YWlsYWJsZSBmb3IgdHJpbW1pbmcuCisJCQkgKiBUcmltIGFsbCBleGNlcHQgb25lIHBhZ2UsIGluIG9yZGVyIHRvIGtlZXAKKwkJCSAqIGVudHJ5IG5vbi1lbXB0eS4KKwkJCSAqLworCQkJbiA9IChlbmQgLSBzdGFydCkgLSBQQUdFX1NJWkU7CisJCQlpZiAobiA+IHRvX3RyaW0pCisJCQkJbiA9IHRvX3RyaW07CisKKwkJCWlmIChuKSB7CisJCQkJcGF2YWlsW2ldLnBoeXNfYWRkciArPSBuOworCQkJCXBhdmFpbFtpXS5yZWdfc2l6ZSAtPSBuOworCQkJCXRvX3RyaW0gLT0gbjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW4gPSAodHJpbV9sb3cgLSBzdGFydCk7CisJCQlpZiAobiA+IHRvX3RyaW0pCisJCQkJbiA9IHRvX3RyaW07CisKKwkJCWlmIChuKSB7CisJCQkJcGF2YWlsW2ldLnBoeXNfYWRkciArPSBuOworCQkJCXBhdmFpbFtpXS5yZWdfc2l6ZSAtPSBuOworCQkJCXRvX3RyaW0gLT0gbjsKKwkJCX0KKwkJCWlmICh0b190cmltKSB7CisJCQkJbiA9IGVuZCAtIHRyaW1faGlnaDsKKwkJCQlpZiAobiA+IHRvX3RyaW0pCisJCQkJCW4gPSB0b190cmltOworCQkJCWlmIChuKSB7CisJCQkJCXBhdmFpbFtpXS5yZWdfc2l6ZSAtPSBuOworCQkJCQl0b190cmltIC09IG47CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKCF0b190cmltKQorCQkJYnJlYWs7CisJfQorCisJLyogUmVjYWxjdWxhdGUuICAqLworCSpjdXJfc2l6ZV9wID0gMFVMOworCWZvciAoaSA9IDA7IGkgPCBwYXZhaWxfZW50czsgaSsrKSB7CisJCSplbmRfb2ZfcGh5c19wID0gcGF2YWlsW2ldLnBoeXNfYWRkciArCisJCQlwYXZhaWxbaV0ucmVnX3NpemU7CisJCSpjdXJfc2l6ZV9wICs9IHBhdmFpbFtpXS5yZWdfc2l6ZTsKKwl9Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBib290bWVtX2luaXQodW5zaWduZWQgbG9uZyAqcGFnZXNfYXZhaWwsCiAJCQkJCSB1bnNpZ25lZCBsb25nIHBoeXNfYmFzZSkKIHsKQEAgLTg4OSwzMSArOTk4LDEzIEBACiAJCWVuZF9vZl9waHlzX21lbW9yeSA9IHBhdmFpbFtpXS5waHlzX2FkZHIgKwogCQkJcGF2YWlsW2ldLnJlZ19zaXplOwogCQlieXRlc19hdmFpbCArPSBwYXZhaWxbaV0ucmVnX3NpemU7Ci0JCWlmIChjbWRsaW5lX21lbW9yeV9zaXplKSB7Ci0JCQlpZiAoYnl0ZXNfYXZhaWwgPiBjbWRsaW5lX21lbW9yeV9zaXplKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBzbGFjayA9IGJ5dGVzX2F2YWlsIC0gY21kbGluZV9tZW1vcnlfc2l6ZTsKLQotCQkJCWJ5dGVzX2F2YWlsIC09IHNsYWNrOwotCQkJCWVuZF9vZl9waHlzX21lbW9yeSAtPSBzbGFjazsKLQotCQkJCXBhdmFpbFtpXS5yZWdfc2l6ZSAtPSBzbGFjazsKLQkJCQlpZiAoKGxvbmcpcGF2YWlsW2ldLnJlZ19zaXplIDw9IDBMKSB7Ci0JCQkJCXBhdmFpbFtpXS5waHlzX2FkZHIgPSAweGRlYWRiZWVmVUw7Ci0JCQkJCXBhdmFpbFtpXS5yZWdfc2l6ZSA9IDBVTDsKLQkJCQkJcGF2YWlsX2VudHMgPSBpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXBhdmFpbFtpKzFdLnJlZ19zaXplID0gMFVsOwotCQkJCQlwYXZhaWxbaSsxXS5waHlzX2FkZHIgPSAweGRlYWRiZWVmVUw7Ci0JCQkJCXBhdmFpbF9lbnRzID0gaSArIDE7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQl9CiAJfQogCi0JKnBhZ2VzX2F2YWlsID0gYnl0ZXNfYXZhaWwgPj4gUEFHRV9TSElGVDsKLQotCWVuZF9wZm4gPSBlbmRfb2ZfcGh5c19tZW1vcnkgPj4gUEFHRV9TSElGVDsKKwkvKiBEZXRlcm1pbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBpbml0aWFsIHJhbWRpc2sgYmVmb3JlIHRyeWluZworCSAqIHRvIGhvbm9yIHRoZSAibWVtPXh4eCIgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAgV2UgbXVzdCBrbm93CisJICogd2hlcmUgdGhlIGtlcm5lbCBpbWFnZSBhbmQgdGhlIHJhbWRpc2sgaW1hZ2UgYXJlIHNvIHRoYXQgd2UKKwkgKiBkbyBub3QgdHJpbSB0aG9zZSB0d28gYXJlYXMgZnJvbSB0aGUgcGh5c2ljYWwgbWVtb3J5IG1hcC4KKwkgKi8KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCS8qIE5vdyBoYXZlIHRvIGNoZWNrIGluaXRpYWwgcmFtZGlzaywgc28gdGhhdCBib290bWFwIGRvZXMgbm90IG92ZXJ3cml0ZSBpdCAqLwpAQCAtOTMyLDYgKzEwMjMsMTYgQEAKIAkJfQogCX0KICNlbmRpZgkKKworCWlmIChjbWRsaW5lX21lbW9yeV9zaXplICYmCisJICAgIGJ5dGVzX2F2YWlsID4gY21kbGluZV9tZW1vcnlfc2l6ZSkKKwkJdHJpbV9wYXZhaWwoJmJ5dGVzX2F2YWlsLAorCQkJICAgICZlbmRfb2ZfcGh5c19tZW1vcnkpOworCisJKnBhZ2VzX2F2YWlsID0gYnl0ZXNfYXZhaWwgPj4gUEFHRV9TSElGVDsKKworCWVuZF9wZm4gPSBlbmRfb2ZfcGh5c19tZW1vcnkgPj4gUEFHRV9TSElGVDsKKwogCS8qIEluaXRpYWxpemUgdGhlIGJvb3QtdGltZSBhbGxvY2F0b3IuICovCiAJbWF4X3BmbiA9IG1heF9sb3dfcGZuID0gZW5kX3BmbjsKIAltaW5fbG93X3BmbiA9IChwaHlzX2Jhc2UgPj4gUEFHRV9TSElGVCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vdWx0cmEuUyBiL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TCmluZGV4IGQ3MGI2MGEuLjczN2MyNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TCisrKyBiL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TCkBAIC00NzcsNiArNDc3LDEwIEBACiAJc2V0aGkJCSVoaSgxMDlmKSwgJWc3CiAJYixwdAkJJXhjYywgZXRyYXBfaXJxCiAxMDk6CSBvcgkJJWc3LCAlbG8oMTA5YiksICVnNworI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWNhbGwJCXRyYWNlX2hhcmRpcnFzX29mZgorCSBub3AKKyNlbmRpZgogCWNhbGwJCXNtcF9zeW5jaHJvbml6ZV90aWNrX2NsaWVudAogCSBub3AKIAljbHIJCSVsNgpAQCAtNTA4LDYgKzUxMiwxMCBAQAogCXNldGhpCQklaGkoMTA5ZiksICVnNwogCWIscHQJCSV4Y2MsIGV0cmFwX2lycQogMTA5Ogkgb3IJCSVnNywgJWxvKDEwOWIpLCAlZzcKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwljYWxsCQl0cmFjZV9oYXJkaXJxc19vZmYKKwkgbm9wCisjZW5kaWYKIAljYWxsCQlfX3Nob3dfcmVncwogCSBhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8wCiAJY2xyCQklbDYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2ZzLmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9mcy5jCmluZGV4IDEyYTk0MGMuLjYxYmU1OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2ZzLmMKKysrIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvZnMuYwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJZXJyb3IgPSAtRUJBREY7CiAJZmlsZSA9IGZnZXQoZmQpOwogCWlmIChmaWxlKSB7Ci0JCWVycm9yID0gcmVwb3J0X3N0YXR2ZnMoZmlsZS0+Zl92ZnNtbnQsIGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBidWYpOworCQllcnJvciA9IHJlcG9ydF9zdGF0dmZzKGZpbGUtPmZfcGF0aC5tbnQsIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGJ1Zik7CiAJCWZwdXQoZmlsZSk7CiAJfQogCkBAIC00ODEsNyArNDgxLDcgQEAKIAlmaWxlID0gZmdldChmZCk7CiAJaWYgKGZpbGUpIHsKIAkJbG9ja19rZXJuZWwoKTsKLQkJZXJyb3IgPSByZXBvcnRfc3RhdHZmczY0KGZpbGUtPmZfdmZzbW50LCBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgYnVmKTsKKwkJZXJyb3IgPSByZXBvcnRfc3RhdHZmczY0KGZpbGUtPmZfcGF0aC5tbnQsIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGJ1Zik7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJZnB1dChmaWxlKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9pb2N0bC5jIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvaW9jdGwuYwppbmRleCBiZTBhMDU0Li4zMzA3NDNjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9pb2N0bC5jCisrKyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2lvY3RsLmMKQEAgLTI5OSw4ICsyOTksOCBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlmZHQgPSBmaWxlc19mZHRhYmxlKGN1cnJlbnQtPmZpbGVzKTsKIAlpZiAoISBmZHQtPmZkW2ZkXSB8fAotCSAgICAhIGZkdC0+ZmRbZmRdLT5mX2RlbnRyeSB8fAotCSAgICAhIChpbm8gPSBmZHQtPmZkW2ZkXS0+Zl9kZW50cnktPmRfaW5vZGUpIHx8CisJICAgICEgZmR0LT5mZFtmZF0tPmZfcGF0aC5kZW50cnkgfHwKKwkgICAgISAoaW5vID0gZmR0LT5mZFtmZF0tPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpIHx8CiAJICAgICEgU19JU1NPQ0soaW5vLT5pX21vZGUpKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gVEJBREY7CkBAIC00ODAsNyArNDgwLDcgQEAKICAgICAgICAgc3RydWN0IHNvbF9zb2NrZXRfc3RydWN0ICpzb2NrOwogICAgICAgICBzdHJ1Y3QgbW9kdWxlX2luZm8gKm1pOwogCi0gICAgICAgIGlubyA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworICAgICAgICBpbm8gPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogICAgICAgICBpZiAoIVNfSVNTT0NLKGluby0+aV9tb2RlKSkKIAkJcmV0dXJuIC1FQkFERjsKICAgICAgICAgc29jayA9IGZpbHAtPnByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL21pc2MuYyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL21pc2MuYwppbmRleCA5ZWQ5OTc5Li5iY2ExNmU4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMKKysrIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJCWlmICghZmlsZSkKIAkJCWdvdG8gb3V0OwogCQllbHNlIHsKLQkJCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJCQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJCQlpZihpbWFqb3IoaW5vZGUpID09IE1FTV9NQUpPUiAmJgogCQkJICAgaW1pbm9yKGlub2RlKSA9PSA1KSB7CiAJCQkJZmxhZ3MgfD0gTUFQX0FOT05ZTU9VUzsKQEAgLTQyMyw5ICs0MjMsNyBAQAogCQkJICAgU29sYXJpcyBzZXRwZ3JwIGFuZCBzZXRzaWQ/ICovCiAJCQlyZXQgPSBzeXNfc2V0cGdpZCgwLCAwKTsKIAkJCWlmIChyZXQpIHJldHVybiByZXQ7Ci0JCQltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwotCQkJY3VycmVudC0+c2lnbmFsLT50dHkgPSBOVUxMOwotCQkJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOworCQkJcHJvY19jbGVhcl90dHkoY3VycmVudCk7CiAJCQlyZXR1cm4gcHJvY2Vzc19ncm91cChjdXJyZW50KTsKIAkJfQogCWNhc2UgMjogLyogZ2V0c2lkICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2Nrc3lzLmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9zb2Nrc3lzLmMKaW5kZXggN2M5MGU0MS4uODlhNDc1NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvc29ja3N5cy5jCisrKyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3NvY2tzeXMuYwpAQCAtOTYsMTMgKzk2LDEzIEBACiAJICogTm8gc2hpdC4gIFdURiBpcyBpdCBzdXBwb3NlZCB0byBkbywgYW55d2F5PwogCSAqCiAJICogVHJ5IGluc3RlYWQ6Ci0JICogZF9kZWxldGUoZmlscC0+Zl9kZW50cnkpLCB0aGVuIGRfaW5zdGFudGlhdGUgd2l0aCBzb2NrIGlub2RlCisJICogZF9kZWxldGUoZmlscC0+Zl9wYXRoLmRlbnRyeSksIHRoZW4gZF9pbnN0YW50aWF0ZSB3aXRoIHNvY2sgaW5vZGUKIAkgKi8KLQlkZW50cnkgPSBmaWxwLT5mX2RlbnRyeTsKLQlmaWxwLT5mX2RlbnRyeSA9IGRnZXQoZmNoZWNrKGZkKS0+Zl9kZW50cnkpOwotCWZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYgPSBpbm9kZS0+aV9yZGV2OwotCWZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2Zsb2NrID0gaW5vZGUtPmlfZmxvY2s7Ci0JU09DS0VUX0koZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpLT5maWxlID0gZmlscDsKKwlkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OworCWZpbHAtPmZfcGF0aC5kZW50cnkgPSBkZ2V0KGZjaGVjayhmZCktPmZfcGF0aC5kZW50cnkpOworCWZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfcmRldiA9IGlub2RlLT5pX3JkZXY7CisJZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9mbG9jayA9IGlub2RlLT5pX2Zsb2NrOworCVNPQ0tFVF9JKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5maWxlID0gZmlscDsKIAlmaWxwLT5mX29wID0gJnNvY2tzeXNfZmlsZV9vcHM7CiAgICAgICAgIHNvY2sgPSAoc3RydWN0IHNvbF9zb2NrZXRfc3RydWN0KikgCiAgICAgICAgIAlteWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2xfc29ja2V0X3N0cnVjdCksIEdGUF9LRVJORUwpOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJc3RydWN0IGlub2RlICppbm87CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCi0JaW5vPWZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCWlubz1maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWlmIChpbm8gJiYgU19JU1NPQ0soaW5vLT5pX21vZGUpKSB7CiAJCXN0cnVjdCBzb2xfc29ja2V0X3N0cnVjdCAqc29jazsKIAkJc29jayA9IChzdHJ1Y3Qgc29sX3NvY2tldF9zdHJ1Y3QqKWZpbHAtPnByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3RpbW9kLmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy90aW1vZC5jCmluZGV4IGI4NGU1NDUuLmE5ZDMyY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL3RpbW9kLmMKKysrIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvdGltb2QuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIAlTT0xEKCJ3YWtlaW5nIHNvY2tldCIpOwogCWZkdCA9IGZpbGVzX2ZkdGFibGUoY3VycmVudC0+ZmlsZXMpOwotCXNvY2sgPSBTT0NLRVRfSShmZHQtPmZkW2ZkXS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXNvY2sgPSBTT0NLRVRfSShmZHQtPmZkW2ZkXS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzb2NrLT53YWl0KTsKIAlyZWFkX2xvY2soJnNvY2stPnNrLT5za19jYWxsYmFja19sb2NrKTsKIAlpZiAoc29jay0+ZmFzeW5jX2xpc3QgJiYgIXRlc3RfYml0KFNPQ0tfQVNZTkNfV0FJVERBVEEsICZzb2NrLT5mbGFncykpCkBAIC0zNjEsNyArMzYxLDcgQEAKIAogCWZkdCA9IGZpbGVzX2ZkdGFibGUoY3VycmVudC0+ZmlsZXMpOwogCWZpbHAgPSBmZHQtPmZkW2ZkXTsKLQlpbm8gPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm8gPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXNvY2sgPSAoc3RydWN0IHNvbF9zb2NrZXRfc3RydWN0ICopZmlscC0+cHJpdmF0ZV9kYXRhOwogCVNPTEQoImVudHJ5Iik7CiAJaWYgKGdldF91c2VyKHJldCwgKGludCBfX3VzZXIgKilBKGN0bF9idWYpKSkKQEAgLTY0NCw3ICs2NDQsNyBAQAogCVNPTEREKCgiJXUgJXAgJWQgJXAgJXAgJWQgJXAgJWRcbiIsIGZkLCBjdGxfYnVmLCBjdGxfbWF4bGVuLCBjdGxfbGVuLCBkYXRhX2J1ZiwgZGF0YV9tYXhsZW4sIGRhdGFfbGVuLCAqZmxhZ3NfcCkpOwogCWZkdCA9IGZpbGVzX2ZkdGFibGUoY3VycmVudC0+ZmlsZXMpOwogCWZpbHAgPSBmZHQtPmZkW2ZkXTsKLQlpbm8gPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm8gPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXNvY2sgPSAoc3RydWN0IHNvbF9zb2NrZXRfc3RydWN0ICopZmlscC0+cHJpdmF0ZV9kYXRhOwogCVNPTEREKCgiJXAgJXBcbiIsIHNvY2stPnBmaXJzdCwgc29jay0+cGZpcnN0ID8gc29jay0+cGZpcnN0LT5uZXh0IDogTlVMTCkpOwogCWlmICggY3RsX21heGxlbiA+IDAgJiYgIXNvY2stPnBmaXJzdCAmJiBTT0NLRVRfSShpbm8pLT50eXBlID09IFNPQ0tfU1RSRUFNCkBAIC04NjUsNyArODY1LDcgQEAKIAlmaWxwID0gZmR0LT5mZFtmZF07CiAJaWYoIWZpbHApIGdvdG8gb3V0OwogCi0JaW5vID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJaW5vID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpZiAoIWlubyB8fCAhU19JU1NPQ0soaW5vLT5pX21vZGUpKQogCQlnb3RvIG91dDsKIApAQCAtOTMzLDcgKzkzMyw3IEBACiAJZmlscCA9IGZkdC0+ZmRbZmRdOwogCWlmKCFmaWxwKSBnb3RvIG91dDsKIAotCWlubyA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCWlubyA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKCFpbm8pIGdvdG8gb3V0OwogCiAJaWYgKCFTX0lTU09DSyhpbm8tPmlfbW9kZSkgJiYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZwppbmRleCA1YWMxZjI5Li5kMzJhODBlIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcKKysrIGIvYXJjaC91bS9LY29uZmlnCkBAIC00Nyw2ICs0NywxMSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfQlVHCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQlVHCisKICMgVXNlZCBpbiBrZXJuZWwvaXJxL21hbmFnZS5jIGFuZCBpbmNsdWRlL2xpbnV4L2lycS5oCiBjb25maWcgSVJRX1JFTEVBU0VfTUVUSE9ECiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLmkzODYgYi9hcmNoL3VtL0tjb25maWcuaTM4NgppbmRleCBmMTkxYTU1Li5kNmNmZmIyIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcuaTM4NgorKysgYi9hcmNoL3VtL0tjb25maWcuaTM4NgpAQCAtMTksMzEgKzE5LDMxIEBACiBjaG9pY2UKIAlwcm9tcHQgIkhvc3QgbWVtb3J5IHNwbGl0IgogCWRlZmF1bHQgSE9TVF9WTVNQTElUXzNHCi0JLS0taGVscC0tLQotCSAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlIGhvc3Qga2VybmVsIG9uIHdoaWNoIHlvdSBydW4gaGFzIGEgbm9uLWRlZmF1bHQKLQkgICAobGlrZSAyRy8yRykgbWVtb3J5IHNwbGl0LCBpbnN0ZWFkIG9mIHRoZSBjdXN0b21hcnkgM0cvMUcuIElmIHlvdSBkaWQKLQkgICBub3QgcmVjb21waWxlIHlvdXIgb3duIGtlcm5lbCBidXQgdXNlIHRoZSBkZWZhdWx0IGRpc3RybydzIG9uZSwgeW91IGNhbgotCSAgIHNhZmVseSBhY2NlcHQgdGhlICJEZWZhdWx0IHNwbGl0IiBvcHRpb24uCisJaGVscAorICAgICAgICBUaGlzIGlzIG5lZWRlZCB3aGVuIHRoZSBob3N0IGtlcm5lbCBvbiB3aGljaCB5b3UgcnVuIGhhcyBhIG5vbi1kZWZhdWx0CisJKGxpa2UgMkcvMkcpIG1lbW9yeSBzcGxpdCwgaW5zdGVhZCBvZiB0aGUgY3VzdG9tYXJ5IDNHLzFHLiBJZiB5b3UgZGlkCisJbm90IHJlY29tcGlsZSB5b3VyIG93biBrZXJuZWwgYnV0IHVzZSB0aGUgZGVmYXVsdCBkaXN0cm8ncyBvbmUsIHlvdSBjYW4KKwlzYWZlbHkgYWNjZXB0IHRoZSAiRGVmYXVsdCBzcGxpdCIgb3B0aW9uLgogCi0JICAgSXQgY2FuIGJlIGVuYWJsZWQgb24gcmVjZW50ICg+PTIuNi4xNi1yYzIpIHZhbmlsbGEga2VybmVscyB2aWEKLQkgICBDT05GSUdfVk1fU1BMSVRfKiwgb3Igb24gcHJldmlvdXMga2VybmVscyB3aXRoIHNwZWNpYWwgcGF0Y2hlcyAoLWNrCi0JICAgcGF0Y2hzZXQgYnkgQ29uIEtvbGl2YXMsIG9yIG90aGVyIG9uZXMpIC0gb3B0aW9uIG5hbWVzIG1hdGNoIGNsb3NlbHkgdGhlCi0JICAgaG9zdCBDT05GSUdfVk1fU1BMSVRfKiBvbmVzLgorCUl0IGNhbiBiZSBlbmFibGVkIG9uIHJlY2VudCAoPj0yLjYuMTYtcmMyKSB2YW5pbGxhIGtlcm5lbHMgdmlhCisJQ09ORklHX1ZNX1NQTElUXyosIG9yIG9uIHByZXZpb3VzIGtlcm5lbHMgd2l0aCBzcGVjaWFsIHBhdGNoZXMgKC1jaworCXBhdGNoc2V0IGJ5IENvbiBLb2xpdmFzLCBvciBvdGhlciBvbmVzKSAtIG9wdGlvbiBuYW1lcyBtYXRjaCBjbG9zZWx5IHRoZQorCWhvc3QgQ09ORklHX1ZNX1NQTElUXyogb25lcy4KIAotCSAgIEEgbG93ZXIgc2V0dGluZyAod2hlcmUgMUcvM0cgaXMgbG93ZXN0IGFuZCAzRy8xRyBpcyBoaWdoZXIpIHdpbGwKLQkgICB0b2xlcmF0ZSBldmVuIG1vcmUgIm5vcm1hbCIgaG9zdCBrZXJuZWxzLCBidXQgYW4gaGlnaGVyIHNldHRpbmcgd2lsbCBiZQotCSAgIHN0cmljdGVyLgorCUEgbG93ZXIgc2V0dGluZyAod2hlcmUgMUcvM0cgaXMgbG93ZXN0IGFuZCAzRy8xRyBpcyBoaWdoZXIpIHdpbGwKKwl0b2xlcmF0ZSBldmVuIG1vcmUgIm5vcm1hbCIgaG9zdCBrZXJuZWxzLCBidXQgYW4gaGlnaGVyIHNldHRpbmcgd2lsbCBiZQorCXN0cmljdGVyLgogCi0JICAgU28sIGlmIHlvdSBkbyBub3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSAnRGVmYXVsdCBzcGxpdCcuCisJU28sIGlmIHlvdSBkbyBub3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSAnRGVmYXVsdCBzcGxpdCcuCiAKLQljb25maWcgSE9TVF9WTVNQTElUXzNHCi0JCWJvb2wgIkRlZmF1bHQgc3BsaXQgKDNHLzFHIHVzZXIva2VybmVsIGhvc3Qgc3BsaXQpIgotCWNvbmZpZyBIT1NUX1ZNU1BMSVRfM0dfT1BUCi0JCWJvb2wgIjNHLzFHIHVzZXIva2VybmVsIGhvc3Qgc3BsaXQgKGZvciBmdWxsIDFHIGxvdyBtZW1vcnkpIgotCWNvbmZpZyBIT1NUX1ZNU1BMSVRfMkcKLQkJYm9vbCAiMkcvMkcgdXNlci9rZXJuZWwgaG9zdCBzcGxpdCIKLQljb25maWcgSE9TVF9WTVNQTElUXzFHCi0JCWJvb2wgIjFHLzNHIHVzZXIva2VybmVsIGhvc3Qgc3BsaXQiCitjb25maWcgSE9TVF9WTVNQTElUXzNHCisJYm9vbCAiRGVmYXVsdCBzcGxpdCAoM0cvMUcgdXNlci9rZXJuZWwgaG9zdCBzcGxpdCkiCitjb25maWcgSE9TVF9WTVNQTElUXzNHX09QVAorCWJvb2wgIjNHLzFHIHVzZXIva2VybmVsIGhvc3Qgc3BsaXQgKGZvciBmdWxsIDFHIGxvdyBtZW1vcnkpIgorY29uZmlnIEhPU1RfVk1TUExJVF8yRworCWJvb2wgIjJHLzJHIHVzZXIva2VybmVsIGhvc3Qgc3BsaXQiCitjb25maWcgSE9TVF9WTVNQTElUXzFHCisJYm9vbCAiMUcvM0cgdXNlci9rZXJuZWwgaG9zdCBzcGxpdCIKIGVuZGNob2ljZQogCiBjb25maWcgVE9QX0FERFIKQEAgLTY3LDEzICs2NywxMyBAQAogCiBjb25maWcgU1RVQl9DT0RFCiAJaGV4Ci0JZGVmYXVsdCAweGJmZmZlMDAwIGlmICFIT1NUXzJHXzJHCi0JZGVmYXVsdCAweDdmZmZlMDAwIGlmIEhPU1RfMkdfMkcKKwlkZWZhdWx0IDB4YmZmZmUwMDAgaWYgIUhPU1RfVk1TUExJVF8yRworCWRlZmF1bHQgMHg3ZmZmZTAwMCBpZiBIT1NUX1ZNU1BMSVRfMkcKIAogY29uZmlnIFNUVUJfREFUQQogCWhleAotCWRlZmF1bHQgMHhiZmZmZjAwMCBpZiAhSE9TVF8yR18yRwotCWRlZmF1bHQgMHg3ZmZmZjAwMCBpZiBIT1NUXzJHXzJHCisJZGVmYXVsdCAweGJmZmZmMDAwIGlmICFIT1NUX1ZNU1BMSVRfMkcKKwlkZWZhdWx0IDB4N2ZmZmYwMDAgaWYgSE9TVF9WTVNQTElUXzJHCiAKIGNvbmZpZyBTVFVCX1NUQVJUCiAJaGV4CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwppbmRleCBhYTMwOTBkLi44MzMwMWUxIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgbGluZV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCkKK3ZvaWQgbGluZV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpCiB7CiAJLyogbm90aGluZyAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwppbmRleCAyODZiYzBiLi5hZmUzZDQyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwpAQCAtNzIsOSArNzIsMTEgQEAKIAlyZXR1cm4gcGt0X2xlbjsKIH0KIAotc3RhdGljIHZvaWQgdW1sX2Rldl9jbG9zZSh2b2lkKiBkZXYpCitzdGF0aWMgdm9pZCB1bWxfZGV2X2Nsb3NlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlkZXZfY2xvc2UoIChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXYpOworCXN0cnVjdCB1bWxfbmV0X3ByaXZhdGUgKmxwID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1bWxfbmV0X3ByaXZhdGUsIHdvcmspOworCWRldl9jbG9zZShscC0+ZGV2KTsKIH0KIAogaXJxcmV0dXJuX3QgdW1sX25ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtODksNyArOTEsNiBAQAogCXNwaW5fbG9jaygmbHAtPmxvY2spOwogCXdoaWxlKChlcnIgPSB1bWxfbmV0X3J4KGRldikpID4gMCkgOwogCWlmKGVyciA8IDApIHsKLQkJREVDTEFSRV9XT1JLKGNsb3NlX3dvcmssIHVtbF9kZXZfY2xvc2UsIGRldik7CiAJCXByaW50ayhLRVJOX0VSUiAKIAkJICAgICAgICJEZXZpY2UgJyVzJyByZWFkIHJldHVybmVkICVkLCBzaHV0dGluZyBpdCBkb3duXG4iLCAKIAkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKQEAgLTk3LDkgKzk4LDEwIEBACiAJCSAqIGFnYWluIGxwLT5sb2NrLgogCQkgKiBBbmQgZGV2X2Nsb3NlKCkgY2FuIGJlIHNhZmVseSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgb24gdGhlCiAJCSAqIHNhbWUgZGV2aWNlLCBzaW5jZSBpdCB0ZXN0cyBmb3IgKGRldi0+ZmxhZ3MgJiBJRkZfVVApLiBTbwotCQkgKiB0aGVyZSdzIG5vIGhhcm0gaW4gZGVsYXlpbmcgdGhlIGRldmljZSBzaHV0ZG93bi4gKi8KLQkJc2NoZWR1bGVfd29yaygmY2xvc2Vfd29yayk7Ci0jZXJyb3IgdGhpcyBpcyBub3QgcGVybWl0dGVkIC0gY2xvc2Vfd29yayB3aWxsIGdvIG91dCBvZiBzY29wZQorCQkgKiB0aGVyZSdzIG5vIGhhcm0gaW4gZGVsYXlpbmcgdGhlIGRldmljZSBzaHV0ZG93bi4KKwkJICogRnVydGhlcm1vcmUsIHRoZSB3b3JrcXVldWUgd2lsbCBub3QgcmUtZW5xdWV1ZSBhbiBhbHJlYWR5CisJCSAqIGVucXVldWVkIHdvcmsgaXRlbS4gKi8KKwkJc2NoZWR1bGVfd29yaygmbHAtPndvcmspOwogCQlnb3RvIG91dDsKIAl9CiAJcmVhY3RpdmF0ZV9mZChscC0+ZmQsIFVNX0VUSF9JUlEpOwpAQCAtMzM0LDEzICszMzYsMTIgQEAKIAlzaXplID0gdHJhbnNwb3J0LT5wcml2YXRlX3NpemUgKyBzaXplb2Yoc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSkgKyAKIAkJc2l6ZW9mKCgoc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSAqKSAwKS0+dXNlcik7CiAKLQlkZXZpY2UgPSBrbWFsbG9jKHNpemVvZigqZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJZGV2aWNlID0ga3phbGxvYyhzaXplb2YoKmRldmljZSksIEdGUF9LRVJORUwpOwogCWlmIChkZXZpY2UgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImV0aF9jb25maWd1cmUgZmFpbGVkIHRvIGFsbG9jYXRlIHVtbF9uZXRcbiIpOwogCQlyZXR1cm4oMSk7CiAJfQogCi0JbWVtc2V0KGRldmljZSwgMCwgc2l6ZW9mKCpkZXZpY2UpKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2aWNlLT5saXN0KTsKIAlkZXZpY2UtPmluZGV4ID0gbjsKIApAQCAtMzY2LDYgKzM2Nyw3IEBACiAJLyogVGhpcyBwb2ludHMgdG8gdGhlIHRyYW5zcG9ydCBwcml2YXRlIGRhdGEuIEl0J3Mgc3RpbGwgY2xlYXIsIGJ1dCB3ZQogCSAqIG11c3QgbWVtc2V0IGl0IHRvIDAgKm5vdyouIExldCdzIGhlbHAgdGhlIGRyaXZlcnMuICovCiAJbWVtc2V0KGxwLCAwLCBzaXplKTsKKwlJTklUX1dPUksoJmxwLT53b3JrLCB1bWxfZGV2X2Nsb3NlKTsKIAogCS8qIHN5c2ZzIHJlZ2lzdGVyICovCiAJaWYgKCFkcml2ZXJfcmVnaXN0ZXJlZCkgewpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2xpbmUuaCBiL2FyY2gvdW0vaW5jbHVkZS9saW5lLmgKaW5kZXggMjE0ZWU3Ni4uNWYyMzJhZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2xpbmUuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvbGluZS5oCkBAIC03Niw3ICs3Niw3IEBACiBleHRlcm4gaW50IGxpbmVfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkgICAgICBpbnQgbGVuKTsKIGV4dGVybiB2b2lkIGxpbmVfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7Ci1leHRlcm4gdm9pZCBsaW5lX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKK2V4dGVybiB2b2lkIGxpbmVfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkKTsKIGV4dGVybiBpbnQgbGluZV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gdm9pZCBsaW5lX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIGxpbmVfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvbmV0X2tlcm4uaCBiL2FyY2gvdW0vaW5jbHVkZS9uZXRfa2Vybi5oCmluZGV4IDI4MDQ1OWYuLjIxOGY4YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9uZXRfa2Vybi5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9uZXRfa2Vybi5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiBzdHJ1Y3QgdW1sX25ldCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMjYsNiArMjcsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGw7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJaW50IGZkOwogCXVuc2lnbmVkIGNoYXIgbWFjW0VUSF9BTEVOXTsKIAl1bnNpZ25lZCBzaG9ydCAoKnByb3RvY29sKShzdHJ1Y3Qgc2tfYnVmZiAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2V4ZWMuYyBiL2FyY2gvdW0va2VybmVsL2V4ZWMuYwppbmRleCAwNTYxYzQzLi44ZDU2ZWM2IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9leGVjLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvZXhlYy5jCkBAIC0zOSwxMiArMzksMTMgQEAKIAkJICAgIGNoYXIgX191c2VyICpfX3VzZXIgKmVudikKIHsKICAgICAgICAgbG9uZyBlcnJvcjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAjaWZkZWYgQ09ORklHX1RUWV9MT0cKIAltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwotCXRhc2tfbG9jayhjdXJyZW50KTsJLyogRklYTUU6ICBpcyB0aGlzIG5lZWRlZCA/ICovCi0JbG9nX2V4ZWMoYXJndiwgY3VycmVudC0+c2lnbmFsLT50dHkpOwotCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCXR0eSA9IGdldF9jdXJyZW50X3R0eSgpOworCWlmICh0dHkpCisJCWxvZ19leGVjKGFyZ3YsIHR0eSk7CiAJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogI2VuZGlmCiAgICAgICAgIGVycm9yID0gZG9fZXhlY3ZlKGZpbGUsIGFyZ3YsIGVudiwgJmN1cnJlbnQtPnRocmVhZC5yZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCmluZGV4IDBlMzJhZGYuLjA5ODcyMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLW9iai15ID0gYnVncy5vIGNoZWNrc3VtLm8gZGVsYXkubyBmYXVsdC5vIGtzeW1zLm8gbGR0Lm8gcHRyYWNlLm8gXAorb2JqLXkgPSBidWcubyBidWdzLm8gY2hlY2tzdW0ubyBkZWxheS5vIGZhdWx0Lm8ga3N5bXMubyBsZHQubyBwdHJhY2UubyBcCiAJcHRyYWNlX3VzZXIubyBzZXRqbXAubyBzaWduYWwubyBzaWdjb250ZXh0Lm8gc3lzY2FsbHMubyBzeXNycS5vIFwKIAlzeXNfY2FsbF90YWJsZS5vIHRscy5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvYnVnLmMgYi9hcmNoL3VtL3N5cy1pMzg2L2J1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMGM4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L2J1Zy5jCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmVmZiBEaWtlIChqZGlrZUBhZGR0b2l0LmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgVjIKKyAqLworCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisvKiBNb3N0bHkgY29waWVkIGZyb20gaTM4Ni94ODZfODYgLSBlbGltaW5hdGVkIHRoZSBlaXAgPCBQQUdFX09GRlNFVCBiZWNhdXNlCisgKiB0aGF0J3Mgbm90IHJlbGV2ZW50IGluIHNrYXMgbW9kZS4KKyAqLworCitpbnQgaXNfdmFsaWRfYnVnYWRkcih1bnNpZ25lZCBsb25nIGVpcCkKK3sKKwl1bnNpZ25lZCBzaG9ydCB1ZDI7CisKKwlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoKHVuc2lnbmVkIHNob3J0IF9fdXNlciAqKWVpcCwgdWQyKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdWQyID09IDB4MGIwZjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvbGR0LmMgYi9hcmNoL3VtL3N5cy1pMzg2L2xkdC5jCmluZGV4IDQ5MDU3ZDguLjVkYjc3MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvbGR0LmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9sZHQuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJc3RydWN0IHB0cmFjZV9sZHQgcHRyYWNlX2xkdCA9IChzdHJ1Y3QgcHRyYWNlX2xkdCkgewogCQkJLmZ1bmMgPSAwLAogCQkJLmJ5dGVjb3VudCA9IGJ5dGVjb3VudCwKLQkJCS5wdHIgPSAodm9pZCAqKWttYWxsb2MoYnl0ZWNvdW50LCBHRlBfS0VSTkVMKX07CisJCQkucHRyID0ga21hbGxvYyhieXRlY291bnQsIEdGUF9LRVJORUwpfTsKIAl1MzIgY3B1OwogCiAJaWYocHRyYWNlX2xkdC5wdHIgPT0gTlVMTCkKQEAgLTQyNiw3ICs0MjYsNyBAQAogCQlob3N0X2xkdF9lbnRyaWVzID0gZHVtbXlfbGlzdDsKIAllbHNlIHsKIAkJc2l6ZSA9IChzaXplICsgMSkgKiBzaXplb2YoZHVtbXlfbGlzdFswXSk7Ci0JCWhvc3RfbGR0X2VudHJpZXMgPSAoc2hvcnQgKilrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlob3N0X2xkdF9lbnRyaWVzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYoaG9zdF9sZHRfZW50cmllcyA9PSBOVUxMKSB7CiAJCQlwcmludGsoImxkdF9nZXRfaG9zdF9pbmZvOiBjb3VsZG4ndCBhbGxvY2F0ZSBob3N0IGxkdCBsaXN0XG4iKTsKIAkJCWdvdG8gb3V0X2ZyZWU7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwppbmRleCAwNzA5ZmM2Li4zZjZhY2Q2IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKQEAgLTIxOSw3ICsyMTksOCBAQAogCXVuc2lnbmVkIGxvbmcgc2F2ZV9zcCA9IFBUX1JFR1NfU1AocmVncyk7CiAJaW50IGVyciA9IDA7CiAKLQlzdGFja190b3AgJj0gLThVTDsKKwkvKiBUaGlzIGlzIHRoZSBzYW1lIGNhbGN1bGF0aW9uIGFzIGkzODYgLSAoKHNwICsgNCkgJiAxNSkgPT0gMCAqLworCXN0YWNrX3RvcCA9ICgoc3RhY2tfdG9wICsgNCkgJiAtMTZVTCkgLSA0OwogCWZyYW1lID0gKHN0cnVjdCBzaWdmcmFtZSBfX3VzZXIgKikgc3RhY2tfdG9wIC0gMTsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlIGIvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCmluZGV4IGY0MTc2OGIuLjRkOWU1ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKICMKIAotb2JqLXkgPSBidWdzLm8gZGVsYXkubyBmYXVsdC5vIGxkdC5vIG1lbS5vIHB0cmFjZS5vIHB0cmFjZV91c2VyLm8gXAorb2JqLXkgPSBidWcubyBidWdzLm8gZGVsYXkubyBmYXVsdC5vIGxkdC5vIG1lbS5vIHB0cmFjZS5vIHB0cmFjZV91c2VyLm8gXAogCXNldGptcC5vIHNpZ2NvbnRleHQubyBzaWduYWwubyBzeXNjYWxscy5vIHN5c2NhbGxfdGFibGUubyBzeXNycS5vIFwKIAlrc3ltcy5vIHRscy5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9idWcuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9idWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBjOGJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L2J1Zy5jCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmVmZiBEaWtlIChqZGlrZUBhZGR0b2l0LmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgVjIKKyAqLworCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisvKiBNb3N0bHkgY29waWVkIGZyb20gaTM4Ni94ODZfODYgLSBlbGltaW5hdGVkIHRoZSBlaXAgPCBQQUdFX09GRlNFVCBiZWNhdXNlCisgKiB0aGF0J3Mgbm90IHJlbGV2ZW50IGluIHNrYXMgbW9kZS4KKyAqLworCitpbnQgaXNfdmFsaWRfYnVnYWRkcih1bnNpZ25lZCBsb25nIGVpcCkKK3sKKwl1bnNpZ25lZCBzaG9ydCB1ZDI7CisKKwlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoKHVuc2lnbmVkIHNob3J0IF9fdXNlciAqKWVpcCwgdWQyKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdWQyID09IDB4MGIwZjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zaWduYWwuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zaWduYWwuYwppbmRleCA5ZWRmMTE0Li5hZjJmMDE3IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvc2lnbmFsLmMKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3NpZ25hbC5jCkBAIC0xOTEsOCArMTkxLDkgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDsKIAogCWZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKikKLQkJcm91bmRfZG93bihzdGFja190b3AgLSBzaXplb2Yoc3RydWN0IHJ0X3NpZ2ZyYW1lKSwgMTYpIC0gODsKLSAgICAgICAgZnJhbWUgPSAoc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqKSAoKHVuc2lnbmVkIGxvbmcpIGZyYW1lIC0gMTI4KTsKKwkJcm91bmRfZG93bihzdGFja190b3AgLSBzaXplb2Yoc3RydWN0IHJ0X3NpZ2ZyYW1lKSwgMTYpOworCS8qIFN1YnRyYWN0IDEyOCBmb3IgYSByZWQgem9uZSBhbmQgOCBmb3IgcHJvcGVyIGFsaWdubWVudCAqLworICAgICAgICBmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICopICgodW5zaWduZWQgbG9uZykgZnJhbWUgLSAxMjggLSA4KTsKIAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZnAsIHNpemVvZihzdHJ1Y3QgX2Zwc3RhdGUpKSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAvS2NvbmZpZyBiL2FyY2gvdjg1MC9LY29uZmlnCmluZGV4IDM3ZWM2NDQuLmYwZDRkNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9LY29uZmlnCisrKyBiL2FyY2gvdjg1MC9LY29uZmlnCkBAIC0zOCw2ICszOCwxNCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgorCWJvb2wKKwlkZWZhdWx0IG4KKworY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAorCWJvb2wKKwlkZWZhdWx0IG4KKwogIyBUdXJuIG9mZiBzb21lIHJhbmRvbSAzODYgY3JhcCB0aGF0IGNhbiBhZmZlY3QgZGV2aWNlIGNvbmZpZwogY29uZmlnIElTQQogCWJvb2wKQEAgLTk3LDE3ICsxMDUsMTcgQEAKICAgICMgY3VycmVudGx5IHN1cHBvcnQKICAgIGNvbmZpZyBWODUwRV9NQTEKICAgIAkgIGJvb2wKLQkgIGRlcGVuZHMgUlRFX0NCX01BMQorCSAgZGVwZW5kcyBvbiBSVEVfQ0JfTUExCiAJICBkZWZhdWx0IHkKICAgICMgU2ltaWxhcmx5IGZvciB0aGUgUlRFLVY4NTBFL05CODVFLUNCIC0gVjg1MEUvVEVHCiAgICBjb25maWcgVjg1MEVfVEVHCiAgICAJICBib29sCi0JICBkZXBlbmRzIFJURV9DQl9OQjg1RQorCSAgZGVwZW5kcyBvbiBSVEVfQ0JfTkI4NUUKIAkgIGRlZmF1bHQgeQogICAgIyAuLi4gYW5kIHRoZSBSVEUtVjg1MEUvTUUyLUNCIC0gVjg1MEUvTUUyCiAgICBjb25maWcgVjg1MEVfTUUyCiAgICAJICBib29sCi0JICBkZXBlbmRzIFJURV9DQl9NRTIKKwkgIGRlcGVuZHMgb24gUlRFX0NCX01FMgogCSAgZGVmYXVsdCB5CiAKIApAQCAtMTE1LDcgKzEyMyw3IEBACiAKICAgIGNvbmZpZyBWODUwRTJfU0lNODVFMgogICAgCSAgYm9vbAotCSAgZGVwZW5kcyBWODUwRTJfU0lNODVFMkMgfHwgVjg1MEUyX1NJTTg1RTJTCisJICBkZXBlbmRzIG9uIFY4NTBFMl9TSU04NUUyQyB8fCBWODUwRTJfU0lNODVFMlMKIAkgIGRlZmF1bHQgeQogCiAKQEAgLTEyNCw3ICsxMzIsNyBAQAogICAgIyBWODUwRTIgcHJvY2Vzc29ycwogICAgY29uZmlnIFY4NTBFMgogICAgCSAgYm9vbAotCSAgZGVwZW5kcyBWODUwRTJfU0lNODVFMiB8fCBWODUwRTJfRlBHQTg1RTJDIHx8IFY4NTBFMl9BTk5BCisJICBkZXBlbmRzIG9uIFY4NTBFMl9TSU04NUUyIHx8IFY4NTBFMl9GUEdBODVFMkMgfHwgVjg1MEUyX0FOTkEKIAkgIGRlZmF1bHQgeQogCiAKQEAgLTEzMyw3ICsxNDEsNyBAQAogICAgIyBCb2FyZHMgaW4gdGhlIFJURS14LUNCIHNlcmllcwogICAgY29uZmlnIFJURV9DQgogICAgCSAgYm9vbAotCSAgZGVwZW5kcyBSVEVfQ0JfTUExIHx8IFJURV9DQl9OQjg1RSB8fCBSVEVfQ0JfTUUyCisJICBkZXBlbmRzIG9uIFJURV9DQl9NQTEgfHwgUlRFX0NCX05CODVFIHx8IFJURV9DQl9NRTIKIAkgIGRlZmF1bHQgeQogCiAgICBjb25maWcgUlRFX0NCX01VTFRJCkBAIC0xNDEsMjggKzE0OSwyOCBAQAogCSAgIyBSVEVfQ0JfTkI4NUUgY2FuIGVpdGhlciBoYXZlIG11bHRpIFJPTSBzdXBwb3J0IG9yIG5vdCwgYnV0CiAJICAjIG90aGVyIHBsYXRmb3JtcyAoY3VycmVudGx5IG9ubHkgUlRFX0NCX01BMSkgcmVxdWlyZSBpdC4KIAkgIHByb21wdCAiTXVsdGkgbW9uaXRvciBST00gc3VwcG9ydCIgaWYgUlRFX0NCX05CODVFCi0JICBkZXBlbmRzIFJURV9DQl9NQTEgfHwgUlRFX0NCX05CODVFCisJICBkZXBlbmRzIG9uIFJURV9DQl9NQTEgfHwgUlRFX0NCX05CODVFCiAJICBkZWZhdWx0IHkKIAogICAgY29uZmlnIFJURV9DQl9NVUxUSV9EQlRSQVAKICAgIAkgIGJvb2wgIlBhc3MgaWxsZWdhbCBpbnNuIHRyYXAgLyBkYnRyYXAgdG8ga2VybmVsIgotCSAgZGVwZW5kcyBSVEVfQ0JfTVVMVEkKKwkgIGRlcGVuZHMgb24gUlRFX0NCX01VTFRJCiAJICBkZWZhdWx0IG4KIAogICAgY29uZmlnIFJURV9DQl9NQTFfS1NSQU0KICAgIAkgIGJvb2wgIktlcm5lbCBpbiBTUkFNIChsaW1pdHMgc2l6ZSBvZiBrZXJuZWwpIgotCSAgZGVwZW5kcyBSVEVfQ0JfTUExICYmIFJURV9DQl9NVUxUSQorCSAgZGVwZW5kcyBvbiBSVEVfQ0JfTUExICYmIFJURV9DQl9NVUxUSQogCSAgZGVmYXVsdCBuCiAKICAgIGNvbmZpZyBSVEVfTUJfQV9QQ0kKICAgIAkgIGJvb2wgIk1vdGhlci1BIFBDSSBzdXBwb3J0IgotCSAgZGVwZW5kcyBSVEVfQ0IKKwkgIGRlcGVuZHMgb24gUlRFX0NCCiAJICBkZWZhdWx0IHkKIAogICAgIyBUaGUgR0JVUyBpcyB1c2VkIHRvIHRhbGsgdG8gdGhlIFJURS1NT1RIRVItQSBib2FyZAogICAgY29uZmlnIFJURV9HQlVTX0lOVAogICAgCSAgYm9vbAotCSAgZGVwZW5kcyBSVEVfTUJfQV9QQ0kKKwkgIGRlcGVuZHMgb24gUlRFX01CX0FfUENJCiAJICBkZWZhdWx0IHkKIAogICAgIyBUaGUgb25seSBQQ0kgYnVzIHdlIHN1cHBvcnQgaXMgb24gdGhlIFJURS1NT1RIRVItQSBib2FyZApAQCAtMjAxLDcgKzIwOSw3IEBACiAKICAgIGNvbmZpZyBST01fS0VSTkVMCiAgICAJICBib29sICJLZXJuZWwgaW4gUk9NIgotCSAgZGVwZW5kcyBWODUwRTJfQU5OQSB8fCBWODUwRV9BUzg1RVAxIHx8IFJURV9DQl9NRTIKKwkgIGRlcGVuZHMgb24gVjg1MEUyX0FOTkEgfHwgVjg1MEVfQVM4NUVQMSB8fCBSVEVfQ0JfTUUyCiAKICAgICMgU29tZSBwbGF0Zm9ybXMgcHJlLXplcm8gbWVtb3J5LCBpbiB3aGljaCBjYXNlIHRoZSBrZXJuZWwgZG9lc24ndCBuZWVkIHRvCiAgICBjb25maWcgWkVST19CU1MKQEAgLTIxNywxMCArMjI1LDEwIEBACiAKICAgIGNvbmZpZyBWODUwRV9ISUdIUkVTX1RJTUVSCiAgICAJICBib29sICJIaWdoIHJlc29sdXRpb24gdGltZXIgc3VwcG9ydCIKLQkgIGRlcGVuZHMgVjg1MEVfVElNRVJfRAorCSAgZGVwZW5kcyBvbiBWODUwRV9USU1FUl9ECiAgICBjb25maWcgVElNRV9CT09UVVAKICAgIAkgIGJvb2wgIlRpbWUgYm9vdHVwIgotCSAgZGVwZW5kcyBWODUwRV9ISUdIUkVTX1RJTUVSCisJICBkZXBlbmRzIG9uIFY4NTBFX0hJR0hSRVNfVElNRVIKIAogICAgY29uZmlnIFJFU0VUX0dVQVJECiAgICAJICBib29sICJSZXNldCBHdWFyZCIKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L0tjb25maWcgYi9hcmNoL3g4Nl82NC9LY29uZmlnCmluZGV4IGJmYmI5YmMuLmQ0Mjc1NTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L0tjb25maWcKKysrIGIvYXJjaC94ODZfNjQvS2NvbmZpZwpAQCAtOTYsNiArOTYsMTkgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBHRU5FUklDX0JVRworCWJvb2wKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEJVRworCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0CisJYm9vbAorCWRlZmF1bHQgbgorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogCkBAIC01NzEsNyArNTg0LDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IFkuIE9ubHkgZW1iZWRkZWQgc2hvdWxkIHNheSBOIGhlcmUuCiAKIGNvbmZpZyBDQ19TVEFDS1BST1RFQ1RPUgotCWJvb2wgIkVuYWJsZSAtZnN0YWNrLXByb3RlY3RvciBidWZmZXIgb3ZlcmZsb3cgZGV0ZWN0aW9uIChFWFBSSU1FTlRBTCkiCisJYm9vbCAiRW5hYmxlIC1mc3RhY2stcHJvdGVjdG9yIGJ1ZmZlciBvdmVyZmxvdyBkZXRlY3Rpb24gKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAloZWxwCiAgICAgICAgICBUaGlzIG9wdGlvbiB0dXJucyBvbiB0aGUgLWZzdGFjay1wcm90ZWN0b3IgR0NDIGZlYXR1cmUuIFRoaXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L01ha2VmaWxlIGIvYXJjaC94ODZfNjQvTWFrZWZpbGUKaW5kZXggYjQ3MWI4NS4uMjk0MWE5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQvTWFrZWZpbGUKQEAgLTQ1LDkgKzQ1LDcgQEAKICMgYWN0dWFsbHkgaXQgbWFrZXMgdGhlIGtlcm5lbCBzbWFsbGVyIHRvby4KIGNmbGFncy15ICs9IC1mbm8tcmVvcmRlci1ibG9ja3MKIGNmbGFncy15ICs9IC1Xbm8tc2lnbi1jb21wYXJlCi1pZm5lcSAoJChDT05GSUdfVU5XSU5EX0lORk8pLHkpCiBjZmxhZ3MteSArPSAtZm5vLWFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzCi1lbmRpZgogaWZuZXEgKCQoQ09ORklHX0RFQlVHX0lORk8pLHkpCiAjIC1md2ViIHNocmlua3MgdGhlIGtlcm5lbCBhIGJpdCwgYnV0IHRoZSBkaWZmZXJlbmNlIGlzIHZlcnkgc21hbGwKICMgaXQgYWxzbyBtZXNzZXMgdXAgZGVidWdnaW5nLCBzbyBkb24ndCB1c2UgaXQgZm9yIG5vdy4KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2RlZmNvbmZpZyBiL2FyY2gveDg2XzY0L2RlZmNvbmZpZwppbmRleCA5NmYyMjZjLi42OTU4NGMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9kZWZjb25maWcKKysrIGIvYXJjaC94ODZfNjQvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE5LWdpdDcKLSMgV2VkIERlYyAgNiAyMzo1MDo0NyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAtcmMzCisjIEZyaSBKYW4gIDUgMTE6NTQ6NDEgMjAwNwogIwogQ09ORklHX1g4Nl82ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtMjIsNiArMjIsOSBAQAogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19ETUk9eQogQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMTcwLDYgKzE3Myw3IEBACiAjIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCiAjIENPTkZJR19SRU9SREVSIGlzIG5vdCBzZXQKQEAgLTUxNCw2ICs1MTgsNyBAQAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9ORVRMSU5LPXkKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CiAKQEAgLTUzNCw2ICs1MzksNyBAQAogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgVHJhbnNwb3J0cwpAQCAtNTg3LDYgKzU5Myw3IEBACiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKQEAgLTEwNDksNiArMTA1Niw3IEBACiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKQEAgLTEwNTksNiArMTA2Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKQEAgLTExMDYsMTAgKzExMTUsNyBAQAogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKLUNPTkZJR19PU1NfT0JTT0xFVEVfRFJJVkVSPXkKICMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRlVTSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0VTMTM3MSBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfSUNIPXkKICMgQ09ORklHX1NPVU5EX1RSSURFTlQgaXMgbm90IHNldApAQCAtMTExOSw2ICsxMTI1LDExIEBACiAjIENPTkZJR19TT1VORF9PU1MgaXMgbm90IHNldAogCiAjCisjIEhJRCBEZXZpY2VzCisjCitDT05GSUdfSElEPXkKKworIwogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpAQCAtMTE4Miw3ICsxMTkzLDYgQEAKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKLUNPTkZJR19VU0JfSElESU5QVVQ9eQogIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CkBAIC0xMzAzLDYgKzEzMTMsMTEgQEAKICMKIAogIworIyBWaXJ0dWFsaXphdGlvbgorIworIyBDT05GSUdfS1ZNIGlzIG5vdCBzZXQKKworIwogIyBGaXJtd2FyZSBEcml2ZXJzCiAjCiAjIENPTkZJR19FREQgaXMgbm90IHNldApAQCAtMTQ3NSw2ICsxNDkwLDExIEBACiBDT05GSUdfTkxTX1VURjg9eQogCiAjCisjIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgorIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAogIwogQ09ORklHX1BST0ZJTElORz15CkBAIC0xNDg5LDYgKzE1MDksOCBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19VTlVTRURfU1lNQk9MUz15CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE4CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQpAQCAtMTUwNCwxNSArMTUyNiwxMiBAQAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19VTldJTkRfSU5GTz15Ci1DT05GSUdfU1RBQ0tfVU5XSU5EPXkKICMgQ09ORklHX0ZPUkNFRF9JTkxJTklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUk9EQVRBIGlzIG5vdCBzZXQKQEAgLTE1MzQsOSArMTU1MywxMSBAQAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfQklUUkVWRVJTRT15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19QTElTVD15CitDT05GSUdfSU9NQVBfQ09QWT15CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYW91dC5jIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2FvdXQuYwppbmRleCAzOTZkM2MxLi5mZTgzZWRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYW91dC5jCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9hb3V0LmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogCQkJZ2V0X3VzZXIoYyxwKyspOwogCQl9IHdoaWxlIChjKTsKIAl9Ci0JcHV0X3VzZXIoTlVMTCxhcmd2KTsKKwlwdXRfdXNlcigwLCBhcmd2KTsKIAljdXJyZW50LT5tbS0+YXJnX2VuZCA9IGN1cnJlbnQtPm1tLT5lbnZfc3RhcnQgPSAodW5zaWduZWQgbG9uZykgcDsKIAl3aGlsZSAoZW52Yy0tPjApIHsKIAkJY2hhciBjOwpAQCAtMjUwLDcgKzI1MCw3IEBACiAJCQlnZXRfdXNlcihjLHArKyk7CiAJCX0gd2hpbGUgKGMpOwogCX0KLQlwdXRfdXNlcihOVUxMLGVudnApOworCXB1dF91c2VyKDAsIGVudnApOwogCWN1cnJlbnQtPm1tLT5lbnZfZW5kID0gKHVuc2lnbmVkIGxvbmcpIHA7CiAJcmV0dXJuIHNwOwogfQpAQCAtMjcyLDcgKzI3Miw3IEBACiAJaWYgKChOX01BR0lDKGV4KSAhPSBaTUFHSUMgJiYgTl9NQUdJQyhleCkgIT0gT01BR0lDICYmCiAJICAgICBOX01BR0lDKGV4KSAhPSBRTUFHSUMgJiYgTl9NQUdJQyhleCkgIT0gTk1BR0lDKSB8fAogCSAgICBOX1RSU0laRShleCkgfHwgTl9EUlNJWkUoZXgpIHx8Ci0JICAgIGlfc2l6ZV9yZWFkKGJwcm0tPmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSA8IGV4LmFfdGV4dCtleC5hX2RhdGErTl9TWU1TSVpFKGV4KStOX1RYVE9GRihleCkpIHsKKwkgICAgaV9zaXplX3JlYWQoYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkgPCBleC5hX3RleHQrZXguYV9kYXRhK05fU1lNU0laRShleCkrTl9UWFRPRkYoZXgpKSB7CiAJCXJldHVybiAtRU5PRVhFQzsKIAl9CiAKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQl7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIAogCQkJICAgICAgICJmZF9vZmZzZXQgaXMgbm90IHBhZ2UgYWxpZ25lZC4gUGxlYXNlIGNvbnZlcnQgcHJvZ3JhbTogJXNcbiIsCi0JCQkgICAgICAgYnBybS0+ZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lKTsKKwkJCSAgICAgICBicHJtLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJCQllcnJvcl90aW1lID0gamlmZmllczsKIAkJfQogI2VuZGlmCkBAIC00NDAsNyArNDQwLDcgQEAKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBleGVjIGV4OwogCi0JaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAlyZXR2YWwgPSAtRU5PRVhFQzsKIAllcnJvciA9IGtlcm5lbF9yZWFkKGZpbGUsIDAsIChjaGFyICopICZleCwgc2l6ZW9mKGV4KSk7CkBAIC00NzEsNyArNDcxLDcgQEAKIAkJewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJCSAgICAgICAiTl9UWFRPRkYgaXMgbm90IHBhZ2UgYWxpZ25lZC4gUGxlYXNlIGNvbnZlcnQgbGlicmFyeTogJXNcbiIsCi0JCQkgICAgICAgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lKTsKKwkJCSAgICAgICBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJCQllcnJvcl90aW1lID0gamlmZmllczsKIAkJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMKaW5kZXggNTQzZWY0Zi4uNWNlMGJkNCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9iaW5mbXQuYwpAQCAtNjQsNTUgKzY0LDYgQEAKICNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0MzIpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQogdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKIAotLyoKLSAqIFRoZXNlIG1hY3JvcyBwYXJhbWV0ZXJpemUgZWxmX2NvcmVfZHVtcCBpbiBmcy9iaW5mbXRfZWxmLmMgdG8gd3JpdGUgb3V0Ci0gKiBleHRyYSBzZWdtZW50cyBjb250YWluaW5nIHRoZSB2c3lzY2FsbCBEU08gY29udGVudHMuICBEdW1waW5nIGl0cwotICogY29udGVudHMgbWFrZXMgcG9zdC1tb3J0ZW0gZnVsbHkgaW50ZXJwcmV0YWJsZSBsYXRlciB3aXRob3V0IG1hdGNoaW5nIHVwCi0gKiB0aGUgc2FtZSBrZXJuZWwgYW5kIGhhcmR3YXJlIGNvbmZpZyB0byBzZWUgd2hhdCBQQyB2YWx1ZXMgbWVhbnQuCi0gKiBEdW1waW5nIGl0cyBleHRyYSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGluY2x1ZGVzIGFsbCB0aGUgb3RoZXIgaW5mb3JtYXRpb24KLSAqIGEgZGVidWdnZXIgbmVlZHMgdG8gZWFzaWx5IGZpbmQgaG93IHRoZSB2c3lzY2FsbCBEU08gd2FzIGJlaW5nIHVzZWQuCi0gKi8KLSNkZWZpbmUgRUxGX0NPUkVfRVhUUkFfUEhEUlMJKGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBWU1lTQ0FMTDMyX0JBU0UpID8gICAgIFwKLSAgICAoVlNZU0NBTEwzMl9FSERSLT5lX3BobnVtKSA6IDApCi0jZGVmaW5lIEVMRl9DT1JFX1dSSVRFX0VYVFJBX1BIRFJTCQkJCQkgICAgICBcCi1kbyB7CQkJCQkJCQkJICAgICAgXAotCWlmIChmaW5kX3ZtYShjdXJyZW50LT5tbSwgVlNZU0NBTEwzMl9CQVNFKSkgeyAJCQkgICAgICBcCi0JCWNvbnN0IHN0cnVjdCBlbGYzMl9waGRyICpjb25zdCB2c3lzY2FsbF9waGRycyA9CQkgICAgICBcCi0JCQkoY29uc3Qgc3RydWN0IGVsZjMyX3BoZHIgKikgKFZTWVNDQUxMMzJfQkFTRQkgICAgICBcCi0JCQkJCQkgICArIFZTWVNDQUxMMzJfRUhEUi0+ZV9waG9mZik7XAotCQlpbnQgaTsJCQkJCQkJICAgICAgXAotCQlFbGYzMl9PZmYgb2ZzID0gMDsJCQkJCSAgICAgIFwKLQkJZm9yIChpID0gMDsgaSA8IFZTWVNDQUxMMzJfRUhEUi0+ZV9waG51bTsgKytpKSB7CSAgICAgIFwKLQkJCXN0cnVjdCBlbGYzMl9waGRyIHBoZHIgPSB2c3lzY2FsbF9waGRyc1tpXTsJICAgICAgXAotCQkJaWYgKHBoZHIucF90eXBlID09IFBUX0xPQUQpIHsJCQkgICAgICBcCi0JCQkJQlVHX09OKG9mcyAhPSAwKTsJCQkgICAgICBcCi0JCQkJb2ZzID0gcGhkci5wX29mZnNldCA9IG9mZnNldDsJCSAgICAgIFwKLQkJCQlwaGRyLnBfbWVtc3ogPSBQQUdFX0FMSUdOKHBoZHIucF9tZW1zeik7ICAgICAgXAotCQkJCXBoZHIucF9maWxlc3ogPSBwaGRyLnBfbWVtc3o7CQkgICAgICBcCi0JCQkJb2Zmc2V0ICs9IHBoZHIucF9maWxlc3o7CQkgICAgICBcCi0JCQl9CQkJCQkJICAgICAgXAotCQkJZWxzZQkJCQkJCSAgICAgIFwKLQkJCQlwaGRyLnBfb2Zmc2V0ICs9IG9mczsJCQkgICAgICBcCi0JCQlwaGRyLnBfcGFkZHIgPSAwOyAvKiBtYXRjaCBvdGhlciBjb3JlIHBoZHJzICovCSAgICAgIFwKLQkJCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRyKSk7CQkgICAgICBcCi0JCX0JCQkJCQkJICAgICAgXAotCX0JCQkJCQkJCSAgICAgIFwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIEVMRl9DT1JFX1dSSVRFX0VYVFJBX0RBVEEJCQkJCSAgICAgIFwKLWRvIHsJCQkJCQkJCQkgICAgICBcCi0JaWYgKGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBWU1lTQ0FMTDMyX0JBU0UpKSB7IAkJCSAgICAgIFwKLQkJY29uc3Qgc3RydWN0IGVsZjMyX3BoZHIgKmNvbnN0IHZzeXNjYWxsX3BoZHJzID0JCSAgICAgIFwKLQkJCShjb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqKSAoVlNZU0NBTEwzMl9CQVNFCSAgICAgIFwKLQkJCQkJCSAgICsgVlNZU0NBTEwzMl9FSERSLT5lX3Bob2ZmKTsgICAgICBcCi0JCWludCBpOwkJCQkJCQkgICAgICBcCi0JCWZvciAoaSA9IDA7IGkgPCBWU1lTQ0FMTDMyX0VIRFItPmVfcGhudW07ICsraSkgewkgICAgICBcCi0JCQlpZiAodnN5c2NhbGxfcGhkcnNbaV0ucF90eXBlID09IFBUX0xPQUQpCSAgICAgIFwKLQkJCQlEVU1QX1dSSVRFKCh2b2lkICopICh1NjQpIHZzeXNjYWxsX3BoZHJzW2ldLnBfdmFkZHIsXAotCQkJCSAgICBQQUdFX0FMSUdOKHZzeXNjYWxsX3BoZHJzW2ldLnBfbWVtc3opKTsgICBcCi0JCX0JCQkJCQkJICAgICAgXAotCX0JCQkJCQkJCSAgICAgIFwKLX0gd2hpbGUgKDApCi0KIHN0cnVjdCBlbGZfc2lnaW5mbwogewogCWludAlzaV9zaWdubzsJCQkvKiBzaWduYWwgbnVtYmVyICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL3N5c2NhbGwzMi5jIGIvYXJjaC94ODZfNjQvaWEzMi9zeXNjYWxsMzIuYwppbmRleCAzZTVlZDIwLi41OWYxZmExIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL3N5c2NhbGwzMi5jCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvc3lzY2FsbDMyLmMKQEAgLTU5LDYgKzU5LDEzIEBACiAJdm1hLT52bV9lbmQgPSBWU1lTQ0FMTDMyX0VORDsKIAkvKiBNQVlXUklURSB0byBhbGxvdyBnZGIgdG8gQ09XIGFuZCBzZXQgYnJlYWtwb2ludHMgKi8KIAl2bWEtPnZtX2ZsYWdzID0gVk1fUkVBRHxWTV9FWEVDfFZNX01BWVJFQUR8Vk1fTUFZRVhFQ3xWTV9NQVlXUklURTsKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgdkRTTyBnZXRzIGludG8gZXZlcnkgY29yZSBkdW1wLgorCSAqIER1bXBpbmcgaXRzIGNvbnRlbnRzIG1ha2VzIHBvc3QtbW9ydGVtIGZ1bGx5IGludGVycHJldGFibGUgbGF0ZXIKKwkgKiB3aXRob3V0IG1hdGNoaW5nIHVwIHRoZSBzYW1lIGtlcm5lbCBhbmQgaGFyZHdhcmUgY29uZmlnIHRvIHNlZQorCSAqIHdoYXQgUEMgdmFsdWVzIG1lYW50LgorCSAqLworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fQUxXQVlTRFVNUDsKIAl2bWEtPnZtX2ZsYWdzIHw9IG1tLT5kZWZfZmxhZ3M7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSBwcm90ZWN0aW9uX21hcFt2bWEtPnZtX2ZsYWdzICYgN107CiAJdm1hLT52bV9vcHMgPSAmc3lzY2FsbDMyX3ZtX29wczsKQEAgLTc1LDYgKzgyLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK2NvbnN0IGNoYXIgKmFyY2hfdm1hX25hbWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaWYgKHZtYS0+dm1fc3RhcnQgPT0gVlNZU0NBTEwzMl9CQVNFICYmCisJICAgIHZtYS0+dm1fbW0gJiYgdm1hLT52bV9tbS0+dGFza19zaXplID09IElBMzJfUEFHRV9PRkZTRVQpCisJCXJldHVybiAiW3Zkc29dIjsKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGludCBfX2luaXQgaW5pdF9zeXNjYWxsMzIodm9pZCkKIHsgCiAJc3lzY2FsbDMyX3BhZ2UgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsgCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvY3B1ZnJlcS9LY29uZmlnIGIvYXJjaC94ODZfNjQva2VybmVsL2NwdWZyZXEvS2NvbmZpZwppbmRleCA4MWYxNTYyLi40NWE2YTFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvY3B1ZnJlcS9LY29uZmlnCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9jcHVmcmVxL0tjb25maWcKQEAgLTI3LDEwICsyNywxMyBAQAogCWRlZmF1bHQgeQogCiBjb25maWcgWDg2X1NQRUVEU1RFUF9DRU5UUklOTwotCXRyaXN0YXRlICJJbnRlbCBFbmhhbmNlZCBTcGVlZFN0ZXAiCisJdHJpc3RhdGUgIkludGVsIEVuaGFuY2VkIFNwZWVkU3RlcCAoZGVwcmVjYXRlZCkiCiAJc2VsZWN0IENQVV9GUkVRX1RBQkxFCiAJZGVwZW5kcyBvbiBBQ1BJX1BST0NFU1NPUgogCWhlbHAKKwkgIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdyBtZXJnZWQgaW50bworCSAgYWNwaV9jcHVmcmVxIChYODZfQUNQSV9DUFVGUkVRKS4gVXNlIHRoYXQgZHJpdmVyIGluc3RlYWQgb2YKKwkgIHNwZWVkc3RlcF9jZW50cmluby4KIAkgIFRoaXMgYWRkcyB0aGUgQ1BVRnJlcSBkcml2ZXIgZm9yIEVuaGFuY2VkIFNwZWVkU3RlcCBlbmFibGVkCiAJICBtb2JpbGUgQ1BVcy4gIFRoaXMgbWVhbnMgSW50ZWwgUGVudGl1bSBNIChDZW50cmlubykgQ1BVcwogCSAgb3IgNjRiaXQgZW5hYmxlZCBJbnRlbCBYZW9ucy4KQEAgLTQ2LDEwICs0OSwxMiBAQAogCiBjb25maWcgWDg2X0FDUElfQ1BVRlJFUQogCXRyaXN0YXRlICJBQ1BJIFByb2Nlc3NvciBQLVN0YXRlcyBkcml2ZXIiCisJc2VsZWN0IENQVV9GUkVRX1RBQkxFCiAJZGVwZW5kcyBvbiBBQ1BJX1BST0NFU1NPUgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFkZHMgYSBDUFVGcmVxIGRyaXZlciB3aGljaCB1dGlsaXplcyB0aGUgQUNQSQogCSAgUHJvY2Vzc29yIFBlcmZvcm1hbmNlIFN0YXRlcy4KKwkgIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgSW50ZWwgRW5oYW5jZWQgU3BlZWRzdGVwLgogCiAJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcS8+LgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvY3B1ZnJlcS9NYWtlZmlsZSBiL2FyY2gveDg2XzY0L2tlcm5lbC9jcHVmcmVxL01ha2VmaWxlCmluZGV4IGQ4YjU5MzguLjc1M2NlMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9jcHVmcmVxL01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9jcHVmcmVxL01ha2VmaWxlCkBAIC01LDggKzUsOCBAQAogU1JDRElSIDo9IC4uLy4uLy4uL2kzODYva2VybmVsL2NwdS9jcHVmcmVxCiAKIG9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzgpICs9IHBvd2Vybm93LWs4Lm8KLW9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0NFTlRSSU5PKSArPSBzcGVlZHN0ZXAtY2VudHJpbm8ubwogb2JqLSQoQ09ORklHX1g4Nl9BQ1BJX0NQVUZSRVEpICs9IGFjcGktY3B1ZnJlcS5vCitvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOTykgKz0gc3BlZWRzdGVwLWNlbnRyaW5vLm8KIG9iai0kKENPTkZJR19YODZfUDRfQ0xPQ0tNT0QpICs9IHA0LWNsb2NrbW9kLm8KIG9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0xJQikgKz0gc3BlZWRzdGVwLWxpYi5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseS1xdWlya3MuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseS1xdWlya3MuYwppbmRleCA4Mjk2OThmLi40OTgwMmYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHktcXVpcmtzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5LXF1aXJrcy5jCkBAIC02OSw2ICs2OSwxMSBAQAogCiBzdGF0aWMgdm9pZCBhdGlfYnVncyh2b2lkKQogeworCWlmICh0aW1lcl9vdmVyXzgyNTQgPT0gMSkgeworCQl0aW1lcl9vdmVyXzgyNTQgPSAwOworCQlwcmludGsoS0VSTl9JTkZPCisJIAkiQVRJIGJvYXJkIGRldGVjdGVkLiBEaXNhYmxpbmcgdGltZXIgcm91dGluZyBvdmVyIDgyNTQuXG4iKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGludGVsX2J1Z3Modm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKaW5kZXggNjAxZDMzMi4uOWY1ZGFjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKQEAgLTExNTUsMzYgKzExNTUsMyBAQAogCXJldAogCUNGSV9FTkRQUk9DCiBFTkRQUk9DKGNhbGxfc29mdGlycSkKLQotI2lmZGVmIENPTkZJR19TVEFDS19VTldJTkQKLUVOVFJZKGFyY2hfdW53aW5kX2luaXRfcnVubmluZykKLQlDRklfU1RBUlRQUk9DCi0JbW92cQklcjE1LCBSMTUoJXJkaSkKLQltb3ZxCSVyMTQsIFIxNCglcmRpKQotCXhjaGdxCSVyc2ksICVyZHgKLQltb3ZxCSVyMTMsIFIxMyglcmRpKQotCW1vdnEJJXIxMiwgUjEyKCVyZGkpCi0JeG9ybAklZWF4LCAlZWF4Ci0JbW92cQklcmJwLCBSQlAoJXJkaSkKLQltb3ZxCSVyYngsIFJCWCglcmRpKQotCW1vdnEJKCVyc3ApLCAlcmN4Ci0JbW92cQklcmF4LCBSMTEoJXJkaSkKLQltb3ZxCSVyYXgsIFIxMCglcmRpKQotCW1vdnEJJXJheCwgUjkoJXJkaSkKLQltb3ZxCSVyYXgsIFI4KCVyZGkpCi0JbW92cQklcmF4LCBSQVgoJXJkaSkKLQltb3ZxCSVyYXgsIFJDWCglcmRpKQotCW1vdnEJJXJheCwgUkRYKCVyZGkpCi0JbW92cQklcmF4LCBSU0koJXJkaSkKLQltb3ZxCSVyYXgsIFJESSglcmRpKQotCW1vdnEJJXJheCwgT1JJR19SQVgoJXJkaSkKLQltb3ZxCSVyY3gsIFJJUCglcmRpKQotCWxlYXEJOCglcnNwKSwgJXJjeAotCW1vdnEJJF9fS0VSTkVMX0NTLCBDUyglcmRpKQotCW1vdnEJJXJheCwgRUZMQUdTKCVyZGkpCi0JbW92cQklcmN4LCBSU1AoJXJkaSkKLQltb3ZxCSRfX0tFUk5FTF9EUywgU1MoJXJkaSkKLQlqbXBxCSolcmR4Ci0JQ0ZJX0VORFBST0MKLUVORFBST0MoYXJjaF91bndpbmRfaW5pdF9ydW5uaW5nKQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jIGIvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYwppbmRleCAyYTFkY2Q1Li5kN2JhZDkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKQEAgLTU1LDYgKzU1LDEwIEBACiAKIHN0YXRpYyBpbnQgbm9fdGltZXJfY2hlY2s7CiAKK3N0YXRpYyBpbnQgZGlzYWJsZV90aW1lcl9waW5fMSBfX2luaXRkYXRhOworCitpbnQgdGltZXJfb3Zlcl84MjU0IF9faW5pdGRhdGEgPSAxOworCiAvKiBXaGVyZSBpZiBhbnl3aGVyZSBpcyB0aGUgaTgyNTkgY29ubmVjdCBpbiBleHRlcm5hbCBpbnQgbW9kZSAqLwogc3RhdGljIHN0cnVjdCB7IGludCBwaW4sIGFwaWM7IH0gaW9hcGljX2k4MjU5ID0geyAtMSwgLTEgfTsKIApAQCAtMzUwLDYgKzM1NCwyOSBAQAogfQogZWFybHlfcGFyYW0oIm5vYXBpYyIsIGRpc2FibGVfaW9hcGljX3NldHVwKTsKIAorLyogQWN0dWFsbHkgdGhlIG5leHQgaXMgb2Jzb2xldGUsIGJ1dCBrZWVwIGl0IGZvciBwYXJhbm9pZCByZWFzb25zIC1BSyAqLworc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV90aW1lcl9waW5fc2V0dXAoY2hhciAqYXJnKQoreworCWRpc2FibGVfdGltZXJfcGluXzEgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgiZGlzYWJsZV90aW1lcl9waW5fMSIsIGRpc2FibGVfdGltZXJfcGluX3NldHVwKTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfZGlzYWJsZV84MjU0X3RpbWVyKGNoYXIgKnMpCit7CisJdGltZXJfb3Zlcl84MjU0ID0gLTE7CisJcmV0dXJuIDE7Cit9CitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9lbmFibGVfODI1NF90aW1lcihjaGFyICpzKQoreworCXRpbWVyX292ZXJfODI1NCA9IDI7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoImRpc2FibGVfODI1NF90aW1lciIsIHNldHVwX2Rpc2FibGVfODI1NF90aW1lcik7CitfX3NldHVwKCJlbmFibGVfODI1NF90aW1lciIsIHNldHVwX2VuYWJsZV84MjU0X3RpbWVyKTsKKworCiAvKgogICogRmluZCB0aGUgSVJRIGVudHJ5IG51bWJlciBvZiBhIGNlcnRhaW4gcGluLgogICovCkBAIC0xNTY4LDMzICsxNTk1LDEwIEBACiAgKiBhIHdpZGUgcmFuZ2Ugb2YgYm9hcmRzIGFuZCBCSU9TIGJ1Z3MuICBGb3J0dW5hdGVseSBvbmx5IHRoZSB0aW1lciBJUlEKICAqIGlzIHNvIHNjcmV3eS4gIFRoYW5rcyB0byBCcmlhbiBQZXJraW5zIGZvciB0ZXN0aW5nL2hhY2tpbmcgdGhpcyBiZWFzdAogICogZmFuYXRpY2FsbHkgb24gaGlzIHRydWx5IGJ1Z2d5IGJvYXJkLgorICoKKyAqIEZJWE1FOiByZWFsbHkgbmVlZCB0byByZXZhbXAgdGhpcyBmb3IgbW9kZXJuIHBsYXRmb3JtcyBvbmx5LgogICovCi0KLXN0YXRpYyBpbnQgdHJ5X2FwaWNfcGluKGludCBhcGljLCBpbnQgcGluLCBjaGFyICptc2cpCi17Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KLQkJICAgICIuLlRJTUVSOiB0cnlpbmcgSU8tQVBJQz0lZCBQSU49JWQgJXMiLAotCQkgICAgYXBpYywgcGluLCBtc2cpOwotCi0JLyoKLQkgKiBPaywgZG9lcyBJUlEwIHRocm91Z2ggdGhlIElPQVBJQyB3b3JrPwotCSAqLwotCWlmICghbm9fdGltZXJfY2hlY2sgJiYgdGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJbm1pX3dhdGNoZG9nX2RlZmF1bHQoKTsKLQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQlzZXR1cF9ubWkoKTsKLQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCX0KLQkJcmV0dXJuIDE7Ci0JfQotCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7Ci0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9FUlIgIiAuLiBmYWlsZWRcbiIpOwotCXJldHVybiAwOwotfQotCi0vKiBUaGUgZnVuY3Rpb24gZnJvbSBoZWxsICovCi1zdGF0aWMgdm9pZCBjaGVja190aW1lcih2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX3RpbWVyKHZvaWQpCiB7CiAJaW50IGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMjsKIAlpbnQgdmVjdG9yOwpAQCAtMTYxNSw0MyArMTYxOSw2MSBAQAogCSAqLwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0VYVElOVCk7CiAJaW5pdF84MjU5QSgxKTsKKwlpZiAodGltZXJfb3Zlcl84MjU0ID4gMCkKKwkJZW5hYmxlXzgyNTlBX2lycSgwKTsKIAogCXBpbjEgID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9JTlQpOwogCWFwaWMxID0gZmluZF9pc2FfaXJxX2FwaWMoMCwgbXBfSU5UKTsKIAlwaW4yICA9IGlvYXBpY19pODI1OS5waW47CiAJYXBpYzIgPSBpb2FwaWNfaTgyNTkuYXBpYzsKIAotCS8qIERvIHRoaXMgZmlyc3QsIG90aGVyd2lzZSB3ZSBnZXQgZG91YmxlIGludGVycnVwdHMgb24gQVRJIGJvYXJkcyAqLwotCWlmICgocGluMSAhPSAtMSkgJiYgdHJ5X2FwaWNfcGluKGFwaWMxLCBwaW4xLCJ3aXRoIDgyNTkgSVJRMCBkaXNhYmxlZCIpKQotCQlyZXR1cm47CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLEtFUk5fSU5GTyAiLi5USU1FUjogdmVjdG9yPTB4JTAyWCBhcGljMT0lZCBwaW4xPSVkIGFwaWMyPSVkIHBpbjI9JWRcbiIsCisJCXZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKIAotCS8qIE5vdyB0cnkgYWdhaW4gd2l0aCBJUlEwIDgyNTlBIGVuYWJsZWQuCi0JICAgQXNzdW1lcyB0aW1lciBpcyBvbiBJTy1BUElDIDAgPyE/ICovCi0JZW5hYmxlXzgyNTlBX2lycSgwKTsKLQl1bm1hc2tfSU9fQVBJQ19pcnEoMCk7Ci0JaWYgKHRyeV9hcGljX3BpbihhcGljMSwgcGluMSwgIndpdGggODI1OSBJUlEwIGVuYWJsZWQiKSkKLQkJcmV0dXJuOwotCWRpc2FibGVfODI1OUFfaXJxKDApOwotCi0JLyogQWx3YXlzIHRyeSBwaW4wIGFuZCBwaW4yIG9uIEFQSUMgMCB0byBoYW5kbGUgYnVnZ3kgdGltZXIgb3ZlcnJpZGVzCi0JICAgb24gTnZpZGlhIGJvYXJkcyAqLwotCWlmICghKGFwaWMxID09IDAgJiYgcGluMSA9PSAwKSAmJgotCSAgICB0cnlfYXBpY19waW4oMCwgMCwgImZhbGxiYWNrIHdpdGggODI1OSBJUlEwIGRpc2FibGVkIikpCi0JCXJldHVybjsKLQlpZiAoIShhcGljMSA9PSAwICYmIHBpbjEgPT0gMikgJiYKLQkgICAgdHJ5X2FwaWNfcGluKDAsIDIsICJmYWxsYmFjayB3aXRoIDgyNTkgSVJRMCBkaXNhYmxlZCIpKQotCQlyZXR1cm47Ci0KLQkvKiBUaGVuIHRyeSBwdXJlIDgyNTlBIHJvdXRpbmcgb24gdGhlIDgyNTkgYXMgcmVwb3J0ZWQgYnkgQklPUyovCi0JZW5hYmxlXzgyNTlBX2lycSgwKTsKLQlpZiAocGluMiAhPSAtMSkgewotCQlzZXR1cF9FeHRJTlRfSVJRMF9waW4oYXBpYzIsIHBpbjIsIHZlY3Rvcik7Ci0JCWlmICh0cnlfYXBpY19waW4oYXBpYzIscGluMiwiODI1OUEgYnJvYWRjYXN0IEV4dElOVCBmcm9tIEJJT1MiKSkKKwlpZiAocGluMSAhPSAtMSkgeworCQkvKgorCQkgKiBPaywgZG9lcyBJUlEwIHRocm91Z2ggdGhlIElPQVBJQyB3b3JrPworCQkgKi8KKwkJdW5tYXNrX0lPX0FQSUNfaXJxKDApOworCQlpZiAoIW5vX3RpbWVyX2NoZWNrICYmIHRpbWVyX2lycV93b3JrcygpKSB7CisJCQlubWlfd2F0Y2hkb2dfZGVmYXVsdCgpOworCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgeworCQkJCWRpc2FibGVfODI1OUFfaXJxKDApOworCQkJCXNldHVwX25taSgpOworCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7CisJCQl9CisJCQlpZiAoZGlzYWJsZV90aW1lcl9waW5fMSA+IDApCisJCQkJY2xlYXJfSU9fQVBJQ19waW4oMCwgcGluMSk7CiAJCQlyZXR1cm47CisJCX0KKwkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzEsIHBpbjEpOworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULEtFUk5fRVJSICIuLk1QLUJJT1MgYnVnOiA4MjU0IHRpbWVyIG5vdCAiCisJCQkJImNvbm5lY3RlZCB0byBJTy1BUElDXG4iKTsKIAl9CiAKLQkvKiBUcmllZCBhbGwgcG9zc2liaWxpdGllcyB0byBnbyB0aHJvdWdoIHRoZSBJTy1BUElDLiBOb3cgY29tZSB0aGUKLQkgICByZWFsbHkgY2hlZXN5IGZhbGxiYWNrcy4gKi8KKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsS0VSTl9JTkZPICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIChJUlEwKSAiCisJCQkJInRocm91Z2ggdGhlIDgyNTlBIC4uLiAiKTsKKwlpZiAocGluMiAhPSAtMSkgeworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIlxuLi4uLi4gKGZvdW5kIGFwaWMgJWQgcGluICVkKSAuLi4iLAorCQkJYXBpYzIsIHBpbjIpOworCQkvKgorCQkgKiBsZWdhY3kgZGV2aWNlcyBzaG91bGQgYmUgY29ubmVjdGVkIHRvIElPIEFQSUMgIzAKKwkJICovCisJCXNldHVwX0V4dElOVF9JUlEwX3BpbihhcGljMiwgcGluMiwgdmVjdG9yKTsKKwkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CisJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIiB3b3Jrcy5cbiIpOworCQkJbm1pX3dhdGNoZG9nX2RlZmF1bHQoKTsKKwkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKKwkJCQlzZXR1cF9ubWkoKTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCQkvKgorCQkgKiBDbGVhbnVwLCBqdXN0IGluIGNhc2UgLi4uCisJCSAqLworCQljbGVhcl9JT19BUElDX3BpbihhcGljMiwgcGluMik7CisJfQorCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwiIGZhaWxlZC5cbiIpOwogCiAJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0aW1lciBkb2Vzbid0IHdvcmsgdGhyb3VnaCB0aGUgSU8tQVBJQyAtIGRpc2FibGluZyBOTUkgV2F0Y2hkb2chXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tb2R1bGUuYwppbmRleCA5ZDA5NThmLi5hODg4ZTY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL21vZHVsZS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNzMsMTAgKzE3NCwxMiBAQAogCQkJCQkgICAgbHNlZywgbHNlZyArIGxvY2tzLT5zaF9zaXplLAogCQkJCQkgICAgdHNlZywgdHNlZyArIHRleHQtPnNoX3NpemUpOwogCX0KLQlyZXR1cm4gMDsKKworCXJldHVybiBtb2R1bGVfYnVnX2ZpbmFsaXplKGhkciwgc2VjaGRycywgbWUpOwogfQogCiB2b2lkIG1vZHVsZV9hcmNoX2NsZWFudXAoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCWFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2RlbChtb2QpOworCW1vZHVsZV9idWdfY2xlYW51cChtb2QpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL25taS5jIGIvYXJjaC94ODZfNjQva2VybmVsL25taS5jCmluZGV4IDI3ZTk1ZTcuLjljYjQyZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKQEAgLTE5Myw2ICsxOTMsOCBAQAogCQlubWlfd2F0Y2hkb2cgPSBOTUlfSU9fQVBJQzsKIH0KIAorc3RhdGljIGludCBlbmRmbGFnIF9faW5pdGRhdGEgPSAwOworCiAjaWZkZWYgQ09ORklHX1NNUAogLyogVGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHVzZWQgYnkgTk1JX0xPQ0FMX0FQSUMgZG9uJ3QgdHJpZ2dlciB3aGVuCiAgKiB0aGUgQ1BVIGlzIGlkbGUuIFRvIG1ha2Ugc3VyZSB0aGUgTk1JIHdhdGNoZG9nIHJlYWxseSB0aWNrcyBvbiBhbGwKQEAgLTIwMCw3ICsyMDIsNiBAQAogICovCiBzdGF0aWMgX19pbml0IHZvaWQgbm1pX2NwdV9idXN5KHZvaWQgKmRhdGEpCiB7Ci0Jdm9sYXRpbGUgaW50ICplbmRmbGFnID0gZGF0YTsKIAlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIAkvKiBJbnRlbnRpb25hbGx5IGRvbid0IHVzZSBjcHVfcmVsYXggaGVyZS4gVGhpcyBpcwogCSAgIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIHJlYWxseSB0aWNrcywKQEAgLTIwOCwxNCArMjA5LDEzIEBACiAJICAgcGF1c2UgaW5zdHJ1Y3Rpb24uIE9uIGEgcmVhbCBIVCBtYWNoaW5lIHRoaXMgaXMgZmluZSBiZWNhdXNlCiAJICAgYWxsIG90aGVyIENQVXMgYXJlIGJ1c3kgd2l0aCAidXNlbGVzcyIgZGVsYXkgbG9vcHMgYW5kIGRvbid0CiAJICAgY2FyZSBpZiB0aGV5IGdldCBzb21ld2hhdCBsZXNzIGN5Y2xlcy4gKi8KLQl3aGlsZSAoKmVuZGZsYWcgPT0gMCkKLQkJYmFycmllcigpOworCXdoaWxlIChlbmRmbGFnID09IDApCisJCW1iKCk7CiB9CiAjZW5kaWYKIAogaW50IF9faW5pdCBjaGVja19ubWlfd2F0Y2hkb2cgKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW50IGVuZGZsYWcgPSAwOwogCWludCAqY291bnRzOwogCWludCBjcHU7CiAKQEAgLTI1Niw2ICsyNTYsNyBAQAogCWlmICghYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpKSB7CiAJCWtmcmVlKGNvdW50cyk7CiAJCWF0b21pY19zZXQoJm5taV9hY3RpdmUsIC0xKTsKKwkJZW5kZmxhZyA9IDE7CiAJCXJldHVybiAtMTsKIAl9CiAJZW5kZmxhZyA9IDE7CkBAIC0zMDEsOCArMzAyLDYgQEAKIAlpZiAoKG5taSA+PSBOTUlfSU5WQUxJRCkgfHwgKG5taSA8IE5NSV9OT05FKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKG5taSA9PSBOTUlfTE9DQUxfQVBJQykgJiYgKG5taV9rbm93bl9jcHUoKSA9PSAwKSkKLQkJcmV0dXJuIDA7ICAvKiBubyBsYXBpYyBzdXBwb3J0ICovCiAJbm1pX3dhdGNoZG9nID0gbm1pOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1jYWxnYXJ5LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWNhbGdhcnkuYwppbmRleCAzMjE1Njc1Li4zZDY1YjFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWNhbGdhcnkuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWNhbGdhcnkuYwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIAl2b2lkICp0Ymw7CiAJaW50IGNhbGdhcnlfZm91bmQgPSAwOwogCXVuc2lnbmVkIGxvbmcgcHRyOwotCWludCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IG9mZnNldCwgcHJldl9vZmZzZXQ7CiAJaW50IHJldDsKIAogCS8qCkBAIC0xMDY4LDI5ICsxMDY4LDM2IEBACiAJaWYgKCFlYXJseV9wY2lfYWxsb3dlZCgpKQogCQlyZXR1cm47CiAKKwlwcmludGsoS0VSTl9ERUJVRyAiQ2FsZ2FyeTogZGV0ZWN0aW5nIENhbGdhcnkgdmlhIEJJT1MgRUJEQSBhcmVhXG4iKTsKKwogCXB0ciA9ICh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChnZXRfYmlvc19lYmRhKCkpOwogCiAJcmlvX3RhYmxlX2hkciA9IE5VTEw7CisJcHJldl9vZmZzZXQgPSAwOwogCW9mZnNldCA9IDB4MTgwOwotCXdoaWxlIChvZmZzZXQpIHsKKwkvKgorCSAqIFRoZSBuZXh0IG9mZnNldCBpcyBzdG9yZWQgaW4gdGhlIDFzdCB3b3JkLgorCSAqIE9ubHkgcGFyc2UgdXAgdW50aWwgdGhlIG9mZnNldCBpbmNyZWFzZXM6CisJICovCisJd2hpbGUgKG9mZnNldCA+IHByZXZfb2Zmc2V0KSB7CiAJCS8qIFRoZSBibG9jayBpZCBpcyBzdG9yZWQgaW4gdGhlIDJuZCB3b3JkICovCiAJCWlmICgqKCh1bnNpZ25lZCBzaG9ydCAqKShwdHIgKyBvZmZzZXQgKyAyKSkgPT0gMHg0NzUyKXsKIAkJCS8qIHNldCB0aGUgcG9pbnRlciBwYXN0IHRoZSBvZmZzZXQgJiBibG9jayBpZCAqLwogCQkJcmlvX3RhYmxlX2hkciA9IChzdHJ1Y3QgcmlvX3RhYmxlX2hkciAqKShwdHIgKyBvZmZzZXQgKyA0KTsKIAkJCWJyZWFrOwogCQl9Ci0JCS8qIFRoZSBuZXh0IG9mZnNldCBpcyBzdG9yZWQgaW4gdGhlIDFzdCB3b3JkLiAwIG1lYW5zIG5vIG1vcmUgKi8KKwkJcHJldl9vZmZzZXQgPSBvZmZzZXQ7CiAJCW9mZnNldCA9ICooKHVuc2lnbmVkIHNob3J0ICopKHB0ciArIG9mZnNldCkpOwogCX0KIAlpZiAoIXJpb190YWJsZV9oZHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDYWxnYXJ5OiBVbmFibGUgdG8gbG9jYXRlICIKLQkJCQkiUmlvIEdyYW5kZSBUYWJsZSBpbiBFQkRBIC0gYmFpbGluZyFcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2FsZ2FyeTogVW5hYmxlIHRvIGxvY2F0ZSBSaW8gR3JhbmRlIHRhYmxlICIKKwkJICAgICAgICJpbiBFQkRBIC0gYmFpbGluZyFcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJcmV0ID0gYnVpbGRfZGV0YWlsX2FycmF5cygpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDYWxnYXJ5OiBidWlsZF9kZXRhaWxfYXJyYXlzIHJldCAlZFxuIiwgcmV0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNhbGdhcnk6IGJ1aWxkX2RldGFpbF9hcnJheXMgcmV0ICVkXG4iLCByZXQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMTIzLDYgKzExMzAsOSBAQAogCQl9CiAJfQogCisJcHJpbnRrKEtFUk5fREVCVUcgIkNhbGdhcnk6IGZpbmlzaGVkIGRldGVjdGlvbiwgQ2FsZ2FyeSAlc1xuIiwKKwkgICAgICAgY2FsZ2FyeV9mb3VuZCA/ICJmb3VuZCIgOiAibm90IGZvdW5kIik7CisKIAlpZiAoY2FsZ2FyeV9mb3VuZCkgewogCQlpb21tdV9kZXRlY3RlZCA9IDE7CiAJCWNhbGdhcnlfZGV0ZWN0ZWQgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYTQxOGVlNC4uY2JiYzZhZCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMDksNyArMTA5LDExIEBACiBzdGF0aWMgdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCS8qCisJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UKKwkgKiB0ZXN0IE5FRURfUkVTQ0hFRDoKKwkgKi8KKwlzbXBfbWIoKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKIAkJLyogRW5hYmxlcyBpbnRlcnJ1cHRzIG9uZSBpbnN0cnVjdGlvbiBiZWZvcmUgSExULgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKaW5kZXggOWYwNWJjOS4uNWNjNzZkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCkBAIC02NTYsNiArNjU2LDI1IEBACiAgKi8KIAogI2RlZmluZSBUSUNLX0NPVU5UIDEwMDAwMDAwMAorI2RlZmluZSBUSUNLX01JTiAgIDUwMDAKKworLyoKKyAqIFNvbWUgcGxhdGZvcm1zIHRha2UgcGVyaW9kaWMgU01JIGludGVycnVwdHMgd2l0aCA1bXMgZHVyYXRpb24uIE1ha2Ugc3VyZSBub25lCisgKiBvY2N1cnMgYmV0d2VlbiB0aGUgcmVhZHMgb2YgdGhlIGhwZXQgJiBUU0MuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCByZWFkX2hwZXRfdHNjKGludCAqaHBldCwgaW50ICp0c2MpCit7CisJaW50IHRzYzEsIHRzYzIsIGhwZXQxOworCisJZG8geworCQl0c2MxID0gZ2V0X2N5Y2xlc19zeW5jKCk7CisJCWhwZXQxID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOworCQl0c2MyID0gZ2V0X2N5Y2xlc19zeW5jKCk7CisJfSB3aGlsZSAodHNjMiAtIHRzYzEgPiBUSUNLX01JTik7CisJKmhwZXQgPSBocGV0MTsKKwkqdHNjID0gdHNjMjsKK30KKwogCiBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBocGV0X2NhbGlicmF0ZV90c2Modm9pZCkKIHsKQEAgLTY2NiwxMyArNjg1LDExIEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQlocGV0X3N0YXJ0ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwotCXJkdHNjbCh0c2Nfc3RhcnQpOworCXJlYWRfaHBldF90c2MoJmhwZXRfc3RhcnQsICZ0c2Nfc3RhcnQpOwogCiAJZG8gewogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQlocGV0X25vdyA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKLQkJdHNjX25vdyA9IGdldF9jeWNsZXNfc3luYygpOworCQlyZWFkX2hwZXRfdHNjKCZocGV0X25vdywgJnRzY19ub3cpOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfSB3aGlsZSAoKHRzY19ub3cgLSB0c2Nfc3RhcnQpIDwgVElDS19DT1VOVCAmJgogCQkgKGhwZXRfbm93IC0gaHBldF9zdGFydCkgPCBUSUNLX0NPVU5UKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKaW5kZXggYTE2NDFmZi4uMDlkMmU4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Vud2luZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTEwOSwxMSArMTEwLDYgQEAKIH0KIAogaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDEyOwotI2lmZGVmIENPTkZJR19TVEFDS19VTldJTkQKLXN0YXRpYyBpbnQgY2FsbF90cmFjZSA9IDE7Ci0jZWxzZQotI2RlZmluZSBjYWxsX3RyYWNlICgtMSkKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0tBTExTWU1TCiB2b2lkIHByaW50a19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKQEAgLTIxNiwzMiArMjEyLDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RydWN0IG9wc19hbmRfZGF0YSB7Ci0Jc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHM7Ci0Jdm9pZCAqZGF0YTsKLX07Ci0KLXN0YXRpYyBpbnQgZHVtcF90cmFjZV91bndpbmQoc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvLCB2b2lkICpjb250ZXh0KQotewotCXN0cnVjdCBvcHNfYW5kX2RhdGEgKm9hZCA9IChzdHJ1Y3Qgb3BzX2FuZF9kYXRhICopY29udGV4dDsKLQlpbnQgbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzcCA9IFVOV19TUChpbmZvKTsKLQotCWlmIChhcmNoX3Vud191c2VyX21vZGUoaW5mbykpCi0JCXJldHVybiAtMTsKLQl3aGlsZSAodW53aW5kKGluZm8pID09IDAgJiYgVU5XX1BDKGluZm8pKSB7Ci0JCW4rKzsKLQkJb2FkLT5vcHMtPmFkZHJlc3Mob2FkLT5kYXRhLCBVTldfUEMoaW5mbykpOwotCQlpZiAoYXJjaF91bndfdXNlcl9tb2RlKGluZm8pKQotCQkJYnJlYWs7Ci0JCWlmICgoc3AgJiB+KFBBR0VfU0laRSAtIDEpKSA9PSAoVU5XX1NQKGluZm8pICYgfihQQUdFX1NJWkUgLSAxKSkKLQkJICAgICYmIHNwID4gVU5XX1NQKGluZm8pKQotCQkJYnJlYWs7Ci0JCXNwID0gVU5XX1NQKGluZm8pOwotCX0KLQlyZXR1cm4gbjsKLX0KLQogI2RlZmluZSBNU0codHh0KSBvcHMtPndhcm5pbmcoZGF0YSwgdHh0KQogCiAvKgpAQCAtMjY5LDQwICsyMzksNiBAQAogCWlmICghdHNrKQogCQl0c2sgPSBjdXJyZW50OwogCi0JaWYgKGNhbGxfdHJhY2UgPj0gMCkgewotCQlpbnQgdW53X3JldCA9IDA7Ci0JCXN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyBpbmZvOwotCQlzdHJ1Y3Qgb3BzX2FuZF9kYXRhIG9hZCA9IHsgLm9wcyA9IG9wcywgLmRhdGEgPSBkYXRhIH07Ci0KLQkJaWYgKHJlZ3MpIHsKLQkJCWlmICh1bndpbmRfaW5pdF9mcmFtZV9pbmZvKCZpbmZvLCB0c2ssIHJlZ3MpID09IDApCi0JCQkJdW53X3JldCA9IGR1bXBfdHJhY2VfdW53aW5kKCZpbmZvLCAmb2FkKTsKLQkJfSBlbHNlIGlmICh0c2sgPT0gY3VycmVudCkKLQkJCXVud19yZXQgPSB1bndpbmRfaW5pdF9ydW5uaW5nKCZpbmZvLCBkdW1wX3RyYWNlX3Vud2luZCwKLQkJCQkJCSAgICAgICZvYWQpOwotCQllbHNlIHsKLQkJCWlmICh1bndpbmRfaW5pdF9ibG9ja2VkKCZpbmZvLCB0c2spID09IDApCi0JCQkJdW53X3JldCA9IGR1bXBfdHJhY2VfdW53aW5kKCZpbmZvLCAmb2FkKTsKLQkJfQotCQlpZiAodW53X3JldCA+IDApIHsKLQkJCWlmIChjYWxsX3RyYWNlID09IDEgJiYgIWFyY2hfdW53X3VzZXJfbW9kZSgmaW5mbykpIHsKLQkJCQlvcHMtPndhcm5pbmdfc3ltYm9sKGRhdGEsCi0JCQkJCSAgICAgIkRXQVJGMiB1bndpbmRlciBzdHVjayBhdCAlcyIsCi0JCQkJCSAgICAgVU5XX1BDKCZpbmZvKSk7Ci0JCQkJaWYgKChsb25nKVVOV19TUCgmaW5mbykgPCAwKSB7Ci0JCQkJCU1TRygiTGVmdG92ZXIgaW5leGFjdCBiYWNrdHJhY2U6Iik7Ci0JCQkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKilVTldfU1AoJmluZm8pOwotCQkJCQlpZiAoIXN0YWNrKQotCQkJCQkJZ290byBvdXQ7Ci0JCQkJfSBlbHNlCi0JCQkJCU1TRygiRnVsbCBpbmV4YWN0IGJhY2t0cmFjZSBhZ2FpbjoiKTsKLQkJCX0gZWxzZSBpZiAoY2FsbF90cmFjZSA+PSAxKQotCQkJCWdvdG8gb3V0OwotCQkJZWxzZQotCQkJCU1TRygiRnVsbCBpbmV4YWN0IGJhY2t0cmFjZSBhZ2FpbjoiKTsKLQkJfSBlbHNlCi0JCQlNU0coIkluZXhhY3QgYmFja3RyYWNlOiIpOwotCX0KIAlpZiAoIXN0YWNrKSB7CiAJCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJCXN0YWNrID0gJmR1bW15OwpAQCAtMzgzLDEwICszMTksOSBAQAogCS8qCiAJICogVGhpcyBoYW5kbGVzIHRoZSBwcm9jZXNzIHN0YWNrOgogCSAqLwotCXRpbmZvID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCXRpbmZvID0gdGFza190aHJlYWRfaW5mbyh0c2spOwogCUhBTkRMRV9TVEFDSyAodmFsaWRfc3RhY2tfcHRyKHRpbmZvLCBzdGFjaykpOwogI3VuZGVmIEhBTkRMRV9TVEFDSwotb3V0OgogCXB1dF9jcHUoKTsKIH0KIEVYUE9SVF9TWU1CT0woZHVtcF90cmFjZSk7CkBAIC01MjQsMzAgKzQ1OSwxNSBAQAogCXByaW50aygiXG4iKTsKIH0JCiAKLXZvaWQgaGFuZGxlX0JVRyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsgCi0Jc3RydWN0IGJ1Z19mcmFtZSBmOwotCWxvbmcgbGVuOwotCWNvbnN0IGNoYXIgKnByZWZpeCA9ICIiOworaW50IGlzX3ZhbGlkX2J1Z2FkZHIodW5zaWduZWQgbG9uZyByaXApCit7CisJdW5zaWduZWQgc2hvcnQgdWQyOwogCi0JaWYgKHVzZXJfbW9kZShyZWdzKSkKLQkJcmV0dXJuOyAKLQlpZiAoX19jb3B5X2Zyb21fdXNlcigmZiwgKGNvbnN0IHZvaWQgX191c2VyICopIHJlZ3MtPnJpcCwKLQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBidWdfZnJhbWUpKSkKLQkJcmV0dXJuOyAKLQlpZiAoZi5maWxlbmFtZSA+PSAwIHx8Ci0JICAgIGYudWQyWzBdICE9IDB4MGYgfHwgZi51ZDJbMV0gIT0gMHgwYikgCi0JCXJldHVybjsKLQlsZW4gPSBfX3N0cm5sZW5fdXNlcigoY2hhciAqKShsb25nKWYuZmlsZW5hbWUsIFBBVEhfTUFYKSAtIDE7Ci0JaWYgKGxlbiA8IDAgfHwgbGVuID49IFBBVEhfTUFYKQotCQlmLmZpbGVuYW1lID0gKGludCkobG9uZykidW5tYXBwZWQgZmlsZW5hbWUiOwotCWVsc2UgaWYgKGxlbiA+IDUwKSB7Ci0JCWYuZmlsZW5hbWUgKz0gbGVuIC0gNTA7Ci0JCXByZWZpeCA9ICIuLi4iOwotCX0KLQlwcmludGsoIi0tLS0tLS0tLS0tIFtjdXQgaGVyZSBdIC0tLS0tLS0tLSBbcGxlYXNlIGJpdGUgaGVyZSBdIC0tLS0tLS0tLVxuIik7Ci0JcHJpbnRrKEtFUk5fQUxFUlQgIktlcm5lbCBCVUcgYXQgJXMlLjUwczolZFxuIiwgcHJlZml4LCAoY2hhciAqKShsb25nKWYuZmlsZW5hbWUsIGYubGluZSk7Ci19IAorCWlmIChfX2NvcHlfZnJvbV91c2VyKCZ1ZDIsIChjb25zdCB2b2lkIF9fdXNlciAqKSByaXAsIHNpemVvZih1ZDIpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdWQyID09IDB4MGIwZjsKK30KIAogI2lmZGVmIENPTkZJR19CVUcKIHZvaWQgb3V0X29mX2xpbmVfYnVnKHZvaWQpCkBAIC02MjcsNyArNTQ3LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gb29wc19iZWdpbigpOwogCi0JaGFuZGxlX0JVRyhyZWdzKTsKKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJcmVwb3J0X2J1ZyhyZWdzLT5yaXApOworCiAJX19kaWUoc3RyLCByZWdzLCBlcnIpOwogCW9vcHNfZW5kKGZsYWdzKTsKIAlkb19leGl0KFNJR1NFR1YpOyAKQEAgLTEyMDAsMjEgKzExMjIsMyBAQAogCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oImtzdGFjayIsIGtzdGFja19zZXR1cCk7Ci0KLSNpZmRlZiBDT05GSUdfU1RBQ0tfVU5XSU5ECi1zdGF0aWMgaW50IF9faW5pdCBjYWxsX3RyYWNlX3NldHVwKGNoYXIgKnMpCi17Ci0JaWYgKCFzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoc3RyY21wKHMsICJvbGQiKSA9PSAwKQotCQljYWxsX3RyYWNlID0gLTE7Ci0JZWxzZSBpZiAoc3RyY21wKHMsICJib3RoIikgPT0gMCkKLQkJY2FsbF90cmFjZSA9IDA7Ci0JZWxzZSBpZiAoc3RyY21wKHMsICJuZXdmYWxsYmFjayIpID09IDApCi0JCWNhbGxfdHJhY2UgPSAxOwotCWVsc2UgaWYgKHN0cmNtcChzLCAibmV3IikgPT0gMCkKLQkJY2FsbF90cmFjZSA9IDI7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiY2FsbF90cmFjZSIsIGNhbGxfdHJhY2Vfc2V0dXApOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZhMWY4ZjQuLjFlNTRkZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMyw2ICsxMyw3IEBACiBPVVRQVVRfQVJDSChpMzg2Ong4Ni02NCkKIEVOVFJZKHBoeXNfc3RhcnR1cF82NCkKIGppZmZpZXNfNjQgPSBqaWZmaWVzOworX3Byb3h5X3BkYSA9IDA7CiBQSERSUyB7CiAJdGV4dCBQVF9MT0FEIEZMQUdTKDUpOwkvKiBSX0UgKi8KIAlkYXRhIFBUX0xPQUQgRkxBR1MoNyk7CS8qIFJXRSAqLwpAQCAtNTEsNiArNTIsOCBAQAogCiAgIFJPREFUQQogCisgIEJVR19UQUJMRQorCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOyAgICAgICAgLyogQWxpZ24gZGF0YSBzZWdtZW50IHRvIHBhZ2Ugc2l6ZSBib3VuZGFyeSAqLwogCQkJCS8qIERhdGEgKi8KICAgLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CkBAIC0yMTgsOSArMjIxLDcgQEAKICAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCiAgIC9ESVNDQVJELyA6IHsKIAkqKC5leGl0Y2FsbC5leGl0KQotI2lmbmRlZiBDT05GSUdfVU5XSU5EX0lORk8KIAkqKC5laF9mcmFtZSkKLSNlbmRpZgogCX0KIAogICBTVEFCU19ERUJVRwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3ZzeXNjYWxsLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdnN5c2NhbGwuYwppbmRleCA0YTY3M2Y1Li4yNDMzZDZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvdnN5c2NhbGwuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdnN5c2NhbGwuYwpAQCAtMjI1LDggKzIyNSw3IEBACiAKIHN0YXRpYyBpbnQgdnN5c2NhbGxfc3lzY3RsX25vc3RyYXQoY3RsX3RhYmxlICp0LCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sCi0JCQkJdm9pZCAqKmNvbnRleHQpCisJCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL0tjb25maWcgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCmluZGV4IGMxZTY5YTEuLjJlNzRjYjAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL0tjb25maWcKKysrIGIvYXJjaC94dGVuc2EvS2NvbmZpZwpAQCAtMzQsMzEgKzM0LDI0IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0CisJYm9vbAorCWRlZmF1bHQgbgorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCiBjaG9pY2UKIAlwcm9tcHQgIlh0ZW5zYSBQcm9jZXNzb3IgQ29uZmlndXJhdGlvbiIKLQlkZWZhdWx0IFhURU5TQV9DUFVfTElOVVhfQkUKKwlkZWZhdWx0IFhURU5TQV9WQVJJQU5UX0ZTRgogCi1jb25maWcgWFRFTlNBX0NQVV9MSU5VWF9CRQotCWJvb2wgImxpbnV4X2JlIgotCS0tLWhlbHAtLS0KLQkgIFRoZSBsaW51eF9iZSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbiBpcyB0aGUgYmFzZWxpbmUgWHRlbnNhCi0JICBjb25maWd1cmF0aW9ucyBpbmNsdWRlZCBpbiB0aGlzIGtlcm5lbCBhbmQgYWxzbyB1c2VkIGJ5Ci0JICBiaW51dGlscywgZ2NjLCBhbmQgZ2RiLiBJdCBjb250YWlucyBubyBUSUUsIG5vIGNvcHJvY2Vzc29ycywKLQkgIGFuZCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczoKLQotCSAgQ29kZSBEZW5zaXR5IE9wdGlvbiAgICAgICAgICAgICAgICAyIE1pc2MgU3BlY2lhbCBSZWdpc3RlcnMKLQkgIE5TQS9OU0FVIEluc3RydWN0aW9ucyAgICAgICAgICAgICAgMTI4LWJpdCBEYXRhIEJ1cyBXaWR0aAotCSAgUHJvY2Vzc29yIElEICAgICAgICAgICAgICAgICAgICAgICA4SywgMi13YXkgSSBhbmQgRCBDYWNoZXMKLQkgIFplcm8tT3ZlcmhlYWQgTG9vcHMgICAgICAgICAgICAgICAgMiBJbnN0IEFkZHJlc3MgQnJlYWsgUmVnaXN0ZXJzCi0JICBCaWcgRW5kaWFuICAgICAgICAgICAgICAgICAgICAgICAgIDIgRGF0YSBBZGRyZXNzIEJyZWFrIFJlZ2lzdGVycwotCSAgNjQgR2VuZXJhbC1QdXJwb3NlIFJlZ2lzdGVycyAgICAgICBKVEFHIEludGVyZmFjZSBhbmQgVHJhY2UgUG9ydAotCSAgMTcgSW50ZXJydXB0cyAgICAgICAgICAgICAgICAgICAgICBNTVUgdy8gVExCcyBhbmQgQXV0b3JlZmlsbAotCSAgMyBJbnRlcnJ1cHQgTGV2ZWxzICAgICAgICAgICAgICAgICA4IEF1dG9yZWZpbGwgV2F5cyAoSS9EIFRMQnMpCi0JICAzIFRpbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuYWxpZ25lZCBFeGNlcHRpb25zCitjb25maWcgWFRFTlNBX1ZBUklBTlRfRlNGCisJYm9vbCAiZnNmIgogZW5kY2hvaWNlCiAKIGNvbmZpZyBNTVUKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL01ha2VmaWxlIGIvYXJjaC94dGVuc2EvTWFrZWZpbGUKaW5kZXggM2EzYTRjNi4uOTVmODM2ZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvTWFrZWZpbGUKKysrIGIvYXJjaC94dGVuc2EvTWFrZWZpbGUKQEAgLTExLDEzICsxMSwxMyBAQAogIyB0aGlzIGFyY2hpdGVjdHVyZQogCiAjIENvcmUgY29uZmlndXJhdGlvbi4KLSMgKFVzZSBDUFU9PHh0ZW5zYV9jb25maWc+IHRvIHVzZSBhbm90aGVyIGRlZmF1bHQgY29tcGlsZXIuKQorIyAoVXNlIFZBUj08eHRlbnNhX2NvbmZpZz4gdG8gdXNlIGFub3RoZXIgZGVmYXVsdCBjb21waWxlci4pCiAKLWNwdS0kKENPTkZJR19YVEVOU0FfQ1BVX0xJTlVYX0JFKQk6PSBsaW51eF9iZQotY3B1LSQoQ09ORklHX1hURU5TQV9DUFVfTElOVVhfQ1VTVE9NKQk6PSBsaW51eF9jdXN0b20KK3ZhcmlhbnQtJChDT05GSUdfWFRFTlNBX1ZBUklBTlRfRlNGKQkJOj0gZnNmCit2YXJpYW50LSQoQ09ORklHX1hURU5TQV9WQVJJQU5UX0xJTlVYX0NVU1RPTSkJOj0gY3VzdG9tCiAKLUNQVSA9ICQoY3B1LXkpCi1leHBvcnQgQ1BVCitWQVJJQU5UID0gJCh2YXJpYW50LXkpCitleHBvcnQgVkFSSUFOVAogCiAjIFBsYXRmb3JtIGNvbmZpZ3VyYXRpb24KIApAQCAtMjcsOCArMjcsNiBAQAogUExBVEZPUk0gPSAkKHBsYXRmb3JtLXkpCiBleHBvcnQgUExBVEZPUk0KIAotQ1BQRkxBR1MJKz0gJChpZiAkKEtCVUlMRF9TUkMpLC1JJChzcmN0cmVlKS9pbmNsdWRlL2FzbS14dGVuc2EvKQotQ1BQRkxBR1MJKz0gLUlpbmNsdWRlL2FzbQogQ0ZMQUdTCQkrPSAtcGlwZSAtbWxvbmdjYWxscwogCiBLQlVJTERfREVGQ09ORklHIDo9IGlzc19kZWZjb25maWcKQEAgLTQxLDEyICszOSwxMiBAQAogCiAjIFRlc3QgZm9yIGNyb3NzIGNvbXBpbGluZwogCi1pZm5lcSAoJChDUFUpLCkKK2lmbmVxICgkKFZBUklBTlQpLCkKICAgQ09NUElMRV9BUkNIID0gJChzaGVsbCB1bmFtZSAtbSkKIAogICBpZm5lcSAoJChDT01QSUxFX0FSQ0gpLCB4dGVuc2EpCiAgICAgaWZuZGVmIENST1NTX0NPTVBJTEUKLSAgICAgIENST1NTX0NPTVBJTEUgPSB4dGVuc2FfJChDUFUpLQorICAgICAgQ1JPU1NfQ09NUElMRSA9IHh0ZW5zYV8kKFZBUklBTlQpLQogICAgIGVuZGlmCiAgIGVuZGlmCiBlbmRpZgpAQCAtNjgsMTQgKzY2LDEzIEBACiAKIGFyY2hwcmVwYXJlOiAkKGFyY2hpbmMpLy5wbGF0Zm9ybQogCi0jIFVwZGF0ZSBtYWNoaW5lIGNwdSBhbmQgcGxhdGZvcm0gc3ltbGlua3MgaWYgc29tZXRoaW5nIHdoaWNoIGFmZmVjdHMKKyMgVXBkYXRlIHByb2Nlc3NvciB2YXJpYW50IGFuZCBwbGF0Zm9ybSBzeW1saW5rcyBpZiBzb21ldGhpbmcgd2hpY2ggYWZmZWN0cwogIyB0aGVtIGNoYW5nZWQuCiAKICQoYXJjaGluYykvLnBsYXRmb3JtOiAkKHdpbGRjYXJkIGluY2x1ZGUvY29uZmlnL2FyY2gvKi5oKSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKLQlAZWNobyAnICBTWU1MSU5LICQoYXJjaGluYykveHRlbnNhL2NvbmZpZyAtPiAkKGFyY2hpbmMpL3h0ZW5zYS9jb25maWctJChDUFUpJworCUBlY2hvICcgIFNZTUxJTksgJChhcmNoaW5jKS92YXJpYW50IC0+ICQoYXJjaGluYykvdmFyaWFudC0kKFZBUklBTlQpJwogCSQoUSlta2RpciAtcCAkKGFyY2hpbmMpCi0JJChRKW1rZGlyIC1wICQoYXJjaGluYykveHRlbnNhCi0JJChRKWxuIC1mc24gJChzcmN0cmVlKS8kKGFyY2hpbmMpL3h0ZW5zYS9jb25maWctJChDUFUpICQoYXJjaGluYykveHRlbnNhL2NvbmZpZworCSQoUSlsbiAtZnNuICQoc3JjdHJlZSkvJChhcmNoaW5jKS92YXJpYW50LSQoVkFSSUFOVCkgJChhcmNoaW5jKS92YXJpYW50CiAJQGVjaG8gJyAgU1lNTElOSyAkKGFyY2hpbmMpL3BsYXRmb3JtIC0+ICQoYXJjaGluYykvcGxhdGZvcm0tJChQTEFURk9STSknCiAJJChRKWxuIC1mc24gJChzcmN0cmVlKS8kKGFyY2hpbmMpL3BsYXRmb3JtLSQoUExBVEZPUk0pICQoYXJjaGluYykvcGxhdGZvcm0KIAlAdG91Y2ggJEAKQEAgLTg5LDcgKzg2LDcgQEAKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICRACiAKIENMRUFOX0ZJTEVTCSs9IGFyY2gveHRlbnNhL3ZtbGludXgubGRzICAgICAgICAgICAgICAgICAgICAgIFwKLQkJICAgJChhcmNoaW5jKS9wbGF0Zm9ybSAkKGFyY2hpbmMpL3h0ZW5zYS9jb25maWcgXAorCQkgICAkKGFyY2hpbmMpL3BsYXRmb3JtICQoYXJjaGluYykvdmFyaWFudAlcCiAJCSAgICQoYXJjaGluYykvLnBsYXRmb3JtCiAKIGRlZmluZSBhcmNoaGVscApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvYm9vdC9ib290LWVsZi9ib290c3RyYXAuUyBiL2FyY2gveHRlbnNhL2Jvb3QvYm9vdC1lbGYvYm9vdHN0cmFwLlMKaW5kZXggZjg1N2ZjNy4uNDY0Mjk4YiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvYm9vdC9ib290LWVsZi9ib290c3RyYXAuUworKysgYi9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtZWxmL2Jvb3RzdHJhcC5TCkBAIC0xLDcgKzEsNCBAQAogCi0jaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9zcGVjcmVnLmg+Ci0jaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9jb3JlLmg+Ci0KICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvYm9vdC9ib290LXJlZGJvb3QvYm9vdHN0cmFwLlMgYi9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtcmVkYm9vdC9ib290c3RyYXAuUwppbmRleCBlZTYzNmIwLi44NDg0ODEyIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtcmVkYm9vdC9ib290c3RyYXAuUworKysgYi9hcmNoL3h0ZW5zYS9ib290L2Jvb3QtcmVkYm9vdC9ib290c3RyYXAuUwpAQCAtMSw5ICsxLDcgQEAKLQotI2RlZmluZSBfQVNNTEFOR1VBR0UKLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL3NwZWNyZWcuaD4KLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4KLSNpbmNsdWRlIDx4dGVuc2EvY2FjaGVhc20uaD4KLQorI2luY2x1ZGUgPGFzbS92YXJpYW50L2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWFzbS5oPgogCS8qCiAJICogUkItRGF0YTogUmVkQm9vdCBkYXRhL2JzcwogCSAqIFA6CSAgICBCb290LVBhcmFtZXRlcnMKQEAgLTc3LDggKzc1LDE0IEBACiAJLyogTm90ZTogVGhlIGFzc2VtYmxlciBjYW5ub3QgcmVsYXggImFkZGkgYTAsIGEwLCAuLi4iIHRvIGFuCiAJICAgbDMyciwgc28gd2UgbG9hZCB0byBhNCBmaXJzdC4gKi8KIAotCWFkZGkJYTQsIGEwLCBfX3N0YXJ0IC0gX19zdGFydF9hMAotCW1vdglhMCwgYTQKKwkjIGFkZGkJYTQsIGEwLCBfX3N0YXJ0IC0gX19zdGFydF9hMAorCSMgbW92CWEwLCBhNAorCisJbW92aQlhNCwgX19zdGFydAorCW1vdmkJYTUsIF9fc3RhcnRfYTAKKwlhZGQJYTQsIGEwLCBhNAorCXN1YglhMCwgYTQsIGE1CisKIAltb3ZpCWE0LCBfX3N0YXJ0CiAJbW92aQlhNSwgX19yZWxvY19lbmQKIApAQCAtMTA2LDkgKzExMCwxMyBAQAogCS8qIFdlIGhhdmUgdG8gZmx1c2ggYW5kIGludmFsaWRhdGUgdGhlIGNhY2hlcyBoZXJlIGJlZm9yZSB3ZSBqdW1wLiAqLwogCiAjaWYgWENIQUxfRENBQ0hFX0lTX1dSSVRFQkFDSwotCWRjYWNoZV93cml0ZWJhY2tfYWxsICBhNSwgYTYKKworCV9fX2ZsdXNoX2RjYWNoZV9hbGwgYTUgYTYKKwogI2VuZGlmCi0JaWNhY2hlX2ludmFsaWRhdGVfYWxsIGE1LCBhNgorCisJX19faW52YWxpZGF0ZV9pY2FjaGVfYWxsIGE1IGE2CisJaXN5bmMKIAogCW1vdmkJYTExLCBfcmVsb2MKIAlqeAlhMTEKQEAgLTIwOSw5ICsyMTcsMTQgQEAKIAkvKiBqdW1wIHRvIHRoZSBrZXJuZWwgKi8KIDI6CiAjaWYgWENIQUxfRENBQ0hFX0lTX1dSSVRFQkFDSwotCWRjYWNoZV93cml0ZWJhY2tfYWxsIGE1LCBhNgorCisJX19fZmx1c2hfZGNhY2hlX2FsbCBhNSBhNgorCiAjZW5kaWYKLQlpY2FjaGVfaW52YWxpZGF0ZV9hbGwgYTUsIGE2CisKKwlfX19pbnZhbGlkYXRlX2ljYWNoZV9hbGwgYTUgYTYKKworCWlzeW5jCiAKIAltb3ZpCWE1LCBfX3N0YXJ0CiAJbW92aQlhMywgYm9vdF9pbml0cmRfc3RhcnQKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2NvbmZpZ3MvaXNzX2RlZmNvbmZpZyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvaXNzX2RlZmNvbmZpZwppbmRleCA4MDI2MjFkLi5mMTk4NTQwIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9jb25maWdzL2lzc19kZWZjb25maWcKKysrIGIvYXJjaC94dGVuc2EvY29uZmlncy9pc3NfZGVmY29uZmlnCkBAIC01MywxMSArNTMsNyBAQAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKICMKLUNPTkZJR19YVEVOU0FfQVJDSF9MSU5VWF9CRT15Ci0jIENPTkZJR19YVEVOU0FfQVJDSF9MSU5VWF9MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YVEVOU0FfQVJDSF9MSU5VWF9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hURU5TQV9BUkNIX1M1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1hURU5TQV9DVVNUT00gaXMgbm90IHNldAorQ09ORklHX1hURU5TQV9WQVJJQU5UX0ZTRj15CiBDT05GSUdfTU1VPXkKICMgQ09ORklHX1hURU5TQV9VTkFMSUdORURfVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveHRlbnNhL2tlcm5lbC9NYWtlZmlsZQppbmRleCBkNTczMDE3Li43MWY3MzNjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCiAKIG9iai15IDo9IGFsaWduLm8gZW50cnkubyBpcnEubyBjb3Byb2Nlc3Nvci5vIHByb2Nlc3MubyBwdHJhY2UubyBzZW1hcGhvcmUubyAgXAotCSBzZXR1cC5vIHNpZ25hbC5vIHN5c2NhbGxzLm8gdGltZS5vIHRyYXBzLm8gdmVjdG9ycy5vIHBsYXRmb3JtLm8gIFwKKwkgc2V0dXAubyBzaWduYWwubyBzeXNjYWxsLm8gdGltZS5vIHRyYXBzLm8gdmVjdG9ycy5vIHBsYXRmb3JtLm8gIFwKIAkgcGNpLWRtYS5vCiAKICMjIHdpbmRvd3NwaWxsLm8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9hbGlnbi5TIGIvYXJjaC94dGVuc2Eva2VybmVsL2FsaWduLlMKaW5kZXggYTQ5NTY1Ny4uMzNkNmU5ZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL2FsaWduLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2FsaWduLlMKQEAgLTE2LDE0ICsxNiw5IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAogI2lmIFhDSEFMX1VOQUxJR05FRF9MT0FEX0VYQ0VQVElPTiB8fCBYQ0hBTF9VTkFMSUdORURfU1RPUkVfRVhDRVBUSU9OCiAKQEAgLTIxNiw3ICsyMTEsNyBAQAogCiAJZXh0dWkJYTUsIGE0LCBJTlNOX09QMCwgNAkjIGdldCBpbnNuLm9wMCBuaWJibGUKIAotI2lmIFhDSEFMX0hBVkVfTkFSUk9XCisjaWYgWENIQUxfSEFWRV9ERU5TSVRZCiAJX2JlcWkJYTUsIE9QMF9MMzJJX04sIC5MbG9hZAkjIEwzMkkuTiwganVtcAogCWFkZGkJYTYsIGE1LCAtT1AwX1MzMklfTgogCV9iZXF6CWE2LCAuTHN0b3JlCQkjIFMzMkkuTiwgZG8gYSBzdG9yZQpAQCAtMjUxLDcgKzI0Niw3IEBACiAjZW5kaWYKIAlfX3NyY19iCWEzLCBhNSwgYTYJCSMgYTMgaGFzIHRoZSBkYXRhIHdvcmQKIAotI2lmIFhDSEFMX0hBVkVfTkFSUk9XCisjaWYgWENIQUxfSEFWRV9ERU5TSVRZCiAJYWRkaQlhNywgYTcsIDIJCSMgaW5jcmVtZW50IFBDIChhc3N1bWUgMTYtYml0IGluc24pCiAKIAlleHR1aQlhNSwgYTQsIElOU05fT1AwLCA0CkBAIC0yNzksMTQgKzI3NCwxNCBAQAogCiAxOgogCi0jaWYgWENIQUxfSEFWRV9MT09QCi0JcnNyCWEzLCBMRU5ECQkjIGNoZWNrIGlmIHdlIHJlYWNoZWQgTEVORAotCWJuZQlhNywgYTMsIDFmCi0JcnNyCWEzLCBMQ09VTlQJCSMgYW5kIExDT1VOVCAhPSAwCi0JYmVxeglhMywgMWYKLQlhZGRpCWEzLCBhMywgLTEJCSMgZGVjcmVtZW50IExDT1VOVCBhbmQgc2V0CisjaWYgWENIQUxfSEFWRV9MT09QUworCXJzcglhNSwgTEVORAkJIyBjaGVjayBpZiB3ZSByZWFjaGVkIExFTkQKKwlibmUJYTcsIGE1LCAxZgorCXJzcglhNSwgTENPVU5UCQkjIGFuZCBMQ09VTlQgIT0gMAorCWJlcXoJYTUsIDFmCisJYWRkaQlhNSwgYTUsIC0xCQkjIGRlY3JlbWVudCBMQ09VTlQgYW5kIHNldAogCXJzcglhNywgTEJFRwkJIyBzZXQgUEMgdG8gTEJFR0lOCi0Jd3NyCWEzLCBMQ09VTlQKKwl3c3IJYTUsIExDT1VOVAogI2VuZGlmCiAKIDE6CXdzcglhNywgRVBDXzEJCSMgc2tpcCBsb2FkIGluc3RydWN0aW9uCkBAIC0zMzYsNyArMzMxLDcgQEAKIAogCW1vdmkJYTYsIDAJCQkjIG1hc2s6IGZmZmZmZmZmOjAwMDAwMDAwCiAKLSNpZiBYQ0hBTF9IQVZFX05BUlJPVworI2lmIFhDSEFMX0hBVkVfREVOU0lUWQogCWFkZGkJYTcsIGE3LCAyCQkjIGluY3IuIFBDLGFzc3VtZSAxNi1iaXQgaW5zdHJ1Y3Rpb24KIAogCWV4dHVpCWE1LCBhNCwgSU5TTl9PUDAsIDQJIyBleHRyYWN0IE9QMApAQCAtMzU5LDE0ICszNTQsMTQgQEAKIAkvKiBHZXQgbWVtb3J5IGFkZHJlc3MgKi8KIAogMToKLSNpZiBYQ0hBTF9IQVZFX0xPT1AKLQlyc3IJYTMsIExFTkQJCSMgY2hlY2sgaWYgd2UgcmVhY2hlZCBMRU5ECi0JYm5lCWE3LCBhMywgMWYKLQlyc3IJYTMsIExDT1VOVAkJIyBhbmQgTENPVU5UICE9IDAKLQliZXF6CWEzLCAxZgotCWFkZGkJYTMsIGEzLCAtMQkJIyBkZWNyZW1lbnQgTENPVU5UIGFuZCBzZXQKKyNpZiBYQ0hBTF9IQVZFX0xPT1BTCisJcnNyCWE0LCBMRU5ECQkjIGNoZWNrIGlmIHdlIHJlYWNoZWQgTEVORAorCWJuZQlhNywgYTQsIDFmCisJcnNyCWE0LCBMQ09VTlQJCSMgYW5kIExDT1VOVCAhPSAwCisJYmVxeglhNCwgMWYKKwlhZGRpCWE0LCBhNCwgLTEJCSMgZGVjcmVtZW50IExDT1VOVCBhbmQgc2V0CiAJcnNyCWE3LCBMQkVHCQkjIHNldCBQQyB0byBMQkVHSU4KLQl3c3IJYTMsIExDT1VOVAorCXdzcglhNCwgTENPVU5UCiAjZW5kaWYKIAogMToJd3NyCWE3LCBFUENfMQkJIyBza2lwIHN0b3JlIGluc3RydWN0aW9uCkBAIC00MTYsNiArNDExLDcgQEAKIAogCS8qIFJlc3RvcmUgd29ya2luZyByZWdpc3RlciAqLwogCisJbDMyaQlhOCwgYTIsIFBUX0FSRUc4CiAJbDMyaQlhNywgYTIsIFBUX0FSRUc3CiAJbDMyaQlhNiwgYTIsIFBUX0FSRUc2CiAJbDMyaQlhNSwgYTIsIFBUX0FSRUc1CkBAIC00NDYsNyArNDQyLDcgQEAKIAltb3YJYTEsIGEyCiAKIAlyc3IJYTAsIFBTCi0gICAgICAgIGJic2kubCAgYTIsIFBTX1VNX1NISUZULCAxZiAgICAgIyBqdW1wIGlmIHVzZXIgbW9kZQorICAgICAgICBiYnNpLmwgIGEyLCBQU19VTV9CSVQsIDFmICAgICAjIGp1bXAgaWYgdXNlciBtb2RlCiAKIAltb3ZpCWEwLCBfa2VybmVsX2V4Y2VwdGlvbgogCWp4CWEwCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDdjZDFkN2YuLmIyNTZjZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC04Nyw2ICs4NywxMSBAQAogCURFRklORShNTV9DT05URVhULCBvZmZzZXRvZiAoc3RydWN0IG1tX3N0cnVjdCwgY29udGV4dCkpOwogCUJMQU5LKCk7CiAJREVGSU5FKFBUX1NJTkdMRVNURVBfQklULCBQVF9TSU5HTEVTVEVQX0JJVCk7CisKKwkvKiBjb25zdGFudHMgKi8KKwlERUZJTkUoX0NMT05FX1ZNLCBDTE9ORV9WTSk7CisJREVGSU5FKF9DTE9ORV9VTlRSQUNFRCwgQ0xPTkVfVU5UUkFDRUQpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9jb3Byb2Nlc3Nvci5TIGIvYXJjaC94dGVuc2Eva2VybmVsL2NvcHJvY2Vzc29yLlMKaW5kZXggY2Y1YTkzZi4uMDFiY2I5ZiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL2NvcHJvY2Vzc29yLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2NvcHJvY2Vzc29yLlMKQEAgLTkwLDcgKzkwLDYgQEAKIAlyc3luYwogCXJldHcKIAotI2VuZGlmCiAKIEVOVFJZKHNhdmVfY29wcm9jZXNzb3JfZXh0cmEpCiAJZW50cnkJc3AsIDE2CkBAIC0xOTcsNCArMTk2LDUgQEAKIAlYQ0hBTF9DUDdfU0FfQ09OVEVOVFNfTElCREIKIAkud29yZAkweEZDMDAwMDAwCS8qIGludmFsaWQgcmVnaXN0ZXIgbnVtYmVyLG1hcmtzIGVuZCBvZiB0YWJsZSovCiBfeHRlbnNhX3JlZ2luZm9fdGFibGVfZW5kOgorI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMKaW5kZXggODllNDA5ZS4uOWUyNzFiYSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgotI2luY2x1ZGUgPHh0ZW5zYS9jb3JlYXNtLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIC8qIFVuaW1wbGVtZW50ZWQgZmVhdHVyZXMuICovCiAKQEAgLTM2NCw3ICszNjQsNyBAQAogCW1vdmkJYTIsIDEKIAlleHR1aQlhMywgYTMsIDAsIDEJCSMgYTMgPSBQUy5JTlRMRVZFTFswXQogCW1vdmVxeglhMywgYTIsIGEwCQkjIGEzID0gMSBpZmYgaW50ZXJydXB0IGV4Y2VwdGlvbgotCW1vdmkJYTIsIFBTX1dPRV9NQVNLCisJbW92aQlhMiwgMSA8PCBQU19XT0VfQklUCiAJb3IJYTMsIGEzLCBhMgogCXJzcglhMCwgRVhDQ0FVU0UKIAl4c3IJYTMsIFBTCkBAIC0zOTksNyArMzk5LDcgQEAKIAkvKiBKdW1wIGlmIHdlIGFyZSByZXR1cm5pbmcgZnJvbSBrZXJuZWwgZXhjZXB0aW9ucy4gKi8KIAogMToJbDMyaQlhMywgYTEsIFBUX1BTCi0JX2Jic2kubAlhMywgUFNfVU1fU0hJRlQsIDJmCisJX2Jic2kubAlhMywgUFNfVU1fQklULCAyZgogCWoJa2VybmVsX2V4Y2VwdGlvbl9leGl0CiAKIAkvKiBTcGVjaWZpYyB0byBhIHVzZXIgZXhjZXB0aW9uIGV4aXQ6CkBAIC00MjIsNyArNDIyLDcgQEAKIAkgKiAgICAgICAoSGludDogVGhlcmUgaXMgb25seSBvbmUgdXNlciBleGNlcHRpb24gZnJhbWUgb24gc3RhY2spCiAJICovCiAKLQltb3ZpCWEzLCBQU19XT0VfTUFTSworCW1vdmkJYTMsIDEgPDwgUFNfV09FX0JJVAogCiAJX2Jic2kubAlhNCwgVElGX05FRURfUkVTQ0hFRCwgM2YKIAlfYmJjaS5sCWE0LCBUSUZfU0lHUEVORElORywgNGYKQEAgLTY5NCw3ICs2OTQsNyBAQAogRU5UUlkoZGVidWdfZXhjZXB0aW9uKQogCiAJcnNyCWEwLCBFUFMgKyBYQ0hBTF9ERUJVR0xFVkVMCi0JYmJzaS5sCWEwLCBQU19FWENNX1NISUZULCAxZgkjIGV4Y2VwdGlvbiBtb2RlCisJYmJzaS5sCWEwLCBQU19FWENNX0JJVCwgMWYJIyBleGNlcHRpb24gbW9kZQogCiAJLyogU2V0IEVQQ18xIGFuZCBFWENDQVVTRSAqLwogCkBAIC03MDcsNyArNzA3LDcgQEAKIAogCS8qIFJlc3RvcmUgUFMgdG8gdGhlIHZhbHVlIGJlZm9yZSB0aGUgZGVidWcgZXhjIGJ1dCB3aXRoIFBTLkVYQ00gc2V0LiovCiAKLQltb3ZpCWEyLCAxIDw8IFBTX0VYQ01fU0hJRlQKKwltb3ZpCWEyLCAxIDw8IFBTX0VYQ01fQklUCiAJb3IJYTIsIGEwLCBhMgogCW1vdmkJYTAsIGRlYnVnX2V4Y2VwdGlvbgkjIHJlc3RvcmUgYTMsIGRlYnVnIGp1bXAgdmVjdG9yCiAJd3NyCWEyLCBQUwpAQCAtNzE1LDcgKzcxNSw3IEBACiAKIAkvKiBTd2l0Y2ggdG8ga2VybmVsL3VzZXIgc3RhY2ssIHJlc3RvcmUganVtcCB2ZWN0b3IsIGFuZCBzYXZlIGEwICovCiAKLQliYnNpLmwJYTIsIFBTX1VNX1NISUZULCAyZgkjIGp1bXAgaWYgdXNlciBtb2RlCisJYmJzaS5sCWEyLCBQU19VTV9CSVQsIDJmCSMganVtcCBpZiB1c2VyIG1vZGUKIAogCWFkZGkJYTIsIGExLCAtMTYtUFRfU0laRQkjIGFzc3VtZSBrZXJuZWwgc3RhY2sKIAlzMzJpCWEwLCBhMiwgUFRfQVJFRzAKQEAgLTc3OCw3ICs3NzgsNyBAQAogCXdzcglhMSwgV0lORE9XQkFTRQogCXJzeW5jCiAKLQltb3ZpCWExLCBQU19XT0VfTUFTSyB8IDEKKwltb3ZpCWExLCAoMSA8PCBQU19XT0VfQklUKSB8IDEKIAl3c3IJYTEsIFBTCiAJcnN5bmMKIApAQCAtMTAwNCwxMyArMTAwNCwxMCBAQAogCiAJcnNyCWEwLCBERVBDCQkJIyBnZXQgc3lzY2FsbC1ucgogCV9iZXF6CWEwLCBmYXN0X3N5c2NhbGxfc3BpbGxfcmVnaXN0ZXJzCi0KLQlhZGRpCWEwLCBhMCwgLV9fTlJfc3lzeHRlbnNhCi0JX2JlcXoJYTAsIGZhc3Rfc3lzY2FsbF9zeXN4dGVuc2EKKwlfYmVxaQlhMCwgX19OUl94dGVuc2EsIGZhc3Rfc3lzY2FsbF94dGVuc2EKIAogCWoJa2VybmVsX2V4Y2VwdGlvbgogCi0KIEVOVFJZKGZhc3Rfc3lzY2FsbF91c2VyKQogCiAJLyogU2tpcCBzeXNjYWxsLiAqLwpAQCAtMTAyNCw5ICsxMDIxLDcgQEAKIAogCXJzcglhMCwgREVQQwkJCSMgZ2V0IHN5c2NhbGwtbnIKIAlfYmVxeglhMCwgZmFzdF9zeXNjYWxsX3NwaWxsX3JlZ2lzdGVycwotCi0JYWRkaQlhMCwgYTAsIC1fX05SX3N5c3h0ZW5zYQotCV9iZXF6CWEwLCBmYXN0X3N5c2NhbGxfc3lzeHRlbnNhCisJX2JlcWkJYTAsIF9fTlJfeHRlbnNhLCBmYXN0X3N5c2NhbGxfeHRlbnNhCiAKIAlqCXVzZXJfZXhjZXB0aW9uCiAKQEAgLTEwNDcsMTggKzEwNDIsMTkgQEAKIC8qCiAgKiBzeXN4dGVuc2Egc3lzY2FsbCBoYW5kbGVyCiAgKgotICogaW50IHN5c3h0ZW5zYSAoWFRFTlNBX0FUT01JQ19TRVQsIHB0ciwgdmFsLCB1bnVzZWQpOwotICogaW50IHN5c3h0ZW5zYSAoWFRFTlNBX0FUT01JQ19BREQsIHB0ciwgdmFsLCB1bnVzZWQpOwotICogaW50IHN5c3h0ZW5zYSAoWFRFTlNBX0FUT01JQ19FWEdfQURELCBwdHIsIHZhbCwgdW51c2VkKTsKLSAqIGludCBzeXN4dGVuc2EgKFhURU5TQV9BVE9NSUNfQ01QX1NXUCwgcHRyLCBvbGR2YWwsIG5ld3ZhbCk7Ci0gKiBhMiAgICAgICAgICAgICAgICAgICAgYTYgICAgICAgICAgICAgIGEzICAgIGE0ICAgICAgYTUKKyAqIGludCBzeXN4dGVuc2EgKFNZU19YVEVOU0FfQVRPTUlDX1NFVCwgICAgIHB0ciwgdmFsLCAgICB1bnVzZWQpOworICogaW50IHN5c3h0ZW5zYSAoU1lTX1hURU5TQV9BVE9NSUNfQURELCAgICAgcHRyLCB2YWwsICAgIHVudXNlZCk7CisgKiBpbnQgc3lzeHRlbnNhIChTWVNfWFRFTlNBX0FUT01JQ19FWEdfQURELCBwdHIsIHZhbCwgICAgdW51c2VkKTsKKyAqIGludCBzeXN4dGVuc2EgKFNZU19YVEVOU0FfQVRPTUlDX0NNUF9TV1AsIHB0ciwgb2xkdmFsLCBuZXd2YWwpOworICogICAgICAgIGEyICAgICAgICAgICAgYTYgICAgICAgICAgICAgICAgICAgYTMgICAgYTQgICAgICBhNQogICoKICAqIEVudHJ5IGNvbmRpdGlvbjoKICAqCi0gKiAgIGEwOgl0cmFzaGVkLCBvcmlnaW5hbCB2YWx1ZSBzYXZlZCBvbiBzdGFjayAoUFRfQVJFRzApCisgKiAgIGEwOglhMiAoc3lzY2FsbC1uciksIG9yaWdpbmFsIHZhbHVlIHNhdmVkIG9uIHN0YWNrIChQVF9BUkVHMCkKICAqICAgYTE6CWExCi0gKiAgIGEyOgluZXcgc3RhY2sgcG9pbnRlciwgb3JpZ2luYWwgaW4gREVQQwotICogICBhMzoJZGlzcGF0Y2ggdGFibGUKKyAqICAgYTI6CW5ldyBzdGFjayBwb2ludGVyLCBvcmlnaW5hbCBpbiBhMCBhbmQgREVQQworICogICBhMzoJZGlzcGF0Y2ggdGFibGUsIG9yaWdpbmFsIGluIGV4Y3NhdmVfMQorICogICBhNC4uYTE1Ogl1bmNoYW5nZWQKICAqICAgZGVwYzoJYTIsIG9yaWdpbmFsIHZhbHVlIHNhdmVkIG9uIHN0YWNrIChQVF9ERVBDKQogICogICBleGNzYXZlXzE6CWEzCiAgKgpAQCAtMTA5MSw1OSArMTA4Nyw2MiBAQAogI2RlZmluZSBDQVRDSAkJCQkJCQkJXAogNjc6CiAKLUVOVFJZKGZhc3Rfc3lzY2FsbF9zeXN4dGVuc2EpCitFTlRSWShmYXN0X3N5c2NhbGxfeHRlbnNhKQogCi0JX2JlcXoJYTYsIDFmCi0JX2JsdGkJYTYsIFNZU1hURU5TQV9DT1VOVCwgMmYKKwl4c3IJYTMsIEVYQ1NBVkVfMQkJIyByZXN0b3JlIGEzLCBleGNzYXZlMQogCi0xOglqCXVzZXJfZXhjZXB0aW9uCi0KLTI6CXhzcglhMywgRVhDU0FWRV8xCQkjIHJlc3RvcmUgYTMsIGV4Y3NhdmUxCi0JczMyaQlhNywgYTIsIFBUX0FSRUc3Ci0KKwlzMzJpCWE3LCBhMiwgUFRfQVJFRzcJIyB3ZSBuZWVkIGFuIGFkZGl0aW9uYWwgcmVnaXN0ZXIKIAltb3ZpCWE3LCA0CQkJIyBzaXplb2YodW5zaWduZWQgaW50KQotCWFjY2Vzc19vayBhMCwgYTMsIGE3LCBhMiwgLkxlYWMKKwlhY2Nlc3Nfb2sgYTMsIGE3LCBhMCwgYTIsIC5MZWFjCSMgYTA6IHNjcmF0Y2ggcmVnLCBhMjogc3AKIAotCV9iZXFpCWE2LCBTWVNYVEVOU0FfQVRPTUlDX1NFVCwgLkxzZXQKLQlfYmVxaQlhNiwgU1lTWFRFTlNBX0FUT01JQ19FWEdfQURELCAuTGV4ZwotCV9iZXFpCWE2LCBTWVNYVEVOU0FfQVRPTUlDX0FERCwgLkxhZGQKKwlhZGRpCWE2LCBhNiwgLTEJCSMgYXNzdW1pbmcgU1lTX1hURU5TQV9BVE9NSUNfU0VUID0gMQorCV9iZ2V1aQlhNiwgU1lTX1hURU5TQV9DT1VOVCAtIDEsIC5MaWxsCisJX2JuZWkJYTYsIFNZU19YVEVOU0FfQVRPTUlDX0NNUF9TV1AgLSAxLCAuTG5zd3AKIAotCS8qIEZhbGwgdGhyb3VnaCBmb3IgU1lTWFRFTlNBX0FUT01JQ19DTVBfU1dQICovCisJLyogRmFsbCB0aHJvdWdoIGZvciBBVE9NSUNfQ01QX1NXUC4gKi8KIAogLkxzd3A6CS8qIEF0b21pYyBjb21wYXJlIGFuZCBzd2FwICovCiAKLVRSWQlsMzJpCWE3LCBhMywgMAkJIyByZWFkIG9sZCB2YWx1ZQotCWJuZQlhNywgYTQsIDFmCQkjIHNhbWUgYXMgb2xkIHZhbHVlPyBqdW1wCi0JczMyaQlhNSwgYTMsIDAJCSMgZGlmZmVyZW50LCBtb2RpZnkgdmFsdWUKLQltb3ZpCWE3LCAxCQkJIyBhbmQgcmV0dXJuIDEKLQlqCS5McmV0CitUUlkJbDMyaQlhMCwgYTMsIDAJCSMgcmVhZCBvbGQgdmFsdWUKKwlibmUJYTAsIGE0LCAxZgkJIyBzYW1lIGFzIG9sZCB2YWx1ZT8ganVtcAorVFJZCXMzMmkJYTUsIGEzLCAwCQkjIGRpZmZlcmVudCwgbW9kaWZ5IHZhbHVlCisJbDMyaQlhNywgYTIsIFBUX0FSRUc3CSMgcmVzdG9yZSBhNworCWwzMmkJYTAsIGEyLCBQVF9BUkVHMAkjIHJlc3RvcmUgYTAKKwltb3ZpCWEyLCAxCQkJIyBhbmQgcmV0dXJuIDEKKwlhZGRpCWE2LCBhNiwgMQkJIyByZXN0b3JlIGE2IChyZWFsbHkgbmVjZXNzYXJ5PykKKwlyZmUKIAotMToJbW92aQlhNywgMAkJCSMgc2FtZSB2YWx1ZXM6IHJldHVybiAwCi0JagkuTHJldAorMToJbDMyaQlhNywgYTIsIFBUX0FSRUc3CSMgcmVzdG9yZSBhNworCWwzMmkJYTAsIGEyLCBQVF9BUkVHMAkjIHJlc3RvcmUgYTAKKwltb3ZpCWEyLCAwCQkJIyByZXR1cm4gMCAobm90ZSB0aGF0IHdlIGNhbm5vdCBzZXQKKwlhZGRpCWE2LCBhNiwgMQkJIyByZXN0b3JlIGE2IChyZWFsbHkgbmVjZXNzYXJ5PykKKwlyZmUKIAotLkxhZGQ6CS8qIEF0b21pYyBhZGQgKi8KLS5MZXhnOgkvKiBBdG9taWMgKGV4Y2hhbmdlKSBhZGQgKi8KKy5MbnN3cDoJLyogQXRvbWljIHNldCwgYWRkLCBhbmQgZXhnX2FkZC4gKi8KIAotVFJZCWwzMmkJYTcsIGEzLCAwCi0JYWRkCWE0LCBhNCwgYTcKLQlzMzJpCWE0LCBhMywgMAotCWoJLkxyZXQKK1RSWQlsMzJpCWE3LCBhMywgMAkJIyBvcmlnCisJYWRkCWEwLCBhNCwgYTcJCSMgKyBhcmcKKwltb3ZlcXoJYTAsIGE0LCBhNgkJIyBzZXQKK1RSWQlzMzJpCWEwLCBhMywgMAkJIyB3cml0ZSBuZXcgdmFsdWUKIAotLkxzZXQ6CS8qIEF0b21pYyBzZXQgKi8KLQotVFJZCWwzMmkJYTcsIGEzLCAwCQkjIHJlYWQgb2xkIHZhbHVlIGFzIHJldHVybiB2YWx1ZQotCXMzMmkJYTQsIGEzLCAwCQkjIHdyaXRlIG5ldyB2YWx1ZQotCi0uTHJldDoJbW92CWEwLCBhMgorCW1vdglhMCwgYTIKIAltb3YJYTIsIGE3Ci0JbDMyaQlhNywgYTAsIFBUX0FSRUc3Ci0JbDMyaQlhMywgYTAsIFBUX0FSRUczCi0JbDMyaQlhMCwgYTAsIFBUX0FSRUcwCisJbDMyaQlhNywgYTAsIFBUX0FSRUc3CSMgcmVzdG9yZSBhNworCWwzMmkJYTAsIGEwLCBQVF9BUkVHMAkjIHJlc3RvcmUgYTAKKwlhZGRpCWE2LCBhNiwgMQkJIyByZXN0b3JlIGE2IChyZWFsbHkgbmVjZXNzYXJ5PykKIAlyZmUKIAogQ0FUQ0gKLS5MZWFjOgltb3ZpCWE3LCAtRUZBVUxUCi0JagkuTHJldAorLkxlYWM6CWwzMmkJYTcsIGEyLCBQVF9BUkVHNwkjIHJlc3RvcmUgYTcKKwlsMzJpCWEwLCBhMiwgUFRfQVJFRzAJIyByZXN0b3JlIGEwCisJbW92aQlhMiwgLUVGQVVMVAorCXJmZQorCisuTGlsbDoJbDMyaQlhNywgYTIsIFBUX0FSRUcwCSMgcmVzdG9yZSBhNworCWwzMmkJYTAsIGEyLCBQVF9BUkVHMAkjIHJlc3RvcmUgYTAKKwltb3ZpCWEyLCAtRUlOVkFMCisJcmZlCisKIAogCiAKQEAgLTE0OTEsNyArMTQ5MCw3IEBACiAJICovCiAKIAlyc3IJYTAsIFBTCi0JX2JiY2kubAlhMCwgUFNfVU1fU0hJRlQsIDFmCisJX2JiY2kubAlhMCwgUFNfVU1fQklULCAxZgogCiAgCS8qIFVzZXIgc3BhY2U6IFNldHVwIGEgZHVtbXkgZnJhbWUgYW5kIGtpbGwgYXBwbGljYXRpb24uCiAJICogTm90ZTogV2UgYXNzdW1lIEVYQ19UQUJMRV9LU1RLIGNvbnRhaW5zIGEgdmFsaWQgc3RhY2sgcG9pbnRlci4KQEAgLTE1MTAsNyArMTUwOSw3IEBACiAJbDMyaQlhMSwgYTMsIEVYQ19UQUJMRV9LU1RLCiAJd3NyCWEzLCBFWENTQVZFXzEKIAotCW1vdmkJYTQsIFBTX1dPRV9NQVNLIHwgMQorCW1vdmkJYTQsICgxIDw8IFBTX1dPRV9CSVQpIHwgMQogCXdzcglhNCwgUFMKIAlyc3luYwogCkBAIC0xNjEyLDcgKzE2MTEsNyBAQAogCXJzcglhMSwgUFRFVkFERFIKIAlzcmxpCWExLCBhMSwgUEFHRV9TSElGVAogCXNsbGkJYTEsIGExLCBQQUdFX1NISUZUCSMgcHRldmFkZHIgJiBQQUdFX01BU0sKLQlhZGRpCWExLCBhMSwgRFRMQl9XQVlfUEdUQUJMRQkjIC4uLiArIHdheV9udW1iZXIKKwlhZGRpCWExLCBhMSwgRFRMQl9XQVlfUEdECSMgLi4uICsgd2F5X251bWJlcgogCiAJd2R0bGIJYTAsIGExCiAJZHN5bmMKQEAgLTE2NTQsNyArMTY1Myw3IEBACiAJbW92CWExLCBhMgogCiAJcnNyCWEyLCBQUwotCWJic2kubAlhMiwgUFNfVU1fU0hJRlQsIDFmCisJYmJzaS5sCWEyLCBQU19VTV9CSVQsIDFmCiAJaglfa2VybmVsX2V4Y2VwdGlvbgogMToJaglfdXNlcl9leGNlcHRpb24KIApAQCAtMTc1Myw3ICsxNzUyLDcgQEAKIAltb3YJYTEsIGEyCiAKIAlyc3IJYTIsIFBTCi0JYmJzaS5sCWEyLCBQU19VTV9TSElGVCwgMWYKKwliYnNpLmwJYTIsIFBTX1VNX0JJVCwgMWYKIAlqCV9rZXJuZWxfZXhjZXB0aW9uCiAxOglqCV91c2VyX2V4Y2VwdGlvbgogCkBAIC0xOTA3LDYgKzE5MDYsMTAzIEBACiAjZW5kaWYgLyogWENIQUxfRVhUUkFfU0FfU0laRSAqLwogCiAvKgorICogU3lzdGVtIENhbGxzLgorICoKKyAqIHZvaWQgc3lzdGVtX2NhbGwgKHN0cnVjdCBwdF9yZWdzKiByZWdzLCBpbnQgZXhjY2F1c2UpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMiAgICAgICAgICAgICAgICAgYTMKKyAqLworCitFTlRSWShzeXN0ZW1fY2FsbCkKKwllbnRyeQlhMSwgMzIKKworCS8qIHJlZ3MtPnN5c2NhbGwgPSByZWdzLT5hcmVnWzJdICovCisKKwlsMzJpCWEzLCBhMiwgUFRfQVJFRzIKKwltb3YJYTYsIGEyCisJbW92aQlhNCwgZG9fc3lzY2FsbF90cmFjZV9lbnRlcgorCXMzMmkJYTMsIGEyLCBQVF9TWVNDQUxMCisJY2FsbHg0CWE0CisKKwkvKiBzeXNjYWxsID0gc3lzX2NhbGxfdGFibGVbc3lzY2FsbF9ucl0gKi8KKworCW1vdmkJYTQsIHN5c19jYWxsX3RhYmxlOworCW1vdmkJYTUsIF9fTlJfc3lzY2FsbF9jb3VudAorCW1vdmkJYTYsIC1FTk9TWVMKKwliZ2V1CWEzLCBhNSwgMWYKKworCWFkZHg0CWE0LCBhMywgYTQKKwlsMzJpCWE0LCBhNCwgMAorCW1vdmkJYTUsIHN5c19uaV9zeXNjYWxsOworCWJlcQlhNCwgYTUsIDFmCisKKwkvKiBMb2FkIGFyZ3M6IGFyZzAgLSBhcmc1IGFyZSBwYXNzZWQgdmlhIHJlZ3MuICovCisKKwlsMzJpCWE2LCBhMiwgUFRfQVJFRzYKKwlsMzJpCWE3LCBhMiwgUFRfQVJFRzMKKwlsMzJpCWE4LCBhMiwgUFRfQVJFRzQKKwlsMzJpCWE5LCBhMiwgUFRfQVJFRzUKKwlsMzJpCWExMCwgYTIsIFBUX0FSRUc4CisJbDMyaQlhMTEsIGEyLCBQVF9BUkVHOQorCisJLyogUGFzcyBvbmUgYWRkaXRpb25hbCBhcmd1bWVudCB0byB0aGUgc3lzY2FsbDogcHRfcmVncyAob24gc3RhY2spICovCisJczMyaQlhMiwgYTEsIDAKKworCWNhbGx4NAlhNAorCisxOgkvKiByZWdzLT5hcmVnWzJdID0gcmV0dXJuX3ZhbHVlICovCisKKwlzMzJpCWE2LCBhMiwgUFRfQVJFRzIKKwltb3ZpCWE0LCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlCisJbW92CWE2LCBhMgorCWNhbGx4NAlhNAorCXJldHcKKworCisvKgorICogQ3JlYXRlIGEga2VybmVsIHRocmVhZAorICoKKyAqIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisgKiBhMiAgICAgICAgICAgICAgICAgICAgYTIgICAgICAgICAgICAgICAgIGEzICAgICAgICAgICAgIGE0CisgKi8KKworRU5UUlkoa2VybmVsX3RocmVhZCkKKwllbnRyeQlhMSwgMTYKKworCW1vdglhNSwgYTIJCQkjIHByZXNlcnZlIGZuIG92ZXIgc3lzY2FsbAorCW1vdglhNywgYTMJCQkjIHByZXNlcnZlIGFyZ3Mgb3ZlciBzeXNjYWxsCisKKwltb3ZpCWEzLCBfQ0xPTkVfVk0gfCBfQ0xPTkVfVU5UUkFDRUQKKwltb3ZpCWEyLCBfX05SX2Nsb25lCisJb3IJYTYsIGE0LCBhMwkJIyBhcmcwOiBmbGFncworCW1vdglhMywgYTEJCQkjIGFyZzE6IHNwCisJc3lzY2FsbAorCisJYmVxCWEzLCBhMSwgMWYJCSMgYnJhbmNoIGlmIHBhcmVudAorCW1vdglhNiwgYTcJCQkjIGFyZ3MKKwljYWxseDQJYTUJCQkjIGZuKGFyZ3MpCisKKwltb3ZpCWEyLCBfX05SX2V4aXQKKwlzeXNjYWxsCQkJCSMgcmV0dXJuIHZhbHVlIG9mIGZuKGFyZ3MpIHN0aWxsIGluIGE2CisKKzE6CXJldHcKKworLyoKKyAqIERvIGEgc3lzdGVtIGNhbGwgZnJvbSBrZXJuZWwgaW5zdGVhZCBvZiBjYWxsaW5nIHN5c19leGVjdmUsIHNvIHdlIGVuZCB1cAorICogd2l0aCBwcm9wZXIgcHRfcmVncy4KKyAqCisgKiBpbnQga2VybmVsX2V4ZWN2ZShjb25zdCBjaGFyICpmbmFtZSwgY2hhciAqY29uc3QgYXJndltdLCBjaGFyZyAqY29uc3QgZW52cFtdKQorICogYTIgICAgICAgICAgICAgICAgICAgICAgICBhMiAgICAgICAgICAgICAgIGEzICAgICAgICAgICAgICAgICAgYTQKKyAqLworCitFTlRSWShrZXJuZWxfZXhlY3ZlKQorCWVudHJ5CWExLCAxNgorCW1vdglhNiwgYTIJCQkjIGFyZzAgaXMgaW4gYTYKKwltb3ZpCWEyLCBfX05SX2V4ZWN2ZQorCXN5c2NhbGwKKworCXJldHcKKworLyoKICAqIFRhc2sgc3dpdGNoLgogICoKICAqIHN0cnVjdCB0YXNrKiAgX3N3aXRjaF90byAoc3RydWN0IHRhc2sqIHByZXYsIHN0cnVjdCB0YXNrKiBuZXh0KQpAQCAtMTkyNCw3ICsyMDIwLDcgQEAKIAogCS8qIERpc2FibGUgaW50cyB3aGlsZSB3ZSBtYW5pcHVsYXRlIHRoZSBzdGFjayBwb2ludGVyOyBzcGlsbCByZWdzLiAqLwogCi0JbW92aQlhNSwgUFNfRVhDTV9NQVNLIHwgTE9DS0xFVkVMCisJbW92aQlhNSwgKDEgPDwgUFNfRVhDTV9CSVQpIHwgTE9DS0xFVkVMCiAJeHNyCWE1LCBQUwogCXJzcglhMywgRVhDU0FWRV8xCiAJcnN5bmMKQEAgLTE5NjQsMzMgKzIwNjAsOSBAQAogCW1vdmkJYTQsIHNjaGVkdWxlX3RhaWwKIAljYWxseDQJYTQKIAotCW1vdmkJYTQsIGRvX3N5c2NhbGxfdHJhY2UKKwltb3ZpCWE0LCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlCisJbW92CWE2LCBhMQogCWNhbGx4NAlhNAogCiAJagljb21tb25fZXhjZXB0aW9uX3JldHVybgogCi0KLQotLyoKLSAqIFRhYmxlIG9mIHN5c2NhbGxzCi0gKi8KLQotLmRhdGEKLS5hbGlnbiAgNAotLmdsb2JhbCBzeXNfY2FsbF90YWJsZQotc3lzX2NhbGxfdGFibGU6Ci0KLSNkZWZpbmUgU1lTQ0FMTChjYWxsLCBuYXJnKSAud29yZCBjYWxsCi0jaW5jbHVkZSAic3lzY2FsbHMuaCIKLQotLyoKLSAqIE51bWJlciBvZiBhcmd1bWVudHMgb2YgZWFjaCBzeXNjYWxsCi0gKi8KLQotLmdsb2JhbCBzeXNfbmFyZ190YWJsZQotc3lzX25hcmdfdGFibGU6Ci0KLSN1bmRlZiBTWVNDQUxMCi0jZGVmaW5lIFNZU0NBTEwoY2FsbCwgbmFyZykgLmJ5dGUgbmFyZwotI2luY2x1ZGUgInN5c2NhbGxzLmgiCi0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaGVhZC5TCmluZGV4IGMwN2NiMjUuLmVhODk5MTAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2hlYWQuUwpAQCAtMTUsOSArMTUsOSBAQAogICogS2V2aW4gQ2hlYQogICovCiAKLSNpbmNsdWRlIDx4dGVuc2EvY2FjaGVhc20uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVhc20uaD4KIAogLyoKICAqIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBlbnRyeSBjb2RlIGZvciBrZXJuZWwgaW1hZ2VzLiBJdCBwZXJmb3JtcyB0aGUKQEAgLTMyLDEzICszMiw2IEBACiAgKgogICovCiAKLQkubWFjcm8JaXRlcmF0ZQlmcm9tLCB0byAsIGNtZAotCQkuaWZlcQkoKFx0byAtIFxmcm9tKSAmIH4weGZmZikKLQkJCVxjbWQJXGZyb20KLQkJCWl0ZXJhdGUgIihcZnJvbSsxKSIsIFx0bywgXGNtZAotCQkuZW5kaWYKLQkuZW5kbQotCiAvKgogICogIF9zdGFydAogICoKQEAgLTY0LDcgKzU3LDcgQEAKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucy4gKi8KIAotCW1vdmkJYTAsIFhDSEFMX1BTX0VYQ01fTUFTSworCW1vdmkJYTAsIExPQ0tMRVZFTAogCXdzcglhMCwgUFMKIAogCS8qIFByZXNlcnZlIHRoZSBwb2ludGVyIHRvIHRoZSBib290IHBhcmFtZXRlciBsaXN0IGluIEVYQ1NBVkVfMSAqLwpAQCAtOTEsMTEgKzg0LDExIEBACiAJbW92aQlhMSwgMTUKIAl3c3IJYTAsIElDT1VOVExFVkVMCiAKLQkubWFjcm8gcmVzZXRfZGJyZWFrIG51bQotCXdzcglhMCwgREJSRUFLQyArIFxudW0KLQkuZW5kbQotCi0gICAgICAgIGl0ZXJhdGUgMCwgWENIQUxfTlVNX0lCUkVBSy0xLCByZXNldF9kYnJlYWsKKwkuc2V0CV9pbmRleCwgMAorCS5yZXB0CVhDSEFMX05VTV9EQlJFQUsgLSAxCisJd3NyCWEwLCBEQlJFQUtDICsgX2luZGV4CisJLnNldAlfaW5kZXgsIF9pbmRleCArIDEKKwkuZW5kcgogI2VuZGlmCiAKIAkvKiBDbGVhciBDQ09VTlQgKG5vdCByZWFsbHkgbmVjZXNzYXJ5LCBidXQgbmljZSkgKi8KQEAgLTExMCwxMCArMTAzLDExIEBACiAKIAkvKiBEaXNhYmxlIGFsbCB0aW1lcnMuICovCiAKLQkubWFjcm8JcmVzZXRfdGltZXIJbnVtCi0Jd3NyCWEwLCBDQ09NUEFSRV8wICsgXG51bQotCS5lbmRtCi0JaXRlcmF0ZQkwLCBYQ0hBTF9OVU1fVElNRVJTLTEsIHJlc2V0X3RpbWVyCisJLnNldAlfaW5kZXgsIDAKKwkucmVwdAlYQ0hBTF9OVU1fVElNRVJTIC0gMQorCXdzcglhMCwgQ0NPTVBBUkUgKyBfaW5kZXgKKwkuc2V0CV9pbmRleCwgX2luZGV4ICsgMQorCS5lbmRyCiAKIAkvKiBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24uICovCiAKQEAgLTEzOSwxMiArMTMzLDIxIEBACiAJcnN5bmMKIAogCS8qICBJbml0aWFsaXplIHRoZSBjYWNoZXMuCi0JICogIERvZXMgbm90IGluY2x1ZGUgZmx1c2hpbmcgd3JpdGViYWNrIGQtY2FjaGUuCi0JICogIGE2LCBhNyBhcmUganVzdCB3b3JraW5nIHJlZ2lzdGVycyAoY2xvYmJlcmVkKS4KKwkgKiAgYTIsIGEzIGFyZSBqdXN0IHdvcmtpbmcgcmVnaXN0ZXJzIChjbG9iYmVyZWQpLgogCSAqLwogCi0JaWNhY2hlX3Jlc2V0ICBhMiwgYTMKLQlkY2FjaGVfcmVzZXQgIGEyLCBhMworI2lmIFhDSEFMX0RDQUNIRV9MSU5FX0xPQ0tBQkxFCisJX19fdW5sb2NrX2RjYWNoZV9hbGwgYTIgYTMKKyNlbmRpZgorCisjaWYgWENIQUxfSUNBQ0hFX0xJTkVfTE9DS0FCTEUKKwlfX191bmxvY2tfaWNhY2hlX2FsbCBhMiBhMworI2VuZGlmCisKKwlfX19pbnZhbGlkYXRlX2RjYWNoZV9hbGwgYTIgYTMKKwlfX19pbnZhbGlkYXRlX2ljYWNoZV9hbGwgYTIgYTMKKworCWlzeW5jCiAKIAkvKiBVbnBhY2sgZGF0YSBzZWN0aW9ucwogCSAqCkBAIC0xODEsOSArMTg0LDkgQEAKIAltb3ZpCWEyLCBfYnNzX3N0YXJ0CSMgc3RhcnQgb2YgQlNTCiAJbW92aQlhMywgX2Jzc19lbmQJIyBlbmQgb2YgQlNTCiAKLTE6CWFkZGkJYTIsIGEyLCA0CisJX19sb29wdAlhMiwgYTMsIGE0LCAyCiAJczMyaQlhMCwgYTIsIDAKLQlibHQJYTIsIGEzLCAxYgorCV9fZW5kbGEJYTIsIGE0LCA0CiAKICNpZiBYQ0hBTF9EQ0FDSEVfSVNfV1JJVEVCQUNLCiAKQEAgLTE5MSw3ICsxOTQsNyBAQAogCSAqIGluc3RydWN0aW9ucy9kYXRhIGFyZSBhdmFpbGFibGUuCiAJICovCiAKLQlkY2FjaGVfd3JpdGViYWNrX2FsbAlhMiwgYTMKKwlfX19mbHVzaF9kY2FjaGVfYWxsIGEyIGEzCiAjZW5kaWYKIAogCS8qIFNldHVwIHN0YWNrIGFuZCBlbmFibGUgd2luZG93IGV4Y2VwdGlvbnMgKGtlZXAgaXJxcyBkaXNhYmxlZCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYwppbmRleCAxY2Y3NDRlLi5jOWVhNzNiIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCkBAIC00LDcgKzQsNyBAQAogICogWHRlbnNhIGJ1aWx0LWluIGludGVycnVwdCBjb250cm9sbGVyIGFuZCBzb21lIGdlbmVyaWMgZnVuY3Rpb25zIGNvcGllZAogICogZnJvbSBpMzg2LgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDUgVGVuc2lsaWNhLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA2IFRlbnNpbGljYSwgSW5jLgogICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk4IExpbnVzIFRvcnZhbGRzLCBJbmdvIE1vbG5hcgogICoKICAqCkBAIC0yMiwxMSArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXRmb3JtLmg+CiAKLXN0YXRpYyB2b2lkIGVuYWJsZV94dGVuc2FfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHZvaWQgZGlzYWJsZV94dGVuc2FfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX3h0ZW5zYSh1bnNpZ25lZCBpbnQgaXJxKTsKLXN0YXRpYyB2b2lkIGVuZF94dGVuc2FfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlZF9pcnFfbWFzazsKIAogYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKQEAgLTQ2LDggKzQxLDE2IEBACiAgKiBoYW5kbGVycykuCiAgKi8KIAotdW5zaWduZWQgaW50ICBkb19JUlEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgZG9fSVJRKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKworCWlmIChpcnEgPj0gTlJfSVJRUykgeworCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IGNhbm5vdCBoYW5kbGUgSVJRICVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgaXJxKTsKKwl9CisKIAlpcnFfZW50ZXIoKTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XCkBAIC02MywxMiArNjYsMTAgQEAKIAkJCSAgICAgICBzcCAtIHNpemVvZihzdHJ1Y3QgdGhyZWFkX2luZm8pKTsKIAl9CiAjZW5kaWYKLQotCV9fZG9fSVJRKGlycSwgcmVncyk7CisJZGVzYy0+aGFuZGxlX2lycShpcnEsIGRlc2MpOwogCiAJaXJxX2V4aXQoKTsKLQotCXJldHVybiAxOworCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CiB9CiAKIC8qCkBAIC0xMTgsNzIgKzExOSw2OCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLS8qIHNodXRkb3duIGlzIHNhbWUgYXMgImRpc2FibGUiICovCi0jZGVmaW5lIHNodXRkb3duX3h0ZW5zYV9pcnEgZGlzYWJsZV94dGVuc2FfaXJxCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF94dGVuc2FfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZW5hYmxlX3h0ZW5zYV9pcnEoaXJxKTsKLQlyZXR1cm4gMDsgICAgICAgICAgICAgICAvKiBuZXZlciBhbnl0aGluZyBwZW5kaW5nICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgeHRlbnNhX2lycV90eXBlID0gewotCSJYdGVuc2EtSVJRIiwKLQlzdGFydHVwX3h0ZW5zYV9pcnEsCi0Jc2h1dGRvd25feHRlbnNhX2lycSwKLQllbmFibGVfeHRlbnNhX2lycSwKLQlkaXNhYmxlX3h0ZW5zYV9pcnEsCi0JbWFza19hbmRfYWNrX3h0ZW5zYSwKLQllbmRfeHRlbnNhX2lycQotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIG1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKIHsKIAljYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IGlycSk7CiAJc2V0X3NyIChjYWNoZWRfaXJxX21hc2ssIElOVEVOQUJMRSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQogewogCWNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IGlycTsKIAlzZXRfc3IgKGNhY2hlZF9pcnFfbWFzaywgSU5URU5BQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgZGlzYWJsZV94dGVuc2FfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JbWFza19pcnEoaXJxKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJc2V0X3NyKDEgPDwgaXJxLCBJTlRDTEVBUik7CiB9CiAKLXN0YXRpYyB2b2lkIGVuYWJsZV94dGVuc2FfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgaW50IHh0ZW5zYV9pcnFfcmV0cmlnZ2VyKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQl1bm1hc2tfaXJxKGlycSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXNldF9zciAoMSA8PCBpcnEsIElOVFNFVCk7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja194dGVuc2EodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgZGlzYWJsZV94dGVuc2FfaXJxKGlycSk7Ci19CiAKLXN0YXRpYyB2b2lkIGVuZF94dGVuc2FfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0gICAgICAgIGVuYWJsZV94dGVuc2FfaXJxKGlycSk7Ci19Ci0KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeHRlbnNhX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJ4dGVuc2EiLAorCS5tYXNrCQk9IHh0ZW5zYV9pcnFfbWFzaywKKwkudW5tYXNrCQk9IHh0ZW5zYV9pcnFfdW5tYXNrLAorCS5hY2sJCT0geHRlbnNhX2lycV9hY2ssCisJLnJldHJpZ2dlcgk9IHh0ZW5zYV9pcnFfcmV0cmlnZ2VyLAorfTsKIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaW5kZXg7CiAKLQlmb3IgKGk9MDsgaSA8IFhURU5TQV9OUl9JUlFTOyBpKyspCi0JCWlycV9kZXNjW2ldLmNoaXAgPSAmeHRlbnNhX2lycV90eXBlOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFhURU5TQV9OUl9JUlFTOyBpbmRleCsrKSB7CisJCWludCBtYXNrID0gMSA8PCBpbmRleDsKKworCQlpZiAobWFzayAmIFhDSEFMX0lOVFRZUEVfTUFTS19TT0ZUV0FSRSkKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpbmRleCwgJnh0ZW5zYV9pcnFfY2hpcCwKKwkJCQkJCSBoYW5kbGVfc2ltcGxlX2lycSk7CisKKwkJZWxzZSBpZiAobWFzayAmIFhDSEFMX0lOVFRZUEVfTUFTS19FWFRFUk5fRURHRSkKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpbmRleCwgJnh0ZW5zYV9pcnFfY2hpcCwKKwkJCQkJCSBoYW5kbGVfZWRnZV9pcnEpOworCisJCWVsc2UgaWYgKG1hc2sgJiBYQ0hBTF9JTlRUWVBFX01BU0tfRVhURVJOX0xFVkVMKQorCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGluZGV4LCAmeHRlbnNhX2lycV9jaGlwLAorCQkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOworCisJCWVsc2UgaWYgKG1hc2sgJiBYQ0hBTF9JTlRUWVBFX01BU0tfVElNRVIpCisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaW5kZXgsICZ4dGVuc2FfaXJxX2NoaXAsCisJCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKKworCQllbHNlCS8qIFhDSEFMX0lOVFRZUEVfTUFTS19XUklURV9FUlJPUiAqLworCQkJLyogWENIQUxfSU5UVFlQRV9NQVNLX05NSSAqLworCisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaW5kZXgsICZ4dGVuc2FfaXJxX2NoaXAsCisJCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CisJfQogCiAJY2FjaGVkX2lycV9tYXNrID0gMDsKLQotCXBsYXRmb3JtX2luaXRfaXJxKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3BjaS1kbWEuYwppbmRleCA2NjQ4ZmE5Li5jYTc2ZjA3IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wY2ktZG1hLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC94dGVuc2Eva2VybmVsL3BjaS1kbWEuYworICogYXJjaC94dGVuc2EvcGNpLWRtYS5jCiAgKgogICogRE1BIGNvaGVyZW50IG1lbW9yeSBhbGxvY2F0aW9uLgogICoKQEAgLTI5LDI4ICsyOSw0OCBAQAogICovCiAKIHZvaWQgKgotZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSwgZ2ZwX3QgZ2ZwKQorZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldixzaXplX3Qgc2l6ZSxkbWFfYWRkcl90ICpoYW5kbGUsZ2ZwX3QgZmxhZykKIHsKLQl2b2lkICpyZXQ7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdW5zaWduZWQgbG9uZyB1bmNhY2hlZCA9IDA7CiAKIAkvKiBpZ25vcmUgcmVnaW9uIHNwZWljaWZpZXJzICovCi0JZ2ZwICY9IH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSk7CiAKLQlpZiAoZGV2ID09IE5VTEwgfHwgKCpkZXYtPmRtYV9tYXNrIDwgMHhmZmZmZmZmZikpCi0JCWdmcCB8PSBHRlBfRE1BOwotCXJldCA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhnZnAsIGdldF9vcmRlcihzaXplKSk7CisJZmxhZyAmPSB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0hJR0hNRU0pOwogCi0JaWYgKHJldCAhPSBOVUxMKSB7Ci0JCW1lbXNldChyZXQsIDAsIHNpemUpOwotCQkqaGFuZGxlID0gdmlydF90b19idXMocmV0KTsKKwlpZiAoZGV2ID09IE5VTEwgfHwgKGRldi0+Y29oZXJlbnRfZG1hX21hc2sgPCAweGZmZmZmZmZmKSkKKwkJZmxhZyB8PSBHRlBfRE1BOworCXJldCA9ICh1bnNpZ25lZCBsb25nKV9fZ2V0X2ZyZWVfcGFnZXMoZmxhZywgZ2V0X29yZGVyKHNpemUpKTsKKworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBXZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBjb2hlcmVudCBtZW1vcnkgb3V0c2lkZSBLU0VHICovCisKKwlpZiAocmV0IDwgWENIQUxfS1NFR19DQUNIRURfVkFERFIKKwkgICAgfHwgcmV0ID49IFhDSEFMX0tTRUdfQ0FDSEVEX1ZBRERSICsgWENIQUxfS1NFR19TSVpFKQorCQlCVUcoKTsKKworCisJaWYgKHJldCAhPSAwKSB7CisJCW1lbXNldCgodm9pZCopIHJldCwgMCwgc2l6ZSk7CisJCXVuY2FjaGVkID0gcmV0K1hDSEFMX0tTRUdfQllQQVNTX1ZBRERSLVhDSEFMX0tTRUdfQ0FDSEVEX1ZBRERSOworCQkqaGFuZGxlID0gdmlydF90b19idXMoKHZvaWQqKXJldCk7CisJCV9fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UocmV0LCBzaXplKTsKIAl9Ci0JcmV0dXJuICh2b2lkKikgQllQQVNTX0FERFIoKHVuc2lnbmVkIGxvbmcpcmV0KTsKKworCXJldHVybiAodm9pZCopdW5jYWNoZWQ7CiB9CiAKIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAogCQkJIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCiB7Ci0JZnJlZV9wYWdlcyhDQUNIRURfQUREUigodW5zaWduZWQgbG9uZyl2YWRkciksIGdldF9vcmRlcihzaXplKSk7CisJbG9uZyBhZGRyPShsb25nKXZhZGRyK1hDSEFMX0tTRUdfQ0FDSEVEX1ZBRERSLVhDSEFMX0tTRUdfQllQQVNTX1ZBRERSOworCisJaWYgKGFkZHIgPCAwIHx8IGFkZHIgPj0gWENIQUxfS1NFR19TSVpFKQorCQlCVUcoKTsKKworCWZyZWVfcGFnZXMoYWRkciwgZ2V0X29yZGVyKHNpemUpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYwppbmRleCBhN2M0MTc4Li43OTViZDVhIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEsNCArMSwzIEBACi0vLyBUT0RPCXZlcmlmeSBjb3Byb2Nlc3NvciBoYW5kbGluZwogLyoKICAqIGFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKICAqCkBAIC00Myw3ICs0Miw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLSNpbmNsdWRlIDxhc20vY29wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcmVncy5oPgogCiBleHRlcm4gdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpOwogCkBAIC02NywyNSArNjYsNiBAQAogRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOwogCiAKLSNpZiBYQ0hBTF9DUF9OVU0gPiAwCi0KLS8qCi0gKiBDb3Byb2Nlc3NvciBvd25lcnNoaXAuCi0gKi8KLQotY29wcm9jZXNzb3JfaW5mb190IGNvcHJvY2Vzc29yX2luZm9bXSA9IHsKLQl7IDAsIFhURU5TQV9DUEVfQ1AwX09GRlNFVCB9LAotCXsgMCwgWFRFTlNBX0NQRV9DUDFfT0ZGU0VUIH0sCi0JeyAwLCBYVEVOU0FfQ1BFX0NQMl9PRkZTRVQgfSwKLQl7IDAsIFhURU5TQV9DUEVfQ1AzX09GRlNFVCB9LAotCXsgMCwgWFRFTlNBX0NQRV9DUDRfT0ZGU0VUIH0sCi0JeyAwLCBYVEVOU0FfQ1BFX0NQNV9PRkZTRVQgfSwKLQl7IDAsIFhURU5TQV9DUEVfQ1A2X09GRlNFVCB9LAotCXsgMCwgWFRFTlNBX0NQRV9DUDdfT0ZGU0VUIH0sCi19OwotCi0jZW5kaWYKLQogLyoKICAqIFBvd2VybWFuYWdlbWVudCBpZGxlIGZ1bmN0aW9uLCBpZiBhbnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtLgogICovCkBAIC0xMTAsMTIgKzkwLDEwIEBACiAKIHZvaWQgZXhpdF90aHJlYWQodm9pZCkKIHsKLQlyZWxlYXNlX2NvcHJvY2Vzc29ycyhjdXJyZW50KTsJLyogRW1wdHkgbWFjcm8gaWYgbm8gQ1BzIGFyZSBkZWZpbmVkICovCiB9CiAKIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCiB7Ci0JcmVsZWFzZV9jb3Byb2Nlc3NvcnMoY3VycmVudCk7CS8qIEVtcHR5IG1hY3JvIGlmIG5vIENQcyBhcmUgZGVmaW5lZCAqLwogfQogCiAvKgpAQCAtMTgzLDM2ICsxNjEsNiBAQAogCiAKIC8qCi0gKiBDcmVhdGUgYSBrZXJuZWwgdGhyZWFkCi0gKi8KLQotaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JbG9uZyByZXR2YWw7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18KLQkJKCJtb3YgICAgICAgICAgIGE1LCAlNFxuXHQiIC8qIHByZXNlcnZlIGZuIGluIGE1ICovCi0JCSAibW92ICAgICAgICAgICBhNiwgJTNcblx0IiAvKiBwcmVzZXJ2ZSBhbmQgc2V0dXAgYXJnIGluIGE2ICovCi0JCSAibW92aQkJYTIsICUxXG5cdCIgLyogbG9hZCBfX05SX2Nsb25lIGZvciBzeXNjYWxsKi8KLQkJICJtb3YJCWEzLCBzcFxuXHQiIC8qIHNwIGNoZWNrIGFuZCBzeXNfY2xvbmUgKi8KLQkJICJtb3YJCWE0LCAlNVxuXHQiIC8qIGxvYWQgZmxhZ3MgZm9yIHN5c2NhbGwgKi8KLQkJICJzeXNjYWxsXG5cdCIKLQkJICJiZXEJCWEzLCBzcCwgMWZcblx0IiAvKiBicmFuY2ggaWYgcGFyZW50ICovCi0JCSAiY2FsbHg0CWE1XG5cdCIgICAgIC8qIGNhbGwgZm4gKi8KLQkJICJtb3ZpCQlhMiwgJTJcblx0IiAvKiBsb2FkIF9fTlJfZXhpdCBmb3Igc3lzY2FsbCAqLwotCQkgIm1vdgkJYTMsIGE2XG5cdCIgLyogbG9hZCBmbiByZXR1cm4gdmFsdWUgKi8KLQkJICJzeXNjYWxsXG4iCi0JCSAiMTpcblx0IgotCQkgIm1vdgkJJTAsIGEyXG5cdCIgLyogcGFyZW50IHJldHVybnMgemVybyAqLwotCQkgOiI9ciIgKHJldHZhbCkKLQkJIDoiaSIgKF9fTlJfY2xvbmUpLCAiaSIgKF9fTlJfZXhpdCksCi0JCSAiciIgKGFyZyksICJyIiAoZm4pLAotCQkgInIiIChmbGFncyB8IENMT05FX1ZNKQotCQkgOiAiYTIiLCAiYTMiLCAiYTQiLCAiYTUiLCAiYTYiICk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgogICogVGhlc2UgYnJhY2tldCB0aGUgc2xlZXBpbmcgZnVuY3Rpb25zLi4KICAqLwogCkBAIC0yNzUsNyArMjIzLDcgQEAKIAkgKi8KIAogCWVsZnJlZ3MtPnBjCQk9IHJlZ3MtPnBjOwotCWVsZnJlZ3MtPnBzCQk9IChyZWdzLT5wcyAmIH5YQ0hBTF9QU19FWENNX01BU0spOworCWVsZnJlZ3MtPnBzCQk9IChyZWdzLT5wcyAmIH4oMSA8PCBQU19FWENNX0JJVCkpOwogCWVsZnJlZ3MtPmV4Y2NhdXNlCT0gcmVncy0+ZXhjY2F1c2U7CiAJZWxmcmVncy0+ZXhjdmFkZHIJPSByZWdzLT5leGN2YWRkcjsKIAllbGZyZWdzLT53aW5kb3diYXNlCT0gcmVncy0+d2luZG93YmFzZTsKQEAgLTMyNSw3ICsyNzMsNyBAQAogCSAqLwogCiAJcmVncy0+cGMJCT0gZWxmcmVncy0+cGM7Ci0JcmVncy0+cHMJCT0gKGVsZnJlZ3MtPnBzIHwgWENIQUxfUFNfRVhDTV9NQVNLKTsKKwlyZWdzLT5wcwkJPSAoZWxmcmVncy0+cHMgfCAoMSA8PCBQU19FWENNX0JJVCkpOwogCXJlZ3MtPmV4Y2NhdXNlCQk9IGVsZnJlZ3MtPmV4Y2NhdXNlOwogCXJlZ3MtPmV4Y3ZhZGRyCQk9IGVsZnJlZ3MtPmV4Y3ZhZGRyOwogCXJlZ3MtPndpbmRvd2Jhc2UJPSBlbGZyZWdzLT53aW5kb3diYXNlOwpAQCAtNDU5LDE2ICs0MDcsNyBAQAogaW50CiBkdW1wX3Rhc2tfZnB1KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVsZl9mcHJlZ3NldF90ICpyKQogewotLyogc2VlIGFzbS9jb3Byb2Nlc3Nvci5oIGZvciB0aGlzIG1hZ2ljIG51bWJlciAxNiAqLwotI2lmIFhURU5TQV9DUF9FWFRSQV9TSVpFID4gMTYKLQlkb19zYXZlX2ZwcmVncyAociwgcmVncywgdGFzayk7Ci0KLQkvKiAgRm9yIG5vdywgYml0IDE2IG1lYW5zIHNvbWUgZXh0cmEgc3RhdGUgbWF5IGJlIHByZXNlbnQ6ICAqLwotLy8gRklYTUUhISBuZWVkIHRvIHRyYWNrIHRvIHJldHVybiBtb3JlIGFjY3VyYXRlIG1hc2sKLQlyZXR1cm4gMHgxMDAwMCB8IFhDSEFMX0NQX01BU0s7Ci0jZWxzZQogCXJldHVybiAwOwkvKiBubyBjb3Byb2Nlc3NvcnMgYWN0aXZlIG9uIHRoaXMgcHJvY2Vzc29yICovCi0jZW5kaWYKIH0KIAogLyoKQEAgLTQ4MywzICs0MjIsNDQgQEAKIHsKIAlyZXR1cm4gZHVtcF90YXNrX2ZwdShyZWdzLCBjdXJyZW50LCByKTsKIH0KKworYXNtbGlua2FnZQorbG9uZyB4dGVuc2FfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdzcCwKKyAgICAgICAgICAgICAgICAgIHZvaWQgX191c2VyICpwYXJlbnRfdGlkLCB2b2lkICpjaGlsZF90bHMsCisgICAgICAgICAgICAgICAgICB2b2lkIF9fdXNlciAqY2hpbGRfdGlkLCBsb25nIGE1LAorICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIGlmICghbmV3c3ApCisgICAgICAgICAgICAgICAgbmV3c3AgPSByZWdzLT5hcmVnWzFdOworICAgICAgICByZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsIHJlZ3MsIDAsIHBhcmVudF90aWQsIGNoaWxkX3RpZCk7Cit9CisKKy8qCisgKiAgKiB4dGVuc2FfZXhlY3ZlKCkgZXhlY3V0ZXMgYSBuZXcgcHJvZ3JhbS4KKyAqICAgKi8KKworYXNtbGlua2FnZQorbG9uZyB4dGVuc2FfZXhlY3ZlKGNoYXIgX191c2VyICpuYW1lLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqYXJndiwKKyAgICAgICAgICAgICAgICAgICBjaGFyIF9fdXNlciAqIF9fdXNlciAqZW52cCwKKyAgICAgICAgICAgICAgICAgICBsb25nIGEzLCBsb25nIGE0LCBsb25nIGE1LAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWxvbmcgZXJyb3I7CisJY2hhciAqIGZpbGVuYW1lOworCisJZmlsZW5hbWUgPSBnZXRuYW1lKG5hbWUpOworCWVycm9yID0gUFRSX0VSUihmaWxlbmFtZSk7CisJaWYgKElTX0VSUihmaWxlbmFtZSkpCisJCWdvdG8gb3V0OworCS8vIEZJWE1FOiByZWxlYXNlIGNvcHJvY2Vzc29yPz8KKwllcnJvciA9IGRvX2V4ZWN2ZShmaWxlbmFtZSwgYXJndiwgZW52cCwgcmVncyk7CisJaWYgKGVycm9yID09IDApIHsKKwkJdGFza19sb2NrKGN1cnJlbnQpOworCQljdXJyZW50LT5wdHJhY2UgJj0gflBUX0RUUkFDRTsKKwkJdGFza191bmxvY2soY3VycmVudCk7CisJfQorCXB1dG5hbWUoZmlsZW5hbWUpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCmluZGV4IDlhZWEyM2MuLjhiNmQzZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAkJCS8qIE5vdGU6ICBQUy5FWENNIGlzIG5vdCBzZXQgd2hpbGUgdXNlciB0YXNrIGlzIHJ1bm5pbmc7CiAJCQkgKiBpdHMgYmVpbmcgc2V0IGluIHJlZ3MgaXMgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZwogCQkJICogY29udmVuaWVuY2UuICAqLwotCQkJdG1wID0gKHJlZ3MtPnBzICYgflhDSEFMX1BTX0VYQ01fTUFTSyk7CisJCQl0bXAgPSAocmVncy0+cHMgJiB+KDEgPDwgUFNfRVhDTV9CSVQpKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFR19XQjoKIAkJCXRtcCA9IHJlZ3MtPndpbmRvd2Jhc2U7CkBAIC0zMzIsMTIgKzMzMiw2IEBACiAKIHZvaWQgZG9fc3lzY2FsbF90cmFjZSh2b2lkKQogewotCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCi0JCXJldHVybjsKLQotCWlmICghKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKQotCQlyZXR1cm47Ci0KIAkvKgogCSAqIFRoZSAweDgwIHByb3ZpZGVzIGEgd2F5IGZvciB0aGUgdHJhY2luZyBwYXJlbnQgdG8gZGlzdGluZ3Vpc2gKIAkgKiBiZXR3ZWVuIGEgc3lzY2FsbCBzdG9wIGFuZCBTSUdUUkFQIGRlbGl2ZXJ5CkBAIC0zNTQsMyArMzQ4LDIzIEBACiAJCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7CiAJfQogfQorCit2b2lkIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpCisJCQkmJiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCisJCWRvX3N5c2NhbGxfdHJhY2UoKTsKKworI2lmIDAKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCWF1ZGl0X3N5c2NhbGxfZW50cnkoY3VycmVudCwgQVVESVRfQVJDSF9YVEVOU0EuLik7CisjZW5kaWYKK30KKwordm9pZCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmICgodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCisJCQkmJiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCisJCWRvX3N5c2NhbGxfdHJhY2UoKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYwppbmRleCBjOTlhYjcyLi5iNjM3NGMwIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYwpAQCAtNDIsOCArNDIsNiBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL3N5c3RlbS5oPgotCiAjaWYgZGVmaW5lZChDT05GSUdfVkdBX0NPTlNPTEUpIHx8IGRlZmluZWQoQ09ORklHX0RVTU1ZX0NPTlNPTEUpCiBzdHJ1Y3Qgc2NyZWVuX2luZm8gc2NyZWVuX2luZm8gPSB7IDAsIDI0LCAwLCAwLCAwLCA4MCwgMCwgMCwgMCwgMjQsIDEsIDE2fTsKICNlbmRpZgpAQCAtMzM2LDcgKzMzNCw3IEBACiAJLyogaGlnaC1sZXZlbCBzdHVmZiAqLwogCXNlcV9wcmludGYoZiwicHJvY2Vzc29yXHQ6IDBcbiIKIAkJICAgICAidmVuZG9yX2lkXHQ6IFRlbnNpbGljYVxuIgotCQkgICAgICJtb2RlbFx0XHQ6IFh0ZW5zYSAiIFhDSEFMX0hXX1JFTEVBU0VfTkFNRSAiXG4iCisJCSAgICAgIm1vZGVsXHRcdDogWHRlbnNhICIgWENIQUxfSFdfVkVSU0lPTl9OQU1FICJcbiIKIAkJICAgICAiY29yZSBJRFx0XHQ6ICIgWENIQUxfQ09SRV9JRCAiXG4iCiAJCSAgICAgImJ1aWxkIElEXHQ6IDB4JXhcbiIKIAkJICAgICAiYnl0ZSBvcmRlclx0OiAlc1xuIgpAQCAtNDIwLDI1ICs0MTgsNiBAQAogCQkgICAgIFhDSEFMX05VTV9USU1FUlMsCiAJCSAgICAgWENIQUxfREVCVUdMRVZFTCk7CiAKLQkvKiBDb3Byb2Nlc3NvcnMgKi8KLSNpZiBYQ0hBTF9IQVZFX0NQCi0Jc2VxX3ByaW50ZihmLCAiY29wcm9jZXNzb3JzXHQ6ICVkXG4iLCBYQ0hBTF9DUF9OVU0pOwotI2Vsc2UKLQlzZXFfcHJpbnRmKGYsICJjb3Byb2Nlc3NvcnNcdDogbm9uZVxuIik7Ci0jZW5kaWYKLQotCS8qIHtJLER9e1JBTSxST019IGFuZCBYTE1JICovCi0Jc2VxX3ByaW50ZihmLCJpbnN0IFJPTXNcdDogJWRcbiIKLQkJICAgICAiaW5zdCBSQU1zXHQ6ICVkXG4iCi0JCSAgICAgImRhdGEgUk9Nc1x0OiAlZFxuIgotCQkgICAgICJkYXRhIFJBTXNcdDogJWRcbiIKLQkJICAgICAiWExNSSBwb3J0c1x0OiAlZFxuIiwKLQkJICAgICBYQ0hBTF9OVU1fSVJPTSwKLQkJICAgICBYQ0hBTF9OVU1fSVJBTSwKLQkJICAgICBYQ0hBTF9OVU1fRFJPTSwKLQkJICAgICBYQ0hBTF9OVU1fRFJBTSwKLQkJICAgICBYQ0hBTF9OVU1fWExNSSk7Ci0KIAkvKiBDYWNoZSAqLwogCXNlcV9wcmludGYoZiwiaWNhY2hlIGxpbmUgc2l6ZTogJWRcbiIKIAkJICAgICAiaWNhY2hlIHdheXNcdDogJWRcbiIKQEAgLTQ2NiwyNCArNDQ1LDYgQEAKIAkJICAgICBYQ0hBTF9EQ0FDSEVfV0FZUywKIAkJICAgICBYQ0hBTF9EQ0FDSEVfU0laRSk7CiAKLQkvKiBNTVUgKi8KLQlzZXFfcHJpbnRmKGYsIkFTSUQgYml0c1x0OiAlZFxuIgotCQkgICAgICJBU0lEIGludmFsaWRcdDogJWRcbiIKLQkJICAgICAiQVNJRCBrZXJuZWxcdDogJWRcbiIKLQkJICAgICAicmluZ3NcdFx0OiAlZFxuIgotCQkgICAgICJpdGxiIHdheXNcdDogJWRcbiIKLQkJICAgICAiaXRsYiBBUiB3YXlzXHQ6ICVkXG4iCi0JCSAgICAgImR0bGIgd2F5c1x0OiAlZFxuIgotCQkgICAgICJkdGxiIEFSIHdheXNcdDogJWRcbiIsCi0JCSAgICAgWENIQUxfTU1VX0FTSURfQklUUywKLQkJICAgICBYQ0hBTF9NTVVfQVNJRF9JTlZBTElELAotCQkgICAgIFhDSEFMX01NVV9BU0lEX0tFUk5FTCwKLQkJICAgICBYQ0hBTF9NTVVfUklOR1MsCi0JCSAgICAgWENIQUxfSVRMQl9XQVlTLAotCQkgICAgIFhDSEFMX0lUTEJfQVJGX1dBWVMsCi0JCSAgICAgWENIQUxfRFRMQl9XQVlTLAotCQkgICAgIFhDSEFMX0RUTEJfQVJGX1dBWVMpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zaWduYWwuYwppbmRleCBjNDk0ZjA4Li5jNmQ5ODgwIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3NpZ25hbC5jCkBAIC0xMiw4ICsxMiw4IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4KLSNpbmNsdWRlIDx4dGVuc2EvaGFsLmg+CisjaW5jbHVkZSA8YXNtL3ZhcmlhbnQvY29yZS5oPgorI2luY2x1ZGUgPGFzbS9jb3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KQEAgLTQ2LDcgKzQ2LDcgQEAKICAqIEF0b21pY2FsbHkgc3dhcCBpbiB0aGUgbmV3IHNpZ25hbCBtYXNrLCBhbmQgd2FpdCBmb3IgYSBzaWduYWwuCiAgKi8KIAotaW50IHN5c19zaWdzdXNwZW5kKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoraW50IHh0ZW5zYV9zaWdzdXNwZW5kKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCW9sZF9zaWdzZXRfdCBtYXNrID0gKG9sZF9zaWdzZXRfdCkgcmVncy0+YXJlZ1szXTsKIAlzaWdzZXRfdCBzYXZlc2V0OwpAQCAtNjgsNyArNjgsNyBAQAogfQogCiBhc21saW5rYWdlIGludAotc3lzX3J0X3NpZ3N1c3BlbmQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit4dGVuc2FfcnRfc2lnc3VzcGVuZChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzaWdzZXRfdCAqdW5ld3NldCA9IChzaWdzZXRfdCAqKSByZWdzLT5hcmVnWzRdOwogCXNpemVfdCBzaWdzZXRzaXplID0gKHNpemVfdCkgcmVncy0+YXJlZ1szXTsKQEAgLTk2LDcgKzk2LDcgQEAKIH0KIAogYXNtbGlua2FnZSBpbnQKLXN5c19zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24gKmFjdCwKK3h0ZW5zYV9zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24gKmFjdCwKIAkgICAgICBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiAqb2FjdCkKIHsKIAlzdHJ1Y3Qga19zaWdhY3Rpb24gbmV3X2thLCBvbGRfa2E7CkBAIC0xMjgsNyArMTI4LDcgQEAKIH0KIAogYXNtbGlua2FnZSBpbnQKLXN5c19zaWdhbHRzdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3h0ZW5zYV9zaWdhbHRzdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAljb25zdCBzdGFja190ICp1c3MgPSAoc3RhY2tfdCAqKSByZWdzLT5hcmVnWzRdOwogCXN0YWNrX3QgKnVvc3MgPSAoc3RhY2tfdCAqKSByZWdzLT5hcmVnWzNdOwpAQCAtMjE2LDggKzIxNiw4IEBACiAJICogaGFuZGxlciwgb3IgdGhlIHVzZXIgbW9kZSB2YWx1ZSBkb2Vzbid0IG1hdHRlciAoZS5nLiBQUy5PV0IpLgogCSAqLwogCWVyciB8PSBfX2dldF91c2VyKHBzLCAmc2MtPnNjX3BzKTsKLQlyZWdzLT5wcyA9IChyZWdzLT5wcyAmIH5YQ0hBTF9QU19DQUxMSU5DX01BU0spCi0JCXwgKHBzICYgWENIQUxfUFNfQ0FMTElOQ19NQVNLKTsKKwlyZWdzLT5wcyA9IChyZWdzLT5wcyAmIH5QU19DQUxMSU5DX01BU0spCisJCXwgKHBzICYgUFNfQ0FMTElOQ19NQVNLKTsKIAogCS8qIEFkZGl0aW9uYWwgY29ycnVwdGlvbiBjaGVja3MgKi8KIApAQCAtMjgwLDcgKzI4MCw3IEBACiBzdGF0aWMgaW50CiBzYXZlX2NwZXh0cmEgKHN0cnVjdCBfY3BzdGF0ZSAqYnVmKQogewotI2lmIChYQ0hBTF9FWFRSQV9TQV9TSVpFID09IDApICYmIChYQ0hBTF9DUF9OVU0gPT0gMCkKKyNpZiBYQ0hBTF9DUF9OVU0gPT0gMAogCXJldHVybiAwOwogI2Vsc2UKIApAQCAtMzUwLDcgKzM1MCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2UgaW50IHh0ZW5zYV9zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHNpZ2ZyYW1lICpmcmFtZSA9IChzdHJ1Y3Qgc2lnZnJhbWUgKilyZWdzLT5hcmVnWzFdOwogCXNpZ3NldF90IHNldDsKQEAgLTM4Miw3ICszODIsNyBAQAogCXJldHVybiAwOwogfQogCi1hc21saW5rYWdlIGludCBzeXNfcnRfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSBpbnQgeHRlbnNhX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcnRfc2lnZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSAqKXJlZ3MtPmFyZWdbMV07CiAJc2lnc2V0X3Qgc2V0OwpAQCAtNDk3LDggKzQ5NywxMCBAQAogCiAJLyogRmx1c2ggZ2VuZXJhdGVkIGNvZGUgb3V0IG9mIHRoZSBkYXRhIGNhY2hlICovCiAKLQlpZiAoZXJyID09IDApCi0JCV9fZmx1c2hfaW52YWxpZGF0ZV9jYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyljb2RlbWVtLCA2VUwpOworCWlmIChlcnIgPT0gMCkgeworCQlfX2ludmFsaWRhdGVfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWNvZGVtZW0sIDZVTCk7CisJCV9fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpY29kZW1lbSwgNlVMKTsKKwl9CiAKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGwuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzODM0YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxsLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIGFyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxsLmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDA1IFRlbnNpbGljYSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAxOTk1IC0gMjAwMCBieSBSYWxmIEJhZWNobGUKKyAqCisgKiBKb2UgVGF5bG9yIDxqb2VAdGVuc2lsaWNhLmNvbSwgam9ldHlsckB5YWhvby5jb20+CisgKiBNYXJjIEdhdXRoaWVyIDxtYXJjQHRlbnNpbGljYS5jb20sIG1hcmNAYWx1bW5pLnV3YXRlcmxvby5jYT4KKyAqIENocmlzIFphbmtlbCA8Y2hyaXNAemFua2VsLm5ldD4KKyAqIEtldmluIENoZWEKKyAqCisgKi8KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXNjYWxsLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NobS5oPgorCit0eXBlZGVmIHZvaWQgKCpzeXNjYWxsX3QpKHZvaWQpOworCitzeXNjYWxsX3Qgc3lzX2NhbGxfdGFibGVbX19OUl9zeXNjYWxsX2NvdW50XSAvKiBGSVhNRSBfX2NhY2hlbGluZV9hbGlnbmVkICovPSB7CisJWzAgLi4uIF9fTlJfc3lzY2FsbF9jb3VudCAtIDFdID0gKHN5c2NhbGxfdCkmc3lzX25pX3N5c2NhbGwsCisKKyN1bmRlZiBfX1NZU0NBTEwKKyNkZWZpbmUgX19TWVNDQUxMKG5yLHN5bWJvbCxuYXJncykgWyBuciBdID0gKHN5c2NhbGxfdClzeW1ib2wsCisjdW5kZWYgX1hURU5TQV9VTklTVERfSAorI3VuZGVmICBfX0tFUk5FTF9TWVNDQUxMU19fCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorfTsKKworLyoKKyAqIHh0ZW5zYV9waXBlKCkgaXMgdGhlIG5vcm1hbCBDIGNhbGxpbmcgc3RhbmRhcmQgZm9yIGNyZWF0aW5nIGEgcGlwZS4gSXQncyBub3QKKyAqIHRoZSB3YXkgdW5peCB0cmFkaXRpb25hbCBkb2VzIHRoaXMsIHRob3VnaC4KKyAqLworCithc21saW5rYWdlIGxvbmcgeHRlbnNhX3BpcGUoaW50IF9fdXNlciAqdXNlcmZkcykKK3sKKwlpbnQgZmRbMl07CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkb19waXBlKGZkKTsKKwlpZiAoIWVycm9yKSB7CisJCWlmIChjb3B5X3RvX3VzZXIodXNlcmZkcywgZmQsIDIgKiBzaXplb2YoaW50KSkpCisJCQllcnJvciA9IC1FRkFVTFQ7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworCithc21saW5rYWdlIGxvbmcgeHRlbnNhX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisgICAJCQkgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZikKK3sKKwlpbnQgZXJyb3IgPSAtRUJBREY7CisJc3RydWN0IGZpbGUgKiBmaWxlID0gTlVMTDsKKworCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKKwlpZiAoIShmbGFncyAmIE1BUF9BTk9OWU1PVVMpKSB7CisJCWZpbGUgPSBmZ2V0KGZkKTsKKwkJaWYgKCFmaWxlKQorCQkJZ290byBvdXQ7CisJfQorCisJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwllcnJvciA9IGRvX21tYXBfcGdvZmYoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgcGdvZmYpOworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJaWYgKGZpbGUpCisJCWZwdXQoZmlsZSk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCithc21saW5rYWdlIGxvbmcgeHRlbnNhX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJbG9uZyBlcnI7CisKKwllcnIgPSBkb19zaG1hdChzaG1pZCwgc2htYWRkciwgc2htZmxnLCAmcmV0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiAobG9uZylyZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OWNiMjMuLjAwMDAwMDAKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoKLSAqIGFyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy5jCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwNSBUZW5zaWxpY2EgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMTk5NSAtIDIwMDAgYnkgUmFsZiBCYWVjaGxlCi0gKgotICogSm9lIFRheWxvciA8am9lQHRlbnNpbGljYS5jb20sIGpvZXR5bHJAeWFob28uY29tPgotICogTWFyYyBHYXV0aGllciA8bWFyY0B0ZW5zaWxpY2EuY29tLCBtYXJjQGFsdW1uaS51d2F0ZXJsb28uY2E+Ci0gKiBDaHJpcyBaYW5rZWwgPGNocmlzQHphbmtlbC5uZXQ+Ci0gKiBLZXZpbiBDaGVhCi0gKgotICovCi0KLSNkZWZpbmUgREVCVUcJMAotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9tbWFuLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgotI2luY2x1ZGUgPGxpbnV4L21zZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NobS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9oYXJkaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21tYW4uaD4KLSNpbmNsdWRlIDxhc20vc2htcGFyYW0uaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi1leHRlcm4gdm9pZCBkb19zeXNjYWxsX3RyYWNlKHZvaWQpOwotdHlwZWRlZiBpbnQgKCpzeXNjYWxsX3QpKHZvaWQgKmEwLC4uLik7Ci1leHRlcm4gc3lzY2FsbF90IHN5c19jYWxsX3RhYmxlW107Ci1leHRlcm4gdW5zaWduZWQgY2hhciBzeXNfbmFyZ190YWJsZVtdOwotCi0vKgotICogc3lzX3BpcGUoKSBpcyB0aGUgbm9ybWFsIEMgY2FsbGluZyBzdGFuZGFyZCBmb3IgY3JlYXRpbmcgYSBwaXBlLiBJdCdzIG5vdAotICogdGhlIHdheSB1bml4IHRyYWRpdGlvbmFsIGRvZXMgdGhpcywgdGhvdWdoLgotICovCi0KLWludCBzeXNfcGlwZShpbnQgX191c2VyICp1c2VyZmRzKQotewotCWludCBmZFsyXTsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGRvX3BpcGUoZmQpOwotCWlmICghZXJyb3IpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyZmRzLCBmZCwgMiAqIHNpemVvZihpbnQpKSkKLQkJCWVycm9yID0gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKgotICogQ29tbW9uIGNvZGUgZm9yIG9sZCBhbmQgbmV3IG1tYXBzLgotICovCi1sb25nIHN5c19tbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKLQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQotewotCWludCBlcnJvciA9IC1FQkFERjsKLQlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBOVUxMOwotCi0JZmxhZ3MgJj0gfihNQVBfRVhFQ1VUQUJMRSB8IE1BUF9ERU5ZV1JJVEUpOwotCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKLQkJZmlsZSA9IGZnZXQoZmQpOwotCQlpZiAoIWZpbGUpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCWVycm9yID0gZG9fbW1hcF9wZ29mZihmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZik7Ci0JdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0KLQlpZiAoZmlsZSkKLQkJZnB1dChmaWxlKTsKLW91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWludCBzeXNfY2xvbmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFnczsKLQl1bnNpZ25lZCBsb25nIG5ld3NwOwotCWludCBfX3VzZXIgKnBhcmVudF90aWRwdHIsICpjaGlsZF90aWRwdHI7Ci0JY2xvbmVfZmxhZ3MgPSByZWdzLT5hcmVnWzRdOwotCW5ld3NwID0gcmVncy0+YXJlZ1szXTsKLQlwYXJlbnRfdGlkcHRyID0gKGludCBfX3VzZXIgKilyZWdzLT5hcmVnWzVdOwotCWNoaWxkX3RpZHB0ciA9IChpbnQgX191c2VyICopcmVncy0+YXJlZ1s2XTsKLQlpZiAoIW5ld3NwKQotCQluZXdzcCA9IHJlZ3MtPmFyZWdbMV07Ci0JcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsbmV3c3AscmVncywwLHBhcmVudF90aWRwdHIsY2hpbGRfdGlkcHRyKTsKLX0KLQotLyoKLSAqIHN5c19leGVjdmUoKSBleGVjdXRlcyBhIG5ldyBwcm9ncmFtLgotICovCi0KLWludCBzeXNfZXhlY3ZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWludCBlcnJvcjsKLQljaGFyICogZmlsZW5hbWU7Ci0KLQlmaWxlbmFtZSA9IGdldG5hbWUoKGNoYXIgKikgKGxvbmcpcmVncy0+YXJlZ1s1XSk7Ci0JZXJyb3IgPSBQVFJfRVJSKGZpbGVuYW1lKTsKLQlpZiAoSVNfRVJSKGZpbGVuYW1lKSkKLQkJZ290byBvdXQ7Ci0JZXJyb3IgPSBkb19leGVjdmUoZmlsZW5hbWUsIChjaGFyICoqKSAobG9uZylyZWdzLT5hcmVnWzNdLAotCSAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAobG9uZylyZWdzLT5hcmVnWzRdLCByZWdzKTsKLQlwdXRuYW1lKGZpbGVuYW1lKTsKLQotb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLQotaW50IHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgKiBuYW1lKQotewotCWlmIChuYW1lICYmICFjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLCBzaXplb2YgKCpuYW1lKSkpCi0JCXJldHVybiAwOwotCXJldHVybiAtRUZBVUxUOwotfQotCi0vKgotICogQnVpbGQgdGhlIHN0cmluZyB0YWJsZSBmb3IgdGhlIGJ1aWx0aW4gInBvb3IgbWFuJ3Mgc3RyYWNlIi4KLSAqLwotCi0jaWYgREVCVUcKLSNkZWZpbmUgU1lTQ0FMTChmdW4sIG5hcmcpICNmdW4sCi1zdGF0aWMgY2hhciAqc2ZuYW1lc1tdID0gewotI2luY2x1ZGUgInN5c2NhbGxzLmgiCi19OwotI3VuZGVmIFNZUwotI2VuZGlmCi0KLXZvaWQgc3lzdGVtX2NhbGwgKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN5c2NhbGxfdCBzeXNjYWxsOwotCXVuc2lnbmVkIGxvbmcgcGFybTAsIHBhcm0xLCBwYXJtMiwgcGFybTMsIHBhcm00LCBwYXJtNTsKLQlpbnQgbmFyZ3MsIHJlczsKLQl1bnNpZ25lZCBpbnQgc3lzY2FsbG5yOwotCWludCBwczsKLQotI2lmIERFQlVHCi0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBwYXJtc1s2XTsKLQljaGFyICpzeXNuYW1lOwotI2VuZGlmCi0KLQlyZWdzLT5zeXNjYWxsID0gcmVncy0+YXJlZ1syXTsKLQotCWRvX3N5c2NhbGxfdHJhY2UoKTsKLQotCS8qIEhhdmUgdG8gbG9hZCBhZnRlciBzeXNjYWxsX3RyYWNlIGJlY2F1c2Ugc3RyYWNlCi0JICogc29tZXRpbWVzIGNoYW5nZXMgcmVncy0+c3lzY2FsbC4KLQkgKi8KLQlzeXNjYWxsbnIgPSByZWdzLT5zeXNjYWxsOwotCi0JcGFybTAgPSBwYXJtMSA9IHBhcm0yID0gcGFybTMgPSBwYXJtNCA9IHBhcm01ID0gMDsKLQotCS8qIFJlc3RvcmUgaW50ZXJydXB0IGxldmVsIHRvIHN5c2NhbGwgaW52b2tlcidzLgotCSAqIElmIHRoaXMgd2VyZSBpbiBhc3NlbWJseSwgd2Ugd291bGRuJ3QgZGlzYWJsZQotCSAqIGludGVycnVwdHMgaW4gdGhlIGZpcnN0IHBsYWNlOgotCSAqLwotCWxvY2FsX3NhdmVfZmxhZ3MgKHBzKTsKLQlsb2NhbF9pcnFfcmVzdG9yZSgocHMgJiB+WENIQUxfUFNfSU5UTEVWRUxfTUFTSykgfAotCQkJICAocmVncy0+cHMgJiBYQ0hBTF9QU19JTlRMRVZFTF9NQVNLKSApOwotCi0JaWYgKHN5c2NhbGxuciA+IF9fTlJfTGludXhfc3lzY2FsbHMpIHsKLQkJcmVncy0+YXJlZ1syXSA9IC1FTk9TWVM7Ci0JCXJldHVybjsKLQl9Ci0KLQlzeXNjYWxsID0gc3lzX2NhbGxfdGFibGVbc3lzY2FsbG5yXTsKLQluYXJncyA9IHN5c19uYXJnX3RhYmxlW3N5c2NhbGxucl07Ci0KLQlpZiAoc3lzY2FsbCA9PSBOVUxMKSB7Ci0JCXJlZ3MtPmFyZWdbMl0gPSAtRU5PU1lTOwotCQlyZXR1cm47Ci0JfQotCi0JLyogVGhlcmUgc2hvdWxkbid0IGJlIG1vcmUgdGhhbiBzaXggYXJndW1lbnRzIGluIHRoZSB0YWJsZSEgKi8KLQotCWlmIChuYXJncyA+IDYpCi0JCXBhbmljKCJJbnRlcm5hbCBlcnJvciAtIHRvbyBtYW55IHN5c2NhbGwgYXJndW1lbnRzICglZCkhXG4iLAotCQkgICAgICBuYXJncyk7Ci0KLQkvKiBMaW51eCB0YWtlcyBzeXN0ZW0tY2FsbCBhcmd1bWVudHMgaW4gcmVnaXN0ZXJzLiAgVGhlIEFCSQotICAgICAgICAgKiBhbmQgWHRlbnNhIHNvZnR3YXJlIGNvbnZlbnRpb25zIHJlcXVpcmUgdGhlIHN5c3RlbS1jYWxsCi0gICAgICAgICAqIG51bWJlciBpbiBhMi4gIElmIGFuIGFyZ3VtZW50IGV4aXN0cyBpbiBhMiwgd2UgbW92ZSBpdCB0bwotICAgICAgICAgKiB0aGUgbmV4dCBhdmFpbGFibGUgcmVnaXN0ZXIuICBOb3RlIHRoYXQgZm9yIGltcHJvdmVkCi0gICAgICAgICAqIGVmZmljaWVuY3ksIHdlIGRvIE5PVCBzaGlmdCBhbGwgcGFyYW1ldGVycyBkb3duIG9uZQotICAgICAgICAgKiByZWdpc3RlciB0byBtYWludGFpbiB0aGUgb3JpZ2luYWwgb3JkZXIuCi0JICoKLSAgICAgICAgICogQXQgYmVzdCBjYXNlICh6ZXJvIGFyZ3VtZW50cyksIHdlIGp1c3Qgd3JpdGUgdGhlIHN5c2NhbGwKLSAgICAgICAgICogbnVtYmVyIHRvIGEyLiAgQXQgd29yc3QgY2FzZSAoMSB0byA2IGFyZ3VtZW50cyksIHdlIG1vdmUKLSAgICAgICAgICogdGhlIGFyZ3VtZW50IGluIGEyIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSByZWdpc3RlciwgdGhlbgotICAgICAgICAgKiB3cml0ZSB0aGUgc3lzY2FsbCBudW1iZXIgdG8gYTIuCi0JICoKLSAgICAgICAgICogRm9yIGNsYXJpdHksIHRoZSBmb2xsb3dpbmcgdHJ1dGggdGFibGUgZW51bWVyYXRlcyBhbGwKLSAgICAgICAgICogcG9zc2liaWxpdGllcy4KLQkgKgotICAgICAgICAgKiBhcmd1bWVudHMJc3lzY2FsbCBudW1iZXIJYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNQotICAgICAgICAgKiAtLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqCTAJICAgICAgYTIKLQkgKgkxCSAgICAgIGEyCWEzCi0JICoJMgkgICAgICBhMglhNCwgICBhMwotCSAqCTMJICAgICAgYTIJYTUsICAgYTMsICAgYTQKLQkgKgk0CSAgICAgIGEyCWE2LCAgIGEzLCAgIGE0LCAgIGE1Ci0JICoJNQkgICAgICBhMglhNywgICBhMywgICBhNCwgICBhNSwgICBhNgotCSAqCTYJICAgICAgYTIJYTgsICAgYTMsICAgYTQsICAgYTUsICAgYTYsICAgYTcKLQkgKi8KLQlpZiAobmFyZ3MpIHsKLQkJcGFybTAgPSByZWdzLT5hcmVnW25hcmdzKzJdOwotCQlwYXJtMSA9IHJlZ3MtPmFyZWdbM107Ci0JCXBhcm0yID0gcmVncy0+YXJlZ1s0XTsKLQkJcGFybTMgPSByZWdzLT5hcmVnWzVdOwotCQlwYXJtNCA9IHJlZ3MtPmFyZWdbNl07Ci0JCXBhcm01ID0gcmVncy0+YXJlZ1s3XTsKLQl9IGVsc2UgLyogbmFyZ3MgPT0gMCAqLwotCQlwYXJtMCA9ICh1bnNpZ25lZCBsb25nKSByZWdzOwotCi0jaWYgREVCVUcKLQlwYXJtc1swXSA9IHBhcm0wOwotCXBhcm1zWzFdID0gcGFybTE7Ci0JcGFybXNbMl0gPSBwYXJtMjsKLQlwYXJtc1szXSA9IHBhcm0zOwotCXBhcm1zWzRdID0gcGFybTQ7Ci0JcGFybXNbNV0gPSBwYXJtNTsKLQotCXN5c25hbWUgPSBzZm5hbWVzW3N5c2NhbGxucl07Ci0JaWYgKHN0cm5jbXAoc3lzbmFtZSwgInN5c18iLCA0KSA9PSAwKQotCQlzeXNuYW1lID0gc3lzbmFtZSArIDQ7Ci0KLQlwcmludGsoIlwwMTdTWVNDQUxMOkk6JXg6JWQ6JXMgICVzKCIsIHJlZ3MtPnBjLCBjdXJyZW50LT5waWQsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIHN5c25hbWUpOwotCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQotCQlwcmludGsoKGk+MCkgPyAiLCAlI2x4IiA6ICIlI2x4IiwgcGFybXNbaV0pOwotCXByaW50aygiKVxuIik7Ci0jZW5kaWYKLQotCXJlcyA9IHN5c2NhbGwoKHZvaWQgKilwYXJtMCwgcGFybTEsIHBhcm0yLCBwYXJtMywgcGFybTQsIHBhcm01KTsKLQotI2lmIERFQlVHCi0JcHJpbnRrKCJcMDE3U1lTQ0FMTDpPOiVkOiVzICAlcygiLGN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSwgc3lzbmFtZSk7Ci0JZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCi0JCXByaW50aygoaT4wKSA/ICIsICUjbHgiIDogIiUjbHgiLCBwYXJtc1tpXSk7Ci0JaWYgKHJlcyA8IDQwOTYpCi0JCXByaW50aygiKSA9ICVkXG4iLCByZXMpOwotCWVsc2UKLQkJcHJpbnRrKCIpID0gJSN4XG4iLCByZXMpOwotI2VuZGlmIC8qIERFQlVHICovCi0KLQlyZWdzLT5hcmVnWzJdID0gcmVzOwotCWRvX3N5c2NhbGxfdHJhY2UoKTsKLX0KLQotLyoKLSAqIERvIGEgc3lzdGVtIGNhbGwgZnJvbSBrZXJuZWwgaW5zdGVhZCBvZiBjYWxsaW5nIHN5c19leGVjdmUgc28gd2UKLSAqIGVuZCB1cCB3aXRoIHByb3BlciBwdF9yZWdzLgotICovCi1pbnQga2VybmVsX2V4ZWN2ZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZwW10pCi17Ci0JbG9uZyBfX3JlczsKLQlhc20gdm9sYXRpbGUgKAotCQkiICBtb3YgICBhNSwgJTIgXG4iCi0JCSIgIG1vdiAgIGE0LCAlNCBcbiIKLQkJIiAgbW92ICAgYTMsICUzIFxuIgotCQkiICBtb3ZpICBhMiwgJTEgXG4iCi0JCSIgIHN5c2NhbGwgICAgICBcbiIKLQkJIiAgbW92ICAgJTAsIGEyIFxuIgotCQk6ICI9YSIgKF9fcmVzKQotCQk6ICJpIiAoX19OUl9leGVjdmUpLCAiYSIgKGZpbGVuYW1lKSwgImEiIChhcmd2KSwgImEiIChlbnZwKQotCQk6ICJhMiIsICJhMyIsICJhNCIsICJhNSIpOwotCXJldHVybiBfX3JlczsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy5oIGIvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNmMxMGEuLjAwMDAwMDAKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotLyoKLSAqIGFyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxscy5oCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4IGJ5IFJhbGYgQmFlY2hsZQotICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwNSBUZW5zaWxpY2EgSW5jLgotICoKLSAqIENoYW5nZXMgYnkgSm9lIFRheWxvciA8am9lQHRlbnNpbGljYS5jb20+Ci0gKi8KLQotLyoKLSAqIFRoaXMgZmlsZSBpcyBiZWluZyBpbmNsdWRlZCB0d2ljZSAtIG9uY2UgdG8gYnVpbGQgYSBsaXN0IG9mIGFsbAotICogc3lzY2FsbHMgYW5kIG9uY2UgdG8gYnVpbGQgYSB0YWJsZSBvZiBob3cgbWFueSBhcmd1bWVudHMgZWFjaCBzeXNjYWxsCi0gKiBhY2NlcHRzLiAgU3lzY2FsbHMgdGhhdCByZWNlaXZlIGEgcG9pbnRlciB0byB0aGUgc2F2ZWQgcmVnaXN0ZXJzIGFyZQotICogbWFya2VkIGFzIGhhdmluZyB6ZXJvIGFyZ3VtZW50cy4KLSAqCi0gKiBUaGUgYmluYXJ5IGNvbXBhdGliaWxpdHkgY2FsbHMgYXJlIGluIGEgc2VwYXJhdGUgbGlzdC4KLSAqCi0gKiBFbnRyeSAnMCcgdXNlZCB0byBiZSBzeXN0ZW1fY2FsbC4gIEl0J3MgcmVtb3ZlZCB0byBkaXNhYmxlIGluZGlyZWN0Ci0gKiBzeXN0ZW0gY2FsbHMgZm9yIG5vdyBzbyB1c2VyIHRhc2tzIGNhbid0IHJlY3Vyc2UuICBTZWUgbWlwcycKLSAqIHN5c19zeXNjYWxsIGZvciBhIGNvbXBhcmFibGUgZXhhbXBsZS4KLSAqLwotCi1TWVNDQUxMKDAsIDApCQkgICAgICAgICAgICAgICAgLyogMDAgKi8KLVNZU0NBTEwoc3lzX2V4aXQsIDEpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQotU1lTQ0FMTChzeXNfcmVhZCwgMykKLVNZU0NBTEwoc3lzX3dyaXRlLCAzKQotU1lTQ0FMTChzeXNfb3BlbiwgMykJCQkvKiAwNSAqLwotU1lTQ0FMTChzeXNfY2xvc2UsIDEpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAzKQotU1lTQ0FMTChzeXNfY3JlYXQsIDIpCi1TWVNDQUxMKHN5c19saW5rLCAyKQotU1lTQ0FMTChzeXNfdW5saW5rLCAxKQkJCS8qIDEwICovCi1TWVNDQUxMKHN5c19leGVjdmUsIDApCi1TWVNDQUxMKHN5c19jaGRpciwgMSkKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDEpCi1TWVNDQUxMKHN5c19ta25vZCwgMykKLVNZU0NBTEwoc3lzX2NobW9kLCAyKQkJCS8qIDE1ICovCi1TWVNDQUxMKHN5c19sY2hvd24sIDMpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQotU1lTQ0FMTChzeXNfbmV3c3RhdCwgMikKLVNZU0NBTEwoc3lzX2xzZWVrLCAzKQotU1lTQ0FMTChzeXNfZ2V0cGlkLCAwKQkJCS8qIDIwICovCi1TWVNDQUxMKHN5c19tb3VudCwgNSkKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDEpCi1TWVNDQUxMKHN5c19zZXR1aWQsIDEpCi1TWVNDQUxMKHN5c19nZXR1aWQsIDApCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAxKQkJLyogMjUgKi8KLVNZU0NBTEwoc3lzX3B0cmFjZSwgNCkKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDEpCi1TWVNDQUxMKHN5c19uZXdmc3RhdCwgMikKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c191dGltZSwgMikJCQkvKiAzMCAqLwotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c19hY2Nlc3MsIDIpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAxKQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkJCS8qIDM1ICovCi1TWVNDQUxMKHN5c19zeW5jLCAwKQotU1lTQ0FMTChzeXNfa2lsbCwgMikKLVNZU0NBTEwoc3lzX3JlbmFtZSwgMikKLVNZU0NBTEwoc3lzX21rZGlyLCAyKQotU1lTQ0FMTChzeXNfcm1kaXIsIDEpCQkJLyogNDAgKi8KLVNZU0NBTEwoc3lzX2R1cCwgMSkKLVNZU0NBTEwoc3lzX3BpcGUsIDEpCi1TWVNDQUxMKHN5c190aW1lcywgMSkKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c19icmssIDEpCQkJLyogNDUgKi8KLVNZU0NBTEwoc3lzX3NldGdpZCwgMSkKLVNZU0NBTEwoc3lzX2dldGdpZCwgMCkKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c19nZXRldWlkLCAwKQotU1lTQ0FMTChzeXNfZ2V0ZWdpZCwgMCkJCQkvKiA1MCAqLwotU1lTQ0FMTChzeXNfYWNjdCwgMSkKLVNZU0NBTEwoc3lzX3Vtb3VudCwgMikKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c19pb2N0bCwgMykKLVNZU0NBTEwoc3lzX2ZjbnRsLCAzKQkJCS8qIDU1ICovCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAyKQotU1lTQ0FMTChzeXNfc2V0cGdpZCwgMikKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQotU1lTQ0FMTChzeXNfdW1hc2ssIDEpCQkJLyogNjAgKi8KLVNZU0NBTEwoc3lzX2Nocm9vdCwgMSkKLVNZU0NBTEwoc3lzX3VzdGF0LCAyKQotU1lTQ0FMTChzeXNfZHVwMiwgMikKLVNZU0NBTEwoc3lzX2dldHBwaWQsIDApCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQkJLyogNjUgKi8KLVNZU0NBTEwoc3lzX3NldHNpZCwgMCkKLVNZU0NBTEwoc3lzX3NpZ2FjdGlvbiwgMykKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAxKQotU1lTQ0FMTChzeXNfc2V0cmV1aWQsIDIpCQkvKiA3MCAqLwotU1lTQ0FMTChzeXNfc2V0cmVnaWQsIDIpCi1TWVNDQUxMKHN5c19zaWdzdXNwZW5kLCAwKQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMSkKLVNZU0NBTEwoc3lzX3NldGhvc3RuYW1lLCAyKQotU1lTQ0FMTChzeXNfc2V0cmxpbWl0LCAyKQkJLyogNzUgKi8KLVNZU0NBTEwoc3lzX2dldHJsaW1pdCwgMikKLVNZU0NBTEwoc3lzX2dldHJ1c2FnZSwgMikKLVNZU0NBTEwoc3lzX2dldHRpbWVvZmRheSwgMikKLVNZU0NBTEwoc3lzX3NldHRpbWVvZmRheSwgMikKLVNZU0NBTEwoc3lzX2dldGdyb3VwcywgMikJCS8qIDgwICovCi1TWVNDQUxMKHN5c19zZXRncm91cHMsIDIpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQotU1lTQ0FMTChzeXNfc3ltbGluaywgMikKLVNZU0NBTEwoc3lzX25ld2xzdGF0LCAyKQotU1lTQ0FMTChzeXNfcmVhZGxpbmssIDMpCQkvKiA4NSAqLwotU1lTQ0FMTChzeXNfdXNlbGliLCAxKQotU1lTQ0FMTChzeXNfc3dhcG9uLCAyKQotU1lTQ0FMTChzeXNfcmVib290LCAzKQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMykKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDYpCQkvKiA5MCAqLwotU1lTQ0FMTChzeXNfbXVubWFwLCAyKQotU1lTQ0FMTChzeXNfdHJ1bmNhdGUsIDIpCi1TWVNDQUxMKHN5c19mdHJ1bmNhdGUsIDIpCi1TWVNDQUxMKHN5c19mY2htb2QsIDIpCi1TWVNDQUxMKHN5c19mY2hvd24sIDMpCQkJLyogOTUgKi8KLVNZU0NBTEwoc3lzX2dldHByaW9yaXR5LCAyKQotU1lTQ0FMTChzeXNfc2V0cHJpb3JpdHksIDMpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQotU1lTQ0FMTChzeXNfc3RhdGZzLCAyKQotU1lTQ0FMTChzeXNfZnN0YXRmcywgMikJCQkvKiAxMDAgKi8KLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDMpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAyKQotU1lTQ0FMTChzeXNfc3lzbG9nLCAzKQotU1lTQ0FMTChzeXNfc2V0aXRpbWVyLCAzKQotU1lTQ0FMTChzeXNfZ2V0aXRpbWVyLCAyKQkJLyogMTA1ICovCi1TWVNDQUxMKHN5c19uZXdzdGF0LCAyKQotU1lTQ0FMTChzeXNfbmV3bHN0YXQsIDIpCi1TWVNDQUxMKHN5c19uZXdmc3RhdCwgMikKLVNZU0NBTEwoc3lzX3VuYW1lLCAxKQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkJCS8qIDExMCAqLwotU1lTQ0FMTChzeXNfdmhhbmd1cCwgMCkKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQotU1lTQ0FMTChzeXNfd2FpdDQsIDQpCi1TWVNDQUxMKHN5c19zd2Fwb2ZmLCAxKQkJCS8qIDExNSAqLwotU1lTQ0FMTChzeXNfc3lzaW5mbywgMSkKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c19mc3luYywgMSkKLVNZU0NBTEwoc3lzX3NpZ3JldHVybiwgMCkKLVNZU0NBTEwoc3lzX2Nsb25lLCAwKQkJCS8qIDEyMCAqLwotU1lTQ0FMTChzeXNfc2V0ZG9tYWlubmFtZSwgMikKLVNZU0NBTEwoc3lzX25ld3VuYW1lLCAxKQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkKLVNZU0NBTEwoc3lzX2FkanRpbWV4LCAxKQotU1lTQ0FMTChzeXNfbXByb3RlY3QsIDMpCQkvKiAxMjUgKi8KLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDMpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAyKQotU1lTQ0FMTChzeXNfaW5pdF9tb2R1bGUsIDIpCi1TWVNDQUxMKHN5c19kZWxldGVfbW9kdWxlLCAxKQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMSkJCS8qIDEzMCAqLwotU1lTQ0FMTChzeXNfcXVvdGFjdGwsIDApCi1TWVNDQUxMKHN5c19nZXRwZ2lkLCAxKQotU1lTQ0FMTChzeXNfZmNoZGlyLCAxKQotU1lTQ0FMTChzeXNfYmRmbHVzaCwgMikKLVNZU0NBTEwoc3lzX3N5c2ZzLCAzKQkJCS8qIDEzNSAqLwotU1lTQ0FMTChzeXNfcGVyc29uYWxpdHksIDEpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCAwKQotU1lTQ0FMTChzeXNfc2V0ZnN1aWQsIDEpCi1TWVNDQUxMKHN5c19zZXRmc2dpZCwgMSkKLVNZU0NBTEwoc3lzX2xsc2VlaywgNSkJCQkvKiAxNDAgKi8KLVNZU0NBTEwoc3lzX2dldGRlbnRzLCAzKQotU1lTQ0FMTChzeXNfc2VsZWN0LCA1KQotU1lTQ0FMTChzeXNfZmxvY2ssIDIpCi1TWVNDQUxMKHN5c19tc3luYywgMykKLVNZU0NBTEwoc3lzX3JlYWR2LCAzKQkJCS8qIDE0NSAqLwotU1lTQ0FMTChzeXNfd3JpdGV2LCAzKQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMykKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDMpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCA0KQkJLyogaGFuZGxlZCBpbiBmYXN0IHN5c2NhbGwgaGFuZGxlci4gKi8KLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCQkvKiAxNTAgKi8KLVNZU0NBTEwoc3lzX2dldHNpZCwgMSkKLVNZU0NBTEwoc3lzX2ZkYXRhc3luYywgMSkKLVNZU0NBTEwoc3lzX3N5c2N0bCwgMSkKLVNZU0NBTEwoc3lzX21sb2NrLCAyKQotU1lTQ0FMTChzeXNfbXVubG9jaywgMikJCQkvKiAxNTUgKi8KLVNZU0NBTEwoc3lzX21sb2NrYWxsLCAxKQotU1lTQ0FMTChzeXNfbXVubG9ja2FsbCwgMCkKLVNZU0NBTEwoc3lzX3NjaGVkX3NldHBhcmFtLDIpCi1TWVNDQUxMKHN5c19zY2hlZF9nZXRwYXJhbSwyKQotU1lTQ0FMTChzeXNfc2NoZWRfc2V0c2NoZWR1bGVyLDMpCS8qIDE2MCAqLwotU1lTQ0FMTChzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyLDEpCi1TWVNDQUxMKHN5c19zY2hlZF95aWVsZCwwKQotU1lTQ0FMTChzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwxKQotU1lTQ0FMTChzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiwxKQotU1lTQ0FMTChzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsLDIpCS8qIDE2NSAqLwotU1lTQ0FMTChzeXNfbmFub3NsZWVwLDIpCi1TWVNDQUxMKHN5c19tcmVtYXAsNCkKLVNZU0NBTEwoc3lzX2FjY2VwdCwgMykKLVNZU0NBTEwoc3lzX2JpbmQsIDMpCi1TWVNDQUxMKHN5c19jb25uZWN0LCAzKQkJCS8qIDE3MCAqLwotU1lTQ0FMTChzeXNfZ2V0cGVlcm5hbWUsIDMpCi1TWVNDQUxMKHN5c19nZXRzb2NrbmFtZSwgMykKLVNZU0NBTEwoc3lzX2dldHNvY2tvcHQsIDUpCi1TWVNDQUxMKHN5c19saXN0ZW4sIDIpCi1TWVNDQUxMKHN5c19yZWN2LCA0KQkJCS8qIDE3NSAqLwotU1lTQ0FMTChzeXNfcmVjdmZyb20sIDYpCi1TWVNDQUxMKHN5c19yZWN2bXNnLCAzKQotU1lTQ0FMTChzeXNfc2VuZCwgNCkKLVNZU0NBTEwoc3lzX3NlbmRtc2csIDMpCi1TWVNDQUxMKHN5c19zZW5kdG8sIDYpCQkJLyogMTgwICovCi1TWVNDQUxMKHN5c19zZXRzb2Nrb3B0LCA1KQotU1lTQ0FMTChzeXNfc2h1dGRvd24sIDIpCi1TWVNDQUxMKHN5c19zb2NrZXQsIDMpCi1TWVNDQUxMKHN5c19zb2NrZXRwYWlyLCA0KQotU1lTQ0FMTChzeXNfc2V0cmVzdWlkLCAzKQkJLyogMTg1ICovCi1TWVNDQUxMKHN5c19nZXRyZXN1aWQsIDMpCi1TWVNDQUxMKHN5c19uaV9zeXNjYWxsLCA1KQotU1lTQ0FMTChzeXNfcG9sbCwgMykKLVNZU0NBTEwoc3lzX25mc3NlcnZjdGwsIDMpCi1TWVNDQUxMKHN5c19zZXRyZXNnaWQsIDMpCQkvKiAxOTAgKi8KLVNZU0NBTEwoc3lzX2dldHJlc2dpZCwgMykKLVNZU0NBTEwoc3lzX3ByY3RsLCA1KQotU1lTQ0FMTChzeXNfcnRfc2lncmV0dXJuLCAwKQotU1lTQ0FMTChzeXNfcnRfc2lnYWN0aW9uLCA0KQotU1lTQ0FMTChzeXNfcnRfc2lncHJvY21hc2ssIDQpCQkvKiAxOTUgKi8KLVNZU0NBTEwoc3lzX3J0X3NpZ3BlbmRpbmcsIDIpCi1TWVNDQUxMKHN5c19ydF9zaWd0aW1lZHdhaXQsIDQpCi1TWVNDQUxMKHN5c19ydF9zaWdxdWV1ZWluZm8sIDMpCi1TWVNDQUxMKHN5c19ydF9zaWdzdXNwZW5kLCAwKQotU1lTQ0FMTChzeXNfcHJlYWQ2NCwgNSkJCQkvKiAyMDAgKi8KLVNZU0NBTEwoc3lzX3B3cml0ZTY0LCA1KQotU1lTQ0FMTChzeXNfY2hvd24sIDMpCi1TWVNDQUxMKHN5c19nZXRjd2QsIDIpCi1TWVNDQUxMKHN5c19jYXBnZXQsIDIpCi1TWVNDQUxMKHN5c19jYXBzZXQsIDIpCQkJLyogMjA1ICovCi1TWVNDQUxMKHN5c19zaWdhbHRzdGFjaywgMCkKLVNZU0NBTEwoc3lzX3NlbmRmaWxlLCA0KQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkKLVNZU0NBTEwoc3lzX25pX3N5c2NhbGwsIDApCi1TWVNDQUxMKHN5c19tbWFwLCA2KQkJCS8qIDIxMCAqLwotU1lTQ0FMTChzeXNfdHJ1bmNhdGU2NCwgMikKLVNZU0NBTEwoc3lzX2Z0cnVuY2F0ZTY0LCAyKQotU1lTQ0FMTChzeXNfc3RhdDY0LCAyKQotU1lTQ0FMTChzeXNfbHN0YXQ2NCwgMikKLVNZU0NBTEwoc3lzX2ZzdGF0NjQsIDIpCQkJLyogMjE1ICovCi1TWVNDQUxMKHN5c19waXZvdF9yb290LCAyKQotU1lTQ0FMTChzeXNfbWluY29yZSwgMykKLVNZU0NBTEwoc3lzX21hZHZpc2UsIDMpCi1TWVNDQUxMKHN5c19nZXRkZW50czY0LCAzKQotU1lTQ0FMTChzeXNfbmlfc3lzY2FsbCwgMCkJCS8qIDIyMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKaW5kZXggMzczNDdlMy4uYTM1MDQzMSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpamlmZmllcyAqICgxMDAwMDAwMDAwIC8gSFopOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0JdGltZXJfaW50ZXJydXB0LAogCS5mbGFncyA9CUlSUUZfRElTQUJMRUQsCkBAIC0xNTAsNyArMTUwLDcgQEAKICAqIFRoZSB0aW1lciBpbnRlcnJ1cHQgaXMgY2FsbGVkIEhaIHRpbWVzIHBlciBzZWNvbmQuCiAgKi8KIAotaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoraXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC0xNjAsOSArMTYwLDkgQEAKIGFnYWluOgogCXdoaWxlICgoc2lnbmVkIGxvbmcpKGdldF9jY291bnQoKSAtIG5leHQpID4gMCkgewogCi0JCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HLCByZWdzKTsKKwkJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogI2lmbmRlZiBDT05GSUdfU01QCi0JCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CisJCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShnZXRfaXJxX3JlZ3MoKSkpOwogI2VuZGlmCiAKIAkJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jCmluZGV4IGNlMDc3ZDYuLjY5M2FiMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jCkBAIC03NSw3ICs3NSw3IEBACiAjZGVmaW5lIFVTRVIJCTB4MDIKIAogI2RlZmluZSBDT1BST0NFU1NPUih4KQkJCQkJCQlcCi17IFhDSEFMX0VYQ0NBVVNFX0NPUFJPQ0VTU09SICMjIHggIyMgX0RJU0FCTEVELCBVU0VSLCBmYXN0X2NvcHJvY2Vzc29yIH0KK3sgRVhDQ0FVU0VfQ09QUk9DRVNTT1IgIyMgeCAjIyBfRElTQUJMRUQsIFVTRVIsIGZhc3RfY29wcm9jZXNzb3IgfQogCiB0eXBlZGVmIHN0cnVjdCB7CiAJaW50IGNhdXNlOwpAQCAtODUsMzggKzg1LDM4IEBACiAKIGRpc3BhdGNoX2luaXRfdGFibGVfdCBfX2luaXQgZGlzcGF0Y2hfaW5pdF90YWJsZVtdID0gewogCi17IFhDSEFMX0VYQ0NBVVNFX0lMTEVHQUxfSU5TVFJVQ1RJT04sCTAsCSAgIGRvX2lsbGVnYWxfaW5zdHJ1Y3Rpb259LAoteyBYQ0hBTF9FWENDQVVTRV9TWVNURU1fQ0FMTCwJCUtSTkwsCSAgIGZhc3Rfc3lzY2FsbF9rZXJuZWwgfSwKLXsgWENIQUxfRVhDQ0FVU0VfU1lTVEVNX0NBTEwsCQlVU0VSLAkgICBmYXN0X3N5c2NhbGxfdXNlciB9LAoteyBYQ0hBTF9FWENDQVVTRV9TWVNURU1fQ0FMTCwJCTAsCSAgIHN5c3RlbV9jYWxsIH0sCi0vKiBYQ0hBTF9FWENDQVVTRV9JTlNUUlVDVElPTl9GRVRDSCB1bmhhbmRsZWQgKi8KLS8qIFhDSEFMX0VYQ0NBVVNFX0xPQURfU1RPUkVfRVJST1IgdW5oYW5kbGVkKi8KLXsgWENIQUxfRVhDQ0FVU0VfTEVWRUwxX0lOVEVSUlVQVCwJMCwJICAgZG9faW50ZXJydXB0IH0sCi17IFhDSEFMX0VYQ0NBVVNFX0FMTE9DQSwJCVVTRVJ8S1JOTCwgZmFzdF9hbGxvY2EgfSwKLS8qIFhDSEFMX0VYQ0NBVVNFX0lOVEVHRVJfRElWSURFX0JZX1pFUk8gdW5oYW5kbGVkICovCi0vKiBYQ0hBTF9FWENDQVVTRV9QUklWSUxFR0VEIHVuaGFuZGxlZCAqLworeyBFWENDQVVTRV9JTExFR0FMX0lOU1RSVUNUSU9OLAkwLAkgICBkb19pbGxlZ2FsX2luc3RydWN0aW9ufSwKK3sgRVhDQ0FVU0VfU1lTVEVNX0NBTEwsCQlLUk5MLAkgICBmYXN0X3N5c2NhbGxfa2VybmVsIH0sCit7IEVYQ0NBVVNFX1NZU1RFTV9DQUxMLAkJVVNFUiwJICAgZmFzdF9zeXNjYWxsX3VzZXIgfSwKK3sgRVhDQ0FVU0VfU1lTVEVNX0NBTEwsCQkwLAkgICBzeXN0ZW1fY2FsbCB9LAorLyogRVhDQ0FVU0VfSU5TVFJVQ1RJT05fRkVUQ0ggdW5oYW5kbGVkICovCisvKiBFWENDQVVTRV9MT0FEX1NUT1JFX0VSUk9SIHVuaGFuZGxlZCovCit7IEVYQ0NBVVNFX0xFVkVMMV9JTlRFUlJVUFQsCTAsCSAgIGRvX2ludGVycnVwdCB9LAoreyBFWENDQVVTRV9BTExPQ0EsCQlVU0VSfEtSTkwsIGZhc3RfYWxsb2NhIH0sCisvKiBFWENDQVVTRV9JTlRFR0VSX0RJVklERV9CWV9aRVJPIHVuaGFuZGxlZCAqLworLyogRVhDQ0FVU0VfUFJJVklMRUdFRCB1bmhhbmRsZWQgKi8KICNpZiBYQ0hBTF9VTkFMSUdORURfTE9BRF9FWENFUFRJT04gfHwgWENIQUxfVU5BTElHTkVEX1NUT1JFX0VYQ0VQVElPTgogI2lmZGVmIENPTkZJR19VTkFMSUdORURfVVNFUgoteyBYQ0hBTF9FWENDQVVTRV9VTkFMSUdORUQsCQlVU0VSLAkgICBmYXN0X3VuYWxpZ25lZCB9LAoreyBFWENDQVVTRV9VTkFMSUdORUQsCQlVU0VSLAkgICBmYXN0X3VuYWxpZ25lZCB9LAogI2Vsc2UKLXsgWENIQUxfRVhDQ0FVU0VfVU5BTElHTkVELAkJMCwJICAgZG9fdW5hbGlnbmVkX3VzZXIgfSwKK3sgRVhDQ0FVU0VfVU5BTElHTkVELAkJMCwJICAgZG9fdW5hbGlnbmVkX3VzZXIgfSwKICNlbmRpZgoteyBYQ0hBTF9FWENDQVVTRV9VTkFMSUdORUQsCQlLUk5MLAkgICBmYXN0X3VuYWxpZ25lZCB9LAoreyBFWENDQVVTRV9VTkFMSUdORUQsCQlLUk5MLAkgICBmYXN0X3VuYWxpZ25lZCB9LAogI2VuZGlmCi17IFhDSEFMX0VYQ0NBVVNFX0lUTEJfTUlTUywJCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKLXsgWENIQUxfRVhDQ0FVU0VfSVRMQl9NSVNTLAkJVVNFUnxLUk5MLCBmYXN0X3NlY29uZF9sZXZlbF9taXNzfSwKLXsgWENIQUxfRVhDQ0FVU0VfSVRMQl9NVUxUSUhJVCwJCTAsCSAgIGRvX211bHRpaGl0IH0sCi17IFhDSEFMX0VYQ0NBVVNFX0lUTEJfUFJJVklMRUdFLAkwLAkgICBkb19wYWdlX2ZhdWx0IH0sCi0vKiBYQ0hBTF9FWENDQVVTRV9TSVpFX1JFU1RSSUNUSU9OIHVuaGFuZGxlZCAqLwoteyBYQ0hBTF9FWENDQVVTRV9GRVRDSF9DQUNIRV9BVFRSSUJVVEUsCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKLXsgWENIQUxfRVhDQ0FVU0VfRFRMQl9NSVNTLAkJVVNFUnxLUk5MLCBmYXN0X3NlY29uZF9sZXZlbF9taXNzfSwKLXsgWENIQUxfRVhDQ0FVU0VfRFRMQl9NSVNTLAkJMCwJICAgZG9fcGFnZV9mYXVsdCB9LAoteyBYQ0hBTF9FWENDQVVTRV9EVExCX01VTFRJSElULAkJMCwJICAgZG9fbXVsdGloaXQgfSwKLXsgWENIQUxfRVhDQ0FVU0VfRFRMQl9QUklWSUxFR0UsCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKLS8qIFhDSEFMX0VYQ0NBVVNFX0RUTEJfU0laRV9SRVNUUklDVElPTiB1bmhhbmRsZWQgKi8KLXsgWENIQUxfRVhDQ0FVU0VfU1RPUkVfQ0FDSEVfQVRUUklCVVRFLAlVU0VSfEtSTkwsIGZhc3Rfc3RvcmVfcHJvaGliaXRlZCB9LAoteyBYQ0hBTF9FWENDQVVTRV9TVE9SRV9DQUNIRV9BVFRSSUJVVEUsCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKLXsgWENIQUxfRVhDQ0FVU0VfTE9BRF9DQUNIRV9BVFRSSUJVVEUsCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKK3sgRVhDQ0FVU0VfSVRMQl9NSVNTLAkJMCwJICAgZG9fcGFnZV9mYXVsdCB9LAoreyBFWENDQVVTRV9JVExCX01JU1MsCQlVU0VSfEtSTkwsIGZhc3Rfc2Vjb25kX2xldmVsX21pc3N9LAoreyBFWENDQVVTRV9JVExCX01VTFRJSElULAkJMCwJICAgZG9fbXVsdGloaXQgfSwKK3sgRVhDQ0FVU0VfSVRMQl9QUklWSUxFR0UsCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKKy8qIEVYQ0NBVVNFX1NJWkVfUkVTVFJJQ1RJT04gdW5oYW5kbGVkICovCit7IEVYQ0NBVVNFX0ZFVENIX0NBQ0hFX0FUVFJJQlVURSwJMCwJICAgZG9fcGFnZV9mYXVsdCB9LAoreyBFWENDQVVTRV9EVExCX01JU1MsCQlVU0VSfEtSTkwsIGZhc3Rfc2Vjb25kX2xldmVsX21pc3N9LAoreyBFWENDQVVTRV9EVExCX01JU1MsCQkwLAkgICBkb19wYWdlX2ZhdWx0IH0sCit7IEVYQ0NBVVNFX0RUTEJfTVVMVElISVQsCQkwLAkgICBkb19tdWx0aWhpdCB9LAoreyBFWENDQVVTRV9EVExCX1BSSVZJTEVHRSwJMCwJICAgZG9fcGFnZV9mYXVsdCB9LAorLyogRVhDQ0FVU0VfRFRMQl9TSVpFX1JFU1RSSUNUSU9OIHVuaGFuZGxlZCAqLworeyBFWENDQVVTRV9TVE9SRV9DQUNIRV9BVFRSSUJVVEUsCVVTRVJ8S1JOTCwgZmFzdF9zdG9yZV9wcm9oaWJpdGVkIH0sCit7IEVYQ0NBVVNFX1NUT1JFX0NBQ0hFX0FUVFJJQlVURSwJMCwJICAgZG9fcGFnZV9mYXVsdCB9LAoreyBFWENDQVVTRV9MT0FEX0NBQ0hFX0FUVFJJQlVURSwJMCwJICAgZG9fcGFnZV9mYXVsdCB9LAogLyogWENDSEFMX0VYQ0NBVVNFX0ZMT0FUSU5HX1BPSU5UIHVuaGFuZGxlZCAqLwogI2lmIChYQ0hBTF9DUF9NQVNLICYgMSkKIENPUFJPQ0VTU09SKDApLApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3ZlY3RvcnMuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC92ZWN0b3JzLlMKaW5kZXggMGU3NDM5Ny4uZWIyZDdiYiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3ZlY3RvcnMuUworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdmVjdG9ycy5TCkBAIC01Myw2ICs1Myw4IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCisjZGVmaW5lIFdJTkRPV19WRUNUT1JTX1NJWkUgICAweDE4MAorCiAKIC8qCiAgKiBVc2VyIGV4Y2VwdGlvbiB2ZWN0b3IuIChFeGNlcHRpb25zIHdpdGggUFMuVU0gPT0gMSwgUFMuRVhDTSA9PSAwKQpAQCAtMjEwLDcgKzIxMiw3IEBACiAJLyogQ2hlY2sgZm9yIGtlcm5lbCBkb3VibGUgZXhjZXB0aW9uICh1c3VhbGx5IGZhdGFsKS4gKi8KIAogCXJzcglhMywgUFMKLQlfYmJjaS5sCWEzLCBQU19VTV9TSElGVCwgLkxrc3AKKwlfYmJjaS5sCWEzLCBQU19VTV9CSVQsIC5Ma3NwCiAKIAkvKiBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IGhhbmRsaW5nIGEgd2luZG93IGV4Y2VwdGlvbi4gKi8KIAkvKiBOb3RlOiBXZSBkb24ndCBuZWVkIHRvIGluZGljYXRlIHRoYXQgd2UgZW50ZXIgYSBjcml0aWNhbCBzZWN0aW9uLiAqLwpAQCAtMjE5LDcgKzIyMSw3IEBACiAKIAltb3ZpCWEzLCBYQ0hBTF9XSU5ET1dfVkVDVE9SU19WQUREUgogCV9ibHR1CWEwLCBhMywgLkxmaXh1cAotCWFkZGkJYTMsIGEzLCBYU0hBTF9XSU5ET1dfVkVDVE9SU19TSVpFCisJYWRkaQlhMywgYTMsIFdJTkRPV19WRUNUT1JTX1NJWkUKIAlfYmdldQlhMCwgYTMsIC5MZml4dXAKIAogCS8qIFdpbmRvdyBvdmVyZmxvdy91bmRlcmZsb3cgZXhjZXB0aW9uLiBHZXQgc3RhY2sgcG9pbnRlci4gKi8KQEAgLTI0NSw3ICsyNDcsNyBAQAogCiAJd3NyCWEyLCBERVBDCQkjIHNhdmUgc3RhY2sgcG9pbnRlciB0ZW1wb3JhcmlseQogCXJzcglhMCwgUFMKLQlleHR1aQlhMCwgYTAsIFhDSEFMX1BTX09XQl9TSElGVCwgWENIQUxfUFNfT1dCX0JJVFMKKwlleHR1aQlhMCwgYTAsIFBTX09XQl9TSElGVCwgNAogCXdzcglhMCwgV0lORE9XQkFTRQogCXJzeW5jCiAKQEAgLTMxMiw4ICszMTQsOCBAQAogLkxrc3A6CS8qIGEwOiBhMCwgYTE6IGExLCBhMjogYTIsIGEzOiB0cmFzaGVkLCBkZXBjOiBkZXBjLCBleGNzYXZlOiBhMyAqLwogCiAJcnNyCWEzLCBFWENDQVVTRQotCWJlcWkJYTMsIFhDSEFMX0VYQ0NBVVNFX0lUTEJfTUlTUywgMWYKLQlhZGRpCWEzLCBhMywgLVhDSEFMX0VYQ0NBVVNFX0RUTEJfTUlTUworCWJlcWkJYTMsIEVYQ0NBVVNFX0lUTEJfTUlTUywgMWYKKwlhZGRpCWEzLCBhMywgLUVYQ0NBVVNFX0RUTEJfTUlTUwogCWJuZXoJYTMsIC5MdW5yZWNvdmVyYWJsZQogMToJbW92aQlhMywgZmFzdF9zZWNvbmRfbGV2ZWxfbWlzc19kb3VibGVfa2VybmVsCiAJangJYTMKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggY2ZlNzVmNS4uYTM2YzEwNCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE2LDE5ICsxNiwxNyBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KIAotI2RlZmluZSBfTk9DTEFOR1VBR0UKLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4KLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS92YXJpYW50L2NvcmUuaD4KIE9VVFBVVF9BUkNIKHh0ZW5zYSkKIEVOVFJZKF9zdGFydCkKIAotI2lmIFhDSEFMX01FTU9SWV9PUkRFUiA9PSBYVEhBTF9CSUdFTkRJQU4KKyNpZmRlZiBfX1hURU5TQV9FQl9fCiBqaWZmaWVzID0gamlmZmllc182NCArIDQ7CiAjZWxzZQogamlmZmllcyA9IGppZmZpZXNfNjQ7CiAjZW5kaWYKIAotI2RlZmluZSBLRVJORUxPRkZTRVQgMHgxMDAwCisjZGVmaW5lIEtFUk5FTE9GRlNFVCAweGQwMDAxMDAwCiAKIC8qIE5vdGU6IEluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBpdCB3b3VsZCBiZSBuaWNlIHRvIHNwZWNpZnkgb25seSB0aGUKICAgIHZlY3RvciBuYW1lIGFuZCBzZWN0aW9uIGtpbmQgYW5kIGNvbnN0cnVjdCAic3ltIiBhbmQgInNlY3Rpb24iIHVzaW5nCkBAIC03NSw3ICs3Myw3IEBACiAKIFNFQ1RJT05TCiB7Ci0gIC4gPSBYQ0hBTF9LU0VHX0NBQ0hFRF9WQUREUiArIEtFUk5FTE9GRlNFVDsKKyAgLiA9IEtFUk5FTE9GRlNFVDsKICAgLyogLnRleHQgc2VjdGlvbiAqLwogCiAgIF90ZXh0ID0gLjsKQEAgLTE1OSw3ICsxNTcsNyBAQAogCiAgIC8qIEluaXRpYWxpemF0aW9uIGNvZGUgYW5kIGRhdGE6ICovCiAKLSAgLiA9IEFMSUdOKDE8PFhDSEFMX01NVV9NSU5fUFRFX1BBR0VfU0laRSk7CisgIC4gPSBBTElHTigxIDw8IDEyKTsKICAgX19pbml0X2JlZ2luID0gLjsKICAgLmluaXQudGV4dCA6IHsKICAgCV9zaW5pdHRleHQgPSAuOwpAQCAtMjIzLDMyICsyMjEsMzIgQEAKIAkJICAuZHVtbXkpCiAgIFNFQ1RJT05fVkVDVE9SIChfRGVidWdJbnRlcnJ1cHRWZWN0b3JfbGl0ZXJhbCwKIAkJICAuRGVidWdJbnRlcnJ1cHRWZWN0b3IubGl0ZXJhbCwKLQkJICBYQ0hBTF9JTlRMRVZFTF9WRUNUT1JfVkFERFIoWENIQUxfREVCVUdMRVZFTCkgLSA0LAorCQkgIFhDSEFMX0RFQlVHX1ZFQ1RPUl9WQUREUiAtIDQsCiAJCSAgU0laRU9GKC5XaW5kb3dWZWN0b3JzLnRleHQpLAogCQkgIC5XaW5kb3dWZWN0b3JzLnRleHQpCiAgIFNFQ1RJT05fVkVDVE9SIChfRGVidWdJbnRlcnJ1cHRWZWN0b3JfdGV4dCwKIAkJICAuRGVidWdJbnRlcnJ1cHRWZWN0b3IudGV4dCwKLQkJICBYQ0hBTF9JTlRMRVZFTF9WRUNUT1JfVkFERFIoWENIQUxfREVCVUdMRVZFTCksCisJCSAgWENIQUxfREVCVUdfVkVDVE9SX1ZBRERSLAogCQkgIDQsCiAJCSAgLkRlYnVnSW50ZXJydXB0VmVjdG9yLmxpdGVyYWwpCiAgIFNFQ1RJT05fVkVDVE9SIChfS2VybmVsRXhjZXB0aW9uVmVjdG9yX2xpdGVyYWwsCiAJCSAgLktlcm5lbEV4Y2VwdGlvblZlY3Rvci5saXRlcmFsLAotCQkgIFhDSEFMX0tFUk5FTEVYQ19WRUNUT1JfVkFERFIgLSA0LAorCQkgIFhDSEFMX0tFUk5FTF9WRUNUT1JfVkFERFIgLSA0LAogCQkgIFNJWkVPRiguRGVidWdJbnRlcnJ1cHRWZWN0b3IudGV4dCksCiAJCSAgLkRlYnVnSW50ZXJydXB0VmVjdG9yLnRleHQpCiAgIFNFQ1RJT05fVkVDVE9SIChfS2VybmVsRXhjZXB0aW9uVmVjdG9yX3RleHQsCiAJCSAgLktlcm5lbEV4Y2VwdGlvblZlY3Rvci50ZXh0LAotCQkgIFhDSEFMX0tFUk5FTEVYQ19WRUNUT1JfVkFERFIsCisJCSAgWENIQUxfS0VSTkVMX1ZFQ1RPUl9WQUREUiwKIAkJICA0LAogCQkgIC5LZXJuZWxFeGNlcHRpb25WZWN0b3IubGl0ZXJhbCkKICAgU0VDVElPTl9WRUNUT1IgKF9Vc2VyRXhjZXB0aW9uVmVjdG9yX2xpdGVyYWwsCiAJCSAgLlVzZXJFeGNlcHRpb25WZWN0b3IubGl0ZXJhbCwKLQkJICBYQ0hBTF9VU0VSRVhDX1ZFQ1RPUl9WQUREUiAtIDQsCisJCSAgWENIQUxfVVNFUl9WRUNUT1JfVkFERFIgLSA0LAogCQkgIFNJWkVPRiguS2VybmVsRXhjZXB0aW9uVmVjdG9yLnRleHQpLAogCQkgIC5LZXJuZWxFeGNlcHRpb25WZWN0b3IudGV4dCkKICAgU0VDVElPTl9WRUNUT1IgKF9Vc2VyRXhjZXB0aW9uVmVjdG9yX3RleHQsCiAJCSAgLlVzZXJFeGNlcHRpb25WZWN0b3IudGV4dCwKLQkJICBYQ0hBTF9VU0VSRVhDX1ZFQ1RPUl9WQUREUiwKKwkJICBYQ0hBTF9VU0VSX1ZFQ1RPUl9WQUREUiwKIAkJICA0LAogCQkgIC5Vc2VyRXhjZXB0aW9uVmVjdG9yLmxpdGVyYWwpCiAgIFNFQ1RJT05fVkVDVE9SIChfRG91YmxlRXhjZXB0aW9uVmVjdG9yX2xpdGVyYWwsCkBAIC0yNjMsNyArMjYxLDcgQEAKIAkJICAuRG91YmxlRXhjZXB0aW9uVmVjdG9yLmxpdGVyYWwpCiAKICAgLiA9IChMT0FEQUREUiggLkRvdWJsZUV4Y2VwdGlvblZlY3Rvci50ZXh0ICkgKyBTSVpFT0YoIC5Eb3VibGVFeGNlcHRpb25WZWN0b3IudGV4dCApICsgMykgJiB+IDM7Ci0gIC4gPSBBTElHTigxPDxYQ0hBTF9NTVVfTUlOX1BURV9QQUdFX1NJWkUpOworICAuID0gQUxJR04oMSA8PCAxMik7CiAKICAgX19pbml0X2VuZCA9IC47CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2xpYi9jaGVja3N1bS5TIGIvYXJjaC94dGVuc2EvbGliL2NoZWNrc3VtLlMKaW5kZXggZTJkNjRkZi4uOWQ5Y2Q5OSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbGliL2NoZWNrc3VtLlMKKysrIGIvYXJjaC94dGVuc2EvbGliL2NoZWNrc3VtLlMKQEAgLTE2LDggKzE2LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNkZWZpbmUgX0FTTUxBTkdVQUdFCi0jaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9jb3JlLmg+CisjaW5jbHVkZSA8YXNtL3ZhcmlhbnQvY29yZS5oPgogCiAvKgogICogY29tcHV0ZXMgYSBwYXJ0aWFsIGNoZWNrc3VtLCBlLmcuIGZvciBUQ1AvVURQIGZyYWdtZW50cwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbGliL21lbWNvcHkuUyBiL2FyY2gveHRlbnNhL2xpYi9tZW1jb3B5LlMKaW5kZXggZThmNmQ3ZS4uZGRkYThmNCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbGliL21lbWNvcHkuUworKysgYi9hcmNoL3h0ZW5zYS9saWIvbWVtY29weS5TCkBAIC05LDcgKzksNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNSBUZW5zaWxpY2EgSW5jLgogICovCiAKLSNpbmNsdWRlIDx4dGVuc2EvY29yZWFzbS5oPgorI2luY2x1ZGUgPGFzbS92YXJpYW50L2NvcmUuaD4KIAogCS5tYWNybwlzcmNfYglyLCB3MCwgdzEKICNpZmRlZiBfX1hURU5TQV9FQl9fCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9saWIvbWVtc2V0LlMgYi9hcmNoL3h0ZW5zYS9saWIvbWVtc2V0LlMKaW5kZXggNGRlMjUxMy4uNTZhMTc0OSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbGliL21lbXNldC5TCisrKyBiL2FyY2gveHRlbnNhL2xpYi9tZW1zZXQuUwpAQCAtMTEsNyArMTEsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwMiBUZW5zaWxpY2EgSW5jLgogICovCiAKLSNpbmNsdWRlIDx4dGVuc2EvY29yZWFzbS5oPgorI2luY2x1ZGUgPGFzbS92YXJpYW50L2NvcmUuaD4KIAogLyoKICAqIHZvaWQgKm1lbXNldCh2b2lkICpkc3QsIGludCBjLCBzaXplX3QgbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbGliL3N0cm5jcHlfdXNlci5TIGIvYXJjaC94dGVuc2EvbGliL3N0cm5jcHlfdXNlci5TCmluZGV4IDcxZDU1ZGYuLmE4MzQwNTcgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2xpYi9zdHJuY3B5X3VzZXIuUworKysgYi9hcmNoL3h0ZW5zYS9saWIvc3RybmNweV91c2VyLlMKQEAgLTExLDcgKzExLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgVGVuc2lsaWNhIEluYy4KICAqLwogCi0jaW5jbHVkZSA8eHRlbnNhL2NvcmVhc20uaD4KKyNpbmNsdWRlIDxhc20vdmFyaWFudC9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAogLyogTG9hZCBvciBzdG9yZSBpbnN0cnVjdGlvbnMgdGhhdCBtYXkgY2F1c2UgZXhjZXB0aW9ucyB1c2UgdGhlIEVYIG1hY3JvLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbGliL3N0cm5sZW5fdXNlci5TIGIvYXJjaC94dGVuc2EvbGliL3N0cm5sZW5fdXNlci5TCmluZGV4IGNkZmY0ZDYuLjVlOWMxZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2xpYi9zdHJubGVuX3VzZXIuUworKysgYi9hcmNoL3h0ZW5zYS9saWIvc3Rybmxlbl91c2VyLlMKQEAgLTExLDcgKzExLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgVGVuc2lsaWNhIEluYy4KICAqLwogCi0jaW5jbHVkZSA8eHRlbnNhL2NvcmVhc20uaD4KKyNpbmNsdWRlIDxhc20vdmFyaWFudC9jb3JlLmg+CiAKIC8qIExvYWQgb3Igc3RvcmUgaW5zdHJ1Y3Rpb25zIHRoYXQgbWF5IGNhdXNlIGV4Y2VwdGlvbnMgdXNlIHRoZSBFWCBtYWNyby4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbGliL3VzZXJjb3B5LlMgYi9hcmNoL3h0ZW5zYS9saWIvdXNlcmNvcHkuUwppbmRleCA0NjQxZWY1Li5hOGFiMWQ0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9saWIvdXNlcmNvcHkuUworKysgYi9hcmNoL3h0ZW5zYS9saWIvdXNlcmNvcHkuUwpAQCAtNTMsNyArNTMsNyBAQAogICoJYTExLyBvcmlnaW5hbCBsZW5ndGgKICAqLwogCi0jaW5jbHVkZSA8eHRlbnNhL2NvcmVhc20uaD4KKyNpbmNsdWRlIDxhc20vdmFyaWFudC9jb3JlLmg+CiAKICNpZmRlZiBfX1hURU5TQV9FQl9fCiAjZGVmaW5lIEFMSUdOKFIsIFcwLCBXMSkgc3JjCVIsIFcwLCBXMQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbW0vZmF1bHQuYyBiL2FyY2gveHRlbnNhL21tL2ZhdWx0LmMKaW5kZXggZGQwZGJlYy4uM2RjNmYyZiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vZmF1bHQuYworKysgYi9hcmNoL3h0ZW5zYS9tbS9mYXVsdC5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAKLXVuc2lnbmVkIGxvbmcgYXNpZF9jYWNoZSA9IEFTSURfRklSU1RfVkVSU0lPTjsKK3Vuc2lnbmVkIGxvbmcgYXNpZF9jYWNoZSA9IEFTSURfVVNFUl9GSVJTVDsKIHZvaWQgYmFkX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MqLCB1bnNpZ25lZCBsb25nLCBpbnQpOwogCiAvKgpAQCAtNTgsMTAgKzU4LDEwIEBACiAJCXJldHVybjsKIAl9CiAKLQlpc193cml0ZSA9IChleGNjYXVzZSA9PSBYQ0hBTF9FWENDQVVTRV9TVE9SRV9DQUNIRV9BVFRSSUJVVEUpID8gMSA6IDA7Ci0JaXNfZXhlYyA9ICAoZXhjY2F1c2UgPT0gWENIQUxfRVhDQ0FVU0VfSVRMQl9QUklWSUxFR0UgfHwKLQkJICAgIGV4Y2NhdXNlID09IFhDSEFMX0VYQ0NBVVNFX0lUTEJfTUlTUyB8fAotCQkgICAgZXhjY2F1c2UgPT0gWENIQUxfRVhDQ0FVU0VfRkVUQ0hfQ0FDSEVfQVRUUklCVVRFKSA/IDEgOiAwOworCWlzX3dyaXRlID0gKGV4Y2NhdXNlID09IEVYQ0NBVVNFX1NUT1JFX0NBQ0hFX0FUVFJJQlVURSkgPyAxIDogMDsKKwlpc19leGVjID0gIChleGNjYXVzZSA9PSBFWENDQVVTRV9JVExCX1BSSVZJTEVHRSB8fAorCQkgICAgZXhjY2F1c2UgPT0gRVhDQ0FVU0VfSVRMQl9NSVNTIHx8CisJCSAgICBleGNjYXVzZSA9PSBFWENDQVVTRV9GRVRDSF9DQUNIRV9BVFRSSUJVVEUpID8gMSA6IDA7CiAKICNpZiAwCiAJcHJpbnRrKCJbJXM6JWQ6JTA4eDolZDolMDh4OiVzJXNdXG4iLCBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9pbml0LmMgYi9hcmNoL3h0ZW5zYS9tbS9pbml0LmMKaW5kZXggNjYwZWYwNS4uZTFlYzJkMSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vaW5pdC5jCisrKyBiL2FyY2gveHRlbnNhL21tL2luaXQuYwpAQCAtMTQxLDggKzE0MSw4IEBACiAJaWYgKG1pbl9sb3dfcGZuID4gbWF4X3BmbikKIAkJcGFuaWMoIk5vIG1lbW9yeSBmb3VuZCFcbiIpOwogCi0JbWF4X2xvd19wZm4gPSBtYXhfcGZuIDwgTUFYX0xPV19NRU1PUlkgPj4gUEFHRV9TSElGVCA/Ci0JCW1heF9wZm4gOiBNQVhfTE9XX01FTU9SWSA+PiBQQUdFX1NISUZUOworCW1heF9sb3dfcGZuID0gbWF4X3BmbiA8IE1BWF9NRU1fUEZOID4+IFBBR0VfU0hJRlQgPworCQltYXhfcGZuIDogTUFYX01FTV9QRk4gPj4gUEFHRV9TSElGVDsKIAogCS8qIEZpbmQgYW4gYXJlYSB0byB1c2UgZm9yIHRoZSBib290bWVtIGJpdG1hcC4gKi8KIApAQCAtMjE1LDcgKzIxNSw3IEBACiAKIAkvKiBTZXQgcmFzaWQgcmVnaXN0ZXIgdG8gYSBrbm93biB2YWx1ZS4gKi8KIAotCXNldF9yYXNpZF9yZWdpc3RlciAoQVNJRF9BTExfUkVTRVJWRUQpOworCXNldF9yYXNpZF9yZWdpc3RlciAoQVNJRF9VU0VSX0ZJUlNUKTsKIAogCS8qIFNldCBQVEVWQUREUiBzcGVjaWFsIHJlZ2lzdGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgcGFnZQogCSAqIHRhYmxlLCB3aGljaCBpcyBpbiBrZXJuZWwgbWFwcGFibGUgc3BhY2UgKGllLiBub3QKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL21pc2MuUyBiL2FyY2gveHRlbnNhL21tL21pc2MuUwppbmRleCAzMjdjMGYxLi5hZTA4NTMzIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9taXNjLlMKKysrIGIvYXJjaC94dGVuc2EvbW0vbWlzYy5TCkBAIC0xOSw5ICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLQotI2luY2x1ZGUgPHh0ZW5zYS9jYWNoZWFzbS5oPgotI2luY2x1ZGUgPHh0ZW5zYS9jYWNoZWF0dHJhc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVhc20uaD4KIAogLyogY2xlYXJfcGFnZSAocGFnZSkgKi8KIApAQCAtNzQsNTYgKzczLDE2IEBACiAKIAlyZXR3CiAKLQotLyoKLSAqIHZvaWQgX19mbHVzaF9pbnZhbGlkYXRlX2NhY2hlX2FsbCh2b2lkKQotICovCi0KLUVOVFJZKF9fZmx1c2hfaW52YWxpZGF0ZV9jYWNoZV9hbGwpCi0JZW50cnkJc3AsIDE2Ci0JZGNhY2hlX3dyaXRlYmFja19pbnZfYWxsIGEyLCBhMwotCWljYWNoZV9pbnZhbGlkYXRlX2FsbCBhMiwgYTMKLQlyZXR3Ci0KLS8qCi0gKiB2b2lkIF9faW52YWxpZGF0ZV9pY2FjaGVfYWxsKHZvaWQpCi0gKi8KLQotRU5UUlkoX19pbnZhbGlkYXRlX2ljYWNoZV9hbGwpCi0JZW50cnkJc3AsIDE2Ci0JaWNhY2hlX2ludmFsaWRhdGVfYWxsIGEyLCBhMwotCXJldHcKLQotLyoKLSAqIHZvaWQgX19mbHVzaF9pbnZhbGlkYXRlX2RjYWNoZV9hbGwodm9pZCkKLSAqLwotCi1FTlRSWShfX2ZsdXNoX2ludmFsaWRhdGVfZGNhY2hlX2FsbCkKLQllbnRyeQlzcCwgMTYKLQlkY2FjaGVfd3JpdGViYWNrX2ludl9hbGwgYTIsIGEzCi0JcmV0dwotCi0KLS8qCi0gKiB2b2lkIF9fZmx1c2hfaW52YWxpZGF0ZV9jYWNoZV9yYW5nZSh1bG9uZyBzdGFydCwgdWxvbmcgc2l6ZSkKLSAqLwotCi1FTlRSWShfX2ZsdXNoX2ludmFsaWRhdGVfY2FjaGVfcmFuZ2UpCi0JZW50cnkJc3AsIDE2Ci0JbW92CWE0LCBhMgotCW1vdglhNSwgYTMKLQlkY2FjaGVfd3JpdGViYWNrX2ludl9yZWdpb24gYTQsIGE1LCBhNgotCWljYWNoZV9pbnZhbGlkYXRlX3JlZ2lvbiBhMiwgYTMsIGE0Ci0JcmV0dwotCiAvKgogICogdm9pZCBfX2ludmFsaWRhdGVfaWNhY2hlX3BhZ2UodWxvbmcgc3RhcnQpCiAgKi8KIAogRU5UUlkoX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlKQogCWVudHJ5CXNwLCAxNgotCW1vdmkJYTMsIFBBR0VfU0laRQotCWljYWNoZV9pbnZhbGlkYXRlX3JlZ2lvbiBhMiwgYTMsIGE0CisKKwlfX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlIGEyIGEzCisJaXN5bmMKKwogCXJldHcKIAogLyoKQEAgLTEzMiwzNiArOTEsMTAgQEAKIAogRU5UUlkoX19pbnZhbGlkYXRlX2RjYWNoZV9wYWdlKQogCWVudHJ5CXNwLCAxNgotCW1vdmkJYTMsIFBBR0VfU0laRQotCWRjYWNoZV9pbnZhbGlkYXRlX3JlZ2lvbiBhMiwgYTMsIGE0Ci0JcmV0dwogCi0vKgotICogdm9pZCBfX2ludmFsaWRhdGVfaWNhY2hlX3JhbmdlKHVsb25nIHN0YXJ0LCB1bG9uZyBzaXplKQotICovCisJX19faW52YWxpZGF0ZV9kY2FjaGVfcGFnZSBhMiBhMworCWRzeW5jCiAKLUVOVFJZKF9faW52YWxpZGF0ZV9pY2FjaGVfcmFuZ2UpCi0JZW50cnkJc3AsIDE2Ci0JaWNhY2hlX2ludmFsaWRhdGVfcmVnaW9uIGEyLCBhMywgYTQKLQlyZXR3Ci0KLS8qCi0gKiB2b2lkIF9faW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UodWxvbmcgc3RhcnQsIHVsb25nIHNpemUpCi0gKi8KLQotRU5UUlkoX19pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSkKLQllbnRyeQlzcCwgMTYKLQlkY2FjaGVfaW52YWxpZGF0ZV9yZWdpb24gYTIsIGEzLCBhNAotCXJldHcKLQotLyoKLSAqIHZvaWQgX19mbHVzaF9kY2FjaGVfcGFnZSh1bG9uZyBzdGFydCkKLSAqLwotCi1FTlRSWShfX2ZsdXNoX2RjYWNoZV9wYWdlKQotCWVudHJ5CXNwLCAxNgotCW1vdmkJYTMsIFBBR0VfU0laRQotCWRjYWNoZV93cml0ZWJhY2tfcmVnaW9uIGEyLCBhMywgYTQKIAlyZXR3CiAKIC8qCkBAIC0xNzAsOCArMTAzLDM2IEBACiAKIEVOVFJZKF9fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfcGFnZSkKIAllbnRyeQlzcCwgMTYKLQltb3ZpCWEzLCBQQUdFX1NJWkUKLQlkY2FjaGVfd3JpdGViYWNrX2ludl9yZWdpb24gYTIsIGEzLCBhNAorCisJX19fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfcGFnZSBhMiBhMworCisJZHN5bmMKKwlyZXR3CisKKy8qCisgKiB2b2lkIF9fZmx1c2hfZGNhY2hlX3BhZ2UodWxvbmcgc3RhcnQpCisgKi8KKworRU5UUlkoX19mbHVzaF9kY2FjaGVfcGFnZSkKKwllbnRyeQlzcCwgMTYKKworCV9fX2ZsdXNoX2RjYWNoZV9wYWdlIGEyIGEzCisKKwlkc3luYworCXJldHcKKworCisKKy8qCisgKiB2b2lkIF9faW52YWxpZGF0ZV9pY2FjaGVfcmFuZ2UodWxvbmcgc3RhcnQsIHVsb25nIHNpemUpCisgKi8KKworRU5UUlkoX19pbnZhbGlkYXRlX2ljYWNoZV9yYW5nZSkKKwllbnRyeQlzcCwgMTYKKworCV9fX2ludmFsaWRhdGVfaWNhY2hlX3JhbmdlIGEyIGEzIGE0CisJaXN5bmMKKwogCXJldHcKIAogLyoKQEAgLTE4MCwxOTUgKzE0MSw2OSBAQAogCiBFTlRSWShfX2ZsdXNoX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlKQogCWVudHJ5CXNwLCAxNgotCWRjYWNoZV93cml0ZWJhY2tfaW52X3JlZ2lvbiBhMiwgYTMsIGE0CisKKwlfX19mbHVzaF9pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSBhMiBhMyBhNAorCWRzeW5jCisKIAlyZXR3CiAKIC8qCi0gKiB2b2lkIF9faW52YWxpZGF0ZV9kY2FjaGVfYWxsKHZvaWQpCisgKiB2b2lkIF9mbHVzaF9kY2FjaGVfcmFuZ2UodWxvbmcgc3RhcnQsIHVsb25nIHNpemUpCisgKi8KKworRU5UUlkoX19mbHVzaF9kY2FjaGVfcmFuZ2UpCisJZW50cnkJc3AsIDE2CisKKwlfX19mbHVzaF9kY2FjaGVfcmFuZ2UgYTIgYTMgYTQKKwlkc3luYworCisJcmV0dworCisvKgorICogdm9pZCBfaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UodWxvbmcgc3RhcnQsIHVsb25nIHNpemUpCisgKi8KKworRU5UUlkoX19pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSkKKwllbnRyeQlzcCwgMTYKKworCV9fX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlIGEyIGEzIGE0CisKKworCXJldHcKKworLyoKKyAqIHZvaWQgX2ludmFsaWRhdGVfaWNhY2hlX2FsbCh2b2lkKQorICovCisKK0VOVFJZKF9faW52YWxpZGF0ZV9pY2FjaGVfYWxsKQorCWVudHJ5CXNwLCAxNgorCisJX19faW52YWxpZGF0ZV9pY2FjaGVfYWxsIGEyIGEzCisJaXN5bmMKKworCXJldHcKKworLyoKKyAqIHZvaWQgX2ZsdXNoX2ludmFsaWRhdGVfZGNhY2hlX2FsbCh2b2lkKQorICovCisKK0VOVFJZKF9fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfYWxsKQorCWVudHJ5CXNwLCAxNgorCisJX19fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfYWxsIGEyIGEzCisJZHN5bmMKKworCXJldHcKKworLyoKKyAqIHZvaWQgX2ludmFsaWRhdGVfZGNhY2hlX2FsbCh2b2lkKQogICovCiAKIEVOVFJZKF9faW52YWxpZGF0ZV9kY2FjaGVfYWxsKQogCWVudHJ5CXNwLCAxNgotCWRjYWNoZV9pbnZhbGlkYXRlX2FsbCBhMiwgYTMKLQlyZXR3CiAKLS8qCi0gKiB2b2lkIF9fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfcGFnZV9waHlzKHVsb25nIHN0YXJ0KQotICovCi0KLUVOVFJZKF9fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfcGFnZV9waHlzKQotCWVudHJ5CXNwLCAxNgotCi0JbW92aQlhMywgWENIQUxfRENBQ0hFX1NJWkUKLQltb3ZpCWE0LCBQQUdFX01BU0sgfCAxCi0JYWRkaQlhMiwgYTIsIDEKLQotMToJYWRkaQlhMywgYTMsIC1YQ0hBTF9EQ0FDSEVfTElORVNJWkUKLQotCWxkY3QJYTYsIGEzCisJX19faW52YWxpZGF0ZV9kY2FjaGVfYWxsIGEyIGEzCiAJZHN5bmMKLQlhbmQJYTYsIGE2LCBhNAotCWJlcQlhNiwgYTIsIDJmCi0JYmdldWkJYTMsIDIsIDFiCi0JcmV0dwotCi0yOglkaXdiaQlhMywgMAotCWJnZXVpCWEzLCAyLCAxYgotCXJldHcKLQotRU5UUlkoY2hlY2tfZGNhY2hlX2xvdzApCi0JZW50cnkJc3AsIDE2Ci0KLQltb3ZpCWEzLCBYQ0hBTF9EQ0FDSEVfU0laRSAvIDQKLQltb3ZpCWE0LCBQQUdFX01BU0sgfCAxCi0JYWRkaQlhMiwgYTIsIDEKLQotMToJYWRkaQlhMywgYTMsIC1YQ0hBTF9EQ0FDSEVfTElORVNJWkUKLQotCWxkY3QJYTYsIGEzCi0JZHN5bmMKLQlhbmQJYTYsIGE2LCBhNAotCWJlcQlhNiwgYTIsIDJmCi0JYmdldWkJYTMsIDIsIDFiCi0JcmV0dwotCi0yOglqIDJiCi0KLUVOVFJZKGNoZWNrX2RjYWNoZV9oaWdoMCkKLQllbnRyeQlzcCwgMTYKLQotCW1vdmkJYTUsIFhDSEFMX0RDQUNIRV9TSVpFIC8gNAotCW1vdmkJYTMsIFhDSEFMX0RDQUNIRV9TSVpFIC8gMgotCW1vdmkJYTQsIFBBR0VfTUFTSyB8IDEKLQlhZGRpCWEyLCBhMiwgMQotCi0xOglhZGRpCWEzLCBhMywgLVhDSEFMX0RDQUNIRV9MSU5FU0laRQotCWFkZGkJYTUsIGE1LCAtWENIQUxfRENBQ0hFX0xJTkVTSVpFCi0KLQlsZGN0CWE2LCBhMwotCWRzeW5jCi0JYW5kCWE2LCBhNiwgYTQKLQliZXEJYTYsIGEyLCAyZgotCWJnZXVpCWE1LCAyLCAxYgotCXJldHcKLQotMjoJaiAyYgotCi1FTlRSWShjaGVja19kY2FjaGVfbG93MSkKLQllbnRyeQlzcCwgMTYKLQotCW1vdmkJYTUsIFhDSEFMX0RDQUNIRV9TSVpFIC8gNAotCW1vdmkJYTMsIFhDSEFMX0RDQUNIRV9TSVpFICogMyAvIDQKLQltb3ZpCWE0LCBQQUdFX01BU0sgfCAxCi0JYWRkaQlhMiwgYTIsIDEKLQotMToJYWRkaQlhMywgYTMsIC1YQ0hBTF9EQ0FDSEVfTElORVNJWkUKLQlhZGRpCWE1LCBhNSwgLVhDSEFMX0RDQUNIRV9MSU5FU0laRQotCi0JbGRjdAlhNiwgYTMKLQlkc3luYwotCWFuZAlhNiwgYTYsIGE0Ci0JYmVxCWE2LCBhMiwgMmYKLQliZ2V1aQlhNSwgMiwgMWIKLQlyZXR3Ci0KLTI6CWogMmIKLQotRU5UUlkoY2hlY2tfZGNhY2hlX2hpZ2gxKQotCWVudHJ5CXNwLCAxNgotCi0JbW92aQlhNSwgWENIQUxfRENBQ0hFX1NJWkUgLyA0Ci0JbW92aQlhMywgWENIQUxfRENBQ0hFX1NJWkUKLQltb3ZpCWE0LCBQQUdFX01BU0sgfCAxCi0JYWRkaQlhMiwgYTIsIDEKLQotMToJYWRkaQlhMywgYTMsIC1YQ0hBTF9EQ0FDSEVfTElORVNJWkUKLQlhZGRpCWE1LCBhNSwgLVhDSEFMX0RDQUNIRV9MSU5FU0laRQotCi0JbGRjdAlhNiwgYTMKLQlkc3luYwotCWFuZAlhNiwgYTYsIGE0Ci0JYmVxCWE2LCBhMiwgMmYKLQliZ2V1aQlhNSwgMiwgMWIKLQlyZXR3Ci0KLTI6CWogMmIKLQotCi0vKgotICogdm9pZCBfX2ludmFsaWRhdGVfaWNhY2hlX3BhZ2VfcGh5cyh1bG9uZyBzdGFydCkKLSAqLwotCi1FTlRSWShfX2ludmFsaWRhdGVfaWNhY2hlX3BhZ2VfcGh5cykKLQllbnRyeQlzcCwgMTYKLQotCW1vdmkJYTMsIFhDSEFMX0lDQUNIRV9TSVpFCi0JbW92aQlhNCwgUEFHRV9NQVNLIHwgMQotCWFkZGkJYTIsIGEyLCAxCi0KLTE6CWFkZGkJYTMsIGEzLCAtWENIQUxfSUNBQ0hFX0xJTkVTSVpFCi0KLQlsaWN0CWE2LCBhMwotCWlzeW5jCi0JYW5kCWE2LCBhNiwgYTQKLQliZXEJYTYsIGEyLCAyZgotCWJnZXVpCWEzLCAyLCAxYgotCXJldHcKLQotMjoJaWlpCWEzLCAwCi0JYmdldWkJYTMsIDIsIDFiCi0JcmV0dwotCi0KLSNpZiAwCi0KLQltb3ZpCWEzLCBYQ0hBTF9EQ0FDSEVfV0FZUyAtIDEKLQltb3ZpCWE0LCBQQUdFX1NJWkUKLQotMToJbW92CWE1LCBhMgotCWFkZAlhNiwgYTIsIGE0Ci0KLTI6CWRpd2JpCWE1LCAwCi0JZGl3YmkJYTUsIFhDSEFMX0RDQUNIRV9MSU5FU0laRQotCWRpd2JpCWE1LCBYQ0hBTF9EQ0FDSEVfTElORVNJWkUgKiAyCi0JZGl3YmkJYTUsIFhDSEFMX0RDQUNIRV9MSU5FU0laRSAqIDMKLQotCWFkZGkJYTUsIGE1LCBYQ0hBTF9EQ0FDSEVfTElORVNJWkUgKiA0Ci0JYmx0CWE1LCBhNiwgMmIKLQotCWFkZGkJYTMsIGEzLCAtMQotCWFkZGkJYTIsIGEyLCBYQ0hBTF9EQ0FDSEVfU0laRSAvIFhDSEFMX0RDQUNIRV9XQVlTCi0JYmdleglhMywgMWIKIAogCXJldHcKIAotRU5UUlkoX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlX2luZGV4KQotCWVudHJ5CXNwLCAxNgotCi0JbW92aQlhMywgWENIQUxfSUNBQ0hFX1dBWVMgLSAxCi0JbW92aQlhNCwgUEFHRV9TSVpFCi0KLTE6CW1vdglhNSwgYTIKLQlhZGQJYTYsIGEyLCBhNAotCi0yOglpaWkJYTUsIDAKLQlpaWkJYTUsIFhDSEFMX0lDQUNIRV9MSU5FU0laRQotCWlpaQlhNSwgWENIQUxfSUNBQ0hFX0xJTkVTSVpFICogMgotCWlpaQlhNSwgWENIQUxfSUNBQ0hFX0xJTkVTSVpFICogMwotCi0JYWRkaQlhNSwgYTUsIFhDSEFMX0lDQUNIRV9MSU5FU0laRSAqIDQKLQlibHQJYTUsIGE2LCAyYgotCi0JYWRkaQlhMywgYTMsIC0xCi0JYWRkaQlhMiwgYTIsIFhDSEFMX0lDQUNIRV9TSVpFIC8gWENIQUxfSUNBQ0hFX1dBWVMKLQliZ2V6CWEzLCAyYgotCi0JcmV0dwotCi0jZW5kaWYKLQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL3RsYi5jIGIvYXJjaC94dGVuc2EvbW0vdGxiLmMKaW5kZXggMGZlZmI4NjYuLjIzOTQ2MWQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL21tL3RsYi5jCisrKyBiL2FyY2gveHRlbnNhL21tL3RsYi5jCkBAIC0yNCwxMiArMjQsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfaXRsYl9hbGwgKHZvaWQpCiB7Ci0JaW50IHdheSwgaW5kZXg7CisJaW50IHcsIGk7CiAKLQlmb3IgKHdheSA9IDA7IHdheSA8IFhDSEFMX0lUTEJfQVJGX1dBWVM7IHdheSsrKSB7Ci0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IElUTEJfRU5UUklFU19QRVJfQVJGX1dBWTsgaW5kZXgrKykgewotCQkJaW50IGVudHJ5ID0gd2F5ICsgKGluZGV4IDw8IFBBR0VfU0hJRlQpOwotCQkJaW52YWxpZGF0ZV9pdGxiX2VudHJ5X25vX2lzeW5jIChlbnRyeSk7CisJZm9yICh3ID0gMDsgdyA8IElUTEJfQVJGX1dBWVM7IHcrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgWENIQUxfSVRMQl9BUkZfRU5UUklFU19MT0cyKTsgaSsrKSB7CisJCQlpbnQgZSA9IHcgKyAoaSA8PCBQQUdFX1NISUZUKTsKKwkJCWludmFsaWRhdGVfaXRsYl9lbnRyeV9ub19pc3luYyhlKTsKIAkJfQogCX0KIAlhc20gdm9sYXRpbGUgKCJpc3luY1xuIik7CkBAIC0zNywxMiArMzcsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfZHRsYl9hbGwgKHZvaWQpCiB7Ci0JaW50IHdheSwgaW5kZXg7CisJaW50IHcsIGk7CiAKLQlmb3IgKHdheSA9IDA7IHdheSA8IFhDSEFMX0RUTEJfQVJGX1dBWVM7IHdheSsrKSB7Ci0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IERUTEJfRU5UUklFU19QRVJfQVJGX1dBWTsgaW5kZXgrKykgewotCQkJaW50IGVudHJ5ID0gd2F5ICsgKGluZGV4IDw8IFBBR0VfU0hJRlQpOwotCQkJaW52YWxpZGF0ZV9kdGxiX2VudHJ5X25vX2lzeW5jIChlbnRyeSk7CisJZm9yICh3ID0gMDsgdyA8IERUTEJfQVJGX1dBWVM7IHcrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgWENIQUxfRFRMQl9BUkZfRU5UUklFU19MT0cyKTsgaSsrKSB7CisJCQlpbnQgZSA9IHcgKyAoaSA8PCBQQUdFX1NISUZUKTsKKwkJCWludmFsaWRhdGVfZHRsYl9lbnRyeV9ub19pc3luYyhlKTsKIAkJfQogCX0KIAlhc20gdm9sYXRpbGUgKCJpc3luY1xuIik7CkBAIC02MywyMSArNjMsMjUgQEAKIAogdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0jaWYgMAotCXByaW50aygiW3RsYm1tPCVseD5dXG4iLCAodW5zaWduZWQgbG9uZyltbS0+Y29udGV4dCk7Ci0jZW5kaWYKLQogCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pIHsKIAkJaW50IGZsYWdzOwogCQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQkJZ2V0X25ld19tbXVfY29udGV4dChtbSwgYXNpZF9jYWNoZSk7Ci0JCXNldF9yYXNpZF9yZWdpc3RlcihBU0lEX0lOU0VSVChtbS0+Y29udGV4dCkpOworCQlfX2dldF9uZXdfbW11X2NvbnRleHQobW0pOworCQlfX2xvYWRfbW11X2NvbnRleHQobW0pOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogCWVsc2UKIAkJbW0tPmNvbnRleHQgPSAwOwogfQogCisjZGVmaW5lIF9JVExCX0VOVFJJRVMgKElUTEJfQVJGX1dBWVMgPDwgWENIQUxfSVRMQl9BUkZfRU5UUklFU19MT0cyKQorI2RlZmluZSBfRFRMQl9FTlRSSUVTIChEVExCX0FSRl9XQVlTIDw8IFhDSEFMX0RUTEJfQVJGX0VOVFJJRVNfTE9HMikKKyNpZiBfSVRMQl9FTlRSSUVTID4gX0RUTEJfRU5UUklFUworIyBkZWZpbmUgX1RMQl9FTlRSSUVTIF9JVExCX0VOVFJJRVMKKyNlbHNlCisjIGRlZmluZSBfVExCX0VOVFJJRVMgX0RUTEJfRU5UUklFUworI2VuZGlmCisKIHZvaWQgZmx1c2hfdGxiX3JhbmdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKICAgICAJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtOTMsNyArOTcsNyBAQAogI2VuZGlmCiAJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CiAKLQlpZiAoZW5kLXN0YXJ0ICsgKFBBR0VfU0laRS0xKSA8PSBTTUFMTEVTVF9OVExCX0VOVFJJRVMgPDwgUEFHRV9TSElGVCkgeworCWlmIChlbmQtc3RhcnQgKyAoUEFHRV9TSVpFLTEpIDw9IF9UTEJfRU5UUklFUyA8PCBQQUdFX1NISUZUKSB7CiAJCWludCBvbGRwaWQgPSBnZXRfcmFzaWRfcmVnaXN0ZXIoKTsKIAkJc2V0X3Jhc2lkX3JlZ2lzdGVyIChBU0lEX0lOU0VSVChtbS0+Y29udGV4dCkpOwogCQlzdGFydCAmPSBQQUdFX01BU0s7CkBAIC0xMTEsOSArMTE1LDcgQEAKIAogCQlzZXRfcmFzaWRfcmVnaXN0ZXIob2xkcGlkKTsKIAl9IGVsc2UgewotCQlnZXRfbmV3X21tdV9jb250ZXh0KG1tLCBhc2lkX2NhY2hlKTsKLQkJaWYgKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKLQkJCXNldF9yYXNpZF9yZWdpc3RlcihBU0lEX0lOU0VSVChtbS0+Y29udGV4dCkpOworCQlmbHVzaF90bGJfbW0obW0pOwogCX0KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC0xMjMsMTAgKzEyNSw2IEBACiAJc3RydWN0IG1tX3N0cnVjdCogbW0gPSB2bWEtPnZtX21tOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9sZHBpZDsKLSNpZiAwCi0JcHJpbnRrKCJbdGxicGFnZTwlMDJseCwlMDhseD5dXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcpbW0tPmNvbnRleHQsIHBhZ2UpOwotI2VuZGlmCiAKIAlpZihtbS0+Y29udGV4dCA9PSBOT19DT05URVhUKQogCQlyZXR1cm47CkBAIC0xNDIsNDA0ICsxNDAsNSBAQAogCXNldF9yYXNpZF9yZWdpc3RlcihvbGRwaWQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0jaWYgMAotCWZsdXNoX3RsYl9hbGwoKTsKLQlyZXR1cm47Ci0jZW5kaWYKIH0KIAotCi0jaWZkZWYgREVCVUdfVExCCi0KLSNkZWZpbmUgVVNFX0lUTEIgIDAKLSNkZWZpbmUgVVNFX0RUTEIgIDEKLQotc3RydWN0IHdheV9jb25maWdfdCB7Ci0JaW50IGluZGljaWVzOwotCWludCBpbmRpY2llc19sb2cyOwotCWludCBwZ3N6X2xvZzI7Ci0JaW50IGFyZjsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgd2F5X2NvbmZpZ190IGl0bGJbWENIQUxfSVRMQl9XQVlTXSA9Ci17Ci0JeyBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTBfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0lUTEJfU0VUKFhDSEFMX0lUTEJfV0FZMF9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTBfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9XQVkwX1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTFfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0lUTEJfU0VUKFhDSEFMX0lUTEJfV0FZMV9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTFfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9XQVkxX1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTJfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0lUTEJfU0VUKFhDSEFMX0lUTEJfV0FZMl9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTJfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9XQVkyX1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTNfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0lUTEJfU0VUKFhDSEFMX0lUTEJfV0FZM19TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTNfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9XQVkzX1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTRfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0lUTEJfU0VUKFhDSEFMX0lUTEJfV0FZNF9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTRfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9XQVk0X1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTVfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0lUTEJfU0VUKFhDSEFMX0lUTEJfV0FZNV9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTVfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9XQVk1X1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTZfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0lUTEJfU0VUKFhDSEFMX0lUTEJfV0FZNl9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTZfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9XQVk2X1NFVCwgQVJGKQotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgd2F5X2NvbmZpZ190IGR0bGJbWENIQUxfRFRMQl9XQVlTXSA9Ci17Ci0JeyBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTBfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZMF9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTBfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVkwX1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTFfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZMV9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTFfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVkxX1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTJfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZMl9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTJfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVkyX1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTNfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZM19TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTNfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVkzX1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTRfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZNF9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTRfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVk0X1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTVfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZNV9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTVfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVk1X1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTZfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZNl9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTZfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVk2X1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTdfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZN19TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTdfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVk3X1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWThfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZOF9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWThfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVk4X1NFVCwgQVJGKQotCX0sCi0JeyBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTlfU0VULCBFTlRSSUVTKSwKLQkgIFhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZOV9TRVQsIEVOVFJJRVNfTE9HMiksCi0JICBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTlfU0VULCBQQUdFU1pfTE9HMl9NSU4pLAotCSAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVk5X1NFVCwgQVJGKQotCX0KLX07Ci0KLS8qICBUb3RhbCBudW1iZXIgb2YgZW50cmllczogICovCi0jZGVmaW5lIElUTEJfVE9UQUxfRU5UUklFUwlcCi0JCVhDSEFMX0lUTEJfU0VUKFhDSEFMX0lUTEJfV0FZMF9TRVQsIEVOVFJJRVMpICsgXAotCQlYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTFfU0VULCBFTlRSSUVTKSArIFwKLQkJWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9XQVkyX1NFVCwgRU5UUklFUykgKyBcCi0JCVhDSEFMX0lUTEJfU0VUKFhDSEFMX0lUTEJfV0FZM19TRVQsIEVOVFJJRVMpICsgXAotCQlYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX1dBWTRfU0VULCBFTlRSSUVTKSArIFwKLQkJWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9XQVk1X1NFVCwgRU5UUklFUykgKyBcCi0JCVhDSEFMX0lUTEJfU0VUKFhDSEFMX0lUTEJfV0FZNl9TRVQsIEVOVFJJRVMpCi0jZGVmaW5lIERUTEJfVE9UQUxfRU5UUklFUwlcCi0JCVhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZMF9TRVQsIEVOVFJJRVMpICsgXAotCQlYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTFfU0VULCBFTlRSSUVTKSArIFwKLQkJWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVkyX1NFVCwgRU5UUklFUykgKyBcCi0JCVhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZM19TRVQsIEVOVFJJRVMpICsgXAotCQlYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTRfU0VULCBFTlRSSUVTKSArIFwKLQkJWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVk1X1NFVCwgRU5UUklFUykgKyBcCi0JCVhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZNl9TRVQsIEVOVFJJRVMpICsgXAotCQlYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX1dBWTdfU0VULCBFTlRSSUVTKSArIFwKLQkJWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9XQVk4X1NFVCwgRU5UUklFUykgKyBcCi0JCVhDSEFMX0RUTEJfU0VUKFhDSEFMX0RUTEJfV0FZOV9TRVQsIEVOVFJJRVMpCi0KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuc2lnbmVkCQl2YTsKLSAgICB1bnNpZ25lZAkJcGE7Ci0gICAgdW5zaWduZWQgY2hhcglhc2lkOwotICAgIHVuc2lnbmVkIGNoYXIJY2E7Ci0gICAgdW5zaWduZWQgY2hhcgl3YXk7Ci0gICAgdW5zaWduZWQgY2hhcglpbmRleDsKLSAgICB1bnNpZ25lZCBjaGFyCXBnc3pfbG9nMjsJLyogMCAuLiAzMiAqLwotICAgIHVuc2lnbmVkIGNoYXIJdHlwZTsJCS8qIDA9SVRMQiAxPURUTEIgKi8KLX0gdGxiX2R1bXBfZW50cnlfdDsKLQotLyogIFJldHVybiAtMSBpZiBhIHByZWNlZGVzIGIsICsxIGlmIGEgZm9sbG93cyBiLCAwIGlmIHNhbWU6ICAqLwotaW50IGNtcF90bGJfZHVtcF9pbmZvKCB0bGJfZHVtcF9lbnRyeV90ICphLCB0bGJfZHVtcF9lbnRyeV90ICpiICkKLXsKLSAgICBpZiAoYS0+YXNpZCA8IGItPmFzaWQpIHJldHVybiAtMTsKLSAgICBpZiAoYS0+YXNpZCA+IGItPmFzaWQpIHJldHVybiAgMTsKLSAgICBpZiAoYS0+dmEgPCBiLT52YSkgcmV0dXJuIC0xOwotICAgIGlmIChhLT52YSA+IGItPnZhKSByZXR1cm4gIDE7Ci0gICAgaWYgKGEtPnBhIDwgYi0+cGEpIHJldHVybiAtMTsKLSAgICBpZiAoYS0+cGEgPiBiLT5wYSkgcmV0dXJuICAxOwotICAgIGlmIChhLT5jYSA8IGItPmNhKSByZXR1cm4gLTE7Ci0gICAgaWYgKGEtPmNhID4gYi0+Y2EpIHJldHVybiAgMTsKLSAgICBpZiAoYS0+d2F5IDwgYi0+d2F5KSByZXR1cm4gLTE7Ci0gICAgaWYgKGEtPndheSA+IGItPndheSkgcmV0dXJuICAxOwotICAgIGlmIChhLT5pbmRleCA8IGItPmluZGV4KSByZXR1cm4gLTE7Ci0gICAgaWYgKGEtPmluZGV4ID4gYi0+aW5kZXgpIHJldHVybiAgMTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBzb3J0X3RsYl9kdW1wX2luZm8oIHRsYl9kdW1wX2VudHJ5X3QgKnQsIGludCBuICkKLXsKLSAgICBpbnQgaSwgajsKLSAgICAvKiAgU2ltcGxlIE8obipuKSBzb3J0OiAgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyBpKyspCi0JZm9yIChqID0gaSsxOyBqIDwgbjsgaisrKQotCSAgICBpZiAoY21wX3RsYl9kdW1wX2luZm8odCtpLCB0K2opID4gMCkgewotCQl0bGJfZHVtcF9lbnRyeV90IHRtcCA9IHRbaV07Ci0JCXRbaV0gPSB0W2pdOwotCQl0W2pdID0gdG1wOwotCSAgICB9Ci19Ci0KLQotc3RhdGljIHRsYl9kdW1wX2VudHJ5X3QgaXRsYl9kdW1wX2luZm9bSVRMQl9UT1RBTF9FTlRSSUVTXTsKLXN0YXRpYyB0bGJfZHVtcF9lbnRyeV90IGR0bGJfZHVtcF9pbmZvW0RUTEJfVE9UQUxfRU5UUklFU107Ci0KLQotc3RhdGljIGlubGluZSBjaGFyICp3YXlfdHlwZSAoaW50IHR5cGUpCi17Ci0JcmV0dXJuIHR5cGUgPyAiYXV0b3JlZmlsbCIgOiAibm9uLWF1dG9yZWZpbGwiOwotfQotCi12b2lkIHByaW50X2VudHJ5IChzdHJ1Y3Qgd2F5X2NvbmZpZ190ICp3YXlfaW5mbywKLQkJICB1bnNpZ25lZCBpbnQgd2F5LAotCQkgIHVuc2lnbmVkIGludCBpbmRleCwKLQkJICB1bnNpZ25lZCBpbnQgdmlydHVhbCwKLQkJICB1bnNpZ25lZCBpbnQgdHJhbnNsYXRpb24pCi17Ci0JY2hhciB2YWxpZF9jaHI7Ci0JdW5zaWduZWQgaW50IHZhLCBwYSwgYXNpZCwgY2E7Ci0KLQl2YSA9IHZpcnR1YWwgJgotCSAgCX4oKDEgPDwgKHdheV9pbmZvLT5wZ3N6X2xvZzIgKyB3YXlfaW5mby0+aW5kaWNpZXNfbG9nMikpIC0gMSk7Ci0JYXNpZCA9IHZpcnR1YWwgJiAoKDEgPDwgWENIQUxfTU1VX0FTSURfQklUUykgLSAxKTsKLQlwYSA9IHRyYW5zbGF0aW9uICYgfigoMSA8PCB3YXlfaW5mby0+cGdzel9sb2cyKSAtIDEpOwotCWNhID0gdHJhbnNsYXRpb24gJiAoKDEgPDwgWENIQUxfTU1VX0NBX0JJVFMpIC0gMSk7Ci0JdmFsaWRfY2hyID0gYXNpZCA/ICdWJyA6ICdJJzsKLQotCS8qIENvbXB1dGUgYW5kIGluY29ycG9yYXRlIHRoZSBlZmZlY3Qgb2YgdGhlIGluZGV4IGJpdHMgb24gdGhlCi0JICogdmEuICBJdCdzIG1vcmUgdXNlZnVsIGZvciBrZXJuZWwgZGVidWdnaW5nLCBzaW5jZSB3ZSBhbHdheXMKLQkgKiB3YW50IHRvIGtub3cgdGhlIGVmZmVjdGl2ZSB2YSBhbnl3YXkuICovCi0KLQl2YSArPSBpbmRleCA8PCB3YXlfaW5mby0+cGdzel9sb2cyOwotCi0JcHJpbnRrICgiXHRbJWQsJWRdICglYykgdnBuIDB4JS44eCAgcHBuIDB4JS44eCAgYXNpZCAweCUuMnggIGFtIDB4JXhcbiIsCi0JCXdheSwgaW5kZXgsIHZhbGlkX2NociwgdmEsIHBhLCBhc2lkLCBjYSk7Ci19Ci0KLXZvaWQgcHJpbnRfaXRsYl9lbnRyeSAoc3RydWN0IHdheV9jb25maWdfdCAqd2F5X2luZm8sIGludCB3YXksIGludCBpbmRleCkKLXsKLQlwcmludF9lbnRyeSAod2F5X2luZm8sIHdheSwgaW5kZXgsCi0JCSAgICAgcmVhZF9pdGxiX3ZpcnR1YWwgKHdheSArIChpbmRleCA8PCB3YXlfaW5mby0+cGdzel9sb2cyKSksCi0JCSAgICAgcmVhZF9pdGxiX3RyYW5zbGF0aW9uICh3YXkgKyAoaW5kZXggPDwgd2F5X2luZm8tPnBnc3pfbG9nMikpKTsKLX0KLQotdm9pZCBwcmludF9kdGxiX2VudHJ5IChzdHJ1Y3Qgd2F5X2NvbmZpZ190ICp3YXlfaW5mbywgaW50IHdheSwgaW50IGluZGV4KQotewotCXByaW50X2VudHJ5ICh3YXlfaW5mbywgd2F5LCBpbmRleCwKLQkJICAgICByZWFkX2R0bGJfdmlydHVhbCAod2F5ICsgKGluZGV4IDw8IHdheV9pbmZvLT5wZ3N6X2xvZzIpKSwKLQkJICAgICByZWFkX2R0bGJfdHJhbnNsYXRpb24gKHdheSArIChpbmRleCA8PCB3YXlfaW5mby0+cGdzel9sb2cyKSkpOwotfQotCi12b2lkIGR1bXBfaXRsYiAodm9pZCkKLXsKLQlpbnQgd2F5LCBpbmRleDsKLQotCXByaW50ayAoIlxuSVRMQjogd2F5cyA9ICVkXG4iLCBYQ0hBTF9JVExCX1dBWVMpOwotCi0JZm9yICh3YXkgPSAwOyB3YXkgPCBYQ0hBTF9JVExCX1dBWVM7IHdheSsrKSB7Ci0JCXByaW50ayAoIlxuV2F5OiAlZCwgRW50cmllczogJWQsIE1pblBhZ2VTaXplOiAlZCwgVHlwZTogJXNcbiIsCi0JCQl3YXksIGl0bGJbd2F5XS5pbmRpY2llcywKLQkJCWl0bGJbd2F5XS5wZ3N6X2xvZzIsIHdheV90eXBlKGl0bGJbd2F5XS5hcmYpKTsKLQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaXRsYlt3YXldLmluZGljaWVzOyBpbmRleCsrKSB7Ci0JCQlwcmludF9pdGxiX2VudHJ5KCZpdGxiW3dheV0sIHdheSwgaW5kZXgpOwotCQl9Ci0JfQotfQotCi12b2lkIGR1bXBfZHRsYiAodm9pZCkKLXsKLQlpbnQgd2F5LCBpbmRleDsKLQotCXByaW50ayAoIlxuRFRMQjogd2F5cyA9ICVkXG4iLCBYQ0hBTF9EVExCX1dBWVMpOwotCi0JZm9yICh3YXkgPSAwOyB3YXkgPCBYQ0hBTF9EVExCX1dBWVM7IHdheSsrKSB7Ci0JCXByaW50ayAoIlxuV2F5OiAlZCwgRW50cmllczogJWQsIE1pblBhZ2VTaXplOiAlZCwgVHlwZTogJXNcbiIsCi0JCQl3YXksIGR0bGJbd2F5XS5pbmRpY2llcywKLQkJCWR0bGJbd2F5XS5wZ3N6X2xvZzIsIHdheV90eXBlKGR0bGJbd2F5XS5hcmYpKTsKLQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZHRsYlt3YXldLmluZGljaWVzOyBpbmRleCsrKSB7Ci0JCQlwcmludF9kdGxiX2VudHJ5KCZkdGxiW3dheV0sIHdheSwgaW5kZXgpOwotCQl9Ci0JfQotfQotCi12b2lkIGR1bXBfdGxiICh0bGJfZHVtcF9lbnRyeV90ICp0aW5mbywgc3RydWN0IHdheV9jb25maWdfdCAqY29uZmlnLAotCQlpbnQgZW50cmllcywgaW50IHdheXMsIGludCB0eXBlLCBpbnQgc2hvd19pbnZhbGlkKQotewotICAgIHRsYl9kdW1wX2VudHJ5X3QgKmUgPSB0aW5mbzsKLSAgICBpbnQgd2F5LCBpOwotCi0gICAgLyogIEdhdGhlciBhbGwgaW5mbzogICovCi0gICAgZm9yICh3YXkgPSAwOyB3YXkgPCB3YXlzOyB3YXkrKykgewotCXN0cnVjdCB3YXlfY29uZmlnX3QgKmNmZyA9IGNvbmZpZyArIHdheTsKLQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5pbmRpY2llczsgaSsrKSB7Ci0JICAgIHVuc2lnbmVkIHdheWluZGV4ID0gd2F5ICsgKGkgPDwgY2ZnLT5wZ3N6X2xvZzIpOwotCSAgICB1bnNpZ25lZCB2diA9ICh0eXBlID8gcmVhZF9kdGxiX3ZpcnR1YWwgKHdheWluZGV4KQotCQkgICAgCQk6IHJlYWRfaXRsYl92aXJ0dWFsICh3YXlpbmRleCkpOwotCSAgICB1bnNpZ25lZCBwcCA9ICh0eXBlID8gcmVhZF9kdGxiX3RyYW5zbGF0aW9uICh3YXlpbmRleCkKLQkJICAgIAkJOiByZWFkX2l0bGJfdHJhbnNsYXRpb24gKHdheWluZGV4KSk7Ci0KLQkgICAgLyogQ29tcHV0ZSBhbmQgaW5jb3Jwb3JhdGUgdGhlIGVmZmVjdCBvZiB0aGUgaW5kZXggYml0cyBvbiB0aGUKLQkgICAgICogdmEuICBJdCdzIG1vcmUgdXNlZnVsIGZvciBrZXJuZWwgZGVidWdnaW5nLCBzaW5jZSB3ZSBhbHdheXMKLQkgICAgICogd2FudCB0byBrbm93IHRoZSBlZmZlY3RpdmUgdmEgYW55d2F5LiAqLwotCi0JICAgIGUtPnZhID0gKHZ2ICYgfigoMSA8PCAoY2ZnLT5wZ3N6X2xvZzIgKyBjZmctPmluZGljaWVzX2xvZzIpKSAtIDEpKTsKLQkgICAgZS0+dmEgKz0gKGkgPDwgY2ZnLT5wZ3N6X2xvZzIpOwotCSAgICBlLT5wYSA9IChwcCAmIH4oKDEgPDwgY2ZnLT5wZ3N6X2xvZzIpIC0gMSkpOwotCSAgICBlLT5hc2lkID0gKHZ2ICYgKCgxIDw8IFhDSEFMX01NVV9BU0lEX0JJVFMpIC0gMSkpOwotCSAgICBlLT5jYSA9IChwcCAmICgoMSA8PCBYQ0hBTF9NTVVfQ0FfQklUUykgLSAxKSk7Ci0JICAgIGUtPndheSA9IHdheTsKLQkgICAgZS0+aW5kZXggPSBpOwotCSAgICBlLT5wZ3N6X2xvZzIgPSBjZmctPnBnc3pfbG9nMjsKLQkgICAgZS0+dHlwZSA9IHR5cGU7Ci0JICAgIGUrKzsKLQl9Ci0gICAgfQotI2lmIDEKLSAgICAvKiAgU29ydCBieSBBU0lEIGFuZCBWQUREUjogICovCi0gICAgc29ydF90bGJfZHVtcF9pbmZvICh0aW5mbywgZW50cmllcyk7Ci0jZW5kaWYKLQotICAgIC8qICBEaXNwbGF5IGFsbCBzb3J0ZWQgaW5mbzogICovCi0gICAgcHJpbnRrICgiXG4lY1RMQiBkdW1wOlxuIiwgKHR5cGUgPyAnRCcgOiAnSScpKTsKLSAgICBmb3IgKGUgPSB0aW5mbywgaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyssIGUrKykgewotI2lmIDAKLQlpZiAoZS0+YXNpZCA9PSAwICYmICFzaG93X2ludmFsaWQpCi0JICAgIGNvbnRpbnVlOwotI2VuZGlmCi0JcHJpbnRrICgiJWMgd2F5PSVkIGk9JWQgIEFTSUQ9JTAyWCBWPSUwOFggLT4gUD0lMDhYIENBPSVYICglZCAlY0IpXG4iLAotCQkoZS0+dHlwZSA/ICdEJyA6ICdJJyksIGUtPndheSwgZS0+aW5kZXgsCi0JCWUtPmFzaWQsIGUtPnZhLCBlLT5wYSwgZS0+Y2EsCi0JCSgxIDw8IChlLT5wZ3N6X2xvZzIgJSAxMCkpLAotCQkiIGtNRyJbZS0+cGdzel9sb2cyIC8gMTBdCi0JCSk7Ci0gICAgfQotfQotCi12b2lkIGR1bXBfdGxiczIgKGludCBzaG93aW52KQotewotICAgIGR1bXBfdGxiIChpdGxiX2R1bXBfaW5mbywgaXRsYiwgSVRMQl9UT1RBTF9FTlRSSUVTLCBYQ0hBTF9JVExCX1dBWVMsIDAsIHNob3dpbnYpOwotICAgIGR1bXBfdGxiIChkdGxiX2R1bXBfaW5mbywgZHRsYiwgRFRMQl9UT1RBTF9FTlRSSUVTLCBYQ0hBTF9EVExCX1dBWVMsIDEsIHNob3dpbnYpOwotfQotCi12b2lkIGR1bXBfYWxsX3RsYnMgKHZvaWQpCi17Ci0gICAgZHVtcF90bGJzMiAoMSk7Ci19Ci0KLXZvaWQgZHVtcF92YWxpZF90bGJzICh2b2lkKQotewotICAgIGR1bXBfdGxiczIgKDApOwotfQotCi0KLXZvaWQgZHVtcF90bGJzICh2b2lkKQotewotCWR1bXBfaXRsYigpOwotCWR1bXBfZHRsYigpOwotfQotCi12b2lkIGR1bXBfY2FjaGVfdGFnKGludCBkY2FjaGUsIGludCBpZHgpCi17Ci0JaW50IHcsIGksIHMsIGU7Ci0JdW5zaWduZWQgbG9uZyB0YWcsIGluZGV4OwotCXVuc2lnbmVkIGxvbmcgbnVtX2xpbmVzLCBudW1fd2F5cywgY2FjaGVfc2l6ZSwgbGluZV9zaXplOwotCi0JbnVtX3dheXMgPSBkY2FjaGUgPyBYQ0hBTF9EQ0FDSEVfV0FZUyA6IFhDSEFMX0lDQUNIRV9XQVlTOwotCWNhY2hlX3NpemUgPSBkY2FjaGUgPyBYQ0hBTF9EQ0FDSEVfU0laRSA6IFhDSEFMX0lDQUNIRV9TSVpFOwotCWxpbmVfc2l6ZSA9IGRjYWNoZSA/IFhDSEFMX0RDQUNIRV9MSU5FU0laRSA6IFhDSEFMX0lDQUNIRV9MSU5FU0laRTsKLQotCW51bV9saW5lcyA9IGNhY2hlX3NpemUgLyBudW1fd2F5czsKLQotCXMgPSAwOyBlID0gbnVtX2xpbmVzOwotCi0JaWYgKGlkeCA+PSAwKQotCQllID0gKHMgPSBpZHggKiBsaW5lX3NpemUpICsgMTsKLQotCWZvciAoaSA9IHM7IGkgPCBlOyBpKz0gbGluZV9zaXplKSB7Ci0JCXByaW50aygiXG5saW5lICUjMDh4OiIsIGkpOwotCQlmb3IgKHcgPSAwOyB3IDwgbnVtX3dheXM7IHcrKykgewotCQkJaW5kZXggPSB3ICogbnVtX2xpbmVzICsgaTsKLQkJCWlmIChkY2FjaGUpCi0JCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkY3QgJTAsICUxXG5cdCIKLQkJCQkJCTogIj1hIih0YWcpIDogImEiKGluZGV4KSk7Ci0JCQllbHNlCi0JCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxpY3QgJTAsICUxXG5cdCIKLQkJCQkJCTogIj1hIih0YWcpIDogImEiKGluZGV4KSk7Ci0KLQkJCXByaW50aygiICUjMDEwbHgiLCB0YWcpOwotCQl9Ci0JfQotCXByaW50ayAoIlxuIik7Ci19Ci0KLXZvaWQgZHVtcF9pY2FjaGUoaW50IGluZGV4KQotewotCXVuc2lnbmVkIGxvbmcgZGF0YSwgYWRkcjsKLQlpbnQgdywgaTsKLQotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtX3dheXMgPSBYQ0hBTF9JQ0FDSEVfV0FZUzsKLQljb25zdCB1bnNpZ25lZCBsb25nIGNhY2hlX3NpemUgPSBYQ0hBTF9JQ0FDSEVfU0laRTsKLQljb25zdCB1bnNpZ25lZCBsb25nIGxpbmVfc2l6ZSA9IFhDSEFMX0lDQUNIRV9MSU5FU0laRTsKLQljb25zdCB1bnNpZ25lZCBsb25nIG51bV9saW5lcyA9IGNhY2hlX3NpemUgLyBudW1fd2F5cyAvIGxpbmVfc2l6ZTsKLQotCWZvciAodyA9IDA7IHcgPCBudW1fd2F5czsgdysrKSB7Ci0JCXByaW50ayAoIlxuV2F5ICVkIiwgdyk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGxpbmVfc2l6ZTsgaSs9IDQpIHsKLQkJCWFkZHIgPSB3ICogbnVtX2xpbmVzICsgaW5kZXggKiBsaW5lX3NpemUgKyBpOwotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxpY3cgJTAsICUxXG5cdCIKLQkJCQkJOiAiPWEiKGRhdGEpIDogImEiKGFkZHIpKTsKLQkJCXByaW50aygiICUjMDEwbHgiLCBkYXRhKTsKLQkJfQotCX0KLQlwcmludGsgKCJcbiIpOwotfQotCi12b2lkIGR1bXBfY2FjaGVfdGFncyh2b2lkKQotewotCXByaW50aygiSW5zdHJ1Y3Rpb24gY2FjaGVcbiIpOwotCWR1bXBfY2FjaGVfdGFnKDAsIC0xKTsKLQlwcmludGsoIkRhdGEgY2FjaGVcbiIpOwotCWR1bXBfY2FjaGVfdGFnKDEsIC0xKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvY29uc29sZS5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL2NvbnNvbGUuYwppbmRleCA1Yzk0N2NhLi4yZjRmMjBmIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvY29uc29sZS5jCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9jb25zb2xlLmMKQEAgLTI1LDExICsyNSwxNSBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaW5jbHVkZSA8eHRlbnNhL3NpbWNhbGwuaD4KKyNpbmNsdWRlIDxhc20vcGxhdGZvcm0vc2ltY2FsbC5oPgogCiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KIAorI2lmZGVmIFNFUklBTF9JTkxJTkUKKyNkZWZpbmUgX0lOTElORV8gaW5saW5lCisjZW5kaWYKKwogI2RlZmluZSBTRVJJQUxfTUFYX05VTV9MSU5FUyAxCiAjZGVmaW5lIFNFUklBTF9USU1FUl9WQUxVRSAoMjAgKiBIWikKIApAQCAtMTkxLDcgKzE5NSw3IEBACiB9CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBzZXJpYWxfb3BzID0geworc3RhdGljIHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBzZXJpYWxfb3BzID0gewogCS5vcGVuID0gcnNfb3BlbiwKIAkuY2xvc2UgPSByc19jbG9zZSwKIAkud3JpdGUgPSByc193cml0ZSwKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jCmluZGV4IDE1ZDY0NDEuLjhlYmZjODcgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDx4dGVuc2Evc2ltY2FsbC5oPgorI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS9zaW1jYWxsLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUgImlzcy1uZXRkZXYiCiAjZGVmaW5lIEVUSF9NQVhfUEFDS0VUIDE1MDAKZGlmZiAtLWdpdCBhL2Jsb2NrL2FzLWlvc2NoZWQuYyBiL2Jsb2NrL2FzLWlvc2NoZWQuYwppbmRleCA1OTM0YzRiLi5lZjEyNjI3IDEwMDY0NAotLS0gYS9ibG9jay9hcy1pb3NjaGVkLmMKKysrIGIvYmxvY2svYXMtaW9zY2hlZC5jCkBAIC0xNDYyLDIwICsxNDYyLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYXNfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBlbHZfcmVnaXN0ZXIoJmlvc2NoZWRfYXMpOwotCWlmICghcmV0KSB7Ci0JCS8qCi0JCSAqIGRvbid0IGFsbG93IEFTIHRvIGdldCB1bnJlZ2lzdGVyZWQsIHNpbmNlIHdlIHdvdWxkIGhhdmUKLQkJICogdG8gYnJvd3NlIGFsbCB0YXNrcyBpbiB0aGUgc3lzdGVtIGFuZCByZWxlYXNlIHRoZWlyCi0JCSAqIGFzX2lvX2NvbnRleHQgZmlyc3QKLQkJICovCi0JCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGVsdl9yZWdpc3RlcigmaW9zY2hlZF9hcyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhc19leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCA3OGM2YjMxLi4wN2I3MDYyIDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTIxOSw5ICsyMTksMTIgQEAKIAlyZXR1cm4gIWNmcWQtPmJ1c3lfcXVldWVzOwogfQogCi1zdGF0aWMgaW5saW5lIHBpZF90IGNmcV9xdWV1ZV9waWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgcncpCitzdGF0aWMgaW5saW5lIHBpZF90IGNmcV9xdWV1ZV9waWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgcncsIGludCBpc19zeW5jKQogewotCWlmIChydyA9PSBSRUFEIHx8IHJ3ID09IFdSSVRFX1NZTkMpCisJLyoKKwkgKiBVc2UgdGhlIHBlci1wcm9jZXNzIHF1ZXVlLCBmb3IgcmVhZCByZXF1ZXN0cyBhbmQgc3luY3Jvbm91cyB3cml0ZXMKKwkgKi8KKwlpZiAoIShydyAmIFJFUV9SVykgfHwgaXNfc3luYykKIAkJcmV0dXJuIHRhc2stPnBpZDsKIAogCXJldHVybiBDRlFfS0VZX0FTWU5DOwpAQCAtNDczLDcgKzQ3Niw3IEBACiBjZnFfZmluZF9ycV9mbWVyZ2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXBpZF90IGtleSA9IGNmcV9xdWV1ZV9waWQodHNrLCBiaW9fZGF0YV9kaXIoYmlvKSk7CisJcGlkX3Qga2V5ID0gY2ZxX3F1ZXVlX3BpZCh0c2ssIGJpb19kYXRhX2RpcihiaW8pLCBiaW9fc3luYyhiaW8pKTsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxOwogCiAJY2ZxcSA9IGNmcV9maW5kX2NmcV9oYXNoKGNmcWQsIGtleSwgdHNrLT5pb3ByaW8pOwpAQCAtNTY1LDYgKzU2OCwzMyBAQAogCWNmcV9yZW1vdmVfcmVxdWVzdChuZXh0KTsKIH0KIAorc3RhdGljIGludCBjZnFfYWxsb3dfbWVyZ2UocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkgICBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7CisJY29uc3QgaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7CisJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKKwlwaWRfdCBrZXk7CisKKwkvKgorCSAqIERpc2FsbG93IG1lcmdlIG9mIGEgc3luYyBiaW8gaW50byBhbiBhc3luYyByZXF1ZXN0LgorCSAqLworCWlmICgoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCB8fCBiaW9fc3luYyhiaW8pKSAmJiAhcnFfaXNfc3luYyhycSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBMb29rdXAgdGhlIGNmcXEgdGhhdCB0aGlzIGJpbyB3aWxsIGJlIHF1ZXVlZCB3aXRoLiBBbGxvdworCSAqIG1lcmdlIG9ubHkgaWYgcnEgaXMgcXVldWVkIHRoZXJlLgorCSAqLworCWtleSA9IGNmcV9xdWV1ZV9waWQoY3VycmVudCwgcncsIGJpb19zeW5jKGJpbykpOworCWNmcXEgPSBjZnFfZmluZF9jZnFfaGFzaChjZnFkLCBrZXksIGN1cnJlbnQtPmlvcHJpbyk7CisKKwlpZiAoY2ZxcSA9PSBSUV9DRlFRKHJxKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkCiBfX2NmcV9zZXRfYWN0aXZlX3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKQEAgLTE3NDgsNiArMTc3OCw5IEBACiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7CisJdW5zaWduZWQgaW50IGtleTsKKworCWtleSA9IGNmcV9xdWV1ZV9waWQodHNrLCBydywgcncgJiBSRVFfUldfU1lOQyk7CiAKIAkvKgogCSAqIGRvbid0IGZvcmNlIHNldHVwIG9mIGEgcXVldWUgZnJvbSBoZXJlLCBhcyBhIGNhbGwgdG8gbWF5X3F1ZXVlCkBAIC0xNzU1LDcgKzE3ODgsNyBAQAogCSAqIHNvIGp1c3QgbG9va3VwIGEgcG9zc2libHkgZXhpc3RpbmcgcXVldWUsIG9yIHJldHVybiAnbWF5IHF1ZXVlJwogCSAqIGlmIHRoYXQgZmFpbHMKIAkgKi8KLQljZnFxID0gY2ZxX2ZpbmRfY2ZxX2hhc2goY2ZxZCwgY2ZxX3F1ZXVlX3BpZCh0c2ssIHJ3KSwgdHNrLT5pb3ByaW8pOworCWNmcXEgPSBjZnFfZmluZF9jZnFfaGFzaChjZnFkLCBrZXksIHRzay0+aW9wcmlvKTsKIAlpZiAoY2ZxcSkgewogCQljZnFfaW5pdF9wcmlvX2RhdGEoY2ZxcSk7CiAJCWNmcV9wcmlvX2Jvb3N0KGNmcXEpOwpAQCAtMTc5OCwxMCArMTgzMSwxMCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKIAljb25zdCBpbnQgcncgPSBycV9kYXRhX2RpcihycSk7Ci0JcGlkX3Qga2V5ID0gY2ZxX3F1ZXVlX3BpZCh0c2ssIHJ3KTsKKwljb25zdCBpbnQgaXNfc3luYyA9IHJxX2lzX3N5bmMocnEpOworCXBpZF90IGtleSA9IGNmcV9xdWV1ZV9waWQodHNrLCBydywgaXNfc3luYyk7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpc19zeW5jID0ga2V5ICE9IENGUV9LRVlfQVNZTkM7CiAKIAltaWdodF9zbGVlcF9pZihnZnBfbWFzayAmIF9fR0ZQX1dBSVQpOwogCkBAIC0yMTE5LDYgKzIxNTIsNyBAQAogCQkuZWxldmF0b3JfbWVyZ2VfZm4gPSAJCWNmcV9tZXJnZSwKIAkJLmVsZXZhdG9yX21lcmdlZF9mbiA9CQljZnFfbWVyZ2VkX3JlcXVlc3QsCiAJCS5lbGV2YXRvcl9tZXJnZV9yZXFfZm4gPQljZnFfbWVyZ2VkX3JlcXVlc3RzLAorCQkuZWxldmF0b3JfYWxsb3dfbWVyZ2VfZm4gPQljZnFfYWxsb3dfbWVyZ2UsCiAJCS5lbGV2YXRvcl9kaXNwYXRjaF9mbiA9CQljZnFfZGlzcGF0Y2hfcmVxdWVzdHMsCiAJCS5lbGV2YXRvcl9hZGRfcmVxX2ZuID0JCWNmcV9pbnNlcnRfcmVxdWVzdCwKIAkJLmVsZXZhdG9yX2FjdGl2YXRlX3JlcV9mbiA9CWNmcV9hY3RpdmF0ZV9yZXF1ZXN0LApkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggYzAwNjNmMy4uZjZkYWZhOCAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC01MSw2ICs1MSwyMSBAQAogI2RlZmluZSBFTFZfT05fSEFTSChycSkJCSghaGxpc3RfdW5oYXNoZWQoJihycSktPmhhc2gpKQogCiAvKgorICogUXVlcnkgaW8gc2NoZWR1bGVyIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzc3VpbmcgYmlvIG1heSBiZQorICogbWVyZ2VkIHdpdGggcnEuCisgKi8KK3N0YXRpYyBpbnQgZWx2X2lvc2NoZWRfYWxsb3dfbWVyZ2Uoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJcmVxdWVzdF9xdWV1ZV90ICpxID0gcnEtPnE7CisJZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOworCisJaWYgKGUtPm9wcy0+ZWxldmF0b3JfYWxsb3dfbWVyZ2VfZm4pCisJCXJldHVybiBlLT5vcHMtPmVsZXZhdG9yX2FsbG93X21lcmdlX2ZuKHEsIHJxLCBiaW8pOworCisJcmV0dXJuIDE7Cit9CisKKy8qCiAgKiBjYW4gd2Ugc2FmZWx5IG1lcmdlIHdpdGggdGhpcyByZXF1ZXN0PwogICovCiBpbmxpbmUgaW50IGVsdl9ycV9tZXJnZV9vayhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbykKQEAgLTY1LDEyICs4MCwxNSBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogc2FtZSBkZXZpY2UgYW5kIG5vIHNwZWNpYWwgc3R1ZmYgc2V0LCBtZXJnZSBpcyBvaworCSAqIG11c3QgYmUgc2FtZSBkZXZpY2UgYW5kIG5vdCBhIHNwZWNpYWwgcmVxdWVzdAogCSAqLwotCWlmIChycS0+cnFfZGlzayA9PSBiaW8tPmJpX2JkZXYtPmJkX2Rpc2sgJiYgIXJxLT5zcGVjaWFsKQotCQlyZXR1cm4gMTsKKwlpZiAocnEtPnJxX2Rpc2sgIT0gYmlvLT5iaV9iZGV2LT5iZF9kaXNrIHx8IHJxLT5zcGVjaWFsKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworCWlmICghZWx2X2lvc2NoZWRfYWxsb3dfbWVyZ2UocnEsIGJpbykpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7CiB9CiBFWFBPUlRfU1lNQk9MKGVsdl9ycV9tZXJnZV9vayk7CiAKQEAgLTU3Miw2ICs1OTAsMTIgQEAKIAkJICovCiAJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1NPRlRCQVJSSUVSOwogCisJCS8qCisJCSAqIE1vc3QgcmVxdWV1ZXMgaGFwcGVuIGJlY2F1c2Ugb2YgYSBidXN5IGNvbmRpdGlvbiwKKwkJICogZG9uJ3QgZm9yY2UgdW5wbHVnIG9mIHRoZSBxdWV1ZSBmb3IgdGhhdCBjYXNlLgorCQkgKi8KKwkJdW5wbHVnX2l0ID0gMDsKKwogCQlpZiAocS0+b3Jkc2VxID09IDApIHsKIAkJCWxpc3RfYWRkKCZycS0+cXVldWVsaXN0LCAmcS0+cXVldWVfaGVhZCk7CiAJCQlicmVhazsKQEAgLTU4NiwxMSArNjEwLDYgQEAKIAkJfQogCiAJCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsIHBvcyk7Ci0JCS8qCi0JCSAqIG1vc3QgcmVxdWV1ZXMgaGFwcGVuIGJlY2F1c2Ugb2YgYSBidXN5IGNvbmRpdGlvbiwgZG9uJ3QKLQkJICogZm9yY2UgdW5wbHVnIG9mIHRoZSBxdWV1ZSBmb3IgdGhhdCBjYXNlLgotCQkgKi8KLQkJdW5wbHVnX2l0ID0gMDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggNjUzOTE5ZC4uNDU3ZmRhYyAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYworKysgYi9ibG9jay9nZW5oZC5jCkBAIC00MTcsNiArNDE3LDM0IEBACiAJLnNob3cJPSBkaXNrX3N0YXRzX3JlYWQKIH07CiAKKyNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1QKKworc3RhdGljIHNzaXplX3QgZGlza19mYWlsX3N0b3JlKHN0cnVjdCBnZW5kaXNrICogZGlzaywKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgaTsKKworCWlmIChjb3VudCA+IDAgJiYgc3NjYW5mKGJ1ZiwgIiVkIiwgJmkpID4gMCkgeworCQlpZiAoaSA9PSAwKQorCQkJZGlzay0+ZmxhZ3MgJj0gfkdFTkhEX0ZMX0ZBSUw7CisJCWVsc2UKKwkJCWRpc2stPmZsYWdzIHw9IEdFTkhEX0ZMX0ZBSUw7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIHNzaXplX3QgZGlza19mYWlsX3JlYWQoc3RydWN0IGdlbmRpc2sgKiBkaXNrLCBjaGFyICpwYWdlKQoreworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9GQUlMID8gMSA6IDApOworfQorc3RhdGljIHN0cnVjdCBkaXNrX2F0dHJpYnV0ZSBkaXNrX2F0dHJfZmFpbCA9IHsKKwkuYXR0ciA9IHsubmFtZSA9ICJtYWtlLWl0LWZhaWwiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCisJLnN0b3JlCT0gZGlza19mYWlsX3N0b3JlLAorCS5zaG93CT0gZGlza19mYWlsX3JlYWQKK307CisKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGRlZmF1bHRfYXR0cnNbXSA9IHsKIAkmZGlza19hdHRyX3VldmVudC5hdHRyLAogCSZkaXNrX2F0dHJfZGV2LmF0dHIsCkBAIC00MjQsNiArNDUyLDkgQEAKIAkmZGlza19hdHRyX3JlbW92YWJsZS5hdHRyLAogCSZkaXNrX2F0dHJfc2l6ZS5hdHRyLAogCSZkaXNrX2F0dHJfc3RhdC5hdHRyLAorI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAorCSZkaXNrX2F0dHJfZmFpbC5hdHRyLAorI2VuZGlmCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2lvY3RsLmMgYi9ibG9jay9pb2N0bC5jCmluZGV4IDU4YWFiNjMuLmY2OTYyYjYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2lvY3RsLmMKKysrIGIvYmxvY2svaW9jdGwuYwpAQCAtNzIsNyArNzIsNyBAQAogCQkJYmRldnAgPSBiZGdldF9kaXNrKGRpc2ssIHBhcnQpOwogCQkJaWYgKCFiZGV2cCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2cC0+YmRfbXV0ZXgsIEJEX01VVEVYX1BBUlRJVElPTik7CisJCQltdXRleF9sb2NrKCZiZGV2cC0+YmRfbXV0ZXgpOwogCQkJaWYgKGJkZXZwLT5iZF9vcGVuZXJzKSB7CiAJCQkJbXV0ZXhfdW5sb2NrKCZiZGV2cC0+YmRfbXV0ZXgpOwogCQkJCWJkcHV0KGJkZXZwKTsKQEAgLTgyLDcgKzgyLDcgQEAKIAkJCWZzeW5jX2JkZXYoYmRldnApOwogCQkJaW52YWxpZGF0ZV9iZGV2KGJkZXZwLCAwKTsKIAotCQkJbXV0ZXhfbG9ja19uZXN0ZWQoJmJkZXYtPmJkX211dGV4LCBCRF9NVVRFWF9XSE9MRSk7CisJCQltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CiAJCQlkZWxldGVfcGFydGl0aW9uKGRpc2ssIHBhcnQpOwogCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7CiAJCQltdXRleF91bmxvY2soJmJkZXZwLT5iZF9tdXRleCk7CkBAIC0yOTAsNyArMjkwLDcgQEAKICAgIEVOT0lPQ1RMQ01EIGZvciB1bmtub3duIGlvY3Rscy4gKi8KIGxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfYmRldjsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9iZGV2OwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOwogCWlmIChkaXNrLT5mb3BzLT5jb21wYXRfaW9jdGwpIHsKZGlmZiAtLWdpdCBhL2Jsb2NrL2xsX3J3X2Jsay5jIGIvYmxvY2svbGxfcndfYmxrLmMKaW5kZXggMzE1MTJjZC4uZmI2Nzg5NyAxMDA2NDQKLS0tIGEvYmxvY2svbGxfcndfYmxrLmMKKysrIGIvYmxvY2svbGxfcndfYmxrLmMKQEAgLTI1LDkgKzI1LDExIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC90YXNrX2lvX2FjY291bnRpbmdfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CisjaW5jbHVkZSA8bGludXgvZmF1bHQtaW5qZWN0Lmg+CiAKIC8qCiAgKiBmb3IgbWF4IHNlbnNlIHNpemUKQEAgLTEyNywxMyArMTI5LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woYmxrX2dldF9iYWNraW5nX2Rldl9pbmZvKTsKIAotdm9pZCBibGtfcXVldWVfYWN0aXZpdHlfZm4ocmVxdWVzdF9xdWV1ZV90ICpxLCBhY3Rpdml0eV9mbiAqZm4sIHZvaWQgKmRhdGEpCi17Ci0JcS0+YWN0aXZpdHlfZm4gPSBmbjsKLQlxLT5hY3Rpdml0eV9kYXRhID0gZGF0YTsKLX0KLUVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX2FjdGl2aXR5X2ZuKTsKLQogLyoqCiAgKiBibGtfcXVldWVfcHJlcF9ycSAtIHNldCBhIHByZXBhcmVfcmVxdWVzdCBmdW5jdGlvbiBmb3IgcXVldWUKICAqIEBxOgkJcXVldWUKQEAgLTIzNiw4ICsyMzEsNiBAQAogCSAqIGJ5IGRlZmF1bHQgYXNzdW1lIG9sZCBiZWhhdmlvdXIgYW5kIGJvdW5jZSBmb3IgYW55IGhpZ2htZW0gcGFnZQogCSAqLwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQocSwgQkxLX0JPVU5DRV9ISUdIKTsKLQotCWJsa19xdWV1ZV9hY3Rpdml0eV9mbihxLCBOVUxMLCBOVUxMKTsKIH0KIAogRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWFrZV9yZXF1ZXN0KTsKQEAgLTE0MTIsOCArMTQwNSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgbGxfYmFja19tZXJnZV9mbihyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsIAotCQkJICAgIHN0cnVjdCBiaW8gKmJpbykKK2ludCBsbF9iYWNrX21lcmdlX2ZuKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGJpbyAqYmlvKQogewogCXVuc2lnbmVkIHNob3J0IG1heF9zZWN0b3JzOwogCWludCBsZW47CkBAIC0xNDQ5LDYgKzE0NDEsNyBAQAogCiAJcmV0dXJuIGxsX25ld19od19zZWdtZW50KHEsIHJlcSwgYmlvKTsKIH0KK0VYUE9SVF9TWU1CT0wobGxfYmFja19tZXJnZV9mbik7CiAKIHN0YXRpYyBpbnQgbGxfZnJvbnRfbWVyZ2VfZm4ocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLCAKIAkJCSAgICAgc3RydWN0IGJpbyAqYmlvKQpAQCAtMTkxOSw5ICsxOTEyLDYgQEAKIAl9CiAKIAlxLT5yZXF1ZXN0X2ZuCQk9IHJmbjsKLQlxLT5iYWNrX21lcmdlX2ZuICAgICAgIAk9IGxsX2JhY2tfbWVyZ2VfZm47Ci0JcS0+ZnJvbnRfbWVyZ2VfZm4gICAgICAJPSBsbF9mcm9udF9tZXJnZV9mbjsKLQlxLT5tZXJnZV9yZXF1ZXN0c19mbgk9IGxsX21lcmdlX3JlcXVlc3RzX2ZuOwogCXEtPnByZXBfcnFfZm4JCT0gTlVMTDsKIAlxLT51bnBsdWdfZm4JCT0gZ2VuZXJpY191bnBsdWdfZGV2aWNlOwogCXEtPnF1ZXVlX2ZsYWdzCQk9ICgxIDw8IFFVRVVFX0ZMQUdfQ0xVU1RFUik7CkBAIC0yMDY1LDE1ICsyMDU1LDE2IEBACiAgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZSwgd2l0aCBxdWV1ZV9sb2NrIGhlbGQuCiAgKiBSZXR1cm5zICFOVUxMIG9uIHN1Y2Nlc3MsIHdpdGggcXVldWVfbG9jayAqbm90IGhlbGQqLgogICovCi1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmdldF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgaW50IHJ3LCBzdHJ1Y3QgYmlvICpiaW8sCi0JCQkJICAgZ2ZwX3QgZ2ZwX21hc2spCitzdGF0aWMgc3RydWN0IHJlcXVlc3QgKmdldF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgaW50IHJ3X2ZsYWdzLAorCQkJCSAgIHN0cnVjdCBiaW8gKmJpbywgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gTlVMTDsKIAlzdHJ1Y3QgcmVxdWVzdF9saXN0ICpybCA9ICZxLT5ycTsKIAlzdHJ1Y3QgaW9fY29udGV4dCAqaW9jID0gTlVMTDsKKwljb25zdCBpbnQgcncgPSByd19mbGFncyAmIDB4MDE7CiAJaW50IG1heV9xdWV1ZSwgcHJpdjsKIAotCW1heV9xdWV1ZSA9IGVsdl9tYXlfcXVldWUocSwgcncpOworCW1heV9xdWV1ZSA9IGVsdl9tYXlfcXVldWUocSwgcndfZmxhZ3MpOwogCWlmIChtYXlfcXVldWUgPT0gRUxWX01RVUVVRV9OTykKIAkJZ290byBycV9zdGFydmVkOwogCkBAIC0yMTIxLDcgKzIxMTIsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCi0JcnEgPSBibGtfYWxsb2NfcmVxdWVzdChxLCBydywgcHJpdiwgZ2ZwX21hc2spOworCXJxID0gYmxrX2FsbG9jX3JlcXVlc3QocSwgcndfZmxhZ3MsIHByaXYsIGdmcF9tYXNrKTsKIAlpZiAodW5saWtlbHkoIXJxKSkgewogCQkvKgogCQkgKiBBbGxvY2F0aW9uIGZhaWxlZCBwcmVzdW1hYmx5IGR1ZSB0byBtZW1vcnkuIFVuZG8gYW55dGhpbmcKQEAgLTIxNjksMTIgKzIxNjAsMTMgQEAKICAqCiAgKiBDYWxsZWQgd2l0aCBxLT5xdWV1ZV9sb2NrIGhlbGQsIGFuZCByZXR1cm5zIHdpdGggaXQgdW5sb2NrZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqZ2V0X3JlcXVlc3Rfd2FpdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIGludCBydywKK3N0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqZ2V0X3JlcXVlc3Rfd2FpdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIGludCByd19mbGFncywKIAkJCQkJc3RydWN0IGJpbyAqYmlvKQogeworCWNvbnN0IGludCBydyA9IHJ3X2ZsYWdzICYgMHgwMTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAKLQlycSA9IGdldF9yZXF1ZXN0KHEsIHJ3LCBiaW8sIEdGUF9OT0lPKTsKKwlycSA9IGdldF9yZXF1ZXN0KHEsIHJ3X2ZsYWdzLCBiaW8sIEdGUF9OT0lPKTsKIAl3aGlsZSAoIXJxKSB7CiAJCURFRklORV9XQUlUKHdhaXQpOwogCQlzdHJ1Y3QgcmVxdWVzdF9saXN0ICpybCA9ICZxLT5ycTsKQEAgLTIxODIsNyArMjE3NCw3IEBACiAJCXByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmUoJnJsLT53YWl0W3J3XSwgJndhaXQsCiAJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwogCi0JCXJxID0gZ2V0X3JlcXVlc3QocSwgcncsIGJpbywgR0ZQX05PSU8pOworCQlycSA9IGdldF9yZXF1ZXN0KHEsIHJ3X2ZsYWdzLCBiaW8sIEdGUF9OT0lPKTsKIAogCQlpZiAoIXJxKSB7CiAJCQlzdHJ1Y3QgaW9fY29udGV4dCAqaW9jOwpAQCAtMjM1NSw0MCArMjM0NywyOSBAQAogCWVsc2UKIAkJYmlvID0gYmlvX2NvcHlfdXNlcihxLCB1YWRkciwgbGVuLCByZWFkaW5nKTsKIAotCWlmIChJU19FUlIoYmlvKSkgeworCWlmIChJU19FUlIoYmlvKSkKIAkJcmV0dXJuIFBUUl9FUlIoYmlvKTsKLQl9CiAKIAlvcmlnX2JpbyA9IGJpbzsKIAlibGtfcXVldWVfYm91bmNlKHEsICZiaW8pOworCiAJLyoKIAkgKiBXZSBsaW5rIHRoZSBib3VuY2UgYnVmZmVyIGluIGFuZCBjb3VsZCBoYXZlIHRvIHRyYXZlcnNlIGl0CiAJICogbGF0ZXIgc28gd2UgaGF2ZSB0byBnZXQgYSByZWYgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGZyZWVkCiAJICovCiAJYmlvX2dldChiaW8pOwogCi0JLyoKLQkgKiBmb3IgbW9zdCAoYWxsPyBkb24ndCBrbm93IG9mIGFueSkgcXVldWVzIHdlIGNvdWxkCi0JICogc2tpcCBncmFiYmluZyB0aGUgcXVldWUgbG9jayBoZXJlLiBvbmx5IGRyaXZlcnMgd2l0aAotCSAqIGZ1bmt5IHByaXZhdGUgLT5iYWNrX21lcmdlX2ZuKCkgZnVuY3Rpb24gY291bGQgYmUKLQkgKiBwcm9ibGVtYXRpYy4KLQkgKi8KLQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCWlmICghcnEtPmJpbykKIAkJYmxrX3JxX2Jpb19wcmVwKHEsIHJxLCBiaW8pOwotCWVsc2UgaWYgKCFxLT5iYWNrX21lcmdlX2ZuKHEsIHJxLCBiaW8pKSB7CisJZWxzZSBpZiAoIWxsX2JhY2tfbWVyZ2VfZm4ocSwgcnEsIGJpbykpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCQlnb3RvIHVubWFwX2JpbzsKIAl9IGVsc2UgewogCQlycS0+YmlvdGFpbC0+YmlfbmV4dCA9IGJpbzsKIAkJcnEtPmJpb3RhaWwgPSBiaW87CiAKLQkJcnEtPm5yX3NlY3RvcnMgKz0gYmlvX3NlY3RvcnMoYmlvKTsKLQkJcnEtPmhhcmRfbnJfc2VjdG9ycyA9IHJxLT5ucl9zZWN0b3JzOwogCQlycS0+ZGF0YV9sZW4gKz0gYmlvLT5iaV9zaXplOwogCX0KLQlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAKIAlyZXR1cm4gYmlvLT5iaV9zaXplOwogCkBAIC0yNDI0LDYgKzI0MDUsNyBAQAogCQkgICAgdW5zaWduZWQgbG9uZyBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBieXRlc19yZWFkID0gMDsKKwlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOwogCWludCByZXQ7CiAKIAlpZiAobGVuID4gKHEtPm1heF9od19zZWN0b3JzIDw8IDkpKQpAQCAtMjQ1MCw2ICsyNDMyLDggQEAKIAkJcmV0ID0gX19ibGtfcnFfbWFwX3VzZXIocSwgcnEsIHVidWYsIG1hcF9sZW4pOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gdW5tYXBfcnE7CisJCWlmICghYmlvKQorCQkJYmlvID0gcnEtPmJpbzsKIAkJYnl0ZXNfcmVhZCArPSByZXQ7CiAJCXVidWYgKz0gcmV0OwogCX0KQEAgLTI0NTcsNyArMjQ0MSw3IEBACiAJcnEtPmJ1ZmZlciA9IHJxLT5kYXRhID0gTlVMTDsKIAlyZXR1cm4gMDsKIHVubWFwX3JxOgotCWJsa19ycV91bm1hcF91c2VyKHJxKTsKKwlibGtfcnFfdW5tYXBfdXNlcihiaW8pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0NjksNiArMjQ1Myw3IEBACiAgKiBAcnE6CQlyZXF1ZXN0IHRvIG1hcCBkYXRhIHRvCiAgKiBAaW92Oglwb2ludGVyIHRvIHRoZSBpb3ZlYwogICogQGlvdl9jb3VudDoJbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBpb3ZlYworICogQGxlbjoJSS9PIGJ5dGUgY291bnQKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgIERhdGEgd2lsbCBiZSBtYXBwZWQgZGlyZWN0bHkgZm9yIHplcm8gY29weSBpbywgaWYgcG9zc2libGUuIE90aGVyd2lzZQpAQCAtMjUxNCwyNyArMjQ5OSwzMyBAQAogCiAvKioKICAqIGJsa19ycV91bm1hcF91c2VyIC0gdW5tYXAgYSByZXF1ZXN0IHdpdGggdXNlciBkYXRhCi0gKiBAcnE6CQlycSB0byBiZSB1bm1hcHBlZAorICogQGJpbzoJICAgICAgIHN0YXJ0IG9mIGJpbyBsaXN0CiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgICBVbm1hcCBhIHJxIHByZXZpb3VzbHkgbWFwcGVkIGJ5IGJsa19ycV9tYXBfdXNlcigpLgotICogICAgcnEtPmJpbyBtdXN0IGJlIHNldCB0byB0aGUgb3JpZ2luYWwgaGVhZCBvZiB0aGUgcmVxdWVzdC4KKyAqICAgIFVubWFwIGEgcnEgcHJldmlvdXNseSBtYXBwZWQgYnkgYmxrX3JxX21hcF91c2VyKCkuIFRoZSBjYWxsZXIgbXVzdAorICogICAgc3VwcGx5IHRoZSBvcmlnaW5hbCBycS0+YmlvIGZyb20gdGhlIGJsa19ycV9tYXBfdXNlcigpIHJldHVybiwgc2luY2UKKyAqICAgIHRoZSBpbyBjb21wbGV0aW9uIG1heSBoYXZlIGNoYW5nZWQgcnEtPmJpby4KICAqLwotaW50IGJsa19ycV91bm1hcF91c2VyKHN0cnVjdCByZXF1ZXN0ICpycSkKK2ludCBibGtfcnFfdW5tYXBfdXNlcihzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0Jc3RydWN0IGJpbyAqYmlvLCAqbWFwcGVkX2JpbzsKKwlzdHJ1Y3QgYmlvICptYXBwZWRfYmlvOworCWludCByZXQgPSAwLCByZXQyOwogCi0Jd2hpbGUgKChiaW8gPSBycS0+YmlvKSkgewotCQlpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQk9VTkNFRCkpCisJd2hpbGUgKGJpbykgeworCQltYXBwZWRfYmlvID0gYmlvOworCQlpZiAodW5saWtlbHkoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQk9VTkNFRCkpKQogCQkJbWFwcGVkX2JpbyA9IGJpby0+YmlfcHJpdmF0ZTsKLQkJZWxzZQotCQkJbWFwcGVkX2JpbyA9IGJpbzsKIAotCQlfX2Jsa19ycV91bm1hcF91c2VyKG1hcHBlZF9iaW8pOwotCQlycS0+YmlvID0gYmlvLT5iaV9uZXh0OwotCQliaW9fcHV0KGJpbyk7CisJCXJldDIgPSBfX2Jsa19ycV91bm1hcF91c2VyKG1hcHBlZF9iaW8pOworCQlpZiAocmV0MiAmJiAhcmV0KQorCQkJcmV0ID0gcmV0MjsKKworCQltYXBwZWRfYmlvID0gYmlvOworCQliaW8gPSBiaW8tPmJpX25leHQ7CisJCWJpb19wdXQobWFwcGVkX2Jpbyk7CiAJfQotCXJldHVybiAwOworCisJcmV0dXJuIHJldDsKIH0KIAogRVhQT1JUX1NZTUJPTChibGtfcnFfdW5tYXBfdXNlcik7CkBAIC0yNjk0LDkgKzI2ODUsNiBAQAogewogCWRyaXZlX3N0YXRfYWNjdChyZXEsIHJlcS0+bnJfc2VjdG9ycywgMSk7CiAKLQlpZiAocS0+YWN0aXZpdHlfZm4pCi0JCXEtPmFjdGl2aXR5X2ZuKHEtPmFjdGl2aXR5X2RhdGEsIHJxX2RhdGFfZGlyKHJlcSkpOwotCiAJLyoKIAkgKiBlbGV2YXRvciBpbmRpY2F0ZWQgd2hlcmUgaXQgd2FudHMgdGhpcyByZXF1ZXN0IHRvIGJlCiAJICogaW5zZXJ0ZWQgYXQgZWxldmF0b3JfbWVyZ2UgdGltZQpAQCAtMjgzMCw3ICsyODE4LDcgQEAKIAkgKiB3aWxsIGhhdmUgdXBkYXRlZCBzZWdtZW50IGNvdW50cywgdXBkYXRlIHNlY3RvcgogCSAqIGNvdW50cyBoZXJlLgogCSAqLwotCWlmICghcS0+bWVyZ2VfcmVxdWVzdHNfZm4ocSwgcmVxLCBuZXh0KSkKKwlpZiAoIWxsX21lcmdlX3JlcXVlc3RzX2ZuKHEsIHJlcSwgbmV4dCkpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTI5MjAsNiArMjkwOCw3IEBACiAJaW50IGVsX3JldCwgbnJfc2VjdG9ycywgYmFycmllciwgZXJyOwogCWNvbnN0IHVuc2lnbmVkIHNob3J0IHByaW8gPSBiaW9fcHJpbyhiaW8pOwogCWNvbnN0IGludCBzeW5jID0gYmlvX3N5bmMoYmlvKTsKKwlpbnQgcndfZmxhZ3M7CiAKIAlucl9zZWN0b3JzID0gYmlvX3NlY3RvcnMoYmlvKTsKIApAQCAtMjk0Niw3ICsyOTM1LDcgQEAKIAkJY2FzZSBFTEVWQVRPUl9CQUNLX01FUkdFOgogCQkJQlVHX09OKCFycV9tZXJnZWFibGUocmVxKSk7CiAKLQkJCWlmICghcS0+YmFja19tZXJnZV9mbihxLCByZXEsIGJpbykpCisJCQlpZiAoIWxsX2JhY2tfbWVyZ2VfZm4ocSwgcmVxLCBiaW8pKQogCQkJCWJyZWFrOwogCiAJCQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9CQUNLTUVSR0UpOwpAQCAtMjk2Myw3ICsyOTUyLDcgQEAKIAkJY2FzZSBFTEVWQVRPUl9GUk9OVF9NRVJHRToKIAkJCUJVR19PTighcnFfbWVyZ2VhYmxlKHJlcSkpOwogCi0JCQlpZiAoIXEtPmZyb250X21lcmdlX2ZuKHEsIHJlcSwgYmlvKSkKKwkJCWlmICghbGxfZnJvbnRfbWVyZ2VfZm4ocSwgcmVxLCBiaW8pKQogCQkJCWJyZWFrOwogCiAJCQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9GUk9OVE1FUkdFKTsKQEAgLTI5OTQsMTAgKzI5ODMsMTkgQEAKIAogZ2V0X3JxOgogCS8qCisJICogVGhpcyBzeW5jIGNoZWNrIGFuZCBtYXNrIHdpbGwgYmUgcmUtZG9uZSBpbiBpbml0X3JlcXVlc3RfZnJvbV9iaW8oKSwKKwkgKiBidXQgd2UgbmVlZCB0byBzZXQgaXQgZWFybGllciB0byBleHBvc2UgdGhlIHN5bmMgZmxhZyB0byB0aGUKKwkgKiBycSBhbGxvY2F0b3IgYW5kIGlvIHNjaGVkdWxlcnMuCisJICovCisJcndfZmxhZ3MgPSBiaW9fZGF0YV9kaXIoYmlvKTsKKwlpZiAoc3luYykKKwkJcndfZmxhZ3MgfD0gUkVRX1JXX1NZTkM7CisKKwkvKgogCSAqIEdyYWIgYSBmcmVlIHJlcXVlc3QuIFRoaXMgaXMgbWlnaHQgc2xlZXAgYnV0IGNhbiBub3QgZmFpbC4KIAkgKiBSZXR1cm5zIHdpdGggdGhlIHF1ZXVlIHVubG9ja2VkLgogCSAqLwotCXJlcSA9IGdldF9yZXF1ZXN0X3dhaXQocSwgYmlvX2RhdGFfZGlyKGJpbyksIGJpbyk7CisJcmVxID0gZ2V0X3JlcXVlc3Rfd2FpdChxLCByd19mbGFncywgYmlvKTsKIAogCS8qCiAJICogQWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2sgYW5kIHBvc3NpYmx5IHNsZWVwaW5nIGhlcmUsIG91ciByZXF1ZXN0CkBAIC0zMDU2LDYgKzMwNTQsNDIgQEAKIAlzZXRfYml0KEJJT19FT0YsICZiaW8tPmJpX2ZsYWdzKTsKIH0KIAorI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAorCitzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKGZhaWxfbWFrZV9yZXF1ZXN0KTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfZmFpbF9tYWtlX3JlcXVlc3QoY2hhciAqc3RyKQoreworCXJldHVybiBzZXR1cF9mYXVsdF9hdHRyKCZmYWlsX21ha2VfcmVxdWVzdCwgc3RyKTsKK30KK19fc2V0dXAoImZhaWxfbWFrZV9yZXF1ZXN0PSIsIHNldHVwX2ZhaWxfbWFrZV9yZXF1ZXN0KTsKKworc3RhdGljIGludCBzaG91bGRfZmFpbF9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbykKK3sKKwlpZiAoKGJpby0+YmlfYmRldi0+YmRfZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9GQUlMKSB8fAorCSAgICAoYmlvLT5iaV9iZGV2LT5iZF9wYXJ0ICYmIGJpby0+YmlfYmRldi0+YmRfcGFydC0+bWFrZV9pdF9mYWlsKSkKKwkJcmV0dXJuIHNob3VsZF9mYWlsKCZmYWlsX21ha2VfcmVxdWVzdCwgYmlvLT5iaV9zaXplKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBmYWlsX21ha2VfcmVxdWVzdF9kZWJ1Z2ZzKHZvaWQpCit7CisJcmV0dXJuIGluaXRfZmF1bHRfYXR0cl9kZW50cmllcygmZmFpbF9tYWtlX3JlcXVlc3QsCisJCQkJCSJmYWlsX21ha2VfcmVxdWVzdCIpOworfQorCitsYXRlX2luaXRjYWxsKGZhaWxfbWFrZV9yZXF1ZXN0X2RlYnVnZnMpOworCisjZWxzZSAvKiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1QgKi8KKworc3RhdGljIGlubGluZSBpbnQgc2hvdWxkX2ZhaWxfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaW8pCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1QgKi8KKwogLyoqCiAgKiBnZW5lcmljX21ha2VfcmVxdWVzdDogaGFuZCBhIGJ1ZmZlciB0byBpdHMgZGV2aWNlIGRyaXZlciBmb3IgSS9PCiAgKiBAYmlvOiAgVGhlIGJpbyBkZXNjcmliaW5nIHRoZSBsb2NhdGlvbiBpbiBtZW1vcnkgYW5kIG9uIHRoZSBkZXZpY2UuCkBAIC0zMTQxLDYgKzMxNzUsOSBAQAogCQlpZiAodW5saWtlbHkodGVzdF9iaXQoUVVFVUVfRkxBR19ERUFELCAmcS0+cXVldWVfZmxhZ3MpKSkKIAkJCWdvdG8gZW5kX2lvOwogCisJCWlmIChzaG91bGRfZmFpbF9yZXF1ZXN0KGJpbykpCisJCQlnb3RvIGVuZF9pbzsKKwogCQkvKgogCQkgKiBJZiB0aGlzIGRldmljZSBoYXMgcGFydGl0aW9ucywgcmVtYXAgYmxvY2sgbgogCQkgKiBvZiBwYXJ0aXRpb24gcCB0byBibG9jayBuK3N0YXJ0KHApIG9mIHRoZSBkaXNrLgpAQCAtMzE5NSwxMCArMzIzMiwxMiBAQAogCUJJT19CVUdfT04oIWJpby0+Ymlfc2l6ZSk7CiAJQklPX0JVR19PTighYmlvLT5iaV9pb192ZWMpOwogCWJpby0+YmlfcncgfD0gcnc7Ci0JaWYgKHJ3ICYgV1JJVEUpCisJaWYgKHJ3ICYgV1JJVEUpIHsKIAkJY291bnRfdm1fZXZlbnRzKFBHUEdPVVQsIGNvdW50KTsKLQllbHNlCisJfSBlbHNlIHsKKwkJdGFza19pb19hY2NvdW50X3JlYWQoYmlvLT5iaV9zaXplKTsKIAkJY291bnRfdm1fZXZlbnRzKFBHUEdJTiwgY291bnQpOworCX0KIAogCWlmICh1bmxpa2VseShibG9ja19kdW1wKSkgewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CmRpZmYgLS1naXQgYS9ibG9jay9zY3NpX2lvY3RsLmMgYi9ibG9jay9zY3NpX2lvY3RsLmMKaW5kZXggYjNlMjEwNy4uNjVjNmEzYyAxMDA2NDQKLS0tIGEvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwpAQCAtMjIzLDExICsyMjMsMTIgQEAKIHN0YXRpYyBpbnQgc2dfaW8oc3RydWN0IGZpbGUgKmZpbGUsIHJlcXVlc3RfcXVldWVfdCAqcSwKIAkJc3RydWN0IGdlbmRpc2sgKmJkX2Rpc2ssIHN0cnVjdCBzZ19pb19oZHIgKmhkcikKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CisJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lLCB0aW1lb3V0OwogCWludCB3cml0aW5nID0gMCwgcmV0ID0gMDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwogCXVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKKwlzdHJ1Y3QgYmlvICpiaW87CiAKIAlpZiAoaGRyLT5pbnRlcmZhY2VfaWQgIT0gJ1MnKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3MCwxNCArMjcxLDggQEAKIAogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwogCi0JLyoKLQkgKiBib3VuY2UgdGhpcyBhZnRlciBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBiaW8sIGl0J3MKLQkgKiBuZWVkZWQgZm9yIHByb3BlciB1bm1hcHBpbmcKLQkgKi8KLQlpZiAocnEtPmJpbykKLQkJYmxrX3F1ZXVlX2JvdW5jZShxLCAmcnEtPmJpbyk7Ci0KLQlycS0+dGltZW91dCA9IGppZmZpZXNfdG9fbXNlY3MoaGRyLT50aW1lb3V0KTsKKwl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhoZHItPnRpbWVvdXQpOworCXJxLT50aW1lb3V0ID0gKHRpbWVvdXQgPCBJTlRfTUFYKSA/IHRpbWVvdXQgOiBJTlRfTUFYOwogCWlmICghcnEtPnRpbWVvdXQpCiAJCXJxLT50aW1lb3V0ID0gcS0+c2dfdGltZW91dDsKIAlpZiAoIXJxLT50aW1lb3V0KQpAQCAtMzA4LDYgKzMwMyw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKKwliaW8gPSBycS0+YmlvOwogCXJxLT5yZXRyaWVzID0gMDsKIAogCXN0YXJ0X3RpbWUgPSBqaWZmaWVzOwpAQCAtMzM4LDcgKzMzNCw3IEBACiAJCQloZHItPnNiX2xlbl93ciA9IGxlbjsKIAl9CiAKLQlpZiAoYmxrX3JxX3VubWFwX3VzZXIocnEpKQorCWlmIChibGtfcnFfdW5tYXBfdXNlcihiaW8pKQogCQlyZXQgPSAtRUZBVUxUOwogCiAJLyogbWF5IG5vdCBoYXZlIHN1Y2NlZWRlZCwgYnV0IG91dHB1dCB2YWx1ZXMgd3JpdHRlbiB0byBjb250cm9sCmRpZmYgLS1naXQgYS9jcnlwdG8vYmxrY2lwaGVyLmMgYi9jcnlwdG8vYmxrY2lwaGVyLmMKaW5kZXggMDM0YzkzOS4uNmU5MzAwNGYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibGtjaXBoZXIuYworKysgYi9jcnlwdG8vYmxrY2lwaGVyLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTUxMi5jIGIvY3J5cHRvL3NoYTUxMi5jCmluZGV4IDJkZmU3ZjEuLjE1ZWFiOWQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGE1MTIuYworKysgYi9jcnlwdG8vc2hhNTEyLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2RlZmluZSBTSEEzODRfRElHRVNUX1NJWkUgNDgKICNkZWZpbmUgU0hBNTEyX0RJR0VTVF9TSVpFIDY0Ci0jZGVmaW5lIFNIQTM4NF9ITUFDX0JMT0NLX1NJWkUgIDk2CisjZGVmaW5lIFNIQTM4NF9ITUFDX0JMT0NLX1NJWkUgMTI4CiAjZGVmaW5lIFNIQTUxMl9ITUFDX0JMT0NLX1NJWkUgMTI4CiAKIHN0cnVjdCBzaGE1MTJfY3R4IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvS2NvbmZpZyBiL2RyaXZlcnMvS2NvbmZpZwppbmRleCBmMzk0NjM0Li5lN2RhOWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9LY29uZmlnCkBAIC02NCw2ICs2NCw4IEBACiAKIHNvdXJjZSAic291bmQvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2hpZC9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvdXNiL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9tbWMvS2NvbmZpZyIKQEAgLTc4LDQgKzgwLDYgQEAKIAogc291cmNlICJkcml2ZXJzL2RtYS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMva3ZtL0tjb25maWciCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDY3NzExNzcuLjBkZDk2ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtNDMsNiArNDMsNyBAQAogb2JqLSQoQ09ORklHX1BDQ0FSRCkJCSs9IHBjbWNpYS8KIG9iai0kKENPTkZJR19ESU8pCQkrPSBkaW8vCiBvYmotJChDT05GSUdfU0JVUykJCSs9IHNidXMvCitvYmotJChDT05GSUdfS1ZNKQkJKz0ga3ZtLwogb2JqLSQoQ09ORklHX1pPUlJPKQkJKz0gem9ycm8vCiBvYmotJChDT05GSUdfTUFDKQkJKz0gbWFjaW50b3NoLwogb2JqLSQoQ09ORklHX0FUQV9PVkVSX0VUSCkJKz0gYmxvY2svYW9lLwpAQCAtNzcsNCArNzgsNSBAQAogb2JqLSQoQ09ORklHX1NVUEVSSCkJCSs9IHNoLwogb2JqLSQoQ09ORklHX0dFTkVSSUNfVElNRSkJKz0gY2xvY2tzb3VyY2UvCiBvYmotJChDT05GSUdfRE1BX0VOR0lORSkJKz0gZG1hLworb2JqLSQoQ09ORklHX0hJRCkJCSs9IGhpZC8KIG9iai0kKENPTkZJR19QUENfUFMzKQkJKz0gcHMzLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY29ybi9ibG9jay9mZDE3NzIuYyBiL2RyaXZlcnMvYWNvcm4vYmxvY2svZmQxNzcyLmMKaW5kZXggMDQ4NTQyMy4uNjc0YmY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY29ybi9ibG9jay9mZDE3NzIuYworKysgYi9kcml2ZXJzL2Fjb3JuL2Jsb2NrL2ZkMTc3Mi5jCkBAIC0xNTQ5LDEyICsxNTQ5LDEyIEBACiAjaWZkZWYgVFJBQ0tCVUZGRVIKIAlCdWZmZXJEcml2ZSA9IEJ1ZmZlclNpZGUgPSBCdWZmZXJUcmFjayA9IC0xOwogCS8qIEF0YXJpIHVzZXMgNTEyIC0gSSB3YW50IHRvIGV2ZW50dWFsbHkgY29wZSB3aXRoIDFLIHNlY3RvcnMgKi8KLQlETUFCdWZmZXIgPSAoY2hhciAqKWttYWxsb2MoKEZEMTc3Ml9NQVhfU0VDVE9SUysxKSo1MTIsR0ZQX0tFUk5FTCk7CisJRE1BQnVmZmVyID0ga21hbGxvYygoRkQxNzcyX01BWF9TRUNUT1JTKzEpKjUxMixHRlBfS0VSTkVMKTsKIAlUcmFja0J1ZmZlciA9IERNQUJ1ZmZlciArIDUxMjsKICNlbHNlCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgRE1BYnVmZmVyIC0gb24gdGhlIEF0YXJpIHRoaXMgdGFrZXMgaXQKIAkgICBvdXQgb2Ygc29tZSBzcGVjaWFsIG1lbW9yeS4uLiAqLwotCURNQUJ1ZmZlciA9IChjaGFyICopIGttYWxsb2MoMjA0OCk7CS8qIENvcGVzIHdpdGggcHJldHR5IGxhcmdlIHNlY3RvcnMgKi8KKwlETUFCdWZmZXIgPSBrbWFsbG9jKDIwNDgpOwkvKiBDb3BlcyB3aXRoIHByZXR0eSBsYXJnZSBzZWN0b3JzICovCiAjZW5kaWYKIAllcnIgPSAtRU5PTUVNOwogCWlmICghRE1BYnVmZmVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY29ybi9jaGFyL2kyYy5jIGIvZHJpdmVycy9hY29ybi9jaGFyL2kyYy5jCmluZGV4IGJkYjljOGIuLjllNTg0YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNvcm4vY2hhci9pMmMuYworKysgYi9kcml2ZXJzL2Fjb3JuL2NoYXIvaTJjLmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCWlmIChyZXQgPj0gMCl7CiAJCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnJ0Y19kZXYpOwogCQlpZihyZXQgPCAwKQotCQkJaTJjX2JpdF9kZWxfYnVzKCZpb2Nfb3BzKTsKKwkJCWkyY19kZWxfYWRhcHRlcigmaW9jX29wcyk7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggMGY5ZDRiZS4uZjRmMDAwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTExLDcgKzExLDcgQEAKIAlib29sICJBQ1BJIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJQTY0IHx8IFg4NgogCWRlcGVuZHMgb24gUENJCi0Jc2VsZWN0IFBNCisJZGVwZW5kcyBvbiBQTQogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSAoQUNQSSkgc3VwcG9ydCBmb3IgCkBAIC05Nyw2ICs5Nyw3IEBACiAKIGNvbmZpZyBBQ1BJX0JVVFRPTgogCXRyaXN0YXRlICJCdXR0b24iCisJZGVwZW5kcyBvbiBJTlBVVAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGhhbmRsZXMgZXZlbnRzIG9uIHRoZSBwb3dlciwgc2xlZXAgYW5kIGxpZCBidXR0b25zLgpAQCAtMTcyLDYgKzE3Myw3IEBACiBjb25maWcgQUNQSV9BU1VTCiAgICAgICAgIHRyaXN0YXRlICJBU1VTL01lZGlvbiBMYXB0b3AgRXh0cmFzIgogCWRlcGVuZHMgb24gWDg2CisJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKICAgICAgICAgLS0taGVscC0tLQogICAgICAgICAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGV4dHJhIGZlYXR1cmVzIG9mIEFDUEktY29tcGF0aWJsZQogICAgICAgICAgIEFTVVMgbGFwdG9wcy4gQXMgc29tZSBvZiBNZWRpb24gbGFwdG9wcyBhcmUgbWFkZSBieSBBU1VTLCBpdCBtYXkgYWxzbwpAQCAtMjAwLDYgKzIwMiw3IEBACiBjb25maWcgQUNQSV9JQk0KIAl0cmlzdGF0ZSAiSUJNIFRoaW5rUGFkIExhcHRvcCBFeHRyYXMiCiAJZGVwZW5kcyBvbiBYODYKKwlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBMaW51eCBBQ1BJIGRyaXZlciBmb3IgdGhlIElCTSBUaGlua1BhZCBsYXB0b3BzLiBJdCBhZGRzCiAJICBzdXBwb3J0IGZvciBGbi1GeCBrZXkgY29tYmluYXRpb25zLCBCbHVldG9vdGggY29udHJvbCwgdmlkZW8KQEAgLTIyNSw2ICsyMjgsNyBAQAogY29uZmlnIEFDUElfVE9TSElCQQogCXRyaXN0YXRlICJUb3NoaWJhIExhcHRvcCBFeHRyYXMiCiAJZGVwZW5kcyBvbiBYODYKKwlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgYWNjZXNzIHRvIGNlcnRhaW4gc3lzdGVtIHNldHRpbmdzCiAJICBvbiAibGVnYWN5IGZyZWUiIFRvc2hpYmEgbGFwdG9wcy4gIFRoZXNlIGxhcHRvcHMgY2FuIGJlIHJlY29nbml6ZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hYy5jIGIvZHJpdmVycy9hY3BpL2FjLmMKaW5kZXggMTFhYmM3Yi4uNmRhZWFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCiBzdGF0aWMgaW50IGFjcGlfYWNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKLQlzdHJ1Y3QgYWNwaV9hYyAqYWMgPSAoc3RydWN0IGFjcGlfYWMgKilzZXEtPnByaXZhdGU7CisJc3RydWN0IGFjcGlfYWMgKmFjID0gc2VxLT5wcml2YXRlOwogCiAKIAlpZiAoIWFjKQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAKIHN0YXRpYyB2b2lkIGFjcGlfYWNfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBhY3BpX2FjICphYyA9IChzdHJ1Y3QgYWNwaV9hYyAqKWRhdGE7CisJc3RydWN0IGFjcGlfYWMgKmFjID0gZGF0YTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAKIApAQCAtMjIxLDEwICsyMjEsOSBAQAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfYWMpLCBHRlBfS0VSTkVMKTsKKwlhYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2FjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhYykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGFjLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYWMpKTsKIAogCWFjLT5kZXZpY2UgPSBkZXZpY2U7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9BQ19ERVZJQ0VfTkFNRSk7CkBAIC0yNjksNyArMjY4LDcgQEAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFjID0gKHN0cnVjdCBhY3BpX2FjICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCWFjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCiAJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCiAJCQkJCSAgICBBQ1BJX0FMTF9OT1RJRlksIGFjcGlfYWNfbm90aWZ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYwppbmRleCA2YmNkOWU4Li5jZDk0NmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCkBAIC0zOTUsMTAgKzM5NSw5IEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtX2RldmljZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX21lbW9yeV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwltZW1fZGV2aWNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfbWVtb3J5X2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghbWVtX2RldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KG1lbV9kZXZpY2UsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9tZW1vcnlfZGV2aWNlKSk7CiAKIAlJTklUX0xJU1RfSEVBRCgmbWVtX2RldmljZS0+cmVzX2xpc3QpOwogCW1lbV9kZXZpY2UtPmRldmljZSA9IGRldmljZTsKQEAgLTQyOSw3ICs0MjgsNyBAQAogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtX2RldmljZSA9IChzdHJ1Y3QgYWNwaV9tZW1vcnlfZGV2aWNlICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCW1lbV9kZXZpY2UgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJa2ZyZWUobWVtX2RldmljZSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9hc3VzX2FjcGkuYwppbmRleCBjN2FjOTI5Li4zOTYxNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9hY3BpL2FzdXNfYWNwaS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC00MDIsNiArNDAzLDggQEAKIC8qIHByb2NkaXIgd2UgdXNlICovCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICphc3VzX3Byb2NfZGlyOwogCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmFzdXNfYmFja2xpZ2h0X2RldmljZTsKKwogLyoKICAqIFRoaXMgaGVhZGVyIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFsbG93IHByb3BlciBjb25maWd1cmF0aW9uIGdpdmVuIG1vZGVsLAogICogcmV2aXNpb24gbnVtYmVyICwgLi4uIHRoaXMgaW5mbyBjYW5ub3QgZ28gaW4gc3RydWN0IGFzdXNfaG90ayBiZWNhdXNlIGl0IGlzCkBAIC03NzksNyArNzgyLDcgQEAKIAlyZXR1cm4gcnY7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9icmlnaHRuZXNzKHZvaWQpCitzdGF0aWMgaW50IHJlYWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7CiAJaW50IHZhbHVlOwogCkBAIC04MDEsOSArODA0LDEwIEBACiAvKgogICogQ2hhbmdlIHRoZSBicmlnaHRuZXNzIGxldmVsCiAgKi8KLXN0YXRpYyB2b2lkIHNldF9icmlnaHRuZXNzKGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2V0X2JyaWdodG5lc3MoaW50IHZhbHVlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CisJaW50IHJldCA9IDA7CiAKIAkvKiBTUExWIGxhcHRvcCAqLwogCWlmIChob3RrLT5tZXRob2RzLT5icmlnaHRuZXNzX3NldCkgewpAQCAtODExLDExICs4MTUsMTIgQEAKIAkJCQkgICAgdmFsdWUsIE5VTEwpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICJBc3VzIEFDUEk6IEVycm9yIGNoYW5naW5nIGJyaWdodG5lc3NcbiIpOwotCQlyZXR1cm47CisJCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBObyBTUExWIG1ldGhvZCBpZiB3ZSBhcmUgaGVyZSwgYWN0IGFzIGFwcHJvcHJpYXRlICovCi0JdmFsdWUgLT0gcmVhZF9icmlnaHRuZXNzKCk7CisJdmFsdWUgLT0gcmVhZF9icmlnaHRuZXNzKE5VTEwpOwogCXdoaWxlICh2YWx1ZSAhPSAwKSB7CiAJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KE5VTEwsICh2YWx1ZSA+IDApID8KIAkJCQkJICAgICAgaG90ay0+bWV0aG9kcy0+YnJpZ2h0bmVzc191cCA6CkBAIC04MjUsMTUgKzgzMCwyMiBAQAogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIkFzdXMgQUNQSTogRXJyb3IgY2hhbmdpbmcgYnJpZ2h0bmVzc1xuIik7CisJCQlyZXQgPSAtRUlPOwogCX0KLQlyZXR1cm47CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZXRfYnJpZ2h0bmVzc19zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCXJldHVybiBzZXRfYnJpZ2h0bmVzcyhiZC0+cHJvcHMtPmJyaWdodG5lc3MpOwogfQogCiBzdGF0aWMgaW50CiBwcm9jX3JlYWRfYnJuKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLAogCSAgICAgIHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCByZWFkX2JyaWdodG5lc3MoKSk7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVkXG4iLCByZWFkX2JyaWdodG5lc3MoTlVMTCkpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMTM0LDcgKzExNDYsNyBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiICBDb3VsZG4ndCBnZXQgdGhlIERTRFQgdGFibGUgaGVhZGVyXG4iKTsKIAllbHNlCi0JCWFzdXNfaW5mbyA9IChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKilkc2R0LnBvaW50ZXI7CisJCWFzdXNfaW5mbyA9IGRzZHQucG9pbnRlcjsKIAogCS8qIFdlIGhhdmUgdG8gd3JpdGUgMCBvbiBpbml0IHRoaXMgZmFyIGZvciBhbGwgQVNVUyBtb2RlbHMgKi8KIAlpZiAoIXdyaXRlX2FjcGlfaW50KGhvdGstPmhhbmRsZSwgIklOSVQiLCAwLCAmYnVmZmVyKSkgewpAQCAtMTE1Niw3ICsxMTY4LDcgQEAKIAkgKiBhc3VzX21vZGVsX21hdGNoKCkgYW5kIHRyeSBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQuCiAJICovCiAJaWYgKGJ1ZmZlci5wb2ludGVyKSB7Ci0JCW1vZGVsID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopYnVmZmVyLnBvaW50ZXI7CisJCW1vZGVsID0gYnVmZmVyLnBvaW50ZXI7CiAJCXN3aXRjaCAobW9kZWwtPnR5cGUpIHsKIAkJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCQkJc3RyaW5nID0gbW9kZWwtPnN0cmluZy5wb2ludGVyOwpAQCAtMTI1MiwxMSArMTI2NCw5IEBACiAJcHJpbnRrKEtFUk5fTk9USUNFICJBc3VzIExhcHRvcCBBQ1BJIEV4dHJhcyB2ZXJzaW9uICVzXG4iLAogCSAgICAgICBBU1VTX0FDUElfVkVSU0lPTik7CiAKLQlob3RrID0KLQkgICAgKHN0cnVjdCBhc3VzX2hvdGsgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXN1c19ob3RrKSwgR0ZQX0tFUk5FTCk7CisJaG90ayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhc3VzX2hvdGspLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhvdGspCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChob3RrLCAwLCBzaXplb2Yoc3RydWN0IGFzdXNfaG90aykpOwogCiAJaG90ay0+aGFuZGxlID0gZGV2aWNlLT5oYW5kbGU7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9IT1RLX0RFVklDRV9OQU1FKTsKQEAgLTEzMzMsNiArMTM0MywyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIGFzdXNfYmFja2xpZ2h0X2RhdGEgPSB7CisgICAgICAgIC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorICAgICAgICAuZ2V0X2JyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MsCisgICAgICAgIC51cGRhdGVfc3RhdHVzICA9IHNldF9icmlnaHRuZXNzX3N0YXR1cywKKyAgICAgICAgLm1heF9icmlnaHRuZXNzID0gMTUsCit9OworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXN1c19hY3BpX2V4aXQodm9pZCkKK3sKKwlpZiAoYXN1c19iYWNrbGlnaHRfZGV2aWNlKQorCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYXN1c19iYWNrbGlnaHRfZGV2aWNlKTsKKworCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhc3VzX2hvdGtfZHJpdmVyKTsKKwlyZW1vdmVfcHJvY19lbnRyeShQUk9DX0FTVVMsIGFjcGlfcm9vdF9kaXIpOworCisJa2ZyZWUoYXN1c19pbmZvKTsKKworCXJldHVybjsKK30KKwogc3RhdGljIGludCBfX2luaXQgYXN1c19hY3BpX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzdWx0OwpAQCAtMTM3MCwxOCArMTQwMCwxNiBAQAogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAorCWFzdXNfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImFzdXMiLE5VTEwsTlVMTCwKKwkJCQkJCQkgICZhc3VzX2JhY2tsaWdodF9kYXRhKTsKKyAgICAgICAgaWYgKElTX0VSUihhc3VzX2JhY2tsaWdodF9kZXZpY2UpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHJlZ2lzdGVyIGFzdXMgYmFja2xpZ2h0IGRldmljZVxuIik7CisJCWFzdXNfYmFja2xpZ2h0X2RldmljZSA9IE5VTEw7CisJCWFzdXNfYWNwaV9leGl0KCk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBhc3VzX2FjcGlfZXhpdCh2b2lkKQotewotCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhc3VzX2hvdGtfZHJpdmVyKTsKLQlyZW1vdmVfcHJvY19lbnRyeShQUk9DX0FTVVMsIGFjcGlfcm9vdF9kaXIpOwotCi0Ja2ZyZWUoYXN1c19pbmZvKTsKLQotCXJldHVybjsKLX0KLQogbW9kdWxlX2luaXQoYXN1c19hY3BpX2luaXQpOwogbW9kdWxlX2V4aXQoYXN1c19hY3BpX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggMDI2ZTQwNzUuLjVmNDNlMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9hY3BpL2JhdHRlcnkuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXBhY2thZ2UgPSAodW5pb24gYWNwaV9vYmplY3QgKilidWZmZXIucG9pbnRlcjsKKwlwYWNrYWdlID0gYnVmZmVyLnBvaW50ZXI7CiAKIAkvKiBFeHRyYWN0IFBhY2thZ2UgRGF0YSAqLwogCkBAIC0xNjAsMTIgKzE2MCwxMSBAQAogCQlnb3RvIGVuZDsKIAl9CiAKLQlkYXRhLnBvaW50ZXIgPSBrbWFsbG9jKGRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlkYXRhLnBvaW50ZXIgPSBremFsbG9jKGRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEucG9pbnRlcikgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGVuZDsKIAl9Ci0JbWVtc2V0KGRhdGEucG9pbnRlciwgMCwgZGF0YS5sZW5ndGgpOwogCiAJc3RhdHVzID0gYWNwaV9leHRyYWN0X3BhY2thZ2UocGFja2FnZSwgJmZvcm1hdCwgJmRhdGEpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtMTc5LDcgKzE3OCw3IEBACiAJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOwogCiAJaWYgKCFyZXN1bHQpCi0JCSgqYmlmKSA9IChzdHJ1Y3QgYWNwaV9iYXR0ZXJ5X2luZm8gKilkYXRhLnBvaW50ZXI7CisJCSgqYmlmKSA9IGRhdGEucG9pbnRlcjsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yMDksNyArMjA4LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcGFja2FnZSA9ICh1bmlvbiBhY3BpX29iamVjdCAqKWJ1ZmZlci5wb2ludGVyOworCXBhY2thZ2UgPSBidWZmZXIucG9pbnRlcjsKIAogCS8qIEV4dHJhY3QgUGFja2FnZSBEYXRhICovCiAKQEAgLTIyMCwxMiArMjE5LDExIEBACiAJCWdvdG8gZW5kOwogCX0KIAotCWRhdGEucG9pbnRlciA9IGttYWxsb2MoZGF0YS5sZW5ndGgsIEdGUF9LRVJORUwpOworCWRhdGEucG9pbnRlciA9IGt6YWxsb2MoZGF0YS5sZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICghZGF0YS5wb2ludGVyKSB7CiAJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gZW5kOwogCX0KLQltZW1zZXQoZGF0YS5wb2ludGVyLCAwLCBkYXRhLmxlbmd0aCk7CiAKIAlzdGF0dXMgPSBhY3BpX2V4dHJhY3RfcGFja2FnZShwYWNrYWdlLCAmZm9ybWF0LCAmZGF0YSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC0yMzksNyArMjM3LDcgQEAKIAlrZnJlZShidWZmZXIucG9pbnRlcik7CiAKIAlpZiAoIXJlc3VsdCkKLQkJKCpic3QpID0gKHN0cnVjdCBhY3BpX2JhdHRlcnlfc3RhdHVzICopZGF0YS5wb2ludGVyOworCQkoKmJzdCkgPSBkYXRhLnBvaW50ZXI7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMzM0LDcgKzMzMiw3IEBACiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9yZWFkX2luZm8oc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gKHN0cnVjdCBhY3BpX2JhdHRlcnkgKilzZXEtPnByaXZhdGU7CisJc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IHNlcS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5X2luZm8gKmJpZiA9IE5VTEw7CiAJY2hhciAqdW5pdHMgPSAiPyI7CiAKQEAgLTQxOCw3ICs0MTYsNyBAQAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfcmVhZF9zdGF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSAoc3RydWN0IGFjcGlfYmF0dGVyeSAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gc2VxLT5wcml2YXRlOwogCXN0cnVjdCBhY3BpX2JhdHRlcnlfc3RhdHVzICpic3QgPSBOVUxMOwogCWNoYXIgKnVuaXRzID0gIj8iOwogCkBAIC00OTQsNyArNDkyLDcgQEAKIAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfcmVhZF9hbGFybShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSAoc3RydWN0IGFjcGlfYmF0dGVyeSAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gc2VxLT5wcml2YXRlOwogCWNoYXIgKnVuaXRzID0gIj8iOwogCiAKQEAgLTUzMSw4ICs1MjksOCBAQAogewogCWludCByZXN1bHQgPSAwOwogCWNoYXIgYWxhcm1fc3RyaW5nWzEyXSA9IHsgJ1wwJyB9OwotCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IChzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICopbS0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IG0tPnByaXZhdGU7CiAKIAogCWlmICghYmF0dGVyeSB8fCAoY291bnQgPiBzaXplb2YoYWxhcm1fc3RyaW5nKSAtIDEpKQpAQCAtNjU4LDcgKzY1Niw3IEBACiAKIHN0YXRpYyB2b2lkIGFjcGlfYmF0dGVyeV9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IChzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICopZGF0YTsKKwlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gZGF0YTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAKIApAQCAtNjk0LDEwICs2OTIsOSBAQAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJhdHRlcnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5KSwgR0ZQX0tFUk5FTCk7CisJYmF0dGVyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2JhdHRlcnkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJhdHRlcnkpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChiYXR0ZXJ5LCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYmF0dGVyeSkpOwogCiAJYmF0dGVyeS0+ZGV2aWNlID0gZGV2aWNlOwogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfQkFUVEVSWV9ERVZJQ0VfTkFNRSk7CkBAIC03NDIsNyArNzM5LDcgQEAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJhdHRlcnkgPSAoc3RydWN0IGFjcGlfYmF0dGVyeSAqKWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKKwliYXR0ZXJ5ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCiAJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCiAJCQkJCSAgICBBQ1BJX0FMTF9OT1RJRlksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmMKaW5kZXggMjc5YzRiYS4uNzY2MzMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtNTYxLDYgKzU2MSw5IEBACiAJY2FzZSBBQ1BJX0lSUV9NT0RFTF9JT1NBUElDOgogCQltZXNzYWdlID0gIklPU0FQSUMiOwogCQlicmVhazsKKwljYXNlIEFDUElfSVJRX01PREVMX1BMQVRGT1JNOgorCQltZXNzYWdlID0gInBsYXRmb3JtIHNwZWNpZmljIG1vZGVsIjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIlVua25vd24gaW50ZXJydXB0IHJvdXRpbmcgbW9kZWxcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXR0b24uYyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwppbmRleCA1ZWY4ODVlLi5hYzg2MDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCkBAIC02Miw3ICs2Myw3IEBACiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfQlVUVE9OX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgiYWNwaV9idXR0b24iKQogCi0gICAgTU9EVUxFX0FVVEhPUigiUGF1bCBEaWVmZW5iYXVnaCIpOworTU9EVUxFX0FVVEhPUigiUGF1bCBEaWVmZW5iYXVnaCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKEFDUElfQlVUVE9OX0RSSVZFUl9OQU1FKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApAQCAtNzgsMTIgKzc5LDE0IEBACiAJLm9wcyA9IHsKIAkJLmFkZCA9IGFjcGlfYnV0dG9uX2FkZCwKIAkJLnJlbW92ZSA9IGFjcGlfYnV0dG9uX3JlbW92ZSwKLQkJfSwKKwl9LAogfTsKIAogc3RydWN0IGFjcGlfYnV0dG9uIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsJLyogRml4ZWQgYnV0dG9uIGtsdWRnZSAqLwotCXU4IHR5cGU7CisJdW5zaWduZWQgaW50IHR5cGU7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJY2hhciBwaHlzWzMyXTsJCQkvKiBmb3IgaW5wdXQgZGV2aWNlICovCiAJdW5zaWduZWQgbG9uZyBwdXNoZWQ7CiB9OwogCkBAIC0xMDksOCArMTEyLDcgQEAKIAogc3RhdGljIGludCBhY3BpX2J1dHRvbl9pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b24gPSAoc3RydWN0IGFjcGlfYnV0dG9uICopc2VxLT5wcml2YXRlOwotCisJc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b24gPSBzZXEtPnByaXZhdGU7CiAKIAlpZiAoIWJ1dHRvbiB8fCAhYnV0dG9uLT5kZXZpY2UpCiAJCXJldHVybiAwOwpAQCAtMTI4LDIyICsxMzAsMTcgQEAKIAogc3RhdGljIGludCBhY3BpX2J1dHRvbl9zdGF0ZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gKHN0cnVjdCBhY3BpX2J1dHRvbiAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbiA9IHNlcS0+cHJpdmF0ZTsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIAotCiAJaWYgKCFidXR0b24gfHwgIWJ1dHRvbi0+ZGV2aWNlKQogCQlyZXR1cm4gMDsKIAogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihidXR0b24tPmRldmljZS0+aGFuZGxlLCAiX0xJRCIsIE5VTEwsICZzdGF0ZSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXNlcV9wcmludGYoc2VxLCAic3RhdGU6ICAgICAgdW5zdXBwb3J0ZWRcbiIpOwotCX0gZWxzZSB7Ci0JCXNlcV9wcmludGYoc2VxLCAic3RhdGU6ICAgICAgJXNcbiIsCi0JCQkgICAoc3RhdGUgPyAib3BlbiIgOiAiY2xvc2VkIikpOwotCX0KLQorCXNlcV9wcmludGYoc2VxLCAic3RhdGU6ICAgICAgJXNcbiIsCisJCSAgIEFDUElfRkFJTFVSRShzdGF0dXMpID8gInVuc3VwcG9ydGVkIiA6CisJCQkoc3RhdGUgPyAib3BlbiIgOiAiY2xvc2VkIikpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTksOCArMTU2LDcgQEAKIHN0YXRpYyBpbnQgYWNwaV9idXR0b25fYWRkX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnkgPSBOVUxMOwotCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gTlVMTDsKLQorCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uOwogCiAJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMjgsMTAgKzIyNCw4IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9idXR0b25fcmVtb3ZlX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gTlVMTDsKKwlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbiA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAotCi0JYnV0dG9uID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCWlmIChhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkgewogCQlpZiAoYnV0dG9uLT50eXBlID09IEFDUElfQlVUVE9OX1RZUEVfTElEKQogCQkJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9CVVRUT05fRklMRV9TVEFURSwKQEAgLTI1MywxNCArMjQ3LDM0IEBACiAKIHN0YXRpYyB2b2lkIGFjcGlfYnV0dG9uX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbiA9IChzdHJ1Y3QgYWNwaV9idXR0b24gKilkYXRhOwotCisJc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b24gPSBkYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCiAJaWYgKCFidXR0b24gfHwgIWJ1dHRvbi0+ZGV2aWNlKQogCQlyZXR1cm47CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBBQ1BJX0JVVFRPTl9OT1RJRllfU1RBVFVTOgorCQlpbnB1dCA9IGJ1dHRvbi0+aW5wdXQ7CisKKwkJaWYgKGJ1dHRvbi0+dHlwZSA9PSBBQ1BJX0JVVFRPTl9UWVBFX0xJRCkgeworCQkJc3RydWN0IGFjcGlfaGFuZGxlICpoYW5kbGUgPSBidXR0b24tPmRldmljZS0+aGFuZGxlOworCQkJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKworCQkJaWYgKCFBQ1BJX0ZBSUxVUkUoYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIl9MSUQiLAorCQkJCQkJCQlOVUxMLCAmc3RhdGUpKSkKKwkJCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGlucHV0LCBTV19MSUQsICFzdGF0ZSk7CisKKwkJfSBlbHNlIHsKKwkJCWludCBrZXljb2RlID0gdGVzdF9iaXQoS0VZX1NMRUVQLCBpbnB1dC0+a2V5Yml0KSA/CisJCQkJCQlLRVlfU0xFRVAgOiBLRVlfUE9XRVI7CisKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIGtleWNvZGUsIDEpOworCQkJaW5wdXRfc3luYyhpbnB1dCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBrZXljb2RlLCAwKTsKKwkJfQorCQlpbnB1dF9zeW5jKGlucHV0KTsKKwogCQlhY3BpX2J1c19nZW5lcmF0ZV9ldmVudChidXR0b24tPmRldmljZSwgZXZlbnQsCiAJCQkJCSsrYnV0dG9uLT5wdXNoZWQpOwogCQlicmVhazsKQEAgLTI3NSw4ICsyODksNyBAQAogCiBzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9idXR0b25fbm90aWZ5X2ZpeGVkKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b24gPSAoc3RydWN0IGFjcGlfYnV0dG9uICopZGF0YTsKLQorCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gZGF0YTsKIAogCWlmICghYnV0dG9uKQogCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKQEAgLTI4NiwyNCArMjk5LDc1IEBACiAJcmV0dXJuIEFFX09LOwogfQogCitzdGF0aWMgaW50IGFjcGlfYnV0dG9uX2luc3RhbGxfbm90aWZ5X2hhbmRsZXJzKHN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN3aXRjaCAoYnV0dG9uLT50eXBlKSB7CisJY2FzZSBBQ1BJX0JVVFRPTl9UWVBFX1BPV0VSRjoKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfUE9XRVJfQlVUVE9OLAorCQkJCQkJICAgICBhY3BpX2J1dHRvbl9ub3RpZnlfZml4ZWQsCisJCQkJCQkgICAgIGJ1dHRvbik7CisJCWJyZWFrOworCWNhc2UgQUNQSV9CVVRUT05fVFlQRV9TTEVFUEY6CisJCXN0YXR1cyA9CisJCSAgICBhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1NMRUVQX0JVVFRPTiwKKwkJCQkJCSAgICAgYWNwaV9idXR0b25fbm90aWZ5X2ZpeGVkLAorCQkJCQkJICAgICBidXR0b24pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoYnV0dG9uLT5kZXZpY2UtPmhhbmRsZSwKKwkJCQkJCSAgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAorCQkJCQkJICAgICBhY3BpX2J1dHRvbl9ub3RpZnksCisJCQkJCQkgICAgIGJ1dHRvbik7CisJCWJyZWFrOworCX0KKworCXJldHVybiBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSA/IC1FTk9ERVYgOiAwOworfQorCitzdGF0aWMgdm9pZCBhY3BpX2J1dHRvbl9yZW1vdmVfbm90aWZ5X2hhbmRsZXJzKHN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uKQoreworCXN3aXRjaCAoYnV0dG9uLT50eXBlKSB7CisJY2FzZSBBQ1BJX0JVVFRPTl9UWVBFX1BPV0VSRjoKKwkJYWNwaV9yZW1vdmVfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1BPV0VSX0JVVFRPTiwKKwkJCQkJCWFjcGlfYnV0dG9uX25vdGlmeV9maXhlZCk7CisJCWJyZWFrOworCWNhc2UgQUNQSV9CVVRUT05fVFlQRV9TTEVFUEY6CisJCWFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9TTEVFUF9CVVRUT04sCisJCQkJCQlhY3BpX2J1dHRvbl9ub3RpZnlfZml4ZWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihidXR0b24tPmRldmljZS0+aGFuZGxlLAorCQkJCQkgICBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCSAgIGFjcGlfYnV0dG9uX25vdGlmeSk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBhY3BpX2J1dHRvbl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0Jc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b24gPSBOVUxMOwotCisJaW50IGVycm9yOworCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYnV0dG9uID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfYnV0dG9uKSwgR0ZQX0tFUk5FTCk7CisJYnV0dG9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfYnV0dG9uKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidXR0b24pCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChidXR0b24sIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9idXR0b24pKTsKIAogCWJ1dHRvbi0+ZGV2aWNlID0gZGV2aWNlOwogCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IGJ1dHRvbjsKIAorCWJ1dHRvbi0+aW5wdXQgPSBpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaW5wdXQpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2J1dHRvbjsKKwl9CisKIAkvKgogCSAqIERldGVybWluZSB0aGUgYnV0dG9uIHR5cGUgKHZpYSBoaWQpLCBhcyBmaXhlZC1mZWF0dXJlIGJ1dHRvbnMKIAkgKiBuZWVkIHRvIGJlIGhhbmRsZWQgYSBiaXQgZGlmZmVyZW50bHkgdGhhbiBnZW5lcmljLXNwYWNlLgpAQCAtMzM4LDM5ICs0MDIsNDggQEAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJVbnN1cHBvcnRlZCBoaWQgWyVzXVxuIiwKIAkJCSAgICBhY3BpX2RldmljZV9oaWQoZGV2aWNlKSk7Ci0JCXJlc3VsdCA9IC1FTk9ERVY7Ci0JCWdvdG8gZW5kOworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfaW5wdXQ7CiAJfQogCi0JcmVzdWx0ID0gYWNwaV9idXR0b25fYWRkX2ZzKGRldmljZSk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBlbmQ7CisJZXJyb3IgPSBhY3BpX2J1dHRvbl9hZGRfZnMoZGV2aWNlKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX2ZyZWVfaW5wdXQ7CisKKwllcnJvciA9IGFjcGlfYnV0dG9uX2luc3RhbGxfbm90aWZ5X2hhbmRsZXJzKGJ1dHRvbik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9yZW1vdmVfZnM7CisKKwlzbnByaW50ZihidXR0b24tPnBoeXMsIHNpemVvZihidXR0b24tPnBoeXMpLAorCQkgIiVzL2J1dHRvbi9pbnB1dDAiLCBhY3BpX2RldmljZV9oaWQoZGV2aWNlKSk7CisKKwlpbnB1dC0+bmFtZSA9IGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKTsKKwlpbnB1dC0+cGh5cyA9IGJ1dHRvbi0+cGh5czsKKwlpbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWlucHV0LT5pZC5wcm9kdWN0ID0gYnV0dG9uLT50eXBlOwogCiAJc3dpdGNoIChidXR0b24tPnR5cGUpIHsKKwljYXNlIEFDUElfQlVUVE9OX1RZUEVfUE9XRVI6CiAJY2FzZSBBQ1BJX0JVVFRPTl9UWVBFX1BPV0VSRjoKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfUE9XRVJfQlVUVE9OLAotCQkJCQkJICAgICBhY3BpX2J1dHRvbl9ub3RpZnlfZml4ZWQsCi0JCQkJCQkgICAgIGJ1dHRvbik7CisJCWlucHV0LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCQlzZXRfYml0KEtFWV9QT1dFUiwgaW5wdXQtPmtleWJpdCk7CiAJCWJyZWFrOworCisJY2FzZSBBQ1BJX0JVVFRPTl9UWVBFX1NMRUVQOgogCWNhc2UgQUNQSV9CVVRUT05fVFlQRV9TTEVFUEY6Ci0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1NMRUVQX0JVVFRPTiwKLQkJCQkJCSAgICAgYWNwaV9idXR0b25fbm90aWZ5X2ZpeGVkLAotCQkJCQkJICAgICBidXR0b24pOworCQlpbnB1dC0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwkJc2V0X2JpdChLRVlfU0xFRVAsIGlucHV0LT5rZXliaXQpOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCi0JCQkJCQkgICAgIEFDUElfREVWSUNFX05PVElGWSwKLQkJCQkJCSAgICAgYWNwaV9idXR0b25fbm90aWZ5LAotCQkJCQkJICAgICBidXR0b24pOworCisJY2FzZSBBQ1BJX0JVVFRPTl9UWVBFX0xJRDoKKwkJaW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX1NXKTsKKwkJc2V0X2JpdChTV19MSUQsIGlucHV0LT5zd2JpdCk7CiAJCWJyZWFrOwogCX0KIAotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXN1bHQgPSAtRU5PREVWOwotCQlnb3RvIGVuZDsKLQl9CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfcmVtb3ZlX2hhbmRsZXJzOwogCiAJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnZhbGlkKSB7CiAJCS8qIEJ1dHRvbidzIEdQRSBpcyBydW4td2FrZSBHUEUgKi8KQEAgLTM4NSw0NyArNDU4LDMxIEBACiAJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzIFslc11cbiIsCiAJICAgICAgIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOwogCi0gICAgICBlbmQ6Ci0JaWYgKHJlc3VsdCkgewotCQlhY3BpX2J1dHRvbl9yZW1vdmVfZnMoZGV2aWNlKTsKLQkJa2ZyZWUoYnV0dG9uKTsKLQl9CisJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcmVzdWx0OworIGVycl9yZW1vdmVfaGFuZGxlcnM6CisJYWNwaV9idXR0b25fcmVtb3ZlX25vdGlmeV9oYW5kbGVycyhidXR0b24pOworIGVycl9yZW1vdmVfZnM6CisJYWNwaV9idXR0b25fcmVtb3ZlX2ZzKGRldmljZSk7CisgZXJyX2ZyZWVfaW5wdXQ6CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOworIGVycl9mcmVlX2J1dHRvbjoKKwlrZnJlZShidXR0b24pOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBhY3BpX2J1dHRvbl9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQogewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b24gPSBOVUxMOwotCisJc3RydWN0IGFjcGlfYnV0dG9uICpidXR0b247CiAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWJ1dHRvbiA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAotCS8qIFVucmVnaXN0ZXIgZm9yIGRldmljZSBub3RpZmljYXRpb25zLiAqLwotCXN3aXRjaCAoYnV0dG9uLT50eXBlKSB7Ci0JY2FzZSBBQ1BJX0JVVFRPTl9UWVBFX1BPV0VSRjoKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCi0JCQkJCQkgICAgYWNwaV9idXR0b25fbm90aWZ5X2ZpeGVkKTsKLQkJYnJlYWs7Ci0JY2FzZSBBQ1BJX0JVVFRPTl9UWVBFX1NMRUVQRjoKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9TTEVFUF9CVVRUT04sCi0JCQkJCQkgICAgYWNwaV9idXR0b25fbm90aWZ5X2ZpeGVkKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCi0JCQkJCQkgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAotCQkJCQkJICAgIGFjcGlfYnV0dG9uX25vdGlmeSk7Ci0JCWJyZWFrOwotCX0KLQorCWFjcGlfYnV0dG9uX3JlbW92ZV9ub3RpZnlfaGFuZGxlcnMoYnV0dG9uKTsKIAlhY3BpX2J1dHRvbl9yZW1vdmVfZnMoZGV2aWNlKTsKLQorCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJ1dHRvbi0+aW5wdXQpOwogCWtmcmVlKGJ1dHRvbik7CiAKIAlyZXR1cm4gMDsKQEAgLTQzMyw4ICs0OTAsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2J1dHRvbl9pbml0KHZvaWQpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KKwlpbnQgcmVzdWx0OwogCiAJYWNwaV9idXR0b25fZGlyID0gcHJvY19ta2RpcihBQ1BJX0JVVFRPTl9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFhY3BpX2J1dHRvbl9kaXIpCkBAIC00NTEsNyArNTA3LDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGFjcGlfYnV0dG9uX2V4aXQodm9pZCkKIHsKLQogCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2J1dHRvbl9kcml2ZXIpOwogCiAJaWYgKGFjcGlfcG93ZXJfZGlyKQpAQCAtNDYxLDggKzUxNiw2IEBACiAJaWYgKGFjcGlfbGlkX2RpcikKIAkJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9CVVRUT05fU1VCQ0xBU1NfTElELCBhY3BpX2J1dHRvbl9kaXIpOwogCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfQlVUVE9OX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKLQotCXJldHVybjsKIH0KIAogbW9kdWxlX2luaXQoYWNwaV9idXR0b25faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvY29udGFpbmVyLmMgYi9kcml2ZXJzL2FjcGkvY29udGFpbmVyLmMKaW5kZXggODcxYWE1Mi4uMGExODYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2NvbnRhaW5lci5jCisrKyBiL2RyaXZlcnMvYWNwaS9jb250YWluZXIuYwpAQCAtOTYsMTEgKzk2LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNvbnRhaW5lciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2NvbnRhaW5lciksIEdGUF9LRVJORUwpOworCWNvbnRhaW5lciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2NvbnRhaW5lciksIEdGUF9LRVJORUwpOwogCWlmICghY29udGFpbmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChjb250YWluZXIsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9jb250YWluZXIpKTsKIAljb250YWluZXItPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfQ09OVEFJTkVSX0RFVklDRV9OQU1FKTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9DT05UQUlORVJfQ0xBU1MpOwpAQCAtMTE3LDcgKzExNiw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfY29udGFpbmVyICpwYyA9IE5VTEw7CiAKLQlwYyA9IChzdHJ1Y3QgYWNwaV9jb250YWluZXIgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJcGMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJa2ZyZWUocGMpOwogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCBiZjViNzllLi45MDk5MGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KQEAgLTM5LDEzICs0MCwxNSBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIGRvY2tfbm90aWZpZXJfbGlzdDsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRvY2tfZGV2aWNlOworc3RhdGljIGNoYXIgZG9ja19kZXZpY2VfbmFtZVtdID0gImRvY2siOwogCiBzdHJ1Y3QgZG9ja19zdGF0aW9uIHsKIAlhY3BpX2hhbmRsZSBoYW5kbGU7CiAJdW5zaWduZWQgbG9uZyBsYXN0X2RvY2tfdGltZTsKIAl1MzIgZmxhZ3M7CiAJc3BpbmxvY2tfdCBkZF9sb2NrOwotCXNwaW5sb2NrX3QgaHBfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggaHBfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlcGVuZGVudF9kZXZpY2VzOwogCXN0cnVjdCBsaXN0X2hlYWQgaG90cGx1Z19kZXZpY2VzOwogfTsKQEAgLTExNSw5ICsxMTgsOSBAQAogZG9ja19hZGRfaG90cGx1Z19kZXZpY2Uoc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMsCiAJCQlzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlICpkZCkKIHsKLQlzcGluX2xvY2soJmRzLT5ocF9sb2NrKTsKKwltdXRleF9sb2NrKCZkcy0+aHBfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZGQtPmhvdHBsdWdfbGlzdCwgJmRzLT5ob3RwbHVnX2RldmljZXMpOwotCXNwaW5fdW5sb2NrKCZkcy0+aHBfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkcy0+aHBfbG9jayk7CiB9CiAKIC8qKgpAQCAtMTMxLDkgKzEzNCw5IEBACiBkb2NrX2RlbF9ob3RwbHVnX2RldmljZShzdHJ1Y3QgZG9ja19zdGF0aW9uICpkcywKIAkJCXN0cnVjdCBkb2NrX2RlcGVuZGVudF9kZXZpY2UgKmRkKQogewotCXNwaW5fbG9jaygmZHMtPmhwX2xvY2spOworCW11dGV4X2xvY2soJmRzLT5ocF9sb2NrKTsKIAlsaXN0X2RlbCgmZGQtPmhvdHBsdWdfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmRzLT5ocF9sb2NrKTsKKwltdXRleF91bmxvY2soJmRzLT5ocF9sb2NrKTsKIH0KIAogLyoqCkBAIC0yOTYsNyArMjk5LDcgQEAKIHsKIAlzdHJ1Y3QgZG9ja19kZXBlbmRlbnRfZGV2aWNlICpkZDsKIAotCXNwaW5fbG9jaygmZHMtPmhwX2xvY2spOworCW11dGV4X2xvY2soJmRzLT5ocF9sb2NrKTsKIAogCS8qCiAJICogRmlyc3QgY2FsbCBkcml2ZXIgc3BlY2lmaWMgaG90cGx1ZyBmdW5jdGlvbnMKQEAgLTMxOCwxNSArMzIxLDE3IEBACiAJCWVsc2UKIAkJCWRvY2tfY3JlYXRlX2FjcGlfZGV2aWNlKGRkLT5oYW5kbGUpOwogCX0KLQlzcGluX3VubG9jaygmZHMtPmhwX2xvY2spOworCW11dGV4X3VubG9jaygmZHMtPmhwX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBkb2NrX2V2ZW50KHN0cnVjdCBkb2NrX3N0YXRpb24gKmRzLCB1MzIgZXZlbnQsIGludCBudW0pCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRvY2tfZGV2aWNlLmRldjsKIAkvKgotCSAqIHdlIGRvbid0IGRvIGV2ZW50cyB1bnRpbCBzb21lb25lIHRlbGxzIG1lIHRoYXQKLQkgKiB0aGV5IHdvdWxkIGxpa2UgdG8gaGF2ZSB0aGVtLgorCSAqIEluZGljYXRlIHRoYXQgdGhlIHN0YXR1cyBvZiB0aGUgZG9jayBzdGF0aW9uIGhhcworCSAqIGNoYW5nZWQuCiAJICovCisJa29iamVjdF91ZXZlbnQoJmRldi0+a29iaiwgS09CSl9DSEFOR0UpOwogfQogCiAvKioKQEAgLTQ0MSw2ICs0NDYsOSBAQAogICovCiBpbnQgcmVnaXN0ZXJfZG9ja19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQogeworCWlmICghZG9ja19zdGF0aW9uKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmRvY2tfbm90aWZpZXJfbGlzdCwgbmIpOwogfQogCkBAIC00NTIsNiArNDYwLDkgQEAKICAqLwogdm9pZCB1bnJlZ2lzdGVyX2RvY2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKIHsKKwlpZiAoIWRvY2tfc3RhdGlvbikKKwkJcmV0dXJuOworCiAJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmRvY2tfbm90aWZpZXJfbGlzdCwgbmIpOwogfQogCkBAIC01MTIsNiArNTIzLDM3IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UpOwogCiAvKioKKyAqIGhhbmRsZV9lamVjdF9yZXF1ZXN0IC0gaGFuZGxlIGFuIHVuZG9jayByZXF1ZXN0IGNoZWNraW5nIGZvciBlcnJvciBjb25kaXRpb25zCisgKgorICogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBkb2NrIGRldmljZSBpcyBzdGlsbCBwcmVzZW50LCB0aGVuIHVuZG9jayBhbmQKKyAqIGhvdHJlbW92ZSBhbGwgdGhlIGRldmljZXMgdGhhdCBtYXkgbmVlZCByZW1vdmluZy4KKyAqLworc3RhdGljIGludCBoYW5kbGVfZWplY3RfcmVxdWVzdChzdHJ1Y3QgZG9ja19zdGF0aW9uICpkcywgdTMyIGV2ZW50KQoreworCWlmICghZG9ja19wcmVzZW50KGRzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoZG9ja19pbl9wcm9ncmVzcyhkcykpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKgorCSAqIGhlcmUgd2UgbmVlZCB0byBnZW5lcmF0ZSB0aGUgdW5kb2NrCisJICogZXZlbnQgcHJpb3IgdG8gYWN0dWFsbHkgZG9pbmcgdGhlIHVuZG9jaworCSAqIHNvIHRoYXQgdGhlIGRldmljZSBzdHJ1Y3Qgc3RpbGwgZXhpc3RzLgorCSAqLworCWRvY2tfZXZlbnQoZHMsIGV2ZW50LCBVTkRPQ0tfRVZFTlQpOworCWhvdHBsdWdfZG9ja19kZXZpY2VzKGRzLCBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUKTsKKwl1bmRvY2soZHMpOworCWVqZWN0X2RvY2soZHMpOworCWlmIChkb2NrX3ByZXNlbnQoZHMpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVuYWJsZSB0byB1bmRvY2shXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBkb2NrX25vdGlmeSAtIGFjdCB1cG9uIGFuIGFjcGkgZG9jayBub3RpZmljYXRpb24KICAqIEBoYW5kbGU6IHRoZSBkb2NrIHN0YXRpb24gaGFuZGxlCiAgKiBAZXZlbnQ6IHRoZSBhY3BpIGV2ZW50CkBAIC01MTksMTMgKzU2MSwxMSBAQAogICoKICAqIElmIHdlIGFyZSBub3RpZmllZCB0byBkb2NrLCB0aGVuIGNoZWNrIHRvIHNlZSBpZiB0aGUgZG9jayBpcwogICogcHJlc2VudCBhbmQgdGhlbiBkb2NrLiAgTm90aWZ5IGFsbCBkcml2ZXJzIG9mIHRoZSBkb2NrIGV2ZW50LAotICogYW5kIHRoZW4gaG90cGx1ZyBhbmQgZGV2aWNlcyB0aGF0IG1heSBuZWVkIGhvdHBsdWdnaW5nLiAgRm9yIHVuZG9jawotICogY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBkb2NrIGRldmljZSBpcyBzdGlsbCBwcmVzZW50LCB0aGVuIHVuZG9jawotICogYW5kIGhvdHJlbW92ZSBhbGwgdGhlIGRldmljZXMgdGhhdCBtYXkgbmVlZCByZW1vdmluZy4KKyAqIGFuZCB0aGVuIGhvdHBsdWcgYW5kIGRldmljZXMgdGhhdCBtYXkgbmVlZCBob3RwbHVnZ2luZy4KICAqLwogc3RhdGljIHZvaWQgZG9ja19ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMgPSAoc3RydWN0IGRvY2tfc3RhdGlvbiAqKWRhdGE7CisJc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMgPSBkYXRhOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQUNQSV9OT1RJRllfQlVTX0NIRUNLOgpAQCAtNTUzLDE5ICs1OTMsNyBAQAogCSAqIHRvIHRoZSBkcml2ZXIgd2hvIHdpc2ggdG8gaG90cGx1Zy4KICAgICAgICAgICovCiAJY2FzZSBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUOgotCQlpZiAoIWRvY2tfaW5fcHJvZ3Jlc3MoZHMpICYmIGRvY2tfcHJlc2VudChkcykpIHsKLQkJCS8qCi0JCQkgKiBoZXJlIHdlIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHVuZG9jawotCQkJICogZXZlbnQgcHJpb3IgdG8gYWN0dWFsbHkgZG9pbmcgdGhlIHVuZG9jawotCQkJICogc28gdGhhdCB0aGUgZGV2aWNlIHN0cnVjdCBzdGlsbCBleGlzdHMuCi0JCQkgKi8KLQkJCWRvY2tfZXZlbnQoZHMsIGV2ZW50LCBVTkRPQ0tfRVZFTlQpOwotCQkJaG90cGx1Z19kb2NrX2RldmljZXMoZHMsIEFDUElfTk9USUZZX0VKRUNUX1JFUVVFU1QpOwotCQkJdW5kb2NrKGRzKTsKLQkJCWVqZWN0X2RvY2soZHMpOwotCQkJaWYgKGRvY2tfcHJlc2VudChkcykpCi0JCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiVW5hYmxlIHRvIHVuZG9jayFcbiIpOwotCQl9CisJCWhhbmRsZV9lamVjdF9yZXF1ZXN0KGRzLCBldmVudCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIlVua25vd24gZG9jayBldmVudCAlZFxuIiwgZXZlbnQpOwpAQCAtNTg4LDcgKzYxNiw3IEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfaGFuZGxlIHRtcDsKLQlzdHJ1Y3QgZG9ja19zdGF0aW9uICpkcyA9IChzdHJ1Y3QgZG9ja19zdGF0aW9uICopY29udGV4dDsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICpkcyA9IGNvbnRleHQ7CiAJc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQ7CiAKIAlzdGF0dXMgPSBhY3BpX2J1c19nZXRfZWpkKGhhbmRsZSwgJnRtcCk7CkBAIC02MDQsNiArNjMyLDMzIEBACiAJcmV0dXJuIEFFX09LOwogfQogCisvKgorICogc2hvd19kb2NrZWQgLSByZWFkIG1ldGhvZCBmb3IgImRvY2tlZCIgZmlsZSBpbiBzeXNmcworICovCitzdGF0aWMgc3NpemVfdCBzaG93X2RvY2tlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBkb2NrX3ByZXNlbnQoZG9ja19zdGF0aW9uKSk7CisKK30KK0RFVklDRV9BVFRSKGRvY2tlZCwgU19JUlVHTywgc2hvd19kb2NrZWQsIE5VTEwpOworCisvKgorICogd3JpdGVfdW5kb2NrIC0gd3JpdGUgbWV0aG9kIGZvciAidW5kb2NrIiBmaWxlIGluIHN5c2ZzCisgKi8KK3N0YXRpYyBzc2l6ZV90IHdyaXRlX3VuZG9jayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHJldDsKKworCWlmICghY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaGFuZGxlX2VqZWN0X3JlcXVlc3QoZG9ja19zdGF0aW9uLCBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUKTsKKwlyZXR1cm4gcmV0ID8gcmV0OiBjb3VudDsKK30KK0RFVklDRV9BVFRSKHVuZG9jaywgU19JV1VTUiwgTlVMTCwgd3JpdGVfdW5kb2NrKTsKKwogLyoqCiAgKiBkb2NrX2FkZCAtIGFkZCBhIG5ldyBkb2NrIHN0YXRpb24KICAqIEBoYW5kbGU6IHRoZSBkb2NrIHN0YXRpb24gaGFuZGxlCkBAIC02MjYsOSArNjgxLDMzIEBACiAJSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+ZGVwZW5kZW50X2RldmljZXMpOwogCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPmhvdHBsdWdfZGV2aWNlcyk7CiAJc3Bpbl9sb2NrX2luaXQoJmRvY2tfc3RhdGlvbi0+ZGRfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmRvY2tfc3RhdGlvbi0+aHBfbG9jayk7CisJbXV0ZXhfaW5pdCgmZG9ja19zdGF0aW9uLT5ocF9sb2NrKTsKIAlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZkb2NrX25vdGlmaWVyX2xpc3QpOwogCisJLyogaW5pdGlhbGl6ZSBwbGF0Zm9ybSBkZXZpY2Ugc3R1ZmYgKi8KKwlkb2NrX2RldmljZS5uYW1lID0gZG9ja19kZXZpY2VfbmFtZTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRvY2tfZGV2aWNlKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkVycm9yICVkIHJlZ2lzdGVyaW5nIGRvY2sgZGV2aWNlXG4iLCByZXQpOworCQlrZnJlZShkb2NrX3N0YXRpb24pOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRvY2tfZGV2aWNlLmRldiwgJmRldl9hdHRyX2RvY2tlZCk7CisJaWYgKHJldCkgeworCQlwcmludGsoIkVycm9yICVkIGFkZGluZyBzeXNmcyBmaWxlXG4iLCByZXQpOworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZG9ja19kZXZpY2UpOworCQlrZnJlZShkb2NrX3N0YXRpb24pOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRvY2tfZGV2aWNlLmRldiwgJmRldl9hdHRyX3VuZG9jayk7CisJaWYgKHJldCkgeworCQlwcmludGsoIkVycm9yICVkIGFkZGluZyBzeXNmcyBmaWxlXG4iLCByZXQpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRvY2tfZGV2aWNlLmRldiwgJmRldl9hdHRyX2RvY2tlZCk7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZkb2NrX2RldmljZSk7CisJCWtmcmVlKGRvY2tfc3RhdGlvbik7CisJCXJldHVybiByZXQ7CisJfQorCiAJLyogRmluZCBkZXBlbmRlbnQgZGV2aWNlcyAqLwogCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKIAkJCSAgICBBQ1BJX1VJTlQzMl9NQVgsIGZpbmRfZG9ja19kZXZpY2VzLCBkb2NrX3N0YXRpb24sCkBAIC02MzgsNyArNzE3LDggQEAKIAlkZCA9IGFsbG9jX2RvY2tfZGVwZW5kZW50X2RldmljZShoYW5kbGUpOwogCWlmICghZGQpIHsKIAkJa2ZyZWUoZG9ja19zdGF0aW9uKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZG9ja19hZGRfZXJyX3VucmVnaXN0ZXI7CiAJfQogCWFkZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBkZCk7CiAKQEAgLTY1OCw4ICs3MzgsMTIgQEAKIAlyZXR1cm4gMDsKIAogZG9ja19hZGRfZXJyOgotCWtmcmVlKGRvY2tfc3RhdGlvbik7CiAJa2ZyZWUoZGQpOworZG9ja19hZGRfZXJyX3VucmVnaXN0ZXI6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkb2NrX2RldmljZS5kZXYsICZkZXZfYXR0cl9kb2NrZWQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZG9ja19kZXZpY2UuZGV2LCAmZGV2X2F0dHJfdW5kb2NrKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZG9ja19kZXZpY2UpOworCWtmcmVlKGRvY2tfc3RhdGlvbik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjg2LDYgKzc3MCwxMSBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZW1vdmluZyBub3RpZnkgaGFuZGxlclxuIik7CiAKKwkvKiBjbGVhbnVwIHN5c2ZzICovCisJZGV2aWNlX3JlbW92ZV9maWxlKCZkb2NrX2RldmljZS5kZXYsICZkZXZfYXR0cl9kb2NrZWQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZG9ja19kZXZpY2UuZGV2LCAmZGV2X2F0dHJfdW5kb2NrKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZG9ja19kZXZpY2UpOworCiAJLyogZnJlZSBkb2NrIHN0YXRpb24gbWVtb3J5ICovCiAJa2ZyZWUoZG9ja19zdGF0aW9uKTsKIAlyZXR1cm4gMDsKQEAgLTcwMyw3ICs3OTIsNyBAQAogc3RhdGljIGFjcGlfc3RhdHVzCiBmaW5kX2RvY2soYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbHZsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcnYpCiB7Ci0JaW50ICpjb3VudCA9IChpbnQgKiljb250ZXh0OworCWludCAqY291bnQgPSBjb250ZXh0OwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCiAJaWYgKGlzX2RvY2soaGFuZGxlKSkgewpAQCAtNzI2LDcgKzgxNSw3IEBACiAJCQkgICAgQUNQSV9VSU5UMzJfTUFYLCBmaW5kX2RvY2ssICZudW0sIE5VTEwpOwogCiAJaWYgKCFudW0pCi0JCXJldHVybiAtRU5PREVWOworCQlwcmludGsoS0VSTl9JTkZPICJObyBkb2NrIGRldmljZXMgZm91bmQuXG4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCBlNmQ0YjA4Li5jYmRmMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtNDUsMzUgKzQ1LDM0IEBACiAjZGVmaW5lIEFDUElfRUNfRFJJVkVSX05BTUUJCSJBQ1BJIEVtYmVkZGVkIENvbnRyb2xsZXIgRHJpdmVyIgogI2RlZmluZSBBQ1BJX0VDX0RFVklDRV9OQU1FCQkiRW1iZWRkZWQgQ29udHJvbGxlciIKICNkZWZpbmUgQUNQSV9FQ19GSUxFX0lORk8JCSJpbmZvIgotCisjdW5kZWYgUFJFRklYCisjZGVmaW5lIFBSRUZJWAkJCQkiQUNQSTogRUM6ICIKIC8qIEVDIHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSBBQ1BJX0VDX0ZMQUdfT0JGCTB4MDEJLyogT3V0cHV0IGJ1ZmZlciBmdWxsICovCiAjZGVmaW5lIEFDUElfRUNfRkxBR19JQkYJMHgwMgkvKiBJbnB1dCBidWZmZXIgZnVsbCAqLwogI2RlZmluZSBBQ1BJX0VDX0ZMQUdfQlVSU1QJMHgxMAkvKiBidXJzdCBtb2RlICovCiAjZGVmaW5lIEFDUElfRUNfRkxBR19TQ0kJMHgyMAkvKiBFQy1TQ0kgb2NjdXJyZWQgKi8KLQogLyogRUMgY29tbWFuZHMgKi8KLSNkZWZpbmUgQUNQSV9FQ19DT01NQU5EX1JFQUQJMHg4MAotI2RlZmluZSBBQ1BJX0VDX0NPTU1BTkRfV1JJVEUJMHg4MQotI2RlZmluZSBBQ1BJX0VDX0JVUlNUX0VOQUJMRQkweDgyCi0jZGVmaW5lIEFDUElfRUNfQlVSU1RfRElTQUJMRQkweDgzCi0jZGVmaW5lIEFDUElfRUNfQ09NTUFORF9RVUVSWQkweDg0Ci0KK2VudW0gZWNfY29tbWFuZCB7CisJQUNQSV9FQ19DT01NQU5EX1JFQUQgPSAweDgwLAorCUFDUElfRUNfQ09NTUFORF9XUklURSA9IDB4ODEsCisJQUNQSV9FQ19CVVJTVF9FTkFCTEUgPSAweDgyLAorCUFDUElfRUNfQlVSU1RfRElTQUJMRSA9IDB4ODMsCisJQUNQSV9FQ19DT01NQU5EX1FVRVJZID0gMHg4NCwKK307CiAvKiBFQyBldmVudHMgKi8KLWVudW0geworZW51bSBlY19ldmVudCB7CiAJQUNQSV9FQ19FVkVOVF9PQkZfMSA9IDEsCS8qIE91dHB1dCBidWZmZXIgZnVsbCAqLwotCUFDUElfRUNfRVZFTlRfSUJGXzAsCQkvKiBJbnB1dCBidWZmZXIgZW1wdHkgKi8KKwlBQ1BJX0VDX0VWRU5UX0lCRl8wLAkvKiBJbnB1dCBidWZmZXIgZW1wdHkgKi8KIH07CiAKLSNkZWZpbmUgQUNQSV9FQ19ERUxBWQkJNTAJLyogV2FpdCA1MG1zIG1heC4gZHVyaW5nIEVDIG9wcyAqLworI2RlZmluZSBBQ1BJX0VDX0RFTEFZCQk1MDAJLyogV2FpdCA1MDBtcyBtYXguIGR1cmluZyBFQyBvcHMgKi8KICNkZWZpbmUgQUNQSV9FQ19VREVMQVlfR0xLCTEwMDAJLyogV2FpdCAxbXMgbWF4LiB0byBnZXQgZ2xvYmFsIGxvY2sgKi8KLSNkZWZpbmUgQUNQSV9FQ19VREVMQVkgICAgICAgICAxMDAJLyogUG9sbCBAIDEwMHVzIGluY3JlbWVudHMgKi8KLSNkZWZpbmUgQUNQSV9FQ19VREVMQVlfQ09VTlQgICAxMDAwCS8qIFdhaXQgMTBtcyBtYXguIGR1cmluZyBFQyBvcHMgKi8KIAotZW51bSB7Ci0JRUNfSU5UUiA9IDEsCS8qIE91dHB1dCBidWZmZXIgZnVsbCAqLwotCUVDX1BPTEwsCS8qIElucHV0IGJ1ZmZlciBlbXB0eSAqLwotfTsKK3N0YXRpYyBlbnVtIGVjX21vZGUgeworCUVDX0lOVFIgPSAxLAkJLyogT3V0cHV0IGJ1ZmZlciBmdWxsICovCisJRUNfUE9MTCwJCS8qIElucHV0IGJ1ZmZlciBlbXB0eSAqLworfSBhY3BpX2VjX21vZGUgPSBFQ19JTlRSOwogCiBzdGF0aWMgaW50IGFjcGlfZWNfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7CiBzdGF0aWMgaW50IGFjcGlfZWNfc3RhcnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwpAQCAtOTMsMjIgKzkyLDIxIEBACiB9OwogCiAvKiBJZiB3ZSBmaW5kIGFuIEVDIHZpYSB0aGUgRUNEVCwgd2UgbmVlZCB0byBrZWVwIGEgcHRyIHRvIGl0cyBjb250ZXh0ICovCi1zdHJ1Y3QgYWNwaV9lYyB7CitzdGF0aWMgc3RydWN0IGFjcGlfZWMgewogCWFjcGlfaGFuZGxlIGhhbmRsZTsKIAl1bnNpZ25lZCBsb25nIHVpZDsKLQl1bnNpZ25lZCBsb25nIGdwZV9iaXQ7CisJdW5zaWduZWQgbG9uZyBncGU7CiAJdW5zaWduZWQgbG9uZyBjb21tYW5kX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBnbG9iYWxfbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKLQl1bnNpZ25lZCBpbnQgZXhwZWN0X2V2ZW50OworCXN0cnVjdCBtdXRleCBsb2NrOworCWF0b21pY190IHF1ZXJ5X3BlbmRpbmc7CiAJYXRvbWljX3QgbGVhdmluZ19idXJzdDsJLyogMCA6IE5vLCAxIDogWWVzLCAyOiBhYm9ydCAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiB9ICplY19lY2R0OwogCiAvKiBFeHRlcm5hbCBpbnRlcmZhY2VzIHVzZSBmaXJzdCBFQyBvbmx5LCBzbyByZW1lbWJlciAqLwogc3RhdGljIHN0cnVjdCBhY3BpX2RldmljZSAqZmlyc3RfZWM7Ci1zdGF0aWMgaW50IGFjcGlfZWNfbW9kZSA9IEVDX0lOVFI7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uIE1hbmFnZW1lbnQKQEAgLTEzNCw1NCArMTMyLDQxIEBACiAJb3V0YihkYXRhLCBlYy0+ZGF0YV9hZGRyKTsKIH0KIAotc3RhdGljIGludCBhY3BpX2VjX2NoZWNrX3N0YXR1cyh1OCBzdGF0dXMsIHU4IGV2ZW50KQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9lY19jaGVja19zdGF0dXMoc3RydWN0IGFjcGlfZWMgKmVjLCBlbnVtIGVjX2V2ZW50IGV2ZW50KQogewotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIEFDUElfRUNfRVZFTlRfT0JGXzE6CisJdTggc3RhdHVzID0gYWNwaV9lY19yZWFkX3N0YXR1cyhlYyk7CisKKwlpZiAoZXZlbnQgPT0gQUNQSV9FQ19FVkVOVF9PQkZfMSkgewogCQlpZiAoc3RhdHVzICYgQUNQSV9FQ19GTEFHX09CRikKIAkJCXJldHVybiAxOwotCQlicmVhazsKLQljYXNlIEFDUElfRUNfRVZFTlRfSUJGXzA6CisJfSBlbHNlIGlmIChldmVudCA9PSBBQ1BJX0VDX0VWRU5UX0lCRl8wKSB7CiAJCWlmICghKHN0YXR1cyAmIEFDUElfRUNfRkxBR19JQkYpKQogCQkJcmV0dXJuIDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFjcGlfZWNfd2FpdChzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4IGV2ZW50KQorc3RhdGljIGludCBhY3BpX2VjX3dhaXQoc3RydWN0IGFjcGlfZWMgKmVjLCBlbnVtIGVjX2V2ZW50IGV2ZW50KQogewotCWludCBpID0gKGFjcGlfZWNfbW9kZSA9PSBFQ19QT0xMKSA/IEFDUElfRUNfVURFTEFZX0NPVU5UIDogMDsKLQlsb25nIHRpbWVfbGVmdDsKLQotCWVjLT5leHBlY3RfZXZlbnQgPSBldmVudDsKLQlpZiAoYWNwaV9lY19jaGVja19zdGF0dXMoYWNwaV9lY19yZWFkX3N0YXR1cyhlYyksIGV2ZW50KSkgewotCQllYy0+ZXhwZWN0X2V2ZW50ID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZG8gewotCQlpZiAoYWNwaV9lY19tb2RlID09IEVDX1BPTEwpIHsKLQkJCXVkZWxheShBQ1BJX0VDX1VERUxBWSk7Ci0JCX0gZWxzZSB7Ci0JCQl0aW1lX2xlZnQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZWMtPndhaXQsCi0JCQkJICAgICFlYy0+ZXhwZWN0X2V2ZW50LAotCQkJCSAgICBtc2Vjc190b19qaWZmaWVzKEFDUElfRUNfREVMQVkpKTsKLQkJCWlmICh0aW1lX2xlZnQgPiAwKSB7Ci0JCQkJZWMtPmV4cGVjdF9ldmVudCA9IDA7CisJaWYgKGFjcGlfZWNfbW9kZSA9PSBFQ19QT0xMKSB7CisJCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBQ1BJX0VDX0RFTEFZKTsKKwkJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSkgeworCQkJaWYgKGFjcGlfZWNfY2hlY2tfc3RhdHVzKGVjLCBldmVudCkpCiAJCQkJcmV0dXJuIDA7Ci0JCQl9CiAJCX0KLQkJaWYgKGFjcGlfZWNfY2hlY2tfc3RhdHVzKGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpLCBldmVudCkpIHsKLQkJCWVjLT5leHBlY3RfZXZlbnQgPSAwOworCX0gZWxzZSB7CisJCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQoZWMtPndhaXQsCisJCQkJICAgICAgIGFjcGlfZWNfY2hlY2tfc3RhdHVzKGVjLCBldmVudCksCisJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoQUNQSV9FQ19ERUxBWSkpIHx8CisJCSAgICBhY3BpX2VjX2NoZWNrX3N0YXR1cyhlYywgZXZlbnQpKSB7CiAJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImFjcGlfZWNfd2FpdCB0aW1lb3V0LCIKKwkJCSAgICAgICAiIHN0YXR1cyA9ICVkLCBleHBlY3RfZXZlbnQgPSAlZFxuIiwKKwkJCSAgICAgICBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSwgZXZlbnQpOwogCQl9Ci0JfSB3aGlsZSAoLS1pID4gMCk7Ci0KLQllYy0+ZXhwZWN0X2V2ZW50ID0gMDsKKwl9CiAKIAlyZXR1cm4gLUVUSU1FOwogfQpAQCAtMTk2LDcgKzE4MSw2IEBACiAJdTggdG1wID0gMDsKIAl1OCBzdGF0dXMgPSAwOwogCi0KIAlzdGF0dXMgPSBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKTsKIAlpZiAoc3RhdHVzICE9IC1FSU5WQUwgJiYgIShzdGF0dXMgJiBBQ1BJX0VDX0ZMQUdfQlVSU1QpKSB7CiAJCXN0YXR1cyA9IGFjcGlfZWNfd2FpdChlYywgQUNQSV9FQ19FVkVOVF9JQkZfMCk7CkBAIC0yMTIsNyArMTk2LDcgQEAKIAogCWF0b21pY19zZXQoJmVjLT5sZWF2aW5nX2J1cnN0LCAwKTsKIAlyZXR1cm4gMDsKLSAgZW5kOgorICAgICAgZW5kOgogCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJFQyB3YWl0LCBidXJzdCBtb2RlIikpOwogCXJldHVybiAtMTsKIH0KQEAgLTIyMSw1OCArMjA1LDY4IEBACiB7CiAJdTggc3RhdHVzID0gMDsKIAotCiAJc3RhdHVzID0gYWNwaV9lY19yZWFkX3N0YXR1cyhlYyk7Ci0JaWYgKHN0YXR1cyAhPSAtRUlOVkFMICYmIChzdGF0dXMgJiBBQ1BJX0VDX0ZMQUdfQlVSU1QpKXsKKwlpZiAoc3RhdHVzICE9IC1FSU5WQUwgJiYgKHN0YXR1cyAmIEFDUElfRUNfRkxBR19CVVJTVCkpIHsKIAkJc3RhdHVzID0gYWNwaV9lY193YWl0KGVjLCBBQ1BJX0VDX0VWRU5UX0lCRl8wKTsKLQkJaWYoc3RhdHVzKQorCQlpZiAoc3RhdHVzKQogCQkJZ290byBlbmQ7CiAJCWFjcGlfZWNfd3JpdGVfY21kKGVjLCBBQ1BJX0VDX0JVUlNUX0RJU0FCTEUpOwogCQlhY3BpX2VjX3dhaXQoZWMsIEFDUElfRUNfRVZFTlRfSUJGXzApOwogCX0KIAlhdG9taWNfc2V0KCZlYy0+bGVhdmluZ19idXJzdCwgMSk7CiAJcmV0dXJuIDA7Ci0gIGVuZDoKKyAgICAgIGVuZDoKIAlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRUMgbGVhdmUgYnVyc3QgbW9kZSIpKTsKIAlyZXR1cm4gLTE7CiB9Ci0jZW5kaWYgLyogQUNQSV9GVVRVUkVfVVNBR0UgKi8KKyNlbmRpZgkJCQkvKiBBQ1BJX0ZVVFVSRV9VU0FHRSAqLwogCiBzdGF0aWMgaW50IGFjcGlfZWNfdHJhbnNhY3Rpb25fdW5sb2NrZWQoc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBjb21tYW5kLAotCQkJCQljb25zdCB1OCAqd2RhdGEsIHVuc2lnbmVkIHdkYXRhX2xlbiwKLQkJCQkJdTggKnJkYXRhLCB1bnNpZ25lZCByZGF0YV9sZW4pCisJCQkJCWNvbnN0IHU4ICogd2RhdGEsIHVuc2lnbmVkIHdkYXRhX2xlbiwKKwkJCQkJdTggKiByZGF0YSwgdW5zaWduZWQgcmRhdGFfbGVuKQogewotCWludCByZXN1bHQ7CisJaW50IHJlc3VsdCA9IDA7CiAKIAlhY3BpX2VjX3dyaXRlX2NtZChlYywgY29tbWFuZCk7CiAKLQlmb3IgKDsgd2RhdGFfbGVuID4gMDsgd2RhdGFfbGVuIC0tKSB7CisJZm9yICg7IHdkYXRhX2xlbiA+IDA7IC0td2RhdGFfbGVuKSB7CiAJCXJlc3VsdCA9IGFjcGlfZWNfd2FpdChlYywgQUNQSV9FQ19FVkVOVF9JQkZfMCk7Ci0JCWlmIChyZXN1bHQpCi0JCQlyZXR1cm4gcmVzdWx0OworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCisJCQkgICAgICAgIndyaXRlX2NtZCB0aW1lb3V0LCBjb21tYW5kID0gJWRcbiIsIGNvbW1hbmQpOworCQkJZ290byBlbmQ7CisJCX0KIAkJYWNwaV9lY193cml0ZV9kYXRhKGVjLCAqKHdkYXRhKyspKTsKIAl9CiAKLQlpZiAoY29tbWFuZCA9PSBBQ1BJX0VDX0NPTU1BTkRfV1JJVEUpIHsKKwlpZiAoIXJkYXRhX2xlbikgewogCQlyZXN1bHQgPSBhY3BpX2VjX3dhaXQoZWMsIEFDUElfRUNfRVZFTlRfSUJGXzApOwotCQlpZiAocmVzdWx0KQotCQkJcmV0dXJuIHJlc3VsdDsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAorCQkJICAgICAgICJmaW5pc2gtd3JpdGUgdGltZW91dCwgY29tbWFuZCA9ICVkXG4iLCBjb21tYW5kKTsKKwkJCWdvdG8gZW5kOworCQl9CisJfSBlbHNlIGlmIChjb21tYW5kID09IEFDUElfRUNfQ09NTUFORF9RVUVSWSkgeworCQlhdG9taWNfc2V0KCZlYy0+cXVlcnlfcGVuZGluZywgMCk7CiAJfQogCi0JZm9yICg7IHJkYXRhX2xlbiA+IDA7IHJkYXRhX2xlbiAtLSkgeworCWZvciAoOyByZGF0YV9sZW4gPiAwOyAtLXJkYXRhX2xlbikgewogCQlyZXN1bHQgPSBhY3BpX2VjX3dhaXQoZWMsIEFDUElfRUNfRVZFTlRfT0JGXzEpOwotCQlpZiAocmVzdWx0KQotCQkJcmV0dXJuIHJlc3VsdDsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAicmVhZCB0aW1lb3V0LCBjb21tYW5kID0gJWRcbiIsCisJCQkgICAgICAgY29tbWFuZCk7CisJCQlnb3RvIGVuZDsKKwkJfQogCiAJCSoocmRhdGErKykgPSBhY3BpX2VjX3JlYWRfZGF0YShlYyk7CiAJfQotCi0JcmV0dXJuIDA7CisgICAgICBlbmQ6CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX2VjX3RyYW5zYWN0aW9uKHN0cnVjdCBhY3BpX2VjICplYywgdTggY29tbWFuZCwKLQkJCQljb25zdCB1OCAqd2RhdGEsIHVuc2lnbmVkIHdkYXRhX2xlbiwKLQkJCQl1OCAqcmRhdGEsIHVuc2lnbmVkIHJkYXRhX2xlbikKKwkJCSAgICAgICBjb25zdCB1OCAqIHdkYXRhLCB1bnNpZ25lZCB3ZGF0YV9sZW4sCisJCQkgICAgICAgdTggKiByZGF0YSwgdW5zaWduZWQgcmRhdGFfbGVuKQogewogCWludCBzdGF0dXM7CiAJdTMyIGdsazsKQEAgLTI4MCwzNiArMjc0LDQwIEBACiAJaWYgKCFlYyB8fCAod2RhdGFfbGVuICYmICF3ZGF0YSkgfHwgKHJkYXRhX2xlbiAmJiAhcmRhdGEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgICAgICBpZiAocmRhdGEpCi0gICAgICAgICAgICAgICAgbWVtc2V0KHJkYXRhLCAwLCByZGF0YV9sZW4pOworCWlmIChyZGF0YSkKKwkJbWVtc2V0KHJkYXRhLCAwLCByZGF0YV9sZW4pOwogCisJbXV0ZXhfbG9jaygmZWMtPmxvY2spOwogCWlmIChlYy0+Z2xvYmFsX2xvY2spIHsKIAkJc3RhdHVzID0gYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKEFDUElfRUNfVURFTEFZX0dMSywgJmdsayk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCXJldHVybiAtRU5PREVWOwogCX0KLQlkb3duKCZlYy0+c2VtKTsKKworCS8qIE1ha2Ugc3VyZSBHUEUgaXMgZW5hYmxlZCBiZWZvcmUgZG9pbmcgdHJhbnNhY3Rpb24gKi8KKwlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9OT1RfSVNSKTsKIAogCXN0YXR1cyA9IGFjcGlfZWNfd2FpdChlYywgQUNQSV9FQ19FVkVOVF9JQkZfMCk7CiAJaWYgKHN0YXR1cykgewotCQlwcmludGsoS0VSTl9ERUJVRyBQUkVGSVggInJlYWQgRUMsIElCIG5vdCBlbXB0eVxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHIFBSRUZJWAorCQkgICAgICAgImlucHV0IGJ1ZmZlciBpcyBub3QgZW1wdHksIGFib3J0aW5nIHRyYW5zYWN0aW9uXG4iKTsKIAkJZ290byBlbmQ7CiAJfQogCi0gICAgICAgIHN0YXR1cyA9IGFjcGlfZWNfdHJhbnNhY3Rpb25fdW5sb2NrZWQoZWMsIGNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2RhdGEsIHdkYXRhX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZGF0YSwgcmRhdGFfbGVuKTsKKwlzdGF0dXMgPSBhY3BpX2VjX3RyYW5zYWN0aW9uX3VubG9ja2VkKGVjLCBjb21tYW5kLAorCQkJCQkgICAgICB3ZGF0YSwgd2RhdGFfbGVuLAorCQkJCQkgICAgICByZGF0YSwgcmRhdGFfbGVuKTsKIAotZW5kOgotCXVwKCZlYy0+c2VtKTsKKyAgICAgIGVuZDoKIAogCWlmIChlYy0+Z2xvYmFsX2xvY2spCiAJCWFjcGlfcmVsZWFzZV9nbG9iYWxfbG9jayhnbGspOworCW11dGV4X3VubG9jaygmZWMtPmxvY2spOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBhY3BpX2VjX3JlYWQoc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBhZGRyZXNzLCB1OCAqZGF0YSkKK3N0YXRpYyBpbnQgYWNwaV9lY19yZWFkKHN0cnVjdCBhY3BpX2VjICplYywgdTggYWRkcmVzcywgdTggKiBkYXRhKQogewogCWludCByZXN1bHQ7CiAJdTggZDsKQEAgLTMyMiwxNSArMzIwLDE1IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9lY193cml0ZShzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4IGFkZHJlc3MsIHU4IGRhdGEpCiB7Ci0gICAgICAgIHU4IHdkYXRhWzJdID0geyBhZGRyZXNzLCBkYXRhIH07Ci0gICAgICAgIHJldHVybiBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCBBQ1BJX0VDX0NPTU1BTkRfV1JJVEUsCisJdTggd2RhdGFbMl0gPSB7IGFkZHJlc3MsIGRhdGEgfTsKKwlyZXR1cm4gYWNwaV9lY190cmFuc2FjdGlvbihlYywgQUNQSV9FQ19DT01NQU5EX1dSSVRFLAogCQkJCSAgIHdkYXRhLCAyLCBOVUxMLCAwKTsKIH0KIAogLyoKICAqIEV4dGVybmFsbHkgY2FsbGFibGUgRUMgYWNjZXNzIGZ1bmN0aW9ucy4gRm9yIG5vdywgYXNzdW1lIDEgRUMgb25seQogICovCi1pbnQgZWNfcmVhZCh1OCBhZGRyLCB1OCAqdmFsKQoraW50IGVjX3JlYWQodTggYWRkciwgdTggKiB2YWwpCiB7CiAJc3RydWN0IGFjcGlfZWMgKmVjOwogCWludCBlcnI7CkBAIC0zNjksOSArMzY3LDkgQEAKIAogRVhQT1JUX1NZTUJPTChlY193cml0ZSk7CiAKLWV4dGVybiBpbnQgZWNfdHJhbnNhY3Rpb24odTggY29tbWFuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdTggKndkYXRhLCB1bnNpZ25lZCB3ZGF0YV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICpyZGF0YSwgdW5zaWduZWQgcmRhdGFfbGVuKQoraW50IGVjX3RyYW5zYWN0aW9uKHU4IGNvbW1hbmQsCisJCQkgIGNvbnN0IHU4ICogd2RhdGEsIHVuc2lnbmVkIHdkYXRhX2xlbiwKKwkJCSAgdTggKiByZGF0YSwgdW5zaWduZWQgcmRhdGFfbGVuKQogewogCXN0cnVjdCBhY3BpX2VjICplYzsKIApAQCAtMzg2LDY1ICszODQsNDkgQEAKIAogRVhQT1JUX1NZTUJPTChlY190cmFuc2FjdGlvbik7CiAKLXN0YXRpYyBpbnQgYWNwaV9lY19xdWVyeShzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4ICpkYXRhKQorc3RhdGljIGludCBhY3BpX2VjX3F1ZXJ5KHN0cnVjdCBhY3BpX2VjICplYywgdTggKiBkYXRhKQogewogCWludCByZXN1bHQ7Ci0gICAgICAgIHU4IGQ7CisJdTggZDsKIAotICAgICAgICBpZiAoIWVjIHx8ICFkYXRhKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghZWMgfHwgIWRhdGEpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIFF1ZXJ5IHRoZSBFQyB0byBmaW5kIG91dCB3aGljaCBfUXh4IG1ldGhvZCB3ZSBuZWVkIHRvIGV2YWx1YXRlLgotICAgICAgICAgKiBOb3RlIHRoYXQgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBxdWVyeSBjYXVzZXMgdGhlIEFDUElfRUNfU0NJCi0gICAgICAgICAqIGJpdCB0byBiZSBjbGVhcmVkIChhbmQgdGh1cyBjbGVhcmluZyB0aGUgaW50ZXJydXB0IHNvdXJjZSkuCi0gICAgICAgICAqLworCS8qCisJICogUXVlcnkgdGhlIEVDIHRvIGZpbmQgb3V0IHdoaWNoIF9ReHggbWV0aG9kIHdlIG5lZWQgdG8gZXZhbHVhdGUuCisJICogTm90ZSB0aGF0IHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgcXVlcnkgY2F1c2VzIHRoZSBBQ1BJX0VDX1NDSQorCSAqIGJpdCB0byBiZSBjbGVhcmVkIChhbmQgdGh1cyBjbGVhcmluZyB0aGUgaW50ZXJydXB0IHNvdXJjZSkuCisJICovCiAKLSAgICAgICAgcmVzdWx0ID0gYWNwaV9lY190cmFuc2FjdGlvbihlYywgQUNQSV9FQ19DT01NQU5EX1FVRVJZLCBOVUxMLCAwLCAmZCwgMSk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwlyZXN1bHQgPSBhY3BpX2VjX3RyYW5zYWN0aW9uKGVjLCBBQ1BJX0VDX0NPTU1BTkRfUVVFUlksIE5VTEwsIDAsICZkLCAxKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OwogCi0gICAgICAgIGlmICghZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RBVEE7CisJaWYgKCFkKQorCQlyZXR1cm4gLUVOT0RBVEE7CiAKLSAgICAgICAgKmRhdGEgPSBkOwotICAgICAgICByZXR1cm4gMDsKKwkqZGF0YSA9IGQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50IE1hbmFnZW1lbnQKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0cnVjdCBhY3BpX2VjX3F1ZXJ5X2RhdGEgewotCWFjcGlfaGFuZGxlIGhhbmRsZTsKLQl1OCBkYXRhOwotfTsKLQogc3RhdGljIHZvaWQgYWNwaV9lY19ncGVfcXVlcnkodm9pZCAqZWNfY3h0KQogewogCXN0cnVjdCBhY3BpX2VjICplYyA9IChzdHJ1Y3QgYWNwaV9lYyAqKWVjX2N4dDsKIAl1OCB2YWx1ZSA9IDA7Ci0Jc3RhdGljIGNoYXIgb2JqZWN0X25hbWVbOF07CisJY2hhciBvYmplY3RfbmFtZVs4XTsKIAotCWlmICghZWMpCi0JCWdvdG8gZW5kOwotCi0JdmFsdWUgPSBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKTsKLQotCWlmICghKHZhbHVlICYgQUNQSV9FQ19GTEFHX1NDSSkpCi0JCWdvdG8gZW5kOwotCi0JaWYgKGFjcGlfZWNfcXVlcnkoZWMsICZ2YWx1ZSkpCi0JCWdvdG8gZW5kOworCWlmICghZWMgfHwgYWNwaV9lY19xdWVyeShlYywgJnZhbHVlKSkKKwkJcmV0dXJuOwogCiAJc25wcmludGYob2JqZWN0X25hbWUsIDgsICJfUSUyLjJYIiwgdmFsdWUpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRXZhbHVhdGluZyAlcyIsIG9iamVjdF9uYW1lKSk7CiAKIAlhY3BpX2V2YWx1YXRlX29iamVjdChlYy0+aGFuZGxlLCBvYmplY3RfbmFtZSwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgIGVuZDoKLQlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZV9iaXQsIEFDUElfTk9UX0lTUik7CiB9CiAKIHN0YXRpYyB1MzIgYWNwaV9lY19ncGVfaGFuZGxlcih2b2lkICpkYXRhKQpAQCAtNDUzLDIyICs0MzUsMTggQEAKIAl1OCB2YWx1ZTsKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSAoc3RydWN0IGFjcGlfZWMgKilkYXRhOwogCi0JYWNwaV9jbGVhcl9ncGUoTlVMTCwgZWMtPmdwZV9iaXQsIEFDUElfSVNSKTsKLQl2YWx1ZSA9IGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpOwotCiAJaWYgKGFjcGlfZWNfbW9kZSA9PSBFQ19JTlRSKSB7Ci0JCWlmIChhY3BpX2VjX2NoZWNrX3N0YXR1cyh2YWx1ZSwgZWMtPmV4cGVjdF9ldmVudCkpIHsKLQkJCWVjLT5leHBlY3RfZXZlbnQgPSAwOwotCQkJd2FrZV91cCgmZWMtPndhaXQpOwotCQl9CisJCXdha2VfdXAoJmVjLT53YWl0KTsKIAl9CiAKLQlpZiAodmFsdWUgJiBBQ1BJX0VDX0ZMQUdfU0NJKSB7Ci0JCXN0YXR1cyA9IGFjcGlfb3NfZXhlY3V0ZShPU0xfRUNfQlVSU1RfSEFORExFUiwgYWNwaV9lY19ncGVfcXVlcnksIGVjKTsKLQkJcmV0dXJuIHN0YXR1cyA9PSBBRV9PSyA/Ci0JCSAgICBBQ1BJX0lOVEVSUlVQVF9IQU5ETEVEIDogQUNQSV9JTlRFUlJVUFRfTk9UX0hBTkRMRUQ7CisJdmFsdWUgPSBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKTsKKwlpZiAoKHZhbHVlICYgQUNQSV9FQ19GTEFHX1NDSSkgJiYgIWF0b21pY19yZWFkKCZlYy0+cXVlcnlfcGVuZGluZykpIHsKKwkJYXRvbWljX3NldCgmZWMtPnF1ZXJ5X3BlbmRpbmcsIDEpOworCQlzdGF0dXMgPQorCQkgICAgYWNwaV9vc19leGVjdXRlKE9TTF9FQ19CVVJTVF9IQU5ETEVSLCBhY3BpX2VjX2dwZV9xdWVyeSwKKwkJCQkgICAgZWMpOwogCX0KLQlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZV9iaXQsIEFDUElfSVNSKTsKKwogCXJldHVybiBzdGF0dXMgPT0gQUVfT0sgPwogCSAgICBBQ1BJX0lOVEVSUlVQVF9IQU5ETEVEIDogQUNQSV9JTlRFUlJVUFRfTk9UX0hBTkRMRUQ7CiB9CkBAIC01MDQsNyArNDgyLDYgQEAKIAlhY3BpX2ludGVnZXIgZl92ID0gMDsKIAlpbnQgaSA9IDA7CiAKLQogCWlmICgoYWRkcmVzcyA+IDB4RkYpIHx8ICF2YWx1ZSB8fCAhaGFuZGxlcl9jb250ZXh0KQogCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKIApAQCAtNTE4LDcgKzQ5NSw3IEBACiAJc3dpdGNoIChmdW5jdGlvbikgewogCWNhc2UgQUNQSV9SRUFEOgogCQl0ZW1wID0gMDsKLQkJcmVzdWx0ID0gYWNwaV9lY19yZWFkKGVjLCAodTgpIGFkZHJlc3MsICh1OCAqKSAmdGVtcCk7CisJCXJlc3VsdCA9IGFjcGlfZWNfcmVhZChlYywgKHU4KSBhZGRyZXNzLCAodTggKikgJiB0ZW1wKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX1dSSVRFOgogCQlyZXN1bHQgPSBhY3BpX2VjX3dyaXRlKGVjLCAodTgpIGFkZHJlc3MsICh1OCkgdGVtcCk7CkBAIC01NzEsMTggKzU0OCwxNSBAQAogewogCXN0cnVjdCBhY3BpX2VjICplYyA9IChzdHJ1Y3QgYWNwaV9lYyAqKXNlcS0+cHJpdmF0ZTsKIAotCiAJaWYgKCFlYykKIAkJZ290byBlbmQ7CiAKLQlzZXFfcHJpbnRmKHNlcSwgImdwZSBiaXQ6ICAgICAgICAgICAgICAgICAweCUwMnhcbiIsCi0JCSAgICh1MzIpIGVjLT5ncGVfYml0KTsKKwlzZXFfcHJpbnRmKHNlcSwgImdwZTogICAgICAgICAgICAgICAgIDB4JTAyeFxuIiwgKHUzMikgZWMtPmdwZSk7CiAJc2VxX3ByaW50ZihzZXEsICJwb3J0czogICAgICAgICAgICAgICAgICAgMHglMDJ4LCAweCUwMnhcbiIsCi0JCSAgICh1MzIpIGVjLT5jb21tYW5kX2FkZHIsCi0JCSAgICh1MzIpIGVjLT5kYXRhX2FkZHIpOworCQkgICAodTMyKSBlYy0+Y29tbWFuZF9hZGRyLCAodTMyKSBlYy0+ZGF0YV9hZGRyKTsKIAlzZXFfcHJpbnRmKHNlcSwgInVzZSBnbG9iYWwgbG9jazogICAgICAgICAlc1xuIiwKIAkJICAgZWMtPmdsb2JhbF9sb2NrID8gInllcyIgOiAibm8iKTsKLQlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZV9iaXQsIEFDUElfTk9UX0lTUik7CisJYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfTk9UX0lTUik7CiAKICAgICAgIGVuZDoKIAlyZXR1cm4gMDsKQEAgLTYwNSw3ICs1NzksNiBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnkgPSBOVUxMOwogCi0KIAlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKSB7CiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gcHJvY19ta2RpcihhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwKIAkJCQkJCSAgICAgYWNwaV9lY19kaXIpOwpAQCAtNjQ4LDE4ICs2MjEsMTcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBOVUxMOwogCi0KIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2VjKSwgR0ZQX0tFUk5FTCk7CisJZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9lYyksIEdGUF9LRVJORUwpOwogCWlmICghZWMpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChlYywgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX2VjKSk7CiAKIAllYy0+aGFuZGxlID0gZGV2aWNlLT5oYW5kbGU7CiAJZWMtPnVpZCA9IC0xOwotCWluaXRfTVVURVgoJmVjLT5zZW0pOworCW11dGV4X2luaXQoJmVjLT5sb2NrKTsKKwlhdG9taWNfc2V0KCZlYy0+cXVlcnlfcGVuZGluZywgMCk7CiAJaWYgKGFjcGlfZWNfbW9kZSA9PSBFQ19JTlRSKSB7CiAJCWF0b21pY19zZXQoJmVjLT5sZWF2aW5nX2J1cnN0LCAxKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmZWMtPndhaXQpOwpAQCAtNjY5LDggKzY0MSw3IEBACiAJYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gZWM7CiAKIAkvKiBVc2UgdGhlIGdsb2JhbCBsb2NrIGZvciBhbGwgRUMgdHJhbnNhY3Rpb25zPyAqLwotCWFjcGlfZXZhbHVhdGVfaW50ZWdlcihlYy0+aGFuZGxlLCAiX0dMSyIsIE5VTEwsCi0JCQkgICAgICAmZWMtPmdsb2JhbF9sb2NrKTsKKwlhY3BpX2V2YWx1YXRlX2ludGVnZXIoZWMtPmhhbmRsZSwgIl9HTEsiLCBOVUxMLCAmZWMtPmdsb2JhbF9sb2NrKTsKIAogCS8qIFhYWCB3ZSBkb24ndCB0ZXN0IHVpZHMsIGJlY2F1c2Ugb24gc29tZSBib3hlcyBlY2R0IHVpZCA9IDAsIHNlZToKIAkgICBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExMSAqLwpAQCAtNjc5LDcgKzY1MCw3IEBACiAJCQkJCQkgIEFDUElfQURSX1NQQUNFX0VDLAogCQkJCQkJICAmYWNwaV9lY19zcGFjZV9oYW5kbGVyKTsKIAotCQlhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcihOVUxMLCBlY19lY2R0LT5ncGVfYml0LAorCQlhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcihOVUxMLCBlY19lY2R0LT5ncGUsCiAJCQkJCSZhY3BpX2VjX2dwZV9oYW5kbGVyKTsKIAogCQlrZnJlZShlY19lY2R0KTsKQEAgLTY4NywxMSArNjU4LDEwIEBACiAKIAkvKiBHZXQgR1BFIGJpdCBhc3NpZ25tZW50IChFQyBldmVudHMpLiAqLwogCS8qIFRPRE86IEFkZCBzdXBwb3J0IGZvciBfR1BFIHJldHVybmluZyBhIHBhY2thZ2UgKi8KLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZWMtPmhhbmRsZSwgIl9HUEUiLCBOVUxMLAotCQkJCSAgJmVjLT5ncGVfYml0KTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZWMtPmhhbmRsZSwgIl9HUEUiLCBOVUxMLCAmZWMtPmdwZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJPYnRhaW5pbmcgR1BFIGJpdCBhc3NpZ25tZW50IikpOworCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAorCQkJCSJPYnRhaW5pbmcgR1BFIGJpdCBhc3NpZ25tZW50IikpOwogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVuZDsKIAl9CkBAIC03MDEsMTMgKzY3MSwxMyBAQAogCQlnb3RvIGVuZDsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIiVzIFslc10gKGdwZSAlZCkgaW50ZXJydXB0IG1vZGUuIiwKLQkgICAgICAgYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwKLQkgICAgICAgKHUzMikgZWMtPmdwZV9iaXQpKTsKKwkJCSAgYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwKKwkJCSAgKHUzMikgZWMtPmdwZSkpOwogCiAJaWYgKCFmaXJzdF9lYykKIAkJZmlyc3RfZWMgPSBkZXZpY2U7CiAKLSAgZW5kOgorICAgICAgZW5kOgogCWlmIChyZXN1bHQpCiAJCWtmcmVlKGVjKTsKIApAQCAtNzE4LDcgKzY4OCw2IEBACiB7CiAJc3RydWN0IGFjcGlfZWMgKmVjID0gTlVMTDsKIAotCiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03NjEsNyArNzMwLDYgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBOVUxMOwogCi0KIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTc4MiwyNyArNzUwLDI2IEBACiAJfQogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiZ3BlPTB4JTAybHgsIHBvcnRzPTB4JTJseCwweCUybHgiLAotCQkJICBlYy0+Z3BlX2JpdCwgZWMtPmNvbW1hbmRfYWRkciwgZWMtPmRhdGFfYWRkcikpOworCQkJICBlYy0+Z3BlLCBlYy0+Y29tbWFuZF9hZGRyLCBlYy0+ZGF0YV9hZGRyKSk7CiAKIAkvKgogCSAqIEluc3RhbGwgR1BFIGhhbmRsZXIKIAkgKi8KLQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIoTlVMTCwgZWMtPmdwZV9iaXQsCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCiAJCQkJCSAgQUNQSV9HUEVfRURHRV9UUklHR0VSRUQsCiAJCQkJCSAgJmFjcGlfZWNfZ3BlX2hhbmRsZXIsIGVjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWFjcGlfc2V0X2dwZV90eXBlKE5VTEwsIGVjLT5ncGVfYml0LCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOwotCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlX2JpdCwgQUNQSV9OT1RfSVNSKTsKKwlhY3BpX3NldF9ncGVfdHlwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOworCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX05PVF9JU1IpOwogCiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihlYy0+aGFuZGxlLAogCQkJCQkJICAgIEFDUElfQURSX1NQQUNFX0VDLAogCQkJCQkJICAgICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIsCiAJCQkJCQkgICAgJmFjcGlfZWNfc3BhY2Vfc2V0dXAsIGVjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJYWNwaV9yZW1vdmVfZ3BlX2hhbmRsZXIoTlVMTCwgZWMtPmdwZV9iaXQsCi0JCQkJCSZhY3BpX2VjX2dwZV9oYW5kbGVyKTsKKwkJYWNwaV9yZW1vdmVfZ3BlX2hhbmRsZXIoTlVMTCwgZWMtPmdwZSwgJmFjcGlfZWNfZ3BlX2hhbmRsZXIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTgxNCw3ICs3ODEsNiBAQAogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXN0cnVjdCBhY3BpX2VjICplYyA9IE5VTEw7CiAKLQogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODI2LDkgKzc5Miw3IEBACiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN0YXR1cyA9Ci0JICAgIGFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGVfYml0LAotCQkJCSAgICAmYWNwaV9lY19ncGVfaGFuZGxlcik7CisJc3RhdHVzID0gYWNwaV9yZW1vdmVfZ3BlX2hhbmRsZXIoTlVMTCwgZWMtPmdwZSwgJmFjcGlfZWNfZ3BlX2hhbmRsZXIpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTg0MSw3ICs4MDUsNyBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCWluaXRfTVVURVgoJmVjX2VjZHQtPnNlbSk7CisJbXV0ZXhfaW5pdCgmZWNfZWNkdC0+bG9jayk7CiAJaWYgKGFjcGlfZWNfbW9kZSA9PSBFQ19JTlRSKSB7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVjX2VjZHQtPndhaXQpOwogCX0KQEAgLTg1MywxNiArODE3LDE1IEBACiAJZWNfZWNkdC0+dWlkID0gLTE7CiAJYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIl9VSUQiLCBOVUxMLCAmZWNfZWNkdC0+dWlkKTsKIAotCXN0YXR1cyA9Ci0JICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfR1BFIiwgTlVMTCwKLQkJCQkgICZlY19lY2R0LT5ncGVfYml0KTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX0dQRSIsIE5VTEwsICZlY19lY2R0LT5ncGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIHN0YXR1czsKIAllY19lY2R0LT5nbG9iYWxfbG9jayA9IFRSVUU7CiAJZWNfZWNkdC0+aGFuZGxlID0gaGFuZGxlOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiR1BFPTB4JTAybHgsIHBvcnRzPTB4JTJseCwgMHglMmx4IiwKLQkgICAgICAgZWNfZWNkdC0+Z3BlX2JpdCwgZWNfZWNkdC0+Y29tbWFuZF9hZGRyLCBlY19lY2R0LT5kYXRhX2FkZHIpKTsKKwkJCSAgZWNfZWNkdC0+Z3BlLCBlY19lY2R0LT5jb21tYW5kX2FkZHIsCisJCQkgIGVjX2VjZHQtPmRhdGFfYWRkcikpOwogCiAJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOwogfQpAQCAtODg0LDEyICs4NDcsMTEgQEAKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIlRyeSB0byBtYWtlIGFuIGZha2UgRUNEVCIpKTsKIAotCWVjX2VjZHQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9lYyksIEdGUF9LRVJORUwpOworCWVjX2VjZHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9lYyksIEdGUF9LRVJORUwpOwogCWlmICghZWNfZWNkdCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KLQltZW1zZXQoZWNfZWNkdCwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX2VjKSk7CiAKIAlzdGF0dXMgPSBhY3BpX2dldF9kZXZpY2VzKEFDUElfRUNfSElELAogCQkJCSAgYWNwaV9mYWtlX2VjZHRfY2FsbGJhY2ssIE5VTEwsIE5VTEwpOwpAQCAtOTAxLDcgKzg2Myw3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCXJldHVybiAwOwotICBlcnJvcjoKKyAgICAgIGVycm9yOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTkyMSwzMCArODgzLDI4IEBACiAJLyoKIAkgKiBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBlYyBjb250ZXh0IHRvIHVzZSB1bnRpbCB0aGUgbmFtZXNwYWNlIGlzIHNjYW5uZWQKIAkgKi8KLQllY19lY2R0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZWMpLCBHRlBfS0VSTkVMKTsKKwllY19lY2R0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVjX2VjZHQpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChlY19lY2R0LCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfZWMpKTsKIAotCWluaXRfTVVURVgoJmVjX2VjZHQtPnNlbSk7CisJbXV0ZXhfaW5pdCgmZWNfZWNkdC0+bG9jayk7CiAJaWYgKGFjcGlfZWNfbW9kZSA9PSBFQ19JTlRSKSB7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVjX2VjZHQtPndhaXQpOwogCX0KIAllY19lY2R0LT5jb21tYW5kX2FkZHIgPSBlY2R0X3B0ci0+ZWNfY29udHJvbC5hZGRyZXNzOwogCWVjX2VjZHQtPmRhdGFfYWRkciA9IGVjZHRfcHRyLT5lY19kYXRhLmFkZHJlc3M7Ci0JZWNfZWNkdC0+Z3BlX2JpdCA9IGVjZHRfcHRyLT5ncGVfYml0OworCWVjX2VjZHQtPmdwZSA9IGVjZHRfcHRyLT5ncGVfYml0OwogCS8qIHVzZSB0aGUgR0wganVzdCB0byBiZSBzYWZlICovCiAJZWNfZWNkdC0+Z2xvYmFsX2xvY2sgPSBUUlVFOwogCWVjX2VjZHQtPnVpZCA9IGVjZHRfcHRyLT51aWQ7CiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX2dldF9oYW5kbGUoTlVMTCwgZWNkdF9wdHItPmVjX2lkLCAmZWNfZWNkdC0+aGFuZGxlKTsKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgZWNkdF9wdHItPmVjX2lkLCAmZWNfZWNkdC0+aGFuZGxlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAlyZXR1cm4gMDsKLSAgZXJyb3I6CisgICAgICBlcnJvcjoKIAlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiQ291bGQgbm90IHVzZSBFQ0RUIikpOwogCWtmcmVlKGVjX2VjZHQpOwogCWVjX2VjZHQgPSBOVUxMOwpAQCAtOTcwLDE0ICs5MzAsMTQgQEAKIAkvKgogCSAqIEluc3RhbGwgR1BFIGhhbmRsZXIKIAkgKi8KLQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIoTlVMTCwgZWNfZWNkdC0+Z3BlX2JpdCwKKwlzdGF0dXMgPSBhY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIoTlVMTCwgZWNfZWNkdC0+Z3BlLAogCQkJCQkgIEFDUElfR1BFX0VER0VfVFJJR0dFUkVELAogCQkJCQkgICZhY3BpX2VjX2dwZV9oYW5kbGVyLCBlY19lY2R0KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byBlcnJvcjsKIAl9Ci0JYWNwaV9zZXRfZ3BlX3R5cGUoTlVMTCwgZWNfZWNkdC0+Z3BlX2JpdCwgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKLQlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWNfZWNkdC0+Z3BlX2JpdCwgQUNQSV9OT1RfSVNSKTsKKwlhY3BpX3NldF9ncGVfdHlwZShOVUxMLCBlY19lY2R0LT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CisJYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjX2VjZHQtPmdwZSwgQUNQSV9OT1RfSVNSKTsKIAogCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoQUNQSV9ST09UX09CSkVDVCwKIAkJCQkJCSAgICBBQ1BJX0FEUl9TUEFDRV9FQywKQEAgLTk4NSw3ICs5NDUsNyBAQAogCQkJCQkJICAgICZhY3BpX2VjX3NwYWNlX3NldHVwLAogCQkJCQkJICAgIGVjX2VjZHQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcihOVUxMLCBlY19lY2R0LT5ncGVfYml0LAorCQlhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcihOVUxMLCBlY19lY2R0LT5ncGUsCiAJCQkJCSZhY3BpX2VjX2dwZV9oYW5kbGVyKTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0xMDA0LDcgKzk2NCw2IEBACiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQogCWlmIChhY3BpX2Rpc2FibGVkKQogCQlyZXR1cm4gMDsKIApAQCAtMTA1Nyw3ICsxMDE2LDggQEAKIAkJYWNwaV9lY19tb2RlID0gRUNfUE9MTDsKIAl9CiAJYWNwaV9lY19kcml2ZXIub3BzLmFkZCA9IGFjcGlfZWNfYWRkOwotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkVDICVzIG1vZGUuXG4iLCBpbnRyID8gImludGVycnVwdCIgOiAicG9sbGluZyIpKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICIlcyBtb2RlLlxuIiwKKwkJCSAgaW50ciA/ICJpbnRlcnJ1cHQiIDogInBvbGxpbmciKTsKIAogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldm1pc2MuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZtaXNjLmMKaW5kZXggZWUyYTEwYi4uYmY2M2VkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2V2ZW50cy9ldm1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2bWlzYy5jCkBAIC0zMzEsNyArMzMxLDYgQEAKIHN0YXRpYyB1MzIgYWNwaV9ldl9nbG9iYWxfbG9ja19oYW5kbGVyKHZvaWQgKmNvbnRleHQpCiB7CiAJdTggYWNxdWlyZWQgPSBGQUxTRTsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAkvKgogCSAqIEF0dGVtcHQgdG8gZ2V0IHRoZSBsb2NrCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtdXRleC5jIGIvZHJpdmVycy9hY3BpL2V4ZWN1dGVyL2V4bXV0ZXguYwppbmRleCAzYTM5YzJlLi5iZjkwZjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXhlY3V0ZXIvZXhtdXRleC5jCisrKyBiL2RyaXZlcnMvYWNwaS9leGVjdXRlci9leG11dGV4LmMKQEAgLTI2NiwxMCArMjY2LDEwIEBACiAJICAgICB3YWxrX3N0YXRlLT50aHJlYWQtPnRocmVhZF9pZCkKIAkgICAgJiYgKG9ial9kZXNjLT5tdXRleC5vc19tdXRleCAhPSBBQ1BJX0dMT0JBTF9MT0NLKSkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJUaHJlYWQgJVggY2Fubm90IHJlbGVhc2UgTXV0ZXggWyU0LjRzXSBhY3F1aXJlZCBieSB0aHJlYWQgJVgiLAotCQkJICAgICh1MzIpIHdhbGtfc3RhdGUtPnRocmVhZC0+dGhyZWFkX2lkLAorCQkJICAgICJUaHJlYWQgJWxYIGNhbm5vdCByZWxlYXNlIE11dGV4IFslNC40c10gYWNxdWlyZWQgYnkgdGhyZWFkICVsWCIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpd2Fsa19zdGF0ZS0+dGhyZWFkLT50aHJlYWRfaWQsCiAJCQkgICAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG9ial9kZXNjLT5tdXRleC5ub2RlKSwKLQkJCSAgICAodTMyKSBvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkLT50aHJlYWRfaWQpKTsKKwkJCSAgICAodW5zaWduZWQgbG9uZylvYmpfZGVzYy0+bXV0ZXgub3duZXJfdGhyZWFkLT50aHJlYWRfaWQpKTsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9OT1RfT1dORVIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Zhbi5jIGIvZHJpdmVycy9hY3BpL2Zhbi5jCmluZGV4IDA0NWM4OTQuLmYzMDVhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9mYW4uYworKysgYi9kcml2ZXJzL2FjcGkvZmFuLmMKQEAgLTk5LDggKzk5LDggQEAKIAkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYWNwaV9mYW4gKmZhbiA9IChzdHJ1Y3QgYWNwaV9mYW4gKiltLT5wcml2YXRlOworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWNwaV9mYW4gKmZhbiA9IG0tPnByaXZhdGU7CiAJY2hhciBzdGF0ZV9zdHJpbmdbMTJdID0geyAnXDAnIH07CiAKIApAQCAtMTg2LDEwICsxODYsOSBAQAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZhbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2ZhbiksIEdGUF9LRVJORUwpOworCWZhbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2ZhbiksIEdGUF9LRVJORUwpOwogCWlmICghZmFuKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoZmFuLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfZmFuKSk7CiAKIAlmYW4tPmRldmljZSA9IGRldmljZTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCAiRmFuIik7CkBAIC0yMjksNyArMjI4LDcgQEAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZhbiA9IChzdHJ1Y3QgYWNwaV9mYW4gKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJZmFuID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCiAJYWNwaV9mYW5fcmVtb3ZlX2ZzKGRldmljZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9nbHVlLmMgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCmluZGV4IGEyZjQ2ZDUuLjhhMDMyNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9nbHVlLmMKKysrIGIvZHJpdmVycy9hY3BpL2dsdWUuYwpAQCAtOTYsNyArOTYsNyBAQAogc3RhdGljIGFjcGlfc3RhdHVzCiBkb19yb290X2JyaWRnZV9idXNucl9jYWxsYmFjayhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyAqYnVzbnIgPSAodW5zaWduZWQgbG9uZyAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyAqYnVzbnIgPSBkYXRhOwogCXN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCBhZGRyZXNzOwogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTMTYgJiYKQEAgLTE4OSw4ICsxODksMTIgQEAKIAlidXMgPSB0bXA7CiAKIAlpZiAoc2VnID09IGZpbmQtPnNlZyAmJiBidXMgPT0gZmluZC0+YnVzKQorCXsKIAkJZmluZC0+aGFuZGxlID0gaGFuZGxlOwotCXN0YXR1cyA9IEFFX09LOworCQlzdGF0dXMgPSBBRV9DVFJMX1RFUk1JTkFURTsKKwl9CisJZWxzZQorCQlzdGF0dXMgPSBBRV9PSzsKICAgICAgIGV4aXQ6CiAJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOwogCXJldHVybiBzdGF0dXM7CkBAIC0yMTcsNyArMjIxLDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmluZm87CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKLQlzdHJ1Y3QgYWNwaV9maW5kX2NoaWxkICpmaW5kID0gKHN0cnVjdCBhY3BpX2ZpbmRfY2hpbGQgKiljb250ZXh0OworCXN0cnVjdCBhY3BpX2ZpbmRfY2hpbGQgKmZpbmQgPSBjb250ZXh0OwogCiAJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmYnVmZmVyKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9ob3RrZXkuYyBiL2RyaXZlcnMvYWNwaS9ob3RrZXkuYwppbmRleCAxYmEyZGI2Li44ZWRmYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaG90a2V5LmMKKysrIGIvZHJpdmVycy9hY3BpL2hvdGtleS5jCkBAIC0yNjUsOCArMjY1LDcgQEAKIAogc3RhdGljIGludCBob3RrZXlfcG9sbGluZ19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBhY3BpX3BvbGxpbmdfaG90a2V5ICpwb2xsX2hvdGtleSA9Ci0JICAgIChzdHJ1Y3QgYWNwaV9wb2xsaW5nX2hvdGtleSAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV9wb2xsaW5nX2hvdGtleSAqcG9sbF9ob3RrZXkgPSBzZXEtPnByaXZhdGU7CiAJY2hhciAqYnVmOwogCiAKQEAgLTU3Nyw3ICs1NzYsNyBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZ290byBkb19mYWlsX3plcm87CiAJa2V5LT5wb2xsX2hvdGtleS5wb2xsX3Jlc3VsdCA9Ci0JICAgICh1bmlvbiBhY3BpX29iamVjdCAqKWttYWxsb2Moc2l6ZW9mKHVuaW9uIGFjcGlfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJICAgIGttYWxsb2Moc2l6ZW9mKHVuaW9uIGFjcGlfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrZXktPnBvbGxfaG90a2V5LnBvbGxfcmVzdWx0KQogCQlnb3RvIGRvX2ZhaWxfemVybzsKIAlyZXR1cm4gQUVfT0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaTJjX2VjLmMgYi9kcml2ZXJzL2FjcGkvaTJjX2VjLmMKaW5kZXggNjM0MmU2MS4uODMzOGJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2kyY19lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9pMmNfZWMuYwpAQCAtMzA5LDE4ICszMDksMTYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZWNfaGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9lY19oYyksIEdGUF9LRVJORUwpOworCWVjX2hjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZWNfaGMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVjX2hjKSB7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoZWNfaGMsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9lY19oYykpOwogCi0Jc21idXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9lY19zbWJ1cyksIEdGUF9LRVJORUwpOworCXNtYnVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZWNfc21idXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNtYnVzKSB7CiAJCWtmcmVlKGVjX2hjKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChzbWJ1cywgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX2VjX3NtYnVzKSk7CiAKIAllY19oYy0+aGFuZGxlID0gZGV2aWNlLT5oYW5kbGU7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9FQ19IQ19ERVZJQ0VfTkFNRSk7CkBAIC0zOTMsNyArMzkxLDcgQEAKIAogc3RydWN0IGFjcGlfZWNfaGMgKmFjcGlfZ2V0X2VjX2hjKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCXJldHVybiAoKHN0cnVjdCBhY3BpX2VjX2hjICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UtPnBhcmVudCkpOworCXJldHVybiBhY3BpX2RyaXZlcl9kYXRhKGRldmljZS0+cGFyZW50KTsKIH0KIAogRVhQT1JUX1NZTUJPTChhY3BpX2dldF9lY19oYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaWJtX2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9pYm1fYWNwaS5jCmluZGV4IDAwM2E5ODcuLmM2MTQ0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9pYm1fYWNwaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9pYm1fYWNwaS5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQm9yaXNsYXYgRGVpYW5vdiA8Ym9yaXNsYXZAdXNlcnMuc2YubmV0PgorICogIENvcHlyaWdodCAoQykgMjAwNiBIZW5yaXF1ZSBkZSBNb3JhZXMgSG9sc2NodWggPGhtaEBobWguZW5nLmJyPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOSwxMCArMjAsMTQgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2RlZmluZSBJQk1fVkVSU0lPTiAiMC4xMmEiCisjZGVmaW5lIElCTV9WRVJTSU9OICIwLjEzIgogCiAvKgogICogIENoYW5nZWxvZzoKKyAqCisgKiAgMjAwNi0xMS0yMgkwLjEzCW5ldyBtYWludGFpbmVyCisgKiAgCQkJY2hhbmdlbG9nIG5vdyBsaXZlcyBpbiBnaXQgY29tbWl0IGhpc3RvcnksIGFuZCB3aWxsCisgKiAgCQkJbm90IGJlIHVwZGF0ZWQgZnVydGhlciBpbi1maWxlLgogICogIAogICogIDIwMDUtMDgtMTcgIDAuMTIJZml4IGNvbXBpbGF0aW9uIG9uIDIuNi4xMy1yYyBrZXJuZWxzCiAgKiAgMjAwNS0wMy0xNwkwLjExCXN1cHBvcnQgZm9yIDYwMGUsIDc3MHgKQEAgLTc3LDkgKzgyLDE2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKwogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY25hbWVzcC5oPgogCkBAIC04OCw3ICsxMDAsNyBAQAogI2RlZmluZSBJQk1fRklMRSAiaWJtX2FjcGkiCiAjZGVmaW5lIElCTV9VUkwgImh0dHA6Ly9pYm0tYWNwaS5zZi5uZXQvIgogCi1NT0RVTEVfQVVUSE9SKCJCb3Jpc2xhdiBEZWlhbm92Iik7CitNT0RVTEVfQVVUSE9SKCJCb3Jpc2xhdiBEZWlhbm92LCBIZW5yaXF1ZSBkZSBNb3JhZXMgSG9sc2NodWgiKTsKIE1PRFVMRV9ERVNDUklQVElPTihJQk1fREVTQyk7CiBNT0RVTEVfVkVSU0lPTihJQk1fVkVSU0lPTik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0xMTYsMjggKzEyOCw2IEBACiAJc3RhdGljIGNoYXIgICAgICAgICpvYmplY3QjI19wYXRoOwkJCVwKIAlzdGF0aWMgY2hhciAgICAgICAgKm9iamVjdCMjX3BhdGhzW10gPSB7IHBhdGhzIH0KIAotLyoKLSAqIFRoZSBmb2xsb3dpbmcgbW9kZWxzIGFyZSBzdXBwb3J0ZWQgdG8gdmFyaW91cyBkZWdyZWVzOgotICoKLSAqIDU3MCwgNjAwZSwgNjAweCwgNzcwZSwgNzcweAotICogQTIwbSwgQTIxZSwgQTIxbSwgQTIxcCwgQTIycCwgQTMwLCBBMzBwLCBBMzEsIEEzMXAKLSAqIEc0MCwgRzQxCi0gKiBSMzAsIFIzMSwgUjMyLCBSNDAsIFI0MGUsIFI1MCwgUjUwZSwgUjUwcCwgUjUxCi0gKiBUMjAsIFQyMSwgVDIyLCBUMjMsIFQzMCwgVDQwLCBUNDBwLCBUNDEsIFQ0MXAsIFQ0MiwgVDQycCwgVDQzCi0gKiBYMjAsIFgyMSwgWDIyLCBYMjMsIFgyNCwgWDMwLCBYMzEsIFg0MAotICoKLSAqIFRoZSBmb2xsb3dpbmcgbW9kZWxzIGhhdmUgbm8gc3VwcG9ydGVkIGZlYXR1cmVzOgotICoKLSAqIDI0MCwgMjQweCwgaTE0MDAKLSAqCi0gKiBTdGlsbCBtaXNzaW5nIERTRFRzIGZvciB0aGUgZm9sbG93aW5nIG1vZGVsczoKLSAqCi0gKiBBMjBwLCBBMjJlLCBBMjJtCi0gKiBSNTIKLSAqIFMzMQotICogVDQzcAotICovCi0KIElCTV9IQU5ETEUoZWMsIHJvb3QsICJcXF9TQi5QQ0kwLklTQS5FQzAiLAkvKiAyNDAsIDI0MHggKi8KIAkgICAiXFxfU0IuUENJLklTQS5FQyIsCS8qIDU3MCAqLwogCSAgICJcXF9TQi5QQ0kwLklTQTAuRUMwIiwJLyogNjAwZS94LCA3NzBlLCA3NzB4ICovCkBAIC0xNjksNiArMTU5LDcgQEAKICNlbmRpZgogSUJNX0hBTkRMRShiYXksIHJvb3QsICJcXF9TQi5QQ0kuSURFLlNFQ04uTUFTVCIsCS8qIDU3MCAqLwogCSAgICJcXF9TQi5QQ0kwLklERTAuSURFUy5JRFNNIiwJLyogNjAwZS94LCA3NzBlLCA3NzB4ICovCisJICAgIlxcX1NCLlBDSTAuU0FUQS5TQ05ELk1TVFIiLAkvKiBUNjAsIFg2MCwgWjYwICovIAogCSAgICJcXF9TQi5QQ0kwLklERTAuU0NORC5NU1RSIiwJLyogYWxsIG90aGVycyAqLwogICAgICk7CQkJCS8qIEEyMWUsIFIzMCwgUjMxICovCiAKQEAgLTIwMyw3ICsxOTQsNyBAQAogSUJNX0hBTkRMRShiZWVwLCBlYywgIkJFRVAiKTsJLyogYWxsIGV4Y2VwdCBSMzAsIFIzMSAqLwogSUJNX0hBTkRMRShlY3JkLCBlYywgIkVDUkQiKTsJLyogNTcwICovCiBJQk1fSEFORExFKGVjd3IsIGVjLCAiRUNXUiIpOwkvKiA1NzAgKi8KLUlCTV9IQU5ETEUoZmFucywgZWMsICJGQU5TIik7CS8qIFgzMSwgWDQwICovCitJQk1fSEFORExFKGZhbnMsIGVjLCAiRkFOUyIpOwkvKiBYMzEsIFg0MCwgWDQxICovCiAKIElCTV9IQU5ETEUoZ2ZhbiwgZWMsICJHRkFOIiwJLyogNTcwICovCiAJICAgIlxcRlNQRCIsCQkvKiA2MDBlL3gsIDc3MGUsIDc3MHggKi8KQEAgLTIxNiw2ICsyMDcsMTUyIEBACiAjZGVmaW5lIElCTV9IS0VZX0hJRAkiSUJNMDA2OCIKICNkZWZpbmUgSUJNX1BDSV9ISUQJIlBOUDBBMDMiCiAKK2VudW0gdGhlcm1hbF9hY2Nlc3NfbW9kZSB7CisJSUJNQUNQSV9USEVSTUFMX05PTkUgPSAwLAkvKiBObyB0aGVybWFsIHN1cHBvcnQgKi8KKwlJQk1BQ1BJX1RIRVJNQUxfQUNQSV9UTVAwNywJLyogVXNlIEFDUEkgVE1QMC03ICovCisJSUJNQUNQSV9USEVSTUFMX0FDUElfVVBEVCwJLyogVXNlIEFDUEkgVE1QMC03IHdpdGggVVBEVCAqLworCUlCTUFDUElfVEhFUk1BTF9UUEVDXzgsCQkvKiBVc2UgQUNQSSBFQyByZWdzLCA4IHNlbnNvcnMgKi8KKwlJQk1BQ1BJX1RIRVJNQUxfVFBFQ18xNiwJLyogVXNlIEFDUEkgRUMgcmVncywgMTYgc2Vuc29ycyAqLworfTsKKworI2RlZmluZSBJQk1BQ1BJX01BWF9USEVSTUFMX1NFTlNPUlMgMTYJLyogTWF4IHRoZXJtYWwgc2Vuc29ycyBzdXBwb3J0ZWQgKi8KK3N0cnVjdCBpYm1fdGhlcm1hbF9zZW5zb3JzX3N0cnVjdCB7CisJczMyIHRlbXBbSUJNQUNQSV9NQVhfVEhFUk1BTF9TRU5TT1JTXTsKK307CisKKy8qCisgKiBGQU4gQUNDRVNTIE1PREVTCisgKgorICogSUJNQUNQSV9GQU5fUkRfQUNQSV9HRkFOOgorICogCUFDUEkgR0ZBTiBtZXRob2Q6IHJldHVybnMgZmFuIGxldmVsCisgKgorICogCXNlZSBJQk1BQ1BJX0ZBTl9XUl9BQ1BJX1NGQU4KKyAqIAlFQyAweDJmIG5vdCBhdmFpbGFibGUgaWYgR0ZBTiBleGlzdHMKKyAqCisgKiBJQk1BQ1BJX0ZBTl9XUl9BQ1BJX1NGQU46CisgKiAJQUNQSSBTRkFOIG1ldGhvZDogc2V0cyBmYW4gbGV2ZWwsIDAgKHN0b3ApIHRvIDcgKG1heCkKKyAqCisgKiAJRUMgMHgyZiBtaWdodCBiZSBhdmFpbGFibGUgKmZvciByZWFkaW5nKiwgYnV0IG5ldmVyIGZvciB3cml0aW5nLgorICoKKyAqIElCTUFDUElfRkFOX1dSX1RQRUM6CisgKiAJVGhpbmtQYWQgRUMgcmVnaXN0ZXIgMHgyZiAoSEZTUCk6IGZhbiBjb250cm9sIGxvb3AgbW9kZSBTdXBwb3J0ZWQKKyAqIAlvbiBhbG1vc3QgYWxsIFRoaW5rUGFkcworICoKKyAqIAlGYW4gc3BlZWQgY2hhbmdlcyBvZiBhbnkgc29ydCAoaW5jbHVkaW5nIHRob3NlIGNhdXNlZCBieSB0aGUKKyAqIAlkaXNlbmdhZ2VkIG1vZGUpIGFyZSB1c3VhbGx5IGRvbmUgc2xvd2x5IGJ5IHRoZSBmaXJtd2FyZSBhcyB0aGUKKyAqIAltYXhpbXVtIGFtbW91bnQgb2YgZmFuIGR1dHkgY3ljbGUgY2hhbmdlIHBlciBzZWNvbmQgc2VlbXMgdG8gYmUKKyAqIAlsaW1pdGVkLgorICoKKyAqIAlSZWFkaW5nIGlzIG5vdCBhdmFpbGFibGUgaWYgR0ZBTiBleGlzdHMuCisgKiAJV3JpdGluZyBpcyBub3QgYXZhaWxhYmxlIGlmIFNGQU4gZXhpc3RzLgorICoKKyAqIAlCaXRzCisgKgkgNwlhdXRvbWF0aWMgbW9kZSBlbmdhZ2VkOworICogIAkJKGRlZmF1bHQgb3BlcmF0aW9uIG1vZGUgb2YgdGhlIFRoaW5rUGFkKQorICogCQlmYW4gbGV2ZWwgaXMgaWdub3JlZCBpbiB0aGlzIG1vZGUuCisgKgkgNglkaXNlbmdhZ2UgbW9kZSAodGFrZXMgcHJlY2VkZW5jZSBvdmVyIGJpdCA3KTsKKyAqCQlub3QgYXZhaWxhYmxlIG9uIGFsbCB0aGlua3BhZHMuICBNYXkgZGlzYWJsZQorICoJCXRoZSB0YWNob21ldGVyLCBhbmQgc3BlZWRzIHVwIGZhbiB0byAxMDAlIGR1dHktY3ljbGUsCisgKgkJd2hpY2ggc3BlZWRzIGl0IHVwIGZhciBhYm92ZSB0aGUgc3RhbmRhcmQgUlBNCisgKgkJbGV2ZWxzLiAgSXQgaXMgbm90IGltcG9zc2libGUgdGhhdCBpdCBjb3VsZCBjYXVzZQorICoJCWhhcmR3YXJlIGRhbWFnZS4KKyAqCTUtMwl1bnVzZWQgaW4gc29tZSBtb2RlbHMuICBFeHRyYSBiaXRzIGZvciBmYW4gbGV2ZWwKKyAqCQlpbiBvdGhlcnMsIGJ1dCBzdGlsbCB1c2VsZXNzIGFzIGFsbCB2YWx1ZXMgYWJvdmUKKyAqCQk3IG1hcCB0byB0aGUgc2FtZSBzcGVlZCBhcyBsZXZlbCA3IGluIHRoZXNlIG1vZGVscy4KKyAqCTItMAlmYW4gbGV2ZWwgKDAuLjcgdXN1YWxseSkKKyAqCQkJMHgwMCA9IHN0b3AKKyAqIAkJCTB4MDcgPSBtYXggKHNldCB3aGVuIHRlbXBlcmF0dXJlcyBjcml0aWNhbCkKKyAqIAkJU29tZSBUaGlua1BhZHMgbWF5IGhhdmUgb3RoZXIgbGV2ZWxzLCBzZWUKKyAqIAkJSUJNQUNQSV9GQU5fV1JfQUNQSV9GQU5TIChYMzEvWDQwL1g0MSkKKyAqCisgKglGSVJNV0FSRSBCVUc6IG9uIHNvbWUgbW9kZWxzLCBFQyAweDJmIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZCBhdAorICoJYm9vdC4gQXBwYXJlbnRseSB0aGUgRUMgZG9lcyBub3QgaW50aWFsaXplIGl0LCBzbyB1bmxlc3MgQUNQSSBEU0RUCisgKglkb2VzIHNvLCBpdHMgaW5pdGlhbCB2YWx1ZSBpcyBtZWFuaW5nbGVzcyAoMHgwNykuCisgKgorICoJRm9yIGZpcm13YXJlIGJ1Z3MsIHJlZmVyIHRvOgorICoJaHR0cDovL3RoaW5rd2lraS5vcmcvd2lraS9FbWJlZGRlZF9Db250cm9sbGVyX0Zpcm13YXJlI0Zpcm13YXJlX0lzc3VlcworICoKKyAqIAktLS0tCisgKgorICoJVGhpbmtQYWQgRUMgcmVnaXN0ZXIgMHg4NCAoTFNCKSwgMHg4NSAoTVNCKToKKyAqCU1haW4gZmFuIHRhY2hvbWV0ZXIgcmVhZGluZyAoaW4gUlBNKQorICoKKyAqCVRoaXMgcmVnaXN0ZXIgaXMgcHJlc2VudCBvbiBhbGwgVGhpbmtQYWRzIHdpdGggYSBuZXctc3R5bGUgRUMsIGFuZAorICoJaXQgaXMga25vd24gbm90IHRvIGJlIHByZXNlbnQgb24gdGhlIEEyMW0vZSwgYW5kIFQyMiwgYXMgdGhlcmUgaXMKKyAqCXNvbWV0aGluZyBlbHNlIGluIG9mZnNldCAweDg0IGFjY29yZGluZyB0byB0aGUgQUNQSSBEU0RULiAgT3RoZXIKKyAqCVRoaW5rUGFkcyBmcm9tIHRoaXMgc2FtZSB0aW1lIHBlcmlvZCAoYW5kIGVhcmxpZXIpIHByb2JhYmx5IGxhY2sgdGhlCisgKgl0YWNob21ldGVyIGFzIHdlbGwuCisgKgorICoJVW5mb3J0dW5hdGVseSBhIGxvdCBvZiBUaGlua1BhZHMgd2l0aCBuZXctc3R5bGUgRUNzIGJ1dCB3aG9zZSBmaXJ3bWFyZQorICoJd2FzIG5ldmVyIGZpeGVkIGJ5IElCTSB0byByZXBvcnQgdGhlIEVDIGZpcm13YXJlIHZlcnNpb24gc3RyaW5nCisgKglwcm9iYWJseSBzdXBwb3J0IHRoZSB0YWNob21ldGVyIChsaWtlIHRoZSBlYXJseSBYIG1vZGVscyksIHNvCisgKglkZXRlY3RpbmcgaXQgaXMgcXVpdGUgaGFyZC4gIFdlIG5lZWQgbW9yZSBkYXRhIHRvIGtub3cgZm9yIHN1cmUuCisgKgorICoJRklSTVdBUkUgQlVHOiBhbHdheXMgcmVhZCAweDg0IGZpcnN0LCBvdGhlcndpc2UgaW5jb3JyZWN0IHJlYWRpbmdzCisgKgltaWdodCByZXN1bHQuCisgKgorICoJRklSTVdBUkUgQlVHOiB3aGVuIEVDIDB4MmYgYml0IDYgaXMgc2V0IChkaXNlbmdhZ2VkIG1vZGUpLCB0aGlzCisgKglyZWdpc3RlciBpcyBub3QgaW52YWxpZGF0ZWQgaW4gVGhpbmtQYWRzIHRoYXQgZGlzYWJsZSB0YWNob21ldGVyCisgKglyZWFkaW5ncy4gIFRodXMsIHRoZSB0YWNob21ldGVyIHJlYWRpbmdzIGdvIHN0YWxlLgorICoKKyAqCUZvciBmaXJtd2FyZSBidWdzLCByZWZlciB0bzoKKyAqCWh0dHA6Ly90aGlua3dpa2kub3JnL3dpa2kvRW1iZWRkZWRfQ29udHJvbGxlcl9GaXJtd2FyZSNGaXJtd2FyZV9Jc3N1ZXMKKyAqCisgKiBJQk1BQ1BJX0ZBTl9XUl9BQ1BJX0ZBTlM6CisgKglUaGlua1BhZCBYMzEsIFg0MCwgWDQxLiAgTm90IGF2YWlsYWJsZSBpbiB0aGUgWDYwLgorICoKKyAqCUZBTlMgQUNQSSBoYW5kbGU6IHRha2VzIHRocmVlIGFyZ3VtZW50czogbG93IHNwZWVkLCBtZWRpdW0gc3BlZWQsCisgKgloaWdoIHNwZWVkLiAgQUNQSSBEU0RUIHNlZW1zIHRvIG1hcCB0aGVzZSB0aHJlZSBzcGVlZHMgdG8gbGV2ZWxzCisgKglhcyBmb2xsb3dzOiBTVE9QIExPVyBMT1cgTUVEIE1FRCBISUdIIEhJR0ggSElHSCBISUdICisgKgkodGhpcyBtYXAgaXMgc3RvcmVkIG9uIEZBTjAuLkZBTjggYXMgIjAsMSwxLDIsMiwzLDMsMywzIikKKyAqCisgKiAJVGhlIHNwZWVkcyBhcmUgc3RvcmVkIG9uIGhhbmRsZXMKKyAqIAkoRkFOQTpGQU45KSwgKEZBTkM6RkFOQiksIChGQU5FOkZBTkQpLgorICoKKyAqIAlUaGVyZSBhcmUgdGhyZWUgZGVmYXVsdCBzcGVlZCBzZXRzLCBhY2Vzc2libGUgYXMgaGFuZGxlczoKKyAqIAlGUzFMLEZTMU0sRlMxSDsgRlMyTCxGUzJNLEZTMkg7IEZTM0wsRlMzTSxGUzNICisgKgorICogCUFDUEkgRFNEVCBzd2l0Y2hlcyB3aGljaCBzZXQgaXMgaW4gdXNlIGRlcGVuZGluZyBvbiB2YXJpb3VzCisgKiAJZmFjdG9ycy4KKyAqCisgKiAJSUJNQUNQSV9GQU5fV1JfVFBFQyBpcyBhbHNvIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHVzZWQgdG8KKyAqIAljb21tYW5kIHRoZSBmYW4uICBUaGUgWDMxL1g0MC9YNDEgc2VlbXMgdG8gaGF2ZSA4IGZhbiBsZXZlbHMsCisgKiAJYnV0IHRoZSBBQ1BJIHRhYmxlcyBqdXN0IG1lbnRpb24gbGV2ZWwgNy4KKyAqLworCitlbnVtIGZhbl9zdGF0dXNfYWNjZXNzX21vZGUgeworCUlCTUFDUElfRkFOX05PTkUgPSAwLAkJLyogTm8gZmFuIHN0YXR1cyBvciBjb250cm9sICovCisJSUJNQUNQSV9GQU5fUkRfQUNQSV9HRkFOLAkvKiBVc2UgQUNQSSBHRkFOICovCisJSUJNQUNQSV9GQU5fUkRfVFBFQywJCS8qIFVzZSBBQ1BJIEVDIHJlZ3MgMHgyZiwgMHg4NC0weDg1ICovCit9OworCitlbnVtIGZhbl9jb250cm9sX2FjY2Vzc19tb2RlIHsKKwlJQk1BQ1BJX0ZBTl9XUl9OT05FID0gMCwJLyogTm8gZmFuIGNvbnRyb2wgKi8KKwlJQk1BQ1BJX0ZBTl9XUl9BQ1BJX1NGQU4sCS8qIFVzZSBBQ1BJIFNGQU4gKi8KKwlJQk1BQ1BJX0ZBTl9XUl9UUEVDLAkJLyogVXNlIEFDUEkgRUMgcmVnIDB4MmYgKi8KKwlJQk1BQ1BJX0ZBTl9XUl9BQ1BJX0ZBTlMsCS8qIFVzZSBBQ1BJIEZBTlMgYW5kIEVDIHJlZyAweDJmICovCit9OworCitlbnVtIGZhbl9jb250cm9sX2NvbW1hbmRzIHsKKwlJQk1BQ1BJX0ZBTl9DTURfU1BFRUQgCT0gMHgwMDAxLAkvKiBzcGVlZCBjb21tYW5kICovCisJSUJNQUNQSV9GQU5fQ01EX0xFVkVMIAk9IDB4MDAwMiwJLyogbGV2ZWwgY29tbWFuZCAgKi8KKwlJQk1BQ1BJX0ZBTl9DTURfRU5BQkxFCT0gMHgwMDA0LAkvKiBlbmFibGUvZGlzYWJsZSBjbWQsCisJCQkJCQkgKiBhbmQgYWxzbyB3YXRjaGRvZyBjbWQgKi8KK307CisKK2VudW0gewkJCQkJLyogRmFuIGNvbnRyb2wgY29uc3RhbnRzICovCisJZmFuX3N0YXR1c19vZmZzZXQgPSAweDJmLAkvKiBFQyByZWdpc3RlciAweDJmICovCisJZmFuX3JwbV9vZmZzZXQgPSAweDg0LAkJLyogRUMgcmVnaXN0ZXIgMHg4NDogTFNCLCAweDg1IE1TQiAoUlBNKQorCQkJCQkgKiAweDg0IG11c3QgYmUgcmVhZCBiZWZvcmUgMHg4NSAqLworCisJSUJNQUNQSV9GQU5fRUNfRElTRU5HQUdFRCAJPSAweDQwLAkvKiBFQyBtb2RlOiB0YWNob21ldGVyCisJCQkJCQkgKiBkaXNlbmdhZ2VkICovCisJSUJNQUNQSV9GQU5fRUNfQVVUTwkJPSAweDgwLCAvKiBFQyBtb2RlOiBhdXRvIGZhbgorCQkJCQkJICogY29udHJvbCAqLworfTsKKworc3RhdGljIGNoYXIgKmlibV90aGlua3BhZF9lY19mb3VuZCA9IE5VTEw7CisKIHN0cnVjdCBpYm1fc3RydWN0IHsKIAljaGFyICpuYW1lOwogCWNoYXIgcGFyYW1bMzJdOwpAQCAtMjQzLDYgKzM4MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZGlyID0gTlVMTDsKIAorc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICppYm1fYmFja2xpZ2h0X2RldmljZSA9IE5VTEw7CisKICNkZWZpbmUgb25vZmYoc3RhdHVzLGJpdCkgKChzdGF0dXMpICYgKDEgPDwgKGJpdCkpID8gIm9uIiA6ICJvZmYiKQogI2RlZmluZSBlbmFibGVkKHN0YXR1cyxiaXQpICgoc3RhdHVzKSAmICgxIDw8IChiaXQpKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpCiAjZGVmaW5lIHN0cmxlbmNtcChhLGIpIChzdHJuY21wKChhKSwgKGIpLCBzdHJsZW4oYikpKQpAQCAtMzUyLDcgKzQ5MSw3IEBACiAJcmV0dXJuIHN0YXJ0OwogfQogCi1zdGF0aWMgaW50IGRyaXZlcl9pbml0KHZvaWQpCitzdGF0aWMgaW50IGlibV9hY3BpX2RyaXZlcl9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKElCTV9JTkZPICIlcyB2JXNcbiIsIElCTV9ERVNDLCBJQk1fVkVSU0lPTik7CiAJcHJpbnRrKElCTV9JTkZPICIlc1xuIiwgSUJNX1VSTCk7CkBAIC01ODEsOCArNzIwLDcgQEAKIHsKIAlpbnQgc3RhdHVzOwogCi0JaWYgKCF3YW5fc3VwcG9ydGVkIHx8Ci0JICAgICFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmc3RhdHVzLCAiR1dBTiIsICJkIikpCisJaWYgKCF3YW5fc3VwcG9ydGVkIHx8ICFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmc3RhdHVzLCAiR1dBTiIsICJkIikpCiAJCXN0YXR1cyA9IDA7CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNjMwLDEyICs3NjgsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRlb19zdXBwb3J0ZWQ7Ci1zdGF0aWMgaW50IHZpZGVvX29yaWdfYXV0b3N3OworZW51bSB2aWRlb19hY2Nlc3NfbW9kZSB7CisJSUJNQUNQSV9WSURFT19OT05FID0gMCwKKwlJQk1BQ1BJX1ZJREVPXzU3MCwJLyogNTcwICovCisJSUJNQUNQSV9WSURFT183NzAsCS8qIDYwMGUveCwgNzcwZSwgNzcweCAqLworCUlCTUFDUElfVklERU9fTkVXLAkvKiBhbGwgb3RoZXJzICovCit9OwogCi0jZGVmaW5lIFZJREVPXzU3MCAxCi0jZGVmaW5lIFZJREVPXzc3MCAyCi0jZGVmaW5lIFZJREVPX05FVyAzCitzdGF0aWMgZW51bSB2aWRlb19hY2Nlc3NfbW9kZSB2aWRlb19zdXBwb3J0ZWQ7CitzdGF0aWMgaW50IHZpZGVvX29yaWdfYXV0b3N3OwogCiBzdGF0aWMgaW50IHZpZGVvX2luaXQodm9pZCkKIHsKQEAgLTY0NywxNiArNzg4LDE2IEBACiAKIAlpZiAoIXZpZF9oYW5kbGUpCiAJCS8qIHZpZGVvIHN3aXRjaGluZyBub3Qgc3VwcG9ydGVkIG9uIFIzMCwgUjMxICovCi0JCXZpZGVvX3N1cHBvcnRlZCA9IDA7CisJCXZpZGVvX3N1cHBvcnRlZCA9IElCTUFDUElfVklERU9fTk9ORTsKIAllbHNlIGlmIChhY3BpX2V2YWxmKHZpZF9oYW5kbGUsICZ2aWRlb19vcmlnX2F1dG9zdywgIlNXSVQiLCAicWQiKSkKIAkJLyogNTcwICovCi0JCXZpZGVvX3N1cHBvcnRlZCA9IFZJREVPXzU3MDsKKwkJdmlkZW9fc3VwcG9ydGVkID0gSUJNQUNQSV9WSURFT181NzA7CiAJZWxzZSBpZiAoYWNwaV9ldmFsZih2aWRfaGFuZGxlLCAmdmlkZW9fb3JpZ19hdXRvc3csICJeVkFETCIsICJxZCIpKQogCQkvKiA2MDBlL3gsIDc3MGUsIDc3MHggKi8KLQkJdmlkZW9fc3VwcG9ydGVkID0gVklERU9fNzcwOworCQl2aWRlb19zdXBwb3J0ZWQgPSBJQk1BQ1BJX1ZJREVPXzc3MDsKIAllbHNlCiAJCS8qIGFsbCBvdGhlcnMgKi8KLQkJdmlkZW9fc3VwcG9ydGVkID0gVklERU9fTkVXOworCQl2aWRlb19zdXBwb3J0ZWQgPSBJQk1BQ1BJX1ZJREVPX05FVzsKIAogCXJldHVybiAwOwogfQpAQCAtNjY2LDE1ICs4MDcsMTUgQEAKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgaTsKIAotCWlmICh2aWRlb19zdXBwb3J0ZWQgPT0gVklERU9fNTcwKSB7CisJaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBJQk1BQ1BJX1ZJREVPXzU3MCkgewogCQlpZiAoYWNwaV9ldmFsZihOVUxMLCAmaSwgIlxcX1NCLlBIUyIsICJkZCIsIDB4ODcpKQogCQkJc3RhdHVzID0gaSAmIDM7Ci0JfSBlbHNlIGlmICh2aWRlb19zdXBwb3J0ZWQgPT0gVklERU9fNzcwKSB7CisJfSBlbHNlIGlmICh2aWRlb19zdXBwb3J0ZWQgPT0gSUJNQUNQSV9WSURFT183NzApIHsKIAkJaWYgKGFjcGlfZXZhbGYoTlVMTCwgJmksICJcXFZDREwiLCAiZCIpKQogCQkJc3RhdHVzIHw9IDB4MDEgKiBpOwogCQlpZiAoYWNwaV9ldmFsZihOVUxMLCAmaSwgIlxcVkNEQyIsICJkIikpCiAJCQlzdGF0dXMgfD0gMHgwMiAqIGk7Ci0JfSBlbHNlIGlmICh2aWRlb19zdXBwb3J0ZWQgPT0gVklERU9fTkVXKSB7CisJfSBlbHNlIGlmICh2aWRlb19zdXBwb3J0ZWQgPT0gSUJNQUNQSV9WSURFT19ORVcpIHsKIAkJYWNwaV9ldmFsZihOVUxMLCBOVUxMLCAiXFxWVVBTIiwgInZkIiwgMSk7CiAJCWlmIChhY3BpX2V2YWxmKE5VTEwsICZpLCAiXFxWQ0RDIiwgImQiKSkKIAkJCXN0YXR1cyB8PSAweDAyICogaTsKQEAgLTY5Myw5ICs4MzQsMTAgQEAKIHsKIAlpbnQgYXV0b3N3ID0gMDsKIAotCWlmICh2aWRlb19zdXBwb3J0ZWQgPT0gVklERU9fNTcwKQorCWlmICh2aWRlb19zdXBwb3J0ZWQgPT0gSUJNQUNQSV9WSURFT181NzApCiAJCWFjcGlfZXZhbGYodmlkX2hhbmRsZSwgJmF1dG9zdywgIlNXSVQiLCAiZCIpOwotCWVsc2UgaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBWSURFT183NzAgfHwgdmlkZW9fc3VwcG9ydGVkID09IFZJREVPX05FVykKKwllbHNlIGlmICh2aWRlb19zdXBwb3J0ZWQgPT0gSUJNQUNQSV9WSURFT183NzAgfHwKKwkJIHZpZGVvX3N1cHBvcnRlZCA9PSBJQk1BQ1BJX1ZJREVPX05FVykKIAkJYWNwaV9ldmFsZih2aWRfaGFuZGxlLCAmYXV0b3N3LCAiXlZERUUiLCAiZCIpOwogCiAJcmV0dXJuIGF1dG9zdyAmIDE7CkBAIC03MTUsMTIgKzg1NywxMiBAQAogCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdHN1cHBvcnRlZFxuIik7CiAJbGVuICs9IHNwcmludGYocCArIGxlbiwgImxjZDpcdFx0JXNcbiIsIGVuYWJsZWQoc3RhdHVzLCAwKSk7CiAJbGVuICs9IHNwcmludGYocCArIGxlbiwgImNydDpcdFx0JXNcbiIsIGVuYWJsZWQoc3RhdHVzLCAxKSk7Ci0JaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBWSURFT19ORVcpCisJaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBJQk1BQ1BJX1ZJREVPX05FVykKIAkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImR2aTpcdFx0JXNcbiIsIGVuYWJsZWQoc3RhdHVzLCAzKSk7CiAJbGVuICs9IHNwcmludGYocCArIGxlbiwgImF1dG86XHRcdCVzXG4iLCBlbmFibGVkKGF1dG9zdywgMCkpOwogCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdGxjZF9lbmFibGUsIGxjZF9kaXNhYmxlXG4iKTsKIAlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiY29tbWFuZHM6XHRjcnRfZW5hYmxlLCBjcnRfZGlzYWJsZVxuIik7Ci0JaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBWSURFT19ORVcpCisJaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBJQk1BQ1BJX1ZJREVPX05FVykKIAkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0ZHZpX2VuYWJsZSwgZHZpX2Rpc2FibGVcbiIpOwogCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdGF1dG9fZW5hYmxlLCBhdXRvX2Rpc2FibGVcbiIpOwogCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdHZpZGVvX3N3aXRjaCwgZXhwYW5kX3RvZ2dsZVxuIik7CkBAIC03MzUsNyArODc3LDcgQEAKIAogCWlmICghYWNwaV9ldmFsZih2aWRfaGFuZGxlLCBOVUxMLCAiX0RPUyIsICJ2ZCIsIDEpKQogCQlyZXR1cm4gLUVJTzsKLQlyZXQgPSB2aWRlb19zdXBwb3J0ZWQgPT0gVklERU9fNTcwID8KKwlyZXQgPSB2aWRlb19zdXBwb3J0ZWQgPT0gSUJNQUNQSV9WSURFT181NzAgPwogCSAgICBhY3BpX2V2YWxmKGVjX2hhbmRsZSwgTlVMTCwgIl9RMTYiLCAidiIpIDoKIAkgICAgYWNwaV9ldmFsZih2aWRfaGFuZGxlLCBOVUxMLCAiVlNXVCIsICJ2Iik7CiAJYWNwaV9ldmFsZih2aWRfaGFuZGxlLCBOVUxMLCAiX0RPUyIsICJ2ZCIsIGF1dG9zdyk7CkBAIC03NDUsOSArODg3LDkgQEAKIAogc3RhdGljIGludCB2aWRlb19leHBhbmQodm9pZCkKIHsKLQlpZiAodmlkZW9fc3VwcG9ydGVkID09IFZJREVPXzU3MCkKKwlpZiAodmlkZW9fc3VwcG9ydGVkID09IElCTUFDUElfVklERU9fNTcwKQogCQlyZXR1cm4gYWNwaV9ldmFsZihlY19oYW5kbGUsIE5VTEwsICJfUTE3IiwgInYiKTsKLQllbHNlIGlmICh2aWRlb19zdXBwb3J0ZWQgPT0gVklERU9fNzcwKQorCWVsc2UgaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBJQk1BQ1BJX1ZJREVPXzc3MCkKIAkJcmV0dXJuIGFjcGlfZXZhbGYodmlkX2hhbmRsZSwgTlVMTCwgIlZFWFAiLCAidiIpOwogCWVsc2UKIAkJcmV0dXJuIGFjcGlfZXZhbGYoTlVMTCwgTlVMTCwgIlxcVkVYUCIsICJ2Iik7CkBAIC03NTcsMTAgKzg5OSwxMCBAQAogewogCWludCByZXQ7CiAKLQlpZiAodmlkZW9fc3VwcG9ydGVkID09IFZJREVPXzU3MCkgeworCWlmICh2aWRlb19zdXBwb3J0ZWQgPT0gSUJNQUNQSV9WSURFT181NzApIHsKIAkJcmV0ID0gYWNwaV9ldmFsZihOVUxMLCBOVUxMLAogCQkJCSAiXFxfU0IuUEhTMiIsICJ2ZGQiLCAweDhiLCBzdGF0dXMgfCAweDgwKTsKLQl9IGVsc2UgaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBWSURFT183NzApIHsKKwl9IGVsc2UgaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBJQk1BQ1BJX1ZJREVPXzc3MCkgewogCQlpbnQgYXV0b3N3ID0gdmlkZW9fYXV0b3N3KCk7CiAJCWlmICghYWNwaV9ldmFsZih2aWRfaGFuZGxlLCBOVUxMLCAiX0RPUyIsICJ2ZCIsIDEpKQogCQkJcmV0dXJuIC1FSU87CkBAIC03OTYsMTAgKzkzOCwxMCBAQAogCQkJZW5hYmxlIHw9IDB4MDI7CiAJCX0gZWxzZSBpZiAoc3RybGVuY21wKGNtZCwgImNydF9kaXNhYmxlIikgPT0gMCkgewogCQkJZGlzYWJsZSB8PSAweDAyOwotCQl9IGVsc2UgaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBWSURFT19ORVcgJiYKKwkJfSBlbHNlIGlmICh2aWRlb19zdXBwb3J0ZWQgPT0gSUJNQUNQSV9WSURFT19ORVcgJiYKIAkJCSAgIHN0cmxlbmNtcChjbWQsICJkdmlfZW5hYmxlIikgPT0gMCkgewogCQkJZW5hYmxlIHw9IDB4MDg7Ci0JCX0gZWxzZSBpZiAodmlkZW9fc3VwcG9ydGVkID09IFZJREVPX05FVyAmJgorCQl9IGVsc2UgaWYgKHZpZGVvX3N1cHBvcnRlZCA9PSBJQk1BQ1BJX1ZJREVPX05FVyAmJgogCQkJICAgc3RybGVuY21wKGNtZCwgImR2aV9kaXNhYmxlIikgPT0gMCkgewogCQkJZGlzYWJsZSB8PSAweDA4OwogCQl9IGVsc2UgaWYgKHN0cmxlbmNtcChjbWQsICJhdXRvX2VuYWJsZSIpID09IDApIHsKQEAgLTkwNyw2ICsxMDQ5LDcgQEAKIAogCXJldHVybiBzdGF0dXM7CiB9CisKICNpZmRlZiBDT05GSUdfQUNQSV9JQk1fRE9DSwogI2RlZmluZSBkb2NrX2RvY2tlZCgpIChfc3RhKGRvY2tfaGFuZGxlKSAmIDEpCiAKQEAgLTEwOTQsMjYgKzEyMzcsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsZWRfc3VwcG9ydGVkOwotCi0jZGVmaW5lIExFRF81NzAgMQotI2RlZmluZSBMRURfT0xEIDIKLSNkZWZpbmUgTEVEX05FVyAzCitlbnVtIGxlZF9hY2Nlc3NfbW9kZSB7CisJSUJNQUNQSV9MRURfTk9ORSA9IDAsCisJSUJNQUNQSV9MRURfNTcwLAkvKiA1NzAgKi8KKwlJQk1BQ1BJX0xFRF9PTEQsCS8qIDYwMGUveCwgNzcwZSwgNzcweCwgQTIxZSwgQTJ4bS9wLCBUMjAtMjIsIFgyMC0yMSAqLworCUlCTUFDUElfTEVEX05FVywJLyogYWxsIG90aGVycyAqLworfTsKK3N0YXRpYyBlbnVtIGxlZF9hY2Nlc3NfbW9kZSBsZWRfc3VwcG9ydGVkOwogCiBzdGF0aWMgaW50IGxlZF9pbml0KHZvaWQpCiB7CiAJaWYgKCFsZWRfaGFuZGxlKQogCQkvKiBsZWQgbm90IHN1cHBvcnRlZCBvbiBSMzAsIFIzMSAqLwotCQlsZWRfc3VwcG9ydGVkID0gMDsKKwkJbGVkX3N1cHBvcnRlZCA9IElCTUFDUElfTEVEX05PTkU7CiAJZWxzZSBpZiAoc3RybGVuY21wKGxlZF9wYXRoLCAiU0xFRCIpID09IDApCiAJCS8qIDU3MCAqLwotCQlsZWRfc3VwcG9ydGVkID0gTEVEXzU3MDsKKwkJbGVkX3N1cHBvcnRlZCA9IElCTUFDUElfTEVEXzU3MDsKIAllbHNlIGlmIChzdHJsZW5jbXAobGVkX3BhdGgsICJTWVNMIikgPT0gMCkKIAkJLyogNjAwZS94LCA3NzBlLCA3NzB4LCBBMjFlLCBBMnhtL3AsIFQyMC0yMiwgWDIwLTIxICovCi0JCWxlZF9zdXBwb3J0ZWQgPSBMRURfT0xEOworCQlsZWRfc3VwcG9ydGVkID0gSUJNQUNQSV9MRURfT0xEOwogCWVsc2UKIAkJLyogYWxsIG90aGVycyAqLwotCQlsZWRfc3VwcG9ydGVkID0gTEVEX05FVzsKKwkJbGVkX3N1cHBvcnRlZCA9IElCTUFDUElfTEVEX05FVzsKIAogCXJldHVybiAwOwogfQpAQCAtMTEzMCw3ICsxMjc1LDcgQEAKIAl9CiAJbGVuICs9IHNwcmludGYocCArIGxlbiwgInN0YXR1czpcdFx0c3VwcG9ydGVkXG4iKTsKIAotCWlmIChsZWRfc3VwcG9ydGVkID09IExFRF81NzApIHsKKwlpZiAobGVkX3N1cHBvcnRlZCA9PSBJQk1BQ1BJX0xFRF81NzApIHsKIAkJLyogNTcwICovCiAJCWludCBpLCBzdGF0dXM7CiAJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKQEAgLTExNzksMTMgKzEzMjQsMTMgQEAKIAkJfSBlbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAobGVkX3N1cHBvcnRlZCA9PSBMRURfNTcwKSB7CisJCWlmIChsZWRfc3VwcG9ydGVkID09IElCTUFDUElfTEVEXzU3MCkgewogCQkJLyogNTcwICovCiAJCQlsZWQgPSAxIDw8IGxlZDsKIAkJCWlmICghYWNwaV9ldmFsZihsZWRfaGFuZGxlLCBOVUxMLCBOVUxMLCAidmRkIiwKIAkJCQkJbGVkLCBsZWRfc2xlZF9hcmcxW2luZF0pKQogCQkJCXJldHVybiAtRUlPOwotCQl9IGVsc2UgaWYgKGxlZF9zdXBwb3J0ZWQgPT0gTEVEX09MRCkgeworCQl9IGVsc2UgaWYgKGxlZF9zdXBwb3J0ZWQgPT0gSUJNQUNQSV9MRURfT0xEKSB7CiAJCQkvKiA2MDBlL3gsIDc3MGUsIDc3MHgsIEEyMWUsIEEyeG0vcCwgVDIwLTIyLCBYMjAgKi8KIAkJCWxlZCA9IDEgPDwgbGVkOwogCQkJcmV0ID0gZWNfd3JpdGUoRUNfSExNUywgbGVkKTsKQEAgLTEyNzIsNTAgKzE0MTcsMTQyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgdGhlcm1hbF90bXBfc3VwcG9ydGVkOwotc3RhdGljIGludCB0aGVybWFsX3VwZHRfc3VwcG9ydGVkOworc3RhdGljIGVudW0gdGhlcm1hbF9hY2Nlc3NfbW9kZSB0aGVybWFsX3JlYWRfbW9kZTsKIAogc3RhdGljIGludCB0aGVybWFsX2luaXQodm9pZCkKIHsKLQkvKiB0ZW1wZXJhdHVyZXMgbm90IHN1cHBvcnRlZCBvbiA1NzAsIEc0eCwgUjMwLCBSMzEsIFIzMiAqLwotCXRoZXJtYWxfdG1wX3N1cHBvcnRlZCA9IGFjcGlfZXZhbGYoZWNfaGFuZGxlLCBOVUxMLCAiVE1QNyIsICJxdiIpOworCXU4IHQsIHRhMSwgdGEyOworCWludCBpOworCWludCBhY3BpX3RtcDcgPSBhY3BpX2V2YWxmKGVjX2hhbmRsZSwgTlVMTCwgIlRNUDciLCAicXYiKTsKIAotCS8qIDYwMGUveCwgNzcwZSwgNzcweCAqLwotCXRoZXJtYWxfdXBkdF9zdXBwb3J0ZWQgPSBhY3BpX2V2YWxmKGVjX2hhbmRsZSwgTlVMTCwgIlVQRFQiLCAicXYiKTsKKwlpZiAoaWJtX3RoaW5rcGFkX2VjX2ZvdW5kICYmIGV4cGVyaW1lbnRhbCkgeworCQkvKgorCQkgKiBEaXJlY3QgRUMgYWNjZXNzIG1vZGU6IHNlbnNvcnMgYXQgcmVnaXN0ZXJzCisJCSAqIDB4NzgtMHg3RiwgMHhDMC0weEM3LiAgUmVnaXN0ZXJzIHJldHVybiAweDAwIGZvcgorCQkgKiBub24taW1wbGVtZW50ZWQsIHRoZXJtYWwgc2Vuc29ycyByZXR1cm4gMHg4MCB3aGVuCisJCSAqIG5vdCBhdmFpbGFibGUKKwkJICovCisKKwkJdGExID0gdGEyID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJaWYgKGxpa2VseShhY3BpX2VjX3JlYWQoMHg3OCArIGksICZ0KSkpIHsKKwkJCQl0YTEgfD0gdDsKKwkJCX0gZWxzZSB7CisJCQkJdGExID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChsaWtlbHkoYWNwaV9lY19yZWFkKDB4QzAgKyBpLCAmdCkpKSB7CisJCQkJdGEyIHw9IHQ7CisJCQl9IGVsc2UgeworCQkJCXRhMSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHRhMSA9PSAwKSB7CisJCQkvKiBUaGlzIGlzIHNoZWVyIHBhcmFub2lhLCBidXQgd2UgaGFuZGxlIGl0IGFueXdheSAqLworCQkJaWYgKGFjcGlfdG1wNykgeworCQkJCXByaW50ayhJQk1fRVJSCisJCQkJICAgICAgICJUaGlua1BhZCBBQ1BJIEVDIGFjY2VzcyBtaXNiZWhhdmluZywgIgorCQkJCSAgICAgICAiZmFsbGluZyBiYWNrIHRvIEFDUEkgVE1QeCBhY2Nlc3MgbW9kZVxuIik7CisJCQkJdGhlcm1hbF9yZWFkX21vZGUgPSBJQk1BQ1BJX1RIRVJNQUxfQUNQSV9UTVAwNzsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKElCTV9FUlIKKwkJCQkgICAgICAgIlRoaW5rUGFkIEFDUEkgRUMgYWNjZXNzIG1pc2JlaGF2aW5nLCAiCisJCQkJICAgICAgICJkaXNhYmxpbmcgdGhlcm1hbCBzZW5zb3JzIGFjY2Vzc1xuIik7CisJCQkJdGhlcm1hbF9yZWFkX21vZGUgPSBJQk1BQ1BJX1RIRVJNQUxfTk9ORTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXRoZXJtYWxfcmVhZF9tb2RlID0KKwkJCSAgICAodGEyICE9IDApID8KKwkJCSAgICBJQk1BQ1BJX1RIRVJNQUxfVFBFQ18xNiA6IElCTUFDUElfVEhFUk1BTF9UUEVDXzg7CisJCX0KKwl9IGVsc2UgaWYgKGFjcGlfdG1wNykgeworCQlpZiAoYWNwaV9ldmFsZihlY19oYW5kbGUsIE5VTEwsICJVUERUIiwgInF2IikpIHsKKwkJCS8qIDYwMGUveCwgNzcwZSwgNzcweCAqLworCQkJdGhlcm1hbF9yZWFkX21vZGUgPSBJQk1BQ1BJX1RIRVJNQUxfQUNQSV9VUERUOworCQl9IGVsc2UgeworCQkJLyogU3RhbmRhcmQgQUNQSSBUTVB4IGFjY2VzcywgbWF4IDggc2Vuc29ycyAqLworCQkJdGhlcm1hbF9yZWFkX21vZGUgPSBJQk1BQ1BJX1RIRVJNQUxfQUNQSV9UTVAwNzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHRlbXBlcmF0dXJlcyBub3Qgc3VwcG9ydGVkIG9uIDU3MCwgRzR4LCBSMzAsIFIzMSwgUjMyICovCisJCXRoZXJtYWxfcmVhZF9tb2RlID0gSUJNQUNQSV9USEVSTUFMX05PTkU7CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdGhlcm1hbF9nZXRfc2Vuc29ycyhzdHJ1Y3QgaWJtX3RoZXJtYWxfc2Vuc29yc19zdHJ1Y3QgKnMpCit7CisJaW50IGksIHQ7CisJczggdG1wOworCWNoYXIgdG1waVtdID0gIlRNUGkiOworCisJaWYgKCFzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAodGhlcm1hbF9yZWFkX21vZGUpIHsKKyNpZiBJQk1BQ1BJX01BWF9USEVSTUFMX1NFTlNPUlMgPj0gMTYKKwljYXNlIElCTUFDUElfVEhFUk1BTF9UUEVDXzE2OgorCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCQlpZiAoIWFjcGlfZWNfcmVhZCgweEMwICsgaSwgJnRtcCkpCisJCQkJcmV0dXJuIC1FSU87CisJCQlzLT50ZW1wW2kgKyA4XSA9IHRtcCAqIDEwMDA7CisJCX0KKwkJLyogZmFsbHRocm91Z2ggKi8KKyNlbmRpZgorCWNhc2UgSUJNQUNQSV9USEVSTUFMX1RQRUNfODoKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJaWYgKCFhY3BpX2VjX3JlYWQoMHg3OCArIGksICZ0bXApKQorCQkJCXJldHVybiAtRUlPOworCQkJcy0+dGVtcFtpXSA9IHRtcCAqIDEwMDA7CisJCX0KKwkJcmV0dXJuICh0aGVybWFsX3JlYWRfbW9kZSA9PSBJQk1BQ1BJX1RIRVJNQUxfVFBFQ18xNikgPyAxNiA6IDg7CisKKwljYXNlIElCTUFDUElfVEhFUk1BTF9BQ1BJX1VQRFQ6CisJCWlmICghYWNwaV9ldmFsZihlY19oYW5kbGUsIE5VTEwsICJVUERUIiwgInYiKSkKKwkJCXJldHVybiAtRUlPOworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCQl0bXBpWzNdID0gJzAnICsgaTsKKwkJCWlmICghYWNwaV9ldmFsZihlY19oYW5kbGUsICZ0LCB0bXBpLCAiZCIpKQorCQkJCXJldHVybiAtRUlPOworCQkJcy0+dGVtcFtpXSA9ICh0IC0gMjczMikgKiAxMDA7CisJCX0KKwkJcmV0dXJuIDg7CisKKwljYXNlIElCTUFDUElfVEhFUk1BTF9BQ1BJX1RNUDA3OgorCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCQl0bXBpWzNdID0gJzAnICsgaTsKKwkJCWlmICghYWNwaV9ldmFsZihlY19oYW5kbGUsICZ0LCB0bXBpLCAiZCIpKQorCQkJCXJldHVybiAtRUlPOworCQkJcy0+dGVtcFtpXSA9IHQgKiAxMDAwOworCQl9CisJCXJldHVybiA4OworCisJY2FzZSBJQk1BQ1BJX1RIRVJNQUxfTk9ORToKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgdGhlcm1hbF9yZWFkKGNoYXIgKnApCiB7CiAJaW50IGxlbiA9IDA7CisJaW50IG4sIGk7CisJc3RydWN0IGlibV90aGVybWFsX3NlbnNvcnNfc3RydWN0IHQ7CiAKLQlpZiAoIXRoZXJtYWxfdG1wX3N1cHBvcnRlZCkKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgInRlbXBlcmF0dXJlczpcdG5vdCBzdXBwb3J0ZWRcbiIpOwotCWVsc2UgewotCQlpbnQgaSwgdDsKLQkJY2hhciB0bXBpW10gPSAiVE1QaSI7Ci0JCXM4IHRtcFs4XTsKKwluID0gdGhlcm1hbF9nZXRfc2Vuc29ycygmdCk7CisJaWYgKHVubGlrZWx5KG4gPCAwKSkKKwkJcmV0dXJuIG47CiAKLQkJaWYgKHRoZXJtYWxfdXBkdF9zdXBwb3J0ZWQpCi0JCQlpZiAoIWFjcGlfZXZhbGYoZWNfaGFuZGxlLCBOVUxMLCAiVVBEVCIsICJ2IikpCi0JCQkJcmV0dXJuIC1FSU87CisJbGVuICs9IHNwcmludGYocCArIGxlbiwgInRlbXBlcmF0dXJlczpcdCIpOwogCi0JCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJCXRtcGlbM10gPSAnMCcgKyBpOwotCQkJaWYgKCFhY3BpX2V2YWxmKGVjX2hhbmRsZSwgJnQsIHRtcGksICJkIikpCi0JCQkJcmV0dXJuIC1FSU87Ci0JCQlpZiAodGhlcm1hbF91cGR0X3N1cHBvcnRlZCkKLQkJCQl0bXBbaV0gPSAodCAtIDI3MzIgKyA1KSAvIDEwOwotCQkJZWxzZQotCQkJCXRtcFtpXSA9IHQ7Ci0JCX0KLQotCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLAotCQkJICAgICAgICJ0ZW1wZXJhdHVyZXM6XHQlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKLQkJCSAgICAgICB0bXBbMF0sIHRtcFsxXSwgdG1wWzJdLCB0bXBbM10sCi0JCQkgICAgICAgdG1wWzRdLCB0bXBbNV0sIHRtcFs2XSwgdG1wWzddKTsKLQl9CisJaWYgKG4gPiAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCAobiAtIDEpOyBpKyspCisJCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiJWQgIiwgdC50ZW1wW2ldIC8gMTAwMCk7CisJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICIlZFxuIiwgdC50ZW1wW2ldIC8gMTAwMCk7CisJfSBlbHNlCisJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJub3Qgc3VwcG9ydGVkXG4iKTsKIAogCXJldHVybiBsZW47CiB9CkBAIC0xMzgxLDEyICsxNjE4LDIzIEBACiAKIHN0YXRpYyBpbnQgYnJpZ2h0bmVzc19vZmZzZXQgPSAweDMxOwogCitzdGF0aWMgaW50IGJyaWdodG5lc3NfZ2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwl1OCBsZXZlbDsKKwlpZiAoIWFjcGlfZWNfcmVhZChicmlnaHRuZXNzX29mZnNldCwgJmxldmVsKSkKKwkJcmV0dXJuIC1FSU87CisKKwlsZXZlbCAmPSAweDc7CisKKwlyZXR1cm4gbGV2ZWw7Cit9CisKIHN0YXRpYyBpbnQgYnJpZ2h0bmVzc19yZWFkKGNoYXIgKnApCiB7CiAJaW50IGxlbiA9IDA7Ci0JdTggbGV2ZWw7CisJaW50IGxldmVsOwogCi0JaWYgKCFhY3BpX2VjX3JlYWQoYnJpZ2h0bmVzc19vZmZzZXQsICZsZXZlbCkpIHsKKwlpZiAoKGxldmVsID0gYnJpZ2h0bmVzc19nZXQoTlVMTCkpIDwgMCkgewogCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAibGV2ZWw6XHRcdHVucmVhZGFibGVcbiIpOwogCX0gZWxzZSB7CiAJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJsZXZlbDpcdFx0JWRcbiIsIGxldmVsICYgMHg3KTsKQEAgLTE0MDEsMTYgKzE2NDksMzQgQEAKICNkZWZpbmUgQlJJR0hUTkVTU19VUAk0CiAjZGVmaW5lIEJSSUdIVE5FU1NfRE9XTgk1CiAKLXN0YXRpYyBpbnQgYnJpZ2h0bmVzc193cml0ZShjaGFyICpidWYpCitzdGF0aWMgaW50IGJyaWdodG5lc3Nfc2V0KGludCB2YWx1ZSkKIHsKIAlpbnQgY21vc19jbWQsIGluYywgaTsKLQl1OCBsZXZlbDsKKwlpbnQgY3VycmVudF92YWx1ZSA9IGJyaWdodG5lc3NfZ2V0KE5VTEwpOworCisJdmFsdWUgJj0gNzsKKworCWNtb3NfY21kID0gdmFsdWUgPiBjdXJyZW50X3ZhbHVlID8gQlJJR0hUTkVTU19VUCA6IEJSSUdIVE5FU1NfRE9XTjsKKwlpbmMgPSB2YWx1ZSA+IGN1cnJlbnRfdmFsdWUgPyAxIDogLTE7CisJZm9yIChpID0gY3VycmVudF92YWx1ZTsgaSAhPSB2YWx1ZTsgaSArPSBpbmMpIHsKKwkJaWYgKCFjbW9zX2V2YWwoY21vc19jbWQpKQorCQkJcmV0dXJuIC1FSU87CisJCWlmICghYWNwaV9lY193cml0ZShicmlnaHRuZXNzX29mZnNldCwgaSArIGluYykpCisJCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBicmlnaHRuZXNzX3dyaXRlKGNoYXIgKmJ1ZikKK3sKKwlpbnQgbGV2ZWw7CiAJaW50IG5ld19sZXZlbDsKIAljaGFyICpjbWQ7CiAKIAl3aGlsZSAoKGNtZCA9IG5leHRfY21kKCZidWYpKSkgewotCQlpZiAoIWFjcGlfZWNfcmVhZChicmlnaHRuZXNzX29mZnNldCwgJmxldmVsKSkKLQkJCXJldHVybiAtRUlPOworCQlpZiAoKGxldmVsID0gYnJpZ2h0bmVzc19nZXQoTlVMTCkpIDwgMCkKKwkJCXJldHVybiBsZXZlbDsKIAkJbGV2ZWwgJj0gNzsKIAogCQlpZiAoc3RybGVuY21wKGNtZCwgInVwIikgPT0gMCkgewpAQCAtMTQyMywxOSArMTY4OSw0NCBAQAogCQl9IGVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWNtb3NfY21kID0gbmV3X2xldmVsID4gbGV2ZWwgPyBCUklHSFRORVNTX1VQIDogQlJJR0hUTkVTU19ET1dOOwotCQlpbmMgPSBuZXdfbGV2ZWwgPiBsZXZlbCA/IDEgOiAtMTsKLQkJZm9yIChpID0gbGV2ZWw7IGkgIT0gbmV3X2xldmVsOyBpICs9IGluYykgewotCQkJaWYgKCFjbW9zX2V2YWwoY21vc19jbWQpKQotCQkJCXJldHVybiAtRUlPOwotCQkJaWYgKCFhY3BpX2VjX3dyaXRlKGJyaWdodG5lc3Nfb2Zmc2V0LCBpICsgaW5jKSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJfQorCQlicmlnaHRuZXNzX3NldChuZXdfbGV2ZWwpOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJyaWdodG5lc3NfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJcmV0dXJuIGJyaWdodG5lc3Nfc2V0KGJkLT5wcm9wcy0+YnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgaWJtX2JhY2tsaWdodF9kYXRhID0geworICAgICAgICAub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKyAgICAgICAgLmdldF9icmlnaHRuZXNzID0gYnJpZ2h0bmVzc19nZXQsCisgICAgICAgIC51cGRhdGVfc3RhdHVzICA9IGJyaWdodG5lc3NfdXBkYXRlX3N0YXR1cywKKyAgICAgICAgLm1heF9icmlnaHRuZXNzID0gNywKK307CisKK3N0YXRpYyBpbnQgYnJpZ2h0bmVzc19pbml0KHZvaWQpCit7CisJaWJtX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJpYm0iLCBOVUxMLCBOVUxMLAorCQkJCQkJCSAmaWJtX2JhY2tsaWdodF9kYXRhKTsKKwlpZiAoSVNfRVJSKGlibV9iYWNrbGlnaHRfZGV2aWNlKSkgeworCQlwcmludGsoSUJNX0VSUiAiQ291bGQgbm90IHJlZ2lzdGVyIGJhY2tsaWdodCBkZXZpY2VcbiIpOworCQlyZXR1cm4gUFRSX0VSUihpYm1fYmFja2xpZ2h0X2RldmljZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJyaWdodG5lc3NfZXhpdCh2b2lkKQoreworCWlmIChpYm1fYmFja2xpZ2h0X2RldmljZSkgeworCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoaWJtX2JhY2tsaWdodF9kZXZpY2UpOworCQlpYm1fYmFja2xpZ2h0X2RldmljZSA9IE5VTEw7CisJfQorfQorCiBzdGF0aWMgaW50IHZvbHVtZV9vZmZzZXQgPSAweDMwOwogCiBzdGF0aWMgaW50IHZvbHVtZV9yZWFkKGNoYXIgKnApCkBAIC0xNTIyLDkwICsxODEzLDQ4NiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZhbl9zdGF0dXNfb2Zmc2V0ID0gMHgyZjsKLXN0YXRpYyBpbnQgZmFuX3JwbV9vZmZzZXQgPSAweDg0Oworc3RhdGljIGVudW0gZmFuX3N0YXR1c19hY2Nlc3NfbW9kZSBmYW5fc3RhdHVzX2FjY2Vzc19tb2RlOworc3RhdGljIGVudW0gZmFuX2NvbnRyb2xfYWNjZXNzX21vZGUgZmFuX2NvbnRyb2xfYWNjZXNzX21vZGU7CitzdGF0aWMgZW51bSBmYW5fY29udHJvbF9jb21tYW5kcyBmYW5fY29udHJvbF9jb21tYW5kczsKKworc3RhdGljIGludCBmYW5fY29udHJvbF9zdGF0dXNfa25vd247CitzdGF0aWMgdTggZmFuX2NvbnRyb2xfaW5pdGlhbF9zdGF0dXM7CisKK3N0YXRpYyB2b2lkIGZhbl93YXRjaGRvZ19maXJlKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCk7CitzdGF0aWMgaW50IGZhbl93YXRjaGRvZ19tYXhpbnRlcnZhbDsKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhmYW5fd2F0Y2hkb2dfdGFzaywgZmFuX3dhdGNoZG9nX2ZpcmUpOworCitzdGF0aWMgaW50IGZhbl9pbml0KHZvaWQpCit7CisJZmFuX3N0YXR1c19hY2Nlc3NfbW9kZSA9IElCTUFDUElfRkFOX05PTkU7CisJZmFuX2NvbnRyb2xfYWNjZXNzX21vZGUgPSBJQk1BQ1BJX0ZBTl9XUl9OT05FOworCWZhbl9jb250cm9sX2NvbW1hbmRzID0gMDsKKwlmYW5fY29udHJvbF9zdGF0dXNfa25vd24gPSAxOworCWZhbl93YXRjaGRvZ19tYXhpbnRlcnZhbCA9IDA7CisKKwlpZiAoZ2Zhbl9oYW5kbGUpIHsKKwkJLyogNTcwLCA2MDBlL3gsIDc3MGUsIDc3MHggKi8KKwkJZmFuX3N0YXR1c19hY2Nlc3NfbW9kZSA9IElCTUFDUElfRkFOX1JEX0FDUElfR0ZBTjsKKwl9IGVsc2UgeworCQkvKiBhbGwgb3RoZXIgVGhpbmtQYWRzOiBub3RlIHRoYXQgZXZlbiBvbGQtc3R5bGUKKwkJICogVGhpbmtQYWQgRUNzIHN1cHBvcnRzIHRoZSBmYW4gY29udHJvbCByZWdpc3RlciAqLworCQlpZiAobGlrZWx5KGFjcGlfZWNfcmVhZChmYW5fc3RhdHVzX29mZnNldCwKKwkJCQkJJmZhbl9jb250cm9sX2luaXRpYWxfc3RhdHVzKSkpIHsKKwkJCWZhbl9zdGF0dXNfYWNjZXNzX21vZGUgPSBJQk1BQ1BJX0ZBTl9SRF9UUEVDOworCisJCQkvKiBJbiBzb21lIFRoaW5rUGFkcywgbmVpdGhlciB0aGUgRUMgbm9yIHRoZSBBQ1BJCisJCQkgKiBEU0RUIGluaXRpYWxpemUgdGhlIGZhbiBzdGF0dXMsIGFuZCBpdCBlbmRzIHVwCisJCQkgKiBiZWluZyBzZXQgdG8gMHgwNyB3aGVuIGl0ICpjb3VsZCogYmUgZWl0aGVyCisJCQkgKiAweDA3IG9yIDB4ODAuCisJCQkgKgorCQkJICogRW5hYmxlIGZvciBUUC0xWSAoVDQzKSwgVFAtNzggKFI1MWUpLAorCQkJICogVFAtNzYgKFI1MiksIFRQLTcwIChUNDMsIFI1MiksIHdoaWNoIGFyZSBrbm93bgorCQkJICogdG8gYmUgYnVnZ3kuICovCisJCQlpZiAoZmFuX2NvbnRyb2xfaW5pdGlhbF9zdGF0dXMgPT0gMHgwNyAmJgorCQkJICAgIGlibV90aGlua3BhZF9lY19mb3VuZCAmJgorCQkJICAgICgoaWJtX3RoaW5rcGFkX2VjX2ZvdW5kWzBdID09ICcxJyAmJgorCQkJICAgICAgaWJtX3RoaW5rcGFkX2VjX2ZvdW5kWzFdID09ICdZJykgfHwKKwkJCSAgICAgKGlibV90aGlua3BhZF9lY19mb3VuZFswXSA9PSAnNycgJiYKKwkJCSAgICAgIChpYm1fdGhpbmtwYWRfZWNfZm91bmRbMV0gPT0gJzYnIHx8CisJCQkgICAgICAgaWJtX3RoaW5rcGFkX2VjX2ZvdW5kWzFdID09ICc4JyB8fAorCQkJICAgICAgIGlibV90aGlua3BhZF9lY19mb3VuZFsxXSA9PSAnMCcpKQorCQkJICAgICkpIHsKKwkJCQlwcmludGsoSUJNX05PVElDRQorCQkJCSAgICAgICAiZmFuX2luaXQ6IGluaXRpYWwgZmFuIHN0YXR1cyBpcyAiCisJCQkJICAgICAgICJ1bmtub3duLCBhc3N1bWluZyBpdCBpcyBpbiBhdXRvICIKKwkJCQkgICAgICAgIm1vZGVcbiIpOworCQkJCWZhbl9jb250cm9sX3N0YXR1c19rbm93biA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludGsoSUJNX0VSUgorCQkJICAgICAgICJUaGlua1BhZCBBQ1BJIEVDIGFjY2VzcyBtaXNiZWhhdmluZywgIgorCQkJICAgICAgICJmYW4gc3RhdHVzIGFuZCBjb250cm9sIHVuYXZhaWxhYmxlXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKHNmYW5faGFuZGxlKSB7CisJCS8qIDU3MCwgNzcweC1KTCAqLworCQlmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSA9IElCTUFDUElfRkFOX1dSX0FDUElfU0ZBTjsKKwkJZmFuX2NvbnRyb2xfY29tbWFuZHMgfD0KKwkJICAgIElCTUFDUElfRkFOX0NNRF9MRVZFTCB8IElCTUFDUElfRkFOX0NNRF9FTkFCTEU7CisJfSBlbHNlIHsKKwkJaWYgKCFnZmFuX2hhbmRsZSkgeworCQkJLyogZ2ZhbiB3aXRob3V0IHNmYW4gbWVhbnMgbm8gZmFuIGNvbnRyb2wgKi8KKwkJCS8qIGFsbCBvdGhlciBtb2RlbHMgaW1wbGVtZW50IFRQIEVDIDB4MmYgY29udHJvbCAqLworCisJCQlpZiAoZmFuc19oYW5kbGUpIHsKKwkJCQkvKiBYMzEsIFg0MCwgWDQxICovCisJCQkJZmFuX2NvbnRyb2xfYWNjZXNzX21vZGUgPQorCQkJCSAgICBJQk1BQ1BJX0ZBTl9XUl9BQ1BJX0ZBTlM7CisJCQkJZmFuX2NvbnRyb2xfY29tbWFuZHMgfD0KKwkJCQkgICAgSUJNQUNQSV9GQU5fQ01EX1NQRUVEIHwKKwkJCQkgICAgSUJNQUNQSV9GQU5fQ01EX0xFVkVMIHwKKwkJCQkgICAgSUJNQUNQSV9GQU5fQ01EX0VOQUJMRTsKKwkJCX0gZWxzZSB7CisJCQkJZmFuX2NvbnRyb2xfYWNjZXNzX21vZGUgPSBJQk1BQ1BJX0ZBTl9XUl9UUEVDOworCQkJCWZhbl9jb250cm9sX2NvbW1hbmRzIHw9CisJCQkJICAgIElCTUFDUElfRkFOX0NNRF9MRVZFTCB8CisJCQkJICAgIElCTUFDUElfRkFOX0NNRF9FTkFCTEU7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmYW5fZ2V0X3N0YXR1cyh1OCAqc3RhdHVzKQoreworCXU4IHM7CisKKwkvKiBUT0RPOgorCSAqIEFkZCBJQk1BQ1BJX0ZBTl9SRF9BQ1BJX0ZBTlMgPyAqLworCisJc3dpdGNoIChmYW5fc3RhdHVzX2FjY2Vzc19tb2RlKSB7CisJY2FzZSBJQk1BQ1BJX0ZBTl9SRF9BQ1BJX0dGQU46CisJCS8qIDU3MCwgNjAwZS94LCA3NzBlLCA3NzB4ICovCisKKwkJaWYgKHVubGlrZWx5KCFhY3BpX2V2YWxmKGdmYW5faGFuZGxlLCAmcywgTlVMTCwgImQiKSkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAobGlrZWx5KHN0YXR1cykpCisJCQkqc3RhdHVzID0gcyAmIDB4MDc7CisKKwkJYnJlYWs7CisKKwljYXNlIElCTUFDUElfRkFOX1JEX1RQRUM6CisJCS8qIGFsbCBleGNlcHQgNTcwLCA2MDBlL3gsIDc3MGUsIDc3MHggKi8KKwkJaWYgKHVubGlrZWx5KCFhY3BpX2VjX3JlYWQoZmFuX3N0YXR1c19vZmZzZXQsICZzKSkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAobGlrZWx5KHN0YXR1cykpCisJCQkqc3RhdHVzID0gczsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmFuX2dldF9zcGVlZCh1bnNpZ25lZCBpbnQgKnNwZWVkKQoreworCXU4IGhpLCBsbzsKKworCXN3aXRjaCAoZmFuX3N0YXR1c19hY2Nlc3NfbW9kZSkgeworCWNhc2UgSUJNQUNQSV9GQU5fUkRfVFBFQzoKKwkJLyogYWxsIGV4Y2VwdCA1NzAsIDYwMGUveCwgNzcwZSwgNzcweCAqLworCQlpZiAodW5saWtlbHkoIWFjcGlfZWNfcmVhZChmYW5fcnBtX29mZnNldCwgJmxvKSB8fAorCQkJICAgICAhYWNwaV9lY19yZWFkKGZhbl9ycG1fb2Zmc2V0ICsgMSwgJmhpKSkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAobGlrZWx5KHNwZWVkKSkKKwkJCSpzcGVlZCA9IChoaSA8PCA4KSB8IGxvOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmFuX2V4aXQodm9pZCkKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrKCZmYW5fd2F0Y2hkb2dfdGFzayk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKK30KKworc3RhdGljIHZvaWQgZmFuX3dhdGNoZG9nX3Jlc2V0KHZvaWQpCit7CisJc3RhdGljIGludCBmYW5fd2F0Y2hkb2dfYWN0aXZlID0gMDsKKworCWlmIChmYW5fd2F0Y2hkb2dfYWN0aXZlKQorCQljYW5jZWxfZGVsYXllZF93b3JrKCZmYW5fd2F0Y2hkb2dfdGFzayk7CisKKwlpZiAoZmFuX3dhdGNoZG9nX21heGludGVydmFsID4gMCkgeworCQlmYW5fd2F0Y2hkb2dfYWN0aXZlID0gMTsKKwkJaWYgKCFzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmZhbl93YXRjaGRvZ190YXNrLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoZmFuX3dhdGNoZG9nX21heGludGVydmFsCisJCQkJCQkgKiAxMDAwKSkpIHsKKwkJCXByaW50ayhJQk1fRVJSICJmYWlsZWQgdG8gc2NoZWR1bGUgdGhlIGZhbiB3YXRjaGRvZywgIgorCQkJICAgICAgICJ3YXRjaGRvZyB3aWxsIG5vdCB0cmlnZ2VyXG4iKTsKKwkJfQorCX0gZWxzZQorCQlmYW5fd2F0Y2hkb2dfYWN0aXZlID0gMDsKK30KIAogc3RhdGljIGludCBmYW5fcmVhZChjaGFyICpwKQogewogCWludCBsZW4gPSAwOwotCWludCBzOwotCXU4IGxvLCBoaSwgc3RhdHVzOworCWludCByYzsKKwl1OCBzdGF0dXM7CisJdW5zaWduZWQgaW50IHNwZWVkID0gMDsKIAotCWlmIChnZmFuX2hhbmRsZSkgeworCXN3aXRjaCAoZmFuX3N0YXR1c19hY2Nlc3NfbW9kZSkgeworCWNhc2UgSUJNQUNQSV9GQU5fUkRfQUNQSV9HRkFOOgogCQkvKiA1NzAsIDYwMGUveCwgNzcwZSwgNzcweCAqLwotCQlpZiAoIWFjcGlfZXZhbGYoZ2Zhbl9oYW5kbGUsICZzLCBOVUxMLCAiZCIpKQotCQkJcmV0dXJuIC1FSU87CisJCWlmICgocmMgPSBmYW5fZ2V0X3N0YXR1cygmc3RhdHVzKSkgPCAwKQorCQkJcmV0dXJuIHJjOwogCi0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJsZXZlbDpcdFx0JWRcbiIsIHMpOwotCX0gZWxzZSB7CisJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdCVzXG4iCisJCQkgICAgICAgImxldmVsOlx0XHQlZFxuIiwKKwkJCSAgICAgICAoc3RhdHVzICE9IDApID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwgc3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIElCTUFDUElfRkFOX1JEX1RQRUM6CiAJCS8qIGFsbCBleGNlcHQgNTcwLCA2MDBlL3gsIDc3MGUsIDc3MHggKi8KLQkJaWYgKCFhY3BpX2VjX3JlYWQoZmFuX3N0YXR1c19vZmZzZXQsICZzdGF0dXMpKQotCQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgInN0YXR1czpcdFx0dW5yZWFkYWJsZVxuIik7Ci0JCWVsc2UKLQkJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdCVzXG4iLAotCQkJCSAgICAgICBlbmFibGVkKHN0YXR1cywgNykpOworCQlpZiAoKHJjID0gZmFuX2dldF9zdGF0dXMoJnN0YXR1cykpIDwgMCkKKwkJCXJldHVybiByYzsKIAotCQlpZiAoIWFjcGlfZWNfcmVhZChmYW5fcnBtX29mZnNldCwgJmxvKSB8fAotCQkgICAgIWFjcGlfZWNfcmVhZChmYW5fcnBtX29mZnNldCArIDEsICZoaSkpCi0JCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3BlZWQ6XHRcdHVucmVhZGFibGVcbiIpOworCQlpZiAodW5saWtlbHkoIWZhbl9jb250cm9sX3N0YXR1c19rbm93bikpIHsKKwkJCWlmIChzdGF0dXMgIT0gZmFuX2NvbnRyb2xfaW5pdGlhbF9zdGF0dXMpCisJCQkJZmFuX2NvbnRyb2xfc3RhdHVzX2tub3duID0gMTsKKwkJCWVsc2UKKwkJCQkvKiBSZXR1cm4gbW9zdCBsaWtlbHkgc3RhdHVzLiBJbiBmYWN0LCBpdAorCQkJCSAqIG1pZ2h0IGJlIHRoZSBvbmx5IHBvc3NpYmxlIHN0YXR1cyAqLworCQkJCXN0YXR1cyA9IElCTUFDUElfRkFOX0VDX0FVVE87CisJCX0KKworCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3RhdHVzOlx0XHQlc1xuIiwKKwkJCSAgICAgICAoc3RhdHVzICE9IDApID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisKKwkJLyogTm8gVGhpbmtQYWQgYm9vdHMgb24gZGlzZW5nYWdlZCBtb2RlLCB3ZSBjYW4gc2FmZWx5CisJCSAqIGFzc3VtZSB0aGUgdGFjaG9tZXRlciBpcyBvbmxpbmUgaWYgZmFuIGNvbnRyb2wgc3RhdHVzCisJCSAqIHdhcyB1bmtub3duICovCisJCWlmICgocmMgPSBmYW5fZ2V0X3NwZWVkKCZzcGVlZCkpIDwgMCkKKwkJCXJldHVybiByYzsKKworCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3BlZWQ6XHRcdCVkXG4iLCBzcGVlZCk7CisKKwkJaWYgKHN0YXR1cyAmIElCTUFDUElfRkFOX0VDX0RJU0VOR0FHRUQpCisJCQkvKiBEaXNlbmdhZ2VkIG1vZGUgdGFrZXMgcHJlY2VkZW5jZSAqLworCQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImxldmVsOlx0XHRkaXNlbmdhZ2VkXG4iKTsKKwkJZWxzZSBpZiAoc3RhdHVzICYgSUJNQUNQSV9GQU5fRUNfQVVUTykKKwkJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJsZXZlbDpcdFx0YXV0b1xuIik7CiAJCWVsc2UKLQkJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzcGVlZDpcdFx0JWRcbiIsCi0JCQkJICAgICAgIChoaSA8PCA4KSArIGxvKTsKKwkJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJsZXZlbDpcdFx0JWRcbiIsIHN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSBJQk1BQ1BJX0ZBTl9OT05FOgorCWRlZmF1bHQ6CisJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJzdGF0dXM6XHRcdG5vdCBzdXBwb3J0ZWRcbiIpOwogCX0KIAotCWlmIChzZmFuX2hhbmRsZSkKLQkJLyogNTcwLCA3NzB4LUpMICovCi0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdGxldmVsIDxsZXZlbD4iCi0JCQkgICAgICAgIiAoPGxldmVsPiBpcyAwLTcpXG4iKTsKLQlpZiAoIWdmYW5faGFuZGxlKQotCQkvKiBhbGwgZXhjZXB0IDU3MCwgNjAwZS94LCA3NzBlLCA3NzB4ICovCi0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJjb21tYW5kczpcdGVuYWJsZSwgZGlzYWJsZVxuIik7Ci0JaWYgKGZhbnNfaGFuZGxlKQotCQkvKiBYMzEsIFg0MCAqLworCWlmIChmYW5fY29udHJvbF9jb21tYW5kcyAmIElCTUFDUElfRkFOX0NNRF9MRVZFTCkgeworCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAiY29tbWFuZHM6XHRsZXZlbCA8bGV2ZWw+Iik7CisKKwkJc3dpdGNoIChmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSkgeworCQljYXNlIElCTUFDUElfRkFOX1dSX0FDUElfU0ZBTjoKKwkJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICIgKDxsZXZlbD4gaXMgMC03KVxuIik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgIiAoPGxldmVsPiBpcyAwLTcsICIKKwkJCQkgICAgICAgImF1dG8sIGRpc2VuZ2FnZWQpXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZhbl9jb250cm9sX2NvbW1hbmRzICYgSUJNQUNQSV9GQU5fQ01EX0VOQUJMRSkKKwkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0ZW5hYmxlLCBkaXNhYmxlXG4iCisJCQkgICAgICAgImNvbW1hbmRzOlx0d2F0Y2hkb2cgPHRpbWVvdXQ+ICg8dGltZW91dD4gaXMgMCAob2ZmKSwgIgorCQkJICAgICAgICIxLTEyMCAoc2Vjb25kcykpXG4iKTsKKworCWlmIChmYW5fY29udHJvbF9jb21tYW5kcyAmIElCTUFDUElfRkFOX0NNRF9TUEVFRCkKIAkJbGVuICs9IHNwcmludGYocCArIGxlbiwgImNvbW1hbmRzOlx0c3BlZWQgPHNwZWVkPiIKIAkJCSAgICAgICAiICg8c3BlZWQ+IGlzIDAtNjU1MzUpXG4iKTsKIAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBpbnQgZmFuX3dyaXRlKGNoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgZmFuX3NldF9sZXZlbChpbnQgbGV2ZWwpCiB7Ci0JY2hhciAqY21kOwotCWludCBsZXZlbCwgc3BlZWQ7Ci0KLQl3aGlsZSAoKGNtZCA9IG5leHRfY21kKCZidWYpKSkgewotCQlpZiAoc2Zhbl9oYW5kbGUgJiYKLQkJICAgIHNzY2FuZihjbWQsICJsZXZlbCAlZCIsICZsZXZlbCkgPT0gMSAmJgotCQkgICAgbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSA3KSB7Ci0JCQkvKiA1NzAsIDc3MHgtSkwgKi8KKwlzd2l0Y2ggKGZhbl9jb250cm9sX2FjY2Vzc19tb2RlKSB7CisJY2FzZSBJQk1BQ1BJX0ZBTl9XUl9BQ1BJX1NGQU46CisJCWlmIChsZXZlbCA+PSAwICYmIGxldmVsIDw9IDcpIHsKIAkJCWlmICghYWNwaV9ldmFsZihzZmFuX2hhbmRsZSwgTlVMTCwgTlVMTCwgInZkIiwgbGV2ZWwpKQogCQkJCXJldHVybiAtRUlPOwotCQl9IGVsc2UgaWYgKCFnZmFuX2hhbmRsZSAmJiBzdHJsZW5jbXAoY21kLCAiZW5hYmxlIikgPT0gMCkgewotCQkJLyogYWxsIGV4Y2VwdCA1NzAsIDYwMGUveCwgNzcwZSwgNzcweCAqLwotCQkJaWYgKCFhY3BpX2VjX3dyaXRlKGZhbl9zdGF0dXNfb2Zmc2V0LCAweDgwKSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJfSBlbHNlIGlmICghZ2Zhbl9oYW5kbGUgJiYgc3RybGVuY21wKGNtZCwgImRpc2FibGUiKSA9PSAwKSB7Ci0JCQkvKiBhbGwgZXhjZXB0IDU3MCwgNjAwZS94LCA3NzBlLCA3NzB4ICovCi0JCQlpZiAoIWFjcGlfZWNfd3JpdGUoZmFuX3N0YXR1c19vZmZzZXQsIDB4MDApKQotCQkJCXJldHVybiAtRUlPOwotCQl9IGVsc2UgaWYgKGZhbnNfaGFuZGxlICYmCi0JCQkgICBzc2NhbmYoY21kLCAic3BlZWQgJWQiLCAmc3BlZWQpID09IDEgJiYKLQkJCSAgIHNwZWVkID49IDAgJiYgc3BlZWQgPD0gNjU1MzUpIHsKLQkJCS8qIFgzMSwgWDQwICovCisJCX0gZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCisJY2FzZSBJQk1BQ1BJX0ZBTl9XUl9BQ1BJX0ZBTlM6CisJY2FzZSBJQk1BQ1BJX0ZBTl9XUl9UUEVDOgorCQlpZiAoKGxldmVsICE9IElCTUFDUElfRkFOX0VDX0FVVE8pICYmCisJCSAgICAobGV2ZWwgIT0gSUJNQUNQSV9GQU5fRUNfRElTRU5HQUdFRCkgJiYKKwkJICAgICgobGV2ZWwgPCAwKSB8fCAobGV2ZWwgPiA3KSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoIWFjcGlfZWNfd3JpdGUoZmFuX3N0YXR1c19vZmZzZXQsIGxldmVsKSkKKwkJCXJldHVybiAtRUlPOworCQllbHNlCisJCQlmYW5fY29udHJvbF9zdGF0dXNfa25vd24gPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZhbl9zZXRfZW5hYmxlKHZvaWQpCit7CisJdTggczsKKwlpbnQgcmM7CisKKwlzd2l0Y2ggKGZhbl9jb250cm9sX2FjY2Vzc19tb2RlKSB7CisJY2FzZSBJQk1BQ1BJX0ZBTl9XUl9BQ1BJX0ZBTlM6CisJY2FzZSBJQk1BQ1BJX0ZBTl9XUl9UUEVDOgorCQlpZiAoKHJjID0gZmFuX2dldF9zdGF0dXMoJnMpKSA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJLyogRG9uJ3QgZ28gb3V0IG9mIGVtZXJnZW5jeSBmYW4gbW9kZSAqLworCQlpZiAocyAhPSA3KQorCQkJcyA9IElCTUFDUElfRkFOX0VDX0FVVE87CisKKwkJaWYgKCFhY3BpX2VjX3dyaXRlKGZhbl9zdGF0dXNfb2Zmc2V0LCBzKSkKKwkJCXJldHVybiAtRUlPOworCQllbHNlCisJCQlmYW5fY29udHJvbF9zdGF0dXNfa25vd24gPSAxOworCQlicmVhazsKKworCWNhc2UgSUJNQUNQSV9GQU5fV1JfQUNQSV9TRkFOOgorCQlpZiAoKHJjID0gZmFuX2dldF9zdGF0dXMoJnMpKSA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJcyAmPSAweDA3OworCisJCS8qIFNldCBmYW4gdG8gYXQgbGVhc3QgbGV2ZWwgNCAqLworCQlpZiAocyA8IDQpCisJCQlzID0gNDsKKworCQlpZiAoIWFjcGlfZXZhbGYoc2Zhbl9oYW5kbGUsIE5VTEwsIE5VTEwsICJ2ZCIsIHMpKQorCQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmFuX3NldF9kaXNhYmxlKHZvaWQpCit7CisJc3dpdGNoIChmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSkgeworCWNhc2UgSUJNQUNQSV9GQU5fV1JfQUNQSV9GQU5TOgorCWNhc2UgSUJNQUNQSV9GQU5fV1JfVFBFQzoKKwkJaWYgKCFhY3BpX2VjX3dyaXRlKGZhbl9zdGF0dXNfb2Zmc2V0LCAweDAwKSkKKwkJCXJldHVybiAtRUlPOworCQllbHNlCisJCQlmYW5fY29udHJvbF9zdGF0dXNfa25vd24gPSAxOworCQlicmVhazsKKworCWNhc2UgSUJNQUNQSV9GQU5fV1JfQUNQSV9TRkFOOgorCQlpZiAoIWFjcGlfZXZhbGYoc2Zhbl9oYW5kbGUsIE5VTEwsIE5VTEwsICJ2ZCIsIDB4MDApKQorCQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmFuX3NldF9zcGVlZChpbnQgc3BlZWQpCit7CisJc3dpdGNoIChmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSkgeworCWNhc2UgSUJNQUNQSV9GQU5fV1JfQUNQSV9GQU5TOgorCQlpZiAoc3BlZWQgPj0gMCAmJiBzcGVlZCA8PSA2NTUzNSkgewogCQkJaWYgKCFhY3BpX2V2YWxmKGZhbnNfaGFuZGxlLCBOVUxMLCBOVUxMLCAidmRkZCIsCiAJCQkJCXNwZWVkLCBzcGVlZCwgc3BlZWQpKQogCQkJCXJldHVybiAtRUlPOwogCQl9IGVsc2UKIAkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZhbl93cml0ZV9jbWRfbGV2ZWwoY29uc3QgY2hhciAqY21kLCBpbnQgKnJjKQoreworCWludCBsZXZlbDsKKworCWlmIChzdHJsZW5jbXAoY21kLCAibGV2ZWwgYXV0byIpID09IDApCisJCWxldmVsID0gSUJNQUNQSV9GQU5fRUNfQVVUTzsKKwllbHNlIGlmIChzdHJsZW5jbXAoY21kLCAibGV2ZWwgZGlzZW5nYWdlZCIpID09IDApCisJCWxldmVsID0gSUJNQUNQSV9GQU5fRUNfRElTRU5HQUdFRDsKKwllbHNlIGlmIChzc2NhbmYoY21kLCAibGV2ZWwgJWQiLCAmbGV2ZWwpICE9IDEpCisJCXJldHVybiAwOworCisJaWYgKCgqcmMgPSBmYW5fc2V0X2xldmVsKGxldmVsKSkgPT0gLUVOWElPKQorCQlwcmludGsoSUJNX0VSUiAibGV2ZWwgY29tbWFuZCBhY2NlcHRlZCBmb3IgdW5zdXBwb3J0ZWQgIgorCQkgICAgICAgImFjY2VzcyBtb2RlICVkIiwgZmFuX2NvbnRyb2xfYWNjZXNzX21vZGUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmFuX3dyaXRlX2NtZF9lbmFibGUoY29uc3QgY2hhciAqY21kLCBpbnQgKnJjKQoreworCWlmIChzdHJsZW5jbXAoY21kLCAiZW5hYmxlIikgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKCpyYyA9IGZhbl9zZXRfZW5hYmxlKCkpID09IC1FTlhJTykKKwkJcHJpbnRrKElCTV9FUlIgImVuYWJsZSBjb21tYW5kIGFjY2VwdGVkIGZvciB1bnN1cHBvcnRlZCAiCisJCSAgICAgICAiYWNjZXNzIG1vZGUgJWQiLCBmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmYW5fd3JpdGVfY21kX2Rpc2FibGUoY29uc3QgY2hhciAqY21kLCBpbnQgKnJjKQoreworCWlmIChzdHJsZW5jbXAoY21kLCAiZGlzYWJsZSIpICE9IDApCisJCXJldHVybiAwOworCisJaWYgKCgqcmMgPSBmYW5fc2V0X2Rpc2FibGUoKSkgPT0gLUVOWElPKQorCQlwcmludGsoSUJNX0VSUiAiZGlzYWJsZSBjb21tYW5kIGFjY2VwdGVkIGZvciB1bnN1cHBvcnRlZCAiCisJCSAgICAgICAiYWNjZXNzIG1vZGUgJWQiLCBmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmYW5fd3JpdGVfY21kX3NwZWVkKGNvbnN0IGNoYXIgKmNtZCwgaW50ICpyYykKK3sKKwlpbnQgc3BlZWQ7CisKKwkvKiBUT0RPOgorCSAqIFN1cHBvcnQgc3BlZWQgPGxvdz4gPG1lZGl1bT4gPGhpZ2g+ID8gKi8KKworCWlmIChzc2NhbmYoY21kLCAic3BlZWQgJWQiLCAmc3BlZWQpICE9IDEpCisJCXJldHVybiAwOworCisJaWYgKCgqcmMgPSBmYW5fc2V0X3NwZWVkKHNwZWVkKSkgPT0gLUVOWElPKQorCQlwcmludGsoSUJNX0VSUiAic3BlZWQgY29tbWFuZCBhY2NlcHRlZCBmb3IgdW5zdXBwb3J0ZWQgIgorCQkgICAgICAgImFjY2VzcyBtb2RlICVkIiwgZmFuX2NvbnRyb2xfYWNjZXNzX21vZGUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmFuX3dyaXRlX2NtZF93YXRjaGRvZyhjb25zdCBjaGFyICpjbWQsIGludCAqcmMpCit7CisJaW50IGludGVydmFsOworCisJaWYgKHNzY2FuZihjbWQsICJ3YXRjaGRvZyAlZCIsICZpbnRlcnZhbCkgIT0gMSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW50ZXJ2YWwgPCAwIHx8IGludGVydmFsID4gMTIwKQorCQkqcmMgPSAtRUlOVkFMOworCWVsc2UKKwkJZmFuX3dhdGNoZG9nX21heGludGVydmFsID0gaW50ZXJ2YWw7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmYW5fd3JpdGUoY2hhciAqYnVmKQoreworCWNoYXIgKmNtZDsKKwlpbnQgcmMgPSAwOworCisJd2hpbGUgKCFyYyAmJiAoY21kID0gbmV4dF9jbWQoJmJ1ZikpKSB7CisJCWlmICghKChmYW5fY29udHJvbF9jb21tYW5kcyAmIElCTUFDUElfRkFOX0NNRF9MRVZFTCkgJiYKKwkJICAgICAgZmFuX3dyaXRlX2NtZF9sZXZlbChjbWQsICZyYykpICYmCisJCSAgICAhKChmYW5fY29udHJvbF9jb21tYW5kcyAmIElCTUFDUElfRkFOX0NNRF9FTkFCTEUpICYmCisJCSAgICAgIChmYW5fd3JpdGVfY21kX2VuYWJsZShjbWQsICZyYykgfHwKKwkJICAgICAgIGZhbl93cml0ZV9jbWRfZGlzYWJsZShjbWQsICZyYykgfHwKKwkJICAgICAgIGZhbl93cml0ZV9jbWRfd2F0Y2hkb2coY21kLCAmcmMpKSkgJiYKKwkJICAgICEoKGZhbl9jb250cm9sX2NvbW1hbmRzICYgSUJNQUNQSV9GQU5fQ01EX1NQRUVEKSAmJgorCQkgICAgICBmYW5fd3JpdGVfY21kX3NwZWVkKGNtZCwgJnJjKSkKKwkJICAgICkKKwkJCXJjID0gLUVJTlZBTDsKKwkJZWxzZSBpZiAoIXJjKQorCQkJZmFuX3dhdGNoZG9nX3Jlc2V0KCk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBmYW5fd2F0Y2hkb2dfZmlyZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCit7CisJcHJpbnRrKElCTV9OT1RJQ0UgImZhbiB3YXRjaGRvZzogZW5hYmxpbmcgZmFuXG4iKTsKKwlpZiAoZmFuX3NldF9lbmFibGUoKSkgeworCQlwcmludGsoSUJNX0VSUiAiZmFuIHdhdGNoZG9nOiBlcnJvciB3aGlsZSBlbmFibGluZyBmYW5cbiIpOworCQkvKiByZXNjaGVkdWxlIGZvciBsYXRlciAqLworCQlmYW5fd2F0Y2hkb2dfcmVzZXQoKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaWJtX3N0cnVjdCBpYm1zW10gPSB7CiAJewogCSAubmFtZSA9ICJkcml2ZXIiLAotCSAuaW5pdCA9IGRyaXZlcl9pbml0LAorCSAuaW5pdCA9IGlibV9hY3BpX2RyaXZlcl9pbml0LAogCSAucmVhZCA9IGRyaXZlcl9yZWFkLAogCSB9LAogCXsKQEAgLTE3MDIsNiArMjM4OSw4IEBACiAJIC5uYW1lID0gImJyaWdodG5lc3MiLAogCSAucmVhZCA9IGJyaWdodG5lc3NfcmVhZCwKIAkgLndyaXRlID0gYnJpZ2h0bmVzc193cml0ZSwKKwkgLmluaXQgPSBicmlnaHRuZXNzX2luaXQsCisJIC5leGl0ID0gYnJpZ2h0bmVzc19leGl0LAogCSB9LAogCXsKIAkgLm5hbWUgPSAidm9sdW1lIiwKQEAgLTE3MTIsNiArMjQwMSw4IEBACiAJIC5uYW1lID0gImZhbiIsCiAJIC5yZWFkID0gZmFuX3JlYWQsCiAJIC53cml0ZSA9IGZhbl93cml0ZSwKKwkgLmluaXQgPSBmYW5faW5pdCwKKwkgLmV4aXQgPSBmYW5fZXhpdCwKIAkgLmV4cGVyaW1lbnRhbCA9IDEsCiAJIH0sCiB9OwpAQCAtMTcxOSw3ICsyNDEwLDcgQEAKIHN0YXRpYyBpbnQgZGlzcGF0Y2hfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAogCQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBpYm1fc3RydWN0ICppYm0gPSAoc3RydWN0IGlibV9zdHJ1Y3QgKilkYXRhOworCXN0cnVjdCBpYm1fc3RydWN0ICppYm0gPSBkYXRhOwogCWludCBsZW47CiAKIAlpZiAoIWlibSB8fCAhaWJtLT5yZWFkKQpAQCAtMTc0NCw3ICsyNDM1LDcgQEAKIHN0YXRpYyBpbnQgZGlzcGF0Y2hfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogdXNlcmJ1ZiwKIAkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaWJtX3N0cnVjdCAqaWJtID0gKHN0cnVjdCBpYm1fc3RydWN0ICopZGF0YTsKKwlzdHJ1Y3QgaWJtX3N0cnVjdCAqaWJtID0gZGF0YTsKIAljaGFyICprZXJuYnVmOwogCWludCByZXQ7CiAKQEAgLTE3NzMsNyArMjQ2NCw3IEBACiAKIHN0YXRpYyB2b2lkIGRpc3BhdGNoX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaWJtX3N0cnVjdCAqaWJtID0gKHN0cnVjdCBpYm1fc3RydWN0ICopZGF0YTsKKwlzdHJ1Y3QgaWJtX3N0cnVjdCAqaWJtID0gZGF0YTsKIAogCWlmICghaWJtIHx8ICFpYm0tPm5vdGlmeSkKIAkJcmV0dXJuOwpAQCAtMTgwNSw3ICsyNDk2LDcgQEAKIAkJICAgICAgIGlibS0+bmFtZSwgc3RhdHVzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCisJaWJtLT5ub3RpZnlfaW5zdGFsbGVkID0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgxOCwxNCArMjUwOSwxMyBAQAogewogCWludCByZXQ7CiAKLQlpYm0tPmRyaXZlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2RyaXZlciksIEdGUF9LRVJORUwpOworCWlibS0+ZHJpdmVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZHJpdmVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpYm0tPmRyaXZlcikgewogCQlwcmludGsoSUJNX0VSUiAia21hbGxvYyhpYm0tPmRyaXZlcikgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1lbXNldChpYm0tPmRyaXZlciwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX2RyaXZlcikpOwotCXNwcmludGYoaWJtLT5kcml2ZXItPm5hbWUsICIlcy8lcyIsIElCTV9OQU1FLCBpYm0tPm5hbWUpOworCXNwcmludGYoaWJtLT5kcml2ZXItPm5hbWUsICIlc18lcyIsIElCTV9OQU1FLCBpYm0tPm5hbWUpOwogCWlibS0+ZHJpdmVyLT5pZHMgPSBpYm0tPmhpZDsKIAlpYm0tPmRyaXZlci0+b3BzLmFkZCA9ICZpYm1fZGV2aWNlX2FkZDsKIApAQCAtMTg4Miw3ICsyNTcyLDYgQEAKIAkJcmV0ID0gc2V0dXBfbm90aWZ5KGlibSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJaWJtLT5ub3RpZnlfaW5zdGFsbGVkID0gMTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE5NzEsNiArMjY2MCwzMyBAQAogCQlpYm1fZXhpdCgmaWJtc1tpXSk7CiAKIAlyZW1vdmVfcHJvY19lbnRyeShJQk1fRElSLCBhY3BpX3Jvb3RfZGlyKTsKKworCWlmIChpYm1fdGhpbmtwYWRfZWNfZm91bmQpCisJCWtmcmVlKGlibV90aGlua3BhZF9lY19mb3VuZCk7Cit9CisKK3N0YXRpYyBjaGFyKiBfX2luaXQgY2hlY2tfZG1pX2Zvcl9lYyh2b2lkKQoreworCXN0cnVjdCBkbWlfZGV2aWNlICpkZXYgPSBOVUxMOworCWNoYXIgZWNfZndfc3RyaW5nWzE4XTsKKworCS8qCisJICogVGhpbmtQYWQgVDIzIG9yIG5ld2VyLCBBMzEgb3IgbmV3ZXIsIFI1MGUgb3IgbmV3ZXIsCisJICogWDMyIG9yIG5ld2VyLCBhbGwgWiBzZXJpZXM7ICBTb21lIG1vZGVscyBtdXN0IGhhdmUgYW4KKwkgKiB1cC10by1kYXRlIEJJT1Mgb3IgdGhleSB3aWxsIG5vdCBiZSBkZXRlY3RlZC4KKwkgKgorCSAqIFNlZSBodHRwOi8vdGhpbmt3aWtpLm9yZy93aWtpL0xpc3Rfb2ZfRE1JX0lEcworCSAqLworCXdoaWxlICgoZGV2ID0gZG1pX2ZpbmRfZGV2aWNlKERNSV9ERVZfVFlQRV9PRU1fU1RSSU5HLCBOVUxMLCBkZXYpKSkgeworCQlpZiAoc3NjYW5mKGRldi0+bmFtZSwKKwkJCSAgICJJQk0gVGhpbmtQYWQgRW1iZWRkZWQgQ29udHJvbGxlciAtWyUxN2MiLAorCQkJICAgZWNfZndfc3RyaW5nKSA9PSAxKSB7CisJCQllY19md19zdHJpbmdbc2l6ZW9mKGVjX2Z3X3N0cmluZykgLSAxXSA9IDA7CisJCQllY19md19zdHJpbmdbc3RyY3NwbihlY19md19zdHJpbmcsICIgXSIpXSA9IDA7CisJCQlyZXR1cm4ga3N0cmR1cChlY19md19zdHJpbmcsIEdGUF9LRVJORUwpOworCQl9CisJfQorCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2libV9pbml0KHZvaWQpCkBAIC0xOTkyLDYgKzI3MDgsMTIgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJLyogTW9kZWxzIHdpdGggbmV3ZXIgZmlybXdhcmUgcmVwb3J0IHRoZSBFQyBpbiBETUkgKi8KKwlpYm1fdGhpbmtwYWRfZWNfZm91bmQgPSBjaGVja19kbWlfZm9yX2VjKCk7CisJaWYgKGlibV90aGlua3BhZF9lY19mb3VuZCkKKwkJcHJpbnRrKElCTV9JTkZPICJUaGlua1BhZCBFQyBmaXJtd2FyZSAlc1xuIiwKKwkJICAgICAgIGlibV90aGlua3BhZF9lY19mb3VuZCk7CisKIAkvKiB0aGVzZSBoYW5kbGVzIGFyZSBub3QgcmVxdWlyZWQgKi8KIAlJQk1fSEFORExFX0lOSVQodmlkKTsKIAlJQk1fSEFORExFX0lOSVQodmlkMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbmFtZXNwYWNlL25zeGZvYmouYyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4Zm9iai5jCmluZGV4IGExNjNlMWQuLmExOGIxYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4Zm9iai5jCisrKyBiL2RyaXZlcnMvYWNwaS9uYW1lc3BhY2UvbnN4Zm9iai5jCkBAIC01MCw2ICs1MCw1MCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF9pZAorICoKKyAqIFBBUkFNRVRFUlM6ICBIYW5kbGUgICAgICAgICAgLSBIYW5kbGUgb2Ygb2JqZWN0IHdob3NlIGlkIGlzIGRlc2lyZWQKKyAqICAgICAgICAgICAgICByZXRfaWQgICAgICAgICAgLSBXaGVyZSB0aGUgaWQgd2lsbCBiZSBwbGFjZWQKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBvd25lciBpZCBhc3NvY2lhdGVkIHdpdGggYSBoYW5kbGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworYWNwaV9zdGF0dXMgYWNwaV9nZXRfaWQoYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX293bmVyX2lkICogcmV0X2lkKQoreworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCS8qIFBhcmFtZXRlciBWYWxpZGF0aW9uICovCisKKwlpZiAoIXJldF9pZCkgeworCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOworCX0KKworCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gKHN0YXR1cyk7CisJfQorCisJLyogQ29udmVydCBhbmQgdmFsaWRhdGUgdGhlIGhhbmRsZSAqLworCisJbm9kZSA9IGFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGhhbmRsZSk7CisJaWYgKCFub2RlKSB7CisJCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOworCX0KKworCSpyZXRfaWQgPSBub2RlLT5vd25lcl9pZDsKKworCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworCXJldHVybiAoc3RhdHVzKTsKK30KKworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZ2V0X2lkKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF90eXBlCiAgKgogICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIEhhbmRsZSBvZiBvYmplY3Qgd2hvc2UgdHlwZSBpcyBkZXNpcmVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbnVtYS5jIGIvZHJpdmVycy9hY3BpL251bWEuYwppbmRleCBlNWU0NDhlLi5iZDk2YTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbnVtYS5jCisrKyBiL2RyaXZlcnMvYWNwaS9udW1hLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQloYW5kbGUgPSBwaGFuZGxlOwogCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX1BYTSIsIE5VTEwsICZweG0pOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCi0JCQlyZXR1cm4gKGludClweG07CisJCQlyZXR1cm4gcHhtOwogCQlzdGF0dXMgPSBhY3BpX2dldF9wYXJlbnQoaGFuZGxlLCAmcGhhbmRsZSk7CiAJfSB3aGlsZSAoQUNQSV9TVUNDRVNTKHN0YXR1cykpOwogCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCAwMmIzMGFlLi41N2FlMWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC01NjgsNiArNTY4LDcgQEAKIHN0YXRpYyB2b2lkIGFjcGlfb3NfZXhlY3V0ZV9kZWZlcnJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGFjcGlfb3NfZHBjICpkcGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFjcGlfb3NfZHBjLCB3b3JrKTsKKwogCWlmICghZHBjKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgKE5VTEwpIGNvbnRleHRcbiIpOwogCQlyZXR1cm47CkBAIC0xMDMxLDcgKzEwMzIsNyBAQAogYWNwaV9vc19jcmVhdGVfY2FjaGUoY2hhciAqbmFtZSwgdTE2IHNpemUsIHUxNiBkZXB0aCwgYWNwaV9jYWNoZV90ICoqIGNhY2hlKQogewogCSpjYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKG5hbWUsIHNpemUsIDAsIDAsIE5VTEwsIE5VTEwpOwotCWlmIChjYWNoZSA9PSBOVUxMKQorCWlmICgqY2FjaGUgPT0gTlVMTCkKIAkJcmV0dXJuIEFFX0VSUk9SOwogCWVsc2UKIAkJcmV0dXJuIEFFX09LOwpAQCAtMTA1MSw3ICsxMDUyLDcgQEAKIAogYWNwaV9zdGF0dXMgYWNwaV9vc19wdXJnZV9jYWNoZShhY3BpX2NhY2hlX3QgKiBjYWNoZSkKIHsKLQkodm9pZClrbWVtX2NhY2hlX3NocmluayhjYWNoZSk7CisJa21lbV9jYWNoZV9zaHJpbmsoY2FjaGUpOwogCXJldHVybiAoQUVfT0spOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX2JpbmQuYyBiL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCmluZGV4IDFlMmFlNmUuLjU1ZjU3YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCkBAIC0xMjIsMTkgKzEyMiwxNyBAQAogCWlmICghZGV2aWNlIHx8ICFkZXZpY2UtPnBhcmVudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwYXRobmFtZSA9IGttYWxsb2MoQUNQSV9QQVRITkFNRV9NQVgsIEdGUF9LRVJORUwpOworCXBhdGhuYW1lID0ga3phbGxvYyhBQ1BJX1BBVEhOQU1FX01BWCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYXRobmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KHBhdGhuYW1lLCAwLCBBQ1BJX1BBVEhOQU1FX01BWCk7CiAJYnVmZmVyLmxlbmd0aCA9IEFDUElfUEFUSE5BTUVfTUFYOwogCWJ1ZmZlci5wb2ludGVyID0gcGF0aG5hbWU7CiAKLQlkYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfcGNpX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfcGNpX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpIHsKIAkJa2ZyZWUocGF0aG5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9wY2lfZGF0YSkpOwogCiAJYWNwaV9nZXRfbmFtZShkZXZpY2UtPmhhbmRsZSwgQUNQSV9GVUxMX1BBVEhOQU1FLCAmYnVmZmVyKTsKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJCaW5kaW5nIFBDSSBkZXZpY2UgWyVzXS4uLlxuIiwKQEAgLTI4MSwxMCArMjc5LDkgQEAKIAlpZiAoIWRldmljZSB8fCAhZGV2aWNlLT5wYXJlbnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcGF0aG5hbWUgPSAoY2hhciAqKWttYWxsb2MoQUNQSV9QQVRITkFNRV9NQVgsIEdGUF9LRVJORUwpOworCXBhdGhuYW1lID0ga3phbGxvYyhBQ1BJX1BBVEhOQU1FX01BWCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYXRobmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KHBhdGhuYW1lLCAwLCBBQ1BJX1BBVEhOQU1FX01BWCk7CiAKIAlidWZmZXIubGVuZ3RoID0gQUNQSV9QQVRITkFNRV9NQVg7CiAJYnVmZmVyLnBvaW50ZXIgPSBwYXRobmFtZTsKQEAgLTMzMSwxMSArMzI4LDkgQEAKIAljaGFyICpwYXRobmFtZSA9IE5VTEw7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgMCwgTlVMTCB9OwogCi0KLQlwYXRobmFtZSA9IChjaGFyICopa21hbGxvYyhBQ1BJX1BBVEhOQU1FX01BWCwgR0ZQX0tFUk5FTCk7CisJcGF0aG5hbWUgPSBremFsbG9jKEFDUElfUEFUSE5BTUVfTUFYLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhdGhuYW1lKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQocGF0aG5hbWUsIDAsIEFDUElfUEFUSE5BTUVfTUFYKTsKIAogCWJ1ZmZlci5sZW5ndGggPSBBQ1BJX1BBVEhOQU1FX01BWDsKIAlidWZmZXIucG9pbnRlciA9IHBhdGhuYW1lOwpAQCAtMzQ1LDEyICszNDAsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKSB7CiAJCWtmcmVlKHBhdGhuYW1lKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChkYXRhLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfcGNpX2RhdGEpKTsKIAogCWRhdGEtPmlkID0gKmlkOwogCWRhdGEtPmJ1cyA9IGJ1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMgYi9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCmluZGV4IGZlZGEwMzQuLmZlN2QwMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9pcnEuYwpAQCAtODksMTAgKzg5LDkgQEAKIAlpZiAoIXBydCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3BydF9lbnRyeSksIEdGUF9LRVJORUwpOworCWVudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfcHJ0X2VudHJ5KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlbnRyeSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGVudHJ5LCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfcHJ0X2VudHJ5KSk7CiAKIAllbnRyeS0+aWQuc2VnbWVudCA9IHNlZ21lbnQ7CiAJZW50cnktPmlkLmJ1cyA9IGJ1czsKQEAgLTE2MSwxMCArMTYwLDkgQEAKIAlzdGF0aWMgaW50IGZpcnN0X3RpbWUgPSAxOwogCiAKLQlwYXRobmFtZSA9IChjaGFyICopa21hbGxvYyhBQ1BJX1BBVEhOQU1FX01BWCwgR0ZQX0tFUk5FTCk7CisJcGF0aG5hbWUgPSBremFsbG9jKEFDUElfUEFUSE5BTUVfTUFYLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhdGhuYW1lKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQocGF0aG5hbWUsIDAsIEFDUElfUEFUSE5BTUVfTUFYKTsKIAogCWlmIChmaXJzdF90aW1lKSB7CiAJCWFjcGlfcHJ0LmNvdW50ID0gMDsKQEAgLTE5OCwxMSArMTk2LDEwIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXBydCA9IGttYWxsb2MoYnVmZmVyLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJcHJ0ID0ga3phbGxvYyhidWZmZXIubGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBydCkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KHBydCwgMCwgYnVmZmVyLmxlbmd0aCk7CiAJYnVmZmVyLnBvaW50ZXIgPSBwcnQ7CiAKIAlzdGF0dXMgPSBhY3BpX2dldF9pcnFfcm91dGluZ190YWJsZShoYW5kbGUsICZidWZmZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMgYi9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYwppbmRleCBkNTNiZDk4Li40ODFlNjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX2xpbmsuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiBzdGF0aWMgYWNwaV9zdGF0dXMKIGFjcGlfcGNpX2xpbmtfY2hlY2tfcG9zc2libGUoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLCB2b2lkICpjb250ZXh0KQogewotCXN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rID0gKHN0cnVjdCBhY3BpX3BjaV9saW5rICopY29udGV4dDsKKwlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluayA9IGNvbnRleHQ7CiAJdTMyIGkgPSAwOwogCiAKQEAgLTMwNywxMSArMzA3LDEwIEBACiAJaWYgKCFsaW5rIHx8ICFpcnEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmVzb3VyY2UgPSBrbWFsbG9jKHNpemVvZigqcmVzb3VyY2UpICsgMSwgaXJxc19kaXNhYmxlZCgpID8gR0ZQX0FUT01JQzogR0ZQX0tFUk5FTCk7CisJcmVzb3VyY2UgPSBremFsbG9jKHNpemVvZigqcmVzb3VyY2UpICsgMSwgaXJxc19kaXNhYmxlZCgpID8gR0ZQX0FUT01JQzogR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXNvdXJjZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQocmVzb3VyY2UsIDAsIHNpemVvZigqcmVzb3VyY2UpICsgMSk7CiAJYnVmZmVyLmxlbmd0aCA9IHNpemVvZigqcmVzb3VyY2UpICsgMTsKIAlidWZmZXIucG9pbnRlciA9IHJlc291cmNlOwogCkBAIC02MTMsNyArNjEyLDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWxpbmsgPSAoc3RydWN0IGFjcGlfcGNpX2xpbmsgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJbGluayA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlpZiAoIWxpbmspIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBsaW5rIGNvbnRleHRcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC02NjgsNyArNjY3LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWxpbmsgPSAoc3RydWN0IGFjcGlfcGNpX2xpbmsgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJbGluayA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlpZiAoIWxpbmspIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBsaW5rIGNvbnRleHRcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC03MTgsMTAgKzcxNyw5IEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbGluayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9saW5rKSwgR0ZQX0tFUk5FTCk7CisJbGluayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9saW5rKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsaW5rKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQobGluaywgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9saW5rKSk7CiAKIAlsaW5rLT5kZXZpY2UgPSBkZXZpY2U7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9QQ0lfTElOS19ERVZJQ0VfTkFNRSk7CkBAIC04MDgsNyArODA2LDcgQEAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWxpbmsgPSAoc3RydWN0IGFjcGlfcGNpX2xpbmsgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJbGluayA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAogCW11dGV4X2xvY2soJmFjcGlfbGlua19sb2NrKTsKIAlsaXN0X2RlbCgmbGluay0+bm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCmluZGV4IDA5ODRhMWUuLmE4NjBlZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCkBAIC05OCwxMSArOTgsMTIgQEAKIAogCXN0cnVjdCBhY3BpX3BjaV9kcml2ZXIgKipwcHRyID0gJnN1Yl9kcml2ZXI7CiAJd2hpbGUgKCpwcHRyKSB7Ci0JCWlmICgqcHB0ciAhPSBkcml2ZXIpCi0JCQljb250aW51ZTsKLQkJKnBwdHIgPSAoKnBwdHIpLT5uZXh0OwotCQlicmVhazsKKwkJaWYgKCpwcHRyID09IGRyaXZlcikKKwkJCWJyZWFrOworCQlwcHRyID0gJigqcHB0ciktPm5leHQ7CiAJfQorCUJVR19PTighKnBwdHIpOworCSpwcHRyID0gKCpwcHRyKS0+bmV4dDsKIAogCWlmICghZHJpdmVyLT5yZW1vdmUpCiAJCXJldHVybjsKQEAgLTExOSw3ICsxMjAsNyBAQAogc3RhdGljIGFjcGlfc3RhdHVzCiBnZXRfcm9vdF9icmlkZ2VfYnVzbnJfY2FsbGJhY2soc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlc291cmNlLCB2b2lkICpkYXRhKQogewotCWludCAqYnVzbnIgPSAoaW50ICopZGF0YTsKKwlpbnQgKmJ1c25yID0gZGF0YTsKIAlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzNjQgYWRkcmVzczsKIAogCWlmIChyZXNvdXJjZS0+dHlwZSAhPSBBQ1BJX1JFU09VUkNFX1RZUEVfQUREUkVTUzE2ICYmCkBAIC0xNjQsMTAgKzE2NSw5IEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jcm9vdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9yb290KSwgR0ZQX0tFUk5FTCk7CisJcm9vdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9yb290KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyb290KQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQocm9vdCwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3BjaV9yb290KSk7CiAJSU5JVF9MSVNUX0hFQUQoJnJvb3QtPm5vZGUpOwogCiAJcm9vdC0+ZGV2aWNlID0gZGV2aWNlOwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyb290ID0gKHN0cnVjdCBhY3BpX3BjaV9yb290ICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXJvb3QgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKIAlrZnJlZShyb290KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwppbmRleCBmZTY3YThhLi4wYmE3ZGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcG93ZXIuYworKysgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JKnJlc291cmNlID0gKHN0cnVjdCBhY3BpX3Bvd2VyX3Jlc291cmNlICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCSpyZXNvdXJjZSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlpZiAoIXJlc291cmNlKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNDQyLDcgKzQ0Miw3IEBACiAJc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgKnJlc291cmNlID0gTlVMTDsKIAogCi0JcmVzb3VyY2UgPSAoc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgKilzZXEtPnByaXZhdGU7CisJcmVzb3VyY2UgPSBzZXEtPnByaXZhdGU7CiAKIAlpZiAoIXJlc291cmNlKQogCQlnb3RvIGVuZDsKQEAgLTUzMiwxMCArNTMyLDkgQEAKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXNvdXJjZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3Bvd2VyX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisJcmVzb3VyY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9wb3dlcl9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwogCWlmICghcmVzb3VyY2UpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChyZXNvdXJjZSwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3Bvd2VyX3Jlc291cmNlKSk7CiAKIAlyZXNvdXJjZS0+ZGV2aWNlID0gZGV2aWNlOwogCXN0cmNweShyZXNvdXJjZS0+bmFtZSwgZGV2aWNlLT5wbnAuYnVzX2lkKTsKQEAgLTU5MCw3ICs1ODksNyBAQAogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmVzb3VyY2UgPSAoc3RydWN0IGFjcGlfcG93ZXJfcmVzb3VyY2UgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJcmVzb3VyY2UgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKIAlhY3BpX3Bvd2VyX3JlbW92ZV9mcyhkZXZpY2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IDE5MDhlMGQyLi41Zjk0OTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfaW5mb19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSAoc3RydWN0IGFjcGlfcHJvY2Vzc29yICopc2VxLT5wcml2YXRlOworCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBzZXEtPnByaXZhdGU7CiAKIAogCWlmICghcHIpCkBAIC00NzYsOSArNDc2LDYgQEAKIAlpZiAoY3B1X2luZGV4ID09IC0xKSB7CiAJCWlmIChBQ1BJX0ZBSUxVUkUKIAkJICAgIChhY3BpX3Byb2Nlc3Nvcl9ob3RhZGRfaW5pdChwci0+aGFuZGxlLCAmcHItPmlkKSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKLQkJCQkgICAgIkdldHRpbmcgY3B1aW5kZXggZm9yIGFjcGlpZCAweCV4XG4iLAotCQkJCSAgICBwci0+YWNwaV9pZCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTU0MiwxMiArNTM5LDEyIEBACiAJICogRG9uJ3QgdHJ1c3QgaXQgYmxpbmRseQogCSAqLwogCWlmIChwcm9jZXNzb3JfZGV2aWNlX2FycmF5W3ByLT5pZF0gIT0gTlVMTCAmJgotCSAgICBwcm9jZXNzb3JfZGV2aWNlX2FycmF5W3ByLT5pZF0gIT0gKHZvaWQgKilkZXZpY2UpIHsKKwkgICAgcHJvY2Vzc29yX2RldmljZV9hcnJheVtwci0+aWRdICE9IGRldmljZSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJCSU9TIHJlcG9ydGVkIHdyb25nIEFDUEkgaWQiCiAJCQkiZm9yIHRoZSBwcm9jZXNzb3JcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcHJvY2Vzc29yX2RldmljZV9hcnJheVtwci0+aWRdID0gKHZvaWQgKilkZXZpY2U7CisJcHJvY2Vzc29yX2RldmljZV9hcnJheVtwci0+aWRdID0gZGV2aWNlOwogCiAJcHJvY2Vzc29yc1twci0+aWRdID0gcHI7CiAKQEAgLTU3OCw3ICs1NzUsNyBAQAogCiBzdGF0aWMgdm9pZCBhY3BpX3Byb2Nlc3Nvcl9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKilkYXRhOworCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBkYXRhOwogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKIAogCkBAIC02MTUsMTAgKzYxMiw5IEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IpLCBHRlBfS0VSTkVMKTsKKwlwciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciksIEdGUF9LRVJORUwpOwogCWlmICghcHIpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChwciwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3Byb2Nlc3NvcikpOwogCiAJcHItPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfUFJPQ0VTU09SX0RFVklDRV9OQU1FKTsKQEAgLTYzNyw3ICs2MzMsNyBAQAogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcHIgPSAoc3RydWN0IGFjcGlfcHJvY2Vzc29yICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCiAJaWYgKHByLT5pZCA+PSBOUl9DUFVTKSB7CiAJCWtmcmVlKHByKTsKQEAgLTkwMSwxMyArODk3LDEzIEBACiAKIAlhY3BpX3Byb2Nlc3Nvcl9kaXIgPSBwcm9jX21rZGlyKEFDUElfUFJPQ0VTU09SX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKIAlpZiAoIWFjcGlfcHJvY2Vzc29yX2RpcikKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU5PTUVNOwogCWFjcGlfcHJvY2Vzc29yX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9wcm9jZXNzb3JfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1BST0NFU1NPUl9DTEFTUywgYWNwaV9yb290X2Rpcik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gcmVzdWx0OwogCX0KIAogCWFjcGlfcHJvY2Vzc29yX2luc3RhbGxfaG90cGx1Z19ub3RpZnkoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggNjViM2YwNS4uM2YzMGFmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTIxMSw3ICsyMTEsMTEgQEAKIHN0YXRpYyB2b2lkIGFjcGlfc2FmZV9oYWx0KHZvaWQpCiB7CiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkvKgorCSAqIFRTX1BPTExJTkctY2xlYXJlZCBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlCisJICogdGVzdCBORUVEX1JFU0NIRUQ6CisJICovCisJc21wX21iKCk7CiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKIAkJc2FmZV9oYWx0KCk7CiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKQEAgLTM0NSw3ICszNDksMTEgQEAKIAkgKi8KIAlpZiAoY3gtPnR5cGUgPT0gQUNQSV9TVEFURV9DMiB8fCBjeC0+dHlwZSA9PSBBQ1BJX1NUQVRFX0MzKSB7CiAJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19QT0xMSU5HOwotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQkvKgorCQkgKiBUU19QT0xMSU5HLWNsZWFyZWQgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZQorCQkgKiB0ZXN0IE5FRURfUkVTQ0hFRDoKKwkJICovCisJCXNtcF9tYigpOwogCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKIAkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CiAJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC02NzMsNyArNjgxLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY3N0ID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopYnVmZmVyLnBvaW50ZXI7CisJY3N0ID0gYnVmZmVyLnBvaW50ZXI7CiAKIAkvKiBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDIgZWxlbWVudHMgKi8KIAlpZiAoIWNzdCB8fCAoY3N0LT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB8fCBjc3QtPnBhY2thZ2UuY291bnQgPCAyKSB7CkBAIC03MDIsMTQgKzcxMCwxNCBAQAogCiAJCW1lbXNldCgmY3gsIDAsIHNpemVvZihjeCkpOwogCi0JCWVsZW1lbnQgPSAodW5pb24gYWNwaV9vYmplY3QgKikmKGNzdC0+cGFja2FnZS5lbGVtZW50c1tpXSk7CisJCWVsZW1lbnQgPSAmKGNzdC0+cGFja2FnZS5lbGVtZW50c1tpXSk7CiAJCWlmIChlbGVtZW50LT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKQogCQkJY29udGludWU7CiAKIAkJaWYgKGVsZW1lbnQtPnBhY2thZ2UuY291bnQgIT0gNCkKIAkJCWNvbnRpbnVlOwogCi0JCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSYoZWxlbWVudC0+cGFja2FnZS5lbGVtZW50c1swXSk7CisJCW9iaiA9ICYoZWxlbWVudC0+cGFja2FnZS5lbGVtZW50c1swXSk7CiAKIAkJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKQogCQkJY29udGludWU7CkBAIC03MjEsNyArNzI5LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCS8qIFRoZXJlIHNob3VsZCBiZSBhbiBlYXN5IHdheSB0byBleHRyYWN0IGFuIGludGVnZXIuLi4gKi8KLQkJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopJihlbGVtZW50LT5wYWNrYWdlLmVsZW1lbnRzWzFdKTsKKwkJb2JqID0gJihlbGVtZW50LT5wYWNrYWdlLmVsZW1lbnRzWzFdKTsKIAkJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikKIAkJCWNvbnRpbnVlOwogCkBAIC03NTQsMTMgKzc2MiwxMyBAQAogCQkJfQogCQl9CiAKLQkJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopJihlbGVtZW50LT5wYWNrYWdlLmVsZW1lbnRzWzJdKTsKKwkJb2JqID0gJihlbGVtZW50LT5wYWNrYWdlLmVsZW1lbnRzWzJdKTsKIAkJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikKIAkJCWNvbnRpbnVlOwogCiAJCWN4LmxhdGVuY3kgPSBvYmotPmludGVnZXIudmFsdWU7CiAKLQkJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopJihlbGVtZW50LT5wYWNrYWdlLmVsZW1lbnRzWzNdKTsKKwkJb2JqID0gJihlbGVtZW50LT5wYWNrYWdlLmVsZW1lbnRzWzNdKTsKIAkJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikKIAkJCWNvbnRpbnVlOwogCkBAIC0xMDI5LDcgKzEwMzcsNyBAQAogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3Bvd2VyX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKilzZXEtPnByaXZhdGU7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IHNlcS0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCmluZGV4IDZmZDE3NGEuLmNiYjZmMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcHNzID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopYnVmZmVyLnBvaW50ZXI7CisJcHNzID0gYnVmZmVyLnBvaW50ZXI7CiAJaWYgKCFwc3MgfHwgKHBzcy0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBfUFNTIGRhdGFcbiIpOwogCQlyZXN1bHQgPSAtRUZBVUxUOwpAQCAtMzIyLDEwICszMjIsNiBAQAogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKLQlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9nZXRfcGxhdGZvcm1fbGltaXQocHIpOwotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDEwLDcgKzQwNiw3IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfcGVyZl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSAoc3RydWN0IGFjcGlfcHJvY2Vzc29yICopc2VxLT5wcml2YXRlOworCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBzZXEtPnByaXZhdGU7CiAJaW50IGk7CiAKIApAQCAtNDUxLDggKzQ0Nyw4IEBACiAJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICogZGF0YSkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSAoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSAoc3RydWN0IGFjcGlfcHJvY2Vzc29yICopbS0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IG0tPnByaXZhdGU7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlICpwZXJmOwogCWNoYXIgc3RhdGVfc3RyaW5nWzEyXSA9IHsgJ1wwJyB9OwogCXVuc2lnbmVkIGludCBuZXdfc3RhdGUgPSAwOwpAQCAtNTUxLDcgKzU0Nyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXBzZCA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSBidWZmZXIucG9pbnRlcjsKKwlwc2QgPSBidWZmZXIucG9pbnRlcjsKIAlpZiAoIXBzZCB8fCAocHNkLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiSW52YWxpZCBfUFNEIGRhdGFcbiIpKTsKIAkJcmVzdWx0ID0gLUVGQVVMVDsKQEAgLTczNiwxMCArNzMyLDYgQEAKIAl9CiAKIGVycl9yZXQ6Ci0JaWYgKHJldHZhbCkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLCAiRXJyb3Igd2hpbGUgcGFyc2luZyBfUFNEIGRvbWFpbiBpbmZvcm1hdGlvbi4gQXNzdW1pbmcgbm8gY29vcmRpbmF0aW9uXG4iKSk7Ci0JfQotCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJcHIgPSBwcm9jZXNzb3JzW2ldOwogCQlpZiAoIXByIHx8ICFwci0+cGVyZm9ybWFuY2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhlcm1hbC5jCmluZGV4IGVmNWUwZjYuLjQwZmVjZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhlcm1hbC5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwogCi0JcHIgPSAoc3RydWN0IGFjcGlfcHJvY2Vzc29yICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCWlmICghcHIpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0zNDgsOCArMzQ4LDggQEAKIAkJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqIGRhdGEpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqKW0tPnByaXZhdGU7CisJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBtLT5wcml2YXRlOwogCWNoYXIgbGltaXRfc3RyaW5nWzI1XSA9IHsgJ1wwJyB9OwogCWludCBweCA9IDA7CiAJaW50IHR4ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKaW5kZXggZDA0NGVjNS4uMGVjN2RjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKQEAgLTI1OSw3ICsyNTksNyBAQAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl90aHJvdHRsaW5nX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLAogCQkJCQkgICAgICB2b2lkICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKilzZXEtPnByaXZhdGU7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IHNlcS0+cHJpdmF0ZTsKIAlpbnQgaSA9IDA7CiAJaW50IHJlc3VsdCA9IDA7CiAKQEAgLTMwNyw4ICszMDcsOCBAQAogCQkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBkYXRhKQogewogCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKiltLT5wcml2YXRlOworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gbS0+cHJpdmF0ZTsKIAljaGFyIHN0YXRlX3N0cmluZ1sxMl0gPSB7ICdcMCcgfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2JzLmMgYi9kcml2ZXJzL2FjcGkvc2JzLmMKaW5kZXggODkwOGE5Ny4uZjU4ZmM3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Nicy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zYnMuYwpAQCAtOTIzLDcgKzkyMyw3IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3JlYWRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSAoc3RydWN0IGFjcGlfYmF0dGVyeSAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gc2VxLT5wcml2YXRlOwogCWludCBjc2NhbGU7CiAJaW50IHJlc3VsdCA9IDA7CiAKQEAgLTEwNzYsNyArMTA3Niw3IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3JlYWRfYWxhcm0oc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKLQlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gKHN0cnVjdCBhY3BpX2JhdHRlcnkgKilzZXEtPnByaXZhdGU7CisJc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IHNlcS0+cHJpdmF0ZTsKIAlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgY3NjYWxlOwogCkBAIC0xMTI1LDggKzExMjUsOCBAQAogYWNwaV9iYXR0ZXJ5X3dyaXRlX2FsYXJtKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCiB7Ci0Jc3RydWN0IHNlcV9maWxlICpzZXEgPSAoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSAoc3RydWN0IGFjcGlfYmF0dGVyeSAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gc2VxLT5wcml2YXRlOwogCWNoYXIgYWxhcm1fc3RyaW5nWzEyXSA9IHsgJ1wwJyB9OwogCWludCByZXN1bHQsIG9sZF9hbGFybSwgbmV3X2FsYXJtOwogCkBAIC0xMTYwLDE0ICsxMTYwLDE0IEBACiAJaWYgKHJlc3VsdCkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAogCQkJCSAgImFjcGlfYmF0dGVyeV9zZXRfYWxhcm0oKSBmYWlsZWRcbiIpKTsKLQkJKHZvaWQpYWNwaV9iYXR0ZXJ5X3NldF9hbGFybShiYXR0ZXJ5LCBvbGRfYWxhcm0pOworCQlhY3BpX2JhdHRlcnlfc2V0X2FsYXJtKGJhdHRlcnksIG9sZF9hbGFybSk7CiAJCWdvdG8gZW5kOwogCX0KIAlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfZ2V0X2FsYXJtKGJhdHRlcnkpOwogCWlmIChyZXN1bHQpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwKIAkJCQkgICJhY3BpX2JhdHRlcnlfZ2V0X2FsYXJtKCkgZmFpbGVkXG4iKSk7Ci0JCSh2b2lkKWFjcGlfYmF0dGVyeV9zZXRfYWxhcm0oYmF0dGVyeSwgb2xkX2FsYXJtKTsKKwkJYWNwaV9iYXR0ZXJ5X3NldF9hbGFybShiYXR0ZXJ5LCBvbGRfYWxhcm0pOwogCQlnb3RvIGVuZDsKIAl9CiAKQEAgLTEyMTcsNyArMTIxNyw3IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9hY19yZWFkX3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGFjcGlfc2JzICpzYnMgPSAoc3RydWN0IGFjcGlfc2JzICopc2VxLT5wcml2YXRlOworCXN0cnVjdCBhY3BpX3NicyAqc2JzID0gc2VxLT5wcml2YXRlOwogCWludCByZXN1bHQ7CiAKIAlpZiAoc2JzLT56b21iaWUpIHsKQEAgLTEzMDIsNyArMTMwMiw3IEBACiAJCWJhdHRlcnktPmluaXRfc3RhdGUgPSAxOwogCX0KIAotCSh2b2lkKXNwcmludGYoZGlyX25hbWUsIEFDUElfQkFUVEVSWV9ESVJfTkFNRSwgaWQpOworCXNwcmludGYoZGlyX25hbWUsIEFDUElfQkFUVEVSWV9ESVJfTkFNRSwgaWQpOwogCiAJcmVzdWx0ID0gYWNwaV9zYnNfZ2VuZXJpY19hZGRfZnMoJmJhdHRlcnktPmJhdHRlcnlfZW50cnksCiAJCQkJCSBhY3BpX2JhdHRlcnlfZGlyLApAQCAtMTQ4NSw3ICsxNDg1LDcgQEAKIAkJfQogCiAJCWlmIChvbGRfYmF0dGVyeV9wcmVzZW50ICE9IG5ld19iYXR0ZXJ5X3ByZXNlbnQpIHsKLQkJCSh2b2lkKXNwcmludGYoZGlyX25hbWUsIEFDUElfQkFUVEVSWV9ESVJfTkFNRSwgaWQpOworCQkJc3ByaW50ZihkaXJfbmFtZSwgQUNQSV9CQVRURVJZX0RJUl9OQU1FLCBpZCk7CiAJCQlyZXN1bHQgPSBhY3BpX3Nic19nZW5lcmF0ZV9ldmVudChzYnMtPmRldmljZSwKIAkJCQkJCQkgQUNQSV9TQlNfQkFUVEVSWV9OT1RJRllfU1RBVFVTLAogCQkJCQkJCSBuZXdfYmF0dGVyeV9wcmVzZW50LApAQCAtMTQ5OCw3ICsxNDk4LDcgQEAKIAkJCX0KIAkJfQogCQlpZiAob2xkX3JlbWFpbmluZ19jYXBhY2l0eSAhPSBiYXR0ZXJ5LT5zdGF0ZS5yZW1haW5pbmdfY2FwYWNpdHkpIHsKLQkJCSh2b2lkKXNwcmludGYoZGlyX25hbWUsIEFDUElfQkFUVEVSWV9ESVJfTkFNRSwgaWQpOworCQkJc3ByaW50ZihkaXJfbmFtZSwgQUNQSV9CQVRURVJZX0RJUl9OQU1FLCBpZCk7CiAJCQlyZXN1bHQgPSBhY3BpX3Nic19nZW5lcmF0ZV9ldmVudChzYnMtPmRldmljZSwKIAkJCQkJCQkgQUNQSV9TQlNfQkFUVEVSWV9OT1RJRllfU1RBVFVTLAogCQkJCQkJCSBuZXdfYmF0dGVyeV9wcmVzZW50LApAQCAtMTU3NiwxMiArMTU3NiwxMSBAQAogCWludCBpZCwgY250OwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCi0Jc2JzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfc2JzKSwgR0ZQX0tFUk5FTCk7CisJc2JzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfc2JzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYnMpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FUlJPUiwgImttYWxsb2MoKSBmYWlsZWRcbiIpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChzYnMsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9zYnMpKTsKIAogCWNudCA9IDA7CiAJd2hpbGUgKGNudCA8IDEwKSB7CkBAIC0xNjU5LDcgKzE2NTgsNyBAQAogCWluaXRfdGltZXIoJnNicy0+dXBkYXRlX3RpbWVyKTsKIAlpZiAodXBkYXRlX21vZGUgPT0gUVVFVUVfVVBEQVRFX01PREUpIHsKIAkJc3RhdHVzID0gYWNwaV9vc19leGVjdXRlKE9TTF9HUEVfSEFORExFUiwKLQkJCQkJIGFjcGlfc2JzX3VwZGF0ZV9xdWV1ZSwgKHZvaWQgKilzYnMpOworCQkJCQkgYWNwaV9zYnNfdXBkYXRlX3F1ZXVlLCBzYnMpOwogCQlpZiAoc3RhdHVzICE9IEFFX09LKSB7CiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VSUk9SLAogCQkJCQkgICJhY3BpX29zX2V4ZWN1dGUoKSBmYWlsZWRcbiIpKTsKQEAgLTE2ODUsNyArMTY4NCw3IEBACiAKIGludCBhY3BpX3Nic19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQogewotCXN0cnVjdCBhY3BpX3NicyAqc2JzID0gTlVMTDsKKwlzdHJ1Y3QgYWNwaV9zYnMgKnNiczsKIAlpbnQgaWQ7CiAKIAlpZiAoIWRldmljZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggNjk4YTE1NC4uMjgzZDg3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC05ODQsMTIgKzk4NCwxMSBAQAogCWlmICghY2hpbGQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGV2aWNlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJZGV2aWNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXZpY2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGRldmljZSwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX2RldmljZSkpOwogCiAJZGV2aWNlLT5oYW5kbGUgPSBoYW5kbGU7CiAJZGV2aWNlLT5wYXJlbnQgPSBwYXJlbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAvd2FrZXVwLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAvd2FrZXVwLmMKaW5kZXggYWYxZGJhYi4uZmFiOGYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NsZWVwL3dha2V1cC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC93YWtldXAuYwpAQCAtMTgzLDExICsxODMsMTEgQEAKICNlbmRpZgogCiAvKgotICogRGlzYWJsZSBhbGwgd2FrZXVwIEdQRXMgYmVmb3JlIHBvd2VyIG9mZi4KLSAqIAorICogRGlzYWJsZSBhbGwgd2FrZXVwIEdQRXMgYmVmb3JlIGVudGVyaW5nIHJlcXVlc3RlZCBzbGVlcCBzdGF0ZS4KKyAqCUBzbGVlcF9zdGF0ZToJQUNQSSBzdGF0ZQogICogU2luY2UgYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZSgpIHdpbGwgZGlzYWJsZSBhbGwKICAqIFJVTlRJTUUgR1BFcywgd2Ugc2ltcGx5IG1hcmsgYWxsIEdQRVMgdGhhdAotICogYXJlIG5vdCBlbmFibGVkIGZvciB3YWtldXAgZnJvbSBTNSBhcyBSVU5USU1FLgorICogYXJlIG5vdCBlbmFibGVkIGZvciB3YWtldXAgZnJvbSByZXF1ZXN0ZWQgc3RhdGUgYXMgUlVOVElNRS4KICAqLwogdm9pZCBhY3BpX2dwZV9zbGVlcF9wcmVwYXJlKHUzMiBzbGVlcF9zdGF0ZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90YWJsZXMuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwppbmRleCBiZmIzYmZjLi5mZmEzMGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGFibGVzLmMKKysrIGIvZHJpdmVycy9hY3BpL3RhYmxlcy5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIHN0YXRpYyBpbnQKIGFjcGlfdGFibGVfY29tcHV0ZV9jaGVja3N1bSh2b2lkICp0YWJsZV9wb2ludGVyLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKIHsKLQl1OCAqcCA9ICh1OCAqKSB0YWJsZV9wb2ludGVyOworCXU4ICpwID0gdGFibGVfcG9pbnRlcjsKIAl1bnNpZ25lZCBsb25nIHJlbWFpbnMgPSBsZW5ndGg7CiAJdW5zaWduZWQgbG9uZyBzdW0gPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RieGZhY2UuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCmluZGV4IDc3Njc5ODcuLjViYTkzMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ4ZmFjZS5jCkBAIC0xMjMsNyArMTIzLDYgQEAKIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfbG9hZF90YWJsZXMpCiAKLSNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9sb2FkX3RhYmxlCkBAIC0yMjEsNiArMjIwLDU5IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdW5sb2FkX3RhYmxlX2lkCisgKgorICogUEFSQU1FVEVSUzogIHRhYmxlX3R5cGUgICAgLSBUeXBlIG9mIHRhYmxlIHRvIGJlIHVubG9hZGVkCisgKiAgICAgICAgICAgICAgaWQgICAgICAgICAgICAtIE93bmVyIElEIG9mIHRoZSB0YWJsZSB0byBiZSByZW1vdmVkLgorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gZm9yY2UgdGhlIHVubG9hZCBvZiBhIHRhYmxlIChieSBpZCkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworYWNwaV9zdGF0dXMgYWNwaV91bmxvYWRfdGFibGVfaWQoYWNwaV90YWJsZV90eXBlIHRhYmxlX3R5cGUsIGFjcGlfb3duZXJfaWQgaWQpCit7CisJc3RydWN0IGFjcGlfdGFibGVfZGVzYyAqdGFibGVfZGVzYzsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfdW5sb2FkX3RhYmxlKTsKKworCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCisJaWYgKHRhYmxlX3R5cGUgPiBBQ1BJX1RBQkxFX0lEX01BWCkKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCisJLyogRmluZCB0YWJsZSBmcm9tIHRoZSByZXF1ZXN0ZWQgdHlwZSBsaXN0ICovCisJdGFibGVfZGVzYyA9IGFjcGlfZ2JsX3RhYmxlX2xpc3RzW3RhYmxlX3R5cGVdLm5leHQ7CisJd2hpbGUgKHRhYmxlX2Rlc2MgJiYgdGFibGVfZGVzYy0+b3duZXJfaWQgIT0gaWQpCisJCXRhYmxlX2Rlc2MgPSB0YWJsZV9kZXNjLT5uZXh0OworCisJaWYgKCF0YWJsZV9kZXNjKQorCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9UX0VYSVNUKTsKKworCS8qCisJICogRGVsZXRlIGFsbCBuYW1lc3BhY2Ugb2JqZWN0cyBvd25lZCBieSB0aGlzIHRhYmxlLiBOb3RlIHRoYXQgdGhlc2UKKwkgKiBvYmplY3RzIGNhbiBhcHBlYXIgYW55d2hlcmUgaW4gdGhlIG5hbWVzcGFjZSBieSB2aXJ0dWUgb2YgdGhlIEFNTAorCSAqICJTY29wZSIgb3BlcmF0b3IuIFRodXMsIHdlIG5lZWQgdG8gdHJhY2sgb3duZXJzaGlwIGJ5IGFuIElELCBub3QKKwkgKiBzaW1wbHkgYSBwb3NpdGlvbiB3aXRoaW4gdGhlIGhpZXJhcmNoeQorCSAqLworCWFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcih0YWJsZV9kZXNjLT5vd25lcl9pZCk7CisKKwlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfVEFCTEVTKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCisJKHZvaWQpYWNwaV90Yl91bmluc3RhbGxfdGFibGUodGFibGVfZGVzYyk7CisKKwkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfVEFCTEVTKTsKKworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Cit9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3VubG9hZF90YWJsZV9pZCkKKworI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3VubG9hZF90YWJsZQogICoKICAqIFBBUkFNRVRFUlM6ICB0YWJsZV90eXBlICAgIC0gVHlwZSBvZiB0YWJsZSB0byBiZSB1bmxvYWRlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKaW5kZXggNTc1M2QwNi4uNDBkZGI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCkBAIC02NjMsNyArNjYzLDcgQEAKIHN0YXRpYyB2b2lkIGFjcGlfdGhlcm1hbF9jaGVjayh2b2lkICpkYXRhKQogewogCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gKHN0cnVjdCBhY3BpX3RoZXJtYWwgKilkYXRhOworCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIHNsZWVwX3RpbWUgPSAwOwogCWludCBpID0gMDsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsX3N0YXRlIHN0YXRlOwpAQCAtNzc4LDcgKzc3OCw3IEBACiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3N0YXRlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSAoc3RydWN0IGFjcGlfdGhlcm1hbCAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IHNlcS0+cHJpdmF0ZTsKIAogCiAJaWYgKCF0eikKQEAgLTgxMyw3ICs4MTMsNyBAQAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfdGVtcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gKHN0cnVjdCBhY3BpX3RoZXJtYWwgKilzZXEtPnByaXZhdGU7CisJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSBzZXEtPnByaXZhdGU7CiAKIAogCWlmICghdHopCkBAIC04MzcsNyArODM3LDcgQEAKIAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfdHJpcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gKHN0cnVjdCBhY3BpX3RoZXJtYWwgKilzZXEtPnByaXZhdGU7CisJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSBzZXEtPnByaXZhdGU7CiAJaW50IGkgPSAwOwogCWludCBqID0gMDsKIApAQCAtODkzLDggKzg5Myw4IEBACiAJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCiAJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKQogewotCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSAoc3RydWN0IGFjcGlfdGhlcm1hbCAqKW0tPnByaXZhdGU7CisJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gbS0+cHJpdmF0ZTsKIAogCWNoYXIgKmxpbWl0X3N0cmluZzsKIAlpbnQgbnVtLCBjcml0aWNhbCwgaG90LCBwYXNzaXZlOwpAQCAtOTAyLDEyICs5MDIsMTAgQEAKIAlpbnQgaSA9IDA7CiAKIAotCWxpbWl0X3N0cmluZyA9IGttYWxsb2MoQUNQSV9USEVSTUFMX01BWF9MSU1JVF9TVFJfTEVOLCBHRlBfS0VSTkVMKTsKKwlsaW1pdF9zdHJpbmcgPSBremFsbG9jKEFDUElfVEhFUk1BTF9NQVhfTElNSVRfU1RSX0xFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsaW1pdF9zdHJpbmcpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KGxpbWl0X3N0cmluZywgMCwgQUNQSV9USEVSTUFMX01BWF9MSU1JVF9TVFJfTEVOKTsKLQogCWFjdGl2ZSA9IGttYWxsb2MoQUNQSV9USEVSTUFMX01BWF9BQ1RJVkUgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhY3RpdmUpIHsKIAkJa2ZyZWUobGltaXRfc3RyaW5nKTsKQEAgLTk1Myw3ICs5NTEsNyBAQAogCiBzdGF0aWMgaW50IGFjcGlfdGhlcm1hbF9jb29saW5nX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSAoc3RydWN0IGFjcGlfdGhlcm1hbCAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IHNlcS0+cHJpdmF0ZTsKIAogCiAJaWYgKCF0eikKQEAgLTk4NCw4ICs5ODIsOCBAQAogCQkJCWNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAogCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKIHsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSAoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gKHN0cnVjdCBhY3BpX3RoZXJtYWwgKiltLT5wcml2YXRlOworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IG0tPnByaXZhdGU7CiAJaW50IHJlc3VsdCA9IDA7CiAJY2hhciBtb2RlX3N0cmluZ1sxMl0gPSB7ICdcMCcgfTsKIApAQCAtMTAxNCw3ICsxMDEyLDcgQEAKIAogc3RhdGljIGludCBhY3BpX3RoZXJtYWxfcG9sbGluZ19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gKHN0cnVjdCBhY3BpX3RoZXJtYWwgKilzZXEtPnByaXZhdGU7CisJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSBzZXEtPnByaXZhdGU7CiAKIAogCWlmICghdHopCkBAIC0xMDQzLDggKzEwNDEsOCBAQAogCQkJICAgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCiAJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCiB7Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IChzdHJ1Y3QgYWNwaV90aGVybWFsICopbS0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSBtLT5wcml2YXRlOwogCWludCByZXN1bHQgPSAwOwogCWNoYXIgcG9sbGluZ19zdHJpbmdbMTJdID0geyAnXDAnIH07CiAJaW50IHNlY29uZHMgPSAwOwpAQCAtMTE3MCw3ICsxMTY4LDcgQEAKIAogc3RhdGljIHZvaWQgYWNwaV90aGVybWFsX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IChzdHJ1Y3QgYWNwaV90aGVybWFsICopZGF0YTsKKwlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IGRhdGE7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwogCiAKQEAgLTEyNzEsMTAgKzEyNjksOSBAQAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXR6ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfdGhlcm1hbCksIEdGUF9LRVJORUwpOworCXR6ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfdGhlcm1hbCksIEdGUF9LRVJORUwpOwogCWlmICghdHopCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldCh0eiwgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RoZXJtYWwpKTsKIAogCXR6LT5kZXZpY2UgPSBkZXZpY2U7CiAJc3RyY3B5KHR6LT5uYW1lLCBkZXZpY2UtPnBucC5idXNfaWQpOwpAQCAtMTMyNCw3ICsxMzIxLDcgQEAKIAlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXR6ID0gKHN0cnVjdCBhY3BpX3RoZXJtYWwgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJdHogPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKIAkvKiBhdm9pZCB0aW1lciBhZGRpbmcgbmV3IGRlZmVyIHRhc2sgKi8KIAl0ei0+em9tYmllID0gMTsKQEAgLTEzNjQsNyArMTM2MSw3IEBACiAJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0eiA9IChzdHJ1Y3QgYWNwaV90aGVybWFsICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXR6ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCiAJYWNwaV90aGVybWFsX2dldF90ZW1wZXJhdHVyZSh0eik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90b3NoaWJhX2FjcGkuYyBiL2RyaXZlcnMvYWNwaS90b3NoaWJhX2FjcGkuYwppbmRleCA3ZmUwYjdhLi5kOWI2NTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdG9zaGliYV9hY3BpLmMKKysrIGIvZHJpdmVycy9hY3BpL3Rvc2hpYmFfYWNwaS5jCkBAIC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CkBAIC0yMTAsNiArMjEyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqdG9zaGliYV9wcm9jX2RpciAvKj0gMCovIDsKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqdG9zaGliYV9iYWNrbGlnaHRfZGV2aWNlOwogc3RhdGljIGludCBmb3JjZV9mYW47CiBzdGF0aWMgaW50IGxhc3Rfa2V5X2V2ZW50Owogc3RhdGljIGludCBrZXlfZXZlbnRfdmFsaWQ7CkBAIC0yNzEsMTQgKzI3NCwyMyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBjaGFyICpyZWFkX2xjZChjaGFyICpwKQorc3RhdGljIGludCBnZXRfbGNkKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAl1MzIgaGNpX3Jlc3VsdDsKIAl1MzIgdmFsdWU7CiAKIAloY2lfcmVhZDEoSENJX0xDRF9CUklHSFRORVNTLCAmdmFsdWUsICZoY2lfcmVzdWx0KTsKIAlpZiAoaGNpX3Jlc3VsdCA9PSBIQ0lfU1VDQ0VTUykgewotCQl2YWx1ZSA9IHZhbHVlID4+IEhDSV9MQ0RfQlJJR0hUTkVTU19TSElGVDsKKwkJcmV0dXJuICh2YWx1ZSA+PiBIQ0lfTENEX0JSSUdIVE5FU1NfU0hJRlQpOworCX0gZWxzZQorCQlyZXR1cm4gLUVGQVVMVDsKK30KKworc3RhdGljIGNoYXIgKnJlYWRfbGNkKGNoYXIgKnApCit7CisJaW50IHZhbHVlID0gZ2V0X2xjZChOVUxMKTsKKworCWlmICh2YWx1ZSA+PSAwKSB7CiAJCXAgKz0gc3ByaW50ZihwLCAiYnJpZ2h0bmVzczogICAgICAgICAgICAgICVkXG4iLCB2YWx1ZSk7CiAJCXAgKz0gc3ByaW50ZihwLCAiYnJpZ2h0bmVzc19sZXZlbHM6ICAgICAgICVkXG4iLAogCQkJICAgICBIQ0lfTENEX0JSSUdIVE5FU1NfTEVWRUxTKTsKQEAgLTI4OSwyMiArMzAxLDM3IEBACiAJcmV0dXJuIHA7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X2xjZChpbnQgdmFsdWUpCit7CisJdTMyIGhjaV9yZXN1bHQ7CisKKwl2YWx1ZSA9IHZhbHVlIDw8IEhDSV9MQ0RfQlJJR0hUTkVTU19TSElGVDsKKwloY2lfd3JpdGUxKEhDSV9MQ0RfQlJJR0hUTkVTUywgdmFsdWUsICZoY2lfcmVzdWx0KTsKKwlpZiAoaGNpX3Jlc3VsdCAhPSBIQ0lfU1VDQ0VTUykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfbGNkX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJcmV0dXJuIHNldF9sY2QoYmQtPnByb3BzLT5icmlnaHRuZXNzKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfbGNkKGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAlpbnQgdmFsdWU7Ci0JdTMyIGhjaV9yZXN1bHQ7CisJaW50IHJldDsKIAogCWlmIChzc2NhbmYoYnVmZmVyLCAiIGJyaWdodG5lc3MgOiAlaSIsICZ2YWx1ZSkgPT0gMSAmJgogCSAgICB2YWx1ZSA+PSAwICYmIHZhbHVlIDwgSENJX0xDRF9CUklHSFRORVNTX0xFVkVMUykgewotCQl2YWx1ZSA9IHZhbHVlIDw8IEhDSV9MQ0RfQlJJR0hUTkVTU19TSElGVDsKLQkJaGNpX3dyaXRlMShIQ0lfTENEX0JSSUdIVE5FU1MsIHZhbHVlLCAmaGNpX3Jlc3VsdCk7Ci0JCWlmIChoY2lfcmVzdWx0ICE9IEhDSV9TVUNDRVNTKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IHNldF9sY2QodmFsdWUpOworCQlpZiAocmV0ID09IDApCisJCQlyZXQgPSBjb3VudDsKIAl9IGVsc2UgewotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0KLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNoYXIgKnJlYWRfdmlkZW8oY2hhciAqcCkKQEAgLTUwNiw2ICs1MzMsMjYgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgdG9zaGliYV9iYWNrbGlnaHRfZGF0YSA9IHsKKyAgICAgICAgLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisgICAgICAgIC5nZXRfYnJpZ2h0bmVzcyA9IGdldF9sY2QsCisgICAgICAgIC51cGRhdGVfc3RhdHVzICA9IHNldF9sY2Rfc3RhdHVzLAorICAgICAgICAubWF4X2JyaWdodG5lc3MgPSBIQ0lfTENEX0JSSUdIVE5FU1NfTEVWRUxTIC0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0b3NoaWJhX2FjcGlfZXhpdCh2b2lkKQoreworCWlmICh0b3NoaWJhX2JhY2tsaWdodF9kZXZpY2UpCisJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcih0b3NoaWJhX2JhY2tsaWdodF9kZXZpY2UpOworCisJcmVtb3ZlX2RldmljZSgpOworCisJaWYgKHRvc2hpYmFfcHJvY19kaXIpCisJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfVE9TSElCQSwgYWNwaV9yb290X2Rpcik7CisKKwlyZXR1cm47Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHRvc2hpYmFfYWNwaV9pbml0KHZvaWQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CkBAIC01NDYsMTggKzU5MywxNyBAQAogCQkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ19UT1NISUJBLCBhY3BpX3Jvb3RfZGlyKTsKIAl9CiAKKwl0b3NoaWJhX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJ0b3NoaWJhIixOVUxMLAorCQkJCQkJTlVMTCwKKwkJCQkJCSZ0b3NoaWJhX2JhY2tsaWdodF9kYXRhKTsKKyAgICAgICAgaWYgKElTX0VSUih0b3NoaWJhX2JhY2tsaWdodF9kZXZpY2UpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHJlZ2lzdGVyIHRvc2hpYmEgYmFja2xpZ2h0IGRldmljZVxuIik7CisJCXRvc2hpYmFfYmFja2xpZ2h0X2RldmljZSA9IE5VTEw7CisJCXRvc2hpYmFfYWNwaV9leGl0KCk7CisJfQorCiAJcmV0dXJuIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgPyAwIDogLUVOT0RFVjsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHRvc2hpYmFfYWNwaV9leGl0KHZvaWQpCi17Ci0JcmVtb3ZlX2RldmljZSgpOwotCi0JaWYgKHRvc2hpYmFfcHJvY19kaXIpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfVE9TSElCQSwgYWNwaV9yb290X2Rpcik7Ci0KLQlyZXR1cm47Ci19Ci0KIG1vZHVsZV9pbml0KHRvc2hpYmFfYWNwaV9pbml0KTsKIG1vZHVsZV9leGl0KHRvc2hpYmFfYWNwaV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlsaXRpZXMvdXRkZWJ1Zy5jIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlYnVnLmMKaW5kZXggYmIxZWFmOS4uOWU5MDU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlYnVnLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dGRlYnVnLmMKQEAgLTE4MCw4ICsxODAsOSBAQAogCWlmICh0aHJlYWRfaWQgIT0gYWNwaV9nYmxfcHJldl90aHJlYWRfaWQpIHsKIAkJaWYgKEFDUElfTFZfVEhSRUFEUyAmIGFjcGlfZGJnX2xldmVsKSB7CiAJCQlhY3BpX29zX3ByaW50ZgotCQkJICAgICgiXG4qKioqIENvbnRleHQgU3dpdGNoIGZyb20gVElEICVYIHRvIFRJRCAlWCAqKioqXG5cbiIsCi0JCQkgICAgICh1MzIpIGFjcGlfZ2JsX3ByZXZfdGhyZWFkX2lkLCAodTMyKSB0aHJlYWRfaWQpOworCQkJICAgICgiXG4qKioqIENvbnRleHQgU3dpdGNoIGZyb20gVElEICVsWCB0byBUSUQgJWxYICoqKipcblxuIiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGFjcGlfZ2JsX3ByZXZfdGhyZWFkX2lkLAorCQkJICAgICAodW5zaWduZWQgbG9uZykgdGhyZWFkX2lkKTsKIAkJfQogCiAJCWFjcGlfZ2JsX3ByZXZfdGhyZWFkX2lkID0gdGhyZWFkX2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3V0aWxpdGllcy91dG11dGV4LmMgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYwppbmRleCBjMzkwNjJhLi4xODBlNzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYworKysgYi9kcml2ZXJzL2FjcGkvdXRpbGl0aWVzL3V0bXV0ZXguYwpAQCAtMjQzLDIzICsyNDMsMjQgQEAKICNlbmRpZgogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9NVVRFWCwKLQkJCSAgIlRocmVhZCAlWCBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgTXV0ZXggWyVzXVxuIiwKLQkJCSAgKHUzMikgdGhpc190aHJlYWRfaWQsIGFjcGlfdXRfZ2V0X211dGV4X25hbWUobXV0ZXhfaWQpKSk7CisJCQkgICJUaHJlYWQgJWxYIGF0dGVtcHRpbmcgdG8gYWNxdWlyZSBNdXRleCBbJXNdXG4iLAorCQkJICAodW5zaWduZWQgbG9uZykgdGhpc190aHJlYWRfaWQsCisJCQkgIGFjcGlfdXRfZ2V0X211dGV4X25hbWUobXV0ZXhfaWQpKSk7CiAKIAlzdGF0dXMgPSBhY3BpX29zX2FjcXVpcmVfbXV0ZXgoYWNwaV9nYmxfbXV0ZXhfaW5mb1ttdXRleF9pZF0ubXV0ZXgsCiAJCQkJICAgICAgIEFDUElfV0FJVF9GT1JFVkVSKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9NVVRFWCwKLQkJCQkgICJUaHJlYWQgJVggYWNxdWlyZWQgTXV0ZXggWyVzXVxuIiwKLQkJCQkgICh1MzIpIHRoaXNfdGhyZWFkX2lkLAorCQkJCSAgIlRocmVhZCAlbFggYWNxdWlyZWQgTXV0ZXggWyVzXVxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nKSB0aGlzX3RocmVhZF9pZCwKIAkJCQkgIGFjcGlfdXRfZ2V0X211dGV4X25hbWUobXV0ZXhfaWQpKSk7CiAKIAkJYWNwaV9nYmxfbXV0ZXhfaW5mb1ttdXRleF9pZF0udXNlX2NvdW50Kys7CiAJCWFjcGlfZ2JsX211dGV4X2luZm9bbXV0ZXhfaWRdLnRocmVhZF9pZCA9IHRoaXNfdGhyZWFkX2lkOwogCX0gZWxzZSB7CiAJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCi0JCQkJIlRocmVhZCAlWCBjb3VsZCBub3QgYWNxdWlyZSBNdXRleCBbJVhdIiwKLQkJCQkodTMyKSB0aGlzX3RocmVhZF9pZCwgbXV0ZXhfaWQpKTsKKwkJCQkiVGhyZWFkICVsWCBjb3VsZCBub3QgYWNxdWlyZSBNdXRleCBbJVhdIiwKKwkJCQkodW5zaWduZWQgbG9uZykgdGhpc190aHJlYWRfaWQsIG11dGV4X2lkKSk7CiAJfQogCiAJcmV0dXJuIChzdGF0dXMpOwpAQCAtMjg1LDcgKzI4Niw4IEBACiAKIAl0aGlzX3RocmVhZF9pZCA9IGFjcGlfb3NfZ2V0X3RocmVhZF9pZCgpOwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTVVURVgsCi0JCQkgICJUaHJlYWQgJVggcmVsZWFzaW5nIE11dGV4IFslc11cbiIsICh1MzIpIHRoaXNfdGhyZWFkX2lkLAorCQkJICAiVGhyZWFkICVsWCByZWxlYXNpbmcgTXV0ZXggWyVzXVxuIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcpIHRoaXNfdGhyZWFkX2lkLAogCQkJICBhY3BpX3V0X2dldF9tdXRleF9uYW1lKG11dGV4X2lkKSkpOwogCiAJaWYgKG11dGV4X2lkID4gQUNQSV9NQVhfTVVURVgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlscy5jIGIvZHJpdmVycy9hY3BpL3V0aWxzLmMKaW5kZXggZDBkODRjNC4uNjhhODA5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxzLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkJcmV0dXJuIEFFX0JBRF9EQVRBOwogCX0KIAotCWZvcm1hdF9zdHJpbmcgPSAoY2hhciAqKWZvcm1hdC0+cG9pbnRlcjsKKwlmb3JtYXRfc3RyaW5nID0gZm9ybWF0LT5wb2ludGVyOwogCiAJLyoKIAkgKiBDYWxjdWxhdGUgc2l6ZV9yZXF1aXJlZC4KQEAgLTI2MiwxMSArMjYyLDEwIEBACiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKIAotCWVsZW1lbnQgPSBrbWFsbG9jKHNpemVvZih1bmlvbiBhY3BpX29iamVjdCksIGlycXNfZGlzYWJsZWQoKSA/IEdGUF9BVE9NSUM6IEdGUF9LRVJORUwpOworCWVsZW1lbnQgPSBremFsbG9jKHNpemVvZih1bmlvbiBhY3BpX29iamVjdCksIGlycXNfZGlzYWJsZWQoKSA/IEdGUF9BVE9NSUM6IEdGUF9LRVJORUwpOwogCWlmICghZWxlbWVudCkKIAkJcmV0dXJuIEFFX05PX01FTU9SWTsKIAotCW1lbXNldChlbGVtZW50LCAwLCBzaXplb2YodW5pb24gYWNwaV9vYmplY3QpKTsKIAlidWZmZXIubGVuZ3RoID0gc2l6ZW9mKHVuaW9uIGFjcGlfb2JqZWN0KTsKIAlidWZmZXIucG9pbnRlciA9IGVsZW1lbnQ7CiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBwYXRobmFtZSwgYXJndW1lbnRzLCAmYnVmZmVyKTsKQEAgLTMyMSwxMiArMzIwLDExIEBACiAJCXJldHVybiBBRV9CQURfREFUQTsKIAl9CiAKLQkqZGF0YSA9IGttYWxsb2MoZWxlbWVudC0+c3RyaW5nLmxlbmd0aCArIDEsIEdGUF9LRVJORUwpOworCSpkYXRhID0ga3phbGxvYyhlbGVtZW50LT5zdHJpbmcubGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIk1lbW9yeSBhbGxvY2F0aW9uXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCgqZGF0YSwgMCwgZWxlbWVudC0+c3RyaW5nLmxlbmd0aCArIDEpOwogCiAJbWVtY3B5KCpkYXRhLCBlbGVtZW50LT5zdHJpbmcucG9pbnRlciwgZWxlbWVudC0+c3RyaW5nLmxlbmd0aCk7CiAKQEAgLTM2MSw3ICszNTksNyBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZ290byBlbmQ7CiAKLQlwYWNrYWdlID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopYnVmZmVyLnBvaW50ZXI7CisJcGFja2FnZSA9IGJ1ZmZlci5wb2ludGVyOwogCiAJaWYgKChidWZmZXIubGVuZ3RoID09IDApIHx8ICFwYWNrYWdlKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIk5vIHJldHVybiBvYmplY3QgKGxlbiAlWCBwdHIgJXApXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCA1NjY2NmE5Li4zZDU0NjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEx1bWluZyBZdSA8bHVtaW5nLnl1QGludGVsLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQnJ1bm8gRHVjcm90IDxkdWNyb3RAcG91cGlub3Uub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwNiBUaG9tYXMgVHV0dGxlIDxsaW51eC1rZXJuZWxAdHR1dHRsZS5uZXQ+CiAgKgogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KICAqCkBAIC00NywxMSArNDgsMTEgQEAKICNkZWZpbmUgQUNQSV9WSURFT19OT1RJRllfTkVYVF9PVVRQVVQJMHg4MwogI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9QUkVWX09VVFBVVAkweDg0CiAKLSNkZWZpbmUgQUNQSV9WSURFT19OT1RJRllfQ1lDTEVfQlJJR0hUTkVTUwkweDgyCi0jZGVmaW5lCUFDUElfVklERU9fTk9USUZZX0lOQ19CUklHSFRORVNTCTB4ODMKLSNkZWZpbmUgQUNQSV9WSURFT19OT1RJRllfREVDX0JSSUdIVE5FU1MJMHg4NAotI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9aRVJPX0JSSUdIVE5FU1MJMHg4NQotI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9ESVNQTEFZX09GRgkJMHg4NgorI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9DWUNMRV9CUklHSFRORVNTCTB4ODUKKyNkZWZpbmUJQUNQSV9WSURFT19OT1RJRllfSU5DX0JSSUdIVE5FU1MJMHg4NgorI2RlZmluZSBBQ1BJX1ZJREVPX05PVElGWV9ERUNfQlJJR0hUTkVTUwkweDg3CisjZGVmaW5lIEFDUElfVklERU9fTk9USUZZX1pFUk9fQlJJR0hUTkVTUwkweDg4CisjZGVmaW5lIEFDUElfVklERU9fTk9USUZZX0RJU1BMQVlfT0ZGCQkweDg5CiAKICNkZWZpbmUgQUNQSV9WSURFT19IRUFEX0lOVkFMSUQJCSh+MHUgLSAxKQogI2RlZmluZSBBQ1BJX1ZJREVPX0hFQURfRU5ECQkofjB1KQpAQCAtMzg2LDcgKzM4Nyw3IEBACiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKWJ1ZmZlci5wb2ludGVyOworCW9iaiA9IGJ1ZmZlci5wb2ludGVyOwogCiAJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUikKIAkJKmVkaWQgPSBvYmo7CkBAIC01MzIsMTEgKzUzMywxMCBAQAogCQlpbnQgY291bnQgPSAwOwogCQl1bmlvbiBhY3BpX29iamVjdCAqbzsKIAotCQliciA9IGttYWxsb2Moc2l6ZW9mKCpiciksIEdGUF9LRVJORUwpOworCQliciA9IGt6YWxsb2Moc2l6ZW9mKCpiciksIEdGUF9LRVJORUwpOwogCQlpZiAoIWJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFsbG9jYXRlIG1lbW9yeVxuIik7CiAJCX0gZWxzZSB7Ci0JCQltZW1zZXQoYnIsIDAsIHNpemVvZigqYnIpKTsKIAkJCWJyLT5sZXZlbHMgPSBrbWFsbG9jKG9iai0+cGFja2FnZS5jb3VudCAqCiAJCQkJCSAgICAgc2l6ZW9mICooYnItPmxldmVscyksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFici0+bGV2ZWxzKQpAQCAtNjU0LDggKzY1NCw3IEBACiAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19kZXZpY2VfaW5mb19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2ID0KLQkgICAgKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldiA9IHNlcS0+cHJpdmF0ZTsKIAogCiAJaWYgKCFkZXYpCkBAIC02ODgsOCArNjg3LDcgQEAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19kZXZpY2Vfc3RhdGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAlpbnQgc3RhdHVzOwotCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2ID0KLQkgICAgKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldiA9IHNlcS0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIHN0YXRlOwogCiAKQEAgLTcyNyw4ICs3MjUsOCBAQAogCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBkYXRhKQogewogCWludCBzdGF0dXM7Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldiA9IChzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKiltLT5wcml2YXRlOworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldiA9IG0tPnByaXZhdGU7CiAJY2hhciBzdHJbMTJdID0geyAwIH07CiAJdTMyIHN0YXRlID0gMDsKIApAQCAtNzU0LDggKzc1Miw3IEBACiBzdGF0aWMgaW50CiBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXYgPQotCSAgICAoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICopc2VxLT5wcml2YXRlOworCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2ID0gc2VxLT5wcml2YXRlOwogCWludCBpOwogCiAKQEAgLTc4NCw4ICs3ODEsOCBAQAogCQkJCSAgIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAogCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICogZGF0YSkKIHsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSAoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2ID0gKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqKW0tPnByaXZhdGU7CisJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2ID0gbS0+cHJpdmF0ZTsKIAljaGFyIHN0cls0XSA9IHsgMCB9OwogCXVuc2lnbmVkIGludCBsZXZlbCA9IDA7CiAJaW50IGk7CkBAIC04MTcsOCArODE0LDcgQEAKIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2RldmljZV9FRElEX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXYgPQotCSAgICAoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICopc2VxLT5wcml2YXRlOworCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2ID0gc2VxLT5wcml2YXRlOwogCWludCBzdGF0dXM7CiAJaW50IGk7CiAJdW5pb24gYWNwaV9vYmplY3QgKmVkaWQgPSBOVUxMOwpAQCAtODY2LDcgKzg2Miw3IEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRU5PREVWOwogCi0JdmlkX2RldiA9IChzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJdmlkX2RldiA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlpZiAoIXZpZF9kZXYpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC05MzEsNyArOTI3LDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZpZF9kZXY7CiAKLQl2aWRfZGV2ID0gKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqKWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKKwl2aWRfZGV2ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCWlmICghdmlkX2RldiB8fCAhdmlkX2Rldi0+dmlkZW8gfHwgIXZpZF9kZXYtPnZpZGVvLT5kaXIpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC05NTAsNyArOTQ2LDcgQEAKIC8qIHZpZGVvIGJ1cyAqLwogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19pbmZvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7Ci0Jc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbyA9IChzdHJ1Y3QgYWNwaV92aWRlb19idXMgKilzZXEtPnByaXZhdGU7CisJc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbyA9IHNlcS0+cHJpdmF0ZTsKIAogCiAJaWYgKCF2aWRlbykKQEAgLTk3NSw3ICs5NzEsNyBAQAogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX1JPTV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW8gPSAoc3RydWN0IGFjcGlfdmlkZW9fYnVzICopc2VxLT5wcml2YXRlOworCXN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW8gPSBzZXEtPnByaXZhdGU7CiAKIAogCWlmICghdmlkZW8pCkBAIC05OTUsNyArOTkxLDcgQEAKIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19QT1NUX2luZm9fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKLQlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gKHN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gc2VxLT5wcml2YXRlOwogCXVuc2lnbmVkIGxvbmcgb3B0aW9uczsKIAlpbnQgc3RhdHVzOwogCkBAIC0xMDMzLDcgKzEwMjksNyBAQAogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fYnVzX1BPU1Rfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKLQlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gKHN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gc2VxLT5wcml2YXRlOwogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBpZDsKIApAQCAtMTA1NCw3ICsxMDUwLDcgQEAKIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19ET1Nfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKLQlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gKHN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqKXNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gc2VxLT5wcml2YXRlOwogCiAKIAlzZXFfcHJpbnRmKHNlcSwgIkRPUyBzZXR0aW5nOiA8JWQ+XG4iLCB2aWRlby0+ZG9zX3NldHRpbmcpOwpAQCAtMTA3OSw4ICsxMDc1LDggQEAKIAkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBkYXRhKQogewogCWludCBzdGF0dXM7Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gKHN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqKW0tPnByaXZhdGU7CisJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW8gPSBtLT5wcml2YXRlOwogCWNoYXIgc3RyWzEyXSA9IHsgMCB9OwogCXVuc2lnbmVkIGxvbmcgb3B0LCBvcHRpb25zOwogCkBAIC0xMTE5LDggKzExMTUsOCBAQAogCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICogZGF0YSkKIHsKIAlpbnQgc3RhdHVzOwotCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbyA9IChzdHJ1Y3QgYWNwaV92aWRlb19idXMgKiltLT5wcml2YXRlOworCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gbS0+cHJpdmF0ZTsKIAljaGFyIHN0clsxMl0gPSB7IDAgfTsKIAl1bnNpZ25lZCBsb25nIG9wdDsKIApAQCAtMTE1MCw3ICsxMTQ2LDcgQEAKIAlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvOwogCiAKLQl2aWRlbyA9IChzdHJ1Y3QgYWNwaV92aWRlb19idXMgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJdmlkZW8gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKIAlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKSB7CiAJCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gcHJvY19ta2RpcihhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwKQEAgLTEyMjYsNyArMTIyMiw3IEBACiAJc3RydWN0IGFjcGlfdmlkZW9fYnVzICp2aWRlbzsKIAogCi0JdmlkZW8gPSAoc3RydWN0IGFjcGlfdmlkZW9fYnVzICopYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXZpZGVvID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCiAJaWYgKGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KCJpbmZvIiwgYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpOwpAQCAtMTI2MywxMiArMTI1OSwxMCBAQAogCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGV2aWNlLT5oYW5kbGUsICJfQURSIiwgTlVMTCwgJmRldmljZV9pZCk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAKLQkJZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSksIEdGUF9LRVJORUwpOworCQlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZGF0YSkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCW1lbXNldChkYXRhLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlKSk7Ci0KIAkJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9WSURFT19ERVZJQ0VfTkFNRSk7CiAJCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1ZJREVPX0NMQVNTKTsKIAkJYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gZGF0YTsKQEAgLTE0MDMsNyArMTM5Nyw3IEBACiAJCXJldHVybiBzdGF0dXM7CiAJfQogCi0JZG9kID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopYnVmZmVyLnBvaW50ZXI7CisJZG9kID0gYnVmZmVyLnBvaW50ZXI7CiAJaWYgKCFkb2QgfHwgKGRvZC0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkpIHsKIAkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkludmFsaWQgX0RPRCBkYXRhIikpOwogCQlzdGF0dXMgPSAtRUZBVUxUOwpAQCAtMTQyNiw3ICsxNDIwLDcgQEAKIAogCWNvdW50ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgZG9kLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKLQkJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopJmRvZC0+cGFja2FnZS5lbGVtZW50c1tpXTsKKwkJb2JqID0gJmRvZC0+cGFja2FnZS5lbGVtZW50c1tpXTsKIAogCQlpZiAob2JqLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIF9ET0QgZGF0YVxuIik7CkBAIC0xNTA5LDggKzE1MDMsMzQgQEAKIGFjcGlfdmlkZW9fZ2V0X25leHRfbGV2ZWwoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXZpY2UsCiAJCQkgIHUzMiBsZXZlbF9jdXJyZW50LCB1MzIgZXZlbnQpCiB7Ci0JLypGaXggbWUgKi8KLQlyZXR1cm4gbGV2ZWxfY3VycmVudDsKKwlpbnQgbWluLCBtYXgsIG1pbl9hYm92ZSwgbWF4X2JlbG93LCBpLCBsOworCW1heCA9IG1heF9iZWxvdyA9IDA7CisJbWluID0gbWluX2Fib3ZlID0gMjU1OworCWZvciAoaSA9IDA7IGkgPCBkZXZpY2UtPmJyaWdodG5lc3MtPmNvdW50OyBpKyspIHsKKwkJbCA9IGRldmljZS0+YnJpZ2h0bmVzcy0+bGV2ZWxzW2ldOworCQlpZiAobCA8IG1pbikKKwkJCW1pbiA9IGw7CisJCWlmIChsID4gbWF4KQorCQkJbWF4ID0gbDsKKwkJaWYgKGwgPCBtaW5fYWJvdmUgJiYgbCA+IGxldmVsX2N1cnJlbnQpCisJCQltaW5fYWJvdmUgPSBsOworCQlpZiAobCA+IG1heF9iZWxvdyAmJiBsIDwgbGV2ZWxfY3VycmVudCkKKwkJCW1heF9iZWxvdyA9IGw7CisJfQorCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQUNQSV9WSURFT19OT1RJRllfQ1lDTEVfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIChsZXZlbF9jdXJyZW50IDwgbWF4KSA/IG1pbl9hYm92ZSA6IG1pbjsKKwljYXNlIEFDUElfVklERU9fTk9USUZZX0lOQ19CUklHSFRORVNTOgorCQlyZXR1cm4gKGxldmVsX2N1cnJlbnQgPCBtYXgpID8gbWluX2Fib3ZlIDogbWF4OworCWNhc2UgQUNQSV9WSURFT19OT1RJRllfREVDX0JSSUdIVE5FU1M6CisJCXJldHVybiAobGV2ZWxfY3VycmVudCA+IG1pbikgPyBtYXhfYmVsb3cgOiBtaW47CisJY2FzZSBBQ1BJX1ZJREVPX05PVElGWV9aRVJPX0JSSUdIVE5FU1M6CisJY2FzZSBBQ1BJX1ZJREVPX05PVElGWV9ESVNQTEFZX09GRjoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGxldmVsX2N1cnJlbnQ7CisJfQogfQogCiBzdGF0aWMgdm9pZApAQCAtMTYxMiw3ICsxNjMyLDcgQEAKIAogc3RhdGljIHZvaWQgYWNwaV92aWRlb19idXNfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBhY3BpX3ZpZGVvX2J1cyAqdmlkZW8gPSAoc3RydWN0IGFjcGlfdmlkZW9fYnVzICopZGF0YTsKKwlzdHJ1Y3QgYWNwaV92aWRlb19idXMgKnZpZGVvID0gZGF0YTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAKIAlwcmludGsoInZpZGVvIGJ1cyBub3RpZnlcbiIpOwpAQCAtMTY1NCwxMiArMTY3NCw5IEBACiAKIHN0YXRpYyB2b2lkIGFjcGlfdmlkZW9fZGV2aWNlX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZpZGVvX2RldmljZSA9Ci0JICAgIChzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKilkYXRhOworCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqdmlkZW9fZGV2aWNlID0gZGF0YTsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAKLQotCXByaW50aygidmlkZW8gZGV2aWNlIG5vdGlmeVxuIik7CiAJaWYgKCF2aWRlb19kZXZpY2UpCiAJCXJldHVybjsKIApAQCAtMTY5NiwxMCArMTcxMyw5IEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdmlkZW8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV92aWRlb19idXMpLCBHRlBfS0VSTkVMKTsKKwl2aWRlbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3ZpZGVvX2J1cyksIEdGUF9LRVJORUwpOwogCWlmICghdmlkZW8pCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldCh2aWRlbywgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3ZpZGVvX2J1cykpOwogCiAJdmlkZW8tPmRldmljZSA9IGRldmljZTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBBQ1BJX1ZJREVPX0JVU19OQU1FKTsKQEAgLTE3NTcsNyArMTc3Myw3IEBACiAJaWYgKCFkZXZpY2UgfHwgIWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl2aWRlbyA9IChzdHJ1Y3QgYWNwaV92aWRlb19idXMgKilhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJdmlkZW8gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKIAlhY3BpX3ZpZGVvX2J1c19zdG9wX2RldmljZXModmlkZW8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9LY29uZmlnIGIvZHJpdmVycy9hdGEvS2NvbmZpZwppbmRleCA5ODRhYjI4Li4xYzk0YjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYXRhL0tjb25maWcKQEAgLTE5LDYgKzE5LDEwIEBACiAKIGlmIEFUQQogCitjb25maWcgQVRBX05PTlNUQU5EQVJECisgICAgICAgYm9vbAorICAgICAgIGRlZmF1bHQgbgorCiBjb25maWcgU0FUQV9BSENJCiAJdHJpc3RhdGUgIkFIQ0kgU0FUQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCkBAIC00MCw5ICs0NCw5IEBACiAJdHJpc3RhdGUgIkludGVsIFBJSVgvSUNIIFNBVEEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSQogCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgSUNINS82LzcvOCBTZXJpYWwgQVRBLgotCSAgSWYgUEFUQSBzdXBwb3J0IHdhcyBlbmFibGVkIHByZXZpb3VzbHksIHRoaXMgZW5hYmxlcwotCSAgc3VwcG9ydCBmb3Igc2VsZWN0IEludGVsIFBJSVgvSUNIIFBBVEEgaG9zdCBjb250cm9sbGVycy4KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgSUNINS82LzcvOCBTZXJpYWwgQVRBCisJICBhbmQgc3VwcG9ydCBmb3IgUEFUQSBvbiB0aGUgSW50ZWwgUElJWDMvUElJWDQvSUNIIHNlcmllcworCSAgUEFUQSBob3N0IGNvbnRyb2xsZXJzLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC0zODEsNyArMzg1LDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBQQVRBX09QVElETUEKLQl0cmlzdGF0ZSAiT1BUSSBGaXJlU3RhciBQQVRBIHN1cHBvcnQgKFZleXIgRXhwZXJpbWVudGFsKSIKKwl0cmlzdGF0ZSAiT1BUSSBGaXJlU3RhciBQQVRBIHN1cHBvcnQgKFZlcnkgRXhwZXJpbWVudGFsKSIKIAlkZXBlbmRzIG9uIFBDSSAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIERNQS9QSU8gc3VwcG9ydCBmb3IgdGhlIGxhdGVyIE9QVGkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCBmMzZkYTQ4Li40ODYxNmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC03NSw2ICs3NSw3IEBACiAJQUhDSV9DTURfQ0xSX0JVU1kJPSAoMSA8PCAxMCksCiAKIAlSWF9GSVNfRDJIX1JFRwkJPSAweDQwLAkvKiBvZmZzZXQgb2YgRDJIIFJlZ2lzdGVyIEZJUyBkYXRhICovCisJUlhfRklTX1NEQgkJPSAweDU4LCAvKiBvZmZzZXQgb2YgU0RCIEZJUyBkYXRhICovCiAJUlhfRklTX1VOSwkJPSAweDYwLCAvKiBvZmZzZXQgb2YgVW5rbm93biBGSVMgZGF0YSAqLwogCiAJYm9hcmRfYWhjaQkJPSAwLApAQCAtMjAyLDYgKzIwMywxMCBAQAogCWRtYV9hZGRyX3QJCWNtZF90YmxfZG1hOwogCXZvaWQJCQkqcnhfZmlzOwogCWRtYV9hZGRyX3QJCXJ4X2Zpc19kbWE7CisJLyogZm9yIE5DUSBzcHVyaW91cyBpbnRlcnJ1cHQgYW5hbHlzaXMgKi8KKwlpbnQJCQluY3Ffc2F3X3NwdXJpb3VzX3NkYl9jbnQ7CisJdW5zaWduZWQgaW50CQluY3Ffc2F3X2QyaDoxOworCXVuc2lnbmVkIGludAkJbmNxX3Nhd19kbWFzOjE7CiB9OwogCiBzdGF0aWMgdTMyIGFoY2lfc2NyX3JlYWQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcpOwpAQCAtMzYxLDcgKzM2Niw3IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyN2MxKSwgYm9hcmRfYWhjaSB9LCAvKiBJQ0g3ICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyN2M1KSwgYm9hcmRfYWhjaSB9LCAvKiBJQ0g3TSAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjdjMyksIGJvYXJkX2FoY2kgfSwgLyogSUNIN1IgKi8KLQl7IFBDSV9WREVWSUNFKEFMLCAweDUyODgpLCBib2FyZF9haGNpIH0sIC8qIFVMaSBNNTI4OCAqLworCXsgUENJX1ZERVZJQ0UoQUwsIDB4NTI4OCksIGJvYXJkX2FoY2lfaWduX2lmZXJyIH0sIC8qIFVMaSBNNTI4OCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjY4MSksIGJvYXJkX2FoY2kgfSwgLyogRVNCMiAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjY4MiksIGJvYXJkX2FoY2kgfSwgLyogRVNCMiAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjY4MyksIGJvYXJkX2FoY2kgfSwgLyogRVNCMiAqLwpAQCAtNDAyLDYgKzQwNywxNCBAQAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NGQpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NSAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NGUpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NSAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NGYpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NWMpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NWQpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NWUpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NWYpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NSAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTApLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTEpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTIpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTMpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTQpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTUpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTYpLCBib2FyZF9haGNpIH0sCQkvKiBNQ1A2NyAqLwpAQCAtNTc4LDM1ICs1OTEsMTggQEAKIHsKIAl1MzIgY21kLCBzY29udHJvbDsKIAorCWlmICghKGNhcCAmIEhPU1RfQ0FQX1NTUykpCisJCXJldHVybjsKKworCS8qIHB1dCBkZXZpY2UgaW50byBsaXN0ZW4gbW9kZSwgZmlyc3Qgc2V0IFB4U0NUTC5ERVQgdG8gMCAqLworCXNjb250cm9sID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9TQ1JfQ1RMKTsKKwlzY29udHJvbCAmPSB+MHhmOworCXdyaXRlbChzY29udHJvbCwgcG9ydF9tbWlvICsgUE9SVF9TQ1JfQ1RMKTsKKworCS8qIHRoZW4gc2V0IFB4Q01ELlNVRCB0byAwICovCiAJY21kID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTUQpICYgflBPUlRfQ01EX0lDQ19NQVNLOwotCi0JaWYgKGNhcCAmIEhPU1RfQ0FQX1NTQykgewotCQkvKiBlbmFibGUgdHJhbnNpdGlvbnMgdG8gc2x1bWJlciBtb2RlICovCi0JCXNjb250cm9sID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9TQ1JfQ1RMKTsKLQkJaWYgKChzY29udHJvbCAmIDB4MGYwMCkgPiAweDEwMCkgewotCQkJc2NvbnRyb2wgJj0gfjB4ZjAwOwotCQkJd3JpdGVsKHNjb250cm9sLCBwb3J0X21taW8gKyBQT1JUX1NDUl9DVEwpOwotCQl9Ci0KLQkJLyogcHV0IGRldmljZSBpbnRvIHNsdW1iZXIgbW9kZSAqLwotCQl3cml0ZWwoY21kIHwgUE9SVF9DTURfSUNDX1NMVU1CRVIsIHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKLQotCQkvKiB3YWl0IGZvciB0aGUgdHJhbnNpdGlvbiB0byBjb21wbGV0ZSAqLwotCQlhdGFfd2FpdF9yZWdpc3Rlcihwb3J0X21taW8gKyBQT1JUX0NNRCwgUE9SVF9DTURfSUNDX1NMVU1CRVIsCi0JCQkJICBQT1JUX0NNRF9JQ0NfU0xVTUJFUiwgMSwgNTApOwotCX0KLQotCS8qIHB1dCBkZXZpY2UgaW50byBsaXN0ZW4gbW9kZSAqLwotCWlmIChjYXAgJiBIT1NUX0NBUF9TU1MpIHsKLQkJLyogZmlyc3Qgc2V0IFB4U0NUTC5ERVQgdG8gMCAqLwotCQlzY29udHJvbCA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfU0NSX0NUTCk7Ci0JCXNjb250cm9sICY9IH4weGY7Ci0JCXdyaXRlbChzY29udHJvbCwgcG9ydF9tbWlvICsgUE9SVF9TQ1JfQ1RMKTsKLQotCQkvKiB0aGVuIHNldCBQeENNRC5TVUQgdG8gMCAqLwotCQljbWQgJj0gflBPUlRfQ01EX1NQSU5fVVA7Ci0JCXdyaXRlbChjbWQsIHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKLQl9CisJY21kICY9IH5QT1JUX0NNRF9TUElOX1VQOworCXdyaXRlbChjbWQsIHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKIH0KIAogc3RhdGljIHZvaWQgYWhjaV9pbml0X3BvcnQodm9pZCBfX2lvbWVtICpwb3J0X21taW8sIHUzMiBjYXAsCkBAIC02NDUsOCArNjQxLDYgQEAKIAl1MzIgY2FwX3NhdmUsIGltcGxfc2F2ZSwgdG1wOwogCiAJY2FwX3NhdmUgPSByZWFkbChtbWlvICsgSE9TVF9DQVApOwotCWNhcF9zYXZlICY9ICggKDE8PDI4KSB8ICgxPDwxNykgKTsKLQljYXBfc2F2ZSB8PSAoMSA8PCAyNyk7CiAJaW1wbF9zYXZlID0gcmVhZGwobW1pbyArIEhPU1RfUE9SVFNfSU1QTCk7CiAKIAkvKiBnbG9iYWwgY29udHJvbGxlciByZXNldCAqLwpAQCAtOTA5LDcgKzkwMyw3IEBACiAKIAkvKiBjbGVhciBEMkggcmVjZXB0aW9uIGFyZWEgdG8gcHJvcGVybHkgd2FpdCBmb3IgRDJIIEZJUyAqLwogCWF0YV90Zl9pbml0KGFwLT5kZXZpY2UsICZ0Zik7Ci0JdGYuY29tbWFuZCA9IDB4ZmY7CisJdGYuY29tbWFuZCA9IDB4ODA7CiAJYXRhX3RmX3RvX2ZpcygmdGYsIGQyaF9maXMsIDApOwogCiAJcmMgPSBzYXRhX3N0ZF9oYXJkcmVzZXQoYXAsIGNsYXNzKTsKQEAgLTExMjAsOCArMTExNCw5IEBACiAJdm9pZCBfX2lvbWVtICptbWlvID0gYXAtPmhvc3QtPm1taW9fYmFzZTsKIAl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IGFoY2lfcG9ydF9iYXNlKG1taW8sIGFwLT5wb3J0X25vKTsKIAlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSA9ICZhcC0+ZWhfaW5mbzsKKwlzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAl1MzIgc3RhdHVzLCBxY19hY3RpdmU7Ci0JaW50IHJjOworCWludCByYywga25vd25faXJxID0gMDsKIAogCXN0YXR1cyA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfSVJRX1NUQVQpOwogCXdyaXRlbChzdGF0dXMsIHBvcnRfbW1pbyArIFBPUlRfSVJRX1NUQVQpOwpAQCAtMTE0OCwxNyArMTE0Myw1MyBAQAogCiAJLyogaG1tbS4uLiBhIHNwdXJpb3VzIGludGVydXB0ICovCiAKLQkvKiBzb21lIGRldmljZXMgc2VuZCBEMkggcmVnIHdpdGggSSBiaXQgc2V0IGR1cmluZyBOQ1EgY29tbWFuZCBwaGFzZSAqLwotCWlmIChhcC0+c2FjdGl2ZSAmJiAoc3RhdHVzICYgUE9SVF9JUlFfRDJIX1JFR19GSVMpKQorCS8qIGlmICFOQ1EsIGlnbm9yZS4gIE5vIG1vZGVybiBBVEEgZGV2aWNlIGhhcyBicm9rZW4gSFNNCisJICogaW1wbGVtZW50YXRpb24gZm9yIG5vbi1OQ1EgY29tbWFuZHMuCisJICovCisJaWYgKCFhcC0+c2FjdGl2ZSkKIAkJcmV0dXJuOwogCi0JLyogaWdub3JlIGludGVyaW0gUElPIHNldHVwIGZpcyBpbnRlcnJ1cHRzICovCi0JaWYgKGF0YV90YWdfdmFsaWQoYXAtPmFjdGl2ZV90YWcpICYmIChzdGF0dXMgJiBQT1JUX0lSUV9QSU9TX0ZJUykpCi0JCXJldHVybjsKKwlpZiAoc3RhdHVzICYgUE9SVF9JUlFfRDJIX1JFR19GSVMpIHsKKwkJaWYgKCFwcC0+bmNxX3Nhd19kMmgpCisJCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fSU5GTywKKwkJCQkiRDJIIHJlZyB3aXRoIEkgZHVyaW5nIE5DUSwgIgorCQkJCSJ0aGlzIG1lc3NhZ2Ugd29uJ3QgYmUgcHJpbnRlZCBhZ2FpblxuIik7CisJCXBwLT5uY3Ffc2F3X2QyaCA9IDE7CisJCWtub3duX2lycSA9IDE7CisJfQogCi0JaWYgKGF0YV9yYXRlbGltaXQoKSkKKwlpZiAoc3RhdHVzICYgUE9SVF9JUlFfRE1BU19GSVMpIHsKKwkJaWYgKCFwcC0+bmNxX3Nhd19kbWFzKQorCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0lORk8sCisJCQkJIkRNQVMgRklTIGR1cmluZyBOQ1EsICIKKwkJCQkidGhpcyBtZXNzYWdlIHdvbid0IGJlIHByaW50ZWQgYWdhaW5cbiIpOworCQlwcC0+bmNxX3Nhd19kbWFzID0gMTsKKwkJa25vd25faXJxID0gMTsKKwl9CisKKwlpZiAoc3RhdHVzICYgUE9SVF9JUlFfU0RCX0ZJUyAmJgorCQkgICBwcC0+bmNxX3Nhd19zcHVyaW91c19zZGJfY250IDwgMTApIHsKKwkJLyogU0RCIEZJUyBjb250YWluaW5nIHNwdXJpb3VzIGNvbXBsZXRpb25zIG1pZ2h0IGJlCisJCSAqIGRhbmdlcm91cywgd2UgbmVlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlbS4gIFByaW50CisJCSAqIG1vcmUgb2YgaXQuCisJCSAqLworCQljb25zdCB1MzIgKmYgPSBwcC0+cnhfZmlzICsgUlhfRklTX1NEQjsKKworCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fSU5GTywgIlNwdXJpb3VzIFNEQiBGSVMgZHVyaW5nIE5DUSAiCisJCQkJImlzc3VlPTB4JXggU0FjdD0weCV4IEZJUz0lMDh4OiUwOHglc1xuIiwKKwkJCQlyZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRF9JU1NVRSksCisJCQkJcmVhZGwocG9ydF9tbWlvICsgUE9SVF9TQ1JfQUNUKSwKKwkJCQlsZTMyX3RvX2NwdShmWzBdKSwgbGUzMl90b19jcHUoZlsxXSksCisJCQkJcHAtPm5jcV9zYXdfc3B1cmlvdXNfc2RiX2NudCA8IDEwID8KKwkJCQkiIiA6ICIsIHNodXR0aW5nIHVwIik7CisKKwkJcHAtPm5jcV9zYXdfc3B1cmlvdXNfc2RiX2NudCsrOworCQlrbm93bl9pcnEgPSAxOworCX0KKworCWlmICgha25vd25faXJxKQogCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fSU5GTywgInNwdXJpb3VzIGludGVycnVwdCAiCi0JCQkJIihpcnFfc3RhdCAweCV4IGFjdGl2ZV90YWcgJWQgc2FjdGl2ZSAweCV4KVxuIiwKKwkJCQkiKGlycV9zdGF0IDB4JXggYWN0aXZlX3RhZyAweCV4IHNhY3RpdmUgMHgleClcbiIsCiAJCQkJc3RhdHVzLCBhcC0+YWN0aXZlX3RhZywgYXAtPnNhY3RpdmUpOwogfQogCkBAIC0xMjUxLDcgKzEyODIsNyBAQAogCS8qIGNsZWFyIElSUSAqLwogCXRtcCA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfSVJRX1NUQVQpOwogCXdyaXRlbCh0bXAsIHBvcnRfbW1pbyArIFBPUlRfSVJRX1NUQVQpOwotCXdyaXRlbCgxIDw8IGFwLT5pZCwgbW1pbyArIEhPU1RfSVJRX1NUQVQpOworCXdyaXRlbCgxIDw8IGFwLT5wb3J0X25vLCBtbWlvICsgSE9TVF9JUlFfU1RBVCk7CiAKIAkvKiB0dXJuIElSUSBiYWNrIG9uICovCiAJd3JpdGVsKERFRl9QT1JUX0lSUSwgcG9ydF9tbWlvICsgUE9SVF9JUlFfTUFTSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwppbmRleCA5MDg3NTFkLi4yNGFmNTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKQEAgLTY0LDYgKzY0LDcgQEAKIC8qKgogICoJZ2VuZXJpY19zZXRfbW9kZQktCW1vZGUgc2V0dGluZwogICoJQGFwOiBpbnRlcmZhY2UgdG8gc2V0IHVwCisgKglAdW51c2VkOiByZXR1cm5lZCBkZXZpY2Ugb24gZXJyb3IKICAqCiAgKglVc2UgYSBub24gc3RhbmRhcmQgc2V0X21vZGUgZnVuY3Rpb24uIFdlIGRvbid0IHdhbnQgdG8gYmUgdHVuZWQuCiAgKglUaGUgQklPUyBjb25maWd1cmVkIGV2ZXJ5dGhpbmcuIE91ciBqb2IgaXMgbm90IHRvIGZpZGRsZS4gV2UKQEAgLTcxLDcgKzcyLDcgQEAKICAqCWFuZCByZXNwZWN0IHRoZW0uCiAgKi8KIAotc3RhdGljIHZvaWQgZ2VuZXJpY19zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBnZW5lcmljX3NldF9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICoqdW51c2VkKQogewogCWludCBkbWFfZW5hYmxlZCA9IDA7CiAJaW50IGk7CkBAIC04Miw3ICs4Myw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9ERVZJQ0VTOyBpKyspIHsKIAkJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9ICZhcC0+ZGV2aWNlW2ldOwotCQlpZiAoYXRhX2Rldl9lbmFibGVkKGRldikpIHsKKwkJaWYgKGF0YV9kZXZfcmVhZHkoZGV2KSkgewogCQkJLyogV2UgZG9uJ3QgcmVhbGx5IGNhcmUgKi8KIAkJCWRldi0+cGlvX21vZGUgPSBYRkVSX1BJT18wOwogCQkJZGV2LT5kbWFfbW9kZSA9IFhGRVJfTVdfRE1BXzA7CkBAIC05OSw2ICsxMDAsNyBAQAogCQkJfQogCQl9CiAJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBnZW5lcmljX3NodCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCmluZGV4IGM3ZGUwYmIuLjQ3NzAxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwpAQCAtMjI2LDE0ICsyMjYsMjYgQEAKIAl7IDB4ODA4NiwgMHgyN2MwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAogCS8qIDI4MDFHQk0vR0hNIChJQ0g3TSwgaWRlbnRpY2FsIHRvIElDSDZNKSAqLwogCXsgMHg4MDg2LCAweDI3YzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDZtX3NhdGFfYWhjaSB9LAotCS8qIEVudGVycHJpc2UgU291dGhicmlkZ2UgMiAod2hlcmUncyB0aGUgZGF0YXNoZWV0PykgKi8KKwkvKiBFbnRlcnByaXNlIFNvdXRoYnJpZGdlIDIgKDYzMXhFU0IvNjMyeEVTQikgKi8KIAl7IDB4ODA4NiwgMHgyNjgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAotCS8qIFNBVEEgQ29udHJvbGxlciAxIElERSAoSUNIOCwgbm8gZGF0YXNoZWV0IHlldCkgKi8KKwkvKiBTQVRBIENvbnRyb2xsZXIgMSBJREUgKElDSDgpICovCiAJeyAweDgwODYsIDB4MjgyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhX2FoY2kgfSwKLQkvKiBTQVRBIENvbnRyb2xsZXIgMiBJREUgKElDSDgsIGRpdHRvKSAqLworCS8qIFNBVEEgQ29udHJvbGxlciAyIElERSAoSUNIOCkgKi8KIAl7IDB4ODA4NiwgMHgyODI1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGFfYWhjaSB9LAotCS8qIE1vYmlsZSBTQVRBIENvbnRyb2xsZXIgSURFIChJQ0g4TSwgZGl0dG8pICovCisJLyogTW9iaWxlIFNBVEEgQ29udHJvbGxlciBJREUgKElDSDhNKSAqLwogCXsgMHg4MDg2LCAweDI4MjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YV9haGNpIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoSUNIOSkgKi8KKwl7IDB4ODA4NiwgMHgyOTIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGFfYWhjaSB9LAorCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKElDSDkpICovCisJeyAweDgwODYsIDB4MjkyMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhX2FoY2kgfSwKKwkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChJQ0g5KSAqLworCXsgMHg4MDg2LCAweDI5MjYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YV9haGNpIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoSUNIOU0pICovCisJeyAweDgwODYsIDB4MjkyOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhX2FoY2kgfSwKKwkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChJQ0g5TSkgKi8KKwl7IDB4ODA4NiwgMHgyOTJkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGFfYWhjaSB9LAorCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKElDSDlNKSAqLworCXsgMHg4MDg2LCAweDI5MmUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YV9haGNpIH0sCiAKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CkBAIC0zMzAsNyArMzQyLDcgQEAKIAogCS5wb3J0X3N0YXJ0CQk9IGF0YV9wb3J0X3N0YXJ0LAogCS5wb3J0X3N0b3AJCT0gYXRhX3BvcnRfc3RvcCwKLQkuaG9zdF9zdG9wCQk9IGF0YV9ob3N0X3N0b3AsCisJLmhvc3Rfc3RvcAkJPSBwaWl4X2hvc3Rfc3RvcCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwaWl4X3NhdGFfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggMDExYzBhOC4uNjY3YWNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC0xMDM3LDcgKzEwMzcsNyBAQAogCQkgKiB0aGUgUElPIHRpbWluZyBudW1iZXIgZm9yIHRoZSBtYXhpbXVtLiBUdXJuIGl0IGludG8KIAkJICogYSBtYXNrLgogCQkgKi8KLQkJdTggbW9kZSA9IGlkW0FUQV9JRF9PTERfUElPX01PREVTXSAmIDB4RkY7CisJCXU4IG1vZGUgPSAoaWRbQVRBX0lEX09MRF9QSU9fTU9ERVNdID4+IDgpICYgMHhGRjsKIAkJaWYgKG1vZGUgPCA1KQkvKiBWYWxpZCBQSU8gcmFuZ2UgKi8KICAgICAgICAgICAgICAgICAJcGlvX21hc2sgPSAoMiA8PCBtb2RlKSAtIDE7CiAJCWVsc2UKQEAgLTEyNTAsNiArMTI1MCw3IEBACiAKIAkJYXRhX3NnX2luaXQocWMsIHNnLCBuX2VsZW0pOwogCQlxYy0+bnNlY3QgPSBidWZsZW4gLyBBVEFfU0VDVF9TSVpFOworCQlxYy0+bmJ5dGVzID0gYnVmbGVuOwogCX0KIAogCXFjLT5wcml2YXRlX2RhdGEgPSAmd2FpdDsKQEAgLTEzMzIsNyArMTMzMyw3IEBACiB9CiAKIC8qKgotICoJYXRhX2V4ZWNfaW50ZXJuYWxfc2cgLSBleGVjdXRlIGxpYmF0YSBpbnRlcm5hbCBjb21tYW5kCisgKglhdGFfZXhlY19pbnRlcm5hbCAtIGV4ZWN1dGUgbGliYXRhIGludGVybmFsIGNvbW1hbmQKICAqCUBkZXY6IERldmljZSB0byB3aGljaCB0aGUgY29tbWFuZCBpcyBzZW50CiAgKglAdGY6IFRhc2tmaWxlIHJlZ2lzdGVycyBmb3IgdGhlIGNvbW1hbmQgYW5kIHRoZSByZXN1bHQKICAqCUBjZGI6IENEQiBmb3IgcGFja2V0IGNvbW1hbmQKQEAgLTEzNTMsMTEgKzEzNTQsMTcgQEAKIAkJCSAgIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLCBjb25zdCB1OCAqY2RiLAogCQkJICAgaW50IGRtYV9kaXIsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbikKIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpwc2cgPSBOVUxMLCBzZzsKKwl1bnNpZ25lZCBpbnQgbl9lbGVtID0gMDsKIAotCXNnX2luaXRfb25lKCZzZywgYnVmLCBidWZsZW4pOworCWlmIChkbWFfZGlyICE9IERNQV9OT05FKSB7CisJCVdBUk5fT04oIWJ1Zik7CisJCXNnX2luaXRfb25lKCZzZywgYnVmLCBidWZsZW4pOworCQlwc2cgPSAmc2c7CisJCW5fZWxlbSsrOworCX0KIAotCXJldHVybiBhdGFfZXhlY19pbnRlcm5hbF9zZyhkZXYsIHRmLCBjZGIsIGRtYV9kaXIsICZzZywgMSk7CisJcmV0dXJuIGF0YV9leGVjX2ludGVybmFsX3NnKGRldiwgdGYsIGNkYiwgZG1hX2RpciwgcHNnLCBuX2VsZW0pOwogfQogCiAvKioKQEAgLTI0MjUsMTggKzI0MzIsOCBAQAogCWludCBpLCByYyA9IDAsIHVzZWRfZG1hID0gMCwgZm91bmQgPSAwOwogCiAJLyogaGFzIHByaXZhdGUgc2V0X21vZGU/ICovCi0JaWYgKGFwLT5vcHMtPnNldF9tb2RlKSB7Ci0JCS8qIEZJWE1FOiBtYWtlIC0+c2V0X21vZGUgaGFuZGxlIG5vIGRldmljZSBjYXNlIGFuZAotCQkgKiByZXR1cm4gZXJyb3IgY29kZSBhbmQgZmFpbGluZyBkZXZpY2Ugb24gZmFpbHVyZS4KLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykgewotCQkJaWYgKGF0YV9kZXZfcmVhZHkoJmFwLT5kZXZpY2VbaV0pKSB7Ci0JCQkJYXAtPm9wcy0+c2V0X21vZGUoYXApOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiAwOwotCX0KKwlpZiAoYXAtPm9wcy0+c2V0X21vZGUpCisJCXJldHVybiBhcC0+b3BzLT5zZXRfbW9kZShhcCwgcl9mYWlsZWRfZGV2KTsKIAogCS8qIHN0ZXAgMTogY2FsY3VsYXRlIHhmZXJfbWFzayAqLwogCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCAwOGFkNDRiLi43NDg0MzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtMTc5Niw3ICsxNzk2LDcgQEAKIAkJKnJfZmFpbGVkX2RldiA9IGRldjsKIAogCURQUklOVEsoIkVYSVRcbiIpOwotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0xOTc5LDYgKzE5NzksMTAgQEAKIAogCQllaGMtPnRyaWVzW2Rldi0+ZGV2bm9dID0gQVRBX0VIX0RFVl9UUklFUzsKIAorCQkvKiBjb2xsZWN0IHBvcnQgYWN0aW9uIG1hc2sgcmVjb3JkZWQgaW4gZGV2IGFjdGlvbnMgKi8KKwkJZWhjLT5pLmFjdGlvbiB8PSBlaGMtPmkuZGV2X2FjdGlvbltpXSAmIH5BVEFfRUhfUEVSREVWX01BU0s7CisJCWVoYy0+aS5kZXZfYWN0aW9uW2ldICY9IEFUQV9FSF9QRVJERVZfTUFTSzsKKwogCQkvKiBwcm9jZXNzIGhvdHBsdWcgcmVxdWVzdCAqLwogCQlpZiAoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19ERVRBQ0gpCiAJCQlhdGFfZWhfZGV0YWNoX2RldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKaW5kZXggNjY0ZTEzNy4uNzM5MDJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC01MSw3ICs1MSw3IEBACiAKICNkZWZpbmUgU0VDVE9SX1NJWkUJNTEyCiAKLXR5cGVkZWYgdW5zaWduZWQgaW50ICgqYXRhX3hsYXRfZnVuY190KShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCBjb25zdCB1OCAqc2NzaWNtZCk7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAoKmF0YV94bGF0X2Z1bmNfdCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX2RldmljZSAqIF9fYXRhX3Njc2lfZmluZF9kZXYoc3RydWN0IGF0YV9wb3J0ICphcCwKIAkJCQkJY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpZGV2KTsKQEAgLTI3Myw4ICsyNzMsOCBAQAogewogCWludCByYyA9IDA7CiAJdTggc2NzaV9jbWRbTUFYX0NPTU1BTkRfU0laRV07Ci0JdTggYXJnc1s3XTsKLQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7CisJdTggYXJnc1s3XSwgKnNlbnNlYnVmID0gTlVMTDsKKwlpbnQgY21kX3Jlc3VsdDsKIAogCWlmIChhcmcgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yODIsMTAgKzI4MiwxNCBAQAogCWlmIChjb3B5X2Zyb21fdXNlcihhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJc2Vuc2VidWYgPSBremFsbG9jKFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgR0ZQX05PSU8pOworCWlmICghc2Vuc2VidWYpCisJCXJldHVybiAtRU5PTUVNOworCiAJbWVtc2V0KHNjc2lfY21kLCAwLCBzaXplb2Yoc2NzaV9jbWQpKTsKIAlzY3NpX2NtZFswXSAgPSBBVEFfMTY7CiAJc2NzaV9jbWRbMV0gID0gKDMgPDwgMSk7IC8qIE5vbi1kYXRhICovCi0JLyogc2NzaV9jbWRbMl0gaXMgYWxyZWFkeSAwIC0tIG5vIG9mZi5saW5lLCBjYywgb3IgZGF0YSB4ZmVyICovCisJc2NzaV9jbWRbMl0gID0gMHgyMDsgICAgIC8qIGNjIGJ1dCBubyBvZmYubGluZSBvciBkYXRhIHhmZXIgKi8KIAlzY3NpX2NtZFs0XSAgPSBhcmdzWzFdOwogCXNjc2lfY21kWzZdICA9IGFyZ3NbMl07CiAJc2NzaV9jbWRbOF0gID0gYXJnc1szXTsKQEAgLTI5NSwxMSArMjk5LDQ2IEBACiAKIAkvKiBHb29kIHZhbHVlcyBmb3IgdGltZW91dCBhbmQgcmV0cmllcz8gIFZhbHVlcyBiZWxvdwogCSAgIGZyb20gc2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoKSBmb3IgZGVmYXVsdCBjYXNlLi4uICovCi0JaWYgKHNjc2lfZXhlY3V0ZV9yZXEoc2NzaWRldiwgc2NzaV9jbWQsIERNQV9OT05FLCBOVUxMLCAwLCAmc3NoZHIsCi0JCQkgICAgICgxMCpIWiksIDUpKQotCQlyYyA9IC1FSU87CisJY21kX3Jlc3VsdCA9IHNjc2lfZXhlY3V0ZShzY3NpZGV2LCBzY3NpX2NtZCwgRE1BX05PTkUsIE5VTEwsIDAsCisJCQkJc2Vuc2VidWYsICgxMCpIWiksIDUsIDApOwogCi0JLyogTmVlZCBjb2RlIHRvIHJldHJpZXZlIGRhdGEgZnJvbSBjaGVjayBjb25kaXRpb24/ICovCisJaWYgKGRyaXZlcl9ieXRlKGNtZF9yZXN1bHQpID09IERSSVZFUl9TRU5TRSkgey8qIHNlbnNlIGRhdGEgYXZhaWxhYmxlICovCisJCXU4ICpkZXNjID0gc2Vuc2VidWYgKyA4OworCQljbWRfcmVzdWx0ICY9IH4oMHhGRjw8MjQpOyAvKiBEUklWRVJfU0VOU0UgaXMgbm90IGFuIGVycm9yICovCisKKwkJLyogSWYgd2Ugc2V0IGNjIHRoZW4gQVRBIHBhc3MtdGhyb3VnaCB3aWxsIGNhdXNlIGEKKwkJICogY2hlY2sgY29uZGl0aW9uIGV2ZW4gaWYgbm8gZXJyb3IuIEZpbHRlciB0aGF0LiAqLworCQlpZiAoY21kX3Jlc3VsdCAmIFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikgeworCQkJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOworCQkJc2NzaV9ub3JtYWxpemVfc2Vuc2Uoc2Vuc2VidWYsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwKKwkJCQkJCSZzc2hkcik7CisJCQlpZiAoc3NoZHIuc2Vuc2Vfa2V5PT0wICYmCisJCQkJc3NoZHIuYXNjPT0wICYmIHNzaGRyLmFzY3E9PTApCisJCQkJY21kX3Jlc3VsdCAmPSB+U0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOworCQl9CisKKwkJLyogU2VuZCB1c2Vyc3BhY2UgQVRBIHJlZ2lzdGVycyAqLworCQlpZiAoc2Vuc2VidWZbMF0gPT0gMHg3MiAmJgkvKiBmb3JtYXQgaXMgImRlc2NyaXB0b3IiICovCisJCQkJZGVzY1swXSA9PSAweDA5KSB7LyogY29kZSBpcyAiQVRBIERlc2NyaXB0b3IiICovCisJCQlhcmdzWzBdID0gZGVzY1sxM107CS8qIHN0YXR1cyAqLworCQkJYXJnc1sxXSA9IGRlc2NbM107CS8qIGVycm9yICovCisJCQlhcmdzWzJdID0gZGVzY1s1XTsJLyogc2VjdG9yIGNvdW50ICgwOjcpICovCisJCQlhcmdzWzNdID0gZGVzY1s3XTsJLyogbGJhbCAqLworCQkJYXJnc1s0XSA9IGRlc2NbOV07CS8qIGxiYW0gKi8KKwkJCWFyZ3NbNV0gPSBkZXNjWzExXTsJLyogbGJhaCAqLworCQkJYXJnc1s2XSA9IGRlc2NbMTJdOwkvKiBzZWxlY3QgKi8KKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBhcmdzLCBzaXplb2YoYXJncykpKQorCQkJCXJjID0gLUVGQVVMVDsKKwkJfQorCX0KKworCWlmIChjbWRfcmVzdWx0KSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKKyBlcnJvcjoKKwlrZnJlZShzZW5zZWJ1Zik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zNzIsNyArNDExLDcgQEAKIAkJaWYgKGNtZC0+dXNlX3NnKSB7CiAJCQlxYy0+X19zZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgY21kLT5yZXF1ZXN0X2J1ZmZlcjsKIAkJCXFjLT5uX2VsZW0gPSBjbWQtPnVzZV9zZzsKLQkJfSBlbHNlIHsKKwkJfSBlbHNlIGlmIChjbWQtPnJlcXVlc3RfYnVmZmxlbikgewogCQkJcWMtPl9fc2cgPSAmcWMtPnNnZW50OwogCQkJcWMtPm5fZWxlbSA9IDE7CiAJCX0KQEAgLTkzNSw3ICs5NzQsNiBAQAogLyoqCiAgKglhdGFfc2NzaV9zdGFydF9zdG9wX3hsYXQgLSBUcmFuc2xhdGUgU0NTSSBTVEFSVCBTVE9QIFVOSVQgY29tbWFuZAogICoJQHFjOiBTdG9yYWdlIGZvciB0cmFuc2xhdGVkIEFUQSB0YXNrZmlsZQotICoJQHNjc2ljbWQ6IFNDU0kgY29tbWFuZCB0byB0cmFuc2xhdGUKICAqCiAgKglTZXRzIHVwIGFuIEFUQSB0YXNrZmlsZSB0byBpc3N1ZSBTVEFOREJZICh0byBzdG9wKSBvciBSRUFEIFZFUklGWQogICoJKHRvIHN0YXJ0KS4gUGVyaGFwcyB0aGVzZSBjb21tYW5kcyBzaG91bGQgYmUgcHJlY2VkZWQgYnkKQEAgLTk0OCwyMiArOTg2LDI1IEBACiAgKglSRVRVUk5TOgogICoJWmVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBlcnJvci4KICAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0YV9zY3NpX3N0YXJ0X3N0b3BfeGxhdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLAotCQkJCQkgICAgIGNvbnN0IHU4ICpzY3NpY21kKQorc3RhdGljIHVuc2lnbmVkIGludCBhdGFfc2NzaV9zdGFydF9zdG9wX3hsYXQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gcWMtPnNjc2ljbWQ7CiAJc3RydWN0IGF0YV90YXNrZmlsZSAqdGYgPSAmcWMtPnRmOworCWNvbnN0IHU4ICpjZGIgPSBzY21kLT5jbW5kOworCisJaWYgKHNjbWQtPmNtZF9sZW4gPCA1KQorCQlnb3RvIGludmFsaWRfZmxkOwogCiAJdGYtPmZsYWdzIHw9IEFUQV9URkxBR19ERVZJQ0UgfCBBVEFfVEZMQUdfSVNBRERSOwogCXRmLT5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKLQlpZiAoc2NzaWNtZFsxXSAmIDB4MSkgeworCWlmIChjZGJbMV0gJiAweDEpIHsKIAkJOwkvKiBpZ25vcmUgSU1NRUQgYml0LCB2aW9sYXRlcyBzYXQtcjA1ICovCiAJfQotCWlmIChzY3NpY21kWzRdICYgMHgyKQorCWlmIChjZGJbNF0gJiAweDIpCiAJCWdvdG8gaW52YWxpZF9mbGQ7ICAgICAgIC8qIExPRUogYml0IHNldCBub3Qgc3VwcG9ydGVkICovCi0JaWYgKCgoc2NzaWNtZFs0XSA+PiA0KSAmIDB4ZikgIT0gMCkKKwlpZiAoKChjZGJbNF0gPj4gNCkgJiAweGYpICE9IDApCiAJCWdvdG8gaW52YWxpZF9mbGQ7ICAgICAgIC8qIHBvd2VyIGNvbmRpdGlvbnMgbm90IHN1cHBvcnRlZCAqLwotCWlmIChzY3NpY21kWzRdICYgMHgxKSB7CisJaWYgKGNkYls0XSAmIDB4MSkgewogCQl0Zi0+bnNlY3QgPSAxOwkvKiAxIHNlY3RvciwgbGJhPTAgKi8KIAogCQlpZiAocWMtPmRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfTEJBKSB7CkBAIC05ODEsMTEgKzEwMjIsMTAgQEAKIAkJfQogCiAJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9WRVJJRlk7CS8qIFJFQUQgVkVSSUZZICovCi0JfSBlbHNlIHsKLQkJdGYtPm5zZWN0ID0gMDsJLyogdGltZSBwZXJpb2QgdmFsdWUgKDAgaW1wbGllcyBub3cpICovCi0JCXRmLT5jb21tYW5kID0gQVRBX0NNRF9TVEFOREJZOwotCQkvKiBDb25zaWRlcjogQVRBIFNUQU5EQlkgSU1NRURJQVRFIGNvbW1hbmQgKi8KLQl9CisJfSBlbHNlCisJCS8qIElzc3VlIEFUQSBTVEFOREJZIElNTUVESUFURSBjb21tYW5kICovCisJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9TVEFOREJZTk9XMTsKKwogCS8qCiAJICogU3RhbmRieSBhbmQgSWRsZSBjb25kaXRpb24gdGltZXJzIGNvdWxkIGJlIGltcGxlbWVudGVkIGJ1dCB0aGF0CiAJICogd291bGQgcmVxdWlyZSBsaWJhdGEgdG8gaW1wbGVtZW50IHRoZSBQb3dlciBjb25kaXRpb24gbW9kZSBwYWdlCkBAIC05OTYsNyArMTAzNiw3IEBACiAJcmV0dXJuIDA7CiAKIGludmFsaWRfZmxkOgotCWF0YV9zY3NpX3NldF9zZW5zZShxYy0+c2NzaWNtZCwgSUxMRUdBTF9SRVFVRVNULCAweDI0LCAweDApOworCWF0YV9zY3NpX3NldF9zZW5zZShzY21kLCBJTExFR0FMX1JFUVVFU1QsIDB4MjQsIDB4MCk7CiAJLyogIkludmFsaWQgZmllbGQgaW4gY2JkIiAqLwogCXJldHVybiAxOwogfQpAQCAtMTAwNSw3ICsxMDQ1LDYgQEAKIC8qKgogICoJYXRhX3Njc2lfZmx1c2hfeGxhdCAtIFRyYW5zbGF0ZSBTQ1NJIFNZTkNIUk9OSVpFIENBQ0hFIGNvbW1hbmQKICAqCUBxYzogU3RvcmFnZSBmb3IgdHJhbnNsYXRlZCBBVEEgdGFza2ZpbGUKLSAqCUBzY3NpY21kOiBTQ1NJIGNvbW1hbmQgdG8gdHJhbnNsYXRlIChpZ25vcmVkKQogICoKICAqCVNldHMgdXAgYW4gQVRBIHRhc2tmaWxlIHRvIGlzc3VlIEZMVVNIIENBQ0hFIG9yCiAgKglGTFVTSCBDQUNIRSBFWFQuCkBAIC0xMDE2LDggKzEwNTUsNyBAQAogICoJUkVUVVJOUzoKICAqCVplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZXJyb3IuCiAgKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBhdGFfc2NzaV9mbHVzaF94bGF0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIGNvbnN0IHU4ICpzY3NpY21kKQorc3RhdGljIHVuc2lnbmVkIGludCBhdGFfc2NzaV9mbHVzaF94bGF0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJc3RydWN0IGF0YV90YXNrZmlsZSAqdGYgPSAmcWMtPnRmOwogCkBAIC0xMDM0LDcgKzEwNzIsNyBAQAogCiAvKioKICAqCXNjc2lfNl9sYmFfbGVuIC0gR2V0IExCQSBhbmQgdHJhbnNmZXIgbGVuZ3RoCi0gKglAc2NzaWNtZDogU0NTSSBjb21tYW5kIHRvIHRyYW5zbGF0ZQorICoJQGNkYjogU0NTSSBjb21tYW5kIHRvIHRyYW5zbGF0ZQogICoKICAqCUNhbGN1bGF0ZSBMQkEgYW5kIHRyYW5zZmVyIGxlbmd0aCBmb3IgNi1ieXRlIGNvbW1hbmRzLgogICoKQEAgLTEwNDIsMTggKzEwODAsMTcgQEAKICAqCUBwbGJhOiB0aGUgTEJBCiAgKglAcGxlbjogdGhlIHRyYW5zZmVyIGxlbmd0aAogICovCi0KLXN0YXRpYyB2b2lkIHNjc2lfNl9sYmFfbGVuKGNvbnN0IHU4ICpzY3NpY21kLCB1NjQgKnBsYmEsIHUzMiAqcGxlbikKK3N0YXRpYyB2b2lkIHNjc2lfNl9sYmFfbGVuKGNvbnN0IHU4ICpjZGIsIHU2NCAqcGxiYSwgdTMyICpwbGVuKQogewogCXU2NCBsYmEgPSAwOwogCXUzMiBsZW4gPSAwOwogCiAJVlBSSU5USygic2l4LWJ5dGUgY29tbWFuZFxuIik7CiAKLQlsYmEgfD0gKCh1NjQpc2NzaWNtZFsyXSkgPDwgODsKLQlsYmEgfD0gKCh1NjQpc2NzaWNtZFszXSk7CisJbGJhIHw9ICgodTY0KWNkYlsyXSkgPDwgODsKKwlsYmEgfD0gKCh1NjQpY2RiWzNdKTsKIAotCWxlbiB8PSAoKHUzMilzY3NpY21kWzRdKTsKKwlsZW4gfD0gKCh1MzIpY2RiWzRdKTsKIAogCSpwbGJhID0gbGJhOwogCSpwbGVuID0gbGVuOwpAQCAtMTA2MSw3ICsxMDk4LDcgQEAKIAogLyoqCiAgKglzY3NpXzEwX2xiYV9sZW4gLSBHZXQgTEJBIGFuZCB0cmFuc2ZlciBsZW5ndGgKLSAqCUBzY3NpY21kOiBTQ1NJIGNvbW1hbmQgdG8gdHJhbnNsYXRlCisgKglAY2RiOiBTQ1NJIGNvbW1hbmQgdG8gdHJhbnNsYXRlCiAgKgogICoJQ2FsY3VsYXRlIExCQSBhbmQgdHJhbnNmZXIgbGVuZ3RoIGZvciAxMC1ieXRlIGNvbW1hbmRzLgogICoKQEAgLTEwNjksMjEgKzExMDYsMjAgQEAKICAqCUBwbGJhOiB0aGUgTEJBCiAgKglAcGxlbjogdGhlIHRyYW5zZmVyIGxlbmd0aAogICovCi0KLXN0YXRpYyB2b2lkIHNjc2lfMTBfbGJhX2xlbihjb25zdCB1OCAqc2NzaWNtZCwgdTY0ICpwbGJhLCB1MzIgKnBsZW4pCitzdGF0aWMgdm9pZCBzY3NpXzEwX2xiYV9sZW4oY29uc3QgdTggKmNkYiwgdTY0ICpwbGJhLCB1MzIgKnBsZW4pCiB7CiAJdTY0IGxiYSA9IDA7CiAJdTMyIGxlbiA9IDA7CiAKIAlWUFJJTlRLKCJ0ZW4tYnl0ZSBjb21tYW5kXG4iKTsKIAotCWxiYSB8PSAoKHU2NClzY3NpY21kWzJdKSA8PCAyNDsKLQlsYmEgfD0gKCh1NjQpc2NzaWNtZFszXSkgPDwgMTY7Ci0JbGJhIHw9ICgodTY0KXNjc2ljbWRbNF0pIDw8IDg7Ci0JbGJhIHw9ICgodTY0KXNjc2ljbWRbNV0pOworCWxiYSB8PSAoKHU2NCljZGJbMl0pIDw8IDI0OworCWxiYSB8PSAoKHU2NCljZGJbM10pIDw8IDE2OworCWxiYSB8PSAoKHU2NCljZGJbNF0pIDw8IDg7CisJbGJhIHw9ICgodTY0KWNkYls1XSk7CiAKLQlsZW4gfD0gKCh1MzIpc2NzaWNtZFs3XSkgPDwgODsKLQlsZW4gfD0gKCh1MzIpc2NzaWNtZFs4XSk7CisJbGVuIHw9ICgodTMyKWNkYls3XSkgPDwgODsKKwlsZW4gfD0gKCh1MzIpY2RiWzhdKTsKIAogCSpwbGJhID0gbGJhOwogCSpwbGVuID0gbGVuOwpAQCAtMTA5MSw3ICsxMTI3LDcgQEAKIAogLyoqCiAgKglzY3NpXzE2X2xiYV9sZW4gLSBHZXQgTEJBIGFuZCB0cmFuc2ZlciBsZW5ndGgKLSAqCUBzY3NpY21kOiBTQ1NJIGNvbW1hbmQgdG8gdHJhbnNsYXRlCisgKglAY2RiOiBTQ1NJIGNvbW1hbmQgdG8gdHJhbnNsYXRlCiAgKgogICoJQ2FsY3VsYXRlIExCQSBhbmQgdHJhbnNmZXIgbGVuZ3RoIGZvciAxNi1ieXRlIGNvbW1hbmRzLgogICoKQEAgLTEwOTksMjcgKzExMzUsMjYgQEAKICAqCUBwbGJhOiB0aGUgTEJBCiAgKglAcGxlbjogdGhlIHRyYW5zZmVyIGxlbmd0aAogICovCi0KLXN0YXRpYyB2b2lkIHNjc2lfMTZfbGJhX2xlbihjb25zdCB1OCAqc2NzaWNtZCwgdTY0ICpwbGJhLCB1MzIgKnBsZW4pCitzdGF0aWMgdm9pZCBzY3NpXzE2X2xiYV9sZW4oY29uc3QgdTggKmNkYiwgdTY0ICpwbGJhLCB1MzIgKnBsZW4pCiB7CiAJdTY0IGxiYSA9IDA7CiAJdTMyIGxlbiA9IDA7CiAKIAlWUFJJTlRLKCJzaXh0ZWVuLWJ5dGUgY29tbWFuZFxuIik7CiAKLQlsYmEgfD0gKCh1NjQpc2NzaWNtZFsyXSkgPDwgNTY7Ci0JbGJhIHw9ICgodTY0KXNjc2ljbWRbM10pIDw8IDQ4OwotCWxiYSB8PSAoKHU2NClzY3NpY21kWzRdKSA8PCA0MDsKLQlsYmEgfD0gKCh1NjQpc2NzaWNtZFs1XSkgPDwgMzI7Ci0JbGJhIHw9ICgodTY0KXNjc2ljbWRbNl0pIDw8IDI0OwotCWxiYSB8PSAoKHU2NClzY3NpY21kWzddKSA8PCAxNjsKLQlsYmEgfD0gKCh1NjQpc2NzaWNtZFs4XSkgPDwgODsKLQlsYmEgfD0gKCh1NjQpc2NzaWNtZFs5XSk7CisJbGJhIHw9ICgodTY0KWNkYlsyXSkgPDwgNTY7CisJbGJhIHw9ICgodTY0KWNkYlszXSkgPDwgNDg7CisJbGJhIHw9ICgodTY0KWNkYls0XSkgPDwgNDA7CisJbGJhIHw9ICgodTY0KWNkYls1XSkgPDwgMzI7CisJbGJhIHw9ICgodTY0KWNkYls2XSkgPDwgMjQ7CisJbGJhIHw9ICgodTY0KWNkYls3XSkgPDwgMTY7CisJbGJhIHw9ICgodTY0KWNkYls4XSkgPDwgODsKKwlsYmEgfD0gKCh1NjQpY2RiWzldKTsKIAotCWxlbiB8PSAoKHUzMilzY3NpY21kWzEwXSkgPDwgMjQ7Ci0JbGVuIHw9ICgodTMyKXNjc2ljbWRbMTFdKSA8PCAxNjsKLQlsZW4gfD0gKCh1MzIpc2NzaWNtZFsxMl0pIDw8IDg7Ci0JbGVuIHw9ICgodTMyKXNjc2ljbWRbMTNdKTsKKwlsZW4gfD0gKCh1MzIpY2RiWzEwXSkgPDwgMjQ7CisJbGVuIHw9ICgodTMyKWNkYlsxMV0pIDw8IDE2OworCWxlbiB8PSAoKHUzMiljZGJbMTJdKSA8PCA4OworCWxlbiB8PSAoKHUzMiljZGJbMTNdKTsKIAogCSpwbGJhID0gbGJhOwogCSpwbGVuID0gbGVuOwpAQCAtMTEyOCw3ICsxMTYzLDYgQEAKIC8qKgogICoJYXRhX3Njc2lfdmVyaWZ5X3hsYXQgLSBUcmFuc2xhdGUgU0NTSSBWRVJJRlkgY29tbWFuZCBpbnRvIGFuIEFUQSBvbmUKICAqCUBxYzogU3RvcmFnZSBmb3IgdHJhbnNsYXRlZCBBVEEgdGFza2ZpbGUKLSAqCUBzY3NpY21kOiBTQ1NJIGNvbW1hbmQgdG8gdHJhbnNsYXRlCiAgKgogICoJQ29udmVydHMgU0NTSSBWRVJJRlkgY29tbWFuZCB0byBhbiBBVEEgUkVBRCBWRVJJRlkgY29tbWFuZC4KICAqCkBAIC0xMTM4LDIzICsxMTcyLDI4IEBACiAgKglSRVRVUk5TOgogICoJWmVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBlcnJvci4KICAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0YV9zY3NpX3ZlcmlmeV94bGF0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIGNvbnN0IHU4ICpzY3NpY21kKQorc3RhdGljIHVuc2lnbmVkIGludCBhdGFfc2NzaV92ZXJpZnlfeGxhdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogeworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQgPSBxYy0+c2NzaWNtZDsKIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiA9ICZxYy0+dGY7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9IHFjLT5kZXY7CiAJdTY0IGRldl9zZWN0b3JzID0gcWMtPmRldi0+bl9zZWN0b3JzOworCWNvbnN0IHU4ICpjZGIgPSBzY21kLT5jbW5kOwogCXU2NCBibG9jazsKIAl1MzIgbl9ibG9jazsKIAogCXRmLT5mbGFncyB8PSBBVEFfVEZMQUdfSVNBRERSIHwgQVRBX1RGTEFHX0RFVklDRTsKIAl0Zi0+cHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CiAKLQlpZiAoc2NzaWNtZFswXSA9PSBWRVJJRlkpCi0JCXNjc2lfMTBfbGJhX2xlbihzY3NpY21kLCAmYmxvY2ssICZuX2Jsb2NrKTsKLQllbHNlIGlmIChzY3NpY21kWzBdID09IFZFUklGWV8xNikKLQkJc2NzaV8xNl9sYmFfbGVuKHNjc2ljbWQsICZibG9jaywgJm5fYmxvY2spOwotCWVsc2UKKwlpZiAoY2RiWzBdID09IFZFUklGWSkgeworCQlpZiAoc2NtZC0+Y21kX2xlbiA8IDEwKQorCQkJZ290byBpbnZhbGlkX2ZsZDsKKwkJc2NzaV8xMF9sYmFfbGVuKGNkYiwgJmJsb2NrLCAmbl9ibG9jayk7CisJfSBlbHNlIGlmIChjZGJbMF0gPT0gVkVSSUZZXzE2KSB7CisJCWlmIChzY21kLT5jbWRfbGVuIDwgMTYpCisJCQlnb3RvIGludmFsaWRfZmxkOworCQlzY3NpXzE2X2xiYV9sZW4oY2RiLCAmYmxvY2ssICZuX2Jsb2NrKTsKKwl9IGVsc2UKIAkJZ290byBpbnZhbGlkX2ZsZDsKIAogCWlmICghbl9ibG9jaykKQEAgLTEyMjksMjQgKzEyNjgsMjMgQEAKIAlyZXR1cm4gMDsKIAogaW52YWxpZF9mbGQ6Ci0JYXRhX3Njc2lfc2V0X3NlbnNlKHFjLT5zY3NpY21kLCBJTExFR0FMX1JFUVVFU1QsIDB4MjQsIDB4MCk7CisJYXRhX3Njc2lfc2V0X3NlbnNlKHNjbWQsIElMTEVHQUxfUkVRVUVTVCwgMHgyNCwgMHgwKTsKIAkvKiAiSW52YWxpZCBmaWVsZCBpbiBjYmQiICovCiAJcmV0dXJuIDE7CiAKIG91dF9vZl9yYW5nZToKLQlhdGFfc2NzaV9zZXRfc2Vuc2UocWMtPnNjc2ljbWQsIElMTEVHQUxfUkVRVUVTVCwgMHgyMSwgMHgwKTsKKwlhdGFfc2NzaV9zZXRfc2Vuc2Uoc2NtZCwgSUxMRUdBTF9SRVFVRVNULCAweDIxLCAweDApOwogCS8qICJMb2dpY2FsIEJsb2NrIEFkZHJlc3Mgb3V0IG9mIHJhbmdlIiAqLwogCXJldHVybiAxOwogCiBub3RoaW5nX3RvX2RvOgotCXFjLT5zY3NpY21kLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCXNjbWQtPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CiAJcmV0dXJuIDE7CiB9CiAKIC8qKgogICoJYXRhX3Njc2lfcndfeGxhdCAtIFRyYW5zbGF0ZSBTQ1NJIHIvdyBjb21tYW5kIGludG8gYW4gQVRBIG9uZQogICoJQHFjOiBTdG9yYWdlIGZvciB0cmFuc2xhdGVkIEFUQSB0YXNrZmlsZQotICoJQHNjc2ljbWQ6IFNDU0kgY29tbWFuZCB0byB0cmFuc2xhdGUKICAqCiAgKglDb252ZXJ0cyBhbnkgb2Ygc2l4IFNDU0kgcmVhZC93cml0ZSBjb21tYW5kcyBpbnRvIHRoZQogICoJQVRBIGNvdW50ZXJwYXJ0LCBpbmNsdWRpbmcgc3RhcnRpbmcgc2VjdG9yIChMQkEpLApAQCAtMTI2MiwyOSArMTMwMCwzMyBAQAogICoJUkVUVVJOUzoKICAqCVplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZXJyb3IuCiAgKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBhdGFfc2NzaV9yd194bGF0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIGNvbnN0IHU4ICpzY3NpY21kKQorc3RhdGljIHVuc2lnbmVkIGludCBhdGFfc2NzaV9yd194bGF0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZCA9IHFjLT5zY3NpY21kOworCWNvbnN0IHU4ICpjZGIgPSBzY21kLT5jbW5kOwogCXVuc2lnbmVkIGludCB0Zl9mbGFncyA9IDA7CiAJdTY0IGJsb2NrOwogCXUzMiBuX2Jsb2NrOwogCWludCByYzsKIAotCWlmIChzY3NpY21kWzBdID09IFdSSVRFXzEwIHx8IHNjc2ljbWRbMF0gPT0gV1JJVEVfNiB8fAotCSAgICBzY3NpY21kWzBdID09IFdSSVRFXzE2KQorCWlmIChjZGJbMF0gPT0gV1JJVEVfMTAgfHwgY2RiWzBdID09IFdSSVRFXzYgfHwgY2RiWzBdID09IFdSSVRFXzE2KQogCQl0Zl9mbGFncyB8PSBBVEFfVEZMQUdfV1JJVEU7CiAKIAkvKiBDYWxjdWxhdGUgdGhlIFNDU0kgTEJBLCB0cmFuc2ZlciBsZW5ndGggYW5kIEZVQS4gKi8KLQlzd2l0Y2ggKHNjc2ljbWRbMF0pIHsKKwlzd2l0Y2ggKGNkYlswXSkgewogCWNhc2UgUkVBRF8xMDoKIAljYXNlIFdSSVRFXzEwOgotCQlzY3NpXzEwX2xiYV9sZW4oc2NzaWNtZCwgJmJsb2NrLCAmbl9ibG9jayk7Ci0JCWlmICh1bmxpa2VseShzY3NpY21kWzFdICYgKDEgPDwgMykpKQorCQlpZiAodW5saWtlbHkoc2NtZC0+Y21kX2xlbiA8IDEwKSkKKwkJCWdvdG8gaW52YWxpZF9mbGQ7CisJCXNjc2lfMTBfbGJhX2xlbihjZGIsICZibG9jaywgJm5fYmxvY2spOworCQlpZiAodW5saWtlbHkoY2RiWzFdICYgKDEgPDwgMykpKQogCQkJdGZfZmxhZ3MgfD0gQVRBX1RGTEFHX0ZVQTsKIAkJYnJlYWs7CiAJY2FzZSBSRUFEXzY6CiAJY2FzZSBXUklURV82OgotCQlzY3NpXzZfbGJhX2xlbihzY3NpY21kLCAmYmxvY2ssICZuX2Jsb2NrKTsKKwkJaWYgKHVubGlrZWx5KHNjbWQtPmNtZF9sZW4gPCA2KSkKKwkJCWdvdG8gaW52YWxpZF9mbGQ7CisJCXNjc2lfNl9sYmFfbGVuKGNkYiwgJmJsb2NrLCAmbl9ibG9jayk7CiAKIAkJLyogZm9yIDYtYnl0ZSByL3cgY29tbWFuZHMsIHRyYW5zZmVyIGxlbmd0aCAwCiAJCSAqIG1lYW5zIDI1NiBibG9ja3Mgb2YgZGF0YSwgbm90IDAgYmxvY2suCkBAIC0xMjk0LDggKzEzMzYsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBSRUFEXzE2OgogCWNhc2UgV1JJVEVfMTY6Ci0JCXNjc2lfMTZfbGJhX2xlbihzY3NpY21kLCAmYmxvY2ssICZuX2Jsb2NrKTsKLQkJaWYgKHVubGlrZWx5KHNjc2ljbWRbMV0gJiAoMSA8PCAzKSkpCisJCWlmICh1bmxpa2VseShzY21kLT5jbWRfbGVuIDwgMTYpKQorCQkJZ290byBpbnZhbGlkX2ZsZDsKKwkJc2NzaV8xNl9sYmFfbGVuKGNkYiwgJmJsb2NrLCAmbl9ibG9jayk7CisJCWlmICh1bmxpa2VseShjZGJbMV0gJiAoMSA8PCAzKSkpCiAJCQl0Zl9mbGFncyB8PSBBVEFfVEZMQUdfRlVBOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTMyNiwxNyArMTM3MCwxNyBAQAogCQlnb3RvIG91dF9vZl9yYW5nZTsKIAkvKiB0cmVhdCBhbGwgb3RoZXIgZXJyb3JzIGFzIC1FSU5WQUwsIGZhbGwgdGhyb3VnaCAqLwogaW52YWxpZF9mbGQ6Ci0JYXRhX3Njc2lfc2V0X3NlbnNlKHFjLT5zY3NpY21kLCBJTExFR0FMX1JFUVVFU1QsIDB4MjQsIDB4MCk7CisJYXRhX3Njc2lfc2V0X3NlbnNlKHNjbWQsIElMTEVHQUxfUkVRVUVTVCwgMHgyNCwgMHgwKTsKIAkvKiAiSW52YWxpZCBmaWVsZCBpbiBjYmQiICovCiAJcmV0dXJuIDE7CiAKIG91dF9vZl9yYW5nZToKLQlhdGFfc2NzaV9zZXRfc2Vuc2UocWMtPnNjc2ljbWQsIElMTEVHQUxfUkVRVUVTVCwgMHgyMSwgMHgwKTsKKwlhdGFfc2NzaV9zZXRfc2Vuc2Uoc2NtZCwgSUxMRUdBTF9SRVFVRVNULCAweDIxLCAweDApOwogCS8qICJMb2dpY2FsIEJsb2NrIEFkZHJlc3Mgb3V0IG9mIHJhbmdlIiAqLwogCXJldHVybiAxOwogCiBub3RoaW5nX3RvX2RvOgotCXFjLT5zY3NpY21kLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCXNjbWQtPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE0NTYsNyArMTUwMCw2IEBACiAJCQkgICAgICBhdGFfeGxhdF9mdW5jX3QgeGxhdF9mdW5jKQogewogCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7Ci0JdTggKnNjc2ljbWQgPSBjbWQtPmNtbmQ7CiAJaW50IGlzX2lvID0geGxhdF9mdW5jID09IGF0YV9zY3NpX3J3X3hsYXQ7CiAKIAlWUFJJTlRLKCJFTlRFUlxuIik7CkBAIC0xNDg4LDcgKzE1MzEsNyBAQAogCiAJcWMtPmNvbXBsZXRlX2ZuID0gYXRhX3Njc2lfcWNfY29tcGxldGU7CiAKLQlpZiAoeGxhdF9mdW5jKHFjLCBzY3NpY21kKSkKKwlpZiAoeGxhdF9mdW5jKHFjKSkKIAkJZ290byBlYXJseV9maW5pc2g7CiAKIAkvKiBzZWxlY3QgZGV2aWNlLCBzZW5kIGNvbW1hbmQgdG8gaGFyZHdhcmUgKi8KQEAgLTE1MzksNyArMTU4Miw3IEBACiAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAKIAkJc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIGNtZC0+cmVxdWVzdF9idWZmZXI7Ci0JCWJ1ZiA9IGttYXBfYXRvbWljKHNnLT5wYWdlLCBLTV9VU0VSMCkgKyBzZy0+b2Zmc2V0OworCQlidWYgPSBrbWFwX2F0b21pYyhzZy0+cGFnZSwgS01fSVJRMCkgKyBzZy0+b2Zmc2V0OwogCQlidWZsZW4gPSBzZy0+bGVuZ3RoOwogCX0gZWxzZSB7CiAJCWJ1ZiA9IGNtZC0+cmVxdWVzdF9idWZmZXI7CkBAIC0xNTY3LDcgKzE2MTAsNyBAQAogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCiAJCXNnID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKSBjbWQtPnJlcXVlc3RfYnVmZmVyOwotCQlrdW5tYXBfYXRvbWljKGJ1ZiAtIHNnLT5vZmZzZXQsIEtNX1VTRVIwKTsKKwkJa3VubWFwX2F0b21pYyhidWYgLSBzZy0+b2Zmc2V0LCBLTV9JUlEwKTsKIAl9CiB9CiAKQEAgLTIzNDQsNyArMjM4Nyw2IEBACiAvKioKICAqCWF0YXBpX3hsYXQgLSBJbml0aWFsaXplIFBBQ0tFVCB0YXNrZmlsZQogICoJQHFjOiBjb21tYW5kIHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXplZAotICoJQHNjc2ljbWQ6IFNDU0kgQ0RCIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFBBQ0tFVCBjb21tYW5kCiAgKgogICoJTE9DS0lORzoKICAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QgbG9jaykKQEAgLTIzNTIsMjUgKzIzOTQsMjUgQEAKICAqCVJFVFVSTlM6CiAgKglaZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuCiAgKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBhdGFwaV94bGF0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIGNvbnN0IHU4ICpzY3NpY21kKQorc3RhdGljIHVuc2lnbmVkIGludCBhdGFwaV94bGF0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7Ci0Jc3RydWN0IHNjc2lfY21uZCAqY21kID0gcWMtPnNjc2ljbWQ7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZCA9IHFjLT5zY3NpY21kOwogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSBxYy0+ZGV2OwogCWludCB1c2luZ19waW8gPSAoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19QSU8pOwotCWludCBub2RhdGEgPSAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfTk9ORSk7CisJaW50IG5vZGF0YSA9IChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKIAlpZiAoIXVzaW5nX3BpbykKIAkJLyogQ2hlY2sgd2hldGhlciBBVEFQSSBETUEgaXMgc2FmZSAqLwogCQlpZiAoYXRhX2NoZWNrX2F0YXBpX2RtYShxYykpCiAJCQl1c2luZ19waW8gPSAxOwogCi0JbWVtY3B5KCZxYy0+Y2RiLCBzY3NpY21kLCBkZXYtPmNkYl9sZW4pOworCW1lbXNldChxYy0+Y2RiLCAwLCBkZXYtPmNkYl9sZW4pOworCW1lbWNweShxYy0+Y2RiLCBzY21kLT5jbW5kLCBzY21kLT5jbWRfbGVuKTsKIAogCXFjLT5jb21wbGV0ZV9mbiA9IGF0YXBpX3FjX2NvbXBsZXRlOwogCiAJcWMtPnRmLmZsYWdzIHw9IEFUQV9URkxBR19JU0FERFIgfCBBVEFfVEZMQUdfREVWSUNFOwotCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKKwlpZiAoc2NtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgewogCQlxYy0+dGYuZmxhZ3MgfD0gQVRBX1RGTEFHX1dSSVRFOwogCQlEUFJJTlRLKCJkaXJlY3Rpb246IHdyaXRlXG4iKTsKIAl9CkBAIC0yMzkyLDEyICsyNDM0LDEyIEBACiAJCXFjLT50Zi5wcm90b2NvbCA9IEFUQV9QUk9UX0FUQVBJX0RNQTsKIAkJcWMtPnRmLmZlYXR1cmUgfD0gQVRBUElfUEtUX0RNQTsKIAotCQlpZiAoYXRhcGlfZG1hZGlyICYmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uICE9IERNQV9UT19ERVZJQ0UpKQorCQlpZiAoYXRhcGlfZG1hZGlyICYmIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBETUFfVE9fREVWSUNFKSkKIAkJCS8qIHNvbWUgU0FUQSBicmlkZ2VzIG5lZWQgdXMgdG8gaW5kaWNhdGUgZGF0YSB4ZmVyIGRpcmVjdGlvbiAqLwogCQkJcWMtPnRmLmZlYXR1cmUgfD0gQVRBUElfRE1BRElSOwogCX0KIAotCXFjLT5uYnl0ZXMgPSBjbWQtPnJlcXVlc3RfYnVmZmxlbjsKKwlxYy0+bmJ5dGVzID0gc2NtZC0+cmVxdWVzdF9idWZmbGVuOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTE3LDI4ICsyNTU5LDI3IEBACiAvKioKICAqCWF0YV9zY3NpX3Bhc3NfdGhydSAtIGNvbnZlcnQgQVRBIHBhc3MtdGhydSBDREIgdG8gdGFza2ZpbGUKICAqCUBxYzogY29tbWFuZCBzdHJ1Y3R1cmUgdG8gYmUgaW5pdGlhbGl6ZWQKLSAqCUBzY3NpY21kOiBTQ1NJIGNvbW1hbmQgdG8gY29udmVydAogICoKICAqCUhhbmRsZXMgZWl0aGVyIDEyIG9yIDE2LWJ5dGUgdmVyc2lvbnMgb2YgdGhlIENEQi4KICAqCiAgKglSRVRVUk5TOgogICoJWmVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1hdGFfc2NzaV9wYXNzX3RocnUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgY29uc3QgdTggKnNjc2ljbWQpCitzdGF0aWMgdW5zaWduZWQgaW50IGF0YV9zY3NpX3Bhc3NfdGhydShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmID0gJihxYy0+dGYpOwotCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHFjLT5zY3NpY21kOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQgPSBxYy0+c2NzaWNtZDsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gcWMtPmRldjsKKwljb25zdCB1OCAqY2RiID0gc2NtZC0+Y21uZDsKIAotCWlmICgodGYtPnByb3RvY29sID0gYXRhX3Njc2lfbWFwX3Byb3RvKHNjc2ljbWRbMV0pKSA9PSBBVEFfUFJPVF9VTktOT1dOKQorCWlmICgodGYtPnByb3RvY29sID0gYXRhX3Njc2lfbWFwX3Byb3RvKGNkYlsxXSkpID09IEFUQV9QUk9UX1VOS05PV04pCiAJCWdvdG8gaW52YWxpZF9mbGQ7CiAKIAkvKiBXZSBtYXkgbm90IGlzc3VlIERNQSBjb21tYW5kcyBpZiBubyBETUEgbW9kZSBpcyBzZXQgKi8KIAlpZiAodGYtPnByb3RvY29sID09IEFUQV9QUk9UX0RNQSAmJiBkZXYtPmRtYV9tb2RlID09IDApCiAJCWdvdG8gaW52YWxpZF9mbGQ7CiAKLQlpZiAoc2NzaWNtZFsxXSAmIDB4ZTApCisJaWYgKGNkYlsxXSAmIDB4ZTApCiAJCS8qIFBJTyBtdWx0aSBub3Qgc3VwcG9ydGVkIHlldCAqLwogCQlnb3RvIGludmFsaWRfZmxkOwogCkBAIC0yNTQ2LDE4ICsyNTg3LDE4IEBACiAJICogMTIgYW5kIDE2IGJ5dGUgQ0RCcyB1c2UgZGlmZmVyZW50IG9mZnNldHMgdG8KIAkgKiBwcm92aWRlIHRoZSB2YXJpb3VzIHJlZ2lzdGVyIHZhbHVlcy4KIAkgKi8KLQlpZiAoc2NzaWNtZFswXSA9PSBBVEFfMTYpIHsKKwlpZiAoY2RiWzBdID09IEFUQV8xNikgewogCQkvKgogCQkgKiAxNi1ieXRlIENEQiAtIG1heSBjb250YWluIGV4dGVuZGVkIGNvbW1hbmRzLgogCQkgKgogCQkgKiBJZiB0aGF0IGlzIHRoZSBjYXNlLCBjb3B5IHRoZSB1cHBlciBieXRlIHJlZ2lzdGVyIHZhbHVlcy4KIAkJICovCi0JCWlmIChzY3NpY21kWzFdICYgMHgwMSkgewotCQkJdGYtPmhvYl9mZWF0dXJlID0gc2NzaWNtZFszXTsKLQkJCXRmLT5ob2JfbnNlY3QgPSBzY3NpY21kWzVdOwotCQkJdGYtPmhvYl9sYmFsID0gc2NzaWNtZFs3XTsKLQkJCXRmLT5ob2JfbGJhbSA9IHNjc2ljbWRbOV07Ci0JCQl0Zi0+aG9iX2xiYWggPSBzY3NpY21kWzExXTsKKwkJaWYgKGNkYlsxXSAmIDB4MDEpIHsKKwkJCXRmLT5ob2JfZmVhdHVyZSA9IGNkYlszXTsKKwkJCXRmLT5ob2JfbnNlY3QgPSBjZGJbNV07CisJCQl0Zi0+aG9iX2xiYWwgPSBjZGJbN107CisJCQl0Zi0+aG9iX2xiYW0gPSBjZGJbOV07CisJCQl0Zi0+aG9iX2xiYWggPSBjZGJbMTFdOwogCQkJdGYtPmZsYWdzIHw9IEFUQV9URkxBR19MQkE0ODsKIAkJfSBlbHNlCiAJCQl0Zi0+ZmxhZ3MgJj0gfkFUQV9URkxBR19MQkE0ODsKQEAgLTI1NjUsMjYgKzI2MDYsMjYgQEAKIAkJLyoKIAkJICogQWx3YXlzIGNvcHkgbG93IGJ5dGUsIGRldmljZSBhbmQgY29tbWFuZCByZWdpc3RlcnMuCiAJCSAqLwotCQl0Zi0+ZmVhdHVyZSA9IHNjc2ljbWRbNF07Ci0JCXRmLT5uc2VjdCA9IHNjc2ljbWRbNl07Ci0JCXRmLT5sYmFsID0gc2NzaWNtZFs4XTsKLQkJdGYtPmxiYW0gPSBzY3NpY21kWzEwXTsKLQkJdGYtPmxiYWggPSBzY3NpY21kWzEyXTsKLQkJdGYtPmRldmljZSA9IHNjc2ljbWRbMTNdOwotCQl0Zi0+Y29tbWFuZCA9IHNjc2ljbWRbMTRdOworCQl0Zi0+ZmVhdHVyZSA9IGNkYls0XTsKKwkJdGYtPm5zZWN0ID0gY2RiWzZdOworCQl0Zi0+bGJhbCA9IGNkYls4XTsKKwkJdGYtPmxiYW0gPSBjZGJbMTBdOworCQl0Zi0+bGJhaCA9IGNkYlsxMl07CisJCXRmLT5kZXZpY2UgPSBjZGJbMTNdOworCQl0Zi0+Y29tbWFuZCA9IGNkYlsxNF07CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogMTItYnl0ZSBDREIgLSBpbmNhcGFibGUgb2YgZXh0ZW5kZWQgY29tbWFuZHMuCiAJCSAqLwogCQl0Zi0+ZmxhZ3MgJj0gfkFUQV9URkxBR19MQkE0ODsKIAotCQl0Zi0+ZmVhdHVyZSA9IHNjc2ljbWRbM107Ci0JCXRmLT5uc2VjdCA9IHNjc2ljbWRbNF07Ci0JCXRmLT5sYmFsID0gc2NzaWNtZFs1XTsKLQkJdGYtPmxiYW0gPSBzY3NpY21kWzZdOwotCQl0Zi0+bGJhaCA9IHNjc2ljbWRbN107Ci0JCXRmLT5kZXZpY2UgPSBzY3NpY21kWzhdOwotCQl0Zi0+Y29tbWFuZCA9IHNjc2ljbWRbOV07CisJCXRmLT5mZWF0dXJlID0gY2RiWzNdOworCQl0Zi0+bnNlY3QgPSBjZGJbNF07CisJCXRmLT5sYmFsID0gY2RiWzVdOworCQl0Zi0+bGJhbSA9IGNkYls2XTsKKwkJdGYtPmxiYWggPSBjZGJbN107CisJCXRmLT5kZXZpY2UgPSBjZGJbOF07CisJCXRmLT5jb21tYW5kID0gY2RiWzldOwogCX0KIAkvKgogCSAqIElmIHNsYXZlIGlzIHBvc3NpYmxlLCBlbmZvcmNlIGNvcnJlY3QgbWFzdGVyL3NsYXZlIGJpdApAQCAtMjYxMSw3ICsyNjUyLDcgQEAKIAkgKi8KIAl0Zi0+ZmxhZ3MgfD0gKEFUQV9URkxBR19JU0FERFIgfCBBVEFfVEZMQUdfREVWSUNFKTsKIAotCWlmIChjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJaWYgKHNjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCiAJCXRmLT5mbGFncyB8PSBBVEFfVEZMQUdfV1JJVEU7CiAKIAkvKgpAQCAtMjYyMCw3ICsyNjYxLDcgQEAKIAkgKiBUT0RPOiBmaW5kIG91dCBpZiB3ZSBuZWVkIHRvIGRvIG1vcmUgaGVyZSB0bwogCSAqICAgICAgIGNvdmVyIHNjYXR0ZXIvZ2F0aGVyIGNhc2UuCiAJICovCi0JcWMtPm5zZWN0ID0gY21kLT5yZXF1ZXN0X2J1ZmZsZW4gLyBBVEFfU0VDVF9TSVpFOworCXFjLT5uc2VjdCA9IHNjbWQtPnJlcXVlc3RfYnVmZmxlbiAvIEFUQV9TRUNUX1NJWkU7CiAKIAkvKiByZXF1ZXN0IHJlc3VsdCBURiAqLwogCXFjLT5mbGFncyB8PSBBVEFfUUNGTEFHX1JFU1VMVF9URjsKQEAgLTI2MjgsNyArMjY2OSw3IEBACiAJcmV0dXJuIDA7CiAKICBpbnZhbGlkX2ZsZDoKLQlhdGFfc2NzaV9zZXRfc2Vuc2UocWMtPnNjc2ljbWQsIElMTEVHQUxfUkVRVUVTVCwgMHgyNCwgMHgwMCk7CisJYXRhX3Njc2lfc2V0X3NlbnNlKHNjbWQsIElMTEVHQUxfUkVRVUVTVCwgMHgyNCwgMHgwMCk7CiAJLyogIkludmFsaWQgZmllbGQgaW4gY2RiIiAqLwogCXJldHVybiAxOwogfQpAQCAtMjcwMSwyMiArMjc0MiwyOSBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fYXRhX3Njc2lfcXVldWVjbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLAorc3RhdGljIGlubGluZSBpbnQgX19hdGFfc2NzaV9xdWV1ZWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLAogCQkJCSAgICAgIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopLAogCQkJCSAgICAgIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCiB7CiAJaW50IHJjID0gMDsKIAorCWlmICh1bmxpa2VseSghc2NtZC0+Y21kX2xlbikpIHsKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX1dBUk5JTkcsICJXQVJOSU5HOiB6ZXJvIGxlbiBDREJcbiIpOworCQlzY21kLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCWRvbmUoc2NtZCk7CisJCXJldHVybiAwOworCX0KKwogCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBKSB7CiAJCWF0YV94bGF0X2Z1bmNfdCB4bGF0X2Z1bmMgPSBhdGFfZ2V0X3hsYXRfZnVuYyhkZXYsCi0JCQkJCQkJICAgICAgY21kLT5jbW5kWzBdKTsKKwkJCQkJCQkgICAgICBzY21kLT5jbW5kWzBdKTsKIAogCQlpZiAoeGxhdF9mdW5jKQotCQkJcmMgPSBhdGFfc2NzaV90cmFuc2xhdGUoZGV2LCBjbWQsIGRvbmUsIHhsYXRfZnVuYyk7CisJCQlyYyA9IGF0YV9zY3NpX3RyYW5zbGF0ZShkZXYsIHNjbWQsIGRvbmUsIHhsYXRfZnVuYyk7CiAJCWVsc2UKLQkJCWF0YV9zY3NpX3NpbXVsYXRlKGRldiwgY21kLCBkb25lKTsKKwkJCWF0YV9zY3NpX3NpbXVsYXRlKGRldiwgc2NtZCwgZG9uZSk7CiAJfSBlbHNlCi0JCXJjID0gYXRhX3Njc2lfdHJhbnNsYXRlKGRldiwgY21kLCBkb25lLCBhdGFwaV94bGF0KTsKKwkJcmMgPSBhdGFfc2NzaV90cmFuc2xhdGUoZGV2LCBzY21kLCBkb25lLCBhdGFwaV94bGF0KTsKIAogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwppbmRleCAxMGVlMjJhLi4xMmM4OGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCkBAIC04MjcsNyArODI3LDggQEAKICAqLwogdm9pZCBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlhdGFfYm1kbWFfc3RvcChxYyk7CisJaWYgKHFjLT5hcC0+aW9hZGRyLmJtZG1hX2FkZHIpCisJCWF0YV9ibWRtYV9zdG9wKHFjKTsKIH0KIAogI2lmZGVmIENPTkZJR19QQ0kKQEAgLTg3MCw3ICs4NzEsOCBAQAogCQkJcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpIHwgQVRBX1BDSV9DVExfT0ZTOwogCQlibWRtYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsKIAkJaWYgKGJtZG1hKSB7Ci0JCQlpZiAoaW5iKGJtZG1hICsgMikgJiAweDgwKQorCQkJaWYgKCghKHBvcnRbcF0tPmZsYWdzICYgQVRBX0ZMQUdfSUdOX1NJTVBMRVgpKSAmJgorCQkJICAgIChpbmIoYm1kbWEgKyAyKSAmIDB4ODApKQogCQkJCXByb2JlX2VudC0+X2hvc3RfZmxhZ3MgfD0gQVRBX0hPU1RfU0lNUExFWDsKIAkJCXByb2JlX2VudC0+cG9ydFtwXS5ibWRtYV9hZGRyID0gYm1kbWE7CiAJCX0KQEAgLTg4Niw3ICs4ODgsOCBAQAogCQlibWRtYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsKIAkJaWYgKGJtZG1hKSB7CiAJCQlibWRtYSArPSA4OwotCQkJaWYoaW5iKGJtZG1hICsgMikgJiAweDgwKQorCQkJaWYgKCghKHBvcnRbcF0tPmZsYWdzICYgQVRBX0ZMQUdfSUdOX1NJTVBMRVgpKSAmJgorCQkJICAgIChpbmIoYm1kbWEgKyAyKSAmIDB4ODApKQogCQkJCXByb2JlX2VudC0+X2hvc3RfZmxhZ3MgfD0gQVRBX0hPU1RfU0lNUExFWDsKIAkJCXByb2JlX2VudC0+cG9ydFtwXS5ibWRtYV9hZGRyID0gYm1kbWE7CiAJCX0KQEAgLTkxNCwxMyArOTE3LDE0IEBACiAJcHJvYmVfZW50LT5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKIAogCWlmIChwb3J0X21hc2sgJiBBVEFfUE9SVF9QUklNQVJZKSB7Ci0JCXByb2JlX2VudC0+aXJxID0gQVRBX1BSSU1BUllfSVJROworCQlwcm9iZV9lbnQtPmlycSA9IEFUQV9QUklNQVJZX0lSUShwZGV2KTsKIAkJcHJvYmVfZW50LT5wb3J0WzBdLmNtZF9hZGRyID0gQVRBX1BSSU1BUllfQ01EOwogCQlwcm9iZV9lbnQtPnBvcnRbMF0uYWx0c3RhdHVzX2FkZHIgPQogCQlwcm9iZV9lbnQtPnBvcnRbMF0uY3RsX2FkZHIgPSBBVEFfUFJJTUFSWV9DVEw7CiAJCWlmIChibWRtYSkgewogCQkJcHJvYmVfZW50LT5wb3J0WzBdLmJtZG1hX2FkZHIgPSBibWRtYTsKLQkJCWlmIChpbmIoYm1kbWEgKyAyKSAmIDB4ODApCisJCQlpZiAoKCEocG9ydFswXS0+ZmxhZ3MgJiBBVEFfRkxBR19JR05fU0lNUExFWCkpICYmCisJCQkgICAgKGluYihibWRtYSArIDIpICYgMHg4MCkpCiAJCQkJcHJvYmVfZW50LT5faG9zdF9mbGFncyB8PSBBVEFfSE9TVF9TSU1QTEVYOwogCQl9CiAJCWF0YV9zdGRfcG9ydHMoJnByb2JlX2VudC0+cG9ydFswXSk7CkBAIC05MjksMTUgKzkzMywxNiBAQAogCiAJaWYgKHBvcnRfbWFzayAmIEFUQV9QT1JUX1NFQ09OREFSWSkgewogCQlpZiAocHJvYmVfZW50LT5pcnEpCi0JCQlwcm9iZV9lbnQtPmlycTIgPSBBVEFfU0VDT05EQVJZX0lSUTsKKwkJCXByb2JlX2VudC0+aXJxMiA9IEFUQV9TRUNPTkRBUllfSVJRKHBkZXYpOwogCQllbHNlCi0JCQlwcm9iZV9lbnQtPmlycSA9IEFUQV9TRUNPTkRBUllfSVJROworCQkJcHJvYmVfZW50LT5pcnEgPSBBVEFfU0VDT05EQVJZX0lSUShwZGV2KTsKIAkJcHJvYmVfZW50LT5wb3J0WzFdLmNtZF9hZGRyID0gQVRBX1NFQ09OREFSWV9DTUQ7CiAJCXByb2JlX2VudC0+cG9ydFsxXS5hbHRzdGF0dXNfYWRkciA9CiAJCXByb2JlX2VudC0+cG9ydFsxXS5jdGxfYWRkciA9IEFUQV9TRUNPTkRBUllfQ1RMOwogCQlpZiAoYm1kbWEpIHsKIAkJCXByb2JlX2VudC0+cG9ydFsxXS5ibWRtYV9hZGRyID0gYm1kbWEgKyA4OwotCQkJaWYgKGluYihibWRtYSArIDEwKSAmIDB4ODApCisJCQlpZiAoKCEocG9ydFsxXS0+ZmxhZ3MgJiBBVEFfRkxBR19JR05fU0lNUExFWCkpICYmCisJCQkgICAgKGluYihibWRtYSArIDEwKSAmIDB4ODApKQogCQkJCXByb2JlX2VudC0+X2hvc3RfZmxhZ3MgfD0gQVRBX0hPU1RfU0lNUExFWDsKIAkJfQogCQlhdGFfc3RkX3BvcnRzKCZwcm9iZV9lbnQtPnBvcnRbMV0pOwpAQCAtMTAyNywxMyArMTAzMiwxNSBAQAogI2VuZGlmCiAJfQogCi0JcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9OQU1FKTsKLQlpZiAocmMpIHsKLQkJZGlzYWJsZV9kZXZfb25fZXJyID0gMDsKLQkJZ290byBlcnJfb3V0OwotCX0KLQotCWlmIChsZWdhY3lfbW9kZSkgeworCWlmICghbGVnYWN5X21vZGUpIHsKKwkJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9OQU1FKTsKKwkJaWYgKHJjKSB7CisJCQlkaXNhYmxlX2Rldl9vbl9lcnIgPSAwOworCQkJZ290byBlcnJfb3V0OworCQl9CisJfSBlbHNlIHsKKwkJLyogRGVhbCB3aXRoIGNvbWJpbmVkIG1vZGUgaGFjay4gVGhpcyBzaWRlIG9mIHRoZSBsb2dpYyBhbGwKKwkJICAgZ29lcyBhd2F5IG9uY2UgdGhlIGNvbWJpbmVkIG1vZGUgaGFjayBpcyBraWxsZWQgaW4gMi42LjIxICovCiAJCWlmICghcmVxdWVzdF9yZWdpb24oQVRBX1BSSU1BUllfQ01ELCA4LCAibGliYXRhIikpIHsKIAkJCXN0cnVjdCByZXNvdXJjZSAqY29uZmxpY3QsIHJlczsKIAkJCXJlcy5zdGFydCA9IEFUQV9QUklNQVJZX0NNRDsKQEAgLTEwNzEsNiArMTA3OCwxMyBAQAogCQkJfQogCQl9IGVsc2UKIAkJCWxlZ2FjeV9tb2RlIHw9IEFUQV9QT1JUX1NFQ09OREFSWTsKKworCQlpZiAobGVnYWN5X21vZGUgJiBBVEFfUE9SVF9QUklNQVJZKQorCQkJcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIDEsIERSVl9OQU1FKTsKKwkJaWYgKGxlZ2FjeV9tb2RlICYgQVRBX1BPUlRfU0VDT05EQVJZKQorCQkJcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIDMsIERSVl9OQU1FKTsKKwkJLyogSWYgdGhlcmUgaXMgYSBETUEgcmVzb3VyY2UsIGFsbG9jYXRlIGl0ICovCisJCXBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCA0LCBEUlZfTkFNRSk7CiAJfQogCiAJLyogd2UgaGF2ZSBsZWdhY3kgbW9kZSwgYnV0IGFsbCBwb3J0cyBhcmUgdW5hdmFpbGFibGUgKi8KQEAgLTExMTQsMTEgKzExMjgsMjAgQEAKIGVycl9vdXRfZW50OgogCWtmcmVlKHByb2JlX2VudCk7CiBlcnJfb3V0X3JlZ2lvbnM6Ci0JaWYgKGxlZ2FjeV9tb2RlICYgQVRBX1BPUlRfUFJJTUFSWSkKLQkJcmVsZWFzZV9yZWdpb24oQVRBX1BSSU1BUllfQ01ELCA4KTsKLQlpZiAobGVnYWN5X21vZGUgJiBBVEFfUE9SVF9TRUNPTkRBUlkpCi0JCXJlbGVhc2VfcmVnaW9uKEFUQV9TRUNPTkRBUllfQ01ELCA4KTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCS8qIEFsbCB0aGlzIGNvbmRpdGlvbmFsIHN0dWZmIGlzIG5lZWRlZCBmb3IgdGhlIGNvbWJpbmVkIG1vZGUgaGFjaworCSAgIHVudGlsIDIuNi4yMSB3aGVuIGl0IGNhbiBnbyAqLworCWlmIChsZWdhY3lfbW9kZSkgeworCQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgNCk7CisJCWlmIChsZWdhY3lfbW9kZSAmIEFUQV9QT1JUX1BSSU1BUlkpIHsKKwkJCXJlbGVhc2VfcmVnaW9uKEFUQV9QUklNQVJZX0NNRCwgOCk7CisJCQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMSk7CisJCX0KKwkJaWYgKGxlZ2FjeV9tb2RlICYgQVRBX1BPUlRfU0VDT05EQVJZKSB7CisJCQlyZWxlYXNlX3JlZ2lvbihBVEFfU0VDT05EQVJZX0NNRCwgOCk7CisJCQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMyk7CisJCX0KKwl9IGVsc2UKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIGVycl9vdXQ6CiAJaWYgKGRpc2FibGVfZGV2X29uX2VycikKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKaW5kZXggNmY2NjcyYy4uNTA0ZTFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCkBAIC0zNiwxNSArMzYsMjIgQEAKIHN0YXRpYyBpbnQgYXRpaXhwX3ByZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKLQlzdGF0aWMgc3RydWN0IHBjaV9iaXRzIGF0aWl4cF9lbmFibGVfYml0c1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgYXRpaXhwX2VuYWJsZV9iaXRzW10gPSB7CiAJCXsgMHg0OCwgMSwgMHgwMSwgMHgwMCB9LAogCQl7IDB4NDgsIDEsIDB4MDgsIDB4MDAgfQogCX07CisJdTggdWRtYTsKIAogCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmF0aWl4cF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWFwLT5jYmwgPSBBVEFfQ0JMX1BBVEE4MDsKKwkvKiBIYWNrIGZyb20gZHJpdmVycy9pZGUvcGNpLiBSZWFsbHkgd2Ugd2FudCB0byBrbm93IGhvdyB0byBkbyB0aGUKKwkgICByYXcgZGV0ZWN0aW9uIG5vdCBwbGF5IGZvbGxvdyB0aGUgYmlvcyBtb2RlIGd1ZXNzICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgQVRJSVhQX0lERV9VRE1BX01PREUgKyBhcC0+cG9ydF9ubywgJnVkbWEpOworCWlmICgodWRtYSAmIDB4MDcpID49IDB4MDQgfHwgKHVkbWEgJiAweDcwKSA+PSAweDQwKQorCQlhcC0+Y2JsID0gQVRBX0NCTF9QQVRBODA7CisJZWxzZQorCQlhcC0+Y2JsID0gQVRBX0NCTF9QQVRBNDA7CiAJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwppbmRleCAxNTg0MWE1Li40NDkxNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogc3RhdGljIHZvaWQgY21kNjR4X3NldF9kbWFtb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQogewogCXN0YXRpYyBjb25zdCB1OCB1ZG1hX2RhdGFbXSA9IHsKLQkJMHgzMSwgMHgyMSwgMHgxMSwgMHgyNSwgMHgxNSwgMHgwNQorCQkweDMwLCAweDIwLCAweDEwLCAweDIwLCAweDEwLCAweDAwCiAJfTsKIAlzdGF0aWMgY29uc3QgdTggbXdkbWFfZGF0YVtdID0gewogCQkweDMwLCAweDIwLCAweDEwCkBAIC0yMTMsMTIgKzIxMywyMSBAQAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIHBjaUQsICZyZWdEKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBwY2lVLCAmcmVnVSk7CiAKLQlyZWdEICY9IH4oMHgyMCA8PCBzaGlmdCk7Ci0JcmVnVSAmPSB+KDB4MzUgPDwgc2hpZnQpOworCS8qIERNQSBiaXRzIG9mZiAqLworCXJlZ0QgJj0gfigweDIwIDw8IGFkZXYtPmRldm5vKTsKKwkvKiBETUEgY29udHJvbCBiaXRzICovCisJcmVnVSAmPSB+KDB4MzAgPDwgc2hpZnQpOworCS8qIERNQSB0aW1pbmcgYml0cyAqLworCXJlZ1UgJj0gfigweDA1IDw8IGFkZXYtPmRldm5vKTsKIAotCWlmIChhZGV2LT5kbWFfbW9kZSA+PSBYRkVSX1VETUFfMCkKKwlpZiAoYWRldi0+ZG1hX21vZGUgPj0gWEZFUl9VRE1BXzApIHsKKwkJLyogTWVyZ2UgdGhnZSB0aW1pbmcgdmFsdWUgKi8KIAkJcmVnVSB8PSB1ZG1hX2RhdGFbYWRldi0+ZG1hX21vZGUgLSBYRkVSX1VETUFfMF0gPDwgc2hpZnQ7Ci0JZWxzZQorCQkvKiBNZXJnZSB0aGUgY29udHJvbCBiaXRzICovCisJCXJlZ1UgfD0gMSA8PCBhZGV2LT5kZXZubzsgLyogVURNQSBvbiAqLworCQlpZiAoYWRldi0+ZG1hX21vZGUgPiAyKQkvKiAxNW5TIHRpbWluZyAqLworCQkJcmVnVSB8PSA0IDw8IGFkZXYtPmRldm5vOworCX0gZWxzZQogCQlyZWdEIHw9IG13ZG1hX2RhdGFbYWRldi0+ZG1hX21vZGUgLSBYRkVSX01XX0RNQV8wXSA8PCBzaGlmdDsKIAogCXJlZ0QgfD0gMHgyMCA8PCBhZGV2LT5kZXZubzsKQEAgLTIzOSw4ICsyNDgsOCBAQAogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXU4IGRtYV9pbnRyOwotCWludCBkbWFfcmVnID0gYXAtPnBvcnRfbm8gPyBBUlRUSU0yM19JTlRSX0NIMSA6IENGUl9JTlRSX0NIMDsKLQlpbnQgZG1hX21hc2sgPSBhcC0+cG9ydF9ubyA/IEFSVFRJTTIgOiBDRlI7CisJaW50IGRtYV9tYXNrID0gYXAtPnBvcnRfbm8gPyBBUlRUSU0yM19JTlRSX0NIMSA6IENGUl9JTlRSX0NIMDsKKwlpbnQgZG1hX3JlZyA9IGFwLT5wb3J0X25vID8gQVJUVElNMiA6IENGUjsKIAogCWF0YV9ibWRtYV9zdG9wKHFjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKaW5kZXggMWM2MjgwMS4uYjFjYTIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCkBAIC0zNzIsNyArMzcyLDggQEAKIHN0YXRpYyBpbnQgY3M1NTMwX3JlaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJLyogSWYgd2UgZmFpbCBvbiByZXN1bWUgd2UgYXJlIGRvb21lZCAqLwotCUJVR19PTihjczU1MzBfaW5pdF9jaGlwKCkpOworCWlmIChjczU1MzBfaW5pdF9jaGlwKCkpCisJCUJVRygpOwogCXJldHVybiBhdGFfcGNpX2RldmljZV9yZXN1bWUocGRldik7CiB9CiAJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwppbmRleCA0NzA4MmRmLi5kZmIzMDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzN3giCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjUuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNS4yIgogCiBzdHJ1Y3QgaHB0X2Nsb2NrIHsKIAl1OAl4ZmVyX3NwZWVkOwpAQCAtNDE2LDcgKzQxNiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGhwdDM3MF9maWx0ZXIoY29uc3Qgc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYsIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKLQlpZiAoYWRldi0+Y2xhc3MgIT0gQVRBX0RFVl9BVEEpIHsKKwlpZiAoYWRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpIHsKIAkJaWYgKGhwdF9kbWFfYmxhY2tsaXN0ZWQoYWRldiwgIlVETUEiLCBiYWRfYXRhMzMpKQogCQkJbWFzayAmPSB+QVRBX01BU0tfVURNQTsKIAkJaWYgKGhwdF9kbWFfYmxhY2tsaXN0ZWQoYWRldiwgIlVETUExMDAiLCBiYWRfYXRhMTAwXzUpKQpAQCAtNzQ5LDcgKzc0OSw3IEBACiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7Ci0JaW50IG1zY3JlZyA9IDB4NTAgKyAyICogYXAtPnBvcnRfbm87CisJaW50IG1zY3JlZyA9IDB4NTAgKyA0ICogYXAtPnBvcnRfbm87CiAJdTggYndzcl9zdGF0LCBtc2Nfc3RhdDsKIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NkEsICZid3NyX3N0YXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwppbmRleCBmNjgxN2I0Li44ODZmYWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDN4Mm4iCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjMuMiIKIAogZW51bSB7CiAJSFBUX1BDSV9GQVNUCT0JKDEgPDwgMzEpLApAQCAtMjk3LDExICsyOTcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBocHQzeDJuX3VzZV9kcGxsKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCByZWFkaW5nKQorc3RhdGljIGludCBocHQzeDJuX3VzZV9kcGxsKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB3cml0aW5nKQogewogCWxvbmcgZmxhZ3MgPSAobG9uZylhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwogCS8qIFNlZSBpZiB3ZSBzaG91bGQgdXNlIHRoZSBEUExMICovCi0JaWYgKHJlYWRpbmcgPT0gMCkKKwlpZiAod3JpdGluZykKIAkJcmV0dXJuIFVTRV9EUExMOwkvKiBOZWVkZWQgZm9yIHdyaXRlICovCiAJaWYgKGZsYWdzICYgUENJNjYpCiAJCXJldHVybiBVU0VfRFBMTDsJLyogTmVlZGVkIGF0IDY2TWh6ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYwppbmRleCAwYjU2ZmYzLi5lOGFmZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKQEAgLTQ3Niw2ICs0NzYsNyBAQAogLyoqCiAgKglpdDgyMXhfc21hcnRfc2V0X21vZGUJLQltb2RlIHNldHRpbmcKICAqCUBhcDogaW50ZXJmYWNlIHRvIHNldCB1cAorICoJQHVudXNlZDogZGV2aWNlIHRoYXQgZmFpbGVkIChlcnJvciBvbmx5KQogICoKICAqCVVzZSBhIG5vbiBzdGFuZGFyZCBzZXRfbW9kZSBmdW5jdGlvbi4gV2UgZG9uJ3Qgd2FudCB0byBiZSB0dW5lZC4KICAqCVRoZSBCSU9TIGNvbmZpZ3VyZWQgZXZlcnl0aGluZy4gT3VyIGpvYiBpcyBub3QgdG8gZmlkZGxlLiBXZQpAQCAtNDgzLDcgKzQ4NCw3IEBACiAgKglhbmQgcmVzcGVjdCB0aGVtLgogICovCiAKLXN0YXRpYyB2b2lkIGl0ODIxeF9zbWFydF9zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBpdDgyMXhfc21hcnRfc2V0X21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKip1bnVzZWQpCiB7CiAJaW50IGRtYV9lbmFibGVkID0gMDsKIAlpbnQgaTsKQEAgLTUxMiw2ICs1MTMsNyBAQAogCQkJfQogCQl9CiAJfQorCXJldHVybiAwOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCmluZGV4IGNiODkyNDEuLjIzYjhhYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9peHA0eHhfY2YuYwpAQCAtMjMsOSArMjMsOSBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfaXhwNHh4X2NmIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4xLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjEuMWFjMSIKIAotc3RhdGljIHZvaWQgaXhwNHh4X3NldF9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IGl4cDR4eF9zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKIAlpbnQgaTsKIApAQCAtMzgsNiArMzgsNyBAQAogCQkJZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfUElPOwogCQl9CiAJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBpeHA0eHhfcGh5X3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2ptaWNyb24uYyBiL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jCmluZGV4IDJkNjYxY2IuLmQ1MDI2NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jCkBAIC0yMDQsMjAgKzIwNCwxMiBAQAogCiAJdTMyIHJlZzsKIAotCWlmIChpZC0+ZHJpdmVyX2RhdGEgIT0gMzY4KSB7Ci0JCS8qIFB1dCB0aGUgY29udHJvbGxlciBpbnRvIEFIQ0kgbW9kZSBpbiBjYXNlIHRoZSBBSENJIGRyaXZlcgotCQkgICBoYXMgbm90IHlldCBiZWVuIGxvYWRlZC4gVGhpcyBjYW4gYmUgZG9uZSB3aXRoIGVpdGhlcgotCQkgICBmdW5jdGlvbiBwcmVzZW50ICovCisJLyogUEFUQSBjb250cm9sbGVyIGlzIGZuIDEsIEFIQ0kgaXMgZm4gMCAqLworCWlmIChpZC0+ZHJpdmVyX2RhdGEgIT0gMzY4ICYmIFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCQkvKiBGSVhNRTogV2UgbWF5IHdhbnQgYSB3YXkgdG8gb3ZlcnJpZGUgdGhpcyBpbiBmdXR1cmUgKi8KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsIDB4YTEpOwotCi0JCS8qIFBBVEEgY29udHJvbGxlciBpcyBmbiAxLCBBSENJIGlzIGZuIDAgKi8KLQkJaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAxKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWlmICggaWQtPmRyaXZlcl9kYXRhID09IDM2NSB8fCBpZC0+ZHJpdmVyX2RhdGEgPT0gMzY2KSB7Ci0JCS8qIFRoZSAzNjUvNjYgaGF2ZSB0d28gUEFUQSBjaGFubmVscywgcmVkaXJlY3QgdGhlIHNlY29uZCAqLworCS8qIFRoZSAzNjUvNjYgaGF2ZSB0d28gUEFUQSBjaGFubmVscywgcmVkaXJlY3QgdGhlIHNlY29uZCAqLworCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gMzY1IHx8IGlkLT5kcml2ZXJfZGF0YSA9PSAzNjYpIHsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4ODAsICZyZWcpOwogCQlyZWcgfD0gKDEgPDwgMjQpOwkvKiBJREUxIHRvIFBBVEEgSURFIHNlY29uZGFyeSAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4ODAsIHJlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jIGIvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYwppbmRleCBjN2QxNzM4Li41ODFjYjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKQEAgLTk2LDYgKzk2LDcgQEAKIC8qKgogICoJbGVnYWN5X3NldF9tb2RlCQktCW1vZGUgc2V0dGluZwogICoJQGFwOiBJREUgaW50ZXJmYWNlCisgKglAdW51c2VkOiBEZXZpY2UgdGhhdCBmYWlsZWQgd2hlbiBlcnJvciBpcyByZXR1cm5lZAogICoKICAqCVVzZSBhIG5vbiBzdGFuZGFyZCBzZXRfbW9kZSBmdW5jdGlvbi4gV2UgZG9uJ3Qgd2FudCB0byBiZSB0dW5lZC4KICAqCkBAIC0xMDUsNyArMTA2LDcgQEAKICAqCWV4cGFuZCBvbiB0aGlzIGFzIHBlciBoZHBhcm0gaW4gdGhlIGJhc2Uga2VybmVsLgogICovCiAKLXN0YXRpYyB2b2lkIGxlZ2FjeV9zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBsZWdhY3lfc2V0X21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKip1bnVzZWQpCiB7CiAJaW50IGk7CiAKQEAgLTExOCw2ICsxMTksNyBAQAogCQkJZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfUElPOwogCQl9CiAJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBsZWdhY3lfc2h0ID0gewpAQCAtNjk4LDggKzcwMCwxMCBAQAogCQlnb3RvIGZhaWxfaW87CiAKIAlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShEUlZfTkFNRSwgbnJfbGVnYWN5X2hvc3QsIE5VTEwsIDApOwotCWlmIChwZGV2ID09IE5VTEwpCisJaWYgKElTX0VSUihwZGV2KSkgeworCQlyZXQgPSBQVFJfRVJSKHBkZXYpOwogCQlnb3RvIGZhaWxfZGV2OworCX0KIAogCWlmIChodDY1NjBhICYgbWFzaykgewogCQlvcHMgPSAmaHQ2NTYwYV9wb3J0X29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGxhdGZvcm0uYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGxhdGZvcm0uYwppbmRleCA0NDNiMWQ4Li40MGFlMTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jCkBAIC0zMCw3ICszMCw3IEBACiAgKiBQcm92aWRlIG91ciBvd24gc2V0X21vZGUoKSBhcyB3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSBhbnl0aGluZyB0aGF0IGhhcwogICogYWxyZWFkeSBiZWVuIGNvbmZpZ3VyZWQuLgogICovCi1zdGF0aWMgdm9pZCBwYXRhX3BsYXRmb3JtX3NldF9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IHBhdGFfcGxhdGZvcm1fc2V0X21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKip1bnVzZWQpCiB7CiAJaW50IGk7CiAKQEAgLTQ0LDYgKzQ0LDcgQEAKIAkJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX1BJTzsKIAkJfQogCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcGF0YV9wbGF0Zm9ybV9ob3N0X3N0b3Aoc3RydWN0IGF0YV9ob3N0ICpob3N0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9xZGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKaW5kZXggMzZmNjIxYS4uYWZjMGQ5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9xZGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCkBAIC0yNDcsOCArMjQ3LDggQEAKIAkgKi8KIAogCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKERSVl9OQU1FLCBucl9xZGlfaG9zdCwgTlVMTCwgMCk7Ci0JaWYgKHBkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKElTX0VSUihwZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocGRldik7CiAKIAltZW1zZXQoJmFlLCAwLCBzaXplb2Yoc3RydWN0IGF0YV9wcm9iZV9lbnQpKTsKIAlJTklUX0xJU1RfSEVBRCgmYWUubm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYwppbmRleCAzNjc3YzY0Li5jZWMwNzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKQEAgLTUyLDE5ICs1MiwyMCBAQAogLyoqCiAgKglyejEwMDBfc2V0X21vZGUJCS0JbW9kZSBzZXR0aW5nIGZ1bmN0aW9uCiAgKglAYXA6IEFUQSBpbnRlcmZhY2UKKyAqCUB1bnVzZWQ6IHJldHVybmVkIGRldmljZSBvbiBzZXRfbW9kZSBmYWlsdXJlCiAgKgogICoJVXNlIGEgbm9uIHN0YW5kYXJkIHNldF9tb2RlIGZ1bmN0aW9uLiBXZSBkb24ndCB3YW50IHRvIGJlIHR1bmVkLiBXZQogICoJd291bGQgcHJlZmVyIHRvIGJlIEJJT1MgZ2VuZXJpYyBidXQgZm9yIHRoZSBmYWN0IG91ciBoYXJkd2FyZSBpcwogICoJd2hhY2tlZCBvdXQuCiAgKi8KIAotc3RhdGljIHZvaWQgcnoxMDAwX3NldF9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgaW50IHJ6MTAwMF9zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnVudXNlZCkKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykgewogCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gJmFwLT5kZXZpY2VbaV07Ci0JCWlmIChhdGFfZGV2X2VuYWJsZWQoZGV2KSkgeworCQlpZiAoYXRhX2Rldl9yZWFkeShkZXYpKSB7CiAJCQkvKiBXZSBkb24ndCByZWFsbHkgY2FyZSAqLwogCQkJZGV2LT5waW9fbW9kZSA9IFhGRVJfUElPXzA7CiAJCQlkZXYtPnhmZXJfbW9kZSA9IFhGRVJfUElPXzA7CkBAIC03Miw2ICs3Myw3IEBACiAJCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19QSU87CiAJCX0KIAl9CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTA1LDggKzEwNyw2IEBACiAJLmV4ZWNfY29tbWFuZAk9IGF0YV9leGVjX2NvbW1hbmQsCiAJLmRldl9zZWxlY3QgCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAogCi0JLmVycm9yX2hhbmRsZXIJPSByejEwMDBfZXJyb3JfaGFuZGxlciwKLQogCS5ibWRtYV9zZXR1cCAJPSBhdGFfYm1kbWFfc2V0dXAsCiAJLmJtZG1hX3N0YXJ0IAk9IGF0YV9ibWRtYV9zdGFydCwKIAkuYm1kbWFfc3RvcAk9IGF0YV9ibWRtYV9zdG9wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKaW5kZXggMzJjZjBiZi4uZThkZmQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIHN0YXRpYyB2b2lkIHNpbDY4MF9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKIHsKIAlzdGF0aWMgdTE2IHNwZWVkX3BbNV0gPSB7IDB4MzI4QSwgMHgyMjgzLCAweDExMDQsIDB4MTBDMywgMHgxMEMxIH07Ci0Jc3RhdGljIHUxNiBzcGVlZF90WzVdID0geyAweDMyOEEsIDB4MTI4MSwgMHgxMjgxLCAweDEwQzMsIDB4MTBDMSB9OworCXN0YXRpYyB1MTYgc3BlZWRfdFs1XSA9IHsgMHgzMjhBLCAweDIyODMsIDB4MTI4MSwgMHgxMEMzLCAweDEwQzEgfTsKIAogCXVuc2lnbmVkIGxvbmcgdGZhZGRyID0gc2lsNjgwX3NlbHJlZyhhcCwgMHgwMik7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gc2lsNjgwX3NlbGRldihhcCwgYWRldiwgMHgwNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwppbmRleCBjYzA5ZDQ3Li5mMGI2YzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqCVZJQSBWVDgyMzNjCS0JVURNQTEwMAogICoJVklBIFZUODIzNQktCVVETUExMzMKICAqCVZJQSBWVDgyMzcJLQlVRE1BMTMzCisgKglWSUEgVlQ4MjM3UwktCVVETUExMzMKICAqCVZJQSBWVDgyNTEJLQlVRE1BMTMzCiAgKgogICoJTW9zdCByZWdpc3RlcnMgcmVtYWluIGNvbXBhdGlibGUgYWNyb3NzIGNoaXBzLiBPdGhlcnMgc3RhcnQgcmVzZXJ2ZWQKQEAgLTYxLDcgKzYyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV92aWEiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjIuMCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi4xIgogCiAvKgogICoJVGhlIGZvbGxvd2luZyBjb21lcyBkaXJlY3RseSBmcm9tIFZvanRlY2ggUGF2bGlrJ3MgaWRlL3BjaS92aWE4MmN4eHgKQEAgLTk1LDYgKzk2LDcgQEAKIAl1OCByZXZfbWF4OwogCXUxNiBmbGFnczsKIH0gdmlhX2lzYV9icmlkZ2VzW10gPSB7CisJeyAidnQ4MjM3cyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdTLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODI1MSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyNTEsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgImN4NzAwIiwJUENJX0RFVklDRV9JRF9WSUFfQ1g3MDAsICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAidnQ2NDEwIiwJUENJX0RFVklDRV9JRF9WSUFfNjQxMCwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVN9LApAQCAtMTYxLDEwICsxNjMsMTUgQEAKIAkJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWlmICgoY29uZmlnLT5mbGFncyAmIFZJQV9VRE1BKSA+PSBWSUFfVURNQV82NikKKwlpZiAoKGNvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQSkgPj0gVklBX1VETUFfMTAwKQogCQlhcC0+Y2JsID0gdmlhX2NhYmxlX2RldGVjdChhcCk7Ci0JZWxzZQorCS8qIFRoZSBVRE1BNjYgc2VyaWVzIGhhcyBubyBjYWJsZSBkZXRlY3Qgc28gZG8gZHJpdmUgc2lkZSBkZXRlY3QgKi8KKwllbHNlIGlmICgoY29uZmlnLT5mbGFncyAmIFZJQV9VRE1BKSA8IFZJQV9VRE1BXzY2KQogCQlhcC0+Y2JsID0gQVRBX0NCTF9QQVRBNDA7CisJZWxzZQorCQlhcC0+Y2JsID0gQVRBX0NCTF9QQVRBX1VOSzsKKwkJCisKIAlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CiB9CiAKQEAgLTM5MCw3ICszOTcsNyBAQAogCWVuYWJsZSAmPSAzOwogCQogCWlmIChmbGFncyAmIFZJQV9TRVRfRklGTykgewotCQl1OCBmaWZvX3NldHRpbmdbNF0gPSB7MHgwMCwgMHg2MCwgMHgwMCwgMHgyMH07CisJCXN0YXRpYyBjb25zdCB1OCBmaWZvX3NldHRpbmdbNF0gPSB7MHgwMCwgMHg2MCwgMHgwMCwgMHgyMH07CiAJCXU4IGZpZm87CiAKIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg0MywgJmZpZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV93aW5ib25kLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYwppbmRleCAzZWEzNDVjLi41ZDFmNTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYwpAQCAtMjA2LDggKzIwNiw4IEBACiAJCQkgKi8KIAogCQkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJWX05BTUUsIG5yX3dpbmJvbmRfaG9zdCwgTlVMTCwgMCk7Ci0JCQlpZiAocGRldiA9PSBOVUxMKQotCQkJCXJldHVybiAtRU5PTUVNOworCQkJaWYgKElTX0VSUihwZGV2KSkKKwkJCQlyZXR1cm4gUFRSX0VSUihwZGV2KTsKIAogCQkJbWVtc2V0KCZhZSwgMCwgc2l6ZW9mKHN0cnVjdCBhdGFfcHJvYmVfZW50KSk7CiAJCQlJTklUX0xJU1RfSEVBRCgmYWUubm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jIGIvZHJpdmVycy9hdGEvcGRjX2FkbWEuYwppbmRleCA5MDIxZTM0Li45MDc4NmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKQEAgLTU1MSw3ICs1NTEsNyBAQAogCQlyZXR1cm4gcmM7CiAJYWRtYV9lbnRlcl9yZWdfbW9kZShhcCk7CiAJcmMgPSAtRU5PTUVNOwotCXBwID0ga2NhbGxvYygxLCBzaXplb2YoKnBwKSwgR0ZQX0tFUk5FTCk7CisJcHAgPSBremFsbG9jKHNpemVvZigqcHApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBwKQogCQlnb3RvIGVycl9vdXQ7CiAJcHAtPnBrdCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIEFETUFfUEtUX0JZVEVTLCAmcHAtPnBrdF9kbWEsCkBAIC02NzIsNyArNjcyLDcgQEAKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCi0JcHJvYmVfZW50ID0ga2NhbGxvYygxLCBzaXplb2YoKnByb2JlX2VudCksIEdGUF9LRVJORUwpOworCXByb2JlX2VudCA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9iZV9lbnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJvYmVfZW50ID09IE5VTEwpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCAxYjhlMGViLi5hYWUwYjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC01MjMsOCArNTIzLDcgQEAKIAl9LAogCXsgIC8qIGNoaXBfNzA0MiAqLwogCQkuc2h0CQk9ICZtdl9zaHQsCi0JCS5mbGFncwkJPSAoTVZfQ09NTU9OX0ZMQUdTIHwgTVZfNlhYWF9GTEFHUyB8Ci0JCQkJICAgTVZfRkxBR19EVUFMX0hDKSwKKwkJLmZsYWdzCQk9IChNVl9DT01NT05fRkxBR1MgfCBNVl82WFhYX0ZMQUdTKSwKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSAweDdmLAkvKiB1ZG1hMC02ICovCiAJCS5wb3J0X29wcwk9ICZtdl9paWVfb3BzLApAQCAtNTQ1LDYgKzU0NCw4IEBACiAKIAl7IFBDSV9WREVWSUNFKEFEQVBURUMyLCAweDAyNDEpLCBjaGlwXzYwNHggfSwKIAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDIzMTApLCBjaGlwXzcwNDIgfSwKKwogCXsgfQkJCS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX252LmMgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKaW5kZXggMGQzMTZlYjMuLmY3YTk2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKQEAgLTI3MCwxNCArMjcwLDYgQEAKIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDYxX1NBVEEpLCBHRU5FUklDIH0sCiAJeyBQQ0lfVkRFVklDRShOVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9TQVRBMiksIEdFTkVSSUMgfSwKIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDYxX1NBVEEzKSwgR0VORVJJQyB9LAotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NWMpLCBHRU5FUklDIH0sIC8qIE1DUDY1ICovCi0JeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDQ1ZCksIEdFTkVSSUMgfSwgLyogTUNQNjUgKi8KLQl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNDVlKSwgR0VORVJJQyB9LCAvKiBNQ1A2NSAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA0NWYpLCBHRU5FUklDIH0sIC8qIE1DUDY1ICovCi0JeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1MCksIEdFTkVSSUMgfSwgLyogTUNQNjcgKi8KLQl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNTUxKSwgR0VORVJJQyB9LCAvKiBNQ1A2NyAqLwotCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTIpLCBHRU5FUklDIH0sIC8qIE1DUDY3ICovCi0JeyBQQ0lfVkRFVklDRShOVklESUEsIDB4MDU1MyksIEdFTkVSSUMgfSwgLyogTUNQNjcgKi8KIAl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfQU5ZX0lELAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQlQQ0lfQ0xBU1NfU1RPUkFHRV9JREU8PDgsIDB4ZmZmZjAwLCBHRU5FUklDIH0sCkBAIC03MDgsNyArNzAwLDYgQEAKIHN0YXRpYyBpbnQgbnZfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHU4IGlycV9zdGF0KQogewogCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKLQlpbnQgaGFuZGxlZDsKIAogCS8qIGZyZWV6ZSBpZiBob3RwbHVnZ2VkICovCiAJaWYgKHVubGlrZWx5KGlycV9zdGF0ICYgKE5WX0lOVF9BRERFRCB8IE5WX0lOVF9SRU1PVkVEKSkpIHsKQEAgLTcyNywxMyArNzE4LDcgQEAKIAl9CiAKIAkvKiBoYW5kbGUgaW50ZXJydXB0ICovCi0JaGFuZGxlZCA9IGF0YV9ob3N0X2ludHIoYXAsIHFjKTsKLQlpZiAodW5saWtlbHkoIWhhbmRsZWQpKSB7Ci0JCS8qIHNwdXJpb3VzLCBjbGVhciBpdCAqLwotCQlhdGFfY2hlY2tfc3RhdHVzKGFwKTsKLQl9Ci0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gYXRhX2hvc3RfaW50cihhcCwgcWMpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfYWRtYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQpAQCAtNzYwLDYgKzc0NSwxMSBAQAogCQkJaWYgKHBwLT5mbGFncyAmIE5WX0FETUFfUE9SVF9SRUdJU1RFUl9NT0RFKSB7CiAJCQkJdTggaXJxX3N0YXQgPSByZWFkYihob3N0LT5tbWlvX2Jhc2UgKyBOVl9JTlRfU1RBVFVTX0NLODA0KQogCQkJCQk+PiAoTlZfSU5UX1BPUlRfU0hJRlQgKiBpKTsKKwkJCQlpZihhdGFfdGFnX3ZhbGlkKGFwLT5hY3RpdmVfdGFnKSkKKwkJCQkJLyoqIE5WX0lOVF9ERVYgaW5kaWNhdGlvbiBzZWVtcyB1bnJlbGlhYmxlIGF0IHRpbWVzCisJCQkJCSAgICBhdCBsZWFzdCBpbiBBRE1BIG1vZGUuIEZvcmNlIGl0IG9uIGFsd2F5cyB3aGVuIGEKKwkJCQkJICAgIGNvbW1hbmQgaXMgYWN0aXZlLCB0byBwcmV2ZW50IGxvc2luZyBpbnRlcnJ1cHRzLiAqLworCQkJCQlpcnFfc3RhdCB8PSBOVl9JTlRfREVWOwogCQkJCWhhbmRsZWQgKz0gbnZfaG9zdF9pbnRyKGFwLCBpcnFfc3RhdCk7CiAJCQkJY29udGludWU7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jIGIvZHJpdmVycy9hdGEvc2F0YV9zdncuYwppbmRleCBkYjMyZDE1Li40NmQ4YTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMKQEAgLTU2LDYgKzU2LDggQEAKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMCIKIAogZW51bSB7CisJSzJfRkxBR19OT19BVEFQSV9ETUEJCT0gKDEgPDwgMjkpLAorCiAJLyogVGFza2ZpbGUgcmVnaXN0ZXJzIG9mZnNldHMgKi8KIAlLMl9TQVRBX1RGX0NNRF9PRkZTRVQJCT0gMHgwMCwKIAlLMl9TQVRBX1RGX0RBVEFfT0ZGU0VUCQk9IDB4MDAsCkBAIC04MywxMSArODUsMzMgQEAKIAogCS8qIFBvcnQgc3RyaWRlICovCiAJSzJfU0FUQV9QT1JUX09GRlNFVAkJPSAweDEwMCwKKworCWJvYXJkX3N2dzQJCQk9IDAsCisJYm9hcmRfc3Z3OAkJCT0gMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgazJfYm9hcmRfaW5mbyB7CisJdW5zaWduZWQgaW50CQluX3BvcnRzOworCXVuc2lnbmVkIGxvbmcJCXBvcnRfZmxhZ3M7Cit9IGsyX2JvYXJkX2luZm9bXSA9IHsKKwkvKiBib2FyZF9zdnc0ICovCisJeyA0LCBLMl9GTEFHX05PX0FUQVBJX0RNQSB9LAorCisJLyogYm9hcmRfc3Z3OCAqLworCXsgOCwgSzJfRkxBR19OT19BVEFQSV9ETUEgfSwKIH07CiAKIHN0YXRpYyB1OCBrMl9zdGF0X2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAogCitzdGF0aWMgaW50IGsyX3NhdGFfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaWYgKHFjLT5hcC0+ZmxhZ3MgJiBLMl9GTEFHX05PX0FUQVBJX0RNQSkKKwkJcmV0dXJuIC0xOwkvKiBBVEFQSSBETUEgbm90IHN1cHBvcnRlZCAqLworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB1MzIgazJfc2F0YV9zY3JfcmVhZCAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZykKIHsKIAlpZiAoc2NfcmVnID4gU0NSX0NPTlRST0wpCkBAIC0xMTEsMjYgKzEzNSwzMSBAQAogCXVuc2lnbmVkIGludCBpc19hZGRyID0gdGYtPmZsYWdzICYgQVRBX1RGTEFHX0lTQUREUjsKIAogCWlmICh0Zi0+Y3RsICE9IGFwLT5sYXN0X2N0bCkgewotCQl3cml0ZWIodGYtPmN0bCwgaW9hZGRyLT5jdGxfYWRkcik7CisJCXdyaXRlYih0Zi0+Y3RsLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+Y3RsX2FkZHIpOwogCQlhcC0+bGFzdF9jdGwgPSB0Zi0+Y3RsOwogCQlhdGFfd2FpdF9pZGxlKGFwKTsKIAl9CiAJaWYgKGlzX2FkZHIgJiYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19MQkE0OCkpIHsKLQkJd3JpdGV3KHRmLT5mZWF0dXJlIHwgKCgodTE2KXRmLT5ob2JfZmVhdHVyZSkgPDwgOCksIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsKLQkJd3JpdGV3KHRmLT5uc2VjdCB8ICgoKHUxNil0Zi0+aG9iX25zZWN0KSA8PCA4KSwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKLQkJd3JpdGV3KHRmLT5sYmFsIHwgKCgodTE2KXRmLT5ob2JfbGJhbCkgPDwgOCksIGlvYWRkci0+bGJhbF9hZGRyKTsKLQkJd3JpdGV3KHRmLT5sYmFtIHwgKCgodTE2KXRmLT5ob2JfbGJhbSkgPDwgOCksIGlvYWRkci0+bGJhbV9hZGRyKTsKLQkJd3JpdGV3KHRmLT5sYmFoIHwgKCgodTE2KXRmLT5ob2JfbGJhaCkgPDwgOCksIGlvYWRkci0+bGJhaF9hZGRyKTsKKwkJd3JpdGV3KHRmLT5mZWF0dXJlIHwgKCgodTE2KXRmLT5ob2JfZmVhdHVyZSkgPDwgOCksCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsKKwkJd3JpdGV3KHRmLT5uc2VjdCB8ICgoKHUxNil0Zi0+aG9iX25zZWN0KSA8PCA4KSwKKwkJICAgICAgICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFsIHwgKCgodTE2KXRmLT5ob2JfbGJhbCkgPDwgOCksCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbF9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFtIHwgKCgodTE2KXRmLT5ob2JfbGJhbSkgPDwgOCksCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbV9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFoIHwgKCgodTE2KXRmLT5ob2JfbGJhaCkgPDwgOCksCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhaF9hZGRyKTsKIAl9IGVsc2UgaWYgKGlzX2FkZHIpIHsKLQkJd3JpdGV3KHRmLT5mZWF0dXJlLCBpb2FkZHItPmZlYXR1cmVfYWRkcik7Ci0JCXdyaXRldyh0Zi0+bnNlY3QsIGlvYWRkci0+bnNlY3RfYWRkcik7Ci0JCXdyaXRldyh0Zi0+bGJhbCwgaW9hZGRyLT5sYmFsX2FkZHIpOwotCQl3cml0ZXcodGYtPmxiYW0sIGlvYWRkci0+bGJhbV9hZGRyKTsKLQkJd3JpdGV3KHRmLT5sYmFoLCBpb2FkZHItPmxiYWhfYWRkcik7CisJCXdyaXRldyh0Zi0+ZmVhdHVyZSwgKHZvaWQgX19pb21lbSAqKSBpb2FkZHItPmZlYXR1cmVfYWRkcik7CisJCXdyaXRldyh0Zi0+bnNlY3QsICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFsLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbF9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFtLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbV9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFoLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhaF9hZGRyKTsKIAl9CiAKIAlpZiAodGYtPmZsYWdzICYgQVRBX1RGTEFHX0RFVklDRSkKLQkJd3JpdGViKHRmLT5kZXZpY2UsIGlvYWRkci0+ZGV2aWNlX2FkZHIpOworCQl3cml0ZWIodGYtPmRldmljZSwgKHZvaWQgX19pb21lbSAqKSBpb2FkZHItPmRldmljZV9hZGRyKTsKIAogCWF0YV93YWl0X2lkbGUoYXApOwogfQpAQCAtMTQyLDEyICsxNzEsMTIgQEAKIAl1MTYgbnNlY3QsIGxiYWwsIGxiYW0sIGxiYWgsIGZlYXR1cmU7CiAKIAl0Zi0+Y29tbWFuZCA9IGsyX3N0YXRfY2hlY2tfc3RhdHVzKGFwKTsKLQl0Zi0+ZGV2aWNlID0gcmVhZHcoaW9hZGRyLT5kZXZpY2VfYWRkcik7Ci0JZmVhdHVyZSA9IHJlYWR3KGlvYWRkci0+ZXJyb3JfYWRkcik7Ci0JbnNlY3QgPSByZWFkdyhpb2FkZHItPm5zZWN0X2FkZHIpOwotCWxiYWwgPSByZWFkdyhpb2FkZHItPmxiYWxfYWRkcik7Ci0JbGJhbSA9IHJlYWR3KGlvYWRkci0+bGJhbV9hZGRyKTsKLQlsYmFoID0gcmVhZHcoaW9hZGRyLT5sYmFoX2FkZHIpOworCXRmLT5kZXZpY2UgPSByZWFkdygodm9pZCBfX2lvbWVtICopaW9hZGRyLT5kZXZpY2VfYWRkcik7CisJZmVhdHVyZSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmVycm9yX2FkZHIpOworCW5zZWN0ID0gcmVhZHcoKHZvaWQgX19pb21lbSAqKWlvYWRkci0+bnNlY3RfYWRkcik7CisJbGJhbCA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmxiYWxfYWRkcik7CisJbGJhbSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmxiYW1fYWRkcik7CisJbGJhaCA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmxiYWhfYWRkcik7CiAKIAl0Zi0+ZmVhdHVyZSA9IGZlYXR1cmU7CiAJdGYtPm5zZWN0ID0gbnNlY3Q7CkBAIC0zMTMsNiArMzQyLDcgQEAKIAkuY2hlY2tfc3RhdHVzCQk9IGsyX3N0YXRfY2hlY2tfc3RhdHVzLAogCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKIAkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCisJLmNoZWNrX2F0YXBpX2RtYQk9IGsyX3NhdGFfY2hlY2tfYXRhcGlfZG1hLAogCS5ibWRtYV9zZXR1cAkJPSBrMl9ibWRtYV9zZXR1cF9tbWlvLAogCS5ibWRtYV9zdGFydAkJPSBrMl9ibWRtYV9zdGFydF9tbWlvLAogCS5ibWRtYV9zdG9wCQk9IGF0YV9ibWRtYV9zdG9wLApAQCAtMzU5LDYgKzM4OSw4IEBACiAJc3RydWN0IGF0YV9wcm9iZV9lbnQgKnByb2JlX2VudCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBiYXNlOwogCXZvaWQgX19pb21lbSAqbW1pb19iYXNlOworCWNvbnN0IHN0cnVjdCBrMl9ib2FyZF9pbmZvICpib2FyZF9pbmZvID0KKwkJCSZrMl9ib2FyZF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdOwogCWludCBwY2lfZGV2X2J1c3kgPSAwOwogCWludCByYzsKIAlpbnQgaTsKQEAgLTQyNCw3ICs0NTYsNyBAQAogCiAJcHJvYmVfZW50LT5zaHQgPSAmazJfc2F0YV9zaHQ7CiAJcHJvYmVfZW50LT5wb3J0X2ZsYWdzID0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8Ci0JCQkJQVRBX0ZMQUdfTU1JTzsKKwkJCQlBVEFfRkxBR19NTUlPIHwgYm9hcmRfaW5mby0+cG9ydF9mbGFnczsKIAlwcm9iZV9lbnQtPnBvcnRfb3BzID0gJmsyX3NhdGFfb3BzOwogCXByb2JlX2VudC0+bl9wb3J0cyA9IDQ7CiAJcHJvYmVfZW50LT5pcnEgPSBwZGV2LT5pcnE7CkBAIC00NDEsNyArNDczLDcgQEAKIAkvKiBkaWZmZXJlbnQgY29udHJvbGxlcnMgaGF2ZSBkaWZmZXJlbnQgbnVtYmVyIG9mIHBvcnRzIC0gY3VycmVudGx5IDQgb3IgOCAqLwogCS8qIEFsbCBwb3J0cyBhcmUgb24gdGhlIHNhbWUgZnVuY3Rpb24uIE11bHRpLWZ1bmN0aW9uIGRldmljZSBpcyBubwogCSAqIGxvbmdlciBhdmFpbGFibGUuIFRoaXMgc2hvdWxkIG5vdCBiZSBzZWVuIGluIGFueSBzeXN0ZW0uICovCi0JZm9yIChpID0gMDsgaSA8IGVudC0+ZHJpdmVyX2RhdGE7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgYm9hcmRfaW5mby0+bl9wb3J0czsgaSsrKQogCQlrMl9zYXRhX3NldHVwX3BvcnQoJnByb2JlX2VudC0+cG9ydFtpXSwgYmFzZSArIGkgKiBLMl9TQVRBX1BPUlRfT0ZGU0VUKTsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwpAQCAtNDY5LDExICs1MDEsMTEgQEAKICAqIGNvbnRyb2xsZXIKICAqICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgazJfc2F0YV9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwMjQwKSwgNCB9LAotCXsgUENJX1ZERVZJQ0UoU0VSVkVSV09SS1MsIDB4MDI0MSksIDQgfSwKLQl7IFBDSV9WREVWSUNFKFNFUlZFUldPUktTLCAweDAyNDIpLCA4IH0sCi0JeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwMjRhKSwgNCB9LAotCXsgUENJX1ZERVZJQ0UoU0VSVkVSV09SS1MsIDB4MDI0YiksIDQgfSwKKwl7IFBDSV9WREVWSUNFKFNFUlZFUldPUktTLCAweDAyNDApLCBib2FyZF9zdnc0IH0sCisJeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwMjQxKSwgYm9hcmRfc3Z3NCB9LAorCXsgUENJX1ZERVZJQ0UoU0VSVkVSV09SS1MsIDB4MDI0MiksIGJvYXJkX3N2dzggfSwKKwl7IFBDSV9WREVWSUNFKFNFUlZFUldPUktTLCAweDAyNGEpLCBib2FyZF9zdnc0IH0sCisJeyBQQ0lfVkRFVklDRShTRVJWRVJXT1JLUywgMHgwMjRiKSwgYm9hcmRfc3Z3NCB9LAogCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMKaW5kZXggNWM2MDNjYS4uYTQzYWVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jCkBAIC0xMjgsNyArMTI4LDggQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHVsaV9wb3J0X2luZm8gPSB7CiAJLnNodCAgICAgICAgICAgID0gJnVsaV9zaHQsCi0JLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1ksCisJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAorCQkJICBBVEFfRkxBR19JR05fU0lNUExFWCwKIAkucGlvX21hc2sgICAgICAgPSAweDFmLAkJLyogcGlvMC00ICovCiAJLnVkbWFfbWFzayAgICAgID0gMHg3ZiwJCS8qIHVkbWEwLTYgKi8KIAkucG9ydF9vcHMgICAgICAgPSAmdWxpX29wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCmluZGV4IDFjN2YxOWEuLmQzZDVjMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwpAQCAtNzQsOSArNzQsMTEgQEAKIHN0YXRpYyBpbnQgc3ZpYV9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwogc3RhdGljIHUzMiBzdmlhX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIHN2aWFfc2NyX3dyaXRlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgdmFsKTsKK3N0YXRpYyB2b2lkIHN2aWFfbm9vcF9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCB2dDY0MjBfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN2aWFfcGNpX3RibFtdID0geworCXsgUENJX1ZERVZJQ0UoVklBLCAweDUzMzcpLCB2dDY0MjAgfSwKIAl7IFBDSV9WREVWSUNFKFZJQSwgMHgwNTkxKSwgdnQ2NDIwIH0sCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4MzE0OSksIHZ0NjQyMCB9LAogCXsgUENJX1ZERVZJQ0UoVklBLCAweDMyNDkpLCB2dDY0MjEgfSwKQEAgLTEyNyw3ICsxMjksNyBAQAogCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKIAkuZGF0YV94ZmVyCQk9IGF0YV9waW9fZGF0YV94ZmVyLAogCi0JLmZyZWV6ZQkJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKKwkuZnJlZXplCQkJPSBzdmlhX25vb3BfZnJlZXplLAogCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKIAkuZXJyb3JfaGFuZGxlcgkJPSB2dDY0MjBfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCkBAIC0yMDMsNiArMjA1LDE1IEBACiAJb3V0bCh2YWwsIGFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoNCAqIHNjX3JlZykpOwogfQogCitzdGF0aWMgdm9pZCBzdmlhX25vb3BfZnJlZXplKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJLyogU29tZSBWSUEgY29udHJvbGxlcnMgY2hva2UgaWYgQVRBX05JRU4gaXMgbWFuaXB1bGF0ZWQgaW4KKwkgKiBjZXJ0YWluIHdheS4gIExlYXZlIGl0IGFsb25lIGFuZCBqdXN0IGNsZWFyIHBlbmRpbmcgSVJRLgorCSAqLworCWF0YV9jaGtfc3RhdHVzKGFwKTsKKwlhdGFfYm1kbWFfaXJxX2NsZWFyKGFwKTsKK30KKwogLyoqCiAgKgl2dDY0MjBfcHJlcmVzZXQgLSBwcmVyZXNldCBmb3IgdnQ2NDIwCiAgKglAYXA6IHRhcmdldCBBVEEgcG9ydApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKaW5kZXggZTY1NGI5OS4uMGZhMWI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCkBAIC0xNDksMjEgKzE0OSwyNiBAQAogCQl2c2NfaW50cl9tYXNrX3VwZGF0ZShhcCwgdGYtPmN0bCAmIEFUQV9OSUVOKTsKIAl9CiAJaWYgKGlzX2FkZHIgJiYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19MQkE0OCkpIHsKLQkJd3JpdGV3KHRmLT5mZWF0dXJlIHwgKCgodTE2KXRmLT5ob2JfZmVhdHVyZSkgPDwgOCksIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsKLQkJd3JpdGV3KHRmLT5uc2VjdCB8ICgoKHUxNil0Zi0+aG9iX25zZWN0KSA8PCA4KSwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKLQkJd3JpdGV3KHRmLT5sYmFsIHwgKCgodTE2KXRmLT5ob2JfbGJhbCkgPDwgOCksIGlvYWRkci0+bGJhbF9hZGRyKTsKLQkJd3JpdGV3KHRmLT5sYmFtIHwgKCgodTE2KXRmLT5ob2JfbGJhbSkgPDwgOCksIGlvYWRkci0+bGJhbV9hZGRyKTsKLQkJd3JpdGV3KHRmLT5sYmFoIHwgKCgodTE2KXRmLT5ob2JfbGJhaCkgPDwgOCksIGlvYWRkci0+bGJhaF9hZGRyKTsKKwkJd3JpdGV3KHRmLT5mZWF0dXJlIHwgKCgodTE2KXRmLT5ob2JfZmVhdHVyZSkgPDwgOCksCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsKKwkJd3JpdGV3KHRmLT5uc2VjdCB8ICgoKHUxNil0Zi0+aG9iX25zZWN0KSA8PCA4KSwKKwkJICAgICAgICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFsIHwgKCgodTE2KXRmLT5ob2JfbGJhbCkgPDwgOCksCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbF9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFtIHwgKCgodTE2KXRmLT5ob2JfbGJhbSkgPDwgOCksCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbV9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFoIHwgKCgodTE2KXRmLT5ob2JfbGJhaCkgPDwgOCksCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhaF9hZGRyKTsKIAl9IGVsc2UgaWYgKGlzX2FkZHIpIHsKLQkJd3JpdGV3KHRmLT5mZWF0dXJlLCBpb2FkZHItPmZlYXR1cmVfYWRkcik7Ci0JCXdyaXRldyh0Zi0+bnNlY3QsIGlvYWRkci0+bnNlY3RfYWRkcik7Ci0JCXdyaXRldyh0Zi0+bGJhbCwgaW9hZGRyLT5sYmFsX2FkZHIpOwotCQl3cml0ZXcodGYtPmxiYW0sIGlvYWRkci0+bGJhbV9hZGRyKTsKLQkJd3JpdGV3KHRmLT5sYmFoLCBpb2FkZHItPmxiYWhfYWRkcik7CisJCXdyaXRldyh0Zi0+ZmVhdHVyZSwgKHZvaWQgX19pb21lbSAqKSBpb2FkZHItPmZlYXR1cmVfYWRkcik7CisJCXdyaXRldyh0Zi0+bnNlY3QsICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFsLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbF9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFtLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbV9hZGRyKTsKKwkJd3JpdGV3KHRmLT5sYmFoLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhaF9hZGRyKTsKIAl9CiAKIAlpZiAodGYtPmZsYWdzICYgQVRBX1RGTEFHX0RFVklDRSkKLQkJd3JpdGViKHRmLT5kZXZpY2UsIGlvYWRkci0+ZGV2aWNlX2FkZHIpOworCQl3cml0ZWIodGYtPmRldmljZSwgKHZvaWQgX19pb21lbSAqKSBpb2FkZHItPmRldmljZV9hZGRyKTsKIAogCWF0YV93YWl0X2lkbGUoYXApOwogfQpAQCAtMTc1LDEyICsxODAsMTIgQEAKIAl1MTYgbnNlY3QsIGxiYWwsIGxiYW0sIGxiYWgsIGZlYXR1cmU7CiAKIAl0Zi0+Y29tbWFuZCA9IGF0YV9jaGVja19zdGF0dXMoYXApOwotCXRmLT5kZXZpY2UgPSByZWFkdyhpb2FkZHItPmRldmljZV9hZGRyKTsKLQlmZWF0dXJlID0gcmVhZHcoaW9hZGRyLT5lcnJvcl9hZGRyKTsKLQluc2VjdCA9IHJlYWR3KGlvYWRkci0+bnNlY3RfYWRkcik7Ci0JbGJhbCA9IHJlYWR3KGlvYWRkci0+bGJhbF9hZGRyKTsKLQlsYmFtID0gcmVhZHcoaW9hZGRyLT5sYmFtX2FkZHIpOwotCWxiYWggPSByZWFkdyhpb2FkZHItPmxiYWhfYWRkcik7CisJdGYtPmRldmljZSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5kZXZpY2VfYWRkcik7CisJZmVhdHVyZSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5lcnJvcl9hZGRyKTsKKwluc2VjdCA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwlsYmFsID0gcmVhZHcoKHZvaWQgX19pb21lbSAqKSBpb2FkZHItPmxiYWxfYWRkcik7CisJbGJhbSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5sYmFtX2FkZHIpOworCWxiYWggPSByZWFkdygodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhaF9hZGRyKTsKIAogCXRmLT5mZWF0dXJlID0gZmVhdHVyZTsKIAl0Zi0+bnNlY3QgPSBuc2VjdDsKQEAgLTMyNyw4ICszMzIsOCBAQAogCXBvcnQtPmN0bF9hZGRyCQk9IGJhc2UgKyBWU0NfU0FUQV9URl9DVExfT0ZGU0VUOwogCXBvcnQtPmJtZG1hX2FkZHIJPSBiYXNlICsgVlNDX1NBVEFfRE1BX0NNRF9PRkZTRVQ7CiAJcG9ydC0+c2NyX2FkZHIJCT0gYmFzZSArIFZTQ19TQVRBX1NDUl9TVEFUVVNfT0ZGU0VUOwotCXdyaXRlbCgwLCBiYXNlICsgVlNDX1NBVEFfVVBfREVTQ1JJUFRPUl9PRkZTRVQpOwotCXdyaXRlbCgwLCBiYXNlICsgVlNDX1NBVEFfVVBfREFUQV9CVUZGRVJfT0ZGU0VUKTsKKwl3cml0ZWwoMCwgKHZvaWQgX19pb21lbSAqKSBiYXNlICsgVlNDX1NBVEFfVVBfREVTQ1JJUFRPUl9PRkZTRVQpOworCXdyaXRlbCgwLCAodm9pZCBfX2lvbWVtICopIGJhc2UgKyBWU0NfU0FUQV9VUF9EQVRBX0JVRkZFUl9PRkZTRVQpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtLy5naXRpZ25vcmUgYi9kcml2ZXJzL2F0bS8uZ2l0aWdub3JlCmluZGV4IGExNjViNzEuLmZjMGFlNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtLy5naXRpZ25vcmUKKysrIGIvZHJpdmVycy9hdG0vLmdpdGlnbm9yZQpAQCAtMiw0ICsyLDQgQEAKIGZvcmUyMDBlX21rZmlybQogZm9yZTIwMGVfcGNhX2Z3LmMKIHBjYTIwMGUuYmluCi0KK3BjYTIwMGVfZWNkLmJpbjIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL0tjb25maWcgYi9kcml2ZXJzL2F0bS9LY29uZmlnCmluZGV4IGNmYTVhZjguLjMzNjg3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL0tjb25maWcKKysrIGIvZHJpdmVycy9hdG0vS2NvbmZpZwpAQCAtMTY3LDEwICsxNjcsNiBAQAogCSAgTm90ZSB0aGF0IGV4dGVuZGVkIGRlYnVnZ2luZyBtYXkgY3JlYXRlIGNlcnRhaW4gcmFjZSBjb25kaXRpb25zCiAJICBpdHNlbGYuIEVuYWJsZSB0aGlzIE9OTFkgaWYgeW91IHN1c3BlY3QgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyLgogCi0jICAgYm9vbCAnUm9sZnMgVEkgVE5FVEExNTcwJyBDT05GSUdfQVRNX1RORVRBMTU3MCB5Ci0jICAgaWYgWyAiJENPTkZJR19BVE1fVE5FVEExNTcwIiA9ICJ5IiBdOyB0aGVuCi0jICAgICAgYm9vbCAnICBFbmFibGUgZXh0ZW5kZWQgZGVidWdnaW5nJyBDT05GSUdfQVRNX1RORVRBMTU3MF9ERUJVRyBuCi0jICAgZmkKIGNvbmZpZyBBVE1fTklDU1RBUgogCXRyaXN0YXRlICJJRFQgNzcyMDEgKE5JQ1N0QVIpIChGb3JlUnVubmVyTEUpIgogCWRlcGVuZHMgb24gUENJICYmIEFUTSAmJiAhNjRCSVQKQEAgLTI0Miw2ICsyMzgsNyBAQAogY29uZmlnIEFUTV9BTUJBU1NBRE9SCiAJdHJpc3RhdGUgIk1hZGdlIEFtYmFzc2Fkb3IgKENvbGxhZ2UgUENJIDE1NSBTZXJ2ZXIpIgogCWRlcGVuZHMgb24gUENJICYmIEFUTQorCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgQVRNaXplciBiYXNlZCBBVE0gY2FyZCBwcm9kdWNlZCBieSBNYWRnZQogCSAgTmV0d29ya3MgTHRkLiBTYXkgWSAob3IgTSB0byBjb21waWxlIGFzIGEgbW9kdWxlIG5hbWVkIGFtYmFzc2Fkb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMgYi9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMKaW5kZXggYWZhN2Q3NS4uM2MzNzJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jCisrKyBiL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0yMDY4LDE4ICsyMDY5LDYgQEAKICAgUFJJTlRLIChLRVJOX0lORk8sICJtaWNyb2NvZGUgdmVyc2lvbiBpcyAldS4ldSIsIG1ham9yLCBtaW5vcik7CiB9CiAgIAotLy8gc3dhcCBiaXRzIHdpdGhpbiBieXRlIHRvIGdldCBFdGhlcm5ldCBvcmRlcmluZwotc3RhdGljIHU4IGJpdF9zd2FwICh1OCBieXRlKQotewotICAgIGNvbnN0IHU4IHN3YXBbXSA9IHsKLSAgICAgIDB4MCwgMHg4LCAweDQsIDB4YywKLSAgICAgIDB4MiwgMHhhLCAweDYsIDB4ZSwKLSAgICAgIDB4MSwgMHg5LCAweDUsIDB4ZCwKLSAgICAgIDB4MywgMHhiLCAweDcsIDB4ZgotICAgIH07Ci0gICAgcmV0dXJuICgoc3dhcFtieXRlICYgMHhmXTw8NCkgfCBzd2FwW2J5dGU+PjRdKTsKLX0KLQogLy8gZ2V0IGVuZCBzdGF0aW9uIGFkZHJlc3MKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBhbWJfZXNpIChhbWJfZGV2ICogZGV2LCB1OCAqIGVzaSkgewogICB1MzIgbG93ZXI0OwpAQCAtMjEwMSw5ICsyMDkwLDkgQEAKICAgICBQUklOVERCIChEQkdfSU5JVCwgIkVTSToiKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgRVNJX0xFTjsgKytpKSB7CiAgICAgICBpZiAoaSA8IDQpCi0JICBlc2lbaV0gPSBiaXRfc3dhcCAobG93ZXI0Pj4oOCppKSk7CisJICBlc2lbaV0gPSBiaXRyZXY4KGxvd2VyND4+KDgqaSkpOwogICAgICAgZWxzZQotCSAgZXNpW2ldID0gYml0X3N3YXAgKHVwcGVyMj4+KDgqKGktNCkpKTsKKwkgIGVzaVtpXSA9IGJpdHJldjgodXBwZXIyPj4oOCooaS00KSkpOwogICAgICAgUFJJTlRETSAoREJHX0lOSVQsICIgJTAyeCIsIGVzaVtpXSk7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZW5pLmMgYi9kcml2ZXJzL2F0bS9lbmkuYwppbmRleCBiYzFiMTNjLi41YWFiN2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9lbmkuYworKysgYi9kcml2ZXJzL2F0bS9lbmkuYwpAQCAtMTgzMiw3ICsxODMyLDcgQEAKIAkvKiBpbml0aWFsaXplIG1lbW9yeSBtYW5hZ2VtZW50ICovCiAJYnVmZmVyX21lbSA9IGVuaV9kZXYtPm1lbSAtIChidWYgLSBlbmlfZGV2LT5yYW0pOwogCWVuaV9kZXYtPmZyZWVfbGlzdF9zaXplID0gYnVmZmVyX21lbS9NSURfTUlOX0JVRl9TSVpFLzI7Ci0JZW5pX2Rldi0+ZnJlZV9saXN0ID0gKHN0cnVjdCBlbmlfZnJlZSAqKSBrbWFsbG9jKAorCWVuaV9kZXYtPmZyZWVfbGlzdCA9IGttYWxsb2MoCiAJICAgIHNpemVvZihzdHJ1Y3QgZW5pX2ZyZWUpKihlbmlfZGV2LT5mcmVlX2xpc3Rfc2l6ZSsxKSxHRlBfS0VSTkVMKTsKIAlpZiAoIWVuaV9kZXYtPmZyZWVfbGlzdCkgewogCQlwcmludGsoS0VSTl9FUlIgREVWX0xBQkVMICIoaXRmICVkKTogY291bGRuJ3QgZ2V0IGZyZWUgcGFnZVxuIiwKQEAgLTIyMzIsNyArMjIzMiw3IEBACiAJCWdvdG8gb3V0MDsKIAl9CiAKLQllbmlfZGV2ID0gKHN0cnVjdCBlbmlfZGV2ICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBlbmlfZGV2KSxHRlBfS0VSTkVMKTsKKwllbmlfZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGVuaV9kZXYpLEdGUF9LRVJORUwpOwogCWlmICghZW5pX2RldikgZ290byBvdXQwOwogCWlmICghY3B1X3plcm9lcykgewogCQljcHVfemVyb2VzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpX2RldixFTklfWkVST0VTX1NJWkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuYwppbmRleCAzYTdiMjFmLi40YWViM2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCisrKyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKQEAgLTE3MiwyNSArMTcyLDYgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCoKLWZvcmUyMDBlX2ttYWxsb2MoaW50IHNpemUsIGdmcF90IGZsYWdzKQotewotICAgIHZvaWQgKmNodW5rID0ga3phbGxvYyhzaXplLCBmbGFncyk7Ci0KLSAgICBpZiAoIWNodW5rKQotCXByaW50ayhGT1JFMjAwRSAia21hbGxvYygpIGZhaWxlZCwgcmVxdWVzdGVkIHNpemUgPSAlZCwgZmxhZ3MgPSAweCV4XG4iLAkJCXNpemUsIGZsYWdzKTsKLSAgICAKLSAgICByZXR1cm4gY2h1bms7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWZvcmUyMDBlX2tmcmVlKHZvaWQqIGNodW5rKQotewotICAgIGtmcmVlKGNodW5rKTsKLX0KLQotCiAvKiBhbGxvY2F0ZSBhbmQgYWxpZ24gYSBjaHVuayBvZiBtZW1vcnkgaW50ZW5kZWQgdG8gaG9sZCB0aGUgZGF0YSBiZWhpbmcgZXhjaGFuZ2VkCiAgICBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZSBhZGFwdGVyICh1c2luZyBzdHJlYW1pbmcgRFZNQSkgKi8KIApAQCAtMjA2LDcgKzE4Nyw3IEBACiAgICAgY2h1bmstPmFsaWduX3NpemUgPSBzaXplOwogICAgIGNodW5rLT5kaXJlY3Rpb24gID0gZGlyZWN0aW9uOwogCi0gICAgY2h1bmstPmFsbG9jX2FkZHIgPSBmb3JlMjAwZV9rbWFsbG9jKGNodW5rLT5hbGxvY19zaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisgICAgY2h1bmstPmFsbG9jX2FkZHIgPSBremFsbG9jKGNodW5rLT5hbGxvY19zaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAgICAgaWYgKGNodW5rLT5hbGxvY19hZGRyID09IE5VTEwpCiAJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIyOCw3ICsyMDksNyBAQAogewogICAgIGZvcmUyMDBlLT5idXMtPmRtYV91bm1hcChmb3JlMjAwZSwgY2h1bmstPmRtYV9hZGRyLCBjaHVuay0+ZG1hX3NpemUsIGNodW5rLT5kaXJlY3Rpb24pOwogCi0gICAgZm9yZTIwMGVfa2ZyZWUoY2h1bmstPmFsbG9jX2FkZHIpOworICAgIGtmcmVlKGNodW5rLT5hbGxvY19hZGRyKTsKIH0KIAogCkBAIC04ODIsNyArODYzLDcgQEAKIAlyZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmb3JlMjAwZSA9IGZvcmUyMDBlX2ttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmb3JlMjAwZSksIEdGUF9LRVJORUwpOworICAgIGZvcmUyMDBlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZvcmUyMDBlKSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKGZvcmUyMDBlID09IE5VTEwpCiAJcmV0dXJuIE5VTEw7CiAKQEAgLTE1MDUsNyArMTQ4Niw3IEBACiAKICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmb3JlMjAwZS0+cV9sb2NrLCBmbGFncyk7CiAKLSAgICBmb3JlMjAwZV92Y2MgPSBmb3JlMjAwZV9rbWFsbG9jKHNpemVvZihzdHJ1Y3QgZm9yZTIwMGVfdmNjKSwgR0ZQX0FUT01JQyk7CisgICAgZm9yZTIwMGVfdmNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZvcmUyMDBlX3ZjYyksIEdGUF9BVE9NSUMpOwogICAgIGlmIChmb3JlMjAwZV92Y2MgPT0gTlVMTCkgewogCXZjX21hcC0+dmNjID0gTlVMTDsKIAlyZXR1cm4gLUVOT01FTTsKQEAgLTE1MjYsNyArMTUwNyw3IEBACiAJaWYgKGZvcmUyMDBlLT5hdmFpbGFibGVfY2VsbF9yYXRlIDwgdmNjLT5xb3MudHh0cC5tYXhfcGNyKSB7CiAJICAgIHVwKCZmb3JlMjAwZS0+cmF0ZV9zZik7CiAKLQkgICAgZm9yZTIwMGVfa2ZyZWUoZm9yZTIwMGVfdmNjKTsKKwkgICAga2ZyZWUoZm9yZTIwMGVfdmNjKTsKIAkgICAgdmNfbWFwLT52Y2MgPSBOVUxMOwogCSAgICByZXR1cm4gLUVBR0FJTjsKIAl9CkBAIC0xNTU0LDcgKzE1MzUsNyBAQAogCiAJZm9yZTIwMGUtPmF2YWlsYWJsZV9jZWxsX3JhdGUgKz0gdmNjLT5xb3MudHh0cC5tYXhfcGNyOwogCi0JZm9yZTIwMGVfa2ZyZWUoZm9yZTIwMGVfdmNjKTsKKwlrZnJlZShmb3JlMjAwZV92Y2MpOwogCXJldHVybiAtRUlOVkFMOwogICAgIH0KICAgICAKQEAgLTE2MzAsNyArMTYxMSw3IEBACiAgICAgY2xlYXJfYml0KEFUTV9WRl9QQVJUSUFMLCZ2Y2MtPmZsYWdzKTsKIAogICAgIEFTU0VSVChmb3JlMjAwZV92Y2MpOwotICAgIGZvcmUyMDBlX2tmcmVlKGZvcmUyMDBlX3ZjYyk7CisgICAga2ZyZWUoZm9yZTIwMGVfdmNjKTsKIH0KIAogCkBAIC0xODMxLDcgKzE4MTIsNyBAQAogICAgIHUzMiAgICAgICAgICAgICAgICAgICAgIHN0YXRzX2RtYV9hZGRyOwogCiAgICAgaWYgKGZvcmUyMDBlLT5zdGF0cyA9PSBOVUxMKSB7Ci0JZm9yZTIwMGUtPnN0YXRzID0gZm9yZTIwMGVfa21hbGxvYyhzaXplb2Yoc3RydWN0IHN0YXRzKSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWZvcmUyMDBlLT5zdGF0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdGF0cyksIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoZm9yZTIwMGUtPnN0YXRzID09IE5VTEwpCiAJICAgIHJldHVybiAtRU5PTUVNOwogICAgIH0KQEAgLTIwMDIsMTcgKzE5ODMsNiBAQAogfQogCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1mb3JlMjAwZV9zd2FwKHVuc2lnbmVkIGludCBpbikKLXsKLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLSAgICByZXR1cm4gc3dhYjMyKGluKTsKLSNlbHNlCi0gICAgcmV0dXJuIGluOwotI2VuZGlmCi19Ci0KLQogc3RhdGljIGludAogZm9yZTIwMGVfZmV0Y2hfc3RhdHMoc3RydWN0IGZvcmUyMDBlKiBmb3JlMjAwZSwgc3RydWN0IHNvbmV0X3N0YXRzIF9fdXNlciAqYXJnKQogewpAQCAtMjAyMSwxOSArMTk5MSwxOSBAQAogICAgIGlmIChmb3JlMjAwZV9nZXRzdGF0cyhmb3JlMjAwZSkgPCAwKQogCXJldHVybiAtRUlPOwogCi0gICAgdG1wLnNlY3Rpb25fYmlwID0gZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPm9jMy5zZWN0aW9uX2JpcDhfZXJyb3JzKTsKLSAgICB0bXAubGluZV9iaXAgICAgPSBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+b2MzLmxpbmVfYmlwMjRfZXJyb3JzKTsKLSAgICB0bXAucGF0aF9iaXAgICAgPSBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnBhdGhfYmlwOF9lcnJvcnMpOwotICAgIHRtcC5saW5lX2ZlYmUgICA9IGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5vYzMubGluZV9mZWJlX2Vycm9ycyk7Ci0gICAgdG1wLnBhdGhfZmViZSAgID0gZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPm9jMy5wYXRoX2ZlYmVfZXJyb3JzKTsKLSAgICB0bXAuY29ycl9oY3MgICAgPSBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+b2MzLmNvcnJfaGNzX2Vycm9ycyk7Ci0gICAgdG1wLnVuY29ycl9oY3MgID0gZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPm9jMy51Y29ycl9oY3NfZXJyb3JzKTsKLSAgICB0bXAudHhfY2VsbHMgICAgPSBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc190cmFuc21pdHRlZCkgICsKLQkgICAgICAgICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc190cmFuc21pdHRlZCkgKwotCSAgICAgICAgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY2VsbHNfdHJhbnNtaXR0ZWQpOwotICAgIHRtcC5yeF9jZWxscyAgICA9IGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5hYWwwLmNlbGxzX3JlY2VpdmVkKSAgICAgKwotCSAgICAgICAgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3JlY2VpdmVkKSAgICArCi0JICAgICAgICAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc19yZWNlaXZlZCk7CisgICAgdG1wLnNlY3Rpb25fYmlwID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMuc2VjdGlvbl9iaXA4X2Vycm9ycyk7CisgICAgdG1wLmxpbmVfYmlwICAgID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMubGluZV9iaXAyNF9lcnJvcnMpOworICAgIHRtcC5wYXRoX2JpcCAgICA9IGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnBhdGhfYmlwOF9lcnJvcnMpOworICAgIHRtcC5saW5lX2ZlYmUgICA9IGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLmxpbmVfZmViZV9lcnJvcnMpOworICAgIHRtcC5wYXRoX2ZlYmUgICA9IGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnBhdGhfZmViZV9lcnJvcnMpOworICAgIHRtcC5jb3JyX2hjcyAgICA9IGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLmNvcnJfaGNzX2Vycm9ycyk7CisgICAgdG1wLnVuY29ycl9oY3MgID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMudWNvcnJfaGNzX2Vycm9ycyk7CisgICAgdG1wLnR4X2NlbGxzICAgID0gY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwwLmNlbGxzX3RyYW5zbWl0dGVkKSAgKworCSAgICAgICAgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc190cmFuc21pdHRlZCkgKworCSAgICAgICAgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNlbGxzX3RyYW5zbWl0dGVkKTsKKyAgICB0bXAucnhfY2VsbHMgICAgPSBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDAuY2VsbHNfcmVjZWl2ZWQpICAgICArCisJICAgICAgICAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3JlY2VpdmVkKSAgICArCisJICAgICAgICAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY2VsbHNfcmVjZWl2ZWQpOwogCiAgICAgaWYgKGFyZykKIAlyZXR1cm4gY29weV90b191c2VyKGFyZywgJnRtcCwgc2l6ZW9mKHN0cnVjdCBzb25ldF9zdGF0cykpID8gLUVGQVVMVCA6IDA7CQpAQCAtMjE0Niw3ICsyMTE2LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBmb3JlMjAwZV9nZXRfZXNpKHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUpCiB7Ci0gICAgc3RydWN0IHByb21fZGF0YSogcHJvbSA9IGZvcmUyMDBlX2ttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9tX2RhdGEpLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisgICAgc3RydWN0IHByb21fZGF0YSogcHJvbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9tX2RhdGEpLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAgICAgaW50IG9rLCBpOwogCiAgICAgaWYgKCFwcm9tKQpAQCAtMjE1NCw3ICsyMTI0LDcgQEAKIAogICAgIG9rID0gZm9yZTIwMGUtPmJ1cy0+cHJvbV9yZWFkKGZvcmUyMDBlLCBwcm9tKTsKICAgICBpZiAob2sgPCAwKSB7Ci0JZm9yZTIwMGVfa2ZyZWUocHJvbSk7CisJa2ZyZWUocHJvbSk7CiAJcmV0dXJuIC1FQlVTWTsKICAgICB9CiAJCkBAIC0yMTY5LDcgKzIxMzksNyBAQAogCWZvcmUyMDBlLT5lc2lbIGkgXSA9IGZvcmUyMDBlLT5hdG1fZGV2LT5lc2lbIGkgXSA9IHByb20tPm1hY19hZGRyWyBpICsgMiBdOwogICAgIH0KICAgICAKLSAgICBmb3JlMjAwZV9rZnJlZShwcm9tKTsKKyAgICBrZnJlZShwcm9tKTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtMjE5NCw3ICsyMTY0LDcgQEAKIAkgICAgRFBSSU5USygyLCAicnggYnVmZmVycyAlZCAvICVkIGFyZSBiZWluZyBhbGxvY2F0ZWRcbiIsIHNjaGVtZSwgbWFnbik7CiAKIAkgICAgLyogYWxsb2NhdGUgdGhlIGFycmF5IG9mIHJlY2VpdmUgYnVmZmVycyAqLwotCSAgICBidWZmZXIgPSBic3EtPmJ1ZmZlciA9IGZvcmUyMDBlX2ttYWxsb2MobmJyICogc2l6ZW9mKHN0cnVjdCBidWZmZXIpLCBHRlBfS0VSTkVMKTsKKwkgICAgYnVmZmVyID0gYnNxLT5idWZmZXIgPSBremFsbG9jKG5iciAqIHNpemVvZihzdHJ1Y3QgYnVmZmVyKSwgR0ZQX0tFUk5FTCk7CiAKIAkgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIyMTcsNyArMjE4Nyw3IEBACiAJCSAgICAKIAkJICAgIHdoaWxlIChpID4gMCkKIAkJCWZvcmUyMDBlX2NodW5rX2ZyZWUoZm9yZTIwMGUsICZidWZmZXJbIC0taSBdLmRhdGEpOwotCQkgICAgZm9yZTIwMGVfa2ZyZWUoYnVmZmVyKTsKKwkJICAgIGtmcmVlKGJ1ZmZlcik7CiAJCSAgICAKIAkJICAgIHJldHVybiAtRU5PTUVNOwogCQl9CkBAIC0yNzM2LDcgKzI3MDYsNyBAQAogCWdvdG8gb3V0OwogICAgIH0KICAgICAKLSAgICBmb3JlMjAwZSA9IGZvcmUyMDBlX2ttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmb3JlMjAwZSksIEdGUF9LRVJORUwpOworICAgIGZvcmUyMDBlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZvcmUyMDBlKSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKGZvcmUyMDBlID09IE5VTEwpIHsKIAllcnIgPSAtRU5PTUVNOwogCWdvdG8gb3V0X2Rpc2FibGU7CkBAIC0yOTk5LDggKzI5NjksOCBAQAogCQkgICAgICAgIiAgNGI1YjpcbiIKIAkJICAgICAgICIgICAgIGNyY19oZWFkZXJfZXJyb3JzOlx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICBmcmFtaW5nX2Vycm9yczpcdFx0JTEwdVxuIiwKLQkJICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5waHkuY3JjX2hlYWRlcl9lcnJvcnMpLAotCQkgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPnBoeS5mcmFtaW5nX2Vycm9ycykpOworCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5waHkuY3JjX2hlYWRlcl9lcnJvcnMpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5waHkuZnJhbWluZ19lcnJvcnMpKTsKICAgICAKICAgICBpZiAoIWxlZnQtLSkKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCAiXG4iCkBAIC0zMDEyLDEzICsyOTgyLDEzIEBACiAJCSAgICAgICAiICAgICBwYXRoX2ZlYmVfZXJyb3JzOlx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICBjb3JyX2hjc19lcnJvcnM6XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIHVjb3JyX2hjc19lcnJvcnM6XHRcdCUxMHVcbiIsCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnNlY3Rpb25fYmlwOF9lcnJvcnMpLAotCQkgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPm9jMy5wYXRoX2JpcDhfZXJyb3JzKSwKLQkJICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5vYzMubGluZV9iaXAyNF9lcnJvcnMpLAotCQkgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPm9jMy5saW5lX2ZlYmVfZXJyb3JzKSwKLQkJICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5vYzMucGF0aF9mZWJlX2Vycm9ycyksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+b2MzLmNvcnJfaGNzX2Vycm9ycyksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnVjb3JyX2hjc19lcnJvcnMpKTsKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnNlY3Rpb25fYmlwOF9lcnJvcnMpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMucGF0aF9iaXA4X2Vycm9ycyksCisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPm9jMy5saW5lX2JpcDI0X2Vycm9ycyksCisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPm9jMy5saW5lX2ZlYmVfZXJyb3JzKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnBhdGhfZmViZV9lcnJvcnMpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5vYzMuY29ycl9oY3NfZXJyb3JzKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+b2MzLnVjb3JyX2hjc19lcnJvcnMpKTsKIAogICAgIGlmICghbGVmdC0tKQogCXJldHVybiBzcHJpbnRmKHBhZ2UsIlxuIgpAQCAtMzAyOSwxMiArMjk5OSwxMiBAQAogCQkgICAgICAgIiAgICAgdnBpIG5vIGNvbm46XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIHZjaSBvdXQgb2YgcmFuZ2U6XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIHZjaSBubyBjb25uOlx0XHQlMTB1XG4iLAotCQkgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPmF0bS5jZWxsc190cmFuc21pdHRlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YXRtLmNlbGxzX3JlY2VpdmVkKSwKLQkJICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5hdG0udnBpX2JhZF9yYW5nZSksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YXRtLnZwaV9ub19jb25uKSwKLQkJICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5hdG0udmNpX2JhZF9yYW5nZSksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YXRtLnZjaV9ub19jb25uKSk7CisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF0bS5jZWxsc190cmFuc21pdHRlZCksCisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF0bS5jZWxsc19yZWNlaXZlZCksCisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF0bS52cGlfYmFkX3JhbmdlKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YXRtLnZwaV9ub19jb25uKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YXRtLnZjaV9iYWRfcmFuZ2UpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hdG0udmNpX25vX2Nvbm4pKTsKICAgICAKICAgICBpZiAoIWxlZnQtLSkKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCJcbiIKQEAgLTMwNDIsOSArMzAxMiw5IEBACiAJCSAgICAgICAiICAgICBUWDpcdFx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICBSWDpcdFx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICBkcm9wcGVkOlx0XHRcdCUxMHVcbiIsCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc190cmFuc21pdHRlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc19yZWNlaXZlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc19kcm9wcGVkKSk7CisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDAuY2VsbHNfdHJhbnNtaXR0ZWQpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwwLmNlbGxzX3JlY2VpdmVkKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMC5jZWxsc19kcm9wcGVkKSk7CiAgICAgCiAgICAgaWYgKCFsZWZ0LS0pCiAJcmV0dXJuIHNwcmludGYocGFnZSwiXG4iCkBAIC0zMDYwLDE1ICszMDMwLDE1IEBACiAJCSAgICAgICAiICAgICAgIFJYOlx0XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgICAgZHJvcHBlZDpcdFx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICAgIHByb3RvY29sIGVycm9yczpcdFx0JTEwdVxuIiwKLQkJICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc190cmFuc21pdHRlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfcmVjZWl2ZWQpLAotCQkgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX2Ryb3BwZWQpLAotCQkgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX2NyY19lcnJvcnMpLAotCQkgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3Byb3RvY29sX2Vycm9ycyksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY3NwZHVzX3RyYW5zbWl0dGVkKSwKLQkJICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jc3BkdXNfcmVjZWl2ZWQpLAotCQkgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNzcGR1c19kcm9wcGVkKSwKLQkJICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jc3BkdXNfcHJvdG9jb2xfZXJyb3JzKSk7CisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3RyYW5zbWl0dGVkKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfcmVjZWl2ZWQpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWwzNC5jZWxsc19kcm9wcGVkKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY2VsbHNfY3JjX2Vycm9ycyksCisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNlbGxzX3Byb3RvY29sX2Vycm9ycyksCisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNzcGR1c190cmFuc21pdHRlZCksCisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNzcGR1c19yZWNlaXZlZCksCisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDM0LmNzcGR1c19kcm9wcGVkKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsMzQuY3NwZHVzX3Byb3RvY29sX2Vycm9ycykpOwogICAgIAogICAgIGlmICghbGVmdC0tKQogCXJldHVybiBzcHJpbnRmKHBhZ2UsIlxuIgpAQCAtMzA4NCwxNSArMzA1NCwxNSBAQAogCQkgICAgICAgIiAgICAgICBkcm9wcGVkOlx0XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgICAgQ1JDIGVycm9yczpcdFx0JTEwdVxuIgogCQkgICAgICAgIiAgICAgICBwcm90b2NvbCBlcnJvcnM6XHRcdCUxMHVcbiIsCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc190cmFuc21pdHRlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc19yZWNlaXZlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc19kcm9wcGVkKSwKLQkJICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNvbmdlc3Rpb25fZXhwZXJpZW5jZWQpLAotCQkgICAgICAgZm9yZTIwMGVfc3dhcChmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY3NwZHVzX3RyYW5zbWl0dGVkKSwKLQkJICAgICAgIGZvcmUyMDBlX3N3YXAoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c19yZWNlaXZlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfZHJvcHBlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfY3JjX2Vycm9ycyksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfcHJvdG9jb2xfZXJyb3JzKSk7CisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY2VsbHNfdHJhbnNtaXR0ZWQpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNlbGxzX3JlY2VpdmVkKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jZWxsc19kcm9wcGVkKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jb25nZXN0aW9uX2V4cGVyaWVuY2VkKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfdHJhbnNtaXR0ZWQpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c19yZWNlaXZlZCksCisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmFhbDUuY3NwZHVzX2Ryb3BwZWQpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hYWw1LmNzcGR1c19jcmNfZXJyb3JzKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YWFsNS5jc3BkdXNfcHJvdG9jb2xfZXJyb3JzKSk7CiAgICAgCiAgICAgaWYgKCFsZWZ0LS0pCiAJcmV0dXJuIHNwcmludGYocGFnZSwiXG4iCkBAIC0zMTAzLDExICszMDczLDExIEBACiAJCSAgICAgICAiICAgICBsYXJnZSBiMjpcdFx0XHQlMTB1XG4iCiAJCSAgICAgICAiICAgICBSWCBQRFVzOlx0XHRcdCUxMHVcbiIKIAkJICAgICAgICIgICAgIFRYIFBEVXM6XHRcdFx0JTEwbHVcbiIsCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YXV4LnNtYWxsX2IxX2ZhaWxlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YXV4LmxhcmdlX2IxX2ZhaWxlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YXV4LnNtYWxsX2IyX2ZhaWxlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YXV4LmxhcmdlX2IyX2ZhaWxlZCksCi0JCSAgICAgICBmb3JlMjAwZV9zd2FwKGZvcmUyMDBlLT5zdGF0cy0+YXV4LnJwZF9hbGxvY19mYWlsZWQpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hdXguc21hbGxfYjFfZmFpbGVkKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YXV4LmxhcmdlX2IxX2ZhaWxlZCksCisJCSAgICAgICBjcHVfdG9fYmUzMihmb3JlMjAwZS0+c3RhdHMtPmF1eC5zbWFsbF9iMl9mYWlsZWQpLAorCQkgICAgICAgY3B1X3RvX2JlMzIoZm9yZTIwMGUtPnN0YXRzLT5hdXgubGFyZ2VfYjJfZmFpbGVkKSwKKwkJICAgICAgIGNwdV90b19iZTMyKGZvcmUyMDBlLT5zdGF0cy0+YXV4LnJwZF9hbGxvY19mYWlsZWQpLAogCQkgICAgICAgZm9yZTIwMGUtPnR4X3NhdCk7CiAgICAgCiAgICAgaWYgKCFsZWZ0LS0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9oZS5jIGIvZHJpdmVycy9hdG0vaGUuYwppbmRleCA3ZDliNGU1Li5kYjMzZjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9oZS5jCisrKyBiL2RyaXZlcnMvYXRtL2hlLmMKQEAgLTIzNTEsNyArMjM1MSw3IEBACiAKIAljaWQgPSBoZV9ta2NpZChoZV9kZXYsIHZwaSwgdmNpKTsKIAotCWhlX3ZjYyA9IChzdHJ1Y3QgaGVfdmNjICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoZV92Y2MpLCBHRlBfQVRPTUlDKTsKKwloZV92Y2MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGVfdmNjKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGhlX3ZjYyA9PSBOVUxMKSB7CiAJCWhwcmludGsoInVuYWJsZSB0byBhbGxvY2F0ZSBoZV92Y2MgZHVyaW5nIG9wZW5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2hvcml6b24uYyBiL2RyaXZlcnMvYXRtL2hvcml6b24uYwppbmRleCA0ZGMxMDEwLi5mOTY0NDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKKysrIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCkBAIC0xODQ1LDcgKzE4NDUsNyBAQAogCiAvKioqKioqKioqKiBpbml0aWFsaXNlIGEgY2FyZCAqKioqKioqKioqLwogCi1zdGF0aWMgaW50IF9faW5pdCBocnpfaW5pdCAoaHJ6X2RldiAqIGRldikgeworc3RhdGljIGludCBfX2RldmluaXQgaHJ6X2luaXQgKGhyel9kZXYgKiBkZXYpIHsKICAgaW50IG9uZWZpdmVmaXZlOwogICAKICAgdTE2IGNoYW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9sYW5haS5jIGIvZHJpdmVycy9hdG0vbGFuYWkuYwppbmRleCAyNjc4MjU1Li4wOWY0NzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9sYW5haS5jCisrKyBiL2RyaXZlcnMvYXRtL2xhbmFpLmMKQEAgLTI2MDIsNyArMjYwMiw3IEBACiAJc3RydWN0IGF0bV9kZXYgKmF0bWRldjsKIAlpbnQgcmVzdWx0OwogCi0JbGFuYWkgPSAoc3RydWN0IGxhbmFpX2RldiAqKSBrbWFsbG9jKHNpemVvZigqbGFuYWkpLCBHRlBfS0VSTkVMKTsKKwlsYW5haSA9IGttYWxsb2Moc2l6ZW9mKCpsYW5haSksIEdGUF9LRVJORUwpOwogCWlmIChsYW5haSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiBERVZfTEFCRUwKIAkJICAgICAgICI6IGNvdWxkbid0IGFsbG9jYXRlIGRldl9kYXRhIHN0cnVjdHVyZSFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vbmljc3Rhci5jIGIvZHJpdmVycy9hdG0vbmljc3Rhci5jCmluZGV4IGJkMDkwNDUuLmFhYjliMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL25pY3N0YXIuYworKysgYi9kcml2ZXJzL2F0bS9uaWNzdGFyLmMKQEAgLTk5Nyw3ICs5OTcsNyBAQAogICAgaWYgKHNpemUgIT0gVkJSX1NDUVNJWkUgJiYgc2l6ZSAhPSBDQlJfU0NRU0laRSkKICAgICAgIHJldHVybiBOVUxMOwogCi0gICBzY3EgPSAoc2NxX2luZm8gKikga21hbGxvYyhzaXplb2Yoc2NxX2luZm8pLCBHRlBfS0VSTkVMKTsKKyAgIHNjcSA9IGttYWxsb2Moc2l6ZW9mKHNjcV9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAgICBpZiAoc2NxID09IE5VTEwpCiAgICAgICByZXR1cm4gTlVMTDsKICAgIHNjcS0+b3JnID0ga21hbGxvYygyICogc2l6ZSwgR0ZQX0tFUk5FTCk7CkBAIC0xMDA2LDcgKzEwMDYsNyBAQAogICAgICAga2ZyZWUoc2NxKTsKICAgICAgIHJldHVybiBOVUxMOwogICAgfQotICAgc2NxLT5za2IgPSAoc3RydWN0IHNrX2J1ZmYgKiopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBza19idWZmICopICoKKyAgIHNjcS0+c2tiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemUgLyBOU19TQ1FFX1NJWkUpLCBHRlBfS0VSTkVMKTsKICAgIGlmIChzY3EtPnNrYiA9PSBOVUxMKQogICAgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vemF0bS5jIGIvZHJpdmVycy9hdG0vemF0bS5jCmluZGV4IDdkZjBmMzcuLjc1NmQ0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3phdG0uYworKysgYi9kcml2ZXJzL2F0bS96YXRtLmMKQEAgLTk5Niw3ICs5OTYsNyBAQAogCiAJRFBSSU5USygic3RhcnRfdHhcbiIpOwogCXphdG1fZGV2ID0gWkFUTV9ERVYoZGV2KTsKLQl6YXRtX2Rldi0+dHhfbWFwID0gKHN0cnVjdCBhdG1fdmNjICoqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXRtX3ZjYyAqKSoKKwl6YXRtX2Rldi0+dHhfbWFwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF0bV92Y2MgKikqCiAJICAgIHphdG1fZGV2LT5jaGFucyxHRlBfS0VSTkVMKTsKIAlpZiAoIXphdG1fZGV2LT50eF9tYXApIHJldHVybiAtRU5PTUVNOwogCXphdG1fZGV2LT50eF9idyA9IEFUTV9PQzNfUENSOwpAQCAtMTU5MSw3ICsxNTkxLDcgQEAKIAlzdHJ1Y3QgemF0bV9kZXYgKnphdG1fZGV2OwogCWludCByZXQgPSAtRU5PTUVNOwogCi0JemF0bV9kZXYgPSAoc3RydWN0IHphdG1fZGV2ICopIGttYWxsb2Moc2l6ZW9mKCp6YXRtX2RldiksIEdGUF9LRVJORUwpOworCXphdG1fZGV2ID0ga21hbGxvYyhzaXplb2YoKnphdG1fZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF6YXRtX2RldikgewogCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IG1lbW9yeSBzaG9ydGFnZVxuIiwgREVWX0xBQkVMKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCmluZGV4IGYwOTg4ODEuLjhiZjJjYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCkBAIC0xNjMsNiArMTYzLDggQEAKIHZvaWQgY2xhc3NfdW5yZWdpc3RlcihzdHJ1Y3QgY2xhc3MgKiBjbHMpCiB7CiAJcHJfZGVidWcoImRldmljZSBjbGFzcyAnJXMnOiB1bnJlZ2lzdGVyaW5nXG4iLCBjbHMtPm5hbWUpOworCWlmIChjbHMtPnZpcnR1YWxfZGlyKQorCQlrb2JqZWN0X3VucmVnaXN0ZXIoY2xzLT52aXJ0dWFsX2Rpcik7CiAJcmVtb3ZlX2NsYXNzX2F0dHJzKGNscyk7CiAJc3Vic3lzdGVtX3VucmVnaXN0ZXIoJmNscy0+c3Vic3lzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kbWFwb29sLmMgYi9kcml2ZXJzL2Jhc2UvZG1hcG9vbC5jCmluZGV4IGRiZTA3MzUuLmY5NWQ1MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kbWFwb29sLmMKKysrIGIvZHJpdmVycy9iYXNlL2RtYXBvb2wuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJbWFwc2l6ZSA9IChtYXBzaXplICsgQklUU19QRVJfTE9ORyAtIDEpIC8gQklUU19QRVJfTE9ORzsKIAltYXBzaXplICo9IHNpemVvZiAobG9uZyk7CiAKLQlwYWdlID0gKHN0cnVjdCBkbWFfcGFnZSAqKSBrbWFsbG9jIChtYXBzaXplICsgc2l6ZW9mICpwYWdlLCBtZW1fZmxhZ3MpOworCXBhZ2UgPSBrbWFsbG9jKG1hcHNpemUgKyBzaXplb2YgKnBhZ2UsIG1lbV9mbGFncyk7CiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gTlVMTDsKIAlwYWdlLT52YWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCAocG9vbC0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCA0YmFkMjg3Li42NDU1OGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtMTI3LDYgKzEyNyw3IEBACiAvKioKICAqIGZpcm13YXJlX2xvYWRpbmdfc3RvcmUgLSBzZXQgdmFsdWUgaW4gdGhlICdsb2FkaW5nJyBjb250cm9sIGZpbGUKICAqIEBkZXY6IGRldmljZSBwb2ludGVyCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSBwb2ludGVyCiAgKiBAYnVmOiBidWZmZXIgdG8gc2NhbiBmb3IgbG9hZGluZyBjb250cm9sIHZhbHVlCiAgKiBAY291bnQ6IG51bWJlciBvZiBieXRlcyBpbiBAYnVmCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCBkMWRmNGEwLi5mOWM5MDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAgKglwb2ludGVyLiAgVGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIHBsYXRmb3JtIGRhdGEgd2lsbCBiZSBmcmVlZAogICoJd2hlbiB0aGUgcGxhdGZvcm0gZGV2aWNlIGlzIHJlbGVhc2VkLgogICovCi1pbnQgcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQoraW50IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKIAl2b2lkICpkOwogCkBAIC00NzMsNyArNDczLDcgQEAKICAqIFJldHVybnMgemVybyBpZiB0aGUgZHJpdmVyIHJlZ2lzdGVyZWQgYW5kIGJvdW5kIHRvIGEgZGV2aWNlLCBlbHNlIHJldHVybnMKICAqIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBhbmQgd2l0aCB0aGUgZHJpdmVyIG5vdCByZWdpc3RlcmVkLgogICovCi1pbnQgcGxhdGZvcm1fZHJpdmVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiwKK2ludCBfX2luaXRfb3JfbW9kdWxlIHBsYXRmb3JtX2RyaXZlcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYsCiAJCWludCAoKnByb2JlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopKQogewogCWludCByZXR2YWwsIGNvZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0tjb25maWcgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKaW5kZXggODUwNzI0NC4uNThjMWRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmxvY2svS2NvbmZpZwpAQCAtMjgsMTMgKzI4LDYgQEAKIAl0cmlzdGF0ZSAiQXRhcmkgZmxvcHB5IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBVEFSSQogCi1jb25maWcgQkxLX0RFVl9TV0lNX0lPUAotCWJvb2wgIk1hY2ludG9zaCBJSWZ4L1F1YWRyYSA5MDAvUXVhZHJhIDk1MCBmbG9wcHkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIE1BQyAmJiBFWFBFUklNRU5UQUwgJiYgQlJPS0VOCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBTV0lNIChTdXBlciBXb3ogSW50ZWdyYXRlZCBNYWNoaW5lKSBJT1AKLQkgIGZsb3BweSBjb250cm9sbGVyIG9uIHRoZSBNYWNpbnRvc2ggSUlmeCBhbmQgUXVhZHJhIDkwMC85NTAuCi0KIGNvbmZpZyBNQUNfRkxPUFBZCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFBvd2VyTWFjIGZsb3BweSIKIAlkZXBlbmRzIG9uIFBQQ19QTUFDICYmICFQUENfUE1BQzY0CkBAIC00MzEsMTQgKzQyNCwxOCBAQAogCXRyaXN0YXRlICJQYWNrZXQgd3JpdGluZyBvbiBDRC9EVkQgbWVkaWEiCiAJZGVwZW5kcyBvbiAhVU1MCiAJaGVscAotCSAgSWYgeW91IGhhdmUgYSBDRFJPTSBkcml2ZSB0aGF0IHN1cHBvcnRzIHBhY2tldCB3cml0aW5nLCBzYXkgWSB0bwotCSAgaW5jbHVkZSBwcmVsaW1pbmFyeSBzdXBwb3J0LiBJdCBzaG91bGQgd29yayB3aXRoIGFueSBNTUMvTXQgRnVqaQotCSAgY29tcGxpYW50IEFUQVBJIG9yIFNDU0kgZHJpdmUsIHdoaWNoIGlzIGp1c3QgYWJvdXQgYW55IG5ld2VyIENECi0JICB3cml0ZXIuCisJICBJZiB5b3UgaGF2ZSBhIENEUk9NL0RWRCBkcml2ZSB0aGF0IHN1cHBvcnRzIHBhY2tldCB3cml0aW5nLCBzYXkKKwkgIFkgdG8gaW5jbHVkZSBzdXBwb3J0LiBJdCBzaG91bGQgd29yayB3aXRoIGFueSBNTUMvTXQgRnVqaQorCSAgY29tcGxpYW50IEFUQVBJIG9yIFNDU0kgZHJpdmUsIHdoaWNoIGlzIGp1c3QgYWJvdXQgYW55IG5ld2VyCisJICBEVkQvQ0Qgd3JpdGVyLgogCi0JICBDdXJyZW50bHkgb25seSB3cml0aW5nIHRvIENELVJXLCBEVkQtUlcgYW5kIERWRCtSVyBkaXNjcyBpcyBwb3NzaWJsZS4KKwkgIEN1cnJlbnRseSBvbmx5IHdyaXRpbmcgdG8gQ0QtUlcsIERWRC1SVywgRFZEK1JXIGFuZCBEVkRSQU0gZGlzY3MKKwkgIGlzIHBvc3NpYmxlLgogCSAgRFZELVJXIGRpc2tzIG11c3QgYmUgaW4gcmVzdHJpY3RlZCBvdmVyd3JpdGUgbW9kZS4KIAorCSAgU2VlIHRoZSBmaWxlIDxmaWxlOkRvY3VtZW50YXRpb24vY2Ryb20vcGFja2V0LXdyaXRpbmcudHh0PgorCSAgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIHVzZSBvZiB0aGlzIGRyaXZlci4KKwogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGt0Y2R2ZC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9NYWtlZmlsZSBiL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKaW5kZXggNDEwZjI1OS4uZGQ4OGUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCkBAIC05LDcgKzksNiBAQAogb2JqLSQoQ09ORklHX0JMS19ERVZfRkQpCSs9IGZsb3BweS5vCiBvYmotJChDT05GSUdfQU1JR0FfRkxPUFBZKQkrPSBhbWlmbG9wLm8KIG9iai0kKENPTkZJR19BVEFSSV9GTE9QUFkpCSs9IGF0YWZsb3Aubwotb2JqLSQoQ09ORklHX0JMS19ERVZfU1dJTV9JT1ApCSs9IHN3aW1faW9wLm8KIG9iai0kKENPTkZJR19BVEFSSV9BQ1NJKQkrPSBhY3NpLm8KIG9iai0kKENPTkZJR19BVEFSSV9TTE0pCQkrPSBhY3NpX3NsbS5vCiBvYmotJChDT05GSUdfQU1JR0FfWjJSQU0pCSs9IHoycmFtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYWNzaV9zbG0uYyBiL2RyaXZlcnMvYmxvY2svYWNzaV9zbG0uYwppbmRleCA4ZTQxYzg3Li5lMDRiZTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Fjc2lfc2xtLmMKKysrIGIvZHJpdmVycy9ibG9jay9hY3NpX3NsbS5jCkBAIC0zNjMsNyArMzYzLDcgQEAKIAkJCQkJCSBsb2ZmX3QgKnBwb3MgKQogCiB7Ci0Jc3RydWN0IGlub2RlICpub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICpub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAl1bnNpZ25lZCBsb25nIHBhZ2U7CiAJaW50IGxlbmd0aDsKIAlpbnQgZW5kOwpAQCAtNjE4LDcgKzYxOCw3IEBACiAJCQkJCQkgIGxvZmZfdCAqcHBvcyApCiAKIHsKLQlzdHJ1Y3QgaW5vZGUgKm5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKm5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludAkJZGV2aWNlID0gaW1pbm9yKG5vZGUpOwogCWludAkJbiwgZmlsbGVkLCB3LCBoOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCmluZGV4IDk3ZjdmNTMuLmJiMDIyZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCkBAIC0zMCw4ICszMCw2IEBACiAJCXNrYi0+bmgucmF3ID0gc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwogCQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BT0UpOwogCQlza2ItPnByaW9yaXR5ID0gMDsKLQkJc2tiX3B1dChza2IsIGxlbik7Ci0JCW1lbXNldChza2ItPmhlYWQsIDAsIGxlbik7CiAJCXNrYi0+bmV4dCA9IHNrYi0+cHJldiA9IE5VTEw7CiAKIAkJLyogdGVsbCB0aGUgbmV0d29yayBsYXllciBub3QgdG8gcGVyZm9ybSBJUCBjaGVja3N1bXMKQEAgLTEyMiw4ICsxMjAsOCBAQAogCXNrYiA9IGYtPnNrYjsKIAloID0gKHN0cnVjdCBhb2VfaGRyICopIHNrYi0+bWFjLnJhdzsKIAlhaCA9IChzdHJ1Y3QgYW9lX2F0YWhkciAqKSAoaCsxKTsKLQlza2ItPmxlbiA9IHNpemVvZiAqaCArIHNpemVvZiAqYWg7Ci0JbWVtc2V0KGgsIDAsIEVUSF9aTEVOKTsKKwlza2JfcHV0KHNrYiwgc2l6ZW9mICpoICsgc2l6ZW9mICphaCk7CisJbWVtc2V0KGgsIDAsIHNrYi0+bGVuKTsKIAlmLT50YWcgPSBhb2VoZHJfYXRhaW5pdChkLCBoKTsKIAlmLT53YWl0ZWQgPSAwOwogCWYtPmJ1ZiA9IGJ1ZjsKQEAgLTE0OSw3ICsxNDcsNiBAQAogCQlza2ItPmxlbiArPSBiY250OwogCQlza2ItPmRhdGFfbGVuID0gYmNudDsKIAl9IGVsc2UgewotCQlza2ItPmxlbiA9IEVUSF9aTEVOOwogCQl3cml0ZWJpdCA9IDA7CiAJfQogCkBAIC0yMDYsNiArMjAzLDcgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gImFvZTogc2tiIGFsbG9jIGZhaWx1cmVcbiIpOwogCQkJY29udGludWU7CiAJCX0KKwkJc2tiX3B1dChza2IsIHNpemVvZiAqaCArIHNpemVvZiAqY2gpOwogCQlza2ItPmRldiA9IGlmcDsKIAkJaWYgKHNsX3RhaWwgPT0gTlVMTCkKIAkJCXNsX3RhaWwgPSBza2I7CkBAIC0yNDMsNiArMjQxLDcgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXRvbWljX3JlYWQoJnNrYl9zaGluZm8oZi0+c2tiKS0+ZGF0YXJlZikgPT0gMSkgewogCQkJc2tiX3NoaW5mbyhmLT5za2IpLT5ucl9mcmFncyA9IGYtPnNrYi0+ZGF0YV9sZW4gPSAwOworCQkJc2tiX3RyaW0oZi0+c2tiLCAwKTsKIAkJCXJldHVybiBmOwogCQl9CiAJCW4rKzsKQEAgLTY5OCw4ICs2OTcsOCBAQAogCXNrYiA9IGYtPnNrYjsKIAloID0gKHN0cnVjdCBhb2VfaGRyICopIHNrYi0+bWFjLnJhdzsKIAlhaCA9IChzdHJ1Y3QgYW9lX2F0YWhkciAqKSAoaCsxKTsKLQlza2ItPmxlbiA9IEVUSF9aTEVOOwotCW1lbXNldChoLCAwLCBFVEhfWkxFTik7CisJc2tiX3B1dChza2IsIHNpemVvZiAqaCArIHNpemVvZiAqYWgpOworCW1lbXNldChoLCAwLCBza2ItPmxlbik7CiAJZi0+dGFnID0gYW9laGRyX2F0YWluaXQoZCwgaCk7CiAJZi0+d2FpdGVkID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDg5MmUwOTIuLjA1ZGZlMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTIyNSw2ICsyMjUsOCBAQAogCiAjaW5jbHVkZSAiY2Npc3Nfc2NzaS5jIgkJLyogRm9yIFNDU0kgdGFwZSBzdXBwb3J0ICovCiAKKyNkZWZpbmUgUkFJRF9VTktOT1dOIDYKKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKIC8qCkBAIC0yMzIsNyArMjM0LDYgQEAKICAqLwogI2RlZmluZSBFTkdfR0lHIDEwMDAwMDAwMDAKICNkZWZpbmUgRU5HX0dJR19GQUNUT1IgKEVOR19HSUcvNTEyKQotI2RlZmluZSBSQUlEX1VOS05PV04gNgogc3RhdGljIGNvbnN0IGNoYXIgKnJhaWRfbGFiZWxbXSA9IHsgIjAiLCAiNCIsICIxKDErMCkiLCAiNSIsICI1KzEiLCAiQURHIiwKIAkiVU5LTk9XTiIKIH07CkBAIC01MzUsNyArNTM2LDcgQEAKIHsKIAlpbnQgcmV0OwogCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gY2Npc3NfaW9jdGwoZi0+Zl9kZW50cnktPmRfaW5vZGUsIGYsIGNtZCwgYXJnKTsKKwlyZXQgPSBjY2lzc19pb2N0bChmLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmLCBjbWQsIGFyZyk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMDM5LDcgKzEwNDAsNyBAQAogCQkJCXN0YXR1cyA9IC1FTk9NRU07CiAJCQkJZ290byBjbGVhbnVwMTsKIAkJCX0KLQkJCWJ1ZmZfc2l6ZSA9IChpbnQgKilrbWFsbG9jKE1BWFNHRU5UUklFUyAqIHNpemVvZihpbnQpLAorCQkJYnVmZl9zaXplID0ga21hbGxvYyhNQVhTR0VOVFJJRVMgKiBzaXplb2YoaW50KSwKIAkJCQkJCSAgIEdGUF9LRVJORUwpOwogCQkJaWYgKCFidWZmX3NpemUpIHsKIAkJCQlzdGF0dXMgPSAtRU5PTUVNOwpAQCAtMTkwNyw2ICsxOTA4LDcgQEAKIAkJCSAgICAgICAiZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGdlb21ldHJ5XG4iKTsKIAkJCWRydi0+aGVhZHMgPSAyNTU7CiAJCQlkcnYtPnNlY3RvcnMgPSAzMjsJLy8gU2VjdG9ycyBwZXIgdHJhY2sKKwkJCWRydi0+cmFpZF9sZXZlbCA9IFJBSURfVU5LTk9XTjsKIAkJfSBlbHNlIHsKIAkJCWRydi0+aGVhZHMgPSBpbnFfYnVmZi0+ZGF0YV9ieXRlWzZdOwogCQkJZHJ2LT5zZWN0b3JzID0gaW5xX2J1ZmYtPmRhdGFfYnl0ZVs3XTsKQEAgLTI0OTEsNyArMjQ5Myw3IEBACiAJYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsJLy8gSXQgaXMgYSBjb21tYW5kLgogCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKIAljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0KLQkgICAgKHJxX2RhdGFfZGlyKGNyZXEpID09IFJFQUQpID8gaC0+Y2Npc3NfcmVhZCA6IGgtPmNjaXNzX3dyaXRlOworCSAgICAocnFfZGF0YV9kaXIoY3JlcSkgPT0gUkVBRCkgPyBYRkVSX1JFQUQgOiBYRkVSX1dSSVRFOwogCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CS8vIERvbid0IHRpbWUgb3V0CiAJYy0+UmVxdWVzdC5DREJbMF0gPQogCSAgICAocnFfZGF0YV9kaXIoY3JlcSkgPT0gUkVBRCkgPyBoLT5jY2lzc19yZWFkIDogaC0+Y2Npc3Nfd3JpdGU7CkBAIC0yODM3LDcgKzI4MzksNyBAQAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjY2lzczogQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCAiCiAJCSAgICAgICAiYWJvcnRpbmdcbiIpOwotCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2OworCQlyZXR1cm4gZXJyOwogCX0KIAogCXN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOwpAQCAtMjg2NSw3ICsyODY3LDcgQEAKICNpZmRlZiBDQ0lTU19ERUJVRwogCXByaW50aygiYWRkcmVzcyAwID0gJXhcbiIsIGMtPnBhZGRyKTsKICNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwotCWMtPnZhZGRyID0gcmVtYXBfcGNpX21lbShjLT5wYWRkciwgMjAwKTsKKwljLT52YWRkciA9IHJlbWFwX3BjaV9tZW0oYy0+cGFkZHIsIDB4MjUwKTsKIAogCS8qIFdhaXQgZm9yIHRoZSBib2FyZCB0byBiZWNvbWUgcmVhZHkuICAoUENJIGhvdHBsdWcgbmVlZHMgdGhpcy4pCiAJICogV2UgcG9sbCBmb3IgdXAgdG8gMTIwIHNlY3MsIG9uY2UgcGVyIDEwMG1zLiAqLwpAQCAtMzAwNCwxMSArMzAwNiwxMiBAQAogCX0KIAlyZXR1cm4gMDsKIAotICAgICAgZXJyX291dF9mcmVlX3JlczoKK2Vycl9vdXRfZnJlZV9yZXM6CisJLyoKKwkgKiBEZWxpYmVyYXRlbHkgb21pdCBwY2lfZGlzYWJsZV9kZXZpY2UoKTogaXQgZG9lcyBzb21ldGhpbmcgbmFzdHkgdG8KKwkgKiBTbWFydCBBcnJheSBjb250cm9sbGVycyB0aGF0IHBjaV9lbmFibGVfZGV2aWNlIGRvZXMgbm90IHVuZG8KKwkgKi8KIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotCi0gICAgICBlcnJfb3V0X2Rpc2FibGVfcGRldjoKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzM4Miw4ICszMzg1LDExIEBACiAJCWlmIChkcnYtPnF1ZXVlKQogCQkJYmxrX2NsZWFudXBfcXVldWUoZHJ2LT5xdWV1ZSk7CiAJfQorCS8qCisJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCisJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCisJICovCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyZWVfaGJhKGkpOwogCXJldHVybiAtMTsKQEAgLTM0NTIsOCArMzQ1OCwxMSBAQAogI2lmZGVmIENPTkZJR19DSVNTX1NDU0lfVEFQRQogCWtmcmVlKGhiYVtpXS0+c2NzaV9yZWplY3RzLmNvbXBsZXRlKTsKICNlbmRpZgorCS8qCisJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCisJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCisJICovCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyZWVfaGJhKGkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCmluZGV4IGQ1ZjUxOWUuLmI5NGNkMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKQEAgLTE2MjUsNyArMTYyNSw3IEBACiAJCSIgcHJvY2Vzc2luZ1xuIik7CiAJLyogQ29tbWFuZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcsIGJ1dCBpZGFzZW5kIGNvbW1hbmQgbmVlZHMgYSAKIAkJYnVmZmVyICovCi0JaWRfY3Rscl9idWYgPSAoaWRfY3Rscl90ICopa21hbGxvYyhzaXplb2YoaWRfY3Rscl90KSwgR0ZQX0tFUk5FTCk7CisJaWRfY3Rscl9idWYgPSBrbWFsbG9jKHNpemVvZihpZF9jdGxyX3QpLCBHRlBfS0VSTkVMKTsKIAlpZihpZF9jdGxyX2J1Zj09TlVMTCkKIAl7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNwcWFycmF5OiBPdXQgb2YgbWVtb3J5LiAiCkBAIC0xNjYwLDE0ICsxNjYwLDE0IEBACiAKIAlpbmZvX3AtPmxvZ19kcnZfbWFwID0gMDsJCiAJCi0JaWRfbGRyaXZlID0gKGlkX2xvZ19kcnZfdCAqKWttYWxsb2Moc2l6ZW9mKGlkX2xvZ19kcnZfdCksIEdGUF9LRVJORUwpOworCWlkX2xkcml2ZSA9IGttYWxsb2Moc2l6ZW9mKGlkX2xvZ19kcnZfdCksIEdGUF9LRVJORUwpOwogCWlmKGlkX2xkcml2ZSA9PSBOVUxMKQogCXsKIAkJcHJpbnRrKCBLRVJOX0VSUiAiY3BxYXJyYXk6ICBvdXQgb2YgbWVtb3J5LlxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlpZF9jdGxyX2J1ZiA9IChpZF9jdGxyX3QgKilrbWFsbG9jKHNpemVvZihpZF9jdGxyX3QpLCBHRlBfS0VSTkVMKTsKKwlpZF9jdGxyX2J1ZiA9IGttYWxsb2Moc2l6ZW9mKGlkX2N0bHJfdCksIEdGUF9LRVJORUwpOwogCWlmKGlkX2N0bHJfYnVmID09IE5VTEwpCiAJewogCQlrZnJlZShpZF9sZHJpdmUpOwpAQCAtMTY3NSw3ICsxNjc1LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlkX2xzdGF0dXNfYnVmID0gKHNlbnNlX2xvZ19kcnZfc3RhdF90ICopa21hbGxvYyhzaXplb2Yoc2Vuc2VfbG9nX2Rydl9zdGF0X3QpLCBHRlBfS0VSTkVMKTsKKwlpZF9sc3RhdHVzX2J1ZiA9IGttYWxsb2Moc2l6ZW9mKHNlbnNlX2xvZ19kcnZfc3RhdF90KSwgR0ZQX0tFUk5FTCk7CiAJaWYoaWRfbHN0YXR1c19idWYgPT0gTlVMTCkKIAl7CiAJCWtmcmVlKGlkX2N0bHJfYnVmKTsKQEAgLTE2ODQsNyArMTY4NCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlzZW5zZV9jb25maWdfYnVmID0gKGNvbmZpZ190ICopa21hbGxvYyhzaXplb2YoY29uZmlnX3QpLCBHRlBfS0VSTkVMKTsKKwlzZW5zZV9jb25maWdfYnVmID0ga21hbGxvYyhzaXplb2YoY29uZmlnX3QpLCBHRlBfS0VSTkVMKTsKIAlpZihzZW5zZV9jb25maWdfYnVmID09IE5VTEwpCiAJewogCQlrZnJlZShpZF9sc3RhdHVzX2J1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IGJlYWI2ZDIuLjZiNWI2NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogCiAJaWYgKGxvLT5sb19zdGF0ZSAhPSBMb19ib3VuZCkKIAkJcmV0dXJuIC1FTlhJTzsKLQllcnJvciA9IHZmc19nZXRhdHRyKGZpbGUtPmZfdmZzbW50LCBmaWxlLT5mX2RlbnRyeSwgJnN0YXQpOworCWVycm9yID0gdmZzX2dldGF0dHIoZmlsZS0+Zl9wYXRoLm1udCwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwgJnN0YXQpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKQEAgLTEyODcsNyArMTI4Nyw3IEBACiAKIHN0YXRpYyBsb25nIGxvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggN2JmMmNmYi4uMDkwNzk2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC01MzcsNyArNTM3LDcgQEAKIAkJZXJyb3IgPSAtRUlOVkFMOwogCQlmaWxlID0gZmdldChhcmcpOwogCQlpZiAoZmlsZSkgewotCQkJaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwkJCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJCWlmIChTX0lTU09DSyhpbm9kZS0+aV9tb2RlKSkgewogCQkJCWxvLT5maWxlID0gZmlsZTsKIAkJCQlsby0+c29jayA9IFNPQ0tFVF9JKGlub2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jIGIvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKaW5kZXggZTQ1ZWFhMi4uNjI0NjIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAwIEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBQZXRlciBPc3Rlcmx1bmQgPHBldGVybzJAdGVsaWEuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBNYWllciA8YmFsYWdpQGp1c3RtYWlsLmRlPgogICoKICAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KQEAgLTU5LDYgKzYwLDggQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9pb2N0bC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTgzLDkgKzg2LDQyNCBAQAogc3RhdGljIHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGt0X2RldnNbTUFYX1dSSVRFUlNdOwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGt0X3Byb2M7CiBzdGF0aWMgaW50IHBrdGRldl9tYWpvcjsKK3N0YXRpYyBpbnQgd3JpdGVfY29uZ2VzdGlvbl9vbiAgPSBQS1RfV1JJVEVfQ09OR0VTVElPTl9PTjsKK3N0YXRpYyBpbnQgd3JpdGVfY29uZ2VzdGlvbl9vZmYgPSBQS1RfV1JJVEVfQ09OR0VTVElPTl9PRkY7CiBzdGF0aWMgc3RydWN0IG11dGV4IGN0bF9tdXRleDsJLyogU2VyaWFsaXplIG9wZW4vY2xvc2Uvc2V0dXAvdGVhcmRvd24gKi8KIHN0YXRpYyBtZW1wb29sX3QgKnBzZF9wb29sOwogCitzdGF0aWMgc3RydWN0IGNsYXNzCSpjbGFzc19wa3RjZHZkID0gTlVMTDsgICAgLyogL3N5cy9jbGFzcy9wa3RjZHZkICovCitzdGF0aWMgc3RydWN0IGRlbnRyeQkqcGt0X2RlYnVnZnNfcm9vdCA9IE5VTEw7IC8qIC9kZWJ1Zy9wa3RjZHZkICovCisKKy8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyBpbnQgcGt0X3NldHVwX2RldihkZXZfdCBkZXYsIGRldl90KiBwa3RfZGV2KTsKK3N0YXRpYyBpbnQgcGt0X3JlbW92ZV9kZXYoZGV2X3QgcGt0X2Rldik7CitzdGF0aWMgaW50IHBrdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApOworCisKKworLyoKKyAqIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgYSBwa3RjZHZkIGtlcm5lbCBvYmplY3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGt0Y2R2ZF9rb2JqKiBwa3Rfa29ial9jcmVhdGUoc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwKKwkJCQkJY29uc3QgY2hhciogbmFtZSwKKwkJCQkJc3RydWN0IGtvYmplY3QqIHBhcmVudCwKKwkJCQkJc3RydWN0IGtvYmpfdHlwZSoga3R5cGUpCit7CisJc3RydWN0IHBrdGNkdmRfa29iaiAqcDsKKwlwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXApCisJCXJldHVybiBOVUxMOworCWtvYmplY3Rfc2V0X25hbWUoJnAtPmtvYmosICIlcyIsIG5hbWUpOworCXAtPmtvYmoucGFyZW50ID0gcGFyZW50OworCXAtPmtvYmoua3R5cGUgPSBrdHlwZTsKKwlwLT5wZCA9IHBkOworCWlmIChrb2JqZWN0X3JlZ2lzdGVyKCZwLT5rb2JqKSAhPSAwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcDsKK30KKy8qCisgKiByZW1vdmUgYSBwa3RjZHZkIGtlcm5lbCBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lkIHBrdF9rb2JqX3JlbW92ZShzdHJ1Y3QgcGt0Y2R2ZF9rb2JqICpwKQoreworCWlmIChwKQorCQlrb2JqZWN0X3VucmVnaXN0ZXIoJnAtPmtvYmopOworfQorLyoKKyAqIGRlZmF1bHQgcmVsZWFzZSBmdW5jdGlvbiBmb3IgcGt0Y2R2ZCBrZXJuZWwgb2JqZWN0cy4KKyAqLworc3RhdGljIHZvaWQgcGt0X2tvYmpfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKK3sKKwlrZnJlZSh0b19wa3RjZHZka29iaihrb2JqKSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzeXNmcyBpbnRlcmZhY2UgZm9yIHBrdGNkdmQKKyAqIGJ5IChDKSAyMDA2ICBUaG9tYXMgTWFpZXIgPGJhbGFnaUBqdXN0bWFpbC5kZT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBERUZfQVRUUihfb2JqLF9uYW1lLF9tb2RlKSBcCisJc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgX29iaiA9IHsgXAorCQkubmFtZSA9IF9uYW1lLCAub3duZXIgPSBUSElTX01PRFVMRSwgLm1vZGUgPSBfbW9kZSB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIC9zeXMvY2xhc3MvcGt0Y2R2ZC9wa3RjZHZkWzAtN10vCisgICAgICAgICAgICAgICAgICAgICBzdGF0L3Jlc2V0CisgICAgICAgICAgICAgICAgICAgICBzdGF0L3BhY2tldHNfc3RhcnRlZAorICAgICAgICAgICAgICAgICAgICAgc3RhdC9wYWNrZXRzX2ZpbmlzaGVkCisgICAgICAgICAgICAgICAgICAgICBzdGF0L2tiX3dyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgIHN0YXQva2JfcmVhZAorICAgICAgICAgICAgICAgICAgICAgc3RhdC9rYl9yZWFkX2dhdGhlcgorICAgICAgICAgICAgICAgICAgICAgd3JpdGVfcXVldWUvc2l6ZQorICAgICAgICAgICAgICAgICAgICAgd3JpdGVfcXVldWUvY29uZ2VzdGlvbl9vZmYKKyAgICAgICAgICAgICAgICAgICAgIHdyaXRlX3F1ZXVlL2Nvbmdlc3Rpb25fb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitERUZfQVRUUihrb2JqX3BrdF9hdHRyX3N0MSwgInJlc2V0IiwgMDIwMCk7CitERUZfQVRUUihrb2JqX3BrdF9hdHRyX3N0MiwgInBhY2tldHNfc3RhcnRlZCIsIDA0NDQpOworREVGX0FUVFIoa29ial9wa3RfYXR0cl9zdDMsICJwYWNrZXRzX2ZpbmlzaGVkIiwgMDQ0NCk7CitERUZfQVRUUihrb2JqX3BrdF9hdHRyX3N0NCwgImtiX3dyaXR0ZW4iLCAwNDQ0KTsKK0RFRl9BVFRSKGtvYmpfcGt0X2F0dHJfc3Q1LCAia2JfcmVhZCIsIDA0NDQpOworREVGX0FUVFIoa29ial9wa3RfYXR0cl9zdDYsICJrYl9yZWFkX2dhdGhlciIsIDA0NDQpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqa29ial9wa3RfYXR0cnNfc3RhdFtdID0geworCSZrb2JqX3BrdF9hdHRyX3N0MSwKKwkma29ial9wa3RfYXR0cl9zdDIsCisJJmtvYmpfcGt0X2F0dHJfc3QzLAorCSZrb2JqX3BrdF9hdHRyX3N0NCwKKwkma29ial9wa3RfYXR0cl9zdDUsCisJJmtvYmpfcGt0X2F0dHJfc3Q2LAorCU5VTEwKK307CisKK0RFRl9BVFRSKGtvYmpfcGt0X2F0dHJfd3ExLCAic2l6ZSIsIDA0NDQpOworREVGX0FUVFIoa29ial9wa3RfYXR0cl93cTIsICJjb25nZXN0aW9uX29mZiIsIDA2NDQpOworREVGX0FUVFIoa29ial9wa3RfYXR0cl93cTMsICJjb25nZXN0aW9uX29uIiwgIDA2NDQpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqa29ial9wa3RfYXR0cnNfd3F1ZXVlW10gPSB7CisJJmtvYmpfcGt0X2F0dHJfd3ExLAorCSZrb2JqX3BrdF9hdHRyX3dxMiwKKwkma29ial9wa3RfYXR0cl93cTMsCisJTlVMTAorfTsKKworLyogZGVjbGFyZXMgYSBjaGFyIGJ1ZmZlcls2NF0gX2RidWYsIGNvcGllcyBkYXRhIGZyb20KKyAqIF9iIHdpdGggbGVuZ3RoIF9sIGludG8gaXQgYW5kIGVuc3VyZXMgdGhhdCBfZGJ1ZiBlbmRzCisgKiB3aXRoIGEgXDAgY2hhcmFjdGVyLgorICovCisjZGVmaW5lIERFQ0xBUkVfQlVGX0FTX1NUUklORyhfZGJ1ZiwgX2IsIF9sKSBcCisJY2hhciBfZGJ1Zls2NF07IGludCBkbGVuID0gKF9sKSA8IDAgPyAwIDogKF9sKTsgXAorCWlmIChkbGVuID49IHNpemVvZihfZGJ1ZikpIGRsZW4gPSBzaXplb2YoX2RidWYpLTE7IFwKKwltZW1jcHkoX2RidWYsIF9iLCBkbGVuKTsgX2RidWZbZGxlbl0gPSAwCisKK3N0YXRpYyBzc2l6ZV90IGtvYmpfcGt0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQlzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpkYXRhKQoreworCXN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQgPSB0b19wa3RjZHZka29iaihrb2JqKS0+cGQ7CisJaW50IG4gPSAwOworCWludCB2OworCWlmIChzdHJjbXAoYXR0ci0+bmFtZSwgInBhY2tldHNfc3RhcnRlZCIpID09IDApIHsKKwkJbiA9IHNwcmludGYoZGF0YSwgIiVsdVxuIiwgcGQtPnN0YXRzLnBrdF9zdGFydGVkKTsKKworCX0gZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJwYWNrZXRzX2ZpbmlzaGVkIikgPT0gMCkgeworCQluID0gc3ByaW50ZihkYXRhLCAiJWx1XG4iLCBwZC0+c3RhdHMucGt0X2VuZGVkKTsKKworCX0gZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJrYl93cml0dGVuIikgPT0gMCkgeworCQluID0gc3ByaW50ZihkYXRhLCAiJWx1XG4iLCBwZC0+c3RhdHMuc2Vjc193ID4+IDEpOworCisJfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgImtiX3JlYWQiKSA9PSAwKSB7CisJCW4gPSBzcHJpbnRmKGRhdGEsICIlbHVcbiIsIHBkLT5zdGF0cy5zZWNzX3IgPj4gMSk7CisKKwl9IGVsc2UgaWYgKHN0cmNtcChhdHRyLT5uYW1lLCAia2JfcmVhZF9nYXRoZXIiKSA9PSAwKSB7CisJCW4gPSBzcHJpbnRmKGRhdGEsICIlbHVcbiIsIHBkLT5zdGF0cy5zZWNzX3JnID4+IDEpOworCisJfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgInNpemUiKSA9PSAwKSB7CisJCXNwaW5fbG9jaygmcGQtPmxvY2spOworCQl2ID0gcGQtPmJpb19xdWV1ZV9zaXplOworCQlzcGluX3VubG9jaygmcGQtPmxvY2spOworCQluID0gc3ByaW50ZihkYXRhLCAiJWRcbiIsIHYpOworCisJfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgImNvbmdlc3Rpb25fb2ZmIikgPT0gMCkgeworCQlzcGluX2xvY2soJnBkLT5sb2NrKTsKKwkJdiA9IHBkLT53cml0ZV9jb25nZXN0aW9uX29mZjsKKwkJc3Bpbl91bmxvY2soJnBkLT5sb2NrKTsKKwkJbiA9IHNwcmludGYoZGF0YSwgIiVkXG4iLCB2KTsKKworCX0gZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJjb25nZXN0aW9uX29uIikgPT0gMCkgeworCQlzcGluX2xvY2soJnBkLT5sb2NrKTsKKwkJdiA9IHBkLT53cml0ZV9jb25nZXN0aW9uX29uOworCQlzcGluX3VubG9jaygmcGQtPmxvY2spOworCQluID0gc3ByaW50ZihkYXRhLCAiJWRcbiIsIHYpOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgaW5pdF93cml0ZV9jb25nZXN0aW9uX21hcmtzKGludCogbG8sIGludCogaGkpCit7CisJaWYgKCpoaSA+IDApIHsKKwkJKmhpID0gbWF4KCpoaSwgNTAwKTsKKwkJKmhpID0gbWluKCpoaSwgMTAwMDAwMCk7CisJCWlmICgqbG8gPD0gMCkKKwkJCSpsbyA9ICpoaSAtIDEwMDsKKwkJZWxzZSB7CisJCQkqbG8gPSBtaW4oKmxvLCAqaGkgLSAxMDApOworCQkJKmxvID0gbWF4KCpsbywgMTAwKTsKKwkJfQorCX0gZWxzZSB7CisJCSpoaSA9IC0xOworCQkqbG8gPSAtMTsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IGtvYmpfcGt0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCA9IHRvX3BrdGNkdmRrb2JqKGtvYmopLT5wZDsKKwlpbnQgdmFsOworCURFQ0xBUkVfQlVGX0FTX1NUUklORyhkYnVmLCBkYXRhLCBsZW4pOyAvKiBlbnN1cmUgc3NjYW5mIHNjYW5zIGEgc3RyaW5nICovCisKKwlpZiAoc3RyY21wKGF0dHItPm5hbWUsICJyZXNldCIpID09IDAgJiYgZGxlbiA+IDApIHsKKwkJcGQtPnN0YXRzLnBrdF9zdGFydGVkID0gMDsKKwkJcGQtPnN0YXRzLnBrdF9lbmRlZCA9IDA7CisJCXBkLT5zdGF0cy5zZWNzX3cgPSAwOworCQlwZC0+c3RhdHMuc2Vjc19yZyA9IDA7CisJCXBkLT5zdGF0cy5zZWNzX3IgPSAwOworCisJfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgImNvbmdlc3Rpb25fb2ZmIikgPT0gMAorCQkgICAmJiBzc2NhbmYoZGJ1ZiwgIiVkIiwgJnZhbCkgPT0gMSkgeworCQlzcGluX2xvY2soJnBkLT5sb2NrKTsKKwkJcGQtPndyaXRlX2Nvbmdlc3Rpb25fb2ZmID0gdmFsOworCQlpbml0X3dyaXRlX2Nvbmdlc3Rpb25fbWFya3MoJnBkLT53cml0ZV9jb25nZXN0aW9uX29mZiwKKwkJCQkJJnBkLT53cml0ZV9jb25nZXN0aW9uX29uKTsKKwkJc3Bpbl91bmxvY2soJnBkLT5sb2NrKTsKKworCX0gZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJjb25nZXN0aW9uX29uIikgPT0gMAorCQkgICAmJiBzc2NhbmYoZGJ1ZiwgIiVkIiwgJnZhbCkgPT0gMSkgeworCQlzcGluX2xvY2soJnBkLT5sb2NrKTsKKwkJcGQtPndyaXRlX2Nvbmdlc3Rpb25fb24gPSB2YWw7CisJCWluaXRfd3JpdGVfY29uZ2VzdGlvbl9tYXJrcygmcGQtPndyaXRlX2Nvbmdlc3Rpb25fb2ZmLAorCQkJCQkmcGQtPndyaXRlX2Nvbmdlc3Rpb25fb24pOworCQlzcGluX3VubG9jaygmcGQtPmxvY2spOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBrb2JqX3BrdF9vcHMgPSB7CisJLnNob3cgPSBrb2JqX3BrdF9zaG93LAorCS5zdG9yZSA9IGtvYmpfcGt0X3N0b3JlCit9Oworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUga29ial9wa3RfdHlwZV9zdGF0ID0geworCS5yZWxlYXNlID0gcGt0X2tvYmpfcmVsZWFzZSwKKwkuc3lzZnNfb3BzID0gJmtvYmpfcGt0X29wcywKKwkuZGVmYXVsdF9hdHRycyA9IGtvYmpfcGt0X2F0dHJzX3N0YXQKK307CitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBrb2JqX3BrdF90eXBlX3dxdWV1ZSA9IHsKKwkucmVsZWFzZSA9IHBrdF9rb2JqX3JlbGVhc2UsCisJLnN5c2ZzX29wcyA9ICZrb2JqX3BrdF9vcHMsCisJLmRlZmF1bHRfYXR0cnMgPSBrb2JqX3BrdF9hdHRyc193cXVldWUKK307CisKK3N0YXRpYyB2b2lkIHBrdF9zeXNmc19kZXZfbmV3KHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQpCit7CisJaWYgKGNsYXNzX3BrdGNkdmQpIHsKKwkJcGQtPmNsc2RldiA9IGNsYXNzX2RldmljZV9jcmVhdGUoY2xhc3NfcGt0Y2R2ZCwKKwkJCQkJTlVMTCwgcGQtPnBrdF9kZXYsCisJCQkJCU5VTEwsICIlcyIsIHBkLT5uYW1lKTsKKwkJaWYgKElTX0VSUihwZC0+Y2xzZGV2KSkKKwkJCXBkLT5jbHNkZXYgPSBOVUxMOworCX0KKwlpZiAocGQtPmNsc2RldikgeworCQlwZC0+a29ial9zdGF0ID0gcGt0X2tvYmpfY3JlYXRlKHBkLCAic3RhdCIsCisJCQkJCSZwZC0+Y2xzZGV2LT5rb2JqLAorCQkJCQkma29ial9wa3RfdHlwZV9zdGF0KTsKKwkJcGQtPmtvYmpfd3F1ZXVlID0gcGt0X2tvYmpfY3JlYXRlKHBkLCAid3JpdGVfcXVldWUiLAorCQkJCQkmcGQtPmNsc2Rldi0+a29iaiwKKwkJCQkJJmtvYmpfcGt0X3R5cGVfd3F1ZXVlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBrdF9zeXNmc19kZXZfcmVtb3ZlKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQpCit7CisJcGt0X2tvYmpfcmVtb3ZlKHBkLT5rb2JqX3N0YXQpOworCXBrdF9rb2JqX3JlbW92ZShwZC0+a29ial93cXVldWUpOworCWlmIChjbGFzc19wa3RjZHZkKQorCQljbGFzc19kZXZpY2VfZGVzdHJveShjbGFzc19wa3RjZHZkLCBwZC0+cGt0X2Rldik7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIC9zeXMvY2xhc3MvcGt0Y2R2ZC8KKyAgICAgICAgICAgICAgICAgICAgIGFkZCAgICAgICAgICAgIG1hcCBibG9jayBkZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSAgICAgICAgIHVubWFwIHBhY2tldCBkZXYKKyAgICAgICAgICAgICAgICAgICAgIGRldmljZV9tYXAgICAgIHNob3cgbWFwcGluZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBjbGFzc19wa3RjZHZkX3JlbGVhc2Uoc3RydWN0IGNsYXNzICpjbHMpCit7CisJa2ZyZWUoY2xzKTsKK30KK3N0YXRpYyBzc2l6ZV90IGNsYXNzX3BrdGNkdmRfc2hvd19tYXAoc3RydWN0IGNsYXNzICpjLCBjaGFyICpkYXRhKQoreworCWludCBuID0gMDsKKwlpbnQgaWR4OworCW11dGV4X2xvY2tfbmVzdGVkKCZjdGxfbXV0ZXgsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9XUklURVJTOyBpZHgrKykgeworCQlzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkID0gcGt0X2RldnNbaWR4XTsKKwkJaWYgKCFwZCkKKwkJCWNvbnRpbnVlOworCQluICs9IHNwcmludGYoZGF0YStuLCAiJXMgJXU6JXUgJXU6JXVcbiIsCisJCQlwZC0+bmFtZSwKKwkJCU1BSk9SKHBkLT5wa3RfZGV2KSwgTUlOT1IocGQtPnBrdF9kZXYpLAorCQkJTUFKT1IocGQtPmJkZXYtPmJkX2RldiksCisJCQlNSU5PUihwZC0+YmRldi0+YmRfZGV2KSk7CisJfQorCW11dGV4X3VubG9jaygmY3RsX211dGV4KTsKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHNzaXplX3QgY2xhc3NfcGt0Y2R2ZF9zdG9yZV9hZGQoc3RydWN0IGNsYXNzICpjLCBjb25zdCBjaGFyICpidWYsCisJCQkJCXNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgbWFqb3IsIG1pbm9yOworCURFQ0xBUkVfQlVGX0FTX1NUUklORyhkYnVmLCBidWYsIGNvdW50KTsKKwlpZiAoc3NjYW5mKGRidWYsICIldToldSIsICZtYWpvciwgJm1pbm9yKSA9PSAyKSB7CisJCXBrdF9zZXR1cF9kZXYoTUtERVYobWFqb3IsIG1pbm9yKSwgTlVMTCk7CisJCXJldHVybiBjb3VudDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNsYXNzX3BrdGNkdmRfc3RvcmVfcmVtb3ZlKHN0cnVjdCBjbGFzcyAqYywgY29uc3QgY2hhciAqYnVmLAorCQkJCQlzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgaW50IG1ham9yLCBtaW5vcjsKKwlERUNMQVJFX0JVRl9BU19TVFJJTkcoZGJ1ZiwgYnVmLCBjb3VudCk7CisJaWYgKHNzY2FuZihkYnVmLCAiJXU6JXUiLCAmbWFqb3IsICZtaW5vcikgPT0gMikgeworCQlwa3RfcmVtb3ZlX2RldihNS0RFVihtYWpvciwgbWlub3IpKTsKKwkJcmV0dXJuIGNvdW50OworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgY2xhc3NfcGt0Y2R2ZF9hdHRyc1tdID0geworIF9fQVRUUihhZGQsICAgICAgICAgICAgMDIwMCwgTlVMTCwgY2xhc3NfcGt0Y2R2ZF9zdG9yZV9hZGQpLAorIF9fQVRUUihyZW1vdmUsICAgICAgICAgMDIwMCwgTlVMTCwgY2xhc3NfcGt0Y2R2ZF9zdG9yZV9yZW1vdmUpLAorIF9fQVRUUihkZXZpY2VfbWFwLCAgICAgMDQ0NCwgY2xhc3NfcGt0Y2R2ZF9zaG93X21hcCwgTlVMTCksCisgX19BVFRSX05VTEwKK307CisKKworc3RhdGljIGludCBwa3Rfc3lzZnNfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAwOworCisJLyoKKwkgKiBjcmVhdGUgY29udHJvbCBmaWxlcyBpbiBzeXNmcworCSAqIC9zeXMvY2xhc3MvcGt0Y2R2ZC8uLi4KKwkgKi8KKwljbGFzc19wa3RjZHZkID0ga3phbGxvYyhzaXplb2YoKmNsYXNzX3BrdGNkdmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsYXNzX3BrdGNkdmQpCisJCXJldHVybiAtRU5PTUVNOworCWNsYXNzX3BrdGNkdmQtPm5hbWUgPSBEUklWRVJfTkFNRTsKKwljbGFzc19wa3RjZHZkLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNsYXNzX3BrdGNkdmQtPmNsYXNzX3JlbGVhc2UgPSBjbGFzc19wa3RjZHZkX3JlbGVhc2U7CisJY2xhc3NfcGt0Y2R2ZC0+Y2xhc3NfYXR0cnMgPSBjbGFzc19wa3RjZHZkX2F0dHJzOworCXJldCA9IGNsYXNzX3JlZ2lzdGVyKGNsYXNzX3BrdGNkdmQpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUoY2xhc3NfcGt0Y2R2ZCk7CisJCWNsYXNzX3BrdGNkdmQgPSBOVUxMOworCQlwcmludGsoRFJJVkVSX05BTUUiOiBmYWlsZWQgdG8gY3JlYXRlIGNsYXNzIHBrdGNkdmRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGt0X3N5c2ZzX2NsZWFudXAodm9pZCkKK3sKKwlpZiAoY2xhc3NfcGt0Y2R2ZCkKKwkJY2xhc3NfZGVzdHJveShjbGFzc19wa3RjZHZkKTsKKwljbGFzc19wa3RjZHZkID0gTlVMTDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIGVudHJpZXMgaW4gZGVidWdmcworCisgIC9kZWJ1Z2ZzL3BrdGNkdmRbMC03XS8KKwkJCWluZm8KKworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgcGt0X2RlYnVnZnNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCXJldHVybiBwa3Rfc2VxX3Nob3cobSwgcCk7Cit9CisKK3N0YXRpYyBpbnQgcGt0X2RlYnVnZnNfZm9wc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwa3RfZGVidWdmc19zZXFfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2ZvcHMgPSB7CisJLm9wZW4JCT0gcGt0X2RlYnVnZnNfZm9wc19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHZvaWQgcGt0X2RlYnVnZnNfZGV2X25ldyhzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkKQoreworCWlmICghcGt0X2RlYnVnZnNfcm9vdCkKKwkJcmV0dXJuOworCXBkLT5kZnNfZl9pbmZvID0gTlVMTDsKKwlwZC0+ZGZzX2Rfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihwZC0+bmFtZSwgcGt0X2RlYnVnZnNfcm9vdCk7CisJaWYgKElTX0VSUihwZC0+ZGZzX2Rfcm9vdCkpIHsKKwkJcGQtPmRmc19kX3Jvb3QgPSBOVUxMOworCQlyZXR1cm47CisJfQorCXBkLT5kZnNfZl9pbmZvID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaW5mbyIsIFNfSVJVR08sCisJCQkJcGQtPmRmc19kX3Jvb3QsIHBkLCAmZGVidWdfZm9wcyk7CisJaWYgKElTX0VSUihwZC0+ZGZzX2ZfaW5mbykpIHsKKwkJcGQtPmRmc19mX2luZm8gPSBOVUxMOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBwa3RfZGVidWdmc19kZXZfcmVtb3ZlKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQpCit7CisJaWYgKCFwa3RfZGVidWdmc19yb290KQorCQlyZXR1cm47CisJaWYgKHBkLT5kZnNfZl9pbmZvKQorCQlkZWJ1Z2ZzX3JlbW92ZShwZC0+ZGZzX2ZfaW5mbyk7CisJcGQtPmRmc19mX2luZm8gPSBOVUxMOworCWlmIChwZC0+ZGZzX2Rfcm9vdCkKKwkJZGVidWdmc19yZW1vdmUocGQtPmRmc19kX3Jvb3QpOworCXBkLT5kZnNfZF9yb290ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcGt0X2RlYnVnZnNfaW5pdCh2b2lkKQoreworCXBrdF9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoRFJJVkVSX05BTUUsIE5VTEwpOworCWlmIChJU19FUlIocGt0X2RlYnVnZnNfcm9vdCkpIHsKKwkJcGt0X2RlYnVnZnNfcm9vdCA9IE5VTEw7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBrdF9kZWJ1Z2ZzX2NsZWFudXAodm9pZCkKK3sKKwlpZiAoIXBrdF9kZWJ1Z2ZzX3Jvb3QpCisJCXJldHVybjsKKwlkZWJ1Z2ZzX3JlbW92ZShwa3RfZGVidWdmc19yb290KTsKKwlwa3RfZGVidWdmc19yb290ID0gTlVMTDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIAogc3RhdGljIHZvaWQgcGt0X2Jpb19maW5pc2hlZChzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkKQogewpAQCAtMzQ3LDQ3ICs3NjUsMzQgQEAKICAqLwogc3RhdGljIGludCBwa3RfZ2VuZXJpY19wYWNrZXQoc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwgc3RydWN0IHBhY2tldF9jb21tYW5kICpjZ2MpCiB7Ci0JY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOwotCXJlcXVlc3RfcXVldWVfdCAqcTsKKwlyZXF1ZXN0X3F1ZXVlX3QgKnEgPSBiZGV2X2dldF9xdWV1ZShwZC0+YmRldik7CiAJc3RydWN0IHJlcXVlc3QgKnJxOwotCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwotCWludCBlcnIgPSAwOworCWludCByZXQgPSAwOwogCi0JcSA9IGJkZXZfZ2V0X3F1ZXVlKHBkLT5iZGV2KTsKKwlycSA9IGJsa19nZXRfcmVxdWVzdChxLCAoY2djLT5kYXRhX2RpcmVjdGlvbiA9PSBDR0NfREFUQV9XUklURSkgPworCQkJICAgICBXUklURSA6IFJFQUQsIF9fR0ZQX1dBSVQpOwogCi0JcnEgPSBibGtfZ2V0X3JlcXVlc3QocSwgKGNnYy0+ZGF0YV9kaXJlY3Rpb24gPT0gQ0dDX0RBVEFfV1JJVEUpID8gV1JJVEUgOiBSRUFELAotCQkJICAgICBfX0dGUF9XQUlUKTsKLQlycS0+ZXJyb3JzID0gMDsKLQlycS0+cnFfZGlzayA9IHBkLT5iZGV2LT5iZF9kaXNrOwotCXJxLT5iaW8gPSBOVUxMOwotCXJxLT5idWZmZXIgPSBOVUxMOworCWlmIChjZ2MtPmJ1ZmxlbikgeworCQlpZiAoYmxrX3JxX21hcF9rZXJuKHEsIHJxLCBjZ2MtPmJ1ZmZlciwgY2djLT5idWZsZW4sIF9fR0ZQX1dBSVQpKQorCQkJZ290byBvdXQ7CisJfQorCisJcnEtPmNtZF9sZW4gPSBDT01NQU5EX1NJWkUocnEtPmNtZFswXSk7CisJbWVtY3B5KHJxLT5jbWQsIGNnYy0+Y21kLCBDRFJPTV9QQUNLRVRfU0laRSk7CisJaWYgKHNpemVvZihycS0+Y21kKSA+IENEUk9NX1BBQ0tFVF9TSVpFKQorCQltZW1zZXQocnEtPmNtZCArIENEUk9NX1BBQ0tFVF9TSVpFLCAwLCBzaXplb2YocnEtPmNtZCkgLSBDRFJPTV9QQUNLRVRfU0laRSk7CisKIAlycS0+dGltZW91dCA9IDYwKkhaOwotCXJxLT5kYXRhID0gY2djLT5idWZmZXI7Ci0JcnEtPmRhdGFfbGVuID0gY2djLT5idWZsZW47Ci0JcnEtPnNlbnNlID0gc2Vuc2U7Ci0JbWVtc2V0KHNlbnNlLCAwLCBzaXplb2Yoc2Vuc2UpKTsKLQlycS0+c2Vuc2VfbGVuID0gMDsKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKIAlycS0+Y21kX2ZsYWdzIHw9IFJFUV9IQVJEQkFSUklFUjsKIAlpZiAoY2djLT5xdWlldCkKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7Ci0JbWVtY3B5KHJxLT5jbWQsIGNnYy0+Y21kLCBDRFJPTV9QQUNLRVRfU0laRSk7Ci0JaWYgKHNpemVvZihycS0+Y21kKSA+IENEUk9NX1BBQ0tFVF9TSVpFKQotCQltZW1zZXQocnEtPmNtZCArIENEUk9NX1BBQ0tFVF9TSVpFLCAwLCBzaXplb2YocnEtPmNtZCkgLSBDRFJPTV9QQUNLRVRfU0laRSk7Ci0JcnEtPmNtZF9sZW4gPSBDT01NQU5EX1NJWkUocnEtPmNtZFswXSk7CiAKLQlycS0+cmVmX2NvdW50Kys7Ci0JcnEtPmVuZF9pb19kYXRhID0gJndhaXQ7Ci0JcnEtPmVuZF9pbyA9IGJsa19lbmRfc3luY19ycTsKLQllbHZfYWRkX3JlcXVlc3QocSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9CQUNLLCAxKTsKLQlnZW5lcmljX3VucGx1Z19kZXZpY2UocSk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmd2FpdCk7Ci0KLQlpZiAocnEtPmVycm9ycykKLQkJZXJyID0gLUVJTzsKLQorCWJsa19leGVjdXRlX3JxKHJxLT5xLCBwZC0+YmRldi0+YmRfZGlzaywgcnEsIDApOworCXJldCA9IHJxLT5lcnJvcnM7CitvdXQ6CiAJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC04OTMsNiArMTI5OCw3IEBACiAJc2VjdG9yX3Qgem9uZSA9IDA7IC8qIFN1cHByZXNzIGdjYyB3YXJuaW5nICovCiAJc3RydWN0IHBrdF9yYl9ub2RlICpub2RlLCAqZmlyc3Rfbm9kZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKKwlpbnQgd2FrZXVwOwogCiAJVlBSSU5USygiaGFuZGxlX3F1ZXVlXG4iKTsKIApAQCAtOTY1LDcgKzEzNzEsMTMgQEAKIAkJcGt0LT53cml0ZV9zaXplICs9IGJpby0+Ymlfc2l6ZSAvIENEX0ZSQU1FU0laRTsKIAkJc3Bpbl91bmxvY2soJnBrdC0+bG9jayk7CiAJfQorCS8qIGNoZWNrIHdyaXRlIGNvbmdlc3Rpb24gbWFya3MsIGFuZCBpZiBiaW9fcXVldWVfc2l6ZSBpcworCSAgIGJlbG93LCB3YWtlIHVwIGFueSB3YWl0ZXJzICovCisJd2FrZXVwID0gKHBkLT53cml0ZV9jb25nZXN0aW9uX29uID4gMAorCSAJCSYmIHBkLT5iaW9fcXVldWVfc2l6ZSA8PSBwZC0+d3JpdGVfY29uZ2VzdGlvbl9vZmYpOwogCXNwaW5fdW5sb2NrKCZwZC0+bG9jayk7CisJaWYgKHdha2V1cCkKKwkJYmxrX2NsZWFyX3F1ZXVlX2Nvbmdlc3RlZChwZC0+ZGlzay0+cXVldWUsIFdSSVRFKTsKIAogCXBrdC0+c2xlZXBfdGltZSA9IG1heChQQUNLRVRfV0FJVF9USU1FLCAxKTsKIAlwa3Rfc2V0X3N0YXRlKHBrdCwgUEFDS0VUX1dBSVRJTkdfU1RBVEUpOwpAQCAtMjE3OCw2ICsyNTkwLDIzIEBACiAJfQogCXNwaW5fdW5sb2NrKCZwZC0+Y2Rydy5hY3RpdmVfbGlzdF9sb2NrKTsKIAorIAkvKgorCSAqIFRlc3QgaWYgdGhlcmUgaXMgZW5vdWdoIHJvb20gbGVmdCBpbiB0aGUgYmlvIHdvcmsgcXVldWUKKwkgKiAocXVldWUgc2l6ZSA+PSBjb25nZXN0aW9uIG9uIG1hcmspLgorCSAqIElmIG5vdCwgd2FpdCB0aWxsIHRoZSB3b3JrIHF1ZXVlIHNpemUgaXMgYmVsb3cgdGhlIGNvbmdlc3Rpb24gb2ZmIG1hcmsuCisJICovCisJc3Bpbl9sb2NrKCZwZC0+bG9jayk7CisJaWYgKHBkLT53cml0ZV9jb25nZXN0aW9uX29uID4gMAorCSAgICAmJiBwZC0+YmlvX3F1ZXVlX3NpemUgPj0gcGQtPndyaXRlX2Nvbmdlc3Rpb25fb24pIHsKKwkJYmxrX3NldF9xdWV1ZV9jb25nZXN0ZWQocSwgV1JJVEUpOworCQlkbyB7CisJCQlzcGluX3VubG9jaygmcGQtPmxvY2spOworCQkJY29uZ2VzdGlvbl93YWl0KFdSSVRFLCBIWik7CisJCQlzcGluX2xvY2soJnBkLT5sb2NrKTsKKwkJfSB3aGlsZShwZC0+YmlvX3F1ZXVlX3NpemUgPiBwZC0+d3JpdGVfY29uZ2VzdGlvbl9vZmYpOworCX0KKwlzcGluX3VubG9jaygmcGQtPmxvY2spOworCiAJLyoKIAkgKiBObyBtYXRjaGluZyBwYWNrZXQgZm91bmQuIFN0b3JlIHRoZSBiaW8gaW4gdGhlIHdvcmsgcXVldWUuCiAJICovCkBAIC0yMjk3LDYgKzI3MjYsOSBAQAogCXNlcV9wcmludGYobSwgIlx0c3RhdGU6XHRcdFx0aTolZCBvdzolZCBydzolZCB3dzolZCByZWM6JWQgZmluOiVkXG4iLAogCQkgICBzdGF0ZXNbMF0sIHN0YXRlc1sxXSwgc3RhdGVzWzJdLCBzdGF0ZXNbM10sIHN0YXRlc1s0XSwgc3RhdGVzWzVdKTsKIAorCXNlcV9wcmludGYobSwgIlx0d3JpdGUgY29uZ2VzdGlvbiBtYXJrczpcdG9mZj0lZCBvbj0lZFxuIiwKKwkJCXBkLT53cml0ZV9jb25nZXN0aW9uX29mZiwKKwkJCXBkLT53cml0ZV9jb25nZXN0aW9uX29uKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQzNiwzNiArMjg2OCwzMyBAQAogLyoKICAqIFNldCB1cCBtYXBwaW5nIGZyb20gcGt0Y2R2ZCBkZXZpY2UgdG8gQ0QtUk9NIGRldmljZS4KICAqLwotc3RhdGljIGludCBwa3Rfc2V0dXBfZGV2KHN0cnVjdCBwa3RfY3RybF9jb21tYW5kICpjdHJsX2NtZCkKK3N0YXRpYyBpbnQgcGt0X3NldHVwX2RldihkZXZfdCBkZXYsIGRldl90KiBwa3RfZGV2KQogewogCWludCBpZHg7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZDsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKLQlkZXZfdCBkZXYgPSBuZXdfZGVjb2RlX2RldihjdHJsX2NtZC0+ZGV2KTsKKworCW11dGV4X2xvY2tfbmVzdGVkKCZjdGxfbXV0ZXgsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgTUFYX1dSSVRFUlM7IGlkeCsrKQogCQlpZiAoIXBrdF9kZXZzW2lkeF0pCiAJCQlicmVhazsKIAlpZiAoaWR4ID09IE1BWF9XUklURVJTKSB7CiAJCXByaW50ayhEUklWRVJfTkFNRSI6IG1heCAlZCB3cml0ZXJzIHN1cHBvcnRlZFxuIiwgTUFYX1dSSVRFUlMpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0X211dGV4OwogCX0KIAogCXBkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBrdGNkdmRfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXRfbXV0ZXg7CiAKIAlwZC0+cmJfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChQS1RfUkJfUE9PTF9TSVpFLAogCQkJCQkJICBzaXplb2Yoc3RydWN0IHBrdF9yYl9ub2RlKSk7CiAJaWYgKCFwZC0+cmJfcG9vbCkKIAkJZ290byBvdXRfbWVtOwogCi0JZGlzayA9IGFsbG9jX2Rpc2soMSk7Ci0JaWYgKCFkaXNrKQotCQlnb3RvIG91dF9tZW07Ci0JcGQtPmRpc2sgPSBkaXNrOwotCiAJSU5JVF9MSVNUX0hFQUQoJnBkLT5jZHJ3LnBrdF9mcmVlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZwZC0+Y2Rydy5wa3RfYWN0aXZlX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZwZC0+Y2Rydy5hY3RpdmVfbGlzdF9sb2NrKTsKQEAgLTI0NzYsMTEgKzI5MDUsMTggQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZC0+d3F1ZXVlKTsKIAlwZC0+YmlvX3F1ZXVlID0gUkJfUk9PVDsKIAorCXBkLT53cml0ZV9jb25nZXN0aW9uX29uICA9IHdyaXRlX2Nvbmdlc3Rpb25fb247CisJcGQtPndyaXRlX2Nvbmdlc3Rpb25fb2ZmID0gd3JpdGVfY29uZ2VzdGlvbl9vZmY7CisKKwlkaXNrID0gYWxsb2NfZGlzaygxKTsKKwlpZiAoIWRpc2spCisJCWdvdG8gb3V0X21lbTsKKwlwZC0+ZGlzayA9IGRpc2s7CiAJZGlzay0+bWFqb3IgPSBwa3RkZXZfbWFqb3I7CiAJZGlzay0+Zmlyc3RfbWlub3IgPSBpZHg7CiAJZGlzay0+Zm9wcyA9ICZwa3RjZHZkX29wczsKIAlkaXNrLT5mbGFncyA9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKLQlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgRFJJVkVSX05BTUUiJWQiLCBpZHgpOworCXN0cmNweShkaXNrLT5kaXNrX25hbWUsIHBkLT5uYW1lKTsKIAlkaXNrLT5wcml2YXRlX2RhdGEgPSBwZDsKIAlkaXNrLT5xdWV1ZSA9IGJsa19hbGxvY19xdWV1ZShHRlBfS0VSTkVMKTsKIAlpZiAoIWRpc2stPnF1ZXVlKQpAQCAtMjQ5Miw4ICsyOTI4LDE1IEBACiAJCWdvdG8gb3V0X25ld19kZXY7CiAKIAlhZGRfZGlzayhkaXNrKTsKKworCXBrdF9zeXNmc19kZXZfbmV3KHBkKTsKKwlwa3RfZGVidWdmc19kZXZfbmV3KHBkKTsKKwogCXBrdF9kZXZzW2lkeF0gPSBwZDsKLQljdHJsX2NtZC0+cGt0X2RldiA9IG5ld19lbmNvZGVfZGV2KHBkLT5wa3RfZGV2KTsKKwlpZiAocGt0X2RldikKKwkJKnBrdF9kZXYgPSBwZC0+cGt0X2RldjsKKworCW11dGV4X3VubG9jaygmY3RsX211dGV4KTsKIAlyZXR1cm4gMDsKIAogb3V0X25ld19kZXY6CkBAIC0yNTA0LDE3ICsyOTQ3LDIyIEBACiAJaWYgKHBkLT5yYl9wb29sKQogCQltZW1wb29sX2Rlc3Ryb3kocGQtPnJiX3Bvb2wpOwogCWtmcmVlKHBkKTsKK291dF9tdXRleDoKKwltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CisJcHJpbnRrKERSSVZFUl9OQU1FIjogc2V0dXAgb2YgcGt0Y2R2ZCBkZXZpY2UgZmFpbGVkXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKgogICogVGVhciBkb3duIG1hcHBpbmcgZnJvbSBwa3RjZHZkIGRldmljZSB0byBDRC1ST00gZGV2aWNlLgogICovCi1zdGF0aWMgaW50IHBrdF9yZW1vdmVfZGV2KHN0cnVjdCBwa3RfY3RybF9jb21tYW5kICpjdHJsX2NtZCkKK3N0YXRpYyBpbnQgcGt0X3JlbW92ZV9kZXYoZGV2X3QgcGt0X2RldikKIHsKIAlzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkOwogCWludCBpZHg7Ci0JZGV2X3QgcGt0X2RldiA9IG5ld19kZWNvZGVfZGV2KGN0cmxfY21kLT5wa3RfZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2tfbmVzdGVkKCZjdGxfbXV0ZXgsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgTUFYX1dSSVRFUlM7IGlkeCsrKSB7CiAJCXBkID0gcGt0X2RldnNbaWR4XTsKQEAgLTI1MjMsMTUgKzI5NzEsMjIgQEAKIAl9CiAJaWYgKGlkeCA9PSBNQVhfV1JJVEVSUykgewogCQlEUFJJTlRLKERSSVZFUl9OQU1FIjogZGV2IG5vdCBzZXR1cFxuIik7Ci0JCXJldHVybiAtRU5YSU87CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHBkLT5yZWZjbnQgPiAwKQotCQlyZXR1cm4gLUVCVVNZOwotCisJaWYgKHBkLT5yZWZjbnQgPiAwKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQogCWlmICghSVNfRVJSKHBkLT5jZHJ3LnRocmVhZCkpCiAJCWt0aHJlYWRfc3RvcChwZC0+Y2Rydy50aHJlYWQpOwogCisJcGt0X2RldnNbaWR4XSA9IE5VTEw7CisKKwlwa3RfZGVidWdmc19kZXZfcmVtb3ZlKHBkKTsKKwlwa3Rfc3lzZnNfZGV2X3JlbW92ZShwZCk7CisKIAlibGtkZXZfcHV0KHBkLT5iZGV2KTsKIAogCXJlbW92ZV9wcm9jX2VudHJ5KHBkLT5uYW1lLCBwa3RfcHJvYyk7CkBAIC0yNTQxLDE4ICsyOTk2LDI0IEBACiAJYmxrX2NsZWFudXBfcXVldWUocGQtPmRpc2stPnF1ZXVlKTsKIAlwdXRfZGlzayhwZC0+ZGlzayk7CiAKLQlwa3RfZGV2c1tpZHhdID0gTlVMTDsKIAltZW1wb29sX2Rlc3Ryb3kocGQtPnJiX3Bvb2wpOwogCWtmcmVlKHBkKTsKIAogCS8qIFRoaXMgaXMgc2FmZTogb3BlbigpIGlzIHN0aWxsIGhvbGRpbmcgYSByZWZlcmVuY2UuICovCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0JcmV0dXJuIDA7CisKK291dDoKKwltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcGt0X2dldF9zdGF0dXMoc3RydWN0IHBrdF9jdHJsX2NvbW1hbmQgKmN0cmxfY21kKQogewotCXN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQgPSBwa3RfZmluZF9kZXZfZnJvbV9taW5vcihjdHJsX2NtZC0+ZGV2X2luZGV4KTsKKwlzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkOworCisJbXV0ZXhfbG9ja19uZXN0ZWQoJmN0bF9tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCisJcGQgPSBwa3RfZmluZF9kZXZfZnJvbV9taW5vcihjdHJsX2NtZC0+ZGV2X2luZGV4KTsKIAlpZiAocGQpIHsKIAkJY3RybF9jbWQtPmRldiA9IG5ld19lbmNvZGVfZGV2KHBkLT5iZGV2LT5iZF9kZXYpOwogCQljdHJsX2NtZC0+cGt0X2RldiA9IG5ld19lbmNvZGVfZGV2KHBkLT5wa3RfZGV2KTsKQEAgLTI1NjEsNiArMzAyMiw4IEBACiAJCWN0cmxfY21kLT5wa3RfZGV2ID0gMDsKIAl9CiAJY3RybF9jbWQtPm51bV9kZXZpY2VzID0gTUFYX1dSSVRFUlM7CisKKwltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgcGt0X2N0bF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC0yNTY4LDYgKzMwMzEsNyBAQAogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCXN0cnVjdCBwa3RfY3RybF9jb21tYW5kIGN0cmxfY21kOwogCWludCByZXQgPSAwOworCWRldl90IHBrdF9kZXYgPSAwOwogCiAJaWYgKGNtZCAhPSBQQUNLRVRfQ1RSTF9DTUQpCiAJCXJldHVybiAtRU5PVFRZOwpAQCAtMjU3OSwyMSArMzA0MywxNiBAQAogCWNhc2UgUEtUX0NUUkxfQ01EX1NFVFVQOgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwotCQltdXRleF9sb2NrX25lc3RlZCgmY3RsX211dGV4LCBTSU5HTEVfREVQVEhfTkVTVElORyk7Ci0JCXJldCA9IHBrdF9zZXR1cF9kZXYoJmN0cmxfY21kKTsKLQkJbXV0ZXhfdW5sb2NrKCZjdGxfbXV0ZXgpOworCQlyZXQgPSBwa3Rfc2V0dXBfZGV2KG5ld19kZWNvZGVfZGV2KGN0cmxfY21kLmRldiksICZwa3RfZGV2KTsKKwkJY3RybF9jbWQucGt0X2RldiA9IG5ld19lbmNvZGVfZGV2KHBrdF9kZXYpOwogCQlicmVhazsKIAljYXNlIFBLVF9DVFJMX0NNRF9URUFSRE9XTjoKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJbXV0ZXhfbG9ja19uZXN0ZWQoJmN0bF9tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwotCQlyZXQgPSBwa3RfcmVtb3ZlX2RldigmY3RybF9jbWQpOwotCQltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CisJCXJldCA9IHBrdF9yZW1vdmVfZGV2KG5ld19kZWNvZGVfZGV2KGN0cmxfY21kLnBrdF9kZXYpKTsKIAkJYnJlYWs7CiAJY2FzZSBQS1RfQ1RSTF9DTURfU1RBVFVTOgotCQltdXRleF9sb2NrX25lc3RlZCgmY3RsX211dGV4LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJCXBrdF9nZXRfc3RhdHVzKCZjdHJsX2NtZCk7Ci0JCW11dGV4X3VubG9jaygmY3RsX211dGV4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CkBAIC0yNjIwLDYgKzMwNzksOCBAQAogewogCWludCByZXQ7CiAKKwltdXRleF9pbml0KCZjdGxfbXV0ZXgpOworCiAJcHNkX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2woUFNEX1BPT0xfU0laRSwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBwYWNrZXRfc3RhY2tlZF9kYXRhKSk7CiAJaWYgKCFwc2RfcG9vbCkKQEAgLTI2MzMsMTggKzMwOTQsMjUgQEAKIAlpZiAoIXBrdGRldl9tYWpvcikKIAkJcGt0ZGV2X21ham9yID0gcmV0OwogCisJcmV0ID0gcGt0X3N5c2ZzX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXBrdF9kZWJ1Z2ZzX2luaXQoKTsKKwogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnBrdF9taXNjKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhEUklWRVJfTkFNRSI6IFVuYWJsZSB0byByZWdpc3RlciBtaXNjIGRldmljZVxuIik7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9taXNjOwogCX0KIAotCW11dGV4X2luaXQoJmN0bF9tdXRleCk7Ci0KIAlwa3RfcHJvYyA9IHByb2NfbWtkaXIoRFJJVkVSX05BTUUsIHByb2Nfcm9vdF9kcml2ZXIpOwogCiAJcmV0dXJuIDA7CiAKK291dF9taXNjOgorCXBrdF9kZWJ1Z2ZzX2NsZWFudXAoKTsKKwlwa3Rfc3lzZnNfY2xlYW51cCgpOwogb3V0OgogCXVucmVnaXN0ZXJfYmxrZGV2KHBrdGRldl9tYWpvciwgRFJJVkVSX05BTUUpOwogb3V0MjoKQEAgLTI2NTYsNiArMzEyNCwxMCBAQAogewogCXJlbW92ZV9wcm9jX2VudHJ5KERSSVZFUl9OQU1FLCBwcm9jX3Jvb3RfZHJpdmVyKTsKIAltaXNjX2RlcmVnaXN0ZXIoJnBrdF9taXNjKTsKKworCXBrdF9kZWJ1Z2ZzX2NsZWFudXAoKTsKKwlwa3Rfc3lzZnNfY2xlYW51cCgpOworCiAJdW5yZWdpc3Rlcl9ibGtkZXYocGt0ZGV2X21ham9yLCBEUklWRVJfTkFNRSk7CiAJbWVtcG9vbF9kZXN0cm95KHBzZF9wb29sKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbV9pb3AuYyBiL2RyaXZlcnMvYmxvY2svc3dpbV9pb3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ3YjA2Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW1faW9wLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzggKzAsMCBAQAotLyoKLSAqIERyaXZlciBmb3IgdGhlIFNXSU0gKFN1cGVyIFdveiBJbnRlZ3JhdGVkIE1hY2hpbmUpIElPUAotICogZmxvcHB5IGNvbnRyb2xsZXIgb24gdGhlIE1hY2ludG9zaCBJSWZ4IGFuZCBRdWFkcmEgOTAwLzk1MAotICoKLSAqIFdyaXR0ZW4gYnkgSm9zaHVhIE0uIFRob21wc29uIChmdW5haG9AanVyYWkub3JnKQotICogYmFzZWQgb24gdGhlIFNXSU0zIGRyaXZlciAoYykgMTk5NiBieSBQYXVsIE1hY2tlcnJhcy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIDE5OTktMDYtMTIgKGptdCkgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uLgotICovCi0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBUaGVvcnkgb2YgT3BlcmF0aW9uCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogU2luY2UgdGhlIFNXSU0gSU9QIGlzIG1lc3NhZ2UtZHJpdmVuIHdlIGltcGxlbWVudCBhIHNpbXBsZSByZXF1ZXN0IHF1ZXVlCi0gKiBzeXN0ZW0uICBPbmUgb3V0c3RhbmRpbmcgcmVxdWVzdCBtYXkgYmUgcXVldWVkIGF0IGFueSBnaXZlbiB0aW1lICh0aGlzIGlzCi0gKiBhbiBJT1AgbGltaXRhdGlvbik7IG9ubHkgd2hlbiB0aGF0IHJlcXVlc3QgaGFzIGNvbXBsZXRlZCBjYW4gYSBuZXcgcmVxdWVzdAotICogYmUgc2VudC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY19pb3AuaD4KLSNpbmNsdWRlIDxhc20vc3dpbV9pb3AuaD4KLQotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiVmVyc2lvbiAwLjEgKDE5OTktMDYtMTIpIgotCi0jZGVmaW5lIE1BWF9GTE9QUElFUwk0Ci0KLWVudW0gc3dpbV9zdGF0ZSB7Ci0JaWRsZSwKLQlhdmFpbGFibGUsCi0JcmV2YWxpZGF0aW5nLAotCXRyYW5zZmVycmluZywKLQllamVjdGluZwotfTsKLQotc3RydWN0IGZsb3BweV9zdGF0ZSB7Ci0JZW51bSBzd2ltX3N0YXRlIHN0YXRlOwotCWludAlkcml2ZV9udW07CS8qIGRldmljZSBudW1iZXIgKi8KLQlpbnQJc2VjcGVyY3lsOwkvKiBkaXNrIGdlb21ldHJ5IGluZm9ybWF0aW9uICovCi0JaW50CXNlY3BlcnRyYWNrOwotCWludAl0b3RhbF9zZWNzOwotCWludAl3cml0ZV9wcm90OwkvKiAxIGlmIHdyaXRlLXByb3RlY3RlZCwgMCBpZiBub3QsIC0xIGR1bm5vICovCi0JaW50CXJlZl9jb3VudDsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0OwotCWludAllamVjdGVkOwotCXN0cnVjdCB3YWl0X3F1ZXVlICp3YWl0OwotCWludAl3YW50ZWQ7Ci0JaW50CXRpbWVvdXRfcGVuZGluZzsKLX07Ci0KLXN0cnVjdCBzd2ltX2lvcF9yZXEgewotCWludAlzZW50OwotCWludAljb21wbGV0ZTsKLQlfX3U4CWNvbW1hbmRbMzJdOwotCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzOwotCXZvaWQJKCpkb25lKShzdHJ1Y3Qgc3dpbV9pb3BfcmVxICopOwotfTsKLQotc3RhdGljIHN0cnVjdCBzd2ltX2lvcF9yZXEgKmN1cnJlbnRfcmVxOwotc3RhdGljIGludCBmbG9wcHlfY291bnQ7Ci0KLXN0YXRpYyBzdHJ1Y3QgZmxvcHB5X3N0YXRlIGZsb3BweV9zdGF0ZXNbTUFYX0ZMT1BQSUVTXTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3dpbV9pb3BfbG9jayk7Ci0KLSNkZWZpbmUgQ1VSUkVOVCBlbHZfbmV4dF9yZXF1ZXN0KHN3aW1fcXVldWUpCi0KLXN0YXRpYyBjaGFyICpkcml2ZV9uYW1lc1s3XSA9IHsKLQkibm90IGluc3RhbGxlZCIsCS8qIERSVl9OT05FICAgICovCi0JInVua25vd24gKDEpIiwJCS8qIERSVl9VTktOT1dOICovCi0JImEgNDAwSyBkcml2ZSIsCQkvKiBEUlZfNDAwSyAgICAqLwotCSJhbiA4MDBLIGRyaXZlIgkJLyogRFJWXzgwMEsgICAgKi8KLQkidW5rbm93biAoNCkiLAkJLyogPz8/PyAgICAgICAgKi8KLQkiYW4gRkRIRCIsCQkvKiBEUlZfRkRIRCAgICAqLwotCSJ1bmtub3duICg2KSIsCQkvKiA/Pz8/ICAgICAgICAqLwotCSJhbiBBcHBsZSBIRDIwIgkJLyogRFJWX0hEMjAgICAgKi8KLX07Ci0KLWludCBzd2ltaW9wX2luaXQodm9pZCk7Ci1zdGF0aWMgdm9pZCBzd2ltaW9wX2luaXRfcmVxdWVzdChzdHJ1Y3Qgc3dpbV9pb3BfcmVxICopOwotc3RhdGljIGludCBzd2ltaW9wX3NlbmRfcmVxdWVzdChzdHJ1Y3Qgc3dpbV9pb3BfcmVxICopOwotc3RhdGljIHZvaWQgc3dpbWlvcF9yZWNlaXZlKHN0cnVjdCBpb3BfbXNnICopOwotc3RhdGljIHZvaWQgc3dpbWlvcF9zdGF0dXNfdXBkYXRlKGludCwgc3RydWN0IHN3aW1fZHJ2c3RhdHVzICopOwotc3RhdGljIGludCBzd2ltaW9wX2VqZWN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKTsKLQotc3RhdGljIGludCBmbG9wcHlfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKTsKLXN0YXRpYyBpbnQgZmxvcHB5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIGludCBmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgaW50IGZsb3BweV9jaGVja19jaGFuZ2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spOwotc3RhdGljIGludCBmbG9wcHlfcmV2YWxpZGF0ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7Ci1zdGF0aWMgaW50IGdyYWJfZHJpdmUoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsIGVudW0gc3dpbV9zdGF0ZSBzdGF0ZSwKLQkJICAgICAgaW50IGludGVycnVwdGlibGUpOwotc3RhdGljIHZvaWQgcmVsZWFzZV9kcml2ZShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyk7Ci1zdGF0aWMgdm9pZCBzZXRfdGltZW91dChzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IG50aWNrcywKLQkJCXZvaWQgKCpwcm9jKSh1bnNpZ25lZCBsb25nKSk7Ci1zdGF0aWMgdm9pZCBmZF9yZXF1ZXN0X3RpbWVvdXQodW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgdm9pZCBkb19mZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqIHEpOwotc3RhdGljIHZvaWQgc3RhcnRfcmVxdWVzdChzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7Ci0JLm9wZW4JCT0gZmxvcHB5X29wZW4sCi0JLnJlbGVhc2UJPSBmbG9wcHlfcmVsZWFzZSwKLQkuaW9jdGwJCT0gZmxvcHB5X2lvY3RsLAotCS5tZWRpYV9jaGFuZ2VkCT0gZmxvcHB5X2NoZWNrX2NoYW5nZSwKLQkucmV2YWxpZGF0ZV9kaXNrPSBmbG9wcHlfcmV2YWxpZGF0ZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqc3dpbV9xdWV1ZTsKLS8qCi0gKiBTV0lNIElPUCBpbml0aWFsaXphdGlvbgotICovCi0KLWludCBzd2ltaW9wX2luaXQodm9pZCkKLXsKLQl2b2xhdGlsZSBzdHJ1Y3Qgc3dpbV9pb3BfcmVxIHJlcTsKLQlzdHJ1Y3Qgc3dpbWNtZF9zdGF0dXMgKmNtZCA9IChzdHJ1Y3Qgc3dpbWNtZF9zdGF0dXMgKikgJnJlcS5jb21tYW5kWzBdOwotCXN0cnVjdCBzd2ltX2RydnN0YXR1cyAqZHMgPSAmY21kLT5zdGF0dXM7Ci0Jc3RydWN0IGZsb3BweV9zdGF0ZSAqZnM7Ci0JaW50IGk7Ci0KLQljdXJyZW50X3JlcSA9IE5VTEw7Ci0JZmxvcHB5X2NvdW50ID0gMDsKLQotCWlmICghaW9wX2lzbV9wcmVzZW50KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChyZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXN3aW1fcXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19mZF9yZXF1ZXN0LCAmc3dpbV9pb3BfbG9jayk7Ci0JaWYgKCFzd2ltX3F1ZXVlKSB7Ci0JCXVucmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXByaW50aygiU1dJTS1JT1A6ICVzIGJ5IEpvc2h1YSBNLiBUaG9tcHNvbiAoZnVuYWhvQGp1cmFpLm9yZylcbiIsCi0JCURSSVZFUl9WRVJTSU9OKTsKLQotCWlmIChpb3BfbGlzdGVuKFNXSU1fSU9QLCBTV0lNX0NIQU4sIHN3aW1pb3BfcmVjZWl2ZSwgIlNXSU0iKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU1dJTS1JT1A6IElPUCBjaGFubmVsIGFscmVhZHkgaW4gdXNlOyBjYW4ndCBpbml0aWFsaXplLlxuIik7Ci0JCXVucmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7Ci0JCWJsa19jbGVhbnVwX3F1ZXVlKHN3aW1fcXVldWUpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXByaW50ayhLRVJOX0VSUiAiU1dJTV9JT1A6IHByb2JpbmcgZm9yIGluc3RhbGxlZCBkcml2ZXMuXG4iKTsKLQotCWZvciAoaSA9IDAgOyBpIDwgTUFYX0ZMT1BQSUVTIDsgaSsrKSB7Ci0JCW1lbXNldCgmZmxvcHB5X3N0YXRlc1tpXSwgMCwgc2l6ZW9mKHN0cnVjdCBmbG9wcHlfc3RhdGUpKTsKLQkJZnMgPSAmZmxvcHB5X3N0YXRlc1tmbG9wcHlfY291bnRdOwotCi0JCXN3aW1pb3BfaW5pdF9yZXF1ZXN0KCZyZXEpOwotCQljbWQtPmNvZGUgPSBDTURfU1RBVFVTOwotCQljbWQtPmRyaXZlX251bSA9IGkgKyAxOwotCQlpZiAoc3dpbWlvcF9zZW5kX3JlcXVlc3QoJnJlcSkgIT0gMCkgY29udGludWU7Ci0JCXdoaWxlICghcmVxLmNvbXBsZXRlKTsKLQkJaWYgKGNtZC0+ZXJyb3IgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJTV0lNLUlPUDogcHJvYmUgb24gZHJpdmUgJWQgcmV0dXJuZWQgZXJyb3IgJWRcbiIsIGksICh1aW50KSBjbWQtPmVycm9yKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChkcy0+aW5zdGFsbGVkICE9IDB4MDEpIGNvbnRpbnVlOwotCQlwcmludGsoIlNXSU0tSU9QOiBkcml2ZSAlZCBpcyAlcyAoJXMsICVzLCAlcywgJXMpXG4iLCBpLAotCQkJZHJpdmVfbmFtZXNbZHMtPmluZm8udHlwZV0sCi0JCQlkcy0+aW5mby5leHRlcm5hbD8gImV4dCIgOiAiaW50IiwKLQkJCWRzLT5pbmZvLnNjc2k/ICJzY3NpIiA6ICJmbG9wcHkiLAotCQkJZHMtPmluZm8uZml4ZWQ/ICJmaXhlZCIgOiAicmVtb3ZhYmxlIiwKLQkJCWRzLT5pbmZvLnNlY29uZGFyeT8gInNlY29uZGFyeSIgOiAicHJpbWFyeSIpOwotCQlzd2ltaW9wX3N0YXR1c191cGRhdGUoZmxvcHB5X2NvdW50LCBkcyk7Ci0JCWZzLT5zdGF0ZSA9IGlkbGU7Ci0KLQkJaW5pdF90aW1lcigmZnMtPnRpbWVvdXQpOwotCQlmbG9wcHlfY291bnQrKzsKLQl9Ci0JcHJpbnRrKCJTV0lNLUlPUDogZGV0ZWN0ZWQgJWQgaW5zdGFsbGVkIGRyaXZlcy5cbiIsIGZsb3BweV9jb3VudCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmxvcHB5X2NvdW50OyBpKyspIHsKLQkJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBhbGxvY19kaXNrKDEpOwotCQlpZiAoIWRpc2spCi0JCQljb250aW51ZTsKLQkJZGlzay0+bWFqb3IgPSBGTE9QUFlfTUFKT1I7Ci0JCWRpc2stPmZpcnN0X21pbm9yID0gaTsKLQkJZGlzay0+Zm9wcyA9ICZmbG9wcHlfZm9wczsKLQkJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJmZCVkIiwgaSk7Ci0JCWRpc2stPnByaXZhdGVfZGF0YSA9ICZmbG9wcHlfc3RhdGVzW2ldOwotCQlkaXNrLT5xdWV1ZSA9IHN3aW1fcXVldWU7Ci0JCXNldF9jYXBhY2l0eShkaXNrLCAyODgwICogMik7Ci0JCWFkZF9kaXNrKGRpc2spOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzd2ltaW9wX2luaXRfcmVxdWVzdChzdHJ1Y3Qgc3dpbV9pb3BfcmVxICpyZXEpCi17Ci0JcmVxLT5zZW50ID0gMDsKLQlyZXEtPmNvbXBsZXRlID0gMDsKLQlyZXEtPmRvbmUgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IHN3aW1pb3Bfc2VuZF9yZXF1ZXN0KHN0cnVjdCBzd2ltX2lvcF9yZXEgKnJlcSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnI7Ci0KLQkvKiBJdCdzIGRvdWJ0ZnVsIGFuIGludGVycnVwdCByb3V0aW5lIHdvdWxkIHRyeSB0byBzZW5kICovCi0JLyogYSBTV0lNIHJlcXVlc3QsIGJ1dCBJJ2QgcmF0aGVyIHBsYXkgaXQgc2FmZSBoZXJlLiAgICAqLwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JaWYgKGN1cnJlbnRfcmVxICE9IE5VTEwpIHsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQljdXJyZW50X3JlcSA9IHJlcTsKLQotCS8qIEludGVycnVwdHMgc2hvdWxkIGJlIGJhY2sgb24gZm9yIGlvcF9zZW5kX21lc3NhZ2UoKSAqLwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JZXJyID0gaW9wX3NlbmRfbWVzc2FnZShTV0lNX0lPUCwgU1dJTV9DSEFOLCAodm9pZCAqKSByZXEsCi0JCQkJc2l6ZW9mKHJlcS0+Y29tbWFuZCksIChfX3U4ICopICZyZXEtPmNvbW1hbmRbMF0sCi0JCQkJc3dpbWlvcF9yZWNlaXZlKTsKLQotCS8qIE5vIHJhY2UgY29uZGl0aW9uIGhlcmU7IHdlIG93biBjdXJyZW50X3JlcSBhdCB0aGlzIHBvaW50ICovCi0KLQlpZiAoZXJyKSB7Ci0JCWN1cnJlbnRfcmVxID0gTlVMTDsKLQl9IGVsc2UgewotCQlyZXEtPnNlbnQgPSAxOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogUmVjZWl2ZSBhIFNXSU0gbWVzc2FnZSBmcm9tIHRoZSBJT1AuCi0gKgotICogVGhpcyB3aWxsIGJlIGNhbGxlZCBpbiB0d28gY2FzZXM6Ci0gKgotICogMS4gQSBtZXNzYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSBJT1AuCi0gKiAyLiBBbiB1bnNvbGljaXRlZCBtZXNzYWdlIHdhcyByZWNlaXZlZCBmcm9tIHRoZSBJT1AuCi0gKi8KLQotdm9pZCBzd2ltaW9wX3JlY2VpdmUoc3RydWN0IGlvcF9tc2cgKm1zZykKLXsKLQlzdHJ1Y3Qgc3dpbV9pb3BfcmVxICpyZXE7Ci0Jc3RydWN0IHN3aW1tc2dfc3RhdHVzICpzbTsKLQlzdHJ1Y3Qgc3dpbV9kcnZzdGF0dXMgKmRzOwotCi0JcmVxID0gY3VycmVudF9yZXE7Ci0KLQlzd2l0Y2gobXNnLT5zdGF0dXMpIHsKLQkJY2FzZSBJT1BfTVNHU1RBVFVTX0NPTVBMRVRFOgotCQkJbWVtY3B5KCZyZXEtPmNvbW1hbmRbMF0sICZtc2ctPnJlcGx5WzBdLCBzaXplb2YocmVxLT5jb21tYW5kKSk7Ci0JCQlyZXEtPmNvbXBsZXRlID0gMTsKLQkJCWlmIChyZXEtPmRvbmUpICgqcmVxLT5kb25lKShyZXEpOwotCQkJY3VycmVudF9yZXEgPSBOVUxMOwotCQkJYnJlYWs7Ci0JCWNhc2UgSU9QX01TR1NUQVRVU19VTlNPTDoKLQkJCXNtID0gKHN0cnVjdCBzd2ltbXNnX3N0YXR1cyAqKSAmbXNnLT5tZXNzYWdlWzBdOwotCQkJZHMgPSAmc20tPnN0YXR1czsKLQkJCXN3aW1pb3Bfc3RhdHVzX3VwZGF0ZShzbS0+ZHJpdmVfbnVtLCBkcyk7Ci0JCQlpb3BfY29tcGxldGVfbWVzc2FnZShtc2cpOwotCQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzd2ltaW9wX3N0YXR1c191cGRhdGUoaW50IGRyaXZlX251bSwgc3RydWN0IHN3aW1fZHJ2c3RhdHVzICpkcykKLXsKLQlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9ICZmbG9wcHlfc3RhdGVzW2RyaXZlX251bV07Ci0KLQlmcy0+d3JpdGVfcHJvdCA9IChkcy0+d3JpdGVfcHJvdCA9PSAweDgwKTsKLQlpZiAoKGRzLT5kaXNrX2luX2RyaXZlICE9IDB4MDEpICYmIChkcy0+ZGlza19pbl9kcml2ZSAhPSAweDAyKSkgewotCQlmcy0+ZWplY3RlZCA9IDE7Ci0JfSBlbHNlIHsKLQkJZnMtPmVqZWN0ZWQgPSAwOwotCX0KLQlzd2l0Y2goZHMtPmluZm8udHlwZSkgewotCQljYXNlIERSVl80MDBLOgotCQkJZnMtPnNlY3BlcmN5bCA9IDEwOwotCQkJZnMtPnNlY3BlcnRyYWNrID0gMTA7Ci0JCQlmcy0+dG90YWxfc2VjcyA9IDgwMDsKLQkJCWJyZWFrOwotCQljYXNlIERSVl84MDBLOgotCQkJZnMtPnNlY3BlcmN5bCA9IDIwOwotCQkJZnMtPnNlY3BlcnRyYWNrID0gMTA7Ci0JCQlmcy0+dG90YWxfc2VjcyA9IDE2MDA7Ci0JCQlicmVhazsKLQkJY2FzZSBEUlZfRkRIRDoKLQkJCWZzLT5zZWNwZXJjeWwgPSAzNjsKLQkJCWZzLT5zZWNwZXJ0cmFjayA9IDE4OwotCQkJZnMtPnRvdGFsX3NlY3MgPSAyODgwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlmcy0+c2VjcGVyY3lsID0gMDsKLQkJCWZzLT5zZWNwZXJ0cmFjayA9IDA7Ci0JCQlmcy0+dG90YWxfc2VjcyA9IDA7Ci0JCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc3dpbWlvcF9lamVjdChzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcykKLXsKLQlpbnQgZXJyLCBuOwotCXN0cnVjdCBzd2ltX2lvcF9yZXEgcmVxOwotCXN0cnVjdCBzd2ltY21kX2VqZWN0ICpjbWQgPSAoc3RydWN0IHN3aW1jbWRfZWplY3QgKikgJnJlcS5jb21tYW5kWzBdOwotCi0JZXJyID0gZ3JhYl9kcml2ZShmcywgZWplY3RpbmcsIDEpOwotCWlmIChlcnIpIHJldHVybiBlcnI7Ci0KLQlzd2ltaW9wX2luaXRfcmVxdWVzdCgmcmVxKTsKLQljbWQtPmNvZGUgPSBDTURfRUpFQ1Q7Ci0JY21kLT5kcml2ZV9udW0gPSBmcy0+ZHJpdmVfbnVtOwotCWVyciA9IHN3aW1pb3Bfc2VuZF9yZXF1ZXN0KCZyZXEpOwotCWlmIChlcnIpIHsKLQkJcmVsZWFzZV9kcml2ZShmcyk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWZvciAobiA9IDIqSFo7IG4gPiAwOyAtLW4pIHsKLQkJaWYgKHJlcS5jb21wbGV0ZSkgYnJlYWs7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJZXJyID0gLUVJTlRSOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDEpOwotCX0KLQlyZWxlYXNlX2RyaXZlKGZzKTsKLQlyZXR1cm4gY21kLT5lcnJvcjsKLX0KLQotc3RhdGljIHN0cnVjdCBmbG9wcHlfc3RydWN0IGZsb3BweV90eXBlID0KLQl7IDI4ODAsMTgsMiw4MCwwLDB4MUIsMHgwMCwweENGLDB4NkMsTlVMTCB9OwkvKiAgNyAxLjQ0TUIgMy41IiAgICovCi0KLXN0YXRpYyBpbnQgZmxvcHB5X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBwYXJhbSkKLXsKLQlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpbnQgZXJyOwotCi0JaWYgKChjbWQgJiAweDgwKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBGREVKRUNUOgotCQlpZiAoZnMtPnJlZl9jb3VudCAhPSAxKQotCQkJcmV0dXJuIC1FQlVTWTsKLQkJZXJyID0gc3dpbWlvcF9lamVjdChmcyk7Ci0JCXJldHVybiBlcnI7Ci0JY2FzZSBGREdFVFBSTToKLQkgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgcGFyYW0sICh2b2lkICopICZmbG9wcHlfdHlwZSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBmbG9wcHlfc3RydWN0KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRU5PVFRZOwotfQotCi1zdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKGZzLT5yZWZfY291bnQgPT0gLTEgfHwgZmlscC0+Zl9mbGFncyAmIE9fRVhDTCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSA9PSAwICYmIChmaWxwLT5mX21vZGUgJiAzKSkgewotCQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKLQkJaWYgKGZzLT5lamVjdGVkKQotCQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlpZiAoKGZpbHAtPmZfbW9kZSAmIDIpICYmIGZzLT53cml0ZV9wcm90KQotCQlyZXR1cm4gLUVST0ZTOwotCi0JaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX0VYQ0wpCi0JCWZzLT5yZWZfY291bnQgPSAtMTsKLQllbHNlCi0JCSsrZnMtPnJlZl9jb3VudDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZsb3BweV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCWlmIChmcy0+cmVmX2NvdW50ID4gMCkKLQkJZnMtPnJlZl9jb3VudC0tOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGZsb3BweV9jaGVja19jaGFuZ2Uoc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0Jc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBkaXNrLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIGZzLT5lamVjdGVkOwotfQotCi1zdGF0aWMgaW50IGZsb3BweV9yZXZhbGlkYXRlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gZGlzay0+cHJpdmF0ZV9kYXRhOwotCWdyYWJfZHJpdmUoZnMsIHJldmFsaWRhdGluZywgMCk7Ci0JLyogeWFkZGEsIHlhZGRhICovCi0JcmVsZWFzZV9kcml2ZShmcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsb3BweV9vZmYodW5zaWduZWQgaW50IG5yKQotewotfQotCi1zdGF0aWMgaW50IGdyYWJfZHJpdmUoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsIGVudW0gc3dpbV9zdGF0ZSBzdGF0ZSwKLQkJICAgICAgaW50IGludGVycnVwdGlibGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoZnMtPnN0YXRlICE9IGlkbGUpIHsKLQkJKytmcy0+d2FudGVkOwotCQl3aGlsZSAoZnMtPnN0YXRlICE9IGF2YWlsYWJsZSkgewotCQkJaWYgKGludGVycnVwdGlibGUgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQktLWZzLT53YW50ZWQ7Ci0JCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkJCXJldHVybiAtRUlOVFI7Ci0JCQl9Ci0JCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZmcy0+d2FpdCk7Ci0JCX0KLQkJLS1mcy0+d2FudGVkOwotCX0KLQlmcy0+c3RhdGUgPSBzdGF0ZTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbGVhc2VfZHJpdmUoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlmcy0+c3RhdGUgPSBpZGxlOwotCXN0YXJ0X3JlcXVlc3QoZnMpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3RpbWVvdXQoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsIGludCBudGlja3MsCi0JCQl2b2lkICgqcHJvYykodW5zaWduZWQgbG9uZykpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoZnMtPnRpbWVvdXRfcGVuZGluZykKLQkJZGVsX3RpbWVyKCZmcy0+dGltZW91dCk7Ci0JaW5pdF90aW1lcigmZnMtPnRpbWVvdXQpOwotCWZzLT50aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgbnRpY2tzOwotCWZzLT50aW1lb3V0LmZ1bmN0aW9uID0gcHJvYzsKLQlmcy0+dGltZW91dC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGZzOwotCWFkZF90aW1lcigmZnMtPnRpbWVvdXQpOwotCWZzLT50aW1lb3V0X3BlbmRpbmcgPSAxOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fZmRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiBxKQotewotCWludCBpOwotCi0JZm9yIChpID0gMCA7IGkgPCBmbG9wcHlfY291bnQgOyBpKyspIHsKLQkJc3RhcnRfcmVxdWVzdCgmZmxvcHB5X3N0YXRlc1tpXSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBmZF9yZXF1ZXN0X2NvbXBsZXRlKHN0cnVjdCBzd2ltX2lvcF9yZXEgKnJlcSkKLXsKLQlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IHJlcS0+ZnM7Ci0Jc3RydWN0IHN3aW1jbWRfcncgKmNtZCA9IChzdHJ1Y3Qgc3dpbWNtZF9ydyAqKSAmcmVxLT5jb21tYW5kWzBdOwotCi0JZGVsX3RpbWVyKCZmcy0+dGltZW91dCk7Ci0JZnMtPnRpbWVvdXRfcGVuZGluZyA9IDA7Ci0JZnMtPnN0YXRlID0gaWRsZTsKLQlpZiAoY21kLT5lcnJvcikgewotCQlwcmludGsoS0VSTl9FUlIgIlNXSU0tSU9QOiBlcnJvciAlZCBvbiByZWFkL3dyaXRlIHJlcXVlc3QuXG4iLCBjbWQtPmVycm9yKTsKLQkJZW5kX3JlcXVlc3QoQ1VSUkVOVCwgMCk7Ci0JfSBlbHNlIHsKLQkJQ1VSUkVOVC0+c2VjdG9yICs9IGNtZC0+bnVtX2Jsb2NrczsKLQkJQ1VSUkVOVC0+Y3VycmVudF9ucl9zZWN0b3JzIC09IGNtZC0+bnVtX2Jsb2NrczsKLQkJaWYgKENVUlJFTlQtPmN1cnJlbnRfbnJfc2VjdG9ycyA8PSAwKSB7Ci0JCQllbmRfcmVxdWVzdChDVVJSRU5ULCAxKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlzdGFydF9yZXF1ZXN0KGZzKTsKLX0KLQotc3RhdGljIHZvaWQgZmRfcmVxdWVzdF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IChzdHJ1Y3QgZmxvcHB5X3N0YXRlICopIGRhdGE7Ci0KLQlmcy0+dGltZW91dF9wZW5kaW5nID0gMDsKLQllbmRfcmVxdWVzdChDVVJSRU5ULCAwKTsKLQlmcy0+c3RhdGUgPSBpZGxlOwotfQotCi1zdGF0aWMgdm9pZCBzdGFydF9yZXF1ZXN0KHN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzKQotewotCXZvbGF0aWxlIHN0cnVjdCBzd2ltX2lvcF9yZXEgcmVxOwotCXN0cnVjdCBzd2ltY21kX3J3ICpjbWQgPSAoc3RydWN0IHN3aW1jbWRfcncgKikgJnJlcS5jb21tYW5kWzBdOwotCi0JaWYgKGZzLT5zdGF0ZSA9PSBpZGxlICYmIGZzLT53YW50ZWQpIHsKLQkJZnMtPnN0YXRlID0gYXZhaWxhYmxlOwotCQl3YWtlX3VwKCZmcy0+d2FpdCk7Ci0JCXJldHVybjsKLQl9Ci0Jd2hpbGUgKENVUlJFTlQgJiYgZnMtPnN0YXRlID09IGlkbGUpIHsKLQkJaWYgKENVUlJFTlQtPmJoICYmICFidWZmZXJfbG9ja2VkKENVUlJFTlQtPmJoKSkKLQkJCXBhbmljKCJmbG9wcHk6IGJsb2NrIG5vdCBsb2NrZWQiKTsKLSNpZiAwCi0JCXByaW50aygiZG9fZmRfcmVxOiBkZXY9JXMgY21kPSVkIHNlYz0lbGQgbnJfc2VjPSVsZCBidWY9JXBcbiIsCi0JCSAgICAgICBDVVJSRU5ULT5ycV9kaXNrLT5kaXNrX25hbWUsIENVUlJFTlQtPmNtZCwKLQkJICAgICAgIENVUlJFTlQtPnNlY3RvciwgQ1VSUkVOVC0+bnJfc2VjdG9ycywgQ1VSUkVOVC0+YnVmZmVyKTsKLQkJcHJpbnRrKCIgICAgICAgICAgIGVycm9ycz0lZCBjdXJyZW50X25yX3NlY3RvcnM9JWxkXG4iLAotCQkgICAgICBDVVJSRU5ULT5lcnJvcnMsIENVUlJFTlQtPmN1cnJlbnRfbnJfc2VjdG9ycyk7Ci0jZW5kaWYKLQotCQlpZiAoQ1VSUkVOVC0+c2VjdG9yIDwgMCB8fCBDVVJSRU5ULT5zZWN0b3IgPj0gZnMtPnRvdGFsX3NlY3MpIHsKLQkJCWVuZF9yZXF1ZXN0KENVUlJFTlQsIDApOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKENVUlJFTlQtPmN1cnJlbnRfbnJfc2VjdG9ycyA9PSAwKSB7Ci0JCQllbmRfcmVxdWVzdChDVVJSRU5ULCAxKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChmcy0+ZWplY3RlZCkgewotCQkJZW5kX3JlcXVlc3QoQ1VSUkVOVCwgMCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXN3aW1pb3BfaW5pdF9yZXF1ZXN0KCZyZXEpOwotCQlyZXEuZnMgPSBmczsKLQkJcmVxLmRvbmUgPSBmZF9yZXF1ZXN0X2NvbXBsZXRlOwotCi0JCWlmIChDVVJSRU5ULT5jbWQgPT0gV1JJVEUpIHsKLQkJCWlmIChmcy0+d3JpdGVfcHJvdCkgewotCQkJCWVuZF9yZXF1ZXN0KENVUlJFTlQsIDApOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJY21kLT5jb2RlID0gQ01EX1dSSVRFOwotCQl9IGVsc2UgewotCQkJY21kLT5jb2RlID0gQ01EX1JFQUQ7Ci0KLQkJfQotCQljbWQtPmRyaXZlX251bSA9IGZzLT5kcml2ZV9udW07Ci0JCWNtZC0+YnVmZmVyID0gQ1VSUkVOVC0+YnVmZmVyOwotCQljbWQtPmZpcnN0X2Jsb2NrID0gQ1VSUkVOVC0+c2VjdG9yOwotCQljbWQtPm51bV9ibG9ja3MgPSBDVVJSRU5ULT5jdXJyZW50X25yX3NlY3RvcnM7Ci0KLQkJaWYgKHN3aW1pb3Bfc2VuZF9yZXF1ZXN0KCZyZXEpKSB7Ci0JCQllbmRfcmVxdWVzdChDVVJSRU5ULCAwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc2V0X3RpbWVvdXQoZnMsIEhaKkNVUlJFTlQtPmN1cnJlbnRfbnJfc2VjdG9ycywKLQkJCQlmZF9yZXF1ZXN0X3RpbWVvdXQpOwotCi0JCWZzLT5zdGF0ZSA9IHRyYW5zZmVycmluZzsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYyBiL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCmluZGV4IGUxOWJhNGUuLjY4NTkyYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfbHBfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy92aW8uaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJpU2VyaWVzIFZpcnR1YWwgREFTRCIpOwogTU9EVUxFX0FVVEhPUigiRGF2ZSBCb3V0Y2hlciIpOwpAQCAtNzY5LDYgKzc3MCwxMSBAQAogewogCWludCByYzsKIAorCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gZWFybHlfZmFpbDsKKwl9CisKIAkvKiBUcnkgdG8gb3BlbiB0byBvdXIgaG9zdCBscCAqLwogCWlmICh2aW9wYXRoX2hvc3RMcCA9PSBIdkxwSW5kZXhJbnZhbGlkKQogCQl2aW9fc2V0X2hvc3RscCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jCmluZGV4IGZkZWE1OGEuLjZiZGY1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmMKQEAgLTExNywxNSArMTE3LDIzIEBACiAKIAkvKiBJQk0vTGVub3ZvIFRoaW5rUGFkIHdpdGggQnJvYWRjb20gY2hpcCAqLwogCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjAxZSksIC5kcml2ZXJfaW5mbyA9IEhDSV9XUk9OR19TQ09fTVRVIH0sCisJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMTEwKSwgLmRyaXZlcl9pbmZvID0gSENJX1dST05HX1NDT19NVFUgfSwKIAogCS8qIEFOWUNPTSBCbHVldG9vdGggVVNCLTIwMCBhbmQgVVNCLTI1MCAqLwogCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjExMSksIC5kcml2ZXJfaW5mbyA9IEhDSV9SRVNFVCB9LAogCisJLyogSFAgbGFwdG9wIHdpdGggQnJvYWRjb20gY2hpcCAqLworCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MTcxZCksIC5kcml2ZXJfaW5mbyA9IEhDSV9XUk9OR19TQ09fTVRVIH0sCisKKwkvKiBEZWxsIGxhcHRvcCB3aXRoIEJyb2FkY29tIGNoaXAgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNjLCAweDgxMjYpLCAuZHJpdmVyX2luZm8gPSBIQ0lfV1JPTkdfU0NPX01UVSB9LAorCiAJLyogTWljcm9zb2Z0IFdpcmVsZXNzIFRyYW5zY2VpdmVyIGZvciBCbHVldG9vdGggMi4wICovCiAJeyBVU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMDljKSwgLmRyaXZlcl9pbmZvID0gSENJX1JFU0VUIH0sCiAKIAkvKiBLZW5zaW5ndG9uIEJsdWV0b290aCBVU0IgYWRhcHRlciAqLwogCXsgVVNCX0RFVklDRSgweDA0N2QsIDB4MTA1ZCksIC5kcml2ZXJfaW5mbyA9IEhDSV9SRVNFVCB9LAorCXsgVVNCX0RFVklDRSgweDA0N2QsIDB4MTA1ZSksIC5kcml2ZXJfaW5mbyA9IEhDSV9XUk9OR19TQ09fTVRVIH0sCiAKIAkvKiBJU1NDIEJsdWV0b290aCBBZGFwdGVyIHYzLjEgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTMxLCAweDEwMDEpLCAuZHJpdmVyX2luZm8gPSBIQ0lfUkVTRVQgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwppbmRleCAyZGY1Y2Y0Li4zMTA1ZGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCkBAIC0zMzcsNiArMzM3LDEyIEBACiAvKiB1c2VkIGluIHRoZSBhdWRpbyBpb2N0bHMgKi8KICNkZWZpbmUgQ0hFQ0tBVURJTyBpZiAoKHJldD1jaGVja19mb3JfYXVkaW9fZGlzYyhjZGksIGNkbykpKSByZXR1cm4gcmV0CiAKKy8qCisgKiBBbm90aGVyIHBvcHVsYXIgT1MgdXNlcyA3IHNlY29uZHMgYXMgdGhlIGhhcmQgdGltZW91dCBmb3IgZGVmYXVsdAorICogY29tbWFuZHMsIHNvIGl0IGlzIGEgZ29vZCBjaG9pY2UgZm9yIHVzIGFzIHdlbGwuCisgKi8KKyNkZWZpbmUgQ0RST01fREVGX1RJTUVPVVQJKDcgKiBIWikKKwogLyogTm90LWV4cG9ydGVkIHJvdXRpbmVzLiAqLwogc3RhdGljIGludCBvcGVuX2Zvcl9kYXRhKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSk7CiBzdGF0aWMgaW50IGNoZWNrX2Zvcl9hdWRpb19kaXNjKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqIGNkaSwKQEAgLTE1MjgsNyArMTUzNCw3IEBACiAJY2djLT5idWZmZXIgPSAoY2hhciAqKSBidWY7CiAJY2djLT5idWZsZW4gPSBsZW47CiAJY2djLT5kYXRhX2RpcmVjdGlvbiA9IHR5cGU7Ci0JY2djLT50aW1lb3V0ID0gNSpIWjsKKwljZ2MtPnRpbWVvdXQgPSBDRFJPTV9ERUZfVElNRU9VVDsKIH0KIAogLyogRFZEIGhhbmRsaW5nICovCkBAIC0xODEwLDcgKzE4MTYsNyBAQAogCiAJc2l6ZSA9IHNpemVvZihzLT5kaXNja2V5LnZhbHVlKSArIDQ7CiAKLQlpZiAoKGJ1ZiA9ICh1X2NoYXIgKikga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKGJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1Ziwgc2l6ZSwgQ0dDX0RBVEFfUkVBRCk7CkBAIC0xODYxLDcgKzE4NjcsNyBAQAogCiAJc2l6ZSA9IHNpemVvZihzLT5tYW51ZmFjdC52YWx1ZSkgKyA0OwogCi0JaWYgKChidWYgPSAodV9jaGFyICopIGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKChidWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBidWYsIHNpemUsIENHQ19EQVRBX1JFQUQpOwpAQCAtMjEzOSw4ICsyMTQ1LDcgQEAKIAkJCWNkaS0+bGFzdF9zZW5zZSA9IHMtPnNlbnNlX2tleTsKIAkJfQogCi0JCXJxLT5iaW8gPSBiaW87Ci0JCWlmIChibGtfcnFfdW5tYXBfdXNlcihycSkpCisJCWlmIChibGtfcnFfdW5tYXBfdXNlcihiaW8pKQogCQkJcmV0ID0gLUVGQVVMVDsKIAogCQlpZiAocmV0KQpAQCAtMjg0OSw3ICsyODU0LDcgQEAKIAkJLyogRklYTUU6IHdlIG5lZWQgdXBwZXIgYm91bmQgY2hlY2tpbmcsIHRvbyEhICovCiAJCWlmIChsYmEgPCAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWNnYy5idWZmZXIgPSAoY2hhciAqKSBrbWFsbG9jKGJsb2Nrc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWNnYy5idWZmZXIgPSBrbWFsbG9jKGJsb2Nrc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChjZ2MuYnVmZmVyID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtc2V0KCZzZW5zZSwgMCwgc2l6ZW9mKHNlbnNlKSk7CkBAIC0zMDMxLDcgKzMwMzYsNyBAQAogCQlpbnQgc2l6ZSA9IHNpemVvZihkdmRfc3RydWN0KTsKIAkJaWYgKCFDRFJPTV9DQU4oQ0RDX0RWRCkpCiAJCQlyZXR1cm4gLUVOT1NZUzsKLQkJaWYgKChzID0gKGR2ZF9zdHJ1Y3QgKikga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJaWYgKChzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBEVkRfUkVBRF9TVFJVQ1RcbiIpOyAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKHMsIChkdmRfc3RydWN0IF9fdXNlciAqKWFyZywgc2l6ZSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY20yMDYuYyBiL2RyaXZlcnMvY2Ryb20vY20yMDYuYwppbmRleCBlNmQ4ZTllLi5iNmM2MWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2NtMjA2LmMKKysrIGIvZHJpdmVycy9jZHJvbS9jbTIwNi5jCkBAIC0xNDIwLDcgKzE0MjAsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcHJpbnRrKCIgYWRhcHRlciBhdCAweCV4IiwgY20yMDZfYmFzZSk7Ci0JY2QgPSAoc3RydWN0IGNtMjA2X3N0cnVjdCAqKSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWNkID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNkKQogICAgICAgICAgICAgICAgZ290byBvdXRfYmFzZTsKIAkvKiBOb3cgd2UgaGF2ZSBmb3VuZCB0aGUgYWRhcHRvciBjYXJkLCB0cnkgdG8gcmVzZXQgaXQuIEFzIHdlIGhhdmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vdmlvY2QuYyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwppbmRleCA1NGNhOTMxLi45M2ZiZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKKysrIGIvZHJpdmVycy9jZHJvbS92aW9jZC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL3Zpby5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogCiAjZGVmaW5lIFZJT0NEX0RFVklDRQkJCSJpc2VyaWVzL3ZjZCIKIApAQCAtNzQ4LDYgKzc0OSw5IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCWludCByZXQgPSAwOwogCisJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmICh2aW9wYXRoX2hvc3RMcCA9PSBIdkxwSW5kZXhJbnZhbGlkKSB7CiAJCXZpb19zZXRfaG9zdGxwKCk7CiAJCS8qIElmIHdlIGRvbid0IGhhdmUgYSBob3N0LCBiYWlsIG91dCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCAyNGY5MjJmLi45ZTQzZTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtOTcsNyArOTcsNyBAQAogCiBjb25maWcgQ09NUFVUT05FCiAJdHJpc3RhdGUgIkNvbXB1dG9uZSBJbnRlbGxpUG9ydCBQbHVzIHNlcmlhbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJECisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgKElTQSB8fCBFSVNBIHx8IFBDSSkKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZW50aXJlIGZhbWlseSBvZiBJbnRlbGxpcG9ydCBJSS9QbHVzCiAJICBjb250cm9sbGVycyB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIE1pY3JvQ2hhbm5lbCBjb250cm9sbGVycyBhbmQKQEAgLTIwMSw5ICsyMDEsMjQgQEAKIAkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbXhzZXIuIElmIHlvdSB3YW50IHRvIGRvIHRoYXQsIHNheSBNCiAJICBoZXJlLgogCitjb25maWcgTU9YQV9TTUFSVElPX05FVworCXRyaXN0YXRlICJNb3hhIFNtYXJ0SU8gc3VwcG9ydCB2LiAyLjAgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgKFBDSSB8fCBFSVNBIHx8IElTQSkKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgTW94YSBTbWFydElPIG11bHRpcG9ydCBzZXJpYWwgY2FyZCBhbmQvb3IKKwkgIHdhbnQgdG8gaGVscCBkZXZlbG9wIGEgbmV3IHZlcnNpb24gb2YgdGhpcyBkcml2ZXIuCisKKwkgIFRoaXMgaXMgdXBncmFkZWQgKDEuOS4xKSBkcml2ZXIgZnJvbSBvcmlnaW5hbCBNb3hhIGRyaXZlcnMgd2l0aAorCSAgY2hhbmdlcyBmaW5hbGx5IHJlc3VsdGluZyBpbiBQQ0kgcHJvYmluZy4KKworCSAgVXNlIGF0IHlvdXIgb3duIHJpc2suCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkCisJICBteHNlcl9uZXcuIElmIHlvdSB3YW50IHRvIGRvIHRoYXQsIHNheSBNIGhlcmUuCisKIGNvbmZpZyBJU0kKIAl0cmlzdGF0ZSAiTXVsdGktVGVjaCBtdWx0aXBvcnQgY2FyZCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJECisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgUENJCiAJc2VsZWN0IEZXX0xPQURFUgogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBNdWx0aS1UZWNoIGNhcmRzIHdoaWNoIHByb3ZpZGUgc2V2ZXJhbApAQCAtMjk3LDcgKzMxMiw3IEBACiAKIGNvbmZpZyBTWAogCXRyaXN0YXRlICJTcGVjaWFsaXggU1ggKGFuZCBTSSkgY2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJECisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgKFBDSSB8fCBFSVNBIHx8IElTQSkKIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgU1ggYW5kIFNJIG11bHRpcG9ydCBzZXJpYWwgY2FyZHMuCiAJICBQbGVhc2UgcmVhZCB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3N4LnR4dD4gZm9yIGRldGFpbHMuCkBAIC04NTIsNyArODY3LDcgQEAKIAogY29uZmlnIFRBTkJBQ19UQjAyMTkKIAl0cmlzdGF0ZSAiVEFOQkFDIFRCMDIxOSBiYXNlIGJvYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBUQU5CQUNfVEIwMjJYCisJZGVwZW5kcyBvbiBUQU5CQUNfVEIwMjJYCiAJc2VsZWN0IEdQSU9fVlI0MVhYCiAKIHNvdXJjZSAiZHJpdmVycy9jaGFyL2FncC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IGIxZmNkYWIuLmZjMTEwNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKQEAgLTMxLDYgKzMxLDcgQEAKIG9iai0kKENPTkZJR19BMjIzMikJCSs9IHNlcl9hMjIzMi5vIGdlbmVyaWNfc2VyaWFsLm8KIG9iai0kKENPTkZJR19BVEFSSV9EU1A1NkspCSs9IGRzcDU2ay5vCiBvYmotJChDT05GSUdfTU9YQV9TTUFSVElPKQkrPSBteHNlci5vCitvYmotJChDT05GSUdfTU9YQV9TTUFSVElPX05FVykJKz0gbXhzZXJfbmV3Lm8KIG9iai0kKENPTkZJR19DT01QVVRPTkUpCQkrPSBpcDIvCiBvYmotJChDT05GSUdfUklTQ09NOCkJCSs9IHJpc2NvbTgubwogb2JqLSQoQ09ORklHX0lTSSkJCSs9IGlzaWNvbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKaW5kZXggYzYwM2JmMi4uYTlmOWM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZwpAQCAtODYsNyArODYsNyBAQAogCiBjb25maWcgQUdQX1NJUwogCXRyaXN0YXRlICJTaVMgY2hpcHNldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQUdQCisJZGVwZW5kcyBvbiBBR1AgJiYgWDg2CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZgogCSAgWCBvbiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBbU2lTXSBjaGlwc2V0cy4KQEAgLTEwMyw3ICsxMDMsNyBAQAogCiBjb25maWcgQUdQX1ZJQQogCXRyaXN0YXRlICJWSUEgY2hpcHNldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQUdQCisJZGVwZW5kcyBvbiBBR1AgJiYgWDg2CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZgogCSAgWCBvbiBWSUEgTVZQMy9BcG9sbG8gUHJvIGNoaXBzZXRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hZ3AuaCBiL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKaW5kZXggOGIzMzE3Zi4uMWQ1OWUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hZ3AuaAorKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCkBAIC0yMjUsNiArMjI1LDEwIEBACiAjZGVmaW5lIEk4MTBfR01TX0RJU0FCTEUJMHgwMDAwMDAwMAogI2RlZmluZSBJODEwX1BHRVRCTF9DVEwJCTB4MjAyMAogI2RlZmluZSBJODEwX1BHRVRCTF9FTkFCTEVECTB4MDAwMDAwMDEKKyNkZWZpbmUgSTk2NV9QR0VUQkxfU0laRV9NQVNLCTB4MDAwMDAwMGUKKyNkZWZpbmUgSTk2NV9QR0VUQkxfU0laRV81MTJLQgkoMCA8PCAxKQorI2RlZmluZSBJOTY1X1BHRVRCTF9TSVpFXzI1NktCCSgxIDw8IDEpCisjZGVmaW5lIEk5NjVfUEdFVEJMX1NJWkVfMTI4S0IJKDIgPDwgMSkKICNkZWZpbmUgSTgxMF9EUkFNX0NUTAkJMHgzMDAwCiAjZGVmaW5lIEk4MTBfRFJBTV9ST1dfMAkJMHgwMDAwMDAwMQogI2RlZmluZSBJODEwX0RSQU1fUk9XXzBfU0RSQU0JMHgwMDAwMDAwMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYwppbmRleCA1MWQwZDU2Li5jODVjOGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYwpAQCAtMTAxLDYgKzEwMSwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBucl90YWJsZXM7IGkrKykgewogCQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbWRfcGFnZV9tYXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGVudHJ5ID09IE5VTEwpIHsKKwkJCXdoaWxlIChpID4gMCkgeworCQkJCWtmcmVlKHRhYmxlc1tpLTFdKTsKKwkJCQlpLS07CisJCQl9CisJCQlrZnJlZSh0YWJsZXMpOwogCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCAyZjJjNGVmLi45M2QyMjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTY1MCw2ICs2NTAsMTUgQEAKIAkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKIAkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKIAl9LAorCS8qIFZJQSBLOE04OTAgLyBLOE44OTAgKi8KKwl7CisJLmNsYXNzICAgICAgICAgID0gKFBDSV9DTEFTU19CUklER0VfSE9TVCA8PCA4KSwKKwkuY2xhc3NfbWFzayAgICAgPSB+MCwKKwkudmVuZG9yICAgICAgICAgPSBQQ0lfVkVORE9SX0lEX1ZJQSwKKwkuZGV2aWNlICAgICAgICAgPSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMzYsCisJLnN1YnZlbmRvciAgICAgID0gUENJX0FOWV9JRCwKKwkuc3ViZGV2aWNlICAgICAgPSBQQ0lfQU5ZX0lELAorCX0sCiAJLyogVklBIEs4VDg5MCAqLwogCXsKIAkuY2xhc3MJCT0gKFBDSV9DTEFTU19CUklER0VfSE9TVCA8PCA4KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKaW5kZXggZjI0NGM2Ni4uOTk4N2RjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKQEAgLTQxLDE4ICs0MSwxOCBAQAogfTsKIAogCi10eXBlZGVmIHN0cnVjdCBfYXRpX3BhZ2VfbWFwIHsKK3N0cnVjdCBhdGlfcGFnZV9tYXAgewogCXVuc2lnbmVkIGxvbmcgKnJlYWw7CiAJdW5zaWduZWQgbG9uZyBfX2lvbWVtICpyZW1hcHBlZDsKLX0gYXRpX3BhZ2VfbWFwOworfTsKIAogc3RhdGljIHN0cnVjdCBfYXRpX2dlbmVyaWNfcHJpdmF0ZSB7CiAJdm9sYXRpbGUgdTggX19pb21lbSAqcmVnaXN0ZXJzOwotCWF0aV9wYWdlX21hcCAqKmdhdHRfcGFnZXM7CisJc3RydWN0IGF0aV9wYWdlX21hcCAqKmdhdHRfcGFnZXM7CiAJaW50IG51bV90YWJsZXM7CiB9IGF0aV9nZW5lcmljX3ByaXZhdGU7CiAKLXN0YXRpYyBpbnQgYXRpX2NyZWF0ZV9wYWdlX21hcChhdGlfcGFnZV9tYXAgKnBhZ2VfbWFwKQorc3RhdGljIGludCBhdGlfY3JlYXRlX3BhZ2VfbWFwKHN0cnVjdCBhdGlfcGFnZV9tYXAgKnBhZ2VfbWFwKQogewogCWludCBpLCBlcnIgPSAwOwogCkBAIC04Miw3ICs4Miw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgYXRpX2ZyZWVfcGFnZV9tYXAoYXRpX3BhZ2VfbWFwICpwYWdlX21hcCkKK3N0YXRpYyB2b2lkIGF0aV9mcmVlX3BhZ2VfbWFwKHN0cnVjdCBhdGlfcGFnZV9tYXAgKnBhZ2VfbWFwKQogewogCXVubWFwX3BhZ2VfZnJvbV9hZ3AodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7CiAJaW91bm1hcChwYWdlX21hcC0+cmVtYXBwZWQpOwpAQCAtOTQsOCArOTQsOCBAQAogc3RhdGljIHZvaWQgYXRpX2ZyZWVfZ2F0dF9wYWdlcyh2b2lkKQogewogCWludCBpOwotCWF0aV9wYWdlX21hcCAqKnRhYmxlczsKLQlhdGlfcGFnZV9tYXAgKmVudHJ5OworCXN0cnVjdCBhdGlfcGFnZV9tYXAgKip0YWJsZXM7CisJc3RydWN0IGF0aV9wYWdlX21hcCAqZW50cnk7CiAKIAl0YWJsZXMgPSBhdGlfZ2VuZXJpY19wcml2YXRlLmdhdHRfcGFnZXM7CiAJZm9yIChpID0gMDsgaSA8IGF0aV9nZW5lcmljX3ByaXZhdGUubnVtX3RhYmxlczsgaSsrKSB7CkBAIC0xMTIsMzAgKzExMiwzMCBAQAogCiBzdGF0aWMgaW50IGF0aV9jcmVhdGVfZ2F0dF9wYWdlcyhpbnQgbnJfdGFibGVzKQogewotCWF0aV9wYWdlX21hcCAqKnRhYmxlczsKLQlhdGlfcGFnZV9tYXAgKmVudHJ5OworCXN0cnVjdCBhdGlfcGFnZV9tYXAgKip0YWJsZXM7CisJc3RydWN0IGF0aV9wYWdlX21hcCAqZW50cnk7CiAJaW50IHJldHZhbCA9IDA7CiAJaW50IGk7CiAKLQl0YWJsZXMgPSBremFsbG9jKChucl90YWJsZXMgKyAxKSAqIHNpemVvZihhdGlfcGFnZV9tYXAgKiksR0ZQX0tFUk5FTCk7CisJdGFibGVzID0ga3phbGxvYygobnJfdGFibGVzICsgMSkgKiBzaXplb2Yoc3RydWN0IGF0aV9wYWdlX21hcCAqKSxHRlBfS0VSTkVMKTsKIAlpZiAodGFibGVzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3RhYmxlczsgaSsrKSB7Ci0JCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoYXRpX3BhZ2VfbWFwKSwgR0ZQX0tFUk5FTCk7CisJCWVudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aV9wYWdlX21hcCksIEdGUF9LRVJORUwpOwogCQlpZiAoZW50cnkgPT0gTlVMTCkgewotCQkJd2hpbGUgKGk+MCkgewotCQkJCWtmcmVlICh0YWJsZXNbaS0xXSk7CisJCQl3aGlsZSAoaSA+IDApIHsKKwkJCQlrZnJlZSh0YWJsZXNbaS0xXSk7CiAJCQkJaS0tOwogCQkJfQotCQkJa2ZyZWUgKHRhYmxlcyk7Ci0JCQl0YWJsZXMgPSBOVUxMOworCQkJa2ZyZWUodGFibGVzKTsKIAkJCXJldHZhbCA9IC1FTk9NRU07CiAJCQlicmVhazsKIAkJfQogCQl0YWJsZXNbaV0gPSBlbnRyeTsKIAkJcmV0dmFsID0gYXRpX2NyZWF0ZV9wYWdlX21hcChlbnRyeSk7Ci0JCWlmIChyZXR2YWwgIT0gMCkgYnJlYWs7CisJCWlmIChyZXR2YWwgIT0gMCkKKwkJCWJyZWFrOwogCX0KIAlhdGlfZ2VuZXJpY19wcml2YXRlLm51bV90YWJsZXMgPSBucl90YWJsZXM7CiAJYXRpX2dlbmVyaWNfcHJpdmF0ZS5nYXR0X3BhZ2VzID0gdGFibGVzOwpAQCAtMzQwLDcgKzM0MCw3IEBACiBzdGF0aWMgaW50IGF0aV9jcmVhdGVfZ2F0dF90YWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpCiB7CiAJc3RydWN0IGFwZXJfc2l6ZV9pbmZvX2x2bDIgKnZhbHVlOwotCWF0aV9wYWdlX21hcCBwYWdlX2RpcjsKKwlzdHJ1Y3QgYXRpX3BhZ2VfbWFwIHBhZ2VfZGlyOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlpbnQgcmV0dmFsOwogCXUzMiB0ZW1wOwpAQCAtNDAwLDcgKzQwMCw3IEBACiAKIHN0YXRpYyBpbnQgYXRpX2ZyZWVfZ2F0dF90YWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpCiB7Ci0JYXRpX3BhZ2VfbWFwIHBhZ2VfZGlyOworCXN0cnVjdCBhdGlfcGFnZV9tYXAgcGFnZV9kaXI7CiAKIAlwYWdlX2Rpci5yZWFsID0gKHVuc2lnbmVkIGxvbmcgKilhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlX3JlYWw7CiAJcGFnZV9kaXIucmVtYXBwZWQgPSAodW5zaWduZWQgbG9uZyBfX2lvbWVtICopYWdwX2JyaWRnZS0+Z2F0dF90YWJsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKaW5kZXggNWZmNDU3Yi4uMzQ5MWQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKQEAgLTQxOSw2ICs0MTksMzEgQEAKIAkJKnJlcXVlc3RlZF9tb2RlICY9IH5BR1AyX1JFU0VSVkVEX01BU0s7CiAJfQogCisJLyoKKwkgKiBTb21lIGR1bWIgYnJpZGdlcyBhcmUgcHJvZ3JhbW1lZCB0byBkaXNvYmV5IHRoZSBBR1AyIHNwZWMuCisJICogVGhpcyBpcyBsaWtlbHkgYSBCSU9TIG1pc3Byb2dyYW1taW5nIHJhdGhlciB0aGFuIHBvd2Vyb24gZGVmYXVsdCwgb3IKKwkgKiBpdCB3b3VsZCBiZSBhIGxvdCBtb3JlIGNvbW1vbi4KKwkgKiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD04ODE2CisJICogQUdQdjIgc3BlYyA2LjEuOSBzdGF0ZXM6CisJICogICBUaGUgUkFURSBmaWVsZCBpbmRpY2F0ZXMgdGhlIGRhdGEgdHJhbnNmZXIgcmF0ZXMgc3VwcG9ydGVkIGJ5IHRoaXMKKwkgKiAgIGRldmljZS4gQS5HLlAuIGRldmljZXMgbXVzdCByZXBvcnQgYWxsIHRoYXQgYXBwbHkuCisJICogRml4IHRoZW0gdXAgYXMgYmVzdCB3ZSBjYW4uCisJICovCisJc3dpdGNoICgqYnJpZGdlX2FncHN0YXQgJiA3KSB7CisJY2FzZSA0OgorCQkqYnJpZGdlX2FncHN0YXQgfD0gKEFHUFNUQVQyXzJYIHwgQUdQU1RBVDJfMVgpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQklPUyBidWcuIEFHUCBicmlkZ2UgY2xhaW1zIHRvIG9ubHkgc3VwcG9ydCB4NCByYXRlIgorCQkJIkZpeGluZyB1cCBzdXBwb3J0IGZvciB4MiAmIHgxXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqYnJpZGdlX2FncHN0YXQgfD0gQUdQU1RBVDJfMVg7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJCSU9TIGJ1Zy4gQUdQIGJyaWRnZSBjbGFpbXMgdG8gb25seSBzdXBwb3J0IHgyIHJhdGUiCisJCQkiRml4aW5nIHVwIHN1cHBvcnQgZm9yIHgxXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCiAJLyogQ2hlY2sgdGhlIHNwZWVkIGJpdHMgbWFrZSBzZW5zZS4gT25seSBvbmUgc2hvdWxkIGJlIHNldC4gKi8KIAl0bXAgPSAqcmVxdWVzdGVkX21vZGUgJiA3OwogCXN3aXRjaCAodG1wKSB7CkBAIC05NDAsNiArOTY1LDkgQEAKIAlpZiAoIWJyaWRnZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAobWVtLT5wYWdlX2NvdW50ID09IDApCisJCXJldHVybiAwOworCiAJdGVtcCA9IGJyaWRnZS0+Y3VycmVudF9zaXplOwogCiAJc3dpdGNoIChicmlkZ2UtPmRyaXZlci0+c2l6ZV90eXBlKSB7CkBAIC05OTEsOCArMTAxOSw4IEBACiAKIAlmb3IgKGkgPSAwLCBqID0gcGdfc3RhcnQ7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgaisrKSB7CiAJCXdyaXRlbChicmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkoYnJpZGdlLCBtZW0tPm1lbW9yeVtpXSwgbWVtLT50eXBlKSwgYnJpZGdlLT5nYXR0X3RhYmxlK2opOwotCQlyZWFkbChicmlkZ2UtPmdhdHRfdGFibGUraik7CS8qIFBDSSBQb3N0aW5nLiAqLwogCX0KKwlyZWFkbChicmlkZ2UtPmdhdHRfdGFibGUrai0xKTsJLyogUENJIFBvc3RpbmcuICovCiAKIAlicmlkZ2UtPmRyaXZlci0+dGxiX2ZsdXNoKG1lbSk7CiAJcmV0dXJuIDA7CkBAIC0xMDA5LDYgKzEwMzcsOSBAQAogCWlmICghYnJpZGdlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChtZW0tPnBhZ2VfY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKIAlpZiAodHlwZSAhPSAwIHx8IG1lbS0+dHlwZSAhPSAwKSB7CiAJCS8qIFRoZSBnZW5lcmljIHJvdXRpbmVzIGtub3cgbm90aGluZyBvZiBtZW1vcnkgdHlwZXMgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDE3LDEwICsxMDQ4LDkgQEAKIAkvKiBBSzogYm9ndXMsIHNob3VsZCBlbmNvZGUgYWRkcmVzc2VzID4gNEdCICovCiAJZm9yIChpID0gcGdfc3RhcnQ7IGkgPCAobWVtLT5wYWdlX2NvdW50ICsgcGdfc3RhcnQpOyBpKyspIHsKIAkJd3JpdGVsKGJyaWRnZS0+c2NyYXRjaF9wYWdlLCBicmlkZ2UtPmdhdHRfdGFibGUraSk7Ci0JCXJlYWRsKGJyaWRnZS0+Z2F0dF90YWJsZStpKTsJLyogUENJIFBvc3RpbmcuICovCiAJfQorCXJlYWRsKGJyaWRnZS0+Z2F0dF90YWJsZStpLTEpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAotCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwogCWJyaWRnZS0+ZHJpdmVyLT50bGJfZmx1c2gobWVtKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDU1NWIzYTguLmEzMDExZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtMjA3LDYgKzIwNyw5IEBACiAJaW50IGksIGosIG51bV9lbnRyaWVzOwogCXZvaWQgKnRlbXA7CiAKKwlpZiAobWVtLT5wYWdlX2NvdW50ID09IDApCisJCXJldHVybiAwOworCiAJdGVtcCA9IGFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZTsKIAludW1fZW50cmllcyA9IEFfU0laRV9GSVgodGVtcCktPm51bV9lbnRyaWVzOwogCkBAIC0yMjEsMTIgKzIyNCwxNiBAQAogCWlmICh0eXBlICE9IDAgfHwgbWVtLT50eXBlICE9IDApIHsKIAkJaWYgKCh0eXBlID09IEFHUF9EQ0FDSEVfTUVNT1JZKSAmJiAobWVtLT50eXBlID09IEFHUF9EQ0FDSEVfTUVNT1JZKSkgewogCQkJLyogc3BlY2lhbCBpbnNlcnQgKi8KLQkJCWdsb2JhbF9jYWNoZV9mbHVzaCgpOworCQkJaWYgKCFtZW0tPmlzX2ZsdXNoZWQpIHsKKwkJCQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKKwkJCQltZW0tPmlzX2ZsdXNoZWQgPSBUUlVFOworCQkJfQorCiAJCQlmb3IgKGkgPSBwZ19zdGFydDsgaSA8IChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCk7IGkrKykgewogCQkJCXdyaXRlbCgoaSo0MDk2KXxJODEwX1BURV9MT0NBTHxJODEwX1BURV9WQUxJRCwgaW50ZWxfaTgxMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsKLQkJCQlyZWFkbChpbnRlbF9pODEwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGkqNCkpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAkJCX0KLQkJCWdsb2JhbF9jYWNoZV9mbHVzaCgpOworCQkJcmVhZGwoaW50ZWxfaTgxMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoaS0xKSo0KSk7CS8qIFBDSSBQb3N0aW5nLiAqLworCiAJCQlhZ3BfYnJpZGdlLT5kcml2ZXItPnRsYl9mbHVzaChtZW0pOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTIzNiwxNCArMjQzLDE3IEBACiAJfQogCiBpbnNlcnQ6Ci0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CisJaWYgKCFtZW0tPmlzX2ZsdXNoZWQpIHsKKwkJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CisJCW1lbS0+aXNfZmx1c2hlZCA9IFRSVUU7CisJfQorCiAJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAogCQkJbWVtLT5tZW1vcnlbaV0sIG1lbS0+dHlwZSksCiAJCQlpbnRlbF9pODEwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGoqNCkpOwotCQlyZWFkbChpbnRlbF9pODEwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGoqNCkpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9Ci0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CisJcmVhZGwoaW50ZWxfaTgxMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoai0xKSo0KSk7CS8qIFBDSSBQb3N0aW5nLiAqLwogCiAJYWdwX2JyaWRnZS0+ZHJpdmVyLT50bGJfZmx1c2gobWVtKTsKIAlyZXR1cm4gMDsKQEAgLTI1NCwxMiArMjY0LDE0IEBACiB7CiAJaW50IGk7CiAKKwlpZiAobWVtLT5wYWdlX2NvdW50ID09IDApCisJCXJldHVybiAwOworCiAJZm9yIChpID0gcGdfc3RhcnQ7IGkgPCAobWVtLT5wYWdlX2NvdW50ICsgcGdfc3RhcnQpOyBpKyspIHsKIAkJd3JpdGVsKGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZSwgaW50ZWxfaTgxMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsKLQkJcmVhZGwoaW50ZWxfaTgxMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsJLyogUENJIFBvc3RpbmcuICovCiAJfQorCXJlYWRsKGludGVsX2k4MTBfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoKGktMSkqNCkpOwogCi0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CiAJYWdwX2JyaWRnZS0+ZHJpdmVyLT50bGJfZmx1c2gobWVtKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM3MCw2ICszODIsMTEgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqaTgzMF9kZXY7CQkvKiBkZXZpY2Ugb25lICovCiAJdm9sYXRpbGUgdTggX19pb21lbSAqcmVnaXN0ZXJzOwogCXZvbGF0aWxlIHUzMiBfX2lvbWVtICpndHQ7CQkvKiBJOTE1RyAqLworCS8qIGd0dF9lbnRyaWVzIGlzIHRoZSBudW1iZXIgb2YgZ3R0IGVudHJpZXMgdGhhdCBhcmUgYWxyZWFkeSBtYXBwZWQKKwkgKiB0byBzdG9sZW4gbWVtb3J5LiAgU3RvbGVuIG1lbW9yeSBpcyBsYXJnZXIgdGhhbiB0aGUgbWVtb3J5IG1hcHBlZAorCSAqIHRocm91Z2ggZ3R0X2VudHJpZXMsIGFzIGl0IGluY2x1ZGVzIHNvbWUgcmVzZXJ2ZWQgc3BhY2UgZm9yIHRoZSBCSU9TCisJICogcG9wdXAgYW5kIGZvciB0aGUgR1RULgorCSAqLwogCWludCBndHRfZW50cmllczsKIH0gaW50ZWxfaTgzMF9wcml2YXRlOwogCkBAIC0zODAsMTQgKzM5Nyw0MSBAQAogCXU4IHJkY3Q7CiAJaW50IGxvY2FsID0gMDsKIAlzdGF0aWMgY29uc3QgaW50IGRkdFs0XSA9IHsgMCwgMTYsIDMyLCA2NCB9OwotCWludCBzaXplOworCWludCBzaXplOyAvKiByZXNlcnZlZCBzcGFjZSAoaW4ga2IpIGF0IHRoZSB0b3Agb2Ygc3RvbGVuIG1lbW9yeSAqLwogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWdwX2JyaWRnZS0+ZGV2LEk4MzBfR01DSF9DVFJMLCZnbWNoX2N0cmwpOwogCi0JLyogV2Ugb2J0YWluIHRoZSBzaXplIG9mIHRoZSBHVFQsIHdoaWNoIGlzIGFsc28gc3RvcmVkIChmb3Igc29tZQotCSAqIHJlYXNvbikgYXQgdGhlIHRvcCBvZiBzdG9sZW4gbWVtb3J5LiBUaGVuIHdlIGFkZCA0S0IgdG8gdGhhdAotCSAqIGZvciB0aGUgdmlkZW8gQklPUyBwb3B1cCwgd2hpY2ggaXMgYWxzbyBzdG9yZWQgaW4gdGhlcmUuICovCi0Jc2l6ZSA9IGFncF9icmlkZ2UtPmRyaXZlci0+ZmV0Y2hfc2l6ZSgpICsgNDsKKwlpZiAoSVNfSTk2NSkgeworCQl1MzIgcGdldGJsX2N0bDsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWdwX2JyaWRnZS0+ZGV2LCBJODEwX1BHRVRCTF9DVEwsCisJCQkJICAgICAgJnBnZXRibF9jdGwpOworCQkvKiBUaGUgOTY1IGhhcyBhIGZpZWxkIHRlbGxpbmcgdXMgdGhlIHNpemUgb2YgdGhlIEdUVCwKKwkJICogd2hpY2ggbWF5IGJlIGxhcmdlciB0aGFuIHdoYXQgaXMgbmVjZXNzYXJ5IHRvIG1hcCB0aGUKKwkJICogYXBlcnR1cmUuCisJCSAqLworCQlzd2l0Y2ggKHBnZXRibF9jdGwgJiBJOTY1X1BHRVRCTF9TSVpFX01BU0spIHsKKwkJY2FzZSBJOTY1X1BHRVRCTF9TSVpFXzEyOEtCOgorCQkJc2l6ZSA9IDEyODsKKwkJCWJyZWFrOworCQljYXNlIEk5NjVfUEdFVEJMX1NJWkVfMjU2S0I6CisJCQlzaXplID0gMjU2OworCQkJYnJlYWs7CisJCWNhc2UgSTk2NV9QR0VUQkxfU0laRV81MTJLQjoKKwkJCXNpemUgPSA1MTI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJVbmtub3duIHBhZ2UgdGFibGUgc2l6ZSwgIgorCQkJICAgICAgICJhc3N1bWluZyA1MTJLQlxuIik7CisJCQlzaXplID0gNTEyOworCQl9CisJCXNpemUgKz0gNDsgLyogYWRkIGluIEJJT1MgcG9wdXAgc3BhY2UgKi8KKwl9IGVsc2UgeworCQkvKiBPbiBwcmV2aW91cyBoYXJkd2FyZSwgdGhlIEdUVCBzaXplIHdhcyBqdXN0IHdoYXQgd2FzCisJCSAqIHJlcXVpcmVkIHRvIG1hcCB0aGUgYXBlcnR1cmUuCisJCSAqLworCQlzaXplID0gYWdwX2JyaWRnZS0+ZHJpdmVyLT5mZXRjaF9zaXplKCkgKyA0OworCX0KIAogCWlmIChhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODMwX0hCIHx8CiAJICAgIGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NDVHX0hCKSB7CkBAIC01NzYsNiArNjIwLDkgQEAKIAlpbnQgaSxqLG51bV9lbnRyaWVzOwogCXZvaWQgKnRlbXA7CiAKKwlpZiAobWVtLT5wYWdlX2NvdW50ID09IDApCisJCXJldHVybiAwOworCiAJdGVtcCA9IGFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZTsKIAludW1fZW50cmllcyA9IEFfU0laRV9GSVgodGVtcCktPm51bV9lbnRyaWVzOwogCkBAIC01OTgsMTYgKzY0NSwxOCBAQAogCQkobWVtLT50eXBlICE9IDAgJiYgbWVtLT50eXBlICE9IEFHUF9QSFlTX01FTU9SWSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CS8qIEZJWE1FOiBOZWNlc3NhcnkgPyovCisJaWYgKCFtZW0tPmlzX2ZsdXNoZWQpIHsKKwkJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CisJCW1lbS0+aXNfZmx1c2hlZCA9IFRSVUU7CisJfQogCiAJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAogCQkJbWVtLT5tZW1vcnlbaV0sIG1lbS0+dHlwZSksCiAJCQlpbnRlbF9pODMwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGoqNCkpOwotCQlyZWFkbChpbnRlbF9pODMwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGoqNCkpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CisJcmVhZGwoaW50ZWxfaTgzMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoai0xKSo0KSk7CiAKLQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKIAlhZ3BfYnJpZGdlLT5kcml2ZXItPnRsYl9mbHVzaChtZW0pOwogCXJldHVybiAwOwogfQpAQCAtNjE3LDcgKzY2Niw4IEBACiB7CiAJaW50IGk7CiAKLQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKKwlpZiAobWVtLT5wYWdlX2NvdW50ID09IDApCisJCXJldHVybiAwOwogCiAJaWYgKHBnX3N0YXJ0IDwgaW50ZWxfaTgzMF9wcml2YXRlLmd0dF9lbnRyaWVzKSB7CiAJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVHJ5aW5nIHRvIGRpc2FibGUgbG9jYWwvc3RvbGVuIG1lbW9yeVxuIik7CkBAIC02MjYsMTAgKzY3Niw5IEBACiAKIAlmb3IgKGkgPSBwZ19zdGFydDsgaSA8IChtZW0tPnBhZ2VfY291bnQgKyBwZ19zdGFydCk7IGkrKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+c2NyYXRjaF9wYWdlLCBpbnRlbF9pODMwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGkqNCkpOwotCQlyZWFkbChpbnRlbF9pODMwX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGkqNCkpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CisJcmVhZGwoaW50ZWxfaTgzMF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoaS0xKSo0KSk7CiAKLQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKIAlhZ3BfYnJpZGdlLT5kcml2ZXItPnRsYl9mbHVzaChtZW0pOwogCXJldHVybiAwOwogfQpAQCAtNjg2LDYgKzczNSw5IEBACiAJaW50IGksaixudW1fZW50cmllczsKIAl2b2lkICp0ZW1wOwogCisJaWYgKG1lbS0+cGFnZV9jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKwogCXRlbXAgPSBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemU7CiAJbnVtX2VudHJpZXMgPSBBX1NJWkVfRklYKHRlbXApLT5udW1fZW50cmllczsKIApAQCAtNzA4LDE1ICs3NjAsMTcgQEAKIAkJKG1lbS0+dHlwZSAhPSAwICYmIG1lbS0+dHlwZSAhPSBBR1BfUEhZU19NRU1PUlkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWdsb2JhbF9jYWNoZV9mbHVzaCgpOworCWlmICghbWVtLT5pc19mbHVzaGVkKSB7CisJCWdsb2JhbF9jYWNoZV9mbHVzaCgpOworCQltZW0tPmlzX2ZsdXNoZWQgPSBUUlVFOworCX0KIAogCWZvciAoaSA9IDAsIGogPSBwZ19zdGFydDsgaSA8IG1lbS0+cGFnZV9jb3VudDsgaSsrLCBqKyspIHsKIAkJd3JpdGVsKGFncF9icmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkoYWdwX2JyaWRnZSwKIAkJCW1lbS0+bWVtb3J5W2ldLCBtZW0tPnR5cGUpLCBpbnRlbF9pODMwX3ByaXZhdGUuZ3R0K2opOwotCQlyZWFkbChpbnRlbF9pODMwX3ByaXZhdGUuZ3R0K2opOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CisJcmVhZGwoaW50ZWxfaTgzMF9wcml2YXRlLmd0dCtqLTEpOwogCi0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CiAJYWdwX2JyaWRnZS0+ZHJpdmVyLT50bGJfZmx1c2gobWVtKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTcyNiw3ICs3ODAsOCBAQAogewogCWludCBpOwogCi0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CisJaWYgKG1lbS0+cGFnZV9jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKIAogCWlmIChwZ19zdGFydCA8IGludGVsX2k4MzBfcHJpdmF0ZS5ndHRfZW50cmllcykgewogCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlRyeWluZyB0byBkaXNhYmxlIGxvY2FsL3N0b2xlbiBtZW1vcnlcbiIpOwpAQCAtNzM1LDMwICs3OTAsMzQgQEAKIAogCWZvciAoaSA9IHBnX3N0YXJ0OyBpIDwgKG1lbS0+cGFnZV9jb3VudCArIHBnX3N0YXJ0KTsgaSsrKSB7CiAJCXdyaXRlbChhZ3BfYnJpZGdlLT5zY3JhdGNoX3BhZ2UsIGludGVsX2k4MzBfcHJpdmF0ZS5ndHQraSk7Ci0JCXJlYWRsKGludGVsX2k4MzBfcHJpdmF0ZS5ndHQraSk7CiAJfQorCXJlYWRsKGludGVsX2k4MzBfcHJpdmF0ZS5ndHQraS0xKTsKIAotCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwogCWFncF9icmlkZ2UtPmRyaXZlci0+dGxiX2ZsdXNoKG1lbSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW50ZWxfaTkxNV9mZXRjaF9zaXplKHZvaWQpCisvKiBSZXR1cm4gdGhlIGFwZXJ0dXJlIHNpemUgYnkganVzdCBjaGVja2luZyB0aGUgcmVzb3VyY2UgbGVuZ3RoLiAgVGhlIGVmZmVjdAorICogZGVzY3JpYmVkIGluIHRoZSBzcGVjIG9mIHRoZSBNU0FDIHJlZ2lzdGVycyBpcyBqdXN0IGNoYW5naW5nIG9mIHRoZQorICogcmVzb3VyY2Ugc2l6ZS4KKyAqLworc3RhdGljIGludCBpbnRlbF9pOXh4X2ZldGNoX3NpemUodm9pZCkKIHsKLQlzdHJ1Y3QgYXBlcl9zaXplX2luZm9fZml4ZWQgKnZhbHVlczsKLQl1MzIgdGVtcCwgb2Zmc2V0OworCWludCBudW1fc2l6ZXMgPSBzaXplb2YoaW50ZWxfaTgzMF9zaXplcykgLyBzaXplb2YoKmludGVsX2k4MzBfc2l6ZXMpOworCWludCBhcGVyX3NpemU7IC8qIHNpemUgaW4gbWVnYWJ5dGVzICovCisJaW50IGk7CiAKLSNkZWZpbmUgSTkxNV8yNTZNQl9BRERSRVNTX01BU0sgKDE8PDI3KQorCWFwZXJfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oaW50ZWxfaTgzMF9wcml2YXRlLmk4MzBfZGV2LCAyKSAvIE1CKDEpOwogCi0JdmFsdWVzID0gQV9TSVpFX0ZJWChhZ3BfYnJpZGdlLT5kcml2ZXItPmFwZXJ0dXJlX3NpemVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NpemVzOyBpKyspIHsKKwkJaWYgKGFwZXJfc2l6ZSA9PSBpbnRlbF9pODMwX3NpemVzW2ldLnNpemUpIHsKKwkJCWFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZSA9IGludGVsX2k4MzBfc2l6ZXMgKyBpOworCQkJYWdwX2JyaWRnZS0+cHJldmlvdXNfc2l6ZSA9IGFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZTsKKwkJCXJldHVybiBhcGVyX3NpemU7CisJCX0KKwl9CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoaW50ZWxfaTgzMF9wcml2YXRlLmk4MzBfZGV2LCBJOTE1X0dNQUREUiwgJnRlbXApOwotCWlmICh0ZW1wICYgSTkxNV8yNTZNQl9BRERSRVNTX01BU0spCi0JCW9mZnNldCA9IDA7CS8qIDEyOE1CIGFwZXJ0dXJlICovCi0JZWxzZQotCQlvZmZzZXQgPSAyOwkvKiAyNTZNQiBhcGVydHVyZSAqLwotCWFncF9icmlkZ2UtPnByZXZpb3VzX3NpemUgPSBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemUgPSAodm9pZCAqKSh2YWx1ZXMgKyBvZmZzZXQpOwotCXJldHVybiB2YWx1ZXNbb2Zmc2V0XS5zaXplOworCXJldHVybiAwOwogfQogCiAvKiBUaGUgaW50ZWwgaTkxNSBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemVzIHRoZSBhZ3AgYXBlcnR1cmUgZHVyaW5nIFBPU1QuCkBAIC04MjEsNDAgKzg4MCw5IEBACiAJcmV0dXJuIGFkZHIgfCBicmlkZ2UtPmRyaXZlci0+bWFza3NbdHlwZV0ubWFzazsKIH0KIAotc3RhdGljIGludCBpbnRlbF9pOTY1X2ZldGNoX3NpemUodm9pZCkKLXsKLSAgICAgICBzdHJ1Y3QgYXBlcl9zaXplX2luZm9fZml4ZWQgKnZhbHVlczsKLSAgICAgICB1MzIgb2Zmc2V0ID0gMDsKLSAgICAgICB1OCB0ZW1wOwotCi0jZGVmaW5lIEk5NjVfNTEyTUJfQUREUkVTU19NQVNLICgzPDwxKQotCi0gICAgICAgdmFsdWVzID0gQV9TSVpFX0ZJWChhZ3BfYnJpZGdlLT5kcml2ZXItPmFwZXJ0dXJlX3NpemVzKTsKLQotICAgICAgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGludGVsX2k4MzBfcHJpdmF0ZS5pODMwX2RldiwgSTk2NV9NU0FDLCAmdGVtcCk7Ci0gICAgICAgdGVtcCAmPSBJOTY1XzUxMk1CX0FERFJFU1NfTUFTSzsKLSAgICAgICBzd2l0Y2ggKHRlbXApIHsKLSAgICAgICBjYXNlIDB4MDA6Ci0gICAgICAgICAgICAgICBvZmZzZXQgPSAwOyAvKiAxMjhNQiAqLwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSAweDA2OgotICAgICAgICAgICAgICAgb2Zmc2V0ID0gMzsgLyogNTEyTUIgKi8KLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgY2FzZSAweDAyOgotICAgICAgICAgICAgICAgb2Zmc2V0ID0gMjsgLyogMjU2TUIgKi8KLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIH0KLQotICAgICAgIGFncF9icmlkZ2UtPnByZXZpb3VzX3NpemUgPSBhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemUgPSAodm9pZCAqKSh2YWx1ZXMgKyBvZmZzZXQpOwotCi0JLyogVGhlIGk5NjUgR1RUIGlzIGFsd2F5cyBzaXplZCBhcyBpZiBpdCBoYWQgYSA1MTJrQiBhcGVydHVyZSBzaXplICovCi0JcmV0dXJuIDUxMjsKLX0KLQogLyogVGhlIGludGVsIGk5NjUgYXV0b21hdGljYWxseSBpbml0aWFsaXplcyB0aGUgYWdwIGFwZXJ0dXJlIGR1cmluZyBQT1NULgotKyAqIFVzZSB0aGUgbWVtb3J5IGFscmVhZHkgc2V0IGFzaWRlIGZvciBpbiB0aGUgR1RULgotKyAqLworICogVXNlIHRoZSBtZW1vcnkgYWxyZWFkeSBzZXQgYXNpZGUgZm9yIGluIHRoZSBHVFQuCisgKi8KIHN0YXRpYyBpbnQgaW50ZWxfaTk2NV9jcmVhdGVfZ2F0dF90YWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpCiB7CiAgICAgICAgaW50IHBhZ2Vfb3JkZXI7CkBAIC0xNTc0LDcgKzE2MDIsNyBAQAogCS5udW1fYXBlcnR1cmVfc2l6ZXMJPSA0LAogCS5uZWVkc19zY3JhdGNoX3BhZ2UJPSBUUlVFLAogCS5jb25maWd1cmUJCT0gaW50ZWxfaTkxNV9jb25maWd1cmUsCi0JLmZldGNoX3NpemUJCT0gaW50ZWxfaTkxNV9mZXRjaF9zaXplLAorCS5mZXRjaF9zaXplCQk9IGludGVsX2k5eHhfZmV0Y2hfc2l6ZSwKIAkuY2xlYW51cAkJPSBpbnRlbF9pOTE1X2NsZWFudXAsCiAJLnRsYl9mbHVzaAkJPSBpbnRlbF9pODEwX3RsYmZsdXNoLAogCS5tYXNrX21lbW9yeQkJPSBpbnRlbF9pODEwX21hc2tfbWVtb3J5LApAQCAtMTU5OCw3ICsxNjI2LDcgQEAKICAgICAgICAubnVtX2FwZXJ0dXJlX3NpemVzICAgICA9IDQsCiAgICAgICAgLm5lZWRzX3NjcmF0Y2hfcGFnZSAgICAgPSBUUlVFLAogICAgICAgIC5jb25maWd1cmUgICAgICAgICAgICAgID0gaW50ZWxfaTkxNV9jb25maWd1cmUsCi0gICAgICAgLmZldGNoX3NpemUgICAgICAgICAgICAgPSBpbnRlbF9pOTY1X2ZldGNoX3NpemUsCisgICAgICAgLmZldGNoX3NpemUgICAgICAgICAgICAgPSBpbnRlbF9pOXh4X2ZldGNoX3NpemUsCiAgICAgICAgLmNsZWFudXAgICAgICAgICAgICAgICAgPSBpbnRlbF9pOTE1X2NsZWFudXAsCiAgICAgICAgLnRsYl9mbHVzaCAgICAgICAgICAgICAgPSBpbnRlbF9pODEwX3RsYmZsdXNoLAogICAgICAgIC5tYXNrX21lbW9yeSAgICAgICAgICAgID0gaW50ZWxfaTk2NV9tYXNrX21lbW9yeSwKQEAgLTE5MjcsNiArMTk1NSwxNSBAQAogCiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKKwkvKiBXZSBzaG91bGQgcmVzdG9yZSBvdXIgZ3JhcGhpY3MgZGV2aWNlJ3MgY29uZmlnIHNwYWNlLAorCSAqIGFzIGhvc3QgYnJpZGdlICgwMDowMCkgcmVzdW1lcyBiZWZvcmUgZ3JhcGhpY3MgZGV2aWNlICgwMjowMCksCisJICogdGhlbiBvdXIgYWNjZXNzIHRvIGl0cyBwY2kgc3BhY2UgY2FuIHdvcmsgcmlnaHQuCisJICovCisJaWYgKGludGVsX2k4MTBfcHJpdmF0ZS5pODEwX2RldikKKwkJcGNpX3Jlc3RvcmVfc3RhdGUoaW50ZWxfaTgxMF9wcml2YXRlLmk4MTBfZGV2KTsKKwlpZiAoaW50ZWxfaTgzMF9wcml2YXRlLmk4MzBfZGV2KQorCQlwY2lfcmVzdG9yZV9zdGF0ZShpbnRlbF9pODMwX3ByaXZhdGUuaTgzMF9kZXYpOworCiAJaWYgKGJyaWRnZS0+ZHJpdmVyID09ICZpbnRlbF9nZW5lcmljX2RyaXZlcikKIAkJaW50ZWxfY29uZmlndXJlKCk7CiAJZWxzZSBpZiAoYnJpZGdlLT5kcml2ZXIgPT0gJmludGVsXzg1MF9kcml2ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3NnaS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3Avc2dpLWFncC5jCmluZGV4IGQ3M2JlNGMuLjkwMjY0OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3Avc2dpLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3Avc2dpLWFncC5jCkBAIC0yODEsMTAgKzI4MSwxMSBAQAogCWVsc2UKIAkJcmV0dXJuIDA7CiAKLQlzZ2lfdGlvY2FfYWdwX2JyaWRnZXMgPQotCSAgICAoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqKilrbWFsbG9jKHRpb2NhX2dhcnRfZm91bmQgKgotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKiksCi0JCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlzZ2lfdGlvY2FfYWdwX2JyaWRnZXMgPSBrbWFsbG9jKHRpb2NhX2dhcnRfZm91bmQgKgorCQkJCQlzaXplb2Yoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFzZ2lfdGlvY2FfYWdwX2JyaWRnZXMpCisJCXJldHVybiAtRU5PTUVNOwogCiAJaiA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbmZvLCAmdGlvY2FfbGlzdCwgY2FfbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwppbmRleCBjMTQ5YWM5Li4yZGVkN2EyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKQEAgLTM4MCw5ICszODAsMjMgQEAKIAkvKiBQNE04MDBDRSAqLwogCXsKIAkJLmRldmljZV9pZAk9IFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFLAotCQkuY2hpcHNldF9uYW1lCT0gIlA0TTgwMENFIiwKKwkJLmNoaXBzZXRfbmFtZQk9ICJWVDMzMTQiLAogCX0sCi0KKwkvKiBDWDcwMCAqLworCXsKKwkJLmRldmljZV9pZCAgPSBQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCwKKwkJLmNoaXBzZXRfbmFtZSAgID0gIkNYNzAwIiwKKwl9LAorCS8qIFZUMzMzNiAqLworCXsKKwkJLmRldmljZV9pZCAgPSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMzYsCisJCS5jaGlwc2V0X25hbWUgICA9ICJWVDMzMzYiLAorCX0sCisJLyogUDRNODkwICovCisJeworCQkuZGV2aWNlX2lkICA9IFBDSV9ERVZJQ0VfSURfVklBX1A0TTg5MCwKKwkJLmNoaXBzZXRfbmFtZSAgID0gIlA0TTg5MCIsCisJfSwKIAl7IH0sIC8qIGR1bW15IGZpbmFsIGVudHJ5LCBhbHdheXMgcHJlc2VudCAqLwogfTsKIApAQCAtNTI0LDYgKzUzOCw5IEBACiAJSUQoUENJX0RFVklDRV9JRF9WSUFfODNfODdYWF8xKSwKIAlJRChQQ0lfREVWSUNFX0lEX1ZJQV8zMjk2XzApLAogCUlEKFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFKSwKKwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCksCisJSUQoUENJX0RFVklDRV9JRF9WSUFfVlQzMzM2KSwKKwlJRChQQ0lfREVWSUNFX0lEX1ZJQV9QNE04OTApLAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jIGIvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCmluZGV4IDY2MDg2ZmEuLmZlYjRhYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYworKysgYi9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBjdXJyZW50X2N0bF9iaXRzOwogCi1zdGF0aWMgdm9pZCBjaGFuZ2Vfc3BlZWQoc3RydWN0IGFzeW5jX3N0cnVjdCAqaW5mbywgc3RydWN0IHRlcm1pb3MgKm9sZCk7CitzdGF0aWMgdm9pZCBjaGFuZ2Vfc3BlZWQoc3RydWN0IGFzeW5jX3N0cnVjdCAqaW5mbywgc3RydWN0IGt0ZXJtaW9zICpvbGQpOwogc3RhdGljIHZvaWQgcnNfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KTsKIAogCkBAIC02OTQsNyArNjk0LDcgQEAKICAqIHRoZSBzcGVjaWZpZWQgYmF1ZCByYXRlIGZvciBhIHNlcmlhbCBwb3J0LgogICovCiBzdGF0aWMgdm9pZCBjaGFuZ2Vfc3BlZWQoc3RydWN0IGFzeW5jX3N0cnVjdCAqaW5mbywKLQkJCSBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCisJCQkgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlpbnQJcXVvdCA9IDAsIGJhdWRfYmFzZSwgYmF1ZDsKIAl1bnNpZ25lZCBjZmxhZywgY3ZhbCA9IDA7CkBAIC0xMzY1LDcgKzEzNjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCByc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCBhc3luY19zdHJ1Y3QgKmluZm8gPSAoc3RydWN0IGFzeW5jX3N0cnVjdCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9jb25zb2xlbWFwLmMgYi9kcml2ZXJzL2NoYXIvY29uc29sZW1hcC5jCmluZGV4IDA0YTEyMDIuLmI5OWI3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9jb25zb2xlbWFwLmMKKysrIGIvZHJpdmVycy9jaGFyL2NvbnNvbGVtYXAuYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJcCA9IChzdHJ1Y3QgdW5pX3BhZ2VkaXIgKikqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYzsKIAlpZiAocCAmJiBwLT5yZWFkb25seSkgcmV0dXJuIC1FSU87CiAJaWYgKCFwIHx8IC0tcC0+cmVmY291bnQpIHsKLQkJcSA9IChzdHJ1Y3QgdW5pX3BhZ2VkaXIgKilrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCQlxID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFxKSB7CiAJCQlpZiAocCkgcC0+cmVmY291bnQrKzsKIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2NzNTUzNV9ncGlvLmMgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwppbmRleCA4Y2UzZjM0Li5jMDJkOWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvY3M1NTM1X2dwaW8uYwpAQCAtODIsNyArODIsNyBAQAogc3RhdGljIHNzaXplX3QgY3M1NTM1X2dwaW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAogCQkJCSBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7Ci0JdTMyCW0gPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXUzMgltID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWludAlpLCBqOwogCXUzMgliYXNlID0gZ3Bpb19iYXNlICsgY3M1NTM1X2xvd2hpZ2hfYmFzZShtKTsKIAl1MzIJbTAsIG0xOwpAQCAtMTE3LDcgKzExNyw3IEBACiBzdGF0aWMgc3NpemVfdCBjczU1MzVfZ3Bpb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKLQl1MzIJbSA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJdTMyCW0gPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJdTMyCWJhc2UgPSBncGlvX2Jhc2UgKyBjczU1MzVfbG93aGlnaF9iYXNlKG0pOwogCWludAlyZF9iaXQgPSAxIDw8IChtICYgMHgwZik7CiAJaW50CWk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCmluZGV4IGFjYjJkZTUuLjNmZmEwODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCisrKyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCkBAIC0xLDggKzEsNiBAQAogI3VuZGVmCUJMT0NLTU9WRQogI2RlZmluZQlaX1dBS0UKICN1bmRlZglaX0VYVF9DSEFSU19JTl9CVUZGRVIKLXN0YXRpYyBjaGFyIHJjc2lkW10gPQotIiRSZXZpc2lvbjogMi4zLjIuMjAgJCREYXRlOiAyMDA0LzAyLzI1IDE4OjE0OjE2ICQiOwogCiAvKgogICogIGxpbnV4L2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCkBAIC01OTMsMTggKzU5MSwyMCBAQAogICoKICAqLwogCisjZGVmaW5lIENZX1ZFUlNJT04JIjIuNCIKKwogLyogSWYgeW91IG5lZWQgdG8gaW5zdGFsbCBtb3JlIGJvYXJkcyB0aGFuIE5SX0NBUkRTLCBjaGFuZ2UgdGhlIGNvbnN0YW50CiAgICBpbiB0aGUgZGVmaW5pdGlvbiBiZWxvdy4gTm8gb3RoZXIgY2hhbmdlIGlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IHVwIHRvCiAgICBlaWdodCBib2FyZHMuIEJleW9uZCB0aGF0IHlvdSdsbCBoYXZlIHRvIGV4dGVuZCBjeV9pc2FfYWRkcmVzc2VzLiAqLwogCi0jZGVmaW5lIE5SX0NBUkRTICAgICAgICA0CisjZGVmaW5lIE5SX0NBUkRTCTQKIAogLyoKICAgIElmIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9ydHMgaXMgbGFyZ2VyIHRoYW4gTlJfUE9SVFMsIGNoYW5nZSB0aGlzCiAgICBjb25zdGFudCBpbiB0aGUgZGVmaW5pdGlvbiBiZWxvdy4gTm8gb3RoZXIgY2hhbmdlIGlzIG5lY2Vzc2FyeSB0bwogICAgc3VwcG9ydCBtb3JlIGJvYXJkcy9wb3J0cy4gKi8KIAotI2RlZmluZSBOUl9QT1JUUyAgICAgICAgMjU2CisjZGVmaW5lIE5SX1BPUlRTCTI1NgogCiAjZGVmaW5lIFpFX1YxX05QT1JUUwk2NAogI2RlZmluZSBaT19WMQkwCkBAIC02MjUsOSArNjI1LDkgQEAKICN1bmRlZglDWV9QQ0lfREVCVUcKIAogI2lmIDAKLSNkZWZpbmUgUEFVU0UgX19hc21fXygibm9wIik7CisjZGVmaW5lIFBBVVNFIF9fYXNtX18oIm5vcCIpCiAjZWxzZQotI2RlZmluZSBQQVVTRSA7CisjZGVmaW5lIFBBVVNFIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qCkBAIC02NjMsNyArNjYzLDcgQEAKIAkJZG8gewkJCQkJCVwKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmN5X2NhcmRbaW5mby0+Y2FyZF0uY2FyZF9sb2NrLCBmbGFncyk7IFwKIAkJfSB3aGlsZSAoMCkKLQkJCisKICNkZWZpbmUJQ1lfVU5MT0NLKGluZm8sZmxhZ3MpCQkJCQlcCiAJCWRvIHsJCQkJCQlcCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN5X2NhcmRbaW5mby0+Y2FyZF0uY2FyZF9sb2NrLCBmbGFncyk7IFwKQEAgLTY3NiwxNCArNjc2LDE0IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAotc3RhdGljIHZvaWQgY3lfdGhyb3R0bGUgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotc3RhdGljIHZvaWQgY3lfc2VuZF94Y2hhciAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCk7CitzdGF0aWMgdm9pZCBjeV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGN5X3NlbmRfeGNoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCk7CiAKICNkZWZpbmUgSVNfQ1lDX1ooY2FyZCkgKChjYXJkKS5udW1fY2hpcHMgPT0gLTEpCiAKICNkZWZpbmUgWl9GUEdBX0NIRUNLKGNhcmQpIFwKLSAgICAoKGN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKSBcCi0JCSAoKGNhcmQpLmN0bF9hZGRyKSktPmluaXRfY3RybCkgJiAoMTw8MTcpKSAhPSAwKQorCSgoY3lfcmVhZGwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopIFwKKwkJKChjYXJkKS5jdGxfYWRkcikpLT5pbml0X2N0cmwpICYgKDE8PDE3KSkgIT0gMCkKIAogI2RlZmluZSBJU1pMT0FERUQoY2FyZCkJKCgoWk9fVjE9PWN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKSBcCiAJCQkoKGNhcmQpLmN0bF9hZGRyKSktPm1haWxfYm94XzApKSB8fCBcCkBAIC02OTgsOCArNjk4LDYgQEAKIAogI2RlZmluZSBTVERfQ09NX0ZMQUdTICgwKQogCi0jZGVmaW5lCUpJRkZJRVNfRElGRihuLCBqKQkoKGopIC0gKG4pKQotCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmN5X3NlcmlhbF9kcml2ZXI7CiAKICNpZmRlZiBDT05GSUdfSVNBCkBAIC03MTMsMjcgKzcxMSwyOCBAQAogKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBjeV9pc2FfYWRkcmVzc2VzW10gPSB7Ci0gICAgICAgIDB4RDAwMDAsCi0gICAgICAgIDB4RDIwMDAsCi0gICAgICAgIDB4RDQwMDAsCi0gICAgICAgIDB4RDYwMDAsCi0gICAgICAgIDB4RDgwMDAsCi0gICAgICAgIDB4REEwMDAsCi0gICAgICAgIDB4REMwMDAsCi0gICAgICAgIDB4REUwMDAsCi0gICAgICAgIDAsMCwwLDAsMCwwLDAsMAorCTB4RDAwMDAsCisJMHhEMjAwMCwKKwkweEQ0MDAwLAorCTB4RDYwMDAsCisJMHhEODAwMCwKKwkweERBMDAwLAorCTB4REMwMDAsCisJMHhERTAwMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiB9OworCiAjZGVmaW5lIE5SX0lTQV9BRERSUyBBUlJBWV9TSVpFKGN5X2lzYV9hZGRyZXNzZXMpCiAKICNpZmRlZiBNT0RVTEUKIHN0YXRpYyBsb25nIG1hZGRyW05SX0NBUkRTXSA9IHsgMCwgfTsKLXN0YXRpYyBpbnQgaXJxW05SX0NBUkRTXSAgPSB7IDAsIH07CitzdGF0aWMgaW50IGlycVtOUl9DQVJEU10gPSB7IDAsIH07CiAKIG1vZHVsZV9wYXJhbV9hcnJheShtYWRkciwgbG9uZywgTlVMTCwgMCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDApOwogI2VuZGlmCiAKLSNlbmRpZiAvKiBDT05GSUdfSVNBICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lTQSAqLwogCiAvKiBUaGlzIGlzIHRoZSBwZXItY2FyZCBkYXRhIHN0cnVjdHVyZSBjb250YWluaW5nIGFkZHJlc3MsIGlycSwgbnVtYmVyIG9mCiAgICBjaGFubmVscywgZXRjLiBUaGlzIGRyaXZlciBzdXBwb3J0cyBhIG1heGltdW0gb2YgTlJfQ0FSRFMgY2FyZHMuCkBAIC03NDUsNyArNzQ0LDcgQEAKICovCiBzdGF0aWMgc3RydWN0IGN5Y2xhZGVzX3BvcnQgY3lfcG9ydFtOUl9QT1JUU107CiAKLXN0YXRpYyBpbnQgY3lfbmV4dF9jaGFubmVsOyAvKiBuZXh0IG1pbm9yIGF2YWlsYWJsZSAqLworc3RhdGljIGludCBjeV9uZXh0X2NoYW5uZWw7CS8qIG5leHQgbWlub3IgYXZhaWxhYmxlICovCiAKIC8qCiAgKiBUaGlzIGlzIHVzZWQgdG8gbG9vayB1cCB0aGUgZGl2aXNvciBzcGVlZHMgYW5kIHRoZSB0aW1lb3V0cwpAQCAtNzU3LDM2ICs3NTYsNDIgQEAKICAqICAgICAyMAogICovCiBzdGF0aWMgaW50IGJhdWRfdGFibGVbXSA9IHsKLSAgICAgICAwLCAgICA1MCwgICAgNzUsICAgMTEwLCAgIDEzNCwgICAxNTAsICAgMjAwLCAgIDMwMCwgICA2MDAsICAxMjAwLAotICAgIDE4MDAsICAyNDAwLCAgNDgwMCwgIDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDc2ODAwLDExNTIwMCwxNTAwMDAsCi0gIDIzMDQwMCwgICAgIDB9OworCTAsIDUwLCA3NSwgMTEwLCAxMzQsIDE1MCwgMjAwLCAzMDAsIDYwMCwgMTIwMCwKKwkxODAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA3NjgwMCwgMTE1MjAwLCAxNTAwMDAsCisJMjMwNDAwLCAwCit9OwogCi1zdGF0aWMgY2hhciBiYXVkX2NvXzI1W10gPSB7ICAvKiAyNSBNSHogY2xvY2sgb3B0aW9uIHRhYmxlICovCi0gICAgLyogdmFsdWUgPT4gICAgMDAgICAgMDEgICAwMiAgICAwMyAgICAwNCAqLwotICAgIC8qIGRpdmlkZSBieSAgICA4ICAgIDMyICAgMTI4ICAgNTEyICAyMDQ4ICovCi0gICAgMHgwMCwgIDB4MDQsICAweDA0LCAgMHgwNCwgIDB4MDQsICAweDA0LCAgMHgwMywgIDB4MDMsICAweDAzLCAgMHgwMiwKLSAgICAweDAyLCAgMHgwMiwgIDB4MDEsICAweDAxLCAgMHgwMCwgIDB4MDAsICAweDAwLCAgMHgwMCwgIDB4MDAsICAweDAwfTsKK3N0YXRpYyBjaGFyIGJhdWRfY29fMjVbXSA9IHsJLyogMjUgTUh6IGNsb2NrIG9wdGlvbiB0YWJsZSAqLworCS8qIHZhbHVlID0+ICAgIDAwICAgIDAxICAgMDIgICAgMDMgICAgMDQgKi8KKwkvKiBkaXZpZGUgYnkgICAgOCAgICAzMiAgIDEyOCAgIDUxMiAgMjA0OCAqLworCTB4MDAsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDIsCisJMHgwMiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKIAotc3RhdGljIGNoYXIgYmF1ZF9icHJfMjVbXSA9IHsgIC8qIDI1IE1IeiBiYXVkIHJhdGUgcGVyaW9kIHRhYmxlICovCi0gICAgMHgwMCwgIDB4ZjUsICAweGEzLCAgMHg2ZiwgIDB4NWMsICAweDUxLCAgMHhmNSwgIDB4YTMsICAweDUxLCAgMHhhMywKLSAgICAweDZkLCAgMHg1MSwgIDB4YTMsICAweDUxLCAgMHhhMywgIDB4NTEsICAweDM2LCAgMHgyOSwgIDB4MWIsICAweDE1fTsKK3N0YXRpYyBjaGFyIGJhdWRfYnByXzI1W10gPSB7CS8qIDI1IE1IeiBiYXVkIHJhdGUgcGVyaW9kIHRhYmxlICovCisJMHgwMCwgMHhmNSwgMHhhMywgMHg2ZiwgMHg1YywgMHg1MSwgMHhmNSwgMHhhMywgMHg1MSwgMHhhMywKKwkweDZkLCAweDUxLCAweGEzLCAweDUxLCAweGEzLCAweDUxLCAweDM2LCAweDI5LCAweDFiLCAweDE1Cit9OwogCi1zdGF0aWMgY2hhciBiYXVkX2NvXzYwW10gPSB7ICAvKiA2MCBNSHogY2xvY2sgb3B0aW9uIHRhYmxlIChDRDE0MDAgSikgKi8KLSAgICAvKiB2YWx1ZSA9PiAgICAwMCAgICAwMSAgIDAyICAgIDAzICAgIDA0ICovCi0gICAgLyogZGl2aWRlIGJ5ICAgIDggICAgMzIgICAxMjggICA1MTIgIDIwNDggKi8KLSAgICAweDAwLCAgMHgwMCwgIDB4MDAsICAweDA0LCAgMHgwNCwgIDB4MDQsICAweDA0LCAgMHgwNCwgIDB4MDMsICAweDAzLAotICAgIDB4MDMsICAweDAyLCAgMHgwMiwgIDB4MDEsICAweDAxLCAgMHgwMCwgIDB4MDAsICAweDAwLCAgMHgwMCwgIDB4MDAsCi0gICAgMHgwMH07CitzdGF0aWMgY2hhciBiYXVkX2NvXzYwW10gPSB7CS8qIDYwIE1IeiBjbG9jayBvcHRpb24gdGFibGUgKENEMTQwMCBKKSAqLworCS8qIHZhbHVlID0+ICAgIDAwICAgIDAxICAgMDIgICAgMDMgICAgMDQgKi8KKwkvKiBkaXZpZGUgYnkgICAgOCAgICAzMiAgIDEyOCAgIDUxMiAgMjA0OCAqLworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MDMsCisJMHgwMywgMHgwMiwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwCit9OwogCi1zdGF0aWMgY2hhciBiYXVkX2Jwcl82MFtdID0geyAgLyogNjAgTUh6IGJhdWQgcmF0ZSBwZXJpb2QgdGFibGUgKENEMTQwMCBKKSAqLwotICAgIDB4MDAsICAweDgyLCAgMHgyMSwgIDB4ZmYsICAweGRiLCAgMHhjMywgIDB4OTIsICAweDYyLCAgMHhjMywgIDB4NjIsCi0gICAgMHg0MSwgIDB4YzMsICAweDYyLCAgMHhjMywgIDB4NjIsICAweGMzLCAgMHg4MiwgIDB4NjIsICAweDQxLCAgMHgzMiwKLSAgICAweDIxfTsKK3N0YXRpYyBjaGFyIGJhdWRfYnByXzYwW10gPSB7CS8qIDYwIE1IeiBiYXVkIHJhdGUgcGVyaW9kIHRhYmxlIChDRDE0MDAgSikgKi8KKwkweDAwLCAweDgyLCAweDIxLCAweGZmLCAweGRiLCAweGMzLCAweDkyLCAweDYyLCAweGMzLCAweDYyLAorCTB4NDEsIDB4YzMsIDB4NjIsIDB4YzMsIDB4NjIsIDB4YzMsIDB4ODIsIDB4NjIsIDB4NDEsIDB4MzIsCisJMHgyMQorfTsKIAotc3RhdGljIGNoYXIgYmF1ZF9jb3IzW10gPSB7ICAvKiByZWNlaXZlIHRocmVzaG9sZCAqLwotICAgIDB4MGEsICAweDBhLCAgMHgwYSwgIDB4MGEsICAweDBhLCAgMHgwYSwgIDB4MGEsICAweDBhLCAgMHgwYSwgIDB4MGEsCi0gICAgMHgwYSwgIDB4MGEsICAweDBhLCAgMHgwOSwgIDB4MDksICAweDA4LCAgMHgwOCwgIDB4MDgsICAweDA4LCAgMHgwNywKLSAgICAweDA3fTsKK3N0YXRpYyBjaGFyIGJhdWRfY29yM1tdID0gewkvKiByZWNlaXZlIHRocmVzaG9sZCAqLworCTB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsCisJMHgwYSwgMHgwYSwgMHgwYSwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgwNywKKwkweDA3Cit9OwogCiAvKgogICogVGhlIEN5Y2xhZGVzIGRyaXZlciBpbXBsZW1lbnRzIEhXIGZsb3cgY29udHJvbCBhcyBhbnkgc2VyaWFsIGRyaXZlci4KQEAgLTc5OSw0MiArODA0LDQyIEBACiAgKiBjYWJsZXMuCiAgKi8KIAotc3RhdGljIGNoYXIgcmZsb3dfdGhyW10gPSB7ICAvKiByZmxvdyB0aHJlc2hvbGQgKi8KLSAgICAweDAwLCAgMHgwMCwgIDB4MDAsICAweDAwLCAgMHgwMCwgIDB4MDAsICAweDAwLCAgMHgwMCwgIDB4MDAsICAweDAwLAotICAgIDB4MDAsICAweDAwLCAgMHgwMCwgIDB4MGEsICAweDBhLCAgMHgwYSwgIDB4MGEsICAweDBhLCAgMHgwYSwgIDB4MGEsCi0gICAgMHgwYX07CitzdGF0aWMgY2hhciByZmxvd190aHJbXSA9IHsJLyogcmZsb3cgdGhyZXNob2xkICovCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLCAweDBhLAorCTB4MGEKK307CiAKIC8qICBUaGUgQ3ljbG9tLVllIGhhcyBwbGFjZWQgdGhlIHNlcXVlbnRpYWwgY2hpcHMgaW4gbm9uLXNlcXVlbnRpYWwKICAqICBhZGRyZXNzIG9yZGVyLiAgVGhpcyBsb29rLXVwIHRhYmxlIG92ZXJjb21lcyB0aGF0IHByb2JsZW0uCiAgKi8KLXN0YXRpYyBpbnQgY3lfY2hpcF9vZmZzZXQgW10gPQotICAgIHsgMHgwMDAwLAotICAgICAgMHgwNDAwLAotICAgICAgMHgwODAwLAotICAgICAgMHgwQzAwLAotICAgICAgMHgwMjAwLAotICAgICAgMHgwNjAwLAotICAgICAgMHgwQTAwLAotICAgICAgMHgwRTAwCi0gICAgfTsKK3N0YXRpYyBpbnQgY3lfY2hpcF9vZmZzZXRbXSA9IHsgMHgwMDAwLAorCTB4MDQwMCwKKwkweDA4MDAsCisJMHgwQzAwLAorCTB4MDIwMCwKKwkweDA2MDAsCisJMHgwQTAwLAorCTB4MEUwMAorfTsKIAogLyogUENJIHJlbGF0ZWQgZGVmaW5pdGlvbnMgKi8KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0CWN5X3BjaV9uYm9hcmQ7Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQJY3lfaXNhX25ib2FyZDsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydAljeV9uYm9hcmQ7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgY3lfcGNpX25ib2FyZDsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBjeV9pc2FfbmJvYXJkOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGN5X25ib2FyZDsKICNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQJY3lfcGNpX2Rldl9pZFtdID0gewotCQkJICAgIFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfTG8sCS8qIFBDSSA8IDFNYiAqLwotCQkJICAgIFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfSGksCS8qIFBDSSA+IDFNYiAqLwotCQkJICAgIFBDSV9ERVZJQ0VfSURfQ1lDTE9NXzRZX0xvLAkvKiA0WSBQQ0kgPCAxTWIgKi8KLQkJCSAgICBQQ0lfREVWSUNFX0lEX0NZQ0xPTV80WV9IaSwJLyogNFkgUENJID4gMU1iICovCi0JCQkgICAgUENJX0RFVklDRV9JRF9DWUNMT01fOFlfTG8sCS8qIDhZIFBDSSA8IDFNYiAqLwotCQkJICAgIFBDSV9ERVZJQ0VfSURfQ1lDTE9NXzhZX0hpLAkvKiA4WSBQQ0kgPiAxTWIgKi8KLQkJCSAgICBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9aX0xvLAkvKiBaIFBDSSA8IDFNYiAqLwotCQkJICAgIFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1pfSGksCS8qIFogUENJID4gMU1iICovCi0JCQkgICAgMAkJCQkvKiBlbmQgb2YgdGFibGUgKi8KLQkJCX07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgY3lfcGNpX2Rldl9pZFtdID0geworCVBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfTG8sCS8qIFBDSSA8IDFNYiAqLworCVBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfSGksCS8qIFBDSSA+IDFNYiAqLworCVBDSV9ERVZJQ0VfSURfQ1lDTE9NXzRZX0xvLAkvKiA0WSBQQ0kgPCAxTWIgKi8KKwlQQ0lfREVWSUNFX0lEX0NZQ0xPTV80WV9IaSwJLyogNFkgUENJID4gMU1iICovCisJUENJX0RFVklDRV9JRF9DWUNMT01fOFlfTG8sCS8qIDhZIFBDSSA8IDFNYiAqLworCVBDSV9ERVZJQ0VfSURfQ1lDTE9NXzhZX0hpLAkvKiA4WSBQQ0kgPiAxTWIgKi8KKwlQQ0lfREVWSUNFX0lEX0NZQ0xPTV9aX0xvLAkvKiBaIFBDSSA8IDFNYiAqLworCVBDSV9ERVZJQ0VfSURfQ1lDTE9NX1pfSGksCS8qIFogUENJID4gMU1iICovCisJMAkJCS8qIGVuZCBvZiB0YWJsZSAqLworfTsKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBjeV9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKQEAgLTg0Miw5ICs4NDcsOSBAQAogc3RhdGljIGludCBjeXpfaXNzdWVfY21kKHN0cnVjdCBjeWNsYWRlc19jYXJkICosIHVjbG9uZywgdWNjaGFyLCB1Y2xvbmcpOwogI2lmZGVmIENPTkZJR19JU0EKIHN0YXRpYyB1bnNpZ25lZCBkZXRlY3RfaXNhX2lycSh2b2lkIF9faW9tZW0gKik7Ci0jZW5kaWYgLyogQ09ORklHX0lTQSAqLworI2VuZGlmCQkJCS8qIENPTkZJR19JU0EgKi8KIAotc3RhdGljIGludCBjeWNsYWRlc19nZXRfcHJvY19pbmZvKGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QgLCBpbnQgLCBpbnQgKiwgdm9pZCAqKTsKK3N0YXRpYyBpbnQgY3ljbGFkZXNfZ2V0X3Byb2NfaW5mbyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOwogCiAjaWZuZGVmIENPTkZJR19DWVpfSU5UUgogc3RhdGljIHZvaWQgY3l6X3BvbGwodW5zaWduZWQgbG9uZyk7CkBAIC04NTUsNDEgKzg2MCwzNiBAQAogc3RhdGljIGludCBjeXpfdGltZXJvbiA9IDA7CiBzdGF0aWMgREVGSU5FX1RJTUVSKGN5el90aW1lcmxpc3QsIGN5el9wb2xsLCAwLCAwKTsKIAotI2Vsc2UgLyogQ09ORklHX0NZWl9JTlRSICovCisjZWxzZQkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KIHN0YXRpYyB2b2lkIGN5el9yeF9yZXN0YXJ0KHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGN5el9yeF9mdWxsX3RpbWVyW05SX1BPUlRTXTsKLSNlbmRpZiAvKiBDT05GSUdfQ1laX0lOVFIgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KIAotc3RhdGljIGlubGluZSBpbnQKLXNlcmlhbF9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJvdXRpbmUpCitzdGF0aWMgaW5saW5lIGludCBzZXJpYWxfcGFyYW5vaWFfY2hlY2soc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCisJCWNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJvdXRpbmUpCiB7CiAjaWZkZWYgU0VSSUFMX1BBUkFOT0lBX0NIRUNLCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmJhZG1hZ2ljID0KLSAgICAgICAgImN5YyBXYXJuaW5nOiBiYWQgbWFnaWMgbnVtYmVyIGZvciBzZXJpYWwgc3RydWN0ICglcykgaW4gJXNcbiI7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmJhZGluZm8gPQotICAgICAgICAiY3ljIFdhcm5pbmc6IG51bGwgY3ljbGFkZXNfcG9ydCBmb3IgKCVzKSBpbiAlc1xuIjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqYmFkcmFuZ2UgPQotICAgICAgICAiY3ljIFdhcm5pbmc6IGN5Y2xhZGVzX3BvcnQgb3V0IG9mIHJhbmdlIGZvciAoJXMpIGluICVzXG4iOworCWlmICghaW5mbykgeworCQlwcmludGsoImN5YyBXYXJuaW5nOiBudWxsIGN5Y2xhZGVzX3BvcnQgZm9yICglcykgaW4gJXNcbiIsCisJCQkJbmFtZSwgcm91dGluZSk7CisJCXJldHVybiAxOworCX0KIAotICAgIGlmICghaW5mbykgewotICAgICAgICBwcmludGsoYmFkaW5mbywgbmFtZSwgcm91dGluZSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KKwlpZiAoKGxvbmcpaW5mbyA8IChsb25nKSgmY3lfcG9ydFswXSkgfHwKKwkJCShsb25nKSgmY3lfcG9ydFtOUl9QT1JUU10pIDwgKGxvbmcpaW5mbykgeworCQlwcmludGsoImN5YyBXYXJuaW5nOiBjeWNsYWRlc19wb3J0IG91dCBvZiByYW5nZSBmb3IgKCVzKSBpbiAiCisJCQkJIiVzXG4iLCBuYW1lLCByb3V0aW5lKTsKKwkJcmV0dXJuIDE7CisJfQogCi0gICAgaWYoIChsb25nKWluZm8gPCAobG9uZykoJmN5X3BvcnRbMF0pCi0gICAgfHwgKGxvbmcpKCZjeV9wb3J0W05SX1BPUlRTXSkgPCAobG9uZylpbmZvICl7Ci0gICAgICAgIHByaW50ayhiYWRyYW5nZSwgbmFtZSwgcm91dGluZSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmIChpbmZvLT5tYWdpYyAhPSBDWUNMQURFU19NQUdJQykgewotICAgICAgICBwcmludGsoYmFkbWFnaWMsIG5hbWUsIHJvdXRpbmUpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9CisJaWYgKGluZm8tPm1hZ2ljICE9IENZQ0xBREVTX01BR0lDKSB7CisJCXByaW50aygiY3ljIFdhcm5pbmc6IGJhZCBtYWdpYyBudW1iZXIgZm9yIHNlcmlhbCBzdHJ1Y3QgKCVzKSAiCisJCQkJImluICVzXG4iLCBuYW1lLCByb3V0aW5lKTsKKwkJcmV0dXJuIDE7CisJfQogI2VuZGlmCi0gICAgICAgIHJldHVybiAwOwotfSAvKiBzZXJpYWxfcGFyYW5vaWFfY2hlY2sgKi8KKwlyZXR1cm4gMDsKK30JCQkJLyogc2VyaWFsX3BhcmFub2lhX2NoZWNrICovCiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8gc2NoZWR1bGUKQEAgLTg5NywxMyArODk3LDExIEBACiAgKiAoYWxzbyBrbm93biBhcyB0aGUgImJvdHRvbSBoYWxmIikuICBUaGlzIGNhbiBiZSBjYWxsZWQgYW55CiAgKiBudW1iZXIgb2YgdGltZXMgZm9yIGFueSBjaGFubmVsIHdpdGhvdXQgaGFybS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCi1jeV9zY2hlZF9ldmVudChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgaW50IGV2ZW50KQorc3RhdGljIGlubGluZSB2b2lkIGN5X3NjaGVkX2V2ZW50KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCBpbnQgZXZlbnQpCiB7Ci0gICAgaW5mby0+ZXZlbnQgfD0gMSA8PCBldmVudDsgLyogcmVtZW1iZXIgd2hhdCBraW5kIG9mIGV2ZW50IGFuZCB3aG8gKi8KLSAgICBzY2hlZHVsZV93b3JrKCZpbmZvLT50cXVldWUpOwotfSAvKiBjeV9zY2hlZF9ldmVudCAqLwotCisJaW5mby0+ZXZlbnQgfD0gMSA8PCBldmVudDsgLyogcmVtZW1iZXIgd2hhdCBraW5kIG9mIGV2ZW50IGFuZCB3aG8gKi8KKwlzY2hlZHVsZV93b3JrKCZpbmZvLT50cXVldWUpOworfQkJCQkvKiBjeV9zY2hlZF9ldmVudCAqLwogCiAvKgogICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSAiYm90dG9tIGhhbGYiIHByb2Nlc3NpbmcgZm9yIHRoZQpAQCAtOTMwLDQxICs5MjgsMzYgQEAKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCwgdHF1ZXVlKTsKLSAgc3RydWN0IHR0eV9zdHJ1Y3QgICAgKnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAgICAqdHR5OwogCi0gICAgdHR5ID0gaW5mby0+dHR5OwotICAgIGlmICghdHR5KQotICAgICAgICByZXR1cm47CisJdHR5ID0gaW5mby0+dHR5OworCWlmICghdHR5KQorCQlyZXR1cm47CiAKLSAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEN5X0VWRU5UX0hBTkdVUCwgJmluZm8tPmV2ZW50KSkgewotICAgICAgICB0dHlfaGFuZ3VwKGluZm8tPnR0eSk7Ci0gICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKLSAgICAgICAgaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0gICAgfQotICAgIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ3lfRVZFTlRfT1BFTl9XQUtFVVAsICZpbmZvLT5ldmVudCkpIHsKLSAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOwotICAgIH0KLSNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLSAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEN5X0VWRU5UX1pfUlhfRlVMTCwgJmluZm8tPmV2ZW50KSkgewotCWlmIChjeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXS5mdW5jdGlvbiA9PSBOVUxMKSB7Ci0JICAgIGN5el9yeF9mdWxsX3RpbWVyW2luZm8tPmxpbmVdLmV4cGlyZXMgPSBqaWZmaWVzICsgMTsKLQkgICAgY3l6X3J4X2Z1bGxfdGltZXJbaW5mby0+bGluZV0uZnVuY3Rpb24gPSBjeXpfcnhfcmVzdGFydDsKLQkgICAgY3l6X3J4X2Z1bGxfdGltZXJbaW5mby0+bGluZV0uZGF0YSA9ICh1bnNpZ25lZCBsb25nKWluZm87Ci0JICAgIGFkZF90aW1lcigmY3l6X3J4X2Z1bGxfdGltZXJbaW5mby0+bGluZV0pOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ3lfRVZFTlRfSEFOR1VQLCAmaW5mby0+ZXZlbnQpKSB7CisJCXR0eV9oYW5ndXAoaW5mby0+dHR5KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOworCQkgICAgICAgIGluZm8tPmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwogCX0KLSAgICB9CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDeV9FVkVOVF9PUEVOX1dBS0VVUCwgJmluZm8tPmV2ZW50KSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOworI2lmZGVmIENPTkZJR19DWVpfSU5UUgorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ3lfRVZFTlRfWl9SWF9GVUxMLCAmaW5mby0+ZXZlbnQpKSB7CisJCWlmIChjeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXS5mdW5jdGlvbiA9PSBOVUxMKSB7CisJCQljeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXS5leHBpcmVzID0gamlmZmllcyArIDE7CisJCQljeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXS5mdW5jdGlvbiA9IGN5el9yeF9yZXN0YXJ0OworCQkJY3l6X3J4X2Z1bGxfdGltZXJbaW5mby0+bGluZV0uZGF0YSA9CisJCQkJCQkodW5zaWduZWQgbG9uZylpbmZvOworCQkJYWRkX3RpbWVyKCZjeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXSk7CisJCX0KKwl9CiAjZW5kaWYKLSAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEN5X0VWRU5UX0RFTFRBX1dBS0VVUCwgJmluZm8tPmV2ZW50KSkgewotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwotICAgIH0KLSAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEN5X0VWRU5UX1dSSVRFX1dBS0VVUCwgJmluZm8tPmV2ZW50KSkgewotICAgICAgICB0dHlfd2FrZXVwKHR0eSk7Ci0gICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKLSAgICB9CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDeV9FVkVOVF9ERUxUQV9XQUtFVVAsICZpbmZvLT5ldmVudCkpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCXR0eV93YWtldXAodHR5KTsKICNpZmRlZiBaX1dBS0UKLSAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEN5X0VWRU5UX1NIVVRET1dOX1dBS0VVUCwgJmluZm8tPmV2ZW50KSkgewotICAgICAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPnNodXRkb3duX3dhaXQpOwotICAgIH0KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEN5X0VWRU5UX1NIVVRET1dOX1dBS0VVUCwgJmluZm8tPmV2ZW50KSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5zaHV0ZG93bl93YWl0KTsKICNlbmRpZgogfSAvKiBkb19zb2Z0aW50ICovCiAKQEAgLTk3OSwzNDEgKzk3MiwzMzkgQEAKIAogICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIGluc2lkZSBzcGlubG9jay1wcm90ZWN0ZWQgY29kZS4KICAqLwotc3RhdGljIGludAotY3l5X2lzc3VlX2NtZCh2b2lkIF9faW9tZW0gKmJhc2VfYWRkciwgdV9jaGFyIGNtZCwgaW50IGluZGV4KQorc3RhdGljIGludCBjeXlfaXNzdWVfY21kKHZvaWQgX19pb21lbSAqIGJhc2VfYWRkciwgdV9jaGFyIGNtZCwgaW50IGluZGV4KQogewotICB2b2xhdGlsZSBpbnQgIGk7CisJdm9sYXRpbGUgaW50IGk7CiAKLSAgICAvKiBDaGVjayB0byBzZWUgdGhhdCB0aGUgcHJldmlvdXMgY29tbWFuZCBoYXMgY29tcGxldGVkICovCi0gICAgZm9yKGkgPSAwIDsgaSA8IDEwMCA7IGkrKyl7Ci0JaWYgKGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lDQ1I8PGluZGV4KSkgPT0gMCl7Ci0JICAgIGJyZWFrOworCS8qIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwcmV2aW91cyBjb21tYW5kIGhhcyBjb21wbGV0ZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJaWYgKGN5X3JlYWRiKGJhc2VfYWRkciArIChDeUNDUiA8PCBpbmRleCkpID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJCXVkZWxheSgxMEwpOwogCX0KLQl1ZGVsYXkoMTBMKTsKLSAgICB9Ci0gICAgLyogaWYgdGhlIENDUiBuZXZlciBjbGVhcmVkLCB0aGUgcHJldmlvdXMgY29tbWFuZAotICAgICAgIGRpZG4ndCBmaW5pc2ggd2l0aGluIHRoZSAicmVhc29uYWJsZSB0aW1lIiAqLwotICAgIGlmIChpID09IDEwMCkJcmV0dXJuICgtMSk7CisJLyogaWYgdGhlIENDUiBuZXZlciBjbGVhcmVkLCB0aGUgcHJldmlvdXMgY29tbWFuZAorCSAgIGRpZG4ndCBmaW5pc2ggd2l0aGluIHRoZSAicmVhc29uYWJsZSB0aW1lIiAqLworCWlmIChpID09IDEwMCkKKwkJcmV0dXJuIC0xOwogCi0gICAgLyogSXNzdWUgdGhlIG5ldyBjb21tYW5kICovCi0gICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lDQ1I8PGluZGV4KSwgY21kKTsKKwkvKiBJc3N1ZSB0aGUgbmV3IGNvbW1hbmQgKi8KKwljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0NSIDw8IGluZGV4KSwgY21kKTsKIAotICAgIHJldHVybigwKTsKLX0gLyogY3l5X2lzc3VlX2NtZCAqLworCXJldHVybiAwOworfQkJCQkvKiBjeXlfaXNzdWVfY21kICovCiAKICNpZmRlZiBDT05GSUdfSVNBCiAvKiBJU0EgaW50ZXJydXB0IGRldGVjdGlvbiBjb2RlICovCi1zdGF0aWMgdW5zaWduZWQgCi1kZXRlY3RfaXNhX2lycSh2b2lkIF9faW9tZW0gKmFkZHJlc3MpCitzdGF0aWMgdW5zaWduZWQgZGV0ZWN0X2lzYV9pcnEodm9pZCBfX2lvbWVtICogYWRkcmVzcykKIHsKLSAgaW50IGlycTsKLSAgdW5zaWduZWQgbG9uZyBpcnFzLCBmbGFnczsKLSAgaW50IHNhdmVfeGlyLCBzYXZlX2NhcjsKLSAgaW50IGluZGV4ID0gMDsgLyogSVJRIHByb2JpbmcgaXMgb25seSBmb3IgSVNBICovCisJaW50IGlycTsKKwl1bnNpZ25lZCBsb25nIGlycXMsIGZsYWdzOworCWludCBzYXZlX3hpciwgc2F2ZV9jYXI7CisJaW50IGluZGV4ID0gMDsJCS8qIElSUSBwcm9iaW5nIGlzIG9ubHkgZm9yIElTQSAqLwogCi0gICAgLyogZm9yZ2V0IHBvc3NpYmxlIGluaXRpYWxseSBtYXNrZWQgYW5kIHBlbmRpbmcgSVJRICovCi0gICAgaXJxID0gcHJvYmVfaXJxX29mZihwcm9iZV9pcnFfb24oKSk7CisJLyogZm9yZ2V0IHBvc3NpYmxlIGluaXRpYWxseSBtYXNrZWQgYW5kIHBlbmRpbmcgSVJRICovCisJaXJxID0gcHJvYmVfaXJxX29mZihwcm9iZV9pcnFfb24oKSk7CiAKLSAgICAvKiBDbGVhciBpbnRlcnJ1cHRzIG9uIHRoZSBib2FyZCBmaXJzdCAqLwotICAgIGN5X3dyaXRlYihhZGRyZXNzICsgKEN5X0NsckludHI8PGluZGV4KSwgMCk7Ci0JCQkgICAgICAvKiBDeV9DbHJJbnRyIGlzIDB4MTgwMCAqLworCS8qIENsZWFyIGludGVycnVwdHMgb24gdGhlIGJvYXJkIGZpcnN0ICovCisJY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lfQ2xySW50ciA8PCBpbmRleCksIDApOworCS8qIEN5X0NsckludHIgaXMgMHgxODAwICovCiAKLSAgICBpcnFzID0gcHJvYmVfaXJxX29uKCk7Ci0gICAgLyogV2FpdCAuLi4gKi8KLSAgICB1ZGVsYXkoNTAwMEwpOworCWlycXMgPSBwcm9iZV9pcnFfb24oKTsKKwkvKiBXYWl0IC4uLiAqLworCXVkZWxheSg1MDAwTCk7CiAKLSAgICAvKiBFbmFibGUgdGhlIFR4IGludGVycnVwdHMgb24gdGhlIENEMTQwMCAqLwotICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljeV93cml0ZWIoYWRkcmVzcyArIChDeUNBUjw8aW5kZXgpLCAwKTsKLQljeXlfaXNzdWVfY21kKGFkZHJlc3MsIEN5Q0hBTl9DVEx8Q3lFTkJfWE1UUiwgaW5kZXgpOworCS8qIEVuYWJsZSB0aGUgVHggaW50ZXJydXB0cyBvbiB0aGUgQ0QxNDAwICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWN5X3dyaXRlYihhZGRyZXNzICsgKEN5Q0FSIDw8IGluZGV4KSwgMCk7CisJY3l5X2lzc3VlX2NtZChhZGRyZXNzLCBDeUNIQU5fQ1RMIHwgQ3lFTkJfWE1UUiwgaW5kZXgpOwogCi0JY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lDQVI8PGluZGV4KSwgMCk7Ci0JY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lTUkVSPDxpbmRleCksIAotCQljeV9yZWFkYihhZGRyZXNzICsgKEN5U1JFUjw8aW5kZXgpKSB8IEN5VHhSZHkpOwotICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwljeV93cml0ZWIoYWRkcmVzcyArIChDeUNBUiA8PCBpbmRleCksIDApOworCWN5X3dyaXRlYihhZGRyZXNzICsgKEN5U1JFUiA8PCBpbmRleCksCisJCSAgY3lfcmVhZGIoYWRkcmVzcyArIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5VHhSZHkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotICAgIC8qIFdhaXQgLi4uICovCi0gICAgdWRlbGF5KDUwMDBMKTsKKwkvKiBXYWl0IC4uLiAqLworCXVkZWxheSg1MDAwTCk7CiAKLSAgICAvKiBDaGVjayB3aGljaCBpbnRlcnJ1cHQgaXMgaW4gdXNlICovCi0gICAgaXJxID0gcHJvYmVfaXJxX29mZihpcnFzKTsKKwkvKiBDaGVjayB3aGljaCBpbnRlcnJ1cHQgaXMgaW4gdXNlICovCisJaXJxID0gcHJvYmVfaXJxX29mZihpcnFzKTsKIAotICAgIC8qIENsZWFuIHVwICovCi0gICAgc2F2ZV94aXIgPSAodV9jaGFyKSBjeV9yZWFkYihhZGRyZXNzICsgKEN5VElSPDxpbmRleCkpOwotICAgIHNhdmVfY2FyID0gY3lfcmVhZGIoYWRkcmVzcyArIChDeUNBUjw8aW5kZXgpKTsKLSAgICBjeV93cml0ZWIoYWRkcmVzcyArIChDeUNBUjw8aW5kZXgpLCAoc2F2ZV94aXIgJiAweDMpKTsKLSAgICBjeV93cml0ZWIoYWRkcmVzcyArIChDeVNSRVI8PGluZGV4KSwKLQljeV9yZWFkYihhZGRyZXNzICsgKEN5U1JFUjw8aW5kZXgpKSAmIH5DeVR4UmR5KTsKLSAgICBjeV93cml0ZWIoYWRkcmVzcyArIChDeVRJUjw8aW5kZXgpLCAoc2F2ZV94aXIgJiAweDNmKSk7Ci0gICAgY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lDQVI8PGluZGV4KSwgKHNhdmVfY2FyKSk7Ci0gICAgY3lfd3JpdGViKGFkZHJlc3MgKyAoQ3lfQ2xySW50cjw8aW5kZXgpLCAwKTsKLQkJCSAgICAgIC8qIEN5X0NsckludHIgaXMgMHgxODAwICovCisJLyogQ2xlYW4gdXAgKi8KKwlzYXZlX3hpciA9ICh1X2NoYXIpIGN5X3JlYWRiKGFkZHJlc3MgKyAoQ3lUSVIgPDwgaW5kZXgpKTsKKwlzYXZlX2NhciA9IGN5X3JlYWRiKGFkZHJlc3MgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKKwljeV93cml0ZWIoYWRkcmVzcyArIChDeUNBUiA8PCBpbmRleCksIChzYXZlX3hpciAmIDB4MykpOworCWN5X3dyaXRlYihhZGRyZXNzICsgKEN5U1JFUiA8PCBpbmRleCksCisJCSAgY3lfcmVhZGIoYWRkcmVzcyArIChDeVNSRVIgPDwgaW5kZXgpKSAmIH5DeVR4UmR5KTsKKwljeV93cml0ZWIoYWRkcmVzcyArIChDeVRJUiA8PCBpbmRleCksIChzYXZlX3hpciAmIDB4M2YpKTsKKwljeV93cml0ZWIoYWRkcmVzcyArIChDeUNBUiA8PCBpbmRleCksIChzYXZlX2NhcikpOworCWN5X3dyaXRlYihhZGRyZXNzICsgKEN5X0NsckludHIgPDwgaW5kZXgpLCAwKTsKKwkvKiBDeV9DbHJJbnRyIGlzIDB4MTgwMCAqLwogCi0gICAgcmV0dXJuIChpcnEgPiAwKT8gaXJxIDogMDsKKwlyZXR1cm4gKGlycSA+IDApID8gaXJxIDogMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfSVNBICovCisjZW5kaWYJCQkJLyogQ09ORklHX0lTQSAqLwogCi0vKiBUaGUgcmVhbCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGlzIGNhbGxlZAotICAgd2hlbmV2ZXIgdGhlIGNhcmQgd2FudHMgaXRzIGhhbmQgaGVsZC0tY2hhcnMKLSAgIHJlY2VpdmVkLCBvdXQgYnVmZmVyIGVtcHR5LCBtb2RlbSBjaGFuZ2UsIGV0Yy4KLSAqLwotc3RhdGljIGlycXJldHVybl90Ci1jeXlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyB2b2lkIGN5eV9pbnRyX2NoaXAoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvLCBpbnQgY2hpcCwKKwkJCXZvaWQgX19pb21lbSAqIGJhc2VfYWRkciwgaW50IHN0YXR1cywgaW50IGluZGV4KQogewotICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotICBpbnQgc3RhdHVzOwotICBzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm87Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOwotICB2b2lkIF9faW9tZW0gKmJhc2VfYWRkciwgKmNhcmRfYmFzZV9hZGRyOwotICBpbnQgY2hpcDsKLSAgaW50IHNhdmVfeGlyLCBjaGFubmVsLCBzYXZlX2NhcjsKLSAgY2hhciBkYXRhOwotICB2b2xhdGlsZSBpbnQgY2hhcl9jb3VudDsKLSAgaW50IG91dGNoOwotICBpbnQgaSxqLGluZGV4OwotICBpbnQgdG9vX21hbnk7Ci0gIGludCBoYWRfd29yazsKLSAgaW50IG1kbV9jaGFuZ2U7Ci0gIGludCBtZG1fc3RhdHVzOwotICBpbnQgbGVuOwotICAgIGlmKChjaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqKWRldl9pZCkgPT0gMCl7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm87CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl2b2xhdGlsZSBpbnQgY2hhcl9jb3VudDsKKwlpbnQgaSwgaiwgbGVuLCBtZG1fY2hhbmdlLCBtZG1fc3RhdHVzLCBvdXRjaDsKKwlpbnQgc2F2ZV94aXIsIGNoYW5uZWwsIHNhdmVfY2FyOworCWNoYXIgZGF0YTsKKworCWlmIChzdGF0dXMgJiBDeVNSUmVjZWl2ZSkgewkvKiByZWNlcHRpb24gaW50ZXJydXB0ICovCiAjaWZkZWYgQ1lfREVCVUdfSU5URVJSVVBUUwotCXByaW50aygiY3l5X2ludGVycnVwdDogc3B1cmlvdXMgaW50ZXJydXB0ICVkXG5cciIsIGlycSk7CisJCXByaW50aygiY3l5X2ludGVycnVwdDogcmN2ZCBpbnRyLCBjaGlwICVkXG5cciIsIGNoaXApOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBJUlFfTk9ORTsgLyogc3B1cmlvdXMgaW50ZXJydXB0ICovCi0gICAgfQorCQkvKiBkZXRlcm1pbmUgdGhlIGNoYW5uZWwgJiBjaGFuZ2UgdG8gdGhhdCBjb250ZXh0ICovCisJCXNwaW5fbG9jaygmY2luZm8tPmNhcmRfbG9jayk7CisJCXNhdmVfeGlyID0gKHVfY2hhcikgY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5UklSIDw8IGluZGV4KSk7CisJCWNoYW5uZWwgPSAodV9zaG9ydCkgKHNhdmVfeGlyICYgQ3lJUkNoYW5uZWwpOworCQlpID0gY2hhbm5lbCArIGNoaXAgKiA0ICsgY2luZm8tPmZpcnN0X2xpbmU7CisJCWluZm8gPSAmY3lfcG9ydFtpXTsKKwkJaW5mby0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOworCQlzYXZlX2NhciA9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCkpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV94aXIpOwogCi0gICAgY2FyZF9iYXNlX2FkZHIgPSBjaW5mby0+YmFzZV9hZGRyOwotICAgIGluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKKwkJLyogaWYgdGhlcmUgaXMgbm93aGVyZSB0byBwdXQgdGhlIGRhdGEsIGRpc2NhcmQgaXQgKi8KKwkJaWYgKGluZm8tPnR0eSA9PSAwKSB7CisJCQlqID0gKGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVJJVlIgPDwgaW5kZXgpKSAmCisJCQkJQ3lJVlJNYXNrKTsKKwkJCWlmIChqID09IEN5SVZSUnhFeCkgewkvKiBleGNlcHRpb24gKi8KKwkJCQlkYXRhID0gY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PCBpbmRleCkpOworCQkJfSBlbHNlIHsJLyogbm9ybWFsIGNoYXJhY3RlciByZWNlcHRpb24gKi8KKwkJCQljaGFyX2NvdW50ID0gY3lfcmVhZGIoYmFzZV9hZGRyICsKKwkJCQkJCShDeVJEQ1IgPDwgaW5kZXgpKTsKKwkJCQl3aGlsZSAoY2hhcl9jb3VudC0tKSB7CisJCQkJCWRhdGEgPSBjeV9yZWFkYihiYXNlX2FkZHIgKworCQkJCQkJKEN5UkRTUiA8PCBpbmRleCkpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsJLyogdGhlcmUgaXMgYW4gb3BlbiBwb3J0IGZvciB0aGlzIGRhdGEgKi8KKwkJCXR0eSA9IGluZm8tPnR0eTsKKwkJCWogPSAoY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5UklWUiA8PCBpbmRleCkpICYKKwkJCQkJQ3lJVlJNYXNrKTsKKwkJCWlmIChqID09IEN5SVZSUnhFeCkgewkvKiBleGNlcHRpb24gKi8KKwkJCQlkYXRhID0gY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PCBpbmRleCkpOwogCisJCQkJLyogRm9yIHN0YXRpc3RpY3Mgb25seSAqLworCQkJCWlmIChkYXRhICYgQ3lCUkVBSykKKwkJCQkJaW5mby0+aWNvdW50LmJyaysrOworCQkJCWVsc2UgaWYgKGRhdGEgJiBDeUZSQU1FKQorCQkJCQlpbmZvLT5pY291bnQuZnJhbWUrKzsKKwkJCQllbHNlIGlmIChkYXRhICYgQ3lQQVJJVFkpCisJCQkJCWluZm8tPmljb3VudC5wYXJpdHkrKzsKKwkJCQllbHNlIGlmIChkYXRhICYgQ3lPVkVSUlVOKQorCQkJCQlpbmZvLT5pY291bnQub3ZlcnJ1bisrOwogCi0gICAgLyogVGhpcyBsb29wIGNoZWNrcyBhbGwgY2hpcHMgaW4gdGhlIGNhcmQuICBNYWtlIGEgbm90ZSB3aGVuZXZlcgotICAgICAgIF9hbnlfIGNoaXAgaGFkIHNvbWUgd29yayB0byBkbywgYXMgdGhpcyBpcyBjb25zaWRlcmVkIGFuCi0gICAgICAgaW5kaWNhdGlvbiB0aGF0IHRoZXJlIHdpbGwgYmUgbW9yZSB0byBkby4gIE9ubHkgd2hlbiBubyBjaGlwCi0gICAgICAgaGFzIGFueSB3b3JrIGRvZXMgdGhpcyBvdXRlcm1vc3QgbG9vcCBleGl0LgotICAgICAqLwotICAgIGRvewotICAgICAgICBoYWRfd29yayA9IDA7Ci0gICAgICAgIGZvciAoIGNoaXAgPSAwIDsgY2hpcCA8IGNpbmZvLT5udW1fY2hpcHMgOyBjaGlwICsrKSB7Ci0gICAgICAgICAgICBiYXNlX2FkZHIgPSBjaW5mby0+YmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdPDxpbmRleCk7Ci0gICAgICAgICAgICB0b29fbWFueSA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoIChzdGF0dXMgPSBjeV9yZWFkYihiYXNlX2FkZHIrKEN5U1ZSUjw8aW5kZXgpKSkgIT0gMHgwMCkgewotICAgICAgICAgICAgICAgIGhhZF93b3JrKys7Ci0gICAgICAgICAgICAgICAgLyogVGhlIHB1cnBvc2Ugb2YgdGhlIGZvbGxvd2luZyB0ZXN0IGlzIHRvIGVuc3VyZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgbm8gY2hpcCBjYW4gbW9ub3BvbGl6ZSB0aGUgZHJpdmVyLiAgVGhpcyBmb3JjZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgY2hpcHMgdG8gYmUgY2hlY2tlZCBpbiBhIHJvdW5kLXJvYmluIGZhc2hpb24gKGFmdGVyCi0gICAgICAgICAgICAgICAgICAgZHJhaW5pbmcgZWFjaCBvZiBhIGJ1bmNoICgxMDAwKSBvZiBjaGFyYWN0ZXJzKS4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZigxMDAwPHRvb19tYW55KyspewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIEN5U1JSZWNlaXZlKSB7IC8qIHJlY2VwdGlvbiBpbnRlcnJ1cHQgKi8KLSNpZmRlZiBDWV9ERUJVR19JTlRFUlJVUFRTCi0JCSAgICBwcmludGsoImN5eV9pbnRlcnJ1cHQ6IHJjdmQgaW50ciwgY2hpcCAlZFxuXHIiLCBjaGlwKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAvKiBkZXRlcm1pbmUgdGhlIGNoYW5uZWwgJiBjaGFuZ2UgdG8gdGhhdCBjb250ZXh0ICovCi0JCSAgICBzcGluX2xvY2soJmNpbmZvLT5jYXJkX2xvY2spOwotICAgICAgICAgICAgICAgICAgICBzYXZlX3hpciA9ICh1X2NoYXIpIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lSSVI8PGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5uZWwgPSAodV9zaG9ydCApIChzYXZlX3hpciAmIEN5SVJDaGFubmVsKTsKLSAgICAgICAgICAgICAgICAgICAgaSA9IGNoYW5uZWwgKyBjaGlwICogNCArIGNpbmZvLT5maXJzdF9saW5lOwotICAgICAgICAgICAgICAgICAgICBpbmZvID0gJmN5X3BvcnRbaV07Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmxhc3RfYWN0aXZlID0gamlmZmllczsKLSAgICAgICAgICAgICAgICAgICAgc2F2ZV9jYXIgPSBjeV9yZWFkYihiYXNlX2FkZHIrKEN5Q0FSPDxpbmRleCkpOwotICAgICAgICAgICAgICAgICAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNBUjw8aW5kZXgpLCBzYXZlX3hpcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLyogaWYgdGhlcmUgaXMgbm93aGVyZSB0byBwdXQgdGhlIGRhdGEsIGRpc2NhcmQgaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYoaW5mby0+dHR5ID09IDApewotICAgICAgICAgICAgICAgICAgICAgICAgaiA9IChjeV9yZWFkYihiYXNlX2FkZHIrKEN5UklWUjw8aW5kZXgpKSAmIEN5SVZSTWFzayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGogPT0gQ3lJVlJSeEV4ICkgeyAvKiBleGNlcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gY3lfcmVhZGIoYmFzZV9hZGRyKyhDeVJEU1I8PGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvKiBub3JtYWwgY2hhcmFjdGVyIHJlY2VwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY291bnQgPSBjeV9yZWFkYihiYXNlX2FkZHIrKEN5UkRDUjw8aW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShjaGFyX2NvdW50LS0pewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gY3lfcmVhZGIoYmFzZV9hZGRyKyhDeVJEU1I8PGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9ZWxzZXsgLyogdGhlcmUgaXMgYW4gb3BlbiBwb3J0IGZvciB0aGlzIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHR0eSA9IGluZm8tPnR0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGogPSAoY3lfcmVhZGIoYmFzZV9hZGRyKyhDeVJJVlI8PGluZGV4KSkgJiBDeUlWUk1hc2spOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqID09IEN5SVZSUnhFeCApIHsgLyogZXhjZXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lSRFNSPDxpbmRleCkpOwotCi0JCQkgICAgLyogRm9yIHN0YXRpc3RpY3Mgb25seSAqLwotCQkJICAgIGlmIChkYXRhICYgQ3lCUkVBSykKLQkJCQlpbmZvLT5pY291bnQuYnJrKys7Ci0JCQkgICAgZWxzZSBpZihkYXRhICYgQ3lGUkFNRSkKLQkJCQlpbmZvLT5pY291bnQuZnJhbWUrKzsKLQkJCSAgICBlbHNlIGlmKGRhdGEgJiBDeVBBUklUWSkKLQkJCQlpbmZvLT5pY291bnQucGFyaXR5Kys7Ci0JCQkgICAgZWxzZSBpZihkYXRhICYgQ3lPVkVSUlVOKQotCQkJCWluZm8tPmljb3VudC5vdmVycnVuKys7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhICYgaW5mby0+aWdub3JlX3N0YXR1c19tYXNrKXsKLQkJCQlpbmZvLT5pY291bnQucngrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYgaW5mby0+cmVhZF9zdGF0dXNfbWFzayl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhICYgQ3lCUkVBSyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjeV9yZWFkYihiYXNlX2FkZHIrKEN5UkRTUjw8aW5kZXgpKSwgVFRZX0JSRUFLKTsKKwkJCQlpZiAoZGF0YSAmIGluZm8tPmlnbm9yZV9zdGF0dXNfbWFzaykgewogCQkJCQlpbmZvLT5pY291bnQucngrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TQUspewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19TQUsodHR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihkYXRhICYgQ3lGUkFNRSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjeV9yZWFkYihiYXNlX2FkZHIrKEN5UkRTUjw8aW5kZXgpKSwgVFRZX0ZSQU1FKTsKLQkJCQkJaW5mby0+aWNvdW50LnJ4Kys7Ci0JCQkJCWluZm8tPmlkbGVfc3RhdHMuZnJhbWVfZXJycysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoZGF0YSAmIEN5UEFSSVRZKXsKLQkJCQkJLyogUGllY2VzIG9mIHNldmVuLi4uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjeV9yZWFkYihiYXNlX2FkZHIrKEN5UkRTUjw8aW5kZXgpKSwgVFRZX1BBUklUWSk7Ci0JCQkJCWluZm8tPmljb3VudC5yeCsrOwotCQkJCQlpbmZvLT5pZGxlX3N0YXRzLnBhcml0eV9lcnJzKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihkYXRhICYgQ3lPVkVSUlVOKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKLQkJCQkJaW5mby0+aWNvdW50LnJ4Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIGZsaXAgYnVmZmVyIGl0c2VsZiBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93aW5nLCB3ZSBzdGlsbCBsb3NlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5leHQgaW5jb21pbmcgY2hhcmFjdGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeVJEU1I8PGluZGV4KSksIFRUWV9GUkFNRSk7Ci0JCQkJICAgICAgICBpbmZvLT5pY291bnQucngrKzsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlpZiAodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCAxKSkgeworCQkJCQlpZiAoZGF0YSAmIGluZm8tPnJlYWRfc3RhdHVzX21hc2spIHsKKwkJCQkJCWlmIChkYXRhICYgQ3lCUkVBSykgeworCQkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKAorCQkJCQkJCQl0dHksCisJCQkJCQkJCWN5X3JlYWRiKAorCQkJCQkJCQliYXNlX2FkZHIgKworCQkJCQkJCQkoQ3lSRFNSIDw8CisJCQkJCQkJCQlpbmRleCkpLAorCQkJCQkJCQlUVFlfQlJFQUspOworCQkJCQkJCWluZm8tPmljb3VudC5yeCsrOworCQkJCQkJCWlmIChpbmZvLT5mbGFncyAmCisJCQkJCQkJICAgIEFTWU5DX1NBSykgeworCQkJCQkJCQlkb19TQUsodHR5KTsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgaWYgKGRhdGEgJiBDeUZSQU1FKSB7CisJCQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoCisJCQkJCQkJCXR0eSwKKwkJCQkJCQkJY3lfcmVhZGIoCisJCQkJCQkJCWJhc2VfYWRkciArCisJCQkJCQkJCShDeVJEU1IgPDwKKwkJCQkJCQkJCWluZGV4KSksCisJCQkJCQkJCVRUWV9GUkFNRSk7CisJCQkJCQkJaW5mby0+aWNvdW50LnJ4Kys7CisJCQkJCQkJaW5mby0+aWRsZV9zdGF0cy4KKwkJCQkJCQkJZnJhbWVfZXJycysrOworCQkJCQkJfSBlbHNlIGlmIChkYXRhICYgQ3lQQVJJVFkpIHsKKwkJCQkJCQkvKiBQaWVjZXMgb2Ygc2V2ZW4uLi4gKi8KKwkJCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigKKwkJCQkJCQkJdHR5LAorCQkJCQkJCQljeV9yZWFkYigKKwkJCQkJCQkJYmFzZV9hZGRyICsKKwkJCQkJCQkJKEN5UkRTUiA8PAorCQkJCQkJCQkJaW5kZXgpKSwKKwkJCQkJCQkJVFRZX1BBUklUWSk7CisJCQkJCQkJaW5mby0+aWNvdW50LnJ4Kys7CisJCQkJCQkJaW5mby0+aWRsZV9zdGF0cy4KKwkJCQkJCQkJcGFyaXR5X2VycnMrKzsKKwkJCQkJCX0gZWxzZSBpZiAoZGF0YSAmIEN5T1ZFUlJVTikgeworCQkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKAorCQkJCQkJCQl0dHksIDAsCisJCQkJCQkJCVRUWV9PVkVSUlVOKTsKKwkJCQkJCQlpbmZvLT5pY291bnQucngrKzsKKwkJCQkJCS8qIElmIHRoZSBmbGlwIGJ1ZmZlciBpdHNlbGYgaXMKKwkJCQkJCSAgIG92ZXJmbG93aW5nLCB3ZSBzdGlsbCBsb3NlCisJCQkJCQkgICB0aGUgbmV4dCBpbmNvbWluZyBjaGFyYWN0ZXIuCisJCQkJCQkgKi8KKwkJCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigKKwkJCQkJCQkJdHR5LAorCQkJCQkJCQljeV9yZWFkYigKKwkJCQkJCQkJYmFzZV9hZGRyICsKKwkJCQkJCQkJKEN5UkRTUiA8PAorCQkJCQkJCQkJaW5kZXgpKSwKKwkJCQkJCQkJVFRZX0ZSQU1FKTsKKwkJCQkJCQlpbmZvLT5pY291bnQucngrKzsKKwkJCQkJCQlpbmZvLT5pZGxlX3N0YXRzLgorCQkJCQkJCQlvdmVycnVucysrOworCQkJCQkvKiBUaGVzZSB0d28gY29uZGl0aW9ucyBtYXkgaW1wbHkgKi8KKwkJCQkJLyogYSBub3JtYWwgcmVhZCBzaG91bGQgYmUgZG9uZS4gKi8KKwkJCQkJLyogfWVsc2UgaWYoZGF0YSAmIEN5VElNRU9VVCl7ICovCisJCQkJCS8qIH1lbHNlIGlmKGRhdGEgJiBDeVNQRUNIQVIpeyAqLworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigKKwkJCQkJCQkJdHR5LCAwLAorCQkJCQkJCQlUVFlfTk9STUFMKTsKKwkJCQkJCQlpbmZvLT5pY291bnQucngrKzsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwKKwkJCQkJCQkJVFRZX05PUk1BTCk7CisJCQkJCQlpbmZvLT5pY291bnQucngrKzsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIHRoZXJlIHdhcyBhIHNvZnR3YXJlIGJ1ZmZlcgorCQkJCQkgICBvdmVycnVuIGFuZCBub3RoaW5nIGNvdWxkIGJlCisJCQkJCSAgIGRvbmUgYWJvdXQgaXQhISEgKi8KKwkJCQkJaW5mby0+aWNvdW50LmJ1Zl9vdmVycnVuKys7CiAJCQkJCWluZm8tPmlkbGVfc3RhdHMub3ZlcnJ1bnMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXNlIHR3byBjb25kaXRpb25zIG1heSBpbXBseSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYSBub3JtYWwgcmVhZCBzaG91bGQgYmUgZG9uZS4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH1lbHNlIGlmKGRhdGEgJiBDeVRJTUVPVVQpeyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogfWVsc2UgaWYoZGF0YSAmIEN5U1BFQ0hBUil7ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7Ci0JCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX05PUk1BTCk7Ci0JCQkJICAgICAgICBpbmZvLT5pY291bnQucngrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7Ci0JCQkJICAgIHR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX05PUk1BTCk7Ci0JCQkJICAgIGluZm8tPmljb3VudC5yeCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZXJlIHdhcyBhIHNvZnR3YXJlIGJ1ZmZlcgotCQkJCSAgIG92ZXJydW4gYW5kIG5vdGhpbmcgY291bGQgYmUKLQkJCQkgICBkb25lIGFib3V0IGl0ISEhICovCi0JCQkJaW5mby0+aWNvdW50LmJ1Zl9vdmVycnVuKys7Ci0JCQkJaW5mby0+aWRsZV9zdGF0cy5vdmVycnVucysrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIG5vcm1hbCBjaGFyYWN0ZXIgcmVjZXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9hZCAjIGNoYXJzIGF2YWlsYWJsZSBmcm9tIHRoZSBjaGlwICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb3VudCA9IGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lSRENSPDxpbmRleCkpOworCQkJCX0KKwkJCX0gZWxzZSB7CS8qIG5vcm1hbCBjaGFyYWN0ZXIgcmVjZXB0aW9uICovCisJCQkJLyogbG9hZCAjIGNoYXJzIGF2YWlsYWJsZSBmcm9tIHRoZSBjaGlwICovCisJCQkJY2hhcl9jb3VudCA9IGN5X3JlYWRiKGJhc2VfYWRkciArCisJCQkJCQkoQ3lSRENSIDw8IGluZGV4KSk7CiAKICNpZmRlZiBDWV9FTkFCTEVfTU9OSVRPUklORwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5mby0+bW9uLmludF9jb3VudDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5tb24uY2hhcl9jb3VudCArPSBjaGFyX2NvdW50OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyX2NvdW50ID4gaW5mby0+bW9uLmNoYXJfbWF4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPm1vbi5jaGFyX21heCA9IGNoYXJfY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+bW9uLmNoYXJfbGFzdCA9IGNoYXJfY291bnQ7CisJCQkJKytpbmZvLT5tb24uaW50X2NvdW50OworCQkJCWluZm8tPm1vbi5jaGFyX2NvdW50ICs9IGNoYXJfY291bnQ7CisJCQkJaWYgKGNoYXJfY291bnQgPiBpbmZvLT5tb24uY2hhcl9tYXgpCisJCQkJCWluZm8tPm1vbi5jaGFyX21heCA9IGNoYXJfY291bnQ7CisJCQkJaW5mby0+bW9uLmNoYXJfbGFzdCA9IGNoYXJfY291bnQ7CiAjZW5kaWYKLQkJCSAgICBsZW4gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGNoYXJfY291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKGxlbi0tKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lSRFNSPDxpbmRleCkpOwotCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YSwgVFRZX05PUk1BTCk7Ci0JCQkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2J5dGVzKys7Ci0JCQkJaW5mby0+aWNvdW50LnJ4Kys7CisJCQkJbGVuID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBjaGFyX2NvdW50KTsKKwkJCQl3aGlsZSAobGVuLS0pIHsKKwkJCQkJZGF0YSA9IGN5X3JlYWRiKGJhc2VfYWRkciArCisJCQkJCQkJKEN5UkRTUiA8PCBpbmRleCkpOworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGEsCisJCQkJCQkJVFRZX05PUk1BTCk7CisJCQkJCWluZm8tPmlkbGVfc3RhdHMucmVjdl9ieXRlcysrOworCQkJCQlpbmZvLT5pY291bnQucngrKzsKICNpZmRlZiBDWV8xNllfSEFDSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGVsYXkoMTBMKTsKKwkJCQkJdWRlbGF5KDEwTCk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmlkbGVfc3RhdHMucmVjdl9pZGxlID0gamlmZmllczsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCQl9CisJCQkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPSBqaWZmaWVzOworCQkJfQogCQkJdHR5X3NjaGVkdWxlX2ZsaXAodHR5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvKiBlbmQgb2Ygc2VydmljZSAqLwotICAgICAgICAgICAgICAgICAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeVJJUjw8aW5kZXgpLCAoc2F2ZV94aXIgJiAweDNmKSk7Ci0gICAgICAgICAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5Q0FSPDxpbmRleCksIChzYXZlX2NhcikpOwotCQkgICAgc3Bpbl91bmxvY2soJmNpbmZvLT5jYXJkX2xvY2spOwotICAgICAgICAgICAgICAgIH0KKwkJfQorCQkvKiBlbmQgb2Ygc2VydmljZSAqLworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5UklSIDw8IGluZGV4KSwgKHNhdmVfeGlyICYgMHgzZikpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgKHNhdmVfY2FyKSk7CisJCXNwaW5fdW5sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKKwl9CiAKLQotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiBDeVNSVHJhbnNtaXQpIHsgLyogdHJhbnNtaXNzaW9uIGludGVycnVwdCAqLwotICAgICAgICAgICAgICAgICAgICAvKiBTaW5jZSB3ZSBvbmx5IGdldCBoZXJlIHdoZW4gdGhlIHRyYW5zbWl0IGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICAgICBpcyBlbXB0eSwgd2Uga25vdyB3ZSBjYW4gYWx3YXlzIHN0dWZmIGEgZG96ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycy4gKi8KKwlpZiAoc3RhdHVzICYgQ3lTUlRyYW5zbWl0KSB7CS8qIHRyYW5zbWlzc2lvbiBpbnRlcnJ1cHQgKi8KKwkJLyogU2luY2Ugd2Ugb25seSBnZXQgaGVyZSB3aGVuIHRoZSB0cmFuc21pdCBidWZmZXIKKwkJICAgaXMgZW1wdHksIHdlIGtub3cgd2UgY2FuIGFsd2F5cyBzdHVmZiBhIGRvemVuCisJCSAgIGNoYXJhY3RlcnMuICovCiAjaWZkZWYgQ1lfREVCVUdfSU5URVJSVVBUUwotCQkgICAgcHJpbnRrKCJjeXlfaW50ZXJydXB0OiB4bWl0IGludHIsIGNoaXAgJWRcblxyIiwgY2hpcCk7CisJCXByaW50aygiY3l5X2ludGVycnVwdDogeG1pdCBpbnRyLCBjaGlwICVkXG5cciIsIGNoaXApOwogI2VuZGlmCiAKLSAgICAgICAgICAgICAgICAgICAgLyogZGV0ZXJtaW5lIHRoZSBjaGFubmVsICYgY2hhbmdlIHRvIHRoYXQgY29udGV4dCAqLwotCQkgICAgc3Bpbl9sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgc2F2ZV94aXIgPSAodV9jaGFyKSBjeV9yZWFkYihiYXNlX2FkZHIrKEN5VElSPDxpbmRleCkpOwotICAgICAgICAgICAgICAgICAgICBjaGFubmVsID0gKHVfc2hvcnQgKSAoc2F2ZV94aXIgJiBDeUlSQ2hhbm5lbCk7Ci0gICAgICAgICAgICAgICAgICAgIGkgPSBjaGFubmVsICsgY2hpcCAqIDQgKyBjaW5mby0+Zmlyc3RfbGluZTsKLSAgICAgICAgICAgICAgICAgICAgc2F2ZV9jYXIgPSBjeV9yZWFkYihiYXNlX2FkZHIrKEN5Q0FSPDxpbmRleCkpOwotICAgICAgICAgICAgICAgICAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNBUjw8aW5kZXgpLCBzYXZlX3hpcik7CisJCS8qIGRldGVybWluZSB0aGUgY2hhbm5lbCAmIGNoYW5nZSB0byB0aGF0IGNvbnRleHQgKi8KKwkJc3Bpbl9sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKKwkJc2F2ZV94aXIgPSAodV9jaGFyKSBjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lUSVIgPDwgaW5kZXgpKTsKKwkJY2hhbm5lbCA9ICh1X3Nob3J0KSAoc2F2ZV94aXIgJiBDeUlSQ2hhbm5lbCk7CisJCWkgPSBjaGFubmVsICsgY2hpcCAqIDQgKyBjaW5mby0+Zmlyc3RfbGluZTsKKwkJc2F2ZV9jYXIgPSBjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIHNhdmVfeGlyKTsKIAotICAgICAgICAgICAgICAgICAgICAvKiB2YWxpZGF0ZSB0aGUgcG9ydCMgKGFzIGNvbmZpZ3VyZWQgYW5kIG9wZW4pICovCi0gICAgICAgICAgICAgICAgICAgIGlmKCAoaSA8IDApIHx8IChOUl9QT1JUUyA8PSBpKSApewotICAgICAgICAgICAgICAgICAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCkpICYgfkN5VHhSZHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB0eGVuZDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpbmZvID0gJmN5X3BvcnRbaV07Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmxhc3RfYWN0aXZlID0gamlmZmllczsKLSAgICAgICAgICAgICAgICAgICAgaWYoaW5mby0+dHR5ID09IDApewotICAgICAgICAgICAgICAgICAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCkpICYgfkN5VHhSZHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byB0eGRvbmU7Ci0gICAgICAgICAgICAgICAgICAgIH0KKwkJLyogdmFsaWRhdGUgdGhlIHBvcnQjIChhcyBjb25maWd1cmVkIGFuZCBvcGVuKSAqLworCQlpZiAoKGkgPCAwKSB8fCAoTlJfUE9SVFMgPD0gaSkpIHsKKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQkgIGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCisJCQkJICB+Q3lUeFJkeSk7CisJCQlnb3RvIHR4ZW5kOworCQl9CisJCWluZm8gPSAmY3lfcG9ydFtpXTsKKwkJaW5mby0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOworCQlpZiAoaW5mby0+dHR5ID09IDApIHsKKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQkgIGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCisJCQkJICB+Q3lUeFJkeSk7CisJCQlnb3RvIHR4ZG9uZTsKKwkJfQogCi0gICAgICAgICAgICAgICAgICAgIC8qIGxvYWQgdGhlIG9uLWNoaXAgc3BhY2UgZm9yIG91dGJvdW5kIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgY2hhcl9jb3VudCA9IGluZm8tPnhtaXRfZmlmb19zaXplOworCQkvKiBsb2FkIHRoZSBvbi1jaGlwIHNwYWNlIGZvciBvdXRib3VuZCBkYXRhICovCisJCWNoYXJfY291bnQgPSBpbmZvLT54bWl0X2ZpZm9fc2l6ZTsKIAotICAgICAgICAgICAgICAgICAgICBpZihpbmZvLT54X2NoYXIpIHsgLyogc2VuZCBzcGVjaWFsIGNoYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGNoID0gaW5mby0+eF9jaGFyOwotICAgICAgICAgICAgICAgICAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lURFI8PGluZGV4KSwgb3V0Y2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb3VudC0tOworCQlpZiAoaW5mby0+eF9jaGFyKSB7CS8qIHNlbmQgc3BlY2lhbCBjaGFyICovCisJCQlvdXRjaCA9IGluZm8tPnhfY2hhcjsKKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCBvdXRjaCk7CisJCQljaGFyX2NvdW50LS07CiAJCQlpbmZvLT5pY291bnQudHgrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnhfY2hhciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KKwkJCWluZm8tPnhfY2hhciA9IDA7CisJCX0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby0+YnJlYWtvbiB8fCBpbmZvLT5icmVha29mZikgeworCQlpZiAoaW5mby0+YnJlYWtvbiB8fCBpbmZvLT5icmVha29mZikgewogCQkJaWYgKGluZm8tPmJyZWFrb24pIHsKLQkJCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSPDxpbmRleCksIDApOyAKLQkJCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSPDxpbmRleCksIDB4ODEpOwotCQkJICAgIGluZm8tPmJyZWFrb24gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY291bnQgLT0gMjsKKwkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSIDw8IGluZGV4KSwgMCk7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIDB4ODEpOworCQkJCWluZm8tPmJyZWFrb24gPSAwOworCQkJCWNoYXJfY291bnQgLT0gMjsKIAkJCX0KIAkJCWlmIChpbmZvLT5icmVha29mZikgewotCQkJICAgIGN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFI8PGluZGV4KSwgMCk7IAotCQkJICAgIGN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFI8PGluZGV4KSwgMHg4Myk7Ci0JCQkgICAgaW5mby0+YnJlYWtvZmYgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfY291bnQgLT0gMjsKKwkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSIDw8IGluZGV4KSwgMCk7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIDB4ODMpOworCQkJCWluZm8tPmJyZWFrb2ZmID0gMDsKKwkJCQljaGFyX2NvdW50IC09IDI7CiAJCQl9Ci0gICAgICAgICAgICAgICAgICAgIH0KKwkJfQogCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGFyX2NvdW50LS0gPiAwKXsKLQkJCWlmICghaW5mby0+eG1pdF9jbnQpewotCQkJICAgIGlmIChjeV9yZWFkYihiYXNlX2FkZHIrKEN5U1JFUjw8aW5kZXgpKSZDeVR4TXB0eSkgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5U1JFUjw8aW5kZXgpLAotCQkJCQkgIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCkpICYKLQkJCQkJICB+Q3lUeE1wdHkpOwotCQkJICAgIH0gZWxzZSB7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCksCi0JCQkJCSAgKChjeV9yZWFkYihiYXNlX2FkZHIrKEN5U1JFUjw8aW5kZXgpKQotCQkJCQkgICAgJiB+Q3lUeFJkeSkKLQkJCQkJICAgfCBDeVR4TXB0eSkpOwotCQkJICAgIH0KLQkJCSAgICBnb3RvIHR4ZG9uZTsKKwkJd2hpbGUgKGNoYXJfY291bnQtLSA+IDApIHsKKwkJCWlmICghaW5mby0+eG1pdF9jbnQpIHsKKwkJCQlpZiAoY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKKwkJCQkJCUN5VHhNcHR5KSB7CisJCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArCisJCQkJCQkJKEN5U1JFUiA8PCBpbmRleCkpICYKKwkJCQkJCX5DeVR4TXB0eSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAorCQkJCQkJKGN5X3JlYWRiKGJhc2VfYWRkciArCisJCQkJCQkgIAkoQ3lTUkVSIDw8IGluZGV4KSkgJgorCQkJCQkJfkN5VHhSZHkpIHwgQ3lUeE1wdHkpOworCQkJCX0KKwkJCQlnb3RvIHR4ZG9uZTsKIAkJCX0KLQkJCWlmIChpbmZvLT54bWl0X2J1ZiA9PSAwKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeVNSRVI8PGluZGV4KSwKLQkJCQljeV9yZWFkYihiYXNlX2FkZHIrKEN5U1JFUjw8aW5kZXgpKSAmIAorCQkJaWYgKGluZm8tPnhtaXRfYnVmID09IDApIHsKKwkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCisJCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSYKIAkJCQkJfkN5VHhSZHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdHhkb25lOworCQkJCWdvdG8gdHhkb25lOwogCQkJfQotCQkJaWYgKGluZm8tPnR0eS0+c3RvcHBlZCB8fCBpbmZvLT50dHktPmh3X3N0b3BwZWQpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5U1JFUjw8aW5kZXgpLAotCQkJCWN5X3JlYWRiKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCkpICYgCisJCQlpZiAoaW5mby0+dHR5LT5zdG9wcGVkIHx8IGluZm8tPnR0eS0+aHdfc3RvcHBlZCkgeworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpJgogCQkJCQl+Q3lUeFJkeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB0eGRvbmU7CisJCQkJZ290byB0eGRvbmU7CiAJCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBCZWNhdXNlIHRoZSBFbWJlZGRlZCBUcmFuc21pdCBDb21tYW5kcyBoYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBiZWVuIGVuYWJsZWQsIHdlIG11c3QgY2hlY2sgdG8gc2VlIGlmIHRoZQorCQkJLyogQmVjYXVzZSB0aGUgRW1iZWRkZWQgVHJhbnNtaXQgQ29tbWFuZHMgaGF2ZQorCQkJICAgYmVlbiBlbmFibGVkLCB3ZSBtdXN0IGNoZWNrIHRvIHNlZSBpZiB0aGUKIAkJCSAgIGVzY2FwZSBjaGFyYWN0ZXIsIE5VTEwsIGlzIGJlaW5nIHNlbnQuICBJZiBpdAogCQkJICAgaXMsIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlcmUgaXMgcm9vbSBmb3IgaXQKIAkJCSAgIHRvIGJlIGRvdWJsZWQgaW4gdGhlIG91dHB1dCBzdHJlYW0uICBUaGVyZWZvcmUKQEAgLTEzMjIsMTI1ICsxMzEzLDE4MiBAQAogCQkJICAgYWZ0ZXIgdGhlIGNoZWNrIGZvciBhIE5VTEwgb3V0cHV0IGNoYXJhY3Rlci4KIAkJCSAgIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgbWF5IG5vdCBiZQogCQkJICAgcm9vbSBmb3IgdGhlIHR3byBjaGFycyBuZWVkZWQgdG8gc2VuZCBhIE5VTEwuKQotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRjaCA9IGluZm8tPnhtaXRfYnVmW2luZm8tPnhtaXRfdGFpbF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiggb3V0Y2ggKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT54bWl0X2NudC0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnhtaXRfdGFpbCA9IChpbmZvLT54bWl0X3RhaWwgKyAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoU0VSSUFMX1hNSVRfU0laRSAtIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5VERSPDxpbmRleCksIG91dGNoKTsKLQkJCSAgICBpbmZvLT5pY291bnQudHgrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoYXJfY291bnQgPiAxKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+eG1pdF9jbnQtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+eG1pdF90YWlsID0gKGluZm8tPnhtaXRfdGFpbCArIDEpCi0JCQkJCQkgICAgICAmIChTRVJJQUxfWE1JVF9TSVpFIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5VERSPDxpbmRleCksIAotCQkJCQkgIG91dGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lURFI8PGluZGV4KSwgMCk7CisJCQkgKi8KKwkJCW91dGNoID0gaW5mby0+eG1pdF9idWZbaW5mby0+eG1pdF90YWlsXTsKKwkJCWlmIChvdXRjaCkgeworCQkJCWluZm8tPnhtaXRfY250LS07CisJCQkJaW5mby0+eG1pdF90YWlsID0gKGluZm8tPnhtaXRfdGFpbCArIDEpICYKKwkJCQkJCShTRVJJQUxfWE1JVF9TSVpFIC0gMSk7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIG91dGNoKTsKIAkJCQlpbmZvLT5pY291bnQudHgrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9jb3VudC0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2hhcl9jb3VudCA+IDEpIHsKKwkJCQkJaW5mby0+eG1pdF9jbnQtLTsKKwkJCQkJaW5mby0+eG1pdF90YWlsID0gKGluZm8tPnhtaXRfdGFpbCArIDEpJgorCQkJCQkJKFNFUklBTF9YTUlUX1NJWkUgLSAxKTsKKwkJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksCisJCQkJCQlvdXRjaCk7CisJCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLAorCQkJCQkJMCk7CisJCQkJCWluZm8tPmljb3VudC50eCsrOworCQkJCQljaGFyX2NvdW50LS07CisJCQkJfSBlbHNlIHsKKwkJCQl9CisJCQl9CisJCX0KIAotICAgICAgICB0eGRvbmU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLT54bWl0X2NudCA8IFdBS0VVUF9DSEFSUykgewotICAgICAgICAgICAgICAgICAgICAgICAgY3lfc2NoZWRfZXZlbnQoaW5mbywgQ3lfRVZFTlRfV1JJVEVfV0FLRVVQKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICB0eGVuZDoKLSAgICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIHNlcnZpY2UgKi8KLSAgICAgICAgICAgICAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lUSVI8PGluZGV4KSwgCi0JCQkgICAgICAoc2F2ZV94aXIgJiAweDNmKSk7Ci0gICAgICAgICAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5Q0FSPDxpbmRleCksIChzYXZlX2NhcikpOwotCQkgICAgc3Bpbl91bmxvY2soJmNpbmZvLT5jYXJkX2xvY2spOwotICAgICAgICAgICAgICAgIH0KK3R4ZG9uZToKKwkJaWYgKGluZm8tPnhtaXRfY250IDwgV0FLRVVQX0NIQVJTKSB7CisJCQljeV9zY2hlZF9ldmVudChpbmZvLCBDeV9FVkVOVF9XUklURV9XQUtFVVApOworCQl9Cit0eGVuZDoKKwkJLyogZW5kIG9mIHNlcnZpY2UgKi8KKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVRJUiA8PCBpbmRleCksIChzYXZlX3hpciAmIDB4M2YpKTsKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIChzYXZlX2NhcikpOworCQlzcGluX3VubG9jaygmY2luZm8tPmNhcmRfbG9jayk7CisJfQogCi0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIEN5U1JNb2RlbSkgeyAgICAgICAgLyogbW9kZW0gaW50ZXJydXB0ICovCisJaWYgKHN0YXR1cyAmIEN5U1JNb2RlbSkgewkvKiBtb2RlbSBpbnRlcnJ1cHQgKi8KIAotICAgICAgICAgICAgICAgICAgICAvKiBkZXRlcm1pbmUgdGhlIGNoYW5uZWwgJiBjaGFuZ2UgdG8gdGhhdCBjb250ZXh0ICovCi0JCSAgICBzcGluX2xvY2soJmNpbmZvLT5jYXJkX2xvY2spOwotICAgICAgICAgICAgICAgICAgICBzYXZlX3hpciA9ICh1X2NoYXIpIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lNSVI8PGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5uZWwgPSAodV9zaG9ydCApIChzYXZlX3hpciAmIEN5SVJDaGFubmVsKTsKLSAgICAgICAgICAgICAgICAgICAgaW5mbyA9ICZjeV9wb3J0W2NoYW5uZWwgKyBjaGlwICogNAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNpbmZvLT5maXJzdF9saW5lXTsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOwotICAgICAgICAgICAgICAgICAgICBzYXZlX2NhciA9IGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lDQVI8PGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5Q0FSPDxpbmRleCksIHNhdmVfeGlyKTsKKwkJLyogZGV0ZXJtaW5lIHRoZSBjaGFubmVsICYgY2hhbmdlIHRvIHRoYXQgY29udGV4dCAqLworCQlzcGluX2xvY2soJmNpbmZvLT5jYXJkX2xvY2spOworCQlzYXZlX3hpciA9ICh1X2NoYXIpIGN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1JUiA8PCBpbmRleCkpOworCQljaGFubmVsID0gKHVfc2hvcnQpIChzYXZlX3hpciAmIEN5SVJDaGFubmVsKTsKKwkJaW5mbyA9ICZjeV9wb3J0W2NoYW5uZWwgKyBjaGlwICogNCArIGNpbmZvLT5maXJzdF9saW5lXTsKKwkJaW5mby0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOworCQlzYXZlX2NhciA9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCkpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV94aXIpOwogCi0gICAgICAgICAgICAgICAgICAgIG1kbV9jaGFuZ2UgPSBjeV9yZWFkYihiYXNlX2FkZHIrKEN5TUlTUjw8aW5kZXgpKTsKLSAgICAgICAgICAgICAgICAgICAgbWRtX3N0YXR1cyA9IGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lNU1ZSMTw8aW5kZXgpKTsKKwkJbWRtX2NoYW5nZSA9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1JU1IgPDwgaW5kZXgpKTsKKwkJbWRtX3N0YXR1cyA9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYoaW5mby0+dHR5ID09IDApey8qIG5vIHBsYWNlIGZvciBkYXRhLCBpZ25vcmUgaXQqLwotICAgICAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKwkJaWYgKGluZm8tPnR0eSA9PSAwKSB7CS8qIG5vIHBsYWNlIGZvciBkYXRhLCBpZ25vcmUgaXQgKi8KKwkJCTsKKwkJfSBlbHNlIHsKIAkJCWlmIChtZG1fY2hhbmdlICYgQ3lBTllfREVMVEEpIHsKLQkJCSAgICAvKiBGb3Igc3RhdGlzdGljcyBvbmx5ICovCi0JCQkgICAgaWYgKG1kbV9jaGFuZ2UgJiBDeURDRCkJaW5mby0+aWNvdW50LmRjZCsrOwotCQkJICAgIGlmIChtZG1fY2hhbmdlICYgQ3lDVFMpCWluZm8tPmljb3VudC5jdHMrKzsKLQkJCSAgICBpZiAobWRtX2NoYW5nZSAmIEN5RFNSKQlpbmZvLT5pY291bnQuZHNyKys7Ci0JCQkgICAgaWYgKG1kbV9jaGFuZ2UgJiBDeVJJKQlpbmZvLT5pY291bnQucm5nKys7CisJCQkJLyogRm9yIHN0YXRpc3RpY3Mgb25seSAqLworCQkJCWlmIChtZG1fY2hhbmdlICYgQ3lEQ0QpCisJCQkJCWluZm8tPmljb3VudC5kY2QrKzsKKwkJCQlpZiAobWRtX2NoYW5nZSAmIEN5Q1RTKQorCQkJCQlpbmZvLT5pY291bnQuY3RzKys7CisJCQkJaWYgKG1kbV9jaGFuZ2UgJiBDeURTUikKKwkJCQkJaW5mby0+aWNvdW50LmRzcisrOworCQkJCWlmIChtZG1fY2hhbmdlICYgQ3lSSSkKKwkJCQkJaW5mby0+aWNvdW50LnJuZysrOwogCi0JCQkgICAgY3lfc2NoZWRfZXZlbnQoaW5mbywgQ3lfRVZFTlRfREVMVEFfV0FLRVVQKTsKKwkJCQljeV9zY2hlZF9ldmVudChpbmZvLCBDeV9FVkVOVF9ERUxUQV9XQUtFVVApOwogCQkJfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZigobWRtX2NoYW5nZSAmIEN5RENEKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGluZm8tPmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtZG1fc3RhdHVzICYgQ3lEQ0QpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeV9zY2hlZF9ldmVudChpbmZvLAotCQkJCSAgICBDeV9FVkVOVF9PUEVOX1dBS0VVUCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5X3NjaGVkX2V2ZW50KGluZm8sCi0JCQkJICAgIEN5X0VWRU5UX0hBTkdVUCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYoKG1kbV9jaGFuZ2UgJiBDeUNUUykKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIChpbmZvLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5mby0+dHR5LT5od19zdG9wcGVkKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobWRtX3N0YXR1cyAmIEN5Q1RTKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGN5X3N0YXJ0IGlzbid0IHVzZWQKLQkJCQkgICAgICAgICBiZWNhdXNlLi4uICEhISAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+dHR5LT5od19zdG9wcGVkID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeVNSRVI8PGluZGV4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCkpIHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDeVR4UmR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5X3NjaGVkX2V2ZW50KGluZm8sCi0JCQkJICAgICAgICBDeV9FVkVOVF9XUklURV9XQUtFVVApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEobWRtX3N0YXR1cyAmIEN5Q1RTKSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjeV9zdG9wIGlzbid0IHVzZWQKLQkJCQkgICAgICAgICBiZWNhdXNlIC4uLiAhISEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeV9yZWFkYihiYXNlX2FkZHIrKEN5U1JFUjw8aW5kZXgpKSAmIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfkN5VHhSZHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYobWRtX2NoYW5nZSAmIEN5RFNSKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1kbV9jaGFuZ2UgJiBDeVJJKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvKiBlbmQgb2Ygc2VydmljZSAqLwotICAgICAgICAgICAgICAgICAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1JUjw8aW5kZXgpLCAKLQkJCSAgICAgIChzYXZlX3hpciAmIDB4M2YpKTsKLSAgICAgICAgICAgICAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lDQVI8PGluZGV4KSwgc2F2ZV9jYXIpOwotCQkgICAgc3Bpbl91bmxvY2soJmNpbmZvLT5jYXJkX2xvY2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gICAgICAgICAgLyogZW5kIHdoaWxlIHN0YXR1cyAhPSAwICovCi0gICAgICAgIH0gICAgICAgICAgICAvKiBlbmQgbG9vcCBmb3IgY2hpcHMuLi4gKi8KLSAgICB9IHdoaWxlKGhhZF93b3JrKTsKKwkJCWlmICgobWRtX2NoYW5nZSAmIEN5RENEKSAmJgorCQkJCQkoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkpIHsKKwkJCQlpZiAobWRtX3N0YXR1cyAmIEN5RENEKSB7CisJCQkJCWN5X3NjaGVkX2V2ZW50KGluZm8sCisJCQkJCQkJQ3lfRVZFTlRfT1BFTl9XQUtFVVApOworCQkJCX0gZWxzZSB7CisJCQkJCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX0hBTkdVUCk7CisJCQkJfQorCQkJfQorCQkJaWYgKChtZG1fY2hhbmdlICYgQ3lDVFMpICYmCisJCQkJCShpbmZvLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSkgeworCQkJCWlmIChpbmZvLT50dHktPmh3X3N0b3BwZWQpIHsKKwkJCQkJaWYgKG1kbV9zdGF0dXMgJiBDeUNUUykgeworCQkJCQkJLyogY3lfc3RhcnQgaXNuJ3QgdXNlZAorCQkJCQkJICAgYmVjYXVzZS4uLiAhISEgKi8KKwkJCQkJCWluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsKKwkJCQkJCQkoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQkJCQljeV9yZWFkYihiYXNlX2FkZHIgKworCQkJCQkJCQkoQ3lTUkVSIDw8CisJCQkJCQkJCQlpbmRleCkpfAorCQkJCQkJCUN5VHhSZHkpOworCQkJCQkJY3lfc2NoZWRfZXZlbnQoaW5mbywKKwkJCQkJCQlDeV9FVkVOVF9XUklURV9XQUtFVVApOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKCEobWRtX3N0YXR1cyAmIEN5Q1RTKSkgeworCQkJCQkJLyogY3lfc3RvcCBpc24ndCB1c2VkCisJCQkJCQkgICBiZWNhdXNlIC4uLiAhISEgKi8KKwkJCQkJCWluZm8tPnR0eS0+aHdfc3RvcHBlZCA9IDE7CisJCQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsKKwkJCQkJCQkoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQkJCQljeV9yZWFkYihiYXNlX2FkZHIgKworCQkJCQkJCQkoQ3lTUkVSIDw8CisJCQkJCQkJCWluZGV4KSkgJgorCQkJCQkJCX5DeVR4UmR5KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChtZG1fY2hhbmdlICYgQ3lEU1IpIHsKKwkJCX0KKwkJCWlmIChtZG1fY2hhbmdlICYgQ3lSSSkgeworCQkJfQorCQl9CisJCS8qIGVuZCBvZiBzZXJ2aWNlICovCisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNSVIgPDwgaW5kZXgpLCAoc2F2ZV94aXIgJiAweDNmKSk7CisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCBzYXZlX2Nhcik7CisJCXNwaW5fdW5sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKKwl9Cit9CiAKLSAgIC8qIGNsZWFyIGludGVycnVwdHMgKi8KLSAgIHNwaW5fbG9jaygmY2luZm8tPmNhcmRfbG9jayk7Ci0gICBjeV93cml0ZWIoY2FyZF9iYXNlX2FkZHIgKyAoQ3lfQ2xySW50cjw8aW5kZXgpLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3lfQ2xySW50ciBpcyAweDE4MDAgKi8KLSAgIHNwaW5fdW5sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKLSAgIHJldHVybiBJUlFfSEFORExFRDsKLX0gLyogY3l5X2ludGVycnVwdCAqLworLyogVGhlIHJlYWwgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBpcyBjYWxsZWQKKyAgIHdoZW5ldmVyIHRoZSBjYXJkIHdhbnRzIGl0cyBoYW5kIGhlbGQtLWNoYXJzCisgICByZWNlaXZlZCwgb3V0IGJ1ZmZlciBlbXB0eSwgbW9kZW0gY2hhbmdlLCBldGMuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBjeXlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkciwgKmNhcmRfYmFzZV9hZGRyOworCWludCBjaGlwOworCWludCBpbmRleDsKKwlpbnQgdG9vX21hbnk7CisJaW50IGhhZF93b3JrOworCisJaWYgKChjaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqKWRldl9pZCkgPT0gMCkgeworI2lmZGVmIENZX0RFQlVHX0lOVEVSUlVQVFMKKwkJcHJpbnRrKCJjeXlfaW50ZXJydXB0OiBzcHVyaW91cyBpbnRlcnJ1cHQgJWRcblxyIiwgaXJxKTsKKyNlbmRpZgorCQlyZXR1cm4gSVJRX05PTkU7CS8qIHNwdXJpb3VzIGludGVycnVwdCAqLworCX0KKworCWNhcmRfYmFzZV9hZGRyID0gY2luZm8tPmJhc2VfYWRkcjsKKwlpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7CisKKwkvKiBUaGlzIGxvb3AgY2hlY2tzIGFsbCBjaGlwcyBpbiB0aGUgY2FyZC4gIE1ha2UgYSBub3RlIHdoZW5ldmVyCisJICAgX2FueV8gY2hpcCBoYWQgc29tZSB3b3JrIHRvIGRvLCBhcyB0aGlzIGlzIGNvbnNpZGVyZWQgYW4KKwkgICBpbmRpY2F0aW9uIHRoYXQgdGhlcmUgd2lsbCBiZSBtb3JlIHRvIGRvLiAgT25seSB3aGVuIG5vIGNoaXAKKwkgICBoYXMgYW55IHdvcmsgZG9lcyB0aGlzIG91dGVybW9zdCBsb29wIGV4aXQuCisJICovCisJZG8geworCQloYWRfd29yayA9IDA7CisJCWZvciAoY2hpcCA9IDA7IGNoaXAgPCBjaW5mby0+bnVtX2NoaXBzOyBjaGlwKyspIHsKKwkJCWJhc2VfYWRkciA9IGNpbmZvLT5iYXNlX2FkZHIgKworCQkJCQkoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOworCQkJdG9vX21hbnkgPSAwOworCQkJd2hpbGUgKChzdGF0dXMgPSBjeV9yZWFkYihiYXNlX2FkZHIgKworCQkJCQkJKEN5U1ZSUiA8PCBpbmRleCkpKSAhPSAweDAwKSB7CisJCQkJaGFkX3dvcmsrKzsKKwkJCS8qIFRoZSBwdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgdGVzdCBpcyB0byBlbnN1cmUgdGhhdAorCQkJICAgbm8gY2hpcCBjYW4gbW9ub3BvbGl6ZSB0aGUgZHJpdmVyLiAgVGhpcyBmb3JjZXMgdGhlCisJCQkgICBjaGlwcyB0byBiZSBjaGVja2VkIGluIGEgcm91bmQtcm9iaW4gZmFzaGlvbiAoYWZ0ZXIKKwkJCSAgIGRyYWluaW5nIGVhY2ggb2YgYSBidW5jaCAoMTAwMCkgb2YgY2hhcmFjdGVycykuCisJCQkgKi8KKwkJCQlpZiAoMTAwMCA8IHRvb19tYW55KyspIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWN5eV9pbnRyX2NoaXAoY2luZm8sIGNoaXAsIGJhc2VfYWRkciwgc3RhdHVzLAorCQkJCQkJaW5kZXgpOworCQkJfQorCQl9CisJfSB3aGlsZSAoaGFkX3dvcmspOworCisJLyogY2xlYXIgaW50ZXJydXB0cyAqLworCXNwaW5fbG9jaygmY2luZm8tPmNhcmRfbG9jayk7CisJY3lfd3JpdGViKGNhcmRfYmFzZV9hZGRyICsgKEN5X0NsckludHIgPDwgaW5kZXgpLCAwKTsKKwkvKiBDeV9DbHJJbnRyIGlzIDB4MTgwMCAqLworCXNwaW5fdW5sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CQkJCS8qIGN5eV9pbnRlcnJ1cHQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKiBFbmQgb2YgYmxvY2sgb2YgQ3ljbG9tLVkgc3BlY2lmaWMgY29kZSAqKioqKioqKioqLwpAQCAtMTQ0OCw2NDMgKzE0OTYsNjU1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQKLWN5el9mZXRjaF9tc2coIHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbywKLQkgICAgdWNsb25nICpjaGFubmVsLCB1Y2NoYXIgKmNtZCwgdWNsb25nICpwYXJhbSkKK2N5el9mZXRjaF9tc2coc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvLAorCQl1Y2xvbmcgKiBjaGFubmVsLCB1Y2NoYXIgKiBjbWQsIHVjbG9uZyAqIHBhcmFtKQogewotICBzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotICBzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7Ci0gIHN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7Ci0gIHVuc2lnbmVkIGxvbmcgbG9jX2Rvb3JiZWxsOworCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7CisJc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOworCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7CisJdW5zaWduZWQgbG9uZyBsb2NfZG9vcmJlbGw7CiAKLSAgICBmaXJtX2lkID0gY2luZm8tPmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0gICAgaWYgKCFJU1pMT0FERUQoKmNpbmZvKSl7Ci0JcmV0dXJuICgtMSk7Ci0gICAgfQotICAgIHpmd19jdHJsID0gY2luZm8tPmJhc2VfYWRkciArIChjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotICAgIGJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7CisJZmlybV9pZCA9IGNpbmZvLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOworCWlmICghSVNaTE9BREVEKCpjaW5mbykpIHsKKwkJcmV0dXJuIC0xOworCX0KKwl6ZndfY3RybCA9IGNpbmZvLT5iYXNlX2FkZHIgKyAoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJgorCQkJMHhmZmZmZik7CisJYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKIAotICAgIGxvY19kb29yYmVsbCA9IGN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKQotICAgICAgICAgICAgICAgICAgICAgKGNpbmZvLT5jdGxfYWRkcikpLT5sb2NfZG9vcmJlbGwpOwotICAgIGlmIChsb2NfZG9vcmJlbGwpewotCSpjbWQgPSAoY2hhcikoMHhmZiAmIGxvY19kb29yYmVsbCk7Ci0JKmNoYW5uZWwgPSBjeV9yZWFkbCgmYm9hcmRfY3RybC0+ZndjbWRfY2hhbm5lbCk7Ci0JKnBhcmFtID0gKHVjbG9uZyljeV9yZWFkbCgmYm9hcmRfY3RybC0+ZndjbWRfcGFyYW0pOwotCWN5X3dyaXRlbCgmKChzdHJ1Y3QgUlVOVElNRV85MDYwIF9faW9tZW0gKikoY2luZm8tPmN0bF9hZGRyKSktPmxvY19kb29yYmVsbCwgCi0gICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYpOwotCXJldHVybiAxOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0gLyogY3l6X2ZldGNoX21zZyAqLworCWxvY19kb29yYmVsbCA9IGN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKQorCQkJCSAgKGNpbmZvLT5jdGxfYWRkcikpLT5sb2NfZG9vcmJlbGwpOworCWlmIChsb2NfZG9vcmJlbGwpIHsKKwkJKmNtZCA9IChjaGFyKSgweGZmICYgbG9jX2Rvb3JiZWxsKTsKKwkJKmNoYW5uZWwgPSBjeV9yZWFkbCgmYm9hcmRfY3RybC0+ZndjbWRfY2hhbm5lbCk7CisJCSpwYXJhbSA9ICh1Y2xvbmcpIGN5X3JlYWRsKCZib2FyZF9jdHJsLT5md2NtZF9wYXJhbSk7CisJCWN5X3dyaXRlbCgmKChzdHJ1Y3QgUlVOVElNRV85MDYwIF9faW9tZW0gKikoY2luZm8tPmN0bF9hZGRyKSktPgorCQkJICBsb2NfZG9vcmJlbGwsIDB4ZmZmZmZmZmYpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CQkJCS8qIGN5el9mZXRjaF9tc2cgKi8KIAogc3RhdGljIGludAotY3l6X2lzc3VlX2NtZCggc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvLAotCSAgICB1Y2xvbmcgY2hhbm5lbCwgdWNjaGFyIGNtZCwgdWNsb25nIHBhcmFtKQorY3l6X2lzc3VlX2NtZChzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8sCisJCXVjbG9uZyBjaGFubmVsLCB1Y2NoYXIgY21kLCB1Y2xvbmcgcGFyYW0pCiB7Ci0gIHN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7Ci0gIHN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLSAgc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKLSAgdW5zaWduZWQgbG9uZyBfX2lvbWVtICpwY2lfZG9vcmJlbGw7Ci0gIGludCBpbmRleDsKKwlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOworCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKKwlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOworCXVuc2lnbmVkIGxvbmcgX19pb21lbSAqcGNpX2Rvb3JiZWxsOworCWludCBpbmRleDsKIAotICAgIGZpcm1faWQgPSBjaW5mby0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKLSAgICBpZiAoIUlTWkxPQURFRCgqY2luZm8pKXsKLQlyZXR1cm4gKC0xKTsKLSAgICB9Ci0gICAgemZ3X2N0cmwgPSBjaW5mby0+YmFzZV9hZGRyICsgKGN5X3JlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7Ci0gICAgYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKKwlmaXJtX2lkID0gY2luZm8tPmJhc2VfYWRkciArIElEX0FERFJFU1M7CisJaWYgKCFJU1pMT0FERUQoKmNpbmZvKSkgeworCQlyZXR1cm4gLTE7CisJfQorCXpmd19jdHJsID0gY2luZm8tPmJhc2VfYWRkciArIChjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmCisJCQkweGZmZmZmKTsKKwlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwogCi0gICAgaW5kZXggPSAwOwotICAgIHBjaV9kb29yYmVsbCA9ICYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKSAoY2luZm8tPmN0bF9hZGRyKSktPnBjaV9kb29yYmVsbDsKLSAgICB3aGlsZSggKGN5X3JlYWRsKHBjaV9kb29yYmVsbCkgJiAweGZmKSAhPSAwKXsKLSAgICAgICAgaWYgKGluZGV4KysgPT0gMTAwMCl7Ci0JICAgIHJldHVybigoaW50KShjeV9yZWFkbChwY2lfZG9vcmJlbGwpICYgMHhmZikpOwotICAgICAgICB9Ci0JdWRlbGF5KDUwTCk7Ci0gICAgfQotICAgIGN5X3dyaXRlbCgmYm9hcmRfY3RybC0+aGNtZF9jaGFubmVsLCBjaGFubmVsKTsKLSAgICBjeV93cml0ZWwoJmJvYXJkX2N0cmwtPmhjbWRfcGFyYW0gLCBwYXJhbSk7Ci0gICAgY3lfd3JpdGVsKHBjaV9kb29yYmVsbCwgKGxvbmcpY21kKTsKKwlpbmRleCA9IDA7CisJcGNpX2Rvb3JiZWxsID0KKwkgICAgJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopKGNpbmZvLT5jdGxfYWRkcikpLT5wY2lfZG9vcmJlbGw7CisJd2hpbGUgKChjeV9yZWFkbChwY2lfZG9vcmJlbGwpICYgMHhmZikgIT0gMCkgeworCQlpZiAoaW5kZXgrKyA9PSAxMDAwKSB7CisJCQlyZXR1cm4gKGludCkoY3lfcmVhZGwocGNpX2Rvb3JiZWxsKSAmIDB4ZmYpOworCQl9CisJCXVkZWxheSg1MEwpOworCX0KKwljeV93cml0ZWwoJmJvYXJkX2N0cmwtPmhjbWRfY2hhbm5lbCwgY2hhbm5lbCk7CisJY3lfd3JpdGVsKCZib2FyZF9jdHJsLT5oY21kX3BhcmFtLCBwYXJhbSk7CisJY3lfd3JpdGVsKHBjaV9kb29yYmVsbCwgKGxvbmcpY21kKTsKIAotICAgIHJldHVybigwKTsKLX0gLyogY3l6X2lzc3VlX2NtZCAqLworCXJldHVybiAwOworfQkJCQkvKiBjeXpfaXNzdWVfY21kICovCiAKIHN0YXRpYyB2b2lkCiBjeXpfaGFuZGxlX3J4KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAotCSAgICAgIHZvbGF0aWxlIHN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmwsCi0JICAgICAgdm9sYXRpbGUgc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKmJ1Zl9jdHJsKQorCQl2b2xhdGlsZSBzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICogY2hfY3RybCwKKwkJdm9sYXRpbGUgc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKiBidWZfY3RybCkKIHsKLSAgc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gJmN5X2NhcmRbaW5mby0+Y2FyZF07Ci0gIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7Ci0gIHZvbGF0aWxlIGludCBjaGFyX2NvdW50OwotICBpbnQgbGVuOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9ICZjeV9jYXJkW2luZm8tPmNhcmRdOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CisJdm9sYXRpbGUgaW50IGNoYXJfY291bnQ7CisJaW50IGxlbjsKICNpZmRlZiBCTE9DS01PVkUKLSAgaW50IHNtYWxsX2NvdW50OworCWludCBzbWFsbF9jb3VudDsKICNlbHNlCi0gIGNoYXIgZGF0YTsKKwljaGFyIGRhdGE7CiAjZW5kaWYKLSAgdm9sYXRpbGUgdWNsb25nIHJ4X3B1dCwgcnhfZ2V0LCBuZXdfcnhfZ2V0LCByeF9idWZzaXplLCByeF9idWZhZGRyOworCXZvbGF0aWxlIHVjbG9uZyByeF9wdXQsIHJ4X2dldCwgbmV3X3J4X2dldCwgcnhfYnVmc2l6ZSwgcnhfYnVmYWRkcjsKIAotICAgIHJ4X2dldCA9IG5ld19yeF9nZXQgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnJ4X2dldCk7Ci0gICAgcnhfcHV0ID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT5yeF9wdXQpOwotICAgIHJ4X2J1ZnNpemUgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnJ4X2J1ZnNpemUpOwotICAgIHJ4X2J1ZmFkZHIgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnJ4X2J1ZmFkZHIpOwotICAgIGlmIChyeF9wdXQgPj0gcnhfZ2V0KQotCWNoYXJfY291bnQgPSByeF9wdXQgLSByeF9nZXQ7Ci0gICAgZWxzZQotCWNoYXJfY291bnQgPSByeF9wdXQgLSByeF9nZXQgKyByeF9idWZzaXplOworCXJ4X2dldCA9IG5ld19yeF9nZXQgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnJ4X2dldCk7CisJcnhfcHV0ID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT5yeF9wdXQpOworCXJ4X2J1ZnNpemUgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnJ4X2J1ZnNpemUpOworCXJ4X2J1ZmFkZHIgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnJ4X2J1ZmFkZHIpOworCWlmIChyeF9wdXQgPj0gcnhfZ2V0KQorCQljaGFyX2NvdW50ID0gcnhfcHV0IC0gcnhfZ2V0OworCWVsc2UKKwkJY2hhcl9jb3VudCA9IHJ4X3B1dCAtIHJ4X2dldCArIHJ4X2J1ZnNpemU7CiAKLSAgICBpZiAoIGNoYXJfY291bnQgKSB7Ci0JaW5mby0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOwotCWluZm8tPmppZmZpZXNbMV0gPSBqaWZmaWVzOworCWlmIChjaGFyX2NvdW50KSB7CisJCWluZm8tPmxhc3RfYWN0aXZlID0gamlmZmllczsKKwkJaW5mby0+amlmZmllc1sxXSA9IGppZmZpZXM7CiAKICNpZmRlZiBDWV9FTkFCTEVfTU9OSVRPUklORwotCWluZm8tPm1vbi5pbnRfY291bnQrKzsKLQlpbmZvLT5tb24uY2hhcl9jb3VudCArPSBjaGFyX2NvdW50OwotCWlmIChjaGFyX2NvdW50ID4gaW5mby0+bW9uLmNoYXJfbWF4KQotCSAgICBpbmZvLT5tb24uY2hhcl9tYXggPSBjaGFyX2NvdW50OwotCWluZm8tPm1vbi5jaGFyX2xhc3QgPSBjaGFyX2NvdW50OworCQlpbmZvLT5tb24uaW50X2NvdW50Kys7CisJCWluZm8tPm1vbi5jaGFyX2NvdW50ICs9IGNoYXJfY291bnQ7CisJCWlmIChjaGFyX2NvdW50ID4gaW5mby0+bW9uLmNoYXJfbWF4KQorCQkJaW5mby0+bW9uLmNoYXJfbWF4ID0gY2hhcl9jb3VudDsKKwkJaW5mby0+bW9uLmNoYXJfbGFzdCA9IGNoYXJfY291bnQ7CiAjZW5kaWYKLQlpZih0dHkgPT0gMCl7Ci0JICAgIC8qIGZsdXNoIHJlY2VpdmVkIGNoYXJhY3RlcnMgKi8KLQkgICAgbmV3X3J4X2dldCA9IChuZXdfcnhfZ2V0ICsgY2hhcl9jb3VudCkgJiAocnhfYnVmc2l6ZSAtIDEpOwotCSAgICBpbmZvLT5yZmx1c2hfY291bnQrKzsKLQl9ZWxzZXsKKwkJaWYgKHR0eSA9PSAwKSB7CisJCQkvKiBmbHVzaCByZWNlaXZlZCBjaGFyYWN0ZXJzICovCisJCQluZXdfcnhfZ2V0ID0gKG5ld19yeF9nZXQgKyBjaGFyX2NvdW50KSAmCisJCQkJCShyeF9idWZzaXplIC0gMSk7CisJCQlpbmZvLT5yZmx1c2hfY291bnQrKzsKKwkJfSBlbHNlIHsKICNpZmRlZiBCTE9DS01PVkUKLQkgICAgLyogd2UnZCBsaWtlIHRvIHVzZSBtZW1jcHkodCwgZiwgbikgYW5kIG1lbXNldChzLCBjLCBjb3VudCkKLQkgICAgICAgZm9yIHBlcmZvcm1hbmNlLCBidXQgYmVjYXVzZSBvZiBidWZmZXIgYm91bmRhcmllcywgdGhlcmUKLQkgICAgICAgbWF5IGJlIHNldmVyYWwgc3RlcHMgdG8gdGhlIG9wZXJhdGlvbiAqLwotCSAgICB3aGlsZSgwIDwgKHNtYWxsX2NvdW50ID0gCi0JCSAgICAgICBtaW5fdCh1bnNpZ25lZCBpbnQsIChyeF9idWZzaXplIC0gbmV3X3J4X2dldCksCi0JCSAgICAgICBtaW5fdCh1bnNpZ25lZCBpbnQsIChUVFlfRkxJUEJVRl9TSVpFIC0gdHR5LT5mbGlwLmNvdW50KSwgY2hhcl9jb3VudCkpCi0JCSApKSB7Ci0JCW1lbWNweV9mcm9taW8odHR5LT5mbGlwLmNoYXJfYnVmX3B0ciwKLQkJCSAgICAgIChjaGFyICopKGNpbmZvLT5iYXNlX2FkZHIKLQkJCQkgICAgICAgKyByeF9idWZhZGRyICsgbmV3X3J4X2dldCksCi0JCQkgICAgICBzbWFsbF9jb3VudCk7CisJCS8qIHdlJ2QgbGlrZSB0byB1c2UgbWVtY3B5KHQsIGYsIG4pIGFuZCBtZW1zZXQocywgYywgY291bnQpCisJCSAgIGZvciBwZXJmb3JtYW5jZSwgYnV0IGJlY2F1c2Ugb2YgYnVmZmVyIGJvdW5kYXJpZXMsIHRoZXJlCisJCSAgIG1heSBiZSBzZXZlcmFsIHN0ZXBzIHRvIHRoZSBvcGVyYXRpb24gKi8KKwkJCXdoaWxlICgwIDwgKHNtYWxsX2NvdW50ID0gbWluX3QodW5zaWduZWQgaW50LAorCQkJCQlyeF9idWZzaXplIC0gbmV3X3J4X2dldCwKKwkJCQkJbWluX3QodW5zaWduZWQgaW50LCBUVFlfRkxJUEJVRl9TSVpFIC0KKwkJCQkJCXR0eS0+ZmxpcC5jb3VudCwgY2hhcl9jb3VudCkpKSl7CisJCQkJbWVtY3B5X2Zyb21pbyh0dHktPmZsaXAuY2hhcl9idWZfcHRyLAorCQkJCQkoY2hhciAqKShjaW5mby0+YmFzZV9hZGRyICsgcnhfYnVmYWRkciArCisJCQkJCQluZXdfcnhfZ2V0KSwKKwkJCQkJc21hbGxfY291bnQpOwogCi0JCXR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIgKz0gc21hbGxfY291bnQ7Ci0JCW1lbXNldCh0dHktPmZsaXAuZmxhZ19idWZfcHRyLCBUVFlfTk9STUFMLCBzbWFsbF9jb3VudCk7Ci0JCXR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIgKz0gc21hbGxfY291bnQ7Ci0JCW5ld19yeF9nZXQgPSAobmV3X3J4X2dldCArIHNtYWxsX2NvdW50KSAmIChyeF9idWZzaXplIC0gMSk7Ci0JCWNoYXJfY291bnQgLT0gc21hbGxfY291bnQ7Ci0JCWluZm8tPmljb3VudC5yeCArPSBzbWFsbF9jb3VudDsKLQkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2J5dGVzICs9IHNtYWxsX2NvdW50OwotCQl0dHktPmZsaXAuY291bnQgKz0gc21hbGxfY291bnQ7Ci0JICAgIH0KKwkJCQl0dHktPmZsaXAuY2hhcl9idWZfcHRyICs9IHNtYWxsX2NvdW50OworCQkJCW1lbXNldCh0dHktPmZsaXAuZmxhZ19idWZfcHRyLCBUVFlfTk9STUFMLAorCQkJCQlzbWFsbF9jb3VudCk7CisJCQkJdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciArPSBzbWFsbF9jb3VudDsKKwkJCQluZXdfcnhfZ2V0ID0gKG5ld19yeF9nZXQgKyBzbWFsbF9jb3VudCkgJgorCQkJCQkJKHJ4X2J1ZnNpemUgLSAxKTsKKwkJCQljaGFyX2NvdW50IC09IHNtYWxsX2NvdW50OworCQkJCWluZm8tPmljb3VudC5yeCArPSBzbWFsbF9jb3VudDsKKwkJCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfYnl0ZXMgKz0gc21hbGxfY291bnQ7CisJCQkJdHR5LT5mbGlwLmNvdW50ICs9IHNtYWxsX2NvdW50OworCQkJfQogI2Vsc2UKLQkgICAgbGVuID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBjaGFyX2NvdW50KTsKLQkgICAgd2hpbGUobGVuLS0pewotCQlkYXRhID0gY3lfcmVhZGIoY2luZm8tPmJhc2VfYWRkciArIHJ4X2J1ZmFkZHIgKyBuZXdfcnhfZ2V0KTsKLQkJbmV3X3J4X2dldCA9IChuZXdfcnhfZ2V0ICsgMSkgJiAocnhfYnVmc2l6ZSAtIDEpOwotCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGEsIFRUWV9OT1JNQUwpOwotCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfYnl0ZXMrKzsKLQkJaW5mby0+aWNvdW50LnJ4Kys7Ci0JICAgIH0KKwkJCWxlbiA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY2hhcl9jb3VudCk7CisJCQl3aGlsZSAobGVuLS0pIHsKKwkJCQlkYXRhID0gY3lfcmVhZGIoY2luZm8tPmJhc2VfYWRkciArIHJ4X2J1ZmFkZHIgKworCQkJCQkJbmV3X3J4X2dldCk7CisJCQkJbmV3X3J4X2dldCA9IChuZXdfcnhfZ2V0ICsgMSkmIChyeF9idWZzaXplIC0gMSk7CisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhLCBUVFlfTk9STUFMKTsKKwkJCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfYnl0ZXMrKzsKKwkJCQlpbmZvLT5pY291bnQucngrKzsKKwkJCX0KICNlbmRpZgogI2lmZGVmIENPTkZJR19DWVpfSU5UUgotCSAgICAvKiBSZWNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoYXJzIGluIHRoZSBSWCBidWZmZXIgYW5kIGlzc3VlCi0JICAgICAgIGEgY21kIGluIGNhc2UgaXQncyBoaWdoZXIgdGhhbiB0aGUgUlggaGlnaCB3YXRlciBtYXJrICovCi0JICAgIHJ4X3B1dCA9IGN5X3JlYWRsKCZidWZfY3RybC0+cnhfcHV0KTsKLQkgICAgaWYgKHJ4X3B1dCA+PSByeF9nZXQpCi0JCWNoYXJfY291bnQgPSByeF9wdXQgLSByeF9nZXQ7Ci0JICAgIGVsc2UKLQkJY2hhcl9jb3VudCA9IHJ4X3B1dCAtIHJ4X2dldCArIHJ4X2J1ZnNpemU7Ci0JICAgIGlmKGNoYXJfY291bnQgPj0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT5yeF90aHJlc2hvbGQpKSB7Ci0JCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX1pfUlhfRlVMTCk7Ci0JICAgIH0KKwkJLyogUmVjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFycyBpbiB0aGUgUlggYnVmZmVyIGFuZCBpc3N1ZQorCQkgICBhIGNtZCBpbiBjYXNlIGl0J3MgaGlnaGVyIHRoYW4gdGhlIFJYIGhpZ2ggd2F0ZXIgbWFyayAqLworCQkJcnhfcHV0ID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT5yeF9wdXQpOworCQkJaWYgKHJ4X3B1dCA+PSByeF9nZXQpCisJCQkJY2hhcl9jb3VudCA9IHJ4X3B1dCAtIHJ4X2dldDsKKwkJCWVsc2UKKwkJCQljaGFyX2NvdW50ID0gcnhfcHV0IC0gcnhfZ2V0ICsgcnhfYnVmc2l6ZTsKKwkJCWlmIChjaGFyX2NvdW50ID49IChpbnQpY3lfcmVhZGwoJmJ1Zl9jdHJsLT4KKwkJCQkJcnhfdGhyZXNob2xkKSkgeworCQkJCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX1pfUlhfRlVMTCk7CisJCQl9CiAjZW5kaWYKLQkgICAgaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPSBqaWZmaWVzOwotCSAgICB0dHlfc2NoZWR1bGVfZmxpcCh0dHkpOworCQkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPSBqaWZmaWVzOworCQkJdHR5X3NjaGVkdWxlX2ZsaXAodHR5KTsKKwkJfQorCQkvKiBVcGRhdGUgcnhfZ2V0ICovCisJCWN5X3dyaXRlbCgmYnVmX2N0cmwtPnJ4X2dldCwgbmV3X3J4X2dldCk7CiAJfQotCS8qIFVwZGF0ZSByeF9nZXQgKi8KLQljeV93cml0ZWwoJmJ1Zl9jdHJsLT5yeF9nZXQsIG5ld19yeF9nZXQpOwotICAgIH0KIH0KIAogc3RhdGljIHZvaWQKIGN5el9oYW5kbGVfdHgoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sCi0JICAgICAgdm9sYXRpbGUgc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybCwKLQkgICAgICB2b2xhdGlsZSBzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmwpCisJCXZvbGF0aWxlIHN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKiBjaF9jdHJsLAorCQl2b2xhdGlsZSBzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqIGJ1Zl9jdHJsKQogewotICBzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSAmY3lfY2FyZFtpbmZvLT5jYXJkXTsKLSAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKLSAgY2hhciBkYXRhOwotICB2b2xhdGlsZSBpbnQgY2hhcl9jb3VudDsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSAmY3lfY2FyZFtpbmZvLT5jYXJkXTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OworCWNoYXIgZGF0YTsKKwl2b2xhdGlsZSBpbnQgY2hhcl9jb3VudDsKICNpZmRlZiBCTE9DS01PVkUKLSAgaW50IHNtYWxsX2NvdW50OworCWludCBzbWFsbF9jb3VudDsKICNlbmRpZgotICB2b2xhdGlsZSB1Y2xvbmcgdHhfcHV0LCB0eF9nZXQsIHR4X2J1ZnNpemUsIHR4X2J1ZmFkZHI7CisJdm9sYXRpbGUgdWNsb25nIHR4X3B1dCwgdHhfZ2V0LCB0eF9idWZzaXplLCB0eF9idWZhZGRyOwogCi0gICAgaWYgKGluZm8tPnhtaXRfY250IDw9IDApCS8qIE5vdGhpbmcgdG8gdHJhbnNtaXQgKi8KLQlyZXR1cm47CisJaWYgKGluZm8tPnhtaXRfY250IDw9IDApCS8qIE5vdGhpbmcgdG8gdHJhbnNtaXQgKi8KKwkJcmV0dXJuOwogCi0gICAgdHhfZ2V0ID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT50eF9nZXQpOwotICAgIHR4X3B1dCA9IGN5X3JlYWRsKCZidWZfY3RybC0+dHhfcHV0KTsKLSAgICB0eF9idWZzaXplID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT50eF9idWZzaXplKTsKLSAgICB0eF9idWZhZGRyID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT50eF9idWZhZGRyKTsKLSAgICBpZiAodHhfcHV0ID49IHR4X2dldCkKLQljaGFyX2NvdW50ID0gdHhfZ2V0IC0gdHhfcHV0IC0gMSArIHR4X2J1ZnNpemU7Ci0gICAgZWxzZQotCWNoYXJfY291bnQgPSB0eF9nZXQgLSB0eF9wdXQgLSAxOworCXR4X2dldCA9IGN5X3JlYWRsKCZidWZfY3RybC0+dHhfZ2V0KTsKKwl0eF9wdXQgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnR4X3B1dCk7CisJdHhfYnVmc2l6ZSA9IGN5X3JlYWRsKCZidWZfY3RybC0+dHhfYnVmc2l6ZSk7CisJdHhfYnVmYWRkciA9IGN5X3JlYWRsKCZidWZfY3RybC0+dHhfYnVmYWRkcik7CisJaWYgKHR4X3B1dCA+PSB0eF9nZXQpCisJCWNoYXJfY291bnQgPSB0eF9nZXQgLSB0eF9wdXQgLSAxICsgdHhfYnVmc2l6ZTsKKwllbHNlCisJCWNoYXJfY291bnQgPSB0eF9nZXQgLSB0eF9wdXQgLSAxOwogCi0gICAgaWYgKCBjaGFyX2NvdW50ICkgeworCWlmIChjaGFyX2NvdW50KSB7CiAKLQlpZiggdHR5ID09IDAgKXsKLQkgICAgZ290byB6dHhkb25lOwotCX0KLQotCWlmKGluZm8tPnhfY2hhcikgeyAvKiBzZW5kIHNwZWNpYWwgY2hhciAqLwotCSAgICBkYXRhID0gaW5mby0+eF9jaGFyOwotCi0JICAgIGN5X3dyaXRlYigoY2luZm8tPmJhc2VfYWRkciArIHR4X2J1ZmFkZHIgKyB0eF9wdXQpLCBkYXRhKTsKLQkgICAgdHhfcHV0ID0gKHR4X3B1dCArIDEpICYgKHR4X2J1ZnNpemUgLSAxKTsKLQkgICAgaW5mby0+eF9jaGFyID0gMDsKLQkgICAgY2hhcl9jb3VudC0tOwotCSAgICBpbmZvLT5pY291bnQudHgrKzsKLQkgICAgaW5mby0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOwotCSAgICBpbmZvLT5qaWZmaWVzWzJdID0gamlmZmllczsKLQl9Ci0jaWZkZWYgQkxPQ0tNT1ZFCi0Jd2hpbGUoMCA8IChzbWFsbF9jb3VudCA9IAotCQkgICBtaW5fdCh1bnNpZ25lZCBpbnQsICh0eF9idWZzaXplIC0gdHhfcHV0KSwKLQkJICAgICAgIG1pbl90KHVuc2lnbmVkIGludCwgKFNFUklBTF9YTUlUX1NJWkUgLSBpbmZvLT54bWl0X3RhaWwpLAotCQkJICAgbWluX3QodW5zaWduZWQgaW50LCBpbmZvLT54bWl0X2NudCwgY2hhcl9jb3VudCkpKSkpIHsKLQotCSAgICBtZW1jcHlfdG9pbygoY2hhciAqKShjaW5mby0+YmFzZV9hZGRyICsgdHhfYnVmYWRkciArIHR4X3B1dCksCi0JCQkmaW5mby0+eG1pdF9idWZbaW5mby0+eG1pdF90YWlsXSwKLQkJCXNtYWxsX2NvdW50KTsKLQotCSAgICB0eF9wdXQgPSAodHhfcHV0ICsgc21hbGxfY291bnQpICYgKHR4X2J1ZnNpemUgLSAxKTsKLQkgICAgY2hhcl9jb3VudCAtPSBzbWFsbF9jb3VudDsKLQkgICAgaW5mby0+aWNvdW50LnR4ICs9IHNtYWxsX2NvdW50OwotCSAgICBpbmZvLT54bWl0X2NudCAtPSBzbWFsbF9jb3VudDsKLQkgICAgaW5mby0+eG1pdF90YWlsID0gCi0JCShpbmZvLT54bWl0X3RhaWwgKyBzbWFsbF9jb3VudCkgJiAoU0VSSUFMX1hNSVRfU0laRSAtIDEpOwotCSAgICBpbmZvLT5sYXN0X2FjdGl2ZSA9IGppZmZpZXM7Ci0JICAgIGluZm8tPmppZmZpZXNbMl0gPSBqaWZmaWVzOwotCX0KLSNlbHNlCi0Jd2hpbGUgKGluZm8tPnhtaXRfY250ICYmIGNoYXJfY291bnQpewotCSAgICBkYXRhID0gaW5mby0+eG1pdF9idWZbaW5mby0+eG1pdF90YWlsXTsKLQkgICAgaW5mby0+eG1pdF9jbnQtLTsKLQkgICAgaW5mby0+eG1pdF90YWlsID0gKGluZm8tPnhtaXRfdGFpbCArIDEpICYgKFNFUklBTF9YTUlUX1NJWkUgLSAxKTsKLQotCSAgICBjeV93cml0ZWIoY2luZm8tPmJhc2VfYWRkciArIHR4X2J1ZmFkZHIgKyB0eF9wdXQsIGRhdGEpOwotCSAgICB0eF9wdXQgPSAodHhfcHV0ICsgMSkgJiAodHhfYnVmc2l6ZSAtIDEpOwotCSAgICBjaGFyX2NvdW50LS07Ci0JICAgIGluZm8tPmljb3VudC50eCsrOwotCSAgICBpbmZvLT5sYXN0X2FjdGl2ZSA9IGppZmZpZXM7Ci0JICAgIGluZm8tPmppZmZpZXNbMl0gPSBqaWZmaWVzOwotCX0KLSNlbmRpZgotICAgIHp0eGRvbmU6Ci0JaWYgKGluZm8tPnhtaXRfY250IDwgV0FLRVVQX0NIQVJTKSB7Ci0JICAgIGN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX1dSSVRFX1dBS0VVUCk7Ci0JfQotCS8qIFVwZGF0ZSB0eF9wdXQgKi8KLQljeV93cml0ZWwoJmJ1Zl9jdHJsLT50eF9wdXQsIHR4X3B1dCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAotY3l6X2hhbmRsZV9jbWQoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvKQotewotICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotICBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKLSAgc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7Ci0gIHN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7Ci0gIHN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwotICBzdGF0aWMgdm9sYXRpbGUgc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybDsKLSAgc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBCVUZfQ1RSTCBfX2lvbWVtICpidWZfY3RybDsKLSAgdWNsb25nIGNoYW5uZWw7Ci0gIHVjY2hhciBjbWQ7Ci0gIHVjbG9uZyBwYXJhbTsKLSAgdWNsb25nIGh3X3ZlciwgZndfdmVyOwotICBpbnQgc3BlY2lhbF9jb3VudDsKLSAgaW50IGRlbHRhX2NvdW50OwotCi0gICAgZmlybV9pZCA9IGNpbmZvLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOwotICAgIHpmd19jdHJsID0gY2luZm8tPmJhc2VfYWRkciArIChjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotICAgIGJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7Ci0gICAgZndfdmVyID0gY3lfcmVhZGwoJmJvYXJkX2N0cmwtPmZ3X3ZlcnNpb24pOwotICAgIGh3X3ZlciA9IGN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKShjaW5mby0+Y3RsX2FkZHIpKS0+bWFpbF9ib3hfMCk7Ci0KLQotICAgIHdoaWxlKGN5el9mZXRjaF9tc2coY2luZm8sICZjaGFubmVsLCAmY21kLCAmcGFyYW0pID09IDEpIHsKLQlzcGVjaWFsX2NvdW50ID0gMDsKLQlkZWx0YV9jb3VudCA9IDA7Ci0JaW5mbyA9ICZjeV9wb3J0W2NoYW5uZWwgKyBjaW5mby0+Zmlyc3RfbGluZV07Ci0JaWYoKHR0eSA9IGluZm8tPnR0eSkgPT0gMCkgewotCSAgICBjb250aW51ZTsKLQl9Ci0JY2hfY3RybCA9ICYoemZ3X2N0cmwtPmNoX2N0cmxbY2hhbm5lbF0pOwotCWJ1Zl9jdHJsID0gJih6ZndfY3RybC0+YnVmX2N0cmxbY2hhbm5lbF0pOwotCi0Jc3dpdGNoKGNtZCkgewotCSAgICBjYXNlIENfQ01fUFJfRVJST1I6Ci0JCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX1BBUklUWSk7Ci0JCWluZm8tPmljb3VudC5yeCsrOwotCQlzcGVjaWFsX2NvdW50Kys7Ci0JCWJyZWFrOwotCSAgICBjYXNlIENfQ01fRlJfRVJST1I6Ci0JCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX0ZSQU1FKTsKLQkJaW5mby0+aWNvdW50LnJ4Kys7Ci0JCXNwZWNpYWxfY291bnQrKzsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgQ19DTV9SWEJSSzoKLQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfQlJFQUspOwotCQlpbmZvLT5pY291bnQucngrKzsKLQkJc3BlY2lhbF9jb3VudCsrOwotCQlicmVhazsKLQkgICAgY2FzZSBDX0NNX01EQ0Q6Ci0JCWluZm8tPmljb3VudC5kY2QrKzsKLQkJZGVsdGFfY291bnQrKzsKLQkJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpewotCQkgICAgaWYgKChmd192ZXIgPiAyNDEgPyAKLQkJCSAgKCh1X2xvbmcpcGFyYW0pIDogCi0JCQkgIGN5X3JlYWRsKCZjaF9jdHJsLT5yc19zdGF0dXMpKSAmIENfUlNfRENEKSB7Ci0JCQljeV9zY2hlZF9ldmVudChpbmZvLCBDeV9FVkVOVF9PUEVOX1dBS0VVUCk7Ci0JCSAgICB9ZWxzZXsKLQkJCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX0hBTkdVUCk7Ci0JCSAgICB9CisJCWlmICh0dHkgPT0gMCkgeworCQkJZ290byB6dHhkb25lOwogCQl9Ci0JCWJyZWFrOwotCSAgICBjYXNlIENfQ01fTUNUUzoKLQkJaW5mby0+aWNvdW50LmN0cysrOwotCQlkZWx0YV9jb3VudCsrOwotCQlicmVhazsKLQkgICAgY2FzZSBDX0NNX01SSToKLQkJaW5mby0+aWNvdW50LnJuZysrOwotCQlkZWx0YV9jb3VudCsrOwotCQlicmVhazsKLQkgICAgY2FzZSBDX0NNX01EU1I6Ci0JCWluZm8tPmljb3VudC5kc3IrKzsKLQkJZGVsdGFfY291bnQrKzsKLQkJYnJlYWs7Ci0jaWZkZWYgWl9XQUtFCi0JICAgIGNhc2UgQ19DTV9JT0NUTFc6Ci0JCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX1NIVVRET1dOX1dBS0VVUCk7Ci0JCWJyZWFrOworCisJCWlmIChpbmZvLT54X2NoYXIpIHsJLyogc2VuZCBzcGVjaWFsIGNoYXIgKi8KKwkJCWRhdGEgPSBpbmZvLT54X2NoYXI7CisKKwkJCWN5X3dyaXRlYihjaW5mby0+YmFzZV9hZGRyICsgdHhfYnVmYWRkciArIHR4X3B1dCwgZGF0YSk7CisJCQl0eF9wdXQgPSAodHhfcHV0ICsgMSkgJiAodHhfYnVmc2l6ZSAtIDEpOworCQkJaW5mby0+eF9jaGFyID0gMDsKKwkJCWNoYXJfY291bnQtLTsKKwkJCWluZm8tPmljb3VudC50eCsrOworCQkJaW5mby0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOworCQkJaW5mby0+amlmZmllc1syXSA9IGppZmZpZXM7CisJCX0KKyNpZmRlZiBCTE9DS01PVkUKKwkJd2hpbGUgKDAgPCAoc21hbGxfY291bnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsCisJCQkJdHhfYnVmc2l6ZSAtIHR4X3B1dCwgbWluX3QodW5zaWduZWQgaW50LAorCQkJCQkoU0VSSUFMX1hNSVRfU0laRSAtIGluZm8tPnhtaXRfdGFpbCksCisJCQkJCW1pbl90KHVuc2lnbmVkIGludCwgaW5mby0+eG1pdF9jbnQsCisJCQkJCQljaGFyX2NvdW50KSkpKSkgeworCisJCQltZW1jcHlfdG9pbygoY2hhciAqKShjaW5mby0+YmFzZV9hZGRyICsgdHhfYnVmYWRkciArCisJCQkJCXR4X3B1dCksCisJCQkJCSZpbmZvLT54bWl0X2J1ZltpbmZvLT54bWl0X3RhaWxdLAorCQkJCQlzbWFsbF9jb3VudCk7CisKKwkJCXR4X3B1dCA9ICh0eF9wdXQgKyBzbWFsbF9jb3VudCkgJiAodHhfYnVmc2l6ZSAtIDEpOworCQkJY2hhcl9jb3VudCAtPSBzbWFsbF9jb3VudDsKKwkJCWluZm8tPmljb3VudC50eCArPSBzbWFsbF9jb3VudDsKKwkJCWluZm8tPnhtaXRfY250IC09IHNtYWxsX2NvdW50OworCQkJaW5mby0+eG1pdF90YWlsID0gKGluZm8tPnhtaXRfdGFpbCArIHNtYWxsX2NvdW50KSAmCisJCQkJCShTRVJJQUxfWE1JVF9TSVpFIC0gMSk7CisJCQlpbmZvLT5sYXN0X2FjdGl2ZSA9IGppZmZpZXM7CisJCQlpbmZvLT5qaWZmaWVzWzJdID0gamlmZmllczsKKwkJfQorI2Vsc2UKKwkJd2hpbGUgKGluZm8tPnhtaXRfY250ICYmIGNoYXJfY291bnQpIHsKKwkJCWRhdGEgPSBpbmZvLT54bWl0X2J1ZltpbmZvLT54bWl0X3RhaWxdOworCQkJaW5mby0+eG1pdF9jbnQtLTsKKwkJCWluZm8tPnhtaXRfdGFpbCA9IChpbmZvLT54bWl0X3RhaWwgKyAxKSAmCisJCQkJCShTRVJJQUxfWE1JVF9TSVpFIC0gMSk7CisKKwkJCWN5X3dyaXRlYihjaW5mby0+YmFzZV9hZGRyICsgdHhfYnVmYWRkciArIHR4X3B1dCwgZGF0YSk7CisJCQl0eF9wdXQgPSAodHhfcHV0ICsgMSkgJiAodHhfYnVmc2l6ZSAtIDEpOworCQkJY2hhcl9jb3VudC0tOworCQkJaW5mby0+aWNvdW50LnR4Kys7CisJCQlpbmZvLT5sYXN0X2FjdGl2ZSA9IGppZmZpZXM7CisJCQlpbmZvLT5qaWZmaWVzWzJdID0gamlmZmllczsKKwkJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0NZWl9JTlRSCi0JICAgIGNhc2UgQ19DTV9SWEhJV006Ci0JICAgIGNhc2UgQ19DTV9SWE5ORFQ6Ci0JICAgIGNhc2UgQ19DTV9JTlRCQUNLMjoKLQkJLyogUmVjZXB0aW9uIEludGVycnVwdCAqLwotI2lmZGVmIENZX0RFQlVHX0lOVEVSUlVQVFMKLQkJcHJpbnRrKCJjeXpfaW50ZXJydXB0OiByY3ZkIGludHIsIGNhcmQgJWQsIHBvcnQgJWxkXG5cciIsIAotCQkJaW5mby0+Y2FyZCwgY2hhbm5lbCk7Ci0jZW5kaWYKLQkJY3l6X2hhbmRsZV9yeChpbmZvLCBjaF9jdHJsLCBidWZfY3RybCk7Ci0JCWJyZWFrOwotCSAgICBjYXNlIENfQ01fVFhCRU1QVFk6Ci0JICAgIGNhc2UgQ19DTV9UWExPV1dNOgotCSAgICBjYXNlIENfQ01fSU5UQkFDSzoKLQkJLyogVHJhbnNtaXNzaW9uIEludGVycnVwdCAqLwotI2lmZGVmIENZX0RFQlVHX0lOVEVSUlVQVFMKLQkJcHJpbnRrKCJjeXpfaW50ZXJydXB0OiB4bWl0IGludHIsIGNhcmQgJWQsIHBvcnQgJWxkXG5cciIsIAotCQkJaW5mby0+Y2FyZCwgY2hhbm5lbCk7Ci0jZW5kaWYKLQkJY3l6X2hhbmRsZV90eChpbmZvLCBjaF9jdHJsLCBidWZfY3RybCk7Ci0JCWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19DWVpfSU5UUiAqLwotCSAgICBjYXNlIENfQ01fRkFUQUw6Ci0JCS8qIHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCB0aGlzICEhISAqLwotCQlicmVhazsKLQkgICAgZGVmYXVsdDoKLQkJYnJlYWs7Cit6dHhkb25lOgorCQlpZiAoaW5mby0+eG1pdF9jbnQgPCBXQUtFVVBfQ0hBUlMpIHsKKwkJCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX1dSSVRFX1dBS0VVUCk7CisJCX0KKwkJLyogVXBkYXRlIHR4X3B1dCAqLworCQljeV93cml0ZWwoJmJ1Zl9jdHJsLT50eF9wdXQsIHR4X3B1dCk7CiAJfQotCWlmKGRlbHRhX2NvdW50KQotCSAgICBjeV9zY2hlZF9ldmVudChpbmZvLCBDeV9FVkVOVF9ERUxUQV9XQUtFVVApOwotCWlmKHNwZWNpYWxfY291bnQpCi0JICAgIHR0eV9zY2hlZHVsZV9mbGlwKHR0eSk7Ci0gICAgfQogfQogCi0jaWZkZWYgQ09ORklHX0NZWl9JTlRSCi1zdGF0aWMgaXJxcmV0dXJuX3QKLWN5el9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIHZvaWQgY3l6X2hhbmRsZV9jbWQoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvKQogewotICBzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm87Ci0KLSAgICBpZigoY2luZm8gPSAoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKilkZXZfaWQpID09IDApewotI2lmZGVmIENZX0RFQlVHX0lOVEVSUlVQVFMKLQlwcmludGsoImN5el9pbnRlcnJ1cHQ6IHNwdXJpb3VzIGludGVycnVwdCAlZFxuXHIiLCBpcnEpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiBJUlFfTk9ORTsgLyogc3B1cmlvdXMgaW50ZXJydXB0ICovCi0gICAgfQotCi0gICAgaWYgKCFJU1pMT0FERUQoKmNpbmZvKSkgewotI2lmZGVmIENZX0RFQlVHX0lOVEVSUlVQVFMKLQlwcmludGsoImN5el9pbnRlcnJ1cHQ6IGJvYXJkIG5vdCB5ZXQgbG9hZGVkIChJUlElZCkuXG5cciIsIGlycSk7Ci0jZW5kaWYKLQlyZXR1cm4gSVJRX05PTkU7Ci0gICAgfQotCi0gICAgLyogSGFuZGxlIHRoZSBpbnRlcnJ1cHRzICovCi0gICAgY3l6X2hhbmRsZV9jbWQoY2luZm8pOwotCi0gICAgcmV0dXJuIElSUV9IQU5ETEVEOwotfSAvKiBjeXpfaW50ZXJydXB0ICovCi0KLXN0YXRpYyB2b2lkCi1jeXpfcnhfcmVzdGFydCh1bnNpZ25lZCBsb25nIGFyZykKLXsKLSAgICBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKWFyZzsKLSAgICBpbnQgcmV0dmFsOwotICAgIGludCBjYXJkID0gaW5mby0+Y2FyZDsKLSAgICB1Y2xvbmcgY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgICBDWV9MT0NLKGluZm8sIGZsYWdzKTsKLSAgICByZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX0lOVEJBQ0syLCAwTCk7Ci0gICAgaWYgKHJldHZhbCAhPSAwKXsKLQlwcmludGsoImN5YzpjeXpfcnhfcmVzdGFydCByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwgCi0JICAgICAgIGluZm8tPmxpbmUsIHJldHZhbCk7Ci0gICAgfQotICAgIGN5el9yeF9mdWxsX3RpbWVyW2luZm8tPmxpbmVdLmZ1bmN0aW9uID0gTlVMTDsKLSAgICBDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotfQotCi0jZWxzZSAvKiBDT05GSUdfQ1laX0lOVFIgKi8KLQotc3RhdGljIHZvaWQKLWN5el9wb2xsKHVuc2lnbmVkIGxvbmcgYXJnKQotewotICBzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm87Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOwotICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotICBzdGF0aWMgdm9sYXRpbGUgc3RydWN0IEZJUk1fSUQgKmZpcm1faWQ7Ci0gIHN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgWkZXX0NUUkwgKnpmd19jdHJsOwotICBzdGF0aWMgdm9sYXRpbGUgc3RydWN0IEJPQVJEX0NUUkwgKmJvYXJkX2N0cmw7Ci0gIHN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQ0hfQ1RSTCAqY2hfY3RybDsKLSAgc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBCVUZfQ1RSTCAqYnVmX2N0cmw7Ci0gIGludCBjYXJkLCBwb3J0OwotCi0gICAgY3l6X3RpbWVybGlzdC5leHBpcmVzID0gamlmZmllcyArIChIWik7Ci0gICAgZm9yIChjYXJkID0gMCA7IGNhcmQgPCBOUl9DQVJEUyA7IGNhcmQrKyl7Ci0JY2luZm8gPSAmY3lfY2FyZFtjYXJkXTsKLQotCWlmICghSVNfQ1lDX1ooKmNpbmZvKSkgY29udGludWU7Ci0JaWYgKCFJU1pMT0FERUQoKmNpbmZvKSkgY29udGludWU7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKKwlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKKwlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOworCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOworCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOworCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmw7CisJdWNsb25nIGNoYW5uZWw7CisJdWNjaGFyIGNtZDsKKwl1Y2xvbmcgcGFyYW07CisJdWNsb25nIGh3X3ZlciwgZndfdmVyOworCWludCBzcGVjaWFsX2NvdW50OworCWludCBkZWx0YV9jb3VudDsKIAogCWZpcm1faWQgPSBjaW5mby0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKLQl6ZndfY3RybCA9IGNpbmZvLT5iYXNlX2FkZHIgKyAoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQlib2FyZF9jdHJsID0gJih6ZndfY3RybC0+Ym9hcmRfY3RybCk7CisJemZ3X2N0cmwgPSBjaW5mby0+YmFzZV9hZGRyICsgKGN5X3JlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYKKwkJCTB4ZmZmZmYpOworCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7CisJZndfdmVyID0gY3lfcmVhZGwoJmJvYXJkX2N0cmwtPmZ3X3ZlcnNpb24pOworCWh3X3ZlciA9IGN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKShjaW5mby0+Y3RsX2FkZHIpKS0+CisJCQltYWlsX2JveF8wKTsKIAotCS8qIFNraXAgZmlyc3QgcG9sbGluZyBjeWNsZSB0byBhdm9pZCByYWNpbmcgY29uZGl0aW9ucyB3aXRoIHRoZSBGVyAqLwotCWlmICghY2luZm8tPmludHJfZW5hYmxlZCkgewotCSAgICBjaW5mby0+bnBvcnRzID0gKGludCkgY3lfcmVhZGwoJmJvYXJkX2N0cmwtPm5fY2hhbm5lbCk7Ci0JICAgIGNpbmZvLT5pbnRyX2VuYWJsZWQgPSAxOwotCSAgICBjb250aW51ZTsKKwl3aGlsZSAoY3l6X2ZldGNoX21zZyhjaW5mbywgJmNoYW5uZWwsICZjbWQsICZwYXJhbSkgPT0gMSkgeworCQlzcGVjaWFsX2NvdW50ID0gMDsKKwkJZGVsdGFfY291bnQgPSAwOworCQlpbmZvID0gJmN5X3BvcnRbY2hhbm5lbCArIGNpbmZvLT5maXJzdF9saW5lXTsKKwkJaWYgKCh0dHkgPSBpbmZvLT50dHkpID09IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNoX2N0cmwgPSAmKHpmd19jdHJsLT5jaF9jdHJsW2NoYW5uZWxdKTsKKwkJYnVmX2N0cmwgPSAmKHpmd19jdHJsLT5idWZfY3RybFtjaGFubmVsXSk7CisKKwkJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBDX0NNX1BSX0VSUk9SOgorCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfUEFSSVRZKTsKKwkJCWluZm8tPmljb3VudC5yeCsrOworCQkJc3BlY2lhbF9jb3VudCsrOworCQkJYnJlYWs7CisJCWNhc2UgQ19DTV9GUl9FUlJPUjoKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX0ZSQU1FKTsKKwkJCWluZm8tPmljb3VudC5yeCsrOworCQkJc3BlY2lhbF9jb3VudCsrOworCQkJYnJlYWs7CisJCWNhc2UgQ19DTV9SWEJSSzoKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX0JSRUFLKTsKKwkJCWluZm8tPmljb3VudC5yeCsrOworCQkJc3BlY2lhbF9jb3VudCsrOworCQkJYnJlYWs7CisJCWNhc2UgQ19DTV9NRENEOgorCQkJaW5mby0+aWNvdW50LmRjZCsrOworCQkJZGVsdGFfY291bnQrKzsKKwkJCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSB7CisJCQkJaWYgKChmd192ZXIgPiAyNDEgPyAoKHVfbG9uZykgcGFyYW0pIDoKKwkJCQkJCWN5X3JlYWRsKCZjaF9jdHJsLT5yc19zdGF0dXMpKSAmCisJCQkJCQlDX1JTX0RDRCkgeworCQkJCQljeV9zY2hlZF9ldmVudChpbmZvLAorCQkJCQkJIAlDeV9FVkVOVF9PUEVOX1dBS0VVUCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJY3lfc2NoZWRfZXZlbnQoaW5mbywgQ3lfRVZFTlRfSEFOR1VQKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDX0NNX01DVFM6CisJCQlpbmZvLT5pY291bnQuY3RzKys7CisJCQlkZWx0YV9jb3VudCsrOworCQkJYnJlYWs7CisJCWNhc2UgQ19DTV9NUkk6CisJCQlpbmZvLT5pY291bnQucm5nKys7CisJCQlkZWx0YV9jb3VudCsrOworCQkJYnJlYWs7CisJCWNhc2UgQ19DTV9NRFNSOgorCQkJaW5mby0+aWNvdW50LmRzcisrOworCQkJZGVsdGFfY291bnQrKzsKKwkJCWJyZWFrOworI2lmZGVmIFpfV0FLRQorCQljYXNlIENfQ01fSU9DVExXOgorCQkJY3lfc2NoZWRfZXZlbnQoaW5mbywgQ3lfRVZFTlRfU0hVVERPV05fV0FLRVVQKTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0NZWl9JTlRSCisJCWNhc2UgQ19DTV9SWEhJV006CisJCWNhc2UgQ19DTV9SWE5ORFQ6CisJCWNhc2UgQ19DTV9JTlRCQUNLMjoKKwkJCS8qIFJlY2VwdGlvbiBJbnRlcnJ1cHQgKi8KKyNpZmRlZiBDWV9ERUJVR19JTlRFUlJVUFRTCisJCQlwcmludGsoImN5el9pbnRlcnJ1cHQ6IHJjdmQgaW50ciwgY2FyZCAlZCwgIgorCQkJCQkicG9ydCAlbGRcblxyIiwgaW5mby0+Y2FyZCwgY2hhbm5lbCk7CisjZW5kaWYKKwkJCWN5el9oYW5kbGVfcngoaW5mbywgY2hfY3RybCwgYnVmX2N0cmwpOworCQkJYnJlYWs7CisJCWNhc2UgQ19DTV9UWEJFTVBUWToKKwkJY2FzZSBDX0NNX1RYTE9XV006CisJCWNhc2UgQ19DTV9JTlRCQUNLOgorCQkJLyogVHJhbnNtaXNzaW9uIEludGVycnVwdCAqLworI2lmZGVmIENZX0RFQlVHX0lOVEVSUlVQVFMKKwkJCXByaW50aygiY3l6X2ludGVycnVwdDogeG1pdCBpbnRyLCBjYXJkICVkLCAiCisJCQkJCSJwb3J0ICVsZFxuXHIiLCBpbmZvLT5jYXJkLCBjaGFubmVsKTsKKyNlbmRpZgorCQkJY3l6X2hhbmRsZV90eChpbmZvLCBjaF9jdHJsLCBidWZfY3RybCk7CisJCQlicmVhazsKKyNlbmRpZgkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KKwkJY2FzZSBDX0NNX0ZBVEFMOgorCQkJLyogc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgISEhICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWlmIChkZWx0YV9jb3VudCkKKwkJCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX0RFTFRBX1dBS0VVUCk7CisJCWlmIChzcGVjaWFsX2NvdW50KQorCQkJdHR5X3NjaGVkdWxlX2ZsaXAodHR5KTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfQ1laX0lOVFIKK3N0YXRpYyBpcnFyZXR1cm5fdCBjeXpfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm87CisKKwlpZiAoKGNpbmZvID0gKHN0cnVjdCBjeWNsYWRlc19jYXJkICopZGV2X2lkKSA9PSAwKSB7CisjaWZkZWYgQ1lfREVCVUdfSU5URVJSVVBUUworCQlwcmludGsoImN5el9pbnRlcnJ1cHQ6IHNwdXJpb3VzIGludGVycnVwdCAlZFxuXHIiLCBpcnEpOworI2VuZGlmCisJCXJldHVybiBJUlFfTk9ORTsJLyogc3B1cmlvdXMgaW50ZXJydXB0ICovCiAJfQogCisJaWYgKCFJU1pMT0FERUQoKmNpbmZvKSkgeworI2lmZGVmIENZX0RFQlVHX0lOVEVSUlVQVFMKKwkJcHJpbnRrKCJjeXpfaW50ZXJydXB0OiBib2FyZCBub3QgeWV0IGxvYWRlZCAoSVJRJWQpLlxuXHIiLCBpcnEpOworI2VuZGlmCisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBIYW5kbGUgdGhlIGludGVycnVwdHMgKi8KIAljeXpfaGFuZGxlX2NtZChjaW5mbyk7CiAKLQlmb3IgKHBvcnQgPSAwIDsgcG9ydCA8IGNpbmZvLT5ucG9ydHMgOyBwb3J0KyspIHsKLQkgICAgaW5mbyA9ICZjeV9wb3J0WyBwb3J0ICsgY2luZm8tPmZpcnN0X2xpbmUgXTsKLSAgICAgICAgICAgIHR0eSA9IGluZm8tPnR0eTsKLQkgICAgY2hfY3RybCA9ICYoemZ3X2N0cmwtPmNoX2N0cmxbcG9ydF0pOwotCSAgICBidWZfY3RybCA9ICYoemZ3X2N0cmwtPmJ1Zl9jdHJsW3BvcnRdKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CQkJCS8qIGN5el9pbnRlcnJ1cHQgKi8KIAotCSAgICBpZiAoIWluZm8tPnRocm90dGxlKQotCSAgICAgICAgY3l6X2hhbmRsZV9yeChpbmZvLCBjaF9jdHJsLCBidWZfY3RybCk7Ci0JICAgIGN5el9oYW5kbGVfdHgoaW5mbywgY2hfY3RybCwgYnVmX2N0cmwpOworc3RhdGljIHZvaWQgY3l6X3J4X3Jlc3RhcnQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKilhcmc7CisJaW50IHJldHZhbDsKKwlpbnQgY2FyZCA9IGluZm8tPmNhcmQ7CisJdWNsb25nIGNoYW5uZWwgPSAoaW5mby0+bGluZSkgLSAoY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJcmV0dmFsID0gY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtjYXJkXSwgY2hhbm5lbCwgQ19DTV9JTlRCQUNLMiwgMEwpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlwcmludGsoImN5YzpjeXpfcnhfcmVzdGFydCByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKKwkJCWluZm8tPmxpbmUsIHJldHZhbCk7CiAJfQotCS8qIHBvbGwgZXZlcnkgJ2N5el9wb2xsaW5nX2N5Y2xlJyBwZXJpb2QgKi8KLQljeXpfdGltZXJsaXN0LmV4cGlyZXMgPSBqaWZmaWVzICsgY3l6X3BvbGxpbmdfY3ljbGU7Ci0gICAgfQotICAgIGFkZF90aW1lcigmY3l6X3RpbWVybGlzdCk7CisJY3l6X3J4X2Z1bGxfdGltZXJbaW5mby0+bGluZV0uZnVuY3Rpb24gPSBOVUxMOworCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7Cit9CiAKLSAgICByZXR1cm47Ci19IC8qIGN5el9wb2xsICovCisjZWxzZQkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KIAotI2VuZGlmIC8qIENPTkZJR19DWVpfSU5UUiAqLworc3RhdGljIHZvaWQgY3l6X3BvbGwodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBGSVJNX0lEICpmaXJtX2lkOworCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgWkZXX0NUUkwgKnpmd19jdHJsOworCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQk9BUkRfQ1RSTCAqYm9hcmRfY3RybDsKKwlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IENIX0NUUkwgKmNoX2N0cmw7CisJc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBCVUZfQ1RSTCAqYnVmX2N0cmw7CisJaW50IGNhcmQsIHBvcnQ7CisKKwljeXpfdGltZXJsaXN0LmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaKTsKKwlmb3IgKGNhcmQgPSAwOyBjYXJkIDwgTlJfQ0FSRFM7IGNhcmQrKykgeworCQljaW5mbyA9ICZjeV9jYXJkW2NhcmRdOworCisJCWlmICghSVNfQ1lDX1ooKmNpbmZvKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIUlTWkxPQURFRCgqY2luZm8pKQorCQkJY29udGludWU7CisKKwkJZmlybV9pZCA9IGNpbmZvLT5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOworCQl6ZndfY3RybCA9IGNpbmZvLT5iYXNlX2FkZHIgKworCQkJCShjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOworCQlib2FyZF9jdHJsID0gJih6ZndfY3RybC0+Ym9hcmRfY3RybCk7CisKKwkvKiBTa2lwIGZpcnN0IHBvbGxpbmcgY3ljbGUgdG8gYXZvaWQgcmFjaW5nIGNvbmRpdGlvbnMgd2l0aCB0aGUgRlcgKi8KKwkJaWYgKCFjaW5mby0+aW50cl9lbmFibGVkKSB7CisJCQljaW5mby0+bnBvcnRzID0gKGludCljeV9yZWFkbCgmYm9hcmRfY3RybC0+bl9jaGFubmVsKTsKKwkJCWNpbmZvLT5pbnRyX2VuYWJsZWQgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQljeXpfaGFuZGxlX2NtZChjaW5mbyk7CisKKwkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGNpbmZvLT5ucG9ydHM7IHBvcnQrKykgeworCQkJaW5mbyA9ICZjeV9wb3J0W3BvcnQgKyBjaW5mby0+Zmlyc3RfbGluZV07CisJCQl0dHkgPSBpbmZvLT50dHk7CisJCQljaF9jdHJsID0gJih6ZndfY3RybC0+Y2hfY3RybFtwb3J0XSk7CisJCQlidWZfY3RybCA9ICYoemZ3X2N0cmwtPmJ1Zl9jdHJsW3BvcnRdKTsKKworCQkJaWYgKCFpbmZvLT50aHJvdHRsZSkKKwkJCQljeXpfaGFuZGxlX3J4KGluZm8sIGNoX2N0cmwsIGJ1Zl9jdHJsKTsKKwkJCWN5el9oYW5kbGVfdHgoaW5mbywgY2hfY3RybCwgYnVmX2N0cmwpOworCQl9CisJCS8qIHBvbGwgZXZlcnkgJ2N5el9wb2xsaW5nX2N5Y2xlJyBwZXJpb2QgKi8KKwkJY3l6X3RpbWVybGlzdC5leHBpcmVzID0gamlmZmllcyArIGN5el9wb2xsaW5nX2N5Y2xlOworCX0KKwlhZGRfdGltZXIoJmN5el90aW1lcmxpc3QpOworfQkJCQkvKiBjeXpfcG9sbCAqLworCisjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCiAKIC8qKioqKioqKioqIEVuZCBvZiBibG9jayBvZiBDeWNsYWRlcy1aIHNwZWNpZmljIGNvZGUgKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0KIC8qIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIGEgcG9ydCBiZWNvbWVzIGFjdGl2ZTsKICAgIGludGVycnVwdHMgYXJlIGVuYWJsZWQgYW5kIERUUiAmIFJUUyBhcmUgdHVybmVkIG9uLgogICovCi1zdGF0aWMgaW50Ci1zdGFydHVwKHN0cnVjdCBjeWNsYWRlc19wb3J0ICogaW5mbykKK3N0YXRpYyBpbnQgc3RhcnR1cChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbykKIHsKLSAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgaW50IHJldHZhbCA9IDA7Ci0gIHZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotICBpbnQgY2FyZCxjaGlwLGNoYW5uZWwsaW5kZXg7Ci0gIHVuc2lnbmVkIGxvbmcgcGFnZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWwgPSAwOworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworCWludCBjYXJkLCBjaGlwLCBjaGFubmVsLCBpbmRleDsKKwl1bnNpZ25lZCBsb25nIHBhZ2U7CiAKLSAgICBjYXJkID0gaW5mby0+Y2FyZDsKLSAgICBjaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZSk7CisJY2FyZCA9IGluZm8tPmNhcmQ7CisJY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOwogCi0gICAgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLSAgICBpZiAoIXBhZ2UpCi0JcmV0dXJuIC1FTk9NRU07Ci0KLSAgICBDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQotICAgIGlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKXsKLQlmcmVlX3BhZ2UocGFnZSk7Ci0JZ290byBlcnJvdXQ7Ci0gICAgfQotCi0gICAgaWYgKCFpbmZvLT50eXBlKXsKLSAgICAgICAgaWYgKGluZm8tPnR0eSl7Ci0gICAgICAgICAgICBzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOwotICAgICAgICB9Ci0JZnJlZV9wYWdlKHBhZ2UpOwotCWdvdG8gZXJyb3V0OwotICAgIH0KLQotICAgIGlmIChpbmZvLT54bWl0X2J1ZikKLQlmcmVlX3BhZ2UocGFnZSk7Ci0gICAgZWxzZQotCWluZm8tPnhtaXRfYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcGFnZTsKLQotICAgIENZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0KLSAgICBzZXRfbGluZV9jaGFyKGluZm8pOwotCi0gICAgaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgewotCWNoaXAgPSBjaGFubmVsPj4yOwotCWNoYW5uZWwgJj0gMHgwMzsKLQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OwotCWJhc2VfYWRkciA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdPDxpbmRleCk7Ci0KLSNpZmRlZiBDWV9ERUJVR19PUEVOCi0JcHJpbnRrKCJjeWMgc3RhcnR1cCBjYXJkICVkLCBjaGlwICVkLCBjaGFubmVsICVkLCBiYXNlX2FkZHIgJWx4XG4iLAotCSAgICAgY2FyZCwgY2hpcCwgY2hhbm5lbCwgKGxvbmcpYmFzZV9hZGRyKTsvKiovCi0jZW5kaWYKKwlwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlDWV9MT0NLKGluZm8sIGZsYWdzKTsKIAotCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5Q0FSPDxpbmRleCksICh1X2NoYXIpY2hhbm5lbCk7Ci0KLQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeVJUUFI8PGluZGV4KSwgKGluZm8tPmRlZmF1bHRfdGltZW91dAotCQkgPyBpbmZvLT5kZWZhdWx0X3RpbWVvdXQgOiAweDAyKSk7IC8qIDEwbXMgcnggdGltZW91dCAqLwotCi0JY3l5X2lzc3VlX2NtZChiYXNlX2FkZHIsQ3lDSEFOX0NUTHxDeUVOQl9SQ1ZSfEN5RU5CX1hNVFIsaW5kZXgpOwotCi0JY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lDQVI8PGluZGV4KSwgKHVfY2hhciljaGFubmVsKTsKLQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1TVlIxPDxpbmRleCksIEN5UlRTKTsKLQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1TVlIyPDxpbmRleCksIEN5RFRSKTsKLQotI2lmZGVmIENZX0RFQlVHX0RUUgotCXByaW50aygiY3ljOnN0YXJ0dXAgcmFpc2luZyBEVFJcbiIpOwotCXByaW50aygiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCi0JCWN5X3JlYWRiKGJhc2VfYWRkcisoQ3lNU1ZSMTw8aW5kZXgpKSwgCi0gICAgICAgICAgICAgICAgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeU1TVlIyPDxpbmRleCkpKTsKLSNlbmRpZgotCi0JY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCksCi0JCWN5X3JlYWRiKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCkpIHwgQ3lSeERhdGEpOwotCWluZm8tPmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOwotCi0JaWYgKGluZm8tPnR0eSl7Ci0JICAgIGNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgeworCQlmcmVlX3BhZ2UocGFnZSk7CisJCWdvdG8gZXJyb3V0OwogCX0KLQlpbmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7Ci0JaW5mby0+YnJlYWtvbiA9IGluZm8tPmJyZWFrb2ZmID0gMDsKLQltZW1zZXQoKGNoYXIgKikmaW5mby0+aWRsZV9zdGF0cywgMCwgc2l6ZW9mKGluZm8tPmlkbGVfc3RhdHMpKTsKLQlpbmZvLT5pZGxlX3N0YXRzLmluX3VzZSAgICA9Ci0JaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPQotCWluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlID0gamlmZmllczsKKworCWlmICghaW5mby0+dHlwZSkgeworCQlpZiAoaW5mby0+dHR5KSB7CisJCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCQl9CisJCWZyZWVfcGFnZShwYWdlKTsKKwkJZ290byBlcnJvdXQ7CisJfQorCisJaWYgKGluZm8tPnhtaXRfYnVmKQorCQlmcmVlX3BhZ2UocGFnZSk7CisJZWxzZQorCQlpbmZvLT54bWl0X2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopcGFnZTsKIAogCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CiAKLSAgICB9IGVsc2UgewotICAgICAgc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKLSAgICAgIHN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLSAgICAgIHN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7Ci0gICAgICBzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOwotICAgICAgaW50IHJldHZhbDsKKwlzZXRfbGluZV9jaGFyKGluZm8pOwogCi0JYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHI7Ci0KLSAgICAgICAgZmlybV9pZCA9IGJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0gICAgICAgIGlmICghSVNaTE9BREVEKGN5X2NhcmRbY2FyZF0pKXsKLQkgICAgcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JemZ3X2N0cmwgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7Ci0JY2hfY3RybCA9IHpmd19jdHJsLT5jaF9jdHJsOworCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKKwkJY2hhbm5lbCAmPSAweDAzOworCQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OworCQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArCisJCQkJKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAogI2lmZGVmIENZX0RFQlVHX09QRU4KLQlwcmludGsoImN5YyBzdGFydHVwIFogY2FyZCAlZCwgY2hhbm5lbCAlZCwgYmFzZV9hZGRyICVseFxuIiwKLQkgICAgIGNhcmQsIGNoYW5uZWwsIChsb25nKWJhc2VfYWRkcik7LyoqLworCQlwcmludGsoImN5YyBzdGFydHVwIGNhcmQgJWQsIGNoaXAgJWQsIGNoYW5uZWwgJWQsICIKKwkJCQkiYmFzZV9hZGRyICVseFxuIiwKKwkJCQljYXJkLCBjaGlwLCBjaGFubmVsLCAobG9uZyliYXNlX2FkZHIpOworCQkvKiovCisjZW5kaWYKKwkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOworCisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lSVFBSIDw8IGluZGV4KSwKKwkJCShpbmZvLT5kZWZhdWx0X3RpbWVvdXQgPyBpbmZvLT5kZWZhdWx0X3RpbWVvdXQgOiAweDAyKSk7CisJCS8qIDEwbXMgcnggdGltZW91dCAqLworCisJCWN5eV9pc3N1ZV9jbWQoYmFzZV9hZGRyLCBDeUNIQU5fQ1RMIHwgQ3lFTkJfUkNWUiB8IEN5RU5CX1hNVFIsCisJCQkJaW5kZXgpOworCisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwgQ3lSVFMpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLCBDeURUUik7CisKKyNpZmRlZiBDWV9ERUJVR19EVFIKKwkJcHJpbnRrKCJjeWM6c3RhcnR1cCByYWlzaW5nIERUUlxuIik7CisJCXByaW50aygiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCisJCQljeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCkpLAorCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKSk7CiAjZW5kaWYKIAotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCisJCQljeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeVJ4RGF0YSk7CisJCWluZm8tPmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOwogCi0JY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLm9wX21vZGUsIENfQ0hfRU5BQkxFKTsKKwkJaWYgKGluZm8tPnR0eSkgeworCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCQl9CisJCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKKwkJaW5mby0+YnJlYWtvbiA9IGluZm8tPmJyZWFrb2ZmID0gMDsKKwkJbWVtc2V0KChjaGFyICopJmluZm8tPmlkbGVfc3RhdHMsIDAsIHNpemVvZihpbmZvLT5pZGxlX3N0YXRzKSk7CisJCWluZm8tPmlkbGVfc3RhdHMuaW5fdXNlID0KKwkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPQorCQlpbmZvLT5pZGxlX3N0YXRzLnhtaXRfaWRsZSA9IGppZmZpZXM7CisKKwkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKworCX0gZWxzZSB7CisJCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7CisJCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKKwkJc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKKwkJc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybDsKKwkJaW50IHJldHZhbDsKKworCQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkcjsKKworCQlmaXJtX2lkID0gYmFzZV9hZGRyICsgSURfQUREUkVTUzsKKwkJaWYgKCFJU1pMT0FERUQoY3lfY2FyZFtjYXJkXSkpIHsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJemZ3X2N0cmwgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArCisJCQkJKGN5X3JlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7CisJCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7CisJCWNoX2N0cmwgPSB6ZndfY3RybC0+Y2hfY3RybDsKKworI2lmZGVmIENZX0RFQlVHX09QRU4KKwkJcHJpbnRrKCJjeWMgc3RhcnR1cCBaIGNhcmQgJWQsIGNoYW5uZWwgJWQsIGJhc2VfYWRkciAlbHhcbiIsCisJCQljYXJkLCBjaGFubmVsLCAobG9uZyliYXNlX2FkZHIpOworCQkvKiovCisjZW5kaWYKKwkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisKKwkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLm9wX21vZGUsIENfQ0hfRU5BQkxFKTsKICNpZmRlZiBaX1dBS0UKICNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0uaW50cl9lbmFibGUsIAotCQkgIENfSU5fVFhCRU1QVFl8Q19JTl9UWExPV1dNfENfSU5fUlhISVdNfENfSU5fUlhOTkRUfAotCQkgIENfSU5fSU9DVExXfAotCQkgIENfSU5fTURDRCk7CisJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5pbnRyX2VuYWJsZSwKKwkJCSAgQ19JTl9UWEJFTVBUWSB8IENfSU5fVFhMT1dXTSB8IENfSU5fUlhISVdNIHwKKwkJCSAgQ19JTl9SWE5ORFQgfCBDX0lOX0lPQ1RMVyB8IENfSU5fTURDRCk7CiAjZWxzZQotCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5pbnRyX2VuYWJsZSwgCi0JCSAgQ19JTl9JT0NUTFd8Ci0JCSAgQ19JTl9NRENEKTsKLSNlbmRpZiAvKiBDT05GSUdfQ1laX0lOVFIgKi8KKwkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLmludHJfZW5hYmxlLAorCQkJICBDX0lOX0lPQ1RMVyB8IENfSU5fTURDRCk7CisjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCiAjZWxzZQogI2lmZGVmIENPTkZJR19DWVpfSU5UUgotCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5pbnRyX2VuYWJsZSwgCi0JCSAgQ19JTl9UWEJFTVBUWXxDX0lOX1RYTE9XV018Q19JTl9SWEhJV018Q19JTl9SWE5ORFR8Ci0JCSAgQ19JTl9NRENEKTsKKwkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLmludHJfZW5hYmxlLAorCQkJICBDX0lOX1RYQkVNUFRZIHwgQ19JTl9UWExPV1dNIHwgQ19JTl9SWEhJV00gfAorCQkJICBDX0lOX1JYTk5EVCB8IENfSU5fTURDRCk7CiAjZWxzZQotCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5pbnRyX2VuYWJsZSwgCi0JCSAgQ19JTl9NRENEKTsKLSNlbmRpZiAvKiBDT05GSUdfQ1laX0lOVFIgKi8KLSNlbmRpZiAvKiBaX1dBS0UgKi8KKwkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLmludHJfZW5hYmxlLCBDX0lOX01EQ0QpOworI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLworI2VuZGlmCQkJCS8qIFpfV0FLRSAqLwogCi0JcmV0dmFsID0gY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtjYXJkXSwgY2hhbm5lbCwgQ19DTV9JT0NUTCwgMEwpOwotCWlmIChyZXR2YWwgIT0gMCl7Ci0JICAgIHByaW50aygiY3ljOnN0YXJ0dXAoMSkgcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCi0JCSAgIGluZm8tPmxpbmUsIHJldHZhbCk7Ci0JfQorCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX0lPQ1RMLCAwTCk7CisJCWlmIChyZXR2YWwgIT0gMCkgeworCQkJcHJpbnRrKCJjeWM6c3RhcnR1cCgxKSByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKKwkJCQlpbmZvLT5saW5lLCByZXR2YWwpOworCQl9CiAKLQkvKiBGbHVzaCBSWCBidWZmZXJzIGJlZm9yZSByYWlzaW5nIERUUiBhbmQgUlRTICovCi0JcmV0dmFsID0gY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtjYXJkXSwgY2hhbm5lbCwgQ19DTV9GTFVTSF9SWCwgMEwpOwotCWlmIChyZXR2YWwgIT0gMCl7Ci0JICAgIHByaW50aygiY3ljOnN0YXJ0dXAoMikgcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCi0JCSAgIGluZm8tPmxpbmUsIHJldHZhbCk7Ci0JfQorCQkvKiBGbHVzaCBSWCBidWZmZXJzIGJlZm9yZSByYWlzaW5nIERUUiBhbmQgUlRTICovCisJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbY2FyZF0sIGNoYW5uZWwsIENfQ01fRkxVU0hfUlgsCisJCQkJMEwpOworCQlpZiAocmV0dmFsICE9IDApIHsKKwkJCXByaW50aygiY3ljOnN0YXJ0dXAoMikgcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCisJCQkJaW5mby0+bGluZSwgcmV0dmFsKTsKKwkJfQogCi0JLyogc2V0IHRpbWVvdXQgISEhICovCi0JLyogc2V0IFJUUyBhbmQgRFRSICEhISAqLwotCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAotICAgICAgICAgICAgIGN5X3JlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpIHwgQ19SU19SVFMgfCBDX1JTX0RUUikgOwotCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbaW5mby0+Y2FyZF0sCi0JICAgIGNoYW5uZWwsIENfQ01fSU9DVExNLCAwTCk7Ci0JaWYgKHJldHZhbCAhPSAwKXsKLQkgICAgcHJpbnRrKCJjeWM6c3RhcnR1cCgzKSByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKLQkJICAgaW5mby0+bGluZSwgcmV0dmFsKTsKLQl9CisJCS8qIHNldCB0aW1lb3V0ICEhISAqLworCQkvKiBzZXQgUlRTIGFuZCBEVFIgISEhICovCisJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAorCQkJY3lfcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCkgfCBDX1JTX1JUUyB8CisJCQlDX1JTX0RUUik7CisJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbaW5mby0+Y2FyZF0sIGNoYW5uZWwsCisJCQkJQ19DTV9JT0NUTE0sIDBMKTsKKwkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQlwcmludGsoImN5YzpzdGFydHVwKDMpIHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAorCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7CisJCX0KICNpZmRlZiBDWV9ERUJVR19EVFIKLQkgICAgcHJpbnRrKCJjeWM6c3RhcnR1cCByYWlzaW5nIFogRFRSXG4iKTsKKwkJcHJpbnRrKCJjeWM6c3RhcnR1cCByYWlzaW5nIFogRFRSXG4iKTsKICNlbmRpZgogCi0JLyogZW5hYmxlIHNlbmQsIHJlY3YsIG1vZGVtICEhISAqLworCQkvKiBlbmFibGUgc2VuZCwgcmVjdiwgbW9kZW0gISEhICovCiAKLQlpbmZvLT5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKLQlpZiAoaW5mby0+dHR5KXsKLQkgICAgY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKKwkJaWYgKGluZm8tPnR0eSkgeworCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCQl9CisJCWluZm8tPnhtaXRfY250ID0gaW5mby0+eG1pdF9oZWFkID0gaW5mby0+eG1pdF90YWlsID0gMDsKKwkJaW5mby0+YnJlYWtvbiA9IGluZm8tPmJyZWFrb2ZmID0gMDsKKwkJbWVtc2V0KChjaGFyICopJmluZm8tPmlkbGVfc3RhdHMsIDAsIHNpemVvZihpbmZvLT5pZGxlX3N0YXRzKSk7CisJCWluZm8tPmlkbGVfc3RhdHMuaW5fdXNlID0KKwkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPQorCQlpbmZvLT5pZGxlX3N0YXRzLnhtaXRfaWRsZSA9IGppZmZpZXM7CisKKwkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKIAl9Ci0JaW5mby0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOwotCWluZm8tPmJyZWFrb24gPSBpbmZvLT5icmVha29mZiA9IDA7Ci0JbWVtc2V0KChjaGFyICopJmluZm8tPmlkbGVfc3RhdHMsIDAsIHNpemVvZihpbmZvLT5pZGxlX3N0YXRzKSk7Ci0JaW5mby0+aWRsZV9zdGF0cy5pbl91c2UgICAgPQotCWluZm8tPmlkbGVfc3RhdHMucmVjdl9pZGxlID0KLQlpbmZvLT5pZGxlX3N0YXRzLnhtaXRfaWRsZSA9IGppZmZpZXM7Ci0KLQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotICAgIH0KIAogI2lmZGVmIENZX0RFQlVHX09QRU4KIAlwcmludGsoIiBjeWMgc3RhcnR1cCBkb25lXG4iKTsKQEAgLTIwOTQsMTY1ICsyMTU0LDE2NSBAQAogZXJyb3V0OgogCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKLX0gLyogc3RhcnR1cCAqLworfQkJCQkvKiBzdGFydHVwICovCiAKLQotc3RhdGljIHZvaWQKLXN0YXJ0X3htaXQoIHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvICkKK3N0YXRpYyB2b2lkIHN0YXJ0X3htaXQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8pCiB7Ci0gIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gIHZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotICBpbnQgY2FyZCxjaGlwLGNoYW5uZWwsaW5kZXg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKKwlpbnQgY2FyZCwgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CiAKLSAgICBjYXJkID0gaW5mby0+Y2FyZDsKLSAgICBjaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZSk7Ci0gICAgaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgewotCWNoaXAgPSBjaGFubmVsPj4yOwotCWNoYW5uZWwgJj0gMHgwMzsKLQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OwotCWJhc2VfYWRkciA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdPDxpbmRleCk7CisJY2FyZCA9IGluZm8tPmNhcmQ7CisJY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOworCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKKwkJY2hhbm5lbCAmPSAweDAzOworCQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OworCQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArCisJCQkJKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNBUjw8aW5kZXgpLCBjaGFubmVsKTsKLQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCksIAotICAgICAgICAgICAgICAgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeVNSRVI8PGluZGV4KSkgfCBDeVR4UmR5KTsKLQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotICAgIH0gZWxzZSB7CisJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgY2hhbm5lbCk7CisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5VHhSZHkpOworCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX0NZWl9JTlRSCi0gICAgICBpbnQgcmV0dmFsOworCQlpbnQgcmV0dmFsOwogCi0JQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0JICAgIHJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbY2FyZF0sIGNoYW5uZWwsIENfQ01fSU5UQkFDSywgMEwpOwotCSAgICBpZiAocmV0dmFsICE9IDApewotCQlwcmludGsoImN5YzpzdGFydF94bWl0IHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAotCQkgICAgICAgaW5mby0+bGluZSwgcmV0dmFsKTsKLQkgICAgfQotCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0jZWxzZSAvKiBDT05GSUdfQ1laX0lOVFIgKi8KLQkvKiBEb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGF0IHRoaXMgdGltZSAqLwotI2VuZGlmIC8qIENPTkZJR19DWVpfSU5UUiAqLwotICAgIH0KLX0gLyogc3RhcnRfeG1pdCAqLworCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtjYXJkXSwgY2hhbm5lbCwgQ19DTV9JTlRCQUNLLAorCQkJCTBMKTsKKwkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQlwcmludGsoImN5YzpzdGFydF94bWl0IHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAorCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7CisJCX0KKwkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKyNlbHNlCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLworCQkvKiBEb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGF0IHRoaXMgdGltZSAqLworI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLworCX0KK30JCQkJLyogc3RhcnRfeG1pdCAqLwogCiAvKgogICogVGhpcyByb3V0aW5lIHNodXRzIGRvd24gYSBzZXJpYWwgcG9ydDsgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsCiAgKiBhbmQgRFRSIGlzIGRyb3BwZWQgaWYgdGhlIGhhbmd1cCBvbiBjbG9zZSB0ZXJtaW8gZmxhZyBpcyBvbi4KICAqLwotc3RhdGljIHZvaWQKLXNodXRkb3duKHN0cnVjdCBjeWNsYWRlc19wb3J0ICogaW5mbykKK3N0YXRpYyB2b2lkIHNodXRkb3duKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvKQogewotICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLSAgaW50IGNhcmQsY2hpcCxjaGFubmVsLGluZGV4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisJaW50IGNhcmQsIGNoaXAsIGNoYW5uZWwsIGluZGV4OwogCi0gICAgaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FyZCA9IGluZm8tPmNhcmQ7Ci0gICAgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmU7Ci0gICAgaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgewotCWNoaXAgPSBjaGFubmVsPj4yOwotCWNoYW5uZWwgJj0gMHgwMzsKLQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OwotCWJhc2VfYWRkciA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdPDxpbmRleCk7Ci0KLSNpZmRlZiBDWV9ERUJVR19PUEVOCi0gICAgcHJpbnRrKCJjeWMgc2h1dGRvd24gWSBjYXJkICVkLCBjaGlwICVkLCBjaGFubmVsICVkLCBiYXNlX2FkZHIgJWx4XG4iLAotCQljYXJkLCBjaGlwLCBjaGFubmVsLCAobG9uZyliYXNlX2FkZHIpOwotI2VuZGlmCi0KLQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQotCSAgICAvKiBDbGVhciBkZWx0YV9tc3Jfd2FpdCBxdWV1ZSB0byBhdm9pZCBtZW0gbGVha3MuICovCi0JICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwotCi0JICAgIGlmIChpbmZvLT54bWl0X2J1Zil7Ci0JCXVuc2lnbmVkIGNoYXIgKiB0ZW1wOwotCQl0ZW1wID0gaW5mby0+eG1pdF9idWY7Ci0JCWluZm8tPnhtaXRfYnVmID0gTlVMTDsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSB0ZW1wKTsKLQkgICAgfQotCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNBUjw8aW5kZXgpLCAodV9jaGFyKWNoYW5uZWwpOwotCSAgICBpZiAoIWluZm8tPnR0eSB8fCAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKSB7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TVNWUjE8PGluZGV4KSwgfkN5UlRTKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lNU1ZSMjw8aW5kZXgpLCB+Q3lEVFIpOwotI2lmZGVmIENZX0RFQlVHX0RUUgotCQlwcmludGsoImN5YyBzaHV0ZG93biBkcm9wcGluZyBEVFJcbiIpOwotCQlwcmludGsoIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAotCQkgICAgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeU1TVlIxPDxpbmRleCkpLCAKLSAgICAgICAgICAgICAgICAgICAgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeU1TVlIyPDxpbmRleCkpKTsKLSNlbmRpZgotCSAgICB9Ci0JICAgIGN5eV9pc3N1ZV9jbWQoYmFzZV9hZGRyLEN5Q0hBTl9DVEx8Q3lESVNfUkNWUixpbmRleCk7Ci0JICAgICAvKiBpdCBtYXkgYmUgYXBwcm9wcmlhdGUgdG8gY2xlYXIgX1hNSVQgYXQKLQkgICAgICAgc29tZSBsYXRlciBkYXRlIChhZnRlciB0ZXN0aW5nKSEhISAqLwotCi0JICAgIGlmIChpbmZvLT50dHkpewotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOwotCSAgICB9Ci0JICAgIGluZm8tPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKLQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotICAgICAgc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwotICAgICAgc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKLSAgICAgIHN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7Ci0gICAgICBpbnQgcmV0dmFsOwotCi0JYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHI7Ci0jaWZkZWYgQ1lfREVCVUdfT1BFTgotICAgIHByaW50aygiY3ljIHNodXRkb3duIFogY2FyZCAlZCwgY2hhbm5lbCAlZCwgYmFzZV9hZGRyICVseFxuIiwKLQkJY2FyZCwgY2hhbm5lbCwgKGxvbmcpYmFzZV9hZGRyKTsKLSNlbmRpZgotCi0gICAgICAgIGZpcm1faWQgPSBiYXNlX2FkZHIgKyBJRF9BRERSRVNTOwotICAgICAgICBpZiAoIUlTWkxPQURFRChjeV9jYXJkW2NhcmRdKSkgewotCSAgICByZXR1cm47CisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKKwkJcmV0dXJuOwogCX0KIAotCXpmd19jdHJsID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyAoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCWNoX2N0cmwgPSB6ZndfY3RybC0+Y2hfY3RybDsKLQotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCi0JICAgIGlmIChpbmZvLT54bWl0X2J1Zil7Ci0JCXVuc2lnbmVkIGNoYXIgKiB0ZW1wOwotCQl0ZW1wID0gaW5mby0+eG1pdF9idWY7Ci0JCWluZm8tPnhtaXRfYnVmID0gTlVMTDsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSB0ZW1wKTsKLQkgICAgfQotCSAgICAKLQkgICAgaWYgKCFpbmZvLT50dHkgfHwgKGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKSkgewotCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLSAgICAgICAgICAgICAgICAgICAodWNsb25nKShjeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSAmIAotICAgICAgICAgICAgICAgICAgIH4oQ19SU19SVFMgfCBDX1JTX0RUUikpKTsKLQkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtpbmZvLT5jYXJkXSwKLQkJCWNoYW5uZWwsIENfQ01fSU9DVExNLCAwTCk7Ci0JCWlmIChyZXR2YWwgIT0gMCl7Ci0JCSAgICBwcmludGsoImN5YzpzaHV0ZG93biByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKLQkJCSAgIGluZm8tPmxpbmUsIHJldHZhbCk7Ci0JCX0KLSNpZmRlZiBDWV9ERUJVR19EVFIKLQkJcHJpbnRrKCJjeWM6c2h1dGRvd24gZHJvcHBpbmcgWiBEVFJcbiIpOwotI2VuZGlmCi0JICAgIH0KLQkgICAgCi0JICAgIGlmIChpbmZvLT50dHkpewotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOwotCSAgICB9Ci0JICAgIGluZm8tPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKLQotCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0gICAgfQorCWNhcmQgPSBpbmZvLT5jYXJkOworCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lOworCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKKwkJY2hhbm5lbCAmPSAweDAzOworCQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OworCQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArCisJCQkJKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAogI2lmZGVmIENZX0RFQlVHX09QRU4KLSAgICBwcmludGsoIiBjeWMgc2h1dGRvd24gZG9uZVxuIik7CisJCXByaW50aygiY3ljIHNodXRkb3duIFkgY2FyZCAlZCwgY2hpcCAlZCwgY2hhbm5lbCAlZCwgIgorCQkJCSJiYXNlX2FkZHIgJWx4XG4iLAorCQkJCWNhcmQsIGNoaXAsIGNoYW5uZWwsIChsb25nKWJhc2VfYWRkcik7CiAjZW5kaWYKLSAgICByZXR1cm47Ci19IC8qIHNodXRkb3duICovCiAKKwkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisKKwkJLyogQ2xlYXIgZGVsdGFfbXNyX3dhaXQgcXVldWUgdG8gYXZvaWQgbWVtIGxlYWtzLiAqLworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKKworCQlpZiAoaW5mby0+eG1pdF9idWYpIHsKKwkJCXVuc2lnbmVkIGNoYXIgKnRlbXA7CisJCQl0ZW1wID0gaW5mby0+eG1pdF9idWY7CisJCQlpbmZvLT54bWl0X2J1ZiA9IE5VTEw7CisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGVtcCk7CisJCX0KKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOworCQlpZiAoIWluZm8tPnR0eSB8fCAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKSB7CisJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLCB+Q3lSVFMpOworCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwgfkN5RFRSKTsKKyNpZmRlZiBDWV9ERUJVR19EVFIKKwkJCXByaW50aygiY3ljIHNodXRkb3duIGRyb3BwaW5nIERUUlxuIik7CisJCQlwcmludGsoIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAorCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCisJCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKSk7CisjZW5kaWYKKwkJfQorCQljeXlfaXNzdWVfY21kKGJhc2VfYWRkciwgQ3lDSEFOX0NUTCB8IEN5RElTX1JDVlIsIGluZGV4KTsKKwkJLyogaXQgbWF5IGJlIGFwcHJvcHJpYXRlIHRvIGNsZWFyIF9YTUlUIGF0CisJCSAgIHNvbWUgbGF0ZXIgZGF0ZSAoYWZ0ZXIgdGVzdGluZykhISEgKi8KKworCQlpZiAoaW5mby0+dHR5KSB7CisJCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCQl9CisJCWluZm8tPmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKKwkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOworCQlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7CisJCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7CisJCXN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7CisJCWludCByZXR2YWw7CisKKwkJYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHI7CisjaWZkZWYgQ1lfREVCVUdfT1BFTgorCQlwcmludGsoImN5YyBzaHV0ZG93biBaIGNhcmQgJWQsIGNoYW5uZWwgJWQsIGJhc2VfYWRkciAlbHhcbiIsCisJCQljYXJkLCBjaGFubmVsLCAobG9uZyliYXNlX2FkZHIpOworI2VuZGlmCisKKwkJZmlybV9pZCA9IGJhc2VfYWRkciArIElEX0FERFJFU1M7CisJCWlmICghSVNaTE9BREVEKGN5X2NhcmRbY2FyZF0pKSB7CisJCQlyZXR1cm47CisJCX0KKworCQl6ZndfY3RybCA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsKKwkJCQkoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKKwkJYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKKwkJY2hfY3RybCA9IHpmd19jdHJsLT5jaF9jdHJsOworCisJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCisJCWlmIChpbmZvLT54bWl0X2J1ZikgeworCQkJdW5zaWduZWQgY2hhciAqdGVtcDsKKwkJCXRlbXAgPSBpbmZvLT54bWl0X2J1ZjsKKwkJCWluZm8tPnhtaXRfYnVmID0gTlVMTDsKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0ZW1wKTsKKwkJfQorCisJCWlmICghaW5mby0+dHR5IHx8IChpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkpIHsKKwkJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAorCQkJCSh1Y2xvbmcpKGN5X3JlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpJgorCQkJCQl+KENfUlNfUlRTIHwgQ19SU19EVFIpKSk7CisJCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2luZm8tPmNhcmRdLCBjaGFubmVsLAorCQkJCQlDX0NNX0lPQ1RMTSwgMEwpOworCQkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQkJcHJpbnRrKCJjeWM6c2h1dGRvd24gcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCisJCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7CisJCQl9CisjaWZkZWYgQ1lfREVCVUdfRFRSCisJCQlwcmludGsoImN5YzpzaHV0ZG93biBkcm9wcGluZyBaIERUUlxuIik7CisjZW5kaWYKKwkJfQorCisJCWlmIChpbmZvLT50dHkpIHsKKwkJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CisJCX0KKwkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOworCisJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJfQorCisjaWZkZWYgQ1lfREVCVUdfT1BFTgorCXByaW50aygiIGN5YyBzaHV0ZG93biBkb25lXG4iKTsKKyNlbmRpZgorfQkJCQkvKiBzaHV0ZG93biAqLwogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMjYxLDUyNyArMjMyMSw1NDYgQEAKICAqLwogCiBzdGF0aWMgaW50Ci1ibG9ja190aWxfcmVhZHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8pCitibG9ja190aWxfcmVhZHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvKQogewotICBERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLSAgc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOwotICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICBpbnQgY2hpcCwgY2hhbm5lbCxpbmRleDsKLSAgaW50IHJldHZhbDsKLSAgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OworCWludCByZXR2YWw7CisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CiAKLSAgICBjaW5mbyA9ICZjeV9jYXJkW2luZm8tPmNhcmRdOwotICAgIGNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY2luZm8tPmZpcnN0X2xpbmU7CisJY2luZm8gPSAmY3lfY2FyZFtpbmZvLT5jYXJkXTsKKwljaGFubmVsID0gaW5mby0+bGluZSAtIGNpbmZvLT5maXJzdF9saW5lOwogCi0gICAgLyoKLSAgICAgKiBJZiB0aGUgZGV2aWNlIGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgY2xvc2VkLCB0aGVuIGJsb2NrCi0gICAgICogdW50aWwgaXQncyBkb25lLCBhbmQgdGhlbiB0cnkgYWdhaW4uCi0gICAgICovCi0gICAgaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykpIHsKLQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSB7Ci0gICAgICAgICAgICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5jbG9zZV93YWl0KTsKLQl9Ci0gICAgICAgIHJldHVybiAoKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPyAtRUFHQUlOIDogLUVSRVNUQVJUU1lTKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIElmIG5vbi1ibG9ja2luZyBtb2RlIGlzIHNldCwgdGhlbiBtYWtlIHRoZSBjaGVjayB1cCBmcm9udAotICAgICAqIGFuZCB0aGVuIGV4aXQuCi0gICAgICovCi0gICAgaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwKLQkodHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpKSB7Ci0gICAgICAgIGluZm8tPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qCi0gICAgICogQmxvY2sgd2FpdGluZyBmb3IgdGhlIGNhcnJpZXIgZGV0ZWN0IGFuZCB0aGUgbGluZSB0byBiZWNvbWUKLSAgICAgKiBmcmVlIChpLmUuLCBub3QgaW4gdXNlIGJ5IHRoZSBjYWxsb3V0KS4gIFdoaWxlIHdlIGFyZSBpbgotICAgICAqIHRoaXMgbG9vcCwgaW5mby0+Y291bnQgaXMgZHJvcHBlZCBieSBvbmUsIHNvIHRoYXQKLSAgICAgKiBjeV9jbG9zZSgpIGtub3dzIHdoZW4gdG8gZnJlZSB0aGluZ3MuICBXZSByZXN0b3JlIGl0IHVwb24KLSAgICAgKiBleGl0LCBlaXRoZXIgbm9ybWFsIG9yIGFibm9ybWFsLgotICAgICAqLwotICAgIHJldHZhbCA9IDA7Ci0gICAgYWRkX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOwotI2lmZGVmIENZX0RFQlVHX09QRU4KLSAgICBwcmludGsoImN5YyBibG9ja190aWxfcmVhZHkgYmVmb3JlIGJsb2NrOiB0dHlDJWQsIGNvdW50ID0gJWRcbiIsCi0gICAgICAgICAgIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsvKiovCi0jZW5kaWYKLSAgICBDWV9MT0NLKGluZm8sIGZsYWdzKTsKLSAgICBpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpCi0JaW5mby0+Y291bnQtLTsKLSAgICBDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotI2lmZGVmIENZX0RFQlVHX0NPVU5UCi0gICAgcHJpbnRrKCJjeWMgYmxvY2tfdGlsX3JlYWR5OiAoJWQpOiBkZWNyZW1lbnRpbmcgY291bnQgdG8gJWRcbiIsCi0gICAgICAgIGN1cnJlbnQtPnBpZCwgaW5mby0+Y291bnQpOwotI2VuZGlmCi0gICAgaW5mby0+YmxvY2tlZF9vcGVuKys7Ci0KLSAgICBpZiAoIUlTX0NZQ19aKCpjaW5mbykpIHsKLQljaGlwID0gY2hhbm5lbD4+MjsKLQljaGFubmVsICY9IDB4MDM7Ci0JaW5kZXggPSBjaW5mby0+YnVzX2luZGV4OwotCWJhc2VfYWRkciA9IGNpbmZvLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF08PGluZGV4KTsKLQotCXdoaWxlICgxKSB7Ci0JICAgIENZX0xPQ0soaW5mbywgZmxhZ3MpOwotCQlpZiAoKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSl7Ci0JCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNBUjw8aW5kZXgpLCAodV9jaGFyKWNoYW5uZWwpOwotCQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lNU1ZSMTw8aW5kZXgpLCBDeVJUUyk7Ci0JCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1TVlIyPDxpbmRleCksIEN5RFRSKTsKLSNpZmRlZiBDWV9ERUJVR19EVFIKLQkJICAgIHByaW50aygiY3ljOmJsb2NrX3RpbF9yZWFkeSByYWlzaW5nIERUUlxuIik7Ci0JCSAgICBwcmludGsoIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAotCQkJY3lfcmVhZGIoYmFzZV9hZGRyKyhDeU1TVlIxPDxpbmRleCkpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lNU1ZSMjw8aW5kZXgpKSk7Ci0jZW5kaWYKKwkvKgorCSAqIElmIHRoZSBkZXZpY2UgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZyBjbG9zZWQsIHRoZW4gYmxvY2sKKwkgKiB1bnRpbCBpdCdzIGRvbmUsIGFuZCB0aGVuIHRyeSBhZ2Fpbi4KKwkgKi8KKwlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSkgeworCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSB7CisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5jbG9zZV93YWl0KTsKIAkJfQotCSAgICBDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQlyZXR1cm4gKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPyAtRUFHQUlOOiAtRVJFU1RBUlRTWVM7CisJfQogCi0JICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JICAgIGlmICh0dHlfaHVuZ191cF9wKGZpbHApCi0JICAgIHx8ICEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgKXsKLQkJcmV0dmFsID0gKChpbmZvLT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8gCi0JCSAgICAtRUFHQUlOIDogLUVSRVNUQVJUU1lTKTsKLQkJYnJlYWs7Ci0JICAgIH0KKwkvKgorCSAqIElmIG5vbi1ibG9ja2luZyBtb2RlIGlzIHNldCwgdGhlbiBtYWtlIHRoZSBjaGVjayB1cCBmcm9udAorCSAqIGFuZCB0aGVuIGV4aXQuCisJICovCisJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgfHwgKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkgeworCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCQlyZXR1cm4gMDsKKwl9CiAKLQkgICAgQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5Q0FSPDxpbmRleCksICh1X2NoYXIpY2hhbm5lbCk7Ci0JCWlmICghKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykKLQkJJiYgKENfQ0xPQ0FMKHR0eSkKLQkJICAgIHx8IChjeV9yZWFkYihiYXNlX2FkZHIrKEN5TVNWUjE8PGluZGV4KSkgJiBDeURDRCkpKSB7CisJLyoKKwkgKiBCbG9jayB3YWl0aW5nIGZvciB0aGUgY2FycmllciBkZXRlY3QgYW5kIHRoZSBsaW5lIHRvIGJlY29tZQorCSAqIGZyZWUgKGkuZS4sIG5vdCBpbiB1c2UgYnkgdGhlIGNhbGxvdXQpLiAgV2hpbGUgd2UgYXJlIGluCisJICogdGhpcyBsb29wLCBpbmZvLT5jb3VudCBpcyBkcm9wcGVkIGJ5IG9uZSwgc28gdGhhdAorCSAqIGN5X2Nsb3NlKCkga25vd3Mgd2hlbiB0byBmcmVlIHRoaW5ncy4gIFdlIHJlc3RvcmUgaXQgdXBvbgorCSAqIGV4aXQsIGVpdGhlciBub3JtYWwgb3IgYWJub3JtYWwuCisJICovCisJcmV0dmFsID0gMDsKKwlhZGRfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CisjaWZkZWYgQ1lfREVCVUdfT1BFTgorCXByaW50aygiY3ljIGJsb2NrX3RpbF9yZWFkeSBiZWZvcmUgYmxvY2s6IHR0eUMlZCwgY291bnQgPSAlZFxuIiwKKwkJaW5mby0+bGluZSwgaW5mby0+Y291bnQpOworCS8qKi8KKyNlbmRpZgorCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKKwkJaW5mby0+Y291bnQtLTsKKwlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworI2lmZGVmIENZX0RFQlVHX0NPVU5UCisJcHJpbnRrKCJjeWMgYmxvY2tfdGlsX3JlYWR5OiAoJWQpOiBkZWNyZW1lbnRpbmcgY291bnQgdG8gJWRcbiIsCisJCWN1cnJlbnQtPnBpZCwgaW5mby0+Y291bnQpOworI2VuZGlmCisJaW5mby0+YmxvY2tlZF9vcGVuKys7CisKKwlpZiAoIUlTX0NZQ19aKCpjaW5mbykpIHsKKwkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKKwkJY2hhbm5lbCAmPSAweDAzOworCQlpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7CisJCWJhc2VfYWRkciA9IGNpbmZvLT5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOworCisJCXdoaWxlICgxKSB7CisJCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJCWlmICgodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpKSB7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCisJCQkJCSAgKHVfY2hhcikgY2hhbm5lbCk7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwKKwkJCQkJICBDeVJUUyk7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKKwkJCQkJICBDeURUUik7CisjaWZkZWYgQ1lfREVCVUdfRFRSCisJCQkJcHJpbnRrKCJjeWM6YmxvY2tfdGlsX3JlYWR5IHJhaXNpbmcgRFRSXG4iKTsKKwkJCQlwcmludGsoIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAorCQkJCQljeV9yZWFkYihiYXNlX2FkZHIgKworCQkJCQkJKEN5TVNWUjEgPDwgaW5kZXgpKSwKKwkJCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsKKwkJCQkJCShDeU1TVlIyIDw8IGluZGV4KSkpOworI2VuZGlmCisJCQl9CiAJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotCQkJYnJlYWs7Ci0JCX0KLQkgICAgQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKIAotCSAgICBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwotCQlicmVhazsKLQkgICAgfQorCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8CisJCQkJCSEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKKwkJCQlyZXR2YWwgPSAoKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPworCQkJCQkgIC1FQUdBSU4gOiAtRVJFU1RBUlRTWVMpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLAorCQkJCSAgKHVfY2hhcikgY2hhbm5lbCk7CisJCQlpZiAoIShpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpICYmIChDX0NMT0NBTCh0dHkpIHx8CisJCQkJCShjeV9yZWFkYihiYXNlX2FkZHIgKworCQkJCQkJKEN5TVNWUjEgPDwgaW5kZXgpKSAmIEN5RENEKSkpIHsKKwkJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJCWJyZWFrOworCQkJfQorCQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQkJCWJyZWFrOworCQkJfQogI2lmZGVmIENZX0RFQlVHX09QRU4KLQkgICAgcHJpbnRrKCJjeWMgYmxvY2tfdGlsX3JlYWR5IGJsb2NraW5nOiB0dHlDJWQsIGNvdW50ID0gJWRcbiIsCi0JCSAgIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsvKiovCisJCQlwcmludGsoImN5YyBibG9ja190aWxfcmVhZHkgYmxvY2tpbmc6IHR0eUMlZCwgIgorCQkJCQkiY291bnQgPSAlZFxuIiwKKwkJCQkJaW5mby0+bGluZSwgaW5mby0+Y291bnQpOworCQkJLyoqLwogI2VuZGlmCi0JICAgIHNjaGVkdWxlKCk7Ci0JfQotICAgIH0gZWxzZSB7Ci0gICAgICBzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkOwotICAgICAgc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwotICAgICAgc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKLSAgICAgIHN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmw7Ci0gICAgICBpbnQgcmV0dmFsOwotCi0JYmFzZV9hZGRyID0gY2luZm8tPmJhc2VfYWRkcjsKLQlmaXJtX2lkID0gYmFzZV9hZGRyICsgSURfQUREUkVTUzsKLSAgICAgICAgaWYgKCFJU1pMT0FERUQoKmNpbmZvKSl7Ci0gICAgICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQkgICAgcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOwotCSAgICByZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl6ZndfY3RybCA9IGJhc2VfYWRkciArIChjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7Ci0JY2hfY3RybCA9IHpmd19jdHJsLT5jaF9jdHJsOwotCi0Jd2hpbGUgKDEpIHsKLQkgICAgaWYgKCh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkpewotCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLQkJCWN5X3JlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpIHwKLQkJCShDX1JTX1JUUyB8IENfUlNfRFRSKSk7Ci0JCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbaW5mby0+Y2FyZF0sCi0JCQkJICAgICAgIGNoYW5uZWwsIENfQ01fSU9DVExNLCAwTCk7Ci0JCWlmIChyZXR2YWwgIT0gMCl7Ci0JCSAgICBwcmludGsoImN5YzpibG9ja190aWxfcmVhZHkgcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCi0JCQkgICBpbmZvLT5saW5lLCByZXR2YWwpOworCQkJc2NoZWR1bGUoKTsKIAkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7CisJCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKKwkJc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKKwkJc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybDsKKwkJaW50IHJldHZhbDsKKworCQliYXNlX2FkZHIgPSBjaW5mby0+YmFzZV9hZGRyOworCQlmaXJtX2lkID0gYmFzZV9hZGRyICsgSURfQUREUkVTUzsKKwkJaWYgKCFJU1pMT0FERUQoKmNpbmZvKSkgeworCQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXpmd19jdHJsID0gYmFzZV9hZGRyICsgKGN5X3JlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYKKwkJCQkweGZmZmZmKTsKKwkJYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKKwkJY2hfY3RybCA9IHpmd19jdHJsLT5jaF9jdHJsOworCisJCXdoaWxlICgxKSB7CisJCQlpZiAoKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSkgeworCQkJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAorCQkJCQkgIGN5X3JlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLgorCQkJCQkJICAgcnNfY29udHJvbCkgfCAoQ19SU19SVFMgfAorCQkJCQkJCQkgIENfUlNfRFRSKSk7CisJCQkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtpbmZvLT5jYXJkXSwKKwkJCQkJCWNoYW5uZWwsIENfQ01fSU9DVExNLCAwTCk7CisJCQkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQkJCXByaW50aygiY3ljOmJsb2NrX3RpbF9yZWFkeSByZXR2YWwgb24gIgorCQkJCQkJInR0eUMlZCB3YXMgJXhcbiIsCisJCQkJCQlpbmZvLT5saW5lLCByZXR2YWwpOworCQkJCX0KICNpZmRlZiBDWV9ERUJVR19EVFIKLQkJcHJpbnRrKCJjeWM6YmxvY2tfdGlsX3JlYWR5IHJhaXNpbmcgWiBEVFJcbiIpOworCQkJCXByaW50aygiY3ljOmJsb2NrX3RpbF9yZWFkeSByYWlzaW5nIFogRFRSXG4iKTsKICNlbmRpZgotCSAgICB9CisJCQl9CiAKLQkgICAgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkgICAgaWYgKHR0eV9odW5nX3VwX3AoZmlscCkKLQkgICAgfHwgIShpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSApewotCQlyZXR2YWwgPSAoKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPwotCQkgICAgLUVBR0FJTiA6IC1FUkVTVEFSVFNZUyk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIGlmICghKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykKLQkgICAgJiYgKENfQ0xPQ0FMKHR0eSkKLQkgICAgICB8fCAoY3lfcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfc3RhdHVzKSAmIENfUlNfRENEKSkpIHsKLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLQkJYnJlYWs7Ci0JICAgIH0KKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fAorCQkJCQkhKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKSB7CisJCQkJcmV0dmFsID0gKChpbmZvLT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8KKwkJCQkJICAtRUFHQUlOIDogLUVSRVNUQVJUU1lTKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYgKENfQ0xPQ0FMKHR0eSkgfHwKKwkJCQkJKGN5X3JlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX3N0YXR1cykgJgorCQkJCQkJQ19SU19EQ0QpKSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQkJCWJyZWFrOworCQkJfQogI2lmZGVmIENZX0RFQlVHX09QRU4KLQkgICAgcHJpbnRrKCJjeWMgYmxvY2tfdGlsX3JlYWR5IGJsb2NraW5nOiB0dHlDJWQsIGNvdW50ID0gJWRcbiIsCi0JCSAgIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsvKiovCisJCQlwcmludGsoImN5YyBibG9ja190aWxfcmVhZHkgYmxvY2tpbmc6IHR0eUMlZCwgIgorCQkJCQkiY291bnQgPSAlZFxuIiwKKwkJCQkJaW5mby0+bGluZSwgaW5mby0+Y291bnQpOworCQkJLyoqLwogI2VuZGlmCi0JICAgIHNjaGVkdWxlKCk7CisJCQlzY2hlZHVsZSgpOworCQl9CiAJfQotICAgIH0KLSAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLSAgICByZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7Ci0gICAgaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKXsKLQlpbmZvLT5jb3VudCsrOworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5vcGVuX3dhaXQsICZ3YWl0KTsKKwlpZiAoIXR0eV9odW5nX3VwX3AoZmlscCkpIHsKKwkJaW5mby0+Y291bnQrKzsKICNpZmRlZiBDWV9ERUJVR19DT1VOVAotCXByaW50aygiY3ljOmJsb2NrX3RpbF9yZWFkeSAoJWQpOiBpbmNyZW1lbnRpbmcgY291bnQgdG8gJWRcbiIsCi0JICAgIGN1cnJlbnQtPnBpZCwgaW5mby0+Y291bnQpOworCQlwcmludGsoImN5YzpibG9ja190aWxfcmVhZHkgKCVkKTogaW5jcmVtZW50aW5nIGNvdW50IHRvICVkXG4iLAorCQkJY3VycmVudC0+cGlkLCBpbmZvLT5jb3VudCk7CiAjZW5kaWYKLSAgICB9Ci0gICAgaW5mby0+YmxvY2tlZF9vcGVuLS07CisJfQorCWluZm8tPmJsb2NrZWRfb3Blbi0tOwogI2lmZGVmIENZX0RFQlVHX09QRU4KLSAgICBwcmludGsoImN5YzpibG9ja190aWxfcmVhZHkgYWZ0ZXIgYmxvY2tpbmc6IHR0eUMlZCwgY291bnQgPSAlZFxuIiwKLQkgICBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7LyoqLworCXByaW50aygiY3ljOmJsb2NrX3RpbF9yZWFkeSBhZnRlciBibG9ja2luZzogdHR5QyVkLCBjb3VudCA9ICVkXG4iLAorCQlpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7CisJLyoqLwogI2VuZGlmCi0gICAgaWYgKHJldHZhbCkKLQlyZXR1cm4gcmV0dmFsOwotICAgIGluZm8tPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0gICAgcmV0dXJuIDA7Ci19IC8qIGJsb2NrX3RpbF9yZWFkeSAqLwotCisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlpbmZvLT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOworCXJldHVybiAwOworfQkJCQkvKiBibG9ja190aWxfcmVhZHkgKi8KIAogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBzZXJpYWwgcG9ydCBpcyBvcGVuZWQuICBJdAogICogcGVyZm9ybXMgdGhlIHNlcmlhbC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHR0eSBzdHJ1Y3R1cmUuCiAgKi8KLXN0YXRpYyBpbnQKLWN5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIGludCBjeV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewotICBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAgKmluZm87Ci0gIGludCByZXR2YWwsIGxpbmU7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm87CisJaW50IHJldHZhbCwgbGluZTsKIAotICAgIGxpbmUgPSB0dHktPmluZGV4OwotICAgIGlmICgobGluZSA8IDApIHx8IChOUl9QT1JUUyA8PSBsaW5lKSl7Ci0gICAgICAgIHJldHVybiAtRU5PREVWOwotICAgIH0KLSAgICBpbmZvID0gJmN5X3BvcnRbbGluZV07Ci0gICAgaWYgKGluZm8tPmxpbmUgPCAwKXsKLSAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQotICAgIAotICAgIC8qIElmIHRoZSBjYXJkJ3MgZmlybXdhcmUgaGFzbid0IGJlZW4gbG9hZGVkLAotICAgICAgIHRyZWF0IGl0IGFzIGFic2VudCBmcm9tIHRoZSBzeXN0ZW0uICBUaGlzCi0gICAgICAgd2lsbCBtYWtlIHRoZSB1c2VyIHBheSBhdHRlbnRpb24uCi0gICAgKi8KLSAgICBpZiAoSVNfQ1lDX1ooY3lfY2FyZFtpbmZvLT5jYXJkXSkpIHsKLQlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSAmY3lfY2FyZFtpbmZvLT5jYXJkXTsKLQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkID0gY2luZm8tPmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0KLSAgICAgICAgaWYgKCFJU1pMT0FERUQoKmNpbmZvKSkgewotCSAgICBpZiAoKChaRV9WMSA9PWN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKQotCQkoY2luZm8tPmN0bF9hZGRyKSktPm1haWxfYm94XzApKSAmJgotCQlaX0ZQR0FfQ0hFQ0sgKCpjaW5mbykpICYmCi0JCShaRklSTV9ITFQgPT0gY3lfcmVhZGwgKCZmaXJtX2lkLT5zaWduYXR1cmUpKSkKLQkgICAgewotCQlwcmludGsgKCJjeWM6Q3ljbGFkZXMtWiBFcnJvcjogeW91IG5lZWQgYW4gZXh0ZXJuYWwgcG93ZXIgc3VwcGx5IGZvciB0aGlzIG51bWJlciBvZiBwb3J0cy5cblxyRmlybXdhcmUgaGFsdGVkLlxyXG4iKTsKLQkgICAgfSBlbHNlIHsKLQkJcHJpbnRrKCJjeWM6Q3ljbGFkZXMtWiBmaXJtd2FyZSBub3QgeWV0IGxvYWRlZFxuIik7Ci0JICAgIH0KLQkgICAgcmV0dXJuIC1FTk9ERVY7Ci0JfQotI2lmZGVmIENPTkZJR19DWVpfSU5UUgotCWVsc2UgewotCSAgICAvKiBJbiBjYXNlIHRoaXMgWiBib2FyZCBpcyBvcGVyYXRpbmcgaW4gaW50ZXJydXB0IG1vZGUsIGl0cyAKLQkgICAgICAgaW50ZXJydXB0cyBzaG91bGQgYmUgZW5hYmxlZCBhcyBzb29uIGFzIHRoZSBmaXJzdCBvcGVuIGhhcHBlbnMgCi0JICAgICAgIHRvIG9uZSBvZiBpdHMgcG9ydHMuICovCi0gICAgICAgICAgICBpZiAoIWNpbmZvLT5pbnRyX2VuYWJsZWQpIHsKLQkJc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwotCQlzdHJ1Y3QgQk9BUkRfQ1RSTCBfX2lvbWVtICpib2FyZF9jdHJsOwotCi0JCXpmd19jdHJsID0gY2luZm8tPmJhc2VfYWRkciArIChjeV9yZWFkbCAoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQotCQlib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCi0JCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBQTFggY2hpcCAqLwotCQljeV93cml0ZXcoY2luZm8tPmN0bF9hZGRyKzB4NjgsCi0JCQljeV9yZWFkdyhjaW5mby0+Y3RsX2FkZHIrMHg2OCl8MHgwOTAwKTsKLQkJLyogRW5hYmxlIGludGVycnVwdHMgb24gdGhlIEZXICovCi0JCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2luZm8sCi0JCQkJCTAsIENfQ01fSVJRX0VOQkwsIDBMKTsKLQkJaWYgKHJldHZhbCAhPSAwKXsKLQkJICAgIHByaW50aygiY3ljOklSUSBlbmFibGUgcmV0dmFsIHdhcyAleFxuIiwgcmV0dmFsKTsKLQkJfQotCQljaW5mby0+bnBvcnRzID0gKGludCkgY3lfcmVhZGwgKCZib2FyZF9jdHJsLT5uX2NoYW5uZWwpOwotCQljaW5mby0+aW50cl9lbmFibGVkID0gMTsKLQkgICAgfQotCX0KLSNlbmRpZiAvKiBDT05GSUdfQ1laX0lOVFIgKi8KLQkvKiBNYWtlIHN1cmUgdGhpcyBaIHBvcnQgcmVhbGx5IGV4aXN0cyBpbiBoYXJkd2FyZSAqLwotCWlmIChpbmZvLT5saW5lID4gKGNpbmZvLT5maXJzdF9saW5lICsgY2luZm8tPm5wb3J0cyAtIDEpKQorCWxpbmUgPSB0dHktPmluZGV4OworCWlmICgobGluZSA8IDApIHx8IChOUl9QT1JUUyA8PSBsaW5lKSkgewogCQlyZXR1cm4gLUVOT0RFVjsKLSAgICB9CisJfQorCWluZm8gPSAmY3lfcG9ydFtsaW5lXTsKKwlpZiAoaW5mby0+bGluZSA8IDApIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogSWYgdGhlIGNhcmQncyBmaXJtd2FyZSBoYXNuJ3QgYmVlbiBsb2FkZWQsCisJICAgdHJlYXQgaXQgYXMgYWJzZW50IGZyb20gdGhlIHN5c3RlbS4gIFRoaXMKKwkgICB3aWxsIG1ha2UgdGhlIHVzZXIgcGF5IGF0dGVudGlvbi4KKwkgKi8KKwlpZiAoSVNfQ1lDX1ooY3lfY2FyZFtpbmZvLT5jYXJkXSkpIHsKKwkJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gJmN5X2NhcmRbaW5mby0+Y2FyZF07CisJCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQgPSBjaW5mby0+YmFzZV9hZGRyICsgSURfQUREUkVTUzsKKworCQlpZiAoIUlTWkxPQURFRCgqY2luZm8pKSB7CisJCQlpZiAoKChaRV9WMSA9PSBjeV9yZWFkbCgKKwkJCQkJJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopCisJCQkJCSAoY2luZm8tPmN0bF9hZGRyKSktPm1haWxfYm94XzApKSAmJgorCQkJCQlaX0ZQR0FfQ0hFQ0soKmNpbmZvKSkgJiYKKwkJCQkJKFpGSVJNX0hMVCA9PSBjeV9yZWFkbCgKKwkJCQkJCSZmaXJtX2lkLT5zaWduYXR1cmUpKSkgeworCQkJCXByaW50aygiY3ljOkN5Y2xhZGVzLVogRXJyb3I6IHlvdSBuZWVkIGFuICIKKwkJCQkJImV4dGVybmFsIHBvd2VyIHN1cHBseSBmb3IgdGhpcyBudW1iZXIgIgorCQkJCQkib2YgcG9ydHMuXG5cckZpcm13YXJlIGhhbHRlZC5cclxuIik7CisJCQl9IGVsc2UgeworCQkJCXByaW50aygiY3ljOkN5Y2xhZGVzLVogZmlybXdhcmUgbm90IHlldCAiCisJCQkJCSJsb2FkZWRcbiIpOworCQkJfQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKyNpZmRlZiBDT05GSUdfQ1laX0lOVFIKKwkJZWxzZSB7CisJCS8qIEluIGNhc2UgdGhpcyBaIGJvYXJkIGlzIG9wZXJhdGluZyBpbiBpbnRlcnJ1cHQgbW9kZSwgaXRzCisJCSAgIGludGVycnVwdHMgc2hvdWxkIGJlIGVuYWJsZWQgYXMgc29vbiBhcyB0aGUgZmlyc3Qgb3BlbgorCQkgICBoYXBwZW5zIHRvIG9uZSBvZiBpdHMgcG9ydHMuICovCisJCQlpZiAoIWNpbmZvLT5pbnRyX2VuYWJsZWQpIHsKKwkJCQlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7CisJCQkJc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKKworCQkJCXpmd19jdHJsID0gY2luZm8tPmJhc2VfYWRkciArCisJCQkJCShjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmCisJCQkJCQkweGZmZmZmKTsKKworCQkJCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7CisKKwkJCQkvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB0aGUgUExYIGNoaXAgKi8KKwkJCQljeV93cml0ZXcoY2luZm8tPmN0bF9hZGRyICsgMHg2OCwKKwkJCQkJICBjeV9yZWFkdyhjaW5mby0+Y3RsX2FkZHIgKworCQkJCQkJICAgMHg2OCkgfCAweDA5MDApOworCQkJCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBGVyAqLworCQkJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoY2luZm8sIDAsCisJCQkJCQlDX0NNX0lSUV9FTkJMLCAwTCk7CisJCQkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQkJCXByaW50aygiY3ljOklSUSBlbmFibGUgcmV0dmFsIHdhcyAleFxuIiwKKwkJCQkJCXJldHZhbCk7CisJCQkJfQorCQkJCWNpbmZvLT5ucG9ydHMgPQorCQkJCQkoaW50KWN5X3JlYWRsKCZib2FyZF9jdHJsLT5uX2NoYW5uZWwpOworCQkJCWNpbmZvLT5pbnRyX2VuYWJsZWQgPSAxOworCQkJfQorCQl9CisjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCisJCS8qIE1ha2Ugc3VyZSB0aGlzIFogcG9ydCByZWFsbHkgZXhpc3RzIGluIGhhcmR3YXJlICovCisJCWlmIChpbmZvLT5saW5lID4gKGNpbmZvLT5maXJzdF9saW5lICsgY2luZm8tPm5wb3J0cyAtIDEpKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfQogI2lmZGVmIENZX0RFQlVHX09USEVSCi0gICAgcHJpbnRrKCJjeWM6Y3lfb3BlbiB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOyAvKiAqLworCXByaW50aygiY3ljOmN5X29wZW4gdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsJLyogKi8KICNlbmRpZgotICAgIHR0eS0+ZHJpdmVyX2RhdGEgPSBpbmZvOwotICAgIGluZm8tPnR0eSA9IHR0eTsKLSAgICBpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X29wZW4iKSl7Ci0gICAgICAgIHJldHVybiAtRU5PREVWOwotICAgIH0KKwl0dHktPmRyaXZlcl9kYXRhID0gaW5mbzsKKwlpbmZvLT50dHkgPSB0dHk7CisJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9vcGVuIikpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogI2lmZGVmIENZX0RFQlVHX09QRU4KLSAgICBwcmludGsoImN5YzpjeV9vcGVuIHR0eUMlZCwgY291bnQgPSAlZFxuIiwKLSAgICAgICAgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOy8qKi8KKwlwcmludGsoImN5YzpjeV9vcGVuIHR0eUMlZCwgY291bnQgPSAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOworCS8qKi8KICNlbmRpZgotICAgIGluZm8tPmNvdW50Kys7CisJaW5mby0+Y291bnQrKzsKICNpZmRlZiBDWV9ERUJVR19DT1VOVAotICAgIHByaW50aygiY3ljOmN5X29wZW4gKCVkKTogaW5jcmVtZW50aW5nIGNvdW50IHRvICVkXG4iLAotICAgICAgICBjdXJyZW50LT5waWQsIGluZm8tPmNvdW50KTsKKwlwcmludGsoImN5YzpjeV9vcGVuICglZCk6IGluY3JlbWVudGluZyBjb3VudCB0byAlZFxuIiwKKwkJY3VycmVudC0+cGlkLCBpbmZvLT5jb3VudCk7CiAjZW5kaWYKIAotICAgIC8qCi0gICAgICogSWYgdGhlIHBvcnQgaXMgdGhlIG1pZGRsZSBvZiBjbG9zaW5nLCBiYWlsIG91dCBub3cKLSAgICAgKi8KLSAgICBpZiAodHR5X2h1bmdfdXBfcChmaWxwKSB8fCAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSkgewotCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpCi0JICAgIGludGVycnVwdGlibGVfc2xlZXBfb24oJmluZm8tPmNsb3NlX3dhaXQpOwotCXJldHVybiAoKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPyAtRUFHQUlOIDogLUVSRVNUQVJUU1lTKTsKLSAgICB9CisJLyoKKwkgKiBJZiB0aGUgcG9ydCBpcyB0aGUgbWlkZGxlIG9mIGNsb3NpbmcsIGJhaWwgb3V0IG5vdworCSAqLworCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IChpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpKSB7CisJCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpCisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5jbG9zZV93YWl0KTsKKwkJcmV0dXJuIChpbmZvLT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8gLUVBR0FJTjogLUVSRVNUQVJUU1lTOworCX0KIAotICAgIC8qCi0gICAgICogU3RhcnQgdXAgc2VyaWFsIHBvcnQKLSAgICAgKi8KLSAgICByZXR2YWwgPSBzdGFydHVwKGluZm8pOwotICAgIGlmIChyZXR2YWwpewotICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgIH0KKwkvKgorCSAqIFN0YXJ0IHVwIHNlcmlhbCBwb3J0CisJICovCisJcmV0dmFsID0gc3RhcnR1cChpbmZvKTsKKwlpZiAocmV0dmFsKSB7CisJCXJldHVybiByZXR2YWw7CisJfQogCi0gICAgcmV0dmFsID0gYmxvY2tfdGlsX3JlYWR5KHR0eSwgZmlscCwgaW5mbyk7Ci0gICAgaWYgKHJldHZhbCkgeworCXJldHZhbCA9IGJsb2NrX3RpbF9yZWFkeSh0dHksIGZpbHAsIGluZm8pOworCWlmIChyZXR2YWwpIHsKICNpZmRlZiBDWV9ERUJVR19PUEVOCi0gICAgICAgIHByaW50aygiY3ljOmN5X29wZW4gcmV0dXJuaW5nIGFmdGVyIGJsb2NrX3RpbF9yZWFkeSB3aXRoICVkXG4iLAotICAgICAgICAgICAgICAgcmV0dmFsKTsKKwkJcHJpbnRrKCJjeWM6Y3lfb3BlbiByZXR1cm5pbmcgYWZ0ZXIgYmxvY2tfdGlsX3JlYWR5IHdpdGggJWRcbiIsCisJCQlyZXR2YWwpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgfQorCQlyZXR1cm4gcmV0dmFsOworCX0KIAotICAgIGluZm8tPnRocm90dGxlID0gMDsKKwlpbmZvLT50aHJvdHRsZSA9IDA7CiAKICNpZmRlZiBDWV9ERUJVR19PUEVOCi0gICAgcHJpbnRrKCIgY3ljOmN5X29wZW4gZG9uZVxuIik7LyoqLworCXByaW50aygiIGN5YzpjeV9vcGVuIGRvbmVcbiIpOworCS8qKi8KICNlbmRpZgotCi0gICAgcmV0dXJuIDA7Ci19IC8qIGN5X29wZW4gKi8KLQorCXJldHVybiAwOworfQkJCQkvKiBjeV9vcGVuICovCiAKIC8qCiAgKiBjeV93YWl0X3VudGlsX3NlbnQoKSAtLS0gd2FpdCB1bnRpbCB0aGUgdHJhbnNtaXR0ZXIgaXMgZW1wdHkKICAqLwotc3RhdGljIHZvaWQgCi1jeV93YWl0X3VudGlsX3NlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpCitzdGF0aWMgdm9pZCBjeV93YWl0X3VudGlsX3NlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpCiB7Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICogaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0gIHZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotICBpbnQgY2FyZCxjaGlwLGNoYW5uZWwsaW5kZXg7Ci0gIHVuc2lnbmVkIGxvbmcgb3JpZ19qaWZmaWVzOwotICBpbnQgY2hhcl90aW1lOwotCQotICAgIGlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfd2FpdF91bnRpbF9zZW50IikpCi0JcmV0dXJuOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKKwlpbnQgY2FyZCwgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJdW5zaWduZWQgbG9uZyBvcmlnX2ppZmZpZXM7CisJaW50IGNoYXJfdGltZTsKIAotICAgIGlmIChpbmZvLT54bWl0X2ZpZm9fc2l6ZSA9PSAwKQotCXJldHVybjsgLyogSnVzdCBpbiBjYXNlLi4uLiAqLworCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfd2FpdF91bnRpbF9zZW50IikpCisJCXJldHVybjsKIAorCWlmIChpbmZvLT54bWl0X2ZpZm9fc2l6ZSA9PSAwKQorCQlyZXR1cm47CQkvKiBKdXN0IGluIGNhc2UuLi4uICovCiAKLSAgICBvcmlnX2ppZmZpZXMgPSBqaWZmaWVzOwotICAgIC8qCi0gICAgICogU2V0IHRoZSBjaGVjayBpbnRlcnZhbCB0byBiZSAxLzUgb2YgdGhlIGVzdGltYXRlZCB0aW1lIHRvCi0gICAgICogc2VuZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGFuZCBtYWtlIGl0IGF0IGxlYXN0IDEuICBUaGUgY2hlY2sKLSAgICAgKiBpbnRlcnZhbCBzaG91bGQgYWxzbyBiZSBsZXNzIHRoYW4gdGhlIHRpbWVvdXQuCi0gICAgICogCi0gICAgICogTm90ZTogd2UgaGF2ZSB0byB1c2UgcHJldHR5IHRpZ2h0IHRpbWluZ3MgaGVyZSB0byBzYXRpc2Z5Ci0gICAgICogdGhlIE5JU1QtUENUUy4KLSAgICAgKi8KLSAgICBjaGFyX3RpbWUgPSAoaW5mby0+dGltZW91dCAtIEhaLzUwKSAvIGluZm8tPnhtaXRfZmlmb19zaXplOwotICAgIGNoYXJfdGltZSA9IGNoYXJfdGltZSAvIDU7Ci0gICAgaWYgKGNoYXJfdGltZSA8PSAwKQotCWNoYXJfdGltZSA9IDE7Ci0gICAgaWYgKHRpbWVvdXQgPCAwKQotCXRpbWVvdXQgPSAwOwotICAgIGlmICh0aW1lb3V0KQotCWNoYXJfdGltZSA9IG1pbihjaGFyX3RpbWUsIHRpbWVvdXQpOwotICAgIC8qCi0gICAgICogSWYgdGhlIHRyYW5zbWl0dGVyIGhhc24ndCBjbGVhcmVkIGluIHR3aWNlIHRoZSBhcHByb3hpbWF0ZQotICAgICAqIGFtb3VudCBvZiB0aW1lIHRvIHNlbmQgdGhlIGVudGlyZSBGSUZPLCBpdCBwcm9iYWJseSB3b24ndAotICAgICAqIGV2ZXIgY2xlYXIuICBUaGlzIGFzc3VtZXMgdGhlIFVBUlQgaXNuJ3QgZG9pbmcgZmxvdwotICAgICAqIGNvbnRyb2wsIHdoaWNoIGlzIGN1cnJlbnRseSB0aGUgY2FzZS4gIEhlbmNlLCBpZiBpdCBldmVyCi0gICAgICogdGFrZXMgbG9uZ2VyIHRoYW4gaW5mby0+dGltZW91dCwgdGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gYQotICAgICAqIFVBUlQgYnVnIG9mIHNvbWUga2luZC4gIFNvLCB3ZSBjbGFtcCB0aGUgdGltZW91dCBwYXJhbWV0ZXIgYXQKLSAgICAgKiAyKmluZm8tPnRpbWVvdXQuCi0gICAgICovCi0gICAgaWYgKCF0aW1lb3V0IHx8IHRpbWVvdXQgPiAyKmluZm8tPnRpbWVvdXQpCi0JdGltZW91dCA9IDIqaW5mby0+dGltZW91dDsKKwlvcmlnX2ppZmZpZXMgPSBqaWZmaWVzOworCS8qCisJICogU2V0IHRoZSBjaGVjayBpbnRlcnZhbCB0byBiZSAxLzUgb2YgdGhlIGVzdGltYXRlZCB0aW1lIHRvCisJICogc2VuZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGFuZCBtYWtlIGl0IGF0IGxlYXN0IDEuICBUaGUgY2hlY2sKKwkgKiBpbnRlcnZhbCBzaG91bGQgYWxzbyBiZSBsZXNzIHRoYW4gdGhlIHRpbWVvdXQuCisJICoKKwkgKiBOb3RlOiB3ZSBoYXZlIHRvIHVzZSBwcmV0dHkgdGlnaHQgdGltaW5ncyBoZXJlIHRvIHNhdGlzZnkKKwkgKiB0aGUgTklTVC1QQ1RTLgorCSAqLworCWNoYXJfdGltZSA9IChpbmZvLT50aW1lb3V0IC0gSFogLyA1MCkgLyBpbmZvLT54bWl0X2ZpZm9fc2l6ZTsKKwljaGFyX3RpbWUgPSBjaGFyX3RpbWUgLyA1OworCWlmIChjaGFyX3RpbWUgPD0gMCkKKwkJY2hhcl90aW1lID0gMTsKKwlpZiAodGltZW91dCA8IDApCisJCXRpbWVvdXQgPSAwOworCWlmICh0aW1lb3V0KQorCQljaGFyX3RpbWUgPSBtaW4oY2hhcl90aW1lLCB0aW1lb3V0KTsKKwkvKgorCSAqIElmIHRoZSB0cmFuc21pdHRlciBoYXNuJ3QgY2xlYXJlZCBpbiB0d2ljZSB0aGUgYXBwcm94aW1hdGUKKwkgKiBhbW91bnQgb2YgdGltZSB0byBzZW5kIHRoZSBlbnRpcmUgRklGTywgaXQgcHJvYmFibHkgd29uJ3QKKwkgKiBldmVyIGNsZWFyLiAgVGhpcyBhc3N1bWVzIHRoZSBVQVJUIGlzbid0IGRvaW5nIGZsb3cKKwkgKiBjb250cm9sLCB3aGljaCBpcyBjdXJyZW50bHkgdGhlIGNhc2UuICBIZW5jZSwgaWYgaXQgZXZlcgorCSAqIHRha2VzIGxvbmdlciB0aGFuIGluZm8tPnRpbWVvdXQsIHRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIGEKKwkgKiBVQVJUIGJ1ZyBvZiBzb21lIGtpbmQuICBTbywgd2UgY2xhbXAgdGhlIHRpbWVvdXQgcGFyYW1ldGVyIGF0CisJICogMippbmZvLT50aW1lb3V0LgorCSAqLworCWlmICghdGltZW91dCB8fCB0aW1lb3V0ID4gMiAqIGluZm8tPnRpbWVvdXQpCisJCXRpbWVvdXQgPSAyICogaW5mby0+dGltZW91dDsKICNpZmRlZiBDWV9ERUJVR19XQUlUX1VOVElMX1NFTlQKLSAgICBwcmludGsoIkluIGN5X3dhaXRfdW50aWxfc2VudCglZCkgY2hlY2s9JWx1Li4uIiwgdGltZW91dCwgY2hhcl90aW1lKTsKLSAgICBwcmludGsoImppZmY9JWx1Li4uIiwgamlmZmllcyk7CisJcHJpbnRrKCJJbiBjeV93YWl0X3VudGlsX3NlbnQoJWQpIGNoZWNrPSVsdS4uLiIsIHRpbWVvdXQsIGNoYXJfdGltZSk7CisJcHJpbnRrKCJqaWZmPSVsdS4uLiIsIGppZmZpZXMpOwogI2VuZGlmCi0gICAgY2FyZCA9IGluZm8tPmNhcmQ7Ci0gICAgY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOwotICAgIGlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKLQljaGlwID0gY2hhbm5lbD4+MjsKLQljaGFubmVsICY9IDB4MDM7Ci0JaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKLQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXTw8aW5kZXgpOwotCXdoaWxlIChjeV9yZWFkYihiYXNlX2FkZHIrKEN5U1JFUjw8aW5kZXgpKSAmIEN5VHhSZHkpIHsKKwljYXJkID0gaW5mby0+Y2FyZDsKKwljaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZSk7CisJaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgeworCQljaGlwID0gY2hhbm5lbCA+PiAyOworCQljaGFubmVsICY9IDB4MDM7CisJCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7CisJCWJhc2VfYWRkciA9CisJCSAgICBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CisJCXdoaWxlIChjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiBDeVR4UmR5KSB7CiAjaWZkZWYgQ1lfREVCVUdfV0FJVF9VTlRJTF9TRU5UCi0JICAgIHByaW50aygiTm90IGNsZWFuIChqaWZmPSVsdSkuLi4iLCBqaWZmaWVzKTsKKwkJCXByaW50aygiTm90IGNsZWFuIChqaWZmPSVsdSkuLi4iLCBqaWZmaWVzKTsKICNlbmRpZgotCSAgICBpZiAobXNsZWVwX2ludGVycnVwdGlibGUoamlmZmllc190b19tc2VjcyhjaGFyX3RpbWUpKSkKLQkJYnJlYWs7Ci0JICAgIGlmICh0aW1lb3V0ICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgb3JpZ19qaWZmaWVzICsgdGltZW91dCkpCi0JCWJyZWFrOworCQkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MoY2hhcl90aW1lKSkpCisJCQkJYnJlYWs7CisJCQlpZiAodGltZW91dCAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG9yaWdfamlmZmllcyArCisJCQkJCXRpbWVvdXQpKQorCQkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogTm90aGluZyB0byBkbyEgKi8KIAl9Ci0gICAgfSBlbHNlIHsKLQkvLyBOb3RoaW5nIHRvIGRvIQotICAgIH0KLSAgICAvKiBSdW4gb25lIG1vcmUgY2hhciBjeWNsZSAqLwotICAgIG1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MoY2hhcl90aW1lICogNSkpOworCS8qIFJ1biBvbmUgbW9yZSBjaGFyIGN5Y2xlICovCisJbXNsZWVwX2ludGVycnVwdGlibGUoamlmZmllc190b19tc2VjcyhjaGFyX3RpbWUgKiA1KSk7CiAjaWZkZWYgQ1lfREVCVUdfV0FJVF9VTlRJTF9TRU5UCi0gICAgcHJpbnRrKCJDbGVhbiAoamlmZj0lbHUpLi4uZG9uZVxuIiwgamlmZmllcyk7CisJcHJpbnRrKCJDbGVhbiAoamlmZj0lbHUpLi4uZG9uZVxuIiwgamlmZmllcyk7CiAjZW5kaWYKIH0KIAogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBhIHBhcnRpY3VsYXIgdHR5IGRldmljZSBpcyBjbG9zZWQuCiAgKi8KLXN0YXRpYyB2b2lkCi1jeV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyB2b2lkIGN5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewotICBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0gIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICNpZmRlZiBDWV9ERUJVR19PVEhFUgotICAgIHByaW50aygiY3ljOmN5X2Nsb3NlIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CisJcHJpbnRrKCJjeWM6Y3lfY2xvc2UgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsKICNlbmRpZgogCi0gICAgaWYgKCFpbmZvIHx8IHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9jbG9zZSIpKXsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENZX0xPQ0soaW5mbywgZmxhZ3MpOwotICAgIC8qIElmIHRoZSBUVFkgaXMgYmVpbmcgaHVuZyB1cCwgbm90aGluZyB0byBkbyAqLwotICAgIGlmICh0dHlfaHVuZ191cF9wKGZpbHApKSB7Ci0JQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0jaWZkZWYgQ1lfREVCVUdfT1BFTgotICAgIHByaW50aygiY3ljOmN5X2Nsb3NlIHR0eUMlZCwgY291bnQgPSAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOwotI2VuZGlmCi0gICAgaWYgKCh0dHktPmNvdW50ID09IDEpICYmIChpbmZvLT5jb3VudCAhPSAxKSkgewotICAgICAgICAvKgotICAgICAgICAgKiBVaCwgb2guICB0dHktPmNvdW50IGlzIDEsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHR0eQotICAgICAgICAgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBmcmVlZC4gIEluZm8tPmNvdW50IHNob3VsZCBhbHdheXMKLSAgICAgICAgICogYmUgb25lIGluIHRoZXNlIGNvbmRpdGlvbnMuICBJZiBpdCdzIGdyZWF0ZXIgdGhhbgotICAgICAgICAgKiBvbmUsIHdlJ3ZlIGdvdCByZWFsIHByb2JsZW1zLCBzaW5jZSBpdCBtZWFucyB0aGUKLSAgICAgICAgICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRvd24uCi0gICAgICAgICAqLwotICAgICAgICBwcmludGsoImN5YzpjeV9jbG9zZTogYmFkIHNlcmlhbCBwb3J0IGNvdW50OyB0dHktPmNvdW50IGlzIDEsICIKLSAgICAgICAgICAgImluZm8tPmNvdW50IGlzICVkXG4iLCBpbmZvLT5jb3VudCk7Ci0gICAgICAgIGluZm8tPmNvdW50ID0gMTsKLSAgICB9Ci0jaWZkZWYgQ1lfREVCVUdfQ09VTlQKLSAgICBwcmludGsoImN5YzpjeV9jbG9zZSBhdCAoJWQpOiBkZWNyZW1lbnRpbmcgY291bnQgdG8gJWRcbiIsCi0gICAgICAgIGN1cnJlbnQtPnBpZCwgaW5mby0+Y291bnQgLSAxKTsKLSNlbmRpZgotICAgIGlmICgtLWluZm8tPmNvdW50IDwgMCkgewotI2lmZGVmIENZX0RFQlVHX0NPVU5UCi0gICAgcHJpbnRrKCJjeWM6Y3ljX2Nsb3NlIHNldHRpbmcgY291bnQgdG8gMFxuIik7Ci0jZW5kaWYKLSAgICAgICAgaW5mby0+Y291bnQgPSAwOwotICAgIH0KLSAgICBpZiAoaW5mby0+Y291bnQpIHsKLQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGluZm8tPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7Ci0KLSAgICAvKgotICAgICogTm93IHdlIHdhaXQgZm9yIHRoZSB0cmFuc21pdCBidWZmZXIgdG8gY2xlYXI7IGFuZCB3ZSBub3RpZnkKLSAgICAqIHRoZSBsaW5lIGRpc2NpcGxpbmUgdG8gb25seSBwcm9jZXNzIFhPTi9YT0ZGIGNoYXJhY3RlcnMuCi0gICAgKi8KLSAgICB0dHktPmNsb3NpbmcgPSAxOwotICAgIENZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0gICAgaWYgKGluZm8tPmNsb3Npbmdfd2FpdCAhPSBDWV9DTE9TSU5HX1dBSVRfTk9ORSkgewotCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT5jbG9zaW5nX3dhaXQpOwotICAgIH0KLSAgICBDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQotICAgIGlmICghSVNfQ1lDX1ooY3lfY2FyZFtpbmZvLT5jYXJkXSkpIHsKLQlpbnQgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjeV9jYXJkW2luZm8tPmNhcmRdLmZpcnN0X2xpbmU7Ci0JaW50IGluZGV4ID0gY3lfY2FyZFtpbmZvLT5jYXJkXS5idXNfaW5kZXg7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHIgPSBjeV9jYXJkW2luZm8tPmNhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGFubmVsPj4yXSA8PCBpbmRleCk7Ci0JLyogU3RvcCBhY2NlcHRpbmcgaW5wdXQgKi8KLQljaGFubmVsICY9IDB4MDM7Ci0JY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lDQVI8PGluZGV4KSwgKHVfY2hhciljaGFubmVsKTsKLQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeVNSRVI8PGluZGV4KSwKLQkJCWN5X3JlYWRiKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCkpICYgfkN5UnhEYXRhKTsKLQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgewotCSAgICAvKiBXYWl0aW5nIGZvciBvbi1ib2FyZCBidWZmZXJzIHRvIGJlIGVtcHR5IGJlZm9yZSBjbG9zaW5nIAotCSAgICAgICB0aGUgcG9ydCAqLwotCSAgICBDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotCSAgICBjeV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT50aW1lb3V0KTsKLQkgICAgQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJaWYgKCFpbmZvIHx8IHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9jbG9zZSIpKSB7CisJCXJldHVybjsKIAl9Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBaX1dBS0UKLQkvKiBXYWl0aW5nIGZvciBvbi1ib2FyZCBidWZmZXJzIHRvIGJlIGVtcHR5IGJlZm9yZSBjbG9zaW5nIHRoZSBwb3J0ICovCi0Jdm9pZCBfX2lvbWVtICpiYXNlX2FkZHIgPSBjeV9jYXJkW2luZm8tPmNhcmRdLmJhc2VfYWRkcjsKLQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkID0gYmFzZV9hZGRyICsgSURfQUREUkVTUzsKLQlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmwgPSBiYXNlX2FkZHIgKyAoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKLQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7Ci0JaW50IGNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY3lfY2FyZFtpbmZvLT5jYXJkXS5maXJzdF9saW5lOwotCWludCByZXR2YWw7CiAKLQlpZiAoY3lfcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0uZmxvd19zdGF0dXMpICE9IENfRlNfVFhJRExFKSB7Ci0JICAgIHJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbaW5mby0+Y2FyZF0sIGNoYW5uZWwsIAotCQkJCSAgIENfQ01fSU9DVExXLCAwTCk7Ci0JICAgIGlmIChyZXR2YWwgIT0gMCl7Ci0JCXByaW50aygiY3ljOmN5X2Nsb3NlIHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAotCQkgICAgICAgaW5mby0+bGluZSwgcmV0dmFsKTsKLQkgICAgfQotCSAgICBDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotCSAgICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5zaHV0ZG93bl93YWl0KTsKLQkgICAgQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0JfQotI2VuZGlmCi0gICAgfQotCi0gICAgQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLSAgICBzaHV0ZG93bihpbmZvKTsKLSAgICBpZiAodHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKLSAgICAgICAgdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOwotICAgIHR0eV9sZGlzY19mbHVzaCh0dHkpOyAgICAgICAgCi0gICAgQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0KLSAgICB0dHktPmNsb3NpbmcgPSAwOwotICAgIGluZm8tPmV2ZW50ID0gMDsKLSAgICBpbmZvLT50dHkgPSBOVUxMOwotICAgIGlmIChpbmZvLT5ibG9ja2VkX29wZW4pIHsKLQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotICAgICAgICBpZiAoaW5mby0+Y2xvc2VfZGVsYXkpIHsKLSAgICAgICAgICAgIG1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MoaW5mby0+Y2xvc2VfZGVsYXkpKTsKLSAgICAgICAgfQotICAgICAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CiAJQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0gICAgfQotICAgIGluZm8tPmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRXxBU1lOQ19DTE9TSU5HKTsKLSAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmNsb3NlX3dhaXQpOworCS8qIElmIHRoZSBUVFkgaXMgYmVpbmcgaHVuZyB1cCwgbm90aGluZyB0byBkbyAqLworCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKSB7CisJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisjaWZkZWYgQ1lfREVCVUdfT1BFTgorCXByaW50aygiY3ljOmN5X2Nsb3NlIHR0eUMlZCwgY291bnQgPSAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOworI2VuZGlmCisJaWYgKCh0dHktPmNvdW50ID09IDEpICYmIChpbmZvLT5jb3VudCAhPSAxKSkgeworCQkvKgorCQkgKiBVaCwgb2guICB0dHktPmNvdW50IGlzIDEsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHR0eQorCQkgKiBzdHJ1Y3R1cmUgd2lsbCBiZSBmcmVlZC4gIEluZm8tPmNvdW50IHNob3VsZCBhbHdheXMKKwkJICogYmUgb25lIGluIHRoZXNlIGNvbmRpdGlvbnMuICBJZiBpdCdzIGdyZWF0ZXIgdGhhbgorCQkgKiBvbmUsIHdlJ3ZlIGdvdCByZWFsIHByb2JsZW1zLCBzaW5jZSBpdCBtZWFucyB0aGUKKwkJICogc2VyaWFsIHBvcnQgd29uJ3QgYmUgc2h1dGRvd24uCisJCSAqLworCQlwcmludGsoImN5YzpjeV9jbG9zZTogYmFkIHNlcmlhbCBwb3J0IGNvdW50OyB0dHktPmNvdW50IGlzIDEsICIKKwkJCSJpbmZvLT5jb3VudCBpcyAlZFxuIiwgaW5mby0+Y291bnQpOworCQlpbmZvLT5jb3VudCA9IDE7CisJfQorI2lmZGVmIENZX0RFQlVHX0NPVU5UCisJcHJpbnRrKCJjeWM6Y3lfY2xvc2UgYXQgKCVkKTogZGVjcmVtZW50aW5nIGNvdW50IHRvICVkXG4iLAorCQljdXJyZW50LT5waWQsIGluZm8tPmNvdW50IC0gMSk7CisjZW5kaWYKKwlpZiAoLS1pbmZvLT5jb3VudCA8IDApIHsKKyNpZmRlZiBDWV9ERUJVR19DT1VOVAorCQlwcmludGsoImN5YzpjeWNfY2xvc2Ugc2V0dGluZyBjb3VudCB0byAwXG4iKTsKKyNlbmRpZgorCQlpbmZvLT5jb3VudCA9IDA7CisJfQorCWlmIChpbmZvLT5jb3VudCkgeworCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CisKKwkvKgorCSAqIE5vdyB3ZSB3YWl0IGZvciB0aGUgdHJhbnNtaXQgYnVmZmVyIHRvIGNsZWFyOyBhbmQgd2Ugbm90aWZ5CisJICogdGhlIGxpbmUgZGlzY2lwbGluZSB0byBvbmx5IHByb2Nlc3MgWE9OL1hPRkYgY2hhcmFjdGVycy4KKwkgKi8KKwl0dHktPmNsb3NpbmcgPSAxOworCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJaWYgKGluZm8tPmNsb3Npbmdfd2FpdCAhPSBDWV9DTE9TSU5HX1dBSVRfTk9ORSkgeworCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgaW5mby0+Y2xvc2luZ193YWl0KTsKKwl9CisJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisKKwlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbaW5mby0+Y2FyZF0pKSB7CisJCWludCBjaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbaW5mby0+Y2FyZF0uZmlyc3RfbGluZTsKKwkJaW50IGluZGV4ID0gY3lfY2FyZFtpbmZvLT5jYXJkXS5idXNfaW5kZXg7CisJCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyID0gY3lfY2FyZFtpbmZvLT5jYXJkXS5iYXNlX2FkZHIgKworCQkJKGN5X2NoaXBfb2Zmc2V0W2NoYW5uZWwgPj4gMl0gPDwgaW5kZXgpOworCQkvKiBTdG9wIGFjY2VwdGluZyBpbnB1dCAqLworCQljaGFubmVsICY9IDB4MDM7CisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAorCQkJICBjeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiB+Q3lSeERhdGEpOworCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkgeworCQkJLyogV2FpdGluZyBmb3Igb24tYm9hcmQgYnVmZmVycyB0byBiZSBlbXB0eSBiZWZvcmUgY2xvc2luZworCQkJICAgdGhlIHBvcnQgKi8KKwkJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCQljeV93YWl0X3VudGlsX3NlbnQodHR5LCBpbmZvLT50aW1lb3V0KTsKKwkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQl9CisJfSBlbHNlIHsKKyNpZmRlZiBaX1dBS0UKKwkJLyogV2FpdGluZyBmb3Igb24tYm9hcmQgYnVmZmVycyB0byBiZSBlbXB0eSBiZWZvcmUgY2xvc2luZyB0aGUgcG9ydCAqLworCQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkciA9IGN5X2NhcmRbaW5mby0+Y2FyZF0uYmFzZV9hZGRyOworCQlzdHJ1Y3QgRklSTV9JRCBfX2lvbWVtICpmaXJtX2lkID0gYmFzZV9hZGRyICsgSURfQUREUkVTUzsKKwkJc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsID0KKwkJICAgIGJhc2VfYWRkciArIChjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOworCQlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7CisJCWludCBjaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbaW5mby0+Y2FyZF0uZmlyc3RfbGluZTsKKwkJaW50IHJldHZhbDsKKworCQlpZiAoY3lfcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0uZmxvd19zdGF0dXMpICE9IENfRlNfVFhJRExFKSB7CisJCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2luZm8tPmNhcmRdLCBjaGFubmVsLAorCQkJCQkJQ19DTV9JT0NUTFcsIDBMKTsKKwkJCWlmIChyZXR2YWwgIT0gMCkgeworCQkJCXByaW50aygiY3ljOmN5X2Nsb3NlIHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAorCQkJCQlpbmZvLT5saW5lLCByZXR2YWwpOworCQkJfQorCQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmluZm8tPnNodXRkb3duX3dhaXQpOworCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCX0KKyNlbmRpZgorCX0KKworCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJc2h1dGRvd24oaW5mbyk7CisJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCisJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsKKwlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKworCXR0eS0+Y2xvc2luZyA9IDA7CisJaW5mby0+ZXZlbnQgPSAwOworCWluZm8tPnR0eSA9IE5VTEw7CisJaWYgKGluZm8tPmJsb2NrZWRfb3BlbikgeworCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQlpZiAoaW5mby0+Y2xvc2VfZGVsYXkpIHsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MKKwkJCQkJCShpbmZvLT5jbG9zZV9kZWxheSkpOworCQl9CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJfQorCWluZm8tPmZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRSB8IEFTWU5DX0NMT1NJTkcpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+Y2xvc2Vfd2FpdCk7CiAKICNpZmRlZiBDWV9ERUJVR19PVEhFUgotICAgIHByaW50aygiIGN5YzpjeV9jbG9zZSBkb25lXG4iKTsKKwlwcmludGsoIiBjeWM6Y3lfY2xvc2UgZG9uZVxuIik7CiAjZW5kaWYKIAotICAgIENZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0gICAgcmV0dXJuOwotfSAvKiBjeV9jbG9zZSAqLwotCisJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKK30JCQkJLyogY3lfY2xvc2UgKi8KIAogLyogVGhpcyByb3V0aW5lIGdldHMgY2FsbGVkIHdoZW4gdHR5X3dyaXRlIGhhcyBwdXQgc29tZXRoaW5nIGludG8KICAqIHRoZSB3cml0ZV9xdWV1ZS4gIFRoZSBjaGFyYWN0ZXJzIG1heSBjb21lIGZyb20gdXNlciBzcGFjZSBvcgpAQCAtMjc5Niw1MCArMjg3NSw0OSBAQAogICogSWYgdGhlIHBvcnQgaXMgYWxyZWFkeSBhY3RpdmUsIHRoZXJlIGlzIG5vIG5lZWQgdG8ga2ljayBpdC4KICAqCiAgKi8KLXN0YXRpYyBpbnQKLWN5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgY3lfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKLSAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgaW50IGMsIHJldCA9IDA7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGMsIHJldCA9IDA7CiAKICNpZmRlZiBDWV9ERUJVR19JTwotICAgIHByaW50aygiY3ljOmN5X3dyaXRlIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7IC8qICovCisJcHJpbnRrKCJjeWM6Y3lfd3JpdGUgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsJLyogKi8KICNlbmRpZgogCi0gICAgaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV93cml0ZSIpKXsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoIWluZm8tPnhtaXRfYnVmKQotCXJldHVybiAwOworCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfd3JpdGUiKSkgeworCQlyZXR1cm4gMDsKKwl9CiAKLSAgICBDWV9MT0NLKGluZm8sIGZsYWdzKTsKLSAgICB3aGlsZSAoMSkgewotCWMgPSBtaW4oY291bnQsIG1pbigoaW50KShTRVJJQUxfWE1JVF9TSVpFIC0gaW5mby0+eG1pdF9jbnQgLSAxKSwKLQkJCShpbnQpKFNFUklBTF9YTUlUX1NJWkUgLSBpbmZvLT54bWl0X2hlYWQpKSk7Ci0JICAgICAgICAKLQlpZiAoYyA8PSAwKQotCSAgICBicmVhazsKKwlpZiAoIWluZm8tPnhtaXRfYnVmKQorCQlyZXR1cm4gMDsKIAotCW1lbWNweShpbmZvLT54bWl0X2J1ZiArIGluZm8tPnhtaXRfaGVhZCwgYnVmLCBjKTsKLQlpbmZvLT54bWl0X2hlYWQgPSAoaW5mby0+eG1pdF9oZWFkICsgYykgJiAoU0VSSUFMX1hNSVRfU0laRS0xKTsKLQlpbmZvLT54bWl0X2NudCArPSBjOwotCWJ1ZiArPSBjOwotCWNvdW50IC09IGM7Ci0JcmV0ICs9IGM7Ci0gICAgfQotICAgIENZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJd2hpbGUgKDEpIHsKKwkJYyA9IG1pbihjb3VudCwgbWluKChpbnQpKFNFUklBTF9YTUlUX1NJWkUgLSBpbmZvLT54bWl0X2NudCAtIDEpLAorCQkJCSAgIChpbnQpKFNFUklBTF9YTUlUX1NJWkUgLSBpbmZvLT54bWl0X2hlYWQpKSk7CiAKLSAgICBpbmZvLT5pZGxlX3N0YXRzLnhtaXRfYnl0ZXMgKz0gcmV0OwotICAgIGluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlICAgPSBqaWZmaWVzOworCQlpZiAoYyA8PSAwKQorCQkJYnJlYWs7CiAKLSAgICBpZiAoaW5mby0+eG1pdF9jbnQgJiYgIXR0eS0+c3RvcHBlZCAmJiAhdHR5LT5od19zdG9wcGVkKSB7Ci0gICAgICAgIHN0YXJ0X3htaXQoaW5mbyk7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci19IC8qIGN5X3dyaXRlICovCisJCW1lbWNweShpbmZvLT54bWl0X2J1ZiArIGluZm8tPnhtaXRfaGVhZCwgYnVmLCBjKTsKKwkJaW5mby0+eG1pdF9oZWFkID0gKGluZm8tPnhtaXRfaGVhZCArIGMpICYKKwkJCShTRVJJQUxfWE1JVF9TSVpFIC0gMSk7CisJCWluZm8tPnhtaXRfY250ICs9IGM7CisJCWJ1ZiArPSBjOworCQljb3VudCAtPSBjOworCQlyZXQgKz0gYzsKKwl9CisJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKIAorCWluZm8tPmlkbGVfc3RhdHMueG1pdF9ieXRlcyArPSByZXQ7CisJaW5mby0+aWRsZV9zdGF0cy54bWl0X2lkbGUgPSBqaWZmaWVzOworCisJaWYgKGluZm8tPnhtaXRfY250ICYmICF0dHktPnN0b3BwZWQgJiYgIXR0eS0+aHdfc3RvcHBlZCkgeworCQlzdGFydF94bWl0KGluZm8pOworCX0KKwlyZXR1cm4gcmV0OworfQkJCQkvKiBjeV93cml0ZSAqLwogCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUga2VybmVsIHRvIHdyaXRlIGEgc2luZ2xlCkBAIC0yODQ4LDYwICsyOTI2LDU2IEBACiAgKiBkb25lIHN0dWZmaW5nIGNoYXJhY3RlcnMgaW50byB0aGUgZHJpdmVyLiAgSWYgdGhlcmUgaXMgbm8gcm9vbQogICogaW4gdGhlIHF1ZXVlLCB0aGUgY2hhcmFjdGVyIGlzIGlnbm9yZWQuCiAgKi8KLXN0YXRpYyB2b2lkCi1jeV9wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQorc3RhdGljIHZvaWQgY3lfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKIHsKLSAgc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwotICB1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAjaWZkZWYgQ1lfREVCVUdfSU8KLSAgICBwcmludGsoImN5YzpjeV9wdXRfY2hhciB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOworCXByaW50aygiY3ljOmN5X3B1dF9jaGFyIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CiAjZW5kaWYKIAotICAgIGlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfcHV0X2NoYXIiKSkKLSAgICAgICAgcmV0dXJuOworCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfcHV0X2NoYXIiKSkKKwkJcmV0dXJuOwogCi0gICAgaWYgKCFpbmZvLT54bWl0X2J1ZikKLSAgICAgICAgcmV0dXJuOworCWlmICghaW5mby0+eG1pdF9idWYpCisJCXJldHVybjsKIAotICAgIENZX0xPQ0soaW5mbywgZmxhZ3MpOwotICAgICAgICBpZiAoaW5mby0+eG1pdF9jbnQgPj0gU0VSSUFMX1hNSVRfU0laRSAtIDEpIHsKLQkgICAgQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCWlmIChpbmZvLT54bWl0X2NudCA+PSAoaW50KShTRVJJQUxfWE1JVF9TSVpFIC0gMSkpIHsKKwkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KIAotICAgICAgICBpbmZvLT54bWl0X2J1ZltpbmZvLT54bWl0X2hlYWQrK10gPSBjaDsKLSAgICAgICAgaW5mby0+eG1pdF9oZWFkICY9IFNFUklBTF9YTUlUX1NJWkUgLSAxOwotICAgICAgICBpbmZvLT54bWl0X2NudCsrOworCWluZm8tPnhtaXRfYnVmW2luZm8tPnhtaXRfaGVhZCsrXSA9IGNoOworCWluZm8tPnhtaXRfaGVhZCAmPSBTRVJJQUxfWE1JVF9TSVpFIC0gMTsKKwlpbmZvLT54bWl0X2NudCsrOwogCWluZm8tPmlkbGVfc3RhdHMueG1pdF9ieXRlcysrOwogCWluZm8tPmlkbGVfc3RhdHMueG1pdF9pZGxlID0gamlmZmllczsKLSAgICBDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotfSAvKiBjeV9wdXRfY2hhciAqLwotCisJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKK30JCQkJLyogY3lfcHV0X2NoYXIgKi8KIAogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIGtlcm5lbCBhZnRlciBpdCBoYXMgd3JpdHRlbiBhCiAgKiBzZXJpZXMgb2YgY2hhcmFjdGVycyB0byB0aGUgdHR5IGRldmljZSB1c2luZyBwdXRfY2hhcigpLiAgCiAgKi8KLXN0YXRpYyB2b2lkCi1jeV9mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIHZvaWQgY3lfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLSAgc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisKICNpZmRlZiBDWV9ERUJVR19JTwotICAgIHByaW50aygiY3ljOmN5X2ZsdXNoX2NoYXJzIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7IC8qICovCisJcHJpbnRrKCJjeWM6Y3lfZmx1c2hfY2hhcnMgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsJLyogKi8KICNlbmRpZgogCi0gICAgaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9mbHVzaF9jaGFycyIpKQotICAgICAgICByZXR1cm47CisJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9mbHVzaF9jaGFycyIpKQorCQlyZXR1cm47CiAKLSAgICBpZiAoaW5mby0+eG1pdF9jbnQgPD0gMCB8fCB0dHktPnN0b3BwZWQKLSAgICB8fCB0dHktPmh3X3N0b3BwZWQgfHwgIWluZm8tPnhtaXRfYnVmKQotICAgICAgICByZXR1cm47CisJaWYgKGluZm8tPnhtaXRfY250IDw9IDAgfHwgdHR5LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCB8fAorCQkJIWluZm8tPnhtaXRfYnVmKQorCQlyZXR1cm47CiAKLSAgICBzdGFydF94bWl0KGluZm8pOwotfSAvKiBjeV9mbHVzaF9jaGFycyAqLwotCisJc3RhcnRfeG1pdChpbmZvKTsKK30JCQkJLyogY3lfZmx1c2hfY2hhcnMgKi8KIAogLyoKICAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXJzIG9mIGNoYXJhY3RlcnMgdGhlIHR0eSBkcml2ZXIKQEAgLTI5MDksNzUgKzI5ODMsNzAgQEAKICAqIHRvIGNoYW5nZSBhcyBvdXRwdXQgYnVmZmVycyBnZXQgZW1wdGllZCwgb3IgaWYgdGhlIG91dHB1dCBmbG93CiAgKiBjb250cm9sIGlzIGFjdGl2YXRlZC4KICAqLwotc3RhdGljIGludAotY3lfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIGludCBjeV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKLSAgaW50ICAgcmV0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IHJldDsKKwogI2lmZGVmIENZX0RFQlVHX0lPCi0gICAgcHJpbnRrKCJjeWM6Y3lfd3JpdGVfcm9vbSB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOyAvKiAqLworCXByaW50aygiY3ljOmN5X3dyaXRlX3Jvb20gdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsJLyogKi8KICNlbmRpZgogCi0gICAgaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV93cml0ZV9yb29tIikpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldCA9IFNFUklBTF9YTUlUX1NJWkUgLSBpbmZvLT54bWl0X2NudCAtIDE7Ci0gICAgaWYgKHJldCA8IDApCi0gICAgICAgIHJldCA9IDA7Ci0gICAgcmV0dXJuIHJldDsKLX0gLyogY3lfd3JpdGVfcm9vbSAqLworCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfd3JpdGVfcm9vbSIpKQorCQlyZXR1cm4gMDsKKwlyZXQgPSBTRVJJQUxfWE1JVF9TSVpFIC0gaW5mby0+eG1pdF9jbnQgLSAxOworCWlmIChyZXQgPCAwKQorCQlyZXQgPSAwOworCXJldHVybiByZXQ7Cit9CQkJCS8qIGN5X3dyaXRlX3Jvb20gKi8KIAotCi1zdGF0aWMgaW50Ci1jeV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3N0YXRpYyBpbnQgY3lfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKLSAgaW50IGNhcmQsIGNoYW5uZWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfY2hhcnNfaW5fYnVmZmVyIikpCi0gICAgICAgIHJldHVybiAwOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgY2FyZCwgY2hhbm5lbDsKIAotICAgIGNhcmQgPSBpbmZvLT5jYXJkOwotICAgIGNoYW5uZWwgPSAoaW5mby0+bGluZSkgLSAoY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lKTsKKwlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X2NoYXJzX2luX2J1ZmZlciIpKQorCQlyZXR1cm4gMDsKKworCWNhcmQgPSBpbmZvLT5jYXJkOworCWNoYW5uZWwgPSAoaW5mby0+bGluZSkgLSAoY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lKTsKIAogI2lmZGVmIFpfRVhUX0NIQVJTX0lOX0JVRkZFUgotICAgIGlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKLSNlbmRpZiAvKiBaX0VYVF9DSEFSU19JTl9CVUZGRVIgKi8KKwlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7CisjZW5kaWYJCQkJLyogWl9FWFRfQ0hBUlNfSU5fQlVGRkVSICovCiAjaWZkZWYgQ1lfREVCVUdfSU8KLQlwcmludGsoImN5YzpjeV9jaGFyc19pbl9idWZmZXIgdHR5QyVkICVkXG4iLAotCQlpbmZvLT5saW5lLCBpbmZvLT54bWl0X2NudCk7IC8qICovCisJCXByaW50aygiY3ljOmN5X2NoYXJzX2luX2J1ZmZlciB0dHlDJWQgJWRcbiIsIGluZm8tPmxpbmUsIGluZm8tPnhtaXRfY250KTsJLyogKi8KICNlbmRpZgotCXJldHVybiBpbmZvLT54bWl0X2NudDsKKwkJcmV0dXJuIGluZm8tPnhtaXRfY250OwogI2lmZGVmIFpfRVhUX0NIQVJTX0lOX0JVRkZFUgotICAgIH0gZWxzZSB7Ci0Jc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBGSVJNX0lEICpmaXJtX2lkOwotCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgWkZXX0NUUkwgKnpmd19jdHJsOwotCXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgQ0hfQ1RSTCAqY2hfY3RybDsKLQlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IEJVRl9DVFJMICpidWZfY3RybDsKLQlpbnQgY2hhcl9jb3VudDsKLQl2b2xhdGlsZSB1Y2xvbmcgdHhfcHV0LCB0eF9nZXQsIHR4X2J1ZnNpemU7CisJfSBlbHNlIHsKKwkJc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBGSVJNX0lEICpmaXJtX2lkOworCQlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IFpGV19DVFJMICp6ZndfY3RybDsKKwkJc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBDSF9DVFJMICpjaF9jdHJsOworCQlzdGF0aWMgdm9sYXRpbGUgc3RydWN0IEJVRl9DVFJMICpidWZfY3RybDsKKwkJaW50IGNoYXJfY291bnQ7CisJCXZvbGF0aWxlIHVjbG9uZyB0eF9wdXQsIHR4X2dldCwgdHhfYnVmc2l6ZTsKIAotCWZpcm1faWQgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0JemZ3X2N0cmwgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCWNoX2N0cmwgPSAmKHpmd19jdHJsLT5jaF9jdHJsW2NoYW5uZWxdKTsKLQlidWZfY3RybCA9ICYoemZ3X2N0cmwtPmJ1Zl9jdHJsW2NoYW5uZWxdKTsKKwkJZmlybV9pZCA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgSURfQUREUkVTUzsKKwkJemZ3X2N0cmwgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArCisJCQkoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKKwkJY2hfY3RybCA9ICYoemZ3X2N0cmwtPmNoX2N0cmxbY2hhbm5lbF0pOworCQlidWZfY3RybCA9ICYoemZ3X2N0cmwtPmJ1Zl9jdHJsW2NoYW5uZWxdKTsKIAotCXR4X2dldCA9IGN5X3JlYWRsKCZidWZfY3RybC0+dHhfZ2V0KTsKLQl0eF9wdXQgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnR4X3B1dCk7Ci0JdHhfYnVmc2l6ZSA9IGN5X3JlYWRsKCZidWZfY3RybC0+dHhfYnVmc2l6ZSk7Ci0JaWYgKHR4X3B1dCA+PSB0eF9nZXQpCi0JICAgIGNoYXJfY291bnQgPSB0eF9wdXQgLSB0eF9nZXQ7Ci0JZWxzZQotCSAgICBjaGFyX2NvdW50ID0gdHhfcHV0IC0gdHhfZ2V0ICsgdHhfYnVmc2l6ZTsKKwkJdHhfZ2V0ID0gY3lfcmVhZGwoJmJ1Zl9jdHJsLT50eF9nZXQpOworCQl0eF9wdXQgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnR4X3B1dCk7CisJCXR4X2J1ZnNpemUgPSBjeV9yZWFkbCgmYnVmX2N0cmwtPnR4X2J1ZnNpemUpOworCQlpZiAodHhfcHV0ID49IHR4X2dldCkKKwkJCWNoYXJfY291bnQgPSB0eF9wdXQgLSB0eF9nZXQ7CisJCWVsc2UKKwkJCWNoYXJfY291bnQgPSB0eF9wdXQgLSB0eF9nZXQgKyB0eF9idWZzaXplOwogI2lmZGVmIENZX0RFQlVHX0lPCi0JcHJpbnRrKCJjeWM6Y3lfY2hhcnNfaW5fYnVmZmVyIHR0eUMlZCAlZFxuIiwKLQkJaW5mby0+bGluZSwgaW5mby0+eG1pdF9jbnQgKyBjaGFyX2NvdW50KTsgLyogKi8KKwkJcHJpbnRrKCJjeWM6Y3lfY2hhcnNfaW5fYnVmZmVyIHR0eUMlZCAlZFxuIiwgaW5mby0+bGluZSwgaW5mby0+eG1pdF9jbnQgKyBjaGFyX2NvdW50KTsJLyogKi8KICNlbmRpZgotCXJldHVybiAoaW5mby0+eG1pdF9jbnQgKyBjaGFyX2NvdW50KTsKLSAgICB9Ci0jZW5kaWYgLyogWl9FWFRfQ0hBUlNfSU5fQlVGRkVSICovCi19IC8qIGN5X2NoYXJzX2luX2J1ZmZlciAqLwotCisJCXJldHVybiBpbmZvLT54bWl0X2NudCArIGNoYXJfY291bnQ7CisJfQorI2VuZGlmCQkJCS8qIFpfRVhUX0NIQVJTX0lOX0JVRkZFUiAqLworfQkJCQkvKiBjeV9jaGFyc19pbl9idWZmZXIgKi8KIAogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjk4NSwxNzggKzMwNTQsMTc5IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi1zdGF0aWMgdm9pZAotY3l5X2JhdWRfY2FsYyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgdWNsb25nIGJhdWQpCitzdGF0aWMgdm9pZCBjeXlfYmF1ZF9jYWxjKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1Y2xvbmcgYmF1ZCkKIHsKLSAgICBpbnQgY28sIGNvX3ZhbCwgYnByOwotICAgIHVjbG9uZyBjeV9jbG9jayA9ICgoaW5mby0+Y2hpcF9yZXYgPj0gQ0QxNDAwX1JFVl9KKSA/IDYwMDAwMDAwIDogMjUwMDAwMDApOworCWludCBjbywgY29fdmFsLCBicHI7CisJdWNsb25nIGN5X2Nsb2NrID0gKChpbmZvLT5jaGlwX3JldiA+PSBDRDE0MDBfUkVWX0opID8gNjAwMDAwMDAgOgorCQkJMjUwMDAwMDApOwogCi0gICAgaWYgKGJhdWQgPT0gMCkgewotCWluZm8tPnRicHIgPSBpbmZvLT50Y28gPSBpbmZvLT5yYnByID0gaW5mby0+cmNvID0gMDsKLQlyZXR1cm47Ci0gICAgfQorCWlmIChiYXVkID09IDApIHsKKwkJaW5mby0+dGJwciA9IGluZm8tPnRjbyA9IGluZm8tPnJicHIgPSBpbmZvLT5yY28gPSAwOworCQlyZXR1cm47CisJfQogCi0gICAgLyogZGV0ZXJtaW5lIHdoaWNoIHByZXNjYWxlciB0byB1c2UgKi8KLSAgICBmb3IgKGNvID0gNCwgY29fdmFsID0gMjA0ODsgY287IGNvLS0sIGNvX3ZhbCA+Pj0gMikgewotCWlmIChjeV9jbG9jayAvIGNvX3ZhbCAvIGJhdWQgPiA2MykKLQkgICAgYnJlYWs7Ci0gICAgfQorCS8qIGRldGVybWluZSB3aGljaCBwcmVzY2FsZXIgdG8gdXNlICovCisJZm9yIChjbyA9IDQsIGNvX3ZhbCA9IDIwNDg7IGNvOyBjby0tLCBjb192YWwgPj49IDIpIHsKKwkJaWYgKGN5X2Nsb2NrIC8gY29fdmFsIC8gYmF1ZCA+IDYzKQorCQkJYnJlYWs7CisJfQogCi0gICAgYnByID0gKGN5X2Nsb2NrIC8gY29fdmFsICogMiAvIGJhdWQgKyAxKSAvIDI7Ci0gICAgaWYgKGJwciA+IDI1NSkKLQlicHIgPSAyNTU7CisJYnByID0gKGN5X2Nsb2NrIC8gY29fdmFsICogMiAvIGJhdWQgKyAxKSAvIDI7CisJaWYgKGJwciA+IDI1NSkKKwkJYnByID0gMjU1OwogCi0gICAgaW5mby0+dGJwciA9IGluZm8tPnJicHIgPSBicHI7Ci0gICAgaW5mby0+dGNvID0gaW5mby0+cmNvID0gY287CisJaW5mby0+dGJwciA9IGluZm8tPnJicHIgPSBicHI7CisJaW5mby0+dGNvID0gaW5mby0+cmNvID0gY287CiB9CiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgZmluZHMgb3IgY29tcHV0ZXMgdGhlIHZhcmlvdXMgbGluZSBjaGFyYWN0ZXJpc3RpY3MuCiAgKiBJdCB1c2VkIHRvIGJlIGNhbGxlZCBjb25maWdfc2V0dXAKICAqLwotc3RhdGljIHZvaWQKLXNldF9saW5lX2NoYXIoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKiBpbmZvKQorc3RhdGljIHZvaWQgc2V0X2xpbmVfY2hhcihzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbykKIHsKLSAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0gIGludCBjYXJkLGNoaXAsY2hhbm5lbCxpbmRleDsKLSAgdW5zaWduZWQgY2ZsYWcsIGlmbGFnOwotICB1bnNpZ25lZCBzaG9ydCBjaGlwX251bWJlcjsKLSAgaW50IGJhdWQsIGJhdWRfcmF0ZSA9IDA7Ci0gIGludCAgIGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKKwlpbnQgY2FyZCwgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJdW5zaWduZWQgY2ZsYWcsIGlmbGFnOworCXVuc2lnbmVkIHNob3J0IGNoaXBfbnVtYmVyOworCWludCBiYXVkLCBiYXVkX3JhdGUgPSAwOworCWludCBpOwogCi0KLSAgICBpZiAoIWluZm8tPnR0eSB8fCAhaW5mby0+dHR5LT50ZXJtaW9zKXsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW5mby0+bGluZSA9PSAtMSl7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2ZsYWcgPSBpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0gICAgaWZsYWcgPSBpbmZvLT50dHktPnRlcm1pb3MtPmNfaWZsYWc7Ci0KLSAgICAvKgotICAgICAqIFNldCB1cCB0aGUgdHR5LT5hbHRfc3BlZWQga2x1ZGdlCi0gICAgICovCi0gICAgaWYgKGluZm8tPnR0eSkgewotCWlmICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0hJKQotCSAgICBpbmZvLT50dHktPmFsdF9zcGVlZCA9IDU3NjAwOwotCWlmICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKLQkgICAgaW5mby0+dHR5LT5hbHRfc3BlZWQgPSAxMTUyMDA7Ci0JaWYgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQotCSAgICBpbmZvLT50dHktPmFsdF9zcGVlZCA9IDIzMDQwMDsKLQlpZiAoKGluZm8tPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9XQVJQKQotCSAgICBpbmZvLT50dHktPmFsdF9zcGVlZCA9IDQ2MDgwMDsKLSAgICB9Ci0KLSAgICBjYXJkID0gaW5mby0+Y2FyZDsKLSAgICBjaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZSk7Ci0gICAgY2hpcF9udW1iZXIgPSBjaGFubmVsIC8gNDsKLQotICAgIGlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKLQotCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7Ci0KLQkvKiBiYXVkIHJhdGUgKi8KLQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+dHR5KTsKLQlpZiAoKGJhdWQgPT0gMzg0MDApICYmCi0JICAgICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpKSB7Ci0JICAgIGlmIChpbmZvLT5jdXN0b21fZGl2aXNvcikKLQkJYmF1ZF9yYXRlID0gaW5mby0+YmF1ZCAvIGluZm8tPmN1c3RvbV9kaXZpc29yOwotCSAgICBlbHNlCi0JCWJhdWRfcmF0ZSA9IGluZm8tPmJhdWQ7Ci0JfSBlbHNlIGlmIChiYXVkID4gQ0QxNDAwX01BWF9TUEVFRCkgewotCSAgICBiYXVkID0gQ0QxNDAwX01BWF9TUEVFRDsKKwlpZiAoIWluZm8tPnR0eSB8fCAhaW5mby0+dHR5LT50ZXJtaW9zKSB7CisJCXJldHVybjsKIAl9Ci0JLyogZmluZCB0aGUgYmF1ZCBpbmRleCAqLwotCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7Ci0JICAgIGlmIChiYXVkID09IGJhdWRfdGFibGVbaV0pIHsKLQkJYnJlYWs7Ci0JICAgIH0KKwlpZiAoaW5mby0+bGluZSA9PSAtMSkgeworCQlyZXR1cm47CiAJfQotCWlmIChpID09IDIwKSB7Ci0JICAgIGkgPSAxOTsgLyogQ0QxNDAwX01BWF9TUEVFRCAqLwotCX0gCisJY2ZsYWcgPSBpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJaWZsYWcgPSBpbmZvLT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CiAKLQlpZiAoKGJhdWQgPT0gMzg0MDApICYmCi0JICAgICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpKSB7Ci0JICAgIGN5eV9iYXVkX2NhbGMoaW5mbywgYmF1ZF9yYXRlKTsKLQl9IGVsc2UgewotCSAgICBpZihpbmZvLT5jaGlwX3JldiA+PSBDRDE0MDBfUkVWX0opIHsKLQkJLyogSXQgaXMgYSBDRDE0MDAgcmV2LiBKIG9yIGxhdGVyICovCi0JCWluZm8tPnRicHIgPSBiYXVkX2Jwcl82MFtpXTsgLyogVHggQlBSICovCi0JCWluZm8tPnRjbyA9IGJhdWRfY29fNjBbaV07IC8qIFR4IENPICovCi0JCWluZm8tPnJicHIgPSBiYXVkX2Jwcl82MFtpXTsgLyogUnggQlBSICovCi0JCWluZm8tPnJjbyA9IGJhdWRfY29fNjBbaV07IC8qIFJ4IENPICovCi0JICAgIH0gZWxzZSB7Ci0JCWluZm8tPnRicHIgPSBiYXVkX2Jwcl8yNVtpXTsgLyogVHggQlBSICovCi0JCWluZm8tPnRjbyA9IGJhdWRfY29fMjVbaV07IC8qIFR4IENPICovCi0JCWluZm8tPnJicHIgPSBiYXVkX2Jwcl8yNVtpXTsgLyogUnggQlBSICovCi0JCWluZm8tPnJjbyA9IGJhdWRfY29fMjVbaV07IC8qIFJ4IENPICovCi0JICAgIH0KKwkvKgorCSAqIFNldCB1cCB0aGUgdHR5LT5hbHRfc3BlZWQga2x1ZGdlCisJICovCisJaWYgKGluZm8tPnR0eSkgeworCQlpZiAoKGluZm8tPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKKwkJCWluZm8tPnR0eS0+YWx0X3NwZWVkID0gNTc2MDA7CisJCWlmICgoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKKwkJCWluZm8tPnR0eS0+YWx0X3NwZWVkID0gMTE1MjAwOworCQlpZiAoKGluZm8tPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9TSEkpCisJCQlpbmZvLT50dHktPmFsdF9zcGVlZCA9IDIzMDQwMDsKKwkJaWYgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfV0FSUCkKKwkJCWluZm8tPnR0eS0+YWx0X3NwZWVkID0gNDYwODAwOwogCX0KLQlpZiAoYmF1ZF90YWJsZVtpXSA9PSAxMzQpIHsKLQkgICAgLyogZ2V0IGl0IHJpZ2h0IGZvciAxMzQuNSBiYXVkICovCi0JICAgIGluZm8tPnRpbWVvdXQgPSAoaW5mby0+eG1pdF9maWZvX3NpemUqSFoqMzAvMjY5KSArIDI7Ci0JfSBlbHNlIGlmICgoYmF1ZCA9PSAzODQwMCkgJiYKLQkJICAgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfQ1VTVCkpIHsKLQkgICAgaW5mby0+dGltZW91dCA9IChpbmZvLT54bWl0X2ZpZm9fc2l6ZSpIWioxNS9iYXVkX3JhdGUpICsgMjsKLQl9IGVsc2UgaWYgKGJhdWRfdGFibGVbaV0pIHsKLQkgICAgaW5mby0+dGltZW91dCA9IChpbmZvLT54bWl0X2ZpZm9fc2l6ZSpIWioxNS9iYXVkX3RhYmxlW2ldKSArIDI7Ci0JICAgIC8qIHRoaXMgbmVlZHMgdG8gYmUgcHJvcGFnYXRlZCBpbnRvIHRoZSBjYXJkIGluZm8gKi8KLQl9IGVsc2UgewotCSAgICBpbmZvLT50aW1lb3V0ID0gMDsKLQl9Ci0JLyogQnkgdHJhZGl0aW9uIChpcyBpdCBhIHN0YW5kYXJkPykgYSBiYXVkIHJhdGUgb2YgemVybwotCSAgIGltcGxpZXMgdGhlIGxpbmUgc2hvdWxkIGJlL2hhcyBiZWVuIGNsb3NlZC4gIEEgYml0Ci0JICAgbGF0ZXIgaW4gdGhpcyByb3V0aW5lIHN1Y2ggYSB0ZXN0IGlzIHBlcmZvcm1lZC4gKi8KIAotCS8qIGJ5dGUgc2l6ZSBhbmQgcGFyaXR5ICovCi0JaW5mby0+Y29yNSA9IDA7Ci0JaW5mby0+Y29yNCA9IDA7Ci0JaW5mby0+Y29yMyA9IChpbmZvLT5kZWZhdWx0X3RocmVzaG9sZAotCQkgICAgICA/IGluZm8tPmRlZmF1bHRfdGhyZXNob2xkCi0JCSAgICAgIDogYmF1ZF9jb3IzW2ldKTsgLyogcmVjZWl2ZSB0aHJlc2hvbGQgKi8KLQlpbmZvLT5jb3IyID0gQ3lFVEM7Ci0Jc3dpdGNoKGNmbGFnICYgQ1NJWkUpewotCWNhc2UgQ1M1OgotCSAgICBpbmZvLT5jb3IxID0gQ3lfNV9CSVRTOwotCSAgICBicmVhazsKLQljYXNlIENTNjoKLQkgICAgaW5mby0+Y29yMSA9IEN5XzZfQklUUzsKLQkgICAgYnJlYWs7Ci0JY2FzZSBDUzc6Ci0JICAgIGluZm8tPmNvcjEgPSBDeV83X0JJVFM7Ci0JICAgIGJyZWFrOwotCWNhc2UgQ1M4OgotCSAgICBpbmZvLT5jb3IxID0gQ3lfOF9CSVRTOwotCSAgICBicmVhazsKLQl9Ci0JaWYoY2ZsYWcgJiBDU1RPUEIpewotCSAgICBpbmZvLT5jb3IxIHw9IEN5XzJfU1RPUDsKLQl9Ci0JaWYgKGNmbGFnICYgUEFSRU5CKXsKLQkgICAgaWYgKGNmbGFnICYgUEFST0REKXsKLQkJaW5mby0+Y29yMSB8PSBDeVBBUklUWV9POwotCSAgICB9ZWxzZXsKLQkJaW5mby0+Y29yMSB8PSBDeVBBUklUWV9FOwotCSAgICB9Ci0JfWVsc2V7Ci0JICAgIGluZm8tPmNvcjEgfD0gQ3lQQVJJVFlfTk9ORTsKLQl9Ci0JICAgIAotCS8qIENUUyBmbG93IGNvbnRyb2wgZmxhZyAqLwotCWlmIChjZmxhZyAmIENSVFNDVFMpewotCSAgICBpbmZvLT5mbGFncyB8PSBBU1lOQ19DVFNfRkxPVzsKLQkgICAgaW5mby0+Y29yMiB8PSBDeUN0c0FFOwotCX1lbHNlewotCSAgICBpbmZvLT5mbGFncyAmPSB+QVNZTkNfQ1RTX0ZMT1c7Ci0JICAgIGluZm8tPmNvcjIgJj0gfkN5Q3RzQUU7Ci0JfQotCWlmIChjZmxhZyAmIENMT0NBTCkKLQkgICAgaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOwotCWVsc2UKLQkgICAgaW5mby0+ZmxhZ3MgfD0gQVNZTkNfQ0hFQ0tfQ0Q7CisJY2FyZCA9IGluZm8tPmNhcmQ7CisJY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOworCWNoaXBfbnVtYmVyID0gY2hhbm5lbCAvIDQ7CisKKwlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7CisKKwkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKKworCQkvKiBiYXVkIHJhdGUgKi8KKwkJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKGluZm8tPnR0eSk7CisJCWlmIChiYXVkID09IDM4NDAwICYmIChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PQorCQkJCUFTWU5DX1NQRF9DVVNUKSB7CisJCQlpZiAoaW5mby0+Y3VzdG9tX2Rpdmlzb3IpCisJCQkJYmF1ZF9yYXRlID0gaW5mby0+YmF1ZCAvIGluZm8tPmN1c3RvbV9kaXZpc29yOworCQkJZWxzZQorCQkJCWJhdWRfcmF0ZSA9IGluZm8tPmJhdWQ7CisJCX0gZWxzZSBpZiAoYmF1ZCA+IENEMTQwMF9NQVhfU1BFRUQpIHsKKwkJCWJhdWQgPSBDRDE0MDBfTUFYX1NQRUVEOworCQl9CisJCS8qIGZpbmQgdGhlIGJhdWQgaW5kZXggKi8KKwkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJCWlmIChiYXVkID09IGJhdWRfdGFibGVbaV0pIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSAyMCkgeworCQkJaSA9IDE5OwkvKiBDRDE0MDBfTUFYX1NQRUVEICovCisJCX0KKworCQlpZiAoYmF1ZCA9PSAzODQwMCAmJiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0KKwkJCQlBU1lOQ19TUERfQ1VTVCkgeworCQkJY3l5X2JhdWRfY2FsYyhpbmZvLCBiYXVkX3JhdGUpOworCQl9IGVsc2UgeworCQkJaWYgKGluZm8tPmNoaXBfcmV2ID49IENEMTQwMF9SRVZfSikgeworCQkJCS8qIEl0IGlzIGEgQ0QxNDAwIHJldi4gSiBvciBsYXRlciAqLworCQkJCWluZm8tPnRicHIgPSBiYXVkX2Jwcl82MFtpXTsJLyogVHggQlBSICovCisJCQkJaW5mby0+dGNvID0gYmF1ZF9jb182MFtpXTsJLyogVHggQ08gKi8KKwkJCQlpbmZvLT5yYnByID0gYmF1ZF9icHJfNjBbaV07CS8qIFJ4IEJQUiAqLworCQkJCWluZm8tPnJjbyA9IGJhdWRfY29fNjBbaV07CS8qIFJ4IENPICovCisJCQl9IGVsc2UgeworCQkJCWluZm8tPnRicHIgPSBiYXVkX2Jwcl8yNVtpXTsJLyogVHggQlBSICovCisJCQkJaW5mby0+dGNvID0gYmF1ZF9jb18yNVtpXTsJLyogVHggQ08gKi8KKwkJCQlpbmZvLT5yYnByID0gYmF1ZF9icHJfMjVbaV07CS8qIFJ4IEJQUiAqLworCQkJCWluZm8tPnJjbyA9IGJhdWRfY29fMjVbaV07CS8qIFJ4IENPICovCisJCQl9CisJCX0KKwkJaWYgKGJhdWRfdGFibGVbaV0gPT0gMTM0KSB7CisJCQkvKiBnZXQgaXQgcmlnaHQgZm9yIDEzNC41IGJhdWQgKi8KKwkJCWluZm8tPnRpbWVvdXQgPSAoaW5mby0+eG1pdF9maWZvX3NpemUgKiBIWiAqIDMwIC8gMjY5KSArCisJCQkJCTI7CisJCX0gZWxzZSBpZiAoYmF1ZCA9PSAzODQwMCAmJiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0KKwkJCQlBU1lOQ19TUERfQ1VTVCkgeworCQkJaW5mby0+dGltZW91dCA9IChpbmZvLT54bWl0X2ZpZm9fc2l6ZSAqIEhaICogMTUgLworCQkJCQliYXVkX3JhdGUpICsgMjsKKwkJfSBlbHNlIGlmIChiYXVkX3RhYmxlW2ldKSB7CisJCQlpbmZvLT50aW1lb3V0ID0gKGluZm8tPnhtaXRfZmlmb19zaXplICogSFogKiAxNSAvCisJCQkJCWJhdWRfdGFibGVbaV0pICsgMjsKKwkJCS8qIHRoaXMgbmVlZHMgdG8gYmUgcHJvcGFnYXRlZCBpbnRvIHRoZSBjYXJkIGluZm8gKi8KKwkJfSBlbHNlIHsKKwkJCWluZm8tPnRpbWVvdXQgPSAwOworCQl9CisJCS8qIEJ5IHRyYWRpdGlvbiAoaXMgaXQgYSBzdGFuZGFyZD8pIGEgYmF1ZCByYXRlIG9mIHplcm8KKwkJICAgaW1wbGllcyB0aGUgbGluZSBzaG91bGQgYmUvaGFzIGJlZW4gY2xvc2VkLiAgQSBiaXQKKwkJICAgbGF0ZXIgaW4gdGhpcyByb3V0aW5lIHN1Y2ggYSB0ZXN0IGlzIHBlcmZvcm1lZC4gKi8KKworCQkvKiBieXRlIHNpemUgYW5kIHBhcml0eSAqLworCQlpbmZvLT5jb3I1ID0gMDsKKwkJaW5mby0+Y29yNCA9IDA7CisJCS8qIHJlY2VpdmUgdGhyZXNob2xkICovCisJCWluZm8tPmNvcjMgPSAoaW5mby0+ZGVmYXVsdF90aHJlc2hvbGQgPworCQkJCWluZm8tPmRlZmF1bHRfdGhyZXNob2xkIDogYmF1ZF9jb3IzW2ldKTsKKwkJaW5mby0+Y29yMiA9IEN5RVRDOworCQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJY2FzZSBDUzU6CisJCQlpbmZvLT5jb3IxID0gQ3lfNV9CSVRTOworCQkJYnJlYWs7CisJCWNhc2UgQ1M2OgorCQkJaW5mby0+Y29yMSA9IEN5XzZfQklUUzsKKwkJCWJyZWFrOworCQljYXNlIENTNzoKKwkJCWluZm8tPmNvcjEgPSBDeV83X0JJVFM7CisJCQlicmVhazsKKwkJY2FzZSBDUzg6CisJCQlpbmZvLT5jb3IxID0gQ3lfOF9CSVRTOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNmbGFnICYgQ1NUT1BCKSB7CisJCQlpbmZvLT5jb3IxIHw9IEN5XzJfU1RPUDsKKwkJfQorCQlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJCWlmIChjZmxhZyAmIFBBUk9ERCkgeworCQkJCWluZm8tPmNvcjEgfD0gQ3lQQVJJVFlfTzsKKwkJCX0gZWxzZSB7CisJCQkJaW5mby0+Y29yMSB8PSBDeVBBUklUWV9FOworCQkJfQorCQl9IGVsc2UgeworCQkJaW5mby0+Y29yMSB8PSBDeVBBUklUWV9OT05FOworCQl9CisKKwkJLyogQ1RTIGZsb3cgY29udHJvbCBmbGFnICovCisJCWlmIChjZmxhZyAmIENSVFNDVFMpIHsKKwkJCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOworCQkJaW5mby0+Y29yMiB8PSBDeUN0c0FFOworCQl9IGVsc2UgeworCQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0NUU19GTE9XOworCQkJaW5mby0+Y29yMiAmPSB+Q3lDdHNBRTsKKwkJfQorCQlpZiAoY2ZsYWcgJiBDTE9DQUwpCisJCQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfQ0hFQ0tfQ0Q7CisJCWVsc2UKKwkJCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOwogCiAJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCSAgICBUaGUgaGFyZHdhcmUgb3B0aW9uLCBDeVJ0c0FPLCBwcmVzZW50cyBSVFMgd2hlbgpAQCAtMzE2OCwzMDAgKzMyMzgsMzE5IEBACiAJICAgIGNhYmxlLiAgQ29udGFjdCBNYXJjaW8gU2FpdG8gZm9yIGRldGFpbHMuCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JY2hpcCA9IGNoYW5uZWw+PjI7Ci0JY2hhbm5lbCAmPSAweDAzOwotCWJhc2VfYWRkciA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdPDxpbmRleCk7CisJCWNoaXAgPSBjaGFubmVsID4+IDI7CisJCWNoYW5uZWwgJj0gMHgwMzsKKwkJYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKworCQkJKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNBUjw8aW5kZXgpLCAodV9jaGFyKWNoYW5uZWwpOworCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOwogCi0JICAgLyogdHggYW5kIHJ4IGJhdWQgcmF0ZSAqLworCQkvKiB0eCBhbmQgcnggYmF1ZCByYXRlICovCiAKLQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lUQ09SPDxpbmRleCksIGluZm8tPnRjbyk7Ci0JICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5VEJQUjw8aW5kZXgpLCBpbmZvLT50YnByKTsKLQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lSQ09SPDxpbmRleCksIGluZm8tPnJjbyk7Ci0JICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5UkJQUjw8aW5kZXgpLCBpbmZvLT5yYnByKTsKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVRDT1IgPDwgaW5kZXgpLCBpbmZvLT50Y28pOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VEJQUiA8PCBpbmRleCksIGluZm8tPnRicHIpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5UkNPUiA8PCBpbmRleCksIGluZm8tPnJjbyk7CisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lSQlBSIDw8IGluZGV4KSwgaW5mby0+cmJwcik7CiAKLQkgICAgLyogc2V0IGxpbmUgY2hhcmFjdGVyaXN0aWNzICBhY2NvcmRpbmcgY29uZmlndXJhdGlvbiAqLworCQkvKiBzZXQgbGluZSBjaGFyYWN0ZXJpc3RpY3MgIGFjY29yZGluZyBjb25maWd1cmF0aW9uICovCiAKLQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lTQ0hSMTw8aW5kZXgpLCAKLQkJICAgICAgU1RBUlRfQ0hBUihpbmZvLT50dHkpKTsKLQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lTQ0hSMjw8aW5kZXgpLCAKLQkJICAgICAgU1RPUF9DSEFSKGluZm8tPnR0eSkpOwotCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNPUjE8PGluZGV4KSwgaW5mby0+Y29yMSk7Ci0JICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5Q09SMjw8aW5kZXgpLCBpbmZvLT5jb3IyKTsKLQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lDT1IzPDxpbmRleCksIGluZm8tPmNvcjMpOwotCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNPUjQ8PGluZGV4KSwgaW5mby0+Y29yNCk7Ci0JICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5Q09SNTw8aW5kZXgpLCBpbmZvLT5jb3I1KTsKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNDSFIxIDw8IGluZGV4KSwKKwkJCSAgU1RBUlRfQ0hBUihpbmZvLT50dHkpKTsKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNDSFIyIDw8IGluZGV4KSwgU1RPUF9DSEFSKGluZm8tPnR0eSkpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q09SMSA8PCBpbmRleCksIGluZm8tPmNvcjEpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q09SMiA8PCBpbmRleCksIGluZm8tPmNvcjIpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q09SMyA8PCBpbmRleCksIGluZm8tPmNvcjMpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q09SNCA8PCBpbmRleCksIGluZm8tPmNvcjQpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q09SNSA8PCBpbmRleCksIGluZm8tPmNvcjUpOwogCi0JICAgIGN5eV9pc3N1ZV9jbWQoYmFzZV9hZGRyLAotCQkgICAgIEN5Q09SX0NIQU5HRXxDeUNPUjFjaHxDeUNPUjJjaHxDeUNPUjNjaCxpbmRleCk7CisJCWN5eV9pc3N1ZV9jbWQoYmFzZV9hZGRyLCBDeUNPUl9DSEFOR0UgfCBDeUNPUjFjaCB8IEN5Q09SMmNoIHwKKwkJCQlDeUNPUjNjaCwgaW5kZXgpOwogCi0JICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5Q0FSPDxpbmRleCksIAotCQkgICAgICAodV9jaGFyKWNoYW5uZWwpOyAvKiAhISEgSXMgdGhpcyBuZWVkZWQ/ICovCi0JICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5UlRQUjw8aW5kZXgpLCAoaW5mby0+ZGVmYXVsdF90aW1lb3V0Ci0JCQkJCSAgICAgICAgID8gaW5mby0+ZGVmYXVsdF90aW1lb3V0Ci0JCQkJCSAgICAgICAgIDogMHgwMikpOyAvKiAxMG1zIHJ4IHRpbWVvdXQgKi8KKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksICh1X2NoYXIpIGNoYW5uZWwpOwkvKiAhISEgSXMgdGhpcyBuZWVkZWQ/ICovCisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lSVFBSIDw8IGluZGV4KSwKKwkJCShpbmZvLT5kZWZhdWx0X3RpbWVvdXQgPyBpbmZvLT5kZWZhdWx0X3RpbWVvdXQgOiAweDAyKSk7CisJCS8qIDEwbXMgcnggdGltZW91dCAqLwogCi0JICAgIGlmIChDX0NMT0NBTChpbmZvLT50dHkpKSB7Ci0JCS8qIHdpdGhvdXQgbW9kZW0gaW50ciAqLwotCQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeVNSRVI8PGluZGV4KSwKLSAgICAgICAgICAgICAgICAgICBjeV9yZWFkYihiYXNlX2FkZHIrKEN5U1JFUjw8aW5kZXgpKSB8IEN5TWRtQ2gpOyAKLQkJCQkJLyogYWN0IG9uIDEtPjAgbW9kZW0gdHJhbnNpdGlvbnMgKi8KLSAgICAgICAgICAgICAgICBpZiAoKGNmbGFnICYgQ1JUU0NUUykgJiYgaW5mby0+cmZsb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TUNPUjE8PGluZGV4KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEN5Q1RTfHJmbG93X3RocltpXSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1DT1IxPDxpbmRleCksIEN5Q1RTKTsKLSAgICAgICAgICAgICAgICB9Ci0JCQkJCS8qIGFjdCBvbiAwLT4xIG1vZGVtIHRyYW5zaXRpb25zICovCi0JCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TUNPUjI8PGluZGV4KSwgQ3lDVFMpOwotCSAgICB9IGVsc2UgewotCQkvKiB3aXRob3V0IG1vZGVtIGludHIgKi8KLQkJY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCksCi0gICAgICAgICAgICAgICAgICAgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeVNSRVI8PGluZGV4KSkgfCBDeU1kbUNoKTsgCi0JCQkJCS8qIGFjdCBvbiAxLT4wIG1vZGVtIHRyYW5zaXRpb25zICovCi0gICAgICAgICAgICAgICAgaWYgKChjZmxhZyAmIENSVFNDVFMpICYmIGluZm8tPnJmbG93KSB7Ci0JCQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1DT1IxPDxpbmRleCksIAotICAgICAgICAJICAgICAgICAgICAgICAgICAgKEN5RFNSfEN5Q1RTfEN5Ukl8Q3lEQ0R8cmZsb3dfdGhyW2ldKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TUNPUjE8PGluZGV4KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3lEU1J8Q3lDVFN8Q3lSSXxDeURDRCk7Ci0gICAgICAgICAgICAgICAgfQotCQkJCQkvKiBhY3Qgb24gMC0+MSBtb2RlbSB0cmFuc2l0aW9ucyAqLwotCQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1DT1IyPDxpbmRleCksIAotCQkJICBDeURTUnxDeUNUU3xDeVJJfEN5RENEKTsKLQkgICAgfQotCi0JICAgIGlmKGkgPT0gMCl7IC8qIGJhdWQgcmF0ZSBpcyB6ZXJvLCB0dXJuIG9mZiBsaW5lICovCi0JICAgICAgICBpZiAoaW5mby0+cnRzZHRyX2ludikgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lNU1ZSMTw8aW5kZXgpLCB+Q3lSVFMpOworCQlpZiAoQ19DTE9DQUwoaW5mby0+dHR5KSkgeworCQkJLyogd2l0aG91dCBtb2RlbSBpbnRyICovCisJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCisJCQkJICBjeV9yZWFkYihiYXNlX2FkZHIgKworCQkJCQkgICAoQ3lTUkVSIDw8IGluZGV4KSkgfCBDeU1kbUNoKTsKKwkJCS8qIGFjdCBvbiAxLT4wIG1vZGVtIHRyYW5zaXRpb25zICovCisJCQlpZiAoKGNmbGFnICYgQ1JUU0NUUykgJiYgaW5mby0+cmZsb3cpIHsKKwkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUNPUjEgPDwgaW5kZXgpLAorCQkJCQkgIChDeUNUUyB8IHJmbG93X3RocltpXSkpOworCQkJfSBlbHNlIHsKKwkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUNPUjEgPDwgaW5kZXgpLAorCQkJCQkgIEN5Q1RTKTsKKwkJCX0KKwkJCS8qIGFjdCBvbiAwLT4xIG1vZGVtIHRyYW5zaXRpb25zICovCisJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUNPUjIgPDwgaW5kZXgpLCBDeUNUUyk7CiAJCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1TVlIyPDxpbmRleCksIH5DeURUUik7CisJCQkvKiB3aXRob3V0IG1vZGVtIGludHIgKi8KKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQkgIGN5X3JlYWRiKGJhc2VfYWRkciArCisJCQkJCSAgIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5TWRtQ2gpOworCQkJLyogYWN0IG9uIDEtPjAgbW9kZW0gdHJhbnNpdGlvbnMgKi8KKwkJCWlmICgoY2ZsYWcgJiBDUlRTQ1RTKSAmJiBpbmZvLT5yZmxvdykgeworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNQ09SMSA8PCBpbmRleCksCisJCQkJCSAgKEN5RFNSIHwgQ3lDVFMgfCBDeVJJIHwgQ3lEQ0QgfAorCQkJCQkgICByZmxvd190aHJbaV0pKTsKKwkJCX0gZWxzZSB7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1DT1IxIDw8IGluZGV4KSwKKwkJCQkJICBDeURTUiB8IEN5Q1RTIHwgQ3lSSSB8IEN5RENEKTsKKwkJCX0KKwkJCS8qIGFjdCBvbiAwLT4xIG1vZGVtIHRyYW5zaXRpb25zICovCisJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUNPUjIgPDwgaW5kZXgpLAorCQkJCSAgQ3lEU1IgfCBDeUNUUyB8IEN5UkkgfCBDeURDRCk7CiAJCX0KKworCQlpZiAoaSA9PSAwKSB7CS8qIGJhdWQgcmF0ZSBpcyB6ZXJvLCB0dXJuIG9mZiBsaW5lICovCisJCQlpZiAoaW5mby0+cnRzZHRyX2ludikgeworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCisJCQkJCSAgfkN5UlRTKTsKKwkJCX0gZWxzZSB7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKKwkJCQkJICB+Q3lEVFIpOworCQkJfQogI2lmZGVmIENZX0RFQlVHX0RUUgotCQlwcmludGsoImN5YzpzZXRfbGluZV9jaGFyIGRyb3BwaW5nIERUUlxuIik7Ci0JCXByaW50aygiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsIAotCQkgICAgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeU1TVlIxPDxpbmRleCkpLAotCQkgICAgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeU1TVlIyPDxpbmRleCkpKTsKKwkJCXByaW50aygiY3ljOnNldF9saW5lX2NoYXIgZHJvcHBpbmcgRFRSXG4iKTsKKwkJCXByaW50aygiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCisJCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKSwKKwkJCQljeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpKTsKICNlbmRpZgotCSAgICB9ZWxzZXsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby0+cnRzZHRyX2ludikgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lNU1ZSMTw8aW5kZXgpLCBDeVJUUyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TVNWUjI8PGluZGV4KSwgQ3lEVFIpOwotICAgICAgICAgICAgICAgIH0KKwkJfSBlbHNlIHsKKwkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwKKwkJCQkJICBDeVJUUyk7CisJCQl9IGVsc2UgeworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksCisJCQkJCSAgQ3lEVFIpOworCQkJfQogI2lmZGVmIENZX0RFQlVHX0RUUgotCQlwcmludGsoImN5YzpzZXRfbGluZV9jaGFyIHJhaXNpbmcgRFRSXG4iKTsKLQkJcHJpbnRrKCIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKLQkJICAgIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lNU1ZSMTw8aW5kZXgpKSwKLQkJICAgIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lNU1ZSMjw8aW5kZXgpKSk7CisJCQlwcmludGsoImN5YzpzZXRfbGluZV9jaGFyIHJhaXNpbmcgRFRSXG4iKTsKKwkJCXByaW50aygiICAgICBzdGF0dXM6IDB4JXgsIDB4JXhcbiIsCisJCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKSwKKwkJCQljeV9yZWFkYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCkpKTsKICNlbmRpZgotCSAgICB9CisJCX0KIAotCSAgICBpZiAoaW5mby0+dHR5KXsKLQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOwotCSAgICB9Ci0JQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJaWYgKGluZm8tPnR0eSkgeworCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCQl9CisJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CiAKLSAgICB9IGVsc2UgewotICAgICAgc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKLSAgICAgIHN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLSAgICAgIHN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7Ci0gICAgICBzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOwotICAgICAgc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKmJ1Zl9jdHJsOwotICAgICAgdWNsb25nIHN3X2Zsb3c7Ci0gICAgICBpbnQgcmV0dmFsOwotCi0gICAgICAgIGZpcm1faWQgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0gICAgICAgIGlmICghSVNaTE9BREVEKGN5X2NhcmRbY2FyZF0pKSB7Ci0JICAgIHJldHVybjsKLQl9Ci0KLQl6ZndfY3RybCA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X3JlYWRsKCZmaXJtX2lkLT56ZndjdHJsX2FkZHIpICYgMHhmZmZmZik7Ci0JYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKLQljaF9jdHJsID0gJih6ZndfY3RybC0+Y2hfY3RybFtjaGFubmVsXSk7Ci0JYnVmX2N0cmwgPSAmemZ3X2N0cmwtPmJ1Zl9jdHJsW2NoYW5uZWxdOwotCi0JLyogYmF1ZCByYXRlICovCi0JYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKGluZm8tPnR0eSk7Ci0JaWYgKChiYXVkID09IDM4NDAwKSAmJgotCSAgICAoKGluZm8tPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9DVVNUKSkgewotCSAgICBpZiAoaW5mby0+Y3VzdG9tX2Rpdmlzb3IpCi0JCWJhdWRfcmF0ZSA9IGluZm8tPmJhdWQgLyBpbmZvLT5jdXN0b21fZGl2aXNvcjsKLQkgICAgZWxzZQotCQliYXVkX3JhdGUgPSBpbmZvLT5iYXVkOwotCX0gZWxzZSBpZiAoYmF1ZCA+IENZWl9NQVhfU1BFRUQpIHsKLQkgICAgYmF1ZCA9IENZWl9NQVhfU1BFRUQ7Ci0JfQotCWN5X3dyaXRlbCgmY2hfY3RybC0+Y29tbV9iYXVkICwgYmF1ZCk7Ci0KLQlpZiAoYmF1ZCA9PSAxMzQpIHsKLQkgICAgLyogZ2V0IGl0IHJpZ2h0IGZvciAxMzQuNSBiYXVkICovCi0JICAgIGluZm8tPnRpbWVvdXQgPSAoaW5mby0+eG1pdF9maWZvX3NpemUqSFoqMzAvMjY5KSArIDI7Ci0JfSBlbHNlIGlmICgoYmF1ZCA9PSAzODQwMCkgJiYKLQkJICAgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfQ1VTVCkpIHsKLQkgICAgaW5mby0+dGltZW91dCA9IChpbmZvLT54bWl0X2ZpZm9fc2l6ZSpIWioxNS9iYXVkX3JhdGUpICsgMjsKLQl9IGVsc2UgaWYgKGJhdWQpIHsKLQkgICAgaW5mby0+dGltZW91dCA9IChpbmZvLT54bWl0X2ZpZm9fc2l6ZSpIWioxNS9iYXVkKSArIDI7Ci0JICAgIC8qIHRoaXMgbmVlZHMgdG8gYmUgcHJvcGFnYXRlZCBpbnRvIHRoZSBjYXJkIGluZm8gKi8KIAl9IGVsc2UgewotCSAgICBpbmZvLT50aW1lb3V0ID0gMDsKLQl9CisJCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7CisJCXN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKKwkJc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKKwkJc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybDsKKwkJc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKmJ1Zl9jdHJsOworCQl1Y2xvbmcgc3dfZmxvdzsKKwkJaW50IHJldHZhbDsKIAotCS8qIGJ5dGUgc2l6ZSBhbmQgcGFyaXR5ICovCi0Jc3dpdGNoKGNmbGFnICYgQ1NJWkUpewotCWNhc2UgQ1M1OiBjeV93cml0ZWwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sICwgQ19ETF9DUzUpOyBicmVhazsKLQljYXNlIENTNjogY3lfd3JpdGVsKCZjaF9jdHJsLT5jb21tX2RhdGFfbCAsIENfRExfQ1M2KTsgYnJlYWs7Ci0JY2FzZSBDUzc6IGN5X3dyaXRlbCgmY2hfY3RybC0+Y29tbV9kYXRhX2wgLCBDX0RMX0NTNyk7IGJyZWFrOwotCWNhc2UgQ1M4OiBjeV93cml0ZWwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sICwgQ19ETF9DUzgpOyBicmVhazsKLQl9Ci0JaWYoY2ZsYWcgJiBDU1RPUEIpewotCSAgICBjeV93cml0ZWwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sLAotICAgICAgICAgICAgICAgY3lfcmVhZGwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sKSB8IENfRExfMlNUT1ApOwotCX1lbHNlewotCSAgICBjeV93cml0ZWwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sLAotICAgICAgICAgICAgICAgY3lfcmVhZGwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sKSB8IENfRExfMVNUT1ApOwotCX0KLQlpZiAoY2ZsYWcgJiBQQVJFTkIpewotCSAgICBpZiAoY2ZsYWcgJiBQQVJPREQpewotCQljeV93cml0ZWwoJmNoX2N0cmwtPmNvbW1fcGFyaXR5ICwgQ19QUl9PREQpOwotCSAgICB9ZWxzZXsKLQkJY3lfd3JpdGVsKCZjaF9jdHJsLT5jb21tX3Bhcml0eSAsIENfUFJfRVZFTik7Ci0JICAgIH0KLQl9ZWxzZXsKLQkgICAgY3lfd3JpdGVsKCZjaF9jdHJsLT5jb21tX3Bhcml0eSAsIENfUFJfTk9ORSk7Ci0JfQorCQlmaXJtX2lkID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOworCQlpZiAoIUlTWkxPQURFRChjeV9jYXJkW2NhcmRdKSkgeworCQkJcmV0dXJuOworCQl9CiAKLQkvKiBDVFMgZmxvdyBjb250cm9sIGZsYWcgKi8KLQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKXsKLQkgICAgY3lfd3JpdGVsKCZjaF9jdHJsLT5od19mbG93LAotICAgICAgICAgICAgICAgY3lfcmVhZGwoJmNoX2N0cmwtPmh3X2Zsb3cpIHwgQ19SU19DVFMgfCBDX1JTX1JUUyk7Ci0JfWVsc2V7Ci0JICAgIGN5X3dyaXRlbCgmY2hfY3RybC0+aHdfZmxvdywKLSAgICAgICAgICAgICAgIGN5X3JlYWRsKCZjaF9jdHJsLT5od19mbG93KSAmIH4oQ19SU19DVFMgfCBDX1JTX1JUUykpOwotCX0KLQkvKiBBcyB0aGUgSFcgZmxvdyBjb250cm9sIGlzIGRvbmUgaW4gZmlybXdhcmUsIHRoZSBkcml2ZXIgZG9lc24ndAotCSAgIG5lZWQgdG8gY2FyZSBhYm91dCBpdCAqLwotCWluZm8tPmZsYWdzICY9IH5BU1lOQ19DVFNfRkxPVzsKKwkJemZ3X2N0cmwgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArCisJCQkoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKKwkJYm9hcmRfY3RybCA9ICZ6ZndfY3RybC0+Ym9hcmRfY3RybDsKKwkJY2hfY3RybCA9ICYoemZ3X2N0cmwtPmNoX2N0cmxbY2hhbm5lbF0pOworCQlidWZfY3RybCA9ICZ6ZndfY3RybC0+YnVmX2N0cmxbY2hhbm5lbF07CiAKLQkvKiBYT04vWE9GRi9YQU5ZIGZsb3cgY29udHJvbCBmbGFncyAqLwotCXN3X2Zsb3cgPSAwOwotCWlmIChpZmxhZyAmIElYT04pewotCSAgICBzd19mbG93IHw9IENfRkxfT1hYOwotCSAgICBpZiAoaWZsYWcgJiBJWEFOWSkKLQkJc3dfZmxvdyB8PSBDX0ZMX09JWEFOWTsKLQl9Ci0JY3lfd3JpdGVsKCZjaF9jdHJsLT5zd19mbG93LCBzd19mbG93KTsKKwkJLyogYmF1ZCByYXRlICovCisJCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShpbmZvLT50dHkpOworCQlpZiAoYmF1ZCA9PSAzODQwMCAmJiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0KKwkJCQlBU1lOQ19TUERfQ1VTVCkgeworCQkJaWYgKGluZm8tPmN1c3RvbV9kaXZpc29yKQorCQkJCWJhdWRfcmF0ZSA9IGluZm8tPmJhdWQgLyBpbmZvLT5jdXN0b21fZGl2aXNvcjsKKwkJCWVsc2UKKwkJCQliYXVkX3JhdGUgPSBpbmZvLT5iYXVkOworCQl9IGVsc2UgaWYgKGJhdWQgPiBDWVpfTUFYX1NQRUVEKSB7CisJCQliYXVkID0gQ1laX01BWF9TUEVFRDsKKwkJfQorCQljeV93cml0ZWwoJmNoX2N0cmwtPmNvbW1fYmF1ZCwgYmF1ZCk7CiAKLQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX0lPQ1RMLCAwTCk7Ci0JaWYgKHJldHZhbCAhPSAwKXsKLQkgICAgcHJpbnRrKCJjeWM6c2V0X2xpbmVfY2hhciByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKLQkJICAgaW5mby0+bGluZSwgcmV0dmFsKTsKLQl9CisJCWlmIChiYXVkID09IDEzNCkgeworCQkJLyogZ2V0IGl0IHJpZ2h0IGZvciAxMzQuNSBiYXVkICovCisJCQlpbmZvLT50aW1lb3V0ID0gKGluZm8tPnhtaXRfZmlmb19zaXplICogSFogKiAzMCAvIDI2OSkgKworCQkJCQkyOworCQl9IGVsc2UgaWYgKGJhdWQgPT0gMzg0MDAgJiYgKGluZm8tPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09CisJCQkJQVNZTkNfU1BEX0NVU1QpIHsKKwkJCWluZm8tPnRpbWVvdXQgPSAoaW5mby0+eG1pdF9maWZvX3NpemUgKiBIWiAqIDE1IC8KKwkJCQkJYmF1ZF9yYXRlKSArIDI7CisJCX0gZWxzZSBpZiAoYmF1ZCkgeworCQkJaW5mby0+dGltZW91dCA9IChpbmZvLT54bWl0X2ZpZm9fc2l6ZSAqIEhaICogMTUgLworCQkJCQliYXVkKSArIDI7CisJCQkvKiB0aGlzIG5lZWRzIHRvIGJlIHByb3BhZ2F0ZWQgaW50byB0aGUgY2FyZCBpbmZvICovCisJCX0gZWxzZSB7CisJCQlpbmZvLT50aW1lb3V0ID0gMDsKKwkJfQogCi0JLyogQ0Qgc2Vuc2l0aXZpdHkgKi8KLQlpZiAoY2ZsYWcgJiBDTE9DQUwpewotCSAgICBpbmZvLT5mbGFncyAmPSB+QVNZTkNfQ0hFQ0tfQ0Q7Ci0JfWVsc2V7Ci0JICAgIGluZm8tPmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOwotCX0KKwkJLyogYnl0ZSBzaXplIGFuZCBwYXJpdHkgKi8KKwkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJCWNhc2UgQ1M1OgorCQkJY3lfd3JpdGVsKCZjaF9jdHJsLT5jb21tX2RhdGFfbCwgQ19ETF9DUzUpOworCQkJYnJlYWs7CisJCWNhc2UgQ1M2OgorCQkJY3lfd3JpdGVsKCZjaF9jdHJsLT5jb21tX2RhdGFfbCwgQ19ETF9DUzYpOworCQkJYnJlYWs7CisJCWNhc2UgQ1M3OgorCQkJY3lfd3JpdGVsKCZjaF9jdHJsLT5jb21tX2RhdGFfbCwgQ19ETF9DUzcpOworCQkJYnJlYWs7CisJCWNhc2UgQ1M4OgorCQkJY3lfd3JpdGVsKCZjaF9jdHJsLT5jb21tX2RhdGFfbCwgQ19ETF9DUzgpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNmbGFnICYgQ1NUT1BCKSB7CisJCQljeV93cml0ZWwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sLAorCQkJCSAgY3lfcmVhZGwoJmNoX2N0cmwtPmNvbW1fZGF0YV9sKSB8IENfRExfMlNUT1ApOworCQl9IGVsc2UgeworCQkJY3lfd3JpdGVsKCZjaF9jdHJsLT5jb21tX2RhdGFfbCwKKwkJCQkgIGN5X3JlYWRsKCZjaF9jdHJsLT5jb21tX2RhdGFfbCkgfCBDX0RMXzFTVE9QKTsKKwkJfQorCQlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJCWlmIChjZmxhZyAmIFBBUk9ERCkgeworCQkJCWN5X3dyaXRlbCgmY2hfY3RybC0+Y29tbV9wYXJpdHksIENfUFJfT0REKTsKKwkJCX0gZWxzZSB7CisJCQkJY3lfd3JpdGVsKCZjaF9jdHJsLT5jb21tX3Bhcml0eSwgQ19QUl9FVkVOKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWN5X3dyaXRlbCgmY2hfY3RybC0+Y29tbV9wYXJpdHksIENfUFJfTk9ORSk7CisJCX0KIAotCWlmKGJhdWQgPT0gMCl7IC8qIGJhdWQgcmF0ZSBpcyB6ZXJvLCB0dXJuIG9mZiBsaW5lICovCi0JICAgIGN5X3dyaXRlbCgmY2hfY3RybC0+cnNfY29udHJvbCwKLSAgICAgICAgICAgICAgIGN5X3JlYWRsKCZjaF9jdHJsLT5yc19jb250cm9sKSAmIH5DX1JTX0RUUik7CisJCS8qIENUUyBmbG93IGNvbnRyb2wgZmxhZyAqLworCQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCQljeV93cml0ZWwoJmNoX2N0cmwtPmh3X2Zsb3csCisJCQkJICBjeV9yZWFkbCgmY2hfY3RybC0+CisJCQkJCSAgIGh3X2Zsb3cpIHwgQ19SU19DVFMgfCBDX1JTX1JUUyk7CisJCX0gZWxzZSB7CisJCQljeV93cml0ZWwoJmNoX2N0cmwtPmh3X2Zsb3csCisJCQkJICBjeV9yZWFkbCgmY2hfY3RybC0+CisJCQkJCSAgIGh3X2Zsb3cpICYgfihDX1JTX0NUUyB8IENfUlNfUlRTKSk7CisJCX0KKwkJLyogQXMgdGhlIEhXIGZsb3cgY29udHJvbCBpcyBkb25lIGluIGZpcm13YXJlLCB0aGUgZHJpdmVyCisJCSAgIGRvZXNuJ3QgbmVlZCB0byBjYXJlIGFib3V0IGl0ICovCisJCWluZm8tPmZsYWdzICY9IH5BU1lOQ19DVFNfRkxPVzsKKworCQkvKiBYT04vWE9GRi9YQU5ZIGZsb3cgY29udHJvbCBmbGFncyAqLworCQlzd19mbG93ID0gMDsKKwkJaWYgKGlmbGFnICYgSVhPTikgeworCQkJc3dfZmxvdyB8PSBDX0ZMX09YWDsKKwkJCWlmIChpZmxhZyAmIElYQU5ZKQorCQkJCXN3X2Zsb3cgfD0gQ19GTF9PSVhBTlk7CisJCX0KKwkJY3lfd3JpdGVsKCZjaF9jdHJsLT5zd19mbG93LCBzd19mbG93KTsKKworCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX0lPQ1RMLCAwTCk7CisJCWlmIChyZXR2YWwgIT0gMCkgeworCQkJcHJpbnRrKCJjeWM6c2V0X2xpbmVfY2hhciByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKKwkJCQlpbmZvLT5saW5lLCByZXR2YWwpOworCQl9CisKKwkJLyogQ0Qgc2Vuc2l0aXZpdHkgKi8KKwkJaWYgKGNmbGFnICYgQ0xPQ0FMKSB7CisJCQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfQ0hFQ0tfQ0Q7CisJCX0gZWxzZSB7CisJCQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DSEVDS19DRDsKKwkJfQorCisJCWlmIChiYXVkID09IDApIHsJLyogYmF1ZCByYXRlIGlzIHplcm8sIHR1cm4gb2ZmIGxpbmUgKi8KKwkJCWN5X3dyaXRlbCgmY2hfY3RybC0+cnNfY29udHJvbCwKKwkJCQkgIGN5X3JlYWRsKCZjaF9jdHJsLT5yc19jb250cm9sKSAmIH5DX1JTX0RUUik7CiAjaWZkZWYgQ1lfREVCVUdfRFRSCi0JICAgIHByaW50aygiY3ljOnNldF9saW5lX2NoYXIgZHJvcHBpbmcgWiBEVFJcbiIpOworCQkJcHJpbnRrKCJjeWM6c2V0X2xpbmVfY2hhciBkcm9wcGluZyBaIERUUlxuIik7CiAjZW5kaWYKLQl9ZWxzZXsKLQkgICAgY3lfd3JpdGVsKCZjaF9jdHJsLT5yc19jb250cm9sLAotICAgICAgICAgICAgICAgY3lfcmVhZGwoJmNoX2N0cmwtPnJzX2NvbnRyb2wpIHwgQ19SU19EVFIpOworCQl9IGVsc2UgeworCQkJY3lfd3JpdGVsKCZjaF9jdHJsLT5yc19jb250cm9sLAorCQkJCSAgY3lfcmVhZGwoJmNoX2N0cmwtPnJzX2NvbnRyb2wpIHwgQ19SU19EVFIpOwogI2lmZGVmIENZX0RFQlVHX0RUUgotCSAgICBwcmludGsoImN5YzpzZXRfbGluZV9jaGFyIHJhaXNpbmcgWiBEVFJcbiIpOworCQkJcHJpbnRrKCJjeWM6c2V0X2xpbmVfY2hhciByYWlzaW5nIFogRFRSXG4iKTsKICNlbmRpZgotCX0KKwkJfQogCi0JcmV0dmFsID0gY3l6X2lzc3VlX2NtZCggJmN5X2NhcmRbY2FyZF0sIGNoYW5uZWwsIENfQ01fSU9DVExNLCAwTCk7Ci0JaWYgKHJldHZhbCAhPSAwKXsKLQkgICAgcHJpbnRrKCJjeWM6c2V0X2xpbmVfY2hhcigyKSByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKLQkJICAgaW5mby0+bGluZSwgcmV0dmFsKTsKLQl9CisJCXJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbY2FyZF0sIGNoYW5uZWwsIENfQ01fSU9DVExNLDBMKTsKKwkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQlwcmludGsoImN5YzpzZXRfbGluZV9jaGFyKDIpIHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAorCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7CisJCX0KIAotCWlmIChpbmZvLT50dHkpewotCSAgICBjbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CisJCWlmIChpbmZvLT50dHkpIHsKKwkJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKKwkJfQogCX0KLSAgICB9Ci19IC8qIHNldF9saW5lX2NoYXIgKi8KLQorfQkJCQkvKiBzZXRfbGluZV9jaGFyICovCiAKIHN0YXRpYyBpbnQKLWdldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqIGluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKiByZXRpbmZvKQorZ2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAorCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKiByZXRpbmZvKQogewotICBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCB0bXA7Ci0gIHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9ICZjeV9jYXJkW2luZm8tPmNhcmRdOworCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKKwlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSAmY3lfY2FyZFtpbmZvLT5jYXJkXTsKIAotICAgIGlmICghcmV0aW5mbykKLSAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIG1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7Ci0gICAgdG1wLnR5cGUgPSBpbmZvLT50eXBlOwotICAgIHRtcC5saW5lID0gaW5mby0+bGluZTsKLSAgICB0bXAucG9ydCA9IGluZm8tPmNhcmQgKiAweDEwMCArIGluZm8tPmxpbmUgLSBjaW5mby0+Zmlyc3RfbGluZTsKLSAgICB0bXAuaXJxID0gY2luZm8tPmlycTsKLSAgICB0bXAuZmxhZ3MgPSBpbmZvLT5mbGFnczsKLSAgICB0bXAuY2xvc2VfZGVsYXkgPSBpbmZvLT5jbG9zZV9kZWxheTsKLSAgICB0bXAuYmF1ZF9iYXNlID0gaW5mby0+YmF1ZDsKLSAgICB0bXAuY3VzdG9tX2Rpdmlzb3IgPSBpbmZvLT5jdXN0b21fZGl2aXNvcjsKLSAgICB0bXAuaHViNiA9IDA7ICAgICAgICAgICAgICAgLyohISEqLwotICAgIHJldHVybiBjb3B5X3RvX3VzZXIocmV0aW5mbywmdG1wLHNpemVvZigqcmV0aW5mbykpPy1FRkFVTFQ6MDsKLX0gLyogZ2V0X3NlcmlhbF9pbmZvICovCi0KKwlpZiAoIXJldGluZm8pCisJCXJldHVybiAtRUZBVUxUOworCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7CisJdG1wLnR5cGUgPSBpbmZvLT50eXBlOworCXRtcC5saW5lID0gaW5mby0+bGluZTsKKwl0bXAucG9ydCA9IGluZm8tPmNhcmQgKiAweDEwMCArIGluZm8tPmxpbmUgLSBjaW5mby0+Zmlyc3RfbGluZTsKKwl0bXAuaXJxID0gY2luZm8tPmlycTsKKwl0bXAuZmxhZ3MgPSBpbmZvLT5mbGFnczsKKwl0bXAuY2xvc2VfZGVsYXkgPSBpbmZvLT5jbG9zZV9kZWxheTsKKwl0bXAuYmF1ZF9iYXNlID0gaW5mby0+YmF1ZDsKKwl0bXAuY3VzdG9tX2Rpdmlzb3IgPSBpbmZvLT5jdXN0b21fZGl2aXNvcjsKKwl0bXAuaHViNiA9IDA7CQkvKiEhISAqLworCXJldHVybiBjb3B5X3RvX3VzZXIocmV0aW5mbywgJnRtcCwgc2l6ZW9mKCpyZXRpbmZvKSkgPyAtRUZBVUxUIDogMDsKK30JCQkJLyogZ2V0X3NlcmlhbF9pbmZvICovCiAKIHN0YXRpYyBpbnQKLXNldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqIGluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKiBuZXdfaW5mbykKK3NldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKKwkJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICogbmV3X2luZm8pCiB7Ci0gIHN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0IG9sZF9pbmZvOworCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgb2xkX2luZm87CiAKLSAgICBpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXJpYWwsbmV3X2luZm8sc2l6ZW9mKG5ld19zZXJpYWwpKSkKLQlyZXR1cm4gLUVGQVVMVDsKLSAgICBvbGRfaW5mbyA9ICppbmZvOworCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3X3NlcmlhbCwgbmV3X2luZm8sIHNpemVvZihuZXdfc2VyaWFsKSkpCisJCXJldHVybiAtRUZBVUxUOworCW9sZF9pbmZvID0gKmluZm87CiAKLSAgICBpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLSAgICAgICAgICAgIGlmICgobmV3X3NlcmlhbC5jbG9zZV9kZWxheSAhPSBpbmZvLT5jbG9zZV9kZWxheSkgfHwKLQkJKG5ld19zZXJpYWwuYmF1ZF9iYXNlICE9IGluZm8tPmJhdWQpIHx8Ci0JCSgobmV3X3NlcmlhbC5mbGFncyAmIEFTWU5DX0ZMQUdTICYgfkFTWU5DX1VTUl9NQVNLKSAhPQotCQkgKGluZm8tPmZsYWdzICYgQVNZTkNfRkxBR1MgJiB+QVNZTkNfVVNSX01BU0spKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUEVSTTsKLSAgICAgICAgICAgIGluZm8tPmZsYWdzID0gKChpbmZvLT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19VU1JfTUFTSykpOwotICAgICAgICAgICAgaW5mby0+YmF1ZCA9IG5ld19zZXJpYWwuYmF1ZF9iYXNlOwotCSAgICBpbmZvLT5jdXN0b21fZGl2aXNvciA9IG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3I7Ci0gICAgICAgICAgICBnb3RvIGNoZWNrX2FuZF9leGl0OwotICAgIH0KKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKKwkJaWYgKG5ld19zZXJpYWwuY2xvc2VfZGVsYXkgIT0gaW5mby0+Y2xvc2VfZGVsYXkgfHwKKwkJCQluZXdfc2VyaWFsLmJhdWRfYmFzZSAhPSBpbmZvLT5iYXVkIHx8CisJCQkJKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19GTEFHUyAmCisJCQkJCX5BU1lOQ19VU1JfTUFTSykgIT0KKwkJCQkoaW5mby0+ZmxhZ3MgJiBBU1lOQ19GTEFHUyAmIH5BU1lOQ19VU1JfTUFTSykpCisJCQlyZXR1cm4gLUVQRVJNOworCQlpbmZvLT5mbGFncyA9IChpbmZvLT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgfAorCQkJCShuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfVVNSX01BU0spOworCQlpbmZvLT5iYXVkID0gbmV3X3NlcmlhbC5iYXVkX2Jhc2U7CisJCWluZm8tPmN1c3RvbV9kaXZpc29yID0gbmV3X3NlcmlhbC5jdXN0b21fZGl2aXNvcjsKKwkJZ290byBjaGVja19hbmRfZXhpdDsKKwl9CiAKKwkvKgorCSAqIE9LLCBwYXN0IHRoaXMgcG9pbnQsIGFsbCB0aGUgZXJyb3IgY2hlY2tpbmcgaGFzIGJlZW4gZG9uZS4KKwkgKiBBdCB0aGlzIHBvaW50LCB3ZSBzdGFydCBtYWtpbmcgY2hhbmdlcy4uLi4uCisJICovCiAKLSAgICAvKgotICAgICAqIE9LLCBwYXN0IHRoaXMgcG9pbnQsIGFsbCB0aGUgZXJyb3IgY2hlY2tpbmcgaGFzIGJlZW4gZG9uZS4KLSAgICAgKiBBdCB0aGlzIHBvaW50LCB3ZSBzdGFydCBtYWtpbmcgY2hhbmdlcy4uLi4uCi0gICAgICovCi0KLSAgICBpbmZvLT5iYXVkID0gbmV3X3NlcmlhbC5iYXVkX2Jhc2U7Ci0gICAgaW5mby0+Y3VzdG9tX2Rpdmlzb3IgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOwotICAgIGluZm8tPmZsYWdzID0gKChpbmZvLT5mbGFncyAmIH5BU1lOQ19GTEFHUykgfAotICAgICAgICAgICAgICAgICAgICAobmV3X3NlcmlhbC5mbGFncyAmIEFTWU5DX0ZMQUdTKSk7Ci0gICAgaW5mby0+Y2xvc2VfZGVsYXkgPSBuZXdfc2VyaWFsLmNsb3NlX2RlbGF5ICogSFovMTAwOwotICAgIGluZm8tPmNsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0ICogSFovMTAwOworCWluZm8tPmJhdWQgPSBuZXdfc2VyaWFsLmJhdWRfYmFzZTsKKwlpbmZvLT5jdXN0b21fZGl2aXNvciA9IG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3I7CisJaW5mby0+ZmxhZ3MgPSAoaW5mby0+ZmxhZ3MgJiB+QVNZTkNfRkxBR1MpIHwKKwkJCShuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfRkxBR1MpOworCWluZm8tPmNsb3NlX2RlbGF5ID0gbmV3X3NlcmlhbC5jbG9zZV9kZWxheSAqIEhaIC8gMTAwOworCWluZm8tPmNsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0ICogSFogLyAxMDA7CiAKIGNoZWNrX2FuZF9leGl0OgotICAgIGlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKXsKLSAgICAgICAgc2V0X2xpbmVfY2hhcihpbmZvKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfWVsc2V7Ci0gICAgICAgIHJldHVybiBzdGFydHVwKGluZm8pOwotICAgIH0KLX0gLyogc2V0X3NlcmlhbF9pbmZvICovCisJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKKwkJc2V0X2xpbmVfY2hhcihpbmZvKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHN0YXJ0dXAoaW5mbyk7CisJfQorfQkJCQkvKiBzZXRfc2VyaWFsX2luZm8gKi8KIAogLyoKICAqIGdldF9sc3JfaW5mbyAtIGdldCBsaW5lIHN0YXR1cyByZWdpc3RlciBpbmZvCkBAIC0zNDczLDQ0MSArMzU2Miw0NTIgQEAKICAqCSAgICB0cmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIGlzIGVtcHR5LiAgVGhpcyBmdW5jdGlvbmFsaXR5CiAgKgkgICAgYWxsb3dzIGFuIFJTNDg1IGRyaXZlciB0byBiZSB3cml0dGVuIGluIHVzZXIgc3BhY2UuCiAgKi8KLXN0YXRpYyBpbnQgZ2V0X2xzcl9pbmZvKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2V0X2xzcl9pbmZvKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBpbnQgX191c2VyICogdmFsdWUpCiB7Ci0gICAgaW50IGNhcmQsIGNoaXAsIGNoYW5uZWwsIGluZGV4OwotICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzOwotICAgIHVuc2lnbmVkIGludCByZXN1bHQ7Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKKwlpbnQgY2FyZCwgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwogCi0gICAgY2FyZCA9IGluZm8tPmNhcmQ7Ci0gICAgY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOwotICAgIGlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKLQljaGlwID0gY2hhbm5lbD4+MjsKLQljaGFubmVsICY9IDB4MDM7Ci0JaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKLQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXTw8aW5kZXgpOworCWNhcmQgPSBpbmZvLT5jYXJkOworCWNoYW5uZWwgPSAoaW5mby0+bGluZSkgLSAoY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lKTsKKwlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7CisJCWNoaXAgPSBjaGFubmVsID4+IDI7CisJCWNoYW5uZWwgJj0gMHgwMzsKKwkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKKwkJYmFzZV9hZGRyID0KKwkJICAgIGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCXN0YXR1cyA9IGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCkpICYgKEN5VHhSZHl8Q3lUeE1wdHkpOwotCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0JcmVzdWx0ID0gKHN0YXR1cyA/IDAgOiBUSU9DU0VSX1RFTVQpOwotICAgIH0gZWxzZSB7Ci0JLyogTm90IHN1cHBvcnRlZCB5ZXQgKi8KLQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAgcmV0dXJuIHB1dF91c2VyKHJlc3VsdCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopIHZhbHVlKTsKKwkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCXN0YXR1cyA9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCisJCQkJKEN5VHhSZHkgfCBDeVR4TXB0eSk7CisJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCXJlc3VsdCA9IChzdGF0dXMgPyAwIDogVElPQ1NFUl9URU1UKTsKKwl9IGVsc2UgeworCQkvKiBOb3Qgc3VwcG9ydGVkIHlldCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHB1dF91c2VyKHJlc3VsdCwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopdmFsdWUpOwogfQogCi1zdGF0aWMgaW50Ci1jeV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgY3lfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICogaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0gIGludCBjYXJkLGNoaXAsY2hhbm5lbCxpbmRleDsKLSAgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0gIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gIHVuc2lnbmVkIGNoYXIgc3RhdHVzOwotICB1bnNpZ25lZCBsb25nIGxzdGF0dXM7Ci0gIHVuc2lnbmVkIGludCByZXN1bHQ7Ci0gIHN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7Ci0gIHN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLSAgc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKLSAgc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybDsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IGNhcmQsIGNoaXAsIGNoYW5uZWwsIGluZGV4OworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsc3RhdHVzOworCXVuc2lnbmVkIGludCByZXN1bHQ7CisJc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKKwlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7CisJc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKKwlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOwogCi0gICAgaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsIF9fRlVOQ1RJT05fXykpCi0JcmV0dXJuIC1FTk9ERVY7CisJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsIF9fRlVOQ1RJT05fXykpCisJCXJldHVybiAtRU5PREVWOwogCi0gICAgY2FyZCA9IGluZm8tPmNhcmQ7Ci0gICAgY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOwotICAgIGlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKLQljaGlwID0gY2hhbm5lbD4+MjsKLQljaGFubmVsICY9IDB4MDM7Ci0JaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKLQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXTw8aW5kZXgpOworCWNhcmQgPSBpbmZvLT5jYXJkOworCWNoYW5uZWwgPSAoaW5mby0+bGluZSkgLSAoY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lKTsKKwlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7CisJCWNoaXAgPSBjaGFubmVsID4+IDI7CisJCWNoYW5uZWwgJj0gMHgwMzsKKwkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKKwkJYmFzZV9hZGRyID0KKwkJICAgIGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKIAotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNBUjw8aW5kZXgpLCAodV9jaGFyKWNoYW5uZWwpOwotCSAgICBzdGF0dXMgPSBjeV9yZWFkYihiYXNlX2FkZHIrKEN5TVNWUjE8PGluZGV4KSk7Ci0JICAgIHN0YXR1cyB8PSBjeV9yZWFkYihiYXNlX2FkZHIrKEN5TVNWUjI8PGluZGV4KSk7Ci0JQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCAodV9jaGFyKSBjaGFubmVsKTsKKwkJc3RhdHVzID0gY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKTsKKwkJc3RhdHVzIHw9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSk7CisJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CiAKLSAgICAgICAgaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKLQkgICAgcmVzdWx0ID0gICgoc3RhdHVzICAmIEN5UlRTKSA/IFRJT0NNX0RUUiA6IDApCi0JCSAgICB8ICgoc3RhdHVzICAmIEN5RFRSKSA/IFRJT0NNX1JUUyA6IDApOworCQlpZiAoaW5mby0+cnRzZHRyX2ludikgeworCQkJcmVzdWx0ID0gKChzdGF0dXMgJiBDeVJUUykgPyBUSU9DTV9EVFIgOiAwKSB8CisJCQkJKChzdGF0dXMgJiBDeURUUikgPyBUSU9DTV9SVFMgOiAwKTsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCA9ICgoc3RhdHVzICYgQ3lSVFMpID8gVElPQ01fUlRTIDogMCkgfAorCQkJCSgoc3RhdHVzICYgQ3lEVFIpID8gVElPQ01fRFRSIDogMCk7CisJCX0KKwkJcmVzdWx0IHw9ICgoc3RhdHVzICYgQ3lEQ0QpID8gVElPQ01fQ0FSIDogMCkgfAorCQkJKChzdGF0dXMgJiBDeVJJKSA/IFRJT0NNX1JORyA6IDApIHwKKwkJCSgoc3RhdHVzICYgQ3lEU1IpID8gVElPQ01fRFNSIDogMCkgfAorCQkJKChzdGF0dXMgJiBDeUNUUykgPyBUSU9DTV9DVFMgOiAwKTsKIAl9IGVsc2UgewotCSAgICByZXN1bHQgPSAgKChzdGF0dXMgICYgQ3lSVFMpID8gVElPQ01fUlRTIDogMCkKLQkJICAgIHwgKChzdGF0dXMgICYgQ3lEVFIpID8gVElPQ01fRFRSIDogMCk7CisJCWJhc2VfYWRkciA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyOworCisJCWlmIChjeV9jYXJkW2NhcmRdLm51bV9jaGlwcyAhPSAtMSkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlmaXJtX2lkID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOworCQlpZiAoSVNaTE9BREVEKGN5X2NhcmRbY2FyZF0pKSB7CisJCQl6ZndfY3RybCA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsKKwkJCQkoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKKwkJCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7CisJCQljaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7CisJCQlsc3RhdHVzID0gY3lfcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfc3RhdHVzKTsKKwkJCXJlc3VsdCA9ICgobHN0YXR1cyAmIENfUlNfUlRTKSA/IFRJT0NNX1JUUyA6IDApIHwKKwkJCQkoKGxzdGF0dXMgJiBDX1JTX0RUUikgPyBUSU9DTV9EVFIgOiAwKSB8CisJCQkJKChsc3RhdHVzICYgQ19SU19EQ0QpID8gVElPQ01fQ0FSIDogMCkgfAorCQkJCSgobHN0YXR1cyAmIENfUlNfUkkpID8gVElPQ01fUk5HIDogMCkgfAorCQkJCSgobHN0YXR1cyAmIENfUlNfRFNSKSA/IFRJT0NNX0RTUiA6IDApIHwKKwkJCQkoKGxzdGF0dXMgJiBDX1JTX0NUUykgPyBUSU9DTV9DVFMgOiAwKTsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCA9IDA7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCiAJfQotCXJlc3VsdCB8PSAgKChzdGF0dXMgICYgQ3lEQ0QpID8gVElPQ01fQ0FSIDogMCkKLQkJIHwgKChzdGF0dXMgICYgQ3lSSSkgPyBUSU9DTV9STkcgOiAwKQotCQkgfCAoKHN0YXR1cyAgJiBDeURTUikgPyBUSU9DTV9EU1IgOiAwKQotCQkgfCAoKHN0YXR1cyAgJiBDeUNUUykgPyBUSU9DTV9DVFMgOiAwKTsKLSAgICB9IGVsc2UgewotCWJhc2VfYWRkciA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyOwotCi0gICAgICAgIGlmIChjeV9jYXJkW2NhcmRdLm51bV9jaGlwcyAhPSAtMSl7Ci0JICAgIHJldHVybiAtRUlOVkFMOwotCX0KLQotCWZpcm1faWQgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0gICAgICAgIGlmIChJU1pMT0FERUQoY3lfY2FyZFtjYXJkXSkpIHsKLQkgICAgemZ3X2N0cmwgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCSAgICBib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCSAgICBjaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7Ci0JICAgIGxzdGF0dXMgPSBjeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19zdGF0dXMpOwotCSAgICByZXN1bHQgPSAgKChsc3RhdHVzICAmIENfUlNfUlRTKSA/IFRJT0NNX1JUUyA6IDApCi0JCSAgICB8ICgobHN0YXR1cyAgJiBDX1JTX0RUUikgPyBUSU9DTV9EVFIgOiAwKQotCSAgICAgICAgICAgIHwgKChsc3RhdHVzICAmIENfUlNfRENEKSA/IFRJT0NNX0NBUiA6IDApCi0JCSAgICB8ICgobHN0YXR1cyAgJiBDX1JTX1JJKSA/IFRJT0NNX1JORyA6IDApCi0JCSAgICB8ICgobHN0YXR1cyAgJiBDX1JTX0RTUikgPyBUSU9DTV9EU1IgOiAwKQotCQkgICAgfCAoKGxzdGF0dXMgICYgQ19SU19DVFMpID8gVElPQ01fQ1RTIDogMCk7Ci0JfWVsc2V7Ci0JICAgIHJlc3VsdCA9IDA7Ci0JICAgIHJldHVybiAtRU5PREVWOwotCX0KLQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfSAvKiBjeV90aW9tZ2V0ICovCi0KKwlyZXR1cm4gcmVzdWx0OworfQkJCQkvKiBjeV90aW9tZ2V0ICovCiAKIHN0YXRpYyBpbnQKIGN5X3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQorCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCiB7Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICogaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0gIGludCBjYXJkLGNoaXAsY2hhbm5lbCxpbmRleDsKLSAgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0gIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gIHN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7Ci0gIHN0cnVjdCBaRldfQ1RSTCBfX2lvbWVtICp6ZndfY3RybDsKLSAgc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKLSAgc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybDsKLSAgaW50IHJldHZhbDsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IGNhcmQsIGNoaXAsIGNoYW5uZWwsIGluZGV4OworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IEZJUk1fSUQgX19pb21lbSAqZmlybV9pZDsKKwlzdHJ1Y3QgWkZXX0NUUkwgX19pb21lbSAqemZ3X2N0cmw7CisJc3RydWN0IEJPQVJEX0NUUkwgX19pb21lbSAqYm9hcmRfY3RybDsKKwlzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsOworCWludCByZXR2YWw7CiAKLSAgICBpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgX19GVU5DVElPTl9fKSkKLQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgX19GVU5DVElPTl9fKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLSAgICBjYXJkID0gaW5mby0+Y2FyZDsKLSAgICBjaGFubmVsID0gKGluZm8tPmxpbmUpIC0gKGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZSk7Ci0gICAgaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgewotCWNoaXAgPSBjaGFubmVsPj4yOwotCWNoYW5uZWwgJj0gMHgwMzsKLQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OwotCWJhc2VfYWRkciA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdPDxpbmRleCk7CisJY2FyZCA9IGluZm8tPmNhcmQ7CisJY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOworCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKKwkJY2hhbm5lbCAmPSAweDAzOworCQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OworCQliYXNlX2FkZHIgPQorCQkgICAgY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwogCi0JaWYgKHNldCAmIFRJT0NNX1JUUyl7Ci0JCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCSAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lDQVI8PGluZGV4KSwgKHVfY2hhciljaGFubmVsKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby0+cnRzZHRyX2ludikgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lNU1ZSMjw8aW5kZXgpLCBDeURUUik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TVNWUjE8PGluZGV4KSwgQ3lSVFMpOwotICAgICAgICAgICAgICAgIH0KLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLQl9Ci0JaWYgKGNsZWFyICYgVElPQ01fUlRTKSB7Ci0JCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNBUjw8aW5kZXgpLCAodV9jaGFyKWNoYW5uZWwpOwotICAgICAgICAgICAgICAgIGlmIChpbmZvLT5ydHNkdHJfaW52KSB7Ci0JCQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1TVlIyPDxpbmRleCksIH5DeURUUik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TVNWUjE8PGluZGV4KSwgfkN5UlRTKTsKLSAgICAgICAgICAgICAgICB9Ci0JCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0JfQotCWlmIChzZXQgJiBUSU9DTV9EVFIpewotCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lDQVI8PGluZGV4KSwgKHVfY2hhciljaGFubmVsKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby0+cnRzZHRyX2ludikgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lNU1ZSMTw8aW5kZXgpLCBDeVJUUyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TVNWUjI8PGluZGV4KSwgQ3lEVFIpOwotICAgICAgICAgICAgICAgIH0KKwkJaWYgKHNldCAmIFRJT0NNX1JUUykgeworCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKKwkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOworCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKKwkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLAorCQkJCQkgIEN5RFRSKTsKKwkJCX0gZWxzZSB7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSwKKwkJCQkJICBDeVJUUyk7CisJCQl9CisJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQl9CisJCWlmIChjbGVhciAmIFRJT0NNX1JUUykgeworCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKKwkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOworCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKKwkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpLAorCQkJCQkgIH5DeURUUik7CisJCQl9IGVsc2UgeworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCisJCQkJCSAgfkN5UlRTKTsKKwkJCX0KKwkJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCX0KKwkJaWYgKHNldCAmIFRJT0NNX0RUUikgeworCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKKwkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOworCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKKwkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLAorCQkJCQkgIEN5UlRTKTsKKwkJCX0gZWxzZSB7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKKwkJCQkJICBDeURUUik7CisJCQl9CiAjaWZkZWYgQ1lfREVCVUdfRFRSCi0JCXByaW50aygiY3ljOnNldF9tb2RlbV9pbmZvIHJhaXNpbmcgRFRSXG4iKTsKLQkJcHJpbnRrKCIgICAgIHN0YXR1czogMHgleCwgMHgleFxuIiwKLQkJICAgIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lNU1ZSMTw8aW5kZXgpKSwgCi0gICAgICAgICAgICAgICAgICAgIGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lNU1ZSMjw8aW5kZXgpKSk7CisJCQlwcmludGsoImN5YzpzZXRfbW9kZW1faW5mbyByYWlzaW5nIERUUlxuIik7CisJCQlwcmludGsoIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAorCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCisJCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKSk7CiAjZW5kaWYKLQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLQl9Ci0JaWYgKGNsZWFyICYgVElPQ01fRFRSKSB7Ci0JCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNBUjw8aW5kZXgpLCAodV9jaGFyKWNoYW5uZWwpOwotICAgICAgICAgICAgICAgIGlmIChpbmZvLT5ydHNkdHJfaW52KSB7Ci0JCQljeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1TVlIxPDxpbmRleCksIH5DeVJUUyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TVNWUjI8PGluZGV4KSwgfkN5RFRSKTsKLSAgICAgICAgICAgICAgICB9CisJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQl9CisJCWlmIChjbGVhciAmIFRJT0NNX0RUUikgeworCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKKwkJCQkgICh1X2NoYXIpIGNoYW5uZWwpOworCQkJaWYgKGluZm8tPnJ0c2R0cl9pbnYpIHsKKwkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLAorCQkJCQkgIH5DeVJUUyk7CisJCQl9IGVsc2UgeworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMiA8PCBpbmRleCksCisJCQkJCSAgfkN5RFRSKTsKKwkJCX0KIAogI2lmZGVmIENZX0RFQlVHX0RUUgotCQlwcmludGsoImN5YzpzZXRfbW9kZW1faW5mbyBkcm9wcGluZyBEVFJcbiIpOwotCQlwcmludGsoIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAotCQkgICAgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeU1TVlIxPDxpbmRleCkpLCAKLSAgICAgICAgICAgICAgICAgICAgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeU1TVlIyPDxpbmRleCkpKTsKKwkJCXByaW50aygiY3ljOnNldF9tb2RlbV9pbmZvIGRyb3BwaW5nIERUUlxuIik7CisJCQlwcmludGsoIiAgICAgc3RhdHVzOiAweCV4LCAweCV4XG4iLAorCQkJCWN5X3JlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSksCisJCQkJY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjIgPDwgaW5kZXgpKSk7CiAjZW5kaWYKKwkJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCX0KKwl9IGVsc2UgeworCQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkcjsKKworCQlmaXJtX2lkID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyBJRF9BRERSRVNTOworCQlpZiAoSVNaTE9BREVEKGN5X2NhcmRbY2FyZF0pKSB7CisJCQl6ZndfY3RybCA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsKKwkJCQkoY3lfcmVhZGwoJmZpcm1faWQtPnpmd2N0cmxfYWRkcikgJiAweGZmZmZmKTsKKwkJCWJvYXJkX2N0cmwgPSAmemZ3X2N0cmwtPmJvYXJkX2N0cmw7CisJCQljaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7CisKKwkJCWlmIChzZXQgJiBUSU9DTV9SVFMpIHsKKwkJCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKKwkJCQkJICBjeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS4KKwkJCQkJCSAgIHJzX2NvbnRyb2wpIHwgQ19SU19SVFMpOworCQkJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCQl9CisJCQlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpIHsKKwkJCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJCQljeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKKwkJCQkJICBjeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS4KKwkJCQkJCSAgIHJzX2NvbnRyb2wpICYgfkNfUlNfUlRTKTsKKwkJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJfQorCQkJaWYgKHNldCAmIFRJT0NNX0RUUikgeworCQkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJCWN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAorCQkJCQkgIGN5X3JlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLgorCQkJCQkJICAgcnNfY29udHJvbCkgfCBDX1JTX0RUUik7CisjaWZkZWYgQ1lfREVCVUdfRFRSCisJCQkJcHJpbnRrKCJjeWM6c2V0X21vZGVtX2luZm8gcmFpc2luZyBaIERUUlxuIik7CisjZW5kaWYKKwkJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQkJfQorCQkJaWYgKGNsZWFyICYgVElPQ01fRFRSKSB7CisJCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQkJY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wsCisJCQkJCSAgY3lfcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0uCisJCQkJCQkgICByc19jb250cm9sKSAmIH5DX1JTX0RUUik7CisjaWZkZWYgQ1lfREVCVUdfRFRSCisJCQkJcHJpbnRrKCJjeWM6c2V0X21vZGVtX2luZm8gY2xlYXJpbmcgWiBEVFJcbiIpOworI2VuZGlmCisJCQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2luZm8tPmNhcmRdLAorCQkJCQljaGFubmVsLCBDX0NNX0lPQ1RMTSwgMEwpOworCQlpZiAocmV0dmFsICE9IDApIHsKKwkJCXByaW50aygiY3ljOnNldF9tb2RlbV9pbmZvIHJldHZhbCBvbiB0dHlDJWQgd2FzICV4XG4iLAorCQkJCWluZm8tPmxpbmUsIHJldHZhbCk7CisJCX0KIAkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKIAl9Ci0gICAgfSBlbHNlIHsKLQliYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkcjsKLQotCWZpcm1faWQgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIElEX0FERFJFU1M7Ci0gICAgICAgIGlmIChJU1pMT0FERUQoY3lfY2FyZFtjYXJkXSkpIHsKLQkgICAgemZ3X2N0cmwgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9yZWFkbCgmZmlybV9pZC0+emZ3Y3RybF9hZGRyKSAmIDB4ZmZmZmYpOwotCSAgICBib2FyZF9jdHJsID0gJnpmd19jdHJsLT5ib2FyZF9jdHJsOwotCSAgICBjaF9jdHJsID0gemZ3X2N0cmwtPmNoX2N0cmw7Ci0KLQkgICAgaWYgKHNldCAmIFRJT0NNX1JUUyl7Ci0JCSAgICBDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQkJICAgIGN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICBjeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSB8IENfUlNfUlRTKTsKLQkJICAgIENZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0JICAgIH0KLQkgICAgaWYgKGNsZWFyICYgVElPQ01fUlRTKSB7Ci0JCSAgICBDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQkJICAgIGN5X3dyaXRlbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICBjeV9yZWFkbCgmY2hfY3RybFtjaGFubmVsXS5yc19jb250cm9sKSAmIH5DX1JTX1JUUyk7Ci0JCSAgICBDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotCSAgICB9Ci0JICAgIGlmIChzZXQgJiBUSU9DTV9EVFIpewotCQkgICAgQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0JCSAgICBjeV93cml0ZWwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgY3lfcmVhZGwoJmNoX2N0cmxbY2hhbm5lbF0ucnNfY29udHJvbCkgfCBDX1JTX0RUUik7Ci0jaWZkZWYgQ1lfREVCVUdfRFRSCi0JCSAgICBwcmludGsoImN5YzpzZXRfbW9kZW1faW5mbyByYWlzaW5nIFogRFRSXG4iKTsKLSNlbmRpZgotCQkgICAgQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLQkgICAgfQotCSAgICBpZiAoY2xlYXIgJiBUSU9DTV9EVFIpIHsKLQkJICAgIENZX0xPQ0soaW5mbywgZmxhZ3MpOwotCQkgICAgY3lfd3JpdGVsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wsCi0gICAgICAgICAgICAgICAgICAgICAgIGN5X3JlYWRsKCZjaF9jdHJsW2NoYW5uZWxdLnJzX2NvbnRyb2wpICYgfkNfUlNfRFRSKTsKLSNpZmRlZiBDWV9ERUJVR19EVFIKLQkJICAgIHByaW50aygiY3ljOnNldF9tb2RlbV9pbmZvIGNsZWFyaW5nIFogRFRSXG4iKTsKLSNlbmRpZgotCQkgICAgQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLQkgICAgfQotCX1lbHNlewotCSAgICByZXR1cm4gLUVOT0RFVjsKLQl9Ci0JQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0gICAgICAgIHJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbaW5mby0+Y2FyZF0sCi0JCQkJICAgIGNoYW5uZWwsIENfQ01fSU9DVExNLDBMKTsKLQlpZiAocmV0dmFsICE9IDApewotCSAgICBwcmludGsoImN5YzpzZXRfbW9kZW1faW5mbyByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKLQkJICAgaW5mby0+bGluZSwgcmV0dmFsKTsKLQl9Ci0JQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19IC8qIGN5X3Rpb2Ntc2V0ICovCisJcmV0dXJuIDA7Cit9CQkJCS8qIGN5X3Rpb2Ntc2V0ICovCiAKIC8qCiAgKiBjeV9icmVhaygpIC0tLSByb3V0aW5lIHdoaWNoIHR1cm5zIHRoZSBicmVhayBoYW5kbGluZyBvbiBvciBvZmYKICAqLwotc3RhdGljIHZvaWQKLWN5X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3N0YXRpYyB2b2lkIGN5X2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKIHsKLSAgICBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqIGluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgICBpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X2JyZWFrIikpCi0JcmV0dXJuOwotCi0gICAgQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0gICAgaWYgKCFJU19DWUNfWihjeV9jYXJkW2luZm8tPmNhcmRdKSkgewotICAgICAgICAvKiBMZXQgdGhlIHRyYW5zbWl0IElTUiB0YWtlIGNhcmUgb2YgdGhpcyAoc2luY2UgaXQKLQkgICByZXF1aXJlcyBzdHVmZmluZyBjaGFyYWN0ZXJzIGludG8gdGhlIG91dHB1dCBzdHJlYW0pLgotICAgICAgICAqLwotCWlmIChicmVha19zdGF0ZSA9PSAtMSkgewotCSAgICBpZiAoIWluZm8tPmJyZWFrb24pIHsKLQkJaW5mby0+YnJlYWtvbiA9IDE7Ci0JCWlmICghaW5mby0+eG1pdF9jbnQpIHsKLQkJICAgIENZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0JCSAgICBzdGFydF94bWl0KGluZm8pOwotCQkgICAgQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0JCX0KLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIGlmICghaW5mby0+YnJlYWtvZmYpIHsKLQkJaW5mby0+YnJlYWtvZmYgPSAxOwotCQlpZiAoIWluZm8tPnhtaXRfY250KSB7Ci0JCSAgICBDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotCQkgICAgc3RhcnRfeG1pdChpbmZvKTsKLQkJICAgIENZX0xPQ0soaW5mbywgZmxhZ3MpOwotCQl9Ci0JICAgIH0KLQl9Ci0gICAgfSBlbHNlIHsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKGJyZWFrX3N0YXRlID09IC0xKSB7Ci0JICAgIHJldHZhbCA9IGN5el9pc3N1ZV9jbWQoJmN5X2NhcmRbaW5mby0+Y2FyZF0sCi0JCShpbmZvLT5saW5lKSAtIChjeV9jYXJkW2luZm8tPmNhcmRdLmZpcnN0X2xpbmUpLAotCQlDX0NNX1NFVF9CUkVBSywgMEwpOwotCSAgICBpZiAocmV0dmFsICE9IDApIHsKLQkJcHJpbnRrKCJjeWM6Y3lfYnJlYWsgKHNldCkgcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCi0JCSAgICAgICBpbmZvLT5saW5lLCByZXR2YWwpOwotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgcmV0dmFsID0gY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtpbmZvLT5jYXJkXSwKLQkJKGluZm8tPmxpbmUpIC0gKGN5X2NhcmRbaW5mby0+Y2FyZF0uZmlyc3RfbGluZSksCi0JCUNfQ01fQ0xSX0JSRUFLLCAwTCk7Ci0JICAgIGlmIChyZXR2YWwgIT0gMCkgewotCQlwcmludGsoImN5YzpjeV9icmVhayAoY2xyKSByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKLQkJICAgICAgIGluZm8tPmxpbmUsIHJldHZhbCk7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIENZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci19IC8qIGN5X2JyZWFrICovCi0KLXN0YXRpYyBpbnQKLWdldF9tb25faW5mbyhzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqIGluZm8sIHN0cnVjdCBjeWNsYWRlc19tb25pdG9yIF9fdXNlciAqIG1vbikKLXsKLQotICAgIGlmKGNvcHlfdG9fdXNlcihtb24sICZpbmZvLT5tb24sIHNpemVvZihzdHJ1Y3QgY3ljbGFkZXNfbW9uaXRvcikpKQotICAgIAlyZXR1cm4gLUVGQVVMVDsKLSAgICBpbmZvLT5tb24uaW50X2NvdW50ICA9IDA7Ci0gICAgaW5mby0+bW9uLmNoYXJfY291bnQgPSAwOwotICAgIGluZm8tPm1vbi5jaGFyX21heCAgID0gMDsKLSAgICBpbmZvLT5tb24uY2hhcl9sYXN0ICA9IDA7Ci0gICAgcmV0dXJuIDA7Ci19LyogZ2V0X21vbl9pbmZvICovCi0KLQotc3RhdGljIGludAotc2V0X3RocmVzaG9sZChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqIGluZm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0gIHZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotICBpbnQgY2FyZCxjaGFubmVsLGNoaXAsaW5kZXg7Ci0gIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAKLSAgICBjYXJkID0gaW5mby0+Y2FyZDsKLSAgICBjaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZTsKLSAgICBpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7Ci0JY2hpcCA9IGNoYW5uZWw+PjI7Ci0JY2hhbm5lbCAmPSAweDAzOwotCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7Ci0JYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF08PGluZGV4KTsKLQotCWluZm8tPmNvcjMgJj0gfkN5UkVDX0ZJRk87Ci0JaW5mby0+Y29yMyB8PSB2YWx1ZSAmIEN5UkVDX0ZJRk87CisJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9icmVhayIpKQorCQlyZXR1cm47CiAKIAlDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lDT1IzPDxpbmRleCksIGluZm8tPmNvcjMpOwotCSAgICBjeXlfaXNzdWVfY21kKGJhc2VfYWRkcixDeUNPUl9DSEFOR0V8Q3lDT1IzY2gsaW5kZXgpOworCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtpbmZvLT5jYXJkXSkpIHsKKwkJLyogTGV0IHRoZSB0cmFuc21pdCBJU1IgdGFrZSBjYXJlIG9mIHRoaXMgKHNpbmNlIGl0CisJCSAgIHJlcXVpcmVzIHN0dWZmaW5nIGNoYXJhY3RlcnMgaW50byB0aGUgb3V0cHV0IHN0cmVhbSkuCisJCSAqLworCQlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpIHsKKwkJCWlmICghaW5mby0+YnJlYWtvbikgeworCQkJCWluZm8tPmJyZWFrb24gPSAxOworCQkJCWlmICghaW5mby0+eG1pdF9jbnQpIHsKKwkJCQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJCQkJc3RhcnRfeG1pdChpbmZvKTsKKwkJCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCFpbmZvLT5icmVha29mZikgeworCQkJCWluZm8tPmJyZWFrb2ZmID0gMTsKKwkJCQlpZiAoIWluZm8tPnhtaXRfY250KSB7CisJCQkJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCQkJCXN0YXJ0X3htaXQoaW5mbyk7CisJCQkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWludCByZXR2YWw7CisKKwkJaWYgKGJyZWFrX3N0YXRlID09IC0xKSB7CisJCQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2luZm8tPmNhcmRdLAorCQkJCWluZm8tPmxpbmUgLSBjeV9jYXJkW2luZm8tPmNhcmRdLmZpcnN0X2xpbmUsCisJCQkJQ19DTV9TRVRfQlJFQUssIDBMKTsKKwkJCWlmIChyZXR2YWwgIT0gMCkgeworCQkJCXByaW50aygiY3ljOmN5X2JyZWFrIChzZXQpIHJldHZhbCBvbiB0dHlDJWQgIgorCQkJCQkid2FzICV4XG4iLCBpbmZvLT5saW5lLCByZXR2YWwpOworCQkJfQorCQl9IGVsc2UgeworCQkJcmV0dmFsID0gY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtpbmZvLT5jYXJkXSwKKwkJCQlpbmZvLT5saW5lIC0gY3lfY2FyZFtpbmZvLT5jYXJkXS5maXJzdF9saW5lLAorCQkJCUNfQ01fQ0xSX0JSRUFLLCAwTCk7CisJCQlpZiAocmV0dmFsICE9IDApIHsKKwkJCQlwcmludGsoImN5YzpjeV9icmVhayAoY2xyKSByZXR2YWwgb24gdHR5QyVkICIKKwkJCQkJIndhcyAleFxuIiwgaW5mby0+bGluZSwgcmV0dmFsKTsKKwkJCX0KKwkJfQorCX0KIAlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotICAgIH0gZWxzZSB7Ci0JLy8gTm90aGluZyB0byBkbyEKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Lyogc2V0X3RocmVzaG9sZCAqLwotCit9CQkJCS8qIGN5X2JyZWFrICovCiAKIHN0YXRpYyBpbnQKLWdldF90aHJlc2hvbGQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKiBpbmZvLCB1bnNpZ25lZCBsb25nIF9fdXNlciAqdmFsdWUpCitnZXRfbW9uX2luZm8oc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHN0cnVjdCBjeWNsYWRlc19tb25pdG9yIF9fdXNlciAqIG1vbikKIHsKLSAgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0gIGludCBjYXJkLGNoYW5uZWwsY2hpcCxpbmRleDsKLSAgdW5zaWduZWQgbG9uZyB0bXA7Ci0gICAKLSAgICBjYXJkID0gaW5mby0+Y2FyZDsKLSAgICBjaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZTsKLSAgICBpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7Ci0JY2hpcCA9IGNoYW5uZWw+PjI7Ci0JY2hhbm5lbCAmPSAweDAzOwotCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7Ci0JYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF08PGluZGV4KTsKIAotCXRtcCA9IGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lDT1IzPDxpbmRleCkpICYgQ3lSRUNfRklGTzsKLQlyZXR1cm4gcHV0X3VzZXIodG1wLHZhbHVlKTsKLSAgICB9IGVsc2UgewotCS8vIE5vdGhpbmcgdG8gZG8hCisJaWYgKGNvcHlfdG9fdXNlcihtb24sICZpbmZvLT5tb24sIHNpemVvZihzdHJ1Y3QgY3ljbGFkZXNfbW9uaXRvcikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpbmZvLT5tb24uaW50X2NvdW50ID0gMDsKKwlpbmZvLT5tb24uY2hhcl9jb3VudCA9IDA7CisJaW5mby0+bW9uLmNoYXJfbWF4ID0gMDsKKwlpbmZvLT5tb24uY2hhcl9sYXN0ID0gMDsKIAlyZXR1cm4gMDsKLSAgICB9Ci19LyogZ2V0X3RocmVzaG9sZCAqLworfQkJCQkvKiBnZXRfbW9uX2luZm8gKi8KIAotCi1zdGF0aWMgaW50Ci1zZXRfZGVmYXVsdF90aHJlc2hvbGQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKiBpbmZvLCB1bnNpZ25lZCBsb25nIHZhbHVlKQorc3RhdGljIGludCBzZXRfdGhyZXNob2xkKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewotICAgIGluZm8tPmRlZmF1bHRfdGhyZXNob2xkID0gdmFsdWUgJiAweDBmOwotICAgIHJldHVybiAwOwotfS8qIHNldF9kZWZhdWx0X3RocmVzaG9sZCAqLworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworCWludCBjYXJkLCBjaGFubmVsLCBjaGlwLCBpbmRleDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJY2FyZCA9IGluZm8tPmNhcmQ7CisJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmU7CisJaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgeworCQljaGlwID0gY2hhbm5lbCA+PiAyOworCQljaGFubmVsICY9IDB4MDM7CisJCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7CisJCWJhc2VfYWRkciA9CisJCSAgICBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKLXN0YXRpYyBpbnQKLWdldF9kZWZhdWx0X3RocmVzaG9sZChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqIGluZm8sIHVuc2lnbmVkIGxvbmcgX191c2VyICp2YWx1ZSkKLXsKLSAgICByZXR1cm4gcHV0X3VzZXIoaW5mby0+ZGVmYXVsdF90aHJlc2hvbGQsdmFsdWUpOwotfS8qIGdldF9kZWZhdWx0X3RocmVzaG9sZCAqLworCQlpbmZvLT5jb3IzICY9IH5DeVJFQ19GSUZPOworCQlpbmZvLT5jb3IzIHw9IHZhbHVlICYgQ3lSRUNfRklGTzsKIAotCi1zdGF0aWMgaW50Ci1zZXRfdGltZW91dChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqIGluZm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0gIHZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotICBpbnQgY2FyZCxjaGFubmVsLGNoaXAsaW5kZXg7Ci0gIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAKLSAgICBjYXJkID0gaW5mby0+Y2FyZDsKLSAgICBjaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZTsKLSAgICBpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7Ci0JY2hpcCA9IGNoYW5uZWw+PjI7Ci0JY2hhbm5lbCAmPSAweDAzOwotCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7Ci0JYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF08PGluZGV4KTsKLQotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeVJUUFI8PGluZGV4KSwgdmFsdWUgJiAweGZmKTsKLQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotICAgIH0gZWxzZSB7Ci0JLy8gTm90aGluZyB0byBkbyEKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Lyogc2V0X3RpbWVvdXQgKi8KLQotCi1zdGF0aWMgaW50Ci1nZXRfdGltZW91dChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqIGluZm8sIHVuc2lnbmVkIGxvbmcgX191c2VyICp2YWx1ZSkKLXsKLSAgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0gIGludCBjYXJkLGNoYW5uZWwsY2hpcCxpbmRleDsKLSAgdW5zaWduZWQgbG9uZyB0bXA7Ci0gICAKLSAgICBjYXJkID0gaW5mby0+Y2FyZDsKLSAgICBjaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZTsKLSAgICBpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7Ci0JY2hpcCA9IGNoYW5uZWw+PjI7Ci0JY2hhbm5lbCAmPSAweDAzOwotCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7Ci0JYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF08PGluZGV4KTsKLQotCXRtcCA9IGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lSVFBSPDxpbmRleCkpOwotCXJldHVybiBwdXRfdXNlcih0bXAsdmFsdWUpOwotICAgIH0gZWxzZSB7Ci0JLy8gTm90aGluZyB0byBkbyEKKwkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDT1IzIDw8IGluZGV4KSwgaW5mby0+Y29yMyk7CisJCWN5eV9pc3N1ZV9jbWQoYmFzZV9hZGRyLCBDeUNPUl9DSEFOR0UgfCBDeUNPUjNjaCwgaW5kZXgpOworCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCX0gZWxzZSB7CisJCS8qIE5vdGhpbmcgdG8gZG8hICovCisJfQogCXJldHVybiAwOwotICAgIH0KLX0vKiBnZXRfdGltZW91dCAqLwotCit9CQkJCS8qIHNldF90aHJlc2hvbGQgKi8KIAogc3RhdGljIGludAotc2V0X2RlZmF1bHRfdGltZW91dChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqIGluZm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpCitnZXRfdGhyZXNob2xkKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBsb25nIF9fdXNlciAqIHZhbHVlKQogewotICAgIGluZm8tPmRlZmF1bHRfdGltZW91dCA9IHZhbHVlICYgMHhmZjsKLSAgICByZXR1cm4gMDsKLX0vKiBzZXRfZGVmYXVsdF90aW1lb3V0ICovCisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisJaW50IGNhcmQsIGNoYW5uZWwsIGNoaXAsIGluZGV4OworCXVuc2lnbmVkIGxvbmcgdG1wOwogCisJY2FyZCA9IGluZm8tPmNhcmQ7CisJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmU7CisJaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgeworCQljaGlwID0gY2hhbm5lbCA+PiAyOworCQljaGFubmVsICY9IDB4MDM7CisJCWluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7CisJCWJhc2VfYWRkciA9CisJCSAgICBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CisKKwkJdG1wID0gY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5Q09SMyA8PCBpbmRleCkpICYgQ3lSRUNfRklGTzsKKwkJcmV0dXJuIHB1dF91c2VyKHRtcCwgdmFsdWUpOworCX0gZWxzZSB7CisJCS8qIE5vdGhpbmcgdG8gZG8hICovCisJCXJldHVybiAwOworCX0KK30JCQkJLyogZ2V0X3RocmVzaG9sZCAqLwogCiBzdGF0aWMgaW50Ci1nZXRfZGVmYXVsdF90aW1lb3V0KHN0cnVjdCBjeWNsYWRlc19wb3J0ICogaW5mbywgdW5zaWduZWQgbG9uZyBfX3VzZXIgKnZhbHVlKQorc2V0X2RlZmF1bHRfdGhyZXNob2xkKHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewotICAgIHJldHVybiBwdXRfdXNlcihpbmZvLT5kZWZhdWx0X3RpbWVvdXQsdmFsdWUpOwotfS8qIGdldF9kZWZhdWx0X3RpbWVvdXQgKi8KKwlpbmZvLT5kZWZhdWx0X3RocmVzaG9sZCA9IHZhbHVlICYgMHgwZjsKKwlyZXR1cm4gMDsKK30JCQkJLyogc2V0X2RlZmF1bHRfdGhyZXNob2xkICovCisKK3N0YXRpYyBpbnQKK2dldF9kZWZhdWx0X3RocmVzaG9sZChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywgdW5zaWduZWQgbG9uZyBfX3VzZXIgKiB2YWx1ZSkKK3sKKwlyZXR1cm4gcHV0X3VzZXIoaW5mby0+ZGVmYXVsdF90aHJlc2hvbGQsIHZhbHVlKTsKK30JCQkJLyogZ2V0X2RlZmF1bHRfdGhyZXNob2xkICovCisKK3N0YXRpYyBpbnQgc2V0X3RpbWVvdXQoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisJaW50IGNhcmQsIGNoYW5uZWwsIGNoaXAsIGluZGV4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljYXJkID0gaW5mby0+Y2FyZDsKKwljaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZTsKKwlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7CisJCWNoaXAgPSBjaGFubmVsID4+IDI7CisJCWNoYW5uZWwgJj0gMHgwMzsKKwkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKKwkJYmFzZV9hZGRyID0KKwkJICAgIGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBdIDw8IGluZGV4KTsKKworCQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVJUUFIgPDwgaW5kZXgpLCB2YWx1ZSAmIDB4ZmYpOworCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCX0gZWxzZSB7CisJCS8qIE5vdGhpbmcgdG8gZG8hICovCisJfQorCXJldHVybiAwOworfQkJCQkvKiBzZXRfdGltZW91dCAqLworCitzdGF0aWMgaW50IGdldF90aW1lb3V0KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBsb25nIF9fdXNlciAqIHZhbHVlKQoreworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworCWludCBjYXJkLCBjaGFubmVsLCBjaGlwLCBpbmRleDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWNhcmQgPSBpbmZvLT5jYXJkOworCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lOworCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKKwkJY2hhbm5lbCAmPSAweDAzOworCQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OworCQliYXNlX2FkZHIgPQorCQkgICAgY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOworCisJCXRtcCA9IGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVJUUFIgPDwgaW5kZXgpKTsKKwkJcmV0dXJuIHB1dF91c2VyKHRtcCwgdmFsdWUpOworCX0gZWxzZSB7CisJCS8qIE5vdGhpbmcgdG8gZG8hICovCisJCXJldHVybiAwOworCX0KK30JCQkJLyogZ2V0X3RpbWVvdXQgKi8KKworc3RhdGljIGludCBzZXRfZGVmYXVsdF90aW1lb3V0KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCWluZm8tPmRlZmF1bHRfdGltZW91dCA9IHZhbHVlICYgMHhmZjsKKwlyZXR1cm4gMDsKK30JCQkJLyogc2V0X2RlZmF1bHRfdGltZW91dCAqLworCitzdGF0aWMgaW50CitnZXRfZGVmYXVsdF90aW1lb3V0KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCB1bnNpZ25lZCBsb25nIF9fdXNlciAqIHZhbHVlKQoreworCXJldHVybiBwdXRfdXNlcihpbmZvLT5kZWZhdWx0X3RpbWVvdXQsIHZhbHVlKTsKK30JCQkJLyogZ2V0X2RlZmF1bHRfdGltZW91dCAqLwogCiAvKgogICogVGhpcyByb3V0aW5lIGFsbG93cyB0aGUgdHR5IGRyaXZlciB0byBpbXBsZW1lbnQgZGV2aWNlLQpAQCAtMzkxNSwxODQgKzQwMTUsMTkzIEBACiAgKiBub3QgcmVjb2duaXplZCBieSB0aGUgZHJpdmVyLCBpdCBzaG91bGQgcmV0dXJuIEVOT0lPQ1RMQ01ELgogICovCiBzdGF0aWMgaW50Ci1jeV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK2N5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLSAgc3RydWN0IGN5Y2xhZGVzX3BvcnQgKiBpbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKLSAgc3RydWN0IGN5Y2xhZGVzX2ljb3VudCBjcHJldiwgY25vdzsJCS8qIGtlcm5lbCBjb3VudGVyIHRlbXBzICovCi0gIHN0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0IF9fdXNlciAqcF9jdXNlcjsJLyogdXNlciBzcGFjZSAqLwotICBpbnQgcmV0X3ZhbCA9IDA7Ci0gIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gIHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY3ljbGFkZXNfaWNvdW50IGNwcmV2LCBjbm93OwkvKiBrZXJuZWwgY291bnRlciB0ZW1wcyAqLworCXN0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0IF9fdXNlciAqcF9jdXNlcjsJLyogdXNlciBzcGFjZSAqLworCWludCByZXRfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCi0gICAgaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9pb2N0bCIpKQotCXJldHVybiAtRU5PREVWOworCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfaW9jdGwiKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKICNpZmRlZiBDWV9ERUJVR19PVEhFUgotICAgIHByaW50aygiY3ljOmN5X2lvY3RsIHR0eUMlZCwgY21kID0gJXggYXJnID0gJWx4XG4iLAotICAgICAgICBpbmZvLT5saW5lLCBjbWQsIGFyZyk7IC8qICovCisJcHJpbnRrKCJjeWM6Y3lfaW9jdGwgdHR5QyVkLCBjbWQgPSAleCBhcmcgPSAlbHhcbiIsIGluZm8tPmxpbmUsIGNtZCwgYXJnKTsJLyogKi8KICNlbmRpZgogCi0gICAgc3dpdGNoIChjbWQpIHsKLSAgICAgICAgY2FzZSBDWUdFVE1PTjoKLSAgICAgICAgICAgIHJldF92YWwgPSBnZXRfbW9uX2luZm8oaW5mbywgYXJncCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDWUdFVFRIUkVTSDoKLSAgICAgICAgICAgIHJldF92YWwgPSBnZXRfdGhyZXNob2xkKGluZm8sIGFyZ3ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1lTRVRUSFJFU0g6Ci0gICAgICAgICAgICByZXRfdmFsID0gc2V0X3RocmVzaG9sZChpbmZvLCBhcmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1lHRVRERUZUSFJFU0g6Ci0gICAgICAgICAgICByZXRfdmFsID0gZ2V0X2RlZmF1bHRfdGhyZXNob2xkKGluZm8sIGFyZ3ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1lTRVRERUZUSFJFU0g6Ci0gICAgICAgICAgICByZXRfdmFsID0gc2V0X2RlZmF1bHRfdGhyZXNob2xkKGluZm8sIGFyZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDWUdFVFRJTUVPVVQ6Ci0gICAgICAgICAgICByZXRfdmFsID0gZ2V0X3RpbWVvdXQoaW5mbywgYXJncCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDWVNFVFRJTUVPVVQ6Ci0gICAgICAgICAgICByZXRfdmFsID0gc2V0X3RpbWVvdXQoaW5mbywgYXJnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENZR0VUREVGVElNRU9VVDoKLSAgICAgICAgICAgIHJldF92YWwgPSBnZXRfZGVmYXVsdF90aW1lb3V0KGluZm8sIGFyZ3ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1lTRVRERUZUSU1FT1VUOgotICAgICAgICAgICAgcmV0X3ZhbCA9IHNldF9kZWZhdWx0X3RpbWVvdXQoaW5mbywgYXJnKTsKLSAgICAgICAgICAgIGJyZWFrOwotCWNhc2UgQ1lTRVRSRkxPVzoKLSAgICAJICAgIGluZm8tPnJmbG93ID0gKGludClhcmc7Ci0JICAgIHJldF92YWwgPSAwOwotCSAgICBicmVhazsKLQljYXNlIENZR0VUUkZMT1c6Ci0JICAgIHJldF92YWwgPSBpbmZvLT5yZmxvdzsKLQkgICAgYnJlYWs7Ci0JY2FzZSBDWVNFVFJUU0RUUl9JTlY6Ci0gICAgCSAgICBpbmZvLT5ydHNkdHJfaW52ID0gKGludClhcmc7Ci0JICAgIHJldF92YWwgPSAwOwotCSAgICBicmVhazsKLQljYXNlIENZR0VUUlRTRFRSX0lOVjoKLQkgICAgcmV0X3ZhbCA9IGluZm8tPnJ0c2R0cl9pbnY7Ci0JICAgIGJyZWFrOwotCWNhc2UgQ1lHRVRDQVJESU5GTzoKLSAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmN5X2NhcmRbaW5mby0+Y2FyZF0sIAotCQkJc2l6ZW9mIChzdHJ1Y3QgY3ljbGFkZXNfY2FyZCkpKSB7Ci0JCXJldF92YWwgPSAtRUZBVUxUOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBDWUdFVE1PTjoKKwkJcmV0X3ZhbCA9IGdldF9tb25faW5mbyhpbmZvLCBhcmdwKTsKIAkJYnJlYWs7Ci0JICAgIH0KLQkgICAgcmV0X3ZhbCA9IDA7Ci0gICAgICAgICAgICBicmVhazsKKwljYXNlIENZR0VUVEhSRVNIOgorCQlyZXRfdmFsID0gZ2V0X3RocmVzaG9sZChpbmZvLCBhcmdwKTsKKwkJYnJlYWs7CisJY2FzZSBDWVNFVFRIUkVTSDoKKwkJcmV0X3ZhbCA9IHNldF90aHJlc2hvbGQoaW5mbywgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBDWUdFVERFRlRIUkVTSDoKKwkJcmV0X3ZhbCA9IGdldF9kZWZhdWx0X3RocmVzaG9sZChpbmZvLCBhcmdwKTsKKwkJYnJlYWs7CisJY2FzZSBDWVNFVERFRlRIUkVTSDoKKwkJcmV0X3ZhbCA9IHNldF9kZWZhdWx0X3RocmVzaG9sZChpbmZvLCBhcmcpOworCQlicmVhazsKKwljYXNlIENZR0VUVElNRU9VVDoKKwkJcmV0X3ZhbCA9IGdldF90aW1lb3V0KGluZm8sIGFyZ3ApOworCQlicmVhazsKKwljYXNlIENZU0VUVElNRU9VVDoKKwkJcmV0X3ZhbCA9IHNldF90aW1lb3V0KGluZm8sIGFyZyk7CisJCWJyZWFrOworCWNhc2UgQ1lHRVRERUZUSU1FT1VUOgorCQlyZXRfdmFsID0gZ2V0X2RlZmF1bHRfdGltZW91dChpbmZvLCBhcmdwKTsKKwkJYnJlYWs7CisJY2FzZSBDWVNFVERFRlRJTUVPVVQ6CisJCXJldF92YWwgPSBzZXRfZGVmYXVsdF90aW1lb3V0KGluZm8sIGFyZyk7CisJCWJyZWFrOworCWNhc2UgQ1lTRVRSRkxPVzoKKwkJaW5mby0+cmZsb3cgPSAoaW50KWFyZzsKKwkJcmV0X3ZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgQ1lHRVRSRkxPVzoKKwkJcmV0X3ZhbCA9IGluZm8tPnJmbG93OworCQlicmVhazsKKwljYXNlIENZU0VUUlRTRFRSX0lOVjoKKwkJaW5mby0+cnRzZHRyX2ludiA9IChpbnQpYXJnOworCQlyZXRfdmFsID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDWUdFVFJUU0RUUl9JTlY6CisJCXJldF92YWwgPSBpbmZvLT5ydHNkdHJfaW52OworCQlicmVhazsKKwljYXNlIENZR0VUQ0FSRElORk86CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmN5X2NhcmRbaW5mby0+Y2FyZF0sCisJCQkJIHNpemVvZihzdHJ1Y3QgY3ljbGFkZXNfY2FyZCkpKSB7CisJCQlyZXRfdmFsID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCXJldF92YWwgPSAwOworCQlicmVhazsKIAljYXNlIENZR0VUQ0QxNDAwVkVSOgotCSAgICByZXRfdmFsID0gaW5mby0+Y2hpcF9yZXY7Ci0JICAgIGJyZWFrOworCQlyZXRfdmFsID0gaW5mby0+Y2hpcF9yZXY7CisJCWJyZWFrOwogI2lmbmRlZiBDT05GSUdfQ1laX0lOVFIKIAljYXNlIENZWlNFVFBPTExDWUNMRToKLSAgICAgICAgICAgIGN5el9wb2xsaW5nX2N5Y2xlID0gKGFyZyAqIEhaKSAvIDEwMDA7Ci0JICAgIHJldF92YWwgPSAwOwotCSAgICBicmVhazsKKwkJY3l6X3BvbGxpbmdfY3ljbGUgPSAoYXJnICogSFopIC8gMTAwMDsKKwkJcmV0X3ZhbCA9IDA7CisJCWJyZWFrOwogCWNhc2UgQ1laR0VUUE9MTENZQ0xFOgotICAgICAgICAgICAgcmV0X3ZhbCA9IChjeXpfcG9sbGluZ19jeWNsZSAqIDEwMDApIC8gSFo7Ci0JICAgIGJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19DWVpfSU5UUiAqLworCQlyZXRfdmFsID0gKGN5el9wb2xsaW5nX2N5Y2xlICogMTAwMCkgLyBIWjsKKwkJYnJlYWs7CisjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCiAJY2FzZSBDWVNFVFdBSVQ6Ci0gICAgCSAgICBpbmZvLT5jbG9zaW5nX3dhaXQgPSAodW5zaWduZWQgc2hvcnQpYXJnICogSFovMTAwOwotCSAgICByZXRfdmFsID0gMDsKLQkgICAgYnJlYWs7CisJCWluZm8tPmNsb3Npbmdfd2FpdCA9ICh1bnNpZ25lZCBzaG9ydClhcmcgKkhaIC8gMTAwOworCQlyZXRfdmFsID0gMDsKKwkJYnJlYWs7CiAJY2FzZSBDWUdFVFdBSVQ6Ci0JICAgIHJldF92YWwgPSBpbmZvLT5jbG9zaW5nX3dhaXQgLyAoSFovMTAwKTsKLQkgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVElPQ0dTRVJJQUw6Ci0gICAgICAgICAgICByZXRfdmFsID0gZ2V0X3NlcmlhbF9pbmZvKGluZm8sIGFyZ3ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVElPQ1NTRVJJQUw6Ci0gICAgICAgICAgICByZXRfdmFsID0gc2V0X3NlcmlhbF9pbmZvKGluZm8sIGFyZ3ApOwotICAgICAgICAgICAgYnJlYWs7Ci0JY2FzZSBUSU9DU0VSR0VUTFNSOiAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KLQkgICAgcmV0X3ZhbCA9IGdldF9sc3JfaW5mbyhpbmZvLCBhcmdwKTsKLQkgICAgYnJlYWs7Ci0JLyoKLQkgKiBXYWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykgdG8gY2hhbmdlIAotCSAqIC0gbWFzayBwYXNzZWQgaW4gYXJnIGZvciBsaW5lcyBvZiBpbnRlcmVzdAotCSAqICAgKHVzZSB8J2VkIFRJT0NNX1JORy9EU1IvQ0QvQ1RTIGZvciBtYXNraW5nKQotCSAqIENhbGxlciBzaG91bGQgdXNlIFRJT0NHSUNPVU5UIHRvIHNlZSB3aGljaCBvbmUgaXQgd2FzCi0JICovCisJCXJldF92YWwgPSBpbmZvLT5jbG9zaW5nX3dhaXQgLyAoSFogLyAxMDApOworCQlicmVhazsKKwljYXNlIFRJT0NHU0VSSUFMOgorCQlyZXRfdmFsID0gZ2V0X3NlcmlhbF9pbmZvKGluZm8sIGFyZ3ApOworCQlicmVhazsKKwljYXNlIFRJT0NTU0VSSUFMOgorCQlyZXRfdmFsID0gc2V0X3NlcmlhbF9pbmZvKGluZm8sIGFyZ3ApOworCQlicmVhazsKKwljYXNlIFRJT0NTRVJHRVRMU1I6CS8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworCQlyZXRfdmFsID0gZ2V0X2xzcl9pbmZvKGluZm8sIGFyZ3ApOworCQlicmVhazsKKwkJLyoKKwkJICogV2FpdCBmb3IgYW55IG9mIHRoZSA0IG1vZGVtIGlucHV0cyAoRENELFJJLERTUixDVFMpIHRvIGNoYW5nZQorCQkgKiAtIG1hc2sgcGFzc2VkIGluIGFyZyBmb3IgbGluZXMgb2YgaW50ZXJlc3QKKwkJICogICAodXNlIHwnZWQgVElPQ01fUk5HL0RTUi9DRC9DVFMgZm9yIG1hc2tpbmcpCisJCSAqIENhbGxlciBzaG91bGQgdXNlIFRJT0NHSUNPVU5UIHRvIHNlZSB3aGljaCBvbmUgaXQgd2FzCisJCSAqLwogCWNhc2UgVElPQ01JV0FJVDoKLQkgICAgQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0JICAgIC8qIG5vdGUgdGhlIGNvdW50ZXJzIG9uIGVudHJ5ICovCi0JICAgIGNwcmV2ID0gaW5mby0+aWNvdW50OwotCSAgICBDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotCSAgICB3aGlsZSAoMSkgewotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7Ci0JCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCSAgICByZXR1cm4gLUVSRVNUQVJUU1lTOwotCQl9Ci0KIAkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0JCWNub3cgPSBpbmZvLT5pY291bnQ7IC8qIGF0b21pYyBjb3B5ICovCisJCS8qIG5vdGUgdGhlIGNvdW50ZXJzIG9uIGVudHJ5ICovCisJCWNwcmV2ID0gaW5mby0+aWNvdW50OwogCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQl3aGlsZSAoMSkgeworCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCX0KIAotCQlpZiAoY25vdy5ybmcgPT0gY3ByZXYucm5nICYmIGNub3cuZHNyID09IGNwcmV2LmRzciAmJiAKLQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpIHsKLQkJICAgIHJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KLQkJfQotCQlpZiAoICgoYXJnICYgVElPQ01fUk5HKSAmJiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHwgCi0JCSAgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fCAKLQkJICAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpIHx8IAotCQkgICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY25vdy5jdHMgIT0gY3ByZXYuY3RzKSkgKSB7Ci0JCSAgICByZXR1cm4gMDsKLQkJfQotCQljcHJldiA9IGNub3c7Ci0JICAgIH0KLQkgICAgLyogTk9UUkVBQ0hFRCAqLworCQkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCQljbm93ID0gaW5mby0+aWNvdW50OwkvKiBhdG9taWMgY29weSAqLworCQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKIAotCS8qCi0JICogR2V0IGNvdW50ZXIgb2YgaW5wdXQgc2VyaWFsIGxpbmUgaW50ZXJydXB0cyAoRENELFJJLERTUixDVFMpCi0JICogUmV0dXJuOiB3cml0ZSBjb3VudGVycyB0byB0aGUgdXNlciBwYXNzZWQgY291bnRlciBzdHJ1Y3QKLQkgKiBOQjogYm90aCAxLT4wIGFuZCAwLT4xIHRyYW5zaXRpb25zIGFyZSBjb3VudGVkIGV4Y2VwdCBmb3IKLQkgKiAgICAgUkkgd2hlcmUgb25seSAwLT4xIGlzIGNvdW50ZWQuCi0JICovCisJCQlpZiAoY25vdy5ybmcgPT0gY3ByZXYucm5nICYmIGNub3cuZHNyID09IGNwcmV2LmRzciAmJgorCQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpIHsKKwkJCQlyZXR1cm4gLUVJTzsJLyogbm8gY2hhbmdlID0+IGVycm9yICovCisJCQl9CisJCQlpZiAoKChhcmcgJiBUSU9DTV9STkcpICYmIChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAorCQkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHwKKwkJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAmJiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKKwkJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNub3cuY3RzICE9IGNwcmV2LmN0cykpKSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQljcHJldiA9IGNub3c7CisJCX0KKwkJLyogTk9UUkVBQ0hFRCAqLworCisJCS8qCisJCSAqIEdldCBjb3VudGVyIG9mIGlucHV0IHNlcmlhbCBsaW5lIGludGVycnVwdHMgKERDRCxSSSxEU1IsQ1RTKQorCQkgKiBSZXR1cm46IHdyaXRlIGNvdW50ZXJzIHRvIHRoZSB1c2VyIHBhc3NlZCBjb3VudGVyIHN0cnVjdAorCQkgKiBOQjogYm90aCAxLT4wIGFuZCAwLT4xIHRyYW5zaXRpb25zIGFyZSBjb3VudGVkIGV4Y2VwdCBmb3IKKwkJICogICAgIFJJIHdoZXJlIG9ubHkgMC0+MSBpcyBjb3VudGVkLgorCQkgKi8KIAljYXNlIFRJT0NHSUNPVU5UOgotCSAgICBDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQkgICAgY25vdyA9IGluZm8tPmljb3VudDsKLQkgICAgQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLQkgICAgcF9jdXNlciA9IGFyZ3A7Ci0JICAgIHJldF92YWwgPSBwdXRfdXNlcihjbm93LmN0cywgJnBfY3VzZXItPmN0cyk7Ci0JICAgIGlmIChyZXRfdmFsKSByZXR1cm4gcmV0X3ZhbDsKLQkgICAgcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cuZHNyLCAmcF9jdXNlci0+ZHNyKTsKLQkgICAgaWYgKHJldF92YWwpIHJldHVybiByZXRfdmFsOwotCSAgICByZXRfdmFsID0gcHV0X3VzZXIoY25vdy5ybmcsICZwX2N1c2VyLT5ybmcpOwotCSAgICBpZiAocmV0X3ZhbCkgcmV0dXJuIHJldF92YWw7Ci0JICAgIHJldF92YWwgPSBwdXRfdXNlcihjbm93LmRjZCwgJnBfY3VzZXItPmRjZCk7Ci0JICAgIGlmIChyZXRfdmFsKSByZXR1cm4gcmV0X3ZhbDsKLQkgICAgcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cucngsICZwX2N1c2VyLT5yeCk7Ci0JICAgIGlmIChyZXRfdmFsKSByZXR1cm4gcmV0X3ZhbDsKLQkgICAgcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cudHgsICZwX2N1c2VyLT50eCk7Ci0JICAgIGlmIChyZXRfdmFsKSByZXR1cm4gcmV0X3ZhbDsKLQkgICAgcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cuZnJhbWUsICZwX2N1c2VyLT5mcmFtZSk7Ci0JICAgIGlmIChyZXRfdmFsKSByZXR1cm4gcmV0X3ZhbDsKLQkgICAgcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cub3ZlcnJ1biwgJnBfY3VzZXItPm92ZXJydW4pOwotCSAgICBpZiAocmV0X3ZhbCkgcmV0dXJuIHJldF92YWw7Ci0JICAgIHJldF92YWwgPSBwdXRfdXNlcihjbm93LnBhcml0eSwgJnBfY3VzZXItPnBhcml0eSk7Ci0JICAgIGlmIChyZXRfdmFsKSByZXR1cm4gcmV0X3ZhbDsKLQkgICAgcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cuYnJrLCAmcF9jdXNlci0+YnJrKTsKLQkgICAgaWYgKHJldF92YWwpIHJldHVybiByZXRfdmFsOwotCSAgICByZXRfdmFsID0gcHV0X3VzZXIoY25vdy5idWZfb3ZlcnJ1biwgJnBfY3VzZXItPmJ1Zl9vdmVycnVuKTsKLQkgICAgaWYgKHJldF92YWwpIHJldHVybiByZXRfdmFsOwotCSAgICByZXRfdmFsID0gMDsKLQkgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXRfdmFsID0gLUVOT0lPQ1RMQ01EOwotICAgIH0KKwkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCWNub3cgPSBpbmZvLT5pY291bnQ7CisJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJCXBfY3VzZXIgPSBhcmdwOworCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5jdHMsICZwX2N1c2VyLT5jdHMpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOworCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5kc3IsICZwX2N1c2VyLT5kc3IpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOworCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5ybmcsICZwX2N1c2VyLT5ybmcpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOworCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5kY2QsICZwX2N1c2VyLT5kY2QpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOworCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5yeCwgJnBfY3VzZXItPnJ4KTsKKwkJaWYgKHJldF92YWwpCisJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJcmV0X3ZhbCA9IHB1dF91c2VyKGNub3cudHgsICZwX2N1c2VyLT50eCk7CisJCWlmIChyZXRfdmFsKQorCQkJcmV0dXJuIHJldF92YWw7CisJCXJldF92YWwgPSBwdXRfdXNlcihjbm93LmZyYW1lLCAmcF9jdXNlci0+ZnJhbWUpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOworCQlyZXRfdmFsID0gcHV0X3VzZXIoY25vdy5vdmVycnVuLCAmcF9jdXNlci0+b3ZlcnJ1bik7CisJCWlmIChyZXRfdmFsKQorCQkJcmV0dXJuIHJldF92YWw7CisJCXJldF92YWwgPSBwdXRfdXNlcihjbm93LnBhcml0eSwgJnBfY3VzZXItPnBhcml0eSk7CisJCWlmIChyZXRfdmFsKQorCQkJcmV0dXJuIHJldF92YWw7CisJCXJldF92YWwgPSBwdXRfdXNlcihjbm93LmJyaywgJnBfY3VzZXItPmJyayk7CisJCWlmIChyZXRfdmFsKQorCQkJcmV0dXJuIHJldF92YWw7CisJCXJldF92YWwgPSBwdXRfdXNlcihjbm93LmJ1Zl9vdmVycnVuLCAmcF9jdXNlci0+YnVmX292ZXJydW4pOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOworCQlyZXRfdmFsID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0X3ZhbCA9IC1FTk9JT0NUTENNRDsKKwl9CiAKICNpZmRlZiBDWV9ERUJVR19PVEhFUgotICAgIHByaW50aygiIGN5YzpjeV9pb2N0bCBkb25lXG4iKTsKKwlwcmludGsoIiBjeWM6Y3lfaW9jdGwgZG9uZVxuIik7CiAjZW5kaWYKIAotICAgIHJldHVybiByZXRfdmFsOwotfSAvKiBjeV9pb2N0bCAqLwotCisJcmV0dXJuIHJldF92YWw7Cit9CQkJCS8qIGN5X2lvY3RsICovCiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgYWxsb3dzIHRoZSB0dHkgZHJpdmVyIHRvIGJlIG5vdGlmaWVkIHdoZW4KQEAgLTQxMDAsNjYgKzQyMDksNjQgQEAKICAqIHdlbGwtZGVzaWduZWQgdHR5IGRyaXZlciBzaG91bGQgYmUgcHJlcGFyZWQgdG8gYWNjZXB0IHRoZSBjYXNlCiAgKiB3aGVyZSBvbGQgPT0gTlVMTCwgYW5kIHRyeSB0byBkbyBzb21ldGhpbmcgcmF0aW9uYWwuCiAgKi8KLXN0YXRpYyB2b2lkCi1jeV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgY3lfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKLSAgc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKIAogI2lmZGVmIENZX0RFQlVHX09USEVSCi0gICAgcHJpbnRrKCJjeWM6Y3lfc2V0X3Rlcm1pb3MgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsKKwlwcmludGsoImN5YzpjeV9zZXRfdGVybWlvcyB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOwogI2VuZGlmCiAKLSAgICBpZiAoKHR0eS0+dGVybWlvcy0+Y19jZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykgJiYKLQkoKHR0eS0+dGVybWlvcy0+Y19pZmxhZyAmIChJWE9OfElYQU5ZKSkgPT0gCi0JIChvbGRfdGVybWlvcy0+Y19pZmxhZyAmIChJWE9OfElYQU5ZKSkpKQotICAgICAgICByZXR1cm47Ci0gICAgc2V0X2xpbmVfY2hhcihpbmZvKTsKKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnICYmCisJCQkodHR5LT50ZXJtaW9zLT5jX2lmbGFnICYgKElYT04gfCBJWEFOWSkpID09CisJCQkob2xkX3Rlcm1pb3MtPmNfaWZsYWcgJiAoSVhPTiB8IElYQU5ZKSkpCisJCXJldHVybjsKKwlzZXRfbGluZV9jaGFyKGluZm8pOwogCi0gICAgaWYgKChvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpICYmCi0gICAgICAgICEodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykpIHsKLSAgICAgICAgICAgIHR0eS0+aHdfc3RvcHBlZCA9IDA7Ci0gICAgICAgICAgICBjeV9zdGFydCh0dHkpOwotICAgIH0KKwlpZiAoKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYKKwkJCSEodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykpIHsKKwkJdHR5LT5od19zdG9wcGVkID0gMDsKKwkJY3lfc3RhcnQodHR5KTsKKwl9CiAjaWYgMAotICAgIC8qCi0gICAgICogTm8gbmVlZCB0byB3YWtlIHVwIHByb2Nlc3NlcyBpbiBvcGVuIHdhaXQsIHNpbmNlIHRoZXkKLSAgICAgKiBzYW1wbGUgdGhlIENMT0NBTCBmbGFnIG9uY2UsIGFuZCBkb24ndCByZWNoZWNrIGl0LgotICAgICAqIFhYWCAgSXQncyBub3QgY2xlYXIgd2hldGhlciB0aGUgY3VycmVudCBiZWhhdmlvciBpcyBjb3JyZWN0Ci0gICAgICogb3Igbm90LiAgSGVuY2UsIHRoaXMgbWF5IGNoYW5nZS4uLi4uCi0gICAgICovCi0gICAgaWYgKCEob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpICYmCi0gICAgICAgICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpKQotICAgICAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOworCS8qCisJICogTm8gbmVlZCB0byB3YWtlIHVwIHByb2Nlc3NlcyBpbiBvcGVuIHdhaXQsIHNpbmNlIHRoZXkKKwkgKiBzYW1wbGUgdGhlIENMT0NBTCBmbGFnIG9uY2UsIGFuZCBkb24ndCByZWNoZWNrIGl0LgorCSAqIFhYWCAgSXQncyBub3QgY2xlYXIgd2hldGhlciB0aGUgY3VycmVudCBiZWhhdmlvciBpcyBjb3JyZWN0CisJICogb3Igbm90LiAgSGVuY2UsIHRoaXMgbWF5IGNoYW5nZS4uLi4uCisJICovCisJaWYgKCEob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpICYmCisJICAgICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CiAjZW5kaWYKLQotICAgIHJldHVybjsKLX0gLyogY3lfc2V0X3Rlcm1pb3MgKi8KK30JCQkJLyogY3lfc2V0X3Rlcm1pb3MgKi8KIAogLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbmQgYSBoaWdoLXByaW9yaXR5IFhPTi9YT0ZGIGNoYXJhY3RlciB0bwogICAgdGhlIGRldmljZS4KICovCi1zdGF0aWMgdm9pZAotY3lfc2VuZF94Y2hhciAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCkKK3N0YXRpYyB2b2lkIGN5X3NlbmRfeGNoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCkKIHsKLQlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgY2FyZCwgY2hhbm5lbDsKIAotCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2sgKGluZm8sIHR0eS0+bmFtZSwgImN5X3NlbmRfeGNoYXIiKSkKKwlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X3NlbmRfeGNoYXIiKSkKIAkJcmV0dXJuOwogCi0gIAlpbmZvLT54X2NoYXIgPSBjaDsKKwlpbmZvLT54X2NoYXIgPSBjaDsKIAogCWlmIChjaCkKLQkJY3lfc3RhcnQgKHR0eSk7CisJCWN5X3N0YXJ0KHR0eSk7CiAKIAljYXJkID0gaW5mby0+Y2FyZDsKIAljaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZTsKIAotCWlmIChJU19DWUNfWiAoY3lfY2FyZFtjYXJkXSkpIHsKLQkJaWYgKGNoID09IFNUT1BfQ0hBUiAodHR5KSkKLQkgIAkJY3l6X2lzc3VlX2NtZCAoJmN5X2NhcmRbY2FyZF0sIGNoYW5uZWwsIENfQ01fU0VORFhPRkYsIDBMKTsKLQkJZWxzZSBpZiAoY2ggPT0gU1RBUlRfQ0hBUiAodHR5KSkKLQkJCWN5el9pc3N1ZV9jbWQgKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX1NFTkRYT04sIDBMKTsKKwlpZiAoSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwkJaWYgKGNoID09IFNUT1BfQ0hBUih0dHkpKQorCQkJY3l6X2lzc3VlX2NtZCgmY3lfY2FyZFtjYXJkXSwgY2hhbm5lbCwgQ19DTV9TRU5EWE9GRiwKKwkJCQkJMEwpOworCQllbHNlIGlmIChjaCA9PSBTVEFSVF9DSEFSKHR0eSkpCisJCQljeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX1NFTkRYT04sCisJCQkJCTBMKTsKIAl9CiB9CiAKQEAgLTQxNjcsMjYwICs0Mjc0LDI0OCBAQAogICAgdGhhdCBpbmNvbWluZyBjaGFyYWN0ZXJzIHNob3VsZCBiZSB0aHJvdHRsZWQgYmVjYXVzZSB0aGUgaW5wdXQKICAgIGJ1ZmZlcnMgYXJlIGNsb3NlIHRvIGZ1bGwuCiAgKi8KLXN0YXRpYyB2b2lkCi1jeV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3N0YXRpYyB2b2lkIGN5X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKLSAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Ci0gIGludCBjYXJkLGNoaXAsY2hhbm5lbCxpbmRleDsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKKwlpbnQgY2FyZCwgY2hpcCwgY2hhbm5lbCwgaW5kZXg7CiAKICNpZmRlZiBDWV9ERUJVR19USFJPVFRMRQotICBjaGFyIGJ1Zls2NF07CisJY2hhciBidWZbNjRdOwogCi0gICAgcHJpbnRrKCJjeWM6dGhyb3R0bGUgJXM6ICVkLi4uLnR0eUMlZFxuIiwgCi0JICAgdHR5X25hbWUodHR5LCBidWYpLAotICAgICAgICAgICB0dHktPmxkaXNjLmNoYXJzX2luX2J1ZmZlcih0dHkpLCBpbmZvLT5saW5lKTsKKwlwcmludGsoImN5Yzp0aHJvdHRsZSAlczogJWQuLi4udHR5QyVkXG4iLCB0dHlfbmFtZSh0dHksIGJ1ZiksCisJCQl0dHktPmxkaXNjLmNoYXJzX2luX2J1ZmZlcih0dHkpLCBpbmZvLT5saW5lKTsKICNlbmRpZgogCi0gICAgaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV90aHJvdHRsZSIpKXsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV90aHJvdHRsZSIpKSB7CisJCXJldHVybjsKKwl9CiAKLSAgICBjYXJkID0gaW5mby0+Y2FyZDsKKwljYXJkID0gaW5mby0+Y2FyZDsKIAotICAgIGlmIChJX0lYT0ZGKHR0eSkpIHsKLSAgICAgICAgaWYgKCFJU19DWUNfWiAoY3lfY2FyZFtjYXJkXSkpCi0gICAgICAgICAgICBjeV9zZW5kX3hjaGFyICh0dHksIFNUT1BfQ0hBUiAodHR5KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluZm8tPnRocm90dGxlID0gMTsKLSAgICB9CisJaWYgKElfSVhPRkYodHR5KSkgeworCQlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKQorCQkJY3lfc2VuZF94Y2hhcih0dHksIFNUT1BfQ0hBUih0dHkpKTsKKwkJZWxzZQorCQkJaW5mby0+dGhyb3R0bGUgPSAxOworCX0KIAotICAgIGlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0gICAgICAgIGNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lOwotICAgICAgICBpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7Ci0gICAgICAgICAgICBjaGlwID0gY2hhbm5lbD4+MjsKLSAgICAgICAgICAgIGNoYW5uZWwgJj0gMHgwMzsKLSAgICAgICAgICAgIGluZGV4ID0gY3lfY2FyZFtjYXJkXS5idXNfaW5kZXg7Ci0gICAgICAgICAgICBiYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXTw8aW5kZXgpOworCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCWNoYW5uZWwgPSBpbmZvLT5saW5lIC0gY3lfY2FyZFtjYXJkXS5maXJzdF9saW5lOworCQlpZiAoIUlTX0NZQ19aKGN5X2NhcmRbY2FyZF0pKSB7CisJCQljaGlwID0gY2hhbm5lbCA+PiAyOworCQkJY2hhbm5lbCAmPSAweDAzOworCQkJaW5kZXggPSBjeV9jYXJkW2NhcmRdLmJ1c19pbmRleDsKKwkJCWJhc2VfYWRkciA9IGN5X2NhcmRbY2FyZF0uYmFzZV9hZGRyICsKKwkJCQkoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOwogCi0gICAgICAgICAgICBDWV9MT0NLKGluZm8sIGZsYWdzKTsKLSAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5Q0FSPDxpbmRleCksICh1X2NoYXIpY2hhbm5lbCk7Ci0gICAgICAgICAgICBpZiAoaW5mby0+cnRzZHRyX2ludikgewotICAgICAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TVNWUjI8PGluZGV4KSwgfkN5RFRSKTsKLSAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5TVNWUjE8PGluZGV4KSwgfkN5UlRTKTsKLQkgICAgIH0KLQkgICAgQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLQl9IGVsc2UgewotCSAgICBpbmZvLT50aHJvdHRsZSA9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm47Ci19IC8qIGN5X3Rocm90dGxlICovCi0KKwkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCisJCQkJICAodV9jaGFyKSBjaGFubmVsKTsKKwkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKKwkJCQkJICB+Q3lEVFIpOworCQkJfSBlbHNlIHsKKwkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpLAorCQkJCQkgIH5DeVJUUyk7CisJCQl9CisJCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCQl9IGVsc2UgeworCQkJaW5mby0+dGhyb3R0bGUgPSAxOworCQl9CisJfQorfQkJCQkvKiBjeV90aHJvdHRsZSAqLwogCiAvKgogICogVGhpcyByb3V0aW5lIG5vdGlmaWVzIHRoZSB0dHkgZHJpdmVyIHRoYXQgaXQgc2hvdWxkIHNpZ25hbAogICogdGhhdCBjaGFyYWN0ZXJzIGNhbiBub3cgYmUgc2VudCB0byB0aGUgdHR5IHdpdGhvdXQgZmVhciBvZgogICogb3ZlcnJ1bm5pbmcgdGhlIGlucHV0IGJ1ZmZlcnMgb2YgdGhlIGxpbmUgZGlzY2lwbGluZXMuCiAgKi8KLXN0YXRpYyB2b2lkCi1jeV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQorc3RhdGljIHZvaWQgY3lfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotICBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0gIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gIHZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotICBpbnQgY2FyZCxjaGlwLGNoYW5uZWwsaW5kZXg7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisJaW50IGNhcmQsIGNoaXAsIGNoYW5uZWwsIGluZGV4OwogCiAjaWZkZWYgQ1lfREVCVUdfVEhST1RUTEUKLSAgY2hhciBidWZbNjRdOwotICAgICAgICAKLSAgICBwcmludGsoImN5Yzp1bnRocm90dGxlICVzOiAlZC4uLi50dHlDJWRcbiIsIAotCSAgIHR0eV9uYW1lKHR0eSwgYnVmKSwKLSAgICAgICAgICAgdHR5LT5sZGlzYy5jaGFyc19pbl9idWZmZXIodHR5KSwgaW5mby0+bGluZSk7CisJY2hhciBidWZbNjRdOworCisJcHJpbnRrKCJjeWM6dW50aHJvdHRsZSAlczogJWQuLi4udHR5QyVkXG4iLCB0dHlfbmFtZSh0dHksIGJ1ZiksCisJCXR0eS0+bGRpc2MuY2hhcnNfaW5fYnVmZmVyKHR0eSksIGluZm8tPmxpbmUpOwogI2VuZGlmCiAKLSAgICBpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X3VudGhyb3R0bGUiKSl7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKElfSVhPRkYodHR5KSkgewotCWlmIChpbmZvLT54X2NoYXIpCi0JICAgIGluZm8tPnhfY2hhciA9IDA7Ci0JZWxzZQotCSAgICBjeV9zZW5kX3hjaGFyICh0dHksIFNUQVJUX0NIQVIgKHR0eSkpOwotICAgIH0KLQotICAgIGlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0gICAgICAgIGNhcmQgPSBpbmZvLT5jYXJkOwotICAgICAgICBjaGFubmVsID0gaW5mby0+bGluZSAtIGN5X2NhcmRbY2FyZF0uZmlyc3RfbGluZTsKLSAgICAgICAgaWYgKCFJU19DWUNfWihjeV9jYXJkW2NhcmRdKSkgewotCSAgICBjaGlwID0gY2hhbm5lbD4+MjsKLQkgICAgY2hhbm5lbCAmPSAweDAzOwotCSAgICBpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OwotCSAgICBiYXNlX2FkZHIgPSBjeV9jYXJkW2NhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXTw8aW5kZXgpOwotCi0JICAgIENZX0xPQ0soaW5mbywgZmxhZ3MpOwotCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUNBUjw8aW5kZXgpLCAodV9jaGFyKWNoYW5uZWwpOwotCSAgICBpZiAoaW5mby0+cnRzZHRyX2ludikgewotCQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lNU1ZSMjw8aW5kZXgpLCBDeURUUik7Ci0JICAgIH0gZWxzZSB7Ci0JCSAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeU1TVlIxPDxpbmRleCksIEN5UlRTKTsKLQkgICAgfQotCSAgICBDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotICAgICAgICB9IGVsc2UgewotCSAgICBpbmZvLT50aHJvdHRsZSA9IDA7CisJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV91bnRocm90dGxlIikpIHsKKwkJcmV0dXJuOwogCX0KLSAgICB9CiAKLSAgICByZXR1cm47Ci19IC8qIGN5X3VudGhyb3R0bGUgKi8KKwlpZiAoSV9JWE9GRih0dHkpKSB7CisJCWlmIChpbmZvLT54X2NoYXIpCisJCQlpbmZvLT54X2NoYXIgPSAwOworCQllbHNlCisJCQljeV9zZW5kX3hjaGFyKHR0eSwgU1RBUlRfQ0hBUih0dHkpKTsKKwl9CiAKKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgeworCQljYXJkID0gaW5mby0+Y2FyZDsKKwkJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmU7CisJCWlmICghSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsKKwkJCWNoaXAgPSBjaGFubmVsID4+IDI7CisJCQljaGFubmVsICY9IDB4MDM7CisJCQlpbmRleCA9IGN5X2NhcmRbY2FyZF0uYnVzX2luZGV4OworCQkJYmFzZV9hZGRyID0gY3lfY2FyZFtjYXJkXS5iYXNlX2FkZHIgKworCQkJCShjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CisKKwkJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksCisJCQkJICAodV9jaGFyKSBjaGFubmVsKTsKKwkJCWlmIChpbmZvLT5ydHNkdHJfaW52KSB7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeU1TVlIyIDw8IGluZGV4KSwKKwkJCQkJICBDeURUUik7CisJCQl9IGVsc2UgeworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNU1ZSMSA8PCBpbmRleCksCisJCQkJCSAgQ3lSVFMpOworCQkJfQorCQkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCWluZm8tPnRocm90dGxlID0gMDsKKwkJfQorCX0KK30JCQkJLyogY3lfdW50aHJvdHRsZSAqLwogCiAvKiBjeV9zdGFydCBhbmQgY3lfc3RvcCBwcm92aWRlIHNvZnR3YXJlIG91dHB1dCBmbG93IGNvbnRyb2wgYXMgYQogICAgZnVuY3Rpb24gb2YgWE9OL1hPRkYsIHNvZnR3YXJlIENUUywgYW5kIG90aGVyIHN1Y2ggc3R1ZmYuCiAqLwotc3RhdGljIHZvaWQKLWN5X3N0b3Aoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3N0YXRpYyB2b2lkIGN5X3N0b3Aoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLSAgc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOwotICBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0gIHZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotICBpbnQgY2hpcCxjaGFubmVsLGluZGV4OwotICB1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisJaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICNpZmRlZiBDWV9ERUJVR19PVEhFUgotICAgIHByaW50aygiY3ljOmN5X3N0b3AgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsgLyogKi8KKwlwcmludGsoImN5YzpjeV9zdG9wIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CS8qICovCiAjZW5kaWYKIAotICAgIGlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfc3RvcCIpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNpbmZvID0gJmN5X2NhcmRbaW5mby0+Y2FyZF07Ci0gICAgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjaW5mby0+Zmlyc3RfbGluZTsKLSAgICBpZiAoIUlTX0NZQ19aKCpjaW5mbykpIHsKLSAgICAgICAgaW5kZXggPSBjaW5mby0+YnVzX2luZGV4OwotICAgICAgICBjaGlwID0gY2hhbm5lbD4+MjsKLSAgICAgICAgY2hhbm5lbCAmPSAweDAzOwotICAgICAgICBiYXNlX2FkZHIgPSBjeV9jYXJkW2luZm8tPmNhcmRdLmJhc2VfYWRkciArIChjeV9jaGlwX29mZnNldFtjaGlwXTw8aW5kZXgpOworCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfc3RvcCIpKQorCQlyZXR1cm47CiAKLQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKLSAgICAgICAgICAgIGN5X3dyaXRlYihiYXNlX2FkZHIrKEN5Q0FSPDxpbmRleCksCi0JICAgICAgICh1X2NoYXIpKGNoYW5uZWwgJiAweDAwMDMpKTsgLyogaW5kZXggY2hhbm5lbCAqLwotICAgICAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lTUkVSPDxpbmRleCksIAotICAgICAgICAgICAgICAgY3lfcmVhZGIoYmFzZV9hZGRyKyhDeVNSRVI8PGluZGV4KSkgJiB+Q3lUeFJkeSk7Ci0JQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKLSAgICB9IGVsc2UgewotCS8vIE5vdGhpbmcgdG8gZG8hCi0gICAgfQorCWNpbmZvID0gJmN5X2NhcmRbaW5mby0+Y2FyZF07CisJY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjaW5mby0+Zmlyc3RfbGluZTsKKwlpZiAoIUlTX0NZQ19aKCpjaW5mbykpIHsKKwkJaW5kZXggPSBjaW5mby0+YnVzX2luZGV4OworCQljaGlwID0gY2hhbm5lbCA+PiAyOworCQljaGFubmVsICY9IDB4MDM7CisJCWJhc2VfYWRkciA9IGN5X2NhcmRbaW5mby0+Y2FyZF0uYmFzZV9hZGRyICsKKwkJCShjeV9jaGlwX29mZnNldFtjaGlwXSA8PCBpbmRleCk7CiAKLSAgICByZXR1cm47Ci19IC8qIGN5X3N0b3AgKi8KLQotCi1zdGF0aWMgdm9pZAotY3lfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLSAgc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOwotICBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0gIHZvaWQgX19pb21lbSAqYmFzZV9hZGRyOwotICBpbnQgY2hpcCxjaGFubmVsLGluZGV4OwotICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0jaWZkZWYgQ1lfREVCVUdfT1RIRVIKLSAgICBwcmludGsoImN5YzpjeV9zdGFydCB0dHlDJWRcbiIsIGluZm8tPmxpbmUpOyAvKiAqLwotI2VuZGlmCi0KLSAgICBpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X3N0YXJ0IikpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2luZm8gPSAmY3lfY2FyZFtpbmZvLT5jYXJkXTsKLSAgICBjaGFubmVsID0gaW5mby0+bGluZSAtIGNpbmZvLT5maXJzdF9saW5lOwotICAgIGluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKLSAgICBpZiAoIUlTX0NZQ19aKCpjaW5mbykpIHsKLSAgICAgICAgY2hpcCA9IGNoYW5uZWw+PjI7Ci0gICAgICAgIGNoYW5uZWwgJj0gMHgwMzsKLSAgICAgICAgYmFzZV9hZGRyID0gY3lfY2FyZFtpbmZvLT5jYXJkXS5iYXNlX2FkZHIgKyAoY3lfY2hpcF9vZmZzZXRbY2hpcF08PGluZGV4KTsKLQotCUNZX0xPQ0soaW5mbywgZmxhZ3MpOwotICAgICAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lDQVI8PGluZGV4KSwKLQkgICAgICAgKHVfY2hhcikoY2hhbm5lbCAmIDB4MDAwMykpOyAvKiBpbmRleCBjaGFubmVsICovCi0gICAgICAgICAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeVNSRVI8PGluZGV4KSwgCi0gICAgICAgICAgICAgICBjeV9yZWFkYihiYXNlX2FkZHIrKEN5U1JFUjw8aW5kZXgpKSB8IEN5VHhSZHkpOwotCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0gICAgfSBlbHNlIHsKLQkvLyBOb3RoaW5nIHRvIGRvIQotICAgIH0KLQotICAgIHJldHVybjsKLX0gLyogY3lfc3RhcnQgKi8KLQotCi1zdGF0aWMgdm9pZAotY3lfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKLSAgaW50IGNhcmQsIGNoYW5uZWwsIHJldHZhbDsKLSAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0jaWZkZWYgQ1lfREVCVUdfSU8KLSAgICBwcmludGsoImN5YzpjeV9mbHVzaF9idWZmZXIgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsgLyogKi8KLSNlbmRpZgotCi0gICAgaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9mbHVzaF9idWZmZXIiKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FyZCA9IGluZm8tPmNhcmQ7Ci0gICAgY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOwotCi0gICAgQ1lfTE9DSyhpbmZvLCBmbGFncyk7Ci0gICAgaW5mby0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOwotICAgIENZX1VOTE9DSyhpbmZvLCBmbGFncyk7Ci0KLSAgICBpZiAoSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsgLyogSWYgaXQgaXMgYSBaIGNhcmQsIGZsdXNoIHRoZSBvbi1ib2FyZCAKLQkJCQkgICAgICBidWZmZXJzIGFzIHdlbGwgKi8KLQlDWV9MT0NLKGluZm8sIGZsYWdzKTsKLQlyZXR2YWwgPSBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX0ZMVVNIX1RYLCAwTCk7Ci0JaWYgKHJldHZhbCAhPSAwKSB7Ci0JICAgIHByaW50aygiY3ljOiBmbHVzaF9idWZmZXIgcmV0dmFsIG9uIHR0eUMlZCB3YXMgJXhcbiIsCi0JCSAgIGluZm8tPmxpbmUsIHJldHZhbCk7CisJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwKKwkJCSh1X2NoYXIpKGNoYW5uZWwgJiAweDAwMDMpKTsgLyogaW5kZXggY2hhbm5lbCAqLworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCisJCQkgIGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmIH5DeVR4UmR5KTsKKwkJQ1lfVU5MT0NLKGluZm8sIGZsYWdzKTsKKwl9IGVsc2UgeworCQkvKiBOb3RoaW5nIHRvIGRvISAqLwogCX0KLQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOwotICAgIH0KLSAgICB0dHlfd2FrZXVwKHR0eSk7Ci0gICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwotfSAvKiBjeV9mbHVzaF9idWZmZXIgKi8KK30JCQkJLyogY3lfc3RvcCAqLwogCitzdGF0aWMgdm9pZCBjeV9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisJaW50IGNoaXAsIGNoYW5uZWwsIGluZGV4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyNpZmRlZiBDWV9ERUJVR19PVEhFUgorCXByaW50aygiY3ljOmN5X3N0YXJ0IHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CS8qICovCisjZW5kaWYKKworCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfc3RhcnQiKSkKKwkJcmV0dXJuOworCisJY2luZm8gPSAmY3lfY2FyZFtpbmZvLT5jYXJkXTsKKwljaGFubmVsID0gaW5mby0+bGluZSAtIGNpbmZvLT5maXJzdF9saW5lOworCWluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKKwlpZiAoIUlTX0NZQ19aKCpjaW5mbykpIHsKKwkJY2hpcCA9IGNoYW5uZWwgPj4gMjsKKwkJY2hhbm5lbCAmPSAweDAzOworCQliYXNlX2FkZHIgPSBjeV9jYXJkW2luZm8tPmNhcmRdLmJhc2VfYWRkciArCisJCQkoY3lfY2hpcF9vZmZzZXRbY2hpcF0gPDwgaW5kZXgpOworCisJCUNZX0xPQ0soaW5mbywgZmxhZ3MpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgKHVfY2hhcikgKGNoYW5uZWwgJiAweDAwMDMpKTsJLyogaW5kZXggY2hhbm5lbCAqLworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCisJCQkgIGN5X3JlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSB8IEN5VHhSZHkpOworCQlDWV9VTkxPQ0soaW5mbywgZmxhZ3MpOworCX0gZWxzZSB7CisJCS8qIE5vdGhpbmcgdG8gZG8hICovCisJfQorfQkJCQkvKiBjeV9zdGFydCAqLworCitzdGF0aWMgdm9pZCBjeV9mbHVzaF9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IGNhcmQsIGNoYW5uZWwsIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisjaWZkZWYgQ1lfREVCVUdfSU8KKwlwcmludGsoImN5YzpjeV9mbHVzaF9idWZmZXIgdHR5QyVkXG4iLCBpbmZvLT5saW5lKTsJLyogKi8KKyNlbmRpZgorCisJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJjeV9mbHVzaF9idWZmZXIiKSkKKwkJcmV0dXJuOworCisJY2FyZCA9IGluZm8tPmNhcmQ7CisJY2hhbm5lbCA9IChpbmZvLT5saW5lKSAtIChjeV9jYXJkW2NhcmRdLmZpcnN0X2xpbmUpOworCisJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJaW5mby0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOworCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisKKwlpZiAoSVNfQ1lDX1ooY3lfY2FyZFtjYXJkXSkpIHsJLyogSWYgaXQgaXMgYSBaIGNhcmQsIGZsdXNoIHRoZSBvbi1ib2FyZAorCQkJCQkgICBidWZmZXJzIGFzIHdlbGwgKi8KKwkJQ1lfTE9DSyhpbmZvLCBmbGFncyk7CisJCXJldHZhbCA9CisJCSAgICBjeXpfaXNzdWVfY21kKCZjeV9jYXJkW2NhcmRdLCBjaGFubmVsLCBDX0NNX0ZMVVNIX1RYLCAwTCk7CisJCWlmIChyZXR2YWwgIT0gMCkgeworCQkJcHJpbnRrKCJjeWM6IGZsdXNoX2J1ZmZlciByZXR2YWwgb24gdHR5QyVkIHdhcyAleFxuIiwKKwkJCQlpbmZvLT5saW5lLCByZXR2YWwpOworCQl9CisJCUNZX1VOTE9DSyhpbmZvLCBmbGFncyk7CisJfQorCXR0eV93YWtldXAodHR5KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Cit9CQkJCS8qIGN5X2ZsdXNoX2J1ZmZlciAqLwogCiAvKgogICogY3lfaGFuZ3VwKCkgLS0tIGNhbGxlZCBieSB0dHlfaGFuZ3VwKCkgd2hlbiBhIGhhbmd1cCBpcyBzaWduYWxlZC4KICAqLwotc3RhdGljIHZvaWQKLWN5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIHZvaWQgY3lfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0gIHN0cnVjdCBjeWNsYWRlc19wb3J0ICogaW5mbyA9IChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0gICAgICAgIAorCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvID0gKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwogI2lmZGVmIENZX0RFQlVHX09USEVSCi0gICAgcHJpbnRrKCJjeWM6Y3lfaGFuZ3VwIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7IC8qICovCisJcHJpbnRrKCJjeWM6Y3lfaGFuZ3VwIHR0eUMlZFxuIiwgaW5mby0+bGluZSk7CS8qICovCiAjZW5kaWYKIAotICAgIGlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiY3lfaGFuZ3VwIikpCi0gICAgICAgIHJldHVybjsKKwlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgImN5X2hhbmd1cCIpKQorCQlyZXR1cm47CiAKLSAgICBjeV9mbHVzaF9idWZmZXIodHR5KTsKLSAgICBzaHV0ZG93bihpbmZvKTsKLSAgICBpbmZvLT5ldmVudCA9IDA7Ci0gICAgaW5mby0+Y291bnQgPSAwOworCWN5X2ZsdXNoX2J1ZmZlcih0dHkpOworCXNodXRkb3duKGluZm8pOworCWluZm8tPmV2ZW50ID0gMDsKKwlpbmZvLT5jb3VudCA9IDA7CiAjaWZkZWYgQ1lfREVCVUdfQ09VTlQKLSAgICBwcmludGsoImN5YzpjeV9oYW5ndXAgKCVkKTogc2V0dGluZyBjb3VudCB0byAwXG4iLCBjdXJyZW50LT5waWQpOworCXByaW50aygiY3ljOmN5X2hhbmd1cCAoJWQpOiBzZXR0aW5nIGNvdW50IHRvIDBcbiIsIGN1cnJlbnQtPnBpZCk7CiAjZW5kaWYKLSAgICBpbmZvLT50dHkgPSBOVUxMOwotICAgIGluZm8tPmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwotICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKLX0gLyogY3lfaGFuZ3VwICovCi0KKwlpbmZvLT50dHkgPSBOVUxMOworCWluZm8tPmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKK30JCQkJLyogY3lfaGFuZ3VwICovCiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ0MzMsODIgKzQ1MjgsODQgQEAKIC8qIGluaXRpYWxpemUgY2hpcHMgb24gQ3ljbG9tLVkgY2FyZCAtLSByZXR1cm4gbnVtYmVyIG9mIHZhbGlkCiAgICBjaGlwcyAod2hpY2ggaXMgbnVtYmVyIG9mIHBvcnRzLzQpICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgX19pbml0Ci1jeXlfaW5pdF9jYXJkKHZvaWQgX19pb21lbSAqdHJ1ZV9iYXNlX2FkZHIsaW50IGluZGV4KQorY3l5X2luaXRfY2FyZCh2b2lkIF9faW9tZW0gKiB0cnVlX2Jhc2VfYWRkciwgaW50IGluZGV4KQogewotICB1bnNpZ25lZCBpbnQgY2hpcF9udW1iZXI7Ci0gIHZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworCXVuc2lnbmVkIGludCBjaGlwX251bWJlcjsKKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKIAotICAgIGN5X3dyaXRlYih0cnVlX2Jhc2VfYWRkcisoQ3lfSHdSZXNldDw8aW5kZXgpLCAwKTsgCi0JCQkJCQkvKiBDeV9Id1Jlc2V0IGlzIDB4MTQwMCAqLwotICAgIGN5X3dyaXRlYih0cnVlX2Jhc2VfYWRkcisoQ3lfQ2xySW50cjw8aW5kZXgpLCAwKTsgCi0JCQkJCQkvKiBDeV9DbHJJbnRyIGlzIDB4MTgwMCAqLwotICAgIHVkZWxheSg1MDBMKTsKKwljeV93cml0ZWIodHJ1ZV9iYXNlX2FkZHIgKyAoQ3lfSHdSZXNldCA8PCBpbmRleCksIDApOworCS8qIEN5X0h3UmVzZXQgaXMgMHgxNDAwICovCisJY3lfd3JpdGViKHRydWVfYmFzZV9hZGRyICsgKEN5X0NsckludHIgPDwgaW5kZXgpLCAwKTsKKwkvKiBDeV9DbHJJbnRyIGlzIDB4MTgwMCAqLworCXVkZWxheSg1MDBMKTsKIAotICAgIGZvcihjaGlwX251bWJlcj0wOyBjaGlwX251bWJlcjxDeU1BWF9DSElQU19QRVJfQ0FSRDsgY2hpcF9udW1iZXIrKyl7Ci0gICAgICAgIGJhc2VfYWRkciA9IHRydWVfYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBfbnVtYmVyXTw8aW5kZXgpOwotICAgICAgICBtZGVsYXkoMSk7Ci0gICAgICAgIGlmKGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lDQ1I8PGluZGV4KSkgIT0gMHgwMCl7Ci0gICAgICAgICAgICAvKioqKioqKioqKioqKgotICAgICAgICAgICAgcHJpbnRrKCIgY2hpcCAjJWQgYXQgJSM2bHggaXMgbmV2ZXIgaWRsZSAoQ0NSICE9IDApXG4iLAotICAgICAgICAgICAgICAgY2hpcF9udW1iZXIsICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkcik7Ci0gICAgICAgICAgICAqKioqKioqKioqKioqLwotICAgICAgICAgICAgcmV0dXJuIGNoaXBfbnVtYmVyOwotICAgICAgICB9CisJZm9yIChjaGlwX251bWJlciA9IDA7IGNoaXBfbnVtYmVyIDwgQ3lNQVhfQ0hJUFNfUEVSX0NBUkQ7IGNoaXBfbnVtYmVyKyspIHsKKwkJYmFzZV9hZGRyID0KKwkJICAgIHRydWVfYmFzZV9hZGRyICsgKGN5X2NoaXBfb2Zmc2V0W2NoaXBfbnVtYmVyXSA8PCBpbmRleCk7CisJCW1kZWxheSgxKTsKKwkJaWYgKGN5X3JlYWRiKGJhc2VfYWRkciArIChDeUNDUiA8PCBpbmRleCkpICE9IDB4MDApIHsKKwkJCS8qKioqKioqKioqKioqCisJCQlwcmludGsoIiBjaGlwICMlZCBhdCAlIzZseCBpcyBuZXZlciBpZGxlIChDQ1IgIT0gMClcbiIsCisJCQljaGlwX251bWJlciwgKHVuc2lnbmVkIGxvbmcpYmFzZV9hZGRyKTsKKwkJCSoqKioqKioqKioqKiovCisJCQlyZXR1cm4gY2hpcF9udW1iZXI7CisJCX0KIAotICAgICAgICBjeV93cml0ZWIoYmFzZV9hZGRyKyhDeUdGUkNSPDxpbmRleCksIDApOwotICAgICAgICB1ZGVsYXkoMTBMKTsKKwkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUdGUkNSIDw8IGluZGV4KSwgMCk7CisJCXVkZWxheSgxMEwpOwogCi0gICAgICAgIC8qIFRoZSBDeWNsb20tMTZZIGRvZXMgbm90IGRlY29kZSBhZGRyZXNzIGJpdCA5IGFuZCB0aGVyZWZvcmUKLSAgICAgICAgICAgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gcmVmZXJlbmNlcyB0byBjaGlwIDAgYW5kIGEgbm9uLQotICAgICAgICAgICBleGlzdGVudCBjaGlwIDQuICBJZiB0aGUgcHJlY2VkaW5nIGNsZWFyaW5nIG9mIHRoZSBzdXBwb3NlZAotICAgICAgICAgICBjaGlwIDQgR0ZSQ1IgcmVnaXN0ZXIgYXBwZWFycyBhdCBjaGlwIDAsIHRoZXJlIGlzIG5vIGNoaXAgNAotICAgICAgICAgICBhbmQgdGhpcyBtdXN0IGJlIGEgQ3ljbG9tLTE2WSwgbm90IGEgQ3ljbG9tLTMyWWUuCi0gICAgICAgICovCi0gICAgICAgIGlmIChjaGlwX251bWJlciA9PSA0Ci0gICAgICAgICYmIGN5X3JlYWRiKHRydWVfYmFzZV9hZGRyCi0JICAgICsgKGN5X2NoaXBfb2Zmc2V0WzBdPDxpbmRleCkKLQkgICAgKyAoQ3lHRlJDUjw8aW5kZXgpKSA9PSAwKXsKLSAgICAgICAgICAgIHJldHVybiBjaGlwX251bWJlcjsKLSAgICAgICAgfQorCQkvKiBUaGUgQ3ljbG9tLTE2WSBkb2VzIG5vdCBkZWNvZGUgYWRkcmVzcyBiaXQgOSBhbmQgdGhlcmVmb3JlCisJCSAgIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHJlZmVyZW5jZXMgdG8gY2hpcCAwIGFuZCBhIG5vbi0KKwkJICAgZXhpc3RlbnQgY2hpcCA0LiAgSWYgdGhlIHByZWNlZGluZyBjbGVhcmluZyBvZiB0aGUgc3VwcG9zZWQKKwkJICAgY2hpcCA0IEdGUkNSIHJlZ2lzdGVyIGFwcGVhcnMgYXQgY2hpcCAwLCB0aGVyZSBpcyBubyBjaGlwIDQKKwkJICAgYW5kIHRoaXMgbXVzdCBiZSBhIEN5Y2xvbS0xNlksIG5vdCBhIEN5Y2xvbS0zMlllLgorCQkgKi8KKwkJaWYgKGNoaXBfbnVtYmVyID09IDQgJiYgY3lfcmVhZGIodHJ1ZV9iYXNlX2FkZHIgKworCQkJCShjeV9jaGlwX29mZnNldFswXSA8PCBpbmRleCkgKworCQkJCShDeUdGUkNSIDw8IGluZGV4KSkgPT0gMCkgeworCQkJcmV0dXJuIGNoaXBfbnVtYmVyOworCQl9CiAKLSAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lDQ1I8PGluZGV4KSwgQ3lDSElQX1JFU0VUKTsKLSAgICAgICAgbWRlbGF5KDEpOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0NSIDw8IGluZGV4KSwgQ3lDSElQX1JFU0VUKTsKKwkJbWRlbGF5KDEpOwogCi0gICAgICAgIGlmKGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lHRlJDUjw8aW5kZXgpKSA9PSAweDAwKXsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICBwcmludGsoIiBjaGlwICMlZCBhdCAlIzZseCBpcyBub3QgcmVzcG9uZGluZyAiLAotICAgICAgICAgICAgICAgY2hpcF9udW1iZXIsICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkcik7Ci0gICAgICAgICAgICBwcmludGsoIihHRlJDUiBzdGF5ZWQgMClcbiIsCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIGNoaXBfbnVtYmVyOwotICAgICAgICB9Ci0gICAgICAgIGlmKCgweGYwICYgKGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lHRlJDUjw8aW5kZXgpKSkpICE9IDB4NDApewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgIHByaW50aygiIGNoaXAgIyVkIGF0ICUjNmx4IGlzIG5vdCB2YWxpZCAoR0ZSQ1IgPT0gJSMyeClcbiIsCi0gICAgICAgICAgICAgICBjaGlwX251bWJlciwgKHVuc2lnbmVkIGxvbmcpYmFzZV9hZGRyLAotCSAgICAgICBiYXNlX2FkZHJbQ3lHRlJDUjw8aW5kZXhdKTsKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gY2hpcF9udW1iZXI7Ci0gICAgICAgIH0KLSAgICAgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lHQ1I8PGluZGV4KSwgQ3lDSDBfU0VSSUFMKTsKLSAgICAgICAgaWYgKGN5X3JlYWRiKGJhc2VfYWRkcisoQ3lHRlJDUjw8aW5kZXgpKSA+PSBDRDE0MDBfUkVWX0opewotCSAgICAvKiBJdCBpcyBhIENEMTQwMCByZXYuIEogb3IgbGF0ZXIgKi8KLQkgICAgLyogSW1wb3NzaWJsZSB0byByZWFjaCA1bXMgd2l0aCB0aGlzIGNoaXAuIAotCSAgICAgICBDaGFuZ2VkIHRvIDJtcyBpbnN0ZWFkIChmID0gNTAwIEh6KS4gKi8KLQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lQUFI8PGluZGV4KSwgQ3lDTE9DS182MF8yTVMpOwotCX0gZWxzZSB7Ci0JICAgIC8qIGYgPSAyMDAgSHogKi8KLQkgICAgY3lfd3JpdGViKGJhc2VfYWRkcisoQ3lQUFI8PGluZGV4KSwgQ3lDTE9DS18yNV81TVMpOworCQlpZiAoY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5R0ZSQ1IgPDwgaW5kZXgpKSA9PSAweDAwKSB7CisJCQkvKgorCQkJICAgcHJpbnRrKCIgY2hpcCAjJWQgYXQgJSM2bHggaXMgbm90IHJlc3BvbmRpbmcgIiwKKwkJCSAgIGNoaXBfbnVtYmVyLCAodW5zaWduZWQgbG9uZyliYXNlX2FkZHIpOworCQkJICAgcHJpbnRrKCIoR0ZSQ1Igc3RheWVkIDApXG4iLAorCQkJICovCisJCQlyZXR1cm4gY2hpcF9udW1iZXI7CisJCX0KKwkJaWYgKCgweGYwICYgKGN5X3JlYWRiKGJhc2VfYWRkciArIChDeUdGUkNSIDw8IGluZGV4KSkpKSAhPQorCQkJCTB4NDApIHsKKwkJCS8qCisJCQlwcmludGsoIiBjaGlwICMlZCBhdCAlIzZseCBpcyBub3QgdmFsaWQgKEdGUkNSID09ICIKKwkJCQkJIiUjMngpXG4iLAorCQkJCQljaGlwX251bWJlciwgKHVuc2lnbmVkIGxvbmcpYmFzZV9hZGRyLAorCQkJCQliYXNlX2FkZHJbQ3lHRlJDUjw8aW5kZXhdKTsKKwkJCSAqLworCQkJcmV0dXJuIGNoaXBfbnVtYmVyOworCQl9CisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lHQ1IgPDwgaW5kZXgpLCBDeUNIMF9TRVJJQUwpOworCQlpZiAoY3lfcmVhZGIoYmFzZV9hZGRyICsgKEN5R0ZSQ1IgPDwgaW5kZXgpKSA+PSBDRDE0MDBfUkVWX0opIHsKKwkJCS8qIEl0IGlzIGEgQ0QxNDAwIHJldi4gSiBvciBsYXRlciAqLworCQkJLyogSW1wb3NzaWJsZSB0byByZWFjaCA1bXMgd2l0aCB0aGlzIGNoaXAuCisJCQkgICBDaGFuZ2VkIHRvIDJtcyBpbnN0ZWFkIChmID0gNTAwIEh6KS4gKi8KKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lQUFIgPDwgaW5kZXgpLCBDeUNMT0NLXzYwXzJNUyk7CisJCX0gZWxzZSB7CisJCQkvKiBmID0gMjAwIEh6ICovCisJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5UFBSIDw8IGluZGV4KSwgQ3lDTE9DS18yNV81TVMpOworCQl9CisKKwkJLyoKKwkJICAgcHJpbnRrKCIgY2hpcCAjJWQgYXQgJSM2bHggaXMgcmV2IDB4JTJ4XG4iLAorCQkgICBjaGlwX251bWJlciwgKHVuc2lnbmVkIGxvbmcpYmFzZV9hZGRyLAorCQkgICBjeV9yZWFkYihiYXNlX2FkZHIrKEN5R0ZSQ1I8PGluZGV4KSkpOworCQkgKi8KIAl9Ci0KLSAgICAvKgotICAgICAgICBwcmludGsoIiBjaGlwICMlZCBhdCAlIzZseCBpcyByZXYgMHglMnhcbiIsCi0gICAgICAgICAgICAgICBjaGlwX251bWJlciwgKHVuc2lnbmVkIGxvbmcpYmFzZV9hZGRyLAotCSAgICAgICBjeV9yZWFkYihiYXNlX2FkZHIrKEN5R0ZSQ1I8PGluZGV4KSkpOwotICAgICovCi0gICAgfQotICAgIHJldHVybiBjaGlwX251bWJlcjsKLX0gLyogY3l5X2luaXRfY2FyZCAqLworCXJldHVybiBjaGlwX251bWJlcjsKK30JCQkJLyogY3l5X2luaXRfY2FyZCAqLwogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NTE2LDEyNiArNDYxMywxMjQgQEAKICAqIHNldHMgZ2xvYmFsIHZhcmlhYmxlcyBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgSVNBIGJvYXJkcyBmb3VuZC4KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1zdGF0aWMgaW50IF9faW5pdAotY3lfZGV0ZWN0X2lzYSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY3lfZGV0ZWN0X2lzYSh2b2lkKQogewogI2lmZGVmIENPTkZJR19JU0EKLSAgdW5zaWduZWQgc2hvcnQJY3lfaXNhX2lycSxuYm9hcmQ7Ci0gIHZvaWQgX19pb21lbQkJKmN5X2lzYV9hZGRyZXNzOwotICB1bnNpZ25lZCBzaG9ydAlpLGosY3lfaXNhX25jaGFuOworCXVuc2lnbmVkIHNob3J0IGN5X2lzYV9pcnEsIG5ib2FyZDsKKwl2b2lkIF9faW9tZW0gKmN5X2lzYV9hZGRyZXNzOworCXVuc2lnbmVkIHNob3J0IGksIGosIGN5X2lzYV9uY2hhbjsKICNpZmRlZiBNT0RVTEUKLSAgaW50IGlzcGFyYW0gPSAwOworCWludCBpc3BhcmFtID0gMDsKICNlbmRpZgogCi0gICAgICAgIG5ib2FyZCA9IDA7CisJbmJvYXJkID0gMDsKIAogI2lmZGVmIE1PRFVMRQogCS8qIENoZWNrIGZvciBtb2R1bGUgcGFyYW1ldGVycyAqLwotCWZvcihpID0gMCA7IGkgPCBOUl9DQVJEUzsgaSsrKSB7Ci0JICAgIGlmIChtYWRkcltpXSB8fCBpKSB7Ci0JCWlzcGFyYW0gPSAxOwotCQljeV9pc2FfYWRkcmVzc2VzW2ldID0gbWFkZHJbaV07Ci0JICAgIH0KLQkgICAgaWYgKCFtYWRkcltpXSkKLQkJYnJlYWs7CisJZm9yIChpID0gMDsgaSA8IE5SX0NBUkRTOyBpKyspIHsKKwkJaWYgKG1hZGRyW2ldIHx8IGkpIHsKKwkJCWlzcGFyYW0gPSAxOworCQkJY3lfaXNhX2FkZHJlc3Nlc1tpXSA9IG1hZGRyW2ldOworCQl9CisJCWlmICghbWFkZHJbaV0pCisJCQlicmVhazsKIAl9CiAjZW5kaWYKIAotICAgICAgICAvKiBzY2FuIHRoZSBhZGRyZXNzIHRhYmxlIHByb2JpbmcgZm9yIEN5Y2xvbS1ZL0lTQSBib2FyZHMgKi8KLSAgICAgICAgZm9yIChpID0gMCA7IGkgPCBOUl9JU0FfQUREUlMgOyBpKyspIHsKLSAgICAgICAgCXVuc2lnbmVkIGludCBpc2FfYWRkcmVzcyA9IGN5X2lzYV9hZGRyZXNzZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGlzYV9hZGRyZXNzICA9PSAweDAwMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihuYm9hcmQpOwotICAgICAgICAgICAgICAgIH0KKwkvKiBzY2FuIHRoZSBhZGRyZXNzIHRhYmxlIHByb2JpbmcgZm9yIEN5Y2xvbS1ZL0lTQSBib2FyZHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVNBX0FERFJTOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlzYV9hZGRyZXNzID0gY3lfaXNhX2FkZHJlc3Nlc1tpXTsKKwkJaWYgKGlzYV9hZGRyZXNzID09IDB4MDAwMCkgeworCQkJcmV0dXJuIG5ib2FyZDsKKwkJfQogCi0gICAgICAgICAgICAgICAgLyogcHJvYmUgZm9yIENEMTQwMC4uLiAqLworCQkvKiBwcm9iZSBmb3IgQ0QxNDAwLi4uICovCiAJCWN5X2lzYV9hZGRyZXNzID0gaW9yZW1hcChpc2FfYWRkcmVzcywgQ3lJU0FfWXdpbik7Ci0gICAgICAgICAgICAgICAgY3lfaXNhX25jaGFuID0gQ3lQT1JUU19QRVJfQ0hJUCAqIAotICAgICAgICAgICAgICAgICAgICAgY3l5X2luaXRfY2FyZChjeV9pc2FfYWRkcmVzcywwKTsKLSAgICAgICAgICAgICAgICBpZiAoY3lfaXNhX25jaGFuID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQorCQljeV9pc2FfbmNoYW4gPSBDeVBPUlRTX1BFUl9DSElQICoKKwkJCWN5eV9pbml0X2NhcmQoY3lfaXNhX2FkZHJlc3MsIDApOworCQlpZiAoY3lfaXNhX25jaGFuID09IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CiAjaWZkZWYgTU9EVUxFCiAJCWlmIChpc3BhcmFtICYmIGlycVtpXSkKLQkJICAgIGN5X2lzYV9pcnEgPSBpcnFbaV07CisJCQljeV9pc2FfaXJxID0gaXJxW2ldOwogCQllbHNlCiAjZW5kaWYKLSAgICAgICAgICAgICAgICAvKiBmaW5kIG91dCB0aGUgYm9hcmQncyBpcnEgYnkgcHJvYmluZyAqLwotICAgICAgICAgICAgICAgIGN5X2lzYV9pcnEgPSBkZXRlY3RfaXNhX2lycShjeV9pc2FfYWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGN5X2lzYV9pcnEgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDeWNsb20tWS9JU0EgZm91bmQgYXQgMHglbHggIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGN5X2lzYV9hZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiYnV0IHRoZSBJUlEgY291bGQgbm90IGJlIGRldGVjdGVkLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisJCQkvKiBmaW5kIG91dCB0aGUgYm9hcmQncyBpcnEgYnkgcHJvYmluZyAqLworCQkJY3lfaXNhX2lycSA9IGRldGVjdF9pc2FfaXJxKGN5X2lzYV9hZGRyZXNzKTsKKwkJaWYgKGN5X2lzYV9pcnEgPT0gMCkgeworCQkJcHJpbnRrKCJDeWNsb20tWS9JU0EgZm91bmQgYXQgMHglbHggIiwKKwkJCQkodW5zaWduZWQgbG9uZyljeV9pc2FfYWRkcmVzcyk7CisJCQlwcmludGsoImJ1dCB0aGUgSVJRIGNvdWxkIG5vdCBiZSBkZXRlY3RlZC5cbiIpOworCQkJY29udGludWU7CisJCX0KIAotICAgICAgICAgICAgICAgIGlmKChjeV9uZXh0X2NoYW5uZWwrY3lfaXNhX25jaGFuKSA+IE5SX1BPUlRTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkN5Y2xvbS1ZL0lTQSBmb3VuZCBhdCAweCVseCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgY3lfaXNhX2FkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJidXQgbm8gbW9yZSBjaGFubmVscyBhcmUgYXZhaWxhYmxlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkNoYW5nZSBOUl9QT1JUUyBpbiBjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUga2VybmVsLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4obmJvYXJkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogZmlsbCB0aGUgbmV4dCBjeV9jYXJkIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGogPSAwIDsgaiA8IE5SX0NBUkRTIDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3lfY2FyZFtqXS5iYXNlX2FkZHIgPT0gMCkgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaiA9PSBOUl9DQVJEUykgeyAgICAvKiBubyBtb3JlIGN5X2NhcmRzIGF2YWlsYWJsZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDeWNsb20tWS9JU0EgZm91bmQgYXQgMHglbHggIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGN5X2lzYV9hZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiYnV0IG5vIG1vcmUgY2FyZHMgY2FuIGJlIHVzZWQgLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkNoYW5nZSBOUl9DQVJEUyBpbiBjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUga2VybmVsLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4obmJvYXJkKTsKLSAgICAgICAgICAgICAgICB9CisJCWlmICgoY3lfbmV4dF9jaGFubmVsICsgY3lfaXNhX25jaGFuKSA+IE5SX1BPUlRTKSB7CisJCQlwcmludGsoIkN5Y2xvbS1ZL0lTQSBmb3VuZCBhdCAweCVseCAiLAorCQkJCSh1bnNpZ25lZCBsb25nKWN5X2lzYV9hZGRyZXNzKTsKKwkJCXByaW50aygiYnV0IG5vIG1vcmUgY2hhbm5lbHMgYXJlIGF2YWlsYWJsZS5cbiIpOworCQkJcHJpbnRrKCJDaGFuZ2UgTlJfUE9SVFMgaW4gY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlICIKKwkJCQkJImtlcm5lbC5cbiIpOworCQkJcmV0dXJuIG5ib2FyZDsKKwkJfQorCQkvKiBmaWxsIHRoZSBuZXh0IGN5X2NhcmQgc3RydWN0dXJlIGF2YWlsYWJsZSAqLworCQlmb3IgKGogPSAwOyBqIDwgTlJfQ0FSRFM7IGorKykgeworCQkJaWYgKGN5X2NhcmRbal0uYmFzZV9hZGRyID09IDApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGogPT0gTlJfQ0FSRFMpIHsJLyogbm8gbW9yZSBjeV9jYXJkcyBhdmFpbGFibGUgKi8KKwkJCXByaW50aygiQ3ljbG9tLVkvSVNBIGZvdW5kIGF0IDB4JWx4ICIsCisJCQkJKHVuc2lnbmVkIGxvbmcpY3lfaXNhX2FkZHJlc3MpOworCQkJcHJpbnRrKCJidXQgbm8gbW9yZSBjYXJkcyBjYW4gYmUgdXNlZCAuXG4iKTsKKwkJCXByaW50aygiQ2hhbmdlIE5SX0NBUkRTIGluIGN5Y2xhZGVzLmMgYW5kIHJlY29tcGlsZSAiCisJCQkJCSJrZXJuZWwuXG4iKTsKKwkJCXJldHVybiBuYm9hcmQ7CisJCX0KIAotICAgICAgICAgICAgICAgIC8qIGFsbG9jYXRlIElSUSAqLwotICAgICAgICAgICAgICAgIGlmKHJlcXVlc3RfaXJxKGN5X2lzYV9pcnEsIGN5eV9pbnRlcnJ1cHQsCi0JCQkJICAgSVJRRl9ESVNBQkxFRCwgIkN5Y2xvbS1ZIiwgJmN5X2NhcmRbal0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiQ3ljbG9tLVkvSVNBIGZvdW5kIGF0IDB4JWx4ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBjeV9pc2FfYWRkcmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImJ1dCBjb3VsZCBub3QgYWxsb2NhdGUgSVJRIyVkLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3lfaXNhX2lycSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4obmJvYXJkKTsKLSAgICAgICAgICAgICAgICB9CisJCS8qIGFsbG9jYXRlIElSUSAqLworCQlpZiAocmVxdWVzdF9pcnEoY3lfaXNhX2lycSwgY3l5X2ludGVycnVwdCwKKwkJCQlJUlFGX0RJU0FCTEVELCAiQ3ljbG9tLVkiLCAmY3lfY2FyZFtqXSkpIHsKKwkJCXByaW50aygiQ3ljbG9tLVkvSVNBIGZvdW5kIGF0IDB4JWx4ICIsCisJCQkJKHVuc2lnbmVkIGxvbmcpY3lfaXNhX2FkZHJlc3MpOworCQkJcHJpbnRrKCJidXQgY291bGQgbm90IGFsbG9jYXRlIElSUSMlZC5cbiIsIGN5X2lzYV9pcnEpOworCQkJcmV0dXJuIG5ib2FyZDsKKwkJfQogCi0gICAgICAgICAgICAgICAgLyogc2V0IGN5X2NhcmQgKi8KLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmJhc2VfYWRkciA9IGN5X2lzYV9hZGRyZXNzOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0uY3RsX2FkZHIgPSBOVUxMOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0uaXJxID0gKGludCkgY3lfaXNhX2lycTsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmJ1c19pbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgY3lfY2FyZFtqXS5maXJzdF9saW5lID0gY3lfbmV4dF9jaGFubmVsOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0ubnVtX2NoaXBzID0gY3lfaXNhX25jaGFuLzQ7Ci0gICAgICAgICAgICAgICAgbmJvYXJkKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiBwcmludCBtZXNzYWdlICovCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJDeWNsb20tWS9JU0EgIyVkOiAweCVseC0weCVseCwgSVJRJWQsICIsCi0gICAgICAgICAgICAgICAgICAgIGorMSwgKHVuc2lnbmVkIGxvbmcpIGN5X2lzYV9hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykoY3lfaXNhX2FkZHJlc3MgKyAoQ3lJU0FfWXdpbiAtIDEpKSwKLQkJICAgIGN5X2lzYV9pcnEpOwotICAgICAgICAgICAgICAgIHByaW50aygiJWQgY2hhbm5lbHMgc3RhcnRpbmcgZnJvbSBwb3J0ICVkLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN5X2lzYV9uY2hhbiwgY3lfbmV4dF9jaGFubmVsKTsKLSAgICAgICAgICAgICAgICBjeV9uZXh0X2NoYW5uZWwgKz0gY3lfaXNhX25jaGFuOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybihuYm9hcmQpOworCQkvKiBzZXQgY3lfY2FyZCAqLworCQljeV9jYXJkW2pdLmJhc2VfYWRkciA9IGN5X2lzYV9hZGRyZXNzOworCQljeV9jYXJkW2pdLmN0bF9hZGRyID0gTlVMTDsKKwkJY3lfY2FyZFtqXS5pcnEgPSAoaW50KWN5X2lzYV9pcnE7CisJCWN5X2NhcmRbal0uYnVzX2luZGV4ID0gMDsKKwkJY3lfY2FyZFtqXS5maXJzdF9saW5lID0gY3lfbmV4dF9jaGFubmVsOworCQljeV9jYXJkW2pdLm51bV9jaGlwcyA9IGN5X2lzYV9uY2hhbiAvIDQ7CisJCW5ib2FyZCsrOworCisJCS8qIHByaW50IG1lc3NhZ2UgKi8KKwkJcHJpbnRrKCJDeWNsb20tWS9JU0EgIyVkOiAweCVseC0weCVseCwgSVJRJWQsICIsCisJCQlqICsgMSwgKHVuc2lnbmVkIGxvbmcpY3lfaXNhX2FkZHJlc3MsCisJCQkodW5zaWduZWQgbG9uZykoY3lfaXNhX2FkZHJlc3MgKyAoQ3lJU0FfWXdpbiAtIDEpKSwKKwkJCWN5X2lzYV9pcnEpOworCQlwcmludGsoIiVkIGNoYW5uZWxzIHN0YXJ0aW5nIGZyb20gcG9ydCAlZC5cbiIsCisJCQljeV9pc2FfbmNoYW4sIGN5X25leHRfY2hhbm5lbCk7CisJCWN5X25leHRfY2hhbm5lbCArPSBjeV9pc2FfbmNoYW47CisJfQorCXJldHVybiBuYm9hcmQ7CiAjZWxzZQotICAgICAgICByZXR1cm4oMCk7Ci0jZW5kaWYgLyogQ09ORklHX0lTQSAqLwotfSAvKiBjeV9kZXRlY3RfaXNhICovCisJcmV0dXJuIDA7CisjZW5kaWYJCQkJLyogQ09ORklHX0lTQSAqLworfQkJCQkvKiBjeV9kZXRlY3RfaXNhICovCiAKLXN0YXRpYyB2b2lkIAotcGx4X2luaXQodm9pZCBfX2lvbWVtICphZGRyLCB1Y2xvbmcgaW5pdGN0bCkKK3N0YXRpYyB2b2lkIHBseF9pbml0KHZvaWQgX19pb21lbSAqIGFkZHIsIHVjbG9uZyBpbml0Y3RsKQogewotICAgIC8qIFJlc2V0IFBMWCAqLwotICAgIGN5X3dyaXRlbChhZGRyICsgaW5pdGN0bCwgY3lfcmVhZGwoYWRkciArIGluaXRjdGwpIHwgMHg0MDAwMDAwMCk7Ci0gICAgdWRlbGF5KDEwMEwpOwotICAgIGN5X3dyaXRlbChhZGRyICsgaW5pdGN0bCwgY3lfcmVhZGwoYWRkciArIGluaXRjdGwpICYgfjB4NDAwMDAwMDApOworCS8qIFJlc2V0IFBMWCAqLworCWN5X3dyaXRlbChhZGRyICsgaW5pdGN0bCwgY3lfcmVhZGwoYWRkciArIGluaXRjdGwpIHwgMHg0MDAwMDAwMCk7CisJdWRlbGF5KDEwMEwpOworCWN5X3dyaXRlbChhZGRyICsgaW5pdGN0bCwgY3lfcmVhZGwoYWRkciArIGluaXRjdGwpICYgfjB4NDAwMDAwMDApOwogCi0gICAgLyogUmVsb2FkIENvbmZpZy4gUmVnaXN0ZXJzIGZyb20gRUVQUk9NICovCi0gICAgY3lfd3JpdGVsKGFkZHIgKyBpbml0Y3RsLCBjeV9yZWFkbChhZGRyICsgaW5pdGN0bCkgfCAweDIwMDAwMDAwKTsKLSAgICB1ZGVsYXkoMTAwTCk7Ci0gICAgY3lfd3JpdGVsKGFkZHIgKyBpbml0Y3RsLCBjeV9yZWFkbChhZGRyICsgaW5pdGN0bCkgJiB+MHgyMDAwMDAwMCk7CisJLyogUmVsb2FkIENvbmZpZy4gUmVnaXN0ZXJzIGZyb20gRUVQUk9NICovCisJY3lfd3JpdGVsKGFkZHIgKyBpbml0Y3RsLCBjeV9yZWFkbChhZGRyICsgaW5pdGN0bCkgfCAweDIwMDAwMDAwKTsKKwl1ZGVsYXkoMTAwTCk7CisJY3lfd3JpdGVsKGFkZHIgKyBpbml0Y3RsLCBjeV9yZWFkbChhZGRyICsgaW5pdGN0bCkgJiB+MHgyMDAwMDAwMCk7CiB9CiAKIC8qCkBAIC00NjQ0LDQzICs0NzM5LDQyIEBACiAgKiBzZXRzIGdsb2JhbCB2YXJpYWJsZXMgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIFBDSSBib2FyZHMgZm91bmQuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotc3RhdGljIGludCBfX2luaXQKLWN5X2RldGVjdF9wY2kodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGN5X2RldGVjdF9wY2kodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUENJCiAKLSAgc3RydWN0IHBjaV9kZXYJKnBkZXYgPSBOVUxMOwotICB1bnNpZ25lZCBjaGFyCQljeXlfcmV2X2lkOwotICB1bnNpZ25lZCBjaGFyCQljeV9wY2lfaXJxID0gMDsKLSAgdWNsb25nCQljeV9wY2lfcGh5czAsIGN5X3BjaV9waHlzMjsKLSAgdm9pZCBfX2lvbWVtCQkqY3lfcGNpX2FkZHIwLCAqY3lfcGNpX2FkZHIyOwotICB1bnNpZ25lZCBzaG9ydAlpLGosY3lfcGNpX25jaGFuLCBwbHhfdmVyOwotICB1bnNpZ25lZCBzaG9ydAlkZXZpY2VfaWQsZGV2X2luZGV4ID0gMDsKLSAgdWNsb25nCQltYWlsYm94OwotICB1Y2xvbmcJCVplSW5kZXggPSAwOwotICB2b2lkIF9faW9tZW0JCSpaZV9hZGRyMFtOUl9DQVJEU10sICpaZV9hZGRyMltOUl9DQVJEU107Ci0gIHVjbG9uZwkJWmVfcGh5czBbTlJfQ0FSRFNdLCBaZV9waHlzMltOUl9DQVJEU107Ci0gIHVuc2lnbmVkIGNoYXIJCVplX2lycVtOUl9DQVJEU107Ci0gIHN0cnVjdCBwY2lfZGV2CSpaZV9wZGV2W05SX0NBUkRTXTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisJdW5zaWduZWQgY2hhciBjeXlfcmV2X2lkOworCXVuc2lnbmVkIGNoYXIgY3lfcGNpX2lycSA9IDA7CisJdWNsb25nIGN5X3BjaV9waHlzMCwgY3lfcGNpX3BoeXMyOworCXZvaWQgX19pb21lbSAqY3lfcGNpX2FkZHIwLCAqY3lfcGNpX2FkZHIyOworCXVuc2lnbmVkIHNob3J0IGksIGosIGN5X3BjaV9uY2hhbiwgcGx4X3ZlcjsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQsIGRldl9pbmRleCA9IDA7CisJdWNsb25nIG1haWxib3g7CisJdWNsb25nIFplSW5kZXggPSAwOworCXZvaWQgX19pb21lbSAqWmVfYWRkcjBbTlJfQ0FSRFNdLCAqWmVfYWRkcjJbTlJfQ0FSRFNdOworCXVjbG9uZyBaZV9waHlzMFtOUl9DQVJEU10sIFplX3BoeXMyW05SX0NBUkRTXTsKKwl1bnNpZ25lZCBjaGFyIFplX2lycVtOUl9DQVJEU107CisJc3RydWN0IHBjaV9kZXYgKlplX3BkZXZbTlJfQ0FSRFNdOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBOUl9DQVJEUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgLyogbG9vayBmb3IgYSBDeWNsYWRlcyBjYXJkIGJ5IHZlbmRvciBhbmQgZGV2aWNlIGlkICovCi0gICAgICAgICAgICAgICAgd2hpbGUoKGRldmljZV9pZCA9IGN5X3BjaV9kZXZfaWRbZGV2X2luZGV4XSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NZQ0xBREVTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9pZCwgcGRldikpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2luZGV4Kys7ICAgIC8qIHRyeSBuZXh0IGRldmljZSBpZCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGZvdW5kIGEgYm9hcmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisJZm9yIChpID0gMDsgaSA8IE5SX0NBUkRTOyBpKyspIHsKKwkJLyogbG9vayBmb3IgYSBDeWNsYWRlcyBjYXJkIGJ5IHZlbmRvciBhbmQgZGV2aWNlIGlkICovCisJCXdoaWxlICgoZGV2aWNlX2lkID0gY3lfcGNpX2Rldl9pZFtkZXZfaW5kZXhdKSAhPSAwKSB7CisJCQlpZiAoKHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NZQ0xBREVTLAorCQkJCQkJICAgZGV2aWNlX2lkLCBwZGV2KSkgPT0gTlVMTCkgeworCQkJCWRldl9pbmRleCsrOwkvKiB0cnkgbmV4dCBkZXZpY2UgaWQgKi8KKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CS8qIGZvdW5kIGEgYm9hcmQgKi8KKwkJCX0KKwkJfQogCiAJCWlmIChkZXZpY2VfaWQgPT0gMCkKLQkJICAgIGJyZWFrOworCQkJYnJlYWs7CiAKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQotCQkgICAgY29udGludWU7CisJCQljb250aW51ZTsKIAotICAgICAgICAgICAgICAgIC8qIHJlYWQgUENJIGNvbmZpZ3VyYXRpb24gYXJlYSAqLworCQkvKiByZWFkIFBDSSBjb25maWd1cmF0aW9uIGFyZWEgKi8KIAkJY3lfcGNpX2lycSA9IHBkZXYtPmlycTsKIAkJY3lfcGNpX3BoeXMwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCQljeV9wY2lfcGh5czIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7CkBAIC00Njg4LDQ4MiArNDc4Miw0OTcgQEAKIAogCQlkZXZpY2VfaWQgJj0gflBDSV9ERVZJQ0VfSURfTUFTSzsKIAotICAgIGlmICgoZGV2aWNlX2lkID09IFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfTG8pCi0JICAgfHwgKGRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0hpKSl7CisJCWlmIChkZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9DWUNMT01fWV9MbyB8fAorCQkJCWRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0hpKSB7CiAjaWZkZWYgQ1lfUENJX0RFQlVHCi0gICAgICAgICAgICBwcmludGsoIkN5Y2xvbS1ZL1BDSSAoYnVzPTB4MCV4LCBwY2lfaWQ9MHgleCwgIiwKLQkJcGRldi0+YnVzLT5udW1iZXIsIHBkZXYtPmRldmZuKTsKLSAgICAgICAgICAgIHByaW50aygicmV2X2lkPSVkKSBJUlElZFxuIiwKLQkJY3l5X3Jldl9pZCwgKGludCljeV9wY2lfaXJxKTsKLSAgICAgICAgICAgIHByaW50aygiQ3ljbG9tLVkvUENJOmZvdW5kICB3aW5hZGRyPTB4JWx4IGN0bGFkZHI9MHglbHhcbiIsCi0JCSh1bG9uZyljeV9wY2lfcGh5czIsICh1bG9uZyljeV9wY2lfcGh5czApOworCQkJcHJpbnRrKCJDeWNsb20tWS9QQ0kgKGJ1cz0weDAleCwgcGNpX2lkPTB4JXgsICIsCisJCQkJcGRldi0+YnVzLT5udW1iZXIsIHBkZXYtPmRldmZuKTsKKwkJCXByaW50aygicmV2X2lkPSVkKSBJUlElZFxuIiwKKwkJCQljeXlfcmV2X2lkLCAoaW50KWN5X3BjaV9pcnEpOworCQkJcHJpbnRrKCJDeWNsb20tWS9QQ0k6Zm91bmQgIHdpbmFkZHI9MHglbHggIgorCQkJCSJjdGxhZGRyPTB4JWx4XG4iLAorCQkJCSh1bG9uZyljeV9wY2lfcGh5czIsICh1bG9uZyljeV9wY2lfcGh5czApOwogI2VuZGlmCiAKLQkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJICAgIHByaW50aygiICBXYXJuaW5nOiBQQ0kgSS9PIGJpdCBpbmNvcnJlY3RseSBzZXQuICIKLQkJCSAgICJJZ25vcmluZyBpdC4uLlxuIik7Ci0JCSAgICBwZGV2LT5yZXNvdXJjZVsyXS5mbGFncyAmPSB+SU9SRVNPVVJDRV9JTzsKLQkJfQorCQkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJCQlwcmludGsoIiAgV2FybmluZzogUENJIEkvTyBiaXQgaW5jb3JyZWN0bHkgIgorCQkJCQkic2V0LiBJZ25vcmluZyBpdC4uLlxuIik7CisJCQkJcGRldi0+cmVzb3VyY2VbMl0uZmxhZ3MgJj0gfklPUkVTT1VSQ0VfSU87CisJCQl9CiAKLQkJLyogQWx0aG91Z2ggd2UgZG9uJ3QgdXNlIHRoaXMgSS9PIHJlZ2lvbiwgd2Ugc2hvdWxkCi0JCSAgIHJlcXVlc3QgaXQgZnJvbSB0aGUga2VybmVsIGFueXdheSwgdG8gYXZvaWQgcHJvYmxlbXMKLQkJICAgd2l0aCBvdGhlciBkcml2ZXJzIGFjY2Vzc2luZyBpdC4gKi8KLQkJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgIkN5Y2xvbS1ZIikgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJjeWNsYWRlczogZmFpbGVkIHRvIHJlc2VydmUgUENJIHJlc291cmNlc1xuIik7Ci0JCQljb250aW51ZTsKLQkJfQotCisJCQkvKiBBbHRob3VnaCB3ZSBkb24ndCB1c2UgdGhpcyBJL08gcmVnaW9uLCB3ZSBzaG91bGQKKwkJCSAgIHJlcXVlc3QgaXQgZnJvbSB0aGUga2VybmVsIGFueXdheSwgdG8gYXZvaWQgcHJvYmxlbXMKKwkJCSAgIHdpdGggb3RoZXIgZHJpdmVycyBhY2Nlc3NpbmcgaXQuICovCisJCQlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCAiQ3ljbG9tLVkiKSAhPSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJjeWNsYWRlczogZmFpbGVkIHRvIHJlc2VydmUgIgorCQkJCQkJIlBDSSByZXNvdXJjZXNcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQogI2lmIGRlZmluZWQoX19hbHBoYV9fKQotICAgICAgICAgICAgICAgIGlmIChkZXZpY2VfaWQgID09IFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfTG8pIHsgLyogYmVsb3cgMU0/ICovCi0JCSAgICBwcmludGsoIkN5Y2xvbS1ZL1BDSSAoYnVzPTB4MCV4LCBwY2lfaWQ9MHgleCwgIiwKLQkJCXBkZXYtPmJ1cy0+bnVtYmVyLCBwZGV2LT5kZXZmbik7Ci0JCSAgICBwcmludGsoInJldl9pZD0lZCkgSVJRJWRcbiIsCi0JCSAgICAgICAgY3l5X3Jldl9pZCwgKGludCljeV9wY2lfaXJxKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDeWNsb20tWS9QQ0k6Zm91bmQgIHdpbmFkZHI9MHglbHggY3RsYWRkcj0weCVseFxuIiwKLQkJICAgICAgICAodWxvbmcpY3lfcGNpX3BoeXMyLCAodWxvbmcpY3lfcGNpX3BoeXMwKTsKLQkgICAgICAgICAgICBwcmludGsoIkN5Y2xvbS1ZL1BDSSBub3Qgc3VwcG9ydGVkIGZvciBsb3cgYWRkcmVzc2VzIGluICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbHBoYSBzeXN0ZW1zLlxuIik7Ci0JCSAgICBpLS07Ci0JICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQorCQkJaWYgKGRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0xvKSB7CS8qIGJlbG93IDFNPyAqLworCQkJCXByaW50aygiQ3ljbG9tLVkvUENJIChidXM9MHgwJXgsIHBjaV9pZD0weCV4LCAiLAorCQkJCQlwZGV2LT5idXMtPm51bWJlciwgcGRldi0+ZGV2Zm4pOworCQkJCXByaW50aygicmV2X2lkPSVkKSBJUlElZFxuIiwKKwkJCQkJY3l5X3Jldl9pZCwgKGludCljeV9wY2lfaXJxKTsKKwkJCQlwcmludGsoIkN5Y2xvbS1ZL1BDSTpmb3VuZCAgd2luYWRkcj0weCVseCAiCisJCQkJCSJjdGxhZGRyPTB4JWx4XG4iLAorCQkJCQkodWxvbmcpY3lfcGNpX3BoeXMyLAorCQkJCQkodWxvbmcpY3lfcGNpX3BoeXMwKTsKKwkJCQlwcmludGsoIkN5Y2xvbS1ZL1BDSSBub3Qgc3VwcG9ydGVkIGZvciBsb3cgIgorCQkJCQkiYWRkcmVzc2VzIGluIEFscGhhIHN5c3RlbXMuXG4iKTsKKwkJCQlpLS07CisJCQkJY29udGludWU7CisJCQl9CiAjZW5kaWYKLQkJY3lfcGNpX2FkZHIwID0gaW9yZW1hcChjeV9wY2lfcGh5czAsIEN5UENJX1ljdGwpOwotCQljeV9wY2lfYWRkcjIgPSBpb3JlbWFwKGN5X3BjaV9waHlzMiwgQ3lQQ0lfWXdpbik7CisJCQljeV9wY2lfYWRkcjAgPSBpb3JlbWFwKGN5X3BjaV9waHlzMCwgQ3lQQ0lfWWN0bCk7CisJCQljeV9wY2lfYWRkcjIgPSBpb3JlbWFwKGN5X3BjaV9waHlzMiwgQ3lQQ0lfWXdpbik7CiAKICNpZmRlZiBDWV9QQ0lfREVCVUcKLSAgICAgICAgICAgIHByaW50aygiQ3ljbG9tLVkvUENJOiByZWxvY2F0ZSB3aW5hZGRyPTB4JWx4IGN0bGFkZHI9MHglbHhcbiIsCi0JCSh1X2xvbmcpY3lfcGNpX2FkZHIyLCAodV9sb25nKWN5X3BjaV9hZGRyMCk7CisJCQlwcmludGsoIkN5Y2xvbS1ZL1BDSTogcmVsb2NhdGUgd2luYWRkcj0weCVseCAiCisJCQkJImN0bGFkZHI9MHglbHhcbiIsCisJCQkJKHVfbG9uZyljeV9wY2lfYWRkcjIsICh1X2xvbmcpY3lfcGNpX2FkZHIwKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGN5X3BjaV9uY2hhbiA9ICh1bnNpZ25lZCBzaG9ydCkoQ3lQT1JUU19QRVJfQ0hJUCAqIAotICAgICAgICAgICAgICAgICAgICAgICBjeXlfaW5pdF9jYXJkKGN5X3BjaV9hZGRyMiwgMSkpOwotICAgICAgICAgICAgICAgIGlmKGN5X3BjaV9uY2hhbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkN5Y2xvbS1ZIFBDSSBob3N0IGNhcmQgd2l0aCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygibm8gU2VyaWFsLU1vZHVsZXMgYXQgMHglbHguXG4iLAotCQkJICAgICh1bG9uZykgY3lfcGNpX3BoeXMyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZigoY3lfbmV4dF9jaGFubmVsK2N5X3BjaV9uY2hhbikgPiBOUl9QT1JUUykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDeWNsb20tWS9QQ0kgZm91bmQgYXQgMHglbHggIiwKLQkJCSAgICAodWxvbmcpIGN5X3BjaV9waHlzMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImJ1dCBubyBjaGFubmVscyBhcmUgYXZhaWxhYmxlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkNoYW5nZSBOUl9QT1JUUyBpbiBjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUga2VybmVsLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oaSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIGZpbGwgdGhlIG5leHQgY3lfY2FyZCBzdHJ1Y3R1cmUgYXZhaWxhYmxlICovCi0gICAgICAgICAgICAgICAgZm9yIChqID0gMCA7IGogPCBOUl9DQVJEUyA7IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN5X2NhcmRbal0uYmFzZV9hZGRyID09IDApICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGogPT0gTlJfQ0FSRFMpIHsgICAgLyogbm8gbW9yZSBjeV9jYXJkcyBhdmFpbGFibGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiQ3ljbG9tLVkvUENJIGZvdW5kIGF0IDB4JWx4ICIsCi0JCQkgICAgKHVsb25nKSBjeV9wY2lfcGh5czIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJidXQgbm8gbW9yZSBjYXJkcyBjYW4gYmUgdXNlZC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDaGFuZ2UgTlJfQ0FSRFMgaW4gY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlIGtlcm5lbC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKGkpOwotICAgICAgICAgICAgICAgIH0KKwkJCWN5X3BjaV9uY2hhbiA9ICh1bnNpZ25lZCBzaG9ydCkoQ3lQT1JUU19QRVJfQ0hJUCAqCisJCQkJCWN5eV9pbml0X2NhcmQoY3lfcGNpX2FkZHIyLCAxKSk7CisJCQlpZiAoY3lfcGNpX25jaGFuID09IDApIHsKKwkJCQlwcmludGsoIkN5Y2xvbS1ZIFBDSSBob3N0IGNhcmQgd2l0aCAiKTsKKwkJCQlwcmludGsoIm5vIFNlcmlhbC1Nb2R1bGVzIGF0IDB4JWx4LlxuIiwKKwkJCQkJKHVsb25nKSBjeV9wY2lfcGh5czIpOworCQkJCWktLTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoY3lfbmV4dF9jaGFubmVsICsgY3lfcGNpX25jaGFuKSA+IE5SX1BPUlRTKSB7CisJCQkJcHJpbnRrKCJDeWNsb20tWS9QQ0kgZm91bmQgYXQgMHglbHggIiwKKwkJCQkJKHVsb25nKSBjeV9wY2lfcGh5czIpOworCQkJCXByaW50aygiYnV0IG5vIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUuXG4iKTsKKwkJCQlwcmludGsoIkNoYW5nZSBOUl9QT1JUUyBpbiBjeWNsYWRlcy5jIGFuZCAiCisJCQkJCQkicmVjb21waWxlIGtlcm5lbC5cbiIpOworCQkJCXJldHVybiBpOworCQkJfQorCQkJLyogZmlsbCB0aGUgbmV4dCBjeV9jYXJkIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KKwkJCWZvciAoaiA9IDA7IGogPCBOUl9DQVJEUzsgaisrKSB7CisJCQkJaWYgKGN5X2NhcmRbal0uYmFzZV9hZGRyID09IDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGogPT0gTlJfQ0FSRFMpIHsJLyogbm8gbW9yZSBjeV9jYXJkcyBhdmFpbGFibGUgKi8KKwkJCQlwcmludGsoIkN5Y2xvbS1ZL1BDSSBmb3VuZCBhdCAweCVseCAiLAorCQkJCQkodWxvbmcpIGN5X3BjaV9waHlzMik7CisJCQkJcHJpbnRrKCJidXQgbm8gbW9yZSBjYXJkcyBjYW4gYmUgdXNlZC5cbiIpOworCQkJCXByaW50aygiQ2hhbmdlIE5SX0NBUkRTIGluIGN5Y2xhZGVzLmMgYW5kICIKKwkJCQkJCSJyZWNvbXBpbGUga2VybmVsLlxuIik7CisJCQkJcmV0dXJuIGk7CisJCQl9CiAKLSAgICAgICAgICAgICAgICAvKiBhbGxvY2F0ZSBJUlEgKi8KLSAgICAgICAgICAgICAgICBpZihyZXF1ZXN0X2lycShjeV9wY2lfaXJxLCBjeXlfaW50ZXJydXB0LAotCQkgICAgICAgIElSUUZfU0hBUkVELCAiQ3ljbG9tLVkiLCAmY3lfY2FyZFtqXSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDeWNsb20tWS9QQ0kgZm91bmQgYXQgMHglbHggIiwKLQkJCSAgICAodWxvbmcpIGN5X3BjaV9waHlzMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImJ1dCBjb3VsZCBub3QgYWxsb2NhdGUgSVJRJWQuXG4iLAotCQkJICAgIGN5X3BjaV9pcnEpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKGkpOwotICAgICAgICAgICAgICAgIH0KKwkJCS8qIGFsbG9jYXRlIElSUSAqLworCQkJaWYgKHJlcXVlc3RfaXJxKGN5X3BjaV9pcnEsIGN5eV9pbnRlcnJ1cHQsCisJCQkJCUlSUUZfU0hBUkVELCAiQ3ljbG9tLVkiLCAmY3lfY2FyZFtqXSkpIHsKKwkJCQlwcmludGsoIkN5Y2xvbS1ZL1BDSSBmb3VuZCBhdCAweCVseCAiLAorCQkJCQkodWxvbmcpIGN5X3BjaV9waHlzMik7CisJCQkJcHJpbnRrKCJidXQgY291bGQgbm90IGFsbG9jYXRlIElSUSVkLlxuIiwKKwkJCQkJY3lfcGNpX2lycSk7CisJCQkJcmV0dXJuIGk7CisJCQl9CiAKLSAgICAgICAgICAgICAgICAvKiBzZXQgY3lfY2FyZCAqLwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0uYmFzZV9waHlzID0gKHVsb25nKWN5X3BjaV9waHlzMjsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmN0bF9waHlzID0gKHVsb25nKWN5X3BjaV9waHlzMDsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmJhc2VfYWRkciA9IGN5X3BjaV9hZGRyMjsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmN0bF9hZGRyID0gY3lfcGNpX2FkZHIwOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0uaXJxID0gKGludCkgY3lfcGNpX2lycTsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmJ1c19pbmRleCA9IDE7Ci0gICAgICAgICAgICAgICAgY3lfY2FyZFtqXS5maXJzdF9saW5lID0gY3lfbmV4dF9jaGFubmVsOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0ubnVtX2NoaXBzID0gY3lfcGNpX25jaGFuLzQ7Ci0JCWN5X2NhcmRbal0ucGRldiA9IHBkZXY7Ci0JCi0gICAgICAgICAgICAgICAgLyogZW5hYmxlIGludGVycnVwdHMgaW4gdGhlIFBDSSBpbnRlcmZhY2UgKi8KLQkJcGx4X3ZlciA9IGN5X3JlYWRiKGN5X3BjaV9hZGRyMiArIEN5UExYX1ZFUikgJiAweDBmOwotCQlzd2l0Y2ggKHBseF92ZXIpIHsKLQkJICAgIGNhc2UgUExYXzkwNTA6CisJCQkvKiBzZXQgY3lfY2FyZCAqLworCQkJY3lfY2FyZFtqXS5iYXNlX3BoeXMgPSAodWxvbmcpIGN5X3BjaV9waHlzMjsKKwkJCWN5X2NhcmRbal0uY3RsX3BoeXMgPSAodWxvbmcpIGN5X3BjaV9waHlzMDsKKwkJCWN5X2NhcmRbal0uYmFzZV9hZGRyID0gY3lfcGNpX2FkZHIyOworCQkJY3lfY2FyZFtqXS5jdGxfYWRkciA9IGN5X3BjaV9hZGRyMDsKKwkJCWN5X2NhcmRbal0uaXJxID0gKGludCljeV9wY2lfaXJxOworCQkJY3lfY2FyZFtqXS5idXNfaW5kZXggPSAxOworCQkJY3lfY2FyZFtqXS5maXJzdF9saW5lID0gY3lfbmV4dF9jaGFubmVsOworCQkJY3lfY2FyZFtqXS5udW1fY2hpcHMgPSBjeV9wY2lfbmNoYW4gLyA0OworCQkJY3lfY2FyZFtqXS5wZGV2ID0gcGRldjsKIAotCQkgICAgY3lfd3JpdGViKGN5X3BjaV9hZGRyMCsweDRjLCAweDQzKTsKLQkJICAgIGJyZWFrOworCQkJLyogZW5hYmxlIGludGVycnVwdHMgaW4gdGhlIFBDSSBpbnRlcmZhY2UgKi8KKwkJCXBseF92ZXIgPSBjeV9yZWFkYihjeV9wY2lfYWRkcjIgKyBDeVBMWF9WRVIpICYgMHgwZjsKKwkJCXN3aXRjaCAocGx4X3ZlcikgeworCQkJY2FzZSBQTFhfOTA1MDoKIAotCQkgICAgY2FzZSBQTFhfOTA2MDoKLQkJICAgIGNhc2UgUExYXzkwODA6Ci0JCSAgICBkZWZhdWx0OiAvKiBPbGQgYm9hcmRzLCB1c2UgUExYXzkwNjAgKi8KKwkJCQljeV93cml0ZWIoY3lfcGNpX2FkZHIwICsgMHg0YywgMHg0Myk7CisJCQkJYnJlYWs7CiAKLQkJICAgIHBseF9pbml0KGN5X3BjaV9hZGRyMCwgMHg2Yyk7Ci0JCSAgICAvKiBGb3Igc29tZSB5ZXQgdW5rbm93biByZWFzb24sIG9uY2UgdGhlIFBMWDkwNjAgcmVsb2FkcwotCQkgICAgICAgdGhlIEVFUFJPTSwgdGhlIElSUSBpcyBsb3N0IGFuZCwgdGh1cywgd2UgaGF2ZSB0bwotCQkgICAgICAgcmUtd3JpdGUgaXQgdG8gdGhlIFBDSSBjb25maWcuIHJlZ2lzdGVycy4KLQkJICAgICAgIFRoaXMgd2lsbCByZW1haW4gaGVyZSB1bnRpbCB3ZSBmaW5kIGEgcGVybWFuZW50IGZpeC4gKi8KLQkJICAgIHBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGN5X3BjaV9pcnEpOworCQkJY2FzZSBQTFhfOTA2MDoKKwkJCWNhc2UgUExYXzkwODA6CisJCQlkZWZhdWx0OgkvKiBPbGQgYm9hcmRzLCB1c2UgUExYXzkwNjAgKi8KIAotCQkgICAgY3lfd3JpdGV3KGN5X3BjaV9hZGRyMCsweDY4LCAKLQkJCWN5X3JlYWR3KGN5X3BjaV9hZGRyMCsweDY4KXwweDA5MDApOwotCQkgICAgYnJlYWs7Ci0JCX0KKwkJCQlwbHhfaW5pdChjeV9wY2lfYWRkcjAsIDB4NmMpOworCQkJLyogRm9yIHNvbWUgeWV0IHVua25vd24gcmVhc29uLCBvbmNlIHRoZSBQTFg5MDYwIHJlbG9hZHMKKwkJCSAgIHRoZSBFRVBST00sIHRoZSBJUlEgaXMgbG9zdCBhbmQsIHRodXMsIHdlIGhhdmUgdG8KKwkJCSAgIHJlLXdyaXRlIGl0IHRvIHRoZSBQQ0kgY29uZmlnLiByZWdpc3RlcnMuCisJCQkgICBUaGlzIHdpbGwgcmVtYWluIGhlcmUgdW50aWwgd2UgZmluZCBhIHBlcm1hbmVudAorCQkJICAgZml4LiAqLworCQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsCisJCQkJCQljeV9wY2lfaXJxKTsKIAotICAgICAgICAgICAgICAgIC8qIHByaW50IG1lc3NhZ2UgKi8KLSAgICAgICAgICAgICAgICBwcmludGsoIkN5Y2xvbS1ZL1BDSSAjJWQ6IDB4JWx4LTB4JWx4LCBJUlElZCwgIiwKLQkJICAgICAgIGorMSwgCi0JCSAgICAgICAodWxvbmcpY3lfcGNpX3BoeXMyLCAKLQkJICAgICAgICh1bG9uZykoY3lfcGNpX3BoeXMyICsgQ3lQQ0lfWXdpbiAtIDEpLAotCQkgICAgICAgKGludCljeV9wY2lfaXJxKTsKLSAgICAgICAgICAgICAgICBwcmludGsoIiVkIGNoYW5uZWxzIHN0YXJ0aW5nIGZyb20gcG9ydCAlZC5cbiIsCi0JCSAgICBjeV9wY2lfbmNoYW4sIGN5X25leHRfY2hhbm5lbCk7CisJCQkJY3lfd3JpdGV3KGN5X3BjaV9hZGRyMCArIDB4NjgsCisJCQkJCSAgY3lfcmVhZHcoY3lfcGNpX2FkZHIwICsKKwkJCQkJCSAgIDB4NjgpIHwgMHgwOTAwKTsKKwkJCQlicmVhazsKKwkJCX0KIAotICAgICAgICAgICAgICAgIGN5X25leHRfY2hhbm5lbCArPSBjeV9wY2lfbmNoYW47Ci0gICAgfWVsc2UgaWYgKGRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9aX0xvKXsKLQkgICAgLyogcHJpbnQgbWVzc2FnZSAqLwotCQlwcmludGsoIkN5Y2xhZGVzLVovUENJIChidXM9MHgwJXgsIHBjaV9pZD0weCV4LCAiLAotCQkgICAgcGRldi0+YnVzLT5udW1iZXIsIHBkZXYtPmRldmZuKTsKLQkJcHJpbnRrKCJyZXZfaWQ9JWQpIElSUSVkXG4iLAotCQkgICAgY3l5X3Jldl9pZCwgKGludCljeV9wY2lfaXJxKTsKLQkJcHJpbnRrKCJDeWNsYWRlcy1aL1BDSTogZm91bmQgd2luYWRkcj0weCVseCBjdGxhZGRyPTB4JWx4XG4iLAotCQkgICAgKHVsb25nKWN5X3BjaV9waHlzMiwgKHVsb25nKWN5X3BjaV9waHlzMCk7Ci0JICAgIHByaW50aygiQ3ljbGFkZXMtWi9QQ0kgbm90IHN1cHBvcnRlZCBmb3IgbG93IGFkZHJlc3Nlc1xuIik7Ci0JICAgIGJyZWFrOwotICAgIH1lbHNlIGlmIChkZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9DWUNMT01fWl9IaSl7CisJCQkvKiBwcmludCBtZXNzYWdlICovCisJCQlwcmludGsoIkN5Y2xvbS1ZL1BDSSAjJWQ6IDB4JWx4LTB4JWx4LCBJUlElZCwgIiwKKwkJCQlqICsgMSwgKHVsb25nKWN5X3BjaV9waHlzMiwKKwkJCQkodWxvbmcpIChjeV9wY2lfcGh5czIgKyBDeVBDSV9Zd2luIC0gMSksCisJCQkJKGludCljeV9wY2lfaXJxKTsKKwkJCXByaW50aygiJWQgY2hhbm5lbHMgc3RhcnRpbmcgZnJvbSBwb3J0ICVkLlxuIiwKKwkJCQljeV9wY2lfbmNoYW4sIGN5X25leHRfY2hhbm5lbCk7CisKKwkJCWN5X25leHRfY2hhbm5lbCArPSBjeV9wY2lfbmNoYW47CisJCX0gZWxzZSBpZiAoZGV2aWNlX2lkID09IFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1pfTG8pIHsKKwkJCS8qIHByaW50IG1lc3NhZ2UgKi8KKwkJCXByaW50aygiQ3ljbGFkZXMtWi9QQ0kgKGJ1cz0weDAleCwgcGNpX2lkPTB4JXgsICIsCisJCQkJcGRldi0+YnVzLT5udW1iZXIsIHBkZXYtPmRldmZuKTsKKwkJCXByaW50aygicmV2X2lkPSVkKSBJUlElZFxuIiwKKwkJCQljeXlfcmV2X2lkLCAoaW50KWN5X3BjaV9pcnEpOworCQkJcHJpbnRrKCJDeWNsYWRlcy1aL1BDSTogZm91bmQgd2luYWRkcj0weCVseCAiCisJCQkJImN0bGFkZHI9MHglbHhcbiIsCisJCQkJKHVsb25nKWN5X3BjaV9waHlzMiwgKHVsb25nKWN5X3BjaV9waHlzMCk7CisJCQlwcmludGsoIkN5Y2xhZGVzLVovUENJIG5vdCBzdXBwb3J0ZWQgZm9yIGxvdyAiCisJCQkJImFkZHJlc3Nlc1xuIik7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChkZXZpY2VfaWQgPT0gUENJX0RFVklDRV9JRF9DWUNMT01fWl9IaSkgewogI2lmZGVmIENZX1BDSV9ERUJVRwotICAgICAgICAgICAgcHJpbnRrKCJDeWNsYWRlcy1aL1BDSSAoYnVzPTB4MCV4LCBwY2lfaWQ9MHgleCwgIiwKLQkgICAgICAgIHBkZXYtPmJ1cy0+bnVtYmVyLCBwZGV2LT5kZXZmbik7Ci0gICAgICAgICAgICBwcmludGsoInJldl9pZD0lZCkgSVJRJWRcbiIsCi0JCWN5eV9yZXZfaWQsIChpbnQpY3lfcGNpX2lycSk7Ci0gICAgICAgICAgICBwcmludGsoIkN5Y2xhZGVzLVovUENJOiBmb3VuZCB3aW5hZGRyPTB4JWx4IGN0bGFkZHI9MHglbHhcbiIsCi0gICAgICAgICAgICAgICAgKHVsb25nKWN5X3BjaV9waHlzMiwgKHVsb25nKWN5X3BjaV9waHlzMCk7CisJCQlwcmludGsoIkN5Y2xhZGVzLVovUENJIChidXM9MHgwJXgsIHBjaV9pZD0weCV4LCAiLAorCQkJCXBkZXYtPmJ1cy0+bnVtYmVyLCBwZGV2LT5kZXZmbik7CisJCQlwcmludGsoInJldl9pZD0lZCkgSVJRJWRcbiIsCisJCQkJY3l5X3Jldl9pZCwgKGludCljeV9wY2lfaXJxKTsKKwkJCXByaW50aygiQ3ljbGFkZXMtWi9QQ0k6IGZvdW5kIHdpbmFkZHI9MHglbHggIgorCQkJCSJjdGxhZGRyPTB4JWx4XG4iLAorCQkJCSh1bG9uZykgY3lfcGNpX3BoeXMyLCAodWxvbmcpIGN5X3BjaV9waHlzMCk7CiAjZW5kaWYKLQkJY3lfcGNpX2FkZHIwID0gaW9yZW1hcChjeV9wY2lfcGh5czAsIEN5UENJX1pjdGwpOworCQkJY3lfcGNpX2FkZHIwID0gaW9yZW1hcChjeV9wY2lfcGh5czAsIEN5UENJX1pjdGwpOwogCi0JCS8qIERpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgUExYIGJlZm9yZSByZXNldHRpbmcgaXQgKi8KLQkJY3lfd3JpdGV3KGN5X3BjaV9hZGRyMCsweDY4LAotCQkJY3lfcmVhZHcoY3lfcGNpX2FkZHIwKzB4NjgpICYgfjB4MDkwMCk7CisJCQkvKiBEaXNhYmxlIGludGVycnVwdHMgb24gdGhlIFBMWCBiZWZvcmUgcmVzZXR0aW5nIGl0ICovCisJCQljeV93cml0ZXcoY3lfcGNpX2FkZHIwICsgMHg2OCwKKwkJCQljeV9yZWFkdyhjeV9wY2lfYWRkcjAgKyAweDY4KSAmIH4weDA5MDApOwogCi0JCXBseF9pbml0KGN5X3BjaV9hZGRyMCwgMHg2Yyk7Ci0JCS8qIEZvciBzb21lIHlldCB1bmtub3duIHJlYXNvbiwgb25jZSB0aGUgUExYOTA2MCByZWxvYWRzCi0JCSAgIHRoZSBFRVBST00sIHRoZSBJUlEgaXMgbG9zdCBhbmQsIHRodXMsIHdlIGhhdmUgdG8KLQkJICAgcmUtd3JpdGUgaXQgdG8gdGhlIFBDSSBjb25maWcuIHJlZ2lzdGVycy4KLQkJICAgVGhpcyB3aWxsIHJlbWFpbiBoZXJlIHVudGlsIHdlIGZpbmQgYSBwZXJtYW5lbnQgZml4LiAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBjeV9wY2lfaXJxKTsKKwkJCXBseF9pbml0KGN5X3BjaV9hZGRyMCwgMHg2Yyk7CisJCQkvKiBGb3Igc29tZSB5ZXQgdW5rbm93biByZWFzb24sIG9uY2UgdGhlIFBMWDkwNjAgcmVsb2FkcworCQkJICAgdGhlIEVFUFJPTSwgdGhlIElSUSBpcyBsb3N0IGFuZCwgdGh1cywgd2UgaGF2ZSB0bworCQkJICAgcmUtd3JpdGUgaXQgdG8gdGhlIFBDSSBjb25maWcuIHJlZ2lzdGVycy4KKwkJCSAgIFRoaXMgd2lsbCByZW1haW4gaGVyZSB1bnRpbCB3ZSBmaW5kIGEgcGVybWFuZW50CisJCQkgICBmaXguICovCisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLAorCQkJCQkJY3lfcGNpX2lycSk7CiAKLQkJbWFpbGJveCA9ICh1Y2xvbmcpY3lfcmVhZGwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopIAotCQkJICAgY3lfcGNpX2FkZHIwKS0+bWFpbF9ib3hfMCk7CisJCQltYWlsYm94ID0KKwkJCSAgICAodWNsb25nKWN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKQorCQkJCQkJY3lfcGNpX2FkZHIwKS0+bWFpbF9ib3hfMCk7CiAKLQkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJICAgIHByaW50aygiICBXYXJuaW5nOiBQQ0kgSS9PIGJpdCBpbmNvcnJlY3RseSBzZXQuICIKLQkJCSAgICJJZ25vcmluZyBpdC4uLlxuIik7Ci0JCSAgICBwZGV2LT5yZXNvdXJjZVsyXS5mbGFncyAmPSB+SU9SRVNPVVJDRV9JTzsKLQkJfQorCQkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJCQlwcmludGsoIiAgV2FybmluZzogUENJIEkvTyBiaXQgaW5jb3JyZWN0bHkgIgorCQkJCQkic2V0LiBJZ25vcmluZyBpdC4uLlxuIik7CisJCQkJcGRldi0+cmVzb3VyY2VbMl0uZmxhZ3MgJj0gfklPUkVTT1VSQ0VfSU87CisJCQl9CiAKLQkJLyogQWx0aG91Z2ggd2UgZG9uJ3QgdXNlIHRoaXMgSS9PIHJlZ2lvbiwgd2Ugc2hvdWxkCi0JCSAgIHJlcXVlc3QgaXQgZnJvbSB0aGUga2VybmVsIGFueXdheSwgdG8gYXZvaWQgcHJvYmxlbXMKLQkJICAgd2l0aCBvdGhlciBkcml2ZXJzIGFjY2Vzc2luZyBpdC4gKi8KLQkJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgIkN5Y2xhZGVzLVoiKSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImN5Y2xhZGVzOiBmYWlsZWQgdG8gcmVzZXJ2ZSBQQ0kgcmVzb3VyY2VzXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCi0JCWlmIChtYWlsYm94ID09IFpFX1YxKSB7Ci0JCSAgICBjeV9wY2lfYWRkcjIgPSBpb3JlbWFwKGN5X3BjaV9waHlzMiwgQ3lQQ0lfWmVfd2luKTsKLQkJICAgIGlmIChaZUluZGV4ID09IE5SX0NBUkRTKSB7Ci0JCQlwcmludGsoIkN5Y2xhZGVzLVplL1BDSSBmb3VuZCBhdCAweCVseCAiLAotCQkJCSh1bG9uZyljeV9wY2lfcGh5czIpOwotCQkJcHJpbnRrKCJidXQgbm8gbW9yZSBjYXJkcyBjYW4gYmUgdXNlZC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDaGFuZ2UgTlJfQ0FSRFMgaW4gY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlIGtlcm5lbC5cbiIpOwotCQkgICAgfSBlbHNlIHsKLQkJCVplX3BoeXMwW1plSW5kZXhdID0gY3lfcGNpX3BoeXMwOwotCQkJWmVfcGh5czJbWmVJbmRleF0gPSBjeV9wY2lfcGh5czI7Ci0JCQlaZV9hZGRyMFtaZUluZGV4XSA9IGN5X3BjaV9hZGRyMDsKLQkJCVplX2FkZHIyW1plSW5kZXhdID0gY3lfcGNpX2FkZHIyOwotCQkJWmVfaXJxW1plSW5kZXhdID0gY3lfcGNpX2lycTsKLQkJCVplX3BkZXZbWmVJbmRleF0gPSBwZGV2OwotCQkJWmVJbmRleCsrOwotCQkgICAgfQotCQkgICAgaS0tOwotCQkgICAgY29udGludWU7Ci0JCX0gZWxzZSB7Ci0JCSAgICBjeV9wY2lfYWRkcjIgPSBpb3JlbWFwKGN5X3BjaV9waHlzMiwgQ3lQQ0lfWndpbik7Ci0JCX0KKwkJCS8qIEFsdGhvdWdoIHdlIGRvbid0IHVzZSB0aGlzIEkvTyByZWdpb24sIHdlIHNob3VsZAorCQkJICAgcmVxdWVzdCBpdCBmcm9tIHRoZSBrZXJuZWwgYW55d2F5LCB0byBhdm9pZCBwcm9ibGVtcworCQkJICAgd2l0aCBvdGhlciBkcml2ZXJzIGFjY2Vzc2luZyBpdC4gKi8KKwkJCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJDeWNsYWRlcy1aIikgIT0gMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiY3ljbGFkZXM6IGZhaWxlZCB0byByZXNlcnZlICIKKwkJCQkJIlBDSSByZXNvdXJjZXNcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAobWFpbGJveCA9PSBaRV9WMSkgeworCQkJCWN5X3BjaV9hZGRyMiA9IGlvcmVtYXAoY3lfcGNpX3BoeXMyLAorCQkJCQkJQ3lQQ0lfWmVfd2luKTsKKwkJCQlpZiAoWmVJbmRleCA9PSBOUl9DQVJEUykgeworCQkJCQlwcmludGsoIkN5Y2xhZGVzLVplL1BDSSBmb3VuZCBhdCAiCisJCQkJCQkiMHglbHggYnV0IG5vIG1vcmUgY2FyZHMgY2FuICIKKwkJCQkJCSJiZSB1c2VkLlxuQ2hhbmdlIE5SX0NBUkRTIGluICIKKwkJCQkJCSJjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUgIgorCQkJCQkJImtlcm5lbC5cbiIsCisJCQkJCQkodWxvbmcpY3lfcGNpX3BoeXMyKTsKKwkJCQl9IGVsc2UgeworCQkJCQlaZV9waHlzMFtaZUluZGV4XSA9IGN5X3BjaV9waHlzMDsKKwkJCQkJWmVfcGh5czJbWmVJbmRleF0gPSBjeV9wY2lfcGh5czI7CisJCQkJCVplX2FkZHIwW1plSW5kZXhdID0gY3lfcGNpX2FkZHIwOworCQkJCQlaZV9hZGRyMltaZUluZGV4XSA9IGN5X3BjaV9hZGRyMjsKKwkJCQkJWmVfaXJxW1plSW5kZXhdID0gY3lfcGNpX2lycTsKKwkJCQkJWmVfcGRldltaZUluZGV4XSA9IHBkZXY7CisJCQkJCVplSW5kZXgrKzsKKwkJCQl9CisJCQkJaS0tOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQljeV9wY2lfYWRkcjIgPSBpb3JlbWFwKGN5X3BjaV9waHlzMixDeVBDSV9ad2luKTsKKwkJCX0KIAogI2lmZGVmIENZX1BDSV9ERUJVRwotICAgICAgICAgICAgcHJpbnRrKCJDeWNsYWRlcy1aL1BDSTogcmVsb2NhdGUgd2luYWRkcj0weCVseCBjdGxhZGRyPTB4JWx4XG4iLAotICAgICAgICAgICAgICAgICh1bG9uZyljeV9wY2lfYWRkcjIsICh1bG9uZyljeV9wY2lfYWRkcjApOwotCSAgICBpZiAobWFpbGJveCA9PSBaT19WMSkgewotCQljeV93cml0ZWwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCAqKQotCQkJICAoY3lfcGNpX2FkZHIwKSktPmxvY19hZGRyX2Jhc2UsIFdJTl9DUkVHKTsKLQkJUEFVU0UKLQkJcHJpbnRrKCJDeWNsYWRlcy04Wm8vUENJOiBGUEdBIGlkICVseCwgdmVyICVseFxuIiwKLQkJICAgICAgICh1bG9uZykoMHhmZiAmIGN5X3JlYWRsKCYoKHN0cnVjdCBDVVNUT01fUkVHICopCi0JCSAgICAgICAgKGN5X3BjaV9hZGRyMikpLT5mcGdhX2lkKSksCi0JCSAgICAgICAodWxvbmcpKDB4ZmYgJiBjeV9yZWFkbCgmKChzdHJ1Y3QgQ1VTVE9NX1JFRyAqKQotCQkgICAgICAgIChjeV9wY2lfYWRkcjIpKS0+ZnBnYV92ZXJzaW9uKSkpOwotCQljeV93cml0ZWwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCAqKQotCQkJICAoY3lfcGNpX2FkZHIwKSktPmxvY19hZGRyX2Jhc2UsIFdJTl9SQU0pOwotCSAgICB9IGVsc2UgewotCQlwcmludGsoIkN5Y2xhZGVzLVovUENJOiBOZXcgQ3ljbGFkZXMtWiBib2FyZC4gIEZQR0Egbm90IGxvYWRlZFxuIik7Ci0JICAgIH0KKwkJCXByaW50aygiQ3ljbGFkZXMtWi9QQ0k6IHJlbG9jYXRlIHdpbmFkZHI9MHglbHggIgorCQkJCSJjdGxhZGRyPTB4JWx4XG4iLAorCQkJCSh1bG9uZykgY3lfcGNpX2FkZHIyLCAodWxvbmcpIGN5X3BjaV9hZGRyMCk7CisJCQlpZiAobWFpbGJveCA9PSBaT19WMSkgeworCQkJCWN5X3dyaXRlbCgmKChzdHJ1Y3QgUlVOVElNRV85MDYwICopCisJCQkJCShjeV9wY2lfYWRkcjApKS0+bG9jX2FkZHJfYmFzZSwKKwkJCQkJV0lOX0NSRUcpOworCQkJCVBBVVNFOworCQkJCXByaW50aygiQ3ljbGFkZXMtOFpvL1BDSTogRlBHQSBpZCAlbHgsIHZlciAiCisJCQkJCSIlbHhcbiIsICh1bG9uZykgKDB4ZmYgJgorCQkJCQljeV9yZWFkbCgmKChzdHJ1Y3QgQ1VTVE9NX1JFRyAqKQorCQkJCQkJKGN5X3BjaV9hZGRyMikpLT5mcGdhX2lkKSksCisJCQkJCSh1bG9uZykoMHhmZiAmCisJCQkJCWN5X3JlYWRsKCYoKHN0cnVjdCBDVVNUT01fUkVHICopCisJCQkJCQkoY3lfcGNpX2FkZHIyKSktPgorCQkJCQkJCWZwZ2FfdmVyc2lvbikpKTsKKwkJCQljeV93cml0ZWwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCAqKQorCQkJCQkoY3lfcGNpX2FkZHIwKSktPmxvY19hZGRyX2Jhc2UsCisJCQkJCVdJTl9SQU0pOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoIkN5Y2xhZGVzLVovUENJOiBOZXcgQ3ljbGFkZXMtWiBib2FyZC4gICIKKwkJCQkJCSJGUEdBIG5vdCBsb2FkZWRcbiIpOworCQkJfQogI2VuZGlmCi0JICAgIC8qIFRoZSBmb2xsb3dpbmcgY2xlYXJzIHRoZSBmaXJtd2FyZSBpZCB3b3JkLiAgVGhpcyBlbnN1cmVzCi0JICAgICAgIHRoYXQgdGhlIGRyaXZlciB3aWxsIG5vdCBhdHRlbXB0IHRvIHRhbGsgdG8gdGhlIGJvYXJkCi0JICAgICAgIHVudGlsIGl0IGhhcyBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLgotCSAgICAgKi8KLQkJUEFVU0UKLQkJaWYgKChtYWlsYm94ID09IFpPX1YxKSB8fCAobWFpbGJveCA9PSBaT19WMikpCi0JCSAgICBjeV93cml0ZWwoY3lfcGNpX2FkZHIyICsgSURfQUREUkVTUywgMEwpOworCQkJLyogVGhlIGZvbGxvd2luZyBjbGVhcnMgdGhlIGZpcm13YXJlIGlkIHdvcmQuICBUaGlzCisJCQkgICBlbnN1cmVzIHRoYXQgdGhlIGRyaXZlciB3aWxsIG5vdCBhdHRlbXB0IHRvIHRhbGsgdG8KKwkJCSAgIHRoZSBib2FyZCB1bnRpbCBpdCBoYXMgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZC4KKwkJCSAqLworCQkJUEFVU0U7CisJCQlpZiAoKG1haWxib3ggPT0gWk9fVjEpIHx8IChtYWlsYm94ID09IFpPX1YyKSkKKwkJCQljeV93cml0ZWwoY3lfcGNpX2FkZHIyICsgSURfQUREUkVTUywgMEwpOwogCi0gICAgICAgICAgICAgICAgLyogVGhpcyBtdXN0IGJlIGEgQ3ljbGFkZXMtOFpvL1BDSS4gIFRoZSBleHRlbmRhYmxlCi0gICAgICAgICAgICAgICAgICAgdmVyc2lvbiB3aWxsIGhhdmUgYSBkaWZmZXJlbnQgZGV2aWNlX2lkIGFuZCB3aWxsCi0gICAgICAgICAgICAgICAgICAgYmUgYWxsb2NhdGVkIGl0cyBtYXhpbXVtIG51bWJlciBvZiBwb3J0cy4gKi8KLSAgICAgICAgICAgICAgICBjeV9wY2lfbmNoYW4gPSA4OworCQkJLyogVGhpcyBtdXN0IGJlIGEgQ3ljbGFkZXMtOFpvL1BDSS4gIFRoZSBleHRlbmRhYmxlCisJCQkgICB2ZXJzaW9uIHdpbGwgaGF2ZSBhIGRpZmZlcmVudCBkZXZpY2VfaWQgYW5kIHdpbGwKKwkJCSAgIGJlIGFsbG9jYXRlZCBpdHMgbWF4aW11bSBudW1iZXIgb2YgcG9ydHMuICovCisJCQljeV9wY2lfbmNoYW4gPSA4OwogCi0gICAgICAgICAgICAgICAgaWYoKGN5X25leHRfY2hhbm5lbCtjeV9wY2lfbmNoYW4pID4gTlJfUE9SVFMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiQ3ljbGFkZXMtOFpvL1BDSSBmb3VuZCBhdCAweCVseCAiLAotCQkJICAgICh1bG9uZyljeV9wY2lfcGh5czIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJidXQgbm8gY2hhbm5lbHMgYXJlIGF2YWlsYWJsZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDaGFuZ2UgTlJfUE9SVFMgaW4gY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlIGtlcm5lbC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKGkpOwotICAgICAgICAgICAgICAgIH0KKwkJCWlmICgoY3lfbmV4dF9jaGFubmVsICsgY3lfcGNpX25jaGFuKSA+IE5SX1BPUlRTKSB7CisJCQkJcHJpbnRrKCJDeWNsYWRlcy04Wm8vUENJIGZvdW5kIGF0IDB4JWx4IGJ1dCIKKwkJCQkJIm5vIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUuXG5DaGFuZ2UgIgorCQkJCQkiTlJfUE9SVFMgaW4gY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlICIKKwkJCQkJImtlcm5lbC5cbiIsICh1bG9uZyljeV9wY2lfcGh5czIpOworCQkJCXJldHVybiBpOworCQkJfQogCi0gICAgICAgICAgICAgICAgLyogZmlsbCB0aGUgbmV4dCBjeV9jYXJkIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGogPSAwIDsgaiA8IE5SX0NBUkRTIDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3lfY2FyZFtqXS5iYXNlX2FkZHIgPT0gMCkgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaiA9PSBOUl9DQVJEUykgeyAgICAvKiBubyBtb3JlIGN5X2NhcmRzIGF2YWlsYWJsZSAqLwotCQkgICAgcHJpbnRrKCJDeWNsYWRlcy04Wm8vUENJIGZvdW5kIGF0IDB4JWx4ICIsCi0JCQkodWxvbmcpY3lfcGNpX3BoeXMyKTsKLQkJICAgIHByaW50aygiYnV0IG5vIG1vcmUgY2FyZHMgY2FuIGJlIHVzZWQuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDaGFuZ2UgTlJfQ0FSRFMgaW4gY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlIGtlcm5lbC5cbiIpOwotCQkgICAgcmV0dXJuKGkpOwotICAgICAgICAgICAgICAgIH0KLQorCQkJLyogZmlsbCB0aGUgbmV4dCBjeV9jYXJkIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KKwkJCWZvciAoaiA9IDA7IGogPCBOUl9DQVJEUzsgaisrKSB7CisJCQkJaWYgKGN5X2NhcmRbal0uYmFzZV9hZGRyID09IDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGogPT0gTlJfQ0FSRFMpIHsJLyogbm8gbW9yZSBjeV9jYXJkcyBhdmFpbGFibGUgKi8KKwkJCQlwcmludGsoIkN5Y2xhZGVzLThaby9QQ0kgZm91bmQgYXQgMHglbHggYnV0IgorCQkJCQkibm8gbW9yZSBjYXJkcyBjYW4gYmUgdXNlZC5cbkNoYW5nZSAiCisJCQkJCSJOUl9DQVJEUyBpbiBjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUgIgorCQkJCQkia2VybmVsLlxuIiwgKHVsb25nKWN5X3BjaV9waHlzMik7CisJCQkJcmV0dXJuIGk7CisJCQl9CiAjaWZkZWYgQ09ORklHX0NZWl9JTlRSCi0gICAgICAgICAgICAgICAgLyogYWxsb2NhdGUgSVJRIG9ubHkgaWYgYm9hcmQgaGFzIGFuIElSUSAqLwotCQlpZiggKGN5X3BjaV9pcnEgIT0gMCkgJiYgKGN5X3BjaV9pcnEgIT0gMjU1KSApIHsKLQkJICAgIGlmKHJlcXVlc3RfaXJxKGN5X3BjaV9pcnEsIGN5el9pbnRlcnJ1cHQsCi0JCQlJUlFGX1NIQVJFRCwgIkN5Y2xhZGVzLVoiLCAmY3lfY2FyZFtqXSkpCi0JCSAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkN5Y2xvbS04Wm8vUENJIGZvdW5kIGF0IDB4JWx4ICIsCi0JCQkgICAgKHVsb25nKSBjeV9wY2lfcGh5czIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJidXQgY291bGQgbm90IGFsbG9jYXRlIElSUSVkLlxuIiwKLQkJCSAgICBjeV9wY2lfaXJxKTsKLQkJCXJldHVybihpKTsKLQkJICAgIH0KKwkJCS8qIGFsbG9jYXRlIElSUSBvbmx5IGlmIGJvYXJkIGhhcyBhbiBJUlEgKi8KKwkJCWlmICgoY3lfcGNpX2lycSAhPSAwKSAmJiAoY3lfcGNpX2lycSAhPSAyNTUpKSB7CisJCQkJaWYgKHJlcXVlc3RfaXJxKGN5X3BjaV9pcnEsIGN5el9pbnRlcnJ1cHQsCisJCQkJCQlJUlFGX1NIQVJFRCwgIkN5Y2xhZGVzLVoiLAorCQkJCQkJJmN5X2NhcmRbal0pKSB7CisJCQkJCXByaW50aygiQ3ljbG9tLThaby9QQ0kgZm91bmQgYXQgMHglbHggIgorCQkJCQkJImJ1dCBjb3VsZCBub3QgYWxsb2NhdGUgIgorCQkJCQkJIklSUSVkLlxuIiwgKHVsb25nKWN5X3BjaV9waHlzMiwKKwkJCQkJCWN5X3BjaV9pcnEpOworCQkJCQlyZXR1cm4gaTsKKwkJCQl9CisJCQl9CisjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCisKKwkJCS8qIHNldCBjeV9jYXJkICovCisJCQljeV9jYXJkW2pdLmJhc2VfcGh5cyA9IGN5X3BjaV9waHlzMjsKKwkJCWN5X2NhcmRbal0uY3RsX3BoeXMgPSBjeV9wY2lfcGh5czA7CisJCQljeV9jYXJkW2pdLmJhc2VfYWRkciA9IGN5X3BjaV9hZGRyMjsKKwkJCWN5X2NhcmRbal0uY3RsX2FkZHIgPSBjeV9wY2lfYWRkcjA7CisJCQljeV9jYXJkW2pdLmlycSA9IChpbnQpY3lfcGNpX2lycTsKKwkJCWN5X2NhcmRbal0uYnVzX2luZGV4ID0gMTsKKwkJCWN5X2NhcmRbal0uZmlyc3RfbGluZSA9IGN5X25leHRfY2hhbm5lbDsKKwkJCWN5X2NhcmRbal0ubnVtX2NoaXBzID0gLTE7CisJCQljeV9jYXJkW2pdLnBkZXYgPSBwZGV2OworCisJCQkvKiBwcmludCBtZXNzYWdlICovCisjaWZkZWYgQ09ORklHX0NZWl9JTlRSCisJCQkvKiBkb24ndCByZXBvcnQgSVJRIGlmIGJvYXJkIGlzIG5vIElSUSAqLworCQkJaWYgKChjeV9wY2lfaXJxICE9IDApICYmIChjeV9wY2lfaXJxICE9IDI1NSkpCisJCQkJcHJpbnRrKCJDeWNsYWRlcy04Wm8vUENJICMlZDogMHglbHgtMHglbHgsICIKKwkJCQkJIklSUSVkLCAiLCBqICsgMSwgKHVsb25nKWN5X3BjaV9waHlzMiwKKwkJCQkJKHVsb25nKSAoY3lfcGNpX3BoeXMyICsgQ3lQQ0lfWndpbiAtIDEpLAorCQkJCQkoaW50KWN5X3BjaV9pcnEpOworCQkJZWxzZQorI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLworCQkJCXByaW50aygiQ3ljbGFkZXMtOFpvL1BDSSAjJWQ6IDB4JWx4LTB4JWx4LCAiLAorCQkJCQlqICsgMSwgKHVsb25nKWN5X3BjaV9waHlzMiwKKwkJCQkJKHVsb25nKShjeV9wY2lfcGh5czIgKyBDeVBDSV9ad2luIC0gMSkpOworCisJCQlwcmludGsoIiVkIGNoYW5uZWxzIHN0YXJ0aW5nIGZyb20gcG9ydCAlZC5cbiIsCisJCQkJCWN5X3BjaV9uY2hhbiwgY3lfbmV4dF9jaGFubmVsKTsKKwkJCWN5X25leHRfY2hhbm5lbCArPSBjeV9wY2lfbmNoYW47CiAJCX0KLSNlbmRpZiAvKiBDT05GSUdfQ1laX0lOVFIgKi8KLQotCi0gICAgICAgICAgICAgICAgLyogc2V0IGN5X2NhcmQgKi8KLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmJhc2VfcGh5cyA9IGN5X3BjaV9waHlzMjsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmN0bF9waHlzID0gY3lfcGNpX3BoeXMwOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0uYmFzZV9hZGRyID0gY3lfcGNpX2FkZHIyOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0uY3RsX2FkZHIgPSBjeV9wY2lfYWRkcjA7Ci0gICAgICAgICAgICAgICAgY3lfY2FyZFtqXS5pcnEgPSAoaW50KSBjeV9wY2lfaXJxOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0uYnVzX2luZGV4ID0gMTsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmZpcnN0X2xpbmUgPSBjeV9uZXh0X2NoYW5uZWw7Ci0gICAgICAgICAgICAgICAgY3lfY2FyZFtqXS5udW1fY2hpcHMgPSAtMTsKLQkJY3lfY2FyZFtqXS5wZGV2ID0gcGRldjsKLQotICAgICAgICAgICAgICAgIC8qIHByaW50IG1lc3NhZ2UgKi8KLSNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLQkJLyogZG9uJ3QgcmVwb3J0IElSUSBpZiBib2FyZCBpcyBubyBJUlEgKi8KLQkJaWYoIChjeV9wY2lfaXJxICE9IDApICYmIChjeV9wY2lfaXJxICE9IDI1NSkgKQotCQkgICAgcHJpbnRrKCJDeWNsYWRlcy04Wm8vUENJICMlZDogMHglbHgtMHglbHgsIElSUSVkLCAiLAotCQkJaisxLCh1bG9uZyljeV9wY2lfcGh5czIsCi0JCQkodWxvbmcpKGN5X3BjaV9waHlzMiArIEN5UENJX1p3aW4gLSAxKSwKLQkJCShpbnQpY3lfcGNpX2lycSk7Ci0JCWVsc2UKLSNlbmRpZiAvKiBDT05GSUdfQ1laX0lOVFIgKi8KLQkJICAgIHByaW50aygiQ3ljbGFkZXMtOFpvL1BDSSAjJWQ6IDB4JWx4LTB4JWx4LCAiLAotCQkJaisxLCh1bG9uZyljeV9wY2lfcGh5czIsCi0JCQkodWxvbmcpKGN5X3BjaV9waHlzMiArIEN5UENJX1p3aW4gLSAxKSk7Ci0KLSAgICAgICAgICAgICAgICBwcmludGsoIiVkIGNoYW5uZWxzIHN0YXJ0aW5nIGZyb20gcG9ydCAlZC5cbiIsCi0JCSAgICBjeV9wY2lfbmNoYW4sY3lfbmV4dF9jaGFubmVsKTsKLSAgICAgICAgICAgICAgICBjeV9uZXh0X2NoYW5uZWwgKz0gY3lfcGNpX25jaGFuOwotCSAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKDsgWmVJbmRleCAhPSAwICYmIGkgPCBOUl9DQVJEUzsgaSsrKSB7Ci0JICAgIGN5X3BjaV9waHlzMCA9IFplX3BoeXMwWzBdOwotCSAgICBjeV9wY2lfcGh5czIgPSBaZV9waHlzMlswXTsKLQkgICAgY3lfcGNpX2FkZHIwID0gWmVfYWRkcjBbMF07Ci0JICAgIGN5X3BjaV9hZGRyMiA9IFplX2FkZHIyWzBdOwotCSAgICBjeV9wY2lfaXJxID0gWmVfaXJxWzBdOwotCSAgICBwZGV2ID0gWmVfcGRldlswXTsKLQkgICAgZm9yIChqID0gMCA7IGogPCBaZUluZGV4LTEgOyBqKyspIHsKLQkJWmVfcGh5czBbal0gPSBaZV9waHlzMFtqKzFdOwotCQlaZV9waHlzMltqXSA9IFplX3BoeXMyW2orMV07Ci0JCVplX2FkZHIwW2pdID0gWmVfYWRkcjBbaisxXTsKLQkJWmVfYWRkcjJbal0gPSBaZV9hZGRyMltqKzFdOwotCQlaZV9pcnFbal0gPSBaZV9pcnFbaisxXTsKLQkJWmVfcGRldltqXSA9IFplX3BkZXZbaisxXTsKLQkgICAgfQotCSAgICBaZUluZGV4LS07Ci0JCW1haWxib3ggPSAodWNsb25nKWN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKSAKLQkJCQkJICAgY3lfcGNpX2FkZHIwKS0+bWFpbF9ib3hfMCk7Ci0jaWZkZWYgQ1lfUENJX0RFQlVHCi0gICAgICAgICAgICBwcmludGsoIkN5Y2xhZGVzLVovUENJOiByZWxvY2F0ZSB3aW5hZGRyPTB4JWx4IGN0bGFkZHI9MHglbHhcbiIsCi0gICAgICAgICAgICAgICAgKHVsb25nKWN5X3BjaV9hZGRyMiwgKHVsb25nKWN5X3BjaV9hZGRyMCk7Ci0JICAgIHByaW50aygiQ3ljbGFkZXMtWi9QQ0k6IE5ldyBDeWNsYWRlcy1aIGJvYXJkLiAgRlBHQSBub3QgbG9hZGVkXG4iKTsKLSNlbmRpZgotCQlQQVVTRQotICAgICAgICAgICAgICAgIC8qIFRoaXMgbXVzdCBiZSB0aGUgbmV3IEN5Y2xhZGVzLVplL1BDSS4gKi8KLSAgICAgICAgICAgICAgICBjeV9wY2lfbmNoYW4gPSBaRV9WMV9OUE9SVFM7Ci0KLSAgICAgICAgICAgICAgICBpZigoY3lfbmV4dF9jaGFubmVsK2N5X3BjaV9uY2hhbikgPiBOUl9QT1JUUykgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJDeWNsYWRlcy1aZS9QQ0kgZm91bmQgYXQgMHglbHggIiwKLQkJCSAgICAodWxvbmcpY3lfcGNpX3BoeXMyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiYnV0IG5vIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiQ2hhbmdlIE5SX1BPUlRTIGluIGN5Y2xhZGVzLmMgYW5kIHJlY29tcGlsZSBrZXJuZWwuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvKiBmaWxsIHRoZSBuZXh0IGN5X2NhcmQgc3RydWN0dXJlIGF2YWlsYWJsZSAqLwotICAgICAgICAgICAgICAgIGZvciAoaiA9IDAgOyBqIDwgTlJfQ0FSRFMgOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjeV9jYXJkW2pdLmJhc2VfYWRkciA9PSAwKSAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChqID09IE5SX0NBUkRTKSB7ICAgIC8qIG5vIG1vcmUgY3lfY2FyZHMgYXZhaWxhYmxlICovCi0JCSAgICBwcmludGsoIkN5Y2xhZGVzLVplL1BDSSBmb3VuZCBhdCAweCVseCAiLAotCQkJKHVsb25nKWN5X3BjaV9waHlzMik7Ci0JCSAgICBwcmludGsoImJ1dCBubyBtb3JlIGNhcmRzIGNhbiBiZSB1c2VkLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50aygiQ2hhbmdlIE5SX0NBUkRTIGluIGN5Y2xhZGVzLmMgYW5kIHJlY29tcGlsZSBrZXJuZWwuXG4iKTsKLQkJICAgIHJldHVybihpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLSAgICAgICAgICAgICAgICAvKiBhbGxvY2F0ZSBJUlEgb25seSBpZiBib2FyZCBoYXMgYW4gSVJRICovCi0JCWlmKCAoY3lfcGNpX2lycSAhPSAwKSAmJiAoY3lfcGNpX2lycSAhPSAyNTUpICkgewotCQkgICAgaWYocmVxdWVzdF9pcnEoY3lfcGNpX2lycSwgY3l6X2ludGVycnVwdCwKLQkJCUlSUUZfU0hBUkVELCAiQ3ljbGFkZXMtWiIsICZjeV9jYXJkW2pdKSkKLQkJICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiQ3ljbG9tLVplL1BDSSBmb3VuZCBhdCAweCVseCAiLAotCQkJICAgICh1bG9uZykgY3lfcGNpX3BoeXMyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiYnV0IGNvdWxkIG5vdCBhbGxvY2F0ZSBJUlElZC5cbiIsCi0JCQkgICAgY3lfcGNpX2lycSk7Ci0JCQlyZXR1cm4oaSk7Ci0JCSAgICB9Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfQ1laX0lOVFIgKi8KLQotICAgICAgICAgICAgICAgIC8qIHNldCBjeV9jYXJkICovCi0gICAgICAgICAgICAgICAgY3lfY2FyZFtqXS5iYXNlX3BoeXMgPSBjeV9wY2lfcGh5czI7Ci0gICAgICAgICAgICAgICAgY3lfY2FyZFtqXS5jdGxfcGh5cyA9IGN5X3BjaV9waHlzMDsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmJhc2VfYWRkciA9IGN5X3BjaV9hZGRyMjsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmN0bF9hZGRyID0gY3lfcGNpX2FkZHIwOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0uaXJxID0gKGludCkgY3lfcGNpX2lycTsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2pdLmJ1c19pbmRleCA9IDE7Ci0gICAgICAgICAgICAgICAgY3lfY2FyZFtqXS5maXJzdF9saW5lID0gY3lfbmV4dF9jaGFubmVsOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbal0ubnVtX2NoaXBzID0gLTE7Ci0JCWN5X2NhcmRbal0ucGRldiA9IHBkZXY7Ci0KLSAgICAgICAgICAgICAgICAvKiBwcmludCBtZXNzYWdlICovCi0jaWZkZWYgQ09ORklHX0NZWl9JTlRSCi0JCS8qIGRvbid0IHJlcG9ydCBJUlEgaWYgYm9hcmQgaXMgbm8gSVJRICovCi0JCWlmKCAoY3lfcGNpX2lycSAhPSAwKSAmJiAoY3lfcGNpX2lycSAhPSAyNTUpICkKLQkJICAgIHByaW50aygiQ3ljbGFkZXMtWmUvUENJICMlZDogMHglbHgtMHglbHgsIElSUSVkLCAiLAotCQkJaisxLCh1bG9uZyljeV9wY2lfcGh5czIsCi0JCQkodWxvbmcpKGN5X3BjaV9waHlzMiArIEN5UENJX1plX3dpbiAtIDEpLAotCQkJKGludCljeV9wY2lfaXJxKTsKLQkJZWxzZQotI2VuZGlmIC8qIENPTkZJR19DWVpfSU5UUiAqLwotCQkgICAgcHJpbnRrKCJDeWNsYWRlcy1aZS9QQ0kgIyVkOiAweCVseC0weCVseCwgIiwKLQkJCWorMSwodWxvbmcpY3lfcGNpX3BoeXMyLAotCQkJKHVsb25nKShjeV9wY2lfcGh5czIgKyBDeVBDSV9aZV93aW4gLSAxKSk7Ci0KLSAgICAgICAgICAgICAgICBwcmludGsoIiVkIGNoYW5uZWxzIHN0YXJ0aW5nIGZyb20gcG9ydCAlZC5cbiIsCi0JCSAgICBjeV9wY2lfbmNoYW4sY3lfbmV4dF9jaGFubmVsKTsKLSAgICAgICAgICAgICAgICBjeV9uZXh0X2NoYW5uZWwgKz0gY3lfcGNpX25jaGFuOwotICAgICAgICB9Ci0JaWYgKFplSW5kZXggIT0gMCkgewotCSAgICBwcmludGsoIkN5Y2xhZGVzLVplL1BDSSBmb3VuZCBhdCAweCV4ICIsCi0JCSh1bnNpZ25lZCBpbnQpIFplX3BoeXMyWzBdKTsKLQkgICAgcHJpbnRrKCJidXQgbm8gbW9yZSBjYXJkcyBjYW4gYmUgdXNlZC5cbiIpOwotICAgICAgICAgICAgcHJpbnRrKCJDaGFuZ2UgTlJfQ0FSRFMgaW4gY3ljbGFkZXMuYyBhbmQgcmVjb21waWxlIGtlcm5lbC5cbiIpOwogCX0KLSAgICAgICAgcmV0dXJuKGkpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuKDApOwotI2VuZGlmIC8qIGlmZGVmIENPTkZJR19QQ0kgKi8KLX0gLyogY3lfZGV0ZWN0X3BjaSAqLwogCisJZm9yICg7IFplSW5kZXggIT0gMCAmJiBpIDwgTlJfQ0FSRFM7IGkrKykgeworCQljeV9wY2lfcGh5czAgPSBaZV9waHlzMFswXTsKKwkJY3lfcGNpX3BoeXMyID0gWmVfcGh5czJbMF07CisJCWN5X3BjaV9hZGRyMCA9IFplX2FkZHIwWzBdOworCQljeV9wY2lfYWRkcjIgPSBaZV9hZGRyMlswXTsKKwkJY3lfcGNpX2lycSA9IFplX2lycVswXTsKKwkJcGRldiA9IFplX3BkZXZbMF07CisJCWZvciAoaiA9IDA7IGogPCBaZUluZGV4IC0gMTsgaisrKSB7CisJCQlaZV9waHlzMFtqXSA9IFplX3BoeXMwW2ogKyAxXTsKKwkJCVplX3BoeXMyW2pdID0gWmVfcGh5czJbaiArIDFdOworCQkJWmVfYWRkcjBbal0gPSBaZV9hZGRyMFtqICsgMV07CisJCQlaZV9hZGRyMltqXSA9IFplX2FkZHIyW2ogKyAxXTsKKwkJCVplX2lycVtqXSA9IFplX2lycVtqICsgMV07CisJCQlaZV9wZGV2W2pdID0gWmVfcGRldltqICsgMV07CisJCX0KKwkJWmVJbmRleC0tOworCQltYWlsYm94ID0gKHVjbG9uZyljeV9yZWFkbCgmKChzdHJ1Y3QgUlVOVElNRV85MDYwIF9faW9tZW0gKikKKwkJCQkJCWN5X3BjaV9hZGRyMCktPm1haWxfYm94XzApOworI2lmZGVmIENZX1BDSV9ERUJVRworCQlwcmludGsoIkN5Y2xhZGVzLVovUENJOiByZWxvY2F0ZSB3aW5hZGRyPTB4JWx4IGN0bGFkZHI9MHglbHhcbiIsCisJCQkodWxvbmcpY3lfcGNpX2FkZHIyLCAodWxvbmcpY3lfcGNpX2FkZHIwKTsKKwkJcHJpbnRrKCJDeWNsYWRlcy1aL1BDSTogTmV3IEN5Y2xhZGVzLVogYm9hcmQuICBGUEdBIG5vdCAiCisJCQkJImxvYWRlZFxuIik7CisjZW5kaWYKKwkJUEFVU0U7CisJCS8qIFRoaXMgbXVzdCBiZSB0aGUgbmV3IEN5Y2xhZGVzLVplL1BDSS4gKi8KKwkJY3lfcGNpX25jaGFuID0gWkVfVjFfTlBPUlRTOworCisJCWlmICgoY3lfbmV4dF9jaGFubmVsICsgY3lfcGNpX25jaGFuKSA+IE5SX1BPUlRTKSB7CisJCQlwcmludGsoIkN5Y2xhZGVzLVplL1BDSSBmb3VuZCBhdCAweCVseCBidXQgbm8gY2hhbm5lbHMgIgorCQkJCSJhcmUgYXZhaWxhYmxlLlxuQ2hhbmdlIE5SX1BPUlRTIGluIGN5Y2xhZGVzLmMgIgorCQkJCSJhbmQgcmVjb21waWxlIGtlcm5lbC5cbiIsCisJCQkJKHVsb25nKSBjeV9wY2lfcGh5czIpOworCQkJcmV0dXJuIGk7CisJCX0KKworCQkvKiBmaWxsIHRoZSBuZXh0IGN5X2NhcmQgc3RydWN0dXJlIGF2YWlsYWJsZSAqLworCQlmb3IgKGogPSAwOyBqIDwgTlJfQ0FSRFM7IGorKykgeworCQkJaWYgKGN5X2NhcmRbal0uYmFzZV9hZGRyID09IDApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGogPT0gTlJfQ0FSRFMpIHsJLyogbm8gbW9yZSBjeV9jYXJkcyBhdmFpbGFibGUgKi8KKwkJCXByaW50aygiQ3ljbGFkZXMtWmUvUENJIGZvdW5kIGF0IDB4JWx4IGJ1dCBubyBtb3JlICIKKwkJCQkiY2FyZHMgY2FuIGJlIHVzZWQuXG5DaGFuZ2UgTlJfQ0FSRFMgaW4gIgorCQkJCSJjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUga2VybmVsLlxuIiwKKwkJCQkodWxvbmcpIGN5X3BjaV9waHlzMik7CisJCQlyZXR1cm4gaTsKKwkJfQorI2lmZGVmIENPTkZJR19DWVpfSU5UUgorCQkvKiBhbGxvY2F0ZSBJUlEgb25seSBpZiBib2FyZCBoYXMgYW4gSVJRICovCisJCWlmICgoY3lfcGNpX2lycSAhPSAwKSAmJiAoY3lfcGNpX2lycSAhPSAyNTUpKSB7CisJCQlpZiAocmVxdWVzdF9pcnEoY3lfcGNpX2lycSwgY3l6X2ludGVycnVwdCwKKwkJCQkJSVJRRl9TSEFSRUQsICJDeWNsYWRlcy1aIiwKKwkJCQkJJmN5X2NhcmRbal0pKSB7CisJCQkJcHJpbnRrKCJDeWNsb20tWmUvUENJIGZvdW5kIGF0IDB4JWx4ICIsCisJCQkJCSh1bG9uZykgY3lfcGNpX3BoeXMyKTsKKwkJCQlwcmludGsoImJ1dCBjb3VsZCBub3QgYWxsb2NhdGUgSVJRJWQuXG4iLAorCQkJCQljeV9wY2lfaXJxKTsKKwkJCQlyZXR1cm4gaTsKKwkJCX0KKwkJfQorI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLworCisJCS8qIHNldCBjeV9jYXJkICovCisJCWN5X2NhcmRbal0uYmFzZV9waHlzID0gY3lfcGNpX3BoeXMyOworCQljeV9jYXJkW2pdLmN0bF9waHlzID0gY3lfcGNpX3BoeXMwOworCQljeV9jYXJkW2pdLmJhc2VfYWRkciA9IGN5X3BjaV9hZGRyMjsKKwkJY3lfY2FyZFtqXS5jdGxfYWRkciA9IGN5X3BjaV9hZGRyMDsKKwkJY3lfY2FyZFtqXS5pcnEgPSAoaW50KWN5X3BjaV9pcnE7CisJCWN5X2NhcmRbal0uYnVzX2luZGV4ID0gMTsKKwkJY3lfY2FyZFtqXS5maXJzdF9saW5lID0gY3lfbmV4dF9jaGFubmVsOworCQljeV9jYXJkW2pdLm51bV9jaGlwcyA9IC0xOworCQljeV9jYXJkW2pdLnBkZXYgPSBwZGV2OworCisJCS8qIHByaW50IG1lc3NhZ2UgKi8KKyNpZmRlZiBDT05GSUdfQ1laX0lOVFIKKwkJLyogZG9uJ3QgcmVwb3J0IElSUSBpZiBib2FyZCBpcyBubyBJUlEgKi8KKwkJaWYgKChjeV9wY2lfaXJxICE9IDApICYmIChjeV9wY2lfaXJxICE9IDI1NSkpCisJCQlwcmludGsoIkN5Y2xhZGVzLVplL1BDSSAjJWQ6IDB4JWx4LTB4JWx4LCBJUlElZCwgIiwKKwkJCQlqICsgMSwgKHVsb25nKSBjeV9wY2lfcGh5czIsCisJCQkJKHVsb25nKSAoY3lfcGNpX3BoeXMyICsgQ3lQQ0lfWmVfd2luIC0gMSksCisJCQkJKGludCljeV9wY2lfaXJxKTsKKwkJZWxzZQorI2VuZGlmCQkJCS8qIENPTkZJR19DWVpfSU5UUiAqLworCQkJcHJpbnRrKCJDeWNsYWRlcy1aZS9QQ0kgIyVkOiAweCVseC0weCVseCwgIiwKKwkJCQlqICsgMSwgKHVsb25nKSBjeV9wY2lfcGh5czIsCisJCQkJKHVsb25nKSAoY3lfcGNpX3BoeXMyICsgQ3lQQ0lfWmVfd2luIC0gMSkpOworCisJCXByaW50aygiJWQgY2hhbm5lbHMgc3RhcnRpbmcgZnJvbSBwb3J0ICVkLlxuIiwKKwkJCWN5X3BjaV9uY2hhbiwgY3lfbmV4dF9jaGFubmVsKTsKKwkJY3lfbmV4dF9jaGFubmVsICs9IGN5X3BjaV9uY2hhbjsKKwl9CisJaWYgKFplSW5kZXggIT0gMCkgeworCQlwcmludGsoIkN5Y2xhZGVzLVplL1BDSSBmb3VuZCBhdCAweCV4IGJ1dCBubyBtb3JlIGNhcmRzIGNhbiBiZSAiCisJCQkidXNlZC5cbkNoYW5nZSBOUl9DQVJEUyBpbiBjeWNsYWRlcy5jIGFuZCByZWNvbXBpbGUgIgorCQkJImtlcm5lbC5cbiIsICh1bnNpZ25lZCBpbnQpWmVfcGh5czJbMF0pOworCX0KKwlyZXR1cm4gaTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYJCQkJLyogaWZkZWYgQ09ORklHX1BDSSAqLworfQkJCQkvKiBjeV9kZXRlY3RfcGNpICovCiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgcHJpbnRzIG91dCB0aGUgYXBwcm9wcmlhdGUgc2VyaWFsIGRyaXZlciB2ZXJzaW9uIG51bWJlcgogICogYW5kIGlkZW50aWZpZXMgd2hpY2ggb3B0aW9ucyB3ZXJlIGNvbmZpZ3VyZWQgaW50byB0aGlzIGRyaXZlci4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCi1zaG93X3ZlcnNpb24odm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG93X3ZlcnNpb24odm9pZCkKIHsKLSAgY2hhciAqcmNzdmVycywgKnJjc2RhdGUsICp0bXA7Ci0gICAgcmNzdmVycyA9IHN0cmNocihyY3NpZCwgJyAnKTsgcmNzdmVycysrOwotICAgIHRtcCA9IHN0cmNocihyY3N2ZXJzLCAnICcpOyAqdG1wKysgPSAnXDAnOwotICAgIHJjc2RhdGUgPSBzdHJjaHIodG1wLCAnICcpOyByY3NkYXRlKys7Ci0gICAgdG1wID0gc3RycmNocihyY3NkYXRlLCAnICcpOyAqdG1wID0gJ1wwJzsKLSAgICBwcmludGsoIkN5Y2xhZGVzIGRyaXZlciAlcyAlc1xuIiwKLSAgICAgICAgcmNzdmVycywgcmNzZGF0ZSk7Ci0gICAgcHJpbnRrKCIgICAgICAgIGJ1aWx0ICVzICVzXG4iLAotCV9fREFURV9fLCBfX1RJTUVfXyk7Ci19IC8qIHNob3dfdmVyc2lvbiAqLworCXByaW50aygiQ3ljbGFkZXMgZHJpdmVyICIgQ1lfVkVSU0lPTiAiXG4iKTsKKwlwcmludGsoIiAgICAgICAgYnVpbHQgJXMgJXNcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7Cit9CQkJCS8qIHNob3dfdmVyc2lvbiAqLwogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogY3ljbGFkZXNfZ2V0X3Byb2NfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLAotCQkgICAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCisJCWludCAqZW9mLCB2b2lkICpkYXRhKQogewotICAgIHN0cnVjdCBjeWNsYWRlc19wb3J0ICAqaW5mbzsKLSAgICBpbnQgaTsKLSAgICBpbnQgbGVuPTA7Ci0gICAgb2ZmX3QgYmVnaW49MDsKLSAgICBvZmZfdCBwb3M9MDsKLSAgICBpbnQgc2l6ZTsKLSAgICBfX3UzMiBjdXJfamlmcyA9IGppZmZpZXM7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm87CisJaW50IGk7CisJaW50IGxlbiA9IDA7CisJb2ZmX3QgYmVnaW4gPSAwOworCW9mZl90IHBvcyA9IDA7CisJaW50IHNpemU7CisJX191MzIgY3VyX2ppZnMgPSBqaWZmaWVzOwogCi0gICAgc2l6ZSA9IHNwcmludGYoYnVmLCAiRGV2IFRpbWVPcGVuICAgQnl0ZXNPdXQgIElkbGVPdXQgICAgQnl0ZXNJbiAgIElkbGVJbiAgT3ZlcnJ1bnMgIExkaXNjXG4iKTsKKwlzaXplID0gc3ByaW50ZihidWYsICJEZXYgVGltZU9wZW4gICBCeXRlc091dCAgSWRsZU91dCAgICBCeXRlc0luICAgIgorCQkJIklkbGVJbiAgT3ZlcnJ1bnMgIExkaXNjXG4iKTsKIAotICAgIHBvcyArPSBzaXplOwotICAgIGxlbiArPSBzaXplOwotCi0gICAgLyogT3V0cHV0IG9uZSBsaW5lIGZvciBlYWNoIGtub3duIHBvcnQgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgTlJfUE9SVFMgJiYgY3lfcG9ydFtpXS5saW5lID49IDA7IGkrKykgewotCWluZm8gPSAmY3lfcG9ydFtpXTsKLQotCWlmIChpbmZvLT5jb3VudCkKLQkgICAgc2l6ZSA9IHNwcmludGYoYnVmK2xlbiwKLQkJCSIlM2QgJThsdSAlMTBsdSAlOGx1ICUxMGx1ICU4bHUgJTlsdSAlNmxkXG4iLAotCQkJaW5mby0+bGluZSwKLQkJCUpJRkZJRVNfRElGRihpbmZvLT5pZGxlX3N0YXRzLmluX3VzZSwgY3VyX2ppZnMpIC8gSFosCi0JCQlpbmZvLT5pZGxlX3N0YXRzLnhtaXRfYnl0ZXMsCi0JCQlKSUZGSUVTX0RJRkYoaW5mby0+aWRsZV9zdGF0cy54bWl0X2lkbGUsIGN1cl9qaWZzKSAvIEhaLAotCQkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2J5dGVzLAotCQkJSklGRklFU19ESUZGKGluZm8tPmlkbGVfc3RhdHMucmVjdl9pZGxlLCBjdXJfamlmcykgLyBIWiwKLQkJCWluZm8tPmlkbGVfc3RhdHMub3ZlcnJ1bnMsCi0JCQkobG9uZykgaW5mby0+dHR5LT5sZGlzYy5udW0pOwotCWVsc2UKLQkgICAgc2l6ZSA9IHNwcmludGYoYnVmK2xlbiwKLQkJCSIlM2QgJThsdSAlMTBsdSAlOGx1ICUxMGx1ICU4bHUgJTlsdSAlNmxkXG4iLAotCQkJaW5mby0+bGluZSwgMEwsIDBMLCAwTCwgMEwsIDBMLCAwTCwgMEwpOworCXBvcyArPSBzaXplOwogCWxlbiArPSBzaXplOwotCXBvcyA9IGJlZ2luICsgbGVuOwogCi0JaWYgKHBvcyA8IG9mZnNldCkgewotCSAgICBsZW4gICA9IDA7Ci0JICAgIGJlZ2luID0gcG9zOworCS8qIE91dHB1dCBvbmUgbGluZSBmb3IgZWFjaCBrbm93biBwb3J0ICovCisJZm9yIChpID0gMDsgaSA8IE5SX1BPUlRTICYmIGN5X3BvcnRbaV0ubGluZSA+PSAwOyBpKyspIHsKKwkJaW5mbyA9ICZjeV9wb3J0W2ldOworCisJCWlmIChpbmZvLT5jb3VudCkKKwkJCXNpemUgPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUzZCAlOGx1ICUxMGx1ICU4bHUgJTEwbHUgIgorCQkJCSIlOGx1ICU5bHUgJTZsZFxuIiwgaW5mby0+bGluZSwKKwkJCQkoY3VyX2ppZnMgLSBpbmZvLT5pZGxlX3N0YXRzLmluX3VzZSkgLyBIWiwKKwkJCQlpbmZvLT5pZGxlX3N0YXRzLnhtaXRfYnl0ZXMsCisJCQkJKGN1cl9qaWZzIC0gaW5mby0+aWRsZV9zdGF0cy54bWl0X2lkbGUpIC8gSFosCisJCQkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2J5dGVzLAorCQkJCShjdXJfamlmcyAtIGluZm8tPmlkbGVfc3RhdHMucmVjdl9pZGxlKSAvIEhaLAorCQkJCWluZm8tPmlkbGVfc3RhdHMub3ZlcnJ1bnMsCisJCQkJKGxvbmcpaW5mby0+dHR5LT5sZGlzYy5udW0pOworCQllbHNlCisJCQlzaXplID0gc3ByaW50ZihidWYgKyBsZW4sICIlM2QgJThsdSAlMTBsdSAlOGx1ICUxMGx1ICIKKwkJCQkiJThsdSAlOWx1ICU2bGRcbiIsCisJCQkJaW5mby0+bGluZSwgMEwsIDBMLCAwTCwgMEwsIDBMLCAwTCwgMEwpOworCQlsZW4gKz0gc2l6ZTsKKwkJcG9zID0gYmVnaW4gKyBsZW47CisKKwkJaWYgKHBvcyA8IG9mZnNldCkgeworCQkJbGVuID0gMDsKKwkJCWJlZ2luID0gcG9zOworCQl9CisJCWlmIChwb3MgPiBvZmZzZXQgKyBsZW5ndGgpCisJCQlnb3RvIGRvbmU7CiAJfQotCWlmIChwb3MgPiBvZmZzZXQgKyBsZW5ndGgpCi0JICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gICAgKmVvZiA9IDE7CisJKmVvZiA9IDE7CiBkb25lOgotICAgICpzdGFydCA9IGJ1ZiArIChvZmZzZXQgLSBiZWdpbik7CS8qIFN0YXJ0IG9mIHdhbnRlZCBkYXRhICovCi0gICAgbGVuIC09IChvZmZzZXQgLSBiZWdpbik7CQkvKiBTdGFydCBzbG9wICovCi0gICAgaWYgKGxlbiA+IGxlbmd0aCkKLQlsZW4gPSBsZW5ndGg7CQkJLyogRW5kaW5nIHNsb3AgKi8KLSAgICBpZiAobGVuIDwgMCkKLQlsZW4gPSAwOwotICAgIHJldHVybiBsZW47CisJKnN0YXJ0ID0gYnVmICsgKG9mZnNldCAtIGJlZ2luKTsJLyogU3RhcnQgb2Ygd2FudGVkIGRhdGEgKi8KKwlsZW4gLT0gKG9mZnNldCAtIGJlZ2luKTsJLyogU3RhcnQgc2xvcCAqLworCWlmIChsZW4gPiBsZW5ndGgpCisJCWxlbiA9IGxlbmd0aDsJLyogRW5kaW5nIHNsb3AgKi8KKwlpZiAobGVuIDwgMCkKKwkJbGVuID0gMDsKKwlyZXR1cm4gbGVuOwogfQogCiAvKiBUaGUgc2VyaWFsIGRyaXZlciBib290LXRpbWUgaW5pdGlhbGl6YXRpb24gY29kZSEKQEAgLTUxODUsMjkwICs1Mjk0LDI4OCBAQAogICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgY3lfb3BzID0gewotICAgIC5vcGVuID0gY3lfb3BlbiwKLSAgICAuY2xvc2UgPSBjeV9jbG9zZSwKLSAgICAud3JpdGUgPSBjeV93cml0ZSwKLSAgICAucHV0X2NoYXIgPSBjeV9wdXRfY2hhciwKLSAgICAuZmx1c2hfY2hhcnMgPSBjeV9mbHVzaF9jaGFycywKLSAgICAud3JpdGVfcm9vbSA9IGN5X3dyaXRlX3Jvb20sCi0gICAgLmNoYXJzX2luX2J1ZmZlciA9IGN5X2NoYXJzX2luX2J1ZmZlciwKLSAgICAuZmx1c2hfYnVmZmVyID0gY3lfZmx1c2hfYnVmZmVyLAotICAgIC5pb2N0bCA9IGN5X2lvY3RsLAotICAgIC50aHJvdHRsZSA9IGN5X3Rocm90dGxlLAotICAgIC51bnRocm90dGxlID0gY3lfdW50aHJvdHRsZSwKLSAgICAuc2V0X3Rlcm1pb3MgPSBjeV9zZXRfdGVybWlvcywKLSAgICAuc3RvcCA9IGN5X3N0b3AsCi0gICAgLnN0YXJ0ID0gY3lfc3RhcnQsCi0gICAgLmhhbmd1cCA9IGN5X2hhbmd1cCwKLSAgICAuYnJlYWtfY3RsID0gY3lfYnJlYWssCi0gICAgLndhaXRfdW50aWxfc2VudCA9IGN5X3dhaXRfdW50aWxfc2VudCwKLSAgICAucmVhZF9wcm9jID0gY3ljbGFkZXNfZ2V0X3Byb2NfaW5mbywKLSAgICAudGlvY21nZXQgPSBjeV90aW9jbWdldCwKLSAgICAudGlvY21zZXQgPSBjeV90aW9jbXNldCwKKwkub3BlbiA9IGN5X29wZW4sCisJLmNsb3NlID0gY3lfY2xvc2UsCisJLndyaXRlID0gY3lfd3JpdGUsCisJLnB1dF9jaGFyID0gY3lfcHV0X2NoYXIsCisJLmZsdXNoX2NoYXJzID0gY3lfZmx1c2hfY2hhcnMsCisJLndyaXRlX3Jvb20gPSBjeV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPSBjeV9jaGFyc19pbl9idWZmZXIsCisJLmZsdXNoX2J1ZmZlciA9IGN5X2ZsdXNoX2J1ZmZlciwKKwkuaW9jdGwgPSBjeV9pb2N0bCwKKwkudGhyb3R0bGUgPSBjeV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9IGN5X3VudGhyb3R0bGUsCisJLnNldF90ZXJtaW9zID0gY3lfc2V0X3Rlcm1pb3MsCisJLnN0b3AgPSBjeV9zdG9wLAorCS5zdGFydCA9IGN5X3N0YXJ0LAorCS5oYW5ndXAgPSBjeV9oYW5ndXAsCisJLmJyZWFrX2N0bCA9IGN5X2JyZWFrLAorCS53YWl0X3VudGlsX3NlbnQgPSBjeV93YWl0X3VudGlsX3NlbnQsCisJLnJlYWRfcHJvYyA9IGN5Y2xhZGVzX2dldF9wcm9jX2luZm8sCisJLnRpb2NtZ2V0ID0gY3lfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gY3lfdGlvY21zZXQsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdAotY3lfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY3lfaW5pdCh2b2lkKQogewotICBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAgKmluZm87Ci0gIHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbzsKLSAgaW50IG51bWJlcl96X2JvYXJkcyA9IDA7Ci0gIGludCBib2FyZCxwb3J0LGksaW5kZXg7Ci0gIHVuc2lnbmVkIGxvbmcgbWFpbGJveDsKLSAgdW5zaWduZWQgc2hvcnQgY2hpcF9udW1iZXI7Ci0gIGludCBucG9ydHM7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm87CisJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvOworCWludCBudW1iZXJfel9ib2FyZHMgPSAwOworCWludCBib2FyZCwgcG9ydCwgaSwgaW5kZXg7CisJdW5zaWduZWQgbG9uZyBtYWlsYm94OworCXVuc2lnbmVkIHNob3J0IGNoaXBfbnVtYmVyOworCWludCBucG9ydHM7CiAKLSAgICBjeV9zZXJpYWxfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihOUl9QT1JUUyk7Ci0gICAgaWYgKCFjeV9zZXJpYWxfZHJpdmVyKQotCXJldHVybiAtRU5PTUVNOwotICAgIHNob3dfdmVyc2lvbigpOworCWN5X3NlcmlhbF9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKE5SX1BPUlRTKTsKKwlpZiAoIWN5X3NlcmlhbF9kcml2ZXIpCisJCXJldHVybiAtRU5PTUVNOworCXNob3dfdmVyc2lvbigpOwogCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgdHR5X2RyaXZlciBzdHJ1Y3R1cmUgKi8KLSAgICAKLSAgICBjeV9zZXJpYWxfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOwotICAgIGN5X3NlcmlhbF9kcml2ZXItPmRyaXZlcl9uYW1lID0gImN5Y2xhZGVzIjsKLSAgICBjeV9zZXJpYWxfZHJpdmVyLT5uYW1lID0gInR0eUMiOwotICAgIGN5X3NlcmlhbF9kcml2ZXItPm1ham9yID0gQ1lDTEFERVNfTUFKT1I7Ci0gICAgY3lfc2VyaWFsX2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwOwotICAgIGN5X3NlcmlhbF9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwotICAgIGN5X3NlcmlhbF9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7Ci0gICAgY3lfc2VyaWFsX2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwotICAgIGN5X3NlcmlhbF9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0KLSAgICAgICAgICAgIEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKLSAgICBjeV9zZXJpYWxfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVc7Ci0gICAgdHR5X3NldF9vcGVyYXRpb25zKGN5X3NlcmlhbF9kcml2ZXIsICZjeV9vcHMpOworCS8qIEluaXRpYWxpemUgdGhlIHR0eV9kcml2ZXIgc3RydWN0dXJlICovCiAKLSAgICBpZiAodHR5X3JlZ2lzdGVyX2RyaXZlcihjeV9zZXJpYWxfZHJpdmVyKSkKLSAgICAgICAgICAgIHBhbmljKCJDb3VsZG4ndCByZWdpc3RlciBDeWNsYWRlcyBzZXJpYWwgZHJpdmVyXG4iKTsKKwljeV9zZXJpYWxfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOworCWN5X3NlcmlhbF9kcml2ZXItPmRyaXZlcl9uYW1lID0gImN5Y2xhZGVzIjsKKwljeV9zZXJpYWxfZHJpdmVyLT5uYW1lID0gInR0eUMiOworCWN5X3NlcmlhbF9kcml2ZXItPm1ham9yID0gQ1lDTEFERVNfTUFKT1I7CisJY3lfc2VyaWFsX2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwOworCWN5X3NlcmlhbF9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOworCWN5X3NlcmlhbF9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJY3lfc2VyaWFsX2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOworCWN5X3NlcmlhbF9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0KKwkgICAgQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCWN5X3NlcmlhbF9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVzsKKwl0dHlfc2V0X29wZXJhdGlvbnMoY3lfc2VyaWFsX2RyaXZlciwgJmN5X29wcyk7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgTlJfQ0FSRFM7IGkrKykgewotICAgICAgICAgICAgLyogYmFzZV9hZGRyPTAgaW5kaWNhdGVzIGJvYXJkIG5vdCBmb3VuZCAqLwotICAgICAgICAgICAgY3lfY2FyZFtpXS5iYXNlX2FkZHIgPSBOVUxMOwotICAgIH0KKwlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlcihjeV9zZXJpYWxfZHJpdmVyKSkKKwkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIEN5Y2xhZGVzIHNlcmlhbCBkcml2ZXJcbiIpOwogCi0gICAgLyogdGhlIGNvZGUgYmVsb3cgaXMgcmVzcG9uc2libGUgdG8gZmluZCB0aGUgYm9hcmRzLiBFYWNoIGRpZmZlcmVudAotICAgICAgIHR5cGUgb2YgYm9hcmQgaGFzIGl0cyBvd24gZGV0ZWN0aW9uIHJvdXRpbmUuIElmIGEgYm9hcmQgaXMgZm91bmQsCi0gICAgICAgdGhlIG5leHQgY3lfY2FyZCBzdHJ1Y3R1cmUgYXZhaWxhYmxlIGlzIHNldCBieSB0aGUgZGV0ZWN0aW9uCi0gICAgICAgcm91dGluZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgY2hlY2tpbmcgdGhlCi0gICAgICAgYXZhaWxhYmlsaXR5IG9mIGN5X2NhcmQgYW5kIGN5X3BvcnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB1cGRhdGluZwotICAgICAgIHRoZSBjeV9uZXh0X2NoYW5uZWwuICovCisJZm9yIChpID0gMDsgaSA8IE5SX0NBUkRTOyBpKyspIHsKKwkJLyogYmFzZV9hZGRyPTAgaW5kaWNhdGVzIGJvYXJkIG5vdCBmb3VuZCAqLworCQljeV9jYXJkW2ldLmJhc2VfYWRkciA9IE5VTEw7CisJfQogCi0gICAgLyogbG9vayBmb3IgaXNhIGJvYXJkcyAqLwotICAgIGN5X2lzYV9uYm9hcmQgPSBjeV9kZXRlY3RfaXNhKCk7CisJLyogdGhlIGNvZGUgYmVsb3cgaXMgcmVzcG9uc2libGUgdG8gZmluZCB0aGUgYm9hcmRzLiBFYWNoIGRpZmZlcmVudAorCSAgIHR5cGUgb2YgYm9hcmQgaGFzIGl0cyBvd24gZGV0ZWN0aW9uIHJvdXRpbmUuIElmIGEgYm9hcmQgaXMgZm91bmQsCisJICAgdGhlIG5leHQgY3lfY2FyZCBzdHJ1Y3R1cmUgYXZhaWxhYmxlIGlzIHNldCBieSB0aGUgZGV0ZWN0aW9uCisJICAgcm91dGluZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgY2hlY2tpbmcgdGhlCisJICAgYXZhaWxhYmlsaXR5IG9mIGN5X2NhcmQgYW5kIGN5X3BvcnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB1cGRhdGluZworCSAgIHRoZSBjeV9uZXh0X2NoYW5uZWwuICovCiAKLSAgICAvKiBsb29rIGZvciBwY2kgYm9hcmRzICovCi0gICAgY3lfcGNpX25ib2FyZCA9IGN5X2RldGVjdF9wY2koKTsKKwkvKiBsb29rIGZvciBpc2EgYm9hcmRzICovCisJY3lfaXNhX25ib2FyZCA9IGN5X2RldGVjdF9pc2EoKTsKIAotICAgIGN5X25ib2FyZCA9IGN5X2lzYV9uYm9hcmQgKyBjeV9wY2lfbmJvYXJkOworCS8qIGxvb2sgZm9yIHBjaSBib2FyZHMgKi8KKwljeV9wY2lfbmJvYXJkID0gY3lfZGV0ZWN0X3BjaSgpOwogCi0gICAgLyogaW52YWxpZGF0ZSByZW1haW5pbmcgY3lfY2FyZCBzdHJ1Y3R1cmVzICovCi0gICAgZm9yIChpID0gMCA7IGkgPCBOUl9DQVJEUyA7IGkrKykgewotICAgICAgICBpZiAoY3lfY2FyZFtpXS5iYXNlX2FkZHIgPT0gMCkgewotICAgICAgICAgICAgICAgIGN5X2NhcmRbaV0uZmlyc3RfbGluZSA9IC0xOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbaV0uY3RsX2FkZHIgPSBOVUxMOwotICAgICAgICAgICAgICAgIGN5X2NhcmRbaV0uaXJxID0gMDsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2ldLmJ1c19pbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgY3lfY2FyZFtpXS5maXJzdF9saW5lID0gMDsKLSAgICAgICAgICAgICAgICBjeV9jYXJkW2ldLm51bV9jaGlwcyA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogaW52YWxpZGF0ZSByZW1haW5pbmcgY3lfcG9ydCBzdHJ1Y3R1cmVzICovCi0gICAgZm9yIChpID0gY3lfbmV4dF9jaGFubmVsIDsgaSA8IE5SX1BPUlRTIDsgaSsrKSB7Ci0gICAgICAgIGN5X3BvcnRbaV0ubGluZSA9IC0xOwotICAgICAgICBjeV9wb3J0W2ldLm1hZ2ljID0gLTE7Ci0gICAgfQorCWN5X25ib2FyZCA9IGN5X2lzYV9uYm9hcmQgKyBjeV9wY2lfbmJvYXJkOwogCi0gICAgLyogaW5pdGlhbGl6ZSBwZXItcG9ydCBkYXRhIHN0cnVjdHVyZXMgZm9yIGVhY2ggdmFsaWQgYm9hcmQgZm91bmQgKi8KLSAgICBmb3IgKGJvYXJkID0gMCA7IGJvYXJkIDwgY3lfbmJvYXJkIDsgYm9hcmQrKykgewotICAgICAgICAgICAgY2luZm8gPSAmY3lfY2FyZFtib2FyZF07Ci0gICAgICAgICAgICBpZiAoY2luZm8tPm51bV9jaGlwcyA9PSAtMSkgeyAvKiBDeWNsYWRlcy1aICovCi0JCW51bWJlcl96X2JvYXJkcysrOwotCQltYWlsYm94ID0gY3lfcmVhZGwoJigoc3RydWN0IFJVTlRJTUVfOTA2MCBfX2lvbWVtICopCi0JCQkgICAgIGN5X2NhcmRbYm9hcmRdLmN0bF9hZGRyKS0+bWFpbF9ib3hfMCk7Ci0JCW5wb3J0cyA9IChtYWlsYm94ID09IFpFX1YxKSA/IFpFX1YxX05QT1JUUyA6IDg7Ci0JCWNpbmZvLT5pbnRyX2VuYWJsZWQgPSAwOwotCQljaW5mby0+bnBvcnRzID0gMDsgLyogV2lsbCBiZSBjb3JyZWN0bHkgc2V0IGxhdGVyLCBhZnRlciAKLQkJCQkgICAgICBaIEZXIGlzIGxvYWRlZCAqLwotCQlzcGluX2xvY2tfaW5pdCgmY2luZm8tPmNhcmRfbG9jayk7Ci0gICAgICAgICAgICAgICAgZm9yIChwb3J0ID0gY2luZm8tPmZpcnN0X2xpbmUgOwotICAgICAgICAgICAgICAgICAgICAgcG9ydCA8IGNpbmZvLT5maXJzdF9saW5lICsgbnBvcnRzOwotICAgICAgICAgICAgICAgICAgICAgcG9ydCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mbyA9ICZjeV9wb3J0W3BvcnRdOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5tYWdpYyA9IENZQ0xBREVTX01BR0lDOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT50eXBlID0gUE9SVF9TVEFSVEVDSDsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+Y2FyZCA9IGJvYXJkOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5saW5lID0gcG9ydDsKLQkJICAgIGluZm8tPmNoaXBfcmV2ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+ZmxhZ3MgPSBTVERfQ09NX0ZMQUdTOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT50dHkgPSBOVUxMOwotCQkgICAgaWYgKG1haWxib3ggPT0gWk9fVjEpCi0JCQlpbmZvLT54bWl0X2ZpZm9fc2l6ZSA9IENZWl9GSUZPX1NJWkU7Ci0JCSAgICBlbHNlCi0JCQlpbmZvLT54bWl0X2ZpZm9fc2l6ZSA9IDQgKiBDWVpfRklGT19TSVpFOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5jb3IxID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+Y29yMiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmNvcjMgPSAwOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5jb3I0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+Y29yNSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPnRicHIgPSAwOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT50Y28gPSAwOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5yYnByID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+cmNvID0gMDsKLQkJICAgIGluZm8tPmN1c3RvbV9kaXZpc29yID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+Y2xvc2VfZGVsYXkgPSA1KkhaLzEwOwotCQkgICAgaW5mby0+Y2xvc2luZ193YWl0ID0gQ0xPU0lOR19XQUlUX0RFTEFZOwotCQkgICAgaW5mby0+aWNvdW50LmN0cyA9IGluZm8tPmljb3VudC5kc3IgPSAKLQkJCWluZm8tPmljb3VudC5ybmcgPSBpbmZvLT5pY291bnQuZGNkID0gMDsKLQkJICAgIGluZm8tPmljb3VudC5yeCA9IGluZm8tPmljb3VudC50eCA9IDA7Ci0JCSAgICBpbmZvLT5pY291bnQuZnJhbWUgPSBpbmZvLT5pY291bnQucGFyaXR5ID0gMDsKLQkJICAgIGluZm8tPmljb3VudC5vdmVycnVuID0gaW5mby0+aWNvdW50LmJyayA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPnhfY2hhciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmV2ZW50ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+Y291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5ibG9ja2VkX29wZW4gPSAwOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5kZWZhdWx0X3RocmVzaG9sZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmRlZmF1bHRfdGltZW91dCA9IDA7Ci0JCSAgICBJTklUX1dPUksoJmluZm8tPnRxdWV1ZSwgZG9fc29mdGludCk7Ci0JCSAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5vcGVuX3dhaXQpOwotCQkgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y2xvc2Vfd2FpdCk7Ci0JCSAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5zaHV0ZG93bl93YWl0KTsKLQkJICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKLSAgICAgICAgICAgICAgICAgICAgLyogaW5mby0+c2Vzc2lvbiAqLwotICAgICAgICAgICAgICAgICAgICAvKiBpbmZvLT5wZ3JwICovCi0gICAgICAgICAgICAgICAgICAgIGluZm8tPnJlYWRfc3RhdHVzX21hc2sgPSAwOwotICAgICAgICAgICAgICAgICAgICAvKiBpbmZvLT50aW1lb3V0ICovCi0JCSAgICAvKiBCZW50c29uJ3MgdmFycyAqLwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5qaWZmaWVzWzBdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+amlmZmllc1sxXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmppZmZpZXNbMl0gPSAwOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5yZmx1c2hfY291bnQgPSAwOworCS8qIGludmFsaWRhdGUgcmVtYWluaW5nIGN5X2NhcmQgc3RydWN0dXJlcyAqLworCWZvciAoaSA9IDA7IGkgPCBOUl9DQVJEUzsgaSsrKSB7CisJCWlmIChjeV9jYXJkW2ldLmJhc2VfYWRkciA9PSAwKSB7CisJCQljeV9jYXJkW2ldLmZpcnN0X2xpbmUgPSAtMTsKKwkJCWN5X2NhcmRbaV0uY3RsX2FkZHIgPSBOVUxMOworCQkJY3lfY2FyZFtpXS5pcnEgPSAwOworCQkJY3lfY2FyZFtpXS5idXNfaW5kZXggPSAwOworCQkJY3lfY2FyZFtpXS5maXJzdF9saW5lID0gMDsKKwkJCWN5X2NhcmRbaV0ubnVtX2NoaXBzID0gMDsKKwkJfQorCX0KKwkvKiBpbnZhbGlkYXRlIHJlbWFpbmluZyBjeV9wb3J0IHN0cnVjdHVyZXMgKi8KKwlmb3IgKGkgPSBjeV9uZXh0X2NoYW5uZWw7IGkgPCBOUl9QT1JUUzsgaSsrKSB7CisJCWN5X3BvcnRbaV0ubGluZSA9IC0xOworCQljeV9wb3J0W2ldLm1hZ2ljID0gLTE7CisJfQorCisJLyogaW5pdGlhbGl6ZSBwZXItcG9ydCBkYXRhIHN0cnVjdHVyZXMgZm9yIGVhY2ggdmFsaWQgYm9hcmQgZm91bmQgKi8KKwlmb3IgKGJvYXJkID0gMDsgYm9hcmQgPCBjeV9uYm9hcmQ7IGJvYXJkKyspIHsKKwkJY2luZm8gPSAmY3lfY2FyZFtib2FyZF07CisJCWlmIChjaW5mby0+bnVtX2NoaXBzID09IC0xKSB7CS8qIEN5Y2xhZGVzLVogKi8KKwkJCW51bWJlcl96X2JvYXJkcysrOworCQkJbWFpbGJveCA9IGN5X3JlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKQorCQkJCQkgICAgIGN5X2NhcmRbYm9hcmRdLmN0bF9hZGRyKS0+CisJCQkJCSAgIG1haWxfYm94XzApOworCQkJbnBvcnRzID0gKG1haWxib3ggPT0gWkVfVjEpID8gWkVfVjFfTlBPUlRTIDogODsKKwkJCWNpbmZvLT5pbnRyX2VuYWJsZWQgPSAwOworCQkJY2luZm8tPm5wb3J0cyA9IDA7CS8qIFdpbGwgYmUgY29ycmVjdGx5IHNldCBsYXRlciwgYWZ0ZXIgCisJCQkJCQkgICBaIEZXIGlzIGxvYWRlZCAqLworCQkJc3Bpbl9sb2NrX2luaXQoJmNpbmZvLT5jYXJkX2xvY2spOworCQkJZm9yIChwb3J0ID0gY2luZm8tPmZpcnN0X2xpbmU7CisJCQkgICAgIHBvcnQgPCBjaW5mby0+Zmlyc3RfbGluZSArIG5wb3J0czsgcG9ydCsrKSB7CisJCQkJaW5mbyA9ICZjeV9wb3J0W3BvcnRdOworCQkJCWluZm8tPm1hZ2ljID0gQ1lDTEFERVNfTUFHSUM7CisJCQkJaW5mby0+dHlwZSA9IFBPUlRfU1RBUlRFQ0g7CisJCQkJaW5mby0+Y2FyZCA9IGJvYXJkOworCQkJCWluZm8tPmxpbmUgPSBwb3J0OworCQkJCWluZm8tPmNoaXBfcmV2ID0gMDsKKwkJCQlpbmZvLT5mbGFncyA9IFNURF9DT01fRkxBR1M7CisJCQkJaW5mby0+dHR5ID0gTlVMTDsKKwkJCQlpZiAobWFpbGJveCA9PSBaT19WMSkKKwkJCQkJaW5mby0+eG1pdF9maWZvX3NpemUgPSBDWVpfRklGT19TSVpFOworCQkJCWVsc2UKKwkJCQkJaW5mby0+eG1pdF9maWZvX3NpemUgPQorCQkJCQkgICAgNCAqIENZWl9GSUZPX1NJWkU7CisJCQkJaW5mby0+Y29yMSA9IDA7CisJCQkJaW5mby0+Y29yMiA9IDA7CisJCQkJaW5mby0+Y29yMyA9IDA7CisJCQkJaW5mby0+Y29yNCA9IDA7CisJCQkJaW5mby0+Y29yNSA9IDA7CisJCQkJaW5mby0+dGJwciA9IDA7CisJCQkJaW5mby0+dGNvID0gMDsKKwkJCQlpbmZvLT5yYnByID0gMDsKKwkJCQlpbmZvLT5yY28gPSAwOworCQkJCWluZm8tPmN1c3RvbV9kaXZpc29yID0gMDsKKwkJCQlpbmZvLT5jbG9zZV9kZWxheSA9IDUgKiBIWiAvIDEwOworCQkJCWluZm8tPmNsb3Npbmdfd2FpdCA9IENMT1NJTkdfV0FJVF9ERUxBWTsKKwkJCQlpbmZvLT5pY291bnQuY3RzID0gaW5mby0+aWNvdW50LmRzciA9CisJCQkJICAgIGluZm8tPmljb3VudC5ybmcgPSBpbmZvLT5pY291bnQuZGNkID0gMDsKKwkJCQlpbmZvLT5pY291bnQucnggPSBpbmZvLT5pY291bnQudHggPSAwOworCQkJCWluZm8tPmljb3VudC5mcmFtZSA9IGluZm8tPmljb3VudC5wYXJpdHkgPSAwOworCQkJCWluZm8tPmljb3VudC5vdmVycnVuID0gaW5mby0+aWNvdW50LmJyayA9IDA7CisJCQkJaW5mby0+eF9jaGFyID0gMDsKKwkJCQlpbmZvLT5ldmVudCA9IDA7CisJCQkJaW5mby0+Y291bnQgPSAwOworCQkJCWluZm8tPmJsb2NrZWRfb3BlbiA9IDA7CisJCQkJaW5mby0+ZGVmYXVsdF90aHJlc2hvbGQgPSAwOworCQkJCWluZm8tPmRlZmF1bHRfdGltZW91dCA9IDA7CisJCQkJSU5JVF9XT1JLKCZpbmZvLT50cXVldWUsIGRvX3NvZnRpbnQpOworCQkJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPm9wZW5fd2FpdCk7CisJCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y2xvc2Vfd2FpdCk7CisJCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+c2h1dGRvd25fd2FpdCk7CisJCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCQkJCS8qIGluZm8tPnNlc3Npb24gKi8KKwkJCQkvKiBpbmZvLT5wZ3JwICovCisJCQkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayA9IDA7CisJCQkJLyogaW5mby0+dGltZW91dCAqLworCQkJCS8qIEJlbnRzb24ncyB2YXJzICovCisJCQkJaW5mby0+amlmZmllc1swXSA9IDA7CisJCQkJaW5mby0+amlmZmllc1sxXSA9IDA7CisJCQkJaW5mby0+amlmZmllc1syXSA9IDA7CisJCQkJaW5mby0+cmZsdXNoX2NvdW50ID0gMDsKICNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLQkJICAgIGluaXRfdGltZXIoJmN5el9yeF9mdWxsX3RpbWVyW3BvcnRdKTsKLQkJICAgIGN5el9yeF9mdWxsX3RpbWVyW3BvcnRdLmZ1bmN0aW9uID0gTlVMTDsKKwkJCQlpbml0X3RpbWVyKCZjeXpfcnhfZnVsbF90aW1lcltwb3J0XSk7CisJCQkJY3l6X3J4X2Z1bGxfdGltZXJbcG9ydF0uZnVuY3Rpb24gPSBOVUxMOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfWVsc2V7IC8qIEN5Y2xvbS1ZIG9mIHNvbWUga2luZCovCi0gICAgICAgICAgICAgICAgaW5kZXggPSBjaW5mby0+YnVzX2luZGV4OwotCQlzcGluX2xvY2tfaW5pdCgmY2luZm8tPmNhcmRfbG9jayk7Ci0JCWNpbmZvLT5ucG9ydHMgPSBDeVBPUlRTX1BFUl9DSElQICogY2luZm8tPm51bV9jaGlwczsKLSAgICAgICAgICAgICAgICBmb3IgKHBvcnQgPSBjaW5mby0+Zmlyc3RfbGluZSA7Ci0gICAgICAgICAgICAgICAgICAgICBwb3J0IDwgY2luZm8tPmZpcnN0X2xpbmUgKyBjaW5mby0+bnBvcnRzIDsKLSAgICAgICAgICAgICAgICAgICAgIHBvcnQrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8gPSAmY3lfcG9ydFtwb3J0XTsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+bWFnaWMgPSBDWUNMQURFU19NQUdJQzsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+dHlwZSA9IFBPUlRfQ0lSUlVTOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5jYXJkID0gYm9hcmQ7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmxpbmUgPSBwb3J0OwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5mbGFncyA9IFNURF9DT01fRkxBR1M7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPnR0eSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPnhtaXRfZmlmb19zaXplID0gQ3lNQVhfQ0hBUl9GSUZPOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5jb3IxID0gQ3lQQVJJVFlfTk9ORXxDeV8xX1NUT1B8Q3lfOF9CSVRTOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5jb3IyID0gQ3lFVEM7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmNvcjMgPSAweDA4OyAvKiBfdmVyeV8gc21hbGwgcmN2IHRocmVzaG9sZCAqLwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5jb3I0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+Y29yNSA9IDA7Ci0JCSAgICBpbmZvLT5jdXN0b21fZGl2aXNvciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmNsb3NlX2RlbGF5ID0gNSpIWi8xMDsKLQkJICAgIGluZm8tPmNsb3Npbmdfd2FpdCA9IENMT1NJTkdfV0FJVF9ERUxBWTsKLQkJICAgIGluZm8tPmljb3VudC5jdHMgPSBpbmZvLT5pY291bnQuZHNyID0gCi0JCQlpbmZvLT5pY291bnQucm5nID0gaW5mby0+aWNvdW50LmRjZCA9IDA7Ci0JCSAgICBpbmZvLT5pY291bnQucnggPSBpbmZvLT5pY291bnQudHggPSAwOwotCQkgICAgaW5mby0+aWNvdW50LmZyYW1lID0gaW5mby0+aWNvdW50LnBhcml0eSA9IDA7Ci0JCSAgICBpbmZvLT5pY291bnQub3ZlcnJ1biA9IGluZm8tPmljb3VudC5icmsgPSAwOwotCQkgICAgY2hpcF9udW1iZXIgPSAocG9ydCAtIGNpbmZvLT5maXJzdF9saW5lKSAvIDQ7Ci0JCSAgICBpZiAoKGluZm8tPmNoaXBfcmV2ID0KLQkJCSBjeV9yZWFkYihjaW5mby0+YmFzZV9hZGRyICsKLQkJCQkgIChjeV9jaGlwX29mZnNldFtjaGlwX251bWJlcl08PGluZGV4KSArCi0JCQkJICAoQ3lHRlJDUjw8aW5kZXgpKSkgPj0gQ0QxNDAwX1JFVl9KKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBJdCBpcyBhIENEMTQwMCByZXYuIEogb3IgbGF0ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnRicHIgPSBiYXVkX2Jwcl82MFsxM107IC8qIFR4IEJQUiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+dGNvID0gYmF1ZF9jb182MFsxM107IC8qIFR4IENPICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5yYnByID0gYmF1ZF9icHJfNjBbMTNdOyAvKiBSeCBCUFIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnJjbyA9IGJhdWRfY29fNjBbMTNdOyAvKiBSeCBDTyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+cmZsb3cgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+cnRzZHRyX2ludiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT50YnByID0gYmF1ZF9icHJfMjVbMTNdOyAvKiBUeCBCUFIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnRjbyA9IGJhdWRfY29fMjVbMTNdOyAvKiBUeCBDTyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+cmJwciA9IGJhdWRfYnByXzI1WzEzXTsgLyogUnggQlBSICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5yY28gPSBiYXVkX2NvXzI1WzEzXTsgLyogUnggQ08gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnJmbG93ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnJ0c2R0cl9pbnYgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPnhfY2hhciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmV2ZW50ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+Y291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5ibG9ja2VkX29wZW4gPSAwOwotICAgICAgICAgICAgICAgICAgICBpbmZvLT5kZWZhdWx0X3RocmVzaG9sZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmRlZmF1bHRfdGltZW91dCA9IDA7Ci0JCSAgICBJTklUX1dPUksoJmluZm8tPnRxdWV1ZSwgZG9fc29mdGludCk7Ci0JCSAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5vcGVuX3dhaXQpOwotCQkgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y2xvc2Vfd2FpdCk7Ci0JCSAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5zaHV0ZG93bl93YWl0KTsKLQkJICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKLSAgICAgICAgICAgICAgICAgICAgLyogaW5mby0+c2Vzc2lvbiAqLwotICAgICAgICAgICAgICAgICAgICAvKiBpbmZvLT5wZ3JwICovCi0gICAgICAgICAgICAgICAgICAgIGluZm8tPnJlYWRfc3RhdHVzX21hc2sgPQotCQkgICAgICAgICAgICAgICAgICBDeVRJTUVPVVR8IEN5U1BFQ0hBUnwgQ3lCUkVBSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ3lQQVJJVFl8IEN5RlJBTUV8IEN5T1ZFUlJVTjsKLSAgICAgICAgICAgICAgICAgICAgLyogaW5mby0+dGltZW91dCAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICB9CisJCQl9CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsJLyogQ3ljbG9tLVkgb2Ygc29tZSBraW5kICovCisJCQlpbmRleCA9IGNpbmZvLT5idXNfaW5kZXg7CisJCQlzcGluX2xvY2tfaW5pdCgmY2luZm8tPmNhcmRfbG9jayk7CisJCQljaW5mby0+bnBvcnRzID0gQ3lQT1JUU19QRVJfQ0hJUCAqIGNpbmZvLT5udW1fY2hpcHM7CisJCQlmb3IgKHBvcnQgPSBjaW5mby0+Zmlyc3RfbGluZTsKKwkJCSAgICAgcG9ydCA8IGNpbmZvLT5maXJzdF9saW5lICsgY2luZm8tPm5wb3J0czsgcG9ydCsrKSB7CisJCQkJaW5mbyA9ICZjeV9wb3J0W3BvcnRdOworCQkJCWluZm8tPm1hZ2ljID0gQ1lDTEFERVNfTUFHSUM7CisJCQkJaW5mby0+dHlwZSA9IFBPUlRfQ0lSUlVTOworCQkJCWluZm8tPmNhcmQgPSBib2FyZDsKKwkJCQlpbmZvLT5saW5lID0gcG9ydDsKKwkJCQlpbmZvLT5mbGFncyA9IFNURF9DT01fRkxBR1M7CisJCQkJaW5mby0+dHR5ID0gTlVMTDsKKwkJCQlpbmZvLT54bWl0X2ZpZm9fc2l6ZSA9IEN5TUFYX0NIQVJfRklGTzsKKwkJCQlpbmZvLT5jb3IxID0KKwkJCQkgICAgQ3lQQVJJVFlfTk9ORSB8IEN5XzFfU1RPUCB8IEN5XzhfQklUUzsKKwkJCQlpbmZvLT5jb3IyID0gQ3lFVEM7CisJCQkJaW5mby0+Y29yMyA9IDB4MDg7CS8qIF92ZXJ5XyBzbWFsbCByY3YgdGhyZXNob2xkICovCisJCQkJaW5mby0+Y29yNCA9IDA7CisJCQkJaW5mby0+Y29yNSA9IDA7CisJCQkJaW5mby0+Y3VzdG9tX2Rpdmlzb3IgPSAwOworCQkJCWluZm8tPmNsb3NlX2RlbGF5ID0gNSAqIEhaIC8gMTA7CisJCQkJaW5mby0+Y2xvc2luZ193YWl0ID0gQ0xPU0lOR19XQUlUX0RFTEFZOworCQkJCWluZm8tPmljb3VudC5jdHMgPSBpbmZvLT5pY291bnQuZHNyID0KKwkJCQkgICAgaW5mby0+aWNvdW50LnJuZyA9IGluZm8tPmljb3VudC5kY2QgPSAwOworCQkJCWluZm8tPmljb3VudC5yeCA9IGluZm8tPmljb3VudC50eCA9IDA7CisJCQkJaW5mby0+aWNvdW50LmZyYW1lID0gaW5mby0+aWNvdW50LnBhcml0eSA9IDA7CisJCQkJaW5mby0+aWNvdW50Lm92ZXJydW4gPSBpbmZvLT5pY291bnQuYnJrID0gMDsKKwkJCQljaGlwX251bWJlciA9IChwb3J0IC0gY2luZm8tPmZpcnN0X2xpbmUpIC8gNDsKKwkJCQlpZiAoKGluZm8tPmNoaXBfcmV2ID0KKwkJCQkgICAgIGN5X3JlYWRiKGNpbmZvLT5iYXNlX2FkZHIgKworCQkJCQkgICAgICAoY3lfY2hpcF9vZmZzZXRbY2hpcF9udW1iZXJdIDw8CisJCQkJCSAgICAgICBpbmRleCkgKyAoQ3lHRlJDUiA8PCBpbmRleCkpKSA+PQorCQkJCSAgICBDRDE0MDBfUkVWX0opIHsKKwkJCQkJLyogSXQgaXMgYSBDRDE0MDAgcmV2LiBKIG9yIGxhdGVyICovCisJCQkJCWluZm8tPnRicHIgPSBiYXVkX2Jwcl82MFsxM107CS8qIFR4IEJQUiAqLworCQkJCQlpbmZvLT50Y28gPSBiYXVkX2NvXzYwWzEzXTsJLyogVHggQ08gKi8KKwkJCQkJaW5mby0+cmJwciA9IGJhdWRfYnByXzYwWzEzXTsJLyogUnggQlBSICovCisJCQkJCWluZm8tPnJjbyA9IGJhdWRfY29fNjBbMTNdOwkvKiBSeCBDTyAqLworCQkJCQlpbmZvLT5yZmxvdyA9IDA7CisJCQkJCWluZm8tPnJ0c2R0cl9pbnYgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWluZm8tPnRicHIgPSBiYXVkX2Jwcl8yNVsxM107CS8qIFR4IEJQUiAqLworCQkJCQlpbmZvLT50Y28gPSBiYXVkX2NvXzI1WzEzXTsJLyogVHggQ08gKi8KKwkJCQkJaW5mby0+cmJwciA9IGJhdWRfYnByXzI1WzEzXTsJLyogUnggQlBSICovCisJCQkJCWluZm8tPnJjbyA9IGJhdWRfY29fMjVbMTNdOwkvKiBSeCBDTyAqLworCQkJCQlpbmZvLT5yZmxvdyA9IDA7CisJCQkJCWluZm8tPnJ0c2R0cl9pbnYgPSAwOworCQkJCX0KKwkJCQlpbmZvLT54X2NoYXIgPSAwOworCQkJCWluZm8tPmV2ZW50ID0gMDsKKwkJCQlpbmZvLT5jb3VudCA9IDA7CisJCQkJaW5mby0+YmxvY2tlZF9vcGVuID0gMDsKKwkJCQlpbmZvLT5kZWZhdWx0X3RocmVzaG9sZCA9IDA7CisJCQkJaW5mby0+ZGVmYXVsdF90aW1lb3V0ID0gMDsKKwkJCQlJTklUX1dPUksoJmluZm8tPnRxdWV1ZSwgZG9fc29mdGludCk7CisJCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+b3Blbl93YWl0KTsKKwkJCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5jbG9zZV93YWl0KTsKKwkJCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5zaHV0ZG93bl93YWl0KTsKKwkJCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCk7CisJCQkJLyogaW5mby0+c2Vzc2lvbiAqLworCQkJCS8qIGluZm8tPnBncnAgKi8KKwkJCQlpbmZvLT5yZWFkX3N0YXR1c19tYXNrID0KKwkJCQkgICAgQ3lUSU1FT1VUIHwgQ3lTUEVDSEFSIHwgQ3lCUkVBSworCQkJCSAgICB8IEN5UEFSSVRZIHwgQ3lGUkFNRSB8IEN5T1ZFUlJVTjsKKwkJCQkvKiBpbmZvLT50aW1lb3V0ICovCisJCQl9CisJCX0KKwl9CiAKICNpZm5kZWYgQ09ORklHX0NZWl9JTlRSCi0gICAgaWYgKG51bWJlcl96X2JvYXJkcyAmJiAhY3l6X3RpbWVyb24pewotCWN5el90aW1lcm9uKys7Ci0JY3l6X3RpbWVybGlzdC5leHBpcmVzID0gamlmZmllcyArIDE7Ci0JYWRkX3RpbWVyKCZjeXpfdGltZXJsaXN0KTsKKwlpZiAobnVtYmVyX3pfYm9hcmRzICYmICFjeXpfdGltZXJvbikgeworCQljeXpfdGltZXJvbisrOworCQljeXpfdGltZXJsaXN0LmV4cGlyZXMgPSBqaWZmaWVzICsgMTsKKwkJYWRkX3RpbWVyKCZjeXpfdGltZXJsaXN0KTsKICNpZmRlZiBDWV9QQ0lfREVCVUcKLQlwcmludGsoIkN5Y2xhZGVzLVogcG9sbGluZyBpbml0aWFsaXplZFxuIik7CisJCXByaW50aygiQ3ljbGFkZXMtWiBwb2xsaW5nIGluaXRpYWxpemVkXG4iKTsKICNlbmRpZgotICAgIH0KLSNlbmRpZiAvKiBDT05GSUdfQ1laX0lOVFIgKi8KKwl9CisjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCiAKLSAgICByZXR1cm4gMDsKLSAgICAKLX0gLyogY3lfaW5pdCAqLworCXJldHVybiAwOwogCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWN5X2NsZWFudXBfbW9kdWxlKHZvaWQpCit9CQkJCS8qIGN5X2luaXQgKi8KKworc3RhdGljIHZvaWQgX19leGl0IGN5X2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0gICAgaW50IGksIGUxOworCWludCBpLCBlMTsKIAogI2lmbmRlZiBDT05GSUdfQ1laX0lOVFIKLSAgICBpZiAoY3l6X3RpbWVyb24pewotCWN5el90aW1lcm9uID0gMDsKLQlkZWxfdGltZXIoJmN5el90aW1lcmxpc3QpOwotICAgIH0KKwlpZiAoY3l6X3RpbWVyb24peworCQljeXpfdGltZXJvbiA9IDA7CisJCWRlbF90aW1lcigmY3l6X3RpbWVybGlzdCk7CisJfQogI2VuZGlmIC8qIENPTkZJR19DWVpfSU5UUiAqLwogCi0gICAgaWYgKChlMSA9IHR0eV91bnJlZ2lzdGVyX2RyaXZlcihjeV9zZXJpYWxfZHJpdmVyKSkpCi0gICAgICAgICAgICBwcmludGsoImN5YzogZmFpbGVkIHRvIHVucmVnaXN0ZXIgQ3ljbGFkZXMgc2VyaWFsIGRyaXZlciglZClcbiIsCi0JCWUxKTsKKwlpZiAoKGUxID0gdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGN5X3NlcmlhbF9kcml2ZXIpKSkKKwkJcHJpbnRrKCJjeWM6IGZhaWxlZCB0byB1bnJlZ2lzdGVyIEN5Y2xhZGVzIHNlcmlhbCBkcml2ZXIoJWQpXG4iLAorCQkJZTEpOwogCi0gICAgcHV0X3R0eV9kcml2ZXIoY3lfc2VyaWFsX2RyaXZlcik7CisJcHV0X3R0eV9kcml2ZXIoY3lfc2VyaWFsX2RyaXZlcik7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgTlJfQ0FSRFM7IGkrKykgewotICAgICAgICBpZiAoY3lfY2FyZFtpXS5iYXNlX2FkZHIpIHsKLQkgICAgaW91bm1hcChjeV9jYXJkW2ldLmJhc2VfYWRkcik7Ci0JICAgIGlmIChjeV9jYXJkW2ldLmN0bF9hZGRyKQotCQlpb3VubWFwKGN5X2NhcmRbaV0uY3RsX2FkZHIpOwotCSAgICBpZiAoY3lfY2FyZFtpXS5pcnEKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ0FSRFM7IGkrKykgeworCQlpZiAoY3lfY2FyZFtpXS5iYXNlX2FkZHIpIHsKKwkJCWlvdW5tYXAoY3lfY2FyZFtpXS5iYXNlX2FkZHIpOworCQkJaWYgKGN5X2NhcmRbaV0uY3RsX2FkZHIpCisJCQkJaW91bm1hcChjeV9jYXJkW2ldLmN0bF9hZGRyKTsKKwkJCWlmIChjeV9jYXJkW2ldLmlycQogI2lmbmRlZiBDT05GSUdfQ1laX0lOVFIKLQkJJiYgY3lfY2FyZFtpXS5udW1fY2hpcHMgIT0gLTEgLyogbm90IGEgWiBjYXJkICovCisJCQkJJiYgY3lfY2FyZFtpXS5udW1fY2hpcHMgIT0gLTEgLyogbm90IGEgWiBjYXJkICovCiAjZW5kaWYgLyogQ09ORklHX0NZWl9JTlRSICovCi0JICAgICkKLQkJZnJlZV9pcnEoY3lfY2FyZFtpXS5pcnEsICZjeV9jYXJkW2ldKTsKKwkJCQkpCisJCQkJZnJlZV9pcnEoY3lfY2FyZFtpXS5pcnEsICZjeV9jYXJkW2ldKTsKICNpZmRlZiBDT05GSUdfUENJCi0JCWlmIChjeV9jYXJkW2ldLnBkZXYpCi0JCQlwY2lfcmVsZWFzZV9yZWdpb25zKGN5X2NhcmRbaV0ucGRldik7CisJCQlpZiAoY3lfY2FyZFtpXS5wZGV2KQorCQkJCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY3lfY2FyZFtpXS5wZGV2KTsKICNlbmRpZgotICAgICAgICB9Ci0gICAgfQorCQl9CisJfQogfSAvKiBjeV9jbGVhbnVwX21vZHVsZSAqLwogCiBtb2R1bGVfaW5pdChjeV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtLmggYi9kcml2ZXJzL2NoYXIvZHJtL2RybS5oCmluZGV4IDU2NDJhYzQuLjhkYjkwNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm0uaApAQCAtMTE3LDYgKzExNywxNCBAQAogfSBkcm1fY2xpcF9yZWN0X3Q7CiAKIC8qKgorICogRHJhd2FibGUgaW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9kcmF3YWJsZV9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgbnVtX3JlY3RzOworCWRybV9jbGlwX3JlY3RfdCAqcmVjdHM7Cit9IGRybV9kcmF3YWJsZV9pbmZvX3Q7CisKKy8qKgogICogVGV4dHVyZSByZWdpb24sCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV90ZXhfcmVnaW9uIHsKQEAgLTM0OCw3ICszNTYsOCBAQAogCQlfRFJNX1BBR0VfQUxJR04gPSAweDAxLAkvKio8IEFsaWduIG9uIHBhZ2UgYm91bmRhcmllcyBmb3IgRE1BICovCiAJCV9EUk1fQUdQX0JVRkZFUiA9IDB4MDIsCS8qKjwgQnVmZmVyIGlzIGluIEFHUCBzcGFjZSAqLwogCQlfRFJNX1NHX0JVRkZFUiA9IDB4MDQsCS8qKjwgU2NhdHRlci9nYXRoZXIgbWVtb3J5IGJ1ZmZlciAqLwotCQlfRFJNX0ZCX0JVRkZFUiA9IDB4MDgJLyoqPCBCdWZmZXIgaXMgaW4gZnJhbWUgYnVmZmVyICovCisJCV9EUk1fRkJfQlVGRkVSID0gMHgwOCwJLyoqPCBCdWZmZXIgaXMgaW4gZnJhbWUgYnVmZmVyICovCisJCV9EUk1fUENJX0JVRkZFUl9STyA9IDB4MTAgLyoqPCBNYXAgUENJIERNQSBidWZmZXIgcmVhZC1vbmx5ICovCiAJfSBmbGFnczsKIAl1bnNpZ25lZCBsb25nIGFncF9zdGFydDsgLyoqPAogCQkJCSAgKiBTdGFydCBhZGRyZXNzIG9mIHdoZXJlIHRoZSBBR1AgYnVmZmVycyBhcmUKQEAgLTQ0NCw2ICs0NTMsMjAgQEAKIH0gZHJtX2RyYXdfdDsKIAogLyoqCisgKiBEUk1fSU9DVExfVVBEQVRFX0RSQVcgaW9jdGwgYXJndW1lbnQgdHlwZS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKwlEUk1fRFJBV0FCTEVfQ0xJUFJFQ1RTLAorfSBkcm1fZHJhd2FibGVfaW5mb190eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV91cGRhdGVfZHJhdyB7CisJZHJtX2RyYXdhYmxlX3QgaGFuZGxlOworCXVuc2lnbmVkIGludCB0eXBlOworCXVuc2lnbmVkIGludCBudW07CisJdW5zaWduZWQgbG9uZyBsb25nIGRhdGE7Cit9IGRybV91cGRhdGVfZHJhd190OworCisvKioKICAqIERSTV9JT0NUTF9HRVRfTUFHSUMgYW5kIERSTV9JT0NUTF9BVVRIX01BR0lDIGlvY3RsIGFyZ3VtZW50IHR5cGUuCiAgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9hdXRoIHsKQEAgLTQ2NSwxMCArNDg4LDE0IEBACiB0eXBlZGVmIGVudW0gewogCV9EUk1fVkJMQU5LX0FCU09MVVRFID0gMHgwLAkvKio8IFdhaXQgZm9yIHNwZWNpZmljIHZibGFuayBzZXF1ZW5jZSBudW1iZXIgKi8KIAlfRFJNX1ZCTEFOS19SRUxBVElWRSA9IDB4MSwJLyoqPCBXYWl0IGZvciBnaXZlbiBudW1iZXIgb2YgdmJsYW5rcyAqLworCV9EUk1fVkJMQU5LX05FWFRPTk1JU1MgPSAweDEwMDAwMDAwLAkvKio8IElmIG1pc3NlZCwgd2FpdCBmb3IgbmV4dCB2YmxhbmsgKi8KKwlfRFJNX1ZCTEFOS19TRUNPTkRBUlkgPSAweDIwMDAwMDAwLAkvKio8IFNlY29uZGFyeSBkaXNwbGF5IGNvbnRyb2xsZXIgKi8KIAlfRFJNX1ZCTEFOS19TSUdOQUwgPSAweDQwMDAwMDAwCS8qKjwgU2VuZCBzaWduYWwgaW5zdGVhZCBvZiBibG9ja2luZyAqLwogfSBkcm1fdmJsYW5rX3NlcV90eXBlX3Q7CiAKLSNkZWZpbmUgX0RSTV9WQkxBTktfRkxBR1NfTUFTSyBfRFJNX1ZCTEFOS19TSUdOQUwKKyNkZWZpbmUgX0RSTV9WQkxBTktfVFlQRVNfTUFTSyAoX0RSTV9WQkxBTktfQUJTT0xVVEUgfCBfRFJNX1ZCTEFOS19SRUxBVElWRSkKKyNkZWZpbmUgX0RSTV9WQkxBTktfRkxBR1NfTUFTSyAoX0RSTV9WQkxBTktfU0lHTkFMIHwgX0RSTV9WQkxBTktfU0VDT05EQVJZIHwgXAorCQkJCV9EUk1fVkJMQU5LX05FWFRPTk1JU1MpCiAKIHN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVxdWVzdCB7CiAJZHJtX3ZibGFua19zZXFfdHlwZV90IHR5cGU7CkBAIC02MjMsNiArNjUwLDggQEAKIAogI2RlZmluZSBEUk1fSU9DVExfV0FJVF9WQkxBTksJCURSTV9JT1dSKDB4M2EsIGRybV93YWl0X3ZibGFua190KQogCisjZGVmaW5lIERSTV9JT0NUTF9VUERBVEVfRFJBVwkJRFJNX0lPVygweDNmLCBkcm1fdXBkYXRlX2RyYXdfdCkKKwogLyoqCiAgKiBEZXZpY2Ugc3BlY2lmaWMgaW9jdGxzIHNob3VsZCBvbmx5IGJlIGluIHRoZWlyIHJlc3BlY3RpdmUgaGVhZGVycwogICogVGhlIGRldmljZSBzcGVjaWZpYyBpb2N0bCByYW5nZSBpcyBmcm9tIDB4NDAgdG8gMHg3OS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtUC5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKaW5kZXggNzY5MGE1OS4uNmRjZGNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1QLmgKQEAgLTk3LDYgKzk3LDcgQEAKICNkZWZpbmUgRFJJVkVSX0lSUV9WQkwgICAgIDB4MTAwCiAjZGVmaW5lIERSSVZFUl9ETUFfUVVFVUUgICAweDIwMAogI2RlZmluZSBEUklWRVJfRkJfRE1BICAgICAgMHg0MDAKKyNkZWZpbmUgRFJJVkVSX0lSUV9WQkwyICAgIDB4ODAwCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiBcbmFtZSBCZWdpbiB0aGUgRFJNLi4uICovCkBAIC00MzAsNyArNDMxLDggQEAKIAllbnVtIHsKIAkJX0RSTV9ETUFfVVNFX0FHUCA9IDB4MDEsCiAJCV9EUk1fRE1BX1VTRV9TRyA9IDB4MDIsCi0JCV9EUk1fRE1BX1VTRV9GQiA9IDB4MDQKKwkJX0RSTV9ETUFfVVNFX0ZCID0gMHgwNCwKKwkJX0RSTV9ETUFfVVNFX1BDSV9STyA9IDB4MDgKIAl9IGZsYWdzOwogCiB9IGRybV9kZXZpY2VfZG1hX3Q7CkBAIC01NTksOSArNTYxLDkgQEAKIAlpbnQgKCpjb250ZXh0X2R0b3IpIChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IGNvbnRleHQpOwogCWludCAoKmtlcm5lbF9jb250ZXh0X3N3aXRjaCkgKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgb2xkLAogCQkJCSAgICAgIGludCBuZXcpOwotCXZvaWQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2hfdW5sb2NrKSAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJCSAgICAgIGRybV9sb2NrX3QgKmxvY2spOworCXZvaWQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2hfdW5sb2NrKSAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogCWludCAoKnZibGFua193YWl0KSAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOworCWludCAoKnZibGFua193YWl0MikgKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIAlpbnQgKCpkcmlfbGlicmFyeV9uYW1lKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY2hhciAqYnVmKTsKIAogCS8qKgpAQCAtNzA4LDkgKzcxMCwxMyBAQAogCiAJd2FpdF9xdWV1ZV9oZWFkX3QgdmJsX3F1ZXVlOwkvKio8IFZCTEFOSyB3YWl0IHF1ZXVlICovCiAJYXRvbWljX3QgdmJsX3JlY2VpdmVkOworCWF0b21pY190IHZibF9yZWNlaXZlZDI7CQkvKio8IG51bWJlciBvZiBzZWNvbmRhcnkgVkJMQU5LIGludGVycnVwdHMgKi8KIAlzcGlubG9ja190IHZibF9sb2NrOwogCWRybV92Ymxfc2lnX3QgdmJsX3NpZ3M7CQkvKio8IHNpZ25hbCBsaXN0IHRvIHNlbmQgb24gVkJMQU5LICovCisJZHJtX3ZibF9zaWdfdCB2Ymxfc2lnczI7CS8qKjwgc2lnbmFscyB0byBzZW5kIG9uIHNlY29uZGFyeSBWQkxBTksgKi8KIAl1bnNpZ25lZCBpbnQgdmJsX3BlbmRpbmc7CisJc3BpbmxvY2tfdCB0YXNrbGV0X2xvY2s7CS8qKjwgRm9yIGRybV9sb2NrZWRfdGFza2xldCAqLworCXZvaWQgKCpsb2NrZWRfdGFza2xldF9mdW5jKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogCS8qQH0gKi8KIAljeWNsZXNfdCBjdHhfc3RhcnQ7CkBAIC03MzgsNiArNzQ0LDE1IEBACiAJZHJtX2xvY2FsX21hcF90ICphZ3BfYnVmZmVyX21hcDsKIAl1bnNpZ25lZCBpbnQgYWdwX2J1ZmZlcl90b2tlbjsKIAlkcm1faGVhZF90IHByaW1hcnk7CQkvKio8IHByaW1hcnkgc2NyZWVuIGhlYWQgKi8KKworCS8qKiBcbmFtZSBEcmF3YWJsZSBpbmZvcm1hdGlvbiAqLworCS8qQHsgKi8KKwlzcGlubG9ja190IGRyd19sb2NrOworCXVuc2lnbmVkIGludCBkcndfYml0ZmllbGRfbGVuZ3RoOworCXUzMiAqZHJ3X2JpdGZpZWxkOworCXVuc2lnbmVkIGludCBkcndfaW5mb19sZW5ndGg7CisJZHJtX2RyYXdhYmxlX2luZm9fdCAqKmRyd19pbmZvOworCS8qQH0gKi8KIH0gZHJtX2RldmljZV90OwogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LApAQCAtODg1LDYgKzkwMCwxMCBAQAogCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogZXh0ZXJuIGludCBkcm1fcm1kcmF3KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGRybV91cGRhdGVfZHJhd2FibGVfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2V4dGVybiBkcm1fZHJhd2FibGVfaW5mb190ICpkcm1fZ2V0X2RyYXdhYmxlX2luZm8oZHJtX2RldmljZV90ICpkZXYsCisJCQkJCQkgIGRybV9kcmF3YWJsZV90IGlkKTsKIAogCQkJCS8qIEF1dGhlbnRpY2F0aW9uIElPQ1RMIHN1cHBvcnQgKGRybV9hdXRoLmgpICovCiBleHRlcm4gaW50IGRybV9nZXRtYWdpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKQEAgLTk0OSw2ICs5NjgsNyBAQAogCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogZXh0ZXJuIGludCBkcm1fdmJsYW5rX3dhaXQoZHJtX2RldmljZV90ICogZGV2LCB1bnNpZ25lZCBpbnQgKnZibF9zZXEpOwogZXh0ZXJuIHZvaWQgZHJtX3ZibF9zZW5kX3NpZ25hbHMoZHJtX2RldmljZV90ICogZGV2KTsKK2V4dGVybiB2b2lkIGRybV9sb2NrZWRfdGFza2xldChkcm1fZGV2aWNlX3QgKmRldiwgdm9pZCgqZnVuYykoZHJtX2RldmljZV90KikpOwogCiAJCQkJLyogQUdQL0dBUlQgc3VwcG9ydCAoZHJtX2FncHN1cHBvcnQuaCkgKi8KIGV4dGVybiBkcm1fYWdwX2hlYWRfdCAqZHJtX2FncF9pbml0KGRybV9kZXZpY2VfdCAqIGRldik7CkBAIC0xMTIyLDkgKzExNDIsNSBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2NvcmVfZ2V0X21hcF9vZnMoZHJtX21hcF90ICogbWFwKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGRybV9jb3JlX2dldF9yZWdfb2ZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi0jaWZuZGVmIHBjaV9wcmV0dHlfbmFtZQotI2RlZmluZSBwY2lfcHJldHR5X25hbWUoZGV2KSAiIgotI2VuZGlmCi0KICNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2J1ZnMuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2J1ZnMuYwppbmRleCA2ZWFmZmYxLi45ZjY1ZjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jCkBAIC04ODcsNiArODg3LDkgQEAKIAlyZXF1ZXN0LT5jb3VudCA9IGVudHJ5LT5idWZfY291bnQ7CiAJcmVxdWVzdC0+c2l6ZSA9IHNpemU7CiAKKwlpZiAocmVxdWVzdC0+ZmxhZ3MgJiBfRFJNX1BDSV9CVUZGRVJfUk8pCisJCWRtYS0+ZmxhZ3MgPSBfRFJNX0RNQV9VU0VfUENJX1JPOworCiAJYXRvbWljX2RlYygmZGV2LT5idWZfYWxsb2MpOwogCXJldHVybiAwOwogCkBAIC0xNDcxLDkgKzE0NzQsMTAgQEAKICAqIFxwYXJhbSBhcmcgcG9pbnRlciB0byBhIGRybV9idWZfbWFwIHN0cnVjdHVyZS4KICAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUuCiAgKgotICogTWFwcyB0aGUgQUdQIG9yIFNHIGJ1ZmZlciByZWdpb24gd2l0aCBkb19tbWFwKCksIGFuZCBjb3BpZXMgaW5mb3JtYXRpb24KLSAqIGFib3V0IGVhY2ggYnVmZmVyIGludG8gdXNlciBzcGFjZS4gVGhlIFBDSSBidWZmZXJzIGFyZSBhbHJlYWR5IG1hcHBlZCBvbiB0aGUKLSAqIGFkZGJ1ZnNfcGNpKCkgY2FsbC4KKyAqIE1hcHMgdGhlIEFHUCwgU0cgb3IgUENJIGJ1ZmZlciByZWdpb24gd2l0aCBkb19tbWFwKCksIGFuZCBjb3BpZXMgaW5mb3JtYXRpb24KKyAqIGFib3V0IGVhY2ggYnVmZmVyIGludG8gdXNlciBzcGFjZS4gRm9yIFBDSSBidWZmZXJzLCBpdCBjYWxscyBkb19tbWFwKCkgd2l0aAorICogb2Zmc2V0IGVxdWFsIHRvIDAsIHdoaWNoIGRybV9tbWFwKCkgaW50ZXJwcmV0ZXMgYXMgUENJIGJ1ZmZlcnMgYW5kIGNhbGxzCisgKiBkcm1fbW1hcF9kbWEoKS4KICAqLwogaW50IGRybV9tYXBidWZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2NvcmUuaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2NvcmUuaAppbmRleCBmNGY5ZGI2Yy4uMzE2NzM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fY29yZS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2NvcmUuaApAQCAtMjQsMTEgKzI0LDExIEBACiAKICNkZWZpbmUgQ09SRV9OQU1FCQkiZHJtIgogI2RlZmluZSBDT1JFX0RFU0MJCSJEUk0gc2hhcmVkIGNvcmUgcm91dGluZXMiCi0jZGVmaW5lIENPUkVfREFURQkJIjIwMDUxMTAyIgorI2RlZmluZSBDT1JFX0RBVEUJCSIyMDA2MDgxMCIKIAogI2RlZmluZSBEUk1fSUZfTUFKT1IJMQotI2RlZmluZSBEUk1fSUZfTUlOT1IJMgorI2RlZmluZSBEUk1fSUZfTUlOT1IJMwogCiAjZGVmaW5lIENPUkVfTUFKT1IJMQotI2RlZmluZSBDT1JFX01JTk9SCTAKLSNkZWZpbmUgQ09SRV9QQVRDSExFVkVMIDEKKyNkZWZpbmUgQ09SRV9NSU5PUgkxCisjZGVmaW5lIENPUkVfUEFUQ0hMRVZFTCAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcmF3YWJsZS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJhd2FibGUuYwppbmRleCA3ODU3NDUzLi5kZTM3ZDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcmF3YWJsZS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2RyYXdhYmxlLmMKQEAgLTQsNiArNCw3IEBACiAgKgogICogXGF1dGhvciBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4KICAqIFxhdXRob3IgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgorICogXGF1dGhvciBNaWNoZWwgRMOkbnplciA8bWljaGVsQHR1bmdzdGVuZ3JhcGhpY3MuY29tPgogICovCiAKIC8qCkBAIC0xMSw2ICsxMiw3IEBACiAgKgogICogQ29weXJpZ2h0IDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgogICogQ29weXJpZ2h0IDIwMDAgVkEgTGludXggU3lzdGVtcywgSW5jLiwgU3Vubnl2YWxlLCBDYWxpZm9ybmlhLgorICogQ29weXJpZ2h0IDIwMDYgVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIEJpc21hcmNrLCBOb3J0aCBEYWtvdGEuCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCkBAIC0zNSwyMiArMzcsMjk0IEBACiAKICNpbmNsdWRlICJkcm1QLmgiCiAKLS8qKiBOby1vcC4gKi8KLWludCBkcm1fYWRkZHJhdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisvKioKKyAqIEFsbG9jYXRlIGRyYXdhYmxlIElEIGFuZCBtZW1vcnkgdG8gc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgaXQuCisgKi8KK2ludCBkcm1fYWRkZHJhdyhEUk1fSU9DVExfQVJHUykKIHsKKwlEUk1fREVWSUNFOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJaW50IGksIGo7CisJdTMyICpiaXRmaWVsZCA9IGRldi0+ZHJ3X2JpdGZpZWxkOworCXVuc2lnbmVkIGludCBiaXRmaWVsZF9sZW5ndGggPSBkZXYtPmRyd19iaXRmaWVsZF9sZW5ndGg7CisJZHJtX2RyYXdhYmxlX2luZm9fdCAqKmluZm8gPSBkZXYtPmRyd19pbmZvOworCXVuc2lnbmVkIGludCBpbmZvX2xlbmd0aCA9IGRldi0+ZHJ3X2luZm9fbGVuZ3RoOwogCWRybV9kcmF3X3QgZHJhdzsKIAotCWRyYXcuaGFuZGxlID0gMDsJLyogTk9PUCAqLworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgYml0ZmllbGRfbGVuZ3RoOyBpKyspIHsKKwkJaWYgKGJpdGZpZWxkW2ldID09IH4wKQorCQkJY29udGludWU7CisKKwkJZm9yICg7IGogPCA4ICogc2l6ZW9mKCpiaXRmaWVsZCk7IGorKykKKwkJCWlmICghKGJpdGZpZWxkW2ldICYgKDEgPDwgaikpKQorCQkJCWdvdG8gZG9uZTsKKwl9Citkb25lOgorCisJaWYgKGkgPT0gYml0ZmllbGRfbGVuZ3RoKSB7CisJCWJpdGZpZWxkX2xlbmd0aCsrOworCisJCWJpdGZpZWxkID0gZHJtX2FsbG9jKGJpdGZpZWxkX2xlbmd0aCAqIHNpemVvZigqYml0ZmllbGQpLAorCQkJCSAgICAgRFJNX01FTV9CVUZTKTsKKworCQlpZiAoIWJpdGZpZWxkKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgZHJhd2FibGUgYml0ZmllbGRcbiIpOworCQkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKKwkJfQorCisJCWlmICg4ICogc2l6ZW9mKCpiaXRmaWVsZCkgKiBiaXRmaWVsZF9sZW5ndGggPiBpbmZvX2xlbmd0aCkgeworCQkJaW5mb19sZW5ndGggKz0gOCAqIHNpemVvZigqYml0ZmllbGQpOworCisJCQlpbmZvID0gZHJtX2FsbG9jKGluZm9fbGVuZ3RoICogc2l6ZW9mKCppbmZvKSwKKwkJCQkJIERSTV9NRU1fQlVGUyk7CisKKwkJCWlmICghaW5mbykgeworCQkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBkcmF3YWJsZSBpbmZvIgorCQkJCQkgICIgYXJyYXlcbiIpOworCisJCQkJZHJtX2ZyZWUoYml0ZmllbGQsCisJCQkJCSBiaXRmaWVsZF9sZW5ndGggKiBzaXplb2YoKmJpdGZpZWxkKSwKKwkJCQkJIERSTV9NRU1fQlVGUyk7CisJCQkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKKwkJCX0KKwkJfQorCisJCWJpdGZpZWxkW2ldID0gMDsKKwl9CisKKwlkcmF3LmhhbmRsZSA9IGkgKiA4ICogc2l6ZW9mKCpiaXRmaWVsZCkgKyBqICsgMTsKIAlEUk1fREVCVUcoIiVkXG4iLCBkcmF3LmhhbmRsZSk7Ci0JaWYgKGNvcHlfdG9fdXNlcigoZHJtX2RyYXdfdCBfX3VzZXIgKikgYXJnLCAmZHJhdywgc2l6ZW9mKGRyYXcpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kcndfbG9jaywgaXJxZmxhZ3MpOworCisJYml0ZmllbGRbaV0gfD0gMSA8PCBqOworCWluZm9bZHJhdy5oYW5kbGUgLSAxXSA9IE5VTEw7CisKKwlpZiAoYml0ZmllbGQgIT0gZGV2LT5kcndfYml0ZmllbGQpIHsKKwkJbWVtY3B5KGJpdGZpZWxkLCBkZXYtPmRyd19iaXRmaWVsZCwgZGV2LT5kcndfYml0ZmllbGRfbGVuZ3RoICoKKwkJICAgICAgIHNpemVvZigqYml0ZmllbGQpKTsKKwkJZHJtX2ZyZWUoZGV2LT5kcndfYml0ZmllbGQsIHNpemVvZigqYml0ZmllbGQpICoKKwkJCSBkZXYtPmRyd19iaXRmaWVsZF9sZW5ndGgsIERSTV9NRU1fQlVGUyk7CisJCWRldi0+ZHJ3X2JpdGZpZWxkID0gYml0ZmllbGQ7CisJCWRldi0+ZHJ3X2JpdGZpZWxkX2xlbmd0aCA9IGJpdGZpZWxkX2xlbmd0aDsKKwl9CisKKwlpZiAoaW5mbyAhPSBkZXYtPmRyd19pbmZvKSB7CisJCW1lbWNweShpbmZvLCBkZXYtPmRyd19pbmZvLCBkZXYtPmRyd19pbmZvX2xlbmd0aCAqCisJCSAgICAgICBzaXplb2YoKmluZm8pKTsKKwkJZHJtX2ZyZWUoZGV2LT5kcndfaW5mbywgc2l6ZW9mKCppbmZvKSAqIGRldi0+ZHJ3X2luZm9fbGVuZ3RoLAorCQkJIERSTV9NRU1fQlVGUyk7CisJCWRldi0+ZHJ3X2luZm8gPSBpbmZvOworCQlkZXYtPmRyd19pbmZvX2xlbmd0aCA9IGluZm9fbGVuZ3RoOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZHJ3X2xvY2ssIGlycWZsYWdzKTsKKworCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoKGRybV9kcmF3X3QgX191c2VyICopZGF0YSwgZHJhdywgc2l6ZW9mKGRyYXcpKTsKKwogCXJldHVybiAwOwogfQogCi0vKiogTm8tb3AuICovCi1pbnQgZHJtX3JtZHJhdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisvKioKKyAqIEZyZWUgZHJhd2FibGUgSUQgYW5kIG1lbW9yeSB0byBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBpdC4KKyAqLworaW50IGRybV9ybWRyYXcoRFJNX0lPQ1RMX0FSR1MpCiB7Ci0JcmV0dXJuIDA7CQkvKiBOT09QICovCisJRFJNX0RFVklDRTsKKwlkcm1fZHJhd190IGRyYXc7CisgCWludCBpZCwgaWR4OworIAl1bnNpZ25lZCBpbnQgc2hpZnQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl1MzIgKmJpdGZpZWxkID0gZGV2LT5kcndfYml0ZmllbGQ7CisJdW5zaWduZWQgaW50IGJpdGZpZWxkX2xlbmd0aCA9IGRldi0+ZHJ3X2JpdGZpZWxkX2xlbmd0aDsKKwlkcm1fZHJhd2FibGVfaW5mb190ICoqaW5mbyA9IGRldi0+ZHJ3X2luZm87CisJdW5zaWduZWQgaW50IGluZm9fbGVuZ3RoID0gZGV2LT5kcndfaW5mb19sZW5ndGg7CisKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZHJhdywgKGRybV9kcmF3X3QgX191c2VyICopIGRhdGEsCisJCQkJIHNpemVvZihkcmF3KSk7CisKKwlpZCA9IGRyYXcuaGFuZGxlIC0gMTsKKwlpZHggPSBpZCAvICg4ICogc2l6ZW9mKCpiaXRmaWVsZCkpOworCXNoaWZ0ID0gaWQgJSAoOCAqIHNpemVvZigqYml0ZmllbGQpKTsKKworCWlmIChpZHggPCAwIHx8IGlkeCA+PSBiaXRmaWVsZF9sZW5ndGggfHwKKwkgICAgIShiaXRmaWVsZFtpZHhdICYgKDEgPDwgc2hpZnQpKSkgeworCQlEUk1fREVCVUcoIk5vIHN1Y2ggZHJhd2FibGUgJWRcbiIsIGRyYXcuaGFuZGxlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZHJ3X2xvY2ssIGlycWZsYWdzKTsKKworCWJpdGZpZWxkW2lkeF0gJj0gfigxIDw8IHNoaWZ0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZHJ3X2xvY2ssIGlycWZsYWdzKTsKKworCWlmIChpbmZvW2lkXSkgeworCQlkcm1fZnJlZShpbmZvW2lkXS0+cmVjdHMsIGluZm9baWRdLT5udW1fcmVjdHMgKgorCQkJIHNpemVvZihkcm1fY2xpcF9yZWN0X3QpLCBEUk1fTUVNX0JVRlMpOworCQlkcm1fZnJlZShpbmZvW2lkXSwgc2l6ZW9mKCoqaW5mbyksIERSTV9NRU1fQlVGUyk7CisJfQorCisJLyogQ2FuIHdlIHNocmluayB0aGUgYXJyYXlzPyAqLworCWlmIChpZHggPT0gYml0ZmllbGRfbGVuZ3RoIC0gMSkgeworCQl3aGlsZSAoaWR4ID49IDAgJiYgIWJpdGZpZWxkW2lkeF0pCisJCQktLWlkeDsKKworCQliaXRmaWVsZF9sZW5ndGggPSBpZHggKyAxOworCisJCWlmIChpZHggIT0gaWQgLyAoOCAqIHNpemVvZigqYml0ZmllbGQpKSkKKwkJCWJpdGZpZWxkID0gZHJtX2FsbG9jKGJpdGZpZWxkX2xlbmd0aCAqCisJCQkJCSAgICAgc2l6ZW9mKCpiaXRmaWVsZCksIERSTV9NRU1fQlVGUyk7CisKKwkJaWYgKCFiaXRmaWVsZCAmJiBiaXRmaWVsZF9sZW5ndGgpIHsKKwkJCWJpdGZpZWxkID0gZGV2LT5kcndfYml0ZmllbGQ7CisJCQliaXRmaWVsZF9sZW5ndGggPSBkZXYtPmRyd19iaXRmaWVsZF9sZW5ndGg7CisJCX0KKwl9CisKKwlpZiAoYml0ZmllbGQgIT0gZGV2LT5kcndfYml0ZmllbGQpIHsKKwkJaW5mb19sZW5ndGggPSA4ICogc2l6ZW9mKCpiaXRmaWVsZCkgKiBiaXRmaWVsZF9sZW5ndGg7CisKKwkJaW5mbyA9IGRybV9hbGxvYyhpbmZvX2xlbmd0aCAqIHNpemVvZigqaW5mbyksIERSTV9NRU1fQlVGUyk7CisKKwkJaWYgKCFpbmZvICYmIGluZm9fbGVuZ3RoKSB7CisJCQlpbmZvID0gZGV2LT5kcndfaW5mbzsKKwkJCWluZm9fbGVuZ3RoID0gZGV2LT5kcndfaW5mb19sZW5ndGg7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kcndfbG9jaywgaXJxZmxhZ3MpOworCisJCW1lbWNweShiaXRmaWVsZCwgZGV2LT5kcndfYml0ZmllbGQsIGJpdGZpZWxkX2xlbmd0aCAqCisJCSAgICAgICBzaXplb2YoKmJpdGZpZWxkKSk7CisJCWRybV9mcmVlKGRldi0+ZHJ3X2JpdGZpZWxkLCBzaXplb2YoKmJpdGZpZWxkKSAqCisJCQkgZGV2LT5kcndfYml0ZmllbGRfbGVuZ3RoLCBEUk1fTUVNX0JVRlMpOworCQlkZXYtPmRyd19iaXRmaWVsZCA9IGJpdGZpZWxkOworCQlkZXYtPmRyd19iaXRmaWVsZF9sZW5ndGggPSBiaXRmaWVsZF9sZW5ndGg7CisKKwkJaWYgKGluZm8gIT0gZGV2LT5kcndfaW5mbykgeworCQkJbWVtY3B5KGluZm8sIGRldi0+ZHJ3X2luZm8sIGluZm9fbGVuZ3RoICoKKwkJCSAgICAgICBzaXplb2YoKmluZm8pKTsKKwkJCWRybV9mcmVlKGRldi0+ZHJ3X2luZm8sIHNpemVvZigqaW5mbykgKgorCQkJCSBkZXYtPmRyd19pbmZvX2xlbmd0aCwgRFJNX01FTV9CVUZTKTsKKwkJCWRldi0+ZHJ3X2luZm8gPSBpbmZvOworCQkJZGV2LT5kcndfaW5mb19sZW5ndGggPSBpbmZvX2xlbmd0aDsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZHJ3X2xvY2ssIGlycWZsYWdzKTsKKwl9CisKKwlEUk1fREVCVUcoIiVkXG4iLCBkcmF3LmhhbmRsZSk7CisJcmV0dXJuIDA7CiB9CisKK2ludCBkcm1fdXBkYXRlX2RyYXdhYmxlX2luZm8oRFJNX0lPQ1RMX0FSR1MpIHsKKwlEUk1fREVWSUNFOworCWRybV91cGRhdGVfZHJhd190IHVwZGF0ZTsKKwl1bnNpZ25lZCBpbnQgaWQsIGlkeCwgc2hpZnQ7CisJdTMyICpiaXRmaWVsZCA9IGRldi0+ZHJ3X2JpdGZpZWxkOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsIGJpdGZpZWxkX2xlbmd0aCA9IGRldi0+ZHJ3X2JpdGZpZWxkX2xlbmd0aDsKKwlkcm1fZHJhd2FibGVfaW5mb190ICppbmZvOworCWRybV9jbGlwX3JlY3RfdCAqcmVjdHM7CisJaW50IGVycjsKKworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTCh1cGRhdGUsIChkcm1fdXBkYXRlX2RyYXdfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKHVwZGF0ZSkpOworCisJaWQgPSB1cGRhdGUuaGFuZGxlIC0gMTsKKwlpZHggPSBpZCAvICg4ICogc2l6ZW9mKCpiaXRmaWVsZCkpOworCXNoaWZ0ID0gaWQgJSAoOCAqIHNpemVvZigqYml0ZmllbGQpKTsKKworCWlmIChpZHggPCAwIHx8IGlkeCA+PSBiaXRmaWVsZF9sZW5ndGggfHwKKwkgICAgIShiaXRmaWVsZFtpZHhdICYgKDEgPDwgc2hpZnQpKSkgeworCQlEUk1fRVJST1IoIk5vIHN1Y2ggZHJhd2FibGUgJWRcbiIsIHVwZGF0ZS5oYW5kbGUpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCX0KKworCWluZm8gPSBkZXYtPmRyd19pbmZvW2lkXTsKKworCWlmICghaW5mbykgeworCQlpbmZvID0gZHJtX2NhbGxvYygxLCBzaXplb2YoZHJtX2RyYXdhYmxlX2luZm9fdCksIERSTV9NRU1fQlVGUyk7CisKKwkJaWYgKCFpbmZvKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBkcmF3YWJsZSBpbmZvIG1lbW9yeVxuIik7CisJCQlyZXR1cm4gRFJNX0VSUihFTk9NRU0pOworCQl9CisJfQorCisJc3dpdGNoICh1cGRhdGUudHlwZSkgeworCWNhc2UgRFJNX0RSQVdBQkxFX0NMSVBSRUNUUzoKKwkJaWYgKHVwZGF0ZS5udW0gIT0gaW5mby0+bnVtX3JlY3RzKSB7CisJCQlyZWN0cyA9IGRybV9hbGxvYyh1cGRhdGUubnVtICogc2l6ZW9mKGRybV9jbGlwX3JlY3RfdCksCisJCQkJCSBEUk1fTUVNX0JVRlMpOworCQl9IGVsc2UKKwkJCXJlY3RzID0gaW5mby0+cmVjdHM7CisKKwkJaWYgKHVwZGF0ZS5udW0gJiYgIXJlY3RzKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBjbGlwcmVjdCBtZW1vcnlcbiIpOworCQkJZXJyID0gRFJNX0VSUihFTk9NRU0pOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCWlmICh1cGRhdGUubnVtICYmIERSTV9DT1BZX0ZST01fVVNFUihyZWN0cywKKwkJCQkJCSAgICAgKGRybV9jbGlwX3JlY3RfdCBfX3VzZXIgKikKKwkJCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpdXBkYXRlLmRhdGEsCisJCQkJCQkgICAgIHVwZGF0ZS5udW0gKgorCQkJCQkJICAgICBzaXplb2YoKnJlY3RzKSkpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNvcHkgY2xpcHJlY3RzIGZyb20gdXNlcnNwYWNlXG4iKTsKKwkJCWVyciA9IERSTV9FUlIoRUZBVUxUKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kcndfbG9jaywgaXJxZmxhZ3MpOworCisJCWlmIChyZWN0cyAhPSBpbmZvLT5yZWN0cykgeworCQkJZHJtX2ZyZWUoaW5mby0+cmVjdHMsIGluZm8tPm51bV9yZWN0cyAqCisJCQkJIHNpemVvZihkcm1fY2xpcF9yZWN0X3QpLCBEUk1fTUVNX0JVRlMpOworCQl9CisKKwkJaW5mby0+cmVjdHMgPSByZWN0czsKKwkJaW5mby0+bnVtX3JlY3RzID0gdXBkYXRlLm51bTsKKwkJZGV2LT5kcndfaW5mb1tpZF0gPSBpbmZvOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZHJ3X2xvY2ssIGlycWZsYWdzKTsKKworCQlEUk1fREVCVUcoIlVwZGF0ZWQgJWQgY2xpcHJlY3RzIGZvciBkcmF3YWJsZSAlZFxuIiwKKwkJCSAgaW5mby0+bnVtX3JlY3RzLCBpZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiSW52YWxpZCB1cGRhdGUgdHlwZSAlZFxuIiwgdXBkYXRlLnR5cGUpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCX0KKworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAoIWRldi0+ZHJ3X2luZm9baWRdKQorCQlkcm1fZnJlZShpbmZvLCBzaXplb2YoKmluZm8pLCBEUk1fTUVNX0JVRlMpOworCWVsc2UgaWYgKHJlY3RzICE9IGRldi0+ZHJ3X2luZm9baWRdLT5yZWN0cykKKwkJZHJtX2ZyZWUocmVjdHMsIHVwZGF0ZS5udW0gKgorCQkJIHNpemVvZihkcm1fY2xpcF9yZWN0X3QpLCBEUk1fTUVNX0JVRlMpOworCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBkcmF3YWJsZSBzcGlubG9jayEKKyAqLworZHJtX2RyYXdhYmxlX2luZm9fdCAqZHJtX2dldF9kcmF3YWJsZV9pbmZvKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1fZHJhd2FibGVfdCBpZCkgeworCXUzMiAqYml0ZmllbGQgPSBkZXYtPmRyd19iaXRmaWVsZDsKKwl1bnNpZ25lZCBpbnQgaWR4LCBzaGlmdDsKKworCWlkLS07CisJaWR4ID0gaWQgLyAoOCAqIHNpemVvZigqYml0ZmllbGQpKTsKKwlzaGlmdCA9IGlkICUgKDggKiBzaXplb2YoKmJpdGZpZWxkKSk7CisKKwlpZiAoaWR4IDwgMCB8fCBpZHggPj0gZGV2LT5kcndfYml0ZmllbGRfbGVuZ3RoIHx8CisJICAgICEoYml0ZmllbGRbaWR4XSAmICgxIDw8IHNoaWZ0KSkpIHsKKwkJRFJNX0RFQlVHKCJObyBzdWNoIGRyYXdhYmxlICVkXG4iLCBpZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBkZXYtPmRyd19pbmZvW2lkXTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dldF9kcmF3YWJsZV9pbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKaW5kZXggYjM2NmM1Yi4uYTcwYWYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKQEAgLTExNiw2ICsxMTYsOCBAQAogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1NHX0ZSRUUpXSA9IHtkcm1fc2dfZnJlZSwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZfSwKIAogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1dBSVRfVkJMQU5LKV0gPSB7ZHJtX3dhaXRfdmJsYW5rLCAwfSwKKworCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1VQREFURV9EUkFXKV0gPSB7ZHJtX3VwZGF0ZV9kcmF3YWJsZV9pbmZvLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFl9LAogfTsKIAogI2RlZmluZSBEUklWRVJfSU9DVExfQ09VTlQJQVJSQVlfU0laRSggZHJtX2lvY3RscyApCkBAIC0xNTEsNiArMTUzLDE4IEBACiAJaWYgKGRldi0+aXJxX2VuYWJsZWQpCiAJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CiAKKwkvKiBGcmVlIGRyYXdhYmxlIGluZm9ybWF0aW9uIG1lbW9yeSAqLworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmRyd19iaXRmaWVsZF9sZW5ndGggLyBzaXplb2YoKmRldi0+ZHJ3X2JpdGZpZWxkKTsKKwkgICAgIGkrKykgeworCQlkcm1fZHJhd2FibGVfaW5mb190ICppbmZvID0gZHJtX2dldF9kcmF3YWJsZV9pbmZvKGRldiwgaSk7CisKKwkJaWYgKGluZm8pIHsKKwkJCWRybV9mcmVlKGluZm8tPnJlY3RzLCBpbmZvLT5udW1fcmVjdHMgKgorCQkJCSBzaXplb2YoZHJtX2NsaXBfcmVjdF90KSwgRFJNX01FTV9CVUZTKTsKKwkJCWRybV9mcmVlKGluZm8sIHNpemVvZigqaW5mbyksIERSTV9NRU1fQlVGUyk7CisJCX0KKwl9CisKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJZGVsX3RpbWVyKCZkZXYtPnRpbWVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1faW9jMzIuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2lvYzMyLmMKaW5kZXggZDRmODc0NS4uZmFmZWIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1faW9jMzIuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9pb2MzMi5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJCSAgJnZlcnNpb24tPmRlc2MpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCURSTV9JT0NUTF9WRVJTSU9OLCAodW5zaWduZWQgbG9uZyl2ZXJzaW9uKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCQkgICZ1LT51bmlxdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCURSTV9JT0NUTF9HRVRfVU5JUVVFLCAodW5zaWduZWQgbG9uZyl1KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCQkgICZ1LT51bmlxdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9TRVRfVU5JUVVFLCAodW5zaWduZWQgbG9uZyl1KTsKIH0KIApAQCAtMjAzLDcgKzIwMyw3IEBACiAJaWYgKF9fcHV0X3VzZXIoaWR4LCAmbWFwLT5vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCURSTV9JT0NUTF9HRVRfTUFQLCAodW5zaWduZWQgbG9uZyltYXApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yNDQsNyArMjQ0LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihtMzIuZmxhZ3MsICZtYXAtPmZsYWdzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQlEUk1fSU9DVExfQUREX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjgyLDcgKzI4Miw3IEBACiAJaWYgKF9fcHV0X3VzZXIoKHZvaWQgKikodW5zaWduZWQgbG9uZyloYW5kbGUsICZtYXAtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQkgRFJNX0lPQ1RMX1JNX01BUCwgKHVuc2lnbmVkIGxvbmcpbWFwKTsKIH0KIApAQCAtMzEyLDcgKzMxMiw3IEBACiAJaWYgKF9fcHV0X3VzZXIoaWR4LCAmY2xpZW50LT5pZHgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCURSTV9JT0NUTF9HRVRfQ0xJRU5ULCAodW5zaWduZWQgbG9uZyljbGllbnQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0zNDksNyArMzQ5LDcgQEAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHN0YXRzLCBzaXplb2YoKnN0YXRzKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJRFJNX0lPQ1RMX0dFVF9TVEFUUywgKHVuc2lnbmVkIGxvbmcpc3RhdHMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0zOTMsNyArMzkzLDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihhZ3Bfc3RhcnQsICZidWYtPmFncF9zdGFydCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJRFJNX0lPQ1RMX0FERF9CVUZTLCAodW5zaWduZWQgbG9uZylidWYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC00MjUsNyArNDI1LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihiMzIuaGlnaF9tYXJrLCAmYnVmLT5oaWdoX21hcmspKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9NQVJLX0JVRlMsICh1bnNpZ25lZCBsb25nKWJ1Zik7CiB9CiAKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGxpc3QsICZyZXF1ZXN0LT5saXN0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQlEUk1fSU9DVExfSU5GT19CVUZTLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtNTI5LDcgKzUyOSw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIobGlzdCwgJnJlcXVlc3QtPmxpc3QpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCURSTV9JT0NUTF9NQVBfQlVGUywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTU3Niw3ICs1NzYsNyBAQAogCQkJICAmcmVxdWVzdC0+bGlzdCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQkgRFJNX0lPQ1RMX0ZSRUVfQlVGUywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKQEAgLTYwMyw3ICs2MDMsNyBAQAogCQkJICAmcmVxdWVzdC0+aGFuZGxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfU0VUX1NBUkVBX0NUWCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKQEAgLTYyNiw3ICs2MjYsNyBAQAogCWlmIChfX3B1dF91c2VyKGN0eF9pZCwgJnJlcXVlc3QtPmN0eF9pZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJRFJNX0lPQ1RMX0dFVF9TQVJFQV9DVFgsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC02NjIsNyArNjYyLDcgQEAKIAkJCSAgJnJlcy0+Y29udGV4dHMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCURSTV9JT0NUTF9SRVNfQ1RYLCAodW5zaWduZWQgbG9uZylyZXMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC03MTYsNyArNzE2LDcgQEAKIAkJCSAgJmQtPnJlcXVlc3Rfc2l6ZXMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCURSTV9JT0NUTF9ETUEsICh1bnNpZ25lZCBsb25nKWQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC03NDksNyArNzQ5LDcgQEAKIAlpZiAocHV0X3VzZXIobTMyLm1vZGUsICZtb2RlLT5tb2RlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfQUdQX0VOQUJMRSwgKHVuc2lnbmVkIGxvbmcpbW9kZSk7CiB9CiAKQEAgLTc3OSw3ICs3NzksNyBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgaW5mbywgc2l6ZW9mKCppbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJRFJNX0lPQ1RMX0FHUF9JTkZPLCAodW5zaWduZWQgbG9uZylpbmZvKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtODI1LDcgKzgyNSw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIocmVxMzIudHlwZSwgJnJlcXVlc3QtPnR5cGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCURSTV9JT0NUTF9BR1BfQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC04MzMsNyArODMzLDcgQEAKIAlpZiAoX19nZXRfdXNlcihyZXEzMi5oYW5kbGUsICZyZXF1ZXN0LT5oYW5kbGUpCiAJICAgIHx8IF9fZ2V0X3VzZXIocmVxMzIucGh5c2ljYWwsICZyZXF1ZXN0LT5waHlzaWNhbCkKIAkgICAgfHwgY29weV90b191c2VyKGFyZ3AsICZyZXEzMiwgc2l6ZW9mKHJlcTMyKSkpIHsKLQkJZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCQlkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSAgRFJNX0lPQ1RMX0FHUF9GUkVFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtODU0LDcgKzg1NCw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoaGFuZGxlLCAmcmVxdWVzdC0+aGFuZGxlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfQUdQX0ZSRUUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCkBAIC04NzksNyArODc5LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihyZXEzMi5vZmZzZXQsICZyZXF1ZXN0LT5vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9BR1BfQklORCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKQEAgLTg5Niw3ICs4OTYsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKGhhbmRsZSwgJnJlcXVlc3QtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQkgRFJNX0lPQ1RMX0FHUF9VTkJJTkQsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogI2VuZGlmCQkJCS8qIF9fT1NfSEFTX0FHUCAqLwpAQCAtOTIxLDcgKzkyMSw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoeCwgJnJlcXVlc3QtPnNpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCURSTV9JT0NUTF9TR19BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTk0OCw3ICs5NDgsNyBAQAogCSAgICB8fCBfX3B1dF91c2VyKHggPDwgUEFHRV9TSElGVCwgJnJlcXVlc3QtPmhhbmRsZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQkgRFJNX0lPQ1RMX1NHX0ZSRUUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCkBAIC05ODgsNyArOTg4LDcgQEAKIAkgICAgfHwgX19wdXRfdXNlcihyZXEzMi5yZXF1ZXN0LnNpZ25hbCwgJnJlcXVlc3QtPnJlcXVlc3Quc2lnbmFsKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJZXJyID0gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQlEUk1fSU9DVExfV0FJVF9WQkxBTkssICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0xMDYwLDcgKzEwNjAsNyBAQAogCWlmIChmbiAhPSBOVUxMKQogCQlyZXQgPSAoKmZuKSAoZmlscCwgY21kLCBhcmcpOwogCWVsc2UKLQkJcmV0ID0gZHJtX2lvY3RsKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CisJCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMKaW5kZXggNDU1M2EzYS4uOWQwMGM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMKQEAgLTEyMSw2ICsxMjEsNyBAQAogCQlzcGluX2xvY2tfaW5pdCgmZGV2LT52YmxfbG9jayk7CiAKIAkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJsX3NpZ3MuaGVhZCk7CisJCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZibF9zaWdzMi5oZWFkKTsKIAogCQlkZXYtPnZibF9wZW5kaW5nID0gMDsKIAl9CkBAIC0xNzUsNiArMTc2LDggQEAKIAogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCisJZGV2LT5sb2NrZWRfdGFza2xldF9mdW5jID0gTlVMTDsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNDcsMTAgKzI1MCw3IEBACiAJZHJtX3dhaXRfdmJsYW5rX3QgdmJsd2FpdDsKIAlzdHJ1Y3QgdGltZXZhbCBub3c7CiAJaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgaW50IGZsYWdzOwotCi0JaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0lSUV9WQkwpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MsIHNlcTsKIAogCWlmICghZGV2LT5pcnEpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjU4LDkgKzI1OCwyNiBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmdmJsd2FpdCwgYXJncCwgc2l6ZW9mKHZibHdhaXQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlzd2l0Y2ggKHZibHdhaXQucmVxdWVzdC50eXBlICYgfl9EUk1fVkJMQU5LX0ZMQUdTX01BU0spIHsKKwlpZiAodmJsd2FpdC5yZXF1ZXN0LnR5cGUgJgorCSAgICB+KF9EUk1fVkJMQU5LX1RZUEVTX01BU0sgfCBfRFJNX1ZCTEFOS19GTEFHU19NQVNLKSkgeworCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIHR5cGUgdmFsdWUgMHgleCwgc3VwcG9ydGVkIG1hc2sgMHgleFxuIiwKKwkJCSAgdmJsd2FpdC5yZXF1ZXN0LnR5cGUsCisJCQkgIChfRFJNX1ZCTEFOS19UWVBFU19NQVNLIHwgX0RSTV9WQkxBTktfRkxBR1NfTUFTSykpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmbGFncyA9IHZibHdhaXQucmVxdWVzdC50eXBlICYgX0RSTV9WQkxBTktfRkxBR1NfTUFTSzsKKworCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIChmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkgPworCQkJCSAgICBEUklWRVJfSVJRX1ZCTDIgOiBEUklWRVJfSVJRX1ZCTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJc2VxID0gYXRvbWljX3JlYWQoKGZsYWdzICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKSA/ICZkZXYtPnZibF9yZWNlaXZlZDIKKwkJCSAgOiAmZGV2LT52YmxfcmVjZWl2ZWQpOworCisJc3dpdGNoICh2Ymx3YWl0LnJlcXVlc3QudHlwZSAmIF9EUk1fVkJMQU5LX1RZUEVTX01BU0spIHsKIAljYXNlIF9EUk1fVkJMQU5LX1JFTEFUSVZFOgotCQl2Ymx3YWl0LnJlcXVlc3Quc2VxdWVuY2UgKz0gYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKTsKKwkJdmJsd2FpdC5yZXF1ZXN0LnNlcXVlbmNlICs9IHNlcTsKIAkJdmJsd2FpdC5yZXF1ZXN0LnR5cGUgJj0gfl9EUk1fVkJMQU5LX1JFTEFUSVZFOwogCWNhc2UgX0RSTV9WQkxBTktfQUJTT0xVVEU6CiAJCWJyZWFrOwpAQCAtMjY4LDI2ICsyODUsMzAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZmxhZ3MgPSB2Ymx3YWl0LnJlcXVlc3QudHlwZSAmIF9EUk1fVkJMQU5LX0ZMQUdTX01BU0s7CisJaWYgKChmbGFncyAmIF9EUk1fVkJMQU5LX05FWFRPTk1JU1MpICYmCisJICAgIChzZXEgLSB2Ymx3YWl0LnJlcXVlc3Quc2VxdWVuY2UpIDw9ICgxPDwyMykpIHsKKwkJdmJsd2FpdC5yZXF1ZXN0LnNlcXVlbmNlID0gc2VxICsgMTsKKwl9CiAKIAlpZiAoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TSUdOQUwpIHsKIAkJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwkJZHJtX3ZibF9zaWdfdCAqdmJsX3NpZ3MgPSAoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpCisJCQkJICAgICAgPyAmZGV2LT52Ymxfc2lnczIgOiAmZGV2LT52Ymxfc2lnczsKIAkJZHJtX3ZibF9zaWdfdCAqdmJsX3NpZzsKIAotCQl2Ymx3YWl0LnJlcGx5LnNlcXVlbmNlID0gYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogCiAJCS8qIENoZWNrIGlmIHRoaXMgdGFzayBoYXMgYWxyZWFkeSBzY2hlZHVsZWQgdGhlIHNhbWUgc2lnbmFsCiAJCSAqIGZvciB0aGUgc2FtZSB2Ymxhbmsgc2VxdWVuY2UgbnVtYmVyOyBub3RoaW5nIHRvIGJlIGRvbmUgaW4KIAkJICogdGhhdCBjYXNlCiAJCSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZibF9zaWcsICZkZXYtPnZibF9zaWdzLmhlYWQsIGhlYWQpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2Ymxfc2lnLCAmdmJsX3NpZ3MtPmhlYWQsIGhlYWQpIHsKIAkJCWlmICh2Ymxfc2lnLT5zZXF1ZW5jZSA9PSB2Ymx3YWl0LnJlcXVlc3Quc2VxdWVuY2UKIAkJCSAgICAmJiB2Ymxfc2lnLT5pbmZvLnNpX3NpZ25vID09IHZibHdhaXQucmVxdWVzdC5zaWduYWwKIAkJCSAgICAmJiB2Ymxfc2lnLT50YXNrID09IGN1cnJlbnQpIHsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLAogCQkJCQkJICAgICAgIGlycWZsYWdzKTsKKwkJCQl2Ymx3YWl0LnJlcGx5LnNlcXVlbmNlID0gc2VxOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJfQpAQCAtMzE1LDExICszMzYsMTYgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogCi0JCWxpc3RfYWRkX3RhaWwoKHN0cnVjdCBsaXN0X2hlYWQgKil2Ymxfc2lnLCAmZGV2LT52Ymxfc2lncy5oZWFkKTsKKwkJbGlzdF9hZGRfdGFpbCgoc3RydWN0IGxpc3RfaGVhZCAqKXZibF9zaWcsICZ2Ymxfc2lncy0+aGVhZCk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCisJCXZibHdhaXQucmVwbHkuc2VxdWVuY2UgPSBzZXE7CiAJfSBlbHNlIHsKLQkJaWYgKGRldi0+ZHJpdmVyLT52Ymxhbmtfd2FpdCkKKwkJaWYgKGZsYWdzICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKSB7CisJCQlpZiAoZGV2LT5kcml2ZXItPnZibGFua193YWl0MikKKwkJCQlyZXQgPSBkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQyKGRldiwgJnZibHdhaXQucmVxdWVzdC5zZXF1ZW5jZSk7CisJCX0gZWxzZSBpZiAoZGV2LT5kcml2ZXItPnZibGFua193YWl0KQogCQkJcmV0ID0KIAkJCSAgICBkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQoZGV2LAogCQkJCQkJICAgICAmdmJsd2FpdC5yZXF1ZXN0LnNlcXVlbmNlKTsKQEAgLTM0NywyNSArMzczLDMyIEBACiAgKi8KIHZvaWQgZHJtX3ZibF9zZW5kX3NpZ25hbHMoZHJtX2RldmljZV90ICogZGV2KQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICp0bXA7Ci0JZHJtX3ZibF9zaWdfdCAqdmJsX3NpZzsKLQl1bnNpZ25lZCBpbnQgdmJsX3NlcSA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBmbGFncyk7CiAKLQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgdG1wLCAmZGV2LT52Ymxfc2lncy5oZWFkKSB7Ci0JCXZibF9zaWcgPSBsaXN0X2VudHJ5KGxpc3QsIGRybV92Ymxfc2lnX3QsIGhlYWQpOwotCQlpZiAoKHZibF9zZXEgLSB2Ymxfc2lnLT5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSB7Ci0JCQl2Ymxfc2lnLT5pbmZvLnNpX2NvZGUgPSB2Ymxfc2VxOwotCQkJc2VuZF9zaWdfaW5mbyh2Ymxfc2lnLT5pbmZvLnNpX3NpZ25vLCAmdmJsX3NpZy0+aW5mbywKLQkJCQkgICAgICB2Ymxfc2lnLT50YXNrKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICp0bXA7CisJCWRybV92Ymxfc2lnX3QgKnZibF9zaWc7CisJCWRybV92Ymxfc2lnX3QgKnZibF9zaWdzID0gaSA/ICZkZXYtPnZibF9zaWdzMiA6ICZkZXYtPnZibF9zaWdzOworCQl1bnNpZ25lZCBpbnQgdmJsX3NlcSA9IGF0b21pY19yZWFkKGkgPyAmZGV2LT52YmxfcmVjZWl2ZWQyIDoKKwkJCQkJCSAgICZkZXYtPnZibF9yZWNlaXZlZCk7CiAKLQkJCWxpc3RfZGVsKGxpc3QpOworCQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgdG1wLCAmdmJsX3NpZ3MtPmhlYWQpIHsKKwkJCXZibF9zaWcgPSBsaXN0X2VudHJ5KGxpc3QsIGRybV92Ymxfc2lnX3QsIGhlYWQpOworCQkJaWYgKCh2Ymxfc2VxIC0gdmJsX3NpZy0+c2VxdWVuY2UpIDw9ICgxIDw8IDIzKSkgeworCQkJCXZibF9zaWctPmluZm8uc2lfY29kZSA9IHZibF9zZXE7CisJCQkJc2VuZF9zaWdfaW5mbyh2Ymxfc2lnLT5pbmZvLnNpX3NpZ25vLAorCQkJCQkgICAgICAmdmJsX3NpZy0+aW5mbywgdmJsX3NpZy0+dGFzayk7CiAKLQkJCWRybV9mcmVlKHZibF9zaWcsIHNpemVvZigqdmJsX3NpZyksIERSTV9NRU1fRFJJVkVSKTsKKwkJCQlsaXN0X2RlbChsaXN0KTsKIAotCQkJZGV2LT52YmxfcGVuZGluZy0tOworCQkJCWRybV9mcmVlKHZibF9zaWcsIHNpemVvZigqdmJsX3NpZyksCisJCQkJCSBEUk1fTUVNX0RSSVZFUik7CisKKwkJCQlkZXYtPnZibF9wZW5kaW5nLS07CisJCQl9CiAJCX0KIAl9CiAKQEAgLTM3MywzICs0MDYsNzcgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChkcm1fdmJsX3NlbmRfc2lnbmFscyk7CisKKy8qKgorICogVGFza2xldCB3cmFwcGVyIGZ1bmN0aW9uLgorICoKKyAqIFxwYXJhbSBkYXRhIERSTSBkZXZpY2UgaW4gZGlzZ3Vpc2UuCisgKgorICogQXR0ZW1wdHMgdG8gZ3JhYiB0aGUgSFcgbG9jayBhbmQgY2FsbHMgdGhlIGRyaXZlciBjYWxsYmFjayBvbiBzdWNjZXNzLiBPbgorICogZmFpbHVyZSwgbGVhdmUgdGhlIGxvY2sgbWFya2VkIGFzIGNvbnRlbmRlZCBzbyB0aGUgY2FsbGJhY2sgY2FuIGJlIGNhbGxlZAorICogZnJvbSBkcm1fdW5sb2NrKCkuCisgKi8KK3N0YXRpYyB2b2lkIGRybV9sb2NrZWRfdGFza2xldF9mdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlkcm1fZGV2aWNlX3QgKmRldiA9IChkcm1fZGV2aWNlX3QqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnRhc2tsZXRfbG9jaywgaXJxZmxhZ3MpOworCisJaWYgKCFkZXYtPmxvY2tlZF90YXNrbGV0X2Z1bmMgfHwKKwkgICAgIWRybV9sb2NrX3Rha2UoJmRldi0+bG9jay5od19sb2NrLT5sb2NrLAorCQkJICAgRFJNX0tFUk5FTF9DT05URVhUKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnRhc2tsZXRfbG9jaywgaXJxZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJZGV2LT5sb2NrLmxvY2tfdGltZSA9IGppZmZpZXM7CisJYXRvbWljX2luYygmZGV2LT5jb3VudHNbX0RSTV9TVEFUX0xPQ0tTXSk7CisKKwlkZXYtPmxvY2tlZF90YXNrbGV0X2Z1bmMoZGV2KTsKKworCWRybV9sb2NrX2ZyZWUoZGV2LCAmZGV2LT5sb2NrLmh3X2xvY2stPmxvY2ssCisJCSAgICAgIERSTV9LRVJORUxfQ09OVEVYVCk7CisKKwlkZXYtPmxvY2tlZF90YXNrbGV0X2Z1bmMgPSBOVUxMOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT50YXNrbGV0X2xvY2ssIGlycWZsYWdzKTsKK30KKworLyoqCisgKiBTY2hlZHVsZSBhIHRhc2tsZXQgdG8gY2FsbCBiYWNrIGEgZHJpdmVyIGhvb2sgd2l0aCB0aGUgSFcgbG9jayBoZWxkLgorICoKKyAqIFxwYXJhbSBkZXYgRFJNIGRldmljZS4KKyAqIFxwYXJhbSBmdW5jIERyaXZlciBjYWxsYmFjay4KKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIGZvciB0cmlnZ2VyaW5nIGFjdGlvbnMgdGhhdCByZXF1aXJlIHRoZSBIVyBsb2NrIGZyb20gYW4KKyAqIGludGVycnVwdCBoYW5kbGVyLiBUaGUgbG9jayB3aWxsIGJlIGdyYWJiZWQgQVNBUCBhZnRlciB0aGUgaW50ZXJydXB0IGhhbmRsZXIKKyAqIGNvbXBsZXRlcy4gTm90ZSB0aGF0IHRoZSBjYWxsYmFjayBtYXkgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IG9yIHByb2Nlc3MKKyAqIGNvbnRleHQsIGl0IG11c3Qgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IHRoaXMuIEFsc28sIHRoZSBIVyBsb2NrIHdpbGwKKyAqIGJlIGhlbGQgd2l0aCB0aGUga2VybmVsIGNvbnRleHQgb3IgYW55IGNsaWVudCBjb250ZXh0LgorICovCit2b2lkIGRybV9sb2NrZWRfdGFza2xldChkcm1fZGV2aWNlX3QgKmRldiwgdm9pZCAoKmZ1bmMpKGRybV9kZXZpY2VfdCopKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJc3RhdGljIERFQ0xBUkVfVEFTS0xFVChkcm1fdGFza2xldCwgZHJtX2xvY2tlZF90YXNrbGV0X2Z1bmMsIDApOworCisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfSVJRKSB8fAorCSAgICB0ZXN0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVELCAmZHJtX3Rhc2tsZXQuc3RhdGUpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT50YXNrbGV0X2xvY2ssIGlycWZsYWdzKTsKKworCWlmIChkZXYtPmxvY2tlZF90YXNrbGV0X2Z1bmMpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT50YXNrbGV0X2xvY2ssIGlycWZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWRldi0+bG9ja2VkX3Rhc2tsZXRfZnVuYyA9IGZ1bmM7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnRhc2tsZXRfbG9jaywgaXJxZmxhZ3MpOworCisJZHJtX3Rhc2tsZXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKKworCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmRybV90YXNrbGV0KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2xvY2tlZF90YXNrbGV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2xvY2suYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2xvY2suYwppbmRleCBmOWU0NTMwLi5lOTk5M2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9sb2NrLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fbG9jay5jCkBAIC0xNTUsNiArMTU1LDcgQEAKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZsb2NrLCAoZHJtX2xvY2tfdCBfX3VzZXIgKikgYXJnLCBzaXplb2YobG9jaykpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTE2NSwxMyArMTY2LDIzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnRhc2tsZXRfbG9jaywgaXJxZmxhZ3MpOworCisJaWYgKGRldi0+bG9ja2VkX3Rhc2tsZXRfZnVuYykgeworCQlkZXYtPmxvY2tlZF90YXNrbGV0X2Z1bmMoZGV2KTsKKworCQlkZXYtPmxvY2tlZF90YXNrbGV0X2Z1bmMgPSBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dGFza2xldF9sb2NrLCBpcnFmbGFncyk7CisKIAlhdG9taWNfaW5jKCZkZXYtPmNvdW50c1tfRFJNX1NUQVRfVU5MT0NLU10pOwogCiAJLyoga2VybmVsX2NvbnRleHRfc3dpdGNoIGlzbid0IHVzZWQgYnkgYW55IG9mIHRoZSB4ODYgZHJtCiAJICogbW9kdWxlcyBidXQgaXMgcmVxdWlyZWQgYnkgdGhlIFNwYXJjIGRyaXZlci4KIAkgKi8KIAlpZiAoZGV2LT5kcml2ZXItPmtlcm5lbF9jb250ZXh0X3N3aXRjaF91bmxvY2spCi0JCWRldi0+ZHJpdmVyLT5rZXJuZWxfY29udGV4dF9zd2l0Y2hfdW5sb2NrKGRldiwgJmxvY2spOworCQlkZXYtPmRyaXZlci0+a2VybmVsX2NvbnRleHRfc3dpdGNoX3VubG9jayhkZXYpOwogCWVsc2UgewogCQlkcm1fbG9ja190cmFuc2ZlcihkZXYsICZkZXYtPmxvY2suaHdfbG9jay0+bG9jaywKIAkJCQkgIERSTV9LRVJORUxfQ09OVEVYVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMKaW5kZXggN2IxZDRlOC4uMTIwZDEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N0dWIuYwpAQCAtNjAsNiArNjAsOCBAQAogCWludCByZXRjb2RlOwogCiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+Y291bnRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+ZHJ3X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXYtPnRhc2tsZXRfbG9jayk7CiAJaW5pdF90aW1lcigmZGV2LT50aW1lcik7CiAJbXV0ZXhfaW5pdCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCW11dGV4X2luaXQoJmRldi0+Y3R4bGlzdF9tdXRleCk7CkBAIC0yMDksMTQgKzIxMSwxNiBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2cxOwogCiAJaWYgKChyZXQgPSBkcm1fZmlsbF9pbl9kZXYoZGV2LCBwZGV2LCBlbnQsIGRyaXZlcikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRFJNOiBGaWxsX2luX2RldiBmYWlsZWQuXG4iKTsKLQkJZ290byBlcnJfZzE7CisJCWdvdG8gZXJyX2cyOwogCX0KIAlpZiAoKHJldCA9IGRybV9nZXRfaGVhZChkZXYsICZkZXYtPnByaW1hcnkpKSkKLQkJZ290byBlcnJfZzE7CisJCWdvdG8gZXJyX2cyOwogCQogCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZFxuIiwKIAkJIGRyaXZlci0+bmFtZSwgZHJpdmVyLT5tYWpvciwgZHJpdmVyLT5taW5vciwgZHJpdmVyLT5wYXRjaGxldmVsLApAQCAtMjI0LDcgKzIyOCw5IEBACiAKIAlyZXR1cm4gMDsKIAotICAgICAgZXJyX2cxOgorZXJyX2cyOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK2Vycl9nMToKIAlkcm1fZnJlZShkZXYsIHNpemVvZigqZGV2KSwgRFJNX01FTV9TVFVCKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggYmE0YjhkZS4uY2M4ZTJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3lzZnMuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zeXNmcy5jCkBAIC00NSw4ICs0NSw4IEBACiAJaW50IGVycjsKIAogCWNsYXNzID0gY2xhc3NfY3JlYXRlKG93bmVyLCBuYW1lKTsKLQlpZiAoIWNsYXNzKSB7Ci0JCWVyciA9IC1FTk9NRU07CisJaWYgKElTX0VSUihjbGFzcykpIHsKKwkJZXJyID0gUFRSX0VSUihjbGFzcyk7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKQEAgLTExMyw4ICsxMTMsOCBAQAogCQkJCQlNS0RFVihEUk1fTUFKT1IsIGhlYWQtPm1pbm9yKSwKIAkJCQkJJihoZWFkLT5kZXYtPnBkZXYpLT5kZXYsCiAJCQkJCSJjYXJkJWQiLCBoZWFkLT5taW5vcik7Ci0JaWYgKCFjbGFzc19kZXYpIHsKLQkJZXJyID0gLUVOT01FTTsKKwlpZiAoSVNfRVJSKGNsYXNzX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihjbGFzc19kZXYpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYwppbmRleCBhZTI2OTE5Li5iOWNmYzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3ZtLmMKQEAgLTQ3Myw2ICs0NzMsMjIgQEAKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwogCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pICYmCisJICAgIChkbWEtPmZsYWdzICYgX0RSTV9ETUFfVVNFX1BDSV9STykpIHsKKwkJdm1hLT52bV9mbGFncyAmPSB+KFZNX1dSSVRFIHwgVk1fTUFZV1JJVEUpOworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKwkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJj0gfl9QQUdFX1JXOworI2Vsc2UKKwkJLyogWWUgZ2FkcyB0aGlzIGlzIHVnbHkuICBXaXRoIG1vcmUgdGhvdWdodAorCQkgICB3ZSBjb3VsZCBtb3ZlIHRoaXMgdXAgaGlnaGVyIGFuZCB1c2UKKwkJICAgYHByb3RlY3Rpb25fbWFwJyBpbnN0ZWFkLiAgKi8KKwkJdm1hLT52bV9wYWdlX3Byb3QgPQorCQkgICAgX19wZ3Byb3QocHRlX3ZhbAorCQkJICAgICAocHRlX3dycHJvdGVjdAorCQkJICAgICAgKF9fcHRlKHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpKSkpKTsKKyNlbmRpZgorCX0KKwogCXZtYS0+dm1fb3BzID0gJmRybV92bV9kbWFfb3BzOwogCiAJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsJLyogRG9uJ3Qgc3dhcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RtYS5jIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RtYS5jCmluZGV4IGZiNzkxM2YuLjkzNTRjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZG1hLmMKQEAgLTE2Miw2ICsxNjIsNyBAQAogCiAJZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9IGRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGU7CiAKKwlkZXZfcHJpdi0+Y3BwID0gaW5pdC0+Y3BwOwogCWRldl9wcml2LT5iYWNrX29mZnNldCA9IGluaXQtPmJhY2tfb2Zmc2V0OwogCWRldl9wcml2LT5mcm9udF9vZmZzZXQgPSBpbml0LT5mcm9udF9vZmZzZXQ7CiAJZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9IDA7CkBAIC03ODIsNiArNzgzLDcgQEAKIAlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0RFU1RST1lfSEVBUCldID0geyBpOTE1X21lbV9kZXN0cm95X2hlYXAsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSB9LAogCVtEUk1fSU9DVExfTlIoRFJNX0k5MTVfU0VUX1ZCTEFOS19QSVBFKV0gPSB7IGk5MTVfdmJsYW5rX3BpcGVfc2V0LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkgfSwKIAlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X0dFVF9WQkxBTktfUElQRSldID0geyBpOTE1X3ZibGFua19waXBlX2dldCwgRFJNX0FVVEggfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9JOTE1X1ZCTEFOS19TV0FQKV0gPSB7aTkxNV92Ymxhbmtfc3dhcCwgRFJNX0FVVEh9LAogfTsKIAogaW50IGk5MTVfbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUoaTkxNV9pb2N0bHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RybS5oIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RybS5oCmluZGV4IDZhZjgzZTYuLjk2YTQ2ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcm0uaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJtLmgKQEAgLTEwNCw2ICsxMDQsMTUgQEAKIAl1bnNpZ25lZCBpbnQgZGVwdGhfdGlsZWQ7CiAJdW5zaWduZWQgaW50IHJvdGF0ZWRfdGlsZWQ7CiAJdW5zaWduZWQgaW50IHJvdGF0ZWQyX3RpbGVkOworCisJaW50IHBpcGVBX3g7CisJaW50IHBpcGVBX3k7CisJaW50IHBpcGVBX3c7CisJaW50IHBpcGVBX2g7CisJaW50IHBpcGVCX3g7CisJaW50IHBpcGVCX3k7CisJaW50IHBpcGVCX3c7CisJaW50IHBpcGVCX2g7CiB9IGRybV9pOTE1X3NhcmVhX3Q7CiAKIC8qIEZsYWdzIGZvciBwZXJmX2JveGVzCkBAIC0xMzIsNiArMTQxLDcgQEAKICNkZWZpbmUgRFJNX0k5MTVfREVTVFJPWV9IRUFQCTB4MGMKICNkZWZpbmUgRFJNX0k5MTVfU0VUX1ZCTEFOS19QSVBFCTB4MGQKICNkZWZpbmUgRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFCTB4MGUKKyNkZWZpbmUgRFJNX0k5MTVfVkJMQU5LX1NXQVAJMHgwZgogCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0lOSVQJCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9JTklULCBkcm1faTkxNV9pbml0X3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0ZMVVNICQlEUk1fSU8gKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfRkxVU0gpCkBAIC0xNDgsNiArMTU4LDcgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfREVTVFJPWV9IRUFQCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9ERVNUUk9ZX0hFQVAsIGRybV9pOTE1X21lbV9kZXN0cm95X2hlYXBfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfU0VUX1ZCTEFOS19QSVBFCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9TRVRfVkJMQU5LX1BJUEUsIGRybV9pOTE1X3ZibGFua19waXBlX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVF9WQkxBTktfUElQRQlEUk1fSU9SKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFLCBkcm1faTkxNV92YmxhbmtfcGlwZV90KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9WQkxBTktfU1dBUAlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfVkJMQU5LX1NXQVAsIGRybV9pOTE1X3ZibGFua19zd2FwX3QpCiAKIC8qIEFsbG93IGRyaXZlcnMgdG8gc3VibWl0IGJhdGNoYnVmZmVycyBkaXJlY3RseSB0byBoYXJkd2FyZSwgcmVseWluZwogICogb24gdGhlIHNlY3VyaXR5IG1lY2hhbmlzbXMgcHJvdmlkZWQgYnkgaGFyZHdhcmUuCkBAIC0yNDMsNCArMjU0LDEyIEBACiAJaW50IHBpcGU7CiB9IGRybV9pOTE1X3ZibGFua19waXBlX3Q7CiAKKy8qIFNjaGVkdWxlIGJ1ZmZlciBzd2FwIGF0IGdpdmVuIHZlcnRpY2FsIGJsYW5rOgorICovCit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV92Ymxhbmtfc3dhcCB7CisJZHJtX2RyYXdhYmxlX3QgZHJhd2FibGU7CisJZHJtX3ZibGFua19zZXFfdHlwZV90IHNlcXR5cGU7CisJdW5zaWduZWQgaW50IHNlcXVlbmNlOworfSBkcm1faTkxNV92Ymxhbmtfc3dhcF90OworCiAjZW5kaWYJCQkJLyogX0k5MTVfRFJNX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmMKaW5kZXggOGUyZTYwOS4uODViY2MyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuYwpAQCAtNDQsMTIgKzQ0LDE0IEBACiAJICovCiAJLmRyaXZlcl9mZWF0dXJlcyA9CiAJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1JFUVVJUkVfQUdQIHwgLyogRFJJVkVSX1VTRV9NVFJSIHwqLwotCSAgICBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCB8IERSSVZFUl9JUlFfVkJMLAorCSAgICBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCB8IERSSVZFUl9JUlFfVkJMIHwKKwkgICAgRFJJVkVSX0lSUV9WQkwyLAogCS5sb2FkID0gaTkxNV9kcml2ZXJfbG9hZCwKIAkubGFzdGNsb3NlID0gaTkxNV9kcml2ZXJfbGFzdGNsb3NlLAogCS5wcmVjbG9zZSA9IGk5MTVfZHJpdmVyX3ByZWNsb3NlLAogCS5kZXZpY2VfaXNfYWdwID0gaTkxNV9kcml2ZXJfZGV2aWNlX2lzX2FncCwKIAkudmJsYW5rX3dhaXQgPSBpOTE1X2RyaXZlcl92Ymxhbmtfd2FpdCwKKwkudmJsYW5rX3dhaXQyID0gaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQyLAogCS5pcnFfcHJlaW5zdGFsbCA9IGk5MTVfZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSBpOTE1X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwsCiAJLmlycV91bmluc3RhbGwgPSBpOTE1X2RyaXZlcl9pcnFfdW5pbnN0YWxsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5oIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5oCmluZGV4IGZkYzJiZjEuLjkzY2RjZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmgKQEAgLTQ2LDkgKzQ2LDExIEBACiAgKiAxLjM6IEFkZCB2Ymxhbmsgc3VwcG9ydAogICogMS40OiBGaXggY21kYnVmZmVyIHBhdGgsIGFkZCBoZWFwIGRlc3Ryb3kKICAqIDEuNTogQWRkIHZibGFuayBwaXBlIGNvbmZpZ3VyYXRpb24KKyAqIDEuNjogLSBOZXcgaW9jdGwgZm9yIHNjaGVkdWxpbmcgYnVmZmVyIHN3YXBzIG9uIHZlcnRpY2FsIGJsYW5rCisgKiAgICAgIC0gU3VwcG9ydCB2ZXJ0aWNhbCBibGFuayBvbiBzZWNvbmRhcnkgZGlzcGxheSBwaXBlCiAgKi8KICNkZWZpbmUgRFJJVkVSX01BSk9SCQkxCi0jZGVmaW5lIERSSVZFUl9NSU5PUgkJNQorI2RlZmluZSBEUklWRVJfTUlOT1IJCTYKICNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMAogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfcmluZ19idWZmZXIgewpAQCAtNzEsNiArNzMsMTMgQEAKIAlEUk1GSUxFIGZpbHA7CQkvKiAwOiBmcmVlLCAtMTogaGVhcCwgb3RoZXI6IHJlYWwgZmlsZXMgKi8KIH07CiAKK3R5cGVkZWYgc3RydWN0IF9kcm1faTkxNV92Ymxfc3dhcCB7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCWRybV9kcmF3YWJsZV90IGRyd19pZDsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwl1bnNpZ25lZCBpbnQgc2VxdWVuY2U7Cit9IGRybV9pOTE1X3ZibF9zd2FwX3Q7CisKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7CiAJZHJtX2xvY2FsX21hcF90ICptbWlvX21hcDsKQEAgLTgzLDYgKzkyLDcgQEAKIAlkbWFfYWRkcl90IGRtYV9zdGF0dXNfcGFnZTsKIAl1bnNpZ25lZCBsb25nIGNvdW50ZXI7CiAKKwl1bnNpZ25lZCBpbnQgY3BwOwogCWludCBiYWNrX29mZnNldDsKIAlpbnQgZnJvbnRfb2Zmc2V0OwogCWludCBjdXJyZW50X3BhZ2U7CkBAIC05OCw2ICsxMDgsMTAgQEAKIAlzdHJ1Y3QgbWVtX2Jsb2NrICphZ3BfaGVhcDsKIAl1bnNpZ25lZCBpbnQgc3IwMSwgYWRwYSwgcHBjciwgZHZvYiwgZHZvYywgbHZkczsKIAlpbnQgdmJsYW5rX3BpcGU7CisKKwlzcGlubG9ja190IHN3YXBzX2xvY2s7CisJZHJtX2k5MTVfdmJsX3N3YXBfdCB2Ymxfc3dhcHM7CisJdW5zaWduZWQgaW50IHN3YXBzX3BlbmRpbmc7CiB9IGRybV9pOTE1X3ByaXZhdGVfdDsKIAogZXh0ZXJuIGRybV9pb2N0bF9kZXNjX3QgaTkxNV9pb2N0bHNbXTsKQEAgLTExNywxMiArMTMxLDE0IEBACiBleHRlcm4gaW50IGk5MTVfaXJxX3dhaXQoRFJNX0lPQ1RMX0FSR1MpOwogCiBleHRlcm4gaW50IGk5MTVfZHJpdmVyX3ZibGFua193YWl0KGRybV9kZXZpY2VfdCAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiBpbnQgaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQyKGRybV9kZXZpY2VfdCAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBpOTE1X2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoZHJtX2RldmljZV90ICogZGV2KTsKIGV4dGVybiB2b2lkIGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3VuaW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpOwogZXh0ZXJuIGludCBpOTE1X3ZibGFua19waXBlX3NldChEUk1fSU9DVExfQVJHUyk7CiBleHRlcm4gaW50IGk5MTVfdmJsYW5rX3BpcGVfZ2V0KERSTV9JT0NUTF9BUkdTKTsKK2V4dGVybiBpbnQgaTkxNV92Ymxhbmtfc3dhcChEUk1fSU9DVExfQVJHUyk7CiAKIC8qIGk5MTVfbWVtLmMgKi8KIGV4dGVybiBpbnQgaTkxNV9tZW1fYWxsb2MoRFJNX0lPQ1RMX0FSR1MpOwpAQCAtMjU2LDYgKzI3MiwxMCBAQAogCiAjZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPX0k5NjUgKCgweDc5MDA8PDE2KXwweDIpCiAKKyNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIyKXw2KQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEJKDE8PDIxKQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfUkdCCSgxPDwyMCkKKwogI2RlZmluZSBNSV9CQVRDSF9CVUZGRVIgCSgoMHgzMDw8MjMpfDEpCiAjZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9TVEFSVCAJKDB4MzE8PDIzKQogI2RlZmluZSBNSV9CQVRDSF9CVUZGRVJfRU5EIAkoMHhBPDwyMykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pb2MzMi5jIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2lvYzMyLmMKaW5kZXggMjk2MjQ4Yy4uMWZlNjhhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2lvYzMyLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2lvYzMyLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkJCSAgJmJhdGNoYnVmZmVyLT5jbGlwcmVjdHMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9JOTE1X0JBVENIQlVGRkVSLAogCQkJICh1bnNpZ25lZCBsb25nKWJhdGNoYnVmZmVyKTsKIH0KQEAgLTEwMiw3ICsxMDIsNyBAQAogCQkJICAmY21kYnVmZmVyLT5jbGlwcmVjdHMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9JOTE1X0NNREJVRkZFUiwgKHVuc2lnbmVkIGxvbmcpY21kYnVmZmVyKTsKIH0KIApAQCAtMTI1LDcgKzEyNSw3IEBACiAJCQkgICZyZXF1ZXN0LT5pcnFfc2VxKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfSTkxNV9JUlFfRU1JVCwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbTMyIHsKQEAgLTE0OSw3ICsxNDksNyBAQAogCQkJICAmcmVxdWVzdC0+dmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIApAQCAtMTc4LDcgKzE3OCw3IEBACiAJCQkgICZyZXF1ZXN0LT5yZWdpb25fb2Zmc2V0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfSTkxNV9BTExPQywgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKQEAgLTIxNSw3ICsyMTUsNyBAQAogCWlmIChmbiAhPSBOVUxMKQogCQlyZXQgPSAoKmZuKSAoZmlscCwgY21kLCBhcmcpOwogCWVsc2UKLQkJcmV0ID0gZHJtX2lvY3RsKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CisJCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pcnEuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pcnEuYwppbmRleCAwZDRhMTYyLi43OGMxYWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2lycS5jCkBAIC0zNyw2ICszNywxNzggQEAKIAogI2RlZmluZSBNQVhfTk9QSUQgKCh1MzIpfjApCiAKKy8qKgorICogRW1pdCBibGl0cyBmb3Igc2NoZWR1bGVkIGJ1ZmZlciBzd2Fwcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIEhXIGxvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQgaTkxNV92YmxhbmtfdGFza2xldChkcm1fZGV2aWNlX3QgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgKnRtcCwgaGl0cywgKmhpdDsKKwlpbnQgbmhpdHMsIG5yZWN0cywgc2xpY2VbMl0sIHVwcGVyWzJdLCBsb3dlclsyXSwgaTsKKwl1bnNpZ25lZCBjb3VudGVyWzJdID0geyBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpLAorCQkJCWF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZDIpIH07CisJZHJtX2RyYXdhYmxlX2luZm9fdCAqZHJ3OworCWRybV9pOTE1X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSBkZXZfcHJpdi0+c2FyZWFfcHJpdjsKKwl1MzIgY3BwID0gZGV2X3ByaXYtPmNwcDsKKwl1MzIgY21kID0gKGNwcCA9PSA0KSA/IChYWV9TUkNfQ09QWV9CTFRfQ01EIHwKKwkJCQlYWV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEgfAorCQkJCVhZX1NSQ19DT1BZX0JMVF9XUklURV9SR0IpCisJCQkgICAgIDogWFlfU1JDX0NPUFlfQkxUX0NNRDsKKwl1MzIgcGl0Y2hyb3BjcHAgPSAoc2FyZWFfcHJpdi0+cGl0Y2ggKiBjcHApIHwgKDB4Y2MgPDwgMTYpIHwKKwkJCSAgKGNwcCA8PCAyMykgfCAoMSA8PCAyNCk7CisJUklOR19MT0NBTFM7CisKKwlEUk1fREVCVUcoIlxuIik7CisKKwlJTklUX0xJU1RfSEVBRCgmaGl0cyk7CisKKwluaGl0cyA9IG5yZWN0cyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnN3YXBzX2xvY2ssIGlycWZsYWdzKTsKKworCS8qIEZpbmQgYnVmZmVyIHN3YXBzIHNjaGVkdWxlZCBmb3IgdGhpcyB2ZXJ0aWNhbCBibGFuayAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCB0bXAsICZkZXZfcHJpdi0+dmJsX3N3YXBzLmhlYWQpIHsKKwkJZHJtX2k5MTVfdmJsX3N3YXBfdCAqdmJsX3N3YXAgPQorCQkJbGlzdF9lbnRyeShsaXN0LCBkcm1faTkxNV92Ymxfc3dhcF90LCBoZWFkKTsKKworCQlpZiAoKGNvdW50ZXJbdmJsX3N3YXAtPnBpcGVdIC0gdmJsX3N3YXAtPnNlcXVlbmNlKSA+ICgxPDwyMykpCisJCQljb250aW51ZTsKKworCQlsaXN0X2RlbChsaXN0KTsKKwkJZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmctLTsKKworCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnN3YXBzX2xvY2spOworCQlzcGluX2xvY2soJmRldi0+ZHJ3X2xvY2spOworCisJCWRydyA9IGRybV9nZXRfZHJhd2FibGVfaW5mbyhkZXYsIHZibF9zd2FwLT5kcndfaWQpOworCisJCWlmICghZHJ3KSB7CisJCQlzcGluX3VubG9jaygmZGV2LT5kcndfbG9jayk7CisJCQlkcm1fZnJlZSh2Ymxfc3dhcCwgc2l6ZW9mKCp2Ymxfc3dhcCksIERSTV9NRU1fRFJJVkVSKTsKKwkJCXNwaW5fbG9jaygmZGV2X3ByaXYtPnN3YXBzX2xvY2spOworCQkJY29udGludWU7CisJCX0KKworCQlsaXN0X2Zvcl9lYWNoKGhpdCwgJmhpdHMpIHsKKwkJCWRybV9pOTE1X3ZibF9zd2FwX3QgKnN3YXBfY21wID0KKwkJCQlsaXN0X2VudHJ5KGhpdCwgZHJtX2k5MTVfdmJsX3N3YXBfdCwgaGVhZCk7CisJCQlkcm1fZHJhd2FibGVfaW5mb190ICpkcndfY21wID0KKwkJCQlkcm1fZ2V0X2RyYXdhYmxlX2luZm8oZGV2LCBzd2FwX2NtcC0+ZHJ3X2lkKTsKKworCQkJaWYgKGRyd19jbXAgJiYKKwkJCSAgICBkcndfY21wLT5yZWN0c1swXS55MSA+IGRydy0+cmVjdHNbMF0ueTEpIHsKKwkJCQlsaXN0X2FkZF90YWlsKGxpc3QsIGhpdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlzcGluX3VubG9jaygmZGV2LT5kcndfbG9jayk7CisKKwkJLyogTGlzdCBvZiBoaXRzIHdhcyBlbXB0eSwgb3Igd2UgcmVhY2hlZCB0aGUgZW5kIG9mIGl0ICovCisJCWlmIChoaXQgPT0gJmhpdHMpCisJCQlsaXN0X2FkZF90YWlsKGxpc3QsIGhpdHMucHJldik7CisKKwkJbmhpdHMrKzsKKworCQlzcGluX2xvY2soJmRldl9wcml2LT5zd2Fwc19sb2NrKTsKKwl9CisKKwlpZiAobmhpdHMgPT0gMCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+c3dhcHNfbG9jaywgaXJxZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5zd2Fwc19sb2NrKTsKKworCWk5MTVfa2VybmVsX2xvc3RfY29udGV4dChkZXYpOworCisJQkVHSU5fTFBfUklORyg2KTsKKworCU9VVF9SSU5HKEdGWF9PUF9EUkFXUkVDVF9JTkZPKTsKKwlPVVRfUklORygwKTsKKwlPVVRfUklORygwKTsKKwlPVVRfUklORyhzYXJlYV9wcml2LT53aWR0aCB8IHNhcmVhX3ByaXYtPmhlaWdodCA8PCAxNik7CisJT1VUX1JJTkcoc2FyZWFfcHJpdi0+d2lkdGggfCBzYXJlYV9wcml2LT5oZWlnaHQgPDwgMTYpOworCU9VVF9SSU5HKDApOworCisJQURWQU5DRV9MUF9SSU5HKCk7CisKKwlzYXJlYV9wcml2LT5jdHhPd25lciA9IERSTV9LRVJORUxfQ09OVEVYVDsKKworCXVwcGVyWzBdID0gdXBwZXJbMV0gPSAwOworCXNsaWNlWzBdID0gbWF4KHNhcmVhX3ByaXYtPnBpcGVBX2ggLyBuaGl0cywgMSk7CisJc2xpY2VbMV0gPSBtYXgoc2FyZWFfcHJpdi0+cGlwZUJfaCAvIG5oaXRzLCAxKTsKKwlsb3dlclswXSA9IHNhcmVhX3ByaXYtPnBpcGVBX3kgKyBzbGljZVswXTsKKwlsb3dlclsxXSA9IHNhcmVhX3ByaXYtPnBpcGVCX3kgKyBzbGljZVswXTsKKworCXNwaW5fbG9jaygmZGV2LT5kcndfbG9jayk7CisKKwkvKiBFbWl0IGJsaXRzIGZvciBidWZmZXIgc3dhcHMsIHBhcnRpdGlvbmluZyBib3RoIG91dHB1dHMgaW50byBhcyBtYW55CisJICogc2xpY2VzIGFzIHRoZXJlIGFyZSBidWZmZXIgc3dhcHMgc2NoZWR1bGVkIGluIG9yZGVyIHRvIGF2b2lkIHRlYXJpbmcKKwkgKiAoYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBhIHNpbmdsZSBidWZmZXIgc3dhcCB3b3VsZCBhbHdheXMKKwkgKiBjb21wbGV0ZSBiZWZvcmUgc2Nhbm91dCBzdGFydHMpLgorCSAqLworCWZvciAoaSA9IDA7IGkrKyA8IG5oaXRzOworCSAgICAgdXBwZXJbMF0gPSBsb3dlclswXSwgbG93ZXJbMF0gKz0gc2xpY2VbMF0sCisJICAgICB1cHBlclsxXSA9IGxvd2VyWzFdLCBsb3dlclsxXSArPSBzbGljZVsxXSkgeworCQlpZiAoaSA9PSBuaGl0cykKKwkJCWxvd2VyWzBdID0gbG93ZXJbMV0gPSBzYXJlYV9wcml2LT5oZWlnaHQ7CisKKwkJbGlzdF9mb3JfZWFjaChoaXQsICZoaXRzKSB7CisJCQlkcm1faTkxNV92Ymxfc3dhcF90ICpzd2FwX2hpdCA9CisJCQkJbGlzdF9lbnRyeShoaXQsIGRybV9pOTE1X3ZibF9zd2FwX3QsIGhlYWQpOworCQkJZHJtX2NsaXBfcmVjdF90ICpyZWN0OworCQkJaW50IG51bV9yZWN0cywgcGlwZTsKKwkJCXVuc2lnbmVkIHNob3J0IHRvcCwgYm90dG9tOworCisJCQlkcncgPSBkcm1fZ2V0X2RyYXdhYmxlX2luZm8oZGV2LCBzd2FwX2hpdC0+ZHJ3X2lkKTsKKworCQkJaWYgKCFkcncpCisJCQkJY29udGludWU7CisKKwkJCXJlY3QgPSBkcnctPnJlY3RzOworCQkJcGlwZSA9IHN3YXBfaGl0LT5waXBlOworCQkJdG9wID0gdXBwZXJbcGlwZV07CisJCQlib3R0b20gPSBsb3dlcltwaXBlXTsKKworCQkJZm9yIChudW1fcmVjdHMgPSBkcnctPm51bV9yZWN0czsgbnVtX3JlY3RzLS07IHJlY3QrKykgeworCQkJCWludCB5MSA9IG1heChyZWN0LT55MSwgdG9wKTsKKwkJCQlpbnQgeTIgPSBtaW4ocmVjdC0+eTIsIGJvdHRvbSk7CisKKwkJCQlpZiAoeTEgPj0geTIpCisJCQkJCWNvbnRpbnVlOworCisJCQkJQkVHSU5fTFBfUklORyg4KTsKKworCQkJCU9VVF9SSU5HKGNtZCk7CisJCQkJT1VUX1JJTkcocGl0Y2hyb3BjcHApOworCQkJCU9VVF9SSU5HKCh5MSA8PCAxNikgfCByZWN0LT54MSk7CisJCQkJT1VUX1JJTkcoKHkyIDw8IDE2KSB8IHJlY3QtPngyKTsKKwkJCQlPVVRfUklORyhzYXJlYV9wcml2LT5mcm9udF9vZmZzZXQpOworCQkJCU9VVF9SSU5HKCh5MSA8PCAxNikgfCByZWN0LT54MSk7CisJCQkJT1VUX1JJTkcocGl0Y2hyb3BjcHAgJiAweGZmZmYpOworCQkJCU9VVF9SSU5HKHNhcmVhX3ByaXYtPmJhY2tfb2Zmc2V0KTsKKworCQkJCUFEVkFOQ0VfTFBfUklORygpOworCQkJfQorCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5kcndfbG9jaywgaXJxZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGhpdCwgdG1wLCAmaGl0cykgeworCQlkcm1faTkxNV92Ymxfc3dhcF90ICpzd2FwX2hpdCA9CisJCQlsaXN0X2VudHJ5KGhpdCwgZHJtX2k5MTVfdmJsX3N3YXBfdCwgaGVhZCk7CisKKwkJbGlzdF9kZWwoaGl0KTsKKworCQlkcm1fZnJlZShzd2FwX2hpdCwgc2l6ZW9mKCpzd2FwX2hpdCksIERSTV9NRU1fRFJJVkVSKTsKKwl9Cit9CisKIGlycXJldHVybl90IGk5MTVfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlkcm1fZGV2aWNlX3QgKmRldiA9IChkcm1fZGV2aWNlX3QgKikgYXJnOwpAQCAtNjAsOSArMjMyLDI2IEBACiAJCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOwogCiAJaWYgKHRlbXAgJiAoVlNZTkNfUElQRUFfRkxBRyB8IFZTWU5DX1BJUEVCX0ZMQUcpKSB7Ci0JCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKKwkJaW50IHZibGFua19waXBlID0gZGV2X3ByaXYtPnZibGFua19waXBlOworCisJCWlmICgodmJsYW5rX3BpcGUgJgorCQkgICAgIChEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpCisJCSAgICA9PSAoRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpKSB7CisJCQlpZiAodGVtcCAmIFZTWU5DX1BJUEVBX0ZMQUcpCisJCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOworCQkJaWYgKHRlbXAgJiBWU1lOQ19QSVBFQl9GTEFHKQorCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkMik7CisJCX0gZWxzZSBpZiAoKCh0ZW1wICYgVlNZTkNfUElQRUFfRkxBRykgJiYKKwkJCSAgICAodmJsYW5rX3BpcGUgJiBEUk1fSTkxNV9WQkxBTktfUElQRV9BKSkgfHwKKwkJCSAgICgodGVtcCAmIFZTWU5DX1BJUEVCX0ZMQUcpICYmCisJCQkgICAgKHZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpKQorCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOworCiAJCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKIAkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKKworCQlpZiAoZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPiAwKQorCQkJZHJtX2xvY2tlZF90YXNrbGV0KGRldiwgaTkxNV92YmxhbmtfdGFza2xldCk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTIwLDcgKzMwOSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGk5MTVfZHJpdmVyX3ZibGFua193YWl0KGRybV9kZXZpY2VfdCAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQorc3RhdGljIGludCBpOTE1X2RyaXZlcl92YmxhbmtfZG9fd2FpdChkcm1fZGV2aWNlX3QgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSwKKwkJCQkgICAgICBhdG9taWNfdCAqY291bnRlcikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgY3VyX3ZibGFuazsKQEAgLTEzMiw3ICszMjIsNyBAQAogCX0KIAogCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCi0JCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSkKKwkJICAgICgoKGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZChjb3VudGVyKSkKIAkJCS0gKnNlcXVlbmNlKSA8PSAoMTw8MjMpKSk7CiAJCiAJKnNlcXVlbmNlID0gY3VyX3ZibGFuazsKQEAgLTE0MSw2ICszMzEsMTYgQEAKIH0KIAogCitpbnQgaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQoZHJtX2RldmljZV90ICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCit7CisJcmV0dXJuIGk5MTVfZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsICZkZXYtPnZibF9yZWNlaXZlZCk7Cit9CisKK2ludCBpOTE1X2RyaXZlcl92Ymxhbmtfd2FpdDIoZHJtX2RldmljZV90ICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCit7CisJcmV0dXJuIGk5MTVfZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsICZkZXYtPnZibF9yZWNlaXZlZDIpOworfQorCiAvKiBOZWVkcyB0aGUgbG9jayBhcyBpdCB0b3VjaGVzIHRoZSByaW5nLgogICovCiBpbnQgaTkxNV9pcnFfZW1pdChEUk1fSU9DVExfQVJHUykKQEAgLTE4OSw3ICszODksNyBAQAogCXJldHVybiBpOTE1X3dhaXRfaXJxKGRldiwgaXJxd2FpdC5pcnFfc2VxKTsKIH0KIAotc3RhdGljIGludCBpOTE1X2VuYWJsZV9pbnRlcnJ1cHQgKGRybV9kZXZpY2VfdCAqZGV2KQorc3RhdGljIHZvaWQgaTkxNV9lbmFibGVfaW50ZXJydXB0IChkcm1fZGV2aWNlX3QgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCXUxNiBmbGFnOwpAQCAtMTk5LDEzICszOTksOCBAQAogCQlmbGFnIHw9IFZTWU5DX1BJUEVBX0ZMQUc7CiAJaWYgKGRldl9wcml2LT52YmxhbmtfcGlwZSAmIERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpCiAJCWZsYWcgfD0gVlNZTkNfUElQRUJfRkxBRzsKLQlpZiAoZGV2X3ByaXYtPnZibGFua19waXBlICYgfihEUk1fSTkxNV9WQkxBTktfUElQRV9BfERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpKSB7Ci0JCURSTV9FUlJPUigiJXMgY2FsbGVkIHdpdGggaW52YWxpZCBwaXBlIDB4JXhcbiIsCi0JCQkgIF9fRlVOQ1RJT05fXywgZGV2X3ByaXYtPnZibGFua19waXBlKTsKLQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKLQl9CisKIAlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfRU5BQkxFX1IsIFVTRVJfSU5UX0ZMQUcgfCBmbGFnKTsKLQlyZXR1cm4gMDsKIH0KIAogLyogU2V0IHRoZSB2YmxhbmsgbW9uaXRvciBwaXBlCkBAIC0yMjQsOCArNDE5LDE3IEBACiAJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKHBpcGUsIChkcm1faTkxNV92YmxhbmtfcGlwZV90IF9fdXNlciAqKSBkYXRhLAogCQkJCSBzaXplb2YocGlwZSkpOwogCisJaWYgKHBpcGUucGlwZSAmIH4oRFJNX0k5MTVfVkJMQU5LX1BJUEVfQXxEUk1fSTkxNV9WQkxBTktfUElQRV9CKSkgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIGludmFsaWQgcGlwZSAweCV4XG4iLCAKKwkJCSAgX19GVU5DVElPTl9fLCBwaXBlLnBpcGUpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCX0KKwogCWRldl9wcml2LT52YmxhbmtfcGlwZSA9IHBpcGUucGlwZTsKLQlyZXR1cm4gaTkxNV9lbmFibGVfaW50ZXJydXB0IChkZXYpOworCisJaTkxNV9lbmFibGVfaW50ZXJydXB0IChkZXYpOworCisJcmV0dXJuIDA7CiB9CiAKIGludCBpOTE1X3ZibGFua19waXBlX2dldChEUk1fSU9DVExfQVJHUykKQEAgLTI1MSw2ICs0NTUsMTE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogU2NoZWR1bGUgYnVmZmVyIHN3YXAgYXQgZ2l2ZW4gdmVydGljYWwgYmxhbmsuCisgKi8KK2ludCBpOTE1X3ZibGFua19zd2FwKERSTV9JT0NUTF9BUkdTKQoreworCURSTV9ERVZJQ0U7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJZHJtX2k5MTVfdmJsYW5rX3N3YXBfdCBzd2FwOworCWRybV9pOTE1X3ZibF9zd2FwX3QgKnZibF9zd2FwOworCXVuc2lnbmVkIGludCBwaXBlLCBzZXF0eXBlLCBjdXJzZXE7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJaWYgKCFkZXZfcHJpdikgeworCQlEUk1fRVJST1IoIiVzIGNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJfQorCisJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2LT5yb3RhdGlvbikgeworCQlEUk1fREVCVUcoIlJvdGF0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCX0KKworCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChzd2FwLCAoZHJtX2k5MTVfdmJsYW5rX3N3YXBfdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKHN3YXApKTsKKworCWlmIChzd2FwLnNlcXR5cGUgJiB+KF9EUk1fVkJMQU5LX1JFTEFUSVZFIHwgX0RSTV9WQkxBTktfQUJTT0xVVEUgfAorCQkJICAgICBfRFJNX1ZCTEFOS19TRUNPTkRBUlkgfCBfRFJNX1ZCTEFOS19ORVhUT05NSVNTKSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgc2VxdWVuY2UgdHlwZSAweCV4XG4iLCBzd2FwLnNlcXR5cGUpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCX0KKworCXBpcGUgPSAoc3dhcC5zZXF0eXBlICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKSA/IDEgOiAwOworCisJc2VxdHlwZSA9IHN3YXAuc2VxdHlwZSAmIChfRFJNX1ZCTEFOS19SRUxBVElWRSB8IF9EUk1fVkJMQU5LX0FCU09MVVRFKTsKKworCWlmICghKGRldl9wcml2LT52YmxhbmtfcGlwZSAmICgxIDw8IHBpcGUpKSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgcGlwZSAlZFxuIiwgcGlwZSk7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZHJ3X2xvY2ssIGlycWZsYWdzKTsKKworCWlmICghZHJtX2dldF9kcmF3YWJsZV9pbmZvKGRldiwgc3dhcC5kcmF3YWJsZSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5kcndfbG9jaywgaXJxZmxhZ3MpOworCQlEUk1fREVCVUcoIkludmFsaWQgZHJhd2FibGUgSUQgJWRcbiIsIHN3YXAuZHJhd2FibGUpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZHJ3X2xvY2ssIGlycWZsYWdzKTsKKworCWN1cnNlcSA9IGF0b21pY19yZWFkKHBpcGUgPyAmZGV2LT52YmxfcmVjZWl2ZWQyIDogJmRldi0+dmJsX3JlY2VpdmVkKTsKKworCWlmIChzZXF0eXBlID09IF9EUk1fVkJMQU5LX1JFTEFUSVZFKQorCQlzd2FwLnNlcXVlbmNlICs9IGN1cnNlcTsKKworCWlmICgoY3Vyc2VxIC0gc3dhcC5zZXF1ZW5jZSkgPD0gKDE8PDIzKSkgeworCQlpZiAoc3dhcC5zZXF0eXBlICYgX0RSTV9WQkxBTktfTkVYVE9OTUlTUykgeworCQkJc3dhcC5zZXF1ZW5jZSA9IGN1cnNlcSArIDE7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUcoIk1pc3NlZCB0YXJnZXQgc2VxdWVuY2VcbiIpOworCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkJfQorCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+c3dhcHNfbG9jaywgaXJxZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaChsaXN0LCAmZGV2X3ByaXYtPnZibF9zd2Fwcy5oZWFkKSB7CisJCXZibF9zd2FwID0gbGlzdF9lbnRyeShsaXN0LCBkcm1faTkxNV92Ymxfc3dhcF90LCBoZWFkKTsKKworCQlpZiAodmJsX3N3YXAtPmRyd19pZCA9PSBzd2FwLmRyYXdhYmxlICYmCisJCSAgICB2Ymxfc3dhcC0+cGlwZSA9PSBwaXBlICYmCisJCSAgICB2Ymxfc3dhcC0+c2VxdWVuY2UgPT0gc3dhcC5zZXF1ZW5jZSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnN3YXBzX2xvY2ssIGlycWZsYWdzKTsKKwkJCURSTV9ERUJVRygiQWxyZWFkeSBzY2hlZHVsZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+c3dhcHNfbG9jaywgaXJxZmxhZ3MpOworCisJaWYgKGRldl9wcml2LT5zd2Fwc19wZW5kaW5nID49IDEwMCkgeworCQlEUk1fREVCVUcoIlRvbyBtYW55IHN3YXBzIHF1ZXVlZFxuIik7CisJCXJldHVybiBEUk1fRVJSKEVCVVNZKTsKKwl9CisKKwl2Ymxfc3dhcCA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKHZibF9zd2FwKSwgRFJNX01FTV9EUklWRVIpOworCisJaWYgKCF2Ymxfc3dhcCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgdG8gcXVldWUgc3dhcFxuIik7CisJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CisJfQorCisJRFJNX0RFQlVHKCJcbiIpOworCisJdmJsX3N3YXAtPmRyd19pZCA9IHN3YXAuZHJhd2FibGU7CisJdmJsX3N3YXAtPnBpcGUgPSBwaXBlOworCXZibF9zd2FwLT5zZXF1ZW5jZSA9IHN3YXAuc2VxdWVuY2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnN3YXBzX2xvY2ssIGlycWZsYWdzKTsKKworCWxpc3RfYWRkX3RhaWwoKHN0cnVjdCBsaXN0X2hlYWQgKil2Ymxfc3dhcCwgJmRldl9wcml2LT52Ymxfc3dhcHMuaGVhZCk7CisJZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcrKzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5zd2Fwc19sb2NrLCBpcnFmbGFncyk7CisKKwlEUk1fQ09QWV9UT19VU0VSX0lPQ1RMKChkcm1faTkxNV92Ymxhbmtfc3dhcF90IF9fdXNlciAqKSBkYXRhLCBzd2FwLAorCQkJICAgICAgIHNpemVvZihzd2FwKSk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogZHJtX2RtYS5oIGhvb2tzCiAqLwogdm9pZCBpOTE1X2RyaXZlcl9pcnFfcHJlaW5zdGFsbChkcm1fZGV2aWNlX3QgKiBkZXYpCkBAIC0yNjYsNiArNTgyLDEyIEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWRldl9wcml2LT5zd2Fwc19sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+dmJsX3N3YXBzLmhlYWQpOworCWRldl9wcml2LT5zd2Fwc19wZW5kaW5nID0gMDsKKworCWlmICghZGV2X3ByaXYtPnZibGFua19waXBlKQorCQlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSBEUk1fSTkxNV9WQkxBTktfUElQRV9BOwogCWk5MTVfZW5hYmxlX2ludGVycnVwdChkZXYpOwogCURSTV9JTklUX1dBSVRRVUVVRSgmZGV2X3ByaXYtPmlycV9xdWV1ZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9pb2MzMi5jIGIvZHJpdmVycy9jaGFyL2RybS9tZ2FfaW9jMzIuYwppbmRleCA1NGExOGViLi4zMGQwMDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL21nYV9pb2MzMi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vbWdhX2lvYzMyLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQkgRFJNX0lPQ1RMX01HQV9JTklULCAodW5zaWduZWQgbG9uZylpbml0KTsKIH0KIApAQCAtMTI1LDcgKzEyNSw3IEBACiAJCQkgICZnZXRwYXJhbS0+dmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9NR0FfR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKWdldHBhcmFtKTsKIH0KIApAQCAtMTY2LDcgKzE2Niw3IEBACiAJICAgIHx8IF9fcHV0X3VzZXIoZG1hX2Jvb3RzdHJhcDMyLmFncF9zaXplLCAmZG1hX2Jvb3RzdHJhcC0+YWdwX3NpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVyciA9IGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwllcnIgPSBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCURSTV9JT0NUTF9NR0FfRE1BX0JPT1RTVFJBUCwKIAkJCSh1bnNpZ25lZCBsb25nKWRtYV9ib290c3RyYXApOwogCWlmIChlcnIpCkBAIC0yMjQsNyArMjI0LDcgQEAKIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwogCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJtLmggYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJtLmgKaW5kZXggNWQ4MzViMC4uNmU4YWYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X2RybS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcm0uaApAQCAtMSw3ICsxLDggQEAKIC8qIHIxMjhfZHJtLmggLS0gUHVibGljIGhlYWRlciBmb3IgdGhlIHIxMjggZHJpdmVyIC0qLSBsaW51eC1jIC0qLQogICogQ3JlYXRlZDogV2VkIEFwciAgNSAxOToyNDoxOSAyMDAwIGJ5IGtldmluQHByZWNpc2lvbmluc2lnaHQuY29tCiAgKi8KLS8qIENvcHlyaWdodCAyMDAwIFByZWNpc2lvbiBJbnNpZ2h0LCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKy8qCisgKiBDb3B5cmlnaHQgMjAwMCBQcmVjaXNpb24gSW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCiAgKiBDb3B5cmlnaHQgMjAwMCBWQSBMaW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuaAppbmRleCA5NGFiZmZiLi5mMWVmYjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2Rydi5oCkBAIC0xLDcgKzEsOCBAQAogLyogcjEyOF9kcnYuaCAtLSBQcml2YXRlIGhlYWRlciBmb3IgcjEyOCBkcml2ZXIgLSotIGxpbnV4LWMgLSotCiAgKiBDcmVhdGVkOiBNb24gRGVjIDEzIDA5OjUxOjExIDE5OTkgYnkgZmFpdGhAcHJlY2lzaW9uaW5zaWdodC5jb20KICAqLwotLyogQ29weXJpZ2h0IDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgorLyoKKyAqIENvcHlyaWdodCAxOTk5IFByZWNpc2lvbiBJbnNpZ2h0LCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KICAqIENvcHlyaWdodCAyMDAwIFZBIExpbnV4IFN5c3RlbXMsIEluYy4sIFN1bm55dmFsZSwgQ2FsaWZvcm5pYS4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X2lvYzMyLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfaW9jMzIuYwppbmRleCA5ZGQ2ZDQxLi5kM2NiNjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfaW9jMzIuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfaW9jMzIuYwpAQCAtOTUsNyArOTUsNyBAQAogCQkJICAmaW5pdC0+YWdwX3RleHR1cmVzX29mZnNldCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQkgRFJNX0lPQ1RMX1IxMjhfSU5JVCwgKHVuc2lnbmVkIGxvbmcpaW5pdCk7CiB9CiAKQEAgLTEyOSw3ICsxMjksNyBAQAogCQkJICAmZGVwdGgtPm1hc2spKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9SMTI4X0RFUFRILCAodW5zaWduZWQgbG9uZylkZXB0aCk7CiAKIH0KQEAgLTE1Myw3ICsxNTMsNyBAQAogCQkJICAmc3RpcHBsZS0+bWFzaykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQkgRFJNX0lPQ1RMX1IxMjhfU1RJUFBMRSwgKHVuc2lnbmVkIGxvbmcpc3RpcHBsZSk7CiB9CiAKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQkJICAmZ2V0cGFyYW0tPnZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfUjEyOF9HRVRQQVJBTSwgKHVuc2lnbmVkIGxvbmcpZ2V0cGFyYW0pOwogfQogCkBAIC0yMTQsNyArMjE0LDcgQEAKIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwogCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfc3RhdGUuYyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9zdGF0ZS5jCmluZGV4IGEwODBjZGQuLjE3YjExZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9zdGF0ZS5jCkBAIC0xLDcgKzEsOCBAQAogLyogcjEyOF9zdGF0ZS5jIC0tIFN0YXRlIHN1cHBvcnQgZm9yIHIxMjggLSotIGxpbnV4LWMgLSotCiAgKiBDcmVhdGVkOiBUaHUgSmFuIDI3IDAyOjUzOjQzIDIwMDAgYnkgZ2FyZXRoQHZhbGludXguY29tCiAgKi8KLS8qIENvcHlyaWdodCAyMDAwIFZBIExpbnV4IFN5c3RlbXMsIEluYy4sIFN1bm55dmFsZSwgQ2FsaWZvcm5pYS4KKy8qCisgKiBDb3B5cmlnaHQgMjAwMCBWQSBMaW51eCBTeXN0ZW1zLCBJbmMuLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEuCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMKaW5kZXggZDE0NDc3Yi4uMDMyYTAyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yMzAwX2NtZGJ1Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9jbWRidWYuYwpAQCAtMjQyLDI2ICsyNDIsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogd2UgZXhwZWN0IG9mZnNldHMgcGFzc2VkIHRvIHRoZSBmcmFtZWJ1ZmZlciB0byBiZSBlaXRoZXIgd2l0aGluIHZpZGVvIAotICogbWVtb3J5IG9yIHdpdGhpbiBBR1Agc3BhY2UgCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2NoZWNrX29mZnNldChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCi0JCQkJCXUzMiBvZmZzZXQpCi17Ci0JLyogd2UgcmVhbHkgd2FudCB0byBjaGVjayBhZ2FpbnN0IGVuZCBvZiB2aWRlbyBhcGVydHVyZQotCSAgIGJ1dCB0aGlzIHZhbHVlIGlzIG5vdCBiZWluZyBrZXB0LgotCSAgIFRoaXMgY29kZSBpcyBjb3JyZWN0IGZvciBub3cgKGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgdGhlCi0JICAgY29kZSB0aGF0IHNldHMgTUNfRkJfTE9DQVRJT04pIGluIHJhZGVvbl9jcC5jICovCi0JaWYgKG9mZnNldCA+PSBkZXZfcHJpdi0+ZmJfbG9jYXRpb24gJiYKLQkgICAgb2Zmc2V0IDwgKGRldl9wcml2LT5mYl9sb2NhdGlvbiArIGRldl9wcml2LT5mYl9zaXplKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKG9mZnNldCA+PSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCAmJgotCSAgICBvZmZzZXQgPCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfY2FyZWZ1bGx5X2NoZWNrZWRfcGFja2V0MChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqCiAJCQkJCQkJICBkZXZfcHJpdiwKIAkJCQkJCQkgIGRybV9yYWRlb25fa2NtZF9idWZmZXJfdApAQCAtMjkwLDcgKzI3MCw3IEBACiAJCWNhc2UgTUFSS19TQUZFOgogCQkJYnJlYWs7CiAJCWNhc2UgTUFSS19DSEVDS19PRkZTRVQ6Ci0JCQlpZiAocjMwMF9jaGVja19vZmZzZXQoZGV2X3ByaXYsICh1MzIpIHZhbHVlc1tpXSkpIHsKKwkJCWlmICghcmFkZW9uX2NoZWNrX29mZnNldChkZXZfcHJpdiwgKHUzMikgdmFsdWVzW2ldKSkgewogCQkJCURSTV9FUlJPUgogCQkJCSAgICAoIk9mZnNldCBmYWlsZWQgcmFuZ2UgY2hlY2sgKHJlZz0lMDR4IHN6PSVkKVxuIiwKIAkJCQkgICAgIHJlZywgc3opOwpAQCAtNDUyLDcgKzQzMiw3IEBACiAJaSA9IDE7CiAJd2hpbGUgKChrIDwgbmFycmF5cykgJiYgKGkgPCAoY291bnQgKyAxKSkpIHsKIAkJaSsrOwkJLyogc2tpcCBhdHRyaWJ1dGUgZmllbGQgKi8KLQkJaWYgKHIzMDBfY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBwYXlsb2FkW2ldKSkgeworCQlpZiAoIXJhZGVvbl9jaGVja19vZmZzZXQoZGV2X3ByaXYsIHBheWxvYWRbaV0pKSB7CiAJCQlEUk1fRVJST1IKIAkJCSAgICAoIk9mZnNldCBmYWlsZWQgcmFuZ2UgY2hlY2sgKGs9JWQgaT0lZCkgd2hpbGUgcHJvY2Vzc2luZyAzRF9MT0FEX1ZCUE5UUiBwYWNrZXQuXG4iLAogCQkJICAgICBrLCBpKTsKQEAgLTQ2Myw3ICs0NDMsNyBAQAogCQlpZiAoayA9PSBuYXJyYXlzKQogCQkJYnJlYWs7CiAJCS8qIGhhdmUgb25lIG1vcmUgdG8gcHJvY2VzcywgdGhleSBjb21lIGluIHBhaXJzICovCi0JCWlmIChyMzAwX2NoZWNrX29mZnNldChkZXZfcHJpdiwgcGF5bG9hZFtpXSkpIHsKKwkJaWYgKCFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBwYXlsb2FkW2ldKSkgewogCQkJRFJNX0VSUk9SCiAJCQkgICAgKCJPZmZzZXQgZmFpbGVkIHJhbmdlIGNoZWNrIChrPSVkIGk9JWQpIHdoaWxlIHByb2Nlc3NpbmcgM0RfTE9BRF9WQlBOVFIgcGFja2V0LlxuIiwKIAkJCSAgICAgaywgaSk7CkBAIC01MDgsNyArNDg4LDcgQEAKIAkJaWYgKGNtZFsxXSAmIChSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTCAKIAkJCSAgICAgIHwgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwpKSB7CiAJCQlvZmZzZXQgPSBjbWRbMl0gPDwgMTA7Ci0JCQlyZXQgPSByMzAwX2NoZWNrX29mZnNldChkZXZfcHJpdiwgb2Zmc2V0KTsKKwkJCXJldCA9ICFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBvZmZzZXQpOwogCQkJaWYgKHJldCkgewogCQkJCURSTV9FUlJPUigiSW52YWxpZCBiaXRibHQgZmlyc3Qgb2Zmc2V0IGlzICUwOFhcbiIsIG9mZnNldCk7CiAJCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKQEAgLTUxOCw3ICs0OTgsNyBAQAogCQlpZiAoKGNtZFsxXSAmIFJBREVPTl9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMKSAmJgogCQkgICAgKGNtZFsxXSAmIFJBREVPTl9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMKSkgewogCQkJb2Zmc2V0ID0gY21kWzNdIDw8IDEwOwotCQkJcmV0ID0gcjMwMF9jaGVja19vZmZzZXQoZGV2X3ByaXYsIG9mZnNldCk7CisJCQlyZXQgPSAhcmFkZW9uX2NoZWNrX29mZnNldChkZXZfcHJpdiwgb2Zmc2V0KTsKIAkJCWlmIChyZXQpIHsKIAkJCQlEUk1fRVJST1IoIkludmFsaWQgYml0Ymx0IHNlY29uZCBvZmZzZXQgaXMgJTA4WFxuIiwgb2Zmc2V0KTsKIAkJCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwpAQCAtNTUxLDcgKzUzMSw3IEBACiAJCURSTV9FUlJPUigiSW52YWxpZCBpbmR4X2J1ZmZlciByZWcgYWRkcmVzcyAlMDhYXG4iLCBjbWRbMV0pOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KLQlyZXQgPSByMzAwX2NoZWNrX29mZnNldChkZXZfcHJpdiwgY21kWzJdKTsKKwlyZXQgPSAhcmFkZW9uX2NoZWNrX29mZnNldChkZXZfcHJpdiwgY21kWzJdKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiSW52YWxpZCBpbmR4X2J1ZmZlciBvZmZzZXQgaXMgJTA4WFxuIiwgY21kWzJdKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmgKaW5kZXggZjQ1Y2Q3Zi4uOGIxMDVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmgKQEAgLTMwMyw2ICszMDMsMjEgQEAKIGV4dGVybiBkcm1faW9jdGxfZGVzY190IHJhZGVvbl9pb2N0bHNbXTsKIGV4dGVybiBpbnQgcmFkZW9uX21heF9pb2N0bDsKIAorLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gaGFyZHdhcmUgYWRkcmVzcyBpcyBpbnNpZGUgdGhlIGZyYW1lYnVmZmVyIG9yIHRoZQorICogR0FSVCBhcmVhLgorICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcmFkZW9uX2NoZWNrX29mZnNldChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCisJCQkJCSAgdTY0IG9mZikKK3sKKwl1MzIgZmJfc3RhcnQgPSBkZXZfcHJpdi0+ZmJfbG9jYXRpb247CisJdTMyIGZiX2VuZCA9IGZiX3N0YXJ0ICsgZGV2X3ByaXYtPmZiX3NpemUgLSAxOworCXUzMiBnYXJ0X3N0YXJ0ID0gZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQ7CisJdTMyIGdhcnRfZW5kID0gZ2FydF9zdGFydCArIGRldl9wcml2LT5nYXJ0X3NpemUgLSAxOworCisJcmV0dXJuICgob2ZmID49IGZiX3N0YXJ0ICYmIG9mZiA8PSBmYl9lbmQpIHx8CisJCShvZmYgPj0gZ2FydF9zdGFydCAmJiBvZmYgPD0gZ2FydF9lbmQpKTsKK30KKwogCQkJCS8qIHJhZGVvbl9jcC5jICovCiBleHRlcm4gaW50IHJhZGVvbl9jcF9pbml0KERSTV9JT0NUTF9BUkdTKTsKIGV4dGVybiBpbnQgcmFkZW9uX2NwX3N0YXJ0KERSTV9JT0NUTF9BUkdTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lvYzMyLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9pb2MzMi5jCmluZGV4IDBjY2ZkMzYxLi4xZjFmOWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9pb2MzMi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lvYzMyLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAkJCSAgJmluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfUkFERU9OX0NQX0lOSVQsICh1bnNpZ25lZCBsb25nKWluaXQpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkJCSAgJmNsci0+ZGVwdGhfYm94ZXMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9SQURFT05fQ0xFQVIsICh1bnNpZ25lZCBsb25nKWNscik7CiB9CiAKQEAgLTE0OSw3ICsxNDksNyBAQAogCQkJICAmcmVxdWVzdC0+bWFzaykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQkgRFJNX0lPQ1RMX1JBREVPTl9TVElQUExFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIApAQCAtMjA0LDcgKzIwNCw3IEBACiAJCQkgICZpbWFnZS0+ZGF0YSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsCiAJCQkgRFJNX0lPQ1RMX1JBREVPTl9URVhUVVJFLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIH0KIApAQCAtMjM4LDcgKzIzOCw3IEBACiAJCQkgICZyZXF1ZXN0LT5wcmltKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfUkFERU9OX1ZFUlRFWDIsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCkBAIC0yNjgsNyArMjY4LDcgQEAKIAkJCSAgJnJlcXVlc3QtPmJveGVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZHJtX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSBEUk1fSU9DVExfUkFERU9OX0NNREJVRiwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKQEAgLTI5Myw3ICsyOTMsNyBAQAogCQkJICAmcmVxdWVzdC0+dmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9SQURFT05fR0VUUEFSQU0sICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCkBAIC0zMjIsNyArMzIyLDcgQEAKIAkJCSAgJnJlcXVlc3QtPnJlZ2lvbl9vZmZzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9SQURFT05fQUxMT0MsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJCSAgJnJlcXVlc3QtPmlycV9zZXEpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBkcm1faW9jdGwoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUsCisJcmV0dXJuIGRybV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLAogCQkJIERSTV9JT0NUTF9SQURFT05fSVJRX0VNSVQsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCkBAIC0zODYsNyArMzg2LDcgQEAKIAlpZiAoZm4gIT0gTlVMTCkKIAkJcmV0ID0gKCpmbikgKGZpbHAsIGNtZCwgYXJnKTsKIAllbHNlCi0JCXJldCA9IGRybV9pb2N0bChmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOworCQlyZXQgPSBkcm1faW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlscCwgY21kLCBhcmcpOwogCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9pcnEuYyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lycS5jCmluZGV4IGQ2MDUxOWQuLjNmZjBiYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lycS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lycS5jCkBAIC0xLDUgKzEsNSBAQAotLyogcmFkZW9uX2lycS5jIC0tIElSUSBoYW5kbGluZyBmb3IgcmFkZW9uIC0qLSBsaW51eC1jIC0qLQotICoKKy8qIHJhZGVvbl9pcnEuYyAtLSBJUlEgaGFuZGxpbmcgZm9yIHJhZGVvbiAtKi0gbGludXgtYyAtKi0gKi8KKy8qCiAgKiBDb3B5cmlnaHQgKEMpIFRoZSBXZWF0aGVyIENoYW5uZWwsIEluYy4gIDIwMDIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoZSBXZWF0aGVyIENoYW5uZWwgKFRNKSBmdW5kZWQgVHVuZ3N0ZW4gR3JhcGhpY3MgdG8gZGV2ZWxvcCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX21lbS5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fbWVtLmMKaW5kZXggMDMwYTZmYS4uNTE3Y2FkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fbWVtLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fbWVtLmMKQEAgLTEsNSArMSw1IEBACi0vKiByYWRlb25fbWVtLmMgLS0gU2ltcGxlIEdBUlQvZmIgbWVtb3J5IG1hbmFnZXIgZm9yIHJhZGVvbiAtKi0gbGludXgtYyAtKi0KLSAqCisvKiByYWRlb25fbWVtLmMgLS0gU2ltcGxlIEdBUlQvZmIgbWVtb3J5IG1hbmFnZXIgZm9yIHJhZGVvbiAtKi0gbGludXgtYyAtKi0gKi8KKy8qCiAgKiBDb3B5cmlnaHQgKEMpIFRoZSBXZWF0aGVyIENoYW5uZWwsIEluYy4gIDIwMDIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoZSBXZWF0aGVyIENoYW5uZWwgKFRNKSBmdW5kZWQgVHVuZ3N0ZW4gR3JhcGhpY3MgdG8gZGV2ZWxvcCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX3N0YXRlLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jCmluZGV4IDZlMDRmZGQuLjkzOGVjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX3N0YXRlLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fc3RhdGUuYwpAQCAtNDMsMTAgKzQzLDcgQEAKIAkJCQkJCSAgICB1MzIgKm9mZnNldCkKIHsKIAl1NjQgb2ZmID0gKm9mZnNldDsKLQl1MzIgZmJfc3RhcnQgPSBkZXZfcHJpdi0+ZmJfbG9jYXRpb247Ci0JdTMyIGZiX2VuZCA9IGZiX3N0YXJ0ICsgZGV2X3ByaXYtPmZiX3NpemUgLSAxOwotCXUzMiBnYXJ0X3N0YXJ0ID0gZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQ7Ci0JdTMyIGdhcnRfZW5kID0gZ2FydF9zdGFydCArIGRldl9wcml2LT5nYXJ0X3NpemUgLSAxOworCXUzMiBmYl9lbmQgPSBkZXZfcHJpdi0+ZmJfbG9jYXRpb24gKyBkZXZfcHJpdi0+ZmJfc2l6ZSAtIDE7CiAJc3RydWN0IGRybV9yYWRlb25fZHJpdmVyX2ZpbGVfZmllbGRzICpyYWRlb25fcHJpdjsKIAogCS8qIEhybSAuLi4gdGhlIHN0b3J5IG9mIHRoZSBvZmZzZXQgLi4uIFNvIHRoaXMgZnVuY3Rpb24gY29udmVydHMKQEAgLTY2LDggKzYzLDcgQEAKIAkvKiBGaXJzdCwgdGhlIGJlc3QgY2FzZSwgdGhlIG9mZnNldCBhbHJlYWR5IGxhbmRzIGluIGVpdGhlciB0aGUKIAkgKiBmcmFtZWJ1ZmZlciBvciB0aGUgR0FSVCBtYXBwZWQgc3BhY2UKIAkgKi8KLQlpZiAoKG9mZiA+PSBmYl9zdGFydCAmJiBvZmYgPD0gZmJfZW5kKSB8fAotCSAgICAob2ZmID49IGdhcnRfc3RhcnQgJiYgb2ZmIDw9IGdhcnRfZW5kKSkKKwlpZiAocmFkZW9uX2NoZWNrX29mZnNldChkZXZfcHJpdiwgb2ZmKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBPaywgdGhhdCBkaWRuJ3QgaGFwcGVuLi4uIG5vdyBjaGVjayBpZiB3ZSBoYXZlIGEgemVybyBiYXNlZApAQCAtODEsMTEgKzc3LDEwIEBACiAKIAkvKiBGaW5hbGx5LCBhc3N1bWUgd2UgYWltZWQgYXQgYSBHQVJUIG9mZnNldCBpZiBiZXlvbmQgdGhlIGZiICovCiAJaWYgKG9mZiA+IGZiX2VuZCkKLQkJb2ZmID0gb2ZmIC0gZmJfZW5kIC0gMSArIGdhcnRfc3RhcnQ7CisJCW9mZiA9IG9mZiAtIGZiX2VuZCAtIDEgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydDsKIAogCS8qIE5vdyByZWNoZWNrIGFuZCBmYWlsIGlmIG91dCBvZiBib3VuZHMgKi8KLQlpZiAoKG9mZiA+PSBmYl9zdGFydCAmJiBvZmYgPD0gZmJfZW5kKSB8fAotCSAgICAob2ZmID49IGdhcnRfc3RhcnQgJiYgb2ZmIDw9IGdhcnRfZW5kKSkgeworCWlmIChyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBvZmYpKSB7CiAJCURSTV9ERUJVRygib2Zmc2V0IGZpeGVkIHVwIHRvIDB4JXhcbiIsICh1bnNpZ25lZCBpbnQpb2ZmKTsKIAkJKm9mZnNldCA9IG9mZjsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3NhdmFnZV9iY2kuYyBiL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX2JjaS5jCmluZGV4IGE5YTg0ZjguLmI5NGZhYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX2JjaS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vc2F2YWdlX2JjaS5jCkBAIC05NjMsOCArOTYzLDggQEAKIAogCWV2ZW50LmNvdW50ID0gc2F2YWdlX2JjaV9lbWl0X2V2ZW50KGRldl9wcml2LCBldmVudC5mbGFncyk7CiAJZXZlbnQuY291bnQgfD0gZGV2X3ByaXYtPmV2ZW50X3dyYXAgPDwgMTY7Ci0JRFJNX0NPUFlfVE9fVVNFUl9JT0NUTCgmKChkcm1fc2F2YWdlX2V2ZW50X2VtaXRfdCBfX3VzZXIgKikgZGF0YSktPgotCQkJICAgICAgIGNvdW50LCBldmVudC5jb3VudCwgc2l6ZW9mKGV2ZW50LmNvdW50KSk7CisJRFJNX0NPUFlfVE9fVVNFUl9JT0NUTCgoZHJtX3NhdmFnZV9ldmVudF9lbWl0X3QgX191c2VyICopIGRhdGEsCisJCQkgICAgICAgZXZlbnQsIHNpemVvZihldmVudCkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHNwNTZrLmMgYi9kcml2ZXJzL2NoYXIvZHNwNTZrLmMKaW5kZXggOWIxYmY2MC4uMDZmMmRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RzcDU2ay5jCisrKyBiL2RyaXZlcnMvY2hhci9kc3A1NmsuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiBzdGF0aWMgc3NpemVfdCBkc3A1NmtfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAogCQkJICAgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZGV2ID0gaW1pbm9yKGlub2RlKSAmIDB4MGY7CiAKIAlzd2l0Y2goZGV2KQpAQCAtMjY0LDcgKzI2NCw3IEBACiBzdGF0aWMgc3NpemVfdCBkc3A1Nmtfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKIAkJCSAgICBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCBkZXYgPSBpbWlub3IoaW5vZGUpICYgMHgwZjsKIAogCXN3aXRjaChkZXYpCkBAIC00MjAsNyArNDIwLDcgQEAKICNpZiAwCiBzdGF0aWMgdW5zaWduZWQgaW50IGRzcDU2a19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCWludCBkZXYgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpICYgMHgwZjsKKwlpbnQgZGV2ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpICYgMHgwZjsKIAogCXN3aXRjaChkZXYpCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2R0bGsuYyBiL2RyaXZlcnMvY2hhci9kdGxrLmMKaW5kZXggNWU4MmMzYi4uZDQwMDVlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2R0bGsuYworKysgYi9kcml2ZXJzL2NoYXIvZHRsay5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIHN0YXRpYyBzc2l6ZV90IGR0bGtfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCiB7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJY2hhciBjaDsKIAlpbnQgaSA9IDAsIHJldHJpZXM7CiAKQEAgLTE3NCw3ICsxNzQsNyBAQAogCX0KICNlbmRpZgogCi0JaWYgKGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkgIT0gRFRMS19NSU5PUikKKwlpZiAoaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpICE9IERUTEtfTUlOT1IpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJd2hpbGUgKDEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lcGNhLmMgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCmluZGV4IDdjNzFlYjcuLmEwZjgyMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lcGNhLmMKKysrIGIvZHJpdmVycy9jaGFyL2VwY2EuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgaW50IGluZm9faW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyB2b2lkIHBjX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB0ZXJtaW9zICopOworc3RhdGljIHZvaWQgcGNfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGt0ZXJtaW9zICopOwogc3RhdGljIHZvaWQgZG9fc29mdGludChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgcGNfc3RvcChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIHBjX3N0YXJ0KHN0cnVjdCB0dHlfc3RydWN0ICopOwpAQCAtMTIzNiw2ICsxMjM2LDggQEAKIAlwY19kcml2ZXItPmluaXRfdGVybWlvcy5jX29mbGFnID0gMDsKIAlwY19kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IENMT0NBTCB8IEhVUENMOwogCXBjX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfbGZsYWcgPSAwOworCXBjX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gOTYwMDsKKwlwY19kcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAJcGNfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVc7CiAJdHR5X3NldF9vcGVyYXRpb25zKHBjX2RyaXZlciwgJnBjX29wcyk7CiAKQEAgLTEyNTAsNiArMTI1Miw4IEBACiAJcGNfaW5mby0+aW5pdF90ZXJtaW9zLmNfb2ZsYWcgPSAwOwogCXBjX2luZm8tPmluaXRfdGVybWlvcy5jX2xmbGFnID0gMDsKIAlwY19pbmZvLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTDsKKwlwY19pbmZvLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOworCXBjX2luZm8tPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAJcGNfaW5mby0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhwY19pbmZvLCAmaW5mb19vcHMpOwogCkBAIC0xOTk5LDcgKzIwMDMsNyBAQAogeyAvKiBCZWdpbiBlcGNhcGFyYW0gKi8KIAogCXVuc2lnbmVkIGludCBjbWRIZWFkOwotCXN0cnVjdCB0ZXJtaW9zICp0czsKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnRzOwogCXN0cnVjdCBib2FyZF9jaGFuIF9faW9tZW0gKmJjOwogCXVuc2lnbmVkIG12YWwsIGhmbG93LCBjZmxhZywgaWZsYWc7CiAKQEAgLTIxMTQsNyArMjExOCw3IEBACiB7IC8qIEJlZ2luIHJlY2VpdmVfZGF0YSAqLwogCiAJdW5jaGFyICpycHRyOwotCXN0cnVjdCB0ZXJtaW9zICp0cyA9IE5VTEw7CisJc3RydWN0IGt0ZXJtaW9zICp0cyA9IE5VTEw7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3QgYm9hcmRfY2hhbiBfX2lvbWVtICpiYzsKIAlpbnQgZGF0YVRvUmVhZCwgd3JhcGdhcCwgYnl0ZXNBdmFpbGFibGU7CkBAIC0yMzYyLDEyICsyMzY2LDE0IEBACiAJc3dpdGNoIChjbWQpIAogCXsgLyogQmVnaW4gc3dpdGNoIGNtZCAqLwogCisjaWYgMAkvKiBIYW5kbGVkIGJ5IGNhbGxpbmcgbGF5ZXIgcHJvcGVybHkgKi8KIAkJY2FzZSBUQ0dFVFM6Ci0JCQlpZiAoY29weV90b191c2VyKGFyZ3AsIHR0eS0+dGVybWlvcywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpCisJCQlpZiAoY29weV90b191c2VyKGFyZ3AsIHR0eS0+dGVybWlvcywgc2l6ZW9mKHN0cnVjdCBrdGVybWlvcykpKQogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgVENHRVRBOgogCQkJcmV0dXJuIGdldF90ZXJtaW8odHR5LCBhcmdwKTsKKyNlbmRpZgogCQljYXNlIFRDU0JSSzoJLyogU1ZJRCB2ZXJzaW9uOiBub24temVybyBhcmcgLS0+IG5vIGJyZWFrICovCiAJCQlyZXR2YWwgPSB0dHlfY2hlY2tfY2hhbmdlKHR0eSk7CiAJCQlpZiAocmV0dmFsKQpAQCAtMjUzNiw3ICsyNTQyLDcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJlZ2luIHBjX3NldF90ZXJtaW9zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdm9pZCBwY19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBwY19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogeyAvKiBCZWdpbiBwY19zZXRfdGVybWlvcyAqLwogCiAJc3RydWN0IGNoYW5uZWwgKmNoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VzcC5jIGIvZHJpdmVycy9jaGFyL2VzcC5jCmluZGV4IDkzYjU1MTkuLmQxYmZiYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lc3AuYworKysgYi9kcml2ZXJzL2NoYXIvZXNwLmMKQEAgLTE5MTUsNyArMTkxNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJzX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIHJzX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IGVzcF9zdHJ1Y3QgKmluZm8gPSAoc3RydWN0IGVzcF9zdHJ1Y3QgKil0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCmluZGV4IDg3MTI3ZTQuLmU3Njk4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCkBAIC03MTgsMTEgKzcxOCwxMSBAQAogCiAKIHZvaWQgZ3Nfc2V0X3Rlcm1pb3MgKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCAKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0ZXJtaW9zICogb2xkX3Rlcm1pb3MpCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDsKIAlpbnQgYmF1ZHJhdGUsIHRtcCwgcnY7Ci0Jc3RydWN0IHRlcm1pb3MgKnRpb3NwOworCXN0cnVjdCBrdGVybWlvcyAqdGlvc3A7CiAKIAlmdW5jX2VudGVyKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNzLmMgYi9kcml2ZXJzL2NoYXIvaHZjcy5jCmluZGV4IGQwOTA2MjIuLjIwN2Y3MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNzLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y3MuYwpAQCAtMTkyLDExICsxOTIsMTMgQEAKICAqIHRoYXQgd2lsbCBjYXVzZSBlY2hvaW5nIG9yIHdlJ2xsIGdvIGludG8gcmVjdXJzaXZlIGxvb3AgZWNob2luZyBjaGFycyBiYWNrCiAgKiBhbmQgZm9ydGggd2l0aCB0aGUgY29uc29sZSBkcml2ZXJzLgogICovCi1zdGF0aWMgc3RydWN0IHRlcm1pb3MgaHZjc190dHlfdGVybWlvcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qga3Rlcm1pb3MgaHZjc190dHlfdGVybWlvcyA9IHsKIAkuY19pZmxhZyA9IElHTkJSSyB8IElHTlBBUiwKIAkuY19vZmxhZyA9IE9QT1NULAogCS5jX2NmbGFnID0gQjM4NDAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCwKLQkuY19jYyA9IElOSVRfQ19DQworCS5jX2NjID0gSU5JVF9DX0NDLAorCS5jX2lzcGVlZCA9IDM4NDAwLAorCS5jX29zcGVlZCA9IDM4NDAwCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2c2kuYyBiL2RyaXZlcnMvY2hhci9odnNpLmMKaW5kZXggODJhNDFkNS4uZDc4MDY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2c2kuYworKysgYi9kcml2ZXJzL2NoYXIvaHZzaS5jCkBAIC0xMTYxLDYgKzExNjEsOCBAQAogCWh2c2lfZHJpdmVyLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NZU1RFTTsKIAlodnNpX2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwogCWh2c2lfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTDsKKwlodnNpX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gOTYwMDsKKwlodnNpX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDsKIAlodnNpX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhodnNpX2RyaXZlciwgJmh2c2lfb3BzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9hbWQtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2FtZC1ybmcuYwppbmRleCA3MWU0ZTBmLi41NTZmZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2FtZC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2FtZC1ybmcuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJaHdybmdfdW5yZWdpc3RlcigmYW1kX3JuZyk7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChtb2RfaW5pdCk7Cittb2R1bGVfaW5pdChtb2RfaW5pdCk7CiBtb2R1bGVfZXhpdChtb2RfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIlRoZSBMaW51eCBLZXJuZWwgdGVhbSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9nZW9kZS1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vZ2VvZGUtcm5nLmMKaW5kZXggZDM3Y2VkMC4uOGU4NjU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9nZW9kZS1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2dlb2RlLXJuZy5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlpb3VubWFwKG1lbSk7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChtb2RfaW5pdCk7Cittb2R1bGVfaW5pdChtb2RfaW5pdCk7CiBtb2R1bGVfZXhpdChtb2RfZXhpdCk7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiSC9XIFJORyBkcml2ZXIgZm9yIEFNRCBHZW9kZSBMWCBDUFVzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2ludGVsLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9pbnRlbC1ybmcuYwppbmRleCA4ZWZiYzljLi5mMjJlNzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2ludGVsLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vaW50ZWwtcm5nLmMKQEAgLTE0Myw2ICsxNDMsMTEgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX3RibCk7CiAKK3N0YXRpYyBfX2luaXRkYXRhIGludCBub19md2hfZGV0ZWN0OworbW9kdWxlX3BhcmFtKG5vX2Z3aF9kZXRlY3QsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vX2Z3aF9kZXRlY3QsICJTa2lwIEZXSCBkZXRlY3Rpb246XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcG9zaXRpdmUgdmFsdWUgLSBza2lwIGlmIEZXSCBzcGFjZSBsb2NrZWQgcmVhZC1vbmx5XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbmVnYXRpdmUgdmFsdWUgLSBza2lwIGFsd2F5cyIpOwogCiBzdGF0aWMgaW5saW5lIHU4IGh3c3RhdHVzX2dldCh2b2lkIF9faW9tZW0gKm1lbSkKIHsKQEAgLTI0MCw2ICsyNDUsMTEgQEAKIAlpZiAoIWRldikKIAkJZ290byBvdXQ7IC8qIERldmljZSBub3QgZm91bmQuICovCiAKKwlpZiAobm9fZndoX2RldGVjdCA8IDApIHsKKwkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJZ290byBmd2hfZG9uZTsKKwl9CisKIAkvKiBDaGVjayBmb3IgSW50ZWwgODI4MDIgKi8KIAlpZiAoZGV2LT5kZXZpY2UgPCAweDI2NDApIHsKIAkJZndoX2RlY19lbjFfb2ZmID0gRldIX0RFQ19FTjFfUkVHX09MRDsKQEAgLTI1Miw2ICsyNjIsMjMgQEAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGZ3aF9kZWNfZW4xX29mZiwgJmZ3aF9kZWNfZW4xX3ZhbCk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBiaW9zX2NudGxfb2ZmLCAmYmlvc19jbnRsX3ZhbCk7CiAKKwlpZiAoKGJpb3NfY250bF92YWwgJgorCSAgICAgKEJJT1NfQ05UTF9MT0NLX0VOQUJMRV9NQVNLfEJJT1NfQ05UTF9XUklURV9FTkFCTEVfTUFTSykpCisJICAgID09IEJJT1NfQ05UTF9MT0NLX0VOQUJMRV9NQVNLKSB7CisJCXN0YXRpYyBfX2luaXRkYXRhIC8qY29uc3QqLyBjaGFyIHdhcm5pbmdbXSA9CisJCQlLRVJOX1dBUk5JTkcgUEZYICJGaXJtd2FyZSBzcGFjZSBpcyBsb2NrZWQgcmVhZC1vbmx5LiBJZiB5b3UgY2FuJ3Qgb3JcbiIKKwkJCUtFUk5fV0FSTklORyBQRlggImRvbid0IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGluIGZpcm13YXJlIHNldHVwLCBhbmQgaWZcbiIKKwkJCUtFUk5fV0FSTklORyBQRlggInlvdSBhcmUgY2VydGFpbiB0aGF0IHlvdXIgc3lzdGVtIGhhcyBhIGZ1bmN0aW9uYWxcbiIKKwkJCUtFUk5fV0FSTklORyBQRlggIlJORywgdHJ5IHVzaW5nIHRoZSAnbm9fZndoX2RldGVjdCcgb3B0aW9uLlxuIjsKKworCQlwY2lfZGV2X3B1dChkZXYpOworCQlpZiAobm9fZndoX2RldGVjdCkKKwkJCWdvdG8gZndoX2RvbmU7CisJCXByaW50ayh3YXJuaW5nKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKIAltZW0gPSBpb3JlbWFwX25vY2FjaGUoSU5URUxfRldIX0FERFIsIElOVEVMX0ZXSF9BRERSX0xFTik7CiAJaWYgKG1lbSA9PSBOVUxMKSB7CiAJCXBjaV9kZXZfcHV0KGRldik7CkBAIC0yODAsOCArMzA3LDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwKIAkJICAgICAgICAgICAgICAgICAgICAgIGZ3aF9kZWNfZW4xX29mZiwKIAkJICAgICAgICAgICAgICAgICAgICAgIGZ3aF9kZWNfZW4xX3ZhbCB8IEZXSF9GOF9FTl9NQVNLKTsKLQlpZiAoIShiaW9zX2NudGxfdmFsICYKLQkgICAgICAoQklPU19DTlRMX0xPQ0tfRU5BQkxFX01BU0t8QklPU19DTlRMX1dSSVRFX0VOQUJMRV9NQVNLKSkpCisJaWYgKCEoYmlvc19jbnRsX3ZhbCAmIEJJT1NfQ05UTF9XUklURV9FTkFCTEVfTUFTSykpCiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsCiAJCSAgICAgICAgICAgICAgICAgICAgICBiaW9zX2NudGxfb2ZmLAogCQkgICAgICAgICAgICAgICAgICAgICAgYmlvc19jbnRsX3ZhbCB8IEJJT1NfQ05UTF9XUklURV9FTkFCTEVfTUFTSyk7CkBAIC0zMTUsNiArMzQxLDggQEAKIAkJZ290byBvdXQ7CiAJfQogCitmd2hfZG9uZToKKwogCWVyciA9IC1FTk9NRU07CiAJbWVtID0gaW9yZW1hcChJTlRFTF9STkdfQUREUiwgSU5URUxfUk5HX0FERFJfTEVOKTsKIAlpZiAoIW1lbSkKQEAgLTM1MCw3ICszNzgsNyBAQAogCWlvdW5tYXAobWVtKTsKIH0KIAotc3Vic3lzX2luaXRjYWxsKG1vZF9pbml0KTsKK21vZHVsZV9pbml0KG1vZF9pbml0KTsKIG1vZHVsZV9leGl0KG1vZF9leGl0KTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJIL1cgUk5HIGRyaXZlciBmb3IgSW50ZWwgY2hpcHNldHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vaXhwNHh4LXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9peHA0eHgtcm5nLmMKaW5kZXggYzljYWZmNS4uYmFiNDNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9peHA0eHgtcm5nLmMKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9peHA0eHgtcm5nLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAlpb3VubWFwKHJuZ19iYXNlKTsKIH0KIAotc3Vic3lzX2luaXRjYWxsKGl4cDR4eF9ybmdfaW5pdCk7Cittb2R1bGVfaW5pdChpeHA0eHhfcm5nX2luaXQpOwogbW9kdWxlX2V4aXQoaXhwNHh4X3JuZ19leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBwbGV4aXR5Lm5ldD4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlhLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aWEtcm5nLmMKaW5kZXggMGU3ODZiNi4uOWViZjg0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aWEtcm5nLmMKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS92aWEtcm5nLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCWh3cm5nX3VucmVnaXN0ZXIoJnZpYV9ybmcpOwogfQogCi1zdWJzeXNfaW5pdGNhbGwobW9kX2luaXQpOworbW9kdWxlX2luaXQobW9kX2luaXQpOwogbW9kdWxlX2V4aXQobW9kX2V4aXQpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkgvVyBSTkcgZHJpdmVyIGZvciBWSUEgY2hpcHNldHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDIvaTJlbGxpcy5oIGIvZHJpdmVycy9jaGFyL2lwMi9pMmVsbGlzLmgKaW5kZXggNWVhYmU0Ny4uNDMzMzA1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMi9pMmVsbGlzLmgKKysrIGIvZHJpdmVycy9jaGFyL2lwMi9pMmVsbGlzLmgKQEAgLTYwNiw5ICs2MDYsOSBAQAogLy8gY29kZSBhbmQgcmV0dXJuaW5nLgogLy8KICNkZWZpbmUgQ09NUExFVEUocEIsY29kZSkgXAotCWlmKDEpeyBcCisJZG8geyBcCiAJCSBwQi0+aTJlRXJyb3IgPSBjb2RlOyBcCiAJCSByZXR1cm4gKGNvZGUgPT0gSTJFRV9HT09EKTtcCi0JfQorCX0gd2hpbGUgKDApCiAKICNlbmRpZiAgIC8vIEkyRUxMSVNfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMgYi9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYwppbmRleCBjZGEyNDU5Li43YzcwMzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYworKysgYi9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiBzdGF0aWMgaW50ICBpcDJfY2hhcnNfaW5fYnVmKFBUVFkpOwogc3RhdGljIHZvaWQgaXAyX2ZsdXNoX2J1ZmZlcihQVFRZKTsKIHN0YXRpYyBpbnQgIGlwMl9pb2N0bChQVFRZLCBzdHJ1Y3QgZmlsZSAqLCBVSU5ULCBVTE9ORyk7Ci1zdGF0aWMgdm9pZCBpcDJfc2V0X3Rlcm1pb3MoUFRUWSwgc3RydWN0IHRlcm1pb3MgKik7CitzdGF0aWMgdm9pZCBpcDJfc2V0X3Rlcm1pb3MoUFRUWSwgc3RydWN0IGt0ZXJtaW9zICopOwogc3RhdGljIHZvaWQgaXAyX3NldF9saW5lX2Rpc2NpcGxpbmUoUFRUWSk7CiBzdGF0aWMgdm9pZCBpcDJfdGhyb3R0bGUoUFRUWSk7CiBzdGF0aWMgdm9pZCBpcDJfdW50aHJvdHRsZShQVFRZKTsKQEAgLTE5OCw3ICsxOTgsNyBAQAogCiBzdGF0aWMgdm9pZCBpcDJfd2FpdF91bnRpbF9zZW50KFBUVFksaW50KTsKIAotc3RhdGljIHZvaWQgc2V0X3BhcmFtcyAoaTJDaGFuU3RyUHRyLCBzdHJ1Y3QgdGVybWlvcyAqKTsKK3N0YXRpYyB2b2lkIHNldF9wYXJhbXMgKGkyQ2hhblN0clB0ciwgc3RydWN0IGt0ZXJtaW9zICopOwogc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oaTJDaGFuU3RyUHRyLCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKik7CiBzdGF0aWMgaW50IHNldF9zZXJpYWxfaW5mbyhpMkNoYW5TdHJQdHIsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKTsKIApAQCAtMjM5OCw3ICsyMzk4LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQKLWlwMl9zZXRfdGVybWlvcyggUFRUWSB0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyApCitpcDJfc2V0X3Rlcm1pb3MoIFBUVFkgdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zICkKIHsKIAlpMkNoYW5TdHJQdHIgcENoID0gKGkyQ2hhblN0clB0cil0dHktPmRyaXZlcl9kYXRhOwogCkBAIC0yNDQwLDExICsyNDQwLDExIEBACiAvKiBjaGFuZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkCi1zZXRfcGFyYW1zKCBpMkNoYW5TdHJQdHIgcENoLCBzdHJ1Y3QgdGVybWlvcyAqb190aW9zICkKK3NldF9wYXJhbXMoIGkyQ2hhblN0clB0ciBwQ2gsIHN0cnVjdCBrdGVybWlvcyAqb190aW9zICkKIHsKIAl0Y2ZsYWdfdCBjZmxhZywgaWZsYWcsIGxmbGFnOwogCWNoYXIgc3RvcF9jaGFyLCBzdGFydF9jaGFyOwotCXN0cnVjdCB0ZXJtaW9zIGR1bW15OworCXN0cnVjdCBrdGVybWlvcyBkdW1teTsKIAogCWxmbGFnID0gcENoLT5wVFRZLT50ZXJtaW9zLT5jX2xmbGFnOwogCWNmbGFnID0gcENoLT5wVFRZLT50ZXJtaW9zLT5jX2NmbGFnOwpAQCAtMjcwMCw3ICsyNzAwLDcgQEAKIHNzaXplX3QKIGlwMl9pcGxfcmVhZChzdHJ1Y3QgZmlsZSAqcEZpbGUsIGNoYXIgX191c2VyICpwRGF0YSwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZiApCiB7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKHBGaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKHBGaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpbnQgcmMgPSAwOwogCiAjaWZkZWYgSVAyREVCVUdfSVBMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2J0X3NtLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2J0X3NtLmMKaW5kZXggNmM1OWJhYS4uZTczNjExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9idF9zbS5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfYnRfc20uYwpAQCAtMzcsOCArMzcsMTAgQEAKICNkZWZpbmUgQlRfREVCVUdfRU5BQkxFCTEJLyogR2VuZXJpYyBtZXNzYWdlcyAqLwogI2RlZmluZSBCVF9ERUJVR19NU0cJMgkvKiBQcmludHMgYWxsIHJlcXVlc3QvcmVzcG9uc2UgYnVmZmVycyAqLwogI2RlZmluZSBCVF9ERUJVR19TVEFURVMJNAkvKiBWZXJib3NlIGxvb2sgYXQgc3RhdGUgY2hhbmdlcyAqLworLyogQlRfREVCVUdfT0ZGIG11c3QgYmUgemVybyB0byBjb3JyZXNwb25kIHRvIHRoZSBkZWZhdWx0IHVuaW5pdGlhbGl6ZWQKKyAgIHZhbHVlICovCiAKLXN0YXRpYyBpbnQgYnRfZGVidWcgPSBCVF9ERUJVR19PRkY7CitzdGF0aWMgaW50IGJ0X2RlYnVnOyAvKiAwID09IEJUX0RFQlVHX09GRiAqLwogCiBtb2R1bGVfcGFyYW0oYnRfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGJ0X2RlYnVnLCAiZGVidWcgYml0bWFzaywgMT1lbmFibGUsIDI9bWVzc2FnZXMsIDQ9c3RhdGVzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jCmluZGV4IDM3NWQzMzcuLmZmMmQwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jCkBAIC03OTgsNyArNzk4LDcgQEAKIAkJaWYgKGNvcHlfdG9fdXNlcihwcmVjdjY0LCAmcmVjdjY0LCBzaXplb2YocmVjdjY0KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlyYyA9IGlwbWlfaW9jdGwoZmlsZXAtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlcCwKKwkJcmMgPSBpcG1pX2lvY3RsKGZpbGVwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlcCwKIAkJCQkoKGNtZCA9PSBDT01QQVRfSVBNSUNUTF9SRUNFSVZFX01TRykKIAkJCQkgPyBJUE1JQ1RMX1JFQ0VJVkVfTVNHCiAJCQkJIDogSVBNSUNUTF9SRUNFSVZFX01TR19UUlVOQyksCkBAIC04MTUsNyArODE1LDcgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAlkZWZhdWx0OgotCQlyZXR1cm4gaXBtaV9pb2N0bChmaWxlcC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGVwLCBjbWQsIGFyZyk7CisJCXJldHVybiBpcG1pX2lvY3RsKGZpbGVwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlcCwgY21kLCBhcmcpOwogCX0KIH0KICNlbmRpZgpAQCAtODM0LDcgKzgzNCw3IEBACiAKICNkZWZpbmUgREVWSUNFX05BTUUgICAgICJpcG1pZGV2IgogCi1zdGF0aWMgaW50IGlwbWlfbWFqb3IgPSAwOworc3RhdGljIGludCBpcG1pX21ham9yOwogbW9kdWxlX3BhcmFtKGlwbWlfbWFqb3IsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlwbWlfbWFqb3IsICJTZXRzIHRoZSBtYWpvciBudW1iZXIgb2YgdGhlIElQTUkgZGV2aWNlLiAgQnkiCiAJCSAiIGRlZmF1bHQsIG9yIGlmIHlvdSBzZXQgaXQgdG8gemVybywgaXQgd2lsbCBjaG9vc2UgdGhlIG5leHQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IDU3MDNlZTIuLjUzNTgyYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC01MywxMCArNTMsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgaXBtaV9yZWN2X21zZyAqaXBtaV9hbGxvY19yZWN2X21zZyh2b2lkKTsKIHN0YXRpYyBpbnQgaXBtaV9pbml0X21zZ2hhbmRsZXIodm9pZCk7CiAKLXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworc3RhdGljIGludCBpbml0aWFsaXplZDsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2lwbWlfcm9vdCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2lwbWlfcm9vdDsKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiAvKiBSZW1haW4gaW4gYXV0by1tYWludGVuYW5jZSBtb2RlIGZvciB0aGlzIGFtb3VudCBvZiB0aW1lIChpbiBtcykuICovCkBAIC0yMTQyLDggKzIxNDIsNyBAQAogCWJtYyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBibWNfZGV2aWNlLCByZWZjb3VudCk7CiAKIAlyZW1vdmVfZmlsZXMoYm1jKTsKLQlpZiAoYm1jLT5kZXYpCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGJtYy0+ZGV2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihibWMtPmRldik7CiAJa2ZyZWUoYm1jKTsKIH0KIApAQCAtMjM0MSw4ICsyMzQwLDcgQEAKIAogCQl3aGlsZSAoaXBtaV9maW5kX2JtY19wcm9kX2Rldl9pZCgmaXBtaWRyaXZlciwKIAkJCQkJCSBibWMtPmlkLnByb2R1Y3RfaWQsCi0JCQkJCQkgYm1jLT5pZC5kZXZpY2VfaWQpKQotCQl7CisJCQkJCQkgYm1jLT5pZC5kZXZpY2VfaWQpKSB7CiAJCQlpZiAoIXdhcm5fcHJpbnRlZCkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCiAJCQkJICAgICAgICJUaGlzIG1hY2hpbmUgaGFzIHR3byBkaWZmZXJlbnQgQk1DcyIKQEAgLTM2NTEsOCArMzY0OSw2IEBACiAJdW5zaWduZWQgbG9uZyAgICAgICAgZmxhZ3M7CiAJaW50ICAgICAgICAgICAgICAgICAgaTsKIAotCUlOSVRfTElTVF9IRUFEKCZ0aW1lb3V0cyk7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaW50ZiwgJmlwbWlfaW50ZXJmYWNlcywgbGluaykgewogCQkvKiBTZWUgaWYgYW55IHdhaXRpbmcgbWVzc2FnZXMgbmVlZCB0byBiZSBwcm9jZXNzZWQuICovCkBAIC0zNjczLDYgKzM2NjksNyBAQAogCQkvKiBHbyB0aHJvdWdoIHRoZSBzZXEgdGFibGUgYW5kIGZpbmQgYW55IG1lc3NhZ2VzIHRoYXQKIAkJICAgaGF2ZSB0aW1lZCBvdXQsIHB1dHRpbmcgdGhlbSBpbiB0aGUgdGltZW91dHMKIAkJICAgbGlzdC4gKi8KKwkJSU5JVF9MSVNUX0hFQUQoJnRpbWVvdXRzKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmludGYtPnNlcV9sb2NrLCBmbGFncyk7CiAJCWZvciAoaSA9IDA7IGkgPCBJUE1JX0lQTUJfTlVNX1NFUTsgaSsrKQogCQkJY2hlY2tfbXNnX3RpbWVvdXQoaW50ZiwgJihpbnRmLT5zZXFfdGFibGVbaV0pLApAQCAtNDA0Myw3ICs0MDQwLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSVBNSV9QQU5JQ19FVkVOVCAqLwogCi1zdGF0aWMgaW50IGhhc19wYW5pY2tlZCA9IDA7CitzdGF0aWMgaW50IGhhc19wYW5pY2tlZDsKIAogc3RhdGljIGludCBwYW5pY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgZXZlbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMKaW5kZXggNTk3ZWI0Zi4uOWQyMzEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYwpAQCAtNTgsMTAgKzU4LDEwIEBACiBzdGF0aWMgaW50IGlmbnVtX3RvX3VzZSA9IC0xOwogCiAvKiBPdXIgbG9jYWwgc3RhdGUuICovCi1zdGF0aWMgaW50IHJlYWR5ID0gMDsKK3N0YXRpYyBpbnQgcmVhZHk7CiBzdGF0aWMgaXBtaV91c2VyX3QgaXBtaV91c2VyOwogc3RhdGljIGludCBpcG1pX2lmbnVtOwotc3RhdGljIHZvaWQgKCpzcGVjaWZpY19wb3dlcm9mZl9mdW5jKShpcG1pX3VzZXJfdCB1c2VyKSA9IE5VTEw7CitzdGF0aWMgdm9pZCAoKnNwZWNpZmljX3Bvd2Vyb2ZmX2Z1bmMpKGlwbWlfdXNlcl90IHVzZXIpOwogCiAvKiBIb2xkcyB0aGUgb2xkIHBvd2Vyb2ZmIGZ1bmN0aW9uIHNvIHdlIGNhbiByZXN0b3JlIGl0IG9uIHJlbW92YWwuICovCiBzdGF0aWMgdm9pZCAoKm9sZF9wb3dlcm9mZl9mdW5jKSh2b2lkKTsKQEAgLTE4Miw3ICsxODIsNyBAQAogI2RlZmluZSBJUE1JX01PVE9ST0xBX01BTlVGQUNUVVJFUl9JRAkJMHgwMDAwQTEKICNkZWZpbmUgSVBNSV9NT1RPUk9MQV9QUFNfSVBNQ19QUk9EVUNUX0lECTB4MDA1MQogCi1zdGF0aWMgdm9pZCAoKmF0Y2Ffb2VtX3Bvd2Vyb2ZmX2hvb2spKGlwbWlfdXNlcl90IHVzZXIpID0gTlVMTDsKK3N0YXRpYyB2b2lkICgqYXRjYV9vZW1fcG93ZXJvZmZfaG9vaykoaXBtaV91c2VyX3QgdXNlcik7CiAKIHN0YXRpYyB2b2lkIHBwc19wb3dlcm9mZl9hdGNhIChpcG1pX3VzZXJfdCB1c2VyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYwppbmRleCA4MWEwYzg5Li5mMWFmZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYwpAQCAtODQ1LDcgKzg0NSw3IEBACiAJYXRvbWljX3NldCgmc21pX2luZm8tPnJlcV9ldmVudHMsIDEpOwogfQogCi1zdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CiAKIHN0YXRpYyB2b2lkIHNtaV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTEwMTgsMTcgKzEwMTgsMTcgQEAKIHN0YXRpYyBpbnQgICAgICAgICAgIGlycXNbU0lfTUFYX1BBUk1TXTsKIHN0YXRpYyBpbnQgbnVtX2lycXM7CiBzdGF0aWMgaW50ICAgICAgICAgICByZWdzcGFjaW5nc1tTSV9NQVhfUEFSTVNdOwotc3RhdGljIGludCBudW1fcmVnc3BhY2luZ3MgPSAwOworc3RhdGljIGludCBudW1fcmVnc3BhY2luZ3M7CiBzdGF0aWMgaW50ICAgICAgICAgICByZWdzaXplc1tTSV9NQVhfUEFSTVNdOwotc3RhdGljIGludCBudW1fcmVnc2l6ZXMgPSAwOworc3RhdGljIGludCBudW1fcmVnc2l6ZXM7CiBzdGF0aWMgaW50ICAgICAgICAgICByZWdzaGlmdHNbU0lfTUFYX1BBUk1TXTsKLXN0YXRpYyBpbnQgbnVtX3JlZ3NoaWZ0cyA9IDA7CitzdGF0aWMgaW50IG51bV9yZWdzaGlmdHM7CiBzdGF0aWMgaW50IHNsYXZlX2FkZHJzW1NJX01BWF9QQVJNU107Ci1zdGF0aWMgaW50IG51bV9zbGF2ZV9hZGRycyA9IDA7CitzdGF0aWMgaW50IG51bV9zbGF2ZV9hZGRyczsKIAogI2RlZmluZSBJUE1JX0lPX0FERFJfU1BBQ0UgIDAKICNkZWZpbmUgSVBNSV9NRU1fQUREUl9TUEFDRSAxCi1zdGF0aWMgY2hhciAqYWRkcl9zcGFjZV90b19zdHJbXSA9IHsgIkkvTyIsICJtZW0iIH07CitzdGF0aWMgY2hhciAqYWRkcl9zcGFjZV90b19zdHJbXSA9IHsgImkvbyIsICJtZW0iIH07CiAKIHN0YXRpYyBpbnQgaG90bW9kX2hhbmRsZXIoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CiAKQEAgLTEzOTcsMjAgKzEzOTcsNyBAQAogCXsgImkvbyIsCUlQTUlfSU9fQUREUl9TUEFDRSB9LAogCXsgTlVMTCB9CiB9Owotc3RhdGljIGludCBpcG1pX3N0cmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQotewotCXdoaWxlICgqczEgfHwgKnMyKSB7Ci0JCWlmICghKnMxKQotCQkJcmV0dXJuIC0xOwotCQlpZiAoISpzMikKLQkJCXJldHVybiAxOwotCQlpZiAoKnMxICE9ICpzMikKLQkJCXJldHVybiAqczEgLSAqczI7Ci0JCXMxKys7Ci0JCXMyKys7Ci0JfQotCXJldHVybiAwOwotfQorCiBzdGF0aWMgaW50IHBhcnNlX3N0cihzdHJ1Y3QgaG90bW9kX3ZhbHMgKnYsIGludCAqdmFsLCBjaGFyICpuYW1lLCBjaGFyICoqY3VycikKIHsKIAljaGFyICpzOwpAQCAtMTQyNCw3ICsxNDExLDcgQEAKIAkqcyA9ICdcMCc7CiAJcysrOwogCWZvciAoaSA9IDA7IGhvdG1vZF9vcHNbaV0ubmFtZTsgaSsrKSB7Ci0JCWlmIChpcG1pX3N0cmNhc2VjbXAoKmN1cnIsIHZbaV0ubmFtZSkgPT0gMCkgeworCQlpZiAoc3RyY21wKCpjdXJyLCB2W2ldLm5hbWUpID09IDApIHsKIAkJCSp2YWwgPSB2W2ldLnZhbDsKIAkJCSpjdXJyID0gczsKIAkJCXJldHVybiAwOwpAQCAtMTQzNSwxMCArMTQyMiwzNCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IGNoZWNrX2hvdG1vZF9pbnRfb3AoY29uc3QgY2hhciAqY3VyciwgY29uc3QgY2hhciAqb3B0aW9uLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCAqdmFsKQoreworCWNoYXIgKm47CisKKwlpZiAoc3RyY21wKGN1cnIsIG5hbWUpID09IDApIHsKKwkJaWYgKCFvcHRpb24pIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkgICAgICAgIk5vIG9wdGlvbiBnaXZlbiBmb3IgJyVzJ1xuIiwKKwkJCSAgICAgICBjdXJyKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCSp2YWwgPSBzaW1wbGVfc3RydG91bChvcHRpb24sICZuLCAwKTsKKwkJaWYgKCgqbiAhPSAnXDAnKSB8fCAoKm9wdGlvbiA9PSAnXDAnKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJCSAgICAgICAiQmFkIG9wdGlvbiBnaXZlbiBmb3IgJyVzJ1xuIiwKKwkJCSAgICAgICBjdXJyKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBob3Rtb2RfaGFuZGxlcihjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWNoYXIgKnN0ciA9IGtzdHJkdXAodmFsLCBHRlBfS0VSTkVMKTsKLQlpbnQgIHJ2ID0gLUVJTlZBTDsKKwlpbnQgIHJ2OwogCWNoYXIgKm5leHQsICpjdXJyLCAqcywgKm4sICpvOwogCWVudW0gaG90bW9kX29wIG9wOwogCWVudW0gc2lfdHlwZSBzaV90eXBlOwpAQCAtMTQ1MCwxMyArMTQ2MSwxNSBAQAogCWludCBpcnE7CiAJaW50IGlwbWI7CiAJaW50IGl2YWw7CisJaW50IGxlbjsKIAlzdHJ1Y3Qgc21pX2luZm8gKmluZm87CiAKIAlpZiAoIXN0cikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBLaWxsIGFueSB0cmFpbGluZyBzcGFjZXMsIGFzIHdlIGNhbiBnZXQgYSAiXG4iIGZyb20gZWNoby4gKi8KLQlpdmFsID0gc3RybGVuKHN0cikgLSAxOworCWxlbiA9IHN0cmxlbihzdHIpOworCWl2YWwgPSBsZW4gLSAxOwogCXdoaWxlICgoaXZhbCA+PSAwKSAmJiBpc3NwYWNlKHN0cltpdmFsXSkpIHsKIAkJc3RyW2l2YWxdID0gJ1wwJzsKIAkJaXZhbC0tOwpAQCAtMTUxMywzNSArMTUyNiwzNyBAQAogCQkJCSpvID0gJ1wwJzsKIAkJCQlvKys7CiAJCQl9Ci0jZGVmaW5lIEhPVE1PRF9JTlRfT1BUKG5hbWUsIHZhbCkgXAotCQkJaWYgKGlwbWlfc3RyY2FzZWNtcChjdXJyLCBuYW1lKSA9PSAwKSB7CQlcCi0JCQkJaWYgKCFvKSB7CQkJCVwKLQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgJCVwKLQkJCQkJICAgICAgICJObyBvcHRpb24gZ2l2ZW4gZm9yICclcydcbiIsIFwKLQkJCQkJCWN1cnIpOwkJCVwKLQkJCQkJZ290byBvdXQ7CQkJXAotCQkJCX0JCQkJCVwKLQkJCQl2YWwgPSBzaW1wbGVfc3RydG91bChvLCAmbiwgMCk7CQlcCi0JCQkJaWYgKCgqbiAhPSAnXDAnKSB8fCAoKm8gPT0gJ1wwJykpIHsJXAotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAkJXAotCQkJCQkgICAgICAgIkJhZCBvcHRpb24gZ2l2ZW4gZm9yICclcydcbiIsIFwKLQkJCQkJICAgICAgIGN1cnIpOwkJCVwKLQkJCQkJZ290byBvdXQ7CQkJXAotCQkJCX0JCQkJCVwKLQkJCX0KLQotCQkJSE9UTU9EX0lOVF9PUFQoInJzcCIsIHJlZ3NwYWNpbmcpCi0JCQllbHNlIEhPVE1PRF9JTlRfT1BUKCJyc2kiLCByZWdzaXplKQotCQkJZWxzZSBIT1RNT0RfSU5UX09QVCgicnNoIiwgcmVnc2hpZnQpCi0JCQllbHNlIEhPVE1PRF9JTlRfT1BUKCJpcnEiLCBpcnEpCi0JCQllbHNlIEhPVE1PRF9JTlRfT1BUKCJpcG1iIiwgaXBtYikKLQkJCWVsc2UgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCi0JCQkJICAgICAgICJJbnZhbGlkIGhvdG1vZCBvcHRpb24gJyVzJ1xuIiwKLQkJCQkgICAgICAgY3Vycik7CisJCQlydiA9IGNoZWNrX2hvdG1vZF9pbnRfb3AoY3VyciwgbywgInJzcCIsICZyZWdzcGFjaW5nKTsKKwkJCWlmIChydiA8IDApCiAJCQkJZ290byBvdXQ7Ci0JCQl9Ci0jdW5kZWYgSE9UTU9EX0lOVF9PUFQKKwkJCWVsc2UgaWYgKHJ2KQorCQkJCWNvbnRpbnVlOworCQkJcnYgPSBjaGVja19ob3Rtb2RfaW50X29wKGN1cnIsIG8sICJyc2kiLCAmcmVnc2l6ZSk7CisJCQlpZiAocnYgPCAwKQorCQkJCWdvdG8gb3V0OworCQkJZWxzZSBpZiAocnYpCisJCQkJY29udGludWU7CisJCQlydiA9IGNoZWNrX2hvdG1vZF9pbnRfb3AoY3VyciwgbywgInJzaCIsICZyZWdzaGlmdCk7CisJCQlpZiAocnYgPCAwKQorCQkJCWdvdG8gb3V0OworCQkJZWxzZSBpZiAocnYpCisJCQkJY29udGludWU7CisJCQlydiA9IGNoZWNrX2hvdG1vZF9pbnRfb3AoY3VyciwgbywgImlycSIsICZpcnEpOworCQkJaWYgKHJ2IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJCWVsc2UgaWYgKHJ2KQorCQkJCWNvbnRpbnVlOworCQkJcnYgPSBjaGVja19ob3Rtb2RfaW50X29wKGN1cnIsIG8sICJpcG1iIiwgJmlwbWIpOworCQkJaWYgKHJ2IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJCWVsc2UgaWYgKHJ2KQorCQkJCWNvbnRpbnVlOworCisJCQlydiA9IC1FSU5WQUw7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkJICAgICAgICJJbnZhbGlkIGhvdG1vZCBvcHRpb24gJyVzJ1xuIiwKKwkJCSAgICAgICBjdXJyKTsKKwkJCWdvdG8gb3V0OwogCQl9CiAKIAkJaWYgKG9wID09IEhNX0FERCkgewpAQCAtMTU5MCw2ICsxNjA1LDcgQEAKIAkJCW11dGV4X3VubG9jaygmc21pX2luZm9zX2xvY2spOwogCQl9CiAJfQorCXJ2ID0gbGVuOwogIG91dDoKIAlrZnJlZShzdHIpOwogCXJldHVybiBydjsKQEAgLTE2MTAsMTEgKzE2MjYsMTEgQEAKIAogCQlpbmZvLT5hZGRyX3NvdXJjZSA9ICJoYXJkY29kZWQiOwogCi0JCWlmICghc2lfdHlwZVtpXSB8fCBpcG1pX3N0cmNhc2VjbXAoc2lfdHlwZVtpXSwgImtjcyIpID09IDApIHsKKwkJaWYgKCFzaV90eXBlW2ldIHx8IHN0cmNtcChzaV90eXBlW2ldLCAia2NzIikgPT0gMCkgewogCQkJaW5mby0+c2lfdHlwZSA9IFNJX0tDUzsKLQkJfSBlbHNlIGlmIChpcG1pX3N0cmNhc2VjbXAoc2lfdHlwZVtpXSwgInNtaWMiKSA9PSAwKSB7CisJCX0gZWxzZSBpZiAoc3RyY21wKHNpX3R5cGVbaV0sICJzbWljIikgPT0gMCkgewogCQkJaW5mby0+c2lfdHlwZSA9IFNJX1NNSUM7Ci0JCX0gZWxzZSBpZiAoaXBtaV9zdHJjYXNlY21wKHNpX3R5cGVbaV0sICJidCIpID09IDApIHsKKwkJfSBlbHNlIGlmIChzdHJjbXAoc2lfdHlwZVtpXSwgImJ0IikgPT0gMCkgewogCQkJaW5mby0+c2lfdHlwZSA9IFNJX0JUOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMTY2OCw3ICsxNjg0LDcgQEAKIC8qIE9uY2Ugd2UgZ2V0IGFuIEFDUEkgZmFpbHVyZSwgd2UgZG9uJ3QgdHJ5IGFueSBtb3JlLCBiZWNhdXNlIHdlIGdvCiAgICB0aHJvdWdoIHRoZSB0YWJsZXMgc2VxdWVudGlhbGx5LiAgT25jZSB3ZSBkb24ndCBmaW5kIGEgdGFibGUsIHRoZXJlCiAgICBhcmUgbm8gbW9yZS4gKi8KLXN0YXRpYyBpbnQgYWNwaV9mYWlsdXJlID0gMDsKK3N0YXRpYyBpbnQgYWNwaV9mYWlsdXJlOwogCiAvKiBGb3IgR1BFLXR5cGUgaW50ZXJydXB0cy4gKi8KIHN0YXRpYyB1MzIgaXBtaV9hY3BpX2dwZSh2b2lkICpjb250ZXh0KQpAQCAtMTc3OSw3ICsxNzk1LDYgQEAKIHN0YXRpYyBfX2RldmluaXQgaW50IHRyeV9pbml0X2FjcGkoc3RydWN0IFNQTUlUYWJsZSAqc3BtaSkKIHsKIAlzdHJ1Y3Qgc21pX2luZm8gICppbmZvOwotCWNoYXIgICAgICAgICAgICAgKmlvX3R5cGU7CiAJdTggCQkgYWRkcl9zcGFjZTsKIAogCWlmIChzcG1pLT5JUE1JbGVnYWN5ICE9IDEpIHsKQEAgLTE4NDMsMTEgKzE4NTgsOSBAQAogCWluZm8tPmlvLnJlZ3NoaWZ0ID0gc3BtaS0+YWRkci5yZWdpc3Rlcl9iaXRfb2Zmc2V0OwogCiAJaWYgKHNwbWktPmFkZHIuYWRkcmVzc19zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZKSB7Ci0JCWlvX3R5cGUgPSAibWVtb3J5IjsKIAkJaW5mby0+aW9fc2V0dXAgPSBtZW1fc2V0dXA7CiAJCWluZm8tPmlvLmFkZHJfdHlwZSA9IElQTUlfSU9fQUREUl9TUEFDRTsKIAl9IGVsc2UgaWYgKHNwbWktPmFkZHIuYWRkcmVzc19zcGFjZV9pZCA9PSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU8pIHsKLQkJaW9fdHlwZSA9ICJJL08iOwogCQlpbmZvLT5pb19zZXR1cCA9IHBvcnRfc2V0dXA7CiAJCWluZm8tPmlvLmFkZHJfdHlwZSA9IElQTUlfTUVNX0FERFJfU1BBQ0U7CiAJfSBlbHNlIHsKQEAgLTI3NzMsOCArMjc4Niw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BQ1BJCi0JaWYgKHNpX3RyeWRlZmF1bHRzKQotCQlhY3BpX2ZpbmRfYm1jKCk7CisJYWNwaV9maW5kX2JtYygpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMKaW5kZXggOTBmYjJhNS4uNmI2MzRlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYwpAQCAtMTM0LDE0ICsxMzQsMTQgQEAKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogCi1zdGF0aWMgaXBtaV91c2VyX3Qgd2F0Y2hkb2dfdXNlciA9IE5VTEw7CitzdGF0aWMgaXBtaV91c2VyX3Qgd2F0Y2hkb2dfdXNlcjsKIHN0YXRpYyBpbnQgd2F0Y2hkb2dfaWZudW07CiAKIC8qIERlZmF1bHQgdGhlIHRpbWVvdXQgdG8gMTAgc2Vjb25kcy4gKi8KIHN0YXRpYyBpbnQgdGltZW91dCA9IDEwOwogCiAvKiBUaGUgcHJlLXRpbWVvdXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gKi8KLXN0YXRpYyBpbnQgcHJldGltZW91dCA9IDA7CitzdGF0aWMgaW50IHByZXRpbWVvdXQ7CiAKIC8qIERlZmF1bHQgYWN0aW9uIGlzIHRvIHJlc2V0IHRoZSBib2FyZCBvbiBhIHRpbWVvdXQuICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBhY3Rpb25fdmFsID0gV0RPR19USU1FT1VUX1JFU0VUOwpAQCAtMTU2LDEwICsxNTYsMTAgQEAKIAogc3RhdGljIGNoYXIgcHJlb3BbMTZdID0gInByZW9wX25vbmUiOwogc3RhdGljIERFRklORV9TUElOTE9DSyhpcG1pX3JlYWRfbG9jayk7Ci1zdGF0aWMgY2hhciBkYXRhX3RvX3JlYWQgPSAwOworc3RhdGljIGNoYXIgZGF0YV90b19yZWFkOwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJlYWRfcSk7Ci1zdGF0aWMgc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY19xID0gTlVMTDsKLXN0YXRpYyBjaGFyIHByZXRpbWVvdXRfc2luY2VfbGFzdF9oZWFydGJlYXQgPSAwOworc3RhdGljIHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfcTsKK3N0YXRpYyBjaGFyIHByZXRpbWVvdXRfc2luY2VfbGFzdF9oZWFydGJlYXQ7CiBzdGF0aWMgY2hhciBleHBlY3RfY2xvc2U7CiAKIHN0YXRpYyBpbnQgaWZudW1fdG9fdXNlID0gLTE7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAogLyogSWYgdHJ1ZSwgdGhlIGRyaXZlciB3aWxsIHN0YXJ0IHJ1bm5pbmcgYXMgc29vbiBhcyBpdCBpcyBjb25maWd1cmVkCiAgICBhbmQgcmVhZHkuICovCi1zdGF0aWMgaW50IHN0YXJ0X25vdyA9IDA7CitzdGF0aWMgaW50IHN0YXJ0X25vdzsKIAogc3RhdGljIGludCBzZXRfcGFyYW1faW50KGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0yMTYsMTMgKzIxNiwxMyBAQAogewogCWFjdGlvbl9mbiAgZm4gPSAoYWN0aW9uX2ZuKSBrcC0+YXJnOwogCWludCAgICAgICAgcnYgPSAwOwotCWNoYXIgICAgICAgKmR1cCwgKnM7CisJY2hhciAgICAgICB2YWxjcFsxNl07CisJY2hhciAgICAgICAqczsKIAotCWR1cCA9IGtzdHJkdXAodmFsLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWR1cCkKLQkJcmV0dXJuIC1FTk9NRU07CisJc3RybmNweSh2YWxjcCwgdmFsLCAxNik7CisJdmFsY3BbMTVdID0gJ1wwJzsKIAotCXMgPSBzdHJzdHJpcChkdXApOworCXMgPSBzdHJzdHJpcCh2YWxjcCk7CiAKIAlkb3duX3JlYWQoJnJlZ2lzdGVyX3NlbSk7CiAJcnYgPSBmbihzLCBOVUxMKTsKQEAgLTIzNSw3ICsyMzUsNiBAQAogCiAgb3V0X3VubG9jazoKIAl1cF9yZWFkKCZyZWdpc3Rlcl9zZW0pOwotCWtmcmVlKGR1cCk7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC0zMDAsMTYgKzI5OSwxNiBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgaXBtaV93YXRjaGRvZ19zdGF0ZSA9IFdET0dfVElNRU9VVF9OT05FOwogCiAvKiBJZiBzaHV0dGluZyBkb3duIHZpYSBJUE1JLCB3ZSBpZ25vcmUgdGhlIGhlYXJ0YmVhdC4gKi8KLXN0YXRpYyBpbnQgaXBtaV9pZ25vcmVfaGVhcnRiZWF0ID0gMDsKK3N0YXRpYyBpbnQgaXBtaV9pZ25vcmVfaGVhcnRiZWF0OwogCiAvKiBJcyBzb21lb25lIHVzaW5nIHRoZSB3YXRjaGRvZz8gIE9ubHkgb25lIHVzZXIgaXMgYWxsb3dlZC4gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGlwbWlfd2RvZ19vcGVuID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlwbWlfd2RvZ19vcGVuOwogCiAvKiBJZiBzZXQgdG8gMSwgdGhlIGhlYXJ0YmVhdCBjb21tYW5kIHdpbGwgc2V0IHRoZSBzdGF0ZSB0byByZXNldCBhbmQKICAgIHN0YXJ0IHRoZSB0aW1lci4gIFRoZSB0aW1lciBkb2Vzbid0IG5vcm1hbGx5IHJ1biB3aGVuIHRoZSBkcml2ZXIgaXMKICAgIGZpcnN0IG9wZW5lZCB1bnRpbCB0aGUgaGVhcnRiZWF0IGlzIHNldCB0aGUgZmlyc3QgdGltZSwgdGhpcwogICAgdmFyaWFibGUgaXMgdXNlZCB0byBhY2NvbXBsaXNoIHRoaXMuICovCi1zdGF0aWMgaW50IGlwbWlfc3RhcnRfdGltZXJfb25faGVhcnRiZWF0ID0gMDsKK3N0YXRpYyBpbnQgaXBtaV9zdGFydF90aW1lcl9vbl9oZWFydGJlYXQ7CiAKIC8qIElQTUkgdmVyc2lvbiBvZiB0aGUgQk1DLiAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgaXBtaV92ZXJzaW9uX21ham9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jIGIvZHJpdmVycy9jaGFyL2lzaWNvbS5jCmluZGV4IDE2MzdjMWQuLjAxMDg0YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc2ljb20uYworKysgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKQEAgLTE3MiwxMiArMTcyLDE0IEBACiBzdGF0aWMgaW50IHByZXZfY2FyZCA9IDM7CS8qCXN0YXJ0IHNlcnZpY2luZyBpc2lfY2FyZFswXQkqLwogc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICppc2ljb21fbm9ybWFsOwogCi1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgdHg7CitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGlzaV90aW1lcmRvbmUpOwogc3RhdGljIGNoYXIgcmVfc2NoZWR1bGUgPSAxOwogCiBzdGF0aWMgdm9pZCBpc2ljb21fdHgodW5zaWduZWQgbG9uZyBfZGF0YSk7CiBzdGF0aWMgdm9pZCBpc2ljb21fc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKK3N0YXRpYyBERUZJTkVfVElNRVIodHgsIGlzaWNvbV90eCwgMCwgMCk7CisKIC8qICAgYmF1ZCBpbmRleCBtYXBwaW5ncyBmcm9tIGxpbnV4IGRlZm5zIHRvIGlzaSAqLwogCiBzdGF0aWMgc2lnbmVkIGNoYXIgbGludXhiX3RvX2lzaWJbXSA9IHsKQEAgLTE5Myw5ICsxOTUsOSBAQAogCXVuc2lnbmVkIHNob3J0CQlzaGlmdF9jb3VudDsKIAlzdHJ1Y3QgaXNpX3BvcnQJCSogcG9ydHM7CiAJc2lnbmVkIGNoYXIJCWNvdW50OwotCXVuc2lnbmVkIGNoYXIJCWlzYTsKIAlzcGlubG9ja190CQljYXJkX2xvY2s7IC8qIENhcmQgd2lkZSBsb2NrIDExLzUvMDAgLXNhbWVlciAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXVuc2lnbmVkIGludAkJaW5kZXg7CiB9OwogCiBzdHJ1Y3QJaXNpX3BvcnQgewpAQCAtMjI4LDYgKzIzMCwyMCBAQAogICoJaXQgd2FudHMgdG8gdGFsay4KICAqLwogCitzdGF0aWMgaW5saW5lIGludCBXYWl0VGlsbENhcmRJc0ZyZWUodTE2IGJhc2UpCit7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgYSA9IGluX2F0b21pYygpOyAvKiBkbyB3ZSBydW4gdW5kZXIgc3BpbmxvY2s/ICovCisKKwl3aGlsZSAoIShpbncoYmFzZSArIDB4ZSkgJiAweDEpICYmIGNvdW50KysgPCAxMDApCisJCWlmIChhKQorCQkJbWRlbGF5KDEpOworCQllbHNlCisJCQltc2xlZXAoMSk7CisKKwlyZXR1cm4gIShpbncoYmFzZSArIDB4ZSkgJiAweDEpOworfQorCiBzdGF0aWMgaW50IGxvY2tfY2FyZChzdHJ1Y3QgaXNpX2JvYXJkICpjYXJkKQogewogCWNoYXIJCXJldHJpZXM7CkBAIC0yNzQsNjkgKzI5MCw3MSBAQAogICogIElTSSBDYXJkIHNwZWNpZmljIG9wcyAuLi4KICAqLwogCisvKiBjYXJkLT5sb2NrIEhBUyB0byBiZSBoZWxkICovCiBzdGF0aWMgdm9pZCByYWlzZV9kdHIoc3RydWN0IGlzaV9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQgPSBwb3J0LT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IGNhcmQtPmJhc2U7CiAJdTE2IGNoYW5uZWwgPSBwb3J0LT5jaGFubmVsOwogCi0JaWYgKCFsb2NrX2NhcmQoY2FyZCkpCisJaWYgKFdhaXRUaWxsQ2FyZElzRnJlZShiYXNlKSkKIAkJcmV0dXJuOwogCiAJb3V0dygweDgwMDAgfCAoY2hhbm5lbCA8PCBjYXJkLT5zaGlmdF9jb3VudCkgfCAweDAyLCBiYXNlKTsKIAlvdXR3KDB4MDUwNCwgYmFzZSk7CiAJSW50ZXJydXB0VGhlQ2FyZChiYXNlKTsKIAlwb3J0LT5zdGF0dXMgfD0gSVNJX0RUUjsKLQl1bmxvY2tfY2FyZChjYXJkKTsKIH0KIAorLyogY2FyZC0+bG9jayBIQVMgdG8gYmUgaGVsZCAqLwogc3RhdGljIGlubGluZSB2b2lkIGRyb3BfZHRyKHN0cnVjdCBpc2lfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgaXNpX2JvYXJkICpjYXJkID0gcG9ydC0+Y2FyZDsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBjYXJkLT5iYXNlOwogCXUxNiBjaGFubmVsID0gcG9ydC0+Y2hhbm5lbDsKIAotCWlmICghbG9ja19jYXJkKGNhcmQpKQorCWlmIChXYWl0VGlsbENhcmRJc0ZyZWUoYmFzZSkpCiAJCXJldHVybjsKIAogCW91dHcoMHg4MDAwIHwgKGNoYW5uZWwgPDwgY2FyZC0+c2hpZnRfY291bnQpIHwgMHgwMiwgYmFzZSk7CiAJb3V0dygweDA0MDQsIGJhc2UpOwogCUludGVycnVwdFRoZUNhcmQoYmFzZSk7CiAJcG9ydC0+c3RhdHVzICY9IH5JU0lfRFRSOwotCXVubG9ja19jYXJkKGNhcmQpOwogfQogCisvKiBjYXJkLT5sb2NrIEhBUyB0byBiZSBoZWxkICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcmFpc2VfcnRzKHN0cnVjdCBpc2lfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgaXNpX2JvYXJkICpjYXJkID0gcG9ydC0+Y2FyZDsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBjYXJkLT5iYXNlOwogCXUxNiBjaGFubmVsID0gcG9ydC0+Y2hhbm5lbDsKIAotCWlmICghbG9ja19jYXJkKGNhcmQpKQorCWlmIChXYWl0VGlsbENhcmRJc0ZyZWUoYmFzZSkpCiAJCXJldHVybjsKIAogCW91dHcoMHg4MDAwIHwgKGNoYW5uZWwgPDwgY2FyZC0+c2hpZnRfY291bnQpIHwgMHgwMiwgYmFzZSk7CiAJb3V0dygweDBhMDQsIGJhc2UpOwogCUludGVycnVwdFRoZUNhcmQoYmFzZSk7CiAJcG9ydC0+c3RhdHVzIHw9IElTSV9SVFM7Ci0JdW5sb2NrX2NhcmQoY2FyZCk7CiB9CisKKy8qIGNhcmQtPmxvY2sgSEFTIHRvIGJlIGhlbGQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3J0cyhzdHJ1Y3QgaXNpX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGlzaV9ib2FyZCAqY2FyZCA9IHBvcnQtPmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gY2FyZC0+YmFzZTsKIAl1MTYgY2hhbm5lbCA9IHBvcnQtPmNoYW5uZWw7CiAKLQlpZiAoIWxvY2tfY2FyZChjYXJkKSkKKwlpZiAoV2FpdFRpbGxDYXJkSXNGcmVlKGJhc2UpKQogCQlyZXR1cm47CiAKIAlvdXR3KDB4ODAwMCB8IChjaGFubmVsIDw8IGNhcmQtPnNoaWZ0X2NvdW50KSB8IDB4MDIsIGJhc2UpOwogCW91dHcoMHgwODA0LCBiYXNlKTsKIAlJbnRlcnJ1cHRUaGVDYXJkKGJhc2UpOwogCXBvcnQtPnN0YXR1cyAmPSB+SVNJX1JUUzsKLQl1bmxvY2tfY2FyZChjYXJkKTsKIH0KIAorLyogY2FyZC0+bG9jayBNVVNUIE5PVCBiZSBoZWxkICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcmFpc2VfZHRyX3J0cyhzdHJ1Y3QgaXNpX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGlzaV9ib2FyZCAqY2FyZCA9IHBvcnQtPmNhcmQ7CkBAIC0zNTMsMzUgKzM3MSwyMCBAQAogCXVubG9ja19jYXJkKGNhcmQpOwogfQogCisvKiBjYXJkLT5sb2NrIEhBUyB0byBiZSBoZWxkICovCiBzdGF0aWMgdm9pZCBkcm9wX2R0cl9ydHMoc3RydWN0IGlzaV9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQgPSBwb3J0LT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgYmFzZSA9IGNhcmQtPmJhc2U7CiAJdTE2IGNoYW5uZWwgPSBwb3J0LT5jaGFubmVsOwogCi0JaWYgKCFsb2NrX2NhcmQoY2FyZCkpCisJaWYgKFdhaXRUaWxsQ2FyZElzRnJlZShiYXNlKSkKIAkJcmV0dXJuOwogCiAJb3V0dygweDgwMDAgfCAoY2hhbm5lbCA8PCBjYXJkLT5zaGlmdF9jb3VudCkgfCAweDAyLCBiYXNlKTsKIAlvdXR3KDB4MGMwNCwgYmFzZSk7CiAJSW50ZXJydXB0VGhlQ2FyZChiYXNlKTsKIAlwb3J0LT5zdGF0dXMgJj0gfihJU0lfUlRTIHwgSVNJX0RUUik7Ci0JdW5sb2NrX2NhcmQoY2FyZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBraWxsX3F1ZXVlKHN0cnVjdCBpc2lfcG9ydCAqcG9ydCwgc2hvcnQgcXVldWUpCi17Ci0Jc3RydWN0IGlzaV9ib2FyZCAqY2FyZCA9IHBvcnQtPmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBiYXNlID0gY2FyZC0+YmFzZTsKLQl1MTYgY2hhbm5lbCA9IHBvcnQtPmNoYW5uZWw7Ci0KLQlpZiAoIWxvY2tfY2FyZChjYXJkKSkKLQkJcmV0dXJuOwotCi0Jb3V0dygweDgwMDAgfCAoY2hhbm5lbCA8PCBjYXJkLT5zaGlmdF9jb3VudCkgfCAweDAyLCBiYXNlKTsKLQlvdXR3KChxdWV1ZSA8PCA4KSB8IDB4MDYsIGJhc2UpOwotCUludGVycnVwdFRoZUNhcmQoYmFzZSk7Ci0JdW5sb2NrX2NhcmQoY2FyZCk7CiB9CiAKIC8qCkBAIC01MTQsMTcgKzUxNywxMSBAQAogCS8qCXNjaGVkdWxlIGFub3RoZXIgdHggZm9yIGhvcGVmdWxseSBpbiBhYm91dCAxMG1zCSovCiBzY2hlZF9hZ2FpbjoKIAlpZiAoIXJlX3NjaGVkdWxlKSB7Ci0JCXJlX3NjaGVkdWxlID0gMjsKKwkJY29tcGxldGUoJmlzaV90aW1lcmRvbmUpOwogIAkJcmV0dXJuOwogCX0KIAotCWluaXRfdGltZXIoJnR4KTsKLQl0eC5leHBpcmVzID0gamlmZmllcyArIEhaLzEwMDsKLQl0eC5kYXRhID0gMDsKLQl0eC5mdW5jdGlvbiA9IGlzaWNvbV90eDsKLQlhZGRfdGltZXIoJnR4KTsKLQotCXJldHVybjsKKwltb2RfdGltZXIoJnR4LCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCkpOwogfQogCiAvKiAJSW50ZXJydXB0IGhhbmRsZXJzIAkqLwpAQCAtNTYyLDE0ICs1NTksMTIgQEAKIAliYXNlID0gY2FyZC0+YmFzZTsKIAlzcGluX2xvY2soJmNhcmQtPmNhcmRfbG9jayk7CiAKLQlpZiAoY2FyZC0+aXNhID09IE5PKSB7Ci0JCS8qCi0JCSAqIGRpc2FibGUgYW55IGludGVycnVwdHMgZnJvbSB0aGUgUENJIGNhcmQgYW5kIGxvd2VyIHRoZQotCQkgKiBpbnRlcnJ1cHQgbGluZQotCQkgKi8KLQkJb3V0dygweDgwMDAsIGJhc2UrMHgwNCk7Ci0JCUNsZWFySW50ZXJydXB0KGJhc2UpOwotCX0KKwkvKgorCSAqIGRpc2FibGUgYW55IGludGVycnVwdHMgZnJvbSB0aGUgUENJIGNhcmQgYW5kIGxvd2VyIHRoZQorCSAqIGludGVycnVwdCBsaW5lCisJICovCisJb3V0dygweDgwMDAsIGJhc2UrMHgwNCk7CisJQ2xlYXJJbnRlcnJ1cHQoYmFzZSk7CiAKIAlpbncoYmFzZSk7CQkvKiBnZXQgdGhlIGR1bW15IHdvcmQgb3V0ICovCiAJaGVhZGVyID0gaW53KGJhc2UpOwpAQCAtNTc5LDE5ICs1NzQsMTMgQEAKIAlpZiAoY2hhbm5lbCArIDEgPiBjYXJkLT5wb3J0X2NvdW50KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIklTSUNPTTogaXNpY29tX2ludGVycnVwdCgweCVseCk6ICIKIAkJCSIlZChjaGFubmVsKSA+IHBvcnRfY291bnQuXG4iLCBiYXNlLCBjaGFubmVsKzEpOwotCQlpZiAoY2FyZC0+aXNhKQotCQkJQ2xlYXJJbnRlcnJ1cHQoYmFzZSk7Ci0JCWVsc2UKLQkJCW91dHcoMHgwMDAwLCBiYXNlKzB4MDQpOyAvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCQlvdXR3KDB4MDAwMCwgYmFzZSsweDA0KTsgLyogZW5hYmxlIGludGVycnVwdHMgKi8KIAkJc3Bpbl91bmxvY2soJmNhcmQtPmNhcmRfbG9jayk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAJcG9ydCA9IGNhcmQtPnBvcnRzICsgY2hhbm5lbDsKIAlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgewotCQlpZiAoY2FyZC0+aXNhKQotCQkJQ2xlYXJJbnRlcnJ1cHQoYmFzZSk7Ci0JCWVsc2UKLQkJCW91dHcoMHgwMDAwLCBiYXNlKzB4MDQpOyAvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCQlvdXR3KDB4MDAwMCwgYmFzZSsweDA0KTsgLyogZW5hYmxlIGludGVycnVwdHMgKi8KIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIApAQCAtNjA0LDEwICs1OTMsNyBAQAogCQl9CiAJCWlmIChieXRlX2NvdW50ICYgMHgwMSkKIAkJCWludyhiYXNlKTsKLQkJaWYgKGNhcmQtPmlzYSA9PSBZRVMpCi0JCQlDbGVhckludGVycnVwdChiYXNlKTsKLQkJZWxzZQotCQkJb3V0dygweDAwMDAsIGJhc2UrMHgwNCk7IC8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJCW91dHcoMHgwMDAwLCBiYXNlKzB4MDQpOyAvKiBlbmFibGUgaW50ZXJydXB0cyAqLwogCQlzcGluX3VubG9jaygmY2FyZC0+Y2FyZF9sb2NrKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KQEAgLTcwOCwxMCArNjk0LDcgQEAKIAkJfQogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KLQlpZiAoY2FyZC0+aXNhID09IFlFUykKLQkJQ2xlYXJJbnRlcnJ1cHQoYmFzZSk7Ci0JZWxzZQotCQlvdXR3KDB4MDAwMCwgYmFzZSsweDA0KTsgLyogZW5hYmxlIGludGVycnVwdHMgKi8KKwlvdXR3KDB4MDAwMCwgYmFzZSsweDA0KTsgLyogZW5hYmxlIGludGVycnVwdHMgKi8KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTc2Miw3ICs3NDUsNyBAQAogCWVsc2UKIAkJcmFpc2VfZHRyKHBvcnQpOwogCi0JaWYgKGxvY2tfY2FyZChjYXJkKSkgeworCWlmIChXYWl0VGlsbENhcmRJc0ZyZWUoYmFzZSkgPT0gMCkgewogCQlvdXR3KDB4ODAwMCB8IChjaGFubmVsIDw8IHNoaWZ0X2NvdW50KSB8MHgwMywgYmFzZSk7CiAJCW91dHcobGludXhiX3RvX2lzaWJbYmF1ZF0gPDwgOCB8IDB4MDMsIGJhc2UpOwogCQljaGFubmVsX3NldHVwID0gMDsKQEAgLTc5MCw3ICs3NzMsNiBAQAogCQl9CiAJCW91dHcoY2hhbm5lbF9zZXR1cCwgYmFzZSk7CiAJCUludGVycnVwdFRoZUNhcmQoYmFzZSk7Ci0JCXVubG9ja19jYXJkKGNhcmQpOwogCX0KIAlpZiAoQ19DTE9DQUwodHR5KSkKIAkJcG9ydC0+ZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOwpAQCAtODA5LDEyICs3OTEsMTEgQEAKIAlpZiAoSV9JWE9GRih0dHkpKQogCQlmbG93X2N0cmwgfD0gSVNJQ09NX0lOSVRJQVRFX1hPTlhPRkY7CiAKLQlpZiAobG9ja19jYXJkKGNhcmQpKSB7CisJaWYgKFdhaXRUaWxsQ2FyZElzRnJlZShiYXNlKSA9PSAwKSB7CiAJCW91dHcoMHg4MDAwIHwgKGNoYW5uZWwgPDwgc2hpZnRfY291bnQpIHwweDA0LCBiYXNlKTsKIAkJb3V0dyhmbG93X2N0cmwgPDwgOCB8IDB4MDUsIGJhc2UpOwogCQlvdXR3KChTVE9QX0NIQVIodHR5KSkgPDwgOCB8IChTVEFSVF9DSEFSKHR0eSkpLCBiYXNlKTsKIAkJSW50ZXJydXB0VGhlQ2FyZChiYXNlKTsKLQkJdW5sb2NrX2NhcmQoY2FyZCk7CiAJfQogCiAJLyoJcnggZW5hYmxlZCAtPiBlbmFibGUgcG9ydCBmb3Igcnggb24gdGhlIGNhcmQJKi8KQEAgLTgzOSwxMCArODIwLDkgQEAKIAl9CiAJcG9ydCA9IGJwLT5wb3J0czsKIAlicC0+c3RhdHVzIHw9IEJPQVJEX0FDVElWRTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IGJwLT5wb3J0X2NvdW50OyBjaGFubmVsKyssIHBvcnQrKykKIAkJZHJvcF9kdHJfcnRzKHBvcnQpOwotCXJldHVybjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+Y2FyZF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgaXNpY29tX3NldHVwX3BvcnQoc3RydWN0IGlzaV9wb3J0ICpwb3J0KQpAQCAtODc1LDcgKzg1NSwxMiBAQAogCXBvcnQtPnhtaXRfY250ID0gcG9ydC0+eG1pdF9oZWFkID0gcG9ydC0+eG1pdF90YWlsID0gMDsKIAogCS8qCWRpc2NhcmQgYW55IHJlc2lkdWFsIGRhdGEJKi8KLQlraWxsX3F1ZXVlKHBvcnQsIElTSUNPTV9LSUxMVFggfCBJU0lDT01fS0lMTFJYKTsKKwlpZiAoV2FpdFRpbGxDYXJkSXNGcmVlKGNhcmQtPmJhc2UpID09IDApIHsKKwkJb3V0dygweDgwMDAgfCAocG9ydC0+Y2hhbm5lbCA8PCBjYXJkLT5zaGlmdF9jb3VudCkgfCAweDAyLAorCQkJCWNhcmQtPmJhc2UpOworCQlvdXR3KCgoSVNJQ09NX0tJTExUWCB8IElTSUNPTV9LSUxMUlgpIDw8IDgpIHwgMHgwNiwgY2FyZC0+YmFzZSk7CisJCUludGVycnVwdFRoZUNhcmQoY2FyZC0+YmFzZSk7CisJfQogCiAJaXNpY29tX2NvbmZpZ19wb3J0KHBvcnQpOwogCXBvcnQtPmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOwpAQCAtOTY0LDggKzk0OSw4IEBACiB7CiAJc3RydWN0IGlzaV9wb3J0ICpwb3J0OwogCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQ7Ci0JdW5zaWduZWQgaW50IGxpbmUsIGJvYXJkOwotCWludCBlcnJvcjsKKwl1bnNpZ25lZCBpbnQgYm9hcmQ7CisJaW50IGVycm9yLCBsaW5lOwogCiAJbGluZSA9IHR0eS0+aW5kZXg7CiAJaWYgKGxpbmUgPCAwIHx8IGxpbmUgPiBQT1JUX0NPVU5ULTEpCkBAIC0xMDAxLDI4ICs5ODYsMjIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGlzaWNvbV9zaHV0ZG93bl9ib2FyZChzdHJ1Y3QgaXNpX2JvYXJkICpicCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAlpZiAoYnAtPnN0YXR1cyAmIEJPQVJEX0FDVElWRSkgewogCQlicC0+c3RhdHVzICY9IH5CT0FSRF9BQ1RJVkU7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5jYXJkX2xvY2ssIGZsYWdzKTsKIH0KIAorLyogY2FyZC0+bG9jayBIQVMgdG8gYmUgaGVsZCAqLwogc3RhdGljIHZvaWQgaXNpY29tX3NodXRkb3duX3BvcnQoc3RydWN0IGlzaV9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQgPSBwb3J0LT5jYXJkOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXR0eSA9IHBvcnQtPnR0eTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKKwlpZiAoIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJcmV0dXJuOwotCX0KKwogCWlmIChwb3J0LT54bWl0X2J1ZikgewogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBvcnQtPnhtaXRfYnVmKTsKIAkJcG9ydC0+eG1pdF9idWYgPSBOVUxMOwpAQCAtMTAzMCw3ICsxMDA5LDYgQEAKIAlwb3J0LT5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CiAJLyogM3JkIE9jdG9iZXIgMjAwMCA6IFZpbmF5YWsgUCBSaXNidWQgKi8KIAlwb3J0LT50dHkgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCiAJLypGaXggZG9uZSBieSBBbmlsIC5TIG9uIDMwLTA0LTIwMDEKIAlyZW1vdGUgbG9naW4gdGhyb3VnaCBpc2kgcG9ydCBoYXMgZHRyIHRvZ2dsZSBwcm9ibGVtCkBAIC0xMjc2LDEwICsxMjU0LDEyIEBACiAJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewogCXN0cnVjdCBpc2lfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChpc2ljb21fcGFyYW5vaWFfY2hlY2socG9ydCwgdHR5LT5uYW1lLCAiaXNpY29tX2lvY3RsIikpCiAJCXJldHVybiAtRU5PREVWOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCWlmIChzZXQgJiBUSU9DTV9SVFMpCiAJCXJhaXNlX3J0cyhwb3J0KTsKIAlpZiAoc2V0ICYgVElPQ01fRFRSKQpAQCAtMTI4OSw2ICsxMjY5LDcgQEAKIAkJZHJvcF9ydHMocG9ydCk7CiAJaWYgKGNsZWFyICYgVElPQ01fRFRSKQogCQlkcm9wX2R0cihwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTMyMSw3ICsxMzAyLDEwIEBACiAJCQkJKG5ld2luZm8uZmxhZ3MgJiBBU1lOQ19GTEFHUykpOwogCX0KIAlpZiAocmVjb25maWdfcG9ydCkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJCWlzaWNvbV9jb25maWdfcG9ydChwb3J0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTM5OSw5ICsxMzgzLDEwIEBACiAKIC8qIHNldF90ZXJtaW9zIGV0IGFsbCAqLwogc3RhdGljIHZvaWQgaXNpY29tX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCi0Jc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IGlzaV9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGlzaWNvbV9wYXJhbm9pYV9jaGVjayhwb3J0LCB0dHktPm5hbWUsICJpc2ljb21fc2V0X3Rlcm1pb3MiKSkKIAkJcmV0dXJuOwpAQCAtMTQxMCw3ICsxMzk1LDkgQEAKIAkJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19pZmxhZykKIAkJcmV0dXJuOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCWlzaWNvbV9jb25maWdfcG9ydChwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCWlmICgob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSAmJgogCQkJISh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSkgewpAQCAtMTQ4NywxMSArMTQ3NCwxNSBAQAogc3RhdGljIHZvaWQgaXNpY29tX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBpc2lfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChpc2ljb21fcGFyYW5vaWFfY2hlY2socG9ydCwgdHR5LT5uYW1lLCAiaXNpY29tX2hhbmd1cCIpKQogCQlyZXR1cm47CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAJaXNpY29tX3NodXRkb3duX3BvcnQocG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CisKIAlwb3J0LT5jb3VudCA9IDA7CiAJcG9ydC0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJcG9ydC0+dHR5ID0gTlVMTDsKQEAgLTE1MjAsMzcgKzE1MTEsNiBAQAogICogRHJpdmVyIGluaXQgYW5kIGRlaW5pdCBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpc2ljb21fcmVnaXN0ZXJfaW9yZWdpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JY29uc3QgdW5zaWduZWQgaW50IGluZGV4KQotewotCXN0cnVjdCBpc2lfYm9hcmQgKmJvYXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JaWYgKCFib2FyZC0+YmFzZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGJvYXJkLT5iYXNlLCAxNiwgSVNJQ09NX05BTUUpKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgIkkvTyBSZWdpb24gMHglbHgtMHglbHggaXMgYnVzeS4gQ2FyZCVkICIKLQkJCSJ3aWxsIGJlIGRpc2FibGVkLlxuIiwgYm9hcmQtPmJhc2UsIGJvYXJkLT5iYXNlICsgMTUsCi0JCQlpbmRleCArIDEpOwotCQlyZXR1cm4gLUVCVVNZOwotIAl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXNpY29tX3VucmVnaXN0ZXJfaW9yZWdpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGlzaV9ib2FyZCAqYm9hcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0KLQlpZiAoIWJvYXJkLT5iYXNlKQotCQlyZXR1cm47Ci0KLQlyZWxlYXNlX3JlZ2lvbihib2FyZC0+YmFzZSwgMTYpOwotCWRldl9kYmcoJnBkZXYtPmRldiwgIkkvTyBSZWdpb24gMHglbHgtMHglbHggcmVsZWFzZWQuXG4iLAotCQlib2FyZC0+YmFzZSwgYm9hcmQtPmJhc2UgKyAxNSk7Ci0JYm9hcmQtPmJhc2UgPSAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGlzaWNvbV9vcHMgPSB7CiAJLm9wZW4JCQk9IGlzaWNvbV9vcGVuLAogCS5jbG9zZQkJCT0gaXNpY29tX2Nsb3NlLApAQCAtMTU3MSw3MCArMTUzMSw2IEBACiAJLnRpb2Ntc2V0CQk9IGlzaWNvbV90aW9jbXNldCwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGlzaWNvbV9yZWdpc3Rlcl90dHlfZHJpdmVyKHZvaWQpCi17Ci0JaW50IGVycm9yID0gLUVOT01FTTsKLQotCS8qIHR0eSBkcml2ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uICovCi0JaXNpY29tX25vcm1hbCA9IGFsbG9jX3R0eV9kcml2ZXIoUE9SVF9DT1VOVCk7Ci0JaWYgKCFpc2ljb21fbm9ybWFsKQotCQlnb3RvIGVuZDsKLQotCWlzaWNvbV9ub3JtYWwtPm93bmVyCQkJPSBUSElTX01PRFVMRTsKLQlpc2ljb21fbm9ybWFsLT5uYW1lIAkJCT0gInR0eU0iOwotCWlzaWNvbV9ub3JtYWwtPm1ham9yCQkJPSBJU0lDT01fTk1BSk9SOwotCWlzaWNvbV9ub3JtYWwtPm1pbm9yX3N0YXJ0CQk9IDA7Ci0JaXNpY29tX25vcm1hbC0+dHlwZQkJCT0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKLQlpc2ljb21fbm9ybWFsLT5zdWJ0eXBlCQkJPSBTRVJJQUxfVFlQRV9OT1JNQUw7Ci0JaXNpY29tX25vcm1hbC0+aW5pdF90ZXJtaW9zCQk9IHR0eV9zdGRfdGVybWlvczsKLQlpc2ljb21fbm9ybWFsLT5pbml0X3Rlcm1pb3MuY19jZmxhZwk9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8Ci0JCUNMT0NBTDsKLQlpc2ljb21fbm9ybWFsLT5mbGFncwkJCT0gVFRZX0RSSVZFUl9SRUFMX1JBVzsKLQl0dHlfc2V0X29wZXJhdGlvbnMoaXNpY29tX25vcm1hbCwgJmlzaWNvbV9vcHMpOwotCi0JaWYgKChlcnJvciA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoaXNpY29tX25vcm1hbCkpKSB7Ci0JCXByX2RiZygiQ291bGRuJ3QgcmVnaXN0ZXIgdGhlIGRpYWxpbiBkcml2ZXIsIGVycm9yPSVkXG4iLAotCQkJZXJyb3IpOwotCQlwdXRfdHR5X2RyaXZlcihpc2ljb21fbm9ybWFsKTsKLQl9Ci1lbmQ6Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCBpc2ljb21fdW5yZWdpc3Rlcl90dHlfZHJpdmVyKHZvaWQpCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKChlcnJvciA9IHR0eV91bnJlZ2lzdGVyX2RyaXZlcihpc2ljb21fbm9ybWFsKSkpCi0JCXByX2RiZygiY291bGRuJ3QgdW5yZWdpc3RlciBub3JtYWwgZHJpdmVyLCBlcnJvcj0lZC5cbiIsIGVycm9yKTsKLQotCXB1dF90dHlfZHJpdmVyKGlzaWNvbV9ub3JtYWwpOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpc2ljb21fcmVnaXN0ZXJfaXNyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCWNvbnN0IHVuc2lnbmVkIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgaXNpX2JvYXJkICpib2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzID0gSVJRRl9ESVNBQkxFRDsKLQlpbnQgcmV0dmFsID0gLUVJTlZBTDsKLQotCWlmICghYm9hcmQtPmJhc2UpCi0JCWdvdG8gZW5kOwotCi0JaWYgKGJvYXJkLT5pc2EgPT0gTk8pCi0JCWlycWZsYWdzIHw9IElSUUZfU0hBUkVEOwotCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoYm9hcmQtPmlycSwgaXNpY29tX2ludGVycnVwdCwgaXJxZmxhZ3MsCi0JCUlTSUNPTV9OQU1FLCBib2FyZCk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgaW5zdGFsbCBoYW5kbGVyIGF0IElycSAlZC4gIgotCQkJIkNhcmQlZCB3aWxsIGJlIGRpc2FibGVkLlxuIiwgYm9hcmQtPmlycSwgaW5kZXggKyAxKTsKLSAJZWxzZQotCQlyZXR2YWwgPSAwOwotZW5kOgotCXJldHVybiByZXR2YWw7Ci19Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHJlc2V0X2NhcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJY29uc3QgdW5zaWduZWQgaW50IGNhcmQsIHVuc2lnbmVkIGludCAqc2lnbmF0dXJlKQogewpAQCAtMTY1NiwzNiArMTU1MiwyMyBAQAogCiAJKnNpZ25hdHVyZSA9IGludyhiYXNlICsgMHg0KSAmIDB4ZmY7CiAKLQlpZiAoYm9hcmQtPmlzYSA9PSBZRVMpIHsKLQkJaWYgKCEoaW53KGJhc2UgKyAweGUpICYgMHgxKSB8fCAoaW53KGJhc2UgKyAweDIpKSkgewotCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiYmFzZSsweDI9MHglbHgsIGJhc2UrMHhlPTB4JWx4XG4iLAotCQkJCWludyhiYXNlICsgMHgyKSwgaW53KGJhc2UgKyAweGUpKTsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIklTSUxvYWQ6SVNBIENhcmQlZCByZXNldCBmYWlsdXJlICIKLQkJCQkiKFBvc3NpYmxlIGJhZCBJL08gUG9ydCBBZGRyZXNzIDB4JWx4KS5cbiIsCi0JCQkJY2FyZCArIDEsIGJhc2UpOwotCQkJcmV0dmFsID0gLUVJTzsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JfSBlbHNlIHsKLQkJcG9ydGNvdW50ID0gaW53KGJhc2UgKyAweDIpOwotCQlpZiAoIShpbncoYmFzZSArIDB4ZSkgJiAweDEpIHx8ICgocG9ydGNvdW50ICE9IDApICYmCi0JCQkJKHBvcnRjb3VudCAhPSA0KSAmJiAocG9ydGNvdW50ICE9IDgpKSkgewotCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiYmFzZSsweDI9MHglbHgsIGJhc2UrMHhlPTB4JWx4XG4iLAotCQkJCWludyhiYXNlICsgMHgyKSwgaW53KGJhc2UgKyAweGUpKTsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIklTSUxvYWQ6UENJIENhcmQlZCByZXNldCBmYWlsdXJlICIKLQkJCQkiKFBvc3NpYmxlIGJhZCBJL08gUG9ydCBBZGRyZXNzIDB4JWx4KS5cbiIsCi0JCQkJY2FyZCArIDEsIGJhc2UpOwotCQkJcmV0dmFsID0gLUVJTzsKLQkJCWdvdG8gZW5kOwotCQl9CisJcG9ydGNvdW50ID0gaW53KGJhc2UgKyAweDIpOworCWlmICghKGludyhiYXNlICsgMHhlKSAmIDB4MSkgfHwgKChwb3J0Y291bnQgIT0gMCkgJiYKKwkJCShwb3J0Y291bnQgIT0gNCkgJiYgKHBvcnRjb3VudCAhPSA4KSkpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiYmFzZSsweDI9MHglbHgsIGJhc2UrMHhlPTB4JWx4XG4iLAorCQkJaW53KGJhc2UgKyAweDIpLCBpbncoYmFzZSArIDB4ZSkpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJU0lMb2FkOlBDSSBDYXJkJWQgcmVzZXQgZmFpbHVyZSAiCisJCQkiKFBvc3NpYmxlIGJhZCBJL08gUG9ydCBBZGRyZXNzIDB4JWx4KS5cbiIsCisJCQljYXJkICsgMSwgYmFzZSk7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZW5kOwogCX0KIAogCXN3aXRjaCAoKnNpZ25hdHVyZSkgewogCWNhc2UgMHhhNToKIAljYXNlIDB4YmI6CiAJY2FzZSAweGRkOgotCQlib2FyZC0+cG9ydF9jb3VudCA9IChib2FyZC0+aXNhID09IE5PICYmIHBvcnRjb3VudCA9PSA0KSA/IDQgOgotCQkJODsKKwkJYm9hcmQtPnBvcnRfY291bnQgPSAocG9ydGNvdW50ID09IDQpID8gNCA6IDg7CiAJCWJvYXJkLT5zaGlmdF9jb3VudCA9IDEyOwogCQlicmVhazsKIAljYXNlIDB4Y2M6CkBAIC0xNzA0LDE2ICsxNTg3LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBXYWl0VGlsbENhcmRJc0ZyZWUodTE2IGJhc2UpCi17Ci0JdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7Ci0KLQl3aGlsZSAoIShpbncoYmFzZSArIDB4ZSkgJiAweDEpICYmIGNvdW50KysgPCAxMDApCi0JCW1zbGVlcCg1KTsKLQotCXJldHVybiAhKGludyhiYXNlICsgMHhlKSAmIDB4MSk7Ci19Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IGxvYWRfZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJY29uc3QgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCB1bnNpZ25lZCBpbnQgc2lnbmF0dXJlKQogewpAQCAtMTgzMSw2ICsxNzA0LDExIEBACiAJCX0KIAogCQlkYXRhID0ga21hbGxvYyh3b3JkX2NvdW50ICogMiwgR0ZQX0tFUk5FTCk7CisJCWlmIChkYXRhID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhcmQlZCwgZmlybXdhcmUgdXBsb2FkICIKKwkJCQkiZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeVxuIiwgaW5kZXggKyAxKTsKKwkJCWdvdG8gZXJycmVsZnc7CisJCX0KIAkJaW53KGJhc2UpOwogCQlpbnN3KGJhc2UsIGRhdGEsIHdvcmRfY291bnQpOwogCQlJbnRlcnJ1cHRUaGVDYXJkKGJhc2UpOwpAQCAtMTg3OSw4ICsxNzU3LDYgQEAKIC8qCiAgKglJbnNtb2QgY2FuIHNldCBzdGF0aWMgc3ltYm9scyBzbyBrZWVwIHRoZXNlIHN0YXRpYwogICovCi1zdGF0aWMgaW50IGlvWzRdOwotc3RhdGljIGludCBpcnFbNF07CiBzdGF0aWMgaW50IGNhcmQ7CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlzaWNvbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKQEAgLTE5MDYsMjAgKzE3ODIsMjkgQEAKIAkJCWJyZWFrOwogCQl9CiAKKwlib2FyZC0+aW5kZXggPSBpbmRleDsKIAlib2FyZC0+YmFzZSA9IGlvYWRkcjsKIAlib2FyZC0+aXJxID0gcGNpaXJxOwotCWJvYXJkLT5pc2EgPSBOTzsKIAljYXJkKys7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYm9hcmQpOwogCi0JcmV0dmFsID0gaXNpY29tX3JlZ2lzdGVyX2lvcmVnaW9uKHBkZXYsIGluZGV4KTsKLQlpZiAocmV0dmFsIDwgMCkKKwlyZXR2YWwgPSBwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgMywgSVNJQ09NX05BTUUpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSS9PIFJlZ2lvbiAweCVseC0weCVseCBpcyBidXN5LiBDYXJkJWQgIgorCQkJIndpbGwgYmUgZGlzYWJsZWQuXG4iLCBib2FyZC0+YmFzZSwgYm9hcmQtPmJhc2UgKyAxNSwKKwkJCWluZGV4ICsgMSk7CisJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBlcnI7CisgCX0KIAotCXJldHZhbCA9IGlzaWNvbV9yZWdpc3Rlcl9pc3IocGRldiwgaW5kZXgpOwotCWlmIChyZXR2YWwgPCAwKQorCXJldHZhbCA9IHJlcXVlc3RfaXJxKGJvYXJkLT5pcnEsIGlzaWNvbV9pbnRlcnJ1cHQsCisJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIElTSUNPTV9OQU1FLCBib2FyZCk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGluc3RhbGwgaGFuZGxlciBhdCBJcnEgJWQuICIKKwkJCSJDYXJkJWQgd2lsbCBiZSBkaXNhYmxlZC5cbiIsIGJvYXJkLT5pcnEsIGluZGV4ICsgMSk7CiAJCWdvdG8gZXJydW5ycjsKKwl9CiAKIAlyZXR2YWwgPSByZXNldF9jYXJkKHBkZXYsIGluZGV4LCAmc2lnbmF0dXJlKTsKIAlpZiAocmV0dmFsIDwgMCkKQEAgLTE5MjksMTIgKzE4MTQsMTYgQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBlcnJ1bnJpOwogCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYm9hcmQtPnBvcnRfY291bnQ7IGluZGV4KyspCisJCXR0eV9yZWdpc3Rlcl9kZXZpY2UoaXNpY29tX25vcm1hbCwgYm9hcmQtPmluZGV4ICogMTYgKyBpbmRleCwKKwkJCQkmcGRldi0+ZGV2KTsKKwogCXJldHVybiAwOwogCiBlcnJ1bnJpOgogCWZyZWVfaXJxKGJvYXJkLT5pcnEsIGJvYXJkKTsKIGVycnVucnI6Ci0JaXNpY29tX3VucmVnaXN0ZXJfaW9yZWdpb24ocGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDMpOwogZXJyOgogCWJvYXJkLT5iYXNlID0gMDsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTk0MywxOCArMTgzMiwyMSBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IGlzaWNvbV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGlzaV9ib2FyZCAqYm9hcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYm9hcmQtPnBvcnRfY291bnQ7IGkrKykKKwkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGlzaWNvbV9ub3JtYWwsIGJvYXJkLT5pbmRleCAqIDE2ICsgaSk7CiAKIAlmcmVlX2lycShib2FyZC0+aXJxLCBib2FyZCk7Ci0JaXNpY29tX3VucmVnaXN0ZXJfaW9yZWdpb24ocGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDMpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpc2ljb21fc2V0dXAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGlzaWNvbV9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbCwgaWR4LCBjaGFubmVsOwogCXN0cnVjdCBpc2lfcG9ydCAqcG9ydDsKIAogCWNhcmQgPSAwOwotCW1lbXNldChpc2lfcG9ydHMsIDAsIHNpemVvZihpc2lfcG9ydHMpKTsKIAogCWZvcihpZHggPSAwOyBpZHggPCBCT0FSRF9DT1VOVDsgaWR4KyspIHsKIAkJcG9ydCA9ICZpc2lfcG9ydHNbaWR4ICogMTZdOwpAQCAtMTk3NSw2NiArMTg2Nyw2NSBAQAogIAkJfQogCQlpc2lfY2FyZFtpZHhdLmJhc2UgPSAwOwogCQlpc2lfY2FyZFtpZHhdLmlycSA9IDA7Ci0KLQkJaWYgKCFpb1tpZHhdKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGlycVtpZHhdID09IDIgfHwgaXJxW2lkeF0gPT0gMyB8fCBpcnFbaWR4XSA9PSA0CXx8Ci0JCQkJaXJxW2lkeF0gPT0gNQl8fCBpcnFbaWR4XSA9PSA3CXx8Ci0JCQkJaXJxW2lkeF0gPT0gMTAJfHwgaXJxW2lkeF0gPT0gMTEJfHwKLQkJCQlpcnFbaWR4XSA9PSAxMgl8fCBpcnFbaWR4XSA9PSAxNSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJJU0lDT006IElTQSBub3Qgc3VwcG9ydGVkIHlldC5cbiIpOwotCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0gZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSICJJU0lDT006IElycSAlZCB1bnN1cHBvcnRlZC4gIgotCQkJCSJEaXNhYmxpbmcgQ2FyZCVkLi4uXG4iLCBpcnFbaWR4XSwgaWR4ICsgMSk7CiAJfQogCi0JcmV0dmFsID0gaXNpY29tX3JlZ2lzdGVyX3R0eV9kcml2ZXIoKTsKLQlpZiAocmV0dmFsIDwgMCkKKwkvKiB0dHkgZHJpdmVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiAqLworCWlzaWNvbV9ub3JtYWwgPSBhbGxvY190dHlfZHJpdmVyKFBPUlRfQ09VTlQpOworCWlmICghaXNpY29tX25vcm1hbCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOworCX0KKworCWlzaWNvbV9ub3JtYWwtPm93bmVyCQkJPSBUSElTX01PRFVMRTsKKwlpc2ljb21fbm9ybWFsLT5uYW1lIAkJCT0gInR0eU0iOworCWlzaWNvbV9ub3JtYWwtPm1ham9yCQkJPSBJU0lDT01fTk1BSk9SOworCWlzaWNvbV9ub3JtYWwtPm1pbm9yX3N0YXJ0CQk9IDA7CisJaXNpY29tX25vcm1hbC0+dHlwZQkJCT0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKKwlpc2ljb21fbm9ybWFsLT5zdWJ0eXBlCQkJPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJaXNpY29tX25vcm1hbC0+aW5pdF90ZXJtaW9zCQk9IHR0eV9zdGRfdGVybWlvczsKKwlpc2ljb21fbm9ybWFsLT5pbml0X3Rlcm1pb3MuY19jZmxhZwk9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8CisJCUNMT0NBTDsKKwlpc2ljb21fbm9ybWFsLT5mbGFncwkJCT0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8CisJCVRUWV9EUklWRVJfRFlOQU1JQ19ERVY7CisJdHR5X3NldF9vcGVyYXRpb25zKGlzaWNvbV9ub3JtYWwsICZpc2ljb21fb3BzKTsKKworCXJldHZhbCA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoaXNpY29tX25vcm1hbCk7CisJaWYgKHJldHZhbCkgeworCQlwcl9kYmcoIkNvdWxkbid0IHJlZ2lzdGVyIHRoZSBkaWFsaW4gZHJpdmVyXG4iKTsKKwkJZ290byBlcnJfcHV0dHR5OworCX0KIAogCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlzaWNvbV9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSVNJQ09NOiBVbmFibGUgdG8gcmVnaXN0ZXIgcGNpIGRyaXZlci5cbiIpOwotCQlnb3RvIGVycnR0eTsKKwkJZ290byBlcnJfdW5ydHR5OwogCX0KIAotCWluaXRfdGltZXIoJnR4KTsKLQl0eC5leHBpcmVzID0gamlmZmllcyArIDE7Ci0JdHguZGF0YSA9IDA7Ci0JdHguZnVuY3Rpb24gPSBpc2ljb21fdHg7Ci0JcmVfc2NoZWR1bGUgPSAxOwotCWFkZF90aW1lcigmdHgpOworCW1vZF90aW1lcigmdHgsIGppZmZpZXMgKyAxKTsKIAogCXJldHVybiAwOwotZXJydHR5OgotCWlzaWNvbV91bnJlZ2lzdGVyX3R0eV9kcml2ZXIoKTsKK2Vycl91bnJ0dHk6CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGlzaWNvbV9ub3JtYWwpOworZXJyX3B1dHR0eToKKwlwdXRfdHR5X2RyaXZlcihpc2ljb21fbm9ybWFsKTsKIGVycm9yOgogCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpc2ljb21fZXhpdCh2b2lkKQogewotCXVuc2lnbmVkIGludCBpbmRleCA9IDA7Ci0KIAlyZV9zY2hlZHVsZSA9IDA7CiAKLQl3aGlsZSAocmVfc2NoZWR1bGUgIT0gMiAmJiBpbmRleCsrIDwgMTAwKQotCQltc2xlZXAoMTApOworCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaXNpX3RpbWVyZG9uZSwgSFopOwogCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpc2ljb21fZHJpdmVyKTsKLQlpc2ljb21fdW5yZWdpc3Rlcl90dHlfZHJpdmVyKCk7CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGlzaWNvbV9ub3JtYWwpOworCXB1dF90dHlfZHJpdmVyKGlzaWNvbV9ub3JtYWwpOwogfQogCi1tb2R1bGVfaW5pdChpc2ljb21fc2V0dXApOworbW9kdWxlX2luaXQoaXNpY29tX2luaXQpOwogbW9kdWxlX2V4aXQoaXNpY29tX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJNdWx0aVRlY2giKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgSVNJIHNlcmllcyBvZiBjYXJkcyBieSBNdWx0aVRlY2giKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLW1vZHVsZV9wYXJhbV9hcnJheShpbywgaW50LCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gcG9ydHMgZm9yIHRoZSBjYXJkcyIpOwotbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSW50ZXJydXB0cyBmb3IgdGhlIGNhcmRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKaW5kZXggOGY1OTE5NC4uNjg2NDVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCisrKyBiL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYwpAQCAtMTQsMTQgKzE0LDYgQEAKICAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICoJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKglGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MSw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vpc2EuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTYxLDIxICs1NCwxMCBAQAogI2RlZmluZQlCUkRfQlJVTUJZNAkyCiAjZGVmaW5lCUJSRF9PTkJPQVJEMgkzCiAjZGVmaW5lCUJSRF9PTkJPQVJECTQKLSNkZWZpbmUJQlJEX0JSVU1CWTgJNQotI2RlZmluZQlCUkRfQlJVTUJZMTYJNgogI2RlZmluZQlCUkRfT05CT0FSREUJNwotI2RlZmluZQlCUkRfT05CT0FSRDMyCTkKLSNkZWZpbmUJQlJEX09OQk9BUkQyXzMyCTEwCi0jZGVmaW5lCUJSRF9PTkJPQVJEUlMJMTEKLSNkZWZpbmUJQlJEX0VBU1lJTwkyMAotI2RlZmluZQlCUkRfRUNICQkyMQotI2RlZmluZQlCUkRfRUNITUMJMjIKICNkZWZpbmUJQlJEX0VDUAkJMjMKICNkZWZpbmUgQlJEX0VDUEUJMjQKICNkZWZpbmUJQlJEX0VDUE1DCTI1Ci0jZGVmaW5lCUJSRF9FQ0hQQ0kJMjYKLSNkZWZpbmUJQlJEX0VDSDY0UENJCTI3Ci0jZGVmaW5lCUJSRF9FQVNZSU9QQ0kJMjgKICNkZWZpbmUJQlJEX0VDUFBDSQkyOQogCiAjZGVmaW5lCUJSRF9CUlVNQlkJQlJEX0JSVU1CWTQKQEAgLTExOSwyMCArMTAxLDE2IEBACiAgKglpbnRlcnJ1cHQgaXMgcmVxdWlyZWQuCiAgKi8KIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IHN0bGNvbmYgewogCWludAkJYnJkdHlwZTsKIAlpbnQJCWlvYWRkcjE7CiAJaW50CQlpb2FkZHIyOwogCXVuc2lnbmVkIGxvbmcJbWVtYWRkcjsKIAlpbnQJCWlycTsKIAlpbnQJCWlycXR5cGU7Ci19IHN0bGNvbmZfdDsKLQotc3RhdGljIHN0bGNvbmZfdAlzdGxpX2JyZGNvbmZbXSA9IHsKLQkvKnsgQlJEX0VDUCwgMHgyYTAsIDAsIDB4Y2MwMDAsIDAsIDAgfSwqLwogfTsKIAotc3RhdGljIGludAlzdGxpX25yYnJkcyA9IEFSUkFZX1NJWkUoc3RsaV9icmRjb25mKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RsaV9ucmJyZHM7CiAKIC8qIHN0bGlfbG9jayBtdXN0IE5PVCBiZSB0YWtlbiBob2xkaW5nIGJyZF9sb2NrICovCiBzdGF0aWMgc3BpbmxvY2tfdCBzdGxpX2xvY2s7CS8qIFRUWSBsb2dpYyBsb2NrICovCkBAIC0xOTQsOSArMTcyLDExIEBACiAgKgl3aXRoIHRoaXMgdGVybWlvcyBpbml0aWFsbHkuIEJhc2ljYWxseSBhbGwgaXQgZGVmaW5lcyBpcyBhIHJhdyBwb3J0CiAgKglhdCA5NjAwIGJhdWQsIDggZGF0YSBiaXRzLCBubyBwYXJpdHksIDEgc3RvcCBiaXQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdGVybWlvcwkJc3RsaV9kZWZ0ZXJtaW9zID0geworc3RhdGljIHN0cnVjdCBrdGVybWlvcwkJc3RsaV9kZWZ0ZXJtaW9zID0gewogCS5jX2NmbGFnCT0gKEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTCksCiAJLmNfY2MJCT0gSU5JVF9DX0NDLAorCS5jX2lzcGVlZAk9IDk2MDAsCisJLmNfb3NwZWVkCT0gOTYwMCwKIH07CiAKIC8qCkBAIC0yMDUsMTMgKzE4NSwxMiBAQAogICovCiBzdGF0aWMgY29tc3RhdHNfdAlzdGxpX2NvbXN0YXRzOwogc3RhdGljIGNvbWJyZF90CQlzdGxpX2JyZHN0YXRzOwotc3RhdGljIGFzeXN0YXRzX3QJc3RsaV9jZGtzdGF0czsKLXN0YXRpYyBzdGxpYnJkX3QJc3RsaV9kdW1teWJyZDsKLXN0YXRpYyBzdGxpcG9ydF90CXN0bGlfZHVtbXlwb3J0Oworc3RhdGljIHN0cnVjdCBhc3lzdGF0cwlzdGxpX2Nka3N0YXRzOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBzdGxpYnJkX3QJKnN0bGlfYnJkc1tTVExfTUFYQlJEU107CitzdGF0aWMgREVGSU5FX01VVEVYKHN0bGlfYnJkc2xvY2spOworc3RhdGljIHN0cnVjdCBzdGxpYnJkCSpzdGxpX2JyZHNbU1RMX01BWEJSRFNdOwogCiBzdGF0aWMgaW50CQlzdGxpX3NoYXJlZDsKIApAQCAtMjIzLDYgKzIwMiw3IEBACiAgKi8KICNkZWZpbmUJQlNUX0ZPVU5ECTB4MQogI2RlZmluZQlCU1RfU1RBUlRFRAkweDIKKyNkZWZpbmUJQlNUX1BST0JFRAkweDQKIAogLyoKICAqCURlZmluZSB0aGUgc2V0IG9mIHBvcnQgc3RhdGUgZmxhZ3MuIFRoZXNlIGFyZSBtYXJrZWQgZm9yIGludGVybmFsCkBAIC0yNTUsMTggKzIzNSwxOCBAQAogCSJCcnVtYnkiLAogCSJCcnVtYnkiLAogCSJPTmJvYXJkLUVJIiwKLQkoY2hhciAqKSBOVUxMLAorCU5VTEwsCiAJIk9OYm9hcmQiLAogCSJPTmJvYXJkLU1DIiwKIAkiT05ib2FyZC1NQyIsCi0JKGNoYXIgKikgTlVMTCwKLQkoY2hhciAqKSBOVUxMLAotCShjaGFyICopIE5VTEwsCi0JKGNoYXIgKikgTlVMTCwKLQkoY2hhciAqKSBOVUxMLAotCShjaGFyICopIE5VTEwsCi0JKGNoYXIgKikgTlVMTCwKLQkoY2hhciAqKSBOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKIAkiRWFzeUlPIiwKIAkiRUM4LzMyLUFUIiwKIAkiRUM4LzMyLU1DIiwKQEAgLTMwNCwxMiArMjg0LDEwIEBACiAgKglwYXJzZSBhbnkgbW9kdWxlIGFyZ3VtZW50cy4KICAqLwogCi10eXBlZGVmIHN0cnVjdCBzdGxpYnJkdHlwZSB7CitzdGF0aWMgc3RydWN0IHN0bGlicmR0eXBlIHsKIAljaGFyCSpuYW1lOwogCWludAl0eXBlOwotfSBzdGxpYnJkdHlwZV90OwotCi1zdGF0aWMgc3RsaWJyZHR5cGVfdAlzdGxpX2JyZHN0cltdID0geworfSBzdGxpX2JyZHN0cltdID0gewogCXsgInN0YWxsaW9uIiwgQlJEX1NUQUxMSU9OIH0sCiAJeyAiMSIsIEJSRF9TVEFMTElPTiB9LAogCXsgImJydW1ieSIsIEJSRF9CUlVNQlkgfSwKQEAgLTM3OSw2ICszNTcsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGJvYXJkMywgY2hhcnAsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhib2FyZDMsICJCb2FyZCAzIGNvbmZpZyAtPiBuYW1lWyxpb2FkZHJbLG1lbWFkZHJdIik7CiAKKyNpZiBTVExJX0VJU0FQUk9CRSAhPSAwCiAvKgogICoJU2V0IHVwIGEgZGVmYXVsdCBtZW1vcnkgYWRkcmVzcyB0YWJsZSBmb3IgRUlTQSBib2FyZCBwcm9iaW5nLgogICoJVGhlIGRlZmF1bHQgYWRkcmVzc2VzIGFyZSBhbGwgYmVsbG93IDFNYnl0ZSwgd2hpY2ggaGFzIHRvIGJlIHRoZQpAQCAtMzk2LDE0ICszNzUsMTEgQEAKIH07CiAKIHN0YXRpYyBpbnQJc3RsaV9laXNhbWVtcHNpemUgPSBBUlJBWV9TSVpFKHN0bGlfZWlzYW1lbXByb2JlYWRkcnMpOworI2VuZGlmCiAKIC8qCiAgKglEZWZpbmUgdGhlIFN0YWxsaW9uIFBDSSB2ZW5kb3IgYW5kIGRldmljZSBJRHMuCiAgKi8KLSNpZmRlZiBDT05GSUdfUENJCi0jaWZuZGVmCVBDSV9WRU5ET1JfSURfU1RBTExJT04KLSNkZWZpbmUJUENJX1ZFTkRPUl9JRF9TVEFMTElPTgkJMHgxMjRkCi0jZW5kaWYKICNpZm5kZWYgUENJX0RFVklDRV9JRF9FQ1JBCiAjZGVmaW5lCVBDSV9ERVZJQ0VfSURfRUNSQQkJMHgwMDA0CiAjZW5kaWYKQEAgLTQxNCw3ICszOTAsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpc3RhbGxpb25fcGNpX3RibCk7CiAKLSNlbmRpZiAvKiBDT05GSUdfUENJICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3RsaV9wY2lkcml2ZXI7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNjE1LDIyICs1OTEsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqCURlZmluZSBzb21lIGhhbmR5IGxvY2FsIG1hY3Jvcy4uLgotICovCi0jdW5kZWYgTUlOCi0jZGVmaW5lCU1JTihhLGIpCSgoKGEpIDw9IChiKSkgPyAoYSkgOiAoYikpCi0KLSN1bmRlZglUT0xPV0VSCi0jZGVmaW5lCVRPTE9XRVIoeCkJKCgoKHgpID49ICdBJykgJiYgKCh4KSA8PSAnWicpKSA/ICgoeCkgKyAweDIwKSA6ICh4KSkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgogICoJUHJvdG90eXBlIGFsbCBmdW5jdGlvbnMgaW4gdGhpcyBkcml2ZXIhCiAgKi8KIAotc3RhdGljIGludAlzdGxpX3BhcnNlYnJkKHN0bGNvbmZfdCAqY29uZnAsIGNoYXIgKiphcmdwKTsKLXN0YXRpYyBpbnQJc3RsaV9pbml0KHZvaWQpOworc3RhdGljIGludAlzdGxpX3BhcnNlYnJkKHN0cnVjdCBzdGxjb25mICpjb25mcCwgY2hhciAqKmFyZ3ApOwogc3RhdGljIGludAlzdGxpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIHZvaWQJc3RsaV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiBzdGF0aWMgaW50CXN0bGlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwpAQCAtNjM5LDcgKzYwMyw3IEBACiBzdGF0aWMgaW50CXN0bGlfd3JpdGVyb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludAlzdGxpX2NoYXJzaW5idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgaW50CXN0bGlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyB2b2lkCXN0bGlfc2V0dGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkKTsKK3N0YXRpYyB2b2lkCXN0bGlfc2V0dGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CiBzdGF0aWMgdm9pZAlzdGxpX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQJc3RsaV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQJc3RsaV9zdG9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpAQCAtNjQ5LDg2ICs2MTMsODQgQEAKIHN0YXRpYyB2b2lkCXN0bGlfd2FpdHVudGlsc2VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCk7CiBzdGF0aWMgdm9pZAlzdGxpX3NlbmR4Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKTsKIHN0YXRpYyB2b2lkCXN0bGlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotc3RhdGljIGludAlzdGxpX3BvcnRpbmZvKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIGludCBwb3J0bnIsIGNoYXIgKnBvcyk7CitzdGF0aWMgaW50CXN0bGlfcG9ydGluZm8oc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIGludCBwb3J0bnIsIGNoYXIgKnBvcyk7CiAKLXN0YXRpYyBpbnQJc3RsaV9icmRpbml0KHN0bGlicmRfdCAqYnJkcCk7Ci1zdGF0aWMgaW50CXN0bGlfc3RhcnRicmQoc3RsaWJyZF90ICpicmRwKTsKK3N0YXRpYyBpbnQJc3RsaV9icmRpbml0KHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyBpbnQJc3RsaV9zdGFydGJyZChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CiBzdGF0aWMgc3NpemVfdAlzdGxpX21lbXJlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmcCk7CiBzdGF0aWMgc3NpemVfdAlzdGxpX21lbXdyaXRlKHN0cnVjdCBmaWxlICpmcCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnApOwogc3RhdGljIGludAlzdGxpX21lbWlvY3RsKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQJc3RsaV9icmRwb2xsKHN0bGlicmRfdCAqYnJkcCwgY2RraGRyX3QgX19pb21lbSAqaGRycCk7CitzdGF0aWMgdm9pZAlzdGxpX2JyZHBvbGwoc3RydWN0IHN0bGlicmQgKmJyZHAsIGNka2hkcl90IF9faW9tZW0gKmhkcnApOwogc3RhdGljIHZvaWQJc3RsaV9wb2xsKHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyBpbnQJc3RsaV9ob3N0Y21kKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHApOwotc3RhdGljIGludAlzdGxpX2luaXRvcGVuKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHApOwotc3RhdGljIGludAlzdGxpX3Jhd29wZW4oc3RsaWJyZF90ICpicmRwLCBzdGxpcG9ydF90ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBhcmcsIGludCB3YWl0KTsKLXN0YXRpYyBpbnQJc3RsaV9yYXdjbG9zZShzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGFyZywgaW50IHdhaXQpOwotc3RhdGljIGludAlzdGxpX3dhaXRjYXJyaWVyKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQJc3RsaV9ob3N0Y21kKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwKTsKK3N0YXRpYyBpbnQJc3RsaV9pbml0b3BlbihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCk7CitzdGF0aWMgaW50CXN0bGlfcmF3b3BlbihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBhcmcsIGludCB3YWl0KTsKK3N0YXRpYyBpbnQJc3RsaV9yYXdjbG9zZShzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBhcmcsIGludCB3YWl0KTsKK3N0YXRpYyBpbnQJc3RsaV93YWl0Y2FycmllcihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIHZvaWQJc3RsaV9kb2hhbmd1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Ci1zdGF0aWMgaW50CXN0bGlfc2V0cG9ydChzdGxpcG9ydF90ICpwb3J0cCk7Ci1zdGF0aWMgaW50CXN0bGlfY21kd2FpdChzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqYXJnLCBpbnQgc2l6ZSwgaW50IGNvcHliYWNrKTsKLXN0YXRpYyB2b2lkCXN0bGlfc2VuZGNtZChzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqYXJnLCBpbnQgc2l6ZSwgaW50IGNvcHliYWNrKTsKLXN0YXRpYyB2b2lkCV9fc3RsaV9zZW5kY21kKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICphcmcsIGludCBzaXplLCBpbnQgY29weWJhY2spOwotc3RhdGljIHZvaWQJc3RsaV9kb2RlbGF5Y21kKHN0bGlwb3J0X3QgKnBvcnRwLCBjZGtjdHJsX3QgX19pb21lbSAqY3ApOwotc3RhdGljIHZvaWQJc3RsaV9ta2FzeXBvcnQoc3RsaXBvcnRfdCAqcG9ydHAsIGFzeXBvcnRfdCAqcHAsIHN0cnVjdCB0ZXJtaW9zICp0aW9zcCk7CitzdGF0aWMgaW50CXN0bGlfc2V0cG9ydChzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwKTsKK3N0YXRpYyBpbnQJc3RsaV9jbWR3YWl0KHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqYXJnLCBpbnQgc2l6ZSwgaW50IGNvcHliYWNrKTsKK3N0YXRpYyB2b2lkCXN0bGlfc2VuZGNtZChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKmFyZywgaW50IHNpemUsIGludCBjb3B5YmFjayk7CitzdGF0aWMgdm9pZAlfX3N0bGlfc2VuZGNtZChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKmFyZywgaW50IHNpemUsIGludCBjb3B5YmFjayk7CitzdGF0aWMgdm9pZAlzdGxpX2RvZGVsYXljbWQoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgY2RrY3RybF90IF9faW9tZW0gKmNwKTsKK3N0YXRpYyB2b2lkCXN0bGlfbWthc3lwb3J0KHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIGFzeXBvcnRfdCAqcHAsIHN0cnVjdCBrdGVybWlvcyAqdGlvc3ApOwogc3RhdGljIHZvaWQJc3RsaV9ta2FzeXNpZ3MoYXN5c2lnc190ICpzcCwgaW50IGR0ciwgaW50IHJ0cyk7CiBzdGF0aWMgbG9uZwlzdGxpX21rdGlvY20odW5zaWduZWQgbG9uZyBzaWd2YWx1ZSk7Ci1zdGF0aWMgdm9pZAlzdGxpX3JlYWQoc3RsaWJyZF90ICpicmRwLCBzdGxpcG9ydF90ICpwb3J0cCk7Ci1zdGF0aWMgaW50CXN0bGlfZ2V0c2VyaWFsKHN0bGlwb3J0X3QgKnBvcnRwLCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnNwKTsKLXN0YXRpYyBpbnQJc3RsaV9zZXRzZXJpYWwoc3RsaXBvcnRfdCAqcG9ydHAsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApOworc3RhdGljIHZvaWQJc3RsaV9yZWFkKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwKTsKK3N0YXRpYyBpbnQJc3RsaV9nZXRzZXJpYWwoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCk7CitzdGF0aWMgaW50CXN0bGlfc2V0c2VyaWFsKHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApOwogc3RhdGljIGludAlzdGxpX2dldGJyZHN0YXRzKGNvbWJyZF90IF9fdXNlciAqYnApOwotc3RhdGljIGludAlzdGxpX2dldHBvcnRzdGF0cyhzdGxpcG9ydF90ICpwb3J0cCwgY29tc3RhdHNfdCBfX3VzZXIgKmNwKTsKLXN0YXRpYyBpbnQJc3RsaV9wb3J0Y21kc3RhdHMoc3RsaXBvcnRfdCAqcG9ydHApOwotc3RhdGljIGludAlzdGxpX2NscnBvcnRzdGF0cyhzdGxpcG9ydF90ICpwb3J0cCwgY29tc3RhdHNfdCBfX3VzZXIgKmNwKTsKLXN0YXRpYyBpbnQJc3RsaV9nZXRwb3J0c3RydWN0KHN0bGlwb3J0X3QgX191c2VyICphcmcpOwotc3RhdGljIGludAlzdGxpX2dldGJyZHN0cnVjdChzdGxpYnJkX3QgX191c2VyICphcmcpOwotc3RhdGljIHN0bGlicmRfdCAqc3RsaV9hbGxvY2JyZCh2b2lkKTsKK3N0YXRpYyBpbnQJc3RsaV9nZXRwb3J0c3RhdHMoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgY29tc3RhdHNfdCBfX3VzZXIgKmNwKTsKK3N0YXRpYyBpbnQJc3RsaV9wb3J0Y21kc3RhdHMoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCk7CitzdGF0aWMgaW50CXN0bGlfY2xycG9ydHN0YXRzKHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIGNvbXN0YXRzX3QgX191c2VyICpjcCk7CitzdGF0aWMgaW50CXN0bGlfZ2V0cG9ydHN0cnVjdChzdHJ1Y3Qgc3RsaXBvcnQgX191c2VyICphcmcpOworc3RhdGljIGludAlzdGxpX2dldGJyZHN0cnVjdChzdHJ1Y3Qgc3RsaWJyZCBfX3VzZXIgKmFyZyk7CitzdGF0aWMgc3RydWN0IHN0bGlicmQgKnN0bGlfYWxsb2NicmQodm9pZCk7CiAKLXN0YXRpYyB2b2lkCXN0bGlfZWNwaW5pdChzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQJc3RsaV9lY3BlbmFibGUoc3RsaWJyZF90ICpicmRwKTsKLXN0YXRpYyB2b2lkCXN0bGlfZWNwZGlzYWJsZShzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9lY3BnZXRtZW1wdHIoc3RsaWJyZF90ICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpOwotc3RhdGljIHZvaWQJc3RsaV9lY3ByZXNldChzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQJc3RsaV9lY3BpbnRyKHN0bGlicmRfdCAqYnJkcCk7Ci1zdGF0aWMgdm9pZAlzdGxpX2VjcGVpaW5pdChzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQJc3RsaV9lY3BlaWVuYWJsZShzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQJc3RsaV9lY3BlaWRpc2FibGUoc3RsaWJyZF90ICpicmRwKTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnN0bGlfZWNwZWlnZXRtZW1wdHIoc3RsaWJyZF90ICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpOwotc3RhdGljIHZvaWQJc3RsaV9lY3BlaXJlc2V0KHN0bGlicmRfdCAqYnJkcCk7Ci1zdGF0aWMgdm9pZAlzdGxpX2VjcG1jZW5hYmxlKHN0bGlicmRfdCAqYnJkcCk7Ci1zdGF0aWMgdm9pZAlzdGxpX2VjcG1jZGlzYWJsZShzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9lY3BtY2dldG1lbXB0cihzdGxpYnJkX3QgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSk7Ci1zdGF0aWMgdm9pZAlzdGxpX2VjcG1jcmVzZXQoc3RsaWJyZF90ICpicmRwKTsKLXN0YXRpYyB2b2lkCXN0bGlfZWNwcGNpaW5pdChzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9lY3BwY2lnZXRtZW1wdHIoc3RsaWJyZF90ICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpOwotc3RhdGljIHZvaWQJc3RsaV9lY3BwY2lyZXNldChzdGxpYnJkX3QgKmJyZHApOworc3RhdGljIHZvaWQJc3RsaV9lY3Bpbml0KHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkCXN0bGlfZWNwZW5hYmxlKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkCXN0bGlfZWNwZGlzYWJsZShzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpzdGxpX2VjcGdldG1lbXB0cihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKTsKK3N0YXRpYyB2b2lkCXN0bGlfZWNwcmVzZXQoc3RydWN0IHN0bGlicmQgKmJyZHApOworc3RhdGljIHZvaWQJc3RsaV9lY3BpbnRyKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkCXN0bGlfZWNwZWlpbml0KHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkCXN0bGlfZWNwZWllbmFibGUoc3RydWN0IHN0bGlicmQgKmJyZHApOworc3RhdGljIHZvaWQJc3RsaV9lY3BlaWRpc2FibGUoc3RydWN0IHN0bGlicmQgKmJyZHApOworc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9lY3BlaWdldG1lbXB0cihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKTsKK3N0YXRpYyB2b2lkCXN0bGlfZWNwZWlyZXNldChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CitzdGF0aWMgdm9pZAlzdGxpX2VjcG1jZW5hYmxlKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkCXN0bGlfZWNwbWNkaXNhYmxlKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnN0bGlfZWNwbWNnZXRtZW1wdHIoc3RydWN0IHN0bGlicmQgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSk7CitzdGF0aWMgdm9pZAlzdGxpX2VjcG1jcmVzZXQoc3RydWN0IHN0bGlicmQgKmJyZHApOworc3RhdGljIHZvaWQJc3RsaV9lY3BwY2lpbml0KHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnN0bGlfZWNwcGNpZ2V0bWVtcHRyKHN0cnVjdCBzdGxpYnJkICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpOworc3RhdGljIHZvaWQJc3RsaV9lY3BwY2lyZXNldChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CiAKLXN0YXRpYyB2b2lkCXN0bGlfb25iaW5pdChzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQJc3RsaV9vbmJlbmFibGUoc3RsaWJyZF90ICpicmRwKTsKLXN0YXRpYyB2b2lkCXN0bGlfb25iZGlzYWJsZShzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9vbmJnZXRtZW1wdHIoc3RsaWJyZF90ICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpOwotc3RhdGljIHZvaWQJc3RsaV9vbmJyZXNldChzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQJc3RsaV9vbmJlaW5pdChzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQJc3RsaV9vbmJlZW5hYmxlKHN0bGlicmRfdCAqYnJkcCk7Ci1zdGF0aWMgdm9pZAlzdGxpX29uYmVkaXNhYmxlKHN0bGlicmRfdCAqYnJkcCk7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICpzdGxpX29uYmVnZXRtZW1wdHIoc3RsaWJyZF90ICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpOwotc3RhdGljIHZvaWQJc3RsaV9vbmJlcmVzZXQoc3RsaWJyZF90ICpicmRwKTsKLXN0YXRpYyB2b2lkCXN0bGlfYmJ5aW5pdChzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9iYnlnZXRtZW1wdHIoc3RsaWJyZF90ICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpOwotc3RhdGljIHZvaWQJc3RsaV9iYnlyZXNldChzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQJc3RsaV9zdGFsaW5pdChzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9zdGFsZ2V0bWVtcHRyKHN0bGlicmRfdCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKTsKLXN0YXRpYyB2b2lkCXN0bGlfc3RhbHJlc2V0KHN0bGlicmRfdCAqYnJkcCk7CitzdGF0aWMgdm9pZAlzdGxpX29uYmluaXQoc3RydWN0IHN0bGlicmQgKmJyZHApOworc3RhdGljIHZvaWQJc3RsaV9vbmJlbmFibGUoc3RydWN0IHN0bGlicmQgKmJyZHApOworc3RhdGljIHZvaWQJc3RsaV9vbmJkaXNhYmxlKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnN0bGlfb25iZ2V0bWVtcHRyKHN0cnVjdCBzdGxpYnJkICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpOworc3RhdGljIHZvaWQJc3RsaV9vbmJyZXNldChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CitzdGF0aWMgdm9pZAlzdGxpX29uYmVpbml0KHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkCXN0bGlfb25iZWVuYWJsZShzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CitzdGF0aWMgdm9pZAlzdGxpX29uYmVkaXNhYmxlKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnN0bGlfb25iZWdldG1lbXB0cihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKTsKK3N0YXRpYyB2b2lkCXN0bGlfb25iZXJlc2V0KHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyB2b2lkCXN0bGlfYmJ5aW5pdChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpzdGxpX2JieWdldG1lbXB0cihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKTsKK3N0YXRpYyB2b2lkCXN0bGlfYmJ5cmVzZXQoc3RydWN0IHN0bGlicmQgKmJyZHApOworc3RhdGljIHZvaWQJc3RsaV9zdGFsaW5pdChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpzdGxpX3N0YWxnZXRtZW1wdHIoc3RydWN0IHN0bGlicmQgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSk7CitzdGF0aWMgdm9pZAlzdGxpX3N0YWxyZXNldChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CiAKLXN0YXRpYyBzdGxpcG9ydF90ICpzdGxpX2dldHBvcnQoaW50IGJyZG5yLCBpbnQgcGFuZWxuciwgaW50IHBvcnRucik7CitzdGF0aWMgc3RydWN0IHN0bGlwb3J0ICpzdGxpX2dldHBvcnQodW5zaWduZWQgaW50IGJyZG5yLCB1bnNpZ25lZCBpbnQgcGFuZWxuciwgdW5zaWduZWQgaW50IHBvcnRucik7CiAKLXN0YXRpYyBpbnQJc3RsaV9pbml0ZWNwKHN0bGlicmRfdCAqYnJkcCk7Ci1zdGF0aWMgaW50CXN0bGlfaW5pdG9uYihzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIGludAlzdGxpX2Vpc2FtZW1wcm9iZShzdGxpYnJkX3QgKmJyZHApOwotc3RhdGljIGludAlzdGxpX2luaXRwb3J0cyhzdGxpYnJkX3QgKmJyZHApOwotCi0jaWZkZWYJQ09ORklHX1BDSQotc3RhdGljIGludAlzdGxpX2luaXRwY2licmQoaW50IGJyZHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpkZXZwKTsKK3N0YXRpYyBpbnQJc3RsaV9pbml0ZWNwKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKK3N0YXRpYyBpbnQJc3RsaV9pbml0b25iKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKKyNpZiBTVExJX0VJU0FQUk9CRSAhPSAwCitzdGF0aWMgaW50CXN0bGlfZWlzYW1lbXByb2JlKHN0cnVjdCBzdGxpYnJkICpicmRwKTsKICNlbmRpZgorc3RhdGljIGludAlzdGxpX2luaXRwb3J0cyhzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNzY2LDE1NCArNzI4LDM3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmlzdGFsbGlvbl9jbGFzczsKIAotLyoKLSAqCUxvYWRhYmxlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBzdHVmZi4KLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBpc3RhbGxpb25fbW9kdWxlX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIHN0bGlfY2xlYW51cF9wb3J0cyhzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsKLQlzdGxpX2luaXQoKTsKLQlyZXR1cm4gMDsKLX0KKwlzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwOworCXVuc2lnbmVkIGludCBqOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpc3RhbGxpb25fbW9kdWxlX2V4aXQodm9pZCkKLXsKLQlzdGxpYnJkX3QJKmJyZHA7Ci0Jc3RsaXBvcnRfdAkqcG9ydHA7Ci0JaW50CQlpLCBqOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVW5sb2FkaW5nICVzOiB2ZXJzaW9uICVzXG4iLCBzdGxpX2RydnRpdGxlLAotCQlzdGxpX2RydnZlcnNpb24pOwotCi0JLyoKLQkgKglGcmVlIHVwIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIHBvcnRzLiBUaGlzIGluY2x1ZGVzCi0JICoJbWVtb3J5IGFuZCBpbnRlcnJ1cHRzLgotCSAqLwotCWlmIChzdGxpX3RpbWVyb24pIHsKLQkJc3RsaV90aW1lcm9uID0gMDsKLQkJZGVsX3RpbWVyX3N5bmMoJnN0bGlfdGltZXJsaXN0KTsKLQl9Ci0KLQlpID0gdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHN0bGlfc2VyaWFsKTsKLQlpZiAoaSkgewotCQlwcmludGsoIlNUQUxMSU9OOiBmYWlsZWQgdG8gdW4tcmVnaXN0ZXIgdHR5IGRyaXZlciwgIgotCQkJImVycm5vPSVkXG4iLCAtaSk7Ci0JCXJldHVybjsKLQl9Ci0JcHV0X3R0eV9kcml2ZXIoc3RsaV9zZXJpYWwpOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCWNsYXNzX2RldmljZV9kZXN0cm95KGlzdGFsbGlvbl9jbGFzcywgTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSk7Ci0JY2xhc3NfZGVzdHJveShpc3RhbGxpb25fY2xhc3MpOwotCWlmICgoaSA9IHVucmVnaXN0ZXJfY2hyZGV2KFNUTF9TSU9NRU1NQUpPUiwgInN0YWxpb21lbSIpKSkKLQkJcHJpbnRrKCJTVEFMTElPTjogZmFpbGVkIHRvIHVuLXJlZ2lzdGVyIHNlcmlhbCBtZW1vcnkgZGV2aWNlLCAiCi0JCQkiZXJybm89JWRcbiIsIC1pKTsKLQotCWtmcmVlKHN0bGlfdHhjb29rYnVmKTsKLQotCWZvciAoaSA9IDA7IChpIDwgc3RsaV9ucmJyZHMpOyBpKyspIHsKLQkJaWYgKChicmRwID0gc3RsaV9icmRzW2ldKSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWZvciAoaiA9IDA7IChqIDwgU1RMX01BWFBPUlRTKTsgaisrKSB7Ci0JCQlwb3J0cCA9IGJyZHAtPnBvcnRzW2pdOwotCQkJaWYgKHBvcnRwICE9IE5VTEwpIHsKLQkJCQlpZiAocG9ydHAtPnR0eSAhPSBOVUxMKQotCQkJCQl0dHlfaGFuZ3VwKHBvcnRwLT50dHkpOwotCQkJCWtmcmVlKHBvcnRwKTsKLQkJCX0KKwlmb3IgKGogPSAwOyBqIDwgU1RMX01BWFBPUlRTOyBqKyspIHsKKwkJcG9ydHAgPSBicmRwLT5wb3J0c1tqXTsKKwkJaWYgKHBvcnRwICE9IE5VTEwpIHsKKwkJCWlmIChwb3J0cC0+dHR5ICE9IE5VTEwpCisJCQkJdHR5X2hhbmd1cChwb3J0cC0+dHR5KTsKKwkJCWtmcmVlKHBvcnRwKTsKIAkJfQotCi0JCWlvdW5tYXAoYnJkcC0+bWVtYmFzZSk7Ci0JCWlmIChicmRwLT5pb3NpemUgPiAwKQotCQkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9iYXNlLCBicmRwLT5pb3NpemUpOwotCQlrZnJlZShicmRwKTsKLQkJc3RsaV9icmRzW2ldID0gTlVMTDsKIAl9CiB9CiAKLW1vZHVsZV9pbml0KGlzdGFsbGlvbl9tb2R1bGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChpc3RhbGxpb25fbW9kdWxlX2V4aXQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKglDaGVjayBmb3IgYW55IGFyZ3VtZW50cyBwYXNzZWQgaW4gb24gdGhlIG1vZHVsZSBsb2FkIGNvbW1hbmQgbGluZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBzdGxpX2FyZ2JyZHModm9pZCkKLXsKLQlzdGxjb25mX3QgY29uZjsKLQlzdGxpYnJkX3QgKmJyZHA7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBzdGxpX25yYnJkczsgaSA8IEFSUkFZX1NJWkUoc3RsaV9icmRzcCk7IGkrKykgewotCQltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihjb25mKSk7Ci0JCWlmIChzdGxpX3BhcnNlYnJkKCZjb25mLCBzdGxpX2JyZHNwW2ldKSA9PSAwKQotCQkJY29udGludWU7Ci0JCWlmICgoYnJkcCA9IHN0bGlfYWxsb2NicmQoKSkgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlzdGxpX25yYnJkcyA9IGkgKyAxOwotCQlicmRwLT5icmRuciA9IGk7Ci0JCWJyZHAtPmJyZHR5cGUgPSBjb25mLmJyZHR5cGU7Ci0JCWJyZHAtPmlvYmFzZSA9IGNvbmYuaW9hZGRyMTsKLQkJYnJkcC0+bWVtYWRkciA9IGNvbmYubWVtYWRkcjsKLQkJc3RsaV9icmRpbml0KGJyZHApOwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICoJQ29udmVydCBhbiBhc2NpaSBzdHJpbmcgbnVtYmVyIGludG8gYW4gdW5zaWduZWQgbG9uZy4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdGxpX2F0b2woY2hhciAqc3RyKQotewotCXVuc2lnbmVkIGxvbmcgdmFsOwotCWludCBiYXNlLCBjOwotCWNoYXIgKnNwOwotCi0JdmFsID0gMDsKLQlzcCA9IHN0cjsKLQlpZiAoKCpzcCA9PSAnMCcpICYmICgqKHNwKzEpID09ICd4JykpIHsKLQkJYmFzZSA9IDE2OwotCQlzcCArPSAyOwotCX0gZWxzZSBpZiAoKnNwID09ICcwJykgewotCQliYXNlID0gODsKLQkJc3ArKzsKLQl9IGVsc2UgewotCQliYXNlID0gMTA7Ci0JfQotCi0JZm9yICg7ICgqc3AgIT0gMCk7IHNwKyspIHsKLQkJYyA9ICgqc3AgPiAnOScpID8gKFRPTE9XRVIoKnNwKSAtICdhJyArIDEwKSA6ICgqc3AgLSAnMCcpOwotCQlpZiAoKGMgPCAwKSB8fCAoYyA+PSBiYXNlKSkgewotCQkJcHJpbnRrKCJTVEFMTElPTjogaW52YWxpZCBhcmd1bWVudCAlc1xuIiwgc3RyKTsKLQkJCXZhbCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQl2YWwgPSAodmFsICogYmFzZSkgKyBjOwotCX0KLQlyZXR1cm4odmFsKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgogICoJUGFyc2UgdGhlIHN1cHBsaWVkIGFyZ3VtZW50IHN0cmluZywgaW50byB0aGUgYm9hcmQgY29uZiBzdHJ1Y3QuCiAgKi8KIAotc3RhdGljIGludCBzdGxpX3BhcnNlYnJkKHN0bGNvbmZfdCAqY29uZnAsIGNoYXIgKiphcmdwKQorc3RhdGljIGludCBzdGxpX3BhcnNlYnJkKHN0cnVjdCBzdGxjb25mICpjb25mcCwgY2hhciAqKmFyZ3ApCiB7CisJdW5zaWduZWQgaW50IGk7CiAJY2hhciAqc3A7Ci0JaW50IGk7CiAKIAlpZiAoYXJncFswXSA9PSBOVUxMIHx8ICphcmdwWzBdID09IDApCiAJCXJldHVybiAwOwogCiAJZm9yIChzcCA9IGFyZ3BbMF0sIGkgPSAwOyAoKCpzcCAhPSAwKSAmJiAoaSA8IDI1KSk7IHNwKyssIGkrKykKLQkJKnNwID0gVE9MT1dFUigqc3ApOworCQkqc3AgPSB0b2xvd2VyKCpzcCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGxpX2JyZHN0cik7IGkrKykgewogCQlpZiAoc3RyY21wKHN0bGlfYnJkc3RyW2ldLm5hbWUsIGFyZ3BbMF0pID09IDApCkBAIC05MjYsOSArNzcxLDkgQEAKIAogCWNvbmZwLT5icmR0eXBlID0gc3RsaV9icmRzdHJbaV0udHlwZTsKIAlpZiAoYXJncFsxXSAhPSBOVUxMICYmICphcmdwWzFdICE9IDApCi0JCWNvbmZwLT5pb2FkZHIxID0gc3RsaV9hdG9sKGFyZ3BbMV0pOworCQljb25mcC0+aW9hZGRyMSA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3BbMV0sIE5VTEwsIDApOwogCWlmIChhcmdwWzJdICE9ICBOVUxMICYmICphcmdwWzJdICE9IDApCi0JCWNvbmZwLT5tZW1hZGRyID0gc3RsaV9hdG9sKGFyZ3BbMl0pOworCQljb25mcC0+bWVtYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3BbMl0sIE5VTEwsIDApOwogCXJldHVybigxKTsKIH0KIApAQCAtOTM2LDEwICs3ODEsMTAgQEAKIAogc3RhdGljIGludCBzdGxpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RsaWJyZF90ICpicmRwOwotCXN0bGlwb3J0X3QgKnBvcnRwOwotCXVuc2lnbmVkIGludCBtaW5vcmRldjsKLQlpbnQgYnJkbnIsIHBvcnRuciwgcmM7CisJc3RydWN0IHN0bGlicmQgKmJyZHA7CisJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKKwl1bnNpZ25lZCBpbnQgbWlub3JkZXYsIGJyZG5yLCBwb3J0bnI7CisJaW50IHJjOwogCiAJbWlub3JkZXYgPSB0dHktPmluZGV4OwogCWJyZG5yID0gTUlOT1IyQlJEKG1pbm9yZGV2KTsKQEAgLTk1MSw3ICs3OTYsNyBAQAogCWlmICgoYnJkcC0+c3RhdGUgJiBCU1RfU1RBUlRFRCkgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcG9ydG5yID0gTUlOT1IyUE9SVChtaW5vcmRldik7Ci0JaWYgKChwb3J0bnIgPCAwKSB8fCAocG9ydG5yID4gYnJkcC0+bnJwb3J0cykpCisJaWYgKHBvcnRuciA+IGJyZHAtPm5ycG9ydHMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcG9ydHAgPSBicmRwLT5wb3J0c1twb3J0bnJdOwpAQCAtMTAzMSw4ICs4NzYsOCBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewotCXN0bGlicmRfdCAqYnJkcDsKLQlzdGxpcG9ydF90ICpwb3J0cDsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKKwlzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CkBAIC0xMTA5LDcgKzk1NCw3IEBACiAgKgl0aGlzIHN0aWxsIGFsbCBoYXBwZW5zIHByZXR0eSBxdWlja2x5LgogICovCiAKLXN0YXRpYyBpbnQgc3RsaV9pbml0b3BlbihzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwKQorc3RhdGljIGludCBzdGxpX2luaXRvcGVuKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJYXN5bm90aWZ5X3QgbnQ7CkBAIC0xMTU3LDcgKzEwMDIsNyBAQAogICoJdG8gb3ZlcmxhcC4KICAqLwogCi1zdGF0aWMgaW50IHN0bGlfcmF3b3BlbihzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGFyZywgaW50IHdhaXQpCitzdGF0aWMgaW50IHN0bGlfcmF3b3BlbihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBhcmcsIGludCB3YWl0KQogewogCWNka2hkcl90IF9faW9tZW0gKmhkcnA7CiAJY2RrY3RybF90IF9faW9tZW0gKmNwOwpAQCAtMTIyOCw3ICsxMDczLDcgQEAKICAqCXdhaXQgaXMgdHJ1ZSB0aGVuIG11c3QgaGF2ZSB1c2VyIGNvbnRleHQgKHRvIHNsZWVwKS4KICAqLwogCi1zdGF0aWMgaW50IHN0bGlfcmF3Y2xvc2Uoc3RsaWJyZF90ICpicmRwLCBzdGxpcG9ydF90ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBhcmcsIGludCB3YWl0KQorc3RhdGljIGludCBzdGxpX3Jhd2Nsb3NlKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGFyZywgaW50IHdhaXQpCiB7CiAJY2RraGRyX3QgX19pb21lbSAqaGRycDsKIAljZGtjdHJsX3QgX19pb21lbSAqY3A7CkBAIC0xMjkyLDcgKzExMzcsNyBAQAogICoJdG8gY29tcGxldGUgKGFzIG9wcG9zZWQgdG8gaW5pdGlhdGluZyB0aGUgY29tbWFuZCB0aGVuIHJldHVybmluZykuCiAgKi8KIAotc3RhdGljIGludCBzdGxpX2NtZHdhaXQoc3RsaWJyZF90ICpicmRwLCBzdGxpcG9ydF90ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKmFyZywgaW50IHNpemUsIGludCBjb3B5YmFjaykKK3N0YXRpYyBpbnQgc3RsaV9jbWR3YWl0KHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqYXJnLCBpbnQgc2l6ZSwgaW50IGNvcHliYWNrKQogewogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwb3J0cC0+cmF3X3dhaXQsCiAJCQkhdGVzdF9iaXQoU1RfQ01ESU5HLCAmcG9ydHAtPnN0YXRlKSk7CkBAIC0xMzE4LDE2ICsxMTYzLDE2IEBACiAgKgl3YWl0aW5nIGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZSAtIHNvIG11c3QgaGF2ZSB1c2VyIGNvbnRleHQuCiAgKi8KIAotc3RhdGljIGludCBzdGxpX3NldHBvcnQoc3RsaXBvcnRfdCAqcG9ydHApCitzdGF0aWMgaW50IHN0bGlfc2V0cG9ydChzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwKQogewotCXN0bGlicmRfdCAqYnJkcDsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKIAlhc3lwb3J0X3QgYXBvcnQ7CiAKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKHBvcnRwLT50dHkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHBvcnRwLT5icmRuciA8IDAgJiYgcG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQorCWlmIChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpCiAJCXJldHVybiAtRU5PREVWOwogCWJyZHAgPSBzdGxpX2JyZHNbcG9ydHAtPmJyZG5yXTsKIAlpZiAoYnJkcCA9PSBOVUxMKQpAQCAtMTM0NCw3ICsxMTg5LDcgQEAKICAqCW1heWJlIGJlY2F1c2UgaWYgd2UgYXJlIGNsb2NhbCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gd2FpdC4uLgogICovCiAKLXN0YXRpYyBpbnQgc3RsaV93YWl0Y2FycmllcihzdGxpYnJkX3QgKmJyZHAsIHN0bGlwb3J0X3QgKnBvcnRwLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgc3RsaV93YWl0Y2FycmllcihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMsIGRvY2xvY2FsOwpAQCAtMTQwOSw4ICsxMjU0LDggQEAKIAl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmJpdHM7CiAJdW5zaWduZWQgY2hhciBfX2lvbWVtICpzaGJ1ZjsKIAl1bnNpZ25lZCBjaGFyICpjaGJ1ZjsKLQlzdGxpcG9ydF90ICpwb3J0cDsKLQlzdGxpYnJkX3QgKmJyZHA7CisJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKIAl1bnNpZ25lZCBpbnQgbGVuLCBzdGxlbiwgaGVhZCwgdGFpbCwgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNDE5LDcgKzEyNjQsNyBAQAogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JaWYgKChwb3J0cC0+YnJkbnIgPCAwKSB8fCAocG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKSkKKwlpZiAocG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQogCQlyZXR1cm4gMDsKIAlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07CiAJaWYgKGJyZHAgPT0gTlVMTCkKQEAgLTE0NDUsMTIgKzEyOTAsMTIgQEAKIAkJc3RsZW4gPSBsZW47CiAJfQogCi0JbGVuID0gTUlOKGxlbiwgY291bnQpOworCWxlbiA9IG1pbihsZW4sICh1bnNpZ25lZCBpbnQpY291bnQpOwogCWNvdW50ID0gMDsKIAlzaGJ1ZiA9IChjaGFyIF9faW9tZW0gKikgRUJSREdFVE1FTVBUUihicmRwLCBwb3J0cC0+dHhvZmZzZXQpOwogCiAJd2hpbGUgKGxlbiA+IDApIHsKLQkJc3RsZW4gPSBNSU4obGVuLCBzdGxlbik7CisJCXN0bGVuID0gbWluKGxlbiwgc3RsZW4pOwogCQltZW1jcHlfdG9pbyhzaGJ1ZiArIGhlYWQsIGNoYnVmLCBzdGxlbik7CiAJCWNoYnVmICs9IHN0bGVuOwogCQlsZW4gLT0gc3RsZW47CkBAIC0xNTE2LDggKzEzNjEsOCBAQAogCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqYml0czsKIAljZGthc3lfdCBfX2lvbWVtICphcDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqY29va3R0eTsKLQlzdGxpcG9ydF90ICpwb3J0cDsKLQlzdGxpYnJkX3QgKmJyZHA7CisJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKIAl1bnNpZ25lZCBpbnQgbGVuLCBzdGxlbiwgaGVhZCwgdGFpbCwgc2l6ZSwgY291bnQsIGNvb2tzaXplOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKnNoYnVmOwpAQCAtMTU0MSw3ICsxMzg2LDcgQEAKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQlpZiAoKHBvcnRwLT5icmRuciA8IDApIHx8IChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpKQorCWlmIChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpCiAJCXJldHVybjsKIAlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07CiAJaWYgKGJyZHAgPT0gTlVMTCkKQEAgLTE1NjQsMTMgKzE0MDksMTMgQEAKIAkJc3RsZW4gPSBsZW47CiAJfQogCi0JbGVuID0gTUlOKGxlbiwgY29va3NpemUpOworCWxlbiA9IG1pbihsZW4sIGNvb2tzaXplKTsKIAljb3VudCA9IDA7CiAJc2hidWYgPSBFQlJER0VUTUVNUFRSKGJyZHAsIHBvcnRwLT50eG9mZnNldCk7CiAJYnVmID0gc3RsaV90eGNvb2tidWY7CiAKIAl3aGlsZSAobGVuID4gMCkgewotCQlzdGxlbiA9IE1JTihsZW4sIHN0bGVuKTsKKwkJc3RsZW4gPSBtaW4obGVuLCBzdGxlbik7CiAJCW1lbWNweV90b2lvKHNoYnVmICsgaGVhZCwgYnVmLCBzdGxlbik7CiAJCWJ1ZiArPSBzdGxlbjsKIAkJbGVuIC09IHN0bGVuOwpAQCAtMTYwNCw4ICsxNDQ5LDggQEAKIHN0YXRpYyBpbnQgc3RsaV93cml0ZXJvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAljZGthc3lycV90IF9faW9tZW0gKnJwOwotCXN0bGlwb3J0X3QgKnBvcnRwOwotCXN0bGlicmRfdCAqYnJkcDsKKwlzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwOworCXN0cnVjdCBzdGxpYnJkICpicmRwOwogCXVuc2lnbmVkIGludCBoZWFkLCB0YWlsLCBsZW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTYxOSw3ICsxNDY0LDcgQEAKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybiAwOwotCWlmICgocG9ydHAtPmJyZG5yIDwgMCkgfHwgKHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykpCisJaWYgKHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKIAkJcmV0dXJuIDA7CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwogCWlmIChicmRwID09IE5VTEwpCkBAIC0xNjU3LDggKzE1MDIsOCBAQAogc3RhdGljIGludCBzdGxpX2NoYXJzaW5idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAljZGthc3lycV90IF9faW9tZW0gKnJwOwotCXN0bGlwb3J0X3QgKnBvcnRwOwotCXN0bGlicmRfdCAqYnJkcDsKKwlzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwOworCXN0cnVjdCBzdGxpYnJkICpicmRwOwogCXVuc2lnbmVkIGludCBoZWFkLCB0YWlsLCBsZW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTY2Nyw3ICsxNTEyLDcgQEAKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybiAwOwotCWlmICgocG9ydHAtPmJyZG5yIDwgMCkgfHwgKHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykpCisJaWYgKHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKIAkJcmV0dXJuIDA7CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwogCWlmIChicmRwID09IE5VTEwpCkBAIC0xNjk1LDEwICsxNTQwLDEwIEBACiAgKglHZW5lcmF0ZSB0aGUgc2VyaWFsIHN0cnVjdCBpbmZvLgogICovCiAKLXN0YXRpYyBpbnQgc3RsaV9nZXRzZXJpYWwoc3RsaXBvcnRfdCAqcG9ydHAsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApCitzdGF0aWMgaW50IHN0bGlfZ2V0c2VyaWFsKHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApCiB7CiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3Qgc2lvOwotCXN0bGlicmRfdCAqYnJkcDsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKIAogCW1lbXNldCgmc2lvLCAwLCBzaXplb2Yoc3RydWN0IHNlcmlhbF9zdHJ1Y3QpKTsKIAlzaW8udHlwZSA9IFBPUlRfVU5LTk9XTjsKQEAgLTE3MjgsNyArMTU3Myw3IEBACiAgKglqdXN0IHF1aWV0bHkgaWdub3JlIGFueSByZXF1ZXN0cyB0byBjaGFuZ2UgaXJxLCBldGMuCiAgKi8KIAotc3RhdGljIGludCBzdGxpX3NldHNlcmlhbChzdGxpcG9ydF90ICpwb3J0cCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCkKK3N0YXRpYyBpbnQgc3RsaV9zZXRzZXJpYWwoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCkKIHsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzaW87CiAJaW50IHJjOwpAQCAtMTc1OSwxMyArMTYwNCwxMyBAQAogCiBzdGF0aWMgaW50IHN0bGlfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RsaXBvcnRfdCAqcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0bGlicmRfdCAqYnJkcDsKKwlzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKIAlpbnQgcmM7CiAKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHBvcnRwLT5icmRuciA8IDAgfHwgcG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQorCWlmIChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpCiAJCXJldHVybiAwOwogCWJyZHAgPSBzdGxpX2JyZHNbcG9ydHAtPmJyZG5yXTsKIAlpZiAoYnJkcCA9PSBOVUxMKQpAQCAtMTc4MywxMyArMTYyOCwxMyBAQAogc3RhdGljIGludCBzdGxpX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKLQlzdGxpcG9ydF90ICpwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RsaWJyZF90ICpicmRwOworCXN0cnVjdCBzdGxpcG9ydCAqcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBzdGxpYnJkICpicmRwOwogCWludCBydHMgPSAtMSwgZHRyID0gLTE7CiAKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHBvcnRwLT5icmRuciA8IDAgfHwgcG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQorCWlmIChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpCiAJCXJldHVybiAwOwogCWJyZHAgPSBzdGxpX2JyZHNbcG9ydHAtPmJyZG5yXTsKIAlpZiAoYnJkcCA9PSBOVUxMKQpAQCAtMTgxNCw4ICsxNjU5LDggQEAKIAogc3RhdGljIGludCBzdGxpX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdGxpcG9ydF90ICpwb3J0cDsKLQlzdGxpYnJkX3QgKmJyZHA7CisJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKIAl1bnNpZ25lZCBpbnQgaXZhbDsKIAlpbnQgcmM7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC0xODIzLDcgKzE2NjgsNyBAQAogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHBvcnRwLT5icmRuciA8IDAgfHwgcG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQorCWlmIChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpCiAJCXJldHVybiAwOwogCWJyZHAgPSBzdGxpX2JyZHNbcG9ydHAtPmJyZG5yXTsKIAlpZiAoYnJkcCA9PSBOVUxMKQpAQCAtMTg4OSwxMSArMTczNCwxMSBAQAogICoJTG9va3MgbGlrZSBpdCBpcyB0cnVlIGZvciB0aGUgY3VycmVudCB0dHlzIGltcGxlbWVudGF0aW9uLi4hIQogICovCiAKLXN0YXRpYyB2b2lkIHN0bGlfc2V0dGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkKQorc3RhdGljIHZvaWQgc3RsaV9zZXR0ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewotCXN0bGlwb3J0X3QgKnBvcnRwOwotCXN0bGlicmRfdCAqYnJkcDsKLQlzdHJ1Y3QgdGVybWlvcyAqdGlvc3A7CisJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnRpb3NwOwogCWFzeXBvcnRfdCBhcG9ydDsKIAogCWlmICh0dHkgPT0gTlVMTCkKQEAgLTE5MDEsNyArMTc0Niw3IEBACiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JaWYgKHBvcnRwLT5icmRuciA8IDAgfHwgcG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQorCWlmIChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpCiAJCXJldHVybjsKIAlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07CiAJaWYgKGJyZHAgPT0gTlVMTCkKQEAgLTE5MzcsNyArMTc4Miw3IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdGxpcG9ydF90CSpwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHN0bGlwb3J0CSpwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAlzZXRfYml0KFNUX1JYU1RPUCwgJnBvcnRwLT5zdGF0ZSk7CkBAIC0xOTUzLDcgKzE3OTgsNyBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdGxpcG9ydF90CSpwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHN0bGlwb3J0CSpwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAljbGVhcl9iaXQoU1RfUlhTVE9QLCAmcG9ydHAtPnN0YXRlKTsKQEAgLTE5OTIsNyArMTgzNyw3IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfZG9oYW5ndXAoc3RydWN0IHdvcmtfc3RydWN0ICp1Z2x5X2FwaSkKIHsKLQlzdGxpcG9ydF90ICpwb3J0cCA9IGNvbnRhaW5lcl9vZih1Z2x5X2FwaSwgc3RsaXBvcnRfdCwgdHFoYW5ndXApOworCXN0cnVjdCBzdGxpcG9ydCAqcG9ydHAgPSBjb250YWluZXJfb2YodWdseV9hcGksIHN0cnVjdCBzdGxpcG9ydCwgdHFoYW5ndXApOwogCWlmIChwb3J0cC0+dHR5ICE9IE5VTEwpIHsKIAkJdHR5X2hhbmd1cChwb3J0cC0+dHR5KTsKIAl9CkBAIC0yMDA5LDE0ICsxODU0LDE0IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RsaXBvcnRfdCAqcG9ydHA7Ci0Jc3RsaWJyZF90ICpicmRwOworCXN0cnVjdCBzdGxpcG9ydCAqcG9ydHA7CisJc3RydWN0IHN0bGlicmQgKmJyZHA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwotCWlmIChwb3J0cC0+YnJkbnIgPCAwIHx8IHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKKwlpZiAocG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQogCQlyZXR1cm47CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwogCWlmIChicmRwID09IE5VTEwpCkBAIC0yMDYyLDE0ICsxOTA3LDE0IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfZmx1c2hidWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdGxpcG9ydF90ICpwb3J0cDsKLQlzdGxpYnJkX3QgKmJyZHA7CisJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKIAl1bnNpZ25lZCBsb25nIGZ0eXBlLCBmbGFnczsKIAogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwotCWlmIChwb3J0cC0+YnJkbnIgPCAwIHx8IHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKKwlpZiAocG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQogCQlyZXR1cm47CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwogCWlmIChicmRwID09IE5VTEwpCkBAIC0yMDk5LDE0ICsxOTQ0LDE0IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfYnJlYWtjdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKQogewotCXN0bGlicmRfdAkqYnJkcDsKLQlzdGxpcG9ydF90CSpwb3J0cDsKKwlzdHJ1Y3Qgc3RsaWJyZAkqYnJkcDsKKwlzdHJ1Y3Qgc3RsaXBvcnQJKnBvcnRwOwogCWxvbmcJCWFyZzsKIAogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwotCWlmIChwb3J0cC0+YnJkbnIgPCAwIHx8IHBvcnRwLT5icmRuciA+PSBzdGxpX25yYnJkcykKKwlpZiAocG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQogCQlyZXR1cm47CiAJYnJkcCA9IHN0bGlfYnJkc1twb3J0cC0+YnJkbnJdOwogCWlmIChicmRwID09IE5VTEwpCkBAIC0yMTIwLDcgKzE5NjUsNyBAQAogCiBzdGF0aWMgdm9pZCBzdGxpX3dhaXR1bnRpbHNlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpCiB7Ci0Jc3RsaXBvcnRfdCAqcG9ydHA7CisJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKIAl1bnNpZ25lZCBsb25nIHRlbmQ7CiAKIAlpZiAodHR5ID09IE5VTEwpCkBAIC0yMTQ2LDE0ICsxOTkxLDE0IEBACiAKIHN0YXRpYyB2b2lkIHN0bGlfc2VuZHhjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpCiB7Ci0Jc3RsaWJyZF90CSpicmRwOwotCXN0bGlwb3J0X3QJKnBvcnRwOworCXN0cnVjdCBzdGxpYnJkCSpicmRwOworCXN0cnVjdCBzdGxpcG9ydAkqcG9ydHA7CiAJYXN5Y3RybF90CWFjdHJsOwogCiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JaWYgKHBvcnRwLT5icmRuciA8IDAgfHwgcG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQorCWlmIChwb3J0cC0+YnJkbnIgPj0gc3RsaV9ucmJyZHMpCiAJCXJldHVybjsKIAlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07CiAJaWYgKGJyZHAgPT0gTlVMTCkKQEAgLTIxODEsNyArMjAyNiw3IEBACiAgKglzaG9ydCB0aGVuIHBhZGRlZCB3aXRoIHNwYWNlcykuCiAgKi8KIAotc3RhdGljIGludCBzdGxpX3BvcnRpbmZvKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIGludCBwb3J0bnIsIGNoYXIgKnBvcykKK3N0YXRpYyBpbnQgc3RsaV9wb3J0aW5mbyhzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgaW50IHBvcnRuciwgY2hhciAqcG9zKQogewogCWNoYXIgKnNwLCAqdWFydDsKIAlpbnQgcmMsIGNudDsKQEAgLTIyNDQsOSArMjA4OSw5IEBACiAKIHN0YXRpYyBpbnQgc3RsaV9yZWFkcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKIHsKLQlzdGxpYnJkX3QgKmJyZHA7Ci0Jc3RsaXBvcnRfdCAqcG9ydHA7Ci0JaW50IGJyZG5yLCBwb3J0bnIsIHRvdGFscG9ydDsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKKwlzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwOworCXVuc2lnbmVkIGludCBicmRuciwgcG9ydG5yLCB0b3RhbHBvcnQ7CiAJaW50IGN1cm9mZiwgbWF4b2ZmOwogCWNoYXIgKnBvczsKIApAQCAtMjMxNiw3ICsyMTYxLDcgQEAKICAqCWVudHJ5IHBvaW50KQogICovCiAKLXN0YXRpYyB2b2lkIF9fc3RsaV9zZW5kY21kKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICphcmcsIGludCBzaXplLCBpbnQgY29weWJhY2spCitzdGF0aWMgdm9pZCBfX3N0bGlfc2VuZGNtZChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKmFyZywgaW50IHNpemUsIGludCBjb3B5YmFjaykKIHsKIAljZGtoZHJfdCBfX2lvbWVtICpoZHJwOwogCWNka2N0cmxfdCBfX2lvbWVtICpjcDsKQEAgLTIzNTIsNyArMjE5Nyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJkX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgc3RsaV9zZW5kY21kKHN0bGlicmRfdCAqYnJkcCwgc3RsaXBvcnRfdCAqcG9ydHAsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICphcmcsIGludCBzaXplLCBpbnQgY29weWJhY2spCitzdGF0aWMgdm9pZCBzdGxpX3NlbmRjbWQoc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICphcmcsIGludCBzaXplLCBpbnQgY29weWJhY2spCiB7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKQEAgLTIzNzEsNyArMjIxNiw3IEBACiAgKgltb3JlIGNoYXJzIHRvIHVubG9hZC4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxpX3JlYWQoc3RsaWJyZF90ICpicmRwLCBzdGxpcG9ydF90ICpwb3J0cCkKK3N0YXRpYyB2b2lkIHN0bGlfcmVhZChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCkKIHsKIAljZGthc3lycV90IF9faW9tZW0gKnJwOwogCWNoYXIgX19pb21lbSAqc2hidWY7CkBAIC0yNDA2LDcgKzIyNTEsNyBAQAogCXdoaWxlIChsZW4gPiAwKSB7CiAJCXVuc2lnbmVkIGNoYXIgKmNwdHI7CiAKLQkJc3RsZW4gPSBNSU4obGVuLCBzdGxlbik7CisJCXN0bGVuID0gbWluKGxlbiwgc3RsZW4pOwogCQl0dHlfcHJlcGFyZV9mbGlwX3N0cmluZyh0dHksICZjcHRyLCBzdGxlbik7CiAJCW1lbWNweV9mcm9taW8oY3B0ciwgc2hidWYgKyB0YWlsLCBzdGxlbik7CiAJCWxlbiAtPSBzdGxlbjsKQEAgLTI0MzMsNyArMjI3OCw3IEBACiAgKglkaWZmaWN1bHQgdG8gZGVhbCB3aXRoIHRoZW0gaGVyZS4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxpX2RvZGVsYXljbWQoc3RsaXBvcnRfdCAqcG9ydHAsIGNka2N0cmxfdCBfX2lvbWVtICpjcCkKK3N0YXRpYyB2b2lkIHN0bGlfZG9kZWxheWNtZChzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCBjZGtjdHJsX3QgX19pb21lbSAqY3ApCiB7CiAJaW50IGNtZDsKIApAQCAtMjQ4MSw3ICsyMzI2LDcgQEAKICAqCXRoZW4gcG9ydCBpcyBzdGlsbCBidXN5LCBvdGhlcndpc2Ugbm8gbG9uZ2VyIGJ1c3kuCiAgKi8KIAotc3RhdGljIGludCBzdGxpX2hvc3RjbWQoc3RsaWJyZF90ICpicmRwLCBzdGxpcG9ydF90ICpwb3J0cCkKK3N0YXRpYyBpbnQgc3RsaV9ob3N0Y21kKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwKQogewogCWNka2FzeV90IF9faW9tZW0gKmFwOwogCWNka2N0cmxfdCBfX2lvbWVtICpjcDsKQEAgLTI2MjgsOSArMjQ3Myw5IEBACiAgKglhdCB0aGUgY2RrIGhlYWRlciBzdHJ1Y3R1cmUuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsaV9icmRwb2xsKHN0bGlicmRfdCAqYnJkcCwgY2RraGRyX3QgX19pb21lbSAqaGRycCkKK3N0YXRpYyB2b2lkIHN0bGlfYnJkcG9sbChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgY2RraGRyX3QgX19pb21lbSAqaGRycCkKIHsKLQlzdGxpcG9ydF90ICpwb3J0cDsKKwlzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwOwogCXVuc2lnbmVkIGNoYXIgaG9zdGJpdHNbKFNUTF9NQVhDSEFOUyAvIDgpICsgMV07CiAJdW5zaWduZWQgY2hhciBzbGF2ZWJpdHNbKFNUTF9NQVhDSEFOUyAvIDgpICsgMV07CiAJdW5zaWduZWQgY2hhciBfX2lvbWVtICpzbGF2ZXA7CkBAIC0yNjk3LDExICsyNTQyLDEwIEBACiBzdGF0aWMgdm9pZCBzdGxpX3BvbGwodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJY2RraGRyX3QgX19pb21lbSAqaGRycDsKLQlzdGxpYnJkX3QgKmJyZHA7Ci0JaW50IGJyZG5yOworCXN0cnVjdCBzdGxpYnJkICpicmRwOworCXVuc2lnbmVkIGludCBicmRucjsKIAotCXN0bGlfdGltZXJsaXN0LmV4cGlyZXMgPSBTVExJX1RJTUVPVVQ7Ci0JYWRkX3RpbWVyKCZzdGxpX3RpbWVybGlzdCk7CisJbW9kX3RpbWVyKCZzdGxpX3RpbWVybGlzdCwgU1RMSV9USU1FT1VUKTsKIAogLyoKICAqCUNoZWNrIGVhY2ggYm9hcmQgYW5kIGRvIGFueSBzZXJ2aWNpbmcgcmVxdWlyZWQuCkBAIC0yNzMwLDcgKzI1NzQsNyBAQAogICoJdGhlIHNsYXZlLgogICovCiAKLXN0YXRpYyB2b2lkIHN0bGlfbWthc3lwb3J0KHN0bGlwb3J0X3QgKnBvcnRwLCBhc3lwb3J0X3QgKnBwLCBzdHJ1Y3QgdGVybWlvcyAqdGlvc3ApCitzdGF0aWMgdm9pZCBzdGxpX21rYXN5cG9ydChzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCBhc3lwb3J0X3QgKnBwLCBzdHJ1Y3Qga3Rlcm1pb3MgKnRpb3NwKQogewogCW1lbXNldChwcCwgMCwgc2l6ZW9mKGFzeXBvcnRfdCkpOwogCkBAIC0yODc5LDEzICsyNzIzLDEzIEBACiAgKgl3ZSBuZWVkIHRvIGRvIGhlcmUgaXMgc2V0IHVwIHRoZSBhcHByb3ByaWF0ZSBwZXIgcG9ydCBkYXRhIHN0cnVjdHVyZXMuCiAgKi8KIAotc3RhdGljIGludCBzdGxpX2luaXRwb3J0cyhzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgaW50IHN0bGlfaW5pdHBvcnRzKHN0cnVjdCBzdGxpYnJkICpicmRwKQogewotCXN0bGlwb3J0X3QJKnBvcnRwOwotCWludAkJaSwgcGFuZWxuciwgcGFuZWxwb3J0OworCXN0cnVjdCBzdGxpcG9ydAkqcG9ydHA7CisJdW5zaWduZWQgaW50IGksIHBhbmVsbnIsIHBhbmVscG9ydDsKIAogCWZvciAoaSA9IDAsIHBhbmVsbnIgPSAwLCBwYW5lbHBvcnQgPSAwOyAoaSA8IGJyZHAtPm5ycG9ydHMpOyBpKyspIHsKLQkJcG9ydHAgPSBremFsbG9jKHNpemVvZihzdGxpcG9ydF90KSwgR0ZQX0tFUk5FTCk7CisJCXBvcnRwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0bGlwb3J0KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcG9ydHApIHsKIAkJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byBhbGxvY2F0ZSBwb3J0IHN0cnVjdHVyZVxuIik7CiAJCQljb250aW51ZTsKQEAgLTI5MTksNyArMjc2Myw3IEBACiAgKglBbGwgdGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgYm9hcmQgc3BlY2lmaWMgaGFyZHdhcmUgb3BlcmF0aW9ucy4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxpX2VjcGluaXQoc3RsaWJyZF90ICpicmRwKQorc3RhdGljIHZvaWQgc3RsaV9lY3Bpbml0KHN0cnVjdCBzdGxpYnJkICpicmRwKQogewogCXVuc2lnbmVkIGxvbmcJbWVtY29uZjsKIApAQCAtMjkzNCwyMSArMjc3OCwyMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN0bGlfZWNwZW5hYmxlKHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyB2b2lkIHN0bGlfZWNwZW5hYmxlKHN0cnVjdCBzdGxpYnJkICpicmRwKQogewkKIAlvdXRiKEVDUF9BVEVOQUJMRSwgKGJyZHAtPmlvYmFzZSArIEVDUF9BVENPTkZSKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgc3RsaV9lY3BkaXNhYmxlKHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyB2b2lkIHN0bGlfZWNwZGlzYWJsZShzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsJCiAJb3V0YihFQ1BfQVRESVNBQkxFLCAoYnJkcC0+aW9iYXNlICsgRUNQX0FUQ09ORlIpKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpzdGxpX2VjcGdldG1lbXB0cihzdGxpYnJkX3QgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnN0bGlfZWNwZ2V0bWVtcHRyKHN0cnVjdCBzdGxpYnJkICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpCiB7CQogCXZvaWQgX19pb21lbSAqcHRyOwogCXVuc2lnbmVkIGNoYXIgdmFsOwpAQCAtMjk2OSw3ICsyODEzLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdGxpX2VjcHJlc2V0KHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyB2b2lkIHN0bGlfZWNwcmVzZXQoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CQogCW91dGIoRUNQX0FUU1RPUCwgKGJyZHAtPmlvYmFzZSArIEVDUF9BVENPTkZSKSk7CiAJdWRlbGF5KDEwKTsKQEAgLTI5NzksNyArMjgyMyw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgc3RsaV9lY3BpbnRyKHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyB2b2lkIHN0bGlfZWNwaW50cihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsJCiAJb3V0YigweDEsIGJyZHAtPmlvYmFzZSk7CiB9CkBAIC0yOTkwLDcgKzI4MzQsNyBAQAogICoJVGhlIGZvbGxvd2luZyBzZXQgb2YgZnVuY3Rpb25zIGFjdCBvbiBFQ1AgRUlTQSBib2FyZHMuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsaV9lY3BlaWluaXQoc3RsaWJyZF90ICpicmRwKQorc3RhdGljIHZvaWQgc3RsaV9lY3BlaWluaXQoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CiAJdW5zaWduZWQgbG9uZwltZW1jb25mOwogCkBAIC0zMDA4LDIxICsyODUyLDIxIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgc3RsaV9lY3BlaWVuYWJsZShzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX2VjcGVpZW5hYmxlKHN0cnVjdCBzdGxpYnJkICpicmRwKQogewkKIAlvdXRiKEVDUF9FSUVOQUJMRSwgKGJyZHAtPmlvYmFzZSArIEVDUF9FSUNPTkZSKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgc3RsaV9lY3BlaWRpc2FibGUoc3RsaWJyZF90ICpicmRwKQorc3RhdGljIHZvaWQgc3RsaV9lY3BlaWRpc2FibGUoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CQogCW91dGIoRUNQX0VJRElTQUJMRSwgKGJyZHAtPmlvYmFzZSArIEVDUF9FSUNPTkZSKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9lY3BlaWdldG1lbXB0cihzdGxpYnJkX3QgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnN0bGlfZWNwZWlnZXRtZW1wdHIoc3RydWN0IHN0bGlicmQgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSkKIHsJCiAJdm9pZCBfX2lvbWVtICpwdHI7CiAJdW5zaWduZWQgY2hhcgl2YWw7CkBAIC0zMDQ2LDcgKzI4OTAsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN0bGlfZWNwZWlyZXNldChzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX2VjcGVpcmVzZXQoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CQogCW91dGIoRUNQX0VJU1RPUCwgKGJyZHAtPmlvYmFzZSArIEVDUF9FSUNPTkZSKSk7CiAJdWRlbGF5KDEwKTsKQEAgLTMwNjAsMjEgKzI5MDQsMjEgQEAKICAqCVRoZSBmb2xsb3dpbmcgc2V0IG9mIGZ1bmN0aW9ucyBhY3Qgb24gRUNQIE1DQSBib2FyZHMuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsaV9lY3BtY2VuYWJsZShzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX2VjcG1jZW5hYmxlKHN0cnVjdCBzdGxpYnJkICpicmRwKQogewkKIAlvdXRiKEVDUF9NQ0VOQUJMRSwgKGJyZHAtPmlvYmFzZSArIEVDUF9NQ0NPTkZSKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgc3RsaV9lY3BtY2Rpc2FibGUoc3RsaWJyZF90ICpicmRwKQorc3RhdGljIHZvaWQgc3RsaV9lY3BtY2Rpc2FibGUoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CQogCW91dGIoRUNQX01DRElTQUJMRSwgKGJyZHAtPmlvYmFzZSArIEVDUF9NQ0NPTkZSKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9lY3BtY2dldG1lbXB0cihzdGxpYnJkX3QgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnN0bGlfZWNwbWNnZXRtZW1wdHIoc3RydWN0IHN0bGlicmQgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSkKIHsJCiAJdm9pZCBfX2lvbWVtICpwdHI7CiAJdW5zaWduZWQgY2hhciB2YWw7CkBAIC0zMDk1LDcgKzI5MzksNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN0bGlfZWNwbWNyZXNldChzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX2VjcG1jcmVzZXQoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CQogCW91dGIoRUNQX01DU1RPUCwgKGJyZHAtPmlvYmFzZSArIEVDUF9NQ0NPTkZSKSk7CiAJdWRlbGF5KDEwKTsKQEAgLTMxMDksNyArMjk1Myw3IEBACiAgKglUaGUgZm9sbG93aW5nIHNldCBvZiBmdW5jdGlvbnMgYWN0IG9uIEVDUCBQQ0kgYm9hcmRzLgogICovCiAKLXN0YXRpYyB2b2lkIHN0bGlfZWNwcGNpaW5pdChzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX2VjcHBjaWluaXQoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CiAJb3V0YihFQ1BfUENJU1RPUCwgKGJyZHAtPmlvYmFzZSArIEVDUF9QQ0lDT05GUikpOwogCXVkZWxheSgxMCk7CkBAIC0zMTE5LDcgKzI5NjMsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnN0bGlfZWNwcGNpZ2V0bWVtcHRyKHN0bGlicmRfdCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKQorc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9lY3BwY2lnZXRtZW1wdHIoc3RydWN0IHN0bGlicmQgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSkKIHsJCiAJdm9pZCBfX2lvbWVtICpwdHI7CiAJdW5zaWduZWQgY2hhcgl2YWw7CkBAIC0zMTQwLDcgKzI5ODQsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN0bGlfZWNwcGNpcmVzZXQoc3RsaWJyZF90ICpicmRwKQorc3RhdGljIHZvaWQgc3RsaV9lY3BwY2lyZXNldChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsJCiAJb3V0YihFQ1BfUENJU1RPUCwgKGJyZHAtPmlvYmFzZSArIEVDUF9QQ0lDT05GUikpOwogCXVkZWxheSgxMCk7CkBAIC0zMTU0LDcgKzI5OTgsNyBAQAogICoJVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhY3Qgb24gT05ib2FyZHMuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsaV9vbmJpbml0KHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyB2b2lkIHN0bGlfb25iaW5pdChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsKIAl1bnNpZ25lZCBsb25nCW1lbWNvbmY7CiAKQEAgLTMxNzEsMjEgKzMwMTUsMjEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdGxpX29uYmVuYWJsZShzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX29uYmVuYWJsZShzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsJCiAJb3V0YigoYnJkcC0+ZW5hYnZhbCB8IE9OQl9BVEVOQUJMRSksIChicmRwLT5pb2Jhc2UgKyBPTkJfQVRDT05GUikpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN0bGlfb25iZGlzYWJsZShzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX29uYmRpc2FibGUoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CQogCW91dGIoKGJyZHAtPmVuYWJ2YWwgfCBPTkJfQVRESVNBQkxFKSwgKGJyZHAtPmlvYmFzZSArIE9OQl9BVENPTkZSKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9vbmJnZXRtZW1wdHIoc3RsaWJyZF90ICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzdGxpX29uYmdldG1lbXB0cihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKQogewkKIAl2b2lkIF9faW9tZW0gKnB0cjsKIApAQCAtMzIwMiw3ICszMDQ2LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdGxpX29uYnJlc2V0KHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyB2b2lkIHN0bGlfb25icmVzZXQoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CQogCW91dGIoT05CX0FUU1RPUCwgKGJyZHAtPmlvYmFzZSArIE9OQl9BVENPTkZSKSk7CiAJdWRlbGF5KDEwKTsKQEAgLTMyMTYsNyArMzA2MCw3IEBACiAgKglUaGUgZm9sbG93aW5nIHJvdXRpbmVzIGFjdCBvbiBPTmJvYXJkIEVJU0EuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsaV9vbmJlaW5pdChzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX29uYmVpbml0KHN0cnVjdCBzdGxpYnJkICpicmRwKQogewogCXVuc2lnbmVkIGxvbmcJbWVtY29uZjsKIApAQCAtMzIzNiwyMSArMzA4MCwyMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN0bGlfb25iZWVuYWJsZShzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX29uYmVlbmFibGUoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CQogCW91dGIoT05CX0VJRU5BQkxFLCAoYnJkcC0+aW9iYXNlICsgT05CX0VJQ09ORlIpKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdGxpX29uYmVkaXNhYmxlKHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyB2b2lkIHN0bGlfb25iZWRpc2FibGUoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CQogCW91dGIoT05CX0VJRElTQUJMRSwgKGJyZHAtPmlvYmFzZSArIE9OQl9FSUNPTkZSKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9vbmJlZ2V0bWVtcHRyKHN0bGlicmRfdCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKQorc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9vbmJlZ2V0bWVtcHRyKHN0cnVjdCBzdGxpYnJkICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpCiB7CQogCXZvaWQgX19pb21lbSAqcHRyOwogCXVuc2lnbmVkIGNoYXIgdmFsOwpAQCAtMzI3NCw3ICszMTE4LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdGxpX29uYmVyZXNldChzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX29uYmVyZXNldChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsJCiAJb3V0YihPTkJfRUlTVE9QLCAoYnJkcC0+aW9iYXNlICsgT05CX0VJQ09ORlIpKTsKIAl1ZGVsYXkoMTApOwpAQCAtMzI4OCw3ICszMTMyLDcgQEAKICAqCVRoZSBmb2xsb3dpbmcgcm91dGluZXMgYWN0IG9uIEJydW1ieSBib2FyZHMuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsaV9iYnlpbml0KHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyB2b2lkIHN0bGlfYmJ5aW5pdChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsKIAlvdXRiKEJCWV9BVFNUT1AsIChicmRwLT5pb2Jhc2UgKyBCQllfQVRDT05GUikpOwogCXVkZWxheSgxMCk7CkBAIC0zMzAwLDcgKzMxNDQsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnN0bGlfYmJ5Z2V0bWVtcHRyKHN0bGlicmRfdCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKQorc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9iYnlnZXRtZW1wdHIoc3RydWN0IHN0bGlicmQgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSkKIHsJCiAJdm9pZCBfX2lvbWVtICpwdHI7CiAJdW5zaWduZWQgY2hhciB2YWw7CkBAIC0zMzE1LDcgKzMxNTksNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN0bGlfYmJ5cmVzZXQoc3RsaWJyZF90ICpicmRwKQorc3RhdGljIHZvaWQgc3RsaV9iYnlyZXNldChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsJCiAJb3V0YihCQllfQVRTVE9QLCAoYnJkcC0+aW9iYXNlICsgQkJZX0FUQ09ORlIpKTsKIAl1ZGVsYXkoMTApOwpAQCAtMzMyOSw3ICszMTczLDcgQEAKICAqCVRoZSBmb2xsb3dpbmcgcm91dGluZXMgYWN0IG9uIG9yaWdpbmFsIG9sZCBTdGFsbGlvbiBib2FyZHMuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsaV9zdGFsaW5pdChzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgdm9pZCBzdGxpX3N0YWxpbml0KHN0cnVjdCBzdGxpYnJkICpicmRwKQogewogCW91dGIoMHgxLCBicmRwLT5pb2Jhc2UpOwogCW1kZWxheSgxMDAwKTsKQEAgLTMzMzcsNyArMzE4MSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9zdGFsZ2V0bWVtcHRyKHN0bGlicmRfdCAqYnJkcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGludCBsaW5lKQorc3RhdGljIHZvaWQgX19pb21lbSAqc3RsaV9zdGFsZ2V0bWVtcHRyKHN0cnVjdCBzdGxpYnJkICpicmRwLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGxpbmUpCiB7CQogCUJVR19PTihvZmZzZXQgPiBicmRwLT5tZW1zaXplKTsKIAlyZXR1cm4gYnJkcC0+bWVtYmFzZSArIChvZmZzZXQgJSBTVEFMX1BBR0VTSVpFKTsKQEAgLTMzNDUsNyArMzE4OSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgc3RsaV9zdGFscmVzZXQoc3RsaWJyZF90ICpicmRwKQorc3RhdGljIHZvaWQgc3RsaV9zdGFscmVzZXQoc3RydWN0IHN0bGlicmQgKmJyZHApCiB7CQogCXUzMiBfX2lvbWVtICp2ZWNwOwogCkBAIC0zMzYyLDIxICszMjA2LDIyIEBACiAgKglib2FyZCB0eXBlcy4KICAqLwogCi1zdGF0aWMgaW50IHN0bGlfaW5pdGVjcChzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgaW50IHN0bGlfaW5pdGVjcChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsKIAljZGtlY3BzaWdfdCBzaWc7CiAJY2RrZWNwc2lnX3QgX19pb21lbSAqc2lnc3A7CiAJdW5zaWduZWQgaW50IHN0YXR1cywgbnh0aWQ7CiAJY2hhciAqbmFtZTsKLQlpbnQgcGFuZWxuciwgbnJwb3J0czsKKwlpbnQgcmV0dmFsLCBwYW5lbG5yLCBucnBvcnRzOwogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSwgImlzdGFsbGlvbiIpKQotCQlyZXR1cm4gLUVJTzsKLQkKLQlpZiAoKGJyZHAtPmlvYmFzZSA9PSAwKSB8fCAoYnJkcC0+bWVtYWRkciA9PSAwKSkKLQl7Ci0JCXJlbGVhc2VfcmVnaW9uKGJyZHAtPmlvYmFzZSwgYnJkcC0+aW9zaXplKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKChicmRwLT5pb2Jhc2UgPT0gMCkgfHwgKGJyZHAtPm1lbWFkZHIgPT0gMCkpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSwgImlzdGFsbGlvbiIpKSB7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyOwogCX0KIAogCWJyZHAtPmlvc2l6ZSA9IEVDUF9JT1NJWkU7CkBAIC0zMzg4LDcgKzMyMzMsNiBAQAogICovCiAJc3dpdGNoIChicmRwLT5icmR0eXBlKSB7CiAJY2FzZSBCUkRfRUNQOgotCQlicmRwLT5tZW1iYXNlID0gKHZvaWQgKikgYnJkcC0+bWVtYWRkcjsKIAkJYnJkcC0+bWVtc2l6ZSA9IEVDUF9NRU1TSVpFOwogCQlicmRwLT5wYWdlc2l6ZSA9IEVDUF9BVFBBR0VTSVpFOwogCQlicmRwLT5pbml0ID0gc3RsaV9lY3Bpbml0OwpAQCAtMzQwMiw3ICszMjQ2LDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEJSRF9FQ1BFOgotCQlicmRwLT5tZW1iYXNlID0gKHZvaWQgKikgYnJkcC0+bWVtYWRkcjsKIAkJYnJkcC0+bWVtc2l6ZSA9IEVDUF9NRU1TSVpFOwogCQlicmRwLT5wYWdlc2l6ZSA9IEVDUF9FSVBBR0VTSVpFOwogCQlicmRwLT5pbml0ID0gc3RsaV9lY3BlaWluaXQ7CkBAIC0zNDE2LDcgKzMyNTksNiBAQAogCQlicmVhazsKIAogCWNhc2UgQlJEX0VDUE1DOgotCQlicmRwLT5tZW1iYXNlID0gKHZvaWQgKikgYnJkcC0+bWVtYWRkcjsKIAkJYnJkcC0+bWVtc2l6ZSA9IEVDUF9NRU1TSVpFOwogCQlicmRwLT5wYWdlc2l6ZSA9IEVDUF9NQ1BBR0VTSVpFOwogCQlicmRwLT5pbml0ID0gTlVMTDsKQEAgLTM0MzAsNyArMzI3Miw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBCUkRfRUNQUENJOgotCQlicmRwLT5tZW1iYXNlID0gKHZvaWQgKikgYnJkcC0+bWVtYWRkcjsKIAkJYnJkcC0+bWVtc2l6ZSA9IEVDUF9QQ0lNRU1TSVpFOwogCQlicmRwLT5wYWdlc2l6ZSA9IEVDUF9QQ0lQQUdFU0laRTsKIAkJYnJkcC0+aW5pdCA9IHN0bGlfZWNwcGNpaW5pdDsKQEAgLTM0NDQsOCArMzI4NSw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9iYXNlLCBicmRwLT5pb3NpemUpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBlcnJfcmVnOwogCX0KIAogLyoKQEAgLTM0NTcsMTAgKzMyOTgsOSBAQAogCUVCUkRJTklUKGJyZHApOwogCiAJYnJkcC0+bWVtYmFzZSA9IGlvcmVtYXAoYnJkcC0+bWVtYWRkciwgYnJkcC0+bWVtc2l6ZSk7Ci0JaWYgKGJyZHAtPm1lbWJhc2UgPT0gTlVMTCkKLQl7Ci0JCXJlbGVhc2VfcmVnaW9uKGJyZHAtPmlvYmFzZSwgYnJkcC0+aW9zaXplKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGJyZHAtPm1lbWJhc2UgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWc7CiAJfQogCiAvKgpAQCAtMzQ3MywxMiArMzMxMyw5IEBACiAJbWVtY3B5X2Zyb21pbygmc2lnLCBzaWdzcCwgc2l6ZW9mKGNka2VjcHNpZ190KSk7CiAJRUJSRERJU0FCTEUoYnJkcCk7CiAKLQlpZiAoc2lnLm1hZ2ljICE9IGNwdV90b19sZTMyKEVDUF9NQUdJQykpCi0JewotCQlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSk7Ci0JCWlvdW5tYXAoYnJkcC0+bWVtYmFzZSk7Ci0JCWJyZHAtPm1lbWJhc2UgPSBOVUxMOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoc2lnLm1hZ2ljICE9IGNwdV90b19sZTMyKEVDUF9NQUdJQykpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJfdW5tYXA7CiAJfQogCiAvKgpAQCAtMzUwMyw2ICszMzQwLDEzIEBACiAKIAlicmRwLT5zdGF0ZSB8PSBCU1RfRk9VTkQ7CiAJcmV0dXJuIDA7CitlcnJfdW5tYXA6CisJaW91bm1hcChicmRwLT5tZW1iYXNlKTsKKwlicmRwLT5tZW1iYXNlID0gTlVMTDsKK2Vycl9yZWc6CisJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9iYXNlLCBicmRwLT5pb3NpemUpOworZXJyOgorCXJldHVybiByZXR2YWw7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM1MTIsMjMgKzMzNTYsMjcgQEAKICAqCVRoaXMgaGFuZGxlcyBvbmx5IHRoZXNlIGJvYXJkIHR5cGVzLgogICovCiAKLXN0YXRpYyBpbnQgc3RsaV9pbml0b25iKHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyBpbnQgc3RsaV9pbml0b25iKHN0cnVjdCBzdGxpYnJkICpicmRwKQogewogCWNka29uYnNpZ190IHNpZzsKIAljZGtvbmJzaWdfdCBfX2lvbWVtICpzaWdzcDsKIAljaGFyICpuYW1lOwotCWludCBpOworCWludCBpLCByZXR2YWw7CiAKIC8qCiAgKglEbyBhIGJhc2ljIHNhbml0eSBjaGVjayBvbiB0aGUgSU8gYW5kIG1lbW9yeSBhZGRyZXNzZXMuCiAgKi8KLQlpZiAoYnJkcC0+aW9iYXNlID09IDAgfHwgYnJkcC0+bWVtYWRkciA9PSAwKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoYnJkcC0+aW9iYXNlID09IDAgfHwgYnJkcC0+bWVtYWRkciA9PSAwKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KIAogCWJyZHAtPmlvc2l6ZSA9IE9OQl9JT1NJWkU7CiAJCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSwgImlzdGFsbGlvbiIpKQotCQlyZXR1cm4gLUVJTzsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGJyZHAtPmlvYmFzZSwgYnJkcC0+aW9zaXplLCAiaXN0YWxsaW9uIikpIHsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBlcnI7CisJfQogCiAvKgogICoJQmFzZWQgb24gdGhlIHNwZWNpZmljIGJvYXJkIHR5cGUgc2V0dXAgdGhlIGNvbW1vbiB2YXJzIHRvIGFjY2VzcwpAQCAtMzUzNywxMCArMzM4NSw3IEBACiAgKi8KIAlzd2l0Y2ggKGJyZHAtPmJyZHR5cGUpIHsKIAljYXNlIEJSRF9PTkJPQVJEOgotCWNhc2UgQlJEX09OQk9BUkQzMjoKIAljYXNlIEJSRF9PTkJPQVJEMjoKLQljYXNlIEJSRF9PTkJPQVJEMl8zMjoKLQljYXNlIEJSRF9PTkJPQVJEUlM6CiAJCWJyZHAtPm1lbXNpemUgPSBPTkJfTUVNU0laRTsKIAkJYnJkcC0+cGFnZXNpemUgPSBPTkJfQVRQQUdFU0laRTsKIAkJYnJkcC0+aW5pdCA9IHN0bGlfb25iaW5pdDsKQEAgLTM1NzEsOCArMzQxNiw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBCUkRfQlJVTUJZNDoKLQljYXNlIEJSRF9CUlVNQlk4OgotCWNhc2UgQlJEX0JSVU1CWTE2OgogCQlicmRwLT5tZW1zaXplID0gQkJZX01FTVNJWkU7CiAJCWJyZHAtPnBhZ2VzaXplID0gQkJZX1BBR0VTSVpFOwogCQlicmRwLT5pbml0ID0gc3RsaV9iYnlpbml0OwpAQCAtMzU5OSw4ICszNDQyLDggQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9yZWc7CiAJfQogCiAvKgpAQCAtMzYxMiwxMCArMzQ1NSw5IEBACiAJRUJSRElOSVQoYnJkcCk7CiAKIAlicmRwLT5tZW1iYXNlID0gaW9yZW1hcChicmRwLT5tZW1hZGRyLCBicmRwLT5tZW1zaXplKTsKLQlpZiAoYnJkcC0+bWVtYmFzZSA9PSBOVUxMKQotCXsKLQkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9iYXNlLCBicmRwLT5pb3NpemUpOwotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoYnJkcC0+bWVtYmFzZSA9PSBOVUxMKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JlZzsKIAl9CiAKIC8qCkBAIC0zNjMxLDEyICszNDczLDkgQEAKIAlpZiAoc2lnLm1hZ2ljMCAhPSBjcHVfdG9fbGUxNihPTkJfTUFHSUMwKSB8fAogCSAgICBzaWcubWFnaWMxICE9IGNwdV90b19sZTE2KE9OQl9NQUdJQzEpIHx8CiAJICAgIHNpZy5tYWdpYzIgIT0gY3B1X3RvX2xlMTYoT05CX01BR0lDMikgfHwKLQkgICAgc2lnLm1hZ2ljMyAhPSBjcHVfdG9fbGUxNihPTkJfTUFHSUMzKSkKLQl7Ci0JCXJlbGVhc2VfcmVnaW9uKGJyZHAtPmlvYmFzZSwgYnJkcC0+aW9zaXplKTsKLQkJaW91bm1hcChicmRwLT5tZW1iYXNlKTsKLQkJYnJkcC0+bWVtYmFzZSA9IE5VTEw7Ci0JCXJldHVybiAtRU5PREVWOworCSAgICBzaWcubWFnaWMzICE9IGNwdV90b19sZTE2KE9OQl9NQUdJQzMpKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3VubWFwOwogCX0KIAogLyoKQEAgLTM2NTgsNiArMzQ5NywxMyBAQAogCiAJYnJkcC0+c3RhdGUgfD0gQlNUX0ZPVU5EOwogCXJldHVybiAwOworZXJyX3VubWFwOgorCWlvdW5tYXAoYnJkcC0+bWVtYmFzZSk7CisJYnJkcC0+bWVtYmFzZSA9IE5VTEw7CitlcnJfcmVnOgorCXJlbGVhc2VfcmVnaW9uKGJyZHAtPmlvYmFzZSwgYnJkcC0+aW9zaXplKTsKK2VycjoKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNjY4LDE0ICszNTE0LDE1IEBACiAgKglyZWFkIGluIHRoZSBtZW1vcnkgbWFwLCBhbmQgZ2V0IHRoZSBzaG93IG9uIHRoZSByb2FkLi4uCiAgKi8KIAotc3RhdGljIGludCBzdGxpX3N0YXJ0YnJkKHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyBpbnQgc3RsaV9zdGFydGJyZChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsKIAljZGtoZHJfdCBfX2lvbWVtICpoZHJwOwogCWNka21lbV90IF9faW9tZW0gKm1lbXA7CiAJY2RrYXN5X3QgX19pb21lbSAqYXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdGxpcG9ydF90ICpwb3J0cDsKLQlpbnQgcG9ydG5yLCBucmRldnMsIGksIHJjID0gMDsKKwl1bnNpZ25lZCBpbnQgcG9ydG5yLCBucmRldnMsIGk7CisJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKKwlpbnQgcmMgPSAwOwogCXUzMiBtZW1vZmY7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKQEAgLTM3NjIsOCArMzYwOSw3IEBACiAKIAlpZiAoISBzdGxpX3RpbWVyb24pIHsKIAkJc3RsaV90aW1lcm9uKys7Ci0JCXN0bGlfdGltZXJsaXN0LmV4cGlyZXMgPSBTVExJX1RJTUVPVVQ7Ci0JCWFkZF90aW1lcigmc3RsaV90aW1lcmxpc3QpOworCQltb2RfdGltZXIoJnN0bGlfdGltZXJsaXN0LCBTVExJX1RJTUVPVVQpOwogCX0KIAogCXJldHVybiByYzsKQEAgLTM3NzUsNDkgKzM2MjEsMzIgQEAKICAqCVByb2JlIGFuZCBpbml0aWFsaXplIHRoZSBzcGVjaWZpZWQgYm9hcmQuCiAgKi8KIAotc3RhdGljIGludCBfX2luaXQgc3RsaV9icmRpbml0KHN0bGlicmRfdCAqYnJkcCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN0bGlfYnJkaW5pdChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCkKIHsKLQlzdGxpX2JyZHNbYnJkcC0+YnJkbnJdID0gYnJkcDsKKwlpbnQgcmV0dmFsOwogCiAJc3dpdGNoIChicmRwLT5icmR0eXBlKSB7CiAJY2FzZSBCUkRfRUNQOgogCWNhc2UgQlJEX0VDUEU6CiAJY2FzZSBCUkRfRUNQTUM6CiAJY2FzZSBCUkRfRUNQUENJOgotCQlzdGxpX2luaXRlY3AoYnJkcCk7CisJCXJldHZhbCA9IHN0bGlfaW5pdGVjcChicmRwKTsKIAkJYnJlYWs7CiAJY2FzZSBCUkRfT05CT0FSRDoKIAljYXNlIEJSRF9PTkJPQVJERToKIAljYXNlIEJSRF9PTkJPQVJEMjoKLQljYXNlIEJSRF9PTkJPQVJEMzI6Ci0JY2FzZSBCUkRfT05CT0FSRDJfMzI6Ci0JY2FzZSBCUkRfT05CT0FSRFJTOgogCWNhc2UgQlJEX0JSVU1CWTQ6Ci0JY2FzZSBCUkRfQlJVTUJZODoKLQljYXNlIEJSRF9CUlVNQlkxNjoKIAljYXNlIEJSRF9TVEFMTElPTjoKLQkJc3RsaV9pbml0b25iKGJyZHApOworCQlyZXR2YWwgPSBzdGxpX2luaXRvbmIoYnJkcCk7CiAJCWJyZWFrOwotCWNhc2UgQlJEX0VBU1lJTzoKLQljYXNlIEJSRF9FQ0g6Ci0JY2FzZSBCUkRfRUNITUM6Ci0JY2FzZSBCUkRfRUNIUENJOgotCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiAlcyBib2FyZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gIgotCQkJCSJ0aGlzIGRyaXZlclxuIiwgc3RsaV9icmRuYW1lc1ticmRwLT5icmR0eXBlXSk7Ci0JCXJldHVybiAtRU5PREVWOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiU1RBTExJT046IGJvYXJkPSVkIGlzIHVua25vd24gYm9hcmQgIgogCQkJCSJ0eXBlPSVkXG4iLCBicmRwLT5icmRuciwgYnJkcC0+YnJkdHlwZSk7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR2YWwgPSAtRU5PREVWOwogCX0KIAotCWlmICgoYnJkcC0+c3RhdGUgJiBCU1RfRk9VTkQpID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogJXMgYm9hcmQgbm90IGZvdW5kLCBib2FyZD0lZCAiCi0JCQkJImlvPSV4IG1lbT0leFxuIiwKLQkJCXN0bGlfYnJkbmFtZXNbYnJkcC0+YnJkdHlwZV0sIGJyZHAtPmJyZG5yLAotCQkJYnJkcC0+aW9iYXNlLCAoaW50KSBicmRwLT5tZW1hZGRyKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CiAKIAlzdGxpX2luaXRwb3J0cyhicmRwKTsKIAlwcmludGsoS0VSTl9JTkZPICJTVEFMTElPTjogJXMgZm91bmQsIGJvYXJkPSVkIGlvPSV4IG1lbT0leCAiCkBAIC0zODI3LDYgKzM2NTYsNyBAQAogCXJldHVybiAwOwogfQogCisjaWYgU1RMSV9FSVNBUFJPQkUgIT0gMAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgpAQCAtMzgzNCw3ICszNjY0LDcgQEAKICAqCW1pZ2h0IGJlLiBUaGlzIGlzIGEgYml0IGlmIGhhY2ssIGJ1dCBpdCBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCiAgKi8KIAotc3RhdGljIGludCBzdGxpX2Vpc2FtZW1wcm9iZShzdGxpYnJkX3QgKmJyZHApCitzdGF0aWMgaW50IHN0bGlfZWlzYW1lbXByb2JlKHN0cnVjdCBzdGxpYnJkICpicmRwKQogewogCWNka2VjcHNpZ190CWVjcHNpZywgX19pb21lbSAqZWNwc2lncDsKIAljZGtvbmJzaWdfdAlvbmJzaWcsIF9faW9tZW0gKm9uYnNpZ3A7CkBAIC0zOTIwLDEwICszNzUwLDExIEBACiAJfQogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgc3RsaV9nZXRicmRucih2b2lkKQogewotCWludCBpOworCXVuc2lnbmVkIGludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFNUTF9NQVhCUkRTOyBpKyspIHsKIAkJaWYgKCFzdGxpX2JyZHNbaV0pIHsKQEAgLTM5MzUsNiArMzc2Niw3IEBACiAJcmV0dXJuIC0xOwogfQogCisjaWYgU1RMSV9FSVNBUFJPQkUgIT0gMAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgpAQCAtMzk0OSw5ICszNzgxLDkgQEAKIAogc3RhdGljIGludCBzdGxpX2ZpbmRlaXNhYnJkcyh2b2lkKQogewotCXN0bGlicmRfdCAqYnJkcDsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlLCBlaWQ7Ci0JaW50IGk7CisJc3RydWN0IHN0bGlicmQgKmJyZHA7CisJdW5zaWduZWQgaW50IGlvYmFzZSwgZWlkLCBpOworCWludCBicmRuciwgZm91bmQgPSAwOwogCiAvKgogICoJRmlyc3RseSBjaGVjayBpZiB0aGlzIGlzIGFuIEVJU0Egc3lzdGVtLiAgSWYgdGhpcyBpcyBub3QgYW4gRUlTQSBzeXN0ZW0gdGhlbgpAQCAtMzk4OSw5ICszODIxLDExIEBACiAgKgkJQWxsb2NhdGUgYSBib2FyZCBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemUgaXQuCiAgKi8KIAkJaWYgKChicmRwID0gc3RsaV9hbGxvY2JyZCgpKSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWlmICgoYnJkcC0+YnJkbnIgPSBzdGxpX2dldGJyZG5yKCkpIDwgMCkKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIGZvdW5kID8gOiAtRU5PTUVNOworCQlicmRuciA9IHN0bGlfZ2V0YnJkbnIoKTsKKwkJaWYgKGJyZG5yIDwgMCkKKwkJCXJldHVybiBmb3VuZCA/IDogLUVOT01FTTsKKwkJYnJkcC0+YnJkbnIgPSAodW5zaWduZWQgaW50KWJyZG5yOwogCQllaWQgPSBpbmIoaW9iYXNlICsgMHhjODIpOwogCQlpZiAoZWlkID09IEVDUF9FSVNBSUQpCiAJCQlicmRwLT5icmR0eXBlID0gQlJEX0VDUEU7CkBAIC00MDAzLDExICszODM3LDI0IEBACiAJCW91dGIoMHgxLCAoaW9iYXNlICsgMHhjODQpKTsKIAkJaWYgKHN0bGlfZWlzYW1lbXByb2JlKGJyZHApKQogCQkJb3V0YigwLCAoaW9iYXNlICsgMHhjODQpKTsKLQkJc3RsaV9icmRpbml0KGJyZHApOworCQlpZiAoc3RsaV9icmRpbml0KGJyZHApIDwgMCkgeworCQkJa2ZyZWUoYnJkcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0bGlfYnJkc1ticmRwLT5icmRucl0gPSBicmRwOworCQlmb3VuZCsrOworCisJCWZvciAoaSA9IDA7IGkgPCBicmRwLT5ucnBvcnRzOyBpKyspCisJCQl0dHlfcmVnaXN0ZXJfZGV2aWNlKHN0bGlfc2VyaWFsLAorCQkJCQlicmRwLT5icmRuciAqIFNUTF9NQVhQT1JUUyArIGksIE5VTEwpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBmb3VuZDsKIH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBzdGxpX2ZpbmRlaXNhYnJkcyh2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC00MDE3LDcyICszODY0LDEwNCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZglDT05GSUdfUENJCi0KIC8qCiAgKglXZSBoYXZlIGEgU3RhbGxpb24gYm9hcmQuIEFsbG9jYXRlIGEgYm9hcmQgc3RydWN0dXJlIGFuZAogICoJaW5pdGlhbGl6ZSBpdC4gUmVhZCBpdHMgSU8gYW5kIE1FTU9SWSByZXNvdXJjZXMgZnJvbSBQQ0kKICAqCWNvbmZpZ3VyYXRpb24gc3BhY2UuCiAgKi8KIAotc3RhdGljIGludCBzdGxpX2luaXRwY2licmQoaW50IGJyZHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpkZXZwKQorc3RhdGljIGludCBfX2RldmluaXQgc3RsaV9wY2lwcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdGxpYnJkX3QgKmJyZHA7CisJc3RydWN0IHN0bGlicmQgKmJyZHA7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGJyZG5yLCByZXR2YWwgPSAtRUlPOwogCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldnApKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoKGJyZHAgPSBzdGxpX2FsbG9jYnJkKCkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmICgoYnJkcC0+YnJkbnIgPSBzdGxpX2dldGJyZG5yKCkpIDwgMCkgeworCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyOworCWJyZHAgPSBzdGxpX2FsbG9jYnJkKCk7CisJaWYgKGJyZHAgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisJbXV0ZXhfbG9jaygmc3RsaV9icmRzbG9jayk7CisJYnJkbnIgPSBzdGxpX2dldGJyZG5yKCk7CisJaWYgKGJyZG5yIDwgMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJTVEFMTElPTjogdG9vIG1hbnkgYm9hcmRzIGZvdW5kLCAiCiAJCQkibWF4aW11bSBzdXBwb3J0ZWQgJWRcbiIsIFNUTF9NQVhCUkRTKTsKLQkJcmV0dXJuIDA7CisJCW11dGV4X3VubG9jaygmc3RsaV9icmRzbG9jayk7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyX2ZyOwogCX0KLQlicmRwLT5icmR0eXBlID0gYnJkdHlwZTsKKwlicmRwLT5icmRuciA9ICh1bnNpZ25lZCBpbnQpYnJkbnI7CisJc3RsaV9icmRzW2JyZHAtPmJyZG5yXSA9IGJyZHA7CisJbXV0ZXhfdW5sb2NrKCZzdGxpX2JyZHNsb2NrKTsKKwlicmRwLT5icmR0eXBlID0gQlJEX0VDUFBDSTsKIC8qCiAgKglXZSBoYXZlIGFsbCByZXNvdXJjZXMgZnJvbSB0aGUgYm9hcmQsIHNvIGxldHMgc2V0dXAgdGhlIGFjdHVhbAogICoJYm9hcmQgc3RydWN0dXJlIG5vdy4KICAqLwotCWJyZHAtPmlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwLCAzKTsKLQlicmRwLT5tZW1hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldnAsIDIpOwotCXN0bGlfYnJkaW5pdChicmRwKTsKKwlicmRwLT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMyk7CisJYnJkcC0+bWVtYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwlyZXR2YWwgPSBzdGxpX2JyZGluaXQoYnJkcCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfbnVsbDsKKworCWJyZHAtPnN0YXRlIHw9IEJTVF9QUk9CRUQ7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGJyZHApOworCisJRUJSREVOQUJMRShicmRwKTsKKwlicmRwLT5lbmFibGUgPSBOVUxMOworCWJyZHAtPmRpc2FibGUgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IGJyZHAtPm5ycG9ydHM7IGkrKykKKwkJdHR5X3JlZ2lzdGVyX2RldmljZShzdGxpX3NlcmlhbCwgYnJkcC0+YnJkbnIgKiBTVExfTUFYUE9SVFMgKyBpLAorCQkJCSZwZGV2LT5kZXYpOwogCiAJcmV0dXJuIDA7CitlcnJfbnVsbDoKKwlzdGxpX2JyZHNbYnJkcC0+YnJkbnJdID0gTlVMTDsKK2Vycl9mcjoKKwlrZnJlZShicmRwKTsKK2VycjoKKwlyZXR1cm4gcmV0dmFsOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKglGaW5kIGFsbCBTdGFsbGlvbiBQQ0kgYm9hcmRzIHRoYXQgbWlnaHQgYmUgaW5zdGFsbGVkLiBJbml0aWFsaXplIGVhY2gKLSAqCW9uZSBhcyBpdCBpcyBmb3VuZC4KLSAqLwotCi1zdGF0aWMgaW50IHN0bGlfZmluZHBjaWJyZHModm9pZCkKK3N0YXRpYyB2b2lkIHN0bGlfcGNpcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCXN0cnVjdCBzdGxpYnJkICpicmRwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCi0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NUQUxMSU9OLCBQQ0lfREVWSUNFX0lEX0VDUkEsIGRldikpKSB7Ci0JCXN0bGlfaW5pdHBjaWJyZChCUkRfRUNQUENJLCBkZXYpOwotCX0KLQlyZXR1cm4gMDsKKwlzdGxpX2NsZWFudXBfcG9ydHMoYnJkcCk7CisKKwlpb3VubWFwKGJyZHAtPm1lbWJhc2UpOworCWlmIChicmRwLT5pb3NpemUgPiAwKQorCQlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2Jhc2UsIGJyZHAtPmlvc2l6ZSk7CisKKwlzdGxpX2JyZHNbYnJkcC0+YnJkbnJdID0gTlVMTDsKKwlrZnJlZShicmRwKTsKIH0KIAotI2VuZGlmCi0KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzdGxpX3BjaWRyaXZlciA9IHsKKwkubmFtZSA9ICJpc3RhbGxpb24iLAorCS5pZF90YWJsZSA9IGlzdGFsbGlvbl9wY2lfdGJsLAorCS5wcm9iZSA9IHN0bGlfcGNpcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHN0bGlfcGNpcmVtb3ZlKQorfTsKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKICAqCUFsbG9jYXRlIGEgbmV3IGJvYXJkIHN0cnVjdHVyZS4gRmlsbCBvdXQgdGhlIGJhc2ljIGluZm8gaW4gaXQuCiAgKi8KIAotc3RhdGljIHN0bGlicmRfdCAqc3RsaV9hbGxvY2JyZCh2b2lkKQorc3RhdGljIHN0cnVjdCBzdGxpYnJkICpzdGxpX2FsbG9jYnJkKHZvaWQpCiB7Ci0Jc3RsaWJyZF90ICpicmRwOworCXN0cnVjdCBzdGxpYnJkICpicmRwOwogCi0JYnJkcCA9IGt6YWxsb2Moc2l6ZW9mKHN0bGlicmRfdCksIEdGUF9LRVJORUwpOworCWJyZHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RsaWJyZCksIEdGUF9LRVJORUwpOwogCWlmICghYnJkcCkgewogCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5ICIKLQkJCQkiKHNpemU9JVpkKVxuIiwgc2l6ZW9mKHN0bGlicmRfdCkpOworCQkJCSIoc2l6ZT0lWmQpXG4iLCBzaXplb2Yoc3RydWN0IHN0bGlicmQpKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWJyZHAtPm1hZ2ljID0gU1RMSV9CT0FSRE1BR0lDOwpAQCAtNDA5OCw0MyArMzk3NywzNyBAQAogCiBzdGF0aWMgaW50IHN0bGlfaW5pdGJyZHModm9pZCkKIHsKLQlzdGxpYnJkX3QgKmJyZHAsICpueHRicmRwOwotCXN0bGNvbmZfdCAqY29uZnA7Ci0JaW50IGksIGo7CisJc3RydWN0IHN0bGlicmQgKmJyZHAsICpueHRicmRwOworCXN0cnVjdCBzdGxjb25mIGNvbmY7CisJdW5zaWduZWQgaW50IGksIGosIGZvdW5kID0gMDsKKwlpbnQgcmV0dmFsOwogCi0JaWYgKHN0bGlfbnJicmRzID4gU1RMX01BWEJSRFMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU1RBTExJT046IHRvbyBtYW55IGJvYXJkcyBpbiBjb25maWd1cmF0aW9uICIKLQkJCSJ0YWJsZSwgdHJ1bmNhdGluZyB0byAlZFxuIiwgU1RMX01BWEJSRFMpOwotCQlzdGxpX25yYnJkcyA9IFNUTF9NQVhCUkRTOwotCX0KLQotLyoKLSAqCUZpcnN0bHkgc2NhbiB0aGUgbGlzdCBvZiBzdGF0aWMgYm9hcmRzIGNvbmZpZ3VyZWQuIEFsbG9jYXRlCi0gKglyZXNvdXJjZXMgYW5kIGluaXRpYWxpemUgdGhlIGJvYXJkcyBhcyBmb3VuZC4gSWYgdGhpcyBpcyBhCi0gKgltb2R1bGUgdGhlbiBsZXQgdGhlIG1vZHVsZSBhcmdzIG92ZXJyaWRlIHN0YXRpYyBjb25maWd1cmF0aW9uLgotICovCi0JZm9yIChpID0gMDsgKGkgPCBzdGxpX25yYnJkcyk7IGkrKykgewotCQljb25mcCA9ICZzdGxpX2JyZGNvbmZbaV07Ci0JCXN0bGlfcGFyc2VicmQoY29uZnAsIHN0bGlfYnJkc3BbaV0pOworCWZvciAoc3RsaV9ucmJyZHMgPSAwOyBzdGxpX25yYnJkcyA8IEFSUkFZX1NJWkUoc3RsaV9icmRzcCk7CisJCQlzdGxpX25yYnJkcysrKSB7CisJCW1lbXNldCgmY29uZiwgMCwgc2l6ZW9mKGNvbmYpKTsKKwkJaWYgKHN0bGlfcGFyc2VicmQoJmNvbmYsIHN0bGlfYnJkc3Bbc3RsaV9ucmJyZHNdKSA9PSAwKQorCQkJY29udGludWU7CiAJCWlmICgoYnJkcCA9IHN0bGlfYWxsb2NicmQoKSkgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlicmRwLT5icmRuciA9IGk7Ci0JCWJyZHAtPmJyZHR5cGUgPSBjb25mcC0+YnJkdHlwZTsKLQkJYnJkcC0+aW9iYXNlID0gY29uZnAtPmlvYWRkcjE7Ci0JCWJyZHAtPm1lbWFkZHIgPSBjb25mcC0+bWVtYWRkcjsKLQkJc3RsaV9icmRpbml0KGJyZHApOworCQkJY29udGludWU7CisJCWJyZHAtPmJyZG5yID0gc3RsaV9ucmJyZHM7CisJCWJyZHAtPmJyZHR5cGUgPSBjb25mLmJyZHR5cGU7CisJCWJyZHAtPmlvYmFzZSA9IGNvbmYuaW9hZGRyMTsKKwkJYnJkcC0+bWVtYWRkciA9IGNvbmYubWVtYWRkcjsKKwkJaWYgKHN0bGlfYnJkaW5pdChicmRwKSA8IDApIHsKKwkJCWtmcmVlKGJyZHApOworCQkJY29udGludWU7CisJCX0KKwkJc3RsaV9icmRzW2JyZHAtPmJyZG5yXSA9IGJyZHA7CisJCWZvdW5kKys7CisKKwkJZm9yIChpID0gMDsgaSA8IGJyZHAtPm5ycG9ydHM7IGkrKykKKwkJCXR0eV9yZWdpc3Rlcl9kZXZpY2Uoc3RsaV9zZXJpYWwsCisJCQkJCWJyZHAtPmJyZG5yICogU1RMX01BWFBPUlRTICsgaSwgTlVMTCk7CiAJfQogCi0vKgotICoJU3RhdGljIGNvbmZpZ3VyYXRpb24gdGFibGUgZG9uZSwgc28gbm93IHVzZSBkeW5hbWljIG1ldGhvZHMgdG8KLSAqCXNlZSBpZiBhbnkgbW9yZSBib2FyZHMgc2hvdWxkIGJlIGNvbmZpZ3VyZWQuCi0gKi8KLQlzdGxpX2FyZ2JyZHMoKTsKLQlpZiAoU1RMSV9FSVNBUFJPQkUpCi0JCXN0bGlfZmluZGVpc2FicmRzKCk7Ci0jaWZkZWYgQ09ORklHX1BDSQotCXN0bGlfZmluZHBjaWJyZHMoKTsKLSNlbmRpZgorCXJldHZhbCA9IHN0bGlfZmluZGVpc2FicmRzKCk7CisJaWYgKHJldHZhbCA+IDApCisJCWZvdW5kICs9IHJldHZhbDsKIAogLyoKICAqCUFsbCBmb3VuZCBib2FyZHMgYXJlIGluaXRpYWxpemVkLiBOb3cgZm9yIGEgbGl0dGxlIG9wdGltaXphdGlvbiwgaWYKQEAgLTQxNzQsNyArNDA0NywxNiBAQAogCQl9CiAJfQogCisJcmV0dmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc3RsaV9wY2lkcml2ZXIpOworCWlmIChyZXR2YWwgJiYgZm91bmQgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk5laXRoZXIgaXNhIG5vciBlaXNhIGNhcmRzIGZvdW5kIG5vciBwY2kgIgorCQkJCSJkcml2ZXIgY2FuIGJlIHJlZ2lzdGVyZWQhXG4iKTsKKwkJZ290byBlcnI7CisJfQorCiAJcmV0dXJuIDA7CitlcnI6CisJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDE4OSwxMiArNDA3MSwxMyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCBfX2lvbWVtICptZW1wdHI7Ci0Jc3RsaWJyZF90ICpicmRwOwotCWludCBicmRuciwgc2l6ZSwgbjsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKKwl1bnNpZ25lZCBpbnQgYnJkbnI7CisJaW50IHNpemUsIG47CiAJdm9pZCAqcDsKIAlsb2ZmX3Qgb2ZmID0gKm9mZnA7CiAKLQlicmRuciA9IGltaW5vcihmcC0+Zl9kZW50cnktPmRfaW5vZGUpOworCWJyZG5yID0gaW1pbm9yKGZwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAoYnJkbnIgPj0gc3RsaV9ucmJyZHMpCiAJCXJldHVybiAtRU5PREVWOwogCWJyZHAgPSBzdGxpX2JyZHNbYnJkbnJdOwpAQCAtNDIwNSw3ICs0MDg4LDcgQEAKIAlpZiAob2ZmID49IGJyZHAtPm1lbXNpemUgfHwgb2ZmICsgY291bnQgPCBvZmYpCiAJCXJldHVybiAwOwogCi0Jc2l6ZSA9IE1JTihjb3VudCwgKGJyZHAtPm1lbXNpemUgLSBvZmYpKTsKKwlzaXplID0gbWluKGNvdW50LCAoc2l6ZV90KShicmRwLT5tZW1zaXplIC0gb2ZmKSk7CiAKIAkvKgogCSAqCUNvcHkgdGhlIGRhdGEgYSBwYWdlIGF0IGEgdGltZQpAQCAtNDIxOSw4ICs0MTAyLDggQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7CiAJCUVCUkRFTkFCTEUoYnJkcCk7CiAJCW1lbXB0ciA9IEVCUkRHRVRNRU1QVFIoYnJkcCwgb2ZmKTsKLQkJbiA9IE1JTihzaXplLCAoYnJkcC0+cGFnZXNpemUgLSAoKCh1bnNpZ25lZCBsb25nKSBvZmYpICUgYnJkcC0+cGFnZXNpemUpKSk7Ci0JCW4gPSBNSU4obiwgUEFHRV9TSVpFKTsKKwkJbiA9IG1pbihzaXplLCAoaW50KShicmRwLT5wYWdlc2l6ZSAtICgoKHVuc2lnbmVkIGxvbmcpIG9mZikgJSBicmRwLT5wYWdlc2l6ZSkpKTsKKwkJbiA9IG1pbihuLCAoaW50KVBBR0VfU0laRSk7CiAJCW1lbWNweV9mcm9taW8ocCwgbWVtcHRyLCBuKTsKIAkJRUJSRERJU0FCTEUoYnJkcCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZF9sb2NrLCBmbGFncyk7CkBAIC00MjUyLDEzICs0MTM1LDE0IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkIF9faW9tZW0gKm1lbXB0cjsKLQlzdGxpYnJkX3QgKmJyZHA7CisJc3RydWN0IHN0bGlicmQgKmJyZHA7CiAJY2hhciBfX3VzZXIgKmNoYnVmOwotCWludCBicmRuciwgc2l6ZSwgbjsKKwl1bnNpZ25lZCBpbnQgYnJkbnI7CisJaW50IHNpemUsIG47CiAJdm9pZCAqcDsKIAlsb2ZmX3Qgb2ZmID0gKm9mZnA7CiAKLQlicmRuciA9IGltaW5vcihmcC0+Zl9kZW50cnktPmRfaW5vZGUpOworCWJyZG5yID0gaW1pbm9yKGZwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAogCWlmIChicmRuciA+PSBzdGxpX25yYnJkcykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00MjcxLDcgKzQxNTUsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNoYnVmID0gKGNoYXIgX191c2VyICopIGJ1ZjsKLQlzaXplID0gTUlOKGNvdW50LCAoYnJkcC0+bWVtc2l6ZSAtIG9mZikpOworCXNpemUgPSBtaW4oY291bnQsIChzaXplX3QpKGJyZHAtPm1lbXNpemUgLSBvZmYpKTsKIAogCS8qCiAJICoJQ29weSB0aGUgZGF0YSBhIHBhZ2UgYXQgYSB0aW1lCkBAIC00MjgyLDggKzQxNjYsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXdoaWxlIChzaXplID4gMCkgewotCQluID0gTUlOKHNpemUsIChicmRwLT5wYWdlc2l6ZSAtICgoKHVuc2lnbmVkIGxvbmcpIG9mZikgJSBicmRwLT5wYWdlc2l6ZSkpKTsKLQkJbiA9IE1JTihuLCBQQUdFX1NJWkUpOworCQluID0gbWluKHNpemUsIChpbnQpKGJyZHAtPnBhZ2VzaXplIC0gKCgodW5zaWduZWQgbG9uZykgb2ZmKSAlIGJyZHAtPnBhZ2VzaXplKSkpOworCQluID0gbWluKG4sIChpbnQpUEFHRV9TSVpFKTsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKHAsIGNoYnVmLCBuKSkgewogCQkJaWYgKGNvdW50ID09IDApCiAJCQkJY291bnQgPSAtRUZBVUxUOwpAQCAtNDMxMyw4ICs0MTk3LDggQEAKIAogc3RhdGljIGludCBzdGxpX2dldGJyZHN0YXRzKGNvbWJyZF90IF9fdXNlciAqYnApCiB7Ci0Jc3RsaWJyZF90ICpicmRwOwotCWludCBpOworCXN0cnVjdCBzdGxpYnJkICpicmRwOworCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZzdGxpX2JyZHN0YXRzLCBicCwgc2l6ZW9mKGNvbWJyZF90KSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtNDM1MCwxOSArNDIzNCwyMCBAQAogICoJUmVzb2x2ZSB0aGUgcmVmZXJlbmNlZCBwb3J0IG51bWJlciBpbnRvIGEgcG9ydCBzdHJ1Y3QgcG9pbnRlci4KICAqLwogCi1zdGF0aWMgc3RsaXBvcnRfdCAqc3RsaV9nZXRwb3J0KGludCBicmRuciwgaW50IHBhbmVsbnIsIGludCBwb3J0bnIpCitzdGF0aWMgc3RydWN0IHN0bGlwb3J0ICpzdGxpX2dldHBvcnQodW5zaWduZWQgaW50IGJyZG5yLCB1bnNpZ25lZCBpbnQgcGFuZWxuciwKKwkJdW5zaWduZWQgaW50IHBvcnRucikKIHsKLQlzdGxpYnJkX3QgKmJyZHA7Ci0JaW50IGk7CisJc3RydWN0IHN0bGlicmQgKmJyZHA7CisJdW5zaWduZWQgaW50IGk7CiAKLQlpZiAoYnJkbnIgPCAwIHx8IGJyZG5yID49IFNUTF9NQVhCUkRTKQorCWlmIChicmRuciA+PSBTVExfTUFYQlJEUykKIAkJcmV0dXJuIE5VTEw7CiAJYnJkcCA9IHN0bGlfYnJkc1ticmRucl07CiAJaWYgKGJyZHAgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJZm9yIChpID0gMDsgKGkgPCBwYW5lbG5yKTsgaSsrKQogCQlwb3J0bnIgKz0gYnJkcC0+cGFuZWxzW2ldOwotCWlmICgocG9ydG5yIDwgMCkgfHwgKHBvcnRuciA+PSBicmRwLT5ucnBvcnRzKSkKKwlpZiAocG9ydG5yID49IGJyZHAtPm5ycG9ydHMpCiAJCXJldHVybiBOVUxMOwogCXJldHVybiBicmRwLT5wb3J0c1twb3J0bnJdOwogfQpAQCAtNDM3NSwxMCArNDI2MCwxMCBAQAogICoJd2hhdCBwb3J0IHRvIGdldCBzdGF0cyBmb3IgKHVzZWQgdGhyb3VnaCBib2FyZCBjb250cm9sIGRldmljZSkuCiAgKi8KIAotc3RhdGljIGludCBzdGxpX3BvcnRjbWRzdGF0cyhzdGxpcG9ydF90ICpwb3J0cCkKK3N0YXRpYyBpbnQgc3RsaV9wb3J0Y21kc3RhdHMoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCkKIHsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwotCXN0bGlicmRfdAkqYnJkcDsKKwlzdHJ1Y3Qgc3RsaWJyZAkqYnJkcDsKIAlpbnQJCXJjOwogCiAJbWVtc2V0KCZzdGxpX2NvbXN0YXRzLCAwLCBzaXplb2YoY29tc3RhdHNfdCkpOwpAQCAtNDQ0OSw5ICs0MzM0LDkgQEAKICAqCXdoYXQgcG9ydCB0byBnZXQgc3RhdHMgZm9yICh1c2VkIHRocm91Z2ggYm9hcmQgY29udHJvbCBkZXZpY2UpLgogICovCiAKLXN0YXRpYyBpbnQgc3RsaV9nZXRwb3J0c3RhdHMoc3RsaXBvcnRfdCAqcG9ydHAsIGNvbXN0YXRzX3QgX191c2VyICpjcCkKK3N0YXRpYyBpbnQgc3RsaV9nZXRwb3J0c3RhdHMoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgY29tc3RhdHNfdCBfX3VzZXIgKmNwKQogewotCXN0bGlicmRfdCAqYnJkcDsKKwlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKIAlpbnQgcmM7CiAKIAlpZiAoIXBvcnRwKSB7CkBAIC00NDgwLDkgKzQzNjUsOSBAQAogICoJQ2xlYXIgdGhlIHBvcnQgc3RhdHMgc3RydWN0dXJlLiBXZSBhbHNvIHJldHVybiBpdCB6ZXJvZWQgb3V0Li4uCiAgKi8KIAotc3RhdGljIGludCBzdGxpX2NscnBvcnRzdGF0cyhzdGxpcG9ydF90ICpwb3J0cCwgY29tc3RhdHNfdCBfX3VzZXIgKmNwKQorc3RhdGljIGludCBzdGxpX2NscnBvcnRzdGF0cyhzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApCiB7Ci0Jc3RsaWJyZF90ICpicmRwOworCXN0cnVjdCBzdGxpYnJkICpicmRwOwogCWludCByYzsKIAogCWlmICghcG9ydHApIHsKQEAgLTQ1MTksMTcgKzQ0MDQsMTggQEAKICAqCVJldHVybiB0aGUgZW50aXJlIGRyaXZlciBwb3J0cyBzdHJ1Y3R1cmUgdG8gYSB1c2VyIGFwcC4KICAqLwogCi1zdGF0aWMgaW50IHN0bGlfZ2V0cG9ydHN0cnVjdChzdGxpcG9ydF90IF9fdXNlciAqYXJnKQorc3RhdGljIGludCBzdGxpX2dldHBvcnRzdHJ1Y3Qoc3RydWN0IHN0bGlwb3J0IF9fdXNlciAqYXJnKQogewotCXN0bGlwb3J0X3QgKnBvcnRwOworCXN0cnVjdCBzdGxpcG9ydCBzdGxpX2R1bW15cG9ydDsKKwlzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZzdGxpX2R1bW15cG9ydCwgYXJnLCBzaXplb2Yoc3RsaXBvcnRfdCkpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmc3RsaV9kdW1teXBvcnQsIGFyZywgc2l6ZW9mKHN0cnVjdCBzdGxpcG9ydCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlwb3J0cCA9IHN0bGlfZ2V0cG9ydChzdGxpX2R1bW15cG9ydC5icmRuciwgc3RsaV9kdW1teXBvcnQucGFuZWxuciwKIAkJIHN0bGlfZHVtbXlwb3J0LnBvcnRucik7CiAJaWYgKCFwb3J0cCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKGNvcHlfdG9fdXNlcihhcmcsIHBvcnRwLCBzaXplb2Yoc3RsaXBvcnRfdCkpKQorCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBwb3J0cCwgc2l6ZW9mKHN0cnVjdCBzdGxpcG9ydCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1NDAsMTggKzQ0MjYsMTkgQEAKICAqCVJldHVybiB0aGUgZW50aXJlIGRyaXZlciBib2FyZCBzdHJ1Y3R1cmUgdG8gYSB1c2VyIGFwcC4KICAqLwogCi1zdGF0aWMgaW50IHN0bGlfZ2V0YnJkc3RydWN0KHN0bGlicmRfdCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQgc3RsaV9nZXRicmRzdHJ1Y3Qoc3RydWN0IHN0bGlicmQgX191c2VyICphcmcpCiB7Ci0Jc3RsaWJyZF90ICpicmRwOworCXN0cnVjdCBzdGxpYnJkIHN0bGlfZHVtbXlicmQ7CisJc3RydWN0IHN0bGlicmQgKmJyZHA7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnN0bGlfZHVtbXlicmQsIGFyZywgc2l6ZW9mKHN0bGlicmRfdCkpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmc3RsaV9kdW1teWJyZCwgYXJnLCBzaXplb2Yoc3RydWN0IHN0bGlicmQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKChzdGxpX2R1bW15YnJkLmJyZG5yIDwgMCkgfHwgKHN0bGlfZHVtbXlicmQuYnJkbnIgPj0gU1RMX01BWEJSRFMpKQorCWlmIChzdGxpX2R1bW15YnJkLmJyZG5yID49IFNUTF9NQVhCUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlicmRwID0gc3RsaV9icmRzW3N0bGlfZHVtbXlicmQuYnJkbnJdOwogCWlmICghYnJkcCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKGNvcHlfdG9fdXNlcihhcmcsIGJyZHAsIHNpemVvZihzdGxpYnJkX3QpKSkKKwlpZiAoY29weV90b191c2VyKGFyZywgYnJkcCwgc2l6ZW9mKHN0cnVjdCBzdGxpYnJkKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQpAQCAtNDU2Niw3ICs0NDUzLDcgQEAKIAogc3RhdGljIGludCBzdGxpX21lbWlvY3RsKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RsaWJyZF90ICpicmRwOworCXN0cnVjdCBzdGxpYnJkICpicmRwOwogCWludCBicmRuciwgcmMsIGRvbmU7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKQEAgLTQ2NjUsNDYgKzQ1NTIsNTMgQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKglMb2FkYWJsZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gc3R1ZmYuCisgKi8KIAotc3RhdGljIGludCBfX2luaXQgc3RsaV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBpc3RhbGxpb25fY2xlYW51cF9pc2Eodm9pZCkKIHsKLQlpbnQgaTsKKwlzdHJ1Y3Qgc3RsaWJyZAkqYnJkcDsKKwl1bnNpZ25lZCBpbnQgajsKKworCWZvciAoaiA9IDA7IChqIDwgc3RsaV9ucmJyZHMpOyBqKyspIHsKKwkJaWYgKChicmRwID0gc3RsaV9icmRzW2pdKSA9PSBOVUxMIHx8IChicmRwLT5zdGF0ZSAmIEJTVF9QUk9CRUQpKQorCQkJY29udGludWU7CisKKwkJc3RsaV9jbGVhbnVwX3BvcnRzKGJyZHApOworCisJCWlvdW5tYXAoYnJkcC0+bWVtYmFzZSk7CisJCWlmIChicmRwLT5pb3NpemUgPiAwKQorCQkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9iYXNlLCBicmRwLT5pb3NpemUpOworCQlrZnJlZShicmRwKTsKKwkJc3RsaV9icmRzW2pdID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGlzdGFsbGlvbl9tb2R1bGVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCWludCByZXR2YWw7CisKIAlwcmludGsoS0VSTl9JTkZPICIlczogdmVyc2lvbiAlc1xuIiwgc3RsaV9kcnZ0aXRsZSwgc3RsaV9kcnZ2ZXJzaW9uKTsKIAogCXNwaW5fbG9ja19pbml0KCZzdGxpX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZicmRfbG9jayk7CiAKLQlzdGxpX2luaXRicmRzKCk7Ci0KLQlzdGxpX3NlcmlhbCA9IGFsbG9jX3R0eV9kcml2ZXIoU1RMX01BWEJSRFMgKiBTVExfTUFYUE9SVFMpOwotCWlmICghc3RsaV9zZXJpYWwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0vKgotICoJQWxsb2NhdGUgYSB0ZW1wb3Jhcnkgd3JpdGUgYnVmZmVyLgotICovCiAJc3RsaV90eGNvb2tidWYgPSBrbWFsbG9jKFNUTElfVFhCVUZTSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0bGlfdHhjb29rYnVmKQorCWlmICghc3RsaV90eGNvb2tidWYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSAiCiAJCQkJIihzaXplPSVkKVxuIiwgU1RMSV9UWEJVRlNJWkUpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CiAKLS8qCi0gKglTZXQgdXAgYSBjaGFyYWN0ZXIgZHJpdmVyIGZvciB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb24uIFdlIG5lZWQgdGhpcwotICoJdG8gZG93biBsb2FkIHRoZSBzbGF2ZSBjb2RlIGltYWdlLiBBbHNvIGl0IGlzIGEgdXNlZnVsIGRlYnVnZ2luZyB0b29sLgotICovCi0JaWYgKHJlZ2lzdGVyX2NocmRldihTVExfU0lPTUVNTUFKT1IsICJzdGFsaW9tZW0iLCAmc3RsaV9mc2lvbWVtKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJTVEFMTElPTjogZmFpbGVkIHRvIHJlZ2lzdGVyIHNlcmlhbCBtZW1vcnkgIgotCQkJCSJkZXZpY2VcbiIpOworCXN0bGlfc2VyaWFsID0gYWxsb2NfdHR5X2RyaXZlcihTVExfTUFYQlJEUyAqIFNUTF9NQVhQT1JUUyk7CisJaWYgKCFzdGxpX3NlcmlhbCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlOworCX0KIAotCWlzdGFsbGlvbl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInN0YWxpb21lbSIpOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCWNsYXNzX2RldmljZV9jcmVhdGUoaXN0YWxsaW9uX2NsYXNzLCBOVUxMLAotCQkJCU1LREVWKFNUTF9TSU9NRU1NQUpPUiwgaSksCi0JCQkJTlVMTCwgInN0YWxpb21lbSVkIiwgaSk7Ci0KLS8qCi0gKglTZXQgdXAgdGhlIHR0eSBkcml2ZXIgc3RydWN0dXJlIGFuZCByZWdpc3RlciB1cyBhcyBhIGRyaXZlci4KLSAqLwogCXN0bGlfc2VyaWFsLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXN0bGlfc2VyaWFsLT5kcml2ZXJfbmFtZSA9IHN0bGlfZHJ2bmFtZTsKIAlzdGxpX3NlcmlhbC0+bmFtZSA9IHN0bGlfc2VyaWFsbmFtZTsKQEAgLTQ3MTMsMTUgKzQ2MDcsNzkgQEAKIAlzdGxpX3NlcmlhbC0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CiAJc3RsaV9zZXJpYWwtPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CiAJc3RsaV9zZXJpYWwtPmluaXRfdGVybWlvcyA9IHN0bGlfZGVmdGVybWlvczsKLQlzdGxpX3NlcmlhbC0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOworCXN0bGlfc2VyaWFsLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhzdGxpX3NlcmlhbCwgJnN0bGlfb3BzKTsKIAotCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKHN0bGlfc2VyaWFsKSkgewotCQlwdXRfdHR5X2RyaXZlcihzdGxpX3NlcmlhbCk7CisJcmV0dmFsID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihzdGxpX3NlcmlhbCk7CisJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9FUlIgIlNUQUxMSU9OOiBmYWlsZWQgdG8gcmVnaXN0ZXIgc2VyaWFsIGRyaXZlclxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCWdvdG8gZXJyX3R0eXB1dDsKIAl9CisKKwlyZXR2YWwgPSBzdGxpX2luaXRicmRzKCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfdHR5dW5yOworCisvKgorICoJU2V0IHVwIGEgY2hhcmFjdGVyIGRyaXZlciBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uLiBXZSBuZWVkIHRoaXMKKyAqCXRvIGRvd24gbG9hZCB0aGUgc2xhdmUgY29kZSBpbWFnZS4gQWxzbyBpdCBpcyBhIHVzZWZ1bCBkZWJ1Z2dpbmcgdG9vbC4KKyAqLworCXJldHZhbCA9IHJlZ2lzdGVyX2NocmRldihTVExfU0lPTUVNTUFKT1IsICJzdGFsaW9tZW0iLCAmc3RsaV9mc2lvbWVtKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU1RBTExJT046IGZhaWxlZCB0byByZWdpc3RlciBzZXJpYWwgbWVtb3J5ICIKKwkJCQkiZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZGVpbml0OworCX0KKworCWlzdGFsbGlvbl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInN0YWxpb21lbSIpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWNsYXNzX2RldmljZV9jcmVhdGUoaXN0YWxsaW9uX2NsYXNzLCBOVUxMLAorCQkJCU1LREVWKFNUTF9TSU9NRU1NQUpPUiwgaSksCisJCQkJTlVMTCwgInN0YWxpb21lbSVkIiwgaSk7CisKIAlyZXR1cm4gMDsKK2Vycl9kZWluaXQ6CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzdGxpX3BjaWRyaXZlcik7CisJaXN0YWxsaW9uX2NsZWFudXBfaXNhKCk7CitlcnJfdHR5dW5yOgorCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihzdGxpX3NlcmlhbCk7CitlcnJfdHR5cHV0OgorCXB1dF90dHlfZHJpdmVyKHN0bGlfc2VyaWFsKTsKK2Vycl9mcmVlOgorCWtmcmVlKHN0bGlfdHhjb29rYnVmKTsKK2VycjoKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpc3RhbGxpb25fbW9kdWxlX2V4aXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgajsKKworCXByaW50ayhLRVJOX0lORk8gIlVubG9hZGluZyAlczogdmVyc2lvbiAlc1xuIiwgc3RsaV9kcnZ0aXRsZSwKKwkJc3RsaV9kcnZ2ZXJzaW9uKTsKKworCWlmIChzdGxpX3RpbWVyb24pIHsKKwkJc3RsaV90aW1lcm9uID0gMDsKKwkJZGVsX3RpbWVyX3N5bmMoJnN0bGlfdGltZXJsaXN0KTsKKwl9CisKKwl1bnJlZ2lzdGVyX2NocmRldihTVExfU0lPTUVNTUFKT1IsICJzdGFsaW9tZW0iKTsKKworCWZvciAoaiA9IDA7IGogPCA0OyBqKyspCisJCWNsYXNzX2RldmljZV9kZXN0cm95KGlzdGFsbGlvbl9jbGFzcywgTUtERVYoU1RMX1NJT01FTU1BSk9SLAorCQkJCQlqKSk7CisJY2xhc3NfZGVzdHJveShpc3RhbGxpb25fY2xhc3MpOworCisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzdGxpX3BjaWRyaXZlcik7CisJaXN0YWxsaW9uX2NsZWFudXBfaXNhKCk7CisKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoc3RsaV9zZXJpYWwpOworCXB1dF90dHlfZHJpdmVyKHN0bGlfc2VyaWFsKTsKKworCWtmcmVlKHN0bGlfdHhjb29rYnVmKTsKK30KKworbW9kdWxlX2luaXQoaXN0YWxsaW9uX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGlzdGFsbGlvbl9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCmluZGV4IDIwYjZjOGIuLjdhNmMxYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCisrKyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCkBAIC03MTAsNyArNzEwLDcgQEAKIAogc3RhdGljIHZvaWQga19jdXIoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBjaGFyIHZhbHVlLCBjaGFyIHVwX2ZsYWcpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmN1cl9jaGFycyA9ICJCRENBIjsKKwlzdGF0aWMgY29uc3QgY2hhciBjdXJfY2hhcnNbXSA9ICJCRENBIjsKIAogCWlmICh1cF9mbGFnKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbGNkLmMgYi9kcml2ZXJzL2NoYXIvbGNkLmMKaW5kZXggZGE2MDFmZC4uZDY0OWFiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2xjZC5jCisrKyBiL2RyaXZlcnMvY2hhci9sY2QuYwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAJCQkgICAgKCZkaXNwbGF5LCAoc3RydWN0IGxjZF9kaXNwbGF5ICopIGFyZywKIAkJCSAgICAgc2l6ZW9mKHN0cnVjdCBsY2RfZGlzcGxheSkpKQogCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcm9tID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYygoMTI4KSwgR0ZQX0FUT01JQyk7CisJCQlyb20gPSBrbWFsbG9jKCgxMjgpLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChyb20gPT0gTlVMTCkgewogCQkJCXByaW50ayhLRVJOX0VSUiBMQ0QgImttYWxsb2MoKSBmYWlsZWQgaW4gJXNcbiIsCiAJCQkJCQlfX0ZVTkNUSU9OX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2xwLmMgYi9kcml2ZXJzL2NoYXIvbHAuYwppbmRleCAxZWNlYTdkLi5iNTFkMDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbHAuYworKysgYi9kcml2ZXJzL2NoYXIvbHAuYwpAQCAtMjk2LDcgKzI5Niw3IEBACiBzdGF0aWMgc3NpemVfdCBscF93cml0ZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAogCQkgICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBwYXJwb3J0ICpwb3J0ID0gbHBfdGFibGVbbWlub3JdLmRldi0+cG9ydDsKIAljaGFyICprYnVmID0gbHBfdGFibGVbbWlub3JdLmxwX2J1ZmZlcjsKIAlzc2l6ZV90IHJldHYgPSAwOwpAQCAtNDE1LDcgKzQxNSw3IEBACiAJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKLQl1bnNpZ25lZCBpbnQgbWlub3I9aW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl1bnNpZ25lZCBpbnQgbWlub3I9aW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBwYXJwb3J0ICpwb3J0ID0gbHBfdGFibGVbbWlub3JdLmRldi0+cG9ydDsKIAlzc2l6ZV90IHJldHZhbCA9IDA7CiAJY2hhciAqa2J1ZiA9IGxwX3RhYmxlW21pbm9yXS5scF9idWZmZXI7CkBAIC01MjUsNyArNTI1LDcgQEAKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJfQotCWxwX3RhYmxlW21pbm9yXS5scF9idWZmZXIgPSAoY2hhciAqKSBrbWFsbG9jKExQX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlscF90YWJsZVttaW5vcl0ubHBfYnVmZmVyID0ga21hbGxvYyhMUF9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFscF90YWJsZVttaW5vcl0ubHBfYnVmZmVyKSB7CiAJCUxQX0YobWlub3IpICY9IH5MUF9CVVNZOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uYwppbmRleCBlNjdlZWY0Li5mNWMxNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmMKKysrIGIvZHJpdmVycy9jaGFyL21lbS5jCkBAIC0yOTMsOCArMjkzLDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIHBmbjsKIAotCS8qIFR1cm4gYSBwZm4gb2Zmc2V0IGludG8gYW4gYWJzb2x1dGUgcGZuICovCi0JcGZuID0gUEZOX0RPV04odmlydF90b19waHlzKCh2b2lkICopUEFHRV9PRkZTRVQpKSArIHZtYS0+dm1fcGdvZmY7CisJLyogVHVybiBhIGtlcm5lbC12aXJ0dWFsIGFkZHJlc3MgaW50byBhIHBoeXNpY2FsIHBhZ2UgZnJhbWUgKi8KKwlwZm4gPSBfX3BhKCh1NjQpdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUKSA+PiBQQUdFX1NISUZUOwogCiAJLyoKIAkgKiBSRUQtUEVOOiBvbiBzb21lIGFyY2hpdGVjdHVyZXMgdGhlcmUgaXMgbW9yZSBtYXBwZWQgbWVtb3J5CkBAIC02NDYsNyArNjQ2LDggQEAKIAkJCWNvdW50ID0gc2l6ZTsKIAogCQl6YXBfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIGNvdW50LCBOVUxMKTsKLSAgICAgICAgCXplcm9tYXBfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIGNvdW50LCBQQUdFX0NPUFkpOworICAgICAgICAJaWYgKHplcm9tYXBfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIGNvdW50LCBQQUdFX0NPUFkpKQorCQkJYnJlYWs7CiAKIAkJc2l6ZSAtPSBjb3VudDsKIAkJYnVmICs9IGNvdW50OwpAQCAtNzEzLDExICs3MTQsMTQgQEAKIAogc3RhdGljIGludCBtbWFwX3plcm8oc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCiB7CisJaW50IGVycjsKKwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKQogCQlyZXR1cm4gc2htZW1femVyb19zZXR1cCh2bWEpOwotCWlmICh6ZXJvbWFwX3BhZ2VfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGFnZV9wcm90KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JcmV0dXJuIDA7CisJZXJyID0gemVyb21hcF9wYWdlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKKwkJCXZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwgdm1hLT52bV9wYWdlX3Byb3QpOworCUJVR19PTihlcnIgPT0gLUVFWElTVCk7CisJcmV0dXJuIGVycjsKIH0KICNlbHNlIC8qIENPTkZJR19NTVUgKi8KIHN0YXRpYyBzc2l6ZV90IHJlYWRfemVybyhzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgKiBidWYsIApAQCAtNzc0LDcgKzc3OCw3IEBACiB7CiAJbG9mZl90IHJldDsKIAotCW11dGV4X2xvY2soJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwltdXRleF9sb2NrKCZmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlzd2l0Y2ggKG9yaWcpIHsKIAkJY2FzZSAwOgogCQkJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CkBAIC03ODksNyArNzkzLDcgQEAKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU5WQUw7CiAJfQotCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21veGEuYyBiL2RyaXZlcnMvY2hhci9tb3hhLmMKaW5kZXggOGIzMTY5NS4uZjM5MWEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21veGEuYworKysgYi9kcml2ZXJzL2NoYXIvbW94YS5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIHN0YXRpYyBpbnQgbW94YV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgbW94YV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIG1veGFfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKLXN0YXRpYyB2b2lkIG1veGFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IHRlcm1pb3MgKik7CitzdGF0aWMgdm9pZCBtb3hhX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBrdGVybWlvcyAqKTsKIHN0YXRpYyB2b2lkIG1veGFfc3RvcChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIG1veGFfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CiBzdGF0aWMgdm9pZCBtb3hhX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKQEAgLTI2MSw3ICsyNjEsNyBAQAogc3RhdGljIHZvaWQgTW94YVBvcnREaXNhYmxlKGludCk7CiBzdGF0aWMgbG9uZyBNb3hhUG9ydEdldE1heEJhdWQoaW50KTsKIHN0YXRpYyBsb25nIE1veGFQb3J0U2V0QmF1ZChpbnQsIGxvbmcpOwotc3RhdGljIGludCBNb3hhUG9ydFNldFRlcm1pbyhpbnQsIHN0cnVjdCB0ZXJtaW9zICosIHNwZWVkX3QpOworc3RhdGljIGludCBNb3hhUG9ydFNldFRlcm1pbyhpbnQsIHN0cnVjdCBrdGVybWlvcyAqLCBzcGVlZF90KTsKIHN0YXRpYyBpbnQgTW94YVBvcnRHZXRMaW5lT3V0KGludCwgaW50ICosIGludCAqKTsKIHN0YXRpYyB2b2lkIE1veGFQb3J0TGluZUN0cmwoaW50LCBpbnQsIGludCk7CiBzdGF0aWMgdm9pZCBNb3hhUG9ydEZsb3dDdHJsKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpOwpAQCAtMzU1LDYgKzM1NSw4IEBACiAJbW94YURyaXZlci0+aW5pdF90ZXJtaW9zLmNfb2ZsYWcgPSAwOwogCW1veGFEcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IENMT0NBTCB8IEhVUENMOwogCW1veGFEcml2ZXItPmluaXRfdGVybWlvcy5jX2xmbGFnID0gMDsKKwltb3hhRHJpdmVyLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOworCW1veGFEcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAJbW94YURyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhtb3hhRHJpdmVyLCAmbW94YV9vcHMpOwogCkBAIC04NjQsNyArODY2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgbW94YV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJICAgICBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCisJCQkgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IG1veGFfc3RyICpjaCA9IChzdHJ1Y3QgbW94YV9zdHIgKikgdHR5LT5kcml2ZXJfZGF0YTsKIApAQCAtOTc4LDcgKzk4MCw3IEBACiAKIHN0YXRpYyB2b2lkIHNldF90dHlfcGFyYW0oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlyZWdpc3RlciBzdHJ1Y3QgdGVybWlvcyAqdHM7CisJcmVnaXN0ZXIgc3RydWN0IGt0ZXJtaW9zICp0czsKIAlzdHJ1Y3QgbW94YV9zdHIgKmNoOwogCWludCBydHMsIGN0cywgdHhmbG93LCByeGZsb3csIHhhbnk7CiAKQEAgLTExNDksNyArMTE1MSw3IEBACiBzdGF0aWMgdm9pZCByZWNlaXZlX2RhdGEoc3RydWN0IG1veGFfc3RyICpjaCkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHA7Ci0Jc3RydWN0IHRlcm1pb3MgKnRzOworCXN0cnVjdCBrdGVybWlvcyAqdHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXRzID0gTlVMTDsKQEAgLTE5MTIsOSArMTkxNCw5IEBACiAgKgogICogICAgICBGdW5jdGlvbiAxMjogICAgQ29uZmlndXJlIHRoZSBwb3J0LgogICogICAgICBTeW50YXg6Ci0gKiAgICAgIGludCAgTW94YVBvcnRTZXRUZXJtaW8oaW50IHBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW8sIHNwZWVkX3QgYmF1ZCk7CisgKiAgICAgIGludCAgTW94YVBvcnRTZXRUZXJtaW8oaW50IHBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvLCBzcGVlZF90IGJhdWQpOwogICogICAgICAgICAgIGludCBwb3J0ICAgICAgICAgICA6IHBvcnQgbnVtYmVyICgwIC0gMTI3KQotICogICAgICAgICAgIHN0cnVjdCB0ZXJtaW9zICogdGVybWlvIDogdGVybWlvIHN0cnVjdHVyZSBwb2ludGVyCisgKiAgICAgICAgICAgc3RydWN0IGt0ZXJtaW9zICogdGVybWlvIDogdGVybWlvIHN0cnVjdHVyZSBwb2ludGVyCiAgKgkgICAgIHNwZWVkX3QgYmF1ZAk6IGJhdWQgcmF0ZQogICoKICAqICAgICAgICAgICByZXR1cm46ICAgIC0xICAgICAgOiB0aGlzIHBvcnQgaXMgaW52YWxpZCBvciB0ZXJtaW8gPT0gTlVMTApAQCAtMjE5NSw3ICsyMTk3LDcgQEAKIAlyZXR1cm4gKGJhdWQpOwogfQogCi1pbnQgTW94YVBvcnRTZXRUZXJtaW8oaW50IHBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW8sIHNwZWVkX3QgYmF1ZCkKK2ludCBNb3hhUG9ydFNldFRlcm1pbyhpbnQgcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW8sIHNwZWVkX3QgYmF1ZCkKIHsKIAl2b2lkIF9faW9tZW0gKm9mc0FkZHI7CiAJdGNmbGFnX3QgY2ZsYWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXhzZXIuYyBiL2RyaXZlcnMvY2hhci9teHNlci5jCmluZGV4IDVlZDI0ODYuLjgzZjYwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9teHNlci5jCisrKyBiL2RyaXZlcnMvY2hhci9teHNlci5jCkBAIC0zMjgsOCArMzI4LDggQEAKIAlpbnQgeG1pdF90YWlsOwogCWludCB4bWl0X2NudDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHF1ZXVlOwotCXN0cnVjdCB0ZXJtaW9zIG5vcm1hbF90ZXJtaW9zOwotCXN0cnVjdCB0ZXJtaW9zIGNhbGxvdXRfdGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3Mgbm9ybWFsX3Rlcm1pb3M7CisJc3RydWN0IGt0ZXJtaW9zIGNhbGxvdXRfdGVybWlvczsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgY2xvc2Vfd2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsKQEAgLTM2NCw4ICszNjQsOCBAQAogc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpteHZhcl9zZHJpdmVyOwogc3RhdGljIHN0cnVjdCBteHNlcl9zdHJ1Y3QgbXh2YXJfdGFibGVbTVhTRVJfUE9SVFNdOwogc3RhdGljIHN0cnVjdCB0dHlfc3RydWN0ICpteHZhcl90dHlbTVhTRVJfUE9SVFMgKyAxXTsKLXN0YXRpYyBzdHJ1Y3QgdGVybWlvcyAqbXh2YXJfdGVybWlvc1tNWFNFUl9QT1JUUyArIDFdOwotc3RhdGljIHN0cnVjdCB0ZXJtaW9zICpteHZhcl90ZXJtaW9zX2xvY2tlZFtNWFNFUl9QT1JUUyArIDFdOworc3RhdGljIHN0cnVjdCBrdGVybWlvcyAqbXh2YXJfdGVybWlvc1tNWFNFUl9QT1JUUyArIDFdOworc3RhdGljIHN0cnVjdCBrdGVybWlvcyAqbXh2YXJfdGVybWlvc19sb2NrZWRbTVhTRVJfUE9SVFMgKyAxXTsKIHN0YXRpYyBzdHJ1Y3QgbXhzZXJfbG9nIG14dmFyX2xvZzsKIHN0YXRpYyBpbnQgbXh2YXJfZGlhZ2ZsYWc7CiBzdGF0aWMgdW5zaWduZWQgY2hhciBteHNlcl9tc3JbTVhTRVJfUE9SVFMgKyAxXTsKQEAgLTQwMiw3ICs0MDIsNyBAQAogc3RhdGljIGludCBteHNlcl9pb2N0bF9zcGVjaWFsKHVuc2lnbmVkIGludCwgdm9pZCBfX3VzZXIgKik7CiBzdGF0aWMgdm9pZCBteHNlcl90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIG14c2VyX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKik7Ci1zdGF0aWMgdm9pZCBteHNlcl9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgdGVybWlvcyAqKTsKK3N0YXRpYyB2b2lkIG14c2VyX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBrdGVybWlvcyAqKTsKIHN0YXRpYyB2b2lkIG14c2VyX3N0b3Aoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CiBzdGF0aWMgdm9pZCBteHNlcl9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIG14c2VyX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKQEAgLTQxNCw3ICs0MTQsNyBAQAogc3RhdGljIGludCBteHNlcl9ibG9ja190aWxfcmVhZHkoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwgc3RydWN0IG14c2VyX3N0cnVjdCAqKTsKIHN0YXRpYyBpbnQgbXhzZXJfc3RhcnR1cChzdHJ1Y3QgbXhzZXJfc3RydWN0ICopOwogc3RhdGljIHZvaWQgbXhzZXJfc2h1dGRvd24oc3RydWN0IG14c2VyX3N0cnVjdCAqKTsKLXN0YXRpYyBpbnQgbXhzZXJfY2hhbmdlX3NwZWVkKHN0cnVjdCBteHNlcl9zdHJ1Y3QgKiwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyBpbnQgbXhzZXJfY2hhbmdlX3NwZWVkKHN0cnVjdCBteHNlcl9zdHJ1Y3QgKiwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7CiBzdGF0aWMgaW50IG14c2VyX2dldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgbXhzZXJfc3RydWN0ICosIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKTsKIHN0YXRpYyBpbnQgbXhzZXJfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBteHNlcl9zdHJ1Y3QgKiwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopOwogc3RhdGljIGludCBteHNlcl9nZXRfbHNyX2luZm8oc3RydWN0IG14c2VyX3N0cnVjdCAqLCB1bnNpZ25lZCBpbnQgX191c2VyICopOwpAQCAtNTE1LDYgKzUxNSw3IEBACiAJCQlpZiAocGRldiAhPSBOVUxMKSB7CS8qIFBDSSAqLwogCQkJCXJlbGVhc2VfcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAyKSk7CiAJCQkJcmVsZWFzZV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDMpLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDMpKTsKKwkJCQlwY2lfZGV2X3B1dChwZGV2KTsKIAkJCX0gZWxzZSB7CiAJCQkJcmVsZWFzZV9yZWdpb24obXhzZXJjZmdbaV0uaW9hZGRyWzBdLCA4ICogbXhzZXJjZmdbaV0ucG9ydHMpOwogCQkJCXJlbGVhc2VfcmVnaW9uKG14c2VyY2ZnW2ldLnZlY3RvciwgMSk7CkBAIC01NTYsNyArNTU3LDcgQEAKIAluID0gYm9hcmQgKiBNWFNFUl9QT1JUU19QRVJfQk9BUkQ7CiAJaW5mbyA9ICZteHZhcl90YWJsZVtuXTsKIAkvKmlmICh2ZXJib3NlKSAqLyAgewotCQlwcmludGsoS0VSTl9ERUJVRyAiICAgICAgICB0dHlNJWQgLSB0dHlNJWQgIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICAgdHR5TUklZCAtIHR0eU1JJWQgIiwKIAkJCW4sIG4gKyBod2NvbmYtPnBvcnRzIC0gMSk7CiAJCXByaW50aygiIG1heC4gYmF1ZCByYXRlID0gJWQgYnBzLlxuIiwKIAkJCWh3Y29uZi0+TWF4Q2FuU2V0QmF1ZFJhdGVbMF0pOwpAQCAtNzE2LDggKzcxNyw5IEBACiAKIAkvKiBJbml0aWFsaXplIHRoZSB0dHlfZHJpdmVyIHN0cnVjdHVyZSAqLwogCW1lbXNldChteHZhcl9zZHJpdmVyLCAwLCBzaXplb2Yoc3RydWN0IHR0eV9kcml2ZXIpKTsKKwlteHZhcl9zZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCW14dmFyX3Nkcml2ZXItPm1hZ2ljID0gVFRZX0RSSVZFUl9NQUdJQzsKLQlteHZhcl9zZHJpdmVyLT5uYW1lID0gInR0eU0iOworCW14dmFyX3Nkcml2ZXItPm5hbWUgPSAidHR5TUkiOwogCW14dmFyX3Nkcml2ZXItPm1ham9yID0gdHR5bWFqb3I7CiAJbXh2YXJfc2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwOwogCW14dmFyX3Nkcml2ZXItPm51bSA9IE1YU0VSX1BPUlRTICsgMTsKQEAgLTcyNSw2ICs3MjcsOCBAQAogCW14dmFyX3Nkcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CiAJbXh2YXJfc2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwogCW14dmFyX3Nkcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDB8Q1M4fENSRUFEfEhVUENMfENMT0NBTDsKKwlteHZhcl9zZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOworCW14dmFyX3Nkcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAJbXh2YXJfc2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhteHZhcl9zZHJpdmVyLCAmbXhzZXJfb3BzKTsKIAlteHZhcl9zZHJpdmVyLT50dHlzID0gbXh2YXJfdHR5OwpAQCAtODM5LDkgKzg0Myw5IEBACiAJaW5kZXggPSAwOwogCWIgPSAwOwogCXdoaWxlIChiIDwgbikgewotCQlwZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKG14c2VyX3BjaWJyZHNbYl0udmVuZG9yLAorCQlwZGV2ID0gcGNpX2dldF9kZXZpY2UobXhzZXJfcGNpYnJkc1tiXS52ZW5kb3IsCiAJCQkJbXhzZXJfcGNpYnJkc1tiXS5kZXZpY2UsIHBkZXYpOwotCQkJaWYgKHBkZXYgPT0gTlVMTCkgeworCQlpZiAocGRldiA9PSBOVUxMKSB7CiAJCQliKys7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtODkzLDYgKzg5Nyw5IEBACiAJCQlpZiAobXhzZXJfaW5pdGJyZChtLCAmaHdjb25mKSA8IDApCiAJCQkJY29udGludWU7CiAJCQltKys7CisJCQkvKiBLZWVwIGFuIGV4dHJhIHJlZmVyZW5jZSBpZiB3ZSBzdWNjZWVkZWQuIEl0IHdpbGwKKwkJCSAgIGJlIHJldHVybmVkIGF0IHVubG9hZCB0aW1lICovCisJCQlwY2lfZGV2X2dldChwZGV2KTsKIAkJfQogCX0KICNlbmRpZgpAQCAtOTk0LDcgKzEwMDEsNyBAQAogCQlteHNlcl9jaGFuZ2Vfc3BlZWQoaW5mbywgTlVMTCk7CiAJfQogCi0JaW5mby0+c2Vzc2lvbiA9IGN1cnJlbnQtPnNpZ25hbC0+c2Vzc2lvbjsKKwlpbmZvLT5zZXNzaW9uID0gcHJvY2Vzc19zZXNzaW9uKGN1cnJlbnQpOwogCWluZm8tPnBncnAgPSBwcm9jZXNzX2dyb3VwKGN1cnJlbnQpOwogCiAJLyoKQEAgLTE3NDUsNyArMTc1Miw3IEBACiAJLyogTVhfVU5MT0NLKCZpbmZvLT5zbG9jayk7ICovCiB9CiAKLXN0YXRpYyB2b2lkIG14c2VyX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIG14c2VyX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IG14c2VyX3N0cnVjdCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI1MzcsNyArMjU0NCw3IEBACiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHNldCB0aGUgVUFSVCBkaXZpc29yIHJlZ2lzdGVycyB0byBtYXRjaAogICogdGhlIHNwZWNpZmllZCBiYXVkIHJhdGUgZm9yIGEgc2VyaWFsIHBvcnQuCiAgKi8KLXN0YXRpYyBpbnQgbXhzZXJfY2hhbmdlX3NwZWVkKHN0cnVjdCBteHNlcl9zdHJ1Y3QgKmluZm8sIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyBpbnQgbXhzZXJfY2hhbmdlX3NwZWVkKHN0cnVjdCBteHNlcl9zdHJ1Y3QgKmluZm8sIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJdW5zaWduZWQgY2ZsYWcsIGN2YWwsIGZjcjsKIAlpbnQgcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9teHNlcl9uZXcuYyBiL2RyaXZlcnMvY2hhci9teHNlcl9uZXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmIwMzBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL214c2VyX25ldy5jCkBAIC0wLDAgKzEsMjgxMyBAQAorLyoKKyAqICAgICAgICAgIG14c2VyLmMgIC0tIE1PWEEgU21hcnRpby9JbmR1c3RpbyBmYW1pbHkgbXVsdGlwb3J0IHNlcmlhbCBkcml2ZXIuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiAgTW94YSBUZWNobm9sb2dpZXMgKHN1cHBvcnRAbW94YS5jb20udHcpLgorICoJQ29weXJpZ2h0IChDKSAyMDA2ICAgICAgIEppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CisgKgorICogICAgICBUaGlzIGNvZGUgaXMgbG9vc2VseSBiYXNlZCBvbiB0aGUgMS44IG1veGEgZHJpdmVyIHdoaWNoIGlzIGJhc2VkIG9uCisgKglMaW51eCBzZXJpYWwgZHJpdmVyLCB3cml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzLCBUaGVvZG9yZSBUJ3NvIGFuZAorICoJb3RoZXJzLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglGZWQgdGhyb3VnaCBhIGNsZWFudXAsIGluZGVudCBhbmQgcmVtb3ZlIG9mIG5vbiAyLjYgY29kZSBieSBBbGFuIENveAorICoJPGFsYW5AcmVkaGF0LmNvbT4uIFRoZSBvcmlnaW5hbCAxLjggY29kZSBpcyBhdmFpbGFibGUgb24gd3d3Lm1veGEuY29tLgorICoJLSBGaXhlZCB4ODZfNjQgY2xlYW5uZXNzCisgKgktIEZpeGVkIHNsZWVwIHdpdGggc3BpbmxvY2sgaGVsZCBpbiBteHNlcl9zZW5kX2JyZWFrCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgIm14c2VyX25ldy5oIgorCisjZGVmaW5lCU1YU0VSX1ZFUlNJT04JIjIuMCIKKyNkZWZpbmUJTVhTRVJNQUpPUgkgMTc0CisjZGVmaW5lCU1YU0VSQ1VNQUpPUgkgMTc1CisKKyNkZWZpbmUJTVhTRVJfRVZFTlRfVFhMT1cJMQorCisjZGVmaW5lIE1YU0VSX0JPQVJEUwkJNAkvKiBNYXguIGJvYXJkcyAqLworI2RlZmluZSBNWFNFUl9QT1JUU19QRVJfQk9BUkQJOAkvKiBNYXguIHBvcnRzIHBlciBib2FyZCAqLworI2RlZmluZSBNWFNFUl9QT1JUUwkJKE1YU0VSX0JPQVJEUyAqIE1YU0VSX1BPUlRTX1BFUl9CT0FSRCkKKyNkZWZpbmUgTVhTRVJfSVNSX1BBU1NfTElNSVQJOTk5OTlMCisKKyNkZWZpbmUJTVhTRVJfRVJSX0lPQUREUgktMQorI2RlZmluZQlNWFNFUl9FUlJfSVJRCQktMgorI2RlZmluZQlNWFNFUl9FUlJfSVJRX0NPTkZMSVQJLTMKKyNkZWZpbmUJTVhTRVJfRVJSX1ZFQ1RPUgktNAorCisjZGVmaW5lIFdBS0VVUF9DSEFSUwkJMjU2CisKKyNkZWZpbmUgVUFSVF9NQ1JfQUZFCQkweDIwCisjZGVmaW5lIFVBUlRfTFNSX1NQRUNJQUwJMHgxRQorCisjZGVmaW5lIFJFTEVWQU5UX0lGTEFHKGlmbGFnKQkoaWZsYWcgJiAoSUdOQlJLfEJSS0lOVHxJR05QQVJ8UEFSTVJLfElOUENLfFwKKwkJCQkJICBJWE9OfElYT0ZGKSkKKworI2RlZmluZSBDMTY4X0FTSUNfSUQgICAgMQorI2RlZmluZSBDMTA0X0FTSUNfSUQgICAgMgorI2RlZmluZSBDMTAyX0FTSUNfSUQJMHhCCisjZGVmaW5lIENJMTMyX0FTSUNfSUQJNAorI2RlZmluZSBDSTEzNF9BU0lDX0lECTMKKyNkZWZpbmUgQ0kxMDRKX0FTSUNfSUQgIDUKKworI2RlZmluZSBNWFNFUl9ISUdIQkFVRAkxCisjZGVmaW5lIE1YU0VSX0hBUzIJMgorCisvKiBUaGlzIGlzIG9ubHkgZm9yIFBDSSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJaW50IHR5cGU7CisJaW50IHR4X2ZpZm87CisJaW50IHJ4X2ZpZm87CisJaW50IHhtaXRfZmlmb19zaXplOworCWludCByeF9oaWdoX3dhdGVyOworCWludCByeF90cmlnZ2VyOworCWludCByeF9sb3dfd2F0ZXI7CisJbG9uZyBtYXhfYmF1ZDsKK30gR3BjaV91YXJ0X2luZm9bXSA9IHsKKwl7TU9YQV9PVEhFUl9VQVJULCAxNiwgMTYsIDE2LCAxNCwgMTQsIDEsIDkyMTYwMEx9LAorCXtNT1hBX01VU1RfTVUxNTBfSFdJRCwgNjQsIDY0LCA2NCwgNDgsIDQ4LCAxNiwgMjMwNDAwTH0sCisJe01PWEFfTVVTVF9NVTg2MF9IV0lELCAxMjgsIDEyOCwgMTI4LCA5NiwgOTYsIDMyLCA5MjE2MDBMfQorfTsKKyNkZWZpbmUgVUFSVF9JTkZPX05VTQlBUlJBWV9TSVpFKEdwY2lfdWFydF9pbmZvKQorCitzdHJ1Y3QgbXhzZXJfY2FyZGluZm8geworCXVuc2lnbmVkIGludCBucG9ydHM7CisJY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG14c2VyX2NhcmRpbmZvIG14c2VyX2NhcmRzW10gPSB7CisJeyA4LCAiQzE2OCBzZXJpZXMiLCB9LAkJCS8qIEMxNjgtSVNBICovCisJeyA0LCAiQzEwNCBzZXJpZXMiLCB9LAkJCS8qIEMxMDQtSVNBICovCisJeyA0LCAiQ0ktMTA0SiBzZXJpZXMiLCB9LAkJLyogQ0kxMDRKICovCisJeyA4LCAiQzE2OEgvUENJIHNlcmllcyIsIH0sCQkvKiBDMTY4LVBDSSAqLworCXsgNCwgIkMxMDRIL1BDSSBzZXJpZXMiLCB9LAkJLyogQzEwNC1QQ0kgKi8KKwl7IDQsICJDMTAyIHNlcmllcyIsIE1YU0VSX0hBUzIgfSwJLyogQzEwMi1JU0EgKi8KKwl7IDQsICJDSS0xMzIgc2VyaWVzIiwgTVhTRVJfSEFTMiB9LAkvKiBDSTEzMiAqLworCXsgNCwgIkNJLTEzNCBzZXJpZXMiLCB9LAkJLyogQ0kxMzQgKi8KKwl7IDIsICJDUC0xMzIgc2VyaWVzIiwgfSwJCS8qIENQMTMyICovCisJeyA0LCAiQ1AtMTE0IHNlcmllcyIsIH0sCQkvKiBDUDExNCAqLworCXsgNCwgIkNULTExNCBzZXJpZXMiLCB9LAkJLyogQ1QxMTQgKi8KKwl7IDIsICJDUC0xMDIgc2VyaWVzIiwgTVhTRVJfSElHSEJBVUQgfSwJLyogQ1AxMDIgKi8KKwl7IDQsICJDUC0xMDRVIHNlcmllcyIsIH0sCQkvKiBDUDEwNFUgKi8KKwl7IDgsICJDUC0xNjhVIHNlcmllcyIsIH0sCQkvKiBDUDE2OFUgKi8KKwl7IDIsICJDUC0xMzJVIHNlcmllcyIsIH0sCQkvKiBDUDEzMlUgKi8KKwl7IDQsICJDUC0xMzRVIHNlcmllcyIsIH0sCQkvKiBDUDEzNFUgKi8KKwl7IDQsICJDUC0xMDRKVSBzZXJpZXMiLCB9LAkJLyogQ1AxMDRKVSAqLworCXsgOCwgIk1veGEgVUM3MDAwIFNlcmlhbCIsIH0sCQkvKiBSQzcwMDAgKi8KKwl7IDgsICJDUC0xMThVIHNlcmllcyIsIH0sCQkvKiBDUDExOFUgKi8KKwl7IDIsICJDUC0xMDJVTCBzZXJpZXMiLCB9LAkJLyogQ1AxMDJVTCAqLworCXsgMiwgIkNQLTEwMlUgc2VyaWVzIiwgfSwJCS8qIENQMTAyVSAqLworCXsgOCwgIkNQLTExOEVMIHNlcmllcyIsIH0sCQkvKiBDUDExOEVMICovCisJeyA4LCAiQ1AtMTY4RUwgc2VyaWVzIiwgfSwJCS8qIENQMTY4RUwgKi8KKwl7IDQsICJDUC0xMDRFTCBzZXJpZXMiLCB9CQkvKiBDUDEwNEVMICovCit9OworCisvKiBkcml2ZXJfZGF0YSBjb3JyZXNwb25kIHRvIHRoZSBsaW5lcyBpbiB0aGUgc3RydWN0dXJlIGFib3ZlCisgICBzZWUgYWxzbyBJU0EgcHJvYmUgZnVuY3Rpb24gYmVmb3JlIHlvdSBjaGFuZ2Ugc29tZXRoaW5nICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXhzZXJfcGNpYnJkc1tdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DMTY4KSwKKwkJLmRyaXZlcl9kYXRhID0gMyB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DMTA0KSwKKwkJLmRyaXZlcl9kYXRhID0gNCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzMiksCisJCS5kcml2ZXJfZGF0YSA9IDggfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMTQpLAorCQkuZHJpdmVyX2RhdGEgPSA5IH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NUMTE0KSwKKwkJLmRyaXZlcl9kYXRhID0gMTAgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDIpLAorCQkuZHJpdmVyX2RhdGEgPSAxMSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwNFUpLAorCQkuZHJpdmVyX2RhdGEgPSAxMiB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDE2OFUpLAorCQkuZHJpdmVyX2RhdGEgPSAxMyB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzMlUpLAorCQkuZHJpdmVyX2RhdGEgPSAxNCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzNFUpLAorCQkuZHJpdmVyX2RhdGEgPSAxNSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwNEpVKSwKKwkJLmRyaXZlcl9kYXRhID0gMTYgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfUkM3MDAwKSwKKwkJLmRyaXZlcl9kYXRhID0gMTcgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMThVKSwKKwkJLmRyaXZlcl9kYXRhID0gMTggfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDJVTCksCisJCS5kcml2ZXJfZGF0YSA9IDE5IH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NQMTAyVSksCisJCS5kcml2ZXJfZGF0YSA9IDIwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NQMTE4RUwpLAorCQkuZHJpdmVyX2RhdGEgPSAyMSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDE2OEVMKSwKKwkJLmRyaXZlcl9kYXRhID0gMjIgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDRFTCksCisJCS5kcml2ZXJfZGF0YSA9IDIzIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG14c2VyX3BjaWJyZHMpOworCitzdGF0aWMgaW50IGlvYWRkcltNWFNFUl9CT0FSRFNdID0geyAwLCAwLCAwLCAwIH07CitzdGF0aWMgaW50IHR0eW1ham9yID0gTVhTRVJNQUpPUjsKK3N0YXRpYyBpbnQgY2FsbG91dG1ham9yID0gTVhTRVJDVU1BSk9SOworCisvKiBWYXJpYWJsZXMgZm9yIGluc21vZCAqLworCitNT0RVTEVfQVVUSE9SKCJDYXNwZXIgWWFuZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNT1hBIFNtYXJ0aW8vSW5kdXN0aW8gRmFtaWx5IE11bHRpcG9ydCBCb2FyZCBEZXZpY2UgRHJpdmVyIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaW9hZGRyLCBpbnQsIE5VTEwsIDApOworbW9kdWxlX3BhcmFtKHR0eW1ham9yLCBpbnQsIDApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdHJ1Y3QgbXhzZXJfbG9nIHsKKwlpbnQgdGljazsKKwl1bnNpZ25lZCBsb25nIHJ4Y250W01YU0VSX1BPUlRTXTsKKwl1bnNpZ25lZCBsb25nIHR4Y250W01YU0VSX1BPUlRTXTsKK307CisKKworc3RydWN0IG14c2VyX21vbiB7CisJdW5zaWduZWQgbG9uZyByeGNudDsKKwl1bnNpZ25lZCBsb25nIHR4Y250OworCXVuc2lnbmVkIGxvbmcgdXBfcnhjbnQ7CisJdW5zaWduZWQgbG9uZyB1cF90eGNudDsKKwlpbnQgbW9kZW1fc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgaG9sZF9yZWFzb247Cit9OworCitzdHJ1Y3QgbXhzZXJfbW9uX2V4dCB7CisJdW5zaWduZWQgbG9uZyByeF9jbnRbMzJdOworCXVuc2lnbmVkIGxvbmcgdHhfY250WzMyXTsKKwl1bnNpZ25lZCBsb25nIHVwX3J4Y250WzMyXTsKKwl1bnNpZ25lZCBsb25nIHVwX3R4Y250WzMyXTsKKwlpbnQgbW9kZW1fc3RhdHVzWzMyXTsKKworCWxvbmcgYmF1ZHJhdGVbMzJdOworCWludCBkYXRhYml0c1szMl07CisJaW50IHN0b3BiaXRzWzMyXTsKKwlpbnQgcGFyaXR5WzMyXTsKKwlpbnQgZmxvd2N0cmxbMzJdOworCWludCBmaWZvWzMyXTsKKwlpbnQgaWZ0eXBlWzMyXTsKK307CisKK3N0cnVjdCBteHNlcl9ib2FyZDsKKworc3RydWN0IG14c2VyX3BvcnQgeworCXN0cnVjdCBteHNlcl9ib2FyZCAqYm9hcmQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCXVuc2lnbmVkIGxvbmcgaW9hZGRyOworCXVuc2lnbmVkIGxvbmcgb3Btb2RlX2lvYWRkcjsKKwlpbnQgbWF4X2JhdWQ7CisKKwlpbnQgcnhfaGlnaF93YXRlcjsKKwlpbnQgcnhfdHJpZ2dlcjsJCS8qIFJ4IGZpZm8gdHJpZ2dlciBsZXZlbCAqLworCWludCByeF9sb3dfd2F0ZXI7CisJaW50IGJhdWRfYmFzZTsJCS8qIG1heC4gc3BlZWQgKi8KKwlsb25nIHJlYWxiYXVkOworCWludCB0eXBlOwkJLyogVUFSVCB0eXBlICovCisJaW50IGZsYWdzOwkJLyogZGVmaW5lZCBpbiB0dHkuaCAqLworCWxvbmcgc2Vzc2lvbjsJCS8qIFNlc3Npb24gb2Ygb3BlbmluZyBwcm9jZXNzICovCisJbG9uZyBwZ3JwOwkJLyogcGdycCBvZiBvcGVuaW5nIHByb2Nlc3MgKi8KKworCWludCB4X2NoYXI7CQkvKiB4b24veG9mZiBjaGFyYWN0ZXIgKi8KKwlpbnQgSUVSOwkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworCWludCBNQ1I7CQkvKiBNb2RlbSBjb250cm9sIHJlZ2lzdGVyICovCisKKwl1bnNpZ25lZCBjaGFyIHN0b3Bfcng7CisJdW5zaWduZWQgY2hhciBsZGlzY19zdG9wX3J4OworCisJaW50IGN1c3RvbV9kaXZpc29yOworCWludCBjbG9zZV9kZWxheTsKKwl1bnNpZ25lZCBzaG9ydCBjbG9zaW5nX3dhaXQ7CisJdW5zaWduZWQgY2hhciBlcnJfc2hhZG93OworCXVuc2lnbmVkIGxvbmcgZXZlbnQ7CisKKwlpbnQgY291bnQ7CQkvKiAjIG9mIGZkIG9uIGRldmljZSAqLworCWludCBibG9ja2VkX29wZW47CS8qICMgb2YgYmxvY2tlZCBvcGVucyAqLworCXN0cnVjdCBhc3luY19pY291bnQgaWNvdW50OyAvKiBrZXJuZWwgY291bnRlcnMgZm9yIDQgaW5wdXQgaW50ZXJydXB0cyAqLworCWludCB0aW1lb3V0OworCisJaW50IHJlYWRfc3RhdHVzX21hc2s7CisJaW50IGlnbm9yZV9zdGF0dXNfbWFzazsKKwlpbnQgeG1pdF9maWZvX3NpemU7CisJdW5zaWduZWQgY2hhciAqeG1pdF9idWY7CisJaW50IHhtaXRfaGVhZDsKKwlpbnQgeG1pdF90YWlsOworCWludCB4bWl0X2NudDsKKworCXN0cnVjdCBrdGVybWlvcyBub3JtYWxfdGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3MgY2FsbG91dF90ZXJtaW9zOworCisJc3RydWN0IG14c2VyX21vbiBtb25fZGF0YTsKKworCXNwaW5sb2NrX3Qgc2xvY2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHRxdWV1ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgY2xvc2Vfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsKK307CisKK3N0cnVjdCBteHNlcl9ib2FyZCB7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgaXJxOworCWNvbnN0IHN0cnVjdCBteHNlcl9jYXJkaW5mbyAqaW5mbzsKKwl1bnNpZ25lZCBsb25nIHZlY3RvcjsKKwl1bnNpZ25lZCBsb25nIHZlY3Rvcl9tYXNrOworCisJaW50IGNoaXBfZmxhZzsKKwlpbnQgdWFydF90eXBlOworCisJc3RydWN0IG14c2VyX3BvcnQgcG9ydHNbTVhTRVJfUE9SVFNfUEVSX0JPQVJEXTsKK307CisKK3N0cnVjdCBteHNlcl9tc3RhdHVzIHsKKwl0Y2ZsYWdfdCBjZmxhZzsKKwlpbnQgY3RzOworCWludCBkc3I7CisJaW50IHJpOworCWludCBkY2Q7Cit9OworCitzdGF0aWMgc3RydWN0IG14c2VyX21zdGF0dXMgR01TdGF0dXNbTVhTRVJfUE9SVFNdOworCitzdGF0aWMgaW50IG14c2VyQm9hcmRDQVBbTVhTRVJfQk9BUkRTXSA9IHsKKwkwLCAwLCAwLCAwCisJLyogIDB4MTgwLCAweDI4MCwgMHgyMDAsIDB4MzIwICovCit9OworCitzdGF0aWMgc3RydWN0IG14c2VyX2JvYXJkIG14c2VyX2JvYXJkc1tNWFNFUl9CT0FSRFNdOworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpteHZhcl9zZHJpdmVyOworc3RhdGljIHN0cnVjdCBteHNlcl9sb2cgbXh2YXJfbG9nOworc3RhdGljIGludCBteHZhcl9kaWFnZmxhZzsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG14c2VyX21zcltNWFNFUl9QT1JUUyArIDFdOworc3RhdGljIHN0cnVjdCBteHNlcl9tb25fZXh0IG1vbl9kYXRhX2V4dDsKK3N0YXRpYyBpbnQgbXhzZXJfc2V0X2JhdWRfbWV0aG9kW01YU0VSX1BPUlRTICsgMV07CitzdGF0aWMgc3BpbmxvY2tfdCBnbV9sb2NrOworCisjaWZkZWYgQ09ORklHX1BDSQorc3RhdGljIGludCBDaGVja0lzTW94YU11c3QoaW50IGlvKQoreworCXU4IG9sZG1jciwgaHdpZDsKKwlpbnQgaTsKKworCW91dGIoMCwgaW8gKyBVQVJUX0xDUik7CisJRElTQUJMRV9NT1hBX01VU1RfRU5DSEFOQ0VfTU9ERShpbyk7CisJb2xkbWNyID0gaW5iKGlvICsgVUFSVF9NQ1IpOworCW91dGIoMCwgaW8gKyBVQVJUX01DUik7CisJU0VUX01PWEFfTVVTVF9YT04xX1ZBTFVFKGlvLCAweDExKTsKKwlpZiAoKGh3aWQgPSBpbmIoaW8gKyBVQVJUX01DUikpICE9IDApIHsKKwkJb3V0YihvbGRtY3IsIGlvICsgVUFSVF9NQ1IpOworCQlyZXR1cm4gTU9YQV9PVEhFUl9VQVJUOworCX0KKworCUdFVF9NT1hBX01VU1RfSEFSRFdBUkVfSUQoaW8sICZod2lkKTsKKwlmb3IgKGkgPSAxOyBpIDwgVUFSVF9JTkZPX05VTTsgaSsrKSB7IC8qIDAgPSBPVEhFUl9VQVJUICovCisJCWlmIChod2lkID09IEdwY2lfdWFydF9pbmZvW2ldLnR5cGUpCisJCQlyZXR1cm4gKGludClod2lkOworCX0KKwlyZXR1cm4gTU9YQV9PVEhFUl9VQVJUOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfdHhyeF9maWZvKHN0cnVjdCBteHNlcl9wb3J0ICppbmZvKQoreworCWludCBpOworCisJaWYgKChpbmZvLT50eXBlID09IFBPUlRfMTY0NTApIHx8IChpbmZvLT50eXBlID09IFBPUlRfODI1MCkpIHsKKwkJaW5mby0+cnhfdHJpZ2dlciA9IDE7CisJCWluZm8tPnJ4X2hpZ2hfd2F0ZXIgPSAxOworCQlpbmZvLT5yeF9sb3dfd2F0ZXIgPSAxOworCQlpbmZvLT54bWl0X2ZpZm9fc2l6ZSA9IDE7CisJfSBlbHNlCisJCWZvciAoaSA9IDA7IGkgPCBVQVJUX0lORk9fTlVNOyBpKyspCisJCQlpZiAoaW5mby0+Ym9hcmQtPmNoaXBfZmxhZyA9PSBHcGNpX3VhcnRfaW5mb1tpXS50eXBlKSB7CisJCQkJaW5mby0+cnhfdHJpZ2dlciA9IEdwY2lfdWFydF9pbmZvW2ldLnJ4X3RyaWdnZXI7CisJCQkJaW5mby0+cnhfbG93X3dhdGVyID0gR3BjaV91YXJ0X2luZm9baV0ucnhfbG93X3dhdGVyOworCQkJCWluZm8tPnJ4X2hpZ2hfd2F0ZXIgPSBHcGNpX3VhcnRfaW5mb1tpXS5yeF9oaWdoX3dhdGVyOworCQkJCWluZm8tPnhtaXRfZmlmb19zaXplID0gR3BjaV91YXJ0X2luZm9baV0ueG1pdF9maWZvX3NpemU7CisJCQkJYnJlYWs7CisJCQl9Cit9CisKK3N0YXRpYyB2b2lkIG14c2VyX2RvX3NvZnRpbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteHNlcl9wb3J0LCB0cXVldWUpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1YU0VSX0VWRU5UX1RYTE9XLCAmaW5mby0+ZXZlbnQpKQorCQl0dHlfd2FrZXVwKHR0eSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG14c2VyX2dldF9tc3IoaW50IGJhc2VhZGRyLCBpbnQgbW9kZSwgaW50IHBvcnQpCit7CisJdW5zaWduZWQgY2hhciBzdGF0dXMgPSAwOworCisJc3RhdHVzID0gaW5iKGJhc2VhZGRyICsgVUFSVF9NU1IpOworCisJbXhzZXJfbXNyW3BvcnRdICY9IDB4MEY7CisJbXhzZXJfbXNyW3BvcnRdIHw9IHN0YXR1czsKKwlzdGF0dXMgPSBteHNlcl9tc3JbcG9ydF07CisJaWYgKG1vZGUpCisJCW14c2VyX21zcltwb3J0XSA9IDA7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IG14c2VyX2Jsb2NrX3RpbF9yZWFkeShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJc3RydWN0IG14c2VyX3BvcnQgKnBvcnQpCit7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJaW50IHJldHZhbDsKKwlpbnQgZG9fY2xvY2FsID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBJZiBub24tYmxvY2tpbmcgbW9kZSBpcyBzZXQsIG9yIHRoZSBwb3J0IGlzIG5vdCBlbmFibGVkLAorCSAqIHRoZW4gbWFrZSB0aGUgY2hlY2sgdXAgZnJvbnQgYW5kIHRoZW4gZXhpdC4KKwkgKi8KKwlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAorCQkJdGVzdF9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncykpIHsKKwkJcG9ydC0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkKKwkJZG9fY2xvY2FsID0gMTsKKworCS8qCisJICogQmxvY2sgd2FpdGluZyBmb3IgdGhlIGNhcnJpZXIgZGV0ZWN0IGFuZCB0aGUgbGluZSB0byBiZWNvbWUKKwkgKiBmcmVlIChpLmUuLCBub3QgaW4gdXNlIGJ5IHRoZSBjYWxsb3V0KS4gIFdoaWxlIHdlIGFyZSBpbgorCSAqIHRoaXMgbG9vcCwgcG9ydC0+Y291bnQgaXMgZHJvcHBlZCBieSBvbmUsIHNvIHRoYXQKKwkgKiBteHNlcl9jbG9zZSgpIGtub3dzIHdoZW4gdG8gZnJlZSB0aGluZ3MuICBXZSByZXN0b3JlIGl0IHVwb24KKwkgKiBleGl0LCBlaXRoZXIgbm9ybWFsIG9yIGFibm9ybWFsLgorCSAqLworCXJldHZhbCA9IDA7CisJYWRkX3dhaXRfcXVldWUoJnBvcnQtPm9wZW5fd2FpdCwgJndhaXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnNsb2NrLCBmbGFncyk7CisJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKQorCQlwb3J0LT5jb3VudC0tOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnNsb2NrLCBmbGFncyk7CisJcG9ydC0+YmxvY2tlZF9vcGVuKys7CisJd2hpbGUgKDEpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnNsb2NrLCBmbGFncyk7CisJCW91dGIoaW5iKHBvcnQtPmlvYWRkciArIFVBUlRfTUNSKSB8CisJCQlVQVJUX01DUl9EVFIgfCBVQVJUX01DUl9SVFMsIHBvcnQtPmlvYWRkciArIFVBUlRfTUNSKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+c2xvY2ssIGZsYWdzKTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgIShwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgeworCQkJaWYgKHBvcnQtPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKKwkJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJZWxzZQorCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJCWJyZWFrOworCQl9CisJCWlmICghKHBvcnQtPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgJiYKKwkJCQkoZG9fY2xvY2FsIHx8CisJCQkJKGluYihwb3J0LT5pb2FkZHIgKyBVQVJUX01TUikgJiBVQVJUX01TUl9EQ0QpKSkKKwkJCWJyZWFrOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJCWJyZWFrOworCQl9CisJCXNjaGVkdWxlKCk7CisJfQorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBvcnQtPm9wZW5fd2FpdCwgJndhaXQpOworCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKKwkJcG9ydC0+Y291bnQrKzsKKwlwb3J0LT5ibG9ja2VkX29wZW4tLTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXBvcnQtPmZsYWdzIHw9IEFTWU5DX05PUk1BTF9BQ1RJVkU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXhzZXJfc2V0X2JhdWQoc3RydWN0IG14c2VyX3BvcnQgKmluZm8sIGxvbmcgbmV3c3BkKQoreworCWludCBxdW90ID0gMDsKKwl1bnNpZ25lZCBjaGFyIGN2YWw7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghaW5mby0+dHR5IHx8ICFpbmZvLT50dHktPnRlcm1pb3MpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIShpbmZvLT5pb2FkZHIpKQorCQlyZXR1cm4gcmV0OworCisJaWYgKG5ld3NwZCA+IGluZm8tPm1heF9iYXVkKQorCQlyZXR1cm4gMDsKKworCWluZm8tPnJlYWxiYXVkID0gbmV3c3BkOworCWlmIChuZXdzcGQgPT0gMTM0KSB7CisJCXF1b3QgPSAoMiAqIGluZm8tPmJhdWRfYmFzZSAvIDI2OSk7CisJfSBlbHNlIGlmIChuZXdzcGQpIHsKKwkJcXVvdCA9IGluZm8tPmJhdWRfYmFzZSAvIG5ld3NwZDsKKwkJaWYgKHF1b3QgPT0gMCkKKwkJCXF1b3QgPSAxOworCX0gZWxzZSB7CisJCXF1b3QgPSAwOworCX0KKworCWluZm8tPnRpbWVvdXQgPSAoKGluZm8tPnhtaXRfZmlmb19zaXplICogSFogKiAxMCAqIHF1b3QpIC8gaW5mby0+YmF1ZF9iYXNlKTsKKwlpbmZvLT50aW1lb3V0ICs9IEhaIC8gNTA7CS8qIEFkZCAuMDIgc2Vjb25kcyBvZiBzbG9wICovCisKKwlpZiAocXVvdCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkJaW5mby0+TUNSIHw9IFVBUlRfTUNSX0RUUjsKKwkJb3V0YihpbmZvLT5NQ1IsIGluZm8tPmlvYWRkciArIFVBUlRfTUNSKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkJaW5mby0+TUNSICY9IH5VQVJUX01DUl9EVFI7CisJCW91dGIoaW5mby0+TUNSLCBpbmZvLT5pb2FkZHIgKyBVQVJUX01DUik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJCXJldHVybiByZXQ7CisJfQorCisJY3ZhbCA9IGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUik7CisKKwlvdXRiKGN2YWwgfCBVQVJUX0xDUl9ETEFCLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUik7CS8qIHNldCBETEFCICovCisKKwlvdXRiKHF1b3QgJiAweGZmLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0RMTCk7CS8qIExTIG9mIGRpdmlzb3IgKi8KKwlvdXRiKHF1b3QgPj4gOCwgaW5mby0+aW9hZGRyICsgVUFSVF9ETE0pOwkvKiBNUyBvZiBkaXZpc29yICovCisJb3V0YihjdmFsLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUik7CS8qIHJlc2V0IERMQUIgKi8KKworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gc2V0IHRoZSBVQVJUIGRpdmlzb3IgcmVnaXN0ZXJzIHRvIG1hdGNoCisgKiB0aGUgc3BlY2lmaWVkIGJhdWQgcmF0ZSBmb3IgYSBzZXJpYWwgcG9ydC4KKyAqLworc3RhdGljIGludCBteHNlcl9jaGFuZ2Vfc3BlZWQoc3RydWN0IG14c2VyX3BvcnQgKmluZm8sCisJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJdW5zaWduZWQgY2ZsYWcsIGN2YWwsIGZjcjsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlsb25nIGJhdWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghaW5mby0+dHR5IHx8ICFpbmZvLT50dHktPnRlcm1pb3MpCisJCXJldHVybiByZXQ7CisJY2ZsYWcgPSBpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJaWYgKCEoaW5mby0+aW9hZGRyKSkKKwkJcmV0dXJuIHJldDsKKworCWlmIChteHNlcl9zZXRfYmF1ZF9tZXRob2RbaW5mby0+dHR5LT5pbmRleF0gPT0gMCkgeworCQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUoaW5mby0+dHR5KTsKKwkJbXhzZXJfc2V0X2JhdWQoaW5mbywgYmF1ZCk7CisJfQorCisJLyogYnl0ZSBzaXplIGFuZCBwYXJpdHkgKi8KKwlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwljYXNlIENTNToKKwkJY3ZhbCA9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgQ1M2OgorCQljdmFsID0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCWN2YWwgPSAweDAyOworCQlicmVhazsKKwljYXNlIENTODoKKwkJY3ZhbCA9IDB4MDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWN2YWwgPSAweDAwOworCQlicmVhazsJCS8qIHRvbyBrZWVwIEdDQyBzaHV0Li4uICovCisJfQorCWlmIChjZmxhZyAmIENTVE9QQikKKwkJY3ZhbCB8PSAweDA0OworCWlmIChjZmxhZyAmIFBBUkVOQikKKwkJY3ZhbCB8PSBVQVJUX0xDUl9QQVJJVFk7CisJaWYgKCEoY2ZsYWcgJiBQQVJPREQpKQorCQljdmFsIHw9IFVBUlRfTENSX0VQQVI7CisJaWYgKGNmbGFnICYgQ01TUEFSKQorCQljdmFsIHw9IFVBUlRfTENSX1NQQVI7CisKKwlpZiAoKGluZm8tPnR5cGUgPT0gUE9SVF84MjUwKSB8fCAoaW5mby0+dHlwZSA9PSBQT1JUXzE2NDUwKSkgeworCQlpZiAoaW5mby0+Ym9hcmQtPmNoaXBfZmxhZykgeworCQkJZmNyID0gVUFSVF9GQ1JfRU5BQkxFX0ZJRk87CisJCQlmY3IgfD0gTU9YQV9NVVNUX0ZDUl9HREFfTU9ERV9FTkFCTEU7CisJCQlTRVRfTU9YQV9NVVNUX0ZJRk9fVkFMVUUoaW5mbyk7CisJCX0gZWxzZQorCQkJZmNyID0gMDsKKwl9IGVsc2UgeworCQlmY3IgPSBVQVJUX0ZDUl9FTkFCTEVfRklGTzsKKwkJaWYgKGluZm8tPmJvYXJkLT5jaGlwX2ZsYWcpIHsKKwkJCWZjciB8PSBNT1hBX01VU1RfRkNSX0dEQV9NT0RFX0VOQUJMRTsKKwkJCVNFVF9NT1hBX01VU1RfRklGT19WQUxVRShpbmZvKTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoaW5mby0+cnhfdHJpZ2dlcikgeworCQkJY2FzZSAxOgorCQkJCWZjciB8PSBVQVJUX0ZDUl9UUklHR0VSXzE7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ6CisJCQkJZmNyIHw9IFVBUlRfRkNSX1RSSUdHRVJfNDsKKwkJCQlicmVhazsKKwkJCWNhc2UgODoKKwkJCQlmY3IgfD0gVUFSVF9GQ1JfVFJJR0dFUl84OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlmY3IgfD0gVUFSVF9GQ1JfVFJJR0dFUl8xNDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qIENUUyBmbG93IGNvbnRyb2wgZmxhZyBhbmQgbW9kZW0gc3RhdHVzIGludGVycnVwdHMgKi8KKwlpbmZvLT5JRVIgJj0gflVBUlRfSUVSX01TSTsKKwlpbmZvLT5NQ1IgJj0gflVBUlRfTUNSX0FGRTsKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NUU19GTE9XOworCQlpbmZvLT5JRVIgfD0gVUFSVF9JRVJfTVNJOworCQlpZiAoKGluZm8tPnR5cGUgPT0gUE9SVF8xNjU1MEEpIHx8IChpbmZvLT5ib2FyZC0+Y2hpcF9mbGFnKSkgeworCQkJaW5mby0+TUNSIHw9IFVBUlRfTUNSX0FGRTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX01TUik7CisJCQlpZiAoaW5mby0+dHR5LT5od19zdG9wcGVkKSB7CisJCQkJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0NUUykgeworCQkJCQlpbmZvLT50dHktPmh3X3N0b3BwZWQgPSAwOworCQkJCQlpZiAoaW5mby0+dHlwZSAhPSBQT1JUXzE2NTUwQSAmJgorCQkJCQkJCSFpbmZvLT5ib2FyZC0+Y2hpcF9mbGFnKSB7CisJCQkJCQlvdXRiKGluZm8tPklFUiAmIH5VQVJUX0lFUl9USFJJLAorCQkJCQkJCWluZm8tPmlvYWRkciArCisJCQkJCQkJVUFSVF9JRVIpOworCQkJCQkJaW5mby0+SUVSIHw9IFVBUlRfSUVSX1RIUkk7CisJCQkJCQlvdXRiKGluZm8tPklFUiwgaW5mby0+aW9hZGRyICsKKwkJCQkJCQkJVUFSVF9JRVIpOworCQkJCQl9CisJCQkJCXNldF9iaXQoTVhTRVJfRVZFTlRfVFhMT1csICZpbmZvLT5ldmVudCk7CisJCQkJCXNjaGVkdWxlX3dvcmsoJmluZm8tPnRxdWV1ZSk7CQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKCEoc3RhdHVzICYgVUFSVF9NU1JfQ1RTKSkgeworCQkJCQlpbmZvLT50dHktPmh3X3N0b3BwZWQgPSAxOworCQkJCQlpZiAoKGluZm8tPnR5cGUgIT0gUE9SVF8xNjU1MEEpICYmCisJCQkJCQkJKCFpbmZvLT5ib2FyZC0+Y2hpcF9mbGFnKSkgeworCQkJCQkJaW5mby0+SUVSICY9IH5VQVJUX0lFUl9USFJJOworCQkJCQkJb3V0YihpbmZvLT5JRVIsIGluZm8tPmlvYWRkciArCisJCQkJCQkJCVVBUlRfSUVSKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWluZm8tPmZsYWdzICY9IH5BU1lOQ19DVFNfRkxPVzsKKwl9CisJb3V0YihpbmZvLT5NQ1IsIGluZm8tPmlvYWRkciArIFVBUlRfTUNSKTsKKwlpZiAoY2ZsYWcgJiBDTE9DQUwpIHsKKwkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOworCX0gZWxzZSB7CisJCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NIRUNLX0NEOworCQlpbmZvLT5JRVIgfD0gVUFSVF9JRVJfTVNJOworCX0KKwlvdXRiKGluZm8tPklFUiwgaW5mby0+aW9hZGRyICsgVUFSVF9JRVIpOworCisJLyoKKwkgKiBTZXQgdXAgcGFyaXR5IGNoZWNrIGZsYWcKKwkgKi8KKwlpbmZvLT5yZWFkX3N0YXR1c19tYXNrID0gVUFSVF9MU1JfT0UgfCBVQVJUX0xTUl9USFJFIHwgVUFSVF9MU1JfRFI7CisJaWYgKElfSU5QQ0soaW5mby0+dHR5KSkKKwkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayB8PSBVQVJUX0xTUl9GRSB8IFVBUlRfTFNSX1BFOworCWlmIChJX0JSS0lOVChpbmZvLT50dHkpIHx8IElfUEFSTVJLKGluZm8tPnR0eSkpCisJCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9MU1JfQkk7CisKKwlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgPSAwOworCisJaWYgKElfSUdOQlJLKGluZm8tPnR0eSkpIHsKKwkJaW5mby0+aWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX0JJOworCQlpbmZvLT5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX0JJOworCQkvKgorCQkgKiBJZiB3ZSdyZSBpZ25vcmUgcGFyaXR5IGFuZCBicmVhayBpbmRpY2F0b3JzLCBpZ25vcmUKKwkJICogb3ZlcnJ1bnMgdG9vLiAgKEZvciByZWFsIHJhdyBzdXBwb3J0KS4KKwkJICovCisJCWlmIChJX0lHTlBBUihpbmZvLT50dHkpKSB7CisJCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgfD0KKwkJCQkJCVVBUlRfTFNSX09FIHwKKwkJCQkJCVVBUlRfTFNSX1BFIHwKKwkJCQkJCVVBUlRfTFNSX0ZFOworCQkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayB8PQorCQkJCQkJVUFSVF9MU1JfT0UgfAorCQkJCQkJVUFSVF9MU1JfUEUgfAorCQkJCQkJVUFSVF9MU1JfRkU7CisJCX0KKwl9CisJaWYgKGluZm8tPmJvYXJkLT5jaGlwX2ZsYWcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJCVNFVF9NT1hBX01VU1RfWE9OMV9WQUxVRShpbmZvLT5pb2FkZHIsIFNUQVJUX0NIQVIoaW5mby0+dHR5KSk7CisJCVNFVF9NT1hBX01VU1RfWE9GRjFfVkFMVUUoaW5mby0+aW9hZGRyLCBTVE9QX0NIQVIoaW5mby0+dHR5KSk7CisJCWlmIChJX0lYT04oaW5mby0+dHR5KSkgeworCQkJRU5BQkxFX01PWEFfTVVTVF9SWF9TT0ZUV0FSRV9GTE9XX0NPTlRST0woaW5mby0+aW9hZGRyKTsKKwkJfSBlbHNlIHsKKwkJCURJU0FCTEVfTU9YQV9NVVNUX1JYX1NPRlRXQVJFX0ZMT1dfQ09OVFJPTChpbmZvLT5pb2FkZHIpOworCQl9CisJCWlmIChJX0lYT0ZGKGluZm8tPnR0eSkpIHsKKwkJCUVOQUJMRV9NT1hBX01VU1RfVFhfU09GVFdBUkVfRkxPV19DT05UUk9MKGluZm8tPmlvYWRkcik7CisJCX0gZWxzZSB7CisJCQlESVNBQkxFX01PWEFfTVVTVF9UWF9TT0ZUV0FSRV9GTE9XX0NPTlRST0woaW5mby0+aW9hZGRyKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCX0KKworCisJb3V0YihmY3IsIGluZm8tPmlvYWRkciArIFVBUlRfRkNSKTsJLyogc2V0IGZjciAqLworCW91dGIoY3ZhbCwgaW5mby0+aW9hZGRyICsgVUFSVF9MQ1IpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXhzZXJfY2hlY2tfbW9kZW1fc3RhdHVzKHN0cnVjdCBteHNlcl9wb3J0ICpwb3J0LCBpbnQgc3RhdHVzKQoreworCS8qIHVwZGF0ZSBpbnB1dCBsaW5lIGNvdW50ZXJzICovCisJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX1RFUkkpCisJCXBvcnQtPmljb3VudC5ybmcrKzsKKwlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRERTUikKKwkJcG9ydC0+aWNvdW50LmRzcisrOworCWlmIChzdGF0dXMgJiBVQVJUX01TUl9ERENEKQorCQlwb3J0LT5pY291bnQuZGNkKys7CisJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0RDVFMpCisJCXBvcnQtPmljb3VudC5jdHMrKzsKKwlwb3J0LT5tb25fZGF0YS5tb2RlbV9zdGF0dXMgPSBzdGF0dXM7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisKKwlpZiAoKHBvcnQtPmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpICYmIChzdGF0dXMgJiBVQVJUX01TUl9ERENEKSkgeworCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRENEKQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCQlzY2hlZHVsZV93b3JrKCZwb3J0LT50cXVldWUpOworCX0KKworCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSB7CisJCWlmIChwb3J0LT50dHktPmh3X3N0b3BwZWQpIHsKKwkJCWlmIChzdGF0dXMgJiBVQVJUX01TUl9DVFMpIHsKKwkJCQlwb3J0LT50dHktPmh3X3N0b3BwZWQgPSAwOworCisJCQkJaWYgKChwb3J0LT50eXBlICE9IFBPUlRfMTY1NTBBKSAmJgorCQkJCQkJKCFwb3J0LT5ib2FyZC0+Y2hpcF9mbGFnKSkgeworCQkJCQlvdXRiKHBvcnQtPklFUiAmIH5VQVJUX0lFUl9USFJJLAorCQkJCQkJcG9ydC0+aW9hZGRyICsgVUFSVF9JRVIpOworCQkJCQlwb3J0LT5JRVIgfD0gVUFSVF9JRVJfVEhSSTsKKwkJCQkJb3V0Yihwb3J0LT5JRVIsIHBvcnQtPmlvYWRkciArCisJCQkJCQkJVUFSVF9JRVIpOworCQkJCX0KKwkJCQlzZXRfYml0KE1YU0VSX0VWRU5UX1RYTE9XLCAmcG9ydC0+ZXZlbnQpOworCQkJCXNjaGVkdWxlX3dvcmsoJnBvcnQtPnRxdWV1ZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIShzdGF0dXMgJiBVQVJUX01TUl9DVFMpKSB7CisJCQkJcG9ydC0+dHR5LT5od19zdG9wcGVkID0gMTsKKwkJCQlpZiAocG9ydC0+dHlwZSAhPSBQT1JUXzE2NTUwQSAmJgorCQkJCQkJIXBvcnQtPmJvYXJkLT5jaGlwX2ZsYWcpIHsKKwkJCQkJcG9ydC0+SUVSICY9IH5VQVJUX0lFUl9USFJJOworCQkJCQlvdXRiKHBvcnQtPklFUiwgcG9ydC0+aW9hZGRyICsKKwkJCQkJCQlVQVJUX0lFUik7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgaW50IG14c2VyX3N0YXJ0dXAoc3RydWN0IG14c2VyX3BvcnQgKmluZm8pCit7CisJdW5zaWduZWQgbG9uZyBwYWdlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwYWdlID0gX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKworCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJCWZyZWVfcGFnZShwYWdlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFpbmZvLT5pb2FkZHIgfHwgIWluZm8tPnR5cGUpIHsKKwkJaWYgKGluZm8tPnR0eSkKKwkJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CisJCWZyZWVfcGFnZShwYWdlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChpbmZvLT54bWl0X2J1ZikKKwkJZnJlZV9wYWdlKHBhZ2UpOworCWVsc2UKKwkJaW5mby0+eG1pdF9idWYgPSAodW5zaWduZWQgY2hhciAqKSBwYWdlOworCisJLyoKKwkgKiBDbGVhciB0aGUgRklGTyBidWZmZXJzIGFuZCBkaXNhYmxlIHRoZW0KKwkgKiAodGhleSB3aWxsIGJlIHJlZW5hYmxlZCBpbiBteHNlcl9jaGFuZ2Vfc3BlZWQoKSkKKwkgKi8KKwlpZiAoaW5mby0+Ym9hcmQtPmNoaXBfZmxhZykKKwkJb3V0YigoVUFSVF9GQ1JfQ0xFQVJfUkNWUiB8CisJCQlVQVJUX0ZDUl9DTEVBUl9YTUlUIHwKKwkJCU1PWEFfTVVTVF9GQ1JfR0RBX01PREVfRU5BQkxFKSwgaW5mby0+aW9hZGRyICsgVUFSVF9GQ1IpOworCWVsc2UKKwkJb3V0YigoVUFSVF9GQ1JfQ0xFQVJfUkNWUiB8IFVBUlRfRkNSX0NMRUFSX1hNSVQpLAorCQkJaW5mby0+aW9hZGRyICsgVUFSVF9GQ1IpOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IHRoZXJlJ3Mgbm8gd2F5IHRoZSBMU1IgY291bGQgc3RpbGwgYmUgMHhGRjsKKwkgKiBpZiBpdCBpcywgdGhlbiBiYWlsIG91dCwgYmVjYXVzZSB0aGVyZSdzIGxpa2VseSBubyBVQVJUCisJICogaGVyZS4KKwkgKi8KKwlpZiAoaW5iKGluZm8tPmlvYWRkciArIFVBUlRfTFNSKSA9PSAweGZmKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CisJCQlpZiAoaW5mby0+dHR5KQorCQkJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIENsZWFyIHRoZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzLgorCSAqLworCSh2b2lkKSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9MU1IpOworCSh2b2lkKSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9SWCk7CisJKHZvaWQpIGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX0lJUik7CisJKHZvaWQpIGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX01TUik7CisKKwkvKgorCSAqIE5vdywgaW5pdGlhbGl6ZSB0aGUgVUFSVAorCSAqLworCW91dGIoVUFSVF9MQ1JfV0xFTjgsIGluZm8tPmlvYWRkciArIFVBUlRfTENSKTsJLyogcmVzZXQgRExBQiAqLworCWluZm8tPk1DUiA9IFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUzsKKwlvdXRiKGluZm8tPk1DUiwgaW5mby0+aW9hZGRyICsgVUFSVF9NQ1IpOworCisJLyoKKwkgKiBGaW5hbGx5LCBlbmFibGUgaW50ZXJydXB0cworCSAqLworCWluZm8tPklFUiA9IFVBUlRfSUVSX01TSSB8IFVBUlRfSUVSX1JMU0kgfCBVQVJUX0lFUl9SREk7CisKKwlpZiAoaW5mby0+Ym9hcmQtPmNoaXBfZmxhZykKKwkJaW5mby0+SUVSIHw9IE1PWEFfTVVTVF9JRVJfRUdEQUk7CisJb3V0YihpbmZvLT5JRVIsIGluZm8tPmlvYWRkciArIFVBUlRfSUVSKTsJLyogZW5hYmxlIGludGVycnVwdHMgKi8KKworCS8qCisJICogQW5kIGNsZWFyIHRoZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzIGFnYWluIGZvciBsdWNrLgorCSAqLworCSh2b2lkKSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9MU1IpOworCSh2b2lkKSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9SWCk7CisJKHZvaWQpIGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX0lJUik7CisJKHZvaWQpIGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX01TUik7CisKKwlpZiAoaW5mby0+dHR5KQorCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CisJaW5mby0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOworCisJLyoKKwkgKiBhbmQgc2V0IHRoZSBzcGVlZCBvZiB0aGUgc2VyaWFsIHBvcnQKKwkgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCW14c2VyX2NoYW5nZV9zcGVlZChpbmZvLCBOVUxMKTsKKworCWluZm8tPmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyByb3V0aW5lIHdpbGwgc2h1dGRvd24gYSBzZXJpYWwgcG9ydDsgaW50ZXJydXB0cyBtYXliZSBkaXNhYmxlZCwgYW5kCisgKiBEVFIgaXMgZHJvcHBlZCBpZiB0aGUgaGFuZ3VwIG9uIGNsb3NlIHRlcm1pbyBmbGFnIGlzIG9uLgorICovCitzdGF0aWMgdm9pZCBteHNlcl9zaHV0ZG93bihzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBjbGVhciBkZWx0YV9tc3Jfd2FpdCBxdWV1ZSB0byBhdm9pZCBtZW0gbGVha3M6IHdlIG1heSBmcmVlIHRoZSBpcnEKKwkgKiBoZXJlIHNvIHRoZSBxdWV1ZSBtaWdodCBuZXZlciBiZSB3YWtlbiB1cAorCSAqLworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOworCisJLyoKKwkgKiBGcmVlIHRoZSBJUlEsIGlmIG5lY2Vzc2FyeQorCSAqLworCWlmIChpbmZvLT54bWl0X2J1ZikgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGluZm8tPnhtaXRfYnVmKTsKKwkJaW5mby0+eG1pdF9idWYgPSBOVUxMOworCX0KKworCWluZm8tPklFUiA9IDA7CisJb3V0YigweDAwLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0lFUik7CisKKwlpZiAoIWluZm8tPnR0eSB8fCAoaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKQorCQlpbmZvLT5NQ1IgJj0gfihVQVJUX01DUl9EVFIgfCBVQVJUX01DUl9SVFMpOworCW91dGIoaW5mby0+TUNSLCBpbmZvLT5pb2FkZHIgKyBVQVJUX01DUik7CisKKwkvKiBjbGVhciBSeC9UeCBGSUZPJ3MgKi8KKwlpZiAoaW5mby0+Ym9hcmQtPmNoaXBfZmxhZykKKwkJb3V0YihVQVJUX0ZDUl9DTEVBUl9SQ1ZSIHwgVUFSVF9GQ1JfQ0xFQVJfWE1JVCB8CisJCQkJTU9YQV9NVVNUX0ZDUl9HREFfTU9ERV9FTkFCTEUsCisJCQkJaW5mby0+aW9hZGRyICsgVUFSVF9GQ1IpOworCWVsc2UKKwkJb3V0YihVQVJUX0ZDUl9DTEVBUl9SQ1ZSIHwgVUFSVF9GQ1JfQ0xFQVJfWE1JVCwKKwkJCWluZm8tPmlvYWRkciArIFVBUlRfRkNSKTsKKworCS8qIHJlYWQgZGF0YSBwb3J0IHRvIHJlc2V0IHRoaW5ncyAqLworCSh2b2lkKSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9SWCk7CisKKwlpZiAoaW5mby0+dHR5KQorCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOworCisJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOworCisJaWYgKGluZm8tPmJvYXJkLT5jaGlwX2ZsYWcpCisJCVNFVF9NT1hBX01VU1RfTk9fU09GVFdBUkVfRkxPV19DT05UUk9MKGluZm8tPmlvYWRkcik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuZXZlciBhIHNlcmlhbCBwb3J0IGlzIG9wZW5lZC4gIEl0CisgKiBlbmFibGVzIGludGVycnVwdHMgZm9yIGEgc2VyaWFsIHBvcnQsIGxpbmtpbmcgaW4gaXRzIGFzeW5jIHN0cnVjdHVyZSBpbnRvCisgKiB0aGUgSVJRIGNoYWluLiAgIEl0IGFsc28gcGVyZm9ybXMgdGhlIHNlcmlhbC1zcGVjaWZpYworICogaW5pdGlhbGl6YXRpb24gZm9yIHRoZSB0dHkgc3RydWN0dXJlLgorICovCitzdGF0aWMgaW50IG14c2VyX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IG14c2VyX3BvcnQgKmluZm87CisJaW50IHJldHZhbCwgbGluZTsKKworCS8qIGluaXRpYWxpemUgZHJpdmVyX2RhdGEgaW4gY2FzZSBzb21ldGhpbmcgZmFpbHMgKi8KKwl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKworCWxpbmUgPSB0dHktPmluZGV4OworCWlmIChsaW5lID09IE1YU0VSX1BPUlRTKQorCQlyZXR1cm4gMDsKKwlpZiAobGluZSA8IDAgfHwgbGluZSA+IE1YU0VSX1BPUlRTKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpbmZvID0gJm14c2VyX2JvYXJkc1tsaW5lIC8gTVhTRVJfUE9SVFNfUEVSX0JPQVJEXS5wb3J0c1tsaW5lICUgTVhTRVJfUE9SVFNfUEVSX0JPQVJEXTsKKwlpZiAoIWluZm8tPmlvYWRkcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl0dHktPmRyaXZlcl9kYXRhID0gaW5mbzsKKwlpbmZvLT50dHkgPSB0dHk7CisJLyoKKwkgKiBTdGFydCB1cCBzZXJpYWwgcG9ydAorCSAqLworCWluZm8tPmNvdW50Kys7CisJcmV0dmFsID0gbXhzZXJfc3RhcnR1cChpbmZvKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gbXhzZXJfYmxvY2tfdGlsX3JlYWR5KHR0eSwgZmlscCwgaW5mbyk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICgoaW5mby0+Y291bnQgPT0gMSkgJiYgKGluZm8tPmZsYWdzICYgQVNZTkNfU1BMSVRfVEVSTUlPUykpIHsKKwkJaWYgKHR0eS0+ZHJpdmVyLT5zdWJ0eXBlID09IFNFUklBTF9UWVBFX05PUk1BTCkKKwkJCSp0dHktPnRlcm1pb3MgPSBpbmZvLT5ub3JtYWxfdGVybWlvczsKKwkJZWxzZQorCQkJKnR0eS0+dGVybWlvcyA9IGluZm8tPmNhbGxvdXRfdGVybWlvczsKKwkJbXhzZXJfY2hhbmdlX3NwZWVkKGluZm8sIE5VTEwpOworCX0KKworCWluZm8tPnNlc3Npb24gPSBwcm9jZXNzX3Nlc3Npb24oY3VycmVudCk7CisJaW5mby0+cGdycCA9IHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7CisKKwkvKiB1bm1hcmsgaGVyZSBmb3IgdmVyeSBoaWdoIGJhdWQgcmF0ZSAoZXguIDkyMTYwMCBicHMpIHVzZWQgKi8KKwl0dHktPmxvd19sYXRlbmN5ID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgc2VyaWFsIHBvcnQgZ2V0cyBjbG9zZWQuICBGaXJzdCwgd2UKKyAqIHdhaXQgZm9yIHRoZSBsYXN0IHJlbWFpbmluZyBkYXRhIHRvIGJlIHNlbnQuICBUaGVuLCB3ZSB1bmxpbmsgaXRzCisgKiBhc3luYyBzdHJ1Y3R1cmUgZnJvbSB0aGUgaW50ZXJydXB0IGNoYWluIGlmIG5lY2Vzc2FyeSwgYW5kIHdlIGZyZWUKKyAqIHRoYXQgSVJRIGlmIG5vdGhpbmcgaXMgbGVmdCBpbiB0aGUgY2hhaW4uCisgKi8KK3N0YXRpYyB2b2lkIG14c2VyX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHR0eS0+aW5kZXggPT0gTVhTRVJfUE9SVFMpCisJCXJldHVybjsKKwlpZiAoIWluZm8pCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCisJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKGluZm8tPmNvdW50ICE9IDEpKSB7CisJCS8qCisJCSAqIFVoLCBvaC4gIHR0eS0+Y291bnQgaXMgMSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdHR5CisJCSAqIHN0cnVjdHVyZSB3aWxsIGJlIGZyZWVkLiAgSW5mby0+Y291bnQgc2hvdWxkIGFsd2F5cworCQkgKiBiZSBvbmUgaW4gdGhlc2UgY29uZGl0aW9ucy4gIElmIGl0J3MgZ3JlYXRlciB0aGFuCisJCSAqIG9uZSwgd2UndmUgZ290IHJlYWwgcHJvYmxlbXMsIHNpbmNlIGl0IG1lYW5zIHRoZQorCQkgKiBzZXJpYWwgcG9ydCB3b24ndCBiZSBzaHV0ZG93bi4KKwkJICovCisJCXByaW50ayhLRVJOX0VSUiAibXhzZXJfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudDsgIgorCQkJInR0eS0+Y291bnQgaXMgMSwgaW5mby0+Y291bnQgaXMgJWRcbiIsIGluZm8tPmNvdW50KTsKKwkJaW5mby0+Y291bnQgPSAxOworCX0KKwlpZiAoLS1pbmZvLT5jb3VudCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteHNlcl9jbG9zZTogYmFkIHNlcmlhbCBwb3J0IGNvdW50IGZvciAiCisJCQkidHR5cyVkOiAlZFxuIiwgdHR5LT5pbmRleCwgaW5mby0+Y291bnQpOworCQlpbmZvLT5jb3VudCA9IDA7CisJfQorCWlmIChpbmZvLT5jb3VudCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCWluZm8tPmZsYWdzIHw9IEFTWU5DX0NMT1NJTkc7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkvKgorCSAqIFNhdmUgdGhlIHRlcm1pb3Mgc3RydWN0dXJlLCBzaW5jZSB0aGlzIHBvcnQgbWF5IGhhdmUKKwkgKiBzZXBhcmF0ZSB0ZXJtaW9zIGZvciBjYWxsb3V0IGFuZCBkaWFsaW4uCisJICovCisJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfTk9STUFMX0FDVElWRSkKKwkJaW5mby0+bm9ybWFsX3Rlcm1pb3MgPSAqdHR5LT50ZXJtaW9zOworCS8qCisJICogTm93IHdlIHdhaXQgZm9yIHRoZSB0cmFuc21pdCBidWZmZXIgdG8gY2xlYXI7IGFuZCB3ZSBub3RpZnkKKwkgKiB0aGUgbGluZSBkaXNjaXBsaW5lIHRvIG9ubHkgcHJvY2VzcyBYT04vWE9GRiBjaGFyYWN0ZXJzLgorCSAqLworCXR0eS0+Y2xvc2luZyA9IDE7CisJaWYgKGluZm8tPmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkKKwkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIGluZm8tPmNsb3Npbmdfd2FpdCk7CisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IHdlIHN0b3AgYWNjZXB0aW5nIGlucHV0LiAgVG8gZG8gdGhpcywgd2UKKwkgKiBkaXNhYmxlIHRoZSByZWNlaXZlIGxpbmUgc3RhdHVzIGludGVycnVwdHMsIGFuZCB0ZWxsIHRoZQorCSAqIGludGVycnVwdCBkcml2ZXIgdG8gc3RvcCBjaGVja2luZyB0aGUgZGF0YSByZWFkeSBiaXQgaW4gdGhlCisJICogbGluZSBzdGF0dXMgcmVnaXN0ZXIuCisJICovCisJaW5mby0+SUVSICY9IH5VQVJUX0lFUl9STFNJOworCWlmIChpbmZvLT5ib2FyZC0+Y2hpcF9mbGFnKQorCQlpbmZvLT5JRVIgJj0gfk1PWEFfTVVTVF9SRUNWX0lTUjsKKworCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJCW91dGIoaW5mby0+SUVSLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0lFUik7CisJCS8qCisJCSAqIEJlZm9yZSB3ZSBkcm9wIERUUiwgbWFrZSBzdXJlIHRoZSBVQVJUIHRyYW5zbWl0dGVyCisJCSAqIGhhcyBjb21wbGV0ZWx5IGRyYWluZWQ7IHRoaXMgaXMgZXNwZWNpYWxseQorCQkgKiBpbXBvcnRhbnQgaWYgdGhlcmUgaXMgYSB0cmFuc21pdCBGSUZPIQorCQkgKi8KKwkJdGltZW91dCA9IGppZmZpZXMgKyBIWjsKKwkJd2hpbGUgKCEoaW5iKGluZm8tPmlvYWRkciArIFVBUlRfTFNSKSAmIFVBUlRfTFNSX1RFTVQpKSB7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoNSk7CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlteHNlcl9zaHV0ZG93bihpbmZvKTsKKworCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQorCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKHR0eSk7CisKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsKKworCXR0eS0+Y2xvc2luZyA9IDA7CisJaW5mby0+ZXZlbnQgPSAwOworCWluZm8tPnR0eSA9IE5VTEw7CisJaWYgKGluZm8tPmJsb2NrZWRfb3BlbikgeworCQlpZiAoaW5mby0+Y2xvc2VfZGVsYXkpCisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoaW5mby0+Y2xvc2VfZGVsYXkpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7CisJfQorCisJaW5mby0+ZmxhZ3MgJj0gfihBU1lOQ19OT1JNQUxfQUNUSVZFIHwgQVNZTkNfQ0xPU0lORyk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5jbG9zZV93YWl0KTsKKworfQorCitzdGF0aWMgaW50IG14c2VyX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBjLCB0b3RhbCA9IDA7CisJc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWluZm8tPnhtaXRfYnVmKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgxKSB7CisJCWMgPSBtaW5fdChpbnQsIGNvdW50LCBtaW4oU0VSSUFMX1hNSVRfU0laRSAtIGluZm8tPnhtaXRfY250IC0gMSwKKwkJCQkJICBTRVJJQUxfWE1JVF9TSVpFIC0gaW5mby0+eG1pdF9oZWFkKSk7CisJCWlmIChjIDw9IDApCisJCQlicmVhazsKKworCQltZW1jcHkoaW5mby0+eG1pdF9idWYgKyBpbmZvLT54bWl0X2hlYWQsIGJ1ZiwgYyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCQlpbmZvLT54bWl0X2hlYWQgPSAoaW5mby0+eG1pdF9oZWFkICsgYykgJgorCQkJCSAgKFNFUklBTF9YTUlUX1NJWkUgLSAxKTsKKwkJaW5mby0+eG1pdF9jbnQgKz0gYzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKworCQlidWYgKz0gYzsKKwkJY291bnQgLT0gYzsKKwkJdG90YWwgKz0gYzsKKwl9CisKKwlpZiAoaW5mby0+eG1pdF9jbnQgJiYgIXR0eS0+c3RvcHBlZCkgeworCQlpZiAoIXR0eS0+aHdfc3RvcHBlZCB8fAorCQkJCShpbmZvLT50eXBlID09IFBPUlRfMTY1NTBBKSB8fAorCQkJCShpbmZvLT5ib2FyZC0+Y2hpcF9mbGFnKSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJCQlvdXRiKGluZm8tPklFUiAmIH5VQVJUX0lFUl9USFJJLCBpbmZvLT5pb2FkZHIgKworCQkJCQlVQVJUX0lFUik7CisJCQlpbmZvLT5JRVIgfD0gVUFSVF9JRVJfVEhSSTsKKwkJCW91dGIoaW5mby0+SUVSLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0lFUik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCQl9CisJfQorCXJldHVybiB0b3RhbDsKK30KKworc3RhdGljIHZvaWQgbXhzZXJfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCkKK3sKKwlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghaW5mby0+eG1pdF9idWYpCisJCXJldHVybjsKKworCWlmIChpbmZvLT54bWl0X2NudCA+PSBTRVJJQUxfWE1JVF9TSVpFIC0gMSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJaW5mby0+eG1pdF9idWZbaW5mby0+eG1pdF9oZWFkKytdID0gY2g7CisJaW5mby0+eG1pdF9oZWFkICY9IFNFUklBTF9YTUlUX1NJWkUgLSAxOworCWluZm8tPnhtaXRfY250Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwlpZiAoIXR0eS0+c3RvcHBlZCkgeworCQlpZiAoIXR0eS0+aHdfc3RvcHBlZCB8fAorCQkJCShpbmZvLT50eXBlID09IFBPUlRfMTY1NTBBKSB8fAorCQkJCWluZm8tPmJvYXJkLT5jaGlwX2ZsYWcpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCQkJb3V0YihpbmZvLT5JRVIgJiB+VUFSVF9JRVJfVEhSSSwgaW5mby0+aW9hZGRyICsgVUFSVF9JRVIpOworCQkJaW5mby0+SUVSIHw9IFVBUlRfSUVSX1RIUkk7CisJCQlvdXRiKGluZm8tPklFUiwgaW5mby0+aW9hZGRyICsgVUFSVF9JRVIpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkJfQorCX0KK30KKworCitzdGF0aWMgdm9pZCBteHNlcl9mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGluZm8tPnhtaXRfY250IDw9IDAgfHwKKwkJCXR0eS0+c3RvcHBlZCB8fAorCQkJIWluZm8tPnhtaXRfYnVmIHx8CisJCQkodHR5LT5od19zdG9wcGVkICYmCisJCQkgKGluZm8tPnR5cGUgIT0gUE9SVF8xNjU1MEEpICYmCisJCQkgKCFpbmZvLT5ib2FyZC0+Y2hpcF9mbGFnKQorCQkJKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisKKwlvdXRiKGluZm8tPklFUiAmIH5VQVJUX0lFUl9USFJJLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0lFUik7CisJaW5mby0+SUVSIHw9IFVBUlRfSUVSX1RIUkk7CisJb3V0YihpbmZvLT5JRVIsIGluZm8tPmlvYWRkciArIFVBUlRfSUVSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbXhzZXJfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gU0VSSUFMX1hNSVRfU0laRSAtIGluZm8tPnhtaXRfY250IC0gMTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0ID0gMDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG14c2VyX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlyZXR1cm4gaW5mby0+eG1pdF9jbnQ7Cit9CisKK3N0YXRpYyB2b2lkIG14c2VyX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwljaGFyIGZjcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwlpbmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7CisKKwlmY3IgPSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9GQ1IpOworCW91dGIoKGZjciB8IFVBUlRfRkNSX0NMRUFSX1JDVlIgfCBVQVJUX0ZDUl9DTEVBUl9YTUlUKSwKKwkJaW5mby0+aW9hZGRyICsgVUFSVF9GQ1IpOworCW91dGIoZmNyLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0ZDUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCisJdHR5X3dha2V1cCh0dHkpOworfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBmcmllbmRzIG9mIG14c2VyX2lvY3RsKCkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgaW50IG14c2VyX2dldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbywKKwkJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQoreworCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKKworCWlmICghcmV0aW5mbykKKwkJcmV0dXJuIC1FRkFVTFQ7CisJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKKwl0bXAudHlwZSA9IGluZm8tPnR5cGU7CisJdG1wLmxpbmUgPSBpbmZvLT50dHktPmluZGV4OworCXRtcC5wb3J0ID0gaW5mby0+aW9hZGRyOworCXRtcC5pcnEgPSBpbmZvLT5ib2FyZC0+aXJxOworCXRtcC5mbGFncyA9IGluZm8tPmZsYWdzOworCXRtcC5iYXVkX2Jhc2UgPSBpbmZvLT5iYXVkX2Jhc2U7CisJdG1wLmNsb3NlX2RlbGF5ID0gaW5mby0+Y2xvc2VfZGVsYXk7CisJdG1wLmNsb3Npbmdfd2FpdCA9IGluZm8tPmNsb3Npbmdfd2FpdDsKKwl0bXAuY3VzdG9tX2Rpdmlzb3IgPSBpbmZvLT5jdXN0b21fZGl2aXNvcjsKKwl0bXAuaHViNiA9IDA7CisJaWYgKGNvcHlfdG9fdXNlcihyZXRpbmZvLCAmdG1wLCBzaXplb2YoKnJldGluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXhzZXJfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBteHNlcl9wb3J0ICppbmZvLAorCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKm5ld19pbmZvKQoreworCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7CisJdW5zaWduZWQgaW50IGZsYWdzOworCWludCByZXR2YWwgPSAwOworCisJaWYgKCFuZXdfaW5mbyB8fCAhaW5mby0+aW9hZGRyKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXJpYWwsIG5ld19pbmZvLCBzaXplb2YobmV3X3NlcmlhbCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICgobmV3X3NlcmlhbC5pcnEgIT0gaW5mby0+Ym9hcmQtPmlycSkgfHwKKwkJCShuZXdfc2VyaWFsLnBvcnQgIT0gaW5mby0+aW9hZGRyKSB8fAorCQkJKG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3IgIT0gaW5mby0+Y3VzdG9tX2Rpdmlzb3IpIHx8CisJCQkobmV3X3NlcmlhbC5iYXVkX2Jhc2UgIT0gaW5mby0+YmF1ZF9iYXNlKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWZsYWdzID0gaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSzsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgeworCQlpZiAoKG5ld19zZXJpYWwuYmF1ZF9iYXNlICE9IGluZm8tPmJhdWRfYmFzZSkgfHwKKwkJCQkobmV3X3NlcmlhbC5jbG9zZV9kZWxheSAhPSBpbmZvLT5jbG9zZV9kZWxheSkgfHwKKwkJCQkoKG5ld19zZXJpYWwuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spICE9IChpbmZvLT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJaW5mby0+ZmxhZ3MgPSAoKGluZm8tPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CisJCQkJKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19VU1JfTUFTSykpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIE9LLCBwYXN0IHRoaXMgcG9pbnQsIGFsbCB0aGUgZXJyb3IgY2hlY2tpbmcgaGFzIGJlZW4gZG9uZS4KKwkJICogQXQgdGhpcyBwb2ludCwgd2Ugc3RhcnQgbWFraW5nIGNoYW5nZXMuLi4uLgorCQkgKi8KKwkJaW5mby0+ZmxhZ3MgPSAoKGluZm8tPmZsYWdzICYgfkFTWU5DX0ZMQUdTKSB8CisJCQkJKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19GTEFHUykpOworCQlpbmZvLT5jbG9zZV9kZWxheSA9IG5ld19zZXJpYWwuY2xvc2VfZGVsYXkgKiBIWiAvIDEwMDsKKwkJaW5mby0+Y2xvc2luZ193YWl0ID0gbmV3X3NlcmlhbC5jbG9zaW5nX3dhaXQgKiBIWiAvIDEwMDsKKwkJaW5mby0+dHR5LT5sb3dfbGF0ZW5jeSA9CisJCQkJKGluZm8tPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CisJCWluZm8tPnR0eS0+bG93X2xhdGVuY3kgPSAwOworCX0KKworCWluZm8tPnR5cGUgPSBuZXdfc2VyaWFsLnR5cGU7CisKKwlwcm9jZXNzX3R4cnhfZmlmbyhpbmZvKTsKKworCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJCWlmIChmbGFncyAhPSAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykpCisJCQlteHNlcl9jaGFuZ2Vfc3BlZWQoaW5mbywgTlVMTCk7CisJfSBlbHNlCisJCXJldHZhbCA9IG14c2VyX3N0YXJ0dXAoaW5mbyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogbXhzZXJfZ2V0X2xzcl9pbmZvIC0gZ2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyIGluZm8KKyAqCisgKiBQdXJwb3NlOiBMZXQgdXNlciBjYWxsIGlvY3RsKCkgdG8gZ2V0IGluZm8gd2hlbiB0aGUgVUFSVCBwaHlzaWNhbGx5CisgKgkgICAgaXMgZW1wdGllZC4gIE9uIGJ1cyB0eXBlcyBsaWtlIFJTNDg1LCB0aGUgdHJhbnNtaXR0ZXIgbXVzdAorICoJICAgIHJlbGVhc2UgdGhlIGJ1cyBhZnRlciB0cmFuc21pdHRpbmcuIFRoaXMgbXVzdCBiZSBkb25lIHdoZW4KKyAqCSAgICB0aGUgdHJhbnNtaXQgc2hpZnQgcmVnaXN0ZXIgaXMgZW1wdHksIG5vdCBiZSBkb25lIHdoZW4gdGhlCisgKgkgICAgdHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBpcyBlbXB0eS4gIFRoaXMgZnVuY3Rpb25hbGl0eQorICoJICAgIGFsbG93cyBhbiBSUzQ4NSBkcml2ZXIgdG8gYmUgd3JpdHRlbiBpbiB1c2VyIHNwYWNlLgorICovCitzdGF0aWMgaW50IG14c2VyX2dldF9sc3JfaW5mbyhzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbywKKwkJdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJc3RhdHVzID0gaW5iKGluZm8tPmlvYWRkciArIFVBUlRfTFNSKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCXJlc3VsdCA9ICgoc3RhdHVzICYgVUFSVF9MU1JfVEVNVCkgPyBUSU9DU0VSX1RFTVQgOiAwKTsKKwlyZXR1cm4gcHV0X3VzZXIocmVzdWx0LCB2YWx1ZSk7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgc2VuZHMgYSBicmVhayBjaGFyYWN0ZXIgb3V0IHRoZSBzZXJpYWwgcG9ydC4KKyAqLworc3RhdGljIHZvaWQgbXhzZXJfc2VuZF9icmVhayhzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbywgaW50IGR1cmF0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWluZm8tPmlvYWRkcikKKwkJcmV0dXJuOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJb3V0YihpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9MQ1IpIHwgVUFSVF9MQ1JfU0JDLAorCQlpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwlzY2hlZHVsZV90aW1lb3V0KGR1cmF0aW9uKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwlvdXRiKGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUikgJiB+VUFSVF9MQ1JfU0JDLAorCQlpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBteHNlcl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgY2hhciBjb250cm9sLCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCisJaWYgKHR0eS0+aW5kZXggPT0gTVhTRVJfUE9SVFMpCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJaWYgKHRlc3RfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVJTzsKKworCWNvbnRyb2wgPSBpbmZvLT5NQ1I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwlzdGF0dXMgPSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9NU1IpOworCWlmIChzdGF0dXMgJiBVQVJUX01TUl9BTllfREVMVEEpCisJCW14c2VyX2NoZWNrX21vZGVtX3N0YXR1cyhpbmZvLCBzdGF0dXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJcmV0dXJuICgoY29udHJvbCAmIFVBUlRfTUNSX1JUUykgPyBUSU9DTV9SVFMgOiAwKSB8CisJCSAgICAoKGNvbnRyb2wgJiBVQVJUX01DUl9EVFIpID8gVElPQ01fRFRSIDogMCkgfAorCQkgICAgKChzdGF0dXMgJiBVQVJUX01TUl9EQ0QpID8gVElPQ01fQ0FSIDogMCkgfAorCQkgICAgKChzdGF0dXMgJiBVQVJUX01TUl9SSSkgPyBUSU9DTV9STkcgOiAwKSB8CisJCSAgICAoKHN0YXR1cyAmIFVBUlRfTVNSX0RTUikgPyBUSU9DTV9EU1IgOiAwKSB8CisJCSAgICAoKHN0YXR1cyAmIFVBUlRfTVNSX0NUUykgPyBUSU9DTV9DVFMgOiAwKTsKK30KKworc3RhdGljIGludCBteHNlcl90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisKKwlpZiAodHR5LT5pbmRleCA9PSBNWFNFUl9QT1JUUykKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwlpZiAodGVzdF9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncykpCisJCXJldHVybiAtRUlPOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQlpbmZvLT5NQ1IgfD0gVUFSVF9NQ1JfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCWluZm8tPk1DUiB8PSBVQVJUX01DUl9EVFI7CisKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCWluZm8tPk1DUiAmPSB+VUFSVF9NQ1JfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJaW5mby0+TUNSICY9IH5VQVJUX01DUl9EVFI7CisKKwlvdXRiKGluZm8tPk1DUiwgaW5mby0+aW9hZGRyICsgVUFSVF9NQ1IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXhzZXJfcHJvZ3JhbV9tb2RlKGludCBwb3J0KQoreworCWludCBpZCwgaSwgaiwgbjsKKworCXNwaW5fbG9jaygmZ21fbG9jayk7CisJb3V0YigwLCBwb3J0KTsKKwlvdXRiKDAsIHBvcnQpOworCW91dGIoMCwgcG9ydCk7CisJKHZvaWQpaW5iKHBvcnQpOworCSh2b2lkKWluYihwb3J0KTsKKwlvdXRiKDAsIHBvcnQpOworCSh2b2lkKWluYihwb3J0KTsKKwlzcGluX3VubG9jaygmZ21fbG9jayk7CisKKwlpZCA9IGluYihwb3J0ICsgMSkgJiAweDFGOworCWlmICgoaWQgIT0gQzE2OF9BU0lDX0lEKSAmJgorCQkJKGlkICE9IEMxMDRfQVNJQ19JRCkgJiYKKwkJCShpZCAhPSBDMTAyX0FTSUNfSUQpICYmCisJCQkoaWQgIT0gQ0kxMzJfQVNJQ19JRCkgJiYKKwkJCShpZCAhPSBDSTEzNF9BU0lDX0lEKSAmJgorCQkJKGlkICE9IENJMTA0Sl9BU0lDX0lEKSkKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgNDsgaSsrKSB7CisJCW4gPSBpbmIocG9ydCArIDIpOworCQlpZiAobiA9PSAnTScpIHsKKwkJCWogPSAxOworCQl9IGVsc2UgaWYgKChqID09IDEpICYmIChuID09IDEpKSB7CisJCQlqID0gMjsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWogPSAwOworCX0KKwlpZiAoaiAhPSAyKQorCQlpZCA9IC0yOworCXJldHVybiBpZDsKK30KKworc3RhdGljIHZvaWQgbXhzZXJfbm9ybWFsX21vZGUoaW50IHBvcnQpCit7CisJaW50IGksIG47CisKKwlvdXRiKDB4QTUsIHBvcnQgKyAxKTsKKwlvdXRiKDB4ODAsIHBvcnQgKyAzKTsKKwlvdXRiKDEyLCBwb3J0ICsgMCk7CS8qIDk2MDAgYnBzICovCisJb3V0YigwLCBwb3J0ICsgMSk7CisJb3V0YigweDAzLCBwb3J0ICsgMyk7CS8qIDggZGF0YSBiaXRzICovCisJb3V0YigweDEzLCBwb3J0ICsgNCk7CS8qIGxvb3AgYmFjayBtb2RlICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJbiA9IGluYihwb3J0ICsgNSk7CisJCWlmICgobiAmIDB4NjEpID09IDB4NjApCisJCQlicmVhazsKKwkJaWYgKChuICYgMSkgPT0gMSkKKwkJCSh2b2lkKWluYihwb3J0KTsKKwl9CisJb3V0YigweDAwLCBwb3J0ICsgNCk7Cit9CisKKyNkZWZpbmUgQ0hJUF9TSyAJMHgwMQkvKiBTZXJpYWwgRGF0YSBDbG9jayAgaW4gRXByb20gKi8KKyNkZWZpbmUgQ0hJUF9ETyAJMHgwMgkvKiBTZXJpYWwgRGF0YSBPdXRwdXQgaW4gRXByb20gKi8KKyNkZWZpbmUgQ0hJUF9DUyAJMHgwNAkvKiBTZXJpYWwgQ2hpcCBTZWxlY3QgaW4gRXByb20gKi8KKyNkZWZpbmUgQ0hJUF9ESSAJMHgwOAkvKiBTZXJpYWwgRGF0YSBJbnB1dCAgaW4gRXByb20gKi8KKyNkZWZpbmUgRU5fQ0NNRCAJMHgwMDAJLyogQ2hpcCdzIGNvbW1hbmQgcmVnaXN0ZXIgICAgICovCisjZGVmaW5lIEVOMF9SU0FSTE8JMHgwMDgJLyogUmVtb3RlIHN0YXJ0IGFkZHJlc3MgcmVnIDAgICovCisjZGVmaW5lIEVOMF9SU0FSSEkJMHgwMDkJLyogUmVtb3RlIHN0YXJ0IGFkZHJlc3MgcmVnIDEgICovCisjZGVmaW5lIEVOMF9SQ05UTE8JMHgwMEEJLyogUmVtb3RlIGJ5dGUgY291bnQgcmVnIFdSICAgICovCisjZGVmaW5lIEVOMF9SQ05USEkJMHgwMEIJLyogUmVtb3RlIGJ5dGUgY291bnQgcmVnIFdSICAgICovCisjZGVmaW5lIEVOMF9EQ0ZHCTB4MDBFCS8qIERhdGEgY29uZmlndXJhdGlvbiByZWcgV1IgICAqLworI2RlZmluZSBFTjBfUE9SVAkweDAxMAkvKiBSY3YgbWlzc2VkIGZyYW1lIGVycm9yIGNvdW50ZXIgUkQgKi8KKyNkZWZpbmUgRU5DX1BBR0UwCTB4MDAwCS8qIFNlbGVjdCBwYWdlIDAgb2YgY2hpcCByZWdpc3RlcnMgICAqLworI2RlZmluZSBFTkNfUEFHRTMJMHgwQzAJLyogU2VsZWN0IHBhZ2UgMyBvZiBjaGlwIHJlZ2lzdGVycyAgICovCitzdGF0aWMgaW50IG14c2VyX3JlYWRfcmVnaXN0ZXIoaW50IHBvcnQsIHVuc2lnbmVkIHNob3J0ICpyZWdzKQoreworCWludCBpLCBrLCB2YWx1ZSwgaWQ7CisJdW5zaWduZWQgaW50IGo7CisKKwlpZCA9IG14c2VyX3Byb2dyYW1fbW9kZShwb3J0KTsKKwlpZiAoaWQgPCAwKQorCQlyZXR1cm4gaWQ7CisJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJayA9IChpICYgMHgzRikgfCAweDE4MDsKKwkJZm9yIChqID0gMHgxMDA7IGogPiAwOyBqID4+PSAxKSB7CisJCQlvdXRiKENISVBfQ1MsIHBvcnQpOworCQkJaWYgKGsgJiBqKSB7CisJCQkJb3V0YihDSElQX0NTIHwgQ0hJUF9ETywgcG9ydCk7CisJCQkJb3V0YihDSElQX0NTIHwgQ0hJUF9ETyB8IENISVBfU0ssIHBvcnQpOwkvKiBBPyBiaXQgb2YgcmVhZCAqLworCQkJfSBlbHNlIHsKKwkJCQlvdXRiKENISVBfQ1MsIHBvcnQpOworCQkJCW91dGIoQ0hJUF9DUyB8IENISVBfU0ssIHBvcnQpOwkvKiBBPyBiaXQgb2YgcmVhZCAqLworCQkJfQorCQl9CisJCSh2b2lkKWluYihwb3J0KTsKKwkJdmFsdWUgPSAwOworCQlmb3IgKGsgPSAwLCBqID0gMHg4MDAwOyBrIDwgMTY7IGsrKywgaiA+Pj0gMSkgeworCQkJb3V0YihDSElQX0NTLCBwb3J0KTsKKwkJCW91dGIoQ0hJUF9DUyB8IENISVBfU0ssIHBvcnQpOworCQkJaWYgKGluYihwb3J0KSAmIENISVBfREkpCisJCQkJdmFsdWUgfD0gajsKKwkJfQorCQlyZWdzW2ldID0gdmFsdWU7CisJCW91dGIoMCwgcG9ydCk7CisJfQorCW14c2VyX25vcm1hbF9tb2RlKHBvcnQpOworCXJldHVybiBpZDsKK30KKworc3RhdGljIGludCBteHNlcl9pb2N0bF9zcGVjaWFsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmdwKQoreworCXN0cnVjdCBteHNlcl9wb3J0ICpwb3J0OworCWludCByZXN1bHQsIHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBNT1hBX0dFVF9DT05GOgorLyoJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgbXhzZXJjZmcsCisJCQkJc2l6ZW9mKHN0cnVjdCBteHNlcl9od2NvbmYpICogNCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7Ki8KKwkJcmV0dXJuIC1FTlhJTzsKKwljYXNlIE1PWEFfR0VUX01BSk9SOgorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ0dHltYWpvciwgc2l6ZW9mKGludCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJY2FzZSBNT1hBX0dFVF9DVU1BSk9SOgorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZjYWxsb3V0bWFqb3IsIHNpemVvZihpbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKworCWNhc2UgTU9YQV9DSEtQT1JURU5BQkxFOgorCQlyZXN1bHQgPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBNWFNFUl9CT0FSRFM7IGkrKykKKwkJCWZvciAoaiA9IDA7IGogPCBNWFNFUl9QT1JUU19QRVJfQk9BUkQ7IGorKykKKwkJCQlpZiAobXhzZXJfYm9hcmRzW2ldLnBvcnRzW2pdLmlvYWRkcikKKwkJCQkJcmVzdWx0IHw9ICgxIDw8IGkpOworCisJCXJldHVybiBwdXRfdXNlcihyZXN1bHQsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZ3ApOworCWNhc2UgTU9YQV9HRVREQVRBQ09VTlQ6CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm14dmFyX2xvZywgc2l6ZW9mKG14dmFyX2xvZykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCWNhc2UgTU9YQV9HRVRNU1RBVFVTOgorCQlmb3IgKGkgPSAwOyBpIDwgTVhTRVJfQk9BUkRTOyBpKyspCisJCQlmb3IgKGogPSAwOyBqIDwgTVhTRVJfUE9SVFNfUEVSX0JPQVJEOyBqKyspIHsKKwkJCQlwb3J0ID0gJm14c2VyX2JvYXJkc1tpXS5wb3J0c1tqXTsKKworCQkJCUdNU3RhdHVzW2ldLnJpID0gMDsKKwkJCQlpZiAoIXBvcnQtPmlvYWRkcikgeworCQkJCQlHTVN0YXR1c1tpXS5kY2QgPSAwOworCQkJCQlHTVN0YXR1c1tpXS5kc3IgPSAwOworCQkJCQlHTVN0YXR1c1tpXS5jdHMgPSAwOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoIXBvcnQtPnR0eSB8fCAhcG9ydC0+dHR5LT50ZXJtaW9zKQorCQkJCQlHTVN0YXR1c1tpXS5jZmxhZyA9CisJCQkJCQlwb3J0LT5ub3JtYWxfdGVybWlvcy5jX2NmbGFnOworCQkJCWVsc2UKKwkJCQkJR01TdGF0dXNbaV0uY2ZsYWcgPQorCQkJCQkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCisJCQkJc3RhdHVzID0gaW5iKHBvcnQtPmlvYWRkciArIFVBUlRfTVNSKTsKKwkJCQlpZiAoc3RhdHVzICYgMHg4MCAvKlVBUlRfTVNSX0RDRCAqLyApCisJCQkJCUdNU3RhdHVzW2ldLmRjZCA9IDE7CisJCQkJZWxzZQorCQkJCQlHTVN0YXR1c1tpXS5kY2QgPSAwOworCisJCQkJaWYgKHN0YXR1cyAmIDB4MjAgLypVQVJUX01TUl9EU1IgKi8gKQorCQkJCQlHTVN0YXR1c1tpXS5kc3IgPSAxOworCQkJCWVsc2UKKwkJCQkJR01TdGF0dXNbaV0uZHNyID0gMDsKKworCisJCQkJaWYgKHN0YXR1cyAmIDB4MTAgLypVQVJUX01TUl9DVFMgKi8gKQorCQkJCQlHTVN0YXR1c1tpXS5jdHMgPSAxOworCQkJCWVsc2UKKwkJCQkJR01TdGF0dXNbaV0uY3RzID0gMDsKKwkJCX0KKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBHTVN0YXR1cywKKwkJCQlzaXplb2Yoc3RydWN0IG14c2VyX21zdGF0dXMpICogTVhTRVJfUE9SVFMpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCWNhc2UgTU9YQV9BU1BQX01PTl9FWFQ6IHsKKwkJaW50IHN0YXR1cywgcCwgc2hpZnRiaXQ7CisJCXVuc2lnbmVkIGxvbmcgb3Btb2RlOworCQl1bnNpZ25lZCBjZmxhZywgaWZsYWc7CisKKwkJZm9yIChpID0gMDsgaSA8IE1YU0VSX0JPQVJEUzsgaSsrKQorCQkJZm9yIChqID0gMDsgaiA8IE1YU0VSX1BPUlRTX1BFUl9CT0FSRDsgaisrKSB7CisJCQkJcG9ydCA9ICZteHNlcl9ib2FyZHNbaV0ucG9ydHNbal07CisJCQkJaWYgKCFwb3J0LT5pb2FkZHIpCisJCQkJCWNvbnRpbnVlOworCisJCQkJc3RhdHVzID0gbXhzZXJfZ2V0X21zcihwb3J0LT5pb2FkZHIsIDAsIGkpOworCisJCQkJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX1RFUkkpCisJCQkJCXBvcnQtPmljb3VudC5ybmcrKzsKKwkJCQlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRERTUikKKwkJCQkJcG9ydC0+aWNvdW50LmRzcisrOworCQkJCWlmIChzdGF0dXMgJiBVQVJUX01TUl9ERENEKQorCQkJCQlwb3J0LT5pY291bnQuZGNkKys7CisJCQkJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0RDVFMpCisJCQkJCXBvcnQtPmljb3VudC5jdHMrKzsKKworCQkJCXBvcnQtPm1vbl9kYXRhLm1vZGVtX3N0YXR1cyA9IHN0YXR1czsKKwkJCQltb25fZGF0YV9leHQucnhfY250W2ldID0gcG9ydC0+bW9uX2RhdGEucnhjbnQ7CisJCQkJbW9uX2RhdGFfZXh0LnR4X2NudFtpXSA9IHBvcnQtPm1vbl9kYXRhLnR4Y250OworCQkJCW1vbl9kYXRhX2V4dC51cF9yeGNudFtpXSA9CisJCQkJCXBvcnQtPm1vbl9kYXRhLnVwX3J4Y250OworCQkJCW1vbl9kYXRhX2V4dC51cF90eGNudFtpXSA9CisJCQkJCXBvcnQtPm1vbl9kYXRhLnVwX3R4Y250OworCQkJCW1vbl9kYXRhX2V4dC5tb2RlbV9zdGF0dXNbaV0gPQorCQkJCQlwb3J0LT5tb25fZGF0YS5tb2RlbV9zdGF0dXM7CisJCQkJbW9uX2RhdGFfZXh0LmJhdWRyYXRlW2ldID0gcG9ydC0+cmVhbGJhdWQ7CisKKwkJCQlpZiAoIXBvcnQtPnR0eSB8fCAhcG9ydC0+dHR5LT50ZXJtaW9zKSB7CisJCQkJCWNmbGFnID0gcG9ydC0+bm9ybWFsX3Rlcm1pb3MuY19jZmxhZzsKKwkJCQkJaWZsYWcgPSBwb3J0LT5ub3JtYWxfdGVybWlvcy5jX2lmbGFnOworCQkJCX0gZWxzZSB7CisJCQkJCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCQkJCQlpZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwkJCQl9CisKKwkJCQltb25fZGF0YV9leHQuZGF0YWJpdHNbaV0gPSBjZmxhZyAmIENTSVpFOworCisJCQkJbW9uX2RhdGFfZXh0LnN0b3BiaXRzW2ldID0gY2ZsYWcgJiBDU1RPUEI7CisKKwkJCQltb25fZGF0YV9leHQucGFyaXR5W2ldID0KKwkJCQkJY2ZsYWcgJiAoUEFSRU5CIHwgUEFST0REIHwgQ01TUEFSKTsKKworCQkJCW1vbl9kYXRhX2V4dC5mbG93Y3RybFtpXSA9IDB4MDA7CisKKwkJCQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCQkJCQltb25fZGF0YV9leHQuZmxvd2N0cmxbaV0gfD0gMHgwMzsKKworCQkJCWlmIChpZmxhZyAmIChJWE9OIHwgSVhPRkYpKQorCQkJCQltb25fZGF0YV9leHQuZmxvd2N0cmxbaV0gfD0gMHgwQzsKKworCQkJCWlmIChwb3J0LT50eXBlID09IFBPUlRfMTY1NTBBKQorCQkJCQltb25fZGF0YV9leHQuZmlmb1tpXSA9IDE7CisJCQkJZWxzZQorCQkJCQltb25fZGF0YV9leHQuZmlmb1tpXSA9IDA7CisKKwkJCQlwID0gaSAlIDQ7CisJCQkJc2hpZnRiaXQgPSBwICogMjsKKwkJCQlvcG1vZGUgPSBpbmIocG9ydC0+b3Btb2RlX2lvYWRkcikgPj4gc2hpZnRiaXQ7CisJCQkJb3Btb2RlICY9IE9QX01PREVfTUFTSzsKKworCQkJCW1vbl9kYXRhX2V4dC5pZnR5cGVbaV0gPSBvcG1vZGU7CisKKwkJCX0KKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm1vbl9kYXRhX2V4dCwKKwkJCQkJCXNpemVvZihtb25fZGF0YV9leHQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJcmV0dXJuIDA7CisKKwl9IGRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14c2VyX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjcHJldiwgY25vdzsJLyoga2VybmVsIGNvdW50ZXIgdGVtcHMgKi8KKwlzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCBfX3VzZXIgKnBfY3VzZXI7CisJdW5zaWduZWQgbG9uZyB0ZW1wbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCByZXR2YWw7CisKKwlpZiAodHR5LT5pbmRleCA9PSBNWFNFUl9QT1JUUykKKwkJcmV0dXJuIG14c2VyX2lvY3RsX3NwZWNpYWwoY21kLCBhcmdwKTsKKworCWlmIChjbWQgPT0gTU9YQV9TRVRfT1BfTU9ERSB8fCBjbWQgPT0gTU9YQV9HRVRfT1BfTU9ERSkgeworCQlpbnQgcDsKKwkJdW5zaWduZWQgbG9uZyBvcG1vZGU7CisJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIE1vZGVNYXNrW10gPSB7IDB4ZmMsIDB4ZjMsIDB4Y2YsIDB4M2YgfTsKKwkJaW50IHNoaWZ0Yml0OworCQl1bnNpZ25lZCBjaGFyIHZhbCwgbWFzazsKKworCQlwID0gdHR5LT5pbmRleCAlIDQ7CisJCWlmIChjbWQgPT0gTU9YQV9TRVRfT1BfTU9ERSkgeworCQkJaWYgKGdldF91c2VyKG9wbW9kZSwgKGludCBfX3VzZXIgKikgYXJncCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAob3Btb2RlICE9IFJTMjMyX01PREUgJiYKKwkJCQkJb3Btb2RlICE9IFJTNDg1XzJXSVJFX01PREUgJiYKKwkJCQkJb3Btb2RlICE9IFJTNDIyX01PREUgJiYKKwkJCQkJb3Btb2RlICE9IFJTNDg1XzRXSVJFX01PREUpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQltYXNrID0gTW9kZU1hc2tbcF07CisJCQlzaGlmdGJpdCA9IHAgKiAyOworCQkJdmFsID0gaW5iKGluZm8tPm9wbW9kZV9pb2FkZHIpOworCQkJdmFsICY9IG1hc2s7CisJCQl2YWwgfD0gKG9wbW9kZSA8PCBzaGlmdGJpdCk7CisJCQlvdXRiKHZhbCwgaW5mby0+b3Btb2RlX2lvYWRkcik7CisJCX0gZWxzZSB7CisJCQlzaGlmdGJpdCA9IHAgKiAyOworCQkJb3Btb2RlID0gaW5iKGluZm8tPm9wbW9kZV9pb2FkZHIpID4+IHNoaWZ0Yml0OworCQkJb3Btb2RlICY9IE9QX01PREVfTUFTSzsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm9wbW9kZSwgc2l6ZW9mKGludCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChjbWQgIT0gVElPQ0dTRVJJQUwgJiYgY21kICE9IFRJT0NNSVdBSVQgJiYgY21kICE9IFRJT0NHSUNPVU5UICYmCisJCQl0ZXN0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKSkKKwkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVENTQlJLOgkJLyogU1ZJRCB2ZXJzaW9uOiBub24temVybyBhcmcgLS0+IG5vIGJyZWFrICovCisJCXJldHZhbCA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCAwKTsKKwkJaWYgKCFhcmcpCisJCQlteHNlcl9zZW5kX2JyZWFrKGluZm8sIEhaIC8gNCk7CS8qIDEvNCBzZWNvbmQgKi8KKwkJcmV0dXJuIDA7CisJY2FzZSBUQ1NCUktQOgkJLyogc3VwcG9ydCBmb3IgUE9TSVggdGNzZW5kYnJlYWsoKSAqLworCQlyZXR2YWwgPSB0dHlfY2hlY2tfY2hhbmdlKHR0eSk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMCk7CisJCW14c2VyX3NlbmRfYnJlYWsoaW5mbywgYXJnID8gYXJnICogKEhaIC8gMTApIDogSFogLyA0KTsKKwkJcmV0dXJuIDA7CisJY2FzZSBUSU9DR1NPRlRDQVI6CisJCXJldHVybiBwdXRfdXNlcihDX0NMT0NBTCh0dHkpID8gMSA6IDAsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZ3ApOworCWNhc2UgVElPQ1NTT0ZUQ0FSOgorCQlpZiAoZ2V0X3VzZXIodGVtcGwsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKSBhcmdwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlhcmcgPSB0ZW1wbDsKKwkJdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gKCh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiB+Q0xPQ0FMKSB8IChhcmcgPyBDTE9DQUwgOiAwKSk7CisJCXJldHVybiAwOworCWNhc2UgVElPQ0dTRVJJQUw6CisJCXJldHVybiBteHNlcl9nZXRfc2VyaWFsX2luZm8oaW5mbywgYXJncCk7CisJY2FzZSBUSU9DU1NFUklBTDoKKwkJcmV0dXJuIG14c2VyX3NldF9zZXJpYWxfaW5mbyhpbmZvLCBhcmdwKTsKKwljYXNlIFRJT0NTRVJHRVRMU1I6CS8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLworCQlyZXR1cm4gbXhzZXJfZ2V0X2xzcl9pbmZvKGluZm8sIGFyZ3ApOworCQkvKgorCQkgKiBXYWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykgdG8gY2hhbmdlCisJCSAqIC0gbWFzayBwYXNzZWQgaW4gYXJnIGZvciBsaW5lcyBvZiBpbnRlcmVzdAorCQkgKiAgICh1c2UgfCdlZCBUSU9DTV9STkcvRFNSL0NEL0NUUyBmb3IgbWFza2luZykKKwkJICogQ2FsbGVyIHNob3VsZCB1c2UgVElPQ0dJQ09VTlQgdG8gc2VlIHdoaWNoIG9uZSBpdCB3YXMKKwkJICovCisJY2FzZSBUSU9DTUlXQUlUOiB7CisJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCQlpbnQgcmV0OworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkJY3ByZXYgPSBpbmZvLT5pY291bnQ7CS8qIG5vdGUgdGhlIGNvdW50ZXJzIG9uIGVudHJ5ICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisKKwkJYWRkX3dhaXRfcXVldWUoJmluZm8tPmRlbHRhX21zcl93YWl0LCAmd2FpdCk7CisJCXdoaWxlICgxKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkJCWNub3cgPSBpbmZvLT5pY291bnQ7CS8qIGF0b21pYyBjb3B5ICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOworCisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJgorCQkJCQkoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHwKKwkJCQkJKChhcmcgJiBUSU9DTV9EU1IpICYmCisJCQkJCShjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAorCQkJCQkoKGFyZyAmIFRJT0NNX0NEKSAmJgorCQkJCQkoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkgfHwKKwkJCQkJKChhcmcgJiBUSU9DTV9DVFMpICYmCisJCQkJCShjbm93LmN0cyAhPSBjcHJldi5jdHMpKSkgeworCQkJCXJldCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisJCQljcHJldiA9IGNub3c7CisJCX0KKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJCXJlbW92ZV93YWl0X3F1ZXVlKCZpbmZvLT5kZWx0YV9tc3Jfd2FpdCwgJndhaXQpOworCQlicmVhazsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworCS8qCisJICogR2V0IGNvdW50ZXIgb2YgaW5wdXQgc2VyaWFsIGxpbmUgaW50ZXJydXB0cyAoRENELFJJLERTUixDVFMpCisJICogUmV0dXJuOiB3cml0ZSBjb3VudGVycyB0byB0aGUgdXNlciBwYXNzZWQgY291bnRlciBzdHJ1Y3QKKwkgKiBOQjogYm90aCAxLT4wIGFuZCAwLT4xIHRyYW5zaXRpb25zIGFyZSBjb3VudGVkIGV4Y2VwdCBmb3IKKwkgKiAgICAgUkkgd2hlcmUgb25seSAwLT4xIGlzIGNvdW50ZWQuCisJICovCisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJCWNub3cgPSBpbmZvLT5pY291bnQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJCXBfY3VzZXIgPSBhcmdwOworCQlpZiAocHV0X3VzZXIoY25vdy5mcmFtZSwgJnBfY3VzZXItPmZyYW1lKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAocHV0X3VzZXIoY25vdy5icmssICZwX2N1c2VyLT5icmspKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChwdXRfdXNlcihjbm93Lm92ZXJydW4sICZwX2N1c2VyLT5vdmVycnVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAocHV0X3VzZXIoY25vdy5idWZfb3ZlcnJ1biwgJnBfY3VzZXItPmJ1Zl9vdmVycnVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAocHV0X3VzZXIoY25vdy5wYXJpdHksICZwX2N1c2VyLT5wYXJpdHkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChwdXRfdXNlcihjbm93LnJ4LCAmcF9jdXNlci0+cngpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChwdXRfdXNlcihjbm93LnR4LCAmcF9jdXNlci0+dHgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXB1dF91c2VyKGNub3cuY3RzLCAmcF9jdXNlci0+Y3RzKTsKKwkJcHV0X3VzZXIoY25vdy5kc3IsICZwX2N1c2VyLT5kc3IpOworCQlwdXRfdXNlcihjbm93LnJuZywgJnBfY3VzZXItPnJuZyk7CisJCXB1dF91c2VyKGNub3cuZGNkLCAmcF9jdXNlci0+ZGNkKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBNT1hBX0hpZ2hTcGVlZE9uOgorCQlyZXR1cm4gcHV0X3VzZXIoaW5mby0+YmF1ZF9iYXNlICE9IDExNTIwMCA/IDEgOiAwLCAoaW50IF9fdXNlciAqKWFyZ3ApOworCWNhc2UgTU9YQV9TRFNfUlNUSUNPVU5URVI6CisJCWluZm8tPm1vbl9kYXRhLnJ4Y250ID0gMDsKKwkJaW5mby0+bW9uX2RhdGEudHhjbnQgPSAwOworCQlyZXR1cm4gMDsKKwljYXNlIE1PWEFfQVNQUF9TRVRCQVVEOnsKKwkJbG9uZyBiYXVkOworCQlpZiAoZ2V0X3VzZXIoYmF1ZCwgKGxvbmcgX191c2VyICopYXJncCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJbXhzZXJfc2V0X2JhdWQoaW5mbywgYmF1ZCk7CisJCXJldHVybiAwOworCX0KKwljYXNlIE1PWEFfQVNQUF9HRVRCQVVEOgorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLT5yZWFsYmF1ZCwgc2l6ZW9mKGxvbmcpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCisJY2FzZSBNT1hBX0FTUFBfT1FVRVVFOnsKKwkJaW50IGxlbiwgbHNyOworCisJCWxlbiA9IG14c2VyX2NoYXJzX2luX2J1ZmZlcih0dHkpOworCisJCWxzciA9IGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX0xTUikgJiBVQVJUX0xTUl9URU1UOworCisJCWxlbiArPSAobHNyID8gMCA6IDEpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmxlbiwgc2l6ZW9mKGludCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgTU9YQV9BU1BQX01PTjogeworCQlpbnQgbWNyLCBzdGF0dXM7CisKKwkJc3RhdHVzID0gbXhzZXJfZ2V0X21zcihpbmZvLT5pb2FkZHIsIDEsIHR0eS0+aW5kZXgpOworCQlteHNlcl9jaGVja19tb2RlbV9zdGF0dXMoaW5mbywgc3RhdHVzKTsKKworCQltY3IgPSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9NQ1IpOworCQlpZiAobWNyICYgTU9YQV9NVVNUX01DUl9YT05fRkxBRykKKwkJCWluZm8tPm1vbl9kYXRhLmhvbGRfcmVhc29uICY9IH5OUFBJX05PVElGWV9YT0ZGSE9MRDsKKwkJZWxzZQorCQkJaW5mby0+bW9uX2RhdGEuaG9sZF9yZWFzb24gfD0gTlBQSV9OT1RJRllfWE9GRkhPTEQ7CisKKwkJaWYgKG1jciAmIE1PWEFfTVVTVF9NQ1JfVFhfWE9OKQorCQkJaW5mby0+bW9uX2RhdGEuaG9sZF9yZWFzb24gJj0gfk5QUElfTk9USUZZX1hPRkZYRU5UOworCQllbHNlCisJCQlpbmZvLT5tb25fZGF0YS5ob2xkX3JlYXNvbiB8PSBOUFBJX05PVElGWV9YT0ZGWEVOVDsKKworCQlpZiAoaW5mby0+dHR5LT5od19zdG9wcGVkKQorCQkJaW5mby0+bW9uX2RhdGEuaG9sZF9yZWFzb24gfD0gTlBQSV9OT1RJRllfQ1RTSE9MRDsKKwkJZWxzZQorCQkJaW5mby0+bW9uX2RhdGEuaG9sZF9yZWFzb24gJj0gfk5QUElfTk9USUZZX0NUU0hPTEQ7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mby0+bW9uX2RhdGEsCisJCQkJc2l6ZW9mKHN0cnVjdCBteHNlcl9tb24pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKwljYXNlIE1PWEFfQVNQUF9MU1RBVFVTOiB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8tPmVycl9zaGFkb3csCisJCQkJc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWluZm8tPmVycl9zaGFkb3cgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBNT1hBX1NFVF9CQVVEX01FVEhPRDogeworCQlpbnQgbWV0aG9kOworCisJCWlmIChnZXRfdXNlcihtZXRob2QsIChpbnQgX191c2VyICopYXJncCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJbXhzZXJfc2V0X2JhdWRfbWV0aG9kW3R0eS0+aW5kZXhdID0gbWV0aG9kOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZtZXRob2QsIHNpemVvZihpbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXhzZXJfc3RvcHJ4KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCisJaW5mby0+bGRpc2Nfc3RvcF9yeCA9IDE7CisJaWYgKElfSVhPRkYodHR5KSkgeworCQlpZiAoaW5mby0+Ym9hcmQtPmNoaXBfZmxhZykgeworCQkJaW5mby0+SUVSICY9IH5NT1hBX01VU1RfUkVDVl9JU1I7CisJCQlvdXRiKGluZm8tPklFUiwgaW5mby0+aW9hZGRyICsgVUFSVF9JRVIpOworCQl9IGVsc2UgeworCQkJaW5mby0+eF9jaGFyID0gU1RPUF9DSEFSKHR0eSk7CisJCQlvdXRiKDAsIGluZm8tPmlvYWRkciArIFVBUlRfSUVSKTsKKwkJCWluZm8tPklFUiB8PSBVQVJUX0lFUl9USFJJOworCQkJb3V0YihpbmZvLT5JRVIsIGluZm8tPmlvYWRkciArIFVBUlRfSUVSKTsKKwkJfQorCX0KKworCWlmIChpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCWluZm8tPk1DUiAmPSB+VUFSVF9NQ1JfUlRTOworCQlvdXRiKGluZm8tPk1DUiwgaW5mby0+aW9hZGRyICsgVUFSVF9NQ1IpOworCX0KK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIHVwcGVyLWxheWVyIHR0eSBsYXllciB0byBzaWduYWwgdGhhdAorICogaW5jb21pbmcgY2hhcmFjdGVycyBzaG91bGQgYmUgdGhyb3R0bGVkLgorICovCitzdGF0aWMgdm9pZCBteHNlcl90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCW14c2VyX3N0b3ByeCh0dHkpOworfQorCitzdGF0aWMgdm9pZCBteHNlcl91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCisJLyogc3RhcnRyeCAqLworCWluZm8tPmxkaXNjX3N0b3BfcnggPSAwOworCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJaWYgKGluZm8tPnhfY2hhcikKKwkJCWluZm8tPnhfY2hhciA9IDA7CisJCWVsc2UgeworCQkJaWYgKGluZm8tPmJvYXJkLT5jaGlwX2ZsYWcpIHsKKwkJCQlpbmZvLT5JRVIgfD0gTU9YQV9NVVNUX1JFQ1ZfSVNSOworCQkJCW91dGIoaW5mby0+SUVSLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0lFUik7CisJCQl9IGVsc2UgeworCQkJCWluZm8tPnhfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKKwkJCQlvdXRiKDAsIGluZm8tPmlvYWRkciArIFVBUlRfSUVSKTsKKwkJCQlpbmZvLT5JRVIgfD0gVUFSVF9JRVJfVEhSSTsKKwkJCQlvdXRiKGluZm8tPklFUiwgaW5mby0+aW9hZGRyICsgVUFSVF9JRVIpOworCQkJfQorCQl9CisJfQorCisJaWYgKGluZm8tPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKKwkJaW5mby0+TUNSIHw9IFVBUlRfTUNSX1JUUzsKKwkJb3V0YihpbmZvLT5NQ1IsIGluZm8tPmlvYWRkciArIFVBUlRfTUNSKTsKKwl9Cit9CisKKy8qCisgKiBteHNlcl9zdG9wKCkgYW5kIG14c2VyX3N0YXJ0KCkKKyAqCisgKiBUaGlzIHJvdXRpbmVzIGFyZSBjYWxsZWQgYmVmb3JlIHNldHRpbmcgb3IgcmVzZXR0aW5nIHR0eS0+c3RvcHBlZC4KKyAqIFRoZXkgZW5hYmxlIG9yIGRpc2FibGUgdHJhbnNtaXR0ZXIgaW50ZXJydXB0cywgYXMgbmVjZXNzYXJ5LgorICovCitzdGF0aWMgdm9pZCBteHNlcl9zdG9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwlpZiAoaW5mby0+SUVSICYgVUFSVF9JRVJfVEhSSSkgeworCQlpbmZvLT5JRVIgJj0gflVBUlRfSUVSX1RIUkk7CisJCW91dGIoaW5mby0+SUVSLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0lFUik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG14c2VyX3N0YXJ0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwlpZiAoaW5mby0+eG1pdF9jbnQgJiYgaW5mby0+eG1pdF9idWYpIHsKKwkJb3V0YihpbmZvLT5JRVIgJiB+VUFSVF9JRVJfVEhSSSwgaW5mby0+aW9hZGRyICsgVUFSVF9JRVIpOworCQlpbmZvLT5JRVIgfD0gVUFSVF9JRVJfVEhSSTsKKwkJb3V0YihpbmZvLT5JRVIsIGluZm8tPmlvYWRkciArIFVBUlRfSUVSKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbXhzZXJfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgodHR5LT50ZXJtaW9zLT5jX2NmbGFnICE9IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSB8fAorCQkJKFJFTEVWQU5UX0lGTEFHKHR0eS0+dGVybWlvcy0+Y19pZmxhZykgIT0gUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkgeworCisJCW14c2VyX2NoYW5nZV9zcGVlZChpbmZvLCBvbGRfdGVybWlvcyk7CisKKwkJaWYgKChvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpICYmCisJCQkJISh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSkgeworCQkJdHR5LT5od19zdG9wcGVkID0gMDsKKwkJCW14c2VyX3N0YXJ0KHR0eSk7CisJCX0KKwl9CisKKwkvKiBIYW5kbGUgc3cgc3RvcHBlZCAqLworCWlmICgob2xkX3Rlcm1pb3MtPmNfaWZsYWcgJiBJWE9OKSAmJgorCQkJISh0dHktPnRlcm1pb3MtPmNfaWZsYWcgJiBJWE9OKSkgeworCQl0dHktPnN0b3BwZWQgPSAwOworCisJCWlmIChpbmZvLT5ib2FyZC0+Y2hpcF9mbGFnKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkJCURJU0FCTEVfTU9YQV9NVVNUX1JYX1NPRlRXQVJFX0ZMT1dfQ09OVFJPTChpbmZvLT5pb2FkZHIpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKKwkJfQorCisJCW14c2VyX3N0YXJ0KHR0eSk7CisJfQorfQorCisvKgorICogbXhzZXJfd2FpdF91bnRpbF9zZW50KCkgLS0tIHdhaXQgdW50aWwgdGhlIHRyYW5zbWl0dGVyIGlzIGVtcHR5CisgKi8KK3N0YXRpYyB2b2lkIG14c2VyX3dhaXRfdW50aWxfc2VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBvcmlnX2ppZmZpZXMsIGNoYXJfdGltZTsKKwlpbnQgbHNyOworCisJaWYgKGluZm8tPnR5cGUgPT0gUE9SVF9VTktOT1dOKQorCQlyZXR1cm47CisKKwlpZiAoaW5mby0+eG1pdF9maWZvX3NpemUgPT0gMCkKKwkJcmV0dXJuOwkJLyogSnVzdCBpbiBjYXNlLi4uLiAqLworCisJb3JpZ19qaWZmaWVzID0gamlmZmllczsKKwkvKgorCSAqIFNldCB0aGUgY2hlY2sgaW50ZXJ2YWwgdG8gYmUgMS81IG9mIHRoZSBlc3RpbWF0ZWQgdGltZSB0bworCSAqIHNlbmQgYSBzaW5nbGUgY2hhcmFjdGVyLCBhbmQgbWFrZSBpdCBhdCBsZWFzdCAxLiAgVGhlIGNoZWNrCisJICogaW50ZXJ2YWwgc2hvdWxkIGFsc28gYmUgbGVzcyB0aGFuIHRoZSB0aW1lb3V0LgorCSAqCisJICogTm90ZTogd2UgaGF2ZSB0byB1c2UgcHJldHR5IHRpZ2h0IHRpbWluZ3MgaGVyZSB0byBzYXRpc2Z5CisJICogdGhlIE5JU1QtUENUUy4KKwkgKi8KKwljaGFyX3RpbWUgPSAoaW5mby0+dGltZW91dCAtIEhaIC8gNTApIC8gaW5mby0+eG1pdF9maWZvX3NpemU7CisJY2hhcl90aW1lID0gY2hhcl90aW1lIC8gNTsKKwlpZiAoY2hhcl90aW1lID09IDApCisJCWNoYXJfdGltZSA9IDE7CisJaWYgKHRpbWVvdXQgJiYgdGltZW91dCA8IGNoYXJfdGltZSkKKwkJY2hhcl90aW1lID0gdGltZW91dDsKKwkvKgorCSAqIElmIHRoZSB0cmFuc21pdHRlciBoYXNuJ3QgY2xlYXJlZCBpbiB0d2ljZSB0aGUgYXBwcm94aW1hdGUKKwkgKiBhbW91bnQgb2YgdGltZSB0byBzZW5kIHRoZSBlbnRpcmUgRklGTywgaXQgcHJvYmFibHkgd29uJ3QKKwkgKiBldmVyIGNsZWFyLiAgVGhpcyBhc3N1bWVzIHRoZSBVQVJUIGlzbid0IGRvaW5nIGZsb3cKKwkgKiBjb250cm9sLCB3aGljaCBpcyBjdXJyZW50bHkgdGhlIGNhc2UuICBIZW5jZSwgaWYgaXQgZXZlcgorCSAqIHRha2VzIGxvbmdlciB0aGFuIGluZm8tPnRpbWVvdXQsIHRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIGEKKwkgKiBVQVJUIGJ1ZyBvZiBzb21lIGtpbmQuICBTbywgd2UgY2xhbXAgdGhlIHRpbWVvdXQgcGFyYW1ldGVyIGF0CisJICogMippbmZvLT50aW1lb3V0LgorCSAqLworCWlmICghdGltZW91dCB8fCB0aW1lb3V0ID4gMiAqIGluZm8tPnRpbWVvdXQpCisJCXRpbWVvdXQgPSAyICogaW5mby0+dGltZW91dDsKKyNpZmRlZiBTRVJJQUxfREVCVUdfUlNfV0FJVF9VTlRJTF9TRU5UCisJcHJpbnRrKEtFUk5fREVCVUcgIkluIHJzX3dhaXRfdW50aWxfc2VudCglZCkgY2hlY2s9JWx1Li4uIiwKKwkJdGltZW91dCwgY2hhcl90aW1lKTsKKwlwcmludGsoImppZmY9JWx1Li4uIiwgamlmZmllcyk7CisjZW5kaWYKKwl3aGlsZSAoISgobHNyID0gaW5iKGluZm8tPmlvYWRkciArIFVBUlRfTFNSKSkgJiBVQVJUX0xTUl9URU1UKSkgeworI2lmZGVmIFNFUklBTF9ERUJVR19SU19XQUlUX1VOVElMX1NFTlQKKwkJcHJpbnRrKCJsc3IgPSAlZCAoamlmZj0lbHUpLi4uIiwgbHNyLCBqaWZmaWVzKTsKKyNlbmRpZgorCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoY2hhcl90aW1lKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJYnJlYWs7CisJCWlmICh0aW1lb3V0ICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgb3JpZ19qaWZmaWVzICsgdGltZW91dCkpCisJCQlicmVhazsKKwl9CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworI2lmZGVmIFNFUklBTF9ERUJVR19SU19XQUlUX1VOVElMX1NFTlQKKwlwcmludGsoImxzciA9ICVkIChqaWZmPSVsdSkuLi5kb25lXG4iLCBsc3IsIGppZmZpZXMpOworI2VuZGlmCit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHR0eV9oYW5ndXAoKSB3aGVuIGEgaGFuZ3VwIGlzIHNpZ25hbGVkLgorICovCit2b2lkIG14c2VyX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCW14c2VyX2ZsdXNoX2J1ZmZlcih0dHkpOworCW14c2VyX3NodXRkb3duKGluZm8pOworCWluZm8tPmV2ZW50ID0gMDsKKwlpbmZvLT5jb3VudCA9IDA7CisJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CisJaW5mby0+dHR5ID0gTlVMTDsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7Cit9CisKKy8qCisgKiBteHNlcl9yc19icmVhaygpIC0tLSByb3V0aW5lIHdoaWNoIHR1cm5zIHRoZSBicmVhayBoYW5kbGluZyBvbiBvciBvZmYKKyAqLworc3RhdGljIHZvaWQgbXhzZXJfcnNfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CisJaWYgKGJyZWFrX3N0YXRlID09IC0xKQorCQlvdXRiKGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUikgfCBVQVJUX0xDUl9TQkMsCisJCQlpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUik7CisJZWxzZQorCQlvdXRiKGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUikgJiB+VUFSVF9MQ1JfU0JDLAorCQkJaW5mby0+aW9hZGRyICsgVUFSVF9MQ1IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG14c2VyX3JlY2VpdmVfY2hhcnMoc3RydWN0IG14c2VyX3BvcnQgKnBvcnQsIGludCAqc3RhdHVzKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJdW5zaWduZWQgY2hhciBjaCwgZ2RsOworCWludCBpZ25vcmVkID0gMDsKKwlpbnQgY250ID0gMDsKKwlpbnQgcmVjdl9yb29tOworCWludCBtYXggPSAyNTY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5zbG9jaywgZmxhZ3MpOworCisJcmVjdl9yb29tID0gdHR5LT5yZWNlaXZlX3Jvb207CisJaWYgKChyZWN2X3Jvb20gPT0gMCkgJiYgKCFwb3J0LT5sZGlzY19zdG9wX3J4KSkKKwkJbXhzZXJfc3RvcHJ4KHR0eSk7CisKKwlpZiAocG9ydC0+Ym9hcmQtPmNoaXBfZmxhZyAhPSBNT1hBX09USEVSX1VBUlQpIHsKKworCQlpZiAoKnN0YXR1cyAmIFVBUlRfTFNSX1NQRUNJQUwpCisJCQlnb3RvIGludHJfb2xkOworCQlpZiAocG9ydC0+Ym9hcmQtPmNoaXBfZmxhZyA9PSBNT1hBX01VU1RfTVU4NjBfSFdJRCAmJgorCQkJCSgqc3RhdHVzICYgTU9YQV9NVVNUX0xTUl9SRVJSKSkKKwkJCWdvdG8gaW50cl9vbGQ7CisJCWlmICgqc3RhdHVzICYgTU9YQV9NVVNUX0xTUl9SRVJSKQorCQkJZ290byBpbnRyX29sZDsKKworCQlnZGwgPSBpbmIocG9ydC0+aW9hZGRyICsgTU9YQV9NVVNUX0dETF9SRUdJU1RFUik7CisKKwkJaWYgKHBvcnQtPmJvYXJkLT5jaGlwX2ZsYWcgPT0gTU9YQV9NVVNUX01VMTUwX0hXSUQpCisJCQlnZGwgJj0gTU9YQV9NVVNUX0dETF9NQVNLOworCQlpZiAoZ2RsID49IHJlY3Zfcm9vbSkgeworCQkJaWYgKCFwb3J0LT5sZGlzY19zdG9wX3J4KQorCQkJCW14c2VyX3N0b3ByeCh0dHkpOworCQl9CisJCXdoaWxlIChnZGwtLSkgeworCQkJY2ggPSBpbmIocG9ydC0+aW9hZGRyICsgVUFSVF9SWCk7CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCAwKTsKKwkJCWNudCsrOworCQl9CisJCWdvdG8gZW5kX2ludHI7CisJfQoraW50cl9vbGQ6CisKKwlkbyB7CisJCWlmIChtYXgtLSA8IDApCisJCQlicmVhazsKKworCQljaCA9IGluYihwb3J0LT5pb2FkZHIgKyBVQVJUX1JYKTsKKwkJaWYgKHBvcnQtPmJvYXJkLT5jaGlwX2ZsYWcgJiYgKCpzdGF0dXMgJiBVQVJUX0xTUl9PRSkpCisJCQlvdXRiKDB4MjMsIHBvcnQtPmlvYWRkciArIFVBUlRfRkNSKTsKKwkJKnN0YXR1cyAmPSBwb3J0LT5yZWFkX3N0YXR1c19tYXNrOworCQlpZiAoKnN0YXR1cyAmIHBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzaykgeworCQkJaWYgKCsraWdub3JlZCA+IDEwMCkKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWNoYXIgZmxhZyA9IDA7CisJCQlpZiAoKnN0YXR1cyAmIFVBUlRfTFNSX1NQRUNJQUwpIHsKKwkJCQlpZiAoKnN0YXR1cyAmIFVBUlRfTFNSX0JJKSB7CisJCQkJCWZsYWcgPSBUVFlfQlJFQUs7CisJCQkJCXBvcnQtPmljb3VudC5icmsrKzsKKworCQkJCQlpZiAocG9ydC0+ZmxhZ3MgJiBBU1lOQ19TQUspCisJCQkJCQlkb19TQUsodHR5KTsKKwkJCQl9IGVsc2UgaWYgKCpzdGF0dXMgJiBVQVJUX0xTUl9QRSkgeworCQkJCQlmbGFnID0gVFRZX1BBUklUWTsKKwkJCQkJcG9ydC0+aWNvdW50LnBhcml0eSsrOworCQkJCX0gZWxzZSBpZiAoKnN0YXR1cyAmIFVBUlRfTFNSX0ZFKSB7CisJCQkJCWZsYWcgPSBUVFlfRlJBTUU7CisJCQkJCXBvcnQtPmljb3VudC5mcmFtZSsrOworCQkJCX0gZWxzZSBpZiAoKnN0YXR1cyAmIFVBUlRfTFNSX09FKSB7CisJCQkJCWZsYWcgPSBUVFlfT1ZFUlJVTjsKKwkJCQkJcG9ydC0+aWNvdW50Lm92ZXJydW4rKzsKKwkJCQl9CisJCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGFnKTsKKwkJCWNudCsrOworCQkJaWYgKGNudCA+PSByZWN2X3Jvb20pIHsKKwkJCQlpZiAoIXBvcnQtPmxkaXNjX3N0b3BfcngpCisJCQkJCW14c2VyX3N0b3ByeCh0dHkpOworCQkJCWJyZWFrOworCQkJfQorCisJCX0KKworCQlpZiAocG9ydC0+Ym9hcmQtPmNoaXBfZmxhZykKKwkJCWJyZWFrOworCisJCSpzdGF0dXMgPSBpbmIocG9ydC0+aW9hZGRyICsgVUFSVF9MU1IpOworCX0gd2hpbGUgKCpzdGF0dXMgJiBVQVJUX0xTUl9EUik7CisKK2VuZF9pbnRyOgorCW14dmFyX2xvZy5yeGNudFtwb3J0LT50dHktPmluZGV4XSArPSBjbnQ7CisJcG9ydC0+bW9uX2RhdGEucnhjbnQgKz0gY250OworCXBvcnQtPm1vbl9kYXRhLnVwX3J4Y250ICs9IGNudDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5zbG9jaywgZmxhZ3MpOworCisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKK30KKworc3RhdGljIHZvaWQgbXhzZXJfdHJhbnNtaXRfY2hhcnMoc3RydWN0IG14c2VyX3BvcnQgKnBvcnQpCit7CisJaW50IGNvdW50LCBjbnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5zbG9jaywgZmxhZ3MpOworCisJaWYgKHBvcnQtPnhfY2hhcikgeworCQlvdXRiKHBvcnQtPnhfY2hhciwgcG9ydC0+aW9hZGRyICsgVUFSVF9UWCk7CisJCXBvcnQtPnhfY2hhciA9IDA7CisJCW14dmFyX2xvZy50eGNudFtwb3J0LT50dHktPmluZGV4XSsrOworCQlwb3J0LT5tb25fZGF0YS50eGNudCsrOworCQlwb3J0LT5tb25fZGF0YS51cF90eGNudCsrOworCQlwb3J0LT5pY291bnQudHgrKzsKKwkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKHBvcnQtPnhtaXRfYnVmID09IDApCisJCWdvdG8gdW5sb2NrOworCisJaWYgKChwb3J0LT54bWl0X2NudCA8PSAwKSB8fCBwb3J0LT50dHktPnN0b3BwZWQgfHwKKwkJCShwb3J0LT50dHktPmh3X3N0b3BwZWQgJiYKKwkJCShwb3J0LT50eXBlICE9IFBPUlRfMTY1NTBBKSAmJgorCQkJKCFwb3J0LT5ib2FyZC0+Y2hpcF9mbGFnKSkpIHsKKwkJcG9ydC0+SUVSICY9IH5VQVJUX0lFUl9USFJJOworCQlvdXRiKHBvcnQtPklFUiwgcG9ydC0+aW9hZGRyICsgVUFSVF9JRVIpOworCQlnb3RvIHVubG9jazsKKwl9CisKKwljbnQgPSBwb3J0LT54bWl0X2NudDsKKwljb3VudCA9IHBvcnQtPnhtaXRfZmlmb19zaXplOworCWRvIHsKKwkJb3V0Yihwb3J0LT54bWl0X2J1Zltwb3J0LT54bWl0X3RhaWwrK10sCisJCQlwb3J0LT5pb2FkZHIgKyBVQVJUX1RYKTsKKwkJcG9ydC0+eG1pdF90YWlsID0gcG9ydC0+eG1pdF90YWlsICYgKFNFUklBTF9YTUlUX1NJWkUgLSAxKTsKKwkJaWYgKC0tcG9ydC0+eG1pdF9jbnQgPD0gMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKC0tY291bnQgPiAwKTsKKwlteHZhcl9sb2cudHhjbnRbcG9ydC0+dHR5LT5pbmRleF0gKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKKworCXBvcnQtPm1vbl9kYXRhLnR4Y250ICs9IChjbnQgLSBwb3J0LT54bWl0X2NudCk7CisJcG9ydC0+bW9uX2RhdGEudXBfdHhjbnQgKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKKwlwb3J0LT5pY291bnQudHggKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKKworCWlmIChwb3J0LT54bWl0X2NudCA8IFdBS0VVUF9DSEFSUykgeworCQlzZXRfYml0KE1YU0VSX0VWRU5UX1RYTE9XLCAmcG9ydC0+ZXZlbnQpOworCQlzY2hlZHVsZV93b3JrKCZwb3J0LT50cXVldWUpOworCX0KKwlpZiAocG9ydC0+eG1pdF9jbnQgPD0gMCkgeworCQlwb3J0LT5JRVIgJj0gflVBUlRfSUVSX1RIUkk7CisJCW91dGIocG9ydC0+SUVSLCBwb3J0LT5pb2FkZHIgKyBVQVJUX0lFUik7CisJfQordW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnNsb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBzZXJpYWwgZHJpdmVyJ3MgZ2VuZXJpYyBpbnRlcnJ1cHQgcm91dGluZQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbXhzZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgc3RhdHVzLCBpaXIsIGk7CisJc3RydWN0IG14c2VyX2JvYXJkICpicmQgPSBOVUxMOworCXN0cnVjdCBteHNlcl9wb3J0ICpwb3J0OworCWludCBtYXgsIGlycWJpdHMsIGJpdHMsIG1zcjsKKwlpbnQgcGFzc19jb3VudGVyID0gMDsKKwl1bnNpZ25lZCBpbnQgaW50X2NudDsKKwlpbnQgaGFuZGxlZCA9IElSUV9OT05FOworCisJZm9yIChpID0gMDsgaSA8IE1YU0VSX0JPQVJEUzsgaSsrKQorCQlpZiAoZGV2X2lkID09ICZteHNlcl9ib2FyZHNbaV0pIHsKKwkJCWJyZCA9IGRldl9pZDsKKwkJCWJyZWFrOworCQl9CisKKwlpZiAoaSA9PSBNWFNFUl9CT0FSRFMpCisJCWdvdG8gaXJxX3N0b3A7CisJaWYgKGJyZCA9PSBOVUxMKQorCQlnb3RvIGlycV9zdG9wOworCW1heCA9IGJyZC0+aW5mby0+bnBvcnRzOworCXdoaWxlICgxKSB7CisJCWlycWJpdHMgPSBpbmIoYnJkLT52ZWN0b3IpICYgYnJkLT52ZWN0b3JfbWFzazsKKwkJaWYgKGlycWJpdHMgPT0gYnJkLT52ZWN0b3JfbWFzaykKKwkJCWJyZWFrOworCisJCWhhbmRsZWQgPSBJUlFfSEFORExFRDsKKwkJZm9yIChpID0gMCwgYml0cyA9IDE7IGkgPCBtYXg7IGkrKywgaXJxYml0cyB8PSBiaXRzLCBiaXRzIDw8PSAxKSB7CisJCQlpZiAoaXJxYml0cyA9PSBicmQtPnZlY3Rvcl9tYXNrKQorCQkJCWJyZWFrOworCQkJaWYgKGJpdHMgJiBpcnFiaXRzKQorCQkJCWNvbnRpbnVlOworCQkJcG9ydCA9ICZicmQtPnBvcnRzW2ldOworCisJCQlpbnRfY250ID0gMDsKKwkJCWRvIHsKKwkJCQlpaXIgPSBpbmIocG9ydC0+aW9hZGRyICsgVUFSVF9JSVIpOworCQkJCWlmIChpaXIgJiBVQVJUX0lJUl9OT19JTlQpCisJCQkJCWJyZWFrOworCQkJCWlpciAmPSBNT1hBX01VU1RfSUlSX01BU0s7CisJCQkJaWYgKCFwb3J0LT50dHkpIHsKKwkJCQkJc3RhdHVzID0gaW5iKHBvcnQtPmlvYWRkciArIFVBUlRfTFNSKTsKKwkJCQkJb3V0YigweDI3LCBwb3J0LT5pb2FkZHIgKyBVQVJUX0ZDUik7CisJCQkJCWluYihwb3J0LT5pb2FkZHIgKyBVQVJUX01TUik7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXN0YXR1cyA9IGluYihwb3J0LT5pb2FkZHIgKyBVQVJUX0xTUik7CisKKwkJCQlpZiAoc3RhdHVzICYgVUFSVF9MU1JfUEUpCisJCQkJCXBvcnQtPmVycl9zaGFkb3cgfD0gTlBQSV9OT1RJRllfUEFSSVRZOworCQkJCWlmIChzdGF0dXMgJiBVQVJUX0xTUl9GRSkKKwkJCQkJcG9ydC0+ZXJyX3NoYWRvdyB8PSBOUFBJX05PVElGWV9GUkFNSU5HOworCQkJCWlmIChzdGF0dXMgJiBVQVJUX0xTUl9PRSkKKwkJCQkJcG9ydC0+ZXJyX3NoYWRvdyB8PQorCQkJCQkJTlBQSV9OT1RJRllfSFdfT1ZFUlJVTjsKKwkJCQlpZiAoc3RhdHVzICYgVUFSVF9MU1JfQkkpCisJCQkJCXBvcnQtPmVycl9zaGFkb3cgfD0gTlBQSV9OT1RJRllfQlJFQUs7CisKKwkJCQlpZiAocG9ydC0+Ym9hcmQtPmNoaXBfZmxhZykgeworCQkJCQlpZiAoaWlyID09IE1PWEFfTVVTVF9JSVJfR0RBIHx8CisJCQkJCSAgICBpaXIgPT0gTU9YQV9NVVNUX0lJUl9SREEgfHwKKwkJCQkJICAgIGlpciA9PSBNT1hBX01VU1RfSUlSX1JUTyB8fAorCQkJCQkgICAgaWlyID09IE1PWEFfTVVTVF9JSVJfTFNSKQorCQkJCQkJbXhzZXJfcmVjZWl2ZV9jaGFycyhwb3J0LAorCQkJCQkJCQkmc3RhdHVzKTsKKworCQkJCX0gZWxzZSB7CisJCQkJCXN0YXR1cyAmPSBwb3J0LT5yZWFkX3N0YXR1c19tYXNrOworCQkJCQlpZiAoc3RhdHVzICYgVUFSVF9MU1JfRFIpCisJCQkJCQlteHNlcl9yZWNlaXZlX2NoYXJzKHBvcnQsCisJCQkJCQkJCSZzdGF0dXMpOworCQkJCX0KKwkJCQltc3IgPSBpbmIocG9ydC0+aW9hZGRyICsgVUFSVF9NU1IpOworCQkJCWlmIChtc3IgJiBVQVJUX01TUl9BTllfREVMVEEpCisJCQkJCW14c2VyX2NoZWNrX21vZGVtX3N0YXR1cyhwb3J0LCBtc3IpOworCisJCQkJaWYgKHBvcnQtPmJvYXJkLT5jaGlwX2ZsYWcpIHsKKwkJCQkJaWYgKGlpciA9PSAweDAyICYmIChzdGF0dXMgJgorCQkJCQkJCQlVQVJUX0xTUl9USFJFKSkKKwkJCQkJCW14c2VyX3RyYW5zbWl0X2NoYXJzKHBvcnQpOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzdGF0dXMgJiBVQVJUX0xTUl9USFJFKQorCQkJCQkJbXhzZXJfdHJhbnNtaXRfY2hhcnMocG9ydCk7CisJCQkJfQorCQkJfSB3aGlsZSAoaW50X2NudCsrIDwgTVhTRVJfSVNSX1BBU1NfTElNSVQpOworCQl9CisJCWlmIChwYXNzX2NvdW50ZXIrKyA+IE1YU0VSX0lTUl9QQVNTX0xJTUlUKQorCQkJYnJlYWs7CS8qIFByZXZlbnQgaW5maW5pdGUgbG9vcHMgKi8KKwl9CisKK2lycV9zdG9wOgorCXJldHVybiBoYW5kbGVkOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIG14c2VyX29wcyA9IHsKKwkub3BlbiA9IG14c2VyX29wZW4sCisJLmNsb3NlID0gbXhzZXJfY2xvc2UsCisJLndyaXRlID0gbXhzZXJfd3JpdGUsCisJLnB1dF9jaGFyID0gbXhzZXJfcHV0X2NoYXIsCisJLmZsdXNoX2NoYXJzID0gbXhzZXJfZmx1c2hfY2hhcnMsCisJLndyaXRlX3Jvb20gPSBteHNlcl93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPSBteHNlcl9jaGFyc19pbl9idWZmZXIsCisJLmZsdXNoX2J1ZmZlciA9IG14c2VyX2ZsdXNoX2J1ZmZlciwKKwkuaW9jdGwgPSBteHNlcl9pb2N0bCwKKwkudGhyb3R0bGUgPSBteHNlcl90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9IG14c2VyX3VudGhyb3R0bGUsCisJLnNldF90ZXJtaW9zID0gbXhzZXJfc2V0X3Rlcm1pb3MsCisJLnN0b3AgPSBteHNlcl9zdG9wLAorCS5zdGFydCA9IG14c2VyX3N0YXJ0LAorCS5oYW5ndXAgPSBteHNlcl9oYW5ndXAsCisJLmJyZWFrX2N0bCA9IG14c2VyX3JzX2JyZWFrLAorCS53YWl0X3VudGlsX3NlbnQgPSBteHNlcl93YWl0X3VudGlsX3NlbnQsCisJLnRpb2NtZ2V0ID0gbXhzZXJfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gbXhzZXJfdGlvY21zZXQsCit9OworCisvKgorICogVGhlIE1PWEEgU21hcnRpby9JbmR1c3RpbyBzZXJpYWwgZHJpdmVyIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiBjb2RlIQorICovCisKK3N0YXRpYyB2b2lkIG14c2VyX3JlbGVhc2VfcmVzKHN0cnVjdCBteHNlcl9ib2FyZCAqYnJkLCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJdW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoaXJxKQorCQlmcmVlX2lycShicmQtPmlycSwgYnJkKTsKKwlpZiAocGRldiAhPSBOVUxMKSB7CS8qIFBDSSAqLworI2lmZGVmIENPTkZJR19QQ0kKKwkJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDIpOworCQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMyk7CisJCXBjaV9kZXZfcHV0KHBkZXYpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJcmVsZWFzZV9yZWdpb24oYnJkLT5wb3J0c1swXS5pb2FkZHIsIDggKiBicmQtPmluZm8tPm5wb3J0cyk7CisJCXJlbGVhc2VfcmVnaW9uKGJyZC0+dmVjdG9yLCAxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG14c2VyX2luaXRicmQoc3RydWN0IG14c2VyX2JvYXJkICpicmQsCisJCXN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBteHNlcl9wb3J0ICppbmZvOworCXVuc2lnbmVkIGludCBpOworCWludCByZXR2YWw7CisKKwlwcmludGsoS0VSTl9JTkZPICJtYXguIGJhdWQgcmF0ZSA9ICVkIGJwcy5cbiIsIGJyZC0+cG9ydHNbMF0ubWF4X2JhdWQpOworCisJZm9yIChpID0gMDsgaSA8IGJyZC0+aW5mby0+bnBvcnRzOyBpKyspIHsKKwkJaW5mbyA9ICZicmQtPnBvcnRzW2ldOworCQlpbmZvLT5ib2FyZCA9IGJyZDsKKwkJaW5mby0+c3RvcF9yeCA9IDA7CisJCWluZm8tPmxkaXNjX3N0b3BfcnggPSAwOworCisJCS8qIEVuaGFuY2UgbW9kZSBlbmFibGVkIGhlcmUgKi8KKwkJaWYgKGJyZC0+Y2hpcF9mbGFnICE9IE1PWEFfT1RIRVJfVUFSVCkKKwkJCUVOQUJMRV9NT1hBX01VU1RfRU5DSEFOQ0VfTU9ERShpbmZvLT5pb2FkZHIpOworCisJCWluZm8tPmZsYWdzID0gQVNZTkNfU0hBUkVfSVJROworCQlpbmZvLT50eXBlID0gYnJkLT51YXJ0X3R5cGU7CisKKwkJcHJvY2Vzc190eHJ4X2ZpZm8oaW5mbyk7CisKKwkJaW5mby0+Y3VzdG9tX2Rpdmlzb3IgPSBpbmZvLT5iYXVkX2Jhc2UgKiAxNjsKKwkJaW5mby0+Y2xvc2VfZGVsYXkgPSA1ICogSFogLyAxMDsKKwkJaW5mby0+Y2xvc2luZ193YWl0ID0gMzAgKiBIWjsKKwkJSU5JVF9XT1JLKCZpbmZvLT50cXVldWUsIG14c2VyX2RvX3NvZnRpbnQpOworCQlpbmZvLT5ub3JtYWxfdGVybWlvcyA9IG14dmFyX3Nkcml2ZXItPmluaXRfdGVybWlvczsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+b3Blbl93YWl0KTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y2xvc2Vfd2FpdCk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKKwkJbWVtc2V0KCZpbmZvLT5tb25fZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBteHNlcl9tb24pKTsKKwkJaW5mby0+ZXJyX3NoYWRvdyA9IDA7CisJCXNwaW5fbG9ja19pbml0KCZpbmZvLT5zbG9jayk7CisKKwkJLyogYmVmb3JlIHNldCBJTlQgSVNSLCBkaXNhYmxlIGFsbCBpbnQgKi8KKwkJb3V0YihpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9JRVIpICYgMHhmMCwKKwkJCWluZm8tPmlvYWRkciArIFVBUlRfSUVSKTsKKwl9CisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgSVJRIGlmIG5lY2Vzc2FyeQorCSAqLworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoYnJkLT5pcnEsIG14c2VyX2ludGVycnVwdCwKKwkJCShicmQtPnBvcnRzWzBdLmZsYWdzICYgQVNZTkNfU0hBUkVfSVJRKSA/IElSUUZfU0hBUkVEIDoKKwkJCUlSUUZfRElTQUJMRUQsICJteHNlciIsIGJyZCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9FUlIgIkJvYXJkICVzOiBSZXF1ZXN0IGlycSBmYWlsZWQsIElSUSAoJWQpIG1heSAiCisJCQkiY29uZmxpY3Qgd2l0aCBhbm90aGVyIGRldmljZS5cbiIsCisJCQlicmQtPmluZm8tPm5hbWUsIGJyZC0+aXJxKTsKKwkJLyogV2UgaG9sZCByZXNvdXJjZXMsIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGVtLiAqLworCQlteHNlcl9yZWxlYXNlX3JlcyhicmQsIHBkZXYsIDApOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgbXhzZXJfZ2V0X0lTQV9jb25mKGludCBjYXAsIHN0cnVjdCBteHNlcl9ib2FyZCAqYnJkKQoreworCWludCBpZCwgaSwgYml0czsKKwl1bnNpZ25lZCBzaG9ydCByZWdzWzE2XSwgaXJxOworCXVuc2lnbmVkIGNoYXIgc2NyYXRjaCwgc2NyYXRjaDI7CisKKwlicmQtPmNoaXBfZmxhZyA9IE1PWEFfT1RIRVJfVUFSVDsKKworCWlkID0gbXhzZXJfcmVhZF9yZWdpc3RlcihjYXAsIHJlZ3MpOworCXN3aXRjaCAoaWQpIHsKKwljYXNlIEMxNjhfQVNJQ19JRDoKKwkJYnJkLT5pbmZvID0gJm14c2VyX2NhcmRzWzBdOworCQlicmVhazsKKwljYXNlIEMxMDRfQVNJQ19JRDoKKwkJYnJkLT5pbmZvID0gJm14c2VyX2NhcmRzWzFdOworCQlicmVhazsKKwljYXNlIENJMTA0Sl9BU0lDX0lEOgorCQlicmQtPmluZm8gPSAmbXhzZXJfY2FyZHNbMl07CisJCWJyZWFrOworCWNhc2UgQzEwMl9BU0lDX0lEOgorCQlicmQtPmluZm8gPSAmbXhzZXJfY2FyZHNbNV07CisJCWJyZWFrOworCWNhc2UgQ0kxMzJfQVNJQ19JRDoKKwkJYnJkLT5pbmZvID0gJm14c2VyX2NhcmRzWzZdOworCQlicmVhazsKKwljYXNlIENJMTM0X0FTSUNfSUQ6CisJCWJyZC0+aW5mbyA9ICZteHNlcl9jYXJkc1s3XTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJaXJxID0gMDsKKwkvKiBzb21lIElTQSBjYXJkcyBoYXZlIDIgcG9ydHMsIGJ1dCB3ZSB3YW50IHRvIHNlZSB0aGVtIGFzIDQtcG9ydCAod2h5PykKKwkgICBGbGFnLWhhY2sgY2hlY2tzIGlmIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHJlYWQgYXMgMi1wb3J0IGhlcmUuICovCisJaWYgKGJyZC0+aW5mby0+bnBvcnRzID09IDIgfHwgKGJyZC0+aW5mby0+ZmxhZ3MgJiBNWFNFUl9IQVMyKSkgeworCQlpcnEgPSByZWdzWzldICYgMHhGMDAwOworCQlpcnEgPSBpcnEgfCAoaXJxID4+IDQpOworCQlpZiAoaXJxICE9IChyZWdzWzldICYgMHhGRjAwKSkKKwkJCXJldHVybiBNWFNFUl9FUlJfSVJRX0NPTkZMSVQ7CisJfSBlbHNlIGlmIChicmQtPmluZm8tPm5wb3J0cyA9PSA0KSB7CisJCWlycSA9IHJlZ3NbOV0gJiAweEYwMDA7CisJCWlycSA9IGlycSB8IChpcnEgPj4gNCk7CisJCWlycSA9IGlycSB8IChpcnEgPj4gOCk7CisJCWlmIChpcnEgIT0gcmVnc1s5XSkKKwkJCXJldHVybiBNWFNFUl9FUlJfSVJRX0NPTkZMSVQ7CisJfSBlbHNlIGlmIChicmQtPmluZm8tPm5wb3J0cyA9PSA4KSB7CisJCWlycSA9IHJlZ3NbOV0gJiAweEYwMDA7CisJCWlycSA9IGlycSB8IChpcnEgPj4gNCk7CisJCWlycSA9IGlycSB8IChpcnEgPj4gOCk7CisJCWlmICgoaXJxICE9IHJlZ3NbOV0pIHx8IChpcnEgIT0gcmVnc1sxMF0pKQorCQkJcmV0dXJuIE1YU0VSX0VSUl9JUlFfQ09ORkxJVDsKKwl9CisKKwlpZiAoIWlycSkKKwkJcmV0dXJuIE1YU0VSX0VSUl9JUlE7CisJYnJkLT5pcnEgPSAoKGludCkoaXJxICYgMHhGMDAwKSA+PiAxMik7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJYnJkLT5wb3J0c1tpXS5pb2FkZHIgPSAoaW50KSByZWdzW2kgKyAxXSAmIDB4RkZGODsKKwlpZiAoKHJlZ3NbMTJdICYgMHg4MCkgPT0gMCkKKwkJcmV0dXJuIE1YU0VSX0VSUl9WRUNUT1I7CisJYnJkLT52ZWN0b3IgPSAoaW50KXJlZ3NbMTFdOwkvKiBpbnRlcnJ1cHQgdmVjdG9yICovCisJaWYgKGlkID09IDEpCisJCWJyZC0+dmVjdG9yX21hc2sgPSAweDAwRkY7CisJZWxzZQorCQlicmQtPnZlY3Rvcl9tYXNrID0gMHgwMDBGOworCWZvciAoaSA9IDcsIGJpdHMgPSAweDAxMDA7IGkgPj0gMDsgaS0tLCBiaXRzIDw8PSAxKSB7CisJCWlmIChyZWdzWzEyXSAmIGJpdHMpIHsKKwkJCWJyZC0+cG9ydHNbaV0uYmF1ZF9iYXNlID0gOTIxNjAwOworCQkJYnJkLT5wb3J0c1tpXS5tYXhfYmF1ZCA9IDkyMTYwMDsKKwkJfSBlbHNlIHsKKwkJCWJyZC0+cG9ydHNbaV0uYmF1ZF9iYXNlID0gMTE1MjAwOworCQkJYnJkLT5wb3J0c1tpXS5tYXhfYmF1ZCA9IDExNTIwMDsKKwkJfQorCX0KKwlzY3JhdGNoMiA9IGluYihjYXAgKyBVQVJUX0xDUikgJiAoflVBUlRfTENSX0RMQUIpOworCW91dGIoc2NyYXRjaDIgfCBVQVJUX0xDUl9ETEFCLCBjYXAgKyBVQVJUX0xDUik7CisJb3V0YigwLCBjYXAgKyBVQVJUX0VGUik7CS8qIEVGUiBpcyB0aGUgc2FtZSBhcyBGQ1IgKi8KKwlvdXRiKHNjcmF0Y2gyLCBjYXAgKyBVQVJUX0xDUik7CisJb3V0YihVQVJUX0ZDUl9FTkFCTEVfRklGTywgY2FwICsgVUFSVF9GQ1IpOworCXNjcmF0Y2ggPSBpbmIoY2FwICsgVUFSVF9JSVIpOworCisJaWYgKHNjcmF0Y2ggJiAweEMwKQorCQlicmQtPnVhcnRfdHlwZSA9IFBPUlRfMTY1NTBBOworCWVsc2UKKwkJYnJkLT51YXJ0X3R5cGUgPSBQT1JUXzE2NDUwOworCWlmICghcmVxdWVzdF9yZWdpb24oYnJkLT5wb3J0c1swXS5pb2FkZHIsIDggKiBicmQtPmluZm8tPm5wb3J0cywKKwkJCSJteHNlcihJTykiKSkKKwkJcmV0dXJuIE1YU0VSX0VSUl9JT0FERFI7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihicmQtPnZlY3RvciwgMSwgIm14c2VyKHZlY3RvcikiKSkgeworCQlyZWxlYXNlX3JlZ2lvbihicmQtPnBvcnRzWzBdLmlvYWRkciwgOCAqIGJyZC0+aW5mby0+bnBvcnRzKTsKKwkJcmV0dXJuIE1YU0VSX0VSUl9WRUNUT1I7CisJfQorCXJldHVybiBicmQtPmluZm8tPm5wb3J0czsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbXhzZXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBteHNlcl9ib2FyZCAqYnJkOworCXVuc2lnbmVkIGludCBpLCBqOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyZXNzOworCWludCByZXR2YWwgPSAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IE1YU0VSX0JPQVJEUzsgaSsrKQorCQlpZiAobXhzZXJfYm9hcmRzW2ldLmluZm8gPT0gTlVMTCkKKwkJCWJyZWFrOworCisJaWYgKGkgPj0gTVhTRVJfQk9BUkRTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVG9vIG1hbnkgU21hcnRpby9JbmR1c3RpbyBmYW1pbHkgYm9hcmRzIGZvdW5kICIKKwkJCSIobWF4aW11bSAlZCksIGJvYXJkIG5vdCBjb25maWd1cmVkXG4iLCBNWFNFUl9CT0FSRFMpOworCQlnb3RvIGVycjsKKwl9CisKKwlicmQgPSAmbXhzZXJfYm9hcmRzW2ldOworCWJyZC0+aWR4ID0gaSAqIE1YU0VSX1BPUlRTX1BFUl9CT0FSRDsKKwlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBNT1hBICVzIGJvYXJkIChCdXNObz0lZCwgRGV2Tm89JWQpXG4iLAorCQlteHNlcl9jYXJkc1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAorCQlwZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QocGRldi0+ZGV2Zm4pKTsKKworCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNb3hhIFNtYXJ0SS9PIFBDSSBlbmFibGUgZmFpbCAhXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJLyogaW8gYWRkcmVzcyAqLworCWlvYWRkcmVzcyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwlyZXR2YWwgPSBwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgMiwgIm14c2VyKElPKSIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyOworCisJYnJkLT5pbmZvID0gJm14c2VyX2NhcmRzW2VudC0+ZHJpdmVyX2RhdGFdOworCWZvciAoaSA9IDA7IGkgPCBicmQtPmluZm8tPm5wb3J0czsgaSsrKQorCQlicmQtPnBvcnRzW2ldLmlvYWRkciA9IGlvYWRkcmVzcyArIDggKiBpOworCisJLyogdmVjdG9yICovCisJaW9hZGRyZXNzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDMpOworCXJldHZhbCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAzLCAibXhzZXIodmVjdG9yKSIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX3JlbGlvOworCWJyZC0+dmVjdG9yID0gaW9hZGRyZXNzOworCisJLyogaXJxICovCisJYnJkLT5pcnEgPSBwZGV2LT5pcnE7CisKKwlicmQtPmNoaXBfZmxhZyA9IENoZWNrSXNNb3hhTXVzdChicmQtPnBvcnRzWzBdLmlvYWRkcik7CisJYnJkLT51YXJ0X3R5cGUgPSBQT1JUXzE2NTUwQTsKKwlicmQtPnZlY3Rvcl9tYXNrID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBicmQtPmluZm8tPm5wb3J0czsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBVQVJUX0lORk9fTlVNOyBqKyspIHsKKwkJCWlmIChHcGNpX3VhcnRfaW5mb1tqXS50eXBlID09IGJyZC0+Y2hpcF9mbGFnKSB7CisJCQkJYnJkLT5wb3J0c1tpXS5tYXhfYmF1ZCA9CisJCQkJCUdwY2lfdWFydF9pbmZvW2pdLm1heF9iYXVkOworCisJCQkJLyogZXhjZXB0aW9uLi4uLkNQLTEwMiAqLworCQkJCWlmIChicmQtPmluZm8tPmZsYWdzICYgTVhTRVJfSElHSEJBVUQpCisJCQkJCWJyZC0+cG9ydHNbaV0ubWF4X2JhdWQgPSA5MjE2MDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYnJkLT5jaGlwX2ZsYWcgPT0gTU9YQV9NVVNUX01VODYwX0hXSUQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGJyZC0+aW5mby0+bnBvcnRzOyBpKyspIHsKKwkJCWlmIChpIDwgNCkKKwkJCQlicmQtPnBvcnRzW2ldLm9wbW9kZV9pb2FkZHIgPSBpb2FkZHJlc3MgKyA0OworCQkJZWxzZQorCQkJCWJyZC0+cG9ydHNbaV0ub3Btb2RlX2lvYWRkciA9IGlvYWRkcmVzcyArIDB4MGM7CisJCX0KKwkJb3V0YigwLCBpb2FkZHJlc3MgKyA0KTsJLyogZGVmYXVsdCBzZXQgdG8gUlMyMzIgbW9kZSAqLworCQlvdXRiKDAsIGlvYWRkcmVzcyArIDB4MGMpOwkvKiBkZWZhdWx0IHNldCB0byBSUzIzMiBtb2RlICovCisJfQorCisJZm9yIChpID0gMDsgaSA8IGJyZC0+aW5mby0+bnBvcnRzOyBpKyspIHsKKwkJYnJkLT52ZWN0b3JfbWFzayB8PSAoMSA8PCBpKTsKKwkJYnJkLT5wb3J0c1tpXS5iYXVkX2Jhc2UgPSA5MjE2MDA7CisJfQorCisJLyogbXhzZXJfaW5pdGJyZCB3aWxsIGhvb2sgSVNSLiAqLworCWlmIChteHNlcl9pbml0YnJkKGJyZCwgcGRldikgPCAwKQorCQlnb3RvIGVycl9yZWx2ZWM7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnJkLT5pbmZvLT5ucG9ydHM7IGkrKykKKwkJdHR5X3JlZ2lzdGVyX2RldmljZShteHZhcl9zZHJpdmVyLCBicmQtPmlkeCArIGksICZwZGV2LT5kZXYpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGJyZCk7CisKKwlyZXR1cm4gMDsKK2Vycl9yZWx2ZWM6CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDMpOworZXJyX3JlbGlvOgorCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAyKTsKKwlicmQtPmluZm8gPSBOVUxMOworZXJyOgorCXJldHVybiByZXR2YWw7CisjZWxzZQorCXJldHVybiAtRU5PREVWOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBteHNlcl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG14c2VyX2JvYXJkICpicmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnJkLT5pbmZvLT5ucG9ydHM7IGkrKykKKwkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKG14dmFyX3Nkcml2ZXIsIGJyZC0+aWR4ICsgaSk7CisKKwlteHNlcl9yZWxlYXNlX3JlcyhicmQsIHBkZXYsIDEpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbXhzZXJfZHJpdmVyID0geworCS5uYW1lID0gIm14c2VyIiwKKwkuaWRfdGFibGUgPSBteHNlcl9wY2licmRzLAorCS5wcm9iZSA9IG14c2VyX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChteHNlcl9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBteHNlcl9tb2R1bGVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBteHNlcl9ib2FyZCAqYnJkOworCXVuc2lnbmVkIGxvbmcgY2FwOworCXVuc2lnbmVkIGludCBpLCBtLCBpc2Fsb29wOworCWludCByZXR2YWwsIGI7CisKKwlwcl9kZWJ1ZygiTG9hZGluZyBtb2R1bGUgbXhzZXIgLi4uXG4iKTsKKworCW14dmFyX3Nkcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKE1YU0VSX1BPUlRTICsgMSk7CisJaWYgKCFteHZhcl9zZHJpdmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2tfaW5pdCgmZ21fbG9jayk7CisKKwlwcmludGsoS0VSTl9JTkZPICJNT1hBIFNtYXJ0aW8vSW5kdXN0aW8gZmFtaWx5IGRyaXZlciB2ZXJzaW9uICVzXG4iLAorCQlNWFNFUl9WRVJTSU9OKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHR0eV9kcml2ZXIgc3RydWN0dXJlICovCisJbXh2YXJfc2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlteHZhcl9zZHJpdmVyLT5tYWdpYyA9IFRUWV9EUklWRVJfTUFHSUM7CisJbXh2YXJfc2RyaXZlci0+bmFtZSA9ICJ0dHlNSSI7CisJbXh2YXJfc2RyaXZlci0+bWFqb3IgPSB0dHltYWpvcjsKKwlteHZhcl9zZHJpdmVyLT5taW5vcl9zdGFydCA9IDA7CisJbXh2YXJfc2RyaXZlci0+bnVtID0gTVhTRVJfUE9SVFMgKyAxOworCW14dmFyX3Nkcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOworCW14dmFyX3Nkcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJbXh2YXJfc2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOworCW14dmFyX3Nkcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDB8Q1M4fENSRUFEfEhVUENMfENMT0NBTDsKKwlteHZhcl9zZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVd8VFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKKwl0dHlfc2V0X29wZXJhdGlvbnMobXh2YXJfc2RyaXZlciwgJm14c2VyX29wcyk7CisKKwlyZXR2YWwgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKG14dmFyX3Nkcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBpbnN0YWxsIE1PWEEgU21hcnRpby9JbmR1c3RpbyBmYW1pbHkgIgorCQkJCSJ0dHkgZHJpdmVyICFcbiIpOworCQlnb3RvIGVycl9wdXQ7CisJfQorCisJbXh2YXJfZGlhZ2ZsYWcgPSAwOworCisJbSA9IDA7CisJLyogU3RhcnQgZmluZGluZyBJU0EgYm9hcmRzIGhlcmUgKi8KKwlmb3IgKGlzYWxvb3AgPSAwOyBpc2Fsb29wIDwgMjsgaXNhbG9vcCsrKQorCQlmb3IgKGIgPSAwOyBiIDwgTVhTRVJfQk9BUkRTICYmIG0gPCBNWFNFUl9CT0FSRFM7IGIrKykgeworCQkJaWYgKCFpc2Fsb29wKQorCQkJCWNhcCA9IG14c2VyQm9hcmRDQVBbYl07IC8qIHByZWRlZmluZWQgKi8KKwkJCWVsc2UKKwkJCQljYXAgPSBpb2FkZHJbYl07IC8qIG1vZHVsZSBwYXJhbSAqLworCisJCQlpZiAoIWNhcCkKKwkJCQljb250aW51ZTsKKworCQkJYnJkID0gJm14c2VyX2JvYXJkc1ttXTsKKwkJCXJldHZhbCA9IG14c2VyX2dldF9JU0FfY29uZihjYXAsIGJyZCk7CisKKwkJCWlmIChyZXR2YWwgIT0gMCkKKwkJCQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBNT1hBICVzIGJvYXJkICIKKwkJCQkJIihDQVA9MHgleClcbiIsCisJCQkJCWJyZC0+aW5mby0+bmFtZSwgaW9hZGRyW2JdKTsKKworCQkJaWYgKHJldHZhbCA8PSAwKSB7CisJCQkJaWYgKHJldHZhbCA9PSBNWFNFUl9FUlJfSVJRKQorCQkJCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgaW50ZXJydXB0ICIKKwkJCQkJCSJudW1iZXIsIGJvYXJkIG5vdCAiCisJCQkJCQkiY29uZmlndXJlZFxuIik7CisJCQkJZWxzZSBpZiAocmV0dmFsID09IE1YU0VSX0VSUl9JUlFfQ09ORkxJVCkKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGludGVycnVwdCAiCisJCQkJCQkibnVtYmVyLCBib2FyZCBub3QgIgorCQkJCQkJImNvbmZpZ3VyZWRcbiIpOworCQkJCWVsc2UgaWYgKHJldHZhbCA9PSBNWFNFUl9FUlJfVkVDVE9SKQorCQkJCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgaW50ZXJydXB0ICIKKwkJCQkJCSJ2ZWN0b3IsIGJvYXJkIG5vdCAiCisJCQkJCQkiY29uZmlndXJlZFxuIik7CisJCQkJZWxzZSBpZiAocmV0dmFsID09IE1YU0VSX0VSUl9JT0FERFIpCisJCQkJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBJL08gYWRkcmVzcywgIgorCQkJCQkJImJvYXJkIG5vdCBjb25maWd1cmVkXG4iKTsKKworCQkJCWJyZC0+aW5mbyA9IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIG14c2VyX2luaXRicmQgd2lsbCBob29rIElTUi4gKi8KKwkJCWlmIChteHNlcl9pbml0YnJkKGJyZCwgTlVMTCkgPCAwKSB7CisJCQkJYnJkLT5pbmZvID0gTlVMTDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYnJkLT5pZHggPSBtICogTVhTRVJfUE9SVFNfUEVSX0JPQVJEOworCQkJZm9yIChpID0gMDsgaSA8IGJyZC0+aW5mby0+bnBvcnRzOyBpKyspCisJCQkJdHR5X3JlZ2lzdGVyX2RldmljZShteHZhcl9zZHJpdmVyLCBicmQtPmlkeCArIGksCisJCQkJCQlOVUxMKTsKKworCQkJbSsrOworCQl9CisKKwlyZXR2YWwgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZteHNlcl9kcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCByZWdpc3RlciBwY2kgZHJpdmVyXG4iKTsKKwkJaWYgKCFtKSB7CisJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJZ290byBlcnJfdW5yOworCQl9IC8qIGVsc2U6IHdlIGhhdmUgc29tZSBJU0EgY2FyZHMgdW5kZXIgY29udHJvbCAqLworCX0KKworCXByX2RlYnVnKCJEb25lLlxuIik7CisKKwlyZXR1cm4gMDsKK2Vycl91bnI6CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKG14dmFyX3Nkcml2ZXIpOworZXJyX3B1dDoKKwlwdXRfdHR5X2RyaXZlcihteHZhcl9zZHJpdmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXhzZXJfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgajsKKworCXByX2RlYnVnKCJVbmxvYWRpbmcgbW9kdWxlIG14c2VyIC4uLlxuIik7CisKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm14c2VyX2RyaXZlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVhTRVJfQk9BUkRTOyBpKyspIC8qIElTQSByZW1haW5zICovCisJCWlmIChteHNlcl9ib2FyZHNbaV0uaW5mbyAhPSBOVUxMKQorCQkJZm9yIChqID0gMDsgaiA8IG14c2VyX2JvYXJkc1tpXS5pbmZvLT5ucG9ydHM7IGorKykKKwkJCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UobXh2YXJfc2RyaXZlciwKKwkJCQkJCW14c2VyX2JvYXJkc1tpXS5pZHggKyBqKTsKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIobXh2YXJfc2RyaXZlcik7CisJcHV0X3R0eV9kcml2ZXIobXh2YXJfc2RyaXZlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVhTRVJfQk9BUkRTOyBpKyspCisJCWlmIChteHNlcl9ib2FyZHNbaV0uaW5mbyAhPSBOVUxMKQorCQkJbXhzZXJfcmVsZWFzZV9yZXMoJm14c2VyX2JvYXJkc1tpXSwgTlVMTCwgMSk7CisKKwlwcl9kZWJ1ZygiRG9uZS5cbiIpOworfQorCittb2R1bGVfaW5pdChteHNlcl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChteHNlcl9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXhzZXJfbmV3LmggYi9kcml2ZXJzL2NoYXIvbXhzZXJfbmV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4ZjBlYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9teHNlcl9uZXcuaApAQCAtMCwwICsxLDQ1MCBAQAorI2lmbmRlZiBfTVhTRVJfSAorI2RlZmluZSBfTVhTRVJfSAorCisvKgorICoJU2VtaS1wdWJsaWMgY29udHJvbCBpbnRlcmZhY2VzCisgKi8KKworLyoKKyAqCU1PWEEgaW9jdGxzCisgKi8KKworI2RlZmluZSBNT1hBCQkJMHg0MDAKKyNkZWZpbmUgTU9YQV9HRVREQVRBQ09VTlQJKE1PWEEgKyAyMykKKyNkZWZpbmUJTU9YQV9HRVRfQ09ORgkJKE1PWEEgKyAzNSkKKyNkZWZpbmUgTU9YQV9ESUFHTk9TRQkJKE1PWEEgKyA1MCkKKyNkZWZpbmUgTU9YQV9DSEtQT1JURU5BQkxFCShNT1hBICsgNjApCisjZGVmaW5lIE1PWEFfSGlnaFNwZWVkT24JKE1PWEEgKyA2MSkKKyNkZWZpbmUgTU9YQV9HRVRfTUFKT1IJCShNT1hBICsgNjMpCisjZGVmaW5lIE1PWEFfR0VUX0NVTUFKT1IJKE1PWEEgKyA2NCkKKyNkZWZpbmUgTU9YQV9HRVRNU1RBVFVTCQkoTU9YQSArIDY1KQorI2RlZmluZSBNT1hBX1NFVF9PUF9NT0RFCShNT1hBICsgNjYpCisjZGVmaW5lIE1PWEFfR0VUX09QX01PREUJKE1PWEEgKyA2NykKKworI2RlZmluZSBSUzIzMl9NT0RFCQkwCisjZGVmaW5lIFJTNDg1XzJXSVJFX01PREUJMQorI2RlZmluZSBSUzQyMl9NT0RFCQkyCisjZGVmaW5lIFJTNDg1XzRXSVJFX01PREUJMworI2RlZmluZSBPUF9NT0RFX01BU0sJCTMKKy8vIGFib3ZlIGFkZCBieSBWaWN0b3IgWXUuIDAxLTA1LTIwMDQKKworI2RlZmluZSBUVFlfVEhSRVNIT0xEX1RIUk9UVExFICAxMjgKKworI2RlZmluZSBMT19XQVRFUgkgCShUVFlfRkxJUEJVRl9TSVpFKQorI2RlZmluZSBISV9XQVRFUgkJKFRUWV9GTElQQlVGX1NJWkUqMiozLzQpCisKKy8vIGFkZGVkIGJ5IEphbWVzLiAwMy0xMS0yMDA0LgorI2RlZmluZSBNT1hBX1NEU19HRVRJQ09VTlRFUiAgCShNT1hBICsgNjgpCisjZGVmaW5lIE1PWEFfU0RTX1JTVElDT1VOVEVSICAJKE1PWEEgKyA2OSkKKy8vIChhYm92ZSkgYWRkZWQgYnkgSmFtZXMuCisKKyNkZWZpbmUgTU9YQV9BU1BQX09RVUVVRSAgCShNT1hBICsgNzApCisjZGVmaW5lIE1PWEFfQVNQUF9TRVRCQVVEIAkoTU9YQSArIDcxKQorI2RlZmluZSBNT1hBX0FTUFBfR0VUQkFVRCAJKE1PWEEgKyA3MikKKyNkZWZpbmUgTU9YQV9BU1BQX01PTiAgICAgCShNT1hBICsgNzMpCisjZGVmaW5lIE1PWEFfQVNQUF9MU1RBVFVTIAkoTU9YQSArIDc0KQorI2RlZmluZSBNT1hBX0FTUFBfTU9OX0VYVCAJKE1PWEEgKyA3NSkKKyNkZWZpbmUgTU9YQV9TRVRfQkFVRF9NRVRIT0QJKE1PWEEgKyA3NikKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBOUFBJX05PVElGWV9QQVJJVFkJMHgwMQorI2RlZmluZSBOUFBJX05PVElGWV9GUkFNSU5HCTB4MDIKKyNkZWZpbmUgTlBQSV9OT1RJRllfSFdfT1ZFUlJVTgkweDA0CisjZGVmaW5lIE5QUElfTk9USUZZX1NXX09WRVJSVU4JMHgwOAorI2RlZmluZSBOUFBJX05PVElGWV9CUkVBSwkweDEwCisKKyNkZWZpbmUgTlBQSV9OT1RJRllfQ1RTSE9MRCAgICAgICAgIDB4MDEJLy8gVHggaG9sZCBieSBDVFMgbG93CisjZGVmaW5lIE5QUElfTk9USUZZX0RTUkhPTEQgICAgICAgICAweDAyCS8vIFR4IGhvbGQgYnkgRFNSIGxvdworI2RlZmluZSBOUFBJX05PVElGWV9YT0ZGSE9MRCAgICAgICAgMHgwOAkvLyBUeCBob2xkIGJ5IFhvZmYgcmVjZWl2ZWQKKyNkZWZpbmUgTlBQSV9OT1RJRllfWE9GRlhFTlQgICAgICAgIDB4MTAJLy8gWG9mZiBTZW50CisKKy8vQ2hlY2tJc01veGFNdXN0IHJldHVybiB2YWx1ZQorI2RlZmluZSBNT1hBX09USEVSX1VBUlQJCQkweDAwCisjZGVmaW5lIE1PWEFfTVVTVF9NVTE1MF9IV0lECQkweDAxCisjZGVmaW5lIE1PWEFfTVVTVF9NVTg2MF9IV0lECQkweDAyCisKKy8vIGZvbGxvdyBqdXN0IGZvciBNb3hhIE11c3QgY2hpcCBkZWZpbmUuCisvLworLy8gd2hlbiBMQ1IgcmVnaXN0ZXIgKG9mZnNldCAweDAzKSB3cml0ZSBmb2xsb3dpbmcgdmFsdWUsCisvLyB0aGUgTXVzdCBjaGlwIHdpbGwgZW50ZXIgZW5jaGFuY2UgbW9kZS4gQW5kIHdyaXRlIHZhbHVlCisvLyBvbiBFRlIgKG9mZnNldCAweDAyKSBiaXQgNiw3IHRvIGNoYW5nZSBiYW5rLgorI2RlZmluZSBNT1hBX01VU1RfRU5URVJfRU5DSEFOQ0UJMHhCRgorCisvLyB3aGVuIGVuaGFuY2UgbW9kZSBlbmFibGUsIGFjY2VzcyBvbiBnZW5lcmFsIGJhbmsgcmVnaXN0ZXIKKyNkZWZpbmUgTU9YQV9NVVNUX0dETF9SRUdJU1RFUgkJMHgwNworI2RlZmluZSBNT1hBX01VU1RfR0RMX01BU0sJCTB4N0YKKyNkZWZpbmUgTU9YQV9NVVNUX0dETF9IQVNfQkFEX0RBVEEJMHg4MAorCisjZGVmaW5lIE1PWEFfTVVTVF9MU1JfUkVSUgkJMHg4MAkvLyBlcnJvciBpbiByZWNlaXZlIEZJRk8KKy8vIGVuY2hhbmNlIHJlZ2lzdGVyIGJhbmsgc2VsZWN0IGFuZCBlbmNoYW5jZSBtb2RlIHNldHRpbmcgcmVnaXN0ZXIKKy8vIHdoZW4gTENSIHJlZ2lzdGVyIGVxdWFsIHRvIDB4QkYKKyNkZWZpbmUgTU9YQV9NVVNUX0VGUl9SRUdJU1RFUgkJMHgwMgorLy8gZW5jaGFuY2UgbW9kZSBlbmFibGUKKyNkZWZpbmUgTU9YQV9NVVNUX0VGUl9FRlJCX0VOQUJMRQkweDEwCisvLyBlbmNoYW5jZSByZWlzdGVyIGJhbmsgc2V0IDAsIDEsIDIKKyNkZWZpbmUgTU9YQV9NVVNUX0VGUl9CQU5LMAkJMHgwMAorI2RlZmluZSBNT1hBX01VU1RfRUZSX0JBTksxCQkweDQwCisjZGVmaW5lIE1PWEFfTVVTVF9FRlJfQkFOSzIJCTB4ODAKKyNkZWZpbmUgTU9YQV9NVVNUX0VGUl9CQU5LMwkJMHhDMAorI2RlZmluZSBNT1hBX01VU1RfRUZSX0JBTktfTUFTSwkJMHhDMAorCisvLyBzZXQgWE9OMSB2YWx1ZSByZWdpc3Rlciwgd2hlbiBMQ1I9MHhCRiBhbmQgY2hhbmdlIHRvIGJhbmswCisjZGVmaW5lIE1PWEFfTVVTVF9YT04xX1JFR0lTVEVSCQkweDA0CisKKy8vIHNldCBYT04yIHZhbHVlIHJlZ2lzdGVyLCB3aGVuIExDUj0weEJGIGFuZCBjaGFuZ2UgdG8gYmFuazAKKyNkZWZpbmUgTU9YQV9NVVNUX1hPTjJfUkVHSVNURVIJCTB4MDUKKworLy8gc2V0IFhPRkYxIHZhbHVlIHJlZ2lzdGVyLCB3aGVuIExDUj0weEJGIGFuZCBjaGFuZ2UgdG8gYmFuazAKKyNkZWZpbmUgTU9YQV9NVVNUX1hPRkYxX1JFR0lTVEVSCTB4MDYKKworLy8gc2V0IFhPRkYyIHZhbHVlIHJlZ2lzdGVyLCB3aGVuIExDUj0weEJGIGFuZCBjaGFuZ2UgdG8gYmFuazAKKyNkZWZpbmUgTU9YQV9NVVNUX1hPRkYyX1JFR0lTVEVSCTB4MDcKKworI2RlZmluZSBNT1hBX01VU1RfUkJSVExfUkVHSVNURVIJMHgwNAorI2RlZmluZSBNT1hBX01VU1RfUkJSVEhfUkVHSVNURVIJMHgwNQorI2RlZmluZSBNT1hBX01VU1RfUkJSVElfUkVHSVNURVIJMHgwNgorI2RlZmluZSBNT1hBX01VU1RfVEhSVExfUkVHSVNURVIJMHgwNworI2RlZmluZSBNT1hBX01VU1RfRU5VTV9SRUdJU1RFUgkJMHgwNAorI2RlZmluZSBNT1hBX01VU1RfSFdJRF9SRUdJU1RFUgkJMHgwNQorI2RlZmluZSBNT1hBX01VU1RfRUNSX1JFR0lTVEVSCQkweDA2CisjZGVmaW5lIE1PWEFfTVVTVF9DU1JfUkVHSVNURVIJCTB4MDcKKworLy8gZ29vZCBkYXRhIG1vZGUgZW5hYmxlCisjZGVmaW5lIE1PWEFfTVVTVF9GQ1JfR0RBX01PREVfRU5BQkxFCTB4MjAKKy8vIG9ubHkgZ29vZCBkYXRhIHB1dCBpbnRvIFJ4RklGTworI2RlZmluZSBNT1hBX01VU1RfRkNSX0dEQV9PTkxZX0VOQUJMRQkweDEwCisKKy8vIGVuYWJsZSBDVFMgaW50ZXJydXB0CisjZGVmaW5lIE1PWEFfTVVTVF9JRVJfRUNUU0kJCTB4ODAKKy8vIGVuYWJsZSBSVFMgaW50ZXJydXB0CisjZGVmaW5lIE1PWEFfTVVTVF9JRVJfRVJUU0kJCTB4NDAKKy8vIGVuYWJsZSBYb24vWG9mZiBpbnRlcnJ1cHQKKyNkZWZpbmUgTU9YQV9NVVNUX0lFUl9YSU5UCQkweDIwCisvLyBlbmFibGUgR0RBIGludGVycnVwdAorI2RlZmluZSBNT1hBX01VU1RfSUVSX0VHREFJCQkweDEwCisKKyNkZWZpbmUgTU9YQV9NVVNUX1JFQ1ZfSVNSCQkoVUFSVF9JRVJfUkRJIHwgTU9YQV9NVVNUX0lFUl9FR0RBSSkKKworLy8gR0RBIGludGVycnVwdCBwZW5kaW5nCisjZGVmaW5lIE1PWEFfTVVTVF9JSVJfR0RBCQkweDFDCisjZGVmaW5lIE1PWEFfTVVTVF9JSVJfUkRBCQkweDA0CisjZGVmaW5lIE1PWEFfTVVTVF9JSVJfUlRPCQkweDBDCisjZGVmaW5lIE1PWEFfTVVTVF9JSVJfTFNSCQkweDA2CisKKy8vIHJlY2lldmVkIFhvbi9Yb2ZmIG9yIHNwZWNpY2FsIGludGVycnVwdCBwZW5kaW5nCisjZGVmaW5lIE1PWEFfTVVTVF9JSVJfWFNDCQkweDEwCisKKy8vIFJUUy9DVFMgY2hhbmdlIHN0YXRlIGludGVycnVwdCBwZW5kaW5nCisjZGVmaW5lIE1PWEFfTVVTVF9JSVJfUlRTQ1RTCQkweDIwCisjZGVmaW5lIE1PWEFfTVVTVF9JSVJfTUFTSwkJMHgzRQorCisjZGVmaW5lIE1PWEFfTVVTVF9NQ1JfWE9OX0ZMQUcJCTB4NDAKKyNkZWZpbmUgTU9YQV9NVVNUX01DUl9YT05fQU5ZCQkweDgwCisjZGVmaW5lIE1PWEFfTVVTVF9NQ1JfVFhfWE9OCQkweDA4CisKKworLy8gc29mdHdhcmUgZmxvdyBjb250cm9sIG9uIGNoaXAgbWFzayB2YWx1ZQorI2RlZmluZSBNT1hBX01VU1RfRUZSX1NGX01BU0sJCTB4MEYKKy8vIHNlbmQgWG9uMS9Yb2ZmMQorI2RlZmluZSBNT1hBX01VU1RfRUZSX1NGX1RYMQkJMHgwOAorLy8gc2VuZCBYb24yL1hvZmYyCisjZGVmaW5lIE1PWEFfTVVTVF9FRlJfU0ZfVFgyCQkweDA0CisvLyBzZW5kIFhvbjEsWG9uMi9Yb2ZmMSxYb2ZmMgorI2RlZmluZSBNT1hBX01VU1RfRUZSX1NGX1RYMTIJCTB4MEMKKy8vIGRvbid0IHNlbmQgWG9uL1hvZmYKKyNkZWZpbmUgTU9YQV9NVVNUX0VGUl9TRl9UWF9OTwkJMHgwMAorLy8gVHggc29mdHdhcmUgZmxvdyBjb250cm9sIG1hc2sKKyNkZWZpbmUgTU9YQV9NVVNUX0VGUl9TRl9UWF9NQVNLCTB4MEMKKy8vIGRvbid0IHJlY2VpdmUgWG9uL1hvZmYKKyNkZWZpbmUgTU9YQV9NVVNUX0VGUl9TRl9SWF9OTwkJMHgwMAorLy8gcmVjZWl2ZSBYb24xL1hvZmYxCisjZGVmaW5lIE1PWEFfTVVTVF9FRlJfU0ZfUlgxCQkweDAyCisvLyByZWNlaXZlIFhvbjIvWG9mZjIKKyNkZWZpbmUgTU9YQV9NVVNUX0VGUl9TRl9SWDIJCTB4MDEKKy8vIHJlY2VpdmUgWG9uMSxYb24yL1hvZmYxLFhvZmYyCisjZGVmaW5lIE1PWEFfTVVTVF9FRlJfU0ZfUlgxMgkJMHgwMworLy8gUnggc29mdHdhcmUgZmxvdyBjb250cm9sIG1hc2sKKyNkZWZpbmUgTU9YQV9NVVNUX0VGUl9TRl9SWF9NQVNLCTB4MDMKKworLy8jZGVmaW5lIE1PWEFfTVVTVF9NSU5fWE9GRkxJTUlUICAgICAgICAgICAgICAgNjYKKy8vI2RlZmluZSBNT1hBX01VU1RfTUlOX1hPTkxJTUlUICAgICAgICAgICAgICAgIDIwCisvLyNkZWZpbmUgSUQxX1JYX1RSSUcgICAgICAgICAgICAgICAgICAgMTIwCisKKworI2RlZmluZSBDSEVDS19NT1hBX01VU1RfWE9GRkxJTUlUKGluZm8pIHsgCVwKKwlpZiAoIChpbmZvKS0+SXNNb3hhTXVzdENoaXBGbGFnICYmIAlcCisJIChpbmZvKS0+SGFuZEZsb3cuWG9mZkxpbWl0IDwgTU9YQV9NVVNUX01JTl9YT0ZGTElNSVQgKSB7CVwKKwkJKGluZm8pLT5IYW5kRmxvdy5Yb2ZmTGltaXQgPSBNT1hBX01VU1RfTUlOX1hPRkZMSU1JVDsJXAorCQkoaW5mbyktPkhhbmRGbG93LlhvbkxpbWl0ID0gTU9YQV9NVVNUX01JTl9YT05MSU1JVDsJXAorCX0JXAorfQorCisjZGVmaW5lIEVOQUJMRV9NT1hBX01VU1RfRU5DSEFOQ0VfTU9ERShiYXNlaW8pIHsgXAorCXU4CV9fb2xkbGNyLCBfX2VmcjsJXAorCV9fb2xkbGNyID0gaW5iKChiYXNlaW8pK1VBUlRfTENSKTsJXAorCW91dGIoTU9YQV9NVVNUX0VOVEVSX0VOQ0hBTkNFLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlfX2VmciA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCV9fZWZyIHw9IE1PWEFfTVVTVF9FRlJfRUZSQl9FTkFCTEU7CVwKKwlvdXRiKF9fZWZyLCAoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCW91dGIoX19vbGRsY3IsIChiYXNlaW8pK1VBUlRfTENSKTsJXAorfQorCisjZGVmaW5lIERJU0FCTEVfTU9YQV9NVVNUX0VOQ0hBTkNFX01PREUoYmFzZWlvKSB7CVwKKwl1OAlfX29sZGxjciwgX19lZnI7CVwKKwlfX29sZGxjciA9IGluYigoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlvdXRiKE1PWEFfTVVTVF9FTlRFUl9FTkNIQU5DRSwgKGJhc2VpbykrVUFSVF9MQ1IpOwlcCisJX19lZnIgPSBpbmIoKGJhc2VpbykrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlfX2VmciAmPSB+TU9YQV9NVVNUX0VGUl9FRlJCX0VOQUJMRTsJXAorCW91dGIoX19lZnIsIChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJb3V0YihfX29sZGxjciwgKGJhc2VpbykrVUFSVF9MQ1IpOwlcCit9CisKKyNkZWZpbmUgU0VUX01PWEFfTVVTVF9YT04xX1ZBTFVFKGJhc2VpbywgVmFsdWUpIHsJXAorCXU4CV9fb2xkbGNyLCBfX2VmcjsJXAorCV9fb2xkbGNyID0gaW5iKChiYXNlaW8pK1VBUlRfTENSKTsJXAorCW91dGIoTU9YQV9NVVNUX0VOVEVSX0VOQ0hBTkNFLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlfX2VmciA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCV9fZWZyICY9IH5NT1hBX01VU1RfRUZSX0JBTktfTUFTSzsJXAorCV9fZWZyIHw9IE1PWEFfTVVTVF9FRlJfQkFOSzA7CVwKKwlvdXRiKF9fZWZyLCAoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCW91dGIoKHU4KShWYWx1ZSksIChiYXNlaW8pK01PWEFfTVVTVF9YT04xX1JFR0lTVEVSKTsJXAorCW91dGIoX19vbGRsY3IsIChiYXNlaW8pK1VBUlRfTENSKTsJXAorfQorCisjZGVmaW5lIFNFVF9NT1hBX01VU1RfWE9OMl9WQUxVRShiYXNlaW8sIFZhbHVlKSB7CVwKKwl1OAlfX29sZGxjciwgX19lZnI7CVwKKwlfX29sZGxjciA9IGluYigoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlvdXRiKE1PWEFfTVVTVF9FTlRFUl9FTkNIQU5DRSwgKGJhc2VpbykrVUFSVF9MQ1IpOwlcCisJX19lZnIgPSBpbmIoKGJhc2VpbykrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlfX2VmciAmPSB+TU9YQV9NVVNUX0VGUl9CQU5LX01BU0s7CVwKKwlfX2VmciB8PSBNT1hBX01VU1RfRUZSX0JBTkswOwlcCisJb3V0YihfX2VmciwgKGJhc2VpbykrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlvdXRiKCh1OCkoVmFsdWUpLCAoYmFzZWlvKStNT1hBX01VU1RfWE9OMl9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworI2RlZmluZSBTRVRfTU9YQV9NVVNUX1hPRkYxX1ZBTFVFKGJhc2VpbywgVmFsdWUpIHsJXAorCXU4CV9fb2xkbGNyLCBfX2VmcjsJXAorCV9fb2xkbGNyID0gaW5iKChiYXNlaW8pK1VBUlRfTENSKTsJXAorCW91dGIoTU9YQV9NVVNUX0VOVEVSX0VOQ0hBTkNFLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlfX2VmciA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCV9fZWZyICY9IH5NT1hBX01VU1RfRUZSX0JBTktfTUFTSzsJXAorCV9fZWZyIHw9IE1PWEFfTVVTVF9FRlJfQkFOSzA7CVwKKwlvdXRiKF9fZWZyLCAoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCW91dGIoKHU4KShWYWx1ZSksIChiYXNlaW8pK01PWEFfTVVTVF9YT0ZGMV9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworI2RlZmluZSBTRVRfTU9YQV9NVVNUX1hPRkYyX1ZBTFVFKGJhc2VpbywgVmFsdWUpIHsJXAorCXU4CV9fb2xkbGNyLCBfX2VmcjsJXAorCV9fb2xkbGNyID0gaW5iKChiYXNlaW8pK1VBUlRfTENSKTsJXAorCW91dGIoTU9YQV9NVVNUX0VOVEVSX0VOQ0hBTkNFLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlfX2VmciA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCV9fZWZyICY9IH5NT1hBX01VU1RfRUZSX0JBTktfTUFTSzsJXAorCV9fZWZyIHw9IE1PWEFfTVVTVF9FRlJfQkFOSzA7CVwKKwlvdXRiKF9fZWZyLCAoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCW91dGIoKHU4KShWYWx1ZSksIChiYXNlaW8pK01PWEFfTVVTVF9YT0ZGMl9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworI2RlZmluZSBTRVRfTU9YQV9NVVNUX1JCUlRMX1ZBTFVFKGJhc2VpbywgVmFsdWUpIHsJXAorCXU4CV9fb2xkbGNyLCBfX2VmcjsJXAorCV9fb2xkbGNyID0gaW5iKChiYXNlaW8pK1VBUlRfTENSKTsJXAorCW91dGIoTU9YQV9NVVNUX0VOVEVSX0VOQ0hBTkNFLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlfX2VmciA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCV9fZWZyICY9IH5NT1hBX01VU1RfRUZSX0JBTktfTUFTSzsJXAorCV9fZWZyIHw9IE1PWEFfTVVTVF9FRlJfQkFOSzE7CVwKKwlvdXRiKF9fZWZyLCAoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCW91dGIoKHU4KShWYWx1ZSksIChiYXNlaW8pK01PWEFfTVVTVF9SQlJUTF9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworI2RlZmluZSBTRVRfTU9YQV9NVVNUX1JCUlRIX1ZBTFVFKGJhc2VpbywgVmFsdWUpIHsJXAorCXU4CV9fb2xkbGNyLCBfX2VmcjsJXAorCV9fb2xkbGNyID0gaW5iKChiYXNlaW8pK1VBUlRfTENSKTsJXAorCW91dGIoTU9YQV9NVVNUX0VOVEVSX0VOQ0hBTkNFLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlfX2VmciA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCV9fZWZyICY9IH5NT1hBX01VU1RfRUZSX0JBTktfTUFTSzsJXAorCV9fZWZyIHw9IE1PWEFfTVVTVF9FRlJfQkFOSzE7CVwKKwlvdXRiKF9fZWZyLCAoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCW91dGIoKHU4KShWYWx1ZSksIChiYXNlaW8pK01PWEFfTVVTVF9SQlJUSF9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworI2RlZmluZSBTRVRfTU9YQV9NVVNUX1JCUlRJX1ZBTFVFKGJhc2VpbywgVmFsdWUpIHsJXAorCXU4CV9fb2xkbGNyLCBfX2VmcjsJXAorCV9fb2xkbGNyID0gaW5iKChiYXNlaW8pK1VBUlRfTENSKTsJXAorCW91dGIoTU9YQV9NVVNUX0VOVEVSX0VOQ0hBTkNFLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlfX2VmciA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCV9fZWZyICY9IH5NT1hBX01VU1RfRUZSX0JBTktfTUFTSzsJXAorCV9fZWZyIHw9IE1PWEFfTVVTVF9FRlJfQkFOSzE7CVwKKwlvdXRiKF9fZWZyLCAoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCW91dGIoKHU4KShWYWx1ZSksIChiYXNlaW8pK01PWEFfTVVTVF9SQlJUSV9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworI2RlZmluZSBTRVRfTU9YQV9NVVNUX1RIUlRMX1ZBTFVFKGJhc2VpbywgVmFsdWUpIHsJXAorCXU4CV9fb2xkbGNyLCBfX2VmcjsJXAorCV9fb2xkbGNyID0gaW5iKChiYXNlaW8pK1VBUlRfTENSKTsJXAorCW91dGIoTU9YQV9NVVNUX0VOVEVSX0VOQ0hBTkNFLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlfX2VmciA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCV9fZWZyICY9IH5NT1hBX01VU1RfRUZSX0JBTktfTUFTSzsJXAorCV9fZWZyIHw9IE1PWEFfTVVTVF9FRlJfQkFOSzE7CVwKKwlvdXRiKF9fZWZyLCAoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCW91dGIoKHU4KShWYWx1ZSksIChiYXNlaW8pK01PWEFfTVVTVF9USFJUTF9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworLy8jZGVmaW5lIE1PWEFfTVVTVF9SQlJMX1ZBTFVFICA0CisjZGVmaW5lIFNFVF9NT1hBX01VU1RfRklGT19WQUxVRShpbmZvKSB7CVwKKwl1OAlfX29sZGxjciwgX19lZnI7CVwKKwlfX29sZGxjciA9IGluYigoaW5mbyktPmlvYWRkcitVQVJUX0xDUik7CVwKKwlvdXRiKE1PWEFfTVVTVF9FTlRFUl9FTkNIQU5DRSwgKGluZm8pLT5pb2FkZHIrVUFSVF9MQ1IpOwlcCisJX19lZnIgPSBpbmIoKGluZm8pLT5pb2FkZHIrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlfX2VmciAmPSB+TU9YQV9NVVNUX0VGUl9CQU5LX01BU0s7CVwKKwlfX2VmciB8PSBNT1hBX01VU1RfRUZSX0JBTksxOwlcCisJb3V0YihfX2VmciwgKGluZm8pLT5pb2FkZHIrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlvdXRiKCh1OCkoKGluZm8pLT5yeF9oaWdoX3dhdGVyKSwgKGluZm8pLT5pb2FkZHIrTU9YQV9NVVNUX1JCUlRIX1JFR0lTVEVSKTsJXAorCW91dGIoKHU4KSgoaW5mbyktPnJ4X3RyaWdnZXIpLCAoaW5mbyktPmlvYWRkcitNT1hBX01VU1RfUkJSVElfUkVHSVNURVIpOwlcCisJb3V0YigodTgpKChpbmZvKS0+cnhfbG93X3dhdGVyKSwgKGluZm8pLT5pb2FkZHIrTU9YQV9NVVNUX1JCUlRMX1JFR0lTVEVSKTsJXAorCW91dGIoX19vbGRsY3IsIChpbmZvKS0+aW9hZGRyK1VBUlRfTENSKTsJXAorfQorCisKKworI2RlZmluZSBTRVRfTU9YQV9NVVNUX0VOVU1fVkFMVUUoYmFzZWlvLCBWYWx1ZSkgewlcCisJdTgJX19vbGRsY3IsIF9fZWZyOwlcCisJX19vbGRsY3IgPSBpbmIoKGJhc2VpbykrVUFSVF9MQ1IpOwlcCisJb3V0YihNT1hBX01VU1RfRU5URVJfRU5DSEFOQ0UsIChiYXNlaW8pK1VBUlRfTENSKTsJXAorCV9fZWZyID0gaW5iKChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJX19lZnIgJj0gfk1PWEFfTVVTVF9FRlJfQkFOS19NQVNLOwlcCisJX19lZnIgfD0gTU9YQV9NVVNUX0VGUl9CQU5LMjsJXAorCW91dGIoX19lZnIsIChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJb3V0YigodTgpKFZhbHVlKSwgKGJhc2VpbykrTU9YQV9NVVNUX0VOVU1fUkVHSVNURVIpOwlcCisJb3V0YihfX29sZGxjciwgKGJhc2VpbykrVUFSVF9MQ1IpOwlcCit9CisKKyNkZWZpbmUgR0VUX01PWEFfTVVTVF9IQVJEV0FSRV9JRChiYXNlaW8sIHBJZCkgewlcCisJdTgJX19vbGRsY3IsIF9fZWZyOwlcCisJX19vbGRsY3IgPSBpbmIoKGJhc2VpbykrVUFSVF9MQ1IpOwlcCisJb3V0YihNT1hBX01VU1RfRU5URVJfRU5DSEFOQ0UsIChiYXNlaW8pK1VBUlRfTENSKTsJXAorCV9fZWZyID0gaW5iKChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJX19lZnIgJj0gfk1PWEFfTVVTVF9FRlJfQkFOS19NQVNLOwlcCisJX19lZnIgfD0gTU9YQV9NVVNUX0VGUl9CQU5LMjsJXAorCW91dGIoX19lZnIsIChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJKnBJZCA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfSFdJRF9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworI2RlZmluZSBTRVRfTU9YQV9NVVNUX05PX1NPRlRXQVJFX0ZMT1dfQ09OVFJPTChiYXNlaW8pIHsJXAorCXU4CV9fb2xkbGNyLCBfX2VmcjsJXAorCV9fb2xkbGNyID0gaW5iKChiYXNlaW8pK1VBUlRfTENSKTsJXAorCW91dGIoTU9YQV9NVVNUX0VOVEVSX0VOQ0hBTkNFLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlfX2VmciA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCV9fZWZyICY9IH5NT1hBX01VU1RfRUZSX1NGX01BU0s7CVwKKwlvdXRiKF9fZWZyLCAoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCW91dGIoX19vbGRsY3IsIChiYXNlaW8pK1VBUlRfTENSKTsJXAorfQorCisjZGVmaW5lIFNFVF9NT1hBX01VU1RfSlVTVF9UWF9TT0ZUV0FSRV9GTE9XX0NPTlRST0woYmFzZWlvKSB7CVwKKwl1OAlfX29sZGxjciwgX19lZnI7CVwKKwlfX29sZGxjciA9IGluYigoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlvdXRiKE1PWEFfTVVTVF9FTlRFUl9FTkNIQU5DRSwgKGJhc2VpbykrVUFSVF9MQ1IpOwlcCisJX19lZnIgPSBpbmIoKGJhc2VpbykrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlfX2VmciAmPSB+TU9YQV9NVVNUX0VGUl9TRl9NQVNLOwlcCisJX19lZnIgfD0gTU9YQV9NVVNUX0VGUl9TRl9UWDE7CVwKKwlvdXRiKF9fZWZyLCAoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCW91dGIoX19vbGRsY3IsIChiYXNlaW8pK1VBUlRfTENSKTsJXAorfQorCisjZGVmaW5lIEVOQUJMRV9NT1hBX01VU1RfVFhfU09GVFdBUkVfRkxPV19DT05UUk9MKGJhc2VpbykgewlcCisJdTgJX19vbGRsY3IsIF9fZWZyOwlcCisJX19vbGRsY3IgPSBpbmIoKGJhc2VpbykrVUFSVF9MQ1IpOwlcCisJb3V0YihNT1hBX01VU1RfRU5URVJfRU5DSEFOQ0UsIChiYXNlaW8pK1VBUlRfTENSKTsJXAorCV9fZWZyID0gaW5iKChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJX19lZnIgJj0gfk1PWEFfTVVTVF9FRlJfU0ZfVFhfTUFTSzsJXAorCV9fZWZyIHw9IE1PWEFfTVVTVF9FRlJfU0ZfVFgxOwlcCisJb3V0YihfX2VmciwgKGJhc2VpbykrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworI2RlZmluZSBESVNBQkxFX01PWEFfTVVTVF9UWF9TT0ZUV0FSRV9GTE9XX0NPTlRST0woYmFzZWlvKSB7CVwKKwl1OAlfX29sZGxjciwgX19lZnI7CVwKKwlfX29sZGxjciA9IGluYigoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlvdXRiKE1PWEFfTVVTVF9FTlRFUl9FTkNIQU5DRSwgKGJhc2VpbykrVUFSVF9MQ1IpOwlcCisJX19lZnIgPSBpbmIoKGJhc2VpbykrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlfX2VmciAmPSB+TU9YQV9NVVNUX0VGUl9TRl9UWF9NQVNLOwlcCisJb3V0YihfX2VmciwgKGJhc2VpbykrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworI2RlZmluZSBTRVRfTU9YQV9NVVNUX0pVU1RfUlhfU09GVFdBUkVfRkxPV19DT05UUk9MKGJhc2VpbykgewlcCisJdTgJX19vbGRsY3IsIF9fZWZyOwlcCisJX19vbGRsY3IgPSBpbmIoKGJhc2VpbykrVUFSVF9MQ1IpOwlcCisJb3V0YihNT1hBX01VU1RfRU5URVJfRU5DSEFOQ0UsIChiYXNlaW8pK1VBUlRfTENSKTsJXAorCV9fZWZyID0gaW5iKChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJX19lZnIgJj0gfk1PWEFfTVVTVF9FRlJfU0ZfTUFTSzsJXAorCV9fZWZyIHw9IE1PWEFfTVVTVF9FRlJfU0ZfUlgxOwlcCisJb3V0YihfX2VmciwgKGJhc2VpbykrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlvdXRiKF9fb2xkbGNyLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKK30KKworI2RlZmluZSBFTkFCTEVfTU9YQV9NVVNUX1JYX1NPRlRXQVJFX0ZMT1dfQ09OVFJPTChiYXNlaW8pIHsJXAorCXU4CV9fb2xkbGNyLCBfX2VmcjsJXAorCV9fb2xkbGNyID0gaW5iKChiYXNlaW8pK1VBUlRfTENSKTsJXAorCW91dGIoTU9YQV9NVVNUX0VOVEVSX0VOQ0hBTkNFLCAoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlfX2VmciA9IGluYigoYmFzZWlvKStNT1hBX01VU1RfRUZSX1JFR0lTVEVSKTsJXAorCV9fZWZyICY9IH5NT1hBX01VU1RfRUZSX1NGX1JYX01BU0s7CVwKKwlfX2VmciB8PSBNT1hBX01VU1RfRUZSX1NGX1JYMTsJXAorCW91dGIoX19lZnIsIChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJb3V0YihfX29sZGxjciwgKGJhc2VpbykrVUFSVF9MQ1IpOwlcCit9CisKKyNkZWZpbmUgRElTQUJMRV9NT1hBX01VU1RfUlhfU09GVFdBUkVfRkxPV19DT05UUk9MKGJhc2VpbykgewlcCisJdTgJX19vbGRsY3IsIF9fZWZyOwlcCisJX19vbGRsY3IgPSBpbmIoKGJhc2VpbykrVUFSVF9MQ1IpOwlcCisJb3V0YihNT1hBX01VU1RfRU5URVJfRU5DSEFOQ0UsIChiYXNlaW8pK1VBUlRfTENSKTsJXAorCV9fZWZyID0gaW5iKChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJX19lZnIgJj0gfk1PWEFfTVVTVF9FRlJfU0ZfUlhfTUFTSzsJXAorCW91dGIoX19lZnIsIChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJb3V0YihfX29sZGxjciwgKGJhc2VpbykrVUFSVF9MQ1IpOwlcCit9CisKKyNkZWZpbmUgRU5BQkxFX01PWEFfTVVTVF9UWF9SWF9TT0ZUV0FSRV9GTE9XX0NPTlRST0woYmFzZWlvKSB7CVwKKwl1OAlfX29sZGxjciwgX19lZnI7CVwKKwlfX29sZGxjciA9IGluYigoYmFzZWlvKStVQVJUX0xDUik7CVwKKwlvdXRiKE1PWEFfTVVTVF9FTlRFUl9FTkNIQU5DRSwgKGJhc2VpbykrVUFSVF9MQ1IpOwlcCisJX19lZnIgPSBpbmIoKGJhc2VpbykrTU9YQV9NVVNUX0VGUl9SRUdJU1RFUik7CVwKKwlfX2VmciAmPSB+TU9YQV9NVVNUX0VGUl9TRl9NQVNLOwlcCisJX19lZnIgfD0gKE1PWEFfTVVTVF9FRlJfU0ZfUlgxfE1PWEFfTVVTVF9FRlJfU0ZfVFgxKTsJXAorCW91dGIoX19lZnIsIChiYXNlaW8pK01PWEFfTVVTVF9FRlJfUkVHSVNURVIpOwlcCisJb3V0YihfX29sZGxjciwgKGJhc2VpbykrVUFSVF9MQ1IpOwlcCit9CisKKyNkZWZpbmUgRU5BQkxFX01PWEFfTVVTVF9YT05fQU5ZX0ZMT1dfQ09OVFJPTChiYXNlaW8pIHsJXAorCXU4CV9fb2xkbWNyOwlcCisJX19vbGRtY3IgPSBpbmIoKGJhc2VpbykrVUFSVF9NQ1IpOwlcCisJX19vbGRtY3IgfD0gTU9YQV9NVVNUX01DUl9YT05fQU5ZOwlcCisJb3V0YihfX29sZG1jciwgKGJhc2VpbykrVUFSVF9NQ1IpOwlcCit9CisKKyNkZWZpbmUgRElTQUJMRV9NT1hBX01VU1RfWE9OX0FOWV9GTE9XX0NPTlRST0woYmFzZWlvKSB7CVwKKwl1OAlfX29sZG1jcjsJXAorCV9fb2xkbWNyID0gaW5iKChiYXNlaW8pK1VBUlRfTUNSKTsJXAorCV9fb2xkbWNyICY9IH5NT1hBX01VU1RfTUNSX1hPTl9BTlk7CVwKKwlvdXRiKF9fb2xkbWNyLCAoYmFzZWlvKStVQVJUX01DUik7CVwKK30KKworI2RlZmluZSBSRUFEX01PWEFfTVVTVF9HREwoYmFzZWlvKQlpbmIoKGJhc2VpbykrTU9YQV9NVVNUX0dETF9SRUdJU1RFUikKKworCisjaWZuZGVmIElOSVRfV09SSworI2RlZmluZSBJTklUX1dPUksoX3dvcmssIF9mdW5jLCBfZGF0YSl7CVwKKwlfZGF0YS0+dHF1ZXVlLnJvdXRpbmUgPSBfZnVuYztcCisJX2RhdGEtPnRxdWV1ZS5kYXRhID0gX2RhdGE7XAorCX0KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9uX3IzOTY0LmMgYi9kcml2ZXJzL2NoYXIvbl9yMzk2NC5jCmluZGV4IDIwM2RjMmIuLmRjNmQ0MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX3IzOTY0LmMKKysrIGIvZHJpdmVycy9jaGFyL25fcjM5NjQuYwpAQCAtMTI1LDggKzEyNSw4IEBACiBzdGF0aWMgdm9pZCByZWNlaXZlX2NoYXIoc3RydWN0IHIzOTY0X2luZm8gKnBJbmZvLCBjb25zdCB1bnNpZ25lZCBjaGFyIGMpOwogc3RhdGljIHZvaWQgcmVjZWl2ZV9lcnJvcihzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm8sIGNvbnN0IGNoYXIgZmxhZyk7CiBzdGF0aWMgdm9pZCBvbl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcHJpdik7Ci1zdGF0aWMgaW50IGVuYWJsZV9zaWduYWxzKHN0cnVjdCByMzk2NF9pbmZvICpwSW5mbywgcGlkX3QgcGlkLCBpbnQgYXJnKTsKLXN0YXRpYyBpbnQgcmVhZF90ZWxlZ3JhbShzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm8sIHBpZF90IHBpZCwgdW5zaWduZWQgY2hhciBfX3VzZXIgKmJ1Zik7CitzdGF0aWMgaW50IGVuYWJsZV9zaWduYWxzKHN0cnVjdCByMzk2NF9pbmZvICpwSW5mbywgc3RydWN0IHBpZCAqcGlkLCBpbnQgYXJnKTsKK3N0YXRpYyBpbnQgcmVhZF90ZWxlZ3JhbShzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm8sIHN0cnVjdCBwaWQgKnBpZCwgdW5zaWduZWQgY2hhciBfX3VzZXIgKmJ1Zik7CiBzdGF0aWMgdm9pZCBhZGRfbXNnKHN0cnVjdCByMzk2NF9jbGllbnRfaW5mbyAqcENsaWVudCwgaW50IG1zZ19pZCwgaW50IGFyZywKICAgICAgICAgICAgICBpbnQgZXJyb3JfY29kZSwgc3RydWN0IHIzOTY0X2Jsb2NrX2hlYWRlciAqcEJsb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgcjM5NjRfbWVzc2FnZSogcmVtb3ZlX21zZyhzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm8sIApAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1Ziwgc2l6ZV90IG5yKTsKIHN0YXRpYyBpbnQgcjM5NjRfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQgcjM5NjRfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworc3RhdGljIHZvaWQgcjM5NjRfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcjM5NjRfcG9sbChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogCQkgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgICp3YWl0KTsKIHN0YXRpYyB2b2lkIHIzOTY0X3JlY2VpdmVfYnVmKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLApAQCAtODI5LDcgKzgyOSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcjM5NjRfY2xpZW50X2luZm8gKmZpbmRDbGllbnQoCi0gIHN0cnVjdCByMzk2NF9pbmZvICpwSW5mbywgcGlkX3QgcGlkKQorICBzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm8sIHN0cnVjdCBwaWQgKnBpZCkKIHsKICAgIHN0cnVjdCByMzk2NF9jbGllbnRfaW5mbyAqcENsaWVudDsKICAgIApAQCAtODQzLDcgKzg0Myw3IEBACiAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBlbmFibGVfc2lnbmFscyhzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm8sIHBpZF90IHBpZCwgaW50IGFyZykKK3N0YXRpYyBpbnQgZW5hYmxlX3NpZ25hbHMoc3RydWN0IHIzOTY0X2luZm8gKnBJbmZvLCBzdHJ1Y3QgcGlkICpwaWQsIGludCBhcmcpCiB7CiAgICBzdHJ1Y3QgcjM5NjRfY2xpZW50X2luZm8gKnBDbGllbnQ7CiAgICBzdHJ1Y3QgcjM5NjRfY2xpZW50X2luZm8gKipwcENsaWVudDsKQEAgLTg1OCw3ICs4NTgsNyBAQAogICAgICAgICAgCiAgICAgICAgICBpZihwQ2xpZW50LT5waWQgPT0gcGlkKQogICAgICAgICAgewotICAgICAgICAgICAgVFJBQ0VfUFMoInJlbW92aW5nIGNsaWVudCAlZCBmcm9tIGNsaWVudCBsaXN0IiwgcGlkKTsKKyAgICAgICAgICAgIFRSQUNFX1BTKCJyZW1vdmluZyBjbGllbnQgJWQgZnJvbSBjbGllbnQgbGlzdCIsIHBpZF9ucihwaWQpKTsKICAgICAgICAgICAgICpwcENsaWVudCA9IHBDbGllbnQtPm5leHQ7CiAgICAgICAgICAgICB3aGlsZShwQ2xpZW50LT5tc2dfY291bnQpCiAgICAgICAgICAgICB7CkBAIC04NjksNiArODY5LDcgQEAKICAgICAgICAgICAgICAgICAgIFRSQUNFX00oImVuYWJsZV9zaWduYWxzIC0gbXNnIGtmcmVlICVwIixwTXNnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKwkgICAgcHV0X3BpZChwQ2xpZW50LT5waWQpOwogICAgICAgICAgICAga2ZyZWUocENsaWVudCk7CiAgICAgICAgICAgICBUUkFDRV9NKCJlbmFibGVfc2lnbmFscyAtIGtmcmVlICVwIixwQ2xpZW50KTsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtODkyLDEwICs4OTMsMTAgQEAKICAgICAgICAgIGlmKHBDbGllbnQ9PU5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKIAotICAgICAgICAgVFJBQ0VfUFMoImFkZCBjbGllbnQgJWQgdG8gY2xpZW50IGxpc3QiLCBwaWQpOworICAgICAgICAgVFJBQ0VfUFMoImFkZCBjbGllbnQgJWQgdG8gY2xpZW50IGxpc3QiLCBwaWRfbnIocGlkKSk7CiAJIHNwaW5fbG9ja19pbml0KCZwQ2xpZW50LT5sb2NrKTsKICAgICAgICAgIHBDbGllbnQtPnNpZ19mbGFncz1hcmc7Ci0gICAgICAgICBwQ2xpZW50LT5waWQgPSBwaWQ7CisgICAgICAgICBwQ2xpZW50LT5waWQgPSBnZXRfcGlkKHBpZCk7CiAgICAgICAgICBwQ2xpZW50LT5uZXh0PXBJbmZvLT5maXJzdENsaWVudDsKICAgICAgICAgIHBDbGllbnQtPmZpcnN0X21zZyA9IE5VTEw7CiAgICAgICAgICBwQ2xpZW50LT5sYXN0X21zZyA9IE5VTEw7CkBAIC05MDgsNyArOTA5LDcgQEAKICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlYWRfdGVsZWdyYW0oc3RydWN0IHIzOTY0X2luZm8gKnBJbmZvLCBwaWRfdCBwaWQsIHVuc2lnbmVkIGNoYXIgX191c2VyICpidWYpCitzdGF0aWMgaW50IHJlYWRfdGVsZWdyYW0oc3RydWN0IHIzOTY0X2luZm8gKnBJbmZvLCBzdHJ1Y3QgcGlkICpwaWQsIHVuc2lnbmVkIGNoYXIgX191c2VyICpidWYpCiB7CiAgICAgc3RydWN0IHIzOTY0X2NsaWVudF9pbmZvICpwQ2xpZW50OwogICAgIHN0cnVjdCByMzk2NF9ibG9ja19oZWFkZXIgKmJsb2NrOwpAQCAtMTAwNSw3ICsxMDA2LDcgQEAKICAgIC8qIFNlbmQgU0lHSU8gc2lnbmFsIHRvIGNsaWVudCBwcm9jZXNzOiAqLwogICAgaWYocENsaWVudC0+c2lnX2ZsYWdzICYgUjM5NjRfVVNFX1NJR0lPKQogICAgewotICAgICAga2lsbF9wcm9jKHBDbGllbnQtPnBpZCwgU0lHSU8sIDEpOworICAgICAga2lsbF9waWQocENsaWVudC0+cGlkLCBTSUdJTywgMSk7CiAgICB9CiB9CiAKQEAgLTEwNDIsNyArMTA0Myw3IEBACiB7CiAgICAgc3RydWN0IHIzOTY0X2Jsb2NrX2hlYWRlciAqYmxvY2s7CiAKLSAgICBUUkFDRV9QUygicmVtb3ZlX2NsaWVudF9ibG9jayBQSUQgJWQiLCBwQ2xpZW50LT5waWQpOworICAgIFRSQUNFX1BTKCJyZW1vdmVfY2xpZW50X2Jsb2NrIFBJRCAlZCIsIHBpZF9ucihwQ2xpZW50LT5waWQpKTsKIAogICAgIGJsb2NrPXBDbGllbnQtPm5leHRfYmxvY2tfdG9fcmVhZDsKICAgICBpZihibG9jaykKQEAgLTExNTcsNiArMTE1OCw3IEBACiAgICAgICAgICAgICAgVFJBQ0VfTSgicjM5NjRfY2xvc2UgLSBtc2cga2ZyZWUgJXAiLHBNc2cpOwogICAgICAgICAgIH0KICAgICAgICB9CisgICAgICAgcHV0X3BpZChwQ2xpZW50LT5waWQpOwogICAgICAgIGtmcmVlKHBDbGllbnQpOwogICAgICAgIFRSQUNFX00oInIzOTY0X2Nsb3NlIC0gY2xpZW50IGtmcmVlICVwIixwQ2xpZW50KTsKICAgICAgICBwQ2xpZW50PXBOZXh0OwpAQCAtMTE5MywxMiArMTE5NSwxMSBAQAogICAgc3RydWN0IHIzOTY0X2NsaWVudF9tZXNzYWdlIHRoZU1zZzsKICAgIERFQ0xBUkVfV0FJVFFVRVVFICh3YWl0LCBjdXJyZW50KTsKICAgIAotICAgaW50IHBpZCA9IGN1cnJlbnQtPnBpZDsKICAgIGludCBjb3VudDsKICAgIAogICAgVFJBQ0VfTCgicmVhZCgpIik7CiAgCi0gICBwQ2xpZW50PWZpbmRDbGllbnQocEluZm8sIHBpZCk7CisgICBwQ2xpZW50PWZpbmRDbGllbnQocEluZm8sIHRhc2tfcGlkKGN1cnJlbnQpKTsKICAgIGlmKHBDbGllbnQpCiAgICB7CiAgICAgICBwTXNnID0gcmVtb3ZlX21zZyhwSW5mbywgcENsaWVudCk7CkBAIC0xMjUyLDcgKzEyNTMsNiBAQAogICAgc3RydWN0IHIzOTY0X2Jsb2NrX2hlYWRlciAqcEhlYWRlcjsKICAgIHN0cnVjdCByMzk2NF9jbGllbnRfaW5mbyAqcENsaWVudDsKICAgIHVuc2lnbmVkIGNoYXIgKm5ld19kYXRhOwotICAgaW50IHBpZDsKICAgIAogICAgVFJBQ0VfTCgid3JpdGUgcmVxdWVzdCwgJWQgY2hhcmFjdGVycyIsIGNvdW50KTsKIC8qIApAQCAtMTI5NSw5ICsxMjk1LDcgQEAKICAgIHBIZWFkZXItPmxvY2tzID0gMDsKICAgIHBIZWFkZXItPm93bmVyID0gTlVMTDsKICAgIAotICAgcGlkPWN1cnJlbnQtPnBpZDsKLSAgIAotICAgcENsaWVudD1maW5kQ2xpZW50KHBJbmZvLCBwaWQpOworICAgcENsaWVudD1maW5kQ2xpZW50KHBJbmZvLCB0YXNrX3BpZChjdXJyZW50KSk7CiAgICBpZihwQ2xpZW50KQogICAgewogICAgICAgcEhlYWRlci0+b3duZXIgPSBwQ2xpZW50OwpAQCAtMTMyOCw3ICsxMzI2LDcgQEAKICAgIHN3aXRjaChjbWQpCiAgICB7CiAgICAgICBjYXNlIFIzOTY0X0VOQUJMRV9TSUdOQUxTOgotICAgICAgICAgcmV0dXJuIGVuYWJsZV9zaWduYWxzKHBJbmZvLCBjdXJyZW50LT5waWQsIGFyZyk7CisgICAgICAgICByZXR1cm4gZW5hYmxlX3NpZ25hbHMocEluZm8sIHRhc2tfcGlkKGN1cnJlbnQpLCBhcmcpOwogICAgICAgY2FzZSBSMzk2NF9TRVRQUklPUklUWToKICAgICAgICAgIGlmKGFyZzxSMzk2NF9NQVNURVIgfHwgYXJnPlIzOTY0X1NMQVZFKQogICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzQxLDEzICsxMzM5LDEzIEBACiAgICAgICAgICAgICBwSW5mby0+ZmxhZ3MgJj0gflIzOTY0X0JDQzsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgY2FzZSBSMzk2NF9SRUFEX1RFTEVHUkFNOgotICAgICAgICAgcmV0dXJuIHJlYWRfdGVsZWdyYW0ocEluZm8sIGN1cnJlbnQtPnBpZCwgKHVuc2lnbmVkIGNoYXIgX191c2VyICopYXJnKTsKKyAgICAgICAgIHJldHVybiByZWFkX3RlbGVncmFtKHBJbmZvLCB0YXNrX3BpZChjdXJyZW50KSwgKHVuc2lnbmVkIGNoYXIgX191c2VyICopYXJnKTsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gLUVOT0lPQ1RMQ01EOwogICAgfQogfQogCi1zdGF0aWMgdm9pZCByMzk2NF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCkKK3N0YXRpYyB2b2lkIHIzOTY0X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqIG9sZCkKIHsKICAgIFRSQUNFX0woInNldF90ZXJtaW9zIik7CiB9CkBAIC0xMzU3LDcgKzEzNTUsNiBAQAogCQkgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCiB7CiAgICBzdHJ1Y3QgcjM5NjRfaW5mbyAqcEluZm89KHN0cnVjdCByMzk2NF9pbmZvKil0dHktPmRpc2NfZGF0YTsKLSAgIGludCBwaWQ9Y3VycmVudC0+cGlkOwogICAgc3RydWN0IHIzOTY0X2NsaWVudF9pbmZvICpwQ2xpZW50OwogICAgc3RydWN0IHIzOTY0X21lc3NhZ2UgKnBNc2c9TlVMTDsKICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMzY1LDcgKzEzNjIsNyBAQAogCiAgICBUUkFDRV9MKCJQT0xMIik7CiAKLSAgIHBDbGllbnQ9ZmluZENsaWVudChwSW5mbyxwaWQpOworICAgcENsaWVudD1maW5kQ2xpZW50KHBJbmZvLCB0YXNrX3BpZChjdXJyZW50KSk7CiAgICBpZihwQ2xpZW50KQogICAgICB7CiAgICAgICAgcG9sbF93YWl0KGZpbGUsICZwSW5mby0+cmVhZF93YWl0LCB3YWl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9uX3R0eS5jIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKaW5kZXggNjAzYjlhZC4uMmJkYjAxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25fdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKQEAgLTk5NCw3ICs5OTQsNyBAQAogICoJd2hlbiB0aGUgbGRpc2MgaXMgY2xvc2VkLgogICovCiAgCi1zdGF0aWMgdm9pZCBuX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCkKK3N0YXRpYyB2b2lkIG5fdHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqIG9sZCkKIHsKIAlpZiAoIXR0eSkKIAkJcmV0dXJuOwpAQCAtMTE1MSw3ICsxMTUxLDYgQEAKIAluID0gbWluKCpuciwgbik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5yZWFkX2xvY2ssIGZsYWdzKTsKIAlpZiAobikgewotCQltYigpOwogCQlyZXR2YWwgPSBjb3B5X3RvX3VzZXIoKmIsICZ0dHktPnJlYWRfYnVmW3R0eS0+cmVhZF90YWlsXSwgbik7CiAJCW4gLT0gcmV0dmFsOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5yZWFkX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9uc2NfZ3Bpby5jIGIvZHJpdmVycy9jaGFyL25zY19ncGlvLmMKaW5kZXggNGQ0N2Q3OS4uODA4ZDQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25zY19ncGlvLmMKKysrIGIvZHJpdmVycy9jaGFyL25zY19ncGlvLmMKQEAgLTQxLDcgKzQxLDcgQEAKIHNzaXplX3QgbnNjX2dwaW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAogCQkgICAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQogewotCXVuc2lnbmVkIG0gPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXVuc2lnbmVkIG0gPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IG5zY19ncGlvX29wcyAqYW1wID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGFtcC0+ZGV2OwogCXNpemVfdCBpOwpAQCAtMTA0LDcgKzEwNCw3IEBACiBzc2l6ZV90IG5zY19ncGlvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmLAogCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKiBwcG9zKQogewotCXVuc2lnbmVkIG0gPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXVuc2lnbmVkIG0gPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaW50IHZhbHVlOwogCXN0cnVjdCBuc2NfZ3Bpb19vcHMgKmFtcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCmluZGV4IDc0ZDIxYzEuLmYxMDhjMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKQEAgLTU0MSw3ICs1NDEsNyBAQAogICAgIGlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCSAgICBwcmludGsoIm1nc2xwY19hdHRhY2hcbiIpOwogCi0gICAgaW5mbyA9IChNR1NMUENfSU5GTyAqKWttYWxsb2Moc2l6ZW9mKE1HU0xQQ19JTkZPKSwgR0ZQX0tFUk5FTCk7CisgICAgaW5mbyA9IGttYWxsb2Moc2l6ZW9mKE1HU0xQQ19JTkZPKSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFpbmZvKSB7CiAJICAgIHByaW50aygiRXJyb3IgY2FuJ3QgYWxsb2NhdGUgZGV2aWNlIGluc3RhbmNlIGRhdGFcbiIpOwogCSAgICByZXR1cm4gLUVOT01FTTsKQEAgLTIzNzUsNyArMjM3NSw3IEBACiAgKiAJdHR5CQlwb2ludGVyIHRvIHR0eSBzdHJ1Y3R1cmUKICAqIAl0ZXJtaW9zCQlwb2ludGVyIHRvIGJ1ZmZlciB0byBob2xkIHJldHVybmVkIG9sZCB0ZXJtaW9zCiAgKi8KLXN0YXRpYyB2b2lkIG1nc2xwY19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBtZ3NscGNfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlNR1NMUENfSU5GTyAqaW5mbyA9IChNR1NMUENfSU5GTyAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wcGRldi5jIGIvZHJpdmVycy9jaGFyL3BwZGV2LmMKaW5kZXggYzFlM2RkOC4uNGFiZDFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BwZGV2LmMKKysrIGIvZHJpdmVycy9jaGFyL3BwZGV2LmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogc3RhdGljIHNzaXplX3QgcHBfcmVhZCAoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LAogCQkJbG9mZl90ICogcHBvcykKIHsKLQl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgcHBfc3RydWN0ICpwcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyICoga2J1ZmZlcjsKIAlzc2l6ZV90IGJ5dGVzX3JlYWQgPSAwOwpAQCAtMTg5LDcgKzE4OSw3IEBACiBzdGF0aWMgc3NpemVfdCBwcF93cml0ZSAoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCiB7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IHBwX3N0cnVjdCAqcHAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciAqIGtidWZmZXI7CiAJc3NpemVfdCBieXRlc193cml0dGVuID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wdHkuYyBiL2RyaXZlcnMvY2hhci9wdHkuYwppbmRleCA4MGQzZWVkLi5jMDdhMWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL3B0eS5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCBwdHlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgcHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAgICAgICAgIHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+KENTSVpFIHwgUEFSRU5CKTsKICAgICAgICAgdHR5LT50ZXJtaW9zLT5jX2NmbGFnIHw9IChDUzggfCBDUkVBRCk7CkBAIC0yNzIsNiArMjcyLDggQEAKIAlwdHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vZmxhZyA9IDA7CiAJcHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCMzg0MDAgfCBDUzggfCBDUkVBRDsKIAlwdHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19sZmxhZyA9IDA7CisJcHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gMzg0MDA7CisJcHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gMzg0MDA7CiAJcHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfCBUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXB0eV9kcml2ZXItPm90aGVyID0gcHR5X3NsYXZlX2RyaXZlcjsKIAl0dHlfc2V0X29wZXJhdGlvbnMocHR5X2RyaXZlciwgJnB0eV9vcHMpOwpAQCAtMjg2LDYgKzI4OCw4IEBACiAJcHR5X3NsYXZlX2RyaXZlci0+c3VidHlwZSA9IFBUWV9UWVBFX1NMQVZFOwogCXB0eV9zbGF2ZV9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKIAlwdHlfc2xhdmVfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEIzODQwMCB8IENTOCB8IENSRUFEOworCXB0eV9zbGF2ZV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2lzcGVlZCA9IDM4NDAwOworCXB0eV9zbGF2ZV9kcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDM4NDAwOwogCXB0eV9zbGF2ZV9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TIHwKIAkJCQkJVFRZX0RSSVZFUl9SRUFMX1JBVzsKIAlwdHlfc2xhdmVfZHJpdmVyLT5vdGhlciA9IHB0eV9kcml2ZXI7CkBAIC0zNjYsNiArMzcwLDggQEAKIAlwdG1fZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vZmxhZyA9IDA7CiAJcHRtX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCMzg0MDAgfCBDUzggfCBDUkVBRDsKIAlwdG1fZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19sZmxhZyA9IDA7CisJcHRtX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gMzg0MDA7CisJcHRtX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gMzg0MDA7CiAJcHRtX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfCBUVFlfRFJJVkVSX1JFQUxfUkFXIHwKIAkJVFRZX0RSSVZFUl9EWU5BTUlDX0RFViB8IFRUWV9EUklWRVJfREVWUFRTX01FTTsKIAlwdG1fZHJpdmVyLT5vdGhlciA9IHB0c19kcml2ZXI7CkBAIC0zODEsNiArMzg3LDggQEAKIAlwdHNfZHJpdmVyLT5zdWJ0eXBlID0gUFRZX1RZUEVfU0xBVkU7CiAJcHRzX2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwogCXB0c19kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjM4NDAwIHwgQ1M4IHwgQ1JFQUQ7CisJcHRzX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gMzg0MDA7CisJcHRzX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gMzg0MDA7CiAJcHRzX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfCBUVFlfRFJJVkVSX1JFQUxfUkFXIHwKIAkJVFRZX0RSSVZFUl9EWU5BTUlDX0RFViB8IFRUWV9EUklWRVJfREVWUFRTX01FTTsKIAlwdHNfZHJpdmVyLT5vdGhlciA9IHB0bV9kcml2ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggNGM2NzgyYS4uMTNkMGIxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMTA0OCw3ICsxMDQ4LDcgQEAKIAlpZiAocCA9PSBidWZmZXIpIHsKIAkJcmV0dXJuIChzc2l6ZV90KXJldDsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCSAgICAgICAgaW5vZGUtPmlfbXRpbWUgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOwogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJcmV0dXJuIChzc2l6ZV90KShwIC0gYnVmZmVyKTsKQEAgLTEyMDMsNyArMTIwMyw3IEBACiAKIHN0YXRpYyBpbnQgdXVpZF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJCSB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkJIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sIHZvaWQgKipjb250ZXh0KQorCQkJIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJdW5zaWduZWQgY2hhciB0bXBfdXVpZFsxNl0sICp1dWlkOwogCXVuc2lnbmVkIGludCBsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmF3LmMgYi9kcml2ZXJzL2NoYXIvcmF3LmMKaW5kZXggM2IzMjMxMy4uNjQ1ZTIwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jhdy5jCisrKyBiL2RyaXZlcnMvY2hhci9yYXcuYwpAQCAtNzUsNyArNzUsNyBAQAogCWZpbHAtPmZfZmxhZ3MgfD0gT19ESVJFQ1Q7CiAJZmlscC0+Zl9tYXBwaW5nID0gYmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZzsKIAlpZiAoKytyYXdfZGV2aWNlc1ttaW5vcl0uaW51c2UgPT0gMSkKLQkJZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZyA9CisJCWZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZyA9CiAJCQliZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGJkZXY7CiAJbXV0ZXhfdW5sb2NrKCZyYXdfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKaW5kZXggMTY3ZWJjOC4uMjQ1ZjAzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCkBAIC01NTYsNyArNTU2LDcgQEAKIHsKIAlzdHJ1Y3QgQ21kQmxrICpDbWRCbGtQOwogCi0JQ21kQmxrUCA9IChzdHJ1Y3QgQ21kQmxrICopa21hbGxvYyhzaXplb2Yoc3RydWN0IENtZEJsayksIEdGUF9BVE9NSUMpOworCUNtZEJsa1AgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgQ21kQmxrKSwgR0ZQX0FUT01JQyk7CiAJaWYgKENtZEJsa1ApCiAJCW1lbXNldChDbWRCbGtQLCAwLCBzaXplb2Yoc3RydWN0IENtZEJsaykpOwogCXJldHVybiBDbWRCbGtQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpc2NvbTguYyBiL2RyaXZlcnMvY2hhci9yaXNjb204LmMKaW5kZXggMGE3N2JmYy4uZTJhOTRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpc2NvbTguYworKysgYi9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCkBAIC0xNTM5LDcgKzE1MzksNyBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+b3Blbl93YWl0KTsKIH0KIAotc3RhdGljIHZvaWQgcmNfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCByY19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IHJpc2NvbV9wb3J0ICpwb3J0ID0gKHN0cnVjdCByaXNjb21fcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE2MTQsNiArMTYxNCw4IEBACiAJcmlzY29tX2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwogCXJpc2NvbV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0KIAkJQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCXJpc2NvbV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2lzcGVlZCA9IDk2MDA7CisJcmlzY29tX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDsKIAlyaXNjb21fZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVc7CiAJdHR5X3NldF9vcGVyYXRpb25zKHJpc2NvbV9kcml2ZXIsICZyaXNjb21fb3BzKTsKIAlpZiAoKGVycm9yID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihyaXNjb21fZHJpdmVyKSkpICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcm9ja2V0LmMgYi9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKaW5kZXggYmFjODAwNS4uZTk0YTYyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JvY2tldC5jCisrKyBiL2RyaXZlcnMvY2hhci9yb2NrZXQuYwpAQCAtNzEyLDcgKzcxMiw3IEBACiAgKiAgdXNlciBtb2RlIGludG8gdGhlIGRyaXZlciAoZXhjZXB0aW9uIGhhbmRsZXIpLiAgKmluZm8gQ0QgbWFuaXB1bGF0aW9uIGlzIHNwaW5sb2NrIHByb3RlY3RlZC4KICAqLwogc3RhdGljIHZvaWQgY29uZmlndXJlX3JfcG9ydChzdHJ1Y3Qgcl9wb3J0ICppbmZvLAotCQkJICAgICBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCisJCQkgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJdW5zaWduZWQgY2ZsYWc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAJLyoKIAkgKiBJbmZvLT5jb3VudCBpcyBub3cgMTsgc28gaXQncyBzYWZlIHRvIHNsZWVwIG5vdy4KIAkgKi8KLQlpbmZvLT5zZXNzaW9uID0gY3VycmVudC0+c2lnbmFsLT5zZXNzaW9uOworCWluZm8tPnNlc3Npb24gPSBwcm9jZXNzX3Nlc3Npb24oY3VycmVudCk7CiAJaW5mby0+cGdycCA9IHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7CiAKIAlpZiAoKGluZm8tPmZsYWdzICYgUk9DS0VUX0lOSVRJQUxJWkVEKSA9PSAwKSB7CkBAIC0xMTk0LDcgKzExOTQsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBycF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJICAgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorCQkJICAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3Qgcl9wb3J0ICppbmZvID0gKHN0cnVjdCByX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAlDSEFOTkVMX3QgKmNwOwpAQCAtMjIxNCw3ICsyMjE0LDcgQEAKIAlpbnQgY291bnQgPSAwOwogCiAJLyogIFdvcmsgdGhyb3VnaCB0aGUgUENJIGRldmljZSBsaXN0LCBwdWxsaW5nIG91dCBvdXJzICovCi0Jd2hpbGUgKChkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9SUCwgUENJX0FOWV9JRCwgZGV2KSkpIHsKKwl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfUlAsIFBDSV9BTllfSUQsIGRldikpKSB7CiAJCWlmIChyZWdpc3Rlcl9QQ0koY291bnQgKyBib2FyZHNfZm91bmQsIGRldikpCiAJCQljb3VudCsrOwogCX0KQEAgLTI0MzYsNiArMjQzNiw4IEBACiAJcm9ja2V0X2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwogCXJvY2tldF9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0KIAkgICAgQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCXJvY2tldF9kcml2ZXItPmluaXRfdGVybWlvcy5jX2lzcGVlZCA9IDk2MDA7CisJcm9ja2V0X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDsKICNpZmRlZiBST0NLRVRfU09GVF9GTE9XCiAJcm9ja2V0X2RyaXZlci0+ZmxhZ3MgfD0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfRFlOQU1JQ19ERVY7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ydGMuYyBiL2RyaXZlcnMvY2hhci9ydGMuYwppbmRleCA2NmE3Mzg1Li42NjRmMzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL3J0Yy5jCkBAIC0xMTMsNyArMTEzLDEyIEBACiAjZGVmaW5lIGhwZXRfc2V0X3J0Y19pcnFfYml0KGFyZykgCQkwCiAjZGVmaW5lIGhwZXRfcnRjX3RpbWVyX2luaXQoKSAJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGhwZXRfcnRjX2Ryb3BwZWRfaXJxKCkgCQkJMAotc3RhdGljIGlubGluZSBpcnFyZXR1cm5fdCBocGV0X3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKSB7cmV0dXJuIDA7fQorI2lmZGVmIFJUQ19JUlEKK3N0YXRpYyBpcnFyZXR1cm5fdCBocGV0X3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAjZWxzZQogZXh0ZXJuIGlycXJldHVybl90IGhwZXRfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogI2VuZGlmCkBAIC0xNjUsNyArMTcwLDkgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBpbnQgcnRjX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisjZW5kaWYKIAogLyoKICAqCUJpdHMgaW4gcnRjX3N0YXR1cy4gKDYgYml0cyBvZiByb29tIGZvciBmdXR1cmUgZXhwYW5zaW9uKQpAQCAtOTA2LDYgKzkxMyw3IEBACiAJLmZvcHMJCT0gJnJ0Y19mb3BzLAogfTsKIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydGNfcHJvY19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcnRjX3Byb2Nfb3BlbiwKQEAgLTkxMywxNCArOTIxLDEzIEBACiAJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKLQotI2lmIGRlZmluZWQoUlRDX0lSUSkgJiYgIWRlZmluZWQoX19zcGFyY19fKQotc3RhdGljIGlycV9oYW5kbGVyX3QgcnRjX2ludF9oYW5kbGVyX3B0cjsKICNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBydGNfaW5pdCh2b2lkKQogeworI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CisjZW5kaWYKICNpZiBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX21pcHNfXykKIAl1bnNpZ25lZCBpbnQgeWVhciwgY3RybDsKIAljaGFyICpndWVzcyA9IE5VTEw7CkBAIC05MzIsOSArOTM5LDExIEBACiAJc3RydWN0IHNwYXJjX2lzYV9icmlkZ2UgKmlzYV9icjsKIAlzdHJ1Y3Qgc3BhcmNfaXNhX2RldmljZSAqaXNhX2RldjsKICNlbmRpZgotI2VuZGlmCi0jaWZuZGVmIF9fc3BhcmNfXworI2Vsc2UKIAl2b2lkICpyOworI2lmZGVmIFJUQ19JUlEKKwlpcnFfaGFuZGxlcl90IHJ0Y19pbnRfaGFuZGxlcl9wdHI7CisjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgX19zcGFyY19fCkBAIC05NTgsNiArOTY3LDcgQEAKIAkJfQogCX0KICNlbmRpZgorCXJ0Y19oYXNfaXJxID0gMDsKIAlwcmludGsoS0VSTl9FUlIgInJ0Y19pbml0OiBubyBQQyBydGMgZm91bmRcbiIpOwogCXJldHVybiAtRUlPOwogCkBAIC05NzIsNiArOTgyLDcgQEAKIAkgKiBQQ0kgU2xvdCAyIElOVEEjIChhbmQgc29tZSBJTlR4IyBpbiBTbG90IDEpLgogCSAqLwogCWlmIChyZXF1ZXN0X2lycShydGNfaXJxLCBydGNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgInJ0YyIsICh2b2lkICopJnJ0Y19wb3J0KSkgeworCQlydGNfaGFzX2lycSA9IDA7CiAJCXByaW50ayhLRVJOX0VSUiAicnRjOiBjYW5ub3QgcmVnaXN0ZXIgSVJRICVkXG4iLCBydGNfaXJxKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtOTgyLDYgKzk5Myw5IEBACiAJZWxzZQogCQlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKFJUQ19QT1JUKDApLCBSVENfSU9fRVhURU5ULCAicnRjIik7CiAJaWYgKCFyKSB7CisjaWZkZWYgUlRDX0lSUQorCQlydGNfaGFzX2lycSA9IDA7CisjZW5kaWYKIAkJcHJpbnRrKEtFUk5fRVJSICJydGM6IEkvTyByZXNvdXJjZSAlbHggaXMgbm90IGZyZWUuXG4iLAogCQkgICAgICAgKGxvbmcpKFJUQ19QT1JUKDApKSk7CiAJCXJldHVybiAtRUlPOwpAQCAtOTk2LDYgKzEwMTAsNyBAQAogCiAJaWYocmVxdWVzdF9pcnEoUlRDX0lSUSwgcnRjX2ludF9oYW5kbGVyX3B0ciwgSVJRRl9ESVNBQkxFRCwgInJ0YyIsIE5VTEwpKSB7CiAJCS8qIFllYWggcmlnaHQsIHNlZWluZyBhcyBpcnEgOCBkb2Vzbid0IGV2ZW4gaGl0IHRoZSBidXMuICovCisJCXJ0Y19oYXNfaXJxID0gMDsKIAkJcHJpbnRrKEtFUk5fRVJSICJydGM6IElSUSAlZCBpcyBub3QgZnJlZS5cbiIsIFJUQ19JUlEpOwogCQlpZiAoUlRDX0lPTUFQUEVEKQogCQkJcmVsZWFzZV9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19FWFRFTlQpOwpAQCAtMTAxMiwyMSArMTAyNywxOSBAQAogCWlmIChtaXNjX3JlZ2lzdGVyKCZydGNfZGV2KSkgewogI2lmZGVmIFJUQ19JUlEKIAkJZnJlZV9pcnEoUlRDX0lSUSwgTlVMTCk7CisJCXJ0Y19oYXNfaXJxID0gMDsKICNlbmRpZgogCQlyZWxlYXNlX3JlZ2lvbihSVENfUE9SVCgwKSwgUlRDX0lPX0VYVEVOVCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoImRyaXZlci9ydGMiLCAwLCBOVUxMKTsKLQlpZiAoIWVudCkgewotI2lmZGVmIFJUQ19JUlEKLQkJZnJlZV9pcnEoUlRDX0lSUSwgTlVMTCk7CisJaWYgKGVudCkKKwkJZW50LT5wcm9jX2ZvcHMgPSAmcnRjX3Byb2NfZm9wczsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInJ0YzogRmFpbGVkIHRvIHJlZ2lzdGVyIHdpdGggcHJvY2ZzLlxuIik7CiAjZW5kaWYKLQkJcmVsZWFzZV9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19FWFRFTlQpOwotCQltaXNjX2RlcmVnaXN0ZXIoJnJ0Y19kZXYpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZW50LT5wcm9jX2ZvcHMgPSAmcnRjX3Byb2NfZm9wczsKIAogI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9fbWlwc19fKQogCXJ0Y19mcmVxID0gSFo7CkBAIC0xMTU5LDYgKzExNzIsNyBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogLyoKICAqCUluZm8gZXhwb3J0ZWQgdmlhICIvcHJvYy9kcml2ZXIvcnRjIi4KICAqLwpAQCAtMTI0Myw2ICsxMjU3LDcgQEAKIHsKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRjX3Byb2Nfc2hvdywgTlVMTCk7CiB9CisjZW5kaWYKIAogdm9pZCBydGNfZ2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqcnRjX3RtKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jIGIvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jCmluZGV4IDQyMTdkMzguLjc1ZGU1ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZXJfYTIyMzIuYworKysgYi9kcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmMKQEAgLTY5NSw2ICs2OTUsOCBAQAogCWEyMjMyX2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwogCWEyMjMyX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPQogCQlCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJYTIyMzJfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOworCWEyMjMyX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDsKIAlhMjIzMl9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVzsKIAl0dHlfc2V0X29wZXJhdGlvbnMoYTIyMzJfZHJpdmVyLCAmYTIyMzJfb3BzKTsKIAlpZiAoKGVycm9yID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihhMjIzMl9kcml2ZXIpKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCmluZGV4IDliYTEzYWYuLmFmNTBkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYworKysgYi9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKQEAgLTE2OTUsNyArMTY5NSw3IEBACiAKIAogc3RhdGljIHZvaWQKLWN5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkX3Rlcm1pb3MpCitjeV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGRfdGVybWlvcykKIHsKICAgc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPSAoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKaW5kZXggZmM4NzA3MC4uMTdkNTRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jCisrKyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwpAQCAtOTc5LDcgKzk3OSw3IEBACiAJfQogCiAJaWYgKHJldCA+IDApIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJaW5vZGUtPmlfYXRpbWUgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jIGIvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCmluZGV4IDk5MTM3YWIuLjIwOTQ2ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYworKysgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKQEAgLTIzMTEsNyArMjMxMSw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgc3hfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBzeF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IHNwZWNpYWxpeF9wb3J0ICpwb3J0ID0gKHN0cnVjdCBzcGVjaWFsaXhfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI0MDAsNiArMjQwMCw4IEBACiAJc3BlY2lhbGl4X2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwogCXNwZWNpYWxpeF9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0KIAkJQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCXNwZWNpYWxpeF9kcml2ZXItPmluaXRfdGVybWlvcy5jX2lzcGVlZCA9IDk2MDA7CisJc3BlY2lhbGl4X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDsKIAlzcGVjaWFsaXhfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVc7CiAJdHR5X3NldF9vcGVyYXRpb25zKHNwZWNpYWxpeF9kcml2ZXIsICZzeF9vcHMpOwogCkBAIC0yNDc1LDcgKzI0NzcsNyBAQAogCQkJCWkrKzsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCXBkZXYgPSBwY2lfZmluZF9kZXZpY2UgKFBDSV9WRU5ET1JfSURfU1BFQ0lBTElYLAorCQkJcGRldiA9IHBjaV9nZXRfZGV2aWNlIChQQ0lfVkVORE9SX0lEX1NQRUNJQUxJWCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ERVZJQ0VfSURfU1BFQ0lBTElYX0lPOCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgIHBkZXYpOwogCQkJaWYgKCFwZGV2KSBicmVhazsKQEAgLTI0OTEsNiArMjQ5Myw5IEBACiAJCQlpZiAoIXN4X3Byb2JlKCZzeF9ib2FyZFtpXSkpCiAJCQkJZm91bmQgKys7CiAJCX0KKwkJLyogTWF5IGV4aXQgcGNpX2dldCBzZXF1ZW5jZSBlYXJseSB3aXRoIGxvdHMgb2YgYm9hcmRzICovCisJCWlmIChwZGV2ICE9IE5VTEwpCisJCQlwY2lfZGV2X3B1dChwZGV2KTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwppbmRleCA1ZTJkZTYyLi5lNDUxMTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwpAQCAtNDEsMTMgKzQxLDEyIEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaWZkZWYgQ09ORklHX1BDSQogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNjMsNDUgKzYyLDE2IEBACiAjZGVmaW5lCUJSRF9FQ0g2NFBDSQkyNwogI2RlZmluZQlCUkRfRUFTWUlPUENJCTI4CiAKLS8qCi0gKglEZWZpbmUgYSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB0byBob2xkIHRoZSBib2FyZCBjb25maWd1cmF0aW9uLgotICoJTmVlZCB0byBzZXQgdGhpcyB1cCBpbiB0aGUgY29kZSAoZm9yIG5vdykgd2l0aCB0aGUgYm9hcmRzIHRoYXQgYXJlCi0gKgl0byBiZSBjb25maWd1cmVkIGludG8gdGhlIHN5c3RlbS4gVGhpcyBpcyB3aGF0IG5lZWRzIHRvIGJlIG1vZGlmaWVkCi0gKgl3aGVuIGFkZGluZy9yZW1vdmluZy9tb2RpZnlpbmcgYm9hcmRzLiBFYWNoIGxpbmUgZW50cnkgaW4gdGhlCi0gKglzdGxfYnJkY29uZltdIGFycmF5IGlzIGEgYm9hcmQuIEVhY2ggbGluZSBjb250YWlucyBpby9pcnEvbWVtb3J5Ci0gKglyYW5nZXMgZm9yIHRoYXQgYm9hcmQgKGFzIHdlbGwgYXMgd2hhdCB0eXBlIG9mIGJvYXJkIGl0IGlzKS4KLSAqCVNvbWUgZXhhbXBsZXM6Ci0gKgkJeyBCUkRfRUFTWUlPLCAweDJhMCwgMCwgMCwgMTAsIDAgfSwKLSAqCVRoaXMgbGluZSB3b3VsZCBjb25maWd1cmUgYW4gRWFzeUlPIGJvYXJkICg0IG9yIDgsIG5vIGRpZmZlcmVuY2UpLAotICoJYXQgaW8gYWRkcmVzcyAyYTAgYW5kIGlycSAxMC4KLSAqCUFub3RoZXIgZXhhbXBsZToKLSAqCQl7IEJSRF9FQ0gsIDB4MmE4LCAweDI4MCwgMCwgMTIsIDAgfSwKLSAqCVRoaXMgbGluZSB3aWxsIGNvbmZpZ3VyZSBhbiBFYXN5Q29ubmVjdGlvbiA4LzMyIGJvYXJkIGF0IHByaW1hcnkgaW8KLSAqCWFkZHJlc3MgMmE4LCBzZWNvbmRhcnkgaW8gYWRkcmVzcyAyODAgYW5kIGlycSAxMi4KLSAqCUVudGVyIGFzIG1hbnkgbGluZXMgaW50byB0aGlzIGFycmF5IGFzIHlvdSB3YW50IChvbmx5IHRoZSBmaXJzdCA0Ci0gKgl3aWxsIGFjdHVhbGx5IGJlIHVzZWQhKS4gQW55IGNvbWJpbmF0aW9uIG9mIEVhc3lJTyBhbmQgRWFzeUNvbm5lY3Rpb24KLSAqCWJvYXJkcyBjYW4gYmUgc3BlY2lmaWVkLiBFYXN5Q29ubmVjdGlvbiA4LzMyIGJvYXJkcyBjYW4gc2hhcmUgdGhlaXIKLSAqCXNlY29uZGFyeSBpbyBhZGRyZXNzZXMgYmV0d2VlbiBlYWNoIG90aGVyLgotICoKLSAqCU5PVEU6IHRoZXJlIGlzIG5vIG5lZWQgdG8gcHV0IGFueSBlbnRyaWVzIGluIHRoaXMgdGFibGUgZm9yIFBDSQotICoJYm9hcmRzLiBUaGV5IHdpbGwgYmUgZm91bmQgYXV0b21hdGljYWxseSBieSB0aGUgZHJpdmVyIC0gcHJvdmlkZWQKLSAqCVBDSSBCSU9TMzIgc3VwcG9ydCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCWludAkJYnJkdHlwZTsKK3N0cnVjdCBzdGxjb25mIHsKKwl1bnNpZ25lZCBpbnQJYnJkdHlwZTsKIAlpbnQJCWlvYWRkcjE7CiAJaW50CQlpb2FkZHIyOwogCXVuc2lnbmVkIGxvbmcJbWVtYWRkcjsKIAlpbnQJCWlycTsKIAlpbnQJCWlycXR5cGU7Ci19IHN0bGNvbmZfdDsKLQotc3RhdGljIHN0bGNvbmZfdAlzdGxfYnJkY29uZltdID0gewotCS8qeyBCUkRfRUFTWUlPLCAweDJhMCwgMCwgMCwgMTAsIDAgfSwqLwogfTsKIAotc3RhdGljIGludAlzdGxfbnJicmRzID0gQVJSQVlfU0laRShzdGxfYnJkY29uZik7CitzdGF0aWMgdW5zaWduZWQgaW50IHN0bF9ucmJyZHM7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTQzLDM0ICsxMTMsMzAgQEAKICAqCXdpdGggdGhpcyB0ZXJtaW9zIGluaXRpYWxseS4gQmFzaWNhbGx5IGFsbCBpdCBkZWZpbmVzIGlzIGEgcmF3IHBvcnQKICAqCWF0IDk2MDAsIDggZGF0YSBiaXRzLCAxIHN0b3AgYml0LgogICovCi1zdGF0aWMgc3RydWN0IHRlcm1pb3MJCXN0bF9kZWZ0ZXJtaW9zID0geworc3RhdGljIHN0cnVjdCBrdGVybWlvcwkJc3RsX2RlZnRlcm1pb3MgPSB7CiAJLmNfY2ZsYWcJPSAoQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMKSwKIAkuY19jYwkJPSBJTklUX0NfQ0MsCisJLmNfaXNwZWVkCT0gOTYwMCwKKwkuY19vc3BlZWQJPSA5NjAwLAogfTsKIAogLyoKLSAqCURlZmluZSBnbG9iYWwgc3RhdHMgc3RydWN0dXJlcy4gTm90IHVzZWQgb2Z0ZW4sIGFuZCBjYW4gYmUKLSAqCXJlLXVzZWQgZm9yIGVhY2ggc3RhdHMgY2FsbC4KLSAqLwotc3RhdGljIGNvbXN0YXRzX3QJc3RsX2NvbXN0YXRzOwotc3RhdGljIGNvbWJyZF90CQlzdGxfYnJkc3RhdHM7Ci1zdGF0aWMgc3RsYnJkX3QJCXN0bF9kdW1teWJyZDsKLXN0YXRpYyBzdGxwb3J0X3QJc3RsX2R1bW15cG9ydDsKLQotLyoKICAqCURlZmluZSBnbG9iYWwgcGxhY2UgdG8gcHV0IGJ1ZmZlciBvdmVyZmxvdyBjaGFyYWN0ZXJzLgogICovCiBzdGF0aWMgY2hhcgkJc3RsX3Vud2FudGVkW1NDMjYxOThfUlhGSUZPU0laRV07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHN0bGJyZF90CQkqc3RsX2JyZHNbU1RMX01BWEJSRFNdOworc3RhdGljIERFRklORV9NVVRFWChzdGxfYnJkc2xvY2spOworc3RhdGljIHN0cnVjdCBzdGxicmQJCSpzdGxfYnJkc1tTVExfTUFYQlJEU107CiAKIC8qCiAgKglQZXIgYm9hcmQgc3RhdGUgZmxhZ3MuIFVzZWQgd2l0aCB0aGUgc3RhdGUgZmllbGQgb2YgdGhlIGJvYXJkIHN0cnVjdC4KICAqCU5vdCByZWFsbHkgbXVjaCBoZXJlIQogICovCiAjZGVmaW5lCUJSRF9GT1VORAkweDEKKyNkZWZpbmUgU1RMX1BST0JFRAkweDIKKwogCiAvKgogICoJRGVmaW5lIHRoZSBwb3J0IHN0cnVjdHVyZSBpc3RhdGUgZmxhZ3MuIFRoZXNlIHNldCBvZiBmbGFncyBhcmUKQEAgLTE4NywzMiArMTUzLDMyIEBACiAgKglyZWZlcmVuY2luZyBib2FyZHMgd2hlbiBwcmludGluZyB0cmFjZSBhbmQgc3R1ZmYuCiAgKi8KIHN0YXRpYyBjaGFyCSpzdGxfYnJkbmFtZXNbXSA9IHsKLQkoY2hhciAqKSBOVUxMLAotCShjaGFyICopIE5VTEwsCi0JKGNoYXIgKikgTlVMTCwKLQkoY2hhciAqKSBOVUxMLAotCShjaGFyICopIE5VTEwsCi0JKGNoYXIgKikgTlVMTCwKLQkoY2hhciAqKSBOVUxMLAotCShjaGFyICopIE5VTEwsCi0JKGNoYXIgKikgTlVMTCwKLQkoY2hhciAqKSBOVUxMLAotCShjaGFyICopIE5VTEwsCi0JKGNoYXIgKikgTlVMTCwKLQkoY2hhciAqKSBOVUxMLAotCShjaGFyICopIE5VTEwsCi0JKGNoYXIgKikgTlVMTCwKLQkoY2hhciAqKSBOVUxMLAotCShjaGFyICopIE5VTEwsCi0JKGNoYXIgKikgTlVMTCwKLQkoY2hhciAqKSBOVUxMLAotCShjaGFyICopIE5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAogCSJFYXN5SU8iLAogCSJFQzgvMzItQVQiLAogCSJFQzgvMzItTUMiLAotCShjaGFyICopIE5VTEwsCi0JKGNoYXIgKikgTlVMTCwKLQkoY2hhciAqKSBOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAogCSJFQzgvMzItUENJIiwKIAkiRUM4LzY0LVBDSSIsCiAJIkVhc3lJTy1QQ0kiLApAQCAtMjI1LDcgKzE5MSw3IEBACiAgKglsb2FkIGxpbmUuIFRoZXNlIGFsbG93IGZvciBlYXN5IGJvYXJkIGRlZmluaXRpb25zLCBhbmQgZWFzeQogICoJbW9kaWZpY2F0aW9uIG9mIHRoZSBpbywgbWVtb3J5IGFuZCBpcnEgcmVzb3VjcmVzLgogICovCi1zdGF0aWMgaW50CXN0bF9uYXJncyA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHN0bF9uYXJnczsKIHN0YXRpYyBjaGFyCSpib2FyZDBbNF07CiBzdGF0aWMgY2hhcgkqYm9hcmQxWzRdOwogc3RhdGljIGNoYXIJKmJvYXJkMls0XTsKQEAgLTI0MywxMiArMjA5LDEwIEBACiAgKglwYXJzZSBhbnkgbW9kdWxlIGFyZ3VtZW50cy4KICAqLwogCi10eXBlZGVmIHN0cnVjdCBzdGxicmR0eXBlIHsKK3N0YXRpYyBzdHJ1Y3QgewogCWNoYXIJKm5hbWU7CiAJaW50CXR5cGU7Ci19IHN0bGJyZHR5cGVfdDsKLQotc3RhdGljIHN0bGJyZHR5cGVfdAlzdGxfYnJkc3RyW10gPSB7Cit9IHN0bF9icmRzdHJbXSA9IHsKIAl7ICJlYXN5aW8iLCBCUkRfRUFTWUlPIH0sCiAJeyAiZWlvIiwgQlJEX0VBU1lJTyB9LAogCXsgIjIwIiwgQlJEX0VBU1lJTyB9LApAQCAtMjgyLDkgKzI0Niw2IEBACiAvKgogICoJRGVmaW5lIHRoZSBtb2R1bGUgYWdydW1lbnRzLgogICovCi1NT0RVTEVfQVVUSE9SKCJHcmVnIFVuZ2VyZXIiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU3RhbGxpb24gTXVsdGlwb3J0IFNlcmlhbCBEcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KGJvYXJkMCwgY2hhcnAsICZzdGxfbmFyZ3MsIDApOwogTU9EVUxFX1BBUk1fREVTQyhib2FyZDAsICJCb2FyZCAwIGNvbmZpZyAtPiBuYW1lWyxpb2FkZHJbLGlvYWRkcjJdWyxpcnFdXSIpOwpAQCAtMzg2LDggKzM0Nyw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmZGVmIENPTkZJR19QQ0kKLQogLyoKICAqCURlZmluZSB0aGUgU3RhbGxpb24gUENJIHZlbmRvciBhbmQgZGV2aWNlIElEcy4KICAqLwpAQCAtNDA3LDIyICszNjYsMTkgQEAKIC8qCiAgKglEZWZpbmUgc3RydWN0dXJlIHRvIGhvbGQgYWxsIFN0YWxsaW9uIFBDSSBib2FyZHMuCiAgKi8KLXR5cGVkZWYgc3RydWN0IHN0bHBjaWJyZCB7Ci0JdW5zaWduZWQgc2hvcnQJCXZlbmRpZDsKLQl1bnNpZ25lZCBzaG9ydAkJZGV2aWQ7Ci0JaW50CQkJYnJkdHlwZTsKLX0gc3RscGNpYnJkX3Q7CiAKLXN0YXRpYyBzdGxwY2licmRfdAlzdGxfcGNpYnJkc1tdID0gewotCXsgUENJX1ZFTkRPUl9JRF9TVEFMTElPTiwgUENJX0RFVklDRV9JRF9FQ0hQQ0k4NjQsIEJSRF9FQ0g2NFBDSSB9LAotCXsgUENJX1ZFTkRPUl9JRF9TVEFMTElPTiwgUENJX0RFVklDRV9JRF9FSU9QQ0ksIEJSRF9FQVNZSU9QQ0kgfSwKLQl7IFBDSV9WRU5ET1JfSURfU1RBTExJT04sIFBDSV9ERVZJQ0VfSURfRUNIUENJODMyLCBCUkRfRUNIUENJIH0sCi0JeyBQQ0lfVkVORE9SX0lEX05TLCBQQ0lfREVWSUNFX0lEX05TXzg3NDEwLCBCUkRfRUNIUENJIH0sCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RsX3BjaWJyZHNbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TVEFMTElPTiwgUENJX0RFVklDRV9JRF9FQ0hQQ0k4NjQpLAorCQkuZHJpdmVyX2RhdGEgPSBCUkRfRUNINjRQQ0kgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TVEFMTElPTiwgUENJX0RFVklDRV9JRF9FSU9QQ0kpLAorCQkuZHJpdmVyX2RhdGEgPSBCUkRfRUFTWUlPUENJIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1RBTExJT04sIFBDSV9ERVZJQ0VfSURfRUNIUENJODMyKSwKKwkJLmRyaXZlcl9kYXRhID0gQlJEX0VDSFBDSSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05TLCBQQ0lfREVWSUNFX0lEX05TXzg3NDEwKSwKKwkJLmRyaXZlcl9kYXRhID0gQlJEX0VDSFBDSSB9LAorCXsgfQogfTsKLQotc3RhdGljIGludAlzdGxfbnJwY2licmRzID0gQVJSQVlfU0laRShzdGxfcGNpYnJkcyk7Ci0KLSNlbmRpZgorTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN0bF9wY2licmRzKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC00NDIsMTM0ICszOTgsNzQgQEAKIAk5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAKIH07CiAKLS8qCi0gKglEZWZpbmUgc29tZSBoYW5keSBsb2NhbCBtYWNyb3MuLi4KLSAqLwotI3VuZGVmCU1JTgotI2RlZmluZQlNSU4oYSxiKQkoKChhKSA8PSAoYikpID8gKGEpIDogKGIpKQotCi0jdW5kZWYJVE9MT1dFUgotI2RlZmluZQlUT0xPV0VSKHgpCSgoKCh4KSA+PSAnQScpICYmICgoeCkgPD0gJ1onKSkgPyAoKHgpICsgMHgyMCkgOiAoeCkpCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKICAqCURlY2xhcmUgYWxsIHRob3NlIGZ1bmN0aW9ucyBpbiB0aGlzIGRyaXZlciEKICAqLwogCi1zdGF0aWMgdm9pZAlzdGxfYXJnYnJkcyh2b2lkKTsKLXN0YXRpYyBpbnQJc3RsX3BhcnNlYnJkKHN0bGNvbmZfdCAqY29uZnAsIGNoYXIgKiphcmdwKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RsX2F0b2woY2hhciAqc3RyKTsKLQotc3RhdGljIGludAlzdGxfaW5pdCh2b2lkKTsKLXN0YXRpYyBpbnQJc3RsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIHZvaWQJc3RsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyBpbnQJc3RsX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKLXN0YXRpYyB2b2lkCXN0bF9wdXRjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpOwotc3RhdGljIHZvaWQJc3RsX2ZsdXNoY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgaW50CXN0bF93cml0ZXJvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgaW50CXN0bF9jaGFyc2luYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotc3RhdGljIGludAlzdGxfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyB2b2lkCXN0bF9zZXR0ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGQpOwotc3RhdGljIHZvaWQJc3RsX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotc3RhdGljIHZvaWQJc3RsX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgdm9pZAlzdGxfc3RvcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLXN0YXRpYyB2b2lkCXN0bF9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLXN0YXRpYyB2b2lkCXN0bF9mbHVzaGJ1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLXN0YXRpYyB2b2lkCXN0bF9icmVha2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc3RhdGUpOwotc3RhdGljIHZvaWQJc3RsX3dhaXR1bnRpbHNlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpOwotc3RhdGljIHZvaWQJc3RsX3NlbmR4Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKTsKLXN0YXRpYyB2b2lkCXN0bF9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgaW50CXN0bF9tZW1pb2N0bChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZnAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyBpbnQJc3RsX3BvcnRpbmZvKHN0bHBvcnRfdCAqcG9ydHAsIGludCBwb3J0bnIsIGNoYXIgKnBvcyk7Ci1zdGF0aWMgaW50CXN0bF9yZWFkcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci0KLXN0YXRpYyBpbnQJc3RsX2JyZGluaXQoc3RsYnJkX3QgKmJyZHApOwotc3RhdGljIGludAlzdGxfaW5pdHBvcnRzKHN0bGJyZF90ICpicmRwLCBzdGxwYW5lbF90ICpwYW5lbHApOwotc3RhdGljIGludAlzdGxfZ2V0c2VyaWFsKHN0bHBvcnRfdCAqcG9ydHAsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApOwotc3RhdGljIGludAlzdGxfc2V0c2VyaWFsKHN0bHBvcnRfdCAqcG9ydHAsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApOwotc3RhdGljIGludAlzdGxfZ2V0YnJkc3RhdHMoY29tYnJkX3QgX191c2VyICpicCk7Ci1zdGF0aWMgaW50CXN0bF9nZXRwb3J0c3RhdHMoc3RscG9ydF90ICpwb3J0cCwgY29tc3RhdHNfdCBfX3VzZXIgKmNwKTsKLXN0YXRpYyBpbnQJc3RsX2NscnBvcnRzdGF0cyhzdGxwb3J0X3QgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApOwotc3RhdGljIGludAlzdGxfZ2V0cG9ydHN0cnVjdChzdGxwb3J0X3QgX191c2VyICphcmcpOwotc3RhdGljIGludAlzdGxfZ2V0YnJkc3RydWN0KHN0bGJyZF90IF9fdXNlciAqYXJnKTsKLXN0YXRpYyBpbnQJc3RsX3dhaXRjYXJyaWVyKHN0bHBvcnRfdCAqcG9ydHAsIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyBpbnQJc3RsX2Vpb2ludHIoc3RsYnJkX3QgKmJyZHApOwotc3RhdGljIGludAlzdGxfZWNoYXRpbnRyKHN0bGJyZF90ICpicmRwKTsKLXN0YXRpYyBpbnQJc3RsX2VjaG1jYWludHIoc3RsYnJkX3QgKmJyZHApOwotc3RhdGljIGludAlzdGxfZWNocGNpaW50cihzdGxicmRfdCAqYnJkcCk7Ci1zdGF0aWMgaW50CXN0bF9lY2hwY2k2NGludHIoc3RsYnJkX3QgKmJyZHApOwotc3RhdGljIHZvaWQJc3RsX29mZmludHIoc3RydWN0IHdvcmtfc3RydWN0ICopOwotc3RhdGljIHN0bGJyZF90ICpzdGxfYWxsb2NicmQodm9pZCk7Ci1zdGF0aWMgc3RscG9ydF90ICpzdGxfZ2V0cG9ydChpbnQgYnJkbnIsIGludCBwYW5lbG5yLCBpbnQgcG9ydG5yKTsKLQotc3RhdGljIGlubGluZSBpbnQJc3RsX2luaXRicmRzKHZvaWQpOwotc3RhdGljIGlubGluZSBpbnQJc3RsX2luaXRlaW8oc3RsYnJkX3QgKmJyZHApOwotc3RhdGljIGlubGluZSBpbnQJc3RsX2luaXRlY2goc3RsYnJkX3QgKmJyZHApOwotc3RhdGljIGlubGluZSBpbnQJc3RsX2dldGJyZG5yKHZvaWQpOwotCi0jaWZkZWYJQ09ORklHX1BDSQotc3RhdGljIGlubGluZSBpbnQJc3RsX2ZpbmRwY2licmRzKHZvaWQpOwotc3RhdGljIGlubGluZSBpbnQJc3RsX2luaXRwY2licmQoaW50IGJyZHR5cGUsIHN0cnVjdCBwY2lfZGV2ICpkZXZwKTsKLSNlbmRpZgorc3RhdGljIGludAlzdGxfYnJkaW5pdChzdHJ1Y3Qgc3RsYnJkICpicmRwKTsKK3N0YXRpYyBpbnQJc3RsX2dldHBvcnRzdGF0cyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGNvbXN0YXRzX3QgX191c2VyICpjcCk7CitzdGF0aWMgaW50CXN0bF9jbHJwb3J0c3RhdHMoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApOworc3RhdGljIGludAlzdGxfd2FpdGNhcnJpZXIoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiAKIC8qCiAgKglDRDE0MDAgdWFydCBzcGVjaWZpYyBoYW5kbGluZyBmdW5jdGlvbnMuCiAgKi8KLXN0YXRpYyB2b2lkCXN0bF9jZDE0MDBzZXRyZWcoc3RscG9ydF90ICpwb3J0cCwgaW50IHJlZ25yLCBpbnQgdmFsdWUpOwotc3RhdGljIGludAlzdGxfY2QxNDAwZ2V0cmVnKHN0bHBvcnRfdCAqcG9ydHAsIGludCByZWducik7Ci1zdGF0aWMgaW50CXN0bF9jZDE0MDB1cGRhdGVyZWcoc3RscG9ydF90ICpwb3J0cCwgaW50IHJlZ25yLCBpbnQgdmFsdWUpOwotc3RhdGljIGludAlzdGxfY2QxNDAwcGFuZWxpbml0KHN0bGJyZF90ICpicmRwLCBzdGxwYW5lbF90ICpwYW5lbHApOwotc3RhdGljIHZvaWQJc3RsX2NkMTQwMHBvcnRpbml0KHN0bGJyZF90ICpicmRwLCBzdGxwYW5lbF90ICpwYW5lbHAsIHN0bHBvcnRfdCAqcG9ydHApOwotc3RhdGljIHZvaWQJc3RsX2NkMTQwMHNldHBvcnQoc3RscG9ydF90ICpwb3J0cCwgc3RydWN0IHRlcm1pb3MgKnRpb3NwKTsKLXN0YXRpYyBpbnQJc3RsX2NkMTQwMGdldHNpZ25hbHMoc3RscG9ydF90ICpwb3J0cCk7Ci1zdGF0aWMgdm9pZAlzdGxfY2QxNDAwc2V0c2lnbmFscyhzdGxwb3J0X3QgKnBvcnRwLCBpbnQgZHRyLCBpbnQgcnRzKTsKLXN0YXRpYyB2b2lkCXN0bF9jZDE0MDBjY3J3YWl0KHN0bHBvcnRfdCAqcG9ydHApOwotc3RhdGljIHZvaWQJc3RsX2NkMTQwMGVuYWJsZXJ4dHgoc3RscG9ydF90ICpwb3J0cCwgaW50IHJ4LCBpbnQgdHgpOwotc3RhdGljIHZvaWQJc3RsX2NkMTQwMHN0YXJ0cnh0eChzdGxwb3J0X3QgKnBvcnRwLCBpbnQgcngsIGludCB0eCk7Ci1zdGF0aWMgdm9pZAlzdGxfY2QxNDAwZGlzYWJsZWludHJzKHN0bHBvcnRfdCAqcG9ydHApOwotc3RhdGljIHZvaWQJc3RsX2NkMTQwMHNlbmRicmVhayhzdGxwb3J0X3QgKnBvcnRwLCBpbnQgbGVuKTsKLXN0YXRpYyB2b2lkCXN0bF9jZDE0MDBmbG93Y3RybChzdGxwb3J0X3QgKnBvcnRwLCBpbnQgc3RhdGUpOwotc3RhdGljIHZvaWQJc3RsX2NkMTQwMHNlbmRmbG93KHN0bHBvcnRfdCAqcG9ydHAsIGludCBzdGF0ZSk7Ci1zdGF0aWMgdm9pZAlzdGxfY2QxNDAwZmx1c2goc3RscG9ydF90ICpwb3J0cCk7Ci1zdGF0aWMgaW50CXN0bF9jZDE0MDBkYXRhc3RhdGUoc3RscG9ydF90ICpwb3J0cCk7Ci1zdGF0aWMgdm9pZAlzdGxfY2QxNDAwZWlvaW50cihzdGxwYW5lbF90ICpwYW5lbHAsIHVuc2lnbmVkIGludCBpb2Jhc2UpOwotc3RhdGljIHZvaWQJc3RsX2NkMTQwMGVjaGludHIoc3RscGFuZWxfdCAqcGFuZWxwLCB1bnNpZ25lZCBpbnQgaW9iYXNlKTsKLXN0YXRpYyB2b2lkCXN0bF9jZDE0MDB0eGlzcihzdGxwYW5lbF90ICpwYW5lbHAsIGludCBpb2FkZHIpOwotc3RhdGljIHZvaWQJc3RsX2NkMTQwMHJ4aXNyKHN0bHBhbmVsX3QgKnBhbmVscCwgaW50IGlvYWRkcik7Ci1zdGF0aWMgdm9pZAlzdGxfY2QxNDAwbWRtaXNyKHN0bHBhbmVsX3QgKnBhbmVscCwgaW50IGlvYWRkcik7CitzdGF0aWMgdm9pZAlzdGxfY2QxNDAwc2V0cmVnKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHJlZ25yLCBpbnQgdmFsdWUpOworc3RhdGljIGludAlzdGxfY2QxNDAwZ2V0cmVnKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHJlZ25yKTsKK3N0YXRpYyBpbnQJc3RsX2NkMTQwMHVwZGF0ZXJlZyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCByZWduciwgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQJc3RsX2NkMTQwMHBhbmVsaW5pdChzdHJ1Y3Qgc3RsYnJkICpicmRwLCBzdHJ1Y3Qgc3RscGFuZWwgKnBhbmVscCk7CitzdGF0aWMgdm9pZAlzdGxfY2QxNDAwcG9ydGluaXQoc3RydWN0IHN0bGJyZCAqYnJkcCwgc3RydWN0IHN0bHBhbmVsICpwYW5lbHAsIHN0cnVjdCBzdGxwb3J0ICpwb3J0cCk7CitzdGF0aWMgdm9pZAlzdGxfY2QxNDAwc2V0cG9ydChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIHN0cnVjdCBrdGVybWlvcyAqdGlvc3ApOworc3RhdGljIGludAlzdGxfY2QxNDAwZ2V0c2lnbmFscyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApOworc3RhdGljIHZvaWQJc3RsX2NkMTQwMHNldHNpZ25hbHMoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgZHRyLCBpbnQgcnRzKTsKK3N0YXRpYyB2b2lkCXN0bF9jZDE0MDBjY3J3YWl0KHN0cnVjdCBzdGxwb3J0ICpwb3J0cCk7CitzdGF0aWMgdm9pZAlzdGxfY2QxNDAwZW5hYmxlcnh0eChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCByeCwgaW50IHR4KTsKK3N0YXRpYyB2b2lkCXN0bF9jZDE0MDBzdGFydHJ4dHgoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgcngsIGludCB0eCk7CitzdGF0aWMgdm9pZAlzdGxfY2QxNDAwZGlzYWJsZWludHJzKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCk7CitzdGF0aWMgdm9pZAlzdGxfY2QxNDAwc2VuZGJyZWFrKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IGxlbik7CitzdGF0aWMgdm9pZAlzdGxfY2QxNDAwZmxvd2N0cmwoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgc3RhdGUpOworc3RhdGljIHZvaWQJc3RsX2NkMTQwMHNlbmRmbG93KHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHN0YXRlKTsKK3N0YXRpYyB2b2lkCXN0bF9jZDE0MDBmbHVzaChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApOworc3RhdGljIGludAlzdGxfY2QxNDAwZGF0YXN0YXRlKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCk7CitzdGF0aWMgdm9pZAlzdGxfY2QxNDAwZWlvaW50cihzdHJ1Y3Qgc3RscGFuZWwgKnBhbmVscCwgdW5zaWduZWQgaW50IGlvYmFzZSk7CitzdGF0aWMgdm9pZAlzdGxfY2QxNDAwZWNoaW50cihzdHJ1Y3Qgc3RscGFuZWwgKnBhbmVscCwgdW5zaWduZWQgaW50IGlvYmFzZSk7CitzdGF0aWMgdm9pZAlzdGxfY2QxNDAwdHhpc3Ioc3RydWN0IHN0bHBhbmVsICpwYW5lbHAsIGludCBpb2FkZHIpOworc3RhdGljIHZvaWQJc3RsX2NkMTQwMHJ4aXNyKHN0cnVjdCBzdGxwYW5lbCAqcGFuZWxwLCBpbnQgaW9hZGRyKTsKK3N0YXRpYyB2b2lkCXN0bF9jZDE0MDBtZG1pc3Ioc3RydWN0IHN0bHBhbmVsICpwYW5lbHAsIGludCBpb2FkZHIpOwogCi1zdGF0aWMgaW5saW5lIGludAlzdGxfY2QxNDAwYnJlYWtpc3Ioc3RscG9ydF90ICpwb3J0cCwgaW50IGlvYWRkcik7CitzdGF0aWMgaW5saW5lIGludAlzdGxfY2QxNDAwYnJlYWtpc3Ioc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgaW9hZGRyKTsKIAogLyoKICAqCVNDMjYxOTggdWFydCBzcGVjaWZpYyBoYW5kbGluZyBmdW5jdGlvbnMuCiAgKi8KLXN0YXRpYyB2b2lkCXN0bF9zYzI2MTk4c2V0cmVnKHN0bHBvcnRfdCAqcG9ydHAsIGludCByZWduciwgaW50IHZhbHVlKTsKLXN0YXRpYyBpbnQJc3RsX3NjMjYxOThnZXRyZWcoc3RscG9ydF90ICpwb3J0cCwgaW50IHJlZ25yKTsKLXN0YXRpYyBpbnQJc3RsX3NjMjYxOTh1cGRhdGVyZWcoc3RscG9ydF90ICpwb3J0cCwgaW50IHJlZ25yLCBpbnQgdmFsdWUpOwotc3RhdGljIGludAlzdGxfc2MyNjE5OGdldGdsb2JyZWcoc3RscG9ydF90ICpwb3J0cCwgaW50IHJlZ25yKTsKLXN0YXRpYyBpbnQJc3RsX3NjMjYxOThwYW5lbGluaXQoc3RsYnJkX3QgKmJyZHAsIHN0bHBhbmVsX3QgKnBhbmVscCk7Ci1zdGF0aWMgdm9pZAlzdGxfc2MyNjE5OHBvcnRpbml0KHN0bGJyZF90ICpicmRwLCBzdGxwYW5lbF90ICpwYW5lbHAsIHN0bHBvcnRfdCAqcG9ydHApOwotc3RhdGljIHZvaWQJc3RsX3NjMjYxOThzZXRwb3J0KHN0bHBvcnRfdCAqcG9ydHAsIHN0cnVjdCB0ZXJtaW9zICp0aW9zcCk7Ci1zdGF0aWMgaW50CXN0bF9zYzI2MTk4Z2V0c2lnbmFscyhzdGxwb3J0X3QgKnBvcnRwKTsKLXN0YXRpYyB2b2lkCXN0bF9zYzI2MTk4c2V0c2lnbmFscyhzdGxwb3J0X3QgKnBvcnRwLCBpbnQgZHRyLCBpbnQgcnRzKTsKLXN0YXRpYyB2b2lkCXN0bF9zYzI2MTk4ZW5hYmxlcnh0eChzdGxwb3J0X3QgKnBvcnRwLCBpbnQgcngsIGludCB0eCk7Ci1zdGF0aWMgdm9pZAlzdGxfc2MyNjE5OHN0YXJ0cnh0eChzdGxwb3J0X3QgKnBvcnRwLCBpbnQgcngsIGludCB0eCk7Ci1zdGF0aWMgdm9pZAlzdGxfc2MyNjE5OGRpc2FibGVpbnRycyhzdGxwb3J0X3QgKnBvcnRwKTsKLXN0YXRpYyB2b2lkCXN0bF9zYzI2MTk4c2VuZGJyZWFrKHN0bHBvcnRfdCAqcG9ydHAsIGludCBsZW4pOwotc3RhdGljIHZvaWQJc3RsX3NjMjYxOThmbG93Y3RybChzdGxwb3J0X3QgKnBvcnRwLCBpbnQgc3RhdGUpOwotc3RhdGljIHZvaWQJc3RsX3NjMjYxOThzZW5kZmxvdyhzdGxwb3J0X3QgKnBvcnRwLCBpbnQgc3RhdGUpOwotc3RhdGljIHZvaWQJc3RsX3NjMjYxOThmbHVzaChzdGxwb3J0X3QgKnBvcnRwKTsKLXN0YXRpYyBpbnQJc3RsX3NjMjYxOThkYXRhc3RhdGUoc3RscG9ydF90ICpwb3J0cCk7Ci1zdGF0aWMgdm9pZAlzdGxfc2MyNjE5OHdhaXQoc3RscG9ydF90ICpwb3J0cCk7Ci1zdGF0aWMgdm9pZAlzdGxfc2MyNjE5OHR4dW5mbG93KHN0bHBvcnRfdCAqcG9ydHAsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotc3RhdGljIHZvaWQJc3RsX3NjMjYxOThpbnRyKHN0bHBhbmVsX3QgKnBhbmVscCwgdW5zaWduZWQgaW50IGlvYmFzZSk7Ci1zdGF0aWMgdm9pZAlzdGxfc2MyNjE5OHR4aXNyKHN0bHBvcnRfdCAqcG9ydCk7Ci1zdGF0aWMgdm9pZAlzdGxfc2MyNjE5OHJ4aXNyKHN0bHBvcnRfdCAqcG9ydCwgdW5zaWduZWQgaW50IGlhY2spOwotc3RhdGljIHZvaWQJc3RsX3NjMjYxOThyeGJhZGNoKHN0bHBvcnRfdCAqcG9ydHAsIHVuc2lnbmVkIGNoYXIgc3RhdHVzLCBjaGFyIGNoKTsKLXN0YXRpYyB2b2lkCXN0bF9zYzI2MTk4cnhiYWRjaGFycyhzdGxwb3J0X3QgKnBvcnRwKTsKLXN0YXRpYyB2b2lkCXN0bF9zYzI2MTk4b3RoZXJpc3Ioc3RscG9ydF90ICpwb3J0LCB1bnNpZ25lZCBpbnQgaWFjayk7CitzdGF0aWMgdm9pZAlzdGxfc2MyNjE5OHNldHJlZyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCByZWduciwgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQJc3RsX3NjMjYxOThnZXRyZWcoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgcmVnbnIpOworc3RhdGljIGludAlzdGxfc2MyNjE5OHVwZGF0ZXJlZyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCByZWduciwgaW50IHZhbHVlKTsKK3N0YXRpYyBpbnQJc3RsX3NjMjYxOThnZXRnbG9icmVnKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHJlZ25yKTsKK3N0YXRpYyBpbnQJc3RsX3NjMjYxOThwYW5lbGluaXQoc3RydWN0IHN0bGJyZCAqYnJkcCwgc3RydWN0IHN0bHBhbmVsICpwYW5lbHApOworc3RhdGljIHZvaWQJc3RsX3NjMjYxOThwb3J0aW5pdChzdHJ1Y3Qgc3RsYnJkICpicmRwLCBzdHJ1Y3Qgc3RscGFuZWwgKnBhbmVscCwgc3RydWN0IHN0bHBvcnQgKnBvcnRwKTsKK3N0YXRpYyB2b2lkCXN0bF9zYzI2MTk4c2V0cG9ydChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIHN0cnVjdCBrdGVybWlvcyAqdGlvc3ApOworc3RhdGljIGludAlzdGxfc2MyNjE5OGdldHNpZ25hbHMoc3RydWN0IHN0bHBvcnQgKnBvcnRwKTsKK3N0YXRpYyB2b2lkCXN0bF9zYzI2MTk4c2V0c2lnbmFscyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBkdHIsIGludCBydHMpOworc3RhdGljIHZvaWQJc3RsX3NjMjYxOThlbmFibGVyeHR4KHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHJ4LCBpbnQgdHgpOworc3RhdGljIHZvaWQJc3RsX3NjMjYxOThzdGFydHJ4dHgoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgcngsIGludCB0eCk7CitzdGF0aWMgdm9pZAlzdGxfc2MyNjE5OGRpc2FibGVpbnRycyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApOworc3RhdGljIHZvaWQJc3RsX3NjMjYxOThzZW5kYnJlYWsoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgbGVuKTsKK3N0YXRpYyB2b2lkCXN0bF9zYzI2MTk4Zmxvd2N0cmwoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgc3RhdGUpOworc3RhdGljIHZvaWQJc3RsX3NjMjYxOThzZW5kZmxvdyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBzdGF0ZSk7CitzdGF0aWMgdm9pZAlzdGxfc2MyNjE5OGZsdXNoKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCk7CitzdGF0aWMgaW50CXN0bF9zYzI2MTk4ZGF0YXN0YXRlKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCk7CitzdGF0aWMgdm9pZAlzdGxfc2MyNjE5OHdhaXQoc3RydWN0IHN0bHBvcnQgKnBvcnRwKTsKK3N0YXRpYyB2b2lkCXN0bF9zYzI2MTk4dHh1bmZsb3coc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkCXN0bF9zYzI2MTk4aW50cihzdHJ1Y3Qgc3RscGFuZWwgKnBhbmVscCwgdW5zaWduZWQgaW50IGlvYmFzZSk7CitzdGF0aWMgdm9pZAlzdGxfc2MyNjE5OHR4aXNyKHN0cnVjdCBzdGxwb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkCXN0bF9zYzI2MTk4cnhpc3Ioc3RydWN0IHN0bHBvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBpYWNrKTsKK3N0YXRpYyB2b2lkCXN0bF9zYzI2MTk4cnhiYWRjaChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIHVuc2lnbmVkIGNoYXIgc3RhdHVzLCBjaGFyIGNoKTsKK3N0YXRpYyB2b2lkCXN0bF9zYzI2MTk4cnhiYWRjaGFycyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApOworc3RhdGljIHZvaWQJc3RsX3NjMjYxOThvdGhlcmlzcihzdHJ1Y3Qgc3RscG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGlhY2spOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTU3NywyMCArNDczLDIwIEBACiAgKglHZW5lcmljIFVBUlQgc3VwcG9ydCBzdHJ1Y3R1cmUuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHVhcnQgewotCWludAkoKnBhbmVsaW5pdCkoc3RsYnJkX3QgKmJyZHAsIHN0bHBhbmVsX3QgKnBhbmVscCk7Ci0Jdm9pZAkoKnBvcnRpbml0KShzdGxicmRfdCAqYnJkcCwgc3RscGFuZWxfdCAqcGFuZWxwLCBzdGxwb3J0X3QgKnBvcnRwKTsKLQl2b2lkCSgqc2V0cG9ydCkoc3RscG9ydF90ICpwb3J0cCwgc3RydWN0IHRlcm1pb3MgKnRpb3NwKTsKLQlpbnQJKCpnZXRzaWduYWxzKShzdGxwb3J0X3QgKnBvcnRwKTsKLQl2b2lkCSgqc2V0c2lnbmFscykoc3RscG9ydF90ICpwb3J0cCwgaW50IGR0ciwgaW50IHJ0cyk7Ci0Jdm9pZAkoKmVuYWJsZXJ4dHgpKHN0bHBvcnRfdCAqcG9ydHAsIGludCByeCwgaW50IHR4KTsKLQl2b2lkCSgqc3RhcnRyeHR4KShzdGxwb3J0X3QgKnBvcnRwLCBpbnQgcngsIGludCB0eCk7Ci0Jdm9pZAkoKmRpc2FibGVpbnRycykoc3RscG9ydF90ICpwb3J0cCk7Ci0Jdm9pZAkoKnNlbmRicmVhaykoc3RscG9ydF90ICpwb3J0cCwgaW50IGxlbik7Ci0Jdm9pZAkoKmZsb3djdHJsKShzdGxwb3J0X3QgKnBvcnRwLCBpbnQgc3RhdGUpOwotCXZvaWQJKCpzZW5kZmxvdykoc3RscG9ydF90ICpwb3J0cCwgaW50IHN0YXRlKTsKLQl2b2lkCSgqZmx1c2gpKHN0bHBvcnRfdCAqcG9ydHApOwotCWludAkoKmRhdGFzdGF0ZSkoc3RscG9ydF90ICpwb3J0cCk7Ci0Jdm9pZAkoKmludHIpKHN0bHBhbmVsX3QgKnBhbmVscCwgdW5zaWduZWQgaW50IGlvYmFzZSk7CisJaW50CSgqcGFuZWxpbml0KShzdHJ1Y3Qgc3RsYnJkICpicmRwLCBzdHJ1Y3Qgc3RscGFuZWwgKnBhbmVscCk7CisJdm9pZAkoKnBvcnRpbml0KShzdHJ1Y3Qgc3RsYnJkICpicmRwLCBzdHJ1Y3Qgc3RscGFuZWwgKnBhbmVscCwgc3RydWN0IHN0bHBvcnQgKnBvcnRwKTsKKwl2b2lkCSgqc2V0cG9ydCkoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBzdHJ1Y3Qga3Rlcm1pb3MgKnRpb3NwKTsKKwlpbnQJKCpnZXRzaWduYWxzKShzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApOworCXZvaWQJKCpzZXRzaWduYWxzKShzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBkdHIsIGludCBydHMpOworCXZvaWQJKCplbmFibGVyeHR4KShzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCByeCwgaW50IHR4KTsKKwl2b2lkCSgqc3RhcnRyeHR4KShzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCByeCwgaW50IHR4KTsKKwl2b2lkCSgqZGlzYWJsZWludHJzKShzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApOworCXZvaWQJKCpzZW5kYnJlYWspKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IGxlbik7CisJdm9pZAkoKmZsb3djdHJsKShzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBzdGF0ZSk7CisJdm9pZAkoKnNlbmRmbG93KShzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBzdGF0ZSk7CisJdm9pZAkoKmZsdXNoKShzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApOworCWludAkoKmRhdGFzdGF0ZSkoc3RydWN0IHN0bHBvcnQgKnBvcnRwKTsKKwl2b2lkCSgqaW50cikoc3RydWN0IHN0bHBhbmVsICpwYW5lbHAsIHVuc2lnbmVkIGludCBpb2Jhc2UpOwogfSB1YXJ0X3Q7CiAKIC8qCkBAIC03MTIsMTg0ICs2MDgsMzUgQEAKIAkuaW9jdGwJCT0gc3RsX21lbWlvY3RsLAogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdGF0aWMgc3RydWN0IGNsYXNzICpzdGFsbGlvbl9jbGFzczsKIAogLyoKLSAqCUxvYWRhYmxlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBzdHVmZi4KLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBzdGFsbGlvbl9tb2R1bGVfaW5pdCh2b2lkKQotewotCXN0bF9pbml0KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgX19leGl0IHN0YWxsaW9uX21vZHVsZV9leGl0KHZvaWQpCi17Ci0Jc3RsYnJkX3QJKmJyZHA7Ci0Jc3RscGFuZWxfdAkqcGFuZWxwOwotCXN0bHBvcnRfdAkqcG9ydHA7Ci0JaW50CQlpLCBqLCBrOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoImNsZWFudXBfbW9kdWxlKClcbiIpOwotI2VuZGlmCi0KLQlwcmludGsoS0VSTl9JTkZPICJVbmxvYWRpbmcgJXM6IHZlcnNpb24gJXNcbiIsIHN0bF9kcnZ0aXRsZSwKLQkJc3RsX2RydnZlcnNpb24pOwotCi0vKgotICoJRnJlZSB1cCBhbGwgYWxsb2NhdGVkIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBwb3J0cy4gVGhpcyBpbmNsdWRlcwotICoJbWVtb3J5IGFuZCBpbnRlcnJ1cHRzLiBBcyBwYXJ0IG9mIHRoaXMgcHJvY2VzcyB3ZSB3aWxsIGFsc28gZG8KLSAqCWEgaGFuZ3VwIG9uIGV2ZXJ5IG9wZW4gcG9ydCAtIHRvIHRyeSB0byBmbHVzaCBvdXQgYW55IHByb2Nlc3NlcwotICoJaGFuZ2luZyBvbnRvIHBvcnRzLgotICovCi0JaSA9IHR0eV91bnJlZ2lzdGVyX2RyaXZlcihzdGxfc2VyaWFsKTsKLQlwdXRfdHR5X2RyaXZlcihzdGxfc2VyaWFsKTsKLQlpZiAoaSkgewotCQlwcmludGsoIlNUQUxMSU9OOiBmYWlsZWQgdG8gdW4tcmVnaXN0ZXIgdHR5IGRyaXZlciwgIgotCQkJImVycm5vPSVkXG4iLCAtaSk7Ci0JCXJldHVybjsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koc3RhbGxpb25fY2xhc3MsIE1LREVWKFNUTF9TSU9NRU1NQUpPUiwgaSkpOwotCWlmICgoaSA9IHVucmVnaXN0ZXJfY2hyZGV2KFNUTF9TSU9NRU1NQUpPUiwgInN0YWxpb21lbSIpKSkKLQkJcHJpbnRrKCJTVEFMTElPTjogZmFpbGVkIHRvIHVuLXJlZ2lzdGVyIHNlcmlhbCBtZW1vcnkgZGV2aWNlLCAiCi0JCQkiZXJybm89JWRcbiIsIC1pKTsKLQljbGFzc19kZXN0cm95KHN0YWxsaW9uX2NsYXNzKTsKLQotCWZvciAoaSA9IDA7IChpIDwgc3RsX25yYnJkcyk7IGkrKykgewotCQlpZiAoKGJyZHAgPSBzdGxfYnJkc1tpXSkgPT0gKHN0bGJyZF90ICopIE5VTEwpCi0JCQljb250aW51ZTsKLQotCQlmcmVlX2lycShicmRwLT5pcnEsIGJyZHApOwotCi0JCWZvciAoaiA9IDA7IChqIDwgU1RMX01BWFBBTkVMUyk7IGorKykgewotCQkJcGFuZWxwID0gYnJkcC0+cGFuZWxzW2pdOwotCQkJaWYgKHBhbmVscCA9PSAoc3RscGFuZWxfdCAqKSBOVUxMKQotCQkJCWNvbnRpbnVlOwotCQkJZm9yIChrID0gMDsgKGsgPCBTVExfUE9SVFNQRVJQQU5FTCk7IGsrKykgewotCQkJCXBvcnRwID0gcGFuZWxwLT5wb3J0c1trXTsKLQkJCQlpZiAocG9ydHAgPT0gKHN0bHBvcnRfdCAqKSBOVUxMKQotCQkJCQljb250aW51ZTsKLQkJCQlpZiAocG9ydHAtPnR0eSAhPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKLQkJCQkJc3RsX2hhbmd1cChwb3J0cC0+dHR5KTsKLQkJCQlrZnJlZShwb3J0cC0+dHguYnVmKTsKLQkJCQlrZnJlZShwb3J0cCk7Ci0JCQl9Ci0JCQlrZnJlZShwYW5lbHApOwotCQl9Ci0KLQkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9hZGRyMSwgYnJkcC0+aW9zaXplMSk7Ci0JCWlmIChicmRwLT5pb3NpemUyID4gMCkKLQkJCXJlbGVhc2VfcmVnaW9uKGJyZHAtPmlvYWRkcjIsIGJyZHAtPmlvc2l6ZTIpOwotCi0JCWtmcmVlKGJyZHApOwotCQlzdGxfYnJkc1tpXSA9IChzdGxicmRfdCAqKSBOVUxMOwotCX0KLX0KLQotbW9kdWxlX2luaXQoc3RhbGxpb25fbW9kdWxlX2luaXQpOwotbW9kdWxlX2V4aXQoc3RhbGxpb25fbW9kdWxlX2V4aXQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCiAgKglDaGVjayBmb3IgYW55IGFyZ3VtZW50cyBwYXNzZWQgaW4gb24gdGhlIG1vZHVsZSBsb2FkIGNvbW1hbmQgbGluZS4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxfYXJnYnJkcyh2b2lkKQotewotCXN0bGNvbmZfdAljb25mOwotCXN0bGJyZF90CSpicmRwOwotCWludAkJaTsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfYXJnYnJkcygpXG4iKTsKLSNlbmRpZgotCi0JZm9yIChpID0gc3RsX25yYnJkczsgKGkgPCBzdGxfbmFyZ3MpOyBpKyspIHsKLQkJbWVtc2V0KCZjb25mLCAwLCBzaXplb2YoY29uZikpOwotCQlpZiAoc3RsX3BhcnNlYnJkKCZjb25mLCBzdGxfYnJkc3BbaV0pID09IDApCi0JCQljb250aW51ZTsKLQkJaWYgKChicmRwID0gc3RsX2FsbG9jYnJkKCkpID09IChzdGxicmRfdCAqKSBOVUxMKQotCQkJY29udGludWU7Ci0JCXN0bF9ucmJyZHMgPSBpICsgMTsKLQkJYnJkcC0+YnJkbnIgPSBpOwotCQlicmRwLT5icmR0eXBlID0gY29uZi5icmR0eXBlOwotCQlicmRwLT5pb2FkZHIxID0gY29uZi5pb2FkZHIxOwotCQlicmRwLT5pb2FkZHIyID0gY29uZi5pb2FkZHIyOwotCQlicmRwLT5pcnEgPSBjb25mLmlycTsKLQkJYnJkcC0+aXJxdHlwZSA9IGNvbmYuaXJxdHlwZTsKLQkJc3RsX2JyZGluaXQoYnJkcCk7Ci0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKglDb252ZXJ0IGFuIGFzY2lpIHN0cmluZyBudW1iZXIgaW50byBhbiB1bnNpZ25lZCBsb25nLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHN0bF9hdG9sKGNoYXIgKnN0cikKLXsKLQl1bnNpZ25lZCBsb25nCXZhbDsKLQlpbnQJCWJhc2UsIGM7Ci0JY2hhcgkJKnNwOwotCi0JdmFsID0gMDsKLQlzcCA9IHN0cjsKLQlpZiAoKCpzcCA9PSAnMCcpICYmICgqKHNwKzEpID09ICd4JykpIHsKLQkJYmFzZSA9IDE2OwotCQlzcCArPSAyOwotCX0gZWxzZSBpZiAoKnNwID09ICcwJykgewotCQliYXNlID0gODsKLQkJc3ArKzsKLQl9IGVsc2UgewotCQliYXNlID0gMTA7Ci0JfQotCi0JZm9yICg7ICgqc3AgIT0gMCk7IHNwKyspIHsKLQkJYyA9ICgqc3AgPiAnOScpID8gKFRPTE9XRVIoKnNwKSAtICdhJyArIDEwKSA6ICgqc3AgLSAnMCcpOwotCQlpZiAoKGMgPCAwKSB8fCAoYyA+PSBiYXNlKSkgewotCQkJcHJpbnRrKCJTVEFMTElPTjogaW52YWxpZCBhcmd1bWVudCAlc1xuIiwgc3RyKTsKLQkJCXZhbCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQl2YWwgPSAodmFsICogYmFzZSkgKyBjOwotCX0KLQlyZXR1cm4gdmFsOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCiAgKglQYXJzZSB0aGUgc3VwcGxpZWQgYXJndW1lbnQgc3RyaW5nLCBpbnRvIHRoZSBib2FyZCBjb25mIHN0cnVjdC4KICAqLwogCi1zdGF0aWMgaW50IHN0bF9wYXJzZWJyZChzdGxjb25mX3QgKmNvbmZwLCBjaGFyICoqYXJncCkKK3N0YXRpYyBpbnQgX19pbml0IHN0bF9wYXJzZWJyZChzdHJ1Y3Qgc3RsY29uZiAqY29uZnAsIGNoYXIgKiphcmdwKQogewogCWNoYXIJKnNwOwotCWludAlpOworCXVuc2lnbmVkIGludCBpOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9wYXJzZWJyZChjb25mcD0leCxhcmdwPSV4KVxuIiwgKGludCkgY29uZnAsIChpbnQpIGFyZ3ApOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9wYXJzZWJyZChjb25mcD0lcCxhcmdwPSVwKVxuIiwgY29uZnAsIGFyZ3ApOwogCi0JaWYgKChhcmdwWzBdID09IChjaGFyICopIE5VTEwpIHx8ICgqYXJncFswXSA9PSAwKSkKKwlpZiAoKGFyZ3BbMF0gPT0gTlVMTCkgfHwgKCphcmdwWzBdID09IDApKQogCQlyZXR1cm4gMDsKIAotCWZvciAoc3AgPSBhcmdwWzBdLCBpID0gMDsgKCgqc3AgIT0gMCkgJiYgKGkgPCAyNSkpOyBzcCsrLCBpKyspCi0JCSpzcCA9IFRPTE9XRVIoKnNwKTsKKwlmb3IgKHNwID0gYXJncFswXSwgaSA9IDA7ICgqc3AgIT0gMCkgJiYgKGkgPCAyNSk7IHNwKyssIGkrKykKKwkJKnNwID0gdG9sb3dlcigqc3ApOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RsX2JyZHN0cik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0bF9icmRzdHIpOyBpKyspCiAJCWlmIChzdHJjbXAoc3RsX2JyZHN0cltpXS5uYW1lLCBhcmdwWzBdKSA9PSAwKQogCQkJYnJlYWs7Ci0JfQorCiAJaWYgKGkgPT0gQVJSQVlfU0laRShzdGxfYnJkc3RyKSkgewogCQlwcmludGsoIlNUQUxMSU9OOiB1bmtub3duIGJvYXJkIG5hbWUsICVzP1xuIiwgYXJncFswXSk7CiAJCXJldHVybiAwOwpAQCAtODk4LDE2ICs2NDUsMTYgQEAKIAljb25mcC0+YnJkdHlwZSA9IHN0bF9icmRzdHJbaV0udHlwZTsKIAogCWkgPSAxOwotCWlmICgoYXJncFtpXSAhPSAoY2hhciAqKSBOVUxMKSAmJiAoKmFyZ3BbaV0gIT0gMCkpCi0JCWNvbmZwLT5pb2FkZHIxID0gc3RsX2F0b2woYXJncFtpXSk7CisJaWYgKChhcmdwW2ldICE9IE5VTEwpICYmICgqYXJncFtpXSAhPSAwKSkKKwkJY29uZnAtPmlvYWRkcjEgPSBzaW1wbGVfc3RydG91bChhcmdwW2ldLCBOVUxMLCAwKTsKIAlpKys7CiAJaWYgKGNvbmZwLT5icmR0eXBlID09IEJSRF9FQ0gpIHsKLQkJaWYgKChhcmdwW2ldICE9IChjaGFyICopIE5VTEwpICYmICgqYXJncFtpXSAhPSAwKSkKLQkJCWNvbmZwLT5pb2FkZHIyID0gc3RsX2F0b2woYXJncFtpXSk7CisJCWlmICgoYXJncFtpXSAhPSBOVUxMKSAmJiAoKmFyZ3BbaV0gIT0gMCkpCisJCQljb25mcC0+aW9hZGRyMiA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3BbaV0sIE5VTEwsIDApOwogCQlpKys7CiAJfQotCWlmICgoYXJncFtpXSAhPSAoY2hhciAqKSBOVUxMKSAmJiAoKmFyZ3BbaV0gIT0gMCkpCi0JCWNvbmZwLT5pcnEgPSBzdGxfYXRvbChhcmdwW2ldKTsKKwlpZiAoKGFyZ3BbaV0gIT0gTlVMTCkgJiYgKCphcmdwW2ldICE9IDApKQorCQljb25mcC0+aXJxID0gc2ltcGxlX3N0cnRvdWwoYXJncFtpXSwgTlVMTCwgMCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTkxNywxNCArNjY0LDE0IEBACiAgKglBbGxvY2F0ZSBhIG5ldyBib2FyZCBzdHJ1Y3R1cmUuIEZpbGwgb3V0IHRoZSBiYXNpYyBpbmZvIGluIGl0LgogICovCiAKLXN0YXRpYyBzdGxicmRfdCAqc3RsX2FsbG9jYnJkKHZvaWQpCitzdGF0aWMgc3RydWN0IHN0bGJyZCAqc3RsX2FsbG9jYnJkKHZvaWQpCiB7Ci0Jc3RsYnJkX3QJKmJyZHA7CisJc3RydWN0IHN0bGJyZAkqYnJkcDsKIAotCWJyZHAgPSBremFsbG9jKHNpemVvZihzdGxicmRfdCksIEdGUF9LRVJORUwpOworCWJyZHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RsYnJkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFicmRwKSB7CiAJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgKHNpemU9JVpkKVxuIiwKLQkJCXNpemVvZihzdGxicmRfdCkpOworCQkJc2l6ZW9mKHN0cnVjdCBzdGxicmQpKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC05MzYsMjYgKzY4MywyMyBAQAogCiBzdGF0aWMgaW50IHN0bF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewotCXN0bHBvcnRfdAkqcG9ydHA7Ci0Jc3RsYnJkX3QJKmJyZHA7Ci0JdW5zaWduZWQgaW50CW1pbm9yZGV2OwotCWludAkJYnJkbnIsIHBhbmVsbnIsIHBvcnRuciwgcmM7CisJc3RydWN0IHN0bHBvcnQJKnBvcnRwOworCXN0cnVjdCBzdGxicmQJKmJyZHA7CisJdW5zaWduZWQgaW50CW1pbm9yZGV2LCBicmRuciwgcGFuZWxucjsKKwlpbnQJCXBvcnRuciwgcmM7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX29wZW4odHR5PSV4LGZpbHA9JXgpOiBkZXZpY2U9JXNcbiIsIChpbnQpIHR0eSwKLQkJKGludCkgZmlscCwgdHR5LT5uYW1lKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfb3Blbih0dHk9JXAsZmlscD0lcCk6IGRldmljZT0lc1xuIiwgdHR5LCBmaWxwLCB0dHktPm5hbWUpOwogCiAJbWlub3JkZXYgPSB0dHktPmluZGV4OwogCWJyZG5yID0gTUlOT1IyQlJEKG1pbm9yZGV2KTsKIAlpZiAoYnJkbnIgPj0gc3RsX25yYnJkcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAJYnJkcCA9IHN0bF9icmRzW2JyZG5yXTsKLQlpZiAoYnJkcCA9PSAoc3RsYnJkX3QgKikgTlVMTCkKKwlpZiAoYnJkcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAltaW5vcmRldiA9IE1JTk9SMlBPUlQobWlub3JkZXYpOwotCWZvciAocG9ydG5yID0gLTEsIHBhbmVsbnIgPSAwOyAocGFuZWxuciA8IFNUTF9NQVhQQU5FTFMpOyBwYW5lbG5yKyspIHsKLQkJaWYgKGJyZHAtPnBhbmVsc1twYW5lbG5yXSA9PSAoc3RscGFuZWxfdCAqKSBOVUxMKQorCWZvciAocG9ydG5yID0gLTEsIHBhbmVsbnIgPSAwOyBwYW5lbG5yIDwgU1RMX01BWFBBTkVMUzsgcGFuZWxucisrKSB7CisJCWlmIChicmRwLT5wYW5lbHNbcGFuZWxucl0gPT0gTlVMTCkKIAkJCWJyZWFrOwogCQlpZiAobWlub3JkZXYgPCBicmRwLT5wYW5lbHNbcGFuZWxucl0tPm5ycG9ydHMpIHsKIAkJCXBvcnRuciA9IG1pbm9yZGV2OwpAQCAtOTY3LDcgKzcxMSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJcG9ydHAgPSBicmRwLT5wYW5lbHNbcGFuZWxucl0tPnBvcnRzW3BvcnRucl07Ci0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIC8qCkBAIC0xMDEzLDEwICs3NTcsMTAgQEAKICAqCXByZXZpb3VzIG9wZW5zIHN0aWxsIGluIGVmZmVjdC4gSWYgd2UgYXJlIGEgbm9ybWFsIHNlcmlhbCBkZXZpY2UKICAqCXRoZW4gYWxzbyB3ZSBtaWdodCBoYXZlIHRvIHdhaXQgZm9yIGNhcnJpZXIuCiAgKi8KLQlpZiAoIShmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKKwlpZiAoIShmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCiAJCWlmICgocmMgPSBzdGxfd2FpdGNhcnJpZXIocG9ydHAsIGZpbHApKSAhPSAwKQogCQkJcmV0dXJuIHJjOwotCX0KKwogCXBvcnRwLT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwogCiAJcmV0dXJuIDA7CkBAIC0xMDI5LDE0ICs3NzMsMTIgQEAKICAqCW1heWJlIGJlY2F1c2UgaWYgd2UgYXJlIGNsb2NhbCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gd2FpdC4uLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX3dhaXRjYXJyaWVyKHN0bHBvcnRfdCAqcG9ydHAsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBzdGxfd2FpdGNhcnJpZXIoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCWludAkJcmMsIGRvY2xvY2FsOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF93YWl0Y2Fycmllcihwb3J0cD0leCxmaWxwPSV4KVxuIiwgKGludCkgcG9ydHAsIChpbnQpIGZpbHApOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF93YWl0Y2Fycmllcihwb3J0cD0lcCxmaWxwPSVwKVxuIiwgcG9ydHAsIGZpbHApOwogCiAJcmMgPSAwOwogCWRvY2xvY2FsID0gMDsKQEAgLTEwNjIsOSArODA0LDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmICgoKHBvcnRwLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpID09IDApICYmCi0JCSAgICAoZG9jbG9jYWwgfHwgKHBvcnRwLT5zaWdzICYgVElPQ01fQ0QpKSkgeworCQkgICAgKGRvY2xvY2FsIHx8IChwb3J0cC0+c2lncyAmIFRJT0NNX0NEKSkpCiAJCQlicmVhazsKLQkJfQogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCXJjID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CkBAIC0xMDgzLDE3ICs4MjQsNjEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBzdGxfZmx1c2hidWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CisKKwlwcl9kZWJ1Zygic3RsX2ZsdXNoYnVmZmVyKHR0eT0lcClcbiIsIHR0eSk7CisKKwlpZiAodHR5ID09IE5VTEwpCisJCXJldHVybjsKKwlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKHBvcnRwID09IE5VTEwpCisJCXJldHVybjsKKworCXN0bF9mbHVzaChwb3J0cCk7CisJdHR5X3dha2V1cCh0dHkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHN0bF93YWl0dW50aWxzZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBzdGxwb3J0CSpwb3J0cDsKKwl1bnNpZ25lZCBsb25nCXRlbmQ7CisKKwlwcl9kZWJ1Zygic3RsX3dhaXR1bnRpbHNlbnQodHR5PSVwLHRpbWVvdXQ9JWQpXG4iLCB0dHksIHRpbWVvdXQpOworCisJaWYgKHR0eSA9PSBOVUxMKQorCQlyZXR1cm47CisJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOworCWlmIChwb3J0cCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAodGltZW91dCA9PSAwKQorCQl0aW1lb3V0ID0gSFo7CisJdGVuZCA9IGppZmZpZXMgKyB0aW1lb3V0OworCisJd2hpbGUgKHN0bF9kYXRhc3RhdGUocG9ydHApKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWJyZWFrOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgyMCk7CisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRlbmQpKQorCQkJYnJlYWs7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyB2b2lkIHN0bF9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdGxwb3J0X3QJKnBvcnRwOworCXN0cnVjdCBzdGxwb3J0CSpwb3J0cDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9jbG9zZSh0dHk9JXgsZmlscD0leClcbiIsIChpbnQpIHR0eSwgKGludCkgZmlscCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2Nsb3NlKHR0eT0lcCxmaWxwPSVwKVxuIiwgdHR5LCBmaWxwKTsKIAogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAocG9ydHAgPT0gKHN0bHBvcnRfdCAqKSBOVUxMKQorCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhbGxpb25fbG9jaywgZmxhZ3MpOwpAQCAtMTEzNiwxNyArOTIxLDE3IEBACiAJc3RsX2VuYWJsZXJ4dHgocG9ydHAsIDAsIDApOwogCXN0bF9mbHVzaGJ1ZmZlcih0dHkpOwogCXBvcnRwLT5pc3RhdGUgPSAwOwotCWlmIChwb3J0cC0+dHguYnVmICE9IChjaGFyICopIE5VTEwpIHsKKwlpZiAocG9ydHAtPnR4LmJ1ZiAhPSBOVUxMKSB7CiAJCWtmcmVlKHBvcnRwLT50eC5idWYpOwotCQlwb3J0cC0+dHguYnVmID0gKGNoYXIgKikgTlVMTDsKLQkJcG9ydHAtPnR4LmhlYWQgPSAoY2hhciAqKSBOVUxMOwotCQlwb3J0cC0+dHgudGFpbCA9IChjaGFyICopIE5VTEw7CisJCXBvcnRwLT50eC5idWYgPSBOVUxMOworCQlwb3J0cC0+dHguaGVhZCA9IE5VTEw7CisJCXBvcnRwLT50eC50YWlsID0gTlVMTDsKIAl9CiAJc2V0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0JcG9ydHAtPnR0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMOworCXBvcnRwLT50dHkgPSBOVUxMOwogCiAJaWYgKHBvcnRwLT5vcGVud2FpdGNudCkgewogCQlpZiAocG9ydHAtPmNsb3NlX2RlbGF5KQpAQCAtMTE2NywyMCArOTUyLDE3IEBACiAKIHN0YXRpYyBpbnQgc3RsX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewotCXN0bHBvcnRfdAkqcG9ydHA7CisJc3RydWN0IHN0bHBvcnQJKnBvcnRwOwogCXVuc2lnbmVkIGludAlsZW4sIHN0bGVuOwogCXVuc2lnbmVkIGNoYXIJKmNoYnVmOwogCWNoYXIJCSpoZWFkLCAqdGFpbDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfd3JpdGUodHR5PSV4LGJ1Zj0leCxjb3VudD0lZClcbiIsCi0JCShpbnQpIHR0eSwgKGludCkgYnVmLCBjb3VudCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX3dyaXRlKHR0eT0lcCxidWY9JXAsY291bnQ9JWQpXG4iLCB0dHksIGJ1ZiwgY291bnQpOwogCiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybiAwOwotCWlmIChwb3J0cC0+dHguYnVmID09IChjaGFyICopIE5VTEwpCisJaWYgKHBvcnRwLT50eC5idWYgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIC8qCkBAIC0xMjAxLDEwICs5ODMsMTAgQEAKIAkJc3RsZW4gPSBsZW47CiAJfQogCi0JbGVuID0gTUlOKGxlbiwgY291bnQpOworCWxlbiA9IG1pbihsZW4sICh1bnNpZ25lZCBpbnQpY291bnQpOwogCWNvdW50ID0gMDsKIAl3aGlsZSAobGVuID4gMCkgewotCQlzdGxlbiA9IE1JTihsZW4sIHN0bGVuKTsKKwkJc3RsZW4gPSBtaW4obGVuLCBzdGxlbik7CiAJCW1lbWNweShoZWFkLCBjaGJ1Ziwgc3RsZW4pOwogCQlsZW4gLT0gc3RsZW47CiAJCWNoYnVmICs9IHN0bGVuOwpAQCAtMTIyNywyMCArMTAwOSwxOCBAQAogCiBzdGF0aWMgdm9pZCBzdGxfcHV0Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQogewotCXN0bHBvcnRfdAkqcG9ydHA7CisJc3RydWN0IHN0bHBvcnQJKnBvcnRwOwogCXVuc2lnbmVkIGludAlsZW47CiAJY2hhcgkJKmhlYWQsICp0YWlsOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9wdXRjaGFyKHR0eT0leCxjaD0leClcbiIsIChpbnQpIHR0eSwgKGludCkgY2gpOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9wdXRjaGFyKHR0eT0lcCxjaD0leClcbiIsIHR0eSwgY2gpOwogCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwotCWlmIChwb3J0cC0+dHguYnVmID09IChjaGFyICopIE5VTEwpCisJaWYgKHBvcnRwLT50eC5idWYgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJaGVhZCA9IHBvcnRwLT50eC5oZWFkOwpAQCAtMTI2NywxOCArMTA0NywxNiBAQAogCiBzdGF0aWMgdm9pZCBzdGxfZmx1c2hjaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0bHBvcnRfdAkqcG9ydHA7CisJc3RydWN0IHN0bHBvcnQJKnBvcnRwOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9mbHVzaGNoYXJzKHR0eT0leClcbiIsIChpbnQpIHR0eSk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2ZsdXNoY2hhcnModHR5PSVwKVxuIiwgdHR5KTsKIAotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCisJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQlpZiAocG9ydHAtPnR4LmJ1ZiA9PSAoY2hhciAqKSBOVUxMKQorCWlmIChwb3J0cC0+dHguYnVmID09IE5VTEwpCiAJCXJldHVybjsKIAogCXN0bF9zdGFydHJ4dHgocG9ydHAsIC0xLCAxKTsKQEAgLTEyODgsMjQgKzEwNjYsMjIgQEAKIAogc3RhdGljIGludCBzdGxfd3JpdGVyb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RscG9ydF90CSpwb3J0cDsKKwlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAJY2hhcgkJKmhlYWQsICp0YWlsOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF93cml0ZXJvb20odHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfd3JpdGVyb29tKHR0eT0lcClcbiIsIHR0eSk7CiAKLQlpZiAodHR5ID09IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMKQorCWlmICh0dHkgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybiAwOwotCWlmIChwb3J0cC0+dHguYnVmID09IChjaGFyICopIE5VTEwpCisJaWYgKHBvcnRwLT50eC5idWYgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAloZWFkID0gcG9ydHAtPnR4LmhlYWQ7CiAJdGFpbCA9IHBvcnRwLT50eC50YWlsOwotCXJldHVybiAoKGhlYWQgPj0gdGFpbCkgPyAoU1RMX1RYQlVGU0laRSAtIChoZWFkIC0gdGFpbCkgLSAxKSA6ICh0YWlsIC0gaGVhZCAtIDEpKTsKKwlyZXR1cm4gKGhlYWQgPj0gdGFpbCkgPyAoU1RMX1RYQlVGU0laRSAtIChoZWFkIC0gdGFpbCkgLSAxKSA6ICh0YWlsIC0gaGVhZCAtIDEpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMzIxLDIwICsxMDk3LDE4IEBACiAKIHN0YXRpYyBpbnQgc3RsX2NoYXJzaW5idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdGxwb3J0X3QJKnBvcnRwOworCXN0cnVjdCBzdGxwb3J0CSpwb3J0cDsKIAl1bnNpZ25lZCBpbnQJc2l6ZTsKIAljaGFyCQkqaGVhZCwgKnRhaWw7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2NoYXJzaW5idWZmZXIodHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfY2hhcnNpbmJ1ZmZlcih0dHk9JXApXG4iLCB0dHkpOwogCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybiAwOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAocG9ydHAgPT0gKHN0bHBvcnRfdCAqKSBOVUxMKQorCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKLQlpZiAocG9ydHAtPnR4LmJ1ZiA9PSAoY2hhciAqKSBOVUxMKQorCWlmIChwb3J0cC0+dHguYnVmID09IE5VTEwpCiAJCXJldHVybiAwOwogCiAJaGVhZCA9IHBvcnRwLT50eC5oZWFkOwpAQCAtMTM1MSwxNCArMTEyNSwxMiBAQAogICoJR2VuZXJhdGUgdGhlIHNlcmlhbCBzdHJ1Y3QgaW5mby4KICAqLwogCi1zdGF0aWMgaW50IHN0bF9nZXRzZXJpYWwoc3RscG9ydF90ICpwb3J0cCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCkKK3N0YXRpYyBpbnQgc3RsX2dldHNlcmlhbChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApCiB7CiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3QJc2lvOwotCXN0bGJyZF90CQkqYnJkcDsKKwlzdHJ1Y3Qgc3RsYnJkCQkqYnJkcDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfZ2V0c2VyaWFsKHBvcnRwPSV4LHNwPSV4KVxuIiwgKGludCkgcG9ydHAsIChpbnQpIHNwKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfZ2V0c2VyaWFsKHBvcnRwPSVwLHNwPSVwKVxuIiwgcG9ydHAsIHNwKTsKIAogCW1lbXNldCgmc2lvLCAwLCBzaXplb2Yoc3RydWN0IHNlcmlhbF9zdHJ1Y3QpKTsKIAlzaW8ubGluZSA9IHBvcnRwLT5wb3J0bnI7CkBAIC0xMzc4LDcgKzExNTAsNyBAQAogCX0KIAogCWJyZHAgPSBzdGxfYnJkc1twb3J0cC0+YnJkbnJdOwotCWlmIChicmRwICE9IChzdGxicmRfdCAqKSBOVUxMKQorCWlmIChicmRwICE9IE5VTEwpCiAJCXNpby5pcnEgPSBicmRwLT5pcnE7CiAKIAlyZXR1cm4gY29weV90b191c2VyKHNwLCAmc2lvLCBzaXplb2Yoc3RydWN0IHNlcmlhbF9zdHJ1Y3QpKSA/IC1FRkFVTFQgOiAwOwpAQCAtMTM5MiwxMyArMTE2NCwxMSBAQAogICoJanVzdCBxdWlldGx5IGlnbm9yZSBhbnkgcmVxdWVzdHMgdG8gY2hhbmdlIGlycSwgZXRjLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX3NldHNlcmlhbChzdGxwb3J0X3QgKnBvcnRwLCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnNwKQorc3RhdGljIGludCBzdGxfc2V0c2VyaWFsKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCkKIHsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdAlzaW87CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3NldHNlcmlhbChwb3J0cD0leCxzcD0leClcbiIsIChpbnQpIHBvcnRwLCAoaW50KSBzcCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX3NldHNlcmlhbChwb3J0cD0lcCxzcD0lcClcbiIsIHBvcnRwLCBzcCk7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnNpbywgc3AsIHNpemVvZihzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTE0MjQsMTIgKzExOTQsMTIgQEAKIAogc3RhdGljIGludCBzdGxfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RscG9ydF90CSpwb3J0cDsKKwlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAKLQlpZiAodHR5ID09IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMKQorCWlmICh0dHkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCWlmICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkKIAkJcmV0dXJuIC1FSU87CkBAIC0xNDQwLDEzICsxMjEwLDEzIEBACiBzdGF0aWMgaW50IHN0bF90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKLQlzdGxwb3J0X3QJKnBvcnRwOworCXN0cnVjdCBzdGxwb3J0CSpwb3J0cDsKIAlpbnQgcnRzID0gLTEsIGR0ciA9IC0xOwogCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAocG9ydHAgPT0gKHN0bHBvcnRfdCAqKSBOVUxMKQorCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAodHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpCiAJCXJldHVybiAtRUlPOwpAQCAtMTQ2NiwyNyArMTIzNiwyNCBAQAogCiBzdGF0aWMgaW50IHN0bF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RscG9ydF90CSpwb3J0cDsKKwlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAJdW5zaWduZWQgaW50CWl2YWw7CiAJaW50CQlyYzsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfaW9jdGwodHR5PSV4LGZpbGU9JXgsY21kPSV4LGFyZz0leClcbiIsCi0JCShpbnQpIHR0eSwgKGludCkgZmlsZSwgY21kLCAoaW50KSBhcmcpOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9pb2N0bCh0dHk9JXAsZmlsZT0lcCxjbWQ9JXgsYXJnPSVseClcbiIsIHR0eSwgZmlsZSwgY21kLAorCQkJYXJnKTsKIAotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCisJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoKGNtZCAhPSBUSU9DR1NFUklBTCkgJiYgKGNtZCAhPSBUSU9DU1NFUklBTCkgJiYKLSAJICAgIChjbWQgIT0gQ09NX0dFVFBPUlRTVEFUUykgJiYgKGNtZCAhPSBDT01fQ0xSUE9SVFNUQVRTKSkgeworIAkgICAgKGNtZCAhPSBDT01fR0VUUE9SVFNUQVRTKSAmJiAoY21kICE9IENPTV9DTFJQT1JUU1RBVFMpKQogCQlpZiAodHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpCiAJCQlyZXR1cm4gLUVJTzsKLQl9CiAKIAlyYyA9IDA7CiAKQEAgLTE1MzEsMTkgKzEyOTgsMzcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdGxfc2V0dGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkKQorLyoKKyAqCVN0YXJ0IHRoZSB0cmFuc21pdHRlciBhZ2Fpbi4gSnVzdCB0dXJuIFRYIGludGVycnVwdHMgYmFjayBvbi4KKyAqLworCitzdGF0aWMgdm9pZCBzdGxfc3RhcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdGxwb3J0X3QJKnBvcnRwOwotCXN0cnVjdCB0ZXJtaW9zCSp0aW9zcDsKKwlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3NldHRlcm1pb3ModHR5PSV4LG9sZD0leClcbiIsIChpbnQpIHR0eSwgKGludCkgb2xkKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfc3RhcnQodHR5PSVwKVxuIiwgdHR5KTsKIAotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCisJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCisJCXJldHVybjsKKwlzdGxfc3RhcnRyeHR4KHBvcnRwLCAtMSwgMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc3RsX3NldHRlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICpvbGQpCit7CisJc3RydWN0IHN0bHBvcnQJKnBvcnRwOworCXN0cnVjdCBrdGVybWlvcwkqdGlvc3A7CisKKwlwcl9kZWJ1Zygic3RsX3NldHRlcm1pb3ModHR5PSVwLG9sZD0lcClcbiIsIHR0eSwgb2xkKTsKKworCWlmICh0dHkgPT0gTlVMTCkKKwkJcmV0dXJuOworCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJdGlvc3AgPSB0dHktPnRlcm1pb3M7CkBAIC0xNTcxLDE2ICsxMzU2LDE0IEBACiAKIHN0YXRpYyB2b2lkIHN0bF90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0bHBvcnRfdAkqcG9ydHA7CisJc3RydWN0IHN0bHBvcnQJKnBvcnRwOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF90aHJvdHRsZSh0dHk9JXgpXG4iLCAoaW50KSB0dHkpOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF90aHJvdHRsZSh0dHk9JXApXG4iLCB0dHkpOwogCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCXN0bF9mbG93Y3RybChwb3J0cCwgMCk7CiB9CkBAIC0xNTkzLDE2ICsxMzc2LDE0IEBACiAKIHN0YXRpYyB2b2lkIHN0bF91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RscG9ydF90CSpwb3J0cDsKKwlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3VudGhyb3R0bGUodHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfdW50aHJvdHRsZSh0dHk9JXApXG4iLCB0dHkpOwogCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCXN0bF9mbG93Y3RybChwb3J0cCwgMSk7CiB9CkBAIC0xNjE2LDE2ICsxMzk3LDE0IEBACiAKIHN0YXRpYyB2b2lkIHN0bF9zdG9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RscG9ydF90CSpwb3J0cDsKKwlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3N0b3AodHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfc3RvcCh0dHk9JXApXG4iLCB0dHkpOwogCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCXN0bF9zdGFydHJ4dHgocG9ydHAsIC0xLCAwKTsKIH0KQEAgLTE2MzMsMjggKzE0MTIsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICoJU3RhcnQgdGhlIHRyYW5zbWl0dGVyIGFnYWluLiBKdXN0IHR1cm4gVFggaW50ZXJydXB0cyBiYWNrIG9uLgotICovCi0KLXN0YXRpYyB2b2lkIHN0bF9zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXN0bHBvcnRfdAkqcG9ydHA7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3N0YXJ0KHR0eT0leClcbiIsIChpbnQpIHR0eSk7Ci0jZW5kaWYKLQotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCi0JCXJldHVybjsKLQlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKLQkJcmV0dXJuOwotCXN0bF9zdGFydHJ4dHgocG9ydHAsIC0xLCAxKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgogICoJSGFuZ3VwIHRoaXMgcG9ydC4gVGhpcyBpcyBwcmV0dHkgbXVjaCBsaWtlIGNsb3NpbmcgdGhlIHBvcnQsIG9ubHkKICAqCWEgbGl0dGxlIG1vcmUgYnJ1dGFsLiBObyB3YWl0aW5nIGZvciBkYXRhIHRvIGRyYWluLiBTaHV0ZG93biB0aGUKICAqCXBvcnQgYW5kIG1heWJlIGRyb3Agc2lnbmFscy4KQEAgLTE2NjIsMTYgKzE0MTksMTQgQEAKIAogc3RhdGljIHZvaWQgc3RsX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0bHBvcnRfdAkqcG9ydHA7CisJc3RydWN0IHN0bHBvcnQJKnBvcnRwOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9oYW5ndXAodHR5PSV4KVxuIiwgKGludCkgdHR5KTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfaGFuZ3VwKHR0eT0lcClcbiIsIHR0eSk7CiAKLQlpZiAodHR5ID09IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMKQorCWlmICh0dHkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAocG9ydHAgPT0gKHN0bHBvcnRfdCAqKSBOVUxMKQorCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlwb3J0cC0+ZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwpAQCAtMTY4MiwxMyArMTQzNywxMyBAQAogCXN0bF9mbHVzaGJ1ZmZlcih0dHkpOwogCXBvcnRwLT5pc3RhdGUgPSAwOwogCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncyk7Ci0JaWYgKHBvcnRwLT50eC5idWYgIT0gKGNoYXIgKikgTlVMTCkgeworCWlmIChwb3J0cC0+dHguYnVmICE9IE5VTEwpIHsKIAkJa2ZyZWUocG9ydHAtPnR4LmJ1Zik7Ci0JCXBvcnRwLT50eC5idWYgPSAoY2hhciAqKSBOVUxMOwotCQlwb3J0cC0+dHguaGVhZCA9IChjaGFyICopIE5VTEw7Ci0JCXBvcnRwLT50eC50YWlsID0gKGNoYXIgKikgTlVMTDsKKwkJcG9ydHAtPnR4LmJ1ZiA9IE5VTEw7CisJCXBvcnRwLT50eC5oZWFkID0gTlVMTDsKKwkJcG9ydHAtPnR4LnRhaWwgPSBOVUxMOwogCX0KLQlwb3J0cC0+dHR5ID0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEw7CisJcG9ydHAtPnR0eSA9IE5VTEw7CiAJcG9ydHAtPmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwogCXBvcnRwLT5yZWZjb3VudCA9IDA7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0cC0+b3Blbl93YWl0KTsKQEAgLTE2OTYsMzggKzE0NTEsMTYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdGxfZmx1c2hidWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzdGxwb3J0X3QJKnBvcnRwOwotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9mbHVzaGJ1ZmZlcih0dHk9JXgpXG4iLCAoaW50KSB0dHkpOwotI2VuZGlmCi0KLQlpZiAodHR5ID09IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSBOVUxMKQotCQlyZXR1cm47Ci0JcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCi0JCXJldHVybjsKLQotCXN0bF9mbHVzaChwb3J0cCk7Ci0JdHR5X3dha2V1cCh0dHkpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIHN0YXRpYyB2b2lkIHN0bF9icmVha2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc3RhdGUpCiB7Ci0Jc3RscG9ydF90CSpwb3J0cDsKKwlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2JyZWFrY3RsKHR0eT0leCxzdGF0ZT0lZClcbiIsIChpbnQpIHR0eSwgc3RhdGUpOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9icmVha2N0bCh0dHk9JXAsc3RhdGU9JWQpXG4iLCB0dHksIHN0YXRlKTsKIAotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCisJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAogCXN0bF9zZW5kYnJlYWsocG9ydHAsICgoc3RhdGUgPT0gLTEpID8gMSA6IDIpKTsKQEAgLTE3MzUsNDggKzE0NjgsMTYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdGxfd2FpdHVudGlsc2VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCkKLXsKLQlzdGxwb3J0X3QJKnBvcnRwOwotCXVuc2lnbmVkIGxvbmcJdGVuZDsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfd2FpdHVudGlsc2VudCh0dHk9JXgsdGltZW91dD0lZClcbiIsIChpbnQpIHR0eSwgdGltZW91dCk7Ci0jZW5kaWYKLQotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCi0JCXJldHVybjsKLQlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKHRpbWVvdXQgPT0gMCkKLQkJdGltZW91dCA9IEhaOwotCXRlbmQgPSBqaWZmaWVzICsgdGltZW91dDsKLQotCXdoaWxlIChzdGxfZGF0YXN0YXRlKHBvcnRwKSkgewotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlicmVhazsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMjApOwotCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0ZW5kKSkKLQkJCWJyZWFrOwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdGF0aWMgdm9pZCBzdGxfc2VuZHhjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpCiB7Ci0Jc3RscG9ydF90CSpwb3J0cDsKKwlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3NlbmR4Y2hhcih0dHk9JXgsY2g9JXgpXG4iLCAoaW50KSB0dHksIGNoKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfc2VuZHhjaGFyKHR0eT0lcCxjaD0leClcbiIsIHR0eSwgY2gpOwogCi0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJaWYgKGNoID09IFNUT1BfQ0hBUih0dHkpKQpAQCAtMTc5Nyw3ICsxNDk4LDcgQEAKICAqCXNob3J0IHRoZW4gcGFkZGVkIHdpdGggc3BhY2VzKS4KICAqLwogCi1zdGF0aWMgaW50IHN0bF9wb3J0aW5mbyhzdGxwb3J0X3QgKnBvcnRwLCBpbnQgcG9ydG5yLCBjaGFyICpwb3MpCitzdGF0aWMgaW50IHN0bF9wb3J0aW5mbyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBwb3J0bnIsIGNoYXIgKnBvcykKIHsKIAljaGFyCSpzcDsKIAlpbnQJc2lncywgY250OwpAQCAtMTgyNiw3ICsxNTI3LDcgQEAKIAkqc3AgPSAnICc7CiAJc3AgKz0gY250OwogCi0JZm9yIChjbnQgPSAoc3AgLSBwb3MpOyAoY250IDwgKE1BWExJTkUgLSAxKSk7IGNudCsrKQorCWZvciAoY250ID0gc3AgLSBwb3M7IGNudCA8IChNQVhMSU5FIC0gMSk7IGNudCsrKQogCQkqc3ArKyA9ICcgJzsKIAlpZiAoY250ID49IE1BWExJTkUpCiAJCXBvc1soTUFYTElORSAtIDIpXSA9ICcrJzsKQEAgLTE4NDMsMTggKzE1NDQsMTUgQEAKIAogc3RhdGljIGludCBzdGxfcmVhZHByb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RsYnJkX3QJKmJyZHA7Ci0Jc3RscGFuZWxfdAkqcGFuZWxwOwotCXN0bHBvcnRfdAkqcG9ydHA7Ci0JaW50CQlicmRuciwgcGFuZWxuciwgcG9ydG5yLCB0b3RhbHBvcnQ7Ci0JaW50CQljdXJvZmYsIG1heG9mZjsKKwlzdHJ1Y3Qgc3RsYnJkCSpicmRwOworCXN0cnVjdCBzdGxwYW5lbAkqcGFuZWxwOworCXN0cnVjdCBzdGxwb3J0CSpwb3J0cDsKKwl1bnNpZ25lZCBpbnQJYnJkbnIsIHBhbmVsbnIsIHBvcnRucjsKKwlpbnQJCXRvdGFscG9ydCwgY3Vyb2ZmLCBtYXhvZmY7CiAJY2hhcgkJKnBvczsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfcmVhZHByb2MocGFnZT0leCxzdGFydD0leCxvZmY9JXgsY291bnQ9JWQsZW9mPSV4LCIKLQkJImRhdGE9JXhcbiIsIChpbnQpIHBhZ2UsIChpbnQpIHN0YXJ0LCAoaW50KSBvZmYsIGNvdW50LAotCQkoaW50KSBlb2YsIChpbnQpIGRhdGEpOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9yZWFkcHJvYyhwYWdlPSVwLHN0YXJ0PSVwLG9mZj0lbHgsY291bnQ9JWQsZW9mPSVwLCIKKwkJImRhdGE9JXBcbiIsIHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGRhdGEpOwogCiAJcG9zID0gcGFnZTsKIAl0b3RhbHBvcnQgPSAwOwpAQCAtMTg3Myw5ICsxNTcxLDkgQEAKICAqCVdlIHNjYW4gdGhyb3VnaCBmb3IgZWFjaCBib2FyZCwgcGFuZWwgYW5kIHBvcnQuIFRoZSBvZmZzZXQgaXMKICAqCWNhbGN1bGF0ZWQgb24gdGhlIGZseSwgYW5kIGlycmVsZXZhbnQgcG9ydHMgYXJlIHNraXBwZWQuCiAgKi8KLQlmb3IgKGJyZG5yID0gMDsgKGJyZG5yIDwgc3RsX25yYnJkcyk7IGJyZG5yKyspIHsKKwlmb3IgKGJyZG5yID0gMDsgYnJkbnIgPCBzdGxfbnJicmRzOyBicmRucisrKSB7CiAJCWJyZHAgPSBzdGxfYnJkc1ticmRucl07Ci0JCWlmIChicmRwID09IChzdGxicmRfdCAqKSBOVUxMKQorCQlpZiAoYnJkcCA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCWlmIChicmRwLT5zdGF0ZSA9PSAwKQogCQkJY29udGludWU7CkBAIC0xODg3LDkgKzE1ODUsOSBAQAogCQl9CiAKIAkJdG90YWxwb3J0ID0gYnJkbnIgKiBTVExfTUFYUE9SVFM7Ci0JCWZvciAocGFuZWxuciA9IDA7IChwYW5lbG5yIDwgYnJkcC0+bnJwYW5lbHMpOyBwYW5lbG5yKyspIHsKKwkJZm9yIChwYW5lbG5yID0gMDsgcGFuZWxuciA8IGJyZHAtPm5ycGFuZWxzOyBwYW5lbG5yKyspIHsKIAkJCXBhbmVscCA9IGJyZHAtPnBhbmVsc1twYW5lbG5yXTsKLQkJCWlmIChwYW5lbHAgPT0gKHN0bHBhbmVsX3QgKikgTlVMTCkKKwkJCWlmIChwYW5lbHAgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIAogCQkJbWF4b2ZmID0gY3Vyb2ZmICsgKHBhbmVscC0+bnJwb3J0cyAqIE1BWExJTkUpOwpAQCAtMTg5OSwxMCArMTU5NywxMCBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlmb3IgKHBvcnRuciA9IDA7IChwb3J0bnIgPCBwYW5lbHAtPm5ycG9ydHMpOyBwb3J0bnIrKywKKwkJCWZvciAocG9ydG5yID0gMDsgcG9ydG5yIDwgcGFuZWxwLT5ucnBvcnRzOyBwb3J0bnIrKywKIAkJCSAgICB0b3RhbHBvcnQrKykgewogCQkJCXBvcnRwID0gcGFuZWxwLT5wb3J0c1twb3J0bnJdOwotCQkJCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJCQkJaWYgKHBvcnRwID09IE5VTEwpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChvZmYgPj0gKGN1cm9mZiArPSBNQVhMSU5FKSkKIAkJCQkJY29udGludWU7CkBAIC0xOTE3LDcgKzE2MTUsNyBAQAogCiBzdGxfcmVhZGRvbmU6CiAJKnN0YXJ0ID0gcGFnZTsKLQlyZXR1cm4gKHBvcyAtIHBhZ2UpOworCXJldHVybiBwb3MgLSBwYWdlOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTI5LDExICsxNjI3LDkgQEAKIAogc3RhdGljIGlycXJldHVybl90IHN0bF9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdGxicmRfdAkqYnJkcCA9IChzdGxicmRfdCAqKSBkZXZfaWQ7CisJc3RydWN0IHN0bGJyZCAqYnJkcCA9IGRldl9pZDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfaW50cihicmRwPSV4LGlycT0lZClcbiIsIChpbnQpIGJyZHAsIGlycSk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2ludHIoYnJkcD0lcCxpcnE9JWQpXG4iLCBicmRwLCBpcnEpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwoKCogYnJkcC0+aXNyKShicmRwKSk7CiB9CkBAIC0xOTQ0LDkgKzE2NDAsOSBAQAogICoJSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgRWFzeUlPIGJvYXJkIHR5cGVzLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX2Vpb2ludHIoc3RsYnJkX3QgKmJyZHApCitzdGF0aWMgaW50IHN0bF9laW9pbnRyKHN0cnVjdCBzdGxicmQgKmJyZHApCiB7Ci0Jc3RscGFuZWxfdAkqcGFuZWxwOworCXN0cnVjdCBzdGxwYW5lbAkqcGFuZWxwOwogCXVuc2lnbmVkIGludAlpb2Jhc2U7CiAJaW50CQloYW5kbGVkID0gMDsKIApAQCAtMTk2NywxOCArMTY2MywxNyBAQAogICoJSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgRUNILUFUIGJvYXJkIHR5cGVzLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX2VjaGF0aW50cihzdGxicmRfdCAqYnJkcCkKK3N0YXRpYyBpbnQgc3RsX2VjaGF0aW50cihzdHJ1Y3Qgc3RsYnJkICpicmRwKQogewotCXN0bHBhbmVsX3QJKnBhbmVscDsKLQl1bnNpZ25lZCBpbnQJaW9hZGRyOwotCWludAkJYm5rbnI7CisJc3RydWN0IHN0bHBhbmVsCSpwYW5lbHA7CisJdW5zaWduZWQgaW50CWlvYWRkciwgYm5rbnI7CiAJaW50CQloYW5kbGVkID0gMDsKIAogCW91dGIoKGJyZHAtPmlvY3RybHZhbCB8IEVDSF9CUkRFTkFCTEUpLCBicmRwLT5pb2N0cmwpOwogCiAJd2hpbGUgKGluYihicmRwLT5pb3N0YXR1cykgJiBFQ0hfSU5UUlBFTkQpIHsKIAkJaGFuZGxlZCA9IDE7Ci0JCWZvciAoYm5rbnIgPSAwOyAoYm5rbnIgPCBicmRwLT5ucmJua3MpOyBibmtucisrKSB7CisJCWZvciAoYm5rbnIgPSAwOyBibmtuciA8IGJyZHAtPm5yYm5rczsgYm5rbnIrKykgewogCQkJaW9hZGRyID0gYnJkcC0+Ym5rc3RhdGFkZHJbYm5rbnJdOwogCQkJaWYgKGluYihpb2FkZHIpICYgRUNIX1BOTElOVFJQRU5EKSB7CiAJCQkJcGFuZWxwID0gYnJkcC0+Ym5rMnBhbmVsW2Jua25yXTsKQEAgLTE5OTgsMTYgKzE2OTMsMTUgQEAKICAqCUludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIEVDSC1NQ0EgYm9hcmQgdHlwZXMuCiAgKi8KIAotc3RhdGljIGludCBzdGxfZWNobWNhaW50cihzdGxicmRfdCAqYnJkcCkKK3N0YXRpYyBpbnQgc3RsX2VjaG1jYWludHIoc3RydWN0IHN0bGJyZCAqYnJkcCkKIHsKLQlzdGxwYW5lbF90CSpwYW5lbHA7Ci0JdW5zaWduZWQgaW50CWlvYWRkcjsKLQlpbnQJCWJua25yOworCXN0cnVjdCBzdGxwYW5lbAkqcGFuZWxwOworCXVuc2lnbmVkIGludAlpb2FkZHIsIGJua25yOwogCWludAkJaGFuZGxlZCA9IDA7CiAKIAl3aGlsZSAoaW5iKGJyZHAtPmlvc3RhdHVzKSAmIEVDSF9JTlRSUEVORCkgewogCQloYW5kbGVkID0gMTsKLQkJZm9yIChibmtuciA9IDA7IChibmtuciA8IGJyZHAtPm5yYm5rcyk7IGJua25yKyspIHsKKwkJZm9yIChibmtuciA9IDA7IGJua25yIDwgYnJkcC0+bnJibmtzOyBibmtucisrKSB7CiAJCQlpb2FkZHIgPSBicmRwLT5ibmtzdGF0YWRkcltibmtucl07CiAJCQlpZiAoaW5iKGlvYWRkcikgJiBFQ0hfUE5MSU5UUlBFTkQpIHsKIAkJCQlwYW5lbHAgPSBicmRwLT5ibmsycGFuZWxbYm5rbnJdOwpAQCAtMjAyNCwxNiArMTcxOCwxNSBAQAogICoJSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgRUNILVBDSSBib2FyZCB0eXBlcy4KICAqLwogCi1zdGF0aWMgaW50IHN0bF9lY2hwY2lpbnRyKHN0bGJyZF90ICpicmRwKQorc3RhdGljIGludCBzdGxfZWNocGNpaW50cihzdHJ1Y3Qgc3RsYnJkICpicmRwKQogewotCXN0bHBhbmVsX3QJKnBhbmVscDsKLQl1bnNpZ25lZCBpbnQJaW9hZGRyOwotCWludAkJYm5rbnIsIHJlY2hlY2s7CisJc3RydWN0IHN0bHBhbmVsCSpwYW5lbHA7CisJdW5zaWduZWQgaW50CWlvYWRkciwgYm5rbnIsIHJlY2hlY2s7CiAJaW50CQloYW5kbGVkID0gMDsKIAogCXdoaWxlICgxKSB7CiAJCXJlY2hlY2sgPSAwOwotCQlmb3IgKGJua25yID0gMDsgKGJua25yIDwgYnJkcC0+bnJibmtzKTsgYm5rbnIrKykgeworCQlmb3IgKGJua25yID0gMDsgYm5rbnIgPCBicmRwLT5ucmJua3M7IGJua25yKyspIHsKIAkJCW91dGIoYnJkcC0+Ym5rcGFnZWFkZHJbYm5rbnJdLCBicmRwLT5pb2N0cmwpOwogCQkJaW9hZGRyID0gYnJkcC0+Ym5rc3RhdGFkZHJbYm5rbnJdOwogCQkJaWYgKGluYihpb2FkZHIpICYgRUNIX1BOTElOVFJQRU5EKSB7CkBAIC0yMDU1LDE2ICsxNzQ4LDE1IEBACiAgKglJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBFQ0gtOC82NC1QQ0kgYm9hcmQgdHlwZXMuCiAgKi8KIAotc3RhdGljIGludCBzdGxfZWNocGNpNjRpbnRyKHN0bGJyZF90ICpicmRwKQorc3RhdGljIGludCBzdGxfZWNocGNpNjRpbnRyKHN0cnVjdCBzdGxicmQgKmJyZHApCiB7Ci0Jc3RscGFuZWxfdAkqcGFuZWxwOwotCXVuc2lnbmVkIGludAlpb2FkZHI7Ci0JaW50CQlibmtucjsKKwlzdHJ1Y3Qgc3RscGFuZWwJKnBhbmVscDsKKwl1bnNpZ25lZCBpbnQJaW9hZGRyLCBibmtucjsKIAlpbnQJCWhhbmRsZWQgPSAwOwogCiAJd2hpbGUgKGluYihicmRwLT5pb2N0cmwpICYgMHgxKSB7CiAJCWhhbmRsZWQgPSAxOwotCQlmb3IgKGJua25yID0gMDsgKGJua25yIDwgYnJkcC0+bnJibmtzKTsgYm5rbnIrKykgeworCQlmb3IgKGJua25yID0gMDsgYm5rbnIgPCBicmRwLT5ucmJua3M7IGJua25yKyspIHsKIAkJCWlvYWRkciA9IGJyZHAtPmJua3N0YXRhZGRyW2Jua25yXTsKIAkJCWlmIChpbmIoaW9hZGRyKSAmIEVDSF9QTkxJTlRSUEVORCkgewogCQkJCXBhbmVscCA9IGJyZHAtPmJuazJwYW5lbFtibmtucl07CkBAIC0yMDgzLDM1ICsxNzc1LDMyIEBACiAgKi8KIHN0YXRpYyB2b2lkIHN0bF9vZmZpbnRyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdGxwb3J0X3QJCSpwb3J0cCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdGxwb3J0X3QsIHRxdWV1ZSk7CisJc3RydWN0IHN0bHBvcnQJCSpwb3J0cCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3RscG9ydCwgdHF1ZXVlKTsKIAlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwogCXVuc2lnbmVkIGludAkJb2xkc2lnczsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfb2ZmaW50cihwb3J0cD0leClcbiIsIChpbnQpIHBvcnRwKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfb2ZmaW50cihwb3J0cD0lcClcbiIsIHBvcnRwKTsKIAotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAogCXR0eSA9IHBvcnRwLT50dHk7Ci0JaWYgKHR0eSA9PSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkKKwlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIAogCWxvY2tfa2VybmVsKCk7Ci0JaWYgKHRlc3RfYml0KEFTWUlfVFhMT1csICZwb3J0cC0+aXN0YXRlKSkgeworCWlmICh0ZXN0X2JpdChBU1lJX1RYTE9XLCAmcG9ydHAtPmlzdGF0ZSkpCiAJCXR0eV93YWtldXAodHR5KTsKLQl9CisKIAlpZiAodGVzdF9iaXQoQVNZSV9EQ0RDSEFOR0UsICZwb3J0cC0+aXN0YXRlKSkgewogCQljbGVhcl9iaXQoQVNZSV9EQ0RDSEFOR0UsICZwb3J0cC0+aXN0YXRlKTsKIAkJb2xkc2lncyA9IHBvcnRwLT5zaWdzOwogCQlwb3J0cC0+c2lncyA9IHN0bF9nZXRzaWduYWxzKHBvcnRwKTsKIAkJaWYgKChwb3J0cC0+c2lncyAmIFRJT0NNX0NEKSAmJiAoKG9sZHNpZ3MgJiBUSU9DTV9DRCkgPT0gMCkpCiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnRwLT5vcGVuX3dhaXQpOwotCQlpZiAoKG9sZHNpZ3MgJiBUSU9DTV9DRCkgJiYgKChwb3J0cC0+c2lncyAmIFRJT0NNX0NEKSA9PSAwKSkgeworCQlpZiAoKG9sZHNpZ3MgJiBUSU9DTV9DRCkgJiYgKChwb3J0cC0+c2lncyAmIFRJT0NNX0NEKSA9PSAwKSkKIAkJCWlmIChwb3J0cC0+ZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkKIAkJCQl0dHlfaGFuZ3VwKHR0eSk7CS8qIEZJWE1FOiBtb2R1bGUgcmVtb3ZhbCByYWNlIGhlcmUgLSBBS1BNICovCi0JCX0KIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwogfQpAQCAtMjEyMiwxNCArMTgxMSwxMyBAQAogICoJSW5pdGlhbGl6ZSBhbGwgdGhlIHBvcnRzIG9uIGEgcGFuZWwuCiAgKi8KIAotc3RhdGljIGludCBfX2luaXQgc3RsX2luaXRwb3J0cyhzdGxicmRfdCAqYnJkcCwgc3RscGFuZWxfdCAqcGFuZWxwKQorc3RhdGljIGludCBfX2RldmluaXQgc3RsX2luaXRwb3J0cyhzdHJ1Y3Qgc3RsYnJkICpicmRwLCBzdHJ1Y3Qgc3RscGFuZWwgKnBhbmVscCkKIHsKLQlzdGxwb3J0X3QJKnBvcnRwOwotCWludAkJY2hpcG1hc2ssIGk7CisJc3RydWN0IHN0bHBvcnQgKnBvcnRwOworCXVuc2lnbmVkIGludCBpOworCWludCBjaGlwbWFzazsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfaW5pdHBvcnRzKGJyZHA9JXgscGFuZWxwPSV4KVxuIiwgKGludCkgYnJkcCwgKGludCkgcGFuZWxwKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfaW5pdHBvcnRzKGJyZHA9JXAscGFuZWxwPSVwKVxuIiwgYnJkcCwgcGFuZWxwKTsKIAogCWNoaXBtYXNrID0gc3RsX3BhbmVsaW5pdChicmRwLCBwYW5lbHApOwogCkBAIC0yMTM3LDExICsxODI1LDExIEBACiAgKglBbGwgVUFSVCdzIGFyZSBpbml0aWFsaXplZCAoaWYgZm91bmQhKS4gTm93IGdvIHRocm91Z2ggYW5kIHNldHVwCiAgKgllYWNoIHBvcnRzIGRhdGEgc3RydWN0dXJlcy4KICAqLwotCWZvciAoaSA9IDA7IChpIDwgcGFuZWxwLT5ucnBvcnRzKTsgaSsrKSB7Ci0JCXBvcnRwID0ga3phbGxvYyhzaXplb2Yoc3RscG9ydF90KSwgR0ZQX0tFUk5FTCk7CisJZm9yIChpID0gMDsgaSA8IHBhbmVscC0+bnJwb3J0czsgaSsrKSB7CisJCXBvcnRwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0bHBvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwb3J0cCkgewogCQkJcHJpbnRrKCJTVEFMTElPTjogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSAiCi0JCQkJIihzaXplPSVaZClcbiIsIHNpemVvZihzdGxwb3J0X3QpKTsKKwkJCQkiKHNpemU9JVpkKVxuIiwgc2l6ZW9mKHN0cnVjdCBzdGxwb3J0KSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0yMTY0LDcgKzE4NTIsMzAgQEAKIAkJc3RsX3BvcnRpbml0KGJyZHAsIHBhbmVscCwgcG9ydHApOwogCX0KIAotCXJldHVybigwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RsX2NsZWFudXBfcGFuZWxzKHN0cnVjdCBzdGxicmQgKmJyZHApCit7CisJc3RydWN0IHN0bHBhbmVsICpwYW5lbHA7CisJc3RydWN0IHN0bHBvcnQgKnBvcnRwOworCXVuc2lnbmVkIGludCBqLCBrOworCisJZm9yIChqID0gMDsgaiA8IFNUTF9NQVhQQU5FTFM7IGorKykgeworCQlwYW5lbHAgPSBicmRwLT5wYW5lbHNbal07CisJCWlmIChwYW5lbHAgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGsgPSAwOyBrIDwgU1RMX1BPUlRTUEVSUEFORUw7IGsrKykgeworCQkJcG9ydHAgPSBwYW5lbHAtPnBvcnRzW2tdOworCQkJaWYgKHBvcnRwID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQlpZiAocG9ydHAtPnR0eSAhPSBOVUxMKQorCQkJCXN0bF9oYW5ndXAocG9ydHAtPnR0eSk7CisJCQlrZnJlZShwb3J0cC0+dHguYnVmKTsKKwkJCWtmcmVlKHBvcnRwKTsKKwkJfQorCQlrZnJlZShwYW5lbHApOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjE3MywxNiArMTg4NCwxNCBAQAogICoJVHJ5IHRvIGZpbmQgYW5kIGluaXRpYWxpemUgYW4gRWFzeUlPIGJvYXJkLgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHN0bF9pbml0ZWlvKHN0bGJyZF90ICpicmRwKQorc3RhdGljIGludCBfX2RldmluaXQgc3RsX2luaXRlaW8oc3RydWN0IHN0bGJyZCAqYnJkcCkKIHsKLQlzdGxwYW5lbF90CSpwYW5lbHA7CisJc3RydWN0IHN0bHBhbmVsCSpwYW5lbHA7CiAJdW5zaWduZWQgaW50CXN0YXR1czsKIAljaGFyCQkqbmFtZTsKLQlpbnQJCXJjOworCWludAkJcmV0dmFsOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9pbml0ZWlvKGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfaW5pdGVpbyhicmRwPSVwKVxuIiwgYnJkcCk7CiAKIAlicmRwLT5pb2N0cmwgPSBicmRwLT5pb2FkZHIxICsgMTsKIAlicmRwLT5pb3N0YXR1cyA9IGJyZHAtPmlvYWRkcjEgKyAyOwpAQCAtMjIwNywxOCArMTkxNiwyMCBAQAogCQkgICAgKHN0bF92ZWNtYXBbYnJkcC0+aXJxXSA9PSAodW5zaWduZWQgY2hhcikgMHhmZikpIHsKIAkJCXByaW50aygiU1RBTExJT046IGludmFsaWQgaXJxPSVkIGZvciBicmQ9JWRcbiIsCiAJCQkJYnJkcC0+aXJxLCBicmRwLT5icmRucik7Ci0JCQlyZXR1cm4oLUVJTlZBTCk7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBlcnI7CiAJCX0KIAkJb3V0Yigoc3RsX3ZlY21hcFticmRwLT5pcnFdIHwgRUlPXzBXUyB8CiAJCQkoKGJyZHAtPmlycXR5cGUpID8gRUlPX0lOVExFVkVMIDogRUlPX0lOVEVER0UpKSwKIAkJCWJyZHAtPmlvY3RybCk7CiAJfQogCisJcmV0dmFsID0gLUVCVVNZOwogCWlmICghcmVxdWVzdF9yZWdpb24oYnJkcC0+aW9hZGRyMSwgYnJkcC0+aW9zaXplMSwgbmFtZSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1RBTExJT046IFdhcm5pbmcsIGJvYXJkICVkIEkvTyBhZGRyZXNzICIKIAkJCSIleCBjb25mbGljdHMgd2l0aCBhbm90aGVyIGRldmljZVxuIiwgYnJkcC0+YnJkbnIsIAogCQkJYnJkcC0+aW9hZGRyMSk7Ci0JCXJldHVybigtRUJVU1kpOworCQlnb3RvIGVycjsKIAl9CiAJCiAJaWYgKGJyZHAtPmlvc2l6ZTIgPiAwKQpAQCAtMjIyOSw4ICsxOTQwLDcgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNUQUxMSU9OOiBXYXJuaW5nLCBhbHNvICIKIAkJCQkicmVsZWFzaW5nIGJvYXJkICVkIEkvTyBhZGRyZXNzICV4IFxuIiwgCiAJCQkJYnJkcC0+YnJkbnIsIGJyZHAtPmlvYWRkcjEpOwotCQkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9hZGRyMSwgYnJkcC0+aW9zaXplMSk7Ci0gICAgICAgIAkJcmV0dXJuKC1FQlVTWSk7CisJCQlnb3RvIGVycl9yZWwxOwogCQl9CiAKIC8qCkBAIC0yMjM5LDYgKzE5NDksNyBAQAogCWJyZHAtPmNsayA9IENEMTQwMF9DTEs7CiAJYnJkcC0+aXNyID0gc3RsX2Vpb2ludHI7CiAKKwlyZXR2YWwgPSAtRU5PREVWOwogCXN3aXRjaCAoc3RhdHVzICYgRUlPX0lEQklUTUFTSykgewogCWNhc2UgRUlPXzhQT1JUTToKIAkJYnJkcC0+Y2xrID0gQ0QxNDAwX0NMSzhNOwpAQCAtMjI2MiwxMSArMTk3MywxMSBAQAogCQkJYnJkcC0+bnJwb3J0cyA9IDE2OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4oLUVOT0RFVik7CisJCQlnb3RvIGVycl9yZWwyOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybigtRU5PREVWKTsKKwkJZ290byBlcnJfcmVsMjsKIAl9CiAKIC8qCkBAIC0yMjc0LDExICsxOTg1LDEyIEBACiAgKgljYW4gY29tcGxldGUgdGhlIHNldHVwLgogICovCiAKLQlwYW5lbHAgPSBremFsbG9jKHNpemVvZihzdGxwYW5lbF90KSwgR0ZQX0tFUk5FTCk7CisJcGFuZWxwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0bHBhbmVsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYW5lbHApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1RBTExJT046IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgIgotCQkJIihzaXplPSVaZClcbiIsIHNpemVvZihzdGxwYW5lbF90KSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQkJIihzaXplPSVaZClcbiIsIHNpemVvZihzdHJ1Y3Qgc3RscGFuZWwpKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsMjsKIAl9CiAKIAlwYW5lbHAtPm1hZ2ljID0gU1RMX1BBTkVMTUFHSUM7CkBAIC0yMjg4LDEwICsyMDAwLDEwIEBACiAJcGFuZWxwLT5pb2Jhc2UgPSBicmRwLT5pb2FkZHIxOwogCXBhbmVscC0+aHdpZCA9IHN0YXR1czsKIAlpZiAoKHN0YXR1cyAmIEVJT19JREJJVE1BU0spID09IEVJT19NSzMpIHsKLQkJcGFuZWxwLT51YXJ0cCA9ICh2b2lkICopICZzdGxfc2MyNjE5OHVhcnQ7CisJCXBhbmVscC0+dWFydHAgPSAmc3RsX3NjMjYxOTh1YXJ0OwogCQlwYW5lbHAtPmlzciA9IHN0bF9zYzI2MTk4aW50cjsKIAl9IGVsc2UgewotCQlwYW5lbHAtPnVhcnRwID0gKHZvaWQgKikgJnN0bF9jZDE0MDB1YXJ0OworCQlwYW5lbHAtPnVhcnRwID0gJnN0bF9jZDE0MDB1YXJ0OwogCQlwYW5lbHAtPmlzciA9IHN0bF9jZDE0MDBlaW9pbnRyOwogCX0KIApAQCAtMjMwMiwxMSArMjAxNCwyMCBAQAogCWlmIChyZXF1ZXN0X2lycShicmRwLT5pcnEsIHN0bF9pbnRyLCBJUlFGX1NIQVJFRCwgbmFtZSwgYnJkcCkgIT0gMCkgewogCQlwcmludGsoIlNUQUxMSU9OOiBmYWlsZWQgdG8gcmVnaXN0ZXIgaW50ZXJydXB0ICIKIAkJICAgICJyb3V0aW5lIGZvciAlcyBpcnE9JWRcbiIsIG5hbWUsIGJyZHAtPmlycSk7Ci0JCXJjID0gLUVOT0RFVjsKLQl9IGVsc2UgewotCQlyYyA9IDA7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyOwogCX0KLQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK2Vycl9mcjoKKwlzdGxfY2xlYW51cF9wYW5lbHMoYnJkcCk7CitlcnJfcmVsMjoKKwlpZiAoYnJkcC0+aW9zaXplMiA+IDApCisJCXJlbGVhc2VfcmVnaW9uKGJyZHAtPmlvYWRkcjIsIGJyZHAtPmlvc2l6ZTIpOworZXJyX3JlbDE6CisJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9hZGRyMSwgYnJkcC0+aW9zaXplMSk7CitlcnI6CisJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjMxNiwxNiArMjAzNywxNCBAQAogICoJZGVhbGluZyB3aXRoIGFsbCB0eXBlcyBvZiBFQ0ggYm9hcmQuCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgc3RsX2luaXRlY2goc3RsYnJkX3QgKmJyZHApCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzdGxfaW5pdGVjaChzdHJ1Y3Qgc3RsYnJkICpicmRwKQogewotCXN0bHBhbmVsX3QJKnBhbmVscDsKLQl1bnNpZ25lZCBpbnQJc3RhdHVzLCBueHRpZCwgaW9hZGRyLCBjb25mbGljdDsKLQlpbnQJCXBhbmVsbnIsIGJhbmtuciwgaTsKKwlzdHJ1Y3Qgc3RscGFuZWwJKnBhbmVscDsKKwl1bnNpZ25lZCBpbnQJc3RhdHVzLCBueHRpZCwgaW9hZGRyLCBjb25mbGljdCwgcGFuZWxuciwgYmFua25yLCBpOworCWludAkJcmV0dmFsOwogCWNoYXIJCSpuYW1lOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9pbml0ZWNoKGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfaW5pdGVjaChicmRwPSVwKVxuIiwgYnJkcCk7CiAKIAlzdGF0dXMgPSAwOwogCWNvbmZsaWN0ID0gMDsKQEAgLTIzNDIsMjAgKzIwNjEsMjMgQEAKIAkJYnJkcC0+aW9jdHJsID0gYnJkcC0+aW9hZGRyMSArIDE7CiAJCWJyZHAtPmlvc3RhdHVzID0gYnJkcC0+aW9hZGRyMSArIDE7CiAJCXN0YXR1cyA9IGluYihicmRwLT5pb3N0YXR1cyk7Ci0JCWlmICgoc3RhdHVzICYgRUNIX0lEQklUTUFTSykgIT0gRUNIX0lEKQotCQkJcmV0dXJuKC1FTk9ERVYpOworCQlpZiAoKHN0YXR1cyAmIEVDSF9JREJJVE1BU0spICE9IEVDSF9JRCkgeworCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyOworCQl9CiAJCWlmICgoYnJkcC0+aXJxIDwgMCkgfHwgKGJyZHAtPmlycSA+IDE1KSB8fAogCQkgICAgKHN0bF92ZWNtYXBbYnJkcC0+aXJxXSA9PSAodW5zaWduZWQgY2hhcikgMHhmZikpIHsKIAkJCXByaW50aygiU1RBTExJT046IGludmFsaWQgaXJxPSVkIGZvciBicmQ9JWRcbiIsCiAJCQkJYnJkcC0+aXJxLCBicmRwLT5icmRucik7Ci0JCQlyZXR1cm4oLUVJTlZBTCk7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBlcnI7CiAJCX0KIAkJc3RhdHVzID0gKChicmRwLT5pb2FkZHIyICYgRUNIX0FERFIyTUFTSykgPj4gMSk7CiAJCXN0YXR1cyB8PSAoc3RsX3ZlY21hcFticmRwLT5pcnFdIDw8IDEpOwogCQlvdXRiKChzdGF0dXMgfCBFQ0hfQlJEUkVTRVQpLCBicmRwLT5pb2FkZHIxKTsKIAkJYnJkcC0+aW9jdHJsdmFsID0gRUNIX0lOVEVOQUJMRSB8CiAJCQkoKGJyZHAtPmlycXR5cGUpID8gRUNIX0lOVExFVkVMIDogRUNIX0lOVEVER0UpOwotCQlmb3IgKGkgPSAwOyAoaSA8IDEwKTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKIAkJCW91dGIoKGJyZHAtPmlvY3RybHZhbCB8IEVDSF9CUkRFTkFCTEUpLCBicmRwLT5pb2N0cmwpOwogCQlicmRwLT5pb3NpemUxID0gMjsKIAkJYnJkcC0+aW9zaXplMiA9IDMyOwpAQCAtMjM2OCwxMyArMjA5MCwxNiBAQAogCQlicmRwLT5pb2N0cmwgPSBicmRwLT5pb2FkZHIxICsgMHgyMDsKIAkJYnJkcC0+aW9zdGF0dXMgPSBicmRwLT5pb2N0cmw7CiAJCXN0YXR1cyA9IGluYihicmRwLT5pb3N0YXR1cyk7Ci0JCWlmICgoc3RhdHVzICYgRUNIX0lEQklUTUFTSykgIT0gRUNIX0lEKQotCQkJcmV0dXJuKC1FTk9ERVYpOworCQlpZiAoKHN0YXR1cyAmIEVDSF9JREJJVE1BU0spICE9IEVDSF9JRCkgeworCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyOworCQl9CiAJCWlmICgoYnJkcC0+aXJxIDwgMCkgfHwgKGJyZHAtPmlycSA+IDE1KSB8fAogCQkgICAgKHN0bF92ZWNtYXBbYnJkcC0+aXJxXSA9PSAodW5zaWduZWQgY2hhcikgMHhmZikpIHsKIAkJCXByaW50aygiU1RBTExJT046IGludmFsaWQgaXJxPSVkIGZvciBicmQ9JWRcbiIsCiAJCQkJYnJkcC0+aXJxLCBicmRwLT5icmRucik7Ci0JCQlyZXR1cm4oLUVJTlZBTCk7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBlcnI7CiAJCX0KIAkJb3V0YihFQ0hNQ19CUkRSRVNFVCwgYnJkcC0+aW9jdHJsKTsKIAkJb3V0YihFQ0hNQ19JTlRFTkFCTEUsIGJyZHAtPmlvY3RybCk7CkBAIC0yNDAxLDE5ICsyMTI2LDIwIEBACiAKIAlkZWZhdWx0OgogCQlwcmludGsoIlNUQUxMSU9OOiB1bmtub3duIGJvYXJkIHR5cGU9JWRcbiIsIGJyZHAtPmJyZHR5cGUpOwotCQlyZXR1cm4oLUVJTlZBTCk7Ci0JCWJyZWFrOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKIAl9CiAKIC8qCiAgKglDaGVjayBib2FyZHMgZm9yIHBvc3NpYmxlIElPIGFkZHJlc3MgY29uZmxpY3RzIGFuZCByZXR1cm4gZmFpbCBzdGF0dXMgCiAgKiAJaWYgYW4gSU8gY29uZmxpY3QgZm91bmQuCiAgKi8KKwlyZXR2YWwgPSAtRUJVU1k7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihicmRwLT5pb2FkZHIxLCBicmRwLT5pb3NpemUxLCBuYW1lKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJTVEFMTElPTjogV2FybmluZywgYm9hcmQgJWQgSS9PIGFkZHJlc3MgIgogCQkJIiV4IGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgZGV2aWNlXG4iLCBicmRwLT5icmRuciwgCiAJCQlicmRwLT5pb2FkZHIxKTsKLQkJcmV0dXJuKC1FQlVTWSk7CisJCWdvdG8gZXJyOwogCX0KIAkKIAlpZiAoYnJkcC0+aW9zaXplMiA+IDApCkBAIC0yNDI0LDggKzIxNTAsNyBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1RBTExJT046IFdhcm5pbmcsIGFsc28gIgogCQkJCSJyZWxlYXNpbmcgYm9hcmQgJWQgSS9PIGFkZHJlc3MgJXggXG4iLCAKIAkJCQlicmRwLT5icmRuciwgYnJkcC0+aW9hZGRyMSk7Ci0JCQlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2FkZHIxLCBicmRwLT5pb3NpemUxKTsKLQkJCXJldHVybigtRUJVU1kpOworCQkJZ290byBlcnJfcmVsMTsKIAkJfQogCiAvKgpAQCAtMjQ0MCwxOSArMjE2NSwxOSBAQAogCXBhbmVsbnIgPSAwOwogCW54dGlkID0gMDsKIAotCWZvciAoaSA9IDA7IChpIDwgU1RMX01BWFBBTkVMUyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBTVExfTUFYUEFORUxTOyBpKyspIHsKIAkJaWYgKGJyZHAtPmJyZHR5cGUgPT0gQlJEX0VDSFBDSSkgewogCQkJb3V0YihueHRpZCwgYnJkcC0+aW9jdHJsKTsKIAkJCWlvYWRkciA9IGJyZHAtPmlvYWRkcjI7CiAJCX0KIAkJc3RhdHVzID0gaW5iKGlvYWRkciArIEVDSF9QTkxTVEFUVVMpOwogCQlpZiAoKHN0YXR1cyAmIEVDSF9QTkxJRE1BU0spICE9IG54dGlkKQotCQkJYnJlYWs7Ci0JCXBhbmVscCA9IGt6YWxsb2Moc2l6ZW9mKHN0bHBhbmVsX3QpLCBHRlBfS0VSTkVMKTsKKwkJCWdvdG8gZXJyX2ZyOworCQlwYW5lbHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RscGFuZWwpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwYW5lbHApIHsKIAkJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgIgotCQkJCSIoc2l6ZT0lWmQpXG4iLCBzaXplb2Yoc3RscGFuZWxfdCkpOwotCQkJYnJlYWs7CisJCQkJIihzaXplPSVaZClcbiIsIHNpemVvZihzdHJ1Y3Qgc3RscGFuZWwpKTsKKwkJCWdvdG8gZXJyX2ZyOwogCQl9CiAJCXBhbmVscC0+bWFnaWMgPSBTVExfUEFORUxNQUdJQzsKIAkJcGFuZWxwLT5icmRuciA9IGJyZHAtPmJyZG5yOwpAQCAtMjQ2NSw3ICsyMTkwLDcgQEAKIAkJYnJkcC0+Ym5rc3RhdGFkZHJbYmFua25yKytdID0gaW9hZGRyICsgRUNIX1BOTFNUQVRVUzsKIAogCQlpZiAoc3RhdHVzICYgRUNIX1BOTFhQSUQpIHsKLQkJCXBhbmVscC0+dWFydHAgPSAodm9pZCAqKSAmc3RsX3NjMjYxOTh1YXJ0OworCQkJcGFuZWxwLT51YXJ0cCA9ICZzdGxfc2MyNjE5OHVhcnQ7CiAJCQlwYW5lbHAtPmlzciA9IHN0bF9zYzI2MTk4aW50cjsKIAkJCWlmIChzdGF0dXMgJiBFQ0hfUE5MMTZQT1JUKSB7CiAJCQkJcGFuZWxwLT5ucnBvcnRzID0gMTY7CkBAIC0yNDczLDExICsyMTk4LDEwIEBACiAJCQkJYnJkcC0+Ym5rcGFnZWFkZHJbYmFua25yXSA9IG54dGlkOwogCQkJCWJyZHAtPmJua3N0YXRhZGRyW2JhbmtucisrXSA9IGlvYWRkciArIDQgKwogCQkJCQlFQ0hfUE5MU1RBVFVTOwotCQkJfSBlbHNlIHsKKwkJCX0gZWxzZQogCQkJCXBhbmVscC0+bnJwb3J0cyA9IDg7Ci0JCQl9CiAJCX0gZWxzZSB7Ci0JCQlwYW5lbHAtPnVhcnRwID0gKHZvaWQgKikgJnN0bF9jZDE0MDB1YXJ0OworCQkJcGFuZWxwLT51YXJ0cCA9ICZzdGxfY2QxNDAwdWFydDsKIAkJCXBhbmVscC0+aXNyID0gc3RsX2NkMTQwMGVjaGludHI7CiAJCQlpZiAoc3RhdHVzICYgRUNIX1BOTDE2UE9SVCkgewogCQkJCXBhbmVscC0+bnJwb3J0cyA9IDE2OwpAQCAtMjUwMCw3ICsyMjI0LDcgQEAKIAkJYnJkcC0+cGFuZWxzW3BhbmVsbnIrK10gPSBwYW5lbHA7CiAJCWlmICgoYnJkcC0+YnJkdHlwZSAhPSBCUkRfRUNIUENJKSAmJgogCQkgICAgKGlvYWRkciA+PSAoYnJkcC0+aW9hZGRyMiArIGJyZHAtPmlvc2l6ZTIpKSkKLQkJCWJyZWFrOworCQkJZ290byBlcnJfZnI7CiAJfQogCiAJYnJkcC0+bnJwYW5lbHMgPSBwYW5lbG5yOwpAQCAtMjUxMiwxMiArMjIzNiwxOSBAQAogCWlmIChyZXF1ZXN0X2lycShicmRwLT5pcnEsIHN0bF9pbnRyLCBJUlFGX1NIQVJFRCwgbmFtZSwgYnJkcCkgIT0gMCkgewogCQlwcmludGsoIlNUQUxMSU9OOiBmYWlsZWQgdG8gcmVnaXN0ZXIgaW50ZXJydXB0ICIKIAkJICAgICJyb3V0aW5lIGZvciAlcyBpcnE9JWRcbiIsIG5hbWUsIGJyZHAtPmlycSk7Ci0JCWkgPSAtRU5PREVWOwotCX0gZWxzZSB7Ci0JCWkgPSAwOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcjsKIAl9CiAKLQlyZXR1cm4oaSk7CisJcmV0dXJuIDA7CitlcnJfZnI6CisJc3RsX2NsZWFudXBfcGFuZWxzKGJyZHApOworCWlmIChicmRwLT5pb3NpemUyID4gMCkKKwkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9hZGRyMiwgYnJkcC0+aW9zaXplMik7CitlcnJfcmVsMToKKwlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2FkZHIxLCBicmRwLT5pb3NpemUxKTsKK2VycjoKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNTI5LDQ4ICsyMjYwLDYxIEBACiAgKglzaW5jZSB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIHNldHVwIGlzIHZlcnkgZGlmZmVyZW50LgogICovCiAKLXN0YXRpYyBpbnQgX19pbml0IHN0bF9icmRpbml0KHN0bGJyZF90ICpicmRwKQorc3RhdGljIGludCBfX2RldmluaXQgc3RsX2JyZGluaXQoc3RydWN0IHN0bGJyZCAqYnJkcCkKIHsKLQlpbnQJaTsKKwlpbnQgaSwgcmV0dmFsOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9icmRpbml0KGJyZHA9JXgpXG4iLCAoaW50KSBicmRwKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfYnJkaW5pdChicmRwPSVwKVxuIiwgYnJkcCk7CiAKIAlzd2l0Y2ggKGJyZHAtPmJyZHR5cGUpIHsKIAljYXNlIEJSRF9FQVNZSU86CiAJY2FzZSBCUkRfRUFTWUlPUENJOgotCQlzdGxfaW5pdGVpbyhicmRwKTsKKwkJcmV0dmFsID0gc3RsX2luaXRlaW8oYnJkcCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycjsKIAkJYnJlYWs7CiAJY2FzZSBCUkRfRUNIOgogCWNhc2UgQlJEX0VDSE1DOgogCWNhc2UgQlJEX0VDSFBDSToKIAljYXNlIEJSRF9FQ0g2NFBDSToKLQkJc3RsX2luaXRlY2goYnJkcCk7CisJCXJldHZhbCA9IHN0bF9pbml0ZWNoKGJyZHApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50aygiU1RBTExJT046IGJvYXJkPSVkIGlzIHVua25vd24gYm9hcmQgdHlwZT0lZFxuIiwKIAkJCWJyZHAtPmJyZG5yLCBicmRwLT5icmR0eXBlKTsKLQkJcmV0dXJuKEVOT0RFVik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOwogCX0KIAotCXN0bF9icmRzW2JyZHAtPmJyZG5yXSA9IGJyZHA7CiAJaWYgKChicmRwLT5zdGF0ZSAmIEJSRF9GT1VORCkgPT0gMCkgewogCQlwcmludGsoIlNUQUxMSU9OOiAlcyBib2FyZCBub3QgZm91bmQsIGJvYXJkPSVkIGlvPSV4IGlycT0lZFxuIiwKIAkJCXN0bF9icmRuYW1lc1ticmRwLT5icmR0eXBlXSwgYnJkcC0+YnJkbnIsCiAJCQlicmRwLT5pb2FkZHIxLCBicmRwLT5pcnEpOwotCQlyZXR1cm4oRU5PREVWKTsKKwkJZ290byBlcnJfZnJlZTsKIAl9CiAKLQlmb3IgKGkgPSAwOyAoaSA8IFNUTF9NQVhQQU5FTFMpOyBpKyspCi0JCWlmIChicmRwLT5wYW5lbHNbaV0gIT0gKHN0bHBhbmVsX3QgKikgTlVMTCkKKwlmb3IgKGkgPSAwOyBpIDwgU1RMX01BWFBBTkVMUzsgaSsrKQorCQlpZiAoYnJkcC0+cGFuZWxzW2ldICE9IE5VTEwpCiAJCQlzdGxfaW5pdHBvcnRzKGJyZHAsIGJyZHAtPnBhbmVsc1tpXSk7CiAKIAlwcmludGsoIlNUQUxMSU9OOiAlcyBmb3VuZCwgYm9hcmQ9JWQgaW89JXggaXJxPSVkICIKIAkJIm5ycGFuZWxzPSVkIG5ycG9ydHM9JWRcbiIsIHN0bF9icmRuYW1lc1ticmRwLT5icmR0eXBlXSwKIAkJYnJkcC0+YnJkbnIsIGJyZHAtPmlvYWRkcjEsIGJyZHAtPmlycSwgYnJkcC0+bnJwYW5lbHMsCiAJCWJyZHAtPm5ycG9ydHMpOwotCXJldHVybigwKTsKKworCXJldHVybiAwOworZXJyX2ZyZWU6CisJZnJlZV9pcnEoYnJkcC0+aXJxLCBicmRwKTsKKworCXN0bF9jbGVhbnVwX3BhbmVscyhicmRwKTsKKworCXJlbGVhc2VfcmVnaW9uKGJyZHAtPmlvYWRkcjEsIGJyZHAtPmlvc2l6ZTEpOworCWlmIChicmRwLT5pb3NpemUyID4gMCkKKwkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9hZGRyMiwgYnJkcC0+aW9zaXplMik7CitlcnI6CisJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjU3OSw1OSArMjMyMyw2MiBAQAogICoJRmluZCB0aGUgbmV4dCBhdmFpbGFibGUgYm9hcmQgbnVtYmVyIHRoYXQgaXMgZnJlZS4KICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBzdGxfZ2V0YnJkbnIodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN0bF9nZXRicmRucih2b2lkKQogewotCWludAlpOworCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMDsgKGkgPCBTVExfTUFYQlJEUyk7IGkrKykgewotCQlpZiAoc3RsX2JyZHNbaV0gPT0gKHN0bGJyZF90ICopIE5VTEwpIHsKKwlmb3IgKGkgPSAwOyBpIDwgU1RMX01BWEJSRFM7IGkrKykKKwkJaWYgKHN0bF9icmRzW2ldID09IE5VTEwpIHsKIAkJCWlmIChpID49IHN0bF9ucmJyZHMpCiAJCQkJc3RsX25yYnJkcyA9IGkgKyAxOwotCQkJcmV0dXJuKGkpOworCQkJcmV0dXJuIGk7CiAJCX0KLQl9Ci0JcmV0dXJuKC0xKTsKKworCXJldHVybiAtMTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYJQ09ORklHX1BDSQotCiAvKgogICoJV2UgaGF2ZSBhIFN0YWxsaW9uIGJvYXJkLiBBbGxvY2F0ZSBhIGJvYXJkIHN0cnVjdHVyZSBhbmQKICAqCWluaXRpYWxpemUgaXQuIFJlYWQgaXRzIElPIGFuZCBJUlEgcmVzb3VyY2VzIGZyb20gUENJCiAgKgljb25maWd1cmF0aW9uIHNwYWNlLgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHN0bF9pbml0cGNpYnJkKGludCBicmR0eXBlLCBzdHJ1Y3QgcGNpX2RldiAqZGV2cCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN0bF9wY2lwcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdGxicmRfdAkqYnJkcDsKKwlzdHJ1Y3Qgc3RsYnJkICpicmRwOworCXVuc2lnbmVkIGludCBpLCBicmR0eXBlID0gZW50LT5kcml2ZXJfZGF0YTsKKwlpbnQgYnJkbnIsIHJldHZhbCA9IC1FTk9ERVY7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2luaXRwY2licmQoYnJkdHlwZT0lZCxidXNucj0leCxkZXZucj0leClcbiIsIGJyZHR5cGUsCi0JCWRldnAtPmJ1cy0+bnVtYmVyLCBkZXZwLT5kZXZmbik7Ci0jZW5kaWYKKwlpZiAoKHBkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19TVE9SQUdFX0lERSkKKwkJZ290byBlcnI7CiAKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2cCkpCi0JCXJldHVybigtRUlPKTsKLQlpZiAoKGJyZHAgPSBzdGxfYWxsb2NicmQoKSkgPT0gKHN0bGJyZF90ICopIE5VTEwpCi0JCXJldHVybigtRU5PTUVNKTsKLQlpZiAoKGJyZHAtPmJyZG5yID0gc3RsX2dldGJyZG5yKCkpIDwgMCkgewotCQlwcmludGsoIlNUQUxMSU9OOiB0b28gbWFueSBib2FyZHMgZm91bmQsICIKLQkJCSJtYXhpbXVtIHN1cHBvcnRlZCAlZFxuIiwgU1RMX01BWEJSRFMpOwotCQlyZXR1cm4oMCk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgInBsZWFzZSwgcmVwb3J0IHRoaXMgdG8gTEtNTDogJXgvJXgvJXhcbiIsCisJCQlwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSwgcGRldi0+Y2xhc3MpOworCisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnI7CisJYnJkcCA9IHN0bF9hbGxvY2JyZCgpOworCWlmIChicmRwID09IE5VTEwpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnI7CiAJfQotCWJyZHAtPmJyZHR5cGUgPSBicmR0eXBlOworCW11dGV4X2xvY2soJnN0bF9icmRzbG9jayk7CisJYnJkbnIgPSBzdGxfZ2V0YnJkbnIoKTsKKwlpZiAoYnJkbnIgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInRvbyBtYW55IGJvYXJkcyBmb3VuZCwgIgorCQkJIm1heGltdW0gc3VwcG9ydGVkICVkXG4iLCBTVExfTUFYQlJEUyk7CisJCW11dGV4X3VubG9jaygmc3RsX2JyZHNsb2NrKTsKKwkJZ290byBlcnJfZnI7CisJfQorCWJyZHAtPmJyZG5yID0gKHVuc2lnbmVkIGludClicmRucjsKKwlzdGxfYnJkc1ticmRwLT5icmRucl0gPSBicmRwOworCW11dGV4X3VubG9jaygmc3RsX2JyZHNsb2NrKTsKIAotLyoKLSAqCURpZmZlcmVudCBTdGFsbGlvbiBib2FyZHMgdXNlIHRoZSBCQVIgcmVnaXN0ZXJzIGluIGRpZmZlcmVudCB3YXlzLAotICoJc28gc2V0IHVwIGlvIGFkZHJlc3NlcyBiYXNlZCBvbiBib2FyZCB0eXBlLgotICovCi0jaWZkZWYgREVCVUcKLQlwcmludGsoIiVzKCVkKTogQkFSW109JXgsJXgsJXgsJXggSVJRPSV4XG4iLCBfX0ZJTEVfXywgX19MSU5FX18sCi0JCXBjaV9yZXNvdXJjZV9zdGFydChkZXZwLCAwKSwgcGNpX3Jlc291cmNlX3N0YXJ0KGRldnAsIDEpLAotCQlwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cCwgMiksIHBjaV9yZXNvdXJjZV9zdGFydChkZXZwLCAzKSwgZGV2cC0+aXJxKTsKLSNlbmRpZgorCWJyZHAtPmJyZHR5cGUgPSBicmR0eXBlOworCWJyZHAtPnN0YXRlIHw9IFNUTF9QUk9CRUQ7CiAKIC8qCiAgKglXZSBoYXZlIGFsbCByZXNvdXJjZXMgZnJvbSB0aGUgYm9hcmQsIHNvIGxldCdzIHNldHVwIHRoZSBhY3R1YWwKQEAgLTI2MzksMTE5ICsyMzg2LDY5IEBACiAgKi8KIAlzd2l0Y2ggKGJyZHR5cGUpIHsKIAljYXNlIEJSRF9FQ0hQQ0k6Ci0JCWJyZHAtPmlvYWRkcjIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cCwgMCk7Ci0JCWJyZHAtPmlvYWRkcjEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cCwgMSk7CisJCWJyZHAtPmlvYWRkcjIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJCWJyZHAtPmlvYWRkcjEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CiAJCWJyZWFrOwogCWNhc2UgQlJEX0VDSDY0UENJOgotCQlicmRwLT5pb2FkZHIyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldnAsIDIpOwotCQlicmRwLT5pb2FkZHIxID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldnAsIDEpOworCQlicmRwLT5pb2FkZHIyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOworCQlicmRwLT5pb2FkZHIxID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwogCQlicmVhazsKIAljYXNlIEJSRF9FQVNZSU9QQ0k6Ci0JCWJyZHAtPmlvYWRkcjEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cCwgMik7Ci0JCWJyZHAtPmlvYWRkcjIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cCwgMSk7CisJCWJyZHAtPmlvYWRkcjEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7CisJCWJyZHAtPmlvYWRkcjIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50aygiU1RBTExJT046IHVua25vd24gUENJIGJvYXJkIHR5cGU9JWRcbiIsIGJyZHR5cGUpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmtub3duIFBDSSBib2FyZCB0eXBlPSV1XG4iLCBicmR0eXBlKTsKIAkJYnJlYWs7CiAJfQogCi0JYnJkcC0+aXJxID0gZGV2cC0+aXJxOwotCXN0bF9icmRpbml0KGJyZHApOworCWJyZHAtPmlycSA9IHBkZXYtPmlycTsKKwlyZXR2YWwgPSBzdGxfYnJkaW5pdChicmRwKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9udWxsOwogCi0JcmV0dXJuKDApOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBicmRwKTsKKworCWZvciAoaSA9IDA7IGkgPCBicmRwLT5ucnBvcnRzOyBpKyspCisJCXR0eV9yZWdpc3Rlcl9kZXZpY2Uoc3RsX3NlcmlhbCwKKwkJCQlicmRwLT5icmRuciAqIFNUTF9NQVhQT1JUUyArIGksICZwZGV2LT5kZXYpOworCisJcmV0dXJuIDA7CitlcnJfbnVsbDoKKwlzdGxfYnJkc1ticmRwLT5icmRucl0gPSBOVUxMOworZXJyX2ZyOgorCWtmcmVlKGJyZHApOworZXJyOgorCXJldHVybiByZXR2YWw7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqCUZpbmQgYWxsIFN0YWxsaW9uIFBDSSBib2FyZHMgdGhhdCBtaWdodCBiZSBpbnN0YWxsZWQuIEluaXRpYWxpemUgZWFjaAotICoJb25lIGFzIGl0IGlzIGZvdW5kLgotICovCi0KLQotc3RhdGljIGlubGluZSBpbnQgc3RsX2ZpbmRwY2licmRzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc3RsX3BjaXJlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldgkqZGV2ID0gTlVMTDsKLQlpbnQJCWksIHJjOworCXN0cnVjdCBzdGxicmQgKmJyZHAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgaW50IGk7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2ZpbmRwY2licmRzKClcbiIpOwotI2VuZGlmCisJZnJlZV9pcnEoYnJkcC0+aXJxLCBicmRwKTsKIAotCWZvciAoaSA9IDA7IChpIDwgc3RsX25ycGNpYnJkcyk7IGkrKykKLQkJd2hpbGUgKChkZXYgPSBwY2lfZmluZF9kZXZpY2Uoc3RsX3BjaWJyZHNbaV0udmVuZGlkLAotCQkgICAgc3RsX3BjaWJyZHNbaV0uZGV2aWQsIGRldikpKSB7CisJc3RsX2NsZWFudXBfcGFuZWxzKGJyZHApOwogCi0vKgotICoJCQlGb3VuZCBhIGRldmljZSBvbiB0aGUgUENJIGJ1cyB0aGF0IGhhcyBvdXIgdmVuZG9yIGFuZAotICoJCQlkZXZpY2UgSUQuIE5lZWQgdG8gY2hlY2sgbm93IHRoYXQgaXQgaXMgcmVhbGx5IHVzLgotICovCi0JCQlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX1NUT1JBR0VfSURFKQotCQkJCWNvbnRpbnVlOworCXJlbGVhc2VfcmVnaW9uKGJyZHAtPmlvYWRkcjEsIGJyZHAtPmlvc2l6ZTEpOworCWlmIChicmRwLT5pb3NpemUyID4gMCkKKwkJcmVsZWFzZV9yZWdpb24oYnJkcC0+aW9hZGRyMiwgYnJkcC0+aW9zaXplMik7CiAKLQkJCXJjID0gc3RsX2luaXRwY2licmQoc3RsX3BjaWJyZHNbaV0uYnJkdHlwZSwgZGV2KTsKLQkJCWlmIChyYykKLQkJCQlyZXR1cm4ocmMpOwotCQl9CisJZm9yIChpID0gMDsgaSA8IGJyZHAtPm5ycG9ydHM7IGkrKykKKwkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKHN0bF9zZXJpYWwsCisJCQkJYnJkcC0+YnJkbnIgKiBTVExfTUFYUE9SVFMgKyBpKTsKIAotCXJldHVybigwKTsKKwlzdGxfYnJkc1ticmRwLT5icmRucl0gPSBOVUxMOworCWtmcmVlKGJyZHApOwogfQogCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICoJU2NhbiB0aHJvdWdoIGFsbCB0aGUgYm9hcmRzIGluIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzZWUgd2hhdCB3ZQotICoJY2FuIGZpbmQuIEhhbmRsZSBFSU8gYW5kIHRoZSBFQ0ggYm9hcmRzIGEgbGl0dGxlIGRpZmZlcmVudGx5IGhlcmUKLSAqCXNpbmNlIHRoZSBpbml0aWFsIHNlYXJjaCBhbmQgc2V0dXAgaXMgdG9vIGRpZmZlcmVudC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBzdGxfaW5pdGJyZHModm9pZCkKLXsKLQlzdGxicmRfdAkqYnJkcDsKLQlzdGxjb25mX3QJKmNvbmZwOwotCWludAkJaTsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfaW5pdGJyZHMoKVxuIik7Ci0jZW5kaWYKLQotCWlmIChzdGxfbnJicmRzID4gU1RMX01BWEJSRFMpIHsKLQkJcHJpbnRrKCJTVEFMTElPTjogdG9vIG1hbnkgYm9hcmRzIGluIGNvbmZpZ3VyYXRpb24gdGFibGUsICIKLQkJCSJ0cnVuY2F0aW5nIHRvICVkXG4iLCBTVExfTUFYQlJEUyk7Ci0JCXN0bF9ucmJyZHMgPSBTVExfTUFYQlJEUzsKLQl9Ci0KLS8qCi0gKglGaXJzdGx5IHNjYW4gdGhlIGxpc3Qgb2Ygc3RhdGljIGJvYXJkcyBjb25maWd1cmVkLiBBbGxvY2F0ZQotICoJcmVzb3VyY2VzIGFuZCBpbml0aWFsaXplIHRoZSBib2FyZHMgYXMgZm91bmQuCi0gKi8KLQlmb3IgKGkgPSAwOyAoaSA8IHN0bF9ucmJyZHMpOyBpKyspIHsKLQkJY29uZnAgPSAmc3RsX2JyZGNvbmZbaV07Ci0JCXN0bF9wYXJzZWJyZChjb25mcCwgc3RsX2JyZHNwW2ldKTsKLQkJaWYgKChicmRwID0gc3RsX2FsbG9jYnJkKCkpID09IChzdGxicmRfdCAqKSBOVUxMKQotCQkJcmV0dXJuKC1FTk9NRU0pOwotCQlicmRwLT5icmRuciA9IGk7Ci0JCWJyZHAtPmJyZHR5cGUgPSBjb25mcC0+YnJkdHlwZTsKLQkJYnJkcC0+aW9hZGRyMSA9IGNvbmZwLT5pb2FkZHIxOwotCQlicmRwLT5pb2FkZHIyID0gY29uZnAtPmlvYWRkcjI7Ci0JCWJyZHAtPmlycSA9IGNvbmZwLT5pcnE7Ci0JCWJyZHAtPmlycXR5cGUgPSBjb25mcC0+aXJxdHlwZTsKLQkJc3RsX2JyZGluaXQoYnJkcCk7Ci0JfQotCi0vKgotICoJRmluZCBhbnkgZHluYW1pY2FsbHkgc3VwcG9ydGVkIGJvYXJkcy4gVGhhdCBpcyB2aWEgbW9kdWxlIGxvYWQKLSAqCWxpbmUgb3B0aW9ucyBvciBhdXRvLWRldGVjdGVkIG9uIHRoZSBQQ0kgYnVzLgotICovCi0Jc3RsX2FyZ2JyZHMoKTsKLSNpZmRlZiBDT05GSUdfUENJCi0Jc3RsX2ZpbmRwY2licmRzKCk7Ci0jZW5kaWYKLQotCXJldHVybigwKTsKLX0KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzdGxfcGNpZHJpdmVyID0geworCS5uYW1lID0gInN0YWxsaW9uIiwKKwkuaWRfdGFibGUgPSBzdGxfcGNpYnJkcywKKwkucHJvYmUgPSBzdGxfcGNpcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHN0bF9wY2lyZW1vdmUpCit9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTI3NjEsMTcgKzI0NTgsMTggQEAKIAogc3RhdGljIGludCBzdGxfZ2V0YnJkc3RhdHMoY29tYnJkX3QgX191c2VyICpicCkKIHsKLQlzdGxicmRfdAkqYnJkcDsKLQlzdGxwYW5lbF90CSpwYW5lbHA7Ci0JaW50CQlpOworCWNvbWJyZF90CXN0bF9icmRzdGF0czsKKwlzdHJ1Y3Qgc3RsYnJkCSpicmRwOworCXN0cnVjdCBzdGxwYW5lbAkqcGFuZWxwOworCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZzdGxfYnJkc3RhdHMsIGJwLCBzaXplb2YoY29tYnJkX3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKHN0bF9icmRzdGF0cy5icmQgPj0gU1RMX01BWEJSRFMpCi0JCXJldHVybigtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJYnJkcCA9IHN0bF9icmRzW3N0bF9icmRzdGF0cy5icmRdOwotCWlmIChicmRwID09IChzdGxicmRfdCAqKSBOVUxMKQotCQlyZXR1cm4oLUVOT0RFVik7CisJaWYgKGJyZHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAltZW1zZXQoJnN0bF9icmRzdGF0cywgMCwgc2l6ZW9mKGNvbWJyZF90KSk7CiAJc3RsX2JyZHN0YXRzLmJyZCA9IGJyZHAtPmJyZG5yOwpAQCAtMjc4Myw3ICsyNDgxLDcgQEAKIAlzdGxfYnJkc3RhdHMuaXJxID0gYnJkcC0+aXJxOwogCXN0bF9icmRzdGF0cy5ucnBhbmVscyA9IGJyZHAtPm5ycGFuZWxzOwogCXN0bF9icmRzdGF0cy5ucnBvcnRzID0gYnJkcC0+bnJwb3J0czsKLQlmb3IgKGkgPSAwOyAoaSA8IGJyZHAtPm5ycGFuZWxzKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGJyZHAtPm5ycGFuZWxzOyBpKyspIHsKIAkJcGFuZWxwID0gYnJkcC0+cGFuZWxzW2ldOwogCQlzdGxfYnJkc3RhdHMucGFuZWxzW2ldLnBhbmVsID0gaTsKIAkJc3RsX2JyZHN0YXRzLnBhbmVsc1tpXS5od2lkID0gcGFuZWxwLT5od2lkOwpAQCAtMjc5OSwyNCArMjQ5NywyNCBAQAogICoJUmVzb2x2ZSB0aGUgcmVmZXJlbmNlZCBwb3J0IG51bWJlciBpbnRvIGEgcG9ydCBzdHJ1Y3QgcG9pbnRlci4KICAqLwogCi1zdGF0aWMgc3RscG9ydF90ICpzdGxfZ2V0cG9ydChpbnQgYnJkbnIsIGludCBwYW5lbG5yLCBpbnQgcG9ydG5yKQorc3RhdGljIHN0cnVjdCBzdGxwb3J0ICpzdGxfZ2V0cG9ydChpbnQgYnJkbnIsIGludCBwYW5lbG5yLCBpbnQgcG9ydG5yKQogewotCXN0bGJyZF90CSpicmRwOwotCXN0bHBhbmVsX3QJKnBhbmVscDsKKwlzdHJ1Y3Qgc3RsYnJkCSpicmRwOworCXN0cnVjdCBzdGxwYW5lbAkqcGFuZWxwOwogCi0JaWYgKChicmRuciA8IDApIHx8IChicmRuciA+PSBTVExfTUFYQlJEUykpCi0JCXJldHVybigoc3RscG9ydF90ICopIE5VTEwpOworCWlmIChicmRuciA8IDAgfHwgYnJkbnIgPj0gU1RMX01BWEJSRFMpCisJCXJldHVybiBOVUxMOwogCWJyZHAgPSBzdGxfYnJkc1ticmRucl07Ci0JaWYgKGJyZHAgPT0gKHN0bGJyZF90ICopIE5VTEwpCi0JCXJldHVybigoc3RscG9ydF90ICopIE5VTEwpOwotCWlmICgocGFuZWxuciA8IDApIHx8IChwYW5lbG5yID49IGJyZHAtPm5ycGFuZWxzKSkKLQkJcmV0dXJuKChzdGxwb3J0X3QgKikgTlVMTCk7CisJaWYgKGJyZHAgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHBhbmVsbnIgPCAwIHx8ICh1bnNpZ25lZCBpbnQpcGFuZWxuciA+PSBicmRwLT5ucnBhbmVscykKKwkJcmV0dXJuIE5VTEw7CiAJcGFuZWxwID0gYnJkcC0+cGFuZWxzW3BhbmVsbnJdOwotCWlmIChwYW5lbHAgPT0gKHN0bHBhbmVsX3QgKikgTlVMTCkKLQkJcmV0dXJuKChzdGxwb3J0X3QgKikgTlVMTCk7Ci0JaWYgKChwb3J0bnIgPCAwKSB8fCAocG9ydG5yID49IHBhbmVscC0+bnJwb3J0cykpCi0JCXJldHVybigoc3RscG9ydF90ICopIE5VTEwpOwotCXJldHVybihwYW5lbHAtPnBvcnRzW3BvcnRucl0pOworCWlmIChwYW5lbHAgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHBvcnRuciA8IDAgfHwgKHVuc2lnbmVkIGludClwb3J0bnIgPj0gcGFuZWxwLT5ucnBvcnRzKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcGFuZWxwLT5wb3J0c1twb3J0bnJdOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yODI3LDggKzI1MjUsOSBAQAogICoJd2hhdCBwb3J0IHRvIGdldCBzdGF0cyBmb3IgKHVzZWQgdGhyb3VnaCBib2FyZCBjb250cm9sIGRldmljZSkuCiAgKi8KIAotc3RhdGljIGludCBzdGxfZ2V0cG9ydHN0YXRzKHN0bHBvcnRfdCAqcG9ydHAsIGNvbXN0YXRzX3QgX191c2VyICpjcCkKK3N0YXRpYyBpbnQgc3RsX2dldHBvcnRzdGF0cyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGNvbXN0YXRzX3QgX191c2VyICpjcCkKIHsKKwljb21zdGF0c190CXN0bF9jb21zdGF0czsKIAl1bnNpZ25lZCBjaGFyCSpoZWFkLCAqdGFpbDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCkBAIC0yODM3LDggKzI1MzYsOCBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXBvcnRwID0gc3RsX2dldHBvcnQoc3RsX2NvbXN0YXRzLmJyZCwgc3RsX2NvbXN0YXRzLnBhbmVsLAogCQkJc3RsX2NvbXN0YXRzLnBvcnQpOwotCQlpZiAocG9ydHAgPT0gKHN0bHBvcnRfdCAqKSBOVUxMKQotCQkJcmV0dXJuKC1FTk9ERVYpOworCQlpZiAocG9ydHAgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXBvcnRwLT5zdGF0cy5zdGF0ZSA9IHBvcnRwLT5pc3RhdGU7CkBAIC0yODUzLDI1ICsyNTUyLDI0IEBACiAJcG9ydHAtPnN0YXRzLnJ4YnVmZmVyZWQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YWxsaW9uX2xvY2ssIGZsYWdzKTsKLQlpZiAocG9ydHAtPnR0eSAhPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKikgTlVMTCkgeworCWlmIChwb3J0cC0+dHR5ICE9IE5VTEwpCiAJCWlmIChwb3J0cC0+dHR5LT5kcml2ZXJfZGF0YSA9PSBwb3J0cCkgewogCQkJcG9ydHAtPnN0YXRzLnR0eXN0YXRlID0gcG9ydHAtPnR0eS0+ZmxhZ3M7CiAJCQkvKiBObyBsb25nZXIgYXZhaWxhYmxlIGFzIGEgc3RhdGlzdGljICovCiAJCQlwb3J0cC0+c3RhdHMucnhidWZmZXJlZCA9IDE7IC8qcG9ydHAtPnR0eS0+ZmxpcC5jb3VudDsgKi8KLQkJCWlmIChwb3J0cC0+dHR5LT50ZXJtaW9zICE9IChzdHJ1Y3QgdGVybWlvcyAqKSBOVUxMKSB7CisJCQlpZiAocG9ydHAtPnR0eS0+dGVybWlvcyAhPSBOVUxMKSB7CiAJCQkJcG9ydHAtPnN0YXRzLmNmbGFncyA9IHBvcnRwLT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJCQkJcG9ydHAtPnN0YXRzLmlmbGFncyA9IHBvcnRwLT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CiAJCQkJcG9ydHAtPnN0YXRzLm9mbGFncyA9IHBvcnRwLT50dHktPnRlcm1pb3MtPmNfb2ZsYWc7CiAJCQkJcG9ydHAtPnN0YXRzLmxmbGFncyA9IHBvcnRwLT50dHktPnRlcm1pb3MtPmNfbGZsYWc7CiAJCQl9CiAJCX0KLQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhbGxpb25fbG9jaywgZmxhZ3MpOwogCiAJaGVhZCA9IHBvcnRwLT50eC5oZWFkOwogCXRhaWwgPSBwb3J0cC0+dHgudGFpbDsKLQlwb3J0cC0+c3RhdHMudHhidWZmZXJlZCA9ICgoaGVhZCA+PSB0YWlsKSA/IChoZWFkIC0gdGFpbCkgOgotCQkoU1RMX1RYQlVGU0laRSAtICh0YWlsIC0gaGVhZCkpKTsKKwlwb3J0cC0+c3RhdHMudHhidWZmZXJlZCA9IChoZWFkID49IHRhaWwpID8gKGhlYWQgLSB0YWlsKSA6CisJCShTVExfVFhCVUZTSVpFIC0gKHRhaWwgLSBoZWFkKSk7CiAKIAlwb3J0cC0+c3RhdHMuc2lnbmFscyA9ICh1bnNpZ25lZCBsb25nKSBzdGxfZ2V0c2lnbmFscyhwb3J0cCk7CiAKQEAgLTI4ODUsMTUgKzI1ODMsMTcgQEAKICAqCUNsZWFyIHRoZSBwb3J0IHN0YXRzIHN0cnVjdHVyZS4gV2UgYWxzbyByZXR1cm4gaXQgemVyb2VkIG91dC4uLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX2NscnBvcnRzdGF0cyhzdGxwb3J0X3QgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApCitzdGF0aWMgaW50IHN0bF9jbHJwb3J0c3RhdHMoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApCiB7CisJY29tc3RhdHNfdAlzdGxfY29tc3RhdHM7CisKIAlpZiAoIXBvcnRwKSB7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmc3RsX2NvbXN0YXRzLCBjcCwgc2l6ZW9mKGNvbXN0YXRzX3QpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlwb3J0cCA9IHN0bF9nZXRwb3J0KHN0bF9jb21zdGF0cy5icmQsIHN0bF9jb21zdGF0cy5wYW5lbCwKIAkJCXN0bF9jb21zdGF0cy5wb3J0KTsKLQkJaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKLQkJCXJldHVybigtRU5PREVWKTsKKwkJaWYgKHBvcnRwID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAltZW1zZXQoJnBvcnRwLT5zdGF0cywgMCwgc2l6ZW9mKGNvbXN0YXRzX3QpKTsKQEAgLTI5MTAsMTcgKzI2MTAsMTggQEAKICAqCVJldHVybiB0aGUgZW50aXJlIGRyaXZlciBwb3J0cyBzdHJ1Y3R1cmUgdG8gYSB1c2VyIGFwcC4KICAqLwogCi1zdGF0aWMgaW50IHN0bF9nZXRwb3J0c3RydWN0KHN0bHBvcnRfdCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQgc3RsX2dldHBvcnRzdHJ1Y3Qoc3RydWN0IHN0bHBvcnQgX191c2VyICphcmcpCiB7Ci0Jc3RscG9ydF90CSpwb3J0cDsKKwlzdHJ1Y3Qgc3RscG9ydAlzdGxfZHVtbXlwb3J0OworCXN0cnVjdCBzdGxwb3J0CSpwb3J0cDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmc3RsX2R1bW15cG9ydCwgYXJnLCBzaXplb2Yoc3RscG9ydF90KSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZzdGxfZHVtbXlwb3J0LCBhcmcsIHNpemVvZihzdHJ1Y3Qgc3RscG9ydCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlwb3J0cCA9IHN0bF9nZXRwb3J0KHN0bF9kdW1teXBvcnQuYnJkbnIsIHN0bF9kdW1teXBvcnQucGFuZWxuciwKIAkJIHN0bF9kdW1teXBvcnQucG9ydG5yKTsKIAlpZiAoIXBvcnRwKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gY29weV90b191c2VyKGFyZywgcG9ydHAsIHNpemVvZihzdGxwb3J0X3QpKSA/IC1FRkFVTFQgOiAwOworCXJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBwb3J0cCwgc2l6ZW9mKHN0cnVjdCBzdGxwb3J0KSkgPyAtRUZBVUxUIDogMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjkyOSwxOCArMjYzMCwxOSBAQAogICoJUmV0dXJuIHRoZSBlbnRpcmUgZHJpdmVyIGJvYXJkIHN0cnVjdHVyZSB0byBhIHVzZXIgYXBwLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX2dldGJyZHN0cnVjdChzdGxicmRfdCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQgc3RsX2dldGJyZHN0cnVjdChzdHJ1Y3Qgc3RsYnJkIF9fdXNlciAqYXJnKQogewotCXN0bGJyZF90CSpicmRwOworCXN0cnVjdCBzdGxicmQJc3RsX2R1bW15YnJkOworCXN0cnVjdCBzdGxicmQJKmJyZHA7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJnN0bF9kdW1teWJyZCwgYXJnLCBzaXplb2Yoc3RsYnJkX3QpKSkKKwlpZiAoY29weV9mcm9tX3VzZXIoJnN0bF9kdW1teWJyZCwgYXJnLCBzaXplb2Yoc3RydWN0IHN0bGJyZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoKHN0bF9kdW1teWJyZC5icmRuciA8IDApIHx8IChzdGxfZHVtbXlicmQuYnJkbnIgPj0gU1RMX01BWEJSRFMpKQorCWlmIChzdGxfZHVtbXlicmQuYnJkbnIgPj0gU1RMX01BWEJSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCWJyZHAgPSBzdGxfYnJkc1tzdGxfZHVtbXlicmQuYnJkbnJdOwogCWlmICghYnJkcCkKLQkJcmV0dXJuKC1FTk9ERVYpOwotCXJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBicmRwLCBzaXplb2Yoc3RsYnJkX3QpKSA/IC1FRkFVTFQgOiAwOworCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gY29weV90b191c2VyKGFyZywgYnJkcCwgc2l6ZW9mKHN0cnVjdCBzdGxicmQpKSA/IC1FRkFVTFQgOiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yOTU2LDE0ICsyNjU4LDExIEBACiAJaW50CWJyZG5yLCByYzsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfbWVtaW9jdGwoaXA9JXgsZnA9JXgsY21kPSV4LGFyZz0leClcbiIsIChpbnQpIGlwLAotCQkoaW50KSBmcCwgY21kLCAoaW50KSBhcmcpOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9tZW1pb2N0bChpcD0lcCxmcD0lcCxjbWQ9JXgsYXJnPSVseClcbiIsIGlwLCBmcCwgY21kLGFyZyk7CiAKIAlicmRuciA9IGltaW5vcihpcCk7CiAJaWYgKGJyZG5yID49IFNUTF9NQVhCUkRTKQotCQlyZXR1cm4oLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCXJjID0gMDsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC0yOTg3LDcgKzI2ODYsNyBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4ocmMpOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBzdGxfb3BzID0gewpAQCAtMzAxNSw1NSArMjcxNCw2IEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgX19pbml0IHN0bF9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZlcnNpb24gJXNcbiIsIHN0bF9kcnZ0aXRsZSwgc3RsX2RydnZlcnNpb24pOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnN0YWxsaW9uX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZicmRfbG9jayk7Ci0KLQlzdGxfaW5pdGJyZHMoKTsKLQotCXN0bF9zZXJpYWwgPSBhbGxvY190dHlfZHJpdmVyKFNUTF9NQVhCUkRTICogU1RMX01BWFBPUlRTKTsKLQlpZiAoIXN0bF9zZXJpYWwpCi0JCXJldHVybiAtMTsKLQotLyoKLSAqCVNldCB1cCBhIGNoYXJhY3RlciBkcml2ZXIgZm9yIHBlciBib2FyZCBzdHVmZi4gVGhpcyBpcyBtYWlubHkgdXNlZAotICoJdG8gZG8gc3RhdHMgaW9jdGxzIG9uIHRoZSBwb3J0cy4KLSAqLwotCWlmIChyZWdpc3Rlcl9jaHJkZXYoU1RMX1NJT01FTU1BSk9SLCAic3RhbGlvbWVtIiwgJnN0bF9mc2lvbWVtKSkKLQkJcHJpbnRrKCJTVEFMTElPTjogZmFpbGVkIHRvIHJlZ2lzdGVyIHNlcmlhbCBib2FyZCBkZXZpY2VcbiIpOwotCi0Jc3RhbGxpb25fY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJzdGFsaW9tZW0iKTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQljbGFzc19kZXZpY2VfY3JlYXRlKHN0YWxsaW9uX2NsYXNzLCBOVUxMLAotCQkJCSAgICBNS0RFVihTVExfU0lPTUVNTUFKT1IsIGkpLCBOVUxMLAotCQkJCSAgICAic3RhbGlvbWVtJWQiLCBpKTsKLQotCXN0bF9zZXJpYWwtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0Jc3RsX3NlcmlhbC0+ZHJpdmVyX25hbWUgPSBzdGxfZHJ2bmFtZTsKLQlzdGxfc2VyaWFsLT5uYW1lID0gInR0eUUiOwotCXN0bF9zZXJpYWwtPm1ham9yID0gU1RMX1NFUklBTE1BSk9SOwotCXN0bF9zZXJpYWwtPm1pbm9yX3N0YXJ0ID0gMDsKLQlzdGxfc2VyaWFsLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKLQlzdGxfc2VyaWFsLT5zdWJ0eXBlID0gU0VSSUFMX1RZUEVfTk9STUFMOwotCXN0bF9zZXJpYWwtPmluaXRfdGVybWlvcyA9IHN0bF9kZWZ0ZXJtaW9zOwotCXN0bF9zZXJpYWwtPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVzsKLQl0dHlfc2V0X29wZXJhdGlvbnMoc3RsX3NlcmlhbCwgJnN0bF9vcHMpOwotCi0JaWYgKHR0eV9yZWdpc3Rlcl9kcml2ZXIoc3RsX3NlcmlhbCkpIHsKLQkJcHV0X3R0eV9kcml2ZXIoc3RsX3NlcmlhbCk7Ci0JCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byByZWdpc3RlciBzZXJpYWwgZHJpdmVyXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgQ0QxNDAwIEhBUkRXQVJFIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTMwNzMsMjEgKzI3MjMsMjEgQEAKICAqCShNYXliZSBzaG91bGQgbWFrZSB0aGlzIGlubGluZS4uLikKICAqLwogCi1zdGF0aWMgaW50IHN0bF9jZDE0MDBnZXRyZWcoc3RscG9ydF90ICpwb3J0cCwgaW50IHJlZ25yKQorc3RhdGljIGludCBzdGxfY2QxNDAwZ2V0cmVnKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHJlZ25yKQogewogCW91dGIoKHJlZ25yICsgcG9ydHAtPnVhcnRhZGRyKSwgcG9ydHAtPmlvYWRkcik7CiAJcmV0dXJuIGluYihwb3J0cC0+aW9hZGRyICsgRVJFR19EQVRBKTsKIH0KIAotc3RhdGljIHZvaWQgc3RsX2NkMTQwMHNldHJlZyhzdGxwb3J0X3QgKnBvcnRwLCBpbnQgcmVnbnIsIGludCB2YWx1ZSkKK3N0YXRpYyB2b2lkIHN0bF9jZDE0MDBzZXRyZWcoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgcmVnbnIsIGludCB2YWx1ZSkKIHsKLQlvdXRiKChyZWduciArIHBvcnRwLT51YXJ0YWRkciksIHBvcnRwLT5pb2FkZHIpOworCW91dGIocmVnbnIgKyBwb3J0cC0+dWFydGFkZHIsIHBvcnRwLT5pb2FkZHIpOwogCW91dGIodmFsdWUsIHBvcnRwLT5pb2FkZHIgKyBFUkVHX0RBVEEpOwogfQogCi1zdGF0aWMgaW50IHN0bF9jZDE0MDB1cGRhdGVyZWcoc3RscG9ydF90ICpwb3J0cCwgaW50IHJlZ25yLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IHN0bF9jZDE0MDB1cGRhdGVyZWcoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgcmVnbnIsIGludCB2YWx1ZSkKIHsKLQlvdXRiKChyZWduciArIHBvcnRwLT51YXJ0YWRkciksIHBvcnRwLT5pb2FkZHIpOworCW91dGIocmVnbnIgKyBwb3J0cC0+dWFydGFkZHIsIHBvcnRwLT5pb2FkZHIpOwogCWlmIChpbmIocG9ydHAtPmlvYWRkciArIEVSRUdfREFUQSkgIT0gdmFsdWUpIHsKIAkJb3V0Yih2YWx1ZSwgcG9ydHAtPmlvYWRkciArIEVSRUdfREFUQSk7CiAJCXJldHVybiAxOwpAQCAtMzEwMywxNiArMjc1MywxNCBAQAogICoJaWRlbnRpY2FsIHdoZW4gZGVhbGluZyB3aXRoIHBvcnRzLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX2NkMTQwMHBhbmVsaW5pdChzdGxicmRfdCAqYnJkcCwgc3RscGFuZWxfdCAqcGFuZWxwKQorc3RhdGljIGludCBzdGxfY2QxNDAwcGFuZWxpbml0KHN0cnVjdCBzdGxicmQgKmJyZHAsIHN0cnVjdCBzdGxwYW5lbCAqcGFuZWxwKQogewogCXVuc2lnbmVkIGludAlnZnJjcjsKIAlpbnQJCWNoaXBtYXNrLCBpLCBqOwogCWludAkJbnJjaGlwcywgdWFydGFkZHIsIGlvYWRkcjsKIAl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3BhbmVsaW5pdChicmRwPSV4LHBhbmVscD0leClcbiIsIChpbnQpIGJyZHAsIChpbnQpIHBhbmVscCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX3BhbmVsaW5pdChicmRwPSVwLHBhbmVscD0lcClcbiIsIGJyZHAsIHBhbmVscCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKIAlCUkRFTkFCTEUocGFuZWxwLT5icmRuciwgcGFuZWxwLT5wYWdlbnIpOwpAQCAtMzEyMiwxMyArMjc3MCwxMiBAQAogICovCiAJY2hpcG1hc2sgPSAwOwogCW5yY2hpcHMgPSBwYW5lbHAtPm5ycG9ydHMgLyBDRDE0MDBfUE9SVFM7Ci0JZm9yIChpID0gMDsgKGkgPCBucmNoaXBzKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yY2hpcHM7IGkrKykgewogCQlpZiAoYnJkcC0+YnJkdHlwZSA9PSBCUkRfRUNIUENJKSB7CiAJCQlvdXRiKChwYW5lbHAtPnBhZ2VuciArIChpID4+IDEpKSwgYnJkcC0+aW9jdHJsKTsKIAkJCWlvYWRkciA9IHBhbmVscC0+aW9iYXNlOwotCQl9IGVsc2UgeworCQl9IGVsc2UKIAkJCWlvYWRkciA9IHBhbmVscC0+aW9iYXNlICsgKEVSRUdfQkFOS1NJWkUgKiAoaSA+PiAxKSk7Ci0JCX0KIAkJdWFydGFkZHIgPSAoaSAmIDB4MDEpID8gMHgwODAgOiAwOwogCQlvdXRiKChHRlJDUiArIHVhcnRhZGRyKSwgaW9hZGRyKTsKIAkJb3V0YigwLCAoaW9hZGRyICsgRVJFR19EQVRBKSk7CkBAIC0zMTM2LDEwICsyNzgzLDEwIEBACiAJCW91dGIoQ0NSX1JFU0VURlVMTCwgKGlvYWRkciArIEVSRUdfREFUQSkpOwogCQlvdXRiKENDUl9SRVNFVEZVTEwsIChpb2FkZHIgKyBFUkVHX0RBVEEpKTsKIAkJb3V0YigoR0ZSQ1IgKyB1YXJ0YWRkciksIGlvYWRkcik7Ci0JCWZvciAoaiA9IDA7IChqIDwgQ0NSX01BWFdBSVQpOyBqKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IENDUl9NQVhXQUlUOyBqKyspCiAJCQlpZiAoKGdmcmNyID0gaW5iKGlvYWRkciArIEVSRUdfREFUQSkpICE9IDApCiAJCQkJYnJlYWs7Ci0JCX0KKwogCQlpZiAoKGogPj0gQ0NSX01BWFdBSVQpIHx8IChnZnJjciA8IDB4NDApIHx8IChnZnJjciA+IDB4NjApKSB7CiAJCQlwcmludGsoIlNUQUxMSU9OOiBjZDE0MDAgbm90IHJlc3BvbmRpbmcsICIKIAkJCQkiYnJkPSVkIHBhbmVsPSVkIGNoaXA9JWRcbiIsCkBAIC0zMTYyLDE2ICsyODA5LDE0IEBACiAgKglJbml0aWFsaXplIGhhcmR3YXJlIHNwZWNpZmljIHBvcnQgcmVnaXN0ZXJzLgogICovCiAKLXN0YXRpYyB2b2lkIHN0bF9jZDE0MDBwb3J0aW5pdChzdGxicmRfdCAqYnJkcCwgc3RscGFuZWxfdCAqcGFuZWxwLCBzdGxwb3J0X3QgKnBvcnRwKQorc3RhdGljIHZvaWQgc3RsX2NkMTQwMHBvcnRpbml0KHN0cnVjdCBzdGxicmQgKmJyZHAsIHN0cnVjdCBzdGxwYW5lbCAqcGFuZWxwLCBzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2NkMTQwMHBvcnRpbml0KGJyZHA9JXgscGFuZWxwPSV4LHBvcnRwPSV4KVxuIiwKLQkJKGludCkgYnJkcCwgKGludCkgcGFuZWxwLCAoaW50KSBwb3J0cCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMHBvcnRpbml0KGJyZHA9JXAscGFuZWxwPSVwLHBvcnRwPSVwKVxuIiwgYnJkcCwKKwkJCXBhbmVscCwgcG9ydHApOwogCi0JaWYgKChicmRwID09IChzdGxicmRfdCAqKSBOVUxMKSB8fCAocGFuZWxwID09IChzdGxwYW5lbF90ICopIE5VTEwpIHx8Ci0JICAgIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpKQorCWlmICgoYnJkcCA9PSBOVUxMKSB8fCAocGFuZWxwID09IE5VTEwpIHx8CisJICAgIChwb3J0cCA9PSBOVUxMKSkKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7CkBAIC0zMTk1LDE1ICsyODQwLDEzIEBACiAgKglzaW5jZSBpdCB3b24ndCB1c3VhbGx5IHRha2UgdG9vIGxvbmcgdG8gYmUgcmVhZHkuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX2NkMTQwMGNjcndhaXQoc3RscG9ydF90ICpwb3J0cCkKK3N0YXRpYyB2b2lkIHN0bF9jZDE0MDBjY3J3YWl0KHN0cnVjdCBzdGxwb3J0ICpwb3J0cCkKIHsKIAlpbnQJaTsKIAotCWZvciAoaSA9IDA7IChpIDwgQ0NSX01BWFdBSVQpOyBpKyspIHsKLQkJaWYgKHN0bF9jZDE0MDBnZXRyZWcocG9ydHAsIENDUikgPT0gMCkgeworCWZvciAoaSA9IDA7IGkgPCBDQ1JfTUFYV0FJVDsgaSsrKQorCQlpZiAoc3RsX2NkMTQwMGdldHJlZyhwb3J0cCwgQ0NSKSA9PSAwKQogCQkJcmV0dXJuOwotCQl9Ci0JfQogCiAJcHJpbnRrKCJTVEFMTElPTjogY2QxNDAwIG5vdCByZXNwb25kaW5nLCBwb3J0PSVkIHBhbmVsPSVkIGJyZD0lZFxuIiwKIAkJcG9ydHAtPnBvcnRuciwgcG9ydHAtPnBhbmVsbnIsIHBvcnRwLT5icmRucik7CkBAIC0zMjE2LDkgKzI4NTksOSBAQAogICoJc2V0dGluZ3MuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX2NkMTQwMHNldHBvcnQoc3RscG9ydF90ICpwb3J0cCwgc3RydWN0IHRlcm1pb3MgKnRpb3NwKQorc3RhdGljIHZvaWQgc3RsX2NkMTQwMHNldHBvcnQoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBzdHJ1Y3Qga3Rlcm1pb3MgKnRpb3NwKQogewotCXN0bGJyZF90CSpicmRwOworCXN0cnVjdCBzdGxicmQJKmJyZHA7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAl1bnNpZ25lZCBpbnQJY2xrZGl2LCBiYXVkcmF0ZTsKIAl1bnNpZ25lZCBjaGFyCWNvcjEsIGNvcjIsIGNvcjM7CkBAIC0zMjQyLDcgKzI4ODUsNyBAQAogCXNyZXJvZmYgPSAwOwogCiAJYnJkcCA9IHN0bF9icmRzW3BvcnRwLT5icmRucl07Ci0JaWYgKGJyZHAgPT0gKHN0bGJyZF90ICopIE5VTEwpCisJaWYgKGJyZHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAvKgpAQCAtMzMzOSw4ICsyOTgyLDggQEAKIAkJYmF1ZHJhdGUgPSBTVExfQ0QxNDAwTUFYQkFVRDsKIAogCWlmIChiYXVkcmF0ZSA+IDApIHsKLQkJZm9yIChjbGsgPSAwOyAoY2xrIDwgQ0QxNDAwX05VTUNMS1MpOyBjbGsrKykgewotCQkJY2xrZGl2ID0gKChwb3J0cC0+Y2xrIC8gc3RsX2NkMTQwMGNsa2RpdnNbY2xrXSkgLyBiYXVkcmF0ZSk7CisJCWZvciAoY2xrID0gMDsgY2xrIDwgQ0QxNDAwX05VTUNMS1M7IGNsaysrKSB7CisJCQljbGtkaXYgPSAocG9ydHAtPmNsayAvIHN0bF9jZDE0MDBjbGtkaXZzW2Nsa10pIC8gYmF1ZHJhdGU7CiAJCQlpZiAoY2xrZGl2IDwgMHgxMDApCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTMzNTUsOSArMjk5OCw4IEBACiAJCW1jb3IyIHw9IE1DT1IyX0RDRDsKIAkJc3Jlcm9uIHw9IFNSRVJfTU9ERU07CiAJCXBvcnRwLT5mbGFncyB8PSBBU1lOQ19DSEVDS19DRDsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlwb3J0cC0+ZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOwotCX0KIAogLyoKICAqCVNldHVwIGNkMTQwMCBlbmhhbmNlZCBtb2RlcyBpZiB3ZSBjYW4uIEluIHBhcnRpY3VsYXIgd2Ugd2FudCB0bwpAQCAtMzM4MiwxOCArMzAyNCwxNiBAQAogICoJdGhlbSBhbGwgdXAuCiAgKi8KIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJTRVRQT1JUOiBwb3J0bnI9JWQgcGFuZWxucj0lZCBicmRucj0lZFxuIiwKKwlwcl9kZWJ1ZygiU0VUUE9SVDogcG9ydG5yPSVkIHBhbmVsbnI9JWQgYnJkbnI9JWRcbiIsCiAJCXBvcnRwLT5wb3J0bnIsIHBvcnRwLT5wYW5lbG5yLCBwb3J0cC0+YnJkbnIpOwotCXByaW50aygiICAgIGNvcjE9JXggY29yMj0leCBjb3IzPSV4IGNvcjQ9JXggY29yNT0leFxuIiwKKwlwcl9kZWJ1ZygiICAgIGNvcjE9JXggY29yMj0leCBjb3IzPSV4IGNvcjQ9JXggY29yNT0leFxuIiwKIAkJY29yMSwgY29yMiwgY29yMywgY29yNCwgY29yNSk7Ci0JcHJpbnRrKCIgICAgbWNvcjE9JXggbWNvcjI9JXggcnRwcj0leCBzcmVyb249JXggc3Jlcm9mZj0leFxuIiwKKwlwcl9kZWJ1ZygiICAgIG1jb3IxPSV4IG1jb3IyPSV4IHJ0cHI9JXggc3Jlcm9uPSV4IHNyZXJvZmY9JXhcbiIsCiAJCW1jb3IxLCBtY29yMiwgcnRwciwgc3Jlcm9uLCBzcmVyb2ZmKTsKLQlwcmludGsoIiAgICB0Y29yPSV4IHRicHI9JXggcmNvcj0leCByYnByPSV4XG4iLCBjbGssIGRpdiwgY2xrLCBkaXYpOwotCXByaW50aygiICAgIHNjaHIxPSV4IHNjaHIyPSV4IHNjaHIzPSV4IHNjaHI0PSV4XG4iLAorCXByX2RlYnVnKCIgICAgdGNvcj0leCB0YnByPSV4IHJjb3I9JXggcmJwcj0leFxuIiwgY2xrLCBkaXYsIGNsaywgZGl2KTsKKwlwcl9kZWJ1ZygiICAgIHNjaHIxPSV4IHNjaHIyPSV4IHNjaHIzPSV4IHNjaHI0PSV4XG4iLAogCQl0aW9zcC0+Y19jY1tWU1RBUlRdLCB0aW9zcC0+Y19jY1tWU1RPUF0sCiAJCXRpb3NwLT5jX2NjW1ZTVEFSVF0sIHRpb3NwLT5jX2NjW1ZTVE9QXSk7Ci0jZW5kaWYKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZicmRfbG9jaywgZmxhZ3MpOwogCUJSREVOQUJMRShwb3J0cC0+YnJkbnIsIHBvcnRwLT5wYWdlbnIpOwpAQCAtMzQ0MSwxNSArMzA4MSwxMyBAQAogICoJU2V0IHRoZSBzdGF0ZSBvZiB0aGUgRFRSIGFuZCBSVFMgc2lnbmFscy4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxfY2QxNDAwc2V0c2lnbmFscyhzdGxwb3J0X3QgKnBvcnRwLCBpbnQgZHRyLCBpbnQgcnRzKQorc3RhdGljIHZvaWQgc3RsX2NkMTQwMHNldHNpZ25hbHMoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgZHRyLCBpbnQgcnRzKQogewogCXVuc2lnbmVkIGNoYXIJbXN2cjEsIG1zdnIyOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2NkMTQwMHNldHNpZ25hbHMocG9ydHA9JXgsZHRyPSVkLHJ0cz0lZClcbiIsCi0JCShpbnQpIHBvcnRwLCBkdHIsIHJ0cyk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMHNldHNpZ25hbHMocG9ydHA9JXAsZHRyPSVkLHJ0cz0lZClcbiIsCisJCQlwb3J0cCwgZHRyLCBydHMpOwogCiAJbXN2cjEgPSAwOwogCW1zdnIyID0gMDsKQEAgLTM0NzUsMTUgKzMxMTMsMTMgQEAKICAqCVJldHVybiB0aGUgc3RhdGUgb2YgdGhlIHNpZ25hbHMuCiAgKi8KIAotc3RhdGljIGludCBzdGxfY2QxNDAwZ2V0c2lnbmFscyhzdGxwb3J0X3QgKnBvcnRwKQorc3RhdGljIGludCBzdGxfY2QxNDAwZ2V0c2lnbmFscyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApCiB7CiAJdW5zaWduZWQgY2hhcgltc3ZyMSwgbXN2cjI7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAlpbnQJCXNpZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2NkMTQwMGdldHNpZ25hbHMocG9ydHA9JXgpXG4iLCAoaW50KSBwb3J0cCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMGdldHNpZ25hbHMocG9ydHA9JXApXG4iLCBwb3J0cCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKIAlCUkRFTkFCTEUocG9ydHAtPmJyZG5yLCBwb3J0cC0+cGFnZW5yKTsKQEAgLTM1MTMsMTUgKzMxNDksMTMgQEAKICAqCUVuYWJsZS9EaXNhYmxlIHRoZSBUcmFuc21pdHRlciBhbmQvb3IgUmVjZWl2ZXIuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX2NkMTQwMGVuYWJsZXJ4dHgoc3RscG9ydF90ICpwb3J0cCwgaW50IHJ4LCBpbnQgdHgpCitzdGF0aWMgdm9pZCBzdGxfY2QxNDAwZW5hYmxlcnh0eChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCByeCwgaW50IHR4KQogewogCXVuc2lnbmVkIGNoYXIJY2NyOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2NkMTQwMGVuYWJsZXJ4dHgocG9ydHA9JXgscng9JWQsdHg9JWQpXG4iLAotCQkoaW50KSBwb3J0cCwgcngsIHR4KTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfY2QxNDAwZW5hYmxlcnh0eChwb3J0cD0lcCxyeD0lZCx0eD0lZClcbiIsIHBvcnRwLCByeCwgdHgpOworCiAJY2NyID0gMDsKIAogCWlmICh0eCA9PSAwKQpAQCAtMzU0OSwxNSArMzE4MywxMiBAQAogICoJU3RhcnQvc3RvcCB0aGUgVHJhbnNtaXR0ZXIgYW5kL29yIFJlY2VpdmVyLgogICovCiAKLXN0YXRpYyB2b2lkIHN0bF9jZDE0MDBzdGFydHJ4dHgoc3RscG9ydF90ICpwb3J0cCwgaW50IHJ4LCBpbnQgdHgpCitzdGF0aWMgdm9pZCBzdGxfY2QxNDAwc3RhcnRyeHR4KHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHJ4LCBpbnQgdHgpCiB7CiAJdW5zaWduZWQgY2hhcglzcmVyb24sIHNyZXJvZmY7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfY2QxNDAwc3RhcnRyeHR4KHBvcnRwPSV4LHJ4PSVkLHR4PSVkKVxuIiwKLQkJKGludCkgcG9ydHAsIHJ4LCB0eCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMHN0YXJ0cnh0eChwb3J0cD0lcCxyeD0lZCx0eD0lZClcbiIsIHBvcnRwLCByeCwgdHgpOwogCiAJc3Jlcm9uID0gMDsKIAlzcmVyb2ZmID0gMDsKQEAgLTM1ODksMTMgKzMyMjAsMTIgQEAKICAqCURpc2FibGUgYWxsIGludGVycnVwdHMgZnJvbSB0aGlzIHBvcnQuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX2NkMTQwMGRpc2FibGVpbnRycyhzdGxwb3J0X3QgKnBvcnRwKQorc3RhdGljIHZvaWQgc3RsX2NkMTQwMGRpc2FibGVpbnRycyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApCiB7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfY2QxNDAwZGlzYWJsZWludHJzKHBvcnRwPSV4KVxuIiwgKGludCkgcG9ydHApOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9jZDE0MDBkaXNhYmxlaW50cnMocG9ydHA9JXApXG4iLCBwb3J0cCk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKIAlCUkRFTkFCTEUocG9ydHAtPmJyZG5yLCBwb3J0cC0+cGFnZW5yKTsKIAlzdGxfY2QxNDAwc2V0cmVnKHBvcnRwLCBDQVIsIChwb3J0cC0+cG9ydG5yICYgMHgwMykpOwpAQCAtMzYwNiwxMyArMzIzNiwxMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN0bF9jZDE0MDBzZW5kYnJlYWsoc3RscG9ydF90ICpwb3J0cCwgaW50IGxlbikKK3N0YXRpYyB2b2lkIHN0bF9jZDE0MDBzZW5kYnJlYWsoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2NkMTQwMHNlbmRicmVhayhwb3J0cD0leCxsZW49JWQpXG4iLCAoaW50KSBwb3J0cCwgbGVuKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfY2QxNDAwc2VuZGJyZWFrKHBvcnRwPSVwLGxlbj0lZClcbiIsIHBvcnRwLCBsZW4pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7CiAJQlJERU5BQkxFKHBvcnRwLT5icmRuciwgcG9ydHAtPnBhZ2Vucik7CkBAIC0zNjMzLDE5ICszMjYxLDE3IEBACiAgKglUYWtlIGZsb3cgY29udHJvbCBhY3Rpb25zLi4uCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX2NkMTQwMGZsb3djdHJsKHN0bHBvcnRfdCAqcG9ydHAsIGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHN0bF9jZDE0MDBmbG93Y3RybChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9jZDE0MDBmbG93Y3RybChwb3J0cD0leCxzdGF0ZT0leClcbiIsIChpbnQpIHBvcnRwLCBzdGF0ZSk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMGZsb3djdHJsKHBvcnRwPSVwLHN0YXRlPSV4KVxuIiwgcG9ydHAsIHN0YXRlKTsKIAotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAl0dHkgPSBwb3J0cC0+dHR5OwotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCisJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKQEAgLTM2OTcsMTkgKzMzMjMsMTcgQEAKICAqCVNlbmQgYSBmbG93IGNvbnRyb2wgY2hhcmFjdGVyLi4uCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX2NkMTQwMHNlbmRmbG93KHN0bHBvcnRfdCAqcG9ydHAsIGludCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHN0bF9jZDE0MDBzZW5kZmxvdyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9jZDE0MDBzZW5kZmxvdyhwb3J0cD0leCxzdGF0ZT0leClcbiIsIChpbnQpIHBvcnRwLCBzdGF0ZSk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMHNlbmRmbG93KHBvcnRwPSVwLHN0YXRlPSV4KVxuIiwgcG9ydHAsIHN0YXRlKTsKIAotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAl0dHkgPSBwb3J0cC0+dHR5OwotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCisJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKQEAgLTM3MzIsMTUgKzMzNTYsMTMgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdGxfY2QxNDAwZmx1c2goc3RscG9ydF90ICpwb3J0cCkKK3N0YXRpYyB2b2lkIHN0bF9jZDE0MDBmbHVzaChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApCiB7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfY2QxNDAwZmx1c2gocG9ydHA9JXgpXG4iLCAoaW50KSBwb3J0cCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMGZsdXNoKHBvcnRwPSVwKVxuIiwgcG9ydHApOwogCi0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7CkBAIC0zNzYzLDEzICszMzg1LDExIEBACiAgKgltYWludGFpbnMgdGhlIGJ1c3kgcG9ydCBmbGFnLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX2NkMTQwMGRhdGFzdGF0ZShzdGxwb3J0X3QgKnBvcnRwKQorc3RhdGljIGludCBzdGxfY2QxNDAwZGF0YXN0YXRlKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCkKIHsKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2NkMTQwMGRhdGFzdGF0ZShwb3J0cD0leClcbiIsIChpbnQpIHBvcnRwKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfY2QxNDAwZGF0YXN0YXRlKHBvcnRwPSVwKVxuIiwgcG9ydHApOwogCi0JaWYgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkKKwlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gdGVzdF9iaXQoQVNZSV9UWEJVU1ksICZwb3J0cC0+aXN0YXRlKSA/IDEgOiAwOwpAQCAtMzc4MSwxNCArMzQwMSwxMSBAQAogICoJSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgY2QxNDAwIEVhc3lJTyBib2FyZHMuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX2NkMTQwMGVpb2ludHIoc3RscGFuZWxfdCAqcGFuZWxwLCB1bnNpZ25lZCBpbnQgaW9iYXNlKQorc3RhdGljIHZvaWQgc3RsX2NkMTQwMGVpb2ludHIoc3RydWN0IHN0bHBhbmVsICpwYW5lbHAsIHVuc2lnbmVkIGludCBpb2Jhc2UpCiB7CiAJdW5zaWduZWQgY2hhcglzdnJ0eXBlOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9jZDE0MDBlaW9pbnRyKHBhbmVscD0leCxpb2Jhc2U9JXgpXG4iLAotCQkoaW50KSBwYW5lbHAsIGlvYmFzZSk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMGVpb2ludHIocGFuZWxwPSVwLGlvYmFzZT0leClcbiIsIHBhbmVscCwgaW9iYXNlKTsKIAogCXNwaW5fbG9jaygmYnJkX2xvY2spOwogCW91dGIoU1ZSUiwgaW9iYXNlKTsKQEAgLTM4MTQsMTQgKzM0MzEsMTEgQEAKICAqCUludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIGNkMTQwMCBwYW5lbHMuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX2NkMTQwMGVjaGludHIoc3RscGFuZWxfdCAqcGFuZWxwLCB1bnNpZ25lZCBpbnQgaW9iYXNlKQorc3RhdGljIHZvaWQgc3RsX2NkMTQwMGVjaGludHIoc3RydWN0IHN0bHBhbmVsICpwYW5lbHAsIHVuc2lnbmVkIGludCBpb2Jhc2UpCiB7CiAJdW5zaWduZWQgY2hhcglzdnJ0eXBlOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9jZDE0MDBlY2hpbnRyKHBhbmVscD0leCxpb2Jhc2U9JXgpXG4iLCAoaW50KSBwYW5lbHAsCi0JCWlvYmFzZSk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMGVjaGludHIocGFuZWxwPSVwLGlvYmFzZT0leClcbiIsIHBhbmVscCwgaW9iYXNlKTsKIAogCW91dGIoU1ZSUiwgaW9iYXNlKTsKIAlzdnJ0eXBlID0gaW5iKGlvYmFzZSArIEVSRUdfREFUQSk7CkBAIC0zODQzLDcgKzM0NTcsNyBAQAogICoJdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZ2VuZXJhdGUgdGhlbSBvbiB0aGUgY2QxNDAwLgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHN0bF9jZDE0MDBicmVha2lzcihzdGxwb3J0X3QgKnBvcnRwLCBpbnQgaW9hZGRyKQorc3RhdGljIGludCBzdGxfY2QxNDAwYnJlYWtpc3Ioc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgaW9hZGRyKQogewogCWlmIChwb3J0cC0+YnJrbGVuID09IDEpIHsKIAkJb3V0YigoQ09SMiArIHBvcnRwLT51YXJ0YWRkciksIGlvYWRkcik7CkBAIC0zODg1LDE2ICszNDk5LDE0IEBACiAgKgliZSBOVUxMIGlmIHRoZSBidWZmZXIgaGFzIGJlZW4gZnJlZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX2NkMTQwMHR4aXNyKHN0bHBhbmVsX3QgKnBhbmVscCwgaW50IGlvYWRkcikKK3N0YXRpYyB2b2lkIHN0bF9jZDE0MDB0eGlzcihzdHJ1Y3Qgc3RscGFuZWwgKnBhbmVscCwgaW50IGlvYWRkcikKIHsKLQlzdGxwb3J0X3QJKnBvcnRwOworCXN0cnVjdCBzdGxwb3J0CSpwb3J0cDsKIAlpbnQJCWxlbiwgc3RsZW47CiAJY2hhcgkJKmhlYWQsICp0YWlsOwogCXVuc2lnbmVkIGNoYXIJaW9hY2ssIHNyZXI7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX2NkMTQwMHR4aXNyKHBhbmVscD0leCxpb2FkZHI9JXgpXG4iLCAoaW50KSBwYW5lbHAsIGlvYWRkcik7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMHR4aXNyKHBhbmVscD0lcCxpb2FkZHI9JXgpXG4iLCBwYW5lbHAsIGlvYWRkcik7CiAKIAlpb2FjayA9IGluYihpb2FkZHIgKyBFUkVHX1RYQUNLKTsKIAlpZiAoKChpb2FjayAmIHBhbmVscC0+YWNrbWFzaykgIT0gMCkgfHwKQEAgLTM5MzMsOSArMzU0NSw5IEBACiAJCX0KIAkJb3V0YihzcmVyLCAoaW9hZGRyICsgRVJFR19EQVRBKSk7CiAJfSBlbHNlIHsKLQkJbGVuID0gTUlOKGxlbiwgQ0QxNDAwX1RYRklGT1NJWkUpOworCQlsZW4gPSBtaW4obGVuLCBDRDE0MDBfVFhGSUZPU0laRSk7CiAJCXBvcnRwLT5zdGF0cy50eHRvdGFsICs9IGxlbjsKLQkJc3RsZW4gPSBNSU4obGVuLCAoKHBvcnRwLT50eC5idWYgKyBTVExfVFhCVUZTSVpFKSAtIHRhaWwpKTsKKwkJc3RsZW4gPSBtaW4obGVuLCAoKHBvcnRwLT50eC5idWYgKyBTVExfVFhCVUZTSVpFKSAtIHRhaWwpKTsKIAkJb3V0YigoVERSICsgcG9ydHAtPnVhcnRhZGRyKSwgaW9hZGRyKTsKIAkJb3V0c2IoKGlvYWRkciArIEVSRUdfREFUQSksIHRhaWwsIHN0bGVuKTsKIAkJbGVuIC09IHN0bGVuOwpAQCAtMzk2NiwxNyArMzU3OCwxNSBAQAogICoJc2h1dGRvd24gYSBwb3J0IG5vdCBpbiB1c2VyIGNvbnRleHQuIE5lZWQgdG8gaGFuZGxlIHRoaXMgY2FzZS4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxfY2QxNDAwcnhpc3Ioc3RscGFuZWxfdCAqcGFuZWxwLCBpbnQgaW9hZGRyKQorc3RhdGljIHZvaWQgc3RsX2NkMTQwMHJ4aXNyKHN0cnVjdCBzdGxwYW5lbCAqcGFuZWxwLCBpbnQgaW9hZGRyKQogewotCXN0bHBvcnRfdAkJKnBvcnRwOworCXN0cnVjdCBzdGxwb3J0CQkqcG9ydHA7CiAJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKIAl1bnNpZ25lZCBpbnQJCWlvYWNrLCBsZW4sIGJ1ZmxlbjsKIAl1bnNpZ25lZCBjaGFyCQlzdGF0dXM7CiAJY2hhcgkJCWNoOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9jZDE0MDByeGlzcihwYW5lbHA9JXgsaW9hZGRyPSV4KVxuIiwgKGludCkgcGFuZWxwLCBpb2FkZHIpOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9jZDE0MDByeGlzcihwYW5lbHA9JXAsaW9hZGRyPSV4KVxuIiwgcGFuZWxwLCBpb2FkZHIpOwogCiAJaW9hY2sgPSBpbmIoaW9hZGRyICsgRVJFR19SWEFDSyk7CiAJaWYgKChpb2FjayAmIHBhbmVscC0+YWNrbWFzaykgIT0gMCkgewpAQCAtMzk5MCwxMyArMzYwMCwxMyBAQAogCQlvdXRiKChSRENSICsgcG9ydHAtPnVhcnRhZGRyKSwgaW9hZGRyKTsKIAkJbGVuID0gaW5iKGlvYWRkciArIEVSRUdfREFUQSk7CiAJCWlmICh0dHkgPT0gTlVMTCB8fCAoYnVmbGVuID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBsZW4pKSA9PSAwKSB7Ci0JCQlsZW4gPSBNSU4obGVuLCBzaXplb2Yoc3RsX3Vud2FudGVkKSk7CisJCQlsZW4gPSBtaW4obGVuLCBzaXplb2Yoc3RsX3Vud2FudGVkKSk7CiAJCQlvdXRiKChSRFNSICsgcG9ydHAtPnVhcnRhZGRyKSwgaW9hZGRyKTsKIAkJCWluc2IoKGlvYWRkciArIEVSRUdfREFUQSksICZzdGxfdW53YW50ZWRbMF0sIGxlbik7CiAJCQlwb3J0cC0+c3RhdHMucnhsb3N0ICs9IGxlbjsKIAkJCXBvcnRwLT5zdGF0cy5yeHRvdGFsICs9IGxlbjsKIAkJfSBlbHNlIHsKLQkJCWxlbiA9IE1JTihsZW4sIGJ1Zmxlbik7CisJCQlsZW4gPSBtaW4obGVuLCBidWZsZW4pOwogCQkJaWYgKGxlbiA+IDApIHsKIAkJCQl1bnNpZ25lZCBjaGFyICpwdHI7CiAJCQkJb3V0YigoUkRTUiArIHBvcnRwLT51YXJ0YWRkciksIGlvYWRkcik7CkBAIC00MDMzLDE4ICszNjQzLDE2IEBACiAJCQkJCQlkb19TQUsodHR5KTsKIAkJCQkJCUJSREVOQUJMRShwb3J0cC0+YnJkbnIsIHBvcnRwLT5wYWdlbnIpOwogCQkJCQl9Ci0JCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBTVF9QQVJJVFkpIHsKKwkJCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFNUX1BBUklUWSkKIAkJCQkJc3RhdHVzID0gVFRZX1BBUklUWTsKLQkJCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFNUX0ZSQU1JTkcpIHsKKwkJCQllbHNlIGlmIChzdGF0dXMgJiBTVF9GUkFNSU5HKQogCQkJCQlzdGF0dXMgPSBUVFlfRlJBTUU7Ci0JCQkJfSBlbHNlIGlmKHN0YXR1cyAmIFNUX09WRVJSVU4pIHsKKwkJCQllbHNlIGlmKHN0YXR1cyAmIFNUX09WRVJSVU4pCiAJCQkJCXN0YXR1cyA9IFRUWV9PVkVSUlVOOwotCQkJCX0gZWxzZSB7CisJCQkJZWxzZQogCQkJCQlzdGF0dXMgPSAwOwotCQkJCX0KLQkJCX0gZWxzZSB7CisJCQl9IGVsc2UKIAkJCQlzdGF0dXMgPSAwOwotCQkJfQogCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgc3RhdHVzKTsKIAkJCXR0eV9zY2hlZHVsZV9mbGlwKHR0eSk7CiAJCX0KQEAgLTQwNjYsMTUgKzM2NzQsMTMgQEAKICAqCXByb2Nlc3Npbmcgcm91dGluZS4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxfY2QxNDAwbWRtaXNyKHN0bHBhbmVsX3QgKnBhbmVscCwgaW50IGlvYWRkcikKK3N0YXRpYyB2b2lkIHN0bF9jZDE0MDBtZG1pc3Ioc3RydWN0IHN0bHBhbmVsICpwYW5lbHAsIGludCBpb2FkZHIpCiB7Ci0Jc3RscG9ydF90CSpwb3J0cDsKKwlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAJdW5zaWduZWQgaW50CWlvYWNrOwogCXVuc2lnbmVkIGNoYXIJbWlzcjsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfY2QxNDAwbWRtaXNyKHBhbmVscD0leClcbiIsIChpbnQpIHBhbmVscCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX2NkMTQwMG1kbWlzcihwYW5lbHA9JXApXG4iLCBwYW5lbHApOwogCiAJaW9hY2sgPSBpbmIoaW9hZGRyICsgRVJFR19NREFDSyk7CiAJaWYgKCgoaW9hY2sgJiBwYW5lbHAtPmFja21hc2spICE9IDApIHx8CkBAIC00MTA2LDE5ICszNzEyLDE5IEBACiAgKgkoTWF5YmUgc2hvdWxkIG1ha2UgdGhpcyBpbmxpbmUuLi4pCiAgKi8KIAotc3RhdGljIGludCBzdGxfc2MyNjE5OGdldHJlZyhzdGxwb3J0X3QgKnBvcnRwLCBpbnQgcmVnbnIpCitzdGF0aWMgaW50IHN0bF9zYzI2MTk4Z2V0cmVnKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHJlZ25yKQogewogCW91dGIoKHJlZ25yIHwgcG9ydHAtPnVhcnRhZGRyKSwgKHBvcnRwLT5pb2FkZHIgKyBYUF9BRERSKSk7CiAJcmV0dXJuIGluYihwb3J0cC0+aW9hZGRyICsgWFBfREFUQSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0bF9zYzI2MTk4c2V0cmVnKHN0bHBvcnRfdCAqcG9ydHAsIGludCByZWduciwgaW50IHZhbHVlKQorc3RhdGljIHZvaWQgc3RsX3NjMjYxOThzZXRyZWcoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgcmVnbnIsIGludCB2YWx1ZSkKIHsKIAlvdXRiKChyZWduciB8IHBvcnRwLT51YXJ0YWRkciksIChwb3J0cC0+aW9hZGRyICsgWFBfQUREUikpOwogCW91dGIodmFsdWUsIChwb3J0cC0+aW9hZGRyICsgWFBfREFUQSkpOwogfQogCi1zdGF0aWMgaW50IHN0bF9zYzI2MTk4dXBkYXRlcmVnKHN0bHBvcnRfdCAqcG9ydHAsIGludCByZWduciwgaW50IHZhbHVlKQorc3RhdGljIGludCBzdGxfc2MyNjE5OHVwZGF0ZXJlZyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCByZWduciwgaW50IHZhbHVlKQogewogCW91dGIoKHJlZ25yIHwgcG9ydHAtPnVhcnRhZGRyKSwgKHBvcnRwLT5pb2FkZHIgKyBYUF9BRERSKSk7CiAJaWYgKGluYihwb3J0cC0+aW9hZGRyICsgWFBfREFUQSkgIT0gdmFsdWUpIHsKQEAgLTQxMzQsMTQgKzM3NDAsMTQgQEAKICAqCUZ1bmN0aW9ucyB0byBnZXQgYW5kIHNldCB0aGUgc2MyNjE5OCBnbG9iYWwgcmVnaXN0ZXJzLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX3NjMjYxOThnZXRnbG9icmVnKHN0bHBvcnRfdCAqcG9ydHAsIGludCByZWducikKK3N0YXRpYyBpbnQgc3RsX3NjMjYxOThnZXRnbG9icmVnKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHJlZ25yKQogewogCW91dGIocmVnbnIsIChwb3J0cC0+aW9hZGRyICsgWFBfQUREUikpOwogCXJldHVybiBpbmIocG9ydHAtPmlvYWRkciArIFhQX0RBVEEpOwogfQogCiAjaWYgMAotc3RhdGljIHZvaWQgc3RsX3NjMjYxOThzZXRnbG9icmVnKHN0bHBvcnRfdCAqcG9ydHAsIGludCByZWduciwgaW50IHZhbHVlKQorc3RhdGljIHZvaWQgc3RsX3NjMjYxOThzZXRnbG9icmVnKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHJlZ25yLCBpbnQgdmFsdWUpCiB7CiAJb3V0YihyZWduciwgKHBvcnRwLT5pb2FkZHIgKyBYUF9BRERSKSk7CiAJb3V0Yih2YWx1ZSwgKHBvcnRwLT5pb2FkZHIgKyBYUF9EQVRBKSk7CkBAIC00MTU2LDE1ICszNzYyLDEyIEBACiAgKglpZGVudGljYWwgd2hlbiBkZWFsaW5nIHdpdGggcG9ydHMuCiAgKi8KIAotc3RhdGljIGludCBzdGxfc2MyNjE5OHBhbmVsaW5pdChzdGxicmRfdCAqYnJkcCwgc3RscGFuZWxfdCAqcGFuZWxwKQorc3RhdGljIGludCBzdGxfc2MyNjE5OHBhbmVsaW5pdChzdHJ1Y3Qgc3RsYnJkICpicmRwLCBzdHJ1Y3Qgc3RscGFuZWwgKnBhbmVscCkKIHsKIAlpbnQJY2hpcG1hc2ssIGk7CiAJaW50CW5yY2hpcHMsIGlvYWRkcjsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfc2MyNjE5OHBhbmVsaW5pdChicmRwPSV4LHBhbmVscD0leClcbiIsCi0JCShpbnQpIGJyZHAsIChpbnQpIHBhbmVscCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX3NjMjYxOThwYW5lbGluaXQoYnJkcD0lcCxwYW5lbHA9JXApXG4iLCBicmRwLCBwYW5lbHApOwogCiAJQlJERU5BQkxFKHBhbmVscC0+YnJkbnIsIHBhbmVscC0+cGFnZW5yKTsKIApAQCAtNDE3Niw3ICszNzc5LDcgQEAKIAlpZiAoYnJkcC0+YnJkdHlwZSA9PSBCUkRfRUNIUENJKQogCQlvdXRiKHBhbmVscC0+cGFnZW5yLCBicmRwLT5pb2N0cmwpOwogCi0JZm9yIChpID0gMDsgKGkgPCBucmNoaXBzKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yY2hpcHM7IGkrKykgewogCQlpb2FkZHIgPSBwYW5lbHAtPmlvYmFzZSArIChpICogNCk7IAogCQlvdXRiKFNDQ1IsIChpb2FkZHIgKyBYUF9BRERSKSk7CiAJCW91dGIoQ1JfUkVTRVRBTEwsIChpb2FkZHIgKyBYUF9EQVRBKSk7CkBAIC00MjA0LDE1ICszODA3LDEzIEBACiAgKglJbml0aWFsaXplIGhhcmR3YXJlIHNwZWNpZmljIHBvcnQgcmVnaXN0ZXJzLgogICovCiAKLXN0YXRpYyB2b2lkIHN0bF9zYzI2MTk4cG9ydGluaXQoc3RsYnJkX3QgKmJyZHAsIHN0bHBhbmVsX3QgKnBhbmVscCwgc3RscG9ydF90ICpwb3J0cCkKK3N0YXRpYyB2b2lkIHN0bF9zYzI2MTk4cG9ydGluaXQoc3RydWN0IHN0bGJyZCAqYnJkcCwgc3RydWN0IHN0bHBhbmVsICpwYW5lbHAsIHN0cnVjdCBzdGxwb3J0ICpwb3J0cCkKIHsKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3NjMjYxOThwb3J0aW5pdChicmRwPSV4LHBhbmVscD0leCxwb3J0cD0leClcbiIsCi0JCShpbnQpIGJyZHAsIChpbnQpIHBhbmVscCwgKGludCkgcG9ydHApOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9zYzI2MTk4cG9ydGluaXQoYnJkcD0lcCxwYW5lbHA9JXAscG9ydHA9JXApXG4iLCBicmRwLAorCQkJcGFuZWxwLCBwb3J0cCk7CiAKLQlpZiAoKGJyZHAgPT0gKHN0bGJyZF90ICopIE5VTEwpIHx8IChwYW5lbHAgPT0gKHN0bHBhbmVsX3QgKikgTlVMTCkgfHwKLQkgICAgKHBvcnRwID09IChzdGxwb3J0X3QgKikgTlVMTCkpCisJaWYgKChicmRwID09IE5VTEwpIHx8IChwYW5lbHAgPT0gTlVMTCkgfHwKKwkgICAgKHBvcnRwID09IE5VTEwpKQogCQlyZXR1cm47CiAKIAlwb3J0cC0+aW9hZGRyID0gcGFuZWxwLT5pb2Jhc2UgKyAoKHBvcnRwLT5wb3J0bnIgPCA4KSA/IDAgOiA0KTsKQEAgLTQyMzIsOSArMzgzMyw5IEBACiAgKglzZXR0aW5ncy4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxfc2MyNjE5OHNldHBvcnQoc3RscG9ydF90ICpwb3J0cCwgc3RydWN0IHRlcm1pb3MgKnRpb3NwKQorc3RhdGljIHZvaWQgc3RsX3NjMjYxOThzZXRwb3J0KHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgc3RydWN0IGt0ZXJtaW9zICp0aW9zcCkKIHsKLQlzdGxicmRfdAkqYnJkcDsKKwlzdHJ1Y3Qgc3RsYnJkCSpicmRwOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdW5zaWduZWQgaW50CWJhdWRyYXRlOwogCXVuc2lnbmVkIGNoYXIJbXIwLCBtcjEsIG1yMiwgY2xrOwpAQCAtNDI0OSw3ICszODUwLDcgQEAKIAlpbXJvZmYgPSAwOwogCiAJYnJkcCA9IHN0bF9icmRzW3BvcnRwLT5icmRucl07Ci0JaWYgKGJyZHAgPT0gKHN0bGJyZF90ICopIE5VTEwpCisJaWYgKGJyZHAgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAvKgpAQCAtNDI5OCw5ICszODk5LDggQEAKIAkJCW1yMSB8PSAoTVIxX1BBUkVOQiB8IE1SMV9QQVJPREQpOwogCQllbHNlCiAJCQltcjEgfD0gKE1SMV9QQVJFTkIgfCBNUjFfUEFSRVZFTik7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJbXIxIHw9IE1SMV9QQVJOT05FOwotCX0KIAogCW1yMSB8PSBNUjFfRVJSQkxPQ0s7CiAKQEAgLTQzNDAsMTIgKzM5NDAsMTAgQEAKIAlpZiAoYmF1ZHJhdGUgPiBTVExfU0MyNjE5OE1BWEJBVUQpCiAJCWJhdWRyYXRlID0gU1RMX1NDMjYxOThNQVhCQVVEOwogCi0JaWYgKGJhdWRyYXRlID4gMCkgewotCQlmb3IgKGNsayA9IDA7IChjbGsgPCBTQzI2MTk4X05SQkFVRFMpOyBjbGsrKykgeworCWlmIChiYXVkcmF0ZSA+IDApCisJCWZvciAoY2xrID0gMDsgY2xrIDwgU0MyNjE5OF9OUkJBVURTOyBjbGsrKykKIAkJCWlmIChiYXVkcmF0ZSA8PSBzYzI2MTk4X2JhdWR0YWJsZVtjbGtdKQogCQkJCWJyZWFrOwotCQl9Ci0JfQogCiAvKgogICoJQ2hlY2sgd2hhdCBmb3JtIG9mIG1vZGVtIHNpZ25hbGluZyBpcyByZXF1aXJlZCBhbmQgc2V0IGl0IHVwLgpAQCAtNDM2Nyw5ICszOTY1LDkgQEAKIAlpZiAodGlvc3AtPmNfaWZsYWcgJiBJWE9OKSB7CiAJCW1yMCB8PSBNUjBfU1dGVFggfCBNUjBfU1dGVDsKIAkJaW1yb24gfD0gSVJfWE9OWE9GRjsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlpbXJvZmYgfD0gSVJfWE9OWE9GRjsKLQl9CisKIAlpZiAodGlvc3AtPmNfaWZsYWcgJiBJWE9GRikKIAkJbXIwIHw9IE1SMF9TV0ZSWDsKIApAQCAtNDM4MywxNSArMzk4MSwxMyBAQAogICoJdGhlbSBhbGwgdXAuCiAgKi8KIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJTRVRQT1JUOiBwb3J0bnI9JWQgcGFuZWxucj0lZCBicmRucj0lZFxuIiwKKwlwcl9kZWJ1ZygiU0VUUE9SVDogcG9ydG5yPSVkIHBhbmVsbnI9JWQgYnJkbnI9JWRcbiIsCiAJCXBvcnRwLT5wb3J0bnIsIHBvcnRwLT5wYW5lbG5yLCBwb3J0cC0+YnJkbnIpOwotCXByaW50aygiICAgIG1yMD0leCBtcjE9JXggbXIyPSV4IGNsaz0leFxuIiwgbXIwLCBtcjEsIG1yMiwgY2xrKTsKLQlwcmludGsoIiAgICBpb3ByPSV4IGltcm9uPSV4IGltcm9mZj0leFxuIiwgaW9wciwgaW1yb24sIGltcm9mZik7Ci0JcHJpbnRrKCIgICAgc2NocjE9JXggc2NocjI9JXggc2NocjM9JXggc2NocjQ9JXhcbiIsCisJcHJfZGVidWcoIiAgICBtcjA9JXggbXIxPSV4IG1yMj0leCBjbGs9JXhcbiIsIG1yMCwgbXIxLCBtcjIsIGNsayk7CisJcHJfZGVidWcoIiAgICBpb3ByPSV4IGltcm9uPSV4IGltcm9mZj0leFxuIiwgaW9wciwgaW1yb24sIGltcm9mZik7CisJcHJfZGVidWcoIiAgICBzY2hyMT0leCBzY2hyMj0leCBzY2hyMz0leCBzY2hyND0leFxuIiwKIAkJdGlvc3AtPmNfY2NbVlNUQVJUXSwgdGlvc3AtPmNfY2NbVlNUT1BdLAogCQl0aW9zcC0+Y19jY1tWU1RBUlRdLCB0aW9zcC0+Y19jY1tWU1RPUF0pOwotI2VuZGlmCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKIAlCUkRFTkFCTEUocG9ydHAtPmJyZG5yLCBwb3J0cC0+cGFnZW5yKTsKQEAgLTQ0MjksMTUgKzQwMjUsMTMgQEAKICAqCVNldCB0aGUgc3RhdGUgb2YgdGhlIERUUiBhbmQgUlRTIHNpZ25hbHMuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX3NjMjYxOThzZXRzaWduYWxzKHN0bHBvcnRfdCAqcG9ydHAsIGludCBkdHIsIGludCBydHMpCitzdGF0aWMgdm9pZCBzdGxfc2MyNjE5OHNldHNpZ25hbHMoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgZHRyLCBpbnQgcnRzKQogewogCXVuc2lnbmVkIGNoYXIJaW9waW9yb24sIGlvcGlvcm9mZjsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9zYzI2MTk4c2V0c2lnbmFscyhwb3J0cD0leCxkdHI9JWQscnRzPSVkKVxuIiwKLQkJKGludCkgcG9ydHAsIGR0ciwgcnRzKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfc2MyNjE5OHNldHNpZ25hbHMocG9ydHA9JXAsZHRyPSVkLHJ0cz0lZClcbiIsIHBvcnRwLAorCQkJZHRyLCBydHMpOwogCiAJaW9waW9yb24gPSAwOwogCWlvcGlvcm9mZiA9IDA7CkBAIC00NDY0LDE1ICs0MDU4LDEzIEBACiAgKglSZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSBzaWduYWxzLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX3NjMjYxOThnZXRzaWduYWxzKHN0bHBvcnRfdCAqcG9ydHApCitzdGF0aWMgaW50IHN0bF9zYzI2MTk4Z2V0c2lnbmFscyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApCiB7CiAJdW5zaWduZWQgY2hhcglpcHI7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAlpbnQJCXNpZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3NjMjYxOThnZXRzaWduYWxzKHBvcnRwPSV4KVxuIiwgKGludCkgcG9ydHApOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9zYzI2MTk4Z2V0c2lnbmFscyhwb3J0cD0lcClcbiIsIHBvcnRwKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZicmRfbG9jaywgZmxhZ3MpOwogCUJSREVOQUJMRShwb3J0cC0+YnJkbnIsIHBvcnRwLT5wYWdlbnIpOwpAQCAtNDQ5NSwxNSArNDA4NywxMiBAQAogICoJRW5hYmxlL0Rpc2FibGUgdGhlIFRyYW5zbWl0dGVyIGFuZC9vciBSZWNlaXZlci4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxfc2MyNjE5OGVuYWJsZXJ4dHgoc3RscG9ydF90ICpwb3J0cCwgaW50IHJ4LCBpbnQgdHgpCitzdGF0aWMgdm9pZCBzdGxfc2MyNjE5OGVuYWJsZXJ4dHgoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgcngsIGludCB0eCkKIHsKIAl1bnNpZ25lZCBjaGFyCWNjcjsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9zYzI2MTk4ZW5hYmxlcnh0eChwb3J0cD0leCxyeD0lZCx0eD0lZClcbiIsCi0JCShpbnQpIHBvcnRwLCByeCwgdHgpOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9zYzI2MTk4ZW5hYmxlcnh0eChwb3J0cD0lcCxyeD0lZCx0eD0lZClcbiIsIHBvcnRwLCByeCx0eCk7CiAKIAljY3IgPSBwb3J0cC0+Y3JlbmFibGU7CiAJaWYgKHR4ID09IDApCkBAIC00NTI5LDE1ICs0MTE4LDEyIEBACiAgKglTdGFydC9zdG9wIHRoZSBUcmFuc21pdHRlciBhbmQvb3IgUmVjZWl2ZXIuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX3NjMjYxOThzdGFydHJ4dHgoc3RscG9ydF90ICpwb3J0cCwgaW50IHJ4LCBpbnQgdHgpCitzdGF0aWMgdm9pZCBzdGxfc2MyNjE5OHN0YXJ0cnh0eChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCByeCwgaW50IHR4KQogewogCXVuc2lnbmVkIGNoYXIJaW1yOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3NjMjYxOThzdGFydHJ4dHgocG9ydHA9JXgscng9JWQsdHg9JWQpXG4iLAotCQkoaW50KSBwb3J0cCwgcngsIHR4KTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfc2MyNjE5OHN0YXJ0cnh0eChwb3J0cD0lcCxyeD0lZCx0eD0lZClcbiIsIHBvcnRwLCByeCwgdHgpOwogCiAJaW1yID0gcG9ydHAtPmltcjsKIAlpZiAodHggPT0gMCkKQEAgLTQ1NjUsMTMgKzQxNTEsMTEgQEAKICAqCURpc2FibGUgYWxsIGludGVycnVwdHMgZnJvbSB0aGlzIHBvcnQuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX3NjMjYxOThkaXNhYmxlaW50cnMoc3RscG9ydF90ICpwb3J0cCkKK3N0YXRpYyB2b2lkIHN0bF9zYzI2MTk4ZGlzYWJsZWludHJzKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCkKIHsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9zYzI2MTk4ZGlzYWJsZWludHJzKHBvcnRwPSV4KVxuIiwgKGludCkgcG9ydHApOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9zYzI2MTk4ZGlzYWJsZWludHJzKHBvcnRwPSVwKVxuIiwgcG9ydHApOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7CiAJQlJERU5BQkxFKHBvcnRwLT5icmRuciwgcG9ydHAtPnBhZ2Vucik7CkBAIC00NTgzLDIyICs0MTY3LDIwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgc3RsX3NjMjYxOThzZW5kYnJlYWsoc3RscG9ydF90ICpwb3J0cCwgaW50IGxlbikKK3N0YXRpYyB2b2lkIHN0bF9zYzI2MTk4c2VuZGJyZWFrKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9zYzI2MTk4c2VuZGJyZWFrKHBvcnRwPSV4LGxlbj0lZClcbiIsIChpbnQpIHBvcnRwLCBsZW4pOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9zYzI2MTk4c2VuZGJyZWFrKHBvcnRwPSVwLGxlbj0lZClcbiIsIHBvcnRwLCBsZW4pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJyZF9sb2NrLCBmbGFncyk7CiAJQlJERU5BQkxFKHBvcnRwLT5icmRuciwgcG9ydHAtPnBhZ2Vucik7CiAJaWYgKGxlbiA9PSAxKSB7CiAJCXN0bF9zYzI2MTk4c2V0cmVnKHBvcnRwLCBTQ0NSLCBDUl9UWFNUQVJUQlJFQUspOwogCQlwb3J0cC0+c3RhdHMudHhicmVha3MrKzsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlzdGxfc2MyNjE5OHNldHJlZyhwb3J0cCwgU0NDUiwgQ1JfVFhTVE9QQlJFQUspOwotCX0KKwogCUJSRERJU0FCTEUocG9ydHAtPmJyZG5yKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicmRfbG9jaywgZmxhZ3MpOwogfQpAQCAtNDYwOSwyMCArNDE5MSwxOCBAQAogICoJVGFrZSBmbG93IGNvbnRyb2wgYWN0aW9ucy4uLgogICovCiAKLXN0YXRpYyB2b2lkIHN0bF9zYzI2MTk4Zmxvd2N0cmwoc3RscG9ydF90ICpwb3J0cCwgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgc3RsX3NjMjYxOThmbG93Y3RybChzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXVuc2lnbmVkIGNoYXIJCW1yMDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfc2MyNjE5OGZsb3djdHJsKHBvcnRwPSV4LHN0YXRlPSV4KVxuIiwgKGludCkgcG9ydHAsIHN0YXRlKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfc2MyNjE5OGZsb3djdHJsKHBvcnRwPSVwLHN0YXRlPSV4KVxuIiwgcG9ydHAsIHN0YXRlKTsKIAotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAl0dHkgPSBwb3J0cC0+dHR5OwotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCisJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKQEAgLTQ2ODAsMjAgKzQyNjAsMTggQEAKICAqCVNlbmQgYSBmbG93IGNvbnRyb2wgY2hhcmFjdGVyLgogICovCiAKLXN0YXRpYyB2b2lkIHN0bF9zYzI2MTk4c2VuZGZsb3coc3RscG9ydF90ICpwb3J0cCwgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgc3RsX3NjMjYxOThzZW5kZmxvdyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXVuc2lnbmVkIGNoYXIJCW1yMDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfc2MyNjE5OHNlbmRmbG93KHBvcnRwPSV4LHN0YXRlPSV4KVxuIiwgKGludCkgcG9ydHAsIHN0YXRlKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfc2MyNjE5OHNlbmRmbG93KHBvcnRwPSVwLHN0YXRlPSV4KVxuIiwgcG9ydHAsIHN0YXRlKTsKIAotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAl0dHkgPSBwb3J0cC0+dHR5OwotCWlmICh0dHkgPT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpCisJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnJkX2xvY2ssIGZsYWdzKTsKQEAgLTQ3MjEsMTUgKzQyOTksMTMgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzdGxfc2MyNjE5OGZsdXNoKHN0bHBvcnRfdCAqcG9ydHApCitzdGF0aWMgdm9pZCBzdGxfc2MyNjE5OGZsdXNoKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCkKIHsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9zYzI2MTk4Zmx1c2gocG9ydHA9JXgpXG4iLCAoaW50KSBwb3J0cCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX3NjMjYxOThmbHVzaChwb3J0cD0lcClcbiIsIHBvcnRwKTsKIAotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZicmRfbG9jaywgZmxhZ3MpOwpAQCAtNDc1MSwxNiArNDMyNywxNCBAQAogICoJY2hlY2sgdGhlIHBvcnQgc3RhdHVzeSByZWdpc3RlciB0byBiZSBzdXJlLgogICovCiAKLXN0YXRpYyBpbnQgc3RsX3NjMjYxOThkYXRhc3RhdGUoc3RscG9ydF90ICpwb3J0cCkKK3N0YXRpYyBpbnQgc3RsX3NjMjYxOThkYXRhc3RhdGUoc3RydWN0IHN0bHBvcnQgKnBvcnRwKQogewogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdW5zaWduZWQgY2hhcglzcjsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJzdGxfc2MyNjE5OGRhdGFzdGF0ZShwb3J0cD0leClcbiIsIChpbnQpIHBvcnRwKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfc2MyNjE5OGRhdGFzdGF0ZShwb3J0cD0lcClcbiIsIHBvcnRwKTsKIAotCWlmIChwb3J0cCA9PSAoc3RscG9ydF90ICopIE5VTEwpCisJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybiAwOwogCWlmICh0ZXN0X2JpdChBU1lJX1RYQlVTWSwgJnBvcnRwLT5pc3RhdGUpKQogCQlyZXR1cm4gMTsKQEAgLTQ3ODEsMTggKzQzNTUsMTYgQEAKICAqCXRvIHByb2Nlc3MgYSBjb21tYW5kLi4uCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX3NjMjYxOTh3YWl0KHN0bHBvcnRfdCAqcG9ydHApCitzdGF0aWMgdm9pZCBzdGxfc2MyNjE5OHdhaXQoc3RydWN0IHN0bHBvcnQgKnBvcnRwKQogewogCWludAlpOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9zYzI2MTk4d2FpdChwb3J0cD0leClcbiIsIChpbnQpIHBvcnRwKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfc2MyNjE5OHdhaXQocG9ydHA9JXApXG4iLCBwb3J0cCk7CiAKLQlpZiAocG9ydHAgPT0gKHN0bHBvcnRfdCAqKSBOVUxMKQorCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyAoaSA8IDIwKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKQogCQlzdGxfc2MyNjE5OGdldGdsb2JyZWcocG9ydHAsIFRTVFIpOwogfQogCkBAIC00ODA0LDcgKzQzNzYsNyBAQAogICoJYXV0b21hdGljIGZsb3cgY29udHJvbCBtb2RlcyBvZiB0aGUgc2MyNjE5OC4KICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RsX3NjMjYxOTh0eHVuZmxvdyhzdGxwb3J0X3QgKnBvcnRwLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIHZvaWQgc3RsX3NjMjYxOTh0eHVuZmxvdyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJdW5zaWduZWQgY2hhcgltcjA7CiAKQEAgLTQ4MjIsOSArNDM5NCw5IEBACiAgKglJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBzYzI2MTk4IHBhbmVscy4KICAqLwogCi1zdGF0aWMgdm9pZCBzdGxfc2MyNjE5OGludHIoc3RscGFuZWxfdCAqcGFuZWxwLCB1bnNpZ25lZCBpbnQgaW9iYXNlKQorc3RhdGljIHZvaWQgc3RsX3NjMjYxOThpbnRyKHN0cnVjdCBzdGxwYW5lbCAqcGFuZWxwLCB1bnNpZ25lZCBpbnQgaW9iYXNlKQogewotCXN0bHBvcnRfdAkqcG9ydHA7CisJc3RydWN0IHN0bHBvcnQJKnBvcnRwOwogCXVuc2lnbmVkIGludAlpYWNrOwogCiAJc3Bpbl9sb2NrKCZicmRfbG9jayk7CkBAIC00ODYwLDE2ICs0NDMyLDE0IEBACiAgKgliZSBOVUxMIGlmIHRoZSBidWZmZXIgaGFzIGJlZW4gZnJlZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX3NjMjYxOTh0eGlzcihzdGxwb3J0X3QgKnBvcnRwKQorc3RhdGljIHZvaWQgc3RsX3NjMjYxOTh0eGlzcihzdHJ1Y3Qgc3RscG9ydCAqcG9ydHApCiB7CiAJdW5zaWduZWQgaW50CWlvYWRkcjsKIAl1bnNpZ25lZCBjaGFyCW1yMDsKIAlpbnQJCWxlbiwgc3RsZW47CiAJY2hhcgkJKmhlYWQsICp0YWlsOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9zYzI2MTk4dHhpc3IocG9ydHA9JXgpXG4iLCAoaW50KSBwb3J0cCk7Ci0jZW5kaWYKKwlwcl9kZWJ1Zygic3RsX3NjMjYxOTh0eGlzcihwb3J0cD0lcClcbiIsIHBvcnRwKTsKIAogCWlvYWRkciA9IHBvcnRwLT5pb2FkZHI7CiAJaGVhZCA9IHBvcnRwLT50eC5oZWFkOwpAQCAtNDg5NCw5ICs0NDY0LDkgQEAKIAkJCW91dGIobXIwLCAoaW9hZGRyICsgWFBfREFUQSkpOwogCQl9CiAJfSBlbHNlIHsKLQkJbGVuID0gTUlOKGxlbiwgU0MyNjE5OF9UWEZJRk9TSVpFKTsKKwkJbGVuID0gbWluKGxlbiwgU0MyNjE5OF9UWEZJRk9TSVpFKTsKIAkJcG9ydHAtPnN0YXRzLnR4dG90YWwgKz0gbGVuOwotCQlzdGxlbiA9IE1JTihsZW4sICgocG9ydHAtPnR4LmJ1ZiArIFNUTF9UWEJVRlNJWkUpIC0gdGFpbCkpOworCQlzdGxlbiA9IG1pbihsZW4sICgocG9ydHAtPnR4LmJ1ZiArIFNUTF9UWEJVRlNJWkUpIC0gdGFpbCkpOwogCQlvdXRiKEdUWEZJRk8sIChpb2FkZHIgKyBYUF9BRERSKSk7CiAJCW91dHNiKChpb2FkZHIgKyBYUF9EQVRBKSwgdGFpbCwgc3RsZW4pOwogCQlsZW4gLT0gc3RsZW47CkBAIC00OTIzLDE0ICs0NDkzLDEyIEBACiAgKglzaHV0ZG93biBhIHBvcnQgbm90IGluIHVzZXIgY29udGV4dC4gTmVlZCB0byBoYW5kbGUgdGhpcyBjYXNlLgogICovCiAKLXN0YXRpYyB2b2lkIHN0bF9zYzI2MTk4cnhpc3Ioc3RscG9ydF90ICpwb3J0cCwgdW5zaWduZWQgaW50IGlhY2spCitzdGF0aWMgdm9pZCBzdGxfc2MyNjE5OHJ4aXNyKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgdW5zaWduZWQgaW50IGlhY2spCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKIAl1bnNpZ25lZCBpbnQJCWxlbiwgYnVmbGVuLCBpb2FkZHI7CiAKLSNpZmRlZiBERUJVRwotCXByaW50aygic3RsX3NjMjYxOThyeGlzcihwb3J0cD0leCxpYWNrPSV4KVxuIiwgKGludCkgcG9ydHAsIGlhY2spOwotI2VuZGlmCisJcHJfZGVidWcoInN0bF9zYzI2MTk4cnhpc3IocG9ydHA9JXAsaWFjaz0leClcbiIsIHBvcnRwLCBpYWNrKTsKIAogCXR0eSA9IHBvcnRwLT50dHk7CiAJaW9hZGRyID0gcG9ydHAtPmlvYWRkcjsKQEAgLTQ5MzksMTMgKzQ1MDcsMTMgQEAKIAogCWlmICgoaWFjayAmIElWUl9UWVBFTUFTSykgPT0gSVZSX1JYREFUQSkgewogCQlpZiAodHR5ID09IE5VTEwgfHwgKGJ1ZmxlbiA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgbGVuKSkgPT0gMCkgewotCQkJbGVuID0gTUlOKGxlbiwgc2l6ZW9mKHN0bF91bndhbnRlZCkpOworCQkJbGVuID0gbWluKGxlbiwgc2l6ZW9mKHN0bF91bndhbnRlZCkpOwogCQkJb3V0YihHUlhGSUZPLCAoaW9hZGRyICsgWFBfQUREUikpOwogCQkJaW5zYigoaW9hZGRyICsgWFBfREFUQSksICZzdGxfdW53YW50ZWRbMF0sIGxlbik7CiAJCQlwb3J0cC0+c3RhdHMucnhsb3N0ICs9IGxlbjsKIAkJCXBvcnRwLT5zdGF0cy5yeHRvdGFsICs9IGxlbjsKIAkJfSBlbHNlIHsKLQkJCWxlbiA9IE1JTihsZW4sIGJ1Zmxlbik7CisJCQlsZW4gPSBtaW4obGVuLCBidWZsZW4pOwogCQkJaWYgKGxlbiA+IDApIHsKIAkJCQl1bnNpZ25lZCBjaGFyICpwdHI7CiAJCQkJb3V0YihHUlhGSUZPLCAoaW9hZGRyICsgWFBfQUREUikpOwpAQCAtNDk2NSw4ICs0NTMzLDggQEAKICAqCWZsb3cgY29udHJvbCBtb2RlcyBvZiB0aGUgc2MyNjE5OC4KICAqLwogCWlmICh0ZXN0X2JpdChBU1lJX1RYRkxPV0VELCAmcG9ydHAtPmlzdGF0ZSkpIHsKLQkJaWYgKCh0dHkgIT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpICYmCi0JCSAgICAodHR5LT50ZXJtaW9zICE9IChzdHJ1Y3QgdGVybWlvcyAqKSBOVUxMKSAmJgorCQlpZiAoKHR0eSAhPSBOVUxMKSAmJgorCQkgICAgKHR0eS0+dGVybWlvcyAhPSBOVUxMKSAmJgogCQkgICAgKHR0eS0+dGVybWlvcy0+Y19pZmxhZyAmIElYQU5ZKSkgewogCQkJc3RsX3NjMjYxOTh0eHVuZmxvdyhwb3J0cCwgdHR5KTsKIAkJfQpAQCAtNDk3OSw3ICs0NTQ3LDcgQEAKICAqCVByb2Nlc3MgYW4gUlggYmFkIGNoYXJhY3Rlci4KICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RsX3NjMjYxOThyeGJhZGNoKHN0bHBvcnRfdCAqcG9ydHAsIHVuc2lnbmVkIGNoYXIgc3RhdHVzLCBjaGFyIGNoKQorc3RhdGljIHZvaWQgc3RsX3NjMjYxOThyeGJhZGNoKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgdW5zaWduZWQgY2hhciBzdGF0dXMsIGNoYXIgY2gpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKIAl1bnNpZ25lZCBpbnQJCWlvYWRkcjsKQEAgLTQ5OTYsNyArNDU2NCw3IEBACiAJaWYgKHN0YXR1cyAmIFNSX1JYQlJFQUspCiAJCXBvcnRwLT5zdGF0cy5yeGJyZWFrcysrOwogCi0JaWYgKCh0dHkgIT0gKHN0cnVjdCB0dHlfc3RydWN0ICopIE5VTEwpICYmCisJaWYgKCh0dHkgIT0gTlVMTCkgJiYKIAkgICAgKChwb3J0cC0+cnhpZ25vcmVtc2sgJiBzdGF0dXMpID09IDApKSB7CiAJCWlmIChwb3J0cC0+cnhtYXJrbXNrICYgc3RhdHVzKSB7CiAJCQlpZiAoc3RhdHVzICYgU1JfUlhCUkVBSykgewpAQCAtNTAwNSwxOCArNDU3MywxNiBAQAogCQkJCQlkb19TQUsodHR5KTsKIAkJCQkJQlJERU5BQkxFKHBvcnRwLT5icmRuciwgcG9ydHAtPnBhZ2Vucik7CiAJCQkJfQotCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBTUl9SWFBBUklUWSkgeworCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBTUl9SWFBBUklUWSkKIAkJCQlzdGF0dXMgPSBUVFlfUEFSSVRZOwotCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBTUl9SWEZSQU1JTkcpIHsKKwkJCWVsc2UgaWYgKHN0YXR1cyAmIFNSX1JYRlJBTUlORykKIAkJCQlzdGF0dXMgPSBUVFlfRlJBTUU7Ci0JCQl9IGVsc2UgaWYoc3RhdHVzICYgU1JfUlhPVkVSUlVOKSB7CisJCQllbHNlIGlmKHN0YXR1cyAmIFNSX1JYT1ZFUlJVTikKIAkJCQlzdGF0dXMgPSBUVFlfT1ZFUlJVTjsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJc3RhdHVzID0gMDsKLQkJCX0KLQkJfSBlbHNlIHsKKwkJfSBlbHNlCiAJCQlzdGF0dXMgPSAwOwotCQl9CiAKIAkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgc3RhdHVzKTsKIAkJdHR5X3NjaGVkdWxlX2ZsaXAodHR5KTsKQEAgLTUwMzcsNyArNDYwMyw3IEBACiAgKgl0aGUgRklGTykuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX3NjMjYxOThyeGJhZGNoYXJzKHN0bHBvcnRfdCAqcG9ydHApCitzdGF0aWMgdm9pZCBzdGxfc2MyNjE5OHJ4YmFkY2hhcnMoc3RydWN0IHN0bHBvcnQgKnBvcnRwKQogewogCXVuc2lnbmVkIGNoYXIJc3RhdHVzLCBtcjE7CiAJY2hhcgkJY2g7CkBAIC01MDcwLDEzICs0NjM2LDExIEBACiAgKglwcm9jZXNzaW5nIHRpbWUuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsX3NjMjYxOThvdGhlcmlzcihzdGxwb3J0X3QgKnBvcnRwLCB1bnNpZ25lZCBpbnQgaWFjaykKK3N0YXRpYyB2b2lkIHN0bF9zYzI2MTk4b3RoZXJpc3Ioc3RydWN0IHN0bHBvcnQgKnBvcnRwLCB1bnNpZ25lZCBpbnQgaWFjaykKIHsKIAl1bnNpZ25lZCBjaGFyCWNpciwgaXByLCB4aXNyOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoInN0bF9zYzI2MTk4b3RoZXJpc3IocG9ydHA9JXgsaWFjaz0leClcbiIsIChpbnQpIHBvcnRwLCBpYWNrKTsKLSNlbmRpZgorCXByX2RlYnVnKCJzdGxfc2MyNjE5OG90aGVyaXNyKHBvcnRwPSVwLGlhY2s9JXgpXG4iLCBwb3J0cCwgaWFjayk7CiAKIAljaXIgPSBzdGxfc2MyNjE5OGdldGdsb2JyZWcocG9ydHAsIENJUik7CiAKQEAgLTUxMDksNCArNDY3MywxNzIgQEAKIAl9CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHN0bF9mcmVlX2lzYWJyZHModm9pZCkKK3sKKwlzdHJ1Y3Qgc3RsYnJkICpicmRwOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN0bF9ucmJyZHM7IGkrKykgeworCQlpZiAoKGJyZHAgPSBzdGxfYnJkc1tpXSkgPT0gTlVMTCB8fCAoYnJkcC0+c3RhdGUgJiBTVExfUFJPQkVEKSkKKwkJCWNvbnRpbnVlOworCisJCWZyZWVfaXJxKGJyZHAtPmlycSwgYnJkcCk7CisKKwkJc3RsX2NsZWFudXBfcGFuZWxzKGJyZHApOworCisJCXJlbGVhc2VfcmVnaW9uKGJyZHAtPmlvYWRkcjEsIGJyZHAtPmlvc2l6ZTEpOworCQlpZiAoYnJkcC0+aW9zaXplMiA+IDApCisJCQlyZWxlYXNlX3JlZ2lvbihicmRwLT5pb2FkZHIyLCBicmRwLT5pb3NpemUyKTsKKworCQlrZnJlZShicmRwKTsKKwkJc3RsX2JyZHNbaV0gPSBOVUxMOworCX0KK30KKworLyoKKyAqCUxvYWRhYmxlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBzdHVmZi4KKyAqLworc3RhdGljIGludCBfX2luaXQgc3RhbGxpb25fbW9kdWxlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RsYnJkCSpicmRwOworCXN0cnVjdCBzdGxjb25mCWNvbmY7CisJdW5zaWduZWQgaW50IGksIGo7CisJaW50IHJldHZhbDsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiB2ZXJzaW9uICVzXG4iLCBzdGxfZHJ2dGl0bGUsIHN0bF9kcnZ2ZXJzaW9uKTsKKworCXNwaW5fbG9ja19pbml0KCZzdGFsbGlvbl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYnJkX2xvY2spOworCisvKgorICoJRmluZCBhbnkgZHluYW1pY2FsbHkgc3VwcG9ydGVkIGJvYXJkcy4gVGhhdCBpcyB2aWEgbW9kdWxlIGxvYWQKKyAqCWxpbmUgb3B0aW9ucy4KKyAqLworCWZvciAoaSA9IHN0bF9ucmJyZHM7IGkgPCBzdGxfbmFyZ3M7IGkrKykgeworCQltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihjb25mKSk7CisJCWlmIChzdGxfcGFyc2VicmQoJmNvbmYsIHN0bF9icmRzcFtpXSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGJyZHAgPSBzdGxfYWxsb2NicmQoKSkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlicmRwLT5icmRuciA9IGk7CisJCWJyZHAtPmJyZHR5cGUgPSBjb25mLmJyZHR5cGU7CisJCWJyZHAtPmlvYWRkcjEgPSBjb25mLmlvYWRkcjE7CisJCWJyZHAtPmlvYWRkcjIgPSBjb25mLmlvYWRkcjI7CisJCWJyZHAtPmlycSA9IGNvbmYuaXJxOworCQlicmRwLT5pcnF0eXBlID0gY29uZi5pcnF0eXBlOworCQlpZiAoc3RsX2JyZGluaXQoYnJkcCkpCisJCQlrZnJlZShicmRwKTsKKwkJZWxzZSB7CisJCQlmb3IgKGogPSAwOyBqIDwgYnJkcC0+bnJwb3J0czsgaisrKQorCQkJCXR0eV9yZWdpc3Rlcl9kZXZpY2Uoc3RsX3NlcmlhbCwKKwkJCQkJYnJkcC0+YnJkbnIgKiBTVExfTUFYUE9SVFMgKyBqLCBOVUxMKTsKKwkJCXN0bF9icmRzW2JyZHAtPmJyZG5yXSA9IGJyZHA7CisJCQlzdGxfbnJicmRzID0gaSArIDE7CisJCX0KKwl9CisKKwkvKiB0aGlzIGhhcyB0byBiZSBfYWZ0ZXJfIGlzYSBmaW5kaW5nIGJlY2F1c2Ugb2YgbG9ja2luZyAqLworCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnN0bF9wY2lkcml2ZXIpOworCWlmIChyZXR2YWwgJiYgc3RsX25yYnJkcyA9PSAwKQorCQlnb3RvIGVycjsKKworCXN0bF9zZXJpYWwgPSBhbGxvY190dHlfZHJpdmVyKFNUTF9NQVhCUkRTICogU1RMX01BWFBPUlRTKTsKKwlpZiAoIXN0bF9zZXJpYWwpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfcGNpZHI7CisJfQorCisvKgorICoJU2V0IHVwIGEgY2hhcmFjdGVyIGRyaXZlciBmb3IgcGVyIGJvYXJkIHN0dWZmLiBUaGlzIGlzIG1haW5seSB1c2VkCisgKgl0byBkbyBzdGF0cyBpb2N0bHMgb24gdGhlIHBvcnRzLgorICovCisJaWYgKHJlZ2lzdGVyX2NocmRldihTVExfU0lPTUVNTUFKT1IsICJzdGFsaW9tZW0iLCAmc3RsX2ZzaW9tZW0pKQorCQlwcmludGsoIlNUQUxMSU9OOiBmYWlsZWQgdG8gcmVnaXN0ZXIgc2VyaWFsIGJvYXJkIGRldmljZVxuIik7CisKKwlzdGFsbGlvbl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInN0YWxpb21lbSIpOworCWlmIChJU19FUlIoc3RhbGxpb25fY2xhc3MpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIoc3RhbGxpb25fY2xhc3MpOworCQlnb3RvIGVycl9yZWc7CisJfQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWNsYXNzX2RldmljZV9jcmVhdGUoc3RhbGxpb25fY2xhc3MsIE5VTEwsCisJCQkJICAgIE1LREVWKFNUTF9TSU9NRU1NQUpPUiwgaSksIE5VTEwsCisJCQkJICAgICJzdGFsaW9tZW0lZCIsIGkpOworCisJc3RsX3NlcmlhbC0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlzdGxfc2VyaWFsLT5kcml2ZXJfbmFtZSA9IHN0bF9kcnZuYW1lOworCXN0bF9zZXJpYWwtPm5hbWUgPSAidHR5RSI7CisJc3RsX3NlcmlhbC0+bWFqb3IgPSBTVExfU0VSSUFMTUFKT1I7CisJc3RsX3NlcmlhbC0+bWlub3Jfc3RhcnQgPSAwOworCXN0bF9zZXJpYWwtPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOworCXN0bF9zZXJpYWwtPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7CisJc3RsX3NlcmlhbC0+aW5pdF90ZXJtaW9zID0gc3RsX2RlZnRlcm1pb3M7CisJc3RsX3NlcmlhbC0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKKwl0dHlfc2V0X29wZXJhdGlvbnMoc3RsX3NlcmlhbCwgJnN0bF9vcHMpOworCisJcmV0dmFsID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihzdGxfc2VyaWFsKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byByZWdpc3RlciBzZXJpYWwgZHJpdmVyXG4iKTsKKwkJZ290byBlcnJfY2xzZGV2OworCX0KKworCXJldHVybiAwOworZXJyX2Nsc2RldjoKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQljbGFzc19kZXZpY2VfZGVzdHJveShzdGFsbGlvbl9jbGFzcywgTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSk7CisJY2xhc3NfZGVzdHJveShzdGFsbGlvbl9jbGFzcyk7CitlcnJfcmVnOgorCXVucmVnaXN0ZXJfY2hyZGV2KFNUTF9TSU9NRU1NQUpPUiwgInN0YWxpb21lbSIpOworCXB1dF90dHlfZHJpdmVyKHN0bF9zZXJpYWwpOworZXJyX3BjaWRyOgorCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc3RsX3BjaWRyaXZlcik7CisJc3RsX2ZyZWVfaXNhYnJkcygpOworZXJyOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdGFsbGlvbl9tb2R1bGVfZXhpdCh2b2lkKQoreworCXN0cnVjdCBzdGxicmQgKmJyZHA7CisJdW5zaWduZWQgaW50IGksIGo7CisJaW50IHJldHZhbDsKKworCXByX2RlYnVnKCJjbGVhbnVwX21vZHVsZSgpXG4iKTsKKworCXByaW50ayhLRVJOX0lORk8gIlVubG9hZGluZyAlczogdmVyc2lvbiAlc1xuIiwgc3RsX2RydnRpdGxlLAorCQlzdGxfZHJ2dmVyc2lvbik7CisKKy8qCisgKglGcmVlIHVwIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIHBvcnRzLiBUaGlzIGluY2x1ZGVzCisgKgltZW1vcnkgYW5kIGludGVycnVwdHMuIEFzIHBhcnQgb2YgdGhpcyBwcm9jZXNzIHdlIHdpbGwgYWxzbyBkbworICoJYSBoYW5ndXAgb24gZXZlcnkgb3BlbiBwb3J0IC0gdG8gdHJ5IHRvIGZsdXNoIG91dCBhbnkgcHJvY2Vzc2VzCisgKgloYW5naW5nIG9udG8gcG9ydHMuCisgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3RsX25yYnJkczsgaSsrKSB7CisJCWlmICgoYnJkcCA9IHN0bF9icmRzW2ldKSA9PSBOVUxMIHx8IChicmRwLT5zdGF0ZSAmIFNUTF9QUk9CRUQpKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBicmRwLT5ucnBvcnRzOyBqKyspCisJCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RsX3NlcmlhbCwKKwkJCQlicmRwLT5icmRuciAqIFNUTF9NQVhQT1JUUyArIGopOworCX0KKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoc3RsX3NlcmlhbCk7CisJcHV0X3R0eV9kcml2ZXIoc3RsX3NlcmlhbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQljbGFzc19kZXZpY2VfZGVzdHJveShzdGFsbGlvbl9jbGFzcywgTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSk7CisJaWYgKChyZXR2YWwgPSB1bnJlZ2lzdGVyX2NocmRldihTVExfU0lPTUVNTUFKT1IsICJzdGFsaW9tZW0iKSkpCisJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byB1bi1yZWdpc3RlciBzZXJpYWwgbWVtb3J5IGRldmljZSwgIgorCQkJImVycm5vPSVkXG4iLCAtcmV0dmFsKTsKKwljbGFzc19kZXN0cm95KHN0YWxsaW9uX2NsYXNzKTsKKworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc3RsX3BjaWRyaXZlcik7CisKKwlzdGxfZnJlZV9pc2FicmRzKCk7Cit9CisKK21vZHVsZV9pbml0KHN0YWxsaW9uX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHN0YWxsaW9uX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiR3JlZyBVbmdlcmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN0YWxsaW9uIE11bHRpcG9ydCBTZXJpYWwgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3guYyBiL2RyaXZlcnMvY2hhci9zeC5jCmluZGV4IGNjMTBhZjAuLjFkYTkyYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeC5jCkBAIC0zMiw3ICszMiw2IEBACiAgKiAgICAgIFVTQS4KICAqCiAgKiBSZXZpc2lvbiBoaXN0b3J5OgotICogJExvZzogc3guYyx2ICQKICAqIFJldmlzaW9uIDEuMzMgIDIwMDAvMDMvMDkgMTA6MDA6MDAgIHB2ZGwsd29sZmYKICAqIC0gRml4ZWQgbW9kdWxlIGFuZCBwb3J0IGNvdW50aW5nCiAgKiAtIEZpeGVkIHNpZ25hbCBoYW5kbGluZwpAQCAtMTk5LDkgKzE5OCw3IEBACiAgKgogICogKi8KIAotCi0jZGVmaW5lIFJDU19JRCAiJElkOiBzeC5jLHYgMS4zMyAyMDAwLzAzLzA4IDEwOjAxOjAyIHdvbGZmLCBwdmRsIEV4cCAkIgotI2RlZmluZSBSQ1NfUkVWICIkUmV2aXNpb246IDEuMzMgJCIKKyNkZWZpbmUgU1hfVkVSU0lPTgkxLjMzCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KQEAgLTIxNyw2ICsyMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vpc2EuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjQwLDcgKzIzOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZ2VuZXJpY19zZXJpYWwuaD4KICNpbmNsdWRlICJzeC5oIgogCi0KIC8qIEkgZG9uJ3QgdGhpbmsgdGhhdCB0aGlzIGRyaXZlciBjYW4gaGFuZGxlIG1vcmUgdGhhbiAyNTYgcG9ydHMgb24KICAgIG9uZSBtYWNoaW5lLiBZb3UnbGwgaGF2ZSB0byBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIGJvYXJkcyBpbiBzeC5oCiAgICBpZiB5b3Ugd2FudCBtb3JlIHRoYW4gNCBib2FyZHMuICAqLwpAQCAtMjQ5LDIxICsyNDYsMTIgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TUEVDSUFMSVhfU1hfWElPX0lPOCAweDIwMDAKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN4X3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfU1BFQ0lBTElYLCBQQ0lfREVWSUNFX0lEX1NQRUNJQUxJWF9TWF9YSU9fSU84LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyAwIH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc3hfcGNpX3RibCk7Ci0jZW5kaWYgLyogQ09ORklHX1BDSSAqLwotCiAvKiBDb25maWd1cmFibGUgb3B0aW9uczogCiAgICAoRG9uJ3QgYmUgdG9vIHN1cmUgdGhhdCBpdCdsbCB3b3JrIGlmIHlvdSB0b2dnbGUgdGhlbSkgKi8KIAogLyogQW0gSSBwYXJhbm9pZCBvciBub3QgPyA7LSkgKi8KICN1bmRlZiBTWF9QQVJBTk9JQV9DSEVDSwogCi0KIC8qIDIwIC0+IDIwMDAgcGVyIHNlY29uZC4gVGhlIGNhcmQgc2hvdWxkIHJhdGUtbGltaXQgaW50ZXJydXB0cyBhdCAxMDAKICAgIEh6LCBidXQgaXQgaXMgdXNlciBjb25maWd1cmFibGUuIEkgZG9uJ3QgcmVjb21tZW5kIGdvaW5nIGFib3ZlIDEwMDAKICAgIEh6LiBUaGUgaW50ZXJydXB0IHJhdGVsaW1pdCBtaWdodCB0cmlnZ2VyIGlmIHRoZSBpbnRlcnJ1cHQgaXMKQEAgLTI3Nyw3ICsyNjUsNiBAQAogICAgaW50ZXJydXB0LiBVc2UgcG9sbGluZy4gKi8KICN1bmRlZiBJUlFfUkFURV9MSU1JVAogCi0KICNpZiAwCiAvKiBOb3QgaW1wbGVtZW50ZWQgKi8KIC8qIApAQCAtMjg2LDM1ICsyNzMsMzMgQEAKICAqLwogI2RlZmluZSBTWF9SRVBPUlRfRklGTwogI2RlZmluZSBTWF9SRVBPUlRfT1ZFUlJVTgotI2VuZGlmIAotCisjZW5kaWYKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIHZvaWQgc3hfZGlzYWJsZV90eF9pbnRlcnJ1cHRzICh2b2lkICogcHRyKTsgCi1zdGF0aWMgdm9pZCBzeF9lbmFibGVfdHhfaW50ZXJydXB0cyAodm9pZCAqIHB0cik7IAotc3RhdGljIHZvaWQgc3hfZGlzYWJsZV9yeF9pbnRlcnJ1cHRzICh2b2lkICogcHRyKTsgCi1zdGF0aWMgdm9pZCBzeF9lbmFibGVfcnhfaW50ZXJydXB0cyAodm9pZCAqIHB0cik7IAotc3RhdGljIGludCAgc3hfZ2V0X0NEICh2b2lkICogcHRyKTsgCi1zdGF0aWMgdm9pZCBzeF9zaHV0ZG93bl9wb3J0ICh2b2lkICogcHRyKTsKLXN0YXRpYyBpbnQgIHN4X3NldF9yZWFsX3Rlcm1pb3MgKHZvaWQgICpwdHIpOwotc3RhdGljIHZvaWQgc3hfY2xvc2UgKHZvaWQgICpwdHIpOwotc3RhdGljIGludCBzeF9jaGFyc19pbl9idWZmZXIgKHZvaWQgKiBwdHIpOwotc3RhdGljIGludCBzeF9pbml0X2JvYXJkIChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkKTsKLXN0YXRpYyBpbnQgc3hfaW5pdF9wb3J0c3RydWN0cyAoaW50IG5ib2FyZHMsIGludCBucG9ydHMpOwotc3RhdGljIGludCBzeF9md19pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBzeF9kaXNhYmxlX3R4X2ludGVycnVwdHModm9pZCAqcHRyKTsKK3N0YXRpYyB2b2lkIHN4X2VuYWJsZV90eF9pbnRlcnJ1cHRzKHZvaWQgKnB0cik7CitzdGF0aWMgdm9pZCBzeF9kaXNhYmxlX3J4X2ludGVycnVwdHModm9pZCAqcHRyKTsKK3N0YXRpYyB2b2lkIHN4X2VuYWJsZV9yeF9pbnRlcnJ1cHRzKHZvaWQgKnB0cik7CitzdGF0aWMgaW50IHN4X2dldF9DRCh2b2lkICpwdHIpOworc3RhdGljIHZvaWQgc3hfc2h1dGRvd25fcG9ydCh2b2lkICpwdHIpOworc3RhdGljIGludCBzeF9zZXRfcmVhbF90ZXJtaW9zKHZvaWQgKnB0cik7CitzdGF0aWMgdm9pZCBzeF9jbG9zZSh2b2lkICpwdHIpOworc3RhdGljIGludCBzeF9jaGFyc19pbl9idWZmZXIodm9pZCAqcHRyKTsKK3N0YXRpYyBpbnQgc3hfaW5pdF9ib2FyZChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkKTsKK3N0YXRpYyBpbnQgc3hfaW5pdF9wb3J0c3RydWN0cyhpbnQgbmJvYXJkcywgaW50IG5wb3J0cyk7CitzdGF0aWMgaW50IHN4X2Z3X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgaW50IHN4X2luaXRfZHJpdmVycyh2b2lkKTsKIAotCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnN4X2RyaXZlcjsKIAorc3RhdGljIERFRklORV9NVVRFWChzeF9ib2FyZHNfbG9jayk7CiBzdGF0aWMgc3RydWN0IHN4X2JvYXJkIGJvYXJkc1tTWF9OQk9BUkRTXTsKIHN0YXRpYyBzdHJ1Y3Qgc3hfcG9ydCAqc3hfcG9ydHM7CiBzdGF0aWMgaW50IHN4X2luaXRpYWxpemVkOwogc3RhdGljIGludCBzeF9ucG9ydHM7CiBzdGF0aWMgaW50IHN4X2RlYnVnOwogCi0KIC8qIFlvdSBjYW4gaGF2ZSB0aGUgZHJpdmVyIHBvbGwgeW91ciBjYXJkLiAKICAgICAtIFNldCBzeF9wb2xsIHRvIDEgdG8gcG9sbCBldmVyeSB0aW1lciB0aWNrICgxMG1zIG9uIEludGVsKS4gCiAgICAgICBUaGlzIGlzIHVzZWQgd2hlbiB0aGUgY2FyZCBjYW5ub3QgdXNlIGFuIGludGVycnVwdCBmb3Igc29tZSByZWFzb24uCkBAIC0zMzMsMjcgKzMxOCwzNiBAQAogCiBzdGF0aWMgaW50IHN4X21heGludHMgPSAxMDA7CiAKKyNpZmRlZiBDT05GSUdfSVNBCisKIC8qIFRoZXNlIGFyZSB0aGUgb25seSBvcGVuIHNwYWNlcyBpbiBteSBjb21wdXRlci4gWW91cnMgbWF5IGhhdmUgbW9yZQogICAgb3IgbGVzcy4uLi4gLS0gUkVXIAogICAgZHVoOiBDYXJkIGF0IDB4YTAwMDAgaXMgcG9zc2libGUgb24gSFAgTmV0c2VydmVyPz8gLS0gcHZkbAogKi8KLXN0YXRpYyBpbnQgc3hfcHJvYmVfYWRkcnNbXT0gezB4YzAwMDAsIDB4ZDAwMDAsIDB4ZTAwMDAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjODAwMCwgMHhkODAwMCwgMHhlODAwMH07Ci1zdGF0aWMgaW50IHNpX3Byb2JlX2FkZHJzW109IHsweGMwMDAwLCAweGQwMDAwLCAweGUwMDAwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzgwMDAsIDB4ZDgwMDAsIDB4ZTgwMDAsIDB4YTAwMDB9Owotc3RhdGljIGludCBzaTFfcHJvYmVfYWRkcnNbXT0geyAweGQwMDAwfTsKK3N0YXRpYyBpbnQgc3hfcHJvYmVfYWRkcnNbXSA9IHsKKwkweGMwMDAwLCAweGQwMDAwLCAweGUwMDAwLAorCTB4YzgwMDAsIDB4ZDgwMDAsIDB4ZTgwMDAKK307CitzdGF0aWMgaW50IHNpX3Byb2JlX2FkZHJzW10gPSB7CisJMHhjMDAwMCwgMHhkMDAwMCwgMHhlMDAwMCwKKwkweGM4MDAwLCAweGQ4MDAwLCAweGU4MDAwLCAweGEwMDAwCit9Oworc3RhdGljIGludCBzaTFfcHJvYmVfYWRkcnNbXSA9IHsKKwkweGQwMDAwCit9OwogCiAjZGVmaW5lIE5SX1NYX0FERFJTIEFSUkFZX1NJWkUoc3hfcHJvYmVfYWRkcnMpCiAjZGVmaW5lIE5SX1NJX0FERFJTIEFSUkFZX1NJWkUoc2lfcHJvYmVfYWRkcnMpCiAjZGVmaW5lIE5SX1NJMV9BRERSUyBBUlJBWV9TSVpFKHNpMV9wcm9iZV9hZGRycykKIAorbW9kdWxlX3BhcmFtX2FycmF5KHN4X3Byb2JlX2FkZHJzLCBpbnQsIE5VTEwsIDApOworbW9kdWxlX3BhcmFtX2FycmF5KHNpX3Byb2JlX2FkZHJzLCBpbnQsIE5VTEwsIDApOworI2VuZGlmCiAKIC8qIFNldCB0aGUgbWFzayB0byBhbGwtb25lcy4gVGhpcyBhbGFzLCBvbmx5IHN1cHBvcnRzIDMyIGludGVycnVwdHMuIAogICAgU29tZSBhcmNoaXRlY3R1cmVzIG1heSBuZWVkIG1vcmUuICovCiBzdGF0aWMgaW50IHN4X2lycW1hc2sgPSAtMTsKIAotbW9kdWxlX3BhcmFtX2FycmF5KHN4X3Byb2JlX2FkZHJzLCBpbnQsIE5VTEwsIDApOwotbW9kdWxlX3BhcmFtX2FycmF5KHNpX3Byb2JlX2FkZHJzLCBpbnQsIE5VTEwsIDApOwogbW9kdWxlX3BhcmFtKHN4X3BvbGwsIGludCwgMCk7CiBtb2R1bGVfcGFyYW0oc3hfc2xvd3BvbGwsIGludCwgMCk7CiBtb2R1bGVfcGFyYW0oc3hfbWF4aW50cywgaW50LCAwKTsKQEAgLTM2OCwxMyArMzYyLDEyIEBACiAJc3hfZGlzYWJsZV9yeF9pbnRlcnJ1cHRzLAogCXN4X2VuYWJsZV9yeF9pbnRlcnJ1cHRzLAogCXN4X2dldF9DRCwKLQlzeF9zaHV0ZG93bl9wb3J0LCAKLQlzeF9zZXRfcmVhbF90ZXJtaW9zLCAKKwlzeF9zaHV0ZG93bl9wb3J0LAorCXN4X3NldF9yZWFsX3Rlcm1pb3MsCiAJc3hfY2hhcnNfaW5fYnVmZmVyLAogCXN4X2Nsb3NlLAogfTsKIAotCiAvKiAKICAgIFRoaXMgZHJpdmVyIGNhbiBzcGV3IGEgd2hvbGUgbG90IG9mIGRlYnVnZ2luZyBvdXRwdXQgYXQgeW91LiBJZiB5b3UKICAgIG5lZWQgbWF4aW11bSBwZXJmb3JtYW5jZSwgeW91IHNob3VsZCBkaXNhYmxlIHRoZSBERUJVRyBkZWZpbmUuIFRvCkBAIC0zODUsMjMgKzM3OCwxNyBAQAogKi8KICNkZWZpbmUgREVCVUcKIAotCiAjaWZkZWYgREVCVUcKLSNkZWZpbmUgc3hfZHByaW50ayhmLCBzdHIuLi4pIGlmIChzeF9kZWJ1ZyAmIGYpIHByaW50ayAoc3RyKQorI2RlZmluZSBzeF9kcHJpbnRrKGYsIHN0ci4uLikJaWYgKHN4X2RlYnVnICYgZikgcHJpbnRrIChzdHIpCiAjZWxzZQotI2RlZmluZSBzeF9kcHJpbnRrKGYsIHN0ci4uLikgLyogbm90aGluZyAqLworI2RlZmluZSBzeF9kcHJpbnRrKGYsIHN0ci4uLikJLyogbm90aGluZyAqLwogI2VuZGlmCiAKKyNkZWZpbmUgZnVuY19lbnRlcigpCXN4X2RwcmludGsoU1hfREVCVUdfRkxPVywgInN4OiBlbnRlciAlc1xuIixfX0ZVTkNUSU9OX18pCisjZGVmaW5lIGZ1bmNfZXhpdCgpCXN4X2RwcmludGsoU1hfREVCVUdfRkxPVywgInN4OiBleGl0ICAlc1xuIixfX0ZVTkNUSU9OX18pCiAKLQotI2RlZmluZSBmdW5jX2VudGVyKCkgc3hfZHByaW50ayAoU1hfREVCVUdfRkxPVywgInN4OiBlbnRlciAlc1xuIixfX0ZVTkNUSU9OX18pCi0jZGVmaW5lIGZ1bmNfZXhpdCgpICBzeF9kcHJpbnRrIChTWF9ERUJVR19GTE9XLCAic3g6IGV4aXQgICVzXG4iLCBfX0ZVTkNUSU9OX18pCi0KLSNkZWZpbmUgZnVuY19lbnRlcjIoKSBzeF9kcHJpbnRrIChTWF9ERUJVR19GTE9XLCAic3g6IGVudGVyICVzIChwb3J0ICVkKVxuIiwgXAotCQkJCQlfX0ZVTkNUSU9OX18sIHBvcnQtPmxpbmUpCi0KLQotCisjZGVmaW5lIGZ1bmNfZW50ZXIyKCkJc3hfZHByaW50ayhTWF9ERUJVR19GTE9XLCAic3g6IGVudGVyICVzIChwb3J0ICVkKVxuIiwgXAorCQkJCV9fRlVOQ1RJT05fXywgcG9ydC0+bGluZSkKIAogLyogCiAgKiAgRmlybXdhcmUgbG9hZGVyIGRyaXZlciBzcGVjaWZpYyByb3V0aW5lcwpAQCAtNDA5LDMxICszOTYsMjYgQEAKICAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeF9md19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuaW9jdGwJCT0gc3hfZndfaW9jdGwsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmlvY3RsID0gc3hfZndfaW9jdGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugc3hfZndfZGV2aWNlID0gewogCVNYQ1RMX01JU0NfTUlOT1IsICJzeGN0bCIsICZzeF9md19mb3BzCiB9OwogCi0KLQotCi0KICNpZmRlZiBTWF9QQVJBTk9JQV9DSEVDSwogCiAvKiBUaGlzIGRvZXNuJ3Qgd29yay4gV2hvJ3MgcGFyYW5vaWQgYXJvdW5kIGhlcmU/IE5vdCBtZSEgKi8KIAotc3RhdGljIGlubGluZSBpbnQgc3hfcGFyYW5vaWFfY2hlY2soc3RydWN0IHN4X3BvcnQgY29uc3QgKiBwb3J0LAorc3RhdGljIGlubGluZSBpbnQgc3hfcGFyYW5vaWFfY2hlY2soc3RydWN0IHN4X3BvcnQgY29uc3QgKnBvcnQsCiAJCQkJICAgIGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJvdXRpbmUpCiB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmJhZG1hZ2ljID0gS0VSTl9FUlIgInN4OiBXYXJuaW5nOiBiYWQgc3ggcG9ydCBtYWdpYyAiCisJCQkibnVtYmVyIGZvciBkZXZpY2UgJXMgaW4gJXNcbiI7CisJc3RhdGljIGNvbnN0IGNoYXIgKmJhZGluZm8gPSBLRVJOX0VSUiAic3g6IFdhcm5pbmc6IG51bGwgc3ggcG9ydCBmb3IgIgorCQkJImRldmljZSAlcyBpbiAlc1xuIjsKIAotCXN0YXRpYyBjb25zdCBjaGFyICpiYWRtYWdpYyA9Ci0JICBLRVJOX0VSUiAic3g6IFdhcm5pbmc6IGJhZCBzeCBwb3J0IG1hZ2ljIG51bWJlciBmb3IgZGV2aWNlICVzIGluICVzXG4iOwotCXN0YXRpYyBjb25zdCBjaGFyICpiYWRpbmZvID0KLQkgIEtFUk5fRVJSICJzeDogV2FybmluZzogbnVsbCBzeCBwb3J0IGZvciBkZXZpY2UgJXMgaW4gJXNcbiI7Ci0gCiAJaWYgKCFwb3J0KSB7CiAJCXByaW50ayhiYWRpbmZvLCBuYW1lLCByb3V0aW5lKTsKIAkJcmV0dXJuIDE7CkBAIC00NTYsMjMgKzQzOCwyNCBAQAogI2RlZmluZSBUSU1FT1VUXzEgMzAKICNkZWZpbmUgVElNRU9VVF8yIDEwMDAwMDAKIAotCiAjaWZkZWYgREVCVUcKIHN0YXRpYyB2b2lkIG15X2hkX2lvKHZvaWQgX19pb21lbSAqcCwgaW50IGxlbikKIHsKIAlpbnQgaSwgaiwgY2g7CiAJdW5zaWduZWQgY2hhciBfX2lvbWVtICphZGRyID0gcDsKIAotCWZvciAoaT0wO2k8bGVuO2krPTE2KSB7Ci0JCXByaW50ayAoIiVwICIsIGFkZHIraSk7Ci0JCWZvciAoaj0wO2o8MTY7aisrKSB7Ci0JCQlwcmludGsgKCIlMDJ4ICVzIiwgcmVhZGIoYWRkcitqK2kpLCAoaj09Nyk/IiAiOiIiKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDE2KSB7CisJCXByaW50aygiJXAgIiwgYWRkciArIGkpOworCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgeworCQkJcHJpbnRrKCIlMDJ4ICVzIiwgcmVhZGIoYWRkciArIGogKyBpKSwKKwkJCQkJKGogPT0gNykgPyAiICIgOiAiIik7CiAJCX0KLQkJZm9yIChqPTA7ajwxNjtqKyspIHsKLQkJCWNoID0gcmVhZGIoYWRkcitqK2kpOwotCQkJcHJpbnRrICgiJWMiLCAoY2ggPCAweDIwKT8nLic6KChjaCA+IDB4N2YpPycuJzpjaCkpOworCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgeworCQkJY2ggPSByZWFkYihhZGRyICsgaiArIGkpOworCQkJcHJpbnRrKCIlYyIsIChjaCA8IDB4MjApID8gJy4nIDoKKwkJCQkJKChjaCA+IDB4N2YpID8gJy4nIDogY2gpKTsKIAkJfQotCQlwcmludGsgKCJcbiIpOworCQlwcmludGsoIlxuIik7CiAJfQogfQogc3RhdGljIHZvaWQgbXlfaGQodm9pZCAqcCwgaW50IGxlbikKQEAgLTQ4MCw0MTkgKzQ2Myw0NjggQEAKIAlpbnQgaSwgaiwgY2g7CiAJdW5zaWduZWQgY2hhciAqYWRkciA9IHA7CiAKLQlmb3IgKGk9MDtpPGxlbjtpKz0xNikgewotCQlwcmludGsgKCIlcCAiLCBhZGRyK2kpOwotCQlmb3IgKGo9MDtqPDE2O2orKykgewotCQkJcHJpbnRrICgiJTAyeCAlcyIsIGFkZHJbaitpXSwgKGo9PTcpPyIgIjoiIik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAxNikgeworCQlwcmludGsoIiVwICIsIGFkZHIgKyBpKTsKKwkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHsKKwkJCXByaW50aygiJTAyeCAlcyIsIGFkZHJbaiArIGldLCAoaiA9PSA3KSA/ICIgIiA6ICIiKTsKIAkJfQotCQlmb3IgKGo9MDtqPDE2O2orKykgewotCQkJY2ggPSBhZGRyW2oraV07Ci0JCQlwcmludGsgKCIlYyIsIChjaCA8IDB4MjApPycuJzooKGNoID4gMHg3Zik/Jy4nOmNoKSk7CisJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7CisJCQljaCA9IGFkZHJbaiArIGldOworCQkJcHJpbnRrKCIlYyIsIChjaCA8IDB4MjApID8gJy4nIDoKKwkJCQkJKChjaCA+IDB4N2YpID8gJy4nIDogY2gpKTsKIAkJfQotCQlwcmludGsgKCJcbiIpOworCQlwcmludGsoIlxuIik7CiAJfQogfQogI2VuZGlmCiAKLQotCiAvKiBUaGlzIG5lZWRzIHJlZG9pbmcgZm9yIEFscGhhIC0tIFJFVyAtLSBEb25lLiAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3hfYnl0ZSAoc3RydWN0IHN4X2JvYXJkICpib2FyZCwgaW50IG9mZnNldCwgdTggYnl0ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9zeF9ieXRlKHN0cnVjdCBzeF9ib2FyZCAqYm9hcmQsIGludCBvZmZzZXQsIHU4IGJ5dGUpCiB7Ci0Jd3JpdGViIChieXRlLCBib2FyZC0+YmFzZStvZmZzZXQpOworCXdyaXRlYihieXRlLCBib2FyZC0+YmFzZSArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTggcmVhZF9zeF9ieXRlIChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkLCBpbnQgb2Zmc2V0KQorc3RhdGljIGlubGluZSB1OCByZWFkX3N4X2J5dGUoc3RydWN0IHN4X2JvYXJkICpib2FyZCwgaW50IG9mZnNldCkKIHsKLQlyZXR1cm4gcmVhZGIgKGJvYXJkLT5iYXNlK29mZnNldCk7CisJcmV0dXJuIHJlYWRiKGJvYXJkLT5iYXNlICsgb2Zmc2V0KTsKIH0KIAotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3hfd29yZCAoc3RydWN0IHN4X2JvYXJkICpib2FyZCwgaW50IG9mZnNldCwgdTE2IHdvcmQpCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfc3hfd29yZChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkLCBpbnQgb2Zmc2V0LCB1MTYgd29yZCkKIHsKLQl3cml0ZXcgKHdvcmQsIGJvYXJkLT5iYXNlK29mZnNldCk7CisJd3JpdGV3KHdvcmQsIGJvYXJkLT5iYXNlICsgb2Zmc2V0KTsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgcmVhZF9zeF93b3JkIChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkLCBpbnQgb2Zmc2V0KQorc3RhdGljIGlubGluZSB1MTYgcmVhZF9zeF93b3JkKHN0cnVjdCBzeF9ib2FyZCAqYm9hcmQsIGludCBvZmZzZXQpCiB7Ci0JcmV0dXJuIHJlYWR3IChib2FyZC0+YmFzZSArIG9mZnNldCk7CisJcmV0dXJuIHJlYWR3KGJvYXJkLT5iYXNlICsgb2Zmc2V0KTsKIH0KIAotCi1zdGF0aWMgaW50IHN4X2J1c3lfd2FpdF9lcSAoc3RydWN0IHN4X2JvYXJkICpib2FyZCwgCi0gICAgICAgICAgICAgICAgICAgICAJICAgIGludCBvZmZzZXQsIGludCBtYXNrLCBpbnQgY29ycmVjdHZhbCkKK3N0YXRpYyBpbnQgc3hfYnVzeV93YWl0X2VxKHN0cnVjdCBzeF9ib2FyZCAqYm9hcmQsCisJCWludCBvZmZzZXQsIGludCBtYXNrLCBpbnQgY29ycmVjdHZhbCkKIHsKIAlpbnQgaTsKIAotCWZ1bmNfZW50ZXIgKCk7CisJZnVuY19lbnRlcigpOwogCi0JZm9yIChpPTA7IGkgPCBUSU1FT1VUXzEgO2krKykKLQkJaWYgKChyZWFkX3N4X2J5dGUgKGJvYXJkLCBvZmZzZXQpICYgbWFzaykgPT0gY29ycmVjdHZhbCkgewotCQkJZnVuY19leGl0ICgpOworCWZvciAoaSA9IDA7IGkgPCBUSU1FT1VUXzE7IGkrKykKKwkJaWYgKChyZWFkX3N4X2J5dGUoYm9hcmQsIG9mZnNldCkgJiBtYXNrKSA9PSBjb3JyZWN0dmFsKSB7CisJCQlmdW5jX2V4aXQoKTsKIAkJCXJldHVybiAxOwogCQl9CiAKLQlmb3IgKGk9MDsgaSA8IFRJTUVPVVRfMiA7aSsrKSB7Ci0JCWlmICgocmVhZF9zeF9ieXRlIChib2FyZCwgb2Zmc2V0KSAmIG1hc2spID09IGNvcnJlY3R2YWwpIHsKLQkJCWZ1bmNfZXhpdCAoKTsKKwlmb3IgKGkgPSAwOyBpIDwgVElNRU9VVF8yOyBpKyspIHsKKwkJaWYgKChyZWFkX3N4X2J5dGUoYm9hcmQsIG9mZnNldCkgJiBtYXNrKSA9PSBjb3JyZWN0dmFsKSB7CisJCQlmdW5jX2V4aXQoKTsKIAkJCXJldHVybiAxOwogCQl9Ci0JCXVkZWxheSAoMSk7CisJCXVkZWxheSgxKTsKIAl9CiAKLQlmdW5jX2V4aXQgKCk7CisJZnVuY19leGl0KCk7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBzeF9idXN5X3dhaXRfbmVxIChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkLCAKLSAgICAgICAgICAgICAgICAgICAgICAJICAgICBpbnQgb2Zmc2V0LCBpbnQgbWFzaywgaW50IGJhZHZhbCkKK3N0YXRpYyBpbnQgc3hfYnVzeV93YWl0X25lcShzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkLAorCQlpbnQgb2Zmc2V0LCBpbnQgbWFzaywgaW50IGJhZHZhbCkKIHsKIAlpbnQgaTsKIAotCWZ1bmNfZW50ZXIgKCk7CisJZnVuY19lbnRlcigpOwogCi0JZm9yIChpPTA7IGkgPCBUSU1FT1VUXzEgO2krKykKLQkJaWYgKChyZWFkX3N4X2J5dGUgKGJvYXJkLCBvZmZzZXQpICYgbWFzaykgIT0gYmFkdmFsKSB7Ci0JCQlmdW5jX2V4aXQgKCk7CisJZm9yIChpID0gMDsgaSA8IFRJTUVPVVRfMTsgaSsrKQorCQlpZiAoKHJlYWRfc3hfYnl0ZShib2FyZCwgb2Zmc2V0KSAmIG1hc2spICE9IGJhZHZhbCkgeworCQkJZnVuY19leGl0KCk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCi0JZm9yIChpPTA7IGkgPCBUSU1FT1VUXzIgO2krKykgewotCQlpZiAoKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIG9mZnNldCkgJiBtYXNrKSAhPSBiYWR2YWwpIHsKLQkJCWZ1bmNfZXhpdCAoKTsKKwlmb3IgKGkgPSAwOyBpIDwgVElNRU9VVF8yOyBpKyspIHsKKwkJaWYgKChyZWFkX3N4X2J5dGUoYm9hcmQsIG9mZnNldCkgJiBtYXNrKSAhPSBiYWR2YWwpIHsKKwkJCWZ1bmNfZXhpdCgpOwogCQkJcmV0dXJuIDE7CiAJCX0KLQkJdWRlbGF5ICgxKTsKKwkJdWRlbGF5KDEpOwogCX0KIAotCWZ1bmNfZXhpdCAoKTsKKwlmdW5jX2V4aXQoKTsKIAlyZXR1cm4gMDsKIH0KIAotCi0KIC8qIDUuNi40IG9mIDYyMTAwMjggcjIuMyAqLwotc3RhdGljIGludCBzeF9yZXNldCAoc3RydWN0IHN4X2JvYXJkICpib2FyZCkKK3N0YXRpYyBpbnQgc3hfcmVzZXQoc3RydWN0IHN4X2JvYXJkICpib2FyZCkKIHsKLQlmdW5jX2VudGVyICgpOworCWZ1bmNfZW50ZXIoKTsKIAotCWlmIChJU19TWF9CT0FSRCAoYm9hcmQpKSB7CisJaWYgKElTX1NYX0JPQVJEKGJvYXJkKSkgewogCi0JCXdyaXRlX3N4X2J5dGUgKGJvYXJkLCBTWF9DT05GSUcsIDApOwotCQl3cml0ZV9zeF9ieXRlIChib2FyZCwgU1hfUkVTRVQsIDEpOyAvKiBWYWx1ZSBkb2Vzbid0IG1hdHRlciAqLworCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTWF9DT05GSUcsIDApOworCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTWF9SRVNFVCwgMSk7IC8qIFZhbHVlIGRvZXNuJ3QgbWF0dGVyICovCiAKLQkJaWYgKCFzeF9idXN5X3dhaXRfZXEgKGJvYXJkLCBTWF9SRVNFVF9TVEFUVVMsIDEsIDApKSB7Ci0JCQlwcmludGsgKEtFUk5fSU5GTyAic3g6IENhcmQgZG9lc24ndCByZXNwb25kIHRvIHJlc2V0Li4uLlxuIik7CisJCWlmICghc3hfYnVzeV93YWl0X2VxKGJvYXJkLCBTWF9SRVNFVF9TVEFUVVMsIDEsIDApKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJzeDogQ2FyZCBkb2Vzbid0IHJlc3BvbmQgdG8gIgorCQkJCQkicmVzZXQuLi5cbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9IGVsc2UgaWYgKElTX0VJU0FfQk9BUkQoYm9hcmQpKSB7Ci0JCW91dGIoYm9hcmQtPmlycTw8NCwgYm9hcmQtPmVpc2FfYmFzZSsweGMwMik7CisJCW91dGIoYm9hcmQtPmlycSA8PCA0LCBib2FyZC0+ZWlzYV9iYXNlICsgMHhjMDIpOwogCX0gZWxzZSBpZiAoSVNfU0kxX0JPQVJEKGJvYXJkKSkgewotCSAgICAgICAgd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMV9JU0FfUkVTRVQsICAgMCk7IC8vIHZhbHVlIGRvZXMgbm90IG1hdHRlcgorCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTSTFfSVNBX1JFU0VULCAwKTsJLyp2YWx1ZSBkb2Vzbid0IG1hdHRlciovCiAJfSBlbHNlIHsKIAkJLyogR29yeSBkZXRhaWxzIG9mIHRoZSBTSS9JU0EgYm9hcmQgKi8KLQkJd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfUkVTRVQsICAgIFNJMl9JU0FfUkVTRVRfU0VUKTsKLQkJd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSVJRMTEsICAgIFNJMl9JU0FfSVJRMTFfQ0xFQVIpOwotCQl3cml0ZV9zeF9ieXRlIChib2FyZCwgU0kyX0lTQV9JUlExMiwgICAgU0kyX0lTQV9JUlExMl9DTEVBUik7Ci0JCXdyaXRlX3N4X2J5dGUgKGJvYXJkLCBTSTJfSVNBX0lSUTE1LCAgICBTSTJfSVNBX0lSUTE1X0NMRUFSKTsKLQkJd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSU5UQ0xFQVIsIFNJMl9JU0FfSU5UQ0xFQVJfQ0xFQVIpOwotCQl3cml0ZV9zeF9ieXRlIChib2FyZCwgU0kyX0lTQV9JUlFTRVQsICAgU0kyX0lTQV9JUlFTRVRfQ0xFQVIpOworCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTSTJfSVNBX1JFU0VULCBTSTJfSVNBX1JFU0VUX1NFVCk7CisJCXdyaXRlX3N4X2J5dGUoYm9hcmQsIFNJMl9JU0FfSVJRMTEsIFNJMl9JU0FfSVJRMTFfQ0xFQVIpOworCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTSTJfSVNBX0lSUTEyLCBTSTJfSVNBX0lSUTEyX0NMRUFSKTsKKwkJd3JpdGVfc3hfYnl0ZShib2FyZCwgU0kyX0lTQV9JUlExNSwgU0kyX0lTQV9JUlExNV9DTEVBUik7CisJCXdyaXRlX3N4X2J5dGUoYm9hcmQsIFNJMl9JU0FfSU5UQ0xFQVIsIFNJMl9JU0FfSU5UQ0xFQVJfQ0xFQVIpOworCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTSTJfSVNBX0lSUVNFVCwgU0kyX0lTQV9JUlFTRVRfQ0xFQVIpOwogCX0KIAotCWZ1bmNfZXhpdCAoKTsKKwlmdW5jX2V4aXQoKTsKIAlyZXR1cm4gMTsKIH0KIAotCiAvKiBUaGlzIGRvZXNuJ3Qgd29yayBvbiBtYWNoaW5lcyB3aGVyZSAiTlVMTCIgaXNuJ3QgMCAqLwogLyogSWYgeW91IGhhdmUgb25lIG9mIHRob3NlLCBzb21lb25lIHdpbGwgbmVlZCB0byB3cml0ZSAKICAgIHRoZSBlcXVpdmFsZW50IG9mIHRoaXMsIHdoaWNoIHdpbGwgYW1vdW50IHRvIGFib3V0IDMgbGluZXMuIEkgZG9uJ3QKICAgIHdhbnQgdG8gY29tcGxpY2F0ZSB0aGlzIHJpZ2h0IG5vdy4gLS0gUkVXCiAgICAoU2VlLCBJIGRvIHdyaXRlIGNvbW1lbnRzIGV2ZXJ5IG5vdyBhbmQgdGhlbiA6LSkgKi8KLSNkZWZpbmUgT0ZGU0VUT0Yoc3RyY3QsIGVsZW0pICgobG9uZykmKCgoc3RydWN0IHN0cmN0ICopTlVMTCktPmVsZW0pKQorI2RlZmluZSBPRkZTRVRPRihzdHJjdCwgZWxlbSkJKChsb25nKSYoKChzdHJ1Y3Qgc3RyY3QgKilOVUxMKS0+ZWxlbSkpCiAKLQotI2RlZmluZSBDSEFOX09GRlNFVChwb3J0LGVsZW0pIChwb3J0LT5jaF9iYXNlICsgT0ZGU0VUT0YgKF9TWENIQU5ORUwsIGVsZW0pKQotI2RlZmluZSBNT0RVX09GRlNFVChib2FyZCxhZGRyLGVsZW0pICAgIChhZGRyICsgT0ZGU0VUT0YgKF9TWE1PRFVMRSwgZWxlbSkpCi0jZGVmaW5lICBCUkRfT0ZGU0VUKGJvYXJkLGVsZW0pICAgICAgICAgICAgICAgIChPRkZTRVRPRiAoX1NYQ0FSRCwgZWxlbSkpCi0KKyNkZWZpbmUgQ0hBTl9PRkZTRVQocG9ydCxlbGVtKQkocG9ydC0+Y2hfYmFzZSArIE9GRlNFVE9GIChfU1hDSEFOTkVMLCBlbGVtKSkKKyNkZWZpbmUgTU9EVV9PRkZTRVQoYm9hcmQsYWRkcixlbGVtKQkoYWRkciArIE9GRlNFVE9GIChfU1hNT0RVTEUsIGVsZW0pKQorI2RlZmluZSAgQlJEX09GRlNFVChib2FyZCxlbGVtKQkoT0ZGU0VUT0YgKF9TWENBUkQsIGVsZW0pKQogCiAjZGVmaW5lIHN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBlbGVtLCB2YWwpIFwKLSAgIHdyaXRlX3N4X2J5dGUgKHBvcnQtPmJvYXJkLCBDSEFOX09GRlNFVCAocG9ydCwgZWxlbSksIHZhbCkKKwl3cml0ZV9zeF9ieXRlIChwb3J0LT5ib2FyZCwgQ0hBTl9PRkZTRVQgKHBvcnQsIGVsZW0pLCB2YWwpCiAKICNkZWZpbmUgc3hfcmVhZF9jaGFubmVsX2J5dGUocG9ydCwgZWxlbSkgXAotICAgcmVhZF9zeF9ieXRlIChwb3J0LT5ib2FyZCwgQ0hBTl9PRkZTRVQgKHBvcnQsIGVsZW0pKQorCXJlYWRfc3hfYnl0ZSAocG9ydC0+Ym9hcmQsIENIQU5fT0ZGU0VUIChwb3J0LCBlbGVtKSkKIAogI2RlZmluZSBzeF93cml0ZV9jaGFubmVsX3dvcmQocG9ydCwgZWxlbSwgdmFsKSBcCi0gICB3cml0ZV9zeF93b3JkIChwb3J0LT5ib2FyZCwgQ0hBTl9PRkZTRVQgKHBvcnQsIGVsZW0pLCB2YWwpCisJd3JpdGVfc3hfd29yZCAocG9ydC0+Ym9hcmQsIENIQU5fT0ZGU0VUIChwb3J0LCBlbGVtKSwgdmFsKQogCiAjZGVmaW5lIHN4X3JlYWRfY2hhbm5lbF93b3JkKHBvcnQsIGVsZW0pIFwKLSAgIHJlYWRfc3hfd29yZCAocG9ydC0+Ym9hcmQsIENIQU5fT0ZGU0VUIChwb3J0LCBlbGVtKSkKLQorCXJlYWRfc3hfd29yZCAocG9ydC0+Ym9hcmQsIENIQU5fT0ZGU0VUIChwb3J0LCBlbGVtKSkKIAogI2RlZmluZSBzeF93cml0ZV9tb2R1bGVfYnl0ZShib2FyZCwgYWRkciwgZWxlbSwgdmFsKSBcCi0gICB3cml0ZV9zeF9ieXRlIChib2FyZCwgTU9EVV9PRkZTRVQgKGJvYXJkLCBhZGRyLCBlbGVtKSwgdmFsKQorCXdyaXRlX3N4X2J5dGUgKGJvYXJkLCBNT0RVX09GRlNFVCAoYm9hcmQsIGFkZHIsIGVsZW0pLCB2YWwpCiAKICNkZWZpbmUgc3hfcmVhZF9tb2R1bGVfYnl0ZShib2FyZCwgYWRkciwgZWxlbSkgXAotICAgcmVhZF9zeF9ieXRlIChib2FyZCwgTU9EVV9PRkZTRVQgKGJvYXJkLCBhZGRyLCBlbGVtKSkKKwlyZWFkX3N4X2J5dGUgKGJvYXJkLCBNT0RVX09GRlNFVCAoYm9hcmQsIGFkZHIsIGVsZW0pKQogCiAjZGVmaW5lIHN4X3dyaXRlX21vZHVsZV93b3JkKGJvYXJkLCBhZGRyLCBlbGVtLCB2YWwpIFwKLSAgIHdyaXRlX3N4X3dvcmQgKGJvYXJkLCBNT0RVX09GRlNFVCAoYm9hcmQsIGFkZHIsIGVsZW0pLCB2YWwpCisJd3JpdGVfc3hfd29yZCAoYm9hcmQsIE1PRFVfT0ZGU0VUIChib2FyZCwgYWRkciwgZWxlbSksIHZhbCkKIAogI2RlZmluZSBzeF9yZWFkX21vZHVsZV93b3JkKGJvYXJkLCBhZGRyLCBlbGVtKSBcCi0gICByZWFkX3N4X3dvcmQgKGJvYXJkLCBNT0RVX09GRlNFVCAoYm9hcmQsIGFkZHIsIGVsZW0pKQotCisJcmVhZF9zeF93b3JkIChib2FyZCwgTU9EVV9PRkZTRVQgKGJvYXJkLCBhZGRyLCBlbGVtKSkKIAogI2RlZmluZSBzeF93cml0ZV9ib2FyZF9ieXRlKGJvYXJkLCBlbGVtLCB2YWwpIFwKLSAgIHdyaXRlX3N4X2J5dGUgKGJvYXJkLCBCUkRfT0ZGU0VUIChib2FyZCwgZWxlbSksIHZhbCkKKwl3cml0ZV9zeF9ieXRlIChib2FyZCwgQlJEX09GRlNFVCAoYm9hcmQsIGVsZW0pLCB2YWwpCiAKICNkZWZpbmUgc3hfcmVhZF9ib2FyZF9ieXRlKGJvYXJkLCBlbGVtKSBcCi0gICByZWFkX3N4X2J5dGUgKGJvYXJkLCBCUkRfT0ZGU0VUIChib2FyZCwgZWxlbSkpCisJcmVhZF9zeF9ieXRlIChib2FyZCwgQlJEX09GRlNFVCAoYm9hcmQsIGVsZW0pKQogCiAjZGVmaW5lIHN4X3dyaXRlX2JvYXJkX3dvcmQoYm9hcmQsIGVsZW0sIHZhbCkgXAotICAgd3JpdGVfc3hfd29yZCAoYm9hcmQsIEJSRF9PRkZTRVQgKGJvYXJkLCBlbGVtKSwgdmFsKQorCXdyaXRlX3N4X3dvcmQgKGJvYXJkLCBCUkRfT0ZGU0VUIChib2FyZCwgZWxlbSksIHZhbCkKIAogI2RlZmluZSBzeF9yZWFkX2JvYXJkX3dvcmQoYm9hcmQsIGVsZW0pIFwKLSAgIHJlYWRfc3hfd29yZCAoYm9hcmQsIEJSRF9PRkZTRVQgKGJvYXJkLCBlbGVtKSkKKwlyZWFkX3N4X3dvcmQgKGJvYXJkLCBCUkRfT0ZGU0VUIChib2FyZCwgZWxlbSkpCiAKLQotc3RhdGljIGludCBzeF9zdGFydF9ib2FyZCAoc3RydWN0IHN4X2JvYXJkICpib2FyZCkKK3N0YXRpYyBpbnQgc3hfc3RhcnRfYm9hcmQoc3RydWN0IHN4X2JvYXJkICpib2FyZCkKIHsKLQlpZiAoSVNfU1hfQk9BUkQgKGJvYXJkKSkgewotCQl3cml0ZV9zeF9ieXRlIChib2FyZCwgU1hfQ09ORklHLCBTWF9DT05GX0JVU0VOKTsKKwlpZiAoSVNfU1hfQk9BUkQoYm9hcmQpKSB7CisJCXdyaXRlX3N4X2J5dGUoYm9hcmQsIFNYX0NPTkZJRywgU1hfQ09ORl9CVVNFTik7CiAJfSBlbHNlIGlmIChJU19FSVNBX0JPQVJEKGJvYXJkKSkgewogCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTSTJfRUlTQV9PRkYsIFNJMl9FSVNBX1ZBTCk7Ci0JCW91dGIoKGJvYXJkLT5pcnE8PDQpfDQsIGJvYXJkLT5laXNhX2Jhc2UrMHhjMDIpOworCQlvdXRiKChib2FyZC0+aXJxIDw8IDQpIHwgNCwgYm9hcmQtPmVpc2FfYmFzZSArIDB4YzAyKTsKIAl9IGVsc2UgaWYgKElTX1NJMV9CT0FSRChib2FyZCkpIHsKLQkJd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMV9JU0FfUkVTRVRfQ0xFQVIsIDApOwotCQl3cml0ZV9zeF9ieXRlIChib2FyZCwgU0kxX0lTQV9JTlRDTCwgMCk7CisJCXdyaXRlX3N4X2J5dGUoYm9hcmQsIFNJMV9JU0FfUkVTRVRfQ0xFQVIsIDApOworCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTSTFfSVNBX0lOVENMLCAwKTsKIAl9IGVsc2UgewogCQkvKiBEb24ndCBidWcgbWUgYWJvdXQgdGhlIGNsZWFyX3NldC4gCiAJCSAgIEkgaGF2ZW4ndCB0aGUgZm9nZ2llc3QgaWRlYSB3aGF0IGl0J3MgYWJvdXQgLS0gUkVXICovCi0JCXdyaXRlX3N4X2J5dGUgKGJvYXJkLCBTSTJfSVNBX1JFU0VULCAgICBTSTJfSVNBX1JFU0VUX0NMRUFSKTsKLQkJd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSU5UQ0xFQVIsIFNJMl9JU0FfSU5UQ0xFQVJfU0VUKTsKKwkJd3JpdGVfc3hfYnl0ZShib2FyZCwgU0kyX0lTQV9SRVNFVCwgU0kyX0lTQV9SRVNFVF9DTEVBUik7CisJCXdyaXRlX3N4X2J5dGUoYm9hcmQsIFNJMl9JU0FfSU5UQ0xFQVIsIFNJMl9JU0FfSU5UQ0xFQVJfU0VUKTsKIAl9CiAJcmV0dXJuIDE7CiB9CiAKICNkZWZpbmUgU1hfSVJRX1JFR19WQUwoYm9hcmQpIFwKLSAgICAgICAgKChib2FyZC0+ZmxhZ3MgJiBTWF9JU0FfQk9BUkQpPyhib2FyZC0+aXJxIDw8IDQpOjApCisJKChib2FyZC0+ZmxhZ3MgJiBTWF9JU0FfQk9BUkQpID8gKGJvYXJkLT5pcnEgPDwgNCkgOiAwKQogCiAvKiBOb3RlLiBUaGUgU1ggcmVnaXN0ZXIgaXMgd3JpdGUtb25seS4gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIGVuYWJsZSB0aGUKICAgIGJ1cyB0b28uIFRoaXMgaXMgYSBuby1vcCwgaWYgeW91IGRvbid0IG1lc3Mgd2l0aCB0aGlzIGRyaXZlci4uLiAqLwotc3RhdGljIGludCBzeF9zdGFydF9pbnRlcnJ1cHRzIChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkKQorc3RhdGljIGludCBzeF9zdGFydF9pbnRlcnJ1cHRzKHN0cnVjdCBzeF9ib2FyZCAqYm9hcmQpCiB7CiAKIAkvKiBEb24ndCBjYWxsIHRoaXMgd2l0aCBib2FyZC0+aXJxID09IDAgKi8KIAogCWlmIChJU19TWF9CT0FSRChib2FyZCkpIHsKLQkJd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNYX0NPTkZJRywgU1hfSVJRX1JFR19WQUwgKGJvYXJkKSB8IAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWF9DT05GX0JVU0VOIHwgCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNYX0NPTkZfSE9TVElSUSk7CisJCXdyaXRlX3N4X2J5dGUoYm9hcmQsIFNYX0NPTkZJRywgU1hfSVJRX1JFR19WQUwoYm9hcmQpIHwKKwkJCQlTWF9DT05GX0JVU0VOIHwgU1hfQ09ORl9IT1NUSVJRKTsKIAl9IGVsc2UgaWYgKElTX0VJU0FfQk9BUkQoYm9hcmQpKSB7Ci0JCWluYihib2FyZC0+ZWlzYV9iYXNlKzB4YzAzKTsgIAorCQlpbmIoYm9hcmQtPmVpc2FfYmFzZSArIDB4YzAzKTsKIAl9IGVsc2UgaWYgKElTX1NJMV9CT0FSRChib2FyZCkpIHsKLQkgICAgICAgd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMV9JU0FfSU5UQ0wsMCk7Ci0JICAgICAgIHdyaXRlX3N4X2J5dGUgKGJvYXJkLCBTSTFfSVNBX0lOVENMX0NMRUFSLDApOworCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTSTFfSVNBX0lOVENMLCAwKTsKKwkJd3JpdGVfc3hfYnl0ZShib2FyZCwgU0kxX0lTQV9JTlRDTF9DTEVBUiwgMCk7CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChib2FyZC0+aXJxKSB7Ci0JCWNhc2UgMTE6d3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSVJRMTEsIFNJMl9JU0FfSVJRMTFfU0VUKTticmVhazsKLQkJY2FzZSAxMjp3cml0ZV9zeF9ieXRlIChib2FyZCwgU0kyX0lTQV9JUlExMiwgU0kyX0lTQV9JUlExMl9TRVQpO2JyZWFrOwotCQljYXNlIDE1OndyaXRlX3N4X2J5dGUgKGJvYXJkLCBTSTJfSVNBX0lSUTE1LCBTSTJfSVNBX0lSUTE1X1NFVCk7YnJlYWs7Ci0JCWRlZmF1bHQ6cHJpbnRrIChLRVJOX0lORk8gInN4OiBTSS9YSU8gY2FyZCBkb2Vzbid0IHN1cHBvcnQgaW50ZXJydXB0ICVkLlxuIiwgCi0JCSAgICAgICAgICAgICAgICBib2FyZC0+aXJxKTsKLQkJcmV0dXJuIDA7CisJCWNhc2UgMTE6CisJCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTSTJfSVNBX0lSUTExLCBTSTJfSVNBX0lSUTExX1NFVCk7CisJCQlicmVhazsKKwkJY2FzZSAxMjoKKwkJCXdyaXRlX3N4X2J5dGUoYm9hcmQsIFNJMl9JU0FfSVJRMTIsIFNJMl9JU0FfSVJRMTJfU0VUKTsKKwkJCWJyZWFrOworCQljYXNlIDE1OgorCQkJd3JpdGVfc3hfYnl0ZShib2FyZCwgU0kyX0lTQV9JUlExNSwgU0kyX0lTQV9JUlExNV9TRVQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9JTkZPICJzeDogU0kvWElPIGNhcmQgZG9lc24ndCBzdXBwb3J0ICIKKwkJCQkJImludGVycnVwdCAlZC5cbiIsIGJvYXJkLT5pcnEpOworCQkJcmV0dXJuIDA7CiAJCX0KLQkJd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSU5UQ0xFQVIsIFNJMl9JU0FfSU5UQ0xFQVJfU0VUKTsKKwkJd3JpdGVfc3hfYnl0ZShib2FyZCwgU0kyX0lTQV9JTlRDTEVBUiwgU0kyX0lTQV9JTlRDTEVBUl9TRVQpOwogCX0KIAogCXJldHVybiAxOwogfQogCi0KLXN0YXRpYyBpbnQgc3hfc2VuZF9jb21tYW5kIChzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCwgCi0gICAgICAgICAgICAgICAgICAgICAJICAgIGludCBjb21tYW5kLCBpbnQgbWFzaywgaW50IG5ld3N0YXQpCitzdGF0aWMgaW50IHN4X3NlbmRfY29tbWFuZChzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCwKKwkJaW50IGNvbW1hbmQsIGludCBtYXNrLCBpbnQgbmV3c3RhdCkKIHsKLQlmdW5jX2VudGVyMiAoKTsKLQl3cml0ZV9zeF9ieXRlIChwb3J0LT5ib2FyZCwgQ0hBTl9PRkZTRVQgKHBvcnQsIGhpX2hzdGF0KSwgY29tbWFuZCk7Ci0JZnVuY19leGl0ICgpOwotCXJldHVybiBzeF9idXN5X3dhaXRfZXEgKHBvcnQtPmJvYXJkLCBDSEFOX09GRlNFVCAocG9ydCwgaGlfaHN0YXQpLCBtYXNrLCBuZXdzdGF0KTsKKwlmdW5jX2VudGVyMigpOworCXdyaXRlX3N4X2J5dGUocG9ydC0+Ym9hcmQsIENIQU5fT0ZGU0VUKHBvcnQsIGhpX2hzdGF0KSwgY29tbWFuZCk7CisJZnVuY19leGl0KCk7CisJcmV0dXJuIHN4X2J1c3lfd2FpdF9lcShwb3J0LT5ib2FyZCwgQ0hBTl9PRkZTRVQocG9ydCwgaGlfaHN0YXQpLCBtYXNrLAorCQkJbmV3c3RhdCk7CiB9CiAKLQotc3RhdGljIGNoYXIgKm1vZF90eXBlX3MgKGludCBtb2R1bGVfdHlwZSkKK3N0YXRpYyBjaGFyICptb2RfdHlwZV9zKGludCBtb2R1bGVfdHlwZSkKIHsKIAlzd2l0Y2ggKG1vZHVsZV90eXBlKSB7Ci0JY2FzZSBUQTQ6ICAgICAgIHJldHVybiAiVEE0IjsKLQljYXNlIFRBODogICAgICAgcmV0dXJuICJUQTgiOwotCWNhc2UgVEE0X0FTSUM6ICByZXR1cm4gIlRBNF9BU0lDIjsKLQljYXNlIFRBOF9BU0lDOiAgcmV0dXJuICJUQThfQVNJQyI7Ci0JY2FzZSBNVEFfQ0QxNDAwOnJldHVybiAiTVRBX0NEMTQwMCI7Ci0JY2FzZSBTWERDOiAgICAgIHJldHVybiAiU1hEQyI7Ci0JZGVmYXVsdDpyZXR1cm4gIlVua25vd24vaW52YWxpZCI7CisJY2FzZSBUQTQ6CisJCXJldHVybiAiVEE0IjsKKwljYXNlIFRBODoKKwkJcmV0dXJuICJUQTgiOworCWNhc2UgVEE0X0FTSUM6CisJCXJldHVybiAiVEE0X0FTSUMiOworCWNhc2UgVEE4X0FTSUM6CisJCXJldHVybiAiVEE4X0FTSUMiOworCWNhc2UgTVRBX0NEMTQwMDoKKwkJcmV0dXJuICJNVEFfQ0QxNDAwIjsKKwljYXNlIFNYREM6CisJCXJldHVybiAiU1hEQyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVbmtub3duL2ludmFsaWQiOwogCX0KIH0KIAotCi1zdGF0aWMgY2hhciAqcGFuX3R5cGVfcyAoaW50IHBhbl90eXBlKQorc3RhdGljIGNoYXIgKnBhbl90eXBlX3MoaW50IHBhbl90eXBlKQogewogCXN3aXRjaCAocGFuX3R5cGUpIHsKLQljYXNlIE1PRF9SUzIzMkRCMjU6ICAgICByZXR1cm4gIk1PRF9SUzIzMkRCMjUiOwotCWNhc2UgTU9EX1JTMjMyUko0NTogICAgIHJldHVybiAiTU9EX1JTMjMyUko0NSI7Ci0JY2FzZSBNT0RfUlM0MjJEQjI1OiAgICAgcmV0dXJuICJNT0RfUlM0MjJEQjI1IjsKLQljYXNlIE1PRF9QQVJBTExFTDogICAgICByZXR1cm4gIk1PRF9QQVJBTExFTCI7Ci0JY2FzZSBNT0RfMl9SUzIzMkRCMjU6ICAgcmV0dXJuICJNT0RfMl9SUzIzMkRCMjUiOwotCWNhc2UgTU9EXzJfUlMyMzJSSjQ1OiAgIHJldHVybiAiTU9EXzJfUlMyMzJSSjQ1IjsKLQljYXNlIE1PRF8yX1JTNDIyREIyNTogICByZXR1cm4gIk1PRF8yX1JTNDIyREIyNSI7Ci0JY2FzZSBNT0RfUlMyMzJEQjI1TUFMRTogcmV0dXJuICJNT0RfUlMyMzJEQjI1TUFMRSI7Ci0JY2FzZSBNT0RfMl9QQVJBTExFTDogICAgcmV0dXJuICJNT0RfMl9QQVJBTExFTCI7Ci0JY2FzZSBNT0RfQkxBTks6ICAgICAgICAgcmV0dXJuICJlbXB0eSI7Ci0JZGVmYXVsdDpyZXR1cm4gImludmFsaWQiOworCWNhc2UgTU9EX1JTMjMyREIyNToKKwkJcmV0dXJuICJNT0RfUlMyMzJEQjI1IjsKKwljYXNlIE1PRF9SUzIzMlJKNDU6CisJCXJldHVybiAiTU9EX1JTMjMyUko0NSI7CisJY2FzZSBNT0RfUlM0MjJEQjI1OgorCQlyZXR1cm4gIk1PRF9SUzQyMkRCMjUiOworCWNhc2UgTU9EX1BBUkFMTEVMOgorCQlyZXR1cm4gIk1PRF9QQVJBTExFTCI7CisJY2FzZSBNT0RfMl9SUzIzMkRCMjU6CisJCXJldHVybiAiTU9EXzJfUlMyMzJEQjI1IjsKKwljYXNlIE1PRF8yX1JTMjMyUko0NToKKwkJcmV0dXJuICJNT0RfMl9SUzIzMlJKNDUiOworCWNhc2UgTU9EXzJfUlM0MjJEQjI1OgorCQlyZXR1cm4gIk1PRF8yX1JTNDIyREIyNSI7CisJY2FzZSBNT0RfUlMyMzJEQjI1TUFMRToKKwkJcmV0dXJuICJNT0RfUlMyMzJEQjI1TUFMRSI7CisJY2FzZSBNT0RfMl9QQVJBTExFTDoKKwkJcmV0dXJuICJNT0RfMl9QQVJBTExFTCI7CisJY2FzZSBNT0RfQkxBTks6CisJCXJldHVybiAiZW1wdHkiOworCWRlZmF1bHQ6CisJCXJldHVybiAiaW52YWxpZCI7CiAJfQogfQogCi0KLXN0YXRpYyBpbnQgbW9kX2NvbXBhdF90eXBlIChpbnQgbW9kdWxlX3R5cGUpCitzdGF0aWMgaW50IG1vZF9jb21wYXRfdHlwZShpbnQgbW9kdWxlX3R5cGUpCiB7CiAJcmV0dXJuIG1vZHVsZV90eXBlID4+IDQ7CiB9CiAKIHN0YXRpYyB2b2lkIHN4X3JlY29uZmlndXJlX3BvcnQoc3RydWN0IHN4X3BvcnQgKnBvcnQpCiB7Ci0JaWYgKHN4X3JlYWRfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9oc3RhdCkgPT0gSFNfSURMRV9PUEVOKSB7Ci0JCWlmIChzeF9zZW5kX2NvbW1hbmQgKHBvcnQsIEhTX0NPTkZJRywgLTEsIEhTX0lETEVfT1BFTikgIT0gMSkgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInN4OiBTZW50IHJlY29uZmlndXJlIGNvbW1hbmQsIGJ1dCBjYXJkIGRpZG4ndCByZWFjdC5cbiIpOworCWlmIChzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9oc3RhdCkgPT0gSFNfSURMRV9PUEVOKSB7CisJCWlmIChzeF9zZW5kX2NvbW1hbmQocG9ydCwgSFNfQ09ORklHLCAtMSwgSFNfSURMRV9PUEVOKSAhPSAxKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeDogU2VudCByZWNvbmZpZ3VyZSBjb21tYW5kLCBidXQgIgorCQkJCQkiY2FyZCBkaWRuJ3QgcmVhY3QuXG4iKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXN4X2RwcmludGsgKFNYX0RFQlVHX1RFUk1JT1MsIAotCQkgICAgICAgICAgICAic3g6IE5vdCBzZW5kaW5nIHJlY29uZmlndXJlOiBwb3J0IGlzbid0IG9wZW4gKCUwMngpLlxuIiwgCi0JCSAgICAgICAgICAgIHN4X3JlYWRfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9oc3RhdCkpOwotCX0JCisJCXN4X2RwcmludGsoU1hfREVCVUdfVEVSTUlPUywgInN4OiBOb3Qgc2VuZGluZyByZWNvbmZpZ3VyZTogIgorCQkJCSJwb3J0IGlzbid0IG9wZW4gKCUwMngpLlxuIiwKKwkJCQlzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9oc3RhdCkpOworCX0KIH0KIAotc3RhdGljIHZvaWQgc3hfc2V0c2lnbmFscyAoc3RydWN0IHN4X3BvcnQgKnBvcnQsIGludCBkdHIsIGludCBydHMpCitzdGF0aWMgdm9pZCBzeF9zZXRzaWduYWxzKHN0cnVjdCBzeF9wb3J0ICpwb3J0LCBpbnQgZHRyLCBpbnQgcnRzKQogewogCWludCB0OwotCWZ1bmNfZW50ZXIyICgpOworCWZ1bmNfZW50ZXIyKCk7CiAKLQl0ID0gc3hfcmVhZF9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX29wKTsKLQlpZiAoZHRyID49IDApIHQgPSBkdHI/ICh0IHwgT1BfRFRSKTogKHQgJiB+T1BfRFRSKTsKLQlpZiAocnRzID49IDApIHQgPSBydHM/ICh0IHwgT1BfUlRTKTogKHQgJiB+T1BfUlRTKTsKLQlzeF93cml0ZV9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX29wLCB0KTsKLQlzeF9kcHJpbnRrIChTWF9ERUJVR19NT0RFTVNJR05BTFMsICJzZXRzaWduYWxzOiAlZC8lZFxuIiwgZHRyLCBydHMpOworCXQgPSBzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9vcCk7CisJaWYgKGR0ciA+PSAwKQorCQl0ID0gZHRyID8gKHQgfCBPUF9EVFIpIDogKHQgJiB+T1BfRFRSKTsKKwlpZiAocnRzID49IDApCisJCXQgPSBydHMgPyAodCB8IE9QX1JUUykgOiAodCAmIH5PUF9SVFMpOworCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9vcCwgdCk7CisJc3hfZHByaW50ayhTWF9ERUJVR19NT0RFTVNJR05BTFMsICJzZXRzaWduYWxzOiAlZC8lZFxuIiwgZHRyLCBydHMpOwogCi0JZnVuY19leGl0ICgpOworCWZ1bmNfZXhpdCgpOwogfQogCi0KLQotc3RhdGljIGludCBzeF9nZXRzaWduYWxzIChzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgc3hfZ2V0c2lnbmFscyhzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCkKIHsKLQlpbnQgaV9zdGF0LG9fc3RhdDsKKwlpbnQgaV9zdGF0LCBvX3N0YXQ7CiAKLQlvX3N0YXQgPSBzeF9yZWFkX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfb3ApOwotCWlfc3RhdCA9IHN4X3JlYWRfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9pcCk7CisJb19zdGF0ID0gc3hfcmVhZF9jaGFubmVsX2J5dGUocG9ydCwgaGlfb3ApOworCWlfc3RhdCA9IHN4X3JlYWRfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX2lwKTsKIAotCXN4X2RwcmludGsgKFNYX0RFQlVHX01PREVNU0lHTkFMUywgImdldHNpZ25hbHM6ICVkLyVkICAoJWQvJWQpICUwMngvJTAyeFxuIiwKLQkgICAgICAgICAgICAob19zdGF0ICYgT1BfRFRSKSAhPSAwLCAob19zdGF0ICYgT1BfUlRTKSAhPSAwLAotCSAgICAgICAgICAgIHBvcnQtPmNfZGNkLCBzeF9nZXRfQ0QgKHBvcnQpLAotCSAgICAgICAgICAgIHN4X3JlYWRfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9pcCksCi0JICAgICAgICAgICAgc3hfcmVhZF9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX3N0YXRlKSk7CisJc3hfZHByaW50ayhTWF9ERUJVR19NT0RFTVNJR05BTFMsICJnZXRzaWduYWxzOiAlZC8lZCAgKCVkLyVkKSAiCisJCQkiJTAyeC8lMDJ4XG4iLAorCQkJKG9fc3RhdCAmIE9QX0RUUikgIT0gMCwgKG9fc3RhdCAmIE9QX1JUUykgIT0gMCwKKwkJCXBvcnQtPmNfZGNkLCBzeF9nZXRfQ0QocG9ydCksCisJCQlzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9pcCksCisJCQlzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9zdGF0ZSkpOwogCi0JcmV0dXJuICgoKG9fc3RhdCAmIE9QX0RUUik/VElPQ01fRFRSOjApIHwKLQkgICAgICAgICgob19zdGF0ICYgT1BfUlRTKT9USU9DTV9SVFM6MCkgfAotCSAgICAgICAgKChpX3N0YXQgJiBJUF9DVFMpP1RJT0NNX0NUUzowKSB8Ci0JICAgICAgICAoKGlfc3RhdCAmIElQX0RDRCk/VElPQ01fQ0FSOjApIHwKLQkgICAgICAgICgoaV9zdGF0ICYgSVBfRFNSKT9USU9DTV9EU1I6MCkgfAotCSAgICAgICAgKChpX3N0YXQgJiBJUF9SSSk/VElPQ01fUk5HOjApCi0JICAgICAgICApOworCXJldHVybiAoKChvX3N0YXQgJiBPUF9EVFIpID8gVElPQ01fRFRSIDogMCkgfAorCQkoKG9fc3RhdCAmIE9QX1JUUykgPyBUSU9DTV9SVFMgOiAwKSB8CisJCSgoaV9zdGF0ICYgSVBfQ1RTKSA/IFRJT0NNX0NUUyA6IDApIHwKKwkJKChpX3N0YXQgJiBJUF9EQ0QpID8gVElPQ01fQ0FSIDogMCkgfAorCQkoKGlfc3RhdCAmIElQX0RTUikgPyBUSU9DTV9EU1IgOiAwKSB8CisJCSgoaV9zdGF0ICYgSVBfUkkpID8gVElPQ01fUk5HIDogMCkpOwogfQogCi0KLXN0YXRpYyB2b2lkIHN4X3NldF9iYXVkIChzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIHN4X3NldF9iYXVkKHN0cnVjdCBzeF9wb3J0ICpwb3J0KQogewogCWludCB0OwogCiAJaWYgKHBvcnQtPmJvYXJkLT50YV90eXBlID09IE1PRF9TWERDKSB7CiAJCXN3aXRjaCAocG9ydC0+Z3MuYmF1ZCkgewotCQkgIC8qIFNhdmUgc29tZSB0eXBpbmcgd29yay4uLiAqLwotI2RlZmluZSBlKHgpIGNhc2UgeDp0PSBCQVVEXyAjIyB4IDsgYnJlYWsKLQkJCWUoNTApO2UoNzUpO2UoMTEwKTtlKDE1MCk7ZSgyMDApO2UoMzAwKTtlKDYwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlKDEyMDApO2UoMTgwMCk7ZSgyMDAwKTtlKDI0MDApO2UoNDgwMCk7ZSg3MjAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGUoOTYwMCk7ZSgxNDQwMCk7ZSgxOTIwMCk7ZSgyODgwMCk7ZSgzODQwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlKDU2MDAwKTtlKDU3NjAwKTtlKDY0MDAwKTtlKDc2ODAwKTtlKDExNTIwMCk7Ci0JCQllKDEyODAwMCk7ZSgxNTAwMDApO2UoMjMwNDAwKTtlKDI1NjAwMCk7ZSg0NjA4MDApOwotICAgICAgICAgICAgICAgICAgICAgICAgZSg5MjE2MDApOwotCQljYXNlIDEzNCAgICA6dCA9IEJBVURfMTM0XzU7ICAgYnJlYWs7Ci0JCWNhc2UgMCAgICAgIDp0ID0gLTE7Ci0JCQkJCQkJCSBicmVhazsKKwkJCS8qIFNhdmUgc29tZSB0eXBpbmcgd29yay4uLiAqLworI2RlZmluZSBlKHgpIGNhc2UgeDogdCA9IEJBVURfICMjIHg7IGJyZWFrCisJCQllKDUwKTsKKwkJCWUoNzUpOworCQkJZSgxMTApOworCQkJZSgxNTApOworCQkJZSgyMDApOworCQkJZSgzMDApOworCQkJZSg2MDApOworCQkJZSgxMjAwKTsKKwkJCWUoMTgwMCk7CisJCQllKDIwMDApOworCQkJZSgyNDAwKTsKKwkJCWUoNDgwMCk7CisJCQllKDcyMDApOworCQkJZSg5NjAwKTsKKwkJCWUoMTQ0MDApOworCQkJZSgxOTIwMCk7CisJCQllKDI4ODAwKTsKKwkJCWUoMzg0MDApOworCQkJZSg1NjAwMCk7CisJCQllKDU3NjAwKTsKKwkJCWUoNjQwMDApOworCQkJZSg3NjgwMCk7CisJCQllKDExNTIwMCk7CisJCQllKDEyODAwMCk7CisJCQllKDE1MDAwMCk7CisJCQllKDIzMDQwMCk7CisJCQllKDI1NjAwMCk7CisJCQllKDQ2MDgwMCk7CisJCQllKDkyMTYwMCk7CisJCWNhc2UgMTM0OgorCQkJdCA9IEJBVURfMTM0XzU7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJdCA9IC0xOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBDYW4gSSByZXR1cm4gImludmFsaWQiPyAqLwogCQkJdCA9IEJBVURfOTYwMDsKLQkJCXByaW50ayAoS0VSTl9JTkZPICJzeDogdW5zdXBwb3J0ZWQgYmF1ZCByYXRlOiAlZC5cbiIsIHBvcnQtPmdzLmJhdWQpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAic3g6IHVuc3VwcG9ydGVkIGJhdWQgcmF0ZTogJWQuXG4iLAorCQkJCQlwb3J0LT5ncy5iYXVkKTsKIAkJCWJyZWFrOwogCQl9CiAjdW5kZWYgZQogCQlpZiAodCA+IDApIHsKLQkJCS8qIFRoZSBiYXVkIHJhdGUgaXMgbm90IHNldCB0byAwLCBzbyB3ZSdyZSBlbmFiZWxpbmcgRFRSLi4uIC0tIFJFVyAqLwotCQkJc3hfc2V0c2lnbmFscyAocG9ydCwgMSwgLTEpOyAKKy8qIFRoZSBiYXVkIHJhdGUgaXMgbm90IHNldCB0byAwLCBzbyB3ZSdyZSBlbmFiZWxpbmcgRFRSLi4uIC0tIFJFVyAqLworCQkJc3hfc2V0c2lnbmFscyhwb3J0LCAxLCAtMSk7CiAJCQkvKiBYWFggVGhpcyBpcyBub3QgVEEgJiBNVEEgY29tcGF0aWJsZSAqLwotCQkJc3hfd3JpdGVfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9jc3IsIDB4ZmYpOworCQkJc3hfd3JpdGVfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX2NzciwgMHhmZik7CiAKLQkJCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfdHhiYXVkLCB0KTsKLQkJCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfcnhiYXVkLCB0KTsKKwkJCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV90eGJhdWQsIHQpOworCQkJc3hfd3JpdGVfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX3J4YmF1ZCwgdCk7CiAJCX0gZWxzZSB7Ci0JCQlzeF9zZXRzaWduYWxzIChwb3J0LCAwLCAtMSk7CisJCQlzeF9zZXRzaWduYWxzKHBvcnQsIDAsIC0xKTsKIAkJfQogCX0gZWxzZSB7CiAJCXN3aXRjaCAocG9ydC0+Z3MuYmF1ZCkgewotI2RlZmluZSBlKHgpIGNhc2UgeDp0PSBDU1JfICMjIHggOyBicmVhawotCQkJZSg3NSk7ZSgxNTApO2UoMzAwKTtlKDYwMCk7ZSgxMjAwKTtlKDI0MDApO2UoNDgwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlKDE4MDApO2UoOTYwMCk7Ci0JCQllKDE5MjAwKTtlKDU3NjAwKTtlKDM4NDAwKTsKLQkJCS8qIFRBIHN1cHBvcnRzIDExMCwgYnV0IG5vdCAxMTUyMDAsIE1UQSBzdXBwb3J0cyAxMTUyMDAsIGJ1dCBub3QgMTEwICovCi0JCWNhc2UgMTEwOiAKKyNkZWZpbmUgZSh4KSBjYXNlIHg6IHQgPSBDU1JfICMjIHg7IGJyZWFrCisJCQllKDc1KTsKKwkJCWUoMTUwKTsKKwkJCWUoMzAwKTsKKwkJCWUoNjAwKTsKKwkJCWUoMTIwMCk7CisJCQllKDI0MDApOworCQkJZSg0ODAwKTsKKwkJCWUoMTgwMCk7CisJCQllKDk2MDApOworCQkJZSgxOTIwMCk7CisJCQllKDU3NjAwKTsKKwkJCWUoMzg0MDApOworLyogVEEgc3VwcG9ydHMgMTEwLCBidXQgbm90IDExNTIwMCwgTVRBIHN1cHBvcnRzIDExNTIwMCwgYnV0IG5vdCAxMTAgKi8KKwkJY2FzZSAxMTA6CiAJCQlpZiAocG9ydC0+Ym9hcmQtPnRhX3R5cGUgPT0gTU9EX1RBKSB7CiAJCQkJdCA9IENTUl8xMTA7CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgewogCQkJCXQgPSBDU1JfOTYwMDsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyAic3g6IFVuc3VwcG9ydGVkIGJhdWQgcmF0ZTogJWQuXG4iLCBwb3J0LT5ncy5iYXVkKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJzeDogVW5zdXBwb3J0ZWQgYmF1ZCByYXRlOiAiCisJCQkJCQkiJWQuXG4iLCBwb3J0LT5ncy5iYXVkKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJY2FzZSAxMTUyMDA6IAorCQljYXNlIDExNTIwMDoKIAkJCWlmIChwb3J0LT5ib2FyZC0+dGFfdHlwZSA9PSBNT0RfVEEpIHsKIAkJCQl0ID0gQ1NSXzk2MDA7Ci0JCQkJcHJpbnRrIChLRVJOX0lORk8gInN4OiBVbnN1cHBvcnRlZCBiYXVkIHJhdGU6ICVkLlxuIiwgcG9ydC0+Z3MuYmF1ZCk7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAic3g6IFVuc3VwcG9ydGVkIGJhdWQgcmF0ZTogIgorCQkJCQkJIiVkLlxuIiwgcG9ydC0+Z3MuYmF1ZCk7CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgewogCQkJCXQgPSBDU1JfMTEwOwogCQkJCWJyZWFrOwogCQkJfQotCQljYXNlIDAgICAgICA6dCA9IC0xOwotCQkJCQkJCQkgYnJlYWs7CisJCWNhc2UgMDoKKwkJCXQgPSAtMTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJdCA9IENTUl85NjAwOwotCQkJcHJpbnRrIChLRVJOX0lORk8gInN4OiBVbnN1cHBvcnRlZCBiYXVkIHJhdGU6ICVkLlxuIiwgcG9ydC0+Z3MuYmF1ZCk7CisJCQlwcmludGsoS0VSTl9JTkZPICJzeDogVW5zdXBwb3J0ZWQgYmF1ZCByYXRlOiAlZC5cbiIsCisJCQkJCXBvcnQtPmdzLmJhdWQpOwogCQkJYnJlYWs7CiAJCX0KICN1bmRlZiBlCiAJCWlmICh0ID49IDApIHsKLQkJCXN4X3NldHNpZ25hbHMgKHBvcnQsIDEsIC0xKTsKLQkJCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfY3NyLCB0ICogMHgxMSk7CisJCQlzeF9zZXRzaWduYWxzKHBvcnQsIDEsIC0xKTsKKwkJCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9jc3IsIHQgKiAweDExKTsKIAkJfSBlbHNlIHsKLQkJCXN4X3NldHNpZ25hbHMgKHBvcnQsIDAsIC0xKTsKKwkJCXN4X3NldHNpZ25hbHMocG9ydCwgMCwgLTEpOwogCQl9CiAJfQogfQogCi0KIC8qIFNpbW9uIEFsbGVuJ3MgdmVyc2lvbiBvZiB0aGlzIHJvdXRpbmUgd2FzIDIyNSBsaW5lcyBsb25nLiA4NSBpcyBhIGxvdAogICAgYmV0dGVyLiAtLSBSRVcgKi8KIAotc3RhdGljIGludCBzeF9zZXRfcmVhbF90ZXJtaW9zICh2b2lkICpwdHIpCitzdGF0aWMgaW50IHN4X3NldF9yZWFsX3Rlcm1pb3Modm9pZCAqcHRyKQogewogCXN0cnVjdCBzeF9wb3J0ICpwb3J0ID0gcHRyOwogCkBAIC05MDcsODAgKzkzOSw4MyBAQAogCSAgIGJlbG9uZ3MgKG5leHQgdG8gdGhlIGRyb3AgZHRyIGlmIGJhdWQgPT0gMCkgLS0gUkVXICovCiAJLyogc3hfc2V0c2lnbmFscyAocG9ydCwgMSwgLTEpOyAqLwogCi0Jc3hfc2V0X2JhdWQgKHBvcnQpOworCXN4X3NldF9iYXVkKHBvcnQpOwogCiAjZGVmaW5lIENGTEFHIHBvcnQtPmdzLnR0eS0+dGVybWlvcy0+Y19jZmxhZwotCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfbXIxLAotCSAgICAgICAgICAgICAgICAgICAgICAgKENfUEFSRU5CIChwb3J0LT5ncy50dHkpPyBNUjFfV0lUSDpNUjFfTk9ORSkgfAotCSAgICAgICAgICAgICAgICAgICAgICAgKENfUEFST0REIChwb3J0LT5ncy50dHkpPyBNUjFfT0REOk1SMV9FVkVOKSB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAoQ19DUlRTQ1RTKHBvcnQtPmdzLnR0eSk/IE1SMV9SVFNfUlhGTE9XOjApIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICgoKENGTEFHICYgQ1NJWkUpPT1DUzgpID8gTVIxXzhfQklUUzowKSB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAoKChDRkxBRyAmIENTSVpFKT09Q1M3KSA/IE1SMV83X0JJVFM6MCkgfAotCSAgICAgICAgICAgICAgICAgICAgICAgKCgoQ0ZMQUcgJiBDU0laRSk9PUNTNikgPyBNUjFfNl9CSVRTOjApIHwKLQkgICAgICAgICAgICAgICAgICAgICAgICgoKENGTEFHICYgQ1NJWkUpPT1DUzUpID8gTVIxXzVfQklUUzowKSApOworCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9tcjEsCisJCQkoQ19QQVJFTkIocG9ydC0+Z3MudHR5KSA/IE1SMV9XSVRIIDogTVIxX05PTkUpIHwKKwkJCShDX1BBUk9ERChwb3J0LT5ncy50dHkpID8gTVIxX09ERCA6IE1SMV9FVkVOKSB8CisJCQkoQ19DUlRTQ1RTKHBvcnQtPmdzLnR0eSkgPyBNUjFfUlRTX1JYRkxPVyA6IDApIHwKKwkJCSgoKENGTEFHICYgQ1NJWkUpID09IENTOCkgPyBNUjFfOF9CSVRTIDogMCkgfAorCQkJKCgoQ0ZMQUcgJiBDU0laRSkgPT0gQ1M3KSA/IE1SMV83X0JJVFMgOiAwKSB8CisJCQkoKChDRkxBRyAmIENTSVpFKSA9PSBDUzYpID8gTVIxXzZfQklUUyA6IDApIHwKKwkJCSgoKENGTEFHICYgQ1NJWkUpID09IENTNSkgPyBNUjFfNV9CSVRTIDogMCkpOwogCi0Jc3hfd3JpdGVfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9tcjIsCi0JICAgICAgICAgICAgICAgICAgICAgICAoQ19DUlRTQ1RTKHBvcnQtPmdzLnR0eSk/TVIyX0NUU19UWEZMT1c6MCkgfAotCSAgICAgICAgICAgICAgICAgICAgICAgKENfQ1NUT1BCIChwb3J0LT5ncy50dHkpP01SMl8yX1NUT1A6TVIyXzFfU1RPUCkpOworCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9tcjIsCisJCQkoQ19DUlRTQ1RTKHBvcnQtPmdzLnR0eSkgPyBNUjJfQ1RTX1RYRkxPVyA6IDApIHwKKwkJCShDX0NTVE9QQihwb3J0LT5ncy50dHkpID8gTVIyXzJfU1RPUCA6CisJCQlNUjJfMV9TVE9QKSk7CiAKIAlzd2l0Y2ggKENGTEFHICYgQ1NJWkUpIHsKLQljYXNlIENTODpzeF93cml0ZV9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX21hc2ssIDB4ZmYpO2JyZWFrOwotCWNhc2UgQ1M3OnN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfbWFzaywgMHg3Zik7YnJlYWs7Ci0JY2FzZSBDUzY6c3hfd3JpdGVfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9tYXNrLCAweDNmKTticmVhazsKLQljYXNlIENTNTpzeF93cml0ZV9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX21hc2ssIDB4MWYpO2JyZWFrOworCWNhc2UgQ1M4OgorCQlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfbWFzaywgMHhmZik7CisJCWJyZWFrOworCWNhc2UgQ1M3OgorCQlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfbWFzaywgMHg3Zik7CisJCWJyZWFrOworCWNhc2UgQ1M2OgorCQlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfbWFzaywgMHgzZik7CisJCWJyZWFrOworCWNhc2UgQ1M1OgorCQlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfbWFzaywgMHgxZik7CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayAoS0VSTl9JTkZPICJzeDogSW52YWxpZCB3b3Jkc2l6ZTogJXVcbiIsIENGTEFHICYgQ1NJWkUpOworCQlwcmludGsoS0VSTl9JTkZPICJzeDogSW52YWxpZCB3b3Jkc2l6ZTogJXVcbiIsIENGTEFHICYgQ1NJWkUpOwogCQlicmVhazsKIAl9CiAKLQlzeF93cml0ZV9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX3BydGNsLCAKLQkgICAgICAgICAgICAgICAgICAgICAgIChJX0lYT04gICAocG9ydC0+Z3MudHR5KT9TUF9UWEVOOjApIHwKLQkgICAgICAgICAgICAgICAgICAgICAgIChJX0lYT0ZGICAocG9ydC0+Z3MudHR5KT9TUF9SWEVOOjApIHwKLQkgICAgICAgICAgICAgICAgICAgICAgIChJX0lYQU5ZICAocG9ydC0+Z3MudHR5KT9TUF9UQU5ZOjApIHwKLQkgICAgICAgICAgICAgICAgICAgICAgIFNQX0RDRU4pOworCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9wcnRjbCwKKwkJCShJX0lYT04ocG9ydC0+Z3MudHR5KSA/IFNQX1RYRU4gOiAwKSB8CisJCQkoSV9JWE9GRihwb3J0LT5ncy50dHkpID8gU1BfUlhFTiA6IDApIHwKKwkJCShJX0lYQU5ZKHBvcnQtPmdzLnR0eSkgPyBTUF9UQU5ZIDogMCkgfCBTUF9EQ0VOKTsKIAotCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfYnJlYWssIAotCSAgICAgICAgICAgICAgICAgICAgICAgKElfSUdOQlJLKHBvcnQtPmdzLnR0eSk/QlJfSUdOOjAgfAotCSAgICAgICAgICAgICAgICAgICAgICAgIElfQlJLSU5UKHBvcnQtPmdzLnR0eSk/QlJfSU5UOjApKTsKKwlzeF93cml0ZV9jaGFubmVsX2J5dGUocG9ydCwgaGlfYnJlYWssCisJCQkoSV9JR05CUksocG9ydC0+Z3MudHR5KSA/IEJSX0lHTiA6IDAgfAorCQkJSV9CUktJTlQocG9ydC0+Z3MudHR5KSA/IEJSX0lOVCA6IDApKTsKIAotCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfdHhvbiwgIFNUQVJUX0NIQVIgKHBvcnQtPmdzLnR0eSkpOwotCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfcnhvbiwgIFNUQVJUX0NIQVIgKHBvcnQtPmdzLnR0eSkpOwotCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfdHhvZmYsIFNUT1BfQ0hBUiAgKHBvcnQtPmdzLnR0eSkpOwotCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfcnhvZmYsIFNUT1BfQ0hBUiAgKHBvcnQtPmdzLnR0eSkpOworCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV90eG9uLCBTVEFSVF9DSEFSKHBvcnQtPmdzLnR0eSkpOworCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9yeG9uLCBTVEFSVF9DSEFSKHBvcnQtPmdzLnR0eSkpOworCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV90eG9mZiwgU1RPUF9DSEFSKHBvcnQtPmdzLnR0eSkpOworCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9yeG9mZiwgU1RPUF9DSEFSKHBvcnQtPmdzLnR0eSkpOwogCiAJc3hfcmVjb25maWd1cmVfcG9ydChwb3J0KTsKIAogCS8qIFRlbGwgbGluZSBkaXNjaXBsaW5lIHdoZXRoZXIgd2Ugd2lsbCBkbyBpbnB1dCBjb29raW5nICovCi0JaWYoSV9PVEhFUihwb3J0LT5ncy50dHkpKSB7CisJaWYgKElfT1RIRVIocG9ydC0+Z3MudHR5KSkgewogCQljbGVhcl9iaXQoVFRZX0hXX0NPT0tfSU4sICZwb3J0LT5ncy50dHktPmZsYWdzKTsKIAl9IGVsc2UgewogCQlzZXRfYml0KFRUWV9IV19DT09LX0lOLCAmcG9ydC0+Z3MudHR5LT5mbGFncyk7CiAJfQotCXN4X2RwcmludGsgKFNYX0RFQlVHX1RFUk1JT1MsICJpZmxhZ3M6ICV4KCVkKSAiLAotCSAgICAgICAgICAgIHBvcnQtPmdzLnR0eS0+dGVybWlvcy0+Y19pZmxhZywgCi0JICAgICAgICAgICAgSV9PVEhFUihwb3J0LT5ncy50dHkpKTsKLQorCXN4X2RwcmludGsoU1hfREVCVUdfVEVSTUlPUywgImlmbGFnczogJXgoJWQpICIsCisJCQlwb3J0LT5ncy50dHktPnRlcm1pb3MtPmNfaWZsYWcsIElfT1RIRVIocG9ydC0+Z3MudHR5KSk7CiAKIC8qIFRlbGwgbGluZSBkaXNjaXBsaW5lIHdoZXRoZXIgd2Ugd2lsbCBkbyBvdXRwdXQgY29va2luZy4KICAqIElmIE9QT1NUIGlzIHNldCBhbmQgbm8gb3RoZXIgb3V0cHV0IGZsYWdzIGFyZSBzZXQgdGhlbiB3ZSBjYW4gZG8gb3V0cHV0CiAgKiBwcm9jZXNzaW5nLiAgRXZlbiBpZiBvbmx5ICpvbmUqIG90aGVyIGZsYWcgaW4gdGhlIE9fT1RIRVIgZ3JvdXAgaXMgc2V0CiAgKiB3ZSBkbyBjb29raW5nIGluIHNvZnR3YXJlLgogICovCi0JaWYoT19PUE9TVChwb3J0LT5ncy50dHkpICYmICFPX09USEVSKHBvcnQtPmdzLnR0eSkpIHsKKwlpZiAoT19PUE9TVChwb3J0LT5ncy50dHkpICYmICFPX09USEVSKHBvcnQtPmdzLnR0eSkpIHsKIAkJc2V0X2JpdChUVFlfSFdfQ09PS19PVVQsICZwb3J0LT5ncy50dHktPmZsYWdzKTsKIAl9IGVsc2UgewogCQljbGVhcl9iaXQoVFRZX0hXX0NPT0tfT1VULCAmcG9ydC0+Z3MudHR5LT5mbGFncyk7CiAJfQotCXN4X2RwcmludGsgKFNYX0RFQlVHX1RFUk1JT1MsICJvZmxhZ3M6ICV4KCVkKVxuIiwKLQkgICAgICAgICAgICBwb3J0LT5ncy50dHktPnRlcm1pb3MtPmNfb2ZsYWcsIAotCSAgICAgICAgICAgIE9fT1RIRVIocG9ydC0+Z3MudHR5KSk7CisJc3hfZHByaW50ayhTWF9ERUJVR19URVJNSU9TLCAib2ZsYWdzOiAleCglZClcbiIsCisJCQlwb3J0LT5ncy50dHktPnRlcm1pb3MtPmNfb2ZsYWcsIE9fT1RIRVIocG9ydC0+Z3MudHR5KSk7CiAJLyogcG9ydC0+Y19kY2QgPSBzeF9nZXRfQ0QgKHBvcnQpOyAqLwotCWZ1bmNfZXhpdCAoKTsKKwlmdW5jX2V4aXQoKTsKIAlyZXR1cm4gMDsKIH0KIAotCi0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKgogICogICAgICAgICAgICAgICAgICAgdGhlIGludGVycnVwdCByZWxhdGVkIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCkBAIC05OTYsMjQ1ICsxMDMxLDI2MCBAQAogICAga25vdyBJJ20gZGVhZCBhZ2FpbnN0IHRoYXQsIGJ1dCBJIHRoaW5rIGl0IGlzIHJlcXVpcmVkIGluIHRoaXMKICAgIGNhc2UuICAqLwogCi0KLXN0YXRpYyB2b2lkIHN4X3RyYW5zbWl0X2NoYXJzIChzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIHN4X3RyYW5zbWl0X2NoYXJzKHN0cnVjdCBzeF9wb3J0ICpwb3J0KQogewogCWludCBjOwogCWludCB0eF9pcDsKIAlpbnQgdHhyb29tOwogCi0JZnVuY19lbnRlcjIgKCk7Ci0Jc3hfZHByaW50ayAoU1hfREVCVUdfVFJBTlNNSVQsICJQb3J0ICVwOiB0cmFuc21pdCAlZCBjaGFyc1xuIiwgCi0JICAgICAgICAgICAgcG9ydCwgcG9ydC0+Z3MueG1pdF9jbnQpOworCWZ1bmNfZW50ZXIyKCk7CisJc3hfZHByaW50ayhTWF9ERUJVR19UUkFOU01JVCwgIlBvcnQgJXA6IHRyYW5zbWl0ICVkIGNoYXJzXG4iLAorCQkJcG9ydCwgcG9ydC0+Z3MueG1pdF9jbnQpOwogCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQgKFNYX1BPUlRfVFJBTlNNSVRfTE9DSywgJnBvcnQtPmxvY2tzKSkgeworCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNYX1BPUlRfVFJBTlNNSVRfTE9DSywgJnBvcnQtPmxvY2tzKSkgewogCQlyZXR1cm47CiAJfQogCiAJd2hpbGUgKDEpIHsKIAkJYyA9IHBvcnQtPmdzLnhtaXRfY250OwogCi0JCXN4X2RwcmludGsgKFNYX0RFQlVHX1RSQU5TTUlULCAiQ29weWluZyAlZCAiLCBjKTsKLQkJdHhfaXAgID0gc3hfcmVhZF9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX3R4aXBvcyk7CisJCXN4X2RwcmludGsoU1hfREVCVUdfVFJBTlNNSVQsICJDb3B5aW5nICVkICIsIGMpOworCQl0eF9pcCA9IHN4X3JlYWRfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX3R4aXBvcyk7CiAKIAkJLyogVG9vayBtZSA1IG1pbnV0ZXMgdG8gZGVkdWNlIHRoaXMgZm9ybXVsYS4gCiAJCSAgIEx1Y2tpbHkgaXQgaXMgbGl0ZXJhbGx5IGluIHRoZSBtYW51YWwgaW4gc2VjdGlvbiA2LjUuNC4zLjUgKi8KLQkJdHhyb29tID0gKHN4X3JlYWRfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV90eG9wb3MpIC0gdHhfaXAgLSAxKSAmIDB4ZmY7CisJCXR4cm9vbSA9IChzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV90eG9wb3MpIC0gdHhfaXAgLSAxKSAmCisJCQkJMHhmZjsKIAogCQkvKiBEb24ndCBjb3B5IG1vcmUgYnl0ZXMgdGhhbiB0aGVyZSBpcyByb29tIGZvciBpbiB0aGUgYnVmZmVyICovCiAJCWlmIChjID4gdHhyb29tKQogCQkJYyA9IHR4cm9vbTsKLQkJc3hfZHByaW50ayAoU1hfREVCVUdfVFJBTlNNSVQsICIgJWQoJWQpICIsIGMsIHR4cm9vbSApOworCQlzeF9kcHJpbnRrKFNYX0RFQlVHX1RSQU5TTUlULCAiICVkKCVkKSAiLCBjLCB0eHJvb20pOwogCiAJCS8qIERvbid0IGNvcHkgcGFzdCB0aGUgZW5kIG9mIHRoZSBoYXJkd2FyZSB0cmFuc21pdCBidWZmZXIgKi8KLQkJaWYgKGMgPiAweDEwMCAtIHR4X2lwKSAKKwkJaWYgKGMgPiAweDEwMCAtIHR4X2lwKQogCQkJYyA9IDB4MTAwIC0gdHhfaXA7CiAKLQkJc3hfZHByaW50ayAoU1hfREVCVUdfVFJBTlNNSVQsICIgJWQoJWQpICIsIGMsIDB4MTAwLXR4X2lwICk7CisJCXN4X2RwcmludGsoU1hfREVCVUdfVFJBTlNNSVQsICIgJWQoJWQpICIsIGMsIDB4MTAwIC0gdHhfaXApOwogCiAJCS8qIERvbid0IGNvcHkgcGFzIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBidWZmZXIgKi8KLQkJaWYgKGMgPiBTRVJJQUxfWE1JVF9TSVpFIC0gcG9ydC0+Z3MueG1pdF90YWlsKSAKKwkJaWYgKGMgPiBTRVJJQUxfWE1JVF9TSVpFIC0gcG9ydC0+Z3MueG1pdF90YWlsKQogCQkJYyA9IFNFUklBTF9YTUlUX1NJWkUgLSBwb3J0LT5ncy54bWl0X3RhaWw7CiAKLQkJc3hfZHByaW50ayAoU1hfREVCVUdfVFJBTlNNSVQsICIgJWQoJWxkKSBcbiIsIAotCQkgICAgICAgICAgICBjLCBTRVJJQUxfWE1JVF9TSVpFLSBwb3J0LT5ncy54bWl0X3RhaWwpOworCQlzeF9kcHJpbnRrKFNYX0RFQlVHX1RSQU5TTUlULCAiICVkKCVsZCkgXG4iLAorCQkJCWMsIFNFUklBTF9YTUlUX1NJWkUgLSBwb3J0LT5ncy54bWl0X3RhaWwpOwogCi0JCS8qIElmIGZvciBvbmUgcmVhc29uIG9yIGFub3RoZXIsIHdlIGNhbid0IGNvcHkgbW9yZSBkYXRhLCB3ZSdyZSBkb25lISAqLwotCQlpZiAoYyA9PSAwKSBicmVhazsKKwkJLyogSWYgZm9yIG9uZSByZWFzb24gb3IgYW5vdGhlciwgd2UgY2FuJ3QgY29weSBtb3JlIGRhdGEsIHdlJ3JlCisJCSAgIGRvbmUhICovCisJCWlmIChjID09IDApCisJCQlicmVhazsKIAotCi0JCW1lbWNweV90b2lvIChwb3J0LT5ib2FyZC0+YmFzZSArIENIQU5fT0ZGU0VUKHBvcnQsaGlfdHhidWYpICsgdHhfaXAsIAotCQkgICAgICAgICAgICAgcG9ydC0+Z3MueG1pdF9idWYgKyBwb3J0LT5ncy54bWl0X3RhaWwsIGMpOworCQltZW1jcHlfdG9pbyhwb3J0LT5ib2FyZC0+YmFzZSArIENIQU5fT0ZGU0VUKHBvcnQsIGhpX3R4YnVmKSArCisJCQl0eF9pcCwgcG9ydC0+Z3MueG1pdF9idWYgKyBwb3J0LT5ncy54bWl0X3RhaWwsIGMpOwogCiAJCS8qIFVwZGF0ZSB0aGUgcG9pbnRlciBpbiB0aGUgY2FyZCAqLwotCQlzeF93cml0ZV9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX3R4aXBvcywgKHR4X2lwK2MpICYgMHhmZik7CisJCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV90eGlwb3MsICh0eF9pcCArIGMpICYgMHhmZik7CiAKIAkJLyogVXBkYXRlIHRoZSBrZXJuZWwgYnVmZmVyIGVuZCAqLwotCQlwb3J0LT5ncy54bWl0X3RhaWwgPSAocG9ydC0+Z3MueG1pdF90YWlsICsgYykgJiAoU0VSSUFMX1hNSVRfU0laRS0xKTsKKwkJcG9ydC0+Z3MueG1pdF90YWlsID0gKHBvcnQtPmdzLnhtaXRfdGFpbCArIGMpICYKKwkJCQkoU0VSSUFMX1hNSVRfU0laRSAtIDEpOwogCiAJCS8qIFRoaXMgb25lIGxhc3QuICh0aGlzIGlzIGVzc2VudGlhbCkKLQkJICAgSXQgd291bGQgYWxsb3cgb3RoZXJzIHRvIHN0YXJ0IHB1dHRpbmcgbW9yZSBkYXRhIGludG8gdGhlIGJ1ZmZlciEgKi8KKwkJICAgSXQgd291bGQgYWxsb3cgb3RoZXJzIHRvIHN0YXJ0IHB1dHRpbmcgbW9yZSBkYXRhIGludG8gdGhlCisJCSAgIGJ1ZmZlciEgKi8KIAkJcG9ydC0+Z3MueG1pdF9jbnQgLT0gYzsKIAl9CiAKIAlpZiAocG9ydC0+Z3MueG1pdF9jbnQgPT0gMCkgewotCQlzeF9kaXNhYmxlX3R4X2ludGVycnVwdHMgKHBvcnQpOworCQlzeF9kaXNhYmxlX3R4X2ludGVycnVwdHMocG9ydCk7CiAJfQogCiAJaWYgKChwb3J0LT5ncy54bWl0X2NudCA8PSBwb3J0LT5ncy53YWtldXBfY2hhcnMpICYmIHBvcnQtPmdzLnR0eSkgewogCQl0dHlfd2FrZXVwKHBvcnQtPmdzLnR0eSk7Ci0JCXN4X2RwcmludGsgKFNYX0RFQlVHX1RSQU5TTUlULCAiV2FraW5nIHVwLi4uLiBsZGlzYyAoJWQpLi4uLlxuIiwKLQkJICAgICAgICAgICAgcG9ydC0+Z3Mud2FrZXVwX2NoYXJzKTsgCisJCXN4X2RwcmludGsoU1hfREVCVUdfVFJBTlNNSVQsICJXYWtpbmcgdXAuLi4uIGxkaXNjICglZCkuLi4uXG4iLAorCQkJCXBvcnQtPmdzLndha2V1cF9jaGFycyk7CiAJfQogCi0JY2xlYXJfYml0IChTWF9QT1JUX1RSQU5TTUlUX0xPQ0ssICZwb3J0LT5sb2Nrcyk7Ci0JZnVuY19leGl0ICgpOworCWNsZWFyX2JpdChTWF9QT1JUX1RSQU5TTUlUX0xPQ0ssICZwb3J0LT5sb2Nrcyk7CisJZnVuY19leGl0KCk7CiB9CiAKLQogLyogTm90ZSB0aGUgc3ltbWV0cnkgYmV0d2VlbiByZWNlaXZpbmcgY2hhcnMgYW5kIHRyYW5zbWl0dGluZyB0aGVtIQogICAgTm90ZTogVGhlIGtlcm5lbCBzaG91bGQgaGF2ZSBpbXBsZW1lbnRlZCBib3RoIGEgcmVjZWl2ZSBidWZmZXIgYW5kCiAgICBhIHRyYW5zbWl0IGJ1ZmZlci4gKi8KIAogLyogSW5saW5lZDogQ2FsbGVkIG9ubHkgb25jZS4gUmVtb3ZlIHRoZSBpbmxpbmUgd2hlbiB5b3UgYWRkIGFub3RoZXIgY2FsbCAqLwotc3RhdGljIGlubGluZSB2b2lkIHN4X3JlY2VpdmVfY2hhcnMgKHN0cnVjdCBzeF9wb3J0ICpwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIHN4X3JlY2VpdmVfY2hhcnMoc3RydWN0IHN4X3BvcnQgKnBvcnQpCiB7CiAJaW50IGM7CiAJaW50IHJ4X29wOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0JaW50IGNvcGllZD0wOworCWludCBjb3BpZWQgPSAwOwogCXVuc2lnbmVkIGNoYXIgKnJwOwogCi0JZnVuY19lbnRlcjIgKCk7CisJZnVuY19lbnRlcjIoKTsKIAl0dHkgPSBwb3J0LT5ncy50dHk7CiAJd2hpbGUgKDEpIHsKLQkJcnhfb3AgPSBzeF9yZWFkX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfcnhvcG9zKTsKLQkJYyA9IChzeF9yZWFkX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfcnhpcG9zKSAtIHJ4X29wKSAmIDB4ZmY7CisJCXJ4X29wID0gc3hfcmVhZF9jaGFubmVsX2J5dGUocG9ydCwgaGlfcnhvcG9zKTsKKwkJYyA9IChzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9yeGlwb3MpIC0gcnhfb3ApICYgMHhmZjsKIAotCQlzeF9kcHJpbnRrIChTWF9ERUJVR19SRUNFSVZFLCAicnhvcD0lZCwgYyA9ICVkLlxuIiwgcnhfb3AsIGMpOyAKKwkJc3hfZHByaW50ayhTWF9ERUJVR19SRUNFSVZFLCAicnhvcD0lZCwgYyA9ICVkLlxuIiwgcnhfb3AsIGMpOwogCiAJCS8qIERvbid0IGNvcHkgcGFzdCB0aGUgZW5kIG9mIHRoZSBoYXJkd2FyZSByZWNlaXZlIGJ1ZmZlciAqLwotCQlpZiAocnhfb3AgKyBjID4gMHgxMDApIGMgPSAweDEwMCAtIHJ4X29wOworCQlpZiAocnhfb3AgKyBjID4gMHgxMDApCisJCQljID0gMHgxMDAgLSByeF9vcDsKIAotCQlzeF9kcHJpbnRrIChTWF9ERUJVR19SRUNFSVZFLCAiYyA9ICVkLlxuIiwgYyk7CisJCXN4X2RwcmludGsoU1hfREVCVUdfUkVDRUlWRSwgImMgPSAlZC5cbiIsIGMpOwogCiAJCS8qIERvbid0IGNvcHkgbW9yZSBieXRlcyB0aGFuIHRoZXJlIGlzIHJvb20gZm9yIGluIHRoZSBidWZmZXIgKi8KIAogCQljID0gdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcodHR5LCAmcnAsIGMpOwogCi0JCXN4X2RwcmludGsgKFNYX0RFQlVHX1JFQ0VJVkUsICJjID0gJWQuXG4iLCBjKTsgCisJCXN4X2RwcmludGsoU1hfREVCVUdfUkVDRUlWRSwgImMgPSAlZC5cbiIsIGMpOwogCiAJCS8qIElmIGZvciBvbmUgcmVhc29uIG9yIGFub3RoZXIsIHdlIGNhbid0IGNvcHkgbW9yZSBkYXRhLCB3ZSdyZSBkb25lISAqLwotCQlpZiAoYyA9PSAwKSBicmVhazsKKwkJaWYgKGMgPT0gMCkKKwkJCWJyZWFrOwogCi0JCXN4X2RwcmludGsgKFNYX0RFQlVHX1JFQ0VJVkUgLCAiQ29weWluZyBvdmVyICVkIGNoYXJzLiBGaXJzdCBpcyAlZCBhdCAlbHhcbiIsIGMsIAotCQkgICAgICAgICAgICByZWFkX3N4X2J5dGUgKHBvcnQtPmJvYXJkLCBDSEFOX09GRlNFVChwb3J0LGhpX3J4YnVmKSArIHJ4X29wKSwKLQkJICAgICAgICAgICAgQ0hBTl9PRkZTRVQocG9ydCwgaGlfcnhidWYpKTsgCi0JCW1lbWNweV9mcm9taW8gKHJwLAotCQkgICAgICAgICAgICAgICBwb3J0LT5ib2FyZC0+YmFzZSArIENIQU5fT0ZGU0VUKHBvcnQsaGlfcnhidWYpICsgcnhfb3AsIGMpOworCQlzeF9kcHJpbnRrKFNYX0RFQlVHX1JFQ0VJVkUsICJDb3B5aW5nIG92ZXIgJWQgY2hhcnMuIEZpcnN0IGlzICIKKwkJCQkiJWQgYXQgJWx4XG4iLCBjLCByZWFkX3N4X2J5dGUocG9ydC0+Ym9hcmQsCisJCQkJCUNIQU5fT0ZGU0VUKHBvcnQsIGhpX3J4YnVmKSArIHJ4X29wKSwKKwkJCQlDSEFOX09GRlNFVChwb3J0LCBoaV9yeGJ1ZikpOworCQltZW1jcHlfZnJvbWlvKHJwLCBwb3J0LT5ib2FyZC0+YmFzZSArCisJCQkJQ0hBTl9PRkZTRVQocG9ydCwgaGlfcnhidWYpICsgcnhfb3AsIGMpOwogCiAJCS8qIFRoaXMgb25lIGxhc3QuICggTm90IGVzc2VudGlhbC4pCi0JCSAgIEl0IGFsbG93cyB0aGUgY2FyZCB0byBzdGFydCBwdXR0aW5nIG1vcmUgZGF0YSBpbnRvIHRoZSBidWZmZXIhIAorCQkgICBJdCBhbGxvd3MgdGhlIGNhcmQgdG8gc3RhcnQgcHV0dGluZyBtb3JlIGRhdGEgaW50byB0aGUKKwkJICAgYnVmZmVyIQogCQkgICBVcGRhdGUgdGhlIHBvaW50ZXIgaW4gdGhlIGNhcmQgKi8KLQkJc3hfd3JpdGVfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9yeG9wb3MsIChyeF9vcCArIGMpICYgMHhmZik7CisJCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9yeG9wb3MsIChyeF9vcCArIGMpICYgMHhmZik7CiAKIAkJY29waWVkICs9IGM7CiAJfQogCWlmIChjb3BpZWQpIHsKIAkJc3RydWN0IHRpbWV2YWwgdHY7CiAKLQkJZG9fZ2V0dGltZW9mZGF5ICgmdHYpOwotCQlzeF9kcHJpbnRrIChTWF9ERUJVR19SRUNFSVZFLCAKLQkJICAgICAgICAgICAgInB1c2hpbmcgZmxpcHEgcG9ydCAlZCAoJTNkIGNoYXJzKTogJWQuJTA2ZCAgKCVkLyVkKVxuIiwgCi0JCSAgICAgICAgICAgIHBvcnQtPmxpbmUsIGNvcGllZCwgCi0JCSAgICAgICAgICAgIChpbnQpICh0di50dl9zZWMgJSA2MCksIChpbnQpdHYudHZfdXNlYywgdHR5LT5yYXcsIHR0eS0+cmVhbF9yYXcpOworCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKKwkJc3hfZHByaW50ayhTWF9ERUJVR19SRUNFSVZFLCAicHVzaGluZyBmbGlwcSBwb3J0ICVkICglM2QgIgorCQkJCSJjaGFycyk6ICVkLiUwNmQgICglZC8lZClcbiIsIHBvcnQtPmxpbmUsCisJCQkJY29waWVkLCAoaW50KSh0di50dl9zZWMgJSA2MCksIChpbnQpdHYudHZfdXNlYywKKwkJCQl0dHktPnJhdywgdHR5LT5yZWFsX3Jhdyk7CiAKLQkJLyogVGVsbCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtIHRoZSBuZXdzLiBHcmVhdCBuZXdzLiBOZXcgY2hhcmFjdGVycyEgKi8KLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2ggKHR0eSk7CisJCS8qIFRlbGwgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSB0aGUgbmV3cy4gR3JlYXQgbmV3cy4gTmV3CisJCSAgIGNoYXJhY3RlcnMhICovCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCS8qICAgIHR0eV9zY2hlZHVsZV9mbGlwICh0dHkpOyAqLwogCX0KIAotCWZ1bmNfZXhpdCAoKTsKKwlmdW5jX2V4aXQoKTsKIH0KIAogLyogSW5saW5lZDogaXQgaXMgY2FsbGVkIG9ubHkgb25jZS4gUmVtb3ZlIHRoZSBpbmxpbmUgaWYgeW91IGFkZCBhbm90aGVyIAogICAgY2FsbCAqLwotc3RhdGljIGlubGluZSB2b2lkIHN4X2NoZWNrX21vZGVtX3NpZ25hbHMgKHN0cnVjdCBzeF9wb3J0ICpwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIHN4X2NoZWNrX21vZGVtX3NpZ25hbHMoc3RydWN0IHN4X3BvcnQgKnBvcnQpCiB7CiAJaW50IGhpX3N0YXRlOwogCWludCBjX2RjZDsKIAotCWhpX3N0YXRlID0gc3hfcmVhZF9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX3N0YXRlKTsKLQlzeF9kcHJpbnRrIChTWF9ERUJVR19NT0RFTVNJR05BTFMsICJDaGVja2luZyBtb2RlbSBzaWduYWxzICglZC8lZClcbiIsCi0JICAgICAgICAgICAgcG9ydC0+Y19kY2QsIHN4X2dldF9DRCAocG9ydCkpOworCWhpX3N0YXRlID0gc3hfcmVhZF9jaGFubmVsX2J5dGUocG9ydCwgaGlfc3RhdGUpOworCXN4X2RwcmludGsoU1hfREVCVUdfTU9ERU1TSUdOQUxTLCAiQ2hlY2tpbmcgbW9kZW0gc2lnbmFscyAoJWQvJWQpXG4iLAorCQkJcG9ydC0+Y19kY2QsIHN4X2dldF9DRChwb3J0KSk7CiAKIAlpZiAoaGlfc3RhdGUgJiBTVF9CUkVBSykgewogCQloaV9zdGF0ZSAmPSB+U1RfQlJFQUs7Ci0JCXN4X2RwcmludGsgKFNYX0RFQlVHX01PREVNU0lHTkFMUywgImdvdCBhIGJyZWFrLlxuIik7Ci0JCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfc3RhdGUsIGhpX3N0YXRlKTsKLQkJZ3NfZ290X2JyZWFrICgmcG9ydC0+Z3MpOworCQlzeF9kcHJpbnRrKFNYX0RFQlVHX01PREVNU0lHTkFMUywgImdvdCBhIGJyZWFrLlxuIik7CisJCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9zdGF0ZSwgaGlfc3RhdGUpOworCQlnc19nb3RfYnJlYWsoJnBvcnQtPmdzKTsKIAl9CiAJaWYgKGhpX3N0YXRlICYgU1RfRENEKSB7CiAJCWhpX3N0YXRlICY9IH5TVF9EQ0Q7Ci0JCXN4X2RwcmludGsgKFNYX0RFQlVHX01PREVNU0lHTkFMUywgImdvdCBhIERDRCBjaGFuZ2UuXG4iKTsKLQkJc3hfd3JpdGVfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9zdGF0ZSwgaGlfc3RhdGUpOwotCQljX2RjZCA9IHN4X2dldF9DRCAocG9ydCk7Ci0JCXN4X2RwcmludGsgKFNYX0RFQlVHX01PREVNU0lHTkFMUywgIkRDRCBpcyBub3cgJWRcbiIsIGNfZGNkKTsKKwkJc3hfZHByaW50ayhTWF9ERUJVR19NT0RFTVNJR05BTFMsICJnb3QgYSBEQ0QgY2hhbmdlLlxuIik7CisJCXN4X3dyaXRlX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9zdGF0ZSwgaGlfc3RhdGUpOworCQljX2RjZCA9IHN4X2dldF9DRChwb3J0KTsKKwkJc3hfZHByaW50ayhTWF9ERUJVR19NT0RFTVNJR05BTFMsICJEQ0QgaXMgbm93ICVkXG4iLCBjX2RjZCk7CiAJCWlmIChjX2RjZCAhPSBwb3J0LT5jX2RjZCkgewogCQkJcG9ydC0+Y19kY2QgPSBjX2RjZDsKLQkJCWlmIChzeF9nZXRfQ0QgKHBvcnQpKSB7CisJCQlpZiAoc3hfZ2V0X0NEKHBvcnQpKSB7CiAJCQkJLyogRENEIHdlbnQgVVAgKi8KLQkJCQlpZiAoKHN4X3JlYWRfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX2hzdGF0KSAhPSBIU19JRExFX0NMT1NFRCkgJiYKLQkJCQkJCSEocG9ydC0+Z3MudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSApIHsKLQkJCQkJLyogQXJlIHdlIGJsb2NraW5nIGluIG9wZW4/Ki8KLQkJCQkJc3hfZHByaW50ayAoU1hfREVCVUdfTU9ERU1TSUdOQUxTLCAiRENEIGFjdGl2ZSwgdW5ibG9ja2luZyBvcGVuXG4iKTsKLQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5ncy5vcGVuX3dhaXQpOworCQkJCWlmICgoc3hfcmVhZF9jaGFubmVsX2J5dGUocG9ydCwgaGlfaHN0YXQpICE9CisJCQkJCQlIU19JRExFX0NMT1NFRCkgJiYKKwkJCQkJCSEocG9ydC0+Z3MudHR5LT50ZXJtaW9zLT4KKwkJCQkJCQljX2NmbGFnICYgQ0xPQ0FMKSkgeworCQkJCQkvKiBBcmUgd2UgYmxvY2tpbmcgaW4gb3Blbj8gKi8KKwkJCQkJc3hfZHByaW50ayhTWF9ERUJVR19NT0RFTVNJR05BTFMsICJEQ0QgIgorCQkJCQkJImFjdGl2ZSwgdW5ibG9ja2luZyBvcGVuXG4iKTsKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5ncy4KKwkJCQkJCQlvcGVuX3dhaXQpOwogCQkJCX0gZWxzZSB7Ci0JCQkJCXN4X2RwcmludGsgKFNYX0RFQlVHX01PREVNU0lHTkFMUywgIkRDRCByYWlzZWQuIElnbm9yaW5nLlxuIik7CisJCQkJCXN4X2RwcmludGsoU1hfREVCVUdfTU9ERU1TSUdOQUxTLCAiRENEICIKKwkJCQkJCSJyYWlzZWQuIElnbm9yaW5nLlxuIik7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQkvKiBEQ0Qgd2VudCBkb3duISAqLwotCQkJCWlmICghKHBvcnQtPmdzLnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgKSB7Ci0JCQkJCXN4X2RwcmludGsgKFNYX0RFQlVHX01PREVNU0lHTkFMUywgIkRDRCBkcm9wcGVkLiBoYW5naW5nIHVwLi4uLlxuIik7Ci0JCQkJCXR0eV9oYW5ndXAgKHBvcnQtPmdzLnR0eSk7CisJCQkJaWYgKCEocG9ydC0+Z3MudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSl7CisJCQkJCXN4X2RwcmludGsoU1hfREVCVUdfTU9ERU1TSUdOQUxTLCAiRENEICIKKwkJCQkJCSJkcm9wcGVkLiBoYW5naW5nIHVwLi4uLlxuIik7CisJCQkJCXR0eV9oYW5ndXAocG9ydC0+Z3MudHR5KTsKIAkJCQl9IGVsc2UgewotCQkJCQlzeF9kcHJpbnRrIChTWF9ERUJVR19NT0RFTVNJR05BTFMsICJEQ0QgZHJvcHBlZC4gaWdub3JpbmcuXG4iKTsKKwkJCQkJc3hfZHByaW50ayhTWF9ERUJVR19NT0RFTVNJR05BTFMsICJEQ0QgIgorCQkJCQkJImRyb3BwZWQuIGlnbm9yaW5nLlxuIik7CiAJCQkJfQogCQkJfQogCQl9IGVsc2UgewotCQkJc3hfZHByaW50ayAoU1hfREVCVUdfTU9ERU1TSUdOQUxTLCAiSG1tbS4gY2FyZCB0b2xkIHVzIERDRCBjaGFuZ2VkLCBidXQgaXQgZGlkbid0LlxuIik7CisJCQlzeF9kcHJpbnRrKFNYX0RFQlVHX01PREVNU0lHTkFMUywgIkhtbW0uIGNhcmQgdG9sZCB1cyAiCisJCQkJIkRDRCBjaGFuZ2VkLCBidXQgaXQgZGlkbid0LlxuIik7CiAJCX0KIAl9CiB9CiAKLQogLyogVGhpcyBpcyB3aGF0IGFuIGludGVycnVwdCByb3V0aW5lIHNob3VsZCBsb29rIGxpa2UuIAogICogU21hbGwsIGVsZWdhbnQsIGNsZWFyLgogICovCiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzeF9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKnB0cikKK3N0YXRpYyBpcnFyZXR1cm5fdCBzeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBzeF9ib2FyZCAqYm9hcmQgPSBwdHI7CiAJc3RydWN0IHN4X3BvcnQgKnBvcnQ7CiAJaW50IGk7CiAKLQlmdW5jX2VudGVyICgpOwotCXN4X2RwcmludGsgKFNYX0RFQlVHX0ZMT1csICJzeDogZW50ZXIgc3hfaW50ZXJydXB0ICglZC8lZClcbiIsIGlycSwgYm9hcmQtPmlycSk7IAorCWZ1bmNfZW50ZXIoKTsKKwlzeF9kcHJpbnRrKFNYX0RFQlVHX0ZMT1csICJzeDogZW50ZXIgc3hfaW50ZXJydXB0ICglZC8lZClcbiIsIGlycSwKKwkJCWJvYXJkLT5pcnEpOwogCiAJLyogQUFhcmdoISBUaGUgb3JkZXIgaW4gd2hpY2ggdG8gZG8gdGhlc2UgdGhpbmdzIGlzIGVzc2VudGlhbCBhbmQKIAkgICBub3QgdHJpdmlhbC4gCiAKIAkgICAtIFJhdGUgbGltaXQgZ29lcyBiZWZvcmUgInJlY3Vyc2l2ZSIuIE90aGVyd2lzZSBhIHNlcmllcyBvZgotCSAgICAgcmVjdXJzaXZlIGNhbGxzIHdpbGwgaGFuZyB0aGUgbWFjaGluZSBpbiB0aGUgaW50ZXJydXB0IHJvdXRpbmUuIAorCSAgIHJlY3Vyc2l2ZSBjYWxscyB3aWxsIGhhbmcgdGhlIG1hY2hpbmUgaW4gdGhlIGludGVycnVwdCByb3V0aW5lLgogCiAJICAgLSBoYXJkd2FyZSB0d2lkZGxpbmcgZ29lcyBiZWZvcmUgInJlY3Vyc2l2ZSIuIE90aGVyd2lzZSB3aGVuIHdlCi0JICAgICBwb2xsIHRoZSBjYXJkLCBhbmQgYSByZWN1cnNpdmUgaW50ZXJydXB0IGhhcHBlbnMsIHdlIHdvbid0Ci0JICAgICBhY2sgdGhlIGNhcmQsIHNvIGl0IG1pZ2h0IGtlZXAgb24gaW50ZXJydXB0aW5nIHVzLiAoZXNwZWNpYWxseQotCSAgICAgbGV2ZWwgc2Vuc2l0aXZlIGludGVycnVwdCBzeXN0ZW1zIGxpa2UgUENJKS4KKwkgICBwb2xsIHRoZSBjYXJkLCBhbmQgYSByZWN1cnNpdmUgaW50ZXJydXB0IGhhcHBlbnMsIHdlIHdvbid0CisJICAgYWNrIHRoZSBjYXJkLCBzbyBpdCBtaWdodCBrZWVwIG9uIGludGVycnVwdGluZyB1cy4gKGVzcGVjaWFsbHkKKwkgICBsZXZlbCBzZW5zaXRpdmUgaW50ZXJydXB0IHN5c3RlbXMgbGlrZSBQQ0kpLgogCiAJICAgLSBSYXRlIGxpbWl0IGdvZXMgYmVmb3JlIGhhcmR3YXJlIHR3aWRkbGluZy4gT3RoZXJ3aXNlIHdlIHdvbid0Ci0JICAgICBjYXRjaCBhIGNhcmQgdGhhdCBoYXMgZ29uZSBib25rZXJzLgorCSAgIGNhdGNoIGEgY2FyZCB0aGF0IGhhcyBnb25lIGJvbmtlcnMuCiAKIAkgICAtIFRoZSAiaW5pdGlhbGl6ZWQiIHRlc3QgZ29lcyBhZnRlciB0aGUgaGFyZHdhcmUgdHdpZGRsaW5nLiBPdGhlcndpc2UKLQkgICAgIHRoZSBjYXJkIHdpbGwgc3RpY2sgdXMgaW4gdGhlIGludGVycnVwdCByb3V0aW5lIGFnYWluLgorCSAgIHRoZSBjYXJkIHdpbGwgc3RpY2sgdXMgaW4gdGhlIGludGVycnVwdCByb3V0aW5lIGFnYWluLgogCiAJICAgLSBUaGUgaW5pdGlhbGl6ZWQgdGVzdCBnb2VzIGJlZm9yZSByZWN1cnNpdmUuIAotCSovCi0KLQorCSAqLwogCiAjaWZkZWYgSVJRX1JBVEVfTElNSVQKIAkvKiBBYWFyZ2ghIEknbSBhc2hhbWVkLiBUaGlzIGNvc3RzIG1vcmUgbGluZXMtb2YtY29kZSB0aGFuIHRoZQotCSAgIGFjdHVhbCBpbnRlcnJ1cHQgcm91dGluZSEuIChXZWxsLCB1c2VkIHRvIHdoZW4gSSB3cm90ZSB0aGF0IGNvbW1lbnQpICovCisJICAgYWN0dWFsIGludGVycnVwdCByb3V0aW5lIS4gKFdlbGwsIHVzZWQgdG8gd2hlbiBJIHdyb3RlIHRoYXQKKwkgICBjb21tZW50KSAqLwogCXsKIAkJc3RhdGljIGludCBsYXN0amlmOwotCQlzdGF0aWMgaW50IG5pbnRyPTA7CisJCXN0YXRpYyBpbnQgbmludHIgPSAwOwogCiAJCWlmIChsYXN0amlmID09IGppZmZpZXMpIHsKIAkJCWlmICgrK25pbnRyID4gSVJRX1JBVEVfTElNSVQpIHsKLQkJCQlmcmVlX2lycSAoYm9hcmQtPmlycSwgYm9hcmQpOwotCQkJCXByaW50ayAoS0VSTl9FUlIgInN4OiBUb28gbWFueSBpbnRlcnJ1cHRzLiBUdXJuaW5nIG9mZiBpbnRlcnJ1cHQgJWQuXG4iLCAKLQkJCQkJICAgICAgYm9hcmQtPmlycSk7CisJCQkJZnJlZV9pcnEoYm9hcmQtPmlycSwgYm9hcmQpOworCQkJCXByaW50ayhLRVJOX0VSUiAic3g6IFRvbyBtYW55IGludGVycnVwdHMuICIKKwkJCQkJCSJUdXJuaW5nIG9mZiBpbnRlcnJ1cHQgJWQuXG4iLAorCQkJCQkJYm9hcmQtPmlycSk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlsYXN0amlmID0gamlmZmllczsKQEAgLTEyNDMsMTkgKzEyOTMsMjAgQEAKIAl9CiAjZW5kaWYKIAotCiAJaWYgKGJvYXJkLT5pcnEgPT0gaXJxKSB7CiAJCS8qIFRlbGwgdGhlIGNhcmQgd2UndmUgbm90aWNlZCB0aGUgaW50ZXJydXB0LiAqLwogCi0JCXN4X3dyaXRlX2JvYXJkX3dvcmQgKGJvYXJkLCBjY19pbnRfcGVuZGluZywgMCk7Ci0JCWlmIChJU19TWF9CT0FSRCAoYm9hcmQpKSB7Ci0JCQl3cml0ZV9zeF9ieXRlIChib2FyZCwgU1hfUkVTRVRfSVJRLCAxKTsKKwkJc3hfd3JpdGVfYm9hcmRfd29yZChib2FyZCwgY2NfaW50X3BlbmRpbmcsIDApOworCQlpZiAoSVNfU1hfQk9BUkQoYm9hcmQpKSB7CisJCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTWF9SRVNFVF9JUlEsIDEpOwogCQl9IGVsc2UgaWYgKElTX0VJU0FfQk9BUkQoYm9hcmQpKSB7Ci0JCQlpbmIoYm9hcmQtPmVpc2FfYmFzZSsweGMwMyk7Ci0JCQl3cml0ZV9zeF93b3JkKGJvYXJkLCA4LCAwKTsgCisJCQlpbmIoYm9hcmQtPmVpc2FfYmFzZSArIDB4YzAzKTsKKwkJCXdyaXRlX3N4X3dvcmQoYm9hcmQsIDgsIDApOwogCQl9IGVsc2UgewotCQkJd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSU5UQ0xFQVIsIFNJMl9JU0FfSU5UQ0xFQVJfQ0xFQVIpOwotCQkJd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSU5UQ0xFQVIsIFNJMl9JU0FfSU5UQ0xFQVJfU0VUKTsKKwkJCXdyaXRlX3N4X2J5dGUoYm9hcmQsIFNJMl9JU0FfSU5UQ0xFQVIsCisJCQkJCVNJMl9JU0FfSU5UQ0xFQVJfQ0xFQVIpOworCQkJd3JpdGVfc3hfYnl0ZShib2FyZCwgU0kyX0lTQV9JTlRDTEVBUiwKKwkJCQkJU0kyX0lTQV9JTlRDTEVBUl9TRVQpOwogCQl9CiAJfQogCkBAIC0xMjY0LDUzICsxMzE1LDQ4IEBACiAJaWYgKCEoYm9hcmQtPmZsYWdzICYgU1hfQk9BUkRfSU5JVElBTElaRUQpKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQlpZiAodGVzdF9hbmRfc2V0X2JpdCAoU1hfQk9BUkRfSU5UUl9MT0NLLCAmYm9hcmQtPmxvY2tzKSkgewotCQlwcmludGsgKEtFUk5fRVJSICJSZWN1cnNpdmUgaW50ZXJydXB0ISAoJWQpXG4iLCBib2FyZC0+aXJxKTsKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChTWF9CT0FSRF9JTlRSX0xPQ0ssICZib2FyZC0+bG9ja3MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUmVjdXJzaXZlIGludGVycnVwdCEgKCVkKVxuIiwgYm9hcmQtPmlycSk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKLQkgZm9yIChpPTA7aTxib2FyZC0+bnBvcnRzO2krKykgeworCWZvciAoaSA9IDA7IGkgPCBib2FyZC0+bnBvcnRzOyBpKyspIHsKIAkJcG9ydCA9ICZib2FyZC0+cG9ydHNbaV07CiAJCWlmIChwb3J0LT5ncy5mbGFncyAmIEdTX0FDVElWRSkgewotCQkJaWYgKHN4X3JlYWRfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9zdGF0ZSkpIHsKLQkJCQlzeF9kcHJpbnRrIChTWF9ERUJVR19JTlRFUlJVUFRTLCAKLQkJCQkgICAgICAgICAgICAiUG9ydCAlZDogbW9kZW0gc2lnbmFsIGNoYW5nZT8uLi4gXG4iLCBpKTsKLQkJCQlzeF9jaGVja19tb2RlbV9zaWduYWxzIChwb3J0KTsgCisJCQlpZiAoc3hfcmVhZF9jaGFubmVsX2J5dGUocG9ydCwgaGlfc3RhdGUpKSB7CisJCQkJc3hfZHByaW50ayhTWF9ERUJVR19JTlRFUlJVUFRTLCAiUG9ydCAlZDogIgorCQkJCQkJIm1vZGVtIHNpZ25hbCBjaGFuZ2U/Li4uIFxuIixpKTsKKwkJCQlzeF9jaGVja19tb2RlbV9zaWduYWxzKHBvcnQpOwogCQkJfQogCQkJaWYgKHBvcnQtPmdzLnhtaXRfY250KSB7Ci0JCQkJc3hfdHJhbnNtaXRfY2hhcnMgKHBvcnQpOworCQkJCXN4X3RyYW5zbWl0X2NoYXJzKHBvcnQpOwogCQkJfQogCQkJaWYgKCEocG9ydC0+Z3MuZmxhZ3MgJiBTWF9SWF9USFJPVFRMRSkpIHsKLQkJCQlzeF9yZWNlaXZlX2NoYXJzIChwb3J0KTsKKwkJCQlzeF9yZWNlaXZlX2NoYXJzKHBvcnQpOwogCQkJfQogCQl9CiAJfQogCi0JY2xlYXJfYml0IChTWF9CT0FSRF9JTlRSX0xPQ0ssICZib2FyZC0+bG9ja3MpOworCWNsZWFyX2JpdChTWF9CT0FSRF9JTlRSX0xPQ0ssICZib2FyZC0+bG9ja3MpOwogCi0Jc3hfZHByaW50ayAoU1hfREVCVUdfRkxPVywgInN4OiBleGl0IHN4X2ludGVycnVwdCAoJWQvJWQpXG4iLCBpcnEsIGJvYXJkLT5pcnEpOyAKLSAgICAgICAgZnVuY19leGl0ICgpOworCXN4X2RwcmludGsoU1hfREVCVUdfRkxPVywgInN4OiBleGl0IHN4X2ludGVycnVwdCAoJWQvJWQpXG4iLCBpcnEsCisJCQlib2FyZC0+aXJxKTsKKwlmdW5jX2V4aXQoKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLQotc3RhdGljIHZvaWQgc3hfcG9sbGZ1bmMgKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIHN4X3BvbGxmdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkID0gKHN0cnVjdCBzeF9ib2FyZCAqKSBkYXRhOworCXN0cnVjdCBzeF9ib2FyZCAqYm9hcmQgPSAoc3RydWN0IHN4X2JvYXJkICopZGF0YTsKIAotCWZ1bmNfZW50ZXIgKCk7CisJZnVuY19lbnRlcigpOwogCi0Jc3hfaW50ZXJydXB0ICgwLCBib2FyZCk7CisJc3hfaW50ZXJydXB0KDAsIGJvYXJkKTsKIAotCWluaXRfdGltZXIoJmJvYXJkLT50aW1lcik7Ci0KLQlib2FyZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBzeF9wb2xsOwotCWFkZF90aW1lciAoJmJvYXJkLT50aW1lcik7Ci0JZnVuY19leGl0ICgpOworCW1vZF90aW1lcigmYm9hcmQtPnRpbWVyLCBqaWZmaWVzICsgc3hfcG9sbCk7CisJZnVuY19leGl0KCk7CiB9CiAKLQotCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICoKICAqICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSByb3V0aW5lcyB0aGF0IGFjdHVhbGx5ICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgIGludGVyZmFjZSB3aXRoIHRoZSBnZW5lcmljX3NlcmlhbCBkcml2ZXIgICAgICAgICAgICAgICAgICAqCkBAIC0xMzE5LDkgKzEzNjUsOSBAQAogLyogRWhobS4gSSBkb24ndCBrbm93IGhvdyB0byBmaWRkbGUgd2l0aCBpbnRlcnJ1cHRzIG9uIHRoZSBTWCBjYXJkLiAtLVJFVyAqLwogLyogSG1tLiBPayBJIGZpZ3VyZWQgaXQgb3V0LiBZb3UgZG9uJ3QuICAqLwogCi1zdGF0aWMgdm9pZCBzeF9kaXNhYmxlX3R4X2ludGVycnVwdHMgKHZvaWQgKiBwdHIpIAorc3RhdGljIHZvaWQgc3hfZGlzYWJsZV90eF9pbnRlcnJ1cHRzKHZvaWQgKnB0cikKIHsKLQlzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCA9IHB0cjsgCisJc3RydWN0IHN4X3BvcnQgKnBvcnQgPSBwdHI7CiAJZnVuY19lbnRlcjIoKTsKIAogCXBvcnQtPmdzLmZsYWdzICY9IH5HU19UWF9JTlRFTjsKQEAgLTEzMjksMzAgKzEzNzUsMjggQEAKIAlmdW5jX2V4aXQoKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBzeF9lbmFibGVfdHhfaW50ZXJydXB0cyAodm9pZCAqIHB0cikgCitzdGF0aWMgdm9pZCBzeF9lbmFibGVfdHhfaW50ZXJydXB0cyh2b2lkICpwdHIpCiB7Ci0Jc3RydWN0IHN4X3BvcnQgKnBvcnQgPSBwdHI7IAorCXN0cnVjdCBzeF9wb3J0ICpwb3J0ID0gcHRyOwogCWludCBkYXRhX2luX2J1ZmZlcjsKIAlmdW5jX2VudGVyMigpOwogCiAJLyogRmlyc3QgdHJhbnNtaXQgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZSdyZSBzdXBwb3NlZCB0byAqLwotCXN4X3RyYW5zbWl0X2NoYXJzIChwb3J0KTsKKwlzeF90cmFuc21pdF9jaGFycyhwb3J0KTsKIAogCS8qIFRoZSBzeCBjYXJkIHdpbGwgbmV2ZXIgaW50ZXJydXB0IHVzIGlmIHdlIGRvbid0IGZpbGwgdGhlIGJ1ZmZlcgogCSAgIHBhc3QgMjUlLiBTbyB3ZSBrZWVwIGNvbnNpZGVyaW5nIGludGVycnVwdHMgb2ZmIGlmIHRoYXQncyB0aGUgY2FzZS4gKi8KLQlkYXRhX2luX2J1ZmZlciA9IChzeF9yZWFkX2NoYW5uZWxfYnl0ZSAocG9ydCwgaGlfdHhpcG9zKSAtIAotCSAgICAgICAgICAgICAgICAgIHN4X3JlYWRfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV90eG9wb3MpKSAmIDB4ZmY7CisJZGF0YV9pbl9idWZmZXIgPSAoc3hfcmVhZF9jaGFubmVsX2J5dGUocG9ydCwgaGlfdHhpcG9zKSAtCisJCQkgIHN4X3JlYWRfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX3R4b3BvcykpICYgMHhmZjsKIAogCS8qIFhYWCBNdXN0IGJlICJISUdIX1dBVEVSIiBmb3IgU0kgY2FyZCBhY2NvcmRpbmcgdG8gZG9jLiAqLwotCWlmIChkYXRhX2luX2J1ZmZlciA8IExPV19XQVRFUikgCisJaWYgKGRhdGFfaW5fYnVmZmVyIDwgTE9XX1dBVEVSKQogCQlwb3J0LT5ncy5mbGFncyAmPSB+R1NfVFhfSU5URU47CiAKIAlmdW5jX2V4aXQoKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBzeF9kaXNhYmxlX3J4X2ludGVycnVwdHMgKHZvaWQgKiBwdHIpIAorc3RhdGljIHZvaWQgc3hfZGlzYWJsZV9yeF9pbnRlcnJ1cHRzKHZvaWQgKnB0cikKIHsKIAkvKiAgc3RydWN0IHN4X3BvcnQgKnBvcnQgPSBwdHI7ICovCiAJZnVuY19lbnRlcigpOwpAQCAtMTM2MCw3ICsxNDA0LDcgQEAKIAlmdW5jX2V4aXQoKTsKIH0KIAotc3RhdGljIHZvaWQgc3hfZW5hYmxlX3J4X2ludGVycnVwdHMgKHZvaWQgKiBwdHIpIAorc3RhdGljIHZvaWQgc3hfZW5hYmxlX3J4X2ludGVycnVwdHModm9pZCAqcHRyKQogewogCS8qICBzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCA9IHB0cjsgKi8KIAlmdW5jX2VudGVyKCk7CkBAIC0xMzY4LDU1ICsxNDEyLDQ4IEBACiAJZnVuY19leGl0KCk7CiB9CiAKLQogLyogSmVlei4gSXNuJ3QgdGhpcyBzaW1wbGU/ICovCi1zdGF0aWMgaW50IHN4X2dldF9DRCAodm9pZCAqIHB0cikgCitzdGF0aWMgaW50IHN4X2dldF9DRCh2b2lkICpwdHIpCiB7CiAJc3RydWN0IHN4X3BvcnQgKnBvcnQgPSBwdHI7CiAJZnVuY19lbnRlcjIoKTsKIAogCWZ1bmNfZXhpdCgpOwotCXJldHVybiAoKHN4X3JlYWRfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV9pcCkgJiBJUF9EQ0QpICE9IDApOworCXJldHVybiAoKHN4X3JlYWRfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX2lwKSAmIElQX0RDRCkgIT0gMCk7CiB9CiAKLQogLyogSmVlei4gSXNuJ3QgdGhpcyBzaW1wbGU/ICovCi1zdGF0aWMgaW50IHN4X2NoYXJzX2luX2J1ZmZlciAodm9pZCAqIHB0cikgCitzdGF0aWMgaW50IHN4X2NoYXJzX2luX2J1ZmZlcih2b2lkICpwdHIpCiB7CiAJc3RydWN0IHN4X3BvcnQgKnBvcnQgPSBwdHI7CiAJZnVuY19lbnRlcjIoKTsKIAogCWZ1bmNfZXhpdCgpOwotCXJldHVybiAoKHN4X3JlYWRfY2hhbm5lbF9ieXRlIChwb3J0LCBoaV90eGlwb3MpIC0gCi0JICAgICAgICAgc3hfcmVhZF9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX3R4b3BvcykpICYgMHhmZik7CisJcmV0dXJuICgoc3hfcmVhZF9jaGFubmVsX2J5dGUocG9ydCwgaGlfdHhpcG9zKSAtCisJCSBzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV90eG9wb3MpKSAmIDB4ZmYpOwogfQogCi0KLXN0YXRpYyB2b2lkIHN4X3NodXRkb3duX3BvcnQgKHZvaWQgKiBwdHIpIAorc3RhdGljIHZvaWQgc3hfc2h1dGRvd25fcG9ydCh2b2lkICpwdHIpCiB7Ci0Jc3RydWN0IHN4X3BvcnQgKnBvcnQgPSBwdHI7IAorCXN0cnVjdCBzeF9wb3J0ICpwb3J0ID0gcHRyOwogCiAJZnVuY19lbnRlcigpOwogCi0JcG9ydC0+Z3MuZmxhZ3MgJj0gfiBHU19BQ1RJVkU7CisJcG9ydC0+Z3MuZmxhZ3MgJj0gfkdTX0FDVElWRTsKIAlpZiAocG9ydC0+Z3MudHR5ICYmIChwb3J0LT5ncy50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkpIHsKLQkJc3hfc2V0c2lnbmFscyAocG9ydCwgMCwgMCk7CisJCXN4X3NldHNpZ25hbHMocG9ydCwgMCwgMCk7CiAJCXN4X3JlY29uZmlndXJlX3BvcnQocG9ydCk7CiAJfQogCiAJZnVuY19leGl0KCk7CiB9CiAKLQotCi0KLQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqCiAgKiAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgcm91dGluZXMgdGhhdCBhY3R1YWxseSAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgaW50ZXJmYWNlIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSAgICAgICAgICAgICAgICAgICAgKgogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCi1zdGF0aWMgaW50IHN4X29wZW4gIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQorc3RhdGljIGludCBzeF9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBzeF9wb3J0ICpwb3J0OwogCWludCByZXR2YWwsIGxpbmU7CkBAIC0xNDI5LDE4ICsxNDY2LDE4IEBACiAJfQogCiAJbGluZSA9IHR0eS0+aW5kZXg7Ci0Jc3hfZHByaW50ayAoU1hfREVCVUdfT1BFTiwgIiVkOiBvcGVuaW5nIGxpbmUgJWQuIHR0eT0lcCBjdHR5PSVwLCBucD0lZClcbiIsIAotCSAgICAgICAgICAgIGN1cnJlbnQtPnBpZCwgbGluZSwgdHR5LCBjdXJyZW50LT5zaWduYWwtPnR0eSwgc3hfbnBvcnRzKTsKKwlzeF9kcHJpbnRrKFNYX0RFQlVHX09QRU4sICIlZDogb3BlbmluZyBsaW5lICVkLiB0dHk9JXAgY3R0eT0lcCwgIgorCQkJIm5wPSVkKVxuIiwgY3VycmVudC0+cGlkLCBsaW5lLCB0dHksCisJCQljdXJyZW50LT5zaWduYWwtPnR0eSwgc3hfbnBvcnRzKTsKIAogCWlmICgobGluZSA8IDApIHx8IChsaW5lID49IFNYX05QT1JUUykgfHwgKGxpbmUgPj0gc3hfbnBvcnRzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwb3J0ID0gJiBzeF9wb3J0c1tsaW5lXTsKKwlwb3J0ID0gJnN4X3BvcnRzW2xpbmVdOwogCXBvcnQtPmNfZGNkID0gMDsgLyogTWFrZSBzdXJlIHRoYXQgdGhlIGZpcnN0IGludGVycnVwdCBkb2Vzbid0IGRldGVjdCBhCi0JICAgICAgICAgICAgICAgICAgICAxIC0+IDAgdHJhbnNpdGlvbi4gKi8KKwkJCSAgICAxIC0+IDAgdHJhbnNpdGlvbi4gKi8KIAotCi0Jc3hfZHByaW50ayAoU1hfREVCVUdfT1BFTiwgInBvcnQgPSAlcCBjX2RjZCA9ICVkXG4iLCBwb3J0LCBwb3J0LT5jX2RjZCk7CisJc3hfZHByaW50ayhTWF9ERUJVR19PUEVOLCAicG9ydCA9ICVwIGNfZGNkID0gJWRcbiIsIHBvcnQsIHBvcnQtPmNfZGNkKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5ncy5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCkBAIC0xNDQ5LDEzICsxNDg2LDEzIEBACiAJcG9ydC0+Z3MuY291bnQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5ncy5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCi0Jc3hfZHByaW50ayAoU1hfREVCVUdfT1BFTiwgInN0YXJ0aW5nIHBvcnRcbiIpOworCXN4X2RwcmludGsoU1hfREVCVUdfT1BFTiwgInN0YXJ0aW5nIHBvcnRcbiIpOwogCiAJLyoKIAkgKiBTdGFydCB1cCBzZXJpYWwgcG9ydAogCSAqLwogCXJldHZhbCA9IGdzX2luaXRfcG9ydCgmcG9ydC0+Z3MpOwotCXN4X2RwcmludGsgKFNYX0RFQlVHX09QRU4sICJkb25lIGdzX2luaXRcbiIpOworCXN4X2RwcmludGsoU1hfREVCVUdfT1BFTiwgImRvbmUgZ3NfaW5pdFxuIik7CiAJaWYgKHJldHZhbCkgewogCQlwb3J0LT5ncy5jb3VudC0tOwogCQlyZXR1cm4gcmV0dmFsOwpAQCAtMTQ2MywxOSArMTUwMCwyMCBAQAogCiAJcG9ydC0+Z3MuZmxhZ3MgfD0gR1NfQUNUSVZFOwogCWlmIChwb3J0LT5ncy5jb3VudCA8PSAxKQotCQlzeF9zZXRzaWduYWxzIChwb3J0LCAxLDEpOworCQlzeF9zZXRzaWduYWxzKHBvcnQsIDEsIDEpOwogCiAjaWYgMAogCWlmIChzeF9kZWJ1ZyAmIFNYX0RFQlVHX09QRU4pCi0JCW15X2hkIChwb3J0LCBzaXplb2YgKCpwb3J0KSk7CisJCW15X2hkKHBvcnQsIHNpemVvZigqcG9ydCkpOwogI2Vsc2UKIAlpZiAoc3hfZGVidWcgJiBTWF9ERUJVR19PUEVOKQotCQlteV9oZF9pbyAocG9ydC0+Ym9hcmQtPmJhc2UgKyBwb3J0LT5jaF9iYXNlLCBzaXplb2YgKCpwb3J0KSk7CisJCW15X2hkX2lvKHBvcnQtPmJvYXJkLT5iYXNlICsgcG9ydC0+Y2hfYmFzZSwgc2l6ZW9mKCpwb3J0KSk7CiAjZW5kaWYKIAogCWlmIChwb3J0LT5ncy5jb3VudCA8PSAxKSB7Ci0JCWlmIChzeF9zZW5kX2NvbW1hbmQgKHBvcnQsIEhTX0xPUEVOLCAtMSwgSFNfSURMRV9PUEVOKSAhPSAxKSB7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJzeDogQ2FyZCBkaWRuJ3QgcmVzcG9uZCB0byBMT1BFTiBjb21tYW5kLlxuIik7CisJCWlmIChzeF9zZW5kX2NvbW1hbmQocG9ydCwgSFNfTE9QRU4sIC0xLCBIU19JRExFX09QRU4pICE9IDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic3g6IENhcmQgZGlkbid0IHJlc3BvbmQgdG8gTE9QRU4gIgorCQkJCQkiY29tbWFuZC5cbiIpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmdzLmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCQlwb3J0LT5ncy5jb3VudC0tOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+Z3MuZHJpdmVyX2xvY2ssIGZsYWdzKTsKQEAgLTE0ODQsNzUgKzE1MjIsNzYgQEAKIAl9CiAKIAlyZXR2YWwgPSBnc19ibG9ja190aWxfcmVhZHkocG9ydCwgZmlscCk7Ci0Jc3hfZHByaW50ayAoU1hfREVCVUdfT1BFTiwgIkJsb2NrIHRpbCByZWFkeSByZXR1cm5lZCAlZC4gQ291bnQ9JWRcbiIsIAotCSAgICAgICAgICAgIHJldHZhbCwgcG9ydC0+Z3MuY291bnQpOworCXN4X2RwcmludGsoU1hfREVCVUdfT1BFTiwgIkJsb2NrIHRpbCByZWFkeSByZXR1cm5lZCAlZC4gQ291bnQ9JWRcbiIsCisJCQlyZXR2YWwsIHBvcnQtPmdzLmNvdW50KTsKIAogCWlmIChyZXR2YWwpIHsKLQkJLyogCi0JCSAqIERvbid0IGxvd2VyIGdzLmNvdW50IGhlcmUgYmVjYXVzZSBzeF9jbG9zZSgpIHdpbGwgYmUgY2FsbGVkIGxhdGVyCi0JCSAqLyAKKy8qCisgKiBEb24ndCBsb3dlciBncy5jb3VudCBoZXJlIGJlY2F1c2Ugc3hfY2xvc2UoKSB3aWxsIGJlIGNhbGxlZCBsYXRlcgorICovCiAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAJLyogdHR5LT5sb3dfbGF0ZW5jeSA9IDE7ICovCiAKLQlwb3J0LT5jX2RjZCA9IHN4X2dldF9DRCAocG9ydCk7Ci0Jc3hfZHByaW50ayAoU1hfREVCVUdfT1BFTiwgImF0IG9wZW46IGNkPSVkXG4iLCBwb3J0LT5jX2RjZCk7CisJcG9ydC0+Y19kY2QgPSBzeF9nZXRfQ0QocG9ydCk7CisJc3hfZHByaW50ayhTWF9ERUJVR19PUEVOLCAiYXQgb3BlbjogY2Q9JWRcbiIsIHBvcnQtPmNfZGNkKTsKIAogCWZ1bmNfZXhpdCgpOwogCXJldHVybiAwOwogCiB9CiAKLQotc3RhdGljIHZvaWQgc3hfY2xvc2UgKHZvaWQgKnB0cikKK3N0YXRpYyB2b2lkIHN4X2Nsb3NlKHZvaWQgKnB0cikKIHsKLQlzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCA9IHB0cjsgCisJc3RydWN0IHN4X3BvcnQgKnBvcnQgPSBwdHI7CiAJLyogR2l2ZSB0aGUgcG9ydCA1IHNlY29uZHMgdG8gY2xvc2UgZG93bi4gKi8KLQlpbnQgdG8gPSA1ICogSFo7IAorCWludCB0byA9IDUgKiBIWjsKIAotCWZ1bmNfZW50ZXIgKCk7CisJZnVuY19lbnRlcigpOwogCi0Jc3hfc2V0c2lnbmFscyAocG9ydCwgMCwgMCk7Ci0Jc3hfcmVjb25maWd1cmVfcG9ydChwb3J0KTsJCi0Jc3hfc2VuZF9jb21tYW5kIChwb3J0LCBIU19DTE9TRSwgMCwgMCk7CisJc3hfc2V0c2lnbmFscyhwb3J0LCAwLCAwKTsKKwlzeF9yZWNvbmZpZ3VyZV9wb3J0KHBvcnQpOworCXN4X3NlbmRfY29tbWFuZChwb3J0LCBIU19DTE9TRSwgMCwgMCk7CiAKLQl3aGlsZSAodG8tLSAmJiAoc3hfcmVhZF9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX2hzdGF0KSAhPSBIU19JRExFX0NMT1NFRCkpCisJd2hpbGUgKHRvLS0gJiYgKHN4X3JlYWRfY2hhbm5lbF9ieXRlKHBvcnQsIGhpX2hzdGF0KSAhPSBIU19JRExFX0NMT1NFRCkpCiAJCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSgxMCkpCiAJCQlicmVhazsKLQlpZiAoc3hfcmVhZF9jaGFubmVsX2J5dGUgKHBvcnQsIGhpX2hzdGF0KSAhPSBIU19JRExFX0NMT1NFRCkgewotCQlpZiAoc3hfc2VuZF9jb21tYW5kIChwb3J0LCBIU19GT1JDRV9DTE9TRUQsIC0xLCBIU19JRExFX0NMT1NFRCkgIT0gMSkgewotCQkJcHJpbnRrIChLRVJOX0VSUiAKLQkJCSAgICAgICAgInN4OiBzZW50IHRoZSBmb3JjZV9jbG9zZSBjb21tYW5kLCBidXQgY2FyZCBkaWRuJ3QgcmVhY3RcbiIpOworCWlmIChzeF9yZWFkX2NoYW5uZWxfYnl0ZShwb3J0LCBoaV9oc3RhdCkgIT0gSFNfSURMRV9DTE9TRUQpIHsKKwkJaWYgKHN4X3NlbmRfY29tbWFuZChwb3J0LCBIU19GT1JDRV9DTE9TRUQsIC0xLCBIU19JRExFX0NMT1NFRCkKKwkJCQkhPSAxKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInN4OiBzZW50IHRoZSBmb3JjZV9jbG9zZSBjb21tYW5kLCBidXQgIgorCQkJCQkiY2FyZCBkaWRuJ3QgcmVhY3RcbiIpOwogCQl9IGVsc2UKLQkJCXN4X2RwcmludGsgKFNYX0RFQlVHX0NMT1NFLCAic2VudCB0aGUgZm9yY2VfY2xvc2UgY29tbWFuZC5cbiIpOworCQkJc3hfZHByaW50ayhTWF9ERUJVR19DTE9TRSwgInNlbnQgdGhlIGZvcmNlX2Nsb3NlICIKKwkJCQkJImNvbW1hbmQuXG4iKTsKIAl9CiAKLQlzeF9kcHJpbnRrIChTWF9ERUJVR19DTE9TRSwgIndhaXRlZCAlZCBqaWZmaWVzIGZvciBjbG9zZS4gY291bnQ9JWRcbiIsIAotCSAgICAgICAgICAgIDUgKiBIWiAtIHRvIC0gMSwgcG9ydC0+Z3MuY291bnQpOworCXN4X2RwcmludGsoU1hfREVCVUdfQ0xPU0UsICJ3YWl0ZWQgJWQgamlmZmllcyBmb3IgY2xvc2UuIGNvdW50PSVkXG4iLAorCQkJNSAqIEhaIC0gdG8gLSAxLCBwb3J0LT5ncy5jb3VudCk7CiAKLQlpZihwb3J0LT5ncy5jb3VudCkgewotCQlzeF9kcHJpbnRrKFNYX0RFQlVHX0NMT1NFLCAiV0FSTklORyBwb3J0IGNvdW50OiVkXG4iLCBwb3J0LT5ncy5jb3VudCk7Ci0JCS8vcHJpbnRrICgiJXMgU0VUVElORyBwb3J0IGNvdW50IHRvIHplcm86ICVwIGNvdW50OiAlZFxuIiwgX19GVU5DVElPTl9fLCBwb3J0LCBwb3J0LT5ncy5jb3VudCk7Ci0JCS8vcG9ydC0+Z3MuY291bnQgPSAwOworCWlmIChwb3J0LT5ncy5jb3VudCkgeworCQlzeF9kcHJpbnRrKFNYX0RFQlVHX0NMT1NFLCAiV0FSTklORyBwb3J0IGNvdW50OiVkXG4iLAorCQkJCXBvcnQtPmdzLmNvdW50KTsKKwkJLypwcmludGsoIiVzIFNFVFRJTkcgcG9ydCBjb3VudCB0byB6ZXJvOiAlcCBjb3VudDogJWRcbiIsCisJCQkJX19GVU5DVElPTl9fLCBwb3J0LCBwb3J0LT5ncy5jb3VudCk7CisJCXBvcnQtPmdzLmNvdW50ID0gMDsqLwogCX0KIAotCWZ1bmNfZXhpdCAoKTsKKwlmdW5jX2V4aXQoKTsKIH0KIAotCi0KIC8qIFRoaXMgaXMgcmVsYXRpdmVseSB0aG9yb3VnaC4gQnV0IHRoZW4gYWdhaW4gaXQgaXMgb25seSAyMCBsaW5lcy4gKi8KLSNkZWZpbmUgTUFSQ0hVUCAgICBmb3IgKGk9bWluO2k8bWF4O2krKykgCi0jZGVmaW5lIE1BUkNIRE9XTiAgZm9yIChpPW1heC0xO2k+PW1pbjtpLS0pCi0jZGVmaW5lIFcwICAgICAgICAgd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIGksIDB4NTUpCi0jZGVmaW5lIFcxICAgICAgICAgd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIGksIDB4YWEpCi0jZGVmaW5lIFIwICAgICAgICAgaWYgKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIGkpICE9IDB4NTUpIHJldHVybiAxCi0jZGVmaW5lIFIxICAgICAgICAgaWYgKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIGkpICE9IDB4YWEpIHJldHVybiAxCisjZGVmaW5lIE1BUkNIVVAJCWZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorI2RlZmluZSBNQVJDSERPV04JZm9yIChpID0gbWF4IC0gMTsgaSA+PSBtaW47IGktLSkKKyNkZWZpbmUgVzAJCXdyaXRlX3N4X2J5dGUoYm9hcmQsIGksIDB4NTUpCisjZGVmaW5lIFcxCQl3cml0ZV9zeF9ieXRlKGJvYXJkLCBpLCAweGFhKQorI2RlZmluZSBSMAkJaWYgKHJlYWRfc3hfYnl0ZShib2FyZCwgaSkgIT0gMHg1NSkgcmV0dXJuIDEKKyNkZWZpbmUgUjEJCWlmIChyZWFkX3N4X2J5dGUoYm9hcmQsIGkpICE9IDB4YWEpIHJldHVybiAxCiAKIC8qIFRoaXMgbWVtdGVzdCB0YWtlcyBhIGh1bWFuLW5vdGljYWJsZSB0aW1lLiBZb3Ugbm9ybWFsbHkgb25seSBkbyBpdAogICAgb25jZSBhIGJvb3QsIHNvIEkgZ3Vlc3MgdGhhdCBpdCBpcyB3b3J0aCBpdC4gKi8KLXN0YXRpYyBpbnQgZG9fbWVtdGVzdCAoc3RydWN0IHN4X2JvYXJkICpib2FyZCwgaW50IG1pbiwgaW50IG1heCkKK3N0YXRpYyBpbnQgZG9fbWVtdGVzdChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkLCBpbnQgbWluLCBpbnQgbWF4KQogewogCWludCBpOwogCkBAIC0xNTYxLDE2ICsxNjAwLDM3IEBACiAJICAgaW50ZXJtaXR0ZW50IGVycm9ycy4gLS0gUkVXCiAJICAgKEZvciB0aGUgdGhlb3J5IGJlaGluZCBtZW1vcnkgdGVzdGluZyBzZWU6IAogCSAgIFRlc3RpbmcgU2VtaWNvbmR1Y3RvciBNZW1vcmllcyBieSBBLkouIHZhbiBkZSBHb29yLikgKi8KLQlNQVJDSFVQCSB7VzA7fQotCU1BUkNIVVAgICB7UjA7VzE7UjE7VzA7UjA7VzE7fQotCU1BUkNIVVAgICB7UjE7VzA7VzE7fQotCU1BUkNIRE9XTiB7UjE7VzA7VzE7VzA7fQotCU1BUkNIRE9XTiB7UjA7VzE7VzA7fQorCU1BUkNIVVAgeworCQlXMDsKKwl9CisJTUFSQ0hVUCB7CisJCVIwOworCQlXMTsKKwkJUjE7CisJCVcwOworCQlSMDsKKwkJVzE7CisJfQorCU1BUkNIVVAgeworCQlSMTsKKwkJVzA7CisJCVcxOworCX0KKwlNQVJDSERPV04geworCQlSMTsKKwkJVzA7CisJCVcxOworCQlXMDsKKwl9CisJTUFSQ0hET1dOIHsKKwkJUjA7CisJCVcxOworCQlXMDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotCiAjdW5kZWYgTUFSQ0hVUAogI3VuZGVmIE1BUkNIRE9XTgogI3VuZGVmIFcwCkBAIC0xNTc4LDMzICsxNjM4LDU0IEBACiAjdW5kZWYgUjAKICN1bmRlZiBSMQogCi0jZGVmaW5lIE1BUkNIVVAgICAgZm9yIChpPW1pbjtpPG1heDtpKz0yKSAKLSNkZWZpbmUgTUFSQ0hET1dOICBmb3IgKGk9bWF4LTE7aT49bWluO2ktPTIpCi0jZGVmaW5lIFcwICAgICAgICAgd3JpdGVfc3hfd29yZCAoYm9hcmQsIGksIDB4NTVhYSkKLSNkZWZpbmUgVzEgICAgICAgICB3cml0ZV9zeF93b3JkIChib2FyZCwgaSwgMHhhYTU1KQotI2RlZmluZSBSMCAgICAgICAgIGlmIChyZWFkX3N4X3dvcmQgKGJvYXJkLCBpKSAhPSAweDU1YWEpIHJldHVybiAxCi0jZGVmaW5lIFIxICAgICAgICAgaWYgKHJlYWRfc3hfd29yZCAoYm9hcmQsIGkpICE9IDB4YWE1NSkgcmV0dXJuIDEKKyNkZWZpbmUgTUFSQ0hVUAkJZm9yIChpID0gbWluOyBpIDwgbWF4OyBpICs9IDIpCisjZGVmaW5lIE1BUkNIRE9XTglmb3IgKGkgPSBtYXggLSAxOyBpID49IG1pbjsgaSAtPSAyKQorI2RlZmluZSBXMAkJd3JpdGVfc3hfd29yZChib2FyZCwgaSwgMHg1NWFhKQorI2RlZmluZSBXMQkJd3JpdGVfc3hfd29yZChib2FyZCwgaSwgMHhhYTU1KQorI2RlZmluZSBSMAkJaWYgKHJlYWRfc3hfd29yZChib2FyZCwgaSkgIT0gMHg1NWFhKSByZXR1cm4gMQorI2RlZmluZSBSMQkJaWYgKHJlYWRfc3hfd29yZChib2FyZCwgaSkgIT0gMHhhYTU1KSByZXR1cm4gMQogCiAjaWYgMAogLyogVGhpcyBtZW10ZXN0IHRha2VzIGEgaHVtYW4tbm90aWNhYmxlIHRpbWUuIFlvdSBub3JtYWxseSBvbmx5IGRvIGl0CiAgICBvbmNlIGEgYm9vdCwgc28gSSBndWVzcyB0aGF0IGl0IGlzIHdvcnRoIGl0LiAqLwotc3RhdGljIGludCBkb19tZW10ZXN0X3cgKHN0cnVjdCBzeF9ib2FyZCAqYm9hcmQsIGludCBtaW4sIGludCBtYXgpCitzdGF0aWMgaW50IGRvX21lbXRlc3RfdyhzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkLCBpbnQgbWluLCBpbnQgbWF4KQogewogCWludCBpOwogCi0JTUFSQ0hVUCAgIHtXMDt9Ci0JTUFSQ0hVUCAgIHtSMDtXMTtSMTtXMDtSMDtXMTt9Ci0JTUFSQ0hVUCAgIHtSMTtXMDtXMTt9Ci0JTUFSQ0hET1dOIHtSMTtXMDtXMTtXMDt9Ci0JTUFSQ0hET1dOIHtSMDtXMTtXMDt9CisJTUFSQ0hVUCB7CisJCVcwOworCX0KKwlNQVJDSFVQIHsKKwkJUjA7CisJCVcxOworCQlSMTsKKwkJVzA7CisJCVIwOworCQlXMTsKKwl9CisJTUFSQ0hVUCB7CisJCVIxOworCQlXMDsKKwkJVzE7CisJfQorCU1BUkNIRE9XTiB7CisJCVIxOworCQlXMDsKKwkJVzE7CisJCVcwOworCX0KKwlNQVJDSERPV04geworCQlSMDsKKwkJVzE7CisJCVcwOworCX0KIAogCXJldHVybiAwOwogfQogI2VuZGlmCiAKLQotc3RhdGljIGludCBzeF9md19pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgc3hfZndfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCByYyA9IDA7CiAJaW50IF9fdXNlciAqZGVzY3IgPSAoaW50IF9fdXNlciAqKWFyZzsKQEAgLTE2MTYsNyArMTY5Nyw3IEBACiAKIAlmdW5jX2VudGVyKCk7CiAKLSNpZiAwIAorI2lmIDAKIAkvKiBSZW1vdmVkIHN1cGVydXNlciBjaGVjazogU3lzb3BzIGNhbiB1c2UgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBkZXZpY2UKIAkgICBmaWxlIHRvIHJlc3RyaWN0IGFjY2Vzcy4gUmVjb21tZW5kYXRpb246IFJvb3Qgb25seS4gKHJvb3Qucm9vdCA2MDApICovCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CkBAIC0xNjI0LDEwMyArMTcwNSwxMTUgQEAKIAl9CiAjZW5kaWYKIAotCXN4X2RwcmludGsgKFNYX0RFQlVHX0ZJUk1XQVJFLCAiSU9DVEwgJXg6ICVseFxuIiwgY21kLCBhcmcpOworCXN4X2RwcmludGsoU1hfREVCVUdfRklSTVdBUkUsICJJT0NUTCAleDogJWx4XG4iLCBjbWQsIGFyZyk7CiAKLQlpZiAoIWJvYXJkKSBib2FyZCA9ICZib2FyZHNbMF07CisJaWYgKCFib2FyZCkKKwkJYm9hcmQgPSAmYm9hcmRzWzBdOwogCWlmIChib2FyZC0+ZmxhZ3MgJiBTWF9CT0FSRF9QUkVTRU5UKSB7Ci0JCXN4X2RwcmludGsgKFNYX0RFQlVHX0ZJUk1XQVJFLCAiQm9hcmQgcHJlc2VudCEgKCV4KVxuIiwgCi0JCSAgICAgICAgICAgIGJvYXJkLT5mbGFncyk7CisJCXN4X2RwcmludGsoU1hfREVCVUdfRklSTVdBUkUsICJCb2FyZCBwcmVzZW50ISAoJXgpXG4iLAorCQkJCWJvYXJkLT5mbGFncyk7CiAJfSBlbHNlIHsKLQkJc3hfZHByaW50ayAoU1hfREVCVUdfRklSTVdBUkUsICJCb2FyZCBub3QgcHJlc2VudCEgKCV4KSBhbGw6IiwgCi0JCSAgICAgICAgICAgIGJvYXJkLT5mbGFncyk7Ci0JCWZvciAoaT0wO2k8IFNYX05CT0FSRFM7aSsrKQotCQkJc3hfZHByaW50ayAoU1hfREVCVUdfRklSTVdBUkUsICI8JXg+ICIsIGJvYXJkc1tpXS5mbGFncyk7Ci0JCXN4X2RwcmludGsgKFNYX0RFQlVHX0ZJUk1XQVJFLCAiXG4iKTsKKwkJc3hfZHByaW50ayhTWF9ERUJVR19GSVJNV0FSRSwgIkJvYXJkIG5vdCBwcmVzZW50ISAoJXgpIGFsbDoiLAorCQkJCWJvYXJkLT5mbGFncyk7CisJCWZvciAoaSA9IDA7IGkgPCBTWF9OQk9BUkRTOyBpKyspCisJCQlzeF9kcHJpbnRrKFNYX0RFQlVHX0ZJUk1XQVJFLCAiPCV4PiAiLCBib2FyZHNbaV0uZmxhZ3MpOworCQlzeF9kcHJpbnRrKFNYX0RFQlVHX0ZJUk1XQVJFLCAiXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNYSU9fU0VUX0JPQVJEOgotCQlzeF9kcHJpbnRrIChTWF9ERUJVR19GSVJNV0FSRSwgInNldCBib2FyZCB0byAlbGRcbiIsIGFyZyk7Ci0JCWlmIChhcmcgPj0gU1hfTkJPQVJEUykgcmV0dXJuIC1FSU87Ci0JCXN4X2RwcmludGsgKFNYX0RFQlVHX0ZJUk1XQVJFLCAibm90IG91dCBvZiByYW5nZVxuIik7Ci0JCWlmICghKGJvYXJkc1thcmddLmZsYWdzCSYgU1hfQk9BUkRfUFJFU0VOVCkpIHJldHVybiAtRUlPOwotCQlzeF9kcHJpbnRrIChTWF9ERUJVR19GSVJNV0FSRSwgIi4uIGFuZCBwcmVzZW50IVxuIik7CisJCXN4X2RwcmludGsoU1hfREVCVUdfRklSTVdBUkUsICJzZXQgYm9hcmQgdG8gJWxkXG4iLCBhcmcpOworCQlpZiAoYXJnID49IFNYX05CT0FSRFMpCisJCQlyZXR1cm4gLUVJTzsKKwkJc3hfZHByaW50ayhTWF9ERUJVR19GSVJNV0FSRSwgIm5vdCBvdXQgb2YgcmFuZ2VcbiIpOworCQlpZiAoIShib2FyZHNbYXJnXS5mbGFncyAmIFNYX0JPQVJEX1BSRVNFTlQpKQorCQkJcmV0dXJuIC1FSU87CisJCXN4X2RwcmludGsoU1hfREVCVUdfRklSTVdBUkUsICIuLiBhbmQgcHJlc2VudCFcbiIpOwogCQlib2FyZCA9ICZib2FyZHNbYXJnXTsKIAkJYnJlYWs7CiAJY2FzZSBTWElPX0dFVF9UWVBFOgotCQlyYyA9IC1FTk9FTlQ7IC8qIElmIHdlIG1hbmFnZSB0byBtaXNzIG9uZSwgcmV0dXJuIGVycm9yLiAqLwotCQlpZiAoSVNfU1hfQk9BUkQgKGJvYXJkKSkgcmMgPSBTWF9UWVBFX1NYOwotCQlpZiAoSVNfQ0ZfQk9BUkQgKGJvYXJkKSkgcmMgPSBTWF9UWVBFX0NGOwotCQlpZiAoSVNfU0lfQk9BUkQgKGJvYXJkKSkgcmMgPSBTWF9UWVBFX1NJOwotCQlpZiAoSVNfU0kxX0JPQVJEIChib2FyZCkpIHJjID0gU1hfVFlQRV9TSTsKLQkJaWYgKElTX0VJU0FfQk9BUkQgKGJvYXJkKSkgcmMgPSBTWF9UWVBFX1NJOwotCQlzeF9kcHJpbnRrIChTWF9ERUJVR19GSVJNV0FSRSwgInJldHVybmluZyB0eXBlPSAlZFxuIiwgcmMpOworCQlyYyA9IC1FTk9FTlQ7CS8qIElmIHdlIG1hbmFnZSB0byBtaXNzIG9uZSwgcmV0dXJuIGVycm9yLiAqLworCQlpZiAoSVNfU1hfQk9BUkQoYm9hcmQpKQorCQkJcmMgPSBTWF9UWVBFX1NYOworCQlpZiAoSVNfQ0ZfQk9BUkQoYm9hcmQpKQorCQkJcmMgPSBTWF9UWVBFX0NGOworCQlpZiAoSVNfU0lfQk9BUkQoYm9hcmQpKQorCQkJcmMgPSBTWF9UWVBFX1NJOworCQlpZiAoSVNfU0kxX0JPQVJEKGJvYXJkKSkKKwkJCXJjID0gU1hfVFlQRV9TSTsKKwkJaWYgKElTX0VJU0FfQk9BUkQoYm9hcmQpKQorCQkJcmMgPSBTWF9UWVBFX1NJOworCQlzeF9kcHJpbnRrKFNYX0RFQlVHX0ZJUk1XQVJFLCAicmV0dXJuaW5nIHR5cGU9ICVkXG4iLCByYyk7CiAJCWJyZWFrOwogCWNhc2UgU1hJT19ET19SQU1URVNUOgotCQlpZiAoc3hfaW5pdGlhbGl6ZWQpIC8qIEFscmVhZHkgaW5pdGlhbGl6ZWQ6IGJldHRlciBub3QgcmFtdGVzdCB0aGUgYm9hcmQuICAqLworCQlpZiAoc3hfaW5pdGlhbGl6ZWQpCS8qIEFscmVhZHkgaW5pdGlhbGl6ZWQ6IGJldHRlciBub3QgcmFtdGVzdCB0aGUgYm9hcmQuICAqLwogCQkJcmV0dXJuIC1FUEVSTTsKLQkJaWYgKElTX1NYX0JPQVJEIChib2FyZCkpIHsKLQkJCXJjICAgICAgICAgID0gZG9fbWVtdGVzdCAgIChib2FyZCwgMCwgMHg3MDAwKTsKLQkJCWlmICghcmMpIHJjID0gZG9fbWVtdGVzdCAgIChib2FyZCwgMCwgMHg3MDAwKTsKLQkJCS8qaWYgKCFyYykgcmMgPSBkb19tZW10ZXN0X3cgKGJvYXJkLCAwLCAweDcwMDApOyovCisJCWlmIChJU19TWF9CT0FSRChib2FyZCkpIHsKKwkJCXJjID0gZG9fbWVtdGVzdChib2FyZCwgMCwgMHg3MDAwKTsKKwkJCWlmICghcmMpCisJCQkJcmMgPSBkb19tZW10ZXN0KGJvYXJkLCAwLCAweDcwMDApOworCQkJLyppZiAoIXJjKSByYyA9IGRvX21lbXRlc3RfdyAoYm9hcmQsIDAsIDB4NzAwMCk7ICovCiAJCX0gZWxzZSB7Ci0JCQlyYyAgICAgICAgICAgICA9IGRvX21lbXRlc3QgICAoYm9hcmQsIDAsIDB4N2ZmOCk7CisJCQlyYyA9IGRvX21lbXRlc3QoYm9hcmQsIDAsIDB4N2ZmOCk7CiAJCQkvKiBpZiAoIXJjKSByYyA9IGRvX21lbXRlc3RfdyAoYm9hcmQsIDAsIDB4N2ZmOCk7ICovCiAJCX0KLQkJc3hfZHByaW50ayAoU1hfREVCVUdfRklSTVdBUkUsICJyZXR1cm5pbmcgbWVtdGVzdCByZXN1bHQ9ICVkXG4iLCByYyk7CisJCXN4X2RwcmludGsoU1hfREVCVUdfRklSTVdBUkUsICJyZXR1cm5pbmcgbWVtdGVzdCByZXN1bHQ9ICVkXG4iLAorCQkJICAgcmMpOwogCQlicmVhazsKIAljYXNlIFNYSU9fRE9XTkxPQUQ6Ci0JCWlmIChzeF9pbml0aWFsaXplZCkgLyogQWxyZWFkeSBpbml0aWFsaXplZCAqLworCQlpZiAoc3hfaW5pdGlhbGl6ZWQpCS8qIEFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KIAkJCXJldHVybiAtRUVYSVNUOwotCQlpZiAoIXN4X3Jlc2V0IChib2FyZCkpIAorCQlpZiAoIXN4X3Jlc2V0KGJvYXJkKSkKIAkJCXJldHVybiAtRUlPOwotCQlzeF9kcHJpbnRrIChTWF9ERUJVR19JTklULCAicmVzZXQgdGhlIGJvYXJkLi4uXG4iKTsKKwkJc3hfZHByaW50ayhTWF9ERUJVR19JTklULCAicmVzZXQgdGhlIGJvYXJkLi4uXG4iKTsKIAotCQl0bXAgPSBrbWFsbG9jIChTWF9DSFVOS19TSVpFLCBHRlBfVVNFUik7Ci0JCWlmICghdG1wKSByZXR1cm4gLUVOT01FTTsKLQkJZ2V0X3VzZXIgKG5ieXRlcywgZGVzY3IrKyk7Ci0JCWdldF91c2VyIChvZmZzZXQsIGRlc2NyKyspOyAKLQkJZ2V0X3VzZXIgKGRhdGEsCSBkZXNjcisrKTsKKwkJdG1wID0ga21hbGxvYyhTWF9DSFVOS19TSVpFLCBHRlBfVVNFUik7CisJCWlmICghdG1wKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWdldF91c2VyKG5ieXRlcywgZGVzY3IrKyk7CisJCWdldF91c2VyKG9mZnNldCwgZGVzY3IrKyk7CisJCWdldF91c2VyKGRhdGEsIGRlc2NyKyspOwogCQl3aGlsZSAobmJ5dGVzICYmIGRhdGEpIHsKLQkJCWZvciAoaT0wO2k8bmJ5dGVzO2kgKz0gU1hfQ0hVTktfU0laRSkgewotCQkJCWlmIChjb3B5X2Zyb21fdXNlcih0bXAsIChjaGFyIF9fdXNlciAqKWRhdGEraSwgCi0JCQkJCQkgICAoaSArIFNYX0NIVU5LX1NJWkUgPgotCQkJCQkJICAgIG5ieXRlcykgPyBuYnl0ZXMgLSBpIDoKLQkJCQkJCSAgIAkgICAgICBTWF9DSFVOS19TSVpFKSkgewotCQkJCQlrZnJlZSAodG1wKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBuYnl0ZXM7IGkgKz0gU1hfQ0hVTktfU0laRSkgeworCQkJCWlmIChjb3B5X2Zyb21fdXNlcih0bXAsIChjaGFyIF9fdXNlciAqKWRhdGEgKyBpLAorCQkJCQkJKGkgKyBTWF9DSFVOS19TSVpFID4gbmJ5dGVzKSA/CisJCQkJCQluYnl0ZXMgLSBpIDogU1hfQ0hVTktfU0laRSkpIHsKKwkJCQkJa2ZyZWUodG1wKTsKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQkJfQotCQkJCW1lbWNweV90b2lvKGJvYXJkLT5iYXNlMiArIG9mZnNldCArIGksIHRtcCwgCi0JCQkJICAgICAgICAgICAgICAgIChpK1NYX0NIVU5LX1NJWkU+bmJ5dGVzKT9uYnl0ZXMtaTpTWF9DSFVOS19TSVpFKTsKKwkJCQltZW1jcHlfdG9pbyhib2FyZC0+YmFzZTIgKyBvZmZzZXQgKyBpLCB0bXAsCisJCQkJCQkoaSArIFNYX0NIVU5LX1NJWkUgPiBuYnl0ZXMpID8KKwkJCQkJCW5ieXRlcyAtIGkgOiBTWF9DSFVOS19TSVpFKTsKIAkJCX0KIAotCQkJZ2V0X3VzZXIgKG5ieXRlcywgZGVzY3IrKyk7Ci0JCQlnZXRfdXNlciAob2Zmc2V0LCBkZXNjcisrKTsgCi0JCQlnZXRfdXNlciAoZGF0YSwgICBkZXNjcisrKTsKKwkJCWdldF91c2VyKG5ieXRlcywgZGVzY3IrKyk7CisJCQlnZXRfdXNlcihvZmZzZXQsIGRlc2NyKyspOworCQkJZ2V0X3VzZXIoZGF0YSwgZGVzY3IrKyk7CiAJCX0KLQkJa2ZyZWUgKHRtcCk7Ci0JCXN4X25wb3J0cyArPSBzeF9pbml0X2JvYXJkIChib2FyZCk7CisJCWtmcmVlKHRtcCk7CisJCXN4X25wb3J0cyArPSBzeF9pbml0X2JvYXJkKGJvYXJkKTsKIAkJcmMgPSBzeF9ucG9ydHM7CiAJCWJyZWFrOwogCWNhc2UgU1hJT19JTklUOgotCQlpZiAoc3hfaW5pdGlhbGl6ZWQpIC8qIEFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwkJaWYgKHN4X2luaXRpYWxpemVkKQkvKiBBbHJlYWR5IGluaXRpYWxpemVkICovCiAJCQlyZXR1cm4gLUVFWElTVDsKIAkJLyogVGhpcyBpcyBub3QgYWxsb3dlZCB1bnRpbCBhbGwgYm9hcmRzIGFyZSBpbml0aWFsaXplZC4uLiAqLwotCQlmb3IgKGk9MDtpPFNYX05CT0FSRFM7aSsrKSB7Ci0JCQlpZiAoIChib2FyZHNbaV0uZmxhZ3MgJiBTWF9CT0FSRF9QUkVTRU5UKSAmJgotCQkJICAgICAhKGJvYXJkc1tpXS5mbGFncyAmIFNYX0JPQVJEX0lOSVRJQUxJWkVEKSkKKwkJZm9yIChpID0gMDsgaSA8IFNYX05CT0FSRFM7IGkrKykgeworCQkJaWYgKChib2FyZHNbaV0uZmxhZ3MgJiBTWF9CT0FSRF9QUkVTRU5UKSAmJgorCQkJCSEoYm9hcmRzW2ldLmZsYWdzICYgU1hfQk9BUkRfSU5JVElBTElaRUQpKQogCQkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWZvciAoaT0wO2k8U1hfTkJPQVJEUztpKyspCi0JCQlpZiAoIShib2FyZHNbaV0uZmxhZ3MgJiBTWF9CT0FSRF9QUkVTRU5UKSkgYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPCBTWF9OQk9BUkRTOyBpKyspCisJCQlpZiAoIShib2FyZHNbaV0uZmxhZ3MgJiBTWF9CT0FSRF9QUkVTRU5UKSkKKwkJCQlicmVhazsKIAotCQlzeF9kcHJpbnRrIChTWF9ERUJVR19GSVJNV0FSRSwgImluaXRpbmcgcG9ydHN0cnVjdHMsICVkIGJvYXJkcywgIgotCQkgICAgICAgICAgICAiJWQgY2hhbm5lbHMsIGZpcnN0IGJvYXJkOiAlZCBwb3J0c1xuIiwgCi0JCSAgICAgICAgICAgIGksIHN4X25wb3J0cywgYm9hcmRzWzBdLm5wb3J0cyk7Ci0JCXJjID0gc3hfaW5pdF9wb3J0c3RydWN0cyAoaSwgc3hfbnBvcnRzKTsKLQkJc3hfaW5pdF9kcml2ZXJzICgpOwotCQlpZiAocmMgPj0gMCkgCisJCXN4X2RwcmludGsoU1hfREVCVUdfRklSTVdBUkUsICJpbml0aW5nIHBvcnRzdHJ1Y3RzLCAlZCBib2FyZHMsICIKKwkJCQkiJWQgY2hhbm5lbHMsIGZpcnN0IGJvYXJkOiAlZCBwb3J0c1xuIiwKKwkJCQlpLCBzeF9ucG9ydHMsIGJvYXJkc1swXS5ucG9ydHMpOworCQlyYyA9IHN4X2luaXRfcG9ydHN0cnVjdHMoaSwgc3hfbnBvcnRzKTsKKwkJc3hfaW5pdF9kcml2ZXJzKCk7CisJCWlmIChyYyA+PSAwKQogCQkJc3hfaW5pdGlhbGl6ZWQrKzsKIAkJYnJlYWs7CiAJY2FzZSBTWElPX1NFVERFQlVHOgpAQCAtMTczNywzMiArMTgzMCwzMiBAQAogCQlyYyA9IHN4X25wb3J0czsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIlVua25vd24gaW9jdGwgb24gZmlybXdhcmUgZGV2aWNlICgleCkuXG4iLCBjbWQpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIGlvY3RsIG9uIGZpcm13YXJlIGRldmljZSAoJXgpLlxuIiwKKwkJCQljbWQpOwogCQlicmVhazsKIAl9Ci0JZnVuY19leGl0ICgpOworCWZ1bmNfZXhpdCgpOwogCXJldHVybiByYzsKIH0KIAotCi1zdGF0aWMgdm9pZCBzeF9icmVhayAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGludCBmbGFnKQorc3RhdGljIHZvaWQgc3hfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGZsYWcpCiB7CiAJc3RydWN0IHN4X3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWludCBydjsKIAotCWZ1bmNfZW50ZXIgKCk7CisJZnVuY19lbnRlcigpOwogCi0JaWYgKGZsYWcpIAotCQlydiA9IHN4X3NlbmRfY29tbWFuZCAocG9ydCwgSFNfU1RBUlQsIC0xLCBIU19JRExFX0JSRUFLKTsKLQllbHNlIAotCQlydiA9IHN4X3NlbmRfY29tbWFuZCAocG9ydCwgSFNfU1RPUCwgLTEsIEhTX0lETEVfT1BFTik7Ci0JaWYgKHJ2ICE9IDEpIHByaW50ayAoS0VSTl9FUlIgInN4OiBjb3VsZG4ndCBzZW5kIGJyZWFrICgleCkuXG4iLAotCQkJcmVhZF9zeF9ieXRlIChwb3J0LT5ib2FyZCwgQ0hBTl9PRkZTRVQgKHBvcnQsIGhpX2hzdGF0KSkpOworCWlmIChmbGFnKQorCQlydiA9IHN4X3NlbmRfY29tbWFuZChwb3J0LCBIU19TVEFSVCwgLTEsIEhTX0lETEVfQlJFQUspOworCWVsc2UKKwkJcnYgPSBzeF9zZW5kX2NvbW1hbmQocG9ydCwgSFNfU1RPUCwgLTEsIEhTX0lETEVfT1BFTik7CisJaWYgKHJ2ICE9IDEpCisJCXByaW50ayhLRVJOX0VSUiAic3g6IGNvdWxkbid0IHNlbmQgYnJlYWsgKCV4KS5cbiIsCisJCQlyZWFkX3N4X2J5dGUocG9ydC0+Ym9hcmQsIENIQU5fT0ZGU0VUKHBvcnQsIGhpX2hzdGF0KSkpOwogCi0JZnVuY19leGl0ICgpOworCWZ1bmNfZXhpdCgpOwogfQogCi0KIHN0YXRpYyBpbnQgc3hfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHN4X3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwpAQCAtMTc3MCw3ICsxODYzLDcgQEAKIH0KIAogc3RhdGljIGludCBzeF90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKKwkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewogCXN0cnVjdCBzeF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcnRzID0gLTEsIGR0ciA9IC0xOwpAQCAtMTc4OSw4ICsxODgyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzeF9pb2N0bCAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlscCwgCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgc3hfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCByYzsKIAlzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CkBAIC0xODAzLDEwICsxODk2LDEwIEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFRJT0NHU09GVENBUjoKIAkJcmMgPSBwdXRfdXNlcigoKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgPyAxIDogMCksCi0JCSAgICAgICAgICAgICAgKHVuc2lnbmVkIF9fdXNlciAqKSBhcmdwKTsKKwkJCQkodW5zaWduZWQgX191c2VyICopYXJncCk7CiAJCWJyZWFrOwogCWNhc2UgVElPQ1NTT0ZUQ0FSOgotCQlpZiAoKHJjID0gZ2V0X3VzZXIoaXZhbCwgKHVuc2lnbmVkIF9fdXNlciAqKSBhcmdwKSkgPT0gMCkgeworCQlpZiAoKHJjID0gZ2V0X3VzZXIoaXZhbCwgKHVuc2lnbmVkIF9fdXNlciAqKWFyZ3ApKSA9PSAwKSB7CiAJCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPQogCQkJCSh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiB+Q0xPQ0FMKSB8CiAJCQkJKGl2YWwgPyBDTE9DQUwgOiAwKTsKQEAgLTE4MjcsNyArMTkyMCw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0KIC8qIFRoZSB0aHJvdHRsZS91bnRocm90dGxlIHNjaGVtZSBmb3IgdGhlIFNwZWNpYWxpeCBjYXJkIGlzIGRpZmZlcmVudAogICogZnJvbSBvdGhlciBkcml2ZXJzIGFuZCBkZXNlcnZlcyBzb21lIGV4cGxhbmF0aW9uLiAKICAqIFRoZSBTcGVjaWFsaXggaGFyZHdhcmUgdGFrZXMgY2FyZSBvZiBYT04vWE9GRgpAQCAtMTg0NCw3ICsxOTM2LDcgQEAKICAqIGZsb3cgY29udHJvbCBzY2hlbWUgaXMgaW4gdXNlIGZvciB0aGF0IHBvcnQuIC0tIFNpbW9uIEFsbGVuCiAgKi8KIAotc3RhdGljIHZvaWQgc3hfdGhyb3R0bGUgKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQorc3RhdGljIHZvaWQgc3hfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc3hfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAKQEAgLTE4NTIsMTQgKzE5NDQsMTMgQEAKIAkvKiBJZiB0aGUgcG9ydCBpcyB1c2luZyBhbnkgdHlwZSBvZiBpbnB1dCBmbG93CiAJICogY29udHJvbCB0aGVuIHRocm90dGxlIHRoZSBwb3J0LgogCSAqLwotCWlmKCh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB8fCAoSV9JWE9GRih0dHkpKSApIHsKKwlpZiAoKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHx8IChJX0lYT0ZGKHR0eSkpKSB7CiAJCXBvcnQtPmdzLmZsYWdzIHw9IFNYX1JYX1RIUk9UVExFOwogCX0KIAlmdW5jX2V4aXQoKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBzeF91bnRocm90dGxlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3N0YXRpYyB2b2lkIHN4X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3Qgc3hfcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc3hfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAKQEAgLTE4NzMsMTUgKzE5NjQsMTEgQEAKIAlyZXR1cm47CiB9CiAKLQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqCiAgKiAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiAgICAgICAgICAgICAgICoKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAotCi0KLQotc3RhdGljIGludCBzeF9pbml0X2JvYXJkIChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkKQorc3RhdGljIGludCBzeF9pbml0X2JvYXJkKHN0cnVjdCBzeF9ib2FyZCAqYm9hcmQpCiB7CiAJaW50IGFkZHI7CiAJaW50IGNoYW5zOwpAQCAtMTg5MywzNiArMTk4MCwzOCBAQAogCiAJYm9hcmQtPmZsYWdzIHw9IFNYX0JPQVJEX0lOSVRJQUxJWkVEOwogCi0JaWYgKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIDApKQorCWlmIChyZWFkX3N4X2J5dGUoYm9hcmQsIDApKQogCQkvKiBDRiBib2FyZHMgbWF5IG5lZWQgdGhpcy4gKi8KLQkJd3JpdGVfc3hfYnl0ZShib2FyZCwwLCAwKTsKKwkJd3JpdGVfc3hfYnl0ZShib2FyZCwgMCwgMCk7CiAKIAkvKiBUaGlzIHJlc2V0cyB0aGUgcHJvY2Vzc29yIGFnYWluLCB0byBtYWtlIHN1cmUgaXQgZGlkbid0IGRvIGFueQogCSAgIGZvb2xpc2ggdGhpbmdzIHdoaWxlIHdlIHdlcmUgZG93bmxvYWRpbmcgdGhlIGltYWdlICovCi0JaWYgKCFzeF9yZXNldCAoYm9hcmQpKQorCWlmICghc3hfcmVzZXQoYm9hcmQpKQogCQlyZXR1cm4gMDsKIAotCXN4X3N0YXJ0X2JvYXJkIChib2FyZCk7Ci0JdWRlbGF5ICgxMCk7Ci0JaWYgKCFzeF9idXN5X3dhaXRfbmVxIChib2FyZCwgMCwgMHhmZiwgMCkpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAic3g6IE9vb3BzLiBCb2FyZCB3b24ndCBpbml0aWFsaXplLlxuIik7CisJc3hfc3RhcnRfYm9hcmQoYm9hcmQpOworCXVkZWxheSgxMCk7CisJaWYgKCFzeF9idXN5X3dhaXRfbmVxKGJvYXJkLCAwLCAweGZmLCAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgInN4OiBPb29wcy4gQm9hcmQgd29uJ3QgaW5pdGlhbGl6ZS5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBPay4gU28gbm93IHRoZSBwcm9jZXNzb3Igb24gdGhlIGNhcmQgaXMgcnVubmluZy4gSXQgZ2F0aGVyZWQKIAkgICBzb21lIGluZm8gZm9yIHVzLi4uICovCi0Jc3hfZHByaW50ayAoU1hfREVCVUdfSU5JVCwgIlRoZSBzeGNhcmQgc3RydWN0dXJlOlxuIik7Ci0JaWYgKHN4X2RlYnVnICYgU1hfREVCVUdfSU5JVCkgbXlfaGRfaW8gKGJvYXJkLT5iYXNlLCAweDEwKTsKLQlzeF9kcHJpbnRrIChTWF9ERUJVR19JTklULCAidGhlIGZpcnN0IHN4X21vZHVsZSBzdHJ1Y3R1cmU6XG4iKTsKLQlpZiAoc3hfZGVidWcgJiBTWF9ERUJVR19JTklUKSBteV9oZF9pbyAoYm9hcmQtPmJhc2UgKyAweDgwLCAweDMwKTsKKwlzeF9kcHJpbnRrKFNYX0RFQlVHX0lOSVQsICJUaGUgc3hjYXJkIHN0cnVjdHVyZTpcbiIpOworCWlmIChzeF9kZWJ1ZyAmIFNYX0RFQlVHX0lOSVQpCisJCW15X2hkX2lvKGJvYXJkLT5iYXNlLCAweDEwKTsKKwlzeF9kcHJpbnRrKFNYX0RFQlVHX0lOSVQsICJ0aGUgZmlyc3Qgc3hfbW9kdWxlIHN0cnVjdHVyZTpcbiIpOworCWlmIChzeF9kZWJ1ZyAmIFNYX0RFQlVHX0lOSVQpCisJCW15X2hkX2lvKGJvYXJkLT5iYXNlICsgMHg4MCwgMHgzMCk7CiAKLQlzeF9kcHJpbnRrIChTWF9ERUJVR19JTklULCAKLQkgICAgICAgICAgICAiaW5pdF9zdGF0dXM6ICV4LCAlZGsgbWVtb3J5LCBmaXJtd2FyZSBWJXguJTAyeCxcbiIsIAotCSAgICAgICAgICAgIHJlYWRfc3hfYnl0ZSAoYm9hcmQsIDApLCByZWFkX3N4X2J5dGUoYm9hcmQsIDEpLCAKLQkgICAgICAgICAgICByZWFkX3N4X2J5dGUgKGJvYXJkLCA1KSwgcmVhZF9zeF9ieXRlKGJvYXJkLCA0KSk7CisJc3hfZHByaW50ayhTWF9ERUJVR19JTklULCAiaW5pdF9zdGF0dXM6ICV4LCAlZGsgbWVtb3J5LCBmaXJtd2FyZSAiCisJCQkiViV4LiUwMngsXG4iLAorCQkJcmVhZF9zeF9ieXRlKGJvYXJkLCAwKSwgcmVhZF9zeF9ieXRlKGJvYXJkLCAxKSwKKwkJCXJlYWRfc3hfYnl0ZShib2FyZCwgNSksIHJlYWRfc3hfYnl0ZShib2FyZCwgNCkpOwogCi0JaWYgKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIDApID09IDB4ZmYpIHsKLQkJcHJpbnRrIChLRVJOX0lORk8gInN4OiBObyBtb2R1bGVzIGZvdW5kLiBTb3JyeS5cbiIpOworCWlmIChyZWFkX3N4X2J5dGUoYm9hcmQsIDApID09IDB4ZmYpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic3g6IE5vIG1vZHVsZXMgZm91bmQuIFNvcnJ5LlxuIik7CiAJCWJvYXJkLT5ucG9ydHMgPSAwOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xOTMwLDgyICsyMDE5LDk3IEBACiAJY2hhbnMgPSAwOwogCiAJaWYgKElTX1NYX0JPQVJEKGJvYXJkKSkgewotCQlzeF93cml0ZV9ib2FyZF93b3JkIChib2FyZCwgY2NfaW50X2NvdW50LCBzeF9tYXhpbnRzKTsKKwkJc3hfd3JpdGVfYm9hcmRfd29yZChib2FyZCwgY2NfaW50X2NvdW50LCBzeF9tYXhpbnRzKTsKIAl9IGVsc2UgewogCQlpZiAoc3hfbWF4aW50cykKLQkJCXN4X3dyaXRlX2JvYXJkX3dvcmQgKGJvYXJkLCBjY19pbnRfY291bnQsIFNJX1BST0NFU1NPUl9DTE9DSy84L3N4X21heGludHMpOworCQkJc3hfd3JpdGVfYm9hcmRfd29yZChib2FyZCwgY2NfaW50X2NvdW50LAorCQkJCQlTSV9QUk9DRVNTT1JfQ0xPQ0sgLyA4IC8gc3hfbWF4aW50cyk7CiAJfQogCiAJLyogZ3JhYiB0aGUgZmlyc3QgbW9kdWxlIHR5cGUuLi4gKi8KLQkvKiAgYm9hcmQtPnRhX3R5cGUgPSBtb2RfY29tcGF0X3R5cGUgKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIDB4ODAgKyAweDA4KSk7ICovCi0JYm9hcmQtPnRhX3R5cGUgPSBtb2RfY29tcGF0X3R5cGUgKHN4X3JlYWRfbW9kdWxlX2J5dGUgKGJvYXJkLCAweDgwLCBtY19jaGlwKSk7CisJLyogYm9hcmQtPnRhX3R5cGUgPSBtb2RfY29tcGF0X3R5cGUgKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIDB4ODAgKyAweDA4KSk7ICovCisJYm9hcmQtPnRhX3R5cGUgPSBtb2RfY29tcGF0X3R5cGUoc3hfcmVhZF9tb2R1bGVfYnl0ZShib2FyZCwgMHg4MCwKKwkJCQltY19jaGlwKSk7CiAKIAkvKiBYWFggYnl0ZW9yZGVyICovCi0JZm9yIChhZGRyID0gMHg4MDthZGRyICE9IDA7YWRkciA9IHJlYWRfc3hfd29yZCAoYm9hcmQsIGFkZHIpICYgMHg3ZmZmKSB7Ci0JCXR5cGUgPSBzeF9yZWFkX21vZHVsZV9ieXRlIChib2FyZCwgYWRkciwgbWNfY2hpcCk7Ci0JCXN4X2RwcmludGsgKFNYX0RFQlVHX0lOSVQsICJNb2R1bGUgYXQgJXg6ICVkIGNoYW5uZWxzXG4iLCAKLQkJICAgICAgICAgICAgYWRkciwgcmVhZF9zeF9ieXRlIChib2FyZCwgYWRkciArIDIpKTsKKwlmb3IgKGFkZHIgPSAweDgwOyBhZGRyICE9IDA7IGFkZHIgPSByZWFkX3N4X3dvcmQoYm9hcmQsIGFkZHIpICYgMHg3ZmZmKXsKKwkJdHlwZSA9IHN4X3JlYWRfbW9kdWxlX2J5dGUoYm9hcmQsIGFkZHIsIG1jX2NoaXApOworCQlzeF9kcHJpbnRrKFNYX0RFQlVHX0lOSVQsICJNb2R1bGUgYXQgJXg6ICVkIGNoYW5uZWxzXG4iLAorCQkJCWFkZHIsIHJlYWRfc3hfYnl0ZShib2FyZCwgYWRkciArIDIpKTsKIAotCQljaGFucyArPSBzeF9yZWFkX21vZHVsZV9ieXRlIChib2FyZCwgYWRkciwgbWNfdHlwZSk7CisJCWNoYW5zICs9IHN4X3JlYWRfbW9kdWxlX2J5dGUoYm9hcmQsIGFkZHIsIG1jX3R5cGUpOwogCi0JCXN4X2RwcmludGsgKFNYX0RFQlVHX0lOSVQsICJtb2R1bGUgaXMgYW4gJXMsIHdoaWNoIGhhcyAlcy8lcyBwYW5lbHNcbiIsIAotCQkgICAgICAgICAgICBtb2RfdHlwZV9zICh0eXBlKSwKLQkJICAgICAgICAgICAgcGFuX3R5cGVfcyAoc3hfcmVhZF9tb2R1bGVfYnl0ZSAoYm9hcmQsIGFkZHIsIG1jX21vZHMpICYgMHhmKSwKLQkJICAgICAgICAgICAgcGFuX3R5cGVfcyAoc3hfcmVhZF9tb2R1bGVfYnl0ZSAoYm9hcmQsIGFkZHIsIG1jX21vZHMpID4+IDQpKTsKKwkJc3hfZHByaW50ayhTWF9ERUJVR19JTklULCAibW9kdWxlIGlzIGFuICVzLCB3aGljaCBoYXMgJXMvJXMgIgorCQkJCSJwYW5lbHNcbiIsCisJCQkJbW9kX3R5cGVfcyh0eXBlKSwKKwkJCQlwYW5fdHlwZV9zKHN4X3JlYWRfbW9kdWxlX2J5dGUoYm9hcmQsIGFkZHIsCisJCQkJCQltY19tb2RzKSAmIDB4ZiksCisJCQkJcGFuX3R5cGVfcyhzeF9yZWFkX21vZHVsZV9ieXRlKGJvYXJkLCBhZGRyLAorCQkJCQkJbWNfbW9kcykgPj4gNCkpOwogCi0JCXN4X2RwcmludGsgKFNYX0RFQlVHX0lOSVQsICJDRDE0MDAgdmVyc2lvbnM6ICV4LyV4LCBBU0lDIHZlcnNpb246ICV4XG4iLCAKLQkJICAgICAgICAgICAgc3hfcmVhZF9tb2R1bGVfYnl0ZSAoYm9hcmQsIGFkZHIsIG1jX3JldjEpLAotCQkgICAgICAgICAgICBzeF9yZWFkX21vZHVsZV9ieXRlIChib2FyZCwgYWRkciwgbWNfcmV2MiksCi0JCSAgICAgICAgICAgIHN4X3JlYWRfbW9kdWxlX2J5dGUgKGJvYXJkLCBhZGRyLCBtY19tdGFhc2ljX3JldikpOworCQlzeF9kcHJpbnRrKFNYX0RFQlVHX0lOSVQsICJDRDE0MDAgdmVyc2lvbnM6ICV4LyV4LCBBU0lDICIKKwkJCSJ2ZXJzaW9uOiAleFxuIiwKKwkJCXN4X3JlYWRfbW9kdWxlX2J5dGUoYm9hcmQsIGFkZHIsIG1jX3JldjEpLAorCQkJc3hfcmVhZF9tb2R1bGVfYnl0ZShib2FyZCwgYWRkciwgbWNfcmV2MiksCisJCQlzeF9yZWFkX21vZHVsZV9ieXRlKGJvYXJkLCBhZGRyLCBtY19tdGFhc2ljX3JldikpOwogCiAJCS8qIFRoZSBmb2xsb3dpbmcgY29tYmluYXRpb25zIGFyZSBpbGxlZ2FsOiBJdCBzaG91bGQgdGhlb3JldGljYWxseQogCQkgICB3b3JrLCBidXQgdGltaW5nIHByb2JsZW1zIG1ha2UgdGhlIGJ1cyBIQU5HLiAqLwogCi0JCWlmIChtb2RfY29tcGF0X3R5cGUgKHR5cGUpICE9IGJvYXJkLT50YV90eXBlKSB7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJzeDogVGhpcyBpcyBhbiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24uXG4iCi0JCQkgICAgICAgICJEb24ndCBtaXggVEEvTVRBL1NYREMgb24gdGhlIHNhbWUgaG9zdGFkYXB0ZXIuXG4iKTsKLQkJCWNoYW5zPTA7CisJCWlmIChtb2RfY29tcGF0X3R5cGUodHlwZSkgIT0gYm9hcmQtPnRhX3R5cGUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic3g6IFRoaXMgaXMgYW4gaW52YWxpZCAiCisJCQkJImNvbmZpZ3VyYXRpb24uXG5Eb24ndCBtaXggVEEvTVRBL1NYREMgb24gdGhlICIKKwkJCQkic2FtZSBob3N0YWRhcHRlci5cbiIpOworCQkJY2hhbnMgPSAwOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKChJU19FSVNBX0JPQVJEKGJvYXJkKSB8fCAKLQkJICAgICBJU19TSV9CT0FSRChib2FyZCkpICYmIChtb2RfY29tcGF0X3R5cGUodHlwZSkgPT0gNCkpIHsKLQkJCXByaW50ayAoS0VSTl9FUlIgInN4OiBUaGlzIGlzIGFuIGludmFsaWQgY29uZmlndXJhdGlvbi5cbiIKLQkJCSAgICAgICAgIkRvbid0IHVzZSBTWERDcyBvbiBhbiBTSS9YSU8gYWRhcHRlci5cbiIpOwotCQkJY2hhbnM9MDsKKwkJaWYgKChJU19FSVNBX0JPQVJEKGJvYXJkKSB8fAorCQkJCUlTX1NJX0JPQVJEKGJvYXJkKSkgJiYKKwkJCQkobW9kX2NvbXBhdF90eXBlKHR5cGUpID09IDQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIJInN4OiBUaGlzIGlzIGFuIGludmFsaWQgIgorCQkJCSJjb25maWd1cmF0aW9uLlxuRG9uJ3QgdXNlIFNYRENzIG9uIGFuIFNJL1hJTyAiCisJCQkJImFkYXB0ZXIuXG4iKTsKKwkJCWNoYW5zID0gMDsKIAkJCWJyZWFrOwogCQl9Ci0jaWYgMCAvKiBQcm9ibGVtIGZpeGVkOiBmaXJtd2FyZSAzLjA1ICovCisjaWYgMAkJCQkvKiBQcm9ibGVtIGZpeGVkOiBmaXJtd2FyZSAzLjA1ICovCiAJCWlmIChJU19TWF9CT0FSRChib2FyZCkgJiYgKHR5cGUgPT0gVEE4KSkgewogCQkJLyogVGhlcmUgYXJlIHNvbWUgaXNzdWVzIHdpdGggdGhlIGZpcm13YXJlIGFuZCB0aGUgRENEL1JUUwogCQkJICAgbGluZXMuIEl0IG1pZ2h0IHdvcmsgaWYgeW91IHRpZSB0aGVtIHRvZ2V0aGVyIG9yIHNvbWV0aGluZy4KLQkJCSAgIEl0IG1pZ2h0IGFsc28gd29yayBpZiB5b3UgZ2V0IGEgbmV3ZXIgc3hfZmlybXdhcmUuCVRoZXJlZm9yZQorCQkJICAgSXQgbWlnaHQgYWxzbyB3b3JrIGlmIHlvdSBnZXQgYSBuZXdlciBzeF9maXJtd2FyZS4gICBUaGVyZWZvcmUKIAkJCSAgIHRoaXMgaXMganVzdCBhIHdhcm5pbmcuICovCi0JCQlwcmludGsgKEtFUk5fV0FSTklORyAic3g6IFRoZSBTWCBob3N0IGRvZXNuJ3Qgd29yayB0b28gd2VsbCAiCi0JCQkgICAgICAgICJ3aXRoIHRoZSBUQTggYWRhcHRlcnMuXG5TcGVjaWFsaXggaXMgd29ya2luZyBvbiBpdC5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJzeDogVGhlIFNYIGhvc3QgZG9lc24ndCB3b3JrIHRvbyB3ZWxsICIKKwkJCSAgICAgICAid2l0aCB0aGUgVEE4IGFkYXB0ZXJzLlxuU3BlY2lhbGl4IGlzIHdvcmtpbmcgb24gaXQuXG4iKTsKIAkJfQogI2VuZGlmCiAJfQogCiAJaWYgKGNoYW5zKSB7Ci0JCS8qIGJvYXJkLT5mbGFncyB8PSBTWF9CT0FSRF9QUkVTRU5UOyAqLwotCQlpZihib2FyZC0+aXJxID4gMCkgeworCQlpZiAoYm9hcmQtPmlycSA+IDApIHsKIAkJCS8qIGZpeGVkIGlycSwgcHJvYmFibHkgUENJICovCi0JCQlpZihzeF9pcnFtYXNrICYgKDEgPDwgYm9hcmQtPmlycSkpIHsgLyogbWF5IHdlIHVzZSB0aGlzIGlycT8gKi8KLQkJCQlpZihyZXF1ZXN0X2lycShib2FyZC0+aXJxLCBzeF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgInN4IiwgYm9hcmQpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAic3g6IENhbm5vdCBhbGxvY2F0ZSBpcnEgJWQuXG4iLCBib2FyZC0+aXJxKTsKKwkJCWlmIChzeF9pcnFtYXNrICYgKDEgPDwgYm9hcmQtPmlycSkpIHsJLyogbWF5IHdlIHVzZSB0aGlzIGlycT8gKi8KKwkJCQlpZiAocmVxdWVzdF9pcnEoYm9hcmQtPmlycSwgc3hfaW50ZXJydXB0LAorCQkJCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAorCQkJCQkJInN4IiwgYm9hcmQpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAic3g6IENhbm5vdCBhbGxvY2F0ZSAiCisJCQkJCQkiaXJxICVkLlxuIiwgYm9hcmQtPmlycSk7CiAJCQkJCWJvYXJkLT5pcnEgPSAwOwogCQkJCX0KIAkJCX0gZWxzZQogCQkJCWJvYXJkLT5pcnEgPSAwOwotCQl9IGVsc2UgaWYoYm9hcmQtPmlycSA8IDAgJiYgc3hfaXJxbWFzaykgeworCQl9IGVsc2UgaWYgKGJvYXJkLT5pcnEgPCAwICYmIHN4X2lycW1hc2spIHsKIAkJCS8qIGF1dG8tYWxsb2NhdGUgaXJxICovCiAJCQlpbnQgaXJxbnI7Ci0JCQlpbnQgaXJxbWFzayA9IHN4X2lycW1hc2sgJiAoSVNfU1hfQk9BUkQoYm9hcmQpID8gU1hfSVNBX0lSUV9NQVNLIDogU0kyX0lTQV9JUlFfTUFTSyk7Ci0JCQlmb3IoaXJxbnIgPSAxNTsgaXJxbnIgPiAwOyBpcnFuci0tKQotCQkJCWlmKGlycW1hc2sgJiAoMSA8PCBpcnFucikpCi0JCQkJCWlmKCEgcmVxdWVzdF9pcnEoaXJxbnIsIHN4X2ludGVycnVwdCwgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCAic3giLCBib2FyZCkpCisJCQlpbnQgaXJxbWFzayA9IHN4X2lycW1hc2sgJiAoSVNfU1hfQk9BUkQoYm9hcmQpID8KKwkJCQkJU1hfSVNBX0lSUV9NQVNLIDogU0kyX0lTQV9JUlFfTUFTSyk7CisJCQlmb3IgKGlycW5yID0gMTU7IGlycW5yID4gMDsgaXJxbnItLSkKKwkJCQlpZiAoaXJxbWFzayAmICgxIDw8IGlycW5yKSkKKwkJCQkJaWYgKCFyZXF1ZXN0X2lycShpcnFuciwgc3hfaW50ZXJydXB0LAorCQkJCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAorCQkJCQkJInN4IiwgYm9hcmQpKQogCQkJCQkJYnJlYWs7Ci0JCQlpZighIGlycW5yKQorCQkJaWYgKCFpcnFucikKIAkJCQlwcmludGsoS0VSTl9FUlIgInN4OiBDYW5ub3QgYWxsb2NhdGUgSVJRLlxuIik7CiAJCQlib2FyZC0+aXJxID0gaXJxbnI7CiAJCX0gZWxzZQpAQCAtMjAxMyw1MiArMjExNyw0OCBAQAogCiAJCWlmIChib2FyZC0+aXJxKSB7CiAJCQkvKiBGb3VuZCBhIHZhbGlkIGludGVycnVwdCwgc3RhcnQgdXAgaW50ZXJydXB0cyEgKi8KLQkJCXN4X2RwcmludGsgKFNYX0RFQlVHX0lOSVQsICJVc2luZyBpcnEgJWQuXG4iLCBib2FyZC0+aXJxKTsKLQkJCXN4X3N0YXJ0X2ludGVycnVwdHMgKGJvYXJkKTsKKwkJCXN4X2RwcmludGsoU1hfREVCVUdfSU5JVCwgIlVzaW5nIGlycSAlZC5cbiIsCisJCQkJCWJvYXJkLT5pcnEpOworCQkJc3hfc3RhcnRfaW50ZXJydXB0cyhib2FyZCk7CiAJCQlib2FyZC0+cG9sbCA9IHN4X3Nsb3dwb2xsOwogCQkJYm9hcmQtPmZsYWdzIHw9IFNYX0lSUV9BTExPQ0FURUQ7CiAJCX0gZWxzZSB7CiAJCQkvKiBubyBpcnE6IHNldHVwIGJvYXJkIGZvciBwb2xsZWQgb3BlcmF0aW9uICovCiAJCQlib2FyZC0+cG9sbCA9IHN4X3BvbGw7Ci0JCQlzeF9kcHJpbnRrIChTWF9ERUJVR19JTklULCAiVXNpbmcgcG9sbC1pbnRlcnZhbCAlZC5cbiIsIGJvYXJkLT5wb2xsKTsKKwkJCXN4X2RwcmludGsoU1hfREVCVUdfSU5JVCwgIlVzaW5nIHBvbGwtaW50ZXJ2YWwgJWQuXG4iLAorCQkJCQlib2FyZC0+cG9sbCk7CiAJCX0KIAotCQkvKiBUaGUgdGltZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFueXdheTogVGhhdCB3YXkgd2UgY2FuIHNhZmVseQotCQkJIGRlbF90aW1lciBpdCB3aGVuIHRoZSBtb2R1bGUgaXMgdW5sb2FkZWQuICovCi0JCWluaXRfdGltZXIgKCZib2FyZC0+dGltZXIpOworCQkvKiBUaGUgdGltZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFueXdheTogVGhhdCB3YXkgd2UgY2FuCisJCSAgIHNhZmVseSBkZWxfdGltZXIgaXQgd2hlbiB0aGUgbW9kdWxlIGlzIHVubG9hZGVkLiAqLworCQlzZXR1cF90aW1lcigmYm9hcmQtPnRpbWVyLCBzeF9wb2xsZnVuYywgKHVuc2lnbmVkIGxvbmcpYm9hcmQpOwogCi0JCWlmIChib2FyZC0+cG9sbCkgewotCQkJYm9hcmQtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYm9hcmQ7Ci0JCQlib2FyZC0+dGltZXIuZnVuY3Rpb24gPSBzeF9wb2xsZnVuYzsKLQkJCWJvYXJkLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIGJvYXJkLT5wb2xsOwotCQkJYWRkX3RpbWVyICgmYm9hcmQtPnRpbWVyKTsKLQkJfQorCQlpZiAoYm9hcmQtPnBvbGwpCisJCQltb2RfdGltZXIoJmJvYXJkLT50aW1lciwgamlmZmllcyArIGJvYXJkLT5wb2xsKTsKIAl9IGVsc2UgewogCQlib2FyZC0+aXJxID0gMDsKIAl9CiAKIAlib2FyZC0+bnBvcnRzID0gY2hhbnM7Ci0Jc3hfZHByaW50ayAoU1hfREVCVUdfSU5JVCwgInJldHVybmluZyAlZCBwb3J0cy4iLCBib2FyZC0+bnBvcnRzKTsKKwlzeF9kcHJpbnRrKFNYX0RFQlVHX0lOSVQsICJyZXR1cm5pbmcgJWQgcG9ydHMuIiwgYm9hcmQtPm5wb3J0cyk7CiAKIAlmdW5jX2V4aXQoKTsKIAlyZXR1cm4gY2hhbnM7CiB9CiAKLQotc3RhdGljIHZvaWQgcHJpbnRoZWFkZXIodm9pZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwcmludGhlYWRlcih2b2lkKQogewogCXN0YXRpYyBpbnQgaGVhZGVyX3ByaW50ZWQ7CiAKIAlpZiAoIWhlYWRlcl9wcmludGVkKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPICJTcGVjaWFsaXggU1ggZHJpdmVyICIKLQkJICAgICAgICAiKEMpIDE5OTgvMTk5OSBSLkUuV29sZmZAQml0V2l6YXJkLm5sIFxuIik7Ci0JCXByaW50ayAoS0VSTl9JTkZPICJzeDogdmVyc2lvbiAlc1xuIiwgUkNTX0lEKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU3BlY2lhbGl4IFNYIGRyaXZlciAiCisJCQkiKEMpIDE5OTgvMTk5OSBSLkUuV29sZmZAQml0V2l6YXJkLm5sXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic3g6IHZlcnNpb24gIiBfX3N0cmluZ2lmeShTWF9WRVJTSU9OKSAiXG4iKTsKIAkJaGVhZGVyX3ByaW50ZWQgPSAxOwogCX0KIH0KIAotCi1zdGF0aWMgaW50IHByb2JlX3N4IChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkKQorc3RhdGljIGludCBfX2RldmluaXQgcHJvYmVfc3goc3RydWN0IHN4X2JvYXJkICpib2FyZCkKIHsKIAlzdHJ1Y3QgdnBkX3Byb20gdnBkcDsKIAljaGFyICpwOwpAQCAtMjA2Niw1MSArMjE2Niw1NyBAQAogCiAJZnVuY19lbnRlcigpOwogCi0JaWYgKCFJU19DRl9CT0FSRCAoYm9hcmQpKSB7ICAgIAotCQlzeF9kcHJpbnRrIChTWF9ERUJVR19QUk9CRSwgIkdvaW5nIHRvIHZlcmlmeSB2cGQgcHJvbSBhdCAlcC5cbiIsIAotCQkgICAgICAgICAgICBib2FyZC0+YmFzZSArIFNYX1ZQRF9ST00pOworCWlmICghSVNfQ0ZfQk9BUkQoYm9hcmQpKSB7CisJCXN4X2RwcmludGsoU1hfREVCVUdfUFJPQkUsICJHb2luZyB0byB2ZXJpZnkgdnBkIHByb20gYXQgJXAuXG4iLAorCQkJCWJvYXJkLT5iYXNlICsgU1hfVlBEX1JPTSk7CiAKIAkJaWYgKHN4X2RlYnVnICYgU1hfREVCVUdfUFJPQkUpCiAJCQlteV9oZF9pbyhib2FyZC0+YmFzZSArIFNYX1ZQRF9ST00sIDB4NDApOwogCi0JCXAgPSAoY2hhciAqKSAmdnBkcDsKLQkJZm9yIChpPTA7aTwgc2l6ZW9mIChzdHJ1Y3QgdnBkX3Byb20pO2krKykKLQkJCSpwKysgPSByZWFkX3N4X2J5dGUgKGJvYXJkLCBTWF9WUERfUk9NICsgaSoyKTsKKwkJcCA9IChjaGFyICopJnZwZHA7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHZwZF9wcm9tKTsgaSsrKQorCQkJKnArKyA9IHJlYWRfc3hfYnl0ZShib2FyZCwgU1hfVlBEX1JPTSArIGkgKiAyKTsKIAogCQlpZiAoc3hfZGVidWcgJiBTWF9ERUJVR19QUk9CRSkKLQkJCW15X2hkICgmdnBkcCwgMHgyMCk7CisJCQlteV9oZCgmdnBkcCwgMHgyMCk7CiAKLQkJc3hfZHByaW50ayAoU1hfREVCVUdfUFJPQkUsICJjaGVja2luZyBpZGVudGlmaWVyLi4uXG4iKTsKKwkJc3hfZHByaW50ayhTWF9ERUJVR19QUk9CRSwgImNoZWNraW5nIGlkZW50aWZpZXIuLi5cbiIpOwogCi0JCWlmIChzdHJuY21wICh2cGRwLmlkZW50aWZpZXIsIFNYX1ZQRF9JREVOVF9TVFJJTkcsIDE2KSAhPSAwKSB7Ci0JCQlzeF9kcHJpbnRrIChTWF9ERUJVR19QUk9CRSwgIkdvdCBub24tU1ggaWRlbnRpZmllcjogJyVzJ1xuIiwgCi0JCQkgICAgICAgICAgICB2cGRwLmlkZW50aWZpZXIpOyAKKwkJaWYgKHN0cm5jbXAodnBkcC5pZGVudGlmaWVyLCBTWF9WUERfSURFTlRfU1RSSU5HLCAxNikgIT0gMCkgeworCQkJc3hfZHByaW50ayhTWF9ERUJVR19QUk9CRSwgIkdvdCBub24tU1ggaWRlbnRpZmllcjogIgorCQkJCQkiJyVzJ1xuIiwgdnBkcC5pZGVudGlmaWVyKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCi0JcHJpbnRoZWFkZXIgKCk7CisJcHJpbnRoZWFkZXIoKTsKIAotCWlmICghSVNfQ0ZfQk9BUkQgKGJvYXJkKSkgewotCQlwcmludGsgKEtFUk5fREVCVUcgInN4OiBGb3VuZCBhbiBTWCBib2FyZCBhdCAlbHhcbiIsIGJvYXJkLT5od19iYXNlKTsKLQkJcHJpbnRrIChLRVJOX0RFQlVHICJzeDogaHdfcmV2OiAlZCwgYXNzZW1ibHkgbGV2ZWw6ICVkLCB1bmlxIElEOiUwOHgsICIsIAotCQkgICAgICAgIHZwZHAuaHdyZXYsIHZwZHAuaHdhc3MsIHZwZHAudW5pcWlkKTsKLQkJcHJpbnRrICggICAgICAgICAgICJNYW51ZmFjdHVyZWQ6ICVkLyVkXG4iLCAKLQkJICAgICAgICAxOTcwICsgdnBkcC5teWVhciwgdnBkcC5td2Vlayk7CisJaWYgKCFJU19DRl9CT0FSRChib2FyZCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInN4OiBGb3VuZCBhbiBTWCBib2FyZCBhdCAlbHhcbiIsCisJCQlib2FyZC0+aHdfYmFzZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJzeDogaHdfcmV2OiAlZCwgYXNzZW1ibHkgbGV2ZWw6ICVkLCAiCisJCQkJInVuaXEgSUQ6JTA4eCwgIiwKKwkJCQl2cGRwLmh3cmV2LCB2cGRwLmh3YXNzLCB2cGRwLnVuaXFpZCk7CisJCXByaW50aygiTWFudWZhY3R1cmVkOiAlZC8lZFxuIiwgMTk3MCArIHZwZHAubXllYXIsIHZwZHAubXdlZWspOwogCi0KLQkJaWYgKCgoKHZwZHAudW5pcWlkID4+IDI0KSAmIFNYX1VOSVFVRUlEX01BU0spICE9IFNYX1BDSV9VTklRVUVJRDEpICYmCi0JCSAgICAoKCh2cGRwLnVuaXFpZCA+PiAyNCkgJiBTWF9VTklRVUVJRF9NQVNLKSAhPSBTWF9JU0FfVU5JUVVFSUQxKSkgewotCQkJLyogVGhpcyBtaWdodCBiZSBhIGJpdCBoYXJzaC4gVGhpcyB3YXMgdGhlIHByaW1hcnkgcmVhc29uIHRoZQotCQkJICAgU1gvSVNBIGNhcmQgZGlkbid0IHdvcmsgYXQgZmlyc3QuLi4gKi8KLQkJCXByaW50ayAoS0VSTl9FUlIgInN4OiBIbW0uIE5vdCBhbiBTWC9QQ0kgb3IgU1gvSVNBIGNhcmQuIFNvcnJ5OiBnaXZpbmcgdXAuXG4iKTsKKwkJaWYgKCgoKHZwZHAudW5pcWlkID4+IDI0KSAmIFNYX1VOSVFVRUlEX01BU0spICE9CisJCQkJU1hfUENJX1VOSVFVRUlEMSkgJiYgKCgodnBkcC51bmlxaWQgPj4gMjQpICYKKwkJCQlTWF9VTklRVUVJRF9NQVNLKSAhPSBTWF9JU0FfVU5JUVVFSUQxKSkgeworCQkJLyogVGhpcyBtaWdodCBiZSBhIGJpdCBoYXJzaC4gVGhpcyB3YXMgdGhlIHByaW1hcnkKKwkJCSAgIHJlYXNvbiB0aGUgU1gvSVNBIGNhcmQgZGlkbid0IHdvcmsgYXQgZmlyc3QuLi4gKi8KKwkJCXByaW50ayhLRVJOX0VSUiAic3g6IEhtbS4gTm90IGFuIFNYL1BDSSBvciBTWC9JU0EgIgorCQkJCQkiY2FyZC4gU29ycnk6IGdpdmluZyB1cC5cbiIpOwogCQkJcmV0dXJuICgwKTsKIAkJfQogCi0JCWlmICgoKHZwZHAudW5pcWlkID4+IDI0KSAmIFNYX1VOSVFVRUlEX01BU0spID09IFNYX0lTQV9VTklRVUVJRDEpIHsKKwkJaWYgKCgodnBkcC51bmlxaWQgPj4gMjQpICYgU1hfVU5JUVVFSURfTUFTSykgPT0KKwkJCQlTWF9JU0FfVU5JUVVFSUQxKSB7CiAJCQlpZiAoKCh1bnNpZ25lZCBsb25nKWJvYXJkLT5od19iYXNlKSAmIDB4ODAwMCkgewotCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJzeDogV2FybmluZzogVGhlcmUgbWF5IGJlIGhhcmR3YXJlIHByb2JsZW1zIHdpdGggdGhlIGNhcmQgYXQgJWx4LlxuIiwgYm9hcmQtPmh3X2Jhc2UpOwotCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJzeDogUmVhZCBzeC50eHQgZm9yIG1vcmUgaW5mby5cbiIpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInN4OiBXYXJuaW5nOiBUaGVyZSBtYXkgYmUgIgorCQkJCQkiaGFyZHdhcmUgcHJvYmxlbXMgd2l0aCB0aGUgY2FyZCBhdCAiCisJCQkJCSIlbHguXG4iLCBib2FyZC0+aHdfYmFzZSk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3g6IFJlYWQgc3gudHh0IGZvciBtb3JlICIKKwkJCQkJCSJpbmZvLlxuIik7CiAJCQl9CiAJCX0KIAl9CkBAIC0yMTE4LDE3ICsyMjI0LDE1IEBACiAJYm9hcmQtPm5wb3J0cyA9IC0xOwogCiAJLyogVGhpcyByZXNldHMgdGhlIHByb2Nlc3NvciwgYW5kIGtlZXBzIGl0IG9mZiB0aGUgYnVzLiAqLwotCWlmICghc3hfcmVzZXQgKGJvYXJkKSkgCisJaWYgKCFzeF9yZXNldChib2FyZCkpCiAJCXJldHVybiAwOwotCXN4X2RwcmludGsgKFNYX0RFQlVHX0lOSVQsICJyZXNldCB0aGUgYm9hcmQuLi5cbiIpOwotCi0JYm9hcmQtPmZsYWdzIHw9IFNYX0JPQVJEX1BSRVNFTlQ7CisJc3hfZHByaW50ayhTWF9ERUJVR19JTklULCAicmVzZXQgdGhlIGJvYXJkLi4uXG4iKTsKIAogCWZ1bmNfZXhpdCgpOwogCXJldHVybiAxOwogfQogCi0KKyNpZiBkZWZpbmVkKENPTkZJR19JU0EpIHx8IGRlZmluZWQoQ09ORklHX0VJU0EpCiAKIC8qIFNwZWNpYWxpeCBwcm9iZXMgZm9yIHRoaXMgY2FyZCBhdCAzMmsgaW5jcmVtZW50cyBmcm9tIDY0MGsgdG8gMTZNLgogICAgSSBjb25zaWRlciBtYWNoaW5lcyB3aXRoIGxlc3MgdGhhbiAxNk0gdW5saWtlbHkgbm93YWRheXMsIHNvIEknbQpAQCAtMjEzNiwyOCArMjI0MCwyNyBAQAogICAgY2FyZC4gMHhlMDAwMCBhbmQgMHhmMDAwMCBhcmUgdGFrZW4gYnkgdGhlIEJJT1MuIFRoYXQgb25seSBsZWF2ZXMgCiAgICAweGMwMDAwLCAweGM4MDAwLCAweGQwMDAwIGFuZCAweGQ4MDAwIC4gKi8KIAotc3RhdGljIGludCBwcm9iZV9zaSAoc3RydWN0IHN4X2JvYXJkICpib2FyZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHByb2JlX3NpKHN0cnVjdCBzeF9ib2FyZCAqYm9hcmQpCiB7CiAJaW50IGk7CiAKIAlmdW5jX2VudGVyKCk7Ci0Jc3hfZHByaW50ayAoU1hfREVCVUdfUFJPQkUsICJHb2luZyB0byB2ZXJpZnkgU0kgc2lnbmF0dXJlIGh3ICVseCBhdCAlcC5cbiIsIGJvYXJkLT5od19iYXNlLAotCSAgICAgICAgICAgIGJvYXJkLT5iYXNlICsgU0kyX0lTQV9JRF9CQVNFKTsKKwlzeF9kcHJpbnRrKFNYX0RFQlVHX1BST0JFLCAiR29pbmcgdG8gdmVyaWZ5IFNJIHNpZ25hdHVyZSBodyAlbHggYXQgIgorCQkiJXAuXG4iLCBib2FyZC0+aHdfYmFzZSwgYm9hcmQtPmJhc2UgKyBTSTJfSVNBX0lEX0JBU0UpOwogCiAJaWYgKHN4X2RlYnVnICYgU1hfREVCVUdfUFJPQkUpCiAJCW15X2hkX2lvKGJvYXJkLT5iYXNlICsgU0kyX0lTQV9JRF9CQVNFLCAweDgpOwogCiAJaWYgKCFJU19FSVNBX0JPQVJEKGJvYXJkKSkgewotCSAgaWYoIElTX1NJMV9CT0FSRChib2FyZCkgKSAKLQkgICAgewotCQlmb3IgKGk9MDtpPDg7aSsrKSB7Ci0JCSAgd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSURfQkFTRSs3LWksaSk7IAotCisJCWlmIChJU19TSTFfQk9BUkQoYm9hcmQpKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCQkJd3JpdGVfc3hfYnl0ZShib2FyZCwgU0kyX0lTQV9JRF9CQVNFICsgNyAtIGksaSk7CisJCQl9CiAJCX0KLQkgICAgfQotCQlmb3IgKGk9MDtpPDg7aSsrKSB7Ci0JCQlpZiAoKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSURfQkFTRSs3LWkpICYgNykgIT0gaSkgewotCQkJCWZ1bmNfZXhpdCAoKTsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJaWYgKChyZWFkX3N4X2J5dGUoYm9hcmQsIFNJMl9JU0FfSURfQkFTRSArIDcgLSBpKSAmIDcpCisJCQkJCSE9IGkpIHsKKwkJCQlmdW5jX2V4aXQoKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMjE2NywyMCArMjI3MCwyMCBAQAogCSAgIGJ1dCB0byBwcmV2ZW50IHRyb3VibGUsIHdlJ2QgYmV0dGVyIGRvdWJsZSBjaGVjayB0aGF0IHdlIGRvbid0CiAJICAgaGF2ZSBhbiBTSTEgYm9hcmQgd2hlbiB3ZSdyZSBwcm9iaW5nIGZvciBhbiBTSTIgYm9hcmQuLi4uICovCiAKLQl3cml0ZV9zeF9ieXRlIChib2FyZCwgU0kyX0lTQV9JRF9CQVNFLDB4MTApOyAKLQlpZiAoIElTX1NJMV9CT0FSRChib2FyZCkpIHsKKwl3cml0ZV9zeF9ieXRlKGJvYXJkLCBTSTJfSVNBX0lEX0JBU0UsIDB4MTApOworCWlmIChJU19TSTFfQk9BUkQoYm9hcmQpKSB7CiAJCS8qIFRoaXMgc2hvdWxkIGJlIGFuIFNJMSBib2FyZCwgd2hpY2ggaGFzIHRoaXMKIAkJICAgbG9jYXRpb24gd3JpdGFibGUuLi4gKi8KLQkJaWYgKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSURfQkFTRSkgIT0gMHgxMCkgewotCQkJZnVuY19leGl0ICgpOwotCQkJcmV0dXJuIDA7IAorCQlpZiAocmVhZF9zeF9ieXRlKGJvYXJkLCBTSTJfSVNBX0lEX0JBU0UpICE9IDB4MTApIHsKKwkJCWZ1bmNfZXhpdCgpOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBUaGlzIHNob3VsZCBiZSBhbiBTSTIgYm9hcmQsIHdoaWNoIGhhcyB0aGUgYm90dG9tCiAJCSAgIDMgYml0cyBub24td3JpdGFibGUuLi4gKi8KLQkJaWYgKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSURfQkFTRSkgPT0gMHgxMCkgewotCQkJZnVuY19leGl0ICgpOwotCQkJcmV0dXJuIDA7IAorCQlpZiAocmVhZF9zeF9ieXRlKGJvYXJkLCBTSTJfSVNBX0lEX0JBU0UpID09IDB4MTApIHsKKwkJCWZ1bmNfZXhpdCgpOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKQEAgLTIxODgsNDUgKzIyOTEsNDQgQEAKIAkgICBidXQgdG8gcHJldmVudCB0cm91YmxlLCB3ZSdkIGJldHRlciBkb3VibGUgY2hlY2sgdGhhdCB3ZSBkb24ndAogCSAgIGhhdmUgYW4gU0kxIGJvYXJkIHdoZW4gd2UncmUgcHJvYmluZyBmb3IgYW4gU0kyIGJvYXJkLi4uLiAqLwogCi0Jd3JpdGVfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSURfQkFTRSwweDEwKTsgCi0JaWYgKCBJU19TSTFfQk9BUkQoYm9hcmQpKSB7CisJd3JpdGVfc3hfYnl0ZShib2FyZCwgU0kyX0lTQV9JRF9CQVNFLCAweDEwKTsKKwlpZiAoSVNfU0kxX0JPQVJEKGJvYXJkKSkgewogCQkvKiBUaGlzIHNob3VsZCBiZSBhbiBTSTEgYm9hcmQsIHdoaWNoIGhhcyB0aGlzCiAJCSAgIGxvY2F0aW9uIHdyaXRhYmxlLi4uICovCi0JCWlmIChyZWFkX3N4X2J5dGUgKGJvYXJkLCBTSTJfSVNBX0lEX0JBU0UpICE9IDB4MTApIHsKKwkJaWYgKHJlYWRfc3hfYnl0ZShib2FyZCwgU0kyX0lTQV9JRF9CQVNFKSAhPSAweDEwKSB7CiAJCQlmdW5jX2V4aXQoKTsKLQkJCXJldHVybiAwOyAKKwkJCXJldHVybiAwOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogVGhpcyBzaG91bGQgYmUgYW4gU0kyIGJvYXJkLCB3aGljaCBoYXMgdGhlIGJvdHRvbQogCQkgICAzIGJpdHMgbm9uLXdyaXRhYmxlLi4uICovCi0JCWlmIChyZWFkX3N4X2J5dGUgKGJvYXJkLCBTSTJfSVNBX0lEX0JBU0UpID09IDB4MTApIHsKLQkJCWZ1bmNfZXhpdCAoKTsKLQkJCXJldHVybiAwOyAKKwkJaWYgKHJlYWRfc3hfYnl0ZShib2FyZCwgU0kyX0lTQV9JRF9CQVNFKSA9PSAweDEwKSB7CisJCQlmdW5jX2V4aXQoKTsKKwkJCXJldHVybiAwOwogCQl9CiAJfQogCi0JcHJpbnRoZWFkZXIgKCk7CisJcHJpbnRoZWFkZXIoKTsKIAotCXByaW50ayAoS0VSTl9ERUJVRyAic3g6IEZvdW5kIGFuIFNJIGJvYXJkIGF0ICVseFxuIiwgYm9hcmQtPmh3X2Jhc2UpOworCXByaW50ayhLRVJOX0RFQlVHICJzeDogRm91bmQgYW4gU0kgYm9hcmQgYXQgJWx4XG4iLCBib2FyZC0+aHdfYmFzZSk7CiAJLyogQ29tcGFyZWQgdG8gdGhlIFNYIGJvYXJkcywgaXQgaXMgYSBjb21wbGV0ZSBndWVzcyBhcyB0byB3aGF0Ci0JCSB0aGlzIGNhcmQgaXMgdXAgdG8uLi4gKi8KKwkgICB0aGlzIGNhcmQgaXMgdXAgdG8uLi4gKi8KIAogCWJvYXJkLT5ucG9ydHMgPSAtMTsKIAogCS8qIFRoaXMgcmVzZXRzIHRoZSBwcm9jZXNzb3IsIGFuZCBrZWVwcyBpdCBvZmYgdGhlIGJ1cy4gKi8KLQlpZiAoIXN4X3Jlc2V0IChib2FyZCkpIAorCWlmICghc3hfcmVzZXQoYm9hcmQpKQogCQlyZXR1cm4gMDsKLQlzeF9kcHJpbnRrIChTWF9ERUJVR19JTklULCAicmVzZXQgdGhlIGJvYXJkLi4uXG4iKTsKLQotCWJvYXJkLT5mbGFncyB8PSBTWF9CT0FSRF9QUkVTRU5UOworCXN4X2RwcmludGsoU1hfREVCVUdfSU5JVCwgInJlc2V0IHRoZSBib2FyZC4uLlxuIik7CiAKIAlmdW5jX2V4aXQoKTsKIAlyZXR1cm4gMTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIHN4X29wcyA9IHsKIAkuYnJlYWtfY3RsID0gc3hfYnJlYWssCi0JLm9wZW4JPSBzeF9vcGVuLAorCS5vcGVuID0gc3hfb3BlbiwKIAkuY2xvc2UgPSBnc19jbG9zZSwKIAkud3JpdGUgPSBnc193cml0ZSwKIAkucHV0X2NoYXIgPSBnc19wdXRfY2hhciwKQEAgLTIyNjEsMzQgKzIzNjMsMjMgQEAKIAlzeF9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwogCXN4X2RyaXZlci0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKIAlzeF9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKLQlzeF9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0KLQkgIEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwlzeF9kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCXN4X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gOTYwMDsKKwlzeF9kcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAJc3hfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVc7CiAJdHR5X3NldF9vcGVyYXRpb25zKHN4X2RyaXZlciwgJnN4X29wcyk7CiAKIAlpZiAoKGVycm9yID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihzeF9kcml2ZXIpKSkgewogCQlwdXRfdHR5X2RyaXZlcihzeF9kcml2ZXIpOwogCQlwcmludGsoS0VSTl9FUlIgInN4OiBDb3VsZG4ndCByZWdpc3RlciBzeCBkcml2ZXIsIGVycm9yID0gJWRcbiIsCi0JCSAgICAgICBlcnJvcik7CisJCQllcnJvcik7CiAJCXJldHVybiAxOwogCX0KIAlmdW5jX2V4aXQoKTsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgdm9pZCAqIGNrbWFsbG9jIChpbnQgc2l6ZSkKLXsKLQl2b2lkICpwOwotCi0JcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHApIAotCQltZW1zZXQocCwgMCwgc2l6ZSk7Ci0JcmV0dXJuIHA7Ci19Ci0KLQotc3RhdGljIGludCBzeF9pbml0X3BvcnRzdHJ1Y3RzIChpbnQgbmJvYXJkcywgaW50IG5wb3J0cykKK3N0YXRpYyBpbnQgc3hfaW5pdF9wb3J0c3RydWN0cyhpbnQgbmJvYXJkcywgaW50IG5wb3J0cykKIHsKIAlzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkOwogCXN0cnVjdCBzeF9wb3J0ICpwb3J0OwpAQCAtMjI5OSw4ICsyMzkwLDkgQEAKIAlmdW5jX2VudGVyKCk7CiAKIAkvKiBNYW55IGRyaXZlcnMgc3RhdGljYWxseSBhbGxvY2F0ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9ydHMKLQkgICBUaGVyZSBpcyBubyByZWFzb24gbm90IHRvIGFsbG9jYXRlIHRoZW0gZHluYW1pY2FsbHkuIElzIHRoZXJlPyAtLSBSRVcgKi8KLQlzeF9wb3J0cyAgICAgICAgICA9IGNrbWFsbG9jKG5wb3J0cyAqIHNpemVvZiAoc3RydWN0IHN4X3BvcnQpKTsKKwkgICBUaGVyZSBpcyBubyByZWFzb24gbm90IHRvIGFsbG9jYXRlIHRoZW0gZHluYW1pY2FsbHkuCisJICAgSXMgdGhlcmU/IC0tIFJFVyAqLworCXN4X3BvcnRzID0ga2NhbGxvYyhucG9ydHMsIHNpemVvZihzdHJ1Y3Qgc3hfcG9ydCksIEdGUF9LRVJORUwpOwogCWlmICghc3hfcG9ydHMpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMzA4LDEwICsyNDAwLDEwIEBACiAJZm9yIChpID0gMDsgaSA8IG5ib2FyZHM7IGkrKykgewogCQlib2FyZCA9ICZib2FyZHNbaV07CiAJCWJvYXJkLT5wb3J0cyA9IHBvcnQ7Ci0JCWZvciAoaj0wOyBqIDwgYm9hcmRzW2ldLm5wb3J0cztqKyspIHsKLQkJCXN4X2RwcmludGsgKFNYX0RFQlVHX0lOSVQsICJpbml0aW5nIHBvcnQgJWRcbiIsIGopOworCQlmb3IgKGogPSAwOyBqIDwgYm9hcmRzW2ldLm5wb3J0czsgaisrKSB7CisJCQlzeF9kcHJpbnRrKFNYX0RFQlVHX0lOSVQsICJpbml0aW5nIHBvcnQgJWRcbiIsIGopOwogCQkJcG9ydC0+Z3MubWFnaWMgPSBTWF9NQUdJQzsKLQkJCXBvcnQtPmdzLmNsb3NlX2RlbGF5ID0gSFovMjsKKwkJCXBvcnQtPmdzLmNsb3NlX2RlbGF5ID0gSFogLyAyOwogCQkJcG9ydC0+Z3MuY2xvc2luZ193YWl0ID0gMzAgKiBIWjsKIAkJCXBvcnQtPmJvYXJkID0gYm9hcmQ7CiAJCQlwb3J0LT5ncy5yZCA9ICZzeF9yZWFsX2RyaXZlcjsKQEAgLTIzMjMsOCArMjQxNSw4IEBACiAJCQkgKiBJbml0aWFsaXppbmcgd2FpdCBxdWV1ZQogCQkJICovCiAJCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5ncy5vcGVuX3dhaXQpOwotCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+Z3MuY2xvc2Vfd2FpdCk7IAkJCi0JCQkKKwkJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPmdzLmNsb3NlX3dhaXQpOworCiAJCQlwb3J0Kys7CiAJCX0KIAl9CkBAIC0yMzM1LDI4ICsyNDI3LDM2IEBACiAJCWJvYXJkID0gJmJvYXJkc1tpXTsKIAkJYm9hcmQtPnBvcnRfYmFzZSA9IHBvcnRubzsKIAkJLyogUG9zc2libHkgdGhlIGNvbmZpZ3VyYXRpb24gd2FzIHJlamVjdGVkLiAqLwotCQlzeF9kcHJpbnRrIChTWF9ERUJVR19QUk9CRSwgIkJvYXJkIGhhcyAlZCBjaGFubmVsc1xuIiwgYm9hcmQtPm5wb3J0cyk7Ci0JCWlmIChib2FyZC0+bnBvcnRzIDw9IDApIGNvbnRpbnVlOworCQlzeF9kcHJpbnRrKFNYX0RFQlVHX1BST0JFLCAiQm9hcmQgaGFzICVkIGNoYW5uZWxzXG4iLAorCQkJCWJvYXJkLT5ucG9ydHMpOworCQlpZiAoYm9hcmQtPm5wb3J0cyA8PSAwKQorCQkJY29udGludWU7CiAJCS8qIFhYWCBieXRlb3JkZXIgPz8gKi8KLQkJZm9yIChhZGRyID0gMHg4MDthZGRyICE9IDA7YWRkciA9IHJlYWRfc3hfd29yZCAoYm9hcmQsIGFkZHIpICYgMHg3ZmZmKSB7Ci0JCQljaGFucyA9IHN4X3JlYWRfbW9kdWxlX2J5dGUgKGJvYXJkLCBhZGRyLCBtY190eXBlKTsgCi0JCQlzeF9kcHJpbnRrIChTWF9ERUJVR19QUk9CRSwgIk1vZHVsZSBhdCAleDogJWQgY2hhbm5lbHNcbiIsIGFkZHIsIGNoYW5zKTsKLQkJCXN4X2RwcmludGsgKFNYX0RFQlVHX1BST0JFLCAiUG9ydCBhdCIpOwotCQkJZm9yIChqPTA7ajxjaGFucztqKyspIHsKLQkJCQkvKiBUaGUgInN4LXdheSIgaXMgdGhlIHdheSBpdCBTSE9VTEQgYmUgZG9uZS4gVGhhdCB3YXkgaW4gdGhlIAotCQkJCSAgIGZ1dHVyZSwgdGhlIGZpcm13YXJlIG1heSBmb3IgZXhhbXBsZSBwYWNrIHRoZSBzdHJ1Y3R1cmVzIGEgYml0Ci0JCQkJICAgbW9yZSBlZmZpY2llbnQuIE5laWwgdGVsbHMgbWUgaXQgaXNuJ3QgZ29pbmcgdG8gaGFwcGVuIGFueXRpbWUKLQkJCQkgICBzb29uIHRob3VnaC4gKi8KKwkJZm9yIChhZGRyID0gMHg4MDsgYWRkciAhPSAwOworCQkJCWFkZHIgPSByZWFkX3N4X3dvcmQoYm9hcmQsIGFkZHIpICYgMHg3ZmZmKSB7CisJCQljaGFucyA9IHN4X3JlYWRfbW9kdWxlX2J5dGUoYm9hcmQsIGFkZHIsIG1jX3R5cGUpOworCQkJc3hfZHByaW50ayhTWF9ERUJVR19QUk9CRSwgIk1vZHVsZSBhdCAleDogJWQgIgorCQkJCQkiY2hhbm5lbHNcbiIsIGFkZHIsIGNoYW5zKTsKKwkJCXN4X2RwcmludGsoU1hfREVCVUdfUFJPQkUsICJQb3J0IGF0Iik7CisJCQlmb3IgKGogPSAwOyBqIDwgY2hhbnM7IGorKykgeworCQkJCS8qIFRoZSAic3gtd2F5IiBpcyB0aGUgd2F5IGl0IFNIT1VMRCBiZSBkb25lLgorCQkJCSAgIFRoYXQgd2F5IGluIHRoZSBmdXR1cmUsIHRoZSBmaXJtd2FyZSBtYXkgZm9yCisJCQkJICAgZXhhbXBsZSBwYWNrIHRoZSBzdHJ1Y3R1cmVzIGEgYml0IG1vcmUKKwkJCQkgICBlZmZpY2llbnQuIE5laWwgdGVsbHMgbWUgaXQgaXNuJ3QgZ29pbmcgdG8KKwkJCQkgICBoYXBwZW4gYW55dGltZSBzb29uIHRob3VnaC4gKi8KIAkJCQlpZiAoSVNfU1hfQk9BUkQoYm9hcmQpKQotCQkJCQlwb3J0LT5jaF9iYXNlID0gc3hfcmVhZF9tb2R1bGVfd29yZCAoYm9hcmQsIGFkZHIraioyLCBtY19jaGFuX3BvaW50ZXIpOworCQkJCQlwb3J0LT5jaF9iYXNlID0gc3hfcmVhZF9tb2R1bGVfd29yZCgKKwkJCQkJCQlib2FyZCwgYWRkciArIGogKiAyLAorCQkJCQkJCW1jX2NoYW5fcG9pbnRlcik7CiAJCQkJZWxzZQotCQkJCQlwb3J0LT5jaF9iYXNlID0gYWRkciArIDB4MTAwICsgMHgzMDAqajsKKwkJCQkJcG9ydC0+Y2hfYmFzZSA9IGFkZHIgKyAweDEwMCArIDB4MzAwICpqOwogCi0JCQkJc3hfZHByaW50ayAoU1hfREVCVUdfUFJPQkUsICIgJXgiLCBwb3J0LT5jaF9iYXNlKTsKKwkJCQlzeF9kcHJpbnRrKFNYX0RFQlVHX1BST0JFLCAiICV4IiwKKwkJCQkJCXBvcnQtPmNoX2Jhc2UpOwogCQkJCXBvcnQtPmxpbmUgPSBwb3J0bm8rKzsKIAkJCQlwb3J0Kys7CiAJCQl9Ci0JCQlzeF9kcHJpbnRrIChTWF9ERUJVR19QUk9CRSwgIlxuIik7CisJCQlzeF9kcHJpbnRrKFNYX0RFQlVHX1BST0JFLCAiXG4iKTsKIAkJfQogCQkvKiBUaGlzIGhhcyB0byBiZSBkb25lIGVhcmxpZXIuICovCiAJCS8qIGJvYXJkLT5mbGFncyB8PSBTWF9CT0FSRF9JTklUSUFMSVpFRDsgKi8KQEAgLTIzNjYsNiArMjQ2NiwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHN4X2ZpbmRfZnJlZV9ib2FyZCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNYX05CT0FSRFM7IGkrKykKKwkJaWYgKCEoYm9hcmRzW2ldLmZsYWdzICYgU1hfQk9BUkRfUFJFU0VOVCkpCisJCQlicmVhazsKKworCXJldHVybiBpOworfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3hfcmVsZWFzZV9kcml2ZXJzKHZvaWQpCiB7CiAJZnVuY19lbnRlcigpOwpAQCAtMjM3NCw2ICsyNDg1LDEyNCBAQAogCWZ1bmNfZXhpdCgpOwogfQogCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc3hfcmVtb3ZlX2NhcmQoc3RydWN0IHN4X2JvYXJkICpib2FyZCwKKwkJc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaWYgKGJvYXJkLT5mbGFncyAmIFNYX0JPQVJEX0lOSVRJQUxJWkVEKSB7CisJCS8qIFRoZSBib2FyZCBzaG91bGQgc3RvcCBtZXNzaW5nIHdpdGggdXMuIChhY3R1YWxseSBJIG1lYW4gdGhlCisJCSAgIGludGVycnVwdCkgKi8KKwkJc3hfcmVzZXQoYm9hcmQpOworCQlpZiAoKGJvYXJkLT5pcnEpICYmIChib2FyZC0+ZmxhZ3MgJiBTWF9JUlFfQUxMT0NBVEVEKSkKKwkJCWZyZWVfaXJxKGJvYXJkLT5pcnEsIGJvYXJkKTsKKworCQkvKiBJdCBpcyBzYWZlL2FsbG93ZWQgdG8gZGVsX3RpbWVyIGEgbm9uLWFjdGl2ZSB0aW1lciAqLworCQlkZWxfdGltZXIoJmJvYXJkLT50aW1lcik7CisJCWlmIChwZGV2KSB7CisjaWZkZWYgQ09ORklHX1BDSQorCQkJcGNpX2lvdW5tYXAocGRldiwgYm9hcmQtPmJhc2UpOworCQkJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIElTX0NGX0JPQVJEKGJvYXJkKSA/IDMgOiAyKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJaW91bm1hcChib2FyZC0+YmFzZSk7CisJCQlyZWxlYXNlX3JlZ2lvbihib2FyZC0+aHdfYmFzZSwgYm9hcmQtPmh3X2xlbik7CisJCX0KKworCQlib2FyZC0+ZmxhZ3MgJj0gfihTWF9CT0FSRF9JTklUSUFMSVpFRCB8IFNYX0JPQVJEX1BSRVNFTlQpOworCX0KK30KKworI2lmZGVmIENPTkZJR19FSVNBCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN4X2Vpc2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldiA9IHRvX2Vpc2FfZGV2aWNlKGRldik7CisJc3RydWN0IHN4X2JvYXJkICpib2FyZDsKKwl1bnNpZ25lZCBsb25nIGVpc2Ffc2xvdCA9IGVkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0dmFsID0gLUVJTzsKKworCW11dGV4X2xvY2soJnN4X2JvYXJkc19sb2NrKTsKKwlpID0gc3hfZmluZF9mcmVlX2JvYXJkKCk7CisJaWYgKGkgPT0gU1hfTkJPQVJEUykgeworCQltdXRleF91bmxvY2soJnN4X2JvYXJkc19sb2NrKTsKKwkJZ290byBlcnI7CisJfQorCWJvYXJkID0gJmJvYXJkc1tpXTsKKwlib2FyZC0+ZmxhZ3MgfD0gU1hfQk9BUkRfUFJFU0VOVDsKKwltdXRleF91bmxvY2soJnN4X2JvYXJkc19sb2NrKTsKKworCWRldl9pbmZvKGRldiwgIlhJTyA6IFNpZ25hdHVyZSBmb3VuZCBpbiBFSVNBIHNsb3QgJWx1LCAiCisJCSAiUHJvZHVjdCAlZCBSZXYgJWQgKFJFUE9SVCBUSElTIFRPIExLTE0pXG4iLAorCQkgZWlzYV9zbG90ID4+IDEyLAorCQkgaW5iKGVpc2Ffc2xvdCArIEVJU0FfVkVORE9SX0lEX09GRlNFVCArIDIpLAorCQkgaW5iKGVpc2Ffc2xvdCArIEVJU0FfVkVORE9SX0lEX09GRlNFVCArIDMpKTsKKworCWJvYXJkLT5laXNhX2Jhc2UgPSBlaXNhX3Nsb3Q7CisJYm9hcmQtPmZsYWdzICY9IH5TWF9CT0FSRF9UWVBFOworCWJvYXJkLT5mbGFncyB8PSBTSV9FSVNBX0JPQVJEOworCisJYm9hcmQtPmh3X2Jhc2UgPSAoKGluYihlaXNhX3Nsb3QgKyAweGMwMSkgPDwgOCkgKworCQkJICBpbmIoZWlzYV9zbG90ICsgMHhjMDApKSA8PCAxNjsKKwlib2FyZC0+aHdfbGVuID0gU0kyX0VJU0FfV0lORE9XX0xFTjsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGJvYXJkLT5od19iYXNlLCBib2FyZC0+aHdfbGVuLCAic3giKSkgeworCQlkZXZfZXJyKGRldiwgImNhbid0IHJlcXVlc3QgcmVnaW9uXG4iKTsKKwkJZ290byBlcnJfZmxhZzsKKwl9CisJYm9hcmQtPmJhc2UyID0KKwlib2FyZC0+YmFzZSA9IGlvcmVtYXAoYm9hcmQtPmh3X2Jhc2UsIFNJMl9FSVNBX1dJTkRPV19MRU4pOworCWlmICghYm9hcmQtPmJhc2UpIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCByZW1hcCBtZW1vcnlcbiIpOworCQlnb3RvIGVycl9yZWc7CisJfQorCisJc3hfZHByaW50ayhTWF9ERUJVR19QUk9CRSwgIklPIGh3X2Jhc2UgYWRkcmVzczogJWx4XG4iLCBib2FyZC0+aHdfYmFzZSk7CisJc3hfZHByaW50ayhTWF9ERUJVR19QUk9CRSwgImJhc2U6ICVwXG4iLCBib2FyZC0+YmFzZSk7CisJYm9hcmQtPmlycSA9IGluYihlaXNhX3Nsb3QgKyAweGMwMikgPj4gNDsKKwlzeF9kcHJpbnRrKFNYX0RFQlVHX1BST0JFLCAiSVJROiAlZFxuIiwgYm9hcmQtPmlycSk7CisKKwlpZiAoIXByb2JlX3NpKGJvYXJkKSkKKwkJZ290byBlcnJfdW5tYXA7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBib2FyZCk7CisKKwlyZXR1cm4gMDsKK2Vycl91bm1hcDoKKwlpb3VubWFwKGJvYXJkLT5iYXNlKTsKK2Vycl9yZWc6CisJcmVsZWFzZV9yZWdpb24oYm9hcmQtPmh3X2Jhc2UsIGJvYXJkLT5od19sZW4pOworZXJyX2ZsYWc6CisJYm9hcmQtPmZsYWdzICY9IH5TWF9CT0FSRF9QUkVTRU5UOworZXJyOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHN4X2Vpc2FfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzeF9yZW1vdmVfY2FyZChib2FyZCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBlaXNhX2RldmljZV9pZCBzeF9laXNhX3RibFtdID0geworCXsgIlNMWCIgfSwKKwl7ICIiIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoZWlzYSwgc3hfZWlzYV90YmwpOworCitzdGF0aWMgc3RydWN0IGVpc2FfZHJpdmVyIHN4X2Vpc2Fkcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gc3hfZWlzYV90YmwsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic3giLAorCQkucHJvYmUgPSBzeF9laXNhX3Byb2JlLAorCQkucmVtb3ZlID0gX19kZXZleGl0X3Aoc3hfZWlzYV9yZW1vdmUpLAorCX0KK307CisKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BDSQogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKICAqIFNldHRpbmcgYml0IDE3IGluIHRoZSBDTlRSTCByZWdpc3RlciBvZiB0aGUgUExYIDkwNTAgICogCkBAIC0yMzg2LDIzMyArMjYxNSwyNzAgQEAKICAgIEVFcHJvbS4gIEFzIHRoZSBiaXQgaXMgcmVhZC93cml0ZSBmb3IgdGhlIENQVSwgd2UgY2FuIGZpeCBpdCBoZXJlLAogICAgaWYgd2UgZGV0ZWN0IHRoYXQgaXQgaXNuJ3Qgc2V0IGNvcnJlY3RseS4gLS0gUkVXICovCiAKLXN0YXRpYyB2b2lkIGZpeF9zeF9wY2kgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGZpeF9zeF9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzeF9ib2FyZCAqYm9hcmQpCiB7CiAJdW5zaWduZWQgaW50IGh3YmFzZTsKIAl2b2lkIF9faW9tZW0gKnJlYmFzZTsKIAl1bnNpZ25lZCBpbnQgdDsKIAotI2RlZmluZSBDTlRSTF9SRUdfT0ZGU0VUICAgICAgICAweDUwCi0jZGVmaW5lIENOVFJMX1JFR19HT09EVkFMVUUgICAgIDB4MTgyNjAwMDAKKyNkZWZpbmUgQ05UUkxfUkVHX09GRlNFVAkweDUwCisjZGVmaW5lIENOVFJMX1JFR19HT09EVkFMVUUJMHgxODI2MDAwMAogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgJmh3YmFzZSk7CiAJaHdiYXNlICY9IFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7CiAJcmViYXNlID0gaW9yZW1hcChod2Jhc2UsIDB4ODApOwotCXQgPSByZWFkbCAocmViYXNlICsgQ05UUkxfUkVHX09GRlNFVCk7CisJdCA9IHJlYWRsKHJlYmFzZSArIENOVFJMX1JFR19PRkZTRVQpOwogCWlmICh0ICE9IENOVFJMX1JFR19HT09EVkFMVUUpIHsKLQkJcHJpbnRrIChLRVJOX0RFQlVHICJzeDogcGVyZm9ybWluZyBjbnRybCByZWcgZml4OiAlMDh4IC0+ICUwOHhcbiIsIHQsIENOVFJMX1JFR19HT09EVkFMVUUpOyAKLQkJd3JpdGVsIChDTlRSTF9SRUdfR09PRFZBTFVFLCByZWJhc2UgKyBDTlRSTF9SRUdfT0ZGU0VUKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInN4OiBwZXJmb3JtaW5nIGNudHJsIHJlZyBmaXg6ICUwOHggLT4gIgorCQkJIiUwOHhcbiIsIHQsIENOVFJMX1JFR19HT09EVkFMVUUpOworCQl3cml0ZWwoQ05UUkxfUkVHX0dPT0RWQUxVRSwgcmViYXNlICsgQ05UUkxfUkVHX09GRlNFVCk7CiAJfQogCWlvdW5tYXAocmViYXNlKTsKIH0KICNlbmRpZgogCi0KLXN0YXRpYyBpbnQgX19pbml0IHN4X2luaXQodm9pZCkgCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzeF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCWludCBpOwotCWludCBmb3VuZCA9IDA7Ci0JaW50IGVpc2Ffc2xvdDsKLQlzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkOwotCiAjaWZkZWYgQ09ORklHX1BDSQotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgdGludDsKLQl1bnNpZ25lZCBzaG9ydCB0c2hvcnQ7CisJc3RydWN0IHN4X2JvYXJkICpib2FyZDsKKwl1bnNpZ25lZCBpbnQgaSwgcmVnOworCWludCByZXR2YWwgPSAtRUlPOworCisJbXV0ZXhfbG9jaygmc3hfYm9hcmRzX2xvY2spOworCWkgPSBzeF9maW5kX2ZyZWVfYm9hcmQoKTsKKwlpZiAoaSA9PSBTWF9OQk9BUkRTKSB7CisJCW11dGV4X3VubG9jaygmc3hfYm9hcmRzX2xvY2spOworCQlnb3RvIGVycjsKKwl9CisJYm9hcmQgPSAmYm9hcmRzW2ldOworCWJvYXJkLT5mbGFncyB8PSBTWF9CT0FSRF9QUkVTRU5UOworCW11dGV4X3VubG9jaygmc3hfYm9hcmRzX2xvY2spOworCisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfZmxhZzsKKworCWJvYXJkLT5mbGFncyAmPSB+U1hfQk9BUkRfVFlQRTsKKwlib2FyZC0+ZmxhZ3MgfD0gKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgyMDApID8gU1hfUENJX0JPQVJEIDoKKwkJU1hfQ0ZQQ0lfQk9BUkQ7CisKKwkvKiBDRiBib2FyZHMgdXNlIGJhc2UgYWRkcmVzcyAzLi4uLiAqLworCXJlZyA9IElTX0NGX0JPQVJEKGJvYXJkKSA/IDMgOiAyOworCXJldHZhbCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCByZWcsICJzeCIpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVxdWVzdCByZWdpb25cbiIpOworCQlnb3RvIGVycl9mbGFnOworCX0KKwlib2FyZC0+aHdfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCByZWcpOworCWJvYXJkLT5iYXNlMiA9CisJYm9hcmQtPmJhc2UgPSBwY2lfaW9tYXAocGRldiwgcmVnLCBXSU5ET1dfTEVOKGJvYXJkKSk7CisJaWYgKCFib2FyZC0+YmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX3JlZzsKKwl9CisKKwkvKiBNb3N0IG9mIHRoZSBzdHVmZiBvbiB0aGUgQ0YgYm9hcmQgaXMgb2Zmc2V0IGJ5IDB4MTgwMDAgLi4uLiAgKi8KKwlpZiAoSVNfQ0ZfQk9BUkQoYm9hcmQpKQorCQlib2FyZC0+YmFzZSArPSAweDE4MDAwOworCisJYm9hcmQtPmlycSA9IHBkZXYtPmlycTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJHb3QgYSBzcGVjaWFsaXggY2FyZDogJXAoJWQpICV4LlxuIiwgYm9hcmQtPmJhc2UsCisJCSBib2FyZC0+aXJxLCBib2FyZC0+ZmxhZ3MpOworCisJaWYgKCFwcm9iZV9zeChib2FyZCkpIHsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCisJZml4X3N4X3BjaShwZGV2LCBib2FyZCk7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgYm9hcmQpOworCisJcmV0dXJuIDA7CitlcnJfdW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgYm9hcmQtPmJhc2UpOworZXJyX3JlZzoKKwlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgcmVnKTsKK2Vycl9mbGFnOgorCWJvYXJkLT5mbGFncyAmPSB+U1hfQk9BUkRfUFJFU0VOVDsKK2VycjoKKwlyZXR1cm4gcmV0dmFsOworI2Vsc2UKKwlyZXR1cm4gLUVOT0RFVjsKICNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc3hfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJc3hfcmVtb3ZlX2NhcmQoYm9hcmQsIHBkZXYpOworfQorCisvKiBTcGVjaWFsaXggaGFzIGEgd2hvbGUgYnVuY2ggb2YgY2FyZHMgd2l0aCAweDIwMDAgYXMgdGhlIGRldmljZSBJRC4gVGhleSBzYXkKKyAgIGl0cyBiZWNhdXNlIHRoZSBzdGFuZGFyZCByZXF1aXJlcyBpdC4gU28gY2hlY2sgZm9yIFNVQlZFTkRPUl9JRC4gKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzeF9wY2lfdGJsW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX1NQRUNJQUxJWCwgUENJX0RFVklDRV9JRF9TUEVDSUFMSVhfU1hfWElPX0lPOCwKKwkJLnN1YnZlbmRvciA9IDB4MDIwMCwuc3ViZGV2aWNlID0gUENJX0FOWV9JRCB9LAorCXsgUENJX1ZFTkRPUl9JRF9TUEVDSUFMSVgsIFBDSV9ERVZJQ0VfSURfU1BFQ0lBTElYX1NYX1hJT19JTzgsCisJCS5zdWJ2ZW5kb3IgPSAweDAzMDAsLnN1YmRldmljZSA9IFBDSV9BTllfSUQgfSwKKwl7IDAgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN4X3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3hfcGNpZHJpdmVyID0geworCS5uYW1lID0gInN4IiwKKwkuaWRfdGFibGUgPSBzeF9wY2lfdGJsLAorCS5wcm9iZSA9IHN4X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc3hfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN4X2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfRUlTQQorCWludCByZXR2YWwxOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0lTQQorCXN0cnVjdCBzeF9ib2FyZCAqYm9hcmQ7CisJdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgZm91bmQgPSAwOworCWludCByZXR2YWw7CiAKIAlmdW5jX2VudGVyKCk7Ci0Jc3hfZHByaW50ayAoU1hfREVCVUdfSU5JVCwgIkluaXRpbmcgc3ggbW9kdWxlLi4uIChzeF9kZWJ1Zz0lZClcbiIsIHN4X2RlYnVnKTsKLQlpZiAoYWJzICgobG9uZykgKCZzeF9kZWJ1ZykgLSBzeF9kZWJ1ZykgPCAweDEwMDAwKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJzeDogc3hfZGVidWcgaXMgYW4gYWRkcmVzcywgaW5zdGVhZCBvZiBhIHZhbHVlLiAiCi0JCSAgICAgICAgIkFzc3VtaW5nIC0xLlxuIik7Ci0JCXByaW50ayAoIiglcClcbiIsICZzeF9kZWJ1Zyk7Ci0JCXN4X2RlYnVnPS0xOworCXN4X2RwcmludGsoU1hfREVCVUdfSU5JVCwgIkluaXRpbmcgc3ggbW9kdWxlLi4uIChzeF9kZWJ1Zz0lZClcbiIsCisJCQlzeF9kZWJ1Zyk7CisJaWYgKGFicygobG9uZykoJnN4X2RlYnVnKSAtIHN4X2RlYnVnKSA8IDB4MTAwMDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic3g6IHN4X2RlYnVnIGlzIGFuIGFkZHJlc3MsIGluc3RlYWQgb2YgYSAiCisJCQkJInZhbHVlLiBBc3N1bWluZyAtMS5cbiglcClcbiIsICZzeF9kZWJ1Zyk7CisJCXN4X2RlYnVnID0gLTE7CiAJfQogCiAJaWYgKG1pc2NfcmVnaXN0ZXIoJnN4X2Z3X2RldmljZSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU1g6IFVuYWJsZSB0byByZWdpc3RlciBmaXJtd2FyZSBsb2FkZXIgZHJpdmVyLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiU1g6IFVuYWJsZSB0byByZWdpc3RlciBmaXJtd2FyZSBsb2FkZXIgIgorCQkJCSJkcml2ZXIuXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCi0jaWZkZWYgQ09ORklHX1BDSQotCXdoaWxlICgocGRldiA9IHBjaV9maW5kX2RldmljZSAoUENJX1ZFTkRPUl9JRF9TUEVDSUFMSVgsIAotCQkJCQlQQ0lfREVWSUNFX0lEX1NQRUNJQUxJWF9TWF9YSU9fSU84LCAKLQkJCQkJICAgICAgcGRldikpKSB7Ci0JCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIFNwZWNpYWxpeCBoYXMgYSB3aG9sZSBidW5jaCBvZiBjYXJkcyB3aXRoCi0JCSAgIDB4MjAwMCBhcyB0aGUgZGV2aWNlIElELiBUaGV5IHNheSBpdHMgYmVjYXVzZQotCQkgICB0aGUgc3RhbmRhcmQgcmVxdWlyZXMgaXQuIFN0dXBpZCBzdGFuZGFyZC4gKi8KLQkJLyogSXQgc2VlbXMgdGhhdCByZWFkaW5nIGEgd29yZCBkb2Vzbid0IHdvcmsgcmVsaWFibHkgb24gMi4wLgotCQkgICBBbHNvLCByZWFkaW5nIGEgbm9uLWFsaWduZWQgZHdvcmQgZG9lc24ndCB3b3JrLiBTbyB3ZSByZWFkIHRoZQotCQkgICB3aG9sZSBkd29yZCBhdCAweDJjIGFuZCBleHRyYWN0IHRoZSB3b3JkIGF0IDB4MmUgKFNVQlNZU1RFTV9JRCkKLQkJICAgb3Vyc2VsdmVzICovCi0JCS8qIEkgZG9uJ3Qga25vdyB3aHkgdGhlIGRlZmluZSBkb2Vzbid0IHdvcmssIGNvbnN0YW50IDB4MmMgZG9lcyAtLVJFVyAqLyAKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChwZGV2LCAweDJjLCAmdGludCk7Ci0JCXRzaG9ydCA9ICh0aW50ID4+IDE2KSAmIDB4ZmZmZjsKLQkJc3hfZHByaW50ayAoU1hfREVCVUdfUFJPQkUsICJHb3QgYSBzcGVjaWFsaXggY2FyZDogJXguXG4iLCB0aW50KTsKLQkJLyogc3hfZHByaW50ayAoU1hfREVCVUdfUFJPQkUsICJwZGV2ID0gJWQvJWQJKCV4KVxuIiwgcGRldiwgdGludCk7ICovIAotCQlpZiAoKHRzaG9ydCAhPSAweDAyMDApICYmICh0c2hvcnQgIT0gMHgwMzAwKSkgewotCQkJc3hfZHByaW50ayAoU1hfREVCVUdfUFJPQkUsICJCdXQgaXQncyBub3QgYW4gU1ggY2FyZCAoJWQpLi4uXG4iLCAKLQkJCQkgICAgdHNob3J0KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWJvYXJkID0gJmJvYXJkc1tmb3VuZF07Ci0KLQkJYm9hcmQtPmZsYWdzICY9IH5TWF9CT0FSRF9UWVBFOwotCQlib2FyZC0+ZmxhZ3MgfD0gKHRzaG9ydCA9PSAweDIwMCk/U1hfUENJX0JPQVJEOgotCQkJCQkJICBTWF9DRlBDSV9CT0FSRDsKLQotCQkvKiBDRiBib2FyZHMgdXNlIGJhc2UgYWRkcmVzcyAzLi4uLiAqLwotCQlpZiAoSVNfQ0ZfQk9BUkQgKGJvYXJkKSkKLQkJCWJvYXJkLT5od19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAzKTsKLQkJZWxzZQotCQkJYm9hcmQtPmh3X2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDIpOwotCQlib2FyZC0+YmFzZTIgPSAKLQkJYm9hcmQtPmJhc2UgPSBpb3JlbWFwKGJvYXJkLT5od19iYXNlLCBXSU5ET1dfTEVOIChib2FyZCkpOwotCQlpZiAoIWJvYXJkLT5iYXNlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImlvcmVtYXAgZmFpbGVkXG4iKTsKLQkJCS8qIFhYWCBoYW5kbGUgZXJyb3IgKi8KLQkJfQotCi0JCS8qIE1vc3Qgb2YgdGhlIHN0dWZmIG9uIHRoZSBDRiBib2FyZCBpcyBvZmZzZXQgYnkKLQkJICAgMHgxODAwMCAuLi4uICAqLwotCQlpZiAoSVNfQ0ZfQk9BUkQgKGJvYXJkKSkgYm9hcmQtPmJhc2UgKz0gMHgxODAwMDsKLQotCQlib2FyZC0+aXJxID0gcGRldi0+aXJxOwotCi0JCXN4X2RwcmludGsgKFNYX0RFQlVHX1BST0JFLCAiR290IGEgc3BlY2lhbGl4IGNhcmQ6ICV4LyVwKCVkKSAleC5cbiIsIAotCQkJICAgIHRpbnQsIGJvYXJkc1tmb3VuZF0uYmFzZSwgYm9hcmQtPmlycSwgYm9hcmQtPmZsYWdzKTsKLQotCQlpZiAocHJvYmVfc3ggKGJvYXJkKSkgewotCQkJZm91bmQrKzsKLQkJCWZpeF9zeF9wY2kgKHBkZXYsIGJvYXJkKTsKLQkJfSBlbHNlIAotCQkJaW91bm1hcChib2FyZC0+YmFzZTIpOwotCX0KLSNlbmRpZgotCi0JZm9yIChpPTA7aTxOUl9TWF9BRERSUztpKyspIHsKKyNpZmRlZiBDT05GSUdfSVNBCisJZm9yIChpID0gMDsgaSA8IE5SX1NYX0FERFJTOyBpKyspIHsKIAkJYm9hcmQgPSAmYm9hcmRzW2ZvdW5kXTsKIAkJYm9hcmQtPmh3X2Jhc2UgPSBzeF9wcm9iZV9hZGRyc1tpXTsKKwkJYm9hcmQtPmh3X2xlbiA9IFNYX1dJTkRPV19MRU47CisJCWlmICghcmVxdWVzdF9yZWdpb24oYm9hcmQtPmh3X2Jhc2UsIGJvYXJkLT5od19sZW4sICJzeCIpKQorCQkJY29udGludWU7CiAJCWJvYXJkLT5iYXNlMiA9Ci0JCWJvYXJkLT5iYXNlID0gaW9yZW1hcChib2FyZC0+aHdfYmFzZSwgU1hfV0lORE9XX0xFTik7CisJCWJvYXJkLT5iYXNlID0gaW9yZW1hcChib2FyZC0+aHdfYmFzZSwgYm9hcmQtPmh3X2xlbik7CisJCWlmICghYm9hcmQtPmJhc2UpCisJCQlnb3RvIGVycl9zeF9yZWc7CiAJCWJvYXJkLT5mbGFncyAmPSB+U1hfQk9BUkRfVFlQRTsKLQkJYm9hcmQtPmZsYWdzIHw9CVNYX0lTQV9CT0FSRDsKLQkJYm9hcmQtPmlycSA9IHN4X2lycW1hc2s/LTE6MDsKKwkJYm9hcmQtPmZsYWdzIHw9IFNYX0lTQV9CT0FSRDsKKwkJYm9hcmQtPmlycSA9IHN4X2lycW1hc2sgPyAtMSA6IDA7CiAKLQkJaWYgKHByb2JlX3N4IChib2FyZCkpIHsKKwkJaWYgKHByb2JlX3N4KGJvYXJkKSkgeworCQkJYm9hcmQtPmZsYWdzIHw9IFNYX0JPQVJEX1BSRVNFTlQ7CiAJCQlmb3VuZCsrOwogCQl9IGVsc2UgewogCQkJaW91bm1hcChib2FyZC0+YmFzZSk7CitlcnJfc3hfcmVnOgorCQkJcmVsZWFzZV9yZWdpb24oYm9hcmQtPmh3X2Jhc2UsIGJvYXJkLT5od19sZW4pOwogCQl9CiAJfQogCi0JZm9yIChpPTA7aTxOUl9TSV9BRERSUztpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfU0lfQUREUlM7IGkrKykgewogCQlib2FyZCA9ICZib2FyZHNbZm91bmRdOwogCQlib2FyZC0+aHdfYmFzZSA9IHNpX3Byb2JlX2FkZHJzW2ldOworCQlib2FyZC0+aHdfbGVuID0gU0kyX0lTQV9XSU5ET1dfTEVOOworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGJvYXJkLT5od19iYXNlLCBib2FyZC0+aHdfbGVuLCAic3giKSkKKwkJCWNvbnRpbnVlOwogCQlib2FyZC0+YmFzZTIgPQotCQlib2FyZC0+YmFzZSA9IGlvcmVtYXAoYm9hcmQtPmh3X2Jhc2UsIFNJMl9JU0FfV0lORE9XX0xFTik7CisJCWJvYXJkLT5iYXNlID0gaW9yZW1hcChib2FyZC0+aHdfYmFzZSwgYm9hcmQtPmh3X2xlbik7CisJCWlmICghYm9hcmQtPmJhc2UpCisJCQlnb3RvIGVycl9zaV9yZWc7CiAJCWJvYXJkLT5mbGFncyAmPSB+U1hfQk9BUkRfVFlQRTsKLQkJYm9hcmQtPmZsYWdzIHw9ICBTSV9JU0FfQk9BUkQ7Ci0JCWJvYXJkLT5pcnEgPSBzeF9pcnFtYXNrID8tMTowOworCQlib2FyZC0+ZmxhZ3MgfD0gU0lfSVNBX0JPQVJEOworCQlib2FyZC0+aXJxID0gc3hfaXJxbWFzayA/IC0xIDogMDsKIAotCQlpZiAocHJvYmVfc2kgKGJvYXJkKSkgeworCQlpZiAocHJvYmVfc2koYm9hcmQpKSB7CisJCQlib2FyZC0+ZmxhZ3MgfD0gU1hfQk9BUkRfUFJFU0VOVDsKIAkJCWZvdW5kKys7CiAJCX0gZWxzZSB7Ci0JCQlpb3VubWFwIChib2FyZC0+YmFzZSk7CisJCQlpb3VubWFwKGJvYXJkLT5iYXNlKTsKK2Vycl9zaV9yZWc6CisJCQlyZWxlYXNlX3JlZ2lvbihib2FyZC0+aHdfYmFzZSwgYm9hcmQtPmh3X2xlbik7CiAJCX0KIAl9Ci0JZm9yIChpPTA7aTxOUl9TSTFfQUREUlM7aSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE5SX1NJMV9BRERSUzsgaSsrKSB7CiAJCWJvYXJkID0gJmJvYXJkc1tmb3VuZF07CiAJCWJvYXJkLT5od19iYXNlID0gc2kxX3Byb2JlX2FkZHJzW2ldOworCQlib2FyZC0+aHdfbGVuID0gU0kxX0lTQV9XSU5ET1dfTEVOOworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGJvYXJkLT5od19iYXNlLCBib2FyZC0+aHdfbGVuLCAic3giKSkKKwkJCWNvbnRpbnVlOwogCQlib2FyZC0+YmFzZTIgPQotCQlib2FyZC0+YmFzZSA9IGlvcmVtYXAoYm9hcmQtPmh3X2Jhc2UsIFNJMV9JU0FfV0lORE9XX0xFTik7CisJCWJvYXJkLT5iYXNlID0gaW9yZW1hcChib2FyZC0+aHdfYmFzZSwgYm9hcmQtPmh3X2xlbik7CisJCWlmICghYm9hcmQtPmJhc2UpCisJCQlnb3RvIGVycl9zaTFfcmVnOwogCQlib2FyZC0+ZmxhZ3MgJj0gflNYX0JPQVJEX1RZUEU7Ci0JCWJvYXJkLT5mbGFncyB8PSAgU0kxX0lTQV9CT0FSRDsKLQkJYm9hcmQtPmlycSA9IHN4X2lycW1hc2sgPy0xOjA7CisJCWJvYXJkLT5mbGFncyB8PSBTSTFfSVNBX0JPQVJEOworCQlib2FyZC0+aXJxID0gc3hfaXJxbWFzayA/IC0xIDogMDsKIAotCQlpZiAocHJvYmVfc2kgKGJvYXJkKSkgeworCQlpZiAocHJvYmVfc2koYm9hcmQpKSB7CisJCQlib2FyZC0+ZmxhZ3MgfD0gU1hfQk9BUkRfUFJFU0VOVDsKIAkJCWZvdW5kKys7CiAJCX0gZWxzZSB7Ci0JCQlpb3VubWFwIChib2FyZC0+YmFzZSk7CisJCQlpb3VubWFwKGJvYXJkLT5iYXNlKTsKK2Vycl9zaTFfcmVnOgorCQkJcmVsZWFzZV9yZWdpb24oYm9hcmQtPmh3X2Jhc2UsIGJvYXJkLT5od19sZW4pOwogCQl9CiAJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0VJU0EKKwlyZXR2YWwxID0gZWlzYV9kcml2ZXJfcmVnaXN0ZXIoJnN4X2Vpc2Fkcml2ZXIpOworI2VuZGlmCisJcmV0dmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc3hfcGNpZHJpdmVyKTsKIAotICAgICAgICBzeF9kcHJpbnRrKFNYX0RFQlVHX1BST0JFLCAiUHJvYmluZyBmb3IgRUlTQSBjYXJkc1xuIik7Ci0gICAgICAgIGZvcihlaXNhX3Nsb3Q9MHgxMDAwOyBlaXNhX3Nsb3Q8MHgxMDAwMDsgZWlzYV9zbG90Kz0weDEwMDApCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZigoaW5iKGVpc2Ffc2xvdCsweGM4MCk9PTB4NGQpICYmCi0gICAgICAgICAgICAgICAgICAgKGluYihlaXNhX3Nsb3QrMHhjODEpPT0weDk4KSkKLSAgICAgICAgICAgICAgICB7Ci0JCQlzeF9kcHJpbnRrKFNYX0RFQlVHX1BST0JFLCAiJXMgOiBTaWduYXR1cmUgZm91bmQgaW4gRUlTQSBzbG90ICVkLCBQcm9kdWN0ICVkIFJldiAlZFxuIiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICJYSU8iLCAoZWlzYV9zbG90Pj4xMiksIGluYihlaXNhX3Nsb3QrMHhjODIpLCBpbmIoZWlzYV9zbG90KzB4YzgzKSk7Ci0KLQkJCWJvYXJkID0gJmJvYXJkc1tmb3VuZF07Ci0JCQlib2FyZC0+ZWlzYV9iYXNlID0gZWlzYV9zbG90OwotCQkJYm9hcmQtPmZsYWdzICY9IH5TWF9CT0FSRF9UWVBFOwotCQkJYm9hcmQtPmZsYWdzIHw9IFNJX0VJU0FfQk9BUkQ7Ci0KLQkJCWJvYXJkLT5od19iYXNlID0gKCgoaW5iKDB4YzAxK2Vpc2Ffc2xvdCkgPDwgOCkgKyBpbmIoMHhjMDArZWlzYV9zbG90KSkgPDwgMTYpOwotCQkJYm9hcmQtPmJhc2UyID0KLQkJCWJvYXJkLT5iYXNlID0gaW9yZW1hcChib2FyZC0+aHdfYmFzZSwgU0kyX0VJU0FfV0lORE9XX0xFTik7Ci0KLQkJCXN4X2RwcmludGsoU1hfREVCVUdfUFJPQkUsICJJTyBod19iYXNlIGFkZHJlc3M6ICVseFxuIiwgYm9hcmQtPmh3X2Jhc2UpOwotCQkJc3hfZHByaW50ayhTWF9ERUJVR19QUk9CRSwgImJhc2U6ICVwXG4iLCBib2FyZC0+YmFzZSk7Ci0JCQlib2FyZC0+aXJxID0gaW5iKGJvYXJkLT5laXNhX2Jhc2UrMHhjMDIpPj40OyAKLQkJCXN4X2RwcmludGsoU1hfREVCVUdfUFJPQkUsICJJUlE6ICVkXG4iLCBib2FyZC0+aXJxKTsKLQkJCQotCQkJcHJvYmVfc2koYm9hcmQpOwotCi0JCQlmb3VuZCsrOwotCQl9Ci0JfQogCWlmIChmb3VuZCkgewotCQlwcmludGsgKEtFUk5fSU5GTyAic3g6IHRvdGFsIG9mICVkIGJvYXJkcyBkZXRlY3RlZC5cbiIsIGZvdW5kKTsKLQl9IGVsc2UgewotCQltaXNjX2RlcmVnaXN0ZXIoJnN4X2Z3X2RldmljZSk7CisJCXByaW50ayhLRVJOX0lORk8gInN4OiB0b3RhbCBvZiAlZCBib2FyZHMgZGV0ZWN0ZWQuXG4iLCBmb3VuZCk7CisJCXJldHZhbCA9IDA7CisJfSBlbHNlIGlmIChyZXR2YWwpIHsKKyNpZmRlZiBDT05GSUdfRUlTQQorCQlyZXR2YWwgPSByZXR2YWwxOworCQlpZiAocmV0dmFsMSkKKyNlbmRpZgorCQkJbWlzY19kZXJlZ2lzdGVyKCZzeF9md19kZXZpY2UpOwogCX0KIAogCWZ1bmNfZXhpdCgpOwotCXJldHVybiBmb3VuZD8wOi1FSU87CisJcmV0dXJuIHJldHZhbDsKIH0KIAotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc3hfZXhpdCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBzeF9leGl0KHZvaWQpCiB7Ci0JaW50IGk7IAotCXN0cnVjdCBzeF9ib2FyZCAqYm9hcmQ7CisJaW50IGk7CiAKIAlmdW5jX2VudGVyKCk7Ci0JZm9yIChpID0gMDsgaSA8IFNYX05CT0FSRFM7IGkrKykgewotCQlib2FyZCA9ICZib2FyZHNbaV07Ci0JCWlmIChib2FyZC0+ZmxhZ3MgJiBTWF9CT0FSRF9JTklUSUFMSVpFRCkgewotCQkJc3hfZHByaW50ayAoU1hfREVCVUdfQ0xFQU5VUCwgIkNsZWFuaW5nIHVwIGJvYXJkIGF0ICVwXG4iLCBib2FyZC0+YmFzZSk7Ci0JCQkvKiBUaGUgYm9hcmQgc2hvdWxkIHN0b3AgbWVzc2luZyB3aXRoIHVzLgotCQkJICAgKGFjdHVhbGx5IEkgbWVhbiB0aGUgaW50ZXJydXB0KSAqLwotCQkJc3hfcmVzZXQgKGJvYXJkKTsKLQkJCWlmICgoYm9hcmQtPmlycSkgJiYgKGJvYXJkLT5mbGFncyAmIFNYX0lSUV9BTExPQ0FURUQpKQotCQkJCWZyZWVfaXJxIChib2FyZC0+aXJxLCBib2FyZCk7CisjaWZkZWYgQ09ORklHX0VJU0EKKwllaXNhX2RyaXZlcl91bnJlZ2lzdGVyKCZzeF9laXNhZHJpdmVyKTsKKyNlbmRpZgorCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc3hfcGNpZHJpdmVyKTsKIAotCQkJLyogSXQgaXMgc2FmZS9hbGxvd2VkIHRvIGRlbF90aW1lciBhIG5vbi1hY3RpdmUgdGltZXIgKi8KLQkJCWRlbF90aW1lciAoJiBib2FyZC0+dGltZXIpOwotCQkJaW91bm1hcChib2FyZC0+YmFzZSk7Ci0JCX0KLQl9CisJZm9yIChpID0gMDsgaSA8IFNYX05CT0FSRFM7IGkrKykKKwkJc3hfcmVtb3ZlX2NhcmQoJmJvYXJkc1tpXSwgTlVMTCk7CisKIAlpZiAobWlzY19kZXJlZ2lzdGVyKCZzeF9md19kZXZpY2UpIDwgMCkgewotCQlwcmludGsgKEtFUk5fSU5GTyAic3g6IGNvdWxkbid0IGRlcmVnaXN0ZXIgZmlybXdhcmUgbG9hZGVyIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gInN4OiBjb3VsZG4ndCBkZXJlZ2lzdGVyIGZpcm13YXJlIGxvYWRlciAiCisJCQkJImRldmljZVxuIik7CiAJfQotCXN4X2RwcmludGsgKFNYX0RFQlVHX0NMRUFOVVAsICJDbGVhbmluZyB1cCBkcml2ZXJzICglZClcbiIsIHN4X2luaXRpYWxpemVkKTsKKwlzeF9kcHJpbnRrKFNYX0RFQlVHX0NMRUFOVVAsICJDbGVhbmluZyB1cCBkcml2ZXJzICglZClcbiIsCisJCQlzeF9pbml0aWFsaXplZCk7CiAJaWYgKHN4X2luaXRpYWxpemVkKQotCQlzeF9yZWxlYXNlX2RyaXZlcnMgKCk7CisJCXN4X3JlbGVhc2VfZHJpdmVycygpOwogCi0Ja2ZyZWUgKHN4X3BvcnRzKTsKKwlrZnJlZShzeF9wb3J0cyk7CiAJZnVuY19leGl0KCk7CiB9CiAKIG1vZHVsZV9pbml0KHN4X2luaXQpOwogbW9kdWxlX2V4aXQoc3hfZXhpdCk7Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N4LmggYi9kcml2ZXJzL2NoYXIvc3guaAppbmRleCBlMDFmODNjLi40MzJhYWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3guaAorKysgYi9kcml2ZXJzL2NoYXIvc3guaApAQCAtMzUsNiArMzUsNyBAQAogICB2b2lkIF9faW9tZW0gKmJhc2U7CiAgIHZvaWQgX19pb21lbSAqYmFzZTI7CiAgIHVuc2lnbmVkIGxvbmcgaHdfYmFzZTsKKyAgcmVzb3VyY2Vfc2l6ZV90IGh3X2xlbjsKICAgaW50IGVpc2FfYmFzZTsKICAgaW50IHBvcnRfYmFzZTsgLyogTnVtYmVyIG9mIHRoZSBmaXJzdCBwb3J0ICovCiAgIHN0cnVjdCBzeF9wb3J0ICpwb3J0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKaW5kZXggNjQ1MTg3Yi4uM2ZhNjI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKQEAgLTMwNjAsNyArMzA2MCw3IEBACiAgKiAJCiAgKiBSZXR1cm4gVmFsdWU6CQlOb25lCiAgKi8KLXN0YXRpYyB2b2lkIG1nc2xfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgbWdzbF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCBtZ3NsX3N0cnVjdCAqaW5mbyA9IChzdHJ1Y3QgbWdzbF9zdHJ1Y3QgKil0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MzMyLDcgKzQzMzIsNyBAQAogewogCXN0cnVjdCBtZ3NsX3N0cnVjdCAqaW5mbzsKIAkKLQlpbmZvID0gKHN0cnVjdCBtZ3NsX3N0cnVjdCAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZ3NsX3N0cnVjdCksCisJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtZ3NsX3N0cnVjdCksCiAJCSBHRlBfS0VSTkVMKTsKIAkJIAogCWlmICghaW5mbykgewpAQCAtNDQwNSw2ICs0NDA1LDggQEAKIAlzZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CiAJc2VyaWFsX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPQogCQlCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJc2VyaWFsX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gOTYwMDsKKwlzZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSA5NjAwOwogCXNlcmlhbF9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVzsKIAl0dHlfc2V0X29wZXJhdGlvbnMoc2VyaWFsX2RyaXZlciwgJm1nc2xfb3BzKTsKIAlpZiAoKHJjID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihzZXJpYWxfZHJpdmVyKSkgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCmluZGV4IGU0NzMwYTcuLjc5MmM3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIHN0YXRpYyBpbnQgIG9wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKIHN0YXRpYyB2b2lkIGNsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCk7CiBzdGF0aWMgdm9pZCBoYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgdm9pZCBzZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIHZvaWQgc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7CiAKIHN0YXRpYyBpbnQgIHdyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKIHN0YXRpYyB2b2lkIHB1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpOwpAQCAtODE2LDcgKzgxNiw3IEBACiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBzZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCBzbGd0X2luZm8gKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zNTQ2LDYgKzM1NDYsOCBAQAogCXNlcmlhbF9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKIAlzZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9CiAJCUI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwlzZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOworCXNlcmlhbF9kcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAJc2VyaWFsX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhzZXJpYWxfZHJpdmVyLCAmb3BzKTsKIAlpZiAoKHJjID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihzZXJpYWxfZHJpdmVyKSkgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwppbmRleCAyMGE5NmVmLi44ZjRkNjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKQEAgLTUxOSw3ICs1MTksNyBAQAogc3RhdGljIGludCAgb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogc3RhdGljIHZvaWQgY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKIHN0YXRpYyB2b2lkIGhhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLXN0YXRpYyB2b2lkIHNldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgdm9pZCBzZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKTsKIAogc3RhdGljIGludCAgd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogc3RhdGljIHZvaWQgcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7CkBAIC05MTgsNyArOTE4LDcgQEAKIAogLyogU2V0IG5ldyB0ZXJtaW9zIHNldHRpbmdzCiAgKi8KLXN0YXRpYyB2b2lkIHNldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIHNldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJU0xNUF9JTkZPICppbmZvID0gKFNMTVBfSU5GTyAqKXR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI3MzAsNyArMjczMCw3IEBACiAJCXJldHVybiAwOwogCiAJaWYgKCFpbmZvLT50eF9idWYpIHsKLQkJaW5mby0+dHhfYnVmID0gKHVuc2lnbmVkIGNoYXIgKilrbWFsbG9jKGluZm8tPm1heF9mcmFtZV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaW5mby0+dHhfYnVmID0ga21hbGxvYyhpbmZvLT5tYXhfZnJhbWVfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaW5mby0+dHhfYnVmKSB7CiAJCQlwcmludGsoS0VSTl9FUlIiJXMoJWQpOiVzIGNhbid0IGFsbG9jYXRlIHRyYW5zbWl0IGJ1ZmZlclxuIiwKIAkJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSk7CkBAIC0zNzk4LDcgKzM3OTgsNyBAQAogewogCVNMTVBfSU5GTyAqaW5mbzsKIAotCWluZm8gPSAoU0xNUF9JTkZPICopa21hbGxvYyhzaXplb2YoU0xNUF9JTkZPKSwKKwlpbmZvID0ga21hbGxvYyhzaXplb2YoU0xNUF9JTkZPKSwKIAkJIEdGUF9LRVJORUwpOwogCiAJaWYgKCFpbmZvKSB7CkBAIC00MDM0LDYgKzQwMzQsOCBAQAogCXNlcmlhbF9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKIAlzZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9CiAJCUI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwlzZXJpYWxfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOworCXNlcmlhbF9kcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAJc2VyaWFsX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhzZXJpYWxfZHJpdmVyLCAmb3BzKTsKIAlpZiAoKHJjID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihzZXJpYWxfZHJpdmVyKSkgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IDA1ODEwYzguLjdmZDNjZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC00MSw3ICs0MSwzNCBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogCiAvKiBXaGV0aGVyIHdlIHJlYWN0IG9uIHN5c3JxIGtleXMgb3IganVzdCBpZ25vcmUgdGhlbSAqLwotaW50IHN5c3JxX2VuYWJsZWQgPSAxOworaW50IF9fcmVhZF9tb3N0bHkgX19zeXNycV9lbmFibGVkID0gMTsKKworc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHN5c3JxX2Fsd2F5c19lbmFibGVkOworCitpbnQgc3lzcnFfb24odm9pZCkKK3sKKwlyZXR1cm4gX19zeXNycV9lbmFibGVkIHx8IHN5c3JxX2Fsd2F5c19lbmFibGVkOworfQorCisvKgorICogQSB2YWx1ZSBvZiAxIG1lYW5zICdhbGwnLCBvdGhlciBub256ZXJvIHZhbHVlcyBhcmUgYW4gb3AgbWFzazoKKyAqLworc3RhdGljIGlubGluZSBpbnQgc3lzcnFfb25fbWFzayhpbnQgbWFzaykKK3sKKwlyZXR1cm4gc3lzcnFfYWx3YXlzX2VuYWJsZWQgfHwgX19zeXNycV9lbmFibGVkID09IDEgfHwKKwkJCQkJCShfX3N5c3JxX2VuYWJsZWQgJiBtYXNrKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc3lzcnFfYWx3YXlzX2VuYWJsZWRfc2V0dXAoY2hhciAqc3RyKQoreworCXN5c3JxX2Fsd2F5c19lbmFibGVkID0gMTsKKwlwcmludGsoS0VSTl9JTkZPICJkZWJ1Zzogc3lzcnEgYWx3YXlzIGVuYWJsZWQuXG4iKTsKKworCXJldHVybiAxOworfQorCitfX3NldHVwKCJzeXNycV9hbHdheXNfZW5hYmxlZCIsIHN5c3JxX2Fsd2F5c19lbmFibGVkX3NldHVwKTsKKwogCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfbG9nbGV2ZWwoaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKQEAgLTE4OCw3ICsyMTUsNyBAQAogfQogc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfc2hvd3N0YXRlX2Jsb2NrZWRfb3AgPSB7CiAJLmhhbmRsZXIJPSBzeXNycV9oYW5kbGVfc2hvd3N0YXRlX2Jsb2NrZWQsCi0JLmhlbHBfbXNnCT0gInNob3dCbG9ja2VkVGFza3MiLAorCS5oZWxwX21zZwk9ICJzaG9XLWJsb2NrZWQtdGFza3MiLAogCS5hY3Rpb25fbXNnCT0gIlNob3cgQmxvY2tlZCBTdGF0ZSIsCiAJLmVuYWJsZV9tYXNrCT0gU1lTUlFfRU5BQkxFX0RVTVAsCiB9OwpAQCAtMjg4LDE1ICszMTUsMTYgQEAKIAkmc3lzcnFfbG9nbGV2ZWxfb3AsCQkvKiA5ICovCiAKIAkvKgotCSAqIERvbid0IHVzZSBmb3Igc3lzdGVtIHByb3ZpZGVkIHN5c3JxcywgaXQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgb24KLQkgKiBzcGFyYyBhbmQgd2lsbCBuZXZlciBhcnJpdmUKKwkgKiBhOiBEb24ndCB1c2UgZm9yIHN5c3RlbSBwcm92aWRlZCBzeXNycXMsIGl0IGlzIGhhbmRsZWQgc3BlY2lhbGx5IG9uCisJICogc3BhcmMgYW5kIHdpbGwgbmV2ZXIgYXJyaXZlLgogCSAqLwogCU5VTEwsCQkJCS8qIGEgKi8KIAkmc3lzcnFfcmVib290X29wLAkJLyogYiAqLwotCSZzeXNycV9jcmFzaGR1bXBfb3AsCQkvKiBjICovCisJJnN5c3JxX2NyYXNoZHVtcF9vcCwJCS8qIGMgJiBpYm1fZW1hYyBkcml2ZXIgZGVidWcgKi8KIAkmc3lzcnFfc2hvd2xvY2tzX29wLAkJLyogZCAqLwogCSZzeXNycV90ZXJtX29wLAkJCS8qIGUgKi8KIAkmc3lzcnFfbW9vbV9vcCwJCQkvKiBmICovCisJLyogZzogTWF5IGJlIHJlZ2lzdGVyZWQgYnkgcHBjIGZvciBrZ2RiICovCiAJTlVMTCwJCQkJLyogZyAqLwogCU5VTEwsCQkJCS8qIGggKi8KIAkmc3lzcnFfa2lsbF9vcCwJCQkvKiBpICovCkBAIC0zMDUsMTggKzMzMywxOSBAQAogCU5VTEwsCQkJCS8qIGwgKi8KIAkmc3lzcnFfc2hvd21lbV9vcCwJCS8qIG0gKi8KIAkmc3lzcnFfdW5ydF9vcCwJCQkvKiBuICovCi0JLyogVGhpcyB3aWxsIG9mdGVuIGJlIHJlZ2lzdGVyZWQgYXMgJ09mZicgYXQgaW5pdCB0aW1lICovCisJLyogbzogVGhpcyB3aWxsIG9mdGVuIGJlIHJlZ2lzdGVyZWQgYXMgJ09mZicgYXQgaW5pdCB0aW1lICovCiAJTlVMTCwJCQkJLyogbyAqLwogCSZzeXNycV9zaG93cmVnc19vcCwJCS8qIHAgKi8KIAlOVUxMLAkJCQkvKiBxICovCi0JJnN5c3JxX3VucmF3X29wLAkJCS8qIHIgKi8KKwkmc3lzcnFfdW5yYXdfb3AsCQkvKiByICovCiAJJnN5c3JxX3N5bmNfb3AsCQkJLyogcyAqLwogCSZzeXNycV9zaG93c3RhdGVfb3AsCQkvKiB0ICovCiAJJnN5c3JxX21vdW50cm9fb3AsCQkvKiB1ICovCi0JLyogTWF5IGJlIGFzc2lnbmVkIGF0IGluaXQgdGltZSBieSBTTVAgVk9ZQUdFUiAqLworCS8qIHY6IE1heSBiZSByZWdpc3RlcmVkIGF0IGluaXQgdGltZSBieSBTTVAgVk9ZQUdFUiAqLwogCU5VTEwsCQkJCS8qIHYgKi8KLQlOVUxMLAkJCQkvKiB3ICovCi0JJnN5c3JxX3Nob3dzdGF0ZV9ibG9ja2VkX29wLAkvKiB4ICovCisJJnN5c3JxX3Nob3dzdGF0ZV9ibG9ja2VkX29wLAkvKiB3ICovCisJLyogeDogTWF5IGJlIHJlZ2lzdGVyZWQgb24gcHBjL3Bvd2VycGMgZm9yIHhtb24gKi8KKwlOVUxMLAkJCQkvKiB4ICovCiAJTlVMTCwJCQkJLyogeSAqLwogCU5VTEwJCQkJLyogeiAqLwogfTsKQEAgLTM3OSw4ICs0MDgsNyBAQAogCQkgKiBTaG91bGQgd2UgY2hlY2sgZm9yIGVuYWJsZWQgb3BlcmF0aW9ucyAoL3Byb2Mvc3lzcnEtdHJpZ2dlcgogCQkgKiBzaG91bGQgbm90KSBhbmQgaXMgdGhlIGludm9rZWQgb3BlcmF0aW9uIGVuYWJsZWQ/CiAJCSAqLwotCQlpZiAoIWNoZWNrX21hc2sgfHwgc3lzcnFfZW5hYmxlZCA9PSAxIHx8Ci0JCSAgICAoc3lzcnFfZW5hYmxlZCAmIG9wX3AtPmVuYWJsZV9tYXNrKSkgeworCQlpZiAoIWNoZWNrX21hc2sgfHwgc3lzcnFfb25fbWFzayhvcF9wLT5lbmFibGVfbWFzaykpIHsKIAkJCXByaW50aygiJXNcbiIsIG9wX3AtPmFjdGlvbl9tc2cpOwogCQkJY29uc29sZV9sb2dsZXZlbCA9IG9yaWdfbG9nX2xldmVsOwogCQkJb3BfcC0+aGFuZGxlcihrZXksIHR0eSk7CkBAIC00MTQsOSArNDQyLDggQEAKICAqLwogdm9pZCBoYW5kbGVfc3lzcnEoaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlpZiAoIXN5c3JxX2VuYWJsZWQpCi0JCXJldHVybjsKLQlfX2hhbmRsZV9zeXNycShrZXksIHR0eSwgMSk7CisJaWYgKHN5c3JxX29uKCkpCisJCV9faGFuZGxlX3N5c3JxKGtleSwgdHR5LCAxKTsKIH0KIEVYUE9SVF9TWU1CT0woaGFuZGxlX3N5c3JxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RiMDIxOS5jIGIvZHJpdmVycy9jaGFyL3RiMDIxOS5jCmluZGV4IGJiMWJhZDQuLjRjNDMxY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90YjAyMTkuYworKysgYi9kcml2ZXJzL2NoYXIvdGIwMjE5LmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCXVuc2lnbmVkIGludCBtaW5vcjsKIAljaGFyIHZhbHVlOwogCi0JbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCW1pbm9yID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN3aXRjaCAobWlub3IpIHsKIAljYXNlIDA6CiAJCXZhbHVlID0gZ2V0X2xlZCgpOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJaW50IHJldHZhbCA9IDA7CiAJY2hhciBjOwogCi0JbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCW1pbm9yID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN3aXRjaCAobWlub3IpIHsKIAljYXNlIDA6CiAJCXR5cGUgPSBUWVBFX0xFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90aXBhci5jIGIvZHJpdmVycy9jaGFyL3RpcGFyLmMKaW5kZXggOWRmMGNhMS4uNDdmYjIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RpcGFyLmMKKysrIGIvZHJpdmVycy9jaGFyL3RpcGFyLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogdGlwYXJfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCiAJCWxvZmZfdCAqIHBwb3MpCiB7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSAtIFRJUEFSX01JTk9SOworCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSAtIFRJUEFSX01JTk9SOwogCXNzaXplX3QgbjsKIAogCXBhcnBvcnRfY2xhaW1fb3JfYmxvY2sodGFibGVbbWlub3JdLmRldik7CkBAIC0zMTMsNyArMzEzLDcgQEAKIHRpcGFyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKIHsKIAlpbnQgYiA9IDA7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSAtIFRJUEFSX01JTk9SOworCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSAtIFRJUEFSX01JTk9SOwogCXNzaXplX3QgcmV0dmFsID0gMDsKIAlzc2l6ZV90IG4gPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdGxjbGsuYyBiL2RyaXZlcnMvY2hhci90bGNsay5jCmluZGV4IDI0NGQzMGEuLjRmYWMyYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90bGNsay5jCisrKyBiL2RyaXZlcnMvY2hhci90bGNsay5jCkBAIC0xODYsNiArMTg2LDcgQEAKIHN0YXRpYyB2b2lkIHN3aXRjaG92ZXJfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHN3aXRjaG92ZXJfdGltZXIgPQogCVRJTUVSX0lOSVRJQUxJWkVSKHN3aXRjaG92ZXJfdGltZW91dCAsIDAsIDApOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGxjbGtfdGltZXJfZGF0YTsKIAogc3RhdGljIHN0cnVjdCB0bGNsa19hbGFybXMgKmFsYXJtX2V2ZW50czsKIApAQCAtMTk3LDEwICsxOTgsMTkgQEAKIAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgdXNlZmxhZ3M7CitzdGF0aWMgREVGSU5FX01VVEVYKHRsY2xrX211dGV4KTsKKwogc3RhdGljIGludCB0bGNsa19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCByZXN1bHQ7CiAKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmdXNlZmxhZ3MpKQorCQlyZXR1cm4gLUVCVVNZOworCQkvKiB0aGlzIGxlZ2FjeSBkZXZpY2UgaXMgYWx3YXlzIG9uZSBwZXIgc3lzdGVtIGFuZCBpdCBkb2Vzbid0CisJCSAqIGtub3cgaG93IHRvIGhhbmRsZSBtdWx0aXBsZSBjb25jdXJyZW50IGNsaWVudHMuCisJCSAqLworCiAJLyogTWFrZSBzdXJlIHRoZXJlIGlzIG5vIGludGVycnVwdCBwZW5kaW5nIHdoaWxlCiAJICogaW5pdGlhbGlzaW5nIGludGVycnVwdCBoYW5kbGVyICovCiAJaW5iKFRMQ0xLX1JFRzYpOwpAQCAtMjIxLDYgKzIzMSw3IEBACiBzdGF0aWMgaW50IHRsY2xrX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJZnJlZV9pcnEodGVsY2xrX2ludGVycnVwdCwgdGxjbGtfaW50ZXJydXB0KTsKKwljbGVhcl9iaXQoMCwgJnVzZWZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjMwLDI2ICsyNDEsMjUgQEAKIHsKIAlpZiAoY291bnQgPCBzaXplb2Yoc3RydWN0IHRsY2xrX2FsYXJtcykpCiAJCXJldHVybiAtRUlPOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnRsY2xrX211dGV4KSkKKwkJcmV0dXJuIC1FSU5UUjsKKwogCiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHdxLCBnb3RfZXZlbnQpOwotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBhbGFybV9ldmVudHMsIHNpemVvZihzdHJ1Y3QgdGxjbGtfYWxhcm1zKSkpCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGFsYXJtX2V2ZW50cywgc2l6ZW9mKHN0cnVjdCB0bGNsa19hbGFybXMpKSkgeworCQltdXRleF91bmxvY2soJnRsY2xrX211dGV4KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCiAJbWVtc2V0KGFsYXJtX2V2ZW50cywgMCwgc2l6ZW9mKHN0cnVjdCB0bGNsa19hbGFybXMpKTsKIAlnb3RfZXZlbnQgPSAwOwogCisJbXV0ZXhfdW5sb2NrKCZ0bGNsa19tdXRleCk7CiAJcmV0dXJuICBzaXplb2Yoc3RydWN0IHRsY2xrX2FsYXJtcyk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHRsY2xrX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCi0JICAgIGxvZmZfdCAqZl9wb3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRsY2xrX2ZvcHMgPSB7CiAJLnJlYWQgPSB0bGNsa19yZWFkLAotCS53cml0ZSA9IHRsY2xrX3dyaXRlLAogCS5vcGVuID0gdGxjbGtfb3BlbiwKIAkucmVsZWFzZSA9IHRsY2xrX3JlbGVhc2UsCiAKQEAgLTU0MCw3ICs1NTAsNyBAQAogCQkJU0VUX1BPUlRfQklUUyhUTENMS19SRUczLCAweGY4LCAweDcpOwogCQkJc3dpdGNoICh2YWwpIHsKIAkJCWNhc2UgQ0xLXzhfNTkyTUh6OgotCQkJCVNFVF9QT1JUX0JJVFMoVExDTEtfUkVHMCwgMHhmYywgMSk7CisJCQkJU0VUX1BPUlRfQklUUyhUTENMS19SRUcwLCAweGZjLCAyKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ0xLXzExXzE4NE1IejoKIAkJCQlTRVRfUE9SVF9CSVRTKFRMQ0xLX1JFRzAsIDB4ZmMsIDApOwpAQCAtNTQ5LDcgKzU1OSw3IEBACiAJCQkJU0VUX1BPUlRfQklUUyhUTENMS19SRUcwLCAweGZjLCAzKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ0xLXzQ0XzczNk1IejoKLQkJCQlTRVRfUE9SVF9CSVRTKFRMQ0xLX1JFRzAsIDB4ZmMsIDIpOworCQkJCVNFVF9QT1JUX0JJVFMoVExDTEtfUkVHMCwgMHhmYywgMSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZQpAQCAtODA3LDggKzgxNyw2IEBACiAJCQkmdGxjbGtfYXR0cmlidXRlX2dyb3VwKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAidGxjbGs6IGZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZXMuXG4iKTsKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZ0bGNsa19kZXZpY2UtPmRldi5rb2JqLAotCQkJJnRsY2xrX2F0dHJpYnV0ZV9ncm91cCk7CiAJCWdvdG8gb3V0NTsKIAl9CiAKQEAgLTg0MSwxMSArODQ5LDEzIEBACiAKIHN0YXRpYyB2b2lkIHN3aXRjaG92ZXJfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JaWYgKChkYXRhICYgMSkpIHsKLQkJaWYgKChpbmIoVExDTEtfUkVHMSkgJiAweDA4KSAhPSAoZGF0YSAmIDB4MDgpKQorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAqKHVuc2lnbmVkIGxvbmcgKikgZGF0YTsKKworCWlmICgoZmxhZ3MgJiAxKSkgeworCQlpZiAoKGluYihUTENMS19SRUcxKSAmIDB4MDgpICE9IChmbGFncyAmIDB4MDgpKQogCQkJYWxhcm1fZXZlbnRzLT5zd2l0Y2hvdmVyX3ByaW1hcnkrKzsKIAl9IGVsc2UgewotCQlpZiAoKGluYihUTENMS19SRUcxKSAmIDB4MDgpICE9IChkYXRhICYgMHgwOCkpCisJCWlmICgoaW5iKFRMQ0xLX1JFRzEpICYgMHgwOCkgIT0gKGZsYWdzICYgMHgwOCkpCiAJCQlhbGFybV9ldmVudHMtPnN3aXRjaG92ZXJfc2Vjb25kYXJ5Kys7CiAJfQogCkBAIC05MDMsOCArOTEzLDkgQEAKIAogCQkvKiBUSU1FT1VUIGluIH4xMG1zICovCiAJCXN3aXRjaG92ZXJfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwKTsKLQkJc3dpdGNob3Zlcl90aW1lci5kYXRhID0gaW5iKFRMQ0xLX1JFRzEpOwotCQlhZGRfdGltZXIoJnN3aXRjaG92ZXJfdGltZXIpOworCQl0bGNsa190aW1lcl9kYXRhID0gaW5iKFRMQ0xLX1JFRzEpOworCQlzd2l0Y2hvdmVyX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgJnRsY2xrX3RpbWVyX2RhdGE7CisJCW1vZF90aW1lcigmc3dpdGNob3Zlcl90aW1lciwgc3dpdGNob3Zlcl90aW1lci5leHBpcmVzKTsKIAl9IGVsc2UgewogCQlnb3RfZXZlbnQgPSAxOwogCQl3YWtlX3VwKCZ3cSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggYjNjZmM4Yi4uNDdhNmVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMTA5LDEzICsxMDksMTUgQEAKICNkZWZpbmUgVFRZX1BBUkFOT0lBX0NIRUNLIDEKICNkZWZpbmUgQ0hFQ0tfVFRZX0NPVU5UIDEKIAotc3RydWN0IHRlcm1pb3MgdHR5X3N0ZF90ZXJtaW9zID0gewkvKiBmb3IgdGhlIGJlbmVmaXQgb2YgdHR5IGRyaXZlcnMgICovCitzdHJ1Y3Qga3Rlcm1pb3MgdHR5X3N0ZF90ZXJtaW9zID0gewkvKiBmb3IgdGhlIGJlbmVmaXQgb2YgdHR5IGRyaXZlcnMgICovCiAJLmNfaWZsYWcgPSBJQ1JOTCB8IElYT04sCiAJLmNfb2ZsYWcgPSBPUE9TVCB8IE9OTENSLAogCS5jX2NmbGFnID0gQjM4NDAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCwKIAkuY19sZmxhZyA9IElTSUcgfCBJQ0FOT04gfCBFQ0hPIHwgRUNIT0UgfCBFQ0hPSyB8CiAJCSAgIEVDSE9DVEwgfCBFQ0hPS0UgfCBJRVhURU4sCi0JLmNfY2MgPSBJTklUX0NfQ0MKKwkuY19jYyA9IElOSVRfQ19DQywKKwkuY19pc3BlZWQgPSAzODQwMCwKKwkuY19vc3BlZWQgPSAzODQwMAogfTsKIAogRVhQT1JUX1NZTUJPTCh0dHlfc3RkX3Rlcm1pb3MpOwpAQCAtMTI2LDcgKzEyOCw3IEBACiAgICAKIExJU1RfSEVBRCh0dHlfZHJpdmVycyk7CQkJLyogbGlua2VkIGxpc3Qgb2YgdHR5IGRyaXZlcnMgKi8KIAotLyogU2VtYXBob3JlIHRvIHByb3RlY3QgY3JlYXRpbmcgYW5kIHJlbGVhc2luZyBhIHR0eS4gVGhpcyBpcyBzaGFyZWQgd2l0aAorLyogTXV0ZXggdG8gcHJvdGVjdCBjcmVhdGluZyBhbmQgcmVsZWFzaW5nIGEgdHR5LiBUaGlzIGlzIHNoYXJlZCB3aXRoCiAgICB2dC5jIGZvciBkZWVwbHkgZGlzZ3VzdGluZyBoYWNrIHJlYXNvbnMgKi8KIERFRklORV9NVVRFWCh0dHlfbXV0ZXgpOwogRVhQT1JUX1NZTUJPTCh0dHlfbXV0ZXgpOwpAQCAtMjUwLDcgKzI1Miw3IEBACiAJCQkJICAgICIhPSAjZmQncyglZCkgaW4gJXNcbiIsCiAJCSAgICAgICB0dHktPm5hbWUsIHR0eS0+Y291bnQsIGNvdW50LCByb3V0aW5lKTsKIAkJcmV0dXJuIGNvdW50OwotICAgICAgIH0JCisJfQogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTksMTggKzI2MSw2IEBACiAgKiBUdHkgYnVmZmVyIGFsbG9jYXRpb24gbWFuYWdlbWVudAogICovCiAKLQotLyoqCi0gKgl0dHlfYnVmZmVyX2ZyZWVfYWxsCQktCWZyZWUgYnVmZmVycyB1c2VkIGJ5IGEgdHR5Ci0gKglAdHR5OiB0dHkgdG8gZnJlZSBmcm9tCi0gKgotICoJUmVtb3ZlIGFsbCB0aGUgYnVmZmVycyBwZW5kaW5nIG9uIGEgdHR5IHdoZXRoZXIgcXVldWVkIHdpdGggZGF0YQotICoJb3IgaW4gdGhlIGZyZWUgcmluZy4gTXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgdHR5IGlzIG5vIGxvbmdlciBpbiB1c2UKLSAqCi0gKglMb2NraW5nOiBub25lCi0gKi8KLQotCiAvKioKICAqCXR0eV9idWZmZXJfZnJlZV9hbGwJCS0JZnJlZSBidWZmZXJzIHVzZWQgYnkgYSB0dHkKICAqCUB0dHk6IHR0eSB0byBmcmVlIGZyb20KQEAgLTYxNCw3ICs2MDQsNyBAQAogICoJdGhleSBhcmUgbm90IG9uIGhvdCBwYXRocyBzbyBhIGxpdHRsZSBkaXNjaXBsaW5lIHdvbid0IGRvIAogICoJYW55IGhhcm0uCiAgKgotICoJTG9ja2luZzogdGFrZXMgdGVybWlvc19zZW0KKyAqCUxvY2tpbmc6IHRha2VzIHRlcm1pb3NfbXV0ZXgKICAqLwogIAogc3RhdGljIHZvaWQgdHR5X3NldF90ZXJtaW9zX2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBudW0pCkBAIC05MTUsNyArOTA1LDcgQEAKICAqCWNvbnRleHQuCiAgKgogICoJTG9ja2luZzogdGFrZXMgdHR5X2xkaXNjX2xvY2suCi0gKgkJY2FsbGVkIGZ1bmN0aW9ucyB0YWtlIHRlcm1pb3Nfc2VtCisgKgkJIGNhbGxlZCBmdW5jdGlvbnMgdGFrZSB0ZXJtaW9zX211dGV4CiAgKi8KICAKIHN0YXRpYyBpbnQgdHR5X3NldF9sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbGRpc2MpCkBAIC0xMjUxLDYgKzEyNDEsMjIgQEAKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX2ZsdXNoKTsKKworLyoqCisgKgl0dHlfcmVzZXRfdGVybWlvcwktCXJlc2V0IHRlcm1pbmFsIHN0YXRlCisgKglAdHR5OiB0dHkgdG8gcmVzZXQKKyAqCisgKglSZXN0b3JlIGEgdGVybWluYWwgdG8gdGhlIGRyaXZlciBkZWZhdWx0IHN0YXRlCisgKi8KKworc3RhdGljIHZvaWQgdHR5X3Jlc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwltdXRleF9sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOworCSp0dHktPnRlcm1pb3MgPSB0dHktPmRyaXZlci0+aW5pdF90ZXJtaW9zOworCXR0eS0+dGVybWlvcy0+Y19pc3BlZWQgPSB0dHlfdGVybWlvc19pbnB1dF9iYXVkX3JhdGUodHR5LT50ZXJtaW9zKTsKKwl0dHktPnRlcm1pb3MtPmNfb3NwZWVkID0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKHR0eS0+dGVybWlvcyk7CisJbXV0ZXhfdW5sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOworfQogCQogLyoqCiAgKglkb190dHlfaGFuZ3VwCQktCWFjdHVhbCBoYW5kbGVyIGZvciBoYW5ndXAgZXZlbnRzCkBAIC0xMjY3LDEyICsxMjczLDEyIEBACiAgKgogICoJTG9ja2luZzoKICAqCQlCS0wKLSAqCQlyZWRpcmVjdCBsb2NrIGZvciB1bmRvaW5nIHJlZGlyZWN0aW9uCi0gKgkJZmlsZSBsaXN0IGxvY2sgZm9yIG1hbmlwdWxhdGluZyBsaXN0IG9mIHR0eXMKLSAqCQl0dHlfbGRpc2NfbG9jayBmcm9tIGNhbGxlZCBmdW5jdGlvbnMKLSAqCQl0ZXJtaW9zX3NlbSByZXNldHRpbmcgdGVybWlvcyBkYXRhCi0gKgkJdGFza2xpc3RfbG9jayB0byB3YWxrIHRhc2sgbGlzdCBmb3IgaGFuZ3VwIGV2ZW50Ci0gKgorICoJCSAgcmVkaXJlY3QgbG9jayBmb3IgdW5kb2luZyByZWRpcmVjdGlvbgorICoJCSAgZmlsZSBsaXN0IGxvY2sgZm9yIG1hbmlwdWxhdGluZyBsaXN0IG9mIHR0eXMKKyAqCQkgIHR0eV9sZGlzY19sb2NrIGZyb20gY2FsbGVkIGZ1bmN0aW9ucworICoJCSAgdGVybWlvc19tdXRleCByZXNldHRpbmcgdGVybWlvcyBkYXRhCisgKgkJICB0YXNrbGlzdF9sb2NrIHRvIHdhbGsgdGFzayBsaXN0IGZvciBoYW5ndXAgZXZlbnQKKyAqCQkgICAgLT5zaWdsb2NrIHRvIHByb3RlY3QgLT5zaWduYWwvLT5zaWdoYW5kCiAgKi8KIHN0YXRpYyB2b2lkIGRvX3R0eV9oYW5ndXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewpAQCAtMTMzOSwxMSArMTM0NSw3IEBACiAJICogTl9UVFkuCiAJICovCiAJaWYgKHR0eS0+ZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUykKLQl7Ci0JCW11dGV4X2xvY2soJnR0eS0+dGVybWlvc19tdXRleCk7Ci0JCSp0dHktPnRlcm1pb3MgPSB0dHktPmRyaXZlci0+aW5pdF90ZXJtaW9zOwotCQltdXRleF91bmxvY2soJnR0eS0+dGVybWlvc19tdXRleCk7Ci0JfQorCQl0dHlfcmVzZXRfdGVybWlvcyh0dHkpOwogCQogCS8qIERlZmVyIGxkaXNjIHN3aXRjaCAqLwogCS8qIHR0eV9kZWZlcnJlZF9sZGlzY19zd2l0Y2goTl9UVFkpOwpAQCAtMTM1NCwxNCArMTM1NiwxOCBAQAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJaWYgKHR0eS0+c2Vzc2lvbiA+IDApIHsKIAkJZG9fZWFjaF90YXNrX3BpZCh0dHktPnNlc3Npb24sIFBJRFRZUEVfU0lELCBwKSB7CisJCQlzcGluX2xvY2tfaXJxKCZwLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJCWlmIChwLT5zaWduYWwtPnR0eSA9PSB0dHkpCiAJCQkJcC0+c2lnbmFsLT50dHkgPSBOVUxMOwotCQkJaWYgKCFwLT5zaWduYWwtPmxlYWRlcikKKwkJCWlmICghcC0+c2lnbmFsLT5sZWFkZXIpIHsKKwkJCQlzcGluX3VubG9ja19pcnEoJnAtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQkJCWNvbnRpbnVlOwotCQkJZ3JvdXBfc2VuZF9zaWdfaW5mbyhTSUdIVVAsIFNFTkRfU0lHX1BSSVYsIHApOwotCQkJZ3JvdXBfc2VuZF9zaWdfaW5mbyhTSUdDT05ULCBTRU5EX1NJR19QUklWLCBwKTsKKwkJCX0KKwkJCV9fZ3JvdXBfc2VuZF9zaWdfaW5mbyhTSUdIVVAsIFNFTkRfU0lHX1BSSVYsIHApOworCQkJX19ncm91cF9zZW5kX3NpZ19pbmZvKFNJR0NPTlQsIFNFTkRfU0lHX1BSSVYsIHApOwogCQkJaWYgKHR0eS0+cGdycCA+IDApCiAJCQkJcC0+c2lnbmFsLT50dHlfb2xkX3BncnAgPSB0dHktPnBncnA7CisJCQlzcGluX3VubG9ja19pcnEoJnAtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQl9IHdoaWxlX2VhY2hfdGFza19waWQodHR5LT5zZXNzaW9uLCBQSURUWVBFX1NJRCwgcCk7CiAJfQogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKQEAgLTE0NTMsNiArMTQ1OSwxNCBAQAogCiBFWFBPUlRfU1lNQk9MKHR0eV9odW5nX3VwX3ApOwogCitzdGF0aWMgdm9pZCBzZXNzaW9uX2NsZWFyX3R0eShwaWRfdCBzZXNzaW9uKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwlkb19lYWNoX3Rhc2tfcGlkKHNlc3Npb24sIFBJRFRZUEVfU0lELCBwKSB7CisJCXByb2NfY2xlYXJfdHR5KHApOworCX0gd2hpbGVfZWFjaF90YXNrX3BpZChzZXNzaW9uLCBQSURUWVBFX1NJRCwgcCk7Cit9CisKIC8qKgogICoJZGlzYXNzb2NpYXRlX2N0dHkJLQlkaXNjb25uZWN0IGNvbnRyb2xsaW5nIHR0eQogICoJQG9uX2V4aXQ6IHRydWUgaWYgZXhpdGluZyBzbyBuZWVkIHRvICJoYW5nIHVwIiB0aGUgc2Vzc2lvbgpAQCAtMTQ2OSwzMSArMTQ4MywzNSBAQAogICoJVGhlIGFyZ3VtZW50IG9uX2V4aXQgaXMgc2V0IHRvIDEgaWYgY2FsbGVkIHdoZW4gYSBwcm9jZXNzIGlzCiAgKglleGl0aW5nOyBpdCBpcyAwIGlmIGNhbGxlZCBieSB0aGUgaW9jdGwgVElPQ05PVFRZLgogICoKLSAqCUxvY2tpbmc6IHR0eV9tdXRleCBpcyB0YWtlbiB0byBwcm90ZWN0IGN1cnJlbnQtPnNpZ25hbC0+dHR5CisgKglMb2NraW5nOgogICoJCUJLTCBpcyB0YWtlbiBmb3IgaHlzdGVyaWNhbCByYWlzaW5zCi0gKgkJVGFza2xpc3QgbG9jayBpcyB0YWtlbiAodW5kZXIgdHR5X211dGV4KSB0byB3YWxrIHByb2Nlc3MKLSAqCQlsaXN0cyBmb3IgdGhlIHNlc3Npb24uCisgKgkJICB0dHlfbXV0ZXggaXMgdGFrZW4gdG8gcHJvdGVjdCB0dHkKKyAqCQkgIC0+c2lnbG9jayBpcyB0YWtlbiB0byBwcm90ZWN0IC0+c2lnbmFsLy0+c2lnaGFuZAorICoJCSAgdGFza2xpc3RfbG9jayBpcyB0YWtlbiB0byB3YWxrIHByb2Nlc3MgbGlzdCBmb3Igc2Vzc2lvbnMKKyAqCQkgICAgLT5zaWdsb2NrIGlzIHRha2VuIHRvIHByb3RlY3QgLT5zaWduYWwvLT5zaWdoYW5kCiAgKi8KIAogdm9pZCBkaXNhc3NvY2lhdGVfY3R0eShpbnQgb25fZXhpdCkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAlpbnQgdHR5X3BncnAgPSAtMTsKKwlpbnQgc2Vzc2lvbjsKIAogCWxvY2tfa2VybmVsKCk7CiAKIAltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwotCXR0eSA9IGN1cnJlbnQtPnNpZ25hbC0+dHR5OworCXR0eSA9IGdldF9jdXJyZW50X3R0eSgpOwogCWlmICh0dHkpIHsKIAkJdHR5X3BncnAgPSB0dHktPnBncnA7CiAJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKKwkJLyogWFhYOiBoZXJlIHdlIHJhY2UsIHRoZXJlIGlzIG5vdGhpbmcgcHJvdGVjdGluZyB0dHkgKi8KIAkJaWYgKG9uX2V4aXQgJiYgdHR5LT5kcml2ZXItPnR5cGUgIT0gVFRZX0RSSVZFUl9UWVBFX1BUWSkKIAkJCXR0eV92aGFuZ3VwKHR0eSk7CiAJfSBlbHNlIHsKLQkJaWYgKGN1cnJlbnQtPnNpZ25hbC0+dHR5X29sZF9wZ3JwKSB7Ci0JCQlraWxsX3BnKGN1cnJlbnQtPnNpZ25hbC0+dHR5X29sZF9wZ3JwLCBTSUdIVVAsIG9uX2V4aXQpOwotCQkJa2lsbF9wZyhjdXJyZW50LT5zaWduYWwtPnR0eV9vbGRfcGdycCwgU0lHQ09OVCwgb25fZXhpdCk7CisJCXBpZF90IG9sZF9wZ3JwID0gY3VycmVudC0+c2lnbmFsLT50dHlfb2xkX3BncnA7CisJCWlmIChvbGRfcGdycCkgeworCQkJa2lsbF9wZyhvbGRfcGdycCwgU0lHSFVQLCBvbl9leGl0KTsKKwkJCWtpbGxfcGcob2xkX3BncnAsIFNJR0NPTlQsIG9uX2V4aXQpOwogCQl9CiAJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkJdW5sb2NrX2tlcm5lbCgpOwkKQEAgLTE1MDUsMTkgKzE1MjMsMjkgQEAKIAkJCWtpbGxfcGcodHR5X3BncnAsIFNJR0NPTlQsIG9uX2V4aXQpOwogCX0KIAotCS8qIE11c3QgbG9jayBjaGFuZ2VzIHRvIHR0eV9vbGRfcGdycCAqLwotCW11dGV4X2xvY2soJnR0eV9tdXRleCk7CisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJY3VycmVudC0+c2lnbmFsLT50dHlfb2xkX3BncnAgPSAwOwotCXR0eS0+c2Vzc2lvbiA9IDA7Ci0JdHR5LT5wZ3JwID0gLTE7CisJc2Vzc2lvbiA9IHByb2Nlc3Nfc2Vzc2lvbihjdXJyZW50KTsKKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKKwkvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IGRvX3R0eV9oYW5ndXAgaGFzIGZyZWUnZCB0aGlzIHR0eSAqLworCXR0eSA9IGdldF9jdXJyZW50X3R0eSgpOworCWlmICh0dHkpIHsKKwkJdHR5LT5zZXNzaW9uID0gMDsKKwkJdHR5LT5wZ3JwID0gMDsKKwl9IGVsc2UgeworI2lmZGVmIFRUWV9ERUJVR19IQU5HVVAKKwkJcHJpbnRrKEtFUk5fREVCVUcgImVycm9yIGF0dGVtcHRlZCB0byB3cml0ZSB0byB0dHkgWzB4JXBdIgorCQkgICAgICAgIiA9IE5VTEwiLCB0dHkpOworI2VuZGlmCisJfQorCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAogCS8qIE5vdyBjbGVhciBzaWduYWwtPnR0eSB1bmRlciB0aGUgbG9jayAqLwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JZG9fZWFjaF90YXNrX3BpZChjdXJyZW50LT5zaWduYWwtPnNlc3Npb24sIFBJRFRZUEVfU0lELCBwKSB7Ci0JCXAtPnNpZ25hbC0+dHR5ID0gTlVMTDsKLQl9IHdoaWxlX2VhY2hfdGFza19waWQoY3VycmVudC0+c2lnbmFsLT5zZXNzaW9uLCBQSURUWVBFX1NJRCwgcCk7CisJc2Vzc2lvbl9jbGVhcl90dHkoc2Vzc2lvbik7CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAl1bmxvY2tfa2VybmVsKCk7CiB9CiAKQEAgLTE2MTUsNyArMTY0Myw3IEBACiAJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CiAKIAl0dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKHR0eV9wYXJhbm9pYV9jaGVjayh0dHksIGlub2RlLCAidHR5X3JlYWQiKSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKCF0dHkgfHwgKHRlc3RfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpKSkKQEAgLTE3MTgsNyArMTc0Niw3IEBACiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAlpZiAod3JpdHRlbikgewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCQlpbm9kZS0+aV9tdGltZSA9IGN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7CiAJCXJldCA9IHdyaXR0ZW47CiAJfQpAQCAtMTc0OSw3ICsxNzc3LDcgQEAKIAkJCSBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHk7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXNzaXplX3QgcmV0OwogCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCQpAQCAtMTg1Niw4ICsxODg0LDggQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqKnJldF90dHkpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgKm9fdHR5OwotCXN0cnVjdCB0ZXJtaW9zICp0cCwgKip0cF9sb2MsICpvX3RwLCAqKm9fdHBfbG9jOwotCXN0cnVjdCB0ZXJtaW9zICpsdHAsICoqbHRwX2xvYywgKm9fbHRwLCAqKm9fbHRwX2xvYzsKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnRwLCAqKnRwX2xvYywgKm9fdHAsICoqb190cF9sb2M7CisJc3RydWN0IGt0ZXJtaW9zICpsdHAsICoqbHRwX2xvYywgKm9fbHRwLCAqKm9fbHRwX2xvYzsKIAlpbnQgcmV0dmFsID0gMDsKIAogCS8qIGNoZWNrIHdoZXRoZXIgd2UncmUgcmVvcGVuaW5nIGFuIGV4aXN0aW5nIHR0eSAqLwpAQCAtMTkwNCw3ICsxOTMyLDcgQEAKIAl9CiAKIAlpZiAoISp0cF9sb2MpIHsKLQkJdHAgPSAoc3RydWN0IHRlcm1pb3MgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHRlcm1pb3MpLAorCQl0cCA9IChzdHJ1Y3Qga3Rlcm1pb3MgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IGt0ZXJtaW9zKSwKIAkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIXRwKQogCQkJZ290byBmcmVlX21lbV9vdXQ7CkBAIC0xOTEyLDExICsxOTQwLDExIEBACiAJfQogCiAJaWYgKCEqbHRwX2xvYykgewotCQlsdHAgPSAoc3RydWN0IHRlcm1pb3MgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHRlcm1pb3MpLAorCQlsdHAgPSAoc3RydWN0IGt0ZXJtaW9zICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrdGVybWlvcyksCiAJCQkJCQkgR0ZQX0tFUk5FTCk7CiAJCWlmICghbHRwKQogCQkJZ290byBmcmVlX21lbV9vdXQ7Ci0JCW1lbXNldChsdHAsIDAsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpOworCQltZW1zZXQobHRwLCAwLCBzaXplb2Yoc3RydWN0IGt0ZXJtaW9zKSk7CiAJfQogCiAJaWYgKGRyaXZlci0+dHlwZSA9PSBUVFlfRFJJVkVSX1RZUEVfUFRZKSB7CkBAIC0xOTM3LDE5ICsxOTY1LDE5IEBACiAJCX0KIAogCQlpZiAoISpvX3RwX2xvYykgewotCQkJb190cCA9IChzdHJ1Y3QgdGVybWlvcyAqKQotCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSwgR0ZQX0tFUk5FTCk7CisJCQlvX3RwID0gKHN0cnVjdCBrdGVybWlvcyAqKQorCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrdGVybWlvcyksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFvX3RwKQogCQkJCWdvdG8gZnJlZV9tZW1fb3V0OwogCQkJKm9fdHAgPSBkcml2ZXItPm90aGVyLT5pbml0X3Rlcm1pb3M7CiAJCX0KIAogCQlpZiAoISpvX2x0cF9sb2MpIHsKLQkJCW9fbHRwID0gKHN0cnVjdCB0ZXJtaW9zICopCi0JCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHRlcm1pb3MpLCBHRlBfS0VSTkVMKTsKKwkJCW9fbHRwID0gKHN0cnVjdCBrdGVybWlvcyAqKQorCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrdGVybWlvcyksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFvX2x0cCkKIAkJCQlnb3RvIGZyZWVfbWVtX291dDsKLQkJCW1lbXNldChvX2x0cCwgMCwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSk7CisJCQltZW1zZXQob19sdHAsIDAsIHNpemVvZihzdHJ1Y3Qga3Rlcm1pb3MpKTsKIAkJfQogCiAJCS8qCkBAIC0xOTg4LDYgKzIwMTYsOSBAQAogCQkqbHRwX2xvYyA9IGx0cDsKIAl0dHktPnRlcm1pb3MgPSAqdHBfbG9jOwogCXR0eS0+dGVybWlvc19sb2NrZWQgPSAqbHRwX2xvYzsKKwkvKiBDb21wYXRpYmlsaXR5IHVudGlsIGRyaXZlcnMgYWx3YXlzIHNldCB0aGlzICovCisJdHR5LT50ZXJtaW9zLT5jX2lzcGVlZCA9IHR0eV90ZXJtaW9zX2lucHV0X2JhdWRfcmF0ZSh0dHktPnRlcm1pb3MpOworCXR0eS0+dGVybWlvcy0+Y19vc3BlZWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUodHR5LT50ZXJtaW9zKTsKIAlkcml2ZXItPnJlZmNvdW50Kys7CiAJdHR5LT5jb3VudCsrOwogCkBAIC0yMDkwLDcgKzIxMjEsNyBAQAogc3RhdGljIHZvaWQgcmVsZWFzZV9tZW0oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqb190dHk7Ci0Jc3RydWN0IHRlcm1pb3MgKnRwOworCXN0cnVjdCBrdGVybWlvcyAqdHA7CiAJaW50IGRldnB0cyA9IHR0eS0+ZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfREVWUFRTX01FTTsKIAogCWlmICgob190dHkgPSB0dHktPmxpbmspICE9IE5VTEwpIHsKQEAgLTIxNTYsNyArMjE4Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkKIAl0dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKilmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaWYgKHR0eV9wYXJhbm9pYV9jaGVjayh0dHksIGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCAicmVsZWFzZV9kZXYiKSkKKwlpZiAodHR5X3BhcmFub2lhX2NoZWNrKHR0eSwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgInJlbGVhc2VfZGV2IikpCiAJCXJldHVybjsKIAogCWNoZWNrX3R0eV9jb3VudCh0dHksICJyZWxlYXNlX2RldiIpOwpAQCAtMjMzNywxNiArMjM2OCwxMCBAQAogCSAqIHR0eS4KIAkgKi8KIAlpZiAodHR5X2Nsb3NpbmcgfHwgb190dHlfY2xvc2luZykgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0KIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJZG9fZWFjaF90YXNrX3BpZCh0dHktPnNlc3Npb24sIFBJRFRZUEVfU0lELCBwKSB7Ci0JCQlwLT5zaWduYWwtPnR0eSA9IE5VTEw7Ci0JCX0gd2hpbGVfZWFjaF90YXNrX3BpZCh0dHktPnNlc3Npb24sIFBJRFRZUEVfU0lELCBwKTsKKwkJc2Vzc2lvbl9jbGVhcl90dHkodHR5LT5zZXNzaW9uKTsKIAkJaWYgKG9fdHR5KQotCQkJZG9fZWFjaF90YXNrX3BpZChvX3R0eS0+c2Vzc2lvbiwgUElEVFlQRV9TSUQsIHApIHsKLQkJCQlwLT5zaWduYWwtPnR0eSA9IE5VTEw7Ci0JCQl9IHdoaWxlX2VhY2hfdGFza19waWQob190dHktPnNlc3Npb24sIFBJRFRZUEVfU0lELCBwKTsKKwkJCXNlc3Npb25fY2xlYXJfdHR5KG9fdHR5LT5zZXNzaW9uKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCX0KIApAQCAtMjQ0Myw5ICsyNDY4LDkgQEAKICAqCVRoZSB0ZXJtaW9zIHN0YXRlIG9mIGEgcHR5IGlzIHJlc2V0IG9uIGZpcnN0IG9wZW4gc28gdGhhdAogICoJc2V0dGluZ3MgZG9uJ3QgcGVyc2lzdCBhY3Jvc3MgcmV1c2UuCiAgKgotICoJTG9ja2luZzogdHR5X211dGV4IHByb3RlY3RzIGN1cnJlbnQtPnNpZ25hbC0+dHR5LCBnZXRfdHR5X2RyaXZlciBhbmQKLSAqCQlpbml0X2RldiB3b3JrLiB0dHktPmNvdW50IHNob3VsZCBwcm90ZWN0IHRoZSByZXN0LgotICoJCXRhc2tfbG9jayBpcyBoZWxkIHRvIHVwZGF0ZSB0YXNrIGRldGFpbHMgZm9yIHNlc3Npb25zCisgKglMb2NraW5nOiB0dHlfbXV0ZXggcHJvdGVjdHMgdHR5LCBnZXRfdHR5X2RyaXZlciBhbmQgaW5pdF9kZXYgd29yay4KKyAqCQkgdHR5LT5jb3VudCBzaG91bGQgcHJvdGVjdCB0aGUgcmVzdC4KKyAqCQkgLT5zaWdsb2NrIHByb3RlY3RzIC0+c2lnbmFsLy0+c2lnaGFuZAogICovCiAKIHN0YXRpYyBpbnQgdHR5X29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKQEAgLTI0NjcsMTIgKzI0OTIsMTMgQEAKIAltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCiAJaWYgKGRldmljZSA9PSBNS0RFVihUVFlBVVhfTUFKT1IsMCkpIHsKLQkJaWYgKCFjdXJyZW50LT5zaWduYWwtPnR0eSkgeworCQl0dHkgPSBnZXRfY3VycmVudF90dHkoKTsKKwkJaWYgKCF0dHkpIHsKIAkJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkJCXJldHVybiAtRU5YSU87CiAJCX0KLQkJZHJpdmVyID0gY3VycmVudC0+c2lnbmFsLT50dHktPmRyaXZlcjsKLQkJaW5kZXggPSBjdXJyZW50LT5zaWduYWwtPnR0eS0+aW5kZXg7CisJCWRyaXZlciA9IHR0eS0+ZHJpdmVyOworCQlpbmRleCA9IHR0eS0+aW5kZXg7CiAJCWZpbHAtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsgLyogRG9uJ3QgbGV0IC9kZXYvdHR5IGJsb2NrICovCiAJCS8qIG5vY3R0eSA9IDE7ICovCiAJCWdvdG8gZ290X2RyaXZlcjsKQEAgLTI1NDcsMTcgKzI1NzMsMTYgQEAKIAkJCWZpbHAtPmZfb3AgPSAmdHR5X2ZvcHM7CiAJCWdvdG8gcmV0cnlfb3BlbjsKIAl9CisKKwltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCWlmICghbm9jdHR5ICYmCiAJICAgIGN1cnJlbnQtPnNpZ25hbC0+bGVhZGVyICYmCiAJICAgICFjdXJyZW50LT5zaWduYWwtPnR0eSAmJgotCSAgICB0dHktPnNlc3Npb24gPT0gMCkgewotCSAgICAJdGFza19sb2NrKGN1cnJlbnQpOwotCQljdXJyZW50LT5zaWduYWwtPnR0eSA9IHR0eTsKLQkJdGFza191bmxvY2soY3VycmVudCk7Ci0JCWN1cnJlbnQtPnNpZ25hbC0+dHR5X29sZF9wZ3JwID0gMDsKLQkJdHR5LT5zZXNzaW9uID0gY3VycmVudC0+c2lnbmFsLT5zZXNzaW9uOwotCQl0dHktPnBncnAgPSBwcm9jZXNzX2dyb3VwKGN1cnJlbnQpOwotCX0KKwkgICAgdHR5LT5zZXNzaW9uID09IDApCisJCV9fcHJvY19zZXRfdHR5KGN1cnJlbnQsIHR0eSk7CisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NzIsNyArMjY5Nyw3IEBACiAJaW50IHJldCA9IDA7CiAKIAl0dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKilmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaWYgKHR0eV9wYXJhbm9pYV9jaGVjayh0dHksIGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCAidHR5X3BvbGwiKSkKKwlpZiAodHR5X3BhcmFub2lhX2NoZWNrKHR0eSwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgInR0eV9wb2xsIikpCiAJCXJldHVybiAwOwogCQkKIAlsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpOwpAQCAtMjY4OCw3ICsyNzEzLDcgQEAKIAlpbnQgcmV0dmFsOwogCiAJdHR5ID0gKHN0cnVjdCB0dHlfc3RydWN0ICopZmlscC0+cHJpdmF0ZV9kYXRhOwotCWlmICh0dHlfcGFyYW5vaWFfY2hlY2sodHR5LCBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSwgInR0eV9mYXN5bmMiKSkKKwlpZiAodHR5X3BhcmFub2lhX2NoZWNrKHR0eSwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgInR0eV9mYXN5bmMiKSkKIAkJcmV0dXJuIDA7CiAJCiAJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZ0dHktPmZhc3luYyk7CkBAIC0yNzQ3LDcgKzI3NzIsNyBAQAogICoKICAqCUNvcGllcyB0aGUga2VybmVsIGlkZWEgb2YgdGhlIHdpbmRvdyBzaXplIGludG8gdGhlIHVzZXIgYnVmZmVyLgogICoKLSAqCUxvY2tpbmc6IHR0eS0+dGVybWlvc19zZW0gaXMgdGFrZW4gdG8gZW5zdXJlIHRoZSB3aW5zaXplIGRhdGEKKyAqCUxvY2tpbmc6IHR0eS0+dGVybWlvc19tdXRleCBpcyB0YWtlbiB0byBlbnN1cmUgdGhlIHdpbnNpemUgZGF0YQogICoJCWlzIGNvbnNpc3RlbnQuCiAgKi8KIApAQCAtMjc3NCw4ICsyNzk5LDggQEAKICAqCUxvY2tpbmc6CiAgKgkJQ2FsbGVkIGZ1bmN0aW9uIHVzZSB0aGUgY29uc29sZV9zZW0gaXMgdXNlZCB0byBlbnN1cmUgd2UgZG8KICAqCW5vdCB0cnkgYW5kIHJlc2l6ZSB0aGUgY29uc29sZSB0d2ljZSBhdCBvbmNlLgotICoJCVRoZSB0dHktPnRlcm1pb3Nfc2VtIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGRvdWJsZQotICoJcmVzaXplIGFuZCBnZXQgY29uZnVzZWQuIExvY2sgb3JkZXIgLSB0dHktPnRlcm1pb3Muc2VtIGJlZm9yZQorICoJCVRoZSB0dHktPnRlcm1pb3NfbXV0ZXggaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgZG91YmxlCisgKglyZXNpemUgYW5kIGdldCBjb25mdXNlZC4gTG9jayBvcmRlciAtIHR0eS0+dGVybWlvc19tdXRleCBiZWZvcmUKICAqCWNvbnNvbGUgc2VtCiAgKi8KIApAQCAtMjg4MCwyNSArMjkwNSwyOCBAQAogICoJbGVhZGVyIHRvIHNldCB0aGlzIHR0eSBhcyB0aGUgY29udHJvbGxpbmcgdHR5IGZvciB0aGUgc2Vzc2lvbi4KICAqCiAgKglMb2NraW5nOgotICoJCVRha2VzIHRhc2tsaXN0IGxvY2sgaW50ZXJuYWxseSB0byB3YWxrIHNlc3Npb25zCi0gKgkJVGFrZXMgdGFza19sb2NrKCkgd2hlbiB1cGRhdGluZyBzaWduYWwtPnR0eQogICoJCVRha2VzIHR0eV9tdXRleCgpIHRvIHByb3RlY3QgdHR5IGluc3RhbmNlCi0gKgorICoJCVRha2VzIHRhc2tsaXN0X2xvY2sgaW50ZXJuYWxseSB0byB3YWxrIHNlc3Npb25zCisgKgkJVGFrZXMgLT5zaWdsb2NrKCkgd2hlbiB1cGRhdGluZyBzaWduYWwtPnR0eQogICovCiAKIHN0YXRpYyBpbnQgdGlvY3NjdHR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBhcmcpCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCisJaW50IHJldCA9IDA7CiAJaWYgKGN1cnJlbnQtPnNpZ25hbC0+bGVhZGVyICYmCi0JICAgIChjdXJyZW50LT5zaWduYWwtPnNlc3Npb24gPT0gdHR5LT5zZXNzaW9uKSkKLQkJcmV0dXJuIDA7CisJCQkocHJvY2Vzc19zZXNzaW9uKGN1cnJlbnQpID09IHR0eS0+c2Vzc2lvbikpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCS8qCiAJICogVGhlIHByb2Nlc3MgbXVzdCBiZSBhIHNlc3Npb24gbGVhZGVyIGFuZAogCSAqIG5vdCBoYXZlIGEgY29udHJvbGxpbmcgdHR5IGFscmVhZHkuCiAJICovCi0JaWYgKCFjdXJyZW50LT5zaWduYWwtPmxlYWRlciB8fCBjdXJyZW50LT5zaWduYWwtPnR0eSkKLQkJcmV0dXJuIC1FUEVSTTsKKwlpZiAoIWN1cnJlbnQtPnNpZ25hbC0+bGVhZGVyIHx8IGN1cnJlbnQtPnNpZ25hbC0+dHR5KSB7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byB1bmxvY2s7CisJfQorCiAJaWYgKHR0eS0+c2Vzc2lvbiA+IDApIHsKIAkJLyoKIAkJICogVGhpcyB0dHkgaXMgYWxyZWFkeSB0aGUgY29udHJvbGxpbmcKQEAgLTI5MDgsMjQgKzI5MzYsMTggQEAKIAkJCS8qCiAJCQkgKiBTdGVhbCBpdCBhd2F5CiAJCQkgKi8KLQogCQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJCWRvX2VhY2hfdGFza19waWQodHR5LT5zZXNzaW9uLCBQSURUWVBFX1NJRCwgcCkgewotCQkJCXAtPnNpZ25hbC0+dHR5ID0gTlVMTDsKLQkJCX0gd2hpbGVfZWFjaF90YXNrX3BpZCh0dHktPnNlc3Npb24sIFBJRFRZUEVfU0lELCBwKTsKKwkJCXNlc3Npb25fY2xlYXJfdHR5KHR0eS0+c2Vzc2lvbik7CiAJCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCX0gZWxzZQotCQkJcmV0dXJuIC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CiAJfQotCW11dGV4X2xvY2soJnR0eV9tdXRleCk7Ci0JdGFza19sb2NrKGN1cnJlbnQpOwotCWN1cnJlbnQtPnNpZ25hbC0+dHR5ID0gdHR5OwotCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCXByb2Nfc2V0X3R0eShjdXJyZW50LCB0dHkpOwordW5sb2NrOgogCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKLQljdXJyZW50LT5zaWduYWwtPnR0eV9vbGRfcGdycCA9IDA7Ci0JdHR5LT5zZXNzaW9uID0gY3VycmVudC0+c2lnbmFsLT5zZXNzaW9uOwotCXR0eS0+cGdycCA9IHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0yOTM3LDcgKzI5NTksNyBAQAogICoJT2J0YWluIHRoZSBwcm9jZXNzIGdyb3VwIG9mIHRoZSB0dHkuIElmIHRoZXJlIGlzIG5vIHByb2Nlc3MgZ3JvdXAKICAqCXJldHVybiBhbiBlcnJvci4KICAqCi0gKglMb2NraW5nOiBub25lLiBSZWZlcmVuY2UgdG8gLT5zaWduYWwtPnR0eSBpcyBzYWZlLgorICoJTG9ja2luZzogbm9uZS4gUmVmZXJlbmNlIHRvIGN1cnJlbnQtPnNpZ25hbC0+dHR5IGlzIHNhZmUuCiAgKi8KIAogc3RhdGljIGludCB0aW9jZ3BncnAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnJlYWxfdHR5LCBwaWRfdCBfX3VzZXIgKnApCkBAIC0yOTc0LDEzICsyOTk2LDEzIEBACiAJCXJldHVybiByZXR2YWw7CiAJaWYgKCFjdXJyZW50LT5zaWduYWwtPnR0eSB8fAogCSAgICAoY3VycmVudC0+c2lnbmFsLT50dHkgIT0gcmVhbF90dHkpIHx8Ci0JICAgIChyZWFsX3R0eS0+c2Vzc2lvbiAhPSBjdXJyZW50LT5zaWduYWwtPnNlc3Npb24pKQorCSAgICAocmVhbF90dHktPnNlc3Npb24gIT0gcHJvY2Vzc19zZXNzaW9uKGN1cnJlbnQpKSkKIAkJcmV0dXJuIC1FTk9UVFk7CiAJaWYgKGdldF91c2VyKHBncnAsIHApKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAocGdycCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChzZXNzaW9uX29mX3BncnAocGdycCkgIT0gY3VycmVudC0+c2lnbmFsLT5zZXNzaW9uKQorCWlmIChzZXNzaW9uX29mX3BncnAocGdycCkgIT0gcHJvY2Vzc19zZXNzaW9uKGN1cnJlbnQpKQogCQlyZXR1cm4gLUVQRVJNOwogCXJlYWxfdHR5LT5wZ3JwID0gcGdycDsKIAlyZXR1cm4gMDsKQEAgLTI5OTUsNyArMzAxNyw3IEBACiAgKglPYnRhaW4gdGhlIHNlc3Npb24gaWQgb2YgdGhlIHR0eS4gSWYgdGhlcmUgaXMgbm8gc2Vzc2lvbgogICoJcmV0dXJuIGFuIGVycm9yLgogICoKLSAqCUxvY2tpbmc6IG5vbmUuIFJlZmVyZW5jZSB0byAtPnNpZ25hbC0+dHR5IGlzIHNhZmUuCisgKglMb2NraW5nOiBub25lLiBSZWZlcmVuY2UgdG8gY3VycmVudC0+c2lnbmFsLT50dHkgaXMgc2FmZS4KICAqLwogCiBzdGF0aWMgaW50IHRpb2Nnc2lkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfc3RydWN0ICpyZWFsX3R0eSwgcGlkX3QgX191c2VyICpwKQpAQCAtMzIxNCwxNCArMzIzNiwxMSBAQAogCQkJY2xlYXJfYml0KFRUWV9FWENMVVNJVkUsICZ0dHktPmZsYWdzKTsKIAkJCXJldHVybiAwOwogCQljYXNlIFRJT0NOT1RUWToKLQkJCS8qIEZJWE1FOiB0YWtzIGxvY2sgb3IgdHR5X211dGV4ID8gKi8KIAkJCWlmIChjdXJyZW50LT5zaWduYWwtPnR0eSAhPSB0dHkpCiAJCQkJcmV0dXJuIC1FTk9UVFk7CiAJCQlpZiAoY3VycmVudC0+c2lnbmFsLT5sZWFkZXIpCiAJCQkJZGlzYXNzb2NpYXRlX2N0dHkoMCk7Ci0JCQl0YXNrX2xvY2soY3VycmVudCk7Ci0JCQljdXJyZW50LT5zaWduYWwtPnR0eSA9IE5VTEw7Ci0JCQl0YXNrX3VubG9jayhjdXJyZW50KTsKKwkJCXByb2NfY2xlYXJfdHR5KGN1cnJlbnQpOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgVElPQ1NDVFRZOgogCQkJcmV0dXJuIHRpb2NzY3R0eSh0dHksIGFyZyk7CkBAIC0zMzE2LDE4ICszMzM1LDEzIEBACiAJaW50IHNlc3Npb247CiAJaW50CQlpOwogCXN0cnVjdCBmaWxlCSpmaWxwOwotCXN0cnVjdCB0dHlfbGRpc2MgKmRpc2M7CiAJc3RydWN0IGZkdGFibGUgKmZkdDsKIAkKIAlpZiAoIXR0eSkKIAkJcmV0dXJuOwotCXNlc3Npb24gID0gdHR5LT5zZXNzaW9uOworCXNlc3Npb24gPSB0dHktPnNlc3Npb247CiAJCi0JLyogV2UgZG9uJ3Qgd2FudCBhbiBsZGlzYyBzd2l0Y2ggZHVyaW5nIHRoaXMgKi8KLQlkaXNjID0gdHR5X2xkaXNjX3JlZih0dHkpOwotCWlmIChkaXNjICYmIGRpc2MtPmZsdXNoX2J1ZmZlcikKLQkJZGlzYy0+Zmx1c2hfYnVmZmVyKHR0eSk7Ci0JdHR5X2xkaXNjX2RlcmVmKGRpc2MpOworCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCiAJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCiAJCXR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIodHR5KTsKQEAgLTMzMzYsNyArMzM1MCw3IEBACiAJLyogS2lsbCB0aGUgZW50aXJlIHNlc3Npb24gKi8KIAlkb19lYWNoX3Rhc2tfcGlkKHNlc3Npb24sIFBJRFRZUEVfU0lELCBwKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiU0FLOiBraWxsZWQgcHJvY2VzcyAlZCIKLQkJCSIgKCVzKTogcC0+c2lnbmFsLT5zZXNzaW9uPT10dHktPnNlc3Npb25cbiIsCisJCQkiICglcyk6IHByb2Nlc3Nfc2Vzc2lvbihwKT09dHR5LT5zZXNzaW9uXG4iLAogCQkJcC0+cGlkLCBwLT5jb21tKTsKIAkJc2VuZF9zaWcoU0lHS0lMTCwgcCwgMSk7CiAJfSB3aGlsZV9lYWNoX3Rhc2tfcGlkKHNlc3Npb24sIFBJRFRZUEVfU0lELCBwKTsKQEAgLTMzNDYsNyArMzM2MCw3IEBACiAJZG9fZWFjaF90aHJlYWQoZywgcCkgewogCQlpZiAocC0+c2lnbmFsLT50dHkgPT0gdHR5KSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNBSzoga2lsbGVkIHByb2Nlc3MgJWQiCi0JCQkgICAgIiAoJXMpOiBwLT5zaWduYWwtPnNlc3Npb249PXR0eS0+c2Vzc2lvblxuIiwKKwkJCSAgICAiICglcyk6IHByb2Nlc3Nfc2Vzc2lvbihwKT09dHR5LT5zZXNzaW9uXG4iLAogCQkJICAgIHAtPnBpZCwgcC0+Y29tbSk7CiAJCQlzZW5kX3NpZyhTSUdLSUxMLCBwLCAxKTsKIAkJCWNvbnRpbnVlOwpAQCAtMzQ1Niw4NCArMzQ3MCw2IEBACiAJdHR5X2xkaXNjX2RlcmVmKGRpc2MpOwogfQogCi0vKgotICogUm91dGluZSB3aGljaCByZXR1cm5zIHRoZSBiYXVkIHJhdGUgb2YgdGhlIHR0eQotICoKLSAqIE5vdGUgdGhhdCB0aGUgYmF1ZF90YWJsZSBuZWVkcyB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUKLSAqIGluY2x1ZGUvYXNtL3Rlcm1iaXRzLmggZmlsZS4KLSAqLwotc3RhdGljIGludCBiYXVkX3RhYmxlW10gPSB7Ci0JMCwgNTAsIDc1LCAxMTAsIDEzNCwgMTUwLCAyMDAsIDMwMCwgNjAwLCAxMjAwLCAxODAwLCAyNDAwLCA0ODAwLAotCTk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCwgMjMwNDAwLCA0NjA4MDAsCi0jaWZkZWYgX19zcGFyY19fCi0JNzY4MDAsIDE1MzYwMCwgMzA3MjAwLCA2MTQ0MDAsIDkyMTYwMAotI2Vsc2UKLQk1MDAwMDAsIDU3NjAwMCwgOTIxNjAwLCAxMDAwMDAwLCAxMTUyMDAwLCAxNTAwMDAwLCAyMDAwMDAwLAotCTI1MDAwMDAsIDMwMDAwMDAsIDM1MDAwMDAsIDQwMDAwMDAKLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBuX2JhdWRfdGFibGUgPSBBUlJBWV9TSVpFKGJhdWRfdGFibGUpOwotCi0vKioKLSAqCXR0eV90ZXJtaW9zX2JhdWRfcmF0ZQotICoJQHRlcm1pb3M6IHRlcm1pb3Mgc3RydWN0dXJlCi0gKgotICoJQ29udmVydCB0ZXJtaW9zIGJhdWQgcmF0ZSBkYXRhIGludG8gYSBzcGVlZC4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCi0gKgl3aXRoIHRoZSB0ZXJtaW9zIGxvY2sgaGVsZCBpZiB0aGlzIHRlcm1pb3MgaXMgYSB0ZXJtaW5hbCB0ZXJtaW9zCi0gKglzdHJ1Y3R1cmUuIE1heSBjaGFuZ2UgdGhlIHRlcm1pb3MgZGF0YS4KLSAqCi0gKglMb2NraW5nOiBub25lCi0gKi8KLSAKLWludCB0dHlfdGVybWlvc19iYXVkX3JhdGUoc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MpCi17Ci0JdW5zaWduZWQgaW50IGNiYXVkOwotCQotCWNiYXVkID0gdGVybWlvcy0+Y19jZmxhZyAmIENCQVVEOwotCi0JaWYgKGNiYXVkICYgQ0JBVURFWCkgewotCQljYmF1ZCAmPSB+Q0JBVURFWDsKLQotCQlpZiAoY2JhdWQgPCAxIHx8IGNiYXVkICsgMTUgPiBuX2JhdWRfdGFibGUpCi0JCQl0ZXJtaW9zLT5jX2NmbGFnICY9IH5DQkFVREVYOwotCQllbHNlCi0JCQljYmF1ZCArPSAxNTsKLQl9Ci0JcmV0dXJuIGJhdWRfdGFibGVbY2JhdWRdOwotfQotCi1FWFBPUlRfU1lNQk9MKHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSk7Ci0KLS8qKgotICoJdHR5X2dldF9iYXVkX3JhdGUJLQlnZXQgdHR5IGJpdCByYXRlcwotICoJQHR0eTogdHR5IHRvIHF1ZXJ5Ci0gKgotICoJUmV0dXJucyB0aGUgYmF1ZCByYXRlIGFzIGFuIGludGVnZXIgZm9yIHRoaXMgdGVybWluYWwuIFRoZQotICoJdGVybWlvcyBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB0aGUgdGVybWluYWwgYml0Ci0gKglmbGFncyBtYXkgYmUgdXBkYXRlZC4KLSAqCi0gKglMb2NraW5nOiBub25lCi0gKi8KLSAKLWludCB0dHlfZ2V0X2JhdWRfcmF0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCWludCBiYXVkID0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKHR0eS0+dGVybWlvcyk7Ci0KLQlpZiAoYmF1ZCA9PSAzODQwMCAmJiB0dHktPmFsdF9zcGVlZCkgewotCQlpZiAoIXR0eS0+d2FybmVkKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJVc2Ugb2Ygc2V0c2VyaWFsL3NldHJvY2tldCB0byAiCi0JCQkJCSAgICAic2V0IFNQRF8qIGZsYWdzIGlzIGRlcHJlY2F0ZWRcbiIpOwotCQkJdHR5LT53YXJuZWQgPSAxOwotCQl9Ci0JCWJhdWQgPSB0dHktPmFsdF9zcGVlZDsKLQl9Ci0JCi0JcmV0dXJuIGJhdWQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0wodHR5X2dldF9iYXVkX3JhdGUpOwotCiAvKioKICAqCXR0eV9mbGlwX2J1ZmZlcl9wdXNoCS0JdGVybWluYWwKICAqCUB0dHk6IHR0eSB0byBwdXNoCkBAIC0zNzU2LDggKzM2OTIsOCBAQAogCiAJaWYgKHApIHsKIAkJZHJpdmVyLT50dHlzID0gKHN0cnVjdCB0dHlfc3RydWN0ICoqKXA7Ci0JCWRyaXZlci0+dGVybWlvcyA9IChzdHJ1Y3QgdGVybWlvcyAqKikocCArIGRyaXZlci0+bnVtKTsKLQkJZHJpdmVyLT50ZXJtaW9zX2xvY2tlZCA9IChzdHJ1Y3QgdGVybWlvcyAqKikocCArIGRyaXZlci0+bnVtICogMik7CisJCWRyaXZlci0+dGVybWlvcyA9IChzdHJ1Y3Qga3Rlcm1pb3MgKiopKHAgKyBkcml2ZXItPm51bSk7CisJCWRyaXZlci0+dGVybWlvc19sb2NrZWQgPSAoc3RydWN0IGt0ZXJtaW9zICoqKShwICsgZHJpdmVyLT5udW0gKiAyKTsKIAl9IGVsc2UgewogCQlkcml2ZXItPnR0eXMgPSBOVUxMOwogCQlkcml2ZXItPnRlcm1pb3MgPSBOVUxMOwpAQCAtMzc5Niw3ICszNzMyLDcgQEAKIGludCB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgdGVybWlvcyAqdHA7CisJc3RydWN0IGt0ZXJtaW9zICp0cDsKIAl2b2lkICpwOwogCiAJaWYgKGRyaXZlci0+cmVmY291bnQpCkBAIC0zODM0LDkgKzM3NzAsNTMgQEAKIAljZGV2X2RlbCgmZHJpdmVyLT5jZGV2KTsKIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTCh0dHlfdW5yZWdpc3Rlcl9kcml2ZXIpOwogCitkZXZfdCB0dHlfZGV2bnVtKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJcmV0dXJuIE1LREVWKHR0eS0+ZHJpdmVyLT5tYWpvciwgdHR5LT5kcml2ZXItPm1pbm9yX3N0YXJ0KSArIHR0eS0+aW5kZXg7Cit9CitFWFBPUlRfU1lNQk9MKHR0eV9kZXZudW0pOworCit2b2lkIHByb2NfY2xlYXJfdHR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlzcGluX2xvY2tfaXJxKCZwLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlwLT5zaWduYWwtPnR0eSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxKCZwLT5zaWdoYW5kLT5zaWdsb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wocHJvY19jbGVhcl90dHkpOworCit2b2lkIF9fcHJvY19zZXRfdHR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCWlmICh0dHkpIHsKKwkJdHR5LT5zZXNzaW9uID0gcHJvY2Vzc19zZXNzaW9uKHRzayk7CisJCXR0eS0+cGdycCA9IHByb2Nlc3NfZ3JvdXAodHNrKTsKKwl9CisJdHNrLT5zaWduYWwtPnR0eSA9IHR0eTsKKwl0c2stPnNpZ25hbC0+dHR5X29sZF9wZ3JwID0gMDsKK30KKwordm9pZCBwcm9jX3NldF90dHkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlfX3Byb2Nfc2V0X3R0eSh0c2ssIHR0eSk7CisJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworfQorCitzdHJ1Y3QgdHR5X3N0cnVjdCAqZ2V0X2N1cnJlbnRfdHR5KHZvaWQpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlXQVJOX09OX09OQ0UoIW11dGV4X2lzX2xvY2tlZCgmdHR5X211dGV4KSk7CisJdHR5ID0gY3VycmVudC0+c2lnbmFsLT50dHk7CisJLyoKKwkgKiBzZXNzaW9uLT50dHkgY2FuIGJlIGNoYW5nZWQvY2xlYXJlZCBmcm9tIHVuZGVyIHVzLCBtYWtlIHN1cmUgd2UKKwkgKiBpc3N1ZSB0aGUgbG9hZC4gVGhlIG9idGFpbmVkIHBvaW50ZXIsIHdoZW4gbm90IE5VTEwsIGlzIHZhbGlkIGFzCisJICogbG9uZyBhcyB3ZSBob2xkIHR0eV9tdXRleC4KKwkgKi8KKwliYXJyaWVyKCk7CisJcmV0dXJuIHR0eTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGdldF9jdXJyZW50X3R0eSk7CiAKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBjb25zb2xlIGRldmljZS4gVGhpcyBpcyBjYWxsZWQgKmVhcmx5Kiwgc28KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYyBiL2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYwppbmRleCAzYjZmYTdiLi5kZWU0N2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCkBAIC0zNiw2ICszNiw3IEBACiAjZGVmaW5lIFRFUk1JT1NfRkxVU0gJMQogI2RlZmluZSBURVJNSU9TX1dBSVQJMgogI2RlZmluZSBURVJNSU9TX1RFUk1JTwk0CisjZGVmaW5lIFRFUk1JT1NfT0xECTgKIAogCiAvKioKQEAgLTg0LDkgKzg1LDkgQEAKIAogRVhQT1JUX1NZTUJPTCh0dHlfd2FpdF91bnRpbF9zZW50KTsKIAotc3RhdGljIHZvaWQgdW5zZXRfbG9ja2VkX3Rlcm1pb3Moc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCQkJIHN0cnVjdCB0ZXJtaW9zICpvbGQsCi0JCQkJIHN0cnVjdCB0ZXJtaW9zICpsb2NrZWQpCitzdGF0aWMgdm9pZCB1bnNldF9sb2NrZWRfdGVybWlvcyhzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkJIHN0cnVjdCBrdGVybWlvcyAqb2xkLAorCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKmxvY2tlZCkKIHsKIAlpbnQJaTsKIAkKQEAgLTEwNSw4ICsxMDYsMjA0IEBACiAJZm9yIChpPTA7IGkgPCBOQ0NTOyBpKyspCiAJCXRlcm1pb3MtPmNfY2NbaV0gPSBsb2NrZWQtPmNfY2NbaV0gPwogCQkJb2xkLT5jX2NjW2ldIDogdGVybWlvcy0+Y19jY1tpXTsKKwkvKiBGSVhNRTogV2hhdCBzaG91bGQgd2UgZG8gZm9yIGkvb3NwZWVkICovCiB9CiAKKy8qCisgKiBSb3V0aW5lIHdoaWNoIHJldHVybnMgdGhlIGJhdWQgcmF0ZSBvZiB0aGUgdHR5CisgKgorICogTm90ZSB0aGF0IHRoZSBiYXVkX3RhYmxlIG5lZWRzIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZQorICogaW5jbHVkZS9hc20vdGVybWJpdHMuaCBmaWxlLgorICovCitzdGF0aWMgY29uc3Qgc3BlZWRfdCBiYXVkX3RhYmxlW10gPSB7CisJMCwgNTAsIDc1LCAxMTAsIDEzNCwgMTUwLCAyMDAsIDMwMCwgNjAwLCAxMjAwLCAxODAwLCAyNDAwLCA0ODAwLAorCTk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCwgMjMwNDAwLCA0NjA4MDAsCisjaWZkZWYgX19zcGFyY19fCisJNzY4MDAsIDE1MzYwMCwgMzA3MjAwLCA2MTQ0MDAsIDkyMTYwMAorI2Vsc2UKKwk1MDAwMDAsIDU3NjAwMCwgOTIxNjAwLCAxMDAwMDAwLCAxMTUyMDAwLCAxNTAwMDAwLCAyMDAwMDAwLAorCTI1MDAwMDAsIDMwMDAwMDAsIDM1MDAwMDAsIDQwMDAwMDAKKyNlbmRpZgorfTsKKworI2lmbmRlZiBfX3NwYXJjX18KK3N0YXRpYyBjb25zdCB0Y2ZsYWdfdCBiYXVkX2JpdHNbXSA9IHsKKwlCMCwgQjUwLCBCNzUsIEIxMTAsIEIxMzQsIEIxNTAsIEIyMDAsIEIzMDAsIEI2MDAsCisJQjEyMDAsIEIxODAwLCBCMjQwMCwgQjQ4MDAsIEI5NjAwLCBCMTkyMDAsIEIzODQwMCwKKwlCNTc2MDAsIEIxMTUyMDAsIEIyMzA0MDAsIEI0NjA4MDAsIEI1MDAwMDAsIEI1NzYwMDAsCisJQjkyMTYwMCwgQjEwMDAwMDAsIEIxMTUyMDAwLCBCMTUwMDAwMCwgQjIwMDAwMDAsIEIyNTAwMDAwLAorCUIzMDAwMDAwLCBCMzUwMDAwMCwgQjQwMDAwMDAKK307CisjZWxzZQorc3RhdGljIGNvbnN0IHRjZmxhZ190IGJhdWRfYml0c1tdID0geworCUIwLCBCNTAsIEI3NSwgQjExMCwgQjEzNCwgQjE1MCwgQjIwMCwgQjMwMCwgQjYwMCwKKwlCMTIwMCwgQjE4MDAsIEIyNDAwLCBCNDgwMCwgQjk2MDAsIEIxOTIwMCwgQjM4NDAwLAorCUI1NzYwMCwgQjExNTIwMCwgQjIzMDQwMCwgQjQ2MDgwMCwgQjc2ODAwLCBCMTUzNjAwLAorCUIzMDcyMDAsIEI2MTQ0MDAsIEI5MjE2MDAKK307CisjZW5kaWYKKworc3RhdGljIGludCBuX2JhdWRfdGFibGUgPSBBUlJBWV9TSVpFKGJhdWRfdGFibGUpOworCisvKioKKyAqCXR0eV90ZXJtaW9zX2JhdWRfcmF0ZQorICoJQHRlcm1pb3M6IHRlcm1pb3Mgc3RydWN0dXJlCisgKgorICoJQ29udmVydCB0ZXJtaW9zIGJhdWQgcmF0ZSBkYXRhIGludG8gYSBzcGVlZC4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCisgKgl3aXRoIHRoZSB0ZXJtaW9zIGxvY2sgaGVsZCBpZiB0aGlzIHRlcm1pb3MgaXMgYSB0ZXJtaW5hbCB0ZXJtaW9zCisgKglzdHJ1Y3R1cmUuIE1heSBjaGFuZ2UgdGhlIHRlcm1pb3MgZGF0YS4gRGV2aWNlIGRyaXZlcnMgY2FuIGNhbGwgdGhpcworICoJZnVuY3Rpb24gYnV0IHNob3VsZCB1c2UgLT5jX1tpb11zcGVlZCBkaXJlY3RseSBhcyB0aGV5IGFyZSB1cGRhdGVkLgorICoKKyAqCUxvY2tpbmc6IG5vbmUKKyAqLworCitzcGVlZF90IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MpCit7CisJdW5zaWduZWQgaW50IGNiYXVkOworCisJY2JhdWQgPSB0ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQ7CisKKyNpZmRlZiBCT1RIRVIKKwkvKiBNYWdpYyB0b2tlbiBmb3IgYXJiaXRhcnkgc3BlZWQgdmlhIGNfaXNwZWVkL2Nfb3NwZWVkICovCisJaWYgKGNiYXVkID09IEJPVEhFUikKKwkJcmV0dXJuIHRlcm1pb3MtPmNfb3NwZWVkOworI2VuZGlmCisJaWYgKGNiYXVkICYgQ0JBVURFWCkgeworCQljYmF1ZCAmPSB+Q0JBVURFWDsKKworCQlpZiAoY2JhdWQgPCAxIHx8IGNiYXVkICsgMTUgPiBuX2JhdWRfdGFibGUpCisJCQl0ZXJtaW9zLT5jX2NmbGFnICY9IH5DQkFVREVYOworCQllbHNlCisJCQljYmF1ZCArPSAxNTsKKwl9CisJcmV0dXJuIGJhdWRfdGFibGVbY2JhdWRdOworfQorCitFWFBPUlRfU1lNQk9MKHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSk7CisKKy8qKgorICoJdHR5X3Rlcm1pb3NfaW5wdXRfYmF1ZF9yYXRlCisgKglAdGVybWlvczogdGVybWlvcyBzdHJ1Y3R1cmUKKyAqCisgKglDb252ZXJ0IHRlcm1pb3MgYmF1ZCByYXRlIGRhdGEgaW50byBhIHNwZWVkLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQKKyAqCXdpdGggdGhlIHRlcm1pb3MgbG9jayBoZWxkIGlmIHRoaXMgdGVybWlvcyBpcyBhIHRlcm1pbmFsIHRlcm1pb3MKKyAqCXN0cnVjdHVyZS4gTWF5IGNoYW5nZSB0aGUgdGVybWlvcyBkYXRhLiBEZXZpY2UgZHJpdmVycyBjYW4gY2FsbCB0aGlzCisgKglmdW5jdGlvbiBidXQgc2hvdWxkIHVzZSAtPmNfW2lvXXNwZWVkIGRpcmVjdGx5IGFzIHRoZXkgYXJlIHVwZGF0ZWQuCisgKgorICoJTG9ja2luZzogbm9uZQorICovCisKK3NwZWVkX3QgdHR5X3Rlcm1pb3NfaW5wdXRfYmF1ZF9yYXRlKHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcykKK3sKKyNpZmRlZiBJQlNISUZUCisJdW5zaWduZWQgaW50IGNiYXVkID0gKHRlcm1pb3MtPmNfY2ZsYWcgPj4gSUJTSElGVCkgJiBDQkFVRDsKKworCWlmIChjYmF1ZCA9PSBCMCkKKwkJcmV0dXJuIHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSh0ZXJtaW9zKTsKKworCS8qIE1hZ2ljIHRva2VuIGZvciBhcmJpdGFyeSBzcGVlZCB2aWEgY19pc3BlZWQqLworCWlmIChjYmF1ZCA9PSBCT1RIRVIpCisJCXJldHVybiB0ZXJtaW9zLT5jX2lzcGVlZDsKKworCWlmIChjYmF1ZCAmIENCQVVERVgpIHsKKwkJY2JhdWQgJj0gfkNCQVVERVg7CisKKwkJaWYgKGNiYXVkIDwgMSB8fCBjYmF1ZCArIDE1ID4gbl9iYXVkX3RhYmxlKQorCQkJdGVybWlvcy0+Y19jZmxhZyAmPSB+KENCQVVERVggPDwgSUJTSElGVCk7CisJCWVsc2UKKwkJCWNiYXVkICs9IDE1OworCX0KKwlyZXR1cm4gYmF1ZF90YWJsZVtjYmF1ZF07CisjZWxzZQorCXJldHVybiB0dHlfdGVybWlvc19iYXVkX3JhdGUodGVybWlvcyk7CisjZW5kaWYKK30KKworRVhQT1JUX1NZTUJPTCh0dHlfdGVybWlvc19pbnB1dF9iYXVkX3JhdGUpOworCisjaWZkZWYgQk9USEVSCisKKy8qKgorICoJdHR5X3Rlcm1pb3NfZW5jb2RlX2JhdWRfcmF0ZQorICoJQHRlcm1pb3M6IHRlcm1pb3Mgc3RydWN0dXJlCisgKglAaXNwZWVkOiBpbnB1dCBzcGVlZAorICoJQG9zcGVlZDogb3V0cHV0IHNwZWVkCisgKgorICoJRW5jb2RlIHRoZSBzcGVlZHMgc2V0IGludG8gdGhlIHBhc3NlZCB0ZXJtaW9zIHN0cnVjdHVyZS4gVGhpcyBpcworICoJdXNlZCBhcyBhIGxpYnJhcnkgaGVscGVyIGZvciBkcml2ZXJzIG9zIHRoYXQgdGhleSBjYW4gcmVwb3J0IGJhY2sKKyAqCXRoZSBhY3R1YWwgc3BlZWQgc2VsZWN0ZWQgd2hlbiBpdCBkaWZmZXJzIGZyb20gdGhlIHNwZWVkIHJlcXVlc3RlZAorICoKKyAqCUZvciBub3cgaW5wdXQgYW5kIG91dHB1dCBzcGVlZCBtdXN0IGFncmVlLgorICoKKyAqCUxvY2tpbmc6IENhbGxlciBzaG91bGQgaG9sZCB0ZXJtaW9zIGxvY2suIFRoaXMgaXMgYWxyZWFkeSBoZWxkCisgKgl3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBkcml2ZXIgdGVybWlvcyBoYW5kbGVyLgorICovCisKK3ZvaWQgdHR5X3Rlcm1pb3NfZW5jb2RlX2JhdWRfcmF0ZShzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsIHNwZWVkX3QgaWJhdWQsIHNwZWVkX3Qgb2JhdWQpCit7CisJaW50IGkgPSAwOworCWludCBpZm91bmQgPSAwLCBvZm91bmQgPSAwOworCisJdGVybWlvcy0+Y19pc3BlZWQgPSBpYmF1ZDsKKwl0ZXJtaW9zLT5jX29zcGVlZCA9IG9iYXVkOworCisJdGVybWlvcy0+Y19jZmxhZyAmPSB+Q0JBVUQ7CisJLyogSWRlbnRpY2FsIHNwZWVkIG1lYW5zIG5vIGlucHV0IGVuY29kaW5nIChpZSBCMCA8PCBJQlNISUZUKSovCisJaWYgKHRlcm1pb3MtPmNfaXNwZWVkID09IHRlcm1pb3MtPmNfb3NwZWVkKQorCQlpZm91bmQgPSAxOworCisJZG8geworCQlpZiAob2JhdWQgPT0gYmF1ZF90YWJsZVtpXSkgeworCQkJdGVybWlvcy0+Y19jZmxhZyB8PSBiYXVkX2JpdHNbaV07CisJCQlvZm91bmQgPSAxOworCQkJLyogU28gdGhhdCBpZiBpYmF1ZCA9PSBvYmF1ZCB3ZSBkb24ndCBzZXQgaXQgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpYmF1ZCA9PSBiYXVkX3RhYmxlW2ldKSB7CisJCQl0ZXJtaW9zLT5jX2NmbGFnIHw9IChiYXVkX2JpdHNbaV0gPDwgSUJTSElGVCk7CisJCQlpZm91bmQgPSAxOworCQl9CisJfQorCXdoaWxlKCsraSA8IG5fYmF1ZF90YWJsZSk7CisJaWYgKCFvZm91bmQpCisJCXRlcm1pb3MtPmNfY2ZsYWcgfD0gQk9USEVSOworCWlmICghaWZvdW5kKQorCQl0ZXJtaW9zLT5jX2NmbGFnIHw9IChCT1RIRVIgPDwgSUJTSElGVCk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHR0eV90ZXJtaW9zX2VuY29kZV9iYXVkX3JhdGUpOworCisjZW5kaWYKKworLyoqCisgKgl0dHlfZ2V0X2JhdWRfcmF0ZQktCWdldCB0dHkgYml0IHJhdGVzCisgKglAdHR5OiB0dHkgdG8gcXVlcnkKKyAqCisgKglSZXR1cm5zIHRoZSBiYXVkIHJhdGUgYXMgYW4gaW50ZWdlciBmb3IgdGhpcyB0ZXJtaW5hbC4gVGhlCisgKgl0ZXJtaW9zIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHRoZSB0ZXJtaW5hbCBiaXQKKyAqCWZsYWdzIG1heSBiZSB1cGRhdGVkLgorICoKKyAqCUxvY2tpbmc6IG5vbmUKKyAqLworCitzcGVlZF90IHR0eV9nZXRfYmF1ZF9yYXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3BlZWRfdCBiYXVkID0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKHR0eS0+dGVybWlvcyk7CisKKwlpZiAoYmF1ZCA9PSAzODQwMCAmJiB0dHktPmFsdF9zcGVlZCkgeworCQlpZiAoIXR0eS0+d2FybmVkKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVc2Ugb2Ygc2V0c2VyaWFsL3NldHJvY2tldCB0byAiCisJCQkJCSAgICAic2V0IFNQRF8qIGZsYWdzIGlzIGRlcHJlY2F0ZWRcbiIpOworCQkJdHR5LT53YXJuZWQgPSAxOworCQl9CisJCWJhdWQgPSB0dHktPmFsdF9zcGVlZDsKKwl9CisKKwlyZXR1cm4gYmF1ZDsKK30KKworRVhQT1JUX1NZTUJPTCh0dHlfZ2V0X2JhdWRfcmF0ZSk7CisKIC8qKgogICoJY2hhbmdlX3Rlcm1pb3MJCS0JdXBkYXRlIHRlcm1pb3MgdmFsdWVzCiAgKglAdHR5OiB0dHkgdG8gdXBkYXRlCkBAIC0xMTksMTAgKzMxNiwxMCBAQAogICoJTG9ja2luZzogdGVybWlvc19zZW0KICAqLwogCi1zdGF0aWMgdm9pZCBjaGFuZ2VfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IHRlcm1pb3MgKiBuZXdfdGVybWlvcykKK3N0YXRpYyB2b2lkIGNoYW5nZV90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBuZXdfdGVybWlvcykKIHsKIAlpbnQgY2Fub25fY2hhbmdlOwotCXN0cnVjdCB0ZXJtaW9zIG9sZF90ZXJtaW9zID0gKnR0eS0+dGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3Mgb2xkX3Rlcm1pb3MgPSAqdHR5LT50ZXJtaW9zOwogCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCQogCS8qCkBAIC0xOTUsMjMgKzM5MiwzOSBAQAogCiBzdGF0aWMgaW50IHNldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCB2b2lkIF9fdXNlciAqYXJnLCBpbnQgb3B0KQogewotCXN0cnVjdCB0ZXJtaW9zIHRtcF90ZXJtaW9zOworCXN0cnVjdCBrdGVybWlvcyB0bXBfdGVybWlvczsKIAlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKIAlpbnQgcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwogCiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAorCW1lbWNweSgmdG1wX3Rlcm1pb3MsIHR0eS0+dGVybWlvcywgc2l6ZW9mKHN0cnVjdCBrdGVybWlvcykpOworCiAJaWYgKG9wdCAmIFRFUk1JT1NfVEVSTUlPKSB7Ci0JCW1lbWNweSgmdG1wX3Rlcm1pb3MsIHR0eS0+dGVybWlvcywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSk7CiAJCWlmICh1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcygmdG1wX3Rlcm1pb3MsCiAJCQkJCQkoc3RydWN0IHRlcm1pbyBfX3VzZXIgKilhcmcpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJaWYgKHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcygmdG1wX3Rlcm1pb3MsCisjaWZkZWYgVENHRVRTMgorCX0gZWxzZSBpZiAob3B0ICYgVEVSTUlPU19PTEQpIHsKKwkJaWYgKHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvc18xKCZ0bXBfdGVybWlvcywKIAkJCQkJCShzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJaWYgKHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcygmdG1wX3Rlcm1pb3MsCisJCQkJCQkoc3RydWN0IHRlcm1pb3MyIF9fdXNlciAqKWFyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CisjZWxzZQorCX0gZWxzZSBpZiAodXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKCZ0bXBfdGVybWlvcywKKwkJCQkJKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZykpCisJCXJldHVybiAtRUZBVUxUOworI2VuZGlmCisKKwkvKiBJZiBvbGQgc3R5bGUgQmZvbyB2YWx1ZXMgYXJlIHVzZWQgdGhlbiBsb2FkIGNfaXNwZWVkL2Nfb3NwZWVkIHdpdGggdGhlIHJlYWwgc3BlZWQKKwkgICBzbyBpdHMgdW5jb25kaXRpb25hbGx5IHVzYWJsZSAqLworCXRtcF90ZXJtaW9zLmNfaXNwZWVkID0gdHR5X3Rlcm1pb3NfaW5wdXRfYmF1ZF9yYXRlKCZ0bXBfdGVybWlvcyk7CisJdG1wX3Rlcm1pb3MuY19vc3BlZWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUoJnRtcF90ZXJtaW9zKTsKIAogCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOwogCQpAQCAtMjg2LDggKzQ5OSw4IEBACiAJc3RydWN0IHNndHR5YiB0bXA7CiAKIAltdXRleF9sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOwotCXRtcC5zZ19pc3BlZWQgPSAwOwotCXRtcC5zZ19vc3BlZWQgPSAwOworCXRtcC5zZ19pc3BlZWQgPSB0dHktPnRlcm1pb3MtPmNfaXNwZWVkOworCXRtcC5zZ19vc3BlZWQgPSB0dHktPnRlcm1pb3MtPmNfb3NwZWVkOwogCXRtcC5zZ19lcmFzZSA9IHR0eS0+dGVybWlvcy0+Y19jY1tWRVJBU0VdOwogCXRtcC5zZ19raWxsID0gdHR5LT50ZXJtaW9zLT5jX2NjW1ZLSUxMXTsKIAl0bXAuc2dfZmxhZ3MgPSBnZXRfc2dmbGFncyh0dHkpOwpAQCAtMjk2LDcgKzUwOSw3IEBACiAJcmV0dXJuIGNvcHlfdG9fdXNlcihzZ3R0eWIsICZ0bXAsIHNpemVvZih0bXApKSA/IC1FRkFVTFQgOiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc2dmbGFncyhzdHJ1Y3QgdGVybWlvcyAqIHRlcm1pb3MsIGludCBmbGFncykKK3N0YXRpYyB2b2lkIHNldF9zZ2ZsYWdzKHN0cnVjdCBrdGVybWlvcyAqIHRlcm1pb3MsIGludCBmbGFncykKIHsKIAl0ZXJtaW9zLT5jX2lmbGFnID0gSUNSTkwgfCBJWE9OOwogCXRlcm1pb3MtPmNfb2ZsYWcgPSAwOwpAQCAtMzM3LDcgKzU1MCw3IEBACiB7CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3Qgc2d0dHliIHRtcDsKLQlzdHJ1Y3QgdGVybWlvcyB0ZXJtaW9zOworCXN0cnVjdCBrdGVybWlvcyB0ZXJtaW9zOwogCiAJcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwogCWlmIChyZXR2YWwpCkBAIC0zNTEsNiArNTY0LDEwIEBACiAJdGVybWlvcy5jX2NjW1ZFUkFTRV0gPSB0bXAuc2dfZXJhc2U7CiAJdGVybWlvcy5jX2NjW1ZLSUxMXSA9IHRtcC5zZ19raWxsOwogCXNldF9zZ2ZsYWdzKCZ0ZXJtaW9zLCB0bXAuc2dfZmxhZ3MpOworCS8qIFRyeSBhbmQgZW5jb2RlIGludG8gQmZvbyBmb3JtYXQgKi8KKyNpZmRlZiBCT1RIRVIKKwl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKCZ0ZXJtaW9zLCB0ZXJtaW9zLmNfaXNwZWVkLCB0ZXJtaW9zLmNfb3NwZWVkKTsKKyNlbmRpZgogCW11dGV4X3VubG9jaygmdHR5LT50ZXJtaW9zX211dGV4KTsKIAljaGFuZ2VfdGVybWlvcyh0dHksICZ0ZXJtaW9zKTsKIAlyZXR1cm4gMDsKQEAgLTQ4MSwxNiArNjk4LDMzIEBACiAJCWNhc2UgVElPQ1NMVEM6CiAJCQlyZXR1cm4gc2V0X2x0Y2hhcnMocmVhbF90dHksIHApOwogI2VuZGlmCisJCWNhc2UgVENTRVRTRjoKKwkJCXJldHVybiBzZXRfdGVybWlvcyhyZWFsX3R0eSwgcCwgIFRFUk1JT1NfRkxVU0ggfCBURVJNSU9TX1dBSVQgfCBURVJNSU9TX09MRCk7CisJCWNhc2UgVENTRVRTVzoKKwkJCXJldHVybiBzZXRfdGVybWlvcyhyZWFsX3R0eSwgcCwgVEVSTUlPU19XQUlUIHwgVEVSTUlPU19PTEQpOworCQljYXNlIFRDU0VUUzoKKwkJCXJldHVybiBzZXRfdGVybWlvcyhyZWFsX3R0eSwgcCwgVEVSTUlPU19PTEQpOworI2lmbmRlZiBUQ0dFVFMyCiAJCWNhc2UgVENHRVRTOgogCQkJaWYgKGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcygoc3RydWN0IHRlcm1pb3MgX191c2VyICopYXJnLCByZWFsX3R0eS0+dGVybWlvcykpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlyZXR1cm4gMDsKLQkJY2FzZSBUQ1NFVFNGOgorI2Vsc2UKKwkJY2FzZSBUQ0dFVFM6CisJCQlpZiAoa2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zXzEoKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZywgcmVhbF90dHktPnRlcm1pb3MpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCWNhc2UgVENHRVRTMjoKKwkJCWlmIChrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3MoKHN0cnVjdCB0ZXJtaW9zMiBfX3VzZXIgKilhcmcsIHJlYWxfdHR5LT50ZXJtaW9zKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQljYXNlIFRDU0VUU0YyOgogCQkJcmV0dXJuIHNldF90ZXJtaW9zKHJlYWxfdHR5LCBwLCAgVEVSTUlPU19GTFVTSCB8IFRFUk1JT1NfV0FJVCk7Ci0JCWNhc2UgVENTRVRTVzoKKwkJY2FzZSBUQ1NFVFNXMjoKIAkJCXJldHVybiBzZXRfdGVybWlvcyhyZWFsX3R0eSwgcCwgVEVSTUlPU19XQUlUKTsKLQkJY2FzZSBUQ1NFVFM6CisJCWNhc2UgVENTRVRTMjoKIAkJCXJldHVybiBzZXRfdGVybWlvcyhyZWFsX3R0eSwgcCwgMCk7CisjZW5kaWYKIAkJY2FzZSBUQ0dFVEE6CiAJCQlyZXR1cm4gZ2V0X3Rlcm1pbyhyZWFsX3R0eSwgcCk7CiAJCWNhc2UgVENTRVRBRjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwppbmRleCBmNDQyYjU3Li4yNjc3NjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCkBAIC03Miw3ICs3Miw3IEBACiAJaW50IHNpemU7CiAKIAlkb3duKCZjb25fYnVmX3NlbSk7Ci0Jc2l6ZSA9IHZjc19zaXplKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzaXplID0gdmNzX3NpemUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJc3dpdGNoIChvcmlnKSB7CiAJCWRlZmF1bHQ6CiAJCQl1cCgmY29uX2J1Zl9zZW0pOwpAQCAtOTgsNyArOTgsNyBAQAogc3RhdGljIHNzaXplX3QKIHZjc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJdW5zaWduZWQgaW50IGN1cnJjb25zID0gaW1pbm9yKGlub2RlKTsKIAlzdHJ1Y3QgdmNfZGF0YSAqdmM7CiAJbG9uZyBwb3M7CkBAIC0yNzEsNyArMjcxLDcgQEAKIHN0YXRpYyBzc2l6ZV90CiB2Y3Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAl1bnNpZ25lZCBpbnQgY3VycmNvbnMgPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCB2Y19kYXRhICp2YzsKIAlsb25nIHBvczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aW9jb25zLmMgYi9kcml2ZXJzL2NoYXIvdmlvY29ucy5jCmluZGV4IDZkMmUzMTQuLjhkZTZiOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aW9jb25zLmMKKysrIGIvZHJpdmVycy9jaGFyL3Zpb2NvbnMuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KIAorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL3Zpby5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2h2X2xwX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfY2FsbF9ldmVudC5oPgpAQCAtNjEsMTAgKzYyLDcgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29uc29sZWxvY2spOwogc3RhdGljIERFRklORV9TUElOTE9DSyhjb25zb2xlbG9nbG9jayk7CiAKLSNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKIHN0YXRpYyBpbnQgdmlvX3N5c3JxX3ByZXNzZWQ7Ci1leHRlcm4gaW50IHN5c3JxX2VuYWJsZWQ7Ci0jZW5kaWYKIAogI2RlZmluZSBWSU9DSEFSX05VTV9CVUYJCTE2CiAKQEAgLTkzNiw4ICs5MzQsMTAgQEAKIAkgKi8KIAludW1fcHVzaGVkID0gMDsKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjZXZlbnQtPmxlbjsgaW5kZXgrKykgewotI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQotCQlpZiAoc3lzcnFfZW5hYmxlZCkgeworCQkvKgorCQkgKiBXaWxsIGJlIG9wdGltaXplZCBhd2F5IGlmICFDT05GSUdfTUFHSUNfU1lTUlE6CisJCSAqLworCQlpZiAoc3lzcnFfb24oKSkgewogCQkJLyogMHgwZiBpcyB0aGUgYXNjaWkgY2hhcmFjdGVyIGZvciBeTyAqLwogCQkJaWYgKGNldmVudC0+ZGF0YVtpbmRleF0gPT0gJ1x4MGYnKSB7CiAJCQkJdmlvX3N5c3JxX3ByZXNzZWQgPSAxOwpAQCAtOTU2LDcgKzk1Niw2IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KLSNlbmRpZgogCQkvKgogCQkgKiBUaGUgc3lzcnEgc2VxdWVuY2UgaXNuJ3QgaW5jbHVkZWQgaW4gdGhpcyBjaGVjayBpZgogCQkgKiBzeXNycSBpcyBlbmFibGVkIGFuZCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYmVjYXVzZQpAQCAtMTA2Miw2ICsxMDYxLDkgQEAKIAlhdG9taWNfdCB3YWl0X2ZsYWc7CiAJaW50IHJjOwogCisJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qICsyIGZvciBmdWRnZSAqLwogCXJjID0gdmlvcGF0aF9vcGVuKEh2THBDb25maWdfZ2V0UHJpbWFyeUxwSW5kZXgoKSwKIAkJCXZpb21ham9yc3VidHlwZV9jaGFyaW8sIFZJT0NIQVJfV0lORE9XICsgMik7CkBAIC0xMTQ3LDYgKzExNDksOSBAQAogewogCWludCBpOwogCisJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXByaW50ayhWSU9DT05TX0tFUk5fSU5GTyAicmVnaXN0ZXJpbmcgY29uc29sZVxuIik7CiAJZm9yIChpID0gMDsgaSA8IFZUVFlfUE9SVFM7IGkrKykgewogCQlwb3J0X2luZm9baV0ubHAgPSBIdkxwSW5kZXhJbnZhbGlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYyBiL2RyaXZlcnMvY2hhci92aW90YXBlLmMKaW5kZXggNzNjNzhiZi4uOTQzODUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlvdGFwZS5jCkBAIC00OSw3ICs0OSw3IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KLQorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS92aW8uaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy92aW8uaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9ldmVudC5oPgpAQCAtNDQyLDcgKzQ0Miw3IEBACiAJaWYgKG9wID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZ2V0X2Rldl9pbmZvKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCAmZGV2aSk7CisJZ2V0X2Rldl9pbmZvKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsICZkZXZpKTsKIAogCS8qCiAJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgY2FuIHNlbmQgYSByZXF1ZXN0LiAgV2UgdXNlCkBAIC01MzIsNyArNTMyLDcgQEAKIAlpZiAob3AgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlnZXRfZGV2X2luZm8oZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsICZkZXZpKTsKKwlnZXRfZGV2X2luZm8oZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgJmRldmkpOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBjYW4gc2VuZCBhIHJlcXVlc3QuICBXZSB1c2UKQEAgLTYxMiw3ICs2MTIsNyBAQAogCWlmIChvcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWdldF9kZXZfaW5mbyhmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgJmRldmkpOworCWdldF9kZXZfaW5mbyhmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCAmZGV2aSk7CiAKIAlkb3duKCZyZXFTZW0pOwogCkBAIC03NzcsNyArNzc3LDcgQEAKIAlpZiAob3AgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlnZXRfZGV2X2luZm8oZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsICZkZXZpKTsKKwlnZXRfZGV2X2luZm8oZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgJmRldmkpOwogCiAJLyogTm90ZTogV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBvbmUgbW9kZSEgKi8KIAlpZiAoKGRldmkuZGV2bm8gPj0gdmlvdGFwZV9udW1kZXYpIHx8IChkZXZpLm1vZGUpKSB7CkBAIC04MjIsNyArODIyLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJaW5pdF9jb21wbGV0aW9uKCZvcC0+Y29tKTsKIAotCWdldF9kZXZfaW5mbyhmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgJmRldmkpOworCWdldF9kZXZfaW5mbyhmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCAmZGV2aSk7CiAKIAlpZiAoZGV2aS5kZXZubyA+PSB2aW90YXBlX251bWRldikgewogCQlyZXQgPSAtRU5PREVWOwpAQCAtOTk3LDYgKzk5Nyw5IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmU7CiAKKwlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCXJldHVybiAtRU5PREVWOworCiAJb3Bfc3RydWN0X2xpc3QgPSBOVUxMOwogCWlmICgocmV0ID0gYWRkX29wX3N0cnVjdHMoVklPVEFQRV9NQVhSRVEpKSA8IDApIHsKIAkJcHJpbnRrKFZJT1RBUEVfS0VSTl9XQVJOICJjb3VsZG4ndCBhbGxvY2F0ZSBvcCBzdHJ1Y3RzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMgYi9kcml2ZXJzL2NoYXIvdm1lX3NjYy5jCmluZGV4IGQwYjk0ZGQuLmUwMTMxN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYwpAQCAtMTUzLDYgKzE1Myw4IEBACiAJc2NjX2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwogCXNjY19kcml2ZXItPmluaXRfdGVybWlvcy5jX2NmbGFnID0KIAkgIEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwlzY2NfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOworCXNjY19kcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAJc2NjX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhzY2NfZHJpdmVyLCAmc2NjX29wcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMgYi9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCmluZGV4IDhlNzk0OTMuLjBjZWE4ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKKysrIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgogICoJQXV0aG9yOiBZb2ljaGkgWXVhc2EgPHl5dWFzYUBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tPgotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA1ICBZb2ljaGkgWXVhc2EgPHlvaWNoaV95dWFzYUB0cmlwZWFrcy5jby5qcD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNyAgWW9pY2hpIFl1YXNhIDx5b2ljaGlfeXVhc2FAdHJpcGVha3MuY28uanA+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEyNSwzMCArMTI1LDE3IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9naXVpbnRfbG93X2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYWNrX2dpdWludF9sb3codW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBpbnQgcGluOwotCi0JcGluID0gR1BJT19QSU5fT0ZfSVJRKGlycSk7Ci0JZ2l1X3dyaXRlKEdJVUlOVFNUQVRMLCAxIDw8IHBpbik7Ci0JZ2l1X3NldChHSVVJTlRFTkwsIDEgPDwgcGluKTsKLQotCXJldHVybiAwOworCWdpdV93cml0ZShHSVVJTlRTVEFUTCwgMSA8PCBHUElPX1BJTl9PRl9JUlEoaXJxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNodXRkb3duX2dpdWludF9sb3dfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX2dpdWludF9sb3codW5zaWduZWQgaW50IGlycSkKIHsKIAlnaXVfY2xlYXIoR0lVSU5URU5MLCAxIDw8IEdQSU9fUElOX09GX0lSUShpcnEpKTsKIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX2dpdWludF9sb3dfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZ2l1X3NldChHSVVJTlRFTkwsIDEgPDwgR1BJT19QSU5fT0ZfSVJRKGlycSkpOwotfQotCi0jZGVmaW5lIGRpc2FibGVfZ2l1aW50X2xvd19pcnEJc2h1dGRvd25fZ2l1aW50X2xvd19pcnEKLQotc3RhdGljIHZvaWQgYWNrX2dpdWludF9sb3dfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBtYXNrX2Fja19naXVpbnRfbG93KHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IHBpbjsKIApAQCAtMTU3LDQ2ICsxNDQsMzAgQEAKIAlnaXVfd3JpdGUoR0lVSU5UU1RBVEwsIDEgPDwgcGluKTsKIH0KIAotc3RhdGljIHZvaWQgZW5kX2dpdWludF9sb3dfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB1bm1hc2tfZ2l1aW50X2xvdyh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpCi0JCWdpdV9zZXQoR0lVSU5URU5MLCAxIDw8IEdQSU9fUElOX09GX0lSUShpcnEpKTsKKwlnaXVfc2V0KEdJVUlOVEVOTCwgMSA8PCBHUElPX1BJTl9PRl9JUlEoaXJxKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgZ2l1aW50X2xvd19pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiR0lVSU5UTCIsCi0JLnN0YXJ0dXAJPSBzdGFydHVwX2dpdWludF9sb3dfaXJxLAotCS5zaHV0ZG93bgk9IHNodXRkb3duX2dpdWludF9sb3dfaXJxLAotCS5lbmFibGUJCT0gZW5hYmxlX2dpdWludF9sb3dfaXJxLAotCS5kaXNhYmxlCT0gZGlzYWJsZV9naXVpbnRfbG93X2lycSwKLQkuYWNrCQk9IGFja19naXVpbnRfbG93X2lycSwKLQkuZW5kCQk9IGVuZF9naXVpbnRfbG93X2lycSwKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ2l1aW50X2xvd19pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiR0lVSU5UTCIsCisJLmFjawkJPSBhY2tfZ2l1aW50X2xvdywKKwkubWFzawkJPSBtYXNrX2dpdWludF9sb3csCisJLm1hc2tfYWNrCT0gbWFza19hY2tfZ2l1aW50X2xvdywKKwkudW5tYXNrCQk9IHVubWFza19naXVpbnRfbG93LAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2dpdWludF9oaWdoX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgYWNrX2dpdWludF9oaWdoKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgaW50IHBpbjsKLQotCXBpbiA9IEdQSU9fUElOX09GX0lSUShpcnEpIC0gR0lVSU5UX0hJR0hfT0ZGU0VUOwotCWdpdV93cml0ZShHSVVJTlRTVEFUSCwgMSA8PCBwaW4pOwotCWdpdV9zZXQoR0lVSU5URU5ILCAxIDw8IHBpbik7Ci0KLQlyZXR1cm4gMDsKKwlnaXVfd3JpdGUoR0lVSU5UU1RBVEgsIDEgPDwgKEdQSU9fUElOX09GX0lSUShpcnEpIC0gR0lVSU5UX0hJR0hfT0ZGU0VUKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNodXRkb3duX2dpdWludF9oaWdoX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbWFza19naXVpbnRfaGlnaCh1bnNpZ25lZCBpbnQgaXJxKQogewogCWdpdV9jbGVhcihHSVVJTlRFTkgsIDEgPDwgKEdQSU9fUElOX09GX0lSUShpcnEpIC0gR0lVSU5UX0hJR0hfT0ZGU0VUKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVuYWJsZV9naXVpbnRfaGlnaF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlnaXVfc2V0KEdJVUlOVEVOSCwgMSA8PCAoR1BJT19QSU5fT0ZfSVJRKGlycSkgLSBHSVVJTlRfSElHSF9PRkZTRVQpKTsKLX0KLQotI2RlZmluZSBkaXNhYmxlX2dpdWludF9oaWdoX2lycQlzaHV0ZG93bl9naXVpbnRfaGlnaF9pcnEKLQotc3RhdGljIHZvaWQgYWNrX2dpdWludF9oaWdoX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbWFza19hY2tfZ2l1aW50X2hpZ2godW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgcGluOwogCkBAIC0yMDUsMjAgKzE3NiwxNyBAQAogCWdpdV93cml0ZShHSVVJTlRTVEFUSCwgMSA8PCBwaW4pOwogfQogCi1zdGF0aWMgdm9pZCBlbmRfZ2l1aW50X2hpZ2hfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB1bm1hc2tfZ2l1aW50X2hpZ2godW5zaWduZWQgaW50IGlycSkKIHsKLQlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUykpKQotCQlnaXVfc2V0KEdJVUlOVEVOSCwgMSA8PCAoR1BJT19QSU5fT0ZfSVJRKGlycSkgLSBHSVVJTlRfSElHSF9PRkZTRVQpKTsKKwlnaXVfc2V0KEdJVUlOVEVOSCwgMSA8PCAoR1BJT19QSU5fT0ZfSVJRKGlycSkgLSBHSVVJTlRfSElHSF9PRkZTRVQpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBnaXVpbnRfaGlnaF9pcnFfdHlwZSA9IHsKLQkudHlwZW5hbWUJPSAiR0lVSU5USCIsCi0JLnN0YXJ0dXAJPSBzdGFydHVwX2dpdWludF9oaWdoX2lycSwKLQkuc2h1dGRvd24JPSBzaHV0ZG93bl9naXVpbnRfaGlnaF9pcnEsCi0JLmVuYWJsZQkJPSBlbmFibGVfZ2l1aW50X2hpZ2hfaXJxLAotCS5kaXNhYmxlCT0gZGlzYWJsZV9naXVpbnRfaGlnaF9pcnEsCi0JLmFjawkJPSBhY2tfZ2l1aW50X2hpZ2hfaXJxLAotCS5lbmQJCT0gZW5kX2dpdWludF9oaWdoX2lycSwKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ2l1aW50X2hpZ2hfaXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIkdJVUlOVEgiLAorCS5hY2sJCT0gYWNrX2dpdWludF9oaWdoLAorCS5tYXNrCQk9IG1hc2tfZ2l1aW50X2hpZ2gsCisJLm1hc2tfYWNrCT0gbWFza19hY2tfZ2l1aW50X2hpZ2gsCisJLnVubWFzawkJPSB1bm1hc2tfZ2l1aW50X2hpZ2gsCiB9OwogCiBzdGF0aWMgaW50IGdpdV9nZXRfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0yODIsOSArMjUwLDE1IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihHSVVfSVJRKHBpbiksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgJmdpdWludF9sb3dfaXJxX2NoaXAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2VkZ2VfaXJxKTsKIAkJfSBlbHNlIHsKIAkJCWdpdV9jbGVhcihHSVVJTlRUWVBMLCBtYXNrKTsKIAkJCWdpdV9jbGVhcihHSVVJTlRIVFNFTEwsIG1hc2spOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKEdJVV9JUlEocGluKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAmZ2l1aW50X2xvd19pcnFfY2hpcCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJfQogCQlnaXVfd3JpdGUoR0lVSU5UU1RBVEwsIG1hc2spOwogCX0gZWxzZSBpZiAocGluIDwgR0lVSU5UX0hJR0hfTUFYKSB7CkBAIC0zMTEsOSArMjg1LDE1IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihHSVVfSVJRKHBpbiksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgJmdpdWludF9oaWdoX2lycV9jaGlwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9lZGdlX2lycSk7CiAJCX0gZWxzZSB7CiAJCQlnaXVfY2xlYXIoR0lVSU5UVFlQSCwgbWFzayk7CiAJCQlnaXVfY2xlYXIoR0lVSU5USFRTRUxILCBtYXNrKTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihHSVVfSVJRKHBpbiksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgJmdpdWludF9oaWdoX2lycV9jaGlwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9sZXZlbF9pcnEpOwogCQl9CiAJCWdpdV93cml0ZShHSVVJTlRTVEFUSCwgbWFzayk7CiAJfQpAQCAtNTA2LDcgKzQ4Niw3IEBACiAJdW5zaWduZWQgaW50IHBpbjsKIAljaGFyIHZhbHVlID0gJzAnOwogCi0JcGluID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlwaW4gPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKHBpbiA+PSBnaXVfbnJfcGlucykKIAkJcmV0dXJuIC1FQkFERjsKIApAQCAtNTMwLDcgKzUxMCw3IEBACiAJY2hhciBjOwogCWludCByZXR2YWwgPSAwOwogCi0JcGluID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlwaW4gPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKHBpbiA+PSBnaXVfbnJfcGlucykKIAkJcmV0dXJuIC1FQkFERjsKIApAQCAtNjE3LDEwICs1OTcsMTEgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdpdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZSwgZmxhZ3MgPSAwOwotCXVuc2lnbmVkIGludCBucl9waW5zID0gMDsKKwl1bnNpZ25lZCBpbnQgbnJfcGlucyA9IDAsIHRyaWdnZXIsIGksIHBpbjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczEsICpyZXMyID0gTlVMTDsKIAl2b2lkICpiYXNlOwotCWludCByZXR2YWwsIGk7CisJc3RydWN0IGlycV9jaGlwICpjaGlwOworCWludCByZXR2YWw7CiAKIAlzd2l0Y2ggKGN1cnJlbnRfY3B1X2RhdGEuY3B1dHlwZSkgewogCWNhc2UgQ1BVX1ZSNDExMToKQEAgLTY4OCwxMSArNjY5LDIwIEBACiAJZ2l1X3dyaXRlKEdJVUlOVEVOTCwgMCk7CiAJZ2l1X3dyaXRlKEdJVUlOVEVOSCwgMCk7CiAKKwl0cmlnZ2VyID0gZ2l1X3JlYWQoR0lVSU5UVFlQSCkgPDwgMTY7CisJdHJpZ2dlciB8PSBnaXVfcmVhZChHSVVJTlRUWVBMKTsKIAlmb3IgKGkgPSBHSVVfSVJRX0JBU0U7IGkgPD0gR0lVX0lSUV9MQVNUOyBpKyspIHsKLQkJaWYgKGkgPCBHSVVfSVJRKEdJVUlOVF9ISUdIX09GRlNFVCkpCi0JCQlpcnFfZGVzY1tpXS5jaGlwID0gJmdpdWludF9sb3dfaXJxX3R5cGU7CisJCXBpbiA9IEdQSU9fUElOX09GX0lSUShpKTsKKwkJaWYgKHBpbiA8IEdJVUlOVF9ISUdIX09GRlNFVCkKKwkJCWNoaXAgPSAmZ2l1aW50X2xvd19pcnFfY2hpcDsKIAkJZWxzZQotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZnaXVpbnRfaGlnaF9pcnFfdHlwZTsKKwkJCWNoaXAgPSAmZ2l1aW50X2hpZ2hfaXJxX2NoaXA7CisKKwkJaWYgKHRyaWdnZXIgJiAoMSA8PCBwaW4pKQorCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksIGNoaXAsIGhhbmRsZV9lZGdlX2lycSk7CisJCWVsc2UKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCBjaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwogCX0KIAogCXJldHVybiBjYXNjYWRlX2lycShHSVVJTlRfSVJRLCBnaXVfZ2V0X2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnQuYyBiL2RyaXZlcnMvY2hhci92dC5jCmluZGV4IGE4MjM5ZGEuLjA2YzMyYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dC5jCisrKyBiL2RyaXZlcnMvY2hhci92dC5jCkBAIC03ODQsNyArNzg0LDcgQEAKIAlpZiAobmV3X2NvbHMgPT0gdmMtPnZjX2NvbHMgJiYgbmV3X3Jvd3MgPT0gdmMtPnZjX3Jvd3MpCiAJCXJldHVybiAwOwogCi0JbmV3c2NyZWVuID0gKHVuc2lnbmVkIHNob3J0ICopIGttYWxsb2MobmV3X3NjcmVlbl9zaXplLCBHRlBfVVNFUik7CisJbmV3c2NyZWVuID0ga21hbGxvYyhuZXdfc2NyZWVuX3NpemUsIEdGUF9VU0VSKTsKIAlpZiAoIW5ld3NjcmVlbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKaW5kZXggYWM1ZDYwZS4uZGM4MzY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCQkJICAgICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQogCQkJCXJldHVybiAtRVBFUk07CiAKLQkJCWtleV9tYXAgPSAodXNob3J0ICopIGttYWxsb2Moc2l6ZW9mKHBsYWluX21hcCksCisJCQlrZXlfbWFwID0ga21hbGxvYyhzaXplb2YocGxhaW5fbWFwKSwKIAkJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWtleV9tYXApCiAJCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0yNTksNyArMjU5LDcgQEAKIAkJICAgIHN6ID0gMjU2OwogCQkgICAgd2hpbGUgKHN6IDwgZnVuY2J1ZnNpemUgLSBmdW5jYnVmbGVmdCArIGRlbHRhKQogCQkgICAgICBzeiA8PD0gMTsKLQkJICAgIGZudyA9IChjaGFyICopIGttYWxsb2Moc3osIEdGUF9LRVJORUwpOworCQkgICAgZm53ID0ga21hbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CiAJCSAgICBpZighZm53KSB7CiAJCSAgICAgIHJldCA9IC1FTk9NRU07CiAJCSAgICAgIGdvdG8gcmV0ZXJyOwpAQCAtMTA4Nyw3ICsxMDg3LDcgQEAKIAlzd2l0Y2hfc2NyZWVuKHZjKTsKIAogCS8qCi0JICogVGhpcyBjYW4ndCBhcHBlYXIgYmVsb3cgYSBzdWNjZXNzZnVsIGtpbGxfcHJvYygpLiAgSWYgaXQgZGlkLAorCSAqIFRoaXMgY2FuJ3QgYXBwZWFyIGJlbG93IGEgc3VjY2Vzc2Z1bCBraWxsX3BpZCgpLiAgSWYgaXQgZGlkLAogCSAqIHRoZW4gdGhlICpibGFua19zY3JlZW4gb3BlcmF0aW9uIGNvdWxkIG9jY3VyIHdoaWxlIFgsIGhhdmluZwogCSAqIHJlY2VpdmVkIGFjcXNpZywgaXMgd2FraW5nIHVwIG9uIGFub3RoZXIgcHJvY2Vzc29yLiAgVGhpcwogCSAqIGNvbmRpdGlvbiBjYW4gbGVhZCB0byBvdmVybGFwcGluZyBhY2Nlc3NlcyB0byB0aGUgVkdBIHJhbmdlCkBAIC0xMTEwLDcgKzExMTAsNyBAQAogCSAqLwogCWlmICh2Yy0+dnRfbW9kZS5tb2RlID09IFZUX1BST0NFU1MpIHsKIAkJLyoKLQkJICogU2VuZCB0aGUgc2lnbmFsIGFzIHByaXZpbGVnZWQgLSBraWxsX3Byb2MoKSB3aWxsCisJCSAqIFNlbmQgdGhlIHNpZ25hbCBhcyBwcml2aWxlZ2VkIC0ga2lsbF9waWQoKSB3aWxsCiAJCSAqIHRlbGwgdXMgaWYgdGhlIHByb2Nlc3MgaGFzIGdvbmUgb3Igc29tZXRoaW5nIGVsc2UKIAkJICogaXMgYXdyeQogCQkgKi8KQEAgLTExNzAsNyArMTE3MCw3IEBACiAJdmMgPSB2Y19jb25zW2ZnX2NvbnNvbGVdLmQ7CiAJaWYgKHZjLT52dF9tb2RlLm1vZGUgPT0gVlRfUFJPQ0VTUykgewogCQkvKgotCQkgKiBTZW5kIHRoZSBzaWduYWwgYXMgcHJpdmlsZWdlZCAtIGtpbGxfcHJvYygpIHdpbGwKKwkJICogU2VuZCB0aGUgc2lnbmFsIGFzIHByaXZpbGVnZWQgLSBraWxsX3BpZCgpIHdpbGwKIAkJICogdGVsbCB1cyBpZiB0aGUgcHJvY2VzcyBoYXMgZ29uZSBvciBzb21ldGhpbmcgZWxzZQogCQkgKiBpcyBhd3J5CiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2F0OTFybTkyMDBfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MXJtOTIwMF93ZHQuYwppbmRleCBjYjg2OTY3Li4zOGJkMzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MXJtOTIwMF93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MXJtOTIwMF93ZHQuYwpAQCAtMjAzLDkgKzIwMyw5IEBACiB7CiAJaW50IHJlczsKIAotCWlmIChhdDkxd2R0X21pc2NkZXYuZGV2KQorCWlmIChhdDkxd2R0X21pc2NkZXYucGFyZW50KQogCQlyZXR1cm4gLUVCVVNZOwotCWF0OTF3ZHRfbWlzY2Rldi5kZXYgPSAmcGRldi0+ZGV2OworCWF0OTF3ZHRfbWlzY2Rldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCiAJcmVzID0gbWlzY19yZWdpc3RlcigmYXQ5MXdkdF9taXNjZGV2KTsKIAlpZiAocmVzKQpAQCAtMjIxLDcgKzIyMSw3IEBACiAKIAlyZXMgPSBtaXNjX2RlcmVnaXN0ZXIoJmF0OTF3ZHRfbWlzY2Rldik7CiAJaWYgKCFyZXMpCi0JCWF0OTF3ZHRfbWlzY2Rldi5kZXYgPSBOVUxMOworCQlhdDkxd2R0X21pc2NkZXYucGFyZW50ID0gTlVMTDsKIAogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYwppbmRleCAzNDA0YTljLi5lODg5NDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGNvcmVfd2R0LmMKQEAgLTM0Nyw3ICszNDcsNyBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCW1wY29yZV93ZHRfbWlzY2Rldi5kZXYgPSAmZGV2LT5kZXY7CisJbXBjb3JlX3dkdF9taXNjZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZtcGNvcmVfd2R0X21pc2NkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgX2RldiwgImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL29tYXBfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuYwppbmRleCA1ZGJkN2RjLi42YzZmOTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJb21hcF93ZHRfZGlzYWJsZSgpOwogCW9tYXBfd2R0X2FkanVzdF90aW1lb3V0KHRpbWVyX21hcmdpbik7CiAKLQlvbWFwX3dkdF9taXNjZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJb21hcF93ZHRfbWlzY2Rldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJm9tYXBfd2R0X21pc2NkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3VzYi5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMKaW5kZXggNjExMzg3Mi4uMmRhNWFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CQkvKiBGb3IgSElEX1JFUV9TRVRfUkVQT1JUICYgSElEX0RUX1JFUE9SVCAqLwogCiAKICNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCkBAIC0xMDksMTAgKzExMCw2IEBACiAjZGVmaW5lIENNRF9FTkFCTEVfV0FUQ0hET0cJCTB4MzAJLyogRW5hYmxlIC8gRGlzYWJsZSBXYXRjaGRvZyAqLwogI2RlZmluZSBDTURfRElTQUJMRV9XQVRDSERPRwkJQ01EX0VOQUJMRV9XQVRDSERPRwogCi0vKiBTb21lIGRlZmluZXMgdGhhdCBJIGxpa2UgdG8gYmUgc29tZXdoZXJlIGVsc2UgbGlrZSBpbmNsdWRlL2xpbnV4L3VzYl9oaWQuaCAqLwotI2RlZmluZSBISURfUkVRX1NFVF9SRVBPUlQJCTB4MDkKLSNkZWZpbmUgSElEX0RUX1JFUE9SVAkJCShVU0JfVFlQRV9DTEFTUyB8IDB4MDIpCi0KIC8qIFdlIGNhbiBvbmx5IHVzZSAxIGNhcmQgZHVlIHRvIHRoZSAvZGV2L3dhdGNoZG9nIHJlc3RyaWN0aW9uICovCiBzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcm05a193ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9ybTlrX3dkdC5jCmluZGV4IGVjMzkwOTMuLjc1NzZhMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9ybTlrX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9ybTlrX3dkdC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGlycXJldHVybl90IHdkdF9ncGlfaXJxaGRsKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCB3ZHRfZ3BpX2lycWhkbChpbnQsIHZvaWQgKik7CiBzdGF0aWMgdm9pZCB3ZHRfZ3BpX3N0YXJ0KHZvaWQpOwogc3RhdGljIHZvaWQgd2R0X2dwaV9zdG9wKHZvaWQpOwogc3RhdGljIHZvaWQgd2R0X2dwaV9zZXRfdGltZW91dCh1bnNpZ25lZCBpbnQpOwpAQCAtOTQsOCArOTQsMjggQEAKIE1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgZGlzYWJsZWQgb25jZSBzdGFydGVkIik7CiAKIAorLyogS2VybmVsIGludGVyZmFjZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHdkdF9ncGlfb3BlbiwKKwkucmVsZWFzZQk9IHdkdF9ncGlfcmVsZWFzZSwKKwkud3JpdGUJCT0gd2R0X2dwaV93cml0ZSwKKwkudW5sb2NrZWRfaW9jdGwJPSB3ZHRfZ3BpX2lvY3RsLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXYgPSB7CisJLm1pbm9yCQk9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lCQk9IHdkdF9ncGlfbmFtZSwKKwkuZm9wcwkJPSAmZm9wcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgd2R0X2dwaV9zaHV0ZG93biA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHdkdF9ncGlfbm90aWZ5LAorfTsKKworCiAvKiBJbnRlcnJ1cHQgaGFuZGxlciAqLwotc3RhdGljIGlycXJldHVybl90IHdkdF9ncGlfaXJxaGRsKGludCBpcnEsIHZvaWQgKmN0eHQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGlycXJldHVybl90IHdkdF9ncGlfaXJxaGRsKGludCBpcnEsIHZvaWQgKmN0eHQpCiB7CiAJaWYgKCF1bmxpa2VseShfX3Jhd19yZWFkbCh3ZF9yZWdzICsgMHgwMDA4KSAmIDB4MSkpCiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTMxMiwyNiArMzMyLDYgQEAKIH0KIAogCi0vKiBLZXJuZWwgaW50ZXJmYWNlcyAqLwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gd2R0X2dwaV9vcGVuLAotCS5yZWxlYXNlCT0gd2R0X2dwaV9yZWxlYXNlLAotCS53cml0ZQkJPSB3ZHRfZ3BpX3dyaXRlLAotCS51bmxvY2tlZF9pb2N0bAk9IHdkdF9ncGlfaW9jdGwsCi19OwotCi1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldiA9IHsKLQkubWlub3IJCT0gV0FUQ0hET0dfTUlOT1IsCi0JLm5hbWUJCT0gd2R0X2dwaV9uYW1lLAotCS5mb3BzCQk9ICZmb3BzLAotfTsKLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB3ZHRfZ3BpX3NodXRkb3duID0gewotCS5ub3RpZmllcl9jYWxsCT0gd2R0X2dwaV9ub3RpZnksCi19OwotCi0KIC8qIEluaXQgJiBleGl0IHByb2NlZHVyZXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKgogd2R0X2dwaV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGR2LCBjb25zdCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwppbmRleCA3ZmNiNzdhLi5iNmJjZGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwpAQCAtNzcsMTEgKzc3LDExIEBACiAKIAogI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBpbnQgYWNwaV9wbV9nb29kOworc3RhdGljIGludCBfX2RldmluaXRkYXRhIGFjcGlfcG1fZ29vZDsKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfcG1fZ29vZF9zZXR1cChjaGFyICpfX3N0cikKIHsKLSAgICAgICBhY3BpX3BtX2dvb2QgPSAxOwotICAgICAgIHJldHVybiAxOworCWFjcGlfcG1fZ29vZCA9IDE7CisJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJhY3BpX3BtX2dvb2QiLCBhY3BpX3BtX2dvb2Rfc2V0dXApOwogCkBAIC0xNDIsNiArMTQyLDM5IEBACiAJCQlhY3BpX3BtX2NoZWNrX2dyYXlsaXN0KTsKICNlbmRpZgogCisjaWZuZGVmIENPTkZJR19YODZfNjQKKyNpbmNsdWRlICJtYWNoX3RpbWVyLmgiCisjZGVmaW5lIFBNVE1SX0VYUEVDVEVEX1JBVEUgXAorICAoKENBTElCUkFURV9MQVRDSCAqIChQTVRNUl9USUNLU19QRVJfU0VDID4+IDEwKSkgLyAoQ0xPQ0tfVElDS19SQVRFPj4xMCkpCisvKgorICogU29tZSBib2FyZHMgaGF2ZSB0aGUgUE1UTVIgcnVubmluZyB3YXkgdG9vIGZhc3QuIFdlIGNoZWNrCisgKiB0aGUgUE1UTVIgcmF0ZSBhZ2FpbnN0IFBJVCBjaGFubmVsIDIgdG8gY2F0Y2ggdGhlc2UgY2FzZXMuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X3BtdG1yX3JhdGUodm9pZCkKK3sKKwl1MzIgdmFsdWUxLCB2YWx1ZTI7CisJdW5zaWduZWQgbG9uZyBjb3VudCwgZGVsdGE7CisKKwltYWNoX3ByZXBhcmVfY291bnRlcigpOworCXZhbHVlMSA9IHJlYWRfcG10bXIoKTsKKwltYWNoX2NvdW50dXAoJmNvdW50KTsKKwl2YWx1ZTIgPSByZWFkX3BtdG1yKCk7CisJZGVsdGEgPSAodmFsdWUyIC0gdmFsdWUxKSAmIEFDUElfUE1fTUFTSzsKKworCS8qIENoZWNrIHRoYXQgdGhlIFBNVE1SIGRlbHRhIGlzIHdpdGhpbiA1JSBvZiB3aGF0IHdlIGV4cGVjdCAqLworCWlmIChkZWx0YSA8IChQTVRNUl9FWFBFQ1RFRF9SQVRFICogMTkpIC8gMjAgfHwKKwkgICAgZGVsdGEgPiAoUE1UTVJfRVhQRUNURURfUkFURSAqIDIxKSAvIDIwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlBNLVRpbWVyIHJ1bm5pbmcgYXQgaW52YWxpZCByYXRlOiAlbHUlJSAiCisJCQkib2Ygbm9ybWFsIC0gYWJvcnRpbmcuXG4iLAorCQkJMTAwVUwgKiBkZWx0YSAvIFBNVE1SX0VYUEVDVEVEX1JBVEUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB2ZXJpZnlfcG10bXJfcmF0ZSgpICgwKQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYWNwaV9wbV9jbG9ja3NvdXJjZSh2b2lkKQogewpAQCAtMTczLDYgKzIwNiw5IEBACiAJcmV0dXJuIC1FTk9ERVY7CiAKIHBtX2dvb2Q6CisJaWYgKHZlcmlmeV9wbXRtcl9yYXRlKCkgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2FjcGlfcG0pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMKaW5kZXggM2VjZTY5Mi4uNWM5ZjY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3Byb2MuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8bGludXgvY25fcHJvYy5oPgogCkBAIC02MCw3ICs2MSw3IEBACiAJZXYgPSAoc3RydWN0IHByb2NfZXZlbnQqKW1zZy0+ZGF0YTsKIAlnZXRfc2VxKCZtc2ctPnNlcSwgJmV2LT5jcHUpOwogCWt0aW1lX2dldF90cygmdHMpOyAvKiBnZXQgaGlnaCByZXMgbW9ub3RvbmljIHRpbWVzdGFtcCAqLwotCWV2LT50aW1lc3RhbXBfbnMgPSB0aW1lc3BlY190b19ucygmdHMpOworCXB1dF91bmFsaWduZWQodGltZXNwZWNfdG9fbnMoJnRzKSwgKF9fdTY0ICopJmV2LT50aW1lc3RhbXBfbnMpOwogCWV2LT53aGF0ID0gUFJPQ19FVkVOVF9GT1JLOwogCWV2LT5ldmVudF9kYXRhLmZvcmsucGFyZW50X3BpZCA9IHRhc2stPnJlYWxfcGFyZW50LT5waWQ7CiAJZXYtPmV2ZW50X2RhdGEuZm9yay5wYXJlbnRfdGdpZCA9IHRhc2stPnJlYWxfcGFyZW50LT50Z2lkOwpAQCAtODgsNyArODksNyBAQAogCWV2ID0gKHN0cnVjdCBwcm9jX2V2ZW50Kiltc2ctPmRhdGE7CiAJZ2V0X3NlcSgmbXNnLT5zZXEsICZldi0+Y3B1KTsKIAlrdGltZV9nZXRfdHMoJnRzKTsgLyogZ2V0IGhpZ2ggcmVzIG1vbm90b25pYyB0aW1lc3RhbXAgKi8KLQlldi0+dGltZXN0YW1wX25zID0gdGltZXNwZWNfdG9fbnMoJnRzKTsKKwlwdXRfdW5hbGlnbmVkKHRpbWVzcGVjX3RvX25zKCZ0cyksIChfX3U2NCAqKSZldi0+dGltZXN0YW1wX25zKTsKIAlldi0+d2hhdCA9IFBST0NfRVZFTlRfRVhFQzsKIAlldi0+ZXZlbnRfZGF0YS5leGVjLnByb2Nlc3NfcGlkID0gdGFzay0+cGlkOwogCWV2LT5ldmVudF9kYXRhLmV4ZWMucHJvY2Vzc190Z2lkID0gdGFzay0+dGdpZDsKQEAgLTEyNCw3ICsxMjUsNyBAQAogCSAgICAgCXJldHVybjsKIAlnZXRfc2VxKCZtc2ctPnNlcSwgJmV2LT5jcHUpOwogCWt0aW1lX2dldF90cygmdHMpOyAvKiBnZXQgaGlnaCByZXMgbW9ub3RvbmljIHRpbWVzdGFtcCAqLwotCWV2LT50aW1lc3RhbXBfbnMgPSB0aW1lc3BlY190b19ucygmdHMpOworCXB1dF91bmFsaWduZWQodGltZXNwZWNfdG9fbnMoJnRzKSwgKF9fdTY0ICopJmV2LT50aW1lc3RhbXBfbnMpOwogCiAJbWVtY3B5KCZtc2ctPmlkLCAmY25fcHJvY19ldmVudF9pZCwgc2l6ZW9mKG1zZy0+aWQpKTsKIAltc2ctPmFjayA9IDA7IC8qIG5vdCB1c2VkICovCkBAIC0xNDYsNyArMTQ3LDcgQEAKIAlldiA9IChzdHJ1Y3QgcHJvY19ldmVudCopbXNnLT5kYXRhOwogCWdldF9zZXEoJm1zZy0+c2VxLCAmZXYtPmNwdSk7CiAJa3RpbWVfZ2V0X3RzKCZ0cyk7IC8qIGdldCBoaWdoIHJlcyBtb25vdG9uaWMgdGltZXN0YW1wICovCi0JZXYtPnRpbWVzdGFtcF9ucyA9IHRpbWVzcGVjX3RvX25zKCZ0cyk7CisJcHV0X3VuYWxpZ25lZCh0aW1lc3BlY190b19ucygmdHMpLCAoX191NjQgKikmZXYtPnRpbWVzdGFtcF9ucyk7CiAJZXYtPndoYXQgPSBQUk9DX0VWRU5UX0VYSVQ7CiAJZXYtPmV2ZW50X2RhdGEuZXhpdC5wcm9jZXNzX3BpZCA9IHRhc2stPnBpZDsKIAlldi0+ZXZlbnRfZGF0YS5leGl0LnByb2Nlc3NfdGdpZCA9IHRhc2stPnRnaWQ7CkBAIC0xODEsNyArMTgyLDcgQEAKIAlldiA9IChzdHJ1Y3QgcHJvY19ldmVudCopbXNnLT5kYXRhOwogCW1zZy0+c2VxID0gcmN2ZF9zZXE7CiAJa3RpbWVfZ2V0X3RzKCZ0cyk7IC8qIGdldCBoaWdoIHJlcyBtb25vdG9uaWMgdGltZXN0YW1wICovCi0JZXYtPnRpbWVzdGFtcF9ucyA9IHRpbWVzcGVjX3RvX25zKCZ0cyk7CisJcHV0X3VuYWxpZ25lZCh0aW1lc3BlY190b19ucygmdHMpLCAoX191NjQgKikmZXYtPnRpbWVzdGFtcF9ucyk7CiAJZXYtPmNwdSA9IC0xOwogCWV2LT53aGF0ID0gUFJPQ19FVkVOVF9OT05FOwogCWV2LT5ldmVudF9kYXRhLmFjay5lcnIgPSBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYwppbmRleCBiNDE4YjE2Li4yOTZmNTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKQEAgLTM0LDcgKzM0LDcgQEAKIHZvaWQgY25fcXVldWVfd3JhcHBlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5LCB3b3JrLndvcmspOworCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5LCB3b3JrKTsKIAlzdHJ1Y3QgY25fY2FsbGJhY2tfZGF0YSAqZCA9ICZjYnEtPmRhdGE7CiAKIAlkLT5jYWxsYmFjayhkLT5jYWxsYmFja19wcml2KTsKQEAgLTU5LDEzICs1OSwxMiBAQAogCW1lbWNweSgmY2JxLT5pZC5pZCwgaWQsIHNpemVvZihzdHJ1Y3QgY2JfaWQpKTsKIAljYnEtPmRhdGEuY2FsbGJhY2sgPSBjYWxsYmFjazsKIAkKLQlJTklUX0RFTEFZRURfV09SSygmY2JxLT53b3JrLCAmY25fcXVldWVfd3JhcHBlcik7CisJSU5JVF9XT1JLKCZjYnEtPndvcmssICZjbl9xdWV1ZV93cmFwcGVyKTsKIAlyZXR1cm4gY2JxOwogfQogCiBzdGF0aWMgdm9pZCBjbl9xdWV1ZV9mcmVlX2NhbGxiYWNrKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxKQogewotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNicS0+d29yayk7CiAJZmx1c2hfd29ya3F1ZXVlKGNicS0+cGRldi0+Y25fcXVldWUpOwogCiAJa2ZyZWUoY2JxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKaW5kZXggNWU3Y2Q0NS4uYTQ0ZGI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKQEAgLTEzNSwxNyArMTM1LDE1IEBACiAJc3Bpbl9sb2NrX2JoKCZkZXYtPmNiZGV2LT5xdWV1ZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9fY2JxLCAmZGV2LT5jYmRldi0+cXVldWVfbGlzdCwgY2FsbGJhY2tfZW50cnkpIHsKIAkJaWYgKGNuX2NiX2VxdWFsKCZfX2NicS0+aWQuaWQsICZtc2ctPmlkKSkgewotCQkJaWYgKGxpa2VseSghdGVzdF9iaXQoV09SS19TVFJVQ1RfUEVORElORywKLQkJCQkJICAgICAmX19jYnEtPndvcmsud29yay5tYW5hZ2VtZW50KSAmJgorCQkJaWYgKGxpa2VseSghd29ya19wZW5kaW5nKCZfX2NicS0+d29yaykgJiYKIAkJCQkJX19jYnEtPmRhdGEuZGRhdGEgPT0gTlVMTCkpIHsKIAkJCQlfX2NicS0+ZGF0YS5jYWxsYmFja19wcml2ID0gbXNnOwogCiAJCQkJX19jYnEtPmRhdGEuZGRhdGEgPSBkYXRhOwogCQkJCV9fY2JxLT5kYXRhLmRlc3RydWN0X2RhdGEgPSBkZXN0cnVjdF9kYXRhOwogCi0JCQkJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yaygKLQkJCQkJICAgIGRldi0+Y2JkZXYtPmNuX3F1ZXVlLAotCQkJCQkgICAgJl9fY2JxLT53b3JrLCAwKSkKKwkJCQlpZiAocXVldWVfd29yayhkZXYtPmNiZGV2LT5jbl9xdWV1ZSwKKwkJCQkJCQkmX19jYnEtPndvcmspKQogCQkJCQllcnIgPSAwOwogCQkJfSBlbHNlIHsKIAkJCQlzdHJ1Y3QgY25fY2FsbGJhY2tfZGF0YSAqZDsKQEAgLTE1OSwxMiArMTU3LDExIEBACiAJCQkJCWQtPmRlc3RydWN0X2RhdGEgPSBkZXN0cnVjdF9kYXRhOwogCQkJCQlkLT5mcmVlID0gX19jYnE7CiAKLQkJCQkJSU5JVF9ERUxBWUVEX1dPUksoJl9fY2JxLT53b3JrLAotCQkJCQkJCSAgJmNuX3F1ZXVlX3dyYXBwZXIpOworCQkJCQlJTklUX1dPUksoJl9fY2JxLT53b3JrLAorCQkJCQkJCSZjbl9xdWV1ZV93cmFwcGVyKTsKIAkJCQkJCi0JCQkJCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoCi0JCQkJCQkgICAgZGV2LT5jYmRldi0+Y25fcXVldWUsCi0JCQkJCQkgICAgJl9fY2JxLT53b3JrLCAwKSkKKwkJCQkJaWYgKHF1ZXVlX3dvcmsoZGV2LT5jYmRldi0+Y25fcXVldWUsCisJCQkJCQkgICAgJl9fY2JxLT53b3JrKSkKIAkJCQkJCWVyciA9IDA7CiAJCQkJCWVsc2UgewogCQkJCQkJa2ZyZWUoX19jYnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggNDdhYjQyZC4uYTQ1Y2M4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0yOSw3ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfQ09SRSwgImNwdWZyZXEtY29yZSIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfQ09SRSwgXAorCQkJCQkJImNwdWZyZXEtY29yZSIsIG1zZykKIAogLyoqCiAgKiBUaGUgImNwdWZyZXEgZHJpdmVyIiAtIHRoZSBhcmNoLSBvciBoYXJkd2FyZS1kZXBlbmRlbnQgbG93CkBAIC0xNTEsNyArMTUyLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaXNhYmxlX3JhdGVsaW1pdF9sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQgY3B1ZnJlcV9kZWJ1Z19wcmludGsodW5zaWduZWQgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit2b2lkIGNwdWZyZXFfZGVidWdfcHJpbnRrKHVuc2lnbmVkIGludCB0eXBlLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJY2hhciBzWzI1Nl07CiAJdmFfbGlzdCBhcmdzOwpAQCAtMTYxLDcgKzE2Myw4IEBACiAJV0FSTl9PTighcHJlZml4KTsKIAlpZiAodHlwZSAmIGRlYnVnKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkaXNhYmxlX3JhdGVsaW1pdF9sb2NrLCBmbGFncyk7Ci0JCWlmICghZGlzYWJsZV9yYXRlbGltaXQgJiYgZGVidWdfcmF0ZWxpbWl0ICYmICFwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJaWYgKCFkaXNhYmxlX3JhdGVsaW1pdCAmJiBkZWJ1Z19yYXRlbGltaXQKKwkJCQkJJiYgIXByaW50a19yYXRlbGltaXQoKSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGlzYWJsZV9yYXRlbGltaXRfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CkBAIC0xODIsMTAgKzE4NSwxMiBAQAogCiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgdWludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQ1BVZnJlcSBkZWJ1Z2dpbmc6IGFkZCAxIHRvIGRlYnVnIGNvcmUsIDIgdG8gZGVidWcgZHJpdmVycywgYW5kIDQgdG8gZGVidWcgZ292ZXJub3JzLiIpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkNQVWZyZXEgZGVidWdnaW5nOiBhZGQgMSB0byBkZWJ1ZyBjb3JlLCIKKwkJCSIgMiB0byBkZWJ1ZyBkcml2ZXJzLCBhbmQgNCB0byBkZWJ1ZyBnb3Zlcm5vcnMuIik7CiAKIG1vZHVsZV9wYXJhbShkZWJ1Z19yYXRlbGltaXQsIHVpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19yYXRlbGltaXQsICJDUFVmcmVxIGRlYnVnZ2luZzogc2V0IHRvIDAgdG8gZGlzYWJsZSByYXRlbGltaXRpbmcuIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX3JhdGVsaW1pdCwgIkNQVWZyZXEgZGVidWdnaW5nOiIKKwkJCQkJIiBzZXQgdG8gMCB0byBkaXNhYmxlIHJhdGVsaW1pdGluZy4iKTsKIAogI2Vsc2UgLyogIUNPTkZJR19DUFVfRlJFUV9ERUJVRyAqLwogCkBAIC0yMTksMTcgKzIyNCwyMyBAQAogCWlmICghbF9wX2pfcmVmX2ZyZXEpIHsKIAkJbF9wX2pfcmVmID0gbG9vcHNfcGVyX2ppZmZ5OwogCQlsX3Bfal9yZWZfZnJlcSA9IGNpLT5vbGQ7Ci0JCWRwcmludGsoInNhdmluZyAlbHUgYXMgcmVmZXJlbmNlIHZhbHVlIGZvciBsb29wc19wZXJfamlmZnk7IGZyZXEgaXMgJXUga0h6XG4iLCBsX3Bfal9yZWYsIGxfcF9qX3JlZl9mcmVxKTsKKwkJZHByaW50aygic2F2aW5nICVsdSBhcyByZWZlcmVuY2UgdmFsdWUgZm9yIGxvb3BzX3Blcl9qaWZmeTsiCisJCQkiZnJlcSBpcyAldSBrSHpcbiIsIGxfcF9qX3JlZiwgbF9wX2pfcmVmX2ZyZXEpOwogCX0KIAlpZiAoKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSAgJiYgY2ktPm9sZCA8IGNpLT5uZXcpIHx8CiAJICAgICh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIGNpLT5vbGQgPiBjaS0+bmV3KSB8fAogCSAgICAodmFsID09IENQVUZSRVFfUkVTVU1FQ0hBTkdFIHx8IHZhbCA9PSBDUFVGUkVRX1NVU1BFTkRDSEFOR0UpKSB7Ci0JCWxvb3BzX3Blcl9qaWZmeSA9IGNwdWZyZXFfc2NhbGUobF9wX2pfcmVmLCBsX3Bfal9yZWZfZnJlcSwgY2ktPm5ldyk7Ci0JCWRwcmludGsoInNjYWxpbmcgbG9vcHNfcGVyX2ppZmZ5IHRvICVsdSBmb3IgZnJlcXVlbmN5ICV1IGtIelxuIiwgbG9vcHNfcGVyX2ppZmZ5LCBjaS0+bmV3KTsKKwkJbG9vcHNfcGVyX2ppZmZ5ID0gY3B1ZnJlcV9zY2FsZShsX3Bfal9yZWYsIGxfcF9qX3JlZl9mcmVxLAorCQkJCQkJCQljaS0+bmV3KTsKKwkJZHByaW50aygic2NhbGluZyBsb29wc19wZXJfamlmZnkgdG8gJWx1IgorCQkJImZvciBmcmVxdWVuY3kgJXUga0h6XG4iLCBsb29wc19wZXJfamlmZnksIGNpLT5uZXcpOwogCX0KIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X2ppZmZpZXModW5zaWduZWQgbG9uZyB2YWwsIHN0cnVjdCBjcHVmcmVxX2ZyZXFzICpjaSkgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfamlmZmllcyh1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IGNwdWZyZXFfZnJlcXMgKmNpKQoreworCXJldHVybjsKK30KICNlbmRpZgogCiAKQEAgLTMxNiw3ICszMjcsOCBAQAogCQlpZiAoIXN0cm5pY21wKHN0cl9nb3Zlcm5vciwgInBlcmZvcm1hbmNlIiwgQ1BVRlJFUV9OQU1FX0xFTikpIHsKIAkJCSpwb2xpY3kgPSBDUFVGUkVRX1BPTElDWV9QRVJGT1JNQU5DRTsKIAkJCWVyciA9IDA7Ci0JCX0gZWxzZSBpZiAoIXN0cm5pY21wKHN0cl9nb3Zlcm5vciwgInBvd2Vyc2F2ZSIsIENQVUZSRVFfTkFNRV9MRU4pKSB7CisJCX0gZWxzZSBpZiAoIXN0cm5pY21wKHN0cl9nb3Zlcm5vciwgInBvd2Vyc2F2ZSIsCisJCQkJCQlDUFVGUkVRX05BTUVfTEVOKSkgewogCQkJKnBvbGljeSA9IENQVUZSRVFfUE9MSUNZX1BPV0VSU0FWRTsKIAkJCWVyciA9IDA7CiAJCX0KQEAgLTMyOCw3ICszNDAsOCBAQAogCQl0ID0gX19maW5kX2dvdmVybm9yKHN0cl9nb3Zlcm5vcik7CiAKIAkJaWYgKHQgPT0gTlVMTCkgewotCQkJY2hhciAqbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiY3B1ZnJlcV8lcyIsIHN0cl9nb3Zlcm5vcik7CisJCQljaGFyICpuYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJjcHVmcmVxXyVzIiwKKwkJCQkJCQkJc3RyX2dvdmVybm9yKTsKIAogCQkJaWYgKG5hbWUpIHsKIAkJCQlpbnQgcmV0OwpAQCAtMzYxLDcgKzM3NCw4IEBACiAKIAogLyoqCi0gKiBjcHVmcmVxX3Blcl9jcHVfYXR0cl9yZWFkKCkgLyBzaG93XyMjZmlsZV9uYW1lKCkgLSBwcmludCBvdXQgY3B1ZnJlcSBpbmZvcm1hdGlvbgorICogY3B1ZnJlcV9wZXJfY3B1X2F0dHJfcmVhZCgpIC8gc2hvd18jI2ZpbGVfbmFtZSgpIC0KKyAqIHByaW50IG91dCBjcHVmcmVxIGluZm9ybWF0aW9uCiAgKgogICogV3JpdGUgb3V0IGluZm9ybWF0aW9uIGZyb20gY3B1ZnJlcV9kcml2ZXItPnBvbGljeVtjcHVdOyBvYmplY3QgbXVzdCBiZQogICogInVuc2lnbmVkIGludCIuCkBAIC0zODAsNyArMzk0LDggQEAKIHNob3dfb25lKHNjYWxpbmdfbWF4X2ZyZXEsIG1heCk7CiBzaG93X29uZShzY2FsaW5nX2N1cl9mcmVxLCBjdXIpOwogCi1zdGF0aWMgaW50IF9fY3B1ZnJlcV9zZXRfcG9saWN5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworc3RhdGljIGludCBfX2NwdWZyZXFfc2V0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmRhdGEsCisJCQkJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOwogCiAvKioKICAqIGNwdWZyZXFfcGVyX2NwdV9hdHRyX3dyaXRlKCkgLyBzdG9yZV8jI2ZpbGVfbmFtZSgpIC0gc3lzZnMgd3JpdGUgYWNjZXNzCkBAIC00MTYsNyArNDMxLDggQEAKIC8qKgogICogc2hvd19jcHVpbmZvX2N1cl9mcmVxIC0gY3VycmVudCBDUFUgZnJlcXVlbmN5IGFzIGRldGVjdGVkIGJ5IGhhcmR3YXJlCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfY3B1aW5mb19jdXJfZnJlcSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICogcG9saWN5LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2NwdWluZm9fY3VyX2ZyZXEgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqIHBvbGljeSwKKwkJCQkJCQljaGFyICpidWYpCiB7CiAJdW5zaWduZWQgaW50IGN1cl9mcmVxID0gY3B1ZnJlcV9nZXQocG9saWN5LT5jcHUpOwogCWlmICghY3VyX2ZyZXEpCkBAIC00MjgsNyArNDQ0LDggQEAKIC8qKgogICogc2hvd19zY2FsaW5nX2dvdmVybm9yIC0gc2hvdyB0aGUgY3VycmVudCBwb2xpY3kgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfc2NhbGluZ19nb3Zlcm5vciAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICogcG9saWN5LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3NjYWxpbmdfZ292ZXJub3IgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqIHBvbGljeSwKKwkJCQkJCQljaGFyICpidWYpCiB7CiAJaWYocG9saWN5LT5wb2xpY3kgPT0gQ1BVRlJFUV9QT0xJQ1lfUE9XRVJTQVZFKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJwb3dlcnNhdmVcbiIpOwpAQCAtNDU4LDcgKzQ3NSw4IEBACiAJaWYgKHJldCAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjcHVmcmVxX3BhcnNlX2dvdmVybm9yKHN0cl9nb3Zlcm5vciwgJm5ld19wb2xpY3kucG9saWN5LCAmbmV3X3BvbGljeS5nb3Zlcm5vcikpCisJaWYgKGNwdWZyZXFfcGFyc2VfZ292ZXJub3Ioc3RyX2dvdmVybm9yLCAmbmV3X3BvbGljeS5wb2xpY3ksCisJCQkJCQkmbmV3X3BvbGljeS5nb3Zlcm5vcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbG9ja19jcHVfaG90cGx1ZygpOwpAQCAtNDc0LDcgKzQ5MiwxMCBAQAogCiAJdW5sb2NrX2NwdV9ob3RwbHVnKCk7CiAKLQlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwllbHNlCisJCXJldHVybiBjb3VudDsKIH0KIAogLyoqCkBAIC00ODgsNyArNTA5LDcgQEAKIC8qKgogICogc2hvd19zY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMgLSBzaG93IHRoZSBhdmFpbGFibGUgQ1BVZnJlcSBnb3Zlcm5vcnMKICAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19zY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqIHBvbGljeSwKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2NhbGluZ19hdmFpbGFibGVfZ292ZXJub3JzIChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCQljaGFyICpidWYpCiB7CiAJc3NpemVfdCBpID0gMDsKQEAgLTU3NCw3ICs1OTUsMTEgQEAKIAlwb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQocG9saWN5LT5jcHUpOwogCWlmICghcG9saWN5KQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXQgPSBmYXR0ci0+c2hvdyA/IGZhdHRyLT5zaG93KHBvbGljeSxidWYpIDogLUVJTzsKKwlpZiAoZmF0dHItPnNob3cpCisJCXJldCA9IGZhdHRyLT5zaG93KHBvbGljeSwgYnVmKTsKKwllbHNlCisJCXJldCA9IC1FSU87CisKIAljcHVmcmVxX2NwdV9wdXQocG9saWN5KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTg4LDcgKzYxMywxMSBAQAogCXBvbGljeSA9IGNwdWZyZXFfY3B1X2dldChwb2xpY3ktPmNwdSk7CiAJaWYgKCFwb2xpY3kpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldCA9IGZhdHRyLT5zdG9yZSA/IGZhdHRyLT5zdG9yZShwb2xpY3ksYnVmLGNvdW50KSA6IC1FSU87CisJaWYgKGZhdHRyLT5zdG9yZSkKKwkJcmV0ID0gZmF0dHItPnN0b3JlKHBvbGljeSwgYnVmLCBjb3VudCk7CisJZWxzZQorCQlyZXQgPSAtRUlPOworCiAJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTY5Myw4ICs3MjIsMTMgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAogCQkJZHByaW50aygiQ1BVIGFscmVhZHkgbWFuYWdlZCwgYWRkaW5nIGxpbmtcbiIpOwotCQkJc3lzZnNfY3JlYXRlX2xpbmsoJnN5c19kZXYtPmtvYmosCi0JCQkJCSAgJm1hbmFnZWRfcG9saWN5LT5rb2JqLCAiY3B1ZnJlcSIpOworCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJnN5c19kZXYtPmtvYmosCisJCQkJCQkmbWFuYWdlZF9wb2xpY3ktPmtvYmosCisJCQkJCQkiY3B1ZnJlcSIpOworCQkJaWYgKHJldCkgeworCQkJCW11dGV4X3VubG9jaygmcG9saWN5LT5sb2NrKTsKKwkJCQlnb3RvIGVycl9vdXRfZHJpdmVyX2V4aXQ7CisJCQl9CiAKIAkJCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOwogCQkJbXV0ZXhfdW5sb2NrKCZwb2xpY3ktPmxvY2spOwpAQCAtNzQxLDggKzc3NSwxMiBAQAogCQlkcHJpbnRrKCJDUFUgJXUgYWxyZWFkeSBtYW5hZ2VkLCBhZGRpbmcgbGlua1xuIiwgaik7CiAJCWNwdWZyZXFfY3B1X2dldChjcHUpOwogCQljcHVfc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGopOwotCQlzeXNmc19jcmVhdGVfbGluaygmY3B1X3N5c19kZXYtPmtvYmosICZwb2xpY3ktPmtvYmosCi0JCQkJICAiY3B1ZnJlcSIpOworCQlyZXQgPSBzeXNmc19jcmVhdGVfbGluaygmY3B1X3N5c19kZXYtPmtvYmosICZwb2xpY3ktPmtvYmosCisJCQkJCSJjcHVmcmVxIik7CisJCWlmIChyZXQpIHsKKwkJCW11dGV4X3VubG9jaygmcG9saWN5LT5sb2NrKTsKKwkJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyOworCQl9CiAJfQogCiAJcG9saWN5LT5nb3Zlcm5vciA9IE5VTEw7IC8qIHRvIGFzc3VyZSB0aGF0IHRoZSBzdGFydGluZyBzZXF1ZW5jZSBpcwpAQCAtOTEzLDcgKzk1MSw4IEBACiAgKglXZSBhZGp1c3QgdG8gY3VycmVudCBmcmVxdWVuY3kgZmlyc3QsIGFuZCBuZWVkIHRvIGNsZWFuIHVwIGxhdGVyLiBTbyBlaXRoZXIgY2FsbAogICoJdG8gY3B1ZnJlcV91cGRhdGVfcG9saWN5KCkgb3Igc2NoZWR1bGUgaGFuZGxlX3VwZGF0ZSgpKS4KICAqLwotc3RhdGljIHZvaWQgY3B1ZnJlcV9vdXRfb2Zfc3luYyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgb2xkX2ZyZXEsIHVuc2lnbmVkIGludCBuZXdfZnJlcSkKK3N0YXRpYyB2b2lkIGNwdWZyZXFfb3V0X29mX3N5bmModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IG9sZF9mcmVxLAorCQkJCXVuc2lnbmVkIGludCBuZXdfZnJlcSkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIApAQCAtOTI5LDcgKzk2OCw3IEBACiAKIAogLyoqCi0gKiBjcHVmcmVxX3F1aWNrX2dldCAtIGdldCB0aGUgQ1BVIGZyZXF1ZW5jeSAoaW4ga0h6KSBmcnBtIHBvbGljeS0+Y3VyCisgKiBjcHVmcmVxX3F1aWNrX2dldCAtIGdldCB0aGUgQ1BVIGZyZXF1ZW5jeSAoaW4ga0h6KSBmcm9tIHBvbGljeS0+Y3VyCiAgKiBAY3B1OiBDUFUgbnVtYmVyCiAgKgogICogVGhpcyBpcyB0aGUgbGFzdCBrbm93biBmcmVxLCB3aXRob3V0IGFjdHVhbGx5IGdldHRpbmcgaXQgZnJvbSB0aGUgZHJpdmVyLgpAQCAtOTM4LDE2ICs5NzcsMTYgQEAKIHVuc2lnbmVkIGludCBjcHVmcmVxX3F1aWNrX2dldCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7Ci0JdW5zaWduZWQgaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IHJldF9mcmVxID0gMDsKIAogCWlmIChwb2xpY3kpIHsKIAkJbXV0ZXhfbG9jaygmcG9saWN5LT5sb2NrKTsKLQkJcmV0ID0gcG9saWN5LT5jdXI7CisJCXJldF9mcmVxID0gcG9saWN5LT5jdXI7CiAJCW11dGV4X3VubG9jaygmcG9saWN5LT5sb2NrKTsKIAkJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7CiAJfQogCi0JcmV0dXJuIChyZXQpOworCXJldHVybiAocmV0X2ZyZXEpOwogfQogRVhQT1JUX1NZTUJPTChjcHVmcmVxX3F1aWNrX2dldCk7CiAKQEAgLTk2MSw3ICsxMDAwLDcgQEAKIHVuc2lnbmVkIGludCBjcHVmcmVxX2dldCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7Ci0JdW5zaWduZWQgaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IHJldF9mcmVxID0gMDsKIAogCWlmICghcG9saWN5KQogCQlyZXR1cm4gMDsKQEAgLTk3MSwxMiArMTAxMCwxNCBAQAogCiAJbXV0ZXhfbG9jaygmcG9saWN5LT5sb2NrKTsKIAotCXJldCA9IGNwdWZyZXFfZHJpdmVyLT5nZXQoY3B1KTsKKwlyZXRfZnJlcSA9IGNwdWZyZXFfZHJpdmVyLT5nZXQoY3B1KTsKIAotCWlmIChyZXQgJiYgcG9saWN5LT5jdXIgJiYgIShjcHVmcmVxX2RyaXZlci0+ZmxhZ3MgJiBDUFVGUkVRX0NPTlNUX0xPT1BTKSkgewotCQkvKiB2ZXJpZnkgbm8gZGlzY3JlcGFuY3kgYmV0d2VlbiBhY3R1YWwgYW5kIHNhdmVkIHZhbHVlIGV4aXN0cyAqLwotCQlpZiAodW5saWtlbHkocmV0ICE9IHBvbGljeS0+Y3VyKSkgewotCQkJY3B1ZnJlcV9vdXRfb2Zfc3luYyhjcHUsIHBvbGljeS0+Y3VyLCByZXQpOworCWlmIChyZXRfZnJlcSAmJiBwb2xpY3ktPmN1ciAmJgorCQkhKGNwdWZyZXFfZHJpdmVyLT5mbGFncyAmIENQVUZSRVFfQ09OU1RfTE9PUFMpKSB7CisJCS8qIHZlcmlmeSBubyBkaXNjcmVwYW5jeSBiZXR3ZWVuIGFjdHVhbCBhbmQKKwkJCQkJc2F2ZWQgdmFsdWUgZXhpc3RzICovCisJCWlmICh1bmxpa2VseShyZXRfZnJlcSAhPSBwb2xpY3ktPmN1cikpIHsKKwkJCWNwdWZyZXFfb3V0X29mX3N5bmMoY3B1LCBwb2xpY3ktPmN1ciwgcmV0X2ZyZXEpOwogCQkJc2NoZWR1bGVfd29yaygmcG9saWN5LT51cGRhdGUpOwogCQl9CiAJfQpAQCAtOTg2LDcgKzEwMjcsNyBAQAogb3V0OgogCWNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOwogCi0JcmV0dXJuIChyZXQpOworCXJldHVybiAocmV0X2ZyZXEpOwogfQogRVhQT1JUX1NZTUJPTChjcHVmcmVxX2dldCk7CiAKQEAgLTk5OCw3ICsxMDM5LDcgQEAKIHN0YXRpYyBpbnQgY3B1ZnJlcV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2LCBwbV9tZXNzYWdlX3QgcG1zZykKIHsKIAlpbnQgY3B1ID0gc3lzZGV2LT5pZDsKLQl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgY3VyX2ZyZXEgPSAwOwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1X3BvbGljeTsKIApAQCAtMTA4MCw3ICsxMTIxLDcgQEAKIHN0YXRpYyBpbnQgY3B1ZnJlcV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYpCiB7CiAJaW50IGNwdSA9IHN5c2Rldi0+aWQ7Ci0JdW5zaWduZWQgaW50IHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjcHVfcG9saWN5OwogCiAJZHByaW50aygicmVzdW1pbmcgY3B1ICV1XG4iLCBjcHUpOwpAQCAtMTI3NiwyMiArMTMxNyw0NSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KTsKIAoraW50IGNwdWZyZXFfZHJpdmVyX2dldGF2ZyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXBvbGljeSA9IGNwdWZyZXFfY3B1X2dldChwb2xpY3ktPmNwdSk7CisJaWYgKCFwb2xpY3kpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcG9saWN5LT5sb2NrKTsKKworCWlmIChjcHVfb25saW5lKHBvbGljeS0+Y3B1KSAmJiBjcHVmcmVxX2RyaXZlci0+Z2V0YXZnKQorCQlyZXQgPSBjcHVmcmVxX2RyaXZlci0+Z2V0YXZnKHBvbGljeS0+Y3B1KTsKKworCW11dGV4X3VubG9jaygmcG9saWN5LT5sb2NrKTsKKworCWNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2RyaXZlcl9nZXRhdmcpOworCiAvKgogICogTG9ja2luZzogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbG9ja19jcHVfaG90cGx1ZygpIGxvY2sgaGVsZAogICogd2hlbiAiZXZlbnQiIGlzIENQVUZSRVFfR09WX0xJTUlUUwogICovCiAKLXN0YXRpYyBpbnQgX19jcHVmcmVxX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgZXZlbnQpCitzdGF0aWMgaW50IF9fY3B1ZnJlcV9nb3Zlcm5vcihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKwkJCQkJdW5zaWduZWQgaW50IGV2ZW50KQogewogCWludCByZXQ7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KHBvbGljeS0+Z292ZXJub3ItPm93bmVyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkcHJpbnRrKCJfX2NwdWZyZXFfZ292ZXJub3IgZm9yIENQVSAldSwgZXZlbnQgJXVcbiIsIHBvbGljeS0+Y3B1LCBldmVudCk7CisJZHByaW50aygiX19jcHVmcmVxX2dvdmVybm9yIGZvciBDUFUgJXUsIGV2ZW50ICV1XG4iLAorCQkJCQkJcG9saWN5LT5jcHUsIGV2ZW50KTsKIAlyZXQgPSBwb2xpY3ktPmdvdmVybm9yLT5nb3Zlcm5vcihwb2xpY3ksIGV2ZW50KTsKIAotCS8qIHdlIGtlZXAgb25lIG1vZHVsZSByZWZlcmVuY2UgYWxpdmUgZm9yIGVhY2ggQ1BVIGdvdmVybmVkIGJ5IHRoaXMgQ1BVICovCisJLyogd2Uga2VlcCBvbmUgbW9kdWxlIHJlZmVyZW5jZSBhbGl2ZSBmb3IKKwkJCWVhY2ggQ1BVIGdvdmVybmVkIGJ5IHRoaXMgQ1BVICovCiAJaWYgKChldmVudCAhPSBDUFVGUkVRX0dPVl9TVEFSVCkgfHwgcmV0KQogCQltb2R1bGVfcHV0KHBvbGljeS0+Z292ZXJub3ItPm93bmVyKTsKIAlpZiAoKGV2ZW50ID09IENQVUZSRVFfR09WX1NUT1ApICYmICFyZXQpCkBAIC0xMzY3LDkgKzE0MzEsMTIgQEAKIAogCiAvKgorICogZGF0YSAgIDogY3VycmVudCBwb2xpY3kuCisgKiBwb2xpY3kgOiBwb2xpY3kgdG8gYmUgc2V0LgogICogTG9ja2luZzogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbG9ja19jcHVfaG90cGx1ZygpIGxvY2sgaGVsZAogICovCi1zdGF0aWMgaW50IF9fY3B1ZnJlcV9zZXRfcG9saWN5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IF9fY3B1ZnJlcV9zZXRfcG9saWN5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqZGF0YSwKKwkJCQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTM3Nyw3ICsxNDQ0LDggQEAKIAlkcHJpbnRrKCJzZXR0aW5nIG5ldyBwb2xpY3kgZm9yIENQVSAldTogJXUgLSAldSBrSHpcbiIsIHBvbGljeS0+Y3B1LAogCQlwb2xpY3ktPm1pbiwgcG9saWN5LT5tYXgpOwogCi0JbWVtY3B5KCZwb2xpY3ktPmNwdWluZm8sICZkYXRhLT5jcHVpbmZvLCBzaXplb2Yoc3RydWN0IGNwdWZyZXFfY3B1aW5mbykpOworCW1lbWNweSgmcG9saWN5LT5jcHVpbmZvLCAmZGF0YS0+Y3B1aW5mbywKKwkJCQlzaXplb2Yoc3RydWN0IGNwdWZyZXFfY3B1aW5mbykpOwogCiAJaWYgKHBvbGljeS0+bWluID4gZGF0YS0+bWluICYmIHBvbGljeS0+bWluID4gcG9saWN5LT5tYXgpIHsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTE0MTAsNyArMTQ3OCw4IEBACiAJZGF0YS0+bWluID0gcG9saWN5LT5taW47CiAJZGF0YS0+bWF4ID0gcG9saWN5LT5tYXg7CiAKLQlkcHJpbnRrKCJuZXcgbWluIGFuZCBtYXggZnJlcXMgYXJlICV1IC0gJXUga0h6XG4iLCBkYXRhLT5taW4sIGRhdGEtPm1heCk7CisJZHByaW50aygibmV3IG1pbiBhbmQgbWF4IGZyZXFzIGFyZSAldSAtICV1IGtIelxuIiwKKwkJCQkJZGF0YS0+bWluLCBkYXRhLT5tYXgpOwogCiAJaWYgKGNwdWZyZXFfZHJpdmVyLT5zZXRwb2xpY3kpIHsKIAkJZGF0YS0+cG9saWN5ID0gcG9saWN5LT5wb2xpY3k7CkBAIC0xNDMxLDEwICsxNTAwLDEyIEBACiAJCQlkYXRhLT5nb3Zlcm5vciA9IHBvbGljeS0+Z292ZXJub3I7CiAJCQlpZiAoX19jcHVmcmVxX2dvdmVybm9yKGRhdGEsIENQVUZSRVFfR09WX1NUQVJUKSkgewogCQkJCS8qIG5ldyBnb3Zlcm5vciBmYWlsZWQsIHNvIHJlLXN0YXJ0IG9sZCBvbmUgKi8KLQkJCQlkcHJpbnRrKCJzdGFydGluZyBnb3Zlcm5vciAlcyBmYWlsZWRcbiIsIGRhdGEtPmdvdmVybm9yLT5uYW1lKTsKKwkJCQlkcHJpbnRrKCJzdGFydGluZyBnb3Zlcm5vciAlcyBmYWlsZWRcbiIsCisJCQkJCQkJZGF0YS0+Z292ZXJub3ItPm5hbWUpOwogCQkJCWlmIChvbGRfZ292KSB7CiAJCQkJCWRhdGEtPmdvdmVybm9yID0gb2xkX2dvdjsKLQkJCQkJX19jcHVmcmVxX2dvdmVybm9yKGRhdGEsIENQVUZSRVFfR09WX1NUQVJUKTsKKwkJCQkJX19jcHVmcmVxX2dvdmVybm9yKGRhdGEsCisJCQkJCQkJICAgQ1BVRlJFUV9HT1ZfU1RBUlQpOwogCQkJCX0KIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gZXJyb3Jfb3V0OwpAQCAtMTUyNCw3ICsxNTk1LDggQEAKIAkJCWRhdGEtPmN1ciA9IHBvbGljeS5jdXI7CiAJCX0gZWxzZSB7CiAJCQlpZiAoZGF0YS0+Y3VyICE9IHBvbGljeS5jdXIpCi0JCQkJY3B1ZnJlcV9vdXRfb2Zfc3luYyhjcHUsIGRhdGEtPmN1ciwgcG9saWN5LmN1cik7CisJCQkJY3B1ZnJlcV9vdXRfb2Zfc3luYyhjcHUsIGRhdGEtPmN1ciwKKwkJCQkJCQkJcG9saWN5LmN1cik7CiAJCX0KIAl9CiAKQEAgLTE2MjYsOCArMTY5OCwxMCBAQAogCiAJCS8qIGlmIGFsbCAtPmluaXQoKSBjYWxscyBmYWlsZWQsIHVucmVnaXN0ZXIgKi8KIAkJaWYgKHJldCkgewotCQkJZHByaW50aygibm8gQ1BVIGluaXRpYWxpemVkIGZvciBkcml2ZXIgJXNcbiIsIGRyaXZlcl9kYXRhLT5uYW1lKTsKLQkJCXN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywgJmNwdWZyZXFfc3lzZGV2X2RyaXZlcik7CisJCQlkcHJpbnRrKCJubyBDUFUgaW5pdGlhbGl6ZWQgZm9yIGRyaXZlciAlc1xuIiwKKwkJCQkJCQlkcml2ZXJfZGF0YS0+bmFtZSk7CisJCQlzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsCisJCQkJCQkmY3B1ZnJlcV9zeXNkZXZfZHJpdmVyKTsKIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJCWNwdWZyZXFfZHJpdmVyID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKaW5kZXggNWVmNWVkZS4uZWVmMDI3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKQEAgLTQ0LDE1ICs0NCwxNyBAQAogICogbGF0ZW5jeSBvZiB0aGUgcHJvY2Vzc29yLiBUaGUgZ292ZXJub3Igd2lsbCB3b3JrIG9uIGFueSBwcm9jZXNzb3Igd2l0aCAKICAqIHRyYW5zaXRpb24gbGF0ZW5jeSA8PSAxMG1TLCB1c2luZyBhcHByb3ByaWF0ZSBzYW1wbGluZyAKICAqIHJhdGUuCi0gKiBGb3IgQ1BVcyB3aXRoIHRyYW5zaXRpb24gbGF0ZW5jeSA+IDEwbVMgKG1vc3RseSBkcml2ZXJzIHdpdGggQ1BVRlJFUV9FVEVSTkFMKQotICogdGhpcyBnb3Zlcm5vciB3aWxsIG5vdCB3b3JrLgorICogRm9yIENQVXMgd2l0aCB0cmFuc2l0aW9uIGxhdGVuY3kgPiAxMG1TIChtb3N0bHkgZHJpdmVycworICogd2l0aCBDUFVGUkVRX0VURVJOQUwpLCB0aGlzIGdvdmVybm9yIHdpbGwgbm90IHdvcmsuCiAgKiBBbGwgdGltZXMgaGVyZSBhcmUgaW4gdVMuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgCQkJCWRlZl9zYW1wbGluZ19yYXRlOwogI2RlZmluZSBNSU5fU0FNUExJTkdfUkFURV9SQVRJTwkJCSgyKQogLyogZm9yIGNvcnJlY3Qgc3RhdGlzdGljcywgd2UgbmVlZCBhdCBsZWFzdCAxMCB0aWNrcyBiZXR3ZWVuIGVhY2ggbWVhc3VyZSAqLwotI2RlZmluZSBNSU5fU1RBVF9TQU1QTElOR19SQVRFCQkJKE1JTl9TQU1QTElOR19SQVRFX1JBVElPICogamlmZmllc190b191c2VjcygxMCkpCi0jZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFCQkJKGRlZl9zYW1wbGluZ19yYXRlIC8gTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8pCisjZGVmaW5lIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUJCQlcCisJCQkoTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8gKiBqaWZmaWVzX3RvX3VzZWNzKDEwKSkKKyNkZWZpbmUgTUlOX1NBTVBMSU5HX1JBVEUJCQlcCisJCQkoZGVmX3NhbXBsaW5nX3JhdGUgLyBNSU5fU0FNUExJTkdfUkFURV9SQVRJTykKICNkZWZpbmUgTUFYX1NBTVBMSU5HX1JBVEUJCQkoNTAwICogZGVmX3NhbXBsaW5nX3JhdGUpCiAjZGVmaW5lIERFRl9TQU1QTElOR19SQVRFX0xBVEVOQ1lfTVVMVElQTElFUgkoMTAwMCkKICNkZWZpbmUgREVGX1NBTVBMSU5HX0RPV05fRkFDVE9SCQkoMSkKQEAgLTEwMywxMSArMTA1LDE2IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JcmV0dXJuCWtzdGF0X2NwdShjcHUpLmNwdXN0YXQuaWRsZSArCisJdW5zaWduZWQgaW50IGFkZF9uaWNlID0gMCwgcmV0OworCisJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKQorCQlhZGRfbmljZSA9IGtzdGF0X2NwdShjcHUpLmNwdXN0YXQubmljZTsKKworCXJldCA9IAlrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LmlkbGUgKwogCQlrc3RhdF9jcHUoY3B1KS5jcHVzdGF0Lmlvd2FpdCArCi0JCSggZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UgPwotCQkgIGtzdGF0X2NwdShjcHUpLmNwdXN0YXQubmljZSA6Ci0JCSAgMCk7CisJCWFkZF9uaWNlOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIHN5c2ZzIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00NTIsNiArNDU5LDcgQEAKIAl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7CiAJc3RydWN0IGNwdV9kYnNfaW5mb19zICp0aGlzX2Ric19pbmZvOwogCXVuc2lnbmVkIGludCBqOworCWludCByYzsKIAogCXRoaXNfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGNwdSk7CiAKQEAgLTQ2OCw2ICs0NzYsMTMgQEAKIAkJCWJyZWFrOwogCQkgCiAJCW11dGV4X2xvY2soJmRic19tdXRleCk7CisKKwkJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBvbGljeS0+a29iaiwgJmRic19hdHRyX2dyb3VwKTsKKwkJaWYgKHJjKSB7CisJCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwogCQlmb3JfZWFjaF9jcHVfbWFzayhqLCBwb2xpY3ktPmNwdXMpIHsKIAkJCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqal9kYnNfaW5mbzsKIAkJCWpfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOwpAQCAtNDgwLDcgKzQ5NSw3IEBACiAJCXRoaXNfZGJzX2luZm8tPmVuYWJsZSA9IDE7CiAJCXRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCA9IDA7CiAJCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID0gcG9saWN5LT5jdXI7Ci0JCXN5c2ZzX2NyZWF0ZV9ncm91cCgmcG9saWN5LT5rb2JqLCAmZGJzX2F0dHJfZ3JvdXApOworCiAJCWRic19lbmFibGUrKzsKIAkJLyoKIAkJICogU3RhcnQgdGhlIHRpbWVyc2NoZWR1bGUgd29yaywgd2hlbiB0aGlzIGdvdmVybm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwppbmRleCBlMWNjNTExLi5mNjk3NDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTQxLDggKzQxLDEwIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGRlZl9zYW1wbGluZ19yYXRlOwogI2RlZmluZSBNSU5fU0FNUExJTkdfUkFURV9SQVRJTwkJCSgyKQogLyogZm9yIGNvcnJlY3Qgc3RhdGlzdGljcywgd2UgbmVlZCBhdCBsZWFzdCAxMCB0aWNrcyBiZXR3ZWVuIGVhY2ggbWVhc3VyZSAqLwotI2RlZmluZSBNSU5fU1RBVF9TQU1QTElOR19SQVRFCQkJKE1JTl9TQU1QTElOR19SQVRFX1JBVElPICogamlmZmllc190b191c2VjcygxMCkpCi0jZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFCQkJKGRlZl9zYW1wbGluZ19yYXRlIC8gTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8pCisjZGVmaW5lIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUgCQkJXAorCQkJKE1JTl9TQU1QTElOR19SQVRFX1JBVElPICogamlmZmllc190b191c2VjcygxMCkpCisjZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFCQkJXAorCQkJKGRlZl9zYW1wbGluZ19yYXRlIC8gTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8pCiAjZGVmaW5lIE1BWF9TQU1QTElOR19SQVRFCQkJKDUwMCAqIGRlZl9zYW1wbGluZ19yYXRlKQogI2RlZmluZSBERUZfU0FNUExJTkdfUkFURV9MQVRFTkNZX01VTFRJUExJRVIJKDEwMDApCiAjZGVmaW5lIFRSQU5TSVRJT05fTEFURU5DWV9MSU1JVAkJKDEwICogMTAwMCkKQEAgLTIwNiw3ICsyMDgsOCBAQAogCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IE1BWF9TQU1QTElOR19SQVRFIHx8IGlucHV0IDwgTUlOX1NBTVBMSU5HX1JBVEUpIHsKKwlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPiBNQVhfU0FNUExJTkdfUkFURQorCQkgICAgIHx8IGlucHV0IDwgTUlOX1NBTVBMSU5HX1JBVEUpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0zOTcsOCArNDAwLDE1IEBACiAJICogcG9saWN5LiBUbyBiZSBzYWZlLCB3ZSBmb2N1cyAxMCBwb2ludHMgdW5kZXIgdGhlIHRocmVzaG9sZC4KIAkgKi8KIAlpZiAobG9hZCA8IChkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQgLSAxMCkpIHsKLQkJdW5zaWduZWQgaW50IGZyZXFfbmV4dCA9IChwb2xpY3ktPmN1ciAqIGxvYWQpIC8KKwkJdW5zaWduZWQgaW50IGZyZXFfbmV4dCwgZnJlcV9jdXI7CisKKwkJZnJlcV9jdXIgPSBjcHVmcmVxX2RyaXZlcl9nZXRhdmcocG9saWN5KTsKKwkJaWYgKCFmcmVxX2N1cikKKwkJCWZyZXFfY3VyID0gcG9saWN5LT5jdXI7CisKKwkJZnJlcV9uZXh0ID0gKGZyZXFfY3VyICogbG9hZCkgLwogCQkJKGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCAtIDEwKTsKKwogCQlpZiAoIWRic190dW5lcnNfaW5zLnBvd2Vyc2F2ZV9iaWFzKSB7CiAJCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIGZyZXFfbmV4dCwKIAkJCQkJQ1BVRlJFUV9SRUxBVElPTl9MKTsKQEAgLTQ3Miw2ICs0ODIsNyBAQAogCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKIAlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKnRoaXNfZGJzX2luZm87CiAJdW5zaWduZWQgaW50IGo7CisJaW50IHJjOwogCiAJdGhpc19kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgY3B1KTsKIApAQCAtNDk0LDEyICs1MDUsMjMgQEAKIAkJaWYgKGRic19lbmFibGUgPT0gMSkgewogCQkJa29uZGVtYW5kX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgia29uZGVtYW5kIik7CiAJCQlpZiAoIWtvbmRlbWFuZF93cSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiQ3JlYXRpb24gb2Yga29uZGVtYW5kIGZhaWxlZFxuIik7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAiQ3JlYXRpb24gb2Yga29uZGVtYW5kIGZhaWxlZFxuIik7CiAJCQkJZGJzX2VuYWJsZS0tOwogCQkJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJCQlyZXR1cm4gLUVOT1NQQzsKIAkJCX0KIAkJfQorCisJCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwb2xpY3ktPmtvYmosICZkYnNfYXR0cl9ncm91cCk7CisJCWlmIChyYykgeworCQkJaWYgKGRic19lbmFibGUgPT0gMSkKKwkJCQlkZXN0cm95X3dvcmtxdWV1ZShrb25kZW1hbmRfd3EpOworCQkJZGJzX2VuYWJsZS0tOworCQkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOworCQkJcmV0dXJuIHJjOworCQl9CisKIAkJZm9yX2VhY2hfY3B1X21hc2soaiwgcG9saWN5LT5jcHVzKSB7CiAJCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJzX2luZm87CiAJCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKQEAgLTUwOSw3ICs1MzEsNiBAQAogCQkJal9kYnNfaW5mby0+cHJldl9jcHVfd2FsbCA9IGdldF9qaWZmaWVzXzY0KCk7CiAJCX0KIAkJdGhpc19kYnNfaW5mby0+ZW5hYmxlID0gMTsKLQkJc3lzZnNfY3JlYXRlX2dyb3VwKCZwb2xpY3ktPmtvYmosICZkYnNfYXR0cl9ncm91cCk7CiAJCS8qCiAJCSAqIFN0YXJ0IHRoZSB0aW1lcnNjaGVkdWxlIHdvcmssIHdoZW4gdGhpcyBnb3Zlcm5vcgogCQkgKiBpcyB1c2VkIGZvciBmaXJzdCB0aW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9wZXJmb3JtYW5jZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfcGVyZm9ybWFuY2UuYwppbmRleCBkZTkxZTMzLi5lOGUxNDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9wZXJmb3JtYW5jZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3BlcmZvcm1hbmNlLmMKQEAgLTE1LDcgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0dPVkVSTk9SLCAicGVyZm9ybWFuY2UiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBcCisJY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19HT1ZFUk5PUiwgInBlcmZvcm1hbmNlIiwgbXNnKQogCiAKIHN0YXRpYyBpbnQgY3B1ZnJlcV9nb3Zlcm5vcl9wZXJmb3JtYW5jZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKQEAgLTI0LDggKzI1LDEwIEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1BVRlJFUV9HT1ZfU1RBUlQ6CiAJY2FzZSBDUFVGUkVRX0dPVl9MSU1JVFM6Ci0JCWRwcmludGsoInNldHRpbmcgdG8gJXUga0h6IGJlY2F1c2Ugb2YgZXZlbnQgJXVcbiIsIHBvbGljeS0+bWF4LCBldmVudCk7Ci0JCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgcG9saWN5LT5tYXgsIENQVUZSRVFfUkVMQVRJT05fSCk7CisJCWRwcmludGsoInNldHRpbmcgdG8gJXUga0h6IGJlY2F1c2Ugb2YgZXZlbnQgJXVcbiIsCisJCQkJCQlwb2xpY3ktPm1heCwgZXZlbnQpOworCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIHBvbGljeS0+bWF4LAorCQkJCQkJQ1BVRlJFUV9SRUxBVElPTl9IKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9wb3dlcnNhdmUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3Bvd2Vyc2F2ZS5jCmluZGV4IDBhMjU5NjAuLjEzZmUwNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3Bvd2Vyc2F2ZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3Bvd2Vyc2F2ZS5jCkBAIC0xNSw3ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19HT1ZFUk5PUiwgInBvd2Vyc2F2ZSIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIFwKKwljcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0dPVkVSTk9SLCAicG93ZXJzYXZlIiwgbXNnKQogCiBzdGF0aWMgaW50IGNwdWZyZXFfZ292ZXJub3JfcG93ZXJzYXZlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJCQl1bnNpZ25lZCBpbnQgZXZlbnQpCkBAIC0yMyw4ICsyNCwxMCBAQAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIENQVUZSRVFfR09WX1NUQVJUOgogCWNhc2UgQ1BVRlJFUV9HT1ZfTElNSVRTOgotCQlkcHJpbnRrKCJzZXR0aW5nIHRvICV1IGtIeiBiZWNhdXNlIG9mIGV2ZW50ICV1XG4iLCBwb2xpY3ktPm1pbiwgZXZlbnQpOwotCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIHBvbGljeS0+bWluLCBDUFVGUkVRX1JFTEFUSU9OX0wpOworCQlkcHJpbnRrKCJzZXR0aW5nIHRvICV1IGtIeiBiZWNhdXNlIG9mIGV2ZW50ICV1XG4iLAorCQkJCQkJCXBvbGljeS0+bWluLCBldmVudCk7CisJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgcG9saWN5LT5taW4sCisJCQkJCQlDUFVGUkVRX1JFTEFUSU9OX0wpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCmluZGV4IGMyZWNjNTkuLjkxYWQzNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwpAQCAtMjg1LDYgKzI4NSw3IEBACiAJc3RhdCA9IGNwdWZyZXFfc3RhdHNfdGFibGVbZnJlcS0+Y3B1XTsKIAlpZiAoIXN0YXQpCiAJCXJldHVybiAwOworCiAJb2xkX2luZGV4ID0gZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RhdCwgZnJlcS0+b2xkKTsKIAluZXdfaW5kZXggPSBmcmVxX3RhYmxlX2dldF9pbmRleChzdGF0LCBmcmVxLT5uZXcpOwogCkBAIC0yOTIsNiArMjkzLDkgQEAKIAlpZiAob2xkX2luZGV4ID09IG5ld19pbmRleCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAob2xkX2luZGV4ID09IC0xIHx8IG5ld19pbmRleCA9PSAtMSkKKwkJcmV0dXJuIDA7CisKIAlzcGluX2xvY2soJmNwdWZyZXFfc3RhdHNfbG9jayk7CiAJc3RhdC0+bGFzdF9pbmRleCA9IG5ld19pbmRleDsKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTCkBAIC0zNTEsOCArMzU1LDggQEAKIAogCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmY3B1ZnJlcV9zdGF0X2NwdV9ub3RpZmllcik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJY3B1ZnJlcV9zdGF0X2NwdV9jYWxsYmFjaygmY3B1ZnJlcV9zdGF0X2NwdV9ub3RpZmllciwgQ1BVX09OTElORSwKLQkJCSh2b2lkICopKGxvbmcpY3B1KTsKKwkJY3B1ZnJlcV9zdGF0X2NwdV9jYWxsYmFjaygmY3B1ZnJlcV9zdGF0X2NwdV9ub3RpZmllciwKKwkJCQlDUFVfT05MSU5FLCAodm9pZCAqKShsb25nKWNwdSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMzY4LDE0ICszNzIsMTUgQEAKIAl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmY3B1ZnJlcV9zdGF0X2NwdV9ub3RpZmllcik7CiAJbG9ja19jcHVfaG90cGx1ZygpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCWNwdWZyZXFfc3RhdF9jcHVfY2FsbGJhY2soJmNwdWZyZXFfc3RhdF9jcHVfbm90aWZpZXIsIENQVV9ERUFELAotCQkJKHZvaWQgKikobG9uZyljcHUpOworCQljcHVmcmVxX3N0YXRfY3B1X2NhbGxiYWNrKCZjcHVmcmVxX3N0YXRfY3B1X25vdGlmaWVyLAorCQkJCQkJQ1BVX0RFQUQsICh2b2lkICopKGxvbmcpY3B1KTsKIAl9CiAJdW5sb2NrX2NwdV9ob3RwbHVnKCk7CiB9CiAKIE1PRFVMRV9BVVRIT1IgKCJab3UgTmFuIGhhaSA8bmFuaGFpLnpvdUBpbnRlbC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCInY3B1ZnJlcV9zdGF0cycgLSBBIGRyaXZlciB0byBleHBvcnQgY3B1ZnJlcSBzdGF0cyB0aHJvdWdoIHN5c2ZzIGZpbGVzeXN0ZW0iKTsKK01PRFVMRV9ERVNDUklQVElPTiAoIidjcHVmcmVxX3N0YXRzJyAtIEEgZHJpdmVyIHRvIGV4cG9ydCBjcHVmcmVxIHN0YXRzIgorCQkJCSJ0aHJvdWdoIHN5c2ZzIGZpbGVzeXN0ZW0iKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGNwdWZyZXFfc3RhdHNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCmluZGV4IGEwNmMyMDQuLjJhNGViMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCkBAIC0xMzEsMTkgKzEzMSwyNiBAQAogCQkJCSAgIHVuc2lnbmVkIGludCBldmVudCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7CisJaW50IHJjID0gMDsKKwogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIENQVUZSRVFfR09WX1NUQVJUOgogCQlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlCVUdfT04oIXBvbGljeS0+Y3VyKTsKIAkJbXV0ZXhfbG9jaygmdXNlcnNwYWNlX211dGV4KTsKKwkJcmMgPSBzeXNmc19jcmVhdGVfZmlsZSAoJnBvbGljeS0+a29iaiwKKwkJCQkJJmZyZXFfYXR0cl9zY2FsaW5nX3NldHNwZWVkLmF0dHIpOworCQlpZiAocmMpCisJCQlnb3RvIHN0YXJ0X291dDsKKwogCQljcHVfaXNfbWFuYWdlZFtjcHVdID0gMTsKIAkJY3B1X21pbl9mcmVxW2NwdV0gPSBwb2xpY3ktPm1pbjsKIAkJY3B1X21heF9mcmVxW2NwdV0gPSBwb2xpY3ktPm1heDsKIAkJY3B1X2N1cl9mcmVxW2NwdV0gPSBwb2xpY3ktPmN1cjsKIAkJY3B1X3NldF9mcmVxW2NwdV0gPSBwb2xpY3ktPmN1cjsKLQkJc3lzZnNfY3JlYXRlX2ZpbGUgKCZwb2xpY3ktPmtvYmosICZmcmVxX2F0dHJfc2NhbGluZ19zZXRzcGVlZC5hdHRyKTsKIAkJZHByaW50aygibWFuYWdpbmcgY3B1ICV1IHN0YXJ0ZWQgKCV1IC0gJXUga0h6LCBjdXJyZW50bHkgJXUga0h6KVxuIiwgY3B1LCBjcHVfbWluX2ZyZXFbY3B1XSwgY3B1X21heF9mcmVxW2NwdV0sIGNwdV9jdXJfZnJlcVtjcHVdKTsKK3N0YXJ0X291dDoKIAkJbXV0ZXhfdW5sb2NrKCZ1c2Vyc3BhY2VfbXV0ZXgpOwogCQlicmVhazsKIAljYXNlIENQVUZSRVFfR09WX1NUT1A6CkBAIC0xODAsNyArMTg3LDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZ1c2Vyc3BhY2VfbXV0ZXgpOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMgYi9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCmluZGV4IDU1MWY0Y2MuLmU3NDkwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYwpAQCAtOSw3ICs5LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0NPUkUsICJmcmVxLXRhYmxlIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgXAorCWNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfQ09SRSwgImZyZXEtdGFibGUiLCBtc2cpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgRlJFUVVFTkNZIFRBQkxFIEhFTFBFUlMgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTI5LDcgKzMwLDggQEAKIAogCQkJY29udGludWU7CiAJCX0KLQkJZHByaW50aygidGFibGUgZW50cnkgJXU6ICV1IGtIeiwgJXUgaW5kZXhcbiIsIGksIGZyZXEsIHRhYmxlW2ldLmluZGV4KTsKKwkJZHByaW50aygidGFibGUgZW50cnkgJXU6ICV1IGtIeiwgJXUgaW5kZXhcbiIsCisJCQkJCWksIGZyZXEsIHRhYmxlW2ldLmluZGV4KTsKIAkJaWYgKGZyZXEgPCBtaW5fZnJlcSkKIAkJCW1pbl9mcmVxID0gZnJlcTsKIAkJaWYgKGZyZXEgPiBtYXhfZnJlcSkKQEAgLTU0LDEzICs1NiwxNCBAQAogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CiAKLQlkcHJpbnRrKCJyZXF1ZXN0IGZvciB2ZXJpZmljYXRpb24gb2YgcG9saWN5ICgldSAtICV1IGtIeikgZm9yIGNwdSAldVxuIiwgcG9saWN5LT5taW4sIHBvbGljeS0+bWF4LCBwb2xpY3ktPmNwdSk7CisJZHByaW50aygicmVxdWVzdCBmb3IgdmVyaWZpY2F0aW9uIG9mIHBvbGljeSAoJXUgLSAldSBrSHopIGZvciBjcHUgJXVcbiIsCisJCQkJCXBvbGljeS0+bWluLCBwb2xpY3ktPm1heCwgcG9saWN5LT5jcHUpOwogCiAJaWYgKCFjcHVfb25saW5lKHBvbGljeS0+Y3B1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwKLQkJCQkgICAgIHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSwgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKKwljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxLAorCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKIAogCWZvciAoaT0wOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVlbmN5OwpAQCAtNzUsMTAgKzc4LDExIEBACiAJaWYgKCFjb3VudCkKIAkJcG9saWN5LT5tYXggPSBuZXh0X2xhcmdlcjsKIAotCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LAotCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxLCBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEpOworCWNwdWZyZXFfdmVyaWZ5X3dpdGhpbl9saW1pdHMocG9saWN5LCBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEsCisJCQkJICAgICBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEpOwogCi0JZHByaW50aygidmVyaWZpY2F0aW9uIGxlYWQgdG8gKCV1IC0gJXUga0h6KSBmb3IgY3B1ICV1XG4iLCBwb2xpY3ktPm1pbiwgcG9saWN5LT5tYXgsIHBvbGljeS0+Y3B1KTsKKwlkcHJpbnRrKCJ2ZXJpZmljYXRpb24gbGVhZCB0byAoJXUgLSAldSBrSHopIGZvciBjcHUgJXVcbiIsCisJCQkJcG9saWN5LT5taW4sIHBvbGljeS0+bWF4LCBwb2xpY3ktPmNwdSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMSw3ICsxMDUsOCBAQAogCX07CiAJdW5zaWduZWQgaW50IGk7CiAKLQlkcHJpbnRrKCJyZXF1ZXN0IGZvciB0YXJnZXQgJXUga0h6IChyZWxhdGlvbjogJXUpIGZvciBjcHUgJXVcbiIsIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgcG9saWN5LT5jcHUpOworCWRwcmludGsoInJlcXVlc3QgZm9yIHRhcmdldCAldSBrSHogKHJlbGF0aW9uOiAldSkgZm9yIGNwdSAldVxuIiwKKwkJCQkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCBwb2xpY3ktPmNwdSk7CiAKIAlzd2l0Y2ggKHJlbGF0aW9uKSB7CiAJY2FzZSBDUFVGUkVRX1JFTEFUSU9OX0g6CkBAIC0xOTIsNyArMTk3LDEwIEBACiB9CiAKIHN0cnVjdCBmcmVxX2F0dHIgY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMgPSB7Ci0JLmF0dHIgPSB7IC5uYW1lID0gInNjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIiwgLm1vZGUgPSAwNDQ0LCAub3duZXI9VEhJU19NT0RVTEUgfSwKKwkuYXR0ciA9IHsgLm5hbWUgPSAic2NhbGluZ19hdmFpbGFibGVfZnJlcXVlbmNpZXMiLAorCQkgIC5tb2RlID0gMDQ0NCwKKwkJICAub3duZXI9VEhJU19NT0RVTEUKKwkJfSwKIAkuc2hvdyA9IHNob3dfYXZhaWxhYmxlX2ZyZXFzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL0tjb25maWcgYi9kcml2ZXJzL2NyeXB0by9LY29uZmlnCmluZGV4IGU4MTY1MzUuLjg3OTI1MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKKysrIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwpAQCAtNTMsNyArNTMsNyBAQAogCiBjb25maWcgQ1JZUFRPX0RFVl9HRU9ERQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aGUgR2VvZGUgTFggQUVTIGVuZ2luZSIKLQlkZXBlbmRzIG9uIENSWVBUTyAmJiBYODZfMzIKKwlkZXBlbmRzIG9uIENSWVBUTyAmJiBYODZfMzIgJiYgUENJCiAJc2VsZWN0IENSWVBUT19BTEdBUEkKIAlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgogCWRlZmF1bHQgbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9mYzQvZmMuYyBiL2RyaXZlcnMvZmM0L2ZjLmMKaW5kZXggY2E0ZTY3YS4uMjJiNjJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9mYzQvZmMuYworKysgYi9kcml2ZXJzL2ZjNC9mYy5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIAkJCXByaW50ayAoIkZDOiBCYWQgbWFnaWMgZnJvbSBSRVBPUlRfQUxfTUFQIG9uICVzIC0gJTA4eFxuIiwgZmMtPm5hbWUsIHAtPm1hZ2ljKTsKIAkJCWZjLT5zdGF0ZSA9IEZDX1NUQVRFX09GRkxJTkU7CiAJCX0gZWxzZSB7Ci0JCQlmYy0+cG9zbWFwID0gKGZjcF9wb3NtYXAgKilremFsbG9jKHNpemVvZihmY3BfcG9zbWFwKStwLT5sZW4sIEdGUF9LRVJORUwpOworCQkJZmMtPnBvc21hcCA9IGt6YWxsb2Moc2l6ZW9mKGZjcF9wb3NtYXApK3AtPmxlbiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWZjLT5wb3NtYXApIHsKIAkJCQlwcmludGsoIkZDOiBOb3QgZW5vdWdoIG1lbW9yeSwgb2ZmbGluaW5nIGNoYW5uZWxcbiIpOwogCQkJCWZjLT5zdGF0ZSA9IEZDX1NUQVRFX09GRkxJTkU7CkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJCWZvciAoaSA9IGZjLT5jYW5fcXVldWU7IGkgPCBmYy0+c2NzaV9iaXRtYXBfZW5kOyBpKyspCiAJCQkJc2V0X2JpdCAoaSwgZmMtPnNjc2lfYml0bWFwKTsKIAkJCWZjLT5zY3NpX2ZyZWUgPSBmYy0+Y2FuX3F1ZXVlOwotCQkJZmMtPmNtZF9zbG90cyA9IChmY3BfY21uZCAqKilremFsbG9jKHNsb3RzICogc2l6ZW9mKGZjcF9jbW5kKiksIEdGUF9LRVJORUwpOworCQkJZmMtPmNtZF9zbG90cyA9IGt6YWxsb2Moc2xvdHMgKiBzaXplb2YoZmNwX2NtbmQqKSwgR0ZQX0tFUk5FTCk7CiAJCQlmYy0+YWJvcnRfY291bnQgPSAwOwogCQl9IGVsc2UgewogCQkJZmMtPnNjc2lfbmFtZVswXSA9IDA7CkBAIC05MzMsNyArOTMzLDcgQEAKICAgICAgICAgREVDTEFSRV9NVVRFWF9MT0NLRUQoc2VtKTsKIAogCWlmICghZmMtPnJzdF9wa3QpIHsKLQkJZmMtPnJzdF9wa3QgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBrbWFsbG9jKHNpemVvZihTQ3BudCksIEdGUF9LRVJORUwpOworCQlmYy0+cnN0X3BrdCA9IGttYWxsb2Moc2l6ZW9mKFNDcG50KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZmMtPnJzdF9wa3QpIHJldHVybiBGQUlMRUQ7CiAJCQogCQlmY21kID0gRkNQX0NNTkQoZmMtPnJzdF9wa3QpOwpAQCAtMTEwNyw3ICsxMTA3LDcgQEAKIAlsb2dpICpsOwogCWludCBzdGF0dXM7CiAKLQlsID0gKGxvZ2kgKilremFsbG9jKDIgKiBzaXplb2YobG9naSksIEdGUF9LRVJORUwpOworCWwgPSBremFsbG9jKDIgKiBzaXplb2YobG9naSksIEdGUF9LRVJORUwpOwogCWlmICghbCkgcmV0dXJuIC1FTk9NRU07CiAJbC0+Y29kZSA9IExTX1BMT0dJOwogCW1lbWNweSAoJmwtPm5wb3J0X3d3biwgJmZjLT53d25fbnBvcnQsIHNpemVvZihmY193d24pKTsKQEAgLTExNDEsNyArMTE0MSw3IEBACiAJcHJsaSAqcDsKIAlpbnQgc3RhdHVzOwogCi0JcCA9IChwcmxpICopa3phbGxvYygyICogc2l6ZW9mKHBybGkpLCBHRlBfS0VSTkVMKTsKKwlwID0ga3phbGxvYygyICogc2l6ZW9mKHBybGkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXApIHJldHVybiAtRU5PTUVNOwogCXAtPmNvZGUgPSBMU19QUkxJOwogCXAtPnBhcmFtc1swXSA9IDB4MDgwMDIwMDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaXZhcnMuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jCmluZGV4IDVhYjVlMzkuLmM2MjgxY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jCkBAIC0xMjIsOCArMTIyLDYgQEAKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwogfTsKIAotI2RlZmluZSBnZXRfZWZpdmFyX2VudHJ5KG4pIGxpc3RfZW50cnkobiwgc3RydWN0IGVmaXZhcl9lbnRyeSwgbGlzdCkKLQogc3RydWN0IGVmaXZhcl9hdHRyaWJ1dGUgewogCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKIAlzc2l6ZV90ICgqc2hvdykgKHN0cnVjdCBlZml2YXJfZW50cnkgKmVudHJ5LCBjaGFyICpidWYpOwpAQCAtMzg2LDkgKzM4NCw2IEBACiBzdGF0aWMgdm9pZCBlZml2YXJfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKIAlzdHJ1Y3QgZWZpdmFyX2VudHJ5ICp2YXIgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGVmaXZhcl9lbnRyeSwga29iaik7Ci0Jc3Bpbl9sb2NrKCZlZml2YXJzX2xvY2spOwotCWxpc3RfZGVsKCZ2YXItPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZlZml2YXJzX2xvY2spOwogCWtmcmVlKHZhcik7CiB9CiAKQEAgLTQzMCw5ICs0MjUsOCBAQAogZWZpdmFyX2NyZWF0ZShzdHJ1Y3Qgc3Vic3lzdGVtICpzdWIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBlZmlfdmFyaWFibGUgKm5ld192YXIgPSAoc3RydWN0IGVmaV92YXJpYWJsZSAqKWJ1ZjsKLQlzdHJ1Y3QgZWZpdmFyX2VudHJ5ICpzZWFyY2hfZWZpdmFyID0gTlVMTDsKKwlzdHJ1Y3QgZWZpdmFyX2VudHJ5ICpzZWFyY2hfZWZpdmFyLCAqbjsKIAl1bnNpZ25lZCBsb25nIHN0cnNpemUxLCBzdHJzaXplMjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuOwogCWVmaV9zdGF0dXNfdCBzdGF0dXMgPSBFRklfTk9UX0ZPVU5EOwogCWludCBmb3VuZCA9IDA7CiAKQEAgLTQ0NCw4ICs0MzgsNyBAQAogCS8qCiAJICogRG9lcyB0aGlzIHZhcmlhYmxlIGFscmVhZHkgZXhpc3Q/CiAJICovCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbiwgJmVmaXZhcl9saXN0KSB7Ci0JCXNlYXJjaF9lZml2YXIgPSBnZXRfZWZpdmFyX2VudHJ5KHBvcyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNlYXJjaF9lZml2YXIsIG4sICZlZml2YXJfbGlzdCwgbGlzdCkgewogCQlzdHJzaXplMSA9IHV0Zjhfc3Ryc2l6ZShzZWFyY2hfZWZpdmFyLT52YXIuVmFyaWFibGVOYW1lLCAxMDI0KTsKIAkJc3Ryc2l6ZTIgPSB1dGY4X3N0cnNpemUobmV3X3Zhci0+VmFyaWFibGVOYW1lLCAxMDI0KTsKIAkJaWYgKHN0cnNpemUxID09IHN0cnNpemUyICYmCkBAIC00OTAsOSArNDgzLDggQEAKIGVmaXZhcl9kZWxldGUoc3RydWN0IHN1YnN5c3RlbSAqc3ViLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZWZpX3ZhcmlhYmxlICpkZWxfdmFyID0gKHN0cnVjdCBlZmlfdmFyaWFibGUgKilidWY7Ci0Jc3RydWN0IGVmaXZhcl9lbnRyeSAqc2VhcmNoX2VmaXZhciA9IE5VTEw7CisJc3RydWN0IGVmaXZhcl9lbnRyeSAqc2VhcmNoX2VmaXZhciwgKm47CiAJdW5zaWduZWQgbG9uZyBzdHJzaXplMSwgc3Ryc2l6ZTI7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbjsKIAllZmlfc3RhdHVzX3Qgc3RhdHVzID0gRUZJX05PVF9GT1VORDsKIAlpbnQgZm91bmQgPSAwOwogCkBAIC01MDQsOCArNDk2LDcgQEAKIAkvKgogCSAqIERvZXMgdGhpcyB2YXJpYWJsZSBhbHJlYWR5IGV4aXN0PwogCSAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG4sICZlZml2YXJfbGlzdCkgewotCQlzZWFyY2hfZWZpdmFyID0gZ2V0X2VmaXZhcl9lbnRyeShwb3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZWFyY2hfZWZpdmFyLCBuLCAmZWZpdmFyX2xpc3QsIGxpc3QpIHsKIAkJc3Ryc2l6ZTEgPSB1dGY4X3N0cnNpemUoc2VhcmNoX2VmaXZhci0+dmFyLlZhcmlhYmxlTmFtZSwgMTAyNCk7CiAJCXN0cnNpemUyID0gdXRmOF9zdHJzaXplKGRlbF92YXItPlZhcmlhYmxlTmFtZSwgMTAyNCk7CiAJCWlmIChzdHJzaXplMSA9PSBzdHJzaXplMiAmJgpAQCAtNTM3LDkgKzUyOCw5IEBACiAJCXNwaW5fdW5sb2NrKCZlZml2YXJzX2xvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9CisJbGlzdF9kZWwoJnNlYXJjaF9lZml2YXItPmxpc3QpOwogCS8qIFdlIG5lZWQgdG8gcmVsZWFzZSB0aGlzIGxvY2sgYmVmb3JlIHVucmVnaXN0ZXJpbmcuICovCiAJc3Bpbl91bmxvY2soJmVmaXZhcnNfbG9jayk7Ci0KIAllZml2YXJfdW5yZWdpc3RlcihzZWFyY2hfZWZpdmFyKTsKIAogCS8qIEl0J3MgZGVhZCBKaW0uLi4uICovCkBAIC03NjgsMTAgKzc1OSwxNCBAQAogc3RhdGljIHZvaWQgX19leGl0CiBlZml2YXJzX2V4aXQodm9pZCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuOworCXN0cnVjdCBlZml2YXJfZW50cnkgKmVudHJ5LCAqbjsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG4sICZlZml2YXJfbGlzdCkKLQkJZWZpdmFyX3VucmVnaXN0ZXIoZ2V0X2VmaXZhcl9lbnRyeShwb3MpKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG4sICZlZml2YXJfbGlzdCwgbGlzdCkgeworCQlzcGluX2xvY2soJmVmaXZhcnNfbG9jayk7CisJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrKCZlZml2YXJzX2xvY2spOworCQllZml2YXJfdW5yZWdpc3RlcihlbnRyeSk7CisJfQogCiAJc3Vic3lzdGVtX3VucmVnaXN0ZXIoJnZhcnNfc3Vic3lzKTsKIAlmaXJtd2FyZV91bnJlZ2lzdGVyKCZlZmlfc3Vic3lzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNzk2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgSElEIGRyaXZlciBjb25maWd1cmF0aW9uCisjCittZW51ICJISUQgRGV2aWNlcyIKKwlkZXBlbmRzIG9uIElOUFVUCisKK2NvbmZpZyBISUQKKwl0cmlzdGF0ZSAiR2VuZXJpYyBISUQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElOUFVUCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgQSBodW1hbiBpbnRlcmZhY2UgZGV2aWNlIChISUQpIGlzIGEgdHlwZSBvZiBjb21wdXRlciBkZXZpY2UgdGhhdAorCSAgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggYW5kIHRha2VzIGlucHV0IGZyb20gaHVtYW5zLiBUaGUgdGVybSAiSElEIgorCSAgbW9zdCBjb21tb25seSB1c2VkIHRvIHJlZmVyIHRvIHRoZSBVU0ItSElEIHNwZWNpZmljYXRpb24sIGJ1dCBvdGhlcgorCSAgZGV2aWNlcyAoc3VjaCBhcywgYnV0IG5vdCBzdHJpY3RseSBsaW1pdGVkIHRvLCBCbHVldG9vdGgpIGFyZQorCSAgZGVzaWduZWQgdXNpbmcgSElEIHNwZWNpZmljYXRpb24gKHRoaXMgaW52b2x2ZXMgY2VydGFpbiBrZXlib2FyZHMsCisJICBtaWNlLCB0YWJsZXRzLCBldGMpLiBUaGlzIG9wdGlvbiBjb21waWxlcyBpbnRvIGtlcm5lbCB0aGUgZ2VuZXJpYworCSAgSElEIGxheWVyIGNvZGUgKHBhcnNlciwgdXNhZ2VzLCBldGMuKSwgd2hpY2ggY2FuIHRoZW4gYmUgdXNlZCBieQorCSAgdHJhbnNwb3J0LXNwZWNpZmljIEhJRCBpbXBsZW1lbnRhdGlvbiAobGlrZSBVU0Igb3IgQmx1ZXRvb3RoKS4KKworCSAgRm9yIGRvY3MgYW5kIHNwZWNzLCBzZWUgaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvaGlkcGFnZS8KKworCSAgSWYgdW5zdXJlLCBzYXkgWQorCitlbmRtZW51CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL01ha2VmaWxlIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzMjM5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBISUQgZHJpdmVyCisjCisKKyMgTXVsdGlwYXJ0IG9iamVjdHMuCitoaWQtb2Jqcwk6PSBoaWQtY29yZS5vIGhpZC1pbnB1dC5vCisKKyMgT3B0aW9uYWwgcGFydHMgb2YgbXVsdGlwYXJ0IG9iamVjdHMuCisKK29iai0kKENPTkZJR19ISUQpCQkrPSBoaWQubworCitpZmVxICgkKENPTkZJR19JTlBVVF9ERUJVRykseSkKK0VYVFJBX0NGTEFHUyArPSAtRERFQlVHCitlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWYxOGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMCwwICsxLDEwMDAgQEAKKy8qCisgKiAgSElEIHN1cHBvcnQgZm9yIExpbnV4CisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2IEppcmkgS29zaW5hCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI3VuZGVmIERFQlVHCisjdW5kZWYgREVCVUdfREFUQQorCisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvaGlkZGV2Lmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuNiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQW5kcmVhcyBHYWwsIFZvanRlY2ggUGF2bGlrIgorI2RlZmluZSBEUklWRVJfREVTQyAiSElEIGNvcmUgZHJpdmVyIgorI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgorCisvKgorICogUmVnaXN0ZXIgYSBuZXcgcmVwb3J0IGZvciBhIGRldmljZS4KKyAqLworCitzdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQgKmhpZF9yZWdpc3Rlcl9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgaWQpCit7CisJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW0gPSBkZXZpY2UtPnJlcG9ydF9lbnVtICsgdHlwZTsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCisJaWYgKHJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtpZF0pCisJCXJldHVybiByZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbaWRdOworCisJaWYgKCEocmVwb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9yZXBvcnQpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKGlkICE9IDApCisJCXJlcG9ydF9lbnVtLT5udW1iZXJlZCA9IDE7CisKKwlyZXBvcnQtPmlkID0gaWQ7CisJcmVwb3J0LT50eXBlID0gdHlwZTsKKwlyZXBvcnQtPnNpemUgPSAwOworCXJlcG9ydC0+ZGV2aWNlID0gZGV2aWNlOworCXJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtpZF0gPSByZXBvcnQ7CisKKwlsaXN0X2FkZF90YWlsKCZyZXBvcnQtPmxpc3QsICZyZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QpOworCisJcmV0dXJuIHJlcG9ydDsKK30KKworLyoKKyAqIFJlZ2lzdGVyIGEgbmV3IGZpZWxkIGZvciB0aGlzIHJlcG9ydC4KKyAqLworCitzdGF0aWMgc3RydWN0IGhpZF9maWVsZCAqaGlkX3JlZ2lzdGVyX2ZpZWxkKHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIHVuc2lnbmVkIHVzYWdlcywgdW5zaWduZWQgdmFsdWVzKQoreworCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCisJaWYgKHJlcG9ydC0+bWF4ZmllbGQgPT0gSElEX01BWF9GSUVMRFMpIHsKKwkJZGJnKCJ0b28gbWFueSBmaWVsZHMgaW4gcmVwb3J0Iik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICghKGZpZWxkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9maWVsZCkgKyB1c2FnZXMgKiBzaXplb2Yoc3RydWN0IGhpZF91c2FnZSkKKwkJKyB2YWx1ZXMgKiBzaXplb2YodW5zaWduZWQpLCBHRlBfS0VSTkVMKSkpIHJldHVybiBOVUxMOworCisJZmllbGQtPmluZGV4ID0gcmVwb3J0LT5tYXhmaWVsZCsrOworCXJlcG9ydC0+ZmllbGRbZmllbGQtPmluZGV4XSA9IGZpZWxkOworCWZpZWxkLT51c2FnZSA9IChzdHJ1Y3QgaGlkX3VzYWdlICopKGZpZWxkICsgMSk7CisJZmllbGQtPnZhbHVlID0gKHVuc2lnbmVkICopKGZpZWxkLT51c2FnZSArIHVzYWdlcyk7CisJZmllbGQtPnJlcG9ydCA9IHJlcG9ydDsKKworCXJldHVybiBmaWVsZDsKK30KKworLyoKKyAqIE9wZW4gYSBjb2xsZWN0aW9uLiBUaGUgdHlwZS91c2FnZSBpcyBwdXNoZWQgb24gdGhlIHN0YWNrLgorICovCisKK3N0YXRpYyBpbnQgb3Blbl9jb2xsZWN0aW9uKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHVuc2lnbmVkIHR5cGUpCit7CisJc3RydWN0IGhpZF9jb2xsZWN0aW9uICpjb2xsZWN0aW9uOworCXVuc2lnbmVkIHVzYWdlOworCisJdXNhZ2UgPSBwYXJzZXItPmxvY2FsLnVzYWdlWzBdOworCisJaWYgKHBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgPT0gSElEX0NPTExFQ1RJT05fU1RBQ0tfU0laRSkgeworCQlkYmcoImNvbGxlY3Rpb24gc3RhY2sgb3ZlcmZsb3ciKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChwYXJzZXItPmRldmljZS0+bWF4Y29sbGVjdGlvbiA9PSBwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplKSB7CisJCWNvbGxlY3Rpb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKKwkJCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplICogMiwgR0ZQX0tFUk5FTCk7CisJCWlmIChjb2xsZWN0aW9uID09IE5VTEwpIHsKKwkJCWRiZygiZmFpbGVkIHRvIHJlYWxsb2NhdGUgY29sbGVjdGlvbiBhcnJheSIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCW1lbWNweShjb2xsZWN0aW9uLCBwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbiwKKwkJCXNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKKwkJCXBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUpOworCQltZW1zZXQoY29sbGVjdGlvbiArIHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUsIDAsCisJCQlzaXplb2Yoc3RydWN0IGhpZF9jb2xsZWN0aW9uKSAqCisJCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplKTsKKwkJa2ZyZWUocGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb24pOworCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCXBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUgKj0gMjsKKwl9CisKKwlwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tbcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0cisrXSA9CisJCXBhcnNlci0+ZGV2aWNlLT5tYXhjb2xsZWN0aW9uOworCisJY29sbGVjdGlvbiA9IHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uICsKKwkJcGFyc2VyLT5kZXZpY2UtPm1heGNvbGxlY3Rpb24rKzsKKwljb2xsZWN0aW9uLT50eXBlID0gdHlwZTsKKwljb2xsZWN0aW9uLT51c2FnZSA9IHVzYWdlOworCWNvbGxlY3Rpb24tPmxldmVsID0gcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ciAtIDE7CisKKwlpZiAodHlwZSA9PSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTikKKwkJcGFyc2VyLT5kZXZpY2UtPm1heGFwcGxpY2F0aW9uKys7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENsb3NlIGEgY29sbGVjdGlvbi4KKyAqLworCitzdGF0aWMgaW50IGNsb3NlX2NvbGxlY3Rpb24oc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlcikKK3sKKwlpZiAoIXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIpIHsKKwkJZGJnKCJjb2xsZWN0aW9uIHN0YWNrIHVuZGVyZmxvdyIpOworCQlyZXR1cm4gLTE7CisJfQorCXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHItLTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENsaW1iIHVwIHRoZSBzdGFjaywgc2VhcmNoIGZvciB0aGUgc3BlY2lmaWVkIGNvbGxlY3Rpb24gdHlwZQorICogYW5kIHJldHVybiB0aGUgdXNhZ2UuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGhpZF9sb29rdXBfY29sbGVjdGlvbihzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCB1bnNpZ25lZCB0eXBlKQoreworCWludCBuOworCWZvciAobiA9IHBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgLSAxOyBuID49IDA7IG4tLSkKKwkJaWYgKHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uW3BhcnNlci0+Y29sbGVjdGlvbl9zdGFja1tuXV0udHlwZSA9PSB0eXBlKQorCQkJcmV0dXJuIHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uW3BhcnNlci0+Y29sbGVjdGlvbl9zdGFja1tuXV0udXNhZ2U7CisJcmV0dXJuIDA7IC8qIHdlIGtub3cgbm90aGluZyBhYm91dCB0aGlzIHVzYWdlIHR5cGUgKi8KK30KKworLyoKKyAqIEFkZCBhIHVzYWdlIHRvIHRoZSB0ZW1wb3JhcnkgcGFyc2VyIHRhYmxlLgorICovCisKK3N0YXRpYyBpbnQgaGlkX2FkZF91c2FnZShzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCB1bnNpZ25lZCB1c2FnZSkKK3sKKwlpZiAocGFyc2VyLT5sb2NhbC51c2FnZV9pbmRleCA+PSBISURfTUFYX1VTQUdFUykgeworCQlkYmcoInVzYWdlIGluZGV4IGV4Y2VlZGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJcGFyc2VyLT5sb2NhbC51c2FnZVtwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4XSA9IHVzYWdlOworCXBhcnNlci0+bG9jYWwuY29sbGVjdGlvbl9pbmRleFtwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4XSA9CisJCXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgPworCQlwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tbcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ciAtIDFdIDogMDsKKwlwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4Kys7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWdpc3RlciBhIG5ldyBmaWVsZCBmb3IgdGhpcyByZXBvcnQuCisgKi8KKworc3RhdGljIGludCBoaWRfYWRkX2ZpZWxkKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHVuc2lnbmVkIHJlcG9ydF90eXBlLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCWludCB1c2FnZXM7CisJdW5zaWduZWQgb2Zmc2V0OworCWludCBpOworCisJaWYgKCEocmVwb3J0ID0gaGlkX3JlZ2lzdGVyX3JlcG9ydChwYXJzZXItPmRldmljZSwgcmVwb3J0X3R5cGUsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9pZCkpKSB7CisJCWRiZygiaGlkX3JlZ2lzdGVyX3JlcG9ydCBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21heGltdW0gPCBwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0pIHsKKwkJZGJnKCJsb2dpY2FsIHJhbmdlIGludmFsaWQgJWQgJWQiLCBwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0sIHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWF4aW11bSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlvZmZzZXQgPSByZXBvcnQtPnNpemU7CisJcmVwb3J0LT5zaXplICs9IHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplICogcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50OworCisJaWYgKCFwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4KSAvKiBJZ25vcmUgcGFkZGluZyBmaWVsZHMgKi8KKwkJcmV0dXJuIDA7CisKKwl1c2FnZXMgPSBtYXhfdChpbnQsIHBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXgsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCk7CisKKwlpZiAoKGZpZWxkID0gaGlkX3JlZ2lzdGVyX2ZpZWxkKHJlcG9ydCwgdXNhZ2VzLCBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQpKSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWZpZWxkLT5waHlzaWNhbCA9IGhpZF9sb29rdXBfY29sbGVjdGlvbihwYXJzZXIsIEhJRF9DT0xMRUNUSU9OX1BIWVNJQ0FMKTsKKwlmaWVsZC0+bG9naWNhbCA9IGhpZF9sb29rdXBfY29sbGVjdGlvbihwYXJzZXIsIEhJRF9DT0xMRUNUSU9OX0xPR0lDQUwpOworCWZpZWxkLT5hcHBsaWNhdGlvbiA9IGhpZF9sb29rdXBfY29sbGVjdGlvbihwYXJzZXIsIEhJRF9DT0xMRUNUSU9OX0FQUExJQ0FUSU9OKTsKKworCWZvciAoaSA9IDA7IGkgPCB1c2FnZXM7IGkrKykgeworCQlpbnQgaiA9IGk7CisJCS8qIER1cGxpY2F0ZSB0aGUgbGFzdCB1c2FnZSB3ZSBwYXJzZWQgaWYgd2UgaGF2ZSBleGNlc3MgdmFsdWVzICovCisJCWlmIChpID49IHBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXgpCisJCQlqID0gcGFyc2VyLT5sb2NhbC51c2FnZV9pbmRleCAtIDE7CisJCWZpZWxkLT51c2FnZVtpXS5oaWQgPSBwYXJzZXItPmxvY2FsLnVzYWdlW2pdOworCQlmaWVsZC0+dXNhZ2VbaV0uY29sbGVjdGlvbl9pbmRleCA9CisJCQlwYXJzZXItPmxvY2FsLmNvbGxlY3Rpb25faW5kZXhbal07CisJfQorCisJZmllbGQtPm1heHVzYWdlID0gdXNhZ2VzOworCWZpZWxkLT5mbGFncyA9IGZsYWdzOworCWZpZWxkLT5yZXBvcnRfb2Zmc2V0ID0gb2Zmc2V0OworCWZpZWxkLT5yZXBvcnRfdHlwZSA9IHJlcG9ydF90eXBlOworCWZpZWxkLT5yZXBvcnRfc2l6ZSA9IHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplOworCWZpZWxkLT5yZXBvcnRfY291bnQgPSBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQ7CisJZmllbGQtPmxvZ2ljYWxfbWluaW11bSA9IHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bTsKKwlmaWVsZC0+bG9naWNhbF9tYXhpbXVtID0gcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtOworCWZpZWxkLT5waHlzaWNhbF9taW5pbXVtID0gcGFyc2VyLT5nbG9iYWwucGh5c2ljYWxfbWluaW11bTsKKwlmaWVsZC0+cGh5c2ljYWxfbWF4aW11bSA9IHBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW07CisJZmllbGQtPnVuaXRfZXhwb25lbnQgPSBwYXJzZXItPmdsb2JhbC51bml0X2V4cG9uZW50OworCWZpZWxkLT51bml0ID0gcGFyc2VyLT5nbG9iYWwudW5pdDsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBkYXRhIHZhbHVlIGZyb20gaXRlbS4KKyAqLworCitzdGF0aWMgdTMyIGl0ZW1fdWRhdGEoc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCXN3aXRjaCAoaXRlbS0+c2l6ZSkgeworCQljYXNlIDE6IHJldHVybiBpdGVtLT5kYXRhLnU4OworCQljYXNlIDI6IHJldHVybiBpdGVtLT5kYXRhLnUxNjsKKwkJY2FzZSA0OiByZXR1cm4gaXRlbS0+ZGF0YS51MzI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgczMyIGl0ZW1fc2RhdGEoc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCXN3aXRjaCAoaXRlbS0+c2l6ZSkgeworCQljYXNlIDE6IHJldHVybiBpdGVtLT5kYXRhLnM4OworCQljYXNlIDI6IHJldHVybiBpdGVtLT5kYXRhLnMxNjsKKwkJY2FzZSA0OiByZXR1cm4gaXRlbS0+ZGF0YS5zMzI7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogUHJvY2VzcyBhIGdsb2JhbCBpdGVtLgorICovCisKK3N0YXRpYyBpbnQgaGlkX3BhcnNlcl9nbG9iYWwoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCXN3aXRjaCAoaXRlbS0+dGFnKSB7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BVU0g6CisKKwkJCWlmIChwYXJzZXItPmdsb2JhbF9zdGFja19wdHIgPT0gSElEX0dMT0JBTF9TVEFDS19TSVpFKSB7CisJCQkJZGJnKCJnbG9iYWwgZW52aXJvbWVudCBzdGFjayBvdmVyZmxvdyIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJbWVtY3B5KHBhcnNlci0+Z2xvYmFsX3N0YWNrICsgcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKyssCisJCQkJJnBhcnNlci0+Z2xvYmFsLCBzaXplb2Yoc3RydWN0IGhpZF9nbG9iYWwpKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QT1A6CisKKwkJCWlmICghcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKSB7CisJCQkJZGJnKCJnbG9iYWwgZW52aXJvbWVudCBzdGFjayB1bmRlcmZsb3ciKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCW1lbWNweSgmcGFyc2VyLT5nbG9iYWwsIHBhcnNlci0+Z2xvYmFsX3N0YWNrICsgLS1wYXJzZXItPmdsb2JhbF9zdGFja19wdHIsCisJCQkJc2l6ZW9mKHN0cnVjdCBoaWRfZ2xvYmFsKSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfVVNBR0VfUEFHRToKKwkJCXBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPSBpdGVtX3VkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX0xPR0lDQUxfTUlOSU1VTToKKwkJCXBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSA9IGl0ZW1fc2RhdGEoaXRlbSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfTE9HSUNBTF9NQVhJTVVNOgorCQkJaWYgKHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSA8IDApCisJCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJCWVsc2UKKwkJCQlwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21heGltdW0gPSBpdGVtX3VkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01JTklNVU06CisJCQlwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9taW5pbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QSFlTSUNBTF9NQVhJTVVNOgorCQkJaWYgKHBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21pbmltdW0gPCAwKQorCQkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOworCQkJZWxzZQorCQkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3VkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVRfRVhQT05FTlQ6CisJCQlwYXJzZXItPmdsb2JhbC51bml0X2V4cG9uZW50ID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19VTklUOgorCQkJcGFyc2VyLT5nbG9iYWwudW5pdCA9IGl0ZW1fdWRhdGEoaXRlbSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX1NJWkU6CisJCQlpZiAoKHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplID0gaXRlbV91ZGF0YShpdGVtKSkgPiAzMikgeworCQkJCWRiZygiaW52YWxpZCByZXBvcnRfc2l6ZSAlZCIsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX0NPVU5UOgorCQkJaWYgKChwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQgPSBpdGVtX3VkYXRhKGl0ZW0pKSA+IEhJRF9NQVhfVVNBR0VTKSB7CisJCQkJZGJnKCJpbnZhbGlkIHJlcG9ydF9jb3VudCAlZCIsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9JRDoKKwkJCWlmICgocGFyc2VyLT5nbG9iYWwucmVwb3J0X2lkID0gaXRlbV91ZGF0YShpdGVtKSkgPT0gMCkgeworCQkJCWRiZygicmVwb3J0X2lkIDAgaXMgaW52YWxpZCIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXJldHVybiAwOworCisJCWRlZmF1bHQ6CisJCQlkYmcoInVua25vd24gZ2xvYmFsIHRhZyAweCV4IiwgaXRlbS0+dGFnKTsKKwkJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qCisgKiBQcm9jZXNzIGEgbG9jYWwgaXRlbS4KKyAqLworCitzdGF0aWMgaW50IGhpZF9wYXJzZXJfbG9jYWwoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCV9fdTMyIGRhdGE7CisJdW5zaWduZWQgbjsKKworCWlmIChpdGVtLT5zaXplID09IDApIHsKKwkJZGJnKCJpdGVtIGRhdGEgZXhwZWN0ZWQgZm9yIGxvY2FsIGl0ZW0iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRhdGEgPSBpdGVtX3VkYXRhKGl0ZW0pOworCisJc3dpdGNoIChpdGVtLT50YWcpIHsKKworCQljYXNlIEhJRF9MT0NBTF9JVEVNX1RBR19ERUxJTUlURVI6CisKKwkJCWlmIChkYXRhKSB7CisJCQkJLyoKKwkJCQkgKiBXZSB0cmVhdCBpdGVtcyBiZWZvcmUgdGhlIGZpcnN0IGRlbGltaXRlcgorCQkJCSAqIGFzIGdsb2JhbCB0byBhbGwgdXNhZ2Ugc2V0cyAoYnJhbmNoIDApLgorCQkJCSAqIEluIHRoZSBtb21lbnQgd2UgcHJvY2VzcyBvbmx5IHRoZXNlIGdsb2JhbAorCQkJCSAqIGl0ZW1zIGFuZCB0aGUgZmlyc3QgZGVsaW1pdGVyIHNldC4KKwkJCQkgKi8KKwkJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGggIT0gMCkgeworCQkJCQlkYmcoIm5lc3RlZCBkZWxpbWl0ZXJzIik7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQkJcGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGgrKzsKKwkJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2grKzsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoIDwgMSkgeworCQkJCQlkYmcoImJvZ3VzIGNsb3NlIGRlbGltaXRlciIpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJCXBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoLS07CisJCQl9CisJCQlyZXR1cm4gMTsKKworCQljYXNlIEhJRF9MT0NBTF9JVEVNX1RBR19VU0FHRToKKworCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCA+IDEpIHsKKwkJCQlkYmcoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWQiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJaWYgKGl0ZW0tPnNpemUgPD0gMikKKwkJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKKworCQkJcmV0dXJuIGhpZF9hZGRfdXNhZ2UocGFyc2VyLCBkYXRhKTsKKworCQljYXNlIEhJRF9MT0NBTF9JVEVNX1RBR19VU0FHRV9NSU5JTVVNOgorCisJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoID4gMSkgeworCQkJCWRiZygiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZCIpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlpZiAoaXRlbS0+c2l6ZSA8PSAyKQorCQkJCWRhdGEgPSAocGFyc2VyLT5nbG9iYWwudXNhZ2VfcGFnZSA8PCAxNikgKyBkYXRhOworCisJCQlwYXJzZXItPmxvY2FsLnVzYWdlX21pbmltdW0gPSBkYXRhOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0VfTUFYSU1VTToKKworCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCA+IDEpIHsKKwkJCQlkYmcoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWQiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJaWYgKGl0ZW0tPnNpemUgPD0gMikKKwkJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKKworCQkJZm9yIChuID0gcGFyc2VyLT5sb2NhbC51c2FnZV9taW5pbXVtOyBuIDw9IGRhdGE7IG4rKykKKwkJCQlpZiAoaGlkX2FkZF91c2FnZShwYXJzZXIsIG4pKSB7CisJCQkJCWRiZygiaGlkX2FkZF91c2FnZSBmYWlsZWRcbiIpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJcmV0dXJuIDA7CisKKwkJZGVmYXVsdDoKKworCQkJZGJnKCJ1bmtub3duIGxvY2FsIGl0ZW0gdGFnIDB4JXgiLCBpdGVtLT50YWcpOworCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogUHJvY2VzcyBhIG1haW4gaXRlbS4KKyAqLworCitzdGF0aWMgaW50IGhpZF9wYXJzZXJfbWFpbihzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJX191MzIgZGF0YTsKKwlpbnQgcmV0OworCisJZGF0YSA9IGl0ZW1fdWRhdGEoaXRlbSk7CisKKwlzd2l0Y2ggKGl0ZW0tPnRhZykgeworCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0JFR0lOX0NPTExFQ1RJT046CisJCQlyZXQgPSBvcGVuX2NvbGxlY3Rpb24ocGFyc2VyLCBkYXRhICYgMHhmZik7CisJCQlicmVhazsKKwkJY2FzZSBISURfTUFJTl9JVEVNX1RBR19FTkRfQ09MTEVDVElPTjoKKwkJCXJldCA9IGNsb3NlX2NvbGxlY3Rpb24ocGFyc2VyKTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0lOUFVUOgorCQkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9JTlBVVF9SRVBPUlQsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfT1VUUFVUOgorCQkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9PVVRQVVRfUkVQT1JULCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0ZFQVRVUkU6CisJCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX0ZFQVRVUkVfUkVQT1JULCBkYXRhKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCJ1bmtub3duIG1haW4gaXRlbSB0YWcgMHgleCIsIGl0ZW0tPnRhZyk7CisJCQlyZXQgPSAwOworCX0KKworCW1lbXNldCgmcGFyc2VyLT5sb2NhbCwgMCwgc2l6ZW9mKHBhcnNlci0+bG9jYWwpKTsJLyogUmVzZXQgdGhlIGxvY2FsIHBhcnNlciBlbnZpcm9ubWVudCAqLworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFByb2Nlc3MgYSByZXNlcnZlZCBpdGVtLgorICovCisKK3N0YXRpYyBpbnQgaGlkX3BhcnNlcl9yZXNlcnZlZChzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJZGJnKCJyZXNlcnZlZCBpdGVtIHR5cGUsIHRhZyAweCV4IiwgaXRlbS0+dGFnKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZyZWUgYSByZXBvcnQgYW5kIGFsbCByZWdpc3RlcmVkIGZpZWxkcy4gVGhlIGZpZWxkLT51c2FnZSBhbmQKKyAqIGZpZWxkLT52YWx1ZSB0YWJsZSdzIGFyZSBhbGxvY2F0ZWQgYmVoaW5kIHRoZSBmaWVsZCwgc28gd2UgbmVlZAorICogb25seSB0byBmcmVlKGZpZWxkKSBpdHNlbGYuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX2ZyZWVfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQpCit7CisJdW5zaWduZWQgbjsKKworCWZvciAobiA9IDA7IG4gPCByZXBvcnQtPm1heGZpZWxkOyBuKyspCisJCWtmcmVlKHJlcG9ydC0+ZmllbGRbbl0pOworCWtmcmVlKHJlcG9ydCk7Cit9CisKKy8qCisgKiBGcmVlIGEgZGV2aWNlIHN0cnVjdHVyZSwgYWxsIHJlcG9ydHMsIGFuZCBhbGwgZmllbGRzLgorICovCisKK3ZvaWQgaGlkX2ZyZWVfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UpCit7CisJdW5zaWduZWQgaSxqOworCisJZm9yIChpID0gMDsgaSA8IEhJRF9SRVBPUlRfVFlQRVM7IGkrKykgeworCQlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bSA9IGRldmljZS0+cmVwb3J0X2VudW0gKyBpOworCisJCWZvciAoaiA9IDA7IGogPCAyNTY7IGorKykgeworCQkJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCA9IHJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtqXTsKKwkJCWlmIChyZXBvcnQpCisJCQkJaGlkX2ZyZWVfcmVwb3J0KHJlcG9ydCk7CisJCX0KKwl9CisKKwlrZnJlZShkZXZpY2UtPnJkZXNjKTsKKwlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCWtmcmVlKGRldmljZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChoaWRfZnJlZV9kZXZpY2UpOworCisvKgorICogRmV0Y2ggYSByZXBvcnQgZGVzY3JpcHRpb24gaXRlbSBmcm9tIHRoZSBkYXRhIHN0cmVhbS4gV2Ugc3VwcG9ydCBsb25nCisgKiBpdGVtcywgdGhvdWdoIHRoZXkgYXJlIG5vdCB1c2VkIHlldC4KKyAqLworCitzdGF0aWMgdTggKmZldGNoX2l0ZW0oX191OCAqc3RhcnQsIF9fdTggKmVuZCwgc3RydWN0IGhpZF9pdGVtICppdGVtKQoreworCXU4IGI7CisKKwlpZiAoKGVuZCAtIHN0YXJ0KSA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWIgPSAqc3RhcnQrKzsKKworCWl0ZW0tPnR5cGUgPSAoYiA+PiAyKSAmIDM7CisJaXRlbS0+dGFnICA9IChiID4+IDQpICYgMTU7CisKKwlpZiAoaXRlbS0+dGFnID09IEhJRF9JVEVNX1RBR19MT05HKSB7CisKKwkJaXRlbS0+Zm9ybWF0ID0gSElEX0lURU1fRk9STUFUX0xPTkc7CisKKwkJaWYgKChlbmQgLSBzdGFydCkgPCAyKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaXRlbS0+c2l6ZSA9ICpzdGFydCsrOworCQlpdGVtLT50YWcgID0gKnN0YXJ0Kys7CisKKwkJaWYgKChlbmQgLSBzdGFydCkgPCBpdGVtLT5zaXplKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaXRlbS0+ZGF0YS5sb25nZGF0YSA9IHN0YXJ0OworCQlzdGFydCArPSBpdGVtLT5zaXplOworCQlyZXR1cm4gc3RhcnQ7CisJfQorCisJaXRlbS0+Zm9ybWF0ID0gSElEX0lURU1fRk9STUFUX1NIT1JUOworCWl0ZW0tPnNpemUgPSBiICYgMzsKKworCXN3aXRjaCAoaXRlbS0+c2l6ZSkgeworCisJCWNhc2UgMDoKKwkJCXJldHVybiBzdGFydDsKKworCQljYXNlIDE6CisJCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IDEpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpdGVtLT5kYXRhLnU4ID0gKnN0YXJ0Kys7CisJCQlyZXR1cm4gc3RhcnQ7CisKKwkJY2FzZSAyOgorCQkJaWYgKChlbmQgLSBzdGFydCkgPCAyKQorCQkJCXJldHVybiBOVUxMOworCQkJaXRlbS0+ZGF0YS51MTYgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYqKXN0YXJ0KSk7CisJCQlzdGFydCA9IChfX3U4ICopKChfX2xlMTYgKilzdGFydCArIDEpOworCQkJcmV0dXJuIHN0YXJ0OworCisJCWNhc2UgMzoKKwkJCWl0ZW0tPnNpemUrKzsKKwkJCWlmICgoZW5kIC0gc3RhcnQpIDwgNCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWl0ZW0tPmRhdGEudTMyID0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTMyKilzdGFydCkpOworCQkJc3RhcnQgPSAoX191OCAqKSgoX19sZTMyICopc3RhcnQgKyAxKTsKKwkJCXJldHVybiBzdGFydDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFBhcnNlIGEgcmVwb3J0IGRlc2NyaXB0aW9uIGludG8gYSBoaWRfZGV2aWNlIHN0cnVjdHVyZS4gUmVwb3J0cyBhcmUKKyAqIGVudW1lcmF0ZWQsIGZpZWxkcyBhcmUgYXR0YWNoZWQgdG8gdGhlc2UgcmVwb3J0cy4KKyAqLworCitzdHJ1Y3QgaGlkX2RldmljZSAqaGlkX3BhcnNlX3JlcG9ydChfX3U4ICpzdGFydCwgdW5zaWduZWQgc2l6ZSkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXI7CisJc3RydWN0IGhpZF9pdGVtIGl0ZW07CisJX191OCAqZW5kOworCXVuc2lnbmVkIGk7CisJc3RhdGljIGludCAoKmRpc3BhdGNoX3R5cGVbXSkoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwKKwkJCQkgICAgICBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pID0geworCQloaWRfcGFyc2VyX21haW4sCisJCWhpZF9wYXJzZXJfZ2xvYmFsLAorCQloaWRfcGFyc2VyX2xvY2FsLAorCQloaWRfcGFyc2VyX3Jlc2VydmVkCisJfTsKKworCWlmICghKGRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghKGRldmljZS0+Y29sbGVjdGlvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbikgKgorCQkJCSAgIEhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUywgR0ZQX0tFUk5FTCkpKSB7CisJCWtmcmVlKGRldmljZSk7CisJCXJldHVybiBOVUxMOworCX0KKwlkZXZpY2UtPmNvbGxlY3Rpb25fc2l6ZSA9IEhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUzsKKworCWZvciAoaSA9IDA7IGkgPCBISURfUkVQT1JUX1RZUEVTOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZkZXZpY2UtPnJlcG9ydF9lbnVtW2ldLnJlcG9ydF9saXN0KTsKKworCWlmICghKGRldmljZS0+cmRlc2MgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpKSkgeworCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQlrZnJlZShkZXZpY2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtY3B5KGRldmljZS0+cmRlc2MsIHN0YXJ0LCBzaXplKTsKKwlkZXZpY2UtPnJzaXplID0gc2l6ZTsKKworCWlmICghKHBhcnNlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfcGFyc2VyKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWtmcmVlKGRldmljZS0+cmRlc2MpOworCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQlrZnJlZShkZXZpY2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcGFyc2VyLT5kZXZpY2UgPSBkZXZpY2U7CisKKwllbmQgPSBzdGFydCArIHNpemU7CisJd2hpbGUgKChzdGFydCA9IGZldGNoX2l0ZW0oc3RhcnQsIGVuZCwgJml0ZW0pKSAhPSBOVUxMKSB7CisKKwkJaWYgKGl0ZW0uZm9ybWF0ICE9IEhJRF9JVEVNX0ZPUk1BVF9TSE9SVCkgeworCQkJZGJnKCJ1bmV4cGVjdGVkIGxvbmcgZ2xvYmFsIGl0ZW0iKTsKKwkJCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CisJCQloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKKwkJCWtmcmVlKHBhcnNlcik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWlmIChkaXNwYXRjaF90eXBlW2l0ZW0udHlwZV0ocGFyc2VyLCAmaXRlbSkpIHsKKwkJCWRiZygiaXRlbSAldSAldSAldSAldSBwYXJzaW5nIGZhaWxlZFxuIiwKKwkJCQlpdGVtLmZvcm1hdCwgKHVuc2lnbmVkKWl0ZW0uc2l6ZSwgKHVuc2lnbmVkKWl0ZW0udHlwZSwgKHVuc2lnbmVkKWl0ZW0udGFnKTsKKwkJCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CisJCQloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKKwkJCWtmcmVlKHBhcnNlcik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWlmIChzdGFydCA9PSBlbmQpIHsKKwkJCWlmIChwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tfcHRyKSB7CisJCQkJZGJnKCJ1bmJhbGFuY2VkIGNvbGxlY3Rpb24gYXQgZW5kIG9mIHJlcG9ydCBkZXNjcmlwdGlvbiIpOworCQkJCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CisJCQkJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CisJCQkJa2ZyZWUocGFyc2VyKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCkgeworCQkJCWRiZygidW5iYWxhbmNlZCBkZWxpbWl0ZXIgYXQgZW5kIG9mIHJlcG9ydCBkZXNjcmlwdGlvbiIpOworCQkJCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CisJCQkJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CisJCQkJa2ZyZWUocGFyc2VyKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWtmcmVlKHBhcnNlcik7CisJCQlyZXR1cm4gZGV2aWNlOworCQl9CisJfQorCisJZGJnKCJpdGVtIGZldGNoaW5nIGZhaWxlZCBhdCBvZmZzZXQgJWRcbiIsIChpbnQpKGVuZCAtIHN0YXJ0KSk7CisJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKKwloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKKwlrZnJlZShwYXJzZXIpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3BhcnNlX3JlcG9ydCk7CisKKy8qCisgKiBDb252ZXJ0IGEgc2lnbmVkIG4tYml0IGludGVnZXIgdG8gc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLiBDb21tb24KKyAqIGNhc2VzIGFyZSBkb25lIHRocm91Z2ggdGhlIGNvbXBpbGVyLCB0aGUgc2NyZXdlZCB0aGluZ3MgaGFzIHRvIGJlCisgKiBkb25lIGJ5IGhhbmQuCisgKi8KKworc3RhdGljIHMzMiBzbnRvMzIoX191MzIgdmFsdWUsIHVuc2lnbmVkIG4pCit7CisJc3dpdGNoIChuKSB7CisJCWNhc2UgODogIHJldHVybiAoKF9fczgpdmFsdWUpOworCQljYXNlIDE2OiByZXR1cm4gKChfX3MxNil2YWx1ZSk7CisJCWNhc2UgMzI6IHJldHVybiAoKF9fczMyKXZhbHVlKTsKKwl9CisJcmV0dXJuIHZhbHVlICYgKDEgPDwgKG4gLSAxKSkgPyB2YWx1ZSB8ICgtMSA8PCBuKSA6IHZhbHVlOworfQorCisvKgorICogQ29udmVydCBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciB0byBhIHNpZ25lZCBuLWJpdCBpbnRlZ2VyLgorICovCisKK3N0YXRpYyB1MzIgczMydG9uKF9fczMyIHZhbHVlLCB1bnNpZ25lZCBuKQoreworCXMzMiBhID0gdmFsdWUgPj4gKG4gLSAxKTsKKwlpZiAoYSAmJiBhICE9IC0xKQorCQlyZXR1cm4gdmFsdWUgPCAwID8gMSA8PCAobiAtIDEpIDogKDEgPDwgKG4gLSAxKSkgLSAxOworCXJldHVybiB2YWx1ZSAmICgoMSA8PCBuKSAtIDEpOworfQorCisvKgorICogRXh0cmFjdC9pbXBsZW1lbnQgYSBkYXRhIGZpZWxkIGZyb20vdG8gYSBsaXR0bGUgZW5kaWFuIHJlcG9ydCAoYml0IGFycmF5KS4KKyAqCisgKiBDb2RlIHNvcnQtb2YgZm9sbG93cyBISUQgc3BlYzoKKyAqICAgICBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kZXZjbGFzc19kb2NzL0hJRDFfMTEucGRmCisgKgorICogV2hpbGUgdGhlIFVTQiBISUQgc3BlYyBhbGxvd3MgdW5saW1pdGVkIGxlbmd0aCBiaXQgZmllbGRzIGluICJyZXBvcnQKKyAqIGRlc2NyaXB0b3JzIiwgbW9zdCBkZXZpY2VzIG5ldmVyIHVzZSBtb3JlIHRoYW4gMTYgYml0cy4KKyAqIE9uZSBtb2RlbCBvZiBVUFMgaXMgY2xhaW1lZCB0byByZXBvcnQgIkxJTkVWIiBhcyBhIDMyLWJpdCBmaWVsZC4KKyAqIFNlYXJjaCBsaW51eC1rZXJuZWwgYW5kIGxpbnV4LXVzYi1kZXZlbCBhcmNoaXZlcyBmb3IgImhpZC1jb3JlIGV4dHJhY3QiLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTMyIGV4dHJhY3QoX191OCAqcmVwb3J0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG4pCit7CisJdTY0IHg7CisKKwlXQVJOX09OKG4gPiAzMik7CisKKwlyZXBvcnQgKz0gb2Zmc2V0ID4+IDM7ICAvKiBhZGp1c3QgYnl0ZSBpbmRleCAqLworCW9mZnNldCAmPSA3OyAgICAgICAgICAgIC8qIG5vdyBvbmx5IG5lZWQgYml0IG9mZnNldCBpbnRvIG9uZSBieXRlICovCisJeCA9IGdldF91bmFsaWduZWQoKHU2NCAqKSByZXBvcnQpOworCXggPSBsZTY0X3RvX2NwdSh4KTsKKwl4ID0gKHggPj4gb2Zmc2V0KSAmICgoMVVMTCA8PCBuKSAtIDEpOyAgLyogZXh0cmFjdCBiaXQgZmllbGQgKi8KKwlyZXR1cm4gKHUzMikgeDsKK30KKworLyoKKyAqICJpbXBsZW1lbnQiIDogc2V0IGJpdHMgaW4gYSBsaXR0bGUgZW5kaWFuIGJpdCBzdHJlYW0uCisgKiBTYW1lIGNvbmNlcHRzIGFzICJleHRyYWN0IiAoc2VlIGNvbW1lbnRzIGFib3ZlKS4KKyAqIFRoZSBkYXRhIG1hbmdsZWQgaW4gdGhlIGJpdCBzdHJlYW0gcmVtYWlucyBpbiBsaXR0bGUgZW5kaWFuCisgKiBvcmRlciB0aGUgd2hvbGUgdGltZS4gSXQgbWFrZSBtb3JlIHNlbnNlIHRvIHRhbGsgYWJvdXQKKyAqIGVuZGlhbm5lc3Mgb2YgcmVnaXN0ZXIgdmFsdWVzIGJ5IGNvbnNpZGVyaW5nIGEgcmVnaXN0ZXIKKyAqIGEgImNhY2hlZCIgY29weSBvZiB0aGUgbGl0dGxlIGVuZGlhZCBiaXQgc3RyZWFtLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGltcGxlbWVudChfX3U4ICpyZXBvcnQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbiwgX191MzIgdmFsdWUpCit7CisJdTY0IHg7CisJdTY0IG0gPSAoMVVMTCA8PCBuKSAtIDE7CisKKwlXQVJOX09OKG4gPiAzMik7CisKKwlXQVJOX09OKHZhbHVlID4gbSk7CisJdmFsdWUgJj0gbTsKKworCXJlcG9ydCArPSBvZmZzZXQgPj4gMzsKKwlvZmZzZXQgJj0gNzsKKworCXggPSBnZXRfdW5hbGlnbmVkKCh1NjQgKilyZXBvcnQpOworCXggJj0gY3B1X3RvX2xlNjQofihtIDw8IG9mZnNldCkpOworCXggfD0gY3B1X3RvX2xlNjQoKCh1NjQpIHZhbHVlKSA8PCBvZmZzZXQpOworCXB1dF91bmFsaWduZWQoeCwgKHU2NCAqKSByZXBvcnQpOworfQorCisvKgorICogU2VhcmNoIGFuIGFycmF5IGZvciBhIHZhbHVlLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBzZWFyY2goX19zMzIgKmFycmF5LCBfX3MzMiB2YWx1ZSwgdW5zaWduZWQgbikKK3sKKwl3aGlsZSAobi0tKSB7CisJCWlmICgqYXJyYXkrKyA9PSB2YWx1ZSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF9wcm9jZXNzX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUsIGludCBpbnRlcnJ1cHQpCit7CisJaGlkX2R1bXBfaW5wdXQodXNhZ2UsIHZhbHVlKTsKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCisJCWhpZGlucHV0X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaW50ZXJydXB0ICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7Cit9CisKKy8qCisgKiBBbmFseXNlIGEgcmVjZWl2ZWQgZmllbGQsIGFuZCBmZXRjaCB0aGUgZGF0YSBmcm9tIGl0LiBUaGUgZmllbGQKKyAqIGNvbnRlbnQgaXMgc3RvcmVkIGZvciBuZXh0IHJlcG9ydCBwcm9jZXNzaW5nICh3ZSBkbyBkaWZmZXJlbnRpYWwKKyAqIHJlcG9ydGluZyB0byB0aGUgbGF5ZXIpLgorICovCisKK3ZvaWQgaGlkX2lucHV0X2ZpZWxkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBfX3U4ICpkYXRhLCBpbnQgaW50ZXJydXB0KQoreworCXVuc2lnbmVkIG47CisJdW5zaWduZWQgY291bnQgPSBmaWVsZC0+cmVwb3J0X2NvdW50OworCXVuc2lnbmVkIG9mZnNldCA9IGZpZWxkLT5yZXBvcnRfb2Zmc2V0OworCXVuc2lnbmVkIHNpemUgPSBmaWVsZC0+cmVwb3J0X3NpemU7CisJX19zMzIgbWluID0gZmllbGQtPmxvZ2ljYWxfbWluaW11bTsKKwlfX3MzMiBtYXggPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtOworCV9fczMyICp2YWx1ZTsKKworCWlmICghKHZhbHVlID0ga21hbGxvYyhzaXplb2YoX19zMzIpICogY291bnQsIEdGUF9BVE9NSUMpKSkKKwkJcmV0dXJuOworCisJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKworCQkJdmFsdWVbbl0gPSBtaW4gPCAwID8gc250bzMyKGV4dHJhY3QoZGF0YSwgb2Zmc2V0ICsgbiAqIHNpemUsIHNpemUpLCBzaXplKSA6CisJCQkJCQkgICAgZXh0cmFjdChkYXRhLCBvZmZzZXQgKyBuICogc2l6ZSwgc2l6ZSk7CisKKwkJCWlmICghKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fVkFSSUFCTEUpIC8qIElnbm9yZSByZXBvcnQgaWYgRXJyb3JSb2xsT3ZlciAqLworCQkJICAgICYmIHZhbHVlW25dID49IG1pbiAmJiB2YWx1ZVtuXSA8PSBtYXgKKwkJCSAgICAmJiBmaWVsZC0+dXNhZ2VbdmFsdWVbbl0gLSBtaW5dLmhpZCA9PSBISURfVVBfS0VZQk9BUkQgKyAxKQorCQkJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgeworCisJCWlmIChISURfTUFJTl9JVEVNX1ZBUklBQkxFICYgZmllbGQtPmZsYWdzKSB7CisJCQloaWRfcHJvY2Vzc19ldmVudChoaWQsIGZpZWxkLCAmZmllbGQtPnVzYWdlW25dLCB2YWx1ZVtuXSwgaW50ZXJydXB0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGZpZWxkLT52YWx1ZVtuXSA+PSBtaW4gJiYgZmllbGQtPnZhbHVlW25dIDw9IG1heAorCQkJJiYgZmllbGQtPnVzYWdlW2ZpZWxkLT52YWx1ZVtuXSAtIG1pbl0uaGlkCisJCQkmJiBzZWFyY2godmFsdWUsIGZpZWxkLT52YWx1ZVtuXSwgY291bnQpKQorCQkJCWhpZF9wcm9jZXNzX2V2ZW50KGhpZCwgZmllbGQsICZmaWVsZC0+dXNhZ2VbZmllbGQtPnZhbHVlW25dIC0gbWluXSwgMCwgaW50ZXJydXB0KTsKKworCQlpZiAodmFsdWVbbl0gPj0gbWluICYmIHZhbHVlW25dIDw9IG1heAorCQkJJiYgZmllbGQtPnVzYWdlW3ZhbHVlW25dIC0gbWluXS5oaWQKKwkJCSYmIHNlYXJjaChmaWVsZC0+dmFsdWUsIHZhbHVlW25dLCBjb3VudCkpCisJCQkJaGlkX3Byb2Nlc3NfZXZlbnQoaGlkLCBmaWVsZCwgJmZpZWxkLT51c2FnZVt2YWx1ZVtuXSAtIG1pbl0sIDEsIGludGVycnVwdCk7CisJfQorCisJbWVtY3B5KGZpZWxkLT52YWx1ZSwgdmFsdWUsIGNvdW50ICogc2l6ZW9mKF9fczMyKSk7CitleGl0OgorCWtmcmVlKHZhbHVlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGhpZF9pbnB1dF9maWVsZCk7CisKKy8qCisgKiBPdXRwdXQgdGhlIGZpZWxkIGludG8gdGhlIHJlcG9ydC4KKyAqLworCitzdGF0aWMgdm9pZCBoaWRfb3V0cHV0X2ZpZWxkKHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBfX3U4ICpkYXRhKQoreworCXVuc2lnbmVkIGNvdW50ID0gZmllbGQtPnJlcG9ydF9jb3VudDsKKwl1bnNpZ25lZCBvZmZzZXQgPSBmaWVsZC0+cmVwb3J0X29mZnNldDsKKwl1bnNpZ25lZCBzaXplID0gZmllbGQtPnJlcG9ydF9zaXplOworCXVuc2lnbmVkIG47CisKKwkvKiBtYWtlIHN1cmUgdGhlIHVudXNlZCBiaXRzIGluIHRoZSBsYXN0IGJ5dGUgYXJlIHplcm9zICovCisJaWYgKGNvdW50ID4gMCAmJiBzaXplID4gMCkKKwkJZGF0YVsoY291bnQqc2l6ZS0xKS84XSA9IDA7CisKKwlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgeworCQlpZiAoZmllbGQtPmxvZ2ljYWxfbWluaW11bSA8IDApCS8qIHNpZ25lZCB2YWx1ZXMgKi8KKwkJCWltcGxlbWVudChkYXRhLCBvZmZzZXQgKyBuICogc2l6ZSwgc2l6ZSwgczMydG9uKGZpZWxkLT52YWx1ZVtuXSwgc2l6ZSkpOworCQllbHNlCQkJCS8qIHVuc2lnbmVkIHZhbHVlcyAqLworCQkJaW1wbGVtZW50KGRhdGEsIG9mZnNldCArIG4gKiBzaXplLCBzaXplLCBmaWVsZC0+dmFsdWVbbl0pOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBhIHJlcG9ydC4KKyAqLworCit2b2lkIGhpZF9vdXRwdXRfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIF9fdTggKmRhdGEpCit7CisJdW5zaWduZWQgbjsKKworCWlmIChyZXBvcnQtPmlkID4gMCkKKwkJKmRhdGErKyA9IHJlcG9ydC0+aWQ7CisKKwlmb3IgKG4gPSAwOyBuIDwgcmVwb3J0LT5tYXhmaWVsZDsgbisrKQorCQloaWRfb3V0cHV0X2ZpZWxkKHJlcG9ydC0+ZmllbGRbbl0sIGRhdGEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX291dHB1dF9yZXBvcnQpOworCisvKgorICogU2V0IGEgZmllbGQgdmFsdWUuIFRoZSByZXBvcnQgdGhpcyBmaWVsZCBiZWxvbmdzIHRvIGhhcyB0byBiZQorICogY3JlYXRlZCBhbmQgdHJhbnNmZXJyZWQgdG8gdGhlIGRldmljZSwgdG8gc2V0IHRoaXMgdmFsdWUgaW4gdGhlCisgKiBkZXZpY2UuCisgKi8KKworaW50IGhpZF9zZXRfZmllbGQoc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHVuc2lnbmVkIG9mZnNldCwgX19zMzIgdmFsdWUpCit7CisJdW5zaWduZWQgc2l6ZSA9IGZpZWxkLT5yZXBvcnRfc2l6ZTsKKworCWhpZF9kdW1wX2lucHV0KGZpZWxkLT51c2FnZSArIG9mZnNldCwgdmFsdWUpOworCisJaWYgKG9mZnNldCA+PSBmaWVsZC0+cmVwb3J0X2NvdW50KSB7CisJCWRiZygib2Zmc2V0ICglZCkgZXhjZWVkcyByZXBvcnRfY291bnQgKCVkKSIsIG9mZnNldCwgZmllbGQtPnJlcG9ydF9jb3VudCk7CisJCWhpZF9kdW1wX2ZpZWxkKGZpZWxkLCA4KTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoZmllbGQtPmxvZ2ljYWxfbWluaW11bSA8IDApIHsKKwkJaWYgKHZhbHVlICE9IHNudG8zMihzMzJ0b24odmFsdWUsIHNpemUpLCBzaXplKSkgeworCQkJZGJnKCJ2YWx1ZSAlZCBpcyBvdXQgb2YgcmFuZ2UiLCB2YWx1ZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJZmllbGQtPnZhbHVlW29mZnNldF0gPSB2YWx1ZTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGhpZF9zZXRfZmllbGQpOworCitpbnQgaGlkX2lucHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgdHlwZSwgdTggKmRhdGEsIGludCBzaXplLCBpbnQgaW50ZXJydXB0KQoreworCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtID0gaGlkLT5yZXBvcnRfZW51bSArIHR5cGU7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlpbnQgbiwgcnNpemU7CisKKwlpZiAoIWhpZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIXNpemUpIHsKKwkJZGJnKCJlbXB0eSByZXBvcnQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworI2lmZGVmIERFQlVHX0RBVEEKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiByZXBvcnQgKHNpemUgJXUpICglc251bWJlcmVkKVxuIiwgc2l6ZSwgcmVwb3J0X2VudW0tPm51bWJlcmVkID8gIiIgOiAidW4iKTsKKyNlbmRpZgorCisJbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWxseSByZXBvcnQgbnVtYmVyIGlzIDAgKi8KKwlpZiAocmVwb3J0X2VudW0tPm51bWJlcmVkKSB7ICAgIC8qIERldmljZSB1c2VzIG51bWJlcmVkIHJlcG9ydHMsIGRhdGFbMF0gaXMgcmVwb3J0IG51bWJlciAqLworCQluID0gKmRhdGErKzsKKwkJc2l6ZS0tOworCX0KKworI2lmZGVmIERFQlVHX0RBVEEKKwl7CisJCWludCBpOworCQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiByZXBvcnQgJWQgKHNpemUgJXUpID0gIiwgbiwgc2l6ZSk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCQlwcmludGsoIiAlMDJ4IiwgZGF0YVtpXSk7CisJCXByaW50aygiXG4iKTsKKwl9CisjZW5kaWYKKworCWlmICghKHJlcG9ydCA9IHJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtuXSkpIHsKKwkJZGJnKCJ1bmRlZmluZWQgcmVwb3J0X2lkICVkIHJlY2VpdmVkIiwgbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyc2l6ZSA9ICgocmVwb3J0LT5zaXplIC0gMSkgPj4gMykgKyAxOworCisJaWYgKHNpemUgPCByc2l6ZSkgeworCQlkYmcoInJlcG9ydCAlZCBpcyB0b28gc2hvcnQsICglZCA8ICVkKSIsIHJlcG9ydC0+aWQsIHNpemUsIHJzaXplKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKSAmJiBoaWQtPmhpZGRldl9yZXBvcnRfZXZlbnQpCisJCWhpZC0+aGlkZGV2X3JlcG9ydF9ldmVudChoaWQsIHJlcG9ydCk7CisKKwlmb3IgKG4gPSAwOyBuIDwgcmVwb3J0LT5tYXhmaWVsZDsgbisrKQorCQloaWRfaW5wdXRfZmllbGQoaGlkLCByZXBvcnQtPmZpZWxkW25dLCBkYXRhLCBpbnRlcnJ1cHQpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQorCQloaWRpbnB1dF9yZXBvcnRfZXZlbnQoaGlkLCByZXBvcnQpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChoaWRfaW5wdXRfcmVwb3J0KTsKKworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCnNpbWlsYXJpdHkgaW5kZXggNzglCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL2lucHV0L2hpZC1pbnB1dC5jCnJlbmFtZSB0byBkcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwppbmRleCA2OGU3ZWJiLi5jN2E2ODMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwpAQCAtMiw4ICsyLDkgQEAKICAqICRJZDogaGlkLWlucHV0LmMsdiAxLjIgMjAwMi8wNC8yMyAwMDo1OToyNSByZGFtYXppbyBFeHAgJAogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpaworICogIENvcHlyaWdodCAoYykgMjAwNiBKaXJpIEtvc2luYQogICoKLSAqICBVU0IgSElEIHRvIExpbnV4IElucHV0IG1hcHBpbmcKKyAqICBISUQgdG8gTGludXggSW5wdXQgbWFwcGluZwogICovCiAKIC8qCkBAIC0yOSwxMSArMzAsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSAiaGlkLmgiCisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisKK3N0YXRpYyBpbnQgaGlkX3BiX2ZubW9kZSA9IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQocGJfZm5tb2RlLCBoaWRfcGJfZm5tb2RlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwYl9mbm1vZGUsCisJCSJNb2RlIG9mIGZuIGtleSBvbiBQb3dlckJvb2tzICgwID0gZGlzYWJsZWQsIDEgPSBma2V5c2xhc3QsIDIgPSBma2V5c2ZpcnN0KSIpOwogCiAjZGVmaW5lIHVuawlLRVlfVU5LTk9XTgogCkBAIC02Nyw2ICs3Miw3IEBACiAjZGVmaW5lIG1hcF9sZWQoYykJZG8geyB1c2FnZS0+Y29kZSA9IGM7IHVzYWdlLT50eXBlID0gRVZfTEVEOyBiaXQgPSBpbnB1dC0+bGVkYml0OyBtYXggPSBMRURfTUFYOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIG1hcF9hYnNfY2xlYXIoYykJZG8geyBtYXBfYWJzKGMpOyBjbGVhcl9iaXQoYywgYml0KTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWFwX3JlbF9jbGVhcihjKQlkbyB7IG1hcF9yZWwoYyk7IGNsZWFyX2JpdChjLCBiaXQpOyB9IHdoaWxlICgwKQogI2RlZmluZSBtYXBfa2V5X2NsZWFyKGMpCWRvIHsgbWFwX2tleShjKTsgY2xlYXJfYml0KGMsIGJpdCk7IH0gd2hpbGUgKDApCiAKICNpZmRlZiBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSwpAQCAtODEsNDIgKzg3LDQyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGlkaW5wdXRfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19mbl9rZXlzW10gPSB7CiAJeyBLRVlfQkFDS1NQQUNFLCBLRVlfREVMRVRFIH0sCi0JeyBLRVlfRjEsCUtFWV9CUklHSFRORVNTRE9XTiwJUE9XRVJCT09LX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YyLAlLRVlfQlJJR0hUTkVTU1VQLAlQT1dFUkJPT0tfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjMsCUtFWV9NVVRFLAkJUE9XRVJCT09LX0ZMQUdfRktFWSB9LAotCXsgS0VZX0Y0LAlLRVlfVk9MVU1FRE9XTiwJCVBPV0VSQk9PS19GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GNSwJS0VZX1ZPTFVNRVVQLAkJUE9XRVJCT09LX0ZMQUdfRktFWSB9LAotCXsgS0VZX0Y2LAlLRVlfTlVNTE9DSywJCVBPV0VSQk9PS19GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GNywJS0VZX1NXSVRDSFZJREVPTU9ERSwJUE9XRVJCT09LX0ZMQUdfRktFWSB9LAotCXsgS0VZX0Y4LAlLRVlfS0JESUxMVU1UT0dHTEUsCVBPV0VSQk9PS19GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GOSwJS0VZX0tCRElMTFVNRE9XTiwJUE9XRVJCT09LX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YxMCwJS0VZX0tCRElMTFVNVVAsCQlQT1dFUkJPT0tfRkxBR19GS0VZIH0sCi0JeyBLRVlfVVAsCUtFWV9QQUdFVVAgfSwKLQl7IEtFWV9ET1dOLAlLRVlfUEFHRURPV04gfSwKLQl7IEtFWV9MRUZULAlLRVlfSE9NRSB9LAotCXsgS0VZX1JJR0hULAlLRVlfRU5EIH0sCisJeyBLRVlfRjEsICAgICAgIEtFWV9CUklHSFRORVNTRE9XTiwgICAgIFBPV0VSQk9PS19GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GMiwgICAgICAgS0VZX0JSSUdIVE5FU1NVUCwgICAgICAgUE9XRVJCT09LX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YzLCAgICAgICBLRVlfTVVURSwgICAgICAgICAgICAgICBQT1dFUkJPT0tfRkxBR19GS0VZIH0sCisJeyBLRVlfRjQsICAgICAgIEtFWV9WT0xVTUVET1dOLCAgICAgICAgIFBPV0VSQk9PS19GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GNSwgICAgICAgS0VZX1ZPTFVNRVVQLCAgICAgICAgICAgUE9XRVJCT09LX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y2LCAgICAgICBLRVlfTlVNTE9DSywgICAgICAgICAgICBQT1dFUkJPT0tfRkxBR19GS0VZIH0sCisJeyBLRVlfRjcsICAgICAgIEtFWV9TV0lUQ0hWSURFT01PREUsICAgIFBPV0VSQk9PS19GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GOCwgICAgICAgS0VZX0tCRElMTFVNVE9HR0xFLCAgICAgUE9XRVJCT09LX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y5LCAgICAgICBLRVlfS0JESUxMVU1ET1dOLCAgICAgICBQT1dFUkJPT0tfRkxBR19GS0VZIH0sCisJeyBLRVlfRjEwLCAgICAgIEtFWV9LQkRJTExVTVVQLCAgICAgICAgIFBPV0VSQk9PS19GTEFHX0ZLRVkgfSwKKwl7IEtFWV9VUCwgICAgICAgS0VZX1BBR0VVUCB9LAorCXsgS0VZX0RPV04sICAgICBLRVlfUEFHRURPV04gfSwKKwl7IEtFWV9MRUZULCAgICAgS0VZX0hPTUUgfSwKKwl7IEtFWV9SSUdIVCwgICAgS0VZX0VORCB9LAogCXsgfQogfTsKIAogc3RhdGljIHN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gcG93ZXJib29rX251bWxvY2tfa2V5c1tdID0gewotCXsgS0VZX0osCUtFWV9LUDEgfSwKLQl7IEtFWV9LLAlLRVlfS1AyIH0sCi0JeyBLRVlfTCwJS0VZX0tQMyB9LAotCXsgS0VZX1UsCUtFWV9LUDQgfSwKLQl7IEtFWV9JLAlLRVlfS1A1IH0sCi0JeyBLRVlfTywJS0VZX0tQNiB9LAotCXsgS0VZXzcsCUtFWV9LUDcgfSwKLQl7IEtFWV84LAlLRVlfS1A4IH0sCi0JeyBLRVlfOSwJS0VZX0tQOSB9LAotCXsgS0VZX00sCUtFWV9LUDAgfSwKLQl7IEtFWV9ET1QsCUtFWV9LUERPVCB9LAotCXsgS0VZX1NMQVNILAlLRVlfS1BQTFVTIH0sCisJeyBLRVlfSiwgICAgICAgIEtFWV9LUDEgfSwKKwl7IEtFWV9LLCAgICAgICAgS0VZX0tQMiB9LAorCXsgS0VZX0wsICAgICAgICBLRVlfS1AzIH0sCisJeyBLRVlfVSwgICAgICAgIEtFWV9LUDQgfSwKKwl7IEtFWV9JLCAgICAgICAgS0VZX0tQNSB9LAorCXsgS0VZX08sICAgICAgICBLRVlfS1A2IH0sCisJeyBLRVlfNywgICAgICAgIEtFWV9LUDcgfSwKKwl7IEtFWV84LCAgICAgICAgS0VZX0tQOCB9LAorCXsgS0VZXzksICAgICAgICBLRVlfS1A5IH0sCisJeyBLRVlfTSwgICAgICAgIEtFWV9LUDAgfSwKKwl7IEtFWV9ET1QsICAgICAgS0VZX0tQRE9UIH0sCisJeyBLRVlfU0xBU0gsICAgIEtFWV9LUFBMVVMgfSwKIAl7IEtFWV9TRU1JQ09MT04sIEtFWV9LUE1JTlVTIH0sCi0JeyBLRVlfUCwJS0VZX0tQQVNURVJJU0sgfSwKLQl7IEtFWV9NSU5VUywJS0VZX0tQRVFVQUwgfSwKLQl7IEtFWV8wLAlLRVlfS1BTTEFTSCB9LAotCXsgS0VZX0Y2LAlLRVlfTlVNTE9DSyB9LAotCXsgS0VZX0tQRU5URVIsCUtFWV9LUEVOVEVSIH0sCisJeyBLRVlfUCwgICAgICAgIEtFWV9LUEFTVEVSSVNLIH0sCisJeyBLRVlfTUlOVVMsICAgIEtFWV9LUEVRVUFMIH0sCisJeyBLRVlfMCwgICAgICAgIEtFWV9LUFNMQVNIIH0sCisJeyBLRVlfRjYsICAgICAgIEtFWV9OVU1MT0NLIH0sCisJeyBLRVlfS1BFTlRFUiwgIEtFWV9LUEVOVEVSIH0sCiAJeyBLRVlfQkFDS1NQQUNFLCBLRVlfQkFDS1NQQUNFIH0sCiAJeyB9CiB9OwpAQCAtMTI3LDExICsxMzMsNiBAQAogCXsgfQogfTsKIAotc3RhdGljIGludCB1c2JoaWRfcGJfZm5tb2RlID0gMTsKLW1vZHVsZV9wYXJhbV9uYW1lZChwYl9mbm1vZGUsIHVzYmhpZF9wYl9mbm1vZGUsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBiX2ZubW9kZSwKLQkiTW9kZSBvZiBmbiBrZXkgb24gUG93ZXJCb29rcyAoMCA9IGRpc2FibGVkLCAxID0gZmtleXNsYXN0LCAyID0gZmtleXNmaXJzdCkiKTsKLQogc3RhdGljIHN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gKmZpbmRfdHJhbnNsYXRpb24oc3RydWN0IGhpZGlucHV0X2tleV90cmFuc2xhdGlvbiAqdGFibGUsIHUxNiBmcm9tKQogewogCXN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOwpAQCAtMTQ1LDcgKzE0Niw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaGlkaW5wdXRfcGJfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQogewogCXN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOwogCkBAIC0xNTgsNyArMTU5LDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKHVzYmhpZF9wYl9mbm1vZGUpIHsKKwlpZiAoaGlkX3BiX2ZubW9kZSkgewogCQlpbnQgZG9fdHJhbnNsYXRlOwogCiAJCXRyYW5zID0gZmluZF90cmFuc2xhdGlvbihwb3dlcmJvb2tfZm5fa2V5cywgdXNhZ2UtPmNvZGUpOwpAQCAtMTY3LDggKzE2OCw4IEBACiAJCQkJZG9fdHJhbnNsYXRlID0gMTsKIAkJCWVsc2UgaWYgKHRyYW5zLT5mbGFncyAmIFBPV0VSQk9PS19GTEFHX0ZLRVkpCiAJCQkJZG9fdHJhbnNsYXRlID0KLQkJCQkJKHVzYmhpZF9wYl9mbm1vZGUgPT0gMiAmJiAgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX1BPV0VSQk9PS19GTl9PTikpIHx8Ci0JCQkJCSh1c2JoaWRfcGJfZm5tb2RlID09IDEgJiYgIShoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19QT1dFUkJPT0tfRk5fT04pKTsKKwkJCQkJKGhpZF9wYl9mbm1vZGUgPT0gMiAmJiAgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX1BPV0VSQk9PS19GTl9PTikpIHx8CisJCQkJCShoaWRfcGJfZm5tb2RlID09IDEgJiYgIShoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19QT1dFUkJPT0tfRk5fT04pKTsKIAkJCWVsc2UKIAkJCQlkb190cmFuc2xhdGUgPSAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfUE9XRVJCT09LX0ZOX09OKTsKIApAQCAtMTg1LDcgKzE4Niw3IEBACiAJCX0KIAogCQlpZiAodGVzdF9iaXQodXNhZ2UtPmNvZGUsIGhpZC0+cGJfcHJlc3NlZF9udW1sb2NrKSB8fAotCQkgICAgdGVzdF9iaXQoTEVEX05VTUwsIGlucHV0LT5sZWQpKSB7CisJCQkJdGVzdF9iaXQoTEVEX05VTUwsIGlucHV0LT5sZWQpKSB7CiAJCQl0cmFucyA9IGZpbmRfdHJhbnNsYXRpb24ocG93ZXJib29rX251bWxvY2tfa2V5cywgdXNhZ2UtPmNvZGUpOwogCiAJCQlpZiAodHJhbnMpIHsKQEAgLTIyNywxMCArMjI4LDExIEBACiAKIAlmb3IgKHRyYW5zID0gcG93ZXJib29rX2lzb19rZXlib2FyZDsgdHJhbnMtPmZyb207IHRyYW5zKyspCiAJCXNldF9iaXQodHJhbnMtPnRvLCBpbnB1dC0+a2V5Yml0KTsKKwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGhpZGlucHV0X3BiX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQkJCSAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTI5NSw3ICsyOTcsNyBAQAogCQkJCQl9CiAJCQl9CiAKLQkJCW1hcF9rZXkoY29kZSk7CisJCQltYXBfa2V5X2NsZWFyKGNvZGUpOwogCQkJYnJlYWs7CiAKIApAQCAtMzQ2LDkgKzM0OCw5IEBACiAJCQkJY2FzZSBISURfR0RfUlg6IGNhc2UgSElEX0dEX1JZOiBjYXNlIEhJRF9HRF9SWjoKIAkJCQljYXNlIEhJRF9HRF9TTElERVI6IGNhc2UgSElEX0dEX0RJQUw6IGNhc2UgSElEX0dEX1dIRUVMOgogCQkJCQlpZiAoZmllbGQtPmZsYWdzICYgSElEX01BSU5fSVRFTV9SRUxBVElWRSkKLQkJCQkJCW1hcF9yZWwodXNhZ2UtPmhpZCAmIDB4Zik7CisJCQkJCQltYXBfcmVsX2NsZWFyKHVzYWdlLT5oaWQgJiAweGYpOwogCQkJCQllbHNlCi0JCQkJCQltYXBfYWJzKHVzYWdlLT5oaWQgJiAweGYpOworCQkJCQkJbWFwX2Fic19jbGVhcih1c2FnZS0+aGlkICYgMHhmKTsKIAkJCQkJYnJlYWs7CiAKIAkJCQljYXNlIEhJRF9HRF9IQVRTV0lUQ0g6CkBAIC0zNjYsOSArMzY4LDIyIEBACiAJCQlicmVhazsKIAogCQljYXNlIEhJRF9VUF9MRUQ6Ci0JCQlpZiAoKCh1c2FnZS0+aGlkIC0gMSkgJiAweGZmZmYpID49IExFRF9NQVgpCi0JCQkJZ290byBpZ25vcmU7Ci0JCQltYXBfbGVkKCh1c2FnZS0+aGlkIC0gMSkgJiAweGZmZmYpOworCisJCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmZmYpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBISUQtVmFsdWU6ICAgICAgICAgICAgICAgICAgICovCisJCQkJY2FzZSAweDAxOiAgbWFwX2xlZCAoTEVEX05VTUwpOyAgICAgYnJlYWs7ICAgIC8qICAgIk51bSBMb2NrIiAgICAgICAgICAgICAgICAgKi8KKwkJCQljYXNlIDB4MDI6ICBtYXBfbGVkIChMRURfQ0FQU0wpOyAgICBicmVhazsgICAgLyogICAiQ2FwcyBMb2NrIiAgICAgICAgICAgICAgICAqLworCQkJCWNhc2UgMHgwMzogIG1hcF9sZWQgKExFRF9TQ1JPTExMKTsgIGJyZWFrOyAgICAvKiAgICJTY3JvbGwgTG9jayIgICAgICAgICAgICAgICovCisJCQkJY2FzZSAweDA0OiAgbWFwX2xlZCAoTEVEX0NPTVBPU0UpOyAgYnJlYWs7ICAgIC8qICAgIkNvbXBvc2UiICAgICAgICAgICAgICAgICAgKi8KKwkJCQljYXNlIDB4MDU6ICBtYXBfbGVkIChMRURfS0FOQSk7ICAgICBicmVhazsgICAgLyogICAiS2FuYSIgICAgICAgICAgICAgICAgICAgICAqLworCQkJCWNhc2UgMHgyNzogIG1hcF9sZWQgKExFRF9TTEVFUCk7ICAgIGJyZWFrOyAgICAvKiAgICJTdGFuZC1CeSIgICAgICAgICAgICAgICAgICovCisJCQkJY2FzZSAweDRjOiAgbWFwX2xlZCAoTEVEX1NVU1BFTkQpOyAgYnJlYWs7ICAgIC8qICAgIlN5c3RlbSBTdXNwZW5kIiAgICAgICAgICAgKi8KKwkJCQljYXNlIDB4MDk6ICBtYXBfbGVkIChMRURfTVVURSk7ICAgICBicmVhazsgICAgLyogICAiTXV0ZSIgICAgICAgICAgICAgICAgICAgICAqLworCQkJCWNhc2UgMHg0YjogIG1hcF9sZWQgKExFRF9NSVNDKTsgICAgIGJyZWFrOyAgICAvKiAgICJHZW5lcmljIEluZGljYXRvciIgICAgICAgICovCisJCQkJY2FzZSAweDE5OiAgbWFwX2xlZCAoTEVEX01BSUwpOyAgICAgYnJlYWs7ICAgIC8qICAgIk1lc3NhZ2UgV2FpdGluZyIgICAgICAgICAgKi8KKwkJCQljYXNlIDB4NGQ6ICBtYXBfbGVkIChMRURfQ0hBUkdJTkcpOyBicmVhazsgICAgLyogICAiRXh0ZXJuYWwgUG93ZXIgQ29ubmVjdGVkIiAqLworCisJCQkJZGVmYXVsdDogZ290byBpZ25vcmU7CisJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIEhJRF9VUF9ESUdJVElaRVI6CkBAIC00MTgsMTIgKzQzMywzMyBAQAogCQkJCWNhc2UgMHgwMDA6IGdvdG8gaWdub3JlOwogCQkJCWNhc2UgMHgwMzQ6IG1hcF9rZXlfY2xlYXIoS0VZX1NMRUVQKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgwMzY6IG1hcF9rZXlfY2xlYXIoQlROX01JU0MpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA0MDogbWFwX2tleV9jbGVhcihLRVlfTUVOVSk7CQlicmVhazsKIAkJCQljYXNlIDB4MDQ1OiBtYXBfa2V5X2NsZWFyKEtFWV9SQURJTyk7CQlicmVhazsKKworCQkJCWNhc2UgMHgwODM6IG1hcF9rZXlfY2xlYXIoS0VZX0xBU1QpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA4ODogbWFwX2tleV9jbGVhcihLRVlfUEMpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA4OTogbWFwX2tleV9jbGVhcihLRVlfVFYpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDA4YTogbWFwX2tleV9jbGVhcihLRVlfV1dXKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwOGI6IG1hcF9rZXlfY2xlYXIoS0VZX0RWRCk7CQlicmVhazsKKwkJCQljYXNlIDB4MDhjOiBtYXBfa2V5X2NsZWFyKEtFWV9QSE9ORSk7CQlicmVhazsKIAkJCQljYXNlIDB4MDhkOiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9HUkFNKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwOGU6IG1hcF9rZXlfY2xlYXIoS0VZX1ZJREVPUEhPTkUpOwlicmVhazsKKwkJCQljYXNlIDB4MDhmOiBtYXBfa2V5X2NsZWFyKEtFWV9HQU1FUyk7CQlicmVhazsKKwkJCQljYXNlIDB4MDkwOiBtYXBfa2V5X2NsZWFyKEtFWV9NRU1PKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwOTE6IG1hcF9rZXlfY2xlYXIoS0VZX0NEKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwOTI6IG1hcF9rZXlfY2xlYXIoS0VZX1ZDUik7CQlicmVhazsKKwkJCQljYXNlIDB4MDkzOiBtYXBfa2V5X2NsZWFyKEtFWV9UVU5FUik7CQlicmVhazsKKwkJCQljYXNlIDB4MDk0OiBtYXBfa2V5X2NsZWFyKEtFWV9FWElUKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgwOTU6IG1hcF9rZXlfY2xlYXIoS0VZX0hFTFApOwkJYnJlYWs7CisJCQkJY2FzZSAweDA5NjogbWFwX2tleV9jbGVhcihLRVlfVEFQRSk7CQlicmVhazsKKwkJCQljYXNlIDB4MDk3OiBtYXBfa2V5X2NsZWFyKEtFWV9UVjIpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA5ODogbWFwX2tleV9jbGVhcihLRVlfU0FUKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwOWE6IG1hcF9rZXlfY2xlYXIoS0VZX1BWUik7CQlicmVhazsKKwogCQkJCWNhc2UgMHgwOWM6IG1hcF9rZXlfY2xlYXIoS0VZX0NIQU5ORUxVUCk7CWJyZWFrOwogCQkJCWNhc2UgMHgwOWQ6IG1hcF9rZXlfY2xlYXIoS0VZX0NIQU5ORUxET1dOKTsJYnJlYWs7CisJCQkJY2FzZSAweDBhMDogbWFwX2tleV9jbGVhcihLRVlfVkNSMik7CQlicmVhazsKKwogCQkJCWNhc2UgMHgwYjA6IG1hcF9rZXlfY2xlYXIoS0VZX1BMQVkpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDBiMTogbWFwX2tleV9jbGVhcihLRVlfUEFVU0UpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDBiMjogbWFwX2tleV9jbGVhcihLRVlfUkVDT1JEKTsJCWJyZWFrOwpAQCAtNDMzLDYgKzQ2OSw3IEBACiAJCQkJY2FzZSAweDBiNjogbWFwX2tleV9jbGVhcihLRVlfUFJFVklPVVNTT05HKTsJYnJlYWs7CiAJCQkJY2FzZSAweDBiNzogbWFwX2tleV9jbGVhcihLRVlfU1RPUENEKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgwYjg6IG1hcF9rZXlfY2xlYXIoS0VZX0VKRUNUQ0QpOwkJYnJlYWs7CisKIAkJCQljYXNlIDB4MGNkOiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZUEFVU0UpOwlicmVhazsKIAkJCSAgICAgICAgY2FzZSAweDBlMDogbWFwX2Fic19jbGVhcihBQlNfVk9MVU1FKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgwZTI6IG1hcF9rZXlfY2xlYXIoS0VZX01VVEUpOwkJYnJlYWs7CkBAIC00NDAsMTEgKzQ3NywzMCBAQAogCQkJCWNhc2UgMHgwZTk6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRVVQKTsJYnJlYWs7CiAJCQkJY2FzZSAweDBlYTogbWFwX2tleV9jbGVhcihLRVlfVk9MVU1FRE9XTik7CWJyZWFrOwogCQkJCWNhc2UgMHgxODM6IG1hcF9rZXlfY2xlYXIoS0VZX0NPTkZJRyk7CQlicmVhazsKKwkJCQljYXNlIDB4MTg0OiBtYXBfa2V5X2NsZWFyKEtFWV9XT1JEUFJPQ0VTU09SKTsJYnJlYWs7CisJCQkJY2FzZSAweDE4NTogbWFwX2tleV9jbGVhcihLRVlfRURJVE9SKTsJCWJyZWFrOworCQkJCWNhc2UgMHgxODY6IG1hcF9rZXlfY2xlYXIoS0VZX1NQUkVBRFNIRUVUKTsJYnJlYWs7CisJCQkJY2FzZSAweDE4NzogbWFwX2tleV9jbGVhcihLRVlfR1JBUEhJQ1NFRElUT1IpOwlicmVhazsKKwkJCQljYXNlIDB4MTg4OiBtYXBfa2V5X2NsZWFyKEtFWV9QUkVTRU5UQVRJT04pOwlicmVhazsKKwkJCQljYXNlIDB4MTg5OiBtYXBfa2V5X2NsZWFyKEtFWV9EQVRBQkFTRSk7CWJyZWFrOwogCQkJCWNhc2UgMHgxOGE6IG1hcF9rZXlfY2xlYXIoS0VZX01BSUwpOwkJYnJlYWs7CisJCQkJY2FzZSAweDE4YjogbWFwX2tleV9jbGVhcihLRVlfTkVXUyk7CQlicmVhazsKKwkJCQljYXNlIDB4MThjOiBtYXBfa2V5X2NsZWFyKEtFWV9WT0lDRU1BSUwpOwlicmVhazsKKwkJCQljYXNlIDB4MThkOiBtYXBfa2V5X2NsZWFyKEtFWV9BRERSRVNTQk9PSyk7CWJyZWFrOworCQkJCWNhc2UgMHgxOGU6IG1hcF9rZXlfY2xlYXIoS0VZX0NBTEVOREFSKTsJYnJlYWs7CisJCQkJY2FzZSAweDE5MTogbWFwX2tleV9jbGVhcihLRVlfRklOQU5DRSk7CQlicmVhazsKIAkJCQljYXNlIDB4MTkyOiBtYXBfa2V5X2NsZWFyKEtFWV9DQUxDKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgxOTQ6IG1hcF9rZXlfY2xlYXIoS0VZX0ZJTEUpOwkJYnJlYWs7CisJCQkJY2FzZSAweDE5NjogbWFwX2tleV9jbGVhcihLRVlfV1dXKTsJCWJyZWFrOworCQkJCWNhc2UgMHgxOWU6IG1hcF9rZXlfY2xlYXIoS0VZX0NPRkZFRSk7CQlicmVhazsKKwkJCQljYXNlIDB4MWE2OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgxYTc6IG1hcF9rZXlfY2xlYXIoS0VZX0RPQ1VNRU5UUyk7CWJyZWFrOworCQkJCWNhc2UgMHgxYmM6IG1hcF9rZXlfY2xlYXIoS0VZX01FU1NFTkdFUik7CWJyZWFrOworCQkJCWNhc2UgMHgxYmQ6IG1hcF9rZXlfY2xlYXIoS0VZX0lORk8pOwkJYnJlYWs7CiAJCQkJY2FzZSAweDIwMTogbWFwX2tleV9jbGVhcihLRVlfTkVXKTsJCWJyZWFrOworCQkJCWNhc2UgMHgyMDI6IG1hcF9rZXlfY2xlYXIoS0VZX09QRU4pOwkJYnJlYWs7CisJCQkJY2FzZSAweDIwMzogbWFwX2tleV9jbGVhcihLRVlfQ0xPU0UpOwkJYnJlYWs7CisJCQkJY2FzZSAweDIwNDogbWFwX2tleV9jbGVhcihLRVlfRVhJVCk7CQlicmVhazsKIAkJCQljYXNlIDB4MjA3OiBtYXBfa2V5X2NsZWFyKEtFWV9TQVZFKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgyMDg6IG1hcF9rZXlfY2xlYXIoS0VZX1BSSU5UKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgyMDk6IG1hcF9rZXlfY2xlYXIoS0VZX1BST1BTKTsJCWJyZWFrOwpAQCAtNDU5LDEwICs1MTUsMTUgQEAKIAkJCQljYXNlIDB4MjI2OiBtYXBfa2V5X2NsZWFyKEtFWV9TVE9QKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgyMjc6IG1hcF9rZXlfY2xlYXIoS0VZX1JFRlJFU0gpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDIyYTogbWFwX2tleV9jbGVhcihLRVlfQk9PS01BUktTKTsJYnJlYWs7CisJCQkJY2FzZSAweDIyZDogbWFwX2tleV9jbGVhcihLRVlfWk9PTUlOKTsJCWJyZWFrOworCQkJCWNhc2UgMHgyMmU6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01PVVQpOwkJYnJlYWs7CisJCQkJY2FzZSAweDIyZjogbWFwX2tleV9jbGVhcihLRVlfWk9PTVJFU0VUKTsJYnJlYWs7CiAJCQkJY2FzZSAweDIzMzogbWFwX2tleV9jbGVhcihLRVlfU0NST0xMVVApOwlicmVhazsKIAkJCQljYXNlIDB4MjM0OiBtYXBfa2V5X2NsZWFyKEtFWV9TQ1JPTExET1dOKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDIzODogbWFwX3JlbChSRUxfSFdIRUVMKTsJCWJyZWFrOworCQkJCWNhc2UgMHgyMzg6IG1hcF9yZWxfY2xlYXIoUkVMX0hXSEVFTCk7CQlicmVhazsKKwkJCQljYXNlIDB4MjVmOiBtYXBfa2V5X2NsZWFyKEtFWV9DQU5DRUwpOwkJYnJlYWs7CiAJCQkJY2FzZSAweDI3OTogbWFwX2tleV9jbGVhcihLRVlfUkVETyk7CQlicmVhazsKKwogCQkJCWNhc2UgMHgyODk6IG1hcF9rZXlfY2xlYXIoS0VZX1JFUExZKTsJCWJyZWFrOwogCQkJCWNhc2UgMHgyOGI6IG1hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkRNQUlMKTsJYnJlYWs7CiAJCQkJY2FzZSAweDI4YzogbWFwX2tleV9jbGVhcihLRVlfU0VORCk7CQlicmVhazsKQEAgLTU4MSw2ICs2NDIsMTAgQEAKIAkJfHwgKChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA3KSkpCiAJCWdvdG8gaWdub3JlOwogCisJaWYgKChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS19CQURfUkVMQVRJVkVfS0VZUykgJiYKKwkJdXNhZ2UtPnR5cGUgPT0gRVZfS0VZICYmIChmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1JFTEFUSVZFKSkKKwkJZmllbGQtPmZsYWdzICY9IH5ISURfTUFJTl9JVEVNX1JFTEFUSVZFOworCiAJc2V0X2JpdCh1c2FnZS0+dHlwZSwgaW5wdXQtPmV2Yml0KTsKIAogCXdoaWxlICh1c2FnZS0+Y29kZSA8PSBtYXggJiYgdGVzdF9hbmRfc2V0X2JpdCh1c2FnZS0+Y29kZSwgYml0KSkKQEAgLTcyMCw4ICs3ODUsOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaGlkaW5wdXQsICZoaWQtPmlucHV0cywgbGlzdCkKIAkJaW5wdXRfc3luYyhoaWRpbnB1dC0+aW5wdXQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkaW5wdXRfcmVwb3J0X2V2ZW50KTsKIAotc3RhdGljIGludCBoaWRpbnB1dF9maW5kX2ZpZWxkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgc3RydWN0IGhpZF9maWVsZCAqKmZpZWxkKQoraW50IGhpZGlucHV0X2ZpbmRfZmllbGQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBzdHJ1Y3QgaGlkX2ZpZWxkICoqZmllbGQpCiB7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAlpbnQgaSwgajsKQEAgLTczNiw0MSArODAyLDcgQEAKIAl9CiAJcmV0dXJuIC0xOwogfQotCi1zdGF0aWMgaW50IGhpZGlucHV0X2lucHV0X2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKLQlpbnQgb2Zmc2V0OwotCi0JaWYgKHR5cGUgPT0gRVZfRkYpCi0JCXJldHVybiBpbnB1dF9mZl9ldmVudChkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKLQotCWlmICh0eXBlICE9IEVWX0xFRCkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKChvZmZzZXQgPSBoaWRpbnB1dF9maW5kX2ZpZWxkKGhpZCwgdHlwZSwgY29kZSwgJmZpZWxkKSkgPT0gLTEpIHsKLQkJd2FybigiZXZlbnQgZmllbGQgbm90IGZvdW5kIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQloaWRfc2V0X2ZpZWxkKGZpZWxkLCBvZmZzZXQsIHZhbHVlKTsKLQloaWRfc3VibWl0X3JlcG9ydChoaWQsIGZpZWxkLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhpZGlucHV0X29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQotewotCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7Ci0JcmV0dXJuIGhpZF9vcGVuKGhpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpZGlucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOwotCWhpZF9jbG9zZShoaWQpOwotfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkaW5wdXRfZmluZF9maWVsZCk7CiAKIC8qCiAgKiBSZWdpc3RlciB0aGUgaW5wdXQgZGV2aWNlOyBwcmludCBhIG1lc3NhZ2UuCkBAIC03ODAsNyArODEyLDYgQEAKIAogaW50IGhpZGlucHV0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaGlkLT5kZXY7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IE5VTEw7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwpAQCAtODE0LDE2ICs4NDUsMTggQEAKIAkJCQl9CiAKIAkJCQlpbnB1dF9kZXYtPnByaXZhdGUgPSBoaWQ7Ci0JCQkJaW5wdXRfZGV2LT5ldmVudCA9IGhpZGlucHV0X2lucHV0X2V2ZW50OwotCQkJCWlucHV0X2Rldi0+b3BlbiA9IGhpZGlucHV0X29wZW47Ci0JCQkJaW5wdXRfZGV2LT5jbG9zZSA9IGhpZGlucHV0X2Nsb3NlOworCQkJCWlucHV0X2Rldi0+ZXZlbnQgPSBoaWQtPmhpZGlucHV0X2lucHV0X2V2ZW50OworCQkJCWlucHV0X2Rldi0+b3BlbiA9IGhpZC0+aGlkaW5wdXRfb3BlbjsKKwkJCQlpbnB1dF9kZXYtPmNsb3NlID0gaGlkLT5oaWRpbnB1dF9jbG9zZTsKIAogCQkJCWlucHV0X2Rldi0+bmFtZSA9IGhpZC0+bmFtZTsKIAkJCQlpbnB1dF9kZXYtPnBoeXMgPSBoaWQtPnBoeXM7CiAJCQkJaW5wdXRfZGV2LT51bmlxID0gaGlkLT51bmlxOwotCQkJCXVzYl90b19pbnB1dF9pZChkZXYsICZpbnB1dF9kZXYtPmlkKTsKLQkJCQlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJmhpZC0+aW50Zi0+ZGV2OwotCisJCQkJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gaGlkLT5idXM7CisJCQkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgID0gaGlkLT52ZW5kb3I7CisJCQkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gaGlkLT5wcm9kdWN0OworCQkJCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IGhpZC0+dmVyc2lvbjsKKwkJCQlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gaGlkLT5kZXY7CiAJCQkJaGlkaW5wdXQtPmlucHV0ID0gaW5wdXRfZGV2OwogCQkJCWxpc3RfYWRkX3RhaWwoJmhpZGlucHV0LT5saXN0LCAmaGlkLT5pbnB1dHMpOwogCQkJfQpAQCAtODQ1LDE2ICs4NzgsMTIgQEAKIAkJCX0KIAkJfQogCi0JLyogVGhpcyBvbmx5IGdldHMgY2FsbGVkIHdoZW4gd2UgYXJlIGEgc2luZ2xlLWlucHV0IChtb3N0IG9mIHRoZQotCSAqIHRpbWUpLiBJT1csIG5vdCBhIEhJRF9RVUlSS19NVUxUSV9JTlBVVC4gVGhlIGhpZF9mZl9pbml0KCkgaXMKLQkgKiBvbmx5IHVzZWZ1bCBpbiB0aGlzIGNhc2UsIGFuZCBub3QgZm9yIG11bHRpLWlucHV0IHF1aXJrcy4gKi8KLQlpZiAoaGlkaW5wdXQpIHsKLQkJaGlkX2ZmX2luaXQoaGlkKTsKKwlpZiAoaGlkaW5wdXQpCiAJCWlucHV0X3JlZ2lzdGVyX2RldmljZShoaWRpbnB1dC0+aW5wdXQpOwotCX0KIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkaW5wdXRfY29ubmVjdCk7CiAKIHZvaWQgaGlkaW5wdXRfZGlzY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQogewpAQCAtODY2LDMgKzg5NSw1IEBACiAJCWtmcmVlKGhpZGlucHV0KTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChoaWRpbnB1dF9kaXNjb25uZWN0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IGU3NmQ5MTkuLjg5MWVmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTEwNiw2ICsxMDYsMzEgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGs4dGVtcC4KIAorY29uZmlnIFNFTlNPUlNfQU1TCisJdHJpc3RhdGUgIkFwcGxlIE1vdGlvbiBTZW5zb3IgZHJpdmVyIgorCWRlcGVuZHMgb24gSFdNT04gJiYgUFBDX1BNQUMgJiYgIVBQQzY0ICYmIElOUFVUICYmICgoQURCX1BNVSAmJiBJMkMgPSB5KSB8fCAoQURCX1BNVSAmJiAhSTJDKSB8fCBJMkMpICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBtb3Rpb24gc2Vuc29yIGluY2x1ZGVkIGluIFBvd2VyQm9va3MuIEluY2x1ZGVzCisJICBpbXBsZW1lbnRhdGlvbnMgZm9yIFBNVSBhbmQgSTJDLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGFtcy4KKworY29uZmlnIFNFTlNPUlNfQU1TX1BNVQorCWJvb2wgIlBNVSB2YXJpYW50IgorCWRlcGVuZHMgb24gU0VOU09SU19BTVMgJiYgQURCX1BNVQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFBNVSB2YXJpYW50IG9mIG1vdGlvbiBzZW5zb3IsIGZvdW5kIGluIGxhdGUgMjAwNSBQb3dlckJvb2tzLgorCitjb25maWcgU0VOU09SU19BTVNfSTJDCisJYm9vbCAiSTJDIHZhcmlhbnQiCisJZGVwZW5kcyBvbiBTRU5TT1JTX0FNUyAmJiBJMkMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJMkMgdmFyaWFudCBvZiBtb3Rpb24gc2Vuc29yLCBmb3VuZCBpbiBlYXJseSAyMDA1IFBvd2VyQm9va3MgYW5kCisJICBpQm9va3MuCisKIGNvbmZpZyBTRU5TT1JTX0FTQjEwMAogCXRyaXN0YXRlICJBc3VzIEFTQjEwMCBCYWNoIgogCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTApAQCAtMTQyLDExICsxNjcsMTIgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIGRzMTYyMS4KIAogY29uZmlnIFNFTlNPUlNfRjcxODA1RgotCXRyaXN0YXRlICJGaW50ZWsgRjcxODA1Ri9GRyIKKwl0cmlzdGF0ZSAiRmludGVrIEY3MTgwNUYvRkcgYW5kIEY3MTg3MkYvRkciCiAJZGVwZW5kcyBvbiBIV01PTiAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgaGFyZHdhcmUgbW9uaXRvcmluZwotCSAgZmVhdHVyZXMgb2YgdGhlIEZpbnRlayBGNzE4MDVGL0ZHIGNoaXBzLgorCSAgZmVhdHVyZXMgb2YgdGhlIEZpbnRlayBGNzE4MDVGL0ZHIGFuZCBGNzE4NzJGL0ZHIFN1cGVyLUkvTworCSAgY2hpcHMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGY3MTgwNWYuCkBAIC0zNTMsNiArMzc5LDE5IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBwYzg3MzYwLgogCitjb25maWcgU0VOU09SU19QQzg3NDI3CisJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzQyNyIKKwlkZXBlbmRzIG9uIEhXTU9OICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIG1vbml0b3JpbmcKKwkgIGZ1bmN0aW9ucyBvZiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQQzg3NDI3IFN1cGVyLUkvTyBjaGlwLgorCSAgVGhlIGNoaXAgaGFzIHR3byBkaXN0aW5jdCBsb2dpY2FsIGRldmljZXMsIG9uZSBmb3IgZmFuIHNwZWVkCisJICBtb25pdG9yaW5nIGFuZCBjb250cm9sLCBhbmQgb25lIGZvciB2b2x0YWdlIGFuZCB0ZW1wZXJhdHVyZQorCSAgbW9uaXRvcmluZy4gT25seSBmYW4gc3BlZWQgbW9uaXRvcmluZyBpcyBzdXBwb3J0ZWQgcmlnaHQgbm93LgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBwYzg3NDI3LgorCiBjb25maWcgU0VOU09SU19TSVM1NTk1CiAJdHJpc3RhdGUgIlNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAuIFNpUzU1OTUiCiAJZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgUENJICYmIEVYUEVSSU1FTlRBTApAQCAtNDc0LDYgKzUxMywxNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgdzgzNzkyZC4KIAorY29uZmlnIFNFTlNPUlNfVzgzNzkzCisJdHJpc3RhdGUgIldpbmJvbmQgVzgzNzkzIgorCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgV2luYm9uZCBXODM3OTMKKwkgIGhhcmR3YXJlIG1vbml0b3JpbmcgY2hpcC4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgdzgzNzkzLgorCiBjb25maWcgU0VOU09SU19XODNMNzg1VFMKIAl0cmlzdGF0ZSAiV2luYm9uZCBXODNMNzg1VFMtUyIKIAlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKQEAgLTUyNyw2ICs1NzYsOSBAQAogCSAgVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCiAJICB0aGUgbGFwdG9wIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4KIAorCSAgSWYgeW91ciBUaGlua1BhZCBpcyBub3QgcmVjb2duaXplZCBieSB0aGUgZHJpdmVyLCBwbGVhc2UgdXBkYXRlIHRvIGxhdGVzdAorCSAgQklPUy4gVGhpcyBpcyBlc3BlY2lhbGx5IHRoZSBjYXNlIGZvciBzb21lIFI1MiBUaGlua1BhZHMuCisKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gYXBwbGljYWJsZSBsYXB0b3AgYW5kIHdhbnQgdG8gZXhwZXJpZW5jZQogCSAgdGhlIGF3ZXNvbWUgcG93ZXIgb2YgaGRhcHMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IGFmMDFjYzYuLjMxNjYxMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtOSw2ICs5LDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0FTQjEwMCkJKz0gYXNiMTAwLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1c4MzYyN0hGKQkrPSB3ODM2MjdoZi5vCiBvYmotJChDT05GSUdfU0VOU09SU19XODM3OTJEKQkrPSB3ODM3OTJkLm8KK29iai0kKENPTkZJR19TRU5TT1JTX1c4Mzc5MykJKz0gdzgzNzkzLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1c4Mzc4MUQpCSs9IHc4Mzc4MWQubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVzgzNzkxRCkJKz0gdzgzNzkxZC5vCiAKQEAgLTE4LDYgKzE5LDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0FETTEwMjYpCSs9IGFkbTEwMjYubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURNMTAzMSkJKz0gYWRtMTAzMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRE05MjQwKQkrPSBhZG05MjQwLm8KK29iai0kKENPTkZJR19TRU5TT1JTX0FNUykJKz0gYW1zLwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQVRYUDEpCSs9IGF0eHAxLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0RTMTYyMSkJKz0gZHMxNjIxLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0Y3MTgwNUYpCSs9IGY3MTgwNWYubwpAQCAtNDEsNiArNDMsNyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE05MikJKz0gbG05Mi5vCiBvYmotJChDT05GSUdfU0VOU09SU19NQVgxNjE5KQkrPSBtYXgxNjE5Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDODczNjApCSs9IHBjODczNjAubworb2JqLSQoQ09ORklHX1NFTlNPUlNfUEM4NzQyNykJKz0gcGM4NzQyNy5vCiBvYmotJChDT05GSUdfU0VOU09SU19TSVM1NTk1KQkrPSBzaXM1NTk1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcpKz0gc21zYzQ3YjM5Ny5vCiBvYmotJChDT05GSUdfU0VOU09SU19TTVNDNDdNMSkJKz0gc21zYzQ3bTEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL2Ftcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWM5NWIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9hbXMvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciBBcHBsZSBNb3Rpb24gU2Vuc29yIGRyaXZlcgorIworCithbXMteQkJCQkJOj0gYW1zLWNvcmUubyBhbXMtaW5wdXQubworYW1zLSQoQ09ORklHX1NFTlNPUlNfQU1TX1BNVSkJCSs9IGFtcy1wbXUubworYW1zLSQoQ09ORklHX1NFTlNPUlNfQU1TX0kyQykJCSs9IGFtcy1pMmMubworb2JqLSQoQ09ORklHX1NFTlNPUlNfQU1TKQkJKz0gYW1zLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZjBmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQXBwbGUgTW90aW9uIFNlbnNvciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgU3RlbGlhbiBQb3AgKHN0ZWxpYW5AcG9waWVzLm5ldCkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEhhbnNlbG1hbm4gKGxpbnV4LWtlcm5lbEBoYW5zbWkuY2gpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vcG1hY19wZnVuYy5oPgorI2luY2x1ZGUgPGFzbS9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiYW1zLmgiCisKKy8qIFRoZXJlIGlzIG9ubHkgb25lIG1vdGlvbiBzZW5zb3IgcGVyIG1hY2hpbmUgKi8KK3N0cnVjdCBhbXMgYW1zX2luZm87CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmVyYm9zZTsKK21vZHVsZV9wYXJhbSh2ZXJib3NlLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmVyYm9zZSwgIlNob3cgZnJlZSBmYWxscyBhbmQgc2hvY2tzIGluIGtlcm5lbCBvdXRwdXQiKTsKKworLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KK3ZvaWQgYW1zX3NlbnNvcnMoczggKngsIHM4ICp5LCBzOCAqeikKK3sKKwl1MzIgb3JpZW50ID0gYW1zX2luZm8udmZsYWc/IGFtc19pbmZvLm9yaWVudDEgOiBhbXNfaW5mby5vcmllbnQyOworCisJaWYgKG9yaWVudCAmIDB4ODApCisJCS8qIFggYW5kIFkgc3dhcHBlZCAqLworCQlhbXNfaW5mby5nZXRfeHl6KHksIHgsIHopOworCWVsc2UKKwkJYW1zX2luZm8uZ2V0X3h5eih4LCB5LCB6KTsKKworCWlmIChvcmllbnQgJiAweDA0KQorCQkqeiA9IH4oKnopOworCWlmIChvcmllbnQgJiAweDAyKQorCQkqeSA9IH4oKnkpOworCWlmIChvcmllbnQgJiAweDAxKQorCQkqeCA9IH4oKngpOworfQorCitzdGF0aWMgc3NpemVfdCBhbXNfc2hvd19jdXJyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXM4IHgsIHksIHo7CisKKwltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKKwlhbXNfc2Vuc29ycygmeCwgJnksICZ6KTsKKwltdXRleF91bmxvY2soJmFtc19pbmZvLmxvY2spOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWQgJWQgJWRcbiIsIHgsIHksIHopOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY3VycmVudCwgU19JUlVHTywgYW1zX3Nob3dfY3VycmVudCwgTlVMTCk7CisKK3N0YXRpYyB2b2lkIGFtc19oYW5kbGVfaXJxKHZvaWQgKmRhdGEpCit7CisJZW51bSBhbXNfaXJxIGlycSA9ICooKGVudW0gYW1zX2lycSAqKWRhdGEpOworCisJc3Bpbl9sb2NrKCZhbXNfaW5mby5pcnFfbG9jayk7CisKKwlhbXNfaW5mby53b3JrZXJfaXJxcyB8PSBpcnE7CisJc2NoZWR1bGVfd29yaygmYW1zX2luZm8ud29ya2VyKTsKKworCXNwaW5fdW5sb2NrKCZhbXNfaW5mby5pcnFfbG9jayk7Cit9CisKK3N0YXRpYyBlbnVtIGFtc19pcnEgYW1zX2ZyZWVmYWxsX2lycV9kYXRhID0gQU1TX0lSUV9GUkVFRkFMTDsKK3N0YXRpYyBzdHJ1Y3QgcG1mX2lycV9jbGllbnQgYW1zX2ZyZWVmYWxsX2NsaWVudCA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuaGFuZGxlciA9IGFtc19oYW5kbGVfaXJxLAorCS5kYXRhID0gJmFtc19mcmVlZmFsbF9pcnFfZGF0YSwKK307CisKK3N0YXRpYyBlbnVtIGFtc19pcnEgYW1zX3Nob2NrX2lycV9kYXRhID0gQU1TX0lSUV9TSE9DSzsKK3N0YXRpYyBzdHJ1Y3QgcG1mX2lycV9jbGllbnQgYW1zX3Nob2NrX2NsaWVudCA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuaGFuZGxlciA9IGFtc19oYW5kbGVfaXJxLAorCS5kYXRhID0gJmFtc19zaG9ja19pcnFfZGF0YSwKK307CisKKy8qIE9uY2UgaGFyZCBkaXNrIHBhcmtpbmcgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCwgdGhpcyBmdW5jdGlvbiBjYW4KKyAqIHRyaWdnZXIgaXQuCisgKi8KK3N0YXRpYyB2b2lkIGFtc193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCW11dGV4X2xvY2soJmFtc19pbmZvLmxvY2spOworCisJaWYgKGFtc19pbmZvLmhhc19kZXZpY2UpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1zX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoYW1zX2luZm8ud29ya2VyX2lycXMgJiBBTVNfSVJRX0ZSRUVGQUxMKSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGsoS0VSTl9JTkZPICJhbXM6IGZyZWVmYWxsIGRldGVjdGVkIVxuIik7CisKKwkJCWFtc19pbmZvLndvcmtlcl9pcnFzICY9IH5BTVNfSVJRX0ZSRUVGQUxMOworCisJCQkvKiB3ZSBtdXN0IGNhbGwgdGhpcyB3aXRoIGludGVycnVwdHMgZW5hYmxlZCAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1zX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKKwkJCWFtc19pbmZvLmNsZWFyX2lycShBTVNfSVJRX0ZSRUVGQUxMKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCQl9CisKKwkJaWYgKGFtc19pbmZvLndvcmtlcl9pcnFzICYgQU1TX0lSUV9TSE9DSykgeworCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBzaG9jayBkZXRlY3RlZCFcbiIpOworCisJCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9TSE9DSzsKKworCQkJLyogd2UgbXVzdCBjYWxsIHRoaXMgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisJCQlhbXNfaW5mby5jbGVhcl9pcnEoQU1TX0lSUV9TSE9DSyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1zX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKK30KKworLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KK2ludCBhbXNfc2Vuc29yX2F0dGFjaCh2b2lkKQoreworCWludCByZXN1bHQ7CisJdTMyICpwcm9wOworCisJLyogR2V0IG9yaWVudGF0aW9uICovCisJcHJvcCA9ICh1MzIqKWdldF9wcm9wZXJ0eShhbXNfaW5mby5vZl9ub2RlLCAib3JpZW50YXRpb24iLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybiAtRU5PREVWOworCWFtc19pbmZvLm9yaWVudDEgPSAqcHJvcDsKKwlhbXNfaW5mby5vcmllbnQyID0gKihwcm9wICsgMSk7CisKKwkvKiBSZWdpc3RlciBmcmVlZmFsbCBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXJlc3VsdCA9IHBtZl9yZWdpc3Rlcl9pcnFfY2xpZW50KGFtc19pbmZvLm9mX25vZGUsCisJCQkiYWNjZWwtaW50LTEiLAorCQkJJmFtc19mcmVlZmFsbF9jbGllbnQpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIFJlc2V0IHNhdmVkIGlycXMgKi8KKwlhbXNfaW5mby53b3JrZXJfaXJxcyA9IDA7CisKKwkvKiBSZWdpc3RlciBzaG9jayBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXJlc3VsdCA9IHBtZl9yZWdpc3Rlcl9pcnFfY2xpZW50KGFtc19pbmZvLm9mX25vZGUsCisJCQkiYWNjZWwtaW50LTIiLAorCQkJJmFtc19zaG9ja19jbGllbnQpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIHJlbGVhc2VfZnJlZWZhbGw7CisKKwkvKiBDcmVhdGUgZGV2aWNlICovCisJYW1zX2luZm8ub2ZfZGV2ID0gb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShhbXNfaW5mby5vZl9ub2RlLCAiYW1zIiwgTlVMTCk7CisJaWYgKCFhbXNfaW5mby5vZl9kZXYpIHsKKwkJcmVzdWx0ID0gLUVOT0RFVjsKKwkJZ290byByZWxlYXNlX3Nob2NrOworCX0KKworCS8qIENyZWF0ZSBhdHRyaWJ1dGVzICovCisJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZhbXNfaW5mby5vZl9kZXYtPmRldiwgJmRldl9hdHRyX2N1cnJlbnQpOworCWlmIChyZXN1bHQpCisJCWdvdG8gcmVsZWFzZV9vZjsKKworCWFtc19pbmZvLnZmbGFnID0gISEoYW1zX2luZm8uZ2V0X3ZlbmRvcigpICYgMHgxMCk7CisKKwkvKiBJbml0IGlucHV0IGRldmljZSAqLworCXJlc3VsdCA9IGFtc19pbnB1dF9pbml0KCk7CisJaWYgKHJlc3VsdCkKKwkJZ290byByZWxlYXNlX2RldmljZV9maWxlOworCisJcmV0dXJuIHJlc3VsdDsKK3JlbGVhc2VfZGV2aWNlX2ZpbGU6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZhbXNfaW5mby5vZl9kZXYtPmRldiwgJmRldl9hdHRyX2N1cnJlbnQpOworcmVsZWFzZV9vZjoKKwlvZl9kZXZpY2VfdW5yZWdpc3RlcihhbXNfaW5mby5vZl9kZXYpOworcmVsZWFzZV9zaG9jazoKKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfc2hvY2tfY2xpZW50KTsKK3JlbGVhc2VfZnJlZWZhbGw6CisJcG1mX3VucmVnaXN0ZXJfaXJxX2NsaWVudCgmYW1zX2ZyZWVmYWxsX2NsaWVudCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IF9faW5pdCBhbXNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlzcGluX2xvY2tfaW5pdCgmYW1zX2luZm8uaXJxX2xvY2spOworCW11dGV4X2luaXQoJmFtc19pbmZvLmxvY2spOworCUlOSVRfV09SSygmYW1zX2luZm8ud29ya2VyLCBhbXNfd29ya2VyKTsKKworI2lmZGVmIENPTkZJR19TRU5TT1JTX0FNU19JMkMKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJhY2NlbGVyb21ldGVyIik7CisJaWYgKG5wICYmIGRldmljZV9pc19jb21wYXRpYmxlKG5wLCAiQUFQTCxhY2NlbGVyb21ldGVyXzEiKSkKKwkJLyogRm91bmQgSTJDIG1vdGlvbiBzZW5zb3IgKi8KKwkJcmV0dXJuIGFtc19pMmNfaW5pdChucCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TRU5TT1JTX0FNU19QTVUKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJzbXMiKTsKKwlpZiAobnAgJiYgZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJzbXMiKSkKKwkJLyogRm91bmQgUE1VIG1vdGlvbiBzZW5zb3IgKi8KKwkJcmV0dXJuIGFtc19wbXVfaW5pdChucCk7CisjZW5kaWYKKworCXByaW50ayhLRVJOX0VSUiAiYW1zOiBObyBtb3Rpb24gc2Vuc29yIGZvdW5kLlxuIik7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKwordm9pZCBhbXNfZXhpdCh2b2lkKQoreworCW11dGV4X2xvY2soJmFtc19pbmZvLmxvY2spOworCisJaWYgKGFtc19pbmZvLmhhc19kZXZpY2UpIHsKKwkJLyogUmVtb3ZlIGlucHV0IGRldmljZSAqLworCQlhbXNfaW5wdXRfZXhpdCgpOworCisJCS8qIFNodXQgZG93biBpbXBsZW1lbnRhdGlvbiAqLworCQlhbXNfaW5mby5leGl0KCk7CisKKwkJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgorCQkgKgorCQkgKiBXZSBkbyB0aGlzIGFmdGVyIGFtc19pbmZvLmV4aXQoKSwgYmVjYXVzZSBhbiBpbnRlcnJ1cHQgbWlnaHQKKwkJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KKwkJICovCisJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkJLyogUmVtb3ZlIGF0dHJpYnV0ZXMgKi8KKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZhbXNfaW5mby5vZl9kZXYtPmRldiwgJmRldl9hdHRyX2N1cnJlbnQpOworCisJCS8qIFJlbW92ZSBkZXZpY2UgKi8KKwkJb2ZfZGV2aWNlX3VucmVnaXN0ZXIoYW1zX2luZm8ub2ZfZGV2KTsKKworCQkvKiBSZW1vdmUgaGFuZGxlciAqLworCQlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfc2hvY2tfY2xpZW50KTsKKwkJcG1mX3VucmVnaXN0ZXJfaXJxX2NsaWVudCgmYW1zX2ZyZWVmYWxsX2NsaWVudCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKK30KKworTU9EVUxFX0FVVEhPUigiU3RlbGlhbiBQb3AsIE1pY2hhZWwgSGFuc2VsbWFubiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBcHBsZSBNb3Rpb24gU2Vuc29yIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChhbXNfaW5pdCk7Cittb2R1bGVfZXhpdChhbXNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyNGJkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pMmMuYwpAQCAtMCwwICsxLDI5OSBAQAorLyoKKyAqIEFwcGxlIE1vdGlvbiBTZW5zb3IgZHJpdmVyIChJMkMgdmFyaWFudCkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgU3RlbGlhbiBQb3AgKHN0ZWxpYW5AcG9waWVzLm5ldCkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEhhbnNlbG1hbm4gKGxpbnV4LWtlcm5lbEBoYW5zbWkuY2gpCisgKgorICogQ2xlYW4gcm9vbSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgcmV2ZXJzZSBlbmdpbmVlcmVkIE1hYyBPUyBYIGRyaXZlciBieQorICogSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4sIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vam9oYW5uZXMuc2lwc29sdXRpb25zLm5ldC9Qb3dlckJvb2svQXBwbGVfTW90aW9uX1NlbnNvcl9TcGVjaWZpY2F0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiYW1zLmgiCisKKy8qIEFNUyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQU1TX0NPTU1BTkQJMHgwMAkvKiBjb21tYW5kIHJlZ2lzdGVyICovCisjZGVmaW5lIEFNU19TVEFUVVMJMHgwMQkvKiBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQU1TX0NUUkwxCTB4MDIJLyogcmVhZCBjb250cm9sIDEgKG51bWJlciBvZiB2YWx1ZXMpICovCisjZGVmaW5lIEFNU19DVFJMMgkweDAzCS8qIHJlYWQgY29udHJvbCAyIChvZmZzZXQ/KSAqLworI2RlZmluZSBBTVNfQ1RSTDMJMHgwNAkvKiByZWFkIGNvbnRyb2wgMyAoc2l6ZSBvZiBlYWNoIHZhbHVlPykgKi8KKyNkZWZpbmUgQU1TX0RBVEExCTB4MDUJLyogcmVhZCBkYXRhIDEgKi8KKyNkZWZpbmUgQU1TX0RBVEEyCTB4MDYJLyogcmVhZCBkYXRhIDIgKi8KKyNkZWZpbmUgQU1TX0RBVEEzCTB4MDcJLyogcmVhZCBkYXRhIDMgKi8KKyNkZWZpbmUgQU1TX0RBVEE0CTB4MDgJLyogcmVhZCBkYXRhIDQgKi8KKyNkZWZpbmUgQU1TX0RBVEFYCTB4MjAJLyogZGF0YSBYICovCisjZGVmaW5lIEFNU19EQVRBWQkweDIxCS8qIGRhdGEgWSAqLworI2RlZmluZSBBTVNfREFUQVoJMHgyMgkvKiBkYXRhIFogKi8KKyNkZWZpbmUgQU1TX0ZSRUVGQUxMCTB4MjQJLyogZnJlZWZhbGwgaW50IGNvbnRyb2wgKi8KKyNkZWZpbmUgQU1TX1NIT0NLCTB4MjUJLyogc2hvY2sgaW50IGNvbnRyb2wgKi8KKyNkZWZpbmUgQU1TX1NFTlNMT1cJMHgyNgkvKiBzZW5zaXRpdml0eSBsb3cgbGltaXQgKi8KKyNkZWZpbmUgQU1TX1NFTlNISUdICTB4MjcJLyogc2Vuc2l0aXZpdHkgaGlnaCBsaW1pdCAqLworI2RlZmluZSBBTVNfQ1RSTFgJMHgyOAkvKiBjb250cm9sIFggKi8KKyNkZWZpbmUgQU1TX0NUUkxZCTB4MjkJLyogY29udHJvbCBZICovCisjZGVmaW5lIEFNU19DVFJMWgkweDJBCS8qIGNvbnRyb2wgWiAqLworI2RlZmluZSBBTVNfVU5LTk9XTjEJMHgyQgkvKiB1bmtub3duIDEgKi8KKyNkZWZpbmUgQU1TX1VOS05PV04yCTB4MkMJLyogdW5rbm93biAyICovCisjZGVmaW5lIEFNU19VTktOT1dOMwkweDJECS8qIHVua25vd24gMyAqLworI2RlZmluZSBBTVNfVkVORE9SCTB4MkUJLyogdmVuZG9yICovCisKKy8qIEFNUyBjb21tYW5kcyAtIHVzZSB3aXRoIHRoZSBBTVNfQ09NTUFORCByZWdpc3RlciAqLworZW51bSBhbXNfaTJjX2NtZCB7CisJQU1TX0NNRF9OT09QID0gMCwKKwlBTVNfQ01EX1ZFUlNJT04sCisJQU1TX0NNRF9SRUFETUVNLAorCUFNU19DTURfV1JJVEVNRU0sCisJQU1TX0NNRF9FUkFTRU1FTSwKKwlBTVNfQ01EX1JFQURFRSwKKwlBTVNfQ01EX1dSSVRFRUUsCisJQU1TX0NNRF9SRVNFVCwKKwlBTVNfQ01EX1NUQVJULAorfTsKKworc3RhdGljIGludCBhbXNfaTJjX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBhbXNfaTJjX2RldGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYW1zX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgICA9ICJhbXMiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKKwkuYXR0YWNoX2FkYXB0ZXIgPSBhbXNfaTJjX2F0dGFjaCwKKwkuZGV0YWNoX2FkYXB0ZXIgPSBhbXNfaTJjX2RldGFjaCwKK307CisKK3N0YXRpYyBzMzIgYW1zX2kyY19yZWFkKHU4IHJlZykKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKCZhbXNfaW5mby5pMmNfY2xpZW50LCByZWcpOworfQorCitzdGF0aWMgaW50IGFtc19pMmNfd3JpdGUodTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YSgmYW1zX2luZm8uaTJjX2NsaWVudCwgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgYW1zX2kyY19jbWQoZW51bSBhbXNfaTJjX2NtZCBjbWQpCit7CisJczMyIHJlc3VsdDsKKwlpbnQgcmVtYWluaW5nID0gSFogLyAyMDsKKworCWFtc19pMmNfd3JpdGUoQU1TX0NPTU1BTkQsIGNtZCk7CisJbWRlbGF5KDUpOworCisJd2hpbGUgKHJlbWFpbmluZykgeworCQlyZXN1bHQgPSBhbXNfaTJjX3JlYWQoQU1TX0NPTU1BTkQpOworCQlpZiAocmVzdWx0ID09IDAgfHwgcmVzdWx0ICYgMHg4MCkKKwkJCXJldHVybiAwOworCisJCXJlbWFpbmluZyA9IHNjaGVkdWxlX3RpbWVvdXQocmVtYWluaW5nKTsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGFtc19pMmNfc2V0X2lycShlbnVtIGFtc19pcnEgcmVnLCBjaGFyIGVuYWJsZSkKK3sKKwlpZiAocmVnICYgQU1TX0lSUV9GUkVFRkFMTCkgeworCQl1OCB2YWwgPSBhbXNfaTJjX3JlYWQoQU1TX0NUUkxYKTsKKwkJaWYgKGVuYWJsZSkKKwkJCXZhbCB8PSAweDgwOworCQllbHNlCisJCQl2YWwgJj0gfjB4ODA7CisJCWFtc19pMmNfd3JpdGUoQU1TX0NUUkxYLCB2YWwpOworCX0KKworCWlmIChyZWcgJiBBTVNfSVJRX1NIT0NLKSB7CisJCXU4IHZhbCA9IGFtc19pMmNfcmVhZChBTVNfQ1RSTFkpOworCQlpZiAoZW5hYmxlKQorCQkJdmFsIHw9IDB4ODA7CisJCWVsc2UKKwkJCXZhbCAmPSB+MHg4MDsKKwkJYW1zX2kyY193cml0ZShBTVNfQ1RSTFksIHZhbCk7CisJfQorCisJaWYgKHJlZyAmIEFNU19JUlFfR0xPQkFMKSB7CisJCXU4IHZhbCA9IGFtc19pMmNfcmVhZChBTVNfQ1RSTFopOworCQlpZiAoZW5hYmxlKQorCQkJdmFsIHw9IDB4ODA7CisJCWVsc2UKKwkJCXZhbCAmPSB+MHg4MDsKKwkJYW1zX2kyY193cml0ZShBTVNfQ1RSTFosIHZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbXNfaTJjX2NsZWFyX2lycShlbnVtIGFtc19pcnEgcmVnKQoreworCWlmIChyZWcgJiBBTVNfSVJRX0ZSRUVGQUxMKQorCQlhbXNfaTJjX3dyaXRlKEFNU19GUkVFRkFMTCwgMCk7CisKKwlpZiAocmVnICYgQU1TX0lSUV9TSE9DSykKKwkJYW1zX2kyY193cml0ZShBTVNfU0hPQ0ssIDApOworfQorCitzdGF0aWMgdTggYW1zX2kyY19nZXRfdmVuZG9yKHZvaWQpCit7CisJcmV0dXJuIGFtc19pMmNfcmVhZChBTVNfVkVORE9SKTsKK30KKworc3RhdGljIHZvaWQgYW1zX2kyY19nZXRfeHl6KHM4ICp4LCBzOCAqeSwgczggKnopCit7CisJKnggPSBhbXNfaTJjX3JlYWQoQU1TX0RBVEFYKTsKKwkqeSA9IGFtc19pMmNfcmVhZChBTVNfREFUQVkpOworCSp6ID0gYW1zX2kyY19yZWFkKEFNU19EQVRBWik7Cit9CisKK3N0YXRpYyBpbnQgYW1zX2kyY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXVuc2lnbmVkIGxvbmcgYnVzOworCWludCB2bWFqLCB2bWluOworCWludCByZXN1bHQ7CisKKwkvKiBUaGVyZSBjYW4gYmUgb25seSBvbmUgKi8KKwlpZiAodW5saWtlbHkoYW1zX2luZm8uaGFzX2RldmljZSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHN0cm5jbXAoYWRhcHRlci0+bmFtZSwgInVuaS1uIiwgNSkpCisJCXJldHVybiAtRU5PREVWOworCisJYnVzID0gc2ltcGxlX3N0cnRvdWwoYWRhcHRlci0+bmFtZSArIDYsIE5VTEwsIDEwKTsKKwlpZiAoYnVzICE9IGFtc19pbmZvLmkyY19idXMpCisJCXJldHVybiAtRU5PREVWOworCisJYW1zX2luZm8uaTJjX2NsaWVudC5hZGRyID0gYW1zX2luZm8uaTJjX2FkZHJlc3M7CisJYW1zX2luZm8uaTJjX2NsaWVudC5hZGFwdGVyID0gYWRhcHRlcjsKKwlhbXNfaW5mby5pMmNfY2xpZW50LmRyaXZlciA9ICZhbXNfaTJjX2RyaXZlcjsKKwlzdHJjcHkoYW1zX2luZm8uaTJjX2NsaWVudC5uYW1lLCAiQXBwbGUgTW90aW9uIFNlbnNvciIpOworCisJaWYgKGFtc19pMmNfY21kKEFNU19DTURfUkVTRVQpKSB7CisJCXByaW50ayhLRVJOX0lORk8gImFtczogRmFpbGVkIHRvIHJlc2V0IHRoZSBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoYW1zX2kyY19jbWQoQU1TX0NNRF9TVEFSVCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBGYWlsZWQgdG8gc3RhcnQgdGhlIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIGdldCB2ZXJzaW9uL3ZlbmRvciBpbmZvcm1hdGlvbiAqLworCWFtc19pMmNfd3JpdGUoQU1TX0NUUkwxLCAweDAyKTsKKwlhbXNfaTJjX3dyaXRlKEFNU19DVFJMMiwgMHg4NSk7CisJYW1zX2kyY193cml0ZShBTVNfQ1RSTDMsIDB4MDEpOworCisJYW1zX2kyY19jbWQoQU1TX0NNRF9SRUFETUVNKTsKKworCXZtYWogPSBhbXNfaTJjX3JlYWQoQU1TX0RBVEExKTsKKwl2bWluID0gYW1zX2kyY19yZWFkKEFNU19EQVRBMik7CisJaWYgKHZtYWogIT0gMSB8fCB2bWluICE9IDUyKSB7CisJCXByaW50ayhLRVJOX0lORk8gImFtczogSW5jb3JyZWN0IGRldmljZSB2ZXJzaW9uICglZC4lZClcbiIsCisJCQl2bWFqLCB2bWluKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJYW1zX2kyY19jbWQoQU1TX0NNRF9WRVJTSU9OKTsKKworCXZtYWogPSBhbXNfaTJjX3JlYWQoQU1TX0RBVEExKTsKKwl2bWluID0gYW1zX2kyY19yZWFkKEFNU19EQVRBMik7CisJaWYgKHZtYWogIT0gMCB8fCB2bWluICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBJbmNvcnJlY3QgZmlybXdhcmUgdmVyc2lvbiAoJWQuJWQpXG4iLAorCQkJdm1haiwgdm1pbik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCWFtc19pMmNfc2V0X2lycShBTVNfSVJRX0FMTCwgMCk7CisKKwlyZXN1bHQgPSBhbXNfc2Vuc29yX2F0dGFjaCgpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogU2V0IGRlZmF1bHQgdmFsdWVzICovCisJYW1zX2kyY193cml0ZShBTVNfU0VOU0xPVywgMHgxNSk7CisJYW1zX2kyY193cml0ZShBTVNfU0VOU0hJR0gsIDB4NjApOworCWFtc19pMmNfd3JpdGUoQU1TX0NUUkxYLCAweDA4KTsKKwlhbXNfaTJjX3dyaXRlKEFNU19DVFJMWSwgMHgwRik7CisJYW1zX2kyY193cml0ZShBTVNfQ1RSTFosIDB4NEYpOworCWFtc19pMmNfd3JpdGUoQU1TX1VOS05PV04xLCAweDE0KTsKKworCS8qIENsZWFyIGludGVycnVwdHMgKi8KKwlhbXNfaTJjX2NsZWFyX2lycShBTVNfSVJRX0FMTCk7CisKKwlhbXNfaW5mby5oYXNfZGV2aWNlID0gMTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJYW1zX2kyY19zZXRfaXJxKEFNU19JUlFfQUxMLCAxKTsKKworCXByaW50ayhLRVJOX0lORk8gImFtczogRm91bmQgSTJDIGJhc2VkIG1vdGlvbiBzZW5zb3JcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1zX2kyY19kZXRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhbXNfaW5mby5oYXNfZGV2aWNlKSB7CisJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCQlhbXNfaTJjX3NldF9pcnEoQU1TX0lSUV9BTEwsIDApOworCisJCS8qIENsZWFyIGludGVycnVwdHMgKi8KKwkJYW1zX2kyY19jbGVhcl9pcnEoQU1TX0lSUV9BTEwpOworCisJCXByaW50ayhLRVJOX0lORk8gImFtczogVW5sb2FkaW5nXG4iKTsKKworCQlhbXNfaW5mby5oYXNfZGV2aWNlID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYW1zX2kyY19leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmFtc19pMmNfZHJpdmVyKTsKK30KKworaW50IF9faW5pdCBhbXNfaTJjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwljaGFyICp0bXBfYnVzOworCWludCByZXN1bHQ7CisJdTMyICpwcm9wOworCisJbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CisKKwkvKiBTZXQgaW1wbGVtZW50YXRpb24gc3R1ZmYgKi8KKwlhbXNfaW5mby5vZl9ub2RlID0gbnA7CisJYW1zX2luZm8uZXhpdCA9IGFtc19pMmNfZXhpdDsKKwlhbXNfaW5mby5nZXRfdmVuZG9yID0gYW1zX2kyY19nZXRfdmVuZG9yOworCWFtc19pbmZvLmdldF94eXogPSBhbXNfaTJjX2dldF94eXo7CisJYW1zX2luZm8uY2xlYXJfaXJxID0gYW1zX2kyY19jbGVhcl9pcnE7CisJYW1zX2luZm8uYnVzdHlwZSA9IEJVU19JMkM7CisKKwkvKiBsb29rIGZvciBidXMgZWl0aGVyIHVzaW5nICJyZWciIG9yIGJ5IHBhdGggKi8KKwlwcm9wID0gKHUzMiopZ2V0X3Byb3BlcnR5KGFtc19pbmZvLm9mX25vZGUsICJyZWciLCBOVUxMKTsKKwlpZiAoIXByb3ApIHsKKwkJcmVzdWx0ID0gLUVOT0RFVjsKKworCQlnb3RvIGV4aXQ7CisJfQorCisJdG1wX2J1cyA9IHN0cnN0cihhbXNfaW5mby5vZl9ub2RlLT5mdWxsX25hbWUsICIvaTJjLWJ1c0AiKTsKKwlpZiAodG1wX2J1cykKKwkJYW1zX2luZm8uaTJjX2J1cyA9ICoodG1wX2J1cyArIDkpIC0gJzAnOworCWVsc2UKKwkJYW1zX2luZm8uaTJjX2J1cyA9ICgoKnByb3ApID4+IDgpICYgMHgwZjsKKwlhbXNfaW5mby5pMmNfYWRkcmVzcyA9ICgoKnByb3ApICYgMHhmZikgPj4gMTsKKworCXJlc3VsdCA9IGkyY19hZGRfZHJpdmVyKCZhbXNfaTJjX2RyaXZlcik7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMjZhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYwpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIEFwcGxlIE1vdGlvbiBTZW5zb3IgZHJpdmVyIChqb3lzdGljayBlbXVsYXRpb24pCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFN0ZWxpYW4gUG9wIChzdGVsaWFuQHBvcGllcy5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBIYW5zZWxtYW5uIChsaW51eC1rZXJuZWxAaGFuc21pLmNoKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiYW1zLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgam95c3RpY2s7Cittb2R1bGVfcGFyYW0oam95c3RpY2ssIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhqb3lzdGljaywgIkVuYWJsZSB0aGUgaW5wdXQgY2xhc3MgZGV2aWNlIG9uIG1vZHVsZSBsb2FkIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW52ZXJ0OworbW9kdWxlX3BhcmFtKGludmVydCwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGludmVydCwgIkludmVydCBpbnB1dCBkYXRhIG9uIFggYW5kIFkgYXhpcyIpOworCitzdGF0aWMgaW50IGFtc19pbnB1dF9rdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJczggeCwgeSwgejsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCW11dGV4X2xvY2soJmFtc19pbmZvLmxvY2spOworCisJCWFtc19zZW5zb3JzKCZ4LCAmeSwgJnopOworCisJCXggLT0gYW1zX2luZm8ueGNhbGliOworCQl5IC09IGFtc19pbmZvLnljYWxpYjsKKwkJeiAtPSBhbXNfaW5mby56Y2FsaWI7CisKKwkJaW5wdXRfcmVwb3J0X2FicyhhbXNfaW5mby5pZGV2LCBBQlNfWCwgaW52ZXJ0ID8gLXggOiB4KTsKKwkJaW5wdXRfcmVwb3J0X2FicyhhbXNfaW5mby5pZGV2LCBBQlNfWSwgaW52ZXJ0ID8gLXkgOiB5KTsKKwkJaW5wdXRfcmVwb3J0X2FicyhhbXNfaW5mby5pZGV2LCBBQlNfWiwgeik7CisKKwkJaW5wdXRfc3luYyhhbXNfaW5mby5pZGV2KTsKKworCQltdXRleF91bmxvY2soJmFtc19pbmZvLmxvY2spOworCisJCW1zbGVlcCgyNSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1zX2lucHV0X29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCWFtc19pbmZvLmt0aHJlYWQgPSBrdGhyZWFkX3J1bihhbXNfaW5wdXRfa3RocmVhZCwgTlVMTCwgImthbXMiKTsKKwlyZXR1cm4gSVNfRVJSKGFtc19pbmZvLmt0aHJlYWQpID8gUFRSX0VSUihhbXNfaW5mby5rdGhyZWFkKSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtc19pbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJa3RocmVhZF9zdG9wKGFtc19pbmZvLmt0aHJlYWQpOworfQorCisvKiBDYWxsIHdpdGggYW1zX2luZm8ubG9jayBoZWxkISAqLworc3RhdGljIHZvaWQgYW1zX2lucHV0X2VuYWJsZSh2b2lkKQoreworCXM4IHgsIHksIHo7CisKKwlpZiAoYW1zX2luZm8uaWRldikKKwkJcmV0dXJuOworCisJYW1zX3NlbnNvcnMoJngsICZ5LCAmeik7CisJYW1zX2luZm8ueGNhbGliID0geDsKKwlhbXNfaW5mby55Y2FsaWIgPSB5OworCWFtc19pbmZvLnpjYWxpYiA9IHo7CisKKwlhbXNfaW5mby5pZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFhbXNfaW5mby5pZGV2KQorCQlyZXR1cm47CisKKwlhbXNfaW5mby5pZGV2LT5uYW1lID0gIkFwcGxlIE1vdGlvbiBTZW5zb3IiOworCWFtc19pbmZvLmlkZXYtPmlkLmJ1c3R5cGUgPSBhbXNfaW5mby5idXN0eXBlOworCWFtc19pbmZvLmlkZXYtPmlkLnZlbmRvciA9IDA7CisJYW1zX2luZm8uaWRldi0+b3BlbiA9IGFtc19pbnB1dF9vcGVuOworCWFtc19pbmZvLmlkZXYtPmNsb3NlID0gYW1zX2lucHV0X2Nsb3NlOworCWFtc19pbmZvLmlkZXYtPmNkZXYuZGV2ID0gJmFtc19pbmZvLm9mX2Rldi0+ZGV2OworCisJaW5wdXRfc2V0X2Fic19wYXJhbXMoYW1zX2luZm8uaWRldiwgQUJTX1gsIC01MCwgNTAsIDMsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGFtc19pbmZvLmlkZXYsIEFCU19ZLCAtNTAsIDUwLCAzLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhhbXNfaW5mby5pZGV2LCBBQlNfWiwgLTUwLCA1MCwgMywgMCk7CisKKwlzZXRfYml0KEVWX0FCUywgYW1zX2luZm8uaWRldi0+ZXZiaXQpOworCXNldF9iaXQoRVZfS0VZLCBhbXNfaW5mby5pZGV2LT5ldmJpdCk7CisJc2V0X2JpdChCVE5fVE9VQ0gsIGFtc19pbmZvLmlkZXYtPmtleWJpdCk7CisKKwlpZiAoaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGFtc19pbmZvLmlkZXYpKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGFtc19pbmZvLmlkZXYpOworCQlhbXNfaW5mby5pZGV2ID0gTlVMTDsKKwkJcmV0dXJuOworCX0KK30KKworLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KK3N0YXRpYyB2b2lkIGFtc19pbnB1dF9kaXNhYmxlKHZvaWQpCit7CisJaWYgKGFtc19pbmZvLmlkZXYpIHsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoYW1zX2luZm8uaWRldik7CisJCWFtc19pbmZvLmlkZXYgPSBOVUxMOworCX0KK30KKworc3RhdGljIHNzaXplX3QgYW1zX2lucHV0X3Nob3dfam95c3RpY2soc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGpveXN0aWNrKTsKK30KKworc3RhdGljIHNzaXplX3QgYW1zX2lucHV0X3N0b3JlX2pveXN0aWNrKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaWYgKHNzY2FuZihidWYsICIlZFxuIiwgJmpveXN0aWNrKSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmFtc19pbmZvLmxvY2spOworCisJaWYgKGpveXN0aWNrKQorCQlhbXNfaW5wdXRfZW5hYmxlKCk7CisJZWxzZQorCQlhbXNfaW5wdXRfZGlzYWJsZSgpOworCisJbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGpveXN0aWNrLCBTX0lSVUdPIHwgU19JV1VTUiwKKwlhbXNfaW5wdXRfc2hvd19qb3lzdGljaywgYW1zX2lucHV0X3N0b3JlX2pveXN0aWNrKTsKKworLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KK2ludCBhbXNfaW5wdXRfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOworCisJaWYgKCFyZXN1bHQgJiYgam95c3RpY2spCisJCWFtc19pbnB1dF9lbmFibGUoKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBDYWxsIHdpdGggYW1zX2luZm8ubG9jayBoZWxkISAqLwordm9pZCBhbXNfaW5wdXRfZXhpdCgpCit7CisJYW1zX2lucHV0X2Rpc2FibGUoKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzZhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBBcHBsZSBNb3Rpb24gU2Vuc29yIGRyaXZlciAoUE1VIHZhcmlhbnQpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgSGFuc2VsbWFubiAobGludXgta2VybmVsQGhhbnNtaS5jaCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2FkYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BtdS5oPgorCisjaW5jbHVkZSAiYW1zLmgiCisKKy8qIEF0dGl0dWRlICovCisjZGVmaW5lIEFNU19YCQkJMHgwMAorI2RlZmluZSBBTVNfWQkJCTB4MDEKKyNkZWZpbmUgQU1TX1oJCQkweDAyCisKKy8qIE5vdCBleGFjdGx5IGtub3duLCBtYXliZSBjaGlwIHZlbmRvciAqLworI2RlZmluZSBBTVNfVkVORE9SCQkweDAzCisKKy8qIEZyZWVmYWxsIHJlZ2lzdGVycyAqLworI2RlZmluZSBBTVNfRkZfQ0xFQVIJCTB4MDQKKyNkZWZpbmUgQU1TX0ZGX0VOQUJMRQkJMHgwNQorI2RlZmluZSBBTVNfRkZfTE9XX0xJTUlUCTB4MDYKKyNkZWZpbmUgQU1TX0ZGX0RFQk9VTkNFCQkweDA3CisKKy8qIFNob2NrIHJlZ2lzdGVycyAqLworI2RlZmluZSBBTVNfU0hPQ0tfQ0xFQVIJCTB4MDgKKyNkZWZpbmUgQU1TX1NIT0NLX0VOQUJMRQkweDA5CisjZGVmaW5lIEFNU19TSE9DS19ISUdIX0xJTUlUCTB4MGEKKyNkZWZpbmUgQU1TX1NIT0NLX0RFQk9VTkNFCTB4MGIKKworLyogR2xvYmFsIGludGVycnVwdCBhbmQgcG93ZXIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBBTVNfQ09OVFJPTAkJMHgwYworCitzdGF0aWMgdTggYW1zX3BtdV9jbWQ7CisKK3N0YXRpYyB2b2lkIGFtc19wbXVfcmVxX2NvbXBsZXRlKHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxKQoreworCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiAqKXJlcS0+YXJnKTsKK30KKworLyogT25seSBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSB0YXNrIGNvbnRleHQgKi8KK3N0YXRpYyB2b2lkIGFtc19wbXVfc2V0X3JlZ2lzdGVyKHU4IHJlZywgdTggdmFsdWUpCit7CisJc3RhdGljIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CisJREVDTEFSRV9DT01QTEVUSU9OKHJlcV9jb21wbGV0ZSk7CisKKwlyZXEuYXJnID0gJnJlcV9jb21wbGV0ZTsKKwlpZiAocG11X3JlcXVlc3QoJnJlcSwgYW1zX3BtdV9yZXFfY29tcGxldGUsIDQsIGFtc19wbXVfY21kLCAweDAwLCByZWcsIHZhbHVlKSkKKwkJcmV0dXJuOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmcmVxX2NvbXBsZXRlKTsKK30KKworLyogT25seSBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSB0YXNrIGNvbnRleHQgKi8KK3N0YXRpYyB1OCBhbXNfcG11X2dldF9yZWdpc3Rlcih1OCByZWcpCit7CisJc3RhdGljIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CisJREVDTEFSRV9DT01QTEVUSU9OKHJlcV9jb21wbGV0ZSk7CisKKwlyZXEuYXJnID0gJnJlcV9jb21wbGV0ZTsKKwlpZiAocG11X3JlcXVlc3QoJnJlcSwgYW1zX3BtdV9yZXFfY29tcGxldGUsIDMsIGFtc19wbXVfY21kLCAweDAxLCByZWcpKQorCQlyZXR1cm4gMDsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJlcV9jb21wbGV0ZSk7CisKKwlpZiAocmVxLnJlcGx5X2xlbiA+IDApCisJCXJldHVybiByZXEucmVwbHlbMF07CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMgKi8KK3N0YXRpYyB2b2lkIGFtc19wbXVfc2V0X2lycShlbnVtIGFtc19pcnEgcmVnLCBjaGFyIGVuYWJsZSkKK3sKKwlpZiAocmVnICYgQU1TX0lSUV9GUkVFRkFMTCkgeworCQl1OCB2YWwgPSBhbXNfcG11X2dldF9yZWdpc3RlcihBTVNfRkZfRU5BQkxFKTsKKwkJaWYgKGVuYWJsZSkKKwkJCXZhbCB8PSAweDgwOworCQllbHNlCisJCQl2YWwgJj0gfjB4ODA7CisJCWFtc19wbXVfc2V0X3JlZ2lzdGVyKEFNU19GRl9FTkFCTEUsIHZhbCk7CisJfQorCisJaWYgKHJlZyAmIEFNU19JUlFfU0hPQ0spIHsKKwkJdTggdmFsID0gYW1zX3BtdV9nZXRfcmVnaXN0ZXIoQU1TX1NIT0NLX0VOQUJMRSk7CisJCWlmIChlbmFibGUpCisJCQl2YWwgfD0gMHg4MDsKKwkJZWxzZQorCQkJdmFsICY9IH4weDgwOworCQlhbXNfcG11X3NldF9yZWdpc3RlcihBTVNfU0hPQ0tfRU5BQkxFLCB2YWwpOworCX0KKworCWlmIChyZWcgJiBBTVNfSVJRX0dMT0JBTCkgeworCQl1OCB2YWwgPSBhbXNfcG11X2dldF9yZWdpc3RlcihBTVNfQ09OVFJPTCk7CisJCWlmIChlbmFibGUpCisJCQl2YWwgfD0gMHg4MDsKKwkJZWxzZQorCQkJdmFsICY9IH4weDgwOworCQlhbXNfcG11X3NldF9yZWdpc3RlcihBTVNfQ09OVFJPTCwgdmFsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFtc19wbXVfY2xlYXJfaXJxKGVudW0gYW1zX2lycSByZWcpCit7CisJaWYgKHJlZyAmIEFNU19JUlFfRlJFRUZBTEwpCisJCWFtc19wbXVfc2V0X3JlZ2lzdGVyKEFNU19GRl9DTEVBUiwgMHgwMCk7CisKKwlpZiAocmVnICYgQU1TX0lSUV9TSE9DSykKKwkJYW1zX3BtdV9zZXRfcmVnaXN0ZXIoQU1TX1NIT0NLX0NMRUFSLCAweDAwKTsKK30KKworc3RhdGljIHU4IGFtc19wbXVfZ2V0X3ZlbmRvcih2b2lkKQoreworCXJldHVybiBhbXNfcG11X2dldF9yZWdpc3RlcihBTVNfVkVORE9SKTsKK30KKworc3RhdGljIHZvaWQgYW1zX3BtdV9nZXRfeHl6KHM4ICp4LCBzOCAqeSwgczggKnopCit7CisJKnggPSBhbXNfcG11X2dldF9yZWdpc3RlcihBTVNfWCk7CisJKnkgPSBhbXNfcG11X2dldF9yZWdpc3RlcihBTVNfWSk7CisJKnogPSBhbXNfcG11X2dldF9yZWdpc3RlcihBTVNfWik7Cit9CisKK3N0YXRpYyB2b2lkIGFtc19wbXVfZXhpdCh2b2lkKQoreworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCWFtc19wbXVfc2V0X2lycShBTVNfSVJRX0FMTCwgMCk7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHRzICovCisJYW1zX3BtdV9jbGVhcl9pcnEoQU1TX0lSUV9BTEwpOworCisJYW1zX2luZm8uaGFzX2RldmljZSA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJhbXM6IFVubG9hZGluZ1xuIik7Cit9CisKK2ludCBfX2luaXQgYW1zX3BtdV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJdTMyICpwcm9wOworCWludCByZXN1bHQ7CisKKwltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKKworCS8qIFNldCBpbXBsZW1lbnRhdGlvbiBzdHVmZiAqLworCWFtc19pbmZvLm9mX25vZGUgPSBucDsKKwlhbXNfaW5mby5leGl0ID0gYW1zX3BtdV9leGl0OworCWFtc19pbmZvLmdldF92ZW5kb3IgPSBhbXNfcG11X2dldF92ZW5kb3I7CisJYW1zX2luZm8uZ2V0X3h5eiA9IGFtc19wbXVfZ2V0X3h5ejsKKwlhbXNfaW5mby5jbGVhcl9pcnEgPSBhbXNfcG11X2NsZWFyX2lycTsKKwlhbXNfaW5mby5idXN0eXBlID0gQlVTX0hPU1Q7CisKKwkvKiBHZXQgUE1VIGNvbW1hbmQsIHNob3VsZCBiZSAweDRlLCBidXQgd2UgY2FuIG5ldmVyIGtub3cgKi8KKwlwcm9wID0gKHUzMiopZ2V0X3Byb3BlcnR5KGFtc19pbmZvLm9mX25vZGUsICJyZWciLCBOVUxMKTsKKwlpZiAoIXByb3ApIHsKKwkJcmVzdWx0ID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKwlhbXNfcG11X2NtZCA9ICgoKnByb3ApID4+IDgpICYgMHhmZjsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCWFtc19wbXVfc2V0X2lycShBTVNfSVJRX0FMTCwgMCk7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHRzICovCisJYW1zX3BtdV9jbGVhcl9pcnEoQU1TX0lSUV9BTEwpOworCisJcmVzdWx0ID0gYW1zX3NlbnNvcl9hdHRhY2goKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBleGl0OworCisJLyogU2V0IGRlZmF1bHQgdmFsdWVzICovCisJYW1zX3BtdV9zZXRfcmVnaXN0ZXIoQU1TX0ZGX0xPV19MSU1JVCwgMHgxNSk7CisJYW1zX3BtdV9zZXRfcmVnaXN0ZXIoQU1TX0ZGX0VOQUJMRSwgMHgwOCk7CisJYW1zX3BtdV9zZXRfcmVnaXN0ZXIoQU1TX0ZGX0RFQk9VTkNFLCAweDE0KTsKKworCWFtc19wbXVfc2V0X3JlZ2lzdGVyKEFNU19TSE9DS19ISUdIX0xJTUlULCAweDYwKTsKKwlhbXNfcG11X3NldF9yZWdpc3RlcihBTVNfU0hPQ0tfRU5BQkxFLCAweDBmKTsKKwlhbXNfcG11X3NldF9yZWdpc3RlcihBTVNfU0hPQ0tfREVCT1VOQ0UsIDB4MTQpOworCisJYW1zX3BtdV9zZXRfcmVnaXN0ZXIoQU1TX0NPTlRST0wsIDB4NGYpOworCisJLyogQ2xlYXIgaW50ZXJydXB0cyAqLworCWFtc19wbXVfY2xlYXJfaXJxKEFNU19JUlFfQUxMKTsKKworCWFtc19pbmZvLmhhc19kZXZpY2UgPSAxOworCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwlhbXNfcG11X3NldF9pcnEoQU1TX0lSUV9BTEwsIDEpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBGb3VuZCBQTVUgYmFzZWQgbW90aW9uIHNlbnNvclxuIik7CisKKwlyZXN1bHQgPSAwOworCitleGl0OgorCW11dGV4X3VubG9jaygmYW1zX2luZm8ubG9jayk7CisKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLmggYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDA3MzBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLmgKQEAgLTAsMCArMSw3MiBAQAorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KKworZW51bSBhbXNfaXJxIHsKKwlBTVNfSVJRX0ZSRUVGQUxMID0gMHgwMSwKKwlBTVNfSVJRX1NIT0NLID0gMHgwMiwKKwlBTVNfSVJRX0dMT0JBTCA9IDB4MDQsCisJQU1TX0lSUV9BTEwgPQorCQlBTVNfSVJRX0ZSRUVGQUxMIHwKKwkJQU1TX0lSUV9TSE9DSyB8CisJCUFNU19JUlFfR0xPQkFMLAorfTsKKworc3RydWN0IGFtcyB7CisJLyogTG9ja3MgKi8KKwlzcGlubG9ja190IGlycV9sb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOworCisJLyogR2VuZXJhbCBwcm9wZXJ0aWVzICovCisJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlOworCXN0cnVjdCBvZl9kZXZpY2UgKm9mX2RldjsKKwljaGFyIGhhc19kZXZpY2U7CisJY2hhciB2ZmxhZzsKKwl1MzIgb3JpZW50MTsKKwl1MzIgb3JpZW50MjsKKworCS8qIEludGVycnVwdCB3b3JrZXIgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya2VyOworCXU4IHdvcmtlcl9pcnFzOworCisJLyogSW1wbGVtZW50YXRpb24KKwkgKgorCSAqIE9ubHkgY2FsbCB0aGVzZSBmdW5jdGlvbnMgd2l0aCB0aGUgbWFpbiBsb2NrIGhlbGQuCisJICovCisJdm9pZCAoKmV4aXQpKHZvaWQpOworCisJdm9pZCAoKmdldF94eXopKHM4ICp4LCBzOCAqeSwgczggKnopOworCXU4ICgqZ2V0X3ZlbmRvcikodm9pZCk7CisKKwl2b2lkICgqY2xlYXJfaXJxKShlbnVtIGFtc19pcnEgcmVnKTsKKworI2lmZGVmIENPTkZJR19TRU5TT1JTX0FNU19JMkMKKwkvKiBJMkMgcHJvcGVydGllcyAqLworCWludCBpMmNfYnVzOworCWludCBpMmNfYWRkcmVzczsKKwlzdHJ1Y3QgaTJjX2NsaWVudCBpMmNfY2xpZW50OworI2VuZGlmCisKKwkvKiBKb3lzdGljayBlbXVsYXRpb24gKi8KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWQ7CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsKKwlfX3UxNiBidXN0eXBlOworCisJLyogY2FsaWJyYXRlZCBudWxsIHZhbHVlcyAqLworCWludCB4Y2FsaWIsIHljYWxpYiwgemNhbGliOworfTsKKworZXh0ZXJuIHN0cnVjdCBhbXMgYW1zX2luZm87CisKK2V4dGVybiB2b2lkIGFtc19zZW5zb3JzKHM4ICp4LCBzOCAqeSwgczggKnopOworZXh0ZXJuIGludCBhbXNfc2Vuc29yX2F0dGFjaCh2b2lkKTsKKworZXh0ZXJuIGludCBhbXNfcG11X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCk7CitleHRlcm4gaW50IGFtc19pMmNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKKworZXh0ZXJuIGludCBhbXNfaW5wdXRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGFtc19pbnB1dF9leGl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mNzE4MDVmLmMgYi9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYwppbmRleCBkZTE3YTcyLi5hMjcyY2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYworKysgYi9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYwpAQCAtMSwxMiArMSwxNSBAQAogLyoKLSAqIGY3MTgwNWYuYyAtIGRyaXZlciBmb3IgdGhlIEZpbnRlayBGNzE4MDVGL0ZHIFN1cGVyLUkvTyBjaGlwIGludGVncmF0ZWQKLSAqICAgICAgICAgICAgIGhhcmR3YXJlIG1vbml0b3JpbmcgZmVhdHVyZXMKKyAqIGY3MTgwNWYuYyAtIGRyaXZlciBmb3IgdGhlIEZpbnRlayBGNzE4MDVGL0ZHIGFuZCBGNzE4NzJGL0ZHIFN1cGVyLUkvTworICogICAgICAgICAgICAgY2hpcHMgaW50ZWdyYXRlZCBoYXJkd2FyZSBtb25pdG9yaW5nIGZlYXR1cmVzCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgKgogICogVGhlIEY3MTgwNUYvRkcgaXMgYSBMUEMgU3VwZXItSS9PIGNoaXAgbWFkZSBieSBGaW50ZWsuIEl0IGludGVncmF0ZXMKICAqIGNvbXBsZXRlIGhhcmR3YXJlIG1vbml0b3JpbmcgZmVhdHVyZXM6IHZvbHRhZ2UsIGZhbiBhbmQgdGVtcGVyYXR1cmUKICAqIHNlbnNvcnMsIGFuZCBtYW51YWwgYW5kIGF1dG9tYXRpYyBmYW4gc3BlZWQgY29udHJvbC4KICAqCisgKiBUaGUgRjcxODcyRi9GRyBpcyBhbG1vc3QgdGhlIHNhbWUsIHdpdGggdHdvIG1vcmUgdm9sdGFnZXMgbW9uaXRvcmVkLAorICogYW5kIDYgVklEIGlucHV0cy4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC0zNyw2ICs0MCw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAogI2RlZmluZSBEUlZOQU1FICJmNzE4MDVmIgorZW51bSBraW5kcyB7IGY3MTgwNWYsIGY3MTg3MmYgfTsKIAogLyoKICAqIFN1cGVyLUkvTyBjb25zdGFudHMgYW5kIGZ1bmN0aW9ucwpAQCAtNDgsMTEgKzUyLDEzIEBACiAjZGVmaW5lIFNJT19SRUdfREVWSUQJCTB4MjAJLyogRGV2aWNlIElEICgyIGJ5dGVzKSAqLwogI2RlZmluZSBTSU9fUkVHX0RFVlJFVgkJMHgyMgkvKiBEZXZpY2UgcmV2aXNpb24gKi8KICNkZWZpbmUgU0lPX1JFR19NQU5JRAkJMHgyMwkvKiBGaW50ZWsgSUQgKDIgYnl0ZXMpICovCisjZGVmaW5lIFNJT19SRUdfRk5TRUwxCQkweDI5CS8qIE11bHRpIEZ1bmN0aW9uIFNlbGVjdCAxIChGNzE4NzJGKSAqLwogI2RlZmluZSBTSU9fUkVHX0VOQUJMRQkJMHgzMAkvKiBMb2dpY2FsIGRldmljZSBlbmFibGUgKi8KICNkZWZpbmUgU0lPX1JFR19BRERSCQkweDYwCS8qIExvZ2ljYWwgZGV2aWNlIGFkZHJlc3MgKDIgYnl0ZXMpICovCiAKICNkZWZpbmUgU0lPX0ZJTlRFS19JRAkJMHgxOTM0CiAjZGVmaW5lIFNJT19GNzE4MDVGX0lECQkweDA0MDYKKyNkZWZpbmUgU0lPX0Y3MTg3MkZfSUQJCTB4MDM0MQogCiBzdGF0aWMgaW5saW5lIGludAogc3VwZXJpb19pbmIoaW50IGJhc2UsIGludCByZWcpCkBAIC05NiwyMiArMTAyLDI1IEBACiAgKiBJU0EgY29uc3RhbnRzCiAgKi8KIAotI2RlZmluZSBSRUdJT05fTEVOR1RICQkyCi0jZGVmaW5lIEFERFJfUkVHX09GRlNFVAkJMAotI2RlZmluZSBEQVRBX1JFR19PRkZTRVQJCTEKKyNkZWZpbmUgUkVHSU9OX0xFTkdUSAkJOAorI2RlZmluZSBBRERSX1JFR19PRkZTRVQJCTUKKyNkZWZpbmUgREFUQV9SRUdfT0ZGU0VUCQk2CiAKIC8qCiAgKiBSZWdpc3RlcnMKICAqLwogCi0vKiBpbiBuciBmcm9tIDAgdG8gOCAoOC1iaXQgdmFsdWVzKSAqLworLyogaW4gbnIgZnJvbSAwIHRvIDEwICg4LWJpdCB2YWx1ZXMpICovCiAjZGVmaW5lIEY3MTgwNUZfUkVHX0lOKG5yKQkJKDB4MTAgKyAobnIpKQotI2RlZmluZSBGNzE4MDVGX1JFR19JTl9ISUdIKG5yKQkJKDB4NDAgKyAyICogKG5yKSkKLSNkZWZpbmUgRjcxODA1Rl9SRUdfSU5fTE9XKG5yKQkJKDB4NDEgKyAyICogKG5yKSkKKyNkZWZpbmUgRjcxODA1Rl9SRUdfSU5fSElHSChucikJCSgobnIpIDwgMTAgPyAweDQwICsgMiAqIChucikgOiAweDJFKQorI2RlZmluZSBGNzE4MDVGX1JFR19JTl9MT1cobnIpCQkoKG5yKSA8IDEwID8gMHg0MSArIDIgKiAobnIpIDogMHgyRikKIC8qIGZhbiBuciBmcm9tIDAgdG8gMiAoMTItYml0IHZhbHVlcywgdHdvIHJlZ2lzdGVycykgKi8KICNkZWZpbmUgRjcxODA1Rl9SRUdfRkFOKG5yKQkJKDB4MjAgKyAyICogKG5yKSkKICNkZWZpbmUgRjcxODA1Rl9SRUdfRkFOX0xPVyhucikJCSgweDI4ICsgMiAqIChucikpCisjZGVmaW5lIEY3MTgwNUZfUkVHX0ZBTl9UQVJHRVQobnIpCSgweDY5ICsgMTYgKiAobnIpKQogI2RlZmluZSBGNzE4MDVGX1JFR19GQU5fQ1RSTChucikJKDB4NjAgKyAxNiAqIChucikpCisjZGVmaW5lIEY3MTgwNUZfUkVHX1BXTV9GUkVRKG5yKQkoMHg2MyArIDE2ICogKG5yKSkKKyNkZWZpbmUgRjcxODA1Rl9SRUdfUFdNX0RVVFkobnIpCSgweDZCICsgMTYgKiAobnIpKQogLyogdGVtcCBuciBmcm9tIDAgdG8gMiAoOC1iaXQgdmFsdWVzKSAqLwogI2RlZmluZSBGNzE4MDVGX1JFR19URU1QKG5yKQkJKDB4MUIgKyAobnIpKQogI2RlZmluZSBGNzE4MDVGX1JFR19URU1QX0hJR0gobnIpCSgweDU0ICsgMiAqIChucikpCkBAIC0xMjIsNiArMTMxLDE0IEBACiAvKiBzdGF0dXMgbnIgZnJvbSAwIHRvIDIgKi8KICNkZWZpbmUgRjcxODA1Rl9SRUdfU1RBVFVTKG5yKQkJKDB4MzYgKyAobnIpKQogCisvKiBpbmRpdmlkdWFsIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgRkFOX0NUUkxfRENfTU9ERQkJMHgxMAorI2RlZmluZSBGQU5fQ1RSTF9MQVRDSF9GVUxMCQkweDA4CisjZGVmaW5lIEZBTl9DVFJMX01PREVfTUFTSwkJMHgwMworI2RlZmluZSBGQU5fQ1RSTF9NT0RFX1NQRUVECQkweDAwCisjZGVmaW5lIEZBTl9DVFJMX01PREVfVEVNUEVSQVRVUkUJMHgwMQorI2RlZmluZSBGQU5fQ1RSTF9NT0RFX01BTlVBTAkJMHgwMgorCiAvKgogICogRGF0YSBzdHJ1Y3R1cmVzIGFuZCBtYW5pcHVsYXRpb24gdGhlcmVvZgogICovCkBAIC0xMzgsMTIgKzE1NSwxNiBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF9saW1pdHM7CS8qIEluIGppZmZpZXMgKi8KIAogCS8qIFJlZ2lzdGVyIHZhbHVlcyAqLwotCXU4IGluWzldOwotCXU4IGluX2hpZ2hbOV07Ci0JdTggaW5fbG93WzldOworCXU4IGluWzExXTsKKwl1OCBpbl9oaWdoWzExXTsKKwl1OCBpbl9sb3dbMTFdOworCXUxNiBoYXNfaW47CiAJdTE2IGZhblszXTsKIAl1MTYgZmFuX2xvd1szXTsKLQl1OCBmYW5fZW5hYmxlZDsJCS8qIFJlYWQgb25jZSBhdCBpbml0IHRpbWUgKi8KKwl1MTYgZmFuX3RhcmdldFszXTsKKwl1OCBmYW5fY3RybFszXTsKKwl1OCBwd21bM107CisJdTggcHdtX2ZyZXFbM107CiAJdTggdGVtcFszXTsKIAl1OCB0ZW1wX2hpZ2hbM107CiAJdTggdGVtcF9oeXN0WzNdOwpAQCAtMTUxLDYgKzE3MiwxMSBAQAogCXVuc2lnbmVkIGxvbmcgYWxhcm1zOwogfTsKIAorc3RydWN0IGY3MTgwNWZfc2lvX2RhdGEgeworCWVudW0ga2luZHMga2luZDsKKwl1OCBmbnNlbDE7Cit9OworCiBzdGF0aWMgaW5saW5lIGxvbmcgaW5fZnJvbV9yZWcodTggcmVnKQogewogCXJldHVybiAocmVnICogOCk7CkBAIC0yMDAsNiArMjI2LDMzIEBACiAJcmV0dXJuICgxNTAwMDAwIC8gcnBtKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB3bV9mcmVxX2Zyb21fcmVnKHU4IHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGNsb2NrID0gKHJlZyAmIDB4ODApID8gNDgwMDAwMDBVTCA6IDEwMDAwMDBVTDsKKworCXJlZyAmPSAweDdmOworCWlmIChyZWcgPT0gMCkKKwkJcmVnKys7CisJcmV0dXJuIGNsb2NrIC8gKHJlZyA8PCA4KTsKK30KKworc3RhdGljIGlubGluZSB1OCBwd21fZnJlcV90b19yZWcodW5zaWduZWQgbG9uZyB2YWwpCit7CisJaWYgKHZhbCA+PSAxODc1MDApCS8qIFRoZSBoaWdoZXN0IHdlIGNhbiBkbyAqLworCQlyZXR1cm4gMHg4MDsKKwlpZiAodmFsID49IDE0NzUpCS8qIFVzZSA0OCBNSHogY2xvY2sgKi8KKwkJcmV0dXJuIDB4ODAgfCAoNDgwMDAwMDBVTCAvICh2YWwgPDwgOCkpOworCWlmICh2YWwgPCAzMSkJCS8qIFRoZSBsb3dlc3Qgd2UgY2FuIGRvICovCisJCXJldHVybiAweDdmOworCWVsc2UJCQkvKiBVc2UgMSBNSHogY2xvY2sgKi8KKwkJcmV0dXJuIDEwMDAwMDBVTCAvICh2YWwgPDwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3bV9tb2RlX2Zyb21fcmVnKHU4IHJlZykKK3sKKwlyZXR1cm4gIShyZWcgJiBGQU5fQ1RSTF9EQ19NT0RFKTsKK30KKwogc3RhdGljIGlubGluZSBsb25nIHRlbXBfZnJvbV9yZWcodTggcmVnKQogewogCXJldHVybiAocmVnICogMTAwMCk7CkBAIC0yNzQsMTYgKzMyNywyMSBAQAogCS8qIExpbWl0IHJlZ2lzdGVycyBjYWNoZSBpcyByZWZyZXNoZWQgYWZ0ZXIgNjAgc2Vjb25kcyAqLwogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIDYwICogSFopCiAJIHx8ICFkYXRhLT52YWxpZCkgewotCQlmb3IgKG5yID0gMDsgbnIgPCA5OyBucisrKSB7CisJCWZvciAobnIgPSAwOyBuciA8IDExOyBucisrKSB7CisJCQlpZiAoIShkYXRhLT5oYXNfaW4gJiAoMSA8PCBucikpKQorCQkJCWNvbnRpbnVlOwogCQkJZGF0YS0+aW5faGlnaFtucl0gPSBmNzE4MDVmX3JlYWQ4KGRhdGEsCiAJCQkJCSAgICBGNzE4MDVGX1JFR19JTl9ISUdIKG5yKSk7CiAJCQlkYXRhLT5pbl9sb3dbbnJdID0gZjcxODA1Zl9yZWFkOChkYXRhLAogCQkJCQkgICBGNzE4MDVGX1JFR19JTl9MT1cobnIpKTsKIAkJfQogCQlmb3IgKG5yID0gMDsgbnIgPCAzOyBucisrKSB7Ci0JCQlpZiAoZGF0YS0+ZmFuX2VuYWJsZWQgJiAoMSA8PCBucikpCi0JCQkJZGF0YS0+ZmFuX2xvd1tucl0gPSBmNzE4MDVmX3JlYWQxNihkYXRhLAotCQkJCQkJICAgIEY3MTgwNUZfUkVHX0ZBTl9MT1cobnIpKTsKKwkJCWRhdGEtPmZhbl9sb3dbbnJdID0gZjcxODA1Zl9yZWFkMTYoZGF0YSwKKwkJCQkJICAgIEY3MTgwNUZfUkVHX0ZBTl9MT1cobnIpKTsKKwkJCWRhdGEtPmZhbl90YXJnZXRbbnJdID0gZjcxODA1Zl9yZWFkMTYoZGF0YSwKKwkJCQkJICAgICAgIEY3MTgwNUZfUkVHX0ZBTl9UQVJHRVQobnIpKTsKKwkJCWRhdGEtPnB3bV9mcmVxW25yXSA9IGY3MTgwNWZfcmVhZDgoZGF0YSwKKwkJCQkJICAgICBGNzE4MDVGX1JFR19QV01fRlJFUShucikpOwogCQl9CiAJCWZvciAobnIgPSAwOyBuciA8IDM7IG5yKyspIHsKIAkJCWRhdGEtPnRlbXBfaGlnaFtucl0gPSBmNzE4MDVmX3JlYWQ4KGRhdGEsCkBAIC0yOTksMTQgKzM1NywxOSBAQAogCS8qIE1lYXN1cmVtZW50IHJlZ2lzdGVycyBjYWNoZSBpcyByZWZyZXNoZWQgYWZ0ZXIgMSBzZWNvbmQgKi8KIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWikKIAkgfHwgIWRhdGEtPnZhbGlkKSB7Ci0JCWZvciAobnIgPSAwOyBuciA8IDk7IG5yKyspIHsKKwkJZm9yIChuciA9IDA7IG5yIDwgMTE7IG5yKyspIHsKKwkJCWlmICghKGRhdGEtPmhhc19pbiAmICgxIDw8IG5yKSkpCisJCQkJY29udGludWU7CiAJCQlkYXRhLT5pbltucl0gPSBmNzE4MDVmX3JlYWQ4KGRhdGEsCiAJCQkJICAgICAgIEY3MTgwNUZfUkVHX0lOKG5yKSk7CiAJCX0KIAkJZm9yIChuciA9IDA7IG5yIDwgMzsgbnIrKykgewotCQkJaWYgKGRhdGEtPmZhbl9lbmFibGVkICYgKDEgPDwgbnIpKQotCQkJCWRhdGEtPmZhbltucl0gPSBmNzE4MDVmX3JlYWQxNihkYXRhLAotCQkJCQkJRjcxODA1Rl9SRUdfRkFOKG5yKSk7CisJCQlkYXRhLT5mYW5bbnJdID0gZjcxODA1Zl9yZWFkMTYoZGF0YSwKKwkJCQkJRjcxODA1Rl9SRUdfRkFOKG5yKSk7CisJCQlkYXRhLT5mYW5fY3RybFtucl0gPSBmNzE4MDVmX3JlYWQ4KGRhdGEsCisJCQkJCSAgICAgRjcxODA1Rl9SRUdfRkFOX0NUUkwobnIpKTsKKwkJCWRhdGEtPnB3bVtucl0gPSBmNzE4MDVmX3JlYWQ4KGRhdGEsCisJCQkJCUY3MTgwNUZfUkVHX1BXTV9EVVRZKG5yKSk7CiAJCX0KIAkJZm9yIChuciA9IDA7IG5yIDwgMzsgbnIrKykgewogCQkJZGF0YS0+dGVtcFtucl0gPSBmNzE4MDVmX3JlYWQ4KGRhdGEsCkBAIC0zMzMsMzUgKzM5Niw0MyBAQAogCQkJY2hhciAqYnVmKQogewogCXN0cnVjdCBmNzE4MDVmX2RhdGEgKmRhdGEgPSBmNzE4MDVmX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIGluMF9mcm9tX3JlZyhkYXRhLT5pblswXSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgaW4wX2Zyb21fcmVnKGRhdGEtPmluW25yXSkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2luMF9tYXgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQogCQkJICAgICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSA9IGY3MTgwNWZfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgaW4wX2Zyb21fcmVnKGRhdGEtPmluX2hpZ2hbMF0pKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIGluMF9mcm9tX3JlZyhkYXRhLT5pbl9oaWdoW25yXSkpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2luMF9taW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQogCQkJICAgICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSA9IGY3MTgwNWZfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgaW4wX2Zyb21fcmVnKGRhdGEtPmluX2xvd1swXSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgaW4wX2Zyb21fcmVnKGRhdGEtPmluX2xvd1tucl0pKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X2luMF9tYXgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQogCQkJICAgKmRldmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBmNzE4MDVmX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPmluX2hpZ2hbMF0gPSBpbjBfdG9fcmVnKHZhbCk7Ci0JZjcxODA1Zl93cml0ZTgoZGF0YSwgRjcxODA1Rl9SRUdfSU5fSElHSCgwKSwgZGF0YS0+aW5faGlnaFswXSk7CisJZGF0YS0+aW5faGlnaFtucl0gPSBpbjBfdG9fcmVnKHZhbCk7CisJZjcxODA1Zl93cml0ZTgoZGF0YSwgRjcxODA1Rl9SRUdfSU5fSElHSChuciksIGRhdGEtPmluX2hpZ2hbbnJdKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBjb3VudDsKQEAgLTM3MSwxMSArNDQyLDEzIEBACiAJCQkgICAqZGV2YXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+aW5fbG93WzBdID0gaW4wX3RvX3JlZyh2YWwpOwotCWY3MTgwNWZfd3JpdGU4KGRhdGEsIEY3MTgwNUZfUkVHX0lOX0xPVygwKSwgZGF0YS0+aW5fbG93WzBdKTsKKwlkYXRhLT5pbl9sb3dbbnJdID0gaW4wX3RvX3JlZyh2YWwpOworCWY3MTgwNWZfd3JpdGU4KGRhdGEsIEY3MTgwNUZfUkVHX0lOX0xPVyhuciksIGRhdGEtPmluX2xvd1tucl0pOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtNDYzLDYgKzUzNiwxNiBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgZmFuX2Zyb21fcmVnKGRhdGEtPmZhbl9sb3dbbnJdKSk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmFuX3RhcmdldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICAgICAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZjcxODA1Zl9kYXRhICpkYXRhID0gZjcxODA1Zl91cGRhdGVfZGV2aWNlKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCWludCBuciA9IGF0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBmYW5fZnJvbV9yZWcoZGF0YS0+ZmFuX3RhcmdldFtucl0pKTsKK30KKwogc3RhdGljIHNzaXplX3Qgc2V0X2Zhbl9taW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQogCQkJICAgKmRldmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewpAQCAtNDc5LDYgKzU2MiwxNTcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNldF9mYW5fdGFyZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgICAgICpkZXZhdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZjcxODA1Zl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCWludCBuciA9IGF0dHItPmluZGV4OworCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5mYW5fdGFyZ2V0W25yXSA9IGZhbl90b19yZWcodmFsKTsKKwlmNzE4MDVmX3dyaXRlMTYoZGF0YSwgRjcxODA1Rl9SRUdfRkFOX1RBUkdFVChuciksCisJCQlkYXRhLT5mYW5fdGFyZ2V0W25yXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSA9IGY3MTgwNWZfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoaW50KWRhdGEtPnB3bVtucl0pOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3B3bV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICAgICAgICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSA9IGY3MTgwNWZfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKKwlpbnQgbW9kZTsKKworCXN3aXRjaCAoZGF0YS0+ZmFuX2N0cmxbbnJdICYgRkFOX0NUUkxfTU9ERV9NQVNLKSB7CisJY2FzZSBGQU5fQ1RSTF9NT0RFX1NQRUVEOgorCQltb2RlID0gMzsKKwkJYnJlYWs7CisJY2FzZSBGQU5fQ1RSTF9NT0RFX1RFTVBFUkFUVVJFOgorCQltb2RlID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogTUFOVUFMICovCisJCW1vZGUgPSAxOworCX0KKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBtb2RlKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19wd21fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICAgICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSA9IGY3MTgwNWZfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlpbnQgbnIgPSBhdHRyLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgcHdtX2ZyZXFfZnJvbV9yZWcoZGF0YS0+cHdtX2ZyZXFbbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICAgICAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmNzE4MDVmX2RhdGEgKmRhdGEgPSBmNzE4MDVmX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHdtX21vZGVfZnJvbV9yZWcoZGF0YS0+ZmFuX2N0cmxbbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmNzE4MDVmX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKworCWlmICh2YWwgPiAyNTUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bVtucl0gPSB2YWw7CisJZjcxODA1Zl93cml0ZTgoZGF0YSwgRjcxODA1Rl9SRUdfUFdNX0RVVFkobnIpLCBkYXRhLT5wd21bbnJdKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmY3MTgwNWZfYXR0cl9wd21bXTsKKworc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICAgICAgKmRldmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmNzE4MDVmX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwl1OCByZWc7CisKKwlpZiAodmFsIDwgMSB8fCB2YWwgPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwgPiAxKSB7IC8qIEF1dG9tYXRpYyBtb2RlLCB1c2VyIGNhbid0IHNldCBQV00gdmFsdWUgKi8KKwkJaWYgKHN5c2ZzX2NobW9kX2ZpbGUoJmRldi0+a29iaiwgZjcxODA1Zl9hdHRyX3B3bVtucl0sCisJCQkJICAgICBTX0lSVUdPKSkKKwkJCWRldl9kYmcoZGV2LCAiY2htb2QgLXcgcHdtJWQgZmFpbGVkXG4iLCBuciArIDEpOworCX0KKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZWcgPSBmNzE4MDVmX3JlYWQ4KGRhdGEsIEY3MTgwNUZfUkVHX0ZBTl9DVFJMKG5yKSkKKwkgICAgJiB+RkFOX0NUUkxfTU9ERV9NQVNLOworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAxOgorCQlyZWcgfD0gRkFOX0NUUkxfTU9ERV9NQU5VQUw7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmVnIHw9IEZBTl9DVFJMX01PREVfVEVNUEVSQVRVUkU7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmVnIHw9IEZBTl9DVFJMX01PREVfU1BFRUQ7CisJCWJyZWFrOworCX0KKwlkYXRhLT5mYW5fY3RybFtucl0gPSByZWc7CisJZjcxODA1Zl93cml0ZTgoZGF0YSwgRjcxODA1Rl9SRUdfRkFOX0NUUkwobnIpLCByZWcpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKHZhbCA9PSAxKSB7IC8qIE1hbnVhbCBtb2RlLCB1c2VyIGNhbiBzZXQgUFdNIHZhbHVlICovCisJCWlmIChzeXNmc19jaG1vZF9maWxlKCZkZXYtPmtvYmosIGY3MTgwNWZfYXR0cl9wd21bbnJdLAorCQkJCSAgICAgU19JUlVHTyB8IFNfSVdVU1IpKQorCQkJZGV2X2RiZyhkZXYsICJjaG1vZCArdyBwd20lZCBmYWlsZWRcbiIsIG5yICsgMSk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfcHdtX2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICAgICpkZXZhdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZjcxODA1Zl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCWludCBuciA9IGF0dHItPmluZGV4OworCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+cHdtX2ZyZXFbbnJdID0gcHdtX2ZyZXFfdG9fcmVnKHZhbCk7CisJZjcxODA1Zl93cml0ZTgoZGF0YSwgRjcxODA1Rl9SRUdfUFdNX0ZSRVEobnIpLCBkYXRhLT5wd21fZnJlcVtucl0pOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKIAkJCSBjaGFyICpidWYpCiB7CkBAIC01NTcsNyArNzkxLDcgQEAKIHsKIAlzdHJ1Y3QgZjcxODA1Zl9kYXRhICpkYXRhID0gZjcxODA1Zl91cGRhdGVfZGV2aWNlKGRldik7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGRhdGEtPmFsYXJtcyAmIDB4MWZmKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGRhdGEtPmFsYXJtcyAmIDB4N2ZmKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybXNfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKQEAgLTU5NCw5ICs4MjgsMTEgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihpbjBfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4wLCBOVUxMKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihpbjBfbWF4LCBTX0lSVUdPfCBTX0lXVVNSLCBzaG93X2luMF9tYXgsIHNldF9pbjBfbWF4KTsKLXN0YXRpYyBERVZJQ0VfQVRUUihpbjBfbWluLCBTX0lSVUdPfCBTX0lXVVNSLCBzaG93X2luMF9taW4sIHNldF9pbjBfbWluKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX2lucHV0LCBTX0lSVUdPLCBzaG93X2luMCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMF9tYXgsIFNfSVJVR098IFNfSVdVU1IsCisJCQkgIHNob3dfaW4wX21heCwgc2V0X2luMF9tYXgsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjBfbWluLCBTX0lSVUdPfCBTX0lXVVNSLAorCQkJICBzaG93X2luMF9taW4sIHNldF9pbjBfbWluLCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkgIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCAxKTsKQEAgLTYzNywxNiArODczLDMyIEBACiAJCQkgIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCA4KTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW44X21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkgIHNob3dfaW5fbWluLCBzZXRfaW5fbWluLCA4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW45X2lucHV0LCBTX0lSVUdPLCBzaG93X2luMCwgTlVMTCwgOSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluOV9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X2luMF9tYXgsIHNldF9pbjBfbWF4LCA5KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW45X21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfaW4wX21pbiwgc2V0X2luMF9taW4sIDkpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjEwX2lucHV0LCBTX0lSVUdPLCBzaG93X2luMCwgTlVMTCwgMTApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjEwX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfaW4wX21heCwgc2V0X2luMF9tYXgsIDEwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xMF9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X2luMF9taW4sIHNldF9pbjBfbWluLCAxMCk7CiAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkgIHNob3dfZmFuX21pbiwgc2V0X2Zhbl9taW4sIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX3RhcmdldCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfZmFuX3RhcmdldCwgc2V0X2Zhbl90YXJnZXQsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCSAgc2hvd19mYW5fbWluLCBzZXRfZmFuX21pbiwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfdGFyZ2V0LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19mYW5fdGFyZ2V0LCBzZXRfZmFuX3RhcmdldCwgMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjNfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19taW4sIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM190YXJnZXQsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X2Zhbl90YXJnZXQsIHNldF9mYW5fdGFyZ2V0LCAyKTsKIAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKQEAgLTY2Nyw2ICs5MTksMjcgQEAKIAkJICAgIHNob3dfdGVtcF9oeXN0LCBzZXRfdGVtcF9oeXN0LCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfdHlwZSwgU19JUlVHTywgc2hvd190ZW1wX3R5cGUsIE5VTEwsIDIpOwogCisvKiBwd20gKHZhbHVlKSBmaWxlcyBhcmUgY3JlYXRlZCByZWFkLW9ubHksIHdyaXRlIHBlcm1pc3Npb24gaXMKKyAgIHRoZW4gYWRkZWQgb3IgcmVtb3ZlZCBkeW5hbWljYWxseSBhcyBuZWVkZWQgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMSwgU19JUlVHTywgc2hvd19wd20sIHNldF9wd20sIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfcHdtX2VuYWJsZSwgc2V0X3B3bV9lbmFibGUsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX2ZyZXEsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X3B3bV9mcmVxLCBzZXRfcHdtX2ZyZXEsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX21vZGUsIFNfSVJVR08sIHNob3dfcHdtX21vZGUsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20yLCBTX0lSVUdPLCBzaG93X3B3bSwgc2V0X3B3bSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTJfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19wd21fZW5hYmxlLCBzZXRfcHdtX2VuYWJsZSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTJfZnJlcSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfcHdtX2ZyZXEsIHNldF9wd21fZnJlcSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTJfbW9kZSwgU19JUlVHTywgc2hvd19wd21fbW9kZSwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTMsIFNfSVJVR08sIHNob3dfcHdtLCBzZXRfcHdtLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtM19lbmFibGUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X3B3bV9lbmFibGUsIHNldF9wd21fZW5hYmxlLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtM19mcmVxLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19wd21fZnJlcSwgc2V0X3B3bV9mcmVxLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtM19tb2RlLCBTX0lSVUdPLCBzaG93X3B3bV9tb2RlLCBOVUxMLCAyKTsKKwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjBfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDIpOwpAQCAtNjc2LDYgKzk0OSw4IEBACiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluNl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNik7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluN19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNyk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluOF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgOCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluOV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgOSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMTBfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDExKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEzKTsKQEAgLTY4OSw5ICs5NjQsOSBAQAogc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmNzE4MDVmX2F0dHJpYnV0ZXNbXSA9IHsKLQkmZGV2X2F0dHJfaW4wX2lucHV0LmF0dHIsCi0JJmRldl9hdHRyX2luMF9tYXguYXR0ciwKLQkmZGV2X2F0dHJfaW4wX21pbi5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWluLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2luMV9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIuYXR0ciwKQEAgLTcwMSw5ICs5NzYsNiBAQAogCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWF4LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWluLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luNF9tYXguZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luNF9taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2luNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfaW41X21pbi5kZXZfYXR0ci5hdHRyLApAQCAtNzEzLDkgKzk4NSwyOSBAQAogCSZzZW5zb3JfZGV2X2F0dHJfaW43X2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjdfbWF4LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjdfbWluLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9pbjhfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luOF9tYXguZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luOF9taW4uZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfdGFyZ2V0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl90YXJnZXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX3RhcmdldC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9tb2RlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9tb2RlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19tb2RlLmRldl9hdHRyLmF0dHIsCiAKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKQEAgLTczNCwxMSArMTAyNiw5IEBACiAJJnNlbnNvcl9kZXZfYXR0cl9pbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2luMl9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2FsYXJtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9pbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2luNV9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfaW42X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjdfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luOF9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl9hbGFybXNfaW4uYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hbGFybS5kZXZfYXR0ci5hdHRyLApAQCAtNzU0LDI5ICsxMDQ0LDU5IEBACiAJLmF0dHJzID0gZjcxODA1Zl9hdHRyaWJ1dGVzLAogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmY3MTgwNWZfYXR0cmlidXRlc19mYW5bM11bNF0gPSB7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZjcxODA1Zl9hdHRyaWJ1dGVzX29wdGluWzRdWzVdID0gewogCXsKLQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCi0JCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIuYXR0ciwKLQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW40X2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW40X21heC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2luNF9taW4uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkJTlVMTAogCX0sIHsKLQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCi0JCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIuYXR0ciwKLQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW44X2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW44X21heC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2luOF9taW4uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkJTlVMTAogCX0sIHsKLQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCi0JCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4uZGV2X2F0dHIuYXR0ciwKLQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW45X2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW45X21heC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2luOV9taW4uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjlfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkJTlVMTAorCX0sIHsKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjEwX2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW4xMF9tYXguZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjEwX21pbi5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2luMTBfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkJTlVMTAogCX0KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGY3MTgwNWZfZ3JvdXBfZmFuWzNdID0gewotCXsgLmF0dHJzID0gZjcxODA1Zl9hdHRyaWJ1dGVzX2ZhblswXSB9LAotCXsgLmF0dHJzID0gZjcxODA1Zl9hdHRyaWJ1dGVzX2ZhblsxXSB9LAotCXsgLmF0dHJzID0gZjcxODA1Zl9hdHRyaWJ1dGVzX2ZhblsyXSB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZjcxODA1Zl9ncm91cF9vcHRpbls0XSA9IHsKKwl7IC5hdHRycyA9IGY3MTgwNWZfYXR0cmlidXRlc19vcHRpblswXSB9LAorCXsgLmF0dHJzID0gZjcxODA1Zl9hdHRyaWJ1dGVzX29wdGluWzFdIH0sCisJeyAuYXR0cnMgPSBmNzE4MDVmX2F0dHJpYnV0ZXNfb3B0aW5bMl0gfSwKKwl7IC5hdHRycyA9IGY3MTgwNWZfYXR0cmlidXRlc19vcHRpblszXSB9LAorfTsKKworLyogV2UgZG9uJ3QgaW5jbHVkZSBwd21fZnJlcSBmaWxlcyBpbiB0aGUgYXJyYXlzIGFib3ZlLCBiZWNhdXNlIHRoZXkgbXVzdCBiZQorICAgY3JlYXRlZCBjb25kaXRpb25hbGx5IChvbmx5IGlmIHB3bV9tb2RlIGlzIDEgPT0gUFdNKSAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmY3MTgwNWZfYXR0cmlidXRlc19wd21fZnJlcVtdID0geworCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9mcmVxLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2ZyZXEuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfZnJlcS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGY3MTgwNWZfZ3JvdXBfcHdtX2ZyZXEgPSB7CisJLmF0dHJzID0gZjcxODA1Zl9hdHRyaWJ1dGVzX3B3bV9mcmVxLAorfTsKKworLyogV2UgYWxzbyBuZWVkIGFuIGluZGV4ZWQgYWNjZXNzIHRvIHB3bU4gZmlsZXMgdG8gdG9nZ2xlIHdyaXRhYmlsaXR5ICovCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZjcxODA1Zl9hdHRyX3B3bVtdID0geworCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0ci5hdHRyLAogfTsKIAogLyoKQEAgLTc5OCwxOCArMTExOCwzMCBAQAogCS8qIEZhbiBtb25pdG9yaW5nIGNhbiBiZSBkaXNhYmxlZC4gSWYgaXQgaXMsIHdlIHdvbid0IGJlIHBvbGxpbmcKIAkgICB0aGUgcmVnaXN0ZXIgdmFsdWVzLCBhbmQgd29uJ3QgY3JlYXRlIHRoZSByZWxhdGVkIHN5c2ZzIGZpbGVzLiAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJcmVnID0gZjcxODA1Zl9yZWFkOChkYXRhLCBGNzE4MDVGX1JFR19GQU5fQ1RSTChpKSk7Ci0JCWlmICghKHJlZyAmIDB4ODApKQotCQkJZGF0YS0+ZmFuX2VuYWJsZWQgfD0gKDEgPDwgaSk7CisJCWRhdGEtPmZhbl9jdHJsW2ldID0gZjcxODA1Zl9yZWFkOChkYXRhLAorCQkJCQkJICBGNzE4MDVGX1JFR19GQU5fQ1RSTChpKSk7CisJCS8qIENsZWFyIGxhdGNoIGZ1bGwgYml0LCBlbHNlICJzcGVlZCBtb2RlIiBmYW4gc3BlZWQgY29udHJvbAorCQkgICBkb2Vzbid0IHdvcmsgKi8KKwkJaWYgKGRhdGEtPmZhbl9jdHJsW2ldICYgRkFOX0NUUkxfTEFUQ0hfRlVMTCkgeworCQkJZGF0YS0+ZmFuX2N0cmxbaV0gJj0gfkZBTl9DVFJMX0xBVENIX0ZVTEw7CisJCQlmNzE4MDVmX3dyaXRlOChkYXRhLCBGNzE4MDVGX1JFR19GQU5fQ1RSTChpKSwKKwkJCQkgICAgICAgZGF0YS0+ZmFuX2N0cmxbaV0pOworCQl9CiAJfQogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmNzE4MDVmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IGY3MTgwNWZfc2lvX2RhdGEgKnNpb19kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgaSwgZXJyOwogCisJc3RhdGljIGNvbnN0IGNoYXIgKm5hbWVzW10gPSB7CisJCSJmNzE4MDVmIiwKKwkJImY3MTg3MmYiLAorCX07CisKIAlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGY3MTgwNWZfZGF0YSksIEdGUF9LRVJORUwpKSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBPdXQgb2YgbWVtb3J5XG4iKTsKQEAgLTgxOSwyNCArMTE1MSw2OSBAQAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKIAlkYXRhLT5hZGRyID0gcmVzLT5zdGFydDsKIAltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKLQlkYXRhLT5uYW1lID0gImY3MTgwNWYiOworCWRhdGEtPm5hbWUgPSBuYW1lc1tzaW9fZGF0YS0+a2luZF07CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CiAKKwkvKiBTb21lIHZvbHRhZ2UgaW5wdXRzIGRlcGVuZCBvbiBjaGlwIG1vZGVsIGFuZCBjb25maWd1cmF0aW9uICovCisJc3dpdGNoIChzaW9fZGF0YS0+a2luZCkgeworCWNhc2UgZjcxODA1ZjoKKwkJZGF0YS0+aGFzX2luID0gMHgxZmY7CisJCWJyZWFrOworCWNhc2UgZjcxODcyZjoKKwkJZGF0YS0+aGFzX2luID0gMHg2ZWY7CisJCWlmIChzaW9fZGF0YS0+Zm5zZWwxICYgMHgwMSkKKwkJCWRhdGEtPmhhc19pbiB8PSAoMSA8PCA0KTsgLyogaW40ICovCisJCWlmIChzaW9fZGF0YS0+Zm5zZWwxICYgMHgwMikKKwkJCWRhdGEtPmhhc19pbiB8PSAoMSA8PCA4KTsgLyogaW44ICovCisJCWJyZWFrOworCX0KKwogCS8qIEluaXRpYWxpemUgdGhlIEY3MTgwNUYgY2hpcCAqLwogCWY3MTgwNWZfaW5pdF9kZXZpY2UoZGF0YSk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBpbnRlcmZhY2UgZmlsZXMgKi8KIAlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmNzE4MDVmX2dyb3VwKSkpCiAJCWdvdG8gZXhpdF9mcmVlOwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJaWYgKCEoZGF0YS0+ZmFuX2VuYWJsZWQgJiAoMSA8PCBpKSkpCi0JCQljb250aW51ZTsKKwlpZiAoZGF0YS0+aGFzX2luICYgKDEgPDwgNCkpIHsgLyogaW40ICovCiAJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwKLQkJCQkJICAgICAgJmY3MTgwNWZfZ3JvdXBfZmFuW2ldKSkpCisJCQkJCSAgICAgICZmNzE4MDVmX2dyb3VwX29wdGluWzBdKSkpCiAJCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwogCX0KKwlpZiAoZGF0YS0+aGFzX2luICYgKDEgPDwgOCkpIHsgLyogaW44ICovCisJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwKKwkJCQkJICAgICAgJmY3MTgwNWZfZ3JvdXBfb3B0aW5bMV0pKSkKKwkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJfQorCWlmIChkYXRhLT5oYXNfaW4gJiAoMSA8PCA5KSkgeyAvKiBpbjkgKEY3MTg3MkYvRkcgb25seSkgKi8KKwkJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLAorCQkJCQkgICAgICAmZjcxODA1Zl9ncm91cF9vcHRpblsyXSkpKQorCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKwl9CisJaWYgKGRhdGEtPmhhc19pbiAmICgxIDw8IDEwKSkgeyAvKiBpbjkgKEY3MTg3MkYvRkcgb25seSkgKi8KKwkJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLAorCQkJCQkgICAgICAmZjcxODA1Zl9ncm91cF9vcHRpblszXSkpKQorCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKwl9CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkvKiBJZiBjb250cm9sIG1vZGUgaXMgUFdNLCBjcmVhdGUgcHdtX2ZyZXEgZmlsZSAqLworCQlpZiAoIShkYXRhLT5mYW5fY3RybFtpXSAmIEZBTl9DVFJMX0RDX01PREUpKSB7CisJCQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYua29iaiwKKwkJCQkJZjcxODA1Zl9hdHRyaWJ1dGVzX3B3bV9mcmVxW2ldKSkpCisJCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKwkJfQorCQkvKiBJZiBQV00gaXMgaW4gbWFudWFsIG1vZGUsIGFkZCB3cml0ZSBwZXJtaXNzaW9uICovCisJCWlmIChkYXRhLT5mYW5fY3RybFtpXSAmIEZBTl9DVFJMX01PREVfTUFOVUFMKSB7CisJCQlpZiAoKGVyciA9IHN5c2ZzX2NobW9kX2ZpbGUoJnBkZXYtPmRldi5rb2JqLAorCQkJCQkJICAgIGY3MTgwNWZfYXR0cl9wd21baV0sCisJCQkJCQkgICAgU19JUlVHTyB8IFNfSVdVU1IpKSkgeworCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNobW9kICt3IHB3bSVkIGZhaWxlZFxuIiwKKwkJCQkJaSArIDEpOworCQkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJCQl9CisJCX0KKwl9CiAKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CkBAIC04NDksOCArMTIyNiw5IEBACiAKIGV4aXRfcmVtb3ZlX2ZpbGVzOgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmNzE4MDVmX2dyb3VwKTsKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZjcxODA1Zl9ncm91cF9mYW5baV0pOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmNzE4MDVmX2dyb3VwX29wdGluW2ldKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZjcxODA1Zl9ncm91cF9wd21fZnJlcSk7CiBleGl0X2ZyZWU6CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUoZGF0YSk7CkBAIC04NjYsOCArMTI0NCw5IEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZjcxODA1Zl9ncm91cCk7Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmY3MTgwNWZfZ3JvdXBfZmFuW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZjcxODA1Zl9ncm91cF9vcHRpbltpXSk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmY3MTgwNWZfZ3JvdXBfcHdtX2ZyZXEpOwogCWtmcmVlKGRhdGEpOwogCiAJcmV0dXJuIDA7CkBAIC04ODIsNyArMTI2MSw4IEBACiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChmNzE4MDVmX3JlbW92ZSksCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBmNzE4MDVmX2RldmljZV9hZGQodW5zaWduZWQgc2hvcnQgYWRkcmVzcykKK3N0YXRpYyBpbnQgX19pbml0IGY3MTgwNWZfZGV2aWNlX2FkZCh1bnNpZ25lZCBzaG9ydCBhZGRyZXNzLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGY3MTgwNWZfc2lvX2RhdGEgKnNpb19kYXRhKQogewogCXN0cnVjdCByZXNvdXJjZSByZXMgPSB7CiAJCS5zdGFydAk9IGFkZHJlc3MsCkBAIC05MDYsMjYgKzEyODYsNDUgQEAKIAkJZ290byBleGl0X2RldmljZV9wdXQ7CiAJfQogCisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZjcxODA1Zl9zaW9fZGF0YSksCisJCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBQbGF0Zm9ybSBkYXRhIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CisJfQorCW1lbWNweShwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgc2lvX2RhdGEsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZjcxODA1Zl9zaW9fZGF0YSkpOworCiAJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwKIAkJICAgICAgIGVycik7Ci0JCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCQlnb3RvIGV4aXRfa2ZyZWVfZGF0YTsKIAl9CiAKIAlyZXR1cm4gMDsKIAorZXhpdF9rZnJlZV9kYXRhOgorCWtmcmVlKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7CiBleGl0X2RldmljZV9wdXQ6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIGV4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZjcxODA1Zl9maW5kKGludCBzaW9hZGRyLCB1bnNpZ25lZCBzaG9ydCAqYWRkcmVzcykKK3N0YXRpYyBpbnQgX19pbml0IGY3MTgwNWZfZmluZChpbnQgc2lvYWRkciwgdW5zaWduZWQgc2hvcnQgKmFkZHJlc3MsCisJCQkgICAgICAgc3RydWN0IGY3MTgwNWZfc2lvX2RhdGEgKnNpb19kYXRhKQogewogCWludCBlcnIgPSAtRU5PREVWOwogCXUxNiBkZXZpZDsKIAorCXN0YXRpYyBjb25zdCBjaGFyICpuYW1lc1tdID0geworCQkiRjcxODA1Ri9GRyIsCisJCSJGNzE4NzJGL0ZHIiwKKwl9OworCiAJc3VwZXJpb19lbnRlcihzaW9hZGRyKTsKIAogCWRldmlkID0gc3VwZXJpb19pbncoc2lvYWRkciwgU0lPX1JFR19NQU5JRCk7CkBAIC05MzMsNyArMTMzMiwxNSBAQAogCQlnb3RvIGV4aXQ7CiAKIAlkZXZpZCA9IHN1cGVyaW9faW53KHNpb2FkZHIsIFNJT19SRUdfREVWSUQpOwotCWlmIChkZXZpZCAhPSBTSU9fRjcxODA1Rl9JRCkgeworCXN3aXRjaCAoZGV2aWQpIHsKKwljYXNlIFNJT19GNzE4MDVGX0lEOgorCQlzaW9fZGF0YS0+a2luZCA9IGY3MTgwNWY7CisJCWJyZWFrOworCWNhc2UgU0lPX0Y3MTg3MkZfSUQ6CisJCXNpb19kYXRhLT5raW5kID0gZjcxODcyZjsKKwkJc2lvX2RhdGEtPmZuc2VsMSA9IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19SRUdfRk5TRUwxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTyBEUlZOQU1FICI6IFVuc3VwcG9ydGVkIEZpbnRlayBkZXZpY2UsICIKIAkJICAgICAgICJza2lwcGluZ1xuIik7CiAJCWdvdG8gZXhpdDsKQEAgLTk1MiwxMCArMTM1OSwxMiBAQAogCQkgICAgICAgInNraXBwaW5nXG4iKTsKIAkJZ290byBleGl0OwogCX0KKwkqYWRkcmVzcyAmPSB+KFJFR0lPTl9MRU5HVEggLSAxKTsJLyogSWdub3JlIDMgTFNCICovCiAKIAllcnIgPSAwOwotCXByaW50ayhLRVJOX0lORk8gRFJWTkFNRSAiOiBGb3VuZCBGNzE4MDVGIGNoaXAgYXQgJSN4LCByZXZpc2lvbiAldVxuIiwKLQkgICAgICAgKmFkZHJlc3MsIHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT19SRUdfREVWUkVWKSk7CisJcHJpbnRrKEtFUk5fSU5GTyBEUlZOQU1FICI6IEZvdW5kICVzIGNoaXAgYXQgJSN4LCByZXZpc2lvbiAldVxuIiwKKwkgICAgICAgbmFtZXNbc2lvX2RhdGEtPmtpbmRdLCAqYWRkcmVzcywKKwkgICAgICAgc3VwZXJpb19pbmIoc2lvYWRkciwgU0lPX1JFR19ERVZSRVYpKTsKIAogZXhpdDoKIAlzdXBlcmlvX2V4aXQoc2lvYWRkcik7CkBAIC05NjYsOSArMTM3NSwxMCBAQAogewogCWludCBlcnI7CiAJdW5zaWduZWQgc2hvcnQgYWRkcmVzczsKKwlzdHJ1Y3QgZjcxODA1Zl9zaW9fZGF0YSBzaW9fZGF0YTsKIAotCWlmIChmNzE4MDVmX2ZpbmQoMHgyZSwgJmFkZHJlc3MpCi0JICYmIGY3MTgwNWZfZmluZCgweDRlLCAmYWRkcmVzcykpCisJaWYgKGY3MTgwNWZfZmluZCgweDJlLCAmYWRkcmVzcywgJnNpb19kYXRhKQorCSAmJiBmNzE4MDVmX2ZpbmQoMHg0ZSwgJmFkZHJlc3MsICZzaW9fZGF0YSkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZmNzE4MDVmX2RyaXZlcik7CkBAIC05NzYsNyArMTM4Niw3IEBACiAJCWdvdG8gZXhpdDsKIAogCS8qIFNldHMgZ2xvYmFsIHBkZXYgYXMgYSBzaWRlIGVmZmVjdCAqLwotCWVyciA9IGY3MTgwNWZfZGV2aWNlX2FkZChhZGRyZXNzKTsKKwllcnIgPSBmNzE4MDVmX2RldmljZV9hZGQoYWRkcmVzcywgJnNpb19kYXRhKTsKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfZHJpdmVyOwogCkBAIC05OTAsMTMgKzE0MDAsMTYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGY3MTgwNWZfZXhpdCh2b2lkKQogeworCWtmcmVlKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZjcxODA1Zl9kcml2ZXIpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJGNzE4MDVGIGhhcmR3YXJlIG1vbml0b3JpbmcgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkY3MTgwNUYvRjcxODcyRiBoYXJkd2FyZSBtb25pdG9yaW5nIGRyaXZlciIpOwogCiBtb2R1bGVfaW5pdChmNzE4MDVmX2luaXQpOwogbW9kdWxlX2V4aXQoZjcxODA1Zl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwppbmRleCBlOGVmNjJiLi5iZjc1OWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKKysrIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCkBAIC00NzgsNzQgKzQ3OCw2NCBAQAogLyogTW9kdWxlIHN0dWZmICovCiAKIC8qIGhkYXBzX2RtaV9tYXRjaCAtIGZvdW5kIGEgbWF0Y2guICByZXR1cm4gb25lLCBzaG9ydC1jaXJjdWl0aW5nIHRoZSBodW50LiAqLwotc3RhdGljIGludCBoZGFwc19kbWlfbWF0Y2goc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQorc3RhdGljIGludCBfX2luaXQgaGRhcHNfZG1pX21hdGNoKHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICJoZGFwczogJXMgZGV0ZWN0ZWQuXG4iLCBpZC0+aWRlbnQpOwogCXJldHVybiAxOwogfQogCiAvKiBoZGFwc19kbWlfbWF0Y2hfaW52ZXJ0IC0gZm91bmQgYW4gaW52ZXJ0ZWQgbWF0Y2guICovCi1zdGF0aWMgaW50IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQoc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQorc3RhdGljIGludCBfX2luaXQgaGRhcHNfZG1pX21hdGNoX2ludmVydChzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCiB7CiAJaGRhcHNfaW52ZXJ0ID0gMTsKIAlwcmludGsoS0VSTl9JTkZPICJoZGFwczogaW52ZXJ0aW5nIGF4aXMgcmVhZGluZ3MuXG4iKTsKIAlyZXR1cm4gaGRhcHNfZG1pX21hdGNoKGlkKTsKIH0KIAotI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfTk9STUFMKG1vZGVsKQl7CQlcCi0JLmlkZW50ID0gIklCTSAiIG1vZGVsLAkJCQlcCisjZGVmaW5lIEhEQVBTX0RNSV9NQVRDSF9OT1JNQUwodmVuZG9yLCBtb2RlbCkgewkJXAorCS5pZGVudCA9IHZlbmRvciAiICIgbW9kZWwsCQkJXAogCS5jYWxsYmFjayA9IGhkYXBzX2RtaV9tYXRjaCwJCQlcCiAJLm1hdGNoZXMgPSB7CQkJCQlcCi0JCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiSUJNIiksCVwKKwkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIHZlbmRvciksCVwKIAkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sIG1vZGVsKQlcCiAJfQkJCQkJCVwKIH0KIAotI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfSU5WRVJUKG1vZGVsKQl7CQlcCi0JLmlkZW50ID0gIklCTSAiIG1vZGVsLAkJCQlcCisjZGVmaW5lIEhEQVBTX0RNSV9NQVRDSF9JTlZFUlQodmVuZG9yLCBtb2RlbCkgewkJXAorCS5pZGVudCA9IHZlbmRvciAiICIgbW9kZWwsCQkJXAogCS5jYWxsYmFjayA9IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQsCQlcCiAJLm1hdGNoZXMgPSB7CQkJCQlcCi0JCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiSUJNIiksCVwKKwkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIHZlbmRvciksCVwKIAkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sIG1vZGVsKQlcCiAJfQkJCQkJCVwKIH0KIAotI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfTEVOT1ZPKG1vZGVsKSAgIHsgICAgICAgICAgICAgICBcCi0gICAgICAgIC5pZGVudCA9ICJMZW5vdm8gIiBtb2RlbCwgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLmNhbGxiYWNrID0gaGRhcHNfZG1pX21hdGNoX2ludmVydCwgICAgICAgICAgICAgXAotICAgICAgICAubWF0Y2hlcyA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJMRU5PVk8iKSwgIFwKLSAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgbW9kZWwpICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19CisvKiBOb3RlIHRoYXQgSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQyIikgd291bGQgbWF0Y2gKKyAgICJUaGlua1BhZCBUNDJwIiwgc28gdGhlIG9yZGVyIG9mIHRoZSBlbnRyaWVzIG1hdHRlcnMuCisgICBJZiB5b3VyIFRoaW5rUGFkIGlzIG5vdCByZWNvZ25pemVkLCBwbGVhc2UgdXBkYXRlIHRvIGxhdGVzdAorICAgQklPUy4gVGhpcyBpcyBlc3BlY2lhbGx5IHRoZSBjYXNlIGZvciBzb21lIFI1MiBUaGlua1BhZHMuICovCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBoZGFwc193aGl0ZWxpc3RbXSA9IHsKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgUjUwcCIpLAorCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIklCTSIsICJUaGlua1BhZCBSNTAiKSwKKwlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJJQk0iLCAiVGhpbmtQYWQgUjUxIiksCisJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFI1MiIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIklCTSIsICJUaGlua1BhZCBUNDFwIiksCisJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFQ0MSIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIklCTSIsICJUaGlua1BhZCBUNDJwIiksCisJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFQ0MiIpLAorCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIklCTSIsICJUaGlua1BhZCBUNDMiKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgVDYwIiksCisJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFg0MCIpLAorCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIklCTSIsICJUaGlua1BhZCBYNDEiKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWDYwIiksCisJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFo2MG0iKSwKKwl7IC5pZGVudCA9IE5VTEwgfQorfTsKIAogc3RhdGljIGludCBfX2luaXQgaGRhcHNfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQkvKiBOb3RlIHRoYXQgSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQyIikgd291bGQgbWF0Y2gKLQkgICJUaGlua1BhZCBUNDJwIiwgc28gdGhlIG9yZGVyIG9mIHRoZSBlbnRyaWVzIG1hdHRlcnMgKi8KLQlzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBoZGFwc193aGl0ZWxpc3RbXSA9IHsKLQkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgSCIpLAotCQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJUaGlua1BhZCBSNTBwIiksCi0JCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFI1MCIpLAotCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBSNTEiKSwKLQkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgUjUyIiksCi0JCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIEgiKSwJIC8qIFI1MiAoMTg0NkFRRykgKi8KLQkJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiVGhpbmtQYWQgVDQxcCIpLAotCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBUNDEiKSwKLQkJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiVGhpbmtQYWQgVDQycCIpLAotCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBUNDIiKSwKLQkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQzIiksCi0JCUhEQVBTX0RNSV9NQVRDSF9MRU5PVk8oIlRoaW5rUGFkIFQ2MHAiKSwKLQkJSERBUFNfRE1JX01BVENIX0xFTk9WTygiVGhpbmtQYWQgVDYwIiksCi0JCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFg0MCIpLAotCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBYNDEiKSwKLQkJSERBUFNfRE1JX01BVENIX0xFTk9WTygiVGhpbmtQYWQgWDYwIiksCi0JCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFo2MG0iKSwKLQkJeyAuaWRlbnQgPSBOVUxMIH0KLQl9OwotCiAJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKGhkYXBzX3doaXRlbGlzdCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGRhcHM6IHN1cHBvcnRlZCBsYXB0b3Agbm90IGZvdW5kIVxuIik7CiAJCXJldCA9IC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2h3bW9uLXZpZC5jIGIvZHJpdmVycy9od21vbi9od21vbi12aWQuYwppbmRleCA5ZDY3MzIwLi5iODBmNmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2h3bW9uLXZpZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vaHdtb24tdmlkLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICAgIGh3bW9uLXZpZC5jIC0gVklEL1ZSTS9WUkQgdm9sdGFnZSBjb252ZXJzaW9ucwogCi0gICAgQ29weXJpZ2h0IChjKSAyMDA0IFJ1ZG9sZiBNYXJlayA8ci5tYXJla0BzaC5jdnV0LmN6PgorICAgIENvcHlyaWdodCAoYykgMjAwNCBSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgogCiAgICAgUGFydGx5IGltcG9ydGVkIGZyb20gaTJjLXZpZC5oIG9mIHRoZSBsbV9zZW5zb3JzIHByb2plY3QKICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgpAQCAtOTMsNyArOTMsNyBAQAogCWNhc2UgMTEwOgkJLyogSW50ZWwgQ29ucm9lICovCiAJCQkJLyogY29tcHV0ZSBpbiB1Viwgcm91bmQgdG8gbVYgKi8KIAkJdmFsICY9IDB4ZmY7Ci0JCWlmKCgodmFsICYgMHg3ZSkgPT0gMHhmZSkgfHwgKCEodmFsICYgMHg3ZSkpKQorCQlpZiAodmFsIDwgMHgwMiB8fCB2YWwgPiAweGIyKQogCQkJcmV0dXJuIDA7CiAJCXJldHVybigoMTYwMDAwMCAtICh2YWwgLSAyKSAqIDYyNTAgKyA1MDApIC8gMTAwMCk7CiAJY2FzZSAyNDogICAgICAgICAgICAgICAgLyogT3B0ZXJvbiBwcm9jZXNzb3IgKi8KQEAgLTIzMiw3ICsyMzIsNyBAQAogRVhQT1JUX1NZTUJPTCh2aWRfZnJvbV9yZWcpOwogRVhQT1JUX1NZTUJPTCh2aWRfd2hpY2hfdnJtKTsKIAotTU9EVUxFX0FVVEhPUigiUnVkb2xmIE1hcmVrIDxyLm1hcmVrQHNoLmN2dXQuY3o+Iik7CitNT0RVTEVfQVVUSE9SKCJSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PiIpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oImh3bW9uLXZpZCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jIGIvZHJpdmVycy9od21vbi9pdDg3LmMKaW5kZXggMzIzZWYwNi4uMWVkOGI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pdDg3LmMKKysrIGIvZHJpdmVycy9od21vbi9pdDg3LmMKQEAgLTMsNyArMyw3IEBACiAgICAgICAgICAgICAgbW9uaXRvcmluZy4KIAogICAgIFN1cHBvcnRzOiBJVDg3MDVGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKLSAgICAgICAgICAgICAgSVQ4NzEyRiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlICYgU01CdXMKKyAgICAgICAgICAgICAgSVQ4NzEyRiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlCiAgICAgICAgICAgICAgIElUODcxNkYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZQogICAgICAgICAgICAgICBJVDg3MThGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKICAgICAgICAgICAgICAgU2lzOTUwICAgQSBjbG9uZSBvZiB0aGUgSVQ4NzA1RgpAQCAtNDEsMTIgKzQxLDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogCi0vKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyZCwgSTJDX0NMSUVOVF9FTkQgfTsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpc2FfYWRkcmVzczsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzQoaXQ4NywgaXQ4NzEyLCBpdDg3MTYsIGl0ODcxOCk7CitlbnVtIGNoaXBzIHsgaXQ4NywgaXQ4NzEyLCBpdDg3MTYsIGl0ODcxOCB9OwogCiAjZGVmaW5lCVJFRwkweDJlCS8qIFRoZSByZWdpc3RlciB0byByZWFkL3dyaXRlICovCiAjZGVmaW5lCURFVgkweDA3CS8qIFJlZ2lzdGVyOiBMb2dpY2FsIGRldmljZSBzZWxlY3QgKi8KQEAgLTE2Miw4ICsxNTgsNiBAQAogI2RlZmluZSBJVDg3X1JFR19URU1QX0hJR0gobnIpICgweDQwICsgKG5yKSAqIDIpCiAjZGVmaW5lIElUODdfUkVHX1RFTVBfTE9XKG5yKSAgKDB4NDEgKyAobnIpICogMikKIAotI2RlZmluZSBJVDg3X1JFR19JMkNfQUREUiAgICAgIDB4NDgKLQogI2RlZmluZSBJVDg3X1JFR19WSU5fRU5BQkxFICAgIDB4NTAKICNkZWZpbmUgSVQ4N19SRUdfVEVNUF9FTkFCTEUgICAweDUxCiAKQEAgLTI0MiwzMyArMjM2LDIyIEBACiB9OwogCiAKLXN0YXRpYyBpbnQgaXQ4N19hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBpdDg3X2lzYV9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBpdDg3X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCk7CitzdGF0aWMgaW50IGl0ODdfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CiBzdGF0aWMgaW50IGl0ODdfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogc3RhdGljIGludCBpdDg3X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKTsKLXN0YXRpYyBpbnQgaXQ4N193cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKTsKK3N0YXRpYyB2b2lkIGl0ODdfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSk7CiBzdGF0aWMgc3RydWN0IGl0ODdfZGF0YSAqaXQ4N191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGl0ODdfY2hlY2tfcHdtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogc3RhdGljIHZvaWQgaXQ4N19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhKTsKIAogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXQ4N19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiaXQ4NyIsCi0JfSwKLQkuaWQJCT0gSTJDX0RSSVZFUklEX0lUODcsCi0JLmF0dGFjaF9hZGFwdGVyCT0gaXQ4N19hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudAk9IGl0ODdfZGV0YWNoX2NsaWVudCwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpdDg3X2lzYV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gIml0ODctaXNhIiwKIAl9LAotCS5hdHRhY2hfYWRhcHRlcgk9IGl0ODdfaXNhX2F0dGFjaF9hZGFwdGVyLAorCS5hdHRhY2hfYWRhcHRlcgk9IGl0ODdfZGV0ZWN0LAogCS5kZXRhY2hfY2xpZW50CT0gaXQ4N19kZXRhY2hfY2xpZW50LAogfTsKIApAQCAtODUwLDIyICs4MzMsNiBAQAogCS5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19vcHQsCiB9OwogCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuOgotICAgICAqIGl0ODdfZHJpdmVyIGlzIGluc2VydGVkICh3aGVuIHRoaXMgbW9kdWxlIGlzIGxvYWRlZCksIGZvciBlYWNoCi0gICAgICAgYXZhaWxhYmxlIGFkYXB0ZXIKLSAgICAgKiB3aGVuIGEgbmV3IGFkYXB0ZXIgaXMgaW5zZXJ0ZWQgKGFuZCBpdDg3X2RyaXZlciBpcyBzdGlsbCBwcmVzZW50KSAqLwotc3RhdGljIGludCBpdDg3X2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoIShhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19IV01PTikpCi0JCXJldHVybiAwOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgaXQ4N19kZXRlY3QpOwotfQotCi1zdGF0aWMgaW50IGl0ODdfaXNhX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlyZXR1cm4gaXQ4N19kZXRlY3QoYWRhcHRlciwgaXNhX2FkZHJlc3MsIC0xKTsKLX0KLQogLyogU3VwZXJJTyBkZXRlY3Rpb24gLSB3aWxsIGNoYW5nZSBpc2FfYWRkcmVzcyBpZiBhIGNoaXAgaXMgZm91bmQgKi8KIHN0YXRpYyBpbnQgX19pbml0IGl0ODdfZmluZCh1bnNpZ25lZCBzaG9ydCAqYWRkcmVzcykKIHsKQEAgLTkxNiwyOSArODgzLDIwIEBACiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLwotc3RhdGljIGludCBpdDg3X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3N0YXRpYyBpbnQgaXQ4N19kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCWludCBpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50OwogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGE7CiAJaW50IGVyciA9IDA7Ci0JY29uc3QgY2hhciAqbmFtZSA9ICIiOwotCWludCBpc19pc2EgPSBpMmNfaXNfaXNhX2FkYXB0ZXIoYWRhcHRlcik7CisJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgZW5hYmxlX3B3bV9pbnRlcmZhY2U7CiAKLQlpZiAoIWlzX2lzYSAmJiAKLQkgICAgIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCWdvdG8gRVJST1IwOwotCiAJLyogUmVzZXJ2ZSB0aGUgSVNBIHJlZ2lvbiAqLwotCWlmIChpc19pc2EpCi0JCWlmICghcmVxdWVzdF9yZWdpb24oYWRkcmVzcywgSVQ4N19FWFRFTlQsCi0JCQkJICAgIGl0ODdfaXNhX2RyaXZlci5kcml2ZXIubmFtZSkpCi0JCQlnb3RvIEVSUk9SMDsKLQotCS8qIEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2UgY3JlYXRlIHRoZQotCSAgIGNsaWVudCBzdHJ1Y3R1cmUsIGV2ZW4gdGhvdWdoIHdlIGNhbm5vdCBmaWxsIGl0IGNvbXBsZXRlbHkgeWV0LgotCSAgIEJ1dCBpdCBhbGxvd3MgdXMgdG8gYWNjZXNzIGl0ODdfe3JlYWQsd3JpdGV9X3ZhbHVlLiAqLworCWlmICghcmVxdWVzdF9yZWdpb24oaXNhX2FkZHJlc3MsIElUODdfRVhURU5ULAorCQkJICAgIGl0ODdfaXNhX2RyaXZlci5kcml2ZXIubmFtZSkpeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gRVJST1IwOworCX0KIAogCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXQ4N19kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC05NDYsODAgKzkwNCw0NiBAQAogCX0KIAogCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWlmIChpc19pc2EpCi0JCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwogCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKLQluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwluZXdfY2xpZW50LT5hZGRyID0gaXNhX2FkZHJlc3M7CiAJbmV3X2NsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JbmV3X2NsaWVudC0+ZHJpdmVyID0gaXNfaXNhID8gJml0ODdfaXNhX2RyaXZlciA6ICZpdDg3X2RyaXZlcjsKLQluZXdfY2xpZW50LT5mbGFncyA9IDA7CisJbmV3X2NsaWVudC0+ZHJpdmVyID0gJml0ODdfaXNhX2RyaXZlcjsKIAogCS8qIE5vdywgd2UgZG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24uICovCi0KLQlpZiAoa2luZCA8IDApIHsKLQkJaWYgKChpdDg3X3JlYWRfdmFsdWUobmV3X2NsaWVudCwgSVQ4N19SRUdfQ09ORklHKSAmIDB4ODApCi0JCSAgfHwgKCFpc19pc2EKLQkJICAgJiYgaXQ4N19yZWFkX3ZhbHVlKG5ld19jbGllbnQsIElUODdfUkVHX0kyQ19BRERSKSAhPSBhZGRyZXNzKSkgewotCQkgICAJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOwotCQl9CisJaWYgKChpdDg3X3JlYWRfdmFsdWUobmV3X2NsaWVudCwgSVQ4N19SRUdfQ09ORklHKSAmIDB4ODApCisJIHx8IGl0ODdfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBJVDg3X1JFR19DSElQSUQpICE9IDB4OTApIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBFUlJPUjI7CiAJfQogCiAJLyogRGV0ZXJtaW5lIHRoZSBjaGlwIHR5cGUuICovCi0JaWYgKGtpbmQgPD0gMCkgewotCQlpID0gaXQ4N19yZWFkX3ZhbHVlKG5ld19jbGllbnQsIElUODdfUkVHX0NISVBJRCk7Ci0JCWlmIChpID09IDB4OTApIHsKLQkJCWtpbmQgPSBpdDg3OwotCQkJaWYgKGlzX2lzYSkgewotCQkJCXN3aXRjaCAoY2hpcF90eXBlKSB7Ci0JCQkJY2FzZSBJVDg3MTJGX0RFVklEOgotCQkJCQlraW5kID0gaXQ4NzEyOwotCQkJCQlicmVhazsKLQkJCQljYXNlIElUODcxNkZfREVWSUQ6Ci0JCQkJCWtpbmQgPSBpdDg3MTY7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgSVQ4NzE4Rl9ERVZJRDoKLQkJCQkJa2luZCA9IGl0ODcxODsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJaWYgKGtpbmQgPT0gMCkKLQkJCQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAKLQkJCQkJIklnbm9yaW5nICdmb3JjZScgcGFyYW1ldGVyIGZvciB1bmtub3duIGNoaXAgYXQgIgotCQkJCQkiYWRhcHRlciAlZCwgYWRkcmVzcyAweCUwMnhcbiIsCi0JCQkJCWkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpLCBhZGRyZXNzKTsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIEVSUk9SMjsKLQkJfQotCX0KLQotCWlmIChraW5kID09IGl0ODcpIHsKLQkJbmFtZSA9ICJpdDg3IjsKLQl9IGVsc2UgaWYgKGtpbmQgPT0gaXQ4NzEyKSB7CisJc3dpdGNoIChjaGlwX3R5cGUpIHsKKwljYXNlIElUODcxMkZfREVWSUQ6CisJCWRhdGEtPnR5cGUgPSBpdDg3MTI7CiAJCW5hbWUgPSAiaXQ4NzEyIjsKLQl9IGVsc2UgaWYgKGtpbmQgPT0gaXQ4NzE2KSB7CisJCWJyZWFrOworCWNhc2UgSVQ4NzE2Rl9ERVZJRDoKKwkJZGF0YS0+dHlwZSA9IGl0ODcxNjsKIAkJbmFtZSA9ICJpdDg3MTYiOwotCX0gZWxzZSBpZiAoa2luZCA9PSBpdDg3MTgpIHsKKwkJYnJlYWs7CisJY2FzZSBJVDg3MThGX0RFVklEOgorCQlkYXRhLT50eXBlID0gaXQ4NzE4OwogCQluYW1lID0gIml0ODcxOCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRhdGEtPnR5cGUgPSBpdDg3OworCQluYW1lID0gIml0ODciOwogCX0KIAogCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzIGFuZCBwdXQgaXQgaW50byB0aGUgZ2xvYmFsIGxpc3QgKi8KIAlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOwotCWRhdGEtPnR5cGUgPSBraW5kOwotCWRhdGEtPnZhbGlkID0gMDsKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCiAJCWdvdG8gRVJST1IyOwogCi0JaWYgKCFpc19pc2EpCi0JCWRldl9pbmZvKCZuZXdfY2xpZW50LT5kZXYsICJUaGUgSTJDIGludGVyZmFjZSB0byBJVDg3eHhGICIKLQkJCSAiaGFyZHdhcmUgbW9uaXRvcmluZyBjaGlwcyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgIgotCQkJICJyZXBvcnQgaWYgeW91IHN0aWxsIHJlbHkgb24gaXQuXG4iKTsKLQogCS8qIENoZWNrIFBXTSBjb25maWd1cmF0aW9uICovCiAJZW5hYmxlX3B3bV9pbnRlcmZhY2UgPSBpdDg3X2NoZWNrX3B3bShuZXdfY2xpZW50KTsKIApAQCAtMTEyOSw4ICsxMDUzLDcgQEAKIEVSUk9SMjoKIAlrZnJlZShkYXRhKTsKIEVSUk9SMToKLQlpZiAoaXNfaXNhKQotCQlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzLCBJVDg3X0VYVEVOVCk7CisJcmVsZWFzZV9yZWdpb24oaXNhX2FkZHJlc3MsIElUODdfRVhURU5UKTsKIEVSUk9SMDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTE0Nyw1MCArMTA3MCwzOSBAQAogCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCXJldHVybiBlcnI7CiAKLQlpZihpMmNfaXNfaXNhX2NsaWVudChjbGllbnQpKQotCQlyZWxlYXNlX3JlZ2lvbihjbGllbnQtPmFkZHIsIElUODdfRVhURU5UKTsKKwlyZWxlYXNlX3JlZ2lvbihjbGllbnQtPmFkZHIsIElUODdfRVhURU5UKTsKIAlrZnJlZShkYXRhKTsKIAogCXJldHVybiAwOwogfQogCi0vKiBUaGUgU01CdXMgbG9ja3MgaXRzZWxmLCBidXQgSVNBIGFjY2VzcyBtdXN0IGJlIGxvY2tlZCBleHBsaWNpdGx5ISAKLSAgIFdlIGRvbid0IHdhbnQgdG8gbG9jayB0aGUgd2hvbGUgSVNBIGJ1cywgc28gd2UgbG9jayBlYWNoIGNsaWVudAotICAgc2VwYXJhdGVseS4KKy8qIElTQSBhY2Nlc3MgbXVzdCBiZSBsb2NrZWQgZXhwbGljaXRseSEKICAgIFdlIGlnbm9yZSB0aGUgSVQ4NyBCVVNZIGZsYWcgYXQgdGhpcyBtb21lbnQgLSBpdCBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrcywKICAgIHdvdWxkIHNsb3cgZG93biB0aGUgSVQ4NyBhY2Nlc3MgYW5kIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LiAqLwogc3RhdGljIGludCBpdDg3X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQogCWludCByZXM7Ci0JaWYgKGkyY19pc19pc2FfY2xpZW50KGNsaWVudCkpIHsKLQkJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIElUODdfQUREUl9SRUdfT0ZGU0VUKTsKLQkJcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgSVQ4N19EQVRBX1JFR19PRkZTRVQpOwotCQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwotCQlyZXR1cm4gcmVzOwotCX0gZWxzZQotCQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIElUODdfQUREUl9SRUdfT0ZGU0VUKTsKKwlyZXMgPSBpbmJfcChjbGllbnQtPmFkZHIgKyBJVDg3X0RBVEFfUkVHX09GRlNFVCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldHVybiByZXM7CiB9CiAKLS8qIFRoZSBTTUJ1cyBsb2NrcyBpdHNlbGYsIGJ1dCBJU0EgYWNjZXNzIG11c2UgYmUgbG9ja2VkIGV4cGxpY2l0bHkhIAotICAgV2UgZG9uJ3Qgd2FudCB0byBsb2NrIHRoZSB3aG9sZSBJU0EgYnVzLCBzbyB3ZSBsb2NrIGVhY2ggY2xpZW50Ci0gICBzZXBhcmF0ZWx5LgorLyogSVNBIGFjY2VzcyBtdXN0IGJlIGxvY2tlZCBleHBsaWNpdGx5IQogICAgV2UgaWdub3JlIHRoZSBJVDg3IEJVU1kgZmxhZyBhdCB0aGlzIG1vbWVudCAtIGl0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLAogICAgd291bGQgc2xvdyBkb3duIHRoZSBJVDg3IGFjY2VzcyBhbmQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuICovCi1zdGF0aWMgaW50IGl0ODdfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyB2b2lkIGl0ODdfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlpZiAoaTJjX2lzX2lzYV9jbGllbnQoY2xpZW50KSkgewotCQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQkJb3V0Yl9wKHJlZywgY2xpZW50LT5hZGRyICsgSVQ4N19BRERSX1JFR19PRkZTRVQpOwotCQlvdXRiX3AodmFsdWUsIGNsaWVudC0+YWRkciArIElUODdfREFUQV9SRUdfT0ZGU0VUKTsKLQkJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlCi0JCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJb3V0Yl9wKHJlZywgY2xpZW50LT5hZGRyICsgSVQ4N19BRERSX1JFR19PRkZTRVQpOworCW91dGJfcCh2YWx1ZSwgY2xpZW50LT5hZGRyICsgSVQ4N19EQVRBX1JFR19PRkZTRVQpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiB9CiAKIC8qIFJldHVybiAxIGlmIGFuZCBvbmx5IGlmIHRoZSBQV00gaW50ZXJmYWNlIGlzIHNhZmUgdG8gdXNlICovCkBAIC0xNDI2LDI2ICsxMzM4LDE0IEBACiB7CiAJaW50IHJlczsKIAotCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZpdDg3X2RyaXZlcik7Ci0JaWYgKHJlcykKKwlpZiAoKHJlcyA9IGl0ODdfZmluZCgmaXNhX2FkZHJlc3MpKSkKIAkJcmV0dXJuIHJlczsKLQotCWlmICghaXQ4N19maW5kKCZpc2FfYWRkcmVzcykpIHsKLQkJcmVzID0gaTJjX2lzYV9hZGRfZHJpdmVyKCZpdDg3X2lzYV9kcml2ZXIpOwotCQlpZiAocmVzKSB7Ci0JCQlpMmNfZGVsX2RyaXZlcigmaXQ4N19kcml2ZXIpOwotCQkJcmV0dXJuIHJlczsKLQkJfQotCX0KLQotCXJldHVybiAwOworCXJldHVybiBpMmNfaXNhX2FkZF9kcml2ZXIoJml0ODdfaXNhX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbV9pdDg3X2V4aXQodm9pZCkKIHsKLQlpZiAoaXNhX2FkZHJlc3MpCi0JCWkyY19pc2FfZGVsX2RyaXZlcigmaXQ4N19pc2FfZHJpdmVyKTsKLQlpMmNfZGVsX2RyaXZlcigmaXQ4N19kcml2ZXIpOworCWkyY19pc2FfZGVsX2RyaXZlcigmaXQ4N19pc2FfZHJpdmVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2s4dGVtcC5jIGIvZHJpdmVycy9od21vbi9rOHRlbXAuYwppbmRleCBmNThiNjRlLi41ZDhkMGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2s4dGVtcC5jCisrKyBiL2RyaXZlcnMvaHdtb24vazh0ZW1wLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogazh0ZW1wLmMgLSBMaW51eCBrZXJuZWwgbW9kdWxlIGZvciBoYXJkd2FyZSBtb25pdG9yaW5nCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFJ1ZG9sZiBNYXJlayA8ci5tYXJla0BzaC5jdnV0LmN6PgorICogQ29weXJpZ2h0IChDKSAyMDA2IFJ1ZG9sZiBNYXJlayA8ci5tYXJla0Bhc3NlbWJsZXIuY3o+CiAgKgogICogSW5zcGlyZWQgZnJvbSB0aGUgdzgzNzg1IGFuZCBhbWQ3NTYgZHJpdmVycy4KICAqCkBAIC0yODYsNyArMjg2LDcgQEAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJms4dGVtcF9kcml2ZXIpOwogfQogCi1NT0RVTEVfQVVUSE9SKCJSdWRvbGYgTWFyZWsgPHIubWFyZWtAc2guY3Z1dC5jej4iKTsKK01PRFVMRV9BVVRIT1IoIlJ1ZG9sZiBNYXJlayA8ci5tYXJla0Bhc3NlbWJsZXIuY3o+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFNRCBLOCBjb3JlIHRlbXBlcmF0dXJlIG1vbml0b3IiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wYzg3MzYwLmMgYi9kcml2ZXJzL2h3bW9uL3BjODczNjAuYwppbmRleCAzYjhiODE5Li5jOGEyMWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3BjODczNjAuYworKysgYi9kcml2ZXJzL2h3bW9uL3BjODczNjAuYwpAQCAtMTAwMCw3ICsxMDAwLDcgQEAKIAkJCShpJjB4MDIpID8gImV4dGVybmFsIiA6ICJpbnRlcm5hbCIpOwogCiAJCWRhdGEtPnZpZF9jb25mID0gY29uZnJlZ1szXTsKLQkJZGF0YS0+dnJtID0gOTA7CisJCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKIAl9CiAKIAkvKiBGYW4gY2xvY2sgZGl2aWRlcnMgbWF5IGJlIG5lZWRlZCBiZWZvcmUgYW55IGRhdGEgaXMgcmVhZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wYzg3NDI3LmMgYi9kcml2ZXJzL2h3bW9uL3BjODc0MjcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmZhMjFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9wYzg3NDI3LmMKQEAgLTAsMCArMSw2MjcgQEAKKy8qCisgKiAgcGM4NzQyNy5jIC0gaGFyZHdhcmUgbW9uaXRvcmluZyBkcml2ZXIgZm9yIHRoZQorICogICAgICAgICAgICAgIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzQyNyBTdXBlci1JL08gY2hpcAorICogIENvcHlyaWdodCAoQykgMjAwNiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIGNoaXBzOgorICoKKyAqICBDaGlwICAgICAgICAjdmluICAgICNmYW4gICAgI3B3bSAgICAjdGVtcCAgIGRldmlkCisgKiAgUEM4NzQyNyAgICAgLSAgICAgICA4ICAgICAgIC0gICAgICAgLSAgICAgICAweEYyCisgKgorICogIFRoaXMgZHJpdmVyIGFzc3VtZXMgdGhhdCBubyBtb3JlIHRoYW4gb25lIGNoaXAgaXMgcHJlc2VudC4KKyAqICBPbmx5IGZhbiBpbnB1dHMgYXJlIHN1cHBvcnRlZCBzbyBmYXIsIGFsdGhvdWdoIHRoZSBjaGlwIGNhbiBkbyBtdWNoIG1vcmUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisjZGVmaW5lIERSVk5BTUUgInBjODc0MjciCisKKy8qIFRoZSBsb2NrIG11dGV4IHByb3RlY3RzIGJvdGggdGhlIEkvTyBhY2Nlc3NlcyAobmVlZGVkIGJlY2F1c2UgdGhlCisgICBkZXZpY2UgaXMgdXNpbmcgYmFua2VkIHJlZ2lzdGVycykgYW5kIHRoZSByZWdpc3RlciBjYWNoZSAobmVlZGVkIHRvIGtlZXAKKyAgIHRoZSBkYXRhIGluIHRoZSByZWdpc3RlcnMgYW5kIHRoZSBjYWNoZSBpbiBzeW5jIGF0IGFueSB0aW1lKS4gKi8KK3N0cnVjdCBwYzg3NDI3X2RhdGEgeworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlpbnQgYWRkcmVzc1syXTsKKwljb25zdCBjaGFyICpuYW1lOworCisJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIGluIGppZmZpZXMgKi8KKwl1OCBmYW5fZW5hYmxlZDsJCQkvKiBiaXQgdmVjdG9yICovCisJdTE2IGZhbls4XTsJCQkvKiByZWdpc3RlciB2YWx1ZXMgKi8KKwl1MTYgZmFuX21pbls4XTsJCQkvKiByZWdpc3RlciB2YWx1ZXMgKi8KKwl1OCBmYW5fc3RhdHVzWzhdOwkJLyogcmVnaXN0ZXIgdmFsdWVzICovCit9OworCisvKgorICogU3VwZXItSS9PIHJlZ2lzdGVycyBhbmQgb3BlcmF0aW9ucworICovCisKKyNkZWZpbmUgU0lPUkVHX0xEU0VMCTB4MDcJLyogTG9naWNhbCBkZXZpY2Ugc2VsZWN0ICovCisjZGVmaW5lIFNJT1JFR19ERVZJRAkweDIwCS8qIERldmljZSBJRCAqLworI2RlZmluZSBTSU9SRUdfQUNUCTB4MzAJLyogRGV2aWNlIGFjdGl2YXRpb24gKi8KKyNkZWZpbmUgU0lPUkVHX01BUAkweDUwCS8qIEkvTyBvciBtZW1vcnkgbWFwcGluZyAqLworI2RlZmluZSBTSU9SRUdfSU9CQVNFCTB4NjAJLyogSS9PIGJhc2UgYWRkcmVzcyAqLworCitzdGF0aWMgY29uc3QgdTggbG9nZGV2WzJdID0geyAweDA5LCAweDE0IH07CitzdGF0aWMgY29uc3QgY2hhciAqbG9nZGV2X3N0clsyXSA9IHsgRFJWTkFNRSAiIEZNQyIsIERSVk5BTUUgIiBITUMiIH07CisjZGVmaW5lIExEX0ZBTgkJMAorI2RlZmluZSBMRF9JTgkJMQorI2RlZmluZSBMRF9URU1QCQkxCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX291dGIoaW50IHNpb2FkZHIsIGludCByZWcsIGludCB2YWwpCit7CisJb3V0YihyZWcsIHNpb2FkZHIpOworCW91dGIodmFsLCBzaW9hZGRyICsgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN1cGVyaW9faW5iKGludCBzaW9hZGRyLCBpbnQgcmVnKQoreworCW91dGIocmVnLCBzaW9hZGRyKTsKKwlyZXR1cm4gaW5iKHNpb2FkZHIgKyAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fZXhpdChpbnQgc2lvYWRkcikKK3sKKwlvdXRiKDB4MDIsIHNpb2FkZHIpOworCW91dGIoMHgwMiwgc2lvYWRkciArIDEpOworfQorCisvKgorICogTG9naWNhbCBkZXZpY2VzCisgKi8KKworI2RlZmluZSBSRUdJT05fTEVOR1RICQkzMgorI2RlZmluZSBQQzg3NDI3X1JFR19CQU5LCTB4MGYKKyNkZWZpbmUgQkFOS19GTShucikJCShucikKKyNkZWZpbmUgQkFOS19GVChucikJCSgweDA4ICsgKG5yKSkKKyNkZWZpbmUgQkFOS19GQyhucikJCSgweDEwICsgKG5yKSAqIDIpCisKKy8qCisgKiBJL08gYWNjZXNzIGZ1bmN0aW9ucworICovCisKKy8qIGxkaSBpcyB0aGUgbG9naWNhbCBkZXZpY2UgaW5kZXggKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBjODc0MjdfcmVhZDgoc3RydWN0IHBjODc0MjdfZGF0YSAqZGF0YSwgdTggbGRpLCB1OCByZWcpCit7CisJcmV0dXJuIGluYihkYXRhLT5hZGRyZXNzW2xkaV0gKyByZWcpOworfQorCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGRhdGEtPmxvY2sgaGVsZCwgZXhjZXB0IGR1cmluZyBpbml0ICovCitzdGF0aWMgaW5saW5lIGludCBwYzg3NDI3X3JlYWQ4X2Jhbmsoc3RydWN0IHBjODc0MjdfZGF0YSAqZGF0YSwgdTggbGRpLAorCQkJCSAgICAgdTggYmFuaywgdTggcmVnKQoreworCW91dGIoYmFuaywgZGF0YS0+YWRkcmVzc1tsZGldICsgUEM4NzQyN19SRUdfQkFOSyk7CisJcmV0dXJuIGluYihkYXRhLT5hZGRyZXNzW2xkaV0gKyByZWcpOworfQorCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGRhdGEtPmxvY2sgaGVsZCwgZXhjZXB0IGR1cmluZyBpbml0ICovCitzdGF0aWMgaW5saW5lIHZvaWQgcGM4NzQyN193cml0ZThfYmFuayhzdHJ1Y3QgcGM4NzQyN19kYXRhICpkYXRhLCB1OCBsZGksCisJCQkJICAgICAgIHU4IGJhbmssIHU4IHJlZywgdTggdmFsdWUpCit7CisJb3V0YihiYW5rLCBkYXRhLT5hZGRyZXNzW2xkaV0gKyBQQzg3NDI3X1JFR19CQU5LKTsKKwlvdXRiKHZhbHVlLCBkYXRhLT5hZGRyZXNzW2xkaV0gKyByZWcpOworfQorCisvKgorICogRmFuIHJlZ2lzdGVycyBhbmQgY29udmVyc2lvbnMKKyAqLworCisvKiBmYW4gZGF0YSByZWdpc3RlcnMgYXJlIDE2LWJpdCB3aWRlICovCisjZGVmaW5lIFBDODc0MjdfUkVHX0ZBTgkJCTB4MTIKKyNkZWZpbmUgUEM4NzQyN19SRUdfRkFOX01JTgkJMHgxNAorI2RlZmluZSBQQzg3NDI3X1JFR19GQU5fU1RBVFVTCQkweDEwCisKKyNkZWZpbmUgRkFOX1NUQVRVU19TVEFMTAkJKDEgPDwgMykKKyNkZWZpbmUgRkFOX1NUQVRVU19MT1NQRAkJKDEgPDwgMSkKKyNkZWZpbmUgRkFOX1NUQVRVU19NT05FTgkJKDEgPDwgMCkKKworLyogRGVkaWNhdGVkIGZ1bmN0aW9uIHRvIHJlYWQgYWxsIHJlZ2lzdGVycyByZWxhdGVkIHRvIGEgZ2l2ZW4gZmFuIGlucHV0LgorICAgVGhpcyBzYXZlcyB1cyBxdWl0ZSBhIGZldyBsb2NrcyBhbmQgYmFuayBzZWxlY3Rpb25zLgorICAgTXVzdCBiZSBjYWxsZWQgd2l0aCBkYXRhLT5sb2NrIGhlbGQuCisgICBuciBpcyBmcm9tIDAgdG8gNyAqLworc3RhdGljIHZvaWQgcGM4NzQyN19yZWFkYWxsX2ZhbihzdHJ1Y3QgcGM4NzQyN19kYXRhICpkYXRhLCB1OCBucikKK3sKKwlpbnQgaW9iYXNlID0gZGF0YS0+YWRkcmVzc1tMRF9GQU5dOworCisJb3V0YihCQU5LX0ZNKG5yKSwgaW9iYXNlICsgUEM4NzQyN19SRUdfQkFOSyk7CisJZGF0YS0+ZmFuW25yXSA9IGludyhpb2Jhc2UgKyBQQzg3NDI3X1JFR19GQU4pOworCWRhdGEtPmZhbl9taW5bbnJdID0gaW53KGlvYmFzZSArIFBDODc0MjdfUkVHX0ZBTl9NSU4pOworCWRhdGEtPmZhbl9zdGF0dXNbbnJdID0gaW5iKGlvYmFzZSArIFBDODc0MjdfUkVHX0ZBTl9TVEFUVVMpOworCS8qIENsZWFyIGZhbiBhbGFybSBiaXRzICovCisJb3V0YihkYXRhLT5mYW5fc3RhdHVzW25yXSwgaW9iYXNlICsgUEM4NzQyN19SRUdfRkFOX1NUQVRVUyk7Cit9CisKKy8qIFRoZSAyIExTQiBvZiBmYW4gc3BlZWQgcmVnaXN0ZXJzIGFyZSB1c2VkIGZvciBzb21ldGhpbmcgZGlmZmVyZW50LgorICAgVGhlIGFjdHVhbCAyIExTQiBvZiB0aGUgbWVhc3VyZW1lbnRzIGFyZSBub3QgYXZhaWxhYmxlLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZhbl9mcm9tX3JlZyh1MTYgcmVnKQoreworCXJlZyAmPSAweGZmZmM7CisJaWYgKHJlZyA9PSAweDAwMDAgfHwgcmVnID09IDB4ZmZmYykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDU0MDAwMDBVTCAvIHJlZzsKK30KKworLyogVGhlIDIgTFNCIG9mIHRoZSBmYW4gc3BlZWQgbGltaXQgcmVnaXN0ZXJzIGFyZSBub3Qgc2lnbmlmaWNhbnQuICovCitzdGF0aWMgaW5saW5lIHUxNiBmYW5fdG9fcmVnKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWlmICh2YWwgPCA4M1VMKQorCQlyZXR1cm4gMHhmZmZmOworCWlmICh2YWwgPj0gMTM1MDAwMFVMKQorCQlyZXR1cm4gMHgwMDA0OworCXJldHVybiAoKDEzNTAwMDBVTCArIHZhbCAvIDIpIC8gdmFsKSA8PCAyOworfQorCisvKgorICogRGF0YSBpbnRlcmZhY2UKKyAqLworCitzdGF0aWMgc3RydWN0IHBjODc0MjdfZGF0YSAqcGM4NzQyN191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGM4NzQyN19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopCisJICYmIGRhdGEtPmxhc3RfdXBkYXRlZCkKKwkJZ290byBkb25lOworCisJLyogRmFucyAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKCEoZGF0YS0+ZmFuX2VuYWJsZWQgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJcGM4NzQyN19yZWFkYWxsX2ZhbihkYXRhLCBpKTsKKwl9CisJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKworZG9uZToKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2Zhbl9pbnB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICAgICAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgcGM4NzQyN19kYXRhICpkYXRhID0gcGM4NzQyN191cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGZhbl9mcm9tX3JlZyhkYXRhLT5mYW5bbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHBjODc0MjdfZGF0YSAqZGF0YSA9IHBjODc0MjdfdXBkYXRlX2RldmljZShkZXYpOworCWludCBuciA9IGF0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBmYW5fZnJvbV9yZWcoZGF0YS0+ZmFuX21pbltucl0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICAgICAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHBjODc0MjdfZGF0YSAqZGF0YSA9IHBjODc0MjdfdXBkYXRlX2RldmljZShkZXYpOworCWludCBuciA9IGF0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhKGRhdGEtPmZhbl9zdGF0dXNbbnJdCisJCQkJICAgICAgICYgRkFOX1NUQVRVU19MT1NQRCkpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2Zhbl9mYXVsdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICAgICAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgcGM4NzQyN19kYXRhICpkYXRhID0gcGM4NzQyN191cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG5yID0gYXR0ci0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgISEoZGF0YS0+ZmFuX3N0YXR1c1tucl0KKwkJCQkgICAgICAgJiBGQU5fU1RBVFVTX1NUQUxMKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgICpkZXZhdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGM4NzQyN19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCWludCBuciA9IGF0dHItPmluZGV4OworCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJaW50IGlvYmFzZSA9IGRhdGEtPmFkZHJlc3NbTERfRkFOXTsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCW91dGIoQkFOS19GTShuciksIGlvYmFzZSArIFBDODc0MjdfUkVHX0JBTkspOworCS8qIFRoZSBsb3cgc3BlZWQgbGltaXQgcmVnaXN0ZXJzIGFyZSByZWFkLW9ubHkgd2hpbGUgbW9uaXRvcmluZworCSAgIGlzIGVuYWJsZWQsIHNvIHdlIGhhdmUgdG8gZGlzYWJsZSBtb25pdG9yaW5nLCB0aGVuIGNoYW5nZSB0aGUKKwkgICBsaW1pdCwgYW5kIGZpbmFsbHkgZW5hYmxlIG1vbml0b3JpbmcgYWdhaW4uICovCisJb3V0YigwLCBpb2Jhc2UgKyBQQzg3NDI3X1JFR19GQU5fU1RBVFVTKTsKKwlkYXRhLT5mYW5fbWluW25yXSA9IGZhbl90b19yZWcodmFsKTsKKwlvdXR3KGRhdGEtPmZhbl9taW5bbnJdLCBpb2Jhc2UgKyBQQzg3NDI3X1JFR19GQU5fTUlOKTsKKwlvdXRiKEZBTl9TVEFUVVNfTU9ORU4sIGlvYmFzZSArIFBDODc0MjdfUkVHX0ZBTl9TVEFUVVMpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9pbnB1dCwgU19JUlVHTywgc2hvd19mYW5faW5wdXQsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2Zhbl9pbnB1dCwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjNfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuX2lucHV0LCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNF9pbnB1dCwgU19JUlVHTywgc2hvd19mYW5faW5wdXQsIE5VTEwsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW41X2lucHV0LCBTX0lSVUdPLCBzaG93X2Zhbl9pbnB1dCwgTlVMTCwgNCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjZfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuX2lucHV0LCBOVUxMLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuN19pbnB1dCwgU19JUlVHTywgc2hvd19mYW5faW5wdXQsIE5VTEwsIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW44X2lucHV0LCBTX0lSVUdPLCBzaG93X2Zhbl9pbnB1dCwgTlVMTCwgNyk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuN19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuOF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCA3KTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2FsYXJtLCBTX0lSVUdPLCBzaG93X2Zhbl9hbGFybSwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfZmFuX2FsYXJtLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19hbGFybSwgU19JUlVHTywgc2hvd19mYW5fYWxhcm0sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW40X2FsYXJtLCBTX0lSVUdPLCBzaG93X2Zhbl9hbGFybSwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjVfYWxhcm0sIFNfSVJVR08sIHNob3dfZmFuX2FsYXJtLCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNl9hbGFybSwgU19JUlVHTywgc2hvd19mYW5fYWxhcm0sIE5VTEwsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW43X2FsYXJtLCBTX0lSVUdPLCBzaG93X2Zhbl9hbGFybSwgTlVMTCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjhfYWxhcm0sIFNfSVJVR08sIHNob3dfZmFuX2FsYXJtLCBOVUxMLCA3KTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2Zhbl9mYXVsdCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfZmF1bHQsIFNfSVJVR08sIHNob3dfZmFuX2ZhdWx0LCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19mYXVsdCwgU19JUlVHTywgc2hvd19mYW5fZmF1bHQsIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW40X2ZhdWx0LCBTX0lSVUdPLCBzaG93X2Zhbl9mYXVsdCwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjVfZmF1bHQsIFNfSVJVR08sIHNob3dfZmFuX2ZhdWx0LCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNl9mYXVsdCwgU19JUlVHTywgc2hvd19mYW5fZmF1bHQsIE5VTEwsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW43X2ZhdWx0LCBTX0lSVUdPLCBzaG93X2Zhbl9mYXVsdCwgTlVMTCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjhfZmF1bHQsIFNfSVJVR08sIHNob3dfZmFuX2ZhdWx0LCBOVUxMLCA3KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBjODc0MjdfYXR0cmlidXRlc19mYW5bOF1bNV0gPSB7CisJeworCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJCU5VTEwKKwl9LCB7CisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkJTlVMTAorCX0sIHsKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19mYXVsdC5kZXZfYXR0ci5hdHRyLAorCQlOVUxMCisJfSwgeworCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW40X21pbi5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW40X2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJCU5VTEwKKwl9LCB7CisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfbWluLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuNV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkJTlVMTAorCX0sIHsKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW42X2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuNl9taW4uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW42X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuNl9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCQlOVUxMCisJfSwgeworCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjdfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW43X21pbi5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjdfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW43X2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJCU5VTEwKKwl9LCB7CisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuOF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjhfbWluLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuOF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjhfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkJTlVMTAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjODc0MjdfZ3JvdXBfZmFuWzhdID0geworCXsgLmF0dHJzID0gcGM4NzQyN19hdHRyaWJ1dGVzX2ZhblswXSB9LAorCXsgLmF0dHJzID0gcGM4NzQyN19hdHRyaWJ1dGVzX2ZhblsxXSB9LAorCXsgLmF0dHJzID0gcGM4NzQyN19hdHRyaWJ1dGVzX2ZhblsyXSB9LAorCXsgLmF0dHJzID0gcGM4NzQyN19hdHRyaWJ1dGVzX2ZhblszXSB9LAorCXsgLmF0dHJzID0gcGM4NzQyN19hdHRyaWJ1dGVzX2Zhbls0XSB9LAorCXsgLmF0dHJzID0gcGM4NzQyN19hdHRyaWJ1dGVzX2Zhbls1XSB9LAorCXsgLmF0dHJzID0gcGM4NzQyN19hdHRyaWJ1dGVzX2Zhbls2XSB9LAorCXsgLmF0dHJzID0gcGM4NzQyN19hdHRyaWJ1dGVzX2Zhbls3XSB9LAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3NDI3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5uYW1lKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpOworCisKKy8qCisgKiBEZXZpY2UgZGV0ZWN0aW9uLCBhdHRhY2ggYW5kIGRldGFjaAorICovCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwYzg3NDI3X2luaXRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGM4NzQyN19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGk7CisJdTggcmVnOworCisJLyogVGhlIEZNQyBtb2R1bGUgc2hvdWxkIGJlIHJlYWR5ICovCisJcmVnID0gcGM4NzQyN19yZWFkOChkYXRhLCBMRF9GQU4sIFBDODc0MjdfUkVHX0JBTkspOworCWlmICghKHJlZyAmIDB4ODApKQorCQlkZXZfd2FybihkZXYsICJGTUMgbW9kdWxlIG5vdCByZWFkeSFcbiIpOworCisJLyogQ2hlY2sgd2hpY2ggZmFucyBhcmUgZW5hYmxlZCAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJcmVnID0gcGM4NzQyN19yZWFkOF9iYW5rKGRhdGEsIExEX0ZBTiwgQkFOS19GTShpKSwKKwkJCQkJIFBDODc0MjdfUkVHX0ZBTl9TVEFUVVMpOworCQlpZiAocmVnICYgRkFOX1NUQVRVU19NT05FTikKKwkJCWRhdGEtPmZhbl9lbmFibGVkIHw9ICgxIDw8IGkpOworCX0KKworCWlmICghZGF0YS0+ZmFuX2VuYWJsZWQpIHsKKwkJZGV2X2RiZyhkZXYsICJFbmFibGluZyBhbGwgZmFuIGlucHV0c1xuIik7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlwYzg3NDI3X3dyaXRlOF9iYW5rKGRhdGEsIExEX0ZBTiwgQkFOS19GTShpKSwKKwkJCQkJICAgIFBDODc0MjdfUkVHX0ZBTl9TVEFUVVMsCisJCQkJCSAgICBGQU5fU1RBVFVTX01PTkVOKTsKKwkJZGF0YS0+ZmFuX2VuYWJsZWQgPSAweGZmOworCX0KK30KKworc3RhdGljIGludCBfX2RldmluaXQgcGM4NzQyN19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwYzg3NDI3X2RhdGEgKmRhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGksIGVycjsKKworCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGM4NzQyN19kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IE91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogVGhpcyB3aWxsIG5lZWQgdG8gYmUgcmV2aXNpdGVkIHdoZW4gd2UgYWRkIHN1cHBvcnQgZm9yCisJICAgdGVtcGVyYXR1cmUgYW5kIHZvbHRhZ2UgbW9uaXRvcmluZy4gKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJZGF0YS0+YWRkcmVzc1swXSA9IHJlcy0+c3RhcnQ7CisKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKwlkYXRhLT5uYW1lID0gInBjODc0MjciOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOworCXBjODc0MjdfaW5pdF9kZXZpY2UoJnBkZXYtPmRldik7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKSkpCisJCWdvdG8gZXhpdF9rZnJlZTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICghKGRhdGEtPmZhbl9lbmFibGVkICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwKKwkJCQkJICAgICAgJnBjODc0MjdfZ3JvdXBfZmFuW2ldKSkpCisJCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCX0KKworCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDbGFzcyByZWdpc3RyYXRpb24gZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJfQorCisJcmV0dXJuIDA7CisKK2V4aXRfcmVtb3ZlX2ZpbGVzOgorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKCEoZGF0YS0+ZmFuX2VuYWJsZWQgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnBjODc0MjdfZ3JvdXBfZmFuW2ldKTsKKwl9CitleGl0X2tmcmVlOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGRhdGEpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwYzg3NDI3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwYzg3NDI3X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICghKGRhdGEtPmZhbl9lbmFibGVkICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZwYzg3NDI3X2dyb3VwX2ZhbltpXSk7CisJfQorCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGM4NzQyN19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJWTkFNRSwKKwl9LAorCS5wcm9iZQkJPSBwYzg3NDI3X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocGM4NzQyN19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGM4NzQyN19kZXZpY2VfYWRkKHVuc2lnbmVkIHNob3J0IGFkZHJlc3MpCit7CisJc3RydWN0IHJlc291cmNlIHJlcyA9IHsKKwkJLnN0YXJ0CT0gYWRkcmVzcywKKwkJLmVuZAk9IGFkZHJlc3MgKyBSRUdJT05fTEVOR1RIIC0gMSwKKwkJLm5hbWUJPSBsb2dkZXZfc3RyWzBdLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX07CisJaW50IGVycjsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJWTkFNRSwgYWRkcmVzcyk7CisJaWYgKCFwZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmcmVzLCAxKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSByZXNvdXJjZSBhZGRpdGlvbiBmYWlsZWQgIgorCQkgICAgICAgIiglZClcbiIsIGVycik7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsCisJCSAgICAgICBlcnIpOworCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9kZXZpY2VfcHV0OgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBjODc0MjdfZmluZChpbnQgc2lvYWRkciwgdW5zaWduZWQgc2hvcnQgKmFkZHJlc3MpCit7CisJdTE2IHZhbDsKKwlpbnQgaSwgZXJyID0gMDsKKworCS8qIElkZW50aWZ5IGRldmljZSAqLworCXZhbCA9IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT1JFR19ERVZJRCk7CisJaWYgKHZhbCAhPSAweGYyKSB7CS8qIFBDODc0MjcgKi8KKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJYWRkcmVzc1tpXSA9IDA7CisJCS8qIFNlbGVjdCBsb2dpY2FsIGRldmljZSAqLworCQlzdXBlcmlvX291dGIoc2lvYWRkciwgU0lPUkVHX0xEU0VMLCBsb2dkZXZbaV0pOworCisJCXZhbCA9IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT1JFR19BQ1QpOworCQlpZiAoISh2YWwgJiAweDAxKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZOQU1FICI6IExvZ2ljYWwgZGV2aWNlIDB4JTAyeCAiCisJCQkgICAgICAgIm5vdCBhY3RpdmF0ZWRcbiIsIGxvZ2RldltpXSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXZhbCA9IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT1JFR19NQVApOworCQlpZiAodmFsICYgMHgwMSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZOQU1FICI6IExvZ2ljYWwgZGV2aWNlIDB4JTAyeCAiCisJCQkgICAgICAgImlzIG1lbW9yeS1tYXBwZWQsIGNhbid0IHVzZVxuIiwgbG9nZGV2W2ldKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdmFsID0gKHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT1JFR19JT0JBU0UpIDw8IDgpCisJCSAgICB8IHN1cGVyaW9faW5iKHNpb2FkZHIsIFNJT1JFR19JT0JBU0UgKyAxKTsKKwkJaWYgKCF2YWwpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gRFJWTkFNRSAiOiBJL08gYmFzZSBhZGRyZXNzIG5vdCBzZXQgIgorCQkJICAgICAgICJmb3IgbG9naWNhbCBkZXZpY2UgMHglMDJ4XG4iLCBsb2dkZXZbaV0pOworCQkJY29udGludWU7CisJCX0KKwkJYWRkcmVzc1tpXSA9IHZhbDsKKwl9CisKK2V4aXQ6CisJc3VwZXJpb19leGl0KHNpb2FkZHIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBjODc0MjdfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisJdW5zaWduZWQgc2hvcnQgYWRkcmVzc1syXTsKKworCWlmIChwYzg3NDI3X2ZpbmQoMHgyZSwgYWRkcmVzcykKKwkgJiYgcGM4NzQyN19maW5kKDB4NGUsIGFkZHJlc3MpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEZvciBub3cgdGhlIGRyaXZlciBvbmx5IGhhbmRsZXMgZmFucyBzbyB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlCisJICAgZmlyc3QgYWRkcmVzcy4gKi8KKwlpZiAoIWFkZHJlc3NbMF0pCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwYzg3NDI3X2RyaXZlcik7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJLyogU2V0cyBnbG9iYWwgcGRldiBhcyBhIHNpZGUgZWZmZWN0ICovCisJZXJyID0gcGM4NzQyN19kZXZpY2VfYWRkKGFkZHJlc3NbMF0pOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9kcml2ZXI7CisKKwlyZXR1cm4gMDsKKworZXhpdF9kcml2ZXI6CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjODc0MjdfZHJpdmVyKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBjODc0MjdfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwYzg3NDI3X2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQzg3NDI3IGhhcmR3YXJlIG1vbml0b3JpbmcgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHBjODc0MjdfaW5pdCk7Cittb2R1bGVfZXhpdChwYzg3NDI3X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYyBiL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMKaW5kZXggMjI1NzgwNi4uMjEyYTE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4MzYyN2VoZi5jCkBAIC0zLDcgKzMsNyBAQAogICAgICAgICAgICAgICAgIHRoZSBXaW5ib25kIFc4MzYyN0VIRiBTdXBlci1JL08gY2hpcAogICAgIENvcHlyaWdodCAoQykgMjAwNSAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgICAgQ29weXJpZ2h0IChDKSAyMDA2ICBZdWFuIE11IChXaW5ib25kKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJ1ZG9sZiBNYXJlayA8ci5tYXJla0BzaC5jdnV0LmN6PgorICAgICAgICAgICAgICAgICAgICAgICAgUnVkb2xmIE1hcmVrIDxyLm1hcmVrQGFzc2VtYmxlci5jej4KICAgICAgICAgICAgICAgICAgICAgICAgIERhdmlkIEh1YmJhcmQgPGRhdmlkLmMuaHViYmFyZEBnbWFpbC5jb20+CiAKICAgICBTaGFtZWxlc3NseSByaXBwZWQgZnJvbSB0aGUgdzgzNjI3aGYgZHJpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jCmluZGV4IDRlMTA4MjYuLmIwZmEyOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jCkBAIC0zLDcgKzMsNyBAQAogICAgICAgICAgICAgICAgIG1vbml0b3JpbmcKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLgogICAgICAgICAgICAgICAgICAgICAgICAgQ2h1bmhhbyBIdWFuZyA8RFpTaGVuQFdpbmJvbmQuY29tLnR3PiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJ1ZG9sZiBNYXJlayA8ci5tYXJla0BzaC5jdnV0LmN6PgorICAgICAgICAgICAgICAgICAgICAgICAgUnVkb2xmIE1hcmVrIDxyLm1hcmVrQGFzc2VtYmxlci5jej4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1M2ZmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jCkBAIC0wLDAgKzEsMTcwMiBAQAorLyoKKyAgICB3ODM3OTMuYyAtIExpbnV4IGtlcm5lbCBkcml2ZXIgZm9yIGhhcmR3YXJlIG1vbml0b3JpbmcKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLgorICAgICAgICAgICAgICAgICAgWXVhbiBNdQorICAgICAgICAgICAgICAgICAgUnVkb2xmIE1hcmVrIDxyLm1hcmVrQGFzc2VtYmxlci5jej4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIC0gdmVyc2lvbiAyLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgICAgMDIxMTAtMTMwMSBVU0EuCisqLworCisvKgorICAgIFN1cHBvcnRzIGZvbGxvd2luZyBjaGlwczoKKworICAgIENoaXAJI3ZpbgkjZmFuaW4JI3B3bQkjdGVtcAl3Y2hpcGlkCXZlbmRpZAlpMmMJSVNBCisgICAgdzgzNzkzCTEwCTEyCTgJNgkweDdiCTB4NWNhMwl5ZXMJbm8KKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tdmlkLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQgfTsKKworLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KK0kyQ19DTElFTlRfSU5TTU9EXzEodzgzNzkzKTsKK0kyQ19DTElFTlRfTU9EVUxFX1BBUk0oZm9yY2Vfc3ViY2xpZW50cywgIkxpc3Qgb2Ygc3ViY2xpZW50IGFkZHJlc3NlczogIgorCQkgICAgICAgIntidXMsIGNsaWVudGFkZHIsIHN1YmNsaWVudGFkZHIxLCBzdWJjbGllbnRhZGRyMn0iKTsKKworc3RhdGljIGludCByZXNldDsKK21vZHVsZV9wYXJhbShyZXNldCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlc2V0LCAiU2V0IHRvIDEgdG8gcmVzZXQgY2hpcCwgbm90IHJlY29tbWVuZGVkIik7CisKKy8qCisgICBBZGRyZXNzIDB4MDAsIDB4MGQsIDB4MGUsIDB4MGYgaW4gYWxsIHRocmVlIGJhbmtzIGFyZSByZXNlcnZlZAorICAgYXMgSUQsIEJhbmsgU2VsZWN0IHJlZ2lzdGVycworKi8KKyNkZWZpbmUgVzgzNzkzX1JFR19CQU5LU0VMCQkweDAwCisjZGVmaW5lIFc4Mzc5M19SRUdfVkVORE9SSUQJCTB4MGQKKyNkZWZpbmUgVzgzNzkzX1JFR19DSElQSUQJCTB4MGUKKyNkZWZpbmUgVzgzNzkzX1JFR19ERVZJQ0VJRAkJMHgwZgorCisjZGVmaW5lIFc4Mzc5M19SRUdfQ09ORklHCQkweDQwCisjZGVmaW5lIFc4Mzc5M19SRUdfTUZDCQkJMHg1OAorI2RlZmluZSBXODM3OTNfUkVHX0ZBTklOX0NUUkwJCTB4NWMKKyNkZWZpbmUgVzgzNzkzX1JFR19GQU5JTl9TRUwJCTB4NWQKKyNkZWZpbmUgVzgzNzkzX1JFR19JMkNfQUREUgkJMHgwYgorI2RlZmluZSBXODM3OTNfUkVHX0kyQ19TVUJBRERSCQkweDBjCisjZGVmaW5lIFc4Mzc5M19SRUdfVklEX0lOQQkJMHgwNQorI2RlZmluZSBXODM3OTNfUkVHX1ZJRF9JTkIJCTB4MDYKKyNkZWZpbmUgVzgzNzkzX1JFR19WSURfTEFUQ0hBCQkweDA3CisjZGVmaW5lIFc4Mzc5M19SRUdfVklEX0xBVENIQgkJMHgwOAorI2RlZmluZSBXODM3OTNfUkVHX1ZJRF9DVFJMCQkweDU5CisKK3N0YXRpYyB1MTYgVzgzNzkzX1JFR19URU1QX01PREVbMl0gPSB7IDB4NWUsIDB4NWYgfTsKKworI2RlZmluZSBURU1QX1JFQUQJMAorI2RlZmluZSBURU1QX0NSSVQJMQorI2RlZmluZSBURU1QX0NSSVRfSFlTVAkyCisjZGVmaW5lIFRFTVBfV0FSTgkzCisjZGVmaW5lIFRFTVBfV0FSTl9IWVNUCTQKKy8qIG9ubHkgY3JpdCBhbmQgY3JpdF9oeXN0IGFmZmVjdCByZWFsLXRpbWUgYWxhcm0gc3RhdHVzCisgICBjdXJyZW50IGNyaXQgY3JpdF9oeXN0IHdhcm4gd2Fybl9oeXN0ICovCitzdGF0aWMgdTE2IFc4Mzc5M19SRUdfVEVNUFtdWzVdID0geworCXsweDFjLCAweDc4LCAweDc5LCAweDdhLCAweDdifSwKKwl7MHgxZCwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3Zn0sCisJezB4MWUsIDB4ODAsIDB4ODEsIDB4ODIsIDB4ODN9LAorCXsweDFmLCAweDg0LCAweDg1LCAweDg2LCAweDg3fSwKKwl7MHgyMCwgMHg4OCwgMHg4OSwgMHg4YSwgMHg4Yn0sCisJezB4MjEsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGZ9LAorfTsKKworI2RlZmluZSBXODM3OTNfUkVHX1RFTVBfTE9XX0JJVFMJMHgyMgorCisjZGVmaW5lIFc4Mzc5M19SRUdfQkVFUChpbmRleCkJCSgweDUzICsgKGluZGV4KSkKKyNkZWZpbmUgVzgzNzkzX1JFR19BTEFSTShpbmRleCkJCSgweDRiICsgKGluZGV4KSkKKworI2RlZmluZSBXODM3OTNfUkVHX0NMUl9DSEFTU0lTCQkweDRhCS8qIFNNSSBNQVNLNCAqLworI2RlZmluZSBXODM3OTNfUkVHX0lSUV9DVFJMCQkweDUwCisjZGVmaW5lIFc4Mzc5M19SRUdfT1ZUX0NUUkwJCTB4NTEKKyNkZWZpbmUgVzgzNzkzX1JFR19PVlRfQkVFUAkJMHg1MgorCisjZGVmaW5lIElOX1JFQUQJCQkJMAorI2RlZmluZSBJTl9NQVgJCQkJMQorI2RlZmluZSBJTl9MT1cJCQkJMgorc3RhdGljIGNvbnN0IHUxNiBXODM3OTNfUkVHX0lOW11bM10gPSB7CisJLyogQ3VycmVudCwgSGlnaCwgTG93ICovCisJezB4MTAsIDB4NjAsIDB4NjF9LAkvKiBWY29yZSBBCSovCisJezB4MTEsIDB4NjIsIDB4NjN9LAkvKiBWY29yZSBCCSovCisJezB4MTIsIDB4NjQsIDB4NjV9LAkvKiBWdHQJCSovCisJezB4MTQsIDB4NmEsIDB4NmJ9LAkvKiBWU0VOMQkqLworCXsweDE1LCAweDZjLCAweDZkfSwJLyogVlNFTjIJKi8KKwl7MHgxNiwgMHg2ZSwgMHg2Zn0sCS8qICszVlNFTgkqLworCXsweDE3LCAweDcwLCAweDcxfSwJLyogKzEyVlNFTgkqLworCXsweDE4LCAweDcyLCAweDczfSwJLyogNVZERAkJKi8KKwl7MHgxOSwgMHg3NCwgMHg3NX0sCS8qIDVWU0IJCSovCisJezB4MWEsIDB4NzYsIDB4Nzd9LAkvKiBWQkFUCQkqLworfTsKKworLyogTG93IEJpdHMgb2YgVmNvcmUgQS9CIFZ0dCBSZWFkL0hpZ2gvTG93ICovCitzdGF0aWMgY29uc3QgdTE2IFc4Mzc5M19SRUdfSU5fTE9XX0JJVFNbXSA9IHsgMHgxYiwgMHg2OCwgMHg2OSB9Oworc3RhdGljIHU4IHNjYWxlX2luW10gPSB7IDIsIDIsIDIsIDE2LCAxNiwgMTYsIDgsIDI0LCAyNCwgMTYgfTsKK3N0YXRpYyB1OCBzY2FsZV9pbl9hZGRbXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUwLCAxNTAsIDAgfTsKKworI2RlZmluZSBXODM3OTNfUkVHX0ZBTihpbmRleCkJCSgweDIzICsgMiAqIChpbmRleCkpCS8qIEhpZ2ggYnl0ZSAqLworI2RlZmluZSBXODM3OTNfUkVHX0ZBTl9NSU4oaW5kZXgpCSgweDkwICsgMiAqIChpbmRleCkpCS8qIEhpZ2ggYnl0ZSAqLworCisjZGVmaW5lIFc4Mzc5M19SRUdfUFdNX0RFRkFVTFQJCTB4YjIKKyNkZWZpbmUgVzgzNzkzX1JFR19QV01fRU5BQkxFCQkweDIwNworI2RlZmluZSBXODM3OTNfUkVHX1BXTV9VUFRJTUUJCTB4YzMJLyogVW5pdCBpbiAwLjEgc2Vjb25kICovCisjZGVmaW5lIFc4Mzc5M19SRUdfUFdNX0RPV05USU1FCQkweGM0CS8qIFVuaXQgaW4gMC4xIHNlY29uZCAqLworI2RlZmluZSBXODM3OTNfUkVHX1RFTVBfQ1JJVElDQUwJMHhjNQorCisjZGVmaW5lIFBXTV9EVVRZCQkJMAorI2RlZmluZSBQV01fU1RBUlQJCQkxCisjZGVmaW5lIFBXTV9OT05TVE9QCQkJMgorI2RlZmluZSBXODM3OTNfUkVHX1BXTShpbmRleCwgbnIpCSgoKG5yKSA9PSAwID8gMHhiMyA6IFwKKwkJCQkJIChucikgPT0gMSA/IDB4MjIwIDogMHgyMTgpICsgKGluZGV4KSkKKworLyogYml0IGZpZWxkLCBmYW4xIGlzIGJpdDAsIGZhbjIgaXMgYml0MSAuLi4gKi8KKyNkZWZpbmUgVzgzNzkzX1JFR19URU1QX0ZBTl9NQVAoaW5kZXgpCSgweDIwMSArIChpbmRleCkpCisjZGVmaW5lIFc4Mzc5M19SRUdfVEVNUF9UT0woaW5kZXgpCSgweDIwOCArIChpbmRleCkpCisjZGVmaW5lIFc4Mzc5M19SRUdfVEVNUF9DUlVJU0UoaW5kZXgpCSgweDIxMCArIChpbmRleCkpCisjZGVmaW5lIFc4Mzc5M19SRUdfUFdNX1NUT1BfVElNRShpbmRleCkJKDB4MjI4ICsgKGluZGV4KSkKKyNkZWZpbmUgVzgzNzkzX1JFR19TRjJfVEVNUChpbmRleCwgbnIpCSgweDIzMCArICgoaW5kZXgpIDw8IDQpICsgKG5yKSkKKyNkZWZpbmUgVzgzNzkzX1JFR19TRjJfUFdNKGluZGV4LCBucikJKDB4MjM4ICsgKChpbmRleCkgPDwgNCkgKyAobnIpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgRkFOX0ZST01fUkVHKHUxNiB2YWwpCit7CisJaWYgKCh2YWwgPj0gMHhmZmYpIHx8ICh2YWwgPT0gMCkpCisJCXJldHVybgkwOworCXJldHVybiAoMTM1MDAwMFVMIC8gdmFsKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgRkFOX1RPX1JFRyhsb25nIHJwbSkKK3sKKwlpZiAocnBtIDw9IDApCisJCXJldHVybiAweDBmZmY7CisJcmV0dXJuIFNFTlNPUlNfTElNSVQoKDEzNTAwMDAgKyAocnBtID4+IDEpKSAvIHJwbSwgMSwgMHhmZmUpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgVElNRV9GUk9NX1JFRyh1OCByZWcpCit7CisJcmV0dXJuIChyZWcgKiAxMDApOworfQorCitzdGF0aWMgaW5saW5lIHU4IFRJTUVfVE9fUkVHKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXJldHVybiBTRU5TT1JTX0xJTUlUKCh2YWwgKyA1MCkgLyAxMDAsIDAsIDB4ZmYpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgVEVNUF9GUk9NX1JFRyhzOCByZWcpCit7CisJcmV0dXJuIChyZWcgKiAxMDAwKTsKK30KKworc3RhdGljIGlubGluZSBzOCBURU1QX1RPX1JFRyhsb25nIHZhbCwgczggbWluLCBzOCBtYXgpCit7CisJcmV0dXJuIFNFTlNPUlNfTElNSVQoKHZhbCArICh2YWwgPCAwID8gLTUwMCA6IDUwMCkpIC8gMTAwMCwgbWluLCBtYXgpOworfQorCitzdHJ1Y3QgdzgzNzkzX2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqbG03NVsyXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCWNoYXIgdmFsaWQ7CQkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCisJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3Rfbm9udm9sYXRpbGU7CS8qIEluIGppZmZpZXMsIGxhc3QgdGltZSB3ZSB1cGRhdGUgdGhlCisJCQkJCSAgIG5vbnZvbGF0aWxlIHJlZ2lzdGVycyAqLworCisJdTggYmFuazsKKwl1OCB2cm07CisJdTggdmlkWzJdOworCXU4IGluWzEwXVszXTsJCS8qIFJlZ2lzdGVyIHZhbHVlLCByZWFkL2hpZ2gvbG93ICovCisJdTggaW5fbG93X2JpdHNbM107CS8qIEFkZGl0aW9uYWwgcmVzb2x1dGlvbiBmb3IgVkNvcmUgQS9CIFZ0dCAqLworCisJdTE2IGhhc19mYW47CQkvKiBPbmx5IGZhbjEtIGZhbjUgaGFzIG93biBwaW5zICovCisJdTE2IGZhblsxMl07CQkvKiBSZWdpc3RlciB2YWx1ZSBjb21iaW5lICovCisJdTE2IGZhbl9taW5bMTJdOwkvKiBSZWdpc3RlciB2YWx1ZSBjb21iaW5lICovCisKKwlzOCB0ZW1wWzZdWzVdOwkJLyogY3VycmVudCwgY3JpdCwgY3JpdF9oeXN0LHdhcm4sIHdhcm5faHlzdCAqLworCXU4IHRlbXBfbG93X2JpdHM7CS8qIEFkZGl0aW9uYWwgcmVzb2x1dGlvbiBURDEtVEQ0ICovCisJdTggdGVtcF9tb2RlWzJdOwkvKiBieXRlIDA6IFRlbXAgRDEtRDQgbW9kZSBlYWNoIGhhcyAyIGJpdHMKKwkJCQkgICBieXRlIDE6IFRlbXAgUjEsUjIgbW9kZSwgZWFjaCBoYXMgMSBiaXQgKi8KKwl1OCB0ZW1wX2NyaXRpY2FsOwkvKiBJZiByZWFjaGVkIGFsbCBmYW4gd2lsbCBiZSBhdCBmdWxsIHNwZWVkICovCisJdTggdGVtcF9mYW5fbWFwWzZdOwkvKiBUZW1wIGNvbnRyb2xzIHdoaWNoIHB3bSBmYW4sIGJpdCBmaWVsZCAqLworCisJdTggaGFzX3B3bTsKKwl1OCBoYXNfdGVtcDsKKwl1OCBoYXNfdmlkOworCXU4IHB3bV9lbmFibGU7CQkvKiBSZWdpc3RlciB2YWx1ZSwgZWFjaCBUZW1wIGhhcyAxIGJpdCAqLworCXU4IHB3bV91cHRpbWU7CQkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXU4IHB3bV9kb3dudGltZTsJLyogUmVnaXN0ZXIgdmFsdWUgKi8KKwl1OCBwd21fZGVmYXVsdDsJCS8qIEFsbCBmYW4gZGVmYXVsdCBwd20sIG5leHQgcG93ZXJvbiB2YWxpZCAqLworCXU4IHB3bVs4XVszXTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCisJdTggcHdtX3N0b3BfdGltZVs4XTsKKwl1OCB0ZW1wX2NydWlzZVs2XTsKKworCXU4IGFsYXJtc1s1XTsJCS8qIHJlYWx0aW1lIHN0YXR1cyByZWdpc3RlcnMgKi8KKwl1OCBiZWVwc1s1XTsKKwl1OCBiZWVwX2VuYWJsZTsKKwl1OCB0b2xlcmFuY2VbM107CS8qIFRlbXAgdG9sZXJhbmNlKFNtYXJ0IEZhbiBJL0lJKSAqLworCXU4IHNmMl9wd21bNl1bN107CS8qIFNtYXJ0IEZhbklJOiBGYW4gZHV0eSBjeWNsZSAqLworCXU4IHNmMl90ZW1wWzZdWzddOwkvKiBTbWFydCBGYW5JSTogVGVtcCBsZXZlbCBwb2ludCAqLworfTsKKworc3RhdGljIHU4IHc4Mzc5M19yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcpOworc3RhdGljIGludCB3ODM3OTNfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZywgdTggdmFsdWUpOworc3RhdGljIGludCB3ODM3OTNfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgdzgzNzkzX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCk7CitzdGF0aWMgaW50IHc4Mzc5M19kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworc3RhdGljIHZvaWQgdzgzNzkzX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworc3RhdGljIHZvaWQgdzgzNzkzX3VwZGF0ZV9ub252b2xhdGlsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIHN0cnVjdCB3ODM3OTNfZGF0YSAqdzgzNzkzX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHc4Mzc5M19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAidzgzNzkzIiwKKwl9LAorCS5hdHRhY2hfYWRhcHRlciA9IHc4Mzc5M19hdHRhY2hfYWRhcHRlciwKKwkuZGV0YWNoX2NsaWVudCA9IHc4Mzc5M19kZXRhY2hfY2xpZW50LAorfTsKKworc3RhdGljIHNzaXplX3QKK3Nob3dfdnJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnZybSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3ZpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gdzgzNzkzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCSAgICB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgaW5kZXggPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmlkX2Zyb21fcmVnKGRhdGEtPnZpZFtpbmRleF0sIGRhdGEtPnZybSkpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdnJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGF0YS0+dnJtID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lIEFMQVJNX1NUQVRVUwkJCTAKKyNkZWZpbmUgQkVFUF9FTkFCTEUJCQkxCitzdGF0aWMgc3NpemVfdAorc2hvd19hbGFybV9iZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSB3ODM3OTNfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJICAgIHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5ucjsKKwlpbnQgaW5kZXggPSBzZW5zb3JfYXR0ci0+aW5kZXggPj4gMzsKKwlpbnQgYml0ID0gc2Vuc29yX2F0dHItPmluZGV4ICYgMHgwNzsKKwl1OCB2YWw7CisKKwlpZiAoQUxBUk1fU1RBVFVTID09IG5yKSB7CisJCXZhbCA9IChkYXRhLT5hbGFybXNbaW5kZXhdID4+IChiaXQpKSAmIDE7CisJfSBlbHNlIHsJCS8qIEJFRVBfRU5BQkxFICovCisJCXZhbCA9IChkYXRhLT5iZWVwc1tpbmRleF0gPj4gKGJpdCkpICYgMTsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX2JlZXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJICAgIHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBpbmRleCA9IHNlbnNvcl9hdHRyLT5pbmRleCA+PiAzOworCWludCBzaGlmdCA9IHNlbnNvcl9hdHRyLT5pbmRleCAmIDB4MDc7CisJdTggYmVlcF9iaXQgPSAxIDw8IHNoaWZ0OworCXU4IHZhbDsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCWlmICh2YWwgIT0gMCAmJiB2YWwgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+YmVlcHNbaW5kZXhdID0gdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0JFRVAoaW5kZXgpKTsKKwlkYXRhLT5iZWVwc1tpbmRleF0gJj0gfmJlZXBfYml0OworCWRhdGEtPmJlZXBzW2luZGV4XSB8PSB2YWwgPDwgc2hpZnQ7CisJdzgzNzkzX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19CRUVQKGluZGV4KSwgZGF0YS0+YmVlcHNbaW5kZXhdKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QKK3Nob3dfYmVlcF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IHc4Mzc5M191cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIChkYXRhLT5iZWVwX2VuYWJsZSA+PiAxKSAmIDB4MDEpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfYmVlcF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXU4IHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCisJaWYgKHZhbCAhPSAwICYmIHZhbCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5iZWVwX2VuYWJsZSA9IHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19PVlRfQkVFUCkKKwkJCSAgICAmIDB4ZmQ7CisJZGF0YS0+YmVlcF9lbmFibGUgfD0gdmFsIDw8IDE7CisJdzgzNzkzX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19PVlRfQkVFUCwgZGF0YS0+YmVlcF9lbmFibGUpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCisvKiBXcml0ZSBhbnkgdmFsdWUgdG8gY2xlYXIgY2hhc3NpcyBhbGFybSAqLworc3RhdGljIHNzaXplX3QKK3N0b3JlX2NoYXNzaXNfY2xlYXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJICAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXU4IHZhbDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwl2YWwgPSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfQ0xSX0NIQVNTSVMpOworCXZhbCB8PSAweDgwOworCXc4Mzc5M193cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfQ0xSX0NIQVNTSVMsIHZhbCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lIEZBTl9JTlBVVAkJCTAKKyNkZWZpbmUgRkFOX01JTgkJCQkxCitzdGF0aWMgc3NpemVfdAorc2hvd19mYW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJICAgIHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5ucjsKKwlpbnQgaW5kZXggPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gdzgzNzkzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1MTYgdmFsOworCisJaWYgKEZBTl9JTlBVVCA9PSBucikgeworCQl2YWwgPSBkYXRhLT5mYW5baW5kZXhdICYgMHgwZmZmOworCX0gZWxzZSB7CisJCXZhbCA9IGRhdGEtPmZhbl9taW5baW5kZXhdICYgMHgwZmZmOworCX0KKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgRkFOX0ZST01fUkVHKHZhbCkpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJICAgIHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBpbmRleCA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXUxNiB2YWwgPSBGQU5fVE9fUkVHKHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApKTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5mYW5fbWluW2luZGV4XSA9IHZhbDsKKwl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0ZBTl9NSU4oaW5kZXgpLAorCQkJICAgKHZhbCA+PiA4KSAmIDB4ZmYpOworCXc4Mzc5M193cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfRkFOX01JTihpbmRleCkgKyAxLCB2YWwgJiAweGZmKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworI2RlZmluZSBQV01fRFVUWQkJCTAKKyNkZWZpbmUgUFdNX1NUQVJUCQkJMQorI2RlZmluZSBQV01fTk9OU1RPUAkJCTIKKyNkZWZpbmUgUFdNX1NUT1BfVElNRQkJCTMKK3N0YXRpYyBzc2l6ZV90CitzaG93X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyID0KKwkgICAgdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gdzgzNzkzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1MTYgdmFsOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5ucjsKKwlpbnQgaW5kZXggPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisKKwlpZiAoUFdNX1NUT1BfVElNRSA9PSBucikKKwkJdmFsID0gVElNRV9GUk9NX1JFRyhkYXRhLT5wd21fc3RvcF90aW1lW2luZGV4XSk7CisJZWxzZQorCQl2YWwgPSAoZGF0YS0+cHdtW2luZGV4XVtucl0gJiAweDNmKSA8PCAyOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV9wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyID0KKwkgICAgdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPm5yOworCWludCBpbmRleCA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwl1OCB2YWw7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJaWYgKFBXTV9TVE9QX1RJTUUgPT0gbnIpIHsKKwkJdmFsID0gVElNRV9UT19SRUcoc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkpOworCQlkYXRhLT5wd21fc3RvcF90aW1lW2luZGV4XSA9IHZhbDsKKwkJdzgzNzkzX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19QV01fU1RPUF9USU1FKGluZGV4KSwKKwkJCQkgICB2YWwpOworCX0gZWxzZSB7CisJCXZhbCA9IFNFTlNPUlNfTElNSVQoc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCksIDAsIDB4ZmYpCisJCSAgICAgID4+IDI7CisJCWRhdGEtPnB3bVtpbmRleF1bbnJdID0KKwkJICAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19QV00oaW5kZXgsIG5yKSkgJiAweGMwOworCQlkYXRhLT5wd21baW5kZXhdW25yXSB8PSB2YWw7CisJCXc4Mzc5M193cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfUFdNKGluZGV4LCBuciksCisJCQkJCQkJZGF0YS0+cHdtW2luZGV4XVtucl0pOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QKK3Nob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyID0KKwkgICAgdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPm5yOworCWludCBpbmRleCA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSB3ODM3OTNfdXBkYXRlX2RldmljZShkZXYpOworCWxvbmcgdGVtcCA9IFRFTVBfRlJPTV9SRUcoZGF0YS0+dGVtcFtpbmRleF1bbnJdKTsKKworCWlmIChURU1QX1JFQUQgPT0gbnIgJiYgaW5kZXggPCA0KSB7CS8qIE9ubHkgVEQxLVRENCBoYXZlIGxvdyBiaXRzICovCisJCWludCBsb3cgPSAoKGRhdGEtPnRlbXBfbG93X2JpdHMgPj4gKGluZGV4ICogMikpICYgMHgwMykgKiAyNTA7CisJCXRlbXAgKz0gdGVtcCA+IDAgPyBsb3cgOiAtbG93OworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHRlbXApOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJICAgIHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5ucjsKKwlpbnQgaW5kZXggPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlsb25nIHRtcCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+dGVtcFtpbmRleF1bbnJdID0gVEVNUF9UT19SRUcodG1wLCAtMTI4LCAxMjcpOworCXc4Mzc5M193cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfVEVNUFtpbmRleF1bbnJdLAorCQkJICAgZGF0YS0+dGVtcFtpbmRleF1bbnJdKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJVEQxLVRENAorCWVhY2ggaGFzIDQgbW9kZTooMiBiaXRzKQorCTA6CVN0b3AgbW9uaXRvcgorCTE6CVVzZSBpbnRlcm5hbCB0ZW1wIHNlbnNvcihkZWZhdWx0KQorCTI6CVJlc2VydmVkCisJMzoJVXNlIHNlbnNvciBpbiBJbnRlbCBDUFUgYW5kIGdldCByZXN1bHQgYnkgUEVDSQorCisJVFIxLVRSMgorCWVhY2ggaGFzIDIgbW9kZTooMSBiaXQpCisJMDoJRGlzYWJsZSB0ZW1wIHNlbnNvciBtb25pdG9yCisJMToJVG8gZW5hYmxlIHRlbXAgc2Vuc29ycyBtb25pdG9yCisqLworCisvKiAwIGRpc2FibGUsIDYgUEVDSSAqLworc3RhdGljIHU4IFRPX1RFTVBfTU9ERVtdID0geyAwLCAwLCAwLCA2IH07CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3RlbXBfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gdzgzNzkzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCSAgICB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgaW5kZXggPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdTggbWFzayA9IChpbmRleCA8IDQpID8gMHgwMyA6IDB4MDE7CisJdTggc2hpZnQgPSAoaW5kZXggPCA0KSA/ICgyICogaW5kZXgpIDogKGluZGV4IC0gNCk7CisJdTggdG1wOworCWluZGV4ID0gKGluZGV4IDwgNCkgPyAwIDogMTsKKworCXRtcCA9IChkYXRhLT50ZW1wX21vZGVbaW5kZXhdID4+IHNoaWZ0KSAmIG1hc2s7CisKKwkvKiBmb3IgdGhlIGludGVybmFsIHNlbnNvciwgZm91bmQgb3V0IGlmIGRpb2RlIG9yIHRoZXJtaXN0b3IgKi8KKwlpZiAodG1wID09IDEpIHsKKwkJdG1wID0gaW5kZXggPT0gMCA/IDMgOiA0OworCX0gZWxzZSB7CisJCXRtcCA9IFRPX1RFTVBfTU9ERVt0bXBdOworCX0KKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0bXApOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGVtcF9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyID0KKwkgICAgdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJaW50IGluZGV4ID0gc2Vuc29yX2F0dHItPmluZGV4OworCXU4IG1hc2sgPSAoaW5kZXggPCA0KSA/IDB4MDMgOiAweDAxOworCXU4IHNoaWZ0ID0gKGluZGV4IDwgNCkgPyAoMiAqIGluZGV4KSA6IChpbmRleCAtIDQpOworCXU4IHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCisJLyogdHJhbnNmb3JtIHRoZSBzeXNmcyBpbnRlcmZhY2UgdmFsdWVzIGludG8gdGFibGUgYWJvdmUgKi8KKwlpZiAoKHZhbCA9PSA2KSAmJiAoaW5kZXggPCA0KSkgeworCQl2YWwgLT0gMzsKKwl9IGVsc2UgaWYgKCh2YWwgPT0gMyAmJiBpbmRleCA8IDQpCisJCXx8ICh2YWwgPT0gNCAmJiBpbmRleCA+PSA0KSkgeworCQkvKiB0cmFuc2Zvcm0gZGlvZGUgb3IgdGhlcm1pc3RvciBpbnRvIGludGVybmFsIGVuYWJsZSAqLworCQl2YWwgPSAhIXZhbDsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpbmRleCA9IChpbmRleCA8IDQpID8gMCA6IDE7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnRlbXBfbW9kZVtpbmRleF0gPQorCSAgICB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfVEVNUF9NT0RFW2luZGV4XSk7CisJZGF0YS0+dGVtcF9tb2RlW2luZGV4XSAmPSB+KG1hc2sgPDwgc2hpZnQpOworCWRhdGEtPnRlbXBfbW9kZVtpbmRleF0gfD0gdmFsIDw8IHNoaWZ0OworCXc4Mzc5M193cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfVEVNUF9NT0RFW2luZGV4XSwKKwkJCQkJCQlkYXRhLT50ZW1wX21vZGVbaW5kZXhdKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworI2RlZmluZSBTRVRVUF9QV01fREVGQVVMVAkJMAorI2RlZmluZSBTRVRVUF9QV01fVVBUSU1FCQkxCS8qIFVuaXQgaW4gMC4xcyAqLworI2RlZmluZSBTRVRVUF9QV01fRE9XTlRJTUUJCTIJLyogVW5pdCBpbiAwLjFzICovCisjZGVmaW5lIFNFVFVQX1RFTVBfQ1JJVElDQUwJCTMKK3N0YXRpYyBzc2l6ZV90CitzaG93X3NmX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCSAgICB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+bnI7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gdzgzNzkzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1MzIgdmFsID0gMDsKKworCWlmIChTRVRVUF9QV01fREVGQVVMVCA9PSBucikgeworCQl2YWwgPSAoZGF0YS0+cHdtX2RlZmF1bHQgJiAweDNmKSA8PCAyOworCX0gZWxzZSBpZiAoU0VUVVBfUFdNX1VQVElNRSA9PSBucikgeworCQl2YWwgPSBUSU1FX0ZST01fUkVHKGRhdGEtPnB3bV91cHRpbWUpOworCX0gZWxzZSBpZiAoU0VUVVBfUFdNX0RPV05USU1FID09IG5yKSB7CisJCXZhbCA9IFRJTUVfRlJPTV9SRUcoZGF0YS0+cHdtX2Rvd250aW1lKTsKKwl9IGVsc2UgaWYgKFNFVFVQX1RFTVBfQ1JJVElDQUwgPT0gbnIpIHsKKwkJdmFsID0gVEVNUF9GUk9NX1JFRyhkYXRhLT50ZW1wX2NyaXRpY2FsICYgMHg3Zik7CisJfQorCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV9zZl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCSAgICB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+bnI7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlpZiAoU0VUVVBfUFdNX0RFRkFVTFQgPT0gbnIpIHsKKwkJZGF0YS0+cHdtX2RlZmF1bHQgPQorCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1BXTV9ERUZBVUxUKSAmIDB4YzA7CisJCWRhdGEtPnB3bV9kZWZhdWx0IHw9IFNFTlNPUlNfTElNSVQoc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLAorCQkJCQkJCQkgIDEwKSwKKwkJCQkJCSAgIDAsIDB4ZmYpID4+IDI7CisJCXc4Mzc5M193cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfUFdNX0RFRkFVTFQsCisJCQkJCQkJZGF0YS0+cHdtX2RlZmF1bHQpOworCX0gZWxzZSBpZiAoU0VUVVBfUFdNX1VQVElNRSA9PSBucikgeworCQlkYXRhLT5wd21fdXB0aW1lID0gVElNRV9UT19SRUcoc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkpOworCQlkYXRhLT5wd21fdXB0aW1lICs9IGRhdGEtPnB3bV91cHRpbWUgPT0gMCA/IDEgOiAwOworCQl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1BXTV9VUFRJTUUsCisJCQkJCQkJZGF0YS0+cHdtX3VwdGltZSk7CisJfSBlbHNlIGlmIChTRVRVUF9QV01fRE9XTlRJTUUgPT0gbnIpIHsKKwkJZGF0YS0+cHdtX2Rvd250aW1lID0gVElNRV9UT19SRUcoc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkpOworCQlkYXRhLT5wd21fZG93bnRpbWUgKz0gZGF0YS0+cHdtX2Rvd250aW1lID09IDAgPyAxIDogMDsKKwkJdzgzNzkzX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19QV01fRE9XTlRJTUUsCisJCQkJCQkJZGF0YS0+cHdtX2Rvd250aW1lKTsKKwl9IGVsc2UgewkJLyogU0VUVVBfVEVNUF9DUklUSUNBTCAqLworCQlkYXRhLT50ZW1wX2NyaXRpY2FsID0KKwkJICAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19URU1QX0NSSVRJQ0FMKSAmIDB4ODA7CisJCWRhdGEtPnRlbXBfY3JpdGljYWwgfD0gVEVNUF9UT19SRUcoc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKSwKKwkJCQkJCSAgIDAsIDB4N2YpOworCQl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1RFTVBfQ1JJVElDQUwsCisJCQkJCQkJZGF0YS0+dGVtcF9jcml0aWNhbCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorCVRlbXAgU21hcnRGYW4gY29udHJvbAorCVRFTVBfRkFOX01BUAorCVRlbXAgY2hhbm5lbCBjb250cm9sIHdoaWNoIHB3bSBmYW4sIGJpdGZpZWxkLCBiaXQgMCBpbmRpY2F0ZSBwd20xLi4uCisJSXQncyBwb3NzaWJsZSB0d28gb3IgbW9yZSB0ZW1wIGNoYW5uZWxzIGNvbnRyb2wgdGhlIHNhbWUgZmFuLCB3ODM3OTMKKwlhbHdheXMgcHJlZmVycyB0byBwaWNrIHRoZSBtb3N0IGNyaXRpY2FsIHJlcXVlc3QgYW5kIGFwcGxpZXMgaXQgdG8KKwl0aGUgcmVsYXRlZCBGYW4uCisJSXQncyBwb3NzaWJsZSBvbmUgZmFuIGlzIG5vdCBpbiBhbnkgbWFwcGluZyBvZiA2IHRlbXAgY2hhbm5lbHMsIHRoaXMKKwltZWFucyB0aGUgZmFuIGlzIG1hbnVhbCBtb2RlCisKKwlURU1QX1BXTV9FTkFCTEUKKwlFYWNoIHRlbXAgY2hhbm5lbCBoYXMgaXRzIG93biBTbWFydEZhbiBtb2RlLCBhbmQgdGVtcCBjaGFubmVsCisJY29udHJvbAlmYW5zIHRoYXQgYXJlIHNldCBieSBURU1QX0ZBTl9NQVAKKwkwOglTbWFydEZhbklJIG1vZGUKKwkxOglUaGVybWFsIENydWlzZSBNb2RlCisKKwlURU1QX0NSVUlTRQorCVRhcmdldCB0ZW1wZXJhdHVyZSBpbiB0aGVybWFsIGNydWlzZSBtb2RlLCB3ODM3OTMgd2lsbCB0cnkgdG8gdHVybgorCWZhbiBzcGVlZCB0byBrZWVwIHRoZSB0ZW1wZXJhdHVyZSBvZiB0YXJnZXQgZGV2aWNlIGFyb3VuZCB0aGlzCisJdGVtcGVyYXR1cmUuCisKKwlURU1QX1RPTEVSQU5DRQorCUlmIFRlbXAgaGlnaGVyIG9yIGxvd2VyIHRoYW4gdGFyZ2V0IHdpdGggdGhpcyB0b2xlcmFuY2UsIHc4Mzc5MworCXdpbGwgdGFrZSBhY3Rpb25zIHRvIHNwZWVkIHVwIG9yIHNsb3cgZG93biB0aGUgZmFuIHRvIGtlZXAgdGhlCisJdGVtcGVyYXR1cmUgd2l0aGluIHRoZSB0b2xlcmFuY2UgcmFuZ2UuCisqLworCisjZGVmaW5lIFRFTVBfRkFOX01BUAkJCTAKKyNkZWZpbmUgVEVNUF9QV01fRU5BQkxFCQkJMQorI2RlZmluZSBURU1QX0NSVUlTRQkJCTIKKyNkZWZpbmUgVEVNUF9UT0xFUkFOQ0UJCQkzCitzdGF0aWMgc3NpemVfdAorc2hvd19zZl9jdHJsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCSAgICB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+bnI7CisJaW50IGluZGV4ID0gc2Vuc29yX2F0dHItPmluZGV4OworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IHc4Mzc5M191cGRhdGVfZGV2aWNlKGRldik7CisJdTMyIHZhbDsKKworCWlmIChURU1QX0ZBTl9NQVAgPT0gbnIpIHsKKwkJdmFsID0gZGF0YS0+dGVtcF9mYW5fbWFwW2luZGV4XTsKKwl9IGVsc2UgaWYgKFRFTVBfUFdNX0VOQUJMRSA9PSBucikgeworCQkvKiArMiB0byB0cmFuc2Zyb20gaW50byAyIGFuZCAzIHRvIGNvbmZvcm0gd2l0aCBzeXNmcyBpbnRmICovCisJCXZhbCA9ICgoZGF0YS0+cHdtX2VuYWJsZSA+PiBpbmRleCkgJiAweDAxKSArIDI7CisJfSBlbHNlIGlmIChURU1QX0NSVUlTRSA9PSBucikgeworCQl2YWwgPSBURU1QX0ZST01fUkVHKGRhdGEtPnRlbXBfY3J1aXNlW2luZGV4XSAmIDB4N2YpOworCX0gZWxzZSB7CQkvKiBURU1QX1RPTEVSQU5DRSAqLworCQl2YWwgPSBkYXRhLT50b2xlcmFuY2VbaW5kZXggPj4gMV0gPj4gKChpbmRleCAmIDB4MDEpID8gNCA6IDApOworCQl2YWwgPSBURU1QX0ZST01fUkVHKHZhbCAmIDB4MGYpOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3NmX2N0cmwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCSAgICB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+bnI7CisJaW50IGluZGV4ID0gc2Vuc29yX2F0dHItPmluZGV4OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTMyIHZhbDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlpZiAoVEVNUF9GQU5fTUFQID09IG5yKSB7CisJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApICYgMHhmZjsKKwkJdzgzNzkzX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19URU1QX0ZBTl9NQVAoaW5kZXgpLCB2YWwpOworCQlkYXRhLT50ZW1wX2Zhbl9tYXBbaW5kZXhdID0gdmFsOworCX0gZWxzZSBpZiAoVEVNUF9QV01fRU5BQkxFID09IG5yKSB7CisJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCQlpZiAoMiA9PSB2YWwgfHwgMyA9PSB2YWwpIHsKKwkJCWRhdGEtPnB3bV9lbmFibGUgPQorCQkJICAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19QV01fRU5BQkxFKTsKKwkJCWlmICh2YWwgLSAyKQorCQkJCWRhdGEtPnB3bV9lbmFibGUgfD0gMSA8PCBpbmRleDsKKwkJCWVsc2UKKwkJCQlkYXRhLT5wd21fZW5hYmxlICY9IH4oMSA8PCBpbmRleCk7CisJCQl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1BXTV9FTkFCTEUsCisJCQkJCQkJZGF0YS0+cHdtX2VuYWJsZSk7CisJCX0gZWxzZSB7CisJCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChURU1QX0NSVUlTRSA9PSBucikgeworCQlkYXRhLT50ZW1wX2NydWlzZVtpbmRleF0gPQorCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1RFTVBfQ1JVSVNFKGluZGV4KSk7CisJCXZhbCA9IFRFTVBfVE9fUkVHKHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCksIDAsIDB4N2YpOworCQlkYXRhLT50ZW1wX2NydWlzZVtpbmRleF0gJj0gMHg4MDsKKwkJZGF0YS0+dGVtcF9jcnVpc2VbaW5kZXhdIHw9IHZhbDsKKworCQl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1RFTVBfQ1JVSVNFKGluZGV4KSwKKwkJCQkJCWRhdGEtPnRlbXBfY3J1aXNlW2luZGV4XSk7CisJfSBlbHNlIHsJCS8qIFRFTVBfVE9MRVJBTkNFICovCisJCWludCBpID0gaW5kZXggPj4gMTsKKwkJdTggc2hpZnQgPSAoaW5kZXggJiAweDAxKSA/IDQgOiAwOworCQlkYXRhLT50b2xlcmFuY2VbaV0gPQorCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1RFTVBfVE9MKGkpKTsKKworCQl2YWwgPSBURU1QX1RPX1JFRyhzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApLCAwLCAweDBmKTsKKwkJZGF0YS0+dG9sZXJhbmNlW2ldICY9IH4oMHgwZiA8PCBzaGlmdCk7CisJCWRhdGEtPnRvbGVyYW5jZVtpXSB8PSB2YWwgPDwgc2hpZnQ7CisJCXc4Mzc5M193cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfVEVNUF9UT0woaSksCisJCQkJCQkJZGF0YS0+dG9sZXJhbmNlW2ldKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3NmMl9wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJICAgIHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5ucjsKKwlpbnQgaW5kZXggPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gdzgzNzkzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoZGF0YS0+c2YyX3B3bVtpbmRleF1bbnJdICYgMHgzZikgPDwgMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV9zZjJfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCSAgICB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+bnI7CisJaW50IGluZGV4ID0gc2Vuc29yX2F0dHItPmluZGV4OworCXU4IHZhbCA9IFNFTlNPUlNfTElNSVQoc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCksIDAsIDB4ZmYpID4+IDI7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+c2YyX3B3bVtpbmRleF1bbnJdID0KKwkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1NGMl9QV00oaW5kZXgsIG5yKSkgJiAweGMwOworCWRhdGEtPnNmMl9wd21baW5kZXhdW25yXSB8PSB2YWw7CisJdzgzNzkzX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19TRjJfUFdNKGluZGV4LCBuciksCisJCQkJCQlkYXRhLT5zZjJfcHdtW2luZGV4XVtucl0pOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QKK3Nob3dfc2YyX3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJICAgIHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5ucjsKKwlpbnQgaW5kZXggPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gdzgzNzkzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwKKwkJICAgICAgIFRFTVBfRlJPTV9SRUcoZGF0YS0+c2YyX3RlbXBbaW5kZXhdW25yXSAmIDB4N2YpKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3NmMl90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyID0KKwkgICAgdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPm5yOworCWludCBpbmRleCA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwl1OCB2YWwgPSBURU1QX1RPX1JFRyhzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApLCAwLCAweDdmKTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5zZjJfdGVtcFtpbmRleF1bbnJdID0KKwkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1NGMl9URU1QKGluZGV4LCBucikpICYgMHg4MDsKKwlkYXRhLT5zZjJfdGVtcFtpbmRleF1bbnJdIHw9IHZhbDsKKwl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1NGMl9URU1QKGluZGV4LCBuciksCisJCQkJCSAgICAgZGF0YS0+c2YyX3RlbXBbaW5kZXhdW25yXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCisvKiBvbmx5IFZjb3JlIEEvQiBhbmQgVnR0IGhhdmUgYWRkaXRpb25hbCAyIGJpdHMgcHJlY2lzaW9uICovCitzdGF0aWMgc3NpemVfdAorc2hvd19pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyID0KKwkgICAgdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPm5yOworCWludCBpbmRleCA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSB3ODM3OTNfdXBkYXRlX2RldmljZShkZXYpOworCXUxNiB2YWwgPSBkYXRhLT5pbltpbmRleF1bbnJdOworCisJaWYgKGluZGV4IDwgMykgeworCQl2YWwgPDw9IDI7CisJCXZhbCArPSAoZGF0YS0+aW5fbG93X2JpdHNbbnJdID4+IChpbmRleCAqIDIpKSAmIDB4MzsKKwl9CisJLyogdm9sdGFnZSBpbnB1dHMgNVZERCBhbmQgNVZTQiBuZWVkcyAxNTBtViBvZmZzZXQgKi8KKwl2YWwgPSB2YWwgKiBzY2FsZV9pbltpbmRleF0gKyBzY2FsZV9pbl9hZGRbaW5kZXhdOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyID0KKwkgICAgdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPm5yOworCWludCBpbmRleCA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXUzMiB2YWw7CisKKwl2YWwgPQorCSAgICAoc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkgKworCSAgICAgc2NhbGVfaW5baW5kZXhdIC8gMikgLyBzY2FsZV9pbltpbmRleF07CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWlmIChpbmRleCA+IDIpIHsKKwkJLyogZml4IHRoZSBsaW1pdCB2YWx1ZXMgb2YgNVZERCBhbmQgNVZTQiB0byBBTEFSTSBtZWNoYW5pc20gKi8KKwkJaWYgKDEgPT0gbnIgfHwgMiA9PSBucikgeworCQkJdmFsIC09IHNjYWxlX2luX2FkZFtpbmRleF0gLyBzY2FsZV9pbltpbmRleF07CisJCX0KKwkJdmFsID0gU0VOU09SU19MSU1JVCh2YWwsIDAsIDI1NSk7CisJfSBlbHNlIHsKKwkJdmFsID0gU0VOU09SU19MSU1JVCh2YWwsIDAsIDB4M0ZGKTsKKwkJZGF0YS0+aW5fbG93X2JpdHNbbnJdID0KKwkJICAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19JTl9MT1dfQklUU1tucl0pOworCQlkYXRhLT5pbl9sb3dfYml0c1tucl0gJj0gfigweDAzIDw8ICgyICogaW5kZXgpKTsKKwkJZGF0YS0+aW5fbG93X2JpdHNbbnJdIHw9ICh2YWwgJiAweDAzKSA8PCAoMiAqIGluZGV4KTsKKwkJdzgzNzkzX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19JTl9MT1dfQklUU1tucl0sCisJCQkJCQkgICAgIGRhdGEtPmluX2xvd19iaXRzW25yXSk7CisJCXZhbCA+Pj0gMjsKKwl9CisJZGF0YS0+aW5baW5kZXhdW25yXSA9IHZhbDsKKwl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0lOW2luZGV4XVtucl0sCisJCQkJCQkJZGF0YS0+aW5baW5kZXhdW25yXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lIE5PVF9VU0VECQkJLTEKKworI2RlZmluZSBTRU5TT1JfQVRUUl9JTihpbmRleCkJCQkJCQlcCisJU0VOU09SX0FUVFJfMihpbiMjaW5kZXgjI19pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwJXAorCQlJTl9SRUFELCBpbmRleCksCQkJCQlcCisJU0VOU09SX0FUVFJfMihpbiMjaW5kZXgjI19tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2luLAlcCisJCXN0b3JlX2luLCBJTl9NQVgsIGluZGV4KSwJCQkJXAorCVNFTlNPUl9BVFRSXzIoaW4jI2luZGV4IyNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19pbiwJXAorCQlzdG9yZV9pbiwgSU5fTE9XLCBpbmRleCksCQkJCVwKKwlTRU5TT1JfQVRUUl8yKGluIyNpbmRleCMjX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtX2JlZXAsCVwKKwkJTlVMTCwgQUxBUk1fU1RBVFVTLCBpbmRleCArICgoaW5kZXggPiAyKSA/IDEgOiAwKSksCVwKKwlTRU5TT1JfQVRUUl8yKGluIyNpbmRleCMjX2JlZXAsIFNfSVdVU1IgfCBTX0lSVUdPLAkJXAorCQlzaG93X2FsYXJtX2JlZXAsIHN0b3JlX2JlZXAsIEJFRVBfRU5BQkxFLAkJXAorCQlpbmRleCArICgoaW5kZXggPiAyKSA/IDEgOiAwKSkKKworI2RlZmluZSBTRU5TT1JfQVRUUl9GQU4oaW5kZXgpCQkJCQkJXAorCVNFTlNPUl9BVFRSXzIoZmFuIyNpbmRleCMjX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtX2JlZXAsCVwKKwkJTlVMTCwgQUxBUk1fU1RBVFVTLCBpbmRleCArIDE3KSwJCQlcCisJU0VOU09SX0FUVFJfMihmYW4jI2luZGV4IyNfYmVlcCwgU19JV1VTUiB8IFNfSVJVR08sCQlcCisJCXNob3dfYWxhcm1fYmVlcCwgc3RvcmVfYmVlcCwgQkVFUF9FTkFCTEUsIGluZGV4ICsgMTcpLAlcCisJU0VOU09SX0FUVFJfMihmYW4jI2luZGV4IyNfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLAkJXAorCQlOVUxMLCBGQU5fSU5QVVQsIGluZGV4IC0gMSksCQkJCVwKKwlTRU5TT1JfQVRUUl8yKGZhbiMjaW5kZXgjI19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAkJXAorCQlzaG93X2Zhbiwgc3RvcmVfZmFuX21pbiwgRkFOX01JTiwgaW5kZXggLSAxKQorCisjZGVmaW5lIFNFTlNPUl9BVFRSX1BXTShpbmRleCkJCQkJCQlcCisJU0VOU09SX0FUVFJfMihwd20jI2luZGV4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20sCQlcCisJCXN0b3JlX3B3bSwgUFdNX0RVVFksIGluZGV4IC0gMSksCQkJXAorCVNFTlNPUl9BVFRSXzIocHdtIyNpbmRleCMjX25vbnN0b3AsIFNfSVdVU1IgfCBTX0lSVUdPLAkJXAorCQlzaG93X3B3bSwgc3RvcmVfcHdtLCBQV01fTk9OU1RPUCwgaW5kZXggLSAxKSwJCVwKKwlTRU5TT1JfQVRUUl8yKHB3bSMjaW5kZXgjI19zdGFydCwgU19JV1VTUiB8IFNfSVJVR08sCQlcCisJCXNob3dfcHdtLCBzdG9yZV9wd20sIFBXTV9TVEFSVCwgaW5kZXggLSAxKSwJCVwKKwlTRU5TT1JfQVRUUl8yKHB3bSMjaW5kZXgjI19zdG9wX3RpbWUsIFNfSVdVU1IgfCBTX0lSVUdPLAlcCisJCXNob3dfcHdtLCBzdG9yZV9wd20sIFBXTV9TVE9QX1RJTUUsIGluZGV4IC0gMSkKKworI2RlZmluZSBTRU5TT1JfQVRUUl9URU1QKGluZGV4KQkJCQkJCVwKKwlTRU5TT1JfQVRUUl8yKHRlbXAjI2luZGV4IyNfdHlwZSwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCisJCXNob3dfdGVtcF9tb2RlLCBzdG9yZV90ZW1wX21vZGUsIE5PVF9VU0VELCBpbmRleCAtIDEpLAlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsCQlcCisJCU5VTEwsIFRFTVBfUkVBRCwgaW5kZXggLSAxKSwJCQkJXAorCVNFTlNPUl9BVFRSXzIodGVtcCMjaW5kZXgjI19tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAsCVwKKwkJc3RvcmVfdGVtcCwgVEVNUF9DUklULCBpbmRleCAtIDEpLAkJCVwKKwlTRU5TT1JfQVRUUl8yKHRlbXAjI2luZGV4IyNfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLAlcCisJCXNob3dfdGVtcCwgc3RvcmVfdGVtcCwgVEVNUF9DUklUX0hZU1QsIGluZGV4IC0gMSksCVwKKwlTRU5TT1JfQVRUUl8yKHRlbXAjI2luZGV4IyNfd2FybiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcCwJXAorCQlzdG9yZV90ZW1wLCBURU1QX1dBUk4sIGluZGV4IC0gMSksCQkJXAorCVNFTlNPUl9BVFRSXzIodGVtcCMjaW5kZXgjI193YXJuX2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLAlcCisJCXNob3dfdGVtcCwgc3RvcmVfdGVtcCwgVEVNUF9XQVJOX0hZU1QsIGluZGV4IC0gMSksCVwKKwlTRU5TT1JfQVRUUl8yKHRlbXAjI2luZGV4IyNfYWxhcm0sIFNfSVJVR08sCQkJXAorCQlzaG93X2FsYXJtX2JlZXAsIE5VTEwsIEFMQVJNX1NUQVRVUywgaW5kZXggKyAxMSksCVwKKwlTRU5TT1JfQVRUUl8yKHRlbXAjI2luZGV4IyNfYmVlcCwgU19JV1VTUiB8IFNfSVJVR08sCQlcCisJCXNob3dfYWxhcm1fYmVlcCwgc3RvcmVfYmVlcCwgQkVFUF9FTkFCTEUsIGluZGV4ICsgMTEpLAlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2F1dG9fY2hhbm5lbHNfcHdtLAkJCVwKKwkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfc2ZfY3RybCwgc3RvcmVfc2ZfY3RybCwJCVwKKwkJVEVNUF9GQU5fTUFQLCBpbmRleCAtIDEpLAkJCQlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX3B3bV9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLAlcCisJCXNob3dfc2ZfY3RybCwgc3RvcmVfc2ZfY3RybCwgVEVNUF9QV01fRU5BQkxFLAkJXAorCQlpbmRleCAtIDEpLAkJCQkJCVwKKwlTRU5TT1JfQVRUUl8yKHRoZXJtYWxfY3J1aXNlIyNpbmRleCwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCisJCXNob3dfc2ZfY3RybCwgc3RvcmVfc2ZfY3RybCwgVEVNUF9DUlVJU0UsIGluZGV4IC0gMSksCVwKKwlTRU5TT1JfQVRUUl8yKHRvbGVyYW5jZSMjaW5kZXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3NmX2N0cmwsXAorCQlzdG9yZV9zZl9jdHJsLCBURU1QX1RPTEVSQU5DRSwgaW5kZXggLSAxKSwJCVwKKwlTRU5TT1JfQVRUUl8yKHRlbXAjI2luZGV4IyNfYXV0b19wb2ludDFfcHdtLCBTX0lSVUdPIHwgU19JV1VTUiwgXAorCQlzaG93X3NmMl9wd20sIHN0b3JlX3NmMl9wd20sIDAsIGluZGV4IC0gMSksCQlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2F1dG9fcG9pbnQyX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwkJc2hvd19zZjJfcHdtLCBzdG9yZV9zZjJfcHdtLCAxLCBpbmRleCAtIDEpLAkJXAorCVNFTlNPUl9BVFRSXzIodGVtcCMjaW5kZXgjI19hdXRvX3BvaW50M19wd20sIFNfSVJVR08gfCBTX0lXVVNSLCBcCisJCXNob3dfc2YyX3B3bSwgc3RvcmVfc2YyX3B3bSwgMiwgaW5kZXggLSAxKSwJCVwKKwlTRU5TT1JfQVRUUl8yKHRlbXAjI2luZGV4IyNfYXV0b19wb2ludDRfcHdtLCBTX0lSVUdPIHwgU19JV1VTUiwgXAorCQlzaG93X3NmMl9wd20sIHN0b3JlX3NmMl9wd20sIDMsIGluZGV4IC0gMSksCQlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2F1dG9fcG9pbnQ1X3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwkJc2hvd19zZjJfcHdtLCBzdG9yZV9zZjJfcHdtLCA0LCBpbmRleCAtIDEpLAkJXAorCVNFTlNPUl9BVFRSXzIodGVtcCMjaW5kZXgjI19hdXRvX3BvaW50Nl9wd20sIFNfSVJVR08gfCBTX0lXVVNSLCBcCisJCXNob3dfc2YyX3B3bSwgc3RvcmVfc2YyX3B3bSwgNSwgaW5kZXggLSAxKSwJCVwKKwlTRU5TT1JfQVRUUl8yKHRlbXAjI2luZGV4IyNfYXV0b19wb2ludDdfcHdtLCBTX0lSVUdPIHwgU19JV1VTUiwgXAorCQlzaG93X3NmMl9wd20sIHN0b3JlX3NmMl9wd20sIDYsIGluZGV4IC0gMSksCQlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2F1dG9fcG9pbnQxX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLFwKKwkJc2hvd19zZjJfdGVtcCwgc3RvcmVfc2YyX3RlbXAsIDAsIGluZGV4IC0gMSksCQlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2F1dG9fcG9pbnQyX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLFwKKwkJc2hvd19zZjJfdGVtcCwgc3RvcmVfc2YyX3RlbXAsIDEsIGluZGV4IC0gMSksCQlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2F1dG9fcG9pbnQzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLFwKKwkJc2hvd19zZjJfdGVtcCwgc3RvcmVfc2YyX3RlbXAsIDIsIGluZGV4IC0gMSksCQlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2F1dG9fcG9pbnQ0X3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLFwKKwkJc2hvd19zZjJfdGVtcCwgc3RvcmVfc2YyX3RlbXAsIDMsIGluZGV4IC0gMSksCQlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2F1dG9fcG9pbnQ1X3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLFwKKwkJc2hvd19zZjJfdGVtcCwgc3RvcmVfc2YyX3RlbXAsIDQsIGluZGV4IC0gMSksCQlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2F1dG9fcG9pbnQ2X3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLFwKKwkJc2hvd19zZjJfdGVtcCwgc3RvcmVfc2YyX3RlbXAsIDUsIGluZGV4IC0gMSksCQlcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpbmRleCMjX2F1dG9fcG9pbnQ3X3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLFwKKwkJc2hvd19zZjJfdGVtcCwgc3RvcmVfc2YyX3RlbXAsIDYsIGluZGV4IC0gMSkKKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHc4Mzc5M19zZW5zb3JfYXR0cl8yW10gPSB7CisJU0VOU09SX0FUVFJfSU4oMCksCisJU0VOU09SX0FUVFJfSU4oMSksCisJU0VOU09SX0FUVFJfSU4oMiksCisJU0VOU09SX0FUVFJfSU4oMyksCisJU0VOU09SX0FUVFJfSU4oNCksCisJU0VOU09SX0FUVFJfSU4oNSksCisJU0VOU09SX0FUVFJfSU4oNiksCisJU0VOU09SX0FUVFJfSU4oNyksCisJU0VOU09SX0FUVFJfSU4oOCksCisJU0VOU09SX0FUVFJfSU4oOSksCisJU0VOU09SX0FUVFJfRkFOKDEpLAorCVNFTlNPUl9BVFRSX0ZBTigyKSwKKwlTRU5TT1JfQVRUUl9GQU4oMyksCisJU0VOU09SX0FUVFJfRkFOKDQpLAorCVNFTlNPUl9BVFRSX0ZBTig1KSwKKwlTRU5TT1JfQVRUUl9QV00oMSksCisJU0VOU09SX0FUVFJfUFdNKDIpLAorCVNFTlNPUl9BVFRSX1BXTSgzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiB3ODM3OTNfdGVtcFtdID0geworCVNFTlNPUl9BVFRSX1RFTVAoMSksCisJU0VOU09SX0FUVFJfVEVNUCgyKSwKKwlTRU5TT1JfQVRUUl9URU1QKDMpLAorCVNFTlNPUl9BVFRSX1RFTVAoNCksCisJU0VOU09SX0FUVFJfVEVNUCg1KSwKKwlTRU5TT1JfQVRUUl9URU1QKDYpLAorfTsKKworLyogRmFuNi1GYW4xMiAqLworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHc4Mzc5M19sZWZ0X2ZhbltdID0geworCVNFTlNPUl9BVFRSX0ZBTig2KSwKKwlTRU5TT1JfQVRUUl9GQU4oNyksCisJU0VOU09SX0FUVFJfRkFOKDgpLAorCVNFTlNPUl9BVFRSX0ZBTig5KSwKKwlTRU5TT1JfQVRUUl9GQU4oMTApLAorCVNFTlNPUl9BVFRSX0ZBTigxMSksCisJU0VOU09SX0FUVFJfRkFOKDEyKSwKK307CisKKy8qIFB3bTQtUHdtOCAqLworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHc4Mzc5M19sZWZ0X3B3bVtdID0geworCVNFTlNPUl9BVFRSX1BXTSg0KSwKKwlTRU5TT1JfQVRUUl9QV00oNSksCisJU0VOU09SX0FUVFJfUFdNKDYpLAorCVNFTlNPUl9BVFRSX1BXTSg3KSwKKwlTRU5TT1JfQVRUUl9QV00oOCksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgdzgzNzkzX3ZpZFtdID0geworCVNFTlNPUl9BVFRSXzIoY3B1MF92aWQsIFNfSVJVR08sIHNob3dfdmlkLCBOVUxMLCBOT1RfVVNFRCwgMCksCisJU0VOU09SX0FUVFJfMihjcHUxX3ZpZCwgU19JUlVHTywgc2hvd192aWQsIE5VTEwsIE5PVF9VU0VELCAxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiBzZGFfc2luZ2xlX2ZpbGVzW10gPSB7CisJU0VOU09SX0FUVFJfMih2cm0sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3ZybSwgc3RvcmVfdnJtLAorCQkgICAgICBOT1RfVVNFRCwgTk9UX1VTRUQpLAorCVNFTlNPUl9BVFRSXzIoY2hhc3NpcywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfYWxhcm1fYmVlcCwKKwkJICAgICAgc3RvcmVfY2hhc3Npc19jbGVhciwgQUxBUk1fU1RBVFVTLCAzMCksCisJU0VOU09SX0FUVFJfMihiZWVwX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfYmVlcF9lbmFibGUsCisJCSAgICAgIHN0b3JlX2JlZXBfZW5hYmxlLCBOT1RfVVNFRCwgTk9UX1VTRUQpLAorCVNFTlNPUl9BVFRSXzIocHdtX2RlZmF1bHQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3NmX3NldHVwLAorCQkgICAgICBzdG9yZV9zZl9zZXR1cCwgU0VUVVBfUFdNX0RFRkFVTFQsIE5PVF9VU0VEKSwKKwlTRU5TT1JfQVRUUl8yKHB3bV91cHRpbWUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3NmX3NldHVwLAorCQkgICAgICBzdG9yZV9zZl9zZXR1cCwgU0VUVVBfUFdNX1VQVElNRSwgTk9UX1VTRUQpLAorCVNFTlNPUl9BVFRSXzIocHdtX2Rvd250aW1lLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19zZl9zZXR1cCwKKwkJICAgICAgc3RvcmVfc2Zfc2V0dXAsIFNFVFVQX1BXTV9ET1dOVElNRSwgTk9UX1VTRUQpLAorCVNFTlNPUl9BVFRSXzIodGVtcF9jcml0aWNhbCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfc2Zfc2V0dXAsCisJCSAgICAgIHN0b3JlX3NmX3NldHVwLCBTRVRVUF9URU1QX0NSSVRJQ0FMLCBOT1RfVVNFRCksCit9OworCitzdGF0aWMgdm9pZCB3ODM3OTNfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpZiAocmVzZXQpIHsKKwkJdzgzNzkzX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19DT05GSUcsIDB4ODApOworCX0KKworCS8qIFN0YXJ0IG1vbml0b3JpbmcgKi8KKwl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0NPTkZJRywKKwkJCSAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19DT05GSUcpIHwgMHgwMSk7CisKK30KKworc3RhdGljIGludCB3ODM3OTNfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmICghKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX0hXTU9OKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCB3ODM3OTNfZGV0ZWN0KTsKK30KKworc3RhdGljIGludCB3ODM3OTNfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKwlpbnQgZXJyLCBpOworCisJLyogbWFpbiBjbGllbnQgKi8KKwlpZiAoZGF0YSkgeworCQlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHc4Mzc5M19zZW5zb3JfYXR0cl8yKTsgaSsrKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwKKwkJCQkJICAgJnc4Mzc5M19zZW5zb3JfYXR0cl8yW2ldLmRldl9hdHRyKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2luZ2xlX2ZpbGVzKTsgaSsrKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9zaW5nbGVfZmlsZXNbaV0uZGV2X2F0dHIpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHc4Mzc5M192aWQpOyBpKyspCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmdzgzNzkzX3ZpZFtpXS5kZXZfYXR0cik7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodzgzNzkzX2xlZnRfZmFuKTsgaSsrKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnc4Mzc5M19sZWZ0X2ZhbltpXS5kZXZfYXR0cik7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodzgzNzkzX2xlZnRfcHdtKTsgaSsrKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnc4Mzc5M19sZWZ0X3B3bVtpXS5kZXZfYXR0cik7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodzgzNzkzX3RlbXApOyBpKyspCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmdzgzNzkzX3RlbXBbaV0uZGV2X2F0dHIpOworCX0KKworCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCisJCXJldHVybiBlcnI7CisKKwkvKiBtYWluIGNsaWVudCAqLworCWlmIChkYXRhKQorCQlrZnJlZShkYXRhKTsKKwkvKiBzdWJjbGllbnQgKi8KKwllbHNlCisJCWtmcmVlKGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordzgzNzkzX2NyZWF0ZV9zdWJjbGllbnQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGFkZHIsCisJCQlzdHJ1Y3QgaTJjX2NsaWVudCAqKnN1Yl9jbGkpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGkyY19jbGllbnQgKnN1Yl9jbGllbnQ7CisKKwkoKnN1Yl9jbGkpID0gc3ViX2NsaWVudCA9CisJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCEoc3ViX2NsaWVudCkpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXN1Yl9jbGllbnQtPmFkZHIgPSAweDQ4ICsgYWRkcjsKKwlpMmNfc2V0X2NsaWVudGRhdGEoc3ViX2NsaWVudCwgTlVMTCk7CisJc3ViX2NsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJc3ViX2NsaWVudC0+ZHJpdmVyID0gJnc4Mzc5M19kcml2ZXI7CisJc3RybGNweShzdWJfY2xpZW50LT5uYW1lLCAidzgzNzkzIHN1YmNsaWVudCIsIEkyQ19OQU1FX1NJWkUpOworCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoc3ViX2NsaWVudCkpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAic3ViY2xpZW50IHJlZ2lzdHJhdGlvbiAiCisJCQkiYXQgYWRkcmVzcyAweCV4IGZhaWxlZFxuIiwgc3ViX2NsaWVudC0+YWRkcik7CisJCWtmcmVlKHN1Yl9jbGllbnQpOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50Cit3ODM3OTNfZGV0ZWN0X3N1YmNsaWVudHMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywKKwkJCSBpbnQga2luZCwgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgaSwgaWQsIGVycjsKKwl1OCB0bXA7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZCA9IGkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpOworCWlmIChmb3JjZV9zdWJjbGllbnRzWzBdID09IGlkICYmIGZvcmNlX3N1YmNsaWVudHNbMV0gPT0gYWRkcmVzcykgeworCQlmb3IgKGkgPSAyOyBpIDw9IDM7IGkrKykgeworCQkJaWYgKGZvcmNlX3N1YmNsaWVudHNbaV0gPCAweDQ4CisJCQkgICAgfHwgZm9yY2Vfc3ViY2xpZW50c1tpXSA+IDB4NGYpIHsKKwkJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkJImludmFsaWQgc3ViY2xpZW50ICIKKwkJCQkJImFkZHJlc3MgJWQ7IG11c3QgYmUgMHg0OC0weDRmXG4iLAorCQkJCQlmb3JjZV9zdWJjbGllbnRzW2ldKTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gRVJST1JfU0NfMDsKKwkJCX0KKwkJfQorCQl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0kyQ19TVUJBRERSLAorCQkJCSAgIChmb3JjZV9zdWJjbGllbnRzWzJdICYgMHgwNykgfAorCQkJCSAgICgoZm9yY2Vfc3ViY2xpZW50c1szXSAmIDB4MDcpIDw8IDQpKTsKKwl9CisKKwl0bXAgPSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfSTJDX1NVQkFERFIpOworCWlmICghKHRtcCAmIDB4MDgpKSB7CisJCWVyciA9CisJCSAgICB3ODM3OTNfY3JlYXRlX3N1YmNsaWVudChhZGFwdGVyLCBjbGllbnQsIHRtcCAmIDB4NywKKwkJCQkJICAgICZkYXRhLT5sbTc1WzBdKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIEVSUk9SX1NDXzA7CisJfQorCWlmICghKHRtcCAmIDB4ODApKSB7CisJCWlmICgoZGF0YS0+bG03NVswXSAhPSBOVUxMKQorCQkgICAgJiYgKCh0bXAgJiAweDcpID09ICgodG1wID4+IDQpICYgMHg3KSkpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCSJkdXBsaWNhdGUgYWRkcmVzc2VzIDB4JXgsICIKKwkJCQkidXNlIGZvcmNlX3N1YmNsaWVudHNcbiIsIGRhdGEtPmxtNzVbMF0tPmFkZHIpOworCQkJZXJyID0gLUVOT0RFVjsKKwkJCWdvdG8gRVJST1JfU0NfMTsKKwkJfQorCQllcnIgPSB3ODM3OTNfY3JlYXRlX3N1YmNsaWVudChhZGFwdGVyLCBjbGllbnQsCisJCQkJCSAgICAgICh0bXAgPj4gNCkgJiAweDcsICZkYXRhLT5sbTc1WzFdKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIEVSUk9SX1NDXzE7CisJfQorCisJcmV0dXJuIDA7CisKKwkvKiBVbmRvIGluaXRzIGluIGNhc2Ugb2YgZXJyb3JzICovCisKK0VSUk9SX1NDXzE6CisJaWYgKGRhdGEtPmxtNzVbMF0gIT0gTlVMTCkgeworCQlpMmNfZGV0YWNoX2NsaWVudChkYXRhLT5sbTc1WzBdKTsKKwkJa2ZyZWUoZGF0YS0+bG03NVswXSk7CisJfQorRVJST1JfU0NfMDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHc4Mzc5M19kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit7CisJaW50IGk7CisJdTggdG1wLCB2YWw7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhOworCWludCBmaWxlc19mYW4gPSBBUlJBWV9TSVpFKHc4Mzc5M19sZWZ0X2ZhbikgLyA3OworCWludCBmaWxlc19wd20gPSBBUlJBWV9TSVpFKHc4Mzc5M19sZWZ0X3B3bSkgLyA1OworCWludCBmaWxlc190ZW1wID0gQVJSQVlfU0laRSh3ODM3OTNfdGVtcCkgLyA2OworCWludCBlcnIgPSAwOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBPSy4gRm9yIG5vdywgd2UgcHJlc3VtZSB3ZSBoYXZlIGEgdmFsaWQgY2xpZW50LiBXZSBub3cgY3JlYXRlIHRoZQorCSAgIGNsaWVudCBzdHJ1Y3R1cmUsIGV2ZW4gdGhvdWdoIHdlIGNhbm5vdCBmaWxsIGl0IGNvbXBsZXRlbHkgeWV0LgorCSAgIEJ1dCBpdCBhbGxvd3MgdXMgdG8gYWNjZXNzIHc4Mzc5M197cmVhZCx3cml0ZX1fdmFsdWUuICovCisKKwlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHc4Mzc5M19kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwljbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCWRldiA9ICZjbGllbnQtPmRldjsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwljbGllbnQtPmFkZHIgPSBhZGRyZXNzOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5kcml2ZXIgPSAmdzgzNzkzX2RyaXZlcjsKKworCWRhdGEtPmJhbmsgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBXODM3OTNfUkVHX0JBTktTRUwpOworCisJLyogTm93LCB3ZSBkbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbi4gKi8KKwlpZiAoa2luZCA8IDApIHsKKwkJdG1wID0gZGF0YS0+YmFuayAmIDB4ODAgPyAweDVjIDogMHhhMzsKKwkJLyogQ2hlY2sgV2luYm9uZCB2ZW5kb3IgSUQgKi8KKwkJaWYgKHRtcCAhPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJCVc4Mzc5M19SRUdfVkVORE9SSUQpKSB7CisJCQlwcl9kZWJ1ZygidzgzNzkzOiBEZXRlY3Rpb24gZmFpbGVkIGF0IGNoZWNrICIKKwkJCQkgInZlbmRvciBpZFxuIik7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBmcmVlX21lbTsKKwkJfQorCisJCS8qIElmIFdpbmJvbmQgY2hpcCwgYWRkcmVzcyBvZiBjaGlwIGFuZCBXODM3OTNfUkVHX0kyQ19BRERSCisJCSAgIHNob3VsZCBtYXRjaCAqLworCQlpZiAoKGRhdGEtPmJhbmsgJiAweDA3KSA9PSAwCisJCSAmJiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBXODM3OTNfUkVHX0kyQ19BRERSKSAhPQorCQkgICAgKGFkZHJlc3MgPDwgMSkpIHsKKwkJCXByX2RlYnVnKCJ3ODM3OTM6IERldGVjdGlvbiBmYWlsZWQgYXQgY2hlY2sgIgorCQkJCSAiaTJjIGFkZHJcbiIpOworCQkJZXJyID0gLUVOT0RFVjsKKwkJCWdvdG8gZnJlZV9tZW07CisJCX0KKworCX0KKworCS8qIFdlIGhhdmUgZWl0aGVyIGhhZCBhIGZvcmNlIHBhcmFtZXRlciwgb3Igd2UgaGF2ZSBhbHJlYWR5IGRldGVjdGVkIHRoZQorCSAgIFdpbmJvbmQuIERldGVybWluZSB0aGUgY2hpcCB0eXBlIG5vdyAqLworCisJaWYgKGtpbmQgPD0gMCkgeworCQlpZiAoMHg3YiA9PSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfQ0hJUElEKSkgeworCQkJa2luZCA9IHc4Mzc5MzsKKwkJfSBlbHNlIHsKKwkJCWlmIChraW5kID09IDApCisJCQkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwgInc4Mzc5MzogSWdub3JpbmcgIgorCQkJCQkgIidmb3JjZScgcGFyYW1ldGVyIGZvciB1bmtub3duIGNoaXAgIgorCQkJCQkgImF0IGFkZHJlc3MgMHglMDJ4XG4iLCBhZGRyZXNzKTsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIGZyZWVfbWVtOworCQl9CisJfQorCisJLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgYW5kIHB1dCBpbnRvIHRoZSBnbG9iYWwgbGlzdCAqLworCXN0cmxjcHkoY2xpZW50LT5uYW1lLCAidzgzNzkzIiwgSTJDX05BTUVfU0laRSk7CisKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCisJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSkKKwkJZ290byBmcmVlX21lbTsKKworCWlmICgoZXJyID0gdzgzNzkzX2RldGVjdF9zdWJjbGllbnRzKGFkYXB0ZXIsIGFkZHJlc3MsIGtpbmQsIGNsaWVudCkpKQorCQlnb3RvIGRldGFjaF9jbGllbnQ7CisKKwkvKiBJbml0aWFsaXplIHRoZSBjaGlwICovCisJdzgzNzkzX2luaXRfY2xpZW50KGNsaWVudCk7CisKKwlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7CisJLyoKKwkgICBPbmx5IGZhbiAxLTUgaGFzIHRoZWlyIG93biBpbnB1dCBwaW5zLAorCSAgIFB3bSAxLTMgaGFzIHRoZWlyIG93biBwaW5zCisJICovCisJZGF0YS0+aGFzX2ZhbiA9IDB4MWY7CisJZGF0YS0+aGFzX3B3bSA9IDB4MDc7CisJdG1wID0gdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX01GQyk7CisJdmFsID0gdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0ZBTklOX0NUUkwpOworCisJLyogY2hlY2sgdGhlIGZ1bmN0aW9uIG9mIHBpbnMgNDktNTYgKi8KKwlpZiAoISh0bXAgJiAweDgwKSkgeworCQlkYXRhLT5oYXNfcHdtIHw9IDB4MTg7CS8qIHB3bSA0LDUgKi8KKwkJaWYgKHZhbCAmIDB4MDEpIHsJLyogZmFuIDYgKi8KKwkJCWRhdGEtPmhhc19mYW4gfD0gMHgyMDsKKwkJCWRhdGEtPmhhc19wd20gfD0gMHgyMDsKKwkJfQorCQlpZiAodmFsICYgMHgwMikgewkvKiBmYW4gNyAqLworCQkJZGF0YS0+aGFzX2ZhbiB8PSAweDQwOworCQkJZGF0YS0+aGFzX3B3bSB8PSAweDQwOworCQl9CisJCWlmICghKHRtcCAmIDB4NDApICYmICh2YWwgJiAweDA0KSkgewkvKiBmYW4gOCAqLworCQkJZGF0YS0+aGFzX2ZhbiB8PSAweDgwOworCQkJZGF0YS0+aGFzX3B3bSB8PSAweDgwOworCQl9CisJfQorCisJaWYgKDB4MDggPT0gKHRtcCAmIDB4MGMpKSB7CisJCWlmICh2YWwgJiAweDA4KQkvKiBmYW4gOSAqLworCQkJZGF0YS0+aGFzX2ZhbiB8PSAweDEwMDsKKwkJaWYgKHZhbCAmIDB4MTApCS8qIGZhbiAxMCAqLworCQkJZGF0YS0+aGFzX2ZhbiB8PSAweDIwMDsKKwl9CisKKwlpZiAoMHgyMCA9PSAodG1wICYgMHgzMCkpIHsKKwkJaWYgKHZhbCAmIDB4MjApCS8qIGZhbiAxMSAqLworCQkJZGF0YS0+aGFzX2ZhbiB8PSAweDQwMDsKKwkJaWYgKHZhbCAmIDB4NDApCS8qIGZhbiAxMiAqLworCQkJZGF0YS0+aGFzX2ZhbiB8PSAweDgwMDsKKwl9CisKKwlpZiAoKHRtcCAmIDB4MDEpICYmICh2YWwgJiAweDA0KSkgewkvKiBmYW4gOCwgc2Vjb25kIGxvY2F0aW9uICovCisJCWRhdGEtPmhhc19mYW4gfD0gMHg4MDsKKwkJZGF0YS0+aGFzX3B3bSB8PSAweDgwOworCX0KKworCXRtcCA9IHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19GQU5JTl9TRUwpOworCWlmICgodG1wICYgMHgwMSkgJiYgKHZhbCAmIDB4MDgpKSB7CS8qIGZhbiA5LCBzZWNvbmQgbG9jYXRpb24gKi8KKwkJZGF0YS0+aGFzX2ZhbiB8PSAweDEwMDsKKwl9CisJaWYgKCh0bXAgJiAweDAyKSAmJiAodmFsICYgMHgxMCkpIHsJLyogZmFuIDEwLCBzZWNvbmQgbG9jYXRpb24gKi8KKwkJZGF0YS0+aGFzX2ZhbiB8PSAweDIwMDsKKwl9CisJaWYgKCh0bXAgJiAweDA0KSAmJiAodmFsICYgMHgyMCkpIHsJLyogZmFuIDExLCBzZWNvbmQgbG9jYXRpb24gKi8KKwkJZGF0YS0+aGFzX2ZhbiB8PSAweDQwMDsKKwl9CisJaWYgKCh0bXAgJiAweDA4KSAmJiAodmFsICYgMHg0MCkpIHsJLyogZmFuIDEyLCBzZWNvbmQgbG9jYXRpb24gKi8KKwkJZGF0YS0+aGFzX2ZhbiB8PSAweDgwMDsKKwl9CisKKwkvKiBjaGVjayB0aGUgdGVtcDEtNiBtb2RlLCBpZ25vcmUgZm9ybWVyIEFNRFNJIHNlbGVjdGVkIGlucHV0cyAqLworCXRtcCA9IHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCxXODM3OTNfUkVHX1RFTVBfTU9ERVswXSk7CisJaWYgKHRtcCAmIDB4MDEpCisJCWRhdGEtPmhhc190ZW1wIHw9IDB4MDE7CisJaWYgKHRtcCAmIDB4MDQpCisJCWRhdGEtPmhhc190ZW1wIHw9IDB4MDI7CisJaWYgKHRtcCAmIDB4MTApCisJCWRhdGEtPmhhc190ZW1wIHw9IDB4MDQ7CisJaWYgKHRtcCAmIDB4NDApCisJCWRhdGEtPmhhc190ZW1wIHw9IDB4MDg7CisKKwl0bXAgPSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsVzgzNzkzX1JFR19URU1QX01PREVbMV0pOworCWlmICh0bXAgJiAweDAxKQorCQlkYXRhLT5oYXNfdGVtcCB8PSAweDEwOworCWlmICh0bXAgJiAweDAyKQorCQlkYXRhLT5oYXNfdGVtcCB8PSAweDIwOworCisJLyogRGV0ZWN0IHRoZSBWSUQgdXNhZ2UgYW5kIGlnbm9yZSB1bnVzZWQgaW5wdXQgKi8KKwl0bXAgPSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfTUZDKTsKKwlpZiAoISh0bXAgJiAweDI5KSkKKwkJZGF0YS0+aGFzX3ZpZCB8PSAweDE7CS8qIGhhcyBWSURBICovCisJaWYgKHRtcCAmIDB4ODApCisJCWRhdGEtPmhhc192aWQgfD0gMHgyOwkvKiBoYXMgVklEQiAqLworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ODM3OTNfc2Vuc29yX2F0dHJfMik7IGkrKykgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkgJnc4Mzc5M19zZW5zb3JfYXR0cl8yW2ldLmRldl9hdHRyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodzgzNzkzX3ZpZCk7IGkrKykgeworCQlpZiAoIShkYXRhLT5oYXNfdmlkICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZ3ODM3OTNfdmlkW2ldLmRldl9hdHRyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RhX3NpbmdsZV9maWxlcyk7IGkrKykgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX3NpbmdsZV9maWxlc1tpXS5kZXZfYXR0cik7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfcmVtb3ZlOworCisJfQorCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlpbnQgajsKKwkJaWYgKCEoZGF0YS0+aGFzX3RlbXAgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IGZpbGVzX3RlbXA7IGorKykgeworCQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkJCSZ3ODM3OTNfdGVtcFsoaSkgKiBmaWxlc190ZW1wCisJCQkJCQkJCSsgal0uZGV2X2F0dHIpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGV4aXRfcmVtb3ZlOworCQl9CisJfQorCisJZm9yIChpID0gNTsgaSA8IDEyOyBpKyspIHsKKwkJaW50IGo7CisJCWlmICghKGRhdGEtPmhhc19mYW4gJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IGZpbGVzX2ZhbjsgaisrKSB7CisJCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkgICAmdzgzNzkzX2xlZnRfZmFuWyhpIC0gNSkgKiBmaWxlc19mYW4KKwkJCQkJCQkJKyBqXS5kZXZfYXR0cik7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXhpdF9yZW1vdmU7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAzOyBpIDwgODsgaSsrKSB7CisJCWludCBqOworCQlpZiAoIShkYXRhLT5oYXNfcHdtICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBmaWxlc19wd207IGorKykgeworCQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkJICAgJnc4Mzc5M19sZWZ0X3B3bVsoaSAtIDMpICogZmlsZXNfcHdtCisJCQkJCQkJCSsgal0uZGV2X2F0dHIpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGV4aXRfcmVtb3ZlOworCQl9CisJfQorCisJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRldik7CisJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworCS8qIFVucmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKworZXhpdF9yZW1vdmU6CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodzgzNzkzX3NlbnNvcl9hdHRyXzIpOyBpKyspCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZ3ODM3OTNfc2Vuc29yX2F0dHJfMltpXS5kZXZfYXR0cik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2luZ2xlX2ZpbGVzKTsgaSsrKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3NpbmdsZV9maWxlc1tpXS5kZXZfYXR0cik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ODM3OTNfdmlkKTsgaSsrKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmdzgzNzkzX3ZpZFtpXS5kZXZfYXR0cik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ODM3OTNfbGVmdF9mYW4pOyBpKyspCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZ3ODM3OTNfbGVmdF9mYW5baV0uZGV2X2F0dHIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodzgzNzkzX2xlZnRfcHdtKTsgaSsrKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmdzgzNzkzX2xlZnRfcHdtW2ldLmRldl9hdHRyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHc4Mzc5M190ZW1wKTsgaSsrKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmdzgzNzkzX3RlbXBbaV0uZGV2X2F0dHIpOworCisJaWYgKGRhdGEtPmxtNzVbMF0gIT0gTlVMTCkgeworCQlpMmNfZGV0YWNoX2NsaWVudChkYXRhLT5sbTc1WzBdKTsKKwkJa2ZyZWUoZGF0YS0+bG03NVswXSk7CisJfQorCWlmIChkYXRhLT5sbTc1WzFdICE9IE5VTEwpIHsKKwkJaTJjX2RldGFjaF9jbGllbnQoZGF0YS0+bG03NVsxXSk7CisJCWtmcmVlKGRhdGEtPmxtNzVbMV0pOworCX0KK2RldGFjaF9jbGllbnQ6CisJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKK2ZyZWVfbWVtOgorCWtmcmVlKGRhdGEpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB3ODM3OTNfdXBkYXRlX25vbnZvbGF0aWxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBpLCBqOworCS8qCisJICAgVGhleSBhcmUgc29tZXdoYXQgInN0YWJsZSIgcmVnaXN0ZXJzLCBhbmQgdG8gdXBkYXRlIHRoZW0gZXZlcnl0aW1lCisJICAgdGFrZXMgc28gbXVjaCB0aW1lLCBpdCdzIGp1c3Qgbm90IHdvcnRoeS4gVXBkYXRlIHRoZW0gaW4gYSBsb25nCisJICAgaW50ZXJ2YWwgdG8gYXZvaWQgZXhjZXB0aW9uLgorCSAqLworCWlmICghKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF9ub252b2xhdGlsZSArIEhaICogMzAwKQorCSAgICAgIHx8ICFkYXRhLT52YWxpZCkpCisJCXJldHVybjsKKwkvKiB1cGRhdGUgdm9sdGFnZSBsaW1pdHMgKi8KKwlmb3IgKGkgPSAxOyBpIDwgMzsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGRhdGEtPmluKTsgaisrKSB7CisJCQlkYXRhLT5pbltqXVtpXSA9CisJCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0lOW2pdW2ldKTsKKwkJfQorCQlkYXRhLT5pbl9sb3dfYml0c1tpXSA9CisJCSAgICB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfSU5fTE9XX0JJVFNbaV0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPmZhbl9taW4pOyBpKyspIHsKKwkJLyogVXBkYXRlIHRoZSBGYW4gbWVhc3VyZWQgdmFsdWUgYW5kIGxpbWl0cyAqLworCQlpZiAoIShkYXRhLT5oYXNfZmFuICYgKDEgPDwgaSkpKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlkYXRhLT5mYW5fbWluW2ldID0KKwkJICAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19GQU5fTUlOKGkpKSA8PCA4OworCQlkYXRhLT5mYW5fbWluW2ldIHw9CisJCSAgICB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfRkFOX01JTihpKSArIDEpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnRlbXBfZmFuX21hcCk7IGkrKykgeworCQlpZiAoIShkYXRhLT5oYXNfdGVtcCAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCQlkYXRhLT50ZW1wX2Zhbl9tYXBbaV0gPQorCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1RFTVBfRkFOX01BUChpKSk7CisJCWZvciAoaiA9IDE7IGogPCA1OyBqKyspIHsKKwkJCWRhdGEtPnRlbXBbaV1bal0gPQorCQkJICAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19URU1QW2ldW2pdKTsKKwkJfQorCQlkYXRhLT50ZW1wX2NydWlzZVtpXSA9CisJCSAgICB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfVEVNUF9DUlVJU0UoaSkpOworCQlmb3IgKGogPSAwOyBqIDwgNzsgaisrKSB7CisJCQlkYXRhLT5zZjJfcHdtW2ldW2pdID0KKwkJCSAgICB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfU0YyX1BXTShpLCBqKSk7CisJCQlkYXRhLT5zZjJfdGVtcFtpXVtqXSA9CisJCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LAorCQkJCQkgICAgICBXODM3OTNfUkVHX1NGMl9URU1QKGksIGopKTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnRlbXBfbW9kZSk7IGkrKykKKwkJZGF0YS0+dGVtcF9tb2RlW2ldID0KKwkJICAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19URU1QX01PREVbaV0pOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+dG9sZXJhbmNlKTsgaSsrKSB7CisJCWRhdGEtPnRvbGVyYW5jZVtpXSA9CisJCSAgICB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfVEVNUF9UT0woaSkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnB3bSk7IGkrKykgeworCQlpZiAoIShkYXRhLT5oYXNfcHdtICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWRhdGEtPnB3bVtpXVtQV01fTk9OU1RPUF0gPQorCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1BXTShpLCBQV01fTk9OU1RPUCkpOworCQlkYXRhLT5wd21baV1bUFdNX1NUQVJUXSA9CisJCSAgICB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfUFdNKGksIFBXTV9TVEFSVCkpOworCQlkYXRhLT5wd21fc3RvcF90aW1lW2ldID0KKwkJICAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19QV01fU1RPUF9USU1FKGkpKTsKKwl9CisKKwlkYXRhLT5wd21fZGVmYXVsdCA9IHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19QV01fREVGQVVMVCk7CisJZGF0YS0+cHdtX2VuYWJsZSA9IHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19QV01fRU5BQkxFKTsKKwlkYXRhLT5wd21fdXB0aW1lID0gdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1BXTV9VUFRJTUUpOworCWRhdGEtPnB3bV9kb3dudGltZSA9IHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19QV01fRE9XTlRJTUUpOworCWRhdGEtPnRlbXBfY3JpdGljYWwgPQorCSAgICB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfVEVNUF9DUklUSUNBTCk7CisJZGF0YS0+YmVlcF9lbmFibGUgPSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfT1ZUX0JFRVApOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+YmVlcHMpOyBpKyspIHsKKwkJZGF0YS0+YmVlcHNbaV0gPSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfQkVFUChpKSk7CisJfQorCisJZGF0YS0+bGFzdF9ub252b2xhdGlsZSA9IGppZmZpZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdzgzNzkzX2RhdGEgKnc4Mzc5M191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKCEodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAqIDIpCisJICAgICAgfHwgIWRhdGEtPnZhbGlkKSkKKwkJZ290byBFTkQ7CisKKwkvKiBVcGRhdGUgdGhlIHZvbHRhZ2VzIG1lYXN1cmVkIHZhbHVlIGFuZCBsaW1pdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5pbik7IGkrKykKKwkJZGF0YS0+aW5baV1bSU5fUkVBRF0gPQorCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0lOW2ldW0lOX1JFQURdKTsKKworCWRhdGEtPmluX2xvd19iaXRzW0lOX1JFQURdID0KKwkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0lOX0xPV19CSVRTW0lOX1JFQURdKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPmZhbik7IGkrKykgeworCQlpZiAoIShkYXRhLT5oYXNfZmFuICYgKDEgPDwgaSkpKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlkYXRhLT5mYW5baV0gPQorCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0ZBTihpKSkgPDwgODsKKwkJZGF0YS0+ZmFuW2ldIHw9CisJCSAgICB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfRkFOKGkpICsgMSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+dGVtcCk7IGkrKykgeworCQlpZiAoIShkYXRhLT5oYXNfdGVtcCAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCQlkYXRhLT50ZW1wW2ldW1RFTVBfUkVBRF0gPQorCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX1RFTVBbaV1bVEVNUF9SRUFEXSk7CisJfQorCisJZGF0YS0+dGVtcF9sb3dfYml0cyA9CisJICAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19URU1QX0xPV19CSVRTKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnB3bSk7IGkrKykgeworCQlpZiAoZGF0YS0+aGFzX3B3bSAmICgxIDw8IGkpKQorCQkJZGF0YS0+cHdtW2ldW1BXTV9EVVRZXSA9CisJCQkgICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LAorCQkJCQkgICAgICBXODM3OTNfUkVHX1BXTShpLCBQV01fRFVUWSkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPmFsYXJtcyk7IGkrKykKKwkJZGF0YS0+YWxhcm1zW2ldID0KKwkJICAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19BTEFSTShpKSk7CisJaWYgKGRhdGEtPmhhc192aWQgJiAweDAxKQorCQlkYXRhLT52aWRbMF0gPSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfVklEX0lOQSk7CisJaWYgKGRhdGEtPmhhc192aWQgJiAweDAyKQorCQlkYXRhLT52aWRbMV0gPSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfVklEX0lOQik7CisJdzgzNzkzX3VwZGF0ZV9ub252b2xhdGlsZShkZXYpOworCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJZGF0YS0+dmFsaWQgPSAxOworCitFTkQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGRhdGE7Cit9CisKKy8qIElnbm9yZSB0aGUgcG9zc2liaWxpdHkgdGhhdCBzb21lYm9keSBjaGFuZ2UgYmFuayBvdXRzaWRlIHRoZSBkcml2ZXIKKyAgIE11c3QgYmUgY2FsbGVkIHdpdGggZGF0YS0+dXBkYXRlX2xvY2sgaGVsZCwgZXhjZXB0IGR1cmluZyBpbml0aWFsaXphdGlvbiAqLworc3RhdGljIHU4IHc4Mzc5M19yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcpCit7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTggcmVzID0gMHhmZjsKKwl1OCBuZXdfYmFuayA9IHJlZyA+PiA4OworCisJbmV3X2JhbmsgfD0gZGF0YS0+YmFuayAmIDB4ZmM7CisJaWYgKGRhdGEtPmJhbmsgIT0gbmV3X2JhbmspIHsKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEKKwkJICAgIChjbGllbnQsIFc4Mzc5M19SRUdfQkFOS1NFTCwgbmV3X2JhbmspID49IDApCisJCQlkYXRhLT5iYW5rID0gbmV3X2Jhbms7CisJCWVsc2UgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJInNldCBiYW5rIHRvICVkIGZhaWxlZCwgZmFsbCBiYWNrICIKKwkJCQkidG8gYmFuayAlZCwgcmVhZCByZWcgMHgleCBlcnJvclxuIiwKKwkJCQluZXdfYmFuaywgZGF0YS0+YmFuaywgcmVnKTsKKwkJCXJlcyA9IDB4MDsJLyogcmVhZCAweDAgZnJvbSB0aGUgY2hpcCAqLworCQkJZ290byBFTkQ7CisJCX0KKwl9CisJcmVzID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnICYgMHhmZik7CitFTkQ6CisJcmV0dXJuIHJlczsKK30KKworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBkYXRhLT51cGRhdGVfbG9jayBoZWxkLCBleGNlcHQgZHVyaW5nIGluaXRpYWxpemF0aW9uICovCitzdGF0aWMgaW50IHc4Mzc5M193cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVnLCB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcmVzOworCXU4IG5ld19iYW5rID0gcmVnID4+IDg7CisKKwluZXdfYmFuayB8PSBkYXRhLT5iYW5rICYgMHhmYzsKKwlpZiAoZGF0YS0+YmFuayAhPSBuZXdfYmFuaykgeworCQlpZiAoKHJlcyA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEKKwkJICAgIChjbGllbnQsIFc4Mzc5M19SRUdfQkFOS1NFTCwgbmV3X2JhbmspKSA+PSAwKQorCQkJZGF0YS0+YmFuayA9IG5ld19iYW5rOworCQllbHNlIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCSJzZXQgYmFuayB0byAlZCBmYWlsZWQsIGZhbGwgYmFjayAiCisJCQkJInRvIGJhbmsgJWQsIHdyaXRlIHJlZyAweCV4IGVycm9yXG4iLAorCQkJCW5ld19iYW5rLCBkYXRhLT5iYW5rLCByZWcpOworCQkJZ290byBFTkQ7CisJCX0KKwl9CisKKwlyZXMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnICYgMHhmZiwgdmFsdWUpOworRU5EOgorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNlbnNvcnNfdzgzNzkzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnc4Mzc5M19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2Vuc29yc193ODM3OTNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ3ODM3OTNfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiWXVhbiBNdSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJ3ODM3OTMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHNlbnNvcnNfdzgzNzkzX2luaXQpOworbW9kdWxlX2V4aXQoc2Vuc29yc193ODM3OTNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYWxnb3MvS2NvbmZpZwppbmRleCBjMDM0ODIwLi5hZjAyMDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL0tjb25maWcKQEAgLTM4LDE3ICszOCw2IEBACiAJICBUaGlzIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZSAKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1hbGdvLXBjYS4KIAotY29uZmlnIEkyQ19BTEdPSVRFCi0JdHJpc3RhdGUgIklURSBJMkMgQWxnb3JpdGhtIgotCWRlcGVuZHMgb24gTUlQU19JVEU4MTcyICYmIEkyQwotCWhlbHAKLQkgIFRoaXMgc3VwcG9ydHMgdGhlIHVzZSBvZiB0aGUgSVRFODE3MiBJMkMgaW50ZXJmYWNlIGZvdW5kIG9uIHNvbWUgTUlQUwotCSAgc3lzdGVtcy4gU2F5IFkgaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlLiBZb3Ugc2hvdWxkIGFsc28gc2F5IFkgZm9yCi0JICB0aGUgSVRFIEkyQyBwZXJpcGhlcmFsIGRyaXZlciBzdXBwb3J0IGJlbG93LgotCi0JICBUaGlzIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZSAKLQkgIHdpbGwgYmUgY2FsbGVkIGkyYy1hbGdvLWl0ZS4KLQogY29uZmlnIEkyQ19BTEdPOFhYCiAJdHJpc3RhdGUgIk1QQzh4eCBDUE0gSTJDIGludGVyZmFjZSIKIAlkZXBlbmRzIG9uIDh4eCAmJiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2FsZ29zL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYWxnb3MvTWFrZWZpbGUKaW5kZXggMjA4YmUwNC4uY2FjMTA1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYWxnb3MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pMmMvYWxnb3MvTWFrZWZpbGUKQEAgLTUsNyArNSw2IEBACiBvYmotJChDT05GSUdfSTJDX0FMR09CSVQpCSs9IGkyYy1hbGdvLWJpdC5vCiBvYmotJChDT05GSUdfSTJDX0FMR09QQ0YpCSs9IGkyYy1hbGdvLXBjZi5vCiBvYmotJChDT05GSUdfSTJDX0FMR09QQ0EpCSs9IGkyYy1hbGdvLXBjYS5vCi1vYmotJChDT05GSUdfSTJDX0FMR09JVEUpCSs9IGkyYy1hbGdvLWl0ZS5vCiBvYmotJChDT05GSUdfSTJDX0FMR09fU0dJKQkrPSBpMmMtYWxnby1zZ2kubwogCiBpZmVxICgkKENPTkZJR19JMkNfREVCVUdfQUxHTykseSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tYml0LmMKaW5kZXggMjFjMzZiZi4uOTVhYTUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tYml0LmMKKysrIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tYml0LmMKQEAgLTU0MCwxNSArNTQwLDcgQEAKIAogCXJldHVybiBpMmNfYWRkX2FkYXB0ZXIoYWRhcCk7CiB9Ci0KLQotaW50IGkyY19iaXRfZGVsX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JcmV0dXJuIGkyY19kZWxfYWRhcHRlcihhZGFwKTsKLX0KLQogRVhQT1JUX1NZTUJPTChpMmNfYml0X2FkZF9idXMpOwotRVhQT1JUX1NZTUJPTChpMmNfYml0X2RlbF9idXMpOwogCiBNT0RVTEVfQVVUSE9SKCJTaW1vbiBHLiBWb2dsIDxzaW1vbkB0ay51bmktbGluei5hYy5hdD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSTJDLUJ1cyBiaXQtYmFuZ2luZyBhbGdvcml0aG0iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWl0ZS5jIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28taXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZDhlZWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28taXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MDYgKzAsMCBAQAotLyoKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGkyYy1hbGdvLWl0ZS5jIGkyYyBkcml2ZXIgYWxnb3JpdGhtcyBmb3IgSVRFIGFkYXB0ZXJzCSAgICAKLSAgIAotICAgSGFpLVBhbyBGYW4sIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAgIGhwZmFuQG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLQotICAgQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgVGhpcyBmaWxlIHdhcyBoaWdobHkgbGV2ZXJhZ2VkIGZyb20gaTJjLWFsZ28tcGNmLmMsIHdoaWNoIHdhcyBjcmVhdGVkCi0gICBieSBTaW1vbiBHLiBWb2dsIGFuZCBIYW5zIEJlcmdsdW5kOgotCi0KLSAgICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcgU2ltb24gRy4gVm9nbAotICAgICAgICAgICAgICAgICAgIDE5OTgtMjAwMCBIYW5zIEJlcmdsdW5kCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4JCSAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4gYW5kIAotICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAsYW5kIGFsc28gZnJvbSBNYXJ0aW4gQmFpbGV5Ci0gICA8bWJhaWxleUBsaXR0bGVmZWV0LWluYy5jb20+ICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1pdGUuaD4KLSNpbmNsdWRlICJpMmMtYWxnby1pdGUuaCIKLQotI2RlZmluZQlQTV9EU1IJCUlUODE3Ml9QQ0lfSU9fQkFTRSArIElUX1BNX0RTUgotI2RlZmluZQlQTV9JQlNSCQlJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9QTV9EU1IgKyAweDA0IAotI2RlZmluZSBHUElPX0NDUglJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9HUENDUgotCi0jZGVmaW5lIERFQjIoeCkgaWYgKGkyY19kZWJ1Zz49MikgeAotI2RlZmluZSBERUIzKHgpIGlmIChpMmNfZGVidWc+PTMpIHggLyogcHJpbnQgc2V2ZXJhbCBzdGF0aXN0aWNhbCB2YWx1ZXMqLwotI2RlZmluZSBERUZfVElNRU9VVCAxNgotCi0KLS8qIG1vZHVsZSBwYXJhbWV0ZXJzOgotICovCi1zdGF0aWMgaW50IGkyY19kZWJ1ZzsKLXN0YXRpYyBpbnQgaWljX3Rlc3Q7CS8qIHNlZSBpZiB0aGUgbGluZS1zZXR0aW5nIGZ1bmN0aW9ucyB3b3JrCSovCi0KLS8qIC0tLSBzZXR0aW5nIHN0YXRlcyBvbiB0aGUgYnVzIHdpdGggdGhlIHJpZ2h0IHRpbWluZzogLS0tLS0tLS0tLS0tLS0tCSovCi0KLSNkZWZpbmUgZ2V0X2Nsb2NrKGFkYXApIGFkYXAtPmdldGNsb2NrKGFkYXAtPmRhdGEpCi0jZGVmaW5lIGlpY19vdXR3KGFkYXAsIHJlZywgdmFsKSBhZGFwLT5zZXRpaWMoYWRhcC0+ZGF0YSwgcmVnLCB2YWwpCi0jZGVmaW5lIGlpY19pbncoYWRhcCwgcmVnKSBhZGFwLT5nZXRpaWMoYWRhcC0+ZGF0YSwgcmVnKQotCi0KLS8qIC0tLSBvdGhlciBhdXhpbGlhcnkgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCi0KLXN0YXRpYyB2b2lkIGlpY19zdGFydChzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgKmFkYXApCi17Ci0JaWljX291dHcoYWRhcCxJVEVfSTJDSENSLElURV9DTUQpOwotfQotCi1zdGF0aWMgdm9pZCBpaWNfc3RvcChzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgKmFkYXApCi17Ci0JaWljX291dHcoYWRhcCxJVEVfSTJDSENSLDApOwotCWlpY19vdXR3KGFkYXAsSVRFX0kyQ0hTUixJVEVfSTJDSFNSX1RESSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlpY19yZXNldChzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgKmFkYXApCi17Ci0JaWljX291dHcoYWRhcCwgUE1fSUJTUiwgaWljX2ludyhhZGFwLCBQTV9JQlNSKSB8IDB4ODApOwotfQotCi0KLXN0YXRpYyBpbnQgd2FpdF9mb3JfYmIoc3RydWN0IGkyY19hbGdvX2lpY19kYXRhICphZGFwKQotewotCWludCB0aW1lb3V0ID0gREVGX1RJTUVPVVQ7Ci0Jc2hvcnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gaWljX2ludyhhZGFwLCBJVEVfSTJDSFNSKTsKLSNpZm5kZWYgU1RVQl9JMkMKLQl3aGlsZSAodGltZW91dC0tICYmIChzdGF0dXMgJiBJVEVfSTJDSFNSX0hCKSkgewotCQl1ZGVsYXkoMTAwMCk7IC8qIEhvdyBtdWNoIGlzIHRoaXM/ICovCi0JCXN0YXR1cyA9IGlpY19pbncoYWRhcCwgSVRFX0kyQ0hTUik7Ci0JfQotI2VuZGlmCi0JaWYgKHRpbWVvdXQ8PTApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJUaW1lb3V0LCBob3N0IGlzIGJ1c3lcbiIpOwotCQlpaWNfcmVzZXQoYWRhcCk7Ci0JfQotCXJldHVybih0aW1lb3V0PD0wKTsKLX0KLQotLyogQWZ0ZXIgd2UgaXNzdWUgYSB0cmFuc2FjdGlvbiBvbiB0aGUgSUlDIGJ1cywgdGhpcyBmdW5jdGlvbgotICogaXMgY2FsbGVkLiAgSXQgcHV0cyB0aGlzIHByb2Nlc3MgdG8gc2xlZXAgdW50aWwgd2UgZ2V0IGFuIGludGVycnVwdCBmcm9tCi0gKiBmcm9tIHRoZSBjb250cm9sbGVyIHRlbGxpbmcgdXMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gd2UgcmVxdWVzdGVkIGluIGNvbXBsZXRlLgotICovCi1zdGF0aWMgaW50IHdhaXRfZm9yX3BpbihzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgKmFkYXAsIHNob3J0ICpzdGF0dXMpIHsKLQotCWludCB0aW1lb3V0ID0gREVGX1RJTUVPVVQ7Ci0JCi0JdGltZW91dCA9IHdhaXRfZm9yX2JiKGFkYXApOwotCWlmICh0aW1lb3V0KSB7Ci0gIAkJREVCMihwcmludGsoIlRpbWVvdXQgd2FpdGluZyBmb3IgaG9zdCBub3QgYnVzeVxuIik7KQotICAJCXJldHVybiAtRUlPOwotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQl0aW1lb3V0ID0gREVGX1RJTUVPVVQ7Ci0KLQkqc3RhdHVzID0gaWljX2ludyhhZGFwLCBJVEVfSTJDSFNSKTsKLSNpZm5kZWYgU1RVQl9JMkMKLQl3aGlsZSAodGltZW91dC0tICYmICEoKnN0YXR1cyAmIElURV9JMkNIU1JfVERJKSkgewotCSAgIGFkYXAtPndhaXRmb3JwaW4oKTsKLQkgICAqc3RhdHVzID0gaWljX2ludyhhZGFwLCBJVEVfSTJDSFNSKTsKLQl9Ci0jZW5kaWYKLQlpZiAodGltZW91dCA8PSAwKQotCQlyZXR1cm4oLTEpOwotCWVsc2UKLQkJcmV0dXJuKDApOwotfQotCi1zdGF0aWMgaW50IHdhaXRfZm9yX2ZlKHN0cnVjdCBpMmNfYWxnb19paWNfZGF0YSAqYWRhcCwgc2hvcnQgKnN0YXR1cykKLXsKLQlpbnQgdGltZW91dCA9IERFRl9USU1FT1VUOwotCi0JKnN0YXR1cyA9IGlpY19pbncoYWRhcCwgSVRFX0kyQ0ZTUik7Ci0jaWZuZGVmIFNUVUJfSTJDIAotCXdoaWxlICh0aW1lb3V0LS0gJiYgKCpzdGF0dXMgJiBJVEVfSTJDRlNSX0ZFKSkgewotCQl1ZGVsYXkoMTAwMCk7Ci0JCWlpY19pbncoYWRhcCwgSVRFX0kyQ0ZTUik7Ci0JfQotI2VuZGlmCi0JaWYgKHRpbWVvdXQgPD0gMCkgCi0JCXJldHVybigtMSk7Ci0JZWxzZQotCQlyZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyBpbnQgaWljX2luaXQgKHN0cnVjdCBpMmNfYWxnb19paWNfZGF0YSAqYWRhcCkKLXsKLQlzaG9ydCBpOwotCi0JLyogQ2xlYXIgYml0IDcgdG8gc2V0IEkyQyB0byBub3JtYWwgb3BlcmF0aW9uIG1vZGUgKi8KLQlpPWlpY19pbncoYWRhcCwgUE1fRFNSKSYgMHhmZjdmOwotCWlpY19vdXR3KGFkYXAsIFBNX0RTUiwgaSk7Ci0KLQkvKiBzZXQgSVRfR1BDQ1IgcG9ydCBDIGJpdCAyJjMgYXMgZnVuY3Rpb24gMiAqLwotCWkgPSBpaWNfaW53KGFkYXAsIEdQSU9fQ0NSKSAmIDB4ZmMwZjsKLQlpaWNfb3V0dyhhZGFwLEdQSU9fQ0NSLGkpOwotCi0JLyogQ2xlYXIgc2xhdmUgYWRkcmVzcy9zdWItYWRkcmVzcyAqLwotCWlpY19vdXR3KGFkYXAsSVRFX0kyQ1NBUiwgMCk7Ci0JaWljX291dHcoYWRhcCxJVEVfSTJDU1NBUiwgMCk7Ci0KLQkvKiBTZXQgY2xvY2sgY291bnRlciByZWdpc3RlciAqLwotCWlpY19vdXR3KGFkYXAsSVRFX0kyQ0NLQ05ULCBnZXRfY2xvY2soYWRhcCkpOwotCi0JLyogU2V0IFNUQVJUL3JlU1RBUlQvU1RPUCB0aW1lIHJlZ2lzdGVycyAqLwotCWlpY19vdXR3KGFkYXAsSVRFX0kyQ1NIRFIsIDB4MGEpOwotCWlpY19vdXR3KGFkYXAsSVRFX0kyQ1JTVVIsIDB4MGEpOwotCWlpY19vdXR3KGFkYXAsSVRFX0kyQ1BTVVIsIDB4MGEpOwotCi0JLyogRW5hYmxlIGludGVycnVwdHMgb24gY29tcGxldGluZyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAqLwotCWlpY19vdXR3KGFkYXAsSVRFX0kyQ0hDUiwgSVRFX0kyQ0hDUl9JRSB8IElURV9JMkNIQ1JfSENFKTsKLQotCS8qIENsZWFyIHRyYW5zZmVyIGNvdW50ICovCi0JaWljX291dHcoYWRhcCxJVEVfSTJDRkJDUiwgMHgwKTsKLQotCURFQjIocHJpbnRrKCJpaWNfaW5pdDogSW5pdGlhbGl6ZWQgSUlDIG9uIElURSAweCV4XG4iLAotCQlpaWNfaW53KGFkYXAsIElURV9JMkNIU1IpKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIFNhbml0eSBjaGVjayBmb3IgdGhlIGFkYXB0ZXIgaGFyZHdhcmUgLSBjaGVjayB0aGUgcmVhY3Rpb24gb2YKLSAqIHRoZSBidXMgbGluZXMgb25seSBpZiBpdCBzZWVtcyB0byBiZSBpZGxlLgotICovCi1zdGF0aWMgaW50IHRlc3RfYnVzKHN0cnVjdCBpMmNfYWxnb19paWNfZGF0YSAqYWRhcCwgY2hhciAqbmFtZSkgewotI2lmIDAKLQlpbnQgc2NsLHNkYTsKLQlzZGE9Z2V0c2RhKGFkYXApOwotCWlmIChhZGFwLT5nZXRzY2w9PU5VTEwpIHsKLQkJcHJpbnRrKCJ0ZXN0X2J1czogV2FybmluZzogQWRhcHRlciBjYW4ndCByZWFkIGZyb20gY2xvY2sgbGluZSAtIHNraXBwaW5nIHRlc3QuXG4iKTsKLQkJcmV0dXJuIDA7CQkKLQl9Ci0Jc2NsPWdldHNjbChhZGFwKTsKLQlwcmludGsoInRlc3RfYnVzOiBBZGFwdGVyOiAlcyBzY2w6ICVkICBzZGE6ICVkIC0tIHRlc3RpbmcuLi5cbiIsCi0JbmFtZSxnZXRzY2woYWRhcCksZ2V0c2RhKGFkYXApKTsKLQlpZiAoIXNjbCB8fCAhc2RhICkgewotCQlwcmludGsoInRlc3RfYnVzOiAlcyBzZWVtcyB0byBiZSBidXN5LlxuIixhZGFwLT5uYW1lKTsKLQkJZ290byBiYWlsb3V0OwotCX0KLQlzZGFsbyhhZGFwKTsKLQlwcmludGsoInRlc3RfYnVzOjEgc2NsOiAlZCAgc2RhOiAlZFxuIiwgZ2V0c2NsKGFkYXApLAotCSAgICAgICBnZXRzZGEoYWRhcCkpOwotCWlmICggMCAhPSBnZXRzZGEoYWRhcCkgKSB7Ci0JCXByaW50aygidGVzdF9idXM6ICVzIFNEQSBzdHVjayBoaWdoIVxuIixuYW1lKTsKLQkJc2RhaGkoYWRhcCk7Ci0JCWdvdG8gYmFpbG91dDsKLQl9Ci0JaWYgKCAwID09IGdldHNjbChhZGFwKSApIHsKLQkJcHJpbnRrKCJ0ZXN0X2J1czogJXMgU0NMIHVuZXhwZWN0ZWQgbG93IHdoaWxlIHB1bGxpbmcgU0RBIGxvdyFcbiIsCi0JCQluYW1lKTsKLQkJZ290byBiYWlsb3V0OwotCX0JCQotCXNkYWhpKGFkYXApOwotCXByaW50aygidGVzdF9idXM6MiBzY2w6ICVkICBzZGE6ICVkXG4iLCBnZXRzY2woYWRhcCksCi0JICAgICAgIGdldHNkYShhZGFwKSk7Ci0JaWYgKCAwID09IGdldHNkYShhZGFwKSApIHsKLQkJcHJpbnRrKCJ0ZXN0X2J1czogJXMgU0RBIHN0dWNrIGxvdyFcbiIsbmFtZSk7Ci0JCXNkYWhpKGFkYXApOwotCQlnb3RvIGJhaWxvdXQ7Ci0JfQotCWlmICggMCA9PSBnZXRzY2woYWRhcCkgKSB7Ci0JCXByaW50aygidGVzdF9idXM6ICVzIFNDTCB1bmV4cGVjdGVkIGxvdyB3aGlsZSBTREEgaGlnaCFcbiIsCi0JCSAgICAgICBhZGFwLT5uYW1lKTsKLQlnb3RvIGJhaWxvdXQ7Ci0JfQotCXNjbGxvKGFkYXApOwotCXByaW50aygidGVzdF9idXM6MyBzY2w6ICVkICBzZGE6ICVkXG4iLCBnZXRzY2woYWRhcCksCi0JICAgICAgIGdldHNkYShhZGFwKSk7Ci0JaWYgKCAwICE9IGdldHNjbChhZGFwKSApIHsKLQotCQlzY2xoaShhZGFwKTsKLQkJZ290byBiYWlsb3V0OwotCX0KLQlpZiAoIDAgPT0gZ2V0c2RhKGFkYXApICkgewotCQlwcmludGsoInRlc3RfYnVzOiAlcyBTREEgdW5leHBlY3RlZCBsb3cgd2hpbGUgcHVsbGluZyBTQ0wgbG93IVxuIiwKLQkJCW5hbWUpOwotCQlnb3RvIGJhaWxvdXQ7Ci0JfQotCXNjbGhpKGFkYXApOwotCXByaW50aygidGVzdF9idXM6NCBzY2w6ICVkICBzZGE6ICVkXG4iLCBnZXRzY2woYWRhcCksCi0JICAgICAgIGdldHNkYShhZGFwKSk7Ci0JaWYgKCAwID09IGdldHNjbChhZGFwKSApIHsKLQkJcHJpbnRrKCJ0ZXN0X2J1czogJXMgU0NMIHN0dWNrIGxvdyFcbiIsbmFtZSk7Ci0JCXNjbGhpKGFkYXApOwotCQlnb3RvIGJhaWxvdXQ7Ci0JfQotCWlmICggMCA9PSBnZXRzZGEoYWRhcCkgKSB7Ci0JCXByaW50aygidGVzdF9idXM6ICVzIFNEQSB1bmV4cGVjdGVkIGxvdyB3aGlsZSBTQ0wgaGlnaCFcbiIsCi0JCQluYW1lKTsKLQkJZ290byBiYWlsb3V0OwotCX0KLQlwcmludGsoInRlc3RfYnVzOiAlcyBwYXNzZWQgdGVzdC5cbiIsbmFtZSk7Ci0JcmV0dXJuIDA7Ci1iYWlsb3V0OgotCXNkYWhpKGFkYXApOwotCXNjbGhpKGFkYXApOwotCXJldHVybiAtRU5PREVWOwotI2VuZGlmCi0JcmV0dXJuICgwKTsKLX0KLQotLyogLS0tLS0gVXRpbGl0eSBmdW5jdGlvbnMKLSAqLwotCi0KLS8qIFZlcmlmeSB0aGUgZGV2aWNlIHdlIHdhbnQgdG8gdGFsayB0byBvbiB0aGUgSUlDIGJ1cyByZWFsbHkgZXhpc3RzLiAqLwotc3RhdGljIGlubGluZSBpbnQgdHJ5X2FkZHJlc3Moc3RydWN0IGkyY19hbGdvX2lpY19kYXRhICphZGFwLAotCQkgICAgICAgdW5zaWduZWQgaW50IGFkZHIsIGludCByZXRyaWVzKQotewotCWludCBpLCByZXQgPSAtMTsKLQlzaG9ydCBzdGF0dXM7Ci0KLQlmb3IgKGk9MDtpPHJldHJpZXM7aSsrKSB7Ci0JCWlpY19vdXR3KGFkYXAsIElURV9JMkNTQVIsIGFkZHIpOwotCQlpaWNfc3RhcnQoYWRhcCk7Ci0JCWlmICh3YWl0X2Zvcl9waW4oYWRhcCwgJnN0YXR1cykgPT0gMCkgewotCQkJaWYgKChzdGF0dXMgJiBJVEVfSTJDSFNSX0RORSkgPT0gMCkgeyAKLQkJCQlpaWNfc3RvcChhZGFwKTsKLQkJCQlpaWNfb3V0dyhhZGFwLCBJVEVfSTJDRkNSLCBJVEVfSTJDRkNSX0ZMVVNIKTsKLQkJCQlyZXQ9MTsKLQkJCQlicmVhazsJLyogc3VjY2VzcyEgKi8KLQkJCX0KLQkJfQotCQlpaWNfc3RvcChhZGFwKTsKLQkJdWRlbGF5KGFkYXAtPnVkZWxheSk7Ci0JfQotCURFQjIoaWYgKGkpIHByaW50aygidHJ5X2FkZHJlc3M6IG5lZWRlZCAlZCByZXRyaWVzIGZvciAweCV4XG4iLGksCi0JICAgICAgICAgICAgICAgICAgIGFkZHIpKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgaWljX3NlbmRieXRlcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLGNvbnN0IGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQpCi17Ci0Jc3RydWN0IGkyY19hbGdvX2lpY19kYXRhICphZGFwID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKLQlpbnQgd3Jjb3VudD0wLCB0aW1lb3V0OwotCXNob3J0IHN0YXR1czsKLQlpbnQgbG9vcHMsIHJlbWFpbmRlciwgaSwgajsKLQl1bmlvbiB7Ci0JCWNoYXIgYnl0ZVsyXTsKLQkJdW5zaWduZWQgc2hvcnQgd29yZDsKLQl9IHRtcDsKLSAgIAotCWlpY19vdXR3KGFkYXAsIElURV9JMkNTU0FSLCAodW5zaWduZWQgc2hvcnQpYnVmW3dyY291bnQrK10pOwotCWNvdW50LS07Ci0JaWYgKGNvdW50ID09IDApCi0JCXJldHVybiAtRUlPOwotCi0JbG9vcHMgPSAgY291bnQgLyAzMjsJCS8qIDMyLWJ5dGUgRklGTyAqLwotCXJlbWFpbmRlciA9IGNvdW50ICUgMzI7Ci0KLQlpZihsb29wcykgewotCQlmb3IoaT0wOyBpPGxvb3BzOyBpKyspIHsKLQotCQkJaWljX291dHcoYWRhcCwgSVRFX0kyQ0ZCQ1IsIDMyKTsKLQkJCWZvcihqPTA7IGo8MzIvMjsgaisrKSB7Ci0JCQkJdG1wLmJ5dGVbMV0gPSBidWZbd3Jjb3VudCsrXTsKLQkJCQl0bXAuYnl0ZVswXSA9IGJ1Zlt3cmNvdW50KytdOwotCQkJCWlpY19vdXR3KGFkYXAsIElURV9JMkNGRFIsIHRtcC53b3JkKTsgCi0JCQl9Ci0KLQkJCS8qIHN0YXR1cyBGSUZPIG92ZXJydW4gKi8KLQkJCWlpY19pbncoYWRhcCwgSVRFX0kyQ0ZTUik7Ci0JCQlpaWNfaW53KGFkYXAsIElURV9JMkNGQkNSKTsKLQotCQkJaWljX291dHcoYWRhcCwgSVRFX0kyQ0hDUiwgSVRFX1dSSVRFKTsJLyogSXNzdWUgV1JJVEUgY29tbWFuZCAqLwotCi0JCQkvKiBXYWl0IGZvciB0cmFuc21pc3Npb24gdG8gY29tcGxldGUgKi8KLQkJCXRpbWVvdXQgPSB3YWl0X2Zvcl9waW4oYWRhcCwgJnN0YXR1cyk7Ci0JCQlpZih0aW1lb3V0KSB7Ci0JCQkJaWljX3N0b3AoYWRhcCk7Ci0JCQkJcHJpbnRrKCJpaWNfc2VuZGJ5dGVzOiAlcyB3cml0ZSB0aW1lb3V0LlxuIiwgaTJjX2FkYXAtPm5hbWUpOwotCQkJCXJldHVybiAtRVJFTU9URUlPOyAvKiBnb3QgYSBiZXR0ZXIgb25lID8/ICovCi0gICAgIAl9Ci0JCQlpZiAoc3RhdHVzICYgSVRFX0kyQ0hTUl9EQikgewotCQkJCWlpY19zdG9wKGFkYXApOwotCQkJCXByaW50aygiaWljX3NlbmRieXRlczogJXMgd3JpdGUgZXJyb3IgLSBubyBhY2suXG4iLCBpMmNfYWRhcC0+bmFtZSk7Ci0JCQkJcmV0dXJuIC1FUkVNT1RFSU87IC8qIGdvdCBhIGJldHRlciBvbmUgPz8gKi8KLQkJCX0KLQkJfQotCX0KLQlpZihyZW1haW5kZXIpIHsKLQkJaWljX291dHcoYWRhcCwgSVRFX0kyQ0ZCQ1IsIHJlbWFpbmRlcik7Ci0JCWZvcihpPTA7IGk8cmVtYWluZGVyLzI7IGkrKykgewotCQkJdG1wLmJ5dGVbMV0gPSBidWZbd3Jjb3VudCsrXTsKLQkJCXRtcC5ieXRlWzBdID0gYnVmW3dyY291bnQrK107Ci0JCQlpaWNfb3V0dyhhZGFwLCBJVEVfSTJDRkRSLCB0bXAud29yZCk7Ci0JCX0KLQotCQkvKiBzdGF0dXMgRklGTyBvdmVycnVuICovCi0JCWlpY19pbncoYWRhcCwgSVRFX0kyQ0ZTUik7Ci0JCWlpY19pbncoYWRhcCwgSVRFX0kyQ0ZCQ1IpOwotCi0JCWlpY19vdXR3KGFkYXAsIElURV9JMkNIQ1IsIElURV9XUklURSk7ICAvKiBJc3N1ZSBXUklURSBjb21tYW5kICovCi0KLQkJdGltZW91dCA9IHdhaXRfZm9yX3BpbihhZGFwLCAmc3RhdHVzKTsKLQkJaWYodGltZW91dCkgewotCQkJaWljX3N0b3AoYWRhcCk7Ci0JCQlwcmludGsoImlpY19zZW5kYnl0ZXM6ICVzIHdyaXRlIHRpbWVvdXQuXG4iLCBpMmNfYWRhcC0+bmFtZSk7Ci0JCQlyZXR1cm4gLUVSRU1PVEVJTzsgLyogZ290IGEgYmV0dGVyIG9uZSA/PyAqLwotCQl9Ci0jaWZuZGVmIFNUVUJfSTJDCi0JCWlmIChzdGF0dXMgJiBJVEVfSTJDSFNSX0RCKSB7IAotCQkJaWljX3N0b3AoYWRhcCk7Ci0JCQlwcmludGsoImlpY19zZW5kYnl0ZXM6ICVzIHdyaXRlIGVycm9yIC0gbm8gYWNrLlxuIiwgaTJjX2FkYXAtPm5hbWUpOwotCQkJcmV0dXJuIC1FUkVNT1RFSU87IC8qIGdvdCBhIGJldHRlciBvbmUgPz8gKi8KLQkJfQotI2VuZGlmCi0JfQotCWlpY19zdG9wKGFkYXApOwotCXJldHVybiB3cmNvdW50OwotfQotCi0KLXN0YXRpYyBpbnQgaWljX3JlYWRieXRlcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBjaGFyICpidWYsIGludCBjb3VudCwKLQlpbnQgc3JlYWQpCi17Ci0JaW50IHJkY291bnQ9MCwgaSwgdGltZW91dDsKLQlzaG9ydCBzdGF0dXM7Ci0Jc3RydWN0IGkyY19hbGdvX2lpY19kYXRhICphZGFwID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKLQlpbnQgbG9vcHMsIHJlbWFpbmRlciwgajsKLQl1bmlvbiB7Ci0JCWNoYXIgYnl0ZVsyXTsKLQkJdW5zaWduZWQgc2hvcnQgd29yZDsKLQl9IHRtcDsKLQkJCi0JbG9vcHMgPSBjb3VudCAvIDMyOwkJCQkvKiAzMi1ieXRlIEZJRk8gKi8KLQlyZW1haW5kZXIgPSBjb3VudCAlIDMyOwotCi0JaWYobG9vcHMpIHsKLQkJZm9yKGk9MDsgaTxsb29wczsgaSsrKSB7Ci0JCQlpaWNfb3V0dyhhZGFwLCBJVEVfSTJDRkJDUiwgMzIpOwotCQkJaWYgKHNyZWFkKQotCQkJCWlpY19vdXR3KGFkYXAsIElURV9JMkNIQ1IsIElURV9TUkVBRCk7Ci0JCQllbHNlCi0JCQkJaWljX291dHcoYWRhcCwgSVRFX0kyQ0hDUiwgSVRFX1JFQUQpOwkJLyogSXNzdWUgUkVBRCBjb21tYW5kICovCi0KLQkJCXRpbWVvdXQgPSB3YWl0X2Zvcl9waW4oYWRhcCwgJnN0YXR1cyk7Ci0JCQlpZih0aW1lb3V0KSB7Ci0JCQkJaWljX3N0b3AoYWRhcCk7Ci0JCQkJcHJpbnRrKCJpaWNfcmVhZGJ5dGVzOiAgJXMgcmVhZCB0aW1lb3V0LlxuIiwgaTJjX2FkYXAtPm5hbWUpOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotI2lmbmRlZiBTVFVCX0kyQwotCQkJaWYgKHN0YXR1cyAmIElURV9JMkNIU1JfREIpIHsKLQkJCQlpaWNfc3RvcChhZGFwKTsKLQkJCQlwcmludGsoImlpY19yZWFkYnl0ZXM6ICVzIHJlYWQgZXJyb3IgLSBubyBhY2suXG4iLCBpMmNfYWRhcC0+bmFtZSk7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0jZW5kaWYKLQotCQkJdGltZW91dCA9IHdhaXRfZm9yX2ZlKGFkYXAsICZzdGF0dXMpOwotCQkJaWYodGltZW91dCkgewotCQkJCWlpY19zdG9wKGFkYXApOwotCQkJCXByaW50aygiaWljX3JlYWRieXRlczogICVzIEZJRk8gaXMgZW1wdHlcbiIsIGkyY19hZGFwLT5uYW1lKTsKLQkJCQlyZXR1cm4gKC0xKTsgCi0JCQl9Ci0KLQkJCWZvcihqPTA7IGo8MzIvMjsgaisrKSB7Ci0JCQkJdG1wLndvcmQgPSBpaWNfaW53KGFkYXAsIElURV9JMkNGRFIpOwotCQkJCWJ1ZltyZGNvdW50KytdID0gdG1wLmJ5dGVbMV07Ci0JCQkJYnVmW3JkY291bnQrK10gPSB0bXAuYnl0ZVswXTsKLQkJCX0KLQotCQkJLyogc3RhdHVzIEZJRk8gdW5kZXJydW4gKi8KLQkJCWlpY19pbncoYWRhcCwgSVRFX0kyQ0ZTUik7Ci0KLQkJfQotCX0KLQotCi0JaWYocmVtYWluZGVyKSB7Ci0JCXJlbWFpbmRlcj0ocmVtYWluZGVyKzEpLzIgKiAyOwotCQlpaWNfb3V0dyhhZGFwLCBJVEVfSTJDRkJDUiwgcmVtYWluZGVyKTsKLQkJaWYgKHNyZWFkKQotCQkJaWljX291dHcoYWRhcCwgSVRFX0kyQ0hDUiwgSVRFX1NSRUFEKTsKLQkJZWxzZQotCQlpaWNfb3V0dyhhZGFwLCBJVEVfSTJDSENSLCBJVEVfUkVBRCk7CQkvKiBJc3N1ZSBSRUFEIGNvbW1hbmQgKi8KLQotCQl0aW1lb3V0ID0gd2FpdF9mb3JfcGluKGFkYXAsICZzdGF0dXMpOwotCQlpZih0aW1lb3V0KSB7Ci0JCQlpaWNfc3RvcChhZGFwKTsKLQkJCXByaW50aygiaWljX3JlYWRieXRlczogICVzIHJlYWQgdGltZW91dC5cbiIsIGkyY19hZGFwLT5uYW1lKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0jaWZuZGVmIFNUVUJfSTJDCi0JCWlmIChzdGF0dXMgJiBJVEVfSTJDSFNSX0RCKSB7Ci0JCQlpaWNfc3RvcChhZGFwKTsKLQkJCXByaW50aygiaWljX3JlYWRieXRlczogJXMgcmVhZCBlcnJvciAtIG5vIGFjay5cbiIsIGkyY19hZGFwLT5uYW1lKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0jZW5kaWYKLQkJdGltZW91dCA9IHdhaXRfZm9yX2ZlKGFkYXAsICZzdGF0dXMpOwotCQlpZih0aW1lb3V0KSB7Ci0JCQlpaWNfc3RvcChhZGFwKTsKLQkJCXByaW50aygiaWljX3JlYWRieXRlczogICVzIEZJRk8gaXMgZW1wdHlcbiIsIGkyY19hZGFwLT5uYW1lKTsKLQkJCXJldHVybiAoLTEpOwotCQl9ICAgICAgICAgCi0KLQkJZm9yKGk9MDsgaTwocmVtYWluZGVyKzEpLzI7IGkrKykgewotCQkJdG1wLndvcmQgPSBpaWNfaW53KGFkYXAsIElURV9JMkNGRFIpOwotCQkJYnVmW3JkY291bnQrK10gPSB0bXAuYnl0ZVsxXTsKLQkJCWJ1ZltyZGNvdW50KytdID0gdG1wLmJ5dGVbMF07Ci0JCX0KLQotCQkvKiBzdGF0dXMgRklGTyB1bmRlcnJ1biAqLwotCQlpaWNfaW53KGFkYXAsIElURV9JMkNGU1IpOwotCi0JfQotCi0JaWljX3N0b3AoYWRhcCk7Ci0JcmV0dXJuIHJkY291bnQ7Ci19Ci0KLQotLyogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIGNvbWJpbmVkIHRyYW5zYWN0aW9ucy4gIENvbWJpbmVkCi0gKiB0cmFuc2FjdGlvbnMgY29uc2lzdCBvZiBjb21iaW5hdGlvbnMgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBibG9ja3Mgb2YgZGF0YS4KLSAqIEVhY2ggdHJhbnNmZXIgKGkuZS4gYSByZWFkIG9yIGEgd3JpdGUpIGlzIHNlcGFyYXRlZCBieSBhIHJlcGVhdGVkIHN0YXJ0Ci0gKiBjb25kaXRpb24uCi0gKi8KLSNpZiAwCi1zdGF0aWMgaW50IGlpY19jb21iaW5lZF90cmFuc2FjdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkgCi17Ci0gICBpbnQgaTsKLSAgIHN0cnVjdCBpMmNfbXNnICpwbXNnOwotICAgaW50IHJldDsKLQotICAgREVCMihwcmludGsoIkJlZ2lubmluZyBjb21iaW5lZCB0cmFuc2FjdGlvblxuIikpOwotCi0gICBmb3IoaT0wOyBpPChudW0tMSk7IGkrKykgewotICAgICAgcG1zZyA9ICZtc2dzW2ldOwotICAgICAgaWYocG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkgewotICAgICAgICAgREVCMihwcmludGsoIiAgVGhpcyBvbmUgaXMgYSByZWFkXG4iKSk7Ci0gICAgICAgICByZXQgPSBpaWNfcmVhZGJ5dGVzKGkyY19hZGFwLCBwbXNnLT5idWYsIHBtc2ctPmxlbiwgSUlDX0NPTUJJTkVEX1hGRVIpOwotICAgICAgfQotICAgICAgZWxzZSBpZighKHBtc2ctPmZsYWdzICYgSTJDX01fUkQpKSB7Ci0gICAgICAgICBERUIyKHByaW50aygiVGhpcyBvbmUgaXMgYSB3cml0ZVxuIikpOwotICAgICAgICAgcmV0ID0gaWljX3NlbmRieXRlcyhpMmNfYWRhcCwgcG1zZy0+YnVmLCBwbXNnLT5sZW4sIElJQ19DT01CSU5FRF9YRkVSKTsKLSAgICAgIH0KLSAgIH0KLSAgIC8qIExhc3QgcmVhZCBvciB3cml0ZSBzZWdtZW50IG5lZWRzIHRvIGJlIHRlcm1pbmF0ZWQgd2l0aCBhIHN0b3AgKi8KLSAgIHBtc2cgPSAmbXNnc1tpXTsKLQotICAgaWYocG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkgewotICAgICAgREVCMihwcmludGsoIkRvaW5nIHRoZSBsYXN0IHJlYWRcbiIpKTsKLSAgICAgIHJldCA9IGlpY19yZWFkYnl0ZXMoaTJjX2FkYXAsIHBtc2ctPmJ1ZiwgcG1zZy0+bGVuLCBJSUNfU0lOR0xFX1hGRVIpOwotICAgfQotICAgZWxzZSBpZighKHBtc2ctPmZsYWdzICYgSTJDX01fUkQpKSB7Ci0gICAgICBERUIyKHByaW50aygiRG9pbmcgdGhlIGxhc3Qgd3JpdGVcbiIpKTsKLSAgICAgIHJldCA9IGlpY19zZW5kYnl0ZXMoaTJjX2FkYXAsIHBtc2ctPmJ1ZiwgcG1zZy0+bGVuLCBJSUNfU0lOR0xFX1hGRVIpOwotICAgfQotCi0gICByZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLQotLyogV2hlbmV2ZXIgd2UgaW5pdGlhdGUgYSB0cmFuc2FjdGlvbiwgdGhlIGZpcnN0IGJ5dGUgY2xvY2tlZAotICogb250byB0aGUgYnVzIGFmdGVyIHRoZSBzdGFydCBjb25kaXRpb24gaXMgdGhlIGFkZHJlc3MgKDcgYml0KSBvZiB0aGUKLSAqIGRldmljZSB3ZSB3YW50IHRvIHRhbGsgdG8uICBUaGlzIGZ1bmN0aW9uIG1hbmlwdWxhdGVzIHRoZSBhZGRyZXNzIHNwZWNpZmllZAotICogc28gdGhhdCBpdCBtYWtlcyBzZW5zZSB0byB0aGUgaGFyZHdhcmUgd2hlbiB3cml0dGVuIHRvIHRoZSBJSUMgcGVyaXBoZXJhbC4KLSAqCi0gKiBOb3RlOiAxMCBiaXQgYWRkcmVzc2VzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZHJpdmVyLCBhbHRob3VnaCB0aGV5IGFyZQotICogc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4gIFRoaXMgZnVuY3Rpb25hbGl0eSBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgaWljX2RvQWRkcmVzcyhzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgKmFkYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpMmNfbXNnICptc2csIGludCByZXRyaWVzKSAKLXsKLQl1bnNpZ25lZCBzaG9ydCBmbGFncyA9IG1zZy0+ZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGFkZHI7Ci0JaW50IHJldDsKLQotLyogVGVuIGJpdCBhZGRyZXNzZXMgbm90IHN1cHBvcnRlZCByaWdodCBub3cgKi8KLQlpZiAoIChmbGFncyAmIEkyQ19NX1RFTikgICkgeyAKLSNpZiAwCi0JCWFkZHIgPSAweGYwIHwgKCggbXNnLT5hZGRyID4+IDcpICYgMHgwMyk7Ci0JCURFQjIocHJpbnRrKCJhZGRyMDogJWRcbiIsYWRkcikpOwotCQlyZXQgPSB0cnlfYWRkcmVzcyhhZGFwLCBhZGRyLCByZXRyaWVzKTsKLQkJaWYgKHJldCE9MSkgewotCQkJcHJpbnRrKCJpaWNfZG9BZGRyZXNzOiBkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZS5cbiIpOwotCQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0JCX0KLQkJaWljX291dHcoYWRhcCxtc2ctPmFkZHIgJiAweDdmKTsKLQkJaWYgKHJldCAhPSAxKSB7Ci0JCQlwcmludGsoImlpY19kb0FkZHJlc3M6IGRpZWQgYXQgMm5kIGFkZHJlc3MgY29kZS5cbiIpOwotCQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0JCX0KLQkJaWYgKCBmbGFncyAmIEkyQ19NX1JEICkgewotCQkJaTJjX3JlcHN0YXJ0KGFkYXApOwotCQkJYWRkciB8PSAweDAxOwotCQkJcmV0ID0gdHJ5X2FkZHJlc3MoYWRhcCwgYWRkciwgcmV0cmllcyk7Ci0JCQlpZiAocmV0IT0xKSB7Ci0JCQkJcHJpbnRrKCJpaWNfZG9BZGRyZXNzOiBkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZS5cbiIpOwotCQkJCXJldHVybiAtRVJFTU9URUlPOwotCQkJfQotCQl9Ci0jZW5kaWYKLQl9IGVsc2UgewotCi0JCWFkZHIgPSAoIG1zZy0+YWRkciA8PCAxICk7Ci0KLSNpZiAwCi0JCWlmIChmbGFncyAmIEkyQ19NX1JEICkKLQkJCWFkZHIgfD0gMTsKLQkJaWYgKGZsYWdzICYgSTJDX01fUkVWX0RJUl9BRERSICkKLQkJCWFkZHIgXj0gMTsKLSNlbmRpZgotCi0JCWlmIChpaWNfaW53KGFkYXAsIElURV9JMkNTQVIpICE9IGFkZHIpIHsKLQkJCWlpY19vdXR3KGFkYXAsIElURV9JMkNTQVIsIGFkZHIpOwotCQkJcmV0ID0gdHJ5X2FkZHJlc3MoYWRhcCwgYWRkciwgcmV0cmllcyk7Ci0JCQlpZiAocmV0IT0xKSB7Ci0JCQkJcHJpbnRrKCJpaWNfZG9BZGRyZXNzOiBkaWVkIGF0IGFkZHJlc3MgY29kZS5cbiIpOwotCQkJCXJldHVybiAtRVJFTU9URUlPOwotCQkJfQotCQl9Ci0KLSAgfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyogRGVzY3JpcHRpb246IFByZXBhcmVzIHRoZSBjb250cm9sbGVyIGZvciBhIHRyYW5zYWN0aW9uIChjbGVhcmluZyBzdGF0dXMKLSAqIHJlZ2lzdGVycywgZGF0YSBidWZmZXJzLCBldGMpLCBhbmQgdGhlbiBjYWxscyBlaXRoZXIgaWljX3JlYWRieXRlcyBvcgotICogaWljX3NlbmRieXRlcyB0byBkbyB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uLgotICoKLSAqIHN0aWxsIHRvIGJlIGRvbmU6IEJlZm9yZSB3ZSBpc3N1ZSBhIHRyYW5zYWN0aW9uLCB3ZSBzaG91bGQKLSAqIHZlcmlmeSB0aGF0IHRoZSBidXMgaXMgbm90IGJ1c3kgb3IgaW4gc29tZSB1bmtub3duIHN0YXRlLgotICovCi1zdGF0aWMgaW50IGlpY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCi0JCSAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgCi0JCSAgICBpbnQgbnVtKQotewotCXN0cnVjdCBpMmNfYWxnb19paWNfZGF0YSAqYWRhcCA9IGkyY19hZGFwLT5hbGdvX2RhdGE7Ci0Jc3RydWN0IGkyY19tc2cgKnBtc2c7Ci0JaW50IGkgPSAwOwotCWludCByZXQsIHRpbWVvdXQ7Ci0gICAgCi0JcG1zZyA9ICZtc2dzW2ldOwotCi0JaWYoIXBtc2ctPmxlbikgewotCQlERUIyKHByaW50aygiaWljX3hmZXI6IHJlYWQvd3JpdGUgbGVuZ3RoIGlzIDBcbiIpOykKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWlmKCEocG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkgJiYgKCEocG1zZy0+bGVuKSUyKSApIHsKLQkJREVCMihwcmludGsoImlpY194ZmVyOiB3cml0ZSBidWZmZXIgbGVuZ3RoIGlzIG5vdCBvZGRcbiIpOykKLQkJcmV0dXJuIC1FSU87IAotCX0KLQotCS8qIFdhaXQgZm9yIGFueSBwZW5kaW5nIHRyYW5zZmVycyB0byBjb21wbGV0ZSAqLwotCXRpbWVvdXQgPSB3YWl0X2Zvcl9iYihhZGFwKTsKLQlpZiAodGltZW91dCkgewotCQlERUIyKHByaW50aygiaWljX3hmZXI6IFRpbWVvdXQgd2FpdGluZyBmb3IgaG9zdCBub3QgYnVzeVxuIik7KQotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBGbHVzaCBGSUZPICovCi0JaWljX291dHcoYWRhcCwgSVRFX0kyQ0ZDUiwgSVRFX0kyQ0ZDUl9GTFVTSCk7Ci0KLQkvKiBMb2FkIGFkZHJlc3MgKi8KLQlyZXQgPSBpaWNfZG9BZGRyZXNzKGFkYXAsIHBtc2csIGkyY19hZGFwLT5yZXRyaWVzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gLUVJTzsKLQotI2lmIDAKLQkvKiBDb21iaW5lZCB0cmFuc2FjdGlvbiAocmVhZCBhbmQgd3JpdGUpICovCi0JaWYobnVtID4gMSkgewotICAgICAgICAgICBERUIyKHByaW50aygiaWljX3hmZXI6IENhbGwgY29tYmluZWQgdHJhbnNhY3Rpb25cbiIpKTsKLSAgICAgICAgICAgcmV0ID0gaWljX2NvbWJpbmVkX3RyYW5zYWN0aW9uKGkyY19hZGFwLCBtc2dzLCBudW0pOwotICB9Ci0jZW5kaWYKLQotCURFQjMocHJpbnRrKCJpaWNfeGZlcjogTXNnICVkLCBhZGRyPTB4JXgsIGZsYWdzPTB4JXgsIGxlbj0lZFxuIiwKLQkJaSwgbXNnc1tpXS5hZGRyLCBtc2dzW2ldLmZsYWdzLCBtc2dzW2ldLmxlbik7KQotCi0JaWYocG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkgCQkvKiBSZWFkICovCi0JCXJldCA9IGlpY19yZWFkYnl0ZXMoaTJjX2FkYXAsIHBtc2ctPmJ1ZiwgcG1zZy0+bGVuLCAwKTsKLQllbHNlIHsJCQkJCQkJCQkJCQkJLyogV3JpdGUgKi8gCi0JCXVkZWxheSgxMDAwKTsKLQkJcmV0ID0gaWljX3NlbmRieXRlcyhpMmNfYWRhcCwgcG1zZy0+YnVmLCBwbXNnLT5sZW4pOwotCX0KLQotCWlmIChyZXQgIT0gcG1zZy0+bGVuKQotCQlERUIzKHByaW50aygiaWljX3hmZXI6IGVycm9yIG9yIGZhaWwgb24gcmVhZC93cml0ZSAlZCBieXRlcy5cbiIscmV0KSk7IAotCWVsc2UKLQkJREVCMyhwcmludGsoImlpY194ZmVyOiByZWFkL3dyaXRlICVkIGJ5dGVzLlxuIixyZXQpKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyogSW1wbGVtZW50cyBkZXZpY2Ugc3BlY2lmaWMgaW9jdGxzLiAgSGlnaGVyIGxldmVsIGlvY3RscyBjYW4KLSAqIGJlIGZvdW5kIGluIGkyYy1jb3JlLmMgYW5kIGFyZSB0eXBpY2FsIG9mIGFueSBpMmMgY29udHJvbGxlciAoc3BlY2lmeWluZwotICogc2xhdmUgYWRkcmVzcywgdGltZW91dHMsIGV0YykuICBUaGVzZSBpb2N0bHMgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IGhhcmR3YXJlCi0gKiBmZWF0dXJlcyBidWlsdCBpbnRvIHRoZSBjb250cm9sbGVyIGZvciB3aGljaCB0aGlzIGFsZ29yaXRobS1hZGFwdGVyIHNldAotICogd2FzIHdyaXR0ZW4uICBUaGVzZSBpb2N0bHMgYWxsb3cgeW91IHRvIHRha2UgY29udHJvbCBvZiB0aGUgZGF0YSBhbmQgY2xvY2sKLSAqIGxpbmVzIGFuZCBzZXQgdGhlIGVpdGhlciBoaWdoIG9yIGxvdywKLSAqIHNpbWlsYXIgdG8gYSBHUElPIHBpbi4KLSAqLwotc3RhdGljIGludCBhbGdvX2NvbnRyb2woc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCAKLQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQotICBzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgKmFkYXAgPSBhZGFwdGVyLT5hbGdvX2RhdGE7Ci0gIHN0cnVjdCBpMmNfaWljX21zZyBzX21zZzsKLSAgY2hhciAqYnVmOwotCWludCByZXQ7Ci0KLSAgaWYgKGNtZCA9PSBJMkNfU1JFQUQpIHsKLQkJaWYoY29weV9mcm9tX3VzZXIoJnNfbXNnLCAoc3RydWN0IGkyY19paWNfbXNnICopYXJnLCAKLQkJCQlzaXplb2Yoc3RydWN0IGkyY19paWNfbXNnKSkpIAotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJ1ZiA9IGttYWxsb2Moc19tc2cubGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGJ1Zj09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQkvKiBGbHVzaCBGSUZPICovCi0JCWlpY19vdXR3KGFkYXAsIElURV9JMkNGQ1IsIElURV9JMkNGQ1JfRkxVU0gpOwotCi0JCS8qIExvYWQgYWRkcmVzcyAqLwotCQlpaWNfb3V0dyhhZGFwLCBJVEVfSTJDU0FSLHNfbXNnLmFkZHI8PDEpOwotCQlpaWNfb3V0dyhhZGFwLCBJVEVfSTJDU1NBUixzX21zZy53YWRkciAmIDB4ZmYpOwotCi0JCXJldCA9IGlpY19yZWFkYnl0ZXMoYWRhcHRlciwgYnVmLCBzX21zZy5sZW4sIDEpOwotCQlpZiAocmV0Pj0wKSB7Ci0JCQlpZihjb3B5X3RvX3VzZXIoIHNfbXNnLmJ1ZiwgYnVmLCBzX21zZy5sZW4pICkgCi0JCQkJcmV0ID0gLUVGQVVMVDsKLQkJfQotCQlrZnJlZShidWYpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdTMyIGlpY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTCB8IEkyQ19GVU5DXzEwQklUX0FERFIgfCAKLQkgICAgICAgSTJDX0ZVTkNfUFJPVE9DT0xfTUFOR0xJTkc7IAotfQotCi0vKiAtLS0tLWV4cG9ydGVkIGFsZ29yaXRobSBkYXRhOiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpaWNfYWxnbyA9IHsKLQkubWFzdGVyX3hmZXIJPSBpaWNfeGZlciwKLQkuYWxnb19jb250cm9sCT0gYWxnb19jb250cm9sLCAvKiBpb2N0bCAqLwotCS5mdW5jdGlvbmFsaXR5CT0gaWljX2Z1bmMsCi19OwotCi0KLS8qIAotICogcmVnaXN0ZXJpbmcgZnVuY3Rpb25zIHRvIGxvYWQgYWxnb3JpdGhtcyBhdCBydW50aW1lIAotICovCi1pbnQgaTJjX2lpY19hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgKmlpY19hZGFwID0gYWRhcC0+YWxnb19kYXRhOwotCi0JaWYgKGlpY190ZXN0KSB7Ci0JCWludCByZXQgPSB0ZXN0X2J1cyhpaWNfYWRhcCwgYWRhcC0+bmFtZSk7Ci0JCWlmIChyZXQ8MCkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCURFQjIocHJpbnRrKCJpMmMtYWxnby1pdGU6IGh3IHJvdXRpbmVzIGZvciAlcyByZWdpc3RlcmVkLlxuIiwKLQkgICAgICAgICAgICBhZGFwLT5uYW1lKSk7Ci0KLQkvKiByZWdpc3RlciBuZXcgYWRhcHRlciB0byBpMmMgbW9kdWxlLi4uICovCi0JYWRhcC0+YWxnbyA9ICZpaWNfYWxnbzsKLQotCWFkYXAtPnRpbWVvdXQgPSAxMDA7CS8qIGRlZmF1bHQgdmFsdWVzLCBzaG91bGQJKi8KLQlhZGFwLT5yZXRyaWVzID0gMzsJCS8qIGJlIHJlcGxhY2VkIGJ5IGRlZmluZXMJKi8KLQlhZGFwLT5mbGFncyA9IDA7Ci0KLQlpaWNfaW5pdChpaWNfYWRhcCk7Ci0JcmV0dXJuIGkyY19hZGRfYWRhcHRlcihhZGFwKTsKLX0KLQotCi1pbnQgaTJjX2lpY19kZWxfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlpbnQgcmVzOwotCWlmICgocmVzID0gaTJjX2RlbF9hZGFwdGVyKGFkYXApKSA8IDApCi0JCXJldHVybiByZXM7Ci0JREVCMihwcmludGsoImkyYy1hbGdvLWl0ZTogYWRhcHRlciB1bnJlZ2lzdGVyZWQ6ICVzXG4iLGFkYXAtPm5hbWUpKTsKLQotCXJldHVybiAwOwotfQotCi0KLWludCBfX2luaXQgaTJjX2FsZ29faWljX2luaXQgKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiSVRFIGlpYyAoaTJjKSBhbGdvcml0aG0gbW9kdWxlXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotCi12b2lkIGkyY19hbGdvX2lpY19leGl0KHZvaWQpCi17Ci0JcmV0dXJuOwotfQotCi0KLUVYUE9SVF9TWU1CT0woaTJjX2lpY19hZGRfYnVzKTsKLUVYUE9SVF9TWU1CT0woaTJjX2lpY19kZWxfYnVzKTsKLQotLyogVGhlIE1PRFVMRV8qIG1hY3JvcyByZXNvbHZlIHRvIG5vdGhpbmcgaWYgTU9EVUxFUyBpcyBub3QgZGVmaW5lZAotICogd2hlbiB0aGlzIGZpbGUgaXMgY29tcGlsZWQuCi0gKi8KLU1PRFVMRV9BVVRIT1IoIk1vbnRhVmlzdGEgU29mdHdhcmUgPHd3dy5tdmlzdGEuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJVEUgaWljIGFsZ29yaXRobSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaWljX3Rlc3QsIGJvb2wsIDApOwotbW9kdWxlX3BhcmFtKGkyY19kZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci0KLU1PRFVMRV9QQVJNX0RFU0MoaWljX3Rlc3QsICJUZXN0IGlmIHRoZSBJMkMgYnVzIGlzIGF2YWlsYWJsZSIpOwotTU9EVUxFX1BBUk1fREVTQyhpMmNfZGVidWcsCi0gICAgICAgICJkZWJ1ZyBsZXZlbCAtIDAgb2ZmOyAxIG5vcm1hbDsgMiwzIG1vcmUgdmVyYm9zZTsgOSBpaWMtcHJvdG9jb2wiKTsKLQotCi0vKiBUaGlzIGZ1bmN0aW9uIHJlc29sdmVzIHRvIGluaXRfbW9kdWxlICh0aGUgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGEgbW9kdWxlCi0gKiBpcyBsb2FkZWQgdmlhIGluc21vZCkgd2hlbiB0aGlzIGZpbGUgaXMgY29tcGlsZWQgd2l0aCBNT0RVTEVTIGRlZmluZWQuCi0gKiBPdGhlcndpc2UgKGkuZS4gaWYgeW91IHdhbnQgdGhpcyBkcml2ZXIgc3RhdGljYWxseSBsaW5rZWQgdG8gdGhlIGtlcm5lbCksCi0gKiBhIHBvaW50ZXIgdG8gdGhpcyBmdW5jdGlvbiBpcyBzdG9yZWQgaW4gYSB0YWJsZSBhbmQgY2FsbGVkCi0gKiBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBrZXJuZWwgKGluIGRvX2Jhc2ljX3NldHVwIGluIC9pbml0L21haW4uYykgCi0gKgotICogQWxsIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjb21wbGVtZW50cyBvZiB0aGUgbWFjcm9zIGRlZmluZWQgaW4gbGludXgvaW5pdC5oCi0gKi8KLW1vZHVsZV9pbml0KGkyY19hbGdvX2lpY19pbml0KTsKLQotCi0vKiBJZiBNT0RVTEVTIGlzIGRlZmluZWQgd2hlbiB0aGlzIGZpbGUgaXMgY29tcGlsZWQsIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsCi0gKiByZXNvbHZlZCB0byBjbGVhbnVwX21vZHVsZS4KLSAqLwotbW9kdWxlX2V4aXQoaTJjX2FsZ29faWljX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28taXRlLmggYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1pdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjYTNjOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1pdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGkyYy1pdGUuaDogR2xvYmFsIGRlZmluZXMgZm9yIHRoZSBJMkMgY29udHJvbGxlciBvbiBib2FyZCB0aGUgICAgCi0gICAgICAgICAgICAgICAgIElURSBNSVBTIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIEhhaS1QYW8gRmFuLCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gICBocGZhbkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0KLSAgIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqLwotCi0jaWZuZGVmIEkyQ19JVEVfSAotI2RlZmluZSBJMkNfSVRFX0ggMQotCi0jaW5jbHVkZSA8YXNtL2l0ODE3Mi9pdDgxNzIuaD4KLQotLyogSTJDIFJlZ2lzdGVycyAqLwotI2RlZmluZSBJVEVfSTJDSENSCUlUODE3Ml9QQ0lfSU9fQkFTRSArIElUX0kyQ19CQVNFICsgMHgzMAotI2RlZmluZSBJVEVfSTJDSFNSCUlUODE3Ml9QQ0lfSU9fQkFTRSArIElUX0kyQ19CQVNFICsgMHgzNAotI2RlZmluZSBJVEVfSTJDU0FSCUlUODE3Ml9QQ0lfSU9fQkFTRSArIElUX0kyQ19CQVNFICsgMHgzOAotI2RlZmluZSBJVEVfSTJDU1NBUglJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9JMkNfQkFTRSArIDB4M2MKLSNkZWZpbmUgSVRFX0kyQ0NLQ05UCUlUODE3Ml9QQ0lfSU9fQkFTRSArIElUX0kyQ19CQVNFICsgMHg0OAotI2RlZmluZSBJVEVfSTJDU0hEUglJVDgxNzJfUENJX0lPX0JBU0UgKyBJVF9JMkNfQkFTRSArIDB4NGMKLSNkZWZpbmUgSVRFX0kyQ1JTVVIJSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfSTJDX0JBU0UgKyAweDUwCi0jZGVmaW5lIElURV9JMkNQU1VSCUlUODE3Ml9QQ0lfSU9fQkFTRSArIElUX0kyQ19CQVNFICsgMHg1NAotCi0jZGVmaW5lIElURV9JMkNGRFIJSVQ4MTcyX1BDSV9JT19CQVNFICsgSVRfSTJDX0JBU0UgKyAweDcwCi0jZGVmaW5lIElURV9JMkNGQkNSCUlUODE3Ml9QQ0lfSU9fQkFTRSArIElUX0kyQ19CQVNFICsgMHg3NAotI2RlZmluZSBJVEVfSTJDRkNSCUlUODE3Ml9QQ0lfSU9fQkFTRSArIElUX0kyQ19CQVNFICsgMHg3OAotI2RlZmluZSBJVEVfSTJDRlNSCUlUODE3Ml9QQ0lfSU9fQkFTRSArIElUX0kyQ19CQVNFICsgMHg3YwotCi0KLS8qIEhvc3QgQ29udHJvbCBSZWdpc3RlciBJVEVfSTJDSENSICovCi0jZGVmaW5lCUlURV9JMkNIQ1JfSENFCTB4MDEJLyogRW5hYmxlIEkyQyBIb3N0IENvbnRyb2xsZXIgKi8KLSNkZWZpbmUJSVRFX0kyQ0hDUl9JRQkweDAyCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0IGFmdGVyIGNvbXBsZXRpbmcKLQkJCQkgICB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAqLwotI2RlZmluZSBJVEVfSTJDSENSX0NQX1cJMHgwMAkvKiBiaXQyLTQgMDAwIC0gV3JpdGUgKi8KLSNkZWZpbmUJSVRFX0kyQ0hDUl9DUF9SCTB4MDgJLyoJICAwMTAgLSBDdXJyZW50IGFkZHJlc3MgcmVhZCAqLwotI2RlZmluZQlJVEVfSTJDSENSX0NQX1MJMHgxMAkvKgkgIDEwMCAtIFNlcXVlbnRpYWwgcmVhZCAqLwotI2RlZmluZSBJVEVfSTJDSENSX1NUCTB4MjAJLyogSW5pdGlhdGVzIHRoZSBJMkMgaG9zdCBjb250cm9sbGVyIHRvIGV4ZWN1dGUKLQkJCQkgICB0aGUgY29tbWFuZCBhbmQgc2VuZCB0aGUgZGF0YSBwcm9ncmFtbWVkIGluCi0JCQkJICAgYWxsIHJlcXVpcmVkIHJlZ2lzdGVycyB0byBJMkMgYnVzICovCi0jZGVmaW5lIElURV9DTUQJCUlURV9JMkNIQ1JfSENFIHwgSVRFX0kyQ0hDUl9JRSB8IElURV9JMkNIQ1JfU1QKLSNkZWZpbmUgSVRFX1dSSVRFCUlURV9DTUQgfCBJVEVfSTJDSENSX0NQX1cKLSNkZWZpbmUgSVRFX1JFQUQJSVRFX0NNRCB8IElURV9JMkNIQ1JfQ1BfUgotI2RlZmluZSBJVEVfU1JFQUQJSVRFX0NNRCB8IElURV9JMkNIQ1JfQ1BfUwotCi0vKiBIb3N0IFN0YXR1cyBSZWdpc3RlciBJVEVfSTJDSFNSICovCi0jZGVmaW5lCUlURV9JMkNIU1JfREIJMHgwMQkvKiBEZXZpY2UgaXMgYnVzeSwgcmVjZWl2ZXMgTkFDSyByZXNwb25zZSBleGNlcHQKLQkJCQkgICBpbiB0aGUgZmlyc3QgYW5kIGxhc3QgYnl0ZXMgKi8KLSNkZWZpbmUJSVRFX0kyQ0hTUl9ETkUJMHgwMgkvKiBUYXJnZXQgYWRkcmVzcyBvbiBJMkMgYnVzIGRvZXMgbm90IGV4aXN0ICovCi0jZGVmaW5lCUlURV9JMkNIU1JfVERJCTB4MDQJLyogUi9XIFRyYW5zYWN0aW9uIG9uIEkyQyBidXMgd2FzIGNvbXBsZXRlZCAqLwotI2RlZmluZQlJVEVfSTJDSFNSX0hCCTB4MDgJLyogSG9zdCBjb250cm9sbGVyIGlzIHByb2Nlc3NpbmcgdHJhbnNhY3Rpb25zICovCi0jZGVmaW5lCUlURV9JMkNIU1JfRkVSCTB4MTAJLyogRXJyb3Igb2NjdXJzIGluIHRoZSBGSUZPICovCi0KLS8qIFNsYXZlIEFkZHJlc3MgUmVnaXN0ZXIgSVRFX0kyQ1NBUiAqLwotI2RlZmluZQlJVEVfSTJDU0FSX1NBX01BU0sJMHhmZQkvKiBUYXJnZXQgSTJDIGRldmljZSBhZGRyZXNzICovCi0jZGVmaW5lCUlURV9JMkNTQVJfQVNPCQkweDAxMDAJLyogT3V0cHV0IDEvMCB0byBJMkNBUyBwb3J0IHdoZW4gdGhlCi0JCQkJCSAgIG5leHQgc2xhdmUgYWRkcmVzcyBpcyBhZGRyZXNzZWQgKi8KLQotLyogU2xhdmUgU3ViLWFkZHJlc3MgUmVnaXN0ZXIgSVRFX0kyQ1NTQVIgKi8KLSNkZWZpbmUJSVRFX0kyQ1NTQVJfU1VCQV9NQVNLCTB4ZmYJLyogVGFyZ2V0IEkyQyBkZXZpY2Ugc3ViLWFkZHJlc3MgKi8KLQotLyogQ2xvY2sgQ291bnRlciBSZWdpc3RlciBJVEVfSTJDQ0tDTlQgKi8KLSNkZWZpbmUJSVRFX0kyQ0NLQ05UX1NUT1AJMHgwMAkvKiBzdG9wIEkyQyBjbG9jayAqLwotI2RlZmluZQlJVEVfSTJDQ0tDTlRfSFBDQ19NQVNLCTB4N2YJLyogU0NMIGhpZ2ggcGVyaW9kIGNvdW50ZXIgKi8KLSNkZWZpbmUJSVRFX0kyQ0NLQ05UX0xQQ0NfTUFTSwkweDdmMDAJLyogU0NMIGxvdyBwZXJpb2QgY291bnRlciAqLwotCi0vKiBTVEFSVCBIb2xkIFRpbWUgUmVnaXN0ZXIgSVRFX0kyQ1NIRFIgKi8KLS8qIHZhbHVlIGlzIGNvdW50ZWQgYmFzZWQgb24gMTYgTUh6IGludGVybmFsIGNsb2NrICovCi0jZGVmaW5lIElURV9JMkNTSERSX0ZNCTB4MGEJLyogU1RBUlQgY29uZGl0aW9uIGF0IGZhc3QgbW9kZSAqLwotI2RlZmluZQlJVEVfSTJDU0hEUl9TTQkweDQ3CS8qIFNUQVJUIGNvbnRpdGlvbiBhdCBzdGFuZGFyZCBtb2RlICovCi0KLS8qIChSZXBlYXRlZCkgU1RBUlQgU2V0dXAgVGltZSBSZWdpc3RlciBJVEVfSTJDUlNVUiAqLwotLyogdmFsdWUgaXMgY291bnRlZCBiYXNlZCBvbiAxNiBNSHogaW50ZXJuYWwgY2xvY2sgKi8KLSNkZWZpbmUJSVRFX0kyQ1JTVVJfRk0JMHgwYQkvKiByZXBlYXRlZCBTVEFSVCBjb25kaXRpb24gYXQgZmFzdCBtb2RlICovCi0jZGVmaW5lCUlURV9JMkNSU1VSX1NNCTB4NTAJLyogcmVwZWF0ZWQgU1RBUlQgY29uZGl0aW9uIGF0IHN0YW5kYXJkIG1vZGUgKi8KLQotLyogU1RPUCBzZXR1cCBUaW1lIFJlZ2lzdGVyIElURV9JMkNQU1VSICovCi0KLS8qIEZJRk8gRGF0YSBSZWdpc3RlciBJVEVfSTJDRkRSICovCi0jZGVmaW5lCUlURV9JMkNGRFJfTUFTSwkJMHhmZgotCi0vKiBGSUZPIEJ5dGUgQ291bnQgUmVnaXN0ZXIgSVRFX0kyQ0ZCQ1IgKi8KLSNkZWZpbmUgSVRFX0kyQ0ZCQ1JfTUFTSwkweDNmCi0KLS8qIEZJRk8gQ29udHJvbCBSZWdpc3RlciBJVEVfSTJDRkNSICovCi0jZGVmaW5lCUlURV9JMkNGQ1JfRkxVU0gJMHgwMQkvKiBGbHVzaCBGSUZPIGFuZCByZXNldCB0aGUgRklGTyBwb2ludAotCQkJCQkgICBhbmQgSTJDRlNSICovCi0vKiBGSUZPIFN0YXR1cyBSZWdpc3RlciBJVEVfSTJDRlNSICovCi0jZGVmaW5lCUlURV9JMkNGU1JfRk8JMHgwMQkvKiBGSUZPIGlzIG92ZXJydW4gd2hlbiB3cml0ZSAqLwotI2RlZmluZQlJVEVfSTJDRlNSX0ZVCTB4MDIJLyogRklGTyBpcyB1bmRlcnJ1biB3aGVuIHJlYWQgKi8KLSNkZWZpbmUJSVRFX0kyQ0ZTUl9GRgkweDA0CS8qIEZJRk8gaXMgZnVsbCB3aGVuIHdyaXRlICovCi0jZGVmaW5lCUlURV9JMkNGU1JfRkUJMHgwOAkvKiBGSUZPIGlzIGVtcHR5IHdoZW4gcmVhZCAqLwotCi0jZW5kaWYgIC8qIEkyQ19JVEVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYwppbmRleCA5MDgxYzlmLi4zNmZkZjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYwpAQCAtMzgxLDE0ICszODEsNyBAQAogCiAJcmV0dXJuIHJ2YWw7CiB9Ci0KLWludCBpMmNfcGNhX2RlbF9idXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQotewotCXJldHVybiBpMmNfZGVsX2FkYXB0ZXIoYWRhcCk7Ci19Ci0KIEVYUE9SVF9TWU1CT0woaTJjX3BjYV9hZGRfYnVzKTsKLUVYUE9SVF9TWU1CT0woaTJjX3BjYV9kZWxfYnVzKTsKIAogTU9EVUxFX0FVVEhPUigiSWFuIENhbXBiZWxsIDxpY2FtcGJlbGxAYXJjb20uY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMtQnVzIFBDQTk1NjQgYWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2YuYyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jCmluZGV4IDNiMjAwMzMuLmVjYjJjMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jCkBAIC00ODYsMTUgKzQ4Niw3IEBACiAKIAlyZXR1cm4gcnZhbDsKIH0KLQotCi1pbnQgaTJjX3BjZl9kZWxfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlyZXR1cm4gaTJjX2RlbF9hZGFwdGVyKGFkYXApOwotfQotCiBFWFBPUlRfU1lNQk9MKGkyY19wY2ZfYWRkX2J1cyk7Ci1FWFBPUlRfU1lNQk9MKGkyY19wY2ZfZGVsX2J1cyk7CiAKIE1PRFVMRV9BVVRIT1IoIkhhbnMgQmVyZ2x1bmQgPGhiQHNwYWNldGVjLm5vPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMtQnVzIFBDRjg1ODQgYWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1zZ2kuYyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXNnaS5jCmluZGV4IDQ5MGQ5OTkuLmFjMmQ1MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXNnaS5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXNnaS5jCkBAIC0xNzEsMTUgKzE3MSw3IEBACiAKIAlyZXR1cm4gaTJjX2FkZF9hZGFwdGVyKGFkYXApOwogfQotCi0KLWludCBpMmNfc2dpX2RlbF9idXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQotewotCXJldHVybiBpMmNfZGVsX2FkYXB0ZXIoYWRhcCk7Ci19Ci0KIEVYUE9SVF9TWU1CT0woaTJjX3NnaV9hZGRfYnVzKTsKLUVYUE9SVF9TWU1CT0woaTJjX3NnaV9kZWxfYnVzKTsKIAogTU9EVUxFX0FVVEhPUigiTGFkaXNsYXYgTWljaGwgPGxhZGlzQGxpbnV4LW1pcHMub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMtQnVzIFNHSSBhbGdvcml0aG0iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggOTBmOTFkMC4uOTM2N2M0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTc0LDYgKzc0LDEzIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtYW1kODExMS4KIAorY29uZmlnIEkyQ19BVDkxCisJdHJpc3RhdGUgIkF0bWVsIEFUOTEgSTJDIFR3by1XaXJlIGludGVyZmFjZSAoVFdJKSIKKwlkZXBlbmRzIG9uIEkyQyAmJiBBUkNIX0FUOTEgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgVGhpcyBzdXBwb3J0cyB0aGUgdXNlIG9mIHRoZSBJMkMgaW50ZXJmYWNlIG9uIEF0bWVsIEFUOTEKKwkgIHByb2Nlc3NvcnMuCisKIGNvbmZpZyBJMkNfQVUxNTUwCiAJdHJpc3RhdGUgIkF1MTU1MC9BdTEyMDAgU01CdXMgaW50ZXJmYWNlIgogCWRlcGVuZHMgb24gSTJDICYmIChTT0NfQVUxNTUwIHx8IFNPQ19BVTEyMDApCkBAIC0yMDksMTggKzIxNiw2IEBACiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIEkyQwogCi1jb25maWcgSTJDX0lURQotCXRyaXN0YXRlICJJVEUgSTJDIEFkYXB0ZXIiCi0JZGVwZW5kcyBvbiBJMkMgJiYgTUlQU19JVEU4MTcyCi0Jc2VsZWN0IEkyQ19BTEdPSVRFCi0JaGVscAotCSAgVGhpcyBzdXBwb3J0cyB0aGUgSVRFODE3MiBJMkMgcGVyaXBoZXJhbCBmb3VuZCBvbiBzb21lIE1JUFMKLQkgIHN5c3RlbXMuIFNheSBZIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZS4gWW91IHNob3VsZCBhbHNvIHNheSBZIGZvcgotCSAgdGhlIElURSBJMkMgZHJpdmVyIGFsZ29yaXRobSBzdXBwb3J0IGFib3ZlLgotCi0JICBUaGlzIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZSAKLQkgIHdpbGwgYmUgY2FsbGVkIGkyYy1pdGUuCi0KIGNvbmZpZyBJMkNfSVhQNFhYCiAJdHJpc3RhdGUgIklYUDR4eCBHUElPLUJhc2VkIEkyQyBJbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBJMkMgJiYgQVJDSF9JWFA0WFgKQEAgLTQ4MSw2ICs0NzYsMTcgQEAKIAogCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBkZWZpbml0ZWx5IHNheSBOLgogCitjb25maWcgSTJDX1ZFUlNBVElMRQorCXRyaXN0YXRlICJBUk0gVmVyc2F0aWxlL1JlYWx2aWV3IEkyQyBidXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEkyQyAmJiAoQVJDSF9WRVJTQVRJTEUgfHwgQVJDSF9SRUFMVklFVykKKwlzZWxlY3QgSTJDX0FMR09CSVQKKwloZWxwCisJICBTYXkgeWVzIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIEkyQyBzZXJpYWwgYnVzIG9uIEFSTXMgVmVyc2F0aWxlCisJICByYW5nZSBvZiBwbGF0Zm9ybXMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGkyYy12ZXJzYXRpbGUuCisKIGNvbmZpZyBJMkNfVklBCiAJdHJpc3RhdGUgIlZJQSA4MkM1ODZCIgogCWRlcGVuZHMgb24gSTJDICYmIFBDSSAmJiBFWFBFUklNRU5UQUwKQEAgLTU0OCw0ICs1NTQsMTQgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1tdjY0eHh4LgogCitjb25maWcgSTJDX1BOWAorCXRyaXN0YXRlICJJMkMgYnVzIHN1cHBvcnQgZm9yIFBoaWxpcHMgUE5YIHRhcmdldHMiCisJZGVwZW5kcyBvbiBBUkNIX1BOWDQwMDggJiYgSTJDCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFBoaWxpcHMgSVAzMjA0IEkyQyBJUCBibG9jayBtYXN0ZXIgYW5kL29yCisJICBzbGF2ZSBjb250cm9sbGVyCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGkyYy1wbnguCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQppbmRleCA0OTNjODcyLi4zNzE5NmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogb2JqLSQoQ09ORklHX0kyQ19BTUQ3NTYpCSs9IGkyYy1hbWQ3NTYubwogb2JqLSQoQ09ORklHX0kyQ19BTUQ3NTZfUzQ4ODIpCSs9IGkyYy1hbWQ3NTYtczQ4ODIubwogb2JqLSQoQ09ORklHX0kyQ19BTUQ4MTExKQkrPSBpMmMtYW1kODExMS5vCitvYmotJChDT05GSUdfSTJDX0FUOTEpCQkrPSBpMmMtYXQ5MS5vCiBvYmotJChDT05GSUdfSTJDX0FVMTU1MCkJKz0gaTJjLWF1MTU1MC5vCiBvYmotJChDT05GSUdfSTJDX0VMRUtUT1IpCSs9IGkyYy1lbGVrdG9yLm8KIG9iai0kKENPTkZJR19JMkNfSFlEUkEpCQkrPSBpMmMtaHlkcmEubwpAQCAtMTYsNyArMTcsNiBAQAogb2JqLSQoQ09ORklHX0kyQ19JQk1fSUlDKQkrPSBpMmMtaWJtX2lpYy5vCiBvYmotJChDT05GSUdfSTJDX0lPUDNYWCkJKz0gaTJjLWlvcDN4eC5vCiBvYmotJChDT05GSUdfSTJDX0lTQSkJCSs9IGkyYy1pc2Eubwotb2JqLSQoQ09ORklHX0kyQ19JVEUpCQkrPSBpMmMtaXRlLm8KIG9iai0kKENPTkZJR19JMkNfSVhQMjAwMCkJKz0gaTJjLWl4cDIwMDAubwogb2JqLSQoQ09ORklHX0kyQ19JWFA0WFgpCSs9IGkyYy1peHA0eHgubwogb2JqLSQoQ09ORklHX0kyQ19QT1dFUk1BQykJKz0gaTJjLXBvd2VybWFjLm8KQEAgLTI5LDYgKzI5LDcgQEAKIG9iai0kKENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCkJKz0gaTJjLXBhcnBvcnQtbGlnaHQubwogb2JqLSQoQ09ORklHX0kyQ19QQ0FfSVNBKQkrPSBpMmMtcGNhLWlzYS5vCiBvYmotJChDT05GSUdfSTJDX1BJSVg0KQkJKz0gaTJjLXBpaXg0Lm8KK29iai0kKENPTkZJR19JMkNfUE5YKQkJKz0gaTJjLXBueC5vCiBvYmotJChDT05GSUdfSTJDX1BST1NBVkFHRSkJKz0gaTJjLXByb3NhdmFnZS5vCiBvYmotJChDT05GSUdfSTJDX1BYQSkJCSs9IGkyYy1weGEubwogb2JqLSQoQ09ORklHX0kyQ19SUFhMSVRFKQkrPSBpMmMtcnB4Lm8KQEAgLTM5LDYgKzQwLDcgQEAKIG9iai0kKENPTkZJR19JMkNfU0lTNjMwKQkrPSBpMmMtc2lzNjMwLm8KIG9iai0kKENPTkZJR19JMkNfU0lTOTZYKQkrPSBpMmMtc2lzOTZ4Lm8KIG9iai0kKENPTkZJR19JMkNfU1RVQikJCSs9IGkyYy1zdHViLm8KK29iai0kKENPTkZJR19JMkNfVkVSU0FUSUxFKQkrPSBpMmMtdmVyc2F0aWxlLm8KIG9iai0kKENPTkZJR19JMkNfVklBKQkJKz0gaTJjLXZpYS5vCiBvYmotJChDT05GSUdfSTJDX1ZJQVBSTykJKz0gaTJjLXZpYXByby5vCiBvYmotJChDT05GSUdfSTJDX1ZPT0RPTzMpCSs9IGkyYy12b29kb28zLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTU2My5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMKaW5kZXggMzNmYmI0Ny4uOGUxZTNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMKQEAgLTIsNyArMiw3IEBACiAgKglpMmMtYWxpMTU2My5jIC0gaTJjIGRyaXZlciBmb3IgdGhlIEFMaSAxNTYzIFNvdXRoYnJpZGdlCiAgKgogICoJQ29weXJpZ2h0IChDKSAyMDA0IFBhdHJpY2sgTW9jaGVsCi0gKgkJICAgICAgMjAwNSBSdWRvbGYgTWFyZWsgPHIubWFyZWtAc2guY3Z1dC5jej4KKyAqCQkgICAgICAyMDA1IFJ1ZG9sZiBNYXJlayA8ci5tYXJla0Bhc3NlbWJsZXIuY3o+CiAgKgogICoJVGhlIDE1NjMgc291dGhicmlkZ2UgaXMgZGVjZXB0aXZlbHkgc2ltaWxhciB0byB0aGUgMTUzMywgd2l0aCBhCiAgKglmZXcgbm90YWJsZSBleGNlcHRpb25zLiBPbmUgb2YgdGhvc2UgaGFwcGVucyB0byBiZSB0aGUgZmFjdCB0aGV5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWF0OTEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYXQ5MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZjkxYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWF0OTEuYwpAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAgICBpMmMgU3VwcG9ydCBmb3IgQXRtZWwncyBBVDkxIFR3by1XaXJlIEludGVyZmFjZSAoVFdJKQorCisgICAgQ29weXJpZ2h0IChDKSAyMDA0IFJpY2sgQnJvbnNvbgorICAgIENvbnZlcnRlZCB0byAyLjYgYnkgQW5kcmV3IFZpY3RvciA8YW5kcmV3QHNhbnBlb3BsZS5jb20+CisKKyAgICBCb3Jyb3dlZCBoZWF2aWx5IGZyb20gb3JpZ2luYWwgd29yayBieToKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgUGhpbGlwIEVkZWxicm9jayA8cGhpbEBzdGltcHkubmV0cm9lZGdlLmNvbT4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3R3aS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CisKKyNkZWZpbmUgVFdJX0NMT0NLCQkxMDAwMDAJCS8qIEh6LiBtYXggNDAwIEtiaXRzL3NlYyAqLworCisKK3N0YXRpYyBzdHJ1Y3QgY2xrICp0d2lfY2xrOworc3RhdGljIHZvaWQgX19pb21lbSAqdHdpX2Jhc2U7CisKKyNkZWZpbmUgYXQ5MV90d2lfcmVhZChyZWcpCQlfX3Jhd19yZWFkbCh0d2lfYmFzZSArIChyZWcpKQorI2RlZmluZSBhdDkxX3R3aV93cml0ZShyZWcsIHZhbCkJX19yYXdfd3JpdGVsKCh2YWwpLCB0d2lfYmFzZSArIChyZWcpKQorCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBUV0kgaGFyZHdhcmUgcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYXQ5MV90d2lfaHdpbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjZGl2LCBja2RpdjsKKworCWF0OTFfdHdpX3dyaXRlKEFUOTFfVFdJX0lEUiwgMHhmZmZmZmZmZik7CS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlhdDkxX3R3aV93cml0ZShBVDkxX1RXSV9DUiwgQVQ5MV9UV0lfU1dSU1QpOwkvKiBSZXNldCBwZXJpcGhlcmFsICovCisJYXQ5MV90d2lfd3JpdGUoQVQ5MV9UV0lfQ1IsIEFUOTFfVFdJX01TRU4pOwkvKiBTZXQgTWFzdGVyIG1vZGUgKi8KKworCS8qIENhbGN1YXRlIGNsb2NrIGRpdmlkZXJzICovCisJY2RpdiA9IChjbGtfZ2V0X3JhdGUodHdpX2NsaykgLyAoMiAqIFRXSV9DTE9DSykpIC0gMzsKKwljZGl2ID0gY2RpdiArIDE7CS8qIHJvdW5kIHVwICovCisJY2tkaXYgPSAwOworCXdoaWxlIChjZGl2ID4gMjU1KSB7CisJCWNrZGl2Kys7CisJCWNkaXYgPSBjZGl2ID4+IDE7CisJfQorCisJaWYgKGNwdV9pc19hdDkxcm05MjAwKCkpIHsJCQkvKiBBVDkxUk05MjAwIEVycmF0YSAjMjIgKi8KKwkJaWYgKGNrZGl2ID4gNSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJBVDkxIEkyQzogSW52YWxpZCBUV0lfQ0xPQ0sgdmFsdWUhXG4iKTsKKwkJCWNrZGl2ID0gNTsKKwkJfQorCX0KKworCWF0OTFfdHdpX3dyaXRlKEFUOTFfVFdJX0NXR1IsIChja2RpdiA8PCAxNikgfCAoY2RpdiA8PCA4KSB8IGNkaXYpOworfQorCisvKgorICogUG9sbCB0aGUgaTJjIHN0YXR1cyByZWdpc3RlciB1bnRpbCB0aGUgc3BlY2lmaWVkIGJpdCBpcyBzZXQuCisgKiBSZXR1cm5zIDAgaWYgdGltZWQgb3V0ICgxMDAgbXNlYykuCisgKi8KK3N0YXRpYyBzaG9ydCBhdDkxX3BvbGxfc3RhdHVzKHVuc2lnbmVkIGxvbmcgYml0KQoreworCWludCBsb29wX2NudHIgPSAxMDAwMDsKKworCWRvIHsKKwkJdWRlbGF5KDEwKTsKKwl9IHdoaWxlICghKGF0OTFfdHdpX3JlYWQoQVQ5MV9UV0lfU1IpICYgYml0KSAmJiAoLS1sb29wX2NudHIgPiAwKSk7CisKKwlyZXR1cm4gKGxvb3BfY250ciA+IDApOworfQorCitzdGF0aWMgaW50IHhmZXJfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbmd0aCkKK3sKKwkvKiBTZW5kIFN0YXJ0ICovCisJYXQ5MV90d2lfd3JpdGUoQVQ5MV9UV0lfQ1IsIEFUOTFfVFdJX1NUQVJUKTsKKworCS8qIFJlYWQgZGF0YSAqLworCXdoaWxlIChsZW5ndGgtLSkgeworCQlpZiAoIWxlbmd0aCkJLyogbmVlZCB0byBzZW5kIFN0b3AgYmVmb3JlIHJlYWRpbmcgbGFzdCBieXRlICovCisJCQlhdDkxX3R3aV93cml0ZShBVDkxX1RXSV9DUiwgQVQ5MV9UV0lfU1RPUCk7CisJCWlmICghYXQ5MV9wb2xsX3N0YXR1cyhBVDkxX1RXSV9SWFJEWSkpIHsKKwkJCWRldl9kYmcoJmFkYXAtPmRldiwgIlJYUkRZIHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJKmJ1ZisrID0gKGF0OTFfdHdpX3JlYWQoQVQ5MV9UV0lfUkhSKSAmIDB4ZmYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhmZXJfd3JpdGUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW5ndGgpCit7CisJLyogTG9hZCBmaXJzdCBieXRlIGludG8gdHJhbnNtaXR0ZXIgKi8KKwlhdDkxX3R3aV93cml0ZShBVDkxX1RXSV9USFIsICpidWYrKyk7CisKKwkvKiBTZW5kIFN0YXJ0ICovCisJYXQ5MV90d2lfd3JpdGUoQVQ5MV9UV0lfQ1IsIEFUOTFfVFdJX1NUQVJUKTsKKworCWRvIHsKKwkJaWYgKCFhdDkxX3BvbGxfc3RhdHVzKEFUOTFfVFdJX1RYUkRZKSkgeworCQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiVFhSRFkgdGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCWxlbmd0aC0tOwkvKiBieXRlIHdhcyB0cmFuc21pdHRlZCAqLworCisJCWlmIChsZW5ndGggPiAwKQkJLyogbW9yZSBkYXRhIHRvIHNlbmQ/ICovCisJCQlhdDkxX3R3aV93cml0ZShBVDkxX1RXSV9USFIsICpidWYrKyk7CisJfSB3aGlsZSAobGVuZ3RoKTsKKworCS8qIFNlbmQgU3RvcCAqLworCWF0OTFfdHdpX3dyaXRlKEFUOTFfVFdJX0NSLCBBVDkxX1RXSV9TVE9QKTsKKworCXJldHVybiAwOworfQorCisvKgorICogR2VuZXJpYyBpMmMgbWFzdGVyIHRyYW5zZmVyIGVudHJ5cG9pbnQuCisgKgorICogTm90ZTogV2UgZG8gbm90IHVzZSBBdG1lbCdzIGZlYXR1cmUgb2Ygc3RvcmluZyB0aGUgImludGVybmFsIGRldmljZSBhZGRyZXNzIi4KKyAqIEluc3RlYWQgdGhlICJpbnRlcm5hbCBkZXZpY2UgYWRkcmVzcyIgaGFzIHRvIGJlIHdyaXR0ZW4gdXNpbmcgYSBzZXBlcmF0ZQorICogaTJjIG1lc3NhZ2UuCisgKiBodHRwOi8vbGlzdHMuYXJtLmxpbnV4Lm9yZy51ay9waXBlcm1haWwvbGludXgtYXJtLWtlcm5lbC8yMDA0LVNlcHRlbWJlci8wMjQ0MTEuaHRtbAorICovCitzdGF0aWMgaW50IGF0OTFfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnICpwbXNnLCBpbnQgbnVtKQoreworCWludCBpLCByZXQ7CisKKwlkZXZfZGJnKCZhZGFwLT5kZXYsICJhdDkxX3hmZXI6IHByb2Nlc3NpbmcgJWQgbWVzc2FnZXM6XG4iLCBudW0pOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWRldl9kYmcoJmFkYXAtPmRldiwgIiAjJWQ6ICVzaW5nICVkIGJ5dGUlcyAlcyAweCUwMnhcbiIsIGksCisJCQlwbXNnLT5mbGFncyAmIEkyQ19NX1JEID8gInJlYWQiIDogIndyaXQiLAorCQkJcG1zZy0+bGVuLCBwbXNnLT5sZW4gPiAxID8gInMiIDogIiIsCisJCQlwbXNnLT5mbGFncyAmIEkyQ19NX1JEID8gImZyb20iIDogInRvIiwJcG1zZy0+YWRkcik7CisKKwkJYXQ5MV90d2lfd3JpdGUoQVQ5MV9UV0lfTU1SLCAocG1zZy0+YWRkciA8PCAxNikKKwkJCXwgKChwbXNnLT5mbGFncyAmIEkyQ19NX1JEKSA/IEFUOTFfVFdJX01SRUFEIDogMCkpOworCisJCWlmIChwbXNnLT5sZW4gJiYgcG1zZy0+YnVmKSB7CS8qIHNhbml0eSBjaGVjayAqLworCQkJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkQpCisJCQkJcmV0ID0geGZlcl9yZWFkKGFkYXAsIHBtc2ctPmJ1ZiwgcG1zZy0+bGVuKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSB4ZmVyX3dyaXRlKGFkYXAsIHBtc2ctPmJ1ZiwgcG1zZy0+bGVuKTsKKworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQkvKiBXYWl0IHVudGlsIHRyYW5zZmVyIGlzIGZpbmlzaGVkICovCisJCQlpZiAoIWF0OTFfcG9sbF9zdGF0dXMoQVQ5MV9UV0lfVFhDT01QKSkgeworCQkJCWRldl9kYmcoJmFkYXAtPmRldiwgIlRYQ09NUCB0aW1lb3V0XG4iKTsKKwkJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJCX0KKwkJfQorCQlkZXZfZGJnKCZhZGFwLT5kZXYsICJ0cmFuc2ZlciBjb21wbGV0ZVxuIik7CisJCXBtc2crKzsJCS8qIG5leHQgbWVzc2FnZSAqLworCX0KKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIFJldHVybiBsaXN0IG9mIHN1cHBvcnRlZCBmdW5jdGlvbmFsaXR5LgorICovCitzdGF0aWMgdTMyIGF0OTFfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBhdDkxX2FsZ29yaXRobSA9IHsKKwkubWFzdGVyX3hmZXIJPSBhdDkxX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBhdDkxX2Z1bmMsCit9OworCisvKgorICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdDkxX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmM7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOWElPOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgImF0OTFfaTJjIikpCisJCXJldHVybiAtRUJVU1k7CisKKwl0d2lfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCF0d2lfYmFzZSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDA7CisJfQorCisJdHdpX2NsayA9IGNsa19nZXQoTlVMTCwgInR3aV9jbGsiKTsKKwlpZiAoSVNfRVJSKHR3aV9jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGNsb2NrIGRlZmluZWRcbiIpOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDE7CisJfQorCisJYWRhcHRlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlciksIEdGUF9LRVJORUwpOworCWlmIChhZGFwdGVyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2NhdGUgaW50ZWZhY2UhXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwyOworCX0KKwlzcHJpbnRmKGFkYXB0ZXItPm5hbWUsICJBVDkxIik7CisJYWRhcHRlci0+YWxnbyA9ICZhdDkxX2FsZ29yaXRobTsKKwlhZGFwdGVyLT5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKKwlhZGFwdGVyLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOworCisJY2xrX2VuYWJsZSh0d2lfY2xrKTsJCS8qIGVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrICovCisJYXQ5MV90d2lfaHdpbml0KCk7CQkvKiBpbml0aWFsaXplIFRXSSBjb250cm9sbGVyICovCisKKwlyYyA9IGkyY19hZGRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQWRhcHRlciAlcyByZWdpc3RyYXRpb24gZmFpbGVkXG4iLAorCQkJCWFkYXB0ZXItPm5hbWUpOworCQlnb3RvIGZhaWwzOworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBVDkxIGkyYyBidXMgZHJpdmVyLlxuIik7CisJcmV0dXJuIDA7CisKK2ZhaWwzOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGFkYXB0ZXIpOworCWNsa19kaXNhYmxlKHR3aV9jbGspOworZmFpbDI6CisJY2xrX3B1dCh0d2lfY2xrKTsKK2ZhaWwxOgorCWlvdW5tYXAodHdpX2Jhc2UpOworZmFpbDA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdDkxX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmM7CisKKwlyYyA9IGkyY19kZWxfYWRhcHRlcihhZGFwdGVyKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaW91bm1hcCh0d2lfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCisJY2xrX2Rpc2FibGUodHdpX2Nsayk7CQkvKiBkaXNhYmxlIHBlcmlwaGVyYWwgY2xvY2sgKi8KKwljbGtfcHV0KHR3aV9jbGspOworCisJcmV0dXJuIHJjOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKKy8qIE5PVEU6IGNvdWxkIHNhdmUgYSBmZXcgbUEgYnkga2VlcGluZyBjbG9jayBvZmYgb3V0c2lkZSBvZiBhdDkxX3hmZXIuLi4gKi8KKworc3RhdGljIGludCBhdDkxX2kyY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCWNsa19kaXNhYmxlKHR3aV9jbGspOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0OTFfaTJjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBjbGtfZW5hYmxlKHR3aV9jbGspOworfQorCisjZWxzZQorI2RlZmluZSBhdDkxX2kyY19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgYXQ5MV9pMmNfcmVzdW1lCQlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXQ5MV9pMmNfZHJpdmVyID0geworCS5wcm9iZQkJPSBhdDkxX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0OTFfaTJjX3JlbW92ZSksCisJLnN1c3BlbmQJPSBhdDkxX2kyY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXQ5MV9pMmNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhdDkxX2kyYyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdDkxX2kyY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXQ5MV9pMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF0OTFfaTJjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXQ5MV9pMmNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYXQ5MV9pMmNfaW5pdCk7Cittb2R1bGVfZXhpdChhdDkxX2kyY19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiUmljayBCcm9uc29uIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQyAoVFdJKSBkcml2ZXIgZm9yIEF0bWVsIEFUOTEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lbGVrdG9yLmMKaW5kZXggYTU5MWZlNi4uODM0OTY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lbGVrdG9yLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lbGVrdG9yLmMKQEAgLTI5Myw3ICsyOTMsNyBAQAogCiBzdGF0aWMgdm9pZCBpMmNfcGNmaXNhX2V4aXQodm9pZCkKIHsKLQlpMmNfcGNmX2RlbF9idXMoJnBjZl9pc2Ffb3BzKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJnBjZl9pc2Ffb3BzKTsKIAogCWlmIChpcnEgPiAwKSB7CiAJCWRpc2FibGVfaXJxKGlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKaW5kZXggNDU3ZDQ4YS4uOTgzMmY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaHlkcmFfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcGRyZWd3KGh5ZHJhX2JpdF9kYXRhLmRhdGEsIDApOwkJLyogY2xlYXIgU0NMS19PRSBhbmQgU0RBVF9PRSAqLwotCWkyY19iaXRfZGVsX2J1cygmaHlkcmFfYWRhcCk7CisJaTJjX2RlbF9hZGFwdGVyKCZoeWRyYV9hZGFwKTsKIAlpb3VubWFwKGh5ZHJhX2JpdF9kYXRhLmRhdGEpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSsKIAkJCSAgIG9mZnNldG9mKHN0cnVjdCBIeWRyYSwgQ2FjaGVQRCksIDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwppbmRleCBjN2JlMmZkLi5hZTYyNWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwpAQCAtNDcwLDEyICs0NzAsMjAgQEAKIAlpbnQgZXJyOwogCiAJSTgwMV9kZXYgPSBkZXY7Ci0JaWYgKChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMykgfHwKLQkgICAgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8zKSB8fAotCSAgICAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9FU0JfNCkpCisJc3dpdGNoIChkZXYtPmRldmljZSkgeworCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzM6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMzoKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzQ6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTY6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMTc6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTc6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfNToKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOV82OgogCQlpc2ljaDQgPSAxOwotCWVsc2UKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJaXNpY2g0ID0gMDsKKwl9CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgxMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKaW5kZXggYjY2ZmI2Yi4uMTBjOThiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKQEAgLTIxOSwxNCArMjE5LDE0IEBACiAJCXJldHVybiByZXR2YWw7CiAJcmV0dmFsID0gaTJjX2JpdF9hZGRfYnVzKCZpODEwX2RkY19hZGFwdGVyKTsKIAlpZiAocmV0dmFsKQotCQlpMmNfYml0X2RlbF9idXMoJmk4MTBfaTJjX2FkYXB0ZXIpOworCQlpMmNfZGVsX2FkYXB0ZXIoJmk4MTBfaTJjX2FkYXB0ZXIpOwogCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpODEwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCWkyY19iaXRfZGVsX2J1cygmaTgxMF9kZGNfYWRhcHRlcik7Ci0JaTJjX2JpdF9kZWxfYnVzKCZpODEwX2kyY19hZGFwdGVyKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJmk4MTBfZGRjX2FkYXB0ZXIpOworCWkyY19kZWxfYWRhcHRlcigmaTgxMF9pMmNfYWRhcHRlcik7CiAJaW91bm1hcChpb2FkZHIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCmluZGV4IDc4MWE5OWMuLjE4OThlOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCkBAIC02ODAsNiArNjgwLDEyIEBACiAJZGV2LT5pZHggPSBvY3AtPmRlZi0+aW5kZXg7CiAJb2NwX3NldF9kcnZkYXRhKG9jcCwgZGV2KTsKIAkKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihvY3AtPmRlZi0+cGFkZHIsIHNpemVvZihzdHJ1Y3QgaWljX3JlZ3MpLAorCQkJCSJpYm1faWljIikpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZhaWwxOworCX0KKwogCWlmICghKGRldi0+dmFkZHIgPSBpb3JlbWFwKG9jcC0+ZGVmLT5wYWRkciwgc2l6ZW9mKHN0cnVjdCBpaWNfcmVncykpKSl7CiAJCXByaW50ayhLRVJOX0NSSVQgImlibS1paWMlZDogZmFpbGVkIHRvIGlvcmVtYXAgZGV2aWNlIHJlZ2lzdGVyc1xuIiwKIAkJCWRldi0+aWR4KTsKQEAgLTc1MCw2ICs3NTYsOCBAQAogCiAJaW91bm1hcChkZXYtPnZhZGRyKTsKIGZhaWwyOgkKKwlyZWxlYXNlX21lbV9yZWdpb24ob2NwLT5kZWYtPnBhZGRyLCBzaXplb2Yoc3RydWN0IGlpY19yZWdzKSk7CitmYWlsMToKIAlvY3Bfc2V0X2RydmRhdGEob2NwLCBOVUxMKTsKIAlrZnJlZShkZXYpOwkKIAlyZXR1cm4gcmV0OwpAQCAtNzc3LDYgKzc4NSw3IEBACiAJCSAgICBmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAkJfQogCQlpb3VubWFwKGRldi0+dmFkZHIpOworCQlyZWxlYXNlX21lbV9yZWdpb24ob2NwLT5kZWYtPnBhZGRyLCBzaXplb2Yoc3RydWN0IGlpY19yZWdzKSk7CiAJCWtmcmVlKGRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pdGUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZDcxODYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0vKgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgaTJjLWFkYXAtaXRlLmMgaTJjLWh3IGFjY2VzcyBmb3IgdGhlIElJQyBwZXJpcGhlcmFsIG9uIHRoZSBJVEUgTUlQUyBzeXN0ZW0KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIEhhaS1QYW8gRmFuLCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gICBocGZhbkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0KLSAgIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBUaGlzIGZpbGUgd2FzIGhpZ2hseSBsZXZlcmFnZWQgZnJvbSBpMmMtZWxla3Rvci5jLCB3aGljaCB3YXMgY3JlYXRlZAotICAgYnkgU2ltb24gRy4gVm9nbCBhbmQgSGFucyBCZXJnbHVuZDoKLQotIAotICAgICBDb3B5cmlnaHQgKEMpIDE5OTUtOTcgU2ltb24gRy4gVm9nbAotICAgICAgICAgICAgICAgICAgIDE5OTgtOTkgSGFucyBCZXJnbHVuZAotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCQkgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZCBldmVuCi0gICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+ICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWl0ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1hZGFwLWl0ZS5oPgotI2luY2x1ZGUgIi4uL2kyYy1pdGUuaCIKLQotI2RlZmluZSBERUZBVUxUX0JBU0UgIDB4MTQwMTQwMzAKLSNkZWZpbmUgSVRFX0lJQ19JT19TSVpFCTB4NDAKLSNkZWZpbmUgREVGQVVMVF9JUlEgICAwCi0jZGVmaW5lIERFRkFVTFRfQ0xPQ0sgMHgxYjBlCS8qIGRlZmF1bHQgMTZNSHovKDI3KzE0KSA9IDQwMEtIeiAqLwotI2RlZmluZSBERUZBVUxUX09XTiAgIDB4NTUKLQotc3RhdGljIGludCBiYXNlOwotc3RhdGljIGludCBpcnE7Ci1zdGF0aWMgaW50IGNsb2NrOwotc3RhdGljIGludCBvd247Ci0KLXN0YXRpYyBzdHJ1Y3QgaWljX2l0ZSBncGk7Ci1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgaWljX3dhaXQ7Ci1zdGF0aWMgaW50IGlpY19wZW5kaW5nOwotc3RhdGljIHNwaW5sb2NrX3QgbG9jazsKLQotLyogLS0tLS0gbG9jYWwgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KLQotc3RhdGljIHZvaWQgaWljX2l0ZV9zZXRpaWModm9pZCAqZGF0YSwgaW50IGN0bCwgc2hvcnQgdmFsKQotewotICAgICAgICB1bnNpZ25lZCBsb25nIGogPSBqaWZmaWVzICsgMTA7Ci0KLQlwcl9kZWJ1ZygiIFdyaXRlIDB4JTAyeCB0byAweCV4XG4iLCh1bnNpZ25lZCBzaG9ydCl2YWwsIGN0bCYweGZmKTsKLSNpZmRlZiBERUJVRwotCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBqKSkKLQkJc2NoZWR1bGUoKTsKLSNlbmRpZgotCW91dHcodmFsLGN0bCk7Ci19Ci0KLXN0YXRpYyBzaG9ydCBpaWNfaXRlX2dldGlpYyh2b2lkICpkYXRhLCBpbnQgY3RsKQotewotCXNob3J0IHZhbDsKLQotCXZhbCA9IGludyhjdGwpOwotCXByX2RlYnVnKCJSZWFkIDB4JTAyeCBmcm9tIDB4JXhcbiIsKHVuc2lnbmVkIHNob3J0KXZhbCwgY3RsJjB4ZmYpOwotCXJldHVybiAodmFsKTsKLX0KLQotLyogUmV0dXJuIG91ciBzbGF2ZSBhZGRyZXNzLiAgVGhpcyBpcyB0aGUgYWRkcmVzcwotICogcHV0IG9uIHRoZSBJMkMgYnVzIHdoZW4gYW5vdGhlciBtYXN0ZXIgb24gdGhlIGJ1cyB3YW50cyB0byBhZGRyZXNzIHVzCi0gKiBhcyBhIHNsYXZlCi0gKi8KLXN0YXRpYyBpbnQgaWljX2l0ZV9nZXRvd24odm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gKGdwaS5paWNfb3duKTsKLX0KLQotCi1zdGF0aWMgaW50IGlpY19pdGVfZ2V0Y2xvY2sodm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gKGdwaS5paWNfY2xvY2spOwotfQotCi0KLS8qIFB1dCB0aGlzIHByb2Nlc3MgdG8gc2xlZXAuICBXZSB3aWxsIHdha2UgdXAgd2hlbiB0aGUKLSAqIElJQyBjb250cm9sbGVyIGludGVycnVwdHMuCi0gKi8KLXN0YXRpYyB2b2lkIGlpY19pdGVfd2FpdGZvcnBpbih2b2lkKSB7Ci0gICBERUZJTkVfV0FJVCh3YWl0KTsKLSAgIGludCB0aW1lb3V0ID0gMjsKLSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLSAgIC8qIElmIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKHdoaWNoIHRoZXkgYXJlKSwgdGhlbiBwdXQgdGhlIHByb2Nlc3MgdG8KLSAgICAqIHNsZWVwLiAgVGhpcyBwcm9jZXNzIHdpbGwgYmUgYXdha2VuZWQgYnkgdHdvIGV2ZW50cyAtLSBlaXRoZXIgdGhlCi0gICAgKiB0aGUgSUlDIHBlcmlwaGVyYWwgaW50ZXJydXB0cyBvciB0aGUgdGltZW91dCBleHBpcmVzLiAKLSAgICAqIElmIGludGVycnVwdHMgYXJlIG5vdCBlbmFibGVkIHRoZW4gZGVsYXkgZm9yIGEgcmVhc29uYWJsZSBhbW91bnQgCi0gICAgKiBvZiB0aW1lIGFuZCByZXR1cm4uCi0gICAgKi8KLSAgIGlmIChncGkuaWljX2lycSA+IDApIHsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jaywgZmxhZ3MpOwotCWlmIChpaWNfcGVuZGluZyA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2ssIGZsYWdzKTsKLQkJcHJlcGFyZV90b193YWl0KCZpaWNfd2FpdCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmIChzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQqSFopKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jaywgZmxhZ3MpOwotCQkJaWYgKGlpY19wZW5kaW5nID09IDEpIHsKLQkJCQlpaWNfcGVuZGluZyA9IDA7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLCBmbGFncyk7Ci0JCX0KLQkJZmluaXNoX3dhaXQoJmlpY193YWl0LCAmd2FpdCk7Ci0JfSBlbHNlIHsKLQkJaWljX3BlbmRpbmcgPSAwOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLCBmbGFncyk7Ci0JfQotICAgfSBlbHNlIHsKLSAgICAgIHVkZWxheSgxMDApOwotICAgfQotfQotCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBpaWNfaXRlX2hhbmRsZXIoaW50IHRoaXNfaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3Bpbl9sb2NrKCZsb2NrKTsKLQlpaWNfcGVuZGluZyA9IDE7Ci0Jc3Bpbl91bmxvY2soJmxvY2spOwotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpaWNfd2FpdCk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLQotLyogTG9jayB0aGUgcmVnaW9uIG9mIG1lbW9yeSB3aGVyZSBJL08gcmVnaXN0ZXJzIGV4aXN0LiAgUmVxdWVzdCBvdXIKLSAqIGludGVycnVwdCBsaW5lIGFuZCByZWdpc3RlciBpdHMgYXNzb2NpYXRlZCBoYW5kbGVyLgotICovCi1zdGF0aWMgaW50IGlpY19od19yZXNyY19pbml0KHZvaWQpCi17Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihncGkuaWljX2Jhc2UsIElURV9JSUNfSU9fU0laRSwgImkyYyIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLSAgCi0JaWYgKGdwaS5paWNfaXJxIDw9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHJlcXVlc3RfaXJxKGdwaS5paWNfaXJxLCBpaWNfaXRlX2hhbmRsZXIsIDAsICJJVEUgSUlDIiwgMCkgPCAwKQotCQlncGkuaWljX2lycSA9IDA7Ci0JZWxzZQotCQllbmFibGVfaXJxKGdwaS5paWNfaXJxKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGlpY19pdGVfcmVsZWFzZSh2b2lkKQotewotCWlmIChncGkuaWljX2lycSA+IDApIHsKLQkJZGlzYWJsZV9pcnEoZ3BpLmlpY19pcnEpOwotCQlmcmVlX2lycShncGkuaWljX2lycSwgMCk7Ci0JfQotCXJlbGVhc2VfcmVnaW9uKGdwaS5paWNfYmFzZSAsIDIpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEVuY2Fwc3VsYXRlIHRoZSBhYm92ZSBmdW5jdGlvbnMgaW4gdGhlIGNvcnJlY3Qgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUuCi0gKiBUaGlzIGlzIG9ubHkgZG9uZSB3aGVuIG1vcmUgdGhhbiBvbmUgaGFyZHdhcmUgYWRhcHRlciBpcyBzdXBwb3J0ZWQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgaWljX2l0ZV9kYXRhID0gewotCU5VTEwsCi0JaWljX2l0ZV9zZXRpaWMsCi0JaWljX2l0ZV9nZXRpaWMsCi0JaWljX2l0ZV9nZXRvd24sCi0JaWljX2l0ZV9nZXRjbG9jaywKLQlpaWNfaXRlX3dhaXRmb3JwaW4sCi0JODAsIDgwLCAxMDAsCQkvKgl3YWl0cywgdGltZW91dCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBpaWNfaXRlX29wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmlkCQk9IEkyQ19IV19JX0lJQywKLQkuYWxnb19kYXRhCT0gJmlpY19pdGVfZGF0YSwKLQkubmFtZQkJPSAiSVRFIElJQyBhZGFwdGVyIiwKLX07Ci0KLS8qIENhbGxlZCB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiAgVGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlCi0gKiBjYXNjYWRlIG9mIGNhbGxzIHVwIHRocm91Z2ggdGhlIGhpZXJhcmNoeSBvZiBpMmMgbW9kdWxlcyAoaS5lLiB1cCB0byB0aGUKLSAqICBhbGdvcml0aG0gbGF5ZXIgYW5kIGludG8gdG8gdGhlIGNvcmUgbGF5ZXIpCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGlpY19pdGVfaW5pdCh2b2lkKSAKLXsKLQotCXN0cnVjdCBpaWNfaXRlICpwaWljID0gJmdwaTsKLQotCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpemUgSVRFIElJQyBhZGFwdGVyIG1vZHVsZVxuIik7Ci0JaWYgKGJhc2UgPT0gMCkKLQkJcGlpYy0+aWljX2Jhc2UgPSBERUZBVUxUX0JBU0U7Ci0JZWxzZQotCQlwaWljLT5paWNfYmFzZSA9IGJhc2U7Ci0KLQlpZiAoaXJxID09IDApCi0JCXBpaWMtPmlpY19pcnEgPSBERUZBVUxUX0lSUTsKLQllbHNlCi0JCXBpaWMtPmlpY19pcnEgPSBpcnE7Ci0KLQlpZiAoY2xvY2sgPT0gMCkKLQkJcGlpYy0+aWljX2Nsb2NrID0gREVGQVVMVF9DTE9DSzsKLQllbHNlCi0JCXBpaWMtPmlpY19jbG9jayA9IGNsb2NrOwotCi0JaWYgKG93biA9PSAwKQotCQlwaWljLT5paWNfb3duID0gREVGQVVMVF9PV047Ci0JZWxzZQotCQlwaWljLT5paWNfb3duID0gb3duOwotCi0JaWljX2l0ZV9kYXRhLmRhdGEgPSAodm9pZCAqKXBpaWM7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmaWljX3dhaXQpOwotCXNwaW5fbG9ja19pbml0KCZsb2NrKTsKLQlpZiAoaWljX2h3X3Jlc3JjX2luaXQoKSA9PSAwKSB7Ci0JCWlmIChpMmNfaWljX2FkZF9idXMoJmlpY19pdGVfb3BzKSA8IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9IGVsc2UgewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiIGZvdW5kIGRldmljZSBhdCAlI3ggaXJxICVkLlxuIiwgCi0JCXBpaWMtPmlpY19iYXNlLCBwaWljLT5paWNfaXJxKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBpaWNfaXRlX2V4aXQodm9pZCkKLXsKLQlpMmNfaWljX2RlbF9idXMoJmlpY19pdGVfb3BzKTsKLSAgICAgICAgaWljX2l0ZV9yZWxlYXNlKCk7Ci19Ci0KLS8qIElmIG1vZHVsZXMgaXMgTk9UIGRlZmluZWQgd2hlbiB0aGlzIGZpbGUgaXMgY29tcGlsZWQsIHRoZW4gdGhlIE1PRFVMRV8qCi0gKiBtYWNyb3Mgd2lsbCByZXNvbHZlIHRvIG5vdGhpbmcKLSAqLwotTU9EVUxFX0FVVEhPUigiTW9udGFWaXN0YSBTb2Z0d2FyZSA8d3d3Lm12aXN0YS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgYWRhcHRlciByb3V0aW5lcyBmb3IgSVRFIElJQyBidXMgYWRhcHRlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oYmFzZSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShpcnEsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0oY2xvY2ssIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0ob3duLCBpbnQsIDApOwotCi0KLS8qIENhbGxlZCB3aGVuIG1vZHVsZSBpcyBsb2FkZWQgb3Igd2hlbiBrZXJuZWwgaXMgaW5pdGlhbGl6ZWQuCi0gKiBJZiBNT0RVTEVTIGlzIGRlZmluZWQgd2hlbiB0aGlzIGZpbGUgaXMgY29tcGlsZWQsIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsCi0gKiByZXNvbHZlIHRvIGluaXRfbW9kdWxlICh0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gaW5zbW9kIGlzIGludm9rZWQgZm9yIGEKLSAqIG1vZHVsZSkuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGVhcmx5IGluIHRoZSBib290LCB3aGVuIHRoZQotICoga2VybmVsIGlzIGludGlhbGl6ZWQuICBDaGVjayBvdXQgL2luY2x1ZGUvaW5pdC5oIHRvIHNlZSBob3cgdGhpcyB3b3Jrcy4KLSAqLwotbW9kdWxlX2luaXQoaWljX2l0ZV9pbml0KTsKLQotLyogUmVzb2x2ZXMgdG8gbW9kdWxlX2NsZWFudXAgd2hlbiBNT0RVTEVTIGlzIGRlZmluZWQuICovCi1tb2R1bGVfZXhpdChpaWNfaXRlX2V4aXQpOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHAyMDAwLmMKaW5kZXggZGQzZjRjZC4uZWZhM2VjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHAyMDAwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHAyMDAwLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBsYXRfZGV2LCBOVUxMKTsKIAotCWkyY19iaXRfZGVsX2J1cygmZHJ2X2RhdGEtPmFkYXB0ZXIpOworCWkyY19kZWxfYWRhcHRlcigmZHJ2X2RhdGEtPmFkYXB0ZXIpOwogCiAJa2ZyZWUoZHJ2X2RhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHA0eHguYwppbmRleCA2OGZlODYzLi4wOGU4OWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwNHh4LmMKQEAgLTkxLDcgKzkxLDcgQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBsYXRfZGV2LCBOVUxMKTsKIAotCWkyY19iaXRfZGVsX2J1cygmZHJ2X2RhdGEtPmFkYXB0ZXIpOworCWkyY19kZWxfYWRhcHRlcigmZHJ2X2RhdGEtPmFkYXB0ZXIpOwogCiAJa2ZyZWUoZHJ2X2RhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCmluZGV4IGJiYzhlM2EuLjQ5MDE3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCkBAIC01MjksNiArNTI5LDggQEAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZCwgZHJ2X2RhdGEpOwogCWkyY19zZXRfYWRhcGRhdGEoJmRydl9kYXRhLT5hZGFwdGVyLCBkcnZfZGF0YSk7CiAKKwltdjY0eHh4X2kyY19od19pbml0KGRydl9kYXRhKTsKKwogCWlmIChyZXF1ZXN0X2lycShkcnZfZGF0YS0+aXJxLCBtdjY0eHh4X2kyY19pbnRyLCAwLAogCQkJTVY2NFhYWF9JMkNfQ1RMUl9OQU1FLCBkcnZfZGF0YSkpIHsKIAkJZGV2X2VycigmZHJ2X2RhdGEtPmFkYXB0ZXIuZGV2LApAQCAtNTQyLDggKzU0NCw2IEBACiAJCWdvdG8gZXhpdF9mcmVlX2lycTsKIAl9CiAKLQltdjY0eHh4X2kyY19od19pbml0KGRydl9kYXRhKTsKLQogCXJldHVybiAwOwogCiAJZXhpdF9mcmVlX2lycToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKaW5kZXggZTAyOTJlNC4uYWQzN2MxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBuRm9yY2U0IE1DUDU1CQkwMzY4CiAKICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgMiBTTUJ1c2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBNQ1Agb2YgdGhlCi0gICAgbkZvcmNlMi8zLzQgY2hpcHNldHMuCisgICAgbkZvcmNlMi8zLzQvNXh4IGNoaXBzZXRzLgogKi8KIAogLyogTm90ZTogd2UgYXNzdW1lIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBuRm9yY2UyLCB3aXRoIHR3byBTTUJ1cyBpbnRlcmZhY2VzICovCkBAIC01Miw4ICs1Miw4IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IgKCJIYW5zLUZyaWVkZXIgVm9ndCA8aGZ2b2d0QGFyY29yLmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJuRm9yY2UyIFNNQnVzIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUiAoIkhhbnMtRnJpZWRlciBWb2d0IDxoZnZvZ3RAZ214Lm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigibkZvcmNlMi8zLzQvNXh4IFNNQnVzIGRyaXZlciIpOwogCiAKIHN0cnVjdCBuZm9yY2UyX3NtYnVzIHsKQEAgLTgwLDkgKzgwLDYgQEAKICNkZWZpbmUgTlZJRElBX1NNQl9BRERSCQkoc21idXMtPmJhc2UgKyAweDAyKQkvKiBhZGRyZXNzICovCiAjZGVmaW5lIE5WSURJQV9TTUJfQ01ECQkoc21idXMtPmJhc2UgKyAweDAzKQkvKiBjb21tYW5kICovCiAjZGVmaW5lIE5WSURJQV9TTUJfREFUQQkJKHNtYnVzLT5iYXNlICsgMHgwNCkJLyogMzIgZGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTlZJRElBX1NNQl9CQ05UCQkoc21idXMtPmJhc2UgKyAweDI0KQkvKiBudW1iZXIgb2YgZGF0YSBieXRlcyAqLwotI2RlZmluZSBOVklESUFfU01CX0FMUk1fQQkoc21idXMtPmJhc2UgKyAweDI1KQkvKiBhbGFybSBhZGRyZXNzICovCi0jZGVmaW5lIE5WSURJQV9TTUJfQUxSTV9ECShzbWJ1cy0+YmFzZSArIDB4MjYpCS8qIDIgYnl0ZXMgYWxhcm0gZGF0YSAqLwogCiAjZGVmaW5lIE5WSURJQV9TTUJfU1RTX0RPTkUJMHg4MAogI2RlZmluZSBOVklESUFfU01CX1NUU19BTFJNCTB4NDAKQEAgLTk1LDQwICs5MiwxNyBAQAogI2RlZmluZSBOVklESUFfU01CX1BSVENMX0JZVEUJCQkweDA0CiAjZGVmaW5lIE5WSURJQV9TTUJfUFJUQ0xfQllURV9EQVRBCQkweDA2CiAjZGVmaW5lIE5WSURJQV9TTUJfUFJUQ0xfV09SRF9EQVRBCQkweDA4Ci0jZGVmaW5lIE5WSURJQV9TTUJfUFJUQ0xfQkxPQ0tfREFUQQkJMHgwYQotI2RlZmluZSBOVklESUFfU01CX1BSVENMX1BST0NfQ0FMTAkJMHgwYwotI2RlZmluZSBOVklESUFfU01CX1BSVENMX0JMT0NLX1BST0NfQ0FMTAkweDBkCi0jZGVmaW5lIE5WSURJQV9TTUJfUFJUQ0xfSTJDX0JMT0NLX0RBVEEJCTB4NGEKICNkZWZpbmUgTlZJRElBX1NNQl9QUlRDTF9QRUMJCQkweDgwCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZm9yY2UyX2RyaXZlcjsKIAotc3RhdGljIHMzMiBuZm9yY2UyX2FjY2VzcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHUxNiBhZGRyLAotCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwKLQkJICAgICAgIHU4IGNvbW1hbmQsIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSk7Ci1zdGF0aWMgdTMyIG5mb3JjZTJfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzbWJ1c19hbGdvcml0aG0gPSB7Ci0JLnNtYnVzX3hmZXIgPSBuZm9yY2UyX2FjY2VzcywKLQkuZnVuY3Rpb25hbGl0eSA9IG5mb3JjZTJfZnVuYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgbmZvcmNlMl9hZGFwdGVyID0gewotCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5jbGFzcyAgICAgICAgICA9IEkyQ19DTEFTU19IV01PTiwKLQkuYWxnbyAgICAgICAgICAgPSAmc21idXNfYWxnb3JpdGhtLAotfTsKLQotLyogUmV0dXJuIC0xIG9uIGVycm9yLiBTZWUgc21idXMuaCBmb3IgbW9yZSBpbmZvcm1hdGlvbiAqLworLyogUmV0dXJuIC0xIG9uIGVycm9yICovCiBzdGF0aWMgczMyIG5mb3JjZTJfYWNjZXNzKHN0cnVjdCBpMmNfYWRhcHRlciAqIGFkYXAsIHUxNiBhZGRyLAogCQl1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLAogCQl1OCBjb21tYW5kLCBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKiBkYXRhKQogewogCXN0cnVjdCBuZm9yY2UyX3NtYnVzICpzbWJ1cyA9IGFkYXAtPmFsZ29fZGF0YTsKIAl1bnNpZ25lZCBjaGFyIHByb3RvY29sLCBwZWMsIHRlbXA7Ci0JdW5zaWduZWQgY2hhciBsZW4gPSAwOyAvKiB0byBrZWVwIHRoZSBjb21waWxlciBxdWlldCAqLwotCWludCBpOwogCiAJcHJvdG9jb2wgPSAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkgPyBOVklESUFfU01CX1BSVENMX1JFQUQgOgogCQlOVklESUFfU01CX1BSVENMX1dSSVRFOwpAQCAtMTYzLDM1ICsxMzcsNiBAQAogCQkJcHJvdG9jb2wgfD0gTlZJRElBX1NNQl9QUlRDTF9XT1JEX0RBVEEgfCBwZWM7CiAJCQlicmVhazsKIAotCQljYXNlIEkyQ19TTUJVU19CTE9DS19EQVRBOgotCQkJb3V0Yl9wKGNvbW1hbmQsIE5WSURJQV9TTUJfQ01EKTsKLQkJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkgewotCQkJCWxlbiA9IG1pbl90KHU4LCBkYXRhLT5ibG9ja1swXSwgMzIpOwotCQkJCW91dGJfcChsZW4sIE5WSURJQV9TTUJfQkNOVCk7Ci0JCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJCQlvdXRiX3AoZGF0YS0+YmxvY2tbaSArIDFdLCBOVklESUFfU01CX0RBVEEraSk7Ci0JCQl9Ci0JCQlwcm90b2NvbCB8PSBOVklESUFfU01CX1BSVENMX0JMT0NLX0RBVEEgfCBwZWM7Ci0JCQlicmVhazsKLQotCQljYXNlIEkyQ19TTUJVU19JMkNfQkxPQ0tfREFUQToKLQkJCWxlbiA9IG1pbl90KHU4LCBkYXRhLT5ibG9ja1swXSwgMzIpOwotCQkJb3V0Yl9wKGNvbW1hbmQsIE5WSURJQV9TTUJfQ01EKTsKLQkJCW91dGJfcChsZW4sIE5WSURJQV9TTUJfQkNOVCk7Ci0JCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpCi0JCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJCQlvdXRiX3AoZGF0YS0+YmxvY2tbaSArIDFdLCBOVklESUFfU01CX0RBVEEraSk7Ci0JCQlwcm90b2NvbCB8PSBOVklESUFfU01CX1BSVENMX0kyQ19CTE9DS19EQVRBOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJMkNfU01CVVNfUFJPQ19DQUxMOgotCQkJZGV2X2VycigmYWRhcC0+ZGV2LCAiSTJDX1NNQlVTX1BST0NfQ0FMTCBub3Qgc3VwcG9ydGVkIVxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0KLQkJY2FzZSBJMkNfU01CVVNfQkxPQ0tfUFJPQ19DQUxMOgotCQkJZGV2X2VycigmYWRhcC0+ZGV2LCAiSTJDX1NNQlVTX0JMT0NLX1BST0NfQ0FMTCBub3Qgc3VwcG9ydGVkIVxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0KIAkJZGVmYXVsdDoKIAkJCWRldl9lcnIoJmFkYXAtPmRldiwgIlVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uICVkXG4iLCBzaXplKTsKIAkJCXJldHVybiAtMTsKQEAgLTIyNywxOSArMTcyLDggQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgSTJDX1NNQlVTX1dPUkRfREFUQToKLQkJLyogY2FzZSBJMkNfU01CVVNfUFJPQ19DQUxMOiBub3Qgc3VwcG9ydGVkICovCiAJCQlkYXRhLT53b3JkID0gaW5iX3AoTlZJRElBX1NNQl9EQVRBKSB8IChpbmJfcChOVklESUFfU01CX0RBVEErMSkgPDwgOCk7CiAJCQlicmVhazsKLQotCQljYXNlIEkyQ19TTUJVU19CTE9DS19EQVRBOgotCQkvKiBjYXNlIEkyQ19TTUJVU19CTE9DS19QUk9DX0NBTEw6IG5vdCBzdXBwb3J0ZWQgKi8KLQkJCWxlbiA9IGluYl9wKE5WSURJQV9TTUJfQkNOVCk7Ci0JCQlsZW4gPSBtaW5fdCh1OCwgbGVuLCAzMik7Ci0JCWNhc2UgSTJDX1NNQlVTX0kyQ19CTE9DS19EQVRBOgotCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJCWRhdGEtPmJsb2NrW2krMV0gPSBpbmJfcChOVklESUFfU01CX0RBVEEgKyBpKTsKLQkJCWRhdGEtPmJsb2NrWzBdID0gbGVuOwotCQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNTAsMTAgKzE4NCwxNCBAQAogewogCS8qIG90aGVyIGZ1bmN0aW9uYWxpdHkgbWlnaHQgYmUgcG9zc2libGUsIGJ1dCBpcyBub3QgdGVzdGVkICovCiAJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX1FVSUNLIHwgSTJDX0ZVTkNfU01CVVNfQllURSB8Ci0JICAgIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSAvKiB8Ci0JICAgIEkyQ19GVU5DX1NNQlVTX0JMT0NLX0RBVEEgKi87CisJICAgIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQTsKIH0KIAorc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNtYnVzX2FsZ29yaXRobSA9IHsKKwkuc21idXNfeGZlcgk9IG5mb3JjZTJfYWNjZXNzLAorCS5mdW5jdGlvbmFsaXR5CT0gbmZvcmNlMl9mdW5jLAorfTsKKwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmZvcmNlMl9pZHNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTJfU01CVVMpIH0sCkBAIC0yNjcsNyArMjA1LDYgQEAKIAl7IDAgfQogfTsKIAotCiBNT0RVTEVfREVWSUNFX1RBQkxFIChwY2ksIG5mb3JjZTJfaWRzKTsKIAogCkBAIC0yOTEsNyArMjI4LDcgQEAKIAkJfQogCiAJCXNtYnVzLT5iYXNlID0gaW9iYXNlICYgUENJX0JBU0VfQUREUkVTU19JT19NQVNLOwotCQlzbWJ1cy0+c2l6ZSA9IDg7CisJCXNtYnVzLT5zaXplID0gNjQ7CiAJfQogCXNtYnVzLT5kZXYgPSBkZXY7CiAKQEAgLTMwMCw3ICsyMzcsOSBAQAogCQkJc21idXMtPmJhc2UsIHNtYnVzLT5iYXNlK3NtYnVzLT5zaXplLTEsIG5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQotCXNtYnVzLT5hZGFwdGVyID0gbmZvcmNlMl9hZGFwdGVyOworCXNtYnVzLT5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7CisJc21idXMtPmFkYXB0ZXIuY2xhc3MgPSBJMkNfQ0xBU1NfSFdNT047CisJc21idXMtPmFkYXB0ZXIuYWxnbyA9ICZzbWJ1c19hbGdvcml0aG07CiAJc21idXMtPmFkYXB0ZXIuYWxnb19kYXRhID0gc21idXM7CiAJc21idXMtPmFkYXB0ZXIuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKIAlzbnByaW50ZihzbWJ1cy0+YWRhcHRlci5uYW1lLCBJMkNfTkFNRV9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwppbmRleCBkZWMwNGRhLi5iY2Q4MzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwpAQCAtMjMxLDggKzIzMSw4IEBACiAJCSAqIDEzCQkyCQkxCiAJCSAqIDE5LjIJCTIJCTEKIAkJICovCi0JCWlmIChmY2xrX3JhdGUgPiAxNjAwMDAwMCkKLQkJCXBzYyA9IChmY2xrX3JhdGUgKyA4MDAwMDAwKSAvIDEyMDAwMDAwOworCQlpZiAoZmNsa19yYXRlID4gMTIwMDAwMDApCisJCQlwc2MgPSBmY2xrX3JhdGUgLyAxMjAwMDAwMDsKIAl9CiAKIAkvKiBTZXR1cCBjbG9jayBwcmVzY2FsZXIgdG8gb2J0YWluIGFwcHJveCAxMk1IeiBJMkMgbW9kdWxlIGNsb2NrOiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYwppbmRleCA1ZWIyYmQyLi40YmM0MjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJaWYgKGFkYXB0ZXJfcGFybVt0eXBlXS5pbml0LnZhbCkKIAkJbGluZV9zZXQoMCwgJmFkYXB0ZXJfcGFybVt0eXBlXS5pbml0KTsKIAotCWkyY19iaXRfZGVsX2J1cygmcGFycG9ydF9hZGFwdGVyKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJnBhcnBvcnRfYWRhcHRlcik7CiAJcmVsZWFzZV9yZWdpb24oYmFzZSwgMyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKaW5kZXggNDhhODI5NC4uNjY2OTZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQkJaWYgKGFkYXB0ZXJfcGFybVt0eXBlXS5pbml0LnZhbCkKIAkJCQlsaW5lX3NldChwb3J0LCAwLCAmYWRhcHRlcl9wYXJtW3R5cGVdLmluaXQpOwogCQkJCQotCQkJaTJjX2JpdF9kZWxfYnVzKCZhZGFwdGVyLT5hZGFwdGVyKTsKKwkJCWkyY19kZWxfYWRhcHRlcigmYWRhcHRlci0+YWRhcHRlcik7CiAJCQlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKGFkYXB0ZXItPnBkZXYpOwogCQkJaWYgKHByZXYpCiAJCQkJcHJldi0+bmV4dCA9IGFkYXB0ZXItPm5leHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCmluZGV4IDQwNzg0MGIuLmNjNjUzNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogc3RhdGljIHZvaWQgcGNhX2lzYV9leGl0KHZvaWQpCiB7Ci0JaTJjX3BjYV9kZWxfYnVzKCZwY2FfaXNhX29wcyk7CisJaTJjX2RlbF9hZGFwdGVyKCZwY2FfaXNhX29wcyk7CiAKIAlpZiAoaXJxID4gMCkgewogCQlkaXNhYmxlX2lycShpcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczNzZmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKQEAgLTAsMCArMSw3MDMgQEAKKy8qCisgKiBQcm92aWRlcyBJMkMgc3VwcG9ydCBmb3IgUGhpbGlwcyBQTlgwMTB4L1BOWDQwMDggYm9hcmRzLgorICoKKyAqIEF1dGhvcnM6IERlbm5pcyBLb3ZhbGV2IDxka292YWxldkBydS5tdmlzdGEuY29tPgorICoJICAgIFZpdGFseSBXb29sIDx2d29vbEBydS5tdmlzdGEuY29tPgorICoKKyAqIDIwMDQtMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtcG54Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNkZWZpbmUgSTJDX1BOWF9USU1FT1VUCQkxMCAvKiBtc2VjICovCisjZGVmaW5lIEkyQ19QTlhfU1BFRURfS0haCTEwMAorI2RlZmluZSBJMkNfUE5YX1JFR0lPTl9TSVpFCTB4MTAwCisjZGVmaW5lIFBOWF9ERUZBVUxUX0ZSRVEJMTMgLyogTUh6ICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHdhaXRfdGltZW91dChsb25nIHRpbWVvdXQsIHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqZGF0YSkKK3sKKwl3aGlsZSAodGltZW91dCA+IDAgJiYKKwkJCShpb3JlYWQzMihJMkNfUkVHX1NUUyhkYXRhKSkgJiBtc3RhdHVzX2FjdGl2ZSkpIHsKKwkJbWRlbGF5KDEpOworCQl0aW1lb3V0LS07CisJfQorCXJldHVybiAodGltZW91dCA8PSAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgd2FpdF9yZXNldChsb25nIHRpbWVvdXQsIHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqZGF0YSkKK3sKKwl3aGlsZSAodGltZW91dCA+IDAgJiYKKwkJCShpb3JlYWQzMihJMkNfUkVHX0NUTChkYXRhKSkgJiBtY250cmxfcmVzZXQpKSB7CisJCW1kZWxheSgxKTsKKwkJdGltZW91dC0tOworCX0KKwlyZXR1cm4gKHRpbWVvdXQgPD0gMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfcG54X2FybV90aW1lcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICpkYXRhID0gYWRhcC0+YWxnb19kYXRhOworCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZkYXRhLT5taWYudGltZXI7CisJaW50IGV4cGlyZXMgPSBJMkNfUE5YX1RJTUVPVVQgLyAoMTAwMCAvIEhaKTsKKworCWRlbF90aW1lcl9zeW5jKHRpbWVyKTsKKworCWRldl9kYmcoJmFkYXAtPmRldiwgIlRpbWVyIGFybWVkIGF0ICVsdSBwbHVzICV1IGppZmZpZXMuXG4iLAorCQlqaWZmaWVzLCBleHBpcmVzKTsKKworCXRpbWVyLT5leHBpcmVzID0gamlmZmllcyArIGV4cGlyZXM7CisJdGltZXItPmRhdGEgPSAodW5zaWduZWQgbG9uZylhZGFwOworCisJYWRkX3RpbWVyKHRpbWVyKTsKK30KKworLyoqCisgKiBpMmNfcG54X3N0YXJ0IC0gc3RhcnQgYSBkZXZpY2UKKyAqIEBzbGF2ZV9hZGRyOgkJc2xhdmUgYWRkcmVzcworICogQGFkYXA6CQlwb2ludGVyIHRvIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogR2VuZXJhdGUgYSBTVEFSVCBzaWduYWwgaW4gdGhlIGRlc2lyZWQgbW9kZS4KKyAqLworc3RhdGljIGludCBpMmNfcG54X3N0YXJ0KHVuc2lnbmVkIGNoYXIgc2xhdmVfYWRkciwgc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7CisKKwlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBhZGRyIDB4JXggbW9kZSAlZFxuIiwgX19GVU5DVElPTl9fLAorCQlzbGF2ZV9hZGRyLCBhbGdfZGF0YS0+bWlmLm1vZGUpOworCisJLyogQ2hlY2sgZm9yIDcgYml0IHNsYXZlIGFkZHJlc3NlcyBvbmx5ICovCisJaWYgKHNsYXZlX2FkZHIgJiB+MHg3ZikgeworCQlkZXZfZXJyKCZhZGFwLT5kZXYsICIlczogSW52YWxpZCBzbGF2ZSBhZGRyZXNzICV4LiAiCisJCSAgICAgICAiT25seSA3LWJpdCBhZGRyZXNzZXMgYXJlIHN1cHBvcnRlZFxuIiwKKwkJICAgICAgIGFkYXAtPm5hbWUsIHNsYXZlX2FkZHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGaXJzdCwgbWFrZSBzdXJlIGJ1cyBpcyBpZGxlICovCisJaWYgKHdhaXRfdGltZW91dChJMkNfUE5YX1RJTUVPVVQsIGFsZ19kYXRhKSkgeworCQkvKiBTb21lYm9keSBlbHNlIGlzIG1vbm9wb2xpemluZyB0aGUgYnVzICovCisJCWRldl9lcnIoJmFkYXAtPmRldiwgIiVzOiBCdXMgYnVzeS4gU2xhdmUgYWRkciA9ICUwMngsICIKKwkJICAgICAgICJjbnRybCA9ICV4LCBzdGF0ID0gJXhcbiIsCisJCSAgICAgICBhZGFwLT5uYW1lLCBzbGF2ZV9hZGRyLAorCQkgICAgICAgaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSwKKwkJICAgICAgIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOworCQlyZXR1cm4gLUVCVVNZOworCX0gZWxzZSBpZiAoaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSAmIG1zdGF0dXNfYWZpKSB7CisJCS8qIFNvcnJ5LCB3ZSBsb3N0IHRoZSBidXMgKi8KKwkJZGV2X2VycigmYWRhcC0+ZGV2LCAiJXM6IEFyYml0cmF0aW9uIGZhaWx1cmUuICIKKwkJICAgICAgICJTbGF2ZSBhZGRyID0gJTAyeFxuIiwgYWRhcC0+bmFtZSwgc2xhdmVfYWRkcik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qCisJICogT0ssIEkyQyBpcyBlbmFibGVkIGFuZCB3ZSBoYXZlIHRoZSBidXMuCisJICogQ2xlYXIgdGhlIGN1cnJlbnQgVERJIGFuZCBBRkkgc3RhdHVzIGZsYWdzLgorCSAqLworCWlvd3JpdGUzMihpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpIHwgbXN0YXR1c190ZGkgfCBtc3RhdHVzX2FmaSwKKwkJICBJMkNfUkVHX1NUUyhhbGdfZGF0YSkpOworCisJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogc2VuZGluZyAlI3hcbiIsIF9fRlVOQ1RJT05fXywKKwkJKHNsYXZlX2FkZHIgPDwgMSkgfCBzdGFydF9iaXQgfCBhbGdfZGF0YS0+bWlmLm1vZGUpOworCisJLyogV3JpdGUgdGhlIHNsYXZlIGFkZHJlc3MsIFNUQVJUIGJpdCBhbmQgUi9XIGJpdCAqLworCWlvd3JpdGUzMigoc2xhdmVfYWRkciA8PCAxKSB8IHN0YXJ0X2JpdCB8IGFsZ19kYXRhLT5taWYubW9kZSwKKwkJICBJMkNfUkVHX1RYKGFsZ19kYXRhKSk7CisKKwlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBleGl0XG4iLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaTJjX3BueF9zdG9wIC0gc3RvcCBhIGRldmljZQorICogQGFkYXA6CQlwb2ludGVyIHRvIEkyQyBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIEdlbmVyYXRlIGEgU1RPUCBzaWduYWwgdG8gdGVybWluYXRlIHRoZSBtYXN0ZXIgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkIGkyY19wbnhfc3RvcChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKKwkvKiBPbmx5IDEgbXNlYyBtYXggdGltZW91dCBkdWUgdG8gaW50ZXJydXB0IGNvbnRleHQgKi8KKwlsb25nIHRpbWVvdXQgPSAxMDAwOworCisJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZW50ZXJpbmc6IHN0YXQgPSAlMDR4LlxuIiwKKwkJX19GVU5DVElPTl9fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKKworCS8qIFdyaXRlIGEgU1RPUCBiaXQgdG8gVFggRklGTyAqLworCWlvd3JpdGUzMigweGZmIHwgc3RvcF9iaXQsIEkyQ19SRUdfVFgoYWxnX2RhdGEpKTsKKworCS8qIFdhaXQgdW50aWwgdGhlIFNUT1AgaXMgc2Vlbi4gKi8KKwl3aGlsZSAodGltZW91dCA+IDAgJiYKKwkgICAgICAgKGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkgJiBtc3RhdHVzX2FjdGl2ZSkpIHsKKwkJLyogbWF5IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCisJCXVkZWxheSgxKTsKKwkJdGltZW91dC0tOworCX0KKworCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGV4aXRpbmc6IHN0YXQgPSAlMDR4LlxuIiwKKwkJX19GVU5DVElPTl9fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKK30KKworLyoqCisgKiBpMmNfcG54X21hc3Rlcl94bWl0IC0gdHJhbnNtaXQgZGF0YSB0byBzbGF2ZQorICogQGFkYXA6CQlwb2ludGVyIHRvIEkyQyBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFNlbmRzIG9uZSBieXRlIG9mIGRhdGEgdG8gdGhlIHNsYXZlCisgKi8KK3N0YXRpYyBpbnQgaTJjX3BueF9tYXN0ZXJfeG1pdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKKwl1MzIgdmFsOworCisJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZW50ZXJpbmc6IHN0YXQgPSAlMDR4LlxuIiwKKwkJX19GVU5DVElPTl9fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKKworCWlmIChhbGdfZGF0YS0+bWlmLmxlbiA+IDApIHsKKwkJLyogV2Ugc3RpbGwgaGF2ZSBzb21ldGhpbmcgdG8gdGFsayBhYm91dC4uLiAqLworCQl2YWwgPSAqYWxnX2RhdGEtPm1pZi5idWYrKzsKKworCQlpZiAoYWxnX2RhdGEtPm1pZi5sZW4gPT0gMSkgeworCQkJdmFsIHw9IHN0b3BfYml0OworCQkJaWYgKCFhbGdfZGF0YS0+bGFzdCkKKwkJCQl2YWwgfD0gc3RhcnRfYml0OworCQl9CisKKwkJYWxnX2RhdGEtPm1pZi5sZW4tLTsKKwkJaW93cml0ZTMyKHZhbCwgSTJDX1JFR19UWChhbGdfZGF0YSkpOworCisJCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IHhtaXQgJSN4IFslZF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJCXZhbCwgYWxnX2RhdGEtPm1pZi5sZW4gKyAxKTsKKworCQlpZiAoYWxnX2RhdGEtPm1pZi5sZW4gPT0gMCkgeworCQkJaWYgKGFsZ19kYXRhLT5sYXN0KSB7CisJCQkJLyogV2FpdCB1bnRpbCB0aGUgU1RPUCBpcyBzZWVuLiAqLworCQkJCWlmICh3YWl0X3RpbWVvdXQoSTJDX1BOWF9USU1FT1VULCBhbGdfZGF0YSkpCisJCQkJCWRldl9lcnIoJmFkYXAtPmRldiwgIlRoZSBidXMgaXMgc3RpbGwgIgorCQkJCQkJImFjdGl2ZSBhZnRlciB0aW1lb3V0XG4iKTsKKwkJCX0KKwkJCS8qIERpc2FibGUgbWFzdGVyIGludGVycnVwdHMgKi8KKwkJCWlvd3JpdGUzMihpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpICYKKwkJCQl+KG1jbnRybF9hZmllIHwgbWNudHJsX25haWUgfCBtY250cmxfZHJtaWUpLAorCQkJCSAgSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKKworCQkJZGVsX3RpbWVyX3N5bmMoJmFsZ19kYXRhLT5taWYudGltZXIpOworCisJCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBXYWtpbmcgdXAgeGZlciByb3V0aW5lLlxuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCisJCQljb21wbGV0ZSgmYWxnX2RhdGEtPm1pZi5jb21wbGV0ZSk7CisJCX0KKwl9IGVsc2UgaWYgKGFsZ19kYXRhLT5taWYubGVuID09IDApIHsKKwkJLyogemVyby1zaXplZCB0cmFuc2ZlciAqLworCQlpMmNfcG54X3N0b3AoYWRhcCk7CisKKwkJLyogRGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0cy4gKi8KKwkJaW93cml0ZTMyKGlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSkgJgorCQkJfihtY250cmxfYWZpZSB8IG1jbnRybF9uYWllIHwgbWNudHJsX2RybWllKSwKKwkJCSAgSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKKworCQkvKiBTdG9wIHRpbWVyLiAqLworCQlkZWxfdGltZXJfc3luYygmYWxnX2RhdGEtPm1pZi50aW1lcik7CisJCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IFdha2luZyB1cCB4ZmVyIHJvdXRpbmUgYWZ0ZXIgIgorCQkJInplcm8teGZlci5cbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOworCX0KKworCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGV4aXRpbmc6IHN0YXQgPSAlMDR4LlxuIiwKKwkJX19GVU5DVElPTl9fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGkyY19wbnhfbWFzdGVyX3JjdiAtIHJlY2VpdmUgZGF0YSBmcm9tIHNsYXZlCisgKiBAYWRhcDoJCXBvaW50ZXIgdG8gSTJDIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmVhZHMgb25lIGJ5dGUgZGF0YSBmcm9tIHRoZSBzbGF2ZQorICovCitzdGF0aWMgaW50IGkyY19wbnhfbWFzdGVyX3JjdihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKwl1MzIgY3RsID0gMDsKKworCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGVudGVyaW5nOiBzdGF0ID0gJTA0eC5cbiIsCisJCV9fRlVOQ1RJT05fXywgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CisKKwkvKiBDaGVjaywgd2hldGhlciB0aGVyZSBpcyBhbHJlYWR5IGRhdGEsCisJICogb3Igd2UgZGlkbid0ICdhc2snIGZvciBpdCB5ZXQuCisJICovCisJaWYgKGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkgJiBtc3RhdHVzX3JmZSkgeworCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBXcml0ZSBkdW1teSBkYXRhIHRvIGZpbGwgIgorCQkJIlJ4LWZpZm8uLi5cbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJaWYgKGFsZ19kYXRhLT5taWYubGVuID09IDEpIHsKKwkJCS8qIExhc3QgYnl0ZSwgZG8gbm90IGFja25vd2xlZGdlIG5leHQgcmN2LiAqLworCQkJdmFsIHw9IHN0b3BfYml0OworCQkJaWYgKCFhbGdfZGF0YS0+bGFzdCkKKwkJCQl2YWwgfD0gc3RhcnRfYml0OworCisJCQkvKgorCQkJICogRW5hYmxlIGludGVycnVwdCBSRkRBSUUgKGRhdGEgaW4gUnggZmlmbyksCisJCQkgKiBhbmQgZGlzYWJsZSBEUk1JRSAobmVlZCBkYXRhIGZvciBUeCkKKwkJCSAqLworCQkJY3RsID0gaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKKwkJCWN0bCB8PSBtY250cmxfcmZmaWUgfCBtY250cmxfZGFpZTsKKwkJCWN0bCAmPSB+bWNudHJsX2RybWllOworCQkJaW93cml0ZTMyKGN0bCwgSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKKwkJfQorCisJCS8qCisJCSAqIE5vdyB3ZSdsbCAnYXNrJyBmb3IgZGF0YToKKwkJICogRm9yIGVhY2ggYnl0ZSB3ZSB3YW50IHRvIHJlY2VpdmUsIHdlIG11c3QKKwkJICogd3JpdGUgYSAoZHVtbXkpIGJ5dGUgdG8gdGhlIFR4LUZJRk8uCisJCSAqLworCQlpb3dyaXRlMzIodmFsLCBJMkNfUkVHX1RYKGFsZ19kYXRhKSk7CisKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSGFuZGxlIGRhdGEuICovCisJaWYgKGFsZ19kYXRhLT5taWYubGVuID4gMCkgeworCQl2YWwgPSBpb3JlYWQzMihJMkNfUkVHX1JYKGFsZ19kYXRhKSk7CisJCSphbGdfZGF0YS0+bWlmLmJ1ZisrID0gKHU4KSAodmFsICYgMHhmZik7CisJCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IHJjdiAweCV4IFslZF1cbiIsIF9fRlVOQ1RJT05fXywgdmFsLAorCQkJYWxnX2RhdGEtPm1pZi5sZW4pOworCisJCWFsZ19kYXRhLT5taWYubGVuLS07CisJCWlmIChhbGdfZGF0YS0+bWlmLmxlbiA9PSAwKSB7CisJCQlpZiAoYWxnX2RhdGEtPmxhc3QpCisJCQkJLyogV2FpdCB1bnRpbCB0aGUgU1RPUCBpcyBzZWVuLiAqLworCQkJCWlmICh3YWl0X3RpbWVvdXQoSTJDX1BOWF9USU1FT1VULCBhbGdfZGF0YSkpCisJCQkJCWRldl9lcnIoJmFkYXAtPmRldiwgIlRoZSBidXMgaXMgc3RpbGwgIgorCQkJCQkJImFjdGl2ZSBhZnRlciB0aW1lb3V0XG4iKTsKKworCQkJLyogRGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0cyAqLworCQkJY3RsID0gaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKKwkJCWN0bCAmPSB+KG1jbnRybF9hZmllIHwgbWNudHJsX25haWUgfCBtY250cmxfcmZmaWUgfAorCQkJCSBtY250cmxfZHJtaWUgfCBtY250cmxfZGFpZSk7CisJCQlpb3dyaXRlMzIoY3RsLCBJMkNfUkVHX0NUTChhbGdfZGF0YSkpOworCisJCQkvKiBLaWxsIHRpbWVyLiAqLworCQkJZGVsX3RpbWVyX3N5bmMoJmFsZ19kYXRhLT5taWYudGltZXIpOworCQkJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOworCQl9CisJfQorCisJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZXhpdGluZzogc3RhdCA9ICUwNHguXG4iLAorCQlfX0ZVTkNUSU9OX18sIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpMmNfcG54X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdTMyIHN0YXQsIGN0bDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBkZXZfaWQ7CisJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKKworCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IG1zdGF0ID0gJXggbWN0cmwgPSAleCwgbW9kZSA9ICVkXG4iLAorCQlfX0ZVTkNUSU9OX18sCisJCWlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSksCisJCWlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSksCisJCWFsZ19kYXRhLT5taWYubW9kZSk7CisJc3RhdCA9IGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSk7CisKKwkvKiBsZXQncyBzZWUgd2hhdCBraW5kIG9mIGV2ZW50IHRoaXMgaXMgKi8KKwlpZiAoc3RhdCAmIG1zdGF0dXNfYWZpKSB7CisJCS8qIFdlIGxvc3QgYXJiaXRyYXRpb24gaW4gdGhlIG1pZHN0IG9mIGEgdHJhbnNmZXIgKi8KKwkJYWxnX2RhdGEtPm1pZi5yZXQgPSAtRUlPOworCisJCS8qIERpc2FibGUgbWFzdGVyIGludGVycnVwdHMuICovCisJCWN0bCA9IGlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSk7CisJCWN0bCAmPSB+KG1jbnRybF9hZmllIHwgbWNudHJsX25haWUgfCBtY250cmxfcmZmaWUgfAorCQkJIG1jbnRybF9kcm1pZSk7CisJCWlvd3JpdGUzMihjdGwsIEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSk7CisKKwkJLyogU3RvcCB0aW1lciwgdG8gcHJldmVudCB0aW1lb3V0LiAqLworCQlkZWxfdGltZXJfc3luYygmYWxnX2RhdGEtPm1pZi50aW1lcik7CisJCWNvbXBsZXRlKCZhbGdfZGF0YS0+bWlmLmNvbXBsZXRlKTsKKwl9IGVsc2UgaWYgKHN0YXQgJiBtc3RhdHVzX25haSkgeworCQkvKiBTbGF2ZSBkaWQgbm90IGFja25vd2xlZGdlLCBnZW5lcmF0ZSBhIFNUT1AgKi8KKwkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogIgorCQkJIlNsYXZlIGRpZCBub3QgYWNrbm93bGVkZ2UsIGdlbmVyYXRpbmcgYSBTVE9QLlxuIiwKKwkJCV9fRlVOQ1RJT05fXyk7CisJCWkyY19wbnhfc3RvcChhZGFwKTsKKworCQkvKiBEaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHRzLiAqLworCQljdGwgPSBpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpOworCQljdGwgJj0gfihtY250cmxfYWZpZSB8IG1jbnRybF9uYWllIHwgbWNudHJsX3JmZmllIHwKKwkJCSBtY250cmxfZHJtaWUpOworCQlpb3dyaXRlMzIoY3RsLCBJMkNfUkVHX0NUTChhbGdfZGF0YSkpOworCisJCS8qIE91ciByZXR1cm4gdmFsdWUuICovCisJCWFsZ19kYXRhLT5taWYucmV0ID0gLUVJTzsKKworCQkvKiBTdG9wIHRpbWVyLCB0byBwcmV2ZW50IHRpbWVvdXQuICovCisJCWRlbF90aW1lcl9zeW5jKCZhbGdfZGF0YS0+bWlmLnRpbWVyKTsKKwkJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFR3byBvcHRpb25zOgorCQkgKiAtIE1hc3RlciBUeCBuZWVkcyBkYXRhLgorCQkgKiAtIFRoZXJlIGlzIGRhdGEgaW4gdGhlIFJ4LWZpZm8KKwkJICogVGhlIGxhdHRlciBpcyBvbmx5IHRoZSBjYXNlIGlmIHdlIGhhdmUgcmVxdWVzdGVkIGZvciBkYXRhLAorCQkgKiB2aWEgYSBkdW1teSB3cml0ZS4gKFNlZSAnaTJjX3BueF9tYXN0ZXJfcmN2Jy4pCisJCSAqIFdlIHRoZXJlZm9yZSBjaGVjaywgYXMgYSBzYW5pdHkgY2hlY2ssIHdoZXRoZXIgdGhhdCBpbnRlcnJ1cHQKKwkJICogaGFzIGJlZW4gZW5hYmxlZC4KKwkJICovCisJCWlmICgoc3RhdCAmIG1zdGF0dXNfZHJtaSkgfHwgIShzdGF0ICYgbXN0YXR1c19yZmUpKSB7CisJCQlpZiAoYWxnX2RhdGEtPm1pZi5tb2RlID09IEkyQ19TTUJVU19XUklURSkgeworCQkJCWkyY19wbnhfbWFzdGVyX3htaXQoYWRhcCk7CisJCQl9IGVsc2UgaWYgKGFsZ19kYXRhLT5taWYubW9kZSA9PSBJMkNfU01CVVNfUkVBRCkgeworCQkJCWkyY19wbnhfbWFzdGVyX3JjdihhZGFwKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIENsZWFyIFRESSBhbmQgQUZJIGJpdHMgKi8KKwlzdGF0ID0gaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKTsKKwlpb3dyaXRlMzIoc3RhdCB8IG1zdGF0dXNfdGRpIHwgbXN0YXR1c19hZmksIEkyQ19SRUdfU1RTKGFsZ19kYXRhKSk7CisKKwlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBleGl0aW5nLCBzdGF0ID0gJXggY3RybCA9ICV4LlxuIiwKKwkJIF9fRlVOQ1RJT05fXywgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSwKKwkJIGlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBpMmNfcG54X3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKilkYXRhOworCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7CisJdTMyIGN0bDsKKworCWRldl9lcnIoJmFkYXAtPmRldiwgIk1hc3RlciB0aW1lZCBvdXQuIHN0YXQgPSAlMDR4LCBjbnRybCA9ICUwNHguICIKKwkgICAgICAgIlJlc2V0dGluZyBtYXN0ZXIuLi5cbiIsCisJICAgICAgIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSksCisJICAgICAgIGlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSkpOworCisJLyogUmVzZXQgbWFzdGVyIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwljdGwgPSBpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpOworCWN0bCAmPSB+KG1jbnRybF9hZmllIHwgbWNudHJsX25haWUgfCBtY250cmxfcmZmaWUgfCBtY250cmxfZHJtaWUpOworCWlvd3JpdGUzMihjdGwsIEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSk7CisKKwljdGwgfD0gbWNudHJsX3Jlc2V0OworCWlvd3JpdGUzMihjdGwsIEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSk7CisJd2FpdF9yZXNldChJMkNfUE5YX1RJTUVPVVQsIGFsZ19kYXRhKTsKKwlhbGdfZGF0YS0+bWlmLnJldCA9IC1FSU87CisJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVzX3Jlc2V0X2lmX2FjdGl2ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKKwl1MzIgc3RhdDsKKworCWlmICgoc3RhdCA9IGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpICYgbXN0YXR1c19hY3RpdmUpIHsKKwkJZGV2X2VycigmYWRhcC0+ZGV2LAorCQkJIiVzOiBCdXMgaXMgc3RpbGwgYWN0aXZlIGFmdGVyIHhmZXIuIFJlc2V0IGl0Li4uXG4iLAorCQkgICAgICAgYWRhcC0+bmFtZSk7CisJCWlvd3JpdGUzMihpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpIHwgbWNudHJsX3Jlc2V0LAorCQkJICBJMkNfUkVHX0NUTChhbGdfZGF0YSkpOworCQl3YWl0X3Jlc2V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpOworCX0gZWxzZSBpZiAoIShzdGF0ICYgbXN0YXR1c19yZmUpIHx8ICEoc3RhdCAmIG1zdGF0dXNfdGZlKSkgeworCQkvKiBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBmaWZvJ3MgYWZ0ZXIgdHJhbnNmZXIsCisJCSAqIGZsdXNoIGZpZm8ncyBieSByZXNldC4KKwkJICovCisJCWlvd3JpdGUzMihpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpIHwgbWNudHJsX3Jlc2V0LAorCQkJICBJMkNfUkVHX0NUTChhbGdfZGF0YSkpOworCQl3YWl0X3Jlc2V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpOworCX0gZWxzZSBpZiAoc3RhdCAmIG1zdGF0dXNfbmFpKSB7CisJCWlvd3JpdGUzMihpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpIHwgbWNudHJsX3Jlc2V0LAorCQkJICBJMkNfUkVHX0NUTChhbGdfZGF0YSkpOworCQl3YWl0X3Jlc2V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpOworCX0KK30KKworLyoqCisgKiBpMmNfcG54X3hmZXIgLSBnZW5lcmljIHRyYW5zZmVyIGVudHJ5IHBvaW50CisgKiBAYWRhcDoJCXBvaW50ZXIgdG8gSTJDIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAbXNnczoJCWFycmF5IG9mIG1lc3NhZ2VzCisgKiBAbnVtOgkJbnVtYmVyIG9mIG1lc3NhZ2VzCisgKgorICogSW5pdGlhdGVzIHRoZSB0cmFuc2ZlcgorICovCitzdGF0aWMgaW50CitpMmNfcG54X3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgaTJjX21zZyAqcG1zZzsKKwlpbnQgcmMgPSAwLCBjb21wbGV0ZWQgPSAwLCBpOworCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBhZGFwLT5hbGdvX2RhdGE7CisJdTMyIHN0YXQgPSBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpOworCisJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZW50ZXJpbmc6ICVkIG1lc3NhZ2VzLCBzdGF0ID0gJTA0eC5cbiIsCisJCV9fRlVOQ1RJT05fXywgbnVtLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKKworCWJ1c19yZXNldF9pZl9hY3RpdmUoYWRhcCk7CisKKwkvKiBQcm9jZXNzIHRyYW5zYWN0aW9ucyBpbiBhIGxvb3AuICovCisJZm9yIChpID0gMDsgcmMgPj0gMCAmJiBpIDwgbnVtOyBpKyspIHsKKwkJdTggYWRkcjsKKworCQlwbXNnID0gJm1zZ3NbaV07CisJCWFkZHIgPSBwbXNnLT5hZGRyOworCisJCWlmIChwbXNnLT5mbGFncyAmIEkyQ19NX1RFTikgeworCQkJZGV2X2VycigmYWRhcC0+ZGV2LAorCQkJCSIlczogMTAgYml0cyBhZGRyIG5vdCBzdXBwb3J0ZWQhXG4iLAorCQkJCWFkYXAtPm5hbWUpOworCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlhbGdfZGF0YS0+bWlmLmJ1ZiA9IHBtc2ctPmJ1ZjsKKwkJYWxnX2RhdGEtPm1pZi5sZW4gPSBwbXNnLT5sZW47CisJCWFsZ19kYXRhLT5taWYubW9kZSA9IChwbXNnLT5mbGFncyAmIEkyQ19NX1JEKSA/CisJCQlJMkNfU01CVVNfUkVBRCA6IEkyQ19TTUJVU19XUklURTsKKwkJYWxnX2RhdGEtPm1pZi5yZXQgPSAwOworCQlhbGdfZGF0YS0+bGFzdCA9IChpID09IG51bSAtIDEpOworCisJCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IG1vZGUgJWQsICVkIGJ5dGVzXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlhbGdfZGF0YS0+bWlmLm1vZGUsCisJCQlhbGdfZGF0YS0+bWlmLmxlbik7CisKKwkJaTJjX3BueF9hcm1fdGltZXIoYWRhcCk7CisKKwkJLyogaW5pdGlhbGl6ZSB0aGUgY29tcGxldGlvbiB2YXIgKi8KKwkJaW5pdF9jb21wbGV0aW9uKCZhbGdfZGF0YS0+bWlmLmNvbXBsZXRlKTsKKworCQkvKiBFbmFibGUgbWFzdGVyIGludGVycnVwdCAqLworCQlpb3dyaXRlMzIoaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSB8IG1jbnRybF9hZmllIHwKKwkJCQltY250cmxfbmFpZSB8IG1jbnRybF9kcm1pZSwKKwkJCSAgSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKKworCQkvKiBQdXQgc3RhcnQtY29kZSBhbmQgc2xhdmUtYWRkcmVzcyBvbiB0aGUgYnVzLiAqLworCQlyYyA9IGkyY19wbnhfc3RhcnQoYWRkciwgYWRhcCk7CisJCWlmIChyYyA8IDApCisJCQlicmVhazsKKworCQkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOworCisJCWlmICghKHJjID0gYWxnX2RhdGEtPm1pZi5yZXQpKQorCQkJY29tcGxldGVkKys7CisJCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IENvbXBsZXRlLCByZXR1cm4gY29kZSA9ICVkLlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmMpOworCisJCS8qIENsZWFyIFRESSBhbmQgQUZJIGJpdHMgaW4gY2FzZSB0aGV5IGFyZSBzZXQuICovCisJCWlmICgoc3RhdCA9IGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpICYgbXN0YXR1c190ZGkpIHsKKwkJCWRldl9kYmcoJmFkYXAtPmRldiwKKwkJCQkiJXM6IFRESSBzdGlsbCBzZXQuLi4gY2xlYXJpbmcgbm93LlxuIiwKKwkJCSAgICAgICBhZGFwLT5uYW1lKTsKKwkJCWlvd3JpdGUzMihzdGF0LCBJMkNfUkVHX1NUUyhhbGdfZGF0YSkpOworCQl9CisJCWlmICgoc3RhdCA9IGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpICYgbXN0YXR1c19hZmkpIHsKKwkJCWRldl9kYmcoJmFkYXAtPmRldiwKKwkJCQkiJXM6IEFGSSBzdGlsbCBzZXQuLi4gY2xlYXJpbmcgbm93LlxuIiwKKwkJCSAgICAgICBhZGFwLT5uYW1lKTsKKwkJCWlvd3JpdGUzMihzdGF0LCBJMkNfUkVHX1NUUyhhbGdfZGF0YSkpOworCQl9CisJfQorCisJYnVzX3Jlc2V0X2lmX2FjdGl2ZShhZGFwKTsKKworCS8qIENsZWFudXAgdG8gYmUgc3VyZS4uLiAqLworCWFsZ19kYXRhLT5taWYuYnVmID0gTlVMTDsKKwlhbGdfZGF0YS0+bWlmLmxlbiA9IDA7CisKKwlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBleGl0aW5nLCBzdGF0ID0gJXhcbiIsCisJCV9fRlVOQ1RJT05fXywgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CisKKwlpZiAoY29tcGxldGVkICE9IG51bSkKKwkJcmV0dXJuICgocmMgPCAwKSA/IHJjIDogLUVSRU1PVEVJTyk7CisKKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgdTMyIGkyY19wbnhfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBwbnhfYWxnb3JpdGhtID0geworCS5tYXN0ZXJfeGZlciA9IGkyY19wbnhfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGkyY19wbnhfZnVuYywKK307CisKK3N0YXRpYyBpbnQgaTJjX3BueF9jb250cm9sbGVyX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGkyY19wbnhfZGF0YSAqaTJjX3BueCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXJldHVybiBpMmNfcG54LT5zdXNwZW5kKHBkZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBpMmNfcG54X2NvbnRyb2xsZXJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGkyY19wbnhfZGF0YSAqaTJjX3BueCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXJldHVybiBpMmNfcG54LT5yZXN1bWUocGRldik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGkyY19wbnhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhOworCWludCBmcmVxX21oejsKKwlzdHJ1Y3QgaTJjX3BueF9kYXRhICppMmNfcG54ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIWkyY19wbnggfHwgIWkyY19wbngtPmFkYXB0ZXIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IG5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMmNfcG54KTsKKworCWlmIChpMmNfcG54LT5jYWxjdWxhdGVfaW5wdXRfZnJlcSkKKwkJZnJlcV9taHogPSBpMmNfcG54LT5jYWxjdWxhdGVfaW5wdXRfZnJlcShwZGV2KTsKKwllbHNlIHsKKwkJZnJlcV9taHogPSBQTlhfREVGQVVMVF9GUkVROworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiU2V0dGluZyBidXMgZnJlcXVlbmN5IHRvIGRlZmF1bHQgdmFsdWU6ICIKKwkJICAgICAgICIlZCBNSHoiLCBmcmVxX21oeik7CisJfQorCisJaTJjX3BueC0+YWRhcHRlci0+YWxnbyA9ICZwbnhfYWxnb3JpdGhtOworCisJYWxnX2RhdGEgPSBpMmNfcG54LT5hZGFwdGVyLT5hbGdvX2RhdGE7CisJaW5pdF90aW1lcigmYWxnX2RhdGEtPm1pZi50aW1lcik7CisJYWxnX2RhdGEtPm1pZi50aW1lci5mdW5jdGlvbiA9IGkyY19wbnhfdGltZW91dDsKKwlhbGdfZGF0YS0+bWlmLnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpMmNfcG54LT5hZGFwdGVyOworCisJLyogUmVnaXN0ZXIgSS9PIHJlc291cmNlICovCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihhbGdfZGF0YS0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSwgcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkgICAgICAgIkkvTyByZWdpb24gMHglMDh4IGZvciBJMkMgYWxyZWFkeSBpbiB1c2UuXG4iLAorCQkgICAgICAgYWxnX2RhdGEtPmJhc2UpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9kcnZkYXRhOworCX0KKworCWlmICghKGFsZ19kYXRhLT5pb2FkZHIgPQorCQkJKHUzMilpb3JlbWFwKGFsZ19kYXRhLT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFKSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGRuJ3QgaW9yZW1hcCBJMkMgSS9PIHJlZ2lvblxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3JlbGVhc2U7CisJfQorCisJaTJjX3BueC0+c2V0X2Nsb2NrX3J1bihwZGV2KTsKKworCS8qCisJICogQ2xvY2sgRGl2aXNvciBIaWdoIFRoaXMgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBzeXN0ZW0gY2xvY2tzCisJICogdGhlIHNlcmlhbCBjbG9jayAoU0NMKSB3aWxsIGJlIGhpZ2guCisJICogRm9yIGV4YW1wbGUsIGlmIHRoZSBzeXN0ZW0gY2xvY2sgcGVyaW9kIGlzIDUwIG5zIGFuZCB0aGUgbWF4aW11bQorCSAqIGRlc2lyZWQgc2VyaWFsIHBlcmlvZCBpcyAxMDAwMCBucyAoMTAwIGtIeiksIHRoZW4gQ0xLSEkgd291bGQgYmUKKwkgKiBzZXQgdG8gMC41KihmX3N5cy9mX2kyYyktMj0wLjUqKDIwZTYvMTAwZTMpLTI9OTguIFRoZSBhY3R1YWwgdmFsdWUKKwkgKiBwcm9ncmFtbWVkIGludG8gQ0xLSEkgd2lsbCB2YXJ5IGZyb20gdGhpcyBzbGlnaHRseSBkdWUgdG8KKwkgKiB2YXJpYXRpb25zIGluIHRoZSBvdXRwdXQgcGFkJ3MgcmlzZSBhbmQgZmFsbCB0aW1lcyBhcyB3ZWxsIGFzCisJICogdGhlIGRlZ2xpdGNoaW5nIGZpbHRlciBsZW5ndGguCisJICovCisKKwl0bXAgPSAoKGZyZXFfbWh6ICogMTAwMCkgLyBJMkNfUE5YX1NQRUVEX0tIWikgLyAyIC0gMjsKKwlpb3dyaXRlMzIodG1wLCBJMkNfUkVHX0NLSChhbGdfZGF0YSkpOworCWlvd3JpdGUzMih0bXAsIEkyQ19SRUdfQ0tMKGFsZ19kYXRhKSk7CisKKwlpb3dyaXRlMzIobWNudHJsX3Jlc2V0LCBJMkNfUkVHX0NUTChhbGdfZGF0YSkpOworCWlmICh3YWl0X3Jlc2V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3VubWFwOworCX0KKwlpbml0X2NvbXBsZXRpb24oJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoYWxnX2RhdGEtPmlycSwgaTJjX3BueF9pbnRlcnJ1cHQsCisJCQkwLCBwZGV2LT5uYW1lLCBpMmNfcG54LT5hZGFwdGVyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9jbG9jazsKKworCS8qIFJlZ2lzdGVyIHRoaXMgYWRhcHRlciB3aXRoIHRoZSBJMkMgc3Vic3lzdGVtICovCisJaTJjX3BueC0+YWRhcHRlci0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKGkyY19wbngtPmFkYXB0ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkkyQzogRmFpbGVkIHRvIGFkZCBidXNcbiIpOworCQlnb3RvIG91dF9pcnE7CisJfQorCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6IE1hc3RlciBhdCAlIzh4LCBpcnEgJWQuXG4iLAorCSAgICAgICBpMmNfcG54LT5hZGFwdGVyLT5uYW1lLCBhbGdfZGF0YS0+YmFzZSwgYWxnX2RhdGEtPmlycSk7CisKKwlyZXR1cm4gMDsKKworb3V0X2lycToKKwlmcmVlX2lycShhbGdfZGF0YS0+aXJxLCBhbGdfZGF0YSk7CitvdXRfY2xvY2s6CisJaTJjX3BueC0+c2V0X2Nsb2NrX3N0b3AocGRldik7CitvdXRfdW5tYXA6CisJaW91bm1hcCgodm9pZCAqKWFsZ19kYXRhLT5pb2FkZHIpOworb3V0X3JlbGVhc2U6CisJcmVsZWFzZV9yZWdpb24oYWxnX2RhdGEtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUpOworb3V0X2RydmRhdGE6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgaTJjX3BueF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaTJjX3BueF9kYXRhICppMmNfcG54ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gaTJjX3BueC0+YWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gYWRhcC0+YWxnb19kYXRhOworCisJZnJlZV9pcnEoYWxnX2RhdGEtPmlycSwgYWxnX2RhdGEpOworCWkyY19kZWxfYWRhcHRlcihhZGFwKTsKKwlpMmNfcG54LT5zZXRfY2xvY2tfc3RvcChwZGV2KTsKKwlpb3VubWFwKCh2b2lkICopYWxnX2RhdGEtPmlvYWRkcik7CisJcmVsZWFzZV9yZWdpb24oYWxnX2RhdGEtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGkyY19wbnhfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInBueC1pMmMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IGkyY19wbnhfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGkyY19wbnhfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IGkyY19wbnhfY29udHJvbGxlcl9zdXNwZW5kLAorCS5yZXN1bWUgPSBpMmNfcG54X2NvbnRyb2xsZXJfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaTJjX2FkYXBfcG54X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpMmNfcG54X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpMmNfYWRhcF9wbnhfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpMmNfcG54X2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIlZpdGFseSBXb29sLCBEZW5uaXMgS292YWxldiA8c291cmNlQG12aXN0YS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQyBkcml2ZXIgZm9yIFBoaWxpcHMgSVAzMjA0LWJhc2VkIEkyQyBidXNzZXMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogV2UgbmVlZCB0byBtYWtlIHN1cmUgSTJDIGlzIGluaXRpYWxpemVkIGJlZm9yZSBVU0IgKi8KK3N1YnN5c19pbml0Y2FsbChpMmNfYWRhcF9wbnhfaW5pdCk7Cittb2R1bGVfZXhpdChpMmNfYWRhcF9wbnhfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UuYwppbmRleCA3NzQ1ZTIxLi4wN2MxZjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHJvc2F2YWdlLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogCQlpZiAoY2hpcC0+aTJjX2J1c1tpXS5hZGFwX29rID09IDApCiAJCQljb250aW51ZTsKIAotCQlyZXQgPSBpMmNfYml0X2RlbF9idXMoJmNoaXAtPmkyY19idXNbaV0uYWRhcCk7CisJCXJldCA9IGkyY19kZWxfYWRhcHRlcigmY2hpcC0+aTJjX2J1c1tpXS5hZGFwKTsKIAkgICAgICAgIGlmIChyZXQpIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgbm90IHJlbW92ZWRcbiIsCiAJCQkJY2hpcC0+aTJjX2J1c1tpXS5hZGFwLm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNhdmFnZTQuYwppbmRleCAyMDlmNDdlLi44NDRiNGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNhdmFnZTQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNhdmFnZTQuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzYXZhZ2U0X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCWkyY19iaXRfZGVsX2J1cygmc2F2YWdlNF9pMmNfYWRhcHRlcik7CisJaTJjX2RlbF9hZGFwdGVyKCZzYXZhZ2U0X2kyY19hZGFwdGVyKTsKIAlpb3VubWFwKGlvYWRkcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmVyc2F0aWxlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZlcnNhdGlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MWQ5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZlcnNhdGlsZS5jCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogIGkyYy12ZXJzYXRpbGUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQVJNIEx0ZC4KKyAqICB3cml0dGVuIGJ5IFJ1c3NlbGwgS2luZywgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIEkyQ19DT05UUk9MCTB4MDAKKyNkZWZpbmUgSTJDX0NPTlRST0xTCTB4MDAKKyNkZWZpbmUgSTJDX0NPTlRST0xDCTB4MDQKKyNkZWZpbmUgU0NMCQkoMSA8PCAwKQorI2RlZmluZSBTREEJCSgxIDw8IDEpCisKK3N0cnVjdCBpMmNfdmVyc2F0aWxlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJIGFkYXA7CisJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGFsZ287CisJdm9pZCBfX2lvbWVtCQkgKmJhc2U7Cit9OworCitzdGF0aWMgdm9pZCBpMmNfdmVyc2F0aWxlX3NldHNkYSh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCit7CisJc3RydWN0IGkyY192ZXJzYXRpbGUgKmkyYyA9IGRhdGE7CisKKwl3cml0ZWwoU0RBLCBpMmMtPmJhc2UgKyAoc3RhdGUgPyBJMkNfQ09OVFJPTFMgOiBJMkNfQ09OVFJPTEMpKTsKK30KKworc3RhdGljIHZvaWQgaTJjX3ZlcnNhdGlsZV9zZXRzY2wodm9pZCAqZGF0YSwgaW50IHN0YXRlKQoreworCXN0cnVjdCBpMmNfdmVyc2F0aWxlICppMmMgPSBkYXRhOworCisJd3JpdGVsKFNDTCwgaTJjLT5iYXNlICsgKHN0YXRlID8gSTJDX0NPTlRST0xTIDogSTJDX0NPTlRST0xDKSk7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3ZlcnNhdGlsZV9nZXRzZGEodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX3ZlcnNhdGlsZSAqaTJjID0gZGF0YTsKKwlyZXR1cm4gISEocmVhZGwoaTJjLT5iYXNlICsgSTJDX0NPTlRST0wpICYgU0RBKTsKK30KKworc3RhdGljIGludCBpMmNfdmVyc2F0aWxlX2dldHNjbCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpMmNfdmVyc2F0aWxlICppMmMgPSBkYXRhOworCXJldHVybiAhIShyZWFkbChpMmMtPmJhc2UgKyBJMkNfQ09OVFJPTCkgJiBTQ0wpOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGkyY192ZXJzYXRpbGVfYWxnbyA9IHsKKwkuc2V0c2RhCT0gaTJjX3ZlcnNhdGlsZV9zZXRzZGEsCisJLnNldHNjbCA9IGkyY192ZXJzYXRpbGVfc2V0c2NsLAorCS5nZXRzZGEJPSBpMmNfdmVyc2F0aWxlX2dldHNkYSwKKwkuZ2V0c2NsID0gaTJjX3ZlcnNhdGlsZV9nZXRzY2wsCisJLnVkZWxheQk9IDMwLAorCS50aW1lb3V0ID0gSFosCit9OworCitzdGF0aWMgaW50IGkyY192ZXJzYXRpbGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfdmVyc2F0aWxlICppMmM7CisJc3RydWN0IHJlc291cmNlICpyOworCWludCByZXQ7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSwgInZlcnNhdGlsZS1pMmMiKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpMmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX3ZlcnNhdGlsZSksIEdGUF9LRVJORUwpOworCWlmICghaTJjKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JlbGVhc2U7CisJfQorCisJaTJjLT5iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlpZiAoIWkyYy0+YmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXdyaXRlbChTQ0wgfCBTREEsIGkyYy0+YmFzZSArIEkyQ19DT05UUk9MUyk7CisKKwlpMmMtPmFkYXAub3duZXIgPSBUSElTX01PRFVMRTsKKwlzdHJsY3B5KGkyYy0+YWRhcC5uYW1lLCAiVmVyc2F0aWxlIEkyQyBhZGFwdGVyIiwgc2l6ZW9mKGkyYy0+YWRhcC5uYW1lKSk7CisJaTJjLT5hZGFwLmFsZ29fZGF0YSA9ICZpMmMtPmFsZ287CisJaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CisJaTJjLT5hbGdvID0gaTJjX3ZlcnNhdGlsZV9hbGdvOworCWkyYy0+YWxnby5kYXRhID0gaTJjOworCisJcmV0ID0gaTJjX2JpdF9hZGRfYnVzKCZpMmMtPmFkYXApOworCWlmIChyZXQgPj0gMCkgeworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CisJCXJldHVybiAwOworCX0KKworCWlvdW5tYXAoaTJjLT5iYXNlKTsKKyBlcnJfZnJlZToKKwlrZnJlZShpMmMpOworIGVycl9yZWxlYXNlOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKyBlcnJfb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3ZlcnNhdGlsZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfdmVyc2F0aWxlICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCWkyY19kZWxfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaTJjX3ZlcnNhdGlsZV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGkyY192ZXJzYXRpbGVfcHJvYmUsCisJLnJlbW92ZQkJPSBpMmNfdmVyc2F0aWxlX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAidmVyc2F0aWxlLWkyYyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpMmNfdmVyc2F0aWxlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpMmNfdmVyc2F0aWxlX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpMmNfdmVyc2F0aWxlX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTJjX3ZlcnNhdGlsZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpMmNfdmVyc2F0aWxlX2luaXQpOworbW9kdWxlX2V4aXQoaTJjX3ZlcnNhdGlsZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBUk0gVmVyc2F0aWxlIEkyQyBidXMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYwppbmRleCA5MTBlMjAwLi4xNWQ3ZTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgdnQ1ODZiX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCWkyY19iaXRfZGVsX2J1cygmdnQ1ODZiX2FkYXB0ZXIpOworCWkyY19kZWxfYWRhcHRlcigmdnQ1ODZiX2FkYXB0ZXIpOwogCXJlbGVhc2VfcmVnaW9uKEkyQ19ESVIsIElPU1BBQ0UpOwogCXBtX2lvX2Jhc2UgPSAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12b29kb28zLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZvb2RvbzMuYwppbmRleCA2YzhkMjUxLi5iMDM3N2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZvb2RvbzMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZvb2RvbzMuYwpAQCAtMjExLDE0ICsyMTEsMTQgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAlyZXR2YWwgPSBpMmNfYml0X2FkZF9idXMoJnZvb2RvbzNfZGRjX2FkYXB0ZXIpOwogCWlmIChyZXR2YWwpCi0JCWkyY19iaXRfZGVsX2J1cygmdm9vZG9vM19pMmNfYWRhcHRlcik7CisJCWkyY19kZWxfYWRhcHRlcigmdm9vZG9vM19pMmNfYWRhcHRlcik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHZvb2RvbzNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JaTJjX2JpdF9kZWxfYnVzKCZ2b29kb28zX2kyY19hZGFwdGVyKTsKLSAJaTJjX2JpdF9kZWxfYnVzKCZ2b29kb28zX2RkY19hZGFwdGVyKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJnZvb2RvbzNfaTJjX2FkYXB0ZXIpOworCWkyY19kZWxfYWRhcHRlcigmdm9vZG9vM19kZGNfYWRhcHRlcik7CiAJaW91bm1hcChpb2FkZHIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2kyYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9pMmMuYwppbmRleCA4ZGRiYWU0Li42Y2Q5NmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2kyYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfaTJjLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCiBzdGF0aWMgdm9pZCBzY3gyMDBfaTJjX2NsZWFudXAodm9pZCkKIHsKLQlpMmNfYml0X2RlbF9idXMoJnNjeDIwMF9pMmNfb3BzKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJnNjeDIwMF9pMmNfb3BzKTsKIH0KIAogbW9kdWxlX2luaXQoc2N4MjAwX2kyY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTMzNy5jIGIvZHJpdmVycy9pMmMvY2hpcHMvZHMxMzM3LmMKaW5kZXggOTNkNDgzYi4uZWMxN2Q2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvZHMxMzM3LmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvZHMxMzM3LmMKQEAgLTM0NywxMyArMzQ3LDE5IEBACiAKIAlpZiAoKHN0YXR1cyAmIDB4ODApIHx8IChjb250cm9sICYgMHg4MCkpIHsKIAkJLyogUlRDIG5vdCBydW5uaW5nICovCi0JCXU4IGJ1ZlsxNl07CisJCXU4IGJ1ZlsxKzE2XTsJLyogRmlyc3QgYnl0ZSBpcyBpbnRlcnByZXRlZCBhcyBhZGRyZXNzICovCiAJCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXTsKIAogCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiBSVEMgbm90IHJ1bm5pbmchXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJCS8qIEluaXRpYWxpemUgYWxsLCBpbmNsdWRpbmcgU1RBVFVTIGFuZCBDT05UUk9MIHRvIHplcm8gKi8KIAkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCisJCS8qIFdyaXRlIHZhbGlkIHZhbHVlcyBpbiB0aGUgZGF0ZS90aW1lIHJlZ2lzdGVycyAqLworCQlidWZbMStEUzEzMzdfUkVHX0RBWV0gPSAxOworCQlidWZbMStEUzEzMzdfUkVHX0RBVEVdID0gMTsKKwkJYnVmWzErRFMxMzM3X1JFR19NT05USF0gPSAxOworCiAJCW1zZ1swXS5hZGRyID0gY2xpZW50LT5hZGRyOwogCQltc2dbMF0uZmxhZ3MgPSAwOwogCQltc2dbMF0ubGVuID0gc2l6ZW9mKGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9tNDF0MDAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL200MXQwMC5jCmluZGV4IDQyMDM3N2MuLjNmY2I2NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL200MXQwMC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL200MXQwMC5jCkBAIC0yMDksNiArMjA5LDcgQEAKIAlidWZbbTQxdDAwX2NoaXAtPmhvdXJdID0gKGJ1ZlttNDF0MDBfY2hpcC0+aG91cl0gJiB+MHgzZikgfCAoaG91ciYgMHgzZik7CiAJYnVmW200MXQwMF9jaGlwLT5kYXldID0gKGJ1ZlttNDF0MDBfY2hpcC0+ZGF5XSAmIH4weDNmKSB8IChkYXkgJiAweDNmKTsKIAlidWZbbTQxdDAwX2NoaXAtPm1vbl0gPSAoYnVmW200MXQwMF9jaGlwLT5tb25dICYgfjB4MWYpIHwgKG1vbiAmIDB4MWYpOworCWJ1ZlttNDF0MDBfY2hpcC0+eWVhcl0gPSB5ZWFyOwogCiAJaWYgKGkyY19tYXN0ZXJfc2VuZChzYXZlX2NsaWVudCwgd2J1ZiwgOSkgPCAwKQogCQlkZXZfZXJyKCZzYXZlX2NsaWVudC0+ZGV2LCAibTQxdDAwX3NldDogV3JpdGUgZXJyb3JcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RwczY1MDEwLmMKaW5kZXggNjBiZWY5NC4uNGVlNTZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jCkBAIC04Miw3ICs4Miw3IEBACiAJc3RydWN0IGkyY19jbGllbnQJY2xpZW50OwogCXN0cnVjdCBtdXRleAkJbG9jazsKIAlpbnQJCQlpcnE7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yawl3b3JrOwogCXN0cnVjdCBkZW50cnkJCSpmaWxlOwogCXVuc2lnbmVkCQljaGFyZ2luZzoxOwogCXVuc2lnbmVkCQlwb3I6MTsKQEAgLTMyOCw3ICszMjgsNyBAQAogewogCXU4IHRtcCA9IDAsIG1hc2ssIHBvbGw7CiAKLQkvKiBJUlFzIHdvbid0IHRyaWdnZXIgaXJxcyBmb3IgY2VydGFpbiBldmVudHMsIGJ1dCB3ZSBjYW4gZ2V0CisJLyogSVJRcyB3b24ndCB0cmlnZ2VyIGZvciBjZXJ0YWluIGV2ZW50cywgYnV0IHdlIGNhbiBnZXQKIAkgKiBvdGhlcnMgYnkgcG9sbGluZyAobm9ybWFsbHksIHdpdGggZXh0ZXJuYWwgcG93ZXIgYXBwbGllZCkuCiAJICovCiAJcG9sbCA9IDA7CkBAIC00MTEsMTAgKzQxMSwxMSBAQAogfQogCiAvKiBoYW5kbGUgSVJRcyBhbmQgcG9sbGluZyB1c2luZyBrZXZlbnRkIGZvciBub3cgKi8KLXN0YXRpYyB2b2lkIHRwczY1MDEwX3dvcmsodm9pZCAqX3RwcykKK3N0YXRpYyB2b2lkIHRwczY1MDEwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCB0cHM2NTAxMAkJKnRwcyA9IF90cHM7CisJc3RydWN0IHRwczY1MDEwCQkqdHBzOwogCisJdHBzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0cHM2NTAxMCwgd29yay53b3JrKTsKIAltdXRleF9sb2NrKCZ0cHMtPmxvY2spOwogCiAJdHBzNjUwMTBfaW50ZXJydXB0KHRwcyk7CkBAIC00NTIsNyArNDUzLDcgQEAKIAogCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwogCXNldF9iaXQoRkxBR19JUlFfRU5BQkxFLCAmdHBzLT5mbGFncyk7Ci0JKHZvaWQpIHNjaGVkdWxlX3dvcmsoJnRwcy0+d29yayk7CisJKHZvaWQpIHNjaGVkdWxlX3dvcmsoJnRwcy0+d29yay53b3JrKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTQ2NSwxMyArNDY2LDE1IEBACiAJc3RydWN0IHRwczY1MDEwCQkqdHBzOwogCiAJdHBzID0gY29udGFpbmVyX29mKGNsaWVudCwgc3RydWN0IHRwczY1MDEwLCBjbGllbnQpOworCWZyZWVfaXJxKHRwcy0+aXJxLCB0cHMpOwogI2lmZGVmCUNPTkZJR19BUk0KIAlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkpCiAJCW9tYXBfZnJlZV9ncGlvKDU4KTsKIAlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKQogCQlvbWFwX2ZyZWVfZ3BpbyhPTUFQX01QVUlPKDEpKTsKICNlbmRpZgotCWZyZWVfaXJxKHRwcy0+aXJxLCB0cHMpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnRwcy0+d29yayk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlkZWJ1Z2ZzX3JlbW92ZSh0cHMtPmZpbGUpOwogCWlmIChpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpID09IDApCiAJCWtmcmVlKHRwcyk7CkBAIC01MDUsNyArNTA4LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9pbml0KCZ0cHMtPmxvY2spOwotCUlOSVRfV09SSygmdHBzLT53b3JrLCB0cHM2NTAxMF93b3JrLCB0cHMpOworCUlOSVRfREVMQVlFRF9XT1JLKCZ0cHMtPndvcmssIHRwczY1MDEwX3dvcmspOwogCXRwcy0+aXJxID0gLTE7CiAJdHBzLT5jbGllbnQuYWRkciA9IGFkZHJlc3M7CiAJdHBzLT5jbGllbnQuYWRhcHRlciA9IGJ1czsKQEAgLTYyMCw3ICs2MjMsNyBAQAogCSh2b2lkKSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKCZ0cHMtPmNsaWVudCwgVFBTX01BU0szLCAweDBmCiAJCXwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKCZ0cHMtPmNsaWVudCwgVFBTX01BU0szKSk7CiAKLQl0cHM2NTAxMF93b3JrKHRwcyk7CisJdHBzNjUwMTBfd29yaygmdHBzLT53b3JrLndvcmspOwogCiAJdHBzLT5maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShEUklWRVJfTkFNRSwgU19JUlVHTywgTlVMTCwKIAkJCQl0cHMsIERFQlVHX0ZPUFMpOwpAQCAtNjcyLDcgKzY3NSw3IEBACiAJCQkmJiB0ZXN0X2FuZF9zZXRfYml0KAogCQkJCUZMQUdfVkJVU19DSEFOR0VELCAmdGhlX3Rwcy0+ZmxhZ3MpKSB7CiAJCS8qIGdhZGdldCBkcml2ZXJzIGNhbGwgdGhpcyBpbl9pcnEoKSAqLwotCQkodm9pZCkgc2NoZWR1bGVfd29yaygmdGhlX3Rwcy0+d29yayk7CisJCSh2b2lkKSBzY2hlZHVsZV93b3JrKCZ0aGVfdHBzLT53b3JrLndvcmspOwogCX0KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCmluZGV4IDdjYTgxZjQuLmIwNTM3OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwpAQCAtOTUsMTYgKzk1LDMyIEBACiAJLmJ1cyA9ICZpMmNfYnVzX3R5cGUsCiB9OwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEkyQyBidXMgYWRhcHRlcnMgLS0gb25lIHJvb3RzIGVhY2ggSTJDIG9yIFNNQlVTIHNlZ21lbnQgKi8KKwogc3RhdGljIHZvaWQgaTJjX2FkYXB0ZXJfY2xhc3NfZGV2X3JlbGVhc2Uoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGNsYXNzX2Rldl90b19pMmNfYWRhcHRlcihkZXYpOwogCWNvbXBsZXRlKCZhZGFwLT5jbGFzc19kZXZfcmVsZWFzZWQpOwogfQogCitzdGF0aWMgc3NpemVfdCBpMmNfYWRhcHRlcl9zaG93X25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGNsYXNzX2Rldl90b19pMmNfYWRhcHRlcihjZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYWRhcC0+bmFtZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBpMmNfYWRhcHRlcl9hdHRyc1tdID0geworCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBpMmNfYWRhcHRlcl9zaG93X25hbWUsIE5VTEwpLAorCXsgfSwKK307CisKIHN0cnVjdCBjbGFzcyBpMmNfYWRhcHRlcl9jbGFzcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkubmFtZSA9CQkiaTJjLWFkYXB0ZXIiLAotCS5yZWxlYXNlID0JJmkyY19hZGFwdGVyX2NsYXNzX2Rldl9yZWxlYXNlLAorCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJpMmMtYWRhcHRlciIsCisJLmNsYXNzX2Rldl9hdHRycwk9IGkyY19hZGFwdGVyX2F0dHJzLAorCS5yZWxlYXNlCQk9ICZpMmNfYWRhcHRlcl9jbGFzc19kZXZfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfYWRhcHRlcl9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTEyNywyMCArMTQzLDE3IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGNsaWVudC0+bmFtZSk7CiB9CiAKLS8qIAotICogV2UgY2FuJ3QgdXNlIHRoZSBERVZJQ0VfQVRUUigpIG1hY3JvIGhlcmUgYXMgd2Ugd2FudCB0aGUgc2FtZSBmaWxlbmFtZSBmb3IgYQotICogZGlmZmVyZW50IHR5cGUgb2YgYSBkZXZpY2UuICBTbyBiZXdhcmUgaWYgdGhlIERFVklDRV9BVFRSKCkgbWFjcm8gZXZlcgotICogY2hhbmdlcywgdGhpcyBkZWZpbml0aW9uIHdpbGwgYWxzbyBoYXZlIHRvIGNoYW5nZS4KKy8qCisgKiBXZSBjYW4ndCB1c2UgdGhlIERFVklDRV9BVFRSKCkgbWFjcm8gaGVyZSwgYXMgd2UgdXNlZCB0aGUgc2FtZSBuYW1lIGZvcgorICogYW4gaTJjIGFkYXB0ZXIgYXR0cmlidXRlIChhYm92ZSkuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9jbGllbnRfbmFtZSA9IHsKLQkuYXR0cgk9IHsubmFtZSA9ICJuYW1lIiwgLm1vZGUgPSBTX0lSVUdPLCAub3duZXIgPSBUSElTX01PRFVMRSB9LAotCS5zaG93CT0gJnNob3dfY2xpZW50X25hbWUsCi19Oworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2NsaWVudF9uYW1lID0KKwlfX0FUVFIobmFtZSwgU19JUlVHTywgJnNob3dfY2xpZW50X25hbWUsIE5VTEwpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogcmVnaXN0ZXJpbmcgZnVuY3Rpb25zIAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICogcmVnaXN0ZXJpbmcgZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCiAvKiAtLS0tLQpAQCAtMTc4LDggKzE5MSwxMiBAQAogCSAqIElmIHRoZSBwYXJlbnQgcG9pbnRlciBpcyBub3Qgc2V0IHVwLAogCSAqIHdlIGFkZCB0aGlzIGFkYXB0ZXIgdG8gdGhlIGhvc3QgYnVzLgogCSAqLwotCWlmIChhZGFwLT5kZXYucGFyZW50ID09IE5VTEwpCisJaWYgKGFkYXAtPmRldi5wYXJlbnQgPT0gTlVMTCkgewogCQlhZGFwLT5kZXYucGFyZW50ID0gJnBsYXRmb3JtX2J1czsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiKipXQVJOSU5HKiogSTJDIGFkYXB0ZXIgZHJpdmVyIFslc10gIgorCQkgICAgICAgImZvcmdvdCB0byBzcGVjaWZ5IHBoeXNpY2FsIGRldmljZTsgZml4IGl0IVxuIiwKKwkJICAgICAgIGFkYXAtPm5hbWUpOworCX0KIAlzcHJpbnRmKGFkYXAtPmRldi5idXNfaWQsICJpMmMtJWQiLCBhZGFwLT5ucik7CiAJYWRhcC0+ZGV2LmRyaXZlciA9ICZpMmNfYWRhcHRlcl9kcml2ZXI7CiAJYWRhcC0+ZGV2LnJlbGVhc2UgPSAmaTJjX2FkYXB0ZXJfZGV2X3JlbGVhc2U7CkBAIC0zMTQsNyArMzMxLDcgQEAKIAlyZXMgPSBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJpdmVyKTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwotCQorCiAJbXV0ZXhfbG9jaygmY29yZV9saXN0cyk7CiAKIAlsaXN0X2FkZF90YWlsKCZkcml2ZXItPmxpc3QsJmRyaXZlcnMpOwpAQCAtMzM4LDEzICszNTUsMTMgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgKml0ZW0xLCAqaXRlbTIsICpfbjsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAgKmNsaWVudDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7Ci0JCisKIAlpbnQgcmVzID0gMDsKIAogCW11dGV4X2xvY2soJmNvcmVfbGlzdHMpOwogCiAJLyogSGF2ZSBhIGxvb2sgYXQgZWFjaCBhZGFwdGVyLCBpZiBjbGllbnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBzdGlsbAotCSAqIGF0dGFjaGVkLiBJZiBzbywgZGV0YWNoIHRoZW0gdG8gYmUgYWJsZSB0byBraWxsIHRoZSBkcml2ZXIgCisJICogYXR0YWNoZWQuIElmIHNvLCBkZXRhY2ggdGhlbSB0byBiZSBhYmxlIHRvIGtpbGwgdGhlIGRyaXZlcgogCSAqIGFmdGVyd2FyZHMuCiAJICovCiAJbGlzdF9mb3JfZWFjaChpdGVtMSwmYWRhcHRlcnMpIHsKQEAgLTQxOSwxNCArNDM2LDE0IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5saXN0LCZhZGFwdGVyLT5jbGllbnRzKTsKLQkKKwogCWNsaWVudC0+dXNhZ2VfY291bnQgPSAwOwogCiAJY2xpZW50LT5kZXYucGFyZW50ID0gJmNsaWVudC0+YWRhcHRlci0+ZGV2OwogCWNsaWVudC0+ZGV2LmRyaXZlciA9ICZjbGllbnQtPmRyaXZlci0+ZHJpdmVyOwogCWNsaWVudC0+ZGV2LmJ1cyA9ICZpMmNfYnVzX3R5cGU7CiAJY2xpZW50LT5kZXYucmVsZWFzZSA9ICZpMmNfY2xpZW50X3JlbGVhc2U7Ci0JCisKIAlzbnByaW50ZigmY2xpZW50LT5kZXYuYnVzX2lkWzBdLCBzaXplb2YoY2xpZW50LT5kZXYuYnVzX2lkKSwKIAkJIiVkLSUwNHgiLCBpMmNfYWRhcHRlcl9pZChhZGFwdGVyKSwgY2xpZW50LT5hZGRyKTsKIAlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJjbGllbnQgWyVzXSByZWdpc3RlcmVkIHdpdGggYnVzIGlkICVzXG4iLApAQCAtNDY3LDcgKzQ4NCw3IEBACiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwogCWludCByZXMgPSAwOwotCQorCiAJaWYgKGNsaWVudC0+dXNhZ2VfY291bnQgPiAwKSB7CiAJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIkNsaWVudCBbJXNdIHN0aWxsIGJ1c3ksICIKIAkJCSAiY2FuJ3QgZGV0YWNoXG4iLCBjbGllbnQtPm5hbWUpOwpAQCAtNTM1LDEwICs1NTIsMTAgQEAKIAkJCSBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KLQkKKwogCWNsaWVudC0+dXNhZ2VfY291bnQtLTsKIAlpMmNfZGVjX3VzZV9jbGllbnQoY2xpZW50KTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC02MDMsNyArNjIwLDcgQEAKIAkJfQogI2VuZGlmCiAKLQkJbXV0ZXhfbG9jaygmYWRhcC0+YnVzX2xvY2spOworCQltdXRleF9sb2NrX25lc3RlZCgmYWRhcC0+YnVzX2xvY2ssIGFkYXAtPmxldmVsKTsKIAkJcmV0ID0gYWRhcC0+YWxnby0+bWFzdGVyX3hmZXIoYWRhcCxtc2dzLG51bSk7CiAJCW11dGV4X3VubG9jaygmYWRhcC0+YnVzX2xvY2spOwogCkBAIC02MjQsNyArNjQxLDcgQEAKIAltc2cuZmxhZ3MgPSBjbGllbnQtPmZsYWdzICYgSTJDX01fVEVOOwogCW1zZy5sZW4gPSBjb3VudDsKIAltc2cuYnVmID0gKGNoYXIgKilidWY7Ci0JCisKIAlyZXQgPSBpMmNfdHJhbnNmZXIoYWRhcCwgJm1zZywgMSk7CiAKIAkvKiBJZiBldmVyeXRoaW5nIHdlbnQgb2sgKGkuZS4gMSBtc2cgdHJhbnNtaXR0ZWQpLCByZXR1cm4gI2J5dGVzCkBAIC03NTcsNyArNzc0LDcgQEAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX1FVSUNLKSkgewogCQlpZiAoYWRkcmVzc19kYXRhLT5wcm9iZVswXSA9PSBJMkNfQ0xJRU5UX0VORAogCQkgJiYgYWRkcmVzc19kYXRhLT5ub3JtYWxfaTJjWzBdID09IEkyQ19DTElFTlRfRU5EKQotCQkgCXJldHVybiAwOworCQkJcmV0dXJuIDA7CiAKIAkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwgIlNNQnVzIFF1aWNrIGNvbW1hbmQgbm90IHN1cHBvcnRlZCwgIgogCQkJICJjYW4ndCBwcm9iZSBmb3IgY2hpcHNcbiIpOwpAQCAtODE3LDcgKzgzNCw3IEBACiBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyY19nZXRfYWRhcHRlcihpbnQgaWQpCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCQorCiAJbXV0ZXhfbG9jaygmY29yZV9saXN0cyk7CiAJYWRhcHRlciA9IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKilpZHJfZmluZCgmaTJjX2FkYXB0ZXJfaWRyLCBpZCk7CiAJaWYgKGFkYXB0ZXIgJiYgIXRyeV9tb2R1bGVfZ2V0KGFkYXB0ZXItPm93bmVyKSkKQEAgLTgzNCwxNCArODUxLDE0IEBACiAKIC8qIFRoZSBTTUJ1cyBwYXJ0cyAqLwogCi0jZGVmaW5lIFBPTFkgICAgKDB4MTA3MFUgPDwgMykgCisjZGVmaW5lIFBPTFkgICAgKDB4MTA3MFUgPDwgMykKIHN0YXRpYyB1OAogY3JjOCh1MTYgZGF0YSkKIHsKIAlpbnQgaTsKLSAgCisKIAlmb3IoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKGRhdGEgJiAweDgwMDApIAorCQlpZiAoZGF0YSAmIDB4ODAwMCkKIAkJCWRhdGEgPSBkYXRhIF4gUE9MWTsKIAkJZGF0YSA9IGRhdGEgPDwgMTsKIAl9CkBAIC04OTEsMTMgKzkwOCwxMyBAQAogCQkJcnBlYywgY3BlYyk7CiAJCXJldHVybiAtMTsKIAl9Ci0JcmV0dXJuIDA7CQorCXJldHVybiAwOwogfQogCiBzMzIgaTJjX3NtYnVzX3dyaXRlX3F1aWNrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHZhbHVlKQogewogCXJldHVybiBpMmNfc21idXNfeGZlcihjbGllbnQtPmFkYXB0ZXIsY2xpZW50LT5hZGRyLGNsaWVudC0+ZmxhZ3MsCi0gCSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwwLEkyQ19TTUJVU19RVUlDSyxOVUxMKTsKKwkgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsMCxJMkNfU01CVVNfUVVJQ0ssTlVMTCk7CiB9CiAKIHMzMiBpMmNfc21idXNfcmVhZF9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCkBAIC05OTYsMTEgKzEwMTMsMTEgQEAKIAkJCSAgICAgIEkyQ19TTUJVU19JMkNfQkxPQ0tfREFUQSwgJmRhdGEpOwogfQogCi0vKiBTaW11bGF0ZSBhIFNNQnVzIGNvbW1hbmQgdXNpbmcgdGhlIGkyYyBwcm90b2NvbCAKKy8qIFNpbXVsYXRlIGEgU01CdXMgY29tbWFuZCB1c2luZyB0aGUgaTJjIHByb3RvY29sCiAgICBObyBjaGVja2luZyBvZiBwYXJhbWV0ZXJzIGlzIGRvbmUhICAqLwotc3RhdGljIHMzMiBpMmNfc21idXNfeGZlcl9lbXVsYXRlZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBhZGFwdGVyLCB1MTYgYWRkciwgCitzdGF0aWMgczMyIGkyY19zbWJ1c194ZmVyX2VtdWxhdGVkKHN0cnVjdCBpMmNfYWRhcHRlciAqIGFkYXB0ZXIsIHUxNiBhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLCBpbnQgc2l6ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGkyY19zbWJ1c19kYXRhICogZGF0YSkKIHsKIAkvKiBTbyB3ZSBuZWVkIHRvIGdlbmVyYXRlIGEgc2VyaWVzIG9mIG1zZ3MuIEluIHRoZSBjYXNlIG9mIHdyaXRpbmcsIHdlCkBAIC0xMDEwLDcgKzEwMjcsNyBAQAogCXVuc2lnbmVkIGNoYXIgbXNnYnVmMFtJMkNfU01CVVNfQkxPQ0tfTUFYKzNdOwogCXVuc2lnbmVkIGNoYXIgbXNnYnVmMVtJMkNfU01CVVNfQkxPQ0tfTUFYKzJdOwogCWludCBudW0gPSByZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEPzI6MTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7IHsgYWRkciwgZmxhZ3MsIDEsIG1zZ2J1ZjAgfSwgCisJc3RydWN0IGkyY19tc2cgbXNnWzJdID0geyB7IGFkZHIsIGZsYWdzLCAxLCBtc2didWYwIH0sCiAJICAgICAgICAgICAgICAgICAgICAgICAgICB7IGFkZHIsIGZsYWdzIHwgSTJDX01fUkQsIDAsIG1zZ2J1ZjEgfQogCSAgICAgICAgICAgICAgICAgICAgICAgIH07CiAJaW50IGk7CkBAIC0xMTAzLDE0ICsxMTIwLDE0IEBACiAJaWYgKGkpIHsKIAkJLyogQ29tcHV0ZSBQRUMgaWYgZmlyc3QgbWVzc2FnZSBpcyBhIHdyaXRlICovCiAJCWlmICghKG1zZ1swXS5mbGFncyAmIEkyQ19NX1JEKSkgewotCQkgCWlmIChudW0gPT0gMSkgLyogV3JpdGUgb25seSAqLworCQkJaWYgKG51bSA9PSAxKSAvKiBXcml0ZSBvbmx5ICovCiAJCQkJaTJjX3NtYnVzX2FkZF9wZWMoJm1zZ1swXSk7CiAJCQllbHNlIC8qIFdyaXRlIGZvbGxvd2VkIGJ5IHJlYWQgKi8KIAkJCQlwYXJ0aWFsX3BlYyA9IGkyY19zbWJ1c19tc2dfcGVjKDAsICZtc2dbMF0pOwogCQl9CiAJCS8qIEFzayBmb3IgUEVDIGlmIGxhc3QgbWVzc2FnZSBpcyBhIHJlYWQgKi8KIAkJaWYgKG1zZ1tudW0tMV0uZmxhZ3MgJiBJMkNfTV9SRCkKLQkJIAltc2dbbnVtLTFdLmxlbisrOworCQkJbXNnW251bS0xXS5sZW4rKzsKIAl9CiAKIAlpZiAoaTJjX3RyYW5zZmVyKGFkYXB0ZXIsIG1zZywgbnVtKSA8IDApCkBAIC0xMTMwLDcgKzExNDcsNyBAQAogCQkJY2FzZSBJMkNfU01CVVNfQllURV9EQVRBOgogCQkJCWRhdGEtPmJ5dGUgPSBtc2didWYxWzBdOwogCQkJCWJyZWFrOwotCQkJY2FzZSBJMkNfU01CVVNfV09SRF9EQVRBOiAKKwkJCWNhc2UgSTJDX1NNQlVTX1dPUkRfREFUQToKIAkJCWNhc2UgSTJDX1NNQlVTX1BST0NfQ0FMTDoKIAkJCQlkYXRhLT53b3JkID0gbXNnYnVmMVswXSB8IChtc2didWYxWzFdIDw8IDgpOwogCQkJCWJyZWFrOwpAQCAtMTE0Niw3ICsxMTYzLDcgQEAKIAogCiBzMzIgaTJjX3NtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICogYWRhcHRlciwgdTE2IGFkZHIsIHVuc2lnbmVkIHNob3J0IGZsYWdzLAotICAgICAgICAgICAgICAgICAgIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwgaW50IHNpemUsIAorICAgICAgICAgICAgICAgICAgIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgdW5pb24gaTJjX3NtYnVzX2RhdGEgKiBkYXRhKQogewogCXMzMiByZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtZGV2LmMgYi9kcml2ZXJzL2kyYy9pMmMtZGV2LmMKaW5kZXggOTRhNGU5YS4uYWM1YmQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWRldi5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1kZXYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gICAgaTJjLWRldi5jIC0gaTJjLWJ1cyBkcml2ZXIsIGNoYXIgZGV2aWNlIGludGVyZmFjZSAgCisgICAgaTJjLWRldi5jIC0gaTJjLWJ1cyBkcml2ZXIsIGNoYXIgZGV2aWNlIGludGVyZmFjZQogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk1LTk3IFNpbW9uIEcuIFZvZ2wKICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtOTkgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPgpAQCAtOTAsNiArOTAsNyBAQAogCXNwaW5fbG9jaygmaTJjX2Rldl9saXN0X2xvY2spOwogCWxpc3RfZGVsKCZpMmNfZGV2LT5saXN0KTsKIAlzcGluX3VubG9jaygmaTJjX2Rldl9saXN0X2xvY2spOworCWtmcmVlKGkyY19kZXYpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2FkYXB0ZXJfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xMTksNyArMTIwLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwcl9kZWJ1ZygiaTJjLWRldjogaTJjLSVkIHJlYWRpbmcgJXpkIGJ5dGVzLlxuIiwKLQkJaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSwgY291bnQpOworCQlpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSksIGNvdW50KTsKIAogCXJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsdG1wLGNvdW50KTsKIAlpZiAocmV0ID49IDApCkBAIC0xNDcsNyArMTQ4LDcgQEAKIAl9CiAKIAlwcl9kZWJ1ZygiaTJjLWRldjogaTJjLSVkIHdyaXRpbmcgJXpkIGJ5dGVzLlxuIiwKLQkJaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSwgY291bnQpOworCQlpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSksIGNvdW50KTsKIAogCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsdG1wLGNvdW50KTsKIAlrZnJlZSh0bXApOwpAQCAtMTcyLDcgKzE3Myw3IEBACiAJc3dpdGNoICggY21kICkgewogCWNhc2UgSTJDX1NMQVZFOgogCWNhc2UgSTJDX1NMQVZFX0ZPUkNFOgotCQlpZiAoKGFyZyA+IDB4M2ZmKSB8fCAKKwkJaWYgKChhcmcgPiAweDNmZikgfHwKIAkJICAgICgoKGNsaWVudC0+ZmxhZ3MgJiBJMkNfTV9URU4pID09IDApICYmIGFyZyA+IDB4N2YpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICgoY21kID09IEkyQ19TTEFWRSkgJiYgaTJjX2NoZWNrX2FkZHIoY2xpZW50LT5hZGFwdGVyLGFyZykpCkBAIC0xOTMsMTIgKzE5NCwxMSBAQAogCQlyZXR1cm4gMDsKIAljYXNlIEkyQ19GVU5DUzoKIAkJZnVuY3MgPSBpMmNfZ2V0X2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyKTsKLQkJcmV0dXJuIChjb3B5X3RvX3VzZXIoKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJnLCAmZnVuY3MsCi0JCSAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSkpPy1FRkFVTFQ6MDsKKwkJcmV0dXJuIHB1dF91c2VyKGZ1bmNzLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpOwogCiAJY2FzZSBJMkNfUkRXUjoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZHdyX2FyZywgCi0JCQkJICAgKHN0cnVjdCBpMmNfcmR3cl9pb2N0bF9kYXRhIF9fdXNlciAqKWFyZywgCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmR3cl9hcmcsCisJCQkJICAgKHN0cnVjdCBpMmNfcmR3cl9pb2N0bF9kYXRhIF9fdXNlciAqKWFyZywKIAkJCQkgICBzaXplb2YocmR3cl9hcmcpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCkBAIC0yMDYsOSArMjA2LDkgQEAKIAkJICogYmUgc2VudCBhdCBvbmNlICovCiAJCWlmIChyZHdyX2FyZy5ubXNncyA+IEkyQ19SRFJXX0lPQ1RMX01BWF9NU0dTKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQorCiAJCXJkd3JfcGEgPSAoc3RydWN0IGkyY19tc2cgKikKLQkJCWttYWxsb2MocmR3cl9hcmcubm1zZ3MgKiBzaXplb2Yoc3RydWN0IGkyY19tc2cpLCAKKwkJCWttYWxsb2MocmR3cl9hcmcubm1zZ3MgKiBzaXplb2Yoc3RydWN0IGkyY19tc2cpLAogCQkJR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKHJkd3JfcGEgPT0gTlVMTCkgcmV0dXJuIC1FTk9NRU07CkBAIC0yNzgsOSArMjc4LDkgQEAKIAkJICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgaTJjX3NtYnVzX2lvY3RsX2RhdGEgX191c2VyICopIGFyZywKIAkJICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX3NtYnVzX2lvY3RsX2RhdGEpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoKGRhdGFfYXJnLnNpemUgIT0gSTJDX1NNQlVTX0JZVEUpICYmIAorCQlpZiAoKGRhdGFfYXJnLnNpemUgIT0gSTJDX1NNQlVTX0JZVEUpICYmCiAJCSAgICAoZGF0YV9hcmcuc2l6ZSAhPSBJMkNfU01CVVNfUVVJQ0spICYmCi0JCSAgICAoZGF0YV9hcmcuc2l6ZSAhPSBJMkNfU01CVVNfQllURV9EQVRBKSAmJiAKKwkJICAgIChkYXRhX2FyZy5zaXplICE9IEkyQ19TTUJVU19CWVRFX0RBVEEpICYmCiAJCSAgICAoZGF0YV9hcmcuc2l6ZSAhPSBJMkNfU01CVVNfV09SRF9EQVRBKSAmJgogCQkgICAgKGRhdGFfYXJnLnNpemUgIT0gSTJDX1NNQlVTX1BST0NfQ0FMTCkgJiYKIAkJICAgIChkYXRhX2FyZy5zaXplICE9IEkyQ19TTUJVU19CTE9DS19EQVRBKSAmJgpAQCAtMjkxLDExICsyOTEsMTEgQEAKIAkJCQlkYXRhX2FyZy5zaXplKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCS8qIE5vdGUgdGhhdCBJMkNfU01CVVNfUkVBRCBhbmQgSTJDX1NNQlVTX1dSSVRFIGFyZSAwIGFuZCAxLCAKKwkJLyogTm90ZSB0aGF0IEkyQ19TTUJVU19SRUFEIGFuZCBJMkNfU01CVVNfV1JJVEUgYXJlIDAgYW5kIDEsCiAJCSAgIHNvIHRoZSBjaGVjayBpcyB2YWxpZCBpZiBzaXplPT1JMkNfU01CVVNfUVVJQ0sgdG9vLiAqLwotCQlpZiAoKGRhdGFfYXJnLnJlYWRfd3JpdGUgIT0gSTJDX1NNQlVTX1JFQUQpICYmIAorCQlpZiAoKGRhdGFfYXJnLnJlYWRfd3JpdGUgIT0gSTJDX1NNQlVTX1JFQUQpICYmCiAJCSAgICAoZGF0YV9hcmcucmVhZF93cml0ZSAhPSBJMkNfU01CVVNfV1JJVEUpKSB7Ci0JCQlkZXZfZGJnKCZjbGllbnQtPmFkYXB0ZXItPmRldiwgCisJCQlkZXZfZGJnKCZjbGllbnQtPmFkYXB0ZXItPmRldiwKIAkJCQkicmVhZF93cml0ZSBvdXQgb2YgcmFuZ2UgKCV4KSBpbiBpb2N0bCBJMkNfU01CVVMuXG4iLAogCQkJCWRhdGFfYXJnLnJlYWRfd3JpdGUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMDQsNyArMzA0LDcgQEAKIAkJLyogTm90ZSB0aGF0IGNvbW1hbmQgdmFsdWVzIGFyZSBhbHdheXMgdmFsaWQhICovCiAKIAkJaWYgKChkYXRhX2FyZy5zaXplID09IEkyQ19TTUJVU19RVUlDSykgfHwKLQkJICAgICgoZGF0YV9hcmcuc2l6ZSA9PSBJMkNfU01CVVNfQllURSkgJiYgCisJCSAgICAoKGRhdGFfYXJnLnNpemUgPT0gSTJDX1NNQlVTX0JZVEUpICYmCiAJCSAgICAoZGF0YV9hcmcucmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpKSkKIAkJCS8qIFRoZXNlIGFyZSBzcGVjaWFsOiB3ZSBkbyBub3QgdXNlIGRhdGEgKi8KIAkJCXJldHVybiBpMmNfc21idXNfeGZlcihjbGllbnQtPmFkYXB0ZXIsIGNsaWVudC0+YWRkciwKQEAgLTMyMiwxNCArMzIyLDE0IEBACiAJCWlmICgoZGF0YV9hcmcuc2l6ZSA9PSBJMkNfU01CVVNfQllURV9EQVRBKSB8fAogCQkgICAgKGRhdGFfYXJnLnNpemUgPT0gSTJDX1NNQlVTX0JZVEUpKQogCQkJZGF0YXNpemUgPSBzaXplb2YoZGF0YV9hcmcuZGF0YS0+Ynl0ZSk7Ci0JCWVsc2UgaWYgKChkYXRhX2FyZy5zaXplID09IEkyQ19TTUJVU19XT1JEX0RBVEEpIHx8IAorCQllbHNlIGlmICgoZGF0YV9hcmcuc2l6ZSA9PSBJMkNfU01CVVNfV09SRF9EQVRBKSB8fAogCQkgICAgICAgICAoZGF0YV9hcmcuc2l6ZSA9PSBJMkNfU01CVVNfUFJPQ19DQUxMKSkKIAkJCWRhdGFzaXplID0gc2l6ZW9mKGRhdGFfYXJnLmRhdGEtPndvcmQpOwogCQllbHNlIC8qIHNpemUgPT0gc21idXMgYmxvY2ssIGkyYyBibG9jaywgb3IgYmxvY2sgcHJvYy4gY2FsbCAqLwogCQkJZGF0YXNpemUgPSBzaXplb2YoZGF0YV9hcmcuZGF0YS0+YmxvY2spOwogCi0JCWlmICgoZGF0YV9hcmcuc2l6ZSA9PSBJMkNfU01CVVNfUFJPQ19DQUxMKSB8fCAKLQkJICAgIChkYXRhX2FyZy5zaXplID09IEkyQ19TTUJVU19CTE9DS19QUk9DX0NBTEwpIHx8IAorCQlpZiAoKGRhdGFfYXJnLnNpemUgPT0gSTJDX1NNQlVTX1BST0NfQ0FMTCkgfHwKKwkJICAgIChkYXRhX2FyZy5zaXplID09IEkyQ19TTUJVU19CTE9DS19QUk9DX0NBTEwpIHx8CiAJCSAgICAoZGF0YV9hcmcucmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpKSB7CiAJCQlpZiAoY29weV9mcm9tX3VzZXIoJnRlbXAsIGRhdGFfYXJnLmRhdGEsIGRhdGFzaXplKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTMzNyw4ICszMzcsOCBAQAogCQlyZXMgPSBpMmNfc21idXNfeGZlcihjbGllbnQtPmFkYXB0ZXIsY2xpZW50LT5hZGRyLGNsaWVudC0+ZmxhZ3MsCiAJCSAgICAgIGRhdGFfYXJnLnJlYWRfd3JpdGUsCiAJCSAgICAgIGRhdGFfYXJnLmNvbW1hbmQsZGF0YV9hcmcuc2l6ZSwmdGVtcCk7Ci0JCWlmICghIHJlcyAmJiAoKGRhdGFfYXJnLnNpemUgPT0gSTJDX1NNQlVTX1BST0NfQ0FMTCkgfHwgCi0JCSAgICAgICAgICAgICAgKGRhdGFfYXJnLnNpemUgPT0gSTJDX1NNQlVTX0JMT0NLX1BST0NfQ0FMTCkgfHwgCisJCWlmICghIHJlcyAmJiAoKGRhdGFfYXJnLnNpemUgPT0gSTJDX1NNQlVTX1BST0NfQ0FMTCkgfHwKKwkJICAgICAgICAgICAgICAoZGF0YV9hcmcuc2l6ZSA9PSBJMkNfU01CVVNfQkxPQ0tfUFJPQ19DQUxMKSB8fAogCQkJICAgICAgKGRhdGFfYXJnLnJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpKSkgewogCQkJaWYgKGNvcHlfdG9fdXNlcihkYXRhX2FyZy5kYXRhLCAmdGVtcCwgZGF0YXNpemUpKQogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtNDE3LDggKzQxNyw4IEBACiAJaTJjX2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShpMmNfZGV2X2NsYXNzLCAmYWRhcC0+ZGV2LAogCQkJCSAgICAgTUtERVYoSTJDX01BSk9SLCBhZGFwLT5uciksCiAJCQkJICAgICAiaTJjLSVkIiwgYWRhcC0+bnIpOwotCWlmICghaTJjX2Rldi0+ZGV2KSB7Ci0JCXJlcyA9IC1FTk9ERVY7CisJaWYgKElTX0VSUihpMmNfZGV2LT5kZXYpKSB7CisJCXJlcyA9IFBUUl9FUlIoaTJjX2Rldi0+ZGV2KTsKIAkJZ290byBlcnJvcjsKIAl9CiAJcmVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGkyY19kZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOwpAQCAtNDMyLDcgKzQzMiw2IEBACiAJZGV2aWNlX2Rlc3Ryb3koaTJjX2Rldl9jbGFzcywgTUtERVYoSTJDX01BSk9SLCBhZGFwLT5ucikpOwogZXJyb3I6CiAJcmV0dXJuX2kyY19kZXYoaTJjX2Rldik7Ci0Ja2ZyZWUoaTJjX2Rldik7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtNDQ3LDcgKzQ0Niw2IEBACiAJZGV2aWNlX3JlbW92ZV9maWxlKGkyY19kZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOwogCXJldHVybl9pMmNfZGV2KGkyY19kZXYpOwogCWRldmljZV9kZXN0cm95KGkyY19kZXZfY2xhc3MsIE1LREVWKEkyQ19NQUpPUiwgYWRhcC0+bnIpKTsKLQlrZnJlZShpMmNfZGV2KTsKIAogCXByX2RlYnVnKCJpMmMtZGV2OiBhZGFwdGVyIFslc10gdW5yZWdpc3RlcmVkXG4iLCBhZGFwLT5uYW1lKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IGUyM2JjMGQuLjNmODI4MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtNzk2LDcgKzc5Niw3IEBACiBjb25maWcgQkxLX0RFVl9JREVfQVUxWFhYX1NFUVRTX1BFUl9SUQogICAgICAgIGludCAiTWF4aW11bSB0cmFuc2ZlciBzaXplIChLQikgcGVyIHJlcXVlc3QgKHVwIHRvIDEyOCkiCiAgICAgICAgZGVmYXVsdCAiMTI4IgotICAgICAgIGRlcGVuZHMgQkxLX0RFVl9JREVfQVUxWFhYCisgICAgICAgZGVwZW5kcyBvbiBCTEtfREVWX0lERV9BVTFYWFgKIAogY29uZmlnIElERV9BUk0KIAlkZWZfYm9vbCBBUk0gJiYgKEFSQ0hfQTVLIHx8IEFSQ0hfQ0xQUzc1MDAgfHwgQVJDSF9SUEMgfHwgQVJDSF9TSEFSSykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggODgyMTQ5NC4uNTk2OWNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTY4Nyw4ICs2ODcsMTUgQEAKIHN0YXRpYyBpbnQgY2Ryb21fZGVjb2RlX3N0YXR1cyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBnb29kX3N0YXQsIGludCAqc3RhdF9yZXQpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOworCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKIAlpbnQgc3RhdCwgZXJyLCBzZW5zZV9rZXk7CiAJCisJLyogV2UgbWF5IGhhdmUgYm9ndXMgRE1BIGludGVycnVwdHMgaW4gUElPIHN0YXRlIGhlcmUgKi8KKwlpZiAoSFdJRihkcml2ZSktPmRtYV9zdGF0dXMgJiYgaHdpZi0+YXRhcGlfaXJxX2JvZ29uKSB7CisJCXN0YXQgPSBod2lmLT5JTkIoaHdpZi0+ZG1hX3N0YXR1cyk7CisJCS8qIFNob3VsZCB3ZSBmb3JjZSB0aGUgYml0IGFzIHdlbGwgPyAqLworCQlod2lmLT5PVVRCKHN0YXQsIGh3aWYtPmRtYV9zdGF0dXMpOworCX0KIAkvKiBDaGVjayBmb3IgZXJyb3JzLiAqLwogCXN0YXQgPSBIV0lGKGRyaXZlKS0+SU5CKElERV9TVEFUVVNfUkVHKTsKIAlpZiAoc3RhdF9yZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggZTNhMjY3Ni4uZDMzNzE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtMjE0Nyw3ICsyMTQ3LDcgQEAKIAkJcHJpbnRrKCJpZGUtZmxvcHB5OiBwYXNzaW5nIGRyaXZlICVzIHRvIGlkZS1zY3NpIGVtdWxhdGlvbi5cbiIsIGRyaXZlLT5uYW1lKTsKIAkJZ290byBmYWlsZWQ7CiAJfQotCWlmICgoZmxvcHB5ID0gKGlkZWZsb3BweV9mbG9wcHlfdCAqKSBremFsbG9jIChzaXplb2YgKGlkZWZsb3BweV9mbG9wcHlfdCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJaWYgKChmbG9wcHkgPSBremFsbG9jKHNpemVvZiAoaWRlZmxvcHB5X2Zsb3BweV90KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKIAkJcHJpbnRrIChLRVJOX0VSUiAiaWRlLWZsb3BweTogJXM6IENhbid0IGFsbG9jYXRlIGEgZmxvcHB5IHN0cnVjdHVyZVxuIiwgZHJpdmUtPm5hbWUpOwogCQlnb3RvIGZhaWxlZDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcG5wLmMgYi9kcml2ZXJzL2lkZS9pZGUtcG5wLmMKaW5kZXggZGY3ZDE1MC4uOTg0MTBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBucC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wbnAuYwpAQCAtNzMsMyArNzMsOCBAQAogewogCXBucF9yZWdpc3Rlcl9kcml2ZXIoJmlkZXBucF9kcml2ZXIpOwogfQorCit2b2lkIF9fZXhpdCBwbnBpZGVfZXhpdCh2b2lkKQoreworCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmaWRlcG5wX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IGRhZDljNDcuLjVhNWM1NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0xMDAwLDEwICsxMDAwLDYgQEAKIAkvKiBuZWVkcyBkcml2ZS0+cXVldWUgdG8gYmUgc2V0ICovCiAJaWRlX3RvZ2dsZV9ib3VuY2UoZHJpdmUsIDEpOwogCi0JLyogZW5hYmxlIGxlZCBhY3Rpdml0eSBmb3IgZGlzayBkcml2ZXMgb25seSAqLwotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgaHdpZi0+bGVkX2FjdCkKLQkJYmxrX3F1ZXVlX2FjdGl2aXR5X2ZuKHEsIGh3aWYtPmxlZF9hY3QsIGRyaXZlKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwppbmRleCBlMmY0YmI1Li5iM2JjZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKQEAgLTI1NzMsMTEgKzI1NzMsMTEgQEAKIAlpbnQgcGFnZXMgPSB0YXBlLT5wYWdlc19wZXJfc3RhZ2U7CiAJY2hhciAqYl9kYXRhID0gTlVMTDsKIAotCWlmICgoc3RhZ2UgPSAoaWRldGFwZV9zdGFnZV90ICopIGttYWxsb2MgKHNpemVvZiAoaWRldGFwZV9zdGFnZV90KSxHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKHN0YWdlID0ga21hbGxvYyhzaXplb2YgKGlkZXRhcGVfc3RhZ2VfdCksR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCXN0YWdlLT5uZXh0ID0gTlVMTDsKIAotCWJoID0gc3RhZ2UtPmJoID0gKHN0cnVjdCBpZGV0YXBlX2JoICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGlkZXRhcGVfYmgpLCBHRlBfS0VSTkVMKTsKKwliaCA9IHN0YWdlLT5iaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZGV0YXBlX2JoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJoID09IE5VTEwpCiAJCWdvdG8gYWJvcnQ7CiAJYmgtPmJfcmVxbmV4dCA9IE5VTEw7CkBAIC0yNjA3LDcgKzI2MDcsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAkJcHJldl9iaCA9IGJoOwotCQlpZiAoKGJoID0gKHN0cnVjdCBpZGV0YXBlX2JoICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGlkZXRhcGVfYmgpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQlpZiAoKGJoID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlkZXRhcGVfYmgpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBiX2RhdGEpOwogCQkJZ290byBhYm9ydDsKIAkJfQpAQCAtNDg2MCw3ICs0ODYwLDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRlLXRhcGU6IFVzZSBkcml2ZSAlcyB3aXRoIGlkZS1zY3NpIGVtdWxhdGlvbiBhbmQgb3NzdC5cbiIsIGRyaXZlLT5uYW1lKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRlLXRhcGU6IE9uU3RyZWFtIHN1cHBvcnQgd2lsbCBiZSByZW1vdmVkIHNvb24gZnJvbSBpZGUtdGFwZSFcbiIpOwogCX0KLQl0YXBlID0gKGlkZXRhcGVfdGFwZV90ICopIGt6YWxsb2MgKHNpemVvZiAoaWRldGFwZV90YXBlX3QpLCBHRlBfS0VSTkVMKTsKKwl0YXBlID0ga3phbGxvYyhzaXplb2YgKGlkZXRhcGVfdGFwZV90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHRhcGUgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiAlczogQ2FuJ3QgYWxsb2NhdGUgYSB0YXBlIHN0cnVjdHVyZVxuIiwgZHJpdmUtPm5hbWUpOwogCQlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS5jIGIvZHJpdmVycy9pZGUvaWRlLmMKaW5kZXggMTY4OTA3Ni4uNmM5YmQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLmMKQEAgLTE3ODEsOCArMTc4MSw5IEBACiAJcmV0dXJuIDE7CiB9CiAKLWV4dGVybiB2b2lkIHBucGlkZV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaDgzMDBfaWRlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcG5waWRlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2V4aXQgcG5waWRlX2V4aXQodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgaDgzMDBfaWRlX2luaXQodm9pZCk7CiAKIC8qCiAgKiBwcm9iZV9mb3JfaHdpZnMoKSBmaW5kcy9pbml0aWFsaXplcyAia25vd24iIElERSBpbnRlcmZhY2VzCkBAIC0yMDg3LDEzICsyMDg4LDE3IEBACiAJcmV0dXJuIGlkZV9pbml0KCk7CiB9CiAKLXZvaWQgY2xlYW51cF9tb2R1bGUgKHZvaWQpCit2b2lkIF9fZXhpdCBjbGVhbnVwX21vZHVsZSAodm9pZCkKIHsKIAlpbnQgaW5kZXg7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNQVhfSFdJRlM7ICsraW5kZXgpCiAJCWlkZV91bnJlZ2lzdGVyKGluZGV4KTsKIAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lERVBOUAorCXBucGlkZV9leGl0KCk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcHJvY19pZGVfZGVzdHJveSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jIGIvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYwppbmRleCBmMjg2MDc5Li5kMjYxYmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMKQEAgLTQ0MSw3ICs0NDEsNyBAQAogCS5wcm9iZQkJPSBhZWM2Mnh4X2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCBhZWM2Mnh4X2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhZWM2Mnh4X2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwppbmRleCBkNDE5ZTRiLi42OGRmNzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwpAQCAtNTg2LDExICs1ODYsMTEgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IHRtcGJ5dGU7Ci0Jc3RydWN0IHBjaV9kZXYgKm5vcnRoID0gcGNpX2ZpbmRfc2xvdCgwLCBQQ0lfREVWRk4oMCwwKSk7CisJc3RydWN0IHBjaV9kZXYgKm5vcnRoID0gcGNpX2dldF9zbG90KGRldi0+YnVzLCBQQ0lfREVWRk4oMCwwKSk7CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJm01MjI5X3JldmlzaW9uKTsKIAotCWlzYV9kZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTCwgUENJX0RFVklDRV9JRF9BTF9NMTUzMywgTlVMTCk7CisJaXNhX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTE1MzMsIE5VTEwpOwogCiAjaWYgZGVmaW5lZChESVNQTEFZX0FMSV9USU1JTkdTKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQogCWlmICghYWxpX3Byb2MpIHsKQEAgLTYxMyw4ICs2MTMsNyBAQAogCQkgKiBjbGVhciBiaXQgNwogCQkgKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YiwgdG1wYnl0ZSAmIDB4N0YpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCXJldHVybiAwOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKgpAQCAtNjM3LDEwICs2MzYsOCBAQAogCSAqIGJveCB3aXRob3V0IGEgZGV2aWNlIGF0IDA6MC4wLiBUaGUgQUxpIGJyaWRnZSB3aWxsIGJlIGF0CiAJICogMDowLjAgc28gaWYgd2UgZGlkbid0IGZpbmQgb25lIHdlIGtub3cgd2hhdCBpcyBjb29raW5nLgogCSAqLwotCWlmIChub3J0aCAmJiBub3J0aC0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQUwpIHsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCSAgICAgICAgcmV0dXJuIDA7Ci0JfQorCWlmIChub3J0aCAmJiBub3J0aC0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQUwpCisJCWdvdG8gb3V0OwogCiAJaWYgKG01MjI5X3JldmlzaW9uIDwgMHhDNSAmJiBpc2FfZGV2KQogCXsJCkBAIC02NjEsNiArNjU4LDkgQEAKIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShpc2FfZGV2LCAweDc5LCB0bXBieXRlIHwgMHgwMik7CiAJCX0KIAl9CitvdXQ6CisJcGNpX2Rldl9wdXQobm9ydGgpOworCXBjaV9kZXZfcHV0KGlzYV9kZXYpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTkwNyw3ICs5MDcsNyBAQAogCS5wcm9iZQkJPSBhbGltMTV4M19pbml0X29uZSwKIH07CiAKLXN0YXRpYyBpbnQgYWxpMTV4M19pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYWxpMTV4M19pZGVfaW5pdCh2b2lkKQogewogCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCmluZGV4IDc1M2ZlMGUuLmE0MzM2OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJLnByb2JlCQk9IGFtZDc0eHhfcHJvYmUsCiB9OwogCi1zdGF0aWMgaW50IGFtZDc0eHhfaWRlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGFtZDc0eHhfaWRlX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMgYi9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKaW5kZXggZDU1YjkzOC4uOTgyYWMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYwpAQCAtNDYsNiArNDYsOCBAQAogCiBzdGF0aWMgaW50IHNhdmVfbWRtYV9tb2RlWzRdOwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGF0aWl4cF9sb2NrKTsKKwogLyoqCiAgKglhdGlpeHBfcmF0ZW1hc2sJCS0JY29tcHV0ZSByYXRlIG1hc2sgZm9yIEFUSUlYUCBJREUKICAqCUBkcml2ZTogSURFIGRyaXZlIHRvIGNvbXB1dGUgZm9yCkBAIC0xMDUsNyArMTA3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUxNiB0bXAxNjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZhdGlpeHBfbG9jaywgZmxhZ3MpOwogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBBVElJWFBfSURFX1VETUFfQ09OVFJPTCwgJnRtcDE2KTsKIAlpZiAoc2F2ZV9tZG1hX21vZGVbZHJpdmUtPmRuXSkKQEAgLTExNCw3ICsxMTYsNyBAQAogCQl0bXAxNiB8PSAoMSA8PCBkcml2ZS0+ZG4pOwogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIEFUSUlYUF9JREVfVURNQV9DT05UUk9MLCB0bXAxNik7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF0aWl4cF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gX19pZGVfZG1hX2hvc3Rfb24oZHJpdmUpOwogfQpAQCAtMTI1LDEzICsxMjcsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUxNiB0bXAxNjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZhdGlpeHBfbG9jaywgZmxhZ3MpOwogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBBVElJWFBfSURFX1VETUFfQ09OVFJPTCwgJnRtcDE2KTsKIAl0bXAxNiAmPSB+KDEgPDwgZHJpdmUtPmRuKTsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBBVElJWFBfSURFX1VETUFfQ09OVFJPTCwgdG1wMTYpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdGlpeHBfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIF9faWRlX2RtYV9ob3N0X29mZihkcml2ZSk7CiB9CkBAIC0xNTIsNyArMTU0LDcgQEAKIAl1MzIgcGlvX3RpbWluZ19kYXRhOwogCXUxNiBwaW9fbW9kZV9kYXRhOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmF0aWl4cF9sb2NrLCBmbGFncyk7CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIEFUSUlYUF9JREVfUElPX01PREUsICZwaW9fbW9kZV9kYXRhKTsKIAlwaW9fbW9kZV9kYXRhICY9IH4oMHgwNyA8PCAoZHJpdmUtPmRuICogNCkpOwpAQCAtMTY1LDcgKzE2Nyw3IEBACiAJCSAocGlvX3RpbWluZ1twaW9dLmNvbW1hbmRfd2lkdGggPDwgKHRpbWluZ19zaGlmdCArIDQpKTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgQVRJSVhQX0lERV9QSU9fVElNSU5HLCBwaW9fdGltaW5nX2RhdGEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdGlpeHBfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTE4OSw3ICsxOTEsNyBAQAogCiAJc3BlZWQgPSBpZGVfcmF0ZV9maWx0ZXIoYXRpaXhwX3JhdGVtYXNrKGRyaXZlKSwgeGZlcnNwZWVkKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZhdGlpeHBfbG9jaywgZmxhZ3MpOwogCiAJc2F2ZV9tZG1hX21vZGVbZHJpdmUtPmRuXSA9IDA7CiAJaWYgKHNwZWVkID49IFhGRVJfVURNQV8wKSB7CkBAIC0yMDgsNyArMjEwLDcgQEAKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXRpaXhwX2xvY2ssIGZsYWdzKTsKIAogCWlmIChzcGVlZCA+PSBYRkVSX1NXX0RNQV8wKQogCQlwaW8gPSBhdGlpeHBfZG1hXzJfcGlvKHNwZWVkKTsKQEAgLTI4OSw4ICsyOTEsMTIgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9hdGlpeHAoaWRlX2h3aWZfdCAqaHdpZikKIHsKKwl1OCB1ZG1hX21vZGUgPSAwOworCXU4IGNoID0gaHdpZi0+Y2hhbm5lbDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGh3aWYtPnBjaV9kZXY7CisKIAlpZiAoIWh3aWYtPmlycSkKLQkJaHdpZi0+aXJxID0gaHdpZi0+Y2hhbm5lbCA/IDE1IDogMTQ7CisJCWh3aWYtPmlycSA9IGNoID8gMTUgOiAxNDsKIAogCWh3aWYtPmF1dG9kbWEgPSAwOwogCWh3aWYtPnR1bmVwcm9jID0gJmF0aWl4cF90dW5lcHJvYzsKQEAgLTMwNiw4ICszMTIsMTIgQEAKIAlod2lmLT5td2RtYV9tYXNrID0gMHgwNjsKIAlod2lmLT5zd2RtYV9tYXNrID0gMHgwNDsKIAotCS8qIEZJWE1FOiBwcm9wZXIgY2FibGUgZGV0ZWN0aW9uIG5lZWRlZCAqLwotCWh3aWYtPnVkbWFfZm91ciA9IDE7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgQVRJSVhQX0lERV9VRE1BX01PREUgKyBjaCwgJnVkbWFfbW9kZSk7CisJaWYgKCh1ZG1hX21vZGUgJiAweDA3KSA+PSAweDA0IHx8ICh1ZG1hX21vZGUgJiAweDcwKSA+PSAweDQwKQorCQlod2lmLT51ZG1hX2ZvdXIgPSAxOworCWVsc2UKKwkJaHdpZi0+dWRtYV9mb3VyID0gMDsKKwogCWh3aWYtPmlkZV9kbWFfaG9zdF9vbiA9ICZhdGlpeHBfaWRlX2RtYV9ob3N0X29uOwogCWh3aWYtPmlkZV9kbWFfaG9zdF9vZmYgPSAmYXRpaXhwX2lkZV9kbWFfaG9zdF9vZmY7CiAJaHdpZi0+aWRlX2RtYV9jaGVjayA9ICZhdGlpeHBfZG1hX2NoZWNrOwpAQCAtMzE4LDE5ICszMjgsNiBAQAogCWh3aWYtPmRyaXZlc1swXS5hdXRvZG1hID0gaHdpZi0+YXV0b2RtYTsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9zYjYwMF9sZWdhY3koaWRlX2h3aWZfdCAqaHdpZikKLXsKLQotCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0JaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7Ci0JaHdpZi0+c3dkbWFfbWFzayA9IDB4MDc7Ci0KLQlpZiAoIW5vYXV0b2RtYSkKLQkJaHdpZi0+YXV0b2RtYSA9IDE7Ci0JaHdpZi0+ZHJpdmVzWzBdLmF1dG9kbWEgPSBod2lmLT5hdXRvZG1hOwotCWh3aWYtPmRyaXZlc1sxXS5hdXRvZG1hID0gaHdpZi0+YXV0b2RtYTsKLX0KIAogc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgYXRpaXhwX3BjaV9pbmZvW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CS8qIDAgKi8KQEAgLTM0MSwxMiArMzM4LDEzIEBACiAJCS5lbmFibGViaXRzCT0ge3sweDQ4LDB4MDEsMHgwMH0sIHsweDQ4LDB4MDgsMHgwMH19LAogCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKIAl9LHsJLyogMSAqLwotCQkubmFtZQkJPSAiQVRJIFNCNjAwIFNBVEEgTGVnYWN5IElERSIsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfc2I2MDBfbGVnYWN5LAotCQkuY2hhbm5lbHMJPSAyLAorCQkubmFtZQkJPSAiU0I2MDBfUEFUQSIsCisJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfYXRpaXhwLAorCQkuY2hhbm5lbHMJPSAxLAogCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAotCX0KKwkJLmVuYWJsZWJpdHMJPSB7ezB4NDgsMHgwMSwweDAwfSwgezB4MDAsMHgwMCwweDAwfX0sCisgCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKyAJfSwKIH07CiAKIC8qKgpAQCAtMzY3LDggKzM2NSw3IEBACiAJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQMjAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQMzAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0JeyBQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NBVEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIChQQ0lfQ0xBU1NfU1RPUkFHRV9JREU8PDgpfDB4OGEsIDB4ZmZmZjA1LCAxfSwKKwl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxfSwKIAl7IDAsIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aWl4cF9wY2lfdGJsKTsKQEAgLTM3OSw3ICszNzYsNyBAQAogCS5wcm9iZQkJPSBhdGlpeHBfaW5pdF9vbmUsCiB9OwogCi1zdGF0aWMgaW50IGF0aWl4cF9pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXRpaXhwX2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jIGIvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jCmluZGV4IDIwYzMyNzEuLmFlZTk0N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMKQEAgLTc5Myw3ICs3OTMsNyBAQAogCS5wcm9iZQkJPSBjbWQ2NHhfaW5pdF9vbmUsCiB9OwogCi1zdGF0aWMgaW50IGNtZDY0eF9pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY21kNjR4X2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NzNTUyMC5jIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUyMC5jCmluZGV4IDA3OWY3YzguLmJhNjc4NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MjAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCS5wcm9iZQkJPSBjczU1MjBfaW5pdF9vbmUsCiB9OwogCi1zdGF0aWMgaW50IGNzNTUyMF9pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY3M1NTIwX2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jCmluZGV4IGFlNDA1ZmEuLjliZjVmZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MzAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTMwLmMKQEAgLTM3NCw3ICszNzQsNyBAQAogCS5wcm9iZQkJPSBjczU1MzBfaW5pdF9vbmUsCiB9OwogCi1zdGF0aWMgaW50IGNzNTUzMF9pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY3M1NTMwX2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYwppbmRleCA2NDMzMGM0Li45ZWFmY2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYwpAQCAtNTE5LDcgKzUxOSw3IEBACiAJLnByb2JlCQk9IGN5ODJjNjkzX2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCBjeTgyYzY5M19pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY3k4MmM2OTNfaWRlX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvZ2VuZXJpYy5jIGIvZHJpdmVycy9pZGUvcGNpL2dlbmVyaWMuYwppbmRleCA5ZjMwNjg4Li5iNDA4YzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9nZW5lcmljLmMKQEAgLTE4NSwzNiArMTg1LDYgQEAKIAkJLmNoYW5uZWxzCT0gMiwKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCi0JfSx7CS8qIDE1ICovCi0JCS5uYW1lCQk9ICJKTUIzNjEiLAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2dlbmVyaWMsCi0JCS5jaGFubmVscwk9IDIsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAotCX0sewkvKiAxNiAqLwotCQkubmFtZQkJPSAiSk1CMzYzIiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9nZW5lcmljLAotCQkuY2hhbm5lbHMJPSAyLAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKLQl9LHsJLyogMTcgKi8KLQkJLm5hbWUJCT0gIkpNQjM2NSIsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfZ2VuZXJpYywKLQkJLmNoYW5uZWxzCT0gMiwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAotCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCi0JfSx7CS8qIDE4ICovCi0JCS5uYW1lCQk9ICJKTUIzNjYiLAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2dlbmVyaWMsCi0JCS5jaGFubmVscwk9IDIsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAotCX0sewkvKiAxOSAqLwotCQkubmFtZQkJPSAiSk1CMzY4IiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9nZW5lcmljLAotCQkuY2hhbm5lbHMJPSAyLAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKIAl9CiB9OwogCkBAIC0yODEsMTEgKzI1MSw2IEBACiAJeyBQQ0lfVkVORE9SX0lEX1RPU0hJQkEsUENJX0RFVklDRV9JRF9UT1NISUJBX1BJQ0NPTE9fMSwgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxMn0sCiAJeyBQQ0lfVkVORE9SX0lEX1RPU0hJQkEsUENJX0RFVklDRV9JRF9UT1NISUJBX1BJQ0NPTE9fMiwgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxM30sCiAJeyBQQ0lfVkVORE9SX0lEX05FVENFTEwsUENJX0RFVklDRV9JRF9SRVZPTFVUSU9OLCAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxNH0sCi0JeyBQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjEsCSAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDE1fSwKLQl7IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MywJICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMTZ9LAotCXsgUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY1LAkgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxN30sCi0JeyBQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjYsCSAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDE4fSwKLQl7IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2OCwJICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMTl9LAogCS8qIE11c3QgY29tZSBsYXN0LiBJZiB5b3UgYWRkIGVudHJpZXMgYWRqdXN0IHRoaXMgdGFibGUgYXBwcm9wcmlhdGVseSBhbmQgdGhlIGluaXRfb25lIGNvZGUgKi8KIAl7IFBDSV9BTllfSUQsCQlQQ0lfQU5ZX0lELAkJCSAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19TVE9SQUdFX0lERSA8PCA4LCAweEZGRkZGRjAwVUwsIDB9LAogCXsgMCwgfSwKQEAgLTI5OCw3ICsyNjMsNyBAQAogCS5wcm9iZQkJPSBnZW5lcmljX2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCBnZW5lcmljX2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBnZW5lcmljX2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCmluZGV4IGI0NmNiMDQuLmNlN2IwOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCS5wcm9iZQkJPSBocHQzNHhfaW5pdF9vbmUsCiB9OwogCi1zdGF0aWMgaW50IGhwdDM0eF9pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaHB0MzR4X2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCmluZGV4IGU5OTNhNTEuLmI0ODY0NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMwkJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMQkgICAgICAgIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMwkJUmVkIEhhdCBJbmMKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNS0yMDA2CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBUaGFua3MgdG8gSGlnaFBvaW50IFRlY2hub2xvZ2llcyBmb3IgdGhlaXIgYXNzaXN0YW5jZSwgYW5kIGhhcmR3YXJlLgogICogU3BlY2lhbCBUaGFua3MgdG8gSm9uIEJ1cmNobW9yZSBpbiBTYW5EaWVnbyBmb3IgdGhlIGRlZXAgcG9ja2V0cywgaGlzCkBAIC0xMSw5ICsxMiwxMSBAQAogICogZGV2ZWxvcG1lbnQgYW5kIHN1cHBvcnQuCiAgKgogICoKLSAqIEhpZ2hwb2ludCBoYXZlIHRoZWlyIG93biBkcml2ZXIgKHNvdXJjZSBleGNlcHQgZm9yIHRoZSByYWlkIHBhcnQpCi0gKiBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmhpZ2hwb2ludC10ZWNoLmNvbS9ocHQzeHgtb3BlbnNvdXJjZS12MTMxLnRnegotICogVGhpcyBtYXkgYmUgdXNlZnVsIHRvIGFueW9uZSB3YW50aW5nIHRvIHdvcmsgb24gdGhlIG1haW5zdHJlYW0gaHB0IElERS4KKyAqIEhpZ2hQb2ludCBoYXMgaXRzIG93biBkcml2ZXJzIChvcGVuIHNvdXJjZSBleGNlcHQgZm9yIHRoZSBSQUlEIHBhcnQpCisgKiBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmhpZ2hwb2ludC10ZWNoLmNvbS9CSU9TJTIwKyUyMERyaXZlci8uCisgKiBUaGlzIG1heSBiZSB1c2VmdWwgdG8gYW55b25lIHdhbnRpbmcgdG8gd29yayBvbiB0aGlzIGRyaXZlciwgaG93ZXZlciAgZG8gbm90CisgKiB0cnVzdCAgdGhlbSB0b28gbXVjaCBzaW5jZSB0aGUgY29kZSB0ZW5kcyB0byBiZWNvbWUgbGVzcyBhbmQgbGVzcyBtZWFuaW5nZnVsCisgKiBhcyB0aGUgdGltZSBwYXNzZXMuLi4gOi0vCiAgKgogICogTm90ZSB0aGF0IGZpbmFsIEhQVDM3MCBzdXBwb3J0IHdhcyBkb25lIGJ5IGZvcmNlIGV4dHJhY3Rpb24gb2YgR1BMLgogICoKQEAgLTUyLDYgKzU1LDI5IEBACiAgKiBrZWVwaW5nIG1lIHNhbmUuIAogICoJCUFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CiAgKgorICogLSBmaXggdGhlIGNsb2NrIHR1cm5hcm91bmQgY29kZTogaXQgd2FzIHdyaXRpbmcgdG8gdGhlIHdyb25nIHBvcnRzIHdoZW4KKyAqICAgY2FsbGVkIGZvciB0aGUgc2Vjb25kYXJ5IGNoYW5uZWwsIGNhY2hpbmcgdGhlIGN1cnJlbnQgY2xvY2sgbW9kZSBwZXItCisgKiAgIGNoYW5uZWwgY2F1c2VkIHRoZSBjYWNoZWQgcmVnaXN0ZXIgdmFsdWUgdG8gZ2V0IG91dCBvZiBzeW5jIHdpdGggdGhlCisgKiAgIGFjdHVhbCBvbmUsIHRoZSBjaGFubmVscyB3ZXJlbid0IHNlcmlhbGl6ZWQsIHRoZSB0dXJuYXJvdW5kIHNob3VsZG4ndAorICogICBiZSBkb25lIG9uIDY2IE1IeiBQQ0kgYnVzCisgKiAtIGF2b2lkIGNhbGlicmF0aW5nIFBMTCB0d2ljZSBhcyB0aGUgc2Vjb25kIHRpbWUgcmVzdWx0cyBpbiBhIHdyb25nIFBDSQorICogICBmcmVxdWVuY3kgYW5kIHRodXMgaW4gdGhlIHdyb25nIHRpbWluZ3MgZm9yIHRoZSBzZWNvbmRhcnkgY2hhbm5lbAorICogLSBkaXNhYmxlIFVsdHJhQVRBLzEzMyBmb3IgSFBUMzcyIGJ5IGRlZmF1bHQgKDUwIE1IeiBEUExMIGNsb2NrIGRvIG5vdAorICogICBhbGxvdyBmb3IgdGhpcyBzcGVlZCBhbnl3YXkpCisgKiAtIGFkZCBzdXBwb3J0IGZvciBIUFQzMDJOIGFuZCBIUFQzNzFOIGNsb2NraW5nICh0aGUgc2FtZSBhcyBmb3IgSFBUMzcyTikKKyAqIC0gSFBUMzcxL04gYXJlIHNpbmdsZSBjaGFubmVsIGNoaXBzLCBzbyBhdm9pZCB0b3VjaGluZyB0aGUgcHJpbWFyeSBjaGFubmVsCisgKiAgIHdoaWNoIGV4aXN0cyBvbmx5IHZpcnR1YWxseSAodGhlcmUncyBubyBwaW5zIGZvciBpdCkKKyAqIC0gZml4L3JlbW92ZSBiYWQvdW51c2VkIHRpbWluZyB0YWJsZXMgYW5kIHVzZSBvbmUgc2V0IG9mIHRhYmxlcyBmb3IgdGhlIHdob2xlCisgKiAgIEhQVDM3eCBjaGlwIGZhbWlseTsgc2F2ZSBzcGFjZSBieSBpbnRyb2R1Y2luZyB0aGUgc2VwYXJhdGUgdHJhbnNmZXIgbW9kZQorICogICB0YWJsZSBpbiB3aGljaCB0aGUgbW9kZSBsb29rdXAgaXMgZG9uZQorICogLSB1c2UgZl9DTlQgdmFsdWUgc2F2ZWQgYnkgIHRoZSBIaWdoUG9pbnQgQklPUyBhcyByZWFkaW5nIGl0IGRpcmVjdGx5IGdpdmVzCisgKiAgIHRoZSB3cm9uZyBQQ0kgZnJlcXVlbmN5IHNpbmNlIERQTEwgaGFzIGFscmVhZHkgYmVlbiBjYWxpYnJhdGVkIGJ5IEJJT1MKKyAqIC0gZml4IHRoZSBob3Rzd2FwIGNvZGU6ICBpdCBjYXVzZWQgUkVTRVQtIHRvIGdsaXRjaCB3aGVuIHRyaXN0YXRpbmcgdGhlIGJ1cywKKyAqICAgYW5kIGZvciBIUFQzNnggdGhlIG9ic29sZXRlIEhESU9fVFJJU1RBVEVfSFdJRiBoYW5kbGVyIHdhcyBjYWxsZWQgaW5zdGVhZAorICogLSBwYXNzIHRvIGluaXRfY2hpcHNldCgpIGhhbmRsZXJzIGEgY29weSBvZiB0aGUgSURFIFBDSSBkZXZpY2Ugc3RydWN0dXJlIGFzCisgKiAgIHRoZXkgdGFtcGVyIHdpdGggaXRzIGZpZWxkcworICoJCTxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCiAgKi8KIAogCkBAIC03Niw4ICsxMDIsOCBAQAogCiAvKiB2YXJpb3VzIHR1bmluZyBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIEhQVF9SRVNFVF9TVEFURV9FTkdJTkUKLSN1bmRlZiBIUFRfREVMQVlfSU5URVJSVVBUCi0jdW5kZWYgSFBUX1NFUklBTElaRV9JTworI3VuZGVmCUhQVF9ERUxBWV9JTlRFUlJVUFQKKyNkZWZpbmUgSFBUX1NFUklBTElaRV9JTwkwCiAKIHN0YXRpYyBjb25zdCBjaGFyICpxdWlya19kcml2ZXNbXSA9IHsKIAkiUVVBTlRVTSBGSVJFQkFMTGxjdDA4IDA4IiwKQEAgLTE0MSwzMDUgKzE2NywxNzUgQEAKIAlOVUxMCiB9OwogCi1zdHJ1Y3QgY2hpcHNldF9idXNfY2xvY2tfbGlzdF9lbnRyeSB7Ci0JdTgJCXhmZXJfc3BlZWQ7Ci0JdW5zaWduZWQgaW50CWNoaXBzZXRfc2V0dGluZ3M7CitzdGF0aWMgdTggeGZlcl9zcGVlZHNbXSA9IHsKKwlYRkVSX1VETUFfNiwKKwlYRkVSX1VETUFfNSwKKwlYRkVSX1VETUFfNCwKKwlYRkVSX1VETUFfMywKKwlYRkVSX1VETUFfMiwKKwlYRkVSX1VETUFfMSwKKwlYRkVSX1VETUFfMCwKKworCVhGRVJfTVdfRE1BXzIsCisJWEZFUl9NV19ETUFfMSwKKwlYRkVSX01XX0RNQV8wLAorCisJWEZFUl9QSU9fNCwKKwlYRkVSX1BJT18zLAorCVhGRVJfUElPXzIsCisJWEZFUl9QSU9fMSwKKwlYRkVSX1BJT18wCiB9OwogCi0vKiBrZXkgZm9yIGJ1cyBjbG9jayB0aW1pbmdzCi0gKiBiaXQKLSAqIDA6MyAgICBkYXRhX2hpZ2hfdGltZS4gaW5hY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBmb3IgUElPIGFuZCBNVwotICogICAgICAgIERNQS4gY3ljbGVzID0gdmFsdWUgKyAxCi0gKiA0OjggICAgZGF0YV9sb3dfdGltZS4gYWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZm9yIFBJTyBhbmQgTVcKLSAqICAgICAgICBETUEuIGN5Y2xlcyA9IHZhbHVlICsgMQotICogOToxMiAgIGNtZF9oaWdoX3RpbWUuIGluYWN0aXZlIHRpbWUgb2YgRElPV18vRElPUl8gZHVyaW5nIHRhc2sgZmlsZQotICogICAgICAgIHJlZ2lzdGVyIGFjY2Vzcy4KLSAqIDEzOjE3ICBjbWRfbG93X3RpbWUuIGFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGR1cmluZyB0YXNrIGZpbGUKLSAqICAgICAgICByZWdpc3RlciBhY2Nlc3MuCi0gKiAxODoyMSAgdWRtYV9jeWNsZV90aW1lLiBjbG9jayBmcmVxIGFuZCBjbG9jayBjeWNsZXMgZm9yIFVETUEgeGZlci4KLSAqICAgICAgICBkdXJpbmcgdGFzayBmaWxlIHJlZ2lzdGVyIGFjY2Vzcy4KLSAqIDIyOjI0ICBwcmVfaGlnaF90aW1lLiB0aW1lIHRvIGluaXRpYWxpemUgMXN0IGN5Y2xlIGZvciBQSU8gYW5kIE1XIERNQQotICogICAgICAgIHhmZXIuCi0gKiAyNToyNyAgY21kX3ByZV9oaWdoX3RpbWUuIHRpbWUgdG8gaW5pdGlhbGl6ZSAxc3QgUElPIGN5Y2xlIGZvciB0YXNrCi0gKiAgICAgICAgcmVnaXN0ZXIgYWNjZXNzLgotICogMjggICAgIFVETUEgZW5hYmxlCi0gKiAyOSAgICAgRE1BIGVuYWJsZQotICogMzAgICAgIFBJT19NU1QgZW5hYmxlLiBpZiBzZXQsIHRoZSBjaGlwIGlzIGluIGJ1cyBtYXN0ZXIgbW9kZSBkdXJpbmcKLSAqICAgICAgICBQSU8uCi0gKiAzMSAgICAgRklGTyBlbmFibGUuCisvKiBLZXkgZm9yIGJ1cyBjbG9jayB0aW1pbmdzCisgKiAzNnggICAzN3gKKyAqIGJpdHMgIGJpdHMKKyAqIDA6MwkgMDozCWRhdGFfaGlnaF90aW1lLiBJbmFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGZvciBQSU8gYW5kIE1XIERNQS4KKyAqCQljeWNsZXMgPSB2YWx1ZSArIDEKKyAqIDQ6NwkgNDo4CWRhdGFfbG93X3RpbWUuIEFjdGl2ZSB0aW1lIG9mIERJT1dfL0RJT1JfIGZvciBQSU8gYW5kIE1XIERNQS4KKyAqCQljeWNsZXMgPSB2YWx1ZSArIDEKKyAqIDg6MTEgIDk6MTIJY21kX2hpZ2hfdGltZS4gSW5hY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCisgKgkJcmVnaXN0ZXIgYWNjZXNzLgorICogMTI6MTUgMTM6MTcJY21kX2xvd190aW1lLiBBY3RpdmUgdGltZSBvZiBESU9XXy9ESU9SXyBkdXJpbmcgdGFzayBmaWxlCisgKgkJcmVnaXN0ZXIgYWNjZXNzLgorICogMTY6MTggMTg6MjAJdWRtYV9jeWNsZV90aW1lLiBDbG9jayBjeWNsZXMgZm9yIFVETUEgeGZlci4KKyAqIC0JIDIxCUNMSyBmcmVxdWVuY3k6IDA9QVRBIGNsb2NrLCAxPWR1YWwgQVRBIGNsb2NrLgorICogMTk6MjEgMjI6MjQJcHJlX2hpZ2hfdGltZS4gVGltZSB0byBpbml0aWFsaXplIHRoZSAxc3QgY3ljbGUgZm9yIFBJTyBhbmQKKyAqCQlNVyBETUEgeGZlci4KKyAqIDIyOjI0IDI1OjI3CWNtZF9wcmVfaGlnaF90aW1lLiBUaW1lIHRvIGluaXRpYWxpemUgdGhlIDFzdCBQSU8gY3ljbGUgZm9yCisgKgkJdGFzayBmaWxlIHJlZ2lzdGVyIGFjY2Vzcy4KKyAqIDI4CSAyOAlVRE1BIGVuYWJsZS4KKyAqIDI5CSAyOQlETUEgIGVuYWJsZS4KKyAqIDMwCSAzMAlQSU8gTVNUIGVuYWJsZS4gSWYgc2V0LCB0aGUgY2hpcCBpcyBpbiBidXMgbWFzdGVyIG1vZGUgZHVyaW5nCisgKgkJUElPIHhmZXIuCisgKiAzMQkgMzEJRklGTyBlbmFibGUuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgY2hpcHNldF9idXNfY2xvY2tfbGlzdF9lbnRyeSBmb3J0eV9iYXNlX2hwdDM2NltdID0gewotCXsJWEZFUl9VRE1BXzQsCTB4OTAwZmQ5NDMJfSwKLQl7CVhGRVJfVURNQV8zLAkweDkwMGFkOTQzCX0sCi0JewlYRkVSX1VETUFfMiwJMHg5MDBiZDk0Mwl9LAotCXsJWEZFUl9VRE1BXzEsCTB4OTAwOGQ5NDMJfSwKLQl7CVhGRVJfVURNQV8wLAkweDkwMDhkOTQzCX0sCiAKLQl7CVhGRVJfTVdfRE1BXzIsCTB4YTAwOGQ5NDMJfSwKLQl7CVhGRVJfTVdfRE1BXzEsCTB4YTAxMGQ5NTUJfSwKLQl7CVhGRVJfTVdfRE1BXzAsCTB4YTAxMGQ5ZmMJfSwKK3N0YXRpYyB1MzIgZm9ydHlfYmFzZV9ocHQzNnhbXSA9IHsKKwkvKiBYRkVSX1VETUFfNiAqLwkweDkwMGZkOTQzLAorCS8qIFhGRVJfVURNQV81ICovCTB4OTAwZmQ5NDMsCisJLyogWEZFUl9VRE1BXzQgKi8JMHg5MDBmZDk0MywKKwkvKiBYRkVSX1VETUFfMyAqLwkweDkwMGFkOTQzLAorCS8qIFhGRVJfVURNQV8yICovCTB4OTAwYmQ5NDMsCisJLyogWEZFUl9VRE1BXzEgKi8JMHg5MDA4ZDk0MywKKwkvKiBYRkVSX1VETUFfMCAqLwkweDkwMDhkOTQzLAogCi0JewlYRkVSX1BJT180LAkweGMwMDhkOTYzCX0sCi0JewlYRkVSX1BJT18zLAkweGMwMTBkOTc0CX0sCi0JewlYRkVSX1BJT18yLAkweGMwMTBkOTk3CX0sCi0JewlYRkVSX1BJT18xLAkweGMwMTBkOWM3CX0sCi0JewlYRkVSX1BJT18wLAkweGMwMThkOWQ5CX0sCi0JewkwLAkJMHgwMTIwZDlkOQl9CisJLyogWEZFUl9NV19ETUFfMiAqLwkweGEwMDhkOTQzLAorCS8qIFhGRVJfTVdfRE1BXzEgKi8JMHhhMDEwZDk1NSwKKwkvKiBYRkVSX01XX0RNQV8wICovCTB4YTAxMGQ5ZmMsCisKKwkvKiBYRkVSX1BJT180ICovCTB4YzAwOGQ5NjMsCisJLyogWEZFUl9QSU9fMyAqLwkweGMwMTBkOTc0LAorCS8qIFhGRVJfUElPXzIgKi8JMHhjMDEwZDk5NywKKwkvKiBYRkVSX1BJT18xICovCTB4YzAxMGQ5YzcsCisJLyogWEZFUl9QSU9fMCAqLwkweGMwMThkOWQ5CiB9OwogCi1zdGF0aWMgc3RydWN0IGNoaXBzZXRfYnVzX2Nsb2NrX2xpc3RfZW50cnkgdGhpcnR5X3RocmVlX2Jhc2VfaHB0MzY2W10gPSB7Ci0JewlYRkVSX1VETUFfNCwJMHg5MGM5YTczMQl9LAotCXsJWEZFUl9VRE1BXzMsCTB4OTBjZmE3MzEJfSwKLQl7CVhGRVJfVURNQV8yLAkweDkwY2FhNzMxCX0sCi0JewlYRkVSX1VETUFfMSwJMHg5MGNiYTczMQl9LAotCXsJWEZFUl9VRE1BXzAsCTB4OTBjOGE3MzEJfSwKK3N0YXRpYyB1MzIgdGhpcnR5X3RocmVlX2Jhc2VfaHB0MzZ4W10gPSB7CisJLyogWEZFUl9VRE1BXzYgKi8JMHg5MGM5YTczMSwKKwkvKiBYRkVSX1VETUFfNSAqLwkweDkwYzlhNzMxLAorCS8qIFhGRVJfVURNQV80ICovCTB4OTBjOWE3MzEsCisJLyogWEZFUl9VRE1BXzMgKi8JMHg5MGNmYTczMSwKKwkvKiBYRkVSX1VETUFfMiAqLwkweDkwY2FhNzMxLAorCS8qIFhGRVJfVURNQV8xICovCTB4OTBjYmE3MzEsCisJLyogWEZFUl9VRE1BXzAgKi8JMHg5MGM4YTczMSwKIAotCXsJWEZFUl9NV19ETUFfMiwJMHhhMGM4YTczMQl9LAotCXsJWEZFUl9NV19ETUFfMSwJMHhhMGM4YTczMgl9LAkvKiAweGEwYzhhNzMzICovCi0JewlYRkVSX01XX0RNQV8wLAkweGEwYzhhNzk3CX0sCisJLyogWEZFUl9NV19ETUFfMiAqLwkweGEwYzhhNzMxLAorCS8qIFhGRVJfTVdfRE1BXzEgKi8JMHhhMGM4YTczMiwJLyogMHhhMGM4YTczMyAqLworCS8qIFhGRVJfTVdfRE1BXzAgKi8JMHhhMGM4YTc5NywKIAotCXsJWEZFUl9QSU9fNCwJMHhjMGM4YTczMQl9LAotCXsJWEZFUl9QSU9fMywJMHhjMGM4YTc0Mgl9LAotCXsJWEZFUl9QSU9fMiwJMHhjMGQwYTc1Mwl9LAotCXsJWEZFUl9QSU9fMSwJMHhjMGQwYTdhMwl9LAkvKiAweGMwZDBhNzkzICovCi0JewlYRkVSX1BJT18wLAkweGMwZDBhN2FhCX0sCS8qIDB4YzBkMGE3YTcgKi8KLQl7CTAsCQkweDAxMjBhN2E3CX0KKwkvKiBYRkVSX1BJT180ICovCTB4YzBjOGE3MzEsCisJLyogWEZFUl9QSU9fMyAqLwkweGMwYzhhNzQyLAorCS8qIFhGRVJfUElPXzIgKi8JMHhjMGQwYTc1MywKKwkvKiBYRkVSX1BJT18xICovCTB4YzBkMGE3YTMsCS8qIDB4YzBkMGE3OTMgKi8KKwkvKiBYRkVSX1BJT18wICovCTB4YzBkMGE3YWEJLyogMHhjMGQwYTdhNyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBjaGlwc2V0X2J1c19jbG9ja19saXN0X2VudHJ5IHR3ZW50eV9maXZlX2Jhc2VfaHB0MzY2W10gPSB7Ci0JewlYRkVSX1VETUFfNCwJMHg5MGM5ODUyMQl9LAotCXsJWEZFUl9VRE1BXzMsCTB4OTBjZjg1MjEJfSwKLQl7CVhGRVJfVURNQV8yLAkweDkwY2Y4NTIxCX0sCi0JewlYRkVSX1VETUFfMSwJMHg5MGNiODUyMQl9LAotCXsJWEZFUl9VRE1BXzAsCTB4OTBjYjg1MjEJfSwKK3N0YXRpYyB1MzIgdHdlbnR5X2ZpdmVfYmFzZV9ocHQzNnhbXSA9IHsKKwkvKiBYRkVSX1VETUFfNiAqLwkweDkwYzk4NTIxLAorCS8qIFhGRVJfVURNQV81ICovCTB4OTBjOTg1MjEsCisJLyogWEZFUl9VRE1BXzQgKi8JMHg5MGM5ODUyMSwKKwkvKiBYRkVSX1VETUFfMyAqLwkweDkwY2Y4NTIxLAorCS8qIFhGRVJfVURNQV8yICovCTB4OTBjZjg1MjEsCisJLyogWEZFUl9VRE1BXzEgKi8JMHg5MGNiODUyMSwKKwkvKiBYRkVSX1VETUFfMCAqLwkweDkwY2I4NTIxLAogCi0JewlYRkVSX01XX0RNQV8yLAkweGEwY2E4NTIxCX0sCi0JewlYRkVSX01XX0RNQV8xLAkweGEwY2E4NTMyCX0sCi0JewlYRkVSX01XX0RNQV8wLAkweGEwY2E4NTc1CX0sCisJLyogWEZFUl9NV19ETUFfMiAqLwkweGEwY2E4NTIxLAorCS8qIFhGRVJfTVdfRE1BXzEgKi8JMHhhMGNhODUzMiwKKwkvKiBYRkVSX01XX0RNQV8wICovCTB4YTBjYTg1NzUsCiAKLQl7CVhGRVJfUElPXzQsCTB4YzBjYTg1MjEJfSwKLQl7CVhGRVJfUElPXzMsCTB4YzBjYTg1MzIJfSwKLQl7CVhGRVJfUElPXzIsCTB4YzBjYTg1NDIJfSwKLQl7CVhGRVJfUElPXzEsCTB4YzBkMDg1NzIJfSwKLQl7CVhGRVJfUElPXzAsCTB4YzBkMDg1ODUJfSwKLQl7CTAsCQkweDAxMjA4NTg1CX0KKwkvKiBYRkVSX1BJT180ICovCTB4YzBjYTg1MjEsCisJLyogWEZFUl9QSU9fMyAqLwkweGMwY2E4NTMyLAorCS8qIFhGRVJfUElPXzIgKi8JMHhjMGNhODU0MiwKKwkvKiBYRkVSX1BJT18xICovCTB4YzBkMDg1NzIsCisJLyogWEZFUl9QSU9fMCAqLwkweGMwZDA4NTg1CiB9OwogCi0vKiBmcm9tIGhpZ2hwb2ludCBkb2N1bWVudGF0aW9uLiB0aGVzZSBhcmUgb2xkIHZhbHVlcyAqLwotc3RhdGljIHN0cnVjdCBjaGlwc2V0X2J1c19jbG9ja19saXN0X2VudHJ5IHRoaXJ0eV90aHJlZV9iYXNlX2hwdDM3MFtdID0gewotLyoJewlYRkVSX1VETUFfNSwJMHgxQTg1RjQ0MiwJMHgxNjQ1NGUzMQl9LCAqLwotCXsJWEZFUl9VRE1BXzUsCTB4MTY0NTRlMzEJfSwKLQl7CVhGRVJfVURNQV80LAkweDE2NDU0ZTMxCX0sCi0JewlYRkVSX1VETUFfMywJMHgxNjZkNGUzMQl9LAotCXsJWEZFUl9VRE1BXzIsCTB4MTY0OTRlMzEJfSwKLQl7CVhGRVJfVURNQV8xLAkweDE2NGQ0ZTMxCX0sCi0JewlYRkVSX1VETUFfMCwJMHgxNjUxNGUzMQl9LAorc3RhdGljIHUzMiB0aGlydHlfdGhyZWVfYmFzZV9ocHQzN3hbXSA9IHsKKwkvKiBYRkVSX1VETUFfNiAqLwkweDEyNDQ2MjMxLAkvKiAweDEyNjQ2MjMxID8/ICovCisJLyogWEZFUl9VRE1BXzUgKi8JMHgxMjQ0NjIzMSwKKwkvKiBYRkVSX1VETUFfNCAqLwkweDEyNDQ2MjMxLAorCS8qIFhGRVJfVURNQV8zICovCTB4MTI2YzYyMzEsCisJLyogWEZFUl9VRE1BXzIgKi8JMHgxMjQ4NjIzMSwKKwkvKiBYRkVSX1VETUFfMSAqLwkweDEyNGM2MjMzLAorCS8qIFhGRVJfVURNQV8wICovCTB4MTI1MDYyOTcsCiAKLQl7CVhGRVJfTVdfRE1BXzIsCTB4MjY1MTRlMjEJfSwKLQl7CVhGRVJfTVdfRE1BXzEsCTB4MjY1MTRlMzMJfSwKLQl7CVhGRVJfTVdfRE1BXzAsCTB4MjY1MTRlOTcJfSwKKwkvKiBYRkVSX01XX0RNQV8yICovCTB4MjI0MDZjMzEsCisJLyogWEZFUl9NV19ETUFfMSAqLwkweDIyNDA2YzMzLAorCS8qIFhGRVJfTVdfRE1BXzAgKi8JMHgyMjQwNmM5NywKIAotCXsJWEZFUl9QSU9fNCwJMHgwNjUxNGUyMQl9LAotCXsJWEZFUl9QSU9fMywJMHgwNjUxNGUyMgl9LAotCXsJWEZFUl9QSU9fMiwJMHgwNjUxNGUzMwl9LAotCXsJWEZFUl9QSU9fMSwJMHgwNjkxNGU0Mwl9LAotCXsJWEZFUl9QSU9fMCwJMHgwNjkxNGU1Nwl9LAotCXsJMCwJCTB4MDY1MTRlNTcJfQorCS8qIFhGRVJfUElPXzQgKi8JMHgwNjQxNGUzMSwKKwkvKiBYRkVSX1BJT18zICovCTB4MDY0MTRlNDIsCisJLyogWEZFUl9QSU9fMiAqLwkweDA2NDE0ZTUzLAorCS8qIFhGRVJfUElPXzEgKi8JMHgwNjgxNGU5MywKKwkvKiBYRkVSX1BJT18wICovCTB4MDY4MTRlYTcKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2hpcHNldF9idXNfY2xvY2tfbGlzdF9lbnRyeSBzaXh0eV9zaXhfYmFzZV9ocHQzNzBbXSA9IHsKLQl7CVhGRVJfVURNQV81LAkweDE0ODQ2MjMxCX0sCi0JewlYRkVSX1VETUFfNCwJMHgxNDg4NjIzMQl9LAotCXsJWEZFUl9VRE1BXzMsCTB4MTQ4YzYyMzEJfSwKLQl7CVhGRVJfVURNQV8yLAkweDE0OGM2MjMxCX0sCi0JewlYRkVSX1VETUFfMSwJMHgxNDkwNjIzMQl9LAotCXsJWEZFUl9VRE1BXzAsCTB4MTQ5ODYyMzEJfSwKK3N0YXRpYyB1MzIgZmlmdHlfYmFzZV9ocHQzN3hbXSA9IHsKKwkvKiBYRkVSX1VETUFfNiAqLwkweDEyODQ4MjQyLAorCS8qIFhGRVJfVURNQV81ICovCTB4MTI4NDgyNDIsCisJLyogWEZFUl9VRE1BXzQgKi8JMHgxMmFjODI0MiwKKwkvKiBYRkVSX1VETUFfMyAqLwkweDEyOGM4MjQyLAorCS8qIFhGRVJfVURNQV8yICovCTB4MTIwYzgyNDIsCisJLyogWEZFUl9VRE1BXzEgKi8JMHgxMjE0ODI1NCwKKwkvKiBYRkVSX1VETUFfMCAqLwkweDEyMTg4MmVhLAogCi0JewlYRkVSX01XX0RNQV8yLAkweDI2NTE0ZTIxCX0sCi0JewlYRkVSX01XX0RNQV8xLAkweDI2NTE0ZTMzCX0sCi0JewlYRkVSX01XX0RNQV8wLAkweDI2NTE0ZTk3CX0sCisJLyogWEZFUl9NV19ETUFfMiAqLwkweDIyODA4MjQyLAorCS8qIFhGRVJfTVdfRE1BXzEgKi8JMHgyMjgwODI1NCwKKwkvKiBYRkVSX01XX0RNQV8wICovCTB4MjI4MDgyZWEsCiAKLQl7CVhGRVJfUElPXzQsCTB4MDY1MTRlMjEJfSwKLQl7CVhGRVJfUElPXzMsCTB4MDY1MTRlMjIJfSwKLQl7CVhGRVJfUElPXzIsCTB4MDY1MTRlMzMJfSwKLQl7CVhGRVJfUElPXzEsCTB4MDY5MTRlNDMJfSwKLQl7CVhGRVJfUElPXzAsCTB4MDY5MTRlNTcJfSwKLQl7CTAsCQkweDA2NTE0ZTU3CX0KKwkvKiBYRkVSX1BJT180ICovCTB4MGE4MWY0NDIsCisJLyogWEZFUl9QSU9fMyAqLwkweDBhODFmNDQzLAorCS8qIFhGRVJfUElPXzIgKi8JMHgwYTgxZjQ1NCwKKwkvKiBYRkVSX1BJT18xICovCTB4MGFjMWY0NjUsCisJLyogWEZFUl9QSU9fMCAqLwkweDBhYzFmNDhhCiB9OwogCi0vKiB0aGVzZSBhcmUgdGhlIGN1cnJlbnQgKDQgc2VwIDIwMDEpIHRpbWluZ3MgZnJvbSBoaWdocG9pbnQgKi8KLXN0YXRpYyBzdHJ1Y3QgY2hpcHNldF9idXNfY2xvY2tfbGlzdF9lbnRyeSB0aGlydHlfdGhyZWVfYmFzZV9ocHQzNzBhW10gPSB7Ci0JewlYRkVSX1VETUFfNSwJMHgxMjQ0NjIzMQl9LAotCXsJWEZFUl9VRE1BXzQsCTB4MTI0NDYyMzEJfSwKLQl7CVhGRVJfVURNQV8zLAkweDEyNmM2MjMxCX0sCi0JewlYRkVSX1VETUFfMiwJMHgxMjQ4NjIzMQl9LAotCXsJWEZFUl9VRE1BXzEsCTB4MTI0YzYyMzMJfSwKLQl7CVhGRVJfVURNQV8wLAkweDEyNTA2Mjk3CX0sCitzdGF0aWMgdTMyIHNpeHR5X3NpeF9iYXNlX2hwdDM3eFtdID0geworCS8qIFhGRVJfVURNQV82ICovCTB4MWM4NjljNjIsCisJLyogWEZFUl9VRE1BXzUgKi8JMHgxY2FlOWM2MiwJLyogMHgxYzhhOWM2MiAqLworCS8qIFhGRVJfVURNQV80ICovCTB4MWM4YTljNjIsCisJLyogWEZFUl9VRE1BXzMgKi8JMHgxYzhlOWM2MiwKKwkvKiBYRkVSX1VETUFfMiAqLwkweDFjOTI5YzYyLAorCS8qIFhGRVJfVURNQV8xICovCTB4MWM5YTljNjIsCisJLyogWEZFUl9VRE1BXzAgKi8JMHgxYzgyOWM2MiwKIAotCXsJWEZFUl9NV19ETUFfMiwJMHgyMjQwNmMzMQl9LAotCXsJWEZFUl9NV19ETUFfMSwJMHgyMjQwNmMzMwl9LAotCXsJWEZFUl9NV19ETUFfMCwJMHgyMjQwNmM5Nwl9LAorCS8qIFhGRVJfTVdfRE1BXzIgKi8JMHgyYzgyOWM2MiwKKwkvKiBYRkVSX01XX0RNQV8xICovCTB4MmM4MjljNjYsCisJLyogWEZFUl9NV19ETUFfMCAqLwkweDJjODI5ZDJlLAogCi0JewlYRkVSX1BJT180LAkweDA2NDE0ZTMxCX0sCi0JewlYRkVSX1BJT18zLAkweDA2NDE0ZTQyCX0sCi0JewlYRkVSX1BJT18yLAkweDA2NDE0ZTUzCX0sCi0JewlYRkVSX1BJT18xLAkweDA2ODE0ZTkzCX0sCi0JewlYRkVSX1BJT18wLAkweDA2ODE0ZWE3CX0sCi0JewkwLAkJMHgwNjgxNGVhNwl9CisJLyogWEZFUl9QSU9fNCAqLwkweDBjODI5YzYyLAorCS8qIFhGRVJfUElPXzMgKi8JMHgwYzgyOWM4NCwKKwkvKiBYRkVSX1BJT18yICovCTB4MGM4MjljYTYsCisJLyogWEZFUl9QSU9fMSAqLwkweDBkMDI5ZDI2LAorCS8qIFhGRVJfUElPXzAgKi8JMHgwZDAyOWQ1ZQogfTsKIAotLyogMnggMzNNSHogdGltaW5ncyAqLwotc3RhdGljIHN0cnVjdCBjaGlwc2V0X2J1c19jbG9ja19saXN0X2VudHJ5IHNpeHR5X3NpeF9iYXNlX2hwdDM3MGFbXSA9IHsKLQl7CVhGRVJfVURNQV81LAkweDE0ODhlNjczCX0sCi0JewlYRkVSX1VETUFfNCwJMHgxNDg4ZTY3Mwl9LAotCXsJWEZFUl9VRE1BXzMsCTB4MTQ5OGU2NzMJfSwKLQl7CVhGRVJfVURNQV8yLAkweDE0OTBlNjczCX0sCi0JewlYRkVSX1VETUFfMSwJMHgxNDk4ZTY3Nwl9LAotCXsJWEZFUl9VRE1BXzAsCTB4MTRhMGU3M2YJfSwKLQotCXsJWEZFUl9NV19ETUFfMiwJMHgyNDgwZmE3Mwl9LAotCXsJWEZFUl9NV19ETUFfMSwJMHgyNDgwZmE3Nwl9LCAKLQl7CVhGRVJfTVdfRE1BXzAsCTB4MjQ4MGZiM2YJfSwKLQotCXsJWEZFUl9QSU9fNCwJMHgwYzgyYmU3Mwl9LAotCXsJWEZFUl9QSU9fMywJMHgwYzgyYmU5NQl9LAotCXsJWEZFUl9QSU9fMiwJMHgwYzgyYmViNwl9LAotCXsJWEZFUl9QSU9fMSwJMHgwZDAyYmYzNwl9LAotCXsJWEZFUl9QSU9fMCwJMHgwZDAyYmY1Zgl9LAotCXsJMCwJCTB4MGQwMmJmNWYJfQotfTsKLQotc3RhdGljIHN0cnVjdCBjaGlwc2V0X2J1c19jbG9ja19saXN0X2VudHJ5IGZpZnR5X2Jhc2VfaHB0MzcwYVtdID0gewotCXsJWEZFUl9VRE1BXzUsCTB4MTI4NDgyNDIJfSwKLQl7CVhGRVJfVURNQV80LAkweDEyYWM4MjQyCX0sCi0JewlYRkVSX1VETUFfMywJMHgxMjhjODI0Mgl9LAotCXsJWEZFUl9VRE1BXzIsCTB4MTIwYzgyNDIJfSwKLQl7CVhGRVJfVURNQV8xLAkweDEyMTQ4MjU0CX0sCi0JewlYRkVSX1VETUFfMCwJMHgxMjE4ODJlYQl9LAotCi0JewlYRkVSX01XX0RNQV8yLAkweDIyODA4MjQyCX0sCi0JewlYRkVSX01XX0RNQV8xLAkweDIyODA4MjU0CX0sCi0JewlYRkVSX01XX0RNQV8wLAkweDIyODA4MmVhCX0sCi0KLQl7CVhGRVJfUElPXzQsCTB4MGE4MWY0NDIJfSwKLQl7CVhGRVJfUElPXzMsCTB4MGE4MWY0NDMJfSwKLQl7CVhGRVJfUElPXzIsCTB4MGE4MWY0NTQJfSwKLQl7CVhGRVJfUElPXzEsCTB4MGFjMWY0NjUJfSwKLQl7CVhGRVJfUElPXzAsCTB4MGFjMWY0OGEJfSwKLQl7CTAsCQkweDBhYzFmNDhhCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2hpcHNldF9idXNfY2xvY2tfbGlzdF9lbnRyeSB0aGlydHlfdGhyZWVfYmFzZV9ocHQzNzJbXSA9IHsKLQl7CVhGRVJfVURNQV82LAkweDFjODFkYzYyCX0sCi0JewlYRkVSX1VETUFfNSwJMHgxYzZkZGM2Mgl9LAotCXsJWEZFUl9VRE1BXzQsCTB4MWM4ZGRjNjIJfSwKLQl7CVhGRVJfVURNQV8zLAkweDFjOGVkYzYyCX0sCS8qIGNoZWNrbWUgKi8KLQl7CVhGRVJfVURNQV8yLAkweDFjOTFkYzYyCX0sCi0JewlYRkVSX1VETUFfMSwJMHgxYzlhZGM2Mgl9LAkvKiBjaGVja21lICovCi0JewlYRkVSX1VETUFfMCwJMHgxYzgyZGM2Mgl9LAkvKiBjaGVja21lICovCi0KLQl7CVhGRVJfTVdfRE1BXzIsCTB4MmM4MjkyNjIJfSwKLQl7CVhGRVJfTVdfRE1BXzEsCTB4MmM4MjkyNjYJfSwJLyogY2hlY2ttZSAqLwotCXsJWEZFUl9NV19ETUFfMCwJMHgyYzgyOTIyZQl9LAkvKiBjaGVja21lICovCi0KLQl7CVhGRVJfUElPXzQsCTB4MGM4MjljNjIJfSwKLQl7CVhGRVJfUElPXzMsCTB4MGM4MjljODQJfSwKLQl7CVhGRVJfUElPXzIsCTB4MGM4MjljYTYJfSwKLQl7CVhGRVJfUElPXzEsCTB4MGQwMjlkMjYJfSwKLQl7CVhGRVJfUElPXzAsCTB4MGQwMjlkNWUJfSwKLQl7CTAsCQkweDBkMDI5ZDVlCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2hpcHNldF9idXNfY2xvY2tfbGlzdF9lbnRyeSBmaWZ0eV9iYXNlX2hwdDM3MltdID0gewotCXsJWEZFUl9VRE1BXzUsCTB4MTI4NDgyNDIJfSwKLQl7CVhGRVJfVURNQV80LAkweDEyYWM4MjQyCX0sCi0JewlYRkVSX1VETUFfMywJMHgxMjhjODI0Mgl9LAotCXsJWEZFUl9VRE1BXzIsCTB4MTIwYzgyNDIJfSwKLQl7CVhGRVJfVURNQV8xLAkweDEyMTQ4MjU0CX0sCi0JewlYRkVSX1VETUFfMCwJMHgxMjE4ODJlYQl9LAotCi0JewlYRkVSX01XX0RNQV8yLAkweDIyODA4MjQyCX0sCi0JewlYRkVSX01XX0RNQV8xLAkweDIyODA4MjU0CX0sCi0JewlYRkVSX01XX0RNQV8wLAkweDIyODA4MmVhCX0sCi0KLQl7CVhGRVJfUElPXzQsCTB4MGE4MWY0NDIJfSwKLQl7CVhGRVJfUElPXzMsCTB4MGE4MWY0NDMJfSwKLQl7CVhGRVJfUElPXzIsCTB4MGE4MWY0NTQJfSwKLQl7CVhGRVJfUElPXzEsCTB4MGFjMWY0NjUJfSwKLQl7CVhGRVJfUElPXzAsCTB4MGFjMWY0OGEJfSwKLQl7CTAsCQkweDBhODFmNDQzCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2hpcHNldF9idXNfY2xvY2tfbGlzdF9lbnRyeSBzaXh0eV9zaXhfYmFzZV9ocHQzNzJbXSA9IHsKLQl7CVhGRVJfVURNQV82LAkweDFjODY5YzYyCX0sCi0JewlYRkVSX1VETUFfNSwJMHgxY2FlOWM2Mgl9LAotCXsJWEZFUl9VRE1BXzQsCTB4MWM4YTljNjIJfSwKLQl7CVhGRVJfVURNQV8zLAkweDFjOGU5YzYyCX0sCi0JewlYRkVSX1VETUFfMiwJMHgxYzkyOWM2Mgl9LAotCXsJWEZFUl9VRE1BXzEsCTB4MWM5YTljNjIJfSwKLQl7CVhGRVJfVURNQV8wLAkweDFjODI5YzYyCX0sCi0KLQl7CVhGRVJfTVdfRE1BXzIsCTB4MmM4MjljNjIJfSwKLQl7CVhGRVJfTVdfRE1BXzEsCTB4MmM4MjljNjYJfSwKLQl7CVhGRVJfTVdfRE1BXzAsCTB4MmM4MjlkMmUJfSwKLQotCXsJWEZFUl9QSU9fNCwJMHgwYzgyOWM2Mgl9LAotCXsJWEZFUl9QSU9fMywJMHgwYzgyOWM4NAl9LAotCXsJWEZFUl9QSU9fMiwJMHgwYzgyOWNhNgl9LAotCXsJWEZFUl9QSU9fMSwJMHgwZDAyOWQyNgl9LAotCXsJWEZFUl9QSU9fMCwJMHgwZDAyOWQ1ZQl9LAotCXsJMCwJCTB4MGQwMjlkMjYJfQotfTsKLQotc3RhdGljIHN0cnVjdCBjaGlwc2V0X2J1c19jbG9ja19saXN0X2VudHJ5IHRoaXJ0eV90aHJlZV9iYXNlX2hwdDM3NFtdID0gewotCXsJWEZFUl9VRE1BXzYsCTB4MTI4MDgyNDIJfSwKLQl7CVhGRVJfVURNQV81LAkweDEyODQ4MjQyCX0sCi0JewlYRkVSX1VETUFfNCwJMHgxMmFjODI0Mgl9LAotCXsJWEZFUl9VRE1BXzMsCTB4MTI4YzgyNDIJfSwKLQl7CVhGRVJfVURNQV8yLAkweDEyMGM4MjQyCX0sCi0JewlYRkVSX1VETUFfMSwJMHgxMjE0ODI1NAl9LAotCXsJWEZFUl9VRE1BXzAsCTB4MTIxODgyZWEJfSwKLQotCXsJWEZFUl9NV19ETUFfMiwJMHgyMjgwODI0Mgl9LAotCXsJWEZFUl9NV19ETUFfMSwJMHgyMjgwODI1NAl9LAotCXsJWEZFUl9NV19ETUFfMCwJMHgyMjgwODJlYQl9LAotCi0JewlYRkVSX1BJT180LAkweDBhODFmNDQyCX0sCi0JewlYRkVSX1BJT18zLAkweDBhODFmNDQzCX0sCi0JewlYRkVSX1BJT18yLAkweDBhODFmNDU0CX0sCi0JewlYRkVSX1BJT18xLAkweDBhYzFmNDY1CX0sCi0JewlYRkVSX1BJT18wLAkweDBhYzFmNDhhCX0sCi0JewkwLAkJMHgwNjgxNGU5Mwl9Ci19OwotCi0vKiBGSVhNRTogNTBNSHogdGltaW5ncyBmb3IgSFBUMzc0ICovCi0KLSNpZiAwCi1zdGF0aWMgc3RydWN0IGNoaXBzZXRfYnVzX2Nsb2NrX2xpc3RfZW50cnkgc2l4dHlfc2l4X2Jhc2VfaHB0Mzc0W10gPSB7Ci0JewlYRkVSX1VETUFfNiwJMHgxMjQwNjIzMQl9LAkvKiBjaGVja21lICovCi0JewlYRkVSX1VETUFfNSwJMHgxMjQ0NjIzMQl9LAkvKiAweDE0ODQ2MjMxICovCi0JewlYRkVSX1VETUFfNCwJMHgxNjgxNGVhNwl9LAkvKiAweDE0ODg2MjMxICovCi0JewlYRkVSX1VETUFfMywJMHgxNjgxNGVhNwl9LAkvKiAweDE0OGM2MjMxICovCi0JewlYRkVSX1VETUFfMiwJMHgxNjgxNGVhNwl9LAkvKiAweDE0OGM2MjMxICovCi0JewlYRkVSX1VETUFfMSwJMHgxNjgxNGVhNwl9LAkvKiAweDE0OTA2MjMxICovCi0JewlYRkVSX1VETUFfMCwJMHgxNjgxNGVhNwl9LAkvKiAweDE0OTg2MjMxICovCi0JewlYRkVSX01XX0RNQV8yLAkweDE2ODE0ZWE3CX0sCS8qIDB4MjY1MTRlMjEgKi8KLQl7CVhGRVJfTVdfRE1BXzEsCTB4MTY4MTRlYTcJfSwJLyogMHgyNjUxNGU5NyAqLwotCXsJWEZFUl9NV19ETUFfMCwJMHgxNjgxNGVhNwl9LAkvKiAweDI2NTE0ZTk3ICovCi0JewlYRkVSX1BJT180LAkweDA2ODE0ZWE3CX0sCS8qIDB4MDY1MTRlMjEgKi8KLQl7CVhGRVJfUElPXzMsCTB4MDY4MTRlYTcJfSwJLyogMHgwNjUxNGUyMiAqLwotCXsJWEZFUl9QSU9fMiwJMHgwNjgxNGVhNwl9LAkvKiAweDA2NTE0ZTMzICovCi0JewlYRkVSX1BJT18xLAkweDA2ODE0ZWE3CX0sCS8qIDB4MDY5MTRlNDMgKi8KLQl7CVhGRVJfUElPXzAsCTB4MDY4MTRlYTcJfSwJLyogMHgwNjkxNGU1NyAqLwotCXsJMCwJCTB4MDY4MTRlYTcJfQotfTsKLSNlbmRpZgotCiAjZGVmaW5lIEhQVDM2Nl9ERUJVR19EUklWRV9JTkZPCQkwCiAjZGVmaW5lIEhQVDM3NF9BTExPV19BVEExMzNfNgkJMAogI2RlZmluZSBIUFQzNzFfQUxMT1dfQVRBMTMzXzYJCTAKICNkZWZpbmUgSFBUMzAyX0FMTE9XX0FUQTEzM182CQkwCi0jZGVmaW5lIEhQVDM3Ml9BTExPV19BVEExMzNfNgkJMQorI2RlZmluZSBIUFQzNzJfQUxMT1dfQVRBMTMzXzYJCTAKICNkZWZpbmUgSFBUMzcwX0FMTE9XX0FUQTEwMF81CQkxCiAjZGVmaW5lIEhQVDM2Nl9BTExPV19BVEE2Nl80CQkxCiAjZGVmaW5lIEhQVDM2Nl9BTExPV19BVEE2Nl8zCQkxCkBAIC00NjEsOSArMzU3LDEwIEBACiAJaW50IHJldmlzaW9uOwkJLyogQ2hpcHNldCByZXZpc2lvbiAqLwogCWludCBmbGFnczsJCS8qIENoaXBzZXQgcHJvcGVydGllcyAqLwogI2RlZmluZSBQTExfTU9ERQkxCi0jZGVmaW5lIElTXzM3Mk4JCTIKKyNkZWZpbmUgSVNfM3h4TiAJMgorI2RlZmluZSBQQ0lfNjZNSFoJNAogCQkJCS8qIFNwZWVkIHRhYmxlICovCi0Jc3RydWN0IGNoaXBzZXRfYnVzX2Nsb2NrX2xpc3RfZW50cnkgKnNwZWVkOworCXUzMiAqc3BlZWQ7CiB9OwogCiAvKgpAQCAtNjAwLDEyICs0OTcsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBwY2lfYnVzX2Nsb2NrX2xpc3QgKHU4IHNwZWVkLCBzdHJ1Y3QgY2hpcHNldF9idXNfY2xvY2tfbGlzdF9lbnRyeSAqIGNoaXBzZXRfdGFibGUpCitzdGF0aWMgdTMyIHBjaV9idXNfY2xvY2tfbGlzdCh1OCBzcGVlZCwgdTMyICpjaGlwc2V0X3RhYmxlKQogewotCWZvciAoIDsgY2hpcHNldF90YWJsZS0+eGZlcl9zcGVlZCA7IGNoaXBzZXRfdGFibGUrKykKLQkJaWYgKGNoaXBzZXRfdGFibGUtPnhmZXJfc3BlZWQgPT0gc3BlZWQpCi0JCQlyZXR1cm4gY2hpcHNldF90YWJsZS0+Y2hpcHNldF9zZXR0aW5nczsKLQlyZXR1cm4gY2hpcHNldF90YWJsZS0+Y2hpcHNldF9zZXR0aW5nczsKKwlpbnQgaTsKKworCS8qCisJICogTG9va3VwIHRoZSB0cmFuc2ZlciBtb2RlIHRhYmxlIHRvIGdldCB0aGUgaW5kZXggaW50bworCSAqIHRoZSB0aW1pbmcgdGFibGUuCisJICoKKwkgKiBOT1RFOiBGb3IgWEZFUl9QSU9fU0xPVywgUElPIG1vZGUgMCB0aW1pbmdzIHdpbGwgYmUgdXNlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4ZmVyX3NwZWVkcykgLSAxOyBpKyspCisJCWlmICh4ZmVyX3NwZWVkc1tpXSA9PSBzcGVlZCkKKwkJCWJyZWFrOworCXJldHVybiBjaGlwc2V0X3RhYmxlW2ldOwogfQogCiBzdGF0aWMgaW50IGhwdDM2eF90dW5lX2NoaXBzZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCB4ZmVyc3BlZWQpCkBAIC05NTYsMTU2ICs4NjEsMTI3IEBACiB9CiAKIC8qKgotICoJaHB0Mzcybl9zZXRfY2xvY2sJLQlwZXJmb3JtIGNsb2NrIHN3aXRjaGluZyBkYW5jZQotICoJQGRyaXZlOiBEcml2ZSB0byBzd2l0Y2gKLSAqCUBtb2RlOiBTd2l0Y2hpbmcgbW9kZSAoMHgyMSBmb3Igd3JpdGUsIDB4MjMgb3RoZXJ3aXNlKQorICoJaHB0M3h4bl9zZXRfY2xvY2sJLQlwZXJmb3JtIGNsb2NrIHN3aXRjaGluZyBkYW5jZQorICoJQGh3aWY6IGh3aWYgdG8gc3dpdGNoCisgKglAbW9kZTogY2xvY2tpbmcgbW9kZSAoMHgyMSBmb3Igd3JpdGUsIDB4MjMgb3RoZXJ3aXNlKQogICoKLSAqCVN3aXRjaCB0aGUgRFBMTCBjbG9jayBvbiB0aGUgSFBUMzcyTiBkZXZpY2VzLiBUaGlzIGlzIGEKLSAqCXJpZ2h0IG1lc3MuCisgKglTd2l0Y2ggdGhlIERQTEwgY2xvY2sgb24gdGhlIEhQVDN4eE4gZGV2aWNlcy4gVGhpcyBpcyBhCXJpZ2h0IG1lc3MuCisgKglOT1RFOiBhdm9pZCB0b3VjaGluZyB0aGUgZGlzYWJsZWQgcHJpbWFyeSBjaGFubmVsIG9uIEhQVDM3MU4gLS0gaXQKKyAqCWRvZXNuJ3QgcGh5c2ljYWxseSBleGlzdCBhbnl3YXkuLi4KICAqLwotIAotc3RhdGljIHZvaWQgaHB0Mzcybl9zZXRfY2xvY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbW9kZSkKKworc3RhdGljIHZvaWQgaHB0M3h4bl9zZXRfY2xvY2soaWRlX2h3aWZfdCAqaHdpZiwgdTggbW9kZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JCi0JLyogRklYTUU6IHNob3VsZCB3ZSBjaGVjayBmb3IgRE1BIGFjdGl2ZSBhbmQgQlVHKCkgKi8KKwl1OCBtY3IxLCBzY3IyID0gaHdpZi0+SU5CKGh3aWYtPmRtYV9tYXN0ZXIgKyAweDdiKTsKKworCWlmICgoc2NyMiAmIDB4N2YpID09IG1vZGUpCisJCXJldHVybjsKKworCS8qIE1JU0MuIGNvbnRyb2wgcmVnaXN0ZXIgMSBoYXMgdGhlIGNoYW5uZWwgZW5hYmxlIGJpdC4uLiAqLworCW1jcjEgPSBod2lmLT5JTkIoaHdpZi0+ZG1hX21hc3RlciArIDB4NzApOworCiAJLyogVHJpc3RhdGUgdGhlIGJ1cyAqLwotCW91dGIoMHg4MCwgaHdpZi0+ZG1hX2Jhc2UrMHg3Myk7Ci0Jb3V0YigweDgwLCBod2lmLT5kbWFfYmFzZSsweDc3KTsKLQkKKwlpZiAobWNyMSAmIDB4MDQpCisJCWh3aWYtPk9VVEIoMHg4MCwgaHdpZi0+ZG1hX21hc3RlciArIDB4NzMpOworCWh3aWYtPk9VVEIoMHg4MCwgaHdpZi0+ZG1hX21hc3RlciArIDB4NzcpOworCiAJLyogU3dpdGNoIGNsb2NrIGFuZCByZXNldCBjaGFubmVscyAqLwotCW91dGIobW9kZSwgaHdpZi0+ZG1hX2Jhc2UrMHg3Qik7Ci0Jb3V0YigweEMwLCBod2lmLT5kbWFfYmFzZSsweDc5KTsKLQkKKwlod2lmLT5PVVRCKG1vZGUsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDdiKTsKKwlod2lmLT5PVVRCKDB4YzAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc5KTsKKwogCS8qIFJlc2V0IHN0YXRlIG1hY2hpbmVzICovCi0Jb3V0YigweDM3LCBod2lmLT5kbWFfYmFzZSsweDcwKTsKLQlvdXRiKDB4MzcsIGh3aWYtPmRtYV9iYXNlKzB4NzQpOwotCQorCWlmIChtY3IxICYgMHgwNCkKKwkJaHdpZi0+T1VUQigweDM3LCBod2lmLT5kbWFfbWFzdGVyICsgMHg3MCk7CisJaHdpZi0+T1VUQigweDM3LCBod2lmLT5kbWFfbWFzdGVyICsgMHg3NCk7CisKIAkvKiBDb21wbGV0ZSByZXNldCAqLwotCW91dGIoMHgwMCwgaHdpZi0+ZG1hX2Jhc2UrMHg3OSk7Ci0JCisJaHdpZi0+T1VUQigweDAwLCBod2lmLT5kbWFfbWFzdGVyICsgMHg3OSk7CisKIAkvKiBSZWNvbm5lY3QgY2hhbm5lbHMgdG8gYnVzICovCi0Jb3V0YigweDAwLCBod2lmLT5kbWFfYmFzZSsweDczKTsKLQlvdXRiKDB4MDAsIGh3aWYtPmRtYV9iYXNlKzB4NzcpOworCWlmIChtY3IxICYgMHgwNCkKKwkJaHdpZi0+T1VUQigweDAwLCBod2lmLT5kbWFfbWFzdGVyICsgMHg3Myk7CisJaHdpZi0+T1VUQigweDAwLCBod2lmLT5kbWFfbWFzdGVyICsgMHg3Nyk7CiB9CiAKIC8qKgotICoJaHB0Mzcybl9yd19kaXNrCQktCXByZXBhcmUgZm9yIEkvTworICoJaHB0M3h4bl9yd19kaXNrCQktCXByZXBhcmUgZm9yIEkvTwogICoJQGRyaXZlOiBkcml2ZSBmb3IgY29tbWFuZAogICoJQHJxOiBibG9jayByZXF1ZXN0IHN0cnVjdHVyZQogICoKLSAqCVRoaXMgaXMgY2FsbGVkIHdoZW4gYSBkaXNrIEkvTyBpcyBpc3N1ZWQgdG8gdGhlIDM3Mk4uCisgKglUaGlzIGlzIGNhbGxlZCB3aGVuIGEgZGlzayBJL08gaXMgaXNzdWVkIHRvIEhQVDN4eE4uCiAgKglXZSBuZWVkIGl0IGJlY2F1c2Ugb2YgdGhlIGNsb2NrIHN3aXRjaGluZy4KICAqLwogCi1zdGF0aWMgdm9pZCBocHQzNzJuX3J3X2Rpc2soaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWludCB3YW50Y2xvY2s7Ci0KLQl3YW50Y2xvY2sgPSBycV9kYXRhX2RpcihycSkgPyAweDIzIDogMHgyMTsKLQotCWlmIChod2lmLT5jb25maWdfZGF0YSAhPSB3YW50Y2xvY2spIHsKLQkJaHB0Mzcybl9zZXRfY2xvY2soZHJpdmUsIHdhbnRjbG9jayk7Ci0JCWh3aWYtPmNvbmZpZ19kYXRhID0gd2FudGNsb2NrOwotCX0KLX0KLQotLyoKLSAqIFNpbmNlIFNVTiBDb2JhbHQgaXMgYXR0ZW1wdGluZyB0byBkbyB0aGlzIG9wZXJhdGlvbiwgSSBzaG91bGQgZGlzY2xvc2UKLSAqIHRoaXMgaGFzIGJlZW4gYSBsb25nIHRpbWUgYWdvIFRodSBKdWwgMjcgMTY6NDA6NTcgMjAwMCB3YXMgdGhlIHBhdGNoIGRhdGUKLSAqIEhPVFNXQVAgQVRBIEluZnJhc3RydWN0dXJlLgotICovCi0KLXN0YXRpYyB2b2lkIGhwdDN4eF9yZXNldCAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotfQotCi1zdGF0aWMgaW50IGhwdDN4eF90cmlzdGF0ZSAoaWRlX2RyaXZlX3QgKiBkcml2ZSwgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgaHB0M3h4bl9yd19kaXNrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gaHdpZi0+cGNpX2RldjsKLQl1OCByZWc1OWggPSAwLCByZXNldAk9IChod2lmLT5jaGFubmVsKSA/IDB4ODAgOiAweDQwOwotCXU4IHJlZ1hYaCA9IDAsIHN0YXRlX3JlZz0gKGh3aWYtPmNoYW5uZWwpID8gMHg1NyA6IDB4NTM7CisJdTggd2FudGNsb2NrCQk9IHJxX2RhdGFfZGlyKHJxKSA/IDB4MjMgOiAweDIxOwogCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDU5LCAmcmVnNTloKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIHN0YXRlX3JlZywgJnJlZ1hYaCk7Ci0KLQlpZiAoc3RhdGUpIHsKLQkJKHZvaWQpIGlkZV9kb19yZXNldChkcml2ZSk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHN0YXRlX3JlZywgcmVnWFhofDB4ODApOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDU5LCByZWc1OWh8cmVzZXQpOwotCX0gZWxzZSB7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTksIHJlZzU5aCAmIH4ocmVzZXQpKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgc3RhdGVfcmVnLCByZWdYWGggJiB+KDB4ODApKTsKLQkJKHZvaWQpIGlkZV9kb19yZXNldChkcml2ZSk7Ci0JfQotCXJldHVybiAwOworCWhwdDN4eG5fc2V0X2Nsb2NrKGh3aWYsIHdhbnRjbG9jayk7CiB9CiAKIC8qIAotICogc2V0L2dldCBwb3dlciBzdGF0ZSBmb3IgYSBkcml2ZS4KLSAqIHR1cm5pbmcgdGhlIHBvd2VyIG9mZiBkb2VzIHRoZSBmb2xsb3dpbmcgdGhpbmdzOgotICogICAxKSBzb2Z0LXJlc2V0IHRoZSBkcml2ZQotICogICAyKSB0cmktc3RhdGVzIHRoZSBpZGUgYnVzCisgKiBTZXQvZ2V0IHBvd2VyIHN0YXRlIGZvciBhIGRyaXZlLgogICoKLSAqIHdoZW4gd2UgdHVybiB0aGluZ3MgYmFjayBvbiwgd2UgbmVlZCB0byByZS1pbml0aWFsaXplIHRoaW5ncy4KKyAqIFdoZW4gd2UgdHVybiB0aGUgcG93ZXIgYmFjayBvbiwgd2UgbmVlZCB0byByZS1pbml0aWFsaXplIHRoaW5ncy4KICAqLwogI2RlZmluZSBUUklTVEFURV9CSVQgIDB4ODAwMAotc3RhdGljIGludCBocHQzNzBfYnVzcHJvYyhpZGVfZHJpdmVfdCAqIGRyaXZlLCBpbnQgc3RhdGUpCisKK3N0YXRpYyBpbnQgaHB0M3h4X2J1c3Byb2MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgc3RhdGUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSBod2lmLT5wY2lfZGV2OwotCXU4IHRyaXN0YXRlID0gMCwgcmVzZXRtYXNrID0gMCwgYnVzX3JlZyA9IDA7Ci0JdTE2IHRyaV9yZWc7CisJdTggIHRyaXN0YXRlLCByZXNldG1hc2ssIGJ1c19yZWcgPSAwOworCXUxNiB0cmlfcmVnID0gMDsKIAogCWh3aWYtPmJ1c19zdGF0ZSA9IHN0YXRlOwogCiAJaWYgKGh3aWYtPmNoYW5uZWwpIHsgCiAJCS8qIHNlY29uZGFyeSBjaGFubmVsICovCi0JCXRyaXN0YXRlID0gMHg1NjsKLQkJcmVzZXRtYXNrID0gMHg4MDsgCisJCXRyaXN0YXRlICA9IDB4NTY7CisJCXJlc2V0bWFzayA9IDB4ODA7CiAJfSBlbHNlIHsgCiAJCS8qIHByaW1hcnkgY2hhbm5lbCAqLwotCQl0cmlzdGF0ZSA9IDB4NTI7CisJCXRyaXN0YXRlICA9IDB4NTI7CiAJCXJlc2V0bWFzayA9IDB4NDA7CiAJfQogCi0JLyogZ3JhYiBzdGF0dXMgKi8KKwkvKiBHcmFiIHRoZSBzdGF0dXMuICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCB0cmlzdGF0ZSwgJnRyaV9yZWcpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1OSwgJmJ1c19yZWcpOwogCi0JLyogc2V0IHRoZSBzdGF0ZS4gd2UgZG9uJ3Qgc2V0IGl0IGlmIHdlIGRvbid0IG5lZWQgdG8gZG8gc28uCi0JICogbWFrZSBzdXJlIHRoYXQgdGhlIGRyaXZlIGtub3dzIHRoYXQgaXQgaGFzIGZhaWxlZCBpZiBpdCdzIG9mZiAqLworCS8qCisJICogU2V0IHRoZSBzdGF0ZS4gV2UgZG9uJ3Qgc2V0IGl0IGlmIHdlIGRvbid0IG5lZWQgdG8gZG8gc28uCisJICogTWFrZSBzdXJlIHRoYXQgdGhlIGRyaXZlIGtub3dzIHRoYXQgaXQgaGFzIGZhaWxlZCBpZiBpdCdzIG9mZi4KKwkgKi8KIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBCVVNTVEFURV9PTjoKLQkJaHdpZi0+ZHJpdmVzWzBdLmZhaWx1cmVzID0gMDsKLQkJaHdpZi0+ZHJpdmVzWzFdLmZhaWx1cmVzID0gMDsKLQkJaWYgKChidXNfcmVnICYgcmVzZXRtYXNrKSA9PSAwKQorCQlpZiAoIShidXNfcmVnICYgcmVzZXRtYXNrKSkKIAkJCXJldHVybiAwOwotCQl0cmlfcmVnICY9IH5UUklTVEFURV9CSVQ7Ci0JCWJ1c19yZWcgJj0gfnJlc2V0bWFzazsKLQkJYnJlYWs7CisJCWh3aWYtPmRyaXZlc1swXS5mYWlsdXJlcyA9IGh3aWYtPmRyaXZlc1sxXS5mYWlsdXJlcyA9IDA7CisKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1OSwgYnVzX3JlZyAmIH5yZXNldG1hc2spOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCB0cmlzdGF0ZSwgdHJpX3JlZyAmIH5UUklTVEFURV9CSVQpOworCQlyZXR1cm4gMDsKIAljYXNlIEJVU1NUQVRFX09GRjoKLQkJaHdpZi0+ZHJpdmVzWzBdLmZhaWx1cmVzID0gaHdpZi0+ZHJpdmVzWzBdLm1heF9mYWlsdXJlcyArIDE7Ci0JCWh3aWYtPmRyaXZlc1sxXS5mYWlsdXJlcyA9IGh3aWYtPmRyaXZlc1sxXS5tYXhfZmFpbHVyZXMgKyAxOwotCQlpZiAoKHRyaV9yZWcgJiBUUklTVEFURV9CSVQpID09IDAgJiYgKGJ1c19yZWcgJiByZXNldG1hc2spKQorCQlpZiAoKGJ1c19yZWcgJiByZXNldG1hc2spICYmICEodHJpX3JlZyAmIFRSSVNUQVRFX0JJVCkpCiAJCQlyZXR1cm4gMDsKIAkJdHJpX3JlZyAmPSB+VFJJU1RBVEVfQklUOwotCQlidXNfcmVnIHw9IHJlc2V0bWFzazsKIAkJYnJlYWs7CiAJY2FzZSBCVVNTVEFURV9UUklTVEFURToKLQkJaHdpZi0+ZHJpdmVzWzBdLmZhaWx1cmVzID0gaHdpZi0+ZHJpdmVzWzBdLm1heF9mYWlsdXJlcyArIDE7Ci0JCWh3aWYtPmRyaXZlc1sxXS5mYWlsdXJlcyA9IGh3aWYtPmRyaXZlc1sxXS5tYXhfZmFpbHVyZXMgKyAxOwotCQlpZiAoKHRyaV9yZWcgJiBUUklTVEFURV9CSVQpICYmIChidXNfcmVnICYgcmVzZXRtYXNrKSkKKwkJaWYgKChidXNfcmVnICYgcmVzZXRtYXNrKSAmJiAgKHRyaV9yZWcgJiBUUklTVEFURV9CSVQpKQogCQkJcmV0dXJuIDA7CiAJCXRyaV9yZWcgfD0gVFJJU1RBVEVfQklUOwotCQlidXNfcmVnIHw9IHJlc2V0bWFzazsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTksIGJ1c19yZWcpOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHRyaXN0YXRlLCB0cmlfcmVnKTsKIAorCWh3aWYtPmRyaXZlc1swXS5mYWlsdXJlcyA9IGh3aWYtPmRyaXZlc1swXS5tYXhfZmFpbHVyZXMgKyAxOworCWh3aWYtPmRyaXZlc1sxXS5mYWlsdXJlcyA9IGh3aWYtPmRyaXZlc1sxXS5tYXhfZmFpbHVyZXMgKyAxOworCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgdHJpc3RhdGUsIHRyaV9yZWcpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTksIGJ1c19yZWcgfCByZXNldG1hc2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMTE5LDE0ICs5OTUsMTQgQEAKIAkvKiBkZXRlY3QgYnVzIHNwZWVkIGJ5IGxvb2tpbmcgYXQgY29udHJvbCByZWcgdGltaW5nOiAqLwogCXN3aXRjaCgocmVnMSA+PiA4KSAmIDcpIHsKIAkJY2FzZSA1OgotCQkJaW5mby0+c3BlZWQgPSBmb3J0eV9iYXNlX2hwdDM2NjsKKwkJCWluZm8tPnNwZWVkID0gZm9ydHlfYmFzZV9ocHQzNng7CiAJCQlicmVhazsKIAkJY2FzZSA5OgotCQkJaW5mby0+c3BlZWQgPSB0d2VudHlfZml2ZV9iYXNlX2hwdDM2NjsKKwkJCWluZm8tPnNwZWVkID0gdHdlbnR5X2ZpdmVfYmFzZV9ocHQzNng7CiAJCQlicmVhazsKIAkJY2FzZSA3OgogCQlkZWZhdWx0OgotCQkJaW5mby0+c3BlZWQgPSB0aGlydHlfdGhyZWVfYmFzZV9ocHQzNjY7CisJCQlpbmZvLT5zcGVlZCA9IHRoaXJ0eV90aHJlZV9iYXNlX2hwdDM2eDsKIAkJCWJyZWFrOwogCX0KIH0KQEAgLTExMzYsOSArMTAxMiw5IEBACiAJc3RydWN0IGhwdF9pbmZvICppbmZvID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gaHdpZi0+cGNpX2RldjsKIAlpbnQgYWRqdXN0LCBpOwotCXUxNiBmcmVxOwotCXUzMiBwbGw7Ci0JdTggcmVnNWJoOworCXUxNiBmcmVxID0gMDsKKwl1MzIgcGxsLCB0ZW1wID0gMDsKKwl1OCByZWc1YmggPSAwLCBtY3IxID0gMDsKIAkKIAkvKgogCSAqIGRlZmF1bHQgdG8gcGNpIGNsb2NrLiBtYWtlIHN1cmUgTUExNS8xNiBhcmUgc2V0IHRvIG91dHB1dApAQCAtMTE1MSwyNyArMTAyNyw0MCBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NWIsIDB4MjMpOwogCiAJLyoKLQkgKiBzZXQgdXAgdGhlIFBMTC4gd2UgbmVlZCB0byBhZGp1c3QgaXQgc28gdGhhdCBpdCdzIHN0YWJsZS4gCi0JICogZnJlcSA9IFRwbGwgKiAxOTIgLyBUcGNpCisJICogV2UnbGwgaGF2ZSB0byByZWFkIGZfQ05UIHZhbHVlIGluIG9yZGVyIHRvIGRldGVybWluZQorCSAqIHRoZSBQQ0kgY2xvY2sgZnJlcXVlbmN5IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJhdGlvOgogCSAqCi0JICogVG9kby4gRm9yIG5vbiB4ODYgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBkd29yZCBpcwotCSAqIHNldCB0byAweEFCQ0RFeHh4IGluZGljYXRpbmcgdGhlIEJJT1Mgc2F2ZWQgZl9DTlQKKwkgKiBmX0NOVCA9IEZwY2kgKiAxOTIgLyBGZHBsbAorCSAqCisJICogRmlyc3QgdHJ5IHJlYWRpbmcgdGhlIHJlZ2lzdGVyIGluIHdoaWNoIHRoZSBIaWdoUG9pbnQgQklPUworCSAqIHNhdmVzIGZfQ05UIHZhbHVlIGJlZm9yZSAgcmVwcm9ncmFtbWluZyB0aGUgRFBMTCBmcm9tIGl0cworCSAqIGRlZmF1bHQgc2V0dGluZyAod2hpY2ggZGlmZmVycyBmb3IgdGhlIHZhcmlvdXMgY2hpcHMpLgorCSAqIE5PVEU6IFRoaXMgcmVnaXN0ZXIgaXMgb25seSBhY2Nlc3NpYmxlIHZpYSBJL08gc3BhY2UuCisJICoKKwkgKiBJbiBjYXNlIHRoZSBzaWduYXR1cmUgY2hlY2sgZmFpbHMsIHdlJ2xsIGhhdmUgdG8gcmVzb3J0IHRvCisJICogcmVhZGluZyB0aGUgZl9DTlQgcmVnaXN0ZXIgaXRzZWxmIGluIGhvcGVzIHRoYXQgbm9ib2R5IGhhcworCSAqIHRvdWNoZWQgdGhlIERQTEwgeWV0Li4uCiAJICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCAweDc4LCAmZnJlcSk7Ci0JZnJlcSAmPSAweDFGRjsKLQkKKwl0ZW1wID0gaW5sKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpICsgMHg5MCk7CisJaWYgKCh0ZW1wICYgMHhGRkZGRjAwMCkgIT0gMHhBQkNERTAwMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJIUFQzN1g6IG5vIGNsb2NrIGRhdGEgc2F2ZWQgYnkgQklPU1xuIik7CisKKwkJLyogQ2FsY3VsYXRlIHRoZSBhdmVyYWdlIHZhbHVlIG9mIGZfQ05UICovCisJCWZvciAodGVtcCA9IGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKKwkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgMHg3OCwgJmZyZXEpOworCQkJdGVtcCArPSBmcmVxICYgMHgxZmY7CisJCQltZGVsYXkoMSk7CisJCX0KKwkJZnJlcSA9IHRlbXAgLyAxMjg7CisJfSBlbHNlCisJCWZyZXEgPSB0ZW1wICYgMHgxZmY7CisKIAkvKgotCSAqIFRoZSAzNzJOIHVzZXMgZGlmZmVyZW50IFBDSSBjbG9jayBpbmZvcm1hdGlvbiBhbmQgaGFzCi0JICogc29tZSBvdGhlciBjb21wbGljYXRpb25zCi0JICoJT24gUENJMzMgdGltaW5nIHdlIG11c3QgY2xvY2sgc3dpdGNoCi0JICoJT24gUENJNjYgdGltaW5nIHdlIG11c3QgTk9UIHVzZSB0aGUgUENJIGNsb2NrCi0JICoKLQkgKiBDdXJyZW50bHkgd2UgYWx3YXlzIHNldCB1cCB0aGUgUExMIGZvciB0aGUgMzcyTgorCSAqIEhQVDN4eE4gY2hpcHMgdXNlIGRpZmZlcmVudCBQQ0kgY2xvY2sgaW5mb3JtYXRpb24uCisJICogQ3VycmVudGx5IHdlIGFsd2F5cyBzZXQgdXAgdGhlIFBMTCBmb3IgdGhlbS4KIAkgKi8KLQkgCi0JaWYoaW5mby0+ZmxhZ3MgJiBJU18zNzJOKQotCXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaHB0OiBIUFQzNzJOIGRldGVjdGVkLCB1c2luZyAzNzJOIHRpbWluZy5cbiIpOworCisJaWYgKGluZm8tPmZsYWdzICYgSVNfM3h4TikgewogCQlpZihmcmVxIDwgMHg1NSkKIAkJCXBsbCA9IEZfTE9XX1BDSV8zMzsKIAkJZWxzZSBpZihmcmVxIDwgMHg3MCkKQEAgLTExODAsMTAgKzEwNjksOCBAQAogCQkJcGxsID0gRl9MT1dfUENJXzUwOwogCQllbHNlCiAJCQlwbGwgPSBGX0xPV19QQ0lfNjY7Ci0JCQkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRlJFUTogJWQgUExMOiAlZFxuIiwgZnJlcSwgcGxsKTsKLQkJCQotCQkvKiBXZSBhbHdheXMgdXNlIHRoZSBwbGwgbm90IHRoZSBQQ0kgY2xvY2sgb24gMzcyTiAqLworCisJCXByaW50ayhLRVJOX0lORk8gIkhQVDN4eE4gZGV0ZWN0ZWQsIEZSRVE6ICVkLCBQTEw6ICVkXG4iLCBmcmVxLCBwbGwpOwogCX0KIAllbHNlCiAJewpAQCAtMTE5Nyw0MSArMTA4NCwyMiBAQAogCQkJcGxsID0gRl9MT1dfUENJXzY2OwogCQogCQlpZiAocGxsID09IEZfTE9XX1BDSV8zMykgewotCQkJaWYgKGluZm8tPnJldmlzaW9uID49IDgpCi0JCQkJaW5mby0+c3BlZWQgPSB0aGlydHlfdGhyZWVfYmFzZV9ocHQzNzQ7Ci0JCQllbHNlIGlmIChpbmZvLT5yZXZpc2lvbiA+PSA1KQotCQkJCWluZm8tPnNwZWVkID0gdGhpcnR5X3RocmVlX2Jhc2VfaHB0MzcyOwotCQkJZWxzZSBpZiAoaW5mby0+cmV2aXNpb24gPj0gNCkKLQkJCQlpbmZvLT5zcGVlZCA9IHRoaXJ0eV90aHJlZV9iYXNlX2hwdDM3MGE7Ci0JCQllbHNlCi0JCQkJaW5mby0+c3BlZWQgPSB0aGlydHlfdGhyZWVfYmFzZV9ocHQzNzA7CisJCQlpbmZvLT5zcGVlZCA9IHRoaXJ0eV90aHJlZV9iYXNlX2hwdDM3eDsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJIUFQzN1g6IHVzaW5nIDMzTUh6IFBDSSBjbG9ja1xuIik7CiAJCX0gZWxzZSBpZiAocGxsID09IEZfTE9XX1BDSV80MCkgewogCQkJLyogVW5zdXBwb3J0ZWQgKi8KIAkJfSBlbHNlIGlmIChwbGwgPT0gRl9MT1dfUENJXzUwKSB7Ci0JCQlpZiAoaW5mby0+cmV2aXNpb24gPj0gOCkKLQkJCQlpbmZvLT5zcGVlZCA9IGZpZnR5X2Jhc2VfaHB0MzcwYTsKLQkJCWVsc2UgaWYgKGluZm8tPnJldmlzaW9uID49IDUpCi0JCQkJaW5mby0+c3BlZWQgPSBmaWZ0eV9iYXNlX2hwdDM3MjsKLQkJCWVsc2UgaWYgKGluZm8tPnJldmlzaW9uID49IDQpCi0JCQkJaW5mby0+c3BlZWQgPSBmaWZ0eV9iYXNlX2hwdDM3MGE7Ci0JCQllbHNlCi0JCQkJaW5mby0+c3BlZWQgPSBmaWZ0eV9iYXNlX2hwdDM3MGE7CisJCQlpbmZvLT5zcGVlZCA9IGZpZnR5X2Jhc2VfaHB0Mzd4OwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkhQVDM3WDogdXNpbmcgNTBNSHogUENJIGNsb2NrXG4iKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChpbmZvLT5yZXZpc2lvbiA+PSA4KSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJIUFQzN3g6IDY2TUh6IHRpbWluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQuXG4iKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGluZm8tPnJldmlzaW9uID49IDUpCi0JCQkJaW5mby0+c3BlZWQgPSBzaXh0eV9zaXhfYmFzZV9ocHQzNzI7Ci0JCQllbHNlIGlmIChpbmZvLT5yZXZpc2lvbiA+PSA0KQotCQkJCWluZm8tPnNwZWVkID0gc2l4dHlfc2l4X2Jhc2VfaHB0MzcwYTsKLQkJCWVsc2UKLQkJCQlpbmZvLT5zcGVlZCA9IHNpeHR5X3NpeF9iYXNlX2hwdDM3MDsKKwkJCWluZm8tPnNwZWVkID0gc2l4dHlfc2l4X2Jhc2VfaHB0Mzd4OwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkhQVDM3WDogdXNpbmcgNjZNSHogUENJIGNsb2NrXG4iKTsKIAkJfQogCX0KLQkKKworCWlmIChwbGwgPT0gRl9MT1dfUENJXzY2KQorCQlpbmZvLT5mbGFncyB8PSBQQ0lfNjZNSFo7CisKIAkvKgogCSAqIG9ubHkgdHJ5IHRoZSBwbGwgaWYgd2UgZG9uJ3QgaGF2ZSBhIHRhYmxlIGZvciB0aGUgY2xvY2sKIAkgKiBzcGVlZCB0aGF0IHdlJ3JlIHJ1bm5pbmcgYXQuIE5PVEU6IHRoZSBpbnRlcm5hbCBQTEwgd2lsbApAQCAtMTI0OCwxMSArMTExNiw4IEBACiAJaW5mby0+ZmxhZ3MgfD0gUExMX01PREU7CiAJCiAJLyoKLQkgKiBGSVhNRTogbWFrZSB0aGlzIHdvcmsgY29ycmVjdGx5LCBlc3Agd2l0aCAzNzJOIGFzIHBlcgotCSAqIHJlZmVyZW5jZSBkcml2ZXIgY29kZS4KLQkgKgotCSAqIGFkanVzdCBQTEwgYmFzZWQgdXBvbiBQQ0kgY2xvY2ssIGVuYWJsZSBpdCwgYW5kIHdhaXQgZm9yCi0JICogc3RhYmlsaXphdGlvbi4KKwkgKiBBZGp1c3QgdGhlIFBMTCBiYXNlZCB1cG9uIHRoZSBQQ0kgY2xvY2ssIGVuYWJsZSBpdCwgYW5kCisJICogd2FpdCBmb3Igc3RhYmlsaXphdGlvbi4uLgogCSAqLwogCWFkanVzdCA9IDA7CiAJZnJlcSA9IChwbGwgPCBGX0xPV19QQ0lfNTApID8gMiA6IDQ7CkBAIC0xMjc1LDIyICsxMTQwLDEyIEBACiAJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NWMsIAogCQkJCQkJICAgICAgIHBsbCAmIH4weDEwMCk7CiAJCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1YiwgMHgyMSk7Ci0JCQkJaWYgKGluZm8tPnJldmlzaW9uID49IDgpCi0JCQkJCWluZm8tPnNwZWVkID0gZmlmdHlfYmFzZV9ocHQzNzBhOwotCQkJCWVsc2UgaWYgKGluZm8tPnJldmlzaW9uID49IDUpCi0JCQkJCWluZm8tPnNwZWVkID0gZmlmdHlfYmFzZV9ocHQzNzI7Ci0JCQkJZWxzZSBpZiAoaW5mby0+cmV2aXNpb24gPj0gNCkKLQkJCQkJaW5mby0+c3BlZWQgPSBmaWZ0eV9iYXNlX2hwdDM3MGE7Ci0JCQkJZWxzZQotCQkJCQlpbmZvLT5zcGVlZCA9IGZpZnR5X2Jhc2VfaHB0MzcwYTsKKworCQkJCWluZm8tPnNwZWVkID0gZmlmdHlfYmFzZV9ocHQzN3g7CiAJCQkJcHJpbnRrKCJIUFQzN1g6IHVzaW5nIDUwTUh6IGludGVybmFsIFBMTFxuIik7CiAJCQkJZ290byBpbml0X2hwdDM3WF9kb25lOwogCQkJfQogCQl9Ci0JCWlmICghcGNpX2dldF9kcnZkYXRhKGRldikpIHsKLQkJCXByaW50aygiTm8gQ2xvY2sgU3RhYmlsaXphdGlvbiEhIVxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KIHBsbF9yZWNhbDoKIAkJaWYgKGFkanVzdCAmIDEpCiAJCQlwbGwgLT0gKGFkanVzdCA+PiAxKTsKQEAgLTEzMDAsMTEgKzExNTUsMTYgQEAKIAogaW5pdF9ocHQzN1hfZG9uZToKIAlpZiAoIWluZm8tPnNwZWVkKQotCQlwcmludGsoS0VSTl9FUlIgIkhQVDM3WCVzOiB1bmtub3duIGJ1cyB0aW1pbmcgWyVkICVkXS5cbiIsCi0JCQkoaW5mby0+ZmxhZ3MgJiBJU18zNzJOKT8iTiI6IiIsIHBsbCwgZnJlcSk7Ci0JLyogcmVzZXQgc3RhdGUgZW5naW5lICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgMHgzNyk7IAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTQsIDB4MzcpOyAKKwkJcHJpbnRrKEtFUk5fRVJSICJIUFQzN3glczogdW5rbm93biBidXMgdGltaW5nIFslZCAlZF0uXG4iLAorCQkgICAgICAgKGluZm8tPmZsYWdzICYgSVNfM3h4TikgPyAiTiIgOiAiIiwgcGxsLCBmcmVxKTsKKwkvKgorCSAqIFJlc2V0IHRoZSBzdGF0ZSBlbmdpbmVzLgorCSAqIE5PVEU6IGF2b2lkIGFjY2lkZW50YWxseSBlbmFibGluZyB0aGUgcHJpbWFyeSBjaGFubmVsIG9uIEhQVDM3MU4uCisJICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmbWNyMSk7CisJaWYgKG1jcjEgJiAweDA0KQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAweDM3KTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDU0LCAweDM3KTsKIAl1ZGVsYXkoMTAwKTsKIH0KIApAQCAtMTM2Nyw2ICsxMjI3LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CQk9IGh3aWYtPnBjaV9kZXY7CiAJc3RydWN0IGhwdF9pbmZvICppbmZvCQk9IGlkZV9nZXRfaHdpZmRhdGEoaHdpZik7CiAJdTggYXRhNjYgPSAwLCByZWdtYXNrCQk9IChod2lmLT5jaGFubmVsKSA/IDB4MDEgOiAweDAyOworCWludCBzZXJpYWxpemUJCQk9IEhQVF9TRVJJQUxJWkVfSU87CiAJCiAJaHdpZi0+dHVuZXByb2MJCQk9ICZocHQzeHhfdHVuZV9kcml2ZTsKIAlod2lmLT5zcGVlZHByb2MJCQk9ICZocHQzeHhfdHVuZV9jaGlwc2V0OwpAQCAtMTM3NCw4ICsxMjM1LDIwIEBACiAJaHdpZi0+aW50cnByb2MJCQk9ICZocHQzeHhfaW50cnByb2M7CiAJaHdpZi0+bWFza3Byb2MJCQk9ICZocHQzeHhfbWFza3Byb2M7CiAJCi0JaWYoaW5mby0+ZmxhZ3MgJiBJU18zNzJOKQotCQlod2lmLT5yd19kaXNrID0gJmhwdDM3Mm5fcndfZGlzazsKKwkvKgorCSAqIEhQVDN4eE4gY2hpcHMgaGF2ZSBzb21lIGNvbXBsaWNhdGlvbnM6CisJICoKKwkgKiAtIG9uIDMzIE1IeiBQQ0kgd2UgbXVzdCBjbG9jayBzd2l0Y2gKKwkgKiAtIG9uIDY2IE1IeiBQQ0kgd2UgbXVzdCBOT1QgdXNlIHRoZSBQQ0kgY2xvY2sKKwkgKi8KKwlpZiAoKGluZm8tPmZsYWdzICYgKElTXzN4eE4gfCBQQ0lfNjZNSFopKSA9PSBJU18zeHhOKSB7CisJCS8qCisJCSAqIENsb2NrIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBjaGFubmVscywKKwkJICogc28gd2UnbGwgaGF2ZSB0byBzZXJpYWxpemUgdGhlbS4uLiA6LSgKKwkJICovCisJCXNlcmlhbGl6ZSA9IDE7CisJCWh3aWYtPnJ3X2Rpc2sgPSAmaHB0M3h4bl9yd19kaXNrOworCX0KIAogCS8qCiAJICogVGhlIEhQVDM3eCB1c2VzIHRoZSBDQkxJRCBwaW5zIGFzIG91dHB1dHMgZm9yIE1BMTUvTUExNgpAQCAtMTQxOCwyOSArMTI5MSwxNSBAQAogCQlQQ0lfRlVOQyhod2lmLT5wY2lfZGV2LT5kZXZmbikpOwogI2VuZGlmIC8qIERFQlVHICovCiAKLSNpZmRlZiBIUFRfU0VSSUFMSVpFX0lPCi0JLyogc2VyaWFsaXplIGFjY2VzcyB0byB0aGlzIGRldmljZSAqLwotCWlmIChod2lmLT5tYXRlKQorCS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhpcyBkZXZpY2UgKi8KKwlpZiAoc2VyaWFsaXplICYmIGh3aWYtPm1hdGUpCiAJCWh3aWYtPnNlcmlhbGl6ZWQgPSBod2lmLT5tYXRlLT5zZXJpYWxpemVkID0gMTsKLSNlbmRpZgogCi0JaWYgKGluZm8tPnJldmlzaW9uID49IDMpIHsKLQkJdTggcmVnNWFoID0gMDsKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NWEsIHJlZzVhaCAmIH4weDEwKTsKLQkJLyoKLQkJICogc2V0IHVwIGlvY3RsIGZvciBwb3dlciBzdGF0dXMuCi0JCSAqIG5vdGU6IHBvd2VyIGFmZmVjdHMgYm90aAotCQkgKiBkcml2ZXMgb24gZWFjaCBjaGFubmVsCi0JCSAqLwotCQlod2lmLT5yZXNldHByb2MJPSAmaHB0M3h4X3Jlc2V0OwotCQlod2lmLT5idXNwcm9jCT0gJmhwdDM3MF9idXNwcm9jOwotCX0gZWxzZSBpZiAoaW5mby0+cmV2aXNpb24gPj0gMikgewotCQlod2lmLT5yZXNldHByb2MJPSAmaHB0M3h4X3Jlc2V0OwotCQlod2lmLT5idXNwcm9jCT0gJmhwdDN4eF90cmlzdGF0ZTsKLQl9IGVsc2UgewotCQlod2lmLT5yZXNldHByb2MgPSAmaHB0M3h4X3Jlc2V0OwotCQlod2lmLT5idXNwcm9jICAgPSAmaHB0M3h4X3RyaXN0YXRlOwotCX0KKwkvKgorCSAqIFNldCB1cCBpb2N0bCBmb3IgcG93ZXIgc3RhdHVzLgorCSAqIE5PVEU6ICBwb3dlciBhZmZlY3RzIGJvdGggZHJpdmVzIG9uIGVhY2ggY2hhbm5lbC4KKwkgKi8KKwlod2lmLT5idXNwcm9jID0gJmhwdDN4eF9idXNwcm9jOwogCiAJaWYgKCFod2lmLT5kbWFfYmFzZSkgewogCQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOwpAQCAtMTQ5MCw3ICsxMzQ5LDcgQEAKIAkJcmV0dXJuOwogCQkKIAlpZihpbmZvLT5zcGVlZCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImhwdDogbm8ga25vd24gSURFIHRpbWluZ3MsIGRpc2FibGluZyBETUEuXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHB0MzY2OiBubyBrbm93biBJREUgdGltaW5ncywgZGlzYWJsaW5nIERNQS5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNTE5LDkgKzEzNzgsMTAgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaW9wc19ocHQzNjYoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlzdHJ1Y3QgaHB0X2luZm8gKmluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaHB0X2luZm8pLCBHRlBfS0VSTkVMKTsKLQl1bnNpZ25lZCBsb25nIGRtYWJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoaHdpZi0+cGNpX2RldiwgNCk7Ci0JdTggZGlkLCByaWQ7CisJc3RydWN0IGhwdF9pbmZvICppbmZvCT0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhwdF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHBjaV9kZXYgICpkZXYJPSBod2lmLT5wY2lfZGV2OworCXUxNiBkaWQJCQk9IGRldi0+ZGV2aWNlOworCXU4ICByaWQJCQk9IDA7CiAKIAlpZihpbmZvID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHB0MzY2OiBvdXQgb2YgbWVtb3J5LlxuIik7CkBAIC0xNTI5LDE1ICsxMzg5LDIyIEBACiAJfQogCWlkZV9zZXRfaHdpZmRhdGEoaHdpZiwgaW5mbyk7CiAKLQlpZihkbWFiYXNlKSB7Ci0JCWRpZCA9IGluYihkbWFiYXNlICsgMHgyMik7Ci0JCXJpZCA9IGluYihkbWFiYXNlICsgMHgyOCk7Ci0KLQkJaWYoKGRpZCA9PSA0ICYmIHJpZCA9PSA2KSB8fCAoZGlkID09IDUgJiYgcmlkID4gMSkpCi0JCQlpbmZvLT5mbGFncyB8PSBJU18zNzJOOworCS8qIEF2b2lkIGRvaW5nIHRoZSBzYW1lIHRoaW5nIHR3aWNlLiAqLworCWlmIChod2lmLT5jaGFubmVsICYmIGh3aWYtPm1hdGUpIHsKKwkJbWVtY3B5KGluZm8sIGlkZV9nZXRfaHdpZmRhdGEoaHdpZi0+bWF0ZSksIHNpemVvZihzdHJ1Y3QgaHB0X2luZm8pKTsKKwkJcmV0dXJuOwogCX0KIAotCWluZm8tPnJldmlzaW9uID0gaHB0X3JldmlzaW9uKGh3aWYtPnBjaV9kZXYpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmcmlkKTsKKworCWlmICgoIGRpZCA9PSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNjYgICYmIHJpZCA9PSA2KSB8fAorCSAgICAoKGRpZCA9PSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzIgIHx8CisJICAgICAgZGlkID09IFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMiAgfHwKKwkgICAgICBkaWQgPT0gUENJX0RFVklDRV9JRF9UVElfSFBUMzcxKSAmJiByaWQgPiAxKSB8fAorCSAgICAgIGRpZCA9PSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzJOKQorCQlpbmZvLT5mbGFncyB8PSBJU18zeHhOOworCisJaW5mby0+cmV2aXNpb24gPSBocHRfcmV2aXNpb24oZGV2KTsKIAogCWlmIChpbmZvLT5yZXZpc2lvbiA+PSAzKQogCQlocHQzN3hfY2xvY2tpbmcoaHdpZik7CkBAIC0xNTc0LDYgKzE0NDEsMjMgQEAKIAlyZXR1cm4gaWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCBkKTsKIH0KIAorc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9zZXR1cF9ocHQzNzEoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCkKK3sKKwl1OCBtY3IxID0gMDsKKworCS8qCisJICogSFBUMzcxIGNoaXBzIHBoeXNpY2FsbHkgaGF2ZSBvbmx5IG9uZSBjaGFubmVsLCB0aGUgc2Vjb25kYXJ5IG9uZSwKKwkgKiBidXQgdGhlIHByaW1hcnkgY2hhbm5lbCByZWdpc3RlcnMgZG8gZXhpc3QhICBHbyBmaWd1cmUuLi4KKwkgKiBTbywgIHdlIG1hbnVhbGx5IGRpc2FibGUgdGhlIG5vbi1leGlzdGluZyBjaGFubmVsIGhlcmUKKwkgKiAoaWYgdGhlIEJJT1MgaGFzbid0IGRvbmUgdGhpcyBhbHJlYWR5KS4KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTAsICZtY3IxKTsKKwlpZiAobWNyMSAmIDB4MDQpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIChtY3IxICYgfjB4MDQpKTsKKworCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3NldHVwX2hwdDM2NihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQogewogCXN0cnVjdCBwY2lfZGV2ICpmaW5kZXYgPSBOVUxMOwpAQCAtMTY2MSwxMyArMTU0NSwxNCBAQAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCiAJfSx7CS8qIDMgKi8KIAkJLm5hbWUJCT0gIkhQVDM3MSIsCi0JCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9ocHQzN3gsCisJCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9ocHQzNzEsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfaHB0MzY2LAogCQkuaW5pdF9pb3BzCT0gaW5pdF9pb3BzX2hwdDM2NiwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9ocHQzNjYsCiAJCS5pbml0X2RtYQk9IGluaXRfZG1hX2hwdDM2NiwKIAkJLmNoYW5uZWxzCT0gMiwKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAorCQkuZW5hYmxlYml0cwk9IHt7MHg1MCwweDA0LDB4MDR9LCB7MHg1NCwweDA0LDB4MDR9fSwKIAkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCX0sewkvKiA0ICovCiAJCS5uYW1lCQk9ICJIUFQzNzQiLApAQCAtMTY5OSwxMyArMTU4NCwxNiBAQAogICoKICAqCUNhbGxlZCB3aGVuIHRoZSBQQ0kgcmVnaXN0cmF0aW9uIGxheWVyIChvciB0aGUgSURFIGluaXRpYWxpemF0aW9uKQogICoJZmluZHMgYSBkZXZpY2UgbWF0Y2hpbmcgb3VyIElERSBkZXZpY2UgdGFibGVzLgorICoKKyAqCU5PVEU6IHNpbmNlIHdlJ2xsIGhhdmUgdG8gbW9kaWZ5IHNvbWUgZmllbGRzIG9mIHRoZSBpZGVfcGNpX2RldmljZV90CisgKglzdHJ1Y3R1cmUgZGVwZW5kaW5nIG9uIHRoZSBjaGlwJ3MgcmV2aXNpb24sIHdlJ2QgYmV0dGVyIHBhc3MgYSBsb2NhbAorICoJY29weSBkb3duIHRoZSBjYWxsIGNoYWluLi4uCiAgKi8KLSAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGhwdDM2Nl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JaWRlX3BjaV9kZXZpY2VfdCAqZCA9ICZocHQzNjZfY2hpcHNldHNbaWQtPmRyaXZlcl9kYXRhXTsKKwlpZGVfcGNpX2RldmljZV90IGQgPSBocHQzNjZfY2hpcHNldHNbaWQtPmRyaXZlcl9kYXRhXTsKIAotCXJldHVybiBkLT5pbml0X3NldHVwKGRldiwgZCk7CisJcmV0dXJuIGQuaW5pdF9zZXR1cChkZXYsICZkKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdDM2Nl9wY2lfdGJsW10gPSB7CkBAIC0xNzI1LDcgKzE2MTMsNyBAQAogCS5wcm9iZQkJPSBocHQzNjZfaW5pdF9vbmUsCiB9OwogCi1zdGF0aWMgaW50IGhwdDM2Nl9pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaHB0MzY2X2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2ptaWNyb24uYyBiL2RyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMKaW5kZXggYzFjZWMyMy4uZjA3YmJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2ptaWNyb24uYworKysgYi9kcml2ZXJzL2lkZS9wY2kvam1pY3Jvbi5jCkBAIC04NiwxNSArODYsMTYgQEAKIAl7CiAJY2FzZSBQT1JUX1BBVEEwOgogCQlpZiAoY29udHJvbCAmICgxIDw8IDMpKQkvKiA0MC84MCBwaW4gcHJpbWFyeSAqLwotCQkJcmV0dXJuIDE7Ci0JCXJldHVybiAwOworCQkJcmV0dXJuIDA7CisJCXJldHVybiAxOwogCWNhc2UgUE9SVF9QQVRBMToKIAkJaWYgKGNvbnRyb2w1ICYgKDEgPDwgMTkpKQkvKiA0MC84MCBwaW4gc2Vjb25kYXJ5ICovCiAJCQlyZXR1cm4gMDsKIAkJcmV0dXJuIDE7CiAJY2FzZSBQT1JUX1NBVEE6Ci0JCXJldHVybiAxOworCQlicmVhazsKIAl9CisJcmV0dXJuIDE7IC8qIEF2b2lkIGJvZ3VzICJjb250cm9sIHJlYWNoZXMgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uIiAqLwogfQogCiBzdGF0aWMgdm9pZCBqbWljcm9uX3R1bmVwcm9jIChpZGVfZHJpdmVfdCAqZHJpdmUsIGJ5dGUgbW9kZV93YW50ZWQpCkBAIC0yNDAsMTEgKzI0MSwxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgam1pY3Jvbl9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MSksIDB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjMpLCAxfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY1KSwgMn0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NiksIDN9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjgpLCA0fSwKKwl7IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJeyBQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDF9LAorCXsgUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyfSwKKwl7IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgM30sCisJeyBQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDR9LAogCXsgMCwgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMgYi9kcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jCmluZGV4IGQ5NTcxNGIuLjhhYWVhNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJLnByb2JlCQk9IG5zODc0MTVfaW5pdF9vbmUsCiB9OwogCi1zdGF0aWMgaW50IG5zODc0MTVfaWRlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG5zODc0MTVfaWRlX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvb3B0aTYyMS5jIGIvZHJpdmVycy9pZGUvcGNpL29wdGk2MjEuYwppbmRleCA3YTdjMmVmLi4yMmJiZjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvb3B0aTYyMS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9vcHRpNjIxLmMKQEAgLTM4Miw3ICszODIsNyBAQAogCS5wcm9iZQkJPSBvcHRpNjIxX2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCBvcHRpNjIxX2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvcHRpNjIxX2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jCmluZGV4IDZjMDk3ZTguLjc3YTlhYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9uZXcuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfbmV3LmMKQEAgLTksNiArOSw3IEBACiAgKiAgU3BsaXQgZnJvbToKICAqICBsaW51eC9kcml2ZXJzL2lkZS9wZGMyMDJ4eC5jCVZlcnNpb24gMC4zNQlNYXIuIDMwLCAyMDAyCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDIJCUFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYJCU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqICBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTkgUHJvbWlzZSBUZWNobm9sb2d5LCBJbmMuCiAgKiAgQXV0aG9yOiBGcmFuayBUaWVybmFuIChmcmFua3RAcHJvbWlzZS5jb20pCiAgKiAgUmVsZWFzZWQgdW5kZXIgdGVybXMgb2YgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzgsNiArMzksMTQgQEAKIAogI2RlZmluZSBQREMyMDJfREVCVUdfQ0FCTEUJMAogCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pIHByaW50aygiJXM6ICIgZm10LCBfX0ZVTkNUSU9OX18sICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKQorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBjaGFyICpwZGNfcXVpcmtfZHJpdmVzW10gPSB7CiAJIlFVQU5UVU0gRklSRUJBTExsY3QwOCAwOCIsCiAJIlFVQU5UVU0gRklSRUJBTExQIEtBNi40IiwKQEAgLTUwLDM3ICs1OSwxMSBAQAogCU5VTEwKIH07CiAKLSNkZWZpbmUgc2V0XzJyZWdzKGEsIGIpCQkJCQlcCi0JZG8gewkJCQkJCVwKLQkJaHdpZi0+T1VUQigoYSArIGFkaiksIGluZGV4cmVnKTsJXAotCQlod2lmLT5PVVRCKGIsIGRhdGFyZWcpOwkJCVwKLQl9IHdoaWxlKDApCi0KLSNkZWZpbmUgc2V0X3VsdHJhKGEsIGIsIGMpCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlzZXRfMnJlZ3MoMHgxMCwoYSkpOwkJCVwKLQkJc2V0XzJyZWdzKDB4MTEsKGIpKTsJCQlcCi0JCXNldF8ycmVncygweDEyLChjKSk7CQkJXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBzZXRfYXRhMihhLCBiKQkJCQkJXAotCWRvIHsJCQkJCQlcCi0JCXNldF8ycmVncygweDBlLChhKSk7CQkJXAotCQlzZXRfMnJlZ3MoMHgwZiwoYikpOwkJCVwKLQl9IHdoaWxlKDApCi0KLSNkZWZpbmUgc2V0X3BpbyhhLCBiLCBjKQkJCQlcCi0JZG8geyAJCQkJCQlcCi0JCXNldF8ycmVncygweDBjLChhKSk7CQkJXAotCQlzZXRfMnJlZ3MoMHgwZCwoYikpOwkJCVwKLQkJc2V0XzJyZWdzKDB4MTMsKGMpKTsJCQlcCi0JfSB3aGlsZSgwKQotCi1zdGF0aWMgdTggcGRjbmV3X3JhdGVtYXNrIChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdTggbWF4X2RtYV9yYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXU4IG1vZGU7CiAKLQlzd2l0Y2goSFdJRihkcml2ZSktPnBjaV9kZXYtPmRldmljZSkgeworCXN3aXRjaChwZGV2LT5kZXZpY2UpIHsKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzc6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjc2OgogCQljYXNlIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3NToKQEAgLTk1LDEyICs3OCwyMSBAQAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIDA7CiAJfQotCWlmICghZWlnaHR5X25pbnR5X3RocmVlKGRyaXZlKSkKLQkJbW9kZSA9IG1pbihtb2RlLCAodTgpMSk7CisKIAlyZXR1cm4gbW9kZTsKIH0KIAotc3RhdGljIGludCBjaGVja19pbl9kcml2ZV9saXN0cyAoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICoqbGlzdCkKK3N0YXRpYyB1OCBwZGNuZXdfcmF0ZW1hc2soaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXU4IG1vZGUgPSBtYXhfZG1hX3JhdGUoSFdJRihkcml2ZSktPnBjaV9kZXYpOworCisJaWYgKCFlaWdodHlfbmludHlfdGhyZWUoZHJpdmUpKQorCQltb2RlID0gbWluX3QodTgsIG1vZGUsIDEpOworCisJcmV0dXJuCW1vZGU7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaW5fZHJpdmVfbGlzdHMoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICoqbGlzdCkKIHsKIAlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQgPSBkcml2ZS0+aWQ7CiAKQEAgLTEyMCw0MyArMTEyLDE0MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBkY25ld19uZXdfdHVuZV9jaGlwc2V0IChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHhmZXJzcGVlZCkKKy8qKgorICogZ2V0X2luZGV4ZWRfcmVnIC0gR2V0IGluZGV4ZWQgcmVnaXN0ZXIKKyAqIEBod2lmOiBmb3IgdGhlIHBvcnQgYWRkcmVzcworICogQGluZGV4OiBpbmRleCBvZiB0aGUgaW5kZXhlZCByZWdpc3RlcgorICovCitzdGF0aWMgdTggZ2V0X2luZGV4ZWRfcmVnKGlkZV9od2lmX3QgKmh3aWYsIHU4IGluZGV4KQoreworCXU4IHZhbHVlOworCisJaHdpZi0+T1VUQihpbmRleCwgaHdpZi0+ZG1hX3ZlbmRvcjEpOworCXZhbHVlID0gaHdpZi0+SU5CKGh3aWYtPmRtYV92ZW5kb3IzKTsKKworCURCRygiaW5kZXhbJTAyWF0gdmFsdWVbJTAyWF1cbiIsIGluZGV4LCB2YWx1ZSk7CisJcmV0dXJuIHZhbHVlOworfQorCisvKioKKyAqIHNldF9pbmRleGVkX3JlZyAtIFNldCBpbmRleGVkIHJlZ2lzdGVyCisgKiBAaHdpZjogZm9yIHRoZSBwb3J0IGFkZHJlc3MKKyAqIEBpbmRleDogaW5kZXggb2YgdGhlIGluZGV4ZWQgcmVnaXN0ZXIKKyAqLworc3RhdGljIHZvaWQgc2V0X2luZGV4ZWRfcmVnKGlkZV9od2lmX3QgKmh3aWYsIHU4IGluZGV4LCB1OCB2YWx1ZSkKK3sKKwlod2lmLT5PVVRCKGluZGV4LCBod2lmLT5kbWFfdmVuZG9yMSk7CisJaHdpZi0+T1VUQih2YWx1ZSwgaHdpZi0+ZG1hX3ZlbmRvcjMpOworCURCRygiaW5kZXhbJTAyWF0gdmFsdWVbJTAyWF1cbiIsIGluZGV4LCB2YWx1ZSk7Cit9CisKKy8qCisgKiBBVEEgVGltaW5nIFRhYmxlcyBiYXNlZCBvbiAxMzMgTUh6IFBMTCBvdXRwdXQgY2xvY2suCisgKgorICogSWYgdGhlIFBMTCBvdXRwdXRzIDEwMCBNSHogY2xvY2ssIHRoZSBBU0lDIGhhcmR3YXJlIHdpbGwgc2V0CisgKiB0aGUgdGltaW5nIHJlZ2lzdGVycyBhdXRvbWF0aWNhbGx5IHdoZW4gInNldCBmZWF0dXJlcyIgY29tbWFuZCBpcworICogaXNzdWVkIHRvIHRoZSBkZXZpY2UuIEhvd2V2ZXIsIGlmIHRoZSBQTEwgb3V0cHV0IGNsb2NrIGlzIDEzMyBNSHosCisgKiB0aGUgZm9sbG93aW5nIHRhYmxlcyBtdXN0IGJlIHVzZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGlvX3RpbWluZyB7CisJdTggcmVnMGMsIHJlZzBkLCByZWcxMzsKK30gcGlvX3RpbWluZ3MgW10gPSB7CisJeyAweGZiLCAweDJiLCAweGFjIH0sCS8qIFBJTyBtb2RlIDAsIElPUkRZIG9mZiwgUHJlZmV0Y2ggb2ZmICovCisJeyAweDQ2LCAweDI5LCAweGE0IH0sCS8qIFBJTyBtb2RlIDEsIElPUkRZIG9mZiwgUHJlZmV0Y2ggb2ZmICovCisJeyAweDIzLCAweDI2LCAweDY0IH0sCS8qIFBJTyBtb2RlIDIsIElPUkRZIG9mZiwgUHJlZmV0Y2ggb2ZmICovCisJeyAweDI3LCAweDBkLCAweDM1IH0sCS8qIFBJTyBtb2RlIDMsIElPUkRZIG9uLCAgUHJlZmV0Y2ggb2ZmICovCisJeyAweDIzLCAweDA5LCAweDI1IH0sCS8qIFBJTyBtb2RlIDQsIElPUkRZIG9uLCAgUHJlZmV0Y2ggb2ZmICovCit9OworCitzdGF0aWMgc3RydWN0IG13ZG1hX3RpbWluZyB7CisJdTggcmVnMGUsIHJlZzBmOworfSBtd2RtYV90aW1pbmdzIFtdID0geworCXsgMHhkZiwgMHg1ZiB9LCAJLyogTVdETUEgbW9kZSAwICovCisJeyAweDZiLCAweDI3IH0sIAkvKiBNV0RNQSBtb2RlIDEgKi8KKwl7IDB4NjksIDB4MjUgfSwgCS8qIE1XRE1BIG1vZGUgMiAqLworfTsKKworc3RhdGljIHN0cnVjdCB1ZG1hX3RpbWluZyB7CisJdTggcmVnMTAsIHJlZzExLCByZWcxMjsKK30gdWRtYV90aW1pbmdzIFtdID0geworCXsgMHg0YSwgMHgwZiwgMHhkNSB9LAkvKiBVRE1BIG1vZGUgMCAqLworCXsgMHgzYSwgMHgwYSwgMHhkMCB9LAkvKiBVRE1BIG1vZGUgMSAqLworCXsgMHgyYSwgMHgwNywgMHhjZCB9LAkvKiBVRE1BIG1vZGUgMiAqLworCXsgMHgxYSwgMHgwNSwgMHhjZCB9LAkvKiBVRE1BIG1vZGUgMyAqLworCXsgMHgxYSwgMHgwMywgMHhjZCB9LAkvKiBVRE1BIG1vZGUgNCAqLworCXsgMHgxYSwgMHgwMiwgMHhjYiB9LAkvKiBVRE1BIG1vZGUgNSAqLworCXsgMHgxYSwgMHgwMSwgMHhjYiB9LAkvKiBVRE1BIG1vZGUgNiAqLworfTsKKworc3RhdGljIGludCBwZGNuZXdfdHVuZV9jaGlwc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXVuc2lnbmVkIGxvbmcgaW5kZXhyZWcJPSBod2lmLT5kbWFfdmVuZG9yMTsKLQl1bnNpZ25lZCBsb25nIGRhdGFyZWcJPSBod2lmLT5kbWFfdmVuZG9yMzsKLQl1OCB0aG9sZAkJPSAweDEwOwotCXU4IGFkagkJCT0gKGRyaXZlLT5kbiUyKSA/IDB4MDggOiAweDAwOwotCXU4IHNwZWVkCQk9IGlkZV9yYXRlX2ZpbHRlcihwZGNuZXdfcmF0ZW1hc2soZHJpdmUpLCB4ZmVyc3BlZWQpOworCXU4IGFkagkJCT0gKGRyaXZlLT5kbiAmIDEpID8gMHgwOCA6IDB4MDA7CisJaW50CQkJZXJyOwogCi0JaWYgKHNwZWVkID09IFhGRVJfVURNQV8yKSB7Ci0JCWh3aWYtPk9VVEIoKHRob2xkICsgYWRqKSwgaW5kZXhyZWcpOwotCQlod2lmLT5PVVRCKChod2lmLT5JTkIoZGF0YXJlZykgJiAweDdmKSwgZGF0YXJlZyk7Ci0JfQorCXNwZWVkID0gaWRlX3JhdGVfZmlsdGVyKHBkY25ld19yYXRlbWFzayhkcml2ZSksIHNwZWVkKTsKIAotCXN3aXRjaCAoc3BlZWQpIHsKLQkJY2FzZSBYRkVSX1VETUFfNzoKLQkJCXNwZWVkID0gWEZFUl9VRE1BXzY7Ci0JCWNhc2UgWEZFUl9VRE1BXzY6CXNldF91bHRyYSgweDFhLCAweDAxLCAweGNiKTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9VRE1BXzU6CXNldF91bHRyYSgweDFhLCAweDAyLCAweGNiKTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9VRE1BXzQ6CXNldF91bHRyYSgweDFhLCAweDAzLCAweGNkKTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9VRE1BXzM6CXNldF91bHRyYSgweDFhLCAweDA1LCAweGNkKTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9VRE1BXzI6CXNldF91bHRyYSgweDJhLCAweDA3LCAweGNkKTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9VRE1BXzE6CXNldF91bHRyYSgweDNhLCAweDBhLCAweGQwKTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9VRE1BXzA6CXNldF91bHRyYSgweDRhLCAweDBmLCAweGQ1KTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9NV19ETUFfMjoJc2V0X2F0YTIoMHg2OSwgMHgyNSk7IGJyZWFrOwotCQljYXNlIFhGRVJfTVdfRE1BXzE6CXNldF9hdGEyKDB4NmIsIDB4MjcpOyBicmVhazsKLQkJY2FzZSBYRkVSX01XX0RNQV8wOglzZXRfYXRhMigweGRmLCAweDVmKTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9QSU9fNDoJc2V0X3BpbygweDIzLCAweDA5LCAweDI1KTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9QSU9fMzoJc2V0X3BpbygweDI3LCAweDBkLCAweDM1KTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9QSU9fMjoJc2V0X3BpbygweDIzLCAweDI2LCAweDY0KTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9QSU9fMToJc2V0X3BpbygweDQ2LCAweDI5LCAweGE0KTsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9QSU9fMDoJc2V0X3BpbygweGZiLCAweDJiLCAweGFjKTsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQk7Ci0JfQorCS8qCisJICogSXNzdWUgU0VURkVBVFVSRVNfWEZFUiB0byB0aGUgZHJpdmUgZmlyc3QuIFBEQzIwMnh4IGhhcmR3YXJlIHdpbGwKKwkgKiBhdXRvbWF0aWNhbGx5IHNldCB0aGUgdGltaW5nIHJlZ2lzdGVycyBiYXNlZCBvbiAxMDAgTUh6IFBMTCBvdXRwdXQuCisJICovCisgCWVyciA9IGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIHNwZWVkKTsKIAotCXJldHVybiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgc3BlZWQpKTsKKwkvKgorCSAqIEFzIHdlIHNldCB1cCB0aGUgUExMIHRvIG91dHB1dCAxMzMgTUh6IGZvciBVbHRyYURNQS8xMzMgY2FwYWJsZQorCSAqIGNoaXBzLCB3ZSBtdXN0IG92ZXJyaWRlIHRoZSBkZWZhdWx0IHJlZ2lzdGVyIHNldHRpbmdzLi4uCisJICovCisJaWYgKG1heF9kbWFfcmF0ZShod2lmLT5wY2lfZGV2KSA9PSA0KSB7CisJCXU4IG1vZGUgPSBzcGVlZCAmIDB4MDc7CisKKwkJc3dpdGNoIChzcGVlZCkgeworCQkJY2FzZSBYRkVSX1VETUFfNjoKKwkJCWNhc2UgWEZFUl9VRE1BXzU6CisJCQljYXNlIFhGRVJfVURNQV80OgorCQkJY2FzZSBYRkVSX1VETUFfMzoKKwkJCWNhc2UgWEZFUl9VRE1BXzI6CisJCQljYXNlIFhGRVJfVURNQV8xOgorCQkJY2FzZSBYRkVSX1VETUFfMDoKKwkJCQlzZXRfaW5kZXhlZF9yZWcoaHdpZiwgMHgxMCArIGFkaiwKKwkJCQkJCXVkbWFfdGltaW5nc1ttb2RlXS5yZWcxMCk7CisJCQkJc2V0X2luZGV4ZWRfcmVnKGh3aWYsIDB4MTEgKyBhZGosCisJCQkJCQl1ZG1hX3RpbWluZ3NbbW9kZV0ucmVnMTEpOworCQkJCXNldF9pbmRleGVkX3JlZyhod2lmLCAweDEyICsgYWRqLAorCQkJCQkJdWRtYV90aW1pbmdzW21vZGVdLnJlZzEyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBYRkVSX01XX0RNQV8yOgorCQkJY2FzZSBYRkVSX01XX0RNQV8xOgorCQkJY2FzZSBYRkVSX01XX0RNQV8wOgorCQkJCXNldF9pbmRleGVkX3JlZyhod2lmLCAweDBlICsgYWRqLAorCQkJCQkJbXdkbWFfdGltaW5nc1ttb2RlXS5yZWcwZSk7CisJCQkJc2V0X2luZGV4ZWRfcmVnKGh3aWYsIDB4MGYgKyBhZGosCisJCQkJCQltd2RtYV90aW1pbmdzW21vZGVdLnJlZzBmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgWEZFUl9QSU9fNDoKKwkJCWNhc2UgWEZFUl9QSU9fMzoKKwkJCWNhc2UgWEZFUl9QSU9fMjoKKwkJCWNhc2UgWEZFUl9QSU9fMToKKwkJCWNhc2UgWEZFUl9QSU9fMDoKKwkJCQlzZXRfaW5kZXhlZF9yZWcoaHdpZiwgMHgwYyArIGFkaiwKKwkJCQkJCXBpb190aW1pbmdzW21vZGVdLnJlZzBjKTsKKwkJCQlzZXRfaW5kZXhlZF9yZWcoaHdpZiwgMHgwZCArIGFkaiwKKwkJCQkJCXBpb190aW1pbmdzW21vZGVdLnJlZzBkKTsKKwkJCQlzZXRfaW5kZXhlZF9yZWcoaHdpZiwgMHgxMyArIGFkaiwKKwkJCQkJCXBpb190aW1pbmdzW21vZGVdLnJlZzEzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKEtFUk5fRVJSICJwZGMyMDJ4eF9uZXc6ICIKKwkJCQkgICAgICAgIlVua25vd24gc3BlZWQgJWQgaWdub3JlZFxuIiwgc3BlZWQpOworCQl9CisJfSBlbHNlIGlmIChzcGVlZCA9PSBYRkVSX1VETUFfMikgeworCQkvKiBTZXQgdEhPTEQgYml0IHRvIDAgaWYgdXNpbmcgVURNQSBtb2RlIDIgKi8KKwkJdTggdG1wID0gZ2V0X2luZGV4ZWRfcmVnKGh3aWYsIDB4MTAgKyBhZGopOworCisJCXNldF9pbmRleGVkX3JlZyhod2lmLCAweDEwICsgYWRqLCB0bXAgJiAweDdmKTsKKyAJfQorCisJcmV0dXJuIGVycjsKIH0KIAogLyogICAwICAgIDEgICAgMiAgICAzICAgIDQgICAgNSAgICA2ICAgNyAgIDgKQEAgLTE2OCw1NSArMjU4LDU1IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBkY25ld190dW5lX2RyaXZlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcGlvKQogewotCXU4IHNwZWVkOwotCi0JaWYgKHBpbyA9PSA1KSBwaW8gPSA0OwotCXNwZWVkID0gWEZFUl9QSU9fMCArIGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgMjU1LCBwaW8sIE5VTEwpOwotCi0JKHZvaWQpcGRjbmV3X25ld190dW5lX2NoaXBzZXQoZHJpdmUsIHNwZWVkKTsKKwlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIHBpbywgNCwgTlVMTCk7CisJKHZvaWQpcGRjbmV3X3R1bmVfY2hpcHNldChkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7CiB9CiAKLXN0YXRpYyB1OCBwZGNuZXdfbmV3X2NhYmxlX2RldGVjdCAoaWRlX2h3aWZfdCAqaHdpZikKK3N0YXRpYyB1OCBwZGNuZXdfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaHdpZi0+T1VUQigweDBiLCBod2lmLT5kbWFfdmVuZG9yMSk7Ci0JcmV0dXJuICgodTgpKChod2lmLT5JTkIoaHdpZi0+ZG1hX3ZlbmRvcjMpICYgMHgwNCkpKTsKKwlyZXR1cm4gZ2V0X2luZGV4ZWRfcmVnKGh3aWYsIDB4MGIpICYgMHgwNDsKIH0KLXN0YXRpYyBpbnQgY29uZmlnX2NoaXBzZXRfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQorCitzdGF0aWMgaW50IGNvbmZpZ19jaGlwc2V0X2Zvcl9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCBoZF9kcml2ZWlkICppZAk9IGRyaXZlLT5pZDsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdTggc3BlZWQJCT0gLTE7Ci0JdTggY2FibGU7Ci0KLQl1OCB1bHRyYV82NgkJPSAoKGlkLT5kbWFfdWx0cmEgJiAweDAwMTApIHx8Ci0JCQkJICAgKGlkLT5kbWFfdWx0cmEgJiAweDAwMDgpKSA/IDEgOiAwOwotCi0JY2FibGUgPSBwZGNuZXdfbmV3X2NhYmxlX2RldGVjdChod2lmKTsKKwl1OCB1bHRyYV82NgkJPSAoaWQtPmRtYV91bHRyYSAmIDB4MDA3OCkgPyAxIDogMDsKKwl1OCBjYWJsZQkJPSBwZGNuZXdfY2FibGVfZGV0ZWN0KGh3aWYpOworCXU4IHNwZWVkOwogCiAJaWYgKHVsdHJhXzY2ICYmIGNhYmxlKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6ICVzIGNoYW5uZWwgcmVxdWlyZXMgYW4gODAtcGluIGNhYmxlIGZvciBvcGVyYXRpb24uXG4iLCBod2lmLT5jaGFubmVsID8gIlNlY29uZGFyeSI6IlByaW1hcnkiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogJXMgY2hhbm5lbCAiCisJCSAgICAgICAicmVxdWlyZXMgYW4gODAtcGluIGNhYmxlIGZvciBvcGVyYXRpb24uXG4iLAorCQkgICAgICAgaHdpZi0+Y2hhbm5lbCA/ICJTZWNvbmRhcnkiIDogIlByaW1hcnkiKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgcmVkdWNlZCB0byBVbHRyYTMzIG1vZGUuXG4iLCBkcml2ZS0+bmFtZSk7CiAJfQogCiAJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykKIAkJcmV0dXJuIDA7Ci0JaWYgKGlkLT5jYXBhYmlsaXR5ICYgNCkgewkvKiBJT1JEWV9FTiAmIFBSRUZFVENIX0VOICovCi0JCWh3aWYtPk9VVEIoKDB4MTMgKyAoKGRyaXZlLT5kbiUyKSA/IDB4MDggOiAweDAwKSksIGh3aWYtPmRtYV92ZW5kb3IxKTsKLQkJaHdpZi0+T1VUQigoaHdpZi0+SU5CKGh3aWYtPmRtYV92ZW5kb3IzKXwweDAzKSwgaHdpZi0+ZG1hX3ZlbmRvcjMpOworCisJaWYgKGlkLT5jYXBhYmlsaXR5ICYgNCkgeworCQkvKgorCQkgKiBTZXQgSU9SRFlfRU4gJiBQUkVGRVRDSF9FTiAodGhpcyBzZWVtcyB0byBoYXZlCisJCSAqIE5PIHJlYWwgZWZmZWN0IHNpbmNlIHRoaXMgcmVnaXN0ZXIgaXMgcmVsb2FkZWQKKwkJICogYnkgaGFyZHdhcmUgd2hlbiB0aGUgdHJhbnNmZXIgbW9kZSBpcyBzZWxlY3RlZCkKKwkJICovCisJCXU4IHRtcCwgYWRqID0gKGRyaXZlLT5kbiAmIDEpID8gMHgwOCA6IDB4MDA7CisKKwkJdG1wID0gZ2V0X2luZGV4ZWRfcmVnKGh3aWYsIDB4MTMgKyBhZGopOworCQlzZXRfaW5kZXhlZF9yZWcoaHdpZiwgMHgxMyArIGFkaiwgdG1wIHwgMHgwMyk7CiAJfQogCiAJc3BlZWQgPSBpZGVfZG1hX3NwZWVkKGRyaXZlLCBwZGNuZXdfcmF0ZW1hc2soZHJpdmUpKTsKIAotCWlmICghKHNwZWVkKSkgewotCQlod2lmLT50dW5lcHJvYyhkcml2ZSwgNSk7CisJaWYgKCFzcGVlZCkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJKHZvaWQpIGh3aWYtPnNwZWVkcHJvYyhkcml2ZSwgc3BlZWQpOwogCXJldHVybiBpZGVfZG1hX2VuYWJsZShkcml2ZSk7CiB9CiAKLXN0YXRpYyBpbnQgcGRjbmV3X2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgcGRjbmV3X2NvbmZpZ19kcml2ZV94ZmVyX3JhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQJPSBkcml2ZS0+aWQ7CkBAIC0yMzQsMTYgKzMyNCwxNiBAQAogCiAJfSBlbHNlIGlmICgoaWQtPmNhcGFiaWxpdHkgJiA4KSB8fCAoaWQtPmZpZWxkX3ZhbGlkICYgMikpIHsKIGZhc3RfYXRhX3BpbzoKLQkJaHdpZi0+dHVuZXByb2MoZHJpdmUsIDUpOworCQlod2lmLT50dW5lcHJvYyhkcml2ZSwgMjU1KTsKIAkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwogCX0KIAkvKiBJT1JEWSBub3Qgc3VwcG9ydGVkICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGRjbmV3X3F1aXJrcHJvYyAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBwZGNuZXdfcXVpcmtwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlyZXR1cm4gKChpbnQpIGNoZWNrX2luX2RyaXZlX2xpc3RzKGRyaXZlLCBwZGNfcXVpcmtfZHJpdmVzKSk7CisJcmV0dXJuIGNoZWNrX2luX2RyaXZlX2xpc3RzKGRyaXZlLCBwZGNfcXVpcmtfZHJpdmVzKTsKIH0KIAogc3RhdGljIGludCBwZGNuZXdfaWRlX2RtYV9sb3N0aXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTI2MCwyMSArMzUwLDEwMCBAQAogCXJldHVybiBfX2lkZV9kbWFfdGltZW91dChkcml2ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBkY25ld19uZXdfcmVzZXQgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIHBkY25ld19yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJLyoKIAkgKiBEZWxldGVkIHRoaXMgYmVjYXVzZSBpdCBpcyByZWR1bmRhbnQgZnJvbSB0aGUgY2FsbGVyLgogCSAqLwotCXByaW50ayhLRVJOX1dBUk5JTkcgIlBEQzIwMlhYOiAlcyBjaGFubmVsIHJlc2V0LlxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICJwZGMyMDJ4eF9uZXc6ICVzIGNoYW5uZWwgcmVzZXQuXG4iLAogCQlIV0lGKGRyaXZlKS0+Y2hhbm5lbCA/ICJTZWNvbmRhcnkiIDogIlByaW1hcnkiKTsKIH0KIAorLyoqCisgKiByZWFkX2NvdW50ZXIgLSBSZWFkIHRoZSBieXRlIGNvdW50IHJlZ2lzdGVycworICogQGRtYV9iYXNlOiBmb3IgdGhlIHBvcnQgYWRkcmVzcworICovCitzdGF0aWMgbG9uZyBfX2RldmluaXQgcmVhZF9jb3VudGVyKHUzMiBkbWFfYmFzZSkKK3sKKwl1MzIgIHByaV9kbWFfYmFzZSA9IGRtYV9iYXNlLCBzZWNfZG1hX2Jhc2UgPSBkbWFfYmFzZSArIDB4MDg7CisJdTggICBjbnQwLCBjbnQxLCBjbnQyLCBjbnQzOworCWxvbmcgY291bnQgPSAwLCBsYXN0OworCWludCAgcmV0cnkgPSAzOworCisJZG8geworCQlsYXN0ID0gY291bnQ7CisKKwkJLyogUmVhZCB0aGUgY3VycmVudCBjb3VudCAqLworCQlvdXRiKDB4MjAsIHByaV9kbWFfYmFzZSArIDB4MDEpOworCQljbnQwID0gaW5iKHByaV9kbWFfYmFzZSArIDB4MDMpOworCQlvdXRiKDB4MjEsIHByaV9kbWFfYmFzZSArIDB4MDEpOworCQljbnQxID0gaW5iKHByaV9kbWFfYmFzZSArIDB4MDMpOworCQlvdXRiKDB4MjAsIHNlY19kbWFfYmFzZSArIDB4MDEpOworCQljbnQyID0gaW5iKHNlY19kbWFfYmFzZSArIDB4MDMpOworCQlvdXRiKDB4MjEsIHNlY19kbWFfYmFzZSArIDB4MDEpOworCQljbnQzID0gaW5iKHNlY19kbWFfYmFzZSArIDB4MDMpOworCisJCWNvdW50ID0gKGNudDMgPDwgMjMpIHwgKGNudDIgPDwgMTUpIHwgKGNudDEgPDwgOCkgfCBjbnQwOworCisJCS8qCisJCSAqIFRoZSAzMC1iaXQgZGVjcmVtZW50aW5nIGNvdW50ZXIgaXMgcmVhZCBpbiA0IHBpZWNlcy4KKwkJICogSW5jb3JyZWN0IHZhbHVlIG1heSBiZSByZWFkIHdoZW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZXMKKwkJICogYXJlIGNoYW5naW5nLi4uCisJCSAqLworCX0gd2hpbGUgKHJldHJ5LS0gJiYgKCgobGFzdCBeIGNvdW50KSAmIDB4M2ZmZjgwMDApIHx8IGxhc3QgPCBjb3VudCkpOworCisJREJHKCJjbnQwWyUwMlhdIGNudDFbJTAyWF0gY250MlslMDJYXSBjbnQzWyUwMlhdXG4iLAorCQkgIGNudDAsIGNudDEsIGNudDIsIGNudDMpOworCisJcmV0dXJuIGNvdW50OworfQorCisvKioKKyAqIGRldGVjdF9wbGxfaW5wdXRfY2xvY2sgLSBEZXRlY3QgdGhlIFBMTCBpbnB1dCBjbG9jayBpbiBIei4KKyAqIEBkbWFfYmFzZTogZm9yIHRoZSBwb3J0IGFkZHJlc3MKKyAqIEUuZy4gMTY5NDkwMDAgb24gMzMgTUh6IFBDSSBidXMsIGkuZS4gaGFsZiBvZiB0aGUgUENJIGNsb2NrLgorICovCitzdGF0aWMgbG9uZyBfX2RldmluaXQgZGV0ZWN0X3BsbF9pbnB1dF9jbG9jayh1bnNpZ25lZCBsb25nIGRtYV9iYXNlKQoreworCWxvbmcgc3RhcnRfY291bnQsIGVuZF9jb3VudDsKKwlsb25nIHBsbF9pbnB1dDsKKwl1OCBzY3IxOworCisJc3RhcnRfY291bnQgPSByZWFkX2NvdW50ZXIoZG1hX2Jhc2UpOworCisJLyogU3RhcnQgdGhlIHRlc3QgbW9kZSAqLworCW91dGIoMHgwMSwgZG1hX2Jhc2UgKyAweDAxKTsKKwlzY3IxID0gaW5iKGRtYV9iYXNlICsgMHgwMyk7CisJREJHKCJzY3IxWyUwMlhdXG4iLCBzY3IxKTsKKwlvdXRiKHNjcjEgfCAweDQwLCBkbWFfYmFzZSArIDB4MDMpOworCisJLyogTGV0IHRoZSBjb3VudGVyIHJ1biBmb3IgMTAgbXMuICovCisJbWRlbGF5KDEwKTsKKworCWVuZF9jb3VudCA9IHJlYWRfY291bnRlcihkbWFfYmFzZSk7CisKKwkvKiBTdG9wIHRoZSB0ZXN0IG1vZGUgKi8KKwlvdXRiKDB4MDEsIGRtYV9iYXNlICsgMHgwMSk7CisJc2NyMSA9IGluYihkbWFfYmFzZSArIDB4MDMpOworCURCRygic2NyMVslMDJYXVxuIiwgc2NyMSk7CisJb3V0YihzY3IxICYgfjB4NDAsIGRtYV9iYXNlICsgMHgwMyk7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgaW5wdXQgY2xvY2sgaW4gSHoKKwkgKiAodGhlIGNsb2NrIGNvdW50ZXIgaXMgMzAgYml0IHdpZGUgYW5kIGNvdW50cyBkb3duKQorCSAqLworCXBsbF9pbnB1dCA9ICgoc3RhcnRfY291bnQgLSBlbmRfY291bnQpICYgMHgzZmZmZmZmKSAqIDEwMDsKKworCURCRygic3RhcnRbJWxkXSBlbmRbJWxkXVxuIiwgc3RhcnRfY291bnQsIGVuZF9jb3VudCk7CisKKwlyZXR1cm4gcGxsX2lucHV0OworfQorCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgYXBwbGVfa2l3aV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7CiAJdW5zaWduZWQgaW50IGNsYXNzX3JldiA9IDA7Ci0Jdm9pZCBfX2lvbWVtICptbWlvOwogCXU4IGNvbmY7CiAKIAlpZiAobnAgPT0gTlVMTCB8fCAhZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJraXdpLXJvb3QiKSkKQEAgLTI4NSwzMCArNDU0LDIwIEBACiAKIAlpZiAoY2xhc3NfcmV2ID49IDB4MDMpIHsKIAkJLyogU2V0dXAgY2hpcCBtYWdpYyBjb25maWcgc3R1ZmYgKGZyb20gZGFyd2luKSAqLwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDQwLCAmY29uZik7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQwLCBjb25mIHwgMHgwMSk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlIChwZGV2LCAweDQwLCAmY29uZik7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQwLCAoY29uZiB8IDB4MDEpKTsKIAl9Ci0JbW1pbyA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDUpLAotCQkJCSAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgNSkpOwotCi0JLyogU2V0dXAgc29tZSBQTEwgc3R1ZmZzICovCi0Jc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKLQljYXNlIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3MDoKLQkJd3JpdGV3KDB4MGQyYiwgbW1pbyArIDB4MTIwMik7Ci0JCW1kZWxheSgzMCk7Ci0JCWJyZWFrOwotCWNhc2UgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjcxOgotCQl3cml0ZXcoMHgwODI2LCBtbWlvICsgMHgxMjAyKTsKLQkJbWRlbGF5KDMwKTsKLQkJYnJlYWs7Ci0JfQotCi0JaW91bm1hcChtbWlvKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXQgaW5pdF9jaGlwc2V0X3BkY25ldyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBjaGFyICpuYW1lKQogeworCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKKwl1bnNpZ25lZCBsb25nIHNlY19kbWFfYmFzZSA9IGRtYV9iYXNlICsgMHgwODsKKwlsb25nIHBsbF9pbnB1dCwgcGxsX291dHB1dCwgcmF0aW87CisJaW50IGYsIHI7CisJdTggcGxsX2N0bDAsIHBsbF9jdGwxOworCiAJaWYgKGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQpIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywKIAkJCWRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQgfCBQQ0lfUk9NX0FERFJFU1NfRU5BQkxFKTsKQEAgLTMyMCw2ICs0NzksMTA2IEBACiAJYXBwbGVfa2l3aV9pbml0KGRldik7CiAjZW5kaWYKIAorCS8qIENhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgUExMIG91dHB1dCBmcmVxdWVuY3kgKi8KKwlzd2l0Y2gobWF4X2RtYV9yYXRlKGRldikpIHsKKwkJY2FzZSA0OiAvKiBpdCdzIDEzMyBNSHogZm9yIFVsdHJhMTMzIGNoaXBzICovCisJCQlwbGxfb3V0cHV0ID0gMTMzMzMzMzMzOworCQkJYnJlYWs7CisJCWNhc2UgMzogLyogYW5kICAxMDAgTUh6IGZvciBVbHRyYTEwMCBjaGlwcyAqLworCQlkZWZhdWx0OgorCQkJcGxsX291dHB1dCA9IDEwMDAwMDAwMDsKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogRGV0ZWN0IFBMTCBpbnB1dCBjbG9jay4KKwkgKiBPbiBzb21lIHN5c3RlbXMsIHdoZXJlIFBDSSBidXMgaXMgcnVubmluZyBhdCBub24tc3RhbmRhcmQgY2xvY2sgcmF0ZQorCSAqIChlLmcuIDI1IG9yIDQwIE1IeiksIHdlIGhhdmUgdG8gYWRqdXN0IHRoZSBjeWNsZSB0aW1lLgorCSAqIFBEQzIwMjY4IGFuZCBuZXdlciBjaGlwcyBlbXBsb3kgUExMIGNpcmN1aXQgdG8gaGVscCBjb3JyZWN0IHRpbWluZworCSAqIHJlZ2lzdGVycyBzZXR0aW5nLgorCSAqLworCXBsbF9pbnB1dCA9IGRldGVjdF9wbGxfaW5wdXRfY2xvY2soZG1hX2Jhc2UpOworCXByaW50aygiJXM6IFBMTCBpbnB1dCBjbG9jayBpcyAlbGQga0h6XG4iLCBuYW1lLCBwbGxfaW5wdXQgLyAxMDAwKTsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICh1bmxpa2VseShwbGxfaW5wdXQgPCA1MDAwMDAwTCB8fCBwbGxfaW5wdXQgPiA3MDAwMDAwMEwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEJhZCBQTEwgaW5wdXQgY2xvY2sgJWxkIEh6LCBnaXZpbmcgdXAhXG4iLAorCQkgICAgICAgbmFtZSwgcGxsX2lucHV0KTsKKwkJZ290byBvdXQ7CisJfQorCisjaWZkZWYgREVCVUcKKwlEQkcoInBsbF9vdXRwdXQgaXMgJWxkIEh6XG4iLCBwbGxfb3V0cHV0KTsKKworCS8qIFNob3cgdGhlIGN1cnJlbnQgY2xvY2sgdmFsdWUgb2YgUExMIGNvbnRyb2wgcmVnaXN0ZXIKKwkgKiAobWF5YmUgYWxyZWFkeSBjb25maWd1cmVkIGJ5IHRoZSBCSU9TKQorCSAqLworCW91dGIoMHgwMiwgc2VjX2RtYV9iYXNlICsgMHgwMSk7CisJcGxsX2N0bDAgPSBpbmIoc2VjX2RtYV9iYXNlICsgMHgwMyk7CisJb3V0YigweDAzLCBzZWNfZG1hX2Jhc2UgKyAweDAxKTsKKwlwbGxfY3RsMSA9IGluYihzZWNfZG1hX2Jhc2UgKyAweDAzKTsKKworCURCRygicGxsX2N0bFslMDJYXVslMDJYXVxuIiwgcGxsX2N0bDAsIHBsbF9jdGwxKTsKKyNlbmRpZgorCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIHJhdGlvIG9mIEYsIFIgYW5kIE5PCisJICogUE9VVCA9IChGICsgMikgLyAoKCBSICsgMikgKiBOTykKKwkgKi8KKwlyYXRpbyA9IHBsbF9vdXRwdXQgLyAocGxsX2lucHV0IC8gMTAwMCk7CisJaWYgKHJhdGlvIDwgODYwMEwpIHsgLyogOC42eCAqLworCQkvKiBVc2luZyBOTyA9IDB4MDEsIFIgPSAweDBkICovCisJCXIgPSAweDBkOworCX0gZWxzZSBpZiAocmF0aW8gPCAxMjkwMEwpIHsgLyogMTIuOXggKi8KKwkJLyogVXNpbmcgTk8gPSAweDAxLCBSID0gMHgwOCAqLworCQlyID0gMHgwODsKKwl9IGVsc2UgaWYgKHJhdGlvIDwgMTYxMDBMKSB7IC8qIDE2LjF4ICovCisJCS8qIFVzaW5nIE5PID0gMHgwMSwgUiA9IDB4MDYgKi8KKwkJciA9IDB4MDY7CisJfSBlbHNlIGlmIChyYXRpbyA8IDY0MDAwTCkgeyAvKiA2NHggKi8KKwkJciA9IDB4MDA7CisJfSBlbHNlIHsKKwkJLyogSW52YWxpZCByYXRpbyAqLworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCYWQgcmF0aW8gJWxkLCBnaXZpbmcgdXAhXG4iLCBuYW1lLCByYXRpbyk7CisJCWdvdG8gb3V0OworCX0KKworCWYgPSAocmF0aW8gKiAociArIDIpKSAvIDEwMDAgLSAyOworCisJREJHKCJGWyVkXSBSWyVkXSByYXRpbyoxMDAwWyVsZF1cbiIsIGYsIHIsIHJhdGlvKTsKKworCWlmICh1bmxpa2VseShmIDwgMCB8fCBmID4gMTI3KSkgeworCQkvKiBJbnZhbGlkIEYgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRlslZF0gaW52YWxpZCFcbiIsIG5hbWUsIGYpOworCQlnb3RvIG91dDsKKwl9CisKKwlwbGxfY3RsMCA9ICh1OCkgZjsKKwlwbGxfY3RsMSA9ICh1OCkgcjsKKworCURCRygiV3JpdGluZyBwbGxfY3RsWyUwMlhdWyUwMlhdXG4iLCBwbGxfY3RsMCwgcGxsX2N0bDEpOworCisJb3V0YigweDAyLCAgICAgc2VjX2RtYV9iYXNlICsgMHgwMSk7CisJb3V0YihwbGxfY3RsMCwgc2VjX2RtYV9iYXNlICsgMHgwMyk7CisJb3V0YigweDAzLCAgICAgc2VjX2RtYV9iYXNlICsgMHgwMSk7CisJb3V0YihwbGxfY3RsMSwgc2VjX2RtYV9iYXNlICsgMHgwMyk7CisKKwkvKiBXYWl0IHRoZSBQTEwgY2lyY3VpdCB0byBiZSBzdGFibGUgKi8KKwltZGVsYXkoMzApOworCisjaWZkZWYgREVCVUcKKwkvKgorCSAqICBTaG93IHRoZSBjdXJyZW50IGNsb2NrIHZhbHVlIG9mIFBMTCBjb250cm9sIHJlZ2lzdGVyCisJICovCisJb3V0YigweDAyLCBzZWNfZG1hX2Jhc2UgKyAweDAxKTsKKwlwbGxfY3RsMCA9IGluYihzZWNfZG1hX2Jhc2UgKyAweDAzKTsKKwlvdXRiKDB4MDMsIHNlY19kbWFfYmFzZSArIDB4MDEpOworCXBsbF9jdGwxID0gaW5iKHNlY19kbWFfYmFzZSArIDB4MDMpOworCisJREJHKCJwbGxfY3RsWyUwMlhdWyUwMlhdXG4iLCBwbGxfY3RsMCwgcGxsX2N0bDEpOworI2VuZGlmCisKKyBvdXQ6CiAJcmV0dXJuIGRldi0+aXJxOwogfQogCkBAIC0zMjksOCArNTg4LDggQEAKIAogCWh3aWYtPnR1bmVwcm9jICA9ICZwZGNuZXdfdHVuZV9kcml2ZTsKIAlod2lmLT5xdWlya3Byb2MgPSAmcGRjbmV3X3F1aXJrcHJvYzsKLQlod2lmLT5zcGVlZHByb2MgPSAmcGRjbmV3X25ld190dW5lX2NoaXBzZXQ7Ci0JaHdpZi0+cmVzZXRwcm9jID0gJnBkY25ld19uZXdfcmVzZXQ7CisJaHdpZi0+c3BlZWRwcm9jID0gJnBkY25ld190dW5lX2NoaXBzZXQ7CisJaHdpZi0+cmVzZXRwcm9jID0gJnBkY25ld19yZXNldDsKIAogCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IGh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7CiAKQEAgLTM0MiwxMSArNjAxLDE0IEBACiAJaHdpZi0+aWRlX2RtYV9jaGVjayA9ICZwZGNuZXdfY29uZmlnX2RyaXZlX3hmZXJfcmF0ZTsKIAlod2lmLT5pZGVfZG1hX2xvc3RpcnEgPSAmcGRjbmV3X2lkZV9kbWFfbG9zdGlycTsKIAlod2lmLT5pZGVfZG1hX3RpbWVvdXQgPSAmcGRjbmV3X2lkZV9kbWFfdGltZW91dDsKLQlpZiAoIShod2lmLT51ZG1hX2ZvdXIpKQotCQlod2lmLT51ZG1hX2ZvdXIgPSAocGRjbmV3X25ld19jYWJsZV9kZXRlY3QoaHdpZikpID8gMCA6IDE7CisKKwlpZiAoIWh3aWYtPnVkbWFfZm91cikKKwkJaHdpZi0+dWRtYV9mb3VyID0gcGRjbmV3X2NhYmxlX2RldGVjdChod2lmKSA/IDAgOiAxOworCiAJaWYgKCFub2F1dG9kbWEpCiAJCWh3aWYtPmF1dG9kbWEgPSAxOwogCWh3aWYtPmRyaXZlc1swXS5hdXRvZG1hID0gaHdpZi0+ZHJpdmVzWzFdLmF1dG9kbWEgPSBod2lmLT5hdXRvZG1hOworCiAjaWYgUERDMjAyX0RFQlVHX0NBQkxFCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcy1waW4gY2FibGVcbiIsCiAJCWh3aWYtPm5hbWUsIGh3aWYtPnVkbWFfZm91ciA/ICI4MCIgOiAiNDAiKTsKQEAgLTM2Miw2ICs2MjQsNyBAQAogCQkJCQkgaWRlX3BjaV9kZXZpY2VfdCAqZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZmluZGV2ID0gTlVMTDsKKwlpbnQgcmV0OwogCiAJaWYgKChkZXYtPmJ1cy0+c2VsZiAmJgogCSAgICAgZGV2LT5idXMtPnNlbGYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0RFQykgJiYKQEAgLTM2OSwxNCArNjMyLDE2IEBACiAJCWlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSAmIDIpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJZC0+ZXh0cmEgPSAwOwotCQl3aGlsZSAoKGZpbmRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBmaW5kZXYpKSAhPSBOVUxMKSB7CisJCXdoaWxlICgoZmluZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZmluZGV2KSkgIT0gTlVMTCkgewogCQkJaWYgKChmaW5kZXYtPnZlbmRvciA9PSBkZXYtPnZlbmRvcikgJiYKIAkJCSAgICAoZmluZGV2LT5kZXZpY2UgPT0gZGV2LT5kZXZpY2UpICYmCiAJCQkgICAgKFBDSV9TTE9UKGZpbmRldi0+ZGV2Zm4pICYgMikpIHsKIAkJCQlpZiAoZmluZGV2LT5pcnEgIT0gZGV2LT5pcnEpIHsKIAkJCQkJZmluZGV2LT5pcnEgPSBkZXYtPmlycTsKIAkJCQl9Ci0JCQkJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlcyhkZXYsIGZpbmRldiwgZCk7CisJCQkJcmV0ID0gaWRlX3NldHVwX3BjaV9kZXZpY2VzKGRldiwgZmluZGV2LCBkKTsKKwkJCQlwY2lfZGV2X3B1dChmaW5kZXYpOworCQkJCXJldHVybiByZXQ7CiAJCQl9CiAJCX0KIAl9CkBAIC00OTEsNyArNzU2LDcgQEAKIAkucHJvYmUJCT0gcGRjMjAybmV3X2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCBwZGMyMDJuZXdfaWRlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHBkYzIwMm5ld19pZGVfaW5pdCh2b2lkKQogewogCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYwppbmRleCAxODRjZGFjLi4xNDMyMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCkBAIC03MTksNyArNzE5LDcgQEAKIAkucHJvYmUJCT0gcGRjMjAyeHhfaW5pdF9vbmUsCiB9OwogCi1zdGF0aWMgaW50IHBkYzIwMnh4X2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBwZGMyMDJ4eF9pZGVfaW5pdCh2b2lkKQogewogCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMgYi9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jCmluZGV4IGNkYzNhYWIuLmVkYjM3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3BpaXguYwpAQCAtMSwxMyArMSwxNCBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jCVZlcnNpb24gMC40NAlNYXJjaCAyMCwgMjAwMworICogIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9waWl4LmMJVmVyc2lvbiAwLjQ1CU1heSAxMiwgMjAwNgogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTgtMTk5OSBBbmRyemVqIEtyenlzenRvZm93aWN6LCBBdXRob3IgYW5kIE1haW50YWluZXIKICAqICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwMyBSZWQgSGF0IEluYyA8YWxhbkByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KICAqCiAgKiAgTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKgotICogIFBJTyBtb2RlIHNldHRpbmcgZnVuY3Rpb24gZm9yIEludGVsIGNoaXBzZXRzLiAgCisgKiAgUElPIG1vZGUgc2V0dGluZyBmdW5jdGlvbiBmb3IgSW50ZWwgY2hpcHNldHMuCiAgKiAgRm9yIHVzZSBpbnN0ZWFkIG9mIEJJT1Mgc2V0dGluZ3MuCiAgKgogICogNDAtNDEKQEAgLTI1LDcgKzI2LDcgQEAKICAqIHNpdHJlID0gd29yZDQyICYgMHg0MDAwOyBzZWNvbmRhcnkKICAqCiAgKiA0NCA4NDIxfDg0MjEgICAgaGRkfGhkYgotICogCisgKgogICogNDggODQyMSAgICAgICAgIGhkZHxoZGN8aGRifGhkYSB1ZG1hIGVuYWJsZWQKICAqCiAgKiAgICAwMDAxICAgICAgICAgaGRhCkBAIC0zNTMsNTYgKzM1NCwyNCBAQAogfQogCiAvKioKLSAqCXBpaXhfZmF1bHR5X2RtYTAJCS0JY2hlY2sgZm9yIERNQTAgZXJyYXRhCi0gKglAaHdpZjogSURFIGludGVyZmFjZSB0byBjaGVjawotICoKLSAqCUlmIGFuIElDSC9JQ0gwL0lDSDIgaW50ZXJmYWNlIGlzIGlzIG9wZXJhdGluZyBpbiBtdWx0aS13b3JkCi0gKglETUEgbW9kZSB3aXRoIDYwMG5TIGN5Y2xlIHRpbWUgdGhlIElERSBQSU8gcHJlZmV0Y2ggYnVmZmVyIHdpbGwKLSAqCWluYWR2ZXJ0ZW50bHkgcHJvdmlkZSBhbiBleHRyYSBwaWVjZSBvZiBzZWNvbmRhcnkgZGF0YSB0byB0aGUgcHJpbWFyeQotICoJZGV2aWNlIHJlc3VsdGluZyBpbiBkYXRhIGNvcnJ1cHRpb24uCi0gKgotICoJV2l0aCBzdWNoIGEgZGV2aWNlIHRoaXMgdGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUuIFRoaXMgYWxsb3dzCi0gKglvdXIgdHVuaW5nIGNvZGUgdG8gZm9sbG93IEludGVsIHJlY29tbWVuZGF0aW9ucyBhbmQgdXNlIFBJTyBvbgotICoJc3VjaCBkZXZpY2VzLgotICovCi0gCi1zdGF0aWMgaW50IHBpaXhfZmF1bHR5X2RtYTAoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlzd2l0Y2goaHdpZi0+cGNpX2Rldi0+ZGV2aWNlKQotCXsKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMToJLyogSUNIICovCi0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzE6CS8qIElDSDAgKi8KLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfODoJLyogSUNIMiAqLwotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV85OgkvKiBJQ0gyICovCi0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICoJcGlpeF9jb25maWdfZHJpdmVfZm9yX2RtYQktCWNvbmZpZ3VyZSBkcml2ZSBmb3IgRE1BCiAgKglAZHJpdmU6IElERSBkcml2ZSB0byBjb25maWd1cmUKICAqCiAgKglTZXQgdXAgYSBQSUlYIGludGVyZmFjZSBjaGFubmVsIGZvciB0aGUgYmVzdCBhdmFpbGFibGUgc3BlZWQuCi0gKglXZSBwcmVmZXIgVURNQSBpZiBpdCBpcyBhdmFpbGFibGUgYW5kIHRoZW4gTVdETUEuIElmIERNQSBpcyAKLSAqCW5vdCBhdmFpbGFibGUgd2Ugc3dpdGNoIHRvIFBJTyBhbmQgcmV0dXJuIDAuIAorICoJV2UgcHJlZmVyIFVETUEgaWYgaXQgaXMgYXZhaWxhYmxlIGFuZCB0aGVuIE1XRE1BLiAgSWYgRE1BIGlzCisgKglub3QgYXZhaWxhYmxlIHdlIHN3aXRjaCB0byBQSU8gYW5kIHJldHVybiAwLgogICovCiAgCiBzdGF0aWMgaW50IHBpaXhfY29uZmlnX2RyaXZlX2Zvcl9kbWEgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl1OCBzcGVlZCA9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIHBpaXhfcmF0ZW1hc2soZHJpdmUpKTsKLQkKLQkvKiBTb21lIElDSCBkZXZpY2VzIGNhbm5vdCBzdXBwb3J0IERNQSBtb2RlIDAgKi8KLQlpZihzcGVlZCA9PSBYRkVSX01XX0RNQV8wICYmIHBpaXhfZmF1bHR5X2RtYTAoSFdJRihkcml2ZSkpKQotCQlzcGVlZCA9IDA7CiAKLQkvKiBJZiBubyBETUEgc3BlZWQgd2FzIGF2YWlsYWJsZSBvciB0aGUgY2hpcHNldCBoYXMgRE1BIGJ1Z3MKLQkgICB0aGVuIGRpc2FibGUgRE1BIGFuZCB1c2UgUElPICovCi0JICAgCi0JaWYgKCFzcGVlZCB8fCBub19waWl4X2RtYSkgewotCQl1OCB0c3BlZWQgPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIDI1NSwgNSwgTlVMTCk7Ci0JCXNwZWVkID0gcGlpeF9kbWFfMl9waW8oWEZFUl9QSU9fMCArIHRzcGVlZCk7Ci0JfQorCS8qCisJICogSWYgbm8gRE1BIHNwZWVkIHdhcyBhdmFpbGFibGUgb3IgdGhlIGNoaXBzZXQgaGFzIERNQSBidWdzCisJICogdGhlbiBkaXNhYmxlIERNQSBhbmQgdXNlIFBJTworCSAqLworCWlmICghc3BlZWQgfHwgbm9fcGlpeF9kbWEpCisJCXJldHVybiAwOwogCiAJKHZvaWQpIHBpaXhfdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCk7CiAJcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKQEAgLTQyNSwxNyArMzk0LDE2IEBACiAKIAlpZiAoKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgZHJpdmUtPmF1dG9kbWEpIHsKIAotCQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpKSB7Ci0JCQlpZiAocGlpeF9jb25maWdfZHJpdmVfZm9yX2RtYShkcml2ZSkpCi0JCQkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb24oZHJpdmUpOwotCQl9CisJCWlmIChpZGVfdXNlX2RtYShkcml2ZSkgJiYgcGlpeF9jb25maWdfZHJpdmVfZm9yX2RtYShkcml2ZSkpCisJCQlyZXR1cm4gaHdpZi0+aWRlX2RtYV9vbihkcml2ZSk7CiAKIAkJZ290byBmYXN0X2F0YV9waW87CiAKIAl9IGVsc2UgaWYgKChpZC0+Y2FwYWJpbGl0eSAmIDgpIHx8IChpZC0+ZmllbGRfdmFsaWQgJiAyKSkgewogZmFzdF9hdGFfcGlvOgogCQkvKiBGaW5kIGJlc3QgUElPIG1vZGUuICovCi0JCWh3aWYtPnR1bmVwcm9jKGRyaXZlLCAyNTUpOworCQkodm9pZCkgaHdpZi0+c3BlZWRwcm9jKGRyaXZlLCBYRkVSX1BJT18wICsKKwkJCQkgICAgICAgaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDQsIE5VTEwpKTsKIAkJcmV0dXJuIGh3aWYtPmlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwogCX0KIAkvKiBJT1JEWSBub3Qgc3VwcG9ydGVkICovCkBAIC01MDUsNiArNDczLDEwIEBACiAJCS8qIFRoaXMgaXMgYSBwYWluZnVsIHN5c3RlbSBiZXN0IHRvIGxldCBpdCBzZWxmIHR1bmUgZm9yIG5vdyAqLwogCQlyZXR1cm47CiAJfQorCS8qIEVTQjIgYXBwZWFycyB0byBnZW5lcmF0ZSBzcHVyaW91cyBETUEgaW50ZXJydXB0cyBpbiBQSU8gbW9kZQorCSAgIHdoZW4gaW4gbmF0aXZlIG1vZGUgKi8KKwlpZiAoaHdpZi0+cGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCMl8xOCkKKwkJaHdpZi0+YXRhcGlfaXJxX2JvZ29uID0gMTsKIAogCWh3aWYtPmF1dG9kbWEgPSAwOwogCWh3aWYtPnR1bmVwcm9jID0gJnBpaXhfdHVuZV9kcml2ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9yejEwMDAuYyBiL2RyaXZlcnMvaWRlL3BjaS9yejEwMDAuYwppbmRleCA1ZjY5NTBjLi5jMTg1NTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvcnoxMDAwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3J6MTAwMC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJLnByb2JlCQk9IHJ6MTAwMF9pbml0X29uZSwKIH07CiAKLXN0YXRpYyBpbnQgcnoxMDAwX2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCByejEwMDBfaWRlX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMKaW5kZXggZmY4MDkzNy4uOGQ3NjJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zYzEyMDAuYwpAQCAtNTA3LDcgKzUwNyw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgc2MxMjAwX2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzYzEyMDBfaWRlX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDA1NzU0OGQuLmVhOWEyOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCkBAIC02NjYsNyArNjY2LDcgQEAKIAkucHJvYmUJCT0gc3Z3a3NfaW5pdF9vbmUsCiB9OwogCi1zdGF0aWMgaW50IHN2d2tzX2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzdndrc19pZGVfaW5pdCh2b2lkKQogewogCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMgYi9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCmluZGV4IGNmYWQwOWEuLmIwYmYwMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYwpAQCAtNzYyLDggKzc2Miw3IEBACiAvKgkuaXNfcmVtb3ZlID0gaW9jNF9pZGVfcmVtb3ZlX29uZSwJKi8KIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1pb2M0X2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpb2M0X2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlvYzRfcmVnaXN0ZXJfc3VibW9kdWxlKCZpb2M0X2lkZV9zdWJtb2R1bGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYyBiL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKaW5kZXggNjk3ZjU2Ni4uNGZmODljNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCkBAIC0xMDk2LDcgKzEwOTYsNyBAQAogCS5wcm9iZQkJPSBzaWltYWdlX2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCBzaWltYWdlX2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzaWltYWdlX2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMKaW5kZXggOTJlZGY3Ni4uMWFmZmY2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCkBAIC04MDAsOSArODAwLDEwIEBACiAKIAkJCWlmICh0cnVlaWQgPT0gMHg1NTE3KSB7IC8qIFNpUyA5NjEvOTYxQiAqLwogCi0JCQkJbHBjX2JyaWRnZSA9IHBjaV9maW5kX3Nsb3QoMHgwMCwgMHgxMCk7IC8qIEJ1cyAwLCBEZXYgMiwgRm4gMCAqLworCQkJCWxwY19icmlkZ2UgPSBwY2lfZ2V0X3Nsb3QoZGV2LT5idXMsIDB4MTApOyAvKiBCdXMgMCwgRGV2IDIsIEZuIDAgKi8KIAkJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShscGNfYnJpZGdlLCBQQ0lfUkVWSVNJT05fSUQsICZzYnJldik7CiAJCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDQ5LCAmcHJlZmN0bCk7CisJCQkJcGNpX2Rldl9wdXQobHBjX2JyaWRnZSk7CiAKIAkJCQlpZiAoc2JyZXYgPT0gMHgxMCAmJiAocHJlZmN0bCAmIDB4ODApKSB7CiAJCQkJCXByaW50ayhLRVJOX0lORk8gIlNJUzU1MTM6IFNpUyA5NjFCIE11VElPTCBJREUgVURNQTEzMyBjb250cm9sbGVyXG4iKTsKQEAgLTk2Nyw3ICs5NjgsNyBAQAogCS5wcm9iZQkJPSBzaXM1NTEzX2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCBzaXM1NTEzX2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzaXM1NTEzX2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMgYi9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYwppbmRleCAwYjRiNjA0Li4xNzBhMjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYwpAQCAtMjk5LDE0ICsyOTksMTQgQEAKIAkvL0RCRygoInNsODJjMTA1X3NlbGVjdHByb2MoZHJpdmU6JXMpXG4iLCBkcml2ZS0+bmFtZSkpOwogCiAJbWFzayA9IGh3aWYtPmNoYW5uZWwgPyBDVFJMX1AxRjE2IDogQ1RSTF9QMEYxNjsKLQlvbGQgPSB2YWwgPSAqKCh1MzIgKikmaHdpZi0+aHdpZl9kYXRhKTsKKwlvbGQgPSB2YWwgPSAodTMyKXBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCWlmIChkcml2ZS0+dXNpbmdfZG1hKQogCQl2YWwgJj0gfm1hc2s7CiAJZWxzZQogCQl2YWwgfD0gbWFzazsKIAlpZiAob2xkICE9IHZhbCkgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgdmFsKTsJCi0JCSooKHUzMiAqKSZod2lmLT5od2lmX2RhdGEpID0gdmFsOworCQlwY2lfc2V0X2RydmRhdGEoZGV2LCAodm9pZCAqKXZhbCk7CiAJfQogfQogCkBAIC0zMTYsMTQgKzMxNiwxMyBAQAogICovCiBzdGF0aWMgdm9pZCBzbDgyYzEwNV9yZXNldHByb2MoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gaHdpZi0+cGNpX2RldjsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gSFdJRihkcml2ZSktPnBjaV9kZXY7CiAJdTMyIHZhbDsKIAogCURCRygoInNsODJjMTA1X3Jlc2V0cHJvYyhkcml2ZTolcylcbiIsIGRyaXZlLT5uYW1lKSk7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQwLCAmdmFsKTsKLQkqKCh1MzIgKikmaHdpZi0+aHdpZl9kYXRhKSA9IHZhbDsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCAodm9pZCAqKXZhbCk7CiB9CiAJCiAvKgpAQCAtMzk0LDYgKzM5Myw3IEBACiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgJnZhbCk7CiAJdmFsIHw9IENUUkxfUDBFTiB8IENUUkxfUDBGMTYgfCBDVFJMX1AxRjE2OwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCB2YWwpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkICopdmFsKTsKIAogCXJldHVybiBkZXYtPmlycTsKIH0KQEAgLTQwNCwzMCArNDA0LDI1IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfc2w4MmMxMDUoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gaHdpZi0+cGNpX2RldjsKIAl1bnNpZ25lZCBpbnQgcmV2OwogCXU4IGRtYV9zdGF0ZTsKLQl1MzIgdmFsOwotCQorCiAJREJHKCgiaW5pdF9od2lmX3NsODJjMTA1KGh3aWY6IGlkZSVkKVxuIiwgaHdpZi0+aW5kZXgpKTsKIAogCWh3aWYtPnR1bmVwcm9jID0gdHVuZV9zbDgyYzEwNTsKIAlod2lmLT5zZWxlY3Rwcm9jID0gc2w4MmMxMDVfc2VsZWN0cHJvYzsKIAlod2lmLT5yZXNldHByb2MgPSBzbDgyYzEwNV9yZXNldHByb2M7Ci0JCi0JLyogRGVmYXVsdCB0byBQSU8gMCBmb3IgZmFsbGJhY2sgdW5sZXNzIHR1bmVkIG90aGVyd2lzZSwKLQkgKiB3ZSBhbHdheXMgYXV0b3R1bmUgUElPLCB0aGlzIGlzIGRvbmUgYmVmb3JlIERNQSBpcwotCSAqIGNoZWNrZWQsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgYWNjaWRlbnRhbGx5IGRpc2FibGluZwotCSAqIERNQQotCSAgKi8KKworCS8qCisJICogRGVmYXVsdCB0byBQSU8gMCBmb3IgZmFsbGJhY2sgdW5sZXNzIHR1bmVkIG90aGVyd2lzZS4KKwkgKiBXZSBhbHdheXMgYXV0b3R1bmUgUElPLCAgdGhpcyBpcyBkb25lIGJlZm9yZSBETUEgaXMgY2hlY2tlZCwKKwkgKiBzbyB0aGVyZSdzIG5vIHJpc2sgb2YgYWNjaWRlbnRhbGx5IGRpc2FibGluZyBETUEKKwkgKi8KIAlod2lmLT5kcml2ZXNbMF0ucGlvX3NwZWVkID0gWEZFUl9QSU9fMDsKIAlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOwotCWh3aWYtPmRyaXZlc1sxXS5waW9fc3BlZWQgPSBYRkVSX1BJT18xOworCWh3aWYtPmRyaXZlc1sxXS5waW9fc3BlZWQgPSBYRkVSX1BJT18wOwogCWh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQwLCAmdmFsKTsKLQkqKCh1MzIgKikmaHdpZi0+aHdpZl9kYXRhKSA9IHZhbDsKLQkKIAlod2lmLT5hdGFwaV9kbWEgPSAwOwogCWh3aWYtPm13ZG1hX21hc2sgPSAwOwogCWh3aWYtPnN3ZG1hX21hc2sgPSAwOwpAQCAtNDk3LDcgKzQ5Miw3IEBACiAJLnByb2JlCQk9IHNsODJjMTA1X2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCBzbDgyYzEwNV9pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2w4MmMxMDVfaWRlX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2xjOTBlNjYuYyBiL2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jCmluZGV4IDRhMTg1M2EuLjkwZTc5YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jCkBAIC0xLDkgKzEsMTAgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMJVmVyc2lvbiAwLjExCVNlcHRlbWJlciAxMSwgMjAwMgorICogIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jCVZlcnNpb24gMC4xMglNYXkgMTIsIDIwMDYKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+CiAgKgotICogVGhpcyBhIGxvb2stYS1saWtlIHZhcmlhdGlvbiBvZiB0aGUgSUNIMCBQSUlYNCBVbHRyYS02NiwKKyAqIFRoaXMgaXMgYSBsb29rLWFsaWtlIHZhcmlhdGlvbiBvZiB0aGUgSUNIMCBQSUlYNCBVbHRyYS02NiwKICAqIGJ1dCB0aGlzIGtlZXBzIHRoZSBJU0EtQnJpZGdlIGFuZCBzbG90cyBhbGl2ZS4KICAqCiAgKi8KQEAgLTE1OCwxMCArMTU5LDggQEAKIHsKIAl1OCBzcGVlZCA9IGlkZV9kbWFfc3BlZWQoZHJpdmUsIHNsYzkwZTY2X3JhdGVtYXNrKGRyaXZlKSk7CiAKLQlpZiAoIShzcGVlZCkpIHsKLQkJdTggdHNwZWVkID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCAyNTUsIDUsIE5VTEwpOwotCQlzcGVlZCA9IHNsYzkwZTY2X2RtYV8yX3BpbyhYRkVSX1BJT18wICsgdHNwZWVkKTsKLQl9CisJaWYgKCFzcGVlZCkKKwkJcmV0dXJuIDA7CiAKIAkodm9pZCkgc2xjOTBlNjZfdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCk7CiAJcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKQEAgLTE3NiwxNiArMTc1LDE1IEBACiAKIAlpZiAoaWQgJiYgKGlkLT5jYXBhYmlsaXR5ICYgMSkgJiYgZHJpdmUtPmF1dG9kbWEpIHsKIAotCQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpKSB7Ci0JCQlpZiAoc2xjOTBlNjZfY29uZmlnX2RyaXZlX2Zvcl9kbWEoZHJpdmUpKQotCQkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKLQkJfQorCQlpZiAoaWRlX3VzZV9kbWEoZHJpdmUpICYmIHNsYzkwZTY2X2NvbmZpZ19kcml2ZV9mb3JfZG1hKGRyaXZlKSkKKwkJCXJldHVybiBod2lmLT5pZGVfZG1hX29uKGRyaXZlKTsKIAogCQlnb3RvIGZhc3RfYXRhX3BpbzsKIAogCX0gZWxzZSBpZiAoKGlkLT5jYXBhYmlsaXR5ICYgOCkgfHwgKGlkLT5maWVsZF92YWxpZCAmIDIpKSB7CiBmYXN0X2F0YV9waW86Ci0JCWh3aWYtPnR1bmVwcm9jKGRyaXZlLCA1KTsKKwkJKHZvaWQpIGh3aWYtPnNwZWVkcHJvYyhkcml2ZSwgWEZFUl9QSU9fMCArCisJCQkJICAgICAgIGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgMjU1LCA0LCBOVUxMKSk7CiAJCXJldHVybiBod2lmLT5pZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKIAl9CiAJLyogSU9SRFkgbm90IHN1cHBvcnRlZCAqLwpAQCAtMjU1LDcgKzI1Myw3IEBACiAJLnByb2JlCQk9IHNsYzkwZTY2X2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCBzbGM5MGU2Nl9pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2xjOTBlNjZfaWRlX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdHJpZmxleC5jIGIvZHJpdmVycy9pZGUvcGNpL3RyaWZsZXguYwppbmRleCA1NmQ4NDkzLi5iMTNjY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvdHJpZmxleC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCS5wcm9iZQkJPSB0cmlmbGV4X2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCB0cmlmbGV4X2lkZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB0cmlmbGV4X2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3RybTI5MC5jIGIvZHJpdmVycy9pZGUvcGNpL3RybTI5MC5jCmluZGV4IDJhMjgyNTIuLjE3NGI4OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS90cm0yOTAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvdHJtMjkwLmMKQEAgLTM1NSw3ICszNTUsNyBAQAogCS5wcm9iZQkJPSB0cm0yOTBfaW5pdF9vbmUsCiB9OwogCi1zdGF0aWMgaW50IHRybTI5MF9pZGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdHJtMjkwX2lkZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jIGIvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jCmluZGV4IDYxZjFhOTYuLjZmYjZlNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS92aWE4MmN4eHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMKQEAgLTc4LDYgKzc4LDggQEAKIAl1OCByZXZfbWF4OwogCXUxNiBmbGFnczsKIH0gdmlhX2lzYV9icmlkZ2VzW10gPSB7CisJeyAiY3g3MDAiLAlQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKKwl7ICJ2dDgyMzdzIiwJUENJX0RFVklDRV9JRF9WSUFfODIzN1MsICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAidnQ2NDEwIiwJUENJX0RFVklDRV9JRF9WSUFfNjQxMCwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAidnQ4MjUxIiwJUENJX0RFVklDRV9JRF9WSUFfODI1MSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAidnQ4MjM3IiwJUENJX0RFVklDRV9JRF9WSUFfODIzNywgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCkBAIC0xMjMsNyArMTI1LDcgQEAKIHN0YXRpYyB2b2lkIHZpYV9zZXRfc3BlZWQoaWRlX2h3aWZfdCAqaHdpZiwgdTggZG4sIHN0cnVjdCBpZGVfdGltaW5nICp0aW1pbmcpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGh3aWYtPnBjaV9kZXY7Ci0Jc3RydWN0IHZpYTgyY3h4eF9kZXYgKnZkZXYgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOworCXN0cnVjdCB2aWE4MmN4eHhfZGV2ICp2ZGV2ID0gcGNpX2dldF9kcnZkYXRhKGh3aWYtPnBjaV9kZXYpOwogCXU4IHQ7CiAKIAlpZiAofnZkZXYtPnZpYV9jb25maWctPmZsYWdzICYgVklBX0JBRF9BU1QpIHsKQEAgLTE2Miw3ICsxNjQsNyBAQAogc3RhdGljIGludCB2aWFfc2V0X2RyaXZlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCiB7CiAJaWRlX2RyaXZlX3QgKnBlZXIgPSBIV0lGKGRyaXZlKS0+ZHJpdmVzICsgKH5kcml2ZS0+ZG4gJiAxKTsKLQlzdHJ1Y3QgdmlhODJjeHh4X2RldiAqdmRldiA9IGlkZV9nZXRfaHdpZmRhdGEoZHJpdmUtPmh3aWYpOworCXN0cnVjdCB2aWE4MmN4eHhfZGV2ICp2ZGV2ID0gcGNpX2dldF9kcnZkYXRhKGRyaXZlLT5od2lmLT5wY2lfZGV2KTsKIAlzdHJ1Y3QgaWRlX3RpbWluZyB0LCBwOwogCXVuc2lnbmVkIGludCBULCBVVDsKIApAQCAtMjI1LDcgKzIyNyw3IEBACiBzdGF0aWMgaW50IHZpYTgyY3h4eF9pZGVfZG1hX2NoZWNrIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCXN0cnVjdCB2aWE4MmN4eHhfZGV2ICp2ZGV2ID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKKwlzdHJ1Y3QgdmlhODJjeHh4X2RldiAqdmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShod2lmLT5wY2lfZGV2KTsKIAl1MTYgdzgwID0gaHdpZi0+dWRtYV9mb3VyOwogCiAJdTE2IHNwZWVkID0gaWRlX2ZpbmRfYmVzdF9tb2RlKGRyaXZlLApAQCAtMjYyLDYgKzI2NCw1MyBAQAogCXJldHVybiB2aWFfY29uZmlnOwogfQogCisvKgorICogQ2hlY2sgYW5kIGhhbmRsZSA4MC13aXJlIGNhYmxlIHByZXNlbmNlCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB2aWFfY2FibGVfZGV0ZWN0KHN0cnVjdCB2aWE4MmN4eHhfZGV2ICp2ZGV2LCB1MzIgdSkKK3sKKwlpbnQgaTsKKworCXN3aXRjaCAodmRldi0+dmlhX2NvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQSkgeworCQljYXNlIFZJQV9VRE1BXzY2OgorCQkJZm9yIChpID0gMjQ7IGkgPj0gMDsgaSAtPSA4KQorCQkJCWlmICgoKHUgPj4gKGkgJiAxNikpICYgOCkgJiYKKwkJCQkgICAgKCh1ID4+IGkpICYgMHgyMCkgJiYKKwkJCQkgICAgICgoKHUgPj4gaSkgJiA3KSA8IDIpKSB7CisJCQkJCS8qCisJCQkJCSAqIDJ4IFBDSSBjbG9jayBhbmQKKwkJCQkJICogVURNQSB3LyA8IDNUL2N5Y2xlCisJCQkJCSAqLworCQkJCQl2ZGV2LT52aWFfODB3IHw9ICgxIDw8ICgxIC0gKGkgPj4gNCkpKTsKKwkJCQl9CisJCQlicmVhazsKKworCQljYXNlIFZJQV9VRE1BXzEwMDoKKwkJCWZvciAoaSA9IDI0OyBpID49IDA7IGkgLT0gOCkKKwkJCQlpZiAoKCh1ID4+IGkpICYgMHgxMCkgfHwKKwkJCQkgICAgKCgodSA+PiBpKSAmIDB4MjApICYmCisJCQkJICAgICAoKCh1ID4+IGkpICYgNykgPCA0KSkpIHsKKwkJCQkJLyogQklPUyA4MC13aXJlIGJpdCBvcgorCQkJCQkgKiBVRE1BIHcvIDwgNjBucy9jeWNsZQorCQkJCQkgKi8KKwkJCQkJdmRldi0+dmlhXzgwdyB8PSAoMSA8PCAoMSAtIChpID4+IDQpKSk7CisJCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBWSUFfVURNQV8xMzM6CisJCQlmb3IgKGkgPSAyNDsgaSA+PSAwOyBpIC09IDgpCisJCQkJaWYgKCgodSA+PiBpKSAmIDB4MTApIHx8CisJCQkJICAgICgoKHUgPj4gaSkgJiAweDIwKSAmJgorCQkJCSAgICAgKCgodSA+PiBpKSAmIDcpIDwgNikpKSB7CisJCQkJCS8qIEJJT1MgODAtd2lyZSBiaXQgb3IKKwkJCQkJICogVURNQSB3LyA8IDYwbnMvY3ljbGUKKwkJCQkJICovCisJCQkJCXZkZXYtPnZpYV84MHcgfD0gKDEgPDwgKDEgLSAoaSA+PiA0KSkpOworCQkJCX0KKwkJCWJyZWFrOworCX0KK30KKwogLyoqCiAgKglpbml0X2NoaXBzZXRfdmlhODJjeHh4CS0JaW5pdGlhbGl6YXRpb24gaGFuZGxlcgogICoJQGRldjogUENJIGRldmljZQpAQCAtMjc0LDE0ICszMjMsMjIgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGluaXRfY2hpcHNldF92aWE4MmN4eHgoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqaXNhID0gTlVMTDsKKwlzdHJ1Y3QgdmlhODJjeHh4X2RldiAqdmRldjsKIAlzdHJ1Y3QgdmlhX2lzYV9icmlkZ2UgKnZpYV9jb25maWc7CiAJdTggdCwgdjsKLQl1bnNpZ25lZCBpbnQgdTsKKwl1MzIgdTsKKworCXZkZXYgPSBremFsbG9jKHNpemVvZigqdmRldiksIEdGUF9LRVJORUwpOworCWlmICghdmRldikgeworCQlwcmludGsoS0VSTl9FUlIgIlZQX0lERTogb3V0IG9mIG1lbW9yeSA6KFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwY2lfc2V0X2RydmRhdGEoZGV2LCB2ZGV2KTsKIAogCS8qCiAJICogRmluZCB0aGUgSVNBIGJyaWRnZSB0byBzZWUgaG93IGdvb2QgdGhlIElERSBpcy4KIAkgKi8KLQl2aWFfY29uZmlnID0gdmlhX2NvbmZpZ19maW5kKCZpc2EpOworCXZkZXYtPnZpYV9jb25maWcgPSB2aWFfY29uZmlnID0gdmlhX2NvbmZpZ19maW5kKCZpc2EpOwogCiAJLyogV2UgY2hlY2tlZCB0aGlzIGVhcmxpZXIgc28gaWYgaXQgZmFpbHMgaGVyZSBkZWVlcCBiYWRuZXNzCiAJICAgaXMgaW52b2x2ZWQgKi8KQEAgLTI4OSwxNiArMzQ2LDE3IEBACiAJQlVHX09OKCF2aWFfY29uZmlnLT5pZCk7CiAKIAkvKgotCSAqIFNldHVwIG9yIGRpc2FibGUgQ2xrNjYgaWYgYXBwcm9wcmlhdGUKKwkgKiBEZXRlY3QgY2FibGUgYW5kIGNvbmZpZ3VyZSBDbGs2NgogCSAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFZJQV9VRE1BX1RJTUlORywgJnUpOworCisJdmlhX2NhYmxlX2RldGVjdCh2ZGV2LCB1KTsKIAogCWlmICgodmlhX2NvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQSkgPT0gVklBX1VETUFfNjYpIHsKIAkJLyogRW5hYmxlIENsazY2ICovCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFZJQV9VRE1BX1RJTUlORywgJnUpOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgVklBX1VETUFfVElNSU5HLCB1fDB4ODAwMDgpOwogCX0gZWxzZSBpZiAodmlhX2NvbmZpZy0+ZmxhZ3MgJiBWSUFfQkFEX0NMSzY2KSB7CiAJCS8qIFdvdWxkIGNhdXNlIHRyb3VibGUgb24gNTk2YSBhbmQgNjg2ICovCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFZJQV9VRE1BX1RJTUlORywgJnUpOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgVklBX1VETUFfVElNSU5HLCB1ICYgfjB4ODAwMDgpOwogCX0KIApAQCAtMzY3LDc1ICs0MjUsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIENoZWNrIGFuZCBoYW5kbGUgODAtd2lyZSBjYWJsZSBwcmVzZW5jZQotICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgdmlhX2NhYmxlX2RldGVjdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgdmlhODJjeHh4X2RldiAqdmRldikKLXsKLQl1bnNpZ25lZCBpbnQgdTsKLQlpbnQgaTsKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBWSUFfVURNQV9USU1JTkcsICZ1KTsKLQotCXN3aXRjaCAodmRldi0+dmlhX2NvbmZpZy0+ZmxhZ3MgJiBWSUFfVURNQSkgewotCi0JCWNhc2UgVklBX1VETUFfNjY6Ci0JCQlmb3IgKGkgPSAyNDsgaSA+PSAwOyBpIC09IDgpCi0JCQkJaWYgKCgodSA+PiAoaSAmIDE2KSkgJiA4KSAmJgotCQkJCSAgICAoKHUgPj4gaSkgJiAweDIwKSAmJgotCQkJCSAgICAgKCgodSA+PiBpKSAmIDcpIDwgMikpIHsKLQkJCQkJLyoKLQkJCQkJICogMnggUENJIGNsb2NrIGFuZAotCQkJCQkgKiBVRE1BIHcvIDwgM1QvY3ljbGUKLQkJCQkJICovCi0JCQkJCXZkZXYtPnZpYV84MHcgfD0gKDEgPDwgKDEgLSAoaSA+PiA0KSkpOwotCQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgVklBX1VETUFfMTAwOgotCQkJZm9yIChpID0gMjQ7IGkgPj0gMDsgaSAtPSA4KQotCQkJCWlmICgoKHUgPj4gaSkgJiAweDEwKSB8fAotCQkJCSAgICAoKCh1ID4+IGkpICYgMHgyMCkgJiYKLQkJCQkgICAgICgoKHUgPj4gaSkgJiA3KSA8IDQpKSkgewotCQkJCQkvKiBCSU9TIDgwLXdpcmUgYml0IG9yCi0JCQkJCSAqIFVETUEgdy8gPCA2MG5zL2N5Y2xlCi0JCQkJCSAqLwotCQkJCQl2ZGV2LT52aWFfODB3IHw9ICgxIDw8ICgxIC0gKGkgPj4gNCkpKTsKLQkJCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIFZJQV9VRE1BXzEzMzoKLQkJCWZvciAoaSA9IDI0OyBpID49IDA7IGkgLT0gOCkKLQkJCQlpZiAoKCh1ID4+IGkpICYgMHgxMCkgfHwKLQkJCQkgICAgKCgodSA+PiBpKSAmIDB4MjApICYmCi0JCQkJICAgICAoKCh1ID4+IGkpICYgNykgPCA2KSkpIHsKLQkJCQkJLyogQklPUyA4MC13aXJlIGJpdCBvcgotCQkJCQkgKiBVRE1BIHcvIDwgNjBucy9jeWNsZQotCQkJCQkgKi8KLQkJCQkJdmRldi0+dmlhXzgwdyB8PSAoMSA8PCAoMSAtIChpID4+IDQpKSk7Ci0JCQkJfQotCQkJYnJlYWs7Ci0KLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfdmlhODJjeHh4KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0Jc3RydWN0IHZpYTgyY3h4eF9kZXYgKnZkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlhODJjeHh4X2RldiksCi0JCUdGUF9LRVJORUwpOwotCXN0cnVjdCBwY2lfZGV2ICppc2EgPSBOVUxMOworCXN0cnVjdCB2aWE4MmN4eHhfZGV2ICp2ZGV2ID0gcGNpX2dldF9kcnZkYXRhKGh3aWYtPnBjaV9kZXYpOwogCWludCBpOwogCi0JaWYgKHZkZXYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIlZQX0lERTogb3V0IG9mIG1lbW9yeSA6KFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1zZXQodmRldiwgMCwgc2l6ZW9mKHN0cnVjdCB2aWE4MmN4eHhfZGV2KSk7Ci0JaWRlX3NldF9od2lmZGF0YShod2lmLCB2ZGV2KTsKLQotCXZkZXYtPnZpYV9jb25maWcgPSB2aWFfY29uZmlnX2ZpbmQoJmlzYSk7Ci0JdmlhX2NhYmxlX2RldGVjdChod2lmLT5wY2lfZGV2LCB2ZGV2KTsKLQogCWh3aWYtPmF1dG9kbWEgPSAwOwogCiAJaHdpZi0+dHVuZXByb2MgPSAmdmlhODJjeHh4X3R1bmVfZHJpdmU7CkBAIC01MTIsNiArNTA2LDcgQEAKIAl7IFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1NzZfMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJeyBQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsgUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzY0MTAsICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxfSwKKwl7IFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV9TQVRBX0VJREUsICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxfSwKIAl7IDAsIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHZpYV9wY2lfdGJsKTsKQEAgLTUyMiw3ICs1MTcsNyBAQAogCS5wcm9iZSAJCT0gdmlhX2luaXRfb25lLAogfTsKIAotc3RhdGljIGludCB2aWFfaWRlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHZpYV9pZGVfaW5pdCh2b2lkKQogewogCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggMDcxOWI2NC4uNjk1ZTIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTg0NCwxMSArODQ0LDExIEBACiAKIAlwcmVfaW5pdCA9IDA7CiAJaWYgKCFzY2FuX2RpcmVjdGlvbikgewotCQl3aGlsZSAoKGRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgewogCQkJaWRlX3NjYW5fcGNpZGV2KGRldik7CiAJCX0KIAl9IGVsc2UgewotCQl3aGlsZSAoKGRldiA9IHBjaV9maW5kX2RldmljZV9yZXZlcnNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKKwkJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZV9yZXZlcnNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKIAkJCWlkZV9zY2FuX3BjaWRldihkZXYpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF9jb3JlLmggYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuaAppbmRleCBhZjRhNzhhLi41MzZiYTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuaApAQCAtMjE3LDcgKzIxNyw3IEBACiAvKiByZXR1cm4gdGhlIGluZGV4ICh3aXRoaW4gYSBtaW5vciBudW1iZXIgYmxvY2spIG9mIGEgZmlsZSAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGllZWUxMzk0X2ZpbGVfdG9faW5zdGFuY2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2NpbmRleDsKKwlyZXR1cm4gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9jaW5kZXg7CiB9CiAKIGV4dGVybiBpbnQgaHBzYl9kaXNhYmxlX2lybTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcGNpbHlueC5jIGIvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKaW5kZXggMTNhNjE3OS4uZmJiN2YxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKQEAgLTE0ODUsNyArMTQ4NSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgaTJjX2JpdF9kZWxfYnVzKGkyY19hZCk7CisJCQlpMmNfZGVsX2FkYXB0ZXIoaTJjX2FkKTsKIAkJCWtmcmVlKGkyY19hZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCmluZGV4IGU2OGI4MGIuLjQzMjVhYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jCkBAIC00OTAsMTEgKzQ5MCwxMSBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHUtPmNtZF9vcmJfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJY21kLT5jb21tYW5kX29yYl9kbWEgPSBkbWFfbWFwX3NpbmdsZSgmaGktPmhvc3QtPmRldmljZSwKKwkJY21kLT5jb21tYW5kX29yYl9kbWEgPSBkbWFfbWFwX3NpbmdsZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKIAkJCQkJCSZjbWQtPmNvbW1hbmRfb3JiLAogCQkJCQkJc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKIAkJCQkJCURNQV9UT19ERVZJQ0UpOwotCQljbWQtPnNnZV9kbWEgPSBkbWFfbWFwX3NpbmdsZSgmaGktPmhvc3QtPmRldmljZSwKKwkJY21kLT5zZ2VfZG1hID0gZG1hX21hcF9zaW5nbGUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCiAJCQkJCSZjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQsCiAJCQkJCXNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAogCQkJCQlETUFfQklESVJFQ1RJT05BTCk7CkBAIC01MTYsMTAgKzUxNiwxMSBAQAogCWlmICghbGlzdF9lbXB0eSgmbHUtPmNtZF9vcmJfY29tcGxldGVkKSkKIAkJbGlzdF9mb3JfZWFjaF9zYWZlKGxoLCBuZXh0LCAmbHUtPmNtZF9vcmJfY29tcGxldGVkKSB7CiAJCQljbWQgPSBsaXN0X2VudHJ5KGxoLCBzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8sIGxpc3QpOwotCQkJZG1hX3VubWFwX3NpbmdsZSgmaG9zdC0+ZGV2aWNlLCBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKKwkJCWRtYV91bm1hcF9zaW5nbGUoaG9zdC0+ZGV2aWNlLnBhcmVudCwKKwkJCQkJIGNtZC0+Y29tbWFuZF9vcmJfZG1hLAogCQkJCQkgc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKIAkJCQkJIERNQV9UT19ERVZJQ0UpOwotCQkJZG1hX3VubWFwX3NpbmdsZSgmaG9zdC0+ZGV2aWNlLCBjbWQtPnNnZV9kbWEsCisJCQlkbWFfdW5tYXBfc2luZ2xlKGhvc3QtPmRldmljZS5wYXJlbnQsIGNtZC0+c2dlX2RtYSwKIAkJCQkJIHNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAogCQkJCQkgRE1BX0JJRElSRUNUSU9OQUwpOwogCQkJa2ZyZWUoY21kKTsKQEAgLTYwMSwxNyArNjAyLDE3IEBACiAKIAlpZiAoY21kLT5jbWRfZG1hKSB7CiAJCWlmIChjbWQtPmRtYV90eXBlID09IENNRF9ETUFfU0lOR0xFKQotCQkJZG1hX3VubWFwX3NpbmdsZSgmaG9zdC0+ZGV2aWNlLCBjbWQtPmNtZF9kbWEsCisJCQlkbWFfdW5tYXBfc2luZ2xlKGhvc3QtPmRldmljZS5wYXJlbnQsIGNtZC0+Y21kX2RtYSwKIAkJCQkJIGNtZC0+ZG1hX3NpemUsIGNtZC0+ZG1hX2Rpcik7CiAJCWVsc2UgaWYgKGNtZC0+ZG1hX3R5cGUgPT0gQ01EX0RNQV9QQUdFKQotCQkJZG1hX3VubWFwX3BhZ2UoJmhvc3QtPmRldmljZSwgY21kLT5jbWRfZG1hLAorCQkJZG1hX3VubWFwX3BhZ2UoaG9zdC0+ZGV2aWNlLnBhcmVudCwgY21kLT5jbWRfZG1hLAogCQkJCSAgICAgICBjbWQtPmRtYV9zaXplLCBjbWQtPmRtYV9kaXIpOwogCQkvKiBYWFg6IENoZWNrIGZvciBDTURfRE1BX05PTkUgYnVnICovCiAJCWNtZC0+ZG1hX3R5cGUgPSBDTURfRE1BX05PTkU7CiAJCWNtZC0+Y21kX2RtYSA9IDA7CiAJfQogCWlmIChjbWQtPnNnZV9idWZmZXIpIHsKLQkJZG1hX3VubWFwX3NnKCZob3N0LT5kZXZpY2UsIGNtZC0+c2dlX2J1ZmZlciwKKwkJZG1hX3VubWFwX3NnKGhvc3QtPmRldmljZS5wYXJlbnQsIGNtZC0+c2dlX2J1ZmZlciwKIAkJCSAgICAgY21kLT5kbWFfc2l6ZSwgY21kLT5kbWFfZGlyKTsKIAkJY21kLT5zZ2VfYnVmZmVyID0gTlVMTDsKIAl9CkBAIC04MzYsMzcgKzgzNywzNyBAQAogCXN0cnVjdCBzYnAyX2Z3aG9zdF9pbmZvICpoaSA9IGx1LT5oaTsKIAlpbnQgZXJyb3I7CiAKLQlsdS0+bG9naW5fcmVzcG9uc2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhpLT5ob3N0LT5kZXZpY2UsCisJbHUtPmxvZ2luX3Jlc3BvbnNlID0gZG1hX2FsbG9jX2NvaGVyZW50KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAogCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2xvZ2luX3Jlc3BvbnNlKSwKIAkJCQkgICAgICZsdS0+bG9naW5fcmVzcG9uc2VfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWx1LT5sb2dpbl9yZXNwb25zZSkKIAkJZ290byBhbGxvY19mYWlsOwogCi0JbHUtPnF1ZXJ5X2xvZ2luc19vcmIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhpLT5ob3N0LT5kZXZpY2UsCisJbHUtPnF1ZXJ5X2xvZ2luc19vcmIgPSBkbWFfYWxsb2NfY29oZXJlbnQoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IHNicDJfcXVlcnlfbG9naW5zX29yYiksCiAJCQkJICAgICAmbHUtPnF1ZXJ5X2xvZ2luc19vcmJfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWx1LT5xdWVyeV9sb2dpbnNfb3JiKQogCQlnb3RvIGFsbG9jX2ZhaWw7CiAKLQlsdS0+cXVlcnlfbG9naW5zX3Jlc3BvbnNlID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoaS0+aG9zdC0+ZGV2aWNlLAorCWx1LT5xdWVyeV9sb2dpbnNfcmVzcG9uc2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IHNicDJfcXVlcnlfbG9naW5zX3Jlc3BvbnNlKSwKIAkJCQkgICAgICZsdS0+cXVlcnlfbG9naW5zX3Jlc3BvbnNlX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsdS0+cXVlcnlfbG9naW5zX3Jlc3BvbnNlKQogCQlnb3RvIGFsbG9jX2ZhaWw7CiAKLQlsdS0+cmVjb25uZWN0X29yYiA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGktPmhvc3QtPmRldmljZSwKKwlsdS0+cmVjb25uZWN0X29yYiA9IGRtYV9hbGxvY19jb2hlcmVudChoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKIAkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc2JwMl9yZWNvbm5lY3Rfb3JiKSwKIAkJCQkgICAgICZsdS0+cmVjb25uZWN0X29yYl9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghbHUtPnJlY29ubmVjdF9vcmIpCiAJCWdvdG8gYWxsb2NfZmFpbDsKIAotCWx1LT5sb2dvdXRfb3JiID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoaS0+aG9zdC0+ZGV2aWNlLAorCWx1LT5sb2dvdXRfb3JiID0gZG1hX2FsbG9jX2NvaGVyZW50KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAogCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2xvZ291dF9vcmIpLAogCQkJCSAgICAgJmx1LT5sb2dvdXRfb3JiX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsdS0+bG9nb3V0X29yYikKIAkJZ290byBhbGxvY19mYWlsOwogCi0JbHUtPmxvZ2luX29yYiA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGktPmhvc3QtPmRldmljZSwKKwlsdS0+bG9naW5fb3JiID0gZG1hX2FsbG9jX2NvaGVyZW50KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAogCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2xvZ2luX29yYiksCiAJCQkJICAgICAmbHUtPmxvZ2luX29yYl9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghbHUtPmxvZ2luX29yYikKQEAgLTkyOSwzMiArOTMwLDMyIEBACiAJbGlzdF9kZWwoJmx1LT5sdV9saXN0KTsKIAogCWlmIChsdS0+bG9naW5fcmVzcG9uc2UpCi0JCWRtYV9mcmVlX2NvaGVyZW50KCZoaS0+aG9zdC0+ZGV2aWNlLAorCQlkbWFfZnJlZV9jb2hlcmVudChoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2xvZ2luX3Jlc3BvbnNlKSwKIAkJCQkgICAgbHUtPmxvZ2luX3Jlc3BvbnNlLAogCQkJCSAgICBsdS0+bG9naW5fcmVzcG9uc2VfZG1hKTsKIAlpZiAobHUtPmxvZ2luX29yYikKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJmhpLT5ob3N0LT5kZXZpY2UsCisJCWRtYV9mcmVlX2NvaGVyZW50KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHNicDJfbG9naW5fb3JiKSwKIAkJCQkgICAgbHUtPmxvZ2luX29yYiwKIAkJCQkgICAgbHUtPmxvZ2luX29yYl9kbWEpOwogCWlmIChsdS0+cmVjb25uZWN0X29yYikKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJmhpLT5ob3N0LT5kZXZpY2UsCisJCWRtYV9mcmVlX2NvaGVyZW50KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHNicDJfcmVjb25uZWN0X29yYiksCiAJCQkJICAgIGx1LT5yZWNvbm5lY3Rfb3JiLAogCQkJCSAgICBsdS0+cmVjb25uZWN0X29yYl9kbWEpOwogCWlmIChsdS0+bG9nb3V0X29yYikKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJmhpLT5ob3N0LT5kZXZpY2UsCisJCWRtYV9mcmVlX2NvaGVyZW50KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHNicDJfbG9nb3V0X29yYiksCiAJCQkJICAgIGx1LT5sb2dvdXRfb3JiLAogCQkJCSAgICBsdS0+bG9nb3V0X29yYl9kbWEpOwogCWlmIChsdS0+cXVlcnlfbG9naW5zX29yYikKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJmhpLT5ob3N0LT5kZXZpY2UsCisJCWRtYV9mcmVlX2NvaGVyZW50KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHNicDJfcXVlcnlfbG9naW5zX29yYiksCiAJCQkJICAgIGx1LT5xdWVyeV9sb2dpbnNfb3JiLAogCQkJCSAgICBsdS0+cXVlcnlfbG9naW5zX29yYl9kbWEpOwogCWlmIChsdS0+cXVlcnlfbG9naW5zX3Jlc3BvbnNlKQotCQlkbWFfZnJlZV9jb2hlcmVudCgmaGktPmhvc3QtPmRldmljZSwKKwkJZG1hX2ZyZWVfY29oZXJlbnQoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCiAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2JwMl9xdWVyeV9sb2dpbnNfcmVzcG9uc2UpLAogCQkJCSAgICBsdS0+cXVlcnlfbG9naW5zX3Jlc3BvbnNlLAogCQkJCSAgICBsdS0+cXVlcnlfbG9naW5zX3Jlc3BvbnNlX2RtYSk7CkBAIC0xNDQ1LDcgKzE0NDYsNyBAQAogCiAJCWNtZC0+ZG1hX3NpemUgPSBzZ3BudFswXS5sZW5ndGg7CiAJCWNtZC0+ZG1hX3R5cGUgPSBDTURfRE1BX1BBR0U7Ci0JCWNtZC0+Y21kX2RtYSA9IGRtYV9tYXBfcGFnZSgmaGktPmhvc3QtPmRldmljZSwKKwkJY21kLT5jbWRfZG1hID0gZG1hX21hcF9wYWdlKGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAogCQkJCQkgICAgc2dwbnRbMF0ucGFnZSwgc2dwbnRbMF0ub2Zmc2V0LAogCQkJCQkgICAgY21kLT5kbWFfc2l6ZSwgY21kLT5kbWFfZGlyKTsKIApAQCAtMTQ1Nyw4ICsxNDU4LDggQEAKIAkJCQkJCSZjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnRbMF07CiAJCXUzMiBzZ19jb3VudCwgc2dfbGVuOwogCQlkbWFfYWRkcl90IHNnX2FkZHI7Ci0JCWludCBpLCBjb3VudCA9IGRtYV9tYXBfc2coJmhpLT5ob3N0LT5kZXZpY2UsIHNncG50LCBzY3NpX3VzZV9zZywKLQkJCQkJICBkbWFfZGlyKTsKKwkJaW50IGksIGNvdW50ID0gZG1hX21hcF9zZyhoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwgc2dwbnQsCisJCQkJCSAgc2NzaV91c2Vfc2csIGRtYV9kaXIpOwogCiAJCWNtZC0+ZG1hX3NpemUgPSBzY3NpX3VzZV9zZzsKIAkJY21kLT5zZ2VfYnVmZmVyID0gc2dwbnQ7CkBAIC0xNTA4LDcgKzE1MDksOCBAQAogCWNtZC0+ZG1hX2RpciA9IGRtYV9kaXI7CiAJY21kLT5kbWFfc2l6ZSA9IHNjc2lfcmVxdWVzdF9idWZmbGVuOwogCWNtZC0+ZG1hX3R5cGUgPSBDTURfRE1BX1NJTkdMRTsKLQljbWQtPmNtZF9kbWEgPSBkbWFfbWFwX3NpbmdsZSgmaGktPmhvc3QtPmRldmljZSwgc2NzaV9yZXF1ZXN0X2J1ZmZlciwKKwljbWQtPmNtZF9kbWEgPSBkbWFfbWFwX3NpbmdsZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKKwkJCQkgICAgICBzY3NpX3JlcXVlc3RfYnVmZmVyLAogCQkJCSAgICAgIGNtZC0+ZG1hX3NpemUsIGNtZC0+ZG1hX2Rpcik7CiAJb3JiLT5kYXRhX2Rlc2NyaXB0b3JfaGkgPSBPUkJfU0VUX05PREVfSUQoaGktPmhvc3QtPm5vZGVfaWQpOwogCW9yYi0+bWlzYyB8PSBPUkJfU0VUX0RJUkVDVElPTihvcmJfZGlyZWN0aW9uKTsKQEAgLTE2MjYsMTAgKzE2MjgsMTEgQEAKIAlzaXplX3QgbGVuZ3RoOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgmaGktPmhvc3QtPmRldmljZSwgY21kLT5jb21tYW5kX29yYl9kbWEsCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCisJCQkJICAgY21kLT5jb21tYW5kX29yYl9kbWEsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKIAkJCQkgICBETUFfVE9fREVWSUNFKTsKLQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgmaGktPmhvc3QtPmRldmljZSwgY21kLT5zZ2VfZG1hLAorCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LCBjbWQtPnNnZV9kbWEsCiAJCQkJICAgc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCiAJCQkJICAgRE1BX0JJRElSRUNUSU9OQUwpOwogCkBAIC0xNjU1LDE0ICsxNjU4LDE1IEBACiAJCSAqIFRoZSB0YXJnZXQncyBmZXRjaCBhZ2VudCBtYXkgb3IgbWF5IG5vdCBoYXZlIHJlYWQgdGhpcwogCQkgKiBwcmV2aW91cyBPUkIgeWV0LgogCQkgKi8KLQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoJmhpLT5ob3N0LT5kZXZpY2UsIGxhc3Rfb3JiX2RtYSwKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsIGxhc3Rfb3JiX2RtYSwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKIAkJCQkJRE1BX1RPX0RFVklDRSk7CiAJCWxhc3Rfb3JiLT5uZXh0X09SQl9sbyA9IGNwdV90b19iZTMyKGNtZC0+Y29tbWFuZF9vcmJfZG1hKTsKIAkJd21iKCk7CiAJCS8qIFRlbGxzIGhhcmR3YXJlIHRoYXQgdGhpcyBwb2ludGVyIGlzIHZhbGlkICovCiAJCWxhc3Rfb3JiLT5uZXh0X09SQl9oaSA9IDA7Ci0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKCZoaS0+aG9zdC0+ZGV2aWNlLCBsYXN0X29yYl9kbWEsCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAorCQkJCQkgICBsYXN0X29yYl9kbWEsCiAJCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksCiAJCQkJCSAgIERNQV9UT19ERVZJQ0UpOwogCQlhZGRyICs9IFNCUDJfRE9PUkJFTExfT0ZGU0VUOwpAQCAtMTc5MCwxMCArMTc5NCwxMSBAQAogCWVsc2UKIAkJY21kID0gc2JwMnV0aWxfZmluZF9jb21tYW5kX2Zvcl9vcmIobHUsIHNiLT5PUkJfb2Zmc2V0X2xvKTsKIAlpZiAoY21kKSB7Ci0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZoaS0+aG9zdC0+ZGV2aWNlLCBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCisJCQkJCWNtZC0+Y29tbWFuZF9vcmJfZG1hLAogCQkJCQlzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLAogCQkJCQlETUFfVE9fREVWSUNFKTsKLQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoJmhpLT5ob3N0LT5kZXZpY2UsIGNtZC0+c2dlX2RtYSwKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsIGNtZC0+c2dlX2RtYSwKIAkJCQkJc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCiAJCQkJCURNQV9CSURJUkVDVElPTkFMKTsKIAkJLyogR3JhYiBTQ1NJIGNvbW1hbmQgcG9pbnRlcnMgYW5kIGNoZWNrIHN0YXR1cy4gKi8KQEAgLTE4ODIsMTYgKzE4ODcsNiBAQAogCWlmICh1bmxpa2VseShTQ3BudC0+ZGV2aWNlLT5sdW4pKQogCQlnb3RvIGRvbmU7CiAKLQkvKiBoYW5kbGUgdGhlIHJlcXVlc3Qgc2Vuc2UgY29tbWFuZCBoZXJlIChhdXRvLXJlcXVlc3Qgc2Vuc2UpICovCi0JaWYgKFNDcG50LT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UpIHsKLQkJbWVtY3B5KFNDcG50LT5yZXF1ZXN0X2J1ZmZlciwgU0NwbnQtPnNlbnNlX2J1ZmZlciwKLQkJICAgICAgIFNDcG50LT5yZXF1ZXN0X2J1ZmZsZW4pOwotCQltZW1zZXQoU0NwbnQtPnNlbnNlX2J1ZmZlciwgMCwgc2l6ZW9mKFNDcG50LT5zZW5zZV9idWZmZXIpKTsKLQkJc2JwMnNjc2lfY29tcGxldGVfY29tbWFuZChsdSwgU0JQMl9TQ1NJX1NUQVRVU19HT09ELCBTQ3BudCwKLQkJCQkJICBkb25lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKHVubGlrZWx5KCFocHNiX25vZGVfZW50cnlfdmFsaWQobHUtPm5lKSkpIHsKIAkJU0JQMl9FUlIoIkJ1cyByZXNldCBpbiBwcm9ncmVzcyAtIHJlamVjdGluZyBjb21tYW5kIik7CiAJCXJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKQEAgLTE5MzEsMTAgKzE5MjYsMTEgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmx1LT5jbWRfb3JiX2ludXNlKSkgewogCQlsaCA9IGx1LT5jbWRfb3JiX2ludXNlLm5leHQ7CiAJCWNtZCA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbywgbGlzdCk7Ci0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZoaS0+aG9zdC0+ZGV2aWNlLCBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCisJCQkJICAgICAgICBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKIAkJCQkJRE1BX1RPX0RFVklDRSk7Ci0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZoaS0+aG9zdC0+ZGV2aWNlLCBjbWQtPnNnZV9kbWEsCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LCBjbWQtPnNnZV9kbWEsCiAJCQkJCXNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAogCQkJCQlETUFfQklESVJFQ1RJT05BTCk7CiAJCXNicDJ1dGlsX21hcmtfY29tbWFuZF9jb21wbGV0ZWQobHUsIGNtZCk7CkBAIC0yMDI0LDYgKzIwMjAsOCBAQAogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsICg1MTIgLSAxKSk7CiAJc2Rldi0+dXNlXzEwX2Zvcl9ydyA9IDE7CiAKKwlpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX1JPTSkKKwkJc2Rldi0+dXNlXzEwX2Zvcl9tcyA9IDE7CiAJaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLICYmCiAJICAgIGx1LT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF9NT0RFX1NFTlNFXzgpCiAJCXNkZXYtPnNraXBfbXNfcGFnZV84ID0gMTsKQEAgLTIwNTksMTEgKzIwNTcsMTIgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmx1LT5jbWRfb3JiX2xvY2ssIGZsYWdzKTsKIAkJY21kID0gc2JwMnV0aWxfZmluZF9jb21tYW5kX2Zvcl9TQ3BudChsdSwgU0NwbnQpOwogCQlpZiAoY21kKSB7Ci0JCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmaGktPmhvc3QtPmRldmljZSwKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAogCQkJCQljbWQtPmNvbW1hbmRfb3JiX2RtYSwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKIAkJCQkJRE1BX1RPX0RFVklDRSk7Ci0JCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmaGktPmhvc3QtPmRldmljZSwgY21kLT5zZ2VfZG1hLAorCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCisJCQkJCWNtZC0+c2dlX2RtYSwKIAkJCQkJc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCiAJCQkJCURNQV9CSURJUkVDVElPTkFMKTsKIAkJCXNicDJ1dGlsX21hcmtfY29tbWFuZF9jb21wbGV0ZWQobHUsIGNtZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCmluZGV4IDE2M2Q5OTEuLjUwZmIxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlCkBAIC0xLDkgKzEsMTEgQEAKIGluZmluaWJhbmQtJChDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TKQk6PSBpYl9hZGRyLm8gcmRtYV9jbS5vCit1c2VyX2FjY2Vzcy0kKENPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlMpCTo9IHJkbWFfdWNtLm8KIAogb2JqLSQoQ09ORklHX0lORklOSUJBTkQpICs9CQlpYl9jb3JlLm8gaWJfbWFkLm8gaWJfc2EubyBcCiAJCQkJCWliX2NtLm8gaXdfY20ubyAkKGluZmluaWJhbmQteSkKIG9iai0kKENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEKSArPQlpYl91bWFkLm8KLW9iai0kKENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTKSArPQlpYl91dmVyYnMubyBpYl91Y20ubworb2JqLSQoQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1MpICs9CWliX3V2ZXJicy5vIGliX3VjbS5vIFwKKwkJCQkJJCh1c2VyX2FjY2Vzcy15KQogCiBpYl9jb3JlLXkgOj0JCQlwYWNrZXIubyB1ZF9oZWFkZXIubyB2ZXJicy5vIHN5c2ZzLm8gXAogCQkJCWRldmljZS5vIGZtcl9wb29sLm8gY2FjaGUubwpAQCAtMTgsNiArMjAsOCBAQAogCiByZG1hX2NtLXkgOj0JCQljbWEubwogCityZG1hX3VjbS15IDo9CQkJdWNtYS5vCisKIGliX2FkZHIteSA6PQkJCWFkZHIubwogCiBpYl91bWFkLXkgOj0JCQl1c2VyX21hZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwppbmRleCA3OWM5MzdiLi5kNDQ2OTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKQEAgLTMyODksNiArMzI4OSwxMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKIAlzd2l0Y2ggKGNtX2lkX3ByaXYtPmlkLnN0YXRlKSB7CisJLyogQWxsb3cgdHJhbnNpdGlvbiB0byBSVFMgYmVmb3JlIHNlbmRpbmcgUkVQICovCisJY2FzZSBJQl9DTV9SRVFfUkNWRDoKKwljYXNlIElCX0NNX01SQV9SRVFfU0VOVDoKKwogCWNhc2UgSUJfQ01fUkVQX1JDVkQ6CiAJY2FzZSBJQl9DTV9NUkFfUkVQX1NFTlQ6CiAJY2FzZSBJQl9DTV9SRVBfU0VOVDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKaW5kZXggOTg1YTZiNS4uOWUwYWIwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKQEAgLTcwLDYgKzcwLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY21hX3dxOwogc3RhdGljIERFRklORV9JRFIoc2RwX3BzKTsKIHN0YXRpYyBERUZJTkVfSURSKHRjcF9wcyk7CitzdGF0aWMgREVGSU5FX0lEUih1ZHBfcHMpOwogCiBzdHJ1Y3QgY21hX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwpAQCAtMTMzLDcgKzEzNCw2IEBACiAKIAl1MzIJCQlzZXFfbnVtOwogCXUzMgkJCXFwX251bTsKLQllbnVtIGliX3FwX3R5cGUJCXFwX3R5cGU7CiAJdTgJCQlzcnE7CiB9OwogCkBAIC0zOTIsNyArMzkyLDYgQEAKIAogCWlkLT5xcCA9IHFwOwogCWlkX3ByaXYtPnFwX251bSA9IHFwLT5xcF9udW07Ci0JaWRfcHJpdi0+cXBfdHlwZSA9IHFwLT5xcF90eXBlOwogCWlkX3ByaXYtPnNycSA9IChxcC0+c3JxICE9IE5VTEwpOwogCXJldHVybiAwOwogZXJyOgpAQCAtNTEwLDkgKzUwOSwxNyBAQAogCXJldHVybiBjbWFfemVyb19hZGRyKGFkZHIpIHx8IGNtYV9sb29wYmFja19hZGRyKGFkZHIpOwogfQogCitzdGF0aWMgaW5saW5lIF9fYmUxNiBjbWFfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQlyZXR1cm4gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkciktPnNpbl9wb3J0OworCWVsc2UKKwkJcmV0dXJuICgoc3RydWN0IHNvY2thZGRyX2luNiAqKSBhZGRyKS0+c2luNl9wb3J0OworfQorCiBzdGF0aWMgaW5saW5lIGludCBjbWFfYW55X3BvcnQoc3RydWN0IHNvY2thZGRyICphZGRyKQogewotCXJldHVybiAhKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkciktPnNpbl9wb3J0OworCXJldHVybiAhY21hX3BvcnQoYWRkcik7CiB9CiAKIHN0YXRpYyBpbnQgY21hX2dldF9uZXRfaW5mbyh2b2lkICpoZHIsIGVudW0gcmRtYV9wb3J0X3NwYWNlIHBzLApAQCAtNTk0LDIwICs2MDEsNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBjbWFfbm90aWZ5X3VzZXIoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKLQkJCSAgIGVudW0gcmRtYV9jbV9ldmVudF90eXBlIHR5cGUsIGludCBzdGF0dXMsCi0JCQkgICB2b2lkICpkYXRhLCB1OCBkYXRhX2xlbikKLXsKLQlzdHJ1Y3QgcmRtYV9jbV9ldmVudCBldmVudDsKLQotCWV2ZW50LmV2ZW50ID0gdHlwZTsKLQlldmVudC5zdGF0dXMgPSBzdGF0dXM7Ci0JZXZlbnQucHJpdmF0ZV9kYXRhID0gZGF0YTsKLQlldmVudC5wcml2YXRlX2RhdGFfbGVuID0gZGF0YV9sZW47Ci0KLQlyZXR1cm4gaWRfcHJpdi0+aWQuZXZlbnRfaGFuZGxlcigmaWRfcHJpdi0+aWQsICZldmVudCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGNtYV9jYW5jZWxfcm91dGUoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKIHsKIAlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGlkX3ByaXYtPmlkLmRldmljZS0+bm9kZV90eXBlKSkgewpAQCAtNzc2LDYzICs3NjksNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjbWFfcnR1X3JlY3Yoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3N0YXRpYyB2b2lkIGNtYV9zZXRfcmVwX2V2ZW50X2RhdGEoc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50LAorCQkJCSAgIHN0cnVjdCBpYl9jbV9yZXBfZXZlbnRfcGFyYW0gKnJlcF9kYXRhLAorCQkJCSAgIHZvaWQgKnByaXZhdGVfZGF0YSkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gY21hX21vZGlmeV9xcF9ydHMoJmlkX3ByaXYtPmlkKTsKLQlpZiAocmV0KQotCQlnb3RvIHJlamVjdDsKLQotCXJldHVybiAwOwotcmVqZWN0OgotCWNtYV9tb2RpZnlfcXBfZXJyKCZpZF9wcml2LT5pZCk7Ci0JaWJfc2VuZF9jbV9yZWooaWRfcHJpdi0+Y21faWQuaWIsIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVELAotCQkgICAgICAgTlVMTCwgMCwgTlVMTCwgMCk7Ci0JcmV0dXJuIHJldDsKKwlldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7CisJZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhX2xlbiA9IElCX0NNX1JFUF9QUklWQVRFX0RBVEFfU0laRTsKKwlldmVudC0+cGFyYW0uY29ubi5yZXNwb25kZXJfcmVzb3VyY2VzID0gcmVwX2RhdGEtPnJlc3BvbmRlcl9yZXNvdXJjZXM7CisJZXZlbnQtPnBhcmFtLmNvbm4uaW5pdGlhdG9yX2RlcHRoID0gcmVwX2RhdGEtPmluaXRpYXRvcl9kZXB0aDsKKwlldmVudC0+cGFyYW0uY29ubi5mbG93X2NvbnRyb2wgPSByZXBfZGF0YS0+Zmxvd19jb250cm9sOworCWV2ZW50LT5wYXJhbS5jb25uLnJucl9yZXRyeV9jb3VudCA9IHJlcF9kYXRhLT5ybnJfcmV0cnlfY291bnQ7CisJZXZlbnQtPnBhcmFtLmNvbm4uc3JxID0gcmVwX2RhdGEtPnNycTsKKwlldmVudC0+cGFyYW0uY29ubi5xcF9udW0gPSByZXBfZGF0YS0+cmVtb3RlX3FwbjsKIH0KIAogc3RhdGljIGludCBjbWFfaWJfaGFuZGxlcihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLCBzdHJ1Y3QgaWJfY21fZXZlbnQgKmliX2V2ZW50KQogewogCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYgPSBjbV9pZC0+Y29udGV4dDsKLQllbnVtIHJkbWFfY21fZXZlbnRfdHlwZSBldmVudDsKLQl1OCBwcml2YXRlX2RhdGFfbGVuID0gMDsKLQlpbnQgcmV0ID0gMCwgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcmRtYV9jbV9ldmVudCBldmVudDsKKwlpbnQgcmV0ID0gMDsKIAogCWF0b21pY19pbmMoJmlkX3ByaXYtPmRldl9yZW1vdmUpOwogCWlmICghY21hX2NvbXAoaWRfcHJpdiwgQ01BX0NPTk5FQ1QpKQogCQlnb3RvIG91dDsKIAorCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZiBldmVudCk7CiAJc3dpdGNoIChpYl9ldmVudC0+ZXZlbnQpIHsKIAljYXNlIElCX0NNX1JFUV9FUlJPUjoKIAljYXNlIElCX0NNX1JFUF9FUlJPUjoKLQkJZXZlbnQgPSBSRE1BX0NNX0VWRU5UX1VOUkVBQ0hBQkxFOwotCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCQlldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfVU5SRUFDSEFCTEU7CisJCWV2ZW50LnN0YXR1cyA9IC1FVElNRURPVVQ7CiAJCWJyZWFrOwogCWNhc2UgSUJfQ01fUkVQX1JFQ0VJVkVEOgotCQlzdGF0dXMgPSBjbWFfdmVyaWZ5X3JlcChpZF9wcml2LCBpYl9ldmVudC0+cHJpdmF0ZV9kYXRhKTsKLQkJaWYgKHN0YXR1cykKLQkJCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SOworCQlldmVudC5zdGF0dXMgPSBjbWFfdmVyaWZ5X3JlcChpZF9wcml2LCBpYl9ldmVudC0+cHJpdmF0ZV9kYXRhKTsKKwkJaWYgKGV2ZW50LnN0YXR1cykKKwkJCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SOwogCQllbHNlIGlmIChpZF9wcml2LT5pZC5xcCAmJiBpZF9wcml2LT5pZC5wcyAhPSBSRE1BX1BTX1NEUCkgewotCQkJc3RhdHVzID0gY21hX3JlcF9yZWN2KGlkX3ByaXYpOwotCQkJZXZlbnQgPSBzdGF0dXMgPyBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfRVJST1IgOgotCQkJCQkgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDsKKwkJCWV2ZW50LnN0YXR1cyA9IGNtYV9yZXBfcmVjdihpZF9wcml2KTsKKwkJCWV2ZW50LmV2ZW50ID0gZXZlbnQuc3RhdHVzID8gUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SIDoKKwkJCQkJCSAgICAgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDsKIAkJfSBlbHNlCi0JCQlldmVudCA9IFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVNQT05TRTsKLQkJcHJpdmF0ZV9kYXRhX2xlbiA9IElCX0NNX1JFUF9QUklWQVRFX0RBVEFfU0laRTsKKwkJCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFU1BPTlNFOworCQljbWFfc2V0X3JlcF9ldmVudF9kYXRhKCZldmVudCwgJmliX2V2ZW50LT5wYXJhbS5yZXBfcmN2ZCwKKwkJCQkgICAgICAgaWJfZXZlbnQtPnByaXZhdGVfZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgSUJfQ01fUlRVX1JFQ0VJVkVEOgotCQlzdGF0dXMgPSBjbWFfcnR1X3JlY3YoaWRfcHJpdik7Ci0JCWV2ZW50ID0gc3RhdHVzID8gUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SIDoKLQkJCQkgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDsKKwljYXNlIElCX0NNX1VTRVJfRVNUQUJMSVNIRUQ6CisJCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDsKIAkJYnJlYWs7CiAJY2FzZSBJQl9DTV9EUkVRX0VSUk9SOgotCQlzdGF0dXMgPSAtRVRJTUVET1VUOyAvKiBmYWxsIHRocm91Z2ggKi8KKwkJZXZlbnQuc3RhdHVzID0gLUVUSU1FRE9VVDsgLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBJQl9DTV9EUkVRX1JFQ0VJVkVEOgogCWNhc2UgSUJfQ01fRFJFUF9SRUNFSVZFRDoKIAkJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9DT05ORUNULCBDTUFfRElTQ09OTkVDVCkpCiAJCQlnb3RvIG91dDsKLQkJZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0RJU0NPTk5FQ1RFRDsKKwkJZXZlbnQuZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0RJU0NPTk5FQ1RFRDsKIAkJYnJlYWs7CiAJY2FzZSBJQl9DTV9USU1FV0FJVF9FWElUOgogCWNhc2UgSUJfQ01fTVJBX1JFQ0VJVkVEOgpAQCAtODQwLDkgKzgzMSwxMCBAQAogCQlnb3RvIG91dDsKIAljYXNlIElCX0NNX1JFSl9SRUNFSVZFRDoKIAkJY21hX21vZGlmeV9xcF9lcnIoJmlkX3ByaXYtPmlkKTsKLQkJc3RhdHVzID0gaWJfZXZlbnQtPnBhcmFtLnJlal9yY3ZkLnJlYXNvbjsKLQkJZXZlbnQgPSBSRE1BX0NNX0VWRU5UX1JFSkVDVEVEOwotCQlwcml2YXRlX2RhdGFfbGVuID0gSUJfQ01fUkVKX1BSSVZBVEVfREFUQV9TSVpFOworCQlldmVudC5zdGF0dXMgPSBpYl9ldmVudC0+cGFyYW0ucmVqX3JjdmQucmVhc29uOworCQlldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfUkVKRUNURUQ7CisJCWV2ZW50LnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhID0gaWJfZXZlbnQtPnByaXZhdGVfZGF0YTsKKwkJZXZlbnQucGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuID0gSUJfQ01fUkVKX1BSSVZBVEVfREFUQV9TSVpFOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIlJETUEgQ01BOiB1bmV4cGVjdGVkIElCIENNIGV2ZW50OiAlZCIsCkBAIC04NTAsOCArODQyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gY21hX25vdGlmeV91c2VyKGlkX3ByaXYsIGV2ZW50LCBzdGF0dXMsIGliX2V2ZW50LT5wcml2YXRlX2RhdGEsCi0JCQkgICAgICBwcml2YXRlX2RhdGFfbGVuKTsKKwlyZXQgPSBpZF9wcml2LT5pZC5ldmVudF9oYW5kbGVyKCZpZF9wcml2LT5pZCwgJmV2ZW50KTsKIAlpZiAocmV0KSB7CiAJCS8qIERlc3Ryb3kgdGhlIENNIElEIGJ5IHJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlLiAqLwogCQlpZF9wcml2LT5jbV9pZC5pYiA9IE5VTEw7CkBAIC04NjUsOCArODU2LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqY21hX25ld19pZChzdHJ1Y3QgcmRtYV9jbV9pZCAqbGlzdGVuX2lkLAotCQkJCQkgIHN0cnVjdCBpYl9jbV9ldmVudCAqaWJfZXZlbnQpCitzdGF0aWMgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqY21hX25ld19jb25uX2lkKHN0cnVjdCByZG1hX2NtX2lkICpsaXN0ZW5faWQsCisJCQkJCSAgICAgICBzdHJ1Y3QgaWJfY21fZXZlbnQgKmliX2V2ZW50KQogewogCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CiAJc3RydWN0IHJkbWFfY21faWQgKmlkOwpAQCAtOTEzLDkgKzkwNCw2MSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqY21hX25ld191ZHBfaWQoc3RydWN0IHJkbWFfY21faWQgKmxpc3Rlbl9pZCwKKwkJCQkJICAgICAgc3RydWN0IGliX2NtX2V2ZW50ICppYl9ldmVudCkKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCXN0cnVjdCByZG1hX2NtX2lkICppZDsKKwl1bmlvbiBjbWFfaXBfYWRkciAqc3JjLCAqZHN0OworCV9fdTE2IHBvcnQ7CisJdTggaXBfdmVyOworCWludCByZXQ7CisKKwlpZCA9IHJkbWFfY3JlYXRlX2lkKGxpc3Rlbl9pZC0+ZXZlbnRfaGFuZGxlciwgbGlzdGVuX2lkLT5jb250ZXh0LAorCQkJICAgIGxpc3Rlbl9pZC0+cHMpOworCWlmIChJU19FUlIoaWQpKQorCQlyZXR1cm4gTlVMTDsKKworCisJaWYgKGNtYV9nZXRfbmV0X2luZm8oaWJfZXZlbnQtPnByaXZhdGVfZGF0YSwgbGlzdGVuX2lkLT5wcywKKwkJCSAgICAgJmlwX3ZlciwgJnBvcnQsICZzcmMsICZkc3QpKQorCQlnb3RvIGVycjsKKworCWNtYV9zYXZlX25ldF9pbmZvKCZpZC0+cm91dGUuYWRkciwgJmxpc3Rlbl9pZC0+cm91dGUuYWRkciwKKwkJCSAgaXBfdmVyLCBwb3J0LCBzcmMsIGRzdCk7CisKKwlyZXQgPSByZG1hX3RyYW5zbGF0ZV9pcCgmaWQtPnJvdXRlLmFkZHIuc3JjX2FkZHIsCisJCQkJJmlkLT5yb3V0ZS5hZGRyLmRldl9hZGRyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlpZF9wcml2LT5zdGF0ZSA9IENNQV9DT05ORUNUOworCXJldHVybiBpZF9wcml2OworZXJyOgorCXJkbWFfZGVzdHJveV9pZChpZCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGNtYV9zZXRfcmVxX2V2ZW50X2RhdGEoc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50LAorCQkJCSAgIHN0cnVjdCBpYl9jbV9yZXFfZXZlbnRfcGFyYW0gKnJlcV9kYXRhLAorCQkJCSAgIHZvaWQgKnByaXZhdGVfZGF0YSwgaW50IG9mZnNldCkKK3sKKwlldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGEgKyBvZmZzZXQ7CisJZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhX2xlbiA9IElCX0NNX1JFUV9QUklWQVRFX0RBVEFfU0laRSAtIG9mZnNldDsKKwlldmVudC0+cGFyYW0uY29ubi5yZXNwb25kZXJfcmVzb3VyY2VzID0gcmVxX2RhdGEtPnJlc3BvbmRlcl9yZXNvdXJjZXM7CisJZXZlbnQtPnBhcmFtLmNvbm4uaW5pdGlhdG9yX2RlcHRoID0gcmVxX2RhdGEtPmluaXRpYXRvcl9kZXB0aDsKKwlldmVudC0+cGFyYW0uY29ubi5mbG93X2NvbnRyb2wgPSByZXFfZGF0YS0+Zmxvd19jb250cm9sOworCWV2ZW50LT5wYXJhbS5jb25uLnJldHJ5X2NvdW50ID0gcmVxX2RhdGEtPnJldHJ5X2NvdW50OworCWV2ZW50LT5wYXJhbS5jb25uLnJucl9yZXRyeV9jb3VudCA9IHJlcV9kYXRhLT5ybnJfcmV0cnlfY291bnQ7CisJZXZlbnQtPnBhcmFtLmNvbm4uc3JxID0gcmVxX2RhdGEtPnNycTsKKwlldmVudC0+cGFyYW0uY29ubi5xcF9udW0gPSByZXFfZGF0YS0+cmVtb3RlX3FwbjsKK30KKwogc3RhdGljIGludCBjbWFfcmVxX2hhbmRsZXIoc3RydWN0IGliX2NtX2lkICpjbV9pZCwgc3RydWN0IGliX2NtX2V2ZW50ICppYl9ldmVudCkKIHsKIAlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICpsaXN0ZW5faWQsICpjb25uX2lkOworCXN0cnVjdCByZG1hX2NtX2V2ZW50IGV2ZW50OwogCWludCBvZmZzZXQsIHJldDsKIAogCWxpc3Rlbl9pZCA9IGNtX2lkLT5jb250ZXh0OwpAQCAtOTI1LDcgKzk2OCwxOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljb25uX2lkID0gY21hX25ld19pZCgmbGlzdGVuX2lkLT5pZCwgaWJfZXZlbnQpOworCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZiBldmVudCk7CisJb2Zmc2V0ID0gY21hX3VzZXJfZGF0YV9vZmZzZXQobGlzdGVuX2lkLT5pZC5wcyk7CisJZXZlbnQuZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVDsKKwlpZiAobGlzdGVuX2lkLT5pZC5wcyA9PSBSRE1BX1BTX1VEUCkgeworCQljb25uX2lkID0gY21hX25ld191ZHBfaWQoJmxpc3Rlbl9pZC0+aWQsIGliX2V2ZW50KTsKKwkJZXZlbnQucGFyYW0udWQucHJpdmF0ZV9kYXRhID0gaWJfZXZlbnQtPnByaXZhdGVfZGF0YSArIG9mZnNldDsKKwkJZXZlbnQucGFyYW0udWQucHJpdmF0ZV9kYXRhX2xlbiA9CisJCQkJSUJfQ01fU0lEUl9SRVFfUFJJVkFURV9EQVRBX1NJWkUgLSBvZmZzZXQ7CisJfSBlbHNlIHsKKwkJY29ubl9pZCA9IGNtYV9uZXdfY29ubl9pZCgmbGlzdGVuX2lkLT5pZCwgaWJfZXZlbnQpOworCQljbWFfc2V0X3JlcV9ldmVudF9kYXRhKCZldmVudCwgJmliX2V2ZW50LT5wYXJhbS5yZXFfcmN2ZCwKKwkJCQkgICAgICAgaWJfZXZlbnQtPnByaXZhdGVfZGF0YSwgb2Zmc2V0KTsKKwl9CiAJaWYgKCFjb25uX2lkKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtOTQyLDEwICs5OTcsNyBAQAogCWNtX2lkLT5jb250ZXh0ID0gY29ubl9pZDsKIAljbV9pZC0+Y21faGFuZGxlciA9IGNtYV9pYl9oYW5kbGVyOwogCi0Jb2Zmc2V0ID0gY21hX3VzZXJfZGF0YV9vZmZzZXQobGlzdGVuX2lkLT5pZC5wcyk7Ci0JcmV0ID0gY21hX25vdGlmeV91c2VyKGNvbm5faWQsIFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNULCAwLAotCQkJICAgICAgaWJfZXZlbnQtPnByaXZhdGVfZGF0YSArIG9mZnNldCwKLQkJCSAgICAgIElCX0NNX1JFUV9QUklWQVRFX0RBVEFfU0laRSAtIG9mZnNldCk7CisJcmV0ID0gY29ubl9pZC0+aWQuZXZlbnRfaGFuZGxlcigmY29ubl9pZC0+aWQsICZldmVudCk7CiAJaWYgKCFyZXQpCiAJCWdvdG8gb3V0OwogCkBAIC05NjQsOCArMTAxNiw3IEBACiAKIHN0YXRpYyBfX2JlNjQgY21hX2dldF9zZXJ2aWNlX2lkKGVudW0gcmRtYV9wb3J0X3NwYWNlIHBzLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCiB7Ci0JcmV0dXJuIGNwdV90b19iZTY0KCgodTY0KXBzIDw8IDE2KSArCi0JICAgICAgIGJlMTZfdG9fY3B1KCgoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHIpLT5zaW5fcG9ydCkpOworCXJldHVybiBjcHVfdG9fYmU2NCgoKHU2NClwcyA8PCAxNikgKyBiZTE2X3RvX2NwdShjbWFfcG9ydChhZGRyKSkpOwogfQogCiBzdGF0aWMgdm9pZCBjbWFfc2V0X2NvbXBhcmVfZGF0YShlbnVtIHJkbWFfcG9ydF9zcGFjZSBwcywgc3RydWN0IHNvY2thZGRyICphZGRyLApAQCAtMTAyMSwzNiArMTA3Miw0OSBAQAogc3RhdGljIGludCBjbWFfaXdfaGFuZGxlcihzdHJ1Y3QgaXdfY21faWQgKml3X2lkLCBzdHJ1Y3QgaXdfY21fZXZlbnQgKml3X2V2ZW50KQogewogCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYgPSBpd19pZC0+Y29udGV4dDsKLQllbnVtIHJkbWFfY21fZXZlbnRfdHlwZSBldmVudCA9IDA7CisJc3RydWN0IHJkbWFfY21fZXZlbnQgZXZlbnQ7CiAJc3RydWN0IHNvY2thZGRyX2luICpzaW47CiAJaW50IHJldCA9IDA7CiAKKwltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YgZXZlbnQpOwogCWF0b21pY19pbmMoJmlkX3ByaXYtPmRldl9yZW1vdmUpOwogCiAJc3dpdGNoIChpd19ldmVudC0+ZXZlbnQpIHsKIAljYXNlIElXX0NNX0VWRU5UX0NMT1NFOgotCQlldmVudCA9IFJETUFfQ01fRVZFTlRfRElTQ09OTkVDVEVEOworCQlldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfRElTQ09OTkVDVEVEOwogCQlicmVhazsKIAljYXNlIElXX0NNX0VWRU5UX0NPTk5FQ1RfUkVQTFk6CiAJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHI7CiAJCSpzaW4gPSBpd19ldmVudC0+bG9jYWxfYWRkcjsKIAkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kc3RfYWRkcjsKIAkJKnNpbiA9IGl3X2V2ZW50LT5yZW1vdGVfYWRkcjsKLQkJaWYgKGl3X2V2ZW50LT5zdGF0dXMpCi0JCQlldmVudCA9IFJETUFfQ01fRVZFTlRfUkVKRUNURUQ7Ci0JCWVsc2UKLQkJCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDsKKwkJc3dpdGNoIChpd19ldmVudC0+c3RhdHVzKSB7CisJCWNhc2UgMDoKKwkJCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDsKKwkJCWJyZWFrOworCQljYXNlIC1FQ09OTlJFU0VUOgorCQljYXNlIC1FQ09OTlJFRlVTRUQ6CisJCQlldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfUkVKRUNURUQ7CisJCQlicmVhazsKKwkJY2FzZSAtRVRJTUVET1VUOgorCQkJZXZlbnQuZXZlbnQgPSBSRE1BX0NNX0VWRU5UX1VOUkVBQ0hBQkxFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfQ09OTkVDVF9FUlJPUjsKKwkJCWJyZWFrOworCQl9CiAJCWJyZWFrOwogCWNhc2UgSVdfQ01fRVZFTlRfRVNUQUJMSVNIRUQ6Ci0JCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDsKKwkJZXZlbnQuZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0VTVEFCTElTSEVEOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUdfT04oMSk7CiAJfQogCi0JcmV0ID0gY21hX25vdGlmeV91c2VyKGlkX3ByaXYsIGV2ZW50LCBpd19ldmVudC0+c3RhdHVzLAotCQkJICAgICAgaXdfZXZlbnQtPnByaXZhdGVfZGF0YSwKLQkJCSAgICAgIGl3X2V2ZW50LT5wcml2YXRlX2RhdGFfbGVuKTsKKwlldmVudC5zdGF0dXMgPSBpd19ldmVudC0+c3RhdHVzOworCWV2ZW50LnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhID0gaXdfZXZlbnQtPnByaXZhdGVfZGF0YTsKKwlldmVudC5wYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4gPSBpd19ldmVudC0+cHJpdmF0ZV9kYXRhX2xlbjsKKwlyZXQgPSBpZF9wcml2LT5pZC5ldmVudF9oYW5kbGVyKCZpZF9wcml2LT5pZCwgJmV2ZW50KTsKIAlpZiAocmV0KSB7CiAJCS8qIERlc3Ryb3kgdGhlIENNIElEIGJ5IHJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlLiAqLwogCQlpZF9wcml2LT5jbV9pZC5pdyA9IE5VTEw7CkBAIC0xMDcxLDYgKzExMzUsNyBAQAogCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmxpc3Rlbl9pZCwgKmNvbm5faWQ7CiAJc3RydWN0IHNvY2thZGRyX2luICpzaW47CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IHJkbWFfY21fZXZlbnQgZXZlbnQ7CiAJaW50IHJldDsKIAogCWxpc3Rlbl9pZCA9IGNtX2lkLT5jb250ZXh0OwpAQCAtMTEyNCw5ICsxMTg5LDExIEBACiAJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmbmV3X2NtX2lkLT5yb3V0ZS5hZGRyLmRzdF9hZGRyOwogCSpzaW4gPSBpd19ldmVudC0+cmVtb3RlX2FkZHI7CiAKLQlyZXQgPSBjbWFfbm90aWZ5X3VzZXIoY29ubl9pZCwgUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1QsIDAsCi0JCQkgICAgICBpd19ldmVudC0+cHJpdmF0ZV9kYXRhLAotCQkJICAgICAgaXdfZXZlbnQtPnByaXZhdGVfZGF0YV9sZW4pOworCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZiBldmVudCk7CisJZXZlbnQuZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVDsKKwlldmVudC5wYXJhbS5jb25uLnByaXZhdGVfZGF0YSA9IGl3X2V2ZW50LT5wcml2YXRlX2RhdGE7CisJZXZlbnQucGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuID0gaXdfZXZlbnQtPnByaXZhdGVfZGF0YV9sZW47CisJcmV0ID0gY29ubl9pZC0+aWQuZXZlbnRfaGFuZGxlcigmY29ubl9pZC0+aWQsICZldmVudCk7CiAJaWYgKHJldCkgewogCQkvKiBVc2VyIHdhbnRzIHRvIGRlc3Ryb3kgdGhlIENNIElEICovCiAJCWNvbm5faWQtPmNtX2lkLml3ID0gTlVMTDsKQEAgLTE1MTUsOCArMTU4Miw5IEBACiAJCQkgc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLCB2b2lkICpjb250ZXh0KQogewogCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYgPSBjb250ZXh0OwotCWVudW0gcmRtYV9jbV9ldmVudF90eXBlIGV2ZW50OworCXN0cnVjdCByZG1hX2NtX2V2ZW50IGV2ZW50OwogCisJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mIGV2ZW50KTsKIAlhdG9taWNfaW5jKCZpZF9wcml2LT5kZXZfcmVtb3ZlKTsKIAogCS8qCkBAIC0xNTM2LDE0ICsxNjA0LDE1IEBACiAJaWYgKHN0YXR1cykgewogCQlpZiAoIWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX0FERFJfUkVTT0xWRUQsIENNQV9BRERSX0JPVU5EKSkKIAkJCWdvdG8gb3V0OwotCQlldmVudCA9IFJETUFfQ01fRVZFTlRfQUREUl9FUlJPUjsKKwkJZXZlbnQuZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0FERFJfRVJST1I7CisJCWV2ZW50LnN0YXR1cyA9IHN0YXR1czsKIAl9IGVsc2UgewogCQltZW1jcHkoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIsIHNyY19hZGRyLAogCQkgICAgICAgaXBfYWRkcl9zaXplKHNyY19hZGRyKSk7Ci0JCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9BRERSX1JFU09MVkVEOworCQlldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfQUREUl9SRVNPTFZFRDsKIAl9CiAKLQlpZiAoY21hX25vdGlmeV91c2VyKGlkX3ByaXYsIGV2ZW50LCBzdGF0dXMsIE5VTEwsIDApKSB7CisJaWYgKGlkX3ByaXYtPmlkLmV2ZW50X2hhbmRsZXIoJmlkX3ByaXYtPmlkLCAmZXZlbnQpKSB7CiAJCWNtYV9leGNoKGlkX3ByaXYsIENNQV9ERVNUUk9ZSU5HKTsKIAkJY21hX3JlbGVhc2VfcmVtb3ZlKGlkX3ByaXYpOwogCQljbWFfZGVyZWZfaWQoaWRfcHJpdik7CkBAIC0xNzMzLDYgKzE4MDIsOSBAQAogCWNhc2UgUkRNQV9QU19UQ1A6CiAJCXBzID0gJnRjcF9wczsKIAkJYnJlYWs7CisJY2FzZSBSRE1BX1BTX1VEUDoKKwkJcHMgPSAmdWRwX3BzOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAl9CkBAIC0xODIxLDYgKzE4OTMsMTEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY21hX3NpZHJfcmVwX2hhbmRsZXIoc3RydWN0IGliX2NtX2lkICpjbV9pZCwKKwkJCQlzdHJ1Y3QgaWJfY21fZXZlbnQgKmliX2V2ZW50KQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYgPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3QgcmRtYV9jbV9ldmVudCBldmVudDsKKwlzdHJ1Y3QgaWJfY21fc2lkcl9yZXBfZXZlbnRfcGFyYW0gKnJlcCA9ICZpYl9ldmVudC0+cGFyYW0uc2lkcl9yZXBfcmN2ZDsKKwlpbnQgcmV0ID0gMDsKKworCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZiBldmVudCk7CisJYXRvbWljX2luYygmaWRfcHJpdi0+ZGV2X3JlbW92ZSk7CisJaWYgKCFjbWFfY29tcChpZF9wcml2LCBDTUFfQ09OTkVDVCkpCisJCWdvdG8gb3V0OworCisJc3dpdGNoIChpYl9ldmVudC0+ZXZlbnQpIHsKKwljYXNlIElCX0NNX1NJRFJfUkVRX0VSUk9SOgorCQlldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfVU5SRUFDSEFCTEU7CisJCWV2ZW50LnN0YXR1cyA9IC1FVElNRURPVVQ7CisJCWJyZWFrOworCWNhc2UgSUJfQ01fU0lEUl9SRVBfUkVDRUlWRUQ6CisJCWV2ZW50LnBhcmFtLnVkLnByaXZhdGVfZGF0YSA9IGliX2V2ZW50LT5wcml2YXRlX2RhdGE7CisJCWV2ZW50LnBhcmFtLnVkLnByaXZhdGVfZGF0YV9sZW4gPSBJQl9DTV9TSURSX1JFUF9QUklWQVRFX0RBVEFfU0laRTsKKwkJaWYgKHJlcC0+c3RhdHVzICE9IElCX1NJRFJfU1VDQ0VTUykgeworCQkJZXZlbnQuZXZlbnQgPSBSRE1BX0NNX0VWRU5UX1VOUkVBQ0hBQkxFOworCQkJZXZlbnQuc3RhdHVzID0gaWJfZXZlbnQtPnBhcmFtLnNpZHJfcmVwX3JjdmQuc3RhdHVzOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJlcC0+cWtleSAhPSBSRE1BX1VEX1FLRVkpIHsKKwkJCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9VTlJFQUNIQUJMRTsKKwkJCWV2ZW50LnN0YXR1cyA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpYl9pbml0X2FoX2Zyb21fcGF0aChpZF9wcml2LT5pZC5kZXZpY2UsIGlkX3ByaXYtPmlkLnBvcnRfbnVtLAorCQkJCSAgICAgaWRfcHJpdi0+aWQucm91dGUucGF0aF9yZWMsCisJCQkJICAgICAmZXZlbnQucGFyYW0udWQuYWhfYXR0cik7CisJCWV2ZW50LnBhcmFtLnVkLnFwX251bSA9IHJlcC0+cXBuOworCQlldmVudC5wYXJhbS51ZC5xa2V5ID0gcmVwLT5xa2V5OworCQlldmVudC5ldmVudCA9IFJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRUQ7CisJCWV2ZW50LnN0YXR1cyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiUkRNQSBDTUE6IHVuZXhwZWN0ZWQgSUIgQ00gZXZlbnQ6ICVkIiwKKwkJICAgICAgIGliX2V2ZW50LT5ldmVudCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGlkX3ByaXYtPmlkLmV2ZW50X2hhbmRsZXIoJmlkX3ByaXYtPmlkLCAmZXZlbnQpOworCWlmIChyZXQpIHsKKwkJLyogRGVzdHJveSB0aGUgQ00gSUQgYnkgcmV0dXJuaW5nIGEgbm9uLXplcm8gdmFsdWUuICovCisJCWlkX3ByaXYtPmNtX2lkLmliID0gTlVMTDsKKwkJY21hX2V4Y2goaWRfcHJpdiwgQ01BX0RFU1RST1lJTkcpOworCQljbWFfcmVsZWFzZV9yZW1vdmUoaWRfcHJpdik7CisJCXJkbWFfZGVzdHJveV9pZCgmaWRfcHJpdi0+aWQpOworCQlyZXR1cm4gcmV0OworCX0KK291dDoKKwljbWFfcmVsZWFzZV9yZW1vdmUoaWRfcHJpdik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbWFfcmVzb2x2ZV9pYl91ZHAoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCSAgICAgIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pCit7CisJc3RydWN0IGliX2NtX3NpZHJfcmVxX3BhcmFtIHJlcTsKKwlzdHJ1Y3QgcmRtYV9yb3V0ZSAqcm91dGU7CisJaW50IHJldDsKKworCXJlcS5wcml2YXRlX2RhdGFfbGVuID0gc2l6ZW9mKHN0cnVjdCBjbWFfaGRyKSArCisJCQkgICAgICAgY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbjsKKwlyZXEucHJpdmF0ZV9kYXRhID0ga3phbGxvYyhyZXEucHJpdmF0ZV9kYXRhX2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKCFyZXEucHJpdmF0ZV9kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb25uX3BhcmFtLT5wcml2YXRlX2RhdGEgJiYgY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbikKKwkJbWVtY3B5KCh2b2lkICopIHJlcS5wcml2YXRlX2RhdGEgKyBzaXplb2Yoc3RydWN0IGNtYV9oZHIpLAorCQkgICAgICAgY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhLCBjb25uX3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuKTsKKworCXJvdXRlID0gJmlkX3ByaXYtPmlkLnJvdXRlOworCXJldCA9IGNtYV9mb3JtYXRfaGRyKCh2b2lkICopIHJlcS5wcml2YXRlX2RhdGEsIGlkX3ByaXYtPmlkLnBzLCByb3V0ZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZF9wcml2LT5jbV9pZC5pYiA9IGliX2NyZWF0ZV9jbV9pZChpZF9wcml2LT5pZC5kZXZpY2UsCisJCQkJCSAgICBjbWFfc2lkcl9yZXBfaGFuZGxlciwgaWRfcHJpdik7CisJaWYgKElTX0VSUihpZF9wcml2LT5jbV9pZC5pYikpIHsKKwkJcmV0ID0gUFRSX0VSUihpZF9wcml2LT5jbV9pZC5pYik7CisJCWdvdG8gb3V0OworCX0KKworCXJlcS5wYXRoID0gcm91dGUtPnBhdGhfcmVjOworCXJlcS5zZXJ2aWNlX2lkID0gY21hX2dldF9zZXJ2aWNlX2lkKGlkX3ByaXYtPmlkLnBzLAorCQkJCQkgICAgJnJvdXRlLT5hZGRyLmRzdF9hZGRyKTsKKwlyZXEudGltZW91dF9tcyA9IDEgPDwgKENNQV9DTV9SRVNQT05TRV9USU1FT1VUIC0gOCk7CisJcmVxLm1heF9jbV9yZXRyaWVzID0gQ01BX01BWF9DTV9SRVRSSUVTOworCisJcmV0ID0gaWJfc2VuZF9jbV9zaWRyX3JlcShpZF9wcml2LT5jbV9pZC5pYiwgJnJlcSk7CisJaWYgKHJldCkgeworCQlpYl9kZXN0cm95X2NtX2lkKGlkX3ByaXYtPmNtX2lkLmliKTsKKwkJaWRfcHJpdi0+Y21faWQuaWIgPSBOVUxMOworCX0KK291dDoKKwlrZnJlZShyZXEucHJpdmF0ZV9kYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGNtYV9jb25uZWN0X2liKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCiAJCQkgIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pCiB7CkBAIC0xODYwLDcgKzIwMzYsNyBAQAogCXJlcS5zZXJ2aWNlX2lkID0gY21hX2dldF9zZXJ2aWNlX2lkKGlkX3ByaXYtPmlkLnBzLAogCQkJCQkgICAgJnJvdXRlLT5hZGRyLmRzdF9hZGRyKTsKIAlyZXEucXBfbnVtID0gaWRfcHJpdi0+cXBfbnVtOwotCXJlcS5xcF90eXBlID0gaWRfcHJpdi0+cXBfdHlwZTsKKwlyZXEucXBfdHlwZSA9IElCX1FQVF9SQzsKIAlyZXEuc3RhcnRpbmdfcHNuID0gaWRfcHJpdi0+c2VxX251bTsKIAlyZXEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGNvbm5fcGFyYW0tPnJlc3BvbmRlcl9yZXNvdXJjZXM7CiAJcmVxLmluaXRpYXRvcl9kZXB0aCA9IGNvbm5fcGFyYW0tPmluaXRpYXRvcl9kZXB0aDsKQEAgLTE5MzcsMTMgKzIxMTMsMTUgQEAKIAogCWlmICghaWQtPnFwKSB7CiAJCWlkX3ByaXYtPnFwX251bSA9IGNvbm5fcGFyYW0tPnFwX251bTsKLQkJaWRfcHJpdi0+cXBfdHlwZSA9IGNvbm5fcGFyYW0tPnFwX3R5cGU7CiAJCWlkX3ByaXYtPnNycSA9IGNvbm5fcGFyYW0tPnNycTsKIAl9CiAKIAlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkpIHsKIAljYXNlIFJETUFfVFJBTlNQT1JUX0lCOgotCQlyZXQgPSBjbWFfY29ubmVjdF9pYihpZF9wcml2LCBjb25uX3BhcmFtKTsKKwkJaWYgKGlkLT5wcyA9PSBSRE1BX1BTX1VEUCkKKwkJCXJldCA9IGNtYV9yZXNvbHZlX2liX3VkcChpZF9wcml2LCBjb25uX3BhcmFtKTsKKwkJZWxzZQorCQkJcmV0ID0gY21hX2Nvbm5lY3RfaWIoaWRfcHJpdiwgY29ubl9wYXJhbSk7CiAJCWJyZWFrOwogCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CiAJCXJldCA9IGNtYV9jb25uZWN0X2l3KGlkX3ByaXYsIGNvbm5fcGFyYW0pOwpAQCAtMTk2NiwxMSArMjE0NCwyNSBAQAogCQkJIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pCiB7CiAJc3RydWN0IGliX2NtX3JlcF9wYXJhbSByZXA7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOworCWludCBxcF9hdHRyX21hc2ssIHJldDsKIAotCXJldCA9IGNtYV9tb2RpZnlfcXBfcnRyKCZpZF9wcml2LT5pZCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpZiAoaWRfcHJpdi0+aWQucXApIHsKKwkJcmV0ID0gY21hX21vZGlmeV9xcF9ydHIoJmlkX3ByaXYtPmlkKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCisJCXFwX2F0dHIucXBfc3RhdGUgPSBJQl9RUFNfUlRTOworCQlyZXQgPSBpYl9jbV9pbml0X3FwX2F0dHIoaWRfcHJpdi0+Y21faWQuaWIsICZxcF9hdHRyLAorCQkJCQkgJnFwX2F0dHJfbWFzayk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlxcF9hdHRyLm1heF9yZF9hdG9taWMgPSBjb25uX3BhcmFtLT5pbml0aWF0b3JfZGVwdGg7CisJCXJldCA9IGliX21vZGlmeV9xcChpZF9wcml2LT5pZC5xcCwgJnFwX2F0dHIsIHFwX2F0dHJfbWFzayk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CiAKIAltZW1zZXQoJnJlcCwgMCwgc2l6ZW9mIHJlcCk7CiAJcmVwLnFwX251bSA9IGlkX3ByaXYtPnFwX251bTsKQEAgLTE5ODUsNyArMjE3Nyw5IEBACiAJcmVwLnJucl9yZXRyeV9jb3VudCA9IGNvbm5fcGFyYW0tPnJucl9yZXRyeV9jb3VudDsKIAlyZXAuc3JxID0gaWRfcHJpdi0+c3JxID8gMSA6IDA7CiAKLQlyZXR1cm4gaWJfc2VuZF9jbV9yZXAoaWRfcHJpdi0+Y21faWQuaWIsICZyZXApOworCXJldCA9IGliX3NlbmRfY21fcmVwKGlkX3ByaXYtPmNtX2lkLmliLCAmcmVwKTsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGNtYV9hY2NlcHRfaXcoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKQEAgLTIwMTAsNiArMjIwNCwyNCBAQAogCXJldHVybiBpd19jbV9hY2NlcHQoaWRfcHJpdi0+Y21faWQuaXcsICZpd19wYXJhbSk7CiB9CiAKK3N0YXRpYyBpbnQgY21hX3NlbmRfc2lkcl9yZXAoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJCSAgICAgZW51bSBpYl9jbV9zaWRyX3N0YXR1cyBzdGF0dXMsCisJCQkgICAgIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YSwgaW50IHByaXZhdGVfZGF0YV9sZW4pCit7CisJc3RydWN0IGliX2NtX3NpZHJfcmVwX3BhcmFtIHJlcDsKKworCW1lbXNldCgmcmVwLCAwLCBzaXplb2YgcmVwKTsKKwlyZXAuc3RhdHVzID0gc3RhdHVzOworCWlmIChzdGF0dXMgPT0gSUJfU0lEUl9TVUNDRVNTKSB7CisJCXJlcC5xcF9udW0gPSBpZF9wcml2LT5xcF9udW07CisJCXJlcC5xa2V5ID0gUkRNQV9VRF9RS0VZOworCX0KKwlyZXAucHJpdmF0ZV9kYXRhID0gcHJpdmF0ZV9kYXRhOworCXJlcC5wcml2YXRlX2RhdGFfbGVuID0gcHJpdmF0ZV9kYXRhX2xlbjsKKworCXJldHVybiBpYl9zZW5kX2NtX3NpZHJfcmVwKGlkX3ByaXYtPmNtX2lkLmliLCAmcmVwKTsKK30KKwogaW50IHJkbWFfYWNjZXB0KHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqY29ubl9wYXJhbSkKIHsKIAlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OwpAQCAtMjAyMSwxMyArMjIzMywxNiBAQAogCiAJaWYgKCFpZC0+cXAgJiYgY29ubl9wYXJhbSkgewogCQlpZF9wcml2LT5xcF9udW0gPSBjb25uX3BhcmFtLT5xcF9udW07Ci0JCWlkX3ByaXYtPnFwX3R5cGUgPSBjb25uX3BhcmFtLT5xcF90eXBlOwogCQlpZF9wcml2LT5zcnEgPSBjb25uX3BhcmFtLT5zcnE7CiAJfQogCiAJc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpKSB7CiAJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKLQkJaWYgKGNvbm5fcGFyYW0pCisJCWlmIChpZC0+cHMgPT0gUkRNQV9QU19VRFApCisJCQlyZXQgPSBjbWFfc2VuZF9zaWRyX3JlcChpZF9wcml2LCBJQl9TSURSX1NVQ0NFU1MsCisJCQkJCQljb25uX3BhcmFtLT5wcml2YXRlX2RhdGEsCisJCQkJCQljb25uX3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuKTsKKwkJZWxzZSBpZiAoY29ubl9wYXJhbSkKIAkJCXJldCA9IGNtYV9hY2NlcHRfaWIoaWRfcHJpdiwgY29ubl9wYXJhbSk7CiAJCWVsc2UKIAkJCXJldCA9IGNtYV9yZXBfcmVjdihpZF9wcml2KTsKQEAgLTIwNTEsNiArMjI2NiwyNyBAQAogfQogRVhQT1JUX1NZTUJPTChyZG1hX2FjY2VwdCk7CiAKK2ludCByZG1hX25vdGlmeShzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGVudW0gaWJfZXZlbnRfdHlwZSBldmVudCkKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCWludCByZXQ7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJaWYgKCFjbWFfY29tcChpZF9wcml2LCBDTUFfQ09OTkVDVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpIHsKKwljYXNlIFJETUFfTk9ERV9JQl9DQToKKwkJcmV0ID0gaWJfY21fbm90aWZ5KGlkX3ByaXYtPmNtX2lkLmliLCBldmVudCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX25vdGlmeSk7CisKIGludCByZG1hX3JlamVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YSwKIAkJdTggcHJpdmF0ZV9kYXRhX2xlbikKIHsKQEAgLTIwNjMsOSArMjI5OSwxMyBAQAogCiAJc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpKSB7CiAJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKLQkJcmV0ID0gaWJfc2VuZF9jbV9yZWooaWRfcHJpdi0+Y21faWQuaWIsCi0JCQkJICAgICBJQl9DTV9SRUpfQ09OU1VNRVJfREVGSU5FRCwgTlVMTCwgMCwKLQkJCQkgICAgIHByaXZhdGVfZGF0YSwgcHJpdmF0ZV9kYXRhX2xlbik7CisJCWlmIChpZC0+cHMgPT0gUkRNQV9QU19VRFApCisJCQlyZXQgPSBjbWFfc2VuZF9zaWRyX3JlcChpZF9wcml2LCBJQl9TSURSX1JFSkVDVCwKKwkJCQkJCXByaXZhdGVfZGF0YSwgcHJpdmF0ZV9kYXRhX2xlbik7CisJCWVsc2UKKwkJCXJldCA9IGliX3NlbmRfY21fcmVqKGlkX3ByaXYtPmNtX2lkLmliLAorCQkJCQkgICAgIElCX0NNX1JFSl9DT05TVU1FUl9ERUZJTkVELCBOVUxMLAorCQkJCQkgICAgIDAsIHByaXZhdGVfZGF0YSwgcHJpdmF0ZV9kYXRhX2xlbik7CiAJCWJyZWFrOwogCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CiAJCXJldCA9IGl3X2NtX3JlamVjdChpZF9wcml2LT5jbV9pZC5pdywKQEAgLTIxMzYsNiArMjM3Niw3IEBACiAKIHN0YXRpYyBpbnQgY21hX3JlbW92ZV9pZF9kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKIHsKKwlzdHJ1Y3QgcmRtYV9jbV9ldmVudCBldmVudDsKIAllbnVtIGNtYV9zdGF0ZSBzdGF0ZTsKIAogCS8qIFJlY29yZCB0aGF0IHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBkZXZpY2UgKi8KQEAgLTIxNTAsOCArMjM5MSw5IEBACiAJaWYgKCFjbWFfY29tcChpZF9wcml2LCBDTUFfREVWSUNFX1JFTU9WQUwpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBjbWFfbm90aWZ5X3VzZXIoaWRfcHJpdiwgUkRNQV9DTV9FVkVOVF9ERVZJQ0VfUkVNT1ZBTCwKLQkJCSAgICAgICAwLCBOVUxMLCAwKTsKKwltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YgZXZlbnQpOworCWV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9ERVZJQ0VfUkVNT1ZBTDsKKwlyZXR1cm4gaWRfcHJpdi0+aWQuZXZlbnRfaGFuZGxlcigmaWRfcHJpdi0+aWQsICZldmVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNtYV9wcm9jZXNzX3JlbW92ZShzdHJ1Y3QgY21hX2RldmljZSAqY21hX2RldikKQEAgLTIyMzMsNiArMjQ3NSw3IEBACiAJZGVzdHJveV93b3JrcXVldWUoY21hX3dxKTsKIAlpZHJfZGVzdHJveSgmc2RwX3BzKTsKIAlpZHJfZGVzdHJveSgmdGNwX3BzKTsKKwlpZHJfZGVzdHJveSgmdWRwX3BzKTsKIH0KIAogbW9kdWxlX2luaXQoY21hX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZm1yX3Bvb2wuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Ztcl9wb29sLmMKaW5kZXggODZhM2IyZC4uODkyNmEyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZm1yX3Bvb2wuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9mbXJfcG9vbC5jCkBAIC0zOTQsMjAgKzM5NCwxMiBAQAogICovCiBpbnQgaWJfZmx1c2hfZm1yX3Bvb2woc3RydWN0IGliX2Ztcl9wb29sICpwb29sKQogewotCWludCBzZXJpYWw7Ci0KLQlhdG9taWNfaW5jKCZwb29sLT5yZXFfc2VyKTsKLQkvKgotCSAqIEl0J3MgT0sgaWYgc29tZW9uZSBlbHNlIGJ1bXBzIHJlcV9zZXIgYWdhaW4gaGVyZSAtLSB3ZSdsbAotCSAqIGp1c3Qgd2FpdCBhIGxpdHRsZSBsb25nZXIuCi0JICovCi0Jc2VyaWFsID0gYXRvbWljX3JlYWQoJnBvb2wtPnJlcV9zZXIpOworCWludCBzZXJpYWwgPSBhdG9taWNfaW5jX3JldHVybigmcG9vbC0+cmVxX3Nlcik7CiAKIAl3YWtlX3VwX3Byb2Nlc3MocG9vbC0+dGhyZWFkKTsKIAogCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocG9vbC0+Zm9yY2Vfd2FpdCwKLQkJCQkgICAgIGF0b21pY19yZWFkKCZwb29sLT5mbHVzaF9zZXIpIC0KLQkJCQkgICAgIGF0b21pY19yZWFkKCZwb29sLT5yZXFfc2VyKSA+PSAwKSkKKwkJCQkgICAgIGF0b21pY19yZWFkKCZwb29sLT5mbHVzaF9zZXIpIC0gc2VyaWFsID49IDApKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCmluZGV4IDE1ZjM4ZDkuLjVlZDE0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCkBAIC05OTgsMTcgKzk5OCwxNyBAQAogCiAJbWFkX2FnZW50ID0gbWFkX3NlbmRfd3ItPnNlbmRfYnVmLm1hZF9hZ2VudDsKIAlzZ2UgPSBtYWRfc2VuZF93ci0+c2dfbGlzdDsKLQlzZ2VbMF0uYWRkciA9IGRtYV9tYXBfc2luZ2xlKG1hZF9hZ2VudC0+ZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCSAgICAgbWFkX3NlbmRfd3ItPnNlbmRfYnVmLm1hZCwKLQkJCQkgICAgIHNnZVswXS5sZW5ndGgsCi0JCQkJICAgICBETUFfVE9fREVWSUNFKTsKLQlwY2lfdW5tYXBfYWRkcl9zZXQobWFkX3NlbmRfd3IsIGhlYWRlcl9tYXBwaW5nLCBzZ2VbMF0uYWRkcik7CisJc2dlWzBdLmFkZHIgPSBpYl9kbWFfbWFwX3NpbmdsZShtYWRfYWdlbnQtPmRldmljZSwKKwkJCQkJbWFkX3NlbmRfd3ItPnNlbmRfYnVmLm1hZCwKKwkJCQkJc2dlWzBdLmxlbmd0aCwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CisJbWFkX3NlbmRfd3ItPmhlYWRlcl9tYXBwaW5nID0gc2dlWzBdLmFkZHI7CiAKLQlzZ2VbMV0uYWRkciA9IGRtYV9tYXBfc2luZ2xlKG1hZF9hZ2VudC0+ZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCSAgICAgaWJfZ2V0X3BheWxvYWQobWFkX3NlbmRfd3IpLAotCQkJCSAgICAgc2dlWzFdLmxlbmd0aCwKLQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOwotCXBjaV91bm1hcF9hZGRyX3NldChtYWRfc2VuZF93ciwgcGF5bG9hZF9tYXBwaW5nLCBzZ2VbMV0uYWRkcik7CisJc2dlWzFdLmFkZHIgPSBpYl9kbWFfbWFwX3NpbmdsZShtYWRfYWdlbnQtPmRldmljZSwKKwkJCQkJaWJfZ2V0X3BheWxvYWQobWFkX3NlbmRfd3IpLAorCQkJCQlzZ2VbMV0ubGVuZ3RoLAorCQkJCQlETUFfVE9fREVWSUNFKTsKKwltYWRfc2VuZF93ci0+cGF5bG9hZF9tYXBwaW5nID0gc2dlWzFdLmFkZHI7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXBfaW5mby0+c2VuZF9xdWV1ZS5sb2NrLCBmbGFncyk7CiAJaWYgKHFwX2luZm8tPnNlbmRfcXVldWUuY291bnQgPCBxcF9pbmZvLT5zZW5kX3F1ZXVlLm1heF9hY3RpdmUpIHsKQEAgLTEwMjYsMTIgKzEwMjYsMTIgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXBfaW5mby0+c2VuZF9xdWV1ZS5sb2NrLCBmbGFncyk7CiAJaWYgKHJldCkgewotCQlkbWFfdW5tYXBfc2luZ2xlKG1hZF9hZ2VudC0+ZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCSBwY2lfdW5tYXBfYWRkcihtYWRfc2VuZF93ciwgaGVhZGVyX21hcHBpbmcpLAotCQkJCSBzZ2VbMF0ubGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKLQkJZG1hX3VubWFwX3NpbmdsZShtYWRfYWdlbnQtPmRldmljZS0+ZG1hX2RldmljZSwKLQkJCQkgcGNpX3VubWFwX2FkZHIobWFkX3NlbmRfd3IsIHBheWxvYWRfbWFwcGluZyksCi0JCQkJIHNnZVsxXS5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCQlpYl9kbWFfdW5tYXBfc2luZ2xlKG1hZF9hZ2VudC0+ZGV2aWNlLAorCQkJCSAgICBtYWRfc2VuZF93ci0+aGVhZGVyX21hcHBpbmcsCisJCQkJICAgIHNnZVswXS5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCQlpYl9kbWFfdW5tYXBfc2luZ2xlKG1hZF9hZ2VudC0+ZGV2aWNlLAorCQkJCSAgICBtYWRfc2VuZF93ci0+cGF5bG9hZF9tYXBwaW5nLAorCQkJCSAgICBzZ2VbMV0ubGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4NTAsMTEgKzE4NTAsMTEgQEAKIAltYWRfcHJpdl9oZHIgPSBjb250YWluZXJfb2YobWFkX2xpc3QsIHN0cnVjdCBpYl9tYWRfcHJpdmF0ZV9oZWFkZXIsCiAJCQkJICAgIG1hZF9saXN0KTsKIAlyZWN2ID0gY29udGFpbmVyX29mKG1hZF9wcml2X2hkciwgc3RydWN0IGliX21hZF9wcml2YXRlLCBoZWFkZXIpOwotCWRtYV91bm1hcF9zaW5nbGUocG9ydF9wcml2LT5kZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkgcGNpX3VubWFwX2FkZHIoJnJlY3YtPmhlYWRlciwgbWFwcGluZyksCi0JCQkgc2l6ZW9mKHN0cnVjdCBpYl9tYWRfcHJpdmF0ZSkgLQotCQkJIHNpemVvZihzdHJ1Y3QgaWJfbWFkX3ByaXZhdGVfaGVhZGVyKSwKLQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCWliX2RtYV91bm1hcF9zaW5nbGUocG9ydF9wcml2LT5kZXZpY2UsCisJCQkgICAgcmVjdi0+aGVhZGVyLm1hcHBpbmcsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpYl9tYWRfcHJpdmF0ZSkgLQorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpYl9tYWRfcHJpdmF0ZV9oZWFkZXIpLAorCQkJICAgIERNQV9GUk9NX0RFVklDRSk7CiAKIAkvKiBTZXR1cCBNQUQgcmVjZWl2ZSB3b3JrIGNvbXBsZXRpb24gZnJvbSAibm9ybWFsIiB3b3JrIGNvbXBsZXRpb24gKi8KIAlyZWN2LT5oZWFkZXIud2MgPSAqd2M7CkBAIC0yMDgwLDEyICsyMDgwLDEyIEBACiAJcXBfaW5mbyA9IHNlbmRfcXVldWUtPnFwX2luZm87CiAKIHJldHJ5OgotCWRtYV91bm1hcF9zaW5nbGUobWFkX3NlbmRfd3ItPnNlbmRfYnVmLm1hZF9hZ2VudC0+ZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJIHBjaV91bm1hcF9hZGRyKG1hZF9zZW5kX3dyLCBoZWFkZXJfbWFwcGluZyksCi0JCQkgbWFkX3NlbmRfd3ItPnNnX2xpc3RbMF0ubGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKLQlkbWFfdW5tYXBfc2luZ2xlKG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5tYWRfYWdlbnQtPmRldmljZS0+ZG1hX2RldmljZSwKLQkJCSBwY2lfdW5tYXBfYWRkcihtYWRfc2VuZF93ciwgcGF5bG9hZF9tYXBwaW5nKSwKLQkJCSBtYWRfc2VuZF93ci0+c2dfbGlzdFsxXS5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCWliX2RtYV91bm1hcF9zaW5nbGUobWFkX3NlbmRfd3ItPnNlbmRfYnVmLm1hZF9hZ2VudC0+ZGV2aWNlLAorCQkJICAgIG1hZF9zZW5kX3dyLT5oZWFkZXJfbWFwcGluZywKKwkJCSAgICBtYWRfc2VuZF93ci0+c2dfbGlzdFswXS5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCWliX2RtYV91bm1hcF9zaW5nbGUobWFkX3NlbmRfd3ItPnNlbmRfYnVmLm1hZF9hZ2VudC0+ZGV2aWNlLAorCQkJICAgIG1hZF9zZW5kX3dyLT5wYXlsb2FkX21hcHBpbmcsCisJCQkgICAgbWFkX3NlbmRfd3ItPnNnX2xpc3RbMV0ubGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKIAlxdWV1ZWRfc2VuZF93ciA9IE5VTEw7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbmRfcXVldWUtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmbWFkX2xpc3QtPmxpc3QpOwpAQCAtMjUyOCwxMyArMjUyOCwxMiBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCXNnX2xpc3QuYWRkciA9IGRtYV9tYXBfc2luZ2xlKHFwX2luZm8tPnBvcnRfcHJpdi0+Ci0JCQkJCSAgICAgICAgZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCQkgICAgICAmbWFkX3ByaXYtPmdyaCwKLQkJCQkJICAgICAgc2l6ZW9mICptYWRfcHJpdiAtCi0JCQkJCSAgICAgICAgc2l6ZW9mIG1hZF9wcml2LT5oZWFkZXIsCi0JCQkJCSAgICAgIERNQV9GUk9NX0RFVklDRSk7Ci0JCXBjaV91bm1hcF9hZGRyX3NldCgmbWFkX3ByaXYtPmhlYWRlciwgbWFwcGluZywgc2dfbGlzdC5hZGRyKTsKKwkJc2dfbGlzdC5hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUocXBfaW5mby0+cG9ydF9wcml2LT5kZXZpY2UsCisJCQkJCQkgJm1hZF9wcml2LT5ncmgsCisJCQkJCQkgc2l6ZW9mICptYWRfcHJpdiAtCisJCQkJCQkgICBzaXplb2YgbWFkX3ByaXYtPmhlYWRlciwKKwkJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQltYWRfcHJpdi0+aGVhZGVyLm1hcHBpbmcgPSBzZ19saXN0LmFkZHI7CiAJCXJlY3Zfd3Iud3JfaWQgPSAodW5zaWduZWQgbG9uZykmbWFkX3ByaXYtPmhlYWRlci5tYWRfbGlzdDsKIAkJbWFkX3ByaXYtPmhlYWRlci5tYWRfbGlzdC5tYWRfcXVldWUgPSByZWN2X3F1ZXVlOwogCkBAIC0yNTQ5LDEyICsyNTQ4LDExIEBACiAJCQlsaXN0X2RlbCgmbWFkX3ByaXYtPmhlYWRlci5tYWRfbGlzdC5saXN0KTsKIAkJCXJlY3ZfcXVldWUtPmNvdW50LS07CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZWN2X3F1ZXVlLT5sb2NrLCBmbGFncyk7Ci0JCQlkbWFfdW5tYXBfc2luZ2xlKHFwX2luZm8tPnBvcnRfcHJpdi0+ZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCQkgcGNpX3VubWFwX2FkZHIoJm1hZF9wcml2LT5oZWFkZXIsCi0JCQkJCQkJbWFwcGluZyksCi0JCQkJCSBzaXplb2YgKm1hZF9wcml2IC0KLQkJCQkJICAgc2l6ZW9mIG1hZF9wcml2LT5oZWFkZXIsCi0JCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQkJaWJfZG1hX3VubWFwX3NpbmdsZShxcF9pbmZvLT5wb3J0X3ByaXYtPmRldmljZSwKKwkJCQkJICAgIG1hZF9wcml2LT5oZWFkZXIubWFwcGluZywKKwkJCQkJICAgIHNpemVvZiAqbWFkX3ByaXYgLQorCQkJCQkgICAgICBzaXplb2YgbWFkX3ByaXYtPmhlYWRlciwKKwkJCQkJICAgIERNQV9GUk9NX0RFVklDRSk7CiAJCQlrbWVtX2NhY2hlX2ZyZWUoaWJfbWFkX2NhY2hlLCBtYWRfcHJpdik7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJpYl9wb3N0X3JlY3YgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJCWJyZWFrOwpAQCAtMjU4NiwxMSArMjU4NCwxMSBAQAogCQkvKiBSZW1vdmUgZnJvbSBwb3N0ZWQgcmVjZWl2ZSBNQUQgbGlzdCAqLwogCQlsaXN0X2RlbCgmbWFkX2xpc3QtPmxpc3QpOwogCi0JCWRtYV91bm1hcF9zaW5nbGUocXBfaW5mby0+cG9ydF9wcml2LT5kZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJIHBjaV91bm1hcF9hZGRyKCZyZWN2LT5oZWFkZXIsIG1hcHBpbmcpLAotCQkJCSBzaXplb2Yoc3RydWN0IGliX21hZF9wcml2YXRlKSAtCi0JCQkJIHNpemVvZihzdHJ1Y3QgaWJfbWFkX3ByaXZhdGVfaGVhZGVyKSwKLQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwkJaWJfZG1hX3VubWFwX3NpbmdsZShxcF9pbmZvLT5wb3J0X3ByaXYtPmRldmljZSwKKwkJCQkgICAgcmVjdi0+aGVhZGVyLm1hcHBpbmcsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgaWJfbWFkX3ByaXZhdGUpIC0KKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGliX21hZF9wcml2YXRlX2hlYWRlciksCisJCQkJICAgIERNQV9GUk9NX0RFVklDRSk7CiAJCWttZW1fY2FjaGVfZnJlZShpYl9tYWRfY2FjaGUsIHJlY3YpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3ByaXYuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmgKaW5kZXggZDU1NDhlNy4uZGU4OTcxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3ByaXYuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oCkBAIC03Myw3ICs3Myw3IEBACiAJc3RydWN0IGliX21hZF9saXN0X2hlYWQgbWFkX2xpc3Q7CiAJc3RydWN0IGliX21hZF9yZWN2X3djIHJlY3Zfd2M7CiAJc3RydWN0IGliX3djIHdjOwotCURFQ0xBUkVfUENJX1VOTUFQX0FERFIobWFwcGluZykKKwl1NjQgbWFwcGluZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaWJfbWFkX3ByaXZhdGUgewpAQCAtMTI2LDggKzEyNiw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBhZ2VudF9saXN0OwogCXN0cnVjdCBpYl9tYWRfYWdlbnRfcHJpdmF0ZSAqbWFkX2FnZW50X3ByaXY7CiAJc3RydWN0IGliX21hZF9zZW5kX2J1ZiBzZW5kX2J1ZjsKLQlERUNMQVJFX1BDSV9VTk1BUF9BRERSKGhlYWRlcl9tYXBwaW5nKQotCURFQ0xBUkVfUENJX1VOTUFQX0FERFIocGF5bG9hZF9tYXBwaW5nKQorCXU2NCBoZWFkZXJfbWFwcGluZzsKKwl1NjQgcGF5bG9hZF9tYXBwaW5nOwogCXN0cnVjdCBpYl9zZW5kX3dyIHNlbmRfd3I7CiAJc3RydWN0IGliX3NnZSBzZ19saXN0W0lCX01BRF9TRU5EX1JFUV9NQVhfU0ddOwogCV9fYmU2NCB0aWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJlOGQzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwpAQCAtMCwwICsxLDg4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqCWNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKglkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKgljb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICoJZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKglwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorCisjaW5jbHVkZSA8cmRtYS9yZG1hX3VzZXJfY20uaD4KKyNpbmNsdWRlIDxyZG1hL2liX21hcnNoYWxsLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisKK01PRFVMRV9BVVRIT1IoIlNlYW4gSGVmdHkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUkRNQSBVc2Vyc3BhY2UgQ29ubmVjdGlvbiBNYW5hZ2VyIEFjY2VzcyIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworCitlbnVtIHsKKwlVQ01BX01BWF9CQUNLTE9HCT0gMTI4Cit9OworCitzdHJ1Y3QgdWNtYV9maWxlIHsKKwlzdHJ1Y3QgbXV0ZXgJCW11dDsKKwlzdHJ1Y3QgZmlsZQkJKmZpbHA7CisJc3RydWN0IGxpc3RfaGVhZAljdHhfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWV2ZW50X2xpc3Q7CisJd2FpdF9xdWV1ZV9oZWFkX3QJcG9sbF93YWl0OworfTsKKworc3RydWN0IHVjbWFfY29udGV4dCB7CisJaW50CQkJaWQ7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcDsKKwlhdG9taWNfdAkJcmVmOworCWludAkJCWV2ZW50c19yZXBvcnRlZDsKKwlpbnQJCQliYWNrbG9nOworCisJc3RydWN0IHVjbWFfZmlsZQkqZmlsZTsKKwlzdHJ1Y3QgcmRtYV9jbV9pZAkqY21faWQ7CisJdTY0CQkJdWlkOworCisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworfTsKKworc3RydWN0IHVjbWFfZXZlbnQgeworCXN0cnVjdCB1Y21hX2NvbnRleHQJKmN0eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHJkbWFfY21faWQJKmNtX2lkOworCXN0cnVjdCByZG1hX3VjbV9ldmVudF9yZXNwIHJlc3A7Cit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKG11dCk7CitzdGF0aWMgREVGSU5FX0lEUihjdHhfaWRyKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdWNtYV9jb250ZXh0ICpfdWNtYV9maW5kX2NvbnRleHQoaW50IGlkLAorCQkJCQkJICAgICAgc3RydWN0IHVjbWFfZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdWNtYV9jb250ZXh0ICpjdHg7CisKKwljdHggPSBpZHJfZmluZCgmY3R4X2lkciwgaWQpOworCWlmICghY3R4KQorCQljdHggPSBFUlJfUFRSKC1FTk9FTlQpOworCWVsc2UgaWYgKGN0eC0+ZmlsZSAhPSBmaWxlKQorCQljdHggPSBFUlJfUFRSKC1FSU5WQUwpOworCXJldHVybiBjdHg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWNtYV9jb250ZXh0ICp1Y21hX2dldF9jdHgoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwgaW50IGlkKQoreworCXN0cnVjdCB1Y21hX2NvbnRleHQgKmN0eDsKKworCW11dGV4X2xvY2soJm11dCk7CisJY3R4ID0gX3VjbWFfZmluZF9jb250ZXh0KGlkLCBmaWxlKTsKKwlpZiAoIUlTX0VSUihjdHgpKQorCQlhdG9taWNfaW5jKCZjdHgtPnJlZik7CisJbXV0ZXhfdW5sb2NrKCZtdXQpOworCXJldHVybiBjdHg7Cit9CisKK3N0YXRpYyB2b2lkIHVjbWFfcHV0X2N0eChzdHJ1Y3QgdWNtYV9jb250ZXh0ICpjdHgpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmN0eC0+cmVmKSkKKwkJY29tcGxldGUoJmN0eC0+Y29tcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWNtYV9jb250ZXh0ICp1Y21hX2FsbG9jX2N0eChzdHJ1Y3QgdWNtYV9maWxlICpmaWxlKQoreworCXN0cnVjdCB1Y21hX2NvbnRleHQgKmN0eDsKKwlpbnQgcmV0OworCisJY3R4ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOworCWlmICghY3R4KQorCQlyZXR1cm4gTlVMTDsKKworCWF0b21pY19zZXQoJmN0eC0+cmVmLCAxKTsKKwlpbml0X2NvbXBsZXRpb24oJmN0eC0+Y29tcCk7CisJY3R4LT5maWxlID0gZmlsZTsKKworCWRvIHsKKwkJcmV0ID0gaWRyX3ByZV9nZXQoJmN0eF9pZHIsIEdGUF9LRVJORUwpOworCQlpZiAoIXJldCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJbXV0ZXhfbG9jaygmbXV0KTsKKwkJcmV0ID0gaWRyX2dldF9uZXcoJmN0eF9pZHIsIGN0eCwgJmN0eC0+aWQpOworCQltdXRleF91bmxvY2soJm11dCk7CisJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOworCisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCWxpc3RfYWRkX3RhaWwoJmN0eC0+bGlzdCwgJmZpbGUtPmN0eF9saXN0KTsKKwlyZXR1cm4gY3R4OworCitlcnJvcjoKKwlrZnJlZShjdHgpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB1Y21hX2NvcHlfY29ubl9ldmVudChzdHJ1Y3QgcmRtYV91Y21fY29ubl9wYXJhbSAqZHN0LAorCQkJCSBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpzcmMpCit7CisJaWYgKHNyYy0+cHJpdmF0ZV9kYXRhX2xlbikKKwkJbWVtY3B5KGRzdC0+cHJpdmF0ZV9kYXRhLCBzcmMtPnByaXZhdGVfZGF0YSwKKwkJICAgICAgIHNyYy0+cHJpdmF0ZV9kYXRhX2xlbik7CisJZHN0LT5wcml2YXRlX2RhdGFfbGVuID0gc3JjLT5wcml2YXRlX2RhdGFfbGVuOworCWRzdC0+cmVzcG9uZGVyX3Jlc291cmNlcyA9c3JjLT5yZXNwb25kZXJfcmVzb3VyY2VzOworCWRzdC0+aW5pdGlhdG9yX2RlcHRoID0gc3JjLT5pbml0aWF0b3JfZGVwdGg7CisJZHN0LT5mbG93X2NvbnRyb2wgPSBzcmMtPmZsb3dfY29udHJvbDsKKwlkc3QtPnJldHJ5X2NvdW50ID0gc3JjLT5yZXRyeV9jb3VudDsKKwlkc3QtPnJucl9yZXRyeV9jb3VudCA9IHNyYy0+cm5yX3JldHJ5X2NvdW50OworCWRzdC0+c3JxID0gc3JjLT5zcnE7CisJZHN0LT5xcF9udW0gPSBzcmMtPnFwX251bTsKK30KKworc3RhdGljIHZvaWQgdWNtYV9jb3B5X3VkX2V2ZW50KHN0cnVjdCByZG1hX3VjbV91ZF9wYXJhbSAqZHN0LAorCQkJICAgICAgIHN0cnVjdCByZG1hX3VkX3BhcmFtICpzcmMpCit7CisJaWYgKHNyYy0+cHJpdmF0ZV9kYXRhX2xlbikKKwkJbWVtY3B5KGRzdC0+cHJpdmF0ZV9kYXRhLCBzcmMtPnByaXZhdGVfZGF0YSwKKwkJICAgICAgIHNyYy0+cHJpdmF0ZV9kYXRhX2xlbik7CisJZHN0LT5wcml2YXRlX2RhdGFfbGVuID0gc3JjLT5wcml2YXRlX2RhdGFfbGVuOworCWliX2NvcHlfYWhfYXR0cl90b191c2VyKCZkc3QtPmFoX2F0dHIsICZzcmMtPmFoX2F0dHIpOworCWRzdC0+cXBfbnVtID0gc3JjLT5xcF9udW07CisJZHN0LT5xa2V5ID0gc3JjLT5xa2V5OworfQorCitzdGF0aWMgdm9pZCB1Y21hX3NldF9ldmVudF9jb250ZXh0KHN0cnVjdCB1Y21hX2NvbnRleHQgKmN0eCwKKwkJCQkgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQsCisJCQkJICAgc3RydWN0IHVjbWFfZXZlbnQgKnVldmVudCkKK3sKKwl1ZXZlbnQtPmN0eCA9IGN0eDsKKwl1ZXZlbnQtPnJlc3AudWlkID0gY3R4LT51aWQ7CisJdWV2ZW50LT5yZXNwLmlkID0gY3R4LT5pZDsKK30KKworc3RhdGljIGludCB1Y21hX2V2ZW50X2hhbmRsZXIoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJICAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCB1Y21hX2V2ZW50ICp1ZXZlbnQ7CisJc3RydWN0IHVjbWFfY29udGV4dCAqY3R4ID0gY21faWQtPmNvbnRleHQ7CisJaW50IHJldCA9IDA7CisKKwl1ZXZlbnQgPSBremFsbG9jKHNpemVvZigqdWV2ZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1ZXZlbnQpCisJCXJldHVybiBldmVudC0+ZXZlbnQgPT0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1Q7CisKKwl1ZXZlbnQtPmNtX2lkID0gY21faWQ7CisJdWNtYV9zZXRfZXZlbnRfY29udGV4dChjdHgsIGV2ZW50LCB1ZXZlbnQpOworCXVldmVudC0+cmVzcC5ldmVudCA9IGV2ZW50LT5ldmVudDsKKwl1ZXZlbnQtPnJlc3Auc3RhdHVzID0gZXZlbnQtPnN0YXR1czsKKwlpZiAoY21faWQtPnBzID09IFJETUFfUFNfVURQKQorCQl1Y21hX2NvcHlfdWRfZXZlbnQoJnVldmVudC0+cmVzcC5wYXJhbS51ZCwgJmV2ZW50LT5wYXJhbS51ZCk7CisJZWxzZQorCQl1Y21hX2NvcHlfY29ubl9ldmVudCgmdWV2ZW50LT5yZXNwLnBhcmFtLmNvbm4sCisJCQkJICAgICAmZXZlbnQtPnBhcmFtLmNvbm4pOworCisJbXV0ZXhfbG9jaygmY3R4LT5maWxlLT5tdXQpOworCWlmIChldmVudC0+ZXZlbnQgPT0gUkRNQV9DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1QpIHsKKwkJaWYgKCFjdHgtPmJhY2tsb2cpIHsKKwkJCXJldCA9IC1FRFFVT1Q7CisJCQlrZnJlZSh1ZXZlbnQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJY3R4LT5iYWNrbG9nLS07CisJfSBlbHNlIGlmICghY3R4LT51aWQpIHsKKwkJLyoKKwkJICogV2UgaWdub3JlIGV2ZW50cyBmb3IgbmV3IGNvbm5lY3Rpb25zIHVudGlsIHVzZXJzcGFjZSBoYXMgc2V0CisJCSAqIHRoZWlyIGNvbnRleHQuICBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiBhbiBlcnJvciBvY2N1cnMgb24gYQorCQkgKiBuZXcgY29ubmVjdGlvbiBiZWZvcmUgdGhlIHVzZXIgYWNjZXB0cyBpdC4gIFRoaXMgaXMgb2theSwKKwkJICogc2luY2UgdGhlIGFjY2VwdCB3aWxsIGp1c3QgZmFpbCBsYXRlci4KKwkJICovCisJCWtmcmVlKHVldmVudCk7CisJCWdvdG8gb3V0OworCX0KKworCWxpc3RfYWRkX3RhaWwoJnVldmVudC0+bGlzdCwgJmN0eC0+ZmlsZS0+ZXZlbnRfbGlzdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjdHgtPmZpbGUtPnBvbGxfd2FpdCk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjdHgtPmZpbGUtPm11dCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9nZXRfZXZlbnQoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAorCQkJICAgICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IHVjbWFfY29udGV4dCAqY3R4OworCXN0cnVjdCByZG1hX3VjbV9nZXRfZXZlbnQgY21kOworCXN0cnVjdCB1Y21hX2V2ZW50ICp1ZXZlbnQ7CisJaW50IHJldCA9IDA7CisJREVGSU5FX1dBSVQod2FpdCk7CisKKwlpZiAob3V0X2xlbiA8IHNpemVvZiB1ZXZlbnQtPnJlc3ApCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGluYnVmLCBzaXplb2YoY21kKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJbXV0ZXhfbG9jaygmZmlsZS0+bXV0KTsKKwl3aGlsZSAobGlzdF9lbXB0eSgmZmlsZS0+ZXZlbnRfbGlzdCkpIHsKKwkJaWYgKGZpbGUtPmZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCWJyZWFrOworCQl9CisKKwkJcHJlcGFyZV90b193YWl0KCZmaWxlLT5wb2xsX3dhaXQsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQltdXRleF91bmxvY2soJmZpbGUtPm11dCk7CisJCXNjaGVkdWxlKCk7CisJCW11dGV4X2xvY2soJmZpbGUtPm11dCk7CisJCWZpbmlzaF93YWl0KCZmaWxlLT5wb2xsX3dhaXQsICZ3YWl0KTsKKwl9CisKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwl1ZXZlbnQgPSBsaXN0X2VudHJ5KGZpbGUtPmV2ZW50X2xpc3QubmV4dCwgc3RydWN0IHVjbWFfZXZlbnQsIGxpc3QpOworCisJaWYgKHVldmVudC0+cmVzcC5ldmVudCA9PSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVCkgeworCQljdHggPSB1Y21hX2FsbG9jX2N0eChmaWxlKTsKKwkJaWYgKCFjdHgpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJdWV2ZW50LT5jdHgtPmJhY2tsb2crKzsKKwkJY3R4LT5jbV9pZCA9IHVldmVudC0+Y21faWQ7CisJCWN0eC0+Y21faWQtPmNvbnRleHQgPSBjdHg7CisJCXVldmVudC0+cmVzcC5pZCA9IGN0eC0+aWQ7CisJfQorCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljbWQucmVzcG9uc2UsCisJCQkgJnVldmVudC0+cmVzcCwgc2l6ZW9mIHVldmVudC0+cmVzcCkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBkb25lOworCX0KKworCWxpc3RfZGVsKCZ1ZXZlbnQtPmxpc3QpOworCXVldmVudC0+Y3R4LT5ldmVudHNfcmVwb3J0ZWQrKzsKKwlrZnJlZSh1ZXZlbnQpOworZG9uZToKKwltdXRleF91bmxvY2soJmZpbGUtPm11dCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9jcmVhdGVfaWQoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwKKwkJCQljb25zdCBjaGFyIF9fdXNlciAqaW5idWYsCisJCQkJaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IHJkbWFfdWNtX2NyZWF0ZV9pZCBjbWQ7CisJc3RydWN0IHJkbWFfdWNtX2NyZWF0ZV9pZF9yZXNwIHJlc3A7CisJc3RydWN0IHVjbWFfY29udGV4dCAqY3R4OworCWludCByZXQ7CisKKwlpZiAob3V0X2xlbiA8IHNpemVvZihyZXNwKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgaW5idWYsIHNpemVvZihjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltdXRleF9sb2NrKCZmaWxlLT5tdXQpOworCWN0eCA9IHVjbWFfYWxsb2NfY3R4KGZpbGUpOworCW11dGV4X3VubG9jaygmZmlsZS0+bXV0KTsKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljdHgtPnVpZCA9IGNtZC51aWQ7CisJY3R4LT5jbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHVjbWFfZXZlbnRfaGFuZGxlciwgY3R4LCBjbWQucHMpOworCWlmIChJU19FUlIoY3R4LT5jbV9pZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihjdHgtPmNtX2lkKTsKKwkJZ290byBlcnIxOworCX0KKworCXJlc3AuaWQgPSBjdHgtPmlkOworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpY21kLnJlc3BvbnNlLAorCQkJICZyZXNwLCBzaXplb2YocmVzcCkpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyMjsKKwl9CisJcmV0dXJuIDA7CisKK2VycjI6CisJcmRtYV9kZXN0cm95X2lkKGN0eC0+Y21faWQpOworZXJyMToKKwltdXRleF9sb2NrKCZtdXQpOworCWlkcl9yZW1vdmUoJmN0eF9pZHIsIGN0eC0+aWQpOworCW11dGV4X3VubG9jaygmbXV0KTsKKwlrZnJlZShjdHgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHVjbWFfY2xlYW51cF9ldmVudHMoc3RydWN0IHVjbWFfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCB1Y21hX2V2ZW50ICp1ZXZlbnQsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodWV2ZW50LCB0bXAsICZjdHgtPmZpbGUtPmV2ZW50X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHVldmVudC0+Y3R4ICE9IGN0eCkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZGVsKCZ1ZXZlbnQtPmxpc3QpOworCisJCS8qIGNsZWFyIGluY29taW5nIGNvbm5lY3Rpb25zLiAqLworCQlpZiAodWV2ZW50LT5yZXNwLmV2ZW50ID09IFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNUKQorCQkJcmRtYV9kZXN0cm95X2lkKHVldmVudC0+Y21faWQpOworCisJCWtmcmVlKHVldmVudCk7CisJfQorfQorCitzdGF0aWMgaW50IHVjbWFfZnJlZV9jdHgoc3RydWN0IHVjbWFfY29udGV4dCAqY3R4KQoreworCWludCBldmVudHNfcmVwb3J0ZWQ7CisKKwkvKiBObyBuZXcgZXZlbnRzIHdpbGwgYmUgZ2VuZXJhdGVkIGFmdGVyIGRlc3Ryb3lpbmcgdGhlIGlkLiAqLworCXJkbWFfZGVzdHJveV9pZChjdHgtPmNtX2lkKTsKKworCS8qIENsZWFudXAgZXZlbnRzIG5vdCB5ZXQgcmVwb3J0ZWQgdG8gdGhlIHVzZXIuICovCisJbXV0ZXhfbG9jaygmY3R4LT5maWxlLT5tdXQpOworCXVjbWFfY2xlYW51cF9ldmVudHMoY3R4KTsKKwlsaXN0X2RlbCgmY3R4LT5saXN0KTsKKwltdXRleF91bmxvY2soJmN0eC0+ZmlsZS0+bXV0KTsKKworCWV2ZW50c19yZXBvcnRlZCA9IGN0eC0+ZXZlbnRzX3JlcG9ydGVkOworCWtmcmVlKGN0eCk7CisJcmV0dXJuIGV2ZW50c19yZXBvcnRlZDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9kZXN0cm95X2lkKHN0cnVjdCB1Y21hX2ZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICppbmJ1ZiwKKwkJCSAgICAgICBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgcmRtYV91Y21fZGVzdHJveV9pZCBjbWQ7CisJc3RydWN0IHJkbWFfdWNtX2Rlc3Ryb3lfaWRfcmVzcCByZXNwOworCXN0cnVjdCB1Y21hX2NvbnRleHQgKmN0eDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChvdXRfbGVuIDwgc2l6ZW9mKHJlc3ApKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBpbmJ1Ziwgc2l6ZW9mKGNtZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW11dGV4X2xvY2soJm11dCk7CisJY3R4ID0gX3VjbWFfZmluZF9jb250ZXh0KGNtZC5pZCwgZmlsZSk7CisJaWYgKCFJU19FUlIoY3R4KSkKKwkJaWRyX3JlbW92ZSgmY3R4X2lkciwgY3R4LT5pZCk7CisJbXV0ZXhfdW5sb2NrKCZtdXQpOworCisJaWYgKElTX0VSUihjdHgpKQorCQlyZXR1cm4gUFRSX0VSUihjdHgpOworCisJdWNtYV9wdXRfY3R4KGN0eCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmY3R4LT5jb21wKTsKKwlyZXNwLmV2ZW50c19yZXBvcnRlZCA9IHVjbWFfZnJlZV9jdHgoY3R4KTsKKworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpY21kLnJlc3BvbnNlLAorCQkJICZyZXNwLCBzaXplb2YocmVzcCkpKQorCQlyZXQgPSAtRUZBVUxUOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9iaW5kX2FkZHIoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAorCQkJICAgICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IHJkbWFfdWNtX2JpbmRfYWRkciBjbWQ7CisJc3RydWN0IHVjbWFfY29udGV4dCAqY3R4OworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgaW5idWYsIHNpemVvZihjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwljdHggPSB1Y21hX2dldF9jdHgoZmlsZSwgY21kLmlkKTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwlyZXQgPSByZG1hX2JpbmRfYWRkcihjdHgtPmNtX2lkLCAoc3RydWN0IHNvY2thZGRyICopICZjbWQuYWRkcik7CisJdWNtYV9wdXRfY3R4KGN0eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9yZXNvbHZlX2FkZHIoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwKKwkJCQkgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAorCQkJCSBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgcmRtYV91Y21fcmVzb2x2ZV9hZGRyIGNtZDsKKwlzdHJ1Y3QgdWNtYV9jb250ZXh0ICpjdHg7CisJaW50IHJldDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBpbmJ1Ziwgc2l6ZW9mKGNtZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWN0eCA9IHVjbWFfZ2V0X2N0eChmaWxlLCBjbWQuaWQpOworCWlmIChJU19FUlIoY3R4KSkKKwkJcmV0dXJuIFBUUl9FUlIoY3R4KTsKKworCXJldCA9IHJkbWFfcmVzb2x2ZV9hZGRyKGN0eC0+Y21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNtZC5zcmNfYWRkciwKKwkJCQkoc3RydWN0IHNvY2thZGRyICopICZjbWQuZHN0X2FkZHIsCisJCQkJY21kLnRpbWVvdXRfbXMpOworCXVjbWFfcHV0X2N0eChjdHgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVjbWFfcmVzb2x2ZV9yb3V0ZShzdHJ1Y3QgdWNtYV9maWxlICpmaWxlLAorCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAorCQkJCSAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IHJkbWFfdWNtX3Jlc29sdmVfcm91dGUgY21kOworCXN0cnVjdCB1Y21hX2NvbnRleHQgKmN0eDsKKwlpbnQgcmV0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGluYnVmLCBzaXplb2YoY21kKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJY3R4ID0gdWNtYV9nZXRfY3R4KGZpbGUsIGNtZC5pZCk7CisJaWYgKElTX0VSUihjdHgpKQorCQlyZXR1cm4gUFRSX0VSUihjdHgpOworCisJcmV0ID0gcmRtYV9yZXNvbHZlX3JvdXRlKGN0eC0+Y21faWQsIGNtZC50aW1lb3V0X21zKTsKKwl1Y21hX3B1dF9jdHgoY3R4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1Y21hX2NvcHlfaWJfcm91dGUoc3RydWN0IHJkbWFfdWNtX3F1ZXJ5X3JvdXRlX3Jlc3AgKnJlc3AsCisJCQkgICAgICAgc3RydWN0IHJkbWFfcm91dGUgKnJvdXRlKQoreworCXN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcjsKKworCXJlc3AtPm51bV9wYXRocyA9IHJvdXRlLT5udW1fcGF0aHM7CisJc3dpdGNoIChyb3V0ZS0+bnVtX3BhdGhzKSB7CisJY2FzZSAwOgorCQlkZXZfYWRkciA9ICZyb3V0ZS0+YWRkci5kZXZfYWRkcjsKKwkJaWJfYWRkcl9nZXRfZGdpZChkZXZfYWRkciwKKwkJCQkgKHVuaW9uIGliX2dpZCAqKSAmcmVzcC0+aWJfcm91dGVbMF0uZGdpZCk7CisJCWliX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsCisJCQkJICh1bmlvbiBpYl9naWQgKikgJnJlc3AtPmliX3JvdXRlWzBdLnNnaWQpOworCQlyZXNwLT5pYl9yb3V0ZVswXS5wa2V5ID0gY3B1X3RvX2JlMTYoaWJfYWRkcl9nZXRfcGtleShkZXZfYWRkcikpOworCQlicmVhazsKKwljYXNlIDI6CisJCWliX2NvcHlfcGF0aF9yZWNfdG9fdXNlcigmcmVzcC0+aWJfcm91dGVbMV0sCisJCQkJCSAmcm91dGUtPnBhdGhfcmVjWzFdKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAxOgorCQlpYl9jb3B5X3BhdGhfcmVjX3RvX3VzZXIoJnJlc3AtPmliX3JvdXRlWzBdLAorCQkJCQkgJnJvdXRlLT5wYXRoX3JlY1swXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9xdWVyeV9yb3V0ZShzdHJ1Y3QgdWNtYV9maWxlICpmaWxlLAorCQkJCWNvbnN0IGNoYXIgX191c2VyICppbmJ1ZiwKKwkJCQlpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgcmRtYV91Y21fcXVlcnlfcm91dGUgY21kOworCXN0cnVjdCByZG1hX3VjbV9xdWVyeV9yb3V0ZV9yZXNwIHJlc3A7CisJc3RydWN0IHVjbWFfY29udGV4dCAqY3R4OworCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChvdXRfbGVuIDwgc2l6ZW9mKHJlc3ApKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBpbmJ1Ziwgc2l6ZW9mKGNtZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWN0eCA9IHVjbWFfZ2V0X2N0eChmaWxlLCBjbWQuaWQpOworCWlmIChJU19FUlIoY3R4KSkKKwkJcmV0dXJuIFBUUl9FUlIoY3R4KTsKKworCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOworCWFkZHIgPSAmY3R4LT5jbV9pZC0+cm91dGUuYWRkci5zcmNfYWRkcjsKKwltZW1jcHkoJnJlc3Auc3JjX2FkZHIsIGFkZHIsIGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUID8KKwkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDoKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJYWRkciA9ICZjdHgtPmNtX2lkLT5yb3V0ZS5hZGRyLmRzdF9hZGRyOworCW1lbWNweSgmcmVzcC5kc3RfYWRkciwgYWRkciwgYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQgPworCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOgorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwlpZiAoIWN0eC0+Y21faWQtPmRldmljZSkKKwkJZ290byBvdXQ7CisKKwlyZXNwLm5vZGVfZ3VpZCA9IGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV9ndWlkOworCXJlc3AucG9ydF9udW0gPSBjdHgtPmNtX2lkLT5wb3J0X251bTsKKwlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6CisJCXVjbWFfY29weV9pYl9yb3V0ZSgmcmVzcCwgJmN0eC0+Y21faWQtPnJvdXRlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljbWQucmVzcG9uc2UsCisJCQkgJnJlc3AsIHNpemVvZihyZXNwKSkpCisJCXJldCA9IC1FRkFVTFQ7CisKKwl1Y21hX3B1dF9jdHgoY3R4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1Y21hX2NvcHlfY29ubl9wYXJhbShzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpkc3QsCisJCQkJIHN0cnVjdCByZG1hX3VjbV9jb25uX3BhcmFtICpzcmMpCit7CisJZHN0LT5wcml2YXRlX2RhdGEgPSBzcmMtPnByaXZhdGVfZGF0YTsKKwlkc3QtPnByaXZhdGVfZGF0YV9sZW4gPSBzcmMtPnByaXZhdGVfZGF0YV9sZW47CisJZHN0LT5yZXNwb25kZXJfcmVzb3VyY2VzID1zcmMtPnJlc3BvbmRlcl9yZXNvdXJjZXM7CisJZHN0LT5pbml0aWF0b3JfZGVwdGggPSBzcmMtPmluaXRpYXRvcl9kZXB0aDsKKwlkc3QtPmZsb3dfY29udHJvbCA9IHNyYy0+Zmxvd19jb250cm9sOworCWRzdC0+cmV0cnlfY291bnQgPSBzcmMtPnJldHJ5X2NvdW50OworCWRzdC0+cm5yX3JldHJ5X2NvdW50ID0gc3JjLT5ybnJfcmV0cnlfY291bnQ7CisJZHN0LT5zcnEgPSBzcmMtPnNycTsKKwlkc3QtPnFwX251bSA9IHNyYy0+cXBfbnVtOworfQorCitzdGF0aWMgc3NpemVfdCB1Y21hX2Nvbm5lY3Qoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAorCQkJICAgIGludCBpbl9sZW4sIGludCBvdXRfbGVuKQoreworCXN0cnVjdCByZG1hX3VjbV9jb25uZWN0IGNtZDsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJc3RydWN0IHVjbWFfY29udGV4dCAqY3R4OworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgaW5idWYsIHNpemVvZihjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIWNtZC5jb25uX3BhcmFtLnZhbGlkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN0eCA9IHVjbWFfZ2V0X2N0eChmaWxlLCBjbWQuaWQpOworCWlmIChJU19FUlIoY3R4KSkKKwkJcmV0dXJuIFBUUl9FUlIoY3R4KTsKKworCXVjbWFfY29weV9jb25uX3BhcmFtKCZjb25uX3BhcmFtLCAmY21kLmNvbm5fcGFyYW0pOworCXJldCA9IHJkbWFfY29ubmVjdChjdHgtPmNtX2lkLCAmY29ubl9wYXJhbSk7CisJdWNtYV9wdXRfY3R4KGN0eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9saXN0ZW4oc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAorCQkJICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IHJkbWFfdWNtX2xpc3RlbiBjbWQ7CisJc3RydWN0IHVjbWFfY29udGV4dCAqY3R4OworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgaW5idWYsIHNpemVvZihjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwljdHggPSB1Y21hX2dldF9jdHgoZmlsZSwgY21kLmlkKTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwljdHgtPmJhY2tsb2cgPSBjbWQuYmFja2xvZyA+IDAgJiYgY21kLmJhY2tsb2cgPCBVQ01BX01BWF9CQUNLTE9HID8KKwkJICAgICAgIGNtZC5iYWNrbG9nIDogVUNNQV9NQVhfQkFDS0xPRzsKKwlyZXQgPSByZG1hX2xpc3RlbihjdHgtPmNtX2lkLCBjdHgtPmJhY2tsb2cpOworCXVjbWFfcHV0X2N0eChjdHgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVjbWFfYWNjZXB0KHN0cnVjdCB1Y21hX2ZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICppbmJ1ZiwKKwkJCSAgIGludCBpbl9sZW4sIGludCBvdXRfbGVuKQoreworCXN0cnVjdCByZG1hX3VjbV9hY2NlcHQgY21kOworCXN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTsKKwlzdHJ1Y3QgdWNtYV9jb250ZXh0ICpjdHg7CisJaW50IHJldDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBpbmJ1Ziwgc2l6ZW9mKGNtZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWN0eCA9IHVjbWFfZ2V0X2N0eChmaWxlLCBjbWQuaWQpOworCWlmIChJU19FUlIoY3R4KSkKKwkJcmV0dXJuIFBUUl9FUlIoY3R4KTsKKworCWlmIChjbWQuY29ubl9wYXJhbS52YWxpZCkgeworCQljdHgtPnVpZCA9IGNtZC51aWQ7CisJCXVjbWFfY29weV9jb25uX3BhcmFtKCZjb25uX3BhcmFtLCAmY21kLmNvbm5fcGFyYW0pOworCQlyZXQgPSByZG1hX2FjY2VwdChjdHgtPmNtX2lkLCAmY29ubl9wYXJhbSk7CisJfSBlbHNlCisJCXJldCA9IHJkbWFfYWNjZXB0KGN0eC0+Y21faWQsIE5VTEwpOworCisJdWNtYV9wdXRfY3R4KGN0eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9yZWplY3Qoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAorCQkJICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IHJkbWFfdWNtX3JlamVjdCBjbWQ7CisJc3RydWN0IHVjbWFfY29udGV4dCAqY3R4OworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgaW5idWYsIHNpemVvZihjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwljdHggPSB1Y21hX2dldF9jdHgoZmlsZSwgY21kLmlkKTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwlyZXQgPSByZG1hX3JlamVjdChjdHgtPmNtX2lkLCBjbWQucHJpdmF0ZV9kYXRhLCBjbWQucHJpdmF0ZV9kYXRhX2xlbik7CisJdWNtYV9wdXRfY3R4KGN0eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9kaXNjb25uZWN0KHN0cnVjdCB1Y21hX2ZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICppbmJ1ZiwKKwkJCSAgICAgICBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgcmRtYV91Y21fZGlzY29ubmVjdCBjbWQ7CisJc3RydWN0IHVjbWFfY29udGV4dCAqY3R4OworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgaW5idWYsIHNpemVvZihjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwljdHggPSB1Y21hX2dldF9jdHgoZmlsZSwgY21kLmlkKTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwlyZXQgPSByZG1hX2Rpc2Nvbm5lY3QoY3R4LT5jbV9pZCk7CisJdWNtYV9wdXRfY3R4KGN0eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9pbml0X3FwX2F0dHIoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwKKwkJCQkgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAorCQkJCSBpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKK3sKKwlzdHJ1Y3QgcmRtYV91Y21faW5pdF9xcF9hdHRyIGNtZDsKKwlzdHJ1Y3QgaWJfdXZlcmJzX3FwX2F0dHIgcmVzcDsKKwlzdHJ1Y3QgdWNtYV9jb250ZXh0ICpjdHg7CisJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKKwlpbnQgcmV0OworCisJaWYgKG91dF9sZW4gPCBzaXplb2YocmVzcCkpCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGluYnVmLCBzaXplb2YoY21kKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJY3R4ID0gdWNtYV9nZXRfY3R4KGZpbGUsIGNtZC5pZCk7CisJaWYgKElTX0VSUihjdHgpKQorCQlyZXR1cm4gUFRSX0VSUihjdHgpOworCisJcmVzcC5xcF9hdHRyX21hc2sgPSAwOworCW1lbXNldCgmcXBfYXR0ciwgMCwgc2l6ZW9mIHFwX2F0dHIpOworCXFwX2F0dHIucXBfc3RhdGUgPSBjbWQucXBfc3RhdGU7CisJcmV0ID0gcmRtYV9pbml0X3FwX2F0dHIoY3R4LT5jbV9pZCwgJnFwX2F0dHIsICZyZXNwLnFwX2F0dHJfbWFzayk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpYl9jb3B5X3FwX2F0dHJfdG9fdXNlcigmcmVzcCwgJnFwX2F0dHIpOworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpY21kLnJlc3BvbnNlLAorCQkJICZyZXNwLCBzaXplb2YocmVzcCkpKQorCQlyZXQgPSAtRUZBVUxUOworCitvdXQ6CisJdWNtYV9wdXRfY3R4KGN0eCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdWNtYV9ub3RpZnkoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAorCQkJICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IHJkbWFfdWNtX25vdGlmeSBjbWQ7CisJc3RydWN0IHVjbWFfY29udGV4dCAqY3R4OworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgaW5idWYsIHNpemVvZihjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwljdHggPSB1Y21hX2dldF9jdHgoZmlsZSwgY21kLmlkKTsKKwlpZiAoSVNfRVJSKGN0eCkpCisJCXJldHVybiBQVFJfRVJSKGN0eCk7CisKKwlyZXQgPSByZG1hX25vdGlmeShjdHgtPmNtX2lkLCAoZW51bSBpYl9ldmVudF90eXBlKSBjbWQuZXZlbnQpOworCXVjbWFfcHV0X2N0eChjdHgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90ICgqdWNtYV9jbWRfdGFibGVbXSkoc3RydWN0IHVjbWFfZmlsZSAqZmlsZSwKKwkJCQkgICBjb25zdCBjaGFyIF9fdXNlciAqaW5idWYsCisJCQkJICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pID0geworCVtSRE1BX1VTRVJfQ01fQ01EX0NSRUFURV9JRF0JPSB1Y21hX2NyZWF0ZV9pZCwKKwlbUkRNQV9VU0VSX0NNX0NNRF9ERVNUUk9ZX0lEXQk9IHVjbWFfZGVzdHJveV9pZCwKKwlbUkRNQV9VU0VSX0NNX0NNRF9CSU5EX0FERFJdCT0gdWNtYV9iaW5kX2FkZHIsCisJW1JETUFfVVNFUl9DTV9DTURfUkVTT0xWRV9BRERSXQk9IHVjbWFfcmVzb2x2ZV9hZGRyLAorCVtSRE1BX1VTRVJfQ01fQ01EX1JFU09MVkVfUk9VVEVdPSB1Y21hX3Jlc29sdmVfcm91dGUsCisJW1JETUFfVVNFUl9DTV9DTURfUVVFUllfUk9VVEVdCT0gdWNtYV9xdWVyeV9yb3V0ZSwKKwlbUkRNQV9VU0VSX0NNX0NNRF9DT05ORUNUXQk9IHVjbWFfY29ubmVjdCwKKwlbUkRNQV9VU0VSX0NNX0NNRF9MSVNURU5dCT0gdWNtYV9saXN0ZW4sCisJW1JETUFfVVNFUl9DTV9DTURfQUNDRVBUXQk9IHVjbWFfYWNjZXB0LAorCVtSRE1BX1VTRVJfQ01fQ01EX1JFSkVDVF0JPSB1Y21hX3JlamVjdCwKKwlbUkRNQV9VU0VSX0NNX0NNRF9ESVNDT05ORUNUXQk9IHVjbWFfZGlzY29ubmVjdCwKKwlbUkRNQV9VU0VSX0NNX0NNRF9JTklUX1FQX0FUVFJdCT0gdWNtYV9pbml0X3FwX2F0dHIsCisJW1JETUFfVVNFUl9DTV9DTURfR0VUX0VWRU5UXQk9IHVjbWFfZ2V0X2V2ZW50LAorCVtSRE1BX1VTRVJfQ01fQ01EX0dFVF9PUFRJT05dCT0gTlVMTCwKKwlbUkRNQV9VU0VSX0NNX0NNRF9TRVRfT1BUSU9OXQk9IE5VTEwsCisJW1JETUFfVVNFUl9DTV9DTURfTk9USUZZXQk9IHVjbWFfbm90aWZ5LAorfTsKKworc3RhdGljIHNzaXplX3QgdWNtYV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IHVjbWFfZmlsZSAqZmlsZSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcmRtYV91Y21fY21kX2hkciBoZHI7CisJc3NpemVfdCByZXQ7CisKKwlpZiAobGVuIDwgc2l6ZW9mKGhkcikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZoZHIsIGJ1Ziwgc2l6ZW9mKGhkcikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChoZHIuY21kIDwgMCB8fCBoZHIuY21kID49IEFSUkFZX1NJWkUodWNtYV9jbWRfdGFibGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChoZHIuaW4gKyBzaXplb2YoaGRyKSA+IGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXVjbWFfY21kX3RhYmxlW2hkci5jbWRdKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXJldCA9IHVjbWFfY21kX3RhYmxlW2hkci5jbWRdKGZpbGUsIGJ1ZiArIHNpemVvZihoZHIpLCBoZHIuaW4sIGhkci5vdXQpOworCWlmICghcmV0KQorCQlyZXQgPSBsZW47CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHVjbWFfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCB1Y21hX2ZpbGUgKmZpbGUgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJcG9sbF93YWl0KGZpbHAsICZmaWxlLT5wb2xsX3dhaXQsIHdhaXQpOworCisJaWYgKCFsaXN0X2VtcHR5KCZmaWxlLT5ldmVudF9saXN0KSkKKwkJbWFzayA9IFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCB1Y21hX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVjbWFfZmlsZSAqZmlsZTsKKworCWZpbGUgPSBrbWFsbG9jKHNpemVvZiAqZmlsZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZmaWxlLT5ldmVudF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZmlsZS0+Y3R4X2xpc3QpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZpbGUtPnBvbGxfd2FpdCk7CisJbXV0ZXhfaW5pdCgmZmlsZS0+bXV0KTsKKworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGZpbGU7CisJZmlsZS0+ZmlscCA9IGZpbHA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWNtYV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdWNtYV9maWxlICpmaWxlID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1Y21hX2NvbnRleHQgKmN0eCwgKnRtcDsKKworCW11dGV4X2xvY2soJmZpbGUtPm11dCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0eCwgdG1wLCAmZmlsZS0+Y3R4X2xpc3QsIGxpc3QpIHsKKwkJbXV0ZXhfdW5sb2NrKCZmaWxlLT5tdXQpOworCisJCW11dGV4X2xvY2soJm11dCk7CisJCWlkcl9yZW1vdmUoJmN0eF9pZHIsIGN0eC0+aWQpOworCQltdXRleF91bmxvY2soJm11dCk7CisKKwkJdWNtYV9mcmVlX2N0eChjdHgpOworCQltdXRleF9sb2NrKCZmaWxlLT5tdXQpOworCX0KKwltdXRleF91bmxvY2soJmZpbGUtPm11dCk7CisJa2ZyZWUoZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVjbWFfZm9wcyA9IHsKKwkub3duZXIgCSA9IFRISVNfTU9EVUxFLAorCS5vcGVuIAkgPSB1Y21hX29wZW4sCisJLnJlbGVhc2UgPSB1Y21hX2Nsb3NlLAorCS53cml0ZQkgPSB1Y21hX3dyaXRlLAorCS5wb2xsICAgID0gdWNtYV9wb2xsLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHVjbWFfbWlzYyA9IHsKKwkubWlub3IJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCisJLm5hbWUJPSAicmRtYV9jbSIsCisJLmZvcHMJPSAmdWNtYV9mb3BzLAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19hYmlfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBSRE1BX1VTRVJfQ01fQUJJX1ZFUlNJT04pOworfQorc3RhdGljIERFVklDRV9BVFRSKGFiaV92ZXJzaW9uLCBTX0lSVUdPLCBzaG93X2FiaV92ZXJzaW9uLCBOVUxMKTsKKworc3RhdGljIGludCBfX2luaXQgdWNtYV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnVjbWFfbWlzYyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSh1Y21hX21pc2MudGhpc19kZXZpY2UsICZkZXZfYXR0cl9hYmlfdmVyc2lvbik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgInJkbWFfdWNtOiBjb3VsZG4ndCBjcmVhdGUgYWJpX3ZlcnNpb24gYXR0clxuIik7CisJCWdvdG8gZXJyOworCX0KKwlyZXR1cm4gMDsKK2VycjoKKwltaXNjX2RlcmVnaXN0ZXIoJnVjbWFfbWlzYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVjbWFfY2xlYW51cCh2b2lkKQoreworCWRldmljZV9yZW1vdmVfZmlsZSh1Y21hX21pc2MudGhpc19kZXZpY2UsICZkZXZfYXR0cl9hYmlfdmVyc2lvbik7CisJbWlzY19kZXJlZ2lzdGVyKCZ1Y21hX21pc2MpOworCWlkcl9kZXN0cm95KCZjdHhfaWRyKTsKK30KKworbW9kdWxlX2luaXQodWNtYV9pbml0KTsKK21vZHVsZV9leGl0KHVjbWFfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwppbmRleCA0ZTE2MzE0Li5hNjE3Y2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKQEAgLTUzNCw5ICs1MzQsOSBAQAogCSAqIG1vZHVsZSByZWZlcmVuY2UuCiAJICovCiAJZmlscC0+Zl9vcCAJICAgPSBmb3BzX2dldCgmdXZlcmJzX2V2ZW50X2ZvcHMpOwotCWZpbHAtPmZfdmZzbW50IAkgICA9IG1udGdldCh1dmVyYnNfZXZlbnRfbW50KTsKLQlmaWxwLT5mX2RlbnRyeSAJICAgPSBkZ2V0KHV2ZXJic19ldmVudF9tbnQtPm1udF9yb290KTsKLQlmaWxwLT5mX21hcHBpbmcgICAgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nOworCWZpbHAtPmZfcGF0aC5tbnQgCSAgID0gbW50Z2V0KHV2ZXJic19ldmVudF9tbnQpOworCWZpbHAtPmZfcGF0aC5kZW50cnkgCSAgID0gZGdldCh1dmVyYnNfZXZlbnRfbW50LT5tbnRfcm9vdCk7CisJZmlscC0+Zl9tYXBwaW5nICAgID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nOwogCWZpbHAtPmZfZmxhZ3MgICAgICA9IE9fUkRPTkxZOwogCWZpbHAtPmZfbW9kZSAgICAgICA9IEZNT0RFX1JFQUQ7CiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gZXZfZmlsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYXJzaGFsbC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21hcnNoYWxsLmMKaW5kZXggY2U0NmIxMy4uNTQ0MGRhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21hcnNoYWxsLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21hcnNoYWxsLmMKQEAgLTMyLDggKzMyLDggQEAKIAogI2luY2x1ZGUgPHJkbWEvaWJfbWFyc2hhbGwuaD4KIAotc3RhdGljIHZvaWQgaWJfY29weV9haF9hdHRyX3RvX3VzZXIoc3RydWN0IGliX3V2ZXJic19haF9hdHRyICpkc3QsCi0JCQkJICAgIHN0cnVjdCBpYl9haF9hdHRyICpzcmMpCit2b2lkIGliX2NvcHlfYWhfYXR0cl90b191c2VyKHN0cnVjdCBpYl91dmVyYnNfYWhfYXR0ciAqZHN0LAorCQkJICAgICBzdHJ1Y3QgaWJfYWhfYXR0ciAqc3JjKQogewogCW1lbWNweShkc3QtPmdyaC5kZ2lkLCBzcmMtPmdyaC5kZ2lkLnJhdywgc2l6ZW9mIHNyYy0+Z3JoLmRnaWQpOwogCWRzdC0+Z3JoLmZsb3dfbGFiZWwgICAgICAgID0gc3JjLT5ncmguZmxvd19sYWJlbDsKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlkc3QtPmlzX2dsb2JhbCAgICAgICAgICAgICA9IHNyYy0+YWhfZmxhZ3MgJiBJQl9BSF9HUkggPyAxIDogMDsKIAlkc3QtPnBvcnRfbnVtIAkgICAgCSAgID0gc3JjLT5wb3J0X251bTsKIH0KK0VYUE9SVF9TWU1CT0woaWJfY29weV9haF9hdHRyX3RvX3VzZXIpOwogCiB2b2lkIGliX2NvcHlfcXBfYXR0cl90b191c2VyKHN0cnVjdCBpYl91dmVyYnNfcXBfYXR0ciAqZHN0LAogCQkJICAgICBzdHJ1Y3QgaWJfcXBfYXR0ciAqc3JjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21lbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21lbS5jCmluZGV4IGRiMTJjYzAuLmM5NWZlOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tZW0uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWVtLmMKQEAgLTUyLDggKzUyLDggQEAKIAlpbnQgaTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaHVuaywgdG1wLCAmdW1lbS0+Y2h1bmtfbGlzdCwgbGlzdCkgewotCQlkbWFfdW5tYXBfc2coZGV2LT5kbWFfZGV2aWNlLCBjaHVuay0+cGFnZV9saXN0LAotCQkJICAgICBjaHVuay0+bmVudHMsIERNQV9CSURJUkVDVElPTkFMKTsKKwkJaWJfZG1hX3VubWFwX3NnKGRldiwgY2h1bmstPnBhZ2VfbGlzdCwKKwkJCQljaHVuay0+bmVudHMsIERNQV9CSURJUkVDVElPTkFMKTsKIAkJZm9yIChpID0gMDsgaSA8IGNodW5rLT5uZW50czsgKytpKSB7CiAJCQlpZiAodW1lbS0+d3JpdGFibGUgJiYgZGlydHkpCiAJCQkJc2V0X3BhZ2VfZGlydHlfbG9jayhjaHVuay0+cGFnZV9saXN0W2ldLnBhZ2UpOwpAQCAtMTM2LDEwICsxMzYsMTAgQEAKIAkJCQljaHVuay0+cGFnZV9saXN0W2ldLmxlbmd0aCA9IFBBR0VfU0laRTsKIAkJCX0KIAotCQkJY2h1bmstPm5tYXAgPSBkbWFfbWFwX3NnKGRldi0+ZG1hX2RldmljZSwKLQkJCQkJCSAmY2h1bmstPnBhZ2VfbGlzdFswXSwKLQkJCQkJCSBjaHVuay0+bmVudHMsCi0JCQkJCQkgRE1BX0JJRElSRUNUSU9OQUwpOworCQkJY2h1bmstPm5tYXAgPSBpYl9kbWFfbWFwX3NnKGRldiwKKwkJCQkJCSAgICAmY2h1bmstPnBhZ2VfbGlzdFswXSwKKwkJCQkJCSAgICBjaHVuay0+bmVudHMsCisJCQkJCQkgICAgRE1BX0JJRElSRUNUSU9OQUwpOwogCQkJaWYgKGNodW5rLT5ubWFwIDw9IDApIHsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgY2h1bmstPm5lbnRzOyArK2kpCiAJCQkJCXB1dF9wYWdlKGNodW5rLT5wYWdlX2xpc3RbaV0ucGFnZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jCmluZGV4IDE3OWQwMDUuLjQyMGMxMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jCkBAIC0xNjEsOCArMTYxLDEwIEBACiAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfU1RBVEUpIHsKIAkJLyogRW5zdXJlIHRoZSBzdGF0ZSBpcyB2YWxpZCAqLwotCQlpZiAoYXR0ci0+cXBfc3RhdGUgPCAwIHx8IGF0dHItPnFwX3N0YXRlID4gSUJfUVBTX0VSUikKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoYXR0ci0+cXBfc3RhdGUgPCAwIHx8IGF0dHItPnFwX3N0YXRlID4gSUJfUVBTX0VSUikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDA7CisJCX0KIAogCQl3ci5uZXh0X3FwX3N0YXRlID0gY3B1X3RvX2JlMzIodG9fYzJfc3RhdGUoYXR0ci0+cXBfc3RhdGUpKTsKIApAQCAtMTg0LDkgKzE4NiwxMCBAQAogCQlpZiAoYXR0ci0+Y3VyX3FwX3N0YXRlICE9IElCX1FQU19SVFIgJiYKIAkJICAgIGF0dHItPmN1cl9xcF9zdGF0ZSAhPSBJQl9RUFNfUlRTICYmCiAJCSAgICBhdHRyLT5jdXJfcXBfc3RhdGUgIT0gSUJfUVBTX1NRRCAmJgotCQkgICAgYXR0ci0+Y3VyX3FwX3N0YXRlICE9IElCX1FQU19TUUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZQorCQkgICAgYXR0ci0+Y3VyX3FwX3N0YXRlICE9IElCX1FQU19TUUUpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGJhaWwwOworCQl9IGVsc2UKIAkJCXdyLm5leHRfcXBfc3RhdGUgPQogCQkJICAgIGNwdV90b19iZTMyKHRvX2MyX3N0YXRlKGF0dHItPmN1cl9xcF9zdGF0ZSkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NxLmMKaW5kZXggOTM5OTViNi4uNjA3NGM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfY3EuYwpAQCAtMzQ0LDggKzM0NCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjYV9jcV9pZHJfbG9jaywgZmxhZ3MpOwotCXdoaWxlIChteV9jcS0+bnJfY2FsbGJhY2tzKQorCXdoaWxlIChteV9jcS0+bnJfY2FsbGJhY2tzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoY2FfY3FfaWRyX2xvY2ssIGZsYWdzKTsKIAkJeWllbGQoKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmVoY2FfY3FfaWRyX2xvY2ssIGZsYWdzKTsKKwl9CiAKIAlpZHJfcmVtb3ZlKCZlaGNhX2NxX2lkciwgbXlfY3EtPnRva2VuKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNhX2NxX2lkcl9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2hjYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9oY2EuYwppbmRleCBlMWI2MThjLi5iN2JlOTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2hjYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaGNhLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAkJCQkJICAgICAgaWJfZGV2aWNlKTsKIAlzdHJ1Y3QgaGlwel9xdWVyeV9oY2EgKnJibG9jazsKIAotCXJibG9jayA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKCk7CisJcmJsb2NrID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soR0ZQX0tFUk5FTCk7CiAJaWYgKCFyYmxvY2spIHsKIAkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbid0IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCQkJCSAgICAgIGliX2RldmljZSk7CiAJc3RydWN0IGhpcHpfcXVlcnlfcG9ydCAqcmJsb2NrOwogCi0JcmJsb2NrID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soKTsKKwlyYmxvY2sgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jayhHRlBfS0VSTkVMKTsKIAlpZiAoIXJibG9jaykgewogCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2FuJ3QgYWxsb2NhdGUgcmJsb2NrIG1lbW9yeS4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNzksNyArMTc5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmJsb2NrID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soKTsKKwlyYmxvY2sgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jayhHRlBfS0VSTkVMKTsKIAlpZiAoIXJibG9jaykgewogCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAgIkNhbid0IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjEyLDcgKzIxMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJibG9jayA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKCk7CisJcmJsb2NrID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soR0ZQX0tFUk5FTCk7CiAJaWYgKCFyYmxvY2spIHsKIAkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbid0IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmMKaW5kZXggYzNlYTc0Ni4uYzA2OWJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAl1NjQgKnJibG9jazsKIAl1bnNpZ25lZCBsb25nIGJsb2NrX2NvdW50OwogCi0JcmJsb2NrID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soKTsKKwlyYmxvY2sgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jayhHRlBfQVRPTUlDKTsKIAlpZiAoIXJibG9jaykgewogCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC00NDAsNyArNDQwLDggQEAKIAkJCQkJY3EgPSBpZHJfZmluZCgmZWhjYV9jcV9pZHIsIHRva2VuKTsKIAogCQkJCQlpZiAoY3EgPT0gTlVMTCkgewotCQkJCQkJc3Bpbl91bmxvY2soJmVoY2FfY3FfaWRyX2xvY2spOworCQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9jcV9pZHJfbG9jaywKKwkJCQkJCQkJICAgICAgIGZsYWdzKTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2l2ZXJicy5oCmluZGV4IDM3MjBlMzAuLmNkNzc4OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pdmVyYnMuaApAQCAtMTgwLDEwICsxODAsMTAgQEAKIGludCBlaGNhX211bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBsZW4pOwogCiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLXZvaWQgKmVoY2FfYWxsb2NfZndfY3RybGJsb2NrKHZvaWQpOwordm9pZCAqZWhjYV9hbGxvY19md19jdHJsYmxvY2soZ2ZwX3QgZmxhZ3MpOwogdm9pZCBlaGNhX2ZyZWVfZndfY3RybGJsb2NrKHZvaWQgKnB0cik7CiAjZWxzZQotI2RlZmluZSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jaygpICgodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCkpCisjZGVmaW5lIGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKGZsYWdzKSAoKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKGZsYWdzKSkKICNkZWZpbmUgZWhjYV9mcmVlX2Z3X2N0cmxibG9jayhwdHIpIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykocHRyKSkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jCmluZGV4IGNjNDdlNGMuLjY1NzRmYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jCkBAIC0xMDYsOSArMTA2LDkgQEAKICNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpjdGJsa19jYWNoZSA9IE5VTEw7CiAKLXZvaWQgKmVoY2FfYWxsb2NfZndfY3RybGJsb2NrKHZvaWQpCit2b2lkICplaGNhX2FsbG9jX2Z3X2N0cmxibG9jayhnZnBfdCBmbGFncykKIHsKLQl2b2lkICpyZXQgPSBrbWVtX2NhY2hlX3phbGxvYyhjdGJsa19jYWNoZSwgR0ZQX0tFUk5FTCk7CisJdm9pZCAqcmV0ID0ga21lbV9jYWNoZV96YWxsb2MoY3RibGtfY2FjaGUsIGZsYWdzKTsKIAlpZiAoIXJldCkKIAkJZWhjYV9nZW5fZXJyKCJPdXQgb2YgbWVtb3J5IGZvciBjdGJsayIpOwogCXJldHVybiByZXQ7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAl1NjQgaF9yZXQ7CiAJc3RydWN0IGhpcHpfcXVlcnlfaGNhICpyYmxvY2s7CiAKLQlyYmxvY2sgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jaygpOworCXJibG9jayA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKEdGUF9LRVJORUwpOwogCWlmICghcmJsb2NrKSB7CiAJCWVoY2FfZ2VuX2VycigiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGhpcHpfcXVlcnlfaGNhICpyYmxvY2s7CiAKLQlyYmxvY2sgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jaygpOworCXJibG9jayA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKEdGUF9LRVJORUwpOwogCWlmICghcmJsb2NrKSB7CiAJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJDYW4ndCBhbGxvY2F0ZSByYmxvY2sgbWVtb3J5LiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogCQkJCQkJCQkJICAgXAogCXNoY2EgPSBkZXYtPmRyaXZlcl9kYXRhOwkJCQkJICAgXAogCQkJCQkJCQkJICAgXAotCXJibG9jayA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKCk7CQkJCSAgIFwKKwlyYmxvY2sgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jayhHRlBfS0VSTkVMKTsJCQkgICBcCiAJaWYgKCFyYmxvY2spIHsJCQkJCQkgICAgICAgICAgIFwKIAkJZGV2X2VycihkZXYsICJDYW4ndCBhbGxvY2F0ZSByYmxvY2sgbWVtb3J5LiIpOwkJICAgXAogCQlyZXR1cm4gMDsJCQkJCQkgICBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5jCmluZGV4IDBhNWUyMjEuLmNmYjM2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5jCkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogCXUzMiBpOwogCXU2NCAqa3BhZ2U7CiAKLQlrcGFnZSA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKCk7CisJa3BhZ2UgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jayhHRlBfS0VSTkVMKTsKIAlpZiAoIWtwYWdlKSB7CiAJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJrcGFnZSBhbGxvYyBmYWlsZWQiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTExMjQsNyArMTEyNCw3IEBACiAJZWhjYV9tcm13X21hcF9hY2woYWNsLCAmaGlwel9hY2wpOwogCWVoY2FfbXJtd19zZXRfcGdzaXplX2hpcHpfYWNsKCZoaXB6X2FjbCk7CiAKLQlrcGFnZSA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKCk7CisJa3BhZ2UgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jayhHRlBfS0VSTkVMKTsKIAlpZiAoIWtwYWdlKSB7CiAJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJrcGFnZSBhbGxvYyBmYWlsZWQiKTsKIAkJcmV0ID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYwppbmRleCBjNmM5Y2VmLi4zNGI4NTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jCkBAIC04MDcsNyArODA3LDcgQEAKIAl1bnNpZ25lZCBsb25nIHNwbF9mbGFncyA9IDA7CiAKIAkvKiBkbyBxdWVyeV9xcCB0byBvYnRhaW4gY3VycmVudCBhdHRyIHZhbHVlcyAqLwotCW1xcGNiID0gZWhjYV9hbGxvY19md19jdHJsYmxvY2soKTsKKwltcXBjYiA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKEdGUF9LRVJORUwpOwogCWlmICghbXFwY2IpIHsKIAkJZWhjYV9lcnIoaWJxcC0+ZGV2aWNlLCAiQ291bGQgbm90IGdldCB6ZXJvZWQgcGFnZSBmb3IgbXFwY2IgIgogCQkJICJlaGNhX3FwPSVwIHFwX251bT0leCAiLCBteV9xcCwgaWJxcC0+cXBfbnVtKTsKQEAgLTEyNzMsNyArMTI3Myw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXFwY2IgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jaygpOworCXFwY2IgPSBlaGNhX2FsbG9jX2Z3X2N0cmxibG9jayhHRlBfS0VSTkVMKTsKIAlpZiAoIXFwY2IpIHsKIAkJZWhjYV9lcnIocXAtPmRldmljZSwiT3V0IG9mIG1lbW9yeSBmb3IgcXBjYiAiCiAJCQkgImVoY2FfcXA9JXAgcXBfbnVtPSV4IiwgbXlfcXAsIHFwLT5xcF9udW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL01ha2VmaWxlIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL01ha2VmaWxlCmluZGV4IDdkYzEwNTUuLmVjMmU2MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiBpYl9pcGF0aC15IDo9IFwKIAlpcGF0aF9jcS5vIFwKIAlpcGF0aF9kaWFnLm8gXAorCWlwYXRoX2RtYS5vIFwKIAlpcGF0aF9kcml2ZXIubyBcCiAJaXBhdGhfZWVwcm9tLm8gXAogCWlwYXRoX2ZpbGVfb3BzLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMGYyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZG1hLmMKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUUxvZ2ljLCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CisKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgorCisjZGVmaW5lIEJBRF9ETUFfQUREUkVTUyAoKHU2NCkgMCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGltcGxlbWVudCBkcml2ZXIgc3BlY2lmaWMgcmVwbGFjZW1lbnRzCisgKiBmb3IgdGhlIGliX2RtYV8qKCkgZnVuY3Rpb25zLgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4ga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzIGluc3RlYWQgb2YKKyAqIGRldmljZSBidXMgYWRkcmVzc2VzIHNpbmNlIHRoZSBkcml2ZXIgdXNlcyB0aGUgQ1BVIHRvIGNvcHkKKyAqIGRhdGEgaW5zdGVhZCBvZiB1c2luZyBoYXJkd2FyZSBETUEuCisgKi8KKworc3RhdGljIGludCBpcGF0aF9tYXBwaW5nX2Vycm9yKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTY0IGRtYV9hZGRyKQoreworCXJldHVybiBkbWFfYWRkciA9PSBCQURfRE1BX0FERFJFU1M7Cit9CisKK3N0YXRpYyB1NjQgaXBhdGhfZG1hX21hcF9zaW5nbGUoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJICAgICAgICB2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsCisJCQkgICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJcmV0dXJuICh1NjQpIGNwdV9hZGRyOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF9kbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCQkgICB1NjQgYWRkciwgc2l6ZV90IHNpemUsCisJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKK30KKworc3RhdGljIHU2NCBpcGF0aF9kbWFfbWFwX3BhZ2Uoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCSAgICAgIHNpemVfdCBzaXplLAorCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXU2NCBhZGRyOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJaWYgKG9mZnNldCArIHNpemUgPiBQQUdFX1NJWkUpIHsKKwkJYWRkciA9IEJBRF9ETUFfQUREUkVTUzsKKwkJZ290byBkb25lOworCX0KKworCWFkZHIgPSAodTY0KSBwYWdlX2FkZHJlc3MocGFnZSk7CisJaWYgKGFkZHIpCisJCWFkZHIgKz0gb2Zmc2V0OworCS8qIFRPRE86IGhhbmRsZSBoaWdobWVtIHBhZ2VzICovCisKK2RvbmU6CisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoX2RtYV91bm1hcF9wYWdlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCQkgdTY0IGFkZHIsIHNpemVfdCBzaXplLAorCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworfQorCitpbnQgaXBhdGhfbWFwX3NnKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXU2NCBhZGRyOworCWludCBpOworCWludCByZXQgPSBuZW50czsKKworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKworCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7CisJCWFkZHIgPSAodTY0KSBwYWdlX2FkZHJlc3Moc2dbaV0ucGFnZSk7CisJCS8qIFRPRE86IGhhbmRsZSBoaWdobWVtIHBhZ2VzICovCisJCWlmICghYWRkcikgeworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoX3VubWFwX3NnKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Cit9CisKK3N0YXRpYyB1NjQgaXBhdGhfc2dfZG1hX2FkZHJlc3Moc3RydWN0IGliX2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCXU2NCBhZGRyID0gKHU2NCkgcGFnZV9hZGRyZXNzKHNnLT5wYWdlKTsKKworCWlmIChhZGRyKQorCQlhZGRyICs9IHNnLT5vZmZzZXQ7CisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBhdGhfc2dfZG1hX2xlbihzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCXJldHVybiBzZy0+bGVuZ3RoOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCQkgICAgICB1NjQgYWRkciwKKwkJCQkgICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJCQkgdTY0IGFkZHIsCisJCQkJCSBzaXplX3Qgc2l6ZSwKKwkJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworc3RhdGljIHZvaWQgKmlwYXRoX2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICAgIHU2NCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKK3sKKwlzdHJ1Y3QgcGFnZSAqcDsKKwl2b2lkICphZGRyID0gTlVMTDsKKworCXAgPSBhbGxvY19wYWdlcyhmbGFnLCBnZXRfb3JkZXIoc2l6ZSkpOworCWlmIChwKQorCQlhZGRyID0gcGFnZV9hZGRyZXNzKHApOworCWlmIChkbWFfaGFuZGxlKQorCQkqZG1hX2hhbmRsZSA9ICh1NjQpIGFkZHI7CisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXRoX2RtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgIHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgY3B1X2FkZHIsIGdldF9vcmRlcihzaXplKSk7Cit9CisKK3N0cnVjdCBpYl9kbWFfbWFwcGluZ19vcHMgaXBhdGhfZG1hX21hcHBpbmdfb3BzID0geworCWlwYXRoX21hcHBpbmdfZXJyb3IsCisJaXBhdGhfZG1hX21hcF9zaW5nbGUsCisJaXBhdGhfZG1hX3VubWFwX3NpbmdsZSwKKwlpcGF0aF9kbWFfbWFwX3BhZ2UsCisJaXBhdGhfZG1hX3VubWFwX3BhZ2UsCisJaXBhdGhfbWFwX3NnLAorCWlwYXRoX3VubWFwX3NnLAorCWlwYXRoX3NnX2RtYV9hZGRyZXNzLAorCWlwYXRoX3NnX2RtYV9sZW4sCisJaXBhdGhfc3luY19zaW5nbGVfZm9yX2NwdSwKKwlpcGF0aF9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlLAorCWlwYXRoX2RtYV9hbGxvY19jb2hlcmVudCwKKwlpcGF0aF9kbWFfZnJlZV9jb2hlcmVudAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwppbmRleCAxYWVkZGI0Li5hZTdmMjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCkBAIC0xODI1LDggKzE4MjUsNiBAQAogICovCiB2b2lkIGlwYXRoX3NodXRkb3duX2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7Ci0JdTY0IHZhbDsKLQogCWlwYXRoX2RiZygiU2h1dHRpbmcgZG93biB0aGUgZGV2aWNlXG4iKTsKIAogCWRkLT5pcGF0aF9mbGFncyB8PSBJUEFUSF9MSU5LVU5LOwpAQCAtMTg0OSw3ICsxODQ3LDcgQEAKIAkgKi8KIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLCAwVUxMKTsKIAkvKiBmbHVzaCBpdCAqLwotCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOwogCS8qCiAJICogZW5vdWdoIGZvciBhbnl0aGluZyB0aGF0J3MgZ29pbmcgdG8gdHJpY2tsZSBvdXQgdG8gaGF2ZSBhY3R1YWxseQogCSAqIGRvbmUgc28uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCmluZGV4IGE5ZGRjNjkuLmI5MzJiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCkBAIC02OTksNyArNjk5LDYgQEAKIAkJCSAgICAgaW50IHN0YXJ0X3N0b3ApCiB7CiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7Ci0JdTY0IHR2YWw7CiAKIAlpcGF0aF9jZGJnKFBST0MsICIlc2FibGluZyByY3YgZm9yIHVuaXQgJXUgcG9ydCAldToldVxuIiwKIAkJICAgc3RhcnRfc3RvcCA/ICJlbiIgOiAiZGlzIiwgZGQtPmlwYXRoX3VuaXQsCkBAIC03MjksNyArNzI4LDcgQEAKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmN0cmwsCiAJCQkgZGQtPmlwYXRoX3JjdmN0cmwpOwogCS8qIG5vdyBiZSBzdXJlIGNoaXAgc2F3IGl0IGJlZm9yZSB3ZSByZXR1cm4gKi8KLQl0dmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CiAJaWYgKHN0YXJ0X3N0b3ApIHsKIAkJLyoKIAkJICogQW5kIHRyeSB0byBiZSBzdXJlIHRoYXQgdGFpbCByZWcgdXBkYXRlIGhhcyBoYXBwZW5lZCB0b28uCkBAIC03MzgsNyArNzM3LDcgQEAKIAkJICogaW4gbWVtb3J5IGNvcHksIHNpbmNlIHdlIGNvdWxkIG92ZXJ3cml0ZSBhbiB1cGRhdGUgYnkgdGhlCiAJCSAqIGNoaXAgaWYgd2UgZGlkLgogCQkgKi8KLQkJdHZhbCA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZoZHJ0YWlsLCBwZC0+cG9ydF9wb3J0KTsKKwkJaXBhdGhfcmVhZF91cmVnMzIoZGQsIHVyX3JjdmhkcnRhaWwsIHBkLT5wb3J0X3BvcnQpOwogCX0KIAkvKiBhbHdheXM7IG5ldyBoZWFkIHNob3VsZCBiZSBlcXVhbCB0byBuZXcgdGFpbDsgc2VlIGFib3ZlICovCiBiYWlsOgpAQCAtMTc0NSw5ICsxNzQ0LDkgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlfbWlub3IgPSBpbWlub3IoZnAtPmZfZGVudHJ5LT5kX2lub2RlKSAtIElQQVRIX1VTRVJfTUlOT1JfQkFTRTsKKwlpX21pbm9yID0gaW1pbm9yKGZwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSAtIElQQVRIX1VTRVJfTUlOT1JfQkFTRTsKIAlpcGF0aF9jZGJnKFZFUkJPU0UsICJvcGVuIG9uIGRldiAlbHggKG1pbm9yICVkKVxuIiwKLQkJICAgKGxvbmcpZnAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYsIGlfbWlub3IpOworCQkgICAobG9uZylmcC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2LCBpX21pbm9yKTsKIAogCWlmIChpX21pbm9yKQogCQlyZXQgPSBmaW5kX2ZyZWVfcG9ydChpX21pbm9yIC0gMSwgZnAsIHVpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9mcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMKaW5kZXggZDlmZjI4My4uNzlhNjBmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCXUxNiBpOwogCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKIAotCWRkID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKKwlkZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7IGkrKykKIAkJY291bnRlcnNbaV0gPSBpcGF0aF9zbmFwX2NudHIoZGQsIGkpOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOwogCXU2NCBndWlkOwogCi0JZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOworCWRkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCiAJZ3VpZCA9IGJlNjRfdG9fY3B1KGRkLT5pcGF0aF9ndWlkKTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBACiAJdTMyIHRtcCwgdG1wMjsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CiAKLQlkZCA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CisJZGQgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CiAKIAkvKiBzbyB3ZSBvbmx5IGluaXRpYWxpemUgbm9uLXplcm8gZmllbGRzLiAqLwogCW1lbXNldChwb3J0aW5mbywgMCwgc2l6ZW9mIHBvcnRpbmZvKTsKQEAgLTMyNCw3ICszMjQsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOworCWRkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCWlmIChpcGF0aF9lZXByb21fcmVhZChkZCwgcG9zLCB0bXAsIGNvdW50KSkgewogCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIHJlYWQgZnJvbSBmbGFzaFxuIik7CiAJCXJldCA9IC1FTlhJTzsKQEAgLTM3Nyw3ICszNzcsNyBAQAogCQlnb3RvIGJhaWxfdG1wOwogCX0KIAotCWRkID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKKwlkZCA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKIAlpZiAoaXBhdGhfZWVwcm9tX3dyaXRlKGRkLCBwb3MsIHRtcCwgY291bnQpKSB7CiAJCXJldCA9IC1FTlhJTzsKIAkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byB3cml0ZSB0byBmbGFzaFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMTAuYwppbmRleCBlNTdjN2EzLi43NDY4NDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMKQEAgLTE0NDcsNyArMTQ0Nyw3IEBACiBzdGF0aWMgaW50IGlwYXRoX2h0X2Vhcmx5X2luaXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewogCXUzMiBfX2lvbWVtICpwaW9idWY7Ci0JdTMyIHBpb2luY3IsIHZhbDMyLCBlZ3JzaXplOworCXUzMiBwaW9pbmNyLCB2YWwzMjsKIAlpbnQgaTsKIAogCS8qCkBAIC0xNDY3LDcgKzE0NjcsNiBAQAogCSAqIGVycm9ycyBpbnRlcnJ1cHRzIGlmIHdlIGV2ZXIgc2VlIG9uZSkuCiAJICovCiAJZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemUgPSBkZC0+aXBhdGhfcGlvc2l6ZTJrOwotCWVncnNpemUgPSBkZC0+aXBhdGhfcmN2ZWdyYnVmc2l6ZTsKIAogCS8qCiAJICogdGhlIG1pbigpIGNoZWNrIGhlcmUgaXMgY3VycmVudGx5IGEgbm9wLCBidXQgaXQgbWF5IG5vdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMjAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMKaW5kZXggNmFmODk2OC4uYWU4YmY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMjAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjEyMC5jCkBAIC02MDIsNyArNjAyLDcgQEAKICAqLwogc3RhdGljIGludCBpcGF0aF9wZV9icmluZ3VwX3NlcmRlcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7Ci0JdTY0IHZhbCwgdG1wLCBjb25maWcxLCBwcmV2X3ZhbDsKKwl1NjQgdmFsLCBjb25maWcxLCBwcmV2X3ZhbDsKIAlpbnQgcmV0ID0gMDsKIAogCWlwYXRoX2RiZygiVHJ5aW5nIHRvIGJyaW5ndXAgc2VyZGVzXG4iKTsKQEAgLTYzMyw3ICs2MzMsNyBAQAogCQl8IElORklOSVBBVEhfU0VSREMwX0wxUFdSX0ROOwogCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VyZGVzY29uZmlnMCwgdmFsKTsKIAkvKiBiZSBzdXJlIGNoaXAgc2F3IGl0ICovCi0JdG1wID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CiAJdWRlbGF5KDUpOwkJLyogbmVlZCBwbGwgcmVzZXQgc2V0IGF0IGxlYXN0IGZvciBhIGJpdCAqLwogCS8qCiAJICogYWZ0ZXIgUExMIGlzIHJlc2V0LCBzZXQgdGhlIHBlci1sYW5lIFJlc2V0cyBhbmQgVHhJZGxlIGFuZApAQCAtNjQ3LDcgKzY0Nyw3IEBACiAJCSAgICJhbmQgdHhpZGxlICglbGx4KVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsKTsKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzAsIHZhbCk7CiAJLyogYmUgc3VyZSBjaGlwIHNhdyBpdCAqLwotCXRtcCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOworCWlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOwogCS8qIG5lZWQgUExMIHJlc2V0IGNsZWFyIGZvciBhdCBsZWFzdCAxMSB1c2VjIGJlZm9yZSBsYW5lCiAJICogcmVzZXRzIGNsZWFyZWQ7IGdpdmUgaXQgYSBmZXcgbW9yZSB0byBiZSBzdXJlICovCiAJdWRlbGF5KDE1KTsKQEAgLTg1MSwxMiArODUxLDEyIEBACiAJaW50IHBvcywgcmV0OwogCiAJZGQtPmlwYXRoX21zaV9sbyA9IDA7CS8qIHVzZWQgYXMgYSBmbGFnIGR1cmluZyByZXNldCBwcm9jZXNzaW5nICovCi0JZGQtPmlwYXRoX2lycSA9IHBkZXYtPmlycTsKIAlyZXQgPSBwY2lfZW5hYmxlX21zaShkZC0+cGNpZGV2KTsKIAlpZiAocmV0KQogCQlpcGF0aF9kZXZfZXJyKGRkLCAicGNpX2VuYWJsZV9tc2kgZmFpbGVkOiAlZCwgIgogCQkJICAgICAgImludGVycnVwdHMgbWF5IG5vdCB3b3JrXG4iLCByZXQpOwogCS8qIGNvbnRpbnVlIGV2ZW4gaWYgaXQgZmFpbHMsIHdlIG1heSBzdGlsbCBiZSBPSy4uLiAqLworCWRkLT5pcGF0aF9pcnEgPSBwZGV2LT5pcnE7CiAKIAlpZiAoKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGQtPnBjaWRldiwgUENJX0NBUF9JRF9NU0kpKSkgewogCQl1MTYgY29udHJvbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYwppbmRleCBkODE5Y2NhLi5kNGY2YjUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYwpAQCAtMzQ3LDEwICszNDcsOSBAQAogc3RhdGljIGludCBpbml0X2NoaXBfcmVzZXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAogCQkJICAgc3RydWN0IGlwYXRoX3BvcnRkYXRhICoqcGRwKQogewotCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQ7CiAJdTMyIHJ0bXA7CiAKLQkqcGRwID0gcGQgPSBkZC0+aXBhdGhfcGRbMF07CisJKnBkcCA9IGRkLT5pcGF0aF9wZFswXTsKIAkvKiBlbnN1cmUgY2hpcCBkb2VzIG5vIHNlbmRzIG9yIHJlY2VpdmVzIHdoaWxlIHdlIHJlLWluaXRpYWxpemUgKi8KIAlkZC0+aXBhdGhfY29udHJvbCA9IGRkLT5pcGF0aF9zZW5kY3RybCA9IGRkLT5pcGF0aF9yY3ZjdHJsID0gMFU7CiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCmluZGV4IDU2NTJhNTUuLjcyYjllMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYwpAQCAtNTk4LDEwICs1OTgsOSBAQAogCSAqIG9uIGNsb3NlCiAJICovCiAJaWYgKGVycnMgJiBJTkZJTklQQVRIX0VfUlJDVkhEUkZVTEwpIHsKLQkJaW50IGFueTsKIAkJdTMyIGhkLCB0bDsKIAkJaXBhdGhfc3RhdHMuc3BzX2hkcnFmdWxsKys7Ci0JCWZvciAoYW55ID0gaSA9IDA7IGkgPCBkZC0+aXBhdGhfY2ZncG9ydHM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBpKyspIHsKIAkJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBkZC0+aXBhdGhfcGRbaV07CiAJCQlpZiAoaSA9PSAwKSB7CiAJCQkJaGQgPSBkZC0+aXBhdGhfcG9ydDBoZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tleXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXlzLmMKaW5kZXggOWE2Y2JkMC4uODUxNzYzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tleXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2V5cy5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAkgKi8KIAlpZiAoc2dlLT5sa2V5ID09IDApIHsKIAkJaXNnZS0+bXIgPSBOVUxMOwotCQlpc2dlLT52YWRkciA9IGJ1c190b192aXJ0KHNnZS0+YWRkcik7CisJCWlzZ2UtPnZhZGRyID0gKHZvaWQgKikgc2dlLT5hZGRyOwogCQlpc2dlLT5sZW5ndGggPSBzZ2UtPmxlbmd0aDsKIAkJaXNnZS0+c2dlX2xlbmd0aCA9IHNnZS0+bGVuZ3RoOwogCQlyZXQgPSAxOwpAQCAtMjAyLDEyICsyMDIsMTIgQEAKIAlpbnQgcmV0OwogCiAJLyoKLQkgKiBXZSB1c2UgUktFWSA9PSB6ZXJvIGZvciBwaHlzaWNhbCBhZGRyZXNzZXMKLQkgKiAoc2VlIGlwYXRoX2dldF9kbWFfbXIpLgorCSAqIFdlIHVzZSBSS0VZID09IHplcm8gZm9yIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcworCSAqIChzZWUgaXBhdGhfZ2V0X2RtYV9tciBhbmQgaXBhdGhfZG1hLmMpLgogCSAqLwogCWlmIChya2V5ID09IDApIHsKIAkJc2dlLT5tciA9IE5VTEw7Ci0JCXNnZS0+dmFkZHIgPSBwaHlzX3RvX3ZpcnQodmFkZHIpOworCQlzZ2UtPnZhZGRyID0gKHZvaWQgKikgdmFkZHI7CiAJCXNnZS0+bGVuZ3RoID0gbGVuOwogCQlzZ2UtPnNnZV9sZW5ndGggPSBsZW47CiAJCXNzLT5zZ19saXN0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21yLmMKaW5kZXggYTA2NzNjMWUuLjhjYzg1OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCkBAIC01NCw2ICs1NCw4IEBACiAgKiBAYWNjOiBhY2Nlc3MgZmxhZ3MKICAqCiAgKiBSZXR1cm5zIHRoZSBtZW1vcnkgcmVnaW9uIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSByZXR1cm5zIGFuIGVycm5vLgorICogTm90ZSB0aGF0IGFsbCBETUEgYWRkcmVzc2VzIHNob3VsZCBiZSBjcmVhdGVkIHZpYSB0aGUKKyAqIHN0cnVjdCBpYl9kbWFfbWFwcGluZ19vcHMgZnVuY3Rpb25zIChzZWUgaXBhdGhfZG1hLmMpLgogICovCiBzdHJ1Y3QgaWJfbXIgKmlwYXRoX2dldF9kbWFfbXIoc3RydWN0IGliX3BkICpwZCwgaW50IGFjYykKIHsKQEAgLTE0OSw4ICsxNTEsNyBAQAogCW0gPSAwOwogCW4gPSAwOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGh5c19idWY7IGkrKykgewotCQltci0+bXIubWFwW21dLT5zZWdzW25dLnZhZGRyID0KLQkJCXBoeXNfdG9fdmlydChidWZmZXJfbGlzdFtpXS5hZGRyKTsKKwkJbXItPm1yLm1hcFttXS0+c2Vnc1tuXS52YWRkciA9ICh2b2lkICopIGJ1ZmZlcl9saXN0W2ldLmFkZHI7CiAJCW1yLT5tci5tYXBbbV0tPnNlZ3Nbbl0ubGVuZ3RoID0gYnVmZmVyX2xpc3RbaV0uc2l6ZTsKIAkJbXItPm1yLmxlbmd0aCArPSBidWZmZXJfbGlzdFtpXS5zaXplOwogCQluKys7CkBAIC0zNDcsNyArMzQ4LDcgQEAKIAluID0gMDsKIAlwcyA9IDEgPDwgZm1yLT5wYWdlX3NoaWZ0OwogCWZvciAoaSA9IDA7IGkgPCBsaXN0X2xlbjsgaSsrKSB7Ci0JCWZtci0+bXIubWFwW21dLT5zZWdzW25dLnZhZGRyID0gcGh5c190b192aXJ0KHBhZ2VfbGlzdFtpXSk7CisJCWZtci0+bXIubWFwW21dLT5zZWdzW25dLnZhZGRyID0gKHZvaWQgKikgcGFnZV9saXN0W2ldOwogCQlmbXItPm1yLm1hcFttXS0+c2Vnc1tuXS5sZW5ndGggPSBwczsKIAkJaWYgKCsrbiA9PSBJUEFUSF9TRUdTWikgewogCQkJbSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N5c2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYwppbmRleCAxODJkZTM0Li5mZmE2MzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYwpAQCAtMjE1LDcgKzIxNSw2IEBACiAJCQkgIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgdW5pdDsKIAl1MTYgbWxpZDsKIAlpbnQgcmV0OwogCkBAIC0yMjMsOCArMjIyLDYgQEAKIAlpZiAocmV0IDwgMCB8fCBtbGlkIDwgSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFKQogCQlnb3RvIGludmFsaWQ7CiAKLQl1bml0ID0gZGQtPmlwYXRoX3VuaXQ7Ci0KIAlkZC0+aXBhdGhfbWxpZCA9IG1saWQ7CiAKIAlnb3RvIGJhaWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCmluZGV4IGFjZGVlMzMuLjJhYWFjZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5jCkBAIC0xNTk5LDYgKzE1OTksNyBAQAogCWRldi0+ZGV0YWNoX21jYXN0ID0gaXBhdGhfbXVsdGljYXN0X2RldGFjaDsKIAlkZXYtPnByb2Nlc3NfbWFkID0gaXBhdGhfcHJvY2Vzc19tYWQ7CiAJZGV2LT5tbWFwID0gaXBhdGhfbW1hcDsKKwlkZXYtPmRtYV9vcHMgPSAmaXBhdGhfZG1hX21hcHBpbmdfb3BzOwogCiAJc25wcmludGYoZGV2LT5ub2RlX2Rlc2MsIHNpemVvZihkZXYtPm5vZGVfZGVzYyksCiAJCSBJUEFUSF9JRFNUUiAiICVzIiwgaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKaW5kZXggODAzOWY2ZS4uYzBjOGQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmgKQEAgLTgxMiw0ICs4MTIsNiBAQAogCiBleHRlcm4gY29uc3QgdTMyIGliX2lwYXRoX3Jucl90YWJsZVtdOwogCitleHRlcm4gc3RydWN0IGliX2RtYV9tYXBwaW5nX29wcyBpcGF0aF9kbWFfbWFwcGluZ19vcHM7CisKICNlbmRpZgkJCQkvKiBJUEFUSF9WRVJCU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCmluZGV4IDI4M2Q1MGIuLjExNTljOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCkBAIC01NCw2ICs1NCwxMCBAQAogCU1USENBX0NRX0VOVFJZX1NJWkUgPSAweDIwCiB9OwogCitlbnVtIHsKKwlNVEhDQV9BVE9NSUNfQllURV9MRU4gPSA4Cit9OworCiAvKgogICogTXVzdCBiZSBwYWNrZWQgYmVjYXVzZSBzdGFydCBpcyA2NCBiaXRzIGJ1dCBvbmx5IGFsaWduZWQgdG8gMzIgYml0cy4KICAqLwpAQCAtNTk5LDExICs2MDMsMTEgQEAKIAkJCWJyZWFrOwogCQljYXNlIE1USENBX09QQ09ERV9BVE9NSUNfQ1M6CiAJCQllbnRyeS0+b3Bjb2RlICAgID0gSUJfV0NfQ09NUF9TV0FQOwotCQkJZW50cnktPmJ5dGVfbGVuICA9IGJlMzJfdG9fY3B1KGNxZS0+Ynl0ZV9jbnQpOworCQkJZW50cnktPmJ5dGVfbGVuICA9IE1USENBX0FUT01JQ19CWVRFX0xFTjsKIAkJCWJyZWFrOwogCQljYXNlIE1USENBX09QQ09ERV9BVE9NSUNfRkE6CiAJCQllbnRyeS0+b3Bjb2RlICAgID0gSUJfV0NfRkVUQ0hfQUREOwotCQkJZW50cnktPmJ5dGVfbGVuICA9IGJlMzJfdG9fY3B1KGNxZS0+Ynl0ZV9jbnQpOworCQkJZW50cnktPmJ5dGVfbGVuICA9IE1USENBX0FUT01JQ19CWVRFX0xFTjsKIAkJCWJyZWFrOwogCQljYXNlIE1USENBX09QQ09ERV9CSU5EX01XOgogCQkJZW50cnktPm9wY29kZSAgICA9IElCX1dDX0JJTkRfTVc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwppbmRleCAwNDkxZWM3Li40NGJjNmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKQEAgLTgwLDI0ICs4MCw2MSBAQAogbW9kdWxlX3BhcmFtKHR1bmVfcGNpLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh0dW5lX3BjaSwgImluY3JlYXNlIFBDSSBidXJzdCBmcm9tIHRoZSBkZWZhdWx0IHNldCBieSBCSU9TIGlmIG5vbnplcm8iKTsKIAotc3RydWN0IG11dGV4IG10aGNhX2RldmljZV9tdXRleDsKK0RFRklORV9NVVRFWChtdGhjYV9kZXZpY2VfbXV0ZXgpOworCisjZGVmaW5lIE1USENBX0RFRkFVTFRfTlVNX1FQICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIE1USENBX0RFRkFVTFRfUkRCX1BFUl9RUCAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgTVRIQ0FfREVGQVVMVF9OVU1fQ1EgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgTVRIQ0FfREVGQVVMVF9OVU1fTUNHICAgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgTVRIQ0FfREVGQVVMVF9OVU1fTVBUICAgICAgICAgICAoMSA8PCAxNykKKyNkZWZpbmUgTVRIQ0FfREVGQVVMVF9OVU1fTVRUICAgICAgICAgICAoMSA8PCAyMCkKKyNkZWZpbmUgTVRIQ0FfREVGQVVMVF9OVU1fVURBViAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgTVRIQ0FfREVGQVVMVF9OVU1fUkVTRVJWRURfTVRUUyAoMSA8PCAxOCkKKyNkZWZpbmUgTVRIQ0FfREVGQVVMVF9OVU1fVUFSQ19TSVpFICAgICAoMSA8PCAxOCkKKworc3RhdGljIHN0cnVjdCBtdGhjYV9wcm9maWxlIGhjYV9wcm9maWxlID0geworCS5udW1fcXAgICAgICAgICAgICAgPSBNVEhDQV9ERUZBVUxUX05VTV9RUCwKKwkucmRiX3Blcl9xcCAgICAgICAgID0gTVRIQ0FfREVGQVVMVF9SREJfUEVSX1FQLAorCS5udW1fY3EgICAgICAgICAgICAgPSBNVEhDQV9ERUZBVUxUX05VTV9DUSwKKwkubnVtX21jZyAgICAgICAgICAgID0gTVRIQ0FfREVGQVVMVF9OVU1fTUNHLAorCS5udW1fbXB0ICAgICAgICAgICAgPSBNVEhDQV9ERUZBVUxUX05VTV9NUFQsCisJLm51bV9tdHQgICAgICAgICAgICA9IE1USENBX0RFRkFVTFRfTlVNX01UVCwKKwkubnVtX3VkYXYgICAgICAgICAgID0gTVRIQ0FfREVGQVVMVF9OVU1fVURBViwgICAgICAgICAgLyogVGF2b3Igb25seSAqLworCS5mbXJfcmVzZXJ2ZWRfbXR0cyAgPSBNVEhDQV9ERUZBVUxUX05VTV9SRVNFUlZFRF9NVFRTLCAvKiBUYXZvciBvbmx5ICovCisJLnVhcmNfc2l6ZSAgICAgICAgICA9IE1USENBX0RFRkFVTFRfTlVNX1VBUkNfU0laRSwgICAgIC8qIEFyYmVsIG9ubHkgKi8KK307CisKK21vZHVsZV9wYXJhbV9uYW1lZChudW1fcXAsIGhjYV9wcm9maWxlLm51bV9xcCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobnVtX3FwLCAibWF4aW11bSBudW1iZXIgb2YgUVBzIHBlciBIQ0EiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHJkYl9wZXJfcXAsIGhjYV9wcm9maWxlLnJkYl9wZXJfcXAsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJkYl9wZXJfcXAsICJudW1iZXIgb2YgUkRCIGJ1ZmZlcnMgcGVyIFFQIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChudW1fY3EsIGhjYV9wcm9maWxlLm51bV9jcSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobnVtX2NxLCAibWF4aW11bSBudW1iZXIgb2YgQ1FzIHBlciBIQ0EiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKG51bV9tY2csIGhjYV9wcm9maWxlLm51bV9tY2csIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9tY2csICJtYXhpbXVtIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXBzIHBlciBIQ0EiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKG51bV9tcHQsIGhjYV9wcm9maWxlLm51bV9tcHQsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9tcHQsCisJCSJtYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgcHJvdGVjdGlvbiB0YWJsZSBlbnRyaWVzIHBlciBIQ0EiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKG51bV9tdHQsIGhjYV9wcm9maWxlLm51bV9tdHQsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9tdHQsCisJCSAibWF4aW11bSBudW1iZXIgb2YgbWVtb3J5IHRyYW5zbGF0aW9uIHRhYmxlIHNlZ21lbnRzIHBlciBIQ0EiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKG51bV91ZGF2LCBoY2FfcHJvZmlsZS5udW1fdWRhdiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobnVtX3VkYXYsICJtYXhpbXVtIG51bWJlciBvZiBVRCBhZGRyZXNzIHZlY3RvcnMgcGVyIEhDQSIpOworCittb2R1bGVfcGFyYW1fbmFtZWQoZm1yX3Jlc2VydmVkX210dHMsIGhjYV9wcm9maWxlLmZtcl9yZXNlcnZlZF9tdHRzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmbXJfcmVzZXJ2ZWRfbXR0cywKKwkJICJudW1iZXIgb2YgbWVtb3J5IHRyYW5zbGF0aW9uIHRhYmxlIHNlZ21lbnRzIHJlc2VydmVkIGZvciBGTVIiKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgbXRoY2FfdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogCURSVl9OQU1FICI6IE1lbGxhbm94IEluZmluaUJhbmQgSENBIGRyaXZlciB2IgogCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CiAKLXN0YXRpYyBzdHJ1Y3QgbXRoY2FfcHJvZmlsZSBkZWZhdWx0X3Byb2ZpbGUgPSB7Ci0JLm51bV9xcAkJICAgPSAxIDw8IDE2LAotCS5yZGJfcGVyX3FwCSAgID0gNCwKLQkubnVtX2NxCQkgICA9IDEgPDwgMTYsCi0JLm51bV9tY2cJICAgPSAxIDw8IDEzLAotCS5udW1fbXB0CSAgID0gMSA8PCAxNywKLQkubnVtX210dAkgICA9IDEgPDwgMjAsCi0JLm51bV91ZGF2CSAgID0gMSA8PCAxNSwJLyogVGF2b3Igb25seSAqLwotCS5mbXJfcmVzZXJ2ZWRfbXR0cyA9IDEgPDwgMTgsCS8qIFRhdm9yIG9ubHkgKi8KLQkudWFyY19zaXplCSAgID0gMSA8PCAxOCwJLyogQXJiZWwgb25seSAqLwotfTsKLQogc3RhdGljIGludCBtdGhjYV90dW5lX3BjaShzdHJ1Y3QgbXRoY2FfZGV2ICptZGV2KQogewogCWludCBjYXA7CkBAIC0zMDMsNyArMzQwLDcgQEAKIAkJZ290byBlcnJfZGlzYWJsZTsKIAl9CiAKLQlwcm9maWxlID0gZGVmYXVsdF9wcm9maWxlOworCXByb2ZpbGUgPSBoY2FfcHJvZmlsZTsKIAlwcm9maWxlLm51bV91YXIgICA9IGRldl9saW0udWFyX3NpemUgLyBQQUdFX1NJWkU7CiAJcHJvZmlsZS51YXJjX3NpemUgPSAwOwogCWlmIChtZGV2LT5tdGhjYV9mbGFncyAmIE1USENBX0ZMQUdfU1JRKQpAQCAtNjIxLDcgKzY1OCw3IEBACiAJCWdvdG8gZXJyX3N0b3BfZnc7CiAJfQogCi0JcHJvZmlsZSA9IGRlZmF1bHRfcHJvZmlsZTsKKwlwcm9maWxlID0gaGNhX3Byb2ZpbGU7CiAJcHJvZmlsZS5udW1fdWFyICA9IGRldl9saW0udWFyX3NpemUgLyBQQUdFX1NJWkU7CiAJcHJvZmlsZS5udW1fdWRhdiA9IDA7CiAJaWYgKG1kZXYtPm10aGNhX2ZsYWdzICYgTVRIQ0FfRkxBR19TUlEpCkBAIC0xMjc4LDExICsxMzE1LDU1IEBACiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtdGhjYV9yZW1vdmVfb25lKQogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IF9fbXRoY2FfY2hlY2tfcHJvZmlsZV92YWwoY29uc3QgY2hhciAqbmFtZSwgaW50ICpwdmFsLAorCQkJCQkgICAgIGludCBwdmFsX2RlZmF1bHQpCit7CisJLyogdmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSBhbmQgcG93ZXIgb2YgMiAqLworCWludCBvbGRfcHZhbCA9ICpwdmFsOworCisJaWYgKG9sZF9wdmFsIDw9IDApCisJCSpwdmFsID0gcHZhbF9kZWZhdWx0OworCWVsc2UKKwkJKnB2YWwgPSByb3VuZHVwX3Bvd19vZl90d28ob2xkX3B2YWwpOworCisJaWYgKG9sZF9wdmFsICE9ICpwdmFsKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJJbnZhbGlkIHZhbHVlICVkIGZvciAlcyBpbiBtb2R1bGUgcGFyYW1ldGVyLlxuIiwKKwkJICAgICAgIG9sZF9wdmFsLCBuYW1lKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkNvcnJlY3RlZCAlcyB0byAlZC5cbiIsIG5hbWUsICpwdmFsKTsKKwl9Cit9CisKKyNkZWZpbmUgbXRoY2FfY2hlY2tfcHJvZmlsZV92YWwobmFtZSwgZGVmYXVsdCkJCQkJXAorCV9fbXRoY2FfY2hlY2tfcHJvZmlsZV92YWwoI25hbWUsICZoY2FfcHJvZmlsZS5uYW1lLCBkZWZhdWx0KQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXRoY2FfdmFsaWRhdGVfcHJvZmlsZSh2b2lkKQoreworCW10aGNhX2NoZWNrX3Byb2ZpbGVfdmFsKG51bV9xcCwgICAgICAgICAgICBNVEhDQV9ERUZBVUxUX05VTV9RUCk7CisJbXRoY2FfY2hlY2tfcHJvZmlsZV92YWwocmRiX3Blcl9xcCwgICAgICAgIE1USENBX0RFRkFVTFRfUkRCX1BFUl9RUCk7CisJbXRoY2FfY2hlY2tfcHJvZmlsZV92YWwobnVtX2NxLCAgICAgICAgICAgIE1USENBX0RFRkFVTFRfTlVNX0NRKTsKKwltdGhjYV9jaGVja19wcm9maWxlX3ZhbChudW1fbWNnLCAJICAgTVRIQ0FfREVGQVVMVF9OVU1fTUNHKTsKKwltdGhjYV9jaGVja19wcm9maWxlX3ZhbChudW1fbXB0LCAJICAgTVRIQ0FfREVGQVVMVF9OVU1fTVBUKTsKKwltdGhjYV9jaGVja19wcm9maWxlX3ZhbChudW1fbXR0LCAJICAgTVRIQ0FfREVGQVVMVF9OVU1fTVRUKTsKKwltdGhjYV9jaGVja19wcm9maWxlX3ZhbChudW1fdWRhdiwgICAgICAgICAgTVRIQ0FfREVGQVVMVF9OVU1fVURBVik7CisJbXRoY2FfY2hlY2tfcHJvZmlsZV92YWwoZm1yX3Jlc2VydmVkX210dHMsIE1USENBX0RFRkFVTFRfTlVNX1JFU0VSVkVEX01UVFMpOworCisJaWYgKGhjYV9wcm9maWxlLmZtcl9yZXNlcnZlZF9tdHRzID49IGhjYV9wcm9maWxlLm51bV9tdHQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkludmFsaWQgZm1yX3Jlc2VydmVkX210dHMgbW9kdWxlIHBhcmFtZXRlciAlZC5cbiIsCisJCSAgICAgICBoY2FfcHJvZmlsZS5mbXJfcmVzZXJ2ZWRfbXR0cyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIoTXVzdCBiZSBzbWFsbGVyIHRoYW4gbnVtX210dCAlZClcbiIsCisJCSAgICAgICBoY2FfcHJvZmlsZS5udW1fbXR0KTsKKwkJaGNhX3Byb2ZpbGUuZm1yX3Jlc2VydmVkX210dHMgPSBoY2FfcHJvZmlsZS5udW1fbXR0IC8gMjsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkNvcnJlY3RlZCBmbXJfcmVzZXJ2ZWRfbXR0cyB0byAlZC5cbiIsCisJCSAgICAgICBoY2FfcHJvZmlsZS5mbXJfcmVzZXJ2ZWRfbXR0cyk7CisJfQorfQorCiBzdGF0aWMgaW50IF9faW5pdCBtdGhjYV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCW11dGV4X2luaXQoJm10aGNhX2RldmljZV9tdXRleCk7CisJbXRoY2FfdmFsaWRhdGVfcHJvZmlsZSgpOworCiAJcmV0ID0gbXRoY2FfY2F0YXNfaW5pdCgpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYwppbmRleCAxNWNjMmY2Li42YjE5NjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJmljbS0+Y2h1bmtfbGlzdCwgbGlzdCkgewogCQlmb3IgKGkgPSAwOyBpIDwgY2h1bmstPm5wYWdlczsgKytpKSB7Ci0JCQlpZiAoY2h1bmstPm1lbVtpXS5sZW5ndGggPj0gb2Zmc2V0KSB7CisJCQlpZiAoY2h1bmstPm1lbVtpXS5sZW5ndGggPiBvZmZzZXQpIHsKIAkJCQlwYWdlID0gY2h1bmstPm1lbVtpXS5wYWdlOwogCQkJCWdvdG8gb3V0OwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwppbmRleCAyMTQyMmEzLi43Yjk2NzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJCXByb3BzLT5tYXhfbWFwX3Blcl9mbXIgPSAyNTU7CiAJZWxzZQogCQlwcm9wcy0+bWF4X21hcF9wZXJfZm1yID0KLQkJCSgxIDw8ICgzMiAtIGxvbmdfbG9nMihtZGV2LT5saW1pdHMubnVtX21wdHMpKSkgLSAxOworCQkJKDEgPDwgKDMyIC0gaWxvZzIobWRldi0+bGltaXRzLm51bV9tcHRzKSkpIC0gMTsKIAogCWVyciA9IDA7CiAgb3V0OgpAQCAtODE2LDcgKzgxNiw3IEBACiAJCWxrZXkgPSB1Y21kLmxrZXk7CiAJfQogCi0JcmV0ID0gbXRoY2FfUkVTSVpFX0NRKGRldiwgY3EtPmNxbiwgbGtleSwgbG9uZ19sb2cyKGVudHJpZXMpLCAmc3RhdHVzKTsKKwlyZXQgPSBtdGhjYV9SRVNJWkVfQ1EoZGV2LCBjcS0+Y3FuLCBsa2V5LCBpbG9nMihlbnRyaWVzKSwgJnN0YXR1cyk7CiAJaWYgKHN0YXR1cykKIAkJcmV0ID0gLUVJTlZBTDsKIApAQCAtMTEwMCwxMCArMTEwMCwxMSBAQAogCXN0cnVjdCBtdGhjYV9mbXIgKmZtcjsKIAlpbnQgZXJyOwogCi0JZm1yID0ga21lbWR1cChmbXJfYXR0ciwgc2l6ZW9mICpmbXIsIEdGUF9LRVJORUwpOworCWZtciA9IGttYWxsb2Moc2l6ZW9mICpmbXIsIEdGUF9LRVJORUwpOwogCWlmICghZm1yKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAorCW1lbWNweSgmZm1yLT5hdHRyLCBmbXJfYXR0ciwgc2l6ZW9mICpmbXJfYXR0cik7CiAJZXJyID0gbXRoY2FfZm1yX2FsbG9jKHRvX21kZXYocGQtPmRldmljZSksIHRvX21wZChwZCktPnBkX251bSwKIAkJCSAgICAgY29udmVydF9hY2Nlc3MobXJfYWNjZXNzX2ZsYWdzKSwgZm1yKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYwppbmRleCAzM2UzYmE3Li41ZjUyMTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYwpAQCAtNDI5LDEzICs0MjksMTggQEAKIHsKIAlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYgPSB0b19tZGV2KGlicXAtPmRldmljZSk7CiAJc3RydWN0IG10aGNhX3FwICpxcCA9IHRvX21xcChpYnFwKTsKLQlpbnQgZXJyOwotCXN0cnVjdCBtdGhjYV9tYWlsYm94ICptYWlsYm94OworCWludCBlcnIgPSAwOworCXN0cnVjdCBtdGhjYV9tYWlsYm94ICptYWlsYm94ID0gTlVMTDsKIAlzdHJ1Y3QgbXRoY2FfcXBfcGFyYW0gKnFwX3BhcmFtOwogCXN0cnVjdCBtdGhjYV9xcF9jb250ZXh0ICpjb250ZXh0OwogCWludCBtdGhjYV9zdGF0ZTsKIAl1OCBzdGF0dXM7CiAKKwlpZiAocXAtPnN0YXRlID09IElCX1FQU19SRVNFVCkgeworCQlxcF9hdHRyLT5xcF9zdGF0ZSA9IElCX1FQU19SRVNFVDsKKwkJZ290byBkb25lOworCX0KKwogCW1haWxib3ggPSBtdGhjYV9hbGxvY19tYWlsYm94KGRldiwgR0ZQX0tFUk5FTCk7CiAJaWYgKElTX0VSUihtYWlsYm94KSkKIAkJcmV0dXJuIFBUUl9FUlIobWFpbGJveCk7CkBAIC00NTQsNyArNDU5LDYgQEAKIAltdGhjYV9zdGF0ZSA9IGJlMzJfdG9fY3B1KGNvbnRleHQtPmZsYWdzKSA+PiAyODsKIAogCXFwX2F0dHItPnFwX3N0YXRlIAkgICAgID0gdG9faWJfcXBfc3RhdGUobXRoY2Ffc3RhdGUpOwotCXFwX2F0dHItPmN1cl9xcF9zdGF0ZSAJICAgICA9IHFwX2F0dHItPnFwX3N0YXRlOwogCXFwX2F0dHItPnBhdGhfbXR1IAkgICAgID0gY29udGV4dC0+bXR1X21zZ21heCA+PiA1OwogCXFwX2F0dHItPnBhdGhfbWlnX3N0YXRlICAgICAgPQogCQl0b19pYl9taWdfc3RhdGUoKGJlMzJfdG9fY3B1KGNvbnRleHQtPmZsYWdzKSA+PiAxMSkgJiAweDMpOwpAQCAtNDY0LDExICs0NjgsNiBAQAogCXFwX2F0dHItPmRlc3RfcXBfbnVtIAkgICAgID0gYmUzMl90b19jcHUoY29udGV4dC0+cmVtb3RlX3FwbikgJiAweGZmZmZmZjsKIAlxcF9hdHRyLT5xcF9hY2Nlc3NfZmxhZ3MgICAgID0KIAkJdG9faWJfcXBfYWNjZXNzX2ZsYWdzKGJlMzJfdG9fY3B1KGNvbnRleHQtPnBhcmFtczIpKTsKLQlxcF9hdHRyLT5jYXAubWF4X3NlbmRfd3IgICAgID0gcXAtPnNxLm1heDsKLQlxcF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgICAgID0gcXAtPnJxLm1heDsKLQlxcF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlICAgID0gcXAtPnNxLm1heF9nczsKLQlxcF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlICAgID0gcXAtPnJxLm1heF9nczsKLQlxcF9hdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gcXAtPm1heF9pbmxpbmVfZGF0YTsKIAogCWlmIChxcC0+dHJhbnNwb3J0ID09IFJDIHx8IHFwLT50cmFuc3BvcnQgPT0gVUMpIHsKIAkJdG9faWJfYWhfYXR0cihkZXYsICZxcF9hdHRyLT5haF9hdHRyLCAmY29udGV4dC0+cHJpX3BhdGgpOwpAQCAtNDk1LDcgKzQ5NCwxNiBAQAogCXFwX2F0dHItPnJldHJ5X2NudCAJICAgID0gKGJlMzJfdG9fY3B1KGNvbnRleHQtPnBhcmFtczEpID4+IDE2KSAmIDB4NzsKIAlxcF9hdHRyLT5ybnJfcmV0cnkgCSAgICA9IGNvbnRleHQtPnByaV9wYXRoLnJucl9yZXRyeSA+PiA1OwogCXFwX2F0dHItPmFsdF90aW1lb3V0IAkgICAgPSBjb250ZXh0LT5hbHRfcGF0aC5hY2t0byA+PiAzOwotCXFwX2luaXRfYXR0ci0+Y2FwIAkgICAgPSBxcF9hdHRyLT5jYXA7CisKK2RvbmU6CisJcXBfYXR0ci0+Y3VyX3FwX3N0YXRlCSAgICAgPSBxcF9hdHRyLT5xcF9zdGF0ZTsKKwlxcF9hdHRyLT5jYXAubWF4X3NlbmRfd3IgICAgID0gcXAtPnNxLm1heDsKKwlxcF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgICAgID0gcXAtPnJxLm1heDsKKwlxcF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlICAgID0gcXAtPnNxLm1heF9nczsKKwlxcF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlICAgID0gcXAtPnJxLm1heF9nczsKKwlxcF9hdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gcXAtPm1heF9pbmxpbmVfZGF0YTsKKworCXFwX2luaXRfYXR0ci0+Y2FwCSAgICAgPSBxcF9hdHRyLT5jYXA7CiAKIG91dDoKIAltdGhjYV9mcmVlX21haWxib3goZGV2LCBtYWlsYm94KTsKQEAgLTYzNiwxMSArNjQ0LDExIEBACiAKIAlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKSB7CiAJCWlmIChxcC0+cnEubWF4KQotCQkJcXBfY29udGV4dC0+cnFfc2l6ZV9zdHJpZGUgPSBsb25nX2xvZzIocXAtPnJxLm1heCkgPDwgMzsKKwkJCXFwX2NvbnRleHQtPnJxX3NpemVfc3RyaWRlID0gaWxvZzIocXAtPnJxLm1heCkgPDwgMzsKIAkJcXBfY29udGV4dC0+cnFfc2l6ZV9zdHJpZGUgfD0gcXAtPnJxLndxZV9zaGlmdCAtIDQ7CiAKIAkJaWYgKHFwLT5zcS5tYXgpCi0JCQlxcF9jb250ZXh0LT5zcV9zaXplX3N0cmlkZSA9IGxvbmdfbG9nMihxcC0+c3EubWF4KSA8PCAzOworCQkJcXBfY29udGV4dC0+c3Ffc2l6ZV9zdHJpZGUgPSBpbG9nMihxcC0+c3EubWF4KSA8PCAzOwogCQlxcF9jb250ZXh0LT5zcV9zaXplX3N0cmlkZSB8PSBxcC0+c3Eud3FlX3NoaWZ0IC0gNDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwppbmRleCAzNGQyYzQ3Li4xMDY4NGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAogCW1lbXNldChjb250ZXh0LCAwLCBzaXplb2YgKmNvbnRleHQpOwogCi0JbG9nc2l6ZSA9IGxvbmdfbG9nMihzcnEtPm1heCk7CisJbG9nc2l6ZSA9IGlsb2cyKHNycS0+bWF4KTsKIAljb250ZXh0LT5zdGF0ZV9sb2dzaXplX3NycW4gPSBjcHVfdG9fYmUzMihsb2dzaXplIDw8IDI0IHwgc3JxLT5zcnFuKTsKIAljb250ZXh0LT5sa2V5ID0gY3B1X3RvX2JlMzIoc3JxLT5tci5pYm1yLmxrZXkpOwogCWNvbnRleHQtPmRiX2luZGV4ID0gY3B1X3RvX2JlMzIoc3JxLT5kYl9pbmRleCk7CkBAIC0yMTMsNyArMjEzLDcgQEAKIAlpZiAoIW10aGNhX2lzX21lbWZyZWUoZGV2KSAmJiAoZHMgPiBkZXYtPmxpbWl0cy5tYXhfZGVzY19zeikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3JxLT53cWVfc2hpZnQgPSBsb25nX2xvZzIoZHMpOworCXNycS0+d3FlX3NoaWZ0ID0gaWxvZzIoZHMpOwogCiAJc3JxLT5zcnFuID0gbXRoY2FfYWxsb2MoJmRldi0+c3JxX3RhYmxlLmFsbG9jKTsKIAlpZiAoc3JxLT5zcnFuID09IC0xKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IDk5NTQ3OTkuLjA3ZGVlZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTEwNSwxMiArMTA1LDEyIEBACiAKIHN0cnVjdCBpcG9pYl9yeF9idWYgewogCXN0cnVjdCBza19idWZmICpza2I7Ci0JZG1hX2FkZHJfdAltYXBwaW5nOworCXU2NAkJbWFwcGluZzsKIH07CiAKIHN0cnVjdCBpcG9pYl90eF9idWYgewogCXN0cnVjdCBza19idWZmICpza2I7Ci0JREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBwaW5nKQorCXU2NAkJbWFwcGluZzsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggZjEwZmJhNWQuLjU5ZDk1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKQEAgLTEwOSw5ICsxMDksOCBAQAogCXJldCA9IGliX3Bvc3RfcmVjdihwcml2LT5xcCwgJnBhcmFtLCAmYmFkX3dyKTsKIAlpZiAodW5saWtlbHkocmV0KSkgewogCQlpcG9pYl93YXJuKHByaXYsICJyZWNlaXZlIGZhaWxlZCBmb3IgYnVmICVkICglZClcbiIsIGlkLCByZXQpOwotCQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmNhLT5kbWFfZGV2aWNlLAotCQkJCSBwcml2LT5yeF9yaW5nW2lkXS5tYXBwaW5nLAotCQkJCSBJUE9JQl9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJaWJfZG1hX3VubWFwX3NpbmdsZShwcml2LT5jYSwgcHJpdi0+cnhfcmluZ1tpZF0ubWFwcGluZywKKwkJCQkgICAgSVBPSUJfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHByaXYtPnJ4X3JpbmdbaWRdLnNrYik7CiAJCXByaXYtPnJ4X3JpbmdbaWRdLnNrYiA9IE5VTEw7CiAJfQpAQCAtMTIzLDcgKzEyMiw3IEBACiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWRtYV9hZGRyX3QgYWRkcjsKKwl1NjQgYWRkcjsKIAogCXNrYiA9IGRldl9hbGxvY19za2IoSVBPSUJfQlVGX1NJWkUgKyA0KTsKIAlpZiAoIXNrYikKQEAgLTEzNiwxMCArMTM1LDkgQEAKIAkgKi8KIAlza2JfcmVzZXJ2ZShza2IsIDQpOwogCi0JYWRkciA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmNhLT5kbWFfZGV2aWNlLAotCQkJICAgICAgc2tiLT5kYXRhLCBJUE9JQl9CVUZfU0laRSwKLQkJCSAgICAgIERNQV9GUk9NX0RFVklDRSk7Ci0JaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGFkZHIpKSkgeworCWFkZHIgPSBpYl9kbWFfbWFwX3NpbmdsZShwcml2LT5jYSwgc2tiLT5kYXRhLCBJUE9JQl9CVUZfU0laRSwKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAodW5saWtlbHkoaWJfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+Y2EsIGFkZHIpKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xNzQsNyArMTcyLDcgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCB3cl9pZCA9IHdjLT53cl9pZCAmIH5JUE9JQl9PUF9SRUNWOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JZG1hX2FkZHJfdCBhZGRyOworCXU2NCBhZGRyOwogCiAJaXBvaWJfZGJnX2RhdGEocHJpdiwgInJlY3YgY29tcGxldGlvbjogaWQgJWQsIG9wICVkLCBzdGF0dXM6ICVkXG4iLAogCQkgICAgICAgd3JfaWQsIHdjLT5vcGNvZGUsIHdjLT5zdGF0dXMpOwpAQCAtMTkzLDggKzE5MSw4IEBACiAJCQlpcG9pYl93YXJuKHByaXYsICJmYWlsZWQgcmVjdiBldmVudCAiCiAJCQkJICAgIihzdGF0dXM9JWQsIHdyaWQ9JWQgdmVuZF9lcnIgJXgpXG4iLAogCQkJCSAgIHdjLT5zdGF0dXMsIHdyX2lkLCB3Yy0+dmVuZG9yX2Vycik7Ci0JCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+Y2EtPmRtYV9kZXZpY2UsIGFkZHIsCi0JCQkJIElQT0lCX0JVRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQlpYl9kbWFfdW5tYXBfc2luZ2xlKHByaXYtPmNhLCBhZGRyLAorCQkJCSAgICBJUE9JQl9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcHJpdi0+cnhfcmluZ1t3cl9pZF0uc2tiID0gTlVMTDsKIAkJcmV0dXJuOwpAQCAtMjEyLDggKzIxMCw3IEBACiAJaXBvaWJfZGJnX2RhdGEocHJpdiwgInJlY2VpdmVkICVkIGJ5dGVzLCBTTElEIDB4JTA0eFxuIiwKIAkJICAgICAgIHdjLT5ieXRlX2xlbiwgd2MtPnNsaWQpOwogCi0JZG1hX3VubWFwX3NpbmdsZShwcml2LT5jYS0+ZG1hX2RldmljZSwgYWRkciwKLQkJCSBJUE9JQl9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlpYl9kbWFfdW5tYXBfc2luZ2xlKHByaXYtPmNhLCBhZGRyLCBJUE9JQl9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAogCXNrYl9wdXQoc2tiLCB3Yy0+Ynl0ZV9sZW4pOwogCXNrYl9wdWxsKHNrYiwgSUJfR1JIX0JZVEVTKTsKQEAgLTI2MSwxMCArMjU4LDggQEAKIAogCXR4X3JlcSA9ICZwcml2LT50eF9yaW5nW3dyX2lkXTsKIAotCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+Y2EtPmRtYV9kZXZpY2UsCi0JCQkgcGNpX3VubWFwX2FkZHIodHhfcmVxLCBtYXBwaW5nKSwKLQkJCSB0eF9yZXEtPnNrYi0+bGVuLAotCQkJIERNQV9UT19ERVZJQ0UpOworCWliX2RtYV91bm1hcF9zaW5nbGUocHJpdi0+Y2EsIHR4X3JlcS0+bWFwcGluZywKKwkJCSAgICB0eF9yZXEtPnNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAogCSsrcHJpdi0+c3RhdHMudHhfcGFja2V0czsKIAlwcml2LT5zdGF0cy50eF9ieXRlcyArPSB0eF9yZXEtPnNrYi0+bGVuOwpAQCAtMzExLDcgKzMwNiw3IEBACiBzdGF0aWMgaW5saW5lIGludCBwb3N0X3NlbmQoc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2LAogCQkJICAgIHVuc2lnbmVkIGludCB3cl9pZCwKIAkJCSAgICBzdHJ1Y3QgaWJfYWggKmFkZHJlc3MsIHUzMiBxcG4sCi0JCQkgICAgZG1hX2FkZHJfdCBhZGRyLCBpbnQgbGVuKQorCQkJICAgIHU2NCBhZGRyLCBpbnQgbGVuKQogewogCXN0cnVjdCBpYl9zZW5kX3dyICpiYWRfd3I7CiAKQEAgLTMzMCw3ICszMjUsNyBAQAogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwb2liX3R4X2J1ZiAqdHhfcmVxOwotCWRtYV9hZGRyX3QgYWRkcjsKKwl1NjQgYWRkcjsKIAogCWlmICh1bmxpa2VseShza2ItPmxlbiA+IGRldi0+bXR1ICsgSU5GSU5JQkFORF9BTEVOKSkgewogCQlpcG9pYl93YXJuKHByaXYsICJwYWNrZXQgbGVuICVkICg+ICVkKSB0b28gbG9uZyB0byBzZW5kLCBkcm9wcGluZ1xuIiwKQEAgLTM1MywyMSArMzQ4LDIwIEBACiAJICovCiAJdHhfcmVxID0gJnByaXYtPnR4X3JpbmdbcHJpdi0+dHhfaGVhZCAmIChpcG9pYl9zZW5kcV9zaXplIC0gMSldOwogCXR4X3JlcS0+c2tiID0gc2tiOwotCWFkZHIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5jYS0+ZG1hX2RldmljZSwgc2tiLT5kYXRhLCBza2ItPmxlbiwKLQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwotCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihhZGRyKSkpIHsKKwlhZGRyID0gaWJfZG1hX21hcF9zaW5nbGUocHJpdi0+Y2EsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkJIERNQV9UT19ERVZJQ0UpOworCWlmICh1bmxpa2VseShpYl9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5jYSwgYWRkcikpKSB7CiAJCSsrcHJpdi0+c3RhdHMudHhfZXJyb3JzOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm47CiAJfQotCXBjaV91bm1hcF9hZGRyX3NldCh0eF9yZXEsIG1hcHBpbmcsIGFkZHIpOworCXR4X3JlcS0+bWFwcGluZyA9IGFkZHI7CiAKIAlpZiAodW5saWtlbHkocG9zdF9zZW5kKHByaXYsIHByaXYtPnR4X2hlYWQgJiAoaXBvaWJfc2VuZHFfc2l6ZSAtIDEpLAogCQkJICAgICAgIGFkZHJlc3MtPmFoLCBxcG4sIGFkZHIsIHNrYi0+bGVuKSkpIHsKIAkJaXBvaWJfd2Fybihwcml2LCAicG9zdF9zZW5kIGZhaWxlZFxuIik7CiAJCSsrcHJpdi0+c3RhdHMudHhfZXJyb3JzOwotCQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmNhLT5kbWFfZGV2aWNlLCBhZGRyLCBza2ItPmxlbiwKLQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCWliX2RtYV91bm1hcF9zaW5nbGUocHJpdi0+Y2EsIGFkZHIsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9IGVsc2UgewogCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKQEAgLTUzOCwyNCArNTMyLDI3IEBACiAJCQl3aGlsZSAoKGludCkgcHJpdi0+dHhfdGFpbCAtIChpbnQpIHByaXYtPnR4X2hlYWQgPCAwKSB7CiAJCQkJdHhfcmVxID0gJnByaXYtPnR4X3JpbmdbcHJpdi0+dHhfdGFpbCAmCiAJCQkJCQkJKGlwb2liX3NlbmRxX3NpemUgLSAxKV07Ci0JCQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5jYS0+ZG1hX2RldmljZSwKLQkJCQkJCSBwY2lfdW5tYXBfYWRkcih0eF9yZXEsIG1hcHBpbmcpLAotCQkJCQkJIHR4X3JlcS0+c2tiLT5sZW4sCi0JCQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCQkJaWJfZG1hX3VubWFwX3NpbmdsZShwcml2LT5jYSwKKwkJCQkJCSAgICB0eF9yZXEtPm1hcHBpbmcsCisJCQkJCQkgICAgdHhfcmVxLT5za2ItPmxlbiwKKwkJCQkJCSAgICBETUFfVE9fREVWSUNFKTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueSh0eF9yZXEtPnNrYik7CiAJCQkJKytwcml2LT50eF90YWlsOwogCQkJfQogCi0JCQlmb3IgKGkgPSAwOyBpIDwgaXBvaWJfcmVjdnFfc2l6ZTsgKytpKQotCQkJCWlmIChwcml2LT5yeF9yaW5nW2ldLnNrYikgewotCQkJCQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmNhLT5kbWFfZGV2aWNlLAotCQkJCQkJCSBwY2lfdW5tYXBfYWRkcigmcHJpdi0+cnhfcmluZ1tpXSwKLQkJCQkJCQkJCW1hcHBpbmcpLAotCQkJCQkJCSBJUE9JQl9CVUZfU0laRSwKLQkJCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKLQkJCQkJZGV2X2tmcmVlX3NrYl9hbnkocHJpdi0+cnhfcmluZ1tpXS5za2IpOwotCQkJCQlwcml2LT5yeF9yaW5nW2ldLnNrYiA9IE5VTEw7Ci0JCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IGlwb2liX3JlY3ZxX3NpemU7ICsraSkgeworCQkJCXN0cnVjdCBpcG9pYl9yeF9idWYgKnJ4X3JlcTsKKworCQkJCXJ4X3JlcSA9ICZwcml2LT5yeF9yaW5nW2ldOworCQkJCWlmICghcnhfcmVxLT5za2IpCisJCQkJCWNvbnRpbnVlOworCQkJCWliX2RtYV91bm1hcF9zaW5nbGUocHJpdi0+Y2EsCisJCQkJCQkgICAgcnhfcmVxLT5tYXBwaW5nLAorCQkJCQkJICAgIElQT0lCX0JVRl9TSVpFLAorCQkJCQkJICAgIERNQV9GUk9NX0RFVklDRSk7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkocnhfcmVxLT5za2IpOworCQkJCXJ4X3JlcS0+c2tiID0gTlVMTDsKKwkJCX0KIAogCQkJZ290byB0aW1lb3V0OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IGMwOTI4MDIuLjcwNWViMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC00OTcsOCArNDk3LDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJm5laWdoLT5xdWV1ZSk7Ci0KIAkvKgogCSAqIFdlIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIGlwb2liX3N0YXJ0X3htaXQsIHNvIHdlJ3JlCiAJICogaW5zaWRlIHR4X2xvY2sgLS0gbm8gbmVlZCB0byBzYXZlL3Jlc3RvcmUgZmxhZ3MuCkBAIC04MDYsNiArODA0LDcgQEAKIAogCW5laWdoLT5uZWlnaGJvdXIgPSBuZWlnaGJvdXI7CiAJKnRvX2lwb2liX25laWdoKG5laWdoYm91cikgPSBuZWlnaDsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZuZWlnaC0+cXVldWUpOwogCiAJcmV0dXJuIG5laWdoOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggOWIyMDQxZS4uZGQyMjFlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkgKiAtIGlmIHllcywgdGhlIG10YXNrIGlzIHJlY3ljbGVkIGF0IGlzY3NpX2NvbXBsZXRlX3BkdQogCSAqIC0gaWYgbm8sICB0aGUgbXRhc2sgaXMgcmVjeWNsZWQgYXQgaXNlcl9zbmRfY29tcGxldGlvbgogCSAqLwotCWlmIChlcnJvciAmJiBlcnJvciAhPSAtRUFHQUlOKQorCWlmIChlcnJvciAmJiBlcnJvciAhPSAtRU5PQlVGUykKIAkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJZXJyb3IgPSBpc2NzaV9pc2VyX2N0YXNrX3htaXRfdW5zb2xfZGF0YShjb25uLCBjdGFzayk7CiAKICBpc2NzaV9pc2VyX2N0YXNrX3htaXRfZXhpdDoKLQlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gLUVBR0FJTikKKwlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gLUVOT0JVRlMpCiAJCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oCmluZGV4IDIzNGU1YjAuLmNhZThjOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaApAQCAtMTgyLDcgKzE4Miw3IEBACiAJc3RydWN0IGlzZXJfbWVtX3JlZyAgICAgcmVnOyAgICAgICAgLyogbWVtb3J5IHJlZ2lzdHJhdGlvbiBpbmZvICAgICAgICAqLwogCXZvaWQgICAgICAgICAgICAgICAgICAgICp2aXJ0X2FkZHI7CiAJc3RydWN0IGlzZXJfZGV2aWNlICAgICAgKmRldmljZTsgICAgLyogZGV2aWNlLT5kZXZpY2UgZm9yIGRtYV91bm1hcCAgICAqLwotCWRtYV9hZGRyX3QgICAgICAgICAgICAgIGRtYV9hZGRyOyAgIC8qIGlmIG5vbiB6ZXJvLCBhZGRyIGZvciBkbWFfdW5tYXAgKi8KKwl1NjQgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkcjsgICAvKiBpZiBub24gemVybywgYWRkciBmb3IgZG1hX3VubWFwICovCiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOyAgLyogZGlyZWN0aW9uIGZvciBkbWFfdW5tYXAJICAgICAgICovCiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgZGF0YV9zaXplOwogCWF0b21pY190ICAgICAgICAgICAgICAgIHJlZl9jb3VudDsgIC8qIHJlZmNvdW50LCBmcmVlZCB3aGVuIGRlYyB0byAwICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfaW5pdGlhdG9yLmMKaW5kZXggOWIzZDc5Yy4uMGE3ZDFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfaW5pdGlhdG9yLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfaW5pdGlhdG9yLmMKQEAgLTMwNCwxOCArMzA0LDE0IEBACiBzdGF0aWMgaW50CiBpc2VyX2NoZWNrX3htaXQoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHZvaWQgKnRhc2spCiB7Ci0JaW50IHJjID0gMDsKIAlzdHJ1Y3QgaXNjc2lfaXNlcl9jb25uICppc2VyX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCi0Jd3JpdGVfbG9ja19iaChjb25uLT5yZWN2X2xvY2spOwogCWlmIChhdG9taWNfcmVhZCgmaXNlcl9jb25uLT5pYl9jb25uLT5wb3N0X3NlbmRfYnVmX2NvdW50KSA9PQogCSAgICBJU0VSX1FQX01BWF9SRVFfRFRPUykgewotCQlpc2VyX2RiZygiJWxkIGNhbid0IHhtaXQgdGFzayAlcCwgc3VzcGVuZGluZyB0eFxuIixqaWZmaWVzLHRhc2spOwotCQlzZXRfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF90eCk7Ci0JCXJjID0gLUVBR0FJTjsKKwkJaXNlcl9kYmcoIiVsZCBjYW4ndCB4bWl0IHRhc2sgJXBcbiIsamlmZmllcyx0YXNrKTsKKwkJcmV0dXJuIC1FTk9CVUZTOwogCX0KLQl3cml0ZV91bmxvY2tfYmgoY29ubi0+cmVjdl9sb2NrKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMzQwLDcgKzMzNiw3IEBACiAJCXJldHVybiAtRVBFUk07CiAJfQogCWlmIChpc2VyX2NoZWNrX3htaXQoY29ubiwgY3Rhc2spKQotCQlyZXR1cm4gLUVBR0FJTjsKKwkJcmV0dXJuIC1FTk9CVUZTOwogCiAJZWR0bCA9IG50b2hsKGhkci0+ZGF0YV9sZW5ndGgpOwogCkBAIC00MjYsNyArNDIyLDcgQEAKIAl9CiAKIAlpZiAoaXNlcl9jaGVja194bWl0KGNvbm4sIGN0YXNrKSkKLQkJcmV0dXJuIC1FQUdBSU47CisJCXJldHVybiAtRU5PQlVGUzsKIAogCWl0dCA9IG50b2hsKGhkci0+aXR0KTsKIAlkYXRhX3NlZ19sZW4gPSBudG9oMjQoaGRyLT5kbGVuZ3RoKTsKQEAgLTQ4NywxMCArNDgzLDggQEAKIAlzdHJ1Y3QgaXNjc2lfaXNlcl9jb25uICppc2VyX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCXN0cnVjdCBpc2VyX2Rlc2MgKm1kZXNjID0gbXRhc2stPmRkX2RhdGE7CiAJc3RydWN0IGlzZXJfZHRvICpzZW5kX2R0byA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IGl0dDsKIAl1bnNpZ25lZCBsb25nIGRhdGFfc2VnX2xlbjsKIAlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBjaGFyIG9wY29kZTsKIAlzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9idWY7CiAJc3RydWN0IGlzZXJfZGV2aWNlICpkZXZpY2U7CiAKQEAgLTUwMCw3ICs0OTQsNyBAQAogCX0KIAogCWlmIChpc2VyX2NoZWNrX3htaXQoY29ubixtdGFzaykpCi0JCXJldHVybiAtRUFHQUlOOworCQlyZXR1cm4gLUVOT0JVRlM7CiAKIAkvKiBidWlsZCB0aGUgdHggZGVzYyByZWdkIGhlYWRlciBhbmQgYWRkIGl0IHRvIHRoZSB0eCBkZXNjIGR0byAqLwogCW1kZXNjLT50eXBlID0gSVNDU0lfVFhfQ09OVFJPTDsKQEAgLTUxMiw4ICs1MDYsNiBAQAogCiAJaXNlcl9yZWdfc2luZ2xlKGRldmljZSwgc2VuZF9kdG8tPnJlZ2RbMF0sIERNQV9UT19ERVZJQ0UpOwogCi0JaXR0ID0gbnRvaGwobXRhc2stPmhkci0+aXR0KTsKLQlvcGNvZGUgPSBtdGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSzsKIAlkYXRhX3NlZ19sZW4gPSBudG9oMjQobXRhc2stPmhkci0+ZGxlbmd0aCk7CiAKIAlpZiAoZGF0YV9zZWdfbGVuID4gMCkgewpAQCAtNjA5LDYgKzYwMSw3IEBACiAJc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gaWJfY29ubi0+aXNlcl9jb25uOwogCXN0cnVjdCBpc2NzaV9jb25uICAgICAgKmNvbm4gPSBpc2VyX2Nvbm4tPmlzY3NpX2Nvbm47CiAJc3RydWN0IGlzY3NpX21nbXRfdGFzayAqbXRhc2s7CisJaW50IHJlc3VtZV90eCA9IDA7CiAKIAlpc2VyX2RiZygiSW5pdGlhdG9yLCBEYXRhIHNlbnQgZHRvPTB4JXBcbiIsIGR0byk7CiAKQEAgLTYxNywxNSArNjEwLDE2IEBACiAJaWYgKHR4X2Rlc2MtPnR5cGUgPT0gSVNDU0lfVFhfREFUQU9VVCkKIAkJa21lbV9jYWNoZV9mcmVlKGlnLmRlc2NfY2FjaGUsIHR4X2Rlc2MpOwogCisJaWYgKGF0b21pY19yZWFkKCZpc2VyX2Nvbm4tPmliX2Nvbm4tPnBvc3Rfc2VuZF9idWZfY291bnQpID09CisJICAgIElTRVJfUVBfTUFYX1JFUV9EVE9TKQorCQlyZXN1bWVfdHggPSAxOworCiAJYXRvbWljX2RlYygmaWJfY29ubi0+cG9zdF9zZW5kX2J1Zl9jb3VudCk7CiAKLQl3cml0ZV9sb2NrKGNvbm4tPnJlY3ZfbG9jayk7Ci0JaWYgKGNvbm4tPnN1c3BlbmRfdHgpIHsKKwlpZiAocmVzdW1lX3R4KSB7CiAJCWlzZXJfZGJnKCIlbGQgcmVzdW1pbmcgdHhcbiIsamlmZmllcyk7Ci0JCWNsZWFyX2JpdChJU0NTSV9TVVNQRU5EX0JJVCwgJmNvbm4tPnN1c3BlbmRfdHgpOwogCQlzY3NpX3F1ZXVlX3dvcmsoY29ubi0+c2Vzc2lvbi0+aG9zdCwgJmNvbm4tPnhtaXR3b3JrKTsKIAl9Ci0Jd3JpdGVfdW5sb2NrKGNvbm4tPnJlY3ZfbG9jayk7CiAKIAlpZiAodHhfZGVzYy0+dHlwZSA9PSBJU0NTSV9UWF9DT05UUk9MKSB7CiAJCS8qIHRoaXMgYXJpdGhtZXRpYyBpcyBsZWdhbCBieSBsaWJpc2NzaSBkZF9kYXRhIGFsbG9jYXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfbWVtb3J5LmMKaW5kZXggNWUxMjI1MC4uZmM5ZjFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfbWVtb3J5LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfbWVtb3J5LmMKQEAgLTUyLDcgKzUyLDcgQEAKICAqLwogaW50IGlzZXJfcmVnZF9idWZmX3JlbGVhc2Uoc3RydWN0IGlzZXJfcmVnZF9idWYgKnJlZ2RfYnVmKQogewotCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2U7CisJc3RydWN0IGliX2RldmljZSAqZGV2OwogCiAJaWYgKChhdG9taWNfcmVhZCgmcmVnZF9idWYtPnJlZl9jb3VudCkgPT0gMCkgfHwKIAkgICAgYXRvbWljX2RlY19hbmRfdGVzdCgmcmVnZF9idWYtPnJlZl9jb3VudCkpIHsKQEAgLTYxLDggKzYxLDggQEAKIAkJCWlzZXJfdW5yZWdfbWVtKCZyZWdkX2J1Zi0+cmVnKTsKIAogCQlpZiAocmVnZF9idWYtPmRtYV9hZGRyKSB7Ci0JCQlkbWFfZGV2aWNlID0gcmVnZF9idWYtPmRldmljZS0+aWJfZGV2aWNlLT5kbWFfZGV2aWNlOwotCQkJZG1hX3VubWFwX3NpbmdsZShkbWFfZGV2aWNlLAorCQkJZGV2ID0gcmVnZF9idWYtPmRldmljZS0+aWJfZGV2aWNlOworCQkJaWJfZG1hX3VubWFwX3NpbmdsZShkZXYsCiAJCQkJCSByZWdkX2J1Zi0+ZG1hX2FkZHIsCiAJCQkJCSByZWdkX2J1Zi0+ZGF0YV9zaXplLAogCQkJCQkgcmVnZF9idWYtPmRpcmVjdGlvbik7CkBAIC04NCwxMiArODQsMTIgQEAKIAkJICAgICBzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9idWYsCiAJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJdTY0IGRtYV9hZGRyOwogCi0JZG1hX2FkZHIgID0gZG1hX21hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJICAgcmVnZF9idWYtPnZpcnRfYWRkciwKLQkJCQkgICByZWdkX2J1Zi0+ZGF0YV9zaXplLCBkaXJlY3Rpb24pOwotCUJVR19PTihkbWFfbWFwcGluZ19lcnJvcihkbWFfYWRkcikpOworCWRtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsCisJCQkJICAgICByZWdkX2J1Zi0+dmlydF9hZGRyLAorCQkJCSAgICAgcmVnZF9idWYtPmRhdGFfc2l6ZSwgZGlyZWN0aW9uKTsKKwlCVUdfT04oaWJfZG1hX21hcHBpbmdfZXJyb3IoZGV2aWNlLT5pYl9kZXZpY2UsIGRtYV9hZGRyKSk7CiAKIAlyZWdkX2J1Zi0+cmVnLmxrZXkgPSBkZXZpY2UtPm1yLT5sa2V5OwogCXJlZ2RfYnVmLT5yZWcubGVuICA9IHJlZ2RfYnVmLT5kYXRhX3NpemU7CkBAIC0xMDcsMTQgKzEwNywxNCBAQAogCQkJCSBlbnVtIGlzZXJfZGF0YV9kaXIgY21kX2RpcikKIHsKIAlpbnQgZG1hX25lbnRzOwotCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2U7CisJc3RydWN0IGliX2RldmljZSAqZGV2OwogCWNoYXIgKm1lbSA9IE5VTEw7CiAJc3RydWN0IGlzZXJfZGF0YV9idWYgKmRhdGEgPSAmaXNlcl9jdGFzay0+ZGF0YVtjbWRfZGlyXTsKIAl1bnNpZ25lZCBsb25nICBjbWRfZGF0YV9sZW4gPSBkYXRhLT5kYXRhX2xlbjsKIAogCWlmIChjbWRfZGF0YV9sZW4gPiBJU0VSX0tNQUxMT0NfVEhSRVNIT0xEKQogCQltZW0gPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX05PSU8sCi0JCSAgICAgIGxvbmdfbG9nMihyb3VuZHVwX3Bvd19vZl90d28oY21kX2RhdGFfbGVuKSkgLSBQQUdFX1NISUZUKTsKKwkJICAgICAgaWxvZzIocm91bmR1cF9wb3dfb2ZfdHdvKGNtZF9kYXRhX2xlbikpIC0gUEFHRV9TSElGVCk7CiAJZWxzZQogCQltZW0gPSBrbWFsbG9jKGNtZF9kYXRhX2xlbiwgR0ZQX05PSU8pOwogCkBAIC0xNDcsMTcgKzE0NywxMiBAQAogCiAJaXNlcl9jdGFzay0+ZGF0YV9jb3B5W2NtZF9kaXJdLmNvcHlfYnVmICA9IG1lbTsKIAotCWRtYV9kZXZpY2UgPSBpc2VyX2N0YXNrLT5pc2VyX2Nvbm4tPmliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlLT5kbWFfZGV2aWNlOwotCi0JaWYgKGNtZF9kaXIgPT0gSVNFUl9ESVJfT1VUKQotCQlkbWFfbmVudHMgPSBkbWFfbWFwX3NnKGRtYV9kZXZpY2UsCi0JCQkJICAgICAgICZpc2VyX2N0YXNrLT5kYXRhX2NvcHlbY21kX2Rpcl0uc2dfc2luZ2xlLAotCQkJCSAgICAgICAxLCBETUFfVE9fREVWSUNFKTsKLQllbHNlCi0JCWRtYV9uZW50cyA9IGRtYV9tYXBfc2coZG1hX2RldmljZSwKLQkJCQkgICAgICAgJmlzZXJfY3Rhc2stPmRhdGFfY29weVtjbWRfZGlyXS5zZ19zaW5nbGUsCi0JCQkJICAgICAgIDEsIERNQV9GUk9NX0RFVklDRSk7Ci0KKwlkZXYgPSBpc2VyX2N0YXNrLT5pc2VyX2Nvbm4tPmliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlOworCWRtYV9uZW50cyA9IGliX2RtYV9tYXBfc2coZGV2LAorCQkJCSAgJmlzZXJfY3Rhc2stPmRhdGFfY29weVtjbWRfZGlyXS5zZ19zaW5nbGUsCisJCQkJICAxLAorCQkJCSAgKGNtZF9kaXIgPT0gSVNFUl9ESVJfT1VUKSA/CisJCQkJICBETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKIAlCVUdfT04oZG1hX25lbnRzID09IDApOwogCiAJaXNlcl9jdGFzay0+ZGF0YV9jb3B5W2NtZF9kaXJdLmRtYV9uZW50cyA9IGRtYV9uZW50czsKQEAgLTE3MCwxOSArMTY1LDE2IEBACiB2b2lkIGlzZXJfZmluYWxpemVfcmRtYV91bmFsaWduZWRfc2coc3RydWN0IGlzY3NpX2lzZXJfY21kX3Rhc2sgKmlzZXJfY3Rhc2ssCiAJCQkJICAgICBlbnVtIGlzZXJfZGF0YV9kaXIgICAgICAgICBjbWRfZGlyKQogewotCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2U7CisJc3RydWN0IGliX2RldmljZSAqZGV2OwogCXN0cnVjdCBpc2VyX2RhdGFfYnVmICptZW1fY29weTsKIAl1bnNpZ25lZCBsb25nICBjbWRfZGF0YV9sZW47CiAKLQlkbWFfZGV2aWNlID0gaXNlcl9jdGFzay0+aXNlcl9jb25uLT5pYl9jb25uLT5kZXZpY2UtPmliX2RldmljZS0+ZG1hX2RldmljZTsKLQltZW1fY29weSAgID0gJmlzZXJfY3Rhc2stPmRhdGFfY29weVtjbWRfZGlyXTsKKwlkZXYgPSBpc2VyX2N0YXNrLT5pc2VyX2Nvbm4tPmliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlOworCW1lbV9jb3B5ID0gJmlzZXJfY3Rhc2stPmRhdGFfY29weVtjbWRfZGlyXTsKIAotCWlmIChjbWRfZGlyID09IElTRVJfRElSX09VVCkKLQkJZG1hX3VubWFwX3NnKGRtYV9kZXZpY2UsICZtZW1fY29weS0+c2dfc2luZ2xlLCAxLAotCQkJICAgICBETUFfVE9fREVWSUNFKTsKLQllbHNlCi0JCWRtYV91bm1hcF9zZyhkbWFfZGV2aWNlLCAmbWVtX2NvcHktPnNnX3NpbmdsZSwgMSwKLQkJCSAgICAgRE1BX0ZST01fREVWSUNFKTsKKwlpYl9kbWFfdW5tYXBfc2coZGV2LCAmbWVtX2NvcHktPnNnX3NpbmdsZSwgMSwKKwkJCShjbWRfZGlyID09IElTRVJfRElSX09VVCkgPworCQkJRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CiAKIAlpZiAoY21kX2RpciA9PSBJU0VSX0RJUl9JTikgewogCQljaGFyICptZW07CkBAIC0yMTEsNyArMjAzLDcgQEAKIAogCWlmIChjbWRfZGF0YV9sZW4gPiBJU0VSX0tNQUxMT0NfVEhSRVNIT0xEKQogCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW1lbV9jb3B5LT5jb3B5X2J1ZiwKLQkJCSAgIGxvbmdfbG9nMihyb3VuZHVwX3Bvd19vZl90d28oY21kX2RhdGFfbGVuKSkgLSBQQUdFX1NISUZUKTsKKwkJCSAgIGlsb2cyKHJvdW5kdXBfcG93X29mX3R3byhjbWRfZGF0YV9sZW4pKSAtIFBBR0VfU0hJRlQpOwogCWVsc2UKIAkJa2ZyZWUobWVtX2NvcHktPmNvcHlfYnVmKTsKIApAQCAtMjMxLDExICsyMjMsMTIgQEAKICAqIGNvbnNlY3V0aXZlIGVsZW1lbnRzLiBBbHNvLCBpdCBoYW5kbGVzIG9uZSBlbnRyeSBTRy4KICAqLwogc3RhdGljIGludCBpc2VyX3NnX3RvX3BhZ2VfdmVjKHN0cnVjdCBpc2VyX2RhdGFfYnVmICpkYXRhLAotCQkJICAgICAgIHN0cnVjdCBpc2VyX3BhZ2VfdmVjICpwYWdlX3ZlYykKKwkJCSAgICAgICBzdHJ1Y3QgaXNlcl9wYWdlX3ZlYyAqcGFnZV92ZWMsCisJCQkgICAgICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilkYXRhLT5idWY7Ci0JZG1hX2FkZHJfdCBmaXJzdF9hZGRyLCBsYXN0X2FkZHIsIHBhZ2U7Ci0JaW50IHN0YXJ0X2FsaWduZWQsIGVuZF9hbGlnbmVkOworCXU2NCBmaXJzdF9hZGRyLCBsYXN0X2FkZHIsIHBhZ2U7CisJaW50IGVuZF9hbGlnbmVkOwogCXVuc2lnbmVkIGludCBjdXJfcGFnZSA9IDA7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9zeiA9IDA7CiAJaW50IGk7CkBAIC0yNDQsMTkgKzIzNywyMSBAQAogCXBhZ2VfdmVjLT5vZmZzZXQgPSAodTY0KSBzZ1swXS5vZmZzZXQgJiB+TUFTS180SzsKIAogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5kbWFfbmVudHM7IGkrKykgewotCQl0b3RhbF9zeiArPSBzZ19kbWFfbGVuKCZzZ1tpXSk7CisJCXVuc2lnbmVkIGludCBkbWFfbGVuID0gaWJfc2dfZG1hX2xlbihpYmRldiwgJnNnW2ldKTsKIAotCQlmaXJzdF9hZGRyID0gc2dfZG1hX2FkZHJlc3MoJnNnW2ldKTsKLQkJbGFzdF9hZGRyICA9IGZpcnN0X2FkZHIgKyBzZ19kbWFfbGVuKCZzZ1tpXSk7CisJCXRvdGFsX3N6ICs9IGRtYV9sZW47CiAKLQkJc3RhcnRfYWxpZ25lZCA9ICEoZmlyc3RfYWRkciAmIH5NQVNLXzRLKTsKKwkJZmlyc3RfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCAmc2dbaV0pOworCQlsYXN0X2FkZHIgID0gZmlyc3RfYWRkciArIGRtYV9sZW47CisKIAkJZW5kX2FsaWduZWQgICA9ICEobGFzdF9hZGRyICAmIH5NQVNLXzRLKTsKIAogCQkvKiBjb250aW51ZSB0byBjb2xsZWN0IHBhZ2UgZnJhZ21lbnRzIHRpbGwgYWxpZ25lZCBvciBTRyBlbmRzICovCiAJCXdoaWxlICghZW5kX2FsaWduZWQgJiYgKGkgKyAxIDwgZGF0YS0+ZG1hX25lbnRzKSkgewogCQkJaSsrOwotCQkJdG90YWxfc3ogKz0gc2dfZG1hX2xlbigmc2dbaV0pOwotCQkJbGFzdF9hZGRyID0gc2dfZG1hX2FkZHJlc3MoJnNnW2ldKSArIHNnX2RtYV9sZW4oJnNnW2ldKTsKKwkJCWRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGliZGV2LCAmc2dbaV0pOworCQkJdG90YWxfc3ogKz0gZG1hX2xlbjsKKwkJCWxhc3RfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCAmc2dbaV0pICsgZG1hX2xlbjsKIAkJCWVuZF9hbGlnbmVkID0gIShsYXN0X2FkZHIgICYgfk1BU0tfNEspOwogCQl9CiAKQEAgLTI4OCwxMCArMjgzLDExIEBACiAgKiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd2hpY2ggYXJlIGFsaWduZWQgY29ycmVjdGx5LiBTdXBwb3J0cyB0aGUgY2FzZSB3aGVyZQogICogY29uc2VjdXRpdmUgU0cgZWxlbWVudHMgYXJlIGFjdHVhbGx5IGZyYWdtZW50cyBvZiB0aGUgc2FtZSBwaHlzY2lhbCBwYWdlLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGlzZXJfZGF0YV9idWZfYWxpZ25lZF9sZW4oc3RydWN0IGlzZXJfZGF0YV9idWYgKmRhdGEpCitzdGF0aWMgdW5zaWduZWQgaW50IGlzZXJfZGF0YV9idWZfYWxpZ25lZF9sZW4oc3RydWN0IGlzZXJfZGF0YV9idWYgKmRhdGEsCisJCQkJCSAgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JZG1hX2FkZHJfdCBlbmRfYWRkciwgbmV4dF9hZGRyOworCXU2NCBlbmRfYWRkciwgbmV4dF9hZGRyOwogCWludCBpLCBjbnQ7CiAJdW5zaWduZWQgaW50IHJldF9sZW4gPSAwOwogCkBAIC0zMDMsMTIgKzI5OSwxMiBAQAogCQkgICAodW5zaWduZWQgbG9uZylwYWdlX3RvX3BoeXMoc2dbaV0ucGFnZSksCiAJCSAgICh1bnNpZ25lZCBsb25nKXNnW2ldLm9mZnNldCwKIAkJICAgKHVuc2lnbmVkIGxvbmcpc2dbaV0ubGVuZ3RoKTsgKi8KLQkJZW5kX2FkZHIgPSBzZ19kbWFfYWRkcmVzcygmc2dbaV0pICsKLQkJCSAgIHNnX2RtYV9sZW4oJnNnW2ldKTsKKwkJZW5kX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhpYmRldiwgJnNnW2ldKSArCisJCQkgICBpYl9zZ19kbWFfbGVuKGliZGV2LCAmc2dbaV0pOwogCQkvKiBpc2VyX2RiZygiQ2hlY2tpbmcgc2cgaW9idWYgZW5kIGFkZHJlc3MgIgogCQkgICAgICAgIjB4JTA4bFhcbiIsIGVuZF9hZGRyKTsgKi8KIAkJaWYgKGkgKyAxIDwgZGF0YS0+ZG1hX25lbnRzKSB7Ci0JCQluZXh0X2FkZHIgPSBzZ19kbWFfYWRkcmVzcygmc2dbaSsxXSk7CisJCQluZXh0X2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhpYmRldiwgJnNnW2krMV0pOwogCQkJLyogYXJlIGksIGkrMSBmcmFnbWVudHMgb2YgdGhlIHNhbWUgcGFnZT8gKi8KIAkJCWlmIChlbmRfYWRkciA9PSBuZXh0X2FkZHIpCiAJCQkJY29udGludWU7CkBAIC0zMjUsNyArMzIxLDggQEAKIAlyZXR1cm4gcmV0X2xlbjsKIH0KIAotc3RhdGljIHZvaWQgaXNlcl9kYXRhX2J1Zl9kdW1wKHN0cnVjdCBpc2VyX2RhdGFfYnVmICpkYXRhKQorc3RhdGljIHZvaWQgaXNlcl9kYXRhX2J1Zl9kdW1wKHN0cnVjdCBpc2VyX2RhdGFfYnVmICpkYXRhLAorCQkJICAgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopZGF0YS0+YnVmOwogCWludCBpOwpAQCAtMzMzLDkgKzMzMCw5IEBACiAJZm9yIChpID0gMDsgaSA8IGRhdGEtPmRtYV9uZW50czsgaSsrKQogCQlpc2VyX2Vycigic2dbJWRdIGRtYV9hZGRyOjB4JWxYIHBhZ2U6MHglcCAiCiAJCQkgIm9mZjoweCV4IHN6OjB4JXggZG1hX2xlbjoweCV4XG4iLAotCQkJIGksICh1bnNpZ25lZCBsb25nKXNnX2RtYV9hZGRyZXNzKCZzZ1tpXSksCisJCQkgaSwgKHVuc2lnbmVkIGxvbmcpaWJfc2dfZG1hX2FkZHJlc3MoaWJkZXYsICZzZ1tpXSksCiAJCQkgc2dbaV0ucGFnZSwgc2dbaV0ub2Zmc2V0LAotCQkJIHNnW2ldLmxlbmd0aCxzZ19kbWFfbGVuKCZzZ1tpXSkpOworCQkJIHNnW2ldLmxlbmd0aCwgaWJfc2dfZG1hX2xlbihpYmRldiwgJnNnW2ldKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGlzZXJfZHVtcF9wYWdlX3ZlYyhzdHJ1Y3QgaXNlcl9wYWdlX3ZlYyAqcGFnZV92ZWMpCkBAIC0zNDksNyArMzQ2LDggQEAKIH0KIAogc3RhdGljIHZvaWQgaXNlcl9wYWdlX3ZlY19idWlsZChzdHJ1Y3QgaXNlcl9kYXRhX2J1ZiAqZGF0YSwKLQkJCQlzdHJ1Y3QgaXNlcl9wYWdlX3ZlYyAqcGFnZV92ZWMpCisJCQkJc3RydWN0IGlzZXJfcGFnZV92ZWMgKnBhZ2VfdmVjLAorCQkJCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQogewogCWludCBwYWdlX3ZlY19sZW4gPSAwOwogCkBAIC0zNTcsMTQgKzM1NSwxNCBAQAogCXBhZ2VfdmVjLT5vZmZzZXQgPSAwOwogCiAJaXNlcl9kYmcoIlRyYW5zbGF0aW5nIHNnIHN6OiAlZFxuIiwgZGF0YS0+ZG1hX25lbnRzKTsKLQlwYWdlX3ZlY19sZW4gPSBpc2VyX3NnX3RvX3BhZ2VfdmVjKGRhdGEscGFnZV92ZWMpOworCXBhZ2VfdmVjX2xlbiA9IGlzZXJfc2dfdG9fcGFnZV92ZWMoZGF0YSwgcGFnZV92ZWMsIGliZGV2KTsKIAlpc2VyX2RiZygic2cgbGVuICVkIHBhZ2VfdmVjX2xlbiAlZFxuIiwgZGF0YS0+ZG1hX25lbnRzLHBhZ2VfdmVjX2xlbik7CiAKIAlwYWdlX3ZlYy0+bGVuZ3RoID0gcGFnZV92ZWNfbGVuOwogCiAJaWYgKHBhZ2VfdmVjX2xlbiAqIFNJWkVfNEsgPCBwYWdlX3ZlYy0+ZGF0YV9zaXplKSB7CiAJCWlzZXJfZXJyKCJwYWdlX3ZlYyB0b28gc2hvcnQgdG8gaG9sZCB0aGlzIFNHXG4iKTsKLQkJaXNlcl9kYXRhX2J1Zl9kdW1wKGRhdGEpOworCQlpc2VyX2RhdGFfYnVmX2R1bXAoZGF0YSwgaWJkZXYpOwogCQlpc2VyX2R1bXBfcGFnZV92ZWMocGFnZV92ZWMpOwogCQlCVUcoKTsKIAl9CkBAIC0zNzUsMTMgKzM3MywxMiBAQAogCQkJICAgIGVudW0gICBpc2VyX2RhdGFfZGlyICAgICAgIGlzZXJfZGlyLAogCQkJICAgIGVudW0gICBkbWFfZGF0YV9kaXJlY3Rpb24gIGRtYV9kaXIpCiB7Ci0Jc3RydWN0IGRldmljZSAqZG1hX2RldmljZTsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXY7CiAKIAlpc2VyX2N0YXNrLT5kaXJbaXNlcl9kaXJdID0gMTsKLQlkbWFfZGV2aWNlID0KLQkJaXNlcl9jdGFzay0+aXNlcl9jb25uLT5pYl9jb25uLT5kZXZpY2UtPmliX2RldmljZS0+ZG1hX2RldmljZTsKKwlkZXYgPSBpc2VyX2N0YXNrLT5pc2VyX2Nvbm4tPmliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlOwogCi0JZGF0YS0+ZG1hX25lbnRzID0gZG1hX21hcF9zZyhkbWFfZGV2aWNlLCBkYXRhLT5idWYsIGRhdGEtPnNpemUsIGRtYV9kaXIpOworCWRhdGEtPmRtYV9uZW50cyA9IGliX2RtYV9tYXBfc2coZGV2LCBkYXRhLT5idWYsIGRhdGEtPnNpemUsIGRtYV9kaXIpOwogCWlmIChkYXRhLT5kbWFfbmVudHMgPT0gMCkgewogCQlpc2VyX2VycigiZG1hX21hcF9zZyBmYWlsZWQhISFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM5MSwyMCArMzg4LDE5IEBACiAKIHZvaWQgaXNlcl9kbWFfdW5tYXBfdGFza19kYXRhKHN0cnVjdCBpc2NzaV9pc2VyX2NtZF90YXNrICppc2VyX2N0YXNrKQogewotCXN0cnVjdCBkZXZpY2UgICpkbWFfZGV2aWNlOworCXN0cnVjdCBpYl9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaXNlcl9kYXRhX2J1ZiAqZGF0YTsKIAotCWRtYV9kZXZpY2UgPQotCQlpc2VyX2N0YXNrLT5pc2VyX2Nvbm4tPmliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlLT5kbWFfZGV2aWNlOworCWRldiA9IGlzZXJfY3Rhc2stPmlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlLT5pYl9kZXZpY2U7CiAKIAlpZiAoaXNlcl9jdGFzay0+ZGlyW0lTRVJfRElSX0lOXSkgewogCQlkYXRhID0gJmlzZXJfY3Rhc2stPmRhdGFbSVNFUl9ESVJfSU5dOwotCQlkbWFfdW5tYXBfc2coZG1hX2RldmljZSwgZGF0YS0+YnVmLCBkYXRhLT5zaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCQlpYl9kbWFfdW5tYXBfc2coZGV2LCBkYXRhLT5idWYsIGRhdGEtPnNpemUsIERNQV9GUk9NX0RFVklDRSk7CiAJfQogCiAJaWYgKGlzZXJfY3Rhc2stPmRpcltJU0VSX0RJUl9PVVRdKSB7CiAJCWRhdGEgPSAmaXNlcl9jdGFzay0+ZGF0YVtJU0VSX0RJUl9PVVRdOwotCQlkbWFfdW5tYXBfc2coZG1hX2RldmljZSwgZGF0YS0+YnVmLCBkYXRhLT5zaXplLCBETUFfVE9fREVWSUNFKTsKKwkJaWJfZG1hX3VubWFwX3NnKGRldiwgZGF0YS0+YnVmLCBkYXRhLT5zaXplLCBETUFfVE9fREVWSUNFKTsKIAl9CiB9CiAKQEAgLTQxOSw2ICs0MTUsNyBAQAogewogCXN0cnVjdCBpc2VyX2Nvbm4gICAgICppYl9jb25uID0gaXNlcl9jdGFzay0+aXNlcl9jb25uLT5pYl9jb25uOwogCXN0cnVjdCBpc2VyX2RldmljZSAgICpkZXZpY2UgPSBpYl9jb25uLT5kZXZpY2U7CisJc3RydWN0IGliX2RldmljZSAgICAgKmliZGV2ID0gZGV2aWNlLT5pYl9kZXZpY2U7CiAJc3RydWN0IGlzZXJfZGF0YV9idWYgKm1lbSA9ICZpc2VyX2N0YXNrLT5kYXRhW2NtZF9kaXJdOwogCXN0cnVjdCBpc2VyX3JlZ2RfYnVmICpyZWdkX2J1ZjsKIAlpbnQgYWxpZ25lZF9sZW47CkBAIC00MjgsMTEgKzQyNSwxMSBAQAogCiAJcmVnZF9idWYgPSAmaXNlcl9jdGFzay0+cmRtYV9yZWdkW2NtZF9kaXJdOwogCi0JYWxpZ25lZF9sZW4gPSBpc2VyX2RhdGFfYnVmX2FsaWduZWRfbGVuKG1lbSk7CisJYWxpZ25lZF9sZW4gPSBpc2VyX2RhdGFfYnVmX2FsaWduZWRfbGVuKG1lbSwgaWJkZXYpOwogCWlmIChhbGlnbmVkX2xlbiAhPSBtZW0tPmRtYV9uZW50cykgewogCQlpc2VyX2VycigicmRtYSBhbGlnbm1lbnQgdmlvbGF0aW9uICVkLyVkIGFsaWduZWRcbiIsCiAJCQkgYWxpZ25lZF9sZW4sIG1lbS0+c2l6ZSk7Ci0JCWlzZXJfZGF0YV9idWZfZHVtcChtZW0pOworCQlpc2VyX2RhdGFfYnVmX2R1bXAobWVtLCBpYmRldik7CiAKIAkJLyogdW5tYXAgdGhlIGNvbW1hbmQgZGF0YSBiZWZvcmUgYWNjZXNzaW5nIGl0ICovCiAJCWlzZXJfZG1hX3VubWFwX3Rhc2tfZGF0YShpc2VyX2N0YXNrKTsKQEAgLTQ1MCw4ICs0NDcsOCBAQAogCiAJCXJlZ2RfYnVmLT5yZWcubGtleSA9IGRldmljZS0+bXItPmxrZXk7CiAJCXJlZ2RfYnVmLT5yZWcucmtleSA9IGRldmljZS0+bXItPnJrZXk7Ci0JCXJlZ2RfYnVmLT5yZWcubGVuICA9IHNnX2RtYV9sZW4oJnNnWzBdKTsKLQkJcmVnZF9idWYtPnJlZy52YSAgID0gc2dfZG1hX2FkZHJlc3MoJnNnWzBdKTsKKwkJcmVnZF9idWYtPnJlZy5sZW4gID0gaWJfc2dfZG1hX2xlbihpYmRldiwgJnNnWzBdKTsKKwkJcmVnZF9idWYtPnJlZy52YSAgID0gaWJfc2dfZG1hX2FkZHJlc3MoaWJkZXYsICZzZ1swXSk7CiAJCXJlZ2RfYnVmLT5yZWcuaXNfZm1yID0gMDsKIAogCQlpc2VyX2RiZygiUEhZU0lDQUwgTWVtLnJlZ2lzdGVyOiBsa2V5OiAweCUwOFggcmtleTogMHglMDhYICAiCkBAIC00NjEsMTAgKzQ1OCwxMCBAQAogCQkJICh1bnNpZ25lZCBsb25nKXJlZ2RfYnVmLT5yZWcudmEsCiAJCQkgKHVuc2lnbmVkIGxvbmcpcmVnZF9idWYtPnJlZy5sZW4pOwogCX0gZWxzZSB7IC8qIHVzZSBGTVIgZm9yIG11bHRpcGxlIGRtYSBlbnRyaWVzICovCi0JCWlzZXJfcGFnZV92ZWNfYnVpbGQobWVtLCBpYl9jb25uLT5wYWdlX3ZlYyk7CisJCWlzZXJfcGFnZV92ZWNfYnVpbGQobWVtLCBpYl9jb25uLT5wYWdlX3ZlYywgaWJkZXYpOwogCQllcnIgPSBpc2VyX3JlZ19wYWdlX3ZlYyhpYl9jb25uLCBpYl9jb25uLT5wYWdlX3ZlYywgJnJlZ2RfYnVmLT5yZWcpOwogCQlpZiAoZXJyKSB7Ci0JCQlpc2VyX2RhdGFfYnVmX2R1bXAobWVtKTsKKwkJCWlzZXJfZGF0YV9idWZfZHVtcChtZW0sIGliZGV2KTsKIAkJCWlzZXJfZXJyKCJtZW0tPmRtYV9uZW50cyA9ICVkIChkbGVuZ3RoID0gMHgleClcbiIsIG1lbS0+ZG1hX25lbnRzLAogCQkJCSBudG9oMjQoaXNlcl9jdGFzay0+ZGVzYy5pc2NzaV9oZWFkZXIuZGxlbmd0aCkpOwogCQkJaXNlcl9lcnIoInBhZ2VfdmVjOiBkYXRhX3NpemUgPSAweCV4LCBsZW5ndGggPSAlZCwgb2Zmc2V0ID0gMHgleFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKaW5kZXggYTYyODk1OS4uNzI2MTFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKQEAgLTEyMiw5ICsxMjIsOCBAQAogCWlmICghaXUtPmJ1ZikKIAkJZ290byBvdXRfZnJlZV9pdTsKIAotCWl1LT5kbWEgPSBkbWFfbWFwX3NpbmdsZShob3N0LT5kZXYtPmRldi0+ZG1hX2RldmljZSwKLQkJCQkgaXUtPmJ1Ziwgc2l6ZSwgZGlyZWN0aW9uKTsKLQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoaXUtPmRtYSkpCisJaXUtPmRtYSA9IGliX2RtYV9tYXBfc2luZ2xlKGhvc3QtPmRldi0+ZGV2LCBpdS0+YnVmLCBzaXplLCBkaXJlY3Rpb24pOworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcihob3N0LT5kZXYtPmRldiwgaXUtPmRtYSkpCiAJCWdvdG8gb3V0X2ZyZWVfYnVmOwogCiAJaXUtPnNpemUgICAgICA9IHNpemU7CkBAIC0xNDUsOCArMTQ0LDcgQEAKIAlpZiAoIWl1KQogCQlyZXR1cm47CiAKLQlkbWFfdW5tYXBfc2luZ2xlKGhvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlLAotCQkJIGl1LT5kbWEsIGl1LT5zaXplLCBpdS0+ZGlyZWN0aW9uKTsKKwlpYl9kbWFfdW5tYXBfc2luZ2xlKGhvc3QtPmRldi0+ZGV2LCBpdS0+ZG1hLCBpdS0+c2l6ZSwgaXUtPmRpcmVjdGlvbik7CiAJa2ZyZWUoaXUtPmJ1Zik7CiAJa2ZyZWUoaXUpOwogfQpAQCAtNDgyLDggKzQ4MCw4IEBACiAJCXNjYXQgID0gJnJlcS0+ZmFrZV9zZzsKIAl9CiAKLQlkbWFfdW5tYXBfc2codGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXYtPmRtYV9kZXZpY2UsIHNjYXQsIG5lbnRzLAotCQkgICAgIHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7CisJaWJfZG1hX3VubWFwX3NnKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LCBzY2F0LCBuZW50cywKKwkJCXNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNycF9yZW1vdmVfcmVxKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCwgc3RydWN0IHNycF9yZXF1ZXN0ICpyZXEpCkBAIC01OTUsMjMgKzU5MywyNiBAQAogCWludCBpLCBqOwogCWludCByZXQ7CiAJc3RydWN0IHNycF9kZXZpY2UgKmRldiA9IHRhcmdldC0+c3JwX2hvc3QtPmRldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiA9IGRldi0+ZGV2OwogCiAJaWYgKCFkZXYtPmZtcl9wb29sKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICgoc2dfZG1hX2FkZHJlc3MoJnNjYXRbMF0pICYgfmRldi0+Zm1yX3BhZ2VfbWFzaykgJiYKKwlpZiAoKGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCAmc2NhdFswXSkgJiB+ZGV2LT5mbXJfcGFnZV9tYXNrKSAmJgogCSAgICBtZWxsYW5veF93b3JrYXJvdW5kcyAmJiAhbWVtY21wKCZ0YXJnZXQtPmlvY19ndWlkLCBtZWxsYW5veF9vdWksIDMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxlbiA9IHBhZ2VfY250ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgc2dfY250OyArK2kpIHsKLQkJaWYgKHNnX2RtYV9hZGRyZXNzKCZzY2F0W2ldKSAmIH5kZXYtPmZtcl9wYWdlX21hc2spIHsKKwkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGliZGV2LCAmc2NhdFtpXSk7CisKKwkJaWYgKGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCAmc2NhdFtpXSkgJiB+ZGV2LT5mbXJfcGFnZV9tYXNrKSB7CiAJCQlpZiAoaSA+IDApCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQllbHNlCiAJCQkJKytwYWdlX2NudDsKIAkJfQotCQlpZiAoKHNnX2RtYV9hZGRyZXNzKCZzY2F0W2ldKSArIHNnX2RtYV9sZW4oJnNjYXRbaV0pKSAmCisJCWlmICgoaWJfc2dfZG1hX2FkZHJlc3MoaWJkZXYsICZzY2F0W2ldKSArIGRtYV9sZW4pICYKIAkJICAgIH5kZXYtPmZtcl9wYWdlX21hc2spIHsKIAkJCWlmIChpIDwgc2dfY250IC0gMSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTYxOSw3ICs2MjAsNyBAQAogCQkJCSsrcGFnZV9jbnQ7CiAJCX0KIAotCQlsZW4gKz0gc2dfZG1hX2xlbigmc2NhdFtpXSk7CisJCWxlbiArPSBkbWFfbGVuOwogCX0KIAogCXBhZ2VfY250ICs9IGxlbiA+PiBkZXYtPmZtcl9wYWdlX3NoaWZ0OwpAQCAtNjMxLDEwICs2MzIsMTQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwYWdlX2NudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHNnX2NudDsgKytpKQotCQlmb3IgKGogPSAwOyBqIDwgc2dfZG1hX2xlbigmc2NhdFtpXSk7IGogKz0gZGV2LT5mbXJfcGFnZV9zaXplKQorCWZvciAoaSA9IDA7IGkgPCBzZ19jbnQ7ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oaWJkZXYsICZzY2F0W2ldKTsKKworCQlmb3IgKGogPSAwOyBqIDwgZG1hX2xlbjsgaiArPSBkZXYtPmZtcl9wYWdlX3NpemUpCiAJCQlkbWFfcGFnZXNbcGFnZV9jbnQrK10gPQotCQkJCShzZ19kbWFfYWRkcmVzcygmc2NhdFtpXSkgJiBkZXYtPmZtcl9wYWdlX21hc2spICsgajsKKwkJCQkoaWJfc2dfZG1hX2FkZHJlc3MoaWJkZXYsICZzY2F0W2ldKSAmCisJCQkJIGRldi0+Zm1yX3BhZ2VfbWFzaykgKyBqOworCX0KIAogCXJlcS0+Zm1yID0gaWJfZm1yX3Bvb2xfbWFwX3BoeXMoZGV2LT5mbXJfcG9vbCwKIAkJCQkJZG1hX3BhZ2VzLCBwYWdlX2NudCwgaW9fYWRkcik7CkBAIC02NDQsNyArNjQ5LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JYnVmLT52YSAgPSBjcHVfdG9fYmU2NChzZ19kbWFfYWRkcmVzcygmc2NhdFswXSkgJiB+ZGV2LT5mbXJfcGFnZV9tYXNrKTsKKwlidWYtPnZhICA9IGNwdV90b19iZTY0KGliX3NnX2RtYV9hZGRyZXNzKGliZGV2LCAmc2NhdFswXSkgJgorCQkJICAgICAgIH5kZXYtPmZtcl9wYWdlX21hc2spOwogCWJ1Zi0+a2V5ID0gY3B1X3RvX2JlMzIocmVxLT5mbXItPmZtci0+cmtleSk7CiAJYnVmLT5sZW4gPSBjcHVfdG9fYmUzMihsZW4pOwogCkBAIC02NjMsNiArNjY5LDggQEAKIAlzdHJ1Y3Qgc3JwX2NtZCAqY21kID0gcmVxLT5jbWQtPmJ1ZjsKIAlpbnQgbGVuLCBuZW50cywgY291bnQ7CiAJdTggZm10ID0gU1JQX0RBVEFfREVTQ19ESVJFQ1Q7CisJc3RydWN0IHNycF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlICppYmRldjsKIAogCWlmICghc2NtbmQtPnJlcXVlc3RfYnVmZmVyIHx8IHNjbW5kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfTk9ORSkKIAkJcmV0dXJuIHNpemVvZiAoc3RydWN0IHNycF9jbWQpOwpAQCAtNjg3LDggKzY5NSwxMCBAQAogCQlzZ19pbml0X29uZShzY2F0LCBzY21uZC0+cmVxdWVzdF9idWZmZXIsIHNjbW5kLT5yZXF1ZXN0X2J1ZmZsZW4pOwogCX0KIAotCWNvdW50ID0gZG1hX21hcF9zZyh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldi0+ZG1hX2RldmljZSwKLQkJCSAgIHNjYXQsIG5lbnRzLCBzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCWRldiA9IHRhcmdldC0+c3JwX2hvc3QtPmRldjsKKwlpYmRldiA9IGRldi0+ZGV2OworCisJY291bnQgPSBpYl9kbWFfbWFwX3NnKGliZGV2LCBzY2F0LCBuZW50cywgc2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uKTsKIAogCWZtdCA9IFNSUF9EQVRBX0RFU0NfRElSRUNUOwogCWxlbiA9IHNpemVvZiAoc3RydWN0IHNycF9jbWQpICsJc2l6ZW9mIChzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYpOwpAQCAtNzAyLDkgKzcxMiw5IEBACiAJCSAqLwogCQlzdHJ1Y3Qgc3JwX2RpcmVjdF9idWYgKmJ1ZiA9ICh2b2lkICopIGNtZC0+YWRkX2RhdGE7CiAKLQkJYnVmLT52YSAgPSBjcHVfdG9fYmU2NChzZ19kbWFfYWRkcmVzcyhzY2F0KSk7Ci0JCWJ1Zi0+a2V5ID0gY3B1X3RvX2JlMzIodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5tci0+cmtleSk7Ci0JCWJ1Zi0+bGVuID0gY3B1X3RvX2JlMzIoc2dfZG1hX2xlbihzY2F0KSk7CisJCWJ1Zi0+dmEgID0gY3B1X3RvX2JlNjQoaWJfc2dfZG1hX2FkZHJlc3MoaWJkZXYsIHNjYXQpKTsKKwkJYnVmLT5rZXkgPSBjcHVfdG9fYmUzMihkZXYtPm1yLT5ya2V5KTsKKwkJYnVmLT5sZW4gPSBjcHVfdG9fYmUzMihpYl9zZ19kbWFfbGVuKGliZGV2LCBzY2F0KSk7CiAJfSBlbHNlIGlmIChzcnBfbWFwX2Ztcih0YXJnZXQsIHNjYXQsIGNvdW50LCByZXEsCiAJCQkgICAgICAgKHZvaWQgKikgY21kLT5hZGRfZGF0YSkpIHsKIAkJLyoKQEAgLTcyMiwxMyArNzMyLDE0IEBACiAJCQljb3VudCAqIHNpemVvZiAoc3RydWN0IHNycF9kaXJlY3RfYnVmKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworCQkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGliZGV2LCAmc2NhdFtpXSk7CisKIAkJCWJ1Zi0+ZGVzY19saXN0W2ldLnZhICA9Ci0JCQkJY3B1X3RvX2JlNjQoc2dfZG1hX2FkZHJlc3MoJnNjYXRbaV0pKTsKKwkJCQljcHVfdG9fYmU2NChpYl9zZ19kbWFfYWRkcmVzcyhpYmRldiwgJnNjYXRbaV0pKTsKIAkJCWJ1Zi0+ZGVzY19saXN0W2ldLmtleSA9Ci0JCQkJY3B1X3RvX2JlMzIodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5tci0+cmtleSk7Ci0JCQlidWYtPmRlc2NfbGlzdFtpXS5sZW4gPQotCQkJCWNwdV90b19iZTMyKHNnX2RtYV9sZW4oJnNjYXRbaV0pKTsKLQkJCWRhdGFsZW4gKz0gc2dfZG1hX2xlbigmc2NhdFtpXSk7CisJCQkJY3B1X3RvX2JlMzIoZGV2LT5tci0+cmtleSk7CisJCQlidWYtPmRlc2NfbGlzdFtpXS5sZW4gPSBjcHVfdG9fYmUzMihkbWFfbGVuKTsKKwkJCWRhdGFsZW4gKz0gZG1hX2xlbjsKIAkJfQogCiAJCWlmIChzY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKQEAgLTgwOCwxMyArODE5LDE1IEBACiAKIHN0YXRpYyB2b2lkIHNycF9oYW5kbGVfcmVjdihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBpYl93YyAqd2MpCiB7CisJc3RydWN0IGliX2RldmljZSAqZGV2OwogCXN0cnVjdCBzcnBfaXUgKml1OwogCXU4IG9wY29kZTsKIAogCWl1ID0gdGFyZ2V0LT5yeF9yaW5nW3djLT53cl9pZCAmIH5TUlBfT1BfUkVDVl07CiAKLQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldi0+ZG1hX2RldmljZSwgaXUtPmRtYSwKLQkJCQl0YXJnZXQtPm1heF90aV9pdV9sZW4sIERNQV9GUk9NX0RFVklDRSk7CisJZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXY7CisJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBpdS0+ZG1hLCB0YXJnZXQtPm1heF90aV9pdV9sZW4sCisJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKIAogCW9wY29kZSA9ICoodTggKikgaXUtPmJ1ZjsKIApAQCAtODUwLDggKzg2Myw4IEBACiAJCWJyZWFrOwogCX0KIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+ZG1hLAotCQkJCSAgIHRhcmdldC0+bWF4X3RpX2l1X2xlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGl1LT5kbWEsIHRhcmdldC0+bWF4X3RpX2l1X2xlbiwKKwkJCQkgICAgICBETUFfRlJPTV9ERVZJQ0UpOwogfQogCiBzdGF0aWMgdm9pZCBzcnBfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICp0YXJnZXRfcHRyKQpAQCAtOTY5LDYgKzk4Miw3IEBACiAJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXE7CiAJc3RydWN0IHNycF9pdSAqaXU7CiAJc3RydWN0IHNycF9jbWQgKmNtZDsKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXY7CiAJaW50IGxlbjsKIAogCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfQ09OTkVDVElORykKQEAgLTk4NSw4ICs5OTksOSBAQAogCWlmICghaXUpCiAJCWdvdG8gZXJyOwogCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5kZXYtPmRtYV9kZXZpY2UsIGl1LT5kbWEsCi0JCQkJc3JwX21heF9pdV9sZW4sIERNQV9UT19ERVZJQ0UpOworCWRldiA9IHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2OworCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgaXUtPmRtYSwgc3JwX21heF9pdV9sZW4sCisJCQkJICAgRE1BX1RPX0RFVklDRSk7CiAKIAlyZXEgPSBsaXN0X2VudHJ5KHRhcmdldC0+ZnJlZV9yZXFzLm5leHQsIHN0cnVjdCBzcnBfcmVxdWVzdCwgbGlzdCk7CiAKQEAgLTEwMTgsOCArMTAzMyw4IEBACiAJCWdvdG8gZXJyX3VubWFwOwogCX0KIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LT5kbWFfZGV2aWNlLCBpdS0+ZG1hLAotCQkJCSAgIHNycF9tYXhfaXVfbGVuLCBETUFfVE9fREVWSUNFKTsKKwlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGl1LT5kbWEsIHNycF9tYXhfaXVfbGVuLAorCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwogCiAJaWYgKF9fc3JwX3Bvc3Rfc2VuZCh0YXJnZXQsIGl1LCBsZW4pKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlNlbmQgZmFpbGVkXG4iKTsKQEAgLTE2MDYsMTggKzE2MjEsMzAgQEAKIAkJc3dpdGNoICh0b2tlbikgewogCQljYXNlIFNSUF9PUFRfSURfRVhUOgogCQkJcCA9IG1hdGNoX3N0cmR1cChhcmdzKTsKKwkJCWlmICghcCkgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBvdXQ7CisJCQl9CiAJCQl0YXJnZXQtPmlkX2V4dCA9IGNwdV90b19iZTY0KHNpbXBsZV9zdHJ0b3VsbChwLCBOVUxMLCAxNikpOwogCQkJa2ZyZWUocCk7CiAJCQlicmVhazsKIAogCQljYXNlIFNSUF9PUFRfSU9DX0dVSUQ6CiAJCQlwID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOworCQkJaWYgKCFwKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KIAkJCXRhcmdldC0+aW9jX2d1aWQgPSBjcHVfdG9fYmU2NChzaW1wbGVfc3RydG91bGwocCwgTlVMTCwgMTYpKTsKIAkJCWtmcmVlKHApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTUlBfT1BUX0RHSUQ6CiAJCQlwID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOworCQkJaWYgKCFwKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KIAkJCWlmIChzdHJsZW4ocCkgIT0gMzIpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiYmFkIGRlc3QgR0lEIHBhcmFtZXRlciAnJXMnXG4iLCBwKTsKIAkJCQlrZnJlZShwKTsKQEAgLTE2NDEsNiArMTY2OCwxMCBAQAogCiAJCWNhc2UgU1JQX09QVF9TRVJWSUNFX0lEOgogCQkJcCA9IG1hdGNoX3N0cmR1cChhcmdzKTsKKwkJCWlmICghcCkgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBvdXQ7CisJCQl9CiAJCQl0YXJnZXQtPnNlcnZpY2VfaWQgPSBjcHVfdG9fYmU2NChzaW1wbGVfc3RydG91bGwocCwgTlVMTCwgMTYpKTsKIAkJCWtmcmVlKHApOwogCQkJYnJlYWs7CkBAIC0xNjc4LDYgKzE3MDksMTAgQEAKIAogCQljYXNlIFNSUF9PUFRfSU5JVElBVE9SX0VYVDoKIAkJCXAgPSBtYXRjaF9zdHJkdXAoYXJncyk7CisJCQlpZiAoIXApIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gb3V0OworCQkJfQogCQkJdGFyZ2V0LT5pbml0aWF0b3JfZXh0ID0gY3B1X3RvX2JlNjQoc2ltcGxlX3N0cnRvdWxsKHAsIE5VTEwsIDE2KSk7CiAJCQlrZnJlZShwKTsKIAkJCWJyZWFrOwpAQCAtMTg4Myw3ICsxOTE4LDcgQEAKIAkgKi8KIAlzcnBfZGV2LT5mbXJfcGFnZV9zaGlmdCA9IG1heCg5LCBmZnMoZGV2X2F0dHItPnBhZ2Vfc2l6ZV9jYXApIC0gMSk7CiAJc3JwX2Rldi0+Zm1yX3BhZ2Vfc2l6ZSAgPSAxIDw8IHNycF9kZXYtPmZtcl9wYWdlX3NoaWZ0OwotCXNycF9kZXYtPmZtcl9wYWdlX21hc2sgID0gfigodW5zaWduZWQgbG9uZykgc3JwX2Rldi0+Zm1yX3BhZ2Vfc2l6ZSAtIDEpOworCXNycF9kZXYtPmZtcl9wYWdlX21hc2sgID0gfigodTY0KSBzcnBfZGV2LT5mbXJfcGFnZV9zaXplIC0gMSk7CiAKIAlJTklUX0xJU1RfSEVBRCgmc3JwX2Rldi0+ZGV2X2xpc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oCmluZGV4IGQ0ZTM1ZWYuLmMyMTc3MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oCkBAIC04Nyw3ICs4Nyw3IEBACiAJc3RydWN0IGliX2Ztcl9wb29sICAgICAqZm1yX3Bvb2w7CiAJaW50CQkJZm1yX3BhZ2Vfc2hpZnQ7CiAJaW50CQkJZm1yX3BhZ2Vfc2l6ZTsKLQl1bnNpZ25lZCBsb25nCQlmbXJfcGFnZV9tYXNrOworCXU2NAkJCWZtcl9wYWdlX21hc2s7CiB9OwogCiBzdHJ1Y3Qgc3JwX2hvc3QgewpAQCAtMTYxLDcgKzE2MSw3IEBACiB9OwogCiBzdHJ1Y3Qgc3JwX2l1IHsKLQlkbWFfYWRkcl90CQlkbWE7CisJdTY0CQkJZG1hOwogCXZvaWQJCSAgICAgICAqYnVmOwogCXNpemVfdAkJCXNpemU7CiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24JZGlyZWN0aW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvTWFrZWZpbGUKaW5kZXggYTAwNWIxZC4uZGE1NzVkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L01ha2VmaWxlCkBAIC0yMSwzICsyMSw0IEBACiBvYmotJChDT05GSUdfSU5QVVRfSk9ZU1RJQ0spCSs9IGpveXN0aWNrLwogb2JqLSQoQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOKQkrPSB0b3VjaHNjcmVlbi8KIG9iai0kKENPTkZJR19JTlBVVF9NSVNDKQkrPSBtaXNjLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2ZmLWNvcmUuYyBiL2RyaXZlcnMvaW5wdXQvZmYtY29yZS5jCmluZGV4IDM1NjU2Y2EuLjc4M2IzNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZmYtY29yZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZmYtY29yZS5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIH0KIAogLyoqCi0gKiBpbnB1dF9mZl9lcmFzZSAtIGVyYXNlIGFuIGVmZmVjdCBmcm9tIGRldmljZQorICogaW5wdXRfZmZfZXJhc2UgLSBlcmFzZSBhIGZvcmNlLWZlZWRiYWNrIGVmZmVjdCBmcm9tIGRldmljZQogICogQGRldjogaW5wdXQgZGV2aWNlIHRvIGVyYXNlIGVmZmVjdCBmcm9tCiAgKiBAZWZmZWN0X2lkOiBpZCBvZiB0aGUgZmZlY3QgdG8gYmUgZXJhc2VkCiAgKiBAZmlsZTogcHVycG9ydGVkIG93bmVyIG9mIHRoZSByZXF1ZXN0CkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogLyoqCiAgKiBpbnB1dF9mZl9mcmVlKCkgLSBmcmVlcyBmb3JjZSBmZWVkYmFjayBwb3J0aW9uIG9mIGlucHV0IGRldmljZQotICogQGRldjogaW5wdXQgZGV2aWNlIHN1cHBvcmludGcgZm9yY2UgZmVlZGJhY2sKKyAqIEBkZXY6IGlucHV0IGRldmljZSBzdXBwb3J0aW5nIGZvcmNlIGZlZWRiYWNrCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG5lZWRlZCBpbiBlcnJvciBwYXRoIGFzIGlucHV0IGNvcmUgd2lsbAogICogYXV0b21hdGljYWxseSBmcmVlIGZvcmNlIGZlZWRiYWNrIHN0cnVjdHVyZXMgd2hlbiBkZXZpY2UgaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jIGIvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKaW5kZXggY2Q4YjcyOS4uZWJhMThiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogfQogCiAvKioKLSAqIGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKCkgLSBjcmVhdGUgbWVtb3J5bGVzcyBGRiBkZXZpY2UKKyAqIGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKCkgLSBjcmVhdGUgbWVtb3J5bGVzcyBmb3JjZS1mZWVkYmFjayBkZXZpY2UKICAqIEBkZXY6IGlucHV0IGRldmljZSBzdXBwb3J0aW5nIGZvcmNlLWZlZWRiYWNrCiAgKiBAZGF0YTogZHJpdmVyLXNwZWNpZmljIGRhdGEgdG8gYmUgcGFzc2VkIGludG8gQHBsYXlfZWZmZWN0CiAgKiBAcGxheV9lZmZlY3Q6IGRyaXZlci1zcGVjaWZpYyBtZXRob2QgZm9yIHBsYXlpbmcgRkYgZWZmZWN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKaW5kZXggNzlkZmI0Yi4uYTAwZmU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwpAQCAtNzMxLDEyICs3MzEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJ1c190eXBlIGdhbWVwb3J0X2J1cyA9IHsKLQkubmFtZQk9ICJnYW1lcG9ydCIsCi0JLnByb2JlCT0gZ2FtZXBvcnRfZHJpdmVyX3Byb2JlLAotCS5yZW1vdmUJPSBnYW1lcG9ydF9kcml2ZXJfcmVtb3ZlLAotfTsKLQogc3RhdGljIHZvaWQgZ2FtZXBvcnRfYWRkX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYpCiB7CiAJaW50IGVycm9yOwpAQCAtNzgyLDYgKzc3NiwxNSBAQAogCXJldHVybiAhZ2FtZXBvcnRfZHJ2LT5pZ25vcmU7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgZ2FtZXBvcnRfYnVzID0geworCS5uYW1lCQk9ICJnYW1lcG9ydCIsCisJLmRldl9hdHRycwk9IGdhbWVwb3J0X2RldmljZV9hdHRycywKKwkuZHJ2X2F0dHJzCT0gZ2FtZXBvcnRfZHJpdmVyX2F0dHJzLAorCS5tYXRjaAkJPSBnYW1lcG9ydF9idXNfbWF0Y2gsCisJLnByb2JlCQk9IGdhbWVwb3J0X2RyaXZlcl9wcm9iZSwKKwkucmVtb3ZlCQk9IGdhbWVwb3J0X2RyaXZlcl9yZW1vdmUsCit9OworCiBzdGF0aWMgdm9pZCBnYW1lcG9ydF9zZXRfZHJ2KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQsIHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydikKIHsKIAltdXRleF9sb2NrKCZnYW1lcG9ydC0+ZHJ2X211dGV4KTsKQEAgLTc5MSw3ICs3OTQsNiBAQAogCiBpbnQgZ2FtZXBvcnRfb3BlbihzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0LCBzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYsIGludCBtb2RlKQogewotCiAJaWYgKGdhbWVwb3J0LT5vcGVuKSB7CiAJCWlmIChnYW1lcG9ydC0+b3BlbihnYW1lcG9ydCwgbW9kZSkpIHsKIAkJCXJldHVybiAtMTsKQEAgLTgxOSw5ICs4MjEsNiBAQAogewogCWludCBlcnJvcjsKIAotCWdhbWVwb3J0X2J1cy5kZXZfYXR0cnMgPSBnYW1lcG9ydF9kZXZpY2VfYXR0cnM7Ci0JZ2FtZXBvcnRfYnVzLmRydl9hdHRycyA9IGdhbWVwb3J0X2RyaXZlcl9hdHRyczsKLQlnYW1lcG9ydF9idXMubWF0Y2ggPSBnYW1lcG9ydF9idXNfbWF0Y2g7CiAJZXJyb3IgPSBidXNfcmVnaXN0ZXIoJmdhbWVwb3J0X2J1cyk7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZ2FtZXBvcnQ6IGZhaWxlZCB0byByZWdpc3RlciBnYW1lcG9ydCBidXMsIGVycm9yOiAlZFxuIiwgZXJyb3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9saWdodG5pbmcuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvbGlnaHRuaW5nLmMKaW5kZXggZDY1ZDgxMC4uNmI0ZDQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9saWdodG5pbmcuYworKysgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2xpZ2h0bmluZy5jCkBAIC0zMDksNyArMzA5LDcgQEAKIAlpbnQgaSwgY2FyZHMgPSAwOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihMNF9QT1JULCAxLCAibGlnaHRuaW5nIikpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FQlVTWTsKIAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCiAJCWlmIChsNF9hZGRfY2FyZChpKSA9PSAwKQpAQCAtMzE5LDcgKzMxOSw3IEBACiAKIAlpZiAoIWNhcmRzKSB7CiAJCXJlbGVhc2VfcmVnaW9uKEw0X1BPUlQsIDEpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IDFjOGM4YTUuLjdjZjJiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogLyoqCiAgKiBpbnB1dF9ldmVudCgpIC0gcmVwb3J0IG5ldyBpbnB1dCBldmVudAotICogQGhhbmRsZTogZGV2aWNlIHRoYXQgZ2VuZXJhdGVkIHRoZSBldmVudAorICogQGRldjogZGV2aWNlIHRoYXQgZ2VuZXJhdGVkIHRoZSBldmVudAogICogQHR5cGU6IHR5cGUgb2YgdGhlIGV2ZW50CiAgKiBAY29kZTogZXZlbnQgY29kZQogICogQHZhbHVlOiB2YWx1ZSBvZiB0aGUgZXZlbnQKQEAgLTkwMCw2ICs5MDAsMTUgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpbnB1dF9jbGFzcyk7CiAKKy8qKgorICogaW5wdXRfYWxsb2NhdGVfZGV2aWNlIC0gYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgaW5wdXQgZGV2aWNlCisgKgorICogUmV0dXJucyBwcmVwYXJlZCBzdHJ1Y3QgaW5wdXRfZGV2IG9yIE5VTEwuCisgKgorICogTk9URTogVXNlIGlucHV0X2ZyZWVfZGV2aWNlKCkgdG8gZnJlZSBkZXZpY2VzIHRoYXQgaGF2ZSBub3QgYmVlbgorICogcmVnaXN0ZXJlZDsgaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoKSBzaG91bGQgYmUgdXNlZCBmb3IgYWxyZWFkeQorICogcmVnaXN0ZXJlZCBkZXZpY2VzLgorICovCiBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9hbGxvY2F0ZV9kZXZpY2Uodm9pZCkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CkBAIC05MTksNiArOTI4LDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGlucHV0X2FsbG9jYXRlX2RldmljZSk7CiAKKy8qKgorICogaW5wdXRfZnJlZV9kZXZpY2UgLSBmcmVlIG1lbW9yeSBvY2N1cGllZCBieSBpbnB1dF9kZXYgc3RydWN0dXJlCisgKiBAZGV2OiBpbnB1dCBkZXZpY2UgdG8gZnJlZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoKQorICogd2FzIG5vdCBjYWxsZWQgeWV0IG9yIGlmIGl0IGZhaWxlZC4gT25jZSBkZXZpY2Ugd2FzIHJlZ2lzdGVyZWQKKyAqIHVzZSBpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgpIGFuZCBtZW1vcnkgd2lsbCBiZSBmcmVlZCBvbmNlIGxhc3QKKyAqIHJlZnJlbmNlIHRvIHRoZSBkZXZpY2UgaXMgZHJvcHBlZC4KKyAqCisgKiBEZXZpY2Ugc2hvdWxkIGJlIGFsbG9jYXRlZCBieSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKS4KKyAqCisgKiBOT1RFOiBJZiB0aGVyZSBhcmUgcmVmZXJlbmNlcyB0byB0aGUgaW5wdXQgZGV2aWNlIHRoZW4gbWVtb3J5CisgKiB3aWxsIG5vdCBiZSBmcmVlZCB1bnRpbCBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLgorICovCiB2b2lkIGlucHV0X2ZyZWVfZGV2aWNlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAlpZiAoZGV2KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FkaS5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hZGkuYwppbmRleCA3MDRiZjcwLi42Mjc5Y2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FkaS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYWRpLmMKQEAgLTUyMSwxMSArNTIxLDE5IEBACiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJaWYgKHBvcnQtPmFkaVtpXS5sZW5ndGggPiAwKSB7CiAJCQlhZGlfaW5pdF9jZW50ZXIocG9ydC0+YWRpICsgaSk7Ci0JCQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocG9ydC0+YWRpW2ldLmRldik7CisJCQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocG9ydC0+YWRpW2ldLmRldik7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZmFpbDM7CiAJCX0KIAogCXJldHVybiAwOwogCisgZmFpbDM6IHdoaWxlICgtLWkgPj0gMCkgeworCQlpZiAocG9ydC0+YWRpW2ldLmxlbmd0aCA+IDApIHsKKwkJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHBvcnQtPmFkaVtpXS5kZXYpOworCQkJcG9ydC0+YWRpW2ldLmRldiA9IE5VTEw7CisJCX0KKwl9CiAgZmFpbDI6CWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCiAJCWlmIChwb3J0LT5hZGlbaV0uZGV2KQogCQkJaW5wdXRfZnJlZV9kZXZpY2UocG9ydC0+YWRpW2ldLmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FtaWpveS5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbWlqb3kuYwppbmRleCA2NTBhY2YzLi5lNjA4NjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FtaWpveS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW1pam95LmMKQEAgLTE0Nyw3ICsxNDcsMTEgQEAKIAkJCWFtaWpveV9kZXZbaV0tPmFic21heFtBQlNfWCArIGpdID0gMTsKIAkJfQogCi0JCWlucHV0X3JlZ2lzdGVyX2RldmljZShhbWlqb3lfZGV2W2ldKTsKKwkJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGFtaWpveV9kZXZbaV0pOworCQlpZiAoZXJyKSB7CisJCQlpbnB1dF9mcmVlX2RldmljZShhbWlqb3lfZGV2W2ldKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW5hbG9nLmMKaW5kZXggZTlhMDJkYi4uN2VmNjg0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jCkBAIC00MzQsNiArNDM0LDcgQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGksIGosIHQsIHYsIHcsIHgsIHksIHo7CisJaW50IGVycm9yOwogCiAJYW5hbG9nX25hbWUoYW5hbG9nKTsKIAlzbnByaW50ZihhbmFsb2ctPnBoeXMsIHNpemVvZihhbmFsb2ctPnBoeXMpLApAQCAtNTA1LDcgKzUwNiwxMSBAQAogCiAJYW5hbG9nX2RlY29kZShhbmFsb2csIHBvcnQtPmF4ZXMsIHBvcnQtPmluaXRpYWwsIHBvcnQtPmJ1dHRvbnMpOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGFuYWxvZy0+ZGV2KTsKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhbmFsb2ctPmRldik7CisJaWYgKGVycm9yKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGFuYWxvZy0+ZGV2KTsKKwkJcmV0dXJuIGVycm9yOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNjY4LDcgKzY3Myw4IEBACiAJcmV0dXJuIDA7CiAKICBmYWlsMzogd2hpbGUgKC0taSA+PSAwKQotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShwb3J0LT5hbmFsb2dbaV0uZGV2KTsKKwkJaWYgKHBvcnQtPmFuYWxvZ1tpXS5tYXNrKQorCQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UocG9ydC0+YW5hbG9nW2ldLmRldik7CiAgZmFpbDI6CWdhbWVwb3J0X2Nsb3NlKGdhbWVwb3J0KTsKICBmYWlsMToJZ2FtZXBvcnRfc2V0X2RydmRhdGEoZ2FtZXBvcnQsIE5VTEwpOwogCWtmcmVlKHBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9jb2JyYS5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9jb2JyYS5jCmluZGV4IGQ1ZTQyZWIuLjAzNGVjMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svY29icmEuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2NvYnJhLmMKQEAgLTIyMywxMiArMjIzLDE1IEBACiAJCWZvciAoaiA9IDA7IGNvYnJhX2J0bltqXTsgaisrKQogCQkJc2V0X2JpdChjb2JyYV9idG5bal0sIGlucHV0X2Rldi0+a2V5Yml0KTsKIAotCQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoY29icmEtPmRldltpXSk7CisJCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShjb2JyYS0+ZGV2W2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbDQ7CiAJfQogCiAJcmV0dXJuIDA7CiAKLSBmYWlsMzoJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKyBmYWlsNDoJaW5wdXRfZnJlZV9kZXZpY2UoY29icmEtPmRldltpXSk7CisgZmFpbDM6CXdoaWxlICgtLWkgPj0gMCkKIAkJaWYgKGNvYnJhLT5kZXZbaV0pCiAJCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShjb2JyYS0+ZGV2W2ldKTsKICBmYWlsMjoJZ2FtZXBvcnRfY2xvc2UoZ2FtZXBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nZjJrLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYwppbmRleCBlNGE2OTlmLi5iYWNiYWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYwpAQCAtMzQxLDcgKzM0MSw5IEBACiAJCWlucHV0X2Rldi0+YWJzZmxhdFtnZjJrX2Fic1tpXV0gPSAoaSA8IDIpID8gMjQgOiAwOwogCX0KIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShnZjJrLT5kZXYpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShnZjJrLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDI7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwX21wLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXBfbXAuYwppbmRleCA2MjQzODk0Li44MTIwYTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXBfbXAuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXBfbXAuYwpAQCAtNDIzLDcgKzQyMywxMCBAQAogCiAJCWlmICghcG9ydC0+cmVnaXN0ZXJlZCkgewogCQkJZGJnKCJOZXcgR3JpcCBwYWQgaW4gbXVsdGlwb3J0IHNsb3QgJWQuXG4iLCBzbG90KTsKLQkJCXJlZ2lzdGVyX3Nsb3Qoc2xvdCwgZ3JpcCk7CisJCQlpZiAocmVnaXN0ZXJfc2xvdChzbG90LCBncmlwKSkgeworCQkJCXBvcnQtPm1vZGUgPSBHUklQX01PREVfUkVTRVQ7CisJCQkJcG9ydC0+ZGlydHkgPSAwOworCQkJfQogCQl9CiAJCXJldHVybiBmbGFnczsKIAl9CkBAIC01ODUsNiArNTg4LDcgQEAKIAlzdHJ1Y3QgZ3JpcF9wb3J0ICpwb3J0ID0gZ3JpcC0+cG9ydFtzbG90XTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGosIHQ7CisJaW50IGVycjsKIAogCXBvcnQtPmRldiA9IGlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaW5wdXRfZGV2KQpAQCAtNjEwLDcgKzYxNCwxMiBAQAogCQlpZiAodCA+IDApCiAJCQlzZXRfYml0KHQsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShwb3J0LT5kZXYpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShwb3J0LT5kZXYpOworCWlmIChlcnIpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UocG9ydC0+ZGV2KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlwb3J0LT5yZWdpc3RlcmVkID0gMTsKIAogCWlmIChwb3J0LT5kaXJ0eSkJICAgICAgICAgICAgLyogcmVwb3J0IGluaXRpYWwgc3RhdGUsIGlmIGFueSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ndWlsbGVtb3QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3VpbGxlbW90LmMKaW5kZXggODQwZWQ5Yi4uZGJjNWQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ndWlsbGVtb3QuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2d1aWxsZW1vdC5jCkBAIC0yNTAsNyArMjUwLDkgQEAKIAlmb3IgKGkgPSAwOyAodCA9IGd1aWxsZW1vdC0+dHlwZS0+YnRuW2ldKSA+PSAwOyBpKyspCiAJCXNldF9iaXQodCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGd1aWxsZW1vdC0+ZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZ3VpbGxlbW90LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDI7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKaW5kZXggMjRjNjg0Yi4uMzM5M2EzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCkBAIC0zMjUsOCArMzI1LDggQEAKIAogCWlmIChpID09IDIwKSB7IC8qIDUgc2Vjb25kcyAqLwogCQlwcmludGsoS0VSTl9FUlIgImlmb3JjZS1tYWluLmM6IFRpbWVvdXQgd2FpdGluZyBmb3IgcmVzcG9uc2UgZnJvbSBkZXZpY2UuXG4iKTsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOwogCX0KIAogLyoKQEAgLTQzOSwxMCArNDM5LDggQEAKIAkJCXNldF9iaXQoaWZvcmNlLT50eXBlLT5mZltpXSwgaW5wdXRfZGV2LT5mZmJpdCk7CiAKIAkJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGUoaW5wdXRfZGV2LCBmZl9lZmZlY3RzKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwotCQkJcmV0dXJuIGVycm9yOwotCQl9CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZmFpbDsKIAogCQlmZiA9IGlucHV0X2Rldi0+ZmY7CiAJCWZmLT51cGxvYWQgPSBpZm9yY2VfdXBsb2FkX2VmZmVjdDsKQEAgLTQ1NSwyMiArNDUzLDM1IEBACiAgKiBSZWdpc3RlciBpbnB1dCBkZXZpY2UuCiAgKi8KIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShpZm9yY2UtPmRldik7CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaWZvcmNlLT5kZXYpOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgImlmb3JjZS0+ZGV2LT5vcGVuID0gJXBcbiIsIGlmb3JjZS0+ZGV2LT5vcGVuKTsKIAogCXJldHVybiAwOworCisgZmFpbDoJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGlmb3JjZV9pbml0KHZvaWQpCiB7CisJaW50IGVyciA9IDA7CisKICNpZmRlZiBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQgotCXVzYl9yZWdpc3RlcigmaWZvcmNlX3VzYl9kcml2ZXIpOworCWVyciA9IHVzYl9yZWdpc3RlcigmaWZvcmNlX3VzYl9kcml2ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFXzIzMgotCXNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmaWZvcmNlX3NlcmlvX2Rydik7CisJZXJyID0gc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZpZm9yY2Vfc2VyaW9fZHJ2KTsKKyNpZmRlZiBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQgorCWlmIChlcnIpCisJCXVzYl9kZXJlZ2lzdGVyKCZpZm9yY2VfdXNiX2RyaXZlcik7CiAjZW5kaWYKLQlyZXR1cm4gMDsKKyNlbmRpZgorCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpZm9yY2VfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXNlcmlvLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2Utc2VyaW8uYwppbmRleCBjYTA4ZjQ1Li5lYzRiZTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2Utc2VyaW8uYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2Utc2VyaW8uYwpAQCAtMTQxLDIxICsxNDEsMTkgQEAKIAlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgaWZvcmNlKTsKIAogCWVyciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7Ci0JaWYgKGVycikgewotCQlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7Ci0JCWtmcmVlKGlmb3JjZSk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmIChlcnIpCisJCWdvdG8gZmFpbDE7CiAKIAllcnIgPSBpZm9yY2VfaW5pdF9kZXZpY2UoaWZvcmNlKTsKLQlpZiAoZXJyKSB7Ci0JCXNlcmlvX2Nsb3NlKHNlcmlvKTsKLQkJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwotCQlrZnJlZShpZm9yY2UpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJaWYgKGVycikKKwkJZ290byBmYWlsMjsKIAogCXJldHVybiAwOworCisgZmFpbDI6CXNlcmlvX2Nsb3NlKHNlcmlvKTsKKyBmYWlsMToJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOworCWtmcmVlKGlmb3JjZSk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgaWZvcmNlX3NlcmlvX2Rpc2Nvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYwppbmRleCBiYmZlYjljLi5mZWM4YjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2ludGVyYWN0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pbnRlcmFjdC5jCkBAIC0yODMsNyArMjgzLDkgQEAKIAlmb3IgKGkgPSAwOyAodCA9IGludGVyYWN0X3R5cGVbaW50ZXJhY3QtPnR5cGVdLmJ0bltpXSkgPj0gMDsgaSsrKQogCQlzZXRfYml0KHQsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShpbnRlcmFjdC0+ZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW50ZXJhY3QtPmRldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsMjsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hZ2VsbGFuLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hZ2VsbGFuLmMKaW5kZXggZTNkMTk0NC4uNDExMjc4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYWdlbGxhbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFnZWxsYW4uYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJbWFnZWxsYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWFnZWxsYW4pLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIW1hZ2VsbGFuIHx8ICFpbnB1dF9kZXYpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMTsKIAogCW1hZ2VsbGFuLT5kZXYgPSBpbnB1dF9kZXY7CiAJc25wcmludGYobWFnZWxsYW4tPnBoeXMsIHNpemVvZihtYWdlbGxhbi0+cGh5cyksICIlcy9pbnB1dDAiLCBzZXJpby0+cGh5cyk7CkBAIC0xODMsMTMgKzE4MywxNyBAQAogCiAJZXJyID0gc2VyaW9fb3BlbihzZXJpbywgZHJ2KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDI7CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UobWFnZWxsYW4tPmRldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKG1hZ2VsbGFuLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDM7CisKIAlyZXR1cm4gMDsKIAotIGZhaWw6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworIGZhaWwzOglzZXJpb19jbG9zZShzZXJpbyk7CisgZmFpbDI6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZShtYWdlbGxhbik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIyNyw4ICsyMzEsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBtYWdlbGxhbl9pbml0KHZvaWQpCiB7Ci0Jc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZtYWdlbGxhbl9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJm1hZ2VsbGFuX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYWdlbGxhbl9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlYmFsbC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zcGFjZWJhbGwuYwppbmRleCAyYTk4MDhjLi4wOGJmMTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlYmFsbC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2ViYWxsLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXNwYWNlYmFsbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzcGFjZWJhbGwpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIXNwYWNlYmFsbCB8fCAhaW5wdXRfZGV2KQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDE7CiAKIAlzcGFjZWJhbGwtPmRldiA9IGlucHV0X2RldjsKIAlzbnByaW50ZihzcGFjZWJhbGwtPnBoeXMsIHNpemVvZihzcGFjZWJhbGwtPnBoeXMpLCAiJXMvaW5wdXQwIiwgc2VyaW8tPnBoeXMpOwpAQCAtMjUyLDEzICsyNTIsMTcgQEAKIAogCWVyciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwyOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHNwYWNlYmFsbC0+ZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uoc3BhY2ViYWxsLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDM7CisKIAlyZXR1cm4gMDsKIAotIGZhaWw6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworIGZhaWwzOglzZXJpb19jbG9zZShzZXJpbyk7CisgZmFpbDI6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZShzcGFjZWJhbGwpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yOTYsOCArMzAwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc3BhY2ViYWxsX2luaXQodm9pZCkKIHsKLQlzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnNwYWNlYmFsbF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnNwYWNlYmFsbF9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3BhY2ViYWxsX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2VvcmIuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2VvcmIuYwppbmRleCBjNGRiMDI0Li5jOWM3OTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlb3JiLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zcGFjZW9yYi5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAlzcGFjZW9yYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzcGFjZW9yYiksIEdGUF9LRVJORUwpOwogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghc3BhY2VvcmIgfHwgIWlucHV0X2RldikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwxOwogCiAJc3BhY2VvcmItPmRldiA9IGlucHV0X2RldjsKIAlzbnByaW50ZihzcGFjZW9yYi0+cGh5cywgc2l6ZW9mKHNwYWNlb3JiLT5waHlzKSwgIiVzL2lucHV0MCIsIHNlcmlvLT5waHlzKTsKQEAgLTE5OCwxMyArMTk4LDE3IEBACiAKIAllcnIgPSBzZXJpb19vcGVuKHNlcmlvLCBkcnYpOwogCWlmIChlcnIpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMjsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShzcGFjZW9yYi0+ZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uoc3BhY2VvcmItPmRldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsMzsKKwogCXJldHVybiAwOwogCi0gZmFpbDoJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwotCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisgZmFpbDM6CXNlcmlvX2Nsb3NlKHNlcmlvKTsKKyBmYWlsMjoJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOworIGZhaWwxOglpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKHNwYWNlb3JiKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjQyLDggKzI0Niw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNwYWNlb3JiX2luaXQodm9pZCkKIHsKLQlzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnNwYWNlb3JiX2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmc3BhY2VvcmJfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNwYWNlb3JiX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3Rpbmdlci5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zdGluZ2VyLmMKaW5kZXggMWZmYjAzMi4uZWNiMDkxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zdGluZ2VyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zdGluZ2VyLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXN0aW5nZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RpbmdlciksIEdGUF9LRVJORUwpOwogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghc3RpbmdlciB8fCAhaW5wdXRfZGV2KQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDE7CiAKIAlzdGluZ2VyLT5kZXYgPSBpbnB1dF9kZXY7CiAJc25wcmludGYoc3Rpbmdlci0+cGh5cywgc2l6ZW9mKHN0aW5nZXItPnBoeXMpLCAiJXMvc2VyaW8wIiwgc2VyaW8tPnBoeXMpOwpAQCAtMTY4LDEzICsxNjgsMTcgQEAKIAogCWVyciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwyOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHN0aW5nZXItPmRldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHN0aW5nZXItPmRldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsMzsKKwogCXJldHVybiAwOwogCi0gZmFpbDoJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwotCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisgZmFpbDM6CXNlcmlvX2Nsb3NlKHNlcmlvKTsKKyBmYWlsMjoJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOworIGZhaWwxOglpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKHN0aW5nZXIpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yMTIsOCArMjE2LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc3Rpbmdlcl9pbml0KHZvaWQpCiB7Ci0Jc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZzdGluZ2VyX2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmc3Rpbmdlcl9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3Rpbmdlcl9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R3aWRqb3kuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHdpZGpveS5jCmluZGV4IDQ5MDg1ZGYuLjljZjE3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHdpZGpveS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHdpZGpveS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAl0d2lkam95ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHR3aWRqb3kpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIXR3aWRqb3kgfHwgIWlucHV0X2RldikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwxOwogCiAJdHdpZGpveS0+ZGV2ID0gaW5wdXRfZGV2OwogCXNucHJpbnRmKHR3aWRqb3ktPnBoeXMsIHNpemVvZih0d2lkam95LT5waHlzKSwgIiVzL2lucHV0MCIsIHNlcmlvLT5waHlzKTsKQEAgLTIyMSwxMyArMjIxLDE3IEBACiAKIAllcnIgPSBzZXJpb19vcGVuKHNlcmlvLCBkcnYpOwogCWlmIChlcnIpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMjsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZSh0d2lkam95LT5kZXYpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZSh0d2lkam95LT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDM7CisKIAlyZXR1cm4gMDsKIAotIGZhaWw6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworIGZhaWwzOglzZXJpb19jbG9zZShzZXJpbyk7CisgZmFpbDI6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZSh0d2lkam95KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjY1LDggKzI2OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHR3aWRqb3lfaW5pdCh2b2lkKQogewotCXNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmdHdpZGpveV9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnR3aWRqb3lfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHR3aWRqb3lfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay93YXJyaW9yLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3dhcnJpb3IuYwppbmRleCAzNWVkZWExLi4yOWQzMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3dhcnJpb3IuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3dhcnJpb3IuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJd2FycmlvciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3YXJyaW9yKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCF3YXJyaW9yIHx8ICFpbnB1dF9kZXYpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMTsKIAogCXdhcnJpb3ItPmRldiA9IGlucHV0X2RldjsKIAlzbnByaW50Zih3YXJyaW9yLT5waHlzLCBzaXplb2Yod2Fycmlvci0+cGh5cyksICIlcy9pbnB1dDAiLCBzZXJpby0+cGh5cyk7CkBAIC0xNzYsMTMgKzE3NiwxNyBAQAogCiAJZXJyID0gc2VyaW9fb3BlbihzZXJpbywgZHJ2KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDI7CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uod2Fycmlvci0+ZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uod2Fycmlvci0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwzOworCiAJcmV0dXJuIDA7CiAKLSBmYWlsOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKyBmYWlsMzoJc2VyaW9fY2xvc2Uoc2VyaW8pOworIGZhaWwyOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CisgZmFpbDE6CWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJa2ZyZWUod2Fycmlvcik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIyMCw4ICsyMjQsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB3YXJyaW9yX2luaXQodm9pZCkKIHsKLQlzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJndhcnJpb3JfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZ3YXJyaW9yX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB3YXJyaW9yX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwppbmRleCA4MWEzMzNmLi4wNDlmMmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC0yMDMsNCArMjAzLDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvbWFwLWtleXBhZC4KIAorY29uZmlnIEtFWUJPQVJEX0FBRUQyMDAwCisJdHJpc3RhdGUgIkFBRUQtMjAwMCBrZXlib2FyZCIKKwlkZXBlbmRzIG9uIE1BQ0hfQUFFRDIwMDAKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUga2V5Ym9hcmQgb24gdGhlIEFnaWxlbnQgQUFFRC0yMDAwCisJICBkZXZlbG9wbWVudCBib2FyZC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWFlZDIwMDBfa2JkLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggNGM3OWU3Yi4uNTY4Nzk3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC0xNyw0ICsxNyw1IEBACiBvYmotJChDT05GSUdfS0VZQk9BUkRfSElMKQkJKz0gaGlsX2tiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSElMX09MRCkJCSs9IGhpbGtiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfT01BUCkgICAgICAgICAgICAgKz0gb21hcC1rZXlwYWQubworb2JqLSQoQ09ORklHX0tFWUJPQVJEX0FBRUQyMDAwKSAgICAgICAgICs9IGFhZWQyMDAwX2tiZC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYWFlZDIwMDBfa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FhZWQyMDAwX2tiZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZmNiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FhZWQyMDAwX2tiZC5jCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogIEtleWJvYXJkIGRyaXZlciBmb3IgdGhlIEFBRUQtMjAwMCBkZXYgYm9hcmQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2IE5pY29sYXMgQmVsbGlkbyBZIE9ydGVnYQorICoKKyAqICBCYXNlZCBvbiBjb3JnaWtiZC5jCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYWFlZDIwMDAuaD4KKworI2RlZmluZSBLQl9ST1dTCQkJMTIKKyNkZWZpbmUgS0JfQ09MUwkJCTgKKyNkZWZpbmUgS0JfUk9XTUFTSyhyKQkJKDEgPDwgKHIpKQorI2RlZmluZSBTQ0FOQ09ERShyLGMpCQkoKChjKSAqIEtCX1JPV1MpICsgKHIpKQorI2RlZmluZSBOUl9TQ0FOQ09ERVMJCShLQl9DT0xTICogS0JfUk9XUykKKworI2RlZmluZSBTQ0FOX0lOVEVSVkFMCQkoNTApIC8qIG1zICovCisjZGVmaW5lIEtCX0FDVElWQVRFX0RFTEFZCSgyMCkgLyogdXMgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYWFlZGtiZF9rZXljb2RlW05SX1NDQU5DT0RFU10gPSB7CisJS0VZXzksIEtFWV8wLCBLRVlfTUlOVVMsIEtFWV9FUVVBTCwgS0VZX0JBQ0tTUEFDRSwgMCwgS0VZX1NQQUNFLCBLRVlfS1A2LCAwLCBLRVlfS1BET1QsIDAsIDAsCisJS0VZX0ssIEtFWV9NLCBLRVlfTywgS0VZX0RPVCwgS0VZX1NMQVNILCAwLCBLRVlfRiwgMCwgMCwgMCwgS0VZX0xFRlRTSElGVCwgMCwKKwlLRVlfSSwgS0VZX1AsIEtFWV9MRUZUQlJBQ0UsIEtFWV9SSUdIVEJSQUNFLCBLRVlfQkFDS1NMQVNILCAwLCAwLCAwLCAwLCAwLCBLRVlfUklHSFRTSElGVCwgMCwKKwlLRVlfOCwgS0VZX0wsIEtFWV9TRU1JQ09MT04sIEtFWV9BUE9TVFJPUEhFLCBLRVlfRU5URVIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJS0VZX0osIEtFWV9ILCBLRVlfQiwgS0VZX0tQOCwgS0VZX0tQNCwgMCwgS0VZX0MsIEtFWV9ELCBLRVlfUywgS0VZX0EsIDAsIEtFWV9DQVBTTE9DSywKKwlLRVlfWSwgS0VZX1UsIEtFWV9OLCBLRVlfVCwgMCwgMCwgS0VZX1IsIEtFWV9FLCBLRVlfVywgS0VZX1EsIDAsIEtFWV9UQUIsCisJS0VZXzcsIEtFWV82LCBLRVlfRywgMCwgS0VZXzUsIDAsIEtFWV80LCBLRVlfMywgS0VZXzIsIEtFWV8xLCAwLCBLRVlfR1JBVkUsCisJMCwgMCwgS0VZX0NPTU1BLCAwLCBLRVlfS1AyLCAwLCBLRVlfViwgS0VZX0xFRlRBTFQsIEtFWV9YLCBLRVlfWiwgMCwgS0VZX0xFRlRDVFJMCit9OworCitzdHJ1Y3QgYWFlZGtiZCB7CisJdW5zaWduZWQgY2hhciBrZXljb2RlW0FSUkFZX1NJWkUoYWFlZGtiZF9rZXljb2RlKV07CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtxOworCWludCBrYmRzY2FuX3N0YXRlW0tCX0NPTFNdOworCWludCBrYmRzY2FuX2NvdW50W0tCX0NPTFNdOworfTsKKworI2RlZmluZSBLQkRTQ0FOX1NUQUJMRV9DT1VOVCAyCisKK3N0YXRpYyB2b2lkIGFhZWRrYmRfcmVwb3J0X2NvbChzdHJ1Y3QgYWFlZGtiZCAqYWFlZGtiZCwKKwkJCQl1bnNpZ25lZCBpbnQgY29sLCB1bnNpZ25lZCBpbnQgcm93ZCkKK3sKKwl1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHByZXNzZWQ7CisJdW5zaWduZWQgaW50IHJvdzsKKworCWZvciAocm93ID0gMDsgcm93IDwgS0JfUk9XUzsgcm93KyspIHsKKwkJc2NhbmNvZGUgPSBTQ0FOQ09ERShyb3csIGNvbCk7CisJCXByZXNzZWQgPSByb3dkICYgS0JfUk9XTUFTSyhyb3cpOworCisJCWlucHV0X3JlcG9ydF9rZXkoYWFlZGtiZC0+aW5wdXQsIGFhZWRrYmQtPmtleWNvZGVbc2NhbmNvZGVdLCBwcmVzc2VkKTsKKwl9Cit9CisKKy8qIFNjYW4gdGhlIGhhcmR3YXJlIGtleWJvYXJkIGFuZCBwdXNoIGFueSBjaGFuZ2VzIHVwIHRocm91Z2ggdGhlIGlucHV0IGxheWVyICovCitzdGF0aWMgdm9pZCBhYWVka2JkX3dvcmsodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYWFlZGtiZCAqYWFlZGtiZCA9IGRhdGE7CisJdW5zaWduZWQgaW50IGNvbCwgcm93ZDsKKworCWNvbCA9IDA7CisJZG8geworCQlBQUVDX0dQSU9fS1NDQU4gPSBjb2wgKyA4OworCQl1ZGVsYXkoS0JfQUNUSVZBVEVfREVMQVkpOworCQlyb3dkID0gQUFFRF9FWFRfR1BJTyAmIEFBRURfRUdQSU9fS0JEX1NDQU47CisKKwkJaWYgKHJvd2QgIT0gYWFlZGtiZC0+a2Jkc2Nhbl9zdGF0ZVtjb2xdKSB7CisJCQlhYWVka2JkLT5rYmRzY2FuX2NvdW50W2NvbF0gPSAwOworCQkJYWFlZGtiZC0+a2Jkc2Nhbl9zdGF0ZVtjb2xdID0gcm93ZDsKKwkJfSBlbHNlIGlmICgrK2FhZWRrYmQtPmtiZHNjYW5fY291bnRbY29sXSA+PSBLQkRTQ0FOX1NUQUJMRV9DT1VOVCkgeworCQkJYWFlZGtiZF9yZXBvcnRfY29sKGFhZWRrYmQsIGNvbCwgcm93ZCk7CisJCQljb2wrKzsKKwkJfQorCX0gd2hpbGUgKGNvbCA8IEtCX0NPTFMpOworCisJQUFFQ19HUElPX0tTQ0FOID0gMHgwNzsKKwlpbnB1dF9zeW5jKGFhZWRrYmQtPmlucHV0KTsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYWFlZGtiZC0+d29ya3EsIG1zZWNzX3RvX2ppZmZpZXMoU0NBTl9JTlRFUlZBTCkpOworfQorCitzdGF0aWMgaW50IGFhZWRrYmRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbmRldikKK3sKKwlzdHJ1Y3QgYWFlZGtiZCAqYWFlZGtiZCA9IGluZGV2LT5wcml2YXRlOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhYWVka2JkLT53b3JrcSwgbXNlY3NfdG9famlmZmllcyhTQ0FOX0lOVEVSVkFMKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWFlZGtiZF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppbmRldikKK3sKKwlzdHJ1Y3QgYWFlZGtiZCAqYWFlZGtiZCA9IGluZGV2LT5wcml2YXRlOworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmYWFlZGtiZC0+d29ya3EpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFhZWRrYmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWFlZGtiZCAqYWFlZGtiZDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJaW50IGk7CisJaW50IGVycm9yOworCisJYWFlZGtiZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhYWVka2JkKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFhYWVka2JkIHx8ICFpbnB1dF9kZXYpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYWFlZGtiZCk7CisKKwlhYWVka2JkLT5pbnB1dCA9IGlucHV0X2RldjsKKworCS8qIEluaXQga2V5Ym9hcmQgcmVzY2FuIHdvcmtxdWV1ZSAqLworCUlOSVRfV09SSygmYWFlZGtiZC0+d29ya3EsIGFhZWRrYmRfd29yaywgYWFlZGtiZCk7CisKKwltZW1jcHkoYWFlZGtiZC0+a2V5Y29kZSwgYWFlZGtiZF9rZXljb2RlLCBzaXplb2YoYWFlZGtiZC0+a2V5Y29kZSkpOworCisJaW5wdXRfZGV2LT5uYW1lID0gIkFBRUQtMjAwMCBLZXlib2FyZCI7CisJaW5wdXRfZGV2LT5waHlzID0gImFhZWRrYmQvaW5wdXQwIjsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IDB4MDAwMTsKKwlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDE7CisJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOworCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmcGRldi0+ZGV2OworCWlucHV0X2Rldi0+cHJpdmF0ZSA9IGFhZWRrYmQ7CisKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVQKTsKKwlpbnB1dF9kZXYtPmtleWNvZGUgPSBhYWVka2JkLT5rZXljb2RlOworCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgY2hhcik7CisJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShhYWVka2JkX2tleWNvZGUpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWFlZGtiZF9rZXljb2RlKTsgaSsrKQorCQlzZXRfYml0KGFhZWRrYmQtPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKKwljbGVhcl9iaXQoMCwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJaW5wdXRfZGV2LT5vcGVuID0gYWFlZGtiZF9vcGVuOworCWlucHV0X2Rldi0+Y2xvc2UgPSBhYWVka2JkX2Nsb3NlOworCisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYWFlZGtiZC0+aW5wdXQpOworCWlmIChlcnJvcikKKwkJZ290byBmYWlsOworCisJcmV0dXJuIDA7CisKKyBmYWlsOglrZnJlZShhYWVka2JkKTsKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWFlZGtiZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWFlZGtiZCAqYWFlZGtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoYWFlZGtiZC0+aW5wdXQpOworCWtmcmVlKGFhZWRrYmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFhZWRrYmRfZHJpdmVyID0geworCS5wcm9iZQkJPSBhYWVka2JkX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYWFlZGtiZF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhYWVkMjAwMC1rZXlib2FyZCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFhZWRrYmRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFhZWRrYmRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFhZWRrYmRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhYWVka2JkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFhZWRrYmRfaW5pdCk7Cittb2R1bGVfZXhpdChhYWVka2JkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJOaWNvbGFzIEJlbGxpZG8gWSBPcnRlZ2EiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUFFRC0yMDAwIEtleWJvYXJkIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FtaWtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hbWlrYmQuYwppbmRleCA4YWJkYmQwLi5jNjdlODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FtaWtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYW1pa2JkLmMKQEAgLTE4NywxMCArMTg3LDEwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFtaWtiZF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIGo7CisJaW50IGksIGosIGVycjsKIAogCWlmICghQU1JR0FIV19QUkVTRU5UKEFNSV9LRVlCT0FSRCkpCi0JCXJldHVybiAtRUlPOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKENJQUFfUEhZU0FERFItMSsweGIwMCwgMHgxMDAsICJhbWlrZXliIikpCiAJCXJldHVybiAtRUJVU1k7CkBAIC0xOTgsOCArMTk4LDggQEAKIAlhbWlrYmRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFhbWlrYmRfZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYW1pa2JkOiBub3QgZW5vdWdoIG1lbW9yeSBmb3IgaW5wdXQgZGV2aWNlXG4iKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKENJQUFfUEhZU0FERFIgLSAxICsgMHhiMDAsIDB4MTAwKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDE7CiAJfQogCiAJYW1pa2JkX2Rldi0+bmFtZSA9ICJBbWlnYSBLZXlib2FyZCI7CkBAIC0yMzEsMTAgKzIzMSwyMiBAQAogCQltZW1jcHkoa2V5X21hcHNbaV0sIHRlbXBfbWFwLCBzaXplb2YodGVtcF9tYXApKTsKIAl9CiAJY2lhYS5jcmEgJj0gfjB4NDE7CSAvKiBzZXJpYWwgZGF0YSBpbiwgdHVybiBvZmYgVEEgKi8KLQlyZXF1ZXN0X2lycShJUlFfQU1JR0FfQ0lBQV9TUCwgYW1pa2JkX2ludGVycnVwdCwgMCwgImFtaWtiZCIsIGFtaWtiZF9pbnRlcnJ1cHQpOworCWlmIChyZXF1ZXN0X2lycShJUlFfQU1JR0FfQ0lBQV9TUCwgYW1pa2JkX2ludGVycnVwdCwgMCwgImFtaWtiZCIsCisJCQlhbWlrYmRfaW50ZXJydXB0KSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZmFpbDI7CisJfQogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGFtaWtiZF9kZXYpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhbWlrYmRfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwzOworCiAJcmV0dXJuIDA7CisKKyBmYWlsMzoJZnJlZV9pcnEoSVJRX0FNSUdBX0NJQUFfU1AsIGFtaWtiZF9pbnRlcnJ1cHQpOworIGZhaWwyOglpbnB1dF9mcmVlX2RldmljZShhbWlrYmRfZGV2KTsKKyBmYWlsMToJcmVsZWFzZV9tZW1fcmVnaW9uKENJQUFfUEhZU0FERFIgLSAxICsgMHhiMDAsIDB4MTAwKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYW1pa2JkX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCA4NDUxYjI5Li5jNjIxYTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC05MzksNyArOTM5LDcgQEAKIAlhdGtiZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGtiZCksIEdGUF9LRVJORUwpOwogCWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghYXRrYmQgfHwgIWRldikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwxOwogCiAJYXRrYmQtPmRldiA9IGRldjsKIAlwczJfaW5pdCgmYXRrYmQtPnBzMmRldiwgc2VyaW8pOwpAQCAtOTY3LDE0ICs5NjcsMTMgQEAKIAogCWVyciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwyOwogCiAJaWYgKGF0a2JkLT53cml0ZSkgewogCiAJCWlmIChhdGtiZF9wcm9iZShhdGtiZCkpIHsKLQkJCXNlcmlvX2Nsb3NlKHNlcmlvKTsKIAkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIGZhaWw7CisJCQlnb3RvIGZhaWwzOwogCQl9CiAKIAkJYXRrYmQtPnNldCA9IGF0a2JkX3NlbGVjdF9zZXQoYXRrYmQsIGF0a2JkX3NldCwgYXRrYmRfZXh0cmEpOwpAQCAtOTg4LDE2ICs5ODcsMjIgQEAKIAlhdGtiZF9zZXRfa2V5Y29kZV90YWJsZShhdGtiZCk7CiAJYXRrYmRfc2V0X2RldmljZV9hdHRycyhhdGtiZCk7CiAKLQlzeXNmc19jcmVhdGVfZ3JvdXAoJnNlcmlvLT5kZXYua29iaiwgJmF0a2JkX2F0dHJpYnV0ZV9ncm91cCk7CisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzZXJpby0+ZGV2LmtvYmosICZhdGtiZF9hdHRyaWJ1dGVfZ3JvdXApOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDM7CiAKIAlhdGtiZF9lbmFibGUoYXRrYmQpOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGF0a2JkLT5kZXYpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw0OwogCiAJcmV0dXJuIDA7CiAKLSBmYWlsOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7Ci0JaW5wdXRfZnJlZV9kZXZpY2UoZGV2KTsKKyBmYWlsNDogc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZXJpby0+ZGV2LmtvYmosICZhdGtiZF9hdHRyaWJ1dGVfZ3JvdXApOworIGZhaWwzOglzZXJpb19jbG9zZShzZXJpbyk7CisgZmFpbDI6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoZGV2KTsKIAlrZnJlZShhdGtiZCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTExMzMsOSArMTEzOCwxMSBAQAogCiBzdGF0aWMgc3NpemVfdCBhdGtiZF9zZXRfZXh0cmEoc3RydWN0IGF0a2JkICphdGtiZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGlucHV0X2RldiAqbmV3X2RldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWNoYXIgKnJlc3Q7CisJaW50IGVycjsKKwl1bnNpZ25lZCBjaGFyIG9sZF9leHRyYSwgb2xkX3NldDsKIAogCWlmICghYXRrYmQtPndyaXRlKQogCQlyZXR1cm4gLUVJTzsKQEAgLTExNDcsMTcgKzExNTQsMzYgQEAKIAlpZiAoYXRrYmQtPmV4dHJhICE9IHZhbHVlKSB7CiAJCS8qCiAJCSAqIFNpbmNlIGRldmljZSdzIHByb3BlcnRpZXMgd2lsbCBjaGFuZ2Ugd2UgbmVlZCB0bwotCQkgKiB1bnJlZ2lzdGVyIG9sZCBkZXZpY2UuIEJ1dCBhbGxvY2F0ZSBuZXcgb25lIGZpcnN0Ci0JCSAqIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGl0LgorCQkgKiB1bnJlZ2lzdGVyIG9sZCBkZXZpY2UuIEJ1dCBhbGxvY2F0ZSBhbmQgcmVnaXN0ZXIKKwkJICogbmV3IG9uZSBmaXJzdCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBpdC4KIAkJICovCi0JCWlmICghKG5ld19kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKSkpCisJCW9sZF9kZXYgPSBhdGtiZC0+ZGV2OworCQlvbGRfZXh0cmEgPSBhdGtiZC0+ZXh0cmE7CisJCW9sZF9zZXQgPSBhdGtiZC0+c2V0OworCisJCW5ld19kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwkJaWYgKCFuZXdfZGV2KQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGF0a2JkLT5kZXYpOworCiAJCWF0a2JkLT5kZXYgPSBuZXdfZGV2OwogCQlhdGtiZC0+c2V0ID0gYXRrYmRfc2VsZWN0X3NldChhdGtiZCwgYXRrYmQtPnNldCwgdmFsdWUpOwogCQlhdGtiZF9hY3RpdmF0ZShhdGtiZCk7CisJCWF0a2JkX3NldF9rZXljb2RlX3RhYmxlKGF0a2JkKTsKIAkJYXRrYmRfc2V0X2RldmljZV9hdHRycyhhdGtiZCk7Ci0JCWlucHV0X3JlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKKworCQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYXRrYmQtPmRldik7CisJCWlmIChlcnIpIHsKKwkJCWlucHV0X2ZyZWVfZGV2aWNlKG5ld19kZXYpOworCisJCQlhdGtiZC0+ZGV2ID0gb2xkX2RldjsKKwkJCWF0a2JkLT5zZXQgPSBhdGtiZF9zZWxlY3Rfc2V0KGF0a2JkLCBvbGRfc2V0LCBvbGRfZXh0cmEpOworCQkJYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoYXRrYmQpOworCQkJYXRrYmRfc2V0X2RldmljZV9hdHRycyhhdGtiZCk7CisKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uob2xkX2Rldik7CisKIAl9CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTE2OSwyMyArMTE5NSw0MSBAQAogCiBzdGF0aWMgc3NpemVfdCBhdGtiZF9zZXRfc2Nyb2xsKHN0cnVjdCBhdGtiZCAqYXRrYmQsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpbnB1dF9kZXYgKm5ld19kZXY7CisJc3RydWN0IGlucHV0X2RldiAqb2xkX2RldiwgKm5ld19kZXY7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAljaGFyICpyZXN0OworCWludCBlcnI7CisJdW5zaWduZWQgY2hhciBvbGRfc2Nyb2xsOwogCiAJdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7CiAJaWYgKCpyZXN0IHx8IHZhbHVlID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXRrYmQtPnNjcm9sbCAhPSB2YWx1ZSkgewotCQlpZiAoIShuZXdfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCkpKQorCQlvbGRfZGV2ID0gYXRrYmQtPmRldjsKKwkJb2xkX3Njcm9sbCA9IGF0a2JkLT5zY3JvbGw7CisKKwkJbmV3X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCQlpZiAoIW5ld19kZXYpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoYXRrYmQtPmRldik7CisKIAkJYXRrYmQtPmRldiA9IG5ld19kZXY7CiAJCWF0a2JkLT5zY3JvbGwgPSB2YWx1ZTsKIAkJYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfZGV2aWNlX2F0dHJzKGF0a2JkKTsKLQkJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGF0a2JkLT5kZXYpOworCisJCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKKwkJaWYgKGVycikgeworCQkJaW5wdXRfZnJlZV9kZXZpY2UobmV3X2Rldik7CisKKwkJCWF0a2JkLT5zY3JvbGwgPSBvbGRfc2Nyb2xsOworCQkJYXRrYmQtPmRldiA9IG9sZF9kZXY7CisJCQlhdGtiZF9zZXRfa2V5Y29kZV90YWJsZShhdGtiZCk7CisJCQlhdGtiZF9zZXRfZGV2aWNlX2F0dHJzKGF0a2JkKTsKKworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShvbGRfZGV2KTsKIAl9CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTE5Nyw5ICsxMjQxLDExIEBACiAKIHN0YXRpYyBzc2l6ZV90IGF0a2JkX3NldF9zZXQoc3RydWN0IGF0a2JkICphdGtiZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGlucHV0X2RldiAqbmV3X2RldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWNoYXIgKnJlc3Q7CisJaW50IGVycjsKKwl1bnNpZ25lZCBjaGFyIG9sZF9zZXQsIG9sZF9leHRyYTsKIAogCWlmICghYXRrYmQtPndyaXRlKQogCQlyZXR1cm4gLUVJTzsKQEAgLTEyMDksMTUgKzEyNTUsMzIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXRrYmQtPnNldCAhPSB2YWx1ZSkgewotCQlpZiAoIShuZXdfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCkpKQorCQlvbGRfZGV2ID0gYXRrYmQtPmRldjsKKwkJb2xkX2V4dHJhID0gYXRrYmQtPmV4dHJhOworCQlvbGRfc2V0ID0gYXRrYmQtPnNldDsKKworCQluZXdfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJCWlmICghbmV3X2RldikKIAkJCXJldHVybiAtRU5PTUVNOwotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKKwogCQlhdGtiZC0+ZGV2ID0gbmV3X2RldjsKIAkJYXRrYmQtPnNldCA9IGF0a2JkX3NlbGVjdF9zZXQoYXRrYmQsIHZhbHVlLCBhdGtiZC0+ZXh0cmEpOwogCQlhdGtiZF9hY3RpdmF0ZShhdGtiZCk7CiAJCWF0a2JkX3NldF9rZXljb2RlX3RhYmxlKGF0a2JkKTsKIAkJYXRrYmRfc2V0X2RldmljZV9hdHRycyhhdGtiZCk7Ci0JCWlucHV0X3JlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKKworCQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYXRrYmQtPmRldik7CisJCWlmIChlcnIpIHsKKwkJCWlucHV0X2ZyZWVfZGV2aWNlKG5ld19kZXYpOworCisJCQlhdGtiZC0+ZGV2ID0gb2xkX2RldjsKKwkJCWF0a2JkLT5zZXQgPSBhdGtiZF9zZWxlY3Rfc2V0KGF0a2JkLCBvbGRfc2V0LCBvbGRfZXh0cmEpOworCQkJYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoYXRrYmQpOworCQkJYXRrYmRfc2V0X2RldmljZV9hdHRycyhhdGtiZCk7CisKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uob2xkX2Rldik7CiAJfQogCXJldHVybiBjb3VudDsKIH0KQEAgLTEyMjksOSArMTI5MiwxMSBAQAogCiBzdGF0aWMgc3NpemVfdCBhdGtiZF9zZXRfc29mdHJlcGVhdChzdHJ1Y3QgYXRrYmQgKmF0a2JkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpuZXdfZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJY2hhciAqcmVzdDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGNoYXIgb2xkX3NvZnRyZXBlYXQsIG9sZF9zb2Z0cmF3OwogCiAJaWYgKCFhdGtiZC0+d3JpdGUpCiAJCXJldHVybiAtRUlPOwpAQCAtMTI0MSwxNSArMTMwNiwzMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdGtiZC0+c29mdHJlcGVhdCAhPSB2YWx1ZSkgewotCQlpZiAoIShuZXdfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCkpKQorCQlvbGRfZGV2ID0gYXRrYmQtPmRldjsKKwkJb2xkX3NvZnRyZXBlYXQgPSBhdGtiZC0+c29mdHJlcGVhdDsKKwkJb2xkX3NvZnRyYXcgPSBhdGtiZC0+c29mdHJhdzsKKworCQluZXdfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJCWlmICghbmV3X2RldikKIAkJCXJldHVybiAtRU5PTUVNOwotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKKwogCQlhdGtiZC0+ZGV2ID0gbmV3X2RldjsKIAkJYXRrYmQtPnNvZnRyZXBlYXQgPSB2YWx1ZTsKIAkJaWYgKGF0a2JkLT5zb2Z0cmVwZWF0KQogCQkJYXRrYmQtPnNvZnRyYXcgPSAxOwogCQlhdGtiZF9zZXRfZGV2aWNlX2F0dHJzKGF0a2JkKTsKLQkJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGF0a2JkLT5kZXYpOworCisJCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKKwkJaWYgKGVycikgeworCQkJaW5wdXRfZnJlZV9kZXZpY2UobmV3X2Rldik7CisKKwkJCWF0a2JkLT5kZXYgPSBvbGRfZGV2OworCQkJYXRrYmQtPnNvZnRyZXBlYXQgPSBvbGRfc29mdHJlcGVhdDsKKwkJCWF0a2JkLT5zb2Z0cmF3ID0gb2xkX3NvZnRyYXc7CisJCQlhdGtiZF9zZXRfZGV2aWNlX2F0dHJzKGF0a2JkKTsKKworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShvbGRfZGV2KTsKIAl9CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTI2MiwyMiArMTM0NCwzOSBAQAogCiBzdGF0aWMgc3NpemVfdCBhdGtiZF9zZXRfc29mdHJhdyhzdHJ1Y3QgYXRrYmQgKmF0a2JkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpuZXdfZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJY2hhciAqcmVzdDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGNoYXIgb2xkX3NvZnRyYXc7CiAKIAl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKIAlpZiAoKnJlc3QgfHwgdmFsdWUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdGtiZC0+c29mdHJhdyAhPSB2YWx1ZSkgewotCQlpZiAoIShuZXdfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCkpKQorCQlvbGRfZGV2ID0gYXRrYmQtPmRldjsKKwkJb2xkX3NvZnRyYXcgPSBhdGtiZC0+c29mdHJhdzsKKworCQluZXdfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJCWlmICghbmV3X2RldikKIAkJCXJldHVybiAtRU5PTUVNOwotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKKwogCQlhdGtiZC0+ZGV2ID0gbmV3X2RldjsKIAkJYXRrYmQtPnNvZnRyYXcgPSB2YWx1ZTsKIAkJYXRrYmRfc2V0X2RldmljZV9hdHRycyhhdGtiZCk7Ci0JCWlucHV0X3JlZ2lzdGVyX2RldmljZShhdGtiZC0+ZGV2KTsKKworCQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYXRrYmQtPmRldik7CisJCWlmIChlcnIpIHsKKwkJCWlucHV0X2ZyZWVfZGV2aWNlKG5ld19kZXYpOworCisJCQlhdGtiZC0+ZGV2ID0gb2xkX2RldjsKKwkJCWF0a2JkLT5zb2Z0cmF3ID0gb2xkX3NvZnRyYXc7CisJCQlhdGtiZF9zZXRfZGV2aWNlX2F0dHJzKGF0a2JkKTsKKworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShvbGRfZGV2KTsKIAl9CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTI5MCw4ICsxMzg5LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYXRrYmRfaW5pdCh2b2lkKQogewotCXNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmYXRrYmRfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZhdGtiZF9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXRrYmRfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCmluZGV4IGJlZmRkNjAuLjEwMTZjOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKQEAgLTI5MSwxNSArMjkxLDEyIEBACiB7CiAJc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IGk7CisJaW50IGksIGVyciA9IC1FTk9NRU07CiAKIAljb3JnaWtiZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb3JnaWtiZCksIEdGUF9LRVJORUwpOwogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghY29yZ2lrYmQgfHwgIWlucHV0X2RldikgewotCQlrZnJlZShjb3JnaWtiZCk7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlpZiAoIWNvcmdpa2JkIHx8ICFpbnB1dF9kZXYpCisJCWdvdG8gZmFpbDsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvcmdpa2JkKTsKIApAQCAtMzQxLDcgKzMzOCw5IEBACiAJc2V0X2JpdChTV19UQUJMRVRfTU9ERSwgaW5wdXRfZGV2LT5zd2JpdCk7CiAJc2V0X2JpdChTV19IRUFEUEhPTkVfSU5TRVJULCBpbnB1dF9kZXYtPnN3Yml0KTsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShjb3JnaWtiZC0+aW5wdXQpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShjb3JnaWtiZC0+aW5wdXQpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKIAogCW1vZF90aW1lcigmY29yZ2lrYmQtPmh0aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSElOR0VfU0NBTl9JTlRFUlZBTCkpOwogCkBAIC0zNjIsNiArMzYxLDEwIEBACiAJcHhhX2dwaW9fbW9kZShDT1JHSV9HUElPX0FLX0lOVCB8IEdQSU9fSU4pOwogCiAJcmV0dXJuIDA7CisKKyBmYWlsOglpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKGNvcmdpa2JkKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGNvcmdpa2JkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbF9rYmQuYwppbmRleCBlNzc0ZGQzLi43Y2M5NzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbF9rYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbF9rYmQuYwpAQCAtMzgxLDggKzM4MSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGhpbF9rYmRfaW5pdCh2b2lkKQogewotCXNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmaGlsX2tiZF9zZXJpb19kcnYpOwotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZoaWxfa2JkX3NlcmlvX2Rydik7CiB9CiAgICAgICAgICAgICAgICAgCiBzdGF0aWMgdm9pZCBfX2V4aXQgaGlsX2tiZF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbGtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYwppbmRleCA1NGJjNTY5Li4zNTQ2MWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMKQEAgLTIzLDcgKzIzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaWZkZWYgQ09ORklHX0hQMzAwCisjaW5jbHVkZSA8YXNtL2h3dGVzdC5oPgorI2VuZGlmCiAKIAogTU9EVUxFX0FVVEhPUigiUGhpbGlwIEJsdW5kZWxsLCBNYXR0aGV3IFdpbGNveCwgSGVsZ2UgRGVsbGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xra2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xra2JkLmMKaW5kZXggYjdmMDQ5Yi4uM2Q0ZDBhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sa2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbGtrYmQuYwpAQCAtNjQ2LDcgKzY0Niw3IEBACiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlICgpOwogCWlmICghbGsgfHwgIWlucHV0X2RldikgewogCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDE7CiAJfQogCiAJbGstPnNlcmlvID0gc2VyaW87CkBAIC02OTEsMTUgKzY5MSwxOSBAQAogCiAJZXJyID0gc2VyaW9fb3BlbiAoc2VyaW8sIGRydik7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwyOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIChsay0+ZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgKGxrLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDM7CisKIAlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9QT1dFUkNZQ0xFX1JFU0VUKTsKIAogCXJldHVybiAwOwogCi0gZmFpbDoJc2VyaW9fc2V0X2RydmRhdGEgKHNlcmlvLCBOVUxMKTsKLQlpbnB1dF9mcmVlX2RldmljZSAoaW5wdXRfZGV2KTsKKyBmYWlsMzoJc2VyaW9fY2xvc2UgKHNlcmlvKTsKKyBmYWlsMjoJc2VyaW9fc2V0X2RydmRhdGEgKHNlcmlvLCBOVUxMKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UgKGlucHV0X2Rldik7CiAJa2ZyZWUgKGxrKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzQ5LDggKzc1Myw3IEBACiBzdGF0aWMgaW50IF9faW5pdAogbGtrYmRfaW5pdCAodm9pZCkKIHsKLQlzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJmxra2JkX2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmbGtrYmRfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xvY29tb2tiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sb2NvbW9rYmQuYwppbmRleCA1Nzg4ZGJjLi4yYWRlNTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xvY29tb2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbG9jb21va2JkLmMKQEAgLTE5MywyMiArMTkzLDIyIEBACiB7CiAJc3RydWN0IGxvY29tb2tiZCAqbG9jb21va2JkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlpbnQgaSwgcmV0OworCWludCBpLCBlcnI7CiAKIAlsb2NvbW9rYmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG9jb21va2JkKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFsb2NvbW9rYmQgfHwgIWlucHV0X2RldikgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWU7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCX0KIAogCS8qIHRyeSBhbmQgY2xhaW0gbWVtb3J5IHJlZ2lvbiAqLwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKCh1bnNpZ25lZCBsb25nKSBkZXYtPm1hcGJhc2UsCiAJCQkJZGV2LT5sZW5ndGgsCiAJCQkJTE9DT01PX0RSSVZFUl9OQU1FKGRldikpKSB7Ci0JCXJldCA9IC1FQlVTWTsKKwkJZXJyID0gLUVCVVNZOwogCQlwcmludGsoS0VSTl9FUlIgImxvY29tb2tiZDogQ2FuJ3QgYWNxdWlyZSBhY2Nlc3MgdG8gaW8gbWVtb3J5IGZvciBrZXlib2FyZFxuIik7Ci0JCWdvdG8gZnJlZTsKKwkJZ290byBlcnJfZnJlZV9tZW07CiAJfQogCiAJbG9jb21va2JkLT5sZGV2ID0gZGV2OwpAQCAtMjQ0LDI0ICsyNDQsMjggQEAKIAljbGVhcl9iaXQoMCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCiAJLyogYXR0ZW1wdCB0byBnZXQgdGhlIGludGVycnVwdCAqLwotCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxWzBdLCBsb2NvbW9rYmRfaW50ZXJydXB0LCAwLCAibG9jb21va2JkIiwgbG9jb21va2JkKTsKLQlpZiAocmV0KSB7CisJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnFbMF0sIGxvY29tb2tiZF9pbnRlcnJ1cHQsIDAsICJsb2NvbW9rYmQiLCBsb2NvbW9rYmQpOworCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJsb2NvbW9rYmQ6IENhbid0IGdldCBpcnEgZm9yIGtleWJvYXJkXG4iKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCX0KIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShsb2NvbW9rYmQtPmlucHV0KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UobG9jb21va2JkLT5pbnB1dCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAKIAlyZXR1cm4gMDsKIAotb3V0OgorIGVycl9mcmVlX2lycToKKwlmcmVlX2lycShkZXYtPmlycVswXSwgbG9jb21va2JkKTsKKyBlcnJfcmVsZWFzZV9yZWdpb246CiAJcmVsZWFzZV9tZW1fcmVnaW9uKCh1bnNpZ25lZCBsb25nKSBkZXYtPm1hcGJhc2UsIGRldi0+bGVuZ3RoKTsKIAlsb2NvbW9fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKLWZyZWU6CisgZXJyX2ZyZWVfbWVtOgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJa2ZyZWUobG9jb21va2JkKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBsb2NvbW9rYmRfcmVtb3ZlKHN0cnVjdCBsb2NvbW9fZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWFwbGVfa2V5Yi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzZhYWY5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWFwbGVfa2V5Yi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKgkkSWQ6IG1hcGxlX2tleWIuYyx2IDEuNCAyMDA0LzAzLzIyIDAxOjE4OjE1IGxldGhhbCBFeHAgJAotICoJU0VHQSBEcmVhbWNhc3Qga2V5Ym9hcmQgZHJpdmVyCi0gKglCYXNlZCBvbiBkcml2ZXJzL3VzYi91c2JrYmQuYwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tYXBsZS5oPgotCi1NT0RVTEVfQVVUSE9SKCJZQUVHQVNISSBUYWtlc2hpIDx0QGtlc2hpLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU0VHQSBEcmVhbWNhc3Qga2V5Ym9hcmQgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRjX2tiZF9rZXljb2RlWzI1Nl0gPSB7Ci0JICAwLCAgMCwgIDAsICAwLCAzMCwgNDgsIDQ2LCAzMiwgMTgsIDMzLCAzNCwgMzUsIDIzLCAzNiwgMzcsIDM4LAotCSA1MCwgNDksIDI0LCAyNSwgMTYsIDE5LCAzMSwgMjAsIDIyLCA0NywgMTcsIDQ1LCAyMSwgNDQsICAyLCAgMywKLQkgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAyOCwgIDEsIDE0LCAxNSwgNTcsIDEyLCAxMywgMjYsCi0JIDI3LCA0MywgNDMsIDM5LCA0MCwgNDEsIDUxLCA1MiwgNTMsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LAotCSA2NSwgNjYsIDY3LCA2OCwgODcsIDg4LCA5OSwgNzAsMTE5LDExMCwxMDIsMTA0LDExMSwxMDcsMTA5LDEwNiwKLQkxMDUsMTA4LDEwMywgNjksIDk4LCA1NSwgNzQsIDc4LCA5NiwgNzksIDgwLCA4MSwgNzUsIDc2LCA3NywgNzEsCi0JIDcyLCA3MywgODIsIDgzLCA4NiwxMjcsMTE2LDExNywxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLAotCTE5MSwxOTIsMTkzLDE5NCwxMzQsMTM4LDEzMCwxMzIsMTI4LDEyOSwxMzEsMTM3LDEzMywxMzUsMTM2LDExMywKLQkxMTUsMTE0LCAgMCwgIDAsICAwLDEyMSwgIDAsIDg5LCA5MywxMjQsIDkyLCA5NCwgOTUsICAwLCAgMCwgIDAsCi0JMTIyLDEyMywgOTAsIDkxLCA4NSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLQkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0JICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLQkgMjksIDQyLCA1NiwxMjUsIDk3LCA1NCwxMDAsMTI2LDE2NCwxNjYsMTY1LDE2MywxNjEsMTE1LDExNCwxMTMsCi0JMTUwLDE1OCwxNTksMTI4LDEzNiwxNzcsMTc4LDE3NiwxNDIsMTUyLDE3MywxNDAKLX07Ci0KLQotc3RydWN0IGRjX2tiZCB7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2OwotCXVuc2lnbmVkIGNoYXIgbmV3WzhdOwotCXVuc2lnbmVkIGNoYXIgb2xkWzhdOwotfTsKLQotCi1zdGF0aWMgdm9pZCBkY19zY2FuX2tiZChzdHJ1Y3QgZGNfa2JkICprYmQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0ga2JkLT5kZXY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZGNfa2JkX2tleWNvZGVbaSArIDIyNF0sIChrYmQtPm5ld1swXSA+PiBpKSAmIDEpOwotCi0JZm9yIChpID0gMjsgaSA8IDg7IGkrKykgewotCi0JCWlmIChrYmQtPm9sZFtpXSA+IDMgJiYgbWVtc2NhbihrYmQtPm5ldyArIDIsIGtiZC0+b2xkW2ldLCA2KSA9PSBOVUxMKSB7Ci0JCQlpZiAoZGNfa2JkX2tleWNvZGVba2JkLT5vbGRbaV1dKQotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBkY19rYmRfa2V5Y29kZVtrYmQtPm9sZFtpXV0sIDApOwotCQkJZWxzZQotCQkJCXByaW50aygiVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgcmVsZWFzZWQuIiwKLQkJCQkgICAgICAga2JkLT5vbGRbaV0pOwotCQl9Ci0KLQkJaWYgKGtiZC0+bmV3W2ldID4gMyAmJiBtZW1zY2FuKGtiZC0+b2xkICsgMiwga2JkLT5uZXdbaV0sIDYpICE9IE5VTEwpIHsKLQkJCWlmKGRjX2tiZF9rZXljb2RlW2tiZC0+bmV3W2ldXSkKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgZGNfa2JkX2tleWNvZGVba2JkLT5uZXdbaV1dLCAxKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoIlVua25vd24ga2V5IChzY2FuY29kZSAlI3gpIHByZXNzZWQuIiwKLQkJCQkgICAgICAga2JkLT5uZXdbaV0pOwotCQl9Ci0JfQotCi0JaW5wdXRfc3luYyhkZXYpOwotCi0JbWVtY3B5KGtiZC0+b2xkLCBrYmQtPm5ldywgOCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgZGNfa2JkX2NhbGxiYWNrKHN0cnVjdCBtYXBsZXEgKm1xKQotewotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1hcGxlZGV2ID0gbXEtPmRldjsKLQlzdHJ1Y3QgZGNfa2JkICprYmQgPSBtYXBsZWRldi0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgKmJ1ZiA9IG1xLT5yZWN2YnVmOwotCi0JaWYgKGJ1ZlsxXSA9PSBtYXBsZWRldi0+ZnVuY3Rpb24pIHsKLQkJbWVtY3B5KGtiZC0+bmV3LCBidWYgKyAyLCA4KTsKLQkJZGNfc2Nhbl9rYmQoa2JkKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZGNfa2JkX2Nvbm5lY3Qoc3RydWN0IG1hcGxlX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkY19rYmQgKmtiZDsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JdW5zaWduZWQgbG9uZyBkYXRhID0gYmUzMl90b19jcHUoZGV2LT5kZXZpbmZvLmZ1bmN0aW9uX2RhdGFbMF0pOwotCWludCBpOwotCi0JZGV2LT5wcml2YXRlX2RhdGEgPSBrYmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGNfa2JkKSwgR0ZQX0tFUk5FTCk7Ci0JaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFrYmQgfHwgIWlucHV0X2RldikgewotCQlrZnJlZShrYmQpOwotCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlrYmQtPmRldiA9IGlucHV0X2RldjsKLQotCWlucHV0X2Rldi0+bmFtZSA9IGRldi0+cHJvZHVjdF9uYW1lOwotCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19NQVBMRTsKLQlpbnB1dF9kZXYtPnByaXZhdGUgPSBrYmQ7Ci0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCk7Ci0JZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKQotCQlzZXRfYml0KGRjX2tiZF9rZXljb2RlW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JY2xlYXJfYml0KDAsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQotCWlucHV0X3JlZ2lzdGVyX2RldmljZShrYmQtPmRldik7Ci0KLQltYXBsZV9nZXRjb25kX2NhbGxiYWNrKGRldiwgZGNfa2JkX2NhbGxiYWNrLCAxLCBNQVBMRV9GVU5DX0tFWUJPQVJEKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBkY19rYmRfZGlzY29ubmVjdChzdHJ1Y3QgbWFwbGVfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRjX2tiZCAqa2JkID0gZGV2LT5wcml2YXRlX2RhdGE7Ci0KLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrYmQtPmRldik7Ci0Ja2ZyZWUoa2JkKTsKLX0KLQotCi1zdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBkY19rYmRfZHJpdmVyID0gewotCS5mdW5jdGlvbiA9CU1BUExFX0ZVTkNfS0VZQk9BUkQsCi0JLm5hbWUgPQkJIkRyZWFtY2FzdCBrZXlib2FyZCIsCi0JLmNvbm5lY3QgPQlkY19rYmRfY29ubmVjdCwKLQkuZGlzY29ubmVjdCA9CWRjX2tiZF9kaXNjb25uZWN0LAotfTsKLQotCi1zdGF0aWMgaW50IF9faW5pdCBkY19rYmRfaW5pdCh2b2lkKQotewotCW1hcGxlX3JlZ2lzdGVyX2RyaXZlcigmZGNfa2JkX2RyaXZlcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19leGl0IGRjX2tiZF9leGl0KHZvaWQpCi17Ci0JbWFwbGVfdW5yZWdpc3Rlcl9kcml2ZXIoJmRjX2tiZF9kcml2ZXIpOwotfQotCi0KLW1vZHVsZV9pbml0KGRjX2tiZF9pbml0KTsKLW1vZHVsZV9leGl0KGRjX2tiZF9leGl0KTsKLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbmV3dG9ua2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL25ld3RvbmtiZC5jCmluZGV4IDkyODJlNGUuLmFhMjliNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbmV3dG9ua2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9uZXd0b25rYmQuYwpAQCAtOTEsNyArOTEsNyBAQAogCW5rYmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmtiZCksIEdGUF9LRVJORUwpOwogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghbmtiZCB8fCAhaW5wdXRfZGV2KQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDE7CiAKIAlua2JkLT5zZXJpbyA9IHNlcmlvOwogCW5rYmQtPmRldiA9IGlucHV0X2RldjsKQEAgLTExOSwxMyArMTE5LDE3IEBACiAKIAllcnIgPSBzZXJpb19vcGVuKHNlcmlvLCBkcnYpOwogCWlmIChlcnIpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMjsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShua2JkLT5kZXYpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShua2JkLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDM7CisKIAlyZXR1cm4gMDsKIAotIGZhaWw6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworIGZhaWwzOglzZXJpb19jbG9zZShzZXJpbyk7CisgZmFpbDI6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZShua2JkKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTY1LDggKzE2OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG5rYmRfaW5pdCh2b2lkKQogewotCXNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmbmtiZF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJm5rYmRfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG5rYmRfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCmluZGV4IDI4YjI3NDguLjhhMjE2NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKQEAgLTM0NiwxNyArMzQ2LDEyIEBACiB7CiAJc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IGk7CisJaW50IGksIGVyciA9IC1FTk9NRU07CiAKIAlzcGl0emtiZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzcGl0emtiZCksIEdGUF9LRVJORUwpOwotCWlmICghc3BpdHprYmQpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpbnB1dF9kZXYpIHsKLQkJa2ZyZWUoc3BpdHprYmQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWYgKCFzcGl0emtiZCB8fCAhaW5wdXRfZGV2KQorCQlnb3RvIGZhaWw7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHNwaXR6a2JkKTsKIAlzdHJjcHkoc3BpdHprYmQtPnBoeXMsICJzcGl0emtiZC9pbnB1dDAiKTsKQEAgLTQwMCw3ICszOTUsOSBAQAogCXNldF9iaXQoU1dfVEFCTEVUX01PREUsIGlucHV0X2Rldi0+c3diaXQpOwogCXNldF9iaXQoU1dfSEVBRFBIT05FX0lOU0VSVCwgaW5wdXRfZGV2LT5zd2JpdCk7CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7CiAKIAltb2RfdGltZXIoJnNwaXR6a2JkLT5odGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhJTkdFX1NDQU5fSU5URVJWQUwpKTsKIApAQCAtNDM0LDEzICs0MzEsMTUgQEAKIAlyZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19TV0IsIHNwaXR6a2JkX2hpbmdlX2lzciwKIAkJICAgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCSAgICAiU3BpdHprYmQgU1dCIiwgc3BpdHprYmQpOwotIAlyZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19BS19JTlQsIHNwaXR6a2JkX2hpbmdlX2lzciwKKwlyZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19BS19JTlQsIHNwaXR6a2JkX2hpbmdlX2lzciwKIAkJICAgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCSAgICAiU3BpdHprYmQgSFAiLCBzcGl0emtiZCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogU3BpdHogS2V5Ym9hcmQgUmVnaXN0ZXJlZFxuIik7Ci0KIAlyZXR1cm4gMDsKKworIGZhaWw6CWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUoc3BpdHprYmQpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc3BpdHprYmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKQEAgLTQ3NCw2ICs0NzMsNyBAQAogCS5yZXN1bWUJCT0gc3BpdHprYmRfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJzcGl0ei1rZXlib2FyZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N0b3dhd2F5LmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N0b3dhd2F5LmMKaW5kZXggZTYwOTM3ZC4uZjdiNWM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdG93YXdheS5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Rvd2F3YXkuYwpAQCAtMTczLDggKzE3Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNrYmRfaW5pdCh2b2lkKQogewotCXNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmc2tiZF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnNrYmRfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNrYmRfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMKaW5kZXggNmNkODg3Yy4uY2MwMjM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIHN0YXRpYyB2b2lkIHN1bmtiZF9lbmFibGUoc3RydWN0IHN1bmtiZCAqc3Vua2JkLCBpbnQgZW5hYmxlKQogewogCXNlcmlvX3BhdXNlX3J4KHN1bmtiZC0+c2VyaW8pOwotCXN1bmtiZC0+ZW5hYmxlZCA9IDE7CisJc3Vua2JkLT5lbmFibGVkID0gZW5hYmxlOwogCXNlcmlvX2NvbnRpbnVlX3J4KHN1bmtiZC0+c2VyaW8pOwogfQogCkBAIC0yNDMsNyArMjQzLDcgQEAKIAlzdW5rYmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3Vua2JkKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFzdW5rYmQgfHwgIWlucHV0X2RldikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwxOwogCiAJc3Vua2JkLT5zZXJpbyA9IHNlcmlvOwogCXN1bmtiZC0+ZGV2ID0gaW5wdXRfZGV2OwpAQCAtMjU1LDExICsyNTUsMTEgQEAKIAogCWVyciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwyOwogCiAJaWYgKHN1bmtiZF9pbml0aWFsaXplKHN1bmtiZCkgPCAwKSB7Ci0JCXNlcmlvX2Nsb3NlKHNlcmlvKTsKLQkJZ290byBmYWlsOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWwzOwogCX0KIAogCXNucHJpbnRmKHN1bmtiZC0+bmFtZSwgc2l6ZW9mKHN1bmtiZC0+bmFtZSksICJTdW4gVHlwZSAlZCBrZXlib2FyZCIsIHN1bmtiZC0+dHlwZSk7CkBAIC0yODcsMTEgKzI4NywxNyBAQAogCWNsZWFyX2JpdCgwLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKIAlzdW5rYmRfZW5hYmxlKHN1bmtiZCwgMSk7Ci0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHN1bmtiZC0+ZGV2KTsKKworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShzdW5rYmQtPmRldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsNDsKKwogCXJldHVybiAwOwogCi0gZmFpbDoJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwotCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisgZmFpbDQ6CXN1bmtiZF9lbmFibGUoc3Vua2JkLCAwKTsKKyBmYWlsMzoJc2VyaW9fY2xvc2Uoc2VyaW8pOworIGZhaWwyOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CisgZmFpbDE6CWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJa2ZyZWUoc3Vua2JkKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzQ2LDggKzM1Miw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHN1bmtiZF9pbml0KHZvaWQpCiB7Ci0Jc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZzdW5rYmRfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZzdW5rYmRfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHN1bmtiZF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3h0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3h0a2JkLmMKaW5kZXggOGMxMWRjOS4uYTgyMDkzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC94dGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQveHRrYmQuYwpAQCAtOTUsNyArOTUsNyBAQAogCXh0a2JkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHh0a2JkKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCF4dGtiZCB8fCAhaW5wdXRfZGV2KQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDE7CiAKIAl4dGtiZC0+c2VyaW8gPSBzZXJpbzsKIAl4dGtiZC0+ZGV2ID0gaW5wdXRfZGV2OwpAQCAtMTI0LDEzICsxMjQsMTcgQEAKIAogCWVyciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwyOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHh0a2JkLT5kZXYpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZSh4dGtiZC0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwzOworCiAJcmV0dXJuIDA7CiAKLSBmYWlsOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKyBmYWlsMzoJc2VyaW9fY2xvc2Uoc2VyaW8pOworIGZhaWwyOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CisgZmFpbDE6CWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJa2ZyZWUoeHRrYmQpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xNzAsOCArMTc0LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgeHRrYmRfaW5pdCh2b2lkKQogewotCXNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmeHRrYmRfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZ4dGtiZF9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgeHRrYmRfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbWltb3VzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hbWltb3VzZS5jCmluZGV4IDU5OWE3YjIuLjIzOWEwZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYW1pbW91c2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FtaW1vdXNlLmMKQEAgLTk1LDEwICs5NSwxMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhbWltb3VzZV9pbml0KHZvaWQpCiB7CisJaW50IGVycjsKKwogCWlmICghTUFDSF9JU19BTUlHQSB8fCAhQU1JR0FIV19QUkVTRU5UKEFNSV9NT1VTRSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCEoYW1pbW91c2VfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCkpKQorCWFtaW1vdXNlX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghYW1pbW91c2VfZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWFtaW1vdXNlX2Rldi0+bmFtZSA9ICJBbWlnYSBtb3VzZSI7CkBAIC0xMTQsNyArMTE3LDExIEBACiAJYW1pbW91c2VfZGV2LT5vcGVuID0gYW1pbW91c2Vfb3BlbjsKIAlhbWltb3VzZV9kZXYtPmNsb3NlID0gYW1pbW91c2VfY2xvc2U7CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYW1pbW91c2VfZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYW1pbW91c2VfZGV2KTsKKwlpZiAoZXJyKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGFtaW1vdXNlX2Rldik7CisJCXJldHVybiBlcnI7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2hpbF9wdHIuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGlsX3B0ci5jCmluZGV4IDRmMmI1MDMuLmJmYjE3NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGlsX3B0ci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGlsX3B0ci5jCkBAIC00MTcsOCArNDE3LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaGlsX3B0cl9pbml0KHZvaWQpCiB7Ci0Jc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZoaWxfcHRyX3NlcmlvX2RyaXZlcik7Ci0gICAgICAgIHJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJmhpbF9wdHJfc2VyaW9fZHJpdmVyKTsKIH0KICAgICAgICAgICAgICAgICAKIHN0YXRpYyB2b2lkIF9fZXhpdCBoaWxfcHRyX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaW5wb3J0LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2lucG9ydC5jCmluZGV4IGUxMjUyZmEuLjEzZGQ5NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaW5wb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9pbnBvcnQuYwpAQCAtMTM1LDYgKzEzNSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbnBvcnRfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGNoYXIgYSwgYiwgYzsKKwlpbnQgZXJyOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihJTlBPUlRfQkFTRSwgSU5QT1JUX0VYVEVOVCwgImlucG9ydCIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaW5wb3J0LmM6IENhbid0IGFsbG9jYXRlIHBvcnRzIGF0ICUjeFxuIiwgSU5QT1JUX0JBU0UpOwpAQCAtMTQ1LDE1ICsxNDYsMTYgQEAKIAliID0gaW5iKElOUE9SVF9TSUdOQVRVUkVfUE9SVCk7CiAJYyA9IGluYihJTlBPUlRfU0lHTkFUVVJFX1BPUlQpOwogCWlmIChhID09IGIgfHwgYSAhPSBjKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKElOUE9SVF9CQVNFLCBJTlBPUlRfRVhURU5UKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJpbnBvcnQuYzogRGlkbid0IGZpbmQgSW5Qb3J0IG1vdXNlIGF0ICUjeFxuIiwgSU5QT1JUX0JBU0UpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCi0JaWYgKCEoaW5wb3J0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpKSkgeworCWlucG9ydF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlucG9ydF9kZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpbnBvcnQuYzogTm90IGVub3VnaCBtZW1vcnkgZm9yIGlucHV0IGRldmljZVxuIik7Ci0JCXJlbGVhc2VfcmVnaW9uKElOUE9SVF9CQVNFLCBJTlBPUlRfRVhURU5UKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCX0KIAogCWlucG9ydF9kZXYtPm5hbWUgPSBJTlBPUlRfTkFNRTsKQEAgLTE3NCw5ICsxNzYsMTggQEAKIAlvdXRiKElOUE9SVF9SRUdfTU9ERSwgSU5QT1JUX0NPTlRST0xfUE9SVCk7CiAJb3V0YihJTlBPUlRfTU9ERV9CQVNFLCBJTlBPUlRfREFUQV9QT1JUKTsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShpbnBvcnRfZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wb3J0X2Rldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9kZXY7CiAKIAlyZXR1cm4gMDsKKworIGVycl9mcmVlX2RldjoKKwlpbnB1dF9mcmVlX2RldmljZShpbnBvcnRfZGV2KTsKKyBlcnJfcmVsZWFzZV9yZWdpb246CisJcmVsZWFzZV9yZWdpb24oSU5QT1JUX0JBU0UsIElOUE9SVF9FWFRFTlQpOworCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlucG9ydF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKaW5kZXggYzU3ZTg4NS4uMjk1NDJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwpAQCAtMjEsNDcgKzIxLDUxIEBACiAjaW5jbHVkZSAibGlmZWJvb2suaCIKIAogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGxpZmVib29rX2RtaV90YWJsZVtdID0gewotICAgICAgIHsKLSAgICAgICAgICAgICAgIC5pZGVudCA9ICJMaWZlQm9vayBCIiwKLSAgICAgICAgICAgICAgIC5tYXRjaGVzID0gewotICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkxpZmVCb29rIEIgU2VyaWVzIiksCi0gICAgICAgICAgICAgICB9LAotICAgICAgIH0sCi0gICAgICAgewotICAgICAgICAgICAgICAgLmlkZW50ID0gIkxpZmVib29rIEIiLAotICAgICAgICAgICAgICAgLm1hdGNoZXMgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTElGRUJPT0sgQiBTZXJpZXMiKSwKLSAgICAgICAgICAgICAgIH0sCi0gICAgICAgfSwKLSAgICAgICB7Ci0gICAgICAgICAgICAgICAuaWRlbnQgPSAiTGlmZWJvb2sgQjIxM3gvQjIxNTAiLAotICAgICAgICAgICAgICAgLm1hdGNoZXMgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTGlmZUJvb2sgQjIxMzEvQjIxMzMvQjIxNTAiKSwKLSAgICAgICAgICAgICAgIH0sCi0gICAgICAgfSwKLSAgICAgICB7Ci0gICAgICAgICAgICAgICAuaWRlbnQgPSAiWmVwaHlyIiwKLSAgICAgICAgICAgICAgIC5tYXRjaGVzID0gewotICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlpFUEhZUiIpLAotICAgICAgICAgICAgICAgfSwKLSAgICAgICB9LAotICAgICAgIHsKLSAgICAgICAgICAgICAgIC5pZGVudCA9ICJDRi0xOCIsCi0gICAgICAgICAgICAgICAubWF0Y2hlcyA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJDRi0xOCIpLAotICAgICAgICAgICAgICAgfSwKLSAgICAgICB9LAotICAgICAgIHsKLSAgICAgICAgICAgICAgIC5pZGVudCA9ICJMaWZlYm9vayBCMTQyIiwKLSAgICAgICAgICAgICAgIC5tYXRjaGVzID0gewotICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkxpZmVCb29rIEIxNDIiKSwKLSAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICB9LAotICAgICAgIHsgfQorCXsKKwkJLmlkZW50ID0gIkZMT1JBLWllIDU1bWkiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiRkxPUkEtaWUgNTVtaSIpLAorCQl9LAorCX0sCisJeworCQkuaWRlbnQgPSAiTGlmZUJvb2sgQiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJMaWZlQm9vayBCIFNlcmllcyIpLAorCQl9LAorCX0sCisJeworCQkuaWRlbnQgPSAiTGlmZWJvb2sgQiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJMSUZFQk9PSyBCIFNlcmllcyIpLAorCQl9LAorCX0sCisJeworCQkuaWRlbnQgPSAiTGlmZWJvb2sgQjIxM3gvQjIxNTAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTGlmZUJvb2sgQjIxMzEvQjIxMzMvQjIxNTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIlplcGh5ciIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJaRVBIWVIiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkNGLTE4IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkNGLTE4IiksCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJMaWZlYm9vayBCMTQyIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkxpZmVCb29rIEIxNDIiKSwKKwkJfSwKKwl9LAorCXsgfQogfTsKIAotCiBzdGF0aWMgcHNtb3VzZV9yZXRfdCBsaWZlYm9va19wcm9jZXNzX2J5dGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCiB7CiAJdW5zaWduZWQgY2hhciAqcGFja2V0ID0gcHNtb3VzZS0+cGFja2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpYm0uYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naWJtLmMKaW5kZXggOGU5YzJmMy4uZGIyMDU5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpYm0uYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2libS5jCkBAIC0xMjQsNiArMTI0LDggQEAKIAogc3RhdGljIGludCBfX2luaXQgbG9naWJtX2luaXQodm9pZCkKIHsKKwlpbnQgZXJyOworCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihMT0dJQk1fQkFTRSwgTE9HSUJNX0VYVEVOVCwgImxvZ2libSIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibG9naWJtLmM6IENhbid0IGFsbG9jYXRlIHBvcnRzIGF0ICUjeFxuIiwgTE9HSUJNX0JBU0UpOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTM0LDE4ICsxMzYsMTkgQEAKIAl1ZGVsYXkoMTAwKTsKIAogCWlmIChpbmIoTE9HSUJNX1NJR05BVFVSRV9QT1JUKSAhPSBMT0dJQk1fU0lHTkFUVVJFX0JZVEUpIHsKLQkJcmVsZWFzZV9yZWdpb24oTE9HSUJNX0JBU0UsIExPR0lCTV9FWFRFTlQpOwogCQlwcmludGsoS0VSTl9FUlIgImxvZ2libS5jOiBEaWRuJ3QgZmluZCBMb2dpdGVjaCBidXNtb3VzZSBhdCAlI3hcbiIsIExPR0lCTV9CQVNFKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCX0KIAogCW91dGIoTE9HSUJNX0RFRkFVTFRfTU9ERSwgTE9HSUJNX0NPTkZJR19QT1JUKTsKIAlvdXRiKExPR0lCTV9ESVNBQkxFX0lSUSwgTE9HSUJNX0NPTlRST0xfUE9SVCk7CiAKLQlpZiAoIShsb2dpYm1fZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCkpKSB7CisJbG9naWJtX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghbG9naWJtX2RldikgewogCQlwcmludGsoS0VSTl9FUlIgImxvZ2libS5jOiBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgaW5wdXQgZGV2aWNlXG4iKTsKLQkJcmVsZWFzZV9yZWdpb24oTE9HSUJNX0JBU0UsIExPR0lCTV9FWFRFTlQpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCiAJbG9naWJtX2Rldi0+bmFtZSA9ICJMb2dpdGVjaCBidXMgbW91c2UiOwpAQCAtMTYyLDkgKzE2NSwxOCBAQAogCWxvZ2libV9kZXYtPm9wZW4gID0gbG9naWJtX29wZW47CiAJbG9naWJtX2Rldi0+Y2xvc2UgPSBsb2dpYm1fY2xvc2U7CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UobG9naWJtX2Rldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGxvZ2libV9kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCiAJcmV0dXJuIDA7CisKKyBlcnJfZnJlZV9kZXY6CisJaW5wdXRfZnJlZV9kZXZpY2UobG9naWJtX2Rldik7CisgZXJyX3JlbGVhc2VfcmVnaW9uOgorCXJlbGVhc2VfcmVnaW9uKExPR0lCTV9CQVNFLCBMT0dJQk1fRVhURU5UKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBsb2dpYm1fZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKaW5kZXggOGE0Zjg2Mi4uZDNkZGVhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCkBAIC0zMjgsNiArMzI4LDcgQEAKIAl1bnNpZ25lZCBjaGFyIG1vZGVsLCBidXR0b25zOwogCWNvbnN0IHN0cnVjdCBwczJwcF9pbmZvICptb2RlbF9pbmZvOwogCWludCB1c2VfcHMycHAgPSAwOworCWludCBlcnJvcjsKIAogCXBhcmFtWzBdID0gMDsKIAlwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9TRVRSRVMpOwpAQCAtMzkzLDggKzM5NCwxNCBAQAogCQkJCXBzbW91c2UtPnNldF9yZXNvbHV0aW9uID0gcHMycHBfc2V0X3Jlc29sdXRpb247CiAJCQkJcHNtb3VzZS0+ZGlzY29ubmVjdCA9IHBzMnBwX2Rpc2Nvbm5lY3Q7CiAKLQkJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAotCQkJCQkJICAgJnBzbW91c2VfYXR0cl9zbWFydHNjcm9sbC5kYXR0cik7CisJCQkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJCQkJCSAgICZwc21vdXNlX2F0dHJfc21hcnRzY3JvbGwuZGF0dHIpOworCQkJCWlmIChlcnJvcikgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSJsb2dpcHMycHAuYzogZmFpbGVkIHRvIGNyZWF0ZSBzbWFydHNjcm9sbCAiCisJCQkJCQkic3lzZnMgYXR0cmlidXRlLCBlcnJvcjogJWRcbiIsIGVycm9yKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BjMTEwcGFkLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BjMTEwcGFkLmMKaW5kZXggOGMwNzVhYS4uZjE1NWMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wYzExMHBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcGMxMTBwYWQuYwpAQCAtMTA4LDYgKzEwOCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBwYzExMHBhZF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgZXJyOwogCiAJZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CiAJaWYgKGRldikgewpAQCAtMTI0LDE2ICsxMjUsMTYgQEAKIAlvdXRiKFBDMTEwUEFEX09GRiwgcGMxMTBwYWRfaW8gKyAyKTsKIAogCWlmIChyZXF1ZXN0X2lycShwYzExMHBhZF9pcnEsIHBjMTEwcGFkX2ludGVycnVwdCwgMCwgInBjMTEwcGFkIiwgTlVMTCkpIHsKLQkJcmVsZWFzZV9yZWdpb24ocGMxMTBwYWRfaW8sIDQpOwogCQlwcmludGsoS0VSTl9FUlIgInBjMTEwcGFkOiBVbmFibGUgdG8gZ2V0IGlycSAlZC5cbiIsIHBjMTEwcGFkX2lycSk7Ci0JCXJldHVybiAtRUJVU1k7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCi0JaWYgKCEocGMxMTBwYWRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCkpKSB7Ci0JCWZyZWVfaXJxKHBjMTEwcGFkX2lycSwgTlVMTCk7Ci0JCXJlbGVhc2VfcmVnaW9uKHBjMTEwcGFkX2lvLCA0KTsKKwlwYzExMHBhZF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXBjMTEwcGFkX2RldikgewogCQlwcmludGsoS0VSTl9FUlIgInBjMTEwcGFkOiBOb3QgZW5vdWdoIG1lbW9yeS5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCiAJcGMxMTBwYWRfZGV2LT5uYW1lID0gIklCTSBQQzExMCBUb3VjaFBhZCI7CkBAIC0xNTMsOSArMTU0LDIwIEBACiAJcGMxMTBwYWRfZGV2LT5vcGVuID0gcGMxMTBwYWRfb3BlbjsKIAlwYzExMHBhZF9kZXYtPmNsb3NlID0gcGMxMTBwYWRfY2xvc2U7CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocGMxMTBwYWRfZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocGMxMTBwYWRfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX2RldjsKIAogCXJldHVybiAwOworCisgZXJyX2ZyZWVfZGV2OgorCWlucHV0X2ZyZWVfZGV2aWNlKHBjMTEwcGFkX2Rldik7CisgZXJyX2ZyZWVfaXJxOgorCWZyZWVfaXJxKHBjMTEwcGFkX2lycSwgTlVMTCk7CisgZXJyX3JlbGVhc2VfcmVnaW9uOgorCXJlbGVhc2VfcmVnaW9uKHBjMTEwcGFkX2lvLCA0KTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwYzExMHBhZF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCA1MmJiMjIyLi5hMGU0YTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTExMDMsNyArMTEwMyw3IEBACiB7CiAJc3RydWN0IHBzbW91c2UgKnBzbW91c2UsICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgcmV0dmFsID0gMCwgZXJyb3IgPSAtRU5PTUVNOwogCiAJbXV0ZXhfbG9jaygmcHNtb3VzZV9tdXRleCk7CiAKQEAgLTExMTksNyArMTExOSw3IEBACiAJcHNtb3VzZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwc21vdXNlKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFwc21vdXNlIHx8ICFpbnB1dF9kZXYpCi0JCWdvdG8gb3V0OworCQlnb3RvIGVycl9mcmVlOwogCiAJcHMyX2luaXQoJnBzbW91c2UtPnBzMmRldiwgc2VyaW8pOwogCUlOSVRfV09SSygmcHNtb3VzZS0+cmVzeW5jX3dvcmssIHBzbW91c2VfcmVzeW5jKTsKQEAgLTExMzAsMTQgKzExMzAsMTMgQEAKIAogCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBwc21vdXNlKTsKIAotCXJldHZhbCA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBvdXQ7CisJZXJyb3IgPSBzZXJpb19vcGVuKHNlcmlvLCBkcnYpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfY2xlYXJfZHJ2ZGF0YTsKIAogCWlmIChwc21vdXNlX3Byb2JlKHBzbW91c2UpIDwgMCkgewotCQlzZXJpb19jbG9zZShzZXJpbyk7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2Nsb3NlX3NlcmlvOwogCX0KIAogCXBzbW91c2UtPnJhdGUgPSBwc21vdXNlX3JhdGU7CkBAIC0xMTUxLDMwICsxMTUwLDQ0IEBACiAJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9DTURfTU9ERSk7CiAJcHNtb3VzZV9pbml0aWFsaXplKHBzbW91c2UpOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHBzbW91c2UtPmRldik7CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocHNtb3VzZS0+ZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX3Byb3RvY29sX2Rpc2Nvbm5lY3Q7CiAKIAlpZiAocGFyZW50ICYmIHBhcmVudC0+cHRfYWN0aXZhdGUpCiAJCXBhcmVudC0+cHRfYWN0aXZhdGUocGFyZW50KTsKIAotCXN5c2ZzX2NyZWF0ZV9ncm91cCgmc2VyaW8tPmRldi5rb2JqLCAmcHNtb3VzZV9hdHRyaWJ1dGVfZ3JvdXApOworCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzZXJpby0+ZGV2LmtvYmosICZwc21vdXNlX2F0dHJpYnV0ZV9ncm91cCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9wdF9kZWFjdGl2YXRlOwogCiAJcHNtb3VzZV9hY3RpdmF0ZShwc21vdXNlKTsKIAotCXJldHZhbCA9IDA7Ci0KLW91dDoKLQlpZiAocmV0dmFsKSB7Ci0JCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQkJa2ZyZWUocHNtb3VzZSk7Ci0JfQotCisgb3V0OgogCS8qIElmIHRoaXMgaXMgYSBwYXNzLXRocm91Z2ggcG9ydCB0aGUgcGFyZW50IG5lZWRzIHRvIGJlIHJlLWFjdGl2YXRlZCAqLwogCWlmIChwYXJlbnQpCiAJCXBzbW91c2VfYWN0aXZhdGUocGFyZW50KTsKIAogCW11dGV4X3VubG9jaygmcHNtb3VzZV9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKKworIGVycl9wdF9kZWFjdGl2YXRlOgorCWlmIChwYXJlbnQgJiYgcGFyZW50LT5wdF9kZWFjdGl2YXRlKQorCQlwYXJlbnQtPnB0X2RlYWN0aXZhdGUocGFyZW50KTsKKyBlcnJfcHJvdG9jb2xfZGlzY29ubmVjdDoKKwlpZiAocHNtb3VzZS0+ZGlzY29ubmVjdCkKKwkJcHNtb3VzZS0+ZGlzY29ubmVjdChwc21vdXNlKTsKKwlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lHTk9SRSk7CisgZXJyX2Nsb3NlX3NlcmlvOgorCXNlcmlvX2Nsb3NlKHNlcmlvKTsKKyBlcnJfY2xlYXJfZHJ2ZGF0YToKKwlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CisgZXJyX2ZyZWU6CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlrZnJlZShwc21vdXNlKTsKKworCXJldHZhbCA9IGVycm9yOworCWdvdG8gb3V0OwogfQogCiAKQEAgLTEzMzcsMTQgKzEzNTAsMTQgQEAKIAogc3RhdGljIHNzaXplX3QgcHNtb3VzZV9zaG93X2ludF9hdHRyKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpvZmZzZXQsIGNoYXIgKmJ1ZikKIHsKLQl1bnNpZ25lZCBsb25nICpmaWVsZCA9ICh1bnNpZ25lZCBsb25nICopKChjaGFyICopcHNtb3VzZSArIChzaXplX3Qpb2Zmc2V0KTsKKwl1bnNpZ25lZCBpbnQgKmZpZWxkID0gKHVuc2lnbmVkIGludCAqKSgoY2hhciAqKXBzbW91c2UgKyAoc2l6ZV90KW9mZnNldCk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsICpmaWVsZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICpmaWVsZCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHBzbW91c2Vfc2V0X2ludF9hdHRyKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpvZmZzZXQsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGxvbmcgKmZpZWxkID0gKHVuc2lnbmVkIGxvbmcgKikoKGNoYXIgKilwc21vdXNlICsgKHNpemVfdClvZmZzZXQpOworCXVuc2lnbmVkIGludCAqZmllbGQgPSAodW5zaWduZWQgaW50ICopKChjaGFyICopcHNtb3VzZSArIChzaXplX3Qpb2Zmc2V0KTsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWNoYXIgKnJlc3Q7CiAKQEAgLTEzNTIsNiArMTM2NSw5IEBACiAJaWYgKCpyZXN0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICgodW5zaWduZWQgaW50KXZhbHVlICE9IHZhbHVlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCSpmaWVsZCA9IHZhbHVlOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtMTM2NiwxNyArMTM4MiwyMCBAQAogewogCXN0cnVjdCBzZXJpbyAqc2VyaW8gPSBwc21vdXNlLT5wczJkZXYuc2VyaW87CiAJc3RydWN0IHBzbW91c2UgKnBhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGlucHV0X2RldiAqbmV3X2RldjsKLQljb25zdCBzdHJ1Y3QgcHNtb3VzZV9wcm90b2NvbCAqcHJvdG87CisJc3RydWN0IGlucHV0X2RldiAqb2xkX2RldiwgKm5ld19kZXY7CisJY29uc3Qgc3RydWN0IHBzbW91c2VfcHJvdG9jb2wgKnByb3RvLCAqb2xkX3Byb3RvOworCWludCBlcnJvcjsKIAlpbnQgcmV0cnkgPSAwOwogCi0JaWYgKCEocHJvdG8gPSBwc21vdXNlX3Byb3RvY29sX2J5X25hbWUoYnVmLCBjb3VudCkpKQorCXByb3RvID0gcHNtb3VzZV9wcm90b2NvbF9ieV9uYW1lKGJ1ZiwgY291bnQpOworCWlmICghcHJvdG8pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHBzbW91c2UtPnR5cGUgPT0gcHJvdG8tPnR5cGUpCiAJCXJldHVybiBjb3VudDsKIAotCWlmICghKG5ld19kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKSkpCisJbmV3X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghbmV3X2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAl3aGlsZSAoc2VyaW8tPmNoaWxkKSB7CkBAIC0xNDA5LDExICsxNDI4LDEzIEBACiAJCQlwYXJlbnQtPnB0X2RlYWN0aXZhdGUocGFyZW50KTsKIAl9CiAKKwlvbGRfZGV2ID0gcHNtb3VzZS0+ZGV2OworCW9sZF9wcm90byA9IHBzbW91c2VfcHJvdG9jb2xfYnlfdHlwZShwc21vdXNlLT50eXBlKTsKKwogCWlmIChwc21vdXNlLT5kaXNjb25uZWN0KQogCQlwc21vdXNlLT5kaXNjb25uZWN0KHBzbW91c2UpOwogCiAJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9JR05PUkUpOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHBzbW91c2UtPmRldik7CiAKIAlwc21vdXNlLT5kZXYgPSBuZXdfZGV2OwogCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfSU5JVElBTElaSU5HKTsKQEAgLTE0MjcsNyArMTQ0OCwyMyBAQAogCXBzbW91c2VfaW5pdGlhbGl6ZShwc21vdXNlKTsKIAlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0NNRF9NT0RFKTsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShwc21vdXNlLT5kZXYpOworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHBzbW91c2UtPmRldik7CisJaWYgKGVycm9yKSB7CisJCWlmIChwc21vdXNlLT5kaXNjb25uZWN0KQorCQkJcHNtb3VzZS0+ZGlzY29ubmVjdChwc21vdXNlKTsKKworCQlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lHTk9SRSk7CisJCWlucHV0X2ZyZWVfZGV2aWNlKG5ld19kZXYpOworCQlwc21vdXNlLT5kZXYgPSBvbGRfZGV2OworCQlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lOSVRJQUxJWklORyk7CisJCXBzbW91c2Vfc3dpdGNoX3Byb3RvY29sKHBzbW91c2UsIG9sZF9wcm90byk7CisJCXBzbW91c2VfaW5pdGlhbGl6ZShwc21vdXNlKTsKKwkJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9DTURfTU9ERSk7CisKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKG9sZF9kZXYpOwogCiAJaWYgKHBhcmVudCAmJiBwYXJlbnQtPnB0X2FjdGl2YXRlKQogCQlwYXJlbnQtPnB0X2FjdGl2YXRlKHBhcmVudCk7CkBAIC0xNDg4LDE1ICsxNTI1LDE5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBzbW91c2VfaW5pdCh2b2lkKQogeworCWludCBlcnI7CisKIAlrcHNtb3VzZWRfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia3BzbW91c2VkIik7CiAJaWYgKCFrcHNtb3VzZWRfd3EpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwc21vdXNlOiBmYWlsZWQgdG8gY3JlYXRlIGtwc21vdXNlZCB3b3JrcXVldWVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnBzbW91c2VfZHJ2KTsKKwllcnIgPSBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnBzbW91c2VfZHJ2KTsKKwlpZiAoZXJyKQorCQlkZXN0cm95X3dvcmtxdWV1ZShrcHNtb3VzZWRfd3EpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHBzbW91c2VfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9ycGNtb3VzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9ycGNtb3VzZS5jCmluZGV4IGVhMDQ2ODUuLmZiZGNmZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcnBjbW91c2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3JwY21vdXNlLmMKQEAgLTY2LDcgKzY2LDEwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHJwY21vdXNlX2luaXQodm9pZCkKIHsKLQlpZiAoIShycGNtb3VzZV9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKSkpCisJaW50IGVycjsKKworCXJwY21vdXNlX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghcnBjbW91c2VfZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXJwY21vdXNlX2Rldi0+bmFtZSA9ICJBY29ybiBSaXNjUEMgTW91c2UiOwpAQCAtODUsMTMgKzg4LDIyIEBACiAKIAlpZiAocmVxdWVzdF9pcnEoSVJRX1ZTWU5DUFVMU0UsIHJwY21vdXNlX2lycSwgSVJRRl9TSEFSRUQsICJycGNtb3VzZSIsIHJwY21vdXNlX2RldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJycGNtb3VzZTogdW5hYmxlIHRvIGFsbG9jYXRlIFZTWU5DIGludGVycnVwdFxuIik7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKHJwY21vdXNlX2Rldik7Ci0JCXJldHVybiAtRUJVU1k7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBlcnJfZnJlZV9kZXY7CiAJfQogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHJwY21vdXNlX2Rldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHJwY21vdXNlX2Rldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAKIAlyZXR1cm4gMDsKKworIGVycl9mcmVlX2lycToKKwlmcmVlX2lycShJUlFfVlNZTkNQVUxTRSwgcnBjbW91c2VfZGV2KTsKKyBlcnJfZnJlZV9kZXY6CisJaW5wdXRfZnJlZV9kZXZpY2UocnBjbW91c2VfZGV2KTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBycGNtb3VzZV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3Nlcm1vdXNlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3Nlcm1vdXNlLmMKaW5kZXggMmEyNzJjNS4uYTg1ZDc0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zZXJtb3VzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VybW91c2UuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJc2VybW91c2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VybW91c2UpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIXNlcm1vdXNlIHx8ICFpbnB1dF9kZXYpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMTsKIAogCXNlcm1vdXNlLT5kZXYgPSBpbnB1dF9kZXY7CiAJc25wcmludGYoc2VybW91c2UtPnBoeXMsIHNpemVvZihzZXJtb3VzZS0+cGh5cyksICIlcy9pbnB1dDAiLCBzZXJpby0+cGh5cyk7CkBAIC0yNzUsMTQgKzI3NSwxNyBAQAogCiAJZXJyID0gc2VyaW9fb3BlbihzZXJpbywgZHJ2KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDI7CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uoc2VybW91c2UtPmRldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHNlcm1vdXNlLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDM7CiAKIAlyZXR1cm4gMDsKIAotIGZhaWw6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworIGZhaWwzOglzZXJpb19jbG9zZShzZXJpbyk7CisgZmFpbDI6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZShzZXJtb3VzZSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTM0OCw4ICszNTEsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzZXJtb3VzZV9pbml0KHZvaWQpCiB7Ci0Jc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZzZXJtb3VzZV9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnNlcm1vdXNlX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzZXJtb3VzZV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCmluZGV4IGFlNTg3MWEuLjlhYjViNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCkBAIC0yOTMsNiArMjkzLDcgQEAKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OwogCXVuc2lnbmVkIGNoYXIgZmlybXdhcmVfaWQ7CiAJdW5zaWduZWQgY2hhciBidXR0b25faW5mbzsKKwlpbnQgZXJyb3I7CiAKIAlpZiAodHJhY2twb2ludF9zdGFydF9wcm90b2NvbChwc21vdXNlLCAmZmlybXdhcmVfaWQpKQogCQlyZXR1cm4gLTE7CkBAIC0zMDUsNyArMzA2LDcgQEAKIAkJYnV0dG9uX2luZm8gPSAwOwogCX0KIAotCXBzbW91c2UtPnByaXZhdGUgPSBwcml2ID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRyYWNrcG9pbnRfZGF0YSksIEdGUF9LRVJORUwpOworCXBzbW91c2UtPnByaXZhdGUgPSBwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRyYWNrcG9pbnRfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKIAkJcmV0dXJuIC0xOwogCkBAIC0zMTgsNyArMzE5LDE0IEBACiAJdHJhY2twb2ludF9kZWZhdWx0cyhwcml2KTsKIAl0cmFja3BvaW50X3N5bmMocHNtb3VzZSk7CiAKLQlzeXNmc19jcmVhdGVfZ3JvdXAoJnBzMmRldi0+c2VyaW8tPmRldi5rb2JqLCAmdHJhY2twb2ludF9hdHRyX2dyb3VwKTsKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcHMyZGV2LT5zZXJpby0+ZGV2LmtvYmosICZ0cmFja3BvaW50X2F0dHJfZ3JvdXApOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJ0cmFja3BvaW50LmM6IGZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlcywgZXJyb3I6ICVkXG4iLAorCQkJZXJyb3IpOworCQlrZnJlZShwcml2KTsKKwkJcmV0dXJuIC0xOworCX0KIAogCXByaW50ayhLRVJOX0lORk8gIklCTSBUcmFja1BvaW50IGZpcm13YXJlOiAweCUwMngsIGJ1dHRvbnM6ICVkLyVkXG4iLAogCQlmaXJtd2FyZV9pZCwgKGJ1dHRvbl9pbmZvICYgMHhmMCkgPj4gNCwgYnV0dG9uX2luZm8gJiAweDBmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS92c3h4eGFhLmMKaW5kZXggZmZkYjUwZS4uYzNkNjRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS92c3h4eGFhLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS92c3h4eGFhLmMKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCW1vdXNlID0ga3phbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgdnN4eHhhYSksIEdGUF9LRVJORUwpOwogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSAoKTsKIAlpZiAoIW1vdXNlIHx8ICFpbnB1dF9kZXYpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMTsKIAogCW1vdXNlLT5kZXYgPSBpbnB1dF9kZXY7CiAJbW91c2UtPnNlcmlvID0gc2VyaW87CkBAIC01MjcsNyArNTI3LDcgQEAKIAogCWVyciA9IHNlcmlvX29wZW4gKHNlcmlvLCBkcnYpOwogCWlmIChlcnIpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMjsKIAogCS8qCiAJICogUmVxdWVzdCBzZWxmdGVzdC4gU3RhbmRhcmQgcGFja2V0IGZvcm1hdCBhbmQgZGlmZmVyZW50aWFsCkBAIC01MzUsMTIgKzUzNSwxNSBAQAogCSAqLwogCXNlcmlvLT53cml0ZSAoc2VyaW8sICdUJyk7IC8qIFRlc3QgKi8KIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZSAoaW5wdXRfZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgKGlucHV0X2Rldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsMzsKIAogCXJldHVybiAwOwogCi0gZmFpbDoJc2VyaW9fc2V0X2RydmRhdGEgKHNlcmlvLCBOVUxMKTsKLQlpbnB1dF9mcmVlX2RldmljZSAoaW5wdXRfZGV2KTsKKyBmYWlsMzoJc2VyaW9fY2xvc2UgKHNlcmlvKTsKKyBmYWlsMjoJc2VyaW9fc2V0X2RydmRhdGEgKHNlcmlvLCBOVUxMKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UgKGlucHV0X2Rldik7CiAJa2ZyZWUgKG1vdXNlKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTcxLDggKzU3NCw3IEBACiBzdGF0aWMgaW50IF9faW5pdAogdnN4eHhhYV9pbml0ICh2b2lkKQogewotCXNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmdnN4eHhhYV9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnZzeHh4YWFfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKaW5kZXggYTIyYTc0YS4uNjY0YmNjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwpAQCAtMTk2LDEyICsxOTYsMTIgQEAKIAlzd2l0Y2ggKGNvZGUpIHsKIAkJY2FzZSBCVE5fVE9VQ0g6CiAJCWNhc2UgQlROXzA6Ci0JCWNhc2UgQlROX0ZPUldBUkQ6CiAJCWNhc2UgQlROX0xFRlQ6CQlpbmRleCA9IDA7IGJyZWFrOwogCQljYXNlIEJUTl9TVFlMVVM6CiAJCWNhc2UgQlROXzE6CiAJCWNhc2UgQlROX1JJR0hUOgkJaW5kZXggPSAxOyBicmVhazsKIAkJY2FzZSBCVE5fMjoKKwkJY2FzZSBCVE5fRk9SV0FSRDoKIAkJY2FzZSBCVE5fU1RZTFVTMjoKIAkJY2FzZSBCVE5fTUlERExFOglpbmRleCA9IDI7IGJyZWFrOwogCQljYXNlIEJUTl8zOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1zcGFyY2lvLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXNwYXJjaW8uaAppbmRleCA1NGFkYmEyLi5kOWNhNTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXNwYXJjaW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXNwYXJjaW8uaApAQCAtMTYsNiArMTYsNyBAQAogI2RlZmluZSBJODA0Ml9NVVhfUEhZU19ERVNDICJzcGFyY3BzMi9zZXJpbyVkIgogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICprYmRfaW9iYXNlOworc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqa2JkX3JlczsKIAogI2RlZmluZSBJODA0Ml9DT01NQU5EX1JFRwkoa2JkX2lvYmFzZSArIDB4NjRVTCkKICNkZWZpbmUgSTgwNDJfREFUQV9SRUcJCShrYmRfaW9iYXNlICsgMHg2MFVMKQpAQCAtNjAsNiArNjEsNyBAQAogCQkJaTgwNDJfa2JkX2lycSA9IGlycTsKIAkJCWtiZF9pb2Jhc2UgPSBvZl9pb3JlbWFwKCZrYmQtPnJlc291cmNlWzBdLAogCQkJCQkJMCwgOCwgImtiZCIpOworCQkJa2JkX3JlcyA9ICZrYmQtPnJlc291cmNlWzBdOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAoZHAtPm5hbWUsIE9CUF9QUzJNU19OQU1FMSkgfHwKIAkJCSAgICFzdHJjbXAoZHAtPm5hbWUsIE9CUF9QUzJNU19OQU1FMikpIHsKIAkJCXN0cnVjdCBvZl9kZXZpY2UgKm1zID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkcCk7CkBAIC03Nyw3ICs3OSw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHNwYXJjX2k4MDQyX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKLQlvZl9pb3VubWFwKGtiZF9pb2Jhc2UsIDgpOworCW9mX2lvdW5tYXAoa2JkX3Jlcywga2JkX2lvYmFzZSwgOCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExOSw3ICsxMjEsNyBAQAogCQlpZiAoaTgwNDJfa2JkX2lycSA9PSAtMSB8fAogCQkgICAgaTgwNDJfYXV4X2lycSA9PSAtMSkgewogCQkJaWYgKGtiZF9pb2Jhc2UpIHsKLQkJCQlvZl9pb3VubWFwKGtiZF9pb2Jhc2UsIDgpOworCQkJCW9mX2lvdW5tYXAoa2JkX3Jlcywga2JkX2lvYmFzZSwgOCk7CiAJCQkJa2JkX2lvYmFzZSA9ICh2b2lkIF9faW9tZW0gKikgTlVMTDsKIAkJCX0KIAkJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggODczOGVkZC4uZDM2YmQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0xMTEsNiArMTExLDEzIEBACiAJCX0sCiAJfSwKIAl7CisJCS5pZGVudCA9ICJGdWppdHN1IExpZmVib29rIFA3MDEwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiMDAwMDAwMDAwMCIpLAorCQl9LAorCX0sCisJewogCQkuaWRlbnQgPSAiRnVqaXRzdSBMaWZlYm9vayBQNTAyMEQiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwppbmRleCA3ZTMxNDFmLi5kZWJlOTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCkBAIC0yNTUsMjUgKzI1NSwxMCBAQAogc3RhdGljIGludCBpODA0Ml9hdXhfd3JpdGUoc3RydWN0IHNlcmlvICpzZXJpbywgdW5zaWduZWQgY2hhciBjKQogewogCXN0cnVjdCBpODA0Ml9wb3J0ICpwb3J0ID0gc2VyaW8tPnBvcnRfZGF0YTsKLQlpbnQgcmV0dmFsOwogCi0vKgotICogU2VuZCB0aGUgYnl0ZSBvdXQuCi0gKi8KLQotCWlmIChwb3J0LT5tdXggPT0gLTEpCi0JCXJldHZhbCA9IGk4MDQyX2NvbW1hbmQoJmMsIEk4MDQyX0NNRF9BVVhfU0VORCk7Ci0JZWxzZQotCQlyZXR2YWwgPSBpODA0Ml9jb21tYW5kKCZjLCBJODA0Ml9DTURfTVVYX1NFTkQgKyBwb3J0LT5tdXgpOwotCi0vKgotICogTWFrZSBzdXJlIHRoZSBpbnRlcnJ1cHQgaGFwcGVucyBhbmQgdGhlIGNoYXJhY3RlciBpcyByZWNlaXZlZCBldmVuCi0gKiBpbiB0aGUgY2FzZSB0aGUgSVJRIGlzbid0IHdpcmVkLCBzbyB0aGF0IHdlIGNhbiByZWNlaXZlIGZ1cnRoZXIKLSAqIGNoYXJhY3RlcnMgbGF0ZXIuCi0gKi8KLQotCWk4MDQyX2ludGVycnVwdCgwLCBOVUxMKTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBpODA0Ml9jb21tYW5kKCZjLCBwb3J0LT5tdXggPT0gLTEgPworCQkJCQlJODA0Ml9DTURfQVVYX1NFTkQgOgorCQkJCQlJODA0Ml9DTURfTVVYX1NFTkQgKyBwb3J0LT5tdXgpOwogfQogCiAvKgpAQCAtMzM3LDIzICszMjIsMjcgQEAKIAkJZGZsID0gMDsKIAkJaWYgKHN0ciAmIEk4MDQyX1NUUl9NVVhFUlIpIHsKIAkJCWRiZygiTVVYIGVycm9yLCBzdGF0dXMgaXMgJTAyeCwgZGF0YSBpcyAlMDJ4Iiwgc3RyLCBkYXRhKTsKLQkJCXN3aXRjaCAoZGF0YSkgewotCQkJCWRlZmF1bHQ6CiAvKgogICogV2hlbiBNVVhFUlIgY29uZGl0aW9uIGlzIHNpZ25hbGxlZCB0aGUgZGF0YSByZWdpc3RlciBjYW4gb25seSBjb250YWluCiAgKiAweGZkLCAweGZlIG9yIDB4ZmYgaWYgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgc3BlYy4gVW5mb3J0dW5hdGVseQotICogaXQgaXMgbm90IGFsd2F5cyB0aGUgY2FzZS4gU29tZSBLQkMganVzdCBnZXQgY29uZnVzZWQgd2hpY2ggcG9ydCB0aGUKLSAqIGRhdGEgY2FtZSBmcm9tIGFuZCBzaWduYWwgZXJyb3IgbGVhdmluZyB0aGUgZGF0YSBpbnRhY3QuIFRoZXkgX2RvIG5vdF8KLSAqIHJldmVydCB0byBsZWdhY3kgbW9kZSAoYWN0dWFsbHkgSSd2ZSBuZXZlciBzZWVuIEtCQyByZXZlcnRpbmcgdG8gbGVnYWN5Ci0gKiBtb2RlIHlldCwgd2hlbiB3ZSBzZWUgb25lIHdlJ2xsIGFkZCBwcm9wZXIgaGFuZGxpbmcpLgotICogQW55d2F5LCB3ZSB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkYXRhIGNhbWUgZnJvbSB0aGUgc2FtZSBzZXJpbyBsYXN0IGJ5dGUKKyAqIGl0IGlzIG5vdCBhbHdheXMgdGhlIGNhc2UuIFNvbWUgS0JDcyBhbHNvIHJlcG9ydCAweGZjIHdoZW4gdGhlcmUgaXMKKyAqIG5vdGhpbmcgY29ubmVjdGVkIHRvIHRoZSBwb3J0IHdoaWxlIG90aGVycyBzb21ldGltZXMgZ2V0IGNvbmZ1c2VkIHdoaWNoCisgKiBwb3J0IHRoZSBkYXRhIGNhbWUgZnJvbSBhbmQgc2lnbmFsIGVycm9yIGxlYXZpbmcgdGhlIGRhdGEgaW50YWN0LiBUaGV5CisgKiBfZG8gbm90XyByZXZlcnQgdG8gbGVnYWN5IG1vZGUgKGFjdHVhbGx5IEkndmUgbmV2ZXIgc2VlbiBLQkMgcmV2ZXJ0aW5nCisgKiB0byBsZWdhY3kgbW9kZSB5ZXQsIHdoZW4gd2Ugc2VlIG9uZSB3ZSdsbCBhZGQgcHJvcGVyIGhhbmRsaW5nKS4KKyAqIEFueXdheSwgd2UgcHJvY2VzcyAweGZjLCAweGZkLCAweGZlIGFuZCAweGZmIGFzIHRpbWVvdXRzLCBhbmQgZm9yIHRoZQorICogcmVzdCBhc3N1bWUgdGhhdCB0aGUgZGF0YSBjYW1lIGZyb20gdGhlIHNhbWUgc2VyaW8gbGFzdCBieXRlCiAgKiB3YXMgdHJhbnNtaXR0ZWQgKGlmIHRyYW5zbWlzc2lvbiBoYXBwZW5lZCBub3QgdG9vIGxvbmcgYWdvKS4KICAqLworCisJCQlzd2l0Y2ggKGRhdGEpIHsKKwkJCQlkZWZhdWx0OgogCQkJCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgbGFzdF90cmFuc21pdCArIEhaLzEwKSkgewogCQkJCQkJc3RyID0gbGFzdF9zdHI7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCQkvKiBmYWxsIHRocm91Z2ggLSByZXBvcnQgdGltZW91dCAqLworCQkJCWNhc2UgMHhmYzoKIAkJCQljYXNlIDB4ZmQ6CiAJCQkJY2FzZSAweGZlOiBkZmwgPSBTRVJJT19USU1FT1VUOyBkYXRhID0gMHhmZTsgYnJlYWs7CiAJCQkJY2FzZSAweGZmOiBkZmwgPSBTRVJJT19QQVJJVFk7ICBkYXRhID0gMHhmZTsgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKaW5kZXggNWYxZDQwMy4uZjBjZTgyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtNDUsOCArNDUsNyBAQAogRVhQT1JUX1NZTUJPTChfX3NlcmlvX3JlZ2lzdGVyX3BvcnQpOwogRVhQT1JUX1NZTUJPTChzZXJpb191bnJlZ2lzdGVyX3BvcnQpOwogRVhQT1JUX1NZTUJPTChzZXJpb191bnJlZ2lzdGVyX2NoaWxkX3BvcnQpOwotRVhQT1JUX1NZTUJPTChfX3NlcmlvX3VucmVnaXN0ZXJfcG9ydF9kZWxheWVkKTsKLUVYUE9SVF9TWU1CT0woX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIpOworRVhQT1JUX1NZTUJPTChzZXJpb19yZWdpc3Rlcl9kcml2ZXIpOwogRVhQT1JUX1NZTUJPTChzZXJpb191bnJlZ2lzdGVyX2RyaXZlcik7CiBFWFBPUlRfU1lNQk9MKHNlcmlvX29wZW4pOwogRVhQT1JUX1NZTUJPTChzZXJpb19jbG9zZSk7CkBAIC02MywxMSArNjIsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBidXNfdHlwZSBzZXJpb19idXM7CiAKLXN0YXRpYyB2b2lkIHNlcmlvX2FkZF9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KTsKIHN0YXRpYyB2b2lkIHNlcmlvX2FkZF9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pOwotc3RhdGljIHZvaWQgc2VyaW9fZGVzdHJveV9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pOwogc3RhdGljIHZvaWQgc2VyaW9fcmVjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7CiBzdGF0aWMgdm9pZCBzZXJpb19kaXNjb25uZWN0X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7CitzdGF0aWMgdm9pZCBzZXJpb19hdHRhY2hfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydik7CiAKIHN0YXRpYyBpbnQgc2VyaW9fY29ubmVjdF9kcml2ZXIoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KQogewpAQCAtMTcxLDExICsxNjksMTAgQEAKICAqLwogCiBlbnVtIHNlcmlvX2V2ZW50X3R5cGUgewotCVNFUklPX1JFU0NBTiwKLQlTRVJJT19SRUNPTk5FQ1QsCisJU0VSSU9fUkVTQ0FOX1BPUlQsCisJU0VSSU9fUkVDT05ORUNUX1BPUlQsCiAJU0VSSU9fUkVHSVNURVJfUE9SVCwKLQlTRVJJT19VTlJFR0lTVEVSX1BPUlQsCi0JU0VSSU9fUkVHSVNURVJfRFJJVkVSLAorCVNFUklPX0FUVEFDSF9EUklWRVIsCiB9OwogCiBzdHJ1Y3Qgc2VyaW9fZXZlbnQgewpAQCAtMTkwLDExICsxODcsMTIgQEAKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChzZXJpb193YWl0KTsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNlcmlvX3Rhc2s7CiAKLXN0YXRpYyB2b2lkIHNlcmlvX3F1ZXVlX2V2ZW50KHZvaWQgKm9iamVjdCwgc3RydWN0IG1vZHVsZSAqb3duZXIsCi0JCQkgICAgICBlbnVtIHNlcmlvX2V2ZW50X3R5cGUgZXZlbnRfdHlwZSkKK3N0YXRpYyBpbnQgc2VyaW9fcXVldWVfZXZlbnQodm9pZCAqb2JqZWN0LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCSAgICAgZW51bSBzZXJpb19ldmVudF90eXBlIGV2ZW50X3R5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmV2ZW50OworCWludCByZXR2YWwgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlcmlvX2V2ZW50X2xvY2ssIGZsYWdzKTsKIApAQCAtMjEzLDI0ICsyMTEsMzQgQEAKIAkJfQogCX0KIAotCWlmICgoZXZlbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW9fZXZlbnQpLCBHRlBfQVRPTUlDKSkpIHsKLQkJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInNlcmlvOiBDYW4ndCBnZXQgbW9kdWxlIHJlZmVyZW5jZSwgZHJvcHBpbmcgZXZlbnQgJWRcbiIsIGV2ZW50X3R5cGUpOwotCQkJa2ZyZWUoZXZlbnQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlldmVudC0+dHlwZSA9IGV2ZW50X3R5cGU7Ci0JCWV2ZW50LT5vYmplY3QgPSBvYmplY3Q7Ci0JCWV2ZW50LT5vd25lciA9IG93bmVyOwotCi0JCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ub2RlLCAmc2VyaW9fZXZlbnRfbGlzdCk7Ci0JCXdha2VfdXAoJnNlcmlvX3dhaXQpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VyaW86IE5vdCBlbm91Z2ggbWVtb3J5IHRvIHF1ZXVlIGV2ZW50ICVkXG4iLCBldmVudF90eXBlKTsKKwlldmVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpb19ldmVudCksIEdGUF9BVE9NSUMpOworCWlmICghZXZlbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2VyaW86IE5vdCBlbm91Z2ggbWVtb3J5IHRvIHF1ZXVlIGV2ZW50ICVkXG4iLAorCQkJZXZlbnRfdHlwZSk7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OwogCX0KKworCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJzZXJpbzogQ2FuJ3QgZ2V0IG1vZHVsZSByZWZlcmVuY2UsIGRyb3BwaW5nIGV2ZW50ICVkXG4iLAorCQkJZXZlbnRfdHlwZSk7CisJCWtmcmVlKGV2ZW50KTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZXZlbnQtPnR5cGUgPSBldmVudF90eXBlOworCWV2ZW50LT5vYmplY3QgPSBvYmplY3Q7CisJZXZlbnQtPm93bmVyID0gb3duZXI7CisKKwlsaXN0X2FkZF90YWlsKCZldmVudC0+bm9kZSwgJnNlcmlvX2V2ZW50X2xpc3QpOworCXdha2VfdXAoJnNlcmlvX3dhaXQpOworCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VyaW9fZXZlbnRfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIHNlcmlvX2ZyZWVfZXZlbnQoc3RydWN0IHNlcmlvX2V2ZW50ICpldmVudCkKQEAgLTMwOCwyMiArMzE2LDE3IEBACiAJCQkJc2VyaW9fYWRkX3BvcnQoZXZlbnQtPm9iamVjdCk7CiAJCQkJYnJlYWs7CiAKLQkJCWNhc2UgU0VSSU9fVU5SRUdJU1RFUl9QT1JUOgotCQkJCXNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChldmVudC0+b2JqZWN0KTsKLQkJCQlzZXJpb19kZXN0cm95X3BvcnQoZXZlbnQtPm9iamVjdCk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgU0VSSU9fUkVDT05ORUNUOgorCQkJY2FzZSBTRVJJT19SRUNPTk5FQ1RfUE9SVDoKIAkJCQlzZXJpb19yZWNvbm5lY3RfcG9ydChldmVudC0+b2JqZWN0KTsKIAkJCQlicmVhazsKIAotCQkJY2FzZSBTRVJJT19SRVNDQU46CisJCQljYXNlIFNFUklPX1JFU0NBTl9QT1JUOgogCQkJCXNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChldmVudC0+b2JqZWN0KTsKIAkJCQlzZXJpb19maW5kX2RyaXZlcihldmVudC0+b2JqZWN0KTsKIAkJCQlicmVhazsKIAotCQkJY2FzZSBTRVJJT19SRUdJU1RFUl9EUklWRVI6Ci0JCQkJc2VyaW9fYWRkX2RyaXZlcihldmVudC0+b2JqZWN0KTsKKwkJCWNhc2UgU0VSSU9fQVRUQUNIX0RSSVZFUjoKKwkJCQlzZXJpb19hdHRhY2hfZHJpdmVyKGV2ZW50LT5vYmplY3QpOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgpAQCAtNjc1LDEyICs2NzgsMTIgQEAKIAogdm9pZCBzZXJpb19yZXNjYW4oc3RydWN0IHNlcmlvICpzZXJpbykKIHsKLQlzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgTlVMTCwgU0VSSU9fUkVTQ0FOKTsKKwlzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgTlVMTCwgU0VSSU9fUkVTQ0FOX1BPUlQpOwogfQogCiB2b2lkIHNlcmlvX3JlY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewotCXNlcmlvX3F1ZXVlX2V2ZW50KHNlcmlvLCBOVUxMLCBTRVJJT19SRUNPTk5FQ1QpOworCXNlcmlvX3F1ZXVlX2V2ZW50KHNlcmlvLCBOVUxMLCBTRVJJT19SRUNPTk5FQ1RfUE9SVCk7CiB9CiAKIC8qCkBAIC03MTcsMTYgKzcyMCw2IEBACiAJbXV0ZXhfdW5sb2NrKCZzZXJpb19tdXRleCk7CiB9CiAKLS8qCi0gKiBTdWJtaXRzIHJlZ2lzdGVyIHJlcXVlc3QgdG8ga3NlcmlvZCBmb3Igc3Vic2VxdWVudCBleGVjdXRpb24uCi0gKiBDYW4gYmUgdXNlZCB3aGVuIGl0IGlzIG5vdCBvYnZpb3VzIHdoZXRoZXIgdGhlIHNlcmlvX211dGV4IGlzCi0gKiB0YWtlbiBvciBub3QgYW5kIHdoZW4gZGVsYXllZCBleGVjdXRpb24gaXMgZmVhc2libGUuCi0gKi8KLXZvaWQgX19zZXJpb191bnJlZ2lzdGVyX3BvcnRfZGVsYXllZChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKLXsKLQlzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgb3duZXIsIFNFUklPX1VOUkVHSVNURVJfUE9SVCk7Ci19Ci0KIAogLyoKICAqIFNlcmlvIGRyaXZlciBvcGVyYXRpb25zCkBAIC03ODUsMjggKzc3OCw1MiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGJ1c190eXBlIHNlcmlvX2J1cyA9IHsKLQkubmFtZSA9CSJzZXJpbyIsCi0JLnByb2JlID0gc2VyaW9fZHJpdmVyX3Byb2JlLAotCS5yZW1vdmUgPSBzZXJpb19kcml2ZXJfcmVtb3ZlLAotfTsKLQotc3RhdGljIHZvaWQgc2VyaW9fYWRkX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpCitzdGF0aWMgdm9pZCBzZXJpb19hdHRhY2hfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydikKIHsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOworCWVycm9yID0gZHJpdmVyX2F0dGFjaCgmZHJ2LT5kcml2ZXIpOwogCWlmIChlcnJvcikKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkic2VyaW86IGRyaXZlcl9yZWdpc3RlcigpIGZhaWxlZCBmb3IgJXMsIGVycm9yOiAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJInNlcmlvOiBkcml2ZXJfYXR0YWNoKCkgZmFpbGVkIGZvciAlcyB3aXRoIGVycm9yICVkXG4iLAogCQkJZHJ2LT5kcml2ZXIubmFtZSwgZXJyb3IpOwogfQogCi12b2lkIF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpCitpbnQgc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydikKIHsKKwlpbnQgbWFudWFsX2JpbmQgPSBkcnYtPm1hbnVhbF9iaW5kOworCWludCBlcnJvcjsKKwogCWRydi0+ZHJpdmVyLmJ1cyA9ICZzZXJpb19idXM7CiAKLQlzZXJpb19xdWV1ZV9ldmVudChkcnYsIG93bmVyLCBTRVJJT19SRUdJU1RFUl9EUklWRVIpOworCS8qCisJICogVGVtcG9yYXJpbHkgZGlzYWJsZSBhdXRvbWF0aWMgYmluZGluZyBiZWNhdXNlIHByb2JpbmcKKwkgKiB0YWtlcyBsb25nIHRpbWUgYW5kIHdlIGFyZSBiZXR0ZXIgb2ZmIGRvaW5nIGl0IGluIGtzZXJpb2QKKwkgKi8KKwlkcnYtPm1hbnVhbF9iaW5kID0gMTsKKworCWVycm9yID0gZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJInNlcmlvOiBkcml2ZXJfcmVnaXN0ZXIoKSBmYWlsZWQgZm9yICVzLCBlcnJvcjogJWRcbiIsCisJCQlkcnYtPmRyaXZlci5uYW1lLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKgorCSAqIFJlc3RvcmUgb3JpZ2luYWwgYmluZCBtb2RlIGFuZCBsZXQga3NlcmlvZCBiaW5kIHRoZQorCSAqIGRyaXZlciB0byBmcmVlIHBvcnRzCisJICovCisJaWYgKCFtYW51YWxfYmluZCkgeworCQlkcnYtPm1hbnVhbF9iaW5kID0gMDsKKwkJZXJyb3IgPSBzZXJpb19xdWV1ZV9ldmVudChkcnYsIE5VTEwsIFNFUklPX0FUVEFDSF9EUklWRVIpOworCQlpZiAoZXJyb3IpIHsKKwkJCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBzZXJpb191bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpCkBAIC05NDcsMTUgKzk2NCwyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgc2VyaW9fYnVzID0geworCS5uYW1lCQk9ICJzZXJpbyIsCisJLmRldl9hdHRycwk9IHNlcmlvX2RldmljZV9hdHRycywKKwkuZHJ2X2F0dHJzCT0gc2VyaW9fZHJpdmVyX2F0dHJzLAorCS5tYXRjaAkJPSBzZXJpb19idXNfbWF0Y2gsCisJLnVldmVudAkJPSBzZXJpb191ZXZlbnQsCisJLnByb2JlCQk9IHNlcmlvX2RyaXZlcl9wcm9iZSwKKwkucmVtb3ZlCQk9IHNlcmlvX2RyaXZlcl9yZW1vdmUsCisJLnJlc3VtZQkJPSBzZXJpb19yZXN1bWUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzZXJpb19pbml0KHZvaWQpCiB7CiAJaW50IGVycm9yOwogCi0Jc2VyaW9fYnVzLmRldl9hdHRycyA9IHNlcmlvX2RldmljZV9hdHRyczsKLQlzZXJpb19idXMuZHJ2X2F0dHJzID0gc2VyaW9fZHJpdmVyX2F0dHJzOwotCXNlcmlvX2J1cy5tYXRjaCA9IHNlcmlvX2J1c19tYXRjaDsKLQlzZXJpb19idXMudWV2ZW50ID0gc2VyaW9fdWV2ZW50OwotCXNlcmlvX2J1cy5yZXN1bWUgPSBzZXJpb19yZXN1bWU7CiAJZXJyb3IgPSBidXNfcmVnaXN0ZXIoJnNlcmlvX2J1cyk7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic2VyaW86IGZhaWxlZCB0byByZWdpc3RlciBzZXJpbyBidXMsIGVycm9yOiAlZFxuIiwgZXJyb3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKaW5kZXggN2M4ZDAzOS4uMDg4ZWJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCkBAIC0zODksOCArMzg5LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2VyaW9fcmF3X2luaXQodm9pZCkKIHsKLQlzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnNlcmlvX3Jhd19kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnNlcmlvX3Jhd19kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2VyaW9fcmF3X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwppbmRleCA5NDE4YmJlLi42YjQ2YzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCkBAIC0xNDQsNCArMTQ0LDE5IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0b3VjaHdpbi4KIAorY29uZmlnIFRPVUNIU0NSRUVOX1VDQjE0MDAKKwl0cmlzdGF0ZSAiUGhpbGlwcyBVQ0IxNDAwIHRvdWNoc2NyZWVuIgorCXNlbGVjdCBBQzk3X0JVUworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBVQ0IxNDAwIHRvdWNoc2NyZWVuIGludGVyZmFjZS4KKwkgIFRoZSBVQ0IxNDAwIGlzIGFuIEFDOTcgYXVkaW8gY29kZWMuICBUaGUgdG91Y2hzY3JlZW4gaW50ZXJmYWNlCisJICB3aWxsIGJlIGluaXRpYWxpemVkIG9ubHkgYWZ0ZXIgdGhlIEFMU0Egc3Vic3lzdGVtIGhhcyBiZWVuCisJICBicm91Z2h0IHVwIGFuZCB0aGUgVUNCMTQwMCBkZXRlY3RlZC4gIFlvdSB0aGVyZWZvcmUgaGF2ZSB0bworCSAgY29uZmlndXJlIEFMU0Egc3VwcG9ydCBhcyB3ZWxsIChlaXRoZXIgYnVpbHQtaW4gb3IgbW9kdWxhciwKKwkgIGluZGVwZW5kZW50bHkgb2Ygd2hldGhlciB0aGlzIGRyaXZlciBpcyBpdHNlbGYgYnVpbHQtaW4gb3IKKwkgIG1vZHVsYXIpIGZvciB0aGlzIGRyaXZlciB0byB3b3JrLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1Y2IxNDAwX3RzLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vTWFrZWZpbGUKaW5kZXggMWFiYjhmMS4uMzBlNmUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlCkBAIC0xNSwzICsxNSw0IEBACiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQpCSs9IHBlbm1vdW50Lm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUKQkrPSB0b3VjaHJpZ2h0Lm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTikJKz0gdG91Y2h3aW4ubworb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDApCSs9IHVjYjE0MDBfdHMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCAwNTE3YzczLi5jNjE2NGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtNzYsNiArNzYsNyBAQAogCWNoYXIJCQlwaHlzWzMyXTsKIAogCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CisJc3RydWN0IGF0dHJpYnV0ZV9ncm91cAkqYXR0cl9ncm91cDsKIAl1MTYJCQltb2RlbDsKIAl1MTYJCQl2cmVmX2RlbGF5X3VzZWNzOwogCXUxNgkJCXhfcGxhdGVfb2htczsKQEAgLTMxNyw2ICszMTgsNDggQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGRpc2FibGUsIDA2NjQsIGFkczc4NDZfZGlzYWJsZV9zaG93LCBhZHM3ODQ2X2Rpc2FibGVfc3RvcmUpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRzNzg0Nl9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3RlbXAwLmF0dHIsCisJJmRldl9hdHRyX3RlbXAxLmF0dHIsCisJJmRldl9hdHRyX3ZiYXR0LmF0dHIsCisJJmRldl9hdHRyX3ZhdXguYXR0ciwKKwkmZGV2X2F0dHJfcGVuX2Rvd24uYXR0ciwKKwkmZGV2X2F0dHJfZGlzYWJsZS5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHM3ODQ2X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gYWRzNzg0Nl9hdHRyaWJ1dGVzLAorfTsKKworLyoKKyAqIGFkczc4NDMvNzg0NSBkb24ndCBoYXZlIHRlbXBlcmF0dXJlIHNlbnNvcnMsIGFuZAorICogdXNlIHRoZSBvdGhlciBzZW5zb3JzIGEgYml0IGRpZmZlcmVudGx5IHRvbworICovCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHM3ODQzX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfdmJhdHQuYXR0ciwKKwkmZGV2X2F0dHJfdmF1eC5hdHRyLAorCSZkZXZfYXR0cl9wZW5fZG93bi5hdHRyLAorCSZkZXZfYXR0cl9kaXNhYmxlLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkczc4NDNfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBhZHM3ODQzX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRzNzg0NV9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3ZhdXguYXR0ciwKKwkmZGV2X2F0dHJfcGVuX2Rvd24uYXR0ciwKKwkmZGV2X2F0dHJfZGlzYWJsZS5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHM3ODQ1X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gYWRzNzg0NV9hdHRyaWJ1dGVzLAorfTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCkBAIC03ODgsMzggKzgzMSwzMCBAQAogCSh2b2lkKSBhZHM3ODQ2X3JlYWQxMl9zZXIoJnNwaS0+ZGV2LAogCQkJICBSRUFEXzEyQklUX1NFUih2YXV4KSB8IEFEU19QRDEwX0FMTF9PTik7CiAKLQkvKiBhZHM3ODQzLzc4NDUgZG9uJ3QgaGF2ZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLCBhbmQKLQkgKiB1c2UgdGhlIG90aGVyIHNlbnNvcnMgYSBiaXQgZGlmZmVyZW50bHkgdG9vCi0JICovCi0JaWYgKHRzLT5tb2RlbCA9PSA3ODQ2KSB7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMSk7CisJc3dpdGNoICh0cy0+bW9kZWwpIHsKKwljYXNlIDc4NDY6CisJCXRzLT5hdHRyX2dyb3VwID0gJmFkczc4NDZfYXR0cl9ncm91cDsKKwkJYnJlYWs7CisJY2FzZSA3ODQ1OgorCQl0cy0+YXR0cl9ncm91cCA9ICZhZHM3ODQ1X2F0dHJfZ3JvdXA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRzLT5hdHRyX2dyb3VwID0gJmFkczc4NDNfYXR0cl9ncm91cDsKKwkJYnJlYWs7CiAJfQotCWlmICh0cy0+bW9kZWwgIT0gNzg0NSkKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3ZiYXR0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdmF1eCk7Ci0KLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfcGVuX2Rvd24pOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX2Rpc2FibGUpOworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc3BpLT5kZXYua29iaiwgdHMtPmF0dHJfZ3JvdXApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CiAJaWYgKGVycikKLQkJZ290byBlcnJfcmVtb3ZlX2F0dHI7CisJCWdvdG8gZXJyX3JlbW92ZV9hdHRyX2dyb3VwOwogCiAJcmV0dXJuIDA7CiAKLSBlcnJfcmVtb3ZlX2F0dHI6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX2Rpc2FibGUpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9wZW5fZG93bik7Ci0JaWYgKHRzLT5tb2RlbCA9PSA3ODQ2KSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMSk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMCk7Ci0JfQotCWlmICh0cy0+bW9kZWwgIT0gNzg0NSkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3ZiYXR0KTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdmF1eCk7Ci0KKyBlcnJfcmVtb3ZlX2F0dHJfZ3JvdXA6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzcGktPmRldi5rb2JqLCB0cy0+YXR0cl9ncm91cCk7CisgZXJyX2ZyZWVfaXJxOgogCWZyZWVfaXJxKHNwaS0+aXJxLCB0cyk7CiAgZXJyX2ZyZWVfbWVtOgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CkBAIC04MzUsMTUgKzg3MCw3IEBACiAKIAlhZHM3ODQ2X3N1c3BlbmQoc3BpLCBQTVNHX1NVU1BFTkQpOwogCi0JZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX2Rpc2FibGUpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9wZW5fZG93bik7Ci0JaWYgKHRzLT5tb2RlbCA9PSA3ODQ2KSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMSk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl90ZW1wMCk7Ci0JfQotCWlmICh0cy0+bW9kZWwgIT0gNzg0NSkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX3ZiYXR0KTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfdmF1eCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzcGktPmRldi5rb2JqLCB0cy0+YXR0cl9ncm91cCk7CiAKIAlmcmVlX2lycSh0cy0+c3BpLT5pcnEsIHRzKTsKIAkvKiBzdXNwZW5kIGxlZnQgdGhlIElSUSBkaXNhYmxlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCmluZGV4IDY2MTIxZjYuLmUyOTQ1NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKQEAgLTE3NSwxNyArMTc1LDE5IEBACiAKIHN0YXRpYyB2b2lkIG5ld19kYXRhKHN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMpCiB7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gY29yZ2lfdHMtPmlucHV0OworCiAJaWYgKGNvcmdpX3RzLT5wb3dlcl9tb2RlICE9IFBXUl9NT0RFX0FDVElWRSkKIAkJcmV0dXJuOwogCiAJaWYgKCFjb3JnaV90cy0+dGMucHJlc3N1cmUgJiYgY29yZ2lfdHMtPnBlbmRvd24gPT0gMCkKIAkJcmV0dXJuOwogCi0JaW5wdXRfcmVwb3J0X2Ficyhjb3JnaV90cy0+aW5wdXQsIEFCU19YLCBjb3JnaV90cy0+dGMueCk7Ci0JaW5wdXRfcmVwb3J0X2Ficyhjb3JnaV90cy0+aW5wdXQsIEFCU19ZLCBjb3JnaV90cy0+dGMueSk7Ci0JaW5wdXRfcmVwb3J0X2Ficyhjb3JnaV90cy0+aW5wdXQsIEFCU19QUkVTU1VSRSwgY29yZ2lfdHMtPnRjLnByZXNzdXJlKTsKLQlpbnB1dF9yZXBvcnRfa2V5KGNvcmdpX3RzLT5pbnB1dCwgQlROX1RPVUNILCAoY29yZ2lfdHMtPnBlbmRvd24gIT0gMCkpOwotCWlucHV0X3N5bmMoY29yZ2lfdHMtPmlucHV0KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIGNvcmdpX3RzLT50Yy54KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGNvcmdpX3RzLT50Yy55KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBjb3JnaV90cy0+dGMucHJlc3N1cmUpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9VQ0gsIGNvcmdpX3RzLT5wZW5kb3duKTsKKwlpbnB1dF9zeW5jKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHRzX2ludGVycnVwdF9tYWluKHN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMsIGludCBpc1RpbWVyKQpAQCAtMjE5LDEyICsyMjEsMTQgQEAKIHN0YXRpYyB2b2lkIGNvcmdpX3RzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpdHNfZGF0YSA9IChzdHJ1Y3QgY29yZ2lfdHMgKikgZGF0YTsKKwogCXRzX2ludGVycnVwdF9tYWluKGNvcmdpdHNfZGF0YSwgMSk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB0c19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBjb3JnaV90cyAqY29yZ2l0c19kYXRhID0gZGV2X2lkOworCiAJdHNfaW50ZXJydXB0X21haW4oY29yZ2l0c19kYXRhLCAwKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0yNzIsNyArMjc2LDcgQEAKIAljb3JnaV90cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb3JnaV90cyksIEdGUF9LRVJORUwpOwogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghY29yZ2lfdHMgfHwgIWlucHV0X2RldikKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwxOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29yZ2lfdHMpOwogCkBAIC0yODEsNyArMjg1LDcgQEAKIAogCWlmIChjb3JnaV90cy0+aXJxX2dwaW8gPCAwKSB7CiAJCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMTsKIAl9CiAKIAljb3JnaV90cy0+aW5wdXQgPSBpbnB1dF9kZXY7CkBAIC0zMTksMTAgKzMyMywxMiBAQAogCiAJaWYgKHJlcXVlc3RfaXJxKGNvcmdpX3RzLT5pcnFfZ3BpbywgdHNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAidHMiLCBjb3JnaV90cykpIHsKIAkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDE7CiAJfQogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNvcmdpX3RzLT5pbnB1dCk7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNvcmdpX3RzLT5pbnB1dCk7CisJaWYgKGVycikKKwkJZ290byBmYWlsMjsKIAogCWNvcmdpX3RzLT5wb3dlcl9tb2RlID0gUFdSX01PREVfQUNUSVZFOwogCkBAIC0zMzEsMTcgKzMzNywxNyBAQAogCiAJcmV0dXJuIDA7CiAKLSBmYWlsOglpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworIGZhaWwyOglmcmVlX2lycShjb3JnaV90cy0+aXJxX2dwaW8sIGNvcmdpX3RzKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZShjb3JnaV90cyk7CiAJcmV0dXJuIGVycjsKLQogfQogCiBzdGF0aWMgaW50IGNvcmdpdHNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGNvcmdpX3RzICpjb3JnaV90cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JZnJlZV9pcnEoY29yZ2lfdHMtPmlycV9ncGlvLCBOVUxMKTsKKwlmcmVlX2lycShjb3JnaV90cy0+aXJxX2dwaW8sIGNvcmdpX3RzKTsKIAlkZWxfdGltZXJfc3luYygmY29yZ2lfdHMtPnRpbWVyKTsKIAljb3JnaV90cy0+bWFjaGluZm8tPnB1dF9oc3luYygpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGNvcmdpX3RzLT5pbnB1dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Vsby5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lbG8uYwppbmRleCA5MTNlMWI3Li45ZDYxY2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Vsby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWxvLmMKQEAgLTM5Nyw4ICszOTcsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBlbG9faW5pdCh2b2lkKQogewotCXNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmZWxvX2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmZWxvX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBlbG9fZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ndW56ZS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ndW56ZS5jCmluZGV4IDgxN2MyMTkuLjkxNTdlYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZ3VuemUuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2d1bnplLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghZ3VuemUgfHwgIWlucHV0X2RldikgewogCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDE7CiAJfQogCiAJZ3VuemUtPnNlcmlvID0gc2VyaW87CkBAIC0xNDYsMTMgKzE0NiwxNyBAQAogCiAJZXJyID0gc2VyaW9fb3BlbihzZXJpbywgZHJ2KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbDI7CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZ3VuemUtPmRldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGd1bnplLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDM7CisKIAlyZXR1cm4gMDsKIAotIGZhaWw6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworIGZhaWwzOglzZXJpb19jbG9zZShzZXJpbyk7CisgZmFpbDI6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKKyBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZShndW56ZSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE5MCw4ICsxOTQsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBndW56ZV9pbml0KHZvaWQpCiB7Ci0Jc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZndW56ZV9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJmd1bnplX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBndW56ZV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMKaW5kZXggZDllNjFlZS4uYzQxMTZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYwpAQCAtNDc4LDggKzQ3OCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGgzNjAwdHNfaW5pdCh2b2lkKQogewotCXNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmaDM2MDB0c19kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJmgzNjAwdHNfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGgzNjAwdHNfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCmluZGV4IDU4ZmNhMzEuLjI0OTA4NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKQEAgLTc2LDM4ICs3Niw0NyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBocDY4MF90c19pbml0KHZvaWQpCiB7CisJaW50IGVycjsKKwogCWhwNjgwX3RzX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaHA2ODBfdHNfZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWhwNjgwX3RzX2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfQUJTKSB8IEJJVChFVl9LRVkpOwotCWhwNjgwX3RzX2Rldi0+YWJzYml0WzBdID0gQklUKEFCU19YKSB8IEJJVChBQlNfWSk7CiAJaHA2ODBfdHNfZGV2LT5rZXliaXRbTE9ORyhCVE5fVE9VQ0gpXSA9IEJJVChCVE5fVE9VQ0gpOwogCi0JaHA2ODBfdHNfZGV2LT5hYnNtaW5bQUJTX1hdID0gSFA2ODBfVFNfQUJTX1hfTUlOOwotCWhwNjgwX3RzX2Rldi0+YWJzbWluW0FCU19ZXSA9IEhQNjgwX1RTX0FCU19ZX01JTjsKLQlocDY4MF90c19kZXYtPmFic21heFtBQlNfWF0gPSBIUDY4MF9UU19BQlNfWF9NQVg7Ci0JaHA2ODBfdHNfZGV2LT5hYnNtYXhbQUJTX1ldID0gSFA2ODBfVFNfQUJTX1lfTUFYOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGhwNjgwX3RzX2RldiwgQUJTX1gsCisJCUhQNjgwX1RTX0FCU19YX01JTiwgSFA2ODBfVFNfQUJTX1hfTUFYLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhocDY4MF90c19kZXYsIEFCU19ZLAorCQlIUDY4MF9UU19BQlNfWV9NSU4sIEhQNjgwX1RTX0FCU19ZX01BWCwgMCwgMCk7CiAKIAlocDY4MF90c19kZXYtPm5hbWUgPSAiSFAgSm9ybmFkYSB0b3VjaHNjcmVlbiI7CiAJaHA2ODBfdHNfZGV2LT5waHlzID0gImhwNjgwX3RzL2lucHV0MCI7CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaHA2ODBfdHNfZGV2KTsKLQogCWlmIChyZXF1ZXN0X2lycShIUDY4MF9UU19JUlEsIGhwNjgwX3RzX2ludGVycnVwdCwKIAkJCUlSUUZfRElTQUJMRUQsIE1PRE5BTUUsIDApIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImhwNjgwX3RvdWNoc2NyZWVuLmM6IENhbid0IGFsbG9jYXRlIGlycSAlZFxuIiwKIAkJICAgICAgIEhQNjgwX1RTX0lSUSk7Ci0JCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGhwNjgwX3RzX2Rldik7Ci0JCXJldHVybiAtRUJVU1k7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBmYWlsMTsKIAl9CiAKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaHA2ODBfdHNfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwyOworCiAJcmV0dXJuIDA7CisKKyBmYWlsMjoJZnJlZV9pcnEoSFA2ODBfVFNfSVJRLCBOVUxMKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZ3b3JrKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworIGZhaWwxOglpbnB1dF9mcmVlX2RldmljZShocDY4MF90c19kZXYpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBocDY4MF90c19leGl0KHZvaWQpCiB7Ci0JZnJlZV9pcnEoSFA2ODBfVFNfSVJRLCAwKTsKKwlmcmVlX2lycShIUDY4MF9UU19JUlEsIE5VTEwpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJndvcmspOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaHA2ODBfdHNfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWs3MTIuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWs3MTIuYwppbmRleCA0Y2JjYWE2Li40NDE0MGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21rNzEyLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tazcxMi5jCkBAIC05NiwxNSArOTYsMTMgQEAKIAkJZ290byBlbmQ7CiAJfQogCi0JaWYgKH5zdGF0dXMgJiBNSzcxMl9TVEFUVVNfVE9VQ0gpCi0JeworCWlmICh+c3RhdHVzICYgTUs3MTJfU1RBVFVTX1RPVUNIKSB7CiAJCWRlYm91bmNlID0gMTsKIAkJaW5wdXRfcmVwb3J0X2tleShtazcxMl9kZXYsIEJUTl9UT1VDSCwgMCk7CiAJCWdvdG8gZW5kOwogCX0KIAotCWlmIChkZWJvdW5jZSkKLQl7CisJaWYgKGRlYm91bmNlKSB7CiAJCWRlYm91bmNlID0gMDsKIAkJZ290byBlbmQ7CiAJfQpAQCAtMTEzLDggKzExMSw3IEBACiAJaW5wdXRfcmVwb3J0X2FicyhtazcxMl9kZXYsIEFCU19YLCBsYXN0X3gpOwogCWlucHV0X3JlcG9ydF9hYnMobWs3MTJfZGV2LCBBQlNfWSwgbGFzdF95KTsKIAotZW5kOgotCisgZW5kOgogCWxhc3RfeCA9IGludyhtazcxMl9pbyArIE1LNzEyX1gpICYgMHgwZmZmOwogCWxhc3RfeSA9IGludyhtazcxMl9pbyArIE1LNzEyX1kpICYgMHgwZmZmOwogCWlucHV0X3N5bmMobWs3MTJfZGV2KTsKQEAgLTE2OSwxMyArMTY2LDE0IEBACiAJICAgIChpbncobWs3MTJfaW8gKyBNSzcxMl9TVEFUVVMpICYgMHhmMzMzKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtazcxMjogZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwxOwogCX0KIAotCWlmICghKG1rNzEyX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpKSkgeworCW1rNzEyX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghbWs3MTJfZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWs3MTI6IG5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKIAkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwxOwogCX0KIAogCW1rNzEyX2Rldi0+bmFtZSA9ICJJQ1MgTWljcm9DbG9jayBNSzcxMiBUb3VjaFNjcmVlbiI7CkBAIC0xOTYsMTMgKzE5NCwxNyBAQAogCWlmIChyZXF1ZXN0X2lycShtazcxMl9pcnEsIG1rNzEyX2ludGVycnVwdCwgMCwgIm1rNzEyIiwgbWs3MTJfZGV2KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtazcxMjogdW5hYmxlIHRvIGdldCBJUlFcbiIpOwogCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMTsKIAl9CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UobWs3MTJfZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UobWs3MTJfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwyOworCiAJcmV0dXJuIDA7CiAKLSBmYWlsOglpbnB1dF9mcmVlX2RldmljZShtazcxMl9kZXYpOworIGZhaWwyOglmcmVlX2lycShtazcxMl9pcnEsIG1rNzEyX2Rldik7CisgZmFpbDE6CWlucHV0X2ZyZWVfZGV2aWNlKG1rNzEyX2Rldik7CiAJcmVsZWFzZV9yZWdpb24obWs3MTJfaW8sIDgpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL210b3VjaC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tdG91Y2guYwppbmRleCAzYjRjNjE2Li5jM2MyZDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL210b3VjaC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbXRvdWNoLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghbXRvdWNoIHx8ICFpbnB1dF9kZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwxOwogCX0KIAogCW10b3VjaC0+c2VyaW8gPSBzZXJpbzsKQEAgLTE2MCwxNCArMTYwLDE3IEBACiAKIAllcnIgPSBzZXJpb19vcGVuKHNlcmlvLCBkcnYpOwogCWlmIChlcnIpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMjsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShtdG91Y2gtPmRldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKG10b3VjaC0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwzOwogCiAJcmV0dXJuIDA7CiAKLSBmYWlsOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKyBmYWlsMzoJc2VyaW9fY2xvc2Uoc2VyaW8pOworIGZhaWwyOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CisgZmFpbDE6CWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJa2ZyZWUobXRvdWNoKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjA1LDggKzIwOCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG10b3VjaF9pbml0KHZvaWQpCiB7Ci0Jc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZtdG91Y2hfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZtdG91Y2hfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG10b3VjaF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3Blbm1vdW50LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3Blbm1vdW50LmMKaW5kZXggNmM3ZDBjMi4uYmQyNzY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9wZW5tb3VudC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vcGVubW91bnQuYwpAQCAtMTcxLDggKzE3MSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBtX2luaXQodm9pZCkKIHsKLQlzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnBtX2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmcG1fZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHBtX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG91Y2hyaWdodC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90b3VjaHJpZ2h0LmMKaW5kZXggYzc0Zjc0ZS4uMzViYTQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90b3VjaHJpZ2h0LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90b3VjaHJpZ2h0LmMKQEAgLTE4Miw4ICsxODIsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB0cl9pbml0KHZvaWQpCiB7Ci0Jc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZ0cl9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnRyX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0cl9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RvdWNod2luLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RvdWNod2luLmMKaW5kZXggOTkxMTgyMC4uNGRjMDczZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90b3VjaHdpbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG91Y2h3aW4uYwpAQCAtMTg5LDggKzE4OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHR3X2luaXQodm9pZCkKIHsKLQlzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJnR3X2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmdHdfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHR3X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdWNiMTQwMF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91Y2IxNDAwX3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1OGEwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdWNiMTQwMF90cy5jCkBAIC0wLDAgKzEsNTc5IEBACisvKgorICogIFBoaWxpcHMgVUNCMTQwMCB0b3VjaHNjcmVlbiBkcml2ZXIKKyAqCisgKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiAgQ3JlYXRlZDoJU2VwdGVtYmVyIDI1LCAyMDA2CisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB1Y2IxeDAwLSouYyBjb3B5cmlnaHRlZCBieSBSdXNzZWxsIEtpbmcKKyAqIGNvdmVyaW5nIHRoZSBVQ0IxMTAwLCBVQ0IxMjAwIGFuZCBVQ0IxMzAwLi4gIFN1cHBvcnQgZm9yIHRoZSBVQ0IxNDAwIGhhcworICogYmVlbiBtYWRlIHNlcGFyYXRlIGZyb20gdWNiMXgwMC1jb3JlL3VjYjF4MDAtdHMgb24gUnVzc2VsbCdzIHJlcXVlc3QuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKworCisvKgorICogSW50ZXJlc3RpbmcgVUNCMTQwMCBBQy1saW5rIHJlZ2lzdGVycworICovCisKKyNkZWZpbmUgVUNCX0lFX1JJUwkJMHg1ZQorI2RlZmluZSBVQ0JfSUVfRkFMCQkweDYwCisjZGVmaW5lIFVDQl9JRV9TVEFUVVMJCTB4NjIKKyNkZWZpbmUgVUNCX0lFX0NMRUFSCQkweDYyCisjZGVmaW5lIFVDQl9JRV9BREMJCSgxIDw8IDExKQorI2RlZmluZSBVQ0JfSUVfVFNQWAkJKDEgPDwgMTIpCisKKyNkZWZpbmUgVUNCX1RTX0NSCQkweDY0CisjZGVmaW5lIFVDQl9UU19DUl9UU01YX1BPVwkoMSA8PCAwKQorI2RlZmluZSBVQ0JfVFNfQ1JfVFNQWF9QT1cJKDEgPDwgMSkKKyNkZWZpbmUgVUNCX1RTX0NSX1RTTVlfUE9XCSgxIDw8IDIpCisjZGVmaW5lIFVDQl9UU19DUl9UU1BZX1BPVwkoMSA8PCAzKQorI2RlZmluZSBVQ0JfVFNfQ1JfVFNNWF9HTkQJKDEgPDwgNCkKKyNkZWZpbmUgVUNCX1RTX0NSX1RTUFhfR05ECSgxIDw8IDUpCisjZGVmaW5lIFVDQl9UU19DUl9UU01ZX0dORAkoMSA8PCA2KQorI2RlZmluZSBVQ0JfVFNfQ1JfVFNQWV9HTkQJKDEgPDwgNykKKyNkZWZpbmUgVUNCX1RTX0NSX01PREVfSU5UCSgwIDw8IDgpCisjZGVmaW5lIFVDQl9UU19DUl9NT0RFX1BSRVMJKDEgPDwgOCkKKyNkZWZpbmUgVUNCX1RTX0NSX01PREVfUE9TCSgyIDw8IDgpCisjZGVmaW5lIFVDQl9UU19DUl9CSUFTX0VOQQkoMSA8PCAxMSkKKyNkZWZpbmUgVUNCX1RTX0NSX1RTUFhfTE9XCSgxIDw8IDEyKQorI2RlZmluZSBVQ0JfVFNfQ1JfVFNNWF9MT1cJKDEgPDwgMTMpCisKKyNkZWZpbmUgVUNCX0FEQ19DUgkJMHg2NgorI2RlZmluZSBVQ0JfQURDX1NZTkNfRU5BCSgxIDw8IDApCisjZGVmaW5lIFVDQl9BRENfVlJFRkJZUF9DT04JKDEgPDwgMSkKKyNkZWZpbmUgVUNCX0FEQ19JTlBfVFNQWAkoMCA8PCAyKQorI2RlZmluZSBVQ0JfQURDX0lOUF9UU01YCSgxIDw8IDIpCisjZGVmaW5lIFVDQl9BRENfSU5QX1RTUFkJKDIgPDwgMikKKyNkZWZpbmUgVUNCX0FEQ19JTlBfVFNNWQkoMyA8PCAyKQorI2RlZmluZSBVQ0JfQURDX0lOUF9BRDAJCSg0IDw8IDIpCisjZGVmaW5lIFVDQl9BRENfSU5QX0FEMQkJKDUgPDwgMikKKyNkZWZpbmUgVUNCX0FEQ19JTlBfQUQyCQkoNiA8PCAyKQorI2RlZmluZSBVQ0JfQURDX0lOUF9BRDMJCSg3IDw8IDIpCisjZGVmaW5lIFVDQl9BRENfRVhUX1JFRgkJKDEgPDwgNSkKKyNkZWZpbmUgVUNCX0FEQ19TVEFSVAkJKDEgPDwgNykKKyNkZWZpbmUgVUNCX0FEQ19FTkEJCSgxIDw8IDE1KQorCisjZGVmaW5lIFVDQl9BRENfREFUQQkJMHg2OAorI2RlZmluZSBVQ0JfQURDX0RBVF9WQUxJRAkoMSA8PCAxNSkKKyNkZWZpbmUgVUNCX0FEQ19EQVRfVkFMVUUoeCkJKCh4KSAmIDB4M2ZmKQorCisjZGVmaW5lIFVDQl9JRAkJCTB4N2UKKyNkZWZpbmUgVUNCX0lEXzE0MDAgICAgICAgICAgICAgMHg0MzA0CisKKworc3RydWN0IHVjYjE0MDAgeworCWFjOTdfdAkJCSphYzk3OworCXN0cnVjdCBpbnB1dF9kZXYJKnRzX2lkZXY7CisKKwlpbnQJCQlpcnE7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl0c193YWl0OworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdHNfdGFzazsKKworCXVuc2lnbmVkIGludAkJaXJxX3BlbmRpbmc7CS8qIG5vdCBiaXQgZmllbGQgc2hhcmVkICovCisJdW5zaWduZWQgaW50CQl0c19yZXN0YXJ0OjE7CisJdW5zaWduZWQgaW50CQlhZGNzeW5jOjE7Cit9OworCitzdGF0aWMgaW50IGFkY3N5bmM7CisKK3N0YXRpYyBpbmxpbmUgdTE2IHVjYjE0MDBfcmVnX3JlYWQoc3RydWN0IHVjYjE0MDAgKnVjYiwgdTE2IHJlZykKK3sKKwlyZXR1cm4gdWNiLT5hYzk3LT5idXMtPm9wcy0+cmVhZCh1Y2ItPmFjOTcsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1Y2IxNDAwX3JlZ193cml0ZShzdHJ1Y3QgdWNiMTQwMCAqdWNiLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXVjYi0+YWM5Ny0+YnVzLT5vcHMtPndyaXRlKHVjYi0+YWM5NywgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWNiMTQwMF9hZGNfZW5hYmxlKHN0cnVjdCB1Y2IxNDAwICp1Y2IpCit7CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfQURDX0NSLCBVQ0JfQURDX0VOQSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdWNiMTQwMF9hZGNfcmVhZChzdHJ1Y3QgdWNiMTQwMCAqdWNiLCB1MTYgYWRjX2NoYW5uZWwpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlmICh1Y2ItPmFkY3N5bmMpCisJCWFkY19jaGFubmVsIHw9IFVDQl9BRENfU1lOQ19FTkE7CisKKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9BRENfQ1IsIFVDQl9BRENfRU5BIHwgYWRjX2NoYW5uZWwpOworCXVjYjE0MDBfcmVnX3dyaXRlKHVjYiwgVUNCX0FEQ19DUiwgVUNCX0FEQ19FTkEgfCBhZGNfY2hhbm5lbCB8IFVDQl9BRENfU1RBUlQpOworCisJZm9yICg7OykgeworCQl2YWwgPSB1Y2IxNDAwX3JlZ19yZWFkKHVjYiwgVUNCX0FEQ19EQVRBKTsKKwkJaWYgKHZhbCAmIFVDQl9BRENfREFUX1ZBTElEKQorCQkJYnJlYWs7CisJCS8qIHlpZWxkIHRvIG90aGVyIHByb2Nlc3NlcyAqLworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCX0KKworCXJldHVybiBVQ0JfQURDX0RBVF9WQUxVRSh2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWNiMTQwMF9hZGNfZGlzYWJsZShzdHJ1Y3QgdWNiMTQwMCAqdWNiKQoreworCXVjYjE0MDBfcmVnX3dyaXRlKHVjYiwgVUNCX0FEQ19DUiwgMCk7Cit9CisKKy8qIFN3aXRjaCB0byBpbnRlcnJ1cHQgbW9kZS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1Y2IxNDAwX3RzX21vZGVfaW50KHN0cnVjdCB1Y2IxNDAwICp1Y2IpCit7CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfVFNfQ1IsCisJCQlVQ0JfVFNfQ1JfVFNNWF9QT1cgfCBVQ0JfVFNfQ1JfVFNQWF9QT1cgfAorCQkJVUNCX1RTX0NSX1RTTVlfR05EIHwgVUNCX1RTX0NSX1RTUFlfR05EIHwKKwkJCVVDQl9UU19DUl9NT0RFX0lOVCk7Cit9CisKKy8qCisgKiBTd2l0Y2ggdG8gcHJlc3N1cmUgbW9kZSwgYW5kIHJlYWQgcHJlc3N1cmUuICBXZSBkb24ndCBuZWVkIHRvIHdhaXQKKyAqIGhlcmUsIHNpbmNlIGJvdGggcGxhdGVzIGFyZSBiZWluZyBkcml2ZW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVjYjE0MDBfdHNfcmVhZF9wcmVzc3VyZShzdHJ1Y3QgdWNiMTQwMCAqdWNiKQoreworCXVjYjE0MDBfcmVnX3dyaXRlKHVjYiwgVUNCX1RTX0NSLAorCQkJVUNCX1RTX0NSX1RTTVhfUE9XIHwgVUNCX1RTX0NSX1RTUFhfUE9XIHwKKwkJCVVDQl9UU19DUl9UU01ZX0dORCB8IFVDQl9UU19DUl9UU1BZX0dORCB8CisJCQlVQ0JfVFNfQ1JfTU9ERV9QUkVTIHwgVUNCX1RTX0NSX0JJQVNfRU5BKTsKKwlyZXR1cm4gdWNiMTQwMF9hZGNfcmVhZCh1Y2IsIFVDQl9BRENfSU5QX1RTUFkpOworfQorCisvKgorICogU3dpdGNoIHRvIFggcG9zaXRpb24gbW9kZSBhbmQgbWVhc3VyZSBZIHBsYXRlLiAgV2Ugc3dpdGNoIHRoZSBwbGF0ZQorICogY29uZmlndXJhdGlvbiBpbiBwcmVzc3VyZSBtb2RlLCB0aGVuIHN3aXRjaCB0byBwb3NpdGlvbiBtb2RlLiAgVGhpcworICogZ2l2ZXMgYSBmYXN0ZXIgcmVzcG9uc2UgdGltZS4gIEV2ZW4gc28sIHdlIG5lZWQgdG8gd2FpdCBhYm91dCA1NXVzCisgKiBmb3IgdGhpbmdzIHRvIHN0YWJpbGlzZS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWNiMTQwMF90c19yZWFkX3hwb3Moc3RydWN0IHVjYjE0MDAgKnVjYikKK3sKKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9UU19DUiwKKwkJCVVDQl9UU19DUl9UU01YX0dORCB8IFVDQl9UU19DUl9UU1BYX1BPVyB8CisJCQlVQ0JfVFNfQ1JfTU9ERV9QUkVTIHwgVUNCX1RTX0NSX0JJQVNfRU5BKTsKKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9UU19DUiwKKwkJCVVDQl9UU19DUl9UU01YX0dORCB8IFVDQl9UU19DUl9UU1BYX1BPVyB8CisJCQlVQ0JfVFNfQ1JfTU9ERV9QUkVTIHwgVUNCX1RTX0NSX0JJQVNfRU5BKTsKKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9UU19DUiwKKwkJCVVDQl9UU19DUl9UU01YX0dORCB8IFVDQl9UU19DUl9UU1BYX1BPVyB8CisJCQlVQ0JfVFNfQ1JfTU9ERV9QT1MgfCBVQ0JfVFNfQ1JfQklBU19FTkEpOworCisJdWRlbGF5KDU1KTsKKworCXJldHVybiB1Y2IxNDAwX2FkY19yZWFkKHVjYiwgVUNCX0FEQ19JTlBfVFNQWSk7Cit9CisKKy8qCisgKiBTd2l0Y2ggdG8gWSBwb3NpdGlvbiBtb2RlIGFuZCBtZWFzdXJlIFggcGxhdGUuICBXZSBzd2l0Y2ggdGhlIHBsYXRlCisgKiBjb25maWd1cmF0aW9uIGluIHByZXNzdXJlIG1vZGUsIHRoZW4gc3dpdGNoIHRvIHBvc2l0aW9uIG1vZGUuICBUaGlzCisgKiBnaXZlcyBhIGZhc3RlciByZXNwb25zZSB0aW1lLiAgRXZlbiBzbywgd2UgbmVlZCB0byB3YWl0IGFib3V0IDU1dXMKKyAqIGZvciB0aGluZ3MgdG8gc3RhYmlsaXNlLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1Y2IxNDAwX3RzX3JlYWRfeXBvcyhzdHJ1Y3QgdWNiMTQwMCAqdWNiKQoreworCXVjYjE0MDBfcmVnX3dyaXRlKHVjYiwgVUNCX1RTX0NSLAorCQkJVUNCX1RTX0NSX1RTTVlfR05EIHwgVUNCX1RTX0NSX1RTUFlfUE9XIHwKKwkJCVVDQl9UU19DUl9NT0RFX1BSRVMgfCBVQ0JfVFNfQ1JfQklBU19FTkEpOworCXVjYjE0MDBfcmVnX3dyaXRlKHVjYiwgVUNCX1RTX0NSLAorCQkJVUNCX1RTX0NSX1RTTVlfR05EIHwgVUNCX1RTX0NSX1RTUFlfUE9XIHwKKwkJCVVDQl9UU19DUl9NT0RFX1BSRVMgfCBVQ0JfVFNfQ1JfQklBU19FTkEpOworCXVjYjE0MDBfcmVnX3dyaXRlKHVjYiwgVUNCX1RTX0NSLAorCQkJVUNCX1RTX0NSX1RTTVlfR05EIHwgVUNCX1RTX0NSX1RTUFlfUE9XIHwKKwkJCVVDQl9UU19DUl9NT0RFX1BPUyB8IFVDQl9UU19DUl9CSUFTX0VOQSk7CisKKwl1ZGVsYXkoNTUpOworCisJcmV0dXJuIHVjYjE0MDBfYWRjX3JlYWQodWNiLCBVQ0JfQURDX0lOUF9UU1BYKTsKK30KKworLyoKKyAqIFN3aXRjaCB0byBYIHBsYXRlIHJlc2lzdGFuY2UgbW9kZS4gIFNldCBNWCB0byBncm91bmQsIFBYIHRvCisgKiBzdXBwbHkuICBNZWFzdXJlIGN1cnJlbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVjYjE0MDBfdHNfcmVhZF94cmVzKHN0cnVjdCB1Y2IxNDAwICp1Y2IpCit7CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfVFNfQ1IsCisJCQlVQ0JfVFNfQ1JfVFNNWF9HTkQgfCBVQ0JfVFNfQ1JfVFNQWF9QT1cgfAorCQkJVUNCX1RTX0NSX01PREVfUFJFUyB8IFVDQl9UU19DUl9CSUFTX0VOQSk7CisJcmV0dXJuIHVjYjE0MDBfYWRjX3JlYWQodWNiLCAwKTsKK30KKworLyoKKyAqIFN3aXRjaCB0byBZIHBsYXRlIHJlc2lzdGFuY2UgbW9kZS4gIFNldCBNWSB0byBncm91bmQsIFBZIHRvCisgKiBzdXBwbHkuICBNZWFzdXJlIGN1cnJlbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVjYjE0MDBfdHNfcmVhZF95cmVzKHN0cnVjdCB1Y2IxNDAwICp1Y2IpCit7CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfVFNfQ1IsCisJCQlVQ0JfVFNfQ1JfVFNNWV9HTkQgfCBVQ0JfVFNfQ1JfVFNQWV9QT1cgfAorCQkJVUNCX1RTX0NSX01PREVfUFJFUyB8IFVDQl9UU19DUl9CSUFTX0VOQSk7CisJcmV0dXJuIHVjYjE0MDBfYWRjX3JlYWQodWNiLCAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdWNiMTQwMF90c19wZW5fZG93bihzdHJ1Y3QgdWNiMTQwMCAqdWNiKQoreworCXVuc2lnbmVkIHNob3J0IHZhbCA9IHVjYjE0MDBfcmVnX3JlYWQodWNiLCBVQ0JfVFNfQ1IpOworCXJldHVybiAodmFsICYgKFVDQl9UU19DUl9UU1BYX0xPVyB8IFVDQl9UU19DUl9UU01YX0xPVykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWNiMTQwMF90c19pcnFfZW5hYmxlKHN0cnVjdCB1Y2IxNDAwICp1Y2IpCit7CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfSUVfQ0xFQVIsIFVDQl9JRV9UU1BYKTsKKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9JRV9DTEVBUiwgMCk7CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfSUVfRkFMLCBVQ0JfSUVfVFNQWCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1Y2IxNDAwX3RzX2lycV9kaXNhYmxlKHN0cnVjdCB1Y2IxNDAwICp1Y2IpCit7CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfSUVfRkFMLCAwKTsKK30KKworc3RhdGljIHZvaWQgdWNiMTQwMF90c19ldnRfYWRkKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsIHUxNiBwcmVzc3VyZSwgdTE2IHgsIHUxNiB5KQoreworCWlucHV0X3JlcG9ydF9hYnMoaWRldiwgQUJTX1gsIHgpOworCWlucHV0X3JlcG9ydF9hYnMoaWRldiwgQUJTX1ksIHkpOworCWlucHV0X3JlcG9ydF9hYnMoaWRldiwgQUJTX1BSRVNTVVJFLCBwcmVzc3VyZSk7CisJaW5wdXRfc3luYyhpZGV2KTsKK30KKworc3RhdGljIHZvaWQgdWNiMTQwMF90c19ldmVudF9yZWxlYXNlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCit7CisJaW5wdXRfcmVwb3J0X2FicyhpZGV2LCBBQlNfUFJFU1NVUkUsIDApOworCWlucHV0X3N5bmMoaWRldik7Cit9CisKK3N0YXRpYyB2b2lkIHVjYjE0MDBfaGFuZGxlX3BlbmRpbmdfaXJxKHN0cnVjdCB1Y2IxNDAwICp1Y2IpCit7CisJdW5zaWduZWQgaW50IGlzcjsKKworCWlzciA9IHVjYjE0MDBfcmVnX3JlYWQodWNiLCBVQ0JfSUVfU1RBVFVTKTsKKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9JRV9DTEVBUiwgaXNyKTsKKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9JRV9DTEVBUiwgMCk7CisKKwlpZiAoaXNyICYgVUNCX0lFX1RTUFgpCisJCXVjYjE0MDBfdHNfaXJxX2Rpc2FibGUodWNiKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAidWNiMTQwMDogdW5leHBlY3RlZCBJRV9TVEFUVVMgPSAlI3hcbiIsIGlzcik7CisKKwllbmFibGVfaXJxKHVjYi0+aXJxKTsKK30KKworc3RhdGljIGludCB1Y2IxNDAwX3RzX3RocmVhZCh2b2lkICpfdWNiKQoreworCXN0cnVjdCB1Y2IxNDAwICp1Y2IgPSBfdWNiOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlpbnQgdmFsaWQgPSAwOworCisJdHNrLT5wb2xpY3kgPSBTQ0hFRF9GSUZPOworCXRzay0+cnRfcHJpb3JpdHkgPSAxOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJdW5zaWduZWQgaW50IHgsIHksIHA7CisJCWxvbmcgdGltZW91dDsKKworCQl1Y2ItPnRzX3Jlc3RhcnQgPSAwOworCisJCWlmICh1Y2ItPmlycV9wZW5kaW5nKSB7CisJCQl1Y2ItPmlycV9wZW5kaW5nID0gMDsKKwkJCXVjYjE0MDBfaGFuZGxlX3BlbmRpbmdfaXJxKHVjYik7CisJCX0KKworCQl1Y2IxNDAwX2FkY19lbmFibGUodWNiKTsKKwkJeCA9IHVjYjE0MDBfdHNfcmVhZF94cG9zKHVjYik7CisJCXkgPSB1Y2IxNDAwX3RzX3JlYWRfeXBvcyh1Y2IpOworCQlwID0gdWNiMTQwMF90c19yZWFkX3ByZXNzdXJlKHVjYik7CisJCXVjYjE0MDBfYWRjX2Rpc2FibGUodWNiKTsKKworCQkvKiBTd2l0Y2ggYmFjayB0byBpbnRlcnJ1cHQgbW9kZS4gKi8KKwkJdWNiMTQwMF90c19tb2RlX2ludCh1Y2IpOworCisJCW1zbGVlcCgxMCk7CisKKwkJaWYgKHVjYjE0MDBfdHNfcGVuX2Rvd24odWNiKSkgeworCQkJdWNiMTQwMF90c19pcnFfZW5hYmxlKHVjYik7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBzcGF0IG91dCBhIHZhbGlkIHNhbXBsZSBzZXQgbGFzdCB0aW1lLAorCQkJICogc3BpdCBvdXQgYSAicGVuIG9mZiIgc2FtcGxlIGhlcmUuCisJCQkgKi8KKwkJCWlmICh2YWxpZCkgeworCQkJCXVjYjE0MDBfdHNfZXZlbnRfcmVsZWFzZSh1Y2ItPnRzX2lkZXYpOworCQkJCXZhbGlkID0gMDsKKwkJCX0KKworCQkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCQl9IGVsc2UgeworCQkJdmFsaWQgPSAxOworCQkJdWNiMTQwMF90c19ldnRfYWRkKHVjYi0+dHNfaWRldiwgcCwgeCwgeSk7CisJCQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygxMCk7CisJCX0KKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh1Y2ItPnRzX3dhaXQsCisJCQl1Y2ItPmlycV9wZW5kaW5nIHx8IHVjYi0+dHNfcmVzdGFydCB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCksCisJCQl0aW1lb3V0KTsKKwkJdHJ5X3RvX2ZyZWV6ZSgpOworCX0KKworCS8qIFNlbmQgdGhlICJwZW4gb2ZmIiBpZiB3ZSBhcmUgc3RvcHBpbmcgd2l0aCB0aGUgcGVuIHN0aWxsIGFjdGl2ZSAqLworCWlmICh2YWxpZCkKKwkJdWNiMTQwMF90c19ldmVudF9yZWxlYXNlKHVjYi0+dHNfaWRldik7CisKKwl1Y2ItPnRzX3Rhc2sgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKgorICogQSByZXN0cmljdGlvbiB3aXRoIGludGVycnVwdHMgZXhpc3RzIHdoZW4gdXNpbmcgdGhlIHVjYjE0MDAsIGFzCisgKiB0aGUgY29kZWMgcmVhZC93cml0ZSByb3V0aW5lcyBtYXkgc2xlZXAgd2hpbGUgd2FpdGluZyBmb3IgY29kZWMKKyAqIGFjY2VzcyBjb21wbGV0aW9uIGFuZCB1c2VzIHNlbWFwaG9yZXMgZm9yIGFjY2VzcyBjb250cm9sIHRvIHRoZQorICogQUM5NyBidXMuICBBIGNvbXBsZXRlIGNvZGVjIHJlYWQgY3ljbGUgY291bGQgdGFrZSAgYW55d2hlcmUgZnJvbQorICogNjAgdG8gMTAwdVNlYyBzbyB3ZSAqZGVmaW5pdGVseSogZG9uJ3Qgd2FudCB0byBzcGluIGluc2lkZSB0aGUKKyAqIGludGVycnVwdCBoYW5kbGVyIHdhaXRpbmcgZm9yIGNvZGVjIGFjY2Vzcy4gIFNvLCB3ZSBoYW5kbGUgdGhlCisgKiBpbnRlcnJ1cHQgYnkgc2NoZWR1bGluZyBhIFJUIGtlcm5lbCB0aHJlYWQgdG8gcnVuIGluIHByb2Nlc3MKKyAqIGNvbnRleHQgaW5zdGVhZCBvZiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLworc3RhdGljIGlycXJldHVybl90IHVjYjE0MDBfaGFyZF9pcnEoaW50IGlycW5yLCB2b2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QgdWNiMTQwMCAqdWNiID0gZGV2aWQ7CisKKwlpZiAoaXJxbnIgPT0gdWNiLT5pcnEpIHsKKwkJZGlzYWJsZV9pcnEodWNiLT5pcnEpOworCQl1Y2ItPmlycV9wZW5kaW5nID0gMTsKKwkJd2FrZV91cCgmdWNiLT50c193YWl0KTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpbnQgdWNiMTQwMF90c19vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCit7CisJc3RydWN0IHVjYjE0MDAgKnVjYiA9IGlkZXYtPnByaXZhdGU7CisJaW50IHJldCA9IDA7CisKKwlCVUdfT04odWNiLT50c190YXNrKTsKKworCXVjYi0+dHNfdGFzayA9IGt0aHJlYWRfcnVuKHVjYjE0MDBfdHNfdGhyZWFkLCB1Y2IsICJVQ0IxNDAwX3RzIik7CisJaWYgKElTX0VSUih1Y2ItPnRzX3Rhc2spKSB7CisJCXJldCA9IFBUUl9FUlIodWNiLT50c190YXNrKTsKKwkJdWNiLT50c190YXNrID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1Y2IxNDAwX3RzX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCit7CisJc3RydWN0IHVjYjE0MDAgKnVjYiA9IGlkZXYtPnByaXZhdGU7CisKKwlpZiAodWNiLT50c190YXNrKQorCQlrdGhyZWFkX3N0b3AodWNiLT50c190YXNrKTsKKworCXVjYjE0MDBfdHNfaXJxX2Rpc2FibGUodWNiKTsKKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9UU19DUiwgMCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdWNiMTQwMF90c19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1Y2IxNDAwICp1Y2IgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICh1Y2ItPnRzX3Rhc2spIHsKKwkJLyoKKwkJICogUmVzdGFydCB0aGUgVFMgdGhyZWFkIHRvIGVuc3VyZSB0aGUKKwkJICogVFMgaW50ZXJydXB0IG1vZGUgaXMgc2V0IHVwIGFnYWluCisJCSAqIGFmdGVyIHNsZWVwLgorCQkgKi8KKwkJdWNiLT50c19yZXN0YXJ0ID0gMTsKKwkJd2FrZV91cCgmdWNiLT50c193YWl0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB1Y2IxNDAwX3RzX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworI2lmbmRlZiBOT19JUlEKKyNkZWZpbmUgTk9fSVJRCTAKKyNlbmRpZgorCisvKgorICogVHJ5IHRvIHByb2JlIG91ciBpbnRlcnJ1cHQsIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gbG90cyBvZgorICogaGFyZC1jb2RlZCBtYWNoaW5lIGRlcGVuZGVuY2llcy4KKyAqLworc3RhdGljIGludCB1Y2IxNDAwX2RldGVjdF9pcnEoc3RydWN0IHVjYjE0MDAgKnVjYikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2ssIHRpbWVvdXQ7CisKKwltYXNrID0gcHJvYmVfaXJxX29uKCk7CisJaWYgKCFtYXNrKSB7CisJCXByb2JlX2lycV9vZmYobWFzayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogRW5hYmxlIHRoZSBBREMgaW50ZXJydXB0LiAqLworCXVjYjE0MDBfcmVnX3dyaXRlKHVjYiwgVUNCX0lFX1JJUywgVUNCX0lFX0FEQyk7CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfSUVfRkFMLCBVQ0JfSUVfQURDKTsKKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9JRV9DTEVBUiwgMHhmZmZmKTsKKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9JRV9DTEVBUiwgMCk7CisKKwkvKiBDYXVzZSBhbiBBREMgaW50ZXJydXB0LiAqLworCXVjYjE0MDBfcmVnX3dyaXRlKHVjYiwgVUNCX0FEQ19DUiwgVUNCX0FEQ19FTkEpOworCXVjYjE0MDBfcmVnX3dyaXRlKHVjYiwgVUNCX0FEQ19DUiwgVUNCX0FEQ19FTkEgfCBVQ0JfQURDX1NUQVJUKTsKKworCS8qIFdhaXQgZm9yIHRoZSBjb252ZXJzaW9uIHRvIGNvbXBsZXRlLiAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgSFovMjsKKwl3aGlsZSAoISh1Y2IxNDAwX3JlZ19yZWFkKHVjYiwgVUNCX0FEQ19EQVRBKSAmIFVDQl9BRENfREFUX1ZBTElEKSkgeworCQljcHVfcmVsYXgoKTsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidWNiMTQwMDogdGltZWQgb3V0IGluIElSUSBwcm9iZVxuIik7CisJCQlwcm9iZV9pcnFfb2ZmKG1hc2spOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfQURDX0NSLCAwKTsKKworCS8qIERpc2FibGUgYW5kIGNsZWFyIGludGVycnVwdC4gKi8KKwl1Y2IxNDAwX3JlZ193cml0ZSh1Y2IsIFVDQl9JRV9SSVMsIDApOworCXVjYjE0MDBfcmVnX3dyaXRlKHVjYiwgVUNCX0lFX0ZBTCwgMCk7CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfSUVfQ0xFQVIsIDB4ZmZmZik7CisJdWNiMTQwMF9yZWdfd3JpdGUodWNiLCBVQ0JfSUVfQ0xFQVIsIDApOworCisJLyogUmVhZCB0cmlnZ2VyZWQgaW50ZXJydXB0LiAqLworCXVjYi0+aXJxID0gcHJvYmVfaXJxX29mZihtYXNrKTsKKwlpZiAodWNiLT5pcnEgPCAwIHx8IHVjYi0+aXJxID09IE5PX0lSUSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1Y2IxNDAwX3RzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdWNiMTQwMCAqdWNiOworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CisJaW50IGVycm9yLCBpZCwgeF9yZXMsIHlfcmVzOworCisJdWNiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVjYjE0MDApLCBHRlBfS0VSTkVMKTsKKwlpZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF1Y2IgfHwgIWlkZXYpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2RldnM7CisJfQorCisJdWNiLT50c19pZGV2ID0gaWRldjsKKwl1Y2ItPmFkY3N5bmMgPSBhZGNzeW5jOworCXVjYi0+YWM5NyA9IHRvX2FjOTdfdChkZXYpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVjYi0+dHNfd2FpdCk7CisKKwlpZCA9IHVjYjE0MDBfcmVnX3JlYWQodWNiLCBVQ0JfSUQpOworCWlmIChpZCAhPSBVQ0JfSURfMTQwMCkgeworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfZGV2czsKKwl9CisKKwllcnJvciA9IHVjYjE0MDBfZGV0ZWN0X2lycSh1Y2IpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9FUlIgIlVDQjE0MDA6IElSUSBwcm9iZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlX2RldnM7CisJfQorCisJZXJyb3IgPSByZXF1ZXN0X2lycSh1Y2ItPmlycSwgdWNiMTQwMF9oYXJkX2lycSwgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCQkiVUNCMTQwMCIsIHVjYik7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX0VSUiAidWNiMTQwMDogdW5hYmxlIHRvIGdyYWIgaXJxJWQ6ICVkXG4iLAorCQkJCXVjYi0+aXJxLCBlcnJvcik7CisJCWdvdG8gZXJyX2ZyZWVfZGV2czsKKwl9CisJcHJpbnRrKEtFUk5fREVCVUcgIlVDQjE0MDA6IGZvdW5kIElSUSAlZFxuIiwgdWNiLT5pcnEpOworCisJaWRldi0+cHJpdmF0ZQkJPSB1Y2I7CisJaWRldi0+Y2Rldi5kZXYJCT0gZGV2OworCWlkZXYtPm5hbWUJCT0gIlVDQjE0MDAgdG91Y2hzY3JlZW4gaW50ZXJmYWNlIjsKKwlpZGV2LT5pZC52ZW5kb3IJCT0gdWNiMTQwMF9yZWdfcmVhZCh1Y2IsIEFDOTdfVkVORE9SX0lEMSk7CisJaWRldi0+aWQucHJvZHVjdAk9IGlkOworCWlkZXYtPm9wZW4JCT0gdWNiMTQwMF90c19vcGVuOworCWlkZXYtPmNsb3NlCQk9IHVjYjE0MDBfdHNfY2xvc2U7CisJaWRldi0+ZXZiaXRbMF0JCT0gQklUKEVWX0FCUyk7CisKKwl1Y2IxNDAwX2FkY19lbmFibGUodWNiKTsKKwl4X3JlcyA9IHVjYjE0MDBfdHNfcmVhZF94cmVzKHVjYik7CisJeV9yZXMgPSB1Y2IxNDAwX3RzX3JlYWRfeXJlcyh1Y2IpOworCXVjYjE0MDBfYWRjX2Rpc2FibGUodWNiKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVUNCMTQwMDogeC95ID0gJWQvJWRcbiIsIHhfcmVzLCB5X3Jlcyk7CisKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpZGV2LCBBQlNfWCwgMCwgeF9yZXMsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlkZXYsIEFCU19ZLCAwLCB5X3JlcywgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaWRldiwgQUJTX1BSRVNTVVJFLCAwLCAwLCAwLCAwKTsKKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlkZXYpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCB1Y2IpOworCXJldHVybiAwOworCisgZXJyX2ZyZWVfaXJxOgorCWZyZWVfaXJxKHVjYi0+aXJxLCB1Y2IpOworIGVycl9mcmVlX2RldnM6CisJaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7CisJa2ZyZWUodWNiKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgdWNiMTQwMF90c19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1Y2IxNDAwICp1Y2IgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWZyZWVfaXJxKHVjYi0+aXJxLCB1Y2IpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHVjYi0+dHNfaWRldik7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJa2ZyZWUodWNiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVjYjE0MDBfdHNfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuYnVzCQk9ICZhYzk3X2J1c190eXBlLAorCS5wcm9iZQkJPSB1Y2IxNDAwX3RzX3Byb2JlLAorCS5yZW1vdmUJCT0gdWNiMTQwMF90c19yZW1vdmUsCisJLnJlc3VtZQkJPSB1Y2IxNDAwX3RzX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVjYjE0MDBfdHNfaW5pdCh2b2lkKQoreworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnVjYjE0MDBfdHNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVjYjE0MDBfdHNfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1Y2IxNDAwX3RzX2RyaXZlcik7Cit9CisKK21vZHVsZV9wYXJhbShhZGNzeW5jLCBpbnQsIDA0NDQpOworCittb2R1bGVfaW5pdCh1Y2IxNDAwX3RzX2luaXQpOworbW9kdWxlX2V4aXQodWNiMTQwMF90c19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFVDQjE0MDAgdG91Y2hzY3JlZW4gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jIGIvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYwppbmRleCAzY2FjMjM3Li4wOWVhNTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMKQEAgLTQwOCw3ICs0MDgsNyBAQAogICAgICAgICBwID0gY2Jsb2NrLmJ1ZmZlcjsKICAgICAgICAgaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHAsIGxlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgIGJ1ZiA9ICh1X2NoYXIgKikga21hbGxvYygxMDI0LCBHRlBfS0VSTkVMKTsKKyAgICAgICAgYnVmID0ga21hbGxvYygxMDI0LCBHRlBfS0VSTkVMKTsKICAgICAgICAgaWYgKCFidWYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgICAgIHRpbWVvdXQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2FjdDIwMDAvbW9kdWxlLmMgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9tb2R1bGUuYwppbmRleCA5MDU5M2UyLi5lM2U1YzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vYWN0MjAwMC9tb2R1bGUuYworKysgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9tb2R1bGUuYwpAQCAtNTczLDEyICs1NzMsMTEgQEAKIHsKIAlpbnQgaTsKICAgICAgICAgYWN0MjAwMF9jYXJkICpjYXJkOwotICAgICAgICBpZiAoIShjYXJkID0gKGFjdDIwMDBfY2FyZCAqKSBrbWFsbG9jKHNpemVvZihhY3QyMDAwX2NhcmQpLCBHRlBfS0VSTkVMKSkpIHsKKyAgICAgICAgaWYgKCEoY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKGFjdDIwMDBfY2FyZCksIEdGUF9LRVJORUwpKSkgewogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJhY3QyMDAwOiAoJXMpIENvdWxkIG5vdCBhbGxvY2F0ZSBjYXJkLXN0cnVjdC5cbiIsIGlkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbWVtc2V0KChjaGFyICopIGNhcmQsIDAsIHNpemVvZihhY3QyMDAwX2NhcmQpKTsKICAgICAgICAgc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmxvY2spOwogICAgICAgICBzcGluX2xvY2tfaW5pdCgmY2FyZC0+bW5sb2NrKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZjYXJkLT5zbmRxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwppbmRleCAxMTg0NGJiLi5kMjJjMDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCkBAIC0yMTUsMTMgKzIxNSwxMiBAQAogCXVuc2lnbmVkIGludCBtaW5vciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW1wID0ga21hbGxvYyhzaXplb2YoKm1wKSwgR0ZQX0FUT01JQyk7CisJbXAgPSBremFsbG9jKHNpemVvZigqbXApLCBHRlBfQVRPTUlDKTsKICAgCWlmICghbXApIHsKICAgCQlwcmludGsoS0VSTl9FUlIgImNhcGk6IGNhbid0IGFsbG9jIGNhcGltaW5vclxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCW1lbXNldChtcCwgMCwgc2l6ZW9mKHN0cnVjdCBjYXBpbWlub3IpKTsKIAltcC0+YXAgPSBhcDsKIAltcC0+bmNjaSA9IG5jY2k7CiAJbXAtPm1zZ2lkID0gMDsKQEAgLTMwNCwxMCArMzAzLDkgQEAKIAlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IE5VTEw7CiAjZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCiAKLQlucCA9IGttYWxsb2Moc2l6ZW9mKCpucCksIEdGUF9BVE9NSUMpOworCW5wID0ga3phbGxvYyhzaXplb2YoKm5wKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFucCkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KG5wLCAwLCBzaXplb2Yoc3RydWN0IGNhcGluY2NpKSk7CiAJbnAtPm5jY2kgPSBuY2NpOwogCW5wLT5jZGV2ID0gY2RldjsKICNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKQEAgLTM4NCwxMCArMzgyLDkgQEAKIAlzdHJ1Y3QgY2FwaWRldiAqY2RldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JY2RldiA9IGttYWxsb2Moc2l6ZW9mKCpjZGV2KSwgR0ZQX0tFUk5FTCk7CisJY2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpjZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjZGV2KQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoY2RldiwgMCwgc2l6ZW9mKHN0cnVjdCBjYXBpZGV2KSk7CiAKIAlpbml0X01VVEVYKCZjZGV2LT5uY2NpX2xpc3Rfc2VtKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZjZGV2LT5yZWN2cXVldWUpOwpAQCAtMTAxMCw3ICsxMDA3LDcgQEAKIHsKIAlzdHJ1Y3QgY2FwaW1pbm9yICptcDsKIAotCWlmICgobXAgPSBjYXBpbWlub3JfZmluZChpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpKSkgPT0gMCkKKwlpZiAoKG1wID0gY2FwaW1pbm9yX2ZpbmQoaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKSkgPT0gMCkKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAobXAtPm5jY2lwID09IDApCiAJCXJldHVybiAtRU5YSU87CkBAIC0xMjAzLDcgKzEyMDAsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCkKK3N0YXRpYyB2b2lkIGNhcGluY190dHlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkKQogewogI2lmZGVmIF9ERUJVR19UVFlGVU5DUwogCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3NldF90ZXJtaW9zXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlkcnYuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlkcnYuYwppbmRleCBiNmY5NDc2Li5jNGQ0MzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZHJ2LmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWRydi5jCkBAIC0zMzQsMTIgKzMzNCwxMSBAQAogewogCWNhcGlkcnZfcGxjaSAqcGxjaXA7CiAKLQlwbGNpcCA9IChjYXBpZHJ2X3BsY2kgKikga21hbGxvYyhzaXplb2YoY2FwaWRydl9wbGNpKSwgR0ZQX0FUT01JQyk7CisJcGxjaXAgPSBremFsbG9jKHNpemVvZihjYXBpZHJ2X3BsY2kpLCBHRlBfQVRPTUlDKTsKIAogCWlmIChwbGNpcCA9PSAwKQogCQlyZXR1cm4gTlVMTDsKIAotCW1lbXNldChwbGNpcCwgMCwgc2l6ZW9mKGNhcGlkcnZfcGxjaSkpOwogCXBsY2lwLT5zdGF0ZSA9IFNUX1BMQ0lfTk9ORTsKIAlwbGNpcC0+cGxjaSA9IDA7CiAJcGxjaXAtPm1zZ2lkID0gMDsKQEAgLTQwNCwxMiArNDAzLDExIEBACiB7CiAJY2FwaWRydl9uY2NpICpuY2NpcDsKIAotCW5jY2lwID0gKGNhcGlkcnZfbmNjaSAqKSBrbWFsbG9jKHNpemVvZihjYXBpZHJ2X25jY2kpLCBHRlBfQVRPTUlDKTsKKwluY2NpcCA9IGt6YWxsb2Moc2l6ZW9mKGNhcGlkcnZfbmNjaSksIEdGUF9BVE9NSUMpOwogCiAJaWYgKG5jY2lwID09IDApCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KG5jY2lwLCAwLCBzaXplb2YoY2FwaWRydl9uY2NpKSk7CiAJbmNjaXAtPm5jY2kgPSBuY2NpOwogCW5jY2lwLT5zdGF0ZSA9IFNUX05DQ0lfTk9ORTsKIAluY2NpcC0+cGxjaXAgPSBwbGNpcDsKQEAgLTIwMDUsMTggKzIwMDMsMTcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FwaWRydjogKCVzKSBDb3VsZCBub3QgcmVzZXJ2ZSBtb2R1bGVcbiIsIGlkKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlpZiAoIShjYXJkID0gKGNhcGlkcnZfY29udHIgKikga21hbGxvYyhzaXplb2YoY2FwaWRydl9jb250ciksIEdGUF9BVE9NSUMpKSkgeworCWlmICghKGNhcmQgPSBremFsbG9jKHNpemVvZihjYXBpZHJ2X2NvbnRyKSwgR0ZQX0FUT01JQykpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICJjYXBpZHJ2OiAoJXMpIENvdWxkIG5vdCBhbGxvY2F0ZSBjb250ci1zdHJ1Y3QuXG4iLCBpZCk7CiAJCXJldHVybiAtMTsKIAl9Ci0JbWVtc2V0KGNhcmQsIDAsIHNpemVvZihjYXBpZHJ2X2NvbnRyKSk7CiAJY2FyZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlpbml0X3RpbWVyKCZjYXJkLT5saXN0ZW50aW1lcik7CiAJc3RyY3B5KGNhcmQtPm5hbWUsIGlkKTsKIAljYXJkLT5jb250cm5yID0gY29udHI7CiAJY2FyZC0+bmJjaGFuID0gcHJvZnAtPm5iY2hhbm5lbDsKLQljYXJkLT5iY2hhbnMgPSAoY2FwaWRydl9iY2hhbiAqKSBrbWFsbG9jKHNpemVvZihjYXBpZHJ2X2JjaGFuKSAqIGNhcmQtPm5iY2hhbiwgR0ZQX0FUT01JQyk7CisJY2FyZC0+YmNoYW5zID0ga21hbGxvYyhzaXplb2YoY2FwaWRydl9iY2hhbikgKiBjYXJkLT5uYmNoYW4sIEdGUF9BVE9NSUMpOwogCWlmICghY2FyZC0+YmNoYW5zKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJImNhcGlkcnY6ICglcykgQ291bGQgbm90IGFsbG9jYXRlIGJjaGFuLXN0cnVjdHMuXG4iLCBpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCmluZGV4IDM5OWIzMTYuLjA2OTY3ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCkBAIC00NSw3ICs0NSw3IEBACiAJCXJldHVybjsKIAlpZiAoISpjcCkKIAkJcmV0dXJuOwotCWlmICghKGliID0gKHN0cnVjdCBkaXZlcnRfaW5mbyAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGl2ZXJ0X2luZm8pICsgc3RybGVuKGNwKSwgR0ZQX0FUT01JQykpKQorCWlmICghKGliID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRpdmVydF9pbmZvKSArIHN0cmxlbihjcCksIEdGUF9BVE9NSUMpKSkKIAkJIHJldHVybjsJLyogbm8gbWVtb3J5ICovCiAJc3RyY3B5KGliLT5pbmZvX3N0YXJ0LCBjcCk7CS8qIHNldCBvdXRwdXQgc3RyaW5nICovCiAJaWItPm5leHQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5jIGIvZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5jCmluZGV4IDAzMzE5ZWEuLjdkOTdkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvaXNkbl9kaXZlcnQuYworKysgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2lzZG5fZGl2ZXJ0LmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogICAqaWVsZW5wID0gcCAtIGllbGVucCAtIDE7IC8qIHNldCB0b3RhbCBJRSBsZW5ndGggKi8gCiAKICAgLyogYWxsb2NhdGUgbWVtIGZvciBpbmZvcm1hdGlvbiBzdHJ1Y3QgKi8gIAotICBpZiAoIShjcyA9IChzdHJ1Y3QgY2FsbF9zdHJ1YyAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FsbF9zdHJ1YyksIEdGUF9BVE9NSUMpKSkgCisgIGlmICghKGNzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhbGxfc3RydWMpLCBHRlBfQVRPTUlDKSkpCiAgICAgICAgICAgICAgcmV0dXJuKC1FTk9NRU0pOyAvKiBubyBtZW1vcnkgKi8KICAgaW5pdF90aW1lcigmY3MtPnRpbWVyKTsKICAgY3MtPmluZm9bMF0gPSAnXDAnOwpAQCAtMjc2LDcgKzI3Niw3IEBACiB7IHN0cnVjdCBkZWZsZWN0X3N0cnVjICpkcywqZHMxPU5VTEw7CiAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgaWYgKCEoZHMgPSAoc3RydWN0IGRlZmxlY3Rfc3RydWMgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IGRlZmxlY3Rfc3RydWMpLCAKKyAgaWYgKCEoZHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGVmbGVjdF9zdHJ1YyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCkpKSAKICAgICByZXR1cm4oLUVOT01FTSk7IC8qIG5vIG1lbW9yeSAqLwogCkBAIC00NTEsNyArNDUxLDcgQEAKICAgICAgICAgICAgaWYgKGR2LT5ydWxlLmFjdGlvbiA9PSBERUZMRUNUX1BST0NFRUQpCiAJICAgIGlmICgoIWlmX3VzZWQpIHx8ICgoIWV4dGVybl93YWl0X21heCkgJiYgKCFkdi0+cnVsZS53YWl0dGltZSkpKSAKICAgICAgICAgICAgICAgcmV0dXJuKDApOyAvKiBubyBleHRlcm5hbCBkZWZsZWN0aW9uIG5lZWRlZCAqLyAgCi0gICAgICAgICAgIGlmICghKGNzID0gKHN0cnVjdCBjYWxsX3N0cnVjICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjYWxsX3N0cnVjKSwgR0ZQX0FUT01JQykpKSAKKyAgICAgICAgICAgaWYgKCEoY3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FsbF9zdHJ1YyksIEdGUF9BVE9NSUMpKSkKICAgICAgICAgICAgICByZXR1cm4oMCk7IC8qIG5vIG1lbW9yeSAqLwogICAgICAgICAgICBpbml0X3RpbWVyKCZjcy0+dGltZXIpOwogICAgICAgICAgICBjcy0+aW5mb1swXSA9ICdcMCc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZwppbmRleCA1YjIwM2ZlLi43MDhkNDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKQEAgLTUsNiArNSw3IEBACiAJdHJpc3RhdGUgIlNpZW1lbnMgR2lnYXNldCBzdXBwb3J0IChpc2RuKSIKIAlkZXBlbmRzIG9uIElTRE5fSTRMCiAJc2VsZWN0IENSQ19DQ0lUVAorCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscAogCSAgU2F5IG0gaGVyZSBpZiB5b3UgaGF2ZSBhIEdpZ2FzZXQgb3IgU2ludXMgaXNkbiBkZXZpY2UuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYXN5bmNkYXRhLmMKaW5kZXggY2UzY2Q3Ny4uODhlOTU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYXN5bmNkYXRhLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYXN5bmNkYXRhLmMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKICNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KIAogLy8jZGVmaW5lIEdJR19NMTB4X1NUVUZGX1ZPSUNFX0RBVEEKIApAQCAtMzAyLDcgKzMwMyw3IEBACiAJCQkJaW5wdXRzdGF0ZSB8PSBJTlNfc2tpcF9mcmFtZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCSpfX3NrYl9wdXQoc2tiLCAxKSA9IGdpZ2FzZXRfaW52dGFiW2NdOworCQkJKl9fc2tiX3B1dChza2IsIDEpID0gYml0cmV2OChjKTsKIAkJfQogCiAJCWlmICh1bmxpa2VseSghbnVtYnl0ZXMpKQpAQCAtNTQzLDcgKzU0NCw3IEBACiAJY3AgPSBza2ItPmRhdGE7CiAJbGVuID0gc2tiLT5sZW47CiAJd2hpbGUgKGxlbi0tKSB7Ci0JCWMgPSBnaWdhc2V0X2ludnRhYlsqY3ArK107CisJCWMgPSBiaXRyZXY4KCpjcCsrKTsKIAkJaWYgKGMgPT0gRExFX0ZMQUcpCiAJCQkqKHNrYl9wdXQoaXJhd19za2IsIDEpKSA9IGM7CiAJCSooc2tiX3B1dChpcmF3X3NrYiwgMSkpID0gYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCmluZGV4IDYzYjYyOWIuLmI1ZTdmOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwpAQCAtMTg1MywyMCArMTg1MywyNCBAQAogewogCXN0cnVjdCBjbWRidWZfdCAqY2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgc3RhdHVzOworCWludCByYzsKIAogCWdpZ2FzZXRfZGJnX2J1ZmZlcihhdG9taWNfcmVhZCgmY3MtPm1zdGF0ZSkgIT0gTVNfTE9DS0VEID8KIAkJCSAgICAgREVCVUdfVFJBTlNDTUQgOiBERUJVR19MT0NLQ01ELAogCQkJICAgIkNNRCBUcmFuc21pdCIsIGxlbiwgYnVmKTsKIAotCWlmIChsZW4gPD0gMCkKLQkJcmV0dXJuIDA7CQkJLyogbm90aGluZyB0byBkbyAqLworCWlmIChsZW4gPD0gMCkgeworCQkvKiBub3RoaW5nIHRvIGRvICovCisJCXJjID0gMDsKKwkJZ290byBub3RxdWV1ZWQ7CisJfQogCiAJaWYgKGxlbiA+IElGX1dSSVRFQlVGKQogCQlsZW4gPSBJRl9XUklURUJVRjsKIAlpZiAoIShjYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWRidWZfdCkgKyBsZW4sIEdGUF9BVE9NSUMpKSkgewogCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG5vdHF1ZXVlZDsKIAl9CiAKIAltZW1jcHkoY2ItPmJ1ZiwgYnVmLCBsZW4pOwpAQCAtMTg5MSwxMSArMTg5NSwyMSBAQAogCWlmICh1bmxpa2VseSghY3MtPmNvbm5lY3RlZCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIAkJZ2lnX2RiZyhERUJVR19VU0JSRVEsICIlczogbm90IGNvbm5lY3RlZCIsIF9fZnVuY19fKTsKKwkJLyogZmx1c2ggY29tbWFuZCBxdWV1ZSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKKwkJd2hpbGUgKGNzLT5jbWRidWYgIT0gTlVMTCkKKwkJCWNvbXBsZXRlX2NiKGNzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmNtZGxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXN0YXR1cyA9IHN0YXJ0X2Nic2VuZChjcyk7CisJcmMgPSBzdGFydF9jYnNlbmQoY3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHN0YXR1cyA8IDAgPyBzdGF0dXMgOiBsZW47CisJcmV0dXJuIHJjIDwgMCA/IHJjIDogbGVuOworCitub3RxdWV1ZWQ6CQkJLyogcmVxdWVzdCBoYW5kbGVkIHdpdGhvdXQgcXVldWluZyAqLworCWlmICh3YWtlX3Rhc2tsZXQpCisJCXRhc2tsZXRfc2NoZWR1bGUod2FrZV90YXNrbGV0KTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qIGdpZ2FzZXRfd3JpdGVfcm9vbQpAQCAtMTk2NCwyMCArMTk3OCwxNSBAQAogCiAJLyoga2lsbCBVUkJzIGFuZCB0YXNrbGV0cyBiZWZvcmUgZnJlZWluZyAtIGJldHRlciBzYWZlIHRoYW4gc29ycnkgKi8KIAlhdG9taWNfc2V0KCZ1YmMtPnJ1bm5pbmcsIDApOwotCWZvciAoaSA9IDA7IGkgPCBCQVNfT1VUVVJCUzsgKytpKQotCQlpZiAodWJjLT5pc29vdXR1cmJzW2ldLnVyYikgewotCQkJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGtpbGxpbmcgaXNvIG91dCBVUkIgJWQiLAotCQkJCV9fZnVuY19fLCBpKTsKLQkJCXVzYl9raWxsX3VyYih1YmMtPmlzb291dHVyYnNbaV0udXJiKTsKLQkJCXVzYl9mcmVlX3VyYih1YmMtPmlzb291dHVyYnNbaV0udXJiKTsKLQkJfQotCWZvciAoaSA9IDA7IGkgPCBCQVNfSU5VUkJTOyArK2kpCi0JCWlmICh1YmMtPmlzb2ludXJic1tpXSkgewotCQkJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGtpbGxpbmcgaXNvIGluIFVSQiAlZCIsCi0JCQkJX19mdW5jX18sIGkpOwotCQkJdXNiX2tpbGxfdXJiKHViYy0+aXNvaW51cmJzW2ldKTsKLQkJCXVzYl9mcmVlX3VyYih1YmMtPmlzb2ludXJic1tpXSk7Ci0JCX0KKwlnaWdfZGJnKERFQlVHX0lOSVQsICIlczoga2lsbGluZyBpc28gVVJCcyIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgQkFTX09VVFVSQlM7ICsraSkgeworCQl1c2Jfa2lsbF91cmIodWJjLT5pc29vdXR1cmJzW2ldLnVyYik7CisJCXVzYl9mcmVlX3VyYih1YmMtPmlzb291dHVyYnNbaV0udXJiKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IEJBU19JTlVSQlM7ICsraSkgeworCQl1c2Jfa2lsbF91cmIodWJjLT5pc29pbnVyYnNbaV0pOworCQl1c2JfZnJlZV91cmIodWJjLT5pc29pbnVyYnNbaV0pOworCX0KIAl0YXNrbGV0X2tpbGwoJnViYy0+c2VudF90YXNrbGV0KTsKIAl0YXNrbGV0X2tpbGwoJnViYy0+cmN2ZF90YXNrbGV0KTsKIAlrZnJlZSh1YmMtPmlzb291dGJ1Zik7CkBAIC0yMDk5LDU1ICsyMTA4LDMyIEBACiAJc3RydWN0IGJhc19iY19zdGF0ZSAqdWJjOwogCWludCBpLCBqOwogCisJZ2lnX2RiZyhERUJVR19JTklULCAiJXM6IGtpbGxpbmcgVVJCcyIsIF9fZnVuY19fKTsKIAlmb3IgKGogPSAwOyBqIDwgMjsgKytqKSB7CiAJCXViYyA9IGNzLT5iY3Nbal0uaHcuYmFzOwotCQlmb3IgKGkgPSAwOyBpIDwgQkFTX09VVFVSQlM7ICsraSkKLQkJCWlmICh1YmMtPmlzb291dHVyYnNbaV0udXJiKSB7Ci0JCQkJdXNiX2tpbGxfdXJiKHViYy0+aXNvb3V0dXJic1tpXS51cmIpOwotCQkJCWdpZ19kYmcoREVCVUdfSU5JVCwKLQkJCQkJIiVzOiBpc29jIG91dHB1dCBVUkIgJWQvJWQgdW5saW5rZWQiLAotCQkJCQlfX2Z1bmNfXywgaiwgaSk7Ci0JCQkJdXNiX2ZyZWVfdXJiKHViYy0+aXNvb3V0dXJic1tpXS51cmIpOwotCQkJCXViYy0+aXNvb3V0dXJic1tpXS51cmIgPSBOVUxMOwotCQkJfQotCQlmb3IgKGkgPSAwOyBpIDwgQkFTX0lOVVJCUzsgKytpKQotCQkJaWYgKHViYy0+aXNvaW51cmJzW2ldKSB7Ci0JCQkJdXNiX2tpbGxfdXJiKHViYy0+aXNvaW51cmJzW2ldKTsKLQkJCQlnaWdfZGJnKERFQlVHX0lOSVQsCi0JCQkJCSIlczogaXNvYyBpbnB1dCBVUkIgJWQvJWQgdW5saW5rZWQiLAotCQkJCQlfX2Z1bmNfXywgaiwgaSk7Ci0JCQkJdXNiX2ZyZWVfdXJiKHViYy0+aXNvaW51cmJzW2ldKTsKLQkJCQl1YmMtPmlzb2ludXJic1tpXSA9IE5VTEw7Ci0JCQl9CisJCWZvciAoaSA9IDA7IGkgPCBCQVNfT1VUVVJCUzsgKytpKSB7CisJCQl1c2Jfa2lsbF91cmIodWJjLT5pc29vdXR1cmJzW2ldLnVyYik7CisJCQl1c2JfZnJlZV91cmIodWJjLT5pc29vdXR1cmJzW2ldLnVyYik7CisJCQl1YmMtPmlzb291dHVyYnNbaV0udXJiID0gTlVMTDsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQkFTX0lOVVJCUzsgKytpKSB7CisJCQl1c2Jfa2lsbF91cmIodWJjLT5pc29pbnVyYnNbaV0pOworCQkJdXNiX2ZyZWVfdXJiKHViYy0+aXNvaW51cmJzW2ldKTsKKwkJCXViYy0+aXNvaW51cmJzW2ldID0gTlVMTDsKKwkJfQogCX0KLQlpZiAodWNzLT51cmJfaW50X2luKSB7Ci0JCXVzYl9raWxsX3VyYih1Y3MtPnVyYl9pbnRfaW4pOwotCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczogaW50ZXJydXB0IGlucHV0IFVSQiB1bmxpbmtlZCIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXVzYl9mcmVlX3VyYih1Y3MtPnVyYl9pbnRfaW4pOwotCQl1Y3MtPnVyYl9pbnRfaW4gPSBOVUxMOwotCX0KLQlpZiAodWNzLT51cmJfY21kX291dCkgewotCQl1c2Jfa2lsbF91cmIodWNzLT51cmJfY21kX291dCk7Ci0JCWdpZ19kYmcoREVCVUdfSU5JVCwgIiVzOiBjb21tYW5kIG91dHB1dCBVUkIgdW5saW5rZWQiLAotCQkJX19mdW5jX18pOwotCQl1c2JfZnJlZV91cmIodWNzLT51cmJfY21kX291dCk7Ci0JCXVjcy0+dXJiX2NtZF9vdXQgPSBOVUxMOwotCX0KLQlpZiAodWNzLT51cmJfY21kX2luKSB7Ci0JCXVzYl9raWxsX3VyYih1Y3MtPnVyYl9jbWRfaW4pOwotCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczogY29tbWFuZCBpbnB1dCBVUkIgdW5saW5rZWQiLAotCQkJX19mdW5jX18pOwotCQl1c2JfZnJlZV91cmIodWNzLT51cmJfY21kX2luKTsKLQkJdWNzLT51cmJfY21kX2luID0gTlVMTDsKLQl9Ci0JaWYgKHVjcy0+dXJiX2N0cmwpIHsKLQkJdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2N0cmwpOwotCQlnaWdfZGJnKERFQlVHX0lOSVQsICIlczogY29udHJvbCBvdXRwdXQgVVJCIHVubGlua2VkIiwKLQkJCV9fZnVuY19fKTsKLQkJdXNiX2ZyZWVfdXJiKHVjcy0+dXJiX2N0cmwpOwotCQl1Y3MtPnVyYl9jdHJsID0gTlVMTDsKLQl9CisJdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2ludF9pbik7CisJdXNiX2ZyZWVfdXJiKHVjcy0+dXJiX2ludF9pbik7CisJdWNzLT51cmJfaW50X2luID0gTlVMTDsKKwl1c2Jfa2lsbF91cmIodWNzLT51cmJfY21kX291dCk7CisJdXNiX2ZyZWVfdXJiKHVjcy0+dXJiX2NtZF9vdXQpOworCXVjcy0+dXJiX2NtZF9vdXQgPSBOVUxMOworCXVzYl9raWxsX3VyYih1Y3MtPnVyYl9jbWRfaW4pOworCXVzYl9mcmVlX3VyYih1Y3MtPnVyYl9jbWRfaW4pOworCXVjcy0+dXJiX2NtZF9pbiA9IE5VTEw7CisJdXNiX2tpbGxfdXJiKHVjcy0+dXJiX2N0cmwpOworCXVzYl9mcmVlX3VyYih1Y3MtPnVyYl9jdHJsKTsKKwl1Y3MtPnVyYl9jdHJsID0gTlVMTDsKIH0KIAogLyogZ2lnYXNldF9wcm9iZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYwppbmRleCBkZWZkNTc0My4uNGY3NWNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY29tbW9uLmMKQEAgLTMzLDQzICszMyw2IEBACiAjZGVmaW5lIFZBTElEX0lECTB4MDIKICNkZWZpbmUgQVNTSUdORUQJMHgwNAogCi0vKiBiaXR3aXNlIGJ5dGUgaW52ZXJzaW9uIHRhYmxlICovCi1fX3U4IGdpZ2FzZXRfaW52dGFiWzI1Nl0gPSB7Ci0JMHgwMCwgMHg4MCwgMHg0MCwgMHhjMCwgMHgyMCwgMHhhMCwgMHg2MCwgMHhlMCwKLQkweDEwLCAweDkwLCAweDUwLCAweGQwLCAweDMwLCAweGIwLCAweDcwLCAweGYwLAotCTB4MDgsIDB4ODgsIDB4NDgsIDB4YzgsIDB4MjgsIDB4YTgsIDB4NjgsIDB4ZTgsCi0JMHgxOCwgMHg5OCwgMHg1OCwgMHhkOCwgMHgzOCwgMHhiOCwgMHg3OCwgMHhmOCwKLQkweDA0LCAweDg0LCAweDQ0LCAweGM0LCAweDI0LCAweGE0LCAweDY0LCAweGU0LAotCTB4MTQsIDB4OTQsIDB4NTQsIDB4ZDQsIDB4MzQsIDB4YjQsIDB4NzQsIDB4ZjQsCi0JMHgwYywgMHg4YywgMHg0YywgMHhjYywgMHgyYywgMHhhYywgMHg2YywgMHhlYywKLQkweDFjLCAweDljLCAweDVjLCAweGRjLCAweDNjLCAweGJjLCAweDdjLCAweGZjLAotCTB4MDIsIDB4ODIsIDB4NDIsIDB4YzIsIDB4MjIsIDB4YTIsIDB4NjIsIDB4ZTIsCi0JMHgxMiwgMHg5MiwgMHg1MiwgMHhkMiwgMHgzMiwgMHhiMiwgMHg3MiwgMHhmMiwKLQkweDBhLCAweDhhLCAweDRhLCAweGNhLCAweDJhLCAweGFhLCAweDZhLCAweGVhLAotCTB4MWEsIDB4OWEsIDB4NWEsIDB4ZGEsIDB4M2EsIDB4YmEsIDB4N2EsIDB4ZmEsCi0JMHgwNiwgMHg4NiwgMHg0NiwgMHhjNiwgMHgyNiwgMHhhNiwgMHg2NiwgMHhlNiwKLQkweDE2LCAweDk2LCAweDU2LCAweGQ2LCAweDM2LCAweGI2LCAweDc2LCAweGY2LAotCTB4MGUsIDB4OGUsIDB4NGUsIDB4Y2UsIDB4MmUsIDB4YWUsIDB4NmUsIDB4ZWUsCi0JMHgxZSwgMHg5ZSwgMHg1ZSwgMHhkZSwgMHgzZSwgMHhiZSwgMHg3ZSwgMHhmZSwKLQkweDAxLCAweDgxLCAweDQxLCAweGMxLCAweDIxLCAweGExLCAweDYxLCAweGUxLAotCTB4MTEsIDB4OTEsIDB4NTEsIDB4ZDEsIDB4MzEsIDB4YjEsIDB4NzEsIDB4ZjEsCi0JMHgwOSwgMHg4OSwgMHg0OSwgMHhjOSwgMHgyOSwgMHhhOSwgMHg2OSwgMHhlOSwKLQkweDE5LCAweDk5LCAweDU5LCAweGQ5LCAweDM5LCAweGI5LCAweDc5LCAweGY5LAotCTB4MDUsIDB4ODUsIDB4NDUsIDB4YzUsIDB4MjUsIDB4YTUsIDB4NjUsIDB4ZTUsCi0JMHgxNSwgMHg5NSwgMHg1NSwgMHhkNSwgMHgzNSwgMHhiNSwgMHg3NSwgMHhmNSwKLQkweDBkLCAweDhkLCAweDRkLCAweGNkLCAweDJkLCAweGFkLCAweDZkLCAweGVkLAotCTB4MWQsIDB4OWQsIDB4NWQsIDB4ZGQsIDB4M2QsIDB4YmQsIDB4N2QsIDB4ZmQsCi0JMHgwMywgMHg4MywgMHg0MywgMHhjMywgMHgyMywgMHhhMywgMHg2MywgMHhlMywKLQkweDEzLCAweDkzLCAweDUzLCAweGQzLCAweDMzLCAweGIzLCAweDczLCAweGYzLAotCTB4MGIsIDB4OGIsIDB4NGIsIDB4Y2IsIDB4MmIsIDB4YWIsIDB4NmIsIDB4ZWIsCi0JMHgxYiwgMHg5YiwgMHg1YiwgMHhkYiwgMHgzYiwgMHhiYiwgMHg3YiwgMHhmYiwKLQkweDA3LCAweDg3LCAweDQ3LCAweGM3LCAweDI3LCAweGE3LCAweDY3LCAweGU3LAotCTB4MTcsIDB4OTcsIDB4NTcsIDB4ZDcsIDB4MzcsIDB4YjcsIDB4NzcsIDB4ZjcsCi0JMHgwZiwgMHg4ZiwgMHg0ZiwgMHhjZiwgMHgyZiwgMHhhZiwgMHg2ZiwgMHhlZiwKLQkweDFmLCAweDlmLCAweDVmLCAweGRmLCAweDNmLCAweGJmLCAweDdmLCAweGZmCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoZ2lnYXNldF9pbnZ0YWIpOwotCiB2b2lkIGdpZ2FzZXRfZGJnX2J1ZmZlcihlbnVtIGRlYnVnbGV2ZWwgbGV2ZWwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywKIAkJCXNpemVfdCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZikKIHsKQEAgLTM5MywxNiArMzU2LDE3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpOwotCXN0YXRpYyBzdHJ1Y3QgY2FyZHN0YXRlICpyZXQgPSBOVUxMOworCXN0cnVjdCBjYXJkc3RhdGUgKnJldCA9IE5VTEw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGRydi0+bWlub3JzOyArK2kpIHsKIAkJaWYgKCEoZHJ2LT5mbGFnc1tpXSAmIFZBTElEX01JTk9SKSkgewotCQkJZHJ2LT5mbGFnc1tpXSA9IFZBTElEX01JTk9SOwotCQkJcmV0ID0gZHJ2LT5jcyArIGk7Ci0JCX0KLQkJaWYgKHJldCkKKwkJCWlmICh0cnlfbW9kdWxlX2dldChkcnYtPm93bmVyKSkgeworCQkJCWRydi0+ZmxhZ3NbaV0gPSBWQUxJRF9NSU5PUjsKKwkJCQlyZXQgPSBkcnYtPmNzICsgaTsKKwkJCX0KIAkJCWJyZWFrOworCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRydi0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CkBAIC00MTMsNiArMzc3LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBnaWdhc2V0X2RyaXZlciAqZHJ2ID0gY3MtPmRyaXZlcjsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2LT5sb2NrLCBmbGFncyk7CisJaWYgKGRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSAmIFZBTElEX01JTk9SKQorCQltb2R1bGVfcHV0KGRydi0+b3duZXIpOwogCWRydi0+ZmxhZ3NbY3MtPm1pbm9yX2luZGV4XSA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2LT5sb2NrLCBmbGFncyk7CiB9CkBAIC02MTYsNyArNTgyLDcgQEAKIAl9IGVsc2UgaWYgKChiY3MtPnNrYiA9IGRldl9hbGxvY19za2IoU0JVRlNJWkUgKyBIV19IRFJfTEVOKSkgIT0gTlVMTCkKIAkJc2tiX3Jlc2VydmUoYmNzLT5za2IsIEhXX0hEUl9MRU4pOwogCWVsc2UgewotCQl3YXJuKCJjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKKwkJd2FybigiY291bGQgbm90IGFsbG9jYXRlIHNrYiIpOwogCQliY3MtPmlucHV0c3RhdGUgfD0gSU5TX3NraXBfZnJhbWU7CiAJfQogCkBAIC02NjksMTcgKzYzNSwyNSBAQAogCWludCBpOwogCiAJZ2lnX2RiZyhERUJVR19JTklULCAiYWxsb2NhdGluZyBjcyIpOwotCWNzID0gYWxsb2NfY3MoZHJ2KTsKLQlpZiAoIWNzKQotCQlnb3RvIGVycm9yOworCWlmICghKGNzID0gYWxsb2NfY3MoZHJ2KSkpIHsKKwkJZXJyKCJtYXhpbXVtIG51bWJlciBvZiBkZXZpY2VzIGV4Y2VlZGVkIik7CisJCXJldHVybiBOVUxMOworCX0KKwltdXRleF9pbml0KCZjcy0+bXV0ZXgpOworCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CisKIAlnaWdfZGJnKERFQlVHX0lOSVQsICJhbGxvY2F0aW5nIGJjc1swLi4lZF0iLCBjaGFubmVscyAtIDEpOwogCWNzLT5iY3MgPSBrbWFsbG9jKGNoYW5uZWxzICogc2l6ZW9mKHN0cnVjdCBiY19zdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmICghY3MtPmJjcykKKwlpZiAoIWNzLT5iY3MpIHsKKwkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CiAJCWdvdG8gZXJyb3I7CisJfQogCWdpZ19kYmcoREVCVUdfSU5JVCwgImFsbG9jYXRpbmcgaW5idWYiKTsKIAljcy0+aW5idWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5idWZfdCksIEdGUF9LRVJORUwpOwotCWlmICghY3MtPmluYnVmKQorCWlmICghY3MtPmluYnVmKSB7CisJCWVycigib3V0IG9mIG1lbW9yeSIpOwogCQlnb3RvIGVycm9yOworCX0KIAogCWNzLT5jc19pbml0ID0gMDsKIAljcy0+Y2hhbm5lbHMgPSBjaGFubmVsczsKQEAgLTY5MSw4ICs2NjUsNiBAQAogCXNwaW5fbG9ja19pbml0KCZjcy0+ZXZfbG9jayk7CiAJY3MtPmV2X3RhaWwgPSAwOwogCWNzLT5ldl9oZWFkID0gMDsKLQltdXRleF9pbml0KCZjcy0+bXV0ZXgpOwotCW11dGV4X2xvY2soJmNzLT5tdXRleCk7CiAKIAl0YXNrbGV0X2luaXQoJmNzLT5ldmVudF90YXNrbGV0LCAmZ2lnYXNldF9oYW5kbGVfZXZlbnQsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGNzKTsKQEAgLTcyMSw4ICs2OTMsMTAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsczsgKytpKSB7CiAJCWdpZ19kYmcoREVCVUdfSU5JVCwgInNldHRpbmcgdXAgYmNzWyVkXS5yZWFkIiwgaSk7Ci0JCWlmICghZ2lnYXNldF9pbml0YmNzKGNzLT5iY3MgKyBpLCBjcywgaSkpCisJCWlmICghZ2lnYXNldF9pbml0YmNzKGNzLT5iY3MgKyBpLCBjcywgaSkpIHsKKwkJCWVycigiY291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWwgJWQgZGF0YSIsIGkpOwogCQkJZ290byBlcnJvcjsKKwkJfQogCX0KIAogCSsrY3MtPmNzX2luaXQ7CkBAIC03NTcsOCArNzMxLDEwIEBACiAJbWFrZV92YWxpZChjcywgVkFMSURfSUQpOwogCSsrY3MtPmNzX2luaXQ7CiAJZ2lnX2RiZyhERUJVR19JTklULCAic2V0dGluZyB1cCBodyIpOwotCWlmICghY3MtPm9wcy0+aW5pdGNzaHcoY3MpKQorCWlmICghY3MtPm9wcy0+aW5pdGNzaHcoY3MpKSB7CisJCWVycigiY291bGQgbm90IGFsbG9jYXRlIGRldmljZSBzcGVjaWZpYyBkYXRhIik7CiAJCWdvdG8gZXJyb3I7CisJfQogCiAJKytjcy0+Y3NfaW5pdDsKIApAQCAtNzgwLDggKzc1Niw4IEBACiAJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCXJldHVybiBjczsKIAotZXJyb3I6CWlmIChjcykKLQkJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCWdpZ19kYmcoREVCVUdfSU5JVCwgImZhaWxlZCIpOwogCWdpZ2FzZXRfZnJlZWNzKGNzKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTEwNzcsNyArMTA1Myw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAogCWdpZ2FzZXRfaWZfZnJlZWRyaXZlcihkcnYpOwotCW1vZHVsZV9wdXQoZHJ2LT5vd25lcik7CiAKIAlrZnJlZShkcnYtPmNzKTsKIAlrZnJlZShkcnYtPmZsYWdzKTsKQEAgLTExMDksMTAgKzEwODQsNiBAQAogCWlmICghZHJ2KQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQotCQlnb3RvIG91dDE7Ci0KLQlkcnYtPmNzID0gTlVMTDsKIAlkcnYtPmhhdmVfdHR5ID0gMDsKIAlkcnYtPm1pbm9yID0gbWlub3I7CiAJZHJ2LT5taW5vcnMgPSBtaW5vcnM7CkBAIC0xMTI0LDExICsxMDk1LDExIEBACiAKIAlkcnYtPmNzID0ga21hbGxvYyhtaW5vcnMgKiBzaXplb2YgKmRydi0+Y3MsIEdGUF9LRVJORUwpOwogCWlmICghZHJ2LT5jcykKLQkJZ290byBvdXQyOworCQlnb3RvIGVycm9yOwogCiAJZHJ2LT5mbGFncyA9IGttYWxsb2MobWlub3JzICogc2l6ZW9mICpkcnYtPmZsYWdzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRydi0+ZmxhZ3MpCi0JCWdvdG8gb3V0MzsKKwkJZ290byBlcnJvcjsKIAogCWZvciAoaSA9IDA7IGkgPCBtaW5vcnM7ICsraSkgewogCQlkcnYtPmZsYWdzW2ldID0gMDsKQEAgLTExNDUsMTEgKzExMTYsOCBAQAogCiAJcmV0dXJuIGRydjsKIAotb3V0MzoKK2Vycm9yOgogCWtmcmVlKGRydi0+Y3MpOwotb3V0MjoKLQltb2R1bGVfcHV0KG93bmVyKTsKLW91dDE6CiAJa2ZyZWUoZHJ2KTsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaCBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaAppbmRleCAwNjI5OGNjLi5hMDMxN2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmgKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oCkBAIC04NzYsMTAgKzg3Niw2IEBACiAJfQogfQogCi0KLS8qIGJpdHdpc2UgYnl0ZSBpbnZlcnNpb24gdGFibGUgKi8KLWV4dGVybiBfX3U4IGdpZ2FzZXRfaW52dGFiW107CS8qIGluIGNvbW1vbi5jICovCi0KIC8qIGFwcGVuZCByZWNlaXZlZCBieXRlcyB0byBpbmJ1ZiAqLwogaW50IGdpZ2FzZXRfZmlsbF9pbmJ1ZihzdHJ1Y3QgaW5idWZfdCAqaW5idWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKIAkJICAgICAgIHVuc2lnbmVkIG51bWJ5dGVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKaW5kZXggN2VkZWEwMS4uNDU4YjY0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogc3RhdGljIGludCAgaWZfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQgaWZfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBpZl91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotc3RhdGljIHZvaWQgaWZfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZCk7CitzdGF0aWMgdm9pZCBpZl9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CiBzdGF0aWMgaW50ICBpZl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50ICBpZl90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CkBAIC00OTAsNyArNDkwLDcgQEAKIAltdXRleF91bmxvY2soJmNzLT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlmX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGQpCitzdGF0aWMgdm9pZCBpZl9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjczsKIAl1bnNpZ25lZCBpbnQgaWZsYWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pc29jZGF0YS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaXNvY2RhdGEuYwppbmRleCA4NjY3ZGFhLi5kZjk4OGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pc29jZGF0YS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2lzb2NkYXRhLmMKQEAgLTE0LDYgKzE0LDcgQEAKIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKICNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KIAogLyogYWNjZXNzIG1ldGhvZHMgZm9yIGlzb3didWZfdCAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtNDg3LDcgKzQ4OCw3IEBACiAJZ2lnX2RiZyhERUJVR19TVFJFQU0sICJwdXQgJWQgYnl0ZXMiLCBjb3VudCk7CiAJd3JpdGUgPSBhdG9taWNfcmVhZCgmaXdiLT53cml0ZSk7CiAJZG8gewotCQljID0gZ2lnYXNldF9pbnZ0YWJbKmluKytdOworCQljID0gYml0cmV2OCgqaW4rKyk7CiAJCWl3Yi0+ZGF0YVt3cml0ZSsrXSA9IGM7CiAJCXdyaXRlICU9IEJBU19PVVRCVUZTSVpFOwogCX0gd2hpbGUgKC0tY291bnQgPiAwKTsKQEAgLTg3Niw3ICs4NzcsNyBAQAogCXdoaWxlIChjb3VudCA+IDApIHsKIAkJZHN0ID0gc2tiX3B1dChza2IsIGNvdW50IDwgZG9ieXRlcyA/IGNvdW50IDogZG9ieXRlcyk7CiAJCXdoaWxlIChjb3VudCA+IDAgJiYgZG9ieXRlcyA+IDApIHsKLQkJCSpkc3QrKyA9IGdpZ2FzZXRfaW52dGFiWypzcmMrK107CisJCQkqZHN0KysgPSBiaXRyZXY4KCpzcmMrKyk7CiAJCQljb3VudC0tOwogCQkJZG9ieXRlcy0tOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1fY3MuYwppbmRleCBmZDVkNzM2Li5lYmExMDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMKQEAgLTEyMSwxMCArMTIxLDkgQEAKICAgICBwX2Rldi0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLwotICAgIGxvY2FsID0ga21hbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisgICAgbG9jYWwgPSBremFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKICAgICBpZiAoIWxvY2FsKQogICAgICAgICBnb3RvIGVycjsKLSAgICBtZW1zZXQobG9jYWwsIDAsIHNpemVvZihsb2NhbF9pbmZvX3QpKTsKICAgICBwX2Rldi0+cHJpdiA9IGxvY2FsOwogCiAgICAgcmV0dXJuIGF2bWNzX2NvbmZpZyhwX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxLmMKaW5kZXggZGEyNzI5Mi4uN2E2OWExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjEuYwpAQCAtNjUsMTggKzY1LDE1IEBACiAJYXZtY3RybF9pbmZvICpjaW5mbzsKIAlpbnQgaTsKIAotCWNhcmQgPSBrbWFsbG9jKHNpemVvZigqY2FyZCksIEdGUF9LRVJORUwpOworCWNhcmQgPSBremFsbG9jKHNpemVvZigqY2FyZCksIEdGUF9LRVJORUwpOwogCWlmICghY2FyZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQltZW1zZXQoY2FyZCwgMCwgc2l6ZW9mKCpjYXJkKSk7Ci0KLSAgICAgICAgY2luZm8gPSBrbWFsbG9jKHNpemVvZigqY2luZm8pICogbnJfY29udHJvbGxlcnMsIEdGUF9LRVJORUwpOworCWNpbmZvID0ga3phbGxvYyhzaXplb2YoKmNpbmZvKSAqIG5yX2NvbnRyb2xsZXJzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNpbmZvKSB7CiAJCWtmcmVlKGNhcmQpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KGNpbmZvLCAwLCBzaXplb2YoKmNpbmZvKSAqIG5yX2NvbnRyb2xsZXJzKTsKIAogCWNhcmQtPmN0cmxpbmZvID0gY2luZm87CiAJZm9yIChpID0gMDsgaSA8IG5yX2NvbnRyb2xsZXJzOyBpKyspIHsKQEAgLTcxOCwxMiArNzE1LDExIEBACiAJYXZtY2FyZF9kbWFpbmZvICpwOwogCXZvaWQgKmJ1ZjsKIAotCXAgPSBrbWFsbG9jKHNpemVvZihhdm1jYXJkX2RtYWluZm8pLCBHRlBfS0VSTkVMKTsKKwlwID0ga3phbGxvYyhzaXplb2YoYXZtY2FyZF9kbWFpbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBubyBtZW1vcnkuXG4iLCBuYW1lKTsKIAkJZ290byBlcnI7CiAJfQotCW1lbXNldChwLCAwLCBzaXplb2YoYXZtY2FyZF9kbWFpbmZvKSk7CiAKIAlwLT5yZWN2YnVmLnNpemUgPSByc2l6ZTsKIAlidWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCByc2l6ZSwgJnAtPnJlY3ZidWYuZG1hYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMKaW5kZXggZTQ3YzYwYi4uYzkyNTAyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS90MWlzYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vdDFpc2EuYwpAQCAtNTg0LDYgKzU4NCw3IEBACiB7CiAJaW50IGk7CiAKKwl1bnJlZ2lzdGVyX2NhcGlfZHJpdmVyKCZjYXBpX2RyaXZlcl90MWlzYSk7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9DQVJEUzsgaSsrKSB7CiAJCWlmICghaW9baV0pCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKaW5kZXggNjg1MWM2Mi4uZDgzNWU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RlYnVnLmMKQEAgLTc1NiwxNCArNzU2LDE0IEBACiAKICAgICBkYXRhX2xlbmd0aCAtPSA5OwogCi0gICAgaWYgKCh0b19jb3B5ID0gTUlOKHN0cmxlbihjbGllbnRzW2lkXS5kcnZOYW1lKSwgZGF0YV9sZW5ndGgtMSkpKSB7CisgICAgaWYgKCh0b19jb3B5ID0gbWluKHN0cmxlbihjbGllbnRzW2lkXS5kcnZOYW1lKSwgKHNpemVfdCkoZGF0YV9sZW5ndGgtMSkpKSkgewogICAgICAgbWVtY3B5IChwLCBjbGllbnRzW2lkXS5kcnZOYW1lLCB0b19jb3B5KTsKICAgICAgIHAgKz0gdG9fY29weTsKICAgICAgIGRhdGFfbGVuZ3RoIC09IHRvX2NvcHk7CiAgICAgICBpZiAoKGRhdGFfbGVuZ3RoID49IDQpICYmIGNsaWVudHNbaWRdLmhEYmctPmRydlRhZ1swXSkgewogICAgICAgICAqcCsrID0gJygnOwogICAgICAgICBkYXRhX2xlbmd0aCAtPSAxOwotICAgICAgICBpZiAoKHRvX2NvcHkgPSBNSU4oc3RybGVuKGNsaWVudHNbaWRdLmhEYmctPmRydlRhZyksIGRhdGFfbGVuZ3RoLTIpKSkgeworICAgICAgICBpZiAoKHRvX2NvcHkgPSBtaW4oc3RybGVuKGNsaWVudHNbaWRdLmhEYmctPmRydlRhZyksIChzaXplX3QpKGRhdGFfbGVuZ3RoLTIpKSkpIHsKICAgICAgICAgICBtZW1jcHkgKHAsIGNsaWVudHNbaWRdLmhEYmctPmRydlRhZywgdG9fY29weSk7CiAgICAgICAgICAgcCArPSB0b19jb3B5OwogICAgICAgICAgIGRhdGFfbGVuZ3RoIC09IHRvX2NvcHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGkuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaS5jCmluZGV4IDA2MTdkN2MuLmUxZGY4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaS5jCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICBpID0gdGhpcy0+WEN1cnJlbnQ7CiAgICAgWCA9IFBUUl9YKGEsdGhpcyk7CiAgICAgd2hpbGUoaTx0aGlzLT5YTnVtICYmIGxlbmd0aDwyNzApIHsKLSAgICAgIGNsZW5ndGggPSBNSU4oKHdvcmQpKDI3MC1sZW5ndGgpLFhbaV0uUExlbmd0aC10aGlzLT5YT2Zmc2V0KTsKKyAgICAgIGNsZW5ndGggPSBtaW4oKHdvcmQpKDI3MC1sZW5ndGgpLCh3b3JkKShYW2ldLlBMZW5ndGgtdGhpcy0+WE9mZnNldCkpOwogICAgICAgYS0+cmFtX291dF9idWZmZXIoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICZSZXFPdXQtPlhCdWZmZXIuUFtsZW5ndGhdLAogICAgICAgICAgICAgICAgICAgICAgICAgUFRSX1AoYSx0aGlzLCZYW2ldLlBbdGhpcy0+WE9mZnNldF0pLApAQCAtNjIyLDcgKzYyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhLT5zdHJlYW1fYnVmZmVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbmFsLCBOVUxMLCBOVUxMKTsKICAgICAgICAgfQotICAgICAgICBJb0FkYXB0ZXItPlJCdWZmZXIubGVuZ3RoID0gTUlOKE1MZW5ndGgsIDI3MCk7CisgICAgICAgIElvQWRhcHRlci0+UkJ1ZmZlci5sZW5ndGggPSBtaW4oTUxlbmd0aCwgKHdvcmQpMjcwKTsKICAgICAgICAgaWYgKElvQWRhcHRlci0+UkJ1ZmZlci5sZW5ndGggIT0gTUxlbmd0aCkgewogICAgICAgICAgIHRoaXMtPmNvbXBsZXRlID0gMDsKICAgICAgICAgfSBlbHNlIHsKQEAgLTY3Niw5ICs2NzYsOSBAQAogICAgICAgICB0aGlzLT5SQ3VycmVudCsrOwogICAgICAgfQogICAgICAgaWYgKGNtYSkgewotICAgICAgICBjbGVuZ3RoID0gTUlOKE1MZW5ndGgsIFJbdGhpcy0+UkN1cnJlbnRdLlBMZW5ndGgtdGhpcy0+Uk9mZnNldCk7CisgICAgICAgIGNsZW5ndGggPSBtaW4oTUxlbmd0aCwgKHdvcmQpKFJbdGhpcy0+UkN1cnJlbnRdLlBMZW5ndGgtdGhpcy0+Uk9mZnNldCkpOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgY2xlbmd0aCA9IE1JTihhLT5yYW1faW53KGEsICZSQnVmZmVyLT5sZW5ndGgpLW9mZnNldCwKKyAgICAgICAgY2xlbmd0aCA9IG1pbihhLT5yYW1faW53KGEsICZSQnVmZmVyLT5sZW5ndGgpLW9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICBSW3RoaXMtPlJDdXJyZW50XS5QTGVuZ3RoLXRoaXMtPlJPZmZzZXQpOwogICAgICAgfQogICAgICAgaWYoUlt0aGlzLT5SQ3VycmVudF0uUCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzbWFpbi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzbWFpbi5jCmluZGV4IGRhZTJlODMuLjkxZmM5MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc21haW4uYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNtYWluLmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCXVuc2lnbmVkIGNoYXIgbGluZVsxNjBdOwogCiAJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLQl2c3ByaW50ZihsaW5lLCBmb3JtYXQsIGFyZ3MpOworCXZzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksIGZvcm1hdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzXG4iLCBEUklWRVJMTkFNRSwgbGluZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vaW8uYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pby5jCmluZGV4IDRhMjdlMjMuLjZmZDliMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pby5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pby5jCkBAIC0yNjIsNyArMjYyLDcgQEAKICAgICBjYXNlIElESV9TWU5DX1JFUV9YRElfR0VUX0NBUElfUEFSQU1TOiB7CiAgICAgICAgZGl2YV94ZGlfZ2V0X2NhcGlfcGFyYW1ldGVyc190IHBybXMsICpwSSA9ICZzeW5jUmVxLT54ZGlfY2FwaV9wcm1zLmluZm87CiAgICAgICAgbWVtc2V0ICgmcHJtcywgMHgwMCwgc2l6ZW9mKHBybXMpKTsKLSAgICAgICBwcm1zLnN0cnVjdHVyZV9sZW5ndGggPSBNSU4oc2l6ZW9mKHBybXMpLCBwSS0+c3RydWN0dXJlX2xlbmd0aCk7CisgICAgICAgcHJtcy5zdHJ1Y3R1cmVfbGVuZ3RoID0gbWluX3Qoc2l6ZV90LCBzaXplb2YocHJtcyksIHBJLT5zdHJ1Y3R1cmVfbGVuZ3RoKTsKICAgICAgICBtZW1zZXQgKHBJLCAweDAwLCBwSS0+c3RydWN0dXJlX2xlbmd0aCk7CiAgICAgICAgcHJtcy5mbGFnX2R5bmFtaWNfbDFfZG93biAgICA9IChJb0FkYXB0ZXItPmNhcGlfY2ZnLmNmZ18xICYgXAogICAgICAgICAgRElWQV9YRElfQ0FQSV9DRkdfMV9EWU5BTUlDX0wxX09OKSA/IDEgOiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2lzdHJlYW0uYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pc3RyZWFtLmMKaW5kZXggMjMxMzk2Ni4uMThmODc5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2lzdHJlYW0uYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vaXN0cmVhbS5jCkBAIC05Miw3ICs5Miw3IEBACiAgICAgcmV0dXJuICgtMSk7IC8qIHdhcyBub3QgYWJsZSB0byB3cml0ZSAgICAgICAqLwogICAgYnJlYWs7ICAgICAvKiBvbmx5IHBhcnQgb2YgbWVzc2FnZSB3YXMgd3JpdHRlbiAqLwogICB9Ci0gIHRvX3dyaXRlID0gTUlOKGxlbmd0aCwgRElWQV9ERklGT19EQVRBX1NaKTsKKyAgdG9fd3JpdGUgPSBtaW4obGVuZ3RoLCBESVZBX0RGSUZPX0RBVEFfU1opOwogICBpZiAodG9fd3JpdGUpIHsKICAgIGEtPnJhbV9vdXRfYnVmZmVyIChhLAogI2lmZGVmIFBMQVRGT1JNX0dUXzMyQklUCkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICByZXR1cm4gKC0xKTsgLyogd2FzIG5vdCBhYmxlIHRvIHJlYWQgKi8KICAgIGJyZWFrOwogICB9Ci0gIHRvX3JlYWQgPSBNSU4obWF4X2xlbmd0aCwgdG1wWzFdKTsKKyAgdG9fcmVhZCA9IG1pbihtYXhfbGVuZ3RoLCAoaW50KXRtcFsxXSk7CiAgIGlmICh0b19yZWFkKSB7CiAgICBhLT5yYW1faW5fYnVmZmVyKGEsCiAjaWZkZWYgUExBVEZPUk1fR1RfMzJCSVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9wbGF0Zm9ybS5oIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3BsYXRmb3JtLmgKaW5kZXggYTY2ODM2Yy4uMjQ0NDgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3BsYXRmb3JtLmgKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3BsYXRmb3JtLmgKQEAgLTgzLDE0ICs4Myw2IEBACiAjZGVmaW5lCU5VTEwJKCh2b2lkICopIDApCiAjZW5kaWYKIAotI2lmbmRlZglNSU4KLSNkZWZpbmUgTUlOKGEsYikJKChhKT4oYikgPyAoYikgOiAoYSkpCi0jZW5kaWYKLQotI2lmbmRlZglNQVgKLSNkZWZpbmUgTUFYKGEsYikJKChhKT4oYikgPyAoYSkgOiAoYikpCi0jZW5kaWYKLQogI2lmbmRlZglmYXIKICNkZWZpbmUgZmFyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnIGIvZHJpdmVycy9pc2RuL2hpc2F4L0tjb25maWcKaW5kZXggY2ZkMjcxOC4uMzRhYjVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L0tjb25maWcKQEAgLTExMCw3ICsxMTAsNyBAQAogCiBjb25maWcgSElTQVhfVEVMRVNQQ0kKIAlib29sICJUZWxlcyBQQ0kiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCBGUlYpKQorCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgVGVsZXMgUENJLgogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuSGlTYXg+IG9uIGhvdyB0byBjb25maWd1cmUgaXQuCkBAIC0yMzgsNyArMjM4LDcgQEAKIAogY29uZmlnIEhJU0FYX05FVEpFVAogCWJvb2wgIk5FVGpldCBjYXJkIgotCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIE5ldEpldCBmcm9tIFRyYXZlcnNlCiAJICBUZWNobm9sb2dpZXMuCkBAIC0yNDksNyArMjQ5LDcgQEAKIAogY29uZmlnIEhJU0FYX05FVEpFVF9VCiAJYm9vbCAiTkVUc3BpZGVyIFUgY2FyZCIKLQlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IEZSVikpCisJZGVwZW5kcyBvbiBQQ0kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIHRoZSBOZXRzcGlkZXIgVSBpbnRlcmZhY2UgSVNETiBjYXJkCiAJICBmcm9tIFRyYXZlcnNlIFRlY2hub2xvZ2llcy4KQEAgLTMxNyw3ICszMTcsNyBAQAogCiBjb25maWcgSElTQVhfSEZDX1BDSQogCWJvb2wgIkhGQyBQQ0ktQnVzIGNhcmRzIgotCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIEhGQy1TIFBDSSAyQkRTMCBiYXNlZCBjYXJkcy4KIApAQCAtMzQ0LDE4ICszNDQsMTEgQEAKIAogY29uZmlnIEhJU0FYX0VOVEVSTk9XX1BDSQogCWJvb2wgIkZvcm11bGEtbiBlbnRlcjpub3cgUENJIGNhcmQiCi0JZGVwZW5kcyBvbiBISVNBWF9ORVRKRVQgJiYgUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIEhJU0FYX05FVEpFVCAmJiBQQ0kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIHRoZSBGb3JtdWxhLW4gZW50ZXI6bm93IFBDSQogCSAgSVNETiBjYXJkLgogCi1jb25maWcgSElTQVhfQU1ENzkzMAotCWJvb2wgIkFtNzkzMCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBTUEFSQyAmJiBCUk9LRU4KLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIEFNRDc5MzAgY2hpcHMgb24gc29tZSBTUEFSQ3MuCi0JICBUaGlzIGNvZGUgaXMgbm90IGZpbmlzaGVkIHlldC4KLQogZW5kaWYKIAogaWYgSVNETl9EUlZfSElTQVgKQEAgLTQwMiw2ICszOTUsNyBAQAogCXRyaXN0YXRlICJTVDU0ODEgVVNCIElTRE4gbW9kZW0gKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IENSQ19DQ0lUVAorCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIFNUNTQ4MSBiYXNlZCBVU0IgSVNETiBhZGFwdGVycywKIAkgIGUuZy4gdGhlIEJlV2FuIEdhemVsIDEyOCBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMKaW5kZXggODc2ZmVjNi4uOWU3MGMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMKQEAgLTEyMywxMSArMTIzLDEwIEBACiAgICAgREVCVUcoMCwgImF2bWExY3NfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KLSAgICBsb2NhbCA9IGttYWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOworICAgIGxvY2FsID0ga3phbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFsb2NhbCkKIAlyZXR1cm4gLUVOT01FTTsKIAotICAgIG1lbXNldChsb2NhbCwgMCwgc2l6ZW9mKGxvY2FsX2luZm9fdCkpOwogICAgIHBfZGV2LT5wcml2ID0gbG9jYWw7CiAKICAgICAvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYwppbmRleCBjZWRlNzJjLi4xN2VjMGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCkBAIC0yMjcsMTQgKzIyNyw2IEBACiAjZGVmaW5lIERFRkFVTFRfQ0ZHIHs1LDB4MkUwLDAsMH0KICNlbmRpZgogCi0KLSNpZmRlZiBDT05GSUdfSElTQVhfQU1ENzkzMAotI3VuZGVmIERFRkFVTFRfQ0FSRAotI3VuZGVmIERFRkFVTFRfQ0ZHCi0jZGVmaW5lIERFRkFVTFRfQ0FSRCBJU0ROX0NUWVBFX0FNRDc5MzAKLSNkZWZpbmUgREVGQVVMVF9DRkcgezEyLDB4M2UwLDAsMH0KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0hJU0FYX05JQ0NZCiAjdW5kZWYgREVGQVVMVF9DQVJECiAjdW5kZWYgREVGQVVMVF9DRkcKQEAgLTU0NSwxMCArNTM3LDYgQEAKIGV4dGVybiBpbnQgc2V0dXBfaGZjc3goc3RydWN0IElzZG5DYXJkICpjYXJkKTsKICNlbmRpZgogCi0jaWYgQ0FSRF9BTUQ3OTMwCi1leHRlcm4gaW50IHNldHVwX2FtZDc5MzAoc3RydWN0IElzZG5DYXJkICpjYXJkKTsKLSNlbmRpZgotCiAjaWYgQ0FSRF9OSUNDWQogZXh0ZXJuIGludCBzZXR1cF9uaWNjeShzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpOwogI2VuZGlmCkBAIC04NjksMTQgKzg1NywxMyBAQAogCXN0cnVjdCBJc2RuQ2FyZCAqY2FyZCA9IGNhcmRzICsgY2FyZG5yOwogCXN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjczsKIAotCWNzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IElzZG5DYXJkU3RhdGUpLCBHRlBfQVRPTUlDKTsKKwljcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBJc2RuQ2FyZFN0YXRlKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFjcykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiSGlTYXg6IE5vIG1lbW9yeSBmb3IgSXNkbkNhcmRTdGF0ZShjYXJkICVkKVxuIiwKIAkJICAgICAgIGNhcmRuciArIDEpOwogCQlnb3RvIG91dDsKIAl9Ci0JbWVtc2V0KGNzLCAwLCBzaXplb2Yoc3RydWN0IElzZG5DYXJkU3RhdGUpKTsKIAljYXJkLT5jcyA9IGNzOwogCXNwaW5fbG9ja19pbml0KCZjcy0+c3RhdGxvY2spOwogCXNwaW5fbG9ja19pbml0KCZjcy0+bG9jayk7CkBAIC0xMDY0LDExICsxMDUxLDYgQEAKIAkJcmV0ID0gc2V0dXBfbmljY3koY2FyZCk7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgQ0FSRF9BTUQ3OTMwCi0JY2FzZSBJU0ROX0NUWVBFX0FNRDc5MzA6Ci0JCXJldCA9IHNldHVwX2FtZDc5MzAoY2FyZCk7Ci0JCWJyZWFrOwotI2VuZGlmCiAjaWYgQ0FSRF9JU1VSRgogCWNhc2UgSVNETl9DVFlQRV9JU1VSRjoKIAkJcmV0ID0gc2V0dXBfaXN1cmYoY2FyZCk7CkBAIC0xNDM3LDcgKzE0MTksNiBAQAogCQkJYnJlYWs7CiAJCWNhc2UgSVNETl9DVFlQRV9FTFNBX1BDSToKIAkJY2FzZSBJU0ROX0NUWVBFX05FVEpFVF9TOgotCQljYXNlIElTRE5fQ1RZUEVfQU1ENzkzMDoKIAkJY2FzZSBJU0ROX0NUWVBFX1RFTEVTUENJOgogCQljYXNlIElTRE5fQ1RZUEVfVzY2OTI6CiAJCWNhc2UgSVNETl9DVFlQRV9ORVRKRVRfVToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jCmluZGV4IDNkYWNmZmYuLjZlZWJlYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYwpAQCAtMTEyMSw3ICsxMTIxLDExIEBACiAJCQlieXRlY250ID0gMzI7CiAJCX0KIAl9CisKKyNpZmRlZiBfX0lTQVBOUF9fCiByZWFkeToKKyNlbmRpZgorCiAJcHJpbnRrKEtFUk5fSU5GTwogCQkiRGl2YTogJXMgY2FyZCBjb25maWd1cmVkIGF0ICUjbHggSVJRICVkXG4iLAogCQkoY3MtPnN1YnR5cCA9PSBESVZBX1BDSSkgPyAiUENJIiA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYwppbmRleCA0ZTE4MGQyLi43OWFiOWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKQEAgLTE0Niw5ICsxNDYsOCBAQAogICAgIERFQlVHKDAsICJlbHNhX2NzX2F0dGFjaCgpXG4iKTsKIAogICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCi0gICAgbG9jYWwgPSBrbWFsbG9jKHNpemVvZihsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKyAgICBsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogICAgIGlmICghbG9jYWwpIHJldHVybiAtRU5PTUVNOwotICAgIG1lbXNldChsb2NhbCwgMCwgc2l6ZW9mKGxvY2FsX2luZm9fdCkpOwogCiAgICAgbG9jYWwtPnBfZGV2ID0gbGluazsKICAgICBsaW5rLT5wcml2ID0gbG9jYWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZnNtLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZnNtLmMKaW5kZXggMGQ0NGEzZi4uMzRmYWRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2ZzbS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9mc20uYwpAQCAtMjYsMTIgKzI2LDEwIEBACiAJaW50IGk7CiAKIAlmc20tPmp1bXBtYXRyaXggPSAoRlNNRk5QVFIgKikKLQkJa21hbGxvYyhzaXplb2YgKEZTTUZOUFRSKSAqIGZzbS0+c3RhdGVfY291bnQgKiBmc20tPmV2ZW50X2NvdW50LCBHRlBfS0VSTkVMKTsKKwkJa3phbGxvYyhzaXplb2YgKEZTTUZOUFRSKSAqIGZzbS0+c3RhdGVfY291bnQgKiBmc20tPmV2ZW50X2NvdW50LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZzbS0+anVtcG1hdHJpeCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoZnNtLT5qdW1wbWF0cml4LCAwLCBzaXplb2YgKEZTTUZOUFRSKSAqIGZzbS0+c3RhdGVfY291bnQgKiBmc20tPmV2ZW50X2NvdW50KTsKLQogCWZvciAoaSA9IDA7IGkgPCBmbmNvdW50OyBpKyspIAogCQlpZiAoKGZubGlzdFtpXS5zdGF0ZT49ZnNtLT5zdGF0ZV9jb3VudCkgfHwgKGZubGlzdFtpXS5ldmVudD49ZnNtLT5ldmVudF9jb3VudCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRnNtTmV3IEVycm9yIGxpbmUgJWQgc3QoJWxkLyVsZCkgZXYoJWxkLyVsZClcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjNHM4c19sMS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmYzRzOHNfbDEuYwppbmRleCBkZTliMWE0Li5hMmZhNGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjNHM4c19sMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmM0czhzX2wxLmMKQEAgLTE1OTEsMTEgKzE1OTEsMTAgQEAKIAloZmM0czhzX3BhcmFtICpkcml2ZXJfZGF0YSA9IChoZmM0czhzX3BhcmFtICopIGVudC0+ZHJpdmVyX2RhdGE7CiAJaGZjNHM4c19odyAqaHc7CiAKLQlpZiAoIShodyA9IGttYWxsb2Moc2l6ZW9mKGhmYzRzOHNfaHcpLCBHRlBfQVRPTUlDKSkpIHsKKwlpZiAoIShodyA9IGt6YWxsb2Moc2l6ZW9mKGhmYzRzOHNfaHcpLCBHRlBfQVRPTUlDKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJObyBrbWVtIGZvciBIRkMtNFMvOFMgY2FyZFxuIik7CiAJCXJldHVybiAoZXJyKTsKIAl9Ci0JbWVtc2V0KGh3LCAwLCBzaXplb2YoaGZjNHM4c19odykpOwogCiAJaHctPnBkZXYgPSBwZGV2OwogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKaW5kZXggNWRiMGE4NS4uOGE0OGEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCkBAIC0xMjExLDcgKzEyMTEsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgKEhXX1RFU1RMT09QIHwgUkVRVUVTVCk6CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQkJCXN3aXRjaCAoKGludCkgYXJnKSB7CisJCQlzd2l0Y2ggKChsb25nKSBhcmcpIHsKIAkJCQljYXNlICgxKToKIAkJCQkJV3JpdGVfaGZjKGNzLCBIRkNQQ0lfQjFfU1NMLCAweDgwKTsJLyogdHggc2xvdCAqLwogCQkJCQlXcml0ZV9oZmMoY3MsIEhGQ1BDSV9CMV9SU0wsIDB4ODApOwkvKiByeCBzbG90ICovCkBAIC0xMjI5LDcgKzEyMjksNyBAQAogCQkJCWRlZmF1bHQ6CiAJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCQkJCWlmIChjcy0+ZGVidWcgJiBMMV9ERUJfV0FSTikKLQkJCQkJCWRlYnVnbDEoY3MsICJoZmNwY2lfbDFodyBsb29wIGludmFsaWQgJTR4IiwgKGludCkgYXJnKTsKKwkJCQkJCWRlYnVnbDEoY3MsICJoZmNwY2lfbDFodyBsb29wIGludmFsaWQgJTRseCIsIChsb25nKSBhcmcpOwogCQkJCQlyZXR1cm47CiAJCQl9CiAJCQljcy0+aHcuaGZjcGNpLnRybSB8PSAweDgwOwkvKiBlbmFibGUgSU9NLWxvb3AgKi8KQEAgLTE3MTEsOSArMTcxMSw5IEBACiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoY3MtPmh3LmhmY3BjaS5kZXYsIDB4ODAsICh1X2ludCkgdmlydF90b19idXMoY3MtPmh3LmhmY3BjaS5maWZvcykpOwogCQljcy0+aHcuaGZjcGNpLnBjaV9pbyA9IGlvcmVtYXAoKHVsb25nKSBjcy0+aHcuaGZjcGNpLnBjaV9pbywgMjU2KTsKIAkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIkhGQy1QQ0k6IGRlZmluZWQgYXQgbWVtICUjeCBmaWZvICUjeCglI3gpIElSUSAlZCBIWiAlZFxuIiwKLQkJICAgICAgICh1X2ludCkgY3MtPmh3LmhmY3BjaS5wY2lfaW8sCi0JCSAgICAgICAodV9pbnQpIGNzLT5ody5oZmNwY2kuZmlmb3MsCisJCSAgICAgICAiSEZDLVBDSTogZGVmaW5lZCBhdCBtZW0gJXAgZmlmbyAlcCglI3gpIElSUSAlZCBIWiAlZFxuIiwKKwkJICAgICAgIGNzLT5ody5oZmNwY2kucGNpX2lvLAorCQkgICAgICAgY3MtPmh3LmhmY3BjaS5maWZvcywKIAkJICAgICAgICh1X2ludCkgdmlydF90b19idXMoY3MtPmh3LmhmY3BjaS5maWZvcyksCiAJCSAgICAgICBjcy0+aXJxLCBIWik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMKaW5kZXggNzEwNWIwNC4uNWE2OTg5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jCkBAIC0xNDgxLDkgKzE0ODEsOCBAQAogCQkJaWZhY2UgPSBpZmFjZV91c2VkOwogCQkJaWYgKCEKIAkJCSAgICAoY29udGV4dCA9Ci0JCQkgICAgIGttYWxsb2Moc2l6ZW9mKGhmY3VzYl9kYXRhKSwgR0ZQX0tFUk5FTCkpKQorCQkJICAgICBremFsbG9jKHNpemVvZihoZmN1c2JfZGF0YSksIEdGUF9LRVJORUwpKSkKIAkJCQlyZXR1cm4gKC1FTk9NRU0pOwkvKiBnb3Qgbm8gbWVtICovCi0JCQltZW1zZXQoY29udGV4dCwgMCwgc2l6ZW9mKGhmY3VzYl9kYXRhKSk7CiAKIAkJCWVwID0gaWZhY2UtPmVuZHBvaW50OwogCQkJdmNmID0gdmFsaWRjb25mW3NtYWxsX21hdGNoXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmgKaW5kZXggMTU5YzU4OS4uM2YxMTM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmgKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmgKQEAgLTExMzksMTIgKzExMzksNiBAQAogI2RlZmluZSAgQ0FSRF9IRkNfU1ggMAogI2VuZGlmCiAKLSNpZmRlZiAgQ09ORklHX0hJU0FYX0FNRDc5MzAKLSNkZWZpbmUgQ0FSRF9BTUQ3OTMwIDEKLSNlbHNlCi0jZGVmaW5lIENBUkRfQU1ENzkzMCAwCi0jZW5kaWYKLQogI2lmZGVmCUNPTkZJR19ISVNBWF9OSUNDWQogI2RlZmluZQlDQVJEX05JQ0NZIDEKICNpZm5kZWYgSVNETl9DSElQX0lTQUMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9mY3BjaXBucC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMKaW5kZXggZjZkYjU1YS4uOWUwODhmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2ZjcGNpcG5wLmMKQEAgLTg0MSwxMiArODQxLDEwIEBACiAJc3RydWN0IGhpc2F4X2JfaWYgKmJfaWZbMl07CiAJaW50IGk7CiAKLQlhZGFwdGVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZyaXR6X2FkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKKwlhZGFwdGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZyaXR6X2FkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkYXB0ZXIpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KGFkYXB0ZXIsIDAsIHNpemVvZihzdHJ1Y3QgZnJpdHpfYWRhcHRlcikpOwotCiAJYWRhcHRlci0+aXNhYy5oaXNheF9kX2lmLm93bmVyID0gVEhJU19NT0RVTEU7CiAJYWRhcHRlci0+aXNhYy5oaXNheF9kX2lmLmlmYy5wcml2ID0gJmFkYXB0ZXItPmlzYWM7CiAJYWRhcHRlci0+aXNhYy5oaXNheF9kX2lmLmlmYy5sMmwxID0gaXNhY19kX2wybDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXhfaXNhYy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4X2lzYWMuYwppbmRleCA4MWVhYzM0Li5kMGZlZmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXhfaXNhYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheF9pc2FjLmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogCWNoYXIgYnVmWzI1Nl07CiAJCiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQl2c3ByaW50ZihidWYsIGZtdCwgYXJncyk7CisJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7CiAJREJHKERCR19MMU0sICIlcyIsIGJ1Zik7CiAJdmFfZW5kKGFyZ3MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmhkbGMuYwppbmRleCBjYmRmNTRjLi4yNjhkY2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmhkbGMuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmhkbGMuYwpAQCAtMzUsMzAgKzM1LDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogYml0IHN3YXAgdGFibGUuCi0gKiBWZXJ5IGhhbmR5IGZvciBkZXZpY2VzIHdpdGggZGlmZmVyZW50IGJpdCBvcmRlciwKLSAqIGFuZCBuZWNjZXNzYXJ5IGZvciBlYWNoIHRyYW5zcGFyZW50IEItY2hhbm5lbCBhY2Nlc3MgZm9yIGFsbAotICogZGV2aWNlcyB3aGljaCB3b3JrcyB3aXRoIHRoaXMgSERMQyBkZWNvZGVyIHdpdGhvdXQgYml0IHJldmVyc2FsLgotICovCi1jb25zdCB1bnNpZ25lZCBjaGFyIGlzZG5oZGxjX2JpdF9yZXZfdGFiWzI1Nl0gPSB7Ci0JMHgwMCwweDgwLDB4NDAsMHhDMCwweDIwLDB4QTAsMHg2MCwweEUwLDB4MTAsMHg5MCwweDUwLDB4RDAsMHgzMCwweEIwLDB4NzAsMHhGMCwKLQkweDA4LDB4ODgsMHg0OCwweEM4LDB4MjgsMHhBOCwweDY4LDB4RTgsMHgxOCwweDk4LDB4NTgsMHhEOCwweDM4LDB4QjgsMHg3OCwweEY4LAotCTB4MDQsMHg4NCwweDQ0LDB4QzQsMHgyNCwweEE0LDB4NjQsMHhFNCwweDE0LDB4OTQsMHg1NCwweEQ0LDB4MzQsMHhCNCwweDc0LDB4RjQsCi0JMHgwQywweDhDLDB4NEMsMHhDQywweDJDLDB4QUMsMHg2QywweEVDLDB4MUMsMHg5QywweDVDLDB4REMsMHgzQywweEJDLDB4N0MsMHhGQywKLQkweDAyLDB4ODIsMHg0MiwweEMyLDB4MjIsMHhBMiwweDYyLDB4RTIsMHgxMiwweDkyLDB4NTIsMHhEMiwweDMyLDB4QjIsMHg3MiwweEYyLAotCTB4MEEsMHg4QSwweDRBLDB4Q0EsMHgyQSwweEFBLDB4NkEsMHhFQSwweDFBLDB4OUEsMHg1QSwweERBLDB4M0EsMHhCQSwweDdBLDB4RkEsCi0JMHgwNiwweDg2LDB4NDYsMHhDNiwweDI2LDB4QTYsMHg2NiwweEU2LDB4MTYsMHg5NiwweDU2LDB4RDYsMHgzNiwweEI2LDB4NzYsMHhGNiwKLQkweDBFLDB4OEUsMHg0RSwweENFLDB4MkUsMHhBRSwweDZFLDB4RUUsMHgxRSwweDlFLDB4NUUsMHhERSwweDNFLDB4QkUsMHg3RSwweEZFLAotCTB4MDEsMHg4MSwweDQxLDB4QzEsMHgyMSwweEExLDB4NjEsMHhFMSwweDExLDB4OTEsMHg1MSwweEQxLDB4MzEsMHhCMSwweDcxLDB4RjEsCi0JMHgwOSwweDg5LDB4NDksMHhDOSwweDI5LDB4QTksMHg2OSwweEU5LDB4MTksMHg5OSwweDU5LDB4RDksMHgzOSwweEI5LDB4NzksMHhGOSwKLQkweDA1LDB4ODUsMHg0NSwweEM1LDB4MjUsMHhBNSwweDY1LDB4RTUsMHgxNSwweDk1LDB4NTUsMHhENSwweDM1LDB4QjUsMHg3NSwweEY1LAotCTB4MEQsMHg4RCwweDRELDB4Q0QsMHgyRCwweEFELDB4NkQsMHhFRCwweDFELDB4OUQsMHg1RCwweERELDB4M0QsMHhCRCwweDdELDB4RkQsCi0JMHgwMywweDgzLDB4NDMsMHhDMywweDIzLDB4QTMsMHg2MywweEUzLDB4MTMsMHg5MywweDUzLDB4RDMsMHgzMywweEIzLDB4NzMsMHhGMywKLQkweDBCLDB4OEIsMHg0QiwweENCLDB4MkIsMHhBQiwweDZCLDB4RUIsMHgxQiwweDlCLDB4NUIsMHhEQiwweDNCLDB4QkIsMHg3QiwweEZCLAotCTB4MDcsMHg4NywweDQ3LDB4QzcsMHgyNywweEE3LDB4NjcsMHhFNywweDE3LDB4OTcsMHg1NywweEQ3LDB4MzcsMHhCNywweDc3LDB4RjcsCi0JMHgwRiwweDhGLDB4NEYsMHhDRiwweDJGLDB4QUYsMHg2RiwweEVGLDB4MUYsMHg5RiwweDVGLDB4REYsMHgzRiwweEJGLDB4N0YsMHhGRgotfTsKLQogZW51bSB7CiAJSERMQ19GQVNUX0lETEUsSERMQ19HRVRfRkxBR19CMCxIRExDX0dFVEZMQUdfQjFBNixIRExDX0dFVEZMQUdfQjcsCiAJSERMQ19HRVRfREFUQSxIRExDX0ZBU1RfRkxBRwpAQCAtNjIxLDcgKzU5Nyw2IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotRVhQT1JUX1NZTUJPTChpc2RuaGRsY19iaXRfcmV2X3RhYik7CiBFWFBPUlRfU1lNQk9MKGlzZG5oZGxjX3Jjdl9pbml0KTsKIEVYUE9SVF9TWU1CT0woaXNkbmhkbGNfZGVjb2RlKTsKIEVYUE9SVF9TWU1CT0woaXNkbmhkbGNfb3V0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmhkbGMuaAppbmRleCA1NjU1YjVmLi40NTE2N2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmhkbGMuaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmhkbGMuaApAQCAtNTcsOCArNTcsNiBAQAogI2RlZmluZSBIRExDX0NSQ19FUlJPUiAgICAgICAgIDIKICNkZWZpbmUgSERMQ19MRU5HVEhfRVJST1IgICAgICAzCiAKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGlzZG5oZGxjX2JpdF9yZXZfdGFiWzI1Nl07Ci0KIGV4dGVybiB2b2lkIGlzZG5oZGxjX3Jjdl9pbml0IChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgaW50IGRvX2FkYXB0NTYpOwogCiBleHRlcm4gaW50IGlzZG5oZGxjX2RlY29kZSAoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IHNsZW4saW50ICpjb3VudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwppbmRleCA5NTIyMTQxLi4wMzBkMTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCkBAIC02NzcsNyArNjc3LDExIEBACiAJCXJldHVybiAoMCk7CiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCX0JCisKKyNpZmRlZiBfX0lTQVBOUF9fCiByZWFkeToJCisjZW5kaWYKKwogCS8qIEluIGNhc2Ugb2YgdGhlIHNlZGxiYXVlciBwY21jaWEgY2FyZCwgdGhpcyByZWdpb24gaXMgaW4gdXNlLAogCSAqIHJlc2VydmVkIGZvciB1cyBieSB0aGUgY2FyZCBtYW5hZ2VyLiBTbyB3ZSBkbyBub3QgY2hlY2sgaXQKIAkgKiBoZXJlLCBpdCB3b3VsZCBmYWlsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCmluZGV4IDQ2ZWQ2NTMuLjQ1ZGViZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKQEAgLTE1NSw5ICsxNTUsOCBAQAogICAgIERFQlVHKDAsICJzZWRsYmF1ZXJfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KLSAgICBsb2NhbCA9IGttYWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOworICAgIGxvY2FsID0ga3phbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFsb2NhbCkgcmV0dXJuIC1FTk9NRU07Ci0gICAgbWVtc2V0KGxvY2FsLCAwLCBzaXplb2YobG9jYWxfaW5mb190KSk7CiAgICAgbG9jYWwtPmNhcmRuciA9IC0xOwogCiAgICAgbG9jYWwtPnBfZGV2ID0gbGluazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9iLmMKaW5kZXggNzVkMGYyNDguLmZhNjQxMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdHJldi5oPgogI2luY2x1ZGUgInN0NTQ4MS5oIgogCiBzdGF0aWMgaW5saW5lIHZvaWQgQl9MMUwyKHN0cnVjdCBzdDU0ODFfYmNzICpiY3MsIGludCBwciwgdm9pZCAqYXJnKQpAQCAtNzIsNyArNzMsNyBAQAogCQkJCQlyZWdpc3RlciB1bnNpZ25lZCBjaGFyICpkZXN0ID0gdXJiLT50cmFuc2Zlcl9idWZmZXIrbGVuOwogCQkJCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgY291bnQ7CiAJCQkJCWZvciAoY291bnQgPSAwOyBjb3VudCA8IGJ5dGVzX3NlbnQ7IGNvdW50KyspCi0JCQkJCQkqZGVzdCsrID0gaXNkbmhkbGNfYml0X3Jldl90YWJbKnNyYysrXTsKKwkJCQkJCSpkZXN0KysgPSBiaXRyZXY4KCpzcmMrKyk7CiAJCQkJfQogCQkJCWxlbiArPSBieXRlc19zZW50OwogCQkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfZC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKaW5kZXggMWQ4YzI2MS4uYjhjNDg1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCWNoYXIgYnVmWzI1Nl07CiAJCiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQl2c3ByaW50ZihidWYsIGZtdCwgYXJncyk7CisJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7CiAJREJHKDgsICIlcyIsIGJ1Zik7CiAJdmFfZW5kKGFyZ3MpOwogfQpAQCAtMjc1LDcgKzI3NSw3IEBACiAJY2hhciBidWZbMjU2XTsKIAkKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZzcHJpbnRmKGJ1ZiwgZm10LCBhcmdzKTsKKwl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcmdzKTsKIAlEQkcoMHgyLCAiJXMiLCBidWYpOwogCXZhX2VuZChhcmdzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaW5pdC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKaW5kZXggMjcxNmFhNS4uYmIzYTI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKQEAgLTY5LDEyICs2OSwxMCBAQAogCSAgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCiAJICAgICBudW1iZXJfb2ZfbGVkcyk7CiAKLQlhZGFwdGVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0NTQ4MV9hZGFwdGVyKSwgR0ZQX0tFUk5FTCk7CisJYWRhcHRlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdDU0ODFfYWRhcHRlciksIEdGUF9LRVJORUwpOwogCWlmICghYWRhcHRlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoYWRhcHRlciwgMCwgc2l6ZW9mKHN0cnVjdCBzdDU0ODFfYWRhcHRlcikpOwotCiAJYWRhcHRlci0+bnVtYmVyX29mX2xlZHMgPSBudW1iZXJfb2ZfbGVkczsKIAlhZGFwdGVyLT51c2JfZGV2ID0gZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCmluZGV4IDZiNzU0ZjEuLjNlM2UxODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCkBAIC0xMzcsOSArMTM3LDggQEAKICAgICBERUJVRygwLCAidGVsZXNfYXR0YWNoKClcbiIpOwogCiAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KLSAgICBsb2NhbCA9IGttYWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOworICAgIGxvY2FsID0ga3phbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFsb2NhbCkgcmV0dXJuIC1FTk9NRU07Ci0gICAgbWVtc2V0KGxvY2FsLCAwLCBzaXplb2YobG9jYWxfaW5mb190KSk7CiAgICAgbG9jYWwtPmNhcmRuciA9IC0xOwogCiAgICAgbG9jYWwtPnBfZGV2ID0gbGluazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeWNhcGkuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeWNhcGkuYwppbmRleCA2YmFjNDNjLi5iMmFlNGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHljYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5Y2FwaS5jCkBAIC03NDUsMTIgKzc0NSwxMSBAQAogCQlyZXR1cm4gMTsKIAl9CiAJaWYgKCFjYXJkLT5oeWN0cmxpbmZvKSB7Ci0JCWNpbmZvID0gKGh5Y2FwaWN0cmxfaW5mbyAqKSBrbWFsbG9jKHNpemVvZihoeWNhcGljdHJsX2luZm8pLCBHRlBfQVRPTUlDKTsKKwkJY2luZm8gPSBremFsbG9jKHNpemVvZihoeWNhcGljdHJsX2luZm8pLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFjaW5mbykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSFlTRE46IG5vIG1lbW9yeSBmb3IgY2FwaS1jdHJsLlxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQltZW1zZXQoY2luZm8sIDAsIHNpemVvZihoeWNhcGljdHJsX2luZm8pKTsKIAkJY2FyZC0+aHljdHJsaW5mbyA9IGNpbmZvOwogCQljaW5mby0+Y2FyZCA9IGNhcmQ7CiAJCXNwaW5fbG9ja19pbml0KCZjaW5mby0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fYm9vdC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2Jvb3QuYwppbmRleCA2ZDBlYjBmLi5iZTc4N2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fYm9vdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9ib290LmMKQEAgLTI3OCwxNCArMjc4LDEzIEBACiAJCXJldHVybiAoLUVSUl9BTFJFQURZX0JPT1QpOwkvKiBib290IGFscmVhZHkgYWN0aXZlICovCiAJfQogCS8qIGVycm9yIG5vIG1lbSBhdmFpbGFibGUgKi8KLQlpZiAoIShib290ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJvb3RfZGF0YSksIEdGUF9LRVJORUwpKSkgeworCWlmICghKGJvb3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYm9vdF9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CiAJCWlmIChjYXJkLT5kZWJ1Z19mbGFncyAmIExPR19NRU1fRVJSKQogCQkJaHlzZG5fYWRkbG9nKGNhcmQsICJQT0Ygb3BlbjogdW5hYmxlIHRvIGFsbG9jYXRlIG1lbSIpOwogCQlyZXR1cm4gKC1FRkFVTFQpOwogCX0KIAljYXJkLT5ib290ID0gYm9vdDsKIAljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfQk9PVElORzsKLQltZW1zZXQoYm9vdCwgMCwgc2l6ZW9mKHN0cnVjdCBib290X2RhdGEpKTsKIAogCWNhcmQtPnN0b3BjYXJkKGNhcmQpOwkvKiBmaXJzdCBzdG9wIHRoZSBjYXJkICovCiAJaWYgKGNhcmQtPnRlc3RyYW0oY2FyZCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCmluZGV4IGI3MDJlZDI3Li45ZTAxNzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKQEAgLTgxLDExICs4MSwxMCBAQAogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoYWt0X3BjaWRldikpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIShjYXJkID0ga21hbGxvYyhzaXplb2YoaHlzZG5fY2FyZCksIEdGUF9LRVJORUwpKSkgeworCQlpZiAoIShjYXJkID0ga3phbGxvYyhzaXplb2YoaHlzZG5fY2FyZCksIEdGUF9LRVJORUwpKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJIWVNETjogdW5hYmxlIHRvIGFsbG9jIGRldmljZSBtZW0gXG4iKTsKIAkJCXJldHVybjsKIAkJfQotCQltZW1zZXQoY2FyZCwgMCwgc2l6ZW9mKGh5c2RuX2NhcmQpKTsKIAkJY2FyZC0+bXlpZCA9IGNhcmRtYXg7CS8qIHNldCBvd24gaWQgKi8KIAkJY2FyZC0+YnVzID0gYWt0X3BjaWRldi0+YnVzLT5udW1iZXI7CiAJCWNhcmQtPmRldmZuID0gYWt0X3BjaWRldi0+ZGV2Zm47CS8qIHNsb3QgKyBmdW5jdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCmluZGV4IGQyMDUyNDkuLjU1N2Q5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKQEAgLTI3OCwxMSArMjc4LDEwIEBACiAJCXJldHVybiAoLUVOT01FTSk7CiAJfQogCWh5c2RuX25ldF9yZWxlYXNlKGNhcmQpOwkvKiByZWxlYXNlIGFuIGV4aXN0aW5nIG5ldCBkZXZpY2UgKi8KLQlpZiAoKGRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXRfbG9jYWwpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCWlmICgoZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9sb2NhbCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhZU0ROOiB1bmFibGUgdG8gYWxsb2NhdGUgbWVtXG4iKTsKIAkJcmV0dXJuICgtRU5PTUVNKTsKIAl9Ci0JbWVtc2V0KGRldiwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfbG9jYWwpKTsJLyogY2xlYW4gdGhlIHN0cnVjdHVyZSAqLwogCiAJc3Bpbl9sb2NrX2luaXQoJigoc3RydWN0IG5ldF9sb2NhbCAqKSBkZXYpLT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwppbmRleCA4ZTJiMDM4Li45NGE5MzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJfSBlbHNlIGlmICgoZmlsZXAtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSA9PSBGTU9ERV9SRUFEKSB7CiAJCS8qIHJlYWQgYWNjZXNzIC0+IG91dHB1dCBjYXJkIGluZm8gZGF0YSAqLwogCi0JCWlmICghKHRtcCA9IChjaGFyICopIGttYWxsb2MoSU5GT19PVVRfTEVOICogMiArIDIsIEdGUF9LRVJORUwpKSkgeworCQlpZiAoISh0bXAgPSBrbWFsbG9jKElORk9fT1VUX0xFTiAqIDIgKyAyLCBHRlBfS0VSTkVMKSkpIHsKIAkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiAoLUVGQVVMVCk7CS8qIG91dCBvZiBtZW1vcnkgKi8KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKaW5kZXggZmNkNDk5Mi4uMzc1ZDk1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAlpZiAocGQtPmlmX3VzZWQgPD0gMCkKIAkJcmV0dXJuOwkJLyogbm8gb3BlbiBmaWxlIGZvciByZWFkICovCiAKLQlpZiAoIShpYiA9IChzdHJ1Y3QgbG9nX2RhdGEgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IGxvZ19kYXRhKSArIHN0cmxlbihjcCksIEdGUF9BVE9NSUMpKSkKKwlpZiAoIShpYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2dfZGF0YSkgKyBzdHJsZW4oY3ApLCBHRlBfQVRPTUlDKSkpCiAJCSByZXR1cm47CS8qIG5vIG1lbW9yeSAqLwogCXN0cmNweShpYi0+bG9nX3N0YXJ0LCBjcCk7CS8qIHNldCBvdXRwdXQgc3RyaW5nICovCiAJaWItPm5leHQgPSBOVUxMOwpAQCAtMjA0LDcgKzIwNCw3IEBACiB7CiAJc3RydWN0IGxvZ19kYXRhICppbmY7CiAJaW50IGxlbjsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IHByb2NkYXRhICpwZCA9IE5VTEw7CiAJaHlzZG5fY2FyZCAqY2FyZDsKIApAQCAtMzU0LDcgKzM1NCw3IEBACiBoeXNkbl9sb2dfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCiB7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAloeXNkbl9jYXJkICpjYXJkOwogCXN0cnVjdCBwcm9jZGF0YSAqcGQgPSBOVUxMOwogCkBAIC00MDUsOCArNDA1LDcgQEAKIAogCS8qIGNyZWF0ZSBhIGNhcmRsb2cgcHJvYyBlbnRyeSAqLwogCi0JaWYgKChwZCA9IChzdHJ1Y3QgcHJvY2RhdGEgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHByb2NkYXRhKSwgR0ZQX0tFUk5FTCkpICE9IE5VTEwpIHsKLQkJbWVtc2V0KHBkLCAwLCBzaXplb2Yoc3RydWN0IHByb2NkYXRhKSk7CisJaWYgKChwZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jZGF0YSksIEdGUF9LRVJORUwpKSAhPSBOVUxMKSB7CiAJCXNwcmludGYocGQtPmxvZ19uYW1lLCAiJXMlZCIsIFBST0NfTE9HX0JBU0VOQU1FLCBjYXJkLT5teWlkKTsKIAkJaWYgKChwZC0+bG9nID0gY3JlYXRlX3Byb2NfZW50cnkocGQtPmxvZ19uYW1lLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsIGh5c2RuX3Byb2NfZW50cnkpKSAhPSBOVUxMKSB7CiAJCSAgICAgICAgcGQtPmxvZy0+cHJvY19mb3BzID0gJmxvZ19mb3BzOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9hdWRpby5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2F1ZGlvLmMKaW5kZXggMmNjNTZkNi4uZmIzNTBjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2F1ZGlvLmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2F1ZGlvLmMKQEAgLTMyOCw3ICszMjgsNyBAQAogaXNkbl9hdWRpb19hZHBjbV9pbml0KGFkcGNtX3N0YXRlICogcywgaW50IG5iaXRzKQogewogCWlmICghcykKLQkJcyA9IChhZHBjbV9zdGF0ZSAqKSBrbWFsbG9jKHNpemVvZihhZHBjbV9zdGF0ZSksIEdGUF9BVE9NSUMpOworCQlzID0ga21hbGxvYyhzaXplb2YoYWRwY21fc3RhdGUpLCBHRlBfQVRPTUlDKTsKIAlpZiAocykgewogCQlzLT5hID0gMDsKIAkJcy0+ZCA9IDU7CkBAIC0zNDMsNyArMzQzLDcgQEAKIGlzZG5fYXVkaW9fZHRtZl9pbml0KGR0bWZfc3RhdGUgKiBzKQogewogCWlmICghcykKLQkJcyA9IChkdG1mX3N0YXRlICopIGttYWxsb2Moc2l6ZW9mKGR0bWZfc3RhdGUpLCBHRlBfQVRPTUlDKTsKKwkJcyA9IGttYWxsb2Moc2l6ZW9mKGR0bWZfc3RhdGUpLCBHRlBfQVRPTUlDKTsKIAlpZiAocykgewogCQlzLT5pZHggPSAwOwogCQlzLT5sYXN0ID0gJyAnOwpAQCAtNjIxLDcgKzYyMSw3IEBACiBpc2RuX2F1ZGlvX3NpbGVuY2VfaW5pdChzaWxlbmNlX3N0YXRlICogcykKIHsKIAlpZiAoIXMpCi0JCXMgPSAoc2lsZW5jZV9zdGF0ZSAqKSBrbWFsbG9jKHNpemVvZihzaWxlbmNlX3N0YXRlKSwgR0ZQX0FUT01JQyk7CisJCXMgPSBrbWFsbG9jKHNpemVvZihzaWxlbmNlX3N0YXRlKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHMpIHsKIAkJcy0+aWR4ID0gMDsKIAkJcy0+c3RhdGUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2JzZGNvbXAuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9ic2Rjb21wLmMKaW5kZXggMGFmZTQ0Mi4uYTIwZjMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2JzZGNvbXAuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fYnNkY29tcC5jCkBAIC0zMzEsMTIgKzMzMSwxMCBAQAogCSAqIEFsbG9jYXRlIHRoZSBtYWluIGNvbnRyb2wgc3RydWN0dXJlIGZvciB0aGlzIGluc3RhbmNlLgogCSAqLwogCW1heG1heGNvZGUgPSBNQVhDT0RFKGJpdHMpOwotCWRiID0gKHN0cnVjdCBic2RfZGIgKikga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgYnNkX2RiKSxHRlBfS0VSTkVMKTsKKwlkYiA9IGt6YWxsb2MgKHNpemVvZiAoc3RydWN0IGJzZF9kYiksR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYikKIAkJcmV0dXJuIE5VTEw7CiAKLQltZW1zZXQgKGRiLCAwLCBzaXplb2Yoc3RydWN0IGJzZF9kYikpOwotCiAJZGItPnhtaXQgPSBkYXRhLT5mbGFncyAmIElQUFBfQ09NUF9GTEFHX1hNSVQ7CiAJZGVjb21wID0gZGItPnhtaXQgPyAwIDogMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCmluZGV4IDY5YWVlMjYuLjZhMmVmMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKQEAgLTEwNTksNyArMTA1OSw3IEBACiBzdGF0aWMgc3NpemVfdAogaXNkbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZikKIHsKLQl1aW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl1aW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWludCBsZW4gPSAwOwogCWludCBkcnZpZHg7CiAJaW50IGNoaWR4OwpAQCAtMTE2Niw3ICsxMTY2LDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBpc2RuX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZikKIHsKLQl1aW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl1aW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWludCBkcnZpZHg7CiAJaW50IGNoaWR4OwogCWludCByZXR2YWw7CkBAIC0xMjI4LDcgKzEyMjgsNyBAQAogaXNkbl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaW50IGRydmlkeCA9IGlzZG5fbWlub3IyZHJ2KG1pbm9yIC0gSVNETl9NSU5PUl9DVFJMKTsKIAogCWxvY2tfa2VybmVsKCk7CkBAIC0yMDcyLDIxICsyMDcyLDE5IEBACiAKIAlpZiAoKGFkZGluZykgJiYgKGQtPnJjdmVycikpCiAJCWtmcmVlKGQtPnJjdmVycik7Ci0JaWYgKCEoZC0+cmN2ZXJyID0ga21hbGxvYyhzaXplb2YoaW50KSAqIG0sIEdGUF9BVE9NSUMpKSkgeworCWlmICghKGQtPnJjdmVyciA9IGt6YWxsb2Moc2l6ZW9mKGludCkgKiBtLCBHRlBfQVRPTUlDKSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicmVnaXN0ZXJfaXNkbjogQ291bGQgbm90IGFsbG9jIHJjdmVyclxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JbWVtc2V0KChjaGFyICopIGQtPnJjdmVyciwgMCwgc2l6ZW9mKGludCkgKiBtKTsKIAogCWlmICgoYWRkaW5nKSAmJiAoZC0+cmN2Y291bnQpKQogCQlrZnJlZShkLT5yY3Zjb3VudCk7Ci0JaWYgKCEoZC0+cmN2Y291bnQgPSBrbWFsbG9jKHNpemVvZihpbnQpICogbSwgR0ZQX0FUT01JQykpKSB7CisJaWYgKCEoZC0+cmN2Y291bnQgPSBremFsbG9jKHNpemVvZihpbnQpICogbSwgR0ZQX0FUT01JQykpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJlZ2lzdGVyX2lzZG46IENvdWxkIG5vdCBhbGxvYyByY3Zjb3VudFxuIik7CiAJCWlmICghYWRkaW5nKQogCQkJa2ZyZWUoZC0+cmN2ZXJyKTsKIAkJcmV0dXJuIC0xOwogCX0KLQltZW1zZXQoKGNoYXIgKikgZC0+cmN2Y291bnQsIDAsIHNpemVvZihpbnQpICogbSk7CiAKIAlpZiAoKGFkZGluZykgJiYgKGQtPnJwcXVldWUpKSB7CiAJCWZvciAoaiA9IDA7IGogPCBkLT5jaGFubmVsczsgaisrKQpAQCAtMjIyNiwxMSArMjIyNCwxMCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJyZWdpc3Rlcl9pc2RuOiBObyB3cml0ZSByb3V0aW5lIGdpdmVuLlxuIik7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoIShkID0ga21hbGxvYyhzaXplb2YoaXNkbl9kcml2ZXJfdCksIEdGUF9LRVJORUwpKSkgeworCWlmICghKGQgPSBremFsbG9jKHNpemVvZihpc2RuX2RyaXZlcl90KSwgR0ZQX0tFUk5FTCkpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJlZ2lzdGVyX2lzZG46IENvdWxkIG5vdCBhbGxvYyBkcml2ZXItc3RydWN0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCW1lbXNldCgoY2hhciAqKSBkLCAwLCBzaXplb2YoaXNkbl9kcml2ZXJfdCkpOwogCiAJZC0+bWF4YnVmc2l6ZSA9IGktPm1heGJ1ZnNpemU7CiAJZC0+cGt0Y291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCmluZGV4IDJlNGRhZWIuLjgzOGIzNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKQEAgLTI1NDIsMTcgKzI1NDIsMTUgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXNkbl9uZXQ6IGludGVyZmFjZSAlcyBhbHJlYWR5IGV4aXN0c1xuIiwgbmFtZSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlpZiAoIShuZXRkZXYgPSAoaXNkbl9uZXRfZGV2ICopIGttYWxsb2Moc2l6ZW9mKGlzZG5fbmV0X2RldiksIEdGUF9LRVJORUwpKSkgeworCWlmICghKG5ldGRldiA9IGt6YWxsb2Moc2l6ZW9mKGlzZG5fbmV0X2RldiksIEdGUF9LRVJORUwpKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpc2RuX25ldDogQ291bGQgbm90IGFsbG9jYXRlIG5ldC1kZXZpY2VcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KG5ldGRldiwgMCwgc2l6ZW9mKGlzZG5fbmV0X2RldikpOwotCWlmICghKG5ldGRldi0+bG9jYWwgPSAoaXNkbl9uZXRfbG9jYWwgKikga21hbGxvYyhzaXplb2YoaXNkbl9uZXRfbG9jYWwpLCBHRlBfS0VSTkVMKSkpIHsKKwlpZiAoIShuZXRkZXYtPmxvY2FsID0ga3phbGxvYyhzaXplb2YoaXNkbl9uZXRfbG9jYWwpLCBHRlBfS0VSTkVMKSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXNkbl9uZXQ6IENvdWxkIG5vdCBhbGxvY2F0ZSBkZXZpY2UgbG9jYWxzXG4iKTsKIAkJa2ZyZWUobmV0ZGV2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChuZXRkZXYtPmxvY2FsLCAwLCBzaXplb2YoaXNkbl9uZXRfbG9jYWwpKTsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlzdHJjcHkobmV0ZGV2LT5sb2NhbC0+bmFtZSwgIiAgICAgICAgICIpOwogCWVsc2UKQEAgLTI5NTAsNyArMjk0OCw3IEBACiAJaXNkbl9uZXRfcGhvbmUgKm47CiAKIAlpZiAocCkgewotCQlpZiAoIShuID0gKGlzZG5fbmV0X3Bob25lICopIGttYWxsb2Moc2l6ZW9mKGlzZG5fbmV0X3Bob25lKSwgR0ZQX0tFUk5FTCkpKQorCQlpZiAoIShuID0ga21hbGxvYyhzaXplb2YoaXNkbl9uZXRfcGhvbmUpLCBHRlBfS0VSTkVMKSkpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJc3RyY3B5KG4tPm51bSwgcGhvbmUtPnBob25lKTsKIAkJbi0+bmV4dCA9IHAtPmxvY2FsLT5waG9uZVtwaG9uZS0+b3V0Z29pbmcgJiAxXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwppbmRleCAxMTk0MTJkLi40ZTNmMTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCkBAIC02NjcsNyArNjY3LDcgQEAKIAogCWlmIChpcy0+ZGVidWcgJiAweDIpCiAJCXByaW50ayhLRVJOX0RFQlVHICJpc2RuX3BwcF9wb2xsOiBtaW5vcjogJWRcbiIsCi0JCQkJaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSk7CisJCQkJaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKIAogCS8qIGp1c3QgcmVnaXN0ZXJzIHdhaXRfcXVldWUgaG9vay4gVGhpcyBkb2Vzbid0IHJlYWxseSB3YWl0LiAqLwogCXBvbGxfd2FpdChmaWxlLCAmaXMtPndxLCB3YWl0KTsKQEAgLTcxNyw3ICs3MTcsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiaXBwcDogZGV2aWNlIG5vdCBhY3RpdmF0ZWQuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCW5idWYgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jKGxlbiArIDQsIEdGUF9BVE9NSUMpOworCW5idWYgPSBrbWFsbG9jKGxlbiArIDQsIEdGUF9BVE9NSUMpOwogCWlmICghbmJ1ZikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHBwOiBDYW4ndCBhbGxvYyBidWZcbiIpOwogCQlyZXR1cm4gMDsKQEAgLTg3NiwxNCArODc2LDEyIEBACiAjZW5kaWYgLyogQ09ORklHX0lTRE5fTVBQICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgSVNETl9NQVhfQ0hBTk5FTFM7IGkrKykgewotCQlpZiAoIShpcHBwX3RhYmxlW2ldID0gKHN0cnVjdCBpcHBwX3N0cnVjdCAqKQotCQkgICAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBwcF9zdHJ1Y3QpLCBHRlBfS0VSTkVMKSkpIHsKKwkJaWYgKCEoaXBwcF90YWJsZVtpXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcHBwX3N0cnVjdCksIEdGUF9LRVJORUwpKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXNkbl9wcHBfaW5pdDogQ291bGQgbm90IGFsbG9jIGlwcHBfdGFibGVcbiIpOwogCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKIAkJCQlrZnJlZShpcHBwX3RhYmxlW2pdKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCQltZW1zZXQoKGNoYXIgKikgaXBwcF90YWJsZVtpXSwgMCwgc2l6ZW9mKHN0cnVjdCBpcHBwX3N0cnVjdCkpOwogCQlzcGluX2xvY2tfaW5pdCgmaXBwcF90YWJsZVtpXS0+YnVmbG9jayk7CiAJCWlwcHBfdGFibGVbaV0tPnN0YXRlID0gMDsKIAkJaXBwcF90YWJsZVtpXS0+Zmlyc3QgPSBpcHBwX3RhYmxlW2ldLT5ycSArIE5VTV9SQ1ZfQlVGRlMgLSAxOwpAQCAtMTUyOSwxMCArMTUyNyw4IEBACiB7CiAJaW50IGk7CiAJaW50IHN6ID0gSVNETl9NQVhfQ0hBTk5FTFMqc2l6ZW9mKGlwcHBfYnVuZGxlKTsKLQlpZiggKGlzZG5fcHBwX2J1bmRsZV9hcnIgPSAoaXBwcF9idW5kbGUqKWttYWxsb2Moc3osIAotCQkJCQkJCUdGUF9LRVJORUwpKSA9PSBOVUxMICkKKwlpZiggKGlzZG5fcHBwX2J1bmRsZV9hcnIgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKSkgPT0gTlVMTCApCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChpc2RuX3BwcF9idW5kbGVfYXJyLCAwLCBzeik7CiAJZm9yKCBpID0gMDsgaSA8IElTRE5fTUFYX0NIQU5ORUxTOyBpKysgKQogCQlzcGluX2xvY2tfaW5pdCgmaXNkbl9wcHBfYnVuZGxlX2FycltpXS5sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTIyNDYsMTMgKzIyNDIsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaXBwcF9jY3BfcmVzZXQgKmlzZG5fcHBwX2NjcF9yZXNldF9hbGxvYyhzdHJ1Y3QgaXBwcF9zdHJ1Y3QgKmlzKQogewogCXN0cnVjdCBpcHBwX2NjcF9yZXNldCAqcjsKLQlyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwcHBfY2NwX3Jlc2V0KSwgR0ZQX0tFUk5FTCk7CisJciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcHBwX2NjcF9yZXNldCksIEdGUF9LRVJORUwpOwogCWlmKCFyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaXBwcF9jY3A6IGZhaWxlZCB0byBhbGxvY2F0ZSByZXNldCBkYXRhIgogCQkgICAgICAgIiBzdHJ1Y3R1cmUgLSBubyBtZW1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KHIsIDAsIHNpemVvZihzdHJ1Y3QgaXBwcF9jY3BfcmVzZXQpKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiaXBwcF9jY3A6IGFsbG9jYXRlZCByZXNldCBkYXRhIHN0cnVjdHVyZSAlcFxuIiwgcik7CiAJaXMtPnJlc2V0ID0gcjsKIAlyZXR1cm4gcjsKQEAgLTIzMzgsMTMgKzIzMzMsMTMgQEAKIAkJICAgICAgIGlkKTsKIAkJcmV0dXJuIE5VTEw7CiAJfSBlbHNlIHsKLQkJcnMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBwcF9jY3BfcmVzZXRfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJcnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXBwcF9jY3BfcmVzZXRfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAkJaWYoIXJzKQogCQkJcmV0dXJuIE5VTEw7Ci0JCW1lbXNldChycywgMCwgc2l6ZW9mKHN0cnVjdCBpcHBwX2NjcF9yZXNldF9zdGF0ZSkpOwogCQlycy0+c3RhdGUgPSBDQ1BSZXNldElkbGU7CiAJCXJzLT5pcyA9IGlzOwogCQlycy0+aWQgPSBpZDsKKwkJaW5pdF90aW1lcigmcnMtPnRpbWVyKTsKIAkJcnMtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylyczsKIAkJcnMtPnRpbWVyLmZ1bmN0aW9uID0gaXNkbl9wcHBfY2NwX3RpbWVyX2NhbGxiYWNrOwogCQlpcy0+cmVzZXQtPnJzW2lkXSA9IHJzOwpAQCAtMjUzNiw2ICsyNTMxLDExIEBACiAgIAkJcnNwYXJtLm1heGRsZW4gPSBJUFBQX1JFU0VUX01BWERBVEFCWVRFUzsKICAgCiAgIAkJc2tiX291dCA9IGRldl9hbGxvY19za2IoaXMtPm1ydSArIFBQUF9IRFJMRU4pOworICAJCWlmICghc2tiX291dCkgeworICAJCQlrZnJlZV9za2Ioc2tiKTsKKyAgCQkJcHJpbnRrKEtFUk5fRVJSICJpcHBwOiBkZWNvbXAgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJCQlyZXR1cm4gTlVMTDsKKyAgCQl9CiAJCWxlbiA9IGlwYy0+ZGVjb21wcmVzcyhzdGF0LCBza2IsIHNrYl9vdXQsICZyc3Bhcm0pOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJaWYgKGxlbiA8PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKaW5kZXggMmI5MWJiMC4uZmM4MGFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWlzZG5fdHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK2lzZG5fdHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJbW9kZW1faW5mbyAqaW5mbyA9IChtb2RlbV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl92MTEwLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdjExMC5jCmluZGV4IDM4NjE5ZTguLjU0ODRkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl92MTEwLmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3YxMTAuYwpAQCAtOTIsOSArOTIsOCBAQAogCWludCBpOwogCWlzZG5fdjExMF9zdHJlYW0gKnY7CiAKLQlpZiAoKHYgPSBrbWFsbG9jKHNpemVvZihpc2RuX3YxMTBfc3RyZWFtKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCisJaWYgKCh2ID0ga3phbGxvYyhzaXplb2YoaXNkbl92MTEwX3N0cmVhbSksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQodiwgMCwgc2l6ZW9mKGlzZG5fdjExMF9zdHJlYW0pKTsKIAl2LT5rZXkgPSBrZXk7CiAJdi0+bmJpdHMgPSAwOwogCWZvciAoaSA9IDA7IGtleSAmICgxIDw8IGkpOyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jIGIvZHJpdmVycy9pc2RuL2ljbi9pY24uYwppbmRleCA3MzBiYmQwLi4xZTY5OWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMKQEAgLTE1MTksMTIgKzE1MTksMTEgQEAKIAlpY25fY2FyZCAqY2FyZDsKIAlpbnQgaTsKIAotCWlmICghKGNhcmQgPSAoaWNuX2NhcmQgKikga21hbGxvYyhzaXplb2YoaWNuX2NhcmQpLCBHRlBfS0VSTkVMKSkpIHsKKwlpZiAoIShjYXJkID0ga3phbGxvYyhzaXplb2YoaWNuX2NhcmQpLCBHRlBfS0VSTkVMKSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgImljbjogKCVzKSBDb3VsZCBub3QgYWxsb2NhdGUgY2FyZC1zdHJ1Y3QuXG4iLCBpZCk7CiAJCXJldHVybiAoaWNuX2NhcmQgKikgMDsKIAl9Ci0JbWVtc2V0KChjaGFyICopIGNhcmQsIDAsIHNpemVvZihpY25fY2FyZCkpOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKIAljYXJkLT5wb3J0ID0gcG9ydDsKIAljYXJkLT5pbnRlcmZhY2Uub3duZXIgPSBUSElTX01PRFVMRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pc2RubG9vcC9pc2RubG9vcC5jIGIvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKaW5kZXggYzNhZTJlZC4uZTNhZGQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKKysrIGIvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKQEAgLTE0MzAsMTIgKzE0MzAsMTEgQEAKIAlpc2RubG9vcF9jYXJkICpjYXJkOwogCWludCBpOwogCi0JaWYgKCEoY2FyZCA9IChpc2RubG9vcF9jYXJkICopIGttYWxsb2Moc2l6ZW9mKGlzZG5sb29wX2NhcmQpLCBHRlBfS0VSTkVMKSkpIHsKKwlpZiAoIShjYXJkID0ga3phbGxvYyhzaXplb2YoaXNkbmxvb3BfY2FyZCksIEdGUF9LRVJORUwpKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAiaXNkbmxvb3A6ICglcykgQ291bGQgbm90IGFsbG9jYXRlIGNhcmQtc3RydWN0LlxuIiwgaWQpOwogCQlyZXR1cm4gKGlzZG5sb29wX2NhcmQgKikgMDsKIAl9Ci0JbWVtc2V0KChjaGFyICopIGNhcmQsIDAsIHNpemVvZihpc2RubG9vcF9jYXJkKSk7CiAJY2FyZC0+aW50ZXJmYWNlLm93bmVyID0gVEhJU19NT0RVTEU7CiAJY2FyZC0+aW50ZXJmYWNlLmNoYW5uZWxzID0gSVNETkxPT1BfQkNIOwogCWNhcmQtPmludGVyZmFjZS5obF9oZHJsZW4gID0gMTsgLyogc2NyYXRjaCBhcmVhIGZvciBzdG9yaW5nIGFjayBmbGFnKi8gCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vcGNiaXQvZHJ2LmMgYi9kcml2ZXJzL2lzZG4vcGNiaXQvZHJ2LmMKaW5kZXggMTk2NmYzNC4uMTFjMWIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3BjYml0L2Rydi5jCisrKyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9kcnYuYwpAQCAtNzMsMTQgKzczLDEzIEBACiAJc3RydWN0IHBjYml0X2RldiAqZGV2OwogCWlzZG5faWYgKmRldl9pZjsKIAotCWlmICgoZGV2PWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2JpdF9kZXYpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKGRldj1remFsbG9jKHNpemVvZihzdHJ1Y3QgcGNiaXRfZGV2KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJewogCQlwcmludGsoInBjYml0X2luaXQ6IGNvdWxkbid0IG1hbGxvYyBwY2JpdF9kZXYgc3RydWN0XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZGV2X3BjYml0W2JvYXJkXSA9IGRldjsKLQltZW1zZXQoZGV2LCAwLCBzaXplb2Yoc3RydWN0IHBjYml0X2RldikpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+c2V0X3J1bm5pbmdfd3EpOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOwogCkBAIC0xMDQsNyArMTAzLDcgQEAKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCi0JZGV2LT5iMSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2JpdF9jaGFuKSwgR0ZQX0tFUk5FTCk7CisJZGV2LT5iMSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2JpdF9jaGFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYtPmIxKSB7CiAJCXByaW50aygicGNiaXRfaW5pdDogY291bGRuJ3QgbWFsbG9jIHBjYml0X2NoYW4gc3RydWN0XG4iKTsKIAkJaW91bm1hcChkZXYtPnNoX21lbSk7CkBAIC0xMTMsNyArMTEyLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogICAgIAotCWRldi0+YjIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNiaXRfY2hhbiksIEdGUF9LRVJORUwpOworCWRldi0+YjIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNiaXRfY2hhbiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2LT5iMikgewogCQlwcmludGsoInBjYml0X2luaXQ6IGNvdWxkbid0IG1hbGxvYyBwY2JpdF9jaGFuIHN0cnVjdFxuIik7CiAJCWtmcmVlKGRldi0+YjEpOwpAQCAtMTIzLDggKzEyMiw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW1lbXNldChkZXYtPmIxLCAwLCBzaXplb2Yoc3RydWN0IHBjYml0X2NoYW4pKTsKLQltZW1zZXQoZGV2LT5iMiwgMCwgc2l6ZW9mKHN0cnVjdCBwY2JpdF9jaGFuKSk7CiAJZGV2LT5iMi0+aWQgPSAxOwogCiAJSU5JVF9XT1JLKCZkZXYtPnFkZWxpdmVyeSwgcGNiaXRfZGVsaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKaW5kZXggMGM5ZjZkZi4uZWFmY2NlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlpZiAoKGZyYW1lID0gKHN0cnVjdCBmcmFtZV9idWYgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IGZyYW1lX2J1ZiksCisJaWYgKChmcmFtZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmcmFtZV9idWYpLAogCQkJCQkJICBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY2JpdF8yX3dyaXRlOiBrbWFsbG9jIGZhaWxlZFxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTM2OSwxMyArMzY5LDEyIEBACiAJCQlrZnJlZShkZXYtPnJlYWRfZnJhbWUpOwogCQkJZGV2LT5yZWFkX2ZyYW1lID0gTlVMTDsKIAkJfQotCQlmcmFtZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmcmFtZV9idWYpLCBHRlBfQVRPTUlDKTsKKwkJZnJhbWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnJhbWVfYnVmKSwgR0ZQX0FUT01JQyk7CiAKIAkJaWYgKGZyYW1lID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImttYWxsb2MgZmFpbGVkXG4iKTsKIAkJCXJldHVybjsKIAkJfQotCQltZW1zZXQoZnJhbWUsIDAsIHNpemVvZihzdHJ1Y3QgZnJhbWVfYnVmKSk7CiAKIAkJY3B1ID0gcGNiaXRfcmVhZGIoZGV2KTsKIAkJcHJvYyA9IHBjYml0X3JlYWRiKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jIGIvZHJpdmVycy9pc2RuL3NjL2luaXQuYwppbmRleCAwNmM5ODcyLi4xNTA3NTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMKQEAgLTI3MSwxNCArMjcxLDEzIEBACiAJCSAqIEhvcnJheSEgV2UgZm91bmQgYSBib2FyZCwgTWFrZSBzdXJlIHdlIGNhbiByZWdpc3RlcgogCQkgKiBpdCB3aXRoIElTRE40TGludXgKIAkJICovCi0JCWludGVyZmFjZSA9IGttYWxsb2Moc2l6ZW9mKGlzZG5faWYpLCBHRlBfS0VSTkVMKTsKKwkJaW50ZXJmYWNlID0ga3phbGxvYyhzaXplb2YoaXNkbl9pZiksIEdGUF9LRVJORUwpOwogCQlpZiAoaW50ZXJmYWNlID09IE5VTEwpIHsKIAkJCS8qCiAJCQkgKiBPb3BzLCBjYW4ndCBtYWxsb2MgaXNkbl9pZgogCQkJICovCiAJCQljb250aW51ZTsKIAkJfQotCQltZW1zZXQoaW50ZXJmYWNlLCAwLCBzaXplb2YoaXNkbl9pZikpOwogCiAJCWludGVyZmFjZS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJaW50ZXJmYWNlLT5obF9oZHJsZW4gPSAwOwpAQCAtMjk0LDcgKzI5Myw3IEBACiAJCS8qCiAJCSAqIEFsbG9jYXRlIHRoZSBib2FyZCBzdHJ1Y3R1cmUKIAkJICovCi0JCXNjX2FkYXB0ZXJbY2luc3RdID0ga21hbGxvYyhzaXplb2YoYm9hcmQpLCBHRlBfS0VSTkVMKTsKKwkJc2NfYWRhcHRlcltjaW5zdF0gPSBremFsbG9jKHNpemVvZihib2FyZCksIEdGUF9LRVJORUwpOwogCQlpZiAoc2NfYWRhcHRlcltjaW5zdF0gPT0gTlVMTCkgewogCQkJLyoKIAkJCSAqIE9vcHMsIGNhbid0IGFsbG9jIG1lbW9yeSBmb3IgdGhlIGJvYXJkCkBAIC0zMDIsNyArMzAxLDYgQEAKIAkJCWtmcmVlKGludGVyZmFjZSk7CiAJCQljb250aW51ZTsKIAkJfQotCQltZW1zZXQoc2NfYWRhcHRlcltjaW5zdF0sIDAsIHNpemVvZihib2FyZCkpOwogCQlzcGluX2xvY2tfaW5pdCgmc2NfYWRhcHRlcltjaW5zdF0tPmxvY2spOwogCiAJCWlmKCFyZWdpc3Rlcl9pc2RuKGludGVyZmFjZSkpIHsKQEAgLTMyNiw3ICszMjQsNyBAQAogCQkvKgogCQkgKiBBbGxvY2F0ZSBjaGFubmVscyBzdGF0dXMgc3RydWN0dXJlcwogCQkgKi8KLQkJc2NfYWRhcHRlcltjaW5zdF0tPmNoYW5uZWwgPSBrbWFsbG9jKHNpemVvZihiY2hhbikgKiBjaGFubmVscywgR0ZQX0tFUk5FTCk7CisJCXNjX2FkYXB0ZXJbY2luc3RdLT5jaGFubmVsID0ga3phbGxvYyhzaXplb2YoYmNoYW4pICogY2hhbm5lbHMsIEdGUF9LRVJORUwpOwogCQlpZiAoc2NfYWRhcHRlcltjaW5zdF0tPmNoYW5uZWwgPT0gTlVMTCkgewogCQkJLyoKIAkJCSAqIE9vcHMsIGNhbid0IGFsbG9jIG1lbW9yeSBmb3IgdGhlIGNoYW5uZWxzCkBAIC0zMzYsNyArMzM0LDYgQEAKIAkJCWtmcmVlKHNjX2FkYXB0ZXJbY2luc3RdKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCW1lbXNldChzY19hZGFwdGVyW2NpbnN0XS0+Y2hhbm5lbCwgMCwgc2l6ZW9mKGJjaGFuKSAqIGNoYW5uZWxzKTsKIAogCQkvKgogCQkgKiBMb2NrIGRvd24gdGhlIGhhcmR3YXJlIHJlc291cmNlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0vS2NvbmZpZyBiL2RyaXZlcnMva3ZtL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzY2M4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMva3ZtL0tjb25maWcKQEAgLTAsMCArMSwzNyBAQAorIworIyBLVk0gY29uZmlndXJhdGlvbgorIworbWVudSAiVmlydHVhbGl6YXRpb24iCisKK2NvbmZpZyBLVk0KKwl0cmlzdGF0ZSAiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gWDg2ICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZQorCSAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50CisJICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvCisJICBuZWVkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZXMgYmVsb3cuCisKKwkgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIHRocm91Z2gKKwkgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLgorCisJICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGt2bS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEtWTV9JTlRFTAorCXRyaXN0YXRlICJLVk0gZm9yIEludGVsIHByb2Nlc3NvcnMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEtWTQorCS0tLWhlbHAtLS0KKwkgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBJbnRlbCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIFZUCisJICBleHRlbnNpb25zLgorCitjb25maWcgS1ZNX0FNRAorCXRyaXN0YXRlICJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBLVk0KKwktLS1oZWxwLS0tCisJICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVYKKwkgIChTVk0pIGV4dGVuc2lvbnMuCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMva3ZtL01ha2VmaWxlIGIvZHJpdmVycy9rdm0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhNzg5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMva3ZtL01ha2VmaWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgbW9kdWxlCisjCisKK2t2bS1vYmpzIDo9IGt2bV9tYWluLm8gbW11Lm8geDg2X2VtdWxhdGUubworb2JqLSQoQ09ORklHX0tWTSkgKz0ga3ZtLm8KK2t2bS1pbnRlbC1vYmpzID0gdm14Lm8KK29iai0kKENPTkZJR19LVk1fSU5URUwpICs9IGt2bS1pbnRlbC5vCitrdm0tYW1kLW9ianMgPSBzdm0ubworb2JqLSQoQ09ORklHX0tWTV9BTUQpICs9IGt2bS1hbWQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0va3ZtLmggYi9kcml2ZXJzL2t2bS9rdm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGIxY2E0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9rdm0va3ZtLmgKQEAgLTAsMCArMSw2MzAgQEAKKyNpZm5kZWYgX19LVk1fSAorI2RlZmluZSBfX0tWTV9ICisKKy8qCisgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIuICBTZWUKKyAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSAidm14LmgiCisjaW5jbHVkZSA8bGludXgva3ZtLmg+CisKKyNkZWZpbmUgQ1IwX1BFX01BU0sgKDFVTEwgPDwgMCkKKyNkZWZpbmUgQ1IwX1RTX01BU0sgKDFVTEwgPDwgMykKKyNkZWZpbmUgQ1IwX05FX01BU0sgKDFVTEwgPDwgNSkKKyNkZWZpbmUgQ1IwX1dQX01BU0sgKDFVTEwgPDwgMTYpCisjZGVmaW5lIENSMF9OV19NQVNLICgxVUxMIDw8IDI5KQorI2RlZmluZSBDUjBfQ0RfTUFTSyAoMVVMTCA8PCAzMCkKKyNkZWZpbmUgQ1IwX1BHX01BU0sgKDFVTEwgPDwgMzEpCisKKyNkZWZpbmUgQ1IzX1dQVF9NQVNLICgxVUxMIDw8IDMpCisjZGVmaW5lIENSM19QQ0RfTUFTSyAoMVVMTCA8PCA0KQorCisjZGVmaW5lIENSM19SRVNFVkVEX0JJVFMgMHgwN1VMTAorI2RlZmluZSBDUjNfTF9NT0RFX1JFU0VWRURfQklUUyAofigoMVVMTCA8PCA0MCkgLSAxKSB8IDB4MGZlN1VMTCkKKyNkZWZpbmUgQ1IzX0ZMQUdTX01BU0sgKCgxVUxMIDw8IDUpIC0gMSkKKworI2RlZmluZSBDUjRfVk1FX01BU0sgKDFVTEwgPDwgMCkKKyNkZWZpbmUgQ1I0X1BTRV9NQVNLICgxVUxMIDw8IDQpCisjZGVmaW5lIENSNF9QQUVfTUFTSyAoMVVMTCA8PCA1KQorI2RlZmluZSBDUjRfUEdFX01BU0sgKDFVTEwgPDwgNykKKyNkZWZpbmUgQ1I0X1ZNWEVfTUFTSyAoMVVMTCA8PCAxMykKKworI2RlZmluZSBLVk1fR1VFU1RfQ1IwX01BU0sgXAorCShDUjBfUEdfTUFTSyB8IENSMF9QRV9NQVNLIHwgQ1IwX1dQX01BU0sgfCBDUjBfTkVfTUFTSyBcCisJIHwgQ1IwX05XX01BU0sgfCBDUjBfQ0RfTUFTSykKKyNkZWZpbmUgS1ZNX1ZNX0NSMF9BTFdBWVNfT04gXAorCShDUjBfUEdfTUFTSyB8IENSMF9QRV9NQVNLIHwgQ1IwX1dQX01BU0sgfCBDUjBfTkVfTUFTSykKKyNkZWZpbmUgS1ZNX0dVRVNUX0NSNF9NQVNLIFwKKwkoQ1I0X1BTRV9NQVNLIHwgQ1I0X1BBRV9NQVNLIHwgQ1I0X1BHRV9NQVNLIHwgQ1I0X1ZNWEVfTUFTSyB8IENSNF9WTUVfTUFTSykKKyNkZWZpbmUgS1ZNX1BNT0RFX1ZNX0NSNF9BTFdBWVNfT04gKENSNF9WTVhFX01BU0sgfCBDUjRfUEFFX01BU0spCisjZGVmaW5lIEtWTV9STU9ERV9WTV9DUjRfQUxXQVlTX09OIChDUjRfVk1YRV9NQVNLIHwgQ1I0X1BBRV9NQVNLIHwgQ1I0X1ZNRV9NQVNLKQorCisjZGVmaW5lIElOVkFMSURfUEFHRSAofihocGFfdCkwKQorI2RlZmluZSBVTk1BUFBFRF9HVkEgKH4oZ3BhX3QpMCkKKworI2RlZmluZSBLVk1fTUFYX1ZDUFVTIDEKKyNkZWZpbmUgS1ZNX01FTU9SWV9TTE9UUyA0CisjZGVmaW5lIEtWTV9OVU1fTU1VX1BBR0VTIDI1NgorI2RlZmluZSBLVk1fTUlOX0ZSRUVfTU1VX1BBR0VTIDUKKyNkZWZpbmUgS1ZNX1JFRklMTF9QQUdFUyAyNQorCisjZGVmaW5lIEZYX0lNQUdFX1NJWkUgNTEyCisjZGVmaW5lIEZYX0lNQUdFX0FMSUdOIDE2CisjZGVmaW5lIEZYX0JVRl9TSVpFICgyICogRlhfSU1BR0VfU0laRSArIEZYX0lNQUdFX0FMSUdOKQorCisjZGVmaW5lIERFX1ZFQ1RPUiAwCisjZGVmaW5lIERGX1ZFQ1RPUiA4CisjZGVmaW5lIFRTX1ZFQ1RPUiAxMAorI2RlZmluZSBOUF9WRUNUT1IgMTEKKyNkZWZpbmUgU1NfVkVDVE9SIDEyCisjZGVmaW5lIEdQX1ZFQ1RPUiAxMworI2RlZmluZSBQRl9WRUNUT1IgMTQKKworI2RlZmluZSBTRUxFQ1RPUl9USV9NQVNLICgxIDw8IDIpCisjZGVmaW5lIFNFTEVDVE9SX1JQTF9NQVNLIDB4MDMKKworI2RlZmluZSBJT1BMX1NISUZUIDEyCisKKy8qCisgKiBBZGRyZXNzIHR5cGVzOgorICoKKyAqICBndmEgLSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MKKyAqICBncGEgLSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzCisgKiAgZ2ZuIC0gZ3Vlc3QgZnJhbWUgbnVtYmVyCisgKiAgaHZhIC0gaG9zdCB2aXJ0dWFsIGFkZHJlc3MKKyAqICBocGEgLSBob3N0IHBoeXNpY2FsIGFkZHJlc3MKKyAqICBoZm4gLSBob3N0IGZyYW1lIG51bWJlcgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgZ3ZhX3Q7Cit0eXBlZGVmIHU2NCAgICAgICAgICAgIGdwYV90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nICBnZm5fdDsKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nICBodmFfdDsKK3R5cGVkZWYgdTY0ICAgICAgICAgICAgaHBhX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIGhmbl90OworCisjZGVmaW5lIE5SX1BURV9DSEFJTl9FTlRSSUVTIDUKKworc3RydWN0IGt2bV9wdGVfY2hhaW4geworCXU2NCAqcGFyZW50X3B0ZXNbTlJfUFRFX0NIQUlOX0VOVFJJRVNdOworCXN0cnVjdCBobGlzdF9ub2RlIGxpbms7Cit9OworCisvKgorICoga3ZtX21tdV9wYWdlX3JvbGUsIGJlbG93LCBpcyBkZWZpbmVkIGFzOgorICoKKyAqICAgYml0cyAwOjMgLSB0b3RhbCBndWVzdCBwYWdpbmcgbGV2ZWxzICgyLTQsIG9yIHplcm8gZm9yIHJlYWwgbW9kZSkKKyAqICAgYml0cyA0OjcgLSBwYWdlIHRhYmxlIGxldmVsIGZvciB0aGlzIHNoYWRvdyAoMS00KQorICogICBiaXRzIDg6OSAtIHBhZ2UgdGFibGUgcXVhZHJhbnQgZm9yIDItbGV2ZWwgZ3Vlc3RzCisgKiAgIGJpdCAgIDE2IC0gIm1ldGFwaHlzaWNhbCIgLSBnZm4gaXMgbm90IGEgcmVhbCBwYWdlIChodWdlIHBhZ2UvcmVhbCBtb2RlKQorICovCit1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSB7CisJdW5zaWduZWQgd29yZDsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBnbGV2ZWxzIDogNDsKKwkJdW5zaWduZWQgbGV2ZWwgOiA0OworCQl1bnNpZ25lZCBxdWFkcmFudCA6IDI7CisJCXVuc2lnbmVkIHBhZF9mb3JfbmljZV9oZXhfb3V0cHV0IDogNjsKKwkJdW5zaWduZWQgbWV0YXBoeXNpY2FsIDogMTsKKwl9OworfTsKKworc3RydWN0IGt2bV9tbXVfcGFnZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCXN0cnVjdCBobGlzdF9ub2RlIGhhc2hfbGluazsKKworCS8qCisJICogVGhlIGZvbGxvd2luZyB0d28gZW50cmllcyBhcmUgdXNlZCB0byBrZXkgdGhlIHNoYWRvdyBwYWdlIGluIHRoZQorCSAqIGhhc2ggdGFibGUuCisJICovCisJZ2ZuX3QgZ2ZuOworCXVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHJvbGU7CisKKwlocGFfdCBwYWdlX2hwYTsKKwl1bnNpZ25lZCBsb25nIHNsb3RfYml0bWFwOyAvKiBPbmUgYml0IHNldCBwZXIgc2xvdCB3aGljaCBoYXMgbWVtb3J5CisJCQkJICAgICogaW4gdGhpcyBzaGFkb3cgcGFnZS4KKwkJCQkgICAgKi8KKwlpbnQgZ2xvYmFsOyAgICAgICAgICAgICAgLyogU2V0IGlmIGFsbCBwdGVzIGluIHRoaXMgcGFnZSBhcmUgZ2xvYmFsICovCisJaW50IG11bHRpbWFwcGVkOyAgICAgICAgIC8qIE1vcmUgdGhhbiBvbmUgcGFyZW50X3B0ZT8gKi8KKwlpbnQgcm9vdF9jb3VudDsgICAgICAgICAgLyogQ3VycmVudGx5IHNlcnZpbmcgYXMgYWN0aXZlIHJvb3QgKi8KKwl1bmlvbiB7CisJCXU2NCAqcGFyZW50X3B0ZTsgICAgICAgICAgICAgICAvKiAhbXVsdGltYXBwZWQgKi8KKwkJc3RydWN0IGhsaXN0X2hlYWQgcGFyZW50X3B0ZXM7IC8qIG11bHRpbWFwcGVkLCBrdm1fcHRlX2NoYWluICovCisJfTsKK307CisKK3N0cnVjdCB2bWNzIHsKKwl1MzIgcmV2aXNpb25faWQ7CisJdTMyIGFib3J0OworCWNoYXIgZGF0YVswXTsKK307CisKKyNkZWZpbmUgdm14X21zcl9lbnRyeSBrdm1fbXNyX2VudHJ5CisKK3N0cnVjdCBrdm1fdmNwdTsKKworLyoKKyAqIHg4NiBzdXBwb3J0cyAzIHBhZ2luZyBtb2RlcyAoNC1sZXZlbCA2NC1iaXQsIDMtbGV2ZWwgNjQtYml0LCBhbmQgMi1sZXZlbAorICogMzItYml0KS4gIFRoZSBrdm1fbW11IHN0cnVjdHVyZSBhYnN0cmFjdHMgdGhlIGRldGFpbHMgb2YgdGhlIGN1cnJlbnQgbW11CisgKiBtb2RlLgorICovCitzdHJ1Y3Qga3ZtX21tdSB7CisJdm9pZCAoKm5ld19jcjMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJaW50ICgqcGFnZV9mYXVsdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHUzMiBlcnIpOworCXZvaWQgKCpmcmVlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCWdwYV90ICgqZ3ZhX3RvX2dwYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpOworCWhwYV90IHJvb3RfaHBhOworCWludCByb290X2xldmVsOworCWludCBzaGFkb3dfcm9vdF9sZXZlbDsKKworCXU2NCAqcGFlX3Jvb3Q7Cit9OworCisjZGVmaW5lIEtWTV9OUl9NRU1fT0JKUyAyMAorCitzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgeworCWludCBub2JqczsKKwl2b2lkICpvYmplY3RzW0tWTV9OUl9NRU1fT0JKU107Cit9OworCisvKgorICogV2UgZG9uJ3Qgd2FudCBhbGxvY2F0aW9uIGZhaWx1cmVzIHdpdGhpbiB0aGUgbW11IGNvZGUsIHNvIHdlIHByZWFsbG9jYXRlCisgKiBlbm91Z2ggbWVtb3J5IGZvciBhIHNpbmdsZSBwYWdlIGZhdWx0IGluIGEgY2FjaGUuCisgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgeworCWludCBlbmFibGVkOworCXVuc2lnbmVkIGxvbmcgYnBbNF07CisJaW50IHNpbmdsZXN0ZXA7Cit9OworCitlbnVtIHsKKwlWQ1BVX1JFR1NfUkFYID0gMCwKKwlWQ1BVX1JFR1NfUkNYID0gMSwKKwlWQ1BVX1JFR1NfUkRYID0gMiwKKwlWQ1BVX1JFR1NfUkJYID0gMywKKwlWQ1BVX1JFR1NfUlNQID0gNCwKKwlWQ1BVX1JFR1NfUkJQID0gNSwKKwlWQ1BVX1JFR1NfUlNJID0gNiwKKwlWQ1BVX1JFR1NfUkRJID0gNywKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJVkNQVV9SRUdTX1I4ID0gOCwKKwlWQ1BVX1JFR1NfUjkgPSA5LAorCVZDUFVfUkVHU19SMTAgPSAxMCwKKwlWQ1BVX1JFR1NfUjExID0gMTEsCisJVkNQVV9SRUdTX1IxMiA9IDEyLAorCVZDUFVfUkVHU19SMTMgPSAxMywKKwlWQ1BVX1JFR1NfUjE0ID0gMTQsCisJVkNQVV9SRUdTX1IxNSA9IDE1LAorI2VuZGlmCisJTlJfVkNQVV9SRUdTCit9OworCitlbnVtIHsKKwlWQ1BVX1NSRUdfQ1MsCisJVkNQVV9TUkVHX0RTLAorCVZDUFVfU1JFR19FUywKKwlWQ1BVX1NSRUdfRlMsCisJVkNQVV9TUkVHX0dTLAorCVZDUFVfU1JFR19TUywKKwlWQ1BVX1NSRUdfVFIsCisJVkNQVV9TUkVHX0xEVFIsCit9OworCitzdHJ1Y3Qga3ZtX3ZjcHUgeworCXN0cnVjdCBrdm0gKmt2bTsKKwl1bmlvbiB7CisJCXN0cnVjdCB2bWNzICp2bWNzOworCQlzdHJ1Y3QgdmNwdV9zdm0gKnN2bTsKKwl9OworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlpbnQgICBjcHU7CisJaW50ICAgbGF1bmNoZWQ7CisJaW50IGludGVycnVwdF93aW5kb3dfb3BlbjsKKwl1bnNpZ25lZCBsb25nIGlycV9zdW1tYXJ5OyAvKiBiaXQgdmVjdG9yOiAxIHBlciB3b3JkIGluIGlycV9wZW5kaW5nICovCisjZGVmaW5lIE5SX0lSUV9XT1JEUyBLVk1fSVJRX0JJVE1BUF9TSVpFKHVuc2lnbmVkIGxvbmcpCisJdW5zaWduZWQgbG9uZyBpcnFfcGVuZGluZ1tOUl9JUlFfV09SRFNdOworCXVuc2lnbmVkIGxvbmcgcmVnc1tOUl9WQ1BVX1JFR1NdOyAvKiBmb3IgcnNwOiB2Y3B1X2xvYWRfcnNwX3JpcCgpICovCisJdW5zaWduZWQgbG9uZyByaXA7ICAgICAgLyogbmVlZHMgdmNwdV9sb2FkX3JzcF9yaXAoKSAqLworCisJdW5zaWduZWQgbG9uZyBjcjA7CisJdW5zaWduZWQgbG9uZyBjcjI7CisJdW5zaWduZWQgbG9uZyBjcjM7CisJdW5zaWduZWQgbG9uZyBjcjQ7CisJdW5zaWduZWQgbG9uZyBjcjg7CisJdTY0IHBkcHRyc1s0XTsgLyogcGFlICovCisJdTY0IHNoYWRvd19lZmVyOworCXU2NCBhcGljX2Jhc2U7CisJdTY0IGlhMzJfbWlzY19lbmFibGVfbXNyOworCWludCBubXNyczsKKwlzdHJ1Y3Qgdm14X21zcl9lbnRyeSAqZ3Vlc3RfbXNyczsKKwlzdHJ1Y3Qgdm14X21zcl9lbnRyeSAqaG9zdF9tc3JzOworCisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX3BhZ2VzOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgcGFnZV9oZWFkZXJfYnVmW0tWTV9OVU1fTU1VX1BBR0VTXTsKKwlzdHJ1Y3Qga3ZtX21tdSBtbXU7CisKKwlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgbW11X3B0ZV9jaGFpbl9jYWNoZTsKKwlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgbW11X3JtYXBfZGVzY19jYWNoZTsKKworCWdmbl90IGxhc3RfcHRfd3JpdGVfZ2ZuOworCWludCAgIGxhc3RfcHRfd3JpdGVfY291bnQ7CisKKwlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIGd1ZXN0X2RlYnVnOworCisJY2hhciBmeF9idWZbRlhfQlVGX1NJWkVdOworCWNoYXIgKmhvc3RfZnhfaW1hZ2U7CisJY2hhciAqZ3Vlc3RfZnhfaW1hZ2U7CisKKwlpbnQgbW1pb19uZWVkZWQ7CisJaW50IG1taW9fcmVhZF9jb21wbGV0ZWQ7CisJaW50IG1taW9faXNfd3JpdGU7CisJaW50IG1taW9fc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIG1taW9fZGF0YVs4XTsKKwlncGFfdCBtbWlvX3BoeXNfYWRkcjsKKworCXN0cnVjdCB7CisJCWludCBhY3RpdmU7CisJCXU4IHNhdmVfaW9wbDsKKwkJc3RydWN0IGt2bV9zYXZlX3NlZ21lbnQgeworCQkJdTE2IHNlbGVjdG9yOworCQkJdW5zaWduZWQgbG9uZyBiYXNlOworCQkJdTMyIGxpbWl0OworCQkJdTMyIGFyOworCQl9IHRyLCBlcywgZHMsIGZzLCBnczsKKwl9IHJtb2RlOworfTsKKworc3RydWN0IGt2bV9tZW1vcnlfc2xvdCB7CisJZ2ZuX3QgYmFzZV9nZm47CisJdW5zaWduZWQgbG9uZyBucGFnZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGFnZSAqKnBoeXNfbWVtOworCXVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcDsKK307CisKK3N0cnVjdCBrdm0geworCXNwaW5sb2NrX3QgbG9jazsgLyogcHJvdGVjdHMgZXZlcnl0aGluZyBleGNlcHQgdmNwdXMgKi8KKwlpbnQgbm1lbXNsb3RzOworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgbWVtc2xvdHNbS1ZNX01FTU9SWV9TTE9UU107CisJLyoKKwkgKiBIYXNoIHRhYmxlIG9mIHN0cnVjdCBrdm1fbW11X3BhZ2UuCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfbW11X3BhZ2VzOworCWludCBuX2ZyZWVfbW11X3BhZ2VzOworCXN0cnVjdCBobGlzdF9oZWFkIG1tdV9wYWdlX2hhc2hbS1ZNX05VTV9NTVVfUEFHRVNdOworCXN0cnVjdCBrdm1fdmNwdSB2Y3B1c1tLVk1fTUFYX1ZDUFVTXTsKKwlpbnQgbWVtb3J5X2NvbmZpZ192ZXJzaW9uOworCWludCBidXN5OworCXVuc2lnbmVkIGxvbmcgcm1hcF9vdmVyZmxvdzsKK307CisKK3N0cnVjdCBrdm1fc3RhdCB7CisJdTMyIHBmX2ZpeGVkOworCXUzMiBwZl9ndWVzdDsKKwl1MzIgdGxiX2ZsdXNoOworCXUzMiBpbnZscGc7CisKKwl1MzIgZXhpdHM7CisJdTMyIGlvX2V4aXRzOworCXUzMiBtbWlvX2V4aXRzOworCXUzMiBzaWduYWxfZXhpdHM7CisJdTMyIGlycV93aW5kb3dfZXhpdHM7CisJdTMyIGhhbHRfZXhpdHM7CisJdTMyIHJlcXVlc3RfaXJxX2V4aXRzOworCXUzMiBpcnFfZXhpdHM7Cit9OworCitzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSB7CisJdTE2IGxpbWl0OworCXVuc2lnbmVkIGxvbmcgYmFzZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBrdm1fYXJjaF9vcHMgeworCWludCAoKmNwdV9oYXNfa3ZtX3N1cHBvcnQpKHZvaWQpOyAgICAgICAgICAvKiBfX2luaXQgKi8KKwlpbnQgKCpkaXNhYmxlZF9ieV9iaW9zKSh2b2lkKTsgICAgICAgICAgICAgLyogX19pbml0ICovCisJdm9pZCAoKmhhcmR3YXJlX2VuYWJsZSkodm9pZCAqZHVtbXkpOyAgICAgIC8qIF9faW5pdCAqLworCXZvaWQgKCpoYXJkd2FyZV9kaXNhYmxlKSh2b2lkICpkdW1teSk7CisJaW50ICgqaGFyZHdhcmVfc2V0dXApKHZvaWQpOyAgICAgICAgICAgICAgIC8qIF9faW5pdCAqLworCXZvaWQgKCpoYXJkd2FyZV91bnNldHVwKSh2b2lkKTsgICAgICAgICAgICAvKiBfX2V4aXQgKi8KKworCWludCAoKnZjcHVfY3JlYXRlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCp2Y3B1X2ZyZWUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKigqdmNwdV9sb2FkKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCp2Y3B1X3B1dCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKworCWludCAoKnNldF9ndWVzdF9kZWJ1Zykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZyk7CisJaW50ICgqZ2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgKnBkYXRhKTsKKwlpbnQgKCpzZXRfbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3JfaW5kZXgsIHU2NCBkYXRhKTsKKwl1NjQgKCpnZXRfc2VnbWVudF9iYXNlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpOworCXZvaWQgKCpnZXRfc2VnbWVudCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgIHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLCBpbnQgc2VnKTsKKwl2b2lkICgqc2V0X3NlZ21lbnQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICBzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhciwgaW50IHNlZyk7CisJdm9pZCAoKmdldF9jc19kYl9sX2JpdHMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50ICpkYiwgaW50ICpsKTsKKwl2b2lkICgqZGVjYWNoZV9jcjBfY3I0X2d1ZXN0X2JpdHMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdm9pZCAoKnNldF9jcjApKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApOworCXZvaWQgKCpzZXRfY3IwX25vX21vZGVzd2l0Y2gpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNyMCk7CisJdm9pZCAoKnNldF9jcjMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMpOworCXZvaWQgKCpzZXRfY3I0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTsKKwl2b2lkICgqc2V0X2VmZXIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpOworCXZvaWQgKCpnZXRfaWR0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICpkdCk7CisJdm9pZCAoKnNldF9pZHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKmR0KTsKKwl2b2lkICgqZ2V0X2dkdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSAqZHQpOworCXZvaWQgKCpzZXRfZ2R0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICpkdCk7CisJdW5zaWduZWQgbG9uZyAoKmdldF9kcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIpOworCXZvaWQgKCpzZXRfZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbHVlLAorCQkgICAgICAgaW50ICpleGNlcHRpb24pOworCXZvaWQgKCpjYWNoZV9yZWdzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCpkZWNhY2hlX3JlZ3MpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdW5zaWduZWQgbG9uZyAoKmdldF9yZmxhZ3MpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdm9pZCAoKnNldF9yZmxhZ3MpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByZmxhZ3MpOworCisJdm9pZCAoKmludmxwZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyKTsKKwl2b2lkICgqdGxiX2ZsdXNoKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCppbmplY3RfcGFnZV9mYXVsdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgZXJyX2NvZGUpOworCisJdm9pZCAoKmluamVjdF9ncCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBlcnJfY29kZSk7CisKKwlpbnQgKCpydW4pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1bik7CisJaW50ICgqdmNwdV9zZXR1cCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwl2b2lkICgqc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK307CisKK2V4dGVybiBzdHJ1Y3Qga3ZtX3N0YXQga3ZtX3N0YXQ7CitleHRlcm4gc3RydWN0IGt2bV9hcmNoX29wcyAqa3ZtX2FyY2hfb3BzOworCisjZGVmaW5lIGt2bV9wcmludGYoa3ZtLCBmbXQgLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQpCisjZGVmaW5lIHZjcHVfcHJpbnRmKHZjcHUsIGZtdC4uLikga3ZtX3ByaW50Zih2Y3B1LT5rdm0sIGZtdCkKKworaW50IGt2bV9pbml0X2FyY2goc3RydWN0IGt2bV9hcmNoX29wcyAqb3BzLCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUpOwordm9pZCBrdm1fZXhpdF9hcmNoKHZvaWQpOworCit2b2lkIGt2bV9tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworaW50IGt2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitpbnQga3ZtX21tdV9zZXR1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCitpbnQga3ZtX21tdV9yZXNldF9jb250ZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cit2b2lkIGt2bV9tbXVfc2xvdF9yZW1vdmVfd3JpdGVfYWNjZXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNsb3QpOworCitocGFfdCBncGFfdG9faHBhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKTsKKyNkZWZpbmUgSFBBX01TQiAoKHNpemVvZihocGFfdCkgKiA4KSAtIDEpCisjZGVmaW5lIEhQQV9FUlJfTUFTSyAoKGhwYV90KTEgPDwgSFBBX01TQikKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2Vycm9yX2hwYShocGFfdCBocGEpIHsgcmV0dXJuIGhwYSA+PiBIUEFfTVNCOyB9CitocGFfdCBndmFfdG9faHBhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKKwordm9pZCBrdm1fZW11bGF0b3Jfd2FudF9ncm91cDdfaW52bHBnKHZvaWQpOworCitleHRlcm4gaHBhX3QgYmFkX3BhZ2VfYWRkcmVzczsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZ2ZuX3RvX3BhZ2Uoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuKQoreworCXJldHVybiBzbG90LT5waHlzX21lbVtnZm4gLSBzbG90LT5iYXNlX2dmbl07Cit9CisKK3N0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmdmbl90b19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKK3ZvaWQgbWFya19wYWdlX2RpcnR5KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKKworZW51bSBlbXVsYXRpb25fcmVzdWx0IHsKKwlFTVVMQVRFX0RPTkUsICAgICAgIC8qIG5vIGZ1cnRoZXIgcHJvY2Vzc2luZyAqLworCUVNVUxBVEVfRE9fTU1JTywgICAgICAvKiBrdm1fcnVuIGZpbGxlZCB3aXRoIG1taW8gcmVxdWVzdCAqLworCUVNVUxBVEVfRkFJTCwgICAgICAgICAvKiBjYW4ndCBlbXVsYXRlIHRoaXMgaW5zdHJ1Y3Rpb24gKi8KK307CisKK2ludCBlbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1biwKKwkJCXVuc2lnbmVkIGxvbmcgY3IyLCB1MTYgZXJyb3JfY29kZSk7Cit2b2lkIHJlYWxtb2RlX2xnZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2l6ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK3ZvaWQgcmVhbG1vZGVfbGlkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzaXplLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwordm9pZCByZWFsbW9kZV9sbXN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBtc3csCisJCSAgIHVuc2lnbmVkIGxvbmcgKnJmbGFncyk7CisKK3Vuc2lnbmVkIGxvbmcgcmVhbG1vZGVfZ2V0X2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNyKTsKK3ZvaWQgcmVhbG1vZGVfc2V0X2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNyLCB1bnNpZ25lZCBsb25nIHZhbHVlLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgKnJmbGFncyk7CisKK3N0cnVjdCB4ODZfZW11bGF0ZV9jdHh0OworCitpbnQgZW11bGF0ZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyZXNzKTsKK2ludCBlbXVsYXRlX2NsdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBlbXVsYXRvcl9nZXRfZHIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQqIGN0eHQsIGludCBkciwKKwkJICAgIHVuc2lnbmVkIGxvbmcgKmRlc3QpOworaW50IGVtdWxhdG9yX3NldF9kcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGRyLAorCQkgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisKK3ZvaWQgc2V0X2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKTsKK3ZvaWQgc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKTsKK3ZvaWQgc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKTsKK3ZvaWQgc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKTsKK3ZvaWQgbG1zdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgbXN3KTsKKworaW50IGt2bV9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEpOworaW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKTsKKwordm9pZCBmeF9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKK3ZvaWQgbG9hZF9tc3JzKHN0cnVjdCB2bXhfbXNyX2VudHJ5ICplLCBpbnQgbik7Cit2b2lkIHNhdmVfbXNycyhzdHJ1Y3Qgdm14X21zcl9lbnRyeSAqZSwgaW50IG4pOwordm9pZCBrdm1fcmVzY2hlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCitpbnQga3ZtX3JlYWRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCSAgICAgICBndmFfdCBhZGRyLAorCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJICAgICAgIHZvaWQgKmRlc3QpOworCitpbnQga3ZtX3dyaXRlX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJZ3ZhX3QgYWRkciwKKwkJdW5zaWduZWQgbG9uZyBzaXplLAorCQl2b2lkICpkYXRhKTsKKwordW5zaWduZWQgbG9uZyBzZWdtZW50X2Jhc2UodTE2IHNlbGVjdG9yKTsKKwordm9pZCBrdm1fbW11X3ByZV93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgaW50IGJ5dGVzKTsKK3ZvaWQga3ZtX21tdV9wb3N0X3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCBpbnQgYnl0ZXMpOworaW50IGt2bV9tbXVfdW5wcm90ZWN0X3BhZ2VfdmlydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSk7Cit2b2lkIGt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwKKwkJCQkgICAgIHUzMiBlcnJvcl9jb2RlKQoreworCWlmICh1bmxpa2VseSh2Y3B1LT5rdm0tPm5fZnJlZV9tbXVfcGFnZXMgPCBLVk1fTUlOX0ZSRUVfTU1VX1BBR0VTKSkKKwkJa3ZtX21tdV9mcmVlX3NvbWVfcGFnZXModmNwdSk7CisJcmV0dXJuIHZjcHUtPm1tdS5wYWdlX2ZhdWx0KHZjcHUsIGd2YSwgZXJyb3JfY29kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl9nZm5fdG9fcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKK3sKKwlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90ID0gZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pOworCXJldHVybiAoc2xvdCkgPyBzbG90LT5waHlzX21lbVtnZm4gLSBzbG90LT5iYXNlX2dmbl0gOiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19sb25nX21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworI2lmZGVmIENPTkZJR19YODZfNjQKKwlyZXR1cm4gdmNwdS0+c2hhZG93X2VmZXIgJiBFRkVSX0xNRTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfcGFlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gdmNwdS0+Y3I0ICYgQ1I0X1BBRV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19wc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiB2Y3B1LT5jcjQgJiBDUjRfUFNFX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3BhZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPmNyMCAmIENSMF9QR19NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBtZW1zbG90X2lkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKK3sKKwlyZXR1cm4gc2xvdCAtIGt2bS0+bWVtc2xvdHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZV9oZWFkZXIoaHBhX3Qgc2hhZG93X3BhZ2UpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShzaGFkb3dfcGFnZSA+PiBQQUdFX1NISUZUKTsKKworCXJldHVybiAoc3RydWN0IGt2bV9tbXVfcGFnZSAqKXBhZ2UtPnByaXZhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHJlYWRfZnModm9pZCkKK3sKKwl1MTYgc2VnOworCWFzbSAoIm1vdiAlJWZzLCAlMCIgOiAiPWciKHNlZykpOworCXJldHVybiBzZWc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHJlYWRfZ3Modm9pZCkKK3sKKwl1MTYgc2VnOworCWFzbSAoIm1vdiAlJWdzLCAlMCIgOiAiPWciKHNlZykpOworCXJldHVybiBzZWc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHJlYWRfbGR0KHZvaWQpCit7CisJdTE2IGxkdDsKKwlhc20gKCJzbGR0ICUwIiA6ICI9ZyIobGR0KSk7CisJcmV0dXJuIGxkdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvYWRfZnModTE2IHNlbCkKK3sKKwlhc20gKCJtb3YgJTAsICUlZnMiIDogOiAicm0iKHNlbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9ncyh1MTYgc2VsKQoreworCWFzbSAoIm1vdiAlMCwgJSVncyIgOiA6ICJybSIoc2VsKSk7Cit9CisKKyNpZm5kZWYgbG9hZF9sZHQKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2xkdCh1MTYgc2VsKQoreworCWFzbSAoImxsZHQgJTAiIDogOiAiZyIoc2VsKSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGdldF9pZHQoc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKnRhYmxlKQoreworCWFzbSAoInNpZHQgJTAiIDogIj1tIigqdGFibGUpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdldF9nZHQoc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKnRhYmxlKQoreworCWFzbSAoInNnZHQgJTAiIDogIj1tIigqdGFibGUpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfdHJfYmFzZSh2b2lkKQoreworCXUxNiB0cjsKKwlhc20gKCJzdHIgJTAiIDogIj1nIih0cikpOworCXJldHVybiBzZWdtZW50X2Jhc2UodHIpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfbXNyKHVuc2lnbmVkIGxvbmcgbXNyKQoreworCXU2NCB2YWx1ZTsKKworCXJkbXNybChtc3IsIHZhbHVlKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGZ4X3NhdmUodm9pZCAqaW1hZ2UpCit7CisJYXNtICgiZnhzYXZlICglMCkiOjogInIiIChpbWFnZSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnhfcmVzdG9yZSh2b2lkICppbWFnZSkKK3sKKwlhc20gKCJmeHJzdG9yICglMCkiOjogInIiIChpbWFnZSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnB1X2luaXQodm9pZCkKK3sKKwlhc20gKCJmaW5pdCIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfcmR4X2luaXRfdmFsKHZvaWQpCit7CisJcmV0dXJuIDB4NjAwOyAvKiBQNiBmYW1pbHkgKi8KK30KKworI2RlZmluZSBBU01fVk1YX1ZNQ0xFQVJfUkFYICAgICAgICIuYnl0ZSAweDY2LCAweDBmLCAweGM3LCAweDMwIgorI2RlZmluZSBBU01fVk1YX1ZNTEFVTkNIICAgICAgICAgICIuYnl0ZSAweDBmLCAweDAxLCAweGMyIgorI2RlZmluZSBBU01fVk1YX1ZNUkVTVU1FICAgICAgICAgICIuYnl0ZSAweDBmLCAweDAxLCAweGMzIgorI2RlZmluZSBBU01fVk1YX1ZNUFRSTERfUkFYICAgICAgICIuYnl0ZSAweDBmLCAweGM3LCAweDMwIgorI2RlZmluZSBBU01fVk1YX1ZNUkVBRF9SRFhfUkFYICAgICIuYnl0ZSAweDBmLCAweDc4LCAweGQwIgorI2RlZmluZSBBU01fVk1YX1ZNV1JJVEVfUkFYX1JEWCAgICIuYnl0ZSAweDBmLCAweDc5LCAweGQwIgorI2RlZmluZSBBU01fVk1YX1ZNV1JJVEVfUlNQX1JEWCAgICIuYnl0ZSAweDBmLCAweDc5LCAweGQ0IgorI2RlZmluZSBBU01fVk1YX1ZNWE9GRiAgICAgICAgICAgICIuYnl0ZSAweDBmLCAweDAxLCAweGM0IgorI2RlZmluZSBBU01fVk1YX1ZNWE9OX1JBWCAgICAgICAgICIuYnl0ZSAweGYzLCAweDBmLCAweGM3LCAweDMwIgorCisjZGVmaW5lIE1TUl9JQTMyX1RJTUVfU1RBTVBfQ09VTlRFUgkJMHgwMTAKKworI2RlZmluZSBUU1NfSU9QQl9CQVNFX09GRlNFVCAweDY2CisjZGVmaW5lIFRTU19CQVNFX1NJWkUgMHg2OAorI2RlZmluZSBUU1NfSU9QQl9TSVpFICg2NTUzNiAvIDgpCisjZGVmaW5lIFRTU19SRURJUkVDVElPTl9TSVpFICgyNTYgLyA4KQorI2RlZmluZSBSTU9ERV9UU1NfU0laRSAoVFNTX0JBU0VfU0laRSArIFRTU19SRURJUkVDVElPTl9TSVpFICsgVFNTX0lPUEJfU0laRSArIDEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0va3ZtX21haW4uYyBiL2RyaXZlcnMva3ZtL2t2bV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwOTcyZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMva3ZtL2t2bV9tYWluLmMKQEAgLTAsMCArMSwyMTM2IEBACisvKgorICogS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSBkcml2ZXIgZm9yIExpbnV4CisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBtYWNoaW5lcyB3aXRoIEludGVsIFZULXggZXh0ZW5zaW9ucyB0byBydW4gdmlydHVhbAorICogbWFjaGluZXMgd2l0aG91dCBlbXVsYXRpb24gb3IgYmluYXJ5IHRyYW5zbGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBRdW1yYW5ldCwgSW5jLgorICoKKyAqIEF1dGhvcnM6CisgKiAgIEF2aSBLaXZpdHkgICA8YXZpQHF1bXJhbmV0LmNvbT4KKyAqICAgWWFuaXYgS2FtYXkgIDx5YW5pdkBxdW1yYW5ldC5jb20+CisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLiAgU2VlCisgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorICoKKyAqLworCisjaW5jbHVkZSAia3ZtLmgiCisKKyNpbmNsdWRlIDxsaW51eC9rdm0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKworI2luY2x1ZGUgIng4Nl9lbXVsYXRlLmgiCisjaW5jbHVkZSAic2VnbWVudF9kZXNjcmlwdG9yLmgiCisKK01PRFVMRV9BVVRIT1IoIlF1bXJhbmV0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0cnVjdCBrdm1fYXJjaF9vcHMgKmt2bV9hcmNoX29wczsKK3N0cnVjdCBrdm1fc3RhdCBrdm1fc3RhdDsKK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9zdGF0KTsKKworc3RhdGljIHN0cnVjdCBrdm1fc3RhdHNfZGVidWdmc19pdGVtIHsKKwljb25zdCBjaGFyICpuYW1lOworCXUzMiAqZGF0YTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Cit9IGRlYnVnZnNfZW50cmllc1tdID0geworCXsgInBmX2ZpeGVkIiwgJmt2bV9zdGF0LnBmX2ZpeGVkIH0sCisJeyAicGZfZ3Vlc3QiLCAma3ZtX3N0YXQucGZfZ3Vlc3QgfSwKKwl7ICJ0bGJfZmx1c2giLCAma3ZtX3N0YXQudGxiX2ZsdXNoIH0sCisJeyAiaW52bHBnIiwgJmt2bV9zdGF0LmludmxwZyB9LAorCXsgImV4aXRzIiwgJmt2bV9zdGF0LmV4aXRzIH0sCisJeyAiaW9fZXhpdHMiLCAma3ZtX3N0YXQuaW9fZXhpdHMgfSwKKwl7ICJtbWlvX2V4aXRzIiwgJmt2bV9zdGF0Lm1taW9fZXhpdHMgfSwKKwl7ICJzaWduYWxfZXhpdHMiLCAma3ZtX3N0YXQuc2lnbmFsX2V4aXRzIH0sCisJeyAiaXJxX3dpbmRvdyIsICZrdm1fc3RhdC5pcnFfd2luZG93X2V4aXRzIH0sCisJeyAiaGFsdF9leGl0cyIsICZrdm1fc3RhdC5oYWx0X2V4aXRzIH0sCisJeyAicmVxdWVzdF9pcnEiLCAma3ZtX3N0YXQucmVxdWVzdF9pcnFfZXhpdHMgfSwKKwl7ICJpcnFfZXhpdHMiLCAma3ZtX3N0YXQuaXJxX2V4aXRzIH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RpcjsKKworI2RlZmluZSBNQVhfSU9fTVNSUyAyNTYKKworI2RlZmluZSBDUjBfUkVTRVZFRF9CSVRTIDB4ZmZmZmZmZmYxZmZhZmZjMFVMTAorI2RlZmluZSBMTVNXX0dVRVNUX01BU0sgMHgwZVVMTAorI2RlZmluZSBDUjRfUkVTRVZFRF9CSVRTICh+KCgxVUxMIDw8IDExKSAtIDEpKQorI2RlZmluZSBDUjhfUkVTRVZFRF9CSVRTICh+MHgwZlVMTCkKKyNkZWZpbmUgRUZFUl9SRVNFUlZFRF9CSVRTIDB4ZmZmZmZmZmZmZmZmZjJmZQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorLy8gTERUIG9yIFRTUyBkZXNjcmlwdG9yIGluIHRoZSBHRFQuIDE2IGJ5dGVzLgorc3RydWN0IHNlZ21lbnRfZGVzY3JpcHRvcl82NCB7CisJc3RydWN0IHNlZ21lbnRfZGVzY3JpcHRvciBzOworCXUzMiBiYXNlX2hpZ2hlcjsKKwl1MzIgcGFkX3plcm87Cit9OworCisjZW5kaWYKKwordW5zaWduZWQgbG9uZyBzZWdtZW50X2Jhc2UodTE2IHNlbGVjdG9yKQoreworCXN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlIGdkdDsKKwlzdHJ1Y3Qgc2VnbWVudF9kZXNjcmlwdG9yICpkOworCXVuc2lnbmVkIGxvbmcgdGFibGVfYmFzZTsKKwl0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWw7CisJdW5zaWduZWQgbG9uZyB2OworCisJaWYgKHNlbGVjdG9yID09IDApCisJCXJldHVybiAwOworCisJYXNtICgic2dkdCAlMCIgOiAiPW0iKGdkdCkpOworCXRhYmxlX2Jhc2UgPSBnZHQuYmFzZTsKKworCWlmIChzZWxlY3RvciAmIDQpIHsgICAgICAgICAgIC8qIGZyb20gbGR0ICovCisJCXUxNiBsZHRfc2VsZWN0b3I7CisKKwkJYXNtICgic2xkdCAlMCIgOiAiPWciKGxkdF9zZWxlY3RvcikpOworCQl0YWJsZV9iYXNlID0gc2VnbWVudF9iYXNlKGxkdF9zZWxlY3Rvcik7CisJfQorCWQgPSAoc3RydWN0IHNlZ21lbnRfZGVzY3JpcHRvciAqKSh0YWJsZV9iYXNlICsgKHNlbGVjdG9yICYgfjcpKTsKKwl2ID0gZC0+YmFzZV9sb3cgfCAoKHVsKWQtPmJhc2VfbWlkIDw8IDE2KSB8ICgodWwpZC0+YmFzZV9oaWdoIDw8IDI0KTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaWYgKGQtPnN5c3RlbSA9PSAwCisJICAgICYmIChkLT50eXBlID09IDIgfHwgZC0+dHlwZSA9PSA5IHx8IGQtPnR5cGUgPT0gMTEpKQorCQl2IHw9ICgodWwpKChzdHJ1Y3Qgc2VnbWVudF9kZXNjcmlwdG9yXzY0ICopZCktPmJhc2VfaGlnaGVyKSA8PCAzMjsKKyNlbmRpZgorCXJldHVybiB2OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2VnbWVudF9iYXNlKTsKKworc3RhdGljIGlubGluZSBpbnQgdmFsaWRfdmNwdShpbnQgbikKK3sKKwlyZXR1cm4gbGlrZWx5KG4gPj0gMCAmJiBuIDwgS1ZNX01BWF9WQ1BVUyk7Cit9CisKK2ludCBrdm1fcmVhZF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgIGd2YV90IGFkZHIsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgdm9pZCAqZGVzdCkKK3sKKwl1bnNpZ25lZCBjaGFyICpob3N0X2J1ZiA9IGRlc3Q7CisJdW5zaWduZWQgbG9uZyByZXFfc2l6ZSA9IHNpemU7CisKKwl3aGlsZSAoc2l6ZSkgeworCQlocGFfdCBwYWRkcjsKKwkJdW5zaWduZWQgbm93OworCQl1bnNpZ25lZCBvZmZzZXQ7CisJCWh2YV90IGd1ZXN0X2J1ZjsKKworCQlwYWRkciA9IGd2YV90b19ocGEodmNwdSwgYWRkcik7CisKKwkJaWYgKGlzX2Vycm9yX2hwYShwYWRkcikpCisJCQlicmVhazsKKworCQlndWVzdF9idWYgPSAoaHZhX3Qpa21hcF9hdG9taWMoCisJCQkJCXBmbl90b19wYWdlKHBhZGRyID4+IFBBR0VfU0hJRlQpLAorCQkJCQlLTV9VU0VSMCk7CisJCW9mZnNldCA9IGFkZHIgJiB+UEFHRV9NQVNLOworCQlndWVzdF9idWYgfD0gb2Zmc2V0OworCQlub3cgPSBtaW4oc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKKwkJbWVtY3B5KGhvc3RfYnVmLCAodm9pZCopZ3Vlc3RfYnVmLCBub3cpOworCQlob3N0X2J1ZiArPSBub3c7CisJCWFkZHIgKz0gbm93OworCQlzaXplIC09IG5vdzsKKwkJa3VubWFwX2F0b21pYygodm9pZCAqKShndWVzdF9idWYgJiBQQUdFX01BU0spLCBLTV9VU0VSMCk7CisJfQorCXJldHVybiByZXFfc2l6ZSAtIHNpemU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fcmVhZF9ndWVzdCk7CisKK2ludCBrdm1fd3JpdGVfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICBndmFfdCBhZGRyLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciAqaG9zdF9idWYgPSBkYXRhOworCXVuc2lnbmVkIGxvbmcgcmVxX3NpemUgPSBzaXplOworCisJd2hpbGUgKHNpemUpIHsKKwkJaHBhX3QgcGFkZHI7CisJCXVuc2lnbmVkIG5vdzsKKwkJdW5zaWduZWQgb2Zmc2V0OworCQlodmFfdCBndWVzdF9idWY7CisKKwkJcGFkZHIgPSBndmFfdG9faHBhKHZjcHUsIGFkZHIpOworCisJCWlmIChpc19lcnJvcl9ocGEocGFkZHIpKQorCQkJYnJlYWs7CisKKwkJZ3Vlc3RfYnVmID0gKGh2YV90KWttYXBfYXRvbWljKAorCQkJCXBmbl90b19wYWdlKHBhZGRyID4+IFBBR0VfU0hJRlQpLCBLTV9VU0VSMCk7CisJCW9mZnNldCA9IGFkZHIgJiB+UEFHRV9NQVNLOworCQlndWVzdF9idWYgfD0gb2Zmc2V0OworCQlub3cgPSBtaW4oc2l6ZSwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKKwkJbWVtY3B5KCh2b2lkKilndWVzdF9idWYsIGhvc3RfYnVmLCBub3cpOworCQlob3N0X2J1ZiArPSBub3c7CisJCWFkZHIgKz0gbm93OworCQlzaXplIC09IG5vdzsKKwkJa3VubWFwX2F0b21pYygodm9pZCAqKShndWVzdF9idWYgJiBQQUdFX01BU0spLCBLTV9VU0VSMCk7CisJfQorCXJldHVybiByZXFfc2l6ZSAtIHNpemU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fd3JpdGVfZ3Vlc3QpOworCitzdGF0aWMgaW50IHZjcHVfc2xvdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUgLSB2Y3B1LT5rdm0tPnZjcHVzOworfQorCisvKgorICogU3dpdGNoZXMgdG8gc3BlY2lmaWVkIHZjcHUsIHVudGlsIGEgbWF0Y2hpbmcgdmNwdV9wdXQoKQorICovCitzdGF0aWMgc3RydWN0IGt2bV92Y3B1ICp2Y3B1X2xvYWQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgdmNwdV9zbG90KQoreworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9ICZrdm0tPnZjcHVzW3ZjcHVfc2xvdF07CisKKwltdXRleF9sb2NrKCZ2Y3B1LT5tdXRleCk7CisJaWYgKHVubGlrZWx5KCF2Y3B1LT52bWNzKSkgeworCQltdXRleF91bmxvY2soJnZjcHUtPm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBrdm1fYXJjaF9vcHMtPnZjcHVfbG9hZCh2Y3B1KTsKK30KKworc3RhdGljIHZvaWQgdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWt2bV9hcmNoX29wcy0+dmNwdV9wdXQodmNwdSk7CisJbXV0ZXhfdW5sb2NrKCZ2Y3B1LT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBrdm0gKmt2bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm0pLCBHRlBfS0VSTkVMKTsKKwlpbnQgaTsKKworCWlmICgha3ZtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZrdm0tPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZrdm0tPmFjdGl2ZV9tbXVfcGFnZXMpOworCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyArK2kpIHsKKwkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gJmt2bS0+dmNwdXNbaV07CisKKwkJbXV0ZXhfaW5pdCgmdmNwdS0+bXV0ZXgpOworCQl2Y3B1LT5rdm0gPSBrdm07CisJCXZjcHUtPm1tdS5yb290X2hwYSA9IElOVkFMSURfUEFHRTsKKwkJSU5JVF9MSVNUX0hFQUQoJnZjcHUtPmZyZWVfcGFnZXMpOworCX0KKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBrdm07CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlIGFueSBtZW1vcnkgaW4gQGZyZWUgYnV0IG5vdCBpbiBAZG9udC4KKyAqLworc3RhdGljIHZvaWQga3ZtX2ZyZWVfcGh5c21lbV9zbG90KHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmZyZWUsCisJCQkJICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpkb250KQoreworCWludCBpOworCisJaWYgKCFkb250IHx8IGZyZWUtPnBoeXNfbWVtICE9IGRvbnQtPnBoeXNfbWVtKQorCQlpZiAoZnJlZS0+cGh5c19tZW0pIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBmcmVlLT5ucGFnZXM7ICsraSkKKwkJCQlpZiAoZnJlZS0+cGh5c19tZW1baV0pCisJCQkJCV9fZnJlZV9wYWdlKGZyZWUtPnBoeXNfbWVtW2ldKTsKKwkJCXZmcmVlKGZyZWUtPnBoeXNfbWVtKTsKKwkJfQorCisJaWYgKCFkb250IHx8IGZyZWUtPmRpcnR5X2JpdG1hcCAhPSBkb250LT5kaXJ0eV9iaXRtYXApCisJCXZmcmVlKGZyZWUtPmRpcnR5X2JpdG1hcCk7CisKKwlmcmVlLT5waHlzX21lbSA9IDA7CisJZnJlZS0+bnBhZ2VzID0gMDsKKwlmcmVlLT5kaXJ0eV9iaXRtYXAgPSAwOworfQorCitzdGF0aWMgdm9pZCBrdm1fZnJlZV9waHlzbWVtKHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBrdm0tPm5tZW1zbG90czsgKytpKQorCQlrdm1fZnJlZV9waHlzbWVtX3Nsb3QoJmt2bS0+bWVtc2xvdHNbaV0sIDApOworfQorCitzdGF0aWMgdm9pZCBrdm1fZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2Y3B1X2xvYWQodmNwdS0+a3ZtLCB2Y3B1X3Nsb3QodmNwdSkpOworCWt2bV9tbXVfZGVzdHJveSh2Y3B1KTsKKwl2Y3B1X3B1dCh2Y3B1KTsKKwlrdm1fYXJjaF9vcHMtPnZjcHVfZnJlZSh2Y3B1KTsKK30KKworc3RhdGljIHZvaWQga3ZtX2ZyZWVfdmNwdXMoc3RydWN0IGt2bSAqa3ZtKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7ICsraSkKKwkJa3ZtX2ZyZWVfdmNwdSgma3ZtLT52Y3B1c1tpXSk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCWt2bV9mcmVlX3ZjcHVzKGt2bSk7CisJa3ZtX2ZyZWVfcGh5c21lbShrdm0pOworCWtmcmVlKGt2bSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluamVjdF9ncChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJa3ZtX2FyY2hfb3BzLT5pbmplY3RfZ3AodmNwdSwgMCk7Cit9CisKKy8qCisgKiBMb2FkIHRoZSBwYWUgcGRwdHJzLiAgUmV0dXJuIHRydWUgaXMgdGhleSBhcmUgYWxsIHZhbGlkLgorICovCitzdGF0aWMgaW50IGxvYWRfcGRwdHJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMpCit7CisJZ2ZuX3QgcGRwdF9nZm4gPSBjcjMgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBvZmZzZXQgPSAoKGNyMyAmIChQQUdFX1NJWkUtMSkpID4+IDUpIDw8IDI7CisJaW50IGk7CisJdTY0IHBkcHRlOworCXU2NCAqcGRwdDsKKwlpbnQgcmV0OworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CisKKwlzcGluX2xvY2soJnZjcHUtPmt2bS0+bG9jayk7CisJbWVtc2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtPmt2bSwgcGRwdF9nZm4pOworCS8qIEZJWE1FOiAhbWVtc2xvdCAtIGVtdWxhdGU/IDB4ZmY/ICovCisJcGRwdCA9IGttYXBfYXRvbWljKGdmbl90b19wYWdlKG1lbXNsb3QsIHBkcHRfZ2ZuKSwgS01fVVNFUjApOworCisJcmV0ID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCXBkcHRlID0gcGRwdFtvZmZzZXQgKyBpXTsKKwkJaWYgKChwZHB0ZSAmIDEpICYmIChwZHB0ZSAmIDB4ZmZmZmZmZjAwMDAwMDFlNnVsbCkpIHsKKwkJCXJldCA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCXZjcHUtPnBkcHRyc1tpXSA9IHBkcHRbb2Zmc2V0ICsgaV07CisKK291dDoKKwlrdW5tYXBfYXRvbWljKHBkcHQsIEtNX1VTRVIwKTsKKwlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgc2V0X2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKQoreworCWlmIChjcjAgJiBDUjBfUkVTRVZFRF9CSVRTKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJzZXRfY3IwOiAweCVseCAjR1AsIHJlc2VydmVkIGJpdHMgMHglbHhcbiIsCisJCSAgICAgICBjcjAsIHZjcHUtPmNyMCk7CisJCWluamVjdF9ncCh2Y3B1KTsKKwkJcmV0dXJuOworCX0KKworCWlmICgoY3IwICYgQ1IwX05XX01BU0spICYmICEoY3IwICYgQ1IwX0NEX01BU0spKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJzZXRfY3IwOiAjR1AsIENEID09IDAgJiYgTlcgPT0gMVxuIik7CisJCWluamVjdF9ncCh2Y3B1KTsKKwkJcmV0dXJuOworCX0KKworCWlmICgoY3IwICYgQ1IwX1BHX01BU0spICYmICEoY3IwICYgQ1IwX1BFX01BU0spKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJzZXRfY3IwOiAjR1AsIHNldCBQRyBmbGFnICIKKwkJICAgICAgICJhbmQgYSBjbGVhciBQRSBmbGFnXG4iKTsKKwkJaW5qZWN0X2dwKHZjcHUpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFpc19wYWdpbmcodmNwdSkgJiYgKGNyMCAmIENSMF9QR19NQVNLKSkgeworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJaWYgKCh2Y3B1LT5zaGFkb3dfZWZlciAmIEVGRVJfTE1FKSkgeworCQkJaW50IGNzX2RiLCBjc19sOworCisJCQlpZiAoIWlzX3BhZSh2Y3B1KSkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHICJzZXRfY3IwOiAjR1AsIHN0YXJ0IHBhZ2luZyAiCisJCQkJICAgICAgICJpbiBsb25nIG1vZGUgd2hpbGUgUEFFIGlzIGRpc2FibGVkXG4iKTsKKwkJCQlpbmplY3RfZ3AodmNwdSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJa3ZtX2FyY2hfb3BzLT5nZXRfY3NfZGJfbF9iaXRzKHZjcHUsICZjc19kYiwgJmNzX2wpOworCQkJaWYgKGNzX2wpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2NyMDogI0dQLCBzdGFydCBwYWdpbmcgIgorCQkJCSAgICAgICAiaW4gbG9uZyBtb2RlIHdoaWxlIENTLkwgPT0gMVxuIik7CisJCQkJaW5qZWN0X2dwKHZjcHUpOworCQkJCXJldHVybjsKKworCQkJfQorCQl9IGVsc2UKKyNlbmRpZgorCQlpZiAoaXNfcGFlKHZjcHUpICYmICFsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LT5jcjMpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2NyMDogI0dQLCBwZHB0cnMgIgorCQkJICAgICAgICJyZXNlcnZlZCBiaXRzXG4iKTsKKwkJCWluamVjdF9ncCh2Y3B1KTsKKwkJCXJldHVybjsKKwkJfQorCisJfQorCisJa3ZtX2FyY2hfb3BzLT5zZXRfY3IwKHZjcHUsIGNyMCk7CisJdmNwdS0+Y3IwID0gY3IwOworCisJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOworCWt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTsKKwlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzZXRfY3IwKTsKKwordm9pZCBsbXN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBtc3cpCit7CisJa3ZtX2FyY2hfb3BzLT5kZWNhY2hlX2NyMF9jcjRfZ3Vlc3RfYml0cyh2Y3B1KTsKKwlzZXRfY3IwKHZjcHUsICh2Y3B1LT5jcjAgJiB+MHgwZnVsKSB8IChtc3cgJiAweDBmKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsbXN3KTsKKwordm9pZCBzZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpCit7CisJaWYgKGNyNCAmIENSNF9SRVNFVkVEX0JJVFMpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNldF9jcjQ6ICNHUCwgcmVzZXJ2ZWQgYml0c1xuIik7CisJCWluamVjdF9ncCh2Y3B1KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpc19sb25nX21vZGUodmNwdSkpIHsKKwkJaWYgKCEoY3I0ICYgQ1I0X1BBRV9NQVNLKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgInNldF9jcjQ6ICNHUCwgY2xlYXJpbmcgUEFFIHdoaWxlICIKKwkJCSAgICAgICAiaW4gbG9uZyBtb2RlXG4iKTsKKwkJCWluamVjdF9ncCh2Y3B1KTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSBpZiAoaXNfcGFnaW5nKHZjcHUpICYmICFpc19wYWUodmNwdSkgJiYgKGNyNCAmIENSNF9QQUVfTUFTSykKKwkJICAgJiYgIWxvYWRfcGRwdHJzKHZjcHUsIHZjcHUtPmNyMykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNldF9jcjQ6ICNHUCwgcGRwdHJzIHJlc2VydmVkIGJpdHNcbiIpOworCQlpbmplY3RfZ3AodmNwdSk7CisJfQorCisJaWYgKGNyNCAmIENSNF9WTVhFX01BU0spIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNldF9jcjQ6ICNHUCwgc2V0dGluZyBWTVhFXG4iKTsKKwkJaW5qZWN0X2dwKHZjcHUpOworCQlyZXR1cm47CisJfQorCWt2bV9hcmNoX29wcy0+c2V0X2NyNCh2Y3B1LCBjcjQpOworCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKKwlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CisJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzZXRfY3I0KTsKKwordm9pZCBzZXRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMpCit7CisJaWYgKGlzX2xvbmdfbW9kZSh2Y3B1KSkgeworCQlpZiAoIGNyMyAmIENSM19MX01PREVfUkVTRVZFRF9CSVRTKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2NyMzogI0dQLCByZXNlcnZlZCBiaXRzXG4iKTsKKwkJCWluamVjdF9ncCh2Y3B1KTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjcjMgJiBDUjNfUkVTRVZFRF9CSVRTKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2NyMzogI0dQLCByZXNlcnZlZCBiaXRzXG4iKTsKKwkJCWluamVjdF9ncCh2Y3B1KTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoaXNfcGFnaW5nKHZjcHUpICYmIGlzX3BhZSh2Y3B1KSAmJgorCQkgICAgIWxvYWRfcGRwdHJzKHZjcHUsIGNyMykpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzZXRfY3IzOiAjR1AsIHBkcHRycyAiCisJCQkgICAgICAgInJlc2VydmVkIGJpdHNcbiIpOworCQkJaW5qZWN0X2dwKHZjcHUpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJdmNwdS0+Y3IzID0gY3IzOworCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKKwkvKgorCSAqIERvZXMgdGhlIG5ldyBjcjMgdmFsdWUgbWFwIHRvIHBoeXNpY2FsIG1lbW9yeT8gKE5vdGUsIHdlCisJICogY2F0Y2ggYW4gaW52YWxpZCBjcjMgZXZlbiBpbiByZWFsLW1vZGUsIGJlY2F1c2UgaXQgd291bGQKKwkgKiBjYXVzZSB0cm91YmxlIGxhdGVyIG9uIHdoZW4gd2UgdHVybiBvbiBwYWdpbmcgYW55d2F5LikKKwkgKgorCSAqIEEgcmVhbCBDUFUgd291bGQgc2lsZW50bHkgYWNjZXB0IGFuIGludmFsaWQgY3IzIGFuZCB3b3VsZAorCSAqIGF0dGVtcHQgdG8gdXNlIGl0IC0gd2l0aCBsYXJnZWx5IHVuZGVmaW5lZCAoYW5kIG9mdGVuIGhhcmQKKwkgKiB0byBkZWJ1ZykgYmVoYXZpb3Igb24gdGhlIGd1ZXN0IHNpZGUuCisJICovCisJaWYgKHVubGlrZWx5KCFnZm5fdG9fbWVtc2xvdCh2Y3B1LT5rdm0sIGNyMyA+PiBQQUdFX1NISUZUKSkpCisJCWluamVjdF9ncCh2Y3B1KTsKKwllbHNlCisJCXZjcHUtPm1tdS5uZXdfY3IzKHZjcHUpOworCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2V0X2NyMyk7CisKK3ZvaWQgc2V0X2NyOChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I4KQoreworCWlmICggY3I4ICYgQ1I4X1JFU0VWRURfQklUUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2NyODogI0dQLCByZXNlcnZlZCBiaXRzIDB4JWx4XG4iLCBjcjgpOworCQlpbmplY3RfZ3AodmNwdSk7CisJCXJldHVybjsKKwl9CisJdmNwdS0+Y3I4ID0gY3I4OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2V0X2NyOCk7CisKK3ZvaWQgZnhfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgZnhfaW1hZ2VfcyB7CisJCXUxNiBjb250cm9sOyAvL2ZjdworCQl1MTYgc3RhdHVzOyAvL2ZzdworCQl1MTYgdGFnOyAvLyBmdHcKKwkJdTE2IG9wY29kZTsgLy9mb3AKKwkJdTY0IGlwOyAvLyBmcHUgaXAKKwkJdTY0IG9wZXJhbmQ7Ly8gZnB1IGRwCisJCXUzMiBteGNzcjsKKwkJdTMyIG14Y3NyX21hc2s7CisKKwl9ICpmeF9pbWFnZTsKKworCWZ4X3NhdmUodmNwdS0+aG9zdF9meF9pbWFnZSk7CisJZnB1X2luaXQoKTsKKwlmeF9zYXZlKHZjcHUtPmd1ZXN0X2Z4X2ltYWdlKTsKKwlmeF9yZXN0b3JlKHZjcHUtPmhvc3RfZnhfaW1hZ2UpOworCisJZnhfaW1hZ2UgPSAoc3RydWN0IGZ4X2ltYWdlX3MgKil2Y3B1LT5ndWVzdF9meF9pbWFnZTsKKwlmeF9pbWFnZS0+bXhjc3IgPSAweDFmODA7CisJbWVtc2V0KHZjcHUtPmd1ZXN0X2Z4X2ltYWdlICsgc2l6ZW9mKHN0cnVjdCBmeF9pbWFnZV9zKSwKKwkgICAgICAgMCwgRlhfSU1BR0VfU0laRSAtIHNpemVvZihzdHJ1Y3QgZnhfaW1hZ2VfcykpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnhfaW5pdCk7CisKKy8qCisgKiBDcmVhdGVzIHNvbWUgdmlydHVhbCBjcHVzLiAgR29vZCBsdWNrIGNyZWF0aW5nIG1vcmUgdGhhbiBvbmUuCisgKi8KK3N0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIGludCBuKQoreworCWludCByOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKworCXIgPSAtRUlOVkFMOworCWlmICghdmFsaWRfdmNwdShuKSkKKwkJZ290byBvdXQ7CisKKwl2Y3B1ID0gJmt2bS0+dmNwdXNbbl07CisKKwltdXRleF9sb2NrKCZ2Y3B1LT5tdXRleCk7CisKKwlpZiAodmNwdS0+dm1jcykgeworCQltdXRleF91bmxvY2soJnZjcHUtPm11dGV4KTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJdmNwdS0+aG9zdF9meF9pbWFnZSA9IChjaGFyKilBTElHTigoaHZhX3QpdmNwdS0+ZnhfYnVmLAorCQkJCQkgICBGWF9JTUFHRV9BTElHTik7CisJdmNwdS0+Z3Vlc3RfZnhfaW1hZ2UgPSB2Y3B1LT5ob3N0X2Z4X2ltYWdlICsgRlhfSU1BR0VfU0laRTsKKworCXZjcHUtPmNwdSA9IC0xOyAgLyogRmlyc3QgbG9hZCB3aWxsIHNldCB1cCBUUiAqLworCXIgPSBrdm1fYXJjaF9vcHMtPnZjcHVfY3JlYXRlKHZjcHUpOworCWlmIChyIDwgMCkKKwkJZ290byBvdXRfZnJlZV92Y3B1czsKKworCXIgPSBrdm1fbW11X2NyZWF0ZSh2Y3B1KTsKKwlpZiAociA8IDApCisJCWdvdG8gb3V0X2ZyZWVfdmNwdXM7CisKKwlrdm1fYXJjaF9vcHMtPnZjcHVfbG9hZCh2Y3B1KTsKKwlyID0ga3ZtX21tdV9zZXR1cCh2Y3B1KTsKKwlpZiAociA+PSAwKQorCQlyID0ga3ZtX2FyY2hfb3BzLT52Y3B1X3NldHVwKHZjcHUpOworCXZjcHVfcHV0KHZjcHUpOworCisJaWYgKHIgPCAwKQorCQlnb3RvIG91dF9mcmVlX3ZjcHVzOworCisJcmV0dXJuIDA7CisKK291dF9mcmVlX3ZjcHVzOgorCWt2bV9mcmVlX3ZjcHUodmNwdSk7CisJbXV0ZXhfdW5sb2NrKCZ2Y3B1LT5tdXRleCk7CitvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBzb21lIG1lbW9yeSBhbmQgZ2l2ZSBpdCBhbiBhZGRyZXNzIGluIHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzCisgKiBzcGFjZS4KKyAqCisgKiBEaXNjb250aWd1b3VzIG1lbW9yeSBpcyBhbGxvd2VkLCBtb3N0bHkgZm9yIGZyYW1lYnVmZmVycy4KKyAqLworc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkJICAgc3RydWN0IGt2bV9tZW1vcnlfcmVnaW9uICptZW0pCit7CisJaW50IHI7CisJZ2ZuX3QgYmFzZV9nZm47CisJdW5zaWduZWQgbG9uZyBucGFnZXM7CisJdW5zaWduZWQgbG9uZyBpOworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CisJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCBvbGQsIG5ldzsKKwlpbnQgbWVtb3J5X2NvbmZpZ192ZXJzaW9uOworCisJciA9IC1FSU5WQUw7CisJLyogR2VuZXJhbCBzYW5pdHkgY2hlY2tzICovCisJaWYgKG1lbS0+bWVtb3J5X3NpemUgJiAoUEFHRV9TSVpFIC0gMSkpCisJCWdvdG8gb3V0OworCWlmIChtZW0tPmd1ZXN0X3BoeXNfYWRkciAmIChQQUdFX1NJWkUgLSAxKSkKKwkJZ290byBvdXQ7CisJaWYgKG1lbS0+c2xvdCA+PSBLVk1fTUVNT1JZX1NMT1RTKQorCQlnb3RvIG91dDsKKwlpZiAobWVtLT5ndWVzdF9waHlzX2FkZHIgKyBtZW0tPm1lbW9yeV9zaXplIDwgbWVtLT5ndWVzdF9waHlzX2FkZHIpCisJCWdvdG8gb3V0OworCisJbWVtc2xvdCA9ICZrdm0tPm1lbXNsb3RzW21lbS0+c2xvdF07CisJYmFzZV9nZm4gPSBtZW0tPmd1ZXN0X3BoeXNfYWRkciA+PiBQQUdFX1NISUZUOworCW5wYWdlcyA9IG1lbS0+bWVtb3J5X3NpemUgPj4gUEFHRV9TSElGVDsKKworCWlmICghbnBhZ2VzKQorCQltZW0tPmZsYWdzICY9IH5LVk1fTUVNX0xPR19ESVJUWV9QQUdFUzsKKworcmFjZWQ6CisJc3Bpbl9sb2NrKCZrdm0tPmxvY2spOworCisJbWVtb3J5X2NvbmZpZ192ZXJzaW9uID0ga3ZtLT5tZW1vcnlfY29uZmlnX3ZlcnNpb247CisJbmV3ID0gb2xkID0gKm1lbXNsb3Q7CisKKwluZXcuYmFzZV9nZm4gPSBiYXNlX2dmbjsKKwluZXcubnBhZ2VzID0gbnBhZ2VzOworCW5ldy5mbGFncyA9IG1lbS0+ZmxhZ3M7CisKKwkvKiBEaXNhbGxvdyBjaGFuZ2luZyBhIG1lbW9yeSBzbG90J3Mgc2l6ZS4gKi8KKwlyID0gLUVJTlZBTDsKKwlpZiAobnBhZ2VzICYmIG9sZC5ucGFnZXMgJiYgbnBhZ2VzICE9IG9sZC5ucGFnZXMpCisJCWdvdG8gb3V0X3VubG9jazsKKworCS8qIENoZWNrIGZvciBvdmVybGFwcyAqLworCXIgPSAtRUVYSVNUOworCWZvciAoaSA9IDA7IGkgPCBLVk1fTUVNT1JZX1NMT1RTOyArK2kpIHsKKwkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqcyA9ICZrdm0tPm1lbXNsb3RzW2ldOworCisJCWlmIChzID09IG1lbXNsb3QpCisJCQljb250aW51ZTsKKwkJaWYgKCEoKGJhc2VfZ2ZuICsgbnBhZ2VzIDw9IHMtPmJhc2VfZ2ZuKSB8fAorCQkgICAgICAoYmFzZV9nZm4gPj0gcy0+YmFzZV9nZm4gKyBzLT5ucGFnZXMpKSkKKwkJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJLyoKKwkgKiBEbyBtZW1vcnkgYWxsb2NhdGlvbnMgb3V0c2lkZSBsb2NrLiAgbWVtb3J5X2NvbmZpZ192ZXJzaW9uIHdpbGwKKwkgKiBkZXRlY3QgYW55IHJhY2VzLgorCSAqLworCXNwaW5fdW5sb2NrKCZrdm0tPmxvY2spOworCisJLyogRGVhbGxvY2F0ZSBpZiBzbG90IGlzIGJlaW5nIHJlbW92ZWQgKi8KKwlpZiAoIW5wYWdlcykKKwkJbmV3LnBoeXNfbWVtID0gMDsKKworCS8qIEZyZWUgcGFnZSBkaXJ0eSBiaXRtYXAgaWYgdW5uZWVkZWQgKi8KKwlpZiAoIShuZXcuZmxhZ3MgJiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykpCisJCW5ldy5kaXJ0eV9iaXRtYXAgPSAwOworCisJciA9IC1FTk9NRU07CisKKwkvKiBBbGxvY2F0ZSBpZiBhIHNsb3QgaXMgYmVpbmcgY3JlYXRlZCAqLworCWlmIChucGFnZXMgJiYgIW5ldy5waHlzX21lbSkgeworCQluZXcucGh5c19tZW0gPSB2bWFsbG9jKG5wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7CisKKwkJaWYgKCFuZXcucGh5c19tZW0pCisJCQlnb3RvIG91dF9mcmVlOworCisJCW1lbXNldChuZXcucGh5c19tZW0sIDAsIG5wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7CisJCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7ICsraSkgeworCQkJbmV3LnBoeXNfbWVtW2ldID0gYWxsb2NfcGFnZShHRlBfSElHSFVTRVIKKwkJCQkJCSAgICAgfCBfX0dGUF9aRVJPKTsKKwkJCWlmICghbmV3LnBoeXNfbWVtW2ldKQorCQkJCWdvdG8gb3V0X2ZyZWU7CisgCQkJbmV3LnBoeXNfbWVtW2ldLT5wcml2YXRlID0gMDsKKwkJfQorCX0KKworCS8qIEFsbG9jYXRlIHBhZ2UgZGlydHkgYml0bWFwIGlmIG5lZWRlZCAqLworCWlmICgobmV3LmZsYWdzICYgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVMpICYmICFuZXcuZGlydHlfYml0bWFwKSB7CisJCXVuc2lnbmVkIGRpcnR5X2J5dGVzID0gQUxJR04obnBhZ2VzLCBCSVRTX1BFUl9MT05HKSAvIDg7CisKKwkJbmV3LmRpcnR5X2JpdG1hcCA9IHZtYWxsb2MoZGlydHlfYnl0ZXMpOworCQlpZiAoIW5ldy5kaXJ0eV9iaXRtYXApCisJCQlnb3RvIG91dF9mcmVlOworCQltZW1zZXQobmV3LmRpcnR5X2JpdG1hcCwgMCwgZGlydHlfYnl0ZXMpOworCX0KKworCXNwaW5fbG9jaygma3ZtLT5sb2NrKTsKKworCWlmIChtZW1vcnlfY29uZmlnX3ZlcnNpb24gIT0ga3ZtLT5tZW1vcnlfY29uZmlnX3ZlcnNpb24pIHsKKwkJc3Bpbl91bmxvY2soJmt2bS0+bG9jayk7CisJCWt2bV9mcmVlX3BoeXNtZW1fc2xvdCgmbmV3LCAmb2xkKTsKKwkJZ290byByYWNlZDsKKwl9CisKKwlyID0gLUVBR0FJTjsKKwlpZiAoa3ZtLT5idXN5KQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlpZiAobWVtLT5zbG90ID49IGt2bS0+bm1lbXNsb3RzKQorCQlrdm0tPm5tZW1zbG90cyA9IG1lbS0+c2xvdCArIDE7CisKKwkqbWVtc2xvdCA9IG5ldzsKKwkrK2t2bS0+bWVtb3J5X2NvbmZpZ192ZXJzaW9uOworCisJc3Bpbl91bmxvY2soJmt2bS0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7CisJCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKworCQl2Y3B1ID0gdmNwdV9sb2FkKGt2bSwgaSk7CisJCWlmICghdmNwdSkKKwkJCWNvbnRpbnVlOworCQlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CisJCXZjcHVfcHV0KHZjcHUpOworCX0KKworCWt2bV9mcmVlX3BoeXNtZW1fc2xvdCgmb2xkLCAmbmV3KTsKKwlyZXR1cm4gMDsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9jaygma3ZtLT5sb2NrKTsKK291dF9mcmVlOgorCWt2bV9mcmVlX3BoeXNtZW1fc2xvdCgmbmV3LCAmb2xkKTsKK291dDoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgZG9fcmVtb3ZlX3dyaXRlX2FjY2VzcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzbG90KQoreworCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKKwlrdm1fbW11X3Nsb3RfcmVtb3ZlX3dyaXRlX2FjY2Vzcyh2Y3B1LCBzbG90KTsKKwlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKK30KKworLyoKKyAqIEdldCAoYW5kIGNsZWFyKSB0aGUgZGlydHkgbWVtb3J5IGxvZyBmb3IgYSBtZW1vcnkgc2xvdC4KKyAqLworc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICAgICBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAqbG9nKQoreworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CisJaW50IHIsIGk7CisJaW50IG47CisJaW50IGNsZWFyZWQ7CisJdW5zaWduZWQgbG9uZyBhbnkgPSAwOworCisJc3Bpbl9sb2NrKCZrdm0tPmxvY2spOworCisJLyoKKwkgKiBQcmV2ZW50IGNoYW5nZXMgdG8gZ3Vlc3QgbWVtb3J5IGNvbmZpZ3VyYXRpb24gZXZlbiB3aGlsZSB0aGUgbG9jaworCSAqIGlzIG5vdCB0YWtlbi4KKwkgKi8KKwkrK2t2bS0+YnVzeTsKKwlzcGluX3VubG9jaygma3ZtLT5sb2NrKTsKKwlyID0gLUVJTlZBTDsKKwlpZiAobG9nLT5zbG90ID49IEtWTV9NRU1PUllfU0xPVFMpCisJCWdvdG8gb3V0OworCisJbWVtc2xvdCA9ICZrdm0tPm1lbXNsb3RzW2xvZy0+c2xvdF07CisJciA9IC1FTk9FTlQ7CisJaWYgKCFtZW1zbG90LT5kaXJ0eV9iaXRtYXApCisJCWdvdG8gb3V0OworCisJbiA9IEFMSUdOKG1lbXNsb3QtPm5wYWdlcywgOCkgLyA4OworCisJZm9yIChpID0gMDsgIWFueSAmJiBpIDwgbjsgKytpKQorCQlhbnkgPSBtZW1zbG90LT5kaXJ0eV9iaXRtYXBbaV07CisKKwlyID0gLUVGQVVMVDsKKwlpZiAoY29weV90b191c2VyKGxvZy0+ZGlydHlfYml0bWFwLCBtZW1zbG90LT5kaXJ0eV9iaXRtYXAsIG4pKQorCQlnb3RvIG91dDsKKworCisJaWYgKGFueSkgeworCQljbGVhcmVkID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7ICsraSkgeworCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdmNwdV9sb2FkKGt2bSwgaSk7CisKKwkJCWlmICghdmNwdSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghY2xlYXJlZCkgeworCQkJCWRvX3JlbW92ZV93cml0ZV9hY2Nlc3ModmNwdSwgbG9nLT5zbG90KTsKKwkJCQltZW1zZXQobWVtc2xvdC0+ZGlydHlfYml0bWFwLCAwLCBuKTsKKwkJCQljbGVhcmVkID0gMTsKKwkJCX0KKwkJCWt2bV9hcmNoX29wcy0+dGxiX2ZsdXNoKHZjcHUpOworCQkJdmNwdV9wdXQodmNwdSk7CisJCX0KKwl9CisKKwlyID0gMDsKKworb3V0OgorCXNwaW5fbG9jaygma3ZtLT5sb2NrKTsKKwktLWt2bS0+YnVzeTsKKwlzcGluX3VubG9jaygma3ZtLT5sb2NrKTsKKwlyZXR1cm4gcjsKK30KKworc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwga3ZtLT5ubWVtc2xvdHM7ICsraSkgeworCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90ID0gJmt2bS0+bWVtc2xvdHNbaV07CisKKwkJaWYgKGdmbiA+PSBtZW1zbG90LT5iYXNlX2dmbgorCQkgICAgJiYgZ2ZuIDwgbWVtc2xvdC0+YmFzZV9nZm4gKyBtZW1zbG90LT5ucGFnZXMpCisJCQlyZXR1cm4gbWVtc2xvdDsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnZm5fdG9fbWVtc2xvdCk7CisKK3ZvaWQgbWFya19wYWdlX2RpcnR5KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQoreworCWludCBpOworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSAwOworCXVuc2lnbmVkIGxvbmcgcmVsX2dmbjsKKworCWZvciAoaSA9IDA7IGkgPCBrdm0tPm5tZW1zbG90czsgKytpKSB7CisJCW1lbXNsb3QgPSAma3ZtLT5tZW1zbG90c1tpXTsKKworCQlpZiAoZ2ZuID49IG1lbXNsb3QtPmJhc2VfZ2ZuCisJCSAgICAmJiBnZm4gPCBtZW1zbG90LT5iYXNlX2dmbiArIG1lbXNsb3QtPm5wYWdlcykgeworCisJCQlpZiAoIW1lbXNsb3QgfHwgIW1lbXNsb3QtPmRpcnR5X2JpdG1hcCkKKwkJCQlyZXR1cm47CisKKwkJCXJlbF9nZm4gPSBnZm4gLSBtZW1zbG90LT5iYXNlX2dmbjsKKworCQkJLyogYXZvaWQgUk1XICovCisJCQlpZiAoIXRlc3RfYml0KHJlbF9nZm4sIG1lbXNsb3QtPmRpcnR5X2JpdG1hcCkpCisJCQkJc2V0X2JpdChyZWxfZ2ZuLCBtZW1zbG90LT5kaXJ0eV9iaXRtYXApOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfc3RkKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyAqdmFsLAorCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGN0eHQtPnZjcHU7CisJdm9pZCAqZGF0YSA9IHZhbDsKKworCXdoaWxlIChieXRlcykgeworCQlncGFfdCBncGEgPSB2Y3B1LT5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyKTsKKwkJdW5zaWduZWQgb2Zmc2V0ID0gYWRkciAmIChQQUdFX1NJWkUtMSk7CisJCXVuc2lnbmVkIHRvY29weSA9IG1pbihieXRlcywgKHVuc2lnbmVkKVBBR0VfU0laRSAtIG9mZnNldCk7CisJCXVuc2lnbmVkIGxvbmcgcGZuOworCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90OworCQl2b2lkICpwYWdlOworCisJCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQorCQkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOworCQlwZm4gPSBncGEgPj4gUEFHRV9TSElGVDsKKwkJbWVtc2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtPmt2bSwgcGZuKTsKKwkJaWYgKCFtZW1zbG90KQorCQkJcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCQlwYWdlID0ga21hcF9hdG9taWMoZ2ZuX3RvX3BhZ2UobWVtc2xvdCwgcGZuKSwgS01fVVNFUjApOworCisJCW1lbWNweShkYXRhLCBwYWdlICsgb2Zmc2V0LCB0b2NvcHkpOworCisJCWt1bm1hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCisJCWJ5dGVzIC09IHRvY29weTsKKwkJZGF0YSArPSB0b2NvcHk7CisJCWFkZHIgKz0gdG9jb3B5OworCX0KKworCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCitzdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX3N0ZCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBieXRlcywKKwkJCSAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXByaW50ayhLRVJOX0VSUiAiZW11bGF0b3Jfd3JpdGVfc3RkOiBhZGRyICVseCBuICVkXG4iLAorCSAgICAgICBhZGRyLCBieXRlcyk7CisJcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworfQorCitzdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfZW11bGF0ZWQodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqdmFsLAorCQkJCSAgdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJCSAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gY3R4dC0+dmNwdTsKKworCWlmICh2Y3B1LT5tbWlvX3JlYWRfY29tcGxldGVkKSB7CisJCW1lbWNweSh2YWwsIHZjcHUtPm1taW9fZGF0YSwgYnl0ZXMpOworCQl2Y3B1LT5tbWlvX3JlYWRfY29tcGxldGVkID0gMDsKKwkJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CisJfSBlbHNlIGlmIChlbXVsYXRvcl9yZWFkX3N0ZChhZGRyLCB2YWwsIGJ5dGVzLCBjdHh0KQorCQkgICA9PSBYODZFTVVMX0NPTlRJTlVFKQorCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKKwllbHNlIHsKKwkJZ3BhX3QgZ3BhID0gdmNwdS0+bW11Lmd2YV90b19ncGEodmNwdSwgYWRkcik7CisJCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQorCQkJcmV0dXJuIHZjcHVfcHJpbnRmKHZjcHUsICJub3QgcHJlc2VudFxuIiksIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOworCQl2Y3B1LT5tbWlvX25lZWRlZCA9IDE7CisJCXZjcHUtPm1taW9fcGh5c19hZGRyID0gZ3BhOworCQl2Y3B1LT5tbWlvX3NpemUgPSBieXRlczsKKwkJdmNwdS0+bW1pb19pc193cml0ZSA9IDA7CisKKwkJcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCX0KK30KKworc3RhdGljIGludCBlbXVsYXRvcl93cml0ZV9waHlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgYnl0ZXMpCit7CisJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl2b2lkICp2aXJ0OworCisJaWYgKCgoZ3BhICsgYnl0ZXMgLSAxKSA+PiBQQUdFX1NISUZUKSAhPSAoZ3BhID4+IFBBR0VfU0hJRlQpKQorCQlyZXR1cm4gMDsKKwltID0gZ2ZuX3RvX21lbXNsb3QodmNwdS0+a3ZtLCBncGEgPj4gUEFHRV9TSElGVCk7CisJaWYgKCFtKQorCQlyZXR1cm4gMDsKKwlwYWdlID0gZ2ZuX3RvX3BhZ2UobSwgZ3BhID4+IFBBR0VfU0hJRlQpOworCWt2bV9tbXVfcHJlX3dyaXRlKHZjcHUsIGdwYSwgYnl0ZXMpOworCXZpcnQgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJbWVtY3B5KHZpcnQgKyBvZmZzZXRfaW5fcGFnZShncGEpLCAmdmFsLCBieXRlcyk7CisJa3VubWFwX2F0b21pYyh2aXJ0LCBLTV9VU0VSMCk7CisJa3ZtX21tdV9wb3N0X3dyaXRlKHZjcHUsIGdwYSwgYnl0ZXMpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkJICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gY3R4dC0+dmNwdTsKKwlncGFfdCBncGEgPSB2Y3B1LT5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyKTsKKworCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQorCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CisKKwlpZiAoZW11bGF0b3Jfd3JpdGVfcGh5cyh2Y3B1LCBncGEsIHZhbCwgYnl0ZXMpKQorCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKKworCXZjcHUtPm1taW9fbmVlZGVkID0gMTsKKwl2Y3B1LT5tbWlvX3BoeXNfYWRkciA9IGdwYTsKKwl2Y3B1LT5tbWlvX3NpemUgPSBieXRlczsKKwl2Y3B1LT5tbWlvX2lzX3dyaXRlID0gMTsKKwltZW1jcHkodmNwdS0+bW1pb19kYXRhLCAmdmFsLCBieXRlcyk7CisKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKK30KKworc3RhdGljIGludCBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2xkLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBuZXcsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkJICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlzdGF0aWMgaW50IHJlcG9ydGVkOworCisJaWYgKCFyZXBvcnRlZCkgeworCQlyZXBvcnRlZCA9IDE7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImt2bTogZW11bGF0aW5nIGV4Y2hhbmdlIGFzIHdyaXRlXG4iKTsKKwl9CisJcmV0dXJuIGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKGFkZHIsIG5ldywgYnl0ZXMsIGN0eHQpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCitzdGF0aWMgaW50IGVtdWxhdG9yX2NtcHhjaGc4Yl9lbXVsYXRlZCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkX2xvLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9sZF9oaSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBuZXdfbG8sCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbmV3X2hpLAorCQkJCSAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlzdGF0aWMgaW50IHJlcG9ydGVkOworCWludCByOworCisJaWYgKCFyZXBvcnRlZCkgeworCQlyZXBvcnRlZCA9IDE7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImt2bTogZW11bGF0aW5nIGV4Y2hhbmdlOGIgYXMgd3JpdGVcbiIpOworCX0KKwlyID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoYWRkciwgbmV3X2xvLCA0LCBjdHh0KTsKKwlpZiAociAhPSBYODZFTVVMX0NPTlRJTlVFKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQoYWRkcis0LCBuZXdfaGksIDQsIGN0eHQpOworfQorCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3NlZ21lbnRfYmFzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpCit7CisJcmV0dXJuIGt2bV9hcmNoX29wcy0+Z2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBzZWcpOworfQorCitpbnQgZW11bGF0ZV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyZXNzKQoreworCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCitpbnQgZW11bGF0ZV9jbHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGNyMDsKKworCWt2bV9hcmNoX29wcy0+ZGVjYWNoZV9jcjBfY3I0X2d1ZXN0X2JpdHModmNwdSk7CisJY3IwID0gdmNwdS0+Y3IwICYgfkNSMF9UU19NQVNLOworCWt2bV9hcmNoX29wcy0+c2V0X2NyMCh2Y3B1LCBjcjApOworCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCitpbnQgZW11bGF0b3JfZ2V0X2RyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0KiBjdHh0LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgKmRlc3QpCit7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gY3R4dC0+dmNwdTsKKworCXN3aXRjaCAoZHIpIHsKKwljYXNlIDAgLi4uIDM6CisJCSpkZXN0ID0ga3ZtX2FyY2hfb3BzLT5nZXRfZHIodmNwdSwgZHIpOworCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVuZXhwZWN0ZWQgZHIgJXVcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRyKTsKKwkJcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCX0KK30KKworaW50IGVtdWxhdG9yX3NldF9kcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9IChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQpID8gfjBVTEwgOiB+MFU7CisJaW50IGV4Y2VwdGlvbjsKKworCWt2bV9hcmNoX29wcy0+c2V0X2RyKGN0eHQtPnZjcHUsIGRyLCB2YWx1ZSAmIG1hc2ssICZleGNlcHRpb24pOworCWlmIChleGNlcHRpb24pIHsKKwkJLyogRklYTUU6IGJldHRlciBoYW5kbGluZyAqLworCQlyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisJfQorCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJc3RhdGljIGludCByZXBvcnRlZDsKKwl1OCBvcGNvZGVzWzRdOworCXVuc2lnbmVkIGxvbmcgcmlwID0gY3R4dC0+dmNwdS0+cmlwOworCXVuc2lnbmVkIGxvbmcgcmlwX2xpbmVhcjsKKworCXJpcF9saW5lYXIgPSByaXAgKyBnZXRfc2VnbWVudF9iYXNlKGN0eHQtPnZjcHUsIFZDUFVfU1JFR19DUyk7CisKKwlpZiAocmVwb3J0ZWQpCisJCXJldHVybjsKKworCWVtdWxhdG9yX3JlYWRfc3RkKHJpcF9saW5lYXIsICh2b2lkICopb3Bjb2RlcywgNCwgY3R4dCk7CisKKwlwcmludGsoS0VSTl9FUlIgImVtdWxhdGlvbiBmYWlsZWQgYnV0ICFtbWlvX25lZWRlZD8iCisJICAgICAgICIgcmlwICVseCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCSAgICAgICByaXAsIG9wY29kZXNbMF0sIG9wY29kZXNbMV0sIG9wY29kZXNbMl0sIG9wY29kZXNbM10pOworCXJlcG9ydGVkID0gMTsKK30KKworc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHsKKwkucmVhZF9zdGQgICAgICAgICAgICA9IGVtdWxhdG9yX3JlYWRfc3RkLAorCS53cml0ZV9zdGQgICAgICAgICAgID0gZW11bGF0b3Jfd3JpdGVfc3RkLAorCS5yZWFkX2VtdWxhdGVkICAgICAgID0gZW11bGF0b3JfcmVhZF9lbXVsYXRlZCwKKwkud3JpdGVfZW11bGF0ZWQgICAgICA9IGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkLAorCS5jbXB4Y2hnX2VtdWxhdGVkICAgID0gZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCwKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLmNtcHhjaGc4Yl9lbXVsYXRlZCAgPSBlbXVsYXRvcl9jbXB4Y2hnOGJfZW11bGF0ZWQsCisjZW5kaWYKK307CisKK2ludCBlbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCXN0cnVjdCBrdm1fcnVuICpydW4sCisJCQl1bnNpZ25lZCBsb25nIGNyMiwKKwkJCXUxNiBlcnJvcl9jb2RlKQoreworCXN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IGVtdWxhdGVfY3R4dDsKKwlpbnQgcjsKKwlpbnQgY3NfZGIsIGNzX2w7CisKKwlrdm1fYXJjaF9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7CisKKwlrdm1fYXJjaF9vcHMtPmdldF9jc19kYl9sX2JpdHModmNwdSwgJmNzX2RiLCAmY3NfbCk7CisKKwllbXVsYXRlX2N0eHQudmNwdSA9IHZjcHU7CisJZW11bGF0ZV9jdHh0LmVmbGFncyA9IGt2bV9hcmNoX29wcy0+Z2V0X3JmbGFncyh2Y3B1KTsKKwllbXVsYXRlX2N0eHQuY3IyID0gY3IyOworCWVtdWxhdGVfY3R4dC5tb2RlID0gKGVtdWxhdGVfY3R4dC5lZmxhZ3MgJiBYODZfRUZMQUdTX1ZNKQorCQk/IFg4NkVNVUxfTU9ERV9SRUFMIDogY3NfbAorCQk/IFg4NkVNVUxfTU9ERV9QUk9UNjQgOgljc19kYgorCQk/IFg4NkVNVUxfTU9ERV9QUk9UMzIgOiBYODZFTVVMX01PREVfUFJPVDE2OworCisJaWYgKGVtdWxhdGVfY3R4dC5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQpIHsKKwkJZW11bGF0ZV9jdHh0LmNzX2Jhc2UgPSAwOworCQllbXVsYXRlX2N0eHQuZHNfYmFzZSA9IDA7CisJCWVtdWxhdGVfY3R4dC5lc19iYXNlID0gMDsKKwkJZW11bGF0ZV9jdHh0LnNzX2Jhc2UgPSAwOworCX0gZWxzZSB7CisJCWVtdWxhdGVfY3R4dC5jc19iYXNlID0gZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBWQ1BVX1NSRUdfQ1MpOworCQllbXVsYXRlX2N0eHQuZHNfYmFzZSA9IGdldF9zZWdtZW50X2Jhc2UodmNwdSwgVkNQVV9TUkVHX0RTKTsKKwkJZW11bGF0ZV9jdHh0LmVzX2Jhc2UgPSBnZXRfc2VnbWVudF9iYXNlKHZjcHUsIFZDUFVfU1JFR19FUyk7CisJCWVtdWxhdGVfY3R4dC5zc19iYXNlID0gZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBWQ1BVX1NSRUdfU1MpOworCX0KKworCWVtdWxhdGVfY3R4dC5nc19iYXNlID0gZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBWQ1BVX1NSRUdfR1MpOworCWVtdWxhdGVfY3R4dC5mc19iYXNlID0gZ2V0X3NlZ21lbnRfYmFzZSh2Y3B1LCBWQ1BVX1NSRUdfRlMpOworCisJdmNwdS0+bW1pb19pc193cml0ZSA9IDA7CisJciA9IHg4Nl9lbXVsYXRlX21lbW9wKCZlbXVsYXRlX2N0eHQsICZlbXVsYXRlX29wcyk7CisKKwlpZiAoKHIgfHwgdmNwdS0+bW1pb19pc193cml0ZSkgJiYgcnVuKSB7CisJCXJ1bi0+bW1pby5waHlzX2FkZHIgPSB2Y3B1LT5tbWlvX3BoeXNfYWRkcjsKKwkJbWVtY3B5KHJ1bi0+bW1pby5kYXRhLCB2Y3B1LT5tbWlvX2RhdGEsIDgpOworCQlydW4tPm1taW8ubGVuID0gdmNwdS0+bW1pb19zaXplOworCQlydW4tPm1taW8uaXNfd3JpdGUgPSB2Y3B1LT5tbWlvX2lzX3dyaXRlOworCX0KKworCWlmIChyKSB7CisJCWlmIChrdm1fbW11X3VucHJvdGVjdF9wYWdlX3ZpcnQodmNwdSwgY3IyKSkKKwkJCXJldHVybiBFTVVMQVRFX0RPTkU7CisJCWlmICghdmNwdS0+bW1pb19uZWVkZWQpIHsKKwkJCXJlcG9ydF9lbXVsYXRpb25fZmFpbHVyZSgmZW11bGF0ZV9jdHh0KTsKKwkJCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCX0KKwkJcmV0dXJuIEVNVUxBVEVfRE9fTU1JTzsKKwl9CisKKwlrdm1fYXJjaF9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKKwlrdm1fYXJjaF9vcHMtPnNldF9yZmxhZ3ModmNwdSwgZW11bGF0ZV9jdHh0LmVmbGFncyk7CisKKwlpZiAodmNwdS0+bW1pb19pc193cml0ZSkKKwkJcmV0dXJuIEVNVUxBVEVfRE9fTU1JTzsKKworCXJldHVybiBFTVVMQVRFX0RPTkU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlbXVsYXRlX2luc3RydWN0aW9uKTsKKworc3RhdGljIHU2NCBta19jcl82NCh1NjQgY3Vycl9jciwgdTMyIG5ld192YWwpCit7CisJcmV0dXJuIChjdXJyX2NyICYgfigoMVVMTCA8PCAzMikgLSAxKSkgfCBuZXdfdmFsOworfQorCit2b2lkIHJlYWxtb2RlX2xnZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgbGltaXQsIHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSBkdCA9IHsgbGltaXQsIGJhc2UgfTsKKworCWt2bV9hcmNoX29wcy0+c2V0X2dkdCh2Y3B1LCAmZHQpOworfQorCit2b2lkIHJlYWxtb2RlX2xpZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgbGltaXQsIHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSBkdCA9IHsgbGltaXQsIGJhc2UgfTsKKworCWt2bV9hcmNoX29wcy0+c2V0X2lkdCh2Y3B1LCAmZHQpOworfQorCit2b2lkIHJlYWxtb2RlX2xtc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG1zdywKKwkJICAgdW5zaWduZWQgbG9uZyAqcmZsYWdzKQoreworCWxtc3codmNwdSwgbXN3KTsKKwkqcmZsYWdzID0ga3ZtX2FyY2hfb3BzLT5nZXRfcmZsYWdzKHZjcHUpOworfQorCit1bnNpZ25lZCBsb25nIHJlYWxtb2RlX2dldF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcikKK3sKKwlrdm1fYXJjaF9vcHMtPmRlY2FjaGVfY3IwX2NyNF9ndWVzdF9iaXRzKHZjcHUpOworCXN3aXRjaCAoY3IpIHsKKwljYXNlIDA6CisJCXJldHVybiB2Y3B1LT5jcjA7CisJY2FzZSAyOgorCQlyZXR1cm4gdmNwdS0+Y3IyOworCWNhc2UgMzoKKwkJcmV0dXJuIHZjcHUtPmNyMzsKKwljYXNlIDQ6CisJCXJldHVybiB2Y3B1LT5jcjQ7CisJZGVmYXVsdDoKKwkJdmNwdV9wcmludGYodmNwdSwgIiVzOiB1bmV4cGVjdGVkIGNyICV1XG4iLCBfX0ZVTkNUSU9OX18sIGNyKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCit2b2lkIHJlYWxtb2RlX3NldF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjciwgdW5zaWduZWQgbG9uZyB2YWwsCisJCSAgICAgdW5zaWduZWQgbG9uZyAqcmZsYWdzKQoreworCXN3aXRjaCAoY3IpIHsKKwljYXNlIDA6CisJCXNldF9jcjAodmNwdSwgbWtfY3JfNjQodmNwdS0+Y3IwLCB2YWwpKTsKKwkJKnJmbGFncyA9IGt2bV9hcmNoX29wcy0+Z2V0X3JmbGFncyh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2Y3B1LT5jcjIgPSB2YWw7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc2V0X2NyMyh2Y3B1LCB2YWwpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXNldF9jcjQodmNwdSwgbWtfY3JfNjQodmNwdS0+Y3I0LCB2YWwpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmNwdV9wcmludGYodmNwdSwgIiVzOiB1bmV4cGVjdGVkIGNyICV1XG4iLCBfX0ZVTkNUSU9OX18sIGNyKTsKKwl9Cit9CisKK2ludCBrdm1fZ2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhKQoreworCXU2NCBkYXRhOworCisJc3dpdGNoIChtc3IpIHsKKwljYXNlIDB4YzAwMTAwMTA6IC8qIFNZU0NGRyAqLworCWNhc2UgMHhjMDAxMDAxNTogLyogSFdDUiAqLworCWNhc2UgTVNSX0lBMzJfUExBVEZPUk1fSUQ6CisJY2FzZSBNU1JfSUEzMl9QNV9NQ19BRERSOgorCWNhc2UgTVNSX0lBMzJfUDVfTUNfVFlQRToKKwljYXNlIE1TUl9JQTMyX01DMF9DVEw6CisJY2FzZSBNU1JfSUEzMl9NQ0dfU1RBVFVTOgorCWNhc2UgTVNSX0lBMzJfTUNHX0NBUDoKKwljYXNlIE1TUl9JQTMyX01DMF9NSVNDOgorCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrNDoKKwljYXNlIE1TUl9JQTMyX01DMF9NSVNDKzg6CisJY2FzZSBNU1JfSUEzMl9NQzBfTUlTQysxMjoKKwljYXNlIE1TUl9JQTMyX01DMF9NSVNDKzE2OgorCWNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgorCWNhc2UgTVNSX0lBMzJfUEVSRl9TVEFUVVM6CisJCS8qIE1UUlIgcmVnaXN0ZXJzICovCisJY2FzZSAweGZlOgorCWNhc2UgMHgyMDAgLi4uIDB4MmZmOgorCQlkYXRhID0gMDsKKwkJYnJlYWs7CisJY2FzZSAweGNkOiAvKiBmc2IgZnJlcXVlbmN5ICovCisJCWRhdGEgPSAzOworCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX0FQSUNCQVNFOgorCQlkYXRhID0gdmNwdS0+YXBpY19iYXNlOworCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX01JU0NfRU5BQkxFOgorCQlkYXRhID0gdmNwdS0+aWEzMl9taXNjX2VuYWJsZV9tc3I7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19YODZfNjQKKwljYXNlIE1TUl9FRkVSOgorCQlkYXRhID0gdmNwdS0+c2hhZG93X2VmZXI7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJrdm06IHVuaGFuZGxlZCByZG1zcjogMHgleFxuIiwgbXNyKTsKKwkJcmV0dXJuIDE7CisJfQorCSpwZGF0YSA9IGRhdGE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X21zcl9jb21tb24pOworCisvKgorICogUmVhZHMgYW4gbXNyIHZhbHVlIChvZiAnbXNyX2luZGV4JykgaW50byAncGRhdGEnLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi0wIG90aGVyd2lzZS4KKyAqIEFzc3VtZXMgdmNwdV9sb2FkKCkgd2FzIGFscmVhZHkgY2FsbGVkLgorICovCitzdGF0aWMgaW50IGdldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgKnBkYXRhKQoreworCXJldHVybiBrdm1fYXJjaF9vcHMtPmdldF9tc3IodmNwdSwgbXNyX2luZGV4LCBwZGF0YSk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisKK3N0YXRpYyB2b2lkIHNldF9lZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpCit7CisJaWYgKGVmZXIgJiBFRkVSX1JFU0VSVkVEX0JJVFMpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNldF9lZmVyOiAweCVsbHggI0dQLCByZXNlcnZlZCBiaXRzXG4iLAorCQkgICAgICAgZWZlcik7CisJCWluamVjdF9ncCh2Y3B1KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpc19wYWdpbmcodmNwdSkKKwkgICAgJiYgKHZjcHUtPnNoYWRvd19lZmVyICYgRUZFUl9MTUUpICE9IChlZmVyICYgRUZFUl9MTUUpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJzZXRfZWZlcjogI0dQLCBjaGFuZ2UgTE1FIHdoaWxlIHBhZ2luZ1xuIik7CisJCWluamVjdF9ncCh2Y3B1KTsKKwkJcmV0dXJuOworCX0KKworCWt2bV9hcmNoX29wcy0+c2V0X2VmZXIodmNwdSwgZWZlcik7CisKKwllZmVyICY9IH5FRkVSX0xNQTsKKwllZmVyIHw9IHZjcHUtPnNoYWRvd19lZmVyICYgRUZFUl9MTUE7CisKKwl2Y3B1LT5zaGFkb3dfZWZlciA9IGVmZXI7Cit9CisKKyNlbmRpZgorCitpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEpCit7CisJc3dpdGNoIChtc3IpIHsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJY2FzZSBNU1JfRUZFUjoKKwkJc2V0X2VmZXIodmNwdSwgZGF0YSk7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBNU1JfSUEzMl9NQzBfU1RBVFVTOgorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTVNSX0lBMzJfTUMwX1NUQVRVUyAweCVsbHgsIG5vcFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgZGF0YSk7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgorCWNhc2UgTVNSX0lBMzJfVUNPREVfV1JJVEU6CisJY2FzZSAweDIwMCAuLi4gMHgyZmY6IC8qIE1UUlJzICovCisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfQVBJQ0JBU0U6CisJCXZjcHUtPmFwaWNfYmFzZSA9IGRhdGE7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfTUlTQ19FTkFCTEU6CisJCXZjcHUtPmlhMzJfbWlzY19lbmFibGVfbXNyID0gZGF0YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJrdm06IHVuaGFuZGxlZCB3cm1zcjogMHgleFxuIiwgbXNyKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3NldF9tc3JfY29tbW9uKTsKKworLyoKKyAqIFdyaXRlcyBtc3IgdmFsdWUgaW50byBpbnRvIHRoZSBhcHByb3ByaWF0ZSAicmVnaXN0ZXIiLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi0wIG90aGVyd2lzZS4KKyAqIEFzc3VtZXMgdmNwdV9sb2FkKCkgd2FzIGFscmVhZHkgY2FsbGVkLgorICovCitzdGF0aWMgaW50IHNldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgZGF0YSkKK3sKKwlyZXR1cm4ga3ZtX2FyY2hfb3BzLT5zZXRfbXNyKHZjcHUsIG1zcl9pbmRleCwgZGF0YSk7Cit9CisKK3ZvaWQga3ZtX3Jlc2NoZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHVfcHV0KHZjcHUpOworCWNvbmRfcmVzY2hlZCgpOworCS8qIENhbm5vdCBmYWlsIC0gIG5vIHZjcHUgdW5wbHVnIHlldC4gKi8KKwl2Y3B1X2xvYWQodmNwdS0+a3ZtLCB2Y3B1X3Nsb3QodmNwdSkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3Jlc2NoZWQpOworCit2b2lkIGxvYWRfbXNycyhzdHJ1Y3Qgdm14X21zcl9lbnRyeSAqZSwgaW50IG4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQl3cm1zcmwoZVtpXS5pbmRleCwgZVtpXS5kYXRhKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxvYWRfbXNycyk7CisKK3ZvaWQgc2F2ZV9tc3JzKHN0cnVjdCB2bXhfbXNyX2VudHJ5ICplLCBpbnQgbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCXJkbXNybChlW2ldLmluZGV4LCBlW2ldLmRhdGEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2F2ZV9tc3JzKTsKKworc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX3J1bihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlpbnQgcjsKKworCWlmICghdmFsaWRfdmNwdShrdm1fcnVuLT52Y3B1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2Y3B1ID0gdmNwdV9sb2FkKGt2bSwga3ZtX3J1bi0+dmNwdSk7CisJaWYgKCF2Y3B1KQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWlmIChrdm1fcnVuLT5lbXVsYXRlZCkgeworCQlrdm1fYXJjaF9vcHMtPnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJCWt2bV9ydW4tPmVtdWxhdGVkID0gMDsKKwl9CisKKwlpZiAoa3ZtX3J1bi0+bW1pb19jb21wbGV0ZWQpIHsKKwkJbWVtY3B5KHZjcHUtPm1taW9fZGF0YSwga3ZtX3J1bi0+bW1pby5kYXRhLCA4KTsKKwkJdmNwdS0+bW1pb19yZWFkX2NvbXBsZXRlZCA9IDE7CisJfQorCisJdmNwdS0+bW1pb19uZWVkZWQgPSAwOworCisJciA9IGt2bV9hcmNoX29wcy0+cnVuKHZjcHUsIGt2bV9ydW4pOworCisJdmNwdV9wdXQodmNwdSk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9nZXRfcmVncyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisKKwlpZiAoIXZhbGlkX3ZjcHUocmVncy0+dmNwdSkpCisJCXJldHVybiAtRUlOVkFMOworCisJdmNwdSA9IHZjcHVfbG9hZChrdm0sIHJlZ3MtPnZjcHUpOworCWlmICghdmNwdSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlrdm1fYXJjaF9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7CisKKwlyZWdzLT5yYXggPSB2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SQVhdOworCXJlZ3MtPnJieCA9IHZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JCWF07CisJcmVncy0+cmN4ID0gdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUkNYXTsKKwlyZWdzLT5yZHggPSB2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SRFhdOworCXJlZ3MtPnJzaSA9IHZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JTSV07CisJcmVncy0+cmRpID0gdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUkRJXTsKKwlyZWdzLT5yc3AgPSB2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SU1BdOworCXJlZ3MtPnJicCA9IHZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JCUF07CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXJlZ3MtPnI4ID0gdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUjhdOworCXJlZ3MtPnI5ID0gdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUjldOworCXJlZ3MtPnIxMCA9IHZjcHUtPnJlZ3NbVkNQVV9SRUdTX1IxMF07CisJcmVncy0+cjExID0gdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUjExXTsKKwlyZWdzLT5yMTIgPSB2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SMTJdOworCXJlZ3MtPnIxMyA9IHZjcHUtPnJlZ3NbVkNQVV9SRUdTX1IxM107CisJcmVncy0+cjE0ID0gdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUjE0XTsKKwlyZWdzLT5yMTUgPSB2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SMTVdOworI2VuZGlmCisKKwlyZWdzLT5yaXAgPSB2Y3B1LT5yaXA7CisJcmVncy0+cmZsYWdzID0ga3ZtX2FyY2hfb3BzLT5nZXRfcmZsYWdzKHZjcHUpOworCisJLyoKKwkgKiBEb24ndCBsZWFrIGRlYnVnIGZsYWdzIGluIGNhc2UgdGhleSB3ZXJlIHNldCBmb3IgZ3Vlc3QgZGVidWdnaW5nCisJICovCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQgJiYgdmNwdS0+Z3Vlc3RfZGVidWcuc2luZ2xlc3RlcCkKKwkJcmVncy0+cmZsYWdzICY9IH4oWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkYpOworCisJdmNwdV9wdXQodmNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKworCWlmICghdmFsaWRfdmNwdShyZWdzLT52Y3B1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2Y3B1ID0gdmNwdV9sb2FkKGt2bSwgcmVncy0+dmNwdSk7CisJaWYgKCF2Y3B1KQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSByZWdzLT5yYXg7CisJdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUkJYXSA9IHJlZ3MtPnJieDsKKwl2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SQ1hdID0gcmVncy0+cmN4OworCXZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JEWF0gPSByZWdzLT5yZHg7CisJdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUlNJXSA9IHJlZ3MtPnJzaTsKKwl2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SREldID0gcmVncy0+cmRpOworCXZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JTUF0gPSByZWdzLT5yc3A7CisJdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUkJQXSA9IHJlZ3MtPnJicDsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUjhdID0gcmVncy0+cjg7CisJdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUjldID0gcmVncy0+cjk7CisJdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUjEwXSA9IHJlZ3MtPnIxMDsKKwl2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SMTFdID0gcmVncy0+cjExOworCXZjcHUtPnJlZ3NbVkNQVV9SRUdTX1IxMl0gPSByZWdzLT5yMTI7CisJdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUjEzXSA9IHJlZ3MtPnIxMzsKKwl2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SMTRdID0gcmVncy0+cjE0OworCXZjcHUtPnJlZ3NbVkNQVV9SRUdTX1IxNV0gPSByZWdzLT5yMTU7CisjZW5kaWYKKworCXZjcHUtPnJpcCA9IHJlZ3MtPnJpcDsKKwlrdm1fYXJjaF9vcHMtPnNldF9yZmxhZ3ModmNwdSwgcmVncy0+cmZsYWdzKTsKKworCWt2bV9hcmNoX29wcy0+ZGVjYWNoZV9yZWdzKHZjcHUpOworCisJdmNwdV9wdXQodmNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2V0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpCit7CisJcmV0dXJuIGt2bV9hcmNoX29wcy0+Z2V0X3NlZ21lbnQodmNwdSwgdmFyLCBzZWcpOworfQorCitzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfZ2V0X3NyZWdzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpCit7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCXN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlIGR0OworCisJaWYgKCF2YWxpZF92Y3B1KHNyZWdzLT52Y3B1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdmNwdSA9IHZjcHVfbG9hZChrdm0sIHNyZWdzLT52Y3B1KTsKKwlpZiAoIXZjcHUpCisJCXJldHVybiAtRU5PRU5UOworCisJZ2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5jcywgVkNQVV9TUkVHX0NTKTsKKwlnZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmRzLCBWQ1BVX1NSRUdfRFMpOworCWdldF9zZWdtZW50KHZjcHUsICZzcmVncy0+ZXMsIFZDUFVfU1JFR19FUyk7CisJZ2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5mcywgVkNQVV9TUkVHX0ZTKTsKKwlnZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmdzLCBWQ1BVX1NSRUdfR1MpOworCWdldF9zZWdtZW50KHZjcHUsICZzcmVncy0+c3MsIFZDUFVfU1JFR19TUyk7CisKKwlnZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPnRyLCBWQ1BVX1NSRUdfVFIpOworCWdldF9zZWdtZW50KHZjcHUsICZzcmVncy0+bGR0LCBWQ1BVX1NSRUdfTERUUik7CisKKwlrdm1fYXJjaF9vcHMtPmdldF9pZHQodmNwdSwgJmR0KTsKKwlzcmVncy0+aWR0LmxpbWl0ID0gZHQubGltaXQ7CisJc3JlZ3MtPmlkdC5iYXNlID0gZHQuYmFzZTsKKwlrdm1fYXJjaF9vcHMtPmdldF9nZHQodmNwdSwgJmR0KTsKKwlzcmVncy0+Z2R0LmxpbWl0ID0gZHQubGltaXQ7CisJc3JlZ3MtPmdkdC5iYXNlID0gZHQuYmFzZTsKKworCWt2bV9hcmNoX29wcy0+ZGVjYWNoZV9jcjBfY3I0X2d1ZXN0X2JpdHModmNwdSk7CisJc3JlZ3MtPmNyMCA9IHZjcHUtPmNyMDsKKwlzcmVncy0+Y3IyID0gdmNwdS0+Y3IyOworCXNyZWdzLT5jcjMgPSB2Y3B1LT5jcjM7CisJc3JlZ3MtPmNyNCA9IHZjcHUtPmNyNDsKKwlzcmVncy0+Y3I4ID0gdmNwdS0+Y3I4OworCXNyZWdzLT5lZmVyID0gdmNwdS0+c2hhZG93X2VmZXI7CisJc3JlZ3MtPmFwaWNfYmFzZSA9IHZjcHUtPmFwaWNfYmFzZTsKKworCW1lbWNweShzcmVncy0+aW50ZXJydXB0X2JpdG1hcCwgdmNwdS0+aXJxX3BlbmRpbmcsCisJICAgICAgIHNpemVvZiBzcmVncy0+aW50ZXJydXB0X2JpdG1hcCk7CisKKwl2Y3B1X3B1dCh2Y3B1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQlzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhciwgaW50IHNlZykKK3sKKwlyZXR1cm4ga3ZtX2FyY2hfb3BzLT5zZXRfc2VnbWVudCh2Y3B1LCB2YXIsIHNlZyk7Cit9CisKK3N0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF9zZXRfc3JlZ3Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncykKK3sKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJaW50IG1tdV9yZXNldF9uZWVkZWQgPSAwOworCWludCBpOworCXN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlIGR0OworCisJaWYgKCF2YWxpZF92Y3B1KHNyZWdzLT52Y3B1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdmNwdSA9IHZjcHVfbG9hZChrdm0sIHNyZWdzLT52Y3B1KTsKKwlpZiAoIXZjcHUpCisJCXJldHVybiAtRU5PRU5UOworCisJc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5jcywgVkNQVV9TUkVHX0NTKTsKKwlzZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmRzLCBWQ1BVX1NSRUdfRFMpOworCXNldF9zZWdtZW50KHZjcHUsICZzcmVncy0+ZXMsIFZDUFVfU1JFR19FUyk7CisJc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5mcywgVkNQVV9TUkVHX0ZTKTsKKwlzZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPmdzLCBWQ1BVX1NSRUdfR1MpOworCXNldF9zZWdtZW50KHZjcHUsICZzcmVncy0+c3MsIFZDUFVfU1JFR19TUyk7CisKKwlzZXRfc2VnbWVudCh2Y3B1LCAmc3JlZ3MtPnRyLCBWQ1BVX1NSRUdfVFIpOworCXNldF9zZWdtZW50KHZjcHUsICZzcmVncy0+bGR0LCBWQ1BVX1NSRUdfTERUUik7CisKKwlkdC5saW1pdCA9IHNyZWdzLT5pZHQubGltaXQ7CisJZHQuYmFzZSA9IHNyZWdzLT5pZHQuYmFzZTsKKwlrdm1fYXJjaF9vcHMtPnNldF9pZHQodmNwdSwgJmR0KTsKKwlkdC5saW1pdCA9IHNyZWdzLT5nZHQubGltaXQ7CisJZHQuYmFzZSA9IHNyZWdzLT5nZHQuYmFzZTsKKwlrdm1fYXJjaF9vcHMtPnNldF9nZHQodmNwdSwgJmR0KTsKKworCXZjcHUtPmNyMiA9IHNyZWdzLT5jcjI7CisJbW11X3Jlc2V0X25lZWRlZCB8PSB2Y3B1LT5jcjMgIT0gc3JlZ3MtPmNyMzsKKwl2Y3B1LT5jcjMgPSBzcmVncy0+Y3IzOworCisJdmNwdS0+Y3I4ID0gc3JlZ3MtPmNyODsKKworCW1tdV9yZXNldF9uZWVkZWQgfD0gdmNwdS0+c2hhZG93X2VmZXIgIT0gc3JlZ3MtPmVmZXI7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWt2bV9hcmNoX29wcy0+c2V0X2VmZXIodmNwdSwgc3JlZ3MtPmVmZXIpOworI2VuZGlmCisJdmNwdS0+YXBpY19iYXNlID0gc3JlZ3MtPmFwaWNfYmFzZTsKKworCWt2bV9hcmNoX29wcy0+ZGVjYWNoZV9jcjBfY3I0X2d1ZXN0X2JpdHModmNwdSk7CisKKwltbXVfcmVzZXRfbmVlZGVkIHw9IHZjcHUtPmNyMCAhPSBzcmVncy0+Y3IwOworCWt2bV9hcmNoX29wcy0+c2V0X2NyMF9ub19tb2Rlc3dpdGNoKHZjcHUsIHNyZWdzLT5jcjApOworCisJbW11X3Jlc2V0X25lZWRlZCB8PSB2Y3B1LT5jcjQgIT0gc3JlZ3MtPmNyNDsKKwlrdm1fYXJjaF9vcHMtPnNldF9jcjQodmNwdSwgc3JlZ3MtPmNyNCk7CisJaWYgKCFpc19sb25nX21vZGUodmNwdSkgJiYgaXNfcGFlKHZjcHUpKQorCQlsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LT5jcjMpOworCisJaWYgKG1tdV9yZXNldF9uZWVkZWQpCisJCWt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTsKKworCW1lbWNweSh2Y3B1LT5pcnFfcGVuZGluZywgc3JlZ3MtPmludGVycnVwdF9iaXRtYXAsCisJICAgICAgIHNpemVvZiB2Y3B1LT5pcnFfcGVuZGluZyk7CisJdmNwdS0+aXJxX3N1bW1hcnkgPSAwOworCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFfV09SRFM7ICsraSkKKwkJaWYgKHZjcHUtPmlycV9wZW5kaW5nW2ldKQorCQkJX19zZXRfYml0KGksICZ2Y3B1LT5pcnFfc3VtbWFyeSk7CisKKwl2Y3B1X3B1dCh2Y3B1KTsKKworCXJldHVybiAwOworfQorCisvKgorICogTGlzdCBvZiBtc3IgbnVtYmVycyB3aGljaCB3ZSBleHBvc2UgdG8gdXNlcnNwYWNlIHRocm91Z2ggS1ZNX0dFVF9NU1JTCisgKiBhbmQgS1ZNX1NFVF9NU1JTLCBhbmQgS1ZNX0dFVF9NU1JfSU5ERVhfTElTVC4KKyAqCisgKiBUaGlzIGxpc3QgaXMgbW9kaWZpZWQgYXQgbW9kdWxlIGxvYWQgdGltZSB0byByZWZsZWN0IHRoZQorICogY2FwYWJpbGl0aWVzIG9mIHRoZSBob3N0IGNwdS4KKyAqLworc3RhdGljIHUzMiBtc3JzX3RvX3NhdmVbXSA9IHsKKwlNU1JfSUEzMl9TWVNFTlRFUl9DUywgTVNSX0lBMzJfU1lTRU5URVJfRVNQLCBNU1JfSUEzMl9TWVNFTlRFUl9FSVAsCisJTVNSX0s2X1NUQVIsCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCU1TUl9DU1RBUiwgTVNSX0tFUk5FTF9HU19CQVNFLCBNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfTFNUQVIsCisjZW5kaWYKKwlNU1JfSUEzMl9USU1FX1NUQU1QX0NPVU5URVIsCit9OworCitzdGF0aWMgdW5zaWduZWQgbnVtX21zcnNfdG9fc2F2ZTsKKworc3RhdGljIHUzMiBlbXVsYXRlZF9tc3JzW10gPSB7CisJTVNSX0lBMzJfTUlTQ19FTkFCTEUsCit9OworCitzdGF0aWMgX19pbml0IHZvaWQga3ZtX2luaXRfbXNyX2xpc3Qodm9pZCkKK3sKKwl1MzIgZHVtbXlbMl07CisJdW5zaWduZWQgaSwgajsKKworCWZvciAoaSA9IGogPSAwOyBpIDwgQVJSQVlfU0laRShtc3JzX3RvX3NhdmUpOyBpKyspIHsKKwkJaWYgKHJkbXNyX3NhZmUobXNyc190b19zYXZlW2ldLCAmZHVtbXlbMF0sICZkdW1teVsxXSkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChqIDwgaSkKKwkJCW1zcnNfdG9fc2F2ZVtqXSA9IG1zcnNfdG9fc2F2ZVtpXTsKKwkJaisrOworCX0KKwludW1fbXNyc190b19zYXZlID0gajsKK30KKworLyoKKyAqIEFkYXB0IHNldF9tc3IoKSB0byBtc3JfaW8oKSdzIGNhbGxpbmcgY29udmVudGlvbgorICovCitzdGF0aWMgaW50IGRvX3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbmRleCwgdTY0ICpkYXRhKQoreworCXJldHVybiBzZXRfbXNyKHZjcHUsIGluZGV4LCAqZGF0YSk7Cit9CisKKy8qCisgKiBSZWFkIG9yIHdyaXRlIGEgYnVuY2ggb2YgbXNycy4gQWxsIHBhcmFtZXRlcnMgYXJlIGtlcm5lbCBhZGRyZXNzZXMuCisgKgorICogQHJldHVybiBudW1iZXIgb2YgbXNycyBzZXQgc3VjY2Vzc2Z1bGx5LgorICovCitzdGF0aWMgaW50IF9fbXNyX2lvKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tc3JzICptc3JzLAorCQkgICAgc3RydWN0IGt2bV9tc3JfZW50cnkgKmVudHJpZXMsCisJCSAgICBpbnQgKCpkb19tc3IpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgIHVuc2lnbmVkIGluZGV4LCB1NjQgKmRhdGEpKQoreworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlpbnQgaTsKKworCWlmICghdmFsaWRfdmNwdShtc3JzLT52Y3B1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2Y3B1ID0gdmNwdV9sb2FkKGt2bSwgbXNycy0+dmNwdSk7CisJaWYgKCF2Y3B1KQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWZvciAoaSA9IDA7IGkgPCBtc3JzLT5ubXNyczsgKytpKQorCQlpZiAoZG9fbXNyKHZjcHUsIGVudHJpZXNbaV0uaW5kZXgsICZlbnRyaWVzW2ldLmRhdGEpKQorCQkJYnJlYWs7CisKKwl2Y3B1X3B1dCh2Y3B1KTsKKworCXJldHVybiBpOworfQorCisvKgorICogUmVhZCBvciB3cml0ZSBhIGJ1bmNoIG9mIG1zcnMuIFBhcmFtZXRlcnMgYXJlIHVzZXIgYWRkcmVzc2VzLgorICoKKyAqIEByZXR1cm4gbnVtYmVyIG9mIG1zcnMgc2V0IHN1Y2Nlc3NmdWxseS4KKyAqLworc3RhdGljIGludCBtc3JfaW8oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21zcnMgX191c2VyICp1c2VyX21zcnMsCisJCSAgaW50ICgqZG9fbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJdW5zaWduZWQgaW5kZXgsIHU2NCAqZGF0YSksCisJCSAgaW50IHdyaXRlYmFjaykKK3sKKwlzdHJ1Y3Qga3ZtX21zcnMgbXNyczsKKwlzdHJ1Y3Qga3ZtX21zcl9lbnRyeSAqZW50cmllczsKKwlpbnQgciwgbjsKKwl1bnNpZ25lZCBzaXplOworCisJciA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZtc3JzLCB1c2VyX21zcnMsIHNpemVvZiBtc3JzKSkKKwkJZ290byBvdXQ7CisKKwlyID0gLUUyQklHOworCWlmIChtc3JzLm5tc3JzID49IE1BWF9JT19NU1JTKQorCQlnb3RvIG91dDsKKworCXIgPSAtRU5PTUVNOworCXNpemUgPSBzaXplb2Yoc3RydWN0IGt2bV9tc3JfZW50cnkpICogbXNycy5ubXNyczsKKwllbnRyaWVzID0gdm1hbGxvYyhzaXplKTsKKwlpZiAoIWVudHJpZXMpCisJCWdvdG8gb3V0OworCisJciA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKGVudHJpZXMsIHVzZXJfbXNycy0+ZW50cmllcywgc2l6ZSkpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyID0gbiA9IF9fbXNyX2lvKGt2bSwgJm1zcnMsIGVudHJpZXMsIGRvX21zcik7CisJaWYgKHIgPCAwKQorCQlnb3RvIG91dF9mcmVlOworCisJciA9IC1FRkFVTFQ7CisJaWYgKHdyaXRlYmFjayAmJiBjb3B5X3RvX3VzZXIodXNlcl9tc3JzLT5lbnRyaWVzLCBlbnRyaWVzLCBzaXplKSkKKwkJZ290byBvdXRfZnJlZTsKKworCXIgPSBuOworCitvdXRfZnJlZToKKwl2ZnJlZShlbnRyaWVzKTsKK291dDoKKwlyZXR1cm4gcjsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhIGd1ZXN0IHZpcnR1YWwgYWRkcmVzcyB0byBhIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQga3ZtX2Rldl9pb2N0bF90cmFuc2xhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uICp0cikKK3sKKwl1bnNpZ25lZCBsb25nIHZhZGRyID0gdHItPmxpbmVhcl9hZGRyZXNzOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlncGFfdCBncGE7CisKKwl2Y3B1ID0gdmNwdV9sb2FkKGt2bSwgdHItPnZjcHUpOworCWlmICghdmNwdSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJc3Bpbl9sb2NrKCZrdm0tPmxvY2spOworCWdwYSA9IHZjcHUtPm1tdS5ndmFfdG9fZ3BhKHZjcHUsIHZhZGRyKTsKKwl0ci0+cGh5c2ljYWxfYWRkcmVzcyA9IGdwYTsKKwl0ci0+dmFsaWQgPSBncGEgIT0gVU5NQVBQRURfR1ZBOworCXRyLT53cml0ZWFibGUgPSAxOworCXRyLT51c2VybW9kZSA9IDA7CisJc3Bpbl91bmxvY2soJmt2bS0+bG9jayk7CisJdmNwdV9wdXQodmNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2ludGVycnVwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpCit7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCisJaWYgKCF2YWxpZF92Y3B1KGlycS0+dmNwdSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpcnEtPmlycSA8IDAgfHwgaXJxLT5pcnEgPj0gMjU2KQorCQlyZXR1cm4gLUVJTlZBTDsKKwl2Y3B1ID0gdmNwdV9sb2FkKGt2bSwgaXJxLT52Y3B1KTsKKwlpZiAoIXZjcHUpCisJCXJldHVybiAtRU5PRU5UOworCisJc2V0X2JpdChpcnEtPmlycSwgdmNwdS0+aXJxX3BlbmRpbmcpOworCXNldF9iaXQoaXJxLT5pcnEgLyBCSVRTX1BFUl9MT05HLCAmdmNwdS0+aXJxX3N1bW1hcnkpOworCisJdmNwdV9wdXQodmNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK3sKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJaW50IHI7CisKKwlpZiAoIXZhbGlkX3ZjcHUoZGJnLT52Y3B1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdmNwdSA9IHZjcHVfbG9hZChrdm0sIGRiZy0+dmNwdSk7CisJaWYgKCF2Y3B1KQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXIgPSBrdm1fYXJjaF9vcHMtPnNldF9ndWVzdF9kZWJ1Zyh2Y3B1LCBkYmcpOworCisJdmNwdV9wdXQodmNwdSk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGxvbmcga3ZtX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJaW50IHIgPSAtRUlOVkFMOworCisJc3dpdGNoIChpb2N0bCkgeworCWNhc2UgS1ZNX0dFVF9BUElfVkVSU0lPTjoKKwkJciA9IEtWTV9BUElfVkVSU0lPTjsKKwkJYnJlYWs7CisJY2FzZSBLVk1fQ1JFQVRFX1ZDUFU6IHsKKwkJciA9IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZjcHUoa3ZtLCBhcmcpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisJY2FzZSBLVk1fUlVOOiB7CisJCXN0cnVjdCBrdm1fcnVuIGt2bV9ydW47CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigma3ZtX3J1biwgKHZvaWQgKilhcmcsIHNpemVvZiBrdm1fcnVuKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX2Rldl9pb2N0bF9ydW4oa3ZtLCAma3ZtX3J1bik7CisJCWlmIChyIDwgMCAmJiAgciAhPSAtRUlOVFIpCisJCQlnb3RvIG91dDsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKWFyZywgJmt2bV9ydW4sIHNpemVvZiBrdm1fcnVuKSkgeworCQkJciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBLVk1fR0VUX1JFR1M6IHsKKwkJc3RydWN0IGt2bV9yZWdzIGt2bV9yZWdzOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmt2bV9yZWdzLCAodm9pZCAqKWFyZywgc2l6ZW9mIGt2bV9yZWdzKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX2Rldl9pb2N0bF9nZXRfcmVncyhrdm0sICZrdm1fcmVncyk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV90b191c2VyKCh2b2lkICopYXJnLCAma3ZtX3JlZ3MsIHNpemVvZiBrdm1fcmVncykpCisJCQlnb3RvIG91dDsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9TRVRfUkVHUzogeworCQlzdHJ1Y3Qga3ZtX3JlZ3Mga3ZtX3JlZ3M7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigma3ZtX3JlZ3MsICh2b2lkICopYXJnLCBzaXplb2Yga3ZtX3JlZ3MpKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fZGV2X2lvY3RsX3NldF9yZWdzKGt2bSwgJmt2bV9yZWdzKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9HRVRfU1JFR1M6IHsKKwkJc3RydWN0IGt2bV9zcmVncyBrdm1fc3JlZ3M7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigma3ZtX3NyZWdzLCAodm9pZCAqKWFyZywgc2l6ZW9mIGt2bV9zcmVncykpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9kZXZfaW9jdGxfZ2V0X3NyZWdzKGt2bSwgJmt2bV9zcmVncyk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV90b191c2VyKCh2b2lkICopYXJnLCAma3ZtX3NyZWdzLCBzaXplb2Yga3ZtX3NyZWdzKSkKKwkJCWdvdG8gb3V0OworCQlyID0gMDsKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX1NFVF9TUkVHUzogeworCQlzdHJ1Y3Qga3ZtX3NyZWdzIGt2bV9zcmVnczsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZrdm1fc3JlZ3MsICh2b2lkICopYXJnLCBzaXplb2Yga3ZtX3NyZWdzKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX2Rldl9pb2N0bF9zZXRfc3JlZ3Moa3ZtLCAma3ZtX3NyZWdzKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9UUkFOU0xBVEU6IHsKKwkJc3RydWN0IGt2bV90cmFuc2xhdGlvbiB0cjsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0ciwgKHZvaWQgKilhcmcsIHNpemVvZiB0cikpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9kZXZfaW9jdGxfdHJhbnNsYXRlKGt2bSwgJnRyKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKilhcmcsICZ0ciwgc2l6ZW9mIHRyKSkKKwkJCWdvdG8gb3V0OworCQlyID0gMDsKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX0lOVEVSUlVQVDogeworCQlzdHJ1Y3Qga3ZtX2ludGVycnVwdCBpcnE7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmaXJxLCAodm9pZCAqKWFyZywgc2l6ZW9mIGlycSkpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9kZXZfaW9jdGxfaW50ZXJydXB0KGt2bSwgJmlycSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJCXIgPSAwOworCQlicmVhazsKKwl9CisJY2FzZSBLVk1fREVCVUdfR1VFU1Q6IHsKKwkJc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCBkYmc7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZGJnLCAodm9pZCAqKWFyZywgc2l6ZW9mIGRiZykpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9kZXZfaW9jdGxfZGVidWdfZ3Vlc3Qoa3ZtLCAmZGJnKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9TRVRfTUVNT1JZX1JFR0lPTjogeworCQlzdHJ1Y3Qga3ZtX21lbW9yeV9yZWdpb24ga3ZtX21lbTsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZrdm1fbWVtLCAodm9pZCAqKWFyZywgc2l6ZW9mIGt2bV9tZW0pKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fZGV2X2lvY3RsX3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgJmt2bV9tZW0pOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisJY2FzZSBLVk1fR0VUX0RJUlRZX0xPRzogeworCQlzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyBsb2c7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmbG9nLCAodm9pZCAqKWFyZywgc2l6ZW9mIGxvZykpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9kZXZfaW9jdGxfZ2V0X2RpcnR5X2xvZyhrdm0sICZsb2cpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisJY2FzZSBLVk1fR0VUX01TUlM6CisJCXIgPSBtc3JfaW8oa3ZtLCAodm9pZCBfX3VzZXIgKilhcmcsIGdldF9tc3IsIDEpOworCQlicmVhazsKKwljYXNlIEtWTV9TRVRfTVNSUzoKKwkJciA9IG1zcl9pbyhrdm0sICh2b2lkIF9fdXNlciAqKWFyZywgZG9fc2V0X21zciwgMCk7CisJCWJyZWFrOworCWNhc2UgS1ZNX0dFVF9NU1JfSU5ERVhfTElTVDogeworCQlzdHJ1Y3Qga3ZtX21zcl9saXN0IF9fdXNlciAqdXNlcl9tc3JfbGlzdCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwkJc3RydWN0IGt2bV9tc3JfbGlzdCBtc3JfbGlzdDsKKwkJdW5zaWduZWQgbjsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZtc3JfbGlzdCwgdXNlcl9tc3JfbGlzdCwgc2l6ZW9mIG1zcl9saXN0KSkKKwkJCWdvdG8gb3V0OworCQluID0gbXNyX2xpc3Qubm1zcnM7CisJCW1zcl9saXN0Lm5tc3JzID0gbnVtX21zcnNfdG9fc2F2ZSArIEFSUkFZX1NJWkUoZW11bGF0ZWRfbXNycyk7CisJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9tc3JfbGlzdCwgJm1zcl9saXN0LCBzaXplb2YgbXNyX2xpc3QpKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRTJCSUc7CisJCWlmIChuIDwgbnVtX21zcnNfdG9fc2F2ZSkKKwkJCWdvdG8gb3V0OworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX21zcl9saXN0LT5pbmRpY2VzLCAmbXNyc190b19zYXZlLAorCQkJCSBudW1fbXNyc190b19zYXZlICogc2l6ZW9mKHUzMikpKQorCQkJZ290byBvdXQ7CisJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9tc3JfbGlzdC0+aW5kaWNlcworCQkJCSArIG51bV9tc3JzX3RvX3NhdmUgKiBzaXplb2YodTMyKSwKKwkJCQkgJmVtdWxhdGVkX21zcnMsCisJCQkJIEFSUkFZX1NJWkUoZW11bGF0ZWRfbXNycykgKiBzaXplb2YodTMyKSkpCisJCQlnb3RvIG91dDsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQk7CisJfQorb3V0OgorCXJldHVybiByOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKmt2bV9kZXZfbm9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkgICBpbnQgKnR5cGUpCit7CisJc3RydWN0IGt2bSAqa3ZtID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBwZ29mZjsKKwlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OworCXN0cnVjdCBwYWdlICpwYWdlOworCisJKnR5cGUgPSBWTV9GQVVMVF9NSU5PUjsKKwlwZ29mZiA9ICgoYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQpICsgdm1hLT52bV9wZ29mZjsKKwlzbG90ID0gZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBwZ29mZik7CisJaWYgKCFzbG90KQorCQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsKKwlwYWdlID0gZ2ZuX3RvX3BhZ2Uoc2xvdCwgcGdvZmYpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CisJZ2V0X3BhZ2UocGFnZSk7CisJcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qga3ZtX2Rldl92bV9vcHMgPSB7CisJLm5vcGFnZSA9IGt2bV9kZXZfbm9wYWdlLAorfTsKKworc3RhdGljIGludCBrdm1fZGV2X21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXZtYS0+dm1fb3BzID0gJmt2bV9kZXZfdm1fb3BzOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrdm1fY2hhcmRldl9vcHMgPSB7CisJLm9wZW4JCT0ga3ZtX2Rldl9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IGt2bV9kZXZfcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBrdm1fZGV2X2lvY3RsLAorCS5jb21wYXRfaW9jdGwgICA9IGt2bV9kZXZfaW9jdGwsCisJLm1tYXAgICAgICAgICAgID0ga3ZtX2Rldl9tbWFwLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGt2bV9kZXYgPSB7CisJTUlTQ19EWU5BTUlDX01JTk9SLAorCSJrdm0iLAorCSZrdm1fY2hhcmRldl9vcHMsCit9OworCitzdGF0aWMgaW50IGt2bV9yZWJvb3Qoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpub3RpZmllciwgdW5zaWduZWQgbG9uZyB2YWwsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnYpCit7CisJaWYgKHZhbCA9PSBTWVNfUkVTVEFSVCkgeworCQkvKgorCQkgKiBTb21lICh3ZWxsLCBhdCBsZWFzdCBtaW5lKSBCSU9TZXMgaGFuZyBvbiByZWJvb3QgaWYKKwkJICogaW4gdm14IHJvb3QgbW9kZS4KKwkJICovCisJCXByaW50ayhLRVJOX0lORk8gImt2bTogZXhpdGluZyBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvblxuIik7CisJCW9uX2VhY2hfY3B1KGt2bV9hcmNoX29wcy0+aGFyZHdhcmVfZGlzYWJsZSwgMCwgMCwgMSk7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX3JlYm9vdF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGt2bV9yZWJvb3QsCisJLnByaW9yaXR5ID0gMCwKK307CisKK3N0YXRpYyBfX2luaXQgdm9pZCBrdm1faW5pdF9kZWJ1Zyh2b2lkKQoreworCXN0cnVjdCBrdm1fc3RhdHNfZGVidWdmc19pdGVtICpwOworCisJZGVidWdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImt2bSIsIDApOworCWZvciAocCA9IGRlYnVnZnNfZW50cmllczsgcC0+bmFtZTsgKytwKQorCQlwLT5kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIocC0+bmFtZSwgMDQ0NCwgZGVidWdmc19kaXIsCisJCQkJCSAgICAgICBwLT5kYXRhKTsKK30KKworc3RhdGljIHZvaWQga3ZtX2V4aXRfZGVidWcodm9pZCkKK3sKKwlzdHJ1Y3Qga3ZtX3N0YXRzX2RlYnVnZnNfaXRlbSAqcDsKKworCWZvciAocCA9IGRlYnVnZnNfZW50cmllczsgcC0+bmFtZTsgKytwKQorCQlkZWJ1Z2ZzX3JlbW92ZShwLT5kZW50cnkpOworCWRlYnVnZnNfcmVtb3ZlKGRlYnVnZnNfZGlyKTsKK30KKworaHBhX3QgYmFkX3BhZ2VfYWRkcmVzczsKKworaW50IGt2bV9pbml0X2FyY2goc3RydWN0IGt2bV9hcmNoX29wcyAqb3BzLCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCit7CisJaW50IHI7CisKKwlpZiAoa3ZtX2FyY2hfb3BzKSB7CisJCXByaW50ayhLRVJOX0VSUiAia3ZtOiBhbHJlYWR5IGxvYWRlZCB0aGUgb3RoZXIgbW9kdWxlXG4iKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJaWYgKCFvcHMtPmNwdV9oYXNfa3ZtX3N1cHBvcnQoKSkgeworCQlwcmludGsoS0VSTl9FUlIgImt2bTogbm8gaGFyZHdhcmUgc3VwcG9ydFxuIik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJaWYgKG9wcy0+ZGlzYWJsZWRfYnlfYmlvcygpKSB7CisJCXByaW50ayhLRVJOX0VSUiAia3ZtOiBkaXNhYmxlZCBieSBiaW9zXG4iKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWt2bV9hcmNoX29wcyA9IG9wczsKKworCXIgPSBrdm1fYXJjaF9vcHMtPmhhcmR3YXJlX3NldHVwKCk7CisJaWYgKHIgPCAwKQorCSAgICByZXR1cm4gcjsKKworCW9uX2VhY2hfY3B1KGt2bV9hcmNoX29wcy0+aGFyZHdhcmVfZW5hYmxlLCAwLCAwLCAxKTsKKwlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmt2bV9yZWJvb3Rfbm90aWZpZXIpOworCisJa3ZtX2NoYXJkZXZfb3BzLm93bmVyID0gbW9kdWxlOworCisJciA9IG1pc2NfcmVnaXN0ZXIoJmt2bV9kZXYpOworCWlmIChyKSB7CisJCXByaW50ayAoS0VSTl9FUlIgImt2bTogbWlzYyBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlyZXR1cm4gcjsKKworb3V0X2ZyZWU6CisJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmt2bV9yZWJvb3Rfbm90aWZpZXIpOworCW9uX2VhY2hfY3B1KGt2bV9hcmNoX29wcy0+aGFyZHdhcmVfZGlzYWJsZSwgMCwgMCwgMSk7CisJa3ZtX2FyY2hfb3BzLT5oYXJkd2FyZV91bnNldHVwKCk7CisJcmV0dXJuIHI7Cit9CisKK3ZvaWQga3ZtX2V4aXRfYXJjaCh2b2lkKQoreworCW1pc2NfZGVyZWdpc3Rlcigma3ZtX2Rldik7CisKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigma3ZtX3JlYm9vdF9ub3RpZmllcik7CisJb25fZWFjaF9jcHUoa3ZtX2FyY2hfb3BzLT5oYXJkd2FyZV9kaXNhYmxlLCAwLCAwLCAxKTsKKwlrdm1fYXJjaF9vcHMtPmhhcmR3YXJlX3Vuc2V0dXAoKTsKKwlrdm1fYXJjaF9vcHMgPSBOVUxMOworfQorCitzdGF0aWMgX19pbml0IGludCBrdm1faW5pdCh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYmFkX3BhZ2U7CisJaW50IHIgPSAwOworCisJa3ZtX2luaXRfZGVidWcoKTsKKworCWt2bV9pbml0X21zcl9saXN0KCk7CisKKwlpZiAoKGJhZF9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQlyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYmFkX3BhZ2VfYWRkcmVzcyA9IHBhZ2VfdG9fcGZuKGJhZF9wYWdlKSA8PCBQQUdFX1NISUZUOworCW1lbXNldChfX3ZhKGJhZF9wYWdlX2FkZHJlc3MpLCAwLCBQQUdFX1NJWkUpOworCisJcmV0dXJuIHI7CisKK291dDoKKwlrdm1fZXhpdF9kZWJ1ZygpOworCXJldHVybiByOworfQorCitzdGF0aWMgX19leGl0IHZvaWQga3ZtX2V4aXQodm9pZCkKK3sKKwlrdm1fZXhpdF9kZWJ1ZygpOworCV9fZnJlZV9wYWdlKHBmbl90b19wYWdlKGJhZF9wYWdlX2FkZHJlc3MgPj4gUEFHRV9TSElGVCkpOworfQorCittb2R1bGVfaW5pdChrdm1faW5pdCkKK21vZHVsZV9leGl0KGt2bV9leGl0KQorCitFWFBPUlRfU1lNQk9MX0dQTChrdm1faW5pdF9hcmNoKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9leGl0X2FyY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0va3ZtX3N2bS5oIGIvZHJpdmVycy9rdm0va3ZtX3N2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Y2M4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2t2bS9rdm1fc3ZtLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBfX0tWTV9TVk1fSAorI2RlZmluZSBfX0tWTV9TVk1fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorCisjaW5jbHVkZSAic3ZtLmgiCisjaW5jbHVkZSAia3ZtLmgiCisKK3N0YXRpYyBjb25zdCB1MzIgaG9zdF9zYXZlX21zcnNbXSA9IHsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJTVNSX1NUQVIsIE1TUl9MU1RBUiwgTVNSX0NTVEFSLCBNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfS0VSTkVMX0dTX0JBU0UsCisJTVNSX0ZTX0JBU0UsIE1TUl9HU19CQVNFLAorI2VuZGlmCisJTVNSX0lBMzJfU1lTRU5URVJfQ1MsIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgTVNSX0lBMzJfU1lTRU5URVJfRUlQLAorCU1TUl9JQTMyX0RFQlVHQ1RMTVNSLCAvKk1TUl9JQTMyX0xBU1RCUkFOQ0hGUk9NSVAsCisJTVNSX0lBMzJfTEFTVEJSQU5DSFRPSVAsIE1TUl9JQTMyX0xBU1RJTlRGUk9NSVAsTVNSX0lBMzJfTEFTVElOVFRPSVAsKi8KK307CisKKyNkZWZpbmUgTlJfSE9TVF9TQVZFX01TUlMgKHNpemVvZihob3N0X3NhdmVfbXNycykgLyBzaXplb2YoKmhvc3Rfc2F2ZV9tc3JzKSkKKyNkZWZpbmUgTlVNX0RCX1JFR1MgNAorCitzdHJ1Y3QgdmNwdV9zdm0geworCXN0cnVjdCB2bWNiICp2bWNiOworCXVuc2lnbmVkIGxvbmcgdm1jYl9wYTsKKwlzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzdm1fZGF0YTsKKwl1aW50NjRfdCBhc2lkX2dlbmVyYXRpb247CisKKwl1bnNpZ25lZCBsb25nIGNyMDsKKwl1bnNpZ25lZCBsb25nIGNyNDsKKwl1bnNpZ25lZCBsb25nIGRiX3JlZ3NbTlVNX0RCX1JFR1NdOworCisJdTY0IG5leHRfcmlwOworCisJdTY0IGhvc3RfbXNyc1tOUl9IT1NUX1NBVkVfTVNSU107CisJdW5zaWduZWQgbG9uZyBob3N0X2NyMjsKKwl1bnNpZ25lZCBsb25nIGhvc3RfZGJfcmVnc1tOVU1fREJfUkVHU107CisJdW5zaWduZWQgbG9uZyBob3N0X2RyNjsKKwl1bnNpZ25lZCBsb25nIGhvc3RfZHI3OworfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMva3ZtL2t2bV92bXguaCBiL2RyaXZlcnMva3ZtL2t2bV92bXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTM5ZjczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9rdm0va3ZtX3ZteC5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX19LVk1fVk1YX0gKKyNkZWZpbmUgX19LVk1fVk1YX0gKKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qCisgKiBhdm9pZCBzYXZlL2xvYWQgTVNSX1NZU0NBTExfTUFTSyBhbmQgTVNSX0xTVEFSIGJ5IHN0ZCB2dAorICogbWVjaGFuaXNtIChjcHUgYnVnIEFBMjQpCisgKi8KKyNkZWZpbmUgTlJfQkFEX01TUlMgMgorI2Vsc2UKKyNkZWZpbmUgTlJfQkFEX01TUlMgMAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0vbW11LmMgYi9kcml2ZXJzL2t2bS9tbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmM0MjZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9rdm0vbW11LmMKQEAgLTAsMCArMSwxNDU0IEBACisvKgorICogS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSBkcml2ZXIgZm9yIExpbnV4CisgKgorICogVGhpcyBtb2R1bGUgZW5hYmxlcyBtYWNoaW5lcyB3aXRoIEludGVsIFZULXggZXh0ZW5zaW9ucyB0byBydW4gdmlydHVhbAorICogbWFjaGluZXMgd2l0aG91dCBlbXVsYXRpb24gb3IgYmluYXJ5IHRyYW5zbGF0aW9uLgorICoKKyAqIE1NVSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFF1bXJhbmV0LCBJbmMuCisgKgorICogQXV0aG9yczoKKyAqICAgWWFuaXYgS2FtYXkgIDx5YW5pdkBxdW1yYW5ldC5jb20+CisgKiAgIEF2aSBLaXZpdHkgICA8YXZpQHF1bXJhbmV0LmNvbT4KKyAqCisgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIuICBTZWUKKyAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAidm14LmgiCisjaW5jbHVkZSAia3ZtLmgiCisKKyN1bmRlZiBNTVVfREVCVUcKKworI3VuZGVmIEFVRElUCisKKyNpZmRlZiBBVURJVAorc3RhdGljIHZvaWQga3ZtX21tdV9hdWRpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IGNoYXIgKm1zZyk7CisjZWxzZQorc3RhdGljIHZvaWQga3ZtX21tdV9hdWRpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IGNoYXIgKm1zZykge30KKyNlbmRpZgorCisjaWZkZWYgTU1VX0RFQlVHCisKKyNkZWZpbmUgcGdwcmludGsoeC4uLikgZG8geyBpZiAoZGJnKSBwcmludGsoeCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJtYXBfcHJpbnRrKHguLi4pIGRvIHsgaWYgKGRiZykgcHJpbnRrKHgpOyB9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIHBncHJpbnRrKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcm1hcF9wcmludGsoeC4uLikgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoTU1VX0RFQlVHKSB8fCBkZWZpbmVkKEFVRElUKQorc3RhdGljIGludCBkYmcgPSAxOworI2VuZGlmCisKKyNkZWZpbmUgQVNTRVJUKHgpCQkJCQkJCVwKKwlpZiAoISh4KSkgewkJCQkJCQlcCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImFzc2VydGlvbiBmYWlsZWQgJXM6JWQ6ICVzXG4iLAlcCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sICN4KTsJCQkJXAorCX0KKworI2RlZmluZSBQVDY0X1BUX0JJVFMgOQorI2RlZmluZSBQVDY0X0VOVF9QRVJfUEFHRSAoMSA8PCBQVDY0X1BUX0JJVFMpCisjZGVmaW5lIFBUMzJfUFRfQklUUyAxMAorI2RlZmluZSBQVDMyX0VOVF9QRVJfUEFHRSAoMSA8PCBQVDMyX1BUX0JJVFMpCisKKyNkZWZpbmUgUFRfV1JJVEFCTEVfU0hJRlQgMQorCisjZGVmaW5lIFBUX1BSRVNFTlRfTUFTSyAoMVVMTCA8PCAwKQorI2RlZmluZSBQVF9XUklUQUJMRV9NQVNLICgxVUxMIDw8IFBUX1dSSVRBQkxFX1NISUZUKQorI2RlZmluZSBQVF9VU0VSX01BU0sgKDFVTEwgPDwgMikKKyNkZWZpbmUgUFRfUFdUX01BU0sgKDFVTEwgPDwgMykKKyNkZWZpbmUgUFRfUENEX01BU0sgKDFVTEwgPDwgNCkKKyNkZWZpbmUgUFRfQUNDRVNTRURfTUFTSyAoMVVMTCA8PCA1KQorI2RlZmluZSBQVF9ESVJUWV9NQVNLICgxVUxMIDw8IDYpCisjZGVmaW5lIFBUX1BBR0VfU0laRV9NQVNLICgxVUxMIDw8IDcpCisjZGVmaW5lIFBUX1BBVF9NQVNLICgxVUxMIDw8IDcpCisjZGVmaW5lIFBUX0dMT0JBTF9NQVNLICgxVUxMIDw8IDgpCisjZGVmaW5lIFBUNjRfTlhfTUFTSyAoMVVMTCA8PCA2MykKKworI2RlZmluZSBQVF9QQVRfU0hJRlQgNworI2RlZmluZSBQVF9ESVJfUEFUX1NISUZUIDEyCisjZGVmaW5lIFBUX0RJUl9QQVRfTUFTSyAoMVVMTCA8PCBQVF9ESVJfUEFUX1NISUZUKQorCisjZGVmaW5lIFBUMzJfRElSX1BTRTM2X1NJWkUgNAorI2RlZmluZSBQVDMyX0RJUl9QU0UzNl9TSElGVCAxMworI2RlZmluZSBQVDMyX0RJUl9QU0UzNl9NQVNLICgoKDFVTEwgPDwgUFQzMl9ESVJfUFNFMzZfU0laRSkgLSAxKSA8PCBQVDMyX0RJUl9QU0UzNl9TSElGVCkKKworCisjZGVmaW5lIFBUMzJfUFRFX0NPUFlfTUFTSyBcCisJKFBUX1BSRVNFTlRfTUFTSyB8IFBUX0FDQ0VTU0VEX01BU0sgfCBQVF9ESVJUWV9NQVNLIHwgUFRfR0xPQkFMX01BU0spCisKKyNkZWZpbmUgUFQ2NF9QVEVfQ09QWV9NQVNLIChQVDY0X05YX01BU0sgfCBQVDMyX1BURV9DT1BZX01BU0spCisKKyNkZWZpbmUgUFRfRklSU1RfQVZBSUxfQklUU19TSElGVCA5CisjZGVmaW5lIFBUNjRfU0VDT05EX0FWQUlMX0JJVFNfU0hJRlQgNTIKKworI2RlZmluZSBQVF9TSEFET1dfUFNfTUFSSyAoMVVMTCA8PCBQVF9GSVJTVF9BVkFJTF9CSVRTX1NISUZUKQorI2RlZmluZSBQVF9TSEFET1dfSU9fTUFSSyAoMVVMTCA8PCBQVF9GSVJTVF9BVkFJTF9CSVRTX1NISUZUKQorCisjZGVmaW5lIFBUX1NIQURPV19XUklUQUJMRV9TSElGVCAoUFRfRklSU1RfQVZBSUxfQklUU19TSElGVCArIDEpCisjZGVmaW5lIFBUX1NIQURPV19XUklUQUJMRV9NQVNLICgxVUxMIDw8IFBUX1NIQURPV19XUklUQUJMRV9TSElGVCkKKworI2RlZmluZSBQVF9TSEFET1dfVVNFUl9TSElGVCAoUFRfU0hBRE9XX1dSSVRBQkxFX1NISUZUICsgMSkKKyNkZWZpbmUgUFRfU0hBRE9XX1VTRVJfTUFTSyAoMVVMTCA8PCAoUFRfU0hBRE9XX1VTRVJfU0hJRlQpKQorCisjZGVmaW5lIFBUX1NIQURPV19CSVRTX09GRlNFVCAoUFRfU0hBRE9XX1dSSVRBQkxFX1NISUZUIC0gUFRfV1JJVEFCTEVfU0hJRlQpCisKKyNkZWZpbmUgVkFMSURfUEFHRSh4KSAoKHgpICE9IElOVkFMSURfUEFHRSkKKworI2RlZmluZSBQVDY0X0xFVkVMX0JJVFMgOQorCisjZGVmaW5lIFBUNjRfTEVWRUxfU0hJRlQobGV2ZWwpIFwKKwkJKCBQQUdFX1NISUZUICsgKGxldmVsIC0gMSkgKiBQVDY0X0xFVkVMX0JJVFMgKQorCisjZGVmaW5lIFBUNjRfTEVWRUxfTUFTSyhsZXZlbCkgXAorCQkoKCgxVUxMIDw8IFBUNjRfTEVWRUxfQklUUykgLSAxKSA8PCBQVDY0X0xFVkVMX1NISUZUKGxldmVsKSkKKworI2RlZmluZSBQVDY0X0lOREVYKGFkZHJlc3MsIGxldmVsKVwKKwkoKChhZGRyZXNzKSA+PiBQVDY0X0xFVkVMX1NISUZUKGxldmVsKSkgJiAoKDEgPDwgUFQ2NF9MRVZFTF9CSVRTKSAtIDEpKQorCisKKyNkZWZpbmUgUFQzMl9MRVZFTF9CSVRTIDEwCisKKyNkZWZpbmUgUFQzMl9MRVZFTF9TSElGVChsZXZlbCkgXAorCQkoIFBBR0VfU0hJRlQgKyAobGV2ZWwgLSAxKSAqIFBUMzJfTEVWRUxfQklUUyApCisKKyNkZWZpbmUgUFQzMl9MRVZFTF9NQVNLKGxldmVsKSBcCisJCSgoKDFVTEwgPDwgUFQzMl9MRVZFTF9CSVRTKSAtIDEpIDw8IFBUMzJfTEVWRUxfU0hJRlQobGV2ZWwpKQorCisjZGVmaW5lIFBUMzJfSU5ERVgoYWRkcmVzcywgbGV2ZWwpXAorCSgoKGFkZHJlc3MpID4+IFBUMzJfTEVWRUxfU0hJRlQobGV2ZWwpKSAmICgoMSA8PCBQVDMyX0xFVkVMX0JJVFMpIC0gMSkpCisKKworI2RlZmluZSBQVDY0X0JBU0VfQUREUl9NQVNLICgoKDFVTEwgPDwgNTIpIC0gMSkgJiBQQUdFX01BU0spCisjZGVmaW5lIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLIFwKKwkoUFQ2NF9CQVNFX0FERFJfTUFTSyAmIH4oKDFVTEwgPDwgKFBBR0VfU0hJRlQgKyBQVDY0X0xFVkVMX0JJVFMpKSAtIDEpKQorCisjZGVmaW5lIFBUMzJfQkFTRV9BRERSX01BU0sgUEFHRV9NQVNLCisjZGVmaW5lIFBUMzJfRElSX0JBU0VfQUREUl9NQVNLIFwKKwkoUEFHRV9NQVNLICYgfigoMVVMTCA8PCAoUEFHRV9TSElGVCArIFBUMzJfTEVWRUxfQklUUykpIC0gMSkpCisKKworI2RlZmluZSBQRkVSUl9QUkVTRU5UX01BU0sgKDFVIDw8IDApCisjZGVmaW5lIFBGRVJSX1dSSVRFX01BU0sgKDFVIDw8IDEpCisjZGVmaW5lIFBGRVJSX1VTRVJfTUFTSyAoMVUgPDwgMikKKyNkZWZpbmUgUEZFUlJfRkVUQ0hfTUFTSyAoMVUgPDwgNCkKKworI2RlZmluZSBQVDY0X1JPT1RfTEVWRUwgNAorI2RlZmluZSBQVDMyX1JPT1RfTEVWRUwgMgorI2RlZmluZSBQVDMyRV9ST09UX0xFVkVMIDMKKworI2RlZmluZSBQVF9ESVJFQ1RPUllfTEVWRUwgMgorI2RlZmluZSBQVF9QQUdFX1RBQkxFX0xFVkVMIDEKKworI2RlZmluZSBSTUFQX0VYVCA0CisKK3N0cnVjdCBrdm1fcm1hcF9kZXNjIHsKKwl1NjQgKnNoYWRvd19wdGVzW1JNQVBfRVhUXTsKKwlzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqbW9yZTsKK307CisKK3N0YXRpYyBpbnQgaXNfd3JpdGVfcHJvdGVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPmNyMCAmIENSMF9XUF9NQVNLOworfQorCitzdGF0aWMgaW50IGlzX2NwdWlkX1BTRTM2KHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaXNfbngoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiB2Y3B1LT5zaGFkb3dfZWZlciAmIEVGRVJfTlg7Cit9CisKK3N0YXRpYyBpbnQgaXNfcHJlc2VudF9wdGUodW5zaWduZWQgbG9uZyBwdGUpCit7CisJcmV0dXJuIHB0ZSAmIFBUX1BSRVNFTlRfTUFTSzsKK30KKworc3RhdGljIGludCBpc193cml0ZWJsZV9wdGUodW5zaWduZWQgbG9uZyBwdGUpCit7CisJcmV0dXJuIHB0ZSAmIFBUX1dSSVRBQkxFX01BU0s7Cit9CisKK3N0YXRpYyBpbnQgaXNfaW9fcHRlKHVuc2lnbmVkIGxvbmcgcHRlKQoreworCXJldHVybiBwdGUgJiBQVF9TSEFET1dfSU9fTUFSSzsKK30KKworc3RhdGljIGludCBpc19ybWFwX3B0ZSh1NjQgcHRlKQoreworCXJldHVybiAocHRlICYgKFBUX1dSSVRBQkxFX01BU0sgfCBQVF9QUkVTRU5UX01BU0spKQorCQk9PSAoUFRfV1JJVEFCTEVfTUFTSyB8IFBUX1BSRVNFTlRfTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZShzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlLAorCQkJCSAgc2l6ZV90IG9ianNpemUsIGludCBtaW4pCit7CisJdm9pZCAqb2JqOworCisJaWYgKGNhY2hlLT5ub2JqcyA+PSBtaW4pCisJCXJldHVybiAwOworCXdoaWxlIChjYWNoZS0+bm9ianMgPCBBUlJBWV9TSVpFKGNhY2hlLT5vYmplY3RzKSkgeworCQlvYmogPSBremFsbG9jKG9ianNpemUsIEdGUF9OT1dBSVQpOworCQlpZiAoIW9iaikKKwkJCXJldHVybiAtRU5PTUVNOworCQljYWNoZS0+b2JqZWN0c1tjYWNoZS0+bm9ianMrK10gPSBvYmo7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtbXVfZnJlZV9tZW1vcnlfY2FjaGUoc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICptYykKK3sKKwl3aGlsZSAobWMtPm5vYmpzKQorCQlrZnJlZShtYy0+b2JqZWN0c1stLW1jLT5ub2Jqc10pOworfQorCitzdGF0aWMgaW50IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgcjsKKworCXIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlKCZ2Y3B1LT5tbXVfcHRlX2NoYWluX2NhY2hlLAorCQkJCSAgIHNpemVvZihzdHJ1Y3Qga3ZtX3B0ZV9jaGFpbiksIDQpOworCWlmIChyKQorCQlnb3RvIG91dDsKKwlyID0gbW11X3RvcHVwX21lbW9yeV9jYWNoZSgmdmNwdS0+bW11X3JtYXBfZGVzY19jYWNoZSwKKwkJCQkgICBzaXplb2Yoc3RydWN0IGt2bV9ybWFwX2Rlc2MpLCAxKTsKK291dDoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgbW11X2ZyZWVfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJbW11X2ZyZWVfbWVtb3J5X2NhY2hlKCZ2Y3B1LT5tbXVfcHRlX2NoYWluX2NhY2hlKTsKKwltbXVfZnJlZV9tZW1vcnlfY2FjaGUoJnZjcHUtPm1tdV9ybWFwX2Rlc2NfY2FjaGUpOworfQorCitzdGF0aWMgdm9pZCAqbW11X21lbW9yeV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKm1jLAorCQkJCSAgICBzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICpwOworCisJQlVHX09OKCFtYy0+bm9ianMpOworCXAgPSBtYy0+b2JqZWN0c1stLW1jLT5ub2Jqc107CisJbWVtc2V0KHAsIDAsIHNpemUpOworCXJldHVybiBwOworfQorCitzdGF0aWMgdm9pZCBtbXVfbWVtb3J5X2NhY2hlX2ZyZWUoc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICptYywgdm9pZCAqb2JqKQoreworCWlmIChtYy0+bm9ianMgPCBLVk1fTlJfTUVNX09CSlMpCisJCW1jLT5vYmplY3RzW21jLT5ub2JqcysrXSA9IG9iajsKKwllbHNlCisJCWtmcmVlKG9iaik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga3ZtX3B0ZV9jaGFpbiAqbW11X2FsbG9jX3B0ZV9jaGFpbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIG1tdV9tZW1vcnlfY2FjaGVfYWxsb2MoJnZjcHUtPm1tdV9wdGVfY2hhaW5fY2FjaGUsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBrdm1fcHRlX2NoYWluKSk7Cit9CisKK3N0YXRpYyB2b2lkIG1tdV9mcmVlX3B0ZV9jaGFpbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICAgc3RydWN0IGt2bV9wdGVfY2hhaW4gKnBjKQoreworCW1tdV9tZW1vcnlfY2FjaGVfZnJlZSgmdmNwdS0+bW11X3B0ZV9jaGFpbl9jYWNoZSwgcGMpOworfQorCitzdGF0aWMgc3RydWN0IGt2bV9ybWFwX2Rlc2MgKm1tdV9hbGxvY19ybWFwX2Rlc2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBtbXVfbWVtb3J5X2NhY2hlX2FsbG9jKCZ2Y3B1LT5tbXVfcm1hcF9kZXNjX2NhY2hlLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qga3ZtX3JtYXBfZGVzYykpOworfQorCitzdGF0aWMgdm9pZCBtbXVfZnJlZV9ybWFwX2Rlc2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICAgIHN0cnVjdCBrdm1fcm1hcF9kZXNjICpyZCkKK3sKKwltbXVfbWVtb3J5X2NhY2hlX2ZyZWUoJnZjcHUtPm1tdV9ybWFwX2Rlc2NfY2FjaGUsIHJkKTsKK30KKworLyoKKyAqIFJldmVyc2UgbWFwcGluZyBkYXRhIHN0cnVjdHVyZXM6CisgKgorICogSWYgcGFnZS0+cHJpdmF0ZSBiaXQgemVybyBpcyB6ZXJvLCB0aGVuIHBhZ2UtPnByaXZhdGUgcG9pbnRzIHRvIHRoZQorICogc2hhZG93IHBhZ2UgdGFibGUgZW50cnkgdGhhdCBwb2ludHMgdG8gcGFnZV9hZGRyZXNzKHBhZ2UpLgorICoKKyAqIElmIHBhZ2UtPnByaXZhdGUgYml0IHplcm8gaXMgb25lLCAodGhlbiBwYWdlLT5wcml2YXRlICYgfjEpIHBvaW50cworICogdG8gYSBzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyBjb250YWluaW5nIG1vcmUgbWFwcGluZ3MuCisgKi8KK3N0YXRpYyB2b2lkIHJtYXBfYWRkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpzcHRlKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBrdm1fcm1hcF9kZXNjICpkZXNjOworCWludCBpOworCisJaWYgKCFpc19ybWFwX3B0ZSgqc3B0ZSkpCisJCXJldHVybjsKKwlwYWdlID0gcGZuX3RvX3BhZ2UoKCpzcHRlICYgUFQ2NF9CQVNFX0FERFJfTUFTSykgPj4gUEFHRV9TSElGVCk7CisJaWYgKCFwYWdlLT5wcml2YXRlKSB7CisJCXJtYXBfcHJpbnRrKCJybWFwX2FkZDogJXAgJWxseCAwLT4xXG4iLCBzcHRlLCAqc3B0ZSk7CisJCXBhZ2UtPnByaXZhdGUgPSAodW5zaWduZWQgbG9uZylzcHRlOworCX0gZWxzZSBpZiAoIShwYWdlLT5wcml2YXRlICYgMSkpIHsKKwkJcm1hcF9wcmludGsoInJtYXBfYWRkOiAlcCAlbGx4IDEtPm1hbnlcbiIsIHNwdGUsICpzcHRlKTsKKwkJZGVzYyA9IG1tdV9hbGxvY19ybWFwX2Rlc2ModmNwdSk7CisJCWRlc2MtPnNoYWRvd19wdGVzWzBdID0gKHU2NCAqKXBhZ2UtPnByaXZhdGU7CisJCWRlc2MtPnNoYWRvd19wdGVzWzFdID0gc3B0ZTsKKwkJcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKWRlc2MgfCAxOworCX0gZWxzZSB7CisJCXJtYXBfcHJpbnRrKCJybWFwX2FkZDogJXAgJWxseCBtYW55LT5tYW55XG4iLCBzcHRlLCAqc3B0ZSk7CisJCWRlc2MgPSAoc3RydWN0IGt2bV9ybWFwX2Rlc2MgKikocGFnZS0+cHJpdmF0ZSAmIH4xdWwpOworCQl3aGlsZSAoZGVzYy0+c2hhZG93X3B0ZXNbUk1BUF9FWFQtMV0gJiYgZGVzYy0+bW9yZSkKKwkJCWRlc2MgPSBkZXNjLT5tb3JlOworCQlpZiAoZGVzYy0+c2hhZG93X3B0ZXNbUk1BUF9FWFQtMV0pIHsKKwkJCWRlc2MtPm1vcmUgPSBtbXVfYWxsb2Nfcm1hcF9kZXNjKHZjcHUpOworCQkJZGVzYyA9IGRlc2MtPm1vcmU7CisJCX0KKwkJZm9yIChpID0gMDsgZGVzYy0+c2hhZG93X3B0ZXNbaV07ICsraSkKKwkJCTsKKwkJZGVzYy0+c2hhZG93X3B0ZXNbaV0gPSBzcHRlOworCX0KK30KKworc3RhdGljIHZvaWQgcm1hcF9kZXNjX3JlbW92ZV9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgc3RydWN0IGt2bV9ybWFwX2Rlc2MgKmRlc2MsCisJCQkJICAgaW50IGksCisJCQkJICAgc3RydWN0IGt2bV9ybWFwX2Rlc2MgKnByZXZfZGVzYykKK3sKKwlpbnQgajsKKworCWZvciAoaiA9IFJNQVBfRVhUIC0gMTsgIWRlc2MtPnNoYWRvd19wdGVzW2pdICYmIGogPiBpOyAtLWopCisJCTsKKwlkZXNjLT5zaGFkb3dfcHRlc1tpXSA9IGRlc2MtPnNoYWRvd19wdGVzW2pdOworCWRlc2MtPnNoYWRvd19wdGVzW2pdID0gMDsKKwlpZiAoaiAhPSAwKQorCQlyZXR1cm47CisJaWYgKCFwcmV2X2Rlc2MgJiYgIWRlc2MtPm1vcmUpCisJCXBhZ2UtPnByaXZhdGUgPSAodW5zaWduZWQgbG9uZylkZXNjLT5zaGFkb3dfcHRlc1swXTsKKwllbHNlCisJCWlmIChwcmV2X2Rlc2MpCisJCQlwcmV2X2Rlc2MtPm1vcmUgPSBkZXNjLT5tb3JlOworCQllbHNlCisJCQlwYWdlLT5wcml2YXRlID0gKHVuc2lnbmVkIGxvbmcpZGVzYy0+bW9yZSB8IDE7CisJbW11X2ZyZWVfcm1hcF9kZXNjKHZjcHUsIGRlc2MpOworfQorCitzdGF0aWMgdm9pZCBybWFwX3JlbW92ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqZGVzYzsKKwlzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqcHJldl9kZXNjOworCWludCBpOworCisJaWYgKCFpc19ybWFwX3B0ZSgqc3B0ZSkpCisJCXJldHVybjsKKwlwYWdlID0gcGZuX3RvX3BhZ2UoKCpzcHRlICYgUFQ2NF9CQVNFX0FERFJfTUFTSykgPj4gUEFHRV9TSElGVCk7CisJaWYgKCFwYWdlLT5wcml2YXRlKSB7CisJCXByaW50ayhLRVJOX0VSUiAicm1hcF9yZW1vdmU6ICVwICVsbHggMC0+QlVHXG4iLCBzcHRlLCAqc3B0ZSk7CisJCUJVRygpOworCX0gZWxzZSBpZiAoIShwYWdlLT5wcml2YXRlICYgMSkpIHsKKwkJcm1hcF9wcmludGsoInJtYXBfcmVtb3ZlOiAgJXAgJWxseCAxLT4wXG4iLCBzcHRlLCAqc3B0ZSk7CisJCWlmICgodTY0ICopcGFnZS0+cHJpdmF0ZSAhPSBzcHRlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInJtYXBfcmVtb3ZlOiAgJXAgJWxseCAxLT5CVUdcbiIsCisJCQkgICAgICAgc3B0ZSwgKnNwdGUpOworCQkJQlVHKCk7CisJCX0KKwkJcGFnZS0+cHJpdmF0ZSA9IDA7CisJfSBlbHNlIHsKKwkJcm1hcF9wcmludGsoInJtYXBfcmVtb3ZlOiAgJXAgJWxseCBtYW55LT5tYW55XG4iLCBzcHRlLCAqc3B0ZSk7CisJCWRlc2MgPSAoc3RydWN0IGt2bV9ybWFwX2Rlc2MgKikocGFnZS0+cHJpdmF0ZSAmIH4xdWwpOworCQlwcmV2X2Rlc2MgPSBOVUxMOworCQl3aGlsZSAoZGVzYykgeworCQkJZm9yIChpID0gMDsgaSA8IFJNQVBfRVhUICYmIGRlc2MtPnNoYWRvd19wdGVzW2ldOyArK2kpCisJCQkJaWYgKGRlc2MtPnNoYWRvd19wdGVzW2ldID09IHNwdGUpIHsKKwkJCQkJcm1hcF9kZXNjX3JlbW92ZV9lbnRyeSh2Y3B1LCBwYWdlLAorCQkJCQkJCSAgICAgICBkZXNjLCBpLAorCQkJCQkJCSAgICAgICBwcmV2X2Rlc2MpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJcHJldl9kZXNjID0gZGVzYzsKKwkJCWRlc2MgPSBkZXNjLT5tb3JlOworCQl9CisJCUJVRygpOworCX0KK30KKworc3RhdGljIHZvaWQgcm1hcF93cml0ZV9wcm90ZWN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGdmbikKK3sKKwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LT5rdm07CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqZGVzYzsKKwl1NjQgKnNwdGU7CisKKwlzbG90ID0gZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pOworCUJVR19PTighc2xvdCk7CisJcGFnZSA9IGdmbl90b19wYWdlKHNsb3QsIGdmbik7CisKKwl3aGlsZSAocGFnZS0+cHJpdmF0ZSkgeworCQlpZiAoIShwYWdlLT5wcml2YXRlICYgMSkpCisJCQlzcHRlID0gKHU2NCAqKXBhZ2UtPnByaXZhdGU7CisJCWVsc2UgeworCQkJZGVzYyA9IChzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqKShwYWdlLT5wcml2YXRlICYgfjF1bCk7CisJCQlzcHRlID0gZGVzYy0+c2hhZG93X3B0ZXNbMF07CisJCX0KKwkJQlVHX09OKCFzcHRlKTsKKwkJQlVHX09OKCgqc3B0ZSAmIFBUNjRfQkFTRV9BRERSX01BU0spICE9CisJCSAgICAgICBwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKTsKKwkJQlVHX09OKCEoKnNwdGUgJiBQVF9QUkVTRU5UX01BU0spKTsKKwkJQlVHX09OKCEoKnNwdGUgJiBQVF9XUklUQUJMRV9NQVNLKSk7CisJCXJtYXBfcHJpbnRrKCJybWFwX3dyaXRlX3Byb3RlY3Q6IHNwdGUgJXAgJWxseFxuIiwgc3B0ZSwgKnNwdGUpOworCQlybWFwX3JlbW92ZSh2Y3B1LCBzcHRlKTsKKwkJa3ZtX2FyY2hfb3BzLT50bGJfZmx1c2godmNwdSk7CisJCSpzcHRlICY9IH4odTY0KVBUX1dSSVRBQkxFX01BU0s7CisJfQorfQorCitzdGF0aWMgaW50IGlzX2VtcHR5X3NoYWRvd19wYWdlKGhwYV90IHBhZ2VfaHBhKQoreworCXU2NCAqcG9zOworCXU2NCAqZW5kOworCisJZm9yIChwb3MgPSBfX3ZhKHBhZ2VfaHBhKSwgZW5kID0gcG9zICsgUEFHRV9TSVpFIC8gc2l6ZW9mKHU2NCk7CisJCSAgICAgIHBvcyAhPSBlbmQ7IHBvcysrKQorCQlpZiAoKnBvcyAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcCAlbGx4XG4iLCBfX0ZVTkNUSU9OX18sCisJCQkgICAgICAgcG9zLCAqcG9zKTsKKwkJCXJldHVybiAwOworCQl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9tbXVfZnJlZV9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3QgcGFnZV9ocGEpCit7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZV9oZWFkID0gcGFnZV9oZWFkZXIocGFnZV9ocGEpOworCisJQVNTRVJUKGlzX2VtcHR5X3NoYWRvd19wYWdlKHBhZ2VfaHBhKSk7CisJbGlzdF9kZWwoJnBhZ2VfaGVhZC0+bGluayk7CisJcGFnZV9oZWFkLT5wYWdlX2hwYSA9IHBhZ2VfaHBhOworCWxpc3RfYWRkKCZwYWdlX2hlYWQtPmxpbmssICZ2Y3B1LT5mcmVlX3BhZ2VzKTsKKwkrK3ZjcHUtPmt2bS0+bl9mcmVlX21tdV9wYWdlczsKK30KKworc3RhdGljIHVuc2lnbmVkIGt2bV9wYWdlX3RhYmxlX2hhc2hmbihnZm5fdCBnZm4pCit7CisJcmV0dXJuIGdmbjsKK30KKworc3RhdGljIHN0cnVjdCBrdm1fbW11X3BhZ2UgKmt2bV9tbXVfYWxsb2NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCSAgICAgICB1NjQgKnBhcmVudF9wdGUpCit7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZTsKKworCWlmIChsaXN0X2VtcHR5KCZ2Y3B1LT5mcmVlX3BhZ2VzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYWdlID0gbGlzdF9lbnRyeSh2Y3B1LT5mcmVlX3BhZ2VzLm5leHQsIHN0cnVjdCBrdm1fbW11X3BhZ2UsIGxpbmspOworCWxpc3RfZGVsKCZwYWdlLT5saW5rKTsKKwlsaXN0X2FkZCgmcGFnZS0+bGluaywgJnZjcHUtPmt2bS0+YWN0aXZlX21tdV9wYWdlcyk7CisJQVNTRVJUKGlzX2VtcHR5X3NoYWRvd19wYWdlKHBhZ2UtPnBhZ2VfaHBhKSk7CisJcGFnZS0+c2xvdF9iaXRtYXAgPSAwOworCXBhZ2UtPmdsb2JhbCA9IDE7CisJcGFnZS0+bXVsdGltYXBwZWQgPSAwOworCXBhZ2UtPnBhcmVudF9wdGUgPSBwYXJlbnRfcHRlOworCS0tdmNwdS0+a3ZtLT5uX2ZyZWVfbW11X3BhZ2VzOworCXJldHVybiBwYWdlOworfQorCitzdGF0aWMgdm9pZCBtbXVfcGFnZV9hZGRfcGFyZW50X3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2UsIHU2NCAqcGFyZW50X3B0ZSkKK3sKKwlzdHJ1Y3Qga3ZtX3B0ZV9jaGFpbiAqcHRlX2NoYWluOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCWludCBpOworCisJaWYgKCFwYXJlbnRfcHRlKQorCQlyZXR1cm47CisJaWYgKCFwYWdlLT5tdWx0aW1hcHBlZCkgeworCQl1NjQgKm9sZCA9IHBhZ2UtPnBhcmVudF9wdGU7CisKKwkJaWYgKCFvbGQpIHsKKwkJCXBhZ2UtPnBhcmVudF9wdGUgPSBwYXJlbnRfcHRlOworCQkJcmV0dXJuOworCQl9CisJCXBhZ2UtPm11bHRpbWFwcGVkID0gMTsKKwkJcHRlX2NoYWluID0gbW11X2FsbG9jX3B0ZV9jaGFpbih2Y3B1KTsKKwkJSU5JVF9ITElTVF9IRUFEKCZwYWdlLT5wYXJlbnRfcHRlcyk7CisJCWhsaXN0X2FkZF9oZWFkKCZwdGVfY2hhaW4tPmxpbmssICZwYWdlLT5wYXJlbnRfcHRlcyk7CisJCXB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbMF0gPSBvbGQ7CisJfQorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ZV9jaGFpbiwgbm9kZSwgJnBhZ2UtPnBhcmVudF9wdGVzLCBsaW5rKSB7CisJCWlmIChwdGVfY2hhaW4tPnBhcmVudF9wdGVzW05SX1BURV9DSEFJTl9FTlRSSUVTLTFdKQorCQkJY29udGludWU7CisJCWZvciAoaSA9IDA7IGkgPCBOUl9QVEVfQ0hBSU5fRU5UUklFUzsgKytpKQorCQkJaWYgKCFwdGVfY2hhaW4tPnBhcmVudF9wdGVzW2ldKSB7CisJCQkJcHRlX2NoYWluLT5wYXJlbnRfcHRlc1tpXSA9IHBhcmVudF9wdGU7CisJCQkJcmV0dXJuOworCQkJfQorCX0KKwlwdGVfY2hhaW4gPSBtbXVfYWxsb2NfcHRlX2NoYWluKHZjcHUpOworCUJVR19PTighcHRlX2NoYWluKTsKKwlobGlzdF9hZGRfaGVhZCgmcHRlX2NoYWluLT5saW5rLCAmcGFnZS0+cGFyZW50X3B0ZXMpOworCXB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbMF0gPSBwYXJlbnRfcHRlOworfQorCitzdGF0aWMgdm9pZCBtbXVfcGFnZV9yZW1vdmVfcGFyZW50X3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2UsCisJCQkJICAgICAgIHU2NCAqcGFyZW50X3B0ZSkKK3sKKwlzdHJ1Y3Qga3ZtX3B0ZV9jaGFpbiAqcHRlX2NoYWluOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCWludCBpOworCisJaWYgKCFwYWdlLT5tdWx0aW1hcHBlZCkgeworCQlCVUdfT04ocGFnZS0+cGFyZW50X3B0ZSAhPSBwYXJlbnRfcHRlKTsKKwkJcGFnZS0+cGFyZW50X3B0ZSA9IE5VTEw7CisJCXJldHVybjsKKwl9CisJaGxpc3RfZm9yX2VhY2hfZW50cnkocHRlX2NoYWluLCBub2RlLCAmcGFnZS0+cGFyZW50X3B0ZXMsIGxpbmspCisJCWZvciAoaSA9IDA7IGkgPCBOUl9QVEVfQ0hBSU5fRU5UUklFUzsgKytpKSB7CisJCQlpZiAoIXB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pCisJCQkJYnJlYWs7CisJCQlpZiAocHRlX2NoYWluLT5wYXJlbnRfcHRlc1tpXSAhPSBwYXJlbnRfcHRlKQorCQkJCWNvbnRpbnVlOworCQkJd2hpbGUgKGkgKyAxIDwgTlJfUFRFX0NIQUlOX0VOVFJJRVMKKwkJCQkmJiBwdGVfY2hhaW4tPnBhcmVudF9wdGVzW2kgKyAxXSkgeworCQkJCXB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0KKwkJCQkJPSBwdGVfY2hhaW4tPnBhcmVudF9wdGVzW2kgKyAxXTsKKwkJCQkrK2k7CisJCQl9CisJCQlwdGVfY2hhaW4tPnBhcmVudF9wdGVzW2ldID0gTlVMTDsKKwkJCWlmIChpID09IDApIHsKKwkJCQlobGlzdF9kZWwoJnB0ZV9jaGFpbi0+bGluayk7CisJCQkJbW11X2ZyZWVfcHRlX2NoYWluKHZjcHUsIHB0ZV9jaGFpbik7CisJCQkJaWYgKGhsaXN0X2VtcHR5KCZwYWdlLT5wYXJlbnRfcHRlcykpIHsKKwkJCQkJcGFnZS0+bXVsdGltYXBwZWQgPSAwOworCQkJCQlwYWdlLT5wYXJlbnRfcHRlID0gTlVMTDsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwlCVUcoKTsKK30KKworc3RhdGljIHN0cnVjdCBrdm1fbW11X3BhZ2UgKmt2bV9tbXVfbG9va3VwX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQkJZ2ZuX3QgZ2ZuKQoreworCXVuc2lnbmVkIGluZGV4OworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKworCXBncHJpbnRrKCIlczogbG9va2luZyBmb3IgZ2ZuICVseFxuIiwgX19GVU5DVElPTl9fLCBnZm4pOworCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbikgJSBLVk1fTlVNX01NVV9QQUdFUzsKKwlidWNrZXQgPSAmdmNwdS0+a3ZtLT5tbXVfcGFnZV9oYXNoW2luZGV4XTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCBub2RlLCBidWNrZXQsIGhhc2hfbGluaykKKwkJaWYgKHBhZ2UtPmdmbiA9PSBnZm4gJiYgIXBhZ2UtPnJvbGUubWV0YXBoeXNpY2FsKSB7CisJCQlwZ3ByaW50aygiJXM6IGZvdW5kIHJvbGUgJXhcbiIsCisJCQkJIF9fRlVOQ1RJT05fXywgcGFnZS0+cm9sZS53b3JkKTsKKwkJCXJldHVybiBwYWdlOworCQl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga3ZtX21tdV9wYWdlICprdm1fbW11X2dldF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJICAgICBnZm5fdCBnZm4sCisJCQkJCSAgICAgZ3ZhX3QgZ2FkZHIsCisJCQkJCSAgICAgdW5zaWduZWQgbGV2ZWwsCisJCQkJCSAgICAgaW50IG1ldGFwaHlzaWNhbCwKKwkJCQkJICAgICB1NjQgKnBhcmVudF9wdGUpCit7CisJdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgcm9sZTsKKwl1bnNpZ25lZCBpbmRleDsKKwl1bnNpZ25lZCBxdWFkcmFudDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2U7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisKKwlyb2xlLndvcmQgPSAwOworCXJvbGUuZ2xldmVscyA9IHZjcHUtPm1tdS5yb290X2xldmVsOworCXJvbGUubGV2ZWwgPSBsZXZlbDsKKwlyb2xlLm1ldGFwaHlzaWNhbCA9IG1ldGFwaHlzaWNhbDsKKwlpZiAodmNwdS0+bW11LnJvb3RfbGV2ZWwgPD0gUFQzMl9ST09UX0xFVkVMKSB7CisJCXF1YWRyYW50ID0gZ2FkZHIgPj4gKFBBR0VfU0hJRlQgKyAoUFQ2NF9QVF9CSVRTICogbGV2ZWwpKTsKKwkJcXVhZHJhbnQgJj0gKDEgPDwgKChQVDMyX1BUX0JJVFMgLSBQVDY0X1BUX0JJVFMpICogbGV2ZWwpKSAtIDE7CisJCXJvbGUucXVhZHJhbnQgPSBxdWFkcmFudDsKKwl9CisJcGdwcmludGsoIiVzOiBsb29raW5nIGdmbiAlbHggcm9sZSAleFxuIiwgX19GVU5DVElPTl9fLAorCQkgZ2ZuLCByb2xlLndvcmQpOworCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbikgJSBLVk1fTlVNX01NVV9QQUdFUzsKKwlidWNrZXQgPSAmdmNwdS0+a3ZtLT5tbXVfcGFnZV9oYXNoW2luZGV4XTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCBub2RlLCBidWNrZXQsIGhhc2hfbGluaykKKwkJaWYgKHBhZ2UtPmdmbiA9PSBnZm4gJiYgcGFnZS0+cm9sZS53b3JkID09IHJvbGUud29yZCkgeworCQkJbW11X3BhZ2VfYWRkX3BhcmVudF9wdGUodmNwdSwgcGFnZSwgcGFyZW50X3B0ZSk7CisJCQlwZ3ByaW50aygiJXM6IGZvdW5kXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIHBhZ2U7CisJCX0KKwlwYWdlID0ga3ZtX21tdV9hbGxvY19wYWdlKHZjcHUsIHBhcmVudF9wdGUpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIHBhZ2U7CisJcGdwcmludGsoIiVzOiBhZGRpbmcgZ2ZuICVseCByb2xlICV4XG4iLCBfX0ZVTkNUSU9OX18sIGdmbiwgcm9sZS53b3JkKTsKKwlwYWdlLT5nZm4gPSBnZm47CisJcGFnZS0+cm9sZSA9IHJvbGU7CisJaGxpc3RfYWRkX2hlYWQoJnBhZ2UtPmhhc2hfbGluaywgYnVja2V0KTsKKwlpZiAoIW1ldGFwaHlzaWNhbCkKKwkJcm1hcF93cml0ZV9wcm90ZWN0KHZjcHUsIGdmbik7CisJcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9tbXVfcGFnZV91bmxpbmtfY2hpbGRyZW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQkgc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZSkKK3sKKwl1bnNpZ25lZCBpOworCXU2NCAqcHQ7CisJdTY0IGVudDsKKworCXB0ID0gX192YShwYWdlLT5wYWdlX2hwYSk7CisKKwlpZiAocGFnZS0+cm9sZS5sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgKytpKSB7CisJCQlpZiAocHRbaV0gJiBQVF9QUkVTRU5UX01BU0spCisJCQkJcm1hcF9yZW1vdmUodmNwdSwgJnB0W2ldKTsKKwkJCXB0W2ldID0gMDsKKwkJfQorCQlrdm1fYXJjaF9vcHMtPnRsYl9mbHVzaCh2Y3B1KTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgKytpKSB7CisJCWVudCA9IHB0W2ldOworCisJCXB0W2ldID0gMDsKKwkJaWYgKCEoZW50ICYgUFRfUFJFU0VOVF9NQVNLKSkKKwkJCWNvbnRpbnVlOworCQllbnQgJj0gUFQ2NF9CQVNFX0FERFJfTUFTSzsKKwkJbW11X3BhZ2VfcmVtb3ZlX3BhcmVudF9wdGUodmNwdSwgcGFnZV9oZWFkZXIoZW50KSwgJnB0W2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9tbXVfcHV0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlLAorCQkJICAgICB1NjQgKnBhcmVudF9wdGUpCit7CisJbW11X3BhZ2VfcmVtb3ZlX3BhcmVudF9wdGUodmNwdSwgcGFnZSwgcGFyZW50X3B0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9tbXVfemFwX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlKQoreworCXU2NCAqcGFyZW50X3B0ZTsKKworCXdoaWxlIChwYWdlLT5tdWx0aW1hcHBlZCB8fCBwYWdlLT5wYXJlbnRfcHRlKSB7CisJCWlmICghcGFnZS0+bXVsdGltYXBwZWQpCisJCQlwYXJlbnRfcHRlID0gcGFnZS0+cGFyZW50X3B0ZTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3Qga3ZtX3B0ZV9jaGFpbiAqY2hhaW47CisKKwkJCWNoYWluID0gY29udGFpbmVyX29mKHBhZ2UtPnBhcmVudF9wdGVzLmZpcnN0LAorCQkJCQkgICAgIHN0cnVjdCBrdm1fcHRlX2NoYWluLCBsaW5rKTsKKwkJCXBhcmVudF9wdGUgPSBjaGFpbi0+cGFyZW50X3B0ZXNbMF07CisJCX0KKwkJQlVHX09OKCFwYXJlbnRfcHRlKTsKKwkJa3ZtX21tdV9wdXRfcGFnZSh2Y3B1LCBwYWdlLCBwYXJlbnRfcHRlKTsKKwkJKnBhcmVudF9wdGUgPSAwOworCX0KKwlrdm1fbW11X3BhZ2VfdW5saW5rX2NoaWxkcmVuKHZjcHUsIHBhZ2UpOworCWlmICghcGFnZS0+cm9vdF9jb3VudCkgeworCQlobGlzdF9kZWwoJnBhZ2UtPmhhc2hfbGluayk7CisJCWt2bV9tbXVfZnJlZV9wYWdlKHZjcHUsIHBhZ2UtPnBhZ2VfaHBhKTsKKwl9IGVsc2UgeworCQlsaXN0X2RlbCgmcGFnZS0+bGluayk7CisJCWxpc3RfYWRkKCZwYWdlLT5saW5rLCAmdmNwdS0+a3ZtLT5hY3RpdmVfbW11X3BhZ2VzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQga3ZtX21tdV91bnByb3RlY3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbikKK3sKKwl1bnNpZ25lZCBpbmRleDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2U7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpuOworCWludCByOworCisJcGdwcmludGsoIiVzOiBsb29raW5nIGZvciBnZm4gJWx4XG4iLCBfX0ZVTkNUSU9OX18sIGdmbik7CisJciA9IDA7CisJaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKSAlIEtWTV9OVU1fTU1VX1BBR0VTOworCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPm1tdV9wYWdlX2hhc2hbaW5kZXhdOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgbm9kZSwgbiwgYnVja2V0LCBoYXNoX2xpbmspCisJCWlmIChwYWdlLT5nZm4gPT0gZ2ZuICYmICFwYWdlLT5yb2xlLm1ldGFwaHlzaWNhbCkgeworCQkJcGdwcmludGsoIiVzOiBnZm4gJWx4IHJvbGUgJXhcbiIsIF9fRlVOQ1RJT05fXywgZ2ZuLAorCQkJCSBwYWdlLT5yb2xlLndvcmQpOworCQkJa3ZtX21tdV96YXBfcGFnZSh2Y3B1LCBwYWdlKTsKKwkJCXIgPSAxOworCQl9CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIHBhZ2VfaGVhZGVyX3VwZGF0ZV9zbG90KHN0cnVjdCBrdm0gKmt2bSwgdm9pZCAqcHRlLCBncGFfdCBncGEpCit7CisJaW50IHNsb3QgPSBtZW1zbG90X2lkKGt2bSwgZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBncGEgPj4gUEFHRV9TSElGVCkpOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2VfaGVhZCA9IHBhZ2VfaGVhZGVyKF9fcGEocHRlKSk7CisKKwlfX3NldF9iaXQoc2xvdCwgJnBhZ2VfaGVhZC0+c2xvdF9iaXRtYXApOworfQorCitocGFfdCBzYWZlX2dwYV90b19ocGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEpCit7CisJaHBhX3QgaHBhID0gZ3BhX3RvX2hwYSh2Y3B1LCBncGEpOworCisJcmV0dXJuIGlzX2Vycm9yX2hwYShocGEpID8gYmFkX3BhZ2VfYWRkcmVzcyB8IChncGEgJiB+UEFHRV9NQVNLKTogaHBhOworfQorCitocGFfdCBncGFfdG9faHBhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhKQoreworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlBU1NFUlQoKGdwYSAmIEhQQV9FUlJfTUFTSykgPT0gMCk7CisJc2xvdCA9IGdmbl90b19tZW1zbG90KHZjcHUtPmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpOworCWlmICghc2xvdCkKKwkJcmV0dXJuIGdwYSB8IEhQQV9FUlJfTUFTSzsKKwlwYWdlID0gZ2ZuX3RvX3BhZ2Uoc2xvdCwgZ3BhID4+IFBBR0VfU0hJRlQpOworCXJldHVybiAoKGhwYV90KXBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCisJCXwgKGdwYSAmIChQQUdFX1NJWkUtMSkpOworfQorCitocGFfdCBndmFfdG9faHBhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKQoreworCWdwYV90IGdwYSA9IHZjcHUtPm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGd2YSk7CisKKwlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkKKwkJcmV0dXJuIFVOTUFQUEVEX0dWQTsKKwlyZXR1cm4gZ3BhX3RvX2hwYSh2Y3B1LCBncGEpOworfQorCitzdGF0aWMgdm9pZCBub25wYWdpbmdfbmV3X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7Cit9CisKK3N0YXRpYyBpbnQgbm9ucGFnaW5nX21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IHYsIGhwYV90IHApCit7CisJaW50IGxldmVsID0gUFQzMkVfUk9PVF9MRVZFTDsKKwlocGFfdCB0YWJsZV9hZGRyID0gdmNwdS0+bW11LnJvb3RfaHBhOworCisJZm9yICg7IDsgbGV2ZWwtLSkgeworCQl1MzIgaW5kZXggPSBQVDY0X0lOREVYKHYsIGxldmVsKTsKKwkJdTY0ICp0YWJsZTsKKwkJdTY0IHB0ZTsKKworCQlBU1NFUlQoVkFMSURfUEFHRSh0YWJsZV9hZGRyKSk7CisJCXRhYmxlID0gX192YSh0YWJsZV9hZGRyKTsKKworCQlpZiAobGV2ZWwgPT0gMSkgeworCQkJcHRlID0gdGFibGVbaW5kZXhdOworCQkJaWYgKGlzX3ByZXNlbnRfcHRlKHB0ZSkgJiYgaXNfd3JpdGVibGVfcHRlKHB0ZSkpCisJCQkJcmV0dXJuIDA7CisJCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCB2ID4+IFBBR0VfU0hJRlQpOworCQkJcGFnZV9oZWFkZXJfdXBkYXRlX3Nsb3QodmNwdS0+a3ZtLCB0YWJsZSwgdik7CisJCQl0YWJsZVtpbmRleF0gPSBwIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSyB8CisJCQkJCQkJCVBUX1VTRVJfTUFTSzsKKwkJCXJtYXBfYWRkKHZjcHUsICZ0YWJsZVtpbmRleF0pOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAodGFibGVbaW5kZXhdID09IDApIHsKKwkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKm5ld190YWJsZTsKKwkJCWdmbl90IHBzZXVkb19nZm47CisKKwkJCXBzZXVkb19nZm4gPSAodiAmIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLKQorCQkJCT4+IFBBR0VfU0hJRlQ7CisJCQluZXdfdGFibGUgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHBzZXVkb19nZm4sCisJCQkJCQkgICAgIHYsIGxldmVsIC0gMSwKKwkJCQkJCSAgICAgMSwgJnRhYmxlW2luZGV4XSk7CisJCQlpZiAoIW5ld190YWJsZSkgeworCQkJCXBncHJpbnRrKCJub25wYWdpbmdfbWFwOiBFTk9NRU1cbiIpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCisJCQl0YWJsZVtpbmRleF0gPSBuZXdfdGFibGUtPnBhZ2VfaHBhIHwgUFRfUFJFU0VOVF9NQVNLCisJCQkJfCBQVF9XUklUQUJMRV9NQVNLIHwgUFRfVVNFUl9NQVNLOworCQl9CisJCXRhYmxlX2FkZHIgPSB0YWJsZVtpbmRleF0gJiBQVDY0X0JBU0VfQUREUl9NQVNLOworCX0KK30KKworc3RhdGljIHZvaWQgbW11X2ZyZWVfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWludCBpOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2U7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaWYgKHZjcHUtPm1tdS5zaGFkb3dfcm9vdF9sZXZlbCA9PSBQVDY0X1JPT1RfTEVWRUwpIHsKKwkJaHBhX3Qgcm9vdCA9IHZjcHUtPm1tdS5yb290X2hwYTsKKworCQlBU1NFUlQoVkFMSURfUEFHRShyb290KSk7CisJCXBhZ2UgPSBwYWdlX2hlYWRlcihyb290KTsKKwkJLS1wYWdlLT5yb290X2NvdW50OworCQl2Y3B1LT5tbXUucm9vdF9ocGEgPSBJTlZBTElEX1BBR0U7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCWhwYV90IHJvb3QgPSB2Y3B1LT5tbXUucGFlX3Jvb3RbaV07CisKKwkJQVNTRVJUKFZBTElEX1BBR0Uocm9vdCkpOworCQlyb290ICY9IFBUNjRfQkFTRV9BRERSX01BU0s7CisJCXBhZ2UgPSBwYWdlX2hlYWRlcihyb290KTsKKwkJLS1wYWdlLT5yb290X2NvdW50OworCQl2Y3B1LT5tbXUucGFlX3Jvb3RbaV0gPSBJTlZBTElEX1BBR0U7CisJfQorCXZjcHUtPm1tdS5yb290X2hwYSA9IElOVkFMSURfUEFHRTsKK30KKworc3RhdGljIHZvaWQgbW11X2FsbG9jX3Jvb3RzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgaTsKKwlnZm5fdCByb290X2dmbjsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlOworCisJcm9vdF9nZm4gPSB2Y3B1LT5jcjMgPj4gUEFHRV9TSElGVDsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlpZiAodmNwdS0+bW11LnNoYWRvd19yb290X2xldmVsID09IFBUNjRfUk9PVF9MRVZFTCkgeworCQlocGFfdCByb290ID0gdmNwdS0+bW11LnJvb3RfaHBhOworCisJCUFTU0VSVCghVkFMSURfUEFHRShyb290KSk7CisJCXBhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHJvb3RfZ2ZuLCAwLAorCQkJCQlQVDY0X1JPT1RfTEVWRUwsIDAsIE5VTEwpOworCQlyb290ID0gcGFnZS0+cGFnZV9ocGE7CisJCSsrcGFnZS0+cm9vdF9jb3VudDsKKwkJdmNwdS0+bW11LnJvb3RfaHBhID0gcm9vdDsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJaHBhX3Qgcm9vdCA9IHZjcHUtPm1tdS5wYWVfcm9vdFtpXTsKKworCQlBU1NFUlQoIVZBTElEX1BBR0Uocm9vdCkpOworCQlpZiAodmNwdS0+bW11LnJvb3RfbGV2ZWwgPT0gUFQzMkVfUk9PVF9MRVZFTCkKKwkJCXJvb3RfZ2ZuID0gdmNwdS0+cGRwdHJzW2ldID4+IFBBR0VfU0hJRlQ7CisJCWVsc2UgaWYgKHZjcHUtPm1tdS5yb290X2xldmVsID09IDApCisJCQlyb290X2dmbiA9IDA7CisJCXBhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHJvb3RfZ2ZuLCBpIDw8IDMwLAorCQkJCQlQVDMyX1JPT1RfTEVWRUwsICFpc19wYWdpbmcodmNwdSksCisJCQkJCU5VTEwpOworCQlyb290ID0gcGFnZS0+cGFnZV9ocGE7CisJCSsrcGFnZS0+cm9vdF9jb3VudDsKKwkJdmNwdS0+bW11LnBhZV9yb290W2ldID0gcm9vdCB8IFBUX1BSRVNFTlRfTUFTSzsKKwl9CisJdmNwdS0+bW11LnJvb3RfaHBhID0gX19wYSh2Y3B1LT5tbXUucGFlX3Jvb3QpOworfQorCitzdGF0aWMgZ3BhX3Qgbm9ucGFnaW5nX2d2YV90b19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2YWRkcikKK3sKKwlyZXR1cm4gdmFkZHI7Cit9CisKK3N0YXRpYyBpbnQgbm9ucGFnaW5nX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsCisJCQkgICAgICAgdTMyIGVycm9yX2NvZGUpCit7CisJZ3BhX3QgYWRkciA9IGd2YTsKKwlocGFfdCBwYWRkcjsKKwlpbnQgcjsKKworCXIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlBU1NFUlQodmNwdSk7CisJQVNTRVJUKFZBTElEX1BBR0UodmNwdS0+bW11LnJvb3RfaHBhKSk7CisKKworCXBhZGRyID0gZ3BhX3RvX2hwYSh2Y3B1ICwgYWRkciAmIFBUNjRfQkFTRV9BRERSX01BU0spOworCisJaWYgKGlzX2Vycm9yX2hwYShwYWRkcikpCisJCXJldHVybiAxOworCisJcmV0dXJuIG5vbnBhZ2luZ19tYXAodmNwdSwgYWRkciAmIFBBR0VfTUFTSywgcGFkZHIpOworfQorCitzdGF0aWMgdm9pZCBub25wYWdpbmdfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJbW11X2ZyZWVfcm9vdHModmNwdSk7Cit9CisKK3N0YXRpYyBpbnQgbm9ucGFnaW5nX2luaXRfY29udGV4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9tbXUgKmNvbnRleHQgPSAmdmNwdS0+bW11OworCisJY29udGV4dC0+bmV3X2NyMyA9IG5vbnBhZ2luZ19uZXdfY3IzOworCWNvbnRleHQtPnBhZ2VfZmF1bHQgPSBub25wYWdpbmdfcGFnZV9mYXVsdDsKKwljb250ZXh0LT5ndmFfdG9fZ3BhID0gbm9ucGFnaW5nX2d2YV90b19ncGE7CisJY29udGV4dC0+ZnJlZSA9IG5vbnBhZ2luZ19mcmVlOworCWNvbnRleHQtPnJvb3RfbGV2ZWwgPSAwOworCWNvbnRleHQtPnNoYWRvd19yb290X2xldmVsID0gUFQzMkVfUk9PVF9MRVZFTDsKKwltbXVfYWxsb2Nfcm9vdHModmNwdSk7CisJQVNTRVJUKFZBTElEX1BBR0UoY29udGV4dC0+cm9vdF9ocGEpKTsKKwlrdm1fYXJjaF9vcHMtPnNldF9jcjModmNwdSwgY29udGV4dC0+cm9vdF9ocGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrdm1fbW11X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJKytrdm1fc3RhdC50bGJfZmx1c2g7CisJa3ZtX2FyY2hfb3BzLT50bGJfZmx1c2godmNwdSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhZ2luZ19uZXdfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlwZ3ByaW50aygiJXM6IGNyMyAlbHhcbiIsIF9fRlVOQ1RJT05fXywgdmNwdS0+Y3IzKTsKKwltbXVfZnJlZV9yb290cyh2Y3B1KTsKKwlpZiAodW5saWtlbHkodmNwdS0+a3ZtLT5uX2ZyZWVfbW11X3BhZ2VzIDwgS1ZNX01JTl9GUkVFX01NVV9QQUdFUykpCisJCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOworCW1tdV9hbGxvY19yb290cyh2Y3B1KTsKKwlrdm1fbW11X2ZsdXNoX3RsYih2Y3B1KTsKKwlrdm1fYXJjaF9vcHMtPnNldF9jcjModmNwdSwgdmNwdS0+bW11LnJvb3RfaHBhKTsKK30KKworc3RhdGljIHZvaWQgbWFya19wYWdldGFibGVfbm9uZ2xvYmFsKHZvaWQgKnNoYWRvd19wdGUpCit7CisJcGFnZV9oZWFkZXIoX19wYShzaGFkb3dfcHRlKSktPmdsb2JhbCA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgIHU2NCAqc2hhZG93X3B0ZSwKKwkJCSAgICAgZ3BhX3QgZ2FkZHIsCisJCQkgICAgIGludCBkaXJ0eSwKKwkJCSAgICAgdTY0IGFjY2Vzc19iaXRzLAorCQkJICAgICBnZm5fdCBnZm4pCit7CisJaHBhX3QgcGFkZHI7CisKKwkqc2hhZG93X3B0ZSB8PSBhY2Nlc3NfYml0cyA8PCBQVF9TSEFET1dfQklUU19PRkZTRVQ7CisJaWYgKCFkaXJ0eSkKKwkJYWNjZXNzX2JpdHMgJj0gflBUX1dSSVRBQkxFX01BU0s7CisKKwlwYWRkciA9IGdwYV90b19ocGEodmNwdSwgZ2FkZHIgJiBQVDY0X0JBU0VfQUREUl9NQVNLKTsKKworCSpzaGFkb3dfcHRlIHw9IGFjY2Vzc19iaXRzOworCisJaWYgKCEoKnNoYWRvd19wdGUgJiBQVF9HTE9CQUxfTUFTSykpCisJCW1hcmtfcGFnZXRhYmxlX25vbmdsb2JhbChzaGFkb3dfcHRlKTsKKworCWlmIChpc19lcnJvcl9ocGEocGFkZHIpKSB7CisJCSpzaGFkb3dfcHRlIHw9IGdhZGRyOworCQkqc2hhZG93X3B0ZSB8PSBQVF9TSEFET1dfSU9fTUFSSzsKKwkJKnNoYWRvd19wdGUgJj0gflBUX1BSRVNFTlRfTUFTSzsKKwkJcmV0dXJuOworCX0KKworCSpzaGFkb3dfcHRlIHw9IHBhZGRyOworCisJaWYgKGFjY2Vzc19iaXRzICYgUFRfV1JJVEFCTEVfTUFTSykgeworCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzaGFkb3c7CisKKwkJc2hhZG93ID0ga3ZtX21tdV9sb29rdXBfcGFnZSh2Y3B1LCBnZm4pOworCQlpZiAoc2hhZG93KSB7CisJCQlwZ3ByaW50aygiJXM6IGZvdW5kIHNoYWRvdyBwYWdlIGZvciAlbHgsIG1hcmtpbmcgcm9cbiIsCisJCQkJIF9fRlVOQ1RJT05fXywgZ2ZuKTsKKwkJCWFjY2Vzc19iaXRzICY9IH5QVF9XUklUQUJMRV9NQVNLOworCQkJaWYgKGlzX3dyaXRlYmxlX3B0ZSgqc2hhZG93X3B0ZSkpIHsKKwkJCQkgICAgKnNoYWRvd19wdGUgJj0gflBUX1dSSVRBQkxFX01BU0s7CisJCQkJICAgIGt2bV9hcmNoX29wcy0+dGxiX2ZsdXNoKHZjcHUpOworCQkJfQorCQl9CisJfQorCisJaWYgKGFjY2Vzc19iaXRzICYgUFRfV1JJVEFCTEVfTUFTSykKKwkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgZ2FkZHIgPj4gUEFHRV9TSElGVCk7CisKKwlwYWdlX2hlYWRlcl91cGRhdGVfc2xvdCh2Y3B1LT5rdm0sIHNoYWRvd19wdGUsIGdhZGRyKTsKKwlybWFwX2FkZCh2Y3B1LCBzaGFkb3dfcHRlKTsKK30KKworc3RhdGljIHZvaWQgaW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICAgdTY0IGFkZHIsCisJCQkgICAgICB1MzIgZXJyX2NvZGUpCit7CisJa3ZtX2FyY2hfb3BzLT5pbmplY3RfcGFnZV9mYXVsdCh2Y3B1LCBhZGRyLCBlcnJfY29kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpeF9yZWFkX3BmKHU2NCAqc2hhZG93X2VudCkKK3sKKwlpZiAoKCpzaGFkb3dfZW50ICYgUFRfU0hBRE9XX1VTRVJfTUFTSykgJiYKKwkgICAgISgqc2hhZG93X2VudCAmIFBUX1VTRVJfTUFTSykpIHsKKwkJLyoKKwkJICogSWYgc3VwZXJ2aXNvciB3cml0ZSBwcm90ZWN0IGlzIGRpc2FibGVkLCB3ZSBzaGFkb3cga2VybmVsCisJCSAqIHBhZ2VzIGFzIHVzZXIgcGFnZXMgc28gd2UgY2FuIHRyYXAgdGhlIHdyaXRlIGFjY2Vzcy4KKwkJICovCisJCSpzaGFkb3dfZW50IHw9IFBUX1VTRVJfTUFTSzsKKwkJKnNoYWRvd19lbnQgJj0gflBUX1dSSVRBQkxFX01BU0s7CisKKwkJcmV0dXJuIDE7CisKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBhZ2luZ19mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlub25wYWdpbmdfZnJlZSh2Y3B1KTsKK30KKworI2RlZmluZSBQVFRZUEUgNjQKKyNpbmNsdWRlICJwYWdpbmdfdG1wbC5oIgorI3VuZGVmIFBUVFlQRQorCisjZGVmaW5lIFBUVFlQRSAzMgorI2luY2x1ZGUgInBhZ2luZ190bXBsLmgiCisjdW5kZWYgUFRUWVBFCisKK3N0YXRpYyBpbnQgcGFnaW5nNjRfaW5pdF9jb250ZXh0X2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3Qga3ZtX21tdSAqY29udGV4dCA9ICZ2Y3B1LT5tbXU7CisKKwlBU1NFUlQoaXNfcGFlKHZjcHUpKTsKKwljb250ZXh0LT5uZXdfY3IzID0gcGFnaW5nX25ld19jcjM7CisJY29udGV4dC0+cGFnZV9mYXVsdCA9IHBhZ2luZzY0X3BhZ2VfZmF1bHQ7CisJY29udGV4dC0+Z3ZhX3RvX2dwYSA9IHBhZ2luZzY0X2d2YV90b19ncGE7CisJY29udGV4dC0+ZnJlZSA9IHBhZ2luZ19mcmVlOworCWNvbnRleHQtPnJvb3RfbGV2ZWwgPSBsZXZlbDsKKwljb250ZXh0LT5zaGFkb3dfcm9vdF9sZXZlbCA9IGxldmVsOworCW1tdV9hbGxvY19yb290cyh2Y3B1KTsKKwlBU1NFUlQoVkFMSURfUEFHRShjb250ZXh0LT5yb290X2hwYSkpOworCWt2bV9hcmNoX29wcy0+c2V0X2NyMyh2Y3B1LCBjb250ZXh0LT5yb290X2hwYSB8CisJCSAgICAodmNwdS0+Y3IzICYgKENSM19QQ0RfTUFTSyB8IENSM19XUFRfTUFTSykpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWdpbmc2NF9pbml0X2NvbnRleHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBwYWdpbmc2NF9pbml0X2NvbnRleHRfY29tbW9uKHZjcHUsIFBUNjRfUk9PVF9MRVZFTCk7Cit9CisKK3N0YXRpYyBpbnQgcGFnaW5nMzJfaW5pdF9jb250ZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtX21tdSAqY29udGV4dCA9ICZ2Y3B1LT5tbXU7CisKKwljb250ZXh0LT5uZXdfY3IzID0gcGFnaW5nX25ld19jcjM7CisJY29udGV4dC0+cGFnZV9mYXVsdCA9IHBhZ2luZzMyX3BhZ2VfZmF1bHQ7CisJY29udGV4dC0+Z3ZhX3RvX2dwYSA9IHBhZ2luZzMyX2d2YV90b19ncGE7CisJY29udGV4dC0+ZnJlZSA9IHBhZ2luZ19mcmVlOworCWNvbnRleHQtPnJvb3RfbGV2ZWwgPSBQVDMyX1JPT1RfTEVWRUw7CisJY29udGV4dC0+c2hhZG93X3Jvb3RfbGV2ZWwgPSBQVDMyRV9ST09UX0xFVkVMOworCW1tdV9hbGxvY19yb290cyh2Y3B1KTsKKwlBU1NFUlQoVkFMSURfUEFHRShjb250ZXh0LT5yb290X2hwYSkpOworCWt2bV9hcmNoX29wcy0+c2V0X2NyMyh2Y3B1LCBjb250ZXh0LT5yb290X2hwYSB8CisJCSAgICAodmNwdS0+Y3IzICYgKENSM19QQ0RfTUFTSyB8IENSM19XUFRfTUFTSykpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWdpbmczMkVfaW5pdF9jb250ZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gcGFnaW5nNjRfaW5pdF9jb250ZXh0X2NvbW1vbih2Y3B1LCBQVDMyRV9ST09UX0xFVkVMKTsKK30KKworc3RhdGljIGludCBpbml0X2t2bV9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCUFTU0VSVCh2Y3B1KTsKKwlBU1NFUlQoIVZBTElEX1BBR0UodmNwdS0+bW11LnJvb3RfaHBhKSk7CisKKwlpZiAoIWlzX3BhZ2luZyh2Y3B1KSkKKwkJcmV0dXJuIG5vbnBhZ2luZ19pbml0X2NvbnRleHQodmNwdSk7CisJZWxzZSBpZiAoaXNfbG9uZ19tb2RlKHZjcHUpKQorCQlyZXR1cm4gcGFnaW5nNjRfaW5pdF9jb250ZXh0KHZjcHUpOworCWVsc2UgaWYgKGlzX3BhZSh2Y3B1KSkKKwkJcmV0dXJuIHBhZ2luZzMyRV9pbml0X2NvbnRleHQodmNwdSk7CisJZWxzZQorCQlyZXR1cm4gcGFnaW5nMzJfaW5pdF9jb250ZXh0KHZjcHUpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2t2bV9tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCUFTU0VSVCh2Y3B1KTsKKwlpZiAoVkFMSURfUEFHRSh2Y3B1LT5tbXUucm9vdF9ocGEpKSB7CisJCXZjcHUtPm1tdS5mcmVlKHZjcHUpOworCQl2Y3B1LT5tbXUucm9vdF9ocGEgPSBJTlZBTElEX1BBR0U7CisJfQorfQorCitpbnQga3ZtX21tdV9yZXNldF9jb250ZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgcjsKKworCWRlc3Ryb3lfa3ZtX21tdSh2Y3B1KTsKKwlyID0gaW5pdF9rdm1fbW11KHZjcHUpOworCWlmIChyIDwgMCkKKwkJZ290byBvdXQ7CisJciA9IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHZjcHUpOworb3V0OgorCXJldHVybiByOworfQorCit2b2lkIGt2bV9tbXVfcHJlX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCBpbnQgYnl0ZXMpCit7CisJZ2ZuX3QgZ2ZuID0gZ3BhID4+IFBBR0VfU0hJRlQ7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZTsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpjaGlsZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm47CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKwl1bnNpZ25lZCBpbmRleDsKKwl1NjQgKnNwdGU7CisJdTY0IHB0ZTsKKwl1bnNpZ25lZCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShncGEpOworCXVuc2lnbmVkIHB0ZV9zaXplOworCXVuc2lnbmVkIHBhZ2Vfb2Zmc2V0OworCXVuc2lnbmVkIG1pc2FsaWduZWQ7CisJaW50IGxldmVsOworCWludCBmbG9vZGVkID0gMDsKKworCXBncHJpbnRrKCIlczogZ3BhICVsbHggYnl0ZXMgJWRcbiIsIF9fRlVOQ1RJT05fXywgZ3BhLCBieXRlcyk7CisJaWYgKGdmbiA9PSB2Y3B1LT5sYXN0X3B0X3dyaXRlX2dmbikgeworCQkrK3ZjcHUtPmxhc3RfcHRfd3JpdGVfY291bnQ7CisJCWlmICh2Y3B1LT5sYXN0X3B0X3dyaXRlX2NvdW50ID49IDMpCisJCQlmbG9vZGVkID0gMTsKKwl9IGVsc2UgeworCQl2Y3B1LT5sYXN0X3B0X3dyaXRlX2dmbiA9IGdmbjsKKwkJdmNwdS0+bGFzdF9wdF93cml0ZV9jb3VudCA9IDE7CisJfQorCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbikgJSBLVk1fTlVNX01NVV9QQUdFUzsKKwlidWNrZXQgPSAmdmNwdS0+a3ZtLT5tbXVfcGFnZV9oYXNoW2luZGV4XTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIG5vZGUsIG4sIGJ1Y2tldCwgaGFzaF9saW5rKSB7CisJCWlmIChwYWdlLT5nZm4gIT0gZ2ZuIHx8IHBhZ2UtPnJvbGUubWV0YXBoeXNpY2FsKQorCQkJY29udGludWU7CisJCXB0ZV9zaXplID0gcGFnZS0+cm9sZS5nbGV2ZWxzID09IFBUMzJfUk9PVF9MRVZFTCA/IDQgOiA4OworCQltaXNhbGlnbmVkID0gKG9mZnNldCBeIChvZmZzZXQgKyBieXRlcyAtIDEpKSAmIH4ocHRlX3NpemUgLSAxKTsKKwkJaWYgKG1pc2FsaWduZWQgfHwgZmxvb2RlZCkgeworCQkJLyoKKwkJCSAqIE1pc2FsaWduZWQgYWNjZXNzZXMgYXJlIHRvbyBtdWNoIHRyb3VibGUgdG8gZml4CisJCQkgKiB1cDsgYWxzbywgdGhleSB1c3VhbGx5IGluZGljYXRlIGEgcGFnZSBpcyBub3QgdXNlZAorCQkJICogYXMgYSBwYWdlIHRhYmxlLgorCQkJICoKKwkJCSAqIElmIHdlJ3JlIHNlZWluZyB0b28gbWFueSB3cml0ZXMgdG8gYSBwYWdlLAorCQkJICogaXQgbWF5IG5vIGxvbmdlciBiZSBhIHBhZ2UgdGFibGUsIG9yIHdlIG1heSBiZQorCQkJICogZm9ya2luZywgaW4gd2hpY2ggY2FzZSBpdCBpcyBiZXR0ZXIgdG8gdW5tYXAgdGhlCisJCQkgKiBwYWdlLgorCQkJICovCisJCQlwZ3ByaW50aygibWlzYWxpZ25lZDogZ3BhICVsbHggYnl0ZXMgJWQgcm9sZSAleFxuIiwKKwkJCQkgZ3BhLCBieXRlcywgcGFnZS0+cm9sZS53b3JkKTsKKwkJCWt2bV9tbXVfemFwX3BhZ2UodmNwdSwgcGFnZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlwYWdlX29mZnNldCA9IG9mZnNldDsKKwkJbGV2ZWwgPSBwYWdlLT5yb2xlLmxldmVsOworCQlpZiAocGFnZS0+cm9sZS5nbGV2ZWxzID09IFBUMzJfUk9PVF9MRVZFTCkgeworCQkJcGFnZV9vZmZzZXQgPDw9IDE7ICAgICAgICAgIC8qIDMyLT42NCAqLworCQkJcGFnZV9vZmZzZXQgJj0gflBBR0VfTUFTSzsKKwkJfQorCQlzcHRlID0gX192YShwYWdlLT5wYWdlX2hwYSk7CisJCXNwdGUgKz0gcGFnZV9vZmZzZXQgLyBzaXplb2YoKnNwdGUpOworCQlwdGUgPSAqc3B0ZTsKKwkJaWYgKGlzX3ByZXNlbnRfcHRlKHB0ZSkpIHsKKwkJCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQkJCXJtYXBfcmVtb3ZlKHZjcHUsIHNwdGUpOworCQkJZWxzZSB7CisJCQkJY2hpbGQgPSBwYWdlX2hlYWRlcihwdGUgJiBQVDY0X0JBU0VfQUREUl9NQVNLKTsKKwkJCQltbXVfcGFnZV9yZW1vdmVfcGFyZW50X3B0ZSh2Y3B1LCBjaGlsZCwgc3B0ZSk7CisJCQl9CisJCX0KKwkJKnNwdGUgPSAwOworCX0KK30KKwordm9pZCBrdm1fbW11X3Bvc3Rfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIGludCBieXRlcykKK3sKK30KKworaW50IGt2bV9tbXVfdW5wcm90ZWN0X3BhZ2VfdmlydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSkKK3sKKwlncGFfdCBncGEgPSB2Y3B1LT5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBndmEpOworCisJcmV0dXJuIGt2bV9tbXVfdW5wcm90ZWN0X3BhZ2UodmNwdSwgZ3BhID4+IFBBR0VfU0hJRlQpOworfQorCit2b2lkIGt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl3aGlsZSAodmNwdS0+a3ZtLT5uX2ZyZWVfbW11X3BhZ2VzIDwgS1ZNX1JFRklMTF9QQUdFUykgeworCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlOworCisJCXBhZ2UgPSBjb250YWluZXJfb2YodmNwdS0+a3ZtLT5hY3RpdmVfbW11X3BhZ2VzLnByZXYsCisJCQkJICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UsIGxpbmspOworCQlrdm1fbW11X3phcF9wYWdlKHZjcHUsIHBhZ2UpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKTsKKworc3RhdGljIHZvaWQgZnJlZV9tbXVfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2U7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnZjcHUtPmt2bS0+YWN0aXZlX21tdV9wYWdlcykpIHsKKwkJcGFnZSA9IGNvbnRhaW5lcl9vZih2Y3B1LT5rdm0tPmFjdGl2ZV9tbXVfcGFnZXMubmV4dCwKKwkJCQkgICAgc3RydWN0IGt2bV9tbXVfcGFnZSwgbGluayk7CisJCWt2bV9tbXVfemFwX3BhZ2UodmNwdSwgcGFnZSk7CisJfQorCXdoaWxlICghbGlzdF9lbXB0eSgmdmNwdS0+ZnJlZV9wYWdlcykpIHsKKwkJcGFnZSA9IGxpc3RfZW50cnkodmNwdS0+ZnJlZV9wYWdlcy5uZXh0LAorCQkJCSAgc3RydWN0IGt2bV9tbXVfcGFnZSwgbGluayk7CisJCWxpc3RfZGVsKCZwYWdlLT5saW5rKTsKKwkJX19mcmVlX3BhZ2UocGZuX3RvX3BhZ2UocGFnZS0+cGFnZV9ocGEgPj4gUEFHRV9TSElGVCkpOworCQlwYWdlLT5wYWdlX2hwYSA9IElOVkFMSURfUEFHRTsKKwl9CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXZjcHUtPm1tdS5wYWVfcm9vdCk7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfbW11X3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgaTsKKworCUFTU0VSVCh2Y3B1KTsKKworCWZvciAoaSA9IDA7IGkgPCBLVk1fTlVNX01NVV9QQUdFUzsgaSsrKSB7CisJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnBhZ2VfaGVhZGVyID0gJnZjcHUtPnBhZ2VfaGVhZGVyX2J1ZltpXTsKKworCQlJTklUX0xJU1RfSEVBRCgmcGFnZV9oZWFkZXItPmxpbmspOworCQlpZiAoKHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQkJZ290byBlcnJvcl8xOworCQlwYWdlLT5wcml2YXRlID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9oZWFkZXI7CisJCXBhZ2VfaGVhZGVyLT5wYWdlX2hwYSA9IChocGFfdClwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUOworCQltZW1zZXQoX192YShwYWdlX2hlYWRlci0+cGFnZV9ocGEpLCAwLCBQQUdFX1NJWkUpOworCQlsaXN0X2FkZCgmcGFnZV9oZWFkZXItPmxpbmssICZ2Y3B1LT5mcmVlX3BhZ2VzKTsKKwkJKyt2Y3B1LT5rdm0tPm5fZnJlZV9tbXVfcGFnZXM7CisJfQorCisJLyoKKwkgKiBXaGVuIGVtdWxhdGluZyAzMi1iaXQgbW9kZSwgY3IzIGlzIG9ubHkgMzIgYml0cyBldmVuIG9uIHg4Nl82NC4KKwkgKiBUaGVyZWZvcmUgd2UgbmVlZCB0byBhbGxvY2F0ZSBzaGFkb3cgcGFnZSB0YWJsZXMgaW4gdGhlIGZpcnN0CisJICogNEdCIG9mIG1lbW9yeSwgd2hpY2ggaGFwcGVucyB0byBmaXQgdGhlIERNQTMyIHpvbmUuCisJICovCisJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX0RNQTMyKTsKKwlpZiAoIXBhZ2UpCisJCWdvdG8gZXJyb3JfMTsKKwl2Y3B1LT5tbXUucGFlX3Jvb3QgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJdmNwdS0+bW11LnBhZV9yb290W2ldID0gSU5WQUxJRF9QQUdFOworCisJcmV0dXJuIDA7CisKK2Vycm9yXzE6CisJZnJlZV9tbXVfcGFnZXModmNwdSk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK2ludCBrdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJQVNTRVJUKHZjcHUpOworCUFTU0VSVCghVkFMSURfUEFHRSh2Y3B1LT5tbXUucm9vdF9ocGEpKTsKKwlBU1NFUlQobGlzdF9lbXB0eSgmdmNwdS0+ZnJlZV9wYWdlcykpOworCisJcmV0dXJuIGFsbG9jX21tdV9wYWdlcyh2Y3B1KTsKK30KKworaW50IGt2bV9tbXVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCUFTU0VSVCh2Y3B1KTsKKwlBU1NFUlQoIVZBTElEX1BBR0UodmNwdS0+bW11LnJvb3RfaHBhKSk7CisJQVNTRVJUKCFsaXN0X2VtcHR5KCZ2Y3B1LT5mcmVlX3BhZ2VzKSk7CisKKwlyZXR1cm4gaW5pdF9rdm1fbW11KHZjcHUpOworfQorCit2b2lkIGt2bV9tbXVfZGVzdHJveShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJQVNTRVJUKHZjcHUpOworCisJZGVzdHJveV9rdm1fbW11KHZjcHUpOworCWZyZWVfbW11X3BhZ2VzKHZjcHUpOworCW1tdV9mcmVlX21lbW9yeV9jYWNoZXModmNwdSk7Cit9CisKK3ZvaWQga3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LT5rdm07CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJmt2bS0+YWN0aXZlX21tdV9wYWdlcywgbGluaykgeworCQlpbnQgaTsKKwkJdTY0ICpwdDsKKworCQlpZiAoIXRlc3RfYml0KHNsb3QsICZwYWdlLT5zbG90X2JpdG1hcCkpCisJCQljb250aW51ZTsKKworCQlwdCA9IF9fdmEocGFnZS0+cGFnZV9ocGEpOworCQlmb3IgKGkgPSAwOyBpIDwgUFQ2NF9FTlRfUEVSX1BBR0U7ICsraSkKKwkJCS8qIGF2b2lkIFJNVyAqLworCQkJaWYgKHB0W2ldICYgUFRfV1JJVEFCTEVfTUFTSykgeworCQkJCXJtYXBfcmVtb3ZlKHZjcHUsICZwdFtpXSk7CisJCQkJcHRbaV0gJj0gflBUX1dSSVRBQkxFX01BU0s7CisJCQl9CisJfQorfQorCisjaWZkZWYgQVVESVQKKworc3RhdGljIGNvbnN0IGNoYXIgKmF1ZGl0X21zZzsKKworc3RhdGljIGd2YV90IGNhbm9uaWNhbGl6ZShndmFfdCBndmEpCit7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWd2YSA9IChsb25nIGxvbmcpKGd2YSA8PCAxNikgPj4gMTY7CisjZW5kaWYKKwlyZXR1cm4gZ3ZhOworfQorCitzdGF0aWMgdm9pZCBhdWRpdF9tYXBwaW5nc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhZ2VfcHRlLAorCQkJCWd2YV90IHZhLCBpbnQgbGV2ZWwpCit7CisJdTY0ICpwdCA9IF9fdmEocGFnZV9wdGUgJiBQVDY0X0JBU0VfQUREUl9NQVNLKTsKKwlpbnQgaTsKKwlndmFfdCB2YV9kZWx0YSA9IDF1bCA8PCAoUEFHRV9TSElGVCArIDkgKiAobGV2ZWwgLSAxKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFQ2NF9FTlRfUEVSX1BBR0U7ICsraSwgdmEgKz0gdmFfZGVsdGEpIHsKKwkJdTY0IGVudCA9IHB0W2ldOworCisJCWlmICghZW50ICYgUFRfUFJFU0VOVF9NQVNLKQorCQkJY29udGludWU7CisKKwkJdmEgPSBjYW5vbmljYWxpemUodmEpOworCQlpZiAobGV2ZWwgPiAxKQorCQkJYXVkaXRfbWFwcGluZ3NfcGFnZSh2Y3B1LCBlbnQsIHZhLCBsZXZlbCAtIDEpOworCQllbHNlIHsKKwkJCWdwYV90IGdwYSA9IHZjcHUtPm1tdS5ndmFfdG9fZ3BhKHZjcHUsIHZhKTsKKwkJCWhwYV90IGhwYSA9IGdwYV90b19ocGEodmNwdSwgZ3BhKTsKKworCQkJaWYgKChlbnQgJiBQVF9QUkVTRU5UX01BU0spCisJCQkgICAgJiYgKGVudCAmIFBUNjRfQkFTRV9BRERSX01BU0spICE9IGhwYSkKKwkJCQlwcmludGsoS0VSTl9FUlIgImF1ZGl0IGVycm9yOiAoJXMpIGxldmVscyAlZCIKKwkJCQkgICAgICAgIiBndmEgJWx4IGdwYSAlbGx4IGhwYSAlbGx4IGVudCAlbGx4XG4iLAorCQkJCSAgICAgICBhdWRpdF9tc2csIHZjcHUtPm1tdS5yb290X2xldmVsLAorCQkJCSAgICAgICB2YSwgZ3BhLCBocGEsIGVudCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF1ZGl0X21hcHBpbmdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgaTsKKworCWlmICh2Y3B1LT5tbXUucm9vdF9sZXZlbCA9PSA0KQorCQlhdWRpdF9tYXBwaW5nc19wYWdlKHZjcHUsIHZjcHUtPm1tdS5yb290X2hwYSwgMCwgNCk7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorCQkJaWYgKHZjcHUtPm1tdS5wYWVfcm9vdFtpXSAmIFBUX1BSRVNFTlRfTUFTSykKKwkJCQlhdWRpdF9tYXBwaW5nc19wYWdlKHZjcHUsCisJCQkJCQkgICAgdmNwdS0+bW11LnBhZV9yb290W2ldLAorCQkJCQkJICAgIGkgPDwgMzAsCisJCQkJCQkgICAgMik7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfcm1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWludCBubWFwcyA9IDA7CisJaW50IGksIGosIGs7CisKKwlmb3IgKGkgPSAwOyBpIDwgS1ZNX01FTU9SWV9TTE9UUzsgKytpKSB7CisJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm0gPSAmdmNwdS0+a3ZtLT5tZW1zbG90c1tpXTsKKwkJc3RydWN0IGt2bV9ybWFwX2Rlc2MgKmQ7CisKKwkJZm9yIChqID0gMDsgaiA8IG0tPm5wYWdlczsgKytqKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IG0tPnBoeXNfbWVtW2pdOworCisJCQlpZiAoIXBhZ2UtPnByaXZhdGUpCisJCQkJY29udGludWU7CisJCQlpZiAoIShwYWdlLT5wcml2YXRlICYgMSkpIHsKKwkJCQkrK25tYXBzOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZCA9IChzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqKShwYWdlLT5wcml2YXRlICYgfjF1bCk7CisJCQl3aGlsZSAoZCkgeworCQkJCWZvciAoayA9IDA7IGsgPCBSTUFQX0VYVDsgKytrKQorCQkJCQlpZiAoZC0+c2hhZG93X3B0ZXNba10pCisJCQkJCQkrK25tYXBzOworCQkJCQllbHNlCisJCQkJCQlicmVhazsKKwkJCQlkID0gZC0+bW9yZTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gbm1hcHM7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfd3JpdGFibGVfbWFwcGluZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWludCBubWFwcyA9IDA7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZTsKKwlpbnQgaTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgJnZjcHUtPmt2bS0+YWN0aXZlX21tdV9wYWdlcywgbGluaykgeworCQl1NjQgKnB0ID0gX192YShwYWdlLT5wYWdlX2hwYSk7CisKKwkJaWYgKHBhZ2UtPnJvbGUubGV2ZWwgIT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgKytpKSB7CisJCQl1NjQgZW50ID0gcHRbaV07CisKKwkJCWlmICghKGVudCAmIFBUX1BSRVNFTlRfTUFTSykpCisJCQkJY29udGludWU7CisJCQlpZiAoIShlbnQgJiBQVF9XUklUQUJMRV9NQVNLKSkKKwkJCQljb250aW51ZTsKKwkJCSsrbm1hcHM7CisJCX0KKwl9CisJcmV0dXJuIG5tYXBzOworfQorCitzdGF0aWMgdm9pZCBhdWRpdF9ybWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgbl9ybWFwID0gY291bnRfcm1hcHModmNwdSk7CisJaW50IG5fYWN0dWFsID0gY291bnRfd3JpdGFibGVfbWFwcGluZ3ModmNwdSk7CisKKwlpZiAobl9ybWFwICE9IG5fYWN0dWFsKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiAoJXMpIHJtYXAgJWQgYWN0dWFsICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBhdWRpdF9tc2csIG5fcm1hcCwgbl9hY3R1YWwpOworfQorCitzdGF0aWMgdm9pZCBhdWRpdF93cml0ZV9wcm90ZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwYWdlLCAmdmNwdS0+a3ZtLT5hY3RpdmVfbW11X3BhZ2VzLCBsaW5rKSB7CisJCWhmbl90IGhmbjsKKwkJc3RydWN0IHBhZ2UgKnBnOworCisJCWlmIChwYWdlLT5yb2xlLm1ldGFwaHlzaWNhbCkKKwkJCWNvbnRpbnVlOworCisJCWhmbiA9IGdwYV90b19ocGEodmNwdSwgKGdwYV90KXBhZ2UtPmdmbiA8PCBQQUdFX1NISUZUKQorCQkJPj4gUEFHRV9TSElGVDsKKwkJcGcgPSBwZm5fdG9fcGFnZShoZm4pOworCQlpZiAocGctPnByaXZhdGUpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAoJXMpIHNoYWRvdyBwYWdlIGhhcyB3cml0YWJsZSIKKwkJCSAgICAgICAiIG1hcHBpbmdzOiBnZm4gJWx4IHJvbGUgJXhcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBhdWRpdF9tc2csIHBhZ2UtPmdmbiwKKwkJCSAgICAgICBwYWdlLT5yb2xlLndvcmQpOworCX0KK30KKworc3RhdGljIHZvaWQga3ZtX21tdV9hdWRpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgb2xkZGJnID0gZGJnOworCisJZGJnID0gMDsKKwlhdWRpdF9tc2cgPSBtc2c7CisJYXVkaXRfcm1hcCh2Y3B1KTsKKwlhdWRpdF93cml0ZV9wcm90ZWN0aW9uKHZjcHUpOworCWF1ZGl0X21hcHBpbmdzKHZjcHUpOworCWRiZyA9IG9sZGRiZzsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2t2bS9wYWdpbmdfdG1wbC5oIGIvZHJpdmVycy9rdm0vcGFnaW5nX3RtcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDlmYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9rdm0vcGFnaW5nX3RtcGwuaApAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAqIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgZHJpdmVyIGZvciBMaW51eAorICoKKyAqIFRoaXMgbW9kdWxlIGVuYWJsZXMgbWFjaGluZXMgd2l0aCBJbnRlbCBWVC14IGV4dGVuc2lvbnMgdG8gcnVuIHZpcnR1YWwKKyAqIG1hY2hpbmVzIHdpdGhvdXQgZW11bGF0aW9uIG9yIGJpbmFyeSB0cmFuc2xhdGlvbi4KKyAqCisgKiBNTVUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBRdW1yYW5ldCwgSW5jLgorICoKKyAqIEF1dGhvcnM6CisgKiAgIFlhbml2IEthbWF5ICA8eWFuaXZAcXVtcmFuZXQuY29tPgorICogICBBdmkgS2l2aXR5ICAgPGF2aUBxdW1yYW5ldC5jb20+CisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLiAgU2VlCisgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorICoKKyAqLworCisvKgorICogV2UgbmVlZCB0aGUgbW11IGNvZGUgdG8gYWNjZXNzIGJvdGggMzItYml0IGFuZCA2NC1iaXQgZ3Vlc3QgcHRlcywKKyAqIHNvIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBpcyBjb21waWxlZCB0d2ljZSwgb25jZSBwZXIgcHRlIHNpemUuCisgKi8KKworI2lmIFBUVFlQRSA9PSA2NAorCSNkZWZpbmUgcHRfZWxlbWVudF90IHU2NAorCSNkZWZpbmUgZ3Vlc3Rfd2Fsa2VyIGd1ZXN0X3dhbGtlcjY0CisJI2RlZmluZSBGTkFNRShuYW1lKSBwYWdpbmcjIzY0XyMjbmFtZQorCSNkZWZpbmUgUFRfQkFTRV9BRERSX01BU0sgUFQ2NF9CQVNFX0FERFJfTUFTSworCSNkZWZpbmUgUFRfRElSX0JBU0VfQUREUl9NQVNLIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLCisJI2RlZmluZSBQVF9JTkRFWChhZGRyLCBsZXZlbCkgUFQ2NF9JTkRFWChhZGRyLCBsZXZlbCkKKwkjZGVmaW5lIFNIQURPV19QVF9JTkRFWChhZGRyLCBsZXZlbCkgUFQ2NF9JTkRFWChhZGRyLCBsZXZlbCkKKwkjZGVmaW5lIFBUX0xFVkVMX01BU0sobGV2ZWwpIFBUNjRfTEVWRUxfTUFTSyhsZXZlbCkKKwkjZGVmaW5lIFBUX1BURV9DT1BZX01BU0sgUFQ2NF9QVEVfQ09QWV9NQVNLCisJI2lmZGVmIENPTkZJR19YODZfNjQKKwkjZGVmaW5lIFBUX01BWF9GVUxMX0xFVkVMUyA0CisJI2Vsc2UKKwkjZGVmaW5lIFBUX01BWF9GVUxMX0xFVkVMUyAyCisJI2VuZGlmCisjZWxpZiBQVFRZUEUgPT0gMzIKKwkjZGVmaW5lIHB0X2VsZW1lbnRfdCB1MzIKKwkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXIzMgorCSNkZWZpbmUgRk5BTUUobmFtZSkgcGFnaW5nIyMzMl8jI25hbWUKKwkjZGVmaW5lIFBUX0JBU0VfQUREUl9NQVNLIFBUMzJfQkFTRV9BRERSX01BU0sKKwkjZGVmaW5lIFBUX0RJUl9CQVNFX0FERFJfTUFTSyBQVDMyX0RJUl9CQVNFX0FERFJfTUFTSworCSNkZWZpbmUgUFRfSU5ERVgoYWRkciwgbGV2ZWwpIFBUMzJfSU5ERVgoYWRkciwgbGV2ZWwpCisJI2RlZmluZSBTSEFET1dfUFRfSU5ERVgoYWRkciwgbGV2ZWwpIFBUNjRfSU5ERVgoYWRkciwgbGV2ZWwpCisJI2RlZmluZSBQVF9MRVZFTF9NQVNLKGxldmVsKSBQVDMyX0xFVkVMX01BU0sobGV2ZWwpCisJI2RlZmluZSBQVF9QVEVfQ09QWV9NQVNLIFBUMzJfUFRFX0NPUFlfTUFTSworCSNkZWZpbmUgUFRfTUFYX0ZVTExfTEVWRUxTIDIKKyNlbHNlCisJI2Vycm9yIEludmFsaWQgUFRUWVBFIHZhbHVlCisjZW5kaWYKKworLyoKKyAqIFRoZSBndWVzdF93YWxrZXIgc3RydWN0dXJlIGVtdWxhdGVzIHRoZSBiZWhhdmlvciBvZiB0aGUgaGFyZHdhcmUgcGFnZQorICogdGFibGUgd2Fsa2VyLgorICovCitzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyIHsKKwlpbnQgbGV2ZWw7CisJZ2ZuX3QgdGFibGVfZ2ZuW1BUX01BWF9GVUxMX0xFVkVMU107CisJcHRfZWxlbWVudF90ICp0YWJsZTsKKwlwdF9lbGVtZW50X3QgKnB0ZXA7CisJcHRfZWxlbWVudF90IGluaGVyaXRlZF9hcjsKKwlnZm5fdCBnZm47CisJdTMyIGVycm9yX2NvZGU7Cit9OworCisvKgorICogRmV0Y2ggYSBndWVzdCBwdGUgZm9yIGEgZ3Vlc3QgdmlydHVhbCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbnQgRk5BTUUod2Fsa19hZGRyKShzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICp3YWxrZXIsCisJCQkgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyLAorCQkJICAgIGludCB3cml0ZV9mYXVsdCwgaW50IHVzZXJfZmF1bHQsIGludCBmZXRjaF9mYXVsdCkKK3sKKwlocGFfdCBocGE7CisJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDsKKwlwdF9lbGVtZW50X3QgKnB0ZXA7CisJcHRfZWxlbWVudF90IHJvb3Q7CisJZ2ZuX3QgdGFibGVfZ2ZuOworCisJcGdwcmludGsoIiVzOiBhZGRyICVseFxuIiwgX19GVU5DVElPTl9fLCBhZGRyKTsKKwl3YWxrZXItPmxldmVsID0gdmNwdS0+bW11LnJvb3RfbGV2ZWw7CisJd2Fsa2VyLT50YWJsZSA9IE5VTEw7CisJcm9vdCA9IHZjcHUtPmNyMzsKKyNpZiBQVFRZUEUgPT0gNjQKKwlpZiAoIWlzX2xvbmdfbW9kZSh2Y3B1KSkgeworCQl3YWxrZXItPnB0ZXAgPSAmdmNwdS0+cGRwdHJzWyhhZGRyID4+IDMwKSAmIDNdOworCQlyb290ID0gKndhbGtlci0+cHRlcDsKKwkJaWYgKCEocm9vdCAmIFBUX1BSRVNFTlRfTUFTSykpCisJCQlnb3RvIG5vdF9wcmVzZW50OworCQktLXdhbGtlci0+bGV2ZWw7CisJfQorI2VuZGlmCisJdGFibGVfZ2ZuID0gKHJvb3QgJiBQVDY0X0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOworCXdhbGtlci0+dGFibGVfZ2ZuW3dhbGtlci0+bGV2ZWwgLSAxXSA9IHRhYmxlX2dmbjsKKwlwZ3ByaW50aygiJXM6IHRhYmxlX2dmblslZF0gJWx4XG4iLCBfX0ZVTkNUSU9OX18sCisJCSB3YWxrZXItPmxldmVsIC0gMSwgdGFibGVfZ2ZuKTsKKwlzbG90ID0gZ2ZuX3RvX21lbXNsb3QodmNwdS0+a3ZtLCB0YWJsZV9nZm4pOworCWhwYSA9IHNhZmVfZ3BhX3RvX2hwYSh2Y3B1LCByb290ICYgUFQ2NF9CQVNFX0FERFJfTUFTSyk7CisJd2Fsa2VyLT50YWJsZSA9IGttYXBfYXRvbWljKHBmbl90b19wYWdlKGhwYSA+PiBQQUdFX1NISUZUKSwgS01fVVNFUjApOworCisJQVNTRVJUKCghaXNfbG9uZ19tb2RlKHZjcHUpICYmIGlzX3BhZSh2Y3B1KSkgfHwKKwkgICAgICAgKHZjcHUtPmNyMyAmIH4oUEFHRV9NQVNLIHwgQ1IzX0ZMQUdTX01BU0spKSA9PSAwKTsKKworCXdhbGtlci0+aW5oZXJpdGVkX2FyID0gUFRfVVNFUl9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSzsKKworCWZvciAoOzspIHsKKwkJaW50IGluZGV4ID0gUFRfSU5ERVgoYWRkciwgd2Fsa2VyLT5sZXZlbCk7CisJCWhwYV90IHBhZGRyOworCisJCXB0ZXAgPSAmd2Fsa2VyLT50YWJsZVtpbmRleF07CisJCUFTU0VSVCgoKHVuc2lnbmVkIGxvbmcpd2Fsa2VyLT50YWJsZSAmIFBBR0VfTUFTSykgPT0KKwkJICAgICAgICgodW5zaWduZWQgbG9uZylwdGVwICYgUEFHRV9NQVNLKSk7CisKKwkJaWYgKCFpc19wcmVzZW50X3B0ZSgqcHRlcCkpCisJCQlnb3RvIG5vdF9wcmVzZW50OworCisJCWlmICh3cml0ZV9mYXVsdCAmJiAhaXNfd3JpdGVibGVfcHRlKCpwdGVwKSkKKwkJCWlmICh1c2VyX2ZhdWx0IHx8IGlzX3dyaXRlX3Byb3RlY3Rpb24odmNwdSkpCisJCQkJZ290byBhY2Nlc3NfZXJyb3I7CisKKwkJaWYgKHVzZXJfZmF1bHQgJiYgISgqcHRlcCAmIFBUX1VTRVJfTUFTSykpCisJCQlnb3RvIGFjY2Vzc19lcnJvcjsKKworI2lmIFBUVFlQRSA9PSA2NAorCQlpZiAoZmV0Y2hfZmF1bHQgJiYgaXNfbngodmNwdSkgJiYgKCpwdGVwICYgUFQ2NF9OWF9NQVNLKSkKKwkJCWdvdG8gYWNjZXNzX2Vycm9yOworI2VuZGlmCisKKwkJaWYgKCEoKnB0ZXAgJiBQVF9BQ0NFU1NFRF9NQVNLKSkKKwkJCSpwdGVwIHw9IFBUX0FDQ0VTU0VEX01BU0s7IAkvKiBhdm9pZCBybXcgKi8KKworCQlpZiAod2Fsa2VyLT5sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKSB7CisJCQl3YWxrZXItPmdmbiA9ICgqcHRlcCAmIFBUX0JBU0VfQUREUl9NQVNLKQorCQkJCT4+IFBBR0VfU0hJRlQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3YWxrZXItPmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTAorCQkgICAgJiYgKCpwdGVwICYgUFRfUEFHRV9TSVpFX01BU0spCisJCSAgICAmJiAoUFRUWVBFID09IDY0IHx8IGlzX3BzZSh2Y3B1KSkpIHsKKwkJCXdhbGtlci0+Z2ZuID0gKCpwdGVwICYgUFRfRElSX0JBU0VfQUREUl9NQVNLKQorCQkJCT4+IFBBR0VfU0hJRlQ7CisJCQl3YWxrZXItPmdmbiArPSBQVF9JTkRFWChhZGRyLCBQVF9QQUdFX1RBQkxFX0xFVkVMKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHdhbGtlci0+bGV2ZWwgIT0gMyB8fCBpc19sb25nX21vZGUodmNwdSkpCisJCQl3YWxrZXItPmluaGVyaXRlZF9hciAmPSB3YWxrZXItPnRhYmxlW2luZGV4XTsKKwkJdGFibGVfZ2ZuID0gKCpwdGVwICYgUFRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CisJCXBhZGRyID0gc2FmZV9ncGFfdG9faHBhKHZjcHUsICpwdGVwICYgUFRfQkFTRV9BRERSX01BU0spOworCQlrdW5tYXBfYXRvbWljKHdhbGtlci0+dGFibGUsIEtNX1VTRVIwKTsKKwkJd2Fsa2VyLT50YWJsZSA9IGttYXBfYXRvbWljKHBmbl90b19wYWdlKHBhZGRyID4+IFBBR0VfU0hJRlQpLAorCQkJCQkgICAgS01fVVNFUjApOworCQktLXdhbGtlci0+bGV2ZWw7CisJCXdhbGtlci0+dGFibGVfZ2ZuW3dhbGtlci0+bGV2ZWwgLSAxIF0gPSB0YWJsZV9nZm47CisJCXBncHJpbnRrKCIlczogdGFibGVfZ2ZuWyVkXSAlbHhcbiIsIF9fRlVOQ1RJT05fXywKKwkJCSB3YWxrZXItPmxldmVsIC0gMSwgdGFibGVfZ2ZuKTsKKwl9CisJd2Fsa2VyLT5wdGVwID0gcHRlcDsKKwlwZ3ByaW50aygiJXM6IHB0ZSAlbGx4XG4iLCBfX0ZVTkNUSU9OX18sICh1NjQpKnB0ZXApOworCXJldHVybiAxOworCitub3RfcHJlc2VudDoKKwl3YWxrZXItPmVycm9yX2NvZGUgPSAwOworCWdvdG8gZXJyOworCithY2Nlc3NfZXJyb3I6CisJd2Fsa2VyLT5lcnJvcl9jb2RlID0gUEZFUlJfUFJFU0VOVF9NQVNLOworCitlcnI6CisJaWYgKHdyaXRlX2ZhdWx0KQorCQl3YWxrZXItPmVycm9yX2NvZGUgfD0gUEZFUlJfV1JJVEVfTUFTSzsKKwlpZiAodXNlcl9mYXVsdCkKKwkJd2Fsa2VyLT5lcnJvcl9jb2RlIHw9IFBGRVJSX1VTRVJfTUFTSzsKKwlpZiAoZmV0Y2hfZmF1bHQpCisJCXdhbGtlci0+ZXJyb3JfY29kZSB8PSBQRkVSUl9GRVRDSF9NQVNLOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBGTkFNRShyZWxlYXNlX3dhbGtlcikoc3RydWN0IGd1ZXN0X3dhbGtlciAqd2Fsa2VyKQoreworCWlmICh3YWxrZXItPnRhYmxlKQorCQlrdW5tYXBfYXRvbWljKHdhbGtlci0+dGFibGUsIEtNX1VTRVIwKTsKK30KKworc3RhdGljIHZvaWQgRk5BTUUoc2V0X3B0ZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZ3Vlc3RfcHRlLAorCQkJICAgdTY0ICpzaGFkb3dfcHRlLCB1NjQgYWNjZXNzX2JpdHMsIGdmbl90IGdmbikKK3sKKwlBU1NFUlQoKnNoYWRvd19wdGUgPT0gMCk7CisJYWNjZXNzX2JpdHMgJj0gZ3Vlc3RfcHRlOworCSpzaGFkb3dfcHRlID0gKGd1ZXN0X3B0ZSAmIFBUX1BURV9DT1BZX01BU0spOworCXNldF9wdGVfY29tbW9uKHZjcHUsIHNoYWRvd19wdGUsIGd1ZXN0X3B0ZSAmIFBUX0JBU0VfQUREUl9NQVNLLAorCQkgICAgICAgZ3Vlc3RfcHRlICYgUFRfRElSVFlfTUFTSywgYWNjZXNzX2JpdHMsIGdmbik7Cit9CisKK3N0YXRpYyB2b2lkIEZOQU1FKHNldF9wZGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X3BkZSwKKwkJCSAgIHU2NCAqc2hhZG93X3B0ZSwgdTY0IGFjY2Vzc19iaXRzLCBnZm5fdCBnZm4pCit7CisJZ3BhX3QgZ2FkZHI7CisKKwlBU1NFUlQoKnNoYWRvd19wdGUgPT0gMCk7CisJYWNjZXNzX2JpdHMgJj0gZ3Vlc3RfcGRlOworCWdhZGRyID0gKGdwYV90KWdmbiA8PCBQQUdFX1NISUZUOworCWlmIChQVFRZUEUgPT0gMzIgJiYgaXNfY3B1aWRfUFNFMzYoKSkKKwkJZ2FkZHIgfD0gKGd1ZXN0X3BkZSAmIFBUMzJfRElSX1BTRTM2X01BU0spIDw8CisJCQkoMzIgLSBQVDMyX0RJUl9QU0UzNl9TSElGVCk7CisJKnNoYWRvd19wdGUgPSBndWVzdF9wZGUgJiBQVF9QVEVfQ09QWV9NQVNLOworCXNldF9wdGVfY29tbW9uKHZjcHUsIHNoYWRvd19wdGUsIGdhZGRyLAorCQkgICAgICAgZ3Vlc3RfcGRlICYgUFRfRElSVFlfTUFTSywgYWNjZXNzX2JpdHMsIGdmbik7Cit9CisKKy8qCisgKiBGZXRjaCBhIHNoYWRvdyBwdGUgZm9yIGEgc3BlY2lmaWMgbGV2ZWwgaW4gdGhlIHBhZ2luZyBoaWVyYXJjaHkuCisgKi8KK3N0YXRpYyB1NjQgKkZOQU1FKGZldGNoKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGFkZHIsCisJCQkgICAgICBzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICp3YWxrZXIpCit7CisJaHBhX3Qgc2hhZG93X2FkZHI7CisJaW50IGxldmVsOworCXU2NCAqcHJldl9zaGFkb3dfZW50ID0gTlVMTDsKKwlwdF9lbGVtZW50X3QgKmd1ZXN0X2VudCA9IHdhbGtlci0+cHRlcDsKKworCWlmICghaXNfcHJlc2VudF9wdGUoKmd1ZXN0X2VudCkpCisJCXJldHVybiBOVUxMOworCisJc2hhZG93X2FkZHIgPSB2Y3B1LT5tbXUucm9vdF9ocGE7CisJbGV2ZWwgPSB2Y3B1LT5tbXUuc2hhZG93X3Jvb3RfbGV2ZWw7CisJaWYgKGxldmVsID09IFBUMzJFX1JPT1RfTEVWRUwpIHsKKwkJc2hhZG93X2FkZHIgPSB2Y3B1LT5tbXUucGFlX3Jvb3RbKGFkZHIgPj4gMzApICYgM107CisJCXNoYWRvd19hZGRyICY9IFBUNjRfQkFTRV9BRERSX01BU0s7CisJCS0tbGV2ZWw7CisJfQorCisJZm9yICg7IDsgbGV2ZWwtLSkgeworCQl1MzIgaW5kZXggPSBTSEFET1dfUFRfSU5ERVgoYWRkciwgbGV2ZWwpOworCQl1NjQgKnNoYWRvd19lbnQgPSAoKHU2NCAqKV9fdmEoc2hhZG93X2FkZHIpKSArIGluZGV4OworCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzaGFkb3dfcGFnZTsKKwkJdTY0IHNoYWRvd19wdGU7CisJCWludCBtZXRhcGh5c2ljYWw7CisJCWdmbl90IHRhYmxlX2dmbjsKKworCQlpZiAoaXNfcHJlc2VudF9wdGUoKnNoYWRvd19lbnQpIHx8IGlzX2lvX3B0ZSgqc2hhZG93X2VudCkpIHsKKwkJCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQkJCXJldHVybiBzaGFkb3dfZW50OworCQkJc2hhZG93X2FkZHIgPSAqc2hhZG93X2VudCAmIFBUNjRfQkFTRV9BRERSX01BU0s7CisJCQlwcmV2X3NoYWRvd19lbnQgPSBzaGFkb3dfZW50OworCQkJY29udGludWU7CisJCX0KKworCQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgeworCisJCQlpZiAod2Fsa2VyLT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpIHsKKwkJCQlpZiAocHJldl9zaGFkb3dfZW50KQorCQkJCQkqcHJldl9zaGFkb3dfZW50IHw9IFBUX1NIQURPV19QU19NQVJLOworCQkJCUZOQU1FKHNldF9wZGUpKHZjcHUsICpndWVzdF9lbnQsIHNoYWRvd19lbnQsCisJCQkJCSAgICAgICB3YWxrZXItPmluaGVyaXRlZF9hciwKKwkJCQkJICAgICAgIHdhbGtlci0+Z2ZuKTsKKwkJCX0gZWxzZSB7CisJCQkJQVNTRVJUKHdhbGtlci0+bGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCk7CisJCQkJRk5BTUUoc2V0X3B0ZSkodmNwdSwgKmd1ZXN0X2VudCwgc2hhZG93X2VudCwKKwkJCQkJICAgICAgIHdhbGtlci0+aW5oZXJpdGVkX2FyLAorCQkJCQkgICAgICAgd2Fsa2VyLT5nZm4pOworCQkJfQorCQkJcmV0dXJuIHNoYWRvd19lbnQ7CisJCX0KKworCQlpZiAobGV2ZWwgLSAxID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKKwkJICAgICYmIHdhbGtlci0+bGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSB7CisJCQltZXRhcGh5c2ljYWwgPSAxOworCQkJdGFibGVfZ2ZuID0gKCpndWVzdF9lbnQgJiBQVF9CQVNFX0FERFJfTUFTSykKKwkJCQk+PiBQQUdFX1NISUZUOworCQl9IGVsc2UgeworCQkJbWV0YXBoeXNpY2FsID0gMDsKKwkJCXRhYmxlX2dmbiA9IHdhbGtlci0+dGFibGVfZ2ZuW2xldmVsIC0gMl07CisJCX0KKwkJc2hhZG93X3BhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHRhYmxlX2dmbiwgYWRkciwgbGV2ZWwtMSwKKwkJCQkJICAgICAgIG1ldGFwaHlzaWNhbCwgc2hhZG93X2VudCk7CisJCXNoYWRvd19hZGRyID0gc2hhZG93X3BhZ2UtPnBhZ2VfaHBhOworCQlzaGFkb3dfcHRlID0gc2hhZG93X2FkZHIgfCBQVF9QUkVTRU5UX01BU0sgfCBQVF9BQ0NFU1NFRF9NQVNLCisJCQl8IFBUX1dSSVRBQkxFX01BU0sgfCBQVF9VU0VSX01BU0s7CisJCSpzaGFkb3dfZW50ID0gc2hhZG93X3B0ZTsKKwkJcHJldl9zaGFkb3dfZW50ID0gc2hhZG93X2VudDsKKwl9Cit9CisKKy8qCisgKiBUaGUgZ3Vlc3QgZmF1bHRlZCBmb3Igd3JpdGUuICBXZSBuZWVkIHRvCisgKgorICogLSBjaGVjayB3cml0ZSBwZXJtaXNzaW9ucworICogLSB1cGRhdGUgdGhlIGd1ZXN0IHB0ZSBkaXJ0eSBiaXQKKyAqIC0gdXBkYXRlIG91ciBvd24gZGlydHkgcGFnZSB0cmFja2luZyBzdHJ1Y3R1cmVzCisgKi8KK3N0YXRpYyBpbnQgRk5BTUUoZml4X3dyaXRlX3BmKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICAgdTY0ICpzaGFkb3dfZW50LAorCQkJICAgICAgIHN0cnVjdCBndWVzdF93YWxrZXIgKndhbGtlciwKKwkJCSAgICAgICBndmFfdCBhZGRyLAorCQkJICAgICAgIGludCB1c2VyLAorCQkJICAgICAgIGludCAqd3JpdGVfcHQpCit7CisJcHRfZWxlbWVudF90ICpndWVzdF9lbnQ7CisJaW50IHdyaXRhYmxlX3NoYWRvdzsKKwlnZm5fdCBnZm47CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZTsKKworCWlmIChpc193cml0ZWJsZV9wdGUoKnNoYWRvd19lbnQpKQorCQlyZXR1cm4gIXVzZXIgfHwgKCpzaGFkb3dfZW50ICYgUFRfVVNFUl9NQVNLKTsKKworCXdyaXRhYmxlX3NoYWRvdyA9ICpzaGFkb3dfZW50ICYgUFRfU0hBRE9XX1dSSVRBQkxFX01BU0s7CisJaWYgKHVzZXIpIHsKKwkJLyoKKwkJICogVXNlciBtb2RlIGFjY2Vzcy4gIEZhaWwgaWYgaXQncyBhIGtlcm5lbCBwYWdlIG9yIGEgcmVhZC1vbmx5CisJCSAqIHBhZ2UuCisJCSAqLworCQlpZiAoISgqc2hhZG93X2VudCAmIFBUX1NIQURPV19VU0VSX01BU0spIHx8ICF3cml0YWJsZV9zaGFkb3cpCisJCQlyZXR1cm4gMDsKKwkJQVNTRVJUKCpzaGFkb3dfZW50ICYgUFRfVVNFUl9NQVNLKTsKKwl9IGVsc2UKKwkJLyoKKwkJICogS2VybmVsIG1vZGUgYWNjZXNzLiAgRmFpbCBpZiBpdCdzIGEgcmVhZC1vbmx5IHBhZ2UgYW5kCisJCSAqIHN1cGVydmlzb3Igd3JpdGUgcHJvdGVjdGlvbiBpcyBlbmFibGVkLgorCQkgKi8KKwkJaWYgKCF3cml0YWJsZV9zaGFkb3cpIHsKKwkJCWlmIChpc193cml0ZV9wcm90ZWN0aW9uKHZjcHUpKQorCQkJCXJldHVybiAwOworCQkJKnNoYWRvd19lbnQgJj0gflBUX1VTRVJfTUFTSzsKKwkJfQorCisJZ3Vlc3RfZW50ID0gd2Fsa2VyLT5wdGVwOworCisJaWYgKCFpc19wcmVzZW50X3B0ZSgqZ3Vlc3RfZW50KSkgeworCQkqc2hhZG93X2VudCA9IDA7CisJCXJldHVybiAwOworCX0KKworCWdmbiA9IHdhbGtlci0+Z2ZuOworCisJaWYgKHVzZXIpIHsKKwkJLyoKKwkJICogVXNlcm1vZGUgcGFnZSBmYXVsdHMgd29uJ3QgYmUgZm9yIHBhZ2UgdGFibGUgdXBkYXRlcy4KKwkJICovCisJCXdoaWxlICgocGFnZSA9IGt2bV9tbXVfbG9va3VwX3BhZ2UodmNwdSwgZ2ZuKSkgIT0gTlVMTCkgeworCQkJcGdwcmludGsoIiVzOiB6YXAgJWx4ICV4XG4iLAorCQkJCSBfX0ZVTkNUSU9OX18sIGdmbiwgcGFnZS0+cm9sZS53b3JkKTsKKwkJCWt2bV9tbXVfemFwX3BhZ2UodmNwdSwgcGFnZSk7CisJCX0KKwl9IGVsc2UgaWYgKGt2bV9tbXVfbG9va3VwX3BhZ2UodmNwdSwgZ2ZuKSkgeworCQlwZ3ByaW50aygiJXM6IGZvdW5kIHNoYWRvdyBwYWdlIGZvciAlbHgsIG1hcmtpbmcgcm9cbiIsCisJCQkgX19GVU5DVElPTl9fLCBnZm4pOworCQkqZ3Vlc3RfZW50IHw9IFBUX0RJUlRZX01BU0s7CisJCSp3cml0ZV9wdCA9IDE7CisJCXJldHVybiAwOworCX0KKwltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCBnZm4pOworCSpzaGFkb3dfZW50IHw9IFBUX1dSSVRBQkxFX01BU0s7CisJKmd1ZXN0X2VudCB8PSBQVF9ESVJUWV9NQVNLOworCXJtYXBfYWRkKHZjcHUsIHNoYWRvd19lbnQpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBQYWdlIGZhdWx0IGhhbmRsZXIuICBUaGVyZSBhcmUgc2V2ZXJhbCBjYXVzZXMgZm9yIGEgcGFnZSBmYXVsdDoKKyAqICAgLSB0aGVyZSBpcyBubyBzaGFkb3cgcHRlIGZvciB0aGUgZ3Vlc3QgcHRlCisgKiAgIC0gd3JpdGUgYWNjZXNzIHRocm91Z2ggYSBzaGFkb3cgcHRlIG1hcmtlZCByZWFkIG9ubHkgc28gdGhhdCB3ZSBjYW4gc2V0CisgKiAgICAgdGhlIGRpcnR5IGJpdAorICogICAtIHdyaXRlIGFjY2VzcyB0byBhIHNoYWRvdyBwdGUgbWFya2VkIHJlYWQgb25seSBzbyB3ZSBjYW4gdXBkYXRlIHRoZSBwYWdlCisgKiAgICAgZGlydHkgYml0bWFwLCB3aGVuIHVzZXJzcGFjZSByZXF1ZXN0cyBpdAorICogICAtIG1taW8gYWNjZXNzOyBpbiB0aGlzIGNhc2Ugd2Ugd2lsbCBuZXZlciBpbnN0YWxsIGEgcHJlc2VudCBzaGFkb3cgcHRlCisgKiAgIC0gbm9ybWFsIGd1ZXN0IHBhZ2UgZmF1bHQgZHVlIHRvIHRoZSBndWVzdCBwdGUgbWFya2VkIG5vdCBwcmVzZW50LCBub3QKKyAqICAgICB3cml0YWJsZSwgb3Igbm90IGV4ZWN1dGFibGUKKyAqCisgKiAgUmV0dXJuczogMSBpZiB3ZSBuZWVkIHRvIGVtdWxhdGUgdGhlIGluc3RydWN0aW9uLCAwIG90aGVyd2lzZSwgb3IKKyAqICAgICAgICAgICBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IEZOQU1FKHBhZ2VfZmF1bHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkciwKKwkJCSAgICAgICB1MzIgZXJyb3JfY29kZSkKK3sKKwlpbnQgd3JpdGVfZmF1bHQgPSBlcnJvcl9jb2RlICYgUEZFUlJfV1JJVEVfTUFTSzsKKwlpbnQgdXNlcl9mYXVsdCA9IGVycm9yX2NvZGUgJiBQRkVSUl9VU0VSX01BU0s7CisJaW50IGZldGNoX2ZhdWx0ID0gZXJyb3JfY29kZSAmIFBGRVJSX0ZFVENIX01BU0s7CisJc3RydWN0IGd1ZXN0X3dhbGtlciB3YWxrZXI7CisJdTY0ICpzaGFkb3dfcHRlOworCWludCBmaXhlZDsKKwlpbnQgd3JpdGVfcHQgPSAwOworCWludCByOworCisJcGdwcmludGsoIiVzOiBhZGRyICVseCBlcnIgJXhcbiIsIF9fRlVOQ1RJT05fXywgYWRkciwgZXJyb3JfY29kZSk7CisJa3ZtX21tdV9hdWRpdCh2Y3B1LCAicHJlIHBhZ2UgZmF1bHQiKTsKKworCXIgPSBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwkvKgorCSAqIExvb2sgdXAgdGhlIHNoYWRvdyBwdGUgZm9yIHRoZSBmYXVsdGluZyBhZGRyZXNzLgorCSAqLworCXIgPSBGTkFNRSh3YWxrX2FkZHIpKCZ3YWxrZXIsIHZjcHUsIGFkZHIsIHdyaXRlX2ZhdWx0LCB1c2VyX2ZhdWx0LAorCQkJICAgICBmZXRjaF9mYXVsdCk7CisKKwkvKgorCSAqIFRoZSBwYWdlIGlzIG5vdCBtYXBwZWQgYnkgdGhlIGd1ZXN0LiAgTGV0IHRoZSBndWVzdCBoYW5kbGUgaXQuCisJICovCisJaWYgKCFyKSB7CisJCXBncHJpbnRrKCIlczogZ3Vlc3QgcGFnZSBmYXVsdFxuIiwgX19GVU5DVElPTl9fKTsKKwkJaW5qZWN0X3BhZ2VfZmF1bHQodmNwdSwgYWRkciwgd2Fsa2VyLmVycm9yX2NvZGUpOworCQlGTkFNRShyZWxlYXNlX3dhbGtlcikoJndhbGtlcik7CisJCXJldHVybiAwOworCX0KKworCXNoYWRvd19wdGUgPSBGTkFNRShmZXRjaCkodmNwdSwgYWRkciwgJndhbGtlcik7CisJcGdwcmludGsoIiVzOiBzaGFkb3cgcHRlICVwICVsbHhcbiIsIF9fRlVOQ1RJT05fXywKKwkJIHNoYWRvd19wdGUsICpzaGFkb3dfcHRlKTsKKworCS8qCisJICogVXBkYXRlIHRoZSBzaGFkb3cgcHRlLgorCSAqLworCWlmICh3cml0ZV9mYXVsdCkKKwkJZml4ZWQgPSBGTkFNRShmaXhfd3JpdGVfcGYpKHZjcHUsIHNoYWRvd19wdGUsICZ3YWxrZXIsIGFkZHIsCisJCQkJCSAgICB1c2VyX2ZhdWx0LCAmd3JpdGVfcHQpOworCWVsc2UKKwkJZml4ZWQgPSBmaXhfcmVhZF9wZihzaGFkb3dfcHRlKTsKKworCXBncHJpbnRrKCIlczogdXBkYXRlZCBzaGFkb3cgcHRlICVwICVsbHhcbiIsIF9fRlVOQ1RJT05fXywKKwkJIHNoYWRvd19wdGUsICpzaGFkb3dfcHRlKTsKKworCUZOQU1FKHJlbGVhc2Vfd2Fsa2VyKSgmd2Fsa2VyKTsKKworCS8qCisJICogbW1pbzogZW11bGF0ZSBpZiBhY2Nlc3NpYmxlLCBvdGhlcndpc2UgaXRzIGEgZ3Vlc3QgZmF1bHQuCisJICovCisJaWYgKGlzX2lvX3B0ZSgqc2hhZG93X3B0ZSkpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJKytrdm1fc3RhdC5wZl9maXhlZDsKKwlrdm1fbW11X2F1ZGl0KHZjcHUsICJwb3N0IHBhZ2UgZmF1bHQgKGZpeGVkKSIpOworCisJcmV0dXJuIHdyaXRlX3B0OworfQorCitzdGF0aWMgZ3BhX3QgRk5BTUUoZ3ZhX3RvX2dwYSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2YWRkcikKK3sKKwlzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyIHdhbGtlcjsKKwlwdF9lbGVtZW50X3QgZ3Vlc3RfcHRlOworCWdwYV90IGdwYTsKKworCUZOQU1FKHdhbGtfYWRkcikoJndhbGtlciwgdmNwdSwgdmFkZHIsIDAsIDAsIDApOworCWd1ZXN0X3B0ZSA9ICp3YWxrZXIucHRlcDsKKwlGTkFNRShyZWxlYXNlX3dhbGtlcikoJndhbGtlcik7CisKKwlpZiAoIWlzX3ByZXNlbnRfcHRlKGd1ZXN0X3B0ZSkpCisJCXJldHVybiBVTk1BUFBFRF9HVkE7CisKKwlpZiAod2Fsa2VyLmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgeworCQlBU1NFUlQoKGd1ZXN0X3B0ZSAmIFBUX1BBR0VfU0laRV9NQVNLKSk7CisJCUFTU0VSVChQVFRZUEUgPT0gNjQgfHwgaXNfcHNlKHZjcHUpKTsKKworCQlncGEgPSAoZ3Vlc3RfcHRlICYgUFRfRElSX0JBU0VfQUREUl9NQVNLKSB8ICh2YWRkciAmCisJCQkoUFRfTEVWRUxfTUFTSyhQVF9QQUdFX1RBQkxFX0xFVkVMKSB8IH5QQUdFX01BU0spKTsKKworCQlpZiAoUFRUWVBFID09IDMyICYmIGlzX2NwdWlkX1BTRTM2KCkpCisJCQlncGEgfD0gKGd1ZXN0X3B0ZSAmIFBUMzJfRElSX1BTRTM2X01BU0spIDw8CisJCQkJCSgzMiAtIFBUMzJfRElSX1BTRTM2X1NISUZUKTsKKwl9IGVsc2UgeworCQlncGEgPSAoZ3Vlc3RfcHRlICYgUFRfQkFTRV9BRERSX01BU0spOworCQlncGEgfD0gKHZhZGRyICYgflBBR0VfTUFTSyk7CisJfQorCisJcmV0dXJuIGdwYTsKK30KKworI3VuZGVmIHB0X2VsZW1lbnRfdAorI3VuZGVmIGd1ZXN0X3dhbGtlcgorI3VuZGVmIEZOQU1FCisjdW5kZWYgUFRfQkFTRV9BRERSX01BU0sKKyN1bmRlZiBQVF9JTkRFWAorI3VuZGVmIFNIQURPV19QVF9JTkRFWAorI3VuZGVmIFBUX0xFVkVMX01BU0sKKyN1bmRlZiBQVF9QVEVfQ09QWV9NQVNLCisjdW5kZWYgUFRfTk9OX1BURV9DT1BZX01BU0sKKyN1bmRlZiBQVF9ESVJfQkFTRV9BRERSX01BU0sKKyN1bmRlZiBQVF9NQVhfRlVMTF9MRVZFTFMKZGlmZiAtLWdpdCBhL2RyaXZlcnMva3ZtL3NlZ21lbnRfZGVzY3JpcHRvci5oIGIvZHJpdmVycy9rdm0vc2VnbWVudF9kZXNjcmlwdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmZGY0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMva3ZtL3NlZ21lbnRfZGVzY3JpcHRvci5oCkBAIC0wLDAgKzEsMTcgQEAKK3N0cnVjdCBzZWdtZW50X2Rlc2NyaXB0b3IgeworCXUxNiBsaW1pdF9sb3c7CisJdTE2IGJhc2VfbG93OworCXU4ICBiYXNlX21pZDsKKwl1OCAgdHlwZSA6IDQ7CisJdTggIHN5c3RlbSA6IDE7CisJdTggIGRwbCA6IDI7CisJdTggIHByZXNlbnQgOiAxOworCXU4ICBsaW1pdF9oaWdoIDogNDsKKwl1OCAgYXZsIDogMTsKKwl1OCAgbG9uZ19tb2RlIDogMTsKKwl1OCAgZGVmYXVsdF9vcCA6IDE7CisJdTggIGdyYW51bGFyaXR5IDogMTsKKwl1OCAgYmFzZV9oaWdoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2t2bS9zdm0uYyBiL2RyaXZlcnMva3ZtL3N2bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OWRmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2t2bS9zdm0uYwpAQCAtMCwwICsxLDE3MjEgQEAKKy8qCisgKiBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIGRyaXZlciBmb3IgTGludXgKKyAqCisgKiBBTUQgU1ZNIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUXVtcmFuZXQsIEluYy4KKyAqCisgKiBBdXRob3JzOgorICogICBZYW5pdiBLYW1heSAgPHlhbml2QHF1bXJhbmV0LmNvbT4KKyAqICAgQXZpIEtpdml0eSAgIDxhdmlAcXVtcmFuZXQuY29tPgorICoKKyAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4gIFNlZQorICogdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisKKyNpbmNsdWRlICJrdm1fc3ZtLmgiCisjaW5jbHVkZSAieDg2X2VtdWxhdGUuaCIKKworTU9EVUxFX0FVVEhPUigiUXVtcmFuZXQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBJT1BNX0FMTE9DX09SREVSIDIKKyNkZWZpbmUgTVNSUE1fQUxMT0NfT1JERVIgMQorCisjZGVmaW5lIERCX1ZFQ1RPUiAxCisjZGVmaW5lIFVEX1ZFQ1RPUiA2CisjZGVmaW5lIEdQX1ZFQ1RPUiAxMworCisjZGVmaW5lIERSN19HRF9NQVNLICgxIDw8IDEzKQorI2RlZmluZSBEUjZfQkRfTUFTSyAoMSA8PCAxMykKKyNkZWZpbmUgQ1I0X0RFX01BU0sgKDFVTCA8PCAzKQorCisjZGVmaW5lIFNFR19UWVBFX0xEVCAyCisjZGVmaW5lIFNFR19UWVBFX0JVU1lfVFNTMTYgMworCisjZGVmaW5lIEtWTV9FRkVSX0xNQSAoMSA8PCAxMCkKKyNkZWZpbmUgS1ZNX0VGRVJfTE1FICgxIDw8IDgpCisKK3Vuc2lnbmVkIGxvbmcgaW9wbV9iYXNlOwordW5zaWduZWQgbG9uZyBtc3JwbV9iYXNlOworCitzdHJ1Y3Qga3ZtX2xkdHRzc19kZXNjIHsKKwl1MTYgbGltaXQwOworCXUxNiBiYXNlMDsKKwl1bnNpZ25lZCBiYXNlMSA6IDgsIHR5cGUgOiA1LCBkcGwgOiAyLCBwIDogMTsKKwl1bnNpZ25lZCBsaW1pdDEgOiA0LCB6ZXJvMCA6IDMsIGcgOiAxLCBiYXNlMiA6IDg7CisJdTMyIGJhc2UzOworCXUzMiB6ZXJvMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzdm1fY3B1X2RhdGEgeworCWludCBjcHU7CisKKwl1aW50NjRfdCBhc2lkX2dlbmVyYXRpb247CisJdWludDMyX3QgbWF4X2FzaWQ7CisJdWludDMyX3QgbmV4dF9hc2lkOworCXN0cnVjdCBrdm1fbGR0dHNzX2Rlc2MgKnRzc19kZXNjOworCisJc3RydWN0IHBhZ2UgKnNhdmVfYXJlYTsKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICosIHN2bV9kYXRhKTsKKworc3RydWN0IHN2bV9pbml0X2RhdGEgeworCWludCBjcHU7CisJaW50IHI7Cit9OworCitzdGF0aWMgdTMyIG1zcnBtX3Jhbmdlc1tdID0gezAsIDB4YzAwMDAwMDAsIDB4YzAwMTAwMDB9OworCisjZGVmaW5lIE5VTV9NU1JfTUFQUyAoc2l6ZW9mKG1zcnBtX3JhbmdlcykgLyBzaXplb2YoKm1zcnBtX3JhbmdlcykpCisjZGVmaW5lIE1TUlNfUkFOR0VfU0laRSAyMDQ4CisjZGVmaW5lIE1TUlNfSU5fUkFOR0UgKE1TUlNfUkFOR0VfU0laRSAqIDggLyAyKQorCisjZGVmaW5lIE1BWF9JTlNUX1NJWkUgMTUKKworc3RhdGljIHVuc2lnbmVkIGdldF9hZGRyX3NpemUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2EgPSAmdmNwdS0+c3ZtLT52bWNiLT5zYXZlOworCXUxNiBjc19hdHRyaWI7CisKKwlpZiAoIShzYS0+Y3IwICYgQ1IwX1BFX01BU0spIHx8IChzYS0+cmZsYWdzICYgWDg2X0VGTEFHU19WTSkpCisJCXJldHVybiAyOworCisJY3NfYXR0cmliID0gc2EtPmNzLmF0dHJpYjsKKworCXJldHVybiAoY3NfYXR0cmliICYgU1ZNX1NFTEVDVE9SX0xfTUFTSykgPyA4IDoKKwkJCQkoY3NfYXR0cmliICYgU1ZNX1NFTEVDVE9SX0RCX01BU0spID8gNCA6IDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggcG9wX2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IHdvcmRfaW5kZXggPSBfX2Zmcyh2Y3B1LT5pcnFfc3VtbWFyeSk7CisJaW50IGJpdF9pbmRleCA9IF9fZmZzKHZjcHUtPmlycV9wZW5kaW5nW3dvcmRfaW5kZXhdKTsKKwlpbnQgaXJxID0gd29yZF9pbmRleCAqIEJJVFNfUEVSX0xPTkcgKyBiaXRfaW5kZXg7CisKKwljbGVhcl9iaXQoYml0X2luZGV4LCAmdmNwdS0+aXJxX3BlbmRpbmdbd29yZF9pbmRleF0pOworCWlmICghdmNwdS0+aXJxX3BlbmRpbmdbd29yZF9pbmRleF0pCisJCWNsZWFyX2JpdCh3b3JkX2luZGV4LCAmdmNwdS0+aXJxX3N1bW1hcnkpOworCXJldHVybiBpcnE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXNoX2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IGlycSkKK3sKKwlzZXRfYml0KGlycSwgdmNwdS0+aXJxX3BlbmRpbmcpOworCXNldF9iaXQoaXJxIC8gQklUU19QRVJfTE9ORywgJnZjcHUtPmlycV9zdW1tYXJ5KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZ2kodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUgKFNWTV9DTEdJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0Z2kodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUgKFNWTV9TVEdJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGludmxwZ2EodW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgYXNpZCkKK3sKKwlhc20gdm9sYXRpbGUgKFNWTV9JTlZMUEdBIDo6ICJhIihhZGRyKSwgImMiKGFzaWQpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9yZWFkX2NyMih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY3IyOworCisJYXNtIHZvbGF0aWxlICgibW92ICUlY3IyLCAlMCIgOiAiPXIiIChjcjIpKTsKKwlyZXR1cm4gY3IyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3dyaXRlX2NyMih1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlY3IyIiA6OiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9kcjYodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGRyNjsKKworCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyNiwgJTAiIDogIj1yIiAoZHI2KSk7CisJcmV0dXJuIGRyNjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2RyNih1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHI2IiA6OiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9kcjcodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGRyNzsKKworCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyNywgJTAiIDogIj1yIiAoZHI3KSk7CisJcmV0dXJuIGRyNzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2RyNyh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHI3IiA6OiAiciIgKHZhbCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZm9yY2VfbmV3X2FzaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPnN2bS0+YXNpZF9nZW5lcmF0aW9uLS07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9ndWVzdF90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWZvcmNlX25ld19hc2lkKHZjcHUpOworfQorCitzdGF0aWMgdm9pZCBzdm1fc2V0X2VmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZWZlcikKK3sKKwlpZiAoIShlZmVyICYgS1ZNX0VGRVJfTE1BKSkKKwkJZWZlciAmPSB+S1ZNX0VGRVJfTE1FOworCisJdmNwdS0+c3ZtLT52bWNiLT5zYXZlLmVmZXIgPSBlZmVyIHwgTVNSX0VGRVJfU1ZNRV9NQVNLOworCXZjcHUtPnNoYWRvd19lZmVyID0gZWZlcjsKK30KKworc3RhdGljIHZvaWQgc3ZtX2luamVjdF9ncChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGVycm9yX2NvZGUpCit7CisJdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2luaiA9IAlTVk1fRVZUSU5KX1ZBTElEIHwKKwkJCQkJCVNWTV9FVlRJTkpfVkFMSURfRVJSIHwKKwkJCQkJCVNWTV9FVlRJTkpfVFlQRV9FWEVQVCB8CisJCQkJCQlHUF9WRUNUT1I7CisJdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2lual9lcnIgPSBlcnJvcl9jb2RlOworfQorCitzdGF0aWMgdm9pZCBpbmplY3RfdWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC5ldmVudF9pbmogPSAJU1ZNX0VWVElOSl9WQUxJRCB8CisJCQkJCQlTVk1fRVZUSU5KX1RZUEVfRVhFUFQgfAorCQkJCQkJVURfVkVDVE9SOworfQorCitzdGF0aWMgdm9pZCBpbmplY3RfZGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC5ldmVudF9pbmogPSAJU1ZNX0VWVElOSl9WQUxJRCB8CisJCQkJCQlTVk1fRVZUSU5KX1RZUEVfRVhFUFQgfAorCQkJCQkJREJfVkVDVE9SOworfQorCitzdGF0aWMgaW50IGlzX3BhZ2VfZmF1bHQodWludDMyX3QgaW5mbykKK3sKKwlpbmZvICY9IFNWTV9FVlRJTkpfVkVDX01BU0sgfCBTVk1fRVZUSU5KX1RZUEVfTUFTSyB8IFNWTV9FVlRJTkpfVkFMSUQ7CisJcmV0dXJuIGluZm8gPT0gKFBGX1ZFQ1RPUiB8IFNWTV9FVlRJTkpfVkFMSUQgfCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQpOworfQorCitzdGF0aWMgaW50IGlzX2V4dGVybmFsX2ludGVycnVwdCh1MzIgaW5mbykKK3sKKwlpbmZvICY9IFNWTV9FVlRJTkpfVFlQRV9NQVNLIHwgU1ZNX0VWVElOSl9WQUxJRDsKKwlyZXR1cm4gaW5mbyA9PSAoU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9JTlRSKTsKK30KKworc3RhdGljIHZvaWQgc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKCF2Y3B1LT5zdm0tPm5leHRfcmlwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogTk9QXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWlmICh2Y3B1LT5zdm0tPm5leHRfcmlwIC0gdmNwdS0+c3ZtLT52bWNiLT5zYXZlLnJpcCA+IDE1KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlwIDB4JWxseCBuZXh0IDB4JWxseFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywKKwkJICAgICAgIHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5yaXAsCisJCSAgICAgICB2Y3B1LT5zdm0tPm5leHRfcmlwKTsKKwl9CisKKwl2Y3B1LT5yaXAgPSB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmlwID0gdmNwdS0+c3ZtLT5uZXh0X3JpcDsKKwl2Y3B1LT5zdm0tPnZtY2ItPmNvbnRyb2wuaW50X3N0YXRlICY9IH5TVk1fSU5URVJSVVBUX1NIQURPV19NQVNLOworCisJdmNwdS0+aW50ZXJydXB0X3dpbmRvd19vcGVuID0gMTsKK30KKworc3RhdGljIGludCBoYXNfc3ZtKHZvaWQpCit7CisJdWludDMyX3QgZWF4LCBlYngsIGVjeCwgZWR4OworCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkgeworCQlwcmludGsoS0VSTl9JTkZPICJoYXNfc3ZtOiBub3QgYW1kXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY3B1aWQoMHg4MDAwMDAwMCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisJaWYgKGVheCA8IFNWTV9DUFVJRF9GVU5DKSB7CisJCXByaW50ayhLRVJOX0lORk8gImhhc19zdm06IGNhbid0IGV4ZWN1dGUgY3B1aWRfODAwMDAwMGFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwljcHVpZCgweDgwMDAwMDAxLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKwlpZiAoIShlY3ggJiAoMSA8PCBTVk1fQ1BVSURfRkVBVFVSRV9TSElGVCkpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJoYXNfc3ZtOiBzdm0gbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc3ZtX2hhcmR3YXJlX2Rpc2FibGUodm9pZCAqZ2FyYmFnZSkKK3sKKwlzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzdm1fZGF0YQorCQk9IHBlcl9jcHUoc3ZtX2RhdGEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCisJaWYgKHN2bV9kYXRhKSB7CisJCXVpbnQ2NF90IGVmZXI7CisKKwkJd3Jtc3JsKE1TUl9WTV9IU0FWRV9QQSwgMCk7CisJCXJkbXNybChNU1JfRUZFUiwgZWZlcik7CisJCXdybXNybChNU1JfRUZFUiwgZWZlciAmIH5NU1JfRUZFUl9TVk1FX01BU0spOworCQlwZXJfY3B1KHN2bV9kYXRhLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IDA7CisJCV9fZnJlZV9wYWdlKHN2bV9kYXRhLT5zYXZlX2FyZWEpOworCQlrZnJlZShzdm1fZGF0YSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdm1faGFyZHdhcmVfZW5hYmxlKHZvaWQgKmdhcmJhZ2UpCit7CisKKwlzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzdm1fZGF0YTsKKwl1aW50NjRfdCBlZmVyOworI2lmZGVmIENPTkZJR19YODZfNjQKKwlzdHJ1Y3QgZGVzY19wdHIgZ2R0X2Rlc2NyOworI2Vsc2UKKwlzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0IGdkdF9kZXNjcjsKKyNlbmRpZgorCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0OworCWludCBtZSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoIWhhc19zdm0oKSkgeworCQlwcmludGsoS0VSTl9FUlIgInN2bV9jcHVfaW5pdDogZXJyIEVPUE5PVFNVUFAgb24gJWRcbiIsIG1lKTsKKwkJcmV0dXJuOworCX0KKwlzdm1fZGF0YSA9IHBlcl9jcHUoc3ZtX2RhdGEsIG1lKTsKKworCWlmICghc3ZtX2RhdGEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzdm1fY3B1X2luaXQ6IHN2bV9kYXRhIGlzIE5VTEwgb24gJWRcbiIsCisJCSAgICAgICBtZSk7CisJCXJldHVybjsKKwl9CisKKwlzdm1fZGF0YS0+YXNpZF9nZW5lcmF0aW9uID0gMTsKKwlzdm1fZGF0YS0+bWF4X2FzaWQgPSBjcHVpZF9lYngoU1ZNX0NQVUlEX0ZVTkMpIC0gMTsKKwlzdm1fZGF0YS0+bmV4dF9hc2lkID0gc3ZtX2RhdGEtPm1heF9hc2lkICsgMTsKKworCWFzbSB2b2xhdGlsZSAoICJzZ2R0ICUwIiA6ICI9bSIoZ2R0X2Rlc2NyKSApOworCWdkdCA9IChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKilnZHRfZGVzY3IuYWRkcmVzczsKKwlzdm1fZGF0YS0+dHNzX2Rlc2MgPSAoc3RydWN0IGt2bV9sZHR0c3NfZGVzYyAqKShnZHQgKyBHRFRfRU5UUllfVFNTKTsKKworCXJkbXNybChNU1JfRUZFUiwgZWZlcik7CisJd3Jtc3JsKE1TUl9FRkVSLCBlZmVyIHwgTVNSX0VGRVJfU1ZNRV9NQVNLKTsKKworCXdybXNybChNU1JfVk1fSFNBVkVfUEEsCisJICAgICAgIHBhZ2VfdG9fcGZuKHN2bV9kYXRhLT5zYXZlX2FyZWEpIDw8IFBBR0VfU0hJRlQpOworfQorCitzdGF0aWMgaW50IHN2bV9jcHVfaW5pdChpbnQgY3B1KQoreworCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhOworCWludCByOworCisJc3ZtX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3ZtX2NwdV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdm1fZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3ZtX2RhdGEtPmNwdSA9IGNwdTsKKwlzdm1fZGF0YS0+c2F2ZV9hcmVhID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwlyID0gLUVOT01FTTsKKwlpZiAoIXN2bV9kYXRhLT5zYXZlX2FyZWEpCisJCWdvdG8gZXJyXzE7CisKKwlwZXJfY3B1KHN2bV9kYXRhLCBjcHUpID0gc3ZtX2RhdGE7CisKKwlyZXR1cm4gMDsKKworZXJyXzE6CisJa2ZyZWUoc3ZtX2RhdGEpOworCXJldHVybiByOworCit9CisKK3N0YXRpYyBpbnQgc2V0X21zcl9pbnRlcmNlcHRpb24odTMyICptc3JwbSwgdW5zaWduZWQgbXNyLAorCQkJCWludCByZWFkLCBpbnQgd3JpdGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX01TUl9NQVBTOyBpKyspIHsKKwkJaWYgKG1zciA+PSBtc3JwbV9yYW5nZXNbaV0gJiYKKwkJICAgIG1zciA8IG1zcnBtX3Jhbmdlc1tpXSArIE1TUlNfSU5fUkFOR0UpIHsKKwkJCXUzMiBtc3Jfb2Zmc2V0ID0gKGkgKiBNU1JTX0lOX1JBTkdFICsgbXNyIC0KKwkJCQkJICBtc3JwbV9yYW5nZXNbaV0pICogMjsKKworCQkJdTMyICpiYXNlID0gbXNycG0gKyAobXNyX29mZnNldCAvIDMyKTsKKwkJCXUzMiBtc3Jfc2hpZnQgPSBtc3Jfb2Zmc2V0ICUgMzI7CisJCQl1MzIgbWFzayA9ICgod3JpdGUpID8gMCA6IDIpIHwgKChyZWFkKSA/IDAgOiAxKTsKKwkJCSpiYXNlID0gKCpiYXNlICYgfigweDMgPDwgbXNyX3NoaWZ0KSkgfAorCQkJCShtYXNrIDw8IG1zcl9zaGlmdCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vdCBmb3VuZCAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIG1zcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKQoreworCWludCBjcHU7CisJc3RydWN0IHBhZ2UgKmlvcG1fcGFnZXM7CisJc3RydWN0IHBhZ2UgKm1zcnBtX3BhZ2VzOworCXZvaWQgKm1zcnBtX3ZhOworCWludCByOworCisJa3ZtX2VtdWxhdG9yX3dhbnRfZ3JvdXA3X2ludmxwZygpOworCisJaW9wbV9wYWdlcyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIElPUE1fQUxMT0NfT1JERVIpOworCisJaWYgKCFpb3BtX3BhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQocGFnZV9hZGRyZXNzKGlvcG1fcGFnZXMpLCAweGZmLAorCQkJCQlQQUdFX1NJWkUgKiAoMSA8PCBJT1BNX0FMTE9DX09SREVSKSk7CisJaW9wbV9iYXNlID0gcGFnZV90b19wZm4oaW9wbV9wYWdlcykgPDwgUEFHRV9TSElGVDsKKworCisJbXNycG1fcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLCBNU1JQTV9BTExPQ19PUkRFUik7CisKKwlyID0gLUVOT01FTTsKKwlpZiAoIW1zcnBtX3BhZ2VzKQorCQlnb3RvIGVycl8xOworCisJbXNycG1fdmEgPSBwYWdlX2FkZHJlc3MobXNycG1fcGFnZXMpOworCW1lbXNldChtc3JwbV92YSwgMHhmZiwgUEFHRV9TSVpFICogKDEgPDwgTVNSUE1fQUxMT0NfT1JERVIpKTsKKwltc3JwbV9iYXNlID0gcGFnZV90b19wZm4obXNycG1fcGFnZXMpIDw8IFBBR0VfU0hJRlQ7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2V0X21zcl9pbnRlcmNlcHRpb24obXNycG1fdmEsIE1TUl9HU19CQVNFLCAxLCAxKTsKKwlzZXRfbXNyX2ludGVyY2VwdGlvbihtc3JwbV92YSwgTVNSX0ZTX0JBU0UsIDEsIDEpOworCXNldF9tc3JfaW50ZXJjZXB0aW9uKG1zcnBtX3ZhLCBNU1JfS0VSTkVMX0dTX0JBU0UsIDEsIDEpOworCXNldF9tc3JfaW50ZXJjZXB0aW9uKG1zcnBtX3ZhLCBNU1JfTFNUQVIsIDEsIDEpOworCXNldF9tc3JfaW50ZXJjZXB0aW9uKG1zcnBtX3ZhLCBNU1JfQ1NUQVIsIDEsIDEpOworCXNldF9tc3JfaW50ZXJjZXB0aW9uKG1zcnBtX3ZhLCBNU1JfU1lTQ0FMTF9NQVNLLCAxLCAxKTsKKyNlbmRpZgorCXNldF9tc3JfaW50ZXJjZXB0aW9uKG1zcnBtX3ZhLCBNU1JfSzZfU1RBUiwgMSwgMSk7CisJc2V0X21zcl9pbnRlcmNlcHRpb24obXNycG1fdmEsIE1TUl9JQTMyX1NZU0VOVEVSX0NTLCAxLCAxKTsKKwlzZXRfbXNyX2ludGVyY2VwdGlvbihtc3JwbV92YSwgTVNSX0lBMzJfU1lTRU5URVJfRVNQLCAxLCAxKTsKKwlzZXRfbXNyX2ludGVyY2VwdGlvbihtc3JwbV92YSwgTVNSX0lBMzJfU1lTRU5URVJfRUlQLCAxLCAxKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXIgPSBzdm1fY3B1X2luaXQoY3B1KTsKKwkJaWYgKHIpCisJCQlnb3RvIGVycl8yOworCX0KKwlyZXR1cm4gMDsKKworZXJyXzI6CisJX19mcmVlX3BhZ2VzKG1zcnBtX3BhZ2VzLCBNU1JQTV9BTExPQ19PUkRFUik7CisJbXNycG1fYmFzZSA9IDA7CitlcnJfMToKKwlfX2ZyZWVfcGFnZXMoaW9wbV9wYWdlcywgSU9QTV9BTExPQ19PUkRFUik7CisJaW9wbV9iYXNlID0gMDsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIF9fZXhpdCB2b2lkIHN2bV9oYXJkd2FyZV91bnNldHVwKHZvaWQpCit7CisJX19mcmVlX3BhZ2VzKHBmbl90b19wYWdlKG1zcnBtX2Jhc2UgPj4gUEFHRV9TSElGVCksIE1TUlBNX0FMTE9DX09SREVSKTsKKwlfX2ZyZWVfcGFnZXMocGZuX3RvX3BhZ2UoaW9wbV9iYXNlID4+IFBBR0VfU0hJRlQpLCBJT1BNX0FMTE9DX09SREVSKTsKKwlpb3BtX2Jhc2UgPSBtc3JwbV9iYXNlID0gMDsKK30KKworc3RhdGljIHZvaWQgaW5pdF9zZWcoc3RydWN0IHZtY2Jfc2VnICpzZWcpCit7CisJc2VnLT5zZWxlY3RvciA9IDA7CisJc2VnLT5hdHRyaWIgPSBTVk1fU0VMRUNUT1JfUF9NQVNLIHwgU1ZNX1NFTEVDVE9SX1NfTUFTSyB8CisJCVNWTV9TRUxFQ1RPUl9XUklURV9NQVNLOyAvKiBSZWFkL1dyaXRlIERhdGEgU2VnbWVudCAqLworCXNlZy0+bGltaXQgPSAweGZmZmY7CisJc2VnLT5iYXNlID0gMDsKK30KKworc3RhdGljIHZvaWQgaW5pdF9zeXNfc2VnKHN0cnVjdCB2bWNiX3NlZyAqc2VnLCB1aW50MzJfdCB0eXBlKQoreworCXNlZy0+c2VsZWN0b3IgPSAwOworCXNlZy0+YXR0cmliID0gU1ZNX1NFTEVDVE9SX1BfTUFTSyB8IHR5cGU7CisJc2VnLT5saW1pdCA9IDB4ZmZmZjsKKwlzZWctPmJhc2UgPSAwOworfQorCitzdGF0aWMgaW50IHN2bV92Y3B1X3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW5pdF92bWNiKHN0cnVjdCB2bWNiICp2bWNiKQoreworCXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9ICZ2bWNiLT5jb250cm9sOworCXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZSA9ICZ2bWNiLT5zYXZlOworCXU2NCB0c2M7CisKKwljb250cm9sLT5pbnRlcmNlcHRfY3JfcmVhZCA9IAlJTlRFUkNFUFRfQ1IwX01BU0sgfAorCQkJCQlJTlRFUkNFUFRfQ1IzX01BU0sgfAorCQkJCQlJTlRFUkNFUFRfQ1I0X01BU0s7CisKKwljb250cm9sLT5pbnRlcmNlcHRfY3Jfd3JpdGUgPSAJSU5URVJDRVBUX0NSMF9NQVNLIHwKKwkJCQkJSU5URVJDRVBUX0NSM19NQVNLIHwKKwkJCQkJSU5URVJDRVBUX0NSNF9NQVNLOworCisJY29udHJvbC0+aW50ZXJjZXB0X2RyX3JlYWQgPSAJSU5URVJDRVBUX0RSMF9NQVNLIHwKKwkJCQkJSU5URVJDRVBUX0RSMV9NQVNLIHwKKwkJCQkJSU5URVJDRVBUX0RSMl9NQVNLIHwKKwkJCQkJSU5URVJDRVBUX0RSM19NQVNLOworCisJY29udHJvbC0+aW50ZXJjZXB0X2RyX3dyaXRlID0gCUlOVEVSQ0VQVF9EUjBfTUFTSyB8CisJCQkJCUlOVEVSQ0VQVF9EUjFfTUFTSyB8CisJCQkJCUlOVEVSQ0VQVF9EUjJfTUFTSyB8CisJCQkJCUlOVEVSQ0VQVF9EUjNfTUFTSyB8CisJCQkJCUlOVEVSQ0VQVF9EUjVfTUFTSyB8CisJCQkJCUlOVEVSQ0VQVF9EUjdfTUFTSzsKKworCWNvbnRyb2wtPmludGVyY2VwdF9leGNlcHRpb25zID0gMSA8PCBQRl9WRUNUT1I7CisKKworCWNvbnRyb2wtPmludGVyY2VwdCA9IAkoMVVMTCA8PCBJTlRFUkNFUFRfSU5UUikgfAorCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9OTUkpIHwKKwkJLyoKKwkJICogc2VsZWN0aXZlIGNyMCBpbnRlcmNlcHQgYnVnPworCQkgKiAgICAJMDogICAwZiAyMiBkOCAgICAgICAgICAgICAgICBtb3YgICAgJWVheCwlY3IzCisJCSAqCTM6ICAgMGYgMjAgYzAgICAgICAgICAgICAgICAgbW92ICAgICVjcjAsJWVheAorCQkgKgk2OiAgIDBkIDAwIDAwIDAwIDgwICAgICAgICAgIG9yICAgICAkMHg4MDAwMDAwMCwlZWF4CisJCSAqCWI6ICAgMGYgMjIgYzAgICAgICAgICAgICAgICAgbW92ICAgICVlYXgsJWNyMAorCQkgKiBzZXQgY3IzIC0+aW50ZXJjZXB0aW9uCisJCSAqIGdldCBjcjAgLT5pbnRlcmNlcHRpb24KKwkJICogc2V0IGNyMCAtPiBubyBpbnRlcmNlcHRpb24KKwkJICovCisJCS8qICAgICAgICAgICAgICAoMVVMTCA8PCBJTlRFUkNFUFRfU0VMRUNUSVZFX0NSMCkgfCAqLworCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9DUFVJRCkgfAorCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9ITFQpIHwKKwkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSU5WTFBHQSkgfAorCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9JT0lPX1BST1QpIHwKKwkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfTVNSX1BST1QpIHwKKwkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfVEFTS19TV0lUQ0gpIHwKKwkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfU0hVVERPV04pIHwKKwkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfVk1SVU4pIHwKKwkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfVk1NQ0FMTCkgfAorCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9WTUxPQUQpIHwKKwkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfVk1TQVZFKSB8CisJCQkJKDFVTEwgPDwgSU5URVJDRVBUX1NUR0kpIHwKKwkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfQ0xHSSkgfAorCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9TS0lOSVQpOworCisJY29udHJvbC0+aW9wbV9iYXNlX3BhID0gaW9wbV9iYXNlOworCWNvbnRyb2wtPm1zcnBtX2Jhc2VfcGEgPSBtc3JwbV9iYXNlOworCXJkdHNjbGwodHNjKTsKKwljb250cm9sLT50c2Nfb2Zmc2V0ID0gLXRzYzsKKwljb250cm9sLT5pbnRfY3RsID0gVl9JTlRSX01BU0tJTkdfTUFTSzsKKworCWluaXRfc2VnKCZzYXZlLT5lcyk7CisJaW5pdF9zZWcoJnNhdmUtPnNzKTsKKwlpbml0X3NlZygmc2F2ZS0+ZHMpOworCWluaXRfc2VnKCZzYXZlLT5mcyk7CisJaW5pdF9zZWcoJnNhdmUtPmdzKTsKKworCXNhdmUtPmNzLnNlbGVjdG9yID0gMHhmMDAwOworCS8qIEV4ZWN1dGFibGUvUmVhZGFibGUgQ29kZSBTZWdtZW50ICovCisJc2F2ZS0+Y3MuYXR0cmliID0gU1ZNX1NFTEVDVE9SX1JFQURfTUFTSyB8IFNWTV9TRUxFQ1RPUl9QX01BU0sgfAorCQlTVk1fU0VMRUNUT1JfU19NQVNLIHwgU1ZNX1NFTEVDVE9SX0NPREVfTUFTSzsKKwlzYXZlLT5jcy5saW1pdCA9IDB4ZmZmZjsKKwlzYXZlLT5jcy5iYXNlID0gMHhmZmZmMDAwMDsKKworCXNhdmUtPmdkdHIubGltaXQgPSAweGZmZmY7CisJc2F2ZS0+aWR0ci5saW1pdCA9IDB4ZmZmZjsKKworCWluaXRfc3lzX3NlZygmc2F2ZS0+bGR0ciwgU0VHX1RZUEVfTERUKTsKKwlpbml0X3N5c19zZWcoJnNhdmUtPnRyLCBTRUdfVFlQRV9CVVNZX1RTUzE2KTsKKworCXNhdmUtPmVmZXIgPSBNU1JfRUZFUl9TVk1FX01BU0s7CisKKyAgICAgICAgc2F2ZS0+ZHI2ID0gMHhmZmZmMGZmMDsKKwlzYXZlLT5kcjcgPSAweDQwMDsKKwlzYXZlLT5yZmxhZ3MgPSAyOworCXNhdmUtPnJpcCA9IDB4MDAwMGZmZjA7CisKKwkvKgorCSAqIGNyMCB2YWwgb24gY3B1IGluaXQgc2hvdWxkIGJlIDB4NjAwMDAwMTAsIHdlIGVuYWJsZSBjcHUKKwkgKiBjYWNoZSBieSBkZWZhdWx0LiB0aGUgb3JkZXJseSB3YXkgaXMgdG8gZW5hYmxlIGNhY2hlIGluIGJpb3MuCisJICovCisJc2F2ZS0+Y3IwID0gMHgwMDAwMDAxMCB8IENSMF9QR19NQVNLOworCXNhdmUtPmNyNCA9IENSNF9QQUVfTUFTSzsKKwkvKiByZHggPSA/PyAqLworfQorCitzdGF0aWMgaW50IHN2bV9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHI7CisKKwlyID0gLUVOT01FTTsKKwl2Y3B1LT5zdm0gPSBremFsbG9jKHNpemVvZiAqdmNwdS0+c3ZtLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjcHUtPnN2bSkKKwkJZ290byBvdXQxOworCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCWlmICghcGFnZSkKKwkJZ290byBvdXQyOworCisJdmNwdS0+c3ZtLT52bWNiID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCW1lbXNldCh2Y3B1LT5zdm0tPnZtY2IsIDAsIFBBR0VfU0laRSk7CisJdmNwdS0+c3ZtLT52bWNiX3BhID0gcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVDsKKwl2Y3B1LT5zdm0tPmNyMCA9IDB4MDAwMDAwMTA7CisJdmNwdS0+c3ZtLT5hc2lkX2dlbmVyYXRpb24gPSAwOworCW1lbXNldCh2Y3B1LT5zdm0tPmRiX3JlZ3MsIDAsIHNpemVvZih2Y3B1LT5zdm0tPmRiX3JlZ3MpKTsKKwlpbml0X3ZtY2IodmNwdS0+c3ZtLT52bWNiKTsKKworCWZ4X2luaXQodmNwdSk7CisKKwlyZXR1cm4gMDsKKworb3V0MjoKKwlrZnJlZSh2Y3B1LT5zdm0pOworb3V0MToKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgc3ZtX2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKCF2Y3B1LT5zdm0pCisJCXJldHVybjsKKwlpZiAodmNwdS0+c3ZtLT52bWNiKQorCQlfX2ZyZWVfcGFnZShwZm5fdG9fcGFnZSh2Y3B1LT5zdm0tPnZtY2JfcGEgPj4gUEFHRV9TSElGVCkpOworCWtmcmVlKHZjcHUtPnN2bSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZjcHUgKnN2bV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWdldF9jcHUoKTsKKwlyZXR1cm4gdmNwdTsKK30KKworc3RhdGljIHZvaWQgc3ZtX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlwdXRfY3B1KCk7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9jYWNoZV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SQVhdID0gdmNwdS0+c3ZtLT52bWNiLT5zYXZlLnJheDsKKwl2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SU1BdID0gdmNwdS0+c3ZtLT52bWNiLT5zYXZlLnJzcDsKKwl2Y3B1LT5yaXAgPSB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmlwOworfQorCitzdGF0aWMgdm9pZCBzdm1fZGVjYWNoZV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmF4ID0gdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUkFYXTsKKwl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucnNwID0gdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUlNQXTsKKwl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmlwID0gdmNwdS0+cmlwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdm1fZ2V0X3JmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3M7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9zZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByZmxhZ3MpCit7CisJdmNwdS0+c3ZtLT52bWNiLT5zYXZlLnJmbGFncyA9IHJmbGFnczsKK30KKworc3RhdGljIHN0cnVjdCB2bWNiX3NlZyAqc3ZtX3NlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpCit7CisJc3RydWN0IHZtY2Jfc2F2ZV9hcmVhICpzYXZlID0gJnZjcHUtPnN2bS0+dm1jYi0+c2F2ZTsKKworCXN3aXRjaCAoc2VnKSB7CisJY2FzZSBWQ1BVX1NSRUdfQ1M6IHJldHVybiAmc2F2ZS0+Y3M7CisJY2FzZSBWQ1BVX1NSRUdfRFM6IHJldHVybiAmc2F2ZS0+ZHM7CisJY2FzZSBWQ1BVX1NSRUdfRVM6IHJldHVybiAmc2F2ZS0+ZXM7CisJY2FzZSBWQ1BVX1NSRUdfRlM6IHJldHVybiAmc2F2ZS0+ZnM7CisJY2FzZSBWQ1BVX1NSRUdfR1M6IHJldHVybiAmc2F2ZS0+Z3M7CisJY2FzZSBWQ1BVX1NSRUdfU1M6IHJldHVybiAmc2F2ZS0+c3M7CisJY2FzZSBWQ1BVX1NSRUdfVFI6IHJldHVybiAmc2F2ZS0+dHI7CisJY2FzZSBWQ1BVX1NSRUdfTERUUjogcmV0dXJuICZzYXZlLT5sZHRyOworCX0KKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBzdm1fZ2V0X3NlZ21lbnRfYmFzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpCit7CisJc3RydWN0IHZtY2Jfc2VnICpzID0gc3ZtX3NlZyh2Y3B1LCBzZWcpOworCisJcmV0dXJuIHMtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9nZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpCit7CisJc3RydWN0IHZtY2Jfc2VnICpzID0gc3ZtX3NlZyh2Y3B1LCBzZWcpOworCisJdmFyLT5iYXNlID0gcy0+YmFzZTsKKwl2YXItPmxpbWl0ID0gcy0+bGltaXQ7CisJdmFyLT5zZWxlY3RvciA9IHMtPnNlbGVjdG9yOworCXZhci0+dHlwZSA9IHMtPmF0dHJpYiAmIFNWTV9TRUxFQ1RPUl9UWVBFX01BU0s7CisJdmFyLT5zID0gKHMtPmF0dHJpYiA+PiBTVk1fU0VMRUNUT1JfU19TSElGVCkgJiAxOworCXZhci0+ZHBsID0gKHMtPmF0dHJpYiA+PiBTVk1fU0VMRUNUT1JfRFBMX1NISUZUKSAmIDM7CisJdmFyLT5wcmVzZW50ID0gKHMtPmF0dHJpYiA+PiBTVk1fU0VMRUNUT1JfUF9TSElGVCkgJiAxOworCXZhci0+YXZsID0gKHMtPmF0dHJpYiA+PiBTVk1fU0VMRUNUT1JfQVZMX1NISUZUKSAmIDE7CisJdmFyLT5sID0gKHMtPmF0dHJpYiA+PiBTVk1fU0VMRUNUT1JfTF9TSElGVCkgJiAxOworCXZhci0+ZGIgPSAocy0+YXR0cmliID4+IFNWTV9TRUxFQ1RPUl9EQl9TSElGVCkgJiAxOworCXZhci0+ZyA9IChzLT5hdHRyaWIgPj4gU1ZNX1NFTEVDVE9SX0dfU0hJRlQpICYgMTsKKwl2YXItPnVudXNhYmxlID0gIXZhci0+cHJlc2VudDsKK30KKworc3RhdGljIHZvaWQgc3ZtX2dldF9jc19kYl9sX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKmRiLCBpbnQgKmwpCit7CisJc3RydWN0IHZtY2Jfc2VnICpzID0gc3ZtX3NlZyh2Y3B1LCBWQ1BVX1NSRUdfQ1MpOworCisJKmRiID0gKHMtPmF0dHJpYiA+PiBTVk1fU0VMRUNUT1JfREJfU0hJRlQpICYgMTsKKwkqbCA9IChzLT5hdHRyaWIgPj4gU1ZNX1NFTEVDVE9SX0xfU0hJRlQpICYgMTsKK30KKworc3RhdGljIHZvaWQgc3ZtX2dldF9pZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSAqZHQpCit7CisJZHQtPmxpbWl0ID0gdmNwdS0+c3ZtLT52bWNiLT5zYXZlLmlkdHIubGltaXQ7CisJZHQtPmJhc2UgPSB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuaWR0ci5iYXNlOworfQorCitzdGF0aWMgdm9pZCBzdm1fc2V0X2lkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICpkdCkKK3sKKwl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuaWR0ci5saW1pdCA9IGR0LT5saW1pdDsKKwl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuaWR0ci5iYXNlID0gZHQtPmJhc2UgOworfQorCitzdGF0aWMgdm9pZCBzdm1fZ2V0X2dkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICpkdCkKK3sKKwlkdC0+bGltaXQgPSB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuZ2R0ci5saW1pdDsKKwlkdC0+YmFzZSA9IHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5nZHRyLmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9zZXRfZ2R0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKmR0KQoreworCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5nZHRyLmxpbWl0ID0gZHQtPmxpbWl0OworCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5nZHRyLmJhc2UgPSBkdC0+YmFzZSA7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9kZWNhY2hlX2NyMF9jcjRfZ3Vlc3RfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9zZXRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApCit7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWlmICh2Y3B1LT5zaGFkb3dfZWZlciAmIEtWTV9FRkVSX0xNRSkgeworCQlpZiAoIWlzX3BhZ2luZyh2Y3B1KSAmJiAoY3IwICYgQ1IwX1BHX01BU0spKSB7CisJCQl2Y3B1LT5zaGFkb3dfZWZlciB8PSBLVk1fRUZFUl9MTUE7CisJCQl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuZWZlciB8PSBLVk1fRUZFUl9MTUEgfCBLVk1fRUZFUl9MTUU7CisJCX0KKworCQlpZiAoaXNfcGFnaW5nKHZjcHUpICYmICEoY3IwICYgQ1IwX1BHX01BU0spICkgeworCQkJdmNwdS0+c2hhZG93X2VmZXIgJj0gfktWTV9FRkVSX0xNQTsKKwkJCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5lZmVyICY9IH4oS1ZNX0VGRVJfTE1BIHwgS1ZNX0VGRVJfTE1FKTsKKwkJfQorCX0KKyNlbmRpZgorCXZjcHUtPnN2bS0+Y3IwID0gY3IwOworCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5jcjAgPSBjcjAgfCBDUjBfUEdfTUFTSzsKKwl2Y3B1LT5jcjAgPSBjcjA7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpCit7CisgICAgICAgdmNwdS0+Y3I0ID0gY3I0OworICAgICAgIHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5jcjQgPSBjcjQgfCBDUjRfUEFFX01BU0s7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9zZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpCit7CisJc3RydWN0IHZtY2Jfc2VnICpzID0gc3ZtX3NlZyh2Y3B1LCBzZWcpOworCisJcy0+YmFzZSA9IHZhci0+YmFzZTsKKwlzLT5saW1pdCA9IHZhci0+bGltaXQ7CisJcy0+c2VsZWN0b3IgPSB2YXItPnNlbGVjdG9yOworCWlmICh2YXItPnVudXNhYmxlKQorCQlzLT5hdHRyaWIgPSAwOworCWVsc2UgeworCQlzLT5hdHRyaWIgPSAodmFyLT50eXBlICYgU1ZNX1NFTEVDVE9SX1RZUEVfTUFTSyk7CisJCXMtPmF0dHJpYiB8PSAodmFyLT5zICYgMSkgPDwgU1ZNX1NFTEVDVE9SX1NfU0hJRlQ7CisJCXMtPmF0dHJpYiB8PSAodmFyLT5kcGwgJiAzKSA8PCBTVk1fU0VMRUNUT1JfRFBMX1NISUZUOworCQlzLT5hdHRyaWIgfD0gKHZhci0+cHJlc2VudCAmIDEpIDw8IFNWTV9TRUxFQ1RPUl9QX1NISUZUOworCQlzLT5hdHRyaWIgfD0gKHZhci0+YXZsICYgMSkgPDwgU1ZNX1NFTEVDVE9SX0FWTF9TSElGVDsKKwkJcy0+YXR0cmliIHw9ICh2YXItPmwgJiAxKSA8PCBTVk1fU0VMRUNUT1JfTF9TSElGVDsKKwkJcy0+YXR0cmliIHw9ICh2YXItPmRiICYgMSkgPDwgU1ZNX1NFTEVDVE9SX0RCX1NISUZUOworCQlzLT5hdHRyaWIgfD0gKHZhci0+ZyAmIDEpIDw8IFNWTV9TRUxFQ1RPUl9HX1NISUZUOworCX0KKwlpZiAoc2VnID09IFZDUFVfU1JFR19DUykKKwkJdmNwdS0+c3ZtLT52bWNiLT5zYXZlLmNwbAorCQkJPSAodmNwdS0+c3ZtLT52bWNiLT5zYXZlLmNzLmF0dHJpYgorCQkJICAgPj4gU1ZNX1NFTEVDVE9SX0RQTF9TSElGVCkgJiAzOworCit9CisKKy8qIEZJWE1FOgorCisJdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgJj0gflZfVFBSX01BU0s7CisJdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgfD0gKHNyZWdzLT5jcjggJiBWX1RQUl9NQVNLKTsKKworKi8KKworc3RhdGljIGludCBzdm1fZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2hvc3RfbXNycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IGk7CisKKwlmb3IgKCBpID0gMDsgaSA8IE5SX0hPU1RfU0FWRV9NU1JTOyBpKyspCisJCXdybXNybChob3N0X3NhdmVfbXNyc1tpXSwgdmNwdS0+c3ZtLT5ob3N0X21zcnNbaV0pOworfQorCitzdGF0aWMgdm9pZCBzYXZlX2hvc3RfbXNycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IGk7CisKKwlmb3IgKCBpID0gMDsgaSA8IE5SX0hPU1RfU0FWRV9NU1JTOyBpKyspCisJCXJkbXNybChob3N0X3NhdmVfbXNyc1tpXSwgdmNwdS0+c3ZtLT5ob3N0X21zcnNbaV0pOworfQorCitzdGF0aWMgdm9pZCBuZXdfYXNpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhKQoreworCWlmIChzdm1fZGF0YS0+bmV4dF9hc2lkID4gc3ZtX2RhdGEtPm1heF9hc2lkKSB7CisJCSsrc3ZtX2RhdGEtPmFzaWRfZ2VuZXJhdGlvbjsKKwkJc3ZtX2RhdGEtPm5leHRfYXNpZCA9IDE7CisJCXZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC50bGJfY3RsID0gVExCX0NPTlRST0xfRkxVU0hfQUxMX0FTSUQ7CisJfQorCisJdmNwdS0+Y3B1ID0gc3ZtX2RhdGEtPmNwdTsKKwl2Y3B1LT5zdm0tPmFzaWRfZ2VuZXJhdGlvbiA9IHN2bV9kYXRhLT5hc2lkX2dlbmVyYXRpb247CisJdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmFzaWQgPSBzdm1fZGF0YS0+bmV4dF9hc2lkKys7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9pbnZscGcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyZXNzKQoreworCWludmxwZ2EoYWRkcmVzcywgdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmFzaWQpOyAvLyBpcyBuZWVkZWQ/Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN2bV9nZXRfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIpCit7CisJcmV0dXJuIHZjcHUtPnN2bS0+ZGJfcmVnc1tkcl07Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9zZXRfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUsCisJCSAgICAgICBpbnQgKmV4Y2VwdGlvbikKK3sKKwkqZXhjZXB0aW9uID0gMDsKKworCWlmICh2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuZHI3ICYgRFI3X0dEX01BU0spIHsKKwkJdmNwdS0+c3ZtLT52bWNiLT5zYXZlLmRyNyAmPSB+RFI3X0dEX01BU0s7CisJCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5kcjYgfD0gRFI2X0JEX01BU0s7CisJCSpleGNlcHRpb24gPSBEQl9WRUNUT1I7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGRyKSB7CisJY2FzZSAwIC4uLiAzOgorCQl2Y3B1LT5zdm0tPmRiX3JlZ3NbZHJdID0gdmFsdWU7CisJCXJldHVybjsKKwljYXNlIDQgLi4uIDU6CisJCWlmICh2Y3B1LT5jcjQgJiBDUjRfREVfTUFTSykgeworCQkJKmV4Y2VwdGlvbiA9IFVEX1ZFQ1RPUjsKKwkJCXJldHVybjsKKwkJfQorCWNhc2UgNzogeworCQlpZiAodmFsdWUgJiB+KCgxVUxMIDw8IDMyKSAtIDEpKSB7CisJCQkqZXhjZXB0aW9uID0gR1BfVkVDVE9SOworCQkJcmV0dXJuOworCQl9CisJCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5kcjcgPSB2YWx1ZTsKKwkJcmV0dXJuOworCX0KKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVuZXhwZWN0ZWQgZHIgJXVcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRyKTsKKwkJKmV4Y2VwdGlvbiA9IFVEX1ZFQ1RPUjsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIGludCBwZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwl1MzIgZXhpdF9pbnRfaW5mbyA9IHZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvOworCXU2NCBmYXVsdF9hZGRyZXNzOworCXUzMiBlcnJvcl9jb2RlOworCWVudW0gZW11bGF0aW9uX3Jlc3VsdCBlcjsKKwlpbnQgcjsKKworCWlmIChpc19leHRlcm5hbF9pbnRlcnJ1cHQoZXhpdF9pbnRfaW5mbykpCisJCXB1c2hfaXJxKHZjcHUsIGV4aXRfaW50X2luZm8gJiBTVk1fRVZUSU5KX1ZFQ19NQVNLKTsKKworCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKKworCWZhdWx0X2FkZHJlc3MgID0gdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yOworCWVycm9yX2NvZGUgPSB2Y3B1LT5zdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzE7CisJciA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlKTsKKwlpZiAociA8IDApIHsKKwkJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7CisJCXJldHVybiByOworCX0KKwlpZiAoIXIpIHsKKwkJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7CisJCXJldHVybiAxOworCX0KKwllciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwga3ZtX3J1biwgZmF1bHRfYWRkcmVzcywgZXJyb3JfY29kZSk7CisJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7CisKKwlzd2l0Y2ggKGVyKSB7CisJY2FzZSBFTVVMQVRFX0RPTkU6CisJCXJldHVybiAxOworCWNhc2UgRU1VTEFURV9ET19NTUlPOgorCQkrK2t2bV9zdGF0Lm1taW9fZXhpdHM7CisJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTU1JTzsKKwkJcmV0dXJuIDA7CisJY2FzZSBFTVVMQVRFX0ZBSUw6CisJCXZjcHVfcHJpbnRmKHZjcHUsICIlczogZW11bGF0ZSBmYWlsXG4iLCBfX0ZVTkNUSU9OX18pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX1VOS05PV047CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJLyoKKwkgKiBWTUNCIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdAorCSAqIHNvIHJlaW5pdGlhbGl6ZSBpdC4KKwkgKi8KKwltZW1zZXQodmNwdS0+c3ZtLT52bWNiLCAwLCBQQUdFX1NJWkUpOworCWluaXRfdm1jYih2Y3B1LT5zdm0tPnZtY2IpOworCisJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9TSFVURE9XTjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpb19nZXRfb3ZlcnJpZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICBzdHJ1Y3Qgdm1jYl9zZWcgKipzZWcsCisJCQkgIGludCAqYWRkcl9vdmVycmlkZSkKK3sKKwl1OCBpbnN0W01BWF9JTlNUX1NJWkVdOworCXVuc2lnbmVkIGluc19sZW5ndGg7CisJZ3ZhX3QgcmlwOworCWludCBpOworCisJcmlwID0gIHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5yaXA7CisJaW5zX2xlbmd0aCA9IHZjcHUtPnN2bS0+bmV4dF9yaXAgLSByaXA7CisJcmlwICs9IHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5jcy5iYXNlOworCisJaWYgKGluc19sZW5ndGggPiBNQVhfSU5TVF9TSVpFKQorCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIiVzOiBpbnN0IGxlbmd0aCBlcnIsIGNzIGJhc2UgMHglbGx4IHJpcCAweCVsbHggIgorCQkgICAgICAgIm5leHQgcmlwIDB4JWxseCBpbnNfbGVuZ3RoICV1XG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLAorCQkgICAgICAgdmNwdS0+c3ZtLT52bWNiLT5zYXZlLmNzLmJhc2UsCisJCSAgICAgICB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmlwLAorCQkgICAgICAgdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yLAorCQkgICAgICAgaW5zX2xlbmd0aCk7CisKKwlpZiAoa3ZtX3JlYWRfZ3Vlc3QodmNwdSwgcmlwLCBpbnNfbGVuZ3RoLCBpbnN0KSAhPSBpbnNfbGVuZ3RoKQorCQkvKiAjUEYgKi8KKwkJcmV0dXJuIDA7CisKKwkqYWRkcl9vdmVycmlkZSA9IDA7CisJKnNlZyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGluc19sZW5ndGg7IGkrKykKKwkJc3dpdGNoIChpbnN0W2ldKSB7CisJCWNhc2UgMHhmMDoKKwkJY2FzZSAweGYyOgorCQljYXNlIDB4ZjM6CisJCWNhc2UgMHg2NjoKKwkJCWNvbnRpbnVlOworCQljYXNlIDB4Njc6CisJCQkqYWRkcl9vdmVycmlkZSA9IDE7CisJCQljb250aW51ZTsKKwkJY2FzZSAweDJlOgorCQkJKnNlZyA9ICZ2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuY3M7CisJCQljb250aW51ZTsKKwkJY2FzZSAweDM2OgorCQkJKnNlZyA9ICZ2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuc3M7CisJCQljb250aW51ZTsKKwkJY2FzZSAweDNlOgorCQkJKnNlZyA9ICZ2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuZHM7CisJCQljb250aW51ZTsKKwkJY2FzZSAweDI2OgorCQkJKnNlZyA9ICZ2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuZXM7CisJCQljb250aW51ZTsKKwkJY2FzZSAweDY0OgorCQkJKnNlZyA9ICZ2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuZnM7CisJCQljb250aW51ZTsKKwkJY2FzZSAweDY1OgorCQkJKnNlZyA9ICZ2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuZ3M7CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAxOworCQl9CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1bmV4cGVjdGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpb19hZHJlc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgaW5zLCB1NjQgKmFkZHJlc3MpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyX21hc2s7CisJdW5zaWduZWQgbG9uZyAqcmVnOworCXN0cnVjdCB2bWNiX3NlZyAqc2VnOworCWludCBhZGRyX292ZXJyaWRlOworCXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZV9hcmVhID0gJnZjcHUtPnN2bS0+dm1jYi0+c2F2ZTsKKwl1MTYgY3NfYXR0cmliID0gc2F2ZV9hcmVhLT5jcy5hdHRyaWI7CisJdW5zaWduZWQgYWRkcl9zaXplID0gZ2V0X2FkZHJfc2l6ZSh2Y3B1KTsKKworCWlmICghaW9fZ2V0X292ZXJyaWRlKHZjcHUsICZzZWcsICZhZGRyX292ZXJyaWRlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYWRkcl9vdmVycmlkZSkKKwkJYWRkcl9zaXplID0gKGFkZHJfc2l6ZSA9PSAyKSA/IDQ6IChhZGRyX3NpemUgPj4gMSk7CisKKwlpZiAoaW5zKSB7CisJCXJlZyA9ICZ2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SREldOworCQlzZWcgPSAmdmNwdS0+c3ZtLT52bWNiLT5zYXZlLmVzOworCX0gZWxzZSB7CisJCXJlZyA9ICZ2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SU0ldOworCQlzZWcgPSAoc2VnKSA/IHNlZyA6ICZ2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuZHM7CisJfQorCisJYWRkcl9tYXNrID0gfjBVTEwgPj4gKDY0IC0gKGFkZHJfc2l6ZSAqIDgpKTsKKworCWlmICgoY3NfYXR0cmliICYgU1ZNX1NFTEVDVE9SX0xfTUFTSykgJiYKKwkgICAgISh2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19WTSkpIHsKKwkJKmFkZHJlc3MgPSAoKnJlZyAmIGFkZHJfbWFzayk7CisJCXJldHVybiBhZGRyX21hc2s7CisJfQorCisJaWYgKCEoc2VnLT5hdHRyaWIgJiBTVk1fU0VMRUNUT1JfUF9TSElGVCkpIHsKKwkJc3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCisJKmFkZHJlc3MgPSAoKnJlZyAmIGFkZHJfbWFzaykgKyBzZWctPmJhc2U7CisJcmV0dXJuIGFkZHJfbWFzazsKK30KKworc3RhdGljIGludCBpb19pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwl1MzIgaW9faW5mbyA9IHZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMTsgLy9hZGRyZXNzIHNpemUgYnVnPworCWludCBfaW4gPSBpb19pbmZvICYgU1ZNX0lPSU9fVFlQRV9NQVNLOworCisJKytrdm1fc3RhdC5pb19leGl0czsKKworCXZjcHUtPnN2bS0+bmV4dF9yaXAgPSB2Y3B1LT5zdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzI7CisKKwlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lPOworCWt2bV9ydW4tPmlvLnBvcnQgPSBpb19pbmZvID4+IDE2OworCWt2bV9ydW4tPmlvLmRpcmVjdGlvbiA9IChfaW4pID8gS1ZNX0VYSVRfSU9fSU4gOiBLVk1fRVhJVF9JT19PVVQ7CisJa3ZtX3J1bi0+aW8uc2l6ZSA9ICgoaW9faW5mbyAmIFNWTV9JT0lPX1NJWkVfTUFTSykgPj4gU1ZNX0lPSU9fU0laRV9TSElGVCk7CisJa3ZtX3J1bi0+aW8uc3RyaW5nID0gKGlvX2luZm8gJiBTVk1fSU9JT19TVFJfTUFTSykgIT0gMDsKKwlrdm1fcnVuLT5pby5yZXAgPSAoaW9faW5mbyAmIFNWTV9JT0lPX1JFUF9NQVNLKSAhPSAwOworCisJaWYgKGt2bV9ydW4tPmlvLnN0cmluZykgeworCQl1bnNpZ25lZCBhZGRyX21hc2s7CisKKwkJYWRkcl9tYXNrID0gaW9fYWRyZXNzKHZjcHUsIF9pbiwgJmt2bV9ydW4tPmlvLmFkZHJlc3MpOworCQlpZiAoIWFkZHJfbWFzaykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBnZXQgaW8gYWRkcmVzcyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChrdm1fcnVuLT5pby5yZXApIHsKKwkJCWt2bV9ydW4tPmlvLmNvdW50ID0gdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUkNYXSAmIGFkZHJfbWFzazsKKwkJCWt2bV9ydW4tPmlvLnN0cmluZ19kb3duID0gKHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MKKwkJCQkJCSAgICYgWDg2X0VGTEFHU19ERikgIT0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWt2bV9ydW4tPmlvLnZhbHVlID0gdmNwdS0+c3ZtLT52bWNiLT5zYXZlLnJheDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBub3Bfb25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaGFsdF9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwl2Y3B1LT5zdm0tPm5leHRfcmlwID0gdmNwdS0+c3ZtLT52bWNiLT5zYXZlLnJpcCArIDE7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwlpZiAodmNwdS0+aXJxX3N1bW1hcnkpCisJCXJldHVybiAxOworCisJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ITFQ7CisJKytrdm1fc3RhdC5oYWx0X2V4aXRzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaW5qZWN0X3VkKHZjcHUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXByaW50ayhLRVJOX0RFQlVHICIlczogdGFzayBzd2ljaGUgaXMgdW5zdXBwb3J0ZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9VTktOT1dOOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNwdWlkX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXZjcHUtPnN2bS0+bmV4dF9yaXAgPSB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmlwICsgMjsKKwlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0NQVUlEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgMCwgMCkgIT0gRU1VTEFURV9ET05FKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc3ZtX2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBlY3gsIHU2NCAqZGF0YSkKK3sKKwlzd2l0Y2ggKGVjeCkgeworCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOiB7CisJCXU2NCB0c2M7CisKKwkJcmR0c2NsbCh0c2MpOworCQkqZGF0YSA9IHZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ICsgdHNjOworCQlicmVhazsKKwl9CisJY2FzZSBNU1JfSzZfU1RBUjoKKwkJKmRhdGEgPSB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuc3RhcjsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWNhc2UgTVNSX0xTVEFSOgorCQkqZGF0YSA9IHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5sc3RhcjsKKwkJYnJlYWs7CisJY2FzZSBNU1JfQ1NUQVI6CisJCSpkYXRhID0gdmNwdS0+c3ZtLT52bWNiLT5zYXZlLmNzdGFyOworCQlicmVhazsKKwljYXNlIE1TUl9LRVJORUxfR1NfQkFTRToKKwkJKmRhdGEgPSB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUua2VybmVsX2dzX2Jhc2U7CisJCWJyZWFrOworCWNhc2UgTVNSX1NZU0NBTExfTUFTSzoKKwkJKmRhdGEgPSB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuc2ZtYXNrOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfQ1M6CisJCSpkYXRhID0gdmNwdS0+c3ZtLT52bWNiLT5zYXZlLnN5c2VudGVyX2NzOworCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX1NZU0VOVEVSX0VJUDoKKwkJKmRhdGEgPSB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuc3lzZW50ZXJfZWlwOworCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX1NZU0VOVEVSX0VTUDoKKwkJKmRhdGEgPSB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuc3lzZW50ZXJfZXNwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4ga3ZtX2dldF9tc3JfY29tbW9uKHZjcHUsIGVjeCwgZGF0YSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJkbXNyX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXUzMiBlY3ggPSB2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SQ1hdOworCXU2NCBkYXRhOworCisJaWYgKHN2bV9nZXRfbXNyKHZjcHUsIGVjeCwgJmRhdGEpKQorCQlzdm1faW5qZWN0X2dwKHZjcHUsIDApOworCWVsc2UgeworCQl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmF4ID0gZGF0YSAmIDB4ZmZmZmZmZmY7CisJCXZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JEWF0gPSBkYXRhID4+IDMyOworCQl2Y3B1LT5zdm0tPm5leHRfcmlwID0gdmNwdS0+c3ZtLT52bWNiLT5zYXZlLnJpcCArIDI7CisJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHN2bV9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgZWN4LCB1NjQgZGF0YSkKK3sKKwlzd2l0Y2ggKGVjeCkgeworCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOiB7CisJCXU2NCB0c2M7CisKKwkJcmR0c2NsbCh0c2MpOworCQl2Y3B1LT5zdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCA9IGRhdGEgLSB0c2M7CisJCWJyZWFrOworCX0KKwljYXNlIE1TUl9LNl9TVEFSOgorCQl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuc3RhciA9IGRhdGE7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19YODZfNjQKKwljYXNlIE1TUl9MU1RBUjoKKwkJdmNwdS0+c3ZtLT52bWNiLT5zYXZlLmxzdGFyID0gZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBNU1JfQ1NUQVI6CisJCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5jc3RhciA9IGRhdGE7CisJCWJyZWFrOworCWNhc2UgTVNSX0tFUk5FTF9HU19CQVNFOgorCQl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUua2VybmVsX2dzX2Jhc2UgPSBkYXRhOworCQlicmVhazsKKwljYXNlIE1TUl9TWVNDQUxMX01BU0s6CisJCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5zZm1hc2sgPSBkYXRhOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfQ1M6CisJCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5zeXNlbnRlcl9jcyA9IGRhdGE7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfRUlQOgorCQl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuc3lzZW50ZXJfZWlwID0gZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9FU1A6CisJCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5zeXNlbnRlcl9lc3AgPSBkYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4ga3ZtX3NldF9tc3JfY29tbW9uKHZjcHUsIGVjeCwgZGF0YSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdybXNyX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXUzMiBlY3ggPSB2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SQ1hdOworCXU2NCBkYXRhID0gKHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5yYXggJiAtMXUpCisJCXwgKCh1NjQpKHZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JEWF0gJiAtMXUpIDw8IDMyKTsKKwl2Y3B1LT5zdm0tPm5leHRfcmlwID0gdmNwdS0+c3ZtLT52bWNiLT5zYXZlLnJpcCArIDI7CisJaWYgKHN2bV9zZXRfbXNyKHZjcHUsIGVjeCwgZGF0YSkpCisJCXN2bV9pbmplY3RfZ3AodmNwdSwgMCk7CisJZWxzZQorCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1zcl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlpZiAodmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xKQorCQlyZXR1cm4gd3Jtc3JfaW50ZXJjZXB0aW9uKHZjcHUsIGt2bV9ydW4pOworCWVsc2UKKwkJcmV0dXJuIHJkbXNyX2ludGVyY2VwdGlvbih2Y3B1LCBrdm1fcnVuKTsKK30KKworc3RhdGljIGludCBpbnRlcnJ1cHRfd2luZG93X2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJLyoKKwkgKiBJZiB0aGUgdXNlciBzcGFjZSB3YWl0cyB0byBpbmplY3QgaW50ZXJydXB0cywgZXhpdCBhcyBzb29uIGFzCisJICogcG9zc2libGUKKwkgKi8KKwlpZiAoa3ZtX3J1bi0+cmVxdWVzdF9pbnRlcnJ1cHRfd2luZG93ICYmCisJICAgICF2Y3B1LT5pcnFfc3VtbWFyeSkgeworCQkrK2t2bV9zdGF0LmlycV93aW5kb3dfZXhpdHM7CisJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSVJRX1dJTkRPV19PUEVOOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCAoKnN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikgPSB7CisJW1NWTV9FWElUX1JFQURfQ1IwXSAgICAgICAgICAgCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9SRUFEX0NSM10gICAgICAgICAgIAkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfUkVBRF9DUjRdICAgICAgICAgICAJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJLyogZm9yIG5vdzogKi8KKwlbU1ZNX0VYSVRfV1JJVEVfQ1IwXSAgICAgICAgICAJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1dSSVRFX0NSM10gICAgICAgICAgCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9XUklURV9DUjRdICAgICAgICAgIAkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfUkVBRF9EUjBdIAkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfRFIxXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfRFIyXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfRFIzXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1dSSVRFX0RSMF0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9XUklURV9EUjFdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfV1JJVEVfRFIyXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1dSSVRFX0RSM10JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9XUklURV9EUjVdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfV1JJVEVfRFI3XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0VYQ1BfQkFTRSArIFBGX1ZFQ1RPUl0gCT0gcGZfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9JTlRSXSAJCQk9IG5vcF9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX05NSV0JCQkJPSBub3Bfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9TTUldCQkJCT0gbm9wX29uX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfSU5JVF0JCQkJPSBub3Bfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9WSU5UUl0JCQk9IGludGVycnVwdF93aW5kb3dfaW50ZXJjZXB0aW9uLAorCS8qIFtTVk1fRVhJVF9DUjBfU0VMX1dSSVRFXQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwgKi8KKwlbU1ZNX0VYSVRfQ1BVSURdCQkJPSBjcHVpZF9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0hMVF0JCQkJPSBoYWx0X2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfSU5WTFBHXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0lOVkxQR0FdCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfSU9JT10gCQkgIAk9IGlvX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfTVNSXQkJCQk9IG1zcl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1RBU0tfU1dJVENIXQkJCT0gdGFza19zd2l0Y2hfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9TSFVURE9XTl0JCQk9IHNodXRkb3duX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfVk1SVU5dCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfVk1NQ0FMTF0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9WTUxPQURdCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfVk1TQVZFXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1NUR0ldCQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0NMR0ldCQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1NLSU5JVF0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAorfTsKKworCitzdGF0aWMgaW50IGhhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJdTMyIGV4aXRfY29kZSA9IHZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGU7CisKKwlrdm1fcnVuLT5leGl0X3R5cGUgPSBLVk1fRVhJVF9UWVBFX1ZNX0VYSVQ7CisKKwlpZiAoaXNfZXh0ZXJuYWxfaW50ZXJydXB0KHZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvKSAmJgorCSAgICBleGl0X2NvZGUgIT0gU1ZNX0VYSVRfRVhDUF9CQVNFICsgUEZfVkVDVE9SKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIGV4aXRfaW5pX2luZm8gMHgleCAiCisJCSAgICAgICAiZXhpdF9jb2RlIDB4JXhcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIHZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvLAorCQkgICAgICAgZXhpdF9jb2RlKTsKKworCWlmIChleGl0X2NvZGUgPj0gc2l6ZW9mKHN2bV9leGl0X2hhbmRsZXJzKSAvIHNpemVvZigqc3ZtX2V4aXRfaGFuZGxlcnMpCisJICAgIHx8IHN2bV9leGl0X2hhbmRsZXJzW2V4aXRfY29kZV0gPT0gMCkgeworCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX1VOS05PV047CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IDB4JXggQCAweCVsbHggY3IwIDB4JWx4IHJmbGFncyAweCVsbHhcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sCisJCSAgICAgICBleGl0X2NvZGUsCisJCSAgICAgICB2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmlwLAorCQkgICAgICAgdmNwdS0+Y3IwLAorCQkgICAgICAgdmNwdS0+c3ZtLT52bWNiLT5zYXZlLnJmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBzdm1fZXhpdF9oYW5kbGVyc1tleGl0X2NvZGVdKHZjcHUsIGt2bV9ydW4pOworfQorCitzdGF0aWMgdm9pZCByZWxvYWRfdHNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhID0gcGVyX2NwdShzdm1fZGF0YSwgY3B1KTsKKwlzdm1fZGF0YS0+dHNzX2Rlc2MtPnR5cGUgPSA5OyAvL2F2YWlsYWJsZSAzMi82NC1iaXQgVFNTCisJbG9hZF9UUl9kZXNjKCk7Cit9CisKK3N0YXRpYyB2b2lkIHByZV9zdm1fcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhID0gcGVyX2NwdShzdm1fZGF0YSwgY3B1KTsKKworCXZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC50bGJfY3RsID0gVExCX0NPTlRST0xfRE9fTk9USElORzsKKwlpZiAodmNwdS0+Y3B1ICE9IGNwdSB8fAorCSAgICB2Y3B1LT5zdm0tPmFzaWRfZ2VuZXJhdGlvbiAhPSBzdm1fZGF0YS0+YXNpZF9nZW5lcmF0aW9uKQorCQluZXdfYXNpZCh2Y3B1LCBzdm1fZGF0YSk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9kb19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2w7CisKKwljb250cm9sID0gJnZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbDsKKwljb250cm9sLT5pbnRfdmVjdG9yID0gcG9wX2lycSh2Y3B1KTsKKwljb250cm9sLT5pbnRfY3RsICY9IH5WX0lOVFJfUFJJT19NQVNLOworCWNvbnRyb2wtPmludF9jdGwgfD0gVl9JUlFfTUFTSyB8CisJCSgoLypjb250cm9sLT5pbnRfdmVjdG9yID4+IDQqLyAweGYpIDw8IFZfSU5UUl9QUklPX1NISUZUKTsKK30KKworc3RhdGljIHZvaWQga3ZtX3JlcHV0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gJnZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbDsKKworCWlmIChjb250cm9sLT5pbnRfY3RsICYgVl9JUlFfTUFTSykgeworCQljb250cm9sLT5pbnRfY3RsICY9IH5WX0lSUV9NQVNLOworCQlwdXNoX2lycSh2Y3B1LCBjb250cm9sLT5pbnRfdmVjdG9yKTsKKwl9CisKKwl2Y3B1LT5pbnRlcnJ1cHRfd2luZG93X29wZW4gPQorCQkhKGNvbnRyb2wtPmludF9zdGF0ZSAmIFNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0spOworfQorCitzdGF0aWMgdm9pZCBkb19pbnRlcnJ1cHRfcmVxdWVzdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgICAgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSAmdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sOworCisJdmNwdS0+aW50ZXJydXB0X3dpbmRvd19vcGVuID0KKwkJKCEoY29udHJvbC0+aW50X3N0YXRlICYgU1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSykgJiYKKwkJICh2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRikpOworCisJaWYgKHZjcHUtPmludGVycnVwdF93aW5kb3dfb3BlbiAmJiB2Y3B1LT5pcnFfc3VtbWFyeSkKKwkJLyoKKwkJICogSWYgaW50ZXJydXB0cyBlbmFibGVkLCBhbmQgbm90IGJsb2NrZWQgYnkgc3RpIG9yIG1vdiBzcy4gR29vZC4KKwkJICovCisJCWt2bV9kb19pbmplY3RfaXJxKHZjcHUpOworCisJLyoKKwkgKiBJbnRlcnJ1cHRzIGJsb2NrZWQuICBXYWl0IGZvciB1bmJsb2NrLgorCSAqLworCWlmICghdmNwdS0+aW50ZXJydXB0X3dpbmRvd19vcGVuICYmCisJICAgICh2Y3B1LT5pcnFfc3VtbWFyeSB8fCBrdm1fcnVuLT5yZXF1ZXN0X2ludGVycnVwdF93aW5kb3cpKSB7CisJCWNvbnRyb2wtPmludGVyY2VwdCB8PSAxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUjsKKwl9IGVsc2UKKwkJY29udHJvbC0+aW50ZXJjZXB0ICY9IH4oMVVMTCA8PCBJTlRFUkNFUFRfVklOVFIpOworfQorCitzdGF0aWMgdm9pZCBwb3N0X2t2bV9ydW5fc2F2ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlrdm1fcnVuLT5yZWFkeV9mb3JfaW50ZXJydXB0X2luamVjdGlvbiA9ICh2Y3B1LT5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYKKwkJCQkJCSAgdmNwdS0+aXJxX3N1bW1hcnkgPT0gMCk7CisJa3ZtX3J1bi0+aWZfZmxhZyA9ICh2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRikgIT0gMDsKKwlrdm1fcnVuLT5jcjggPSB2Y3B1LT5jcjg7CisJa3ZtX3J1bi0+YXBpY19iYXNlID0gdmNwdS0+YXBpY19iYXNlOworfQorCisvKgorICogQ2hlY2sgaWYgdXNlcnNwYWNlIHJlcXVlc3RlZCBhbiBpbnRlcnJ1cHQgd2luZG93LCBhbmQgdGhhdCB0aGUKKyAqIGludGVycnVwdCB3aW5kb3cgaXMgb3Blbi4KKyAqCisgKiBObyBuZWVkIHRvIGV4aXQgdG8gdXNlcnNwYWNlIGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbnRlcnJ1cHQgcXVldWVkLgorICovCitzdGF0aWMgaW50IGRtX3JlcXVlc3RfZm9yX2lycV9pbmplY3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQkgIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXJldHVybiAoIXZjcHUtPmlycV9zdW1tYXJ5ICYmCisJCWt2bV9ydW4tPnJlcXVlc3RfaW50ZXJydXB0X3dpbmRvdyAmJgorCQl2Y3B1LT5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYKKwkJKHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNhdmVfZGJfcmVncyh1bnNpZ25lZCBsb25nICpkYl9yZWdzKQoreworCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyMCwgJTAiIDogIj1yIihkYl9yZWdzWzBdKSk7CisJYXNtIHZvbGF0aWxlICgibW92ICUlZHIxLCAlMCIgOiAiPXIiKGRiX3JlZ3NbMV0pKTsKKwlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcjIsICUwIiA6ICI9ciIoZGJfcmVnc1syXSkpOworCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyMywgJTAiIDogIj1yIihkYl9yZWdzWzNdKSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZGJfcmVncyh1bnNpZ25lZCBsb25nICpkYl9yZWdzKQoreworCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjAiIDogOiAiciIoZGJfcmVnc1swXSkpOworCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjEiIDogOiAiciIoZGJfcmVnc1sxXSkpOworCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjIiIDogOiAiciIoZGJfcmVnc1syXSkpOworCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjMiIDogOiAiciIoZGJfcmVnc1szXSkpOworfQorCitzdGF0aWMgaW50IHN2bV92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXUxNiBmc19zZWxlY3RvcjsKKwl1MTYgZ3Nfc2VsZWN0b3I7CisJdTE2IGxkdF9zZWxlY3RvcjsKKwlpbnQgcjsKKworYWdhaW46CisJaWYgKCF2Y3B1LT5tbWlvX3JlYWRfY29tcGxldGVkKQorCQlkb19pbnRlcnJ1cHRfcmVxdWVzdHModmNwdSwga3ZtX3J1bik7CisKKwljbGdpKCk7CisKKwlwcmVfc3ZtX3J1bih2Y3B1KTsKKworCXNhdmVfaG9zdF9tc3JzKHZjcHUpOworCWZzX3NlbGVjdG9yID0gcmVhZF9mcygpOworCWdzX3NlbGVjdG9yID0gcmVhZF9ncygpOworCWxkdF9zZWxlY3RvciA9IHJlYWRfbGR0KCk7CisJdmNwdS0+c3ZtLT5ob3N0X2NyMiA9IGt2bV9yZWFkX2NyMigpOworCXZjcHUtPnN2bS0+aG9zdF9kcjYgPSByZWFkX2RyNigpOworCXZjcHUtPnN2bS0+aG9zdF9kcjcgPSByZWFkX2RyNygpOworCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5jcjIgPSB2Y3B1LT5jcjI7CisKKwlpZiAodmNwdS0+c3ZtLT52bWNiLT5zYXZlLmRyNyAmIDB4ZmYpIHsKKwkJd3JpdGVfZHI3KDApOworCQlzYXZlX2RiX3JlZ3ModmNwdS0+c3ZtLT5ob3N0X2RiX3JlZ3MpOworCQlsb2FkX2RiX3JlZ3ModmNwdS0+c3ZtLT5kYl9yZWdzKTsKKwl9CisKKwlmeF9zYXZlKHZjcHUtPmhvc3RfZnhfaW1hZ2UpOworCWZ4X3Jlc3RvcmUodmNwdS0+Z3Vlc3RfZnhfaW1hZ2UpOworCisJYXNtIHZvbGF0aWxlICgKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCSJwdXNoICUlcmJ4OyBwdXNoICUlcmN4OyBwdXNoICUlcmR4OyIKKwkJInB1c2ggJSVyc2k7IHB1c2ggJSVyZGk7IHB1c2ggJSVyYnA7IgorCQkicHVzaCAlJXI4OyAgcHVzaCAlJXI5OyAgcHVzaCAlJXIxMDsgcHVzaCAlJXIxMTsiCisJCSJwdXNoICUlcjEyOyBwdXNoICUlcjEzOyBwdXNoICUlcjE0OyBwdXNoICUlcjE1OyIKKyNlbHNlCisJCSJwdXNoICUlZWJ4OyBwdXNoICUlZWN4OyBwdXNoICUlZWR4OyIKKwkJInB1c2ggJSVlc2k7IHB1c2ggJSVlZGk7IHB1c2ggJSVlYnA7IgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCSJtb3YgJWNbcmJ4XSglW3ZjcHVdKSwgJSVyYnggXG5cdCIKKwkJIm1vdiAlY1tyY3hdKCVbdmNwdV0pLCAlJXJjeCBcblx0IgorCQkibW92ICVjW3JkeF0oJVt2Y3B1XSksICUlcmR4IFxuXHQiCisJCSJtb3YgJWNbcnNpXSglW3ZjcHVdKSwgJSVyc2kgXG5cdCIKKwkJIm1vdiAlY1tyZGldKCVbdmNwdV0pLCAlJXJkaSBcblx0IgorCQkibW92ICVjW3JicF0oJVt2Y3B1XSksICUlcmJwIFxuXHQiCisJCSJtb3YgJWNbcjhdKCVbdmNwdV0pLCAgJSVyOCAgXG5cdCIKKwkJIm1vdiAlY1tyOV0oJVt2Y3B1XSksICAlJXI5ICBcblx0IgorCQkibW92ICVjW3IxMF0oJVt2Y3B1XSksICUlcjEwIFxuXHQiCisJCSJtb3YgJWNbcjExXSglW3ZjcHVdKSwgJSVyMTEgXG5cdCIKKwkJIm1vdiAlY1tyMTJdKCVbdmNwdV0pLCAlJXIxMiBcblx0IgorCQkibW92ICVjW3IxM10oJVt2Y3B1XSksICUlcjEzIFxuXHQiCisJCSJtb3YgJWNbcjE0XSglW3ZjcHVdKSwgJSVyMTQgXG5cdCIKKwkJIm1vdiAlY1tyMTVdKCVbdmNwdV0pLCAlJXIxNSBcblx0IgorI2Vsc2UKKwkJIm1vdiAlY1tyYnhdKCVbdmNwdV0pLCAlJWVieCBcblx0IgorCQkibW92ICVjW3JjeF0oJVt2Y3B1XSksICUlZWN4IFxuXHQiCisJCSJtb3YgJWNbcmR4XSglW3ZjcHVdKSwgJSVlZHggXG5cdCIKKwkJIm1vdiAlY1tyc2ldKCVbdmNwdV0pLCAlJWVzaSBcblx0IgorCQkibW92ICVjW3JkaV0oJVt2Y3B1XSksICUlZWRpIFxuXHQiCisJCSJtb3YgJWNbcmJwXSglW3ZjcHVdKSwgJSVlYnAgXG5cdCIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQkvKiBFbnRlciBndWVzdCBtb2RlICovCisJCSJwdXNoICUlcmF4IFxuXHQiCisJCSJtb3YgJWNbc3ZtXSglW3ZjcHVdKSwgJSVyYXggXG5cdCIKKwkJIm1vdiAlY1t2bWNiXSglJXJheCksICUlcmF4IFxuXHQiCisJCVNWTV9WTUxPQUQgIlxuXHQiCisJCVNWTV9WTVJVTiAiXG5cdCIKKwkJU1ZNX1ZNU0FWRSAiXG5cdCIKKwkJInBvcCAlJXJheCBcblx0IgorI2Vsc2UKKwkJLyogRW50ZXIgZ3Vlc3QgbW9kZSAqLworCQkicHVzaCAlJWVheCBcblx0IgorCQkibW92ICVjW3N2bV0oJVt2Y3B1XSksICUlZWF4IFxuXHQiCisJCSJtb3YgJWNbdm1jYl0oJSVlYXgpLCAlJWVheCBcblx0IgorCQlTVk1fVk1MT0FEICJcblx0IgorCQlTVk1fVk1SVU4gIlxuXHQiCisJCVNWTV9WTVNBVkUgIlxuXHQiCisJCSJwb3AgJSVlYXggXG5cdCIKKyNlbmRpZgorCisJCS8qIFNhdmUgZ3Vlc3QgcmVnaXN0ZXJzLCBsb2FkIGhvc3QgcmVnaXN0ZXJzICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQkibW92ICUlcmJ4LCAlY1tyYnhdKCVbdmNwdV0pIFxuXHQiCisJCSJtb3YgJSVyY3gsICVjW3JjeF0oJVt2Y3B1XSkgXG5cdCIKKwkJIm1vdiAlJXJkeCwgJWNbcmR4XSglW3ZjcHVdKSBcblx0IgorCQkibW92ICUlcnNpLCAlY1tyc2ldKCVbdmNwdV0pIFxuXHQiCisJCSJtb3YgJSVyZGksICVjW3JkaV0oJVt2Y3B1XSkgXG5cdCIKKwkJIm1vdiAlJXJicCwgJWNbcmJwXSglW3ZjcHVdKSBcblx0IgorCQkibW92ICUlcjgsICAlY1tyOF0oJVt2Y3B1XSkgXG5cdCIKKwkJIm1vdiAlJXI5LCAgJWNbcjldKCVbdmNwdV0pIFxuXHQiCisJCSJtb3YgJSVyMTAsICVjW3IxMF0oJVt2Y3B1XSkgXG5cdCIKKwkJIm1vdiAlJXIxMSwgJWNbcjExXSglW3ZjcHVdKSBcblx0IgorCQkibW92ICUlcjEyLCAlY1tyMTJdKCVbdmNwdV0pIFxuXHQiCisJCSJtb3YgJSVyMTMsICVjW3IxM10oJVt2Y3B1XSkgXG5cdCIKKwkJIm1vdiAlJXIxNCwgJWNbcjE0XSglW3ZjcHVdKSBcblx0IgorCQkibW92ICUlcjE1LCAlY1tyMTVdKCVbdmNwdV0pIFxuXHQiCisKKwkJInBvcCAgJSVyMTU7IHBvcCAgJSVyMTQ7IHBvcCAgJSVyMTM7IHBvcCAgJSVyMTI7IgorCQkicG9wICAlJXIxMTsgcG9wICAlJXIxMDsgcG9wICAlJXI5OyAgcG9wICAlJXI4OyIKKwkJInBvcCAgJSVyYnA7IHBvcCAgJSVyZGk7IHBvcCAgJSVyc2k7IgorCQkicG9wICAlJXJkeDsgcG9wICAlJXJjeDsgcG9wICAlJXJieDsgXG5cdCIKKyNlbHNlCisJCSJtb3YgJSVlYngsICVjW3JieF0oJVt2Y3B1XSkgXG5cdCIKKwkJIm1vdiAlJWVjeCwgJWNbcmN4XSglW3ZjcHVdKSBcblx0IgorCQkibW92ICUlZWR4LCAlY1tyZHhdKCVbdmNwdV0pIFxuXHQiCisJCSJtb3YgJSVlc2ksICVjW3JzaV0oJVt2Y3B1XSkgXG5cdCIKKwkJIm1vdiAlJWVkaSwgJWNbcmRpXSglW3ZjcHVdKSBcblx0IgorCQkibW92ICUlZWJwLCAlY1tyYnBdKCVbdmNwdV0pIFxuXHQiCisKKwkJInBvcCAgJSVlYnA7IHBvcCAgJSVlZGk7IHBvcCAgJSVlc2k7IgorCQkicG9wICAlJWVkeDsgcG9wICAlJWVjeDsgcG9wICAlJWVieDsgXG5cdCIKKyNlbmRpZgorCQk6CisJCTogW3ZjcHVdImEiKHZjcHUpLAorCQkgIFtzdm1dImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgc3ZtKSksCisJCSAgW3ZtY2JdImkiKG9mZnNldG9mKHN0cnVjdCB2Y3B1X3N2bSwgdm1jYl9wYSkpLAorCQkgIFtyYnhdImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgcmVnc1tWQ1BVX1JFR1NfUkJYXSkpLAorCQkgIFtyY3hdImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgcmVnc1tWQ1BVX1JFR1NfUkNYXSkpLAorCQkgIFtyZHhdImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgcmVnc1tWQ1BVX1JFR1NfUkRYXSkpLAorCQkgIFtyc2ldImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgcmVnc1tWQ1BVX1JFR1NfUlNJXSkpLAorCQkgIFtyZGldImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgcmVnc1tWQ1BVX1JFR1NfUkRJXSkpLAorCQkgIFtyYnBdImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgcmVnc1tWQ1BVX1JFR1NfUkJQXSkpCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQkgICxbcjggXSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1I4IF0pKSwKKwkJICBbcjkgXSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1I5IF0pKSwKKwkJICBbcjEwXSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1IxMF0pKSwKKwkJICBbcjExXSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1IxMV0pKSwKKwkJICBbcjEyXSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1IxMl0pKSwKKwkJICBbcjEzXSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1IxM10pKSwKKwkJICBbcjE0XSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1IxNF0pKSwKKwkJICBbcjE1XSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1IxNV0pKQorI2VuZGlmCisJCTogImNjIiwgIm1lbW9yeSIgKTsKKworCWZ4X3NhdmUodmNwdS0+Z3Vlc3RfZnhfaW1hZ2UpOworCWZ4X3Jlc3RvcmUodmNwdS0+aG9zdF9meF9pbWFnZSk7CisKKwlpZiAoKHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5kcjcgJiAweGZmKSkKKwkJbG9hZF9kYl9yZWdzKHZjcHUtPnN2bS0+aG9zdF9kYl9yZWdzKTsKKworCXZjcHUtPmNyMiA9IHZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5jcjI7CisKKwl3cml0ZV9kcjYodmNwdS0+c3ZtLT5ob3N0X2RyNik7CisJd3JpdGVfZHI3KHZjcHUtPnN2bS0+aG9zdF9kcjcpOworCWt2bV93cml0ZV9jcjIodmNwdS0+c3ZtLT5ob3N0X2NyMik7CisKKwlsb2FkX2ZzKGZzX3NlbGVjdG9yKTsKKwlsb2FkX2dzKGdzX3NlbGVjdG9yKTsKKwlsb2FkX2xkdChsZHRfc2VsZWN0b3IpOworCWxvYWRfaG9zdF9tc3JzKHZjcHUpOworCisJcmVsb2FkX3Rzcyh2Y3B1KTsKKworCS8qCisJICogUHJvZmlsZSBLVk0gZXhpdCBSSVBzOgorCSAqLworCWlmICh1bmxpa2VseShwcm9mX29uID09IEtWTV9QUk9GSUxJTkcpKQorCQlwcm9maWxlX2hpdChLVk1fUFJPRklMSU5HLAorCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZyl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUucmlwKTsKKworCXN0Z2koKTsKKworCWt2bV9yZXB1dF9pcnEodmNwdSk7CisKKwl2Y3B1LT5zdm0tPm5leHRfcmlwID0gMDsKKworCWlmICh2Y3B1LT5zdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlID09IFNWTV9FWElUX0VSUikgeworCQlrdm1fcnVuLT5leGl0X3R5cGUgPSBLVk1fRVhJVF9UWVBFX0ZBSUxfRU5UUlk7CisJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZTsKKwkJcG9zdF9rdm1fcnVuX3NhdmUodmNwdSwga3ZtX3J1bik7CisJCXJldHVybiAwOworCX0KKworCXIgPSBoYW5kbGVfZXhpdCh2Y3B1LCBrdm1fcnVuKTsKKwlpZiAociA+IDApIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkrK2t2bV9zdGF0LnNpZ25hbF9leGl0czsKKwkJCXBvc3Rfa3ZtX3J1bl9zYXZlKHZjcHUsIGt2bV9ydW4pOworCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCisJCWlmIChkbV9yZXF1ZXN0X2Zvcl9pcnFfaW5qZWN0aW9uKHZjcHUsIGt2bV9ydW4pKSB7CisJCQkrK2t2bV9zdGF0LnJlcXVlc3RfaXJxX2V4aXRzOworCQkJcG9zdF9rdm1fcnVuX3NhdmUodmNwdSwga3ZtX3J1bik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJCWt2bV9yZXNjaGVkKHZjcHUpOworCQlnb3RvIGFnYWluOworCX0KKwlwb3N0X2t2bV9ydW5fc2F2ZSh2Y3B1LCBrdm1fcnVuKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgc3ZtX2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJZm9yY2VfbmV3X2FzaWQodmNwdSk7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9zZXRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyByb290KQoreworCXZjcHUtPnN2bS0+dm1jYi0+c2F2ZS5jcjMgPSByb290OworCWZvcmNlX25ld19hc2lkKHZjcHUpOworfQorCitzdGF0aWMgdm9pZCBzdm1faW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgdW5zaWduZWQgbG9uZyAgYWRkciwKKwkJCQkgIHVpbnQzMl90IGVycl9jb2RlKQoreworCXVpbnQzMl90IGV4aXRfaW50X2luZm8gPSB2Y3B1LT5zdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbzsKKworCSsra3ZtX3N0YXQucGZfZ3Vlc3Q7CisKKwlpZiAoaXNfcGFnZV9mYXVsdChleGl0X2ludF9pbmZvKSkgeworCisJCXZjcHUtPnN2bS0+dm1jYi0+Y29udHJvbC5ldmVudF9pbmpfZXJyID0gMDsKKwkJdmNwdS0+c3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2luaiA9IAlTVk1fRVZUSU5KX1ZBTElEIHwKKwkJCQkJCQlTVk1fRVZUSU5KX1ZBTElEX0VSUiB8CisJCQkJCQkJU1ZNX0VWVElOSl9UWVBFX0VYRVBUIHwKKwkJCQkJCQlERl9WRUNUT1I7CisJCXJldHVybjsKKwl9CisJdmNwdS0+Y3IyID0gYWRkcjsKKwl2Y3B1LT5zdm0tPnZtY2ItPnNhdmUuY3IyID0gYWRkcjsKKwl2Y3B1LT5zdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qID0gCVNWTV9FVlRJTkpfVkFMSUQgfAorCQkJCQkJU1ZNX0VWVElOSl9WQUxJRF9FUlIgfAorCQkJCQkJU1ZNX0VWVElOSl9UWVBFX0VYRVBUIHwKKwkJCQkJCVBGX1ZFQ1RPUjsKKwl2Y3B1LT5zdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qX2VyciA9IGVycl9jb2RlOworfQorCisKK3N0YXRpYyBpbnQgaXNfZGlzYWJsZWQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBrdm1fYXJjaF9vcHMgc3ZtX2FyY2hfb3BzID0geworCS5jcHVfaGFzX2t2bV9zdXBwb3J0ID0gaGFzX3N2bSwKKwkuZGlzYWJsZWRfYnlfYmlvcyA9IGlzX2Rpc2FibGVkLAorCS5oYXJkd2FyZV9zZXR1cCA9IHN2bV9oYXJkd2FyZV9zZXR1cCwKKwkuaGFyZHdhcmVfdW5zZXR1cCA9IHN2bV9oYXJkd2FyZV91bnNldHVwLAorCS5oYXJkd2FyZV9lbmFibGUgPSBzdm1faGFyZHdhcmVfZW5hYmxlLAorCS5oYXJkd2FyZV9kaXNhYmxlID0gc3ZtX2hhcmR3YXJlX2Rpc2FibGUsCisKKwkudmNwdV9jcmVhdGUgPSBzdm1fY3JlYXRlX3ZjcHUsCisJLnZjcHVfZnJlZSA9IHN2bV9mcmVlX3ZjcHUsCisKKwkudmNwdV9sb2FkID0gc3ZtX3ZjcHVfbG9hZCwKKwkudmNwdV9wdXQgPSBzdm1fdmNwdV9wdXQsCisKKwkuc2V0X2d1ZXN0X2RlYnVnID0gc3ZtX2d1ZXN0X2RlYnVnLAorCS5nZXRfbXNyID0gc3ZtX2dldF9tc3IsCisJLnNldF9tc3IgPSBzdm1fc2V0X21zciwKKwkuZ2V0X3NlZ21lbnRfYmFzZSA9IHN2bV9nZXRfc2VnbWVudF9iYXNlLAorCS5nZXRfc2VnbWVudCA9IHN2bV9nZXRfc2VnbWVudCwKKwkuc2V0X3NlZ21lbnQgPSBzdm1fc2V0X3NlZ21lbnQsCisJLmdldF9jc19kYl9sX2JpdHMgPSBzdm1fZ2V0X2NzX2RiX2xfYml0cywKKwkuZGVjYWNoZV9jcjBfY3I0X2d1ZXN0X2JpdHMgPSBzdm1fZGVjYWNoZV9jcjBfY3I0X2d1ZXN0X2JpdHMsCisJLnNldF9jcjAgPSBzdm1fc2V0X2NyMCwKKwkuc2V0X2NyMF9ub19tb2Rlc3dpdGNoID0gc3ZtX3NldF9jcjAsCisJLnNldF9jcjMgPSBzdm1fc2V0X2NyMywKKwkuc2V0X2NyNCA9IHN2bV9zZXRfY3I0LAorCS5zZXRfZWZlciA9IHN2bV9zZXRfZWZlciwKKwkuZ2V0X2lkdCA9IHN2bV9nZXRfaWR0LAorCS5zZXRfaWR0ID0gc3ZtX3NldF9pZHQsCisJLmdldF9nZHQgPSBzdm1fZ2V0X2dkdCwKKwkuc2V0X2dkdCA9IHN2bV9zZXRfZ2R0LAorCS5nZXRfZHIgPSBzdm1fZ2V0X2RyLAorCS5zZXRfZHIgPSBzdm1fc2V0X2RyLAorCS5jYWNoZV9yZWdzID0gc3ZtX2NhY2hlX3JlZ3MsCisJLmRlY2FjaGVfcmVncyA9IHN2bV9kZWNhY2hlX3JlZ3MsCisJLmdldF9yZmxhZ3MgPSBzdm1fZ2V0X3JmbGFncywKKwkuc2V0X3JmbGFncyA9IHN2bV9zZXRfcmZsYWdzLAorCisJLmludmxwZyA9IHN2bV9pbnZscGcsCisJLnRsYl9mbHVzaCA9IHN2bV9mbHVzaF90bGIsCisJLmluamVjdF9wYWdlX2ZhdWx0ID0gc3ZtX2luamVjdF9wYWdlX2ZhdWx0LAorCisJLmluamVjdF9ncCA9IHN2bV9pbmplY3RfZ3AsCisKKwkucnVuID0gc3ZtX3ZjcHVfcnVuLAorCS5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uID0gc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbiwKKwkudmNwdV9zZXR1cCA9IHN2bV92Y3B1X3NldHVwLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3ZtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4ga3ZtX2luaXRfYXJjaCgmc3ZtX2FyY2hfb3BzLCBUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdm1fZXhpdCh2b2lkKQoreworCWt2bV9leGl0X2FyY2goKTsKK30KKworbW9kdWxlX2luaXQoc3ZtX2luaXQpCittb2R1bGVfZXhpdChzdm1fZXhpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMva3ZtL3N2bS5oIGIvZHJpdmVycy9rdm0vc3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MzFjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMva3ZtL3N2bS5oCkBAIC0wLDAgKzEsMzE1IEBACisjaWZuZGVmIF9fU1ZNX0gKKyNkZWZpbmUgX19TVk1fSAorCitlbnVtIHsKKwlJTlRFUkNFUFRfSU5UUiwKKwlJTlRFUkNFUFRfTk1JLAorCUlOVEVSQ0VQVF9TTUksCisJSU5URVJDRVBUX0lOSVQsCisJSU5URVJDRVBUX1ZJTlRSLAorCUlOVEVSQ0VQVF9TRUxFQ1RJVkVfQ1IwLAorCUlOVEVSQ0VQVF9TVE9SRV9JRFRSLAorCUlOVEVSQ0VQVF9TVE9SRV9HRFRSLAorCUlOVEVSQ0VQVF9TVE9SRV9MRFRSLAorCUlOVEVSQ0VQVF9TVE9SRV9UUiwKKwlJTlRFUkNFUFRfTE9BRF9JRFRSLAorCUlOVEVSQ0VQVF9MT0FEX0dEVFIsCisJSU5URVJDRVBUX0xPQURfTERUUiwKKwlJTlRFUkNFUFRfTE9BRF9UUiwKKwlJTlRFUkNFUFRfUkRUU0MsCisJSU5URVJDRVBUX1JEUE1DLAorCUlOVEVSQ0VQVF9QVVNIRiwKKwlJTlRFUkNFUFRfUE9QRiwKKwlJTlRFUkNFUFRfQ1BVSUQsCisJSU5URVJDRVBUX1JTTSwKKwlJTlRFUkNFUFRfSVJFVCwKKwlJTlRFUkNFUFRfSU5UbiwKKwlJTlRFUkNFUFRfSU5WRCwKKwlJTlRFUkNFUFRfUEFVU0UsCisJSU5URVJDRVBUX0hMVCwKKwlJTlRFUkNFUFRfSU5WTFBHLAorCUlOVEVSQ0VQVF9JTlZMUEdBLAorCUlOVEVSQ0VQVF9JT0lPX1BST1QsCisJSU5URVJDRVBUX01TUl9QUk9ULAorCUlOVEVSQ0VQVF9UQVNLX1NXSVRDSCwKKwlJTlRFUkNFUFRfRkVSUl9GUkVFWkUsCisJSU5URVJDRVBUX1NIVVRET1dOLAorCUlOVEVSQ0VQVF9WTVJVTiwKKwlJTlRFUkNFUFRfVk1NQ0FMTCwKKwlJTlRFUkNFUFRfVk1MT0FELAorCUlOVEVSQ0VQVF9WTVNBVkUsCisJSU5URVJDRVBUX1NUR0ksCisJSU5URVJDRVBUX0NMR0ksCisJSU5URVJDRVBUX1NLSU5JVCwKKwlJTlRFUkNFUFRfUkRUU0NQLAorCUlOVEVSQ0VQVF9JQ0VCUCwKKwlJTlRFUkNFUFRfV0JJTlZELAorfTsKKworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSB2bWNiX2NvbnRyb2xfYXJlYSB7CisJdTE2IGludGVyY2VwdF9jcl9yZWFkOworCXUxNiBpbnRlcmNlcHRfY3Jfd3JpdGU7CisJdTE2IGludGVyY2VwdF9kcl9yZWFkOworCXUxNiBpbnRlcmNlcHRfZHJfd3JpdGU7CisJdTMyIGludGVyY2VwdF9leGNlcHRpb25zOworCXU2NCBpbnRlcmNlcHQ7CisJdTggcmVzZXJ2ZWRfMVs0NF07CisJdTY0IGlvcG1fYmFzZV9wYTsKKwl1NjQgbXNycG1fYmFzZV9wYTsKKwl1NjQgdHNjX29mZnNldDsKKwl1MzIgYXNpZDsKKwl1OCB0bGJfY3RsOworCXU4IHJlc2VydmVkXzJbM107CisJdTMyIGludF9jdGw7CisJdTMyIGludF92ZWN0b3I7CisJdTMyIGludF9zdGF0ZTsKKwl1OCByZXNlcnZlZF8zWzRdOworCXUzMiBleGl0X2NvZGU7CisJdTMyIGV4aXRfY29kZV9oaTsKKwl1NjQgZXhpdF9pbmZvXzE7CisJdTY0IGV4aXRfaW5mb18yOworCXUzMiBleGl0X2ludF9pbmZvOworCXUzMiBleGl0X2ludF9pbmZvX2VycjsKKwl1NjQgbmVzdGVkX2N0bDsKKwl1OCByZXNlcnZlZF80WzE2XTsKKwl1MzIgZXZlbnRfaW5qOworCXUzMiBldmVudF9pbmpfZXJyOworCXU2NCBuZXN0ZWRfY3IzOworCXU2NCBsYnJfY3RsOworCXU4IHJlc2VydmVkXzVbODMyXTsKK307CisKKworI2RlZmluZSBUTEJfQ09OVFJPTF9ET19OT1RISU5HIDAKKyNkZWZpbmUgVExCX0NPTlRST0xfRkxVU0hfQUxMX0FTSUQgMQorCisjZGVmaW5lIFZfVFBSX01BU0sgMHgwZgorCisjZGVmaW5lIFZfSVJRX1NISUZUIDgKKyNkZWZpbmUgVl9JUlFfTUFTSyAoMSA8PCBWX0lSUV9TSElGVCkKKworI2RlZmluZSBWX0lOVFJfUFJJT19TSElGVCAxNgorI2RlZmluZSBWX0lOVFJfUFJJT19NQVNLICgweDBmIDw8IFZfSU5UUl9QUklPX1NISUZUKQorCisjZGVmaW5lIFZfSUdOX1RQUl9TSElGVCAyMAorI2RlZmluZSBWX0lHTl9UUFJfTUFTSyAoMSA8PCBWX0lHTl9UUFJfU0hJRlQpCisKKyNkZWZpbmUgVl9JTlRSX01BU0tJTkdfU0hJRlQgMjQKKyNkZWZpbmUgVl9JTlRSX01BU0tJTkdfTUFTSyAoMSA8PCBWX0lOVFJfTUFTS0lOR19TSElGVCkKKworI2RlZmluZSBTVk1fSU5URVJSVVBUX1NIQURPV19NQVNLIDEKKworI2RlZmluZSBTVk1fSU9JT19TVFJfU0hJRlQgMgorI2RlZmluZSBTVk1fSU9JT19SRVBfU0hJRlQgMworI2RlZmluZSBTVk1fSU9JT19TSVpFX1NISUZUIDQKKyNkZWZpbmUgU1ZNX0lPSU9fQVNJWkVfU0hJRlQgNworCisjZGVmaW5lIFNWTV9JT0lPX1RZUEVfTUFTSyAxCisjZGVmaW5lIFNWTV9JT0lPX1NUUl9NQVNLICgxIDw8IFNWTV9JT0lPX1NUUl9TSElGVCkKKyNkZWZpbmUgU1ZNX0lPSU9fUkVQX01BU0sgKDEgPDwgU1ZNX0lPSU9fUkVQX1NISUZUKQorI2RlZmluZSBTVk1fSU9JT19TSVpFX01BU0sgKDcgPDwgU1ZNX0lPSU9fU0laRV9TSElGVCkKKyNkZWZpbmUgU1ZNX0lPSU9fQVNJWkVfTUFTSyAoNyA8PCBTVk1fSU9JT19BU0laRV9TSElGVCkKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgdm1jYl9zZWcgeworCXUxNiBzZWxlY3RvcjsKKwl1MTYgYXR0cmliOworCXUzMiBsaW1pdDsKKwl1NjQgYmFzZTsKK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2Jfc2F2ZV9hcmVhIHsKKwlzdHJ1Y3Qgdm1jYl9zZWcgZXM7CisJc3RydWN0IHZtY2Jfc2VnIGNzOworCXN0cnVjdCB2bWNiX3NlZyBzczsKKwlzdHJ1Y3Qgdm1jYl9zZWcgZHM7CisJc3RydWN0IHZtY2Jfc2VnIGZzOworCXN0cnVjdCB2bWNiX3NlZyBnczsKKwlzdHJ1Y3Qgdm1jYl9zZWcgZ2R0cjsKKwlzdHJ1Y3Qgdm1jYl9zZWcgbGR0cjsKKwlzdHJ1Y3Qgdm1jYl9zZWcgaWR0cjsKKwlzdHJ1Y3Qgdm1jYl9zZWcgdHI7CisJdTggcmVzZXJ2ZWRfMVs0M107CisJdTggY3BsOworCXU4IHJlc2VydmVkXzJbNF07CisJdTY0IGVmZXI7CisJdTggcmVzZXJ2ZWRfM1sxMTJdOworCXU2NCBjcjQ7CisJdTY0IGNyMzsKKwl1NjQgY3IwOworCXU2NCBkcjc7CisJdTY0IGRyNjsKKwl1NjQgcmZsYWdzOworCXU2NCByaXA7CisJdTggcmVzZXJ2ZWRfNFs4OF07CisJdTY0IHJzcDsKKwl1OCByZXNlcnZlZF81WzI0XTsKKwl1NjQgcmF4OworCXU2NCBzdGFyOworCXU2NCBsc3RhcjsKKwl1NjQgY3N0YXI7CisJdTY0IHNmbWFzazsKKwl1NjQga2VybmVsX2dzX2Jhc2U7CisJdTY0IHN5c2VudGVyX2NzOworCXU2NCBzeXNlbnRlcl9lc3A7CisJdTY0IHN5c2VudGVyX2VpcDsKKwl1NjQgY3IyOworCXU4IHJlc2VydmVkXzZbMzJdOworCXU2NCBnX3BhdDsKKwl1NjQgZGJnY3RsOworCXU2NCBicl9mcm9tOworCXU2NCBicl90bzsKKwl1NjQgbGFzdF9leGNwX2Zyb207CisJdTY0IGxhc3RfZXhjcF90bzsKK307CisKK3N0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIHZtY2IgeworCXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSBjb250cm9sOworCXN0cnVjdCB2bWNiX3NhdmVfYXJlYSBzYXZlOworfTsKKworI2RlZmluZSBTVk1fQ1BVSURfRkVBVFVSRV9TSElGVCAyCisjZGVmaW5lIFNWTV9DUFVJRF9GVU5DIDB4ODAwMDAwMGEKKworI2RlZmluZSBNU1JfRUZFUl9TVk1FX01BU0sgKDFVTEwgPDwgMTIpCisjZGVmaW5lIE1TUl9WTV9IU0FWRV9QQSAweGMwMDEwMTE3VUxMCisKKyNkZWZpbmUgU1ZNX1NFTEVDVE9SX1NfU0hJRlQgNAorI2RlZmluZSBTVk1fU0VMRUNUT1JfRFBMX1NISUZUIDUKKyNkZWZpbmUgU1ZNX1NFTEVDVE9SX1BfU0hJRlQgNworI2RlZmluZSBTVk1fU0VMRUNUT1JfQVZMX1NISUZUIDgKKyNkZWZpbmUgU1ZNX1NFTEVDVE9SX0xfU0hJRlQgOQorI2RlZmluZSBTVk1fU0VMRUNUT1JfREJfU0hJRlQgMTAKKyNkZWZpbmUgU1ZNX1NFTEVDVE9SX0dfU0hJRlQgMTEKKworI2RlZmluZSBTVk1fU0VMRUNUT1JfVFlQRV9NQVNLICgweGYpCisjZGVmaW5lIFNWTV9TRUxFQ1RPUl9TX01BU0sgKDEgPDwgU1ZNX1NFTEVDVE9SX1NfU0hJRlQpCisjZGVmaW5lIFNWTV9TRUxFQ1RPUl9EUExfTUFTSyAoMyA8PCBTVk1fU0VMRUNUT1JfRFBMX1NISUZUKQorI2RlZmluZSBTVk1fU0VMRUNUT1JfUF9NQVNLICgxIDw8IFNWTV9TRUxFQ1RPUl9QX1NISUZUKQorI2RlZmluZSBTVk1fU0VMRUNUT1JfQVZMX01BU0sgKDEgPDwgU1ZNX1NFTEVDVE9SX0FWTF9TSElGVCkKKyNkZWZpbmUgU1ZNX1NFTEVDVE9SX0xfTUFTSyAoMSA8PCBTVk1fU0VMRUNUT1JfTF9TSElGVCkKKyNkZWZpbmUgU1ZNX1NFTEVDVE9SX0RCX01BU0sgKDEgPDwgU1ZNX1NFTEVDVE9SX0RCX1NISUZUKQorI2RlZmluZSBTVk1fU0VMRUNUT1JfR19NQVNLICgxIDw8IFNWTV9TRUxFQ1RPUl9HX1NISUZUKQorCisjZGVmaW5lIFNWTV9TRUxFQ1RPUl9XUklURV9NQVNLICgxIDw8IDEpCisjZGVmaW5lIFNWTV9TRUxFQ1RPUl9SRUFEX01BU0sgU1ZNX1NFTEVDVE9SX1dSSVRFX01BU0sKKyNkZWZpbmUgU1ZNX1NFTEVDVE9SX0NPREVfTUFTSyAoMSA8PCAzKQorCisjZGVmaW5lIElOVEVSQ0VQVF9DUjBfTUFTSyAxCisjZGVmaW5lIElOVEVSQ0VQVF9DUjNfTUFTSyAoMSA8PCAzKQorI2RlZmluZSBJTlRFUkNFUFRfQ1I0X01BU0sgKDEgPDwgNCkKKworI2RlZmluZSBJTlRFUkNFUFRfRFIwX01BU0sgMQorI2RlZmluZSBJTlRFUkNFUFRfRFIxX01BU0sgKDEgPDwgMSkKKyNkZWZpbmUgSU5URVJDRVBUX0RSMl9NQVNLICgxIDw8IDIpCisjZGVmaW5lIElOVEVSQ0VQVF9EUjNfTUFTSyAoMSA8PCAzKQorI2RlZmluZSBJTlRFUkNFUFRfRFI0X01BU0sgKDEgPDwgNCkKKyNkZWZpbmUgSU5URVJDRVBUX0RSNV9NQVNLICgxIDw8IDUpCisjZGVmaW5lIElOVEVSQ0VQVF9EUjZfTUFTSyAoMSA8PCA2KQorI2RlZmluZSBJTlRFUkNFUFRfRFI3X01BU0sgKDEgPDwgNykKKworI2RlZmluZSBTVk1fRVZUSU5KX1ZFQ19NQVNLIDB4ZmYKKworI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfU0hJRlQgOAorI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTUFTSyAoNyA8PCBTVk1fRVZUSU5KX1RZUEVfU0hJRlQpCisKKyNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0lOVFIgKDAgPDwgU1ZNX0VWVElOSl9UWVBFX1NISUZUKQorI2RlZmluZSBTVk1fRVZUSU5KX1RZUEVfTk1JICgyIDw8IFNWTV9FVlRJTkpfVFlQRV9TSElGVCkKKyNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX0VYRVBUICgzIDw8IFNWTV9FVlRJTkpfVFlQRV9TSElGVCkKKyNkZWZpbmUgU1ZNX0VWVElOSl9UWVBFX1NPRlQgKDQgPDwgU1ZNX0VWVElOSl9UWVBFX1NISUZUKQorCisjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSUQgKDEgPDwgMzEpCisjZGVmaW5lIFNWTV9FVlRJTkpfVkFMSURfRVJSICgxIDw8IDExKQorCisjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WRUNfTUFTSyBTVk1fRVZUSU5KX1ZFQ19NQVNLCisKKyNkZWZpbmUJU1ZNX0VYSVRJTlRJTkZPX1RZUEVfSU5UUiBTVk1fRVZUSU5KX1RZUEVfSU5UUgorI2RlZmluZQlTVk1fRVhJVElOVElORk9fVFlQRV9OTUkgU1ZNX0VWVElOSl9UWVBFX05NSQorI2RlZmluZQlTVk1fRVhJVElOVElORk9fVFlQRV9FWEVQVCBTVk1fRVZUSU5KX1RZUEVfRVhFUFQKKyNkZWZpbmUJU1ZNX0VYSVRJTlRJTkZPX1RZUEVfU09GVCBTVk1fRVZUSU5KX1RZUEVfU09GVAorCisjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRCBTVk1fRVZUSU5KX1ZBTElECisjZGVmaW5lIFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIgU1ZNX0VWVElOSl9WQUxJRF9FUlIKKworI2RlZmluZQlTVk1fRVhJVF9SRUFEX0NSMCAJMHgwMDAKKyNkZWZpbmUJU1ZNX0VYSVRfUkVBRF9DUjMgCTB4MDAzCisjZGVmaW5lCVNWTV9FWElUX1JFQURfQ1I0IAkweDAwNAorI2RlZmluZQlTVk1fRVhJVF9SRUFEX0NSOCAJMHgwMDgKKyNkZWZpbmUJU1ZNX0VYSVRfV1JJVEVfQ1IwIAkweDAxMAorI2RlZmluZQlTVk1fRVhJVF9XUklURV9DUjMgCTB4MDEzCisjZGVmaW5lCVNWTV9FWElUX1dSSVRFX0NSNCAJMHgwMTQKKyNkZWZpbmUJU1ZNX0VYSVRfV1JJVEVfQ1I4IAkweDAxOAorI2RlZmluZQlTVk1fRVhJVF9SRUFEX0RSMCAJMHgwMjAKKyNkZWZpbmUJU1ZNX0VYSVRfUkVBRF9EUjEgCTB4MDIxCisjZGVmaW5lCVNWTV9FWElUX1JFQURfRFIyIAkweDAyMgorI2RlZmluZQlTVk1fRVhJVF9SRUFEX0RSMyAJMHgwMjMKKyNkZWZpbmUJU1ZNX0VYSVRfUkVBRF9EUjQgCTB4MDI0CisjZGVmaW5lCVNWTV9FWElUX1JFQURfRFI1IAkweDAyNQorI2RlZmluZQlTVk1fRVhJVF9SRUFEX0RSNiAJMHgwMjYKKyNkZWZpbmUJU1ZNX0VYSVRfUkVBRF9EUjcgCTB4MDI3CisjZGVmaW5lCVNWTV9FWElUX1dSSVRFX0RSMCAJMHgwMzAKKyNkZWZpbmUJU1ZNX0VYSVRfV1JJVEVfRFIxIAkweDAzMQorI2RlZmluZQlTVk1fRVhJVF9XUklURV9EUjIgCTB4MDMyCisjZGVmaW5lCVNWTV9FWElUX1dSSVRFX0RSMyAJMHgwMzMKKyNkZWZpbmUJU1ZNX0VYSVRfV1JJVEVfRFI0IAkweDAzNAorI2RlZmluZQlTVk1fRVhJVF9XUklURV9EUjUgCTB4MDM1CisjZGVmaW5lCVNWTV9FWElUX1dSSVRFX0RSNiAJMHgwMzYKKyNkZWZpbmUJU1ZNX0VYSVRfV1JJVEVfRFI3IAkweDAzNworI2RlZmluZSBTVk1fRVhJVF9FWENQX0JBU0UgICAgICAweDA0MAorI2RlZmluZSBTVk1fRVhJVF9JTlRSCQkweDA2MAorI2RlZmluZSBTVk1fRVhJVF9OTUkJCTB4MDYxCisjZGVmaW5lIFNWTV9FWElUX1NNSQkJMHgwNjIKKyNkZWZpbmUgU1ZNX0VYSVRfSU5JVAkJMHgwNjMKKyNkZWZpbmUgU1ZNX0VYSVRfVklOVFIJCTB4MDY0CisjZGVmaW5lIFNWTV9FWElUX0NSMF9TRUxfV1JJVEUJMHgwNjUKKyNkZWZpbmUgU1ZNX0VYSVRfSURUUl9SRUFECTB4MDY2CisjZGVmaW5lIFNWTV9FWElUX0dEVFJfUkVBRAkweDA2NworI2RlZmluZSBTVk1fRVhJVF9MRFRSX1JFQUQJMHgwNjgKKyNkZWZpbmUgU1ZNX0VYSVRfVFJfUkVBRAkweDA2OQorI2RlZmluZSBTVk1fRVhJVF9JRFRSX1dSSVRFCTB4MDZhCisjZGVmaW5lIFNWTV9FWElUX0dEVFJfV1JJVEUJMHgwNmIKKyNkZWZpbmUgU1ZNX0VYSVRfTERUUl9XUklURQkweDA2YworI2RlZmluZSBTVk1fRVhJVF9UUl9XUklURQkweDA2ZAorI2RlZmluZSBTVk1fRVhJVF9SRFRTQwkJMHgwNmUKKyNkZWZpbmUgU1ZNX0VYSVRfUkRQTUMJCTB4MDZmCisjZGVmaW5lIFNWTV9FWElUX1BVU0hGCQkweDA3MAorI2RlZmluZSBTVk1fRVhJVF9QT1BGCQkweDA3MQorI2RlZmluZSBTVk1fRVhJVF9DUFVJRAkJMHgwNzIKKyNkZWZpbmUgU1ZNX0VYSVRfUlNNCQkweDA3MworI2RlZmluZSBTVk1fRVhJVF9JUkVUCQkweDA3NAorI2RlZmluZSBTVk1fRVhJVF9TV0lOVAkJMHgwNzUKKyNkZWZpbmUgU1ZNX0VYSVRfSU5WRAkJMHgwNzYKKyNkZWZpbmUgU1ZNX0VYSVRfUEFVU0UJCTB4MDc3CisjZGVmaW5lIFNWTV9FWElUX0hMVAkJMHgwNzgKKyNkZWZpbmUgU1ZNX0VYSVRfSU5WTFBHCQkweDA3OQorI2RlZmluZSBTVk1fRVhJVF9JTlZMUEdBCTB4MDdhCisjZGVmaW5lIFNWTV9FWElUX0lPSU8JCTB4MDdiCisjZGVmaW5lIFNWTV9FWElUX01TUgkJMHgwN2MKKyNkZWZpbmUgU1ZNX0VYSVRfVEFTS19TV0lUQ0gJMHgwN2QKKyNkZWZpbmUgU1ZNX0VYSVRfRkVSUl9GUkVFWkUJMHgwN2UKKyNkZWZpbmUgU1ZNX0VYSVRfU0hVVERPV04JMHgwN2YKKyNkZWZpbmUgU1ZNX0VYSVRfVk1SVU4JCTB4MDgwCisjZGVmaW5lIFNWTV9FWElUX1ZNTUNBTEwJMHgwODEKKyNkZWZpbmUgU1ZNX0VYSVRfVk1MT0FECQkweDA4MgorI2RlZmluZSBTVk1fRVhJVF9WTVNBVkUJCTB4MDgzCisjZGVmaW5lIFNWTV9FWElUX1NUR0kJCTB4MDg0CisjZGVmaW5lIFNWTV9FWElUX0NMR0kJCTB4MDg1CisjZGVmaW5lIFNWTV9FWElUX1NLSU5JVAkJMHgwODYKKyNkZWZpbmUgU1ZNX0VYSVRfUkRUU0NQCQkweDA4NworI2RlZmluZSBTVk1fRVhJVF9JQ0VCUAkJMHgwODgKKyNkZWZpbmUgU1ZNX0VYSVRfV0JJTlZECQkweDA4OQorI2RlZmluZSBTVk1fRVhJVF9OUEYgIAkJMHg0MDAKKworI2RlZmluZSBTVk1fRVhJVF9FUlIJCS0xCisKKyNkZWZpbmUgU1ZNX0NSMF9TRUxFQ1RJVkVfTUFTSyAoMSA8PCAzIHwgMSkgLy8gVFMgYW5kIE1QCisKKyNkZWZpbmUgU1ZNX1ZNTE9BRCAiLmJ5dGUgMHgwZiwgMHgwMSwgMHhkYSIKKyNkZWZpbmUgU1ZNX1ZNUlVOICAiLmJ5dGUgMHgwZiwgMHgwMSwgMHhkOCIKKyNkZWZpbmUgU1ZNX1ZNU0FWRSAiLmJ5dGUgMHgwZiwgMHgwMSwgMHhkYiIKKyNkZWZpbmUgU1ZNX0NMR0kgICAiLmJ5dGUgMHgwZiwgMHgwMSwgMHhkZCIKKyNkZWZpbmUgU1ZNX1NUR0kgICAiLmJ5dGUgMHgwZiwgMHgwMSwgMHhkYyIKKyNkZWZpbmUgU1ZNX0lOVkxQR0EgIi5ieXRlIDB4MGYsIDB4MDEsIDB4ZGYiCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2t2bS92bXguYyBiL2RyaXZlcnMva3ZtL3ZteC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YzM1YzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2t2bS92bXguYwpAQCAtMCwwICsxLDIwNjEgQEAKKy8qCisgKiBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIGRyaXZlciBmb3IgTGludXgKKyAqCisgKiBUaGlzIG1vZHVsZSBlbmFibGVzIG1hY2hpbmVzIHdpdGggSW50ZWwgVlQteCBleHRlbnNpb25zIHRvIHJ1biB2aXJ0dWFsCisgKiBtYWNoaW5lcyB3aXRob3V0IGVtdWxhdGlvbiBvciBiaW5hcnkgdHJhbnNsYXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFF1bXJhbmV0LCBJbmMuCisgKgorICogQXV0aG9yczoKKyAqICAgQXZpIEtpdml0eSAgIDxhdmlAcXVtcmFuZXQuY29tPgorICogICBZYW5pdiBLYW1heSAgPHlhbml2QHF1bXJhbmV0LmNvbT4KKyAqCisgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIuICBTZWUKKyAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKgorICovCisKKyNpbmNsdWRlICJrdm0uaCIKKyNpbmNsdWRlICJ2bXguaCIKKyNpbmNsdWRlICJrdm1fdm14LmgiCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisKKyNpbmNsdWRlICJzZWdtZW50X2Rlc2NyaXB0b3IuaCIKKworCitNT0RVTEVfQVVUSE9SKCJRdW1yYW5ldCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZtY3MgKiwgdm14YXJlYSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHZtY3MgKiwgY3VycmVudF92bWNzKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgSE9TVF9JU182NCAxCisjZWxzZQorI2RlZmluZSBIT1NUX0lTXzY0IDAKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHZtY3NfZGVzY3JpcHRvciB7CisJaW50IHNpemU7CisJaW50IG9yZGVyOworCXUzMiByZXZpc2lvbl9pZDsKK30gdm1jc19kZXNjcmlwdG9yOworCisjZGVmaW5lIFZNWF9TRUdNRU5UX0ZJRUxEKHNlZykJCQkJCVwKKwlbVkNQVV9TUkVHXyMjc2VnXSA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnNlbGVjdG9yID0gR1VFU1RfIyNzZWcjI19TRUxFQ1RPUiwJCVwKKwkJLmJhc2UgPSBHVUVTVF8jI3NlZyMjX0JBU0UsCQkgICAJXAorCQkubGltaXQgPSBHVUVTVF8jI3NlZyMjX0xJTUlULAkJICAgCVwKKwkJLmFyX2J5dGVzID0gR1VFU1RfIyNzZWcjI19BUl9CWVRFUywJICAgCVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZteF9zZWdtZW50X2ZpZWxkIHsKKwl1bnNpZ25lZCBzZWxlY3RvcjsKKwl1bnNpZ25lZCBiYXNlOworCXVuc2lnbmVkIGxpbWl0OworCXVuc2lnbmVkIGFyX2J5dGVzOworfSBrdm1fdm14X3NlZ21lbnRfZmllbGRzW10gPSB7CisJVk1YX1NFR01FTlRfRklFTEQoQ1MpLAorCVZNWF9TRUdNRU5UX0ZJRUxEKERTKSwKKwlWTVhfU0VHTUVOVF9GSUVMRChFUyksCisJVk1YX1NFR01FTlRfRklFTEQoRlMpLAorCVZNWF9TRUdNRU5UX0ZJRUxEKEdTKSwKKwlWTVhfU0VHTUVOVF9GSUVMRChTUyksCisJVk1YX1NFR01FTlRfRklFTEQoVFIpLAorCVZNWF9TRUdNRU5UX0ZJRUxEKExEVFIpLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiB2bXhfbXNyX2luZGV4W10gPSB7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCU1TUl9TWVNDQUxMX01BU0ssIE1TUl9MU1RBUiwgTVNSX0NTVEFSLCBNU1JfS0VSTkVMX0dTX0JBU0UsCisjZW5kaWYKKwlNU1JfRUZFUiwgTVNSX0s2X1NUQVIsCit9OworI2RlZmluZSBOUl9WTVhfTVNSIChzaXplb2Yodm14X21zcl9pbmRleCkgLyBzaXplb2YoKnZteF9tc3JfaW5kZXgpKQorCitzdGF0aWMgaW5saW5lIGludCBpc19wYWdlX2ZhdWx0KHUzMiBpbnRyX2luZm8pCit7CisJcmV0dXJuIChpbnRyX2luZm8gJiAoSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLIHwgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLIHwKKwkJCSAgICAgSU5UUl9JTkZPX1ZBTElEX01BU0spKSA9PQorCQkoSU5UUl9UWVBFX0VYQ0VQVElPTiB8IFBGX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfZXh0ZXJuYWxfaW50ZXJydXB0KHUzMiBpbnRyX2luZm8pCit7CisJcmV0dXJuIChpbnRyX2luZm8gJiAoSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spKQorCQk9PSAoSU5UUl9UWVBFX0VYVF9JTlRSIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOworfQorCitzdGF0aWMgc3RydWN0IHZteF9tc3JfZW50cnkgKmZpbmRfbXNyX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB2Y3B1LT5ubXNyczsgKytpKQorCQlpZiAodmNwdS0+Z3Vlc3RfbXNyc1tpXS5pbmRleCA9PSBtc3IpCisJCQlyZXR1cm4gJnZjcHUtPmd1ZXN0X21zcnNbaV07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtY3NfY2xlYXIoc3RydWN0IHZtY3MgKnZtY3MpCit7CisJdTY0IHBoeXNfYWRkciA9IF9fcGEodm1jcyk7CisJdTggZXJyb3I7CisKKwlhc20gdm9sYXRpbGUgKEFTTV9WTVhfVk1DTEVBUl9SQVggIjsgc2V0bmEgJTAiCisJCSAgICAgIDogIj1nIihlcnJvcikgOiAiYSIoJnBoeXNfYWRkciksICJtIihwaHlzX2FkZHIpCisJCSAgICAgIDogImNjIiwgIm1lbW9yeSIpOworCWlmIChlcnJvcikKKwkJcHJpbnRrKEtFUk5fRVJSICJrdm06IHZtY2xlYXIgZmFpbDogJXAvJWxseFxuIiwKKwkJICAgICAgIHZtY3MsIHBoeXNfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fdmNwdV9jbGVhcih2b2lkICphcmcpCit7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gYXJnOworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHZjcHUtPmNwdSA9PSBjcHUpCisJCXZtY3NfY2xlYXIodmNwdS0+dm1jcyk7CisJaWYgKHBlcl9jcHUoY3VycmVudF92bWNzLCBjcHUpID09IHZjcHUtPnZtY3MpCisJCXBlcl9jcHUoY3VycmVudF92bWNzLCBjcHUpID0gTlVMTDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdm1jc19yZWFkbCh1bnNpZ25lZCBsb25nIGZpZWxkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwlhc20gdm9sYXRpbGUgKEFTTV9WTVhfVk1SRUFEX1JEWF9SQVgKKwkJICAgICAgOiAiPWEiKHZhbHVlKSA6ICJkIihmaWVsZCkgOiAiY2MiKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1MTYgdm1jc19yZWFkMTYodW5zaWduZWQgbG9uZyBmaWVsZCkKK3sKKwlyZXR1cm4gdm1jc19yZWFkbChmaWVsZCk7Cit9CisKK3N0YXRpYyB1MzIgdm1jc19yZWFkMzIodW5zaWduZWQgbG9uZyBmaWVsZCkKK3sKKwlyZXR1cm4gdm1jc19yZWFkbChmaWVsZCk7Cit9CisKK3N0YXRpYyB1NjQgdm1jc19yZWFkNjQodW5zaWduZWQgbG9uZyBmaWVsZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJcmV0dXJuIHZtY3NfcmVhZGwoZmllbGQpOworI2Vsc2UKKwlyZXR1cm4gdm1jc19yZWFkbChmaWVsZCkgfCAoKHU2NCl2bWNzX3JlYWRsKGZpZWxkKzEpIDw8IDMyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgbm9pbmxpbmUgdm9pZCB2bXdyaXRlX2Vycm9yKHVuc2lnbmVkIGxvbmcgZmllbGQsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJcHJpbnRrKEtFUk5fRVJSICJ2bXdyaXRlIGVycm9yOiByZWcgJWx4IHZhbHVlICVseCAoZXJyICVkKVxuIiwKKwkgICAgICAgZmllbGQsIHZhbHVlLCB2bWNzX3JlYWQzMihWTV9JTlNUUlVDVElPTl9FUlJPUikpOworCWR1bXBfc3RhY2soKTsKK30KKworc3RhdGljIHZvaWQgdm1jc193cml0ZWwodW5zaWduZWQgbG9uZyBmaWVsZCwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwl1OCBlcnJvcjsKKworCWFzbSB2b2xhdGlsZSAoQVNNX1ZNWF9WTVdSSVRFX1JBWF9SRFggIjsgc2V0bmEgJTAiCisJCSAgICAgICA6ICI9cSIoZXJyb3IpIDogImEiKHZhbHVlKSwgImQiKGZpZWxkKSA6ICJjYyIgKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQl2bXdyaXRlX2Vycm9yKGZpZWxkLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHZtY3Nfd3JpdGUxNih1bnNpZ25lZCBsb25nIGZpZWxkLCB1MTYgdmFsdWUpCit7CisJdm1jc193cml0ZWwoZmllbGQsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgdm1jc193cml0ZTMyKHVuc2lnbmVkIGxvbmcgZmllbGQsIHUzMiB2YWx1ZSkKK3sKKwl2bWNzX3dyaXRlbChmaWVsZCwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB2bWNzX3dyaXRlNjQodW5zaWduZWQgbG9uZyBmaWVsZCwgdTY0IHZhbHVlKQoreworI2lmZGVmIENPTkZJR19YODZfNjQKKwl2bWNzX3dyaXRlbChmaWVsZCwgdmFsdWUpOworI2Vsc2UKKwl2bWNzX3dyaXRlbChmaWVsZCwgdmFsdWUpOworCWFzbSB2b2xhdGlsZSAoIiIpOworCXZtY3Nfd3JpdGVsKGZpZWxkKzEsIHZhbHVlID4+IDMyKTsKKyNlbmRpZgorfQorCisvKgorICogU3dpdGNoZXMgdG8gc3BlY2lmaWVkIHZjcHUsIHVudGlsIGEgbWF0Y2hpbmcgdmNwdV9wdXQoKSwgYnV0IGFzc3VtZXMKKyAqIHZjcHUgbXV0ZXggaXMgYWxyZWFkeSB0YWtlbi4KKyAqLworc3RhdGljIHN0cnVjdCBrdm1fdmNwdSAqdm14X3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdTY0IHBoeXNfYWRkciA9IF9fcGEodmNwdS0+dm1jcyk7CisJaW50IGNwdTsKKworCWNwdSA9IGdldF9jcHUoKTsKKworCWlmICh2Y3B1LT5jcHUgIT0gY3B1KSB7CisJCXNtcF9jYWxsX2Z1bmN0aW9uKF9fdmNwdV9jbGVhciwgdmNwdSwgMCwgMSk7CisJCXZjcHUtPmxhdW5jaGVkID0gMDsKKwl9CisKKwlpZiAocGVyX2NwdShjdXJyZW50X3ZtY3MsIGNwdSkgIT0gdmNwdS0+dm1jcykgeworCQl1OCBlcnJvcjsKKworCQlwZXJfY3B1KGN1cnJlbnRfdm1jcywgY3B1KSA9IHZjcHUtPnZtY3M7CisJCWFzbSB2b2xhdGlsZSAoQVNNX1ZNWF9WTVBUUkxEX1JBWCAiOyBzZXRuYSAlMCIKKwkJCSAgICAgIDogIj1nIihlcnJvcikgOiAiYSIoJnBoeXNfYWRkciksICJtIihwaHlzX2FkZHIpCisJCQkgICAgICA6ICJjYyIpOworCQlpZiAoZXJyb3IpCisJCQlwcmludGsoS0VSTl9FUlIgImt2bTogdm1wdHJsZCAlcC8lbGx4IGZhaWxcbiIsCisJCQkgICAgICAgdmNwdS0+dm1jcywgcGh5c19hZGRyKTsKKwl9CisKKwlpZiAodmNwdS0+Y3B1ICE9IGNwdSkgeworCQlzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSBkdDsKKwkJdW5zaWduZWQgbG9uZyBzeXNlbnRlcl9lc3A7CisKKwkJdmNwdS0+Y3B1ID0gY3B1OworCQkvKgorCQkgKiBMaW51eCB1c2VzIHBlci1jcHUgVFNTIGFuZCBHRFQsIHNvIHNldCB0aGVzZSB3aGVuIHN3aXRjaGluZworCQkgKiBwcm9jZXNzb3JzLgorCQkgKi8KKwkJdm1jc193cml0ZWwoSE9TVF9UUl9CQVNFLCByZWFkX3RyX2Jhc2UoKSk7IC8qIDIyLjIuNCAqLworCQlnZXRfZ2R0KCZkdCk7CisJCXZtY3Nfd3JpdGVsKEhPU1RfR0RUUl9CQVNFLCBkdC5iYXNlKTsgICAvKiAyMi4yLjQgKi8KKworCQlyZG1zcmwoTVNSX0lBMzJfU1lTRU5URVJfRVNQLCBzeXNlbnRlcl9lc3ApOworCQl2bWNzX3dyaXRlbChIT1NUX0lBMzJfU1lTRU5URVJfRVNQLCBzeXNlbnRlcl9lc3ApOyAvKiAyMi4yLjMgKi8KKwl9CisJcmV0dXJuIHZjcHU7Cit9CisKK3N0YXRpYyB2b2lkIHZteF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcHV0X2NwdSgpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2bXhfZ2V0X3JmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKTsKK30KKworc3RhdGljIHZvaWQgdm14X3NldF9yZmxhZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJmbGFncykKK3sKKwl2bWNzX3dyaXRlbChHVUVTVF9SRkxBR1MsIHJmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuc2lnbmVkIGxvbmcgcmlwOworCXUzMiBpbnRlcnJ1cHRpYmlsaXR5OworCisJcmlwID0gdm1jc19yZWFkbChHVUVTVF9SSVApOworCXJpcCArPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7CisJdm1jc193cml0ZWwoR1VFU1RfUklQLCByaXApOworCisJLyoKKwkgKiBXZSBlbXVsYXRlZCBhbiBpbnN0cnVjdGlvbiwgc28gdGVtcG9yYXJ5IGludGVycnVwdCBibG9ja2luZworCSAqIHNob3VsZCBiZSByZW1vdmVkLCBpZiBzZXQuCisJICovCisJaW50ZXJydXB0aWJpbGl0eSA9IHZtY3NfcmVhZDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyk7CisJaWYgKGludGVycnVwdGliaWxpdHkgJiAzKQorCQl2bWNzX3dyaXRlMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAorCQkJICAgICBpbnRlcnJ1cHRpYmlsaXR5ICYgfjMpOworCXZjcHUtPmludGVycnVwdF93aW5kb3dfb3BlbiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHZteF9pbmplY3RfZ3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBlcnJvcl9jb2RlKQoreworCXByaW50ayhLRVJOX0RFQlVHICJpbmplY3RfZ2VuZXJhbF9wcm90ZWN0aW9uOiByaXAgMHglbHhcbiIsCisJICAgICAgIHZtY3NfcmVhZGwoR1VFU1RfUklQKSk7CisJdm1jc193cml0ZTMyKFZNX0VOVFJZX0VYQ0VQVElPTl9FUlJPUl9DT0RFLCBlcnJvcl9jb2RlKTsKKwl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAorCQkgICAgIEdQX1ZFQ1RPUiB8CisJCSAgICAgSU5UUl9UWVBFX0VYQ0VQVElPTiB8CisJCSAgICAgSU5UUl9JTkZPX0RFTElFVkVSX0NPREVfTUFTSyB8CisJCSAgICAgSU5UUl9JTkZPX1ZBTElEX01BU0spOworfQorCisvKgorICogcmVhZHMgYW5kIHJldHVybnMgZ3Vlc3QncyB0aW1lc3RhbXAgY291bnRlciAicmVnaXN0ZXIiCisgKiBndWVzdF90c2MgPSBob3N0X3RzYyArIHRzY19vZmZzZXQgICAgLS0gMjEuMworICovCitzdGF0aWMgdTY0IGd1ZXN0X3JlYWRfdHNjKHZvaWQpCit7CisJdTY0IGhvc3RfdHNjLCB0c2Nfb2Zmc2V0OworCisJcmR0c2NsbChob3N0X3RzYyk7CisJdHNjX29mZnNldCA9IHZtY3NfcmVhZDY0KFRTQ19PRkZTRVQpOworCXJldHVybiBob3N0X3RzYyArIHRzY19vZmZzZXQ7Cit9CisKKy8qCisgKiB3cml0ZXMgJ2d1ZXN0X3RzYycgaW50byBndWVzdCdzIHRpbWVzdGFtcCBjb3VudGVyICJyZWdpc3RlciIKKyAqIGd1ZXN0X3RzYyA9IGhvc3RfdHNjICsgdHNjX29mZnNldCA9PT4gdHNjX29mZnNldCA9IGd1ZXN0X3RzYyAtIGhvc3RfdHNjCisgKi8KK3N0YXRpYyB2b2lkIGd1ZXN0X3dyaXRlX3RzYyh1NjQgZ3Vlc3RfdHNjKQoreworCXU2NCBob3N0X3RzYzsKKworCXJkdHNjbGwoaG9zdF90c2MpOworCXZtY3Nfd3JpdGU2NChUU0NfT0ZGU0VULCBndWVzdF90c2MgLSBob3N0X3RzYyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbG9hZF90c3Modm9pZCkKK3sKKyNpZm5kZWYgQ09ORklHX1g4Nl82NAorCisJLyoKKwkgKiBWVCByZXN0b3JlcyBUUiBidXQgbm90IGl0cyBzaXplLiAgVXNlbGVzcy4KKwkgKi8KKwlzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSBnZHQ7CisJc3RydWN0IHNlZ21lbnRfZGVzY3JpcHRvciAqZGVzY3M7CisKKwlnZXRfZ2R0KCZnZHQpOworCWRlc2NzID0gKHZvaWQgKilnZHQuYmFzZTsKKwlkZXNjc1tHRFRfRU5UUllfVFNTXS50eXBlID0gOTsgLyogYXZhaWxhYmxlIFRTUyAqLworCWxvYWRfVFJfZGVzYygpOworI2VuZGlmCit9CisKKy8qCisgKiBSZWFkcyBhbiBtc3IgdmFsdWUgKG9mICdtc3JfaW5kZXgnKSBpbnRvICdwZGF0YScuCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uLTAgb3RoZXJ3aXNlLgorICogQXNzdW1lcyB2Y3B1X2xvYWQoKSB3YXMgYWxyZWFkeSBjYWxsZWQuCisgKi8KK3N0YXRpYyBpbnQgdm14X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgKnBkYXRhKQoreworCXU2NCBkYXRhOworCXN0cnVjdCB2bXhfbXNyX2VudHJ5ICptc3I7CisKKwlpZiAoIXBkYXRhKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQlVHOiBnZXRfbXNyIGNhbGxlZCB3aXRoIE5VTEwgcGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKG1zcl9pbmRleCkgeworI2lmZGVmIENPTkZJR19YODZfNjQKKwljYXNlIE1TUl9GU19CQVNFOgorCQlkYXRhID0gdm1jc19yZWFkbChHVUVTVF9GU19CQVNFKTsKKwkJYnJlYWs7CisJY2FzZSBNU1JfR1NfQkFTRToKKwkJZGF0YSA9IHZtY3NfcmVhZGwoR1VFU1RfR1NfQkFTRSk7CisJCWJyZWFrOworCWNhc2UgTVNSX0VGRVI6CisJCXJldHVybiBrdm1fZ2V0X21zcl9jb21tb24odmNwdSwgbXNyX2luZGV4LCBwZGF0YSk7CisjZW5kaWYKKwljYXNlIE1TUl9JQTMyX1RJTUVfU1RBTVBfQ09VTlRFUjoKKwkJZGF0YSA9IGd1ZXN0X3JlYWRfdHNjKCk7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfQ1M6CisJCWRhdGEgPSB2bWNzX3JlYWQzMihHVUVTVF9TWVNFTlRFUl9DUyk7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfRUlQOgorCQlkYXRhID0gdm1jc19yZWFkMzIoR1VFU1RfU1lTRU5URVJfRUlQKTsKKwkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9FU1A6CisJCWRhdGEgPSB2bWNzX3JlYWQzMihHVUVTVF9TWVNFTlRFUl9FU1ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltc3IgPSBmaW5kX21zcl9lbnRyeSh2Y3B1LCBtc3JfaW5kZXgpOworCQlpZiAobXNyKSB7CisJCQlkYXRhID0gbXNyLT5kYXRhOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIGt2bV9nZXRfbXNyX2NvbW1vbih2Y3B1LCBtc3JfaW5kZXgsIHBkYXRhKTsKKwl9CisKKwkqcGRhdGEgPSBkYXRhOworCXJldHVybiAwOworfQorCisvKgorICogV3JpdGVzIG1zciB2YWx1ZSBpbnRvIGludG8gdGhlIGFwcHJvcHJpYXRlICJyZWdpc3RlciIuCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uLTAgb3RoZXJ3aXNlLgorICogQXNzdW1lcyB2Y3B1X2xvYWQoKSB3YXMgYWxyZWFkeSBjYWxsZWQuCisgKi8KK3N0YXRpYyBpbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgZGF0YSkKK3sKKwlzdHJ1Y3Qgdm14X21zcl9lbnRyeSAqbXNyOworCXN3aXRjaCAobXNyX2luZGV4KSB7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWNhc2UgTVNSX0VGRVI6CisJCXJldHVybiBrdm1fc2V0X21zcl9jb21tb24odmNwdSwgbXNyX2luZGV4LCBkYXRhKTsKKwljYXNlIE1TUl9GU19CQVNFOgorCQl2bWNzX3dyaXRlbChHVUVTVF9GU19CQVNFLCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBNU1JfR1NfQkFTRToKKwkJdm1jc193cml0ZWwoR1VFU1RfR1NfQkFTRSwgZGF0YSk7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9DUzoKKwkJdm1jc193cml0ZTMyKEdVRVNUX1NZU0VOVEVSX0NTLCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9FSVA6CisJCXZtY3Nfd3JpdGUzMihHVUVTVF9TWVNFTlRFUl9FSVAsIGRhdGEpOworCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX1NZU0VOVEVSX0VTUDoKKwkJdm1jc193cml0ZTMyKEdVRVNUX1NZU0VOVEVSX0VTUCwgZGF0YSk7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOiB7CisJCWd1ZXN0X3dyaXRlX3RzYyhkYXRhKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCW1zciA9IGZpbmRfbXNyX2VudHJ5KHZjcHUsIG1zcl9pbmRleCk7CisJCWlmIChtc3IpIHsKKwkJCW1zci0+ZGF0YSA9IGRhdGE7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4ga3ZtX3NldF9tc3JfY29tbW9uKHZjcHUsIG1zcl9pbmRleCwgZGF0YSk7CisJCW1zci0+ZGF0YSA9IGRhdGE7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogU3luYyB0aGUgcnNwIGFuZCByaXAgcmVnaXN0ZXJzIGludG8gdGhlIHZjcHUgc3RydWN0dXJlLiAgVGhpcyBhbGxvd3MKKyAqIHJlZ2lzdGVycyB0byBiZSBhY2Nlc3NlZCBieSBpbmRleGluZyB2Y3B1LT5yZWdzLgorICovCitzdGF0aWMgdm9pZCB2Y3B1X2xvYWRfcnNwX3JpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHZtY3NfcmVhZGwoR1VFU1RfUlNQKTsKKwl2Y3B1LT5yaXAgPSB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7Cit9CisKKy8qCisgKiBTeW5jcyByc3AgYW5kIHJpcCBiYWNrIGludG8gdGhlIHZtY3MuICBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIHBvc3NpYmxlCisgKiBtb2RpZmljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHZjcHVfcHV0X3JzcF9yaXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZtY3Nfd3JpdGVsKEdVRVNUX1JTUCwgdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUlNQXSk7CisJdm1jc193cml0ZWwoR1VFU1RfUklQLCB2Y3B1LT5yaXApOworfQorCitzdGF0aWMgaW50IHNldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK3sKKwl1bnNpZ25lZCBsb25nIGRyNyA9IDB4NDAwOworCXUzMiBleGNlcHRpb25fYml0bWFwOworCWludCBvbGRfc2luZ2xlc3RlcDsKKworCWV4Y2VwdGlvbl9iaXRtYXAgPSB2bWNzX3JlYWQzMihFWENFUFRJT05fQklUTUFQKTsKKwlvbGRfc2luZ2xlc3RlcCA9IHZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXA7CisKKwl2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkID0gZGJnLT5lbmFibGVkOworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKSB7CisJCWludCBpOworCisJCWRyNyB8PSAweDIwMDsgIC8qIGV4YWN0ICovCisJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJCWlmICghZGJnLT5icmVha3BvaW50c1tpXS5lbmFibGVkKQorCQkJCWNvbnRpbnVlOworCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSBkYmctPmJyZWFrcG9pbnRzW2ldLmFkZHJlc3M7CisJCQlkcjcgfD0gMiA8PCAoaSoyKTsgICAgLyogZ2xvYmFsIGVuYWJsZSAqLworCQkJZHI3IHw9IDAgPDwgKGkqNCsxNik7IC8qIGV4ZWN1dGlvbiBicmVha3BvaW50ICovCisJCX0KKworCQlleGNlcHRpb25fYml0bWFwIHw9ICgxdSA8PCAxKTsgIC8qIFRyYXAgZGVidWcgZXhjZXB0aW9ucyAqLworCisJCXZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXAgPSBkYmctPnNpbmdsZXN0ZXA7CisJfSBlbHNlIHsKKwkJZXhjZXB0aW9uX2JpdG1hcCAmPSB+KDF1IDw8IDEpOyAvKiBJZ25vcmUgZGVidWcgZXhjZXB0aW9ucyAqLworCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5zaW5nbGVzdGVwID0gMDsKKwl9CisKKwlpZiAob2xkX3NpbmdsZXN0ZXAgJiYgIXZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXApIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlmbGFncyA9IHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKTsKKwkJZmxhZ3MgJj0gfihYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRik7CisJCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgZmxhZ3MpOworCX0KKworCXZtY3Nfd3JpdGUzMihFWENFUFRJT05fQklUTUFQLCBleGNlcHRpb25fYml0bWFwKTsKKwl2bWNzX3dyaXRlbChHVUVTVF9EUjcsIGRyNyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5pdCBpbnQgY3B1X2hhc19rdm1fc3VwcG9ydCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZWN4ID0gY3B1aWRfZWN4KDEpOworCXJldHVybiB0ZXN0X2JpdCg1LCAmZWN4KTsgLyogQ1BVSUQuMTpFQ1guVk1YW2JpdCA1XSAtPiBWVCAqLworfQorCitzdGF0aWMgX19pbml0IGludCB2bXhfZGlzYWJsZWRfYnlfYmlvcyh2b2lkKQoreworCXU2NCBtc3I7CisKKwlyZG1zcmwoTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MLCBtc3IpOworCXJldHVybiAobXNyICYgNSkgPT0gMTsgLyogbG9ja2VkIGJ1dCBub3QgZW5hYmxlZCAqLworfQorCitzdGF0aWMgX19pbml0IHZvaWQgaGFyZHdhcmVfZW5hYmxlKHZvaWQgKmdhcmJhZ2UpCit7CisJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJdTY0IHBoeXNfYWRkciA9IF9fcGEocGVyX2NwdSh2bXhhcmVhLCBjcHUpKTsKKwl1NjQgb2xkOworCisJcmRtc3JsKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTCwgb2xkKTsKKwlpZiAoKG9sZCAmIDUpICE9IDUpCisJCS8qIGVuYWJsZSBhbmQgbG9jayAqLworCQl3cm1zcmwoTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MLCBvbGQgfCA1KTsKKwl3cml0ZV9jcjQocmVhZF9jcjQoKSB8IENSNF9WTVhFKTsgLyogRklYTUU6IG5vdCBjcHUgaG90cGx1ZyBzYWZlICovCisJYXNtIHZvbGF0aWxlIChBU01fVk1YX1ZNWE9OX1JBWCA6IDogImEiKCZwaHlzX2FkZHIpLCAibSIocGh5c19hZGRyKQorCQkgICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKK30KKworc3RhdGljIHZvaWQgaGFyZHdhcmVfZGlzYWJsZSh2b2lkICpnYXJiYWdlKQoreworCWFzbSB2b2xhdGlsZSAoQVNNX1ZNWF9WTVhPRkYgOiA6IDogImNjIik7Cit9CisKK3N0YXRpYyBfX2luaXQgdm9pZCBzZXR1cF92bWNzX2Rlc2NyaXB0b3Iodm9pZCkKK3sKKwl1MzIgdm14X21zcl9sb3csIHZteF9tc3JfaGlnaDsKKworCXJkbXNyKE1TUl9JQTMyX1ZNWF9CQVNJQywgdm14X21zcl9sb3csIHZteF9tc3JfaGlnaCk7CisJdm1jc19kZXNjcmlwdG9yLnNpemUgPSB2bXhfbXNyX2hpZ2ggJiAweDFmZmY7CisJdm1jc19kZXNjcmlwdG9yLm9yZGVyID0gZ2V0X29yZGVyKHZtY3NfZGVzY3JpcHRvci5zaXplKTsKKwl2bWNzX2Rlc2NyaXB0b3IucmV2aXNpb25faWQgPSB2bXhfbXNyX2xvdzsKK30KKworc3RhdGljIHN0cnVjdCB2bWNzICphbGxvY192bWNzX2NwdShpbnQgY3B1KQoreworCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXM7CisJc3RydWN0IHZtY3MgKnZtY3M7CisKKwlwYWdlcyA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgR0ZQX0tFUk5FTCwgdm1jc19kZXNjcmlwdG9yLm9yZGVyKTsKKwlpZiAoIXBhZ2VzKQorCQlyZXR1cm4gTlVMTDsKKwl2bWNzID0gcGFnZV9hZGRyZXNzKHBhZ2VzKTsKKwltZW1zZXQodm1jcywgMCwgdm1jc19kZXNjcmlwdG9yLnNpemUpOworCXZtY3MtPnJldmlzaW9uX2lkID0gdm1jc19kZXNjcmlwdG9yLnJldmlzaW9uX2lkOyAvKiB2bWNzIHJldmlzaW9uIGlkICovCisJcmV0dXJuIHZtY3M7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1jcyAqYWxsb2Nfdm1jcyh2b2lkKQoreworCXJldHVybiBhbGxvY192bWNzX2NwdShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV92bWNzKHN0cnVjdCB2bWNzICp2bWNzKQoreworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdm1jcywgdm1jc19kZXNjcmlwdG9yLm9yZGVyKTsKK30KKworc3RhdGljIF9fZXhpdCB2b2lkIGZyZWVfa3ZtX2FyZWEodm9pZCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCWZyZWVfdm1jcyhwZXJfY3B1KHZteGFyZWEsIGNwdSkpOworfQorCitleHRlcm4gc3RydWN0IHZtY3MgKmFsbG9jX3ZtY3NfY3B1KGludCBjcHUpOworCitzdGF0aWMgX19pbml0IGludCBhbGxvY19rdm1fYXJlYSh2b2lkKQoreworCWludCBjcHU7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlzdHJ1Y3Qgdm1jcyAqdm1jczsKKworCQl2bWNzID0gYWxsb2Nfdm1jc19jcHUoY3B1KTsKKwkJaWYgKCF2bWNzKSB7CisJCQlmcmVlX2t2bV9hcmVhKCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXBlcl9jcHUodm14YXJlYSwgY3B1KSA9IHZtY3M7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbml0IGludCBoYXJkd2FyZV9zZXR1cCh2b2lkKQoreworCXNldHVwX3ZtY3NfZGVzY3JpcHRvcigpOworCXJldHVybiBhbGxvY19rdm1fYXJlYSgpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgaGFyZHdhcmVfdW5zZXR1cCh2b2lkKQoreworCWZyZWVfa3ZtX2FyZWEoKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2V4Y2VwdGlvbl9iaXRtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWlmICh2Y3B1LT5ybW9kZS5hY3RpdmUpCisJCXZtY3Nfd3JpdGUzMihFWENFUFRJT05fQklUTUFQLCB+MCk7CisJZWxzZQorCQl2bWNzX3dyaXRlMzIoRVhDRVBUSU9OX0JJVE1BUCwgMSA8PCBQRl9WRUNUT1IpOworfQorCitzdGF0aWMgdm9pZCBmaXhfcG1vZGVfZGF0YXNlZyhpbnQgc2VnLCBzdHJ1Y3Qga3ZtX3NhdmVfc2VnbWVudCAqc2F2ZSkKK3sKKwlzdHJ1Y3Qga3ZtX3ZteF9zZWdtZW50X2ZpZWxkICpzZiA9ICZrdm1fdm14X3NlZ21lbnRfZmllbGRzW3NlZ107CisKKwlpZiAodm1jc19yZWFkbChzZi0+YmFzZSkgPT0gc2F2ZS0+YmFzZSkgeworCQl2bWNzX3dyaXRlMTYoc2YtPnNlbGVjdG9yLCBzYXZlLT5zZWxlY3Rvcik7CisJCXZtY3Nfd3JpdGVsKHNmLT5iYXNlLCBzYXZlLT5iYXNlKTsKKwkJdm1jc193cml0ZTMyKHNmLT5saW1pdCwgc2F2ZS0+bGltaXQpOworCQl2bWNzX3dyaXRlMzIoc2YtPmFyX2J5dGVzLCBzYXZlLT5hcik7CisJfSBlbHNlIHsKKwkJdTMyIGRwbCA9ICh2bWNzX3JlYWQxNihzZi0+c2VsZWN0b3IpICYgU0VMRUNUT1JfUlBMX01BU0spCisJCQk8PCBBUl9EUExfU0hJRlQ7CisJCXZtY3Nfd3JpdGUzMihzZi0+YXJfYnl0ZXMsIDB4OTMgfCBkcGwpOworCX0KK30KKworc3RhdGljIHZvaWQgZW50ZXJfcG1vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl2Y3B1LT5ybW9kZS5hY3RpdmUgPSAwOworCisJdm1jc193cml0ZWwoR1VFU1RfVFJfQkFTRSwgdmNwdS0+cm1vZGUudHIuYmFzZSk7CisJdm1jc193cml0ZTMyKEdVRVNUX1RSX0xJTUlULCB2Y3B1LT5ybW9kZS50ci5saW1pdCk7CisJdm1jc193cml0ZTMyKEdVRVNUX1RSX0FSX0JZVEVTLCB2Y3B1LT5ybW9kZS50ci5hcik7CisKKwlmbGFncyA9IHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKTsKKwlmbGFncyAmPSB+KElPUExfTUFTSyB8IFg4Nl9FRkxBR1NfVk0pOworCWZsYWdzIHw9ICh2Y3B1LT5ybW9kZS5zYXZlX2lvcGwgPDwgSU9QTF9TSElGVCk7CisJdm1jc193cml0ZWwoR1VFU1RfUkZMQUdTLCBmbGFncyk7CisKKwl2bWNzX3dyaXRlbChHVUVTVF9DUjQsICh2bWNzX3JlYWRsKEdVRVNUX0NSNCkgJiB+Q1I0X1ZNRV9NQVNLKSB8CisJCQkodm1jc19yZWFkbChDUjRfUkVBRF9TSEFET1cpICYgQ1I0X1ZNRV9NQVNLKSk7CisKKwl1cGRhdGVfZXhjZXB0aW9uX2JpdG1hcCh2Y3B1KTsKKworCWZpeF9wbW9kZV9kYXRhc2VnKFZDUFVfU1JFR19FUywgJnZjcHUtPnJtb2RlLmVzKTsKKwlmaXhfcG1vZGVfZGF0YXNlZyhWQ1BVX1NSRUdfRFMsICZ2Y3B1LT5ybW9kZS5kcyk7CisJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0dTLCAmdmNwdS0+cm1vZGUuZ3MpOworCWZpeF9wbW9kZV9kYXRhc2VnKFZDUFVfU1JFR19GUywgJnZjcHUtPnJtb2RlLmZzKTsKKworCXZtY3Nfd3JpdGUxNihHVUVTVF9TU19TRUxFQ1RPUiwgMCk7CisJdm1jc193cml0ZTMyKEdVRVNUX1NTX0FSX0JZVEVTLCAweDkzKTsKKworCXZtY3Nfd3JpdGUxNihHVUVTVF9DU19TRUxFQ1RPUiwKKwkJICAgICB2bWNzX3JlYWQxNihHVUVTVF9DU19TRUxFQ1RPUikgJiB+U0VMRUNUT1JfUlBMX01BU0spOworCXZtY3Nfd3JpdGUzMihHVUVTVF9DU19BUl9CWVRFUywgMHg5Yik7Cit9CisKK3N0YXRpYyBpbnQgcm1vZGVfdHNzX2Jhc2Uoc3RydWN0IGt2bSoga3ZtKQoreworCWdmbl90IGJhc2VfZ2ZuID0ga3ZtLT5tZW1zbG90c1swXS5iYXNlX2dmbiArIGt2bS0+bWVtc2xvdHNbMF0ubnBhZ2VzIC0gMzsKKwlyZXR1cm4gYmFzZV9nZm4gPDwgUEFHRV9TSElGVDsKK30KKworc3RhdGljIHZvaWQgZml4X3Jtb2RlX3NlZyhpbnQgc2VnLCBzdHJ1Y3Qga3ZtX3NhdmVfc2VnbWVudCAqc2F2ZSkKK3sKKwlzdHJ1Y3Qga3ZtX3ZteF9zZWdtZW50X2ZpZWxkICpzZiA9ICZrdm1fdm14X3NlZ21lbnRfZmllbGRzW3NlZ107CisKKwlzYXZlLT5zZWxlY3RvciA9IHZtY3NfcmVhZDE2KHNmLT5zZWxlY3Rvcik7CisJc2F2ZS0+YmFzZSA9IHZtY3NfcmVhZGwoc2YtPmJhc2UpOworCXNhdmUtPmxpbWl0ID0gdm1jc19yZWFkMzIoc2YtPmxpbWl0KTsKKwlzYXZlLT5hciA9IHZtY3NfcmVhZDMyKHNmLT5hcl9ieXRlcyk7CisJdm1jc193cml0ZTE2KHNmLT5zZWxlY3Rvciwgdm1jc19yZWFkbChzZi0+YmFzZSkgPj4gNCk7CisJdm1jc193cml0ZTMyKHNmLT5saW1pdCwgMHhmZmZmKTsKKwl2bWNzX3dyaXRlMzIoc2YtPmFyX2J5dGVzLCAweGYzKTsKK30KKworc3RhdGljIHZvaWQgZW50ZXJfcm1vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl2Y3B1LT5ybW9kZS5hY3RpdmUgPSAxOworCisJdmNwdS0+cm1vZGUudHIuYmFzZSA9IHZtY3NfcmVhZGwoR1VFU1RfVFJfQkFTRSk7CisJdm1jc193cml0ZWwoR1VFU1RfVFJfQkFTRSwgcm1vZGVfdHNzX2Jhc2UodmNwdS0+a3ZtKSk7CisKKwl2Y3B1LT5ybW9kZS50ci5saW1pdCA9IHZtY3NfcmVhZDMyKEdVRVNUX1RSX0xJTUlUKTsKKwl2bWNzX3dyaXRlMzIoR1VFU1RfVFJfTElNSVQsIFJNT0RFX1RTU19TSVpFIC0gMSk7CisKKwl2Y3B1LT5ybW9kZS50ci5hciA9IHZtY3NfcmVhZDMyKEdVRVNUX1RSX0FSX0JZVEVTKTsKKwl2bWNzX3dyaXRlMzIoR1VFU1RfVFJfQVJfQllURVMsIDB4MDA4Yik7CisKKwlmbGFncyA9IHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKTsKKwl2Y3B1LT5ybW9kZS5zYXZlX2lvcGwgPSAoZmxhZ3MgJiBJT1BMX01BU0spID4+IElPUExfU0hJRlQ7CisKKwlmbGFncyB8PSBJT1BMX01BU0sgfCBYODZfRUZMQUdTX1ZNOworCisJdm1jc193cml0ZWwoR1VFU1RfUkZMQUdTLCBmbGFncyk7CisJdm1jc193cml0ZWwoR1VFU1RfQ1I0LCB2bWNzX3JlYWRsKEdVRVNUX0NSNCkgfCBDUjRfVk1FX01BU0spOworCXVwZGF0ZV9leGNlcHRpb25fYml0bWFwKHZjcHUpOworCisJdm1jc193cml0ZTE2KEdVRVNUX1NTX1NFTEVDVE9SLCB2bWNzX3JlYWRsKEdVRVNUX1NTX0JBU0UpID4+IDQpOworCXZtY3Nfd3JpdGUzMihHVUVTVF9TU19MSU1JVCwgMHhmZmZmKTsKKwl2bWNzX3dyaXRlMzIoR1VFU1RfU1NfQVJfQllURVMsIDB4ZjMpOworCisJdm1jc193cml0ZTMyKEdVRVNUX0NTX0FSX0JZVEVTLCAweGYzKTsKKwl2bWNzX3dyaXRlMzIoR1VFU1RfQ1NfTElNSVQsIDB4ZmZmZik7CisJdm1jc193cml0ZTE2KEdVRVNUX0NTX1NFTEVDVE9SLCB2bWNzX3JlYWRsKEdVRVNUX0NTX0JBU0UpID4+IDQpOworCisJZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfRVMsICZ2Y3B1LT5ybW9kZS5lcyk7CisJZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfRFMsICZ2Y3B1LT5ybW9kZS5kcyk7CisJZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfR1MsICZ2Y3B1LT5ybW9kZS5ncyk7CisJZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfRlMsICZ2Y3B1LT5ybW9kZS5mcyk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisKK3N0YXRpYyB2b2lkIGVudGVyX2xtb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1MzIgZ3Vlc3RfdHJfYXI7CisKKwlndWVzdF90cl9hciA9IHZtY3NfcmVhZDMyKEdVRVNUX1RSX0FSX0JZVEVTKTsKKwlpZiAoKGd1ZXN0X3RyX2FyICYgQVJfVFlQRV9NQVNLKSAhPSBBUl9UWVBFX0JVU1lfNjRfVFNTKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHNzIGZpeHVwIGZvciBsb25nIG1vZGUuIFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCXZtY3Nfd3JpdGUzMihHVUVTVF9UUl9BUl9CWVRFUywKKwkJCSAgICAgKGd1ZXN0X3RyX2FyICYgfkFSX1RZUEVfTUFTSykKKwkJCSAgICAgfCBBUl9UWVBFX0JVU1lfNjRfVFNTKTsKKwl9CisKKwl2Y3B1LT5zaGFkb3dfZWZlciB8PSBFRkVSX0xNQTsKKworCWZpbmRfbXNyX2VudHJ5KHZjcHUsIE1TUl9FRkVSKS0+ZGF0YSB8PSBFRkVSX0xNQSB8IEVGRVJfTE1FOworCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKKwkJICAgICB2bWNzX3JlYWQzMihWTV9FTlRSWV9DT05UUk9MUykKKwkJICAgICB8IFZNX0VOVFJZX0NPTlRST0xTX0lBMzJFX01BU0spOworfQorCitzdGF0aWMgdm9pZCBleGl0X2xtb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2Y3B1LT5zaGFkb3dfZWZlciAmPSB+RUZFUl9MTUE7CisKKwl2bWNzX3dyaXRlMzIoVk1fRU5UUllfQ09OVFJPTFMsCisJCSAgICAgdm1jc19yZWFkMzIoVk1fRU5UUllfQ09OVFJPTFMpCisJCSAgICAgJiB+Vk1fRU5UUllfQ09OVFJPTFNfSUEzMkVfTUFTSyk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB2bXhfZGVjYWNoZV9jcjBfY3I0X2d1ZXN0X2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPmNyMCAmPSBLVk1fR1VFU1RfQ1IwX01BU0s7CisJdmNwdS0+Y3IwIHw9IHZtY3NfcmVhZGwoR1VFU1RfQ1IwKSAmIH5LVk1fR1VFU1RfQ1IwX01BU0s7CisKKwl2Y3B1LT5jcjQgJj0gS1ZNX0dVRVNUX0NSNF9NQVNLOworCXZjcHUtPmNyNCB8PSB2bWNzX3JlYWRsKEdVRVNUX0NSNCkgJiB+S1ZNX0dVRVNUX0NSNF9NQVNLOworfQorCitzdGF0aWMgdm9pZCB2bXhfc2V0X2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKQoreworCWlmICh2Y3B1LT5ybW9kZS5hY3RpdmUgJiYgKGNyMCAmIENSMF9QRV9NQVNLKSkKKwkJZW50ZXJfcG1vZGUodmNwdSk7CisKKwlpZiAoIXZjcHUtPnJtb2RlLmFjdGl2ZSAmJiAhKGNyMCAmIENSMF9QRV9NQVNLKSkKKwkJZW50ZXJfcm1vZGUodmNwdSk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaWYgKHZjcHUtPnNoYWRvd19lZmVyICYgRUZFUl9MTUUpIHsKKwkJaWYgKCFpc19wYWdpbmcodmNwdSkgJiYgKGNyMCAmIENSMF9QR19NQVNLKSkKKwkJCWVudGVyX2xtb2RlKHZjcHUpOworCQlpZiAoaXNfcGFnaW5nKHZjcHUpICYmICEoY3IwICYgQ1IwX1BHX01BU0spKQorCQkJZXhpdF9sbW9kZSh2Y3B1KTsKKwl9CisjZW5kaWYKKworCXZtY3Nfd3JpdGVsKENSMF9SRUFEX1NIQURPVywgY3IwKTsKKwl2bWNzX3dyaXRlbChHVUVTVF9DUjAsCisJCSAgICAoY3IwICYgfktWTV9HVUVTVF9DUjBfTUFTSykgfCBLVk1fVk1fQ1IwX0FMV0FZU19PTik7CisJdmNwdS0+Y3IwID0gY3IwOworfQorCisvKgorICogVXNlZCB3aGVuIHJlc3RvcmluZyB0aGUgVk0gdG8gYXZvaWQgY29ycnVwdGluZyBzZWdtZW50IHJlZ2lzdGVycworICovCitzdGF0aWMgdm9pZCB2bXhfc2V0X2NyMF9ub19tb2Rlc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApCit7CisJdmNwdS0+cm1vZGUuYWN0aXZlID0gKChjcjAgJiBDUjBfUEVfTUFTSykgPT0gMCk7CisJdXBkYXRlX2V4Y2VwdGlvbl9iaXRtYXAodmNwdSk7CisJdm1jc193cml0ZWwoQ1IwX1JFQURfU0hBRE9XLCBjcjApOworCXZtY3Nfd3JpdGVsKEdVRVNUX0NSMCwKKwkJICAgIChjcjAgJiB+S1ZNX0dVRVNUX0NSMF9NQVNLKSB8IEtWTV9WTV9DUjBfQUxXQVlTX09OKTsKKwl2Y3B1LT5jcjAgPSBjcjA7Cit9CisKK3N0YXRpYyB2b2lkIHZteF9zZXRfY3IzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjMpCit7CisJdm1jc193cml0ZWwoR1VFU1RfQ1IzLCBjcjMpOworfQorCitzdGF0aWMgdm9pZCB2bXhfc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KQoreworCXZtY3Nfd3JpdGVsKENSNF9SRUFEX1NIQURPVywgY3I0KTsKKwl2bWNzX3dyaXRlbChHVUVTVF9DUjQsIGNyNCB8ICh2Y3B1LT5ybW9kZS5hY3RpdmUgPworCQkgICAgS1ZNX1JNT0RFX1ZNX0NSNF9BTFdBWVNfT04gOiBLVk1fUE1PREVfVk1fQ1I0X0FMV0FZU19PTikpOworCXZjcHUtPmNyNCA9IGNyNDsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKKworc3RhdGljIHZvaWQgdm14X3NldF9lZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpCit7CisJc3RydWN0IHZteF9tc3JfZW50cnkgKm1zciA9IGZpbmRfbXNyX2VudHJ5KHZjcHUsIE1TUl9FRkVSKTsKKworCXZjcHUtPnNoYWRvd19lZmVyID0gZWZlcjsKKwlpZiAoZWZlciAmIEVGRVJfTE1BKSB7CisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKKwkJCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKSB8CisJCQkJICAgICBWTV9FTlRSWV9DT05UUk9MU19JQTMyRV9NQVNLKTsKKwkJbXNyLT5kYXRhID0gZWZlcjsKKworCX0gZWxzZSB7CisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKKwkJCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKSAmCisJCQkJICAgICB+Vk1fRU5UUllfQ09OVFJPTFNfSUEzMkVfTUFTSyk7CisKKwkJbXNyLT5kYXRhID0gZWZlciAmIH5FRkVSX0xNRTsKKwl9Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdTY0IHZteF9nZXRfc2VnbWVudF9iYXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZykKK3sKKwlzdHJ1Y3Qga3ZtX3ZteF9zZWdtZW50X2ZpZWxkICpzZiA9ICZrdm1fdm14X3NlZ21lbnRfZmllbGRzW3NlZ107CisKKwlyZXR1cm4gdm1jc19yZWFkbChzZi0+YmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHZteF9nZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpCit7CisJc3RydWN0IGt2bV92bXhfc2VnbWVudF9maWVsZCAqc2YgPSAma3ZtX3ZteF9zZWdtZW50X2ZpZWxkc1tzZWddOworCXUzMiBhcjsKKworCXZhci0+YmFzZSA9IHZtY3NfcmVhZGwoc2YtPmJhc2UpOworCXZhci0+bGltaXQgPSB2bWNzX3JlYWQzMihzZi0+bGltaXQpOworCXZhci0+c2VsZWN0b3IgPSB2bWNzX3JlYWQxNihzZi0+c2VsZWN0b3IpOworCWFyID0gdm1jc19yZWFkMzIoc2YtPmFyX2J5dGVzKTsKKwlpZiAoYXIgJiBBUl9VTlVTQUJMRV9NQVNLKQorCQlhciA9IDA7CisJdmFyLT50eXBlID0gYXIgJiAxNTsKKwl2YXItPnMgPSAoYXIgPj4gNCkgJiAxOworCXZhci0+ZHBsID0gKGFyID4+IDUpICYgMzsKKwl2YXItPnByZXNlbnQgPSAoYXIgPj4gNykgJiAxOworCXZhci0+YXZsID0gKGFyID4+IDEyKSAmIDE7CisJdmFyLT5sID0gKGFyID4+IDEzKSAmIDE7CisJdmFyLT5kYiA9IChhciA+PiAxNCkgJiAxOworCXZhci0+ZyA9IChhciA+PiAxNSkgJiAxOworCXZhci0+dW51c2FibGUgPSAoYXIgPj4gMTYpICYgMTsKK30KKworc3RhdGljIHZvaWQgdm14X3NldF9zZWdtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICBzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhciwgaW50IHNlZykKK3sKKwlzdHJ1Y3Qga3ZtX3ZteF9zZWdtZW50X2ZpZWxkICpzZiA9ICZrdm1fdm14X3NlZ21lbnRfZmllbGRzW3NlZ107CisJdTMyIGFyOworCisJdm1jc193cml0ZWwoc2YtPmJhc2UsIHZhci0+YmFzZSk7CisJdm1jc193cml0ZTMyKHNmLT5saW1pdCwgdmFyLT5saW1pdCk7CisJdm1jc193cml0ZTE2KHNmLT5zZWxlY3RvciwgdmFyLT5zZWxlY3Rvcik7CisJaWYgKHZhci0+dW51c2FibGUpCisJCWFyID0gMSA8PCAxNjsKKwllbHNlIHsKKwkJYXIgPSB2YXItPnR5cGUgJiAxNTsKKwkJYXIgfD0gKHZhci0+cyAmIDEpIDw8IDQ7CisJCWFyIHw9ICh2YXItPmRwbCAmIDMpIDw8IDU7CisJCWFyIHw9ICh2YXItPnByZXNlbnQgJiAxKSA8PCA3OworCQlhciB8PSAodmFyLT5hdmwgJiAxKSA8PCAxMjsKKwkJYXIgfD0gKHZhci0+bCAmIDEpIDw8IDEzOworCQlhciB8PSAodmFyLT5kYiAmIDEpIDw8IDE0OworCQlhciB8PSAodmFyLT5nICYgMSkgPDwgMTU7CisJfQorCWlmIChhciA9PSAwKSAvKiBhIDAgdmFsdWUgbWVhbnMgdW51c2FibGUgKi8KKwkJYXIgPSBBUl9VTlVTQUJMRV9NQVNLOworCXZtY3Nfd3JpdGUzMihzZi0+YXJfYnl0ZXMsIGFyKTsKK30KKworc3RhdGljIHZvaWQgdm14X2dldF9jc19kYl9sX2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKmRiLCBpbnQgKmwpCit7CisJdTMyIGFyID0gdm1jc19yZWFkMzIoR1VFU1RfQ1NfQVJfQllURVMpOworCisJKmRiID0gKGFyID4+IDE0KSAmIDE7CisJKmwgPSAoYXIgPj4gMTMpICYgMTsKK30KKworc3RhdGljIHZvaWQgdm14X2dldF9pZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSAqZHQpCit7CisJZHQtPmxpbWl0ID0gdm1jc19yZWFkMzIoR1VFU1RfSURUUl9MSU1JVCk7CisJZHQtPmJhc2UgPSB2bWNzX3JlYWRsKEdVRVNUX0lEVFJfQkFTRSk7Cit9CisKK3N0YXRpYyB2b2lkIHZteF9zZXRfaWR0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKmR0KQoreworCXZtY3Nfd3JpdGUzMihHVUVTVF9JRFRSX0xJTUlULCBkdC0+bGltaXQpOworCXZtY3Nfd3JpdGVsKEdVRVNUX0lEVFJfQkFTRSwgZHQtPmJhc2UpOworfQorCitzdGF0aWMgdm9pZCB2bXhfZ2V0X2dkdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICpkdCkKK3sKKwlkdC0+bGltaXQgPSB2bWNzX3JlYWQzMihHVUVTVF9HRFRSX0xJTUlUKTsKKwlkdC0+YmFzZSA9IHZtY3NfcmVhZGwoR1VFU1RfR0RUUl9CQVNFKTsKK30KKworc3RhdGljIHZvaWQgdm14X3NldF9nZHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSAqZHQpCit7CisJdm1jc193cml0ZTMyKEdVRVNUX0dEVFJfTElNSVQsIGR0LT5saW1pdCk7CisJdm1jc193cml0ZWwoR1VFU1RfR0RUUl9CQVNFLCBkdC0+YmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9ybW9kZV90c3Moc3RydWN0IGt2bSoga3ZtKQoreworCXN0cnVjdCBwYWdlICpwMSwgKnAyLCAqcDM7CisJZ2ZuX3QgZm4gPSBybW9kZV90c3NfYmFzZShrdm0pID4+IFBBR0VfU0hJRlQ7CisJY2hhciAqcGFnZTsKKworCXAxID0gX2dmbl90b19wYWdlKGt2bSwgZm4rKyk7CisJcDIgPSBfZ2ZuX3RvX3BhZ2Uoa3ZtLCBmbisrKTsKKwlwMyA9IF9nZm5fdG9fcGFnZShrdm0sIGZuKTsKKworCWlmICghcDEgfHwgIXAyIHx8ICFwMykgeworCQlrdm1fcHJpbnRmKGt2bSwiJXM6IGdmbl90b19wYWdlIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGFnZSA9IGttYXBfYXRvbWljKHAxLCBLTV9VU0VSMCk7CisJbWVtc2V0KHBhZ2UsIDAsIFBBR0VfU0laRSk7CisJKih1MTYqKShwYWdlICsgMHg2NikgPSBUU1NfQkFTRV9TSVpFICsgVFNTX1JFRElSRUNUSU9OX1NJWkU7CisJa3VubWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisKKwlwYWdlID0ga21hcF9hdG9taWMocDIsIEtNX1VTRVIwKTsKKwltZW1zZXQocGFnZSwgMCwgUEFHRV9TSVpFKTsKKwlrdW5tYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKworCXBhZ2UgPSBrbWFwX2F0b21pYyhwMywgS01fVVNFUjApOworCW1lbXNldChwYWdlLCAwLCBQQUdFX1NJWkUpOworCSoocGFnZSArIFJNT0RFX1RTU19TSVpFIC0gMiAqIFBBR0VfU0laRSAtIDEpID0gfjA7CisJa3VubWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgdm1jc193cml0ZTMyX2ZpeGVkYml0cyh1MzIgbXNyLCB1MzIgdm1jc19maWVsZCwgdTMyIHZhbCkKK3sKKwl1MzIgbXNyX2hpZ2gsIG1zcl9sb3c7CisKKwlyZG1zcihtc3IsIG1zcl9sb3csIG1zcl9oaWdoKTsKKworCXZhbCAmPSBtc3JfaGlnaDsKKwl2YWwgfD0gbXNyX2xvdzsKKwl2bWNzX3dyaXRlMzIodm1jc19maWVsZCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgc2VnX3NldHVwKGludCBzZWcpCit7CisJc3RydWN0IGt2bV92bXhfc2VnbWVudF9maWVsZCAqc2YgPSAma3ZtX3ZteF9zZWdtZW50X2ZpZWxkc1tzZWddOworCisJdm1jc193cml0ZTE2KHNmLT5zZWxlY3RvciwgMCk7CisJdm1jc193cml0ZWwoc2YtPmJhc2UsIDApOworCXZtY3Nfd3JpdGUzMihzZi0+bGltaXQsIDB4ZmZmZik7CisJdm1jc193cml0ZTMyKHNmLT5hcl9ieXRlcywgMHg5Myk7Cit9CisKKy8qCisgKiBTZXRzIHVwIHRoZSB2bWNzIGZvciBlbXVsYXRlZCByZWFsIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgdm14X3ZjcHVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXUzMiBob3N0X3N5c2VudGVyX2NzOworCXUzMiBqdW5rOworCXVuc2lnbmVkIGxvbmcgYTsKKwlzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSBkdDsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbnJfZ29vZF9tc3JzOworCWV4dGVybiBhc21saW5rYWdlIHZvaWQga3ZtX3ZteF9yZXR1cm4odm9pZCk7CisKKwlpZiAoIWluaXRfcm1vZGVfdHNzKHZjcHUtPmt2bSkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtc2V0KHZjcHUtPnJlZ3MsIDAsIHNpemVvZih2Y3B1LT5yZWdzKSk7CisJdmNwdS0+cmVnc1tWQ1BVX1JFR1NfUkRYXSA9IGdldF9yZHhfaW5pdF92YWwoKTsKKwl2Y3B1LT5jcjggPSAwOworCXZjcHUtPmFwaWNfYmFzZSA9IDB4ZmVlMDAwMDAgfAorCQkJLypmb3IgdmNwdSAwKi8gTVNSX0lBMzJfQVBJQ0JBU0VfQlNQIHwKKwkJCU1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRTsKKworCWZ4X2luaXQodmNwdSk7CisKKwkvKgorCSAqIEdVRVNUX0NTX0JBU0Ugc2hvdWxkIHJlYWxseSBiZSAweGZmZmYwMDAwLCBidXQgVlQgdm04NiBtb2RlCisJICogaW5zaXN0cyBvbiBoYXZpbmcgR1VFU1RfQ1NfQkFTRSA9PSBHVUVTVF9DU19TRUxFQ1RPUiA8PCA0LiAgU2lnaC4KKwkgKi8KKwl2bWNzX3dyaXRlMTYoR1VFU1RfQ1NfU0VMRUNUT1IsIDB4ZjAwMCk7CisJdm1jc193cml0ZWwoR1VFU1RfQ1NfQkFTRSwgMHgwMDBmMDAwMCk7CisJdm1jc193cml0ZTMyKEdVRVNUX0NTX0xJTUlULCAweGZmZmYpOworCXZtY3Nfd3JpdGUzMihHVUVTVF9DU19BUl9CWVRFUywgMHg5Yik7CisKKwlzZWdfc2V0dXAoVkNQVV9TUkVHX0RTKTsKKwlzZWdfc2V0dXAoVkNQVV9TUkVHX0VTKTsKKwlzZWdfc2V0dXAoVkNQVV9TUkVHX0ZTKTsKKwlzZWdfc2V0dXAoVkNQVV9TUkVHX0dTKTsKKwlzZWdfc2V0dXAoVkNQVV9TUkVHX1NTKTsKKworCXZtY3Nfd3JpdGUxNihHVUVTVF9UUl9TRUxFQ1RPUiwgMCk7CisJdm1jc193cml0ZWwoR1VFU1RfVFJfQkFTRSwgMCk7CisJdm1jc193cml0ZTMyKEdVRVNUX1RSX0xJTUlULCAweGZmZmYpOworCXZtY3Nfd3JpdGUzMihHVUVTVF9UUl9BUl9CWVRFUywgMHgwMDhiKTsKKworCXZtY3Nfd3JpdGUxNihHVUVTVF9MRFRSX1NFTEVDVE9SLCAwKTsKKwl2bWNzX3dyaXRlbChHVUVTVF9MRFRSX0JBU0UsIDApOworCXZtY3Nfd3JpdGUzMihHVUVTVF9MRFRSX0xJTUlULCAweGZmZmYpOworCXZtY3Nfd3JpdGUzMihHVUVTVF9MRFRSX0FSX0JZVEVTLCAweDAwMDgyKTsKKworCXZtY3Nfd3JpdGUzMihHVUVTVF9TWVNFTlRFUl9DUywgMCk7CisJdm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRVNQLCAwKTsKKwl2bWNzX3dyaXRlbChHVUVTVF9TWVNFTlRFUl9FSVAsIDApOworCisJdm1jc193cml0ZWwoR1VFU1RfUkZMQUdTLCAweDAyKTsKKwl2bWNzX3dyaXRlbChHVUVTVF9SSVAsIDB4ZmZmMCk7CisJdm1jc193cml0ZWwoR1VFU1RfUlNQLCAwKTsKKworCS8vdG9kbzogZHIwID0gZHIxID0gZHIyID0gZHIzID0gMDsgZHI2ID0gMHhmZmZmMGZmMAorCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgMHg0MDApOworCisJdm1jc193cml0ZWwoR1VFU1RfR0RUUl9CQVNFLCAwKTsKKwl2bWNzX3dyaXRlMzIoR1VFU1RfR0RUUl9MSU1JVCwgMHhmZmZmKTsKKworCXZtY3Nfd3JpdGVsKEdVRVNUX0lEVFJfQkFTRSwgMCk7CisJdm1jc193cml0ZTMyKEdVRVNUX0lEVFJfTElNSVQsIDB4ZmZmZik7CisKKwl2bWNzX3dyaXRlMzIoR1VFU1RfQUNUSVZJVFlfU1RBVEUsIDApOworCXZtY3Nfd3JpdGUzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sIDApOworCXZtY3Nfd3JpdGUzMihHVUVTVF9QRU5ESU5HX0RCR19FWENFUFRJT05TLCAwKTsKKworCS8qIEkvTyAqLworCXZtY3Nfd3JpdGU2NChJT19CSVRNQVBfQSwgMCk7CisJdm1jc193cml0ZTY0KElPX0JJVE1BUF9CLCAwKTsKKworCWd1ZXN0X3dyaXRlX3RzYygwKTsKKworCXZtY3Nfd3JpdGU2NChWTUNTX0xJTktfUE9JTlRFUiwgLTF1bGwpOyAvKiAyMi4zLjEuNSAqLworCisJLyogU3BlY2lhbCByZWdpc3RlcnMgKi8KKwl2bWNzX3dyaXRlNjQoR1VFU1RfSUEzMl9ERUJVR0NUTCwgMCk7CisKKwkvKiBDb250cm9sICovCisJdm1jc193cml0ZTMyX2ZpeGVkYml0cyhNU1JfSUEzMl9WTVhfUElOQkFTRURfQ1RMUywKKwkJCSAgICAgICBQSU5fQkFTRURfVk1fRVhFQ19DT05UUk9MLAorCQkJICAgICAgIFBJTl9CQVNFRF9FWFRfSU5UUl9NQVNLICAgLyogMjAuNi4xICovCisJCQkgICAgICAgfCBQSU5fQkFTRURfTk1JX0VYSVRJTkcgICAvKiAyMC42LjEgKi8KKwkJCSk7CisJdm1jc193cml0ZTMyX2ZpeGVkYml0cyhNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMsCisJCQkgICAgICAgQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwKKwkJCSAgICAgICBDUFVfQkFTRURfSExUX0VYSVRJTkcgICAgICAgICAvKiAyMC42LjIgKi8KKwkJCSAgICAgICB8IENQVV9CQVNFRF9DUjhfTE9BRF9FWElUSU5HICAgIC8qIDIwLjYuMiAqLworCQkJICAgICAgIHwgQ1BVX0JBU0VEX0NSOF9TVE9SRV9FWElUSU5HICAgLyogMjAuNi4yICovCisJCQkgICAgICAgfCBDUFVfQkFTRURfVU5DT05EX0lPX0VYSVRJTkcgICAvKiAyMC42LjIgKi8KKwkJCSAgICAgICB8IENQVV9CQVNFRF9NT1ZfRFJfRVhJVElORworCQkJICAgICAgIHwgQ1BVX0JBU0VEX1VTRV9UU0NfT0ZGU0VUSU5HICAgLyogMjEuMyAqLworCQkJKTsKKworCXZtY3Nfd3JpdGUzMihFWENFUFRJT05fQklUTUFQLCAxIDw8IFBGX1ZFQ1RPUik7CisJdm1jc193cml0ZTMyKFBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVNLLCAwKTsKKwl2bWNzX3dyaXRlMzIoUEFHRV9GQVVMVF9FUlJPUl9DT0RFX01BVENILCAwKTsKKwl2bWNzX3dyaXRlMzIoQ1IzX1RBUkdFVF9DT1VOVCwgMCk7ICAgICAgICAgICAvKiAyMi4yLjEgKi8KKworCXZtY3Nfd3JpdGVsKEhPU1RfQ1IwLCByZWFkX2NyMCgpKTsgIC8qIDIyLjIuMyAqLworCXZtY3Nfd3JpdGVsKEhPU1RfQ1I0LCByZWFkX2NyNCgpKTsgIC8qIDIyLjIuMywgMjIuMi41ICovCisJdm1jc193cml0ZWwoSE9TVF9DUjMsIHJlYWRfY3IzKCkpOyAgLyogMjIuMi4zICBGSVhNRTogc2hhZG93IHRhYmxlcyAqLworCisJdm1jc193cml0ZTE2KEhPU1RfQ1NfU0VMRUNUT1IsIF9fS0VSTkVMX0NTKTsgIC8qIDIyLjIuNCAqLworCXZtY3Nfd3JpdGUxNihIT1NUX0RTX1NFTEVDVE9SLCBfX0tFUk5FTF9EUyk7ICAvKiAyMi4yLjQgKi8KKwl2bWNzX3dyaXRlMTYoSE9TVF9FU19TRUxFQ1RPUiwgX19LRVJORUxfRFMpOyAgLyogMjIuMi40ICovCisJdm1jc193cml0ZTE2KEhPU1RfRlNfU0VMRUNUT1IsIHJlYWRfZnMoKSk7ICAgIC8qIDIyLjIuNCAqLworCXZtY3Nfd3JpdGUxNihIT1NUX0dTX1NFTEVDVE9SLCByZWFkX2dzKCkpOyAgICAvKiAyMi4yLjQgKi8KKwl2bWNzX3dyaXRlMTYoSE9TVF9TU19TRUxFQ1RPUiwgX19LRVJORUxfRFMpOyAgLyogMjIuMi40ICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXJkbXNybChNU1JfRlNfQkFTRSwgYSk7CisJdm1jc193cml0ZWwoSE9TVF9GU19CQVNFLCBhKTsgLyogMjIuMi40ICovCisJcmRtc3JsKE1TUl9HU19CQVNFLCBhKTsKKwl2bWNzX3dyaXRlbChIT1NUX0dTX0JBU0UsIGEpOyAvKiAyMi4yLjQgKi8KKyNlbHNlCisJdm1jc193cml0ZWwoSE9TVF9GU19CQVNFLCAwKTsgLyogMjIuMi40ICovCisJdm1jc193cml0ZWwoSE9TVF9HU19CQVNFLCAwKTsgLyogMjIuMi40ICovCisjZW5kaWYKKworCXZtY3Nfd3JpdGUxNihIT1NUX1RSX1NFTEVDVE9SLCBHRFRfRU5UUllfVFNTKjgpOyAgLyogMjIuMi40ICovCisKKwlnZXRfaWR0KCZkdCk7CisJdm1jc193cml0ZWwoSE9TVF9JRFRSX0JBU0UsIGR0LmJhc2UpOyAgIC8qIDIyLjIuNCAqLworCisKKwl2bWNzX3dyaXRlbChIT1NUX1JJUCwgKHVuc2lnbmVkIGxvbmcpa3ZtX3ZteF9yZXR1cm4pOyAvKiAyMi4yLjUgKi8KKworCXJkbXNyKE1TUl9JQTMyX1NZU0VOVEVSX0NTLCBob3N0X3N5c2VudGVyX2NzLCBqdW5rKTsKKwl2bWNzX3dyaXRlMzIoSE9TVF9JQTMyX1NZU0VOVEVSX0NTLCBob3N0X3N5c2VudGVyX2NzKTsKKwlyZG1zcmwoTVNSX0lBMzJfU1lTRU5URVJfRVNQLCBhKTsKKwl2bWNzX3dyaXRlbChIT1NUX0lBMzJfU1lTRU5URVJfRVNQLCBhKTsgICAvKiAyMi4yLjMgKi8KKwlyZG1zcmwoTVNSX0lBMzJfU1lTRU5URVJfRUlQLCBhKTsKKwl2bWNzX3dyaXRlbChIT1NUX0lBMzJfU1lTRU5URVJfRUlQLCBhKTsgICAvKiAyMi4yLjMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBOUl9WTVhfTVNSOyArK2kpIHsKKwkJdTMyIGluZGV4ID0gdm14X21zcl9pbmRleFtpXTsKKwkJdTMyIGRhdGFfbG93LCBkYXRhX2hpZ2g7CisJCXU2NCBkYXRhOworCQlpbnQgaiA9IHZjcHUtPm5tc3JzOworCisJCWlmIChyZG1zcl9zYWZlKGluZGV4LCAmZGF0YV9sb3csICZkYXRhX2hpZ2gpIDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAod3Jtc3Jfc2FmZShpbmRleCwgZGF0YV9sb3csIGRhdGFfaGlnaCkgPCAwKQorCQkJY29udGludWU7CisJCWRhdGEgPSBkYXRhX2xvdyB8ICgodTY0KWRhdGFfaGlnaCA8PCAzMik7CisJCXZjcHUtPmhvc3RfbXNyc1tqXS5pbmRleCA9IGluZGV4OworCQl2Y3B1LT5ob3N0X21zcnNbal0ucmVzZXJ2ZWQgPSAwOworCQl2Y3B1LT5ob3N0X21zcnNbal0uZGF0YSA9IGRhdGE7CisJCXZjcHUtPmd1ZXN0X21zcnNbal0gPSB2Y3B1LT5ob3N0X21zcnNbal07CisJCSsrdmNwdS0+bm1zcnM7CisJfQorCXByaW50ayhLRVJOX0RFQlVHICJrdm06IG1zcnM6ICVkXG4iLCB2Y3B1LT5ubXNycyk7CisKKwlucl9nb29kX21zcnMgPSB2Y3B1LT5ubXNycyAtIE5SX0JBRF9NU1JTOworCXZtY3Nfd3JpdGVsKFZNX0VOVFJZX01TUl9MT0FEX0FERFIsCisJCSAgICB2aXJ0X3RvX3BoeXModmNwdS0+Z3Vlc3RfbXNycyArIE5SX0JBRF9NU1JTKSk7CisJdm1jc193cml0ZWwoVk1fRVhJVF9NU1JfU1RPUkVfQUREUiwKKwkJICAgIHZpcnRfdG9fcGh5cyh2Y3B1LT5ndWVzdF9tc3JzICsgTlJfQkFEX01TUlMpKTsKKwl2bWNzX3dyaXRlbChWTV9FWElUX01TUl9MT0FEX0FERFIsCisJCSAgICB2aXJ0X3RvX3BoeXModmNwdS0+aG9zdF9tc3JzICsgTlJfQkFEX01TUlMpKTsKKwl2bWNzX3dyaXRlMzJfZml4ZWRiaXRzKE1TUl9JQTMyX1ZNWF9FWElUX0NUTFMsIFZNX0VYSVRfQ09OVFJPTFMsCisJCSAgICAgCSAgICAgICAoSE9TVF9JU182NCA8PCA5KSk7ICAvKiAyMi4yLDEsIDIwLjcuMSAqLworCXZtY3Nfd3JpdGUzMihWTV9FWElUX01TUl9TVE9SRV9DT1VOVCwgbnJfZ29vZF9tc3JzKTsgLyogMjIuMi4yICovCisJdm1jc193cml0ZTMyKFZNX0VYSVRfTVNSX0xPQURfQ09VTlQsIG5yX2dvb2RfbXNycyk7ICAvKiAyMi4yLjIgKi8KKwl2bWNzX3dyaXRlMzIoVk1fRU5UUllfTVNSX0xPQURfQ09VTlQsIG5yX2dvb2RfbXNycyk7IC8qIDIyLjIuMiAqLworCisKKwkvKiAyMi4yLjEsIDIwLjguMSAqLworCXZtY3Nfd3JpdGUzMl9maXhlZGJpdHMoTVNSX0lBMzJfVk1YX0VOVFJZX0NUTFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVk1fRU5UUllfQ09OVFJPTFMsIDApOworCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsIDApOyAgLyogMjIuMi4xICovCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdm1jc193cml0ZWwoVklSVFVBTF9BUElDX1BBR0VfQUREUiwgMCk7CisJdm1jc193cml0ZWwoVFBSX1RIUkVTSE9MRCwgMCk7CisjZW5kaWYKKworCXZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIEtWTV9HVUVTVF9DUjBfTUFTSyk7CisJdm1jc193cml0ZWwoQ1I0X0dVRVNUX0hPU1RfTUFTSywgS1ZNX0dVRVNUX0NSNF9NQVNLKTsKKworCXZjcHUtPmNyMCA9IDB4NjAwMDAwMTA7CisJdm14X3NldF9jcjAodmNwdSwgdmNwdS0+Y3IwKTsgLy8gZW50ZXIgcm1vZGUKKwl2bXhfc2V0X2NyNCh2Y3B1LCAwKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdm14X3NldF9lZmVyKHZjcHUsIDApOworI2VuZGlmCisKKwlyZXR1cm4gMDsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGluamVjdF9ybW9kZV9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgaXJxKQoreworCXUxNiBlbnRbMl07CisJdTE2IGNzOworCXUxNiBpcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgc3NfYmFzZSA9IHZtY3NfcmVhZGwoR1VFU1RfU1NfQkFTRSk7CisJdTE2IHNwID0gIHZtY3NfcmVhZGwoR1VFU1RfUlNQKTsKKwl1MzIgc3NfbGltaXQgPSB2bWNzX3JlYWQzMihHVUVTVF9TU19MSU1JVCk7CisKKwlpZiAoc3AgPiBzc19saW1pdCB8fCBzcCAtIDYgPiBzcCkgeworCQl2Y3B1X3ByaW50Zih2Y3B1LCAiJXM6ICNTUywgcnNwIDB4JWx4IHNzIDB4JWx4IGxpbWl0IDB4JXhcbiIsCisJCQkgICAgX19GVU5DVElPTl9fLAorCQkJICAgIHZtY3NfcmVhZGwoR1VFU1RfUlNQKSwKKwkJCSAgICB2bWNzX3JlYWRsKEdVRVNUX1NTX0JBU0UpLAorCQkJICAgIHZtY3NfcmVhZDMyKEdVRVNUX1NTX0xJTUlUKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoa3ZtX3JlYWRfZ3Vlc3QodmNwdSwgaXJxICogc2l6ZW9mKGVudCksIHNpemVvZihlbnQpLCAmZW50KSAhPQorCQkJCQkJCQlzaXplb2YoZW50KSkgeworCQl2Y3B1X3ByaW50Zih2Y3B1LCAiJXM6IHJlYWQgZ3Vlc3QgZXJyXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZmxhZ3MgPSAgdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOworCWNzID0gIHZtY3NfcmVhZGwoR1VFU1RfQ1NfQkFTRSkgPj4gNDsKKwlpcCA9ICB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisKKworCWlmIChrdm1fd3JpdGVfZ3Vlc3QodmNwdSwgc3NfYmFzZSArIHNwIC0gMiwgMiwgJmZsYWdzKSAhPSAyIHx8CisJICAgIGt2bV93cml0ZV9ndWVzdCh2Y3B1LCBzc19iYXNlICsgc3AgLSA0LCAyLCAmY3MpICE9IDIgfHwKKwkgICAga3ZtX3dyaXRlX2d1ZXN0KHZjcHUsIHNzX2Jhc2UgKyBzcCAtIDYsIDIsICZpcCkgIT0gMikgeworCQl2Y3B1X3ByaW50Zih2Y3B1LCAiJXM6IHdyaXRlIGd1ZXN0IGVyclxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgZmxhZ3MgJgorCQkgICAgfiggWDg2X0VGTEFHU19JRiB8IFg4Nl9FRkxBR1NfQUMgfCBYODZfRUZMQUdTX1RGKSk7CisJdm1jc193cml0ZTE2KEdVRVNUX0NTX1NFTEVDVE9SLCBlbnRbMV0pIDsKKwl2bWNzX3dyaXRlbChHVUVTVF9DU19CQVNFLCBlbnRbMV0gPDwgNCk7CisJdm1jc193cml0ZWwoR1VFU1RfUklQLCBlbnRbMF0pOworCXZtY3Nfd3JpdGVsKEdVRVNUX1JTUCwgKHZtY3NfcmVhZGwoR1VFU1RfUlNQKSAmIH4weGZmZmYpIHwgKHNwIC0gNikpOworfQorCitzdGF0aWMgdm9pZCBrdm1fZG9faW5qZWN0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IHdvcmRfaW5kZXggPSBfX2Zmcyh2Y3B1LT5pcnFfc3VtbWFyeSk7CisJaW50IGJpdF9pbmRleCA9IF9fZmZzKHZjcHUtPmlycV9wZW5kaW5nW3dvcmRfaW5kZXhdKTsKKwlpbnQgaXJxID0gd29yZF9pbmRleCAqIEJJVFNfUEVSX0xPTkcgKyBiaXRfaW5kZXg7CisKKwljbGVhcl9iaXQoYml0X2luZGV4LCAmdmNwdS0+aXJxX3BlbmRpbmdbd29yZF9pbmRleF0pOworCWlmICghdmNwdS0+aXJxX3BlbmRpbmdbd29yZF9pbmRleF0pCisJCWNsZWFyX2JpdCh3b3JkX2luZGV4LCAmdmNwdS0+aXJxX3N1bW1hcnkpOworCisJaWYgKHZjcHUtPnJtb2RlLmFjdGl2ZSkgeworCQlpbmplY3Rfcm1vZGVfaXJxKHZjcHUsIGlycSk7CisJCXJldHVybjsKKwl9CisJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKKwkJCWlycSB8IElOVFJfVFlQRV9FWFRfSU5UUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKK30KKworCitzdGF0aWMgdm9pZCBkb19pbnRlcnJ1cHRfcmVxdWVzdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgICAgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwl1MzIgY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbDsKKworCXZjcHUtPmludGVycnVwdF93aW5kb3dfb3BlbiA9CisJCSgodm1jc19yZWFkbChHVUVTVF9SRkxBR1MpICYgWDg2X0VGTEFHU19JRikgJiYKKwkJICh2bWNzX3JlYWQzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8pICYgMykgPT0gMCk7CisKKwlpZiAodmNwdS0+aW50ZXJydXB0X3dpbmRvd19vcGVuICYmCisJICAgIHZjcHUtPmlycV9zdW1tYXJ5ICYmCisJICAgICEodm1jc19yZWFkMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxEKSAmIElOVFJfSU5GT19WQUxJRF9NQVNLKSkKKwkJLyoKKwkJICogSWYgaW50ZXJydXB0cyBlbmFibGVkLCBhbmQgbm90IGJsb2NrZWQgYnkgc3RpIG9yIG1vdiBzcy4gR29vZC4KKwkJICovCisJCWt2bV9kb19pbmplY3RfaXJxKHZjcHUpOworCisJY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbCA9IHZtY3NfcmVhZDMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpOworCWlmICghdmNwdS0+aW50ZXJydXB0X3dpbmRvd19vcGVuICYmCisJICAgICh2Y3B1LT5pcnFfc3VtbWFyeSB8fCBrdm1fcnVuLT5yZXF1ZXN0X2ludGVycnVwdF93aW5kb3cpKQorCQkvKgorCQkgKiBJbnRlcnJ1cHRzIGJsb2NrZWQuICBXYWl0IGZvciB1bmJsb2NrLgorCQkgKi8KKwkJY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbCB8PSBDUFVfQkFTRURfVklSVFVBTF9JTlRSX1BFTkRJTkc7CisJZWxzZQorCQljcHVfYmFzZWRfdm1fZXhlY19jb250cm9sICY9IH5DUFVfQkFTRURfVklSVFVBTF9JTlRSX1BFTkRJTkc7CisJdm1jc193cml0ZTMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIGNwdV9iYXNlZF92bV9leGVjX2NvbnRyb2wpOworfQorCitzdGF0aWMgdm9pZCBrdm1fZ3Vlc3RfZGVidWdfcHJlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcgPSAmdmNwdS0+Z3Vlc3RfZGVidWc7CisKKwlzZXRfZGVidWdyZWcoZGJnLT5icFswXSwgMCk7CisJc2V0X2RlYnVncmVnKGRiZy0+YnBbMV0sIDEpOworCXNldF9kZWJ1Z3JlZyhkYmctPmJwWzJdLCAyKTsKKwlzZXRfZGVidWdyZWcoZGJnLT5icFszXSwgMyk7CisKKwlpZiAoZGJnLT5zaW5nbGVzdGVwKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJZmxhZ3MgPSB2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUyk7CisJCWZsYWdzIHw9IFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGOworCQl2bWNzX3dyaXRlbChHVUVTVF9SRkxBR1MsIGZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX3Jtb2RlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICBpbnQgdmVjLCB1MzIgZXJyX2NvZGUpCit7CisJaWYgKCF2Y3B1LT5ybW9kZS5hY3RpdmUpCisJCXJldHVybiAwOworCisJaWYgKHZlYyA9PSBHUF9WRUNUT1IgJiYgZXJyX2NvZGUgPT0gMCkKKwkJaWYgKGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgTlVMTCwgMCwgMCkgPT0gRU1VTEFURV9ET05FKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXUzMiBpbnRyX2luZm8sIGVycm9yX2NvZGU7CisJdW5zaWduZWQgbG9uZyBjcjIsIHJpcDsKKwl1MzIgdmVjdF9pbmZvOworCWVudW0gZW11bGF0aW9uX3Jlc3VsdCBlcjsKKwlpbnQgcjsKKworCXZlY3RfaW5mbyA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfSU5GT19GSUVMRCk7CisJaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pOworCisJaWYgKCh2ZWN0X2luZm8gJiBWRUNUT1JJTkdfSU5GT19WQUxJRF9NQVNLKSAmJgorCQkJCQkJIWlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkLCB2ZWN0b3JpbmcgaW5mbyAweCV4ICIKKwkJICAgICAgICJpbnRyIGluZm8gMHgleFxuIiwgX19GVU5DVElPTl9fLCB2ZWN0X2luZm8sIGludHJfaW5mbyk7CisJfQorCisJaWYgKGlzX2V4dGVybmFsX2ludGVycnVwdCh2ZWN0X2luZm8pKSB7CisJCWludCBpcnEgPSB2ZWN0X2luZm8gJiBWRUNUT1JJTkdfSU5GT19WRUNUT1JfTUFTSzsKKwkJc2V0X2JpdChpcnEsIHZjcHUtPmlycV9wZW5kaW5nKTsKKwkJc2V0X2JpdChpcnEgLyBCSVRTX1BFUl9MT05HLCAmdmNwdS0+aXJxX3N1bW1hcnkpOworCX0KKworCWlmICgoaW50cl9pbmZvICYgSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLKSA9PSAweDIwMCkgeyAvKiBubWkgKi8KKwkJYXNtICgiaW50ICQyIik7CisJCXJldHVybiAxOworCX0KKwllcnJvcl9jb2RlID0gMDsKKwlyaXAgPSB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJaWYgKGludHJfaW5mbyAmIElOVFJfSU5GT19ERUxJRVZFUl9DT0RFX01BU0spCisJCWVycm9yX2NvZGUgPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOVFJfRVJST1JfQ09ERSk7CisJaWYgKGlzX3BhZ2VfZmF1bHQoaW50cl9pbmZvKSkgeworCQljcjIgPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7CisKKwkJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOworCQlyID0ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGNyMiwgZXJyb3JfY29kZSk7CisJCWlmIChyIDwgMCkgeworCQkJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQlpZiAoIXIpIHsKKwkJCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOworCQkJcmV0dXJuIDE7CisJCX0KKworCQllciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwga3ZtX3J1biwgY3IyLCBlcnJvcl9jb2RlKTsKKwkJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7CisKKwkJc3dpdGNoIChlcikgeworCQljYXNlIEVNVUxBVEVfRE9ORToKKwkJCXJldHVybiAxOworCQljYXNlIEVNVUxBVEVfRE9fTU1JTzoKKwkJCSsra3ZtX3N0YXQubW1pb19leGl0czsKKwkJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTU1JTzsKKwkJCXJldHVybiAwOworCQkgY2FzZSBFTVVMQVRFX0ZBSUw6CisJCQl2Y3B1X3ByaW50Zih2Y3B1LCAiJXM6IGVtdWxhdGUgZmFpbFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKwl9CisKKwlpZiAodmNwdS0+cm1vZGUuYWN0aXZlICYmCisJICAgIGhhbmRsZV9ybW9kZV9leGNlcHRpb24odmNwdSwgaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLLAorCQkJCQkJCQllcnJvcl9jb2RlKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKGludHJfaW5mbyAmIChJTlRSX0lORk9fSU5UUl9UWVBFX01BU0sgfCBJTlRSX0lORk9fVkVDVE9SX01BU0spKSA9PSAoSU5UUl9UWVBFX0VYQ0VQVElPTiB8IDEpKSB7CisJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfREVCVUc7CisJCXJldHVybiAwOworCX0KKwlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0VYQ0VQVElPTjsKKwlrdm1fcnVuLT5leC5leGNlcHRpb24gPSBpbnRyX2luZm8gJiBJTlRSX0lORk9fVkVDVE9SX01BU0s7CisJa3ZtX3J1bi0+ZXguZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2V4dGVybmFsX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwkrK2t2bV9zdGF0LmlycV9leGl0czsKKwlyZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50IGdldF9pb19jb3VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqY291bnQpCit7CisJdTY0IGluc3Q7CisJZ3ZhX3QgcmlwOworCWludCBjb3VudHJfc2l6ZTsKKwlpbnQgaSwgbjsKKworCWlmICgodm1jc19yZWFkbChHVUVTVF9SRkxBR1MpICYgWDg2X0VGTEFHU19WTSkpIHsKKwkJY291bnRyX3NpemUgPSAyOworCX0gZWxzZSB7CisJCXUzMiBjc19hciA9IHZtY3NfcmVhZDMyKEdVRVNUX0NTX0FSX0JZVEVTKTsKKworCQljb3VudHJfc2l6ZSA9IChjc19hciAmIEFSX0xfTUFTSykgPyA4OgorCQkJICAgICAgKGNzX2FyICYgQVJfREJfTUFTSykgPyA0OiAyOworCX0KKworCXJpcCA9ICB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJaWYgKGNvdW50cl9zaXplICE9IDgpCisJCXJpcCArPSB2bWNzX3JlYWRsKEdVRVNUX0NTX0JBU0UpOworCisJbiA9IGt2bV9yZWFkX2d1ZXN0KHZjcHUsIHJpcCwgc2l6ZW9mKGluc3QpLCAmaW5zdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN3aXRjaCAoKCh1OCopJmluc3QpW2ldKSB7CisJCWNhc2UgMHhmMDoKKwkJY2FzZSAweGYyOgorCQljYXNlIDB4ZjM6CisJCWNhc2UgMHgyZToKKwkJY2FzZSAweDM2OgorCQljYXNlIDB4M2U6CisJCWNhc2UgMHgyNjoKKwkJY2FzZSAweDY0OgorCQljYXNlIDB4NjU6CisJCWNhc2UgMHg2NjoKKwkJCWJyZWFrOworCQljYXNlIDB4Njc6CisJCQljb3VudHJfc2l6ZSA9IChjb3VudHJfc2l6ZSA9PSAyKSA/IDQ6IChjb3VudHJfc2l6ZSA+PiAxKTsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK2RvbmU6CisJY291bnRyX3NpemUgKj0gODsKKwkqY291bnQgPSB2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SQ1hdICYgKH4wVUxMID4+ICg2NCAtIGNvdW50cl9zaXplKSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2lvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJdTY0IGV4aXRfcXVhbGlmaWNhdGlvbjsKKworCSsra3ZtX3N0YXQuaW9fZXhpdHM7CisJZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkNjQoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKKwlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lPOworCWlmIChleGl0X3F1YWxpZmljYXRpb24gJiA4KQorCQlrdm1fcnVuLT5pby5kaXJlY3Rpb24gPSBLVk1fRVhJVF9JT19JTjsKKwllbHNlCisJCWt2bV9ydW4tPmlvLmRpcmVjdGlvbiA9IEtWTV9FWElUX0lPX09VVDsKKwlrdm1fcnVuLT5pby5zaXplID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmIDcpICsgMTsKKwlrdm1fcnVuLT5pby5zdHJpbmcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uICYgMTYpICE9IDA7CisJa3ZtX3J1bi0+aW8uc3RyaW5nX2Rvd24KKwkJPSAodm1jc19yZWFkbChHVUVTVF9SRkxBR1MpICYgWDg2X0VGTEFHU19ERikgIT0gMDsKKwlrdm1fcnVuLT5pby5yZXAgPSAoZXhpdF9xdWFsaWZpY2F0aW9uICYgMzIpICE9IDA7CisJa3ZtX3J1bi0+aW8ucG9ydCA9IGV4aXRfcXVhbGlmaWNhdGlvbiA+PiAxNjsKKwlpZiAoa3ZtX3J1bi0+aW8uc3RyaW5nKSB7CisJCWlmICghZ2V0X2lvX2NvdW50KHZjcHUsICZrdm1fcnVuLT5pby5jb3VudCkpCisJCQlyZXR1cm4gMTsKKwkJa3ZtX3J1bi0+aW8uYWRkcmVzcyA9IHZtY3NfcmVhZGwoR1VFU1RfTElORUFSX0FERFJFU1MpOworCX0gZWxzZQorCQlrdm1fcnVuLT5pby52YWx1ZSA9IHZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JBWF07IC8qIHJheCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXU2NCBleGl0X3F1YWxpZmljYXRpb247CisJaW50IGNyOworCWludCByZWc7CisKKwlleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWQ2NChFWElUX1FVQUxJRklDQVRJT04pOworCWNyID0gZXhpdF9xdWFsaWZpY2F0aW9uICYgMTU7CisJcmVnID0gKGV4aXRfcXVhbGlmaWNhdGlvbiA+PiA4KSAmIDE1OworCXN3aXRjaCAoKGV4aXRfcXVhbGlmaWNhdGlvbiA+PiA0KSAmIDMpIHsKKwljYXNlIDA6IC8qIG1vdiB0byBjciAqLworCQlzd2l0Y2ggKGNyKSB7CisJCWNhc2UgMDoKKwkJCXZjcHVfbG9hZF9yc3BfcmlwKHZjcHUpOworCQkJc2V0X2NyMCh2Y3B1LCB2Y3B1LT5yZWdzW3JlZ10pOworCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwkJCXJldHVybiAxOworCQljYXNlIDM6CisJCQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKKwkJCXNldF9jcjModmNwdSwgdmNwdS0+cmVnc1tyZWddKTsKKwkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSA0OgorCQkJdmNwdV9sb2FkX3JzcF9yaXAodmNwdSk7CisJCQlzZXRfY3I0KHZjcHUsIHZjcHUtPnJlZ3NbcmVnXSk7CisJCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgODoKKwkJCXZjcHVfbG9hZF9yc3BfcmlwKHZjcHUpOworCQkJc2V0X2NyOCh2Y3B1LCB2Y3B1LT5yZWdzW3JlZ10pOworCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwkJCXJldHVybiAxOworCQl9OworCQlicmVhazsKKwljYXNlIDE6IC8qbW92IGZyb20gY3IqLworCQlzd2l0Y2ggKGNyKSB7CisJCWNhc2UgMzoKKwkJCXZjcHVfbG9hZF9yc3BfcmlwKHZjcHUpOworCQkJdmNwdS0+cmVnc1tyZWddID0gdmNwdS0+Y3IzOworCQkJdmNwdV9wdXRfcnNwX3JpcCh2Y3B1KTsKKwkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSA4OgorCQkJcHJpbnRrKEtFUk5fREVCVUcgImhhbmRsZV9jcjogcmVhZCBDUjggIgorCQkJICAgICAgICJjcHUgZXJyYXR1bSBBQTE1XG4iKTsKKwkJCXZjcHVfbG9hZF9yc3BfcmlwKHZjcHUpOworCQkJdmNwdS0+cmVnc1tyZWddID0gdmNwdS0+Y3I4OworCQkJdmNwdV9wdXRfcnNwX3JpcCh2Y3B1KTsKKwkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIDM6IC8qIGxtc3cgKi8KKwkJbG1zdyh2Y3B1LCAoZXhpdF9xdWFsaWZpY2F0aW9uID4+IExNU1dfU09VUkNFX0RBVEFfU0hJRlQpICYgMHgwZik7CisKKwkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gMDsKKwlwcmludGsoS0VSTl9FUlIgImt2bTogdW5oYW5kbGVkIGNvbnRyb2wgcmVnaXN0ZXI6IG9wICVkIGNyICVkXG4iLAorCSAgICAgICAoaW50KShleGl0X3F1YWxpZmljYXRpb24gPj4gNCkgJiAzLCBjcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJdTY0IGV4aXRfcXVhbGlmaWNhdGlvbjsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZHIsIHJlZzsKKworCS8qCisJICogRklYTUU6IHRoaXMgY29kZSBhc3N1bWVzIHRoZSBob3N0IGlzIGRlYnVnZ2luZyB0aGUgZ3Vlc3QuCisJICogICAgICAgIG5lZWQgdG8gZGVhbCB3aXRoIGd1ZXN0IGRlYnVnZ2luZyBpdHNlbGYgdG9vLgorCSAqLworCWV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZDY0KEVYSVRfUVVBTElGSUNBVElPTik7CisJZHIgPSBleGl0X3F1YWxpZmljYXRpb24gJiA3OworCXJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gPj4gOCkgJiAxNTsKKwl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKKwlpZiAoZXhpdF9xdWFsaWZpY2F0aW9uICYgMTYpIHsKKwkJLyogbW92IGZyb20gZHIgKi8KKwkJc3dpdGNoIChkcikgeworCQljYXNlIDY6CisJCQl2YWwgPSAweGZmZmYwZmYwOworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJCXZhbCA9IDB4NDAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl2YWwgPSAwOworCQl9CisJCXZjcHUtPnJlZ3NbcmVnXSA9IHZhbDsKKwl9IGVsc2UgeworCQkvKiBtb3YgdG8gZHIgKi8KKwl9CisJdmNwdV9wdXRfcnNwX3JpcCh2Y3B1KTsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfQ1BVSUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX3JkbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJdTMyIGVjeCA9IHZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JDWF07CisJdTY0IGRhdGE7CisKKwlpZiAodm14X2dldF9tc3IodmNwdSwgZWN4LCAmZGF0YSkpIHsKKwkJdm14X2luamVjdF9ncCh2Y3B1LCAwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogRklYTUU6IGhhbmRsaW5nIG9mIGJpdHMgMzI6NjMgb2YgcmF4LCByZHggKi8KKwl2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SQVhdID0gZGF0YSAmIC0xdTsKKwl2Y3B1LT5yZWdzW1ZDUFVfUkVHU19SRFhdID0gKGRhdGEgPj4gMzIpICYgLTF1OworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX3dybXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJdTMyIGVjeCA9IHZjcHUtPnJlZ3NbVkNQVV9SRUdTX1JDWF07CisJdTY0IGRhdGEgPSAodmNwdS0+cmVnc1tWQ1BVX1JFR1NfUkFYXSAmIC0xdSkKKwkJfCAoKHU2NCkodmNwdS0+cmVnc1tWQ1BVX1JFR1NfUkRYXSAmIC0xdSkgPDwgMzIpOworCisJaWYgKHZteF9zZXRfbXNyKHZjcHUsIGVjeCwgZGF0YSkgIT0gMCkgeworCQl2bXhfaW5qZWN0X2dwKHZjcHUsIDApOworCQlyZXR1cm4gMTsKKwl9CisKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwb3N0X2t2bV9ydW5fc2F2ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlrdm1fcnVuLT5pZl9mbGFnID0gKHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKSAmIFg4Nl9FRkxBR1NfSUYpICE9IDA7CisJa3ZtX3J1bi0+Y3I4ID0gdmNwdS0+Y3I4OworCWt2bV9ydW4tPmFwaWNfYmFzZSA9IHZjcHUtPmFwaWNfYmFzZTsKKwlrdm1fcnVuLT5yZWFkeV9mb3JfaW50ZXJydXB0X2luamVjdGlvbiA9ICh2Y3B1LT5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYKKwkJCQkJCSAgdmNwdS0+aXJxX3N1bW1hcnkgPT0gMCk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2ludGVycnVwdF93aW5kb3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCS8qCisJICogSWYgdGhlIHVzZXIgc3BhY2Ugd2FpdHMgdG8gaW5qZWN0IGludGVycnVwdHMsIGV4aXQgYXMgc29vbiBhcworCSAqIHBvc3NpYmxlCisJICovCisJaWYgKGt2bV9ydW4tPnJlcXVlc3RfaW50ZXJydXB0X3dpbmRvdyAmJgorCSAgICAhdmNwdS0+aXJxX3N1bW1hcnkpIHsKKwkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JUlFfV0lORE9XX09QRU47CisJCSsra3ZtX3N0YXQuaXJxX3dpbmRvd19leGl0czsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwlpZiAodmNwdS0+aXJxX3N1bW1hcnkpCisJCXJldHVybiAxOworCisJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ITFQ7CisJKytrdm1fc3RhdC5oYWx0X2V4aXRzOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIGV4aXQgaGFuZGxlcnMgcmV0dXJuIDEgaWYgdGhlIGV4aXQgd2FzIGhhbmRsZWQgZnVsbHkgYW5kIGd1ZXN0IGV4ZWN1dGlvbgorICogbWF5IHJlc3VtZS4gIE90aGVyd2lzZSB0aGV5IHNldCB0aGUga3ZtX3J1biBwYXJhbWV0ZXIgdG8gaW5kaWNhdGUgd2hhdCBuZWVkcworICogdG8gYmUgZG9uZSB0byB1c2Vyc3BhY2UgYW5kIHJldHVybiAwLgorICovCitzdGF0aWMgaW50ICgqa3ZtX3ZteF9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikgPSB7CisJW0VYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUldICAgICAgICAgICA9IGhhbmRsZV9leGNlcHRpb24sCisJW0VYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVF0gICAgICA9IGhhbmRsZV9leHRlcm5hbF9pbnRlcnJ1cHQsCisJW0VYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OXSAgICAgICAgICA9IGhhbmRsZV9pbywKKwlbRVhJVF9SRUFTT05fQ1JfQUNDRVNTXSAgICAgICAgICAgICAgID0gaGFuZGxlX2NyLAorCVtFWElUX1JFQVNPTl9EUl9BQ0NFU1NdICAgICAgICAgICAgICAgPSBoYW5kbGVfZHIsCisJW0VYSVRfUkVBU09OX0NQVUlEXSAgICAgICAgICAgICAgICAgICA9IGhhbmRsZV9jcHVpZCwKKwlbRVhJVF9SRUFTT05fTVNSX1JFQURdICAgICAgICAgICAgICAgID0gaGFuZGxlX3JkbXNyLAorCVtFWElUX1JFQVNPTl9NU1JfV1JJVEVdICAgICAgICAgICAgICAgPSBoYW5kbGVfd3Jtc3IsCisJW0VYSVRfUkVBU09OX1BFTkRJTkdfSU5URVJSVVBUXSAgICAgICA9IGhhbmRsZV9pbnRlcnJ1cHRfd2luZG93LAorCVtFWElUX1JFQVNPTl9ITFRdICAgICAgICAgICAgICAgICAgICAgPSBoYW5kbGVfaGFsdCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQga3ZtX3ZteF9tYXhfZXhpdF9oYW5kbGVycyA9CisJc2l6ZW9mKGt2bV92bXhfZXhpdF9oYW5kbGVycykgLyBzaXplb2YoKmt2bV92bXhfZXhpdF9oYW5kbGVycyk7CisKKy8qCisgKiBUaGUgZ3Vlc3QgaGFzIGV4aXRlZC4gIFNlZSBpZiB3ZSBjYW4gZml4IGl0IG9yIGlmIHdlIG5lZWQgdXNlcnNwYWNlCisgKiBhc3Npc3RhbmNlLgorICovCitzdGF0aWMgaW50IGt2bV9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXUzMiB2ZWN0b3JpbmdfaW5mbyA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfSU5GT19GSUVMRCk7CisJdTMyIGV4aXRfcmVhc29uID0gdm1jc19yZWFkMzIoVk1fRVhJVF9SRUFTT04pOworCisJaWYgKCAodmVjdG9yaW5nX2luZm8gJiBWRUNUT1JJTkdfSU5GT19WQUxJRF9NQVNLKSAmJgorCQkJCWV4aXRfcmVhc29uICE9IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkgKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5leHBlY3RlZCwgdmFsaWQgdmVjdG9yaW5nIGluZm8gYW5kICIKKwkJICAgICAgICJleGl0IHJlYXNvbiBpcyAweCV4XG4iLCBfX0ZVTkNUSU9OX18sIGV4aXRfcmVhc29uKTsKKwlrdm1fcnVuLT5pbnN0cnVjdGlvbl9sZW5ndGggPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7CisJaWYgKGV4aXRfcmVhc29uIDwga3ZtX3ZteF9tYXhfZXhpdF9oYW5kbGVycworCSAgICAmJiBrdm1fdm14X2V4aXRfaGFuZGxlcnNbZXhpdF9yZWFzb25dKQorCQlyZXR1cm4ga3ZtX3ZteF9leGl0X2hhbmRsZXJzW2V4aXRfcmVhc29uXSh2Y3B1LCBrdm1fcnVuKTsKKwllbHNlIHsKKwkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9VTktOT1dOOworCQlrdm1fcnVuLT5ody5oYXJkd2FyZV9leGl0X3JlYXNvbiA9IGV4aXRfcmVhc29uOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIGlmIHVzZXJzcGFjZSByZXF1ZXN0ZWQgYW4gaW50ZXJydXB0IHdpbmRvdywgYW5kIHRoYXQgdGhlCisgKiBpbnRlcnJ1cHQgd2luZG93IGlzIG9wZW4uCisgKgorICogTm8gbmVlZCB0byBleGl0IHRvIHVzZXJzcGFjZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW50ZXJydXB0IHF1ZXVlZC4KKyAqLworc3RhdGljIGludCBkbV9yZXF1ZXN0X2Zvcl9pcnFfaW5qZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlyZXR1cm4gKCF2Y3B1LT5pcnFfc3VtbWFyeSAmJgorCQlrdm1fcnVuLT5yZXF1ZXN0X2ludGVycnVwdF93aW5kb3cgJiYKKwkJdmNwdS0+aW50ZXJydXB0X3dpbmRvd19vcGVuICYmCisJCSh2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUykgJiBYODZfRUZMQUdTX0lGKSk7Cit9CisKK3N0YXRpYyBpbnQgdm14X3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJdTggZmFpbDsKKwl1MTYgZnNfc2VsLCBnc19zZWwsIGxkdF9zZWw7CisJaW50IGZzX2dzX2xkdF9yZWxvYWRfbmVlZGVkOworCWludCByOworCithZ2FpbjoKKwkvKgorCSAqIFNldCBob3N0IGZzIGFuZCBncyBzZWxlY3RvcnMuICBVbmZvcnR1bmF0ZWx5LCAyMi4yLjMgZG9lcyBub3QKKwkgKiBhbGxvdyBzZWdtZW50IHNlbGVjdG9ycyB3aXRoIGNwbCA+IDAgb3IgdGkgPT0gMS4KKwkgKi8KKwlmc19zZWwgPSByZWFkX2ZzKCk7CisJZ3Nfc2VsID0gcmVhZF9ncygpOworCWxkdF9zZWwgPSByZWFkX2xkdCgpOworCWZzX2dzX2xkdF9yZWxvYWRfbmVlZGVkID0gKGZzX3NlbCAmIDcpIHwgKGdzX3NlbCAmIDcpIHwgbGR0X3NlbDsKKwlpZiAoIWZzX2dzX2xkdF9yZWxvYWRfbmVlZGVkKSB7CisJCXZtY3Nfd3JpdGUxNihIT1NUX0ZTX1NFTEVDVE9SLCBmc19zZWwpOworCQl2bWNzX3dyaXRlMTYoSE9TVF9HU19TRUxFQ1RPUiwgZ3Nfc2VsKTsKKwl9IGVsc2UgeworCQl2bWNzX3dyaXRlMTYoSE9TVF9GU19TRUxFQ1RPUiwgMCk7CisJCXZtY3Nfd3JpdGUxNihIT1NUX0dTX1NFTEVDVE9SLCAwKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdm1jc193cml0ZWwoSE9TVF9GU19CQVNFLCByZWFkX21zcihNU1JfRlNfQkFTRSkpOworCXZtY3Nfd3JpdGVsKEhPU1RfR1NfQkFTRSwgcmVhZF9tc3IoTVNSX0dTX0JBU0UpKTsKKyNlbHNlCisJdm1jc193cml0ZWwoSE9TVF9GU19CQVNFLCBzZWdtZW50X2Jhc2UoZnNfc2VsKSk7CisJdm1jc193cml0ZWwoSE9TVF9HU19CQVNFLCBzZWdtZW50X2Jhc2UoZ3Nfc2VsKSk7CisjZW5kaWYKKworCWlmICghdmNwdS0+bW1pb19yZWFkX2NvbXBsZXRlZCkKKwkJZG9faW50ZXJydXB0X3JlcXVlc3RzKHZjcHUsIGt2bV9ydW4pOworCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCisJCWt2bV9ndWVzdF9kZWJ1Z19wcmUodmNwdSk7CisKKwlmeF9zYXZlKHZjcHUtPmhvc3RfZnhfaW1hZ2UpOworCWZ4X3Jlc3RvcmUodmNwdS0+Z3Vlc3RfZnhfaW1hZ2UpOworCisJc2F2ZV9tc3JzKHZjcHUtPmhvc3RfbXNycywgdmNwdS0+bm1zcnMpOworCWxvYWRfbXNycyh2Y3B1LT5ndWVzdF9tc3JzLCBOUl9CQURfTVNSUyk7CisKKwlhc20gKAorCQkvKiBTdG9yZSBob3N0IHJlZ2lzdGVycyAqLworCQkicHVzaGYgXG5cdCIKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCSJwdXNoICUlcmF4OyBwdXNoICUlcmJ4OyBwdXNoICUlcmR4OyIKKwkJInB1c2ggJSVyc2k7IHB1c2ggJSVyZGk7IHB1c2ggJSVyYnA7IgorCQkicHVzaCAlJXI4OyAgcHVzaCAlJXI5OyAgcHVzaCAlJXIxMDsgcHVzaCAlJXIxMTsiCisJCSJwdXNoICUlcjEyOyBwdXNoICUlcjEzOyBwdXNoICUlcjE0OyBwdXNoICUlcjE1OyIKKwkJInB1c2ggJSVyY3ggXG5cdCIKKwkJQVNNX1ZNWF9WTVdSSVRFX1JTUF9SRFggIlxuXHQiCisjZWxzZQorCQkicHVzaGE7IHB1c2ggJSVlY3ggXG5cdCIKKwkJQVNNX1ZNWF9WTVdSSVRFX1JTUF9SRFggIlxuXHQiCisjZW5kaWYKKwkJLyogQ2hlY2sgaWYgdm1sYXVuY2ggb2Ygdm1yZXN1bWUgaXMgbmVlZGVkICovCisJCSJjbXAgJDAsICUxIFxuXHQiCisJCS8qIExvYWQgZ3Vlc3QgcmVnaXN0ZXJzLiAgRG9uJ3QgY2xvYmJlciBmbGFncy4gKi8KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCSJtb3YgJWNbY3IyXSglMyksICUlcmF4IFxuXHQiCisJCSJtb3YgJSVyYXgsICUlY3IyIFxuXHQiCisJCSJtb3YgJWNbcmF4XSglMyksICUlcmF4IFxuXHQiCisJCSJtb3YgJWNbcmJ4XSglMyksICUlcmJ4IFxuXHQiCisJCSJtb3YgJWNbcmR4XSglMyksICUlcmR4IFxuXHQiCisJCSJtb3YgJWNbcnNpXSglMyksICUlcnNpIFxuXHQiCisJCSJtb3YgJWNbcmRpXSglMyksICUlcmRpIFxuXHQiCisJCSJtb3YgJWNbcmJwXSglMyksICUlcmJwIFxuXHQiCisJCSJtb3YgJWNbcjhdKCUzKSwgICUlcjggIFxuXHQiCisJCSJtb3YgJWNbcjldKCUzKSwgICUlcjkgIFxuXHQiCisJCSJtb3YgJWNbcjEwXSglMyksICUlcjEwIFxuXHQiCisJCSJtb3YgJWNbcjExXSglMyksICUlcjExIFxuXHQiCisJCSJtb3YgJWNbcjEyXSglMyksICUlcjEyIFxuXHQiCisJCSJtb3YgJWNbcjEzXSglMyksICUlcjEzIFxuXHQiCisJCSJtb3YgJWNbcjE0XSglMyksICUlcjE0IFxuXHQiCisJCSJtb3YgJWNbcjE1XSglMyksICUlcjE1IFxuXHQiCisJCSJtb3YgJWNbcmN4XSglMyksICUlcmN4IFxuXHQiIC8qIGtpbGxzICUzIChyY3gpICovCisjZWxzZQorCQkibW92ICVjW2NyMl0oJTMpLCAlJWVheCBcblx0IgorCQkibW92ICUlZWF4LCAgICUlY3IyIFxuXHQiCisJCSJtb3YgJWNbcmF4XSglMyksICUlZWF4IFxuXHQiCisJCSJtb3YgJWNbcmJ4XSglMyksICUlZWJ4IFxuXHQiCisJCSJtb3YgJWNbcmR4XSglMyksICUlZWR4IFxuXHQiCisJCSJtb3YgJWNbcnNpXSglMyksICUlZXNpIFxuXHQiCisJCSJtb3YgJWNbcmRpXSglMyksICUlZWRpIFxuXHQiCisJCSJtb3YgJWNbcmJwXSglMyksICUlZWJwIFxuXHQiCisJCSJtb3YgJWNbcmN4XSglMyksICUlZWN4IFxuXHQiIC8qIGtpbGxzICUzIChlY3gpICovCisjZW5kaWYKKwkJLyogRW50ZXIgZ3Vlc3QgbW9kZSAqLworCQkiam5lIGxhdW5jaGVkIFxuXHQiCisJCUFTTV9WTVhfVk1MQVVOQ0ggIlxuXHQiCisJCSJqbXAga3ZtX3ZteF9yZXR1cm4gXG5cdCIKKwkJImxhdW5jaGVkOiAiIEFTTV9WTVhfVk1SRVNVTUUgIlxuXHQiCisJCSIuZ2xvYmwga3ZtX3ZteF9yZXR1cm4gXG5cdCIKKwkJImt2bV92bXhfcmV0dXJuOiAiCisJCS8qIFNhdmUgZ3Vlc3QgcmVnaXN0ZXJzLCBsb2FkIGhvc3QgcmVnaXN0ZXJzLCBrZWVwIGZsYWdzICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQkieGNoZyAlMywgICAgIDAoJSVyc3ApIFxuXHQiCisJCSJtb3YgJSVyYXgsICVjW3JheF0oJTMpIFxuXHQiCisJCSJtb3YgJSVyYngsICVjW3JieF0oJTMpIFxuXHQiCisJCSJwdXNocSAwKCUlcnNwKTsgcG9wcSAlY1tyY3hdKCUzKSBcblx0IgorCQkibW92ICUlcmR4LCAlY1tyZHhdKCUzKSBcblx0IgorCQkibW92ICUlcnNpLCAlY1tyc2ldKCUzKSBcblx0IgorCQkibW92ICUlcmRpLCAlY1tyZGldKCUzKSBcblx0IgorCQkibW92ICUlcmJwLCAlY1tyYnBdKCUzKSBcblx0IgorCQkibW92ICUlcjgsICAlY1tyOF0oJTMpIFxuXHQiCisJCSJtb3YgJSVyOSwgICVjW3I5XSglMykgXG5cdCIKKwkJIm1vdiAlJXIxMCwgJWNbcjEwXSglMykgXG5cdCIKKwkJIm1vdiAlJXIxMSwgJWNbcjExXSglMykgXG5cdCIKKwkJIm1vdiAlJXIxMiwgJWNbcjEyXSglMykgXG5cdCIKKwkJIm1vdiAlJXIxMywgJWNbcjEzXSglMykgXG5cdCIKKwkJIm1vdiAlJXIxNCwgJWNbcjE0XSglMykgXG5cdCIKKwkJIm1vdiAlJXIxNSwgJWNbcjE1XSglMykgXG5cdCIKKwkJIm1vdiAlJWNyMiwgJSVyYXggICBcblx0IgorCQkibW92ICUlcmF4LCAlY1tjcjJdKCUzKSBcblx0IgorCQkibW92IDAoJSVyc3ApLCAlMyBcblx0IgorCisJCSJwb3AgICUlcmN4OyBwb3AgICUlcjE1OyBwb3AgICUlcjE0OyBwb3AgICUlcjEzOyBwb3AgICUlcjEyOyIKKwkJInBvcCAgJSVyMTE7IHBvcCAgJSVyMTA7IHBvcCAgJSVyOTsgIHBvcCAgJSVyODsiCisJCSJwb3AgICUlcmJwOyBwb3AgICUlcmRpOyBwb3AgICUlcnNpOyIKKwkJInBvcCAgJSVyZHg7IHBvcCAgJSVyYng7IHBvcCAgJSVyYXggXG5cdCIKKyNlbHNlCisJCSJ4Y2hnICUzLCAwKCUlZXNwKSBcblx0IgorCQkibW92ICUlZWF4LCAlY1tyYXhdKCUzKSBcblx0IgorCQkibW92ICUlZWJ4LCAlY1tyYnhdKCUzKSBcblx0IgorCQkicHVzaGwgMCglJWVzcCk7IHBvcGwgJWNbcmN4XSglMykgXG5cdCIKKwkJIm1vdiAlJWVkeCwgJWNbcmR4XSglMykgXG5cdCIKKwkJIm1vdiAlJWVzaSwgJWNbcnNpXSglMykgXG5cdCIKKwkJIm1vdiAlJWVkaSwgJWNbcmRpXSglMykgXG5cdCIKKwkJIm1vdiAlJWVicCwgJWNbcmJwXSglMykgXG5cdCIKKwkJIm1vdiAlJWNyMiwgJSVlYXggIFxuXHQiCisJCSJtb3YgJSVlYXgsICVjW2NyMl0oJTMpIFxuXHQiCisJCSJtb3YgMCglJWVzcCksICUzIFxuXHQiCisKKwkJInBvcCAlJWVjeDsgcG9wYSBcblx0IgorI2VuZGlmCisJCSJzZXRiZSAlMCBcblx0IgorCQkicG9wZiBcblx0IgorCSAgICAgIDogIj1xIiAoZmFpbCkKKwkgICAgICA6ICJyIih2Y3B1LT5sYXVuY2hlZCksICJkIigodW5zaWduZWQgbG9uZylIT1NUX1JTUCksCisJCSJjIih2Y3B1KSwKKwkJW3JheF0iaSIob2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCByZWdzW1ZDUFVfUkVHU19SQVhdKSksCisJCVtyYnhdImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgcmVnc1tWQ1BVX1JFR1NfUkJYXSkpLAorCQlbcmN4XSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1JDWF0pKSwKKwkJW3JkeF0iaSIob2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCByZWdzW1ZDUFVfUkVHU19SRFhdKSksCisJCVtyc2ldImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgcmVnc1tWQ1BVX1JFR1NfUlNJXSkpLAorCQlbcmRpXSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1JESV0pKSwKKwkJW3JicF0iaSIob2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCByZWdzW1ZDUFVfUkVHU19SQlBdKSksCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQlbcjggXSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1I4IF0pKSwKKwkJW3I5IF0iaSIob2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCByZWdzW1ZDUFVfUkVHU19SOSBdKSksCisJCVtyMTBdImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgcmVnc1tWQ1BVX1JFR1NfUjEwXSkpLAorCQlbcjExXSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1IxMV0pKSwKKwkJW3IxMl0iaSIob2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCByZWdzW1ZDUFVfUkVHU19SMTJdKSksCisJCVtyMTNdImkiKG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgcmVnc1tWQ1BVX1JFR1NfUjEzXSkpLAorCQlbcjE0XSJpIihvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIHJlZ3NbVkNQVV9SRUdTX1IxNF0pKSwKKwkJW3IxNV0iaSIob2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCByZWdzW1ZDUFVfUkVHU19SMTVdKSksCisjZW5kaWYKKwkJW2NyMl0iaSIob2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBjcjIpKQorCSAgICAgIDogImNjIiwgIm1lbW9yeSIgKTsKKworCSsra3ZtX3N0YXQuZXhpdHM7CisKKwlzYXZlX21zcnModmNwdS0+Z3Vlc3RfbXNycywgTlJfQkFEX01TUlMpOworCWxvYWRfbXNycyh2Y3B1LT5ob3N0X21zcnMsIE5SX0JBRF9NU1JTKTsKKworCWZ4X3NhdmUodmNwdS0+Z3Vlc3RfZnhfaW1hZ2UpOworCWZ4X3Jlc3RvcmUodmNwdS0+aG9zdF9meF9pbWFnZSk7CisJdmNwdS0+aW50ZXJydXB0X3dpbmRvd19vcGVuID0gKHZtY3NfcmVhZDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTykgJiAzKSA9PSAwOworCisjaWZuZGVmIENPTkZJR19YODZfNjQKKwlhc20gKCJtb3YgJTAsICUlZHM7IG1vdiAlMCwgJSVlcyIgOiA6ICJyIihfX1VTRVJfRFMpKTsKKyNlbmRpZgorCisJLyoKKwkgKiBQcm9maWxlIEtWTSBleGl0IFJJUHM6CisJICovCisJaWYgKHVubGlrZWx5KHByb2Zfb24gPT0gS1ZNX1BST0ZJTElORykpCisJCXByb2ZpbGVfaGl0KEtWTV9QUk9GSUxJTkcsICh2b2lkICopdm1jc19yZWFkbChHVUVTVF9SSVApKTsKKworCWt2bV9ydW4tPmV4aXRfdHlwZSA9IDA7CisJaWYgKGZhaWwpIHsKKwkJa3ZtX3J1bi0+ZXhpdF90eXBlID0gS1ZNX0VYSVRfVFlQRV9GQUlMX0VOVFJZOworCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IHZtY3NfcmVhZDMyKFZNX0lOU1RSVUNUSU9OX0VSUk9SKTsKKwkJciA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKGZzX2dzX2xkdF9yZWxvYWRfbmVlZGVkKSB7CisJCQlsb2FkX2xkdChsZHRfc2VsKTsKKwkJCWxvYWRfZnMoZnNfc2VsKTsKKwkJCS8qCisJCQkgKiBJZiB3ZSBoYXZlIHRvIHJlbG9hZCBncywgd2UgbXVzdCB0YWtlIGNhcmUgdG8KKwkJCSAqIHByZXNlcnZlIG91ciBncyBiYXNlLgorCQkJICovCisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQkJbG9hZF9ncyhnc19zZWwpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCXdybXNybChNU1JfR1NfQkFTRSwgdm1jc19yZWFkbChIT1NUX0dTX0JBU0UpKTsKKyNlbmRpZgorCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCQlyZWxvYWRfdHNzKCk7CisJCX0KKwkJdmNwdS0+bGF1bmNoZWQgPSAxOworCQlrdm1fcnVuLT5leGl0X3R5cGUgPSBLVk1fRVhJVF9UWVBFX1ZNX0VYSVQ7CisJCXIgPSBrdm1faGFuZGxlX2V4aXQoa3ZtX3J1biwgdmNwdSk7CisJCWlmIChyID4gMCkgeworCQkJLyogR2l2ZSBzY2hlZHVsZXIgYSBjaGFuZ2UgdG8gcmVzY2hlZHVsZS4gKi8KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCSsra3ZtX3N0YXQuc2lnbmFsX2V4aXRzOworCQkJCXBvc3Rfa3ZtX3J1bl9zYXZlKHZjcHUsIGt2bV9ydW4pOworCQkJCXJldHVybiAtRUlOVFI7CisJCQl9CisKKwkJCWlmIChkbV9yZXF1ZXN0X2Zvcl9pcnFfaW5qZWN0aW9uKHZjcHUsIGt2bV9ydW4pKSB7CisJCQkJKytrdm1fc3RhdC5yZXF1ZXN0X2lycV9leGl0czsKKwkJCQlwb3N0X2t2bV9ydW5fc2F2ZSh2Y3B1LCBrdm1fcnVuKTsKKwkJCQlyZXR1cm4gLUVJTlRSOworCQkJfQorCisJCQlrdm1fcmVzY2hlZCh2Y3B1KTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwl9CisKKwlwb3N0X2t2bV9ydW5fc2F2ZSh2Y3B1LCBrdm1fcnVuKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgdm14X2ZsdXNoX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdm1jc193cml0ZWwoR1VFU1RfQ1IzLCB2bWNzX3JlYWRsKEdVRVNUX0NSMykpOworfQorCitzdGF0aWMgdm9pZCB2bXhfaW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgdTMyIGVycl9jb2RlKQoreworCXUzMiB2ZWN0X2luZm8gPSB2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0lORk9fRklFTEQpOworCisJKytrdm1fc3RhdC5wZl9ndWVzdDsKKworCWlmIChpc19wYWdlX2ZhdWx0KHZlY3RfaW5mbykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImluamVjdF9wYWdlX2ZhdWx0OiAiCisJCSAgICAgICAiZG91YmxlIGZhdWx0IDB4JWx4IEAgMHglbHhcbiIsCisJCSAgICAgICBhZGRyLCB2bWNzX3JlYWRsKEdVRVNUX1JJUCkpOworCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfRVhDRVBUSU9OX0VSUk9SX0NPREUsIDApOworCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAorCQkJICAgICBERl9WRUNUT1IgfAorCQkJICAgICBJTlRSX1RZUEVfRVhDRVBUSU9OIHwKKwkJCSAgICAgSU5UUl9JTkZPX0RFTElFVkVSX0NPREVfTUFTSyB8CisJCQkgICAgIElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwkJcmV0dXJuOworCX0KKwl2Y3B1LT5jcjIgPSBhZGRyOworCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9FWENFUFRJT05fRVJST1JfQ09ERSwgZXJyX2NvZGUpOworCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsCisJCSAgICAgUEZfVkVDVE9SIHwKKwkJICAgICBJTlRSX1RZUEVfRVhDRVBUSU9OIHwKKwkJICAgICBJTlRSX0lORk9fREVMSUVWRVJfQ09ERV9NQVNLIHwKKwkJICAgICBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisKK30KKworc3RhdGljIHZvaWQgdm14X2ZyZWVfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKHZjcHUtPnZtY3MpIHsKKwkJb25fZWFjaF9jcHUoX192Y3B1X2NsZWFyLCB2Y3B1LCAwLCAxKTsKKwkJZnJlZV92bWNzKHZjcHUtPnZtY3MpOworCQl2Y3B1LT52bWNzID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZteF9mcmVlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZteF9mcmVlX3ZtY3ModmNwdSk7Cit9CisKK3N0YXRpYyBpbnQgdm14X2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qgdm1jcyAqdm1jczsKKworCXZjcHUtPmd1ZXN0X21zcnMgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2Y3B1LT5ndWVzdF9tc3JzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXZjcHUtPmhvc3RfbXNycyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjcHUtPmhvc3RfbXNycykKKwkJZ290byBvdXRfZnJlZV9ndWVzdF9tc3JzOworCisJdm1jcyA9IGFsbG9jX3ZtY3MoKTsKKwlpZiAoIXZtY3MpCisJCWdvdG8gb3V0X2ZyZWVfbXNyczsKKworCXZtY3NfY2xlYXIodm1jcyk7CisJdmNwdS0+dm1jcyA9IHZtY3M7CisJdmNwdS0+bGF1bmNoZWQgPSAwOworCisJcmV0dXJuIDA7CisKK291dF9mcmVlX21zcnM6CisJa2ZyZWUodmNwdS0+aG9zdF9tc3JzKTsKKwl2Y3B1LT5ob3N0X21zcnMgPSBOVUxMOworCitvdXRfZnJlZV9ndWVzdF9tc3JzOgorCWtmcmVlKHZjcHUtPmd1ZXN0X21zcnMpOworCXZjcHUtPmd1ZXN0X21zcnMgPSBOVUxMOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga3ZtX2FyY2hfb3BzIHZteF9hcmNoX29wcyA9IHsKKwkuY3B1X2hhc19rdm1fc3VwcG9ydCA9IGNwdV9oYXNfa3ZtX3N1cHBvcnQsCisJLmRpc2FibGVkX2J5X2Jpb3MgPSB2bXhfZGlzYWJsZWRfYnlfYmlvcywKKwkuaGFyZHdhcmVfc2V0dXAgPSBoYXJkd2FyZV9zZXR1cCwKKwkuaGFyZHdhcmVfdW5zZXR1cCA9IGhhcmR3YXJlX3Vuc2V0dXAsCisJLmhhcmR3YXJlX2VuYWJsZSA9IGhhcmR3YXJlX2VuYWJsZSwKKwkuaGFyZHdhcmVfZGlzYWJsZSA9IGhhcmR3YXJlX2Rpc2FibGUsCisKKwkudmNwdV9jcmVhdGUgPSB2bXhfY3JlYXRlX3ZjcHUsCisJLnZjcHVfZnJlZSA9IHZteF9mcmVlX3ZjcHUsCisKKwkudmNwdV9sb2FkID0gdm14X3ZjcHVfbG9hZCwKKwkudmNwdV9wdXQgPSB2bXhfdmNwdV9wdXQsCisKKwkuc2V0X2d1ZXN0X2RlYnVnID0gc2V0X2d1ZXN0X2RlYnVnLAorCS5nZXRfbXNyID0gdm14X2dldF9tc3IsCisJLnNldF9tc3IgPSB2bXhfc2V0X21zciwKKwkuZ2V0X3NlZ21lbnRfYmFzZSA9IHZteF9nZXRfc2VnbWVudF9iYXNlLAorCS5nZXRfc2VnbWVudCA9IHZteF9nZXRfc2VnbWVudCwKKwkuc2V0X3NlZ21lbnQgPSB2bXhfc2V0X3NlZ21lbnQsCisJLmdldF9jc19kYl9sX2JpdHMgPSB2bXhfZ2V0X2NzX2RiX2xfYml0cywKKwkuZGVjYWNoZV9jcjBfY3I0X2d1ZXN0X2JpdHMgPSB2bXhfZGVjYWNoZV9jcjBfY3I0X2d1ZXN0X2JpdHMsCisJLnNldF9jcjAgPSB2bXhfc2V0X2NyMCwKKwkuc2V0X2NyMF9ub19tb2Rlc3dpdGNoID0gdm14X3NldF9jcjBfbm9fbW9kZXN3aXRjaCwKKwkuc2V0X2NyMyA9IHZteF9zZXRfY3IzLAorCS5zZXRfY3I0ID0gdm14X3NldF9jcjQsCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS5zZXRfZWZlciA9IHZteF9zZXRfZWZlciwKKyNlbmRpZgorCS5nZXRfaWR0ID0gdm14X2dldF9pZHQsCisJLnNldF9pZHQgPSB2bXhfc2V0X2lkdCwKKwkuZ2V0X2dkdCA9IHZteF9nZXRfZ2R0LAorCS5zZXRfZ2R0ID0gdm14X3NldF9nZHQsCisJLmNhY2hlX3JlZ3MgPSB2Y3B1X2xvYWRfcnNwX3JpcCwKKwkuZGVjYWNoZV9yZWdzID0gdmNwdV9wdXRfcnNwX3JpcCwKKwkuZ2V0X3JmbGFncyA9IHZteF9nZXRfcmZsYWdzLAorCS5zZXRfcmZsYWdzID0gdm14X3NldF9yZmxhZ3MsCisKKwkudGxiX2ZsdXNoID0gdm14X2ZsdXNoX3RsYiwKKwkuaW5qZWN0X3BhZ2VfZmF1bHQgPSB2bXhfaW5qZWN0X3BhZ2VfZmF1bHQsCisKKwkuaW5qZWN0X2dwID0gdm14X2luamVjdF9ncCwKKworCS5ydW4gPSB2bXhfdmNwdV9ydW4sCisJLnNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24gPSBza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uLAorCS52Y3B1X3NldHVwID0gdm14X3ZjcHVfc2V0dXAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2bXhfaW5pdCh2b2lkKQoreworCXJldHVybiBrdm1faW5pdF9hcmNoKCZ2bXhfYXJjaF9vcHMsIFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZteF9leGl0KHZvaWQpCit7CisJa3ZtX2V4aXRfYXJjaCgpOworfQorCittb2R1bGVfaW5pdCh2bXhfaW5pdCkKK21vZHVsZV9leGl0KHZteF9leGl0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0vdm14LmggYi9kcml2ZXJzL2t2bS92bXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzBhYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9rdm0vdm14LmgKQEAgLTAsMCArMSwyOTYgQEAKKyNpZm5kZWYgVk1YX0gKKyNkZWZpbmUgVk1YX0gKKworLyoKKyAqIHZteC5oOiBWTVggQXJjaGl0ZWN0dXJlIHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyAqIENvcHlyaWdodCAoYykgMjAwNCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKKyAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIEEgZmV3IHJhbmRvbSBhZGRpdGlvbnMgYXJlOgorICogQ29weXJpZ2h0IChDKSAyMDA2IFF1bXJhbmV0CisgKiAgICBBdmkgS2l2aXR5IDxhdmlAcXVtcmFuZXQuY29tPgorICogICAgWWFuaXYgS2FtYXkgPHlhbml2QHF1bXJhbmV0LmNvbT4KKyAqCisgKi8KKworI2RlZmluZSBDUFVfQkFTRURfVklSVFVBTF9JTlRSX1BFTkRJTkcgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVX0JBU0VEX1VTRV9UU0NfT0ZGU0VUSU5HICAgICAweDAwMDAwMDA4CisjZGVmaW5lIENQVV9CQVNFRF9ITFRfRVhJVElORyAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBDUFVfQkFTRURfSU5WRFBHX0VYSVRJTkcgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ1BVX0JBU0VEX01XQUlUX0VYSVRJTkcgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENQVV9CQVNFRF9SRFBNQ19FWElUSU5HICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBDUFVfQkFTRURfUkRUU0NfRVhJVElORyAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ1BVX0JBU0VEX0NSOF9MT0FEX0VYSVRJTkcgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIENQVV9CQVNFRF9DUjhfU1RPUkVfRVhJVElORyAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBDUFVfQkFTRURfVFBSX1NIQURPVyAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BVX0JBU0VEX01PVl9EUl9FWElUSU5HICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENQVV9CQVNFRF9VTkNPTkRfSU9fRVhJVElORyAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBDUFVfQkFTRURfQUNUSVZBVEVfSU9fQklUTUFQICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ1BVX0JBU0VEX01TUl9CSVRNQVBTICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIENQVV9CQVNFRF9NT05JVE9SX0VYSVRJTkcgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBDUFVfQkFTRURfUEFVU0VfRVhJVElORyAgICAgICAgIDB4NDAwMDAwMDAKKworI2RlZmluZSBQSU5fQkFTRURfRVhUX0lOVFJfTUFTSyAweDEKKyNkZWZpbmUgUElOX0JBU0VEX05NSV9FWElUSU5HICAgMHg4CisKKyNkZWZpbmUgVk1fRVhJVF9BQ0tfSU5UUl9PTl9FWElUICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFZNX0VYSVRfSE9TVF9BRERfU1BBQ0VfU0laRSAgICAgMHgwMDAwMDIwMAorCisKKy8qIFZNQ1MgRW5jb2RpbmdzICovCitlbnVtIHZtY3NfZmllbGQgeworCUdVRVNUX0VTX1NFTEVDVE9SICAgICAgICAgICAgICAgPSAweDAwMDAwODAwLAorCUdVRVNUX0NTX1NFTEVDVE9SICAgICAgICAgICAgICAgPSAweDAwMDAwODAyLAorCUdVRVNUX1NTX1NFTEVDVE9SICAgICAgICAgICAgICAgPSAweDAwMDAwODA0LAorCUdVRVNUX0RTX1NFTEVDVE9SICAgICAgICAgICAgICAgPSAweDAwMDAwODA2LAorCUdVRVNUX0ZTX1NFTEVDVE9SICAgICAgICAgICAgICAgPSAweDAwMDAwODA4LAorCUdVRVNUX0dTX1NFTEVDVE9SICAgICAgICAgICAgICAgPSAweDAwMDAwODBhLAorCUdVRVNUX0xEVFJfU0VMRUNUT1IgICAgICAgICAgICAgPSAweDAwMDAwODBjLAorCUdVRVNUX1RSX1NFTEVDVE9SICAgICAgICAgICAgICAgPSAweDAwMDAwODBlLAorCUhPU1RfRVNfU0VMRUNUT1IgICAgICAgICAgICAgICAgPSAweDAwMDAwYzAwLAorCUhPU1RfQ1NfU0VMRUNUT1IgICAgICAgICAgICAgICAgPSAweDAwMDAwYzAyLAorCUhPU1RfU1NfU0VMRUNUT1IgICAgICAgICAgICAgICAgPSAweDAwMDAwYzA0LAorCUhPU1RfRFNfU0VMRUNUT1IgICAgICAgICAgICAgICAgPSAweDAwMDAwYzA2LAorCUhPU1RfRlNfU0VMRUNUT1IgICAgICAgICAgICAgICAgPSAweDAwMDAwYzA4LAorCUhPU1RfR1NfU0VMRUNUT1IgICAgICAgICAgICAgICAgPSAweDAwMDAwYzBhLAorCUhPU1RfVFJfU0VMRUNUT1IgICAgICAgICAgICAgICAgPSAweDAwMDAwYzBjLAorCUlPX0JJVE1BUF9BICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAyMDAwLAorCUlPX0JJVE1BUF9BX0hJR0ggICAgICAgICAgICAgICAgPSAweDAwMDAyMDAxLAorCUlPX0JJVE1BUF9CICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAyMDAyLAorCUlPX0JJVE1BUF9CX0hJR0ggICAgICAgICAgICAgICAgPSAweDAwMDAyMDAzLAorCU1TUl9CSVRNQVAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAyMDA0LAorCU1TUl9CSVRNQVBfSElHSCAgICAgICAgICAgICAgICAgPSAweDAwMDAyMDA1LAorCVZNX0VYSVRfTVNSX1NUT1JFX0FERFIgICAgICAgICAgPSAweDAwMDAyMDA2LAorCVZNX0VYSVRfTVNSX1NUT1JFX0FERFJfSElHSCAgICAgPSAweDAwMDAyMDA3LAorCVZNX0VYSVRfTVNSX0xPQURfQUREUiAgICAgICAgICAgPSAweDAwMDAyMDA4LAorCVZNX0VYSVRfTVNSX0xPQURfQUREUl9ISUdIICAgICAgPSAweDAwMDAyMDA5LAorCVZNX0VOVFJZX01TUl9MT0FEX0FERFIgICAgICAgICAgPSAweDAwMDAyMDBhLAorCVZNX0VOVFJZX01TUl9MT0FEX0FERFJfSElHSCAgICAgPSAweDAwMDAyMDBiLAorCVRTQ19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAyMDEwLAorCVRTQ19PRkZTRVRfSElHSCAgICAgICAgICAgICAgICAgPSAweDAwMDAyMDExLAorCVZJUlRVQUxfQVBJQ19QQUdFX0FERFIgICAgICAgICAgPSAweDAwMDAyMDEyLAorCVZJUlRVQUxfQVBJQ19QQUdFX0FERFJfSElHSCAgICAgPSAweDAwMDAyMDEzLAorCVZNQ1NfTElOS19QT0lOVEVSICAgICAgICAgICAgICAgPSAweDAwMDAyODAwLAorCVZNQ1NfTElOS19QT0lOVEVSX0hJR0ggICAgICAgICAgPSAweDAwMDAyODAxLAorCUdVRVNUX0lBMzJfREVCVUdDVEwgICAgICAgICAgICAgPSAweDAwMDAyODAyLAorCUdVRVNUX0lBMzJfREVCVUdDVExfSElHSCAgICAgICAgPSAweDAwMDAyODAzLAorCVBJTl9CQVNFRF9WTV9FWEVDX0NPTlRST0wgICAgICAgPSAweDAwMDA0MDAwLAorCUNQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wgICAgICAgPSAweDAwMDA0MDAyLAorCUVYQ0VQVElPTl9CSVRNQVAgICAgICAgICAgICAgICAgPSAweDAwMDA0MDA0LAorCVBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVNLICAgICAgPSAweDAwMDA0MDA2LAorCVBBR0VfRkFVTFRfRVJST1JfQ09ERV9NQVRDSCAgICAgPSAweDAwMDA0MDA4LAorCUNSM19UQVJHRVRfQ09VTlQgICAgICAgICAgICAgICAgPSAweDAwMDA0MDBhLAorCVZNX0VYSVRfQ09OVFJPTFMgICAgICAgICAgICAgICAgPSAweDAwMDA0MDBjLAorCVZNX0VYSVRfTVNSX1NUT1JFX0NPVU5UICAgICAgICAgPSAweDAwMDA0MDBlLAorCVZNX0VYSVRfTVNSX0xPQURfQ09VTlQgICAgICAgICAgPSAweDAwMDA0MDEwLAorCVZNX0VOVFJZX0NPTlRST0xTICAgICAgICAgICAgICAgPSAweDAwMDA0MDEyLAorCVZNX0VOVFJZX01TUl9MT0FEX0NPVU5UICAgICAgICAgPSAweDAwMDA0MDE0LAorCVZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCAgICAgICAgPSAweDAwMDA0MDE2LAorCVZNX0VOVFJZX0VYQ0VQVElPTl9FUlJPUl9DT0RFICAgPSAweDAwMDA0MDE4LAorCVZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiAgICAgICAgPSAweDAwMDA0MDFhLAorCVRQUl9USFJFU0hPTEQgICAgICAgICAgICAgICAgICAgPSAweDAwMDA0MDFjLAorCVNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wgICAgICAgPSAweDAwMDA0MDFlLAorCVZNX0lOU1RSVUNUSU9OX0VSUk9SICAgICAgICAgICAgPSAweDAwMDA0NDAwLAorCVZNX0VYSVRfUkVBU09OICAgICAgICAgICAgICAgICAgPSAweDAwMDA0NDAyLAorCVZNX0VYSVRfSU5UUl9JTkZPICAgICAgICAgICAgICAgPSAweDAwMDA0NDA0LAorCVZNX0VYSVRfSU5UUl9FUlJPUl9DT0RFICAgICAgICAgPSAweDAwMDA0NDA2LAorCUlEVF9WRUNUT1JJTkdfSU5GT19GSUVMRCAgICAgICAgPSAweDAwMDA0NDA4LAorCUlEVF9WRUNUT1JJTkdfRVJST1JfQ09ERSAgICAgICAgPSAweDAwMDA0NDBhLAorCVZNX0VYSVRfSU5TVFJVQ1RJT05fTEVOICAgICAgICAgPSAweDAwMDA0NDBjLAorCVZNWF9JTlNUUlVDVElPTl9JTkZPICAgICAgICAgICAgPSAweDAwMDA0NDBlLAorCUdVRVNUX0VTX0xJTUlUICAgICAgICAgICAgICAgICAgPSAweDAwMDA0ODAwLAorCUdVRVNUX0NTX0xJTUlUICAgICAgICAgICAgICAgICAgPSAweDAwMDA0ODAyLAorCUdVRVNUX1NTX0xJTUlUICAgICAgICAgICAgICAgICAgPSAweDAwMDA0ODA0LAorCUdVRVNUX0RTX0xJTUlUICAgICAgICAgICAgICAgICAgPSAweDAwMDA0ODA2LAorCUdVRVNUX0ZTX0xJTUlUICAgICAgICAgICAgICAgICAgPSAweDAwMDA0ODA4LAorCUdVRVNUX0dTX0xJTUlUICAgICAgICAgICAgICAgICAgPSAweDAwMDA0ODBhLAorCUdVRVNUX0xEVFJfTElNSVQgICAgICAgICAgICAgICAgPSAweDAwMDA0ODBjLAorCUdVRVNUX1RSX0xJTUlUICAgICAgICAgICAgICAgICAgPSAweDAwMDA0ODBlLAorCUdVRVNUX0dEVFJfTElNSVQgICAgICAgICAgICAgICAgPSAweDAwMDA0ODEwLAorCUdVRVNUX0lEVFJfTElNSVQgICAgICAgICAgICAgICAgPSAweDAwMDA0ODEyLAorCUdVRVNUX0VTX0FSX0JZVEVTICAgICAgICAgICAgICAgPSAweDAwMDA0ODE0LAorCUdVRVNUX0NTX0FSX0JZVEVTICAgICAgICAgICAgICAgPSAweDAwMDA0ODE2LAorCUdVRVNUX1NTX0FSX0JZVEVTICAgICAgICAgICAgICAgPSAweDAwMDA0ODE4LAorCUdVRVNUX0RTX0FSX0JZVEVTICAgICAgICAgICAgICAgPSAweDAwMDA0ODFhLAorCUdVRVNUX0ZTX0FSX0JZVEVTICAgICAgICAgICAgICAgPSAweDAwMDA0ODFjLAorCUdVRVNUX0dTX0FSX0JZVEVTICAgICAgICAgICAgICAgPSAweDAwMDA0ODFlLAorCUdVRVNUX0xEVFJfQVJfQllURVMgICAgICAgICAgICAgPSAweDAwMDA0ODIwLAorCUdVRVNUX1RSX0FSX0JZVEVTICAgICAgICAgICAgICAgPSAweDAwMDA0ODIyLAorCUdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTyAgICAgPSAweDAwMDA0ODI0LAorCUdVRVNUX0FDVElWSVRZX1NUQVRFICAgICAgICAgICAgPSAwWDAwMDA0ODI2LAorCUdVRVNUX1NZU0VOVEVSX0NTICAgICAgICAgICAgICAgPSAweDAwMDA0ODJBLAorCUhPU1RfSUEzMl9TWVNFTlRFUl9DUyAgICAgICAgICAgPSAweDAwMDA0YzAwLAorCUNSMF9HVUVTVF9IT1NUX01BU0sgICAgICAgICAgICAgPSAweDAwMDA2MDAwLAorCUNSNF9HVUVTVF9IT1NUX01BU0sgICAgICAgICAgICAgPSAweDAwMDA2MDAyLAorCUNSMF9SRUFEX1NIQURPVyAgICAgICAgICAgICAgICAgPSAweDAwMDA2MDA0LAorCUNSNF9SRUFEX1NIQURPVyAgICAgICAgICAgICAgICAgPSAweDAwMDA2MDA2LAorCUNSM19UQVJHRVRfVkFMVUUwICAgICAgICAgICAgICAgPSAweDAwMDA2MDA4LAorCUNSM19UQVJHRVRfVkFMVUUxICAgICAgICAgICAgICAgPSAweDAwMDA2MDBhLAorCUNSM19UQVJHRVRfVkFMVUUyICAgICAgICAgICAgICAgPSAweDAwMDA2MDBjLAorCUNSM19UQVJHRVRfVkFMVUUzICAgICAgICAgICAgICAgPSAweDAwMDA2MDBlLAorCUVYSVRfUVVBTElGSUNBVElPTiAgICAgICAgICAgICAgPSAweDAwMDA2NDAwLAorCUdVRVNUX0xJTkVBUl9BRERSRVNTICAgICAgICAgICAgPSAweDAwMDA2NDBhLAorCUdVRVNUX0NSMCAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODAwLAorCUdVRVNUX0NSMyAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODAyLAorCUdVRVNUX0NSNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODA0LAorCUdVRVNUX0VTX0JBU0UgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODA2LAorCUdVRVNUX0NTX0JBU0UgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODA4LAorCUdVRVNUX1NTX0JBU0UgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODBhLAorCUdVRVNUX0RTX0JBU0UgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODBjLAorCUdVRVNUX0ZTX0JBU0UgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODBlLAorCUdVRVNUX0dTX0JBU0UgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODEwLAorCUdVRVNUX0xEVFJfQkFTRSAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODEyLAorCUdVRVNUX1RSX0JBU0UgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODE0LAorCUdVRVNUX0dEVFJfQkFTRSAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODE2LAorCUdVRVNUX0lEVFJfQkFTRSAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODE4LAorCUdVRVNUX0RSNyAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODFhLAorCUdVRVNUX1JTUCAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODFjLAorCUdVRVNUX1JJUCAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODFlLAorCUdVRVNUX1JGTEFHUyAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2ODIwLAorCUdVRVNUX1BFTkRJTkdfREJHX0VYQ0VQVElPTlMgICAgPSAweDAwMDA2ODIyLAorCUdVRVNUX1NZU0VOVEVSX0VTUCAgICAgICAgICAgICAgPSAweDAwMDA2ODI0LAorCUdVRVNUX1NZU0VOVEVSX0VJUCAgICAgICAgICAgICAgPSAweDAwMDA2ODI2LAorCUhPU1RfQ1IwICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2YzAwLAorCUhPU1RfQ1IzICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2YzAyLAorCUhPU1RfQ1I0ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2YzA0LAorCUhPU1RfRlNfQkFTRSAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2YzA2LAorCUhPU1RfR1NfQkFTRSAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2YzA4LAorCUhPU1RfVFJfQkFTRSAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2YzBhLAorCUhPU1RfR0RUUl9CQVNFICAgICAgICAgICAgICAgICAgPSAweDAwMDA2YzBjLAorCUhPU1RfSURUUl9CQVNFICAgICAgICAgICAgICAgICAgPSAweDAwMDA2YzBlLAorCUhPU1RfSUEzMl9TWVNFTlRFUl9FU1AgICAgICAgICAgPSAweDAwMDA2YzEwLAorCUhPU1RfSUEzMl9TWVNFTlRFUl9FSVAgICAgICAgICAgPSAweDAwMDA2YzEyLAorCUhPU1RfUlNQICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2YzE0LAorCUhPU1RfUklQICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA2YzE2LAorfTsKKworI2RlZmluZSBWTVhfRVhJVF9SRUFTT05TX0ZBSUxFRF9WTUVOVFJZICAgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUkgICAgICAgMAorI2RlZmluZSBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQgIDEKKworI2RlZmluZSBFWElUX1JFQVNPTl9QRU5ESU5HX0lOVEVSUlVQVCAgIDcKKworI2RlZmluZSBFWElUX1JFQVNPTl9UQVNLX1NXSVRDSCAgICAgICAgIDkKKyNkZWZpbmUgRVhJVF9SRUFTT05fQ1BVSUQgICAgICAgICAgICAgICAxMAorI2RlZmluZSBFWElUX1JFQVNPTl9ITFQgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEVYSVRfUkVBU09OX0lOVkxQRyAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgRVhJVF9SRUFTT05fUkRQTUMgICAgICAgICAgICAgICAxNQorI2RlZmluZSBFWElUX1JFQVNPTl9SRFRTQyAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEVYSVRfUkVBU09OX1ZNQ0FMTCAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgRVhJVF9SRUFTT05fVk1DTEVBUiAgICAgICAgICAgICAxOQorI2RlZmluZSBFWElUX1JFQVNPTl9WTUxBVU5DSCAgICAgICAgICAgIDIwCisjZGVmaW5lIEVYSVRfUkVBU09OX1ZNUFRSTEQgICAgICAgICAgICAgMjEKKyNkZWZpbmUgRVhJVF9SRUFTT05fVk1QVFJTVCAgICAgICAgICAgICAyMgorI2RlZmluZSBFWElUX1JFQVNPTl9WTVJFQUQgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEVYSVRfUkVBU09OX1ZNUkVTVU1FICAgICAgICAgICAgMjQKKyNkZWZpbmUgRVhJVF9SRUFTT05fVk1XUklURSAgICAgICAgICAgICAyNQorI2RlZmluZSBFWElUX1JFQVNPTl9WTU9GRiAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIEVYSVRfUkVBU09OX1ZNT04gICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgRVhJVF9SRUFTT05fQ1JfQUNDRVNTICAgICAgICAgICAyOAorI2RlZmluZSBFWElUX1JFQVNPTl9EUl9BQ0NFU1MgICAgICAgICAgIDI5CisjZGVmaW5lIEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OICAgICAgMzAKKyNkZWZpbmUgRVhJVF9SRUFTT05fTVNSX1JFQUQgICAgICAgICAgICAzMQorI2RlZmluZSBFWElUX1JFQVNPTl9NU1JfV1JJVEUgICAgICAgICAgIDMyCisjZGVmaW5lIEVYSVRfUkVBU09OX01XQUlUX0lOU1RSVUNUSU9OICAgMzYKKworLyoKKyAqIEludGVycnVwdGlvbi1pbmZvcm1hdGlvbiBmb3JtYXQKKyAqLworI2RlZmluZSBJTlRSX0lORk9fVkVDVE9SX01BU0sgICAgICAgICAgIDB4ZmYgICAgICAgICAgICAvKiA3OjAgKi8KKyNkZWZpbmUgSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLICAgICAgICAweDcwMCAgICAgICAgICAgLyogMTA6OCAqLworI2RlZmluZSBJTlRSX0lORk9fREVMSUVWRVJfQ09ERV9NQVNLICAgIDB4ODAwICAgICAgICAgICAvKiAxMSAqLworI2RlZmluZSBJTlRSX0lORk9fVkFMSURfTUFTSyAgICAgICAgICAgIDB4ODAwMDAwMDAgICAgICAvKiAzMSAqLworCisjZGVmaW5lIFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLICAgICAgICAgICAJSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLCisjZGVmaW5lIFZFQ1RPUklOR19JTkZPX1RZUEVfTUFTSyAgICAgICAgCUlOVFJfSU5GT19JTlRSX1RZUEVfTUFTSworI2RlZmluZSBWRUNUT1JJTkdfSU5GT19ERUxJRVZFUl9DT0RFX01BU0sgICAgCUlOVFJfSU5GT19ERUxJRVZFUl9DT0RFX01BU0sKKyNkZWZpbmUgVkVDVE9SSU5HX0lORk9fVkFMSURfTUFTSyAgICAgICAJSU5UUl9JTkZPX1ZBTElEX01BU0sKKworI2RlZmluZSBJTlRSX1RZUEVfRVhUX0lOVFIgICAgICAgICAgICAgICgwIDw8IDgpIC8qIGV4dGVybmFsIGludGVycnVwdCAqLworI2RlZmluZSBJTlRSX1RZUEVfRVhDRVBUSU9OICAgICAgICAgICAgICgzIDw8IDgpIC8qIHByb2Nlc3NvciBleGNlcHRpb24gKi8KKworLyoKKyAqIEV4aXQgUXVhbGlmaWNhdGlvbnMgZm9yIE1PViBmb3IgQ29udHJvbCBSZWdpc3RlciBBY2Nlc3MKKyAqLworI2RlZmluZSBDT05UUk9MX1JFR19BQ0NFU1NfTlVNICAgICAgICAgIDB4NyAgICAgLyogMjowLCBudW1iZXIgb2YgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDT05UUk9MX1JFR19BQ0NFU1NfVFlQRSAgICAgICAgIDB4MzAgICAgLyogNTo0LCBhY2Nlc3MgdHlwZSAqLworI2RlZmluZSBDT05UUk9MX1JFR19BQ0NFU1NfUkVHICAgICAgICAgIDB4ZjAwICAgLyogMTA6OCwgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyICovCisjZGVmaW5lIExNU1dfU09VUkNFX0RBVEFfU0hJRlQgMTYKKyNkZWZpbmUgTE1TV19TT1VSQ0VfREFUQSAgKDB4RkZGRiA8PCBMTVNXX1NPVVJDRV9EQVRBX1NISUZUKSAvKiAxNjozMSBsbXN3IHNvdXJjZSAqLworI2RlZmluZSBSRUdfRUFYICAgICAgICAgICAgICAgICAgICAgICAgICgwIDw8IDgpCisjZGVmaW5lIFJFR19FQ1ggICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgUkVHX0VEWCAgICAgICAgICAgICAgICAgICAgICAgICAoMiA8PCA4KQorI2RlZmluZSBSRUdfRUJYICAgICAgICAgICAgICAgICAgICAgICAgICgzIDw8IDgpCisjZGVmaW5lIFJFR19FU1AgICAgICAgICAgICAgICAgICAgICAgICAgKDQgPDwgOCkKKyNkZWZpbmUgUkVHX0VCUCAgICAgICAgICAgICAgICAgICAgICAgICAoNSA8PCA4KQorI2RlZmluZSBSRUdfRVNJICAgICAgICAgICAgICAgICAgICAgICAgICg2IDw8IDgpCisjZGVmaW5lIFJFR19FREkgICAgICAgICAgICAgICAgICAgICAgICAgKDcgPDwgOCkKKyNkZWZpbmUgUkVHX1I4ICAgICAgICAgICAgICAgICAgICAgICAgICg4IDw8IDgpCisjZGVmaW5lIFJFR19SOSAgICAgICAgICAgICAgICAgICAgICAgICAoOSA8PCA4KQorI2RlZmluZSBSRUdfUjEwICAgICAgICAgICAgICAgICAgICAgICAgKDEwIDw8IDgpCisjZGVmaW5lIFJFR19SMTEgICAgICAgICAgICAgICAgICAgICAgICAoMTEgPDwgOCkKKyNkZWZpbmUgUkVHX1IxMiAgICAgICAgICAgICAgICAgICAgICAgICgxMiA8PCA4KQorI2RlZmluZSBSRUdfUjEzICAgICAgICAgICAgICAgICAgICAgICAgKDEzIDw8IDgpCisjZGVmaW5lIFJFR19SMTQgICAgICAgICAgICAgICAgICAgICAgICAoMTQgPDwgOCkKKyNkZWZpbmUgUkVHX1IxNSAgICAgICAgICAgICAgICAgICAgICAgICgxNSA8PCA4KQorCisvKgorICogRXhpdCBRdWFsaWZpY2F0aW9ucyBmb3IgTU9WIGZvciBEZWJ1ZyBSZWdpc3RlciBBY2Nlc3MKKyAqLworI2RlZmluZSBERUJVR19SRUdfQUNDRVNTX05VTSAgICAgICAgICAgIDB4NyAgICAgLyogMjowLCBudW1iZXIgb2YgZGVidWcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgREVCVUdfUkVHX0FDQ0VTU19UWVBFICAgICAgICAgICAweDEwICAgIC8qIDQsIGRpcmVjdGlvbiBvZiBhY2Nlc3MgKi8KKyNkZWZpbmUgVFlQRV9NT1ZfVE9fRFIgICAgICAgICAgICAgICAgICAoMCA8PCA0KQorI2RlZmluZSBUWVBFX01PVl9GUk9NX0RSICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIERFQlVHX1JFR19BQ0NFU1NfUkVHICAgICAgICAgICAgMHhmMDAgICAvKiAxMTo4LCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIgKi8KKworCisvKiBzZWdtZW50IEFSICovCisjZGVmaW5lIFNFR01FTlRfQVJfTF9NQVNLICgxIDw8IDEzKQorCisvKiBlbnRyeSBjb250cm9scyAqLworI2RlZmluZSBWTV9FTlRSWV9DT05UUk9MU19JQTMyRV9NQVNLICgxIDw8IDkpCisKKyNkZWZpbmUgQVJfVFlQRV9BQ0NFU1NFU19NQVNLIDEKKyNkZWZpbmUgQVJfVFlQRV9SRUFEQUJMRV9NQVNLICgxIDw8IDEpCisjZGVmaW5lIEFSX1RZUEVfV1JJVEVBQkxFX01BU0sgKDEgPDwgMikKKyNkZWZpbmUgQVJfVFlQRV9DT0RFX01BU0sgKDEgPDwgMykKKyNkZWZpbmUgQVJfVFlQRV9NQVNLIDB4MGYKKyNkZWZpbmUgQVJfVFlQRV9CVVNZXzY0X1RTUyAxMQorI2RlZmluZSBBUl9UWVBFX0JVU1lfMzJfVFNTIDExCisjZGVmaW5lIEFSX1RZUEVfQlVTWV8xNl9UU1MgMworI2RlZmluZSBBUl9UWVBFX0xEVCAyCisKKyNkZWZpbmUgQVJfVU5VU0FCTEVfTUFTSyAoMSA8PCAxNikKKyNkZWZpbmUgQVJfU19NQVNLICgxIDw8IDQpCisjZGVmaW5lIEFSX1BfTUFTSyAoMSA8PCA3KQorI2RlZmluZSBBUl9MX01BU0sgKDEgPDwgMTMpCisjZGVmaW5lIEFSX0RCX01BU0sgKDEgPDwgMTQpCisjZGVmaW5lIEFSX0dfTUFTSyAoMSA8PCAxNSkKKyNkZWZpbmUgQVJfRFBMX1NISUZUIDUKKyNkZWZpbmUgQVJfRFBMKGFyKSAoKChhcikgPj4gQVJfRFBMX1NISUZUKSAmIDMpCisKKyNkZWZpbmUgQVJfUkVTRVJWRF9NQVNLIDB4ZmZmZTBmMDAKKworI2RlZmluZSBDUjRfVk1YRSAweDIwMDAKKworI2RlZmluZSBNU1JfSUEzMl9WTVhfQkFTSUMgICAJCTB4NDgwCisjZGVmaW5lIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTCAJCTB4MDNhCisjZGVmaW5lIE1TUl9JQTMyX1ZNWF9QSU5CQVNFRF9DVExTCQkweDQ4MQorI2RlZmluZSBNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMJCTB4NDgyCisjZGVmaW5lIE1TUl9JQTMyX1ZNWF9FWElUX0NUTFMJCTB4NDgzCisjZGVmaW5lIE1TUl9JQTMyX1ZNWF9FTlRSWV9DVExTCQkweDQ4NAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMva3ZtL3g4Nl9lbXVsYXRlLmMgYi9kcml2ZXJzL2t2bS94ODZfZW11bGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MTNjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2t2bS94ODZfZW11bGF0ZS5jCkBAIC0wLDAgKzEsMTQxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogeDg2X2VtdWxhdGUuYworICoKKyAqIEdlbmVyaWMgeDg2ICgzMi1iaXQgYW5kIDY0LWJpdCkgaW5zdHJ1Y3Rpb24gZGVjb2RlciBhbmQgZW11bGF0b3IuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEtlaXIgRnJhc2VyCisgKgorICogTGludXggY29kaW5nIHN0eWxlLCBtb2Qgci9tIGRlY29kZXIsIHNlZ21lbnQgYmFzZSBmaXhlcywgcmVhbC1tb2RlCisgKiBwcml2aWVnZWQgaW5zdHJ1Y3Rpb25zOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBRdW1yYW5ldAorICoKKyAqICAgQXZpIEtpdml0eSA8YXZpQHF1bXJhbmV0LmNvbT4KKyAqICAgWWFuaXYgS2FtYXkgPHlhbml2QHF1bXJhbmV0LmNvbT4KKyAqCisgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIuICBTZWUKKyAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKgorICogRnJvbTogeGVuLXVuc3RhYmxlIDEwNjc2OmFmOTgwOWY1MWY4MWEzYzQzZjI3NmYwMGM4MWE1MmVmNTU4YWZkYTQKKyAqLworCisjaWZuZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHB1YmxpYy94ZW4uaD4KKyNkZWZpbmUgRFBSSU5URihfZiwgX2EgLi4uKSBwcmludGYoIF9mICwgIyMgX2EgKQorI2Vsc2UKKyNpbmNsdWRlICJrdm0uaCIKKyNkZWZpbmUgRFBSSU5URih4Li4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorI2luY2x1ZGUgIng4Nl9lbXVsYXRlLmgiCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKy8qCisgKiBPcGNvZGUgZWZmZWN0aXZlLWFkZHJlc3MgZGVjb2RlIHRhYmxlcy4KKyAqIE5vdGUgdGhhdCB3ZSBvbmx5IGVtdWxhdGUgaW5zdHJ1Y3Rpb25zIHRoYXQgaGF2ZSBhdCBsZWFzdCBvbmUgbWVtb3J5CisgKiBvcGVyYW5kIChleGNsdWRpbmcgaW1wbGljaXQgc3RhY2sgcmVmZXJlbmNlcykuIFdlIGFzc3VtZSB0aGF0IHN0YWNrCisgKiByZWZlcmVuY2VzIGFuZCBpbnN0cnVjdGlvbiBmZXRjaGVzIHdpbGwgbmV2ZXIgb2NjdXIgaW4gc3BlY2lhbCBtZW1vcnkKKyAqIGFyZWFzIHRoYXQgcmVxdWlyZSBlbXVsYXRpb24uIFNvLCBmb3IgZXhhbXBsZSwgJ21vdiA8aW1tPiw8cmVnPicgbmVlZAorICogbm90IGJlIGhhbmRsZWQuCisgKi8KKworLyogT3BlcmFuZCBzaXplczogOC1iaXQgb3BlcmFuZHMgb3Igc3BlY2lmaWVkL292ZXJyaWRkZW4gc2l6ZS4gKi8KKyNkZWZpbmUgQnl0ZU9wICAgICAgKDE8PDApCS8qIDgtYml0IG9wZXJhbmRzLiAqLworLyogRGVzdGluYXRpb24gb3BlcmFuZCB0eXBlLiAqLworI2RlZmluZSBJbXBsaWNpdE9wcyAoMTw8MSkJLyogSW1wbGljaXQgaW4gb3Bjb2RlLiBObyBnZW5lcmljIGRlY29kZS4gKi8KKyNkZWZpbmUgRHN0UmVnICAgICAgKDI8PDEpCS8qIFJlZ2lzdGVyIG9wZXJhbmQuICovCisjZGVmaW5lIERzdE1lbSAgICAgICgzPDwxKQkvKiBNZW1vcnkgb3BlcmFuZC4gKi8KKyNkZWZpbmUgRHN0TWFzayAgICAgKDM8PDEpCisvKiBTb3VyY2Ugb3BlcmFuZCB0eXBlLiAqLworI2RlZmluZSBTcmNOb25lICAgICAoMDw8MykJLyogTm8gc291cmNlIG9wZXJhbmQuICovCisjZGVmaW5lIFNyY0ltcGxpY2l0ICgwPDwzKQkvKiBTb3VyY2Ugb3BlcmFuZCBpcyBpbXBsaWNpdCBpbiB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBTcmNSZWcgICAgICAoMTw8MykJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDMpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8MykJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCisjZGVmaW5lIFNyY01lbTMyICAgICg0PDwzKQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KKyNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDMpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8MykJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWFzayAgICAgKDc8PDMpCisvKiBHZW5lcmljIE1vZFJNIGRlY29kZS4gKi8KKyNkZWZpbmUgTW9kUk0gICAgICAgKDE8PDYpCisvKiBEZXN0aW5hdGlvbiBpcyBvbmx5IHdyaXR0ZW47IG5ldmVyIHJlYWQuICovCisjZGVmaW5lIE1vdiAgICAgICAgICgxPDw3KQorI2RlZmluZSBCaXRPcCAgICAgICAoMTw8OCkKKworc3RhdGljIHU4IG9wY29kZV90YWJsZVsyNTZdID0geworCS8qIDB4MDAgLSAweDA3ICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4MDggLSAweDBGICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4MTAgLSAweDE3ICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4MTggLSAweDFGICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4MjAgLSAweDI3ICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4MjggLSAweDJGICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4MzAgLSAweDM3ICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4MzggLSAweDNGICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4NDAgLSAweDRGICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweDUwIC0gMHg1RiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHg2MCAtIDB4NkYgKi8KKwkwLCAwLCAwLCBEc3RSZWcgfCBTcmNNZW0zMiB8IE1vZFJNIHwgTW92IC8qIG1vdnN4ZCAoeDg2LzY0KSAqLyAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweDcwIC0gMHg3RiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHg4MCAtIDB4ODcgKi8KKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCS8qIDB4ODggLSAweDhGICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBNb3YsIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTW92LAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKKwkwLCAwLCAwLCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0gfCBNb3YsCisJLyogMHg5MCAtIDB4OUYgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCS8qIDB4QTAgLSAweEE3ICovCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb3YsCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW92LCBEc3RNZW0gfCBTcmNSZWcgfCBNb3YsCisJQnl0ZU9wIHwgSW1wbGljaXRPcHMgfCBNb3YsIEltcGxpY2l0T3BzIHwgTW92LAorCUJ5dGVPcCB8IEltcGxpY2l0T3BzLCBJbXBsaWNpdE9wcywKKwkvKiAweEE4IC0gMHhBRiAqLworCTAsIDAsIEJ5dGVPcCB8IEltcGxpY2l0T3BzIHwgTW92LCBJbXBsaWNpdE9wcyB8IE1vdiwKKwlCeXRlT3AgfCBJbXBsaWNpdE9wcyB8IE1vdiwgSW1wbGljaXRPcHMgfCBNb3YsCisJQnl0ZU9wIHwgSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLAorCS8qIDB4QjAgLSAweEJGICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweEMwIC0gMHhDNyAqLworCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sIDAsIDAsCisJMCwgMCwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBNb3YsCisJICAgIERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTW92LAorCS8qIDB4QzggLSAweENGICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweEQwIC0gMHhENyAqLworCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltcGxpY2l0IHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltcGxpY2l0IHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4RDggLSAweERGICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweEUwIC0gMHhFRiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHhGMCAtIDB4RjcgKi8KKwkwLCAwLCAwLCAwLAorCTAsIDAsIEJ5dGVPcCB8IERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLAorCS8qIDB4RjggLSAweEZGICovCisJMCwgMCwgMCwgMCwKKwkwLCAwLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTQorfTsKKworc3RhdGljIHUxNiB0d29ieXRlX3RhYmxlWzI1Nl0gPSB7CisJLyogMHgwMCAtIDB4MEYgKi8KKwkwLCBTcmNNZW0gfCBNb2RSTSB8IERzdFJlZywgMCwgMCwgMCwgMCwgSW1wbGljaXRPcHMsIDAsCisJMCwgMCwgMCwgMCwgMCwgSW1wbGljaXRPcHMgfCBNb2RSTSwgMCwgMCwKKwkvKiAweDEwIC0gMHgxRiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIEltcGxpY2l0T3BzIHwgTW9kUk0sIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHgyMCAtIDB4MkYgKi8KKwlNb2RSTSB8IEltcGxpY2l0T3BzLCBNb2RSTSwgTW9kUk0gfCBJbXBsaWNpdE9wcywgTW9kUk0sIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweDMwIC0gMHgzRiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHg0MCAtIDB4NDcgKi8KKwlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAorCURzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJLyogMHg0OCAtIDB4NEYgKi8KKwlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAorCURzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJLyogMHg1MCAtIDB4NUYgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCS8qIDB4NjAgLSAweDZGICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweDcwIC0gMHg3RiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHg4MCAtIDB4OEYgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCS8qIDB4OTAgLSAweDlGICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweEEwIC0gMHhBNyAqLworCTAsIDAsIDAsIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3AsIDAsIDAsIDAsIDAsCisJLyogMHhBOCAtIDB4QUYgKi8KKwkwLCAwLCAwLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IEJpdE9wLCAwLCAwLCAwLCAwLAorCS8qIDB4QjAgLSAweEI3ICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCAwLAorCSAgICBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IEJpdE9wLAorCTAsIDAsIEJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAorCSAgICBEc3RSZWcgfCBTcmNNZW0xNiB8IE1vZFJNIHwgTW92LAorCS8qIDB4QjggLSAweEJGICovCisJMCwgMCwgRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IEJpdE9wLAorCTAsIDAsIEJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAorCSAgICBEc3RSZWcgfCBTcmNNZW0xNiB8IE1vZFJNIHwgTW92LAorCS8qIDB4QzAgLSAweENGICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgSW1wbGljaXRPcHMgfCBNb2RSTSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweEQwIC0gMHhERiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHhFMCAtIDB4RUYgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCS8qIDB4RjAgLSAweEZGICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorfTsKKworLyoKKyAqIFRlbGwgdGhlIGVtdWxhdG9yIHRoYXQgb2YgdGhlIEdyb3VwIDcgaW5zdHJ1Y3Rpb25zIChzZ2R0LCBsaWR0LCBldGMuKSB3ZQorICogYXJlIGludGVyZXN0ZWQgb25seSBpbiBpbnZscGcgYW5kIG5vdCBpbiBhbnkgb2YgdGhlIHJlc3QuCisgKgorICogaW52bHBnIGlzIGEgc3BlY2lhbCBpbnN0cnVjdGlvbiBpbiB0aGF0IHRoZSBkYXRhIGl0IHJlZmVyZW5jZXMgbWF5IG5vdAorICogYmUgbWFwcGVkLgorICovCit2b2lkIGt2bV9lbXVsYXRvcl93YW50X2dyb3VwN19pbnZscGcodm9pZCkKK3sKKwl0d29ieXRlX3RhYmxlWzFdICY9IH5TcmNNZW07Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fZW11bGF0b3Jfd2FudF9ncm91cDdfaW52bHBnKTsKKworLyogVHlwZSwgYWRkcmVzcy1vZiwgYW5kIHZhbHVlIG9mIGFuIGluc3RydWN0aW9uJ3Mgb3BlcmFuZC4gKi8KK3N0cnVjdCBvcGVyYW5kIHsKKwllbnVtIHsgT1BfUkVHLCBPUF9NRU0sIE9QX0lNTSB9IHR5cGU7CisJdW5zaWduZWQgaW50IGJ5dGVzOworCXVuc2lnbmVkIGxvbmcgdmFsLCBvcmlnX3ZhbCwgKnB0cjsKK307CisKKy8qIEVGTEFHUyBiaXQgZGVmaW5pdGlvbnMuICovCisjZGVmaW5lIEVGTEdfT0YgKDE8PDExKQorI2RlZmluZSBFRkxHX0RGICgxPDwxMCkKKyNkZWZpbmUgRUZMR19TRiAoMTw8NykKKyNkZWZpbmUgRUZMR19aRiAoMTw8NikKKyNkZWZpbmUgRUZMR19BRiAoMTw8NCkKKyNkZWZpbmUgRUZMR19QRiAoMTw8MikKKyNkZWZpbmUgRUZMR19DRiAoMTw8MCkKKworLyoKKyAqIEluc3RydWN0aW9uIGVtdWxhdGlvbjoKKyAqIE1vc3QgaW5zdHJ1Y3Rpb25zIGFyZSBlbXVsYXRlZCBkaXJlY3RseSB2aWEgYSBmcmFnbWVudCBvZiBpbmxpbmUgYXNzZW1ibHkKKyAqIGNvZGUuIFRoaXMgYWxsb3dzIHVzIHRvIHNhdmUvcmVzdG9yZSBFRkxBR1MgYW5kIHRodXMgdmVyeSBlYXNpbHkgcGljayB1cAorICogYW55IG1vZGlmaWVkIGZsYWdzLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjZGVmaW5lIF9MTzMyICJrIgkJLyogZm9yY2UgMzItYml0IG9wZXJhbmQgKi8KKyNkZWZpbmUgX1NUSyAgIiUlcnNwIgkJLyogc3RhY2sgcG9pbnRlciAqLworI2VsaWYgZGVmaW5lZChfX2kzODZfXykKKyNkZWZpbmUgX0xPMzIgIiIJCS8qIGZvcmNlIDMyLWJpdCBvcGVyYW5kICovCisjZGVmaW5lIF9TVEsgICIlJWVzcCIJCS8qIHN0YWNrIHBvaW50ZXIgKi8KKyNlbmRpZgorCisvKgorICogVGhlc2UgRUZMQUdTIGJpdHMgYXJlIHJlc3RvcmVkIGZyb20gc2F2ZWQgdmFsdWUgZHVyaW5nIGVtdWxhdGlvbiwgYW5kCisgKiBhbnkgY2hhbmdlcyBhcmUgd3JpdHRlbiBiYWNrIHRvIHRoZSBzYXZlZCB2YWx1ZSBhZnRlciBlbXVsYXRpb24uCisgKi8KKyNkZWZpbmUgRUZMQUdTX01BU0sgKEVGTEdfT0Z8RUZMR19TRnxFRkxHX1pGfEVGTEdfQUZ8RUZMR19QRnxFRkxHX0NGKQorCisvKiBCZWZvcmUgZXhlY3V0aW5nIGluc3RydWN0aW9uOiByZXN0b3JlIG5lY2Vzc2FyeSBiaXRzIGluIEVGTEFHUy4gKi8KKyNkZWZpbmUgX1BSRV9FRkxBR1MoX3NhdiwgX21zaywgX3RtcCkgXAorCS8qIEVGTEFHUyA9IChfc2F2ICYgX21zaykgfCAoRUZMQUdTICYgfl9tc2spOyAqLwlcCisJInB1c2ggJSJfc2F2IjsgIgkJCQkJXAorCSJtb3ZsICUiX21zayIsJSJfTE8zMiBfdG1wIjsgIgkJCQlcCisJImFuZGwgJSJfTE8zMiBfdG1wIiwoIl9TVEsiKTsgIgkJCQlcCisJInB1c2hmOyAiCQkJCQkJXAorCSJub3RsICUiX0xPMzIgX3RtcCI7ICIJCQkJCVwKKwkiYW5kbCAlIl9MTzMyIF90bXAiLCgiX1NUSyIpOyAiCQkJCVwKKwkicG9wICAlIl90bXAiOyAiCQkJCQlcCisJIm9ybCAgJSJfTE8zMiBfdG1wIiwoIl9TVEsiKTsgIgkJCQlcCisJInBvcGY7ICIJCQkJCQlcCisJLyogX3NhdiAmPSB+bXNrOyAqLwkJCQkJXAorCSJtb3ZsICUiX21zayIsJSJfTE8zMiBfdG1wIjsgIgkJCQlcCisJIm5vdGwgJSJfTE8zMiBfdG1wIjsgIgkJCQkJXAorCSJhbmRsICUiX0xPMzIgX3RtcCIsJSJfc2F2IjsgIgorCisvKiBBZnRlciBleGVjdXRpbmcgaW5zdHJ1Y3Rpb246IHdyaXRlLWJhY2sgbmVjZXNzYXJ5IGJpdHMgaW4gRUZMQUdTLiAqLworI2RlZmluZSBfUE9TVF9FRkxBR1MoX3NhdiwgX21zaywgX3RtcCkgXAorCS8qIF9zYXYgfD0gRUZMQUdTICYgX21zazsgKi8JCVwKKwkicHVzaGY7ICIJCQkJXAorCSJwb3AgICUiX3RtcCI7ICIJCQlcCisJImFuZGwgJSJfbXNrIiwlIl9MTzMyIF90bXAiOyAiCQlcCisJIm9ybCAgJSJfTE8zMiBfdG1wIiwlIl9zYXYiOyAiCisKKy8qIFJhdyBlbXVsYXRpb246IGluc3RydWN0aW9uIGhhcyB0d28gZXhwbGljaXQgb3BlcmFuZHMuICovCisjZGVmaW5lIF9fZW11bGF0ZV8yb3Bfbm9ieXRlKF9vcCxfc3JjLF9kc3QsX2VmbGFncyxfd3gsX3d5LF9seCxfbHksX3F4LF9xeSkgXAorCWRvIHsgCQkJCQkJCQkgICAgXAorCQl1bnNpZ25lZCBsb25nIF90bXA7CQkJCQkgICAgXAorCQkJCQkJCQkJICAgIFwKKwkJc3dpdGNoICgoX2RzdCkuYnl0ZXMpIHsJCQkJCSAgICBcCisJCWNhc2UgMjoJCQkJCQkJICAgIFwKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJICAgIFwKKwkJCQlfUFJFX0VGTEFHUygiMCIsIjQiLCIyIikJCSAgICBcCisJCQkJX29wIncgJSJfd3giMywlMTsgIgkJCSAgICBcCisJCQkJX1BPU1RfRUZMQUdTKCIwIiwiNCIsIjIiKQkJICAgIFwKKwkJCQk6ICI9bSIgKF9lZmxhZ3MpLCAiPW0iICgoX2RzdCkudmFsKSwgICAgICAgIFwKKwkJCQkgICI9JnIiIChfdG1wKQkJCQkgICAgXAorCQkJCTogX3d5ICgoX3NyYykudmFsKSwgImkiIChFRkxBR1NfTUFTSykgKTsgICAgXAorCQkJYnJlYWs7CQkJCQkJICAgIFwKKwkJY2FzZSA0OgkJCQkJCQkgICAgXAorCQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkgICAgXAorCQkJCV9QUkVfRUZMQUdTKCIwIiwiNCIsIjIiKQkJICAgIFwKKwkJCQlfb3AibCAlIl9seCIzLCUxOyAiCQkJICAgIFwKKwkJCQlfUE9TVF9FRkxBR1MoIjAiLCI0IiwiMiIpCQkgICAgXAorCQkJCTogIj1tIiAoX2VmbGFncyksICI9bSIgKChfZHN0KS52YWwpLAkgICAgXAorCQkJCSAgIj0mciIgKF90bXApCQkJCSAgICBcCisJCQkJOiBfbHkgKChfc3JjKS52YWwpLCAiaSIgKEVGTEFHU19NQVNLKSApOyAgICBcCisJCQlicmVhazsJCQkJCQkgICAgXAorCQljYXNlIDg6CQkJCQkJCSAgICBcCisJCQlfX2VtdWxhdGVfMm9wXzhieXRlKF9vcCwgX3NyYywgX2RzdCwJCSAgICBcCisJCQkJCSAgICBfZWZsYWdzLCBfcXgsIF9xeSk7CQkgICAgXAorCQkJYnJlYWs7CQkJCQkJICAgIFwKKwkJfQkJCQkJCQkgICAgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19lbXVsYXRlXzJvcChfb3AsX3NyYyxfZHN0LF9lZmxhZ3MsX2J4LF9ieSxfd3gsX3d5LF9seCxfbHksX3F4LF9xeSkgXAorCWRvIHsJCQkJCQkJCSAgICAgXAorCQl1bnNpZ25lZCBsb25nIF90bXA7CQkJCQkgICAgIFwKKwkJc3dpdGNoICggKF9kc3QpLmJ5dGVzICkJCQkJCSAgICAgXAorCQl7CQkJCQkJCSAgICAgXAorCQljYXNlIDE6CQkJCQkJCSAgICAgXAorCQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkgICAgIFwKKwkJCQlfUFJFX0VGTEFHUygiMCIsIjQiLCIyIikJCSAgICAgXAorCQkJCV9vcCJiICUiX2J4IjMsJTE7ICIJCQkgICAgIFwKKwkJCQlfUE9TVF9FRkxBR1MoIjAiLCI0IiwiMiIpCQkgICAgIFwKKwkJCQk6ICI9bSIgKF9lZmxhZ3MpLCAiPW0iICgoX2RzdCkudmFsKSwJICAgICBcCisJCQkJICAiPSZyIiAoX3RtcCkJCQkJICAgICBcCisJCQkJOiBfYnkgKChfc3JjKS52YWwpLCAiaSIgKEVGTEFHU19NQVNLKSApOyAgICAgXAorCQkJYnJlYWs7CQkJCQkJICAgICBcCisJCWRlZmF1bHQ6CQkJCQkJICAgICBcCisJCQlfX2VtdWxhdGVfMm9wX25vYnl0ZShfb3AsIF9zcmMsIF9kc3QsIF9lZmxhZ3MsCSAgICAgXAorCQkJCQkgICAgIF93eCwgX3d5LCBfbHgsIF9seSwgX3F4LCBfcXkpOyAgXAorCQkJYnJlYWs7CQkJCQkJICAgICBcCisJCX0JCQkJCQkJICAgICBcCisJfSB3aGlsZSAoMCkKKworLyogU291cmNlIG9wZXJhbmQgaXMgYnl0ZS1zaXplZCBhbmQgbWF5IGJlIHJlc3RyaWN0ZWQgdG8ganVzdCAlY2wuICovCisjZGVmaW5lIGVtdWxhdGVfMm9wX1NyY0IoX29wLCBfc3JjLCBfZHN0LCBfZWZsYWdzKSAgICAgICAgICAgICAgICAgICAgICBcCisJX19lbXVsYXRlXzJvcChfb3AsIF9zcmMsIF9kc3QsIF9lZmxhZ3MsCQkJCVwKKwkJICAgICAgImIiLCAiYyIsICJiIiwgImMiLCAiYiIsICJjIiwgImIiLCAiYyIpCisKKy8qIFNvdXJjZSBvcGVyYW5kIGlzIGJ5dGUsIHdvcmQsIGxvbmcgb3IgcXVhZCBzaXplZC4gKi8KKyNkZWZpbmUgZW11bGF0ZV8yb3BfU3JjVihfb3AsIF9zcmMsIF9kc3QsIF9lZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX2VtdWxhdGVfMm9wKF9vcCwgX3NyYywgX2RzdCwgX2VmbGFncywJCQkJXAorCQkgICAgICAiYiIsICJxIiwgInciLCAiciIsIF9MTzMyLCAiciIsICIiLCAiciIpCisKKy8qIFNvdXJjZSBvcGVyYW5kIGlzIHdvcmQsIGxvbmcgb3IgcXVhZCBzaXplZC4gKi8KKyNkZWZpbmUgZW11bGF0ZV8yb3BfU3JjVl9ub2J5dGUoX29wLCBfc3JjLCBfZHN0LCBfZWZsYWdzKSAgICAgICAgICAgICAgIFwKKwlfX2VtdWxhdGVfMm9wX25vYnl0ZShfb3AsIF9zcmMsIF9kc3QsIF9lZmxhZ3MsCQkJXAorCQkJICAgICAidyIsICJyIiwgX0xPMzIsICJyIiwgIiIsICJyIikKKworLyogSW5zdHJ1Y3Rpb24gaGFzIG9ubHkgb25lIGV4cGxpY2l0IG9wZXJhbmQgKG5vIHNvdXJjZSBvcGVyYW5kKS4gKi8KKyNkZWZpbmUgZW11bGF0ZV8xb3AoX29wLCBfZHN0LCBfZWZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlkbyB7CQkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgX3RtcDsJCQkJCVwKKwkJCQkJCQkJCVwKKwkJc3dpdGNoICggKF9kc3QpLmJ5dGVzICkJCQkJCVwKKwkJewkJCQkJCQlcCisJCWNhc2UgMToJCQkJCQkJXAorCQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQlcCisJCQkJX1BSRV9FRkxBR1MoIjAiLCIzIiwiMiIpCQlcCisJCQkJX29wImIgJTE7ICIJCQkJXAorCQkJCV9QT1NUX0VGTEFHUygiMCIsIjMiLCIyIikJCVwKKwkJCQk6ICI9bSIgKF9lZmxhZ3MpLCAiPW0iICgoX2RzdCkudmFsKSwJXAorCQkJCSAgIj0mciIgKF90bXApCQkJCVwKKwkJCQk6ICJpIiAoRUZMQUdTX01BU0spICk7CQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQljYXNlIDI6CQkJCQkJCVwKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJXAorCQkJCV9QUkVfRUZMQUdTKCIwIiwiMyIsIjIiKQkJXAorCQkJCV9vcCJ3ICUxOyAiCQkJCVwKKwkJCQlfUE9TVF9FRkxBR1MoIjAiLCIzIiwiMiIpCQlcCisJCQkJOiAiPW0iIChfZWZsYWdzKSwgIj1tIiAoKF9kc3QpLnZhbCksCVwKKwkJCQkgICI9JnIiIChfdG1wKQkJCQlcCisJCQkJOiAiaSIgKEVGTEFHU19NQVNLKSApOwkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSA0OgkJCQkJCQlcCisJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCVwKKwkJCQlfUFJFX0VGTEFHUygiMCIsIjMiLCIyIikJCVwKKwkJCQlfb3AibCAlMTsgIgkJCQlcCisJCQkJX1BPU1RfRUZMQUdTKCIwIiwiMyIsIjIiKQkJXAorCQkJCTogIj1tIiAoX2VmbGFncyksICI9bSIgKChfZHN0KS52YWwpLAlcCisJCQkJICAiPSZyIiAoX3RtcCkJCQkJXAorCQkJCTogImkiIChFRkxBR1NfTUFTSykgKTsJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgODoJCQkJCQkJXAorCQkJX19lbXVsYXRlXzFvcF84Ynl0ZShfb3AsIF9kc3QsIF9lZmxhZ3MpOwlcCisJCQlicmVhazsJCQkJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKy8qIEVtdWxhdGUgYW4gaW5zdHJ1Y3Rpb24gd2l0aCBxdWFkd29yZCBvcGVyYW5kcyAoeDg2LzY0IG9ubHkpLiAqLworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKyNkZWZpbmUgX19lbXVsYXRlXzJvcF84Ynl0ZShfb3AsIF9zcmMsIF9kc3QsIF9lZmxhZ3MsIF9xeCwgX3F5KSAgICAgICAgICAgXAorCWRvIHsJCQkJCQkJCSAgXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkgIFwKKwkJCV9QUkVfRUZMQUdTKCIwIiwiNCIsIjIiKQkJCSAgXAorCQkJX29wInEgJSJfcXgiMywlMTsgIgkJCQkgIFwKKwkJCV9QT1NUX0VGTEFHUygiMCIsIjQiLCIyIikJCQkgIFwKKwkJCTogIj1tIiAoX2VmbGFncyksICI9bSIgKChfZHN0KS52YWwpLCAiPSZyIiAoX3RtcCkgXAorCQkJOiBfcXkgKChfc3JjKS52YWwpLCAiaSIgKEVGTEFHU19NQVNLKSApOwkgIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZW11bGF0ZV8xb3BfOGJ5dGUoX29wLCBfZHN0LCBfZWZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlkbyB7CQkJCQkJCQkgIFwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJICBcCisJCQlfUFJFX0VGTEFHUygiMCIsIjMiLCIyIikJCQkgIFwKKwkJCV9vcCJxICUxOyAiCQkJCQkgIFwKKwkJCV9QT1NUX0VGTEFHUygiMCIsIjMiLCIyIikJCQkgIFwKKwkJCTogIj1tIiAoX2VmbGFncyksICI9bSIgKChfZHN0KS52YWwpLCAiPSZyIiAoX3RtcCkgXAorCQkJOiAiaSIgKEVGTEFHU19NQVNLKSApOwkJCQkgIFwKKwl9IHdoaWxlICgwKQorCisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQorI2RlZmluZSBfX2VtdWxhdGVfMm9wXzhieXRlKF9vcCwgX3NyYywgX2RzdCwgX2VmbGFncywgX3F4LCBfcXkpCisjZGVmaW5lIF9fZW11bGF0ZV8xb3BfOGJ5dGUoX29wLCBfZHN0LCBfZWZsYWdzKQorI2VuZGlmCQkJCS8qIF9faTM4Nl9fICovCisKKy8qIEZldGNoIG5leHQgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gYmVpbmcgZW11bGF0ZWQuICovCisjZGVmaW5lIGluc25fZmV0Y2goX3R5cGUsIF9zaXplLCBfZWlwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoewl1bnNpZ25lZCBsb25nIF94OwkJCQkJCVwKKwlyYyA9IG9wcy0+cmVhZF9zdGQoKHVuc2lnbmVkIGxvbmcpKF9laXApICsgY3R4dC0+Y3NfYmFzZSwgJl94LAlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfc2l6ZSksIGN0eHQpOyAgICAgICBcCisJaWYgKCByYyAhPSAwICkJCQkJCQkJXAorCQlnb3RvIGRvbmU7CQkJCQkJXAorCShfZWlwKSArPSAoX3NpemUpOwkJCQkJCVwKKwkoX3R5cGUpX3g7CQkJCQkJCVwKK30pCisKKy8qIEFjY2Vzcy91cGRhdGUgYWRkcmVzcyBoZWxkIGluIGEgcmVnaXN0ZXIsIGJhc2VkIG9uIGFkZHJlc3NpbmcgbW9kZS4gKi8KKyNkZWZpbmUgcmVnaXN0ZXJfYWRkcmVzcyhiYXNlLCByZWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoKGJhc2UpICsgKChhZF9ieXRlcyA9PSBzaXplb2YodW5zaWduZWQgbG9uZykpID8gKHJlZykgOglcCisJCSAgICgocmVnKSAmICgoMVVMIDw8IChhZF9ieXRlcyA8PCAzKSkgLSAxKSkpKQorCisjZGVmaW5lIHJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KHJlZywgaW5jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8gewkJCQkJCQkJXAorCQkvKiBzaWduZWQgdHlwZSBlbnN1cmVzIHNpZ24gZXh0ZW5zaW9uIHRvIGxvbmcgKi8gICAgICAgIFwKKwkJaW50IF9pbmMgPSAoaW5jKTsJCQkJCVwKKwkJaWYgKCBhZF9ieXRlcyA9PSBzaXplb2YodW5zaWduZWQgbG9uZykgKQkJXAorCQkJKHJlZykgKz0gX2luYzsJCQkJCVwKKwkJZWxzZQkJCQkJCQlcCisJCQkocmVnKSA9ICgocmVnKSAmIH4oKDFVTCA8PCAoYWRfYnl0ZXMgPDwgMykpIC0gMSkpIHwgXAorCQkJICAgKCgocmVnKSArIF9pbmMpICYgKCgxVUwgPDwgKGFkX2J5dGVzIDw8IDMpKSAtIDEpKTsgXAorCX0gd2hpbGUgKDApCisKK3ZvaWQgKmRlY29kZV9yZWdpc3Rlcih1OCBtb2RybV9yZWcsIHVuc2lnbmVkIGxvbmcgKnJlZ3MsCisJCSAgICAgIGludCBoaWdoYnl0ZV9yZWdzKQoreworCXZvaWQgKnA7CisKKwlwID0gJnJlZ3NbbW9kcm1fcmVnXTsKKwlpZiAoaGlnaGJ5dGVfcmVncyAmJiBtb2RybV9yZWcgPj0gNCAmJiBtb2RybV9yZWcgPCA4KQorCQlwID0gKHVuc2lnbmVkIGNoYXIgKikmcmVnc1ttb2RybV9yZWcgJiAzXSArIDE7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9kZXNjcmlwdG9yKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAorCQkJICAgdm9pZCAqcHRyLAorCQkJICAgdTE2ICpzaXplLCB1bnNpZ25lZCBsb25nICphZGRyZXNzLCBpbnQgb3BfYnl0ZXMpCit7CisJaW50IHJjOworCisJaWYgKG9wX2J5dGVzID09IDIpCisJCW9wX2J5dGVzID0gMzsKKwkqYWRkcmVzcyA9IDA7CisJcmMgPSBvcHMtPnJlYWRfc3RkKCh1bnNpZ25lZCBsb25nKXB0ciwgKHVuc2lnbmVkIGxvbmcgKilzaXplLCAyLCBjdHh0KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IG9wcy0+cmVhZF9zdGQoKHVuc2lnbmVkIGxvbmcpcHRyICsgMiwgYWRkcmVzcywgb3BfYnl0ZXMsIGN0eHQpOworCXJldHVybiByYzsKK30KKworaW50Cit4ODZfZW11bGF0ZV9tZW1vcChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQoreworCXVuc2lnbmVkIGQ7CisJdTggYiwgc2liLCB0d29ieXRlID0gMCwgcmV4X3ByZWZpeCA9IDA7CisJdTggbW9kcm0sIG1vZHJtX21vZCA9IDAsIG1vZHJtX3JlZyA9IDAsIG1vZHJtX3JtID0gMDsKKwl1bnNpZ25lZCBsb25nICpvdmVycmlkZV9iYXNlID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgb3BfYnl0ZXMsIGFkX2J5dGVzLCBsb2NrX3ByZWZpeCA9IDAsIHJlcF9wcmVmaXggPSAwLCBpOworCWludCByYyA9IDA7CisJc3RydWN0IG9wZXJhbmQgc3JjLCBkc3Q7CisJdW5zaWduZWQgbG9uZyBjcjIgPSBjdHh0LT5jcjI7CisJaW50IG1vZGUgPSBjdHh0LT5tb2RlOworCXVuc2lnbmVkIGxvbmcgbW9kcm1fZWE7CisJaW50IHVzZV9tb2RybV9lYSwgaW5kZXhfcmVnID0gMCwgYmFzZV9yZWcgPSAwLCBzY2FsZSwgcmlwX3JlbGF0aXZlID0gMDsKKworCS8qIFNoYWRvdyBjb3B5IG9mIHJlZ2lzdGVyIHN0YXRlLiBDb21taXR0ZWQgb24gc3VjY2Vzc2Z1bCBlbXVsYXRpb24uICovCisJdW5zaWduZWQgbG9uZyBfcmVnc1tOUl9WQ1BVX1JFR1NdOworCXVuc2lnbmVkIGxvbmcgX2VpcCA9IGN0eHQtPnZjcHUtPnJpcCwgX2VmbGFncyA9IGN0eHQtPmVmbGFnczsKKwl1bnNpZ25lZCBsb25nIG1vZHJtX3ZhbCA9IDA7CisKKwltZW1jcHkoX3JlZ3MsIGN0eHQtPnZjcHUtPnJlZ3MsIHNpemVvZiBfcmVncyk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFg4NkVNVUxfTU9ERV9SRUFMOgorCWNhc2UgWDg2RU1VTF9NT0RFX1BST1QxNjoKKwkJb3BfYnl0ZXMgPSBhZF9ieXRlcyA9IDI7CisJCWJyZWFrOworCWNhc2UgWDg2RU1VTF9NT0RFX1BST1QzMjoKKwkJb3BfYnl0ZXMgPSBhZF9ieXRlcyA9IDQ7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19YODZfNjQKKwljYXNlIFg4NkVNVUxfTU9ERV9QUk9UNjQ6CisJCW9wX2J5dGVzID0gNDsKKwkJYWRfYnl0ZXMgPSA4OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBMZWdhY3kgcHJlZml4ZXMuICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlzd2l0Y2ggKGIgPSBpbnNuX2ZldGNoKHU4LCAxLCBfZWlwKSkgeworCQljYXNlIDB4NjY6CS8qIG9wZXJhbmQtc2l6ZSBvdmVycmlkZSAqLworCQkJb3BfYnl0ZXMgXj0gNjsJLyogc3dpdGNoIGJldHdlZW4gMi80IGJ5dGVzICovCisJCQlicmVhazsKKwkJY2FzZSAweDY3OgkvKiBhZGRyZXNzLXNpemUgb3ZlcnJpZGUgKi8KKwkJCWlmIChtb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQpCisJCQkJYWRfYnl0ZXMgXj0gMTI7CS8qIHN3aXRjaCBiZXR3ZWVuIDQvOCBieXRlcyAqLworCQkJZWxzZQorCQkJCWFkX2J5dGVzIF49IDY7CS8qIHN3aXRjaCBiZXR3ZWVuIDIvNCBieXRlcyAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgyZToJLyogQ1Mgb3ZlcnJpZGUgKi8KKwkJCW92ZXJyaWRlX2Jhc2UgPSAmY3R4dC0+Y3NfYmFzZTsKKwkJCWJyZWFrOworCQljYXNlIDB4M2U6CS8qIERTIG92ZXJyaWRlICovCisJCQlvdmVycmlkZV9iYXNlID0gJmN0eHQtPmRzX2Jhc2U7CisJCQlicmVhazsKKwkJY2FzZSAweDI2OgkvKiBFUyBvdmVycmlkZSAqLworCQkJb3ZlcnJpZGVfYmFzZSA9ICZjdHh0LT5lc19iYXNlOworCQkJYnJlYWs7CisJCWNhc2UgMHg2NDoJLyogRlMgb3ZlcnJpZGUgKi8KKwkJCW92ZXJyaWRlX2Jhc2UgPSAmY3R4dC0+ZnNfYmFzZTsKKwkJCWJyZWFrOworCQljYXNlIDB4NjU6CS8qIEdTIG92ZXJyaWRlICovCisJCQlvdmVycmlkZV9iYXNlID0gJmN0eHQtPmdzX2Jhc2U7CisJCQlicmVhazsKKwkJY2FzZSAweDM2OgkvKiBTUyBvdmVycmlkZSAqLworCQkJb3ZlcnJpZGVfYmFzZSA9ICZjdHh0LT5zc19iYXNlOworCQkJYnJlYWs7CisJCWNhc2UgMHhmMDoJLyogTE9DSyAqLworCQkJbG9ja19wcmVmaXggPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMHhmMzoJLyogUkVQL1JFUEUvUkVQWiAqLworCQkJcmVwX3ByZWZpeCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAweGYyOgkvKiBSRVBORS9SRVBOWiAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGRvbmVfcHJlZml4ZXM7CisJCX0KKwl9CisKK2RvbmVfcHJlZml4ZXM6CisKKwkvKiBSRVggcHJlZml4LiAqLworCWlmICgobW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0KSAmJiAoKGIgJiAweGYwKSA9PSAweDQwKSkgeworCQlyZXhfcHJlZml4ID0gYjsKKwkJaWYgKGIgJiA4KQorCQkJb3BfYnl0ZXMgPSA4OwkvKiBSRVguVyAqLworCQltb2RybV9yZWcgPSAoYiAmIDQpIDw8IDE7CS8qIFJFWC5SICovCisJCWluZGV4X3JlZyA9IChiICYgMikgPDwgMjsgLyogUkVYLlggKi8KKwkJbW9kcm1fcm0gPSBiYXNlX3JlZyA9IChiICYgMSkgPDwgMzsgLyogUkVHLkIgKi8KKwkJYiA9IGluc25fZmV0Y2godTgsIDEsIF9laXApOworCX0KKworCS8qIE9wY29kZSBieXRlKHMpLiAqLworCWQgPSBvcGNvZGVfdGFibGVbYl07CisJaWYgKGQgPT0gMCkgeworCQkvKiBUd28tYnl0ZSBvcGNvZGU/ICovCisJCWlmIChiID09IDB4MGYpIHsKKwkJCXR3b2J5dGUgPSAxOworCQkJYiA9IGluc25fZmV0Y2godTgsIDEsIF9laXApOworCQkJZCA9IHR3b2J5dGVfdGFibGVbYl07CisJCX0KKworCQkvKiBVbnJlY29nbmlzZWQ/ICovCisJCWlmIChkID09IDApCisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCX0KKworCS8qIE1vZFJNIGFuZCBTSUIgYnl0ZXMuICovCisJaWYgKGQgJiBNb2RSTSkgeworCQltb2RybSA9IGluc25fZmV0Y2godTgsIDEsIF9laXApOworCQltb2RybV9tb2QgfD0gKG1vZHJtICYgMHhjMCkgPj4gNjsKKwkJbW9kcm1fcmVnIHw9IChtb2RybSAmIDB4MzgpID4+IDM7CisJCW1vZHJtX3JtIHw9IChtb2RybSAmIDB4MDcpOworCQltb2RybV9lYSA9IDA7CisJCXVzZV9tb2RybV9lYSA9IDE7CisKKwkJaWYgKG1vZHJtX21vZCA9PSAzKSB7CisJCQltb2RybV92YWwgPSAqKHVuc2lnbmVkIGxvbmcgKikKKwkJCQlkZWNvZGVfcmVnaXN0ZXIobW9kcm1fcm0sIF9yZWdzLCBkICYgQnl0ZU9wKTsKKwkJCWdvdG8gbW9kcm1fZG9uZTsKKwkJfQorCisJCWlmIChhZF9ieXRlcyA9PSAyKSB7CisJCQl1bnNpZ25lZCBieCA9IF9yZWdzW1ZDUFVfUkVHU19SQlhdOworCQkJdW5zaWduZWQgYnAgPSBfcmVnc1tWQ1BVX1JFR1NfUkJQXTsKKwkJCXVuc2lnbmVkIHNpID0gX3JlZ3NbVkNQVV9SRUdTX1JTSV07CisJCQl1bnNpZ25lZCBkaSA9IF9yZWdzW1ZDUFVfUkVHU19SREldOworCisJCQkvKiAxNi1iaXQgTW9kUi9NIGRlY29kZS4gKi8KKwkJCXN3aXRjaCAobW9kcm1fbW9kKSB7CisJCQljYXNlIDA6CisJCQkJaWYgKG1vZHJtX3JtID09IDYpCisJCQkJCW1vZHJtX2VhICs9IGluc25fZmV0Y2godTE2LCAyLCBfZWlwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQltb2RybV9lYSArPSBpbnNuX2ZldGNoKHM4LCAxLCBfZWlwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQltb2RybV9lYSArPSBpbnNuX2ZldGNoKHUxNiwgMiwgX2VpcCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzd2l0Y2ggKG1vZHJtX3JtKSB7CisJCQljYXNlIDA6CisJCQkJbW9kcm1fZWEgKz0gYnggKyBzaTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQltb2RybV9lYSArPSBieCArIGRpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCW1vZHJtX2VhICs9IGJwICsgc2k7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJbW9kcm1fZWEgKz0gYnAgKyBkaTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQltb2RybV9lYSArPSBzaTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNToKKwkJCQltb2RybV9lYSArPSBkaTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQlpZiAobW9kcm1fbW9kICE9IDApCisJCQkJCW1vZHJtX2VhICs9IGJwOworCQkJCWJyZWFrOworCQkJY2FzZSA3OgorCQkJCW1vZHJtX2VhICs9IGJ4OworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKG1vZHJtX3JtID09IDIgfHwgbW9kcm1fcm0gPT0gMyB8fAorCQkJICAgIChtb2RybV9ybSA9PSA2ICYmIG1vZHJtX21vZCAhPSAwKSkKKwkJCQlpZiAoIW92ZXJyaWRlX2Jhc2UpCisJCQkJCW92ZXJyaWRlX2Jhc2UgPSAmY3R4dC0+c3NfYmFzZTsKKwkJCW1vZHJtX2VhID0gKHUxNiltb2RybV9lYTsKKwkJfSBlbHNlIHsKKwkJCS8qIDMyLzY0LWJpdCBNb2RSL00gZGVjb2RlLiAqLworCQkJc3dpdGNoIChtb2RybV9ybSkgeworCQkJY2FzZSA0OgorCQkJY2FzZSAxMjoKKwkJCQlzaWIgPSBpbnNuX2ZldGNoKHU4LCAxLCBfZWlwKTsKKwkJCQlpbmRleF9yZWcgfD0gKHNpYiA+PiAzKSAmIDc7CisJCQkJYmFzZV9yZWcgfD0gc2liICYgNzsKKwkJCQlzY2FsZSA9IHNpYiA+PiA2OworCisJCQkJc3dpdGNoIChiYXNlX3JlZykgeworCQkJCWNhc2UgNToKKwkJCQkJaWYgKG1vZHJtX21vZCAhPSAwKQorCQkJCQkJbW9kcm1fZWEgKz0gX3JlZ3NbYmFzZV9yZWddOworCQkJCQllbHNlCisJCQkJCQltb2RybV9lYSArPSBpbnNuX2ZldGNoKHMzMiwgNCwgX2VpcCk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCW1vZHJtX2VhICs9IF9yZWdzW2Jhc2VfcmVnXTsKKwkJCQl9CisJCQkJc3dpdGNoIChpbmRleF9yZWcpIHsKKwkJCQljYXNlIDQ6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCW1vZHJtX2VhICs9IF9yZWdzW2luZGV4X3JlZ10gPDwgc2NhbGU7CisKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDU6CisJCQkJaWYgKG1vZHJtX21vZCAhPSAwKQorCQkJCQltb2RybV9lYSArPSBfcmVnc1ttb2RybV9ybV07CisJCQkJZWxzZSBpZiAobW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0KQorCQkJCQlyaXBfcmVsYXRpdmUgPSAxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQltb2RybV9lYSArPSBfcmVnc1ttb2RybV9ybV07CisJCQkJYnJlYWs7CisJCQl9CisJCQlzd2l0Y2ggKG1vZHJtX21vZCkgeworCQkJY2FzZSAwOgorCQkJCWlmIChtb2RybV9ybSA9PSA1KQorCQkJCQltb2RybV9lYSArPSBpbnNuX2ZldGNoKHMzMiwgNCwgX2VpcCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJbW9kcm1fZWEgKz0gaW5zbl9mZXRjaChzOCwgMSwgX2VpcCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJbW9kcm1fZWEgKz0gaW5zbl9mZXRjaChzMzIsIDQsIF9laXApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghb3ZlcnJpZGVfYmFzZSkKKwkJCW92ZXJyaWRlX2Jhc2UgPSAmY3R4dC0+ZHNfYmFzZTsKKwkJaWYgKG1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCAmJgorCQkgICAgb3ZlcnJpZGVfYmFzZSAhPSAmY3R4dC0+ZnNfYmFzZSAmJgorCQkgICAgb3ZlcnJpZGVfYmFzZSAhPSAmY3R4dC0+Z3NfYmFzZSkKKwkJCW92ZXJyaWRlX2Jhc2UgPSBOVUxMOworCisJCWlmIChvdmVycmlkZV9iYXNlKQorCQkJbW9kcm1fZWEgKz0gKm92ZXJyaWRlX2Jhc2U7CisKKwkJaWYgKHJpcF9yZWxhdGl2ZSkgeworCQkJbW9kcm1fZWEgKz0gX2VpcDsKKwkJCXN3aXRjaCAoZCAmIFNyY01hc2spIHsKKwkJCWNhc2UgU3JjSW1tQnl0ZToKKwkJCQltb2RybV9lYSArPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBTcmNJbW06CisJCQkJaWYgKGQgJiBCeXRlT3ApCisJCQkJCW1vZHJtX2VhICs9IDE7CisJCQkJZWxzZQorCQkJCQlpZiAob3BfYnl0ZXMgPT0gOCkKKwkJCQkJCW1vZHJtX2VhICs9IDQ7CisJCQkJCWVsc2UKKwkJCQkJCW1vZHJtX2VhICs9IG9wX2J5dGVzOworCQkJfQorCQl9CisJCWlmIChhZF9ieXRlcyAhPSA4KQorCQkJbW9kcm1fZWEgPSAodTMyKW1vZHJtX2VhOworCQljcjIgPSBtb2RybV9lYTsKKwltb2RybV9kb25lOgorCQk7CisJfQorCisJLyoKKwkgKiBEZWNvZGUgYW5kIGZldGNoIHRoZSBzb3VyY2Ugb3BlcmFuZDogcmVnaXN0ZXIsIG1lbW9yeQorCSAqIG9yIGltbWVkaWF0ZS4KKwkgKi8KKwlzd2l0Y2ggKGQgJiBTcmNNYXNrKSB7CisJY2FzZSBTcmNOb25lOgorCQlicmVhazsKKwljYXNlIFNyY1JlZzoKKwkJc3JjLnR5cGUgPSBPUF9SRUc7CisJCWlmIChkICYgQnl0ZU9wKSB7CisJCQlzcmMucHRyID0gZGVjb2RlX3JlZ2lzdGVyKG1vZHJtX3JlZywgX3JlZ3MsCisJCQkJCQkgIChyZXhfcHJlZml4ID09IDApKTsKKwkJCXNyYy52YWwgPSBzcmMub3JpZ192YWwgPSAqKHU4ICopIHNyYy5wdHI7CisJCQlzcmMuYnl0ZXMgPSAxOworCQl9IGVsc2UgeworCQkJc3JjLnB0ciA9IGRlY29kZV9yZWdpc3Rlcihtb2RybV9yZWcsIF9yZWdzLCAwKTsKKwkJCXN3aXRjaCAoKHNyYy5ieXRlcyA9IG9wX2J5dGVzKSkgeworCQkJY2FzZSAyOgorCQkJCXNyYy52YWwgPSBzcmMub3JpZ192YWwgPSAqKHUxNiAqKSBzcmMucHRyOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCXNyYy52YWwgPSBzcmMub3JpZ192YWwgPSAqKHUzMiAqKSBzcmMucHRyOworCQkJCWJyZWFrOworCQkJY2FzZSA4OgorCQkJCXNyYy52YWwgPSBzcmMub3JpZ192YWwgPSAqKHU2NCAqKSBzcmMucHRyOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgU3JjTWVtMTY6CisJCXNyYy5ieXRlcyA9IDI7CisJCWdvdG8gc3JjbWVtX2NvbW1vbjsKKwljYXNlIFNyY01lbTMyOgorCQlzcmMuYnl0ZXMgPSA0OworCQlnb3RvIHNyY21lbV9jb21tb247CisJY2FzZSBTcmNNZW06CisJCXNyYy5ieXRlcyA9IChkICYgQnl0ZU9wKSA/IDEgOiBvcF9ieXRlczsKKwkgICAgICBzcmNtZW1fY29tbW9uOgorCQlzcmMudHlwZSA9IE9QX01FTTsKKwkJc3JjLnB0ciA9ICh1bnNpZ25lZCBsb25nICopY3IyOworCQlpZiAoKHJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKXNyYy5wdHIsCisJCQkJCSAgICAgJnNyYy52YWwsIHNyYy5ieXRlcywgY3R4dCkpICE9IDApCisJCQlnb3RvIGRvbmU7CisJCXNyYy5vcmlnX3ZhbCA9IHNyYy52YWw7CisJCWJyZWFrOworCWNhc2UgU3JjSW1tOgorCQlzcmMudHlwZSA9IE9QX0lNTTsKKwkJc3JjLnB0ciA9ICh1bnNpZ25lZCBsb25nICopX2VpcDsKKwkJc3JjLmJ5dGVzID0gKGQgJiBCeXRlT3ApID8gMSA6IG9wX2J5dGVzOworCQlpZiAoc3JjLmJ5dGVzID09IDgpCisJCQlzcmMuYnl0ZXMgPSA0OworCQkvKiBOQi4gSW1tZWRpYXRlcyBhcmUgc2lnbi1leHRlbmRlZCBhcyBuZWNlc3NhcnkuICovCisJCXN3aXRjaCAoc3JjLmJ5dGVzKSB7CisJCWNhc2UgMToKKwkJCXNyYy52YWwgPSBpbnNuX2ZldGNoKHM4LCAxLCBfZWlwKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzcmMudmFsID0gaW5zbl9mZXRjaChzMTYsIDIsIF9laXApOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXNyYy52YWwgPSBpbnNuX2ZldGNoKHMzMiwgNCwgX2VpcCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFNyY0ltbUJ5dGU6CisJCXNyYy50eXBlID0gT1BfSU1NOworCQlzcmMucHRyID0gKHVuc2lnbmVkIGxvbmcgKilfZWlwOworCQlzcmMuYnl0ZXMgPSAxOworCQlzcmMudmFsID0gaW5zbl9mZXRjaChzOCwgMSwgX2VpcCk7CisJCWJyZWFrOworCX0KKworCS8qIERlY29kZSBhbmQgZmV0Y2ggdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQ6IHJlZ2lzdGVyIG9yIG1lbW9yeS4gKi8KKwlzd2l0Y2ggKGQgJiBEc3RNYXNrKSB7CisJY2FzZSBJbXBsaWNpdE9wczoKKwkJLyogU3BlY2lhbCBpbnN0cnVjdGlvbnMgZG8gdGhlaXIgb3duIG9wZXJhbmQgZGVjb2RpbmcuICovCisJCWdvdG8gc3BlY2lhbF9pbnNuOworCWNhc2UgRHN0UmVnOgorCQlkc3QudHlwZSA9IE9QX1JFRzsKKwkJaWYgKChkICYgQnl0ZU9wKQorCQkgICAgJiYgISh0d29ieXRlX3RhYmxlICYmIChiID09IDB4YjYgfHwgYiA9PSAweGI3KSkpIHsKKwkJCWRzdC5wdHIgPSBkZWNvZGVfcmVnaXN0ZXIobW9kcm1fcmVnLCBfcmVncywKKwkJCQkJCSAgKHJleF9wcmVmaXggPT0gMCkpOworCQkJZHN0LnZhbCA9ICoodTggKikgZHN0LnB0cjsKKwkJCWRzdC5ieXRlcyA9IDE7CisJCX0gZWxzZSB7CisJCQlkc3QucHRyID0gZGVjb2RlX3JlZ2lzdGVyKG1vZHJtX3JlZywgX3JlZ3MsIDApOworCQkJc3dpdGNoICgoZHN0LmJ5dGVzID0gb3BfYnl0ZXMpKSB7CisJCQljYXNlIDI6CisJCQkJZHN0LnZhbCA9ICoodTE2ICopZHN0LnB0cjsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQlkc3QudmFsID0gKih1MzIgKilkc3QucHRyOworCQkJCWJyZWFrOworCQkJY2FzZSA4OgorCQkJCWRzdC52YWwgPSAqKHU2NCAqKWRzdC5wdHI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBEc3RNZW06CisJCWRzdC50eXBlID0gT1BfTUVNOworCQlkc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKiljcjI7CisJCWRzdC5ieXRlcyA9IChkICYgQnl0ZU9wKSA/IDEgOiBvcF9ieXRlczsKKwkJaWYgKGQgJiBCaXRPcCkgeworCQkJZHN0LnB0ciArPSBzcmMudmFsIC8gQklUU19QRVJfTE9ORzsKKwkJCWRzdC5ieXRlcyA9IHNpemVvZihsb25nKTsKKwkJfQorCQlpZiAoIShkICYgTW92KSAmJiAvKiBvcHRpbWlzYXRpb24gLSBhdm9pZCBzbG93IGVtdWxhdGVkIHJlYWQgKi8KKwkJICAgICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoKHVuc2lnbmVkIGxvbmcpZHN0LnB0ciwKKwkJCQkJICAgICAgJmRzdC52YWwsIGRzdC5ieXRlcywgY3R4dCkpICE9IDApKQorCQkJZ290byBkb25lOworCQlicmVhazsKKwl9CisJZHN0Lm9yaWdfdmFsID0gZHN0LnZhbDsKKworCWlmICh0d29ieXRlKQorCQlnb3RvIHR3b2J5dGVfaW5zbjsKKworCXN3aXRjaCAoYikgeworCWNhc2UgMHgwMCAuLi4gMHgwNToKKwkgICAgICBhZGQ6CQkvKiBhZGQgKi8KKwkJZW11bGF0ZV8yb3BfU3JjVigiYWRkIiwgc3JjLCBkc3QsIF9lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MDggLi4uIDB4MGQ6CisJICAgICAgb3I6CQkvKiBvciAqLworCQllbXVsYXRlXzJvcF9TcmNWKCJvciIsIHNyYywgZHN0LCBfZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwIC4uLiAweDE1OgorCSAgICAgIGFkYzoJCS8qIGFkYyAqLworCQllbXVsYXRlXzJvcF9TcmNWKCJhZGMiLCBzcmMsIGRzdCwgX2VmbGFncyk7CisJCWJyZWFrOworCWNhc2UgMHgxOCAuLi4gMHgxZDoKKwkgICAgICBzYmI6CQkvKiBzYmIgKi8KKwkJZW11bGF0ZV8yb3BfU3JjVigic2JiIiwgc3JjLCBkc3QsIF9lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MjAgLi4uIDB4MjU6CisJICAgICAgYW5kOgkJLyogYW5kICovCisJCWVtdWxhdGVfMm9wX1NyY1YoImFuZCIsIHNyYywgZHN0LCBfZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAweDI4IC4uLiAweDJkOgorCSAgICAgIHN1YjoJCS8qIHN1YiAqLworCQllbXVsYXRlXzJvcF9TcmNWKCJzdWIiLCBzcmMsIGRzdCwgX2VmbGFncyk7CisJCWJyZWFrOworCWNhc2UgMHgzMCAuLi4gMHgzNToKKwkgICAgICB4b3I6CQkvKiB4b3IgKi8KKwkJZW11bGF0ZV8yb3BfU3JjVigieG9yIiwgc3JjLCBkc3QsIF9lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MzggLi4uIDB4M2Q6CisJICAgICAgY21wOgkJLyogY21wICovCisJCWVtdWxhdGVfMm9wX1NyY1YoImNtcCIsIHNyYywgZHN0LCBfZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAweDYzOgkJLyogbW92c3hkICovCisJCWlmIChtb2RlICE9IFg4NkVNVUxfTU9ERV9QUk9UNjQpCisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQlkc3QudmFsID0gKHMzMikgc3JjLnZhbDsKKwkJYnJlYWs7CisJY2FzZSAweDgwIC4uLiAweDgzOgkvKiBHcnAxICovCisJCXN3aXRjaCAobW9kcm1fcmVnKSB7CisJCWNhc2UgMDoKKwkJCWdvdG8gYWRkOworCQljYXNlIDE6CisJCQlnb3RvIG9yOworCQljYXNlIDI6CisJCQlnb3RvIGFkYzsKKwkJY2FzZSAzOgorCQkJZ290byBzYmI7CisJCWNhc2UgNDoKKwkJCWdvdG8gYW5kOworCQljYXNlIDU6CisJCQlnb3RvIHN1YjsKKwkJY2FzZSA2OgorCQkJZ290byB4b3I7CisJCWNhc2UgNzoKKwkJCWdvdG8gY21wOworCQl9CisJCWJyZWFrOworCWNhc2UgMHg4NCAuLi4gMHg4NToKKwkgICAgICB0ZXN0OgkJLyogdGVzdCAqLworCQllbXVsYXRlXzJvcF9TcmNWKCJ0ZXN0Iiwgc3JjLCBkc3QsIF9lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4ODYgLi4uIDB4ODc6CS8qIHhjaGcgKi8KKwkJLyogV3JpdGUgYmFjayB0aGUgcmVnaXN0ZXIgc291cmNlLiAqLworCQlzd2l0Y2ggKGRzdC5ieXRlcykgeworCQljYXNlIDE6CisJCQkqKHU4ICopIHNyYy5wdHIgPSAodTgpIGRzdC52YWw7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJKih1MTYgKikgc3JjLnB0ciA9ICh1MTYpIGRzdC52YWw7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJKnNyYy5wdHIgPSAodTMyKSBkc3QudmFsOworCQkJYnJlYWs7CS8qIDY0YiByZWc6IHplcm8tZXh0ZW5kICovCisJCWNhc2UgODoKKwkJCSpzcmMucHRyID0gZHN0LnZhbDsKKwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIFdyaXRlIGJhY2sgdGhlIG1lbW9yeSBkZXN0aW5hdGlvbiB3aXRoIGltcGxpY2l0IExPQ0sKKwkJICogcHJlZml4LgorCQkgKi8KKwkJZHN0LnZhbCA9IHNyYy52YWw7CisJCWxvY2tfcHJlZml4ID0gMTsKKwkJYnJlYWs7CisJY2FzZSAweGEwIC4uLiAweGExOgkvKiBtb3YgKi8KKwkJZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopJl9yZWdzW1ZDUFVfUkVHU19SQVhdOworCQlkc3QudmFsID0gc3JjLnZhbDsKKwkJX2VpcCArPSBhZF9ieXRlczsJLyogc2tpcCBzcmMgZGlzcGxhY2VtZW50ICovCisJCWJyZWFrOworCWNhc2UgMHhhMiAuLi4gMHhhMzoJLyogbW92ICovCisJCWRzdC52YWwgPSAodW5zaWduZWQgbG9uZylfcmVnc1tWQ1BVX1JFR1NfUkFYXTsKKwkJX2VpcCArPSBhZF9ieXRlczsJLyogc2tpcCBkc3QgZGlzcGxhY2VtZW50ICovCisJCWJyZWFrOworCWNhc2UgMHg4OCAuLi4gMHg4YjoJLyogbW92ICovCisJY2FzZSAweGM2IC4uLiAweGM3OgkvKiBtb3YgKHNvbGUgbWVtYmVyIG9mIEdycDExKSAqLworCQlkc3QudmFsID0gc3JjLnZhbDsKKwkJYnJlYWs7CisJY2FzZSAweDhmOgkJLyogcG9wIChzb2xlIG1lbWJlciBvZiBHcnAxYSkgKi8KKwkJLyogNjQtYml0IG1vZGU6IFBPUCBhbHdheXMgcG9wcyBhIDY0LWJpdCBvcGVyYW5kLiAqLworCQlpZiAobW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0KQorCQkJZHN0LmJ5dGVzID0gODsKKwkJaWYgKChyYyA9IG9wcy0+cmVhZF9zdGQocmVnaXN0ZXJfYWRkcmVzcyhjdHh0LT5zc19iYXNlLAorCQkJCQkJCSBfcmVnc1tWQ1BVX1JFR1NfUlNQXSksCisJCQkJCSZkc3QudmFsLCBkc3QuYnl0ZXMsIGN0eHQpKSAhPSAwKQorCQkJZ290byBkb25lOworCQlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChfcmVnc1tWQ1BVX1JFR1NfUlNQXSwgZHN0LmJ5dGVzKTsKKwkJYnJlYWs7CisJY2FzZSAweGMwIC4uLiAweGMxOgorCSAgICAgIGdycDI6CQkvKiBHcnAyICovCisJCXN3aXRjaCAobW9kcm1fcmVnKSB7CisJCWNhc2UgMDoJLyogcm9sICovCisJCQllbXVsYXRlXzJvcF9TcmNCKCJyb2wiLCBzcmMsIGRzdCwgX2VmbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSAxOgkvKiByb3IgKi8KKwkJCWVtdWxhdGVfMm9wX1NyY0IoInJvciIsIHNyYywgZHN0LCBfZWZsYWdzKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CS8qIHJjbCAqLworCQkJZW11bGF0ZV8yb3BfU3JjQigicmNsIiwgc3JjLCBkc3QsIF9lZmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgMzoJLyogcmNyICovCisJCQllbXVsYXRlXzJvcF9TcmNCKCJyY3IiLCBzcmMsIGRzdCwgX2VmbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSA0OgkvKiBzYWwvc2hsICovCisJCWNhc2UgNjoJLyogc2FsL3NobCAqLworCQkJZW11bGF0ZV8yb3BfU3JjQigic2FsIiwgc3JjLCBkc3QsIF9lZmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgNToJLyogc2hyICovCisJCQllbXVsYXRlXzJvcF9TcmNCKCJzaHIiLCBzcmMsIGRzdCwgX2VmbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSA3OgkvKiBzYXIgKi8KKwkJCWVtdWxhdGVfMm9wX1NyY0IoInNhciIsIHNyYywgZHN0LCBfZWZsYWdzKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgMHhkMCAuLi4gMHhkMToJLyogR3JwMiAqLworCQlzcmMudmFsID0gMTsKKwkJZ290byBncnAyOworCWNhc2UgMHhkMiAuLi4gMHhkMzoJLyogR3JwMiAqLworCQlzcmMudmFsID0gX3JlZ3NbVkNQVV9SRUdTX1JDWF07CisJCWdvdG8gZ3JwMjsKKwljYXNlIDB4ZjYgLi4uIDB4Zjc6CS8qIEdycDMgKi8KKwkJc3dpdGNoIChtb2RybV9yZWcpIHsKKwkJY2FzZSAwIC4uLiAxOgkvKiB0ZXN0ICovCisJCQkvKgorCQkJICogU3BlY2lhbCBjYXNlIGluIEdycDM6IHRlc3QgaGFzIGFuIGltbWVkaWF0ZQorCQkJICogc291cmNlIG9wZXJhbmQuCisJCQkgKi8KKwkJCXNyYy50eXBlID0gT1BfSU1NOworCQkJc3JjLnB0ciA9ICh1bnNpZ25lZCBsb25nICopX2VpcDsKKwkJCXNyYy5ieXRlcyA9IChkICYgQnl0ZU9wKSA/IDEgOiBvcF9ieXRlczsKKwkJCWlmIChzcmMuYnl0ZXMgPT0gOCkKKwkJCQlzcmMuYnl0ZXMgPSA0OworCQkJc3dpdGNoIChzcmMuYnl0ZXMpIHsKKwkJCWNhc2UgMToKKwkJCQlzcmMudmFsID0gaW5zbl9mZXRjaChzOCwgMSwgX2VpcCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJc3JjLnZhbCA9IGluc25fZmV0Y2goczE2LCAyLCBfZWlwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQlzcmMudmFsID0gaW5zbl9mZXRjaChzMzIsIDQsIF9laXApOworCQkJCWJyZWFrOworCQkJfQorCQkJZ290byB0ZXN0OworCQljYXNlIDI6CS8qIG5vdCAqLworCQkJZHN0LnZhbCA9IH5kc3QudmFsOworCQkJYnJlYWs7CisJCWNhc2UgMzoJLyogbmVnICovCisJCQllbXVsYXRlXzFvcCgibmVnIiwgZHN0LCBfZWZsYWdzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4ZmUgLi4uIDB4ZmY6CS8qIEdycDQvR3JwNSAqLworCQlzd2l0Y2ggKG1vZHJtX3JlZykgeworCQljYXNlIDA6CS8qIGluYyAqLworCQkJZW11bGF0ZV8xb3AoImluYyIsIGRzdCwgX2VmbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSAxOgkvKiBkZWMgKi8KKwkJCWVtdWxhdGVfMW9wKCJkZWMiLCBkc3QsIF9lZmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgNjoJLyogcHVzaCAqLworCQkJLyogNjQtYml0IG1vZGU6IFBVU0ggYWx3YXlzIHB1c2hlcyBhIDY0LWJpdCBvcGVyYW5kLiAqLworCQkJaWYgKG1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCkgeworCQkJCWRzdC5ieXRlcyA9IDg7CisJCQkJaWYgKChyYyA9IG9wcy0+cmVhZF9zdGQoKHVuc2lnbmVkIGxvbmcpZHN0LnB0ciwKKwkJCQkJCQkmZHN0LnZhbCwgOCwKKwkJCQkJCQljdHh0KSkgIT0gMCkKKwkJCQkJZ290byBkb25lOworCQkJfQorCQkJcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoX3JlZ3NbVkNQVV9SRUdTX1JTUF0sCisJCQkJCQkgICAtZHN0LmJ5dGVzKTsKKwkJCWlmICgocmMgPSBvcHMtPndyaXRlX3N0ZCgKKwkJCQkgICAgIHJlZ2lzdGVyX2FkZHJlc3MoY3R4dC0+c3NfYmFzZSwKKwkJCQkJCSAgICAgIF9yZWdzW1ZDUFVfUkVHU19SU1BdKSwKKwkJCQkgICAgIGRzdC52YWwsIGRzdC5ieXRlcywgY3R4dCkpICE9IDApCisJCQkJZ290byBkb25lOworCQkJZHN0LnZhbCA9IGRzdC5vcmlnX3ZhbDsJLyogc2thbmt5OiBkaXNhYmxlIHdyaXRlYmFjayAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQl9CisJCWJyZWFrOworCX0KKword3JpdGViYWNrOgorCWlmICgoZCAmIE1vdikgfHwgKGRzdC5vcmlnX3ZhbCAhPSBkc3QudmFsKSkgeworCQlzd2l0Y2ggKGRzdC50eXBlKSB7CisJCWNhc2UgT1BfUkVHOgorCQkJLyogVGhlIDQtYnl0ZSBjYXNlICppcyogY29ycmVjdDogaW4gNjQtYml0IG1vZGUgd2UgemVyby1leHRlbmQuICovCisJCQlzd2l0Y2ggKGRzdC5ieXRlcykgeworCQkJY2FzZSAxOgorCQkJCSoodTggKilkc3QucHRyID0gKHU4KWRzdC52YWw7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJKih1MTYgKilkc3QucHRyID0gKHUxNilkc3QudmFsOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCSpkc3QucHRyID0gKHUzMilkc3QudmFsOworCQkJCWJyZWFrOwkvKiA2NGI6IHplcm8tZXh0ICovCisJCQljYXNlIDg6CisJCQkJKmRzdC5wdHIgPSBkc3QudmFsOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgT1BfTUVNOgorCQkJaWYgKGxvY2tfcHJlZml4KQorCQkJCXJjID0gb3BzLT5jbXB4Y2hnX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKWRzdC4KKwkJCQkJCQkgICBwdHIsIGRzdC5vcmlnX3ZhbCwKKwkJCQkJCQkgICBkc3QudmFsLCBkc3QuYnl0ZXMsCisJCQkJCQkJICAgY3R4dCk7CisJCQllbHNlCisJCQkJcmMgPSBvcHMtPndyaXRlX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKWRzdC5wdHIsCisJCQkJCQkJIGRzdC52YWwsIGRzdC5ieXRlcywKKwkJCQkJCQkgY3R4dCk7CisJCQlpZiAocmMgIT0gMCkKKwkJCQlnb3RvIGRvbmU7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIENvbW1pdCBzaGFkb3cgcmVnaXN0ZXIgc3RhdGUuICovCisJbWVtY3B5KGN0eHQtPnZjcHUtPnJlZ3MsIF9yZWdzLCBzaXplb2YgX3JlZ3MpOworCWN0eHQtPmVmbGFncyA9IF9lZmxhZ3M7CisJY3R4dC0+dmNwdS0+cmlwID0gX2VpcDsKKworZG9uZToKKwlyZXR1cm4gKHJjID09IFg4NkVNVUxfVU5IQU5ETEVBQkxFKSA/IC0xIDogMDsKKworc3BlY2lhbF9pbnNuOgorCWlmICh0d29ieXRlKQorCQlnb3RvIHR3b2J5dGVfc3BlY2lhbF9pbnNuOworCWlmIChyZXBfcHJlZml4KSB7CisJCWlmIChfcmVnc1tWQ1BVX1JFR1NfUkNYXSA9PSAwKSB7CisJCQljdHh0LT52Y3B1LT5yaXAgPSBfZWlwOworCQkJZ290byBkb25lOworCQl9CisJCV9yZWdzW1ZDUFVfUkVHU19SQ1hdLS07CisJCV9laXAgPSBjdHh0LT52Y3B1LT5yaXA7CisJfQorCXN3aXRjaCAoYikgeworCWNhc2UgMHhhNCAuLi4gMHhhNToJLyogbW92cyAqLworCQlkc3QudHlwZSA9IE9QX01FTTsKKwkJZHN0LmJ5dGVzID0gKGQgJiBCeXRlT3ApID8gMSA6IG9wX2J5dGVzOworCQlkc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKilyZWdpc3Rlcl9hZGRyZXNzKGN0eHQtPmVzX2Jhc2UsCisJCQkJCQkJX3JlZ3NbVkNQVV9SRUdTX1JESV0pOworCQlpZiAoKHJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKHJlZ2lzdGVyX2FkZHJlc3MoCisJCSAgICAgIG92ZXJyaWRlX2Jhc2UgPyAqb3ZlcnJpZGVfYmFzZSA6IGN0eHQtPmRzX2Jhc2UsCisJCSAgICAgIF9yZWdzW1ZDUFVfUkVHU19SU0ldKSwgJmRzdC52YWwsIGRzdC5ieXRlcywgY3R4dCkpICE9IDApCisJCQlnb3RvIGRvbmU7CisJCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KF9yZWdzW1ZDUFVfUkVHU19SU0ldLAorCQkJICAgICAoX2VmbGFncyAmIEVGTEdfREYpID8gLWRzdC5ieXRlcyA6IGRzdC5ieXRlcyk7CisJCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KF9yZWdzW1ZDUFVfUkVHU19SREldLAorCQkJICAgICAoX2VmbGFncyAmIEVGTEdfREYpID8gLWRzdC5ieXRlcyA6IGRzdC5ieXRlcyk7CisJCWJyZWFrOworCWNhc2UgMHhhNiAuLi4gMHhhNzoJLyogY21wcyAqLworCQlEUFJJTlRGKCJVcmshIEkgZG9uJ3QgaGFuZGxlIENNUFMuXG4iKTsKKwkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwljYXNlIDB4YWEgLi4uIDB4YWI6CS8qIHN0b3MgKi8KKwkJZHN0LnR5cGUgPSBPUF9NRU07CisJCWRzdC5ieXRlcyA9IChkICYgQnl0ZU9wKSA/IDEgOiBvcF9ieXRlczsKKwkJZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopY3IyOworCQlkc3QudmFsID0gX3JlZ3NbVkNQVV9SRUdTX1JBWF07CisJCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KF9yZWdzW1ZDUFVfUkVHU19SREldLAorCQkJICAgICAoX2VmbGFncyAmIEVGTEdfREYpID8gLWRzdC5ieXRlcyA6IGRzdC5ieXRlcyk7CisJCWJyZWFrOworCWNhc2UgMHhhYyAuLi4gMHhhZDoJLyogbG9kcyAqLworCQlkc3QudHlwZSA9IE9QX1JFRzsKKwkJZHN0LmJ5dGVzID0gKGQgJiBCeXRlT3ApID8gMSA6IG9wX2J5dGVzOworCQlkc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKikmX3JlZ3NbVkNQVV9SRUdTX1JBWF07CisJCWlmICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoY3IyLCAmZHN0LnZhbCwgZHN0LmJ5dGVzLCBjdHh0KSkgIT0gMCkKKwkJCWdvdG8gZG9uZTsKKwkJcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoX3JlZ3NbVkNQVV9SRUdTX1JTSV0sCisJCQkgICAoX2VmbGFncyAmIEVGTEdfREYpID8gLWRzdC5ieXRlcyA6IGRzdC5ieXRlcyk7CisJCWJyZWFrOworCWNhc2UgMHhhZSAuLi4gMHhhZjoJLyogc2NhcyAqLworCQlEUFJJTlRGKCJVcmshIEkgZG9uJ3QgaGFuZGxlIFNDQVMuXG4iKTsKKwkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwl9CisJZ290byB3cml0ZWJhY2s7CisKK3R3b2J5dGVfaW5zbjoKKwlzd2l0Y2ggKGIpIHsKKwljYXNlIDB4MDE6IC8qIGxnZHQsIGxpZHQsIGxtc3cgKi8KKwkJc3dpdGNoIChtb2RybV9yZWcpIHsKKwkJCXUxNiBzaXplOworCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCisJCWNhc2UgMjogLyogbGdkdCAqLworCQkJcmMgPSByZWFkX2Rlc2NyaXB0b3IoY3R4dCwgb3BzLCBzcmMucHRyLAorCQkJCQkgICAgICZzaXplLCAmYWRkcmVzcywgb3BfYnl0ZXMpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gZG9uZTsKKwkJCXJlYWxtb2RlX2xnZHQoY3R4dC0+dmNwdSwgc2l6ZSwgYWRkcmVzcyk7CisJCQlicmVhazsKKwkJY2FzZSAzOiAvKiBsaWR0ICovCisJCQlyYyA9IHJlYWRfZGVzY3JpcHRvcihjdHh0LCBvcHMsIHNyYy5wdHIsCisJCQkJCSAgICAgJnNpemUsICZhZGRyZXNzLCBvcF9ieXRlcyk7CisJCQlpZiAocmMpCisJCQkJZ290byBkb25lOworCQkJcmVhbG1vZGVfbGlkdChjdHh0LT52Y3B1LCBzaXplLCBhZGRyZXNzKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6IC8qIHNtc3cgKi8KKwkJCWlmIChtb2RybV9tb2QgIT0gMykKKwkJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQkJKih1MTYgKikmX3JlZ3NbbW9kcm1fcm1dCisJCQkJPSByZWFsbW9kZV9nZXRfY3IoY3R4dC0+dmNwdSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSA2OiAvKiBsbXN3ICovCisJCQlpZiAobW9kcm1fbW9kICE9IDMpCisJCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJCXJlYWxtb2RlX2xtc3coY3R4dC0+dmNwdSwgKHUxNiltb2RybV92YWwsICZfZWZsYWdzKTsKKwkJCWJyZWFrOworCQljYXNlIDc6IC8qIGludmxwZyovCisJCQllbXVsYXRlX2ludmxwZyhjdHh0LT52Y3B1LCBjcjIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQl9CisJCWJyZWFrOworCWNhc2UgMHgyMTogLyogbW92IGZyb20gZHIgdG8gcmVnICovCisJCWlmIChtb2RybV9tb2QgIT0gMykKKwkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCXJjID0gZW11bGF0b3JfZ2V0X2RyKGN0eHQsIG1vZHJtX3JlZywgJl9yZWdzW21vZHJtX3JtXSk7CisJCWJyZWFrOworCWNhc2UgMHgyMzogLyogbW92IGZyb20gcmVnIHRvIGRyICovCisJCWlmIChtb2RybV9tb2QgIT0gMykKKwkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCXJjID0gZW11bGF0b3Jfc2V0X2RyKGN0eHQsIG1vZHJtX3JlZywgX3JlZ3NbbW9kcm1fcm1dKTsKKwkJYnJlYWs7CisJY2FzZSAweDQwIC4uLiAweDRmOgkvKiBjbW92ICovCisJCWRzdC52YWwgPSBkc3Qub3JpZ192YWwgPSBzcmMudmFsOworCQlkICY9IH5Nb3Y7CS8qIGRlZmF1bHQgdG8gbm8gbW92ZSAqLworCQkvKgorCQkgKiBGaXJzdCwgYXNzdW1lIHdlJ3JlIGRlY29kaW5nIGFuIGV2ZW4gY21vdiBvcGNvZGUKKwkJICogKGxzYiA9PSAwKS4KKwkJICovCisJCXN3aXRjaCAoKGIgJiAxNSkgPj4gMSkgeworCQljYXNlIDA6CS8qIGNtb3ZvICovCisJCQlkIHw9IChfZWZsYWdzICYgRUZMR19PRikgPyBNb3YgOiAwOworCQkJYnJlYWs7CisJCWNhc2UgMToJLyogY21vdmIvY21vdmMvY21vdm5hZSAqLworCQkJZCB8PSAoX2VmbGFncyAmIEVGTEdfQ0YpID8gTW92IDogMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CS8qIGNtb3Z6L2Ntb3ZlICovCisJCQlkIHw9IChfZWZsYWdzICYgRUZMR19aRikgPyBNb3YgOiAwOworCQkJYnJlYWs7CisJCWNhc2UgMzoJLyogY21vdmJlL2Ntb3ZuYSAqLworCQkJZCB8PSAoX2VmbGFncyAmIChFRkxHX0NGIHwgRUZMR19aRikpID8gTW92IDogMDsKKwkJCWJyZWFrOworCQljYXNlIDQ6CS8qIGNtb3ZzICovCisJCQlkIHw9IChfZWZsYWdzICYgRUZMR19TRikgPyBNb3YgOiAwOworCQkJYnJlYWs7CisJCWNhc2UgNToJLyogY21vdnAvY21vdnBlICovCisJCQlkIHw9IChfZWZsYWdzICYgRUZMR19QRikgPyBNb3YgOiAwOworCQkJYnJlYWs7CisJCWNhc2UgNzoJLyogY21vdmxlL2Ntb3ZuZyAqLworCQkJZCB8PSAoX2VmbGFncyAmIEVGTEdfWkYpID8gTW92IDogMDsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIDY6CS8qIGNtb3ZsL2Ntb3ZuZ2UgKi8KKwkJCWQgfD0gKCEoX2VmbGFncyAmIEVGTEdfU0YpICE9CisJCQkgICAgICAhKF9lZmxhZ3MgJiBFRkxHX09GKSkgPyBNb3YgOiAwOworCQkJYnJlYWs7CisJCX0KKwkJLyogT2RkIGNtb3Ygb3Bjb2RlcyAobHNiID09IDEpIGhhdmUgaW52ZXJ0ZWQgc2Vuc2UuICovCisJCWQgXj0gKGIgJiAxKSA/IE1vdiA6IDA7CisJCWJyZWFrOworCWNhc2UgMHhiMCAuLi4gMHhiMToJLyogY21weGNoZyAqLworCQkvKgorCQkgKiBTYXZlIHJlYWwgc291cmNlIHZhbHVlLCB0aGVuIGNvbXBhcmUgRUFYIGFnYWluc3QKKwkJICogZGVzdGluYXRpb24uCisJCSAqLworCQlzcmMub3JpZ192YWwgPSBzcmMudmFsOworCQlzcmMudmFsID0gX3JlZ3NbVkNQVV9SRUdTX1JBWF07CisJCWVtdWxhdGVfMm9wX1NyY1YoImNtcCIsIHNyYywgZHN0LCBfZWZsYWdzKTsKKwkJLyogQWx3YXlzIHdyaXRlIGJhY2suIFRoZSBxdWVzdGlvbiBpczogd2hlcmUgdG8/ICovCisJCWQgfD0gTW92OworCQlpZiAoX2VmbGFncyAmIEVGTEdfWkYpIHsKKwkJCS8qIFN1Y2Nlc3M6IHdyaXRlIGJhY2sgdG8gbWVtb3J5LiAqLworCQkJZHN0LnZhbCA9IHNyYy5vcmlnX3ZhbDsKKwkJfSBlbHNlIHsKKwkJCS8qIEZhaWx1cmU6IHdyaXRlIHRoZSB2YWx1ZSB3ZSBzYXcgdG8gRUFYLiAqLworCQkJZHN0LnR5cGUgPSBPUF9SRUc7CisJCQlkc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKikmX3JlZ3NbVkNQVV9SRUdTX1JBWF07CisJCX0KKwkJYnJlYWs7CisJY2FzZSAweGEzOgorCSAgICAgIGJ0OgkJLyogYnQgKi8KKwkJc3JjLnZhbCAmPSAoZHN0LmJ5dGVzIDw8IDMpIC0gMTsgLyogb25seSBzdWJ3b3JkIG9mZnNldCAqLworCQllbXVsYXRlXzJvcF9TcmNWX25vYnl0ZSgiYnQiLCBzcmMsIGRzdCwgX2VmbGFncyk7CisJCWJyZWFrOworCWNhc2UgMHhiMzoKKwkgICAgICBidHI6CQkvKiBidHIgKi8KKwkJc3JjLnZhbCAmPSAoZHN0LmJ5dGVzIDw8IDMpIC0gMTsgLyogb25seSBzdWJ3b3JkIG9mZnNldCAqLworCQllbXVsYXRlXzJvcF9TcmNWX25vYnl0ZSgiYnRyIiwgc3JjLCBkc3QsIF9lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4YWI6CisJICAgICAgYnRzOgkJLyogYnRzICovCisJCXNyYy52YWwgJj0gKGRzdC5ieXRlcyA8PCAzKSAtIDE7IC8qIG9ubHkgc3Vid29yZCBvZmZzZXQgKi8KKwkJZW11bGF0ZV8yb3BfU3JjVl9ub2J5dGUoImJ0cyIsIHNyYywgZHN0LCBfZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAweGI2IC4uLiAweGI3OgkvKiBtb3Z6eCAqLworCQlkc3QuYnl0ZXMgPSBvcF9ieXRlczsKKwkJZHN0LnZhbCA9IChkICYgQnl0ZU9wKSA/ICh1OCkgc3JjLnZhbCA6ICh1MTYpIHNyYy52YWw7CisJCWJyZWFrOworCWNhc2UgMHhiYjoKKwkgICAgICBidGM6CQkvKiBidGMgKi8KKwkJc3JjLnZhbCAmPSAoZHN0LmJ5dGVzIDw8IDMpIC0gMTsgLyogb25seSBzdWJ3b3JkIG9mZnNldCAqLworCQllbXVsYXRlXzJvcF9TcmNWX25vYnl0ZSgiYnRjIiwgc3JjLCBkc3QsIF9lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4YmE6CQkvKiBHcnA4ICovCisJCXN3aXRjaCAobW9kcm1fcmVnICYgMykgeworCQljYXNlIDA6CisJCQlnb3RvIGJ0OworCQljYXNlIDE6CisJCQlnb3RvIGJ0czsKKwkJY2FzZSAyOgorCQkJZ290byBidHI7CisJCWNhc2UgMzoKKwkJCWdvdG8gYnRjOworCQl9CisJCWJyZWFrOworCWNhc2UgMHhiZSAuLi4gMHhiZjoJLyogbW92c3ggKi8KKwkJZHN0LmJ5dGVzID0gb3BfYnl0ZXM7CisJCWRzdC52YWwgPSAoZCAmIEJ5dGVPcCkgPyAoczgpIHNyYy52YWwgOiAoczE2KSBzcmMudmFsOworCQlicmVhazsKKwl9CisJZ290byB3cml0ZWJhY2s7CisKK3R3b2J5dGVfc3BlY2lhbF9pbnNuOgorCS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCWRzdC5vcmlnX3ZhbCA9IGRzdC52YWw7CisJc3dpdGNoIChiKSB7CisJY2FzZSAweDBkOgkJLyogR3JwUCAocHJlZmV0Y2gpICovCisJY2FzZSAweDE4OgkJLyogR3JwMTYgKHByZWZldGNoL25vcCkgKi8KKwkJYnJlYWs7CisJY2FzZSAweDA2OgorCQllbXVsYXRlX2NsdHMoY3R4dC0+dmNwdSk7CisJCWJyZWFrOworCWNhc2UgMHgyMDogLyogbW92IGNyLCByZWcgKi8KKwkJaWYgKG1vZHJtX21vZCAhPSAzKQorCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJX3JlZ3NbbW9kcm1fcm1dID0gcmVhbG1vZGVfZ2V0X2NyKGN0eHQtPnZjcHUsIG1vZHJtX3JlZyk7CisJCWJyZWFrOworCWNhc2UgMHgyMjogLyogbW92IHJlZywgY3IgKi8KKwkJaWYgKG1vZHJtX21vZCAhPSAzKQorCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJcmVhbG1vZGVfc2V0X2NyKGN0eHQtPnZjcHUsIG1vZHJtX3JlZywgbW9kcm1fdmFsLCAmX2VmbGFncyk7CisJCWJyZWFrOworCWNhc2UgMHhjNzoJCS8qIEdycDkgKGNtcHhjaGc4YikgKi8KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQorCQl7CisJCQl1bnNpZ25lZCBsb25nIG9sZF9sbywgb2xkX2hpOworCQkJaWYgKCgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoY3IyICsgMCwgJm9sZF9sbywgNCwKKwkJCQkJCSAgICAgIGN0eHQpKSAhPSAwKQorCQkJICAgIHx8ICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoY3IyICsgNCwgJm9sZF9oaSwgNCwKKwkJCQkJCQkgY3R4dCkpICE9IDApKQorCQkJCWdvdG8gZG9uZTsKKwkJCWlmICgob2xkX2xvICE9IF9yZWdzW1ZDUFVfUkVHU19SQVhdKQorCQkJICAgIHx8IChvbGRfaGkgIT0gX3JlZ3NbVkNQVV9SRUdTX1JEWF0pKSB7CisJCQkJX3JlZ3NbVkNQVV9SRUdTX1JBWF0gPSBvbGRfbG87CisJCQkJX3JlZ3NbVkNQVV9SRUdTX1JEWF0gPSBvbGRfaGk7CisJCQkJX2VmbGFncyAmPSB+RUZMR19aRjsKKwkJCX0gZWxzZSBpZiAob3BzLT5jbXB4Y2hnOGJfZW11bGF0ZWQgPT0gTlVMTCkgeworCQkJCXJjID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisJCQkJZ290byBkb25lOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoKHJjID0gb3BzLT5jbXB4Y2hnOGJfZW11bGF0ZWQoY3IyLCBvbGRfbG8sCisJCQkJCQkJICBvbGRfaGksCisJCQkJCQkJICBfcmVnc1tWQ1BVX1JFR1NfUkJYXSwKKwkJCQkJCQkgIF9yZWdzW1ZDUFVfUkVHU19SQ1hdLAorCQkJCQkJCSAgY3R4dCkpICE9IDApCisJCQkJCWdvdG8gZG9uZTsKKwkJCQlfZWZsYWdzIHw9IEVGTEdfWkY7CisJCQl9CisJCQlicmVhazsKKwkJfQorI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCQl7CisJCQl1bnNpZ25lZCBsb25nIG9sZCwgbmV3OworCQkJaWYgKChyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZChjcjIsICZvbGQsIDgsIGN0eHQpKSAhPSAwKQorCQkJCWdvdG8gZG9uZTsKKwkJCWlmICgoKHUzMikgKG9sZCA+PiAwKSAhPSAodTMyKSBfcmVnc1tWQ1BVX1JFR1NfUkFYXSkgfHwKKwkJCSAgICAoKHUzMikgKG9sZCA+PiAzMikgIT0gKHUzMikgX3JlZ3NbVkNQVV9SRUdTX1JEWF0pKSB7CisJCQkJX3JlZ3NbVkNQVV9SRUdTX1JBWF0gPSAodTMyKSAob2xkID4+IDApOworCQkJCV9yZWdzW1ZDUFVfUkVHU19SRFhdID0gKHUzMikgKG9sZCA+PiAzMik7CisJCQkJX2VmbGFncyAmPSB+RUZMR19aRjsKKwkJCX0gZWxzZSB7CisJCQkJbmV3ID0gKF9yZWdzW1ZDUFVfUkVHU19SQ1hdIDw8IDMyKSB8ICh1MzIpIF9yZWdzW1ZDUFVfUkVHU19SQlhdOworCQkJCWlmICgocmMgPSBvcHMtPmNtcHhjaGdfZW11bGF0ZWQoY3IyLCBvbGQsCisJCQkJCQkJICBuZXcsIDgsIGN0eHQpKSAhPSAwKQorCQkJCQlnb3RvIGRvbmU7CisJCQkJX2VmbGFncyB8PSBFRkxHX1pGOworCQkJfQorCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCX0KKwlnb3RvIHdyaXRlYmFjazsKKworY2Fubm90X2VtdWxhdGU6CisJRFBSSU5URigiQ2Fubm90IGVtdWxhdGUgJTAyeFxuIiwgYik7CisJcmV0dXJuIC0xOworfQorCisjaWZkZWYgX19YRU5fXworCisjaW5jbHVkZSA8YXNtL21tLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworaW50Cit4ODZfZW11bGF0ZV9yZWFkX3N0ZCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCSAgICAgdW5zaWduZWQgbG9uZyAqdmFsLAorCQkgICAgIHVuc2lnbmVkIGludCBieXRlcywgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJdW5zaWduZWQgaW50IHJjOworCisJKnZhbCA9IDA7CisKKwlpZiAoKHJjID0gY29weV9mcm9tX3VzZXIoKHZvaWQgKil2YWwsICh2b2lkICopYWRkciwgYnl0ZXMpKSAhPSAwKSB7CisJCXByb3BhZ2F0ZV9wYWdlX2ZhdWx0KGFkZHIgKyBieXRlcyAtIHJjLCAwKTsJLyogcmVhZCBmYXVsdCAqLworCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CisJfQorCisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKK2ludAoreDg2X2VtdWxhdGVfd3JpdGVfc3RkKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJICAgICAgdW5zaWduZWQgbG9uZyB2YWwsCisJCSAgICAgIHVuc2lnbmVkIGludCBieXRlcywgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJdW5zaWduZWQgaW50IHJjOworCisJaWYgKChyYyA9IGNvcHlfdG9fdXNlcigodm9pZCAqKWFkZHIsICh2b2lkICopJnZhbCwgYnl0ZXMpKSAhPSAwKSB7CisJCXByb3BhZ2F0ZV9wYWdlX2ZhdWx0KGFkZHIgKyBieXRlcyAtIHJjLCBQR0VSUl93cml0ZV9hY2Nlc3MpOworCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CisJfQorCisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9rdm0veDg2X2VtdWxhdGUuaCBiL2RyaXZlcnMva3ZtL3g4Nl9lbXVsYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ0MWJkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMva3ZtL3g4Nl9lbXVsYXRlLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHg4Nl9lbXVsYXRlLmgKKyAqCisgKiBHZW5lcmljIHg4NiAoMzItYml0IGFuZCA2NC1iaXQpIGluc3RydWN0aW9uIGRlY29kZXIgYW5kIGVtdWxhdG9yLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBLZWlyIEZyYXNlcgorICoKKyAqIEZyb206IHhlbi11bnN0YWJsZSAxMDY3NjphZjk4MDlmNTFmODFhM2M0M2YyNzZmMDBjODFhNTJlZjU1OGFmZGE0CisgKi8KKworI2lmbmRlZiBfX1g4Nl9FTVVMQVRFX0hfXworI2RlZmluZSBfX1g4Nl9FTVVMQVRFX0hfXworCitzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dDsKKworLyoKKyAqIHg4Nl9lbXVsYXRlX29wczoKKyAqCisgKiBUaGVzZSBvcGVyYXRpb25zIHJlcHJlc2VudCB0aGUgaW5zdHJ1Y3Rpb24gZW11bGF0b3IncyBpbnRlcmZhY2UgdG8gbWVtb3J5LgorICogVGhlcmUgYXJlIHR3byBjYXRlZ29yaWVzIG9mIG9wZXJhdGlvbjogdGhvc2UgdGhhdCBhY3Qgb24gb3JkaW5hcnkgbWVtb3J5CisgKiByZWdpb25zICgqX3N0ZCksIGFuZCB0aG9zZSB0aGF0IGFjdCBvbiBtZW1vcnkgcmVnaW9ucyBrbm93biB0byByZXF1aXJlCisgKiBzcGVjaWFsIHRyZWF0bWVudCBvciBlbXVsYXRpb24gKCpfZW11bGF0ZWQpLgorICoKKyAqIFRoZSBlbXVsYXRvciBhc3N1bWVzIHRoYXQgYW4gaW5zdHJ1Y3Rpb24gYWNjZXNzZXMgb25seSBvbmUgJ2VtdWxhdGVkIG1lbW9yeScKKyAqIGxvY2F0aW9uLCB0aGF0IHRoaXMgbG9jYXRpb24gaXMgdGhlIGdpdmVuIGxpbmVhciBmYXVsdGluZyBhZGRyZXNzIChjcjIpLCBhbmQKKyAqIHRoYXQgdGhpcyBpcyBvbmUgb2YgdGhlIGluc3RydWN0aW9uJ3MgZGF0YSBvcGVyYW5kcy4gSW5zdHJ1Y3Rpb24gZmV0Y2hlcyBhbmQKKyAqIHN0YWNrIG9wZXJhdGlvbnMgYXJlIGFzc3VtZWQgbmV2ZXIgdG8gYWNjZXNzIGVtdWxhdGVkIG1lbW9yeS4gVGhlIGVtdWxhdG9yCisgKiBhdXRvbWF0aWNhbGx5IGRlZHVjZXMgd2hpY2ggb3BlcmFuZCBvZiBhIHN0cmluZy1tb3ZlIG9wZXJhdGlvbiBpcyBhY2Nlc3NpbmcKKyAqIGVtdWxhdGVkIG1lbW9yeSwgYW5kIGFzc3VtZXMgdGhhdCB0aGUgb3RoZXIgb3BlcmFuZCBhY2Nlc3NlcyBub3JtYWwgbWVtb3J5LgorICoKKyAqIE5PVEVTOgorICogIDEuIFRoZSBlbXVsYXRvciBpc24ndCB2ZXJ5IHNtYXJ0IGFib3V0IGVtdWxhdGVkIHZzLiBzdGFuZGFyZCBtZW1vcnkuCisgKiAgICAgJ0VtdWxhdGVkIG1lbW9yeScgYWNjZXNzIGFkZHJlc3NlcyBzaG91bGQgYmUgY2hlY2tlZCBmb3Igc2FuaXR5LgorICogICAgICdOb3JtYWwgbWVtb3J5JyBhY2Nlc3NlcyBtYXkgZmF1bHQsIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSB0bworICogICAgIGRldGVjdCBhbmQgaGFuZGxlIHJlZW50cmFuY3kgaW50byB0aGUgZW11bGF0b3IgdmlhIHJlY3Vyc2l2ZSBmYXVsdHMuCisgKiAgICAgQWNjZXNzZXMgbWF5IGJlIHVuYWxpZ25lZCBhbmQgbWF5IGNyb3NzIHBhZ2UgYm91bmRhcmllcy4KKyAqICAyLiBJZiB0aGUgYWNjZXNzIGZhaWxzIChjYW5ub3QgZW11bGF0ZSwgb3IgYSBzdGFuZGFyZCBhY2Nlc3MgZmF1bHRzKSB0aGVuCisgKiAgICAgaXQgaXMgdXAgdG8gdGhlIG1lbW9wIHRvIHByb3BhZ2F0ZSB0aGUgZmF1bHQgdG8gdGhlIGd1ZXN0IFZNIHZpYQorICogICAgIHNvbWUgb3V0LW9mLWJhbmQgbWVjaGFuaXNtLCB1bmtub3duIHRvIHRoZSBlbXVsYXRvci4gVGhlIG1lbW9wIHNpZ25hbHMKKyAqICAgICBmYWlsdXJlIGJ5IHJldHVybmluZyBYODZFTVVMX1BST1BBR0FURV9GQVVMVCB0byB0aGUgZW11bGF0b3IsIHdoaWNoIHdpbGwKKyAqICAgICB0aGVuIGltbWVkaWF0ZWx5IGJhaWwuCisgKiAgMy4gVmFsaWQgYWNjZXNzIHNpemVzIGFyZSAxLCAyLCA0IGFuZCA4IGJ5dGVzLiBPbiB4ODYvMzIgc3lzdGVtcyBvbmx5CisgKiAgICAgY21weGNoZzhiX2VtdWxhdGVkIG5lZWQgc3VwcG9ydCA4LWJ5dGUgYWNjZXNzZXMuCisgKiAgNC4gVGhlIGVtdWxhdG9yIGNhbm5vdCBoYW5kbGUgNjQtYml0IG1vZGUgZW11bGF0aW9uIG9uIGFuIHg4Ni8zMiBzeXN0ZW0uCisgKi8KKy8qIEFjY2VzcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiBjb250aW51ZSBlbXVsYXRpb24gYXMgbm9ybWFsLiAqLworI2RlZmluZSBYODZFTVVMX0NPTlRJTlVFICAgICAgICAwCisvKiBBY2Nlc3MgaXMgdW5oYW5kbGVhYmxlOiBiYWlsIGZyb20gZW11bGF0aW9uIGFuZCByZXR1cm4gZXJyb3IgdG8gY2FsbGVyLiAqLworI2RlZmluZSBYODZFTVVMX1VOSEFORExFQUJMRSAgICAxCisvKiBUZXJtaW5hdGUgZW11bGF0aW9uIGJ1dCByZXR1cm4gc3VjY2VzcyB0byB0aGUgY2FsbGVyLiAqLworI2RlZmluZSBYODZFTVVMX1BST1BBR0FURV9GQVVMVCAyIC8qIHByb3BhZ2F0ZSBhIGdlbmVyYXRlZCBmYXVsdCB0byBndWVzdCAqLworI2RlZmluZSBYODZFTVVMX1JFVFJZX0lOU1RSICAgICAyIC8qIHJldHJ5IHRoZSBpbnN0cnVjdGlvbiBmb3Igc29tZSByZWFzb24gKi8KKyNkZWZpbmUgWDg2RU1VTF9DTVBYQ0hHX0ZBSUxFRCAgMiAvKiBjbXB4Y2hnIGRpZCBub3Qgc2VlIGV4cGVjdGVkIHZhbHVlICovCitzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIHsKKwkvKgorCSAqIHJlYWRfc3RkOiBSZWFkIGJ5dGVzIG9mIHN0YW5kYXJkIChub24tZW11bGF0ZWQvc3BlY2lhbCkgbWVtb3J5LgorCSAqICAgICAgICAgICBVc2VkIGZvciBpbnN0cnVjdGlvbiBmZXRjaCwgc3RhY2sgb3BlcmF0aW9ucywgYW5kIG90aGVycy4KKwkgKiAgQGFkZHI6ICBbSU4gXSBMaW5lYXIgYWRkcmVzcyBmcm9tIHdoaWNoIHRvIHJlYWQuCisJICogIEB2YWw6ICAgW09VVF0gVmFsdWUgcmVhZCBmcm9tIG1lbW9yeSwgemVyby1leHRlbmRlZCB0byAndV9sb25nJy4KKwkgKiAgQGJ5dGVzOiBbSU4gXSBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIG1lbW9yeS4KKwkgKi8KKwlpbnQgKCpyZWFkX3N0ZCkodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJdW5zaWduZWQgbG9uZyAqdmFsLAorCQkJdW5zaWduZWQgaW50IGJ5dGVzLCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqIGN0eHQpOworCisJLyoKKwkgKiB3cml0ZV9zdGQ6IFdyaXRlIGJ5dGVzIG9mIHN0YW5kYXJkIChub24tZW11bGF0ZWQvc3BlY2lhbCkgbWVtb3J5LgorCSAqICAgICAgICAgICAgVXNlZCBmb3Igc3RhY2sgb3BlcmF0aW9ucywgYW5kIG90aGVycy4KKwkgKiAgQGFkZHI6ICBbSU4gXSBMaW5lYXIgYWRkcmVzcyB0byB3aGljaCB0byB3cml0ZS4KKwkgKiAgQHZhbDogICBbSU4gXSBWYWx1ZSB0byB3cml0ZSB0byBtZW1vcnkgKGxvdy1vcmRlciBieXRlcyB1c2VkIGFzCisJICogICAgICAgICAgICAgICAgcmVxdWlyZWQpLgorCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byB3cml0ZSB0byBtZW1vcnkuCisJICovCisJaW50ICgqd3JpdGVfc3RkKSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgdW5zaWduZWQgaW50IGJ5dGVzLCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqIGN0eHQpOworCisJLyoKKwkgKiByZWFkX2VtdWxhdGVkOiBSZWFkIGJ5dGVzIGZyb20gZW11bGF0ZWQvc3BlY2lhbCBtZW1vcnkgYXJlYS4KKwkgKiAgQGFkZHI6ICBbSU4gXSBMaW5lYXIgYWRkcmVzcyBmcm9tIHdoaWNoIHRvIHJlYWQuCisJICogIEB2YWw6ICAgW09VVF0gVmFsdWUgcmVhZCBmcm9tIG1lbW9yeSwgemVyby1leHRlbmRlZCB0byAndV9sb25nJy4KKwkgKiAgQGJ5dGVzOiBbSU4gXSBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIG1lbW9yeS4KKwkgKi8KKwlpbnQgKCpyZWFkX2VtdWxhdGVkKSAodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqdmFsLAorCQkJICAgICAgdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKiBjdHh0KTsKKworCS8qCisJICogd3JpdGVfZW11bGF0ZWQ6IFJlYWQgYnl0ZXMgZnJvbSBlbXVsYXRlZC9zcGVjaWFsIG1lbW9yeSBhcmVhLgorCSAqICBAYWRkcjogIFtJTiBdIExpbmVhciBhZGRyZXNzIHRvIHdoaWNoIHRvIHdyaXRlLgorCSAqICBAdmFsOiAgIFtJTiBdIFZhbHVlIHRvIHdyaXRlIHRvIG1lbW9yeSAobG93LW9yZGVyIGJ5dGVzIHVzZWQgYXMKKwkgKiAgICAgICAgICAgICAgICByZXF1aXJlZCkuCisJICogIEBieXRlczogW0lOIF0gTnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlIHRvIG1lbW9yeS4KKwkgKi8KKwlpbnQgKCp3cml0ZV9lbXVsYXRlZCkgKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKiBjdHh0KTsKKworCS8qCisJICogY21weGNoZ19lbXVsYXRlZDogRW11bGF0ZSBhbiBhdG9taWMgKExPQ0tlZCkgQ01QWENIRyBvcGVyYXRpb24gb24gYW4KKwkgKiAgICAgICAgICAgICAgICAgICBlbXVsYXRlZC9zcGVjaWFsIG1lbW9yeSBhcmVhLgorCSAqICBAYWRkcjogIFtJTiBdIExpbmVhciBhZGRyZXNzIHRvIGFjY2Vzcy4KKwkgKiAgQG9sZDogICBbSU4gXSBWYWx1ZSBleHBlY3RlZCB0byBiZSBjdXJyZW50IGF0IEBhZGRyLgorCSAqICBAbmV3OiAgIFtJTiBdIFZhbHVlIHRvIHdyaXRlIHRvIEBhZGRyLgorCSAqICBAYnl0ZXM6IFtJTiBdIE51bWJlciBvZiBieXRlcyB0byBhY2Nlc3MgdXNpbmcgQ01QWENIRy4KKwkgKi8KKwlpbnQgKCpjbXB4Y2hnX2VtdWxhdGVkKSAodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSB1bnNpZ25lZCBsb25nIG9sZCwKKwkJCQkgdW5zaWduZWQgbG9uZyBuZXcsCisJCQkJIHVuc2lnbmVkIGludCBieXRlcywKKwkJCQkgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKiBjdHh0KTsKKworCS8qCisJICogY21weGNoZzhiX2VtdWxhdGVkOiBFbXVsYXRlIGFuIGF0b21pYyAoTE9DS2VkKSBDTVBYQ0hHOEIgb3BlcmF0aW9uIG9uIGFuCisJICogICAgICAgICAgICAgICAgICAgICBlbXVsYXRlZC9zcGVjaWFsIG1lbW9yeSBhcmVhLgorCSAqICBAYWRkcjogIFtJTiBdIExpbmVhciBhZGRyZXNzIHRvIGFjY2Vzcy4KKwkgKiAgQG9sZDogICBbSU4gXSBWYWx1ZSBleHBlY3RlZCB0byBiZSBjdXJyZW50IGF0IEBhZGRyLgorCSAqICBAbmV3OiAgIFtJTiBdIFZhbHVlIHRvIHdyaXRlIHRvIEBhZGRyLgorCSAqIE5PVEVTOgorCSAqICAxLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXZlciBjYWxsZWQgd2hlbiBlbXVsYXRpbmcgYSByZWFsIENNUFhDSEc4Qi4KKwkgKiAgMi4gVGhpcyBmdW5jdGlvbiBpcyAqbmV2ZXIqIGNhbGxlZCBvbiB4ODYvNjQgc3lzdGVtcy4KKwkgKiAgMi4gTm90IGRlZmluaW5nIHRoaXMgZnVuY3Rpb24gKGkuZS4sIHNwZWNpZnlpbmcgTlVMTCkgaXMgZXF1aXZhbGVudAorCSAqICAgICB0byBkZWZpbmluZyBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgWDg2RU1VTF9VTkhBTkRMRUFCTEUuCisJICovCisJaW50ICgqY21weGNoZzhiX2VtdWxhdGVkKSAodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2xkX2xvLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2xkX2hpLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgbmV3X2xvLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgbmV3X2hpLAorCQkJCSAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICogY3R4dCk7Cit9OworCitzdHJ1Y3QgY3B1X3VzZXJfcmVnczsKKworc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgeworCS8qIFJlZ2lzdGVyIHN0YXRlIGJlZm9yZS9hZnRlciBlbXVsYXRpb24uICovCisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCisJLyogTGluZWFyIGZhdWx0aW5nIGFkZHJlc3MgKGlmIGVtdWxhdGluZyBhIHBhZ2UtZmF1bHRpbmcgaW5zdHJ1Y3Rpb24pLiAqLworCXVuc2lnbmVkIGxvbmcgZWZsYWdzOworCXVuc2lnbmVkIGxvbmcgY3IyOworCisJLyogRW11bGF0ZWQgZXhlY3V0aW9uIG1vZGUsIHJlcHJlc2VudGVkIGJ5IGFuIFg4NkVNVUxfTU9ERSB2YWx1ZS4gKi8KKwlpbnQgbW9kZTsKKworCXVuc2lnbmVkIGxvbmcgY3NfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGRzX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBlc19iYXNlOworCXVuc2lnbmVkIGxvbmcgc3NfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGdzX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBmc19iYXNlOworfTsKKworLyogRXhlY3V0aW9uIG1vZGUsIHBhc3NlZCB0byB0aGUgZW11bGF0b3IuICovCisjZGVmaW5lIFg4NkVNVUxfTU9ERV9SRUFMICAgICAwCS8qIFJlYWwgbW9kZS4gICAgICAgICAgICAgKi8KKyNkZWZpbmUgWDg2RU1VTF9NT0RFX1BST1QxNiAgIDIJLyogMTYtYml0IHByb3RlY3RlZCBtb2RlLiAqLworI2RlZmluZSBYODZFTVVMX01PREVfUFJPVDMyICAgNAkvKiAzMi1iaXQgcHJvdGVjdGVkIG1vZGUuICovCisjZGVmaW5lIFg4NkVNVUxfTU9ERV9QUk9UNjQgICA4CS8qIDY0LWJpdCAobG9uZykgbW9kZS4gICAgKi8KKworLyogSG9zdCBleGVjdXRpb24gbW9kZS4gKi8KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQorI2RlZmluZSBYODZFTVVMX01PREVfSE9TVCBYODZFTVVMX01PREVfUFJPVDMyCisjZWxpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjZGVmaW5lIFg4NkVNVUxfTU9ERV9IT1NUIFg4NkVNVUxfTU9ERV9QUk9UNjQKKyNlbmRpZgorCisvKgorICogeDg2X2VtdWxhdGVfbWVtb3A6IEVtdWxhdGUgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBmYXVsdGVkIGF0dGVtcHRpbmcgdG8KKyAqICAgICAgICAgICAgICAgICAgICByZWFkL3dyaXRlIGEgJ3NwZWNpYWwnIG1lbW9yeSBhcmVhLgorICogUmV0dXJucyAtMSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuCisgKi8KK2ludCB4ODZfZW11bGF0ZV9tZW1vcChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKTsKKworLyoKKyAqIEdpdmVuIHRoZSAncmVnJyBwb3J0aW9uIG9mIGEgTW9kUk0gYnl0ZSwgYW5kIGEgcmVnaXN0ZXIgYmxvY2ssIHJldHVybiBhCisgKiBwb2ludGVyIGludG8gdGhlIGJsb2NrIHRoYXQgYWRkcmVzc2VzIHRoZSByZWxldmFudCByZWdpc3Rlci4KKyAqIEBoaWdoYnl0ZV9yZWdzIHNwZWNpZmllcyB3aGV0aGVyIHRvIGRlY29kZSBBSCxDSCxESCxCSC4KKyAqLwordm9pZCAqZGVjb2RlX3JlZ2lzdGVyKHU4IG1vZHJtX3JlZywgdW5zaWduZWQgbG9uZyAqcmVncywKKwkJICAgICAgaW50IGhpZ2hieXRlX3JlZ3MpOworCisjZW5kaWYJCQkJLyogX19YODZfRU1VTEFURV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9LY29uZmlnIGIvZHJpdmVycy9sZWRzL0tjb25maWcKaW5kZXggMTc2MTQyYy4uNzM5OWJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrIGIvZHJpdmVycy9sZWRzL0tjb25maWcKQEAgLTEyLDcgKzEyLDcgQEAKIAogY29uZmlnIExFRFNfQ0xBU1MKIAl0cmlzdGF0ZSAiTEVEIENsYXNzIFN1cHBvcnQiCi0JZGVwZW5kcyBORVdfTEVEUworCWRlcGVuZHMgb24gTkVXX0xFRFMKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBsZWQgc3lzZnMgY2xhc3MgaW4gL3N5cy9jbGFzcy9sZWRzLiAgWW91J2xsCiAJICBuZWVkIHRoaXMgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggTEVEcy4gIElmIHVuc3VyZSwgc2F5IE4uCkBAIC0yMSwyOCArMjEsMjggQEAKIAogY29uZmlnIExFRFNfQ09SR0kKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIHRoZSBTaGFycCBTTC1DN3gwIHNlcmllcyIKLQlkZXBlbmRzIExFRFNfQ0xBU1MgJiYgUFhBX1NIQVJQX0M3eHgKKwlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgUFhBX1NIQVJQX0M3eHgKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBMRURzIG9uIFNoYXJwIFphdXJ1cwogCSAgU0wtQzd4MCBzZXJpZXMgKEM3MDAsIEM3NTAsIEM3NjAsIEM4NjApLgogCiBjb25maWcgTEVEU19MT0NPTU8KIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIExvY29tbyBkZXZpY2UiCi0JZGVwZW5kcyBMRURTX0NMQVNTICYmIFNIQVJQX0xPQ09NTworCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBTSEFSUF9MT0NPTU8KIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBMRURzIG9uIFNoYXJwIExvY29tby4KIAkgIFphdXJ1cyBtb2RlbHMgU0wtNTUwMCBhbmQgU0wtNTYwMC4KIAogY29uZmlnIExFRFNfU1BJVFoKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIHRoZSBTaGFycCBTTC1DeHgwMCBzZXJpZXMiCi0JZGVwZW5kcyBMRURTX0NMQVNTICYmIFBYQV9TSEFSUF9DeHgwMAorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBQWEFfU0hBUlBfQ3h4MDAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBMRURzIG9uIFNoYXJwIFphdXJ1cwogCSAgU0wtQ3h4MDAgc2VyaWVzIChDMTAwMCwgQzMwMDAsIEMzMTAwKS4KIAogY29uZmlnIExFRFNfSVhQNFhYCiAJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IGZvciBHUElPIGNvbm5lY3RlZCBMRURzIG9uIElYUDRYWCBwcm9jZXNzb3JzIgotCWRlcGVuZHMgTEVEU19DTEFTUyAmJiBBUkNIX0lYUDRYWAorCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBBUkNIX0lYUDRYWAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIExFRHMgY29ubmVjdGVkIHRvIEdQSU8KIAkgIG91dHB1dHMgb2YgdGhlIEludGVsIElYUDRYWCBwcm9jZXNzb3JzLiAgVG8gYmUgdXNlZnVsIHRoZQpAQCAtNTEsNyArNTEsNyBAQAogCiBjb25maWcgTEVEU19UT1NBCiAJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IGZvciB0aGUgU2hhcnAgU0wtNjAwMCBzZXJpZXMiCi0JZGVwZW5kcyBMRURTX0NMQVNTICYmIFBYQV9TSEFSUFNMCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIFBYQV9TSEFSUFNMCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTEVEcyBvbiBTaGFycCBaYXVydXMKIAkgIFNMLTYwMDAgc2VyaWVzLgpAQCAtNjUsNyArNjUsNyBAQAogCiBjb25maWcgTEVEU19BTVNfREVMVEEKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIHRoZSBBbXN0cmFkIERlbHRhIChFMykiCi0JZGVwZW5kcyBMRURTX0NMQVNTICYmIE1BQ0hfQU1TX0RFTFRBCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIE1BQ0hfQU1TX0RFTFRBCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTEVEcyBvbiBBbXN0cmFkIERlbHRhIChFMykuCiAKQEAgLTg2LDcgKzg2LDcgQEAKIAogY29uZmlnIExFRFNfVFJJR0dFUlMKIAlib29sICJMRUQgVHJpZ2dlciBzdXBwb3J0IgotCWRlcGVuZHMgTkVXX0xFRFMKKwlkZXBlbmRzIG9uIE5FV19MRURTCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0cmlnZ2VyIHN1cHBvcnQgZm9yIHRoZSBsZWRzIGNsYXNzLgogCSAgVGhlc2UgdHJpZ2dlcnMgYWxsb3cga2VybmVsIGV2ZW50cyB0byBkcml2ZSB0aGUgTEVEcyBhbmQgY2FuCkBAIC05NCwyMSArOTQsMjEgQEAKIAogY29uZmlnIExFRFNfVFJJR0dFUl9USU1FUgogCXRyaXN0YXRlICJMRUQgVGltZXIgVHJpZ2dlciIKLQlkZXBlbmRzIExFRFNfVFJJR0dFUlMKKwlkZXBlbmRzIG9uIExFRFNfVFJJR0dFUlMKIAloZWxwCiAJICBUaGlzIGFsbG93cyBMRURzIHRvIGJlIGNvbnRyb2xsZWQgYnkgYSBwcm9ncmFtbWFibGUgdGltZXIKIAkgIHZpYSBzeXNmcy4gSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIExFRFNfVFJJR0dFUl9JREVfRElTSwogCWJvb2wgIkxFRCBJREUgRGlzayBUcmlnZ2VyIgotCWRlcGVuZHMgTEVEU19UUklHR0VSUyAmJiBCTEtfREVWX0lERURJU0sKKwlkZXBlbmRzIG9uIExFRFNfVFJJR0dFUlMgJiYgQkxLX0RFVl9JREVESVNLCiAJaGVscAogCSAgVGhpcyBhbGxvd3MgTEVEcyB0byBiZSBjb250cm9sbGVkIGJ5IElERSBkaXNrIGFjdGl2aXR5LgogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIExFRFNfVFJJR0dFUl9IRUFSVEJFQVQKIAl0cmlzdGF0ZSAiTEVEIEhlYXJ0YmVhdCBUcmlnZ2VyIgotCWRlcGVuZHMgTEVEU19UUklHR0VSUworCWRlcGVuZHMgb24gTEVEU19UUklHR0VSUwogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIExFRHMgdG8gYmUgY29udHJvbGxlZCBieSBhIENQVSBsb2FkIGF2ZXJhZ2UuCiAJICBUaGUgZmxhc2ggZnJlcXVlbmN5IGlzIGEgaHlwZXJib2xpYyBmdW5jdGlvbiBvZiB0aGUgMS1taW51dGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXMzYzI0eHguYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXMzYzI0eHguYwppbmRleCBmYjFlZGMxLi41MDkxNDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1zM2MyNHh4LmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCi0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9sZWRzLWdwaW8uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvS2NvbmZpZyBiL2RyaXZlcnMvbWFjaW50b3NoL0tjb25maWcKaW5kZXggOTJjY2VlOC4uYTllNzQ3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvS2NvbmZpZworKysgYi9kcml2ZXJzL21hY2ludG9zaC9LY29uZmlnCkBAIC0xNjIsNyArMTYyLDYgQEAKIAogY29uZmlnIE1BQ19FTVVNT1VTRUJUTgogCWJvb2wgIlN1cHBvcnQgZm9yIG1vdXNlIGJ1dHRvbiAyKzMgZW11bGF0aW9uIgotCWRlcGVuZHMgb24gSU5QVVRfQURCSElECiAJaGVscAogCSAgVGhpcyBwcm92aWRlcyBnZW5lcmljIHN1cHBvcnQgZm9yIGVtdWxhdGluZyB0aGUgMm5kIGFuZCAzcmQgbW91c2UKIAkgIGJ1dHRvbiB3aXRoIGtleXByZXNzZXMuICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIGVtdWxhdGlvbiBpcyBzdGlsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiLmMgYi9kcml2ZXJzL21hY2ludG9zaC9hZGIuYwppbmRleCBkNDNlYTgxLi43Y2VjNmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9hZGIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9hZGIuYwpAQCAtODI4LDcgKzgyOCw3IEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZiwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJlcSA9IChzdHJ1Y3QgYWRiX3JlcXVlc3QgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IGFkYl9yZXF1ZXN0KSwKKwlyZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRiX3JlcXVlc3QpLAogCQkJCQkgICAgIEdGUF9LRVJORUwpOwogCWlmIChyZXEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9hZGJoaWQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCmluZGV4IDUwNjZlN2EuLjFjN2Q2ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCkBAIC02ODksNyArNjg5LDYgQEAKIAlpZiAoIWhpZCB8fCAhaW5wdXRfZGV2KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKLQogCX0KIAogCXNwcmludGYoaGlkLT5waHlzLCAiYWRiJWQ6JWQuJTAyeC9pbnB1dCIsIGlkLCBkZWZhdWx0X2lkLCBvcmlnaW5hbF9oYW5kbGVyX2lkKTsKQEAgLTgwNyw3ICs4MDYsOSBAQAogCiAJaW5wdXRfZGV2LT5rZXljb2RlID0gaGlkLT5rZXljb2RlOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsOwogCiAJaWYgKGRlZmF1bHRfaWQgPT0gQURCX0tFWUJPQVJEKSB7CiAJCS8qIEhBQ0sgV0FSTklORyEhIFRoaXMgc2hvdWxkIGdvIGF3YXkgYXMgc29vbiB0aGVyZSBpcyBhbiB1dGlsaXR5CkBAIC04MjAsNyArODIxLDEwIEBACiAJcmV0dXJuIDA7CiAKICBmYWlsOglpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwotCWtmcmVlKGhpZCk7CisJaWYgKGhpZCkgeworCQlrZnJlZShoaWQtPmtleWNvZGUpOworCQlrZnJlZShoaWQpOworCX0KIAlhZGJoaWRbaWRdID0gTlVMTDsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvYXBtX2VtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvYXBtX2VtdS5jCmluZGV4IDg4NjJhODMuLjQzMDBjNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FwbV9lbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9hcG1fZW11LmMKQEAgLTMyMSw3ICszMjEsNyBAQAogewogCXN0cnVjdCBhcG1fdXNlciAqCWFzOwogCi0JYXMgPSAoc3RydWN0IGFwbV91c2VyICopa21hbGxvYyhzaXplb2YoKmFzKSwgR0ZQX0tFUk5FTCk7CisJYXMgPSBrbWFsbG9jKHNpemVvZigqYXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYXMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImFwbTogY2Fubm90IGFsbG9jYXRlIHN0cnVjdCBvZiBzaXplICVkIGJ5dGVzXG4iLAogCQkgICAgICAgc2l6ZW9mKCphcykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jCmluZGV4IDZiMTI5ZWUuLmVlNmI0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL21hY19oaWQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNfaGlkLmMKQEAgLTEwNiw2ICsxMDYsOCBAQAogCiBzdGF0aWMgaW50IGVtdW1vdXNlYnRuX2lucHV0X3JlZ2lzdGVyKHZvaWQpCiB7CisJaW50IHJldDsKKwogCWVtdW1vdXNlYnRuID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFlbXVtb3VzZWJ0bikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjAsOSArMTIyLDExIEBACiAJZW11bW91c2VidG4tPmtleWJpdFtMT05HKEJUTl9NT1VTRSldID0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fTUlERExFKSB8IEJJVChCVE5fUklHSFQpOwogCWVtdW1vdXNlYnRuLT5yZWxiaXRbMF0gPSBCSVQoUkVMX1gpIHwgQklUKFJFTF9ZKTsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShlbXVtb3VzZWJ0bik7CisJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGVtdW1vdXNlYnRuKTsKKwlpZiAocmV0KQorCQlpbnB1dF9mcmVlX2RldmljZShlbXVtb3VzZWJ0bik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgX19pbml0IG1hY19oaWRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvc211LmMgYi9kcml2ZXJzL21hY2ludG9zaC9zbXUuYwppbmRleCA2ZGRlMjdhLi42ZjMwNDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9zbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9zbXUuYwpAQCAtOTQ1LDcgKzk0NSw3IEBACiAJICovCiAJdGxlbiA9IHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpICsgbGVuICsgMTg7CiAKLQlwcm9wID0ga2NhbGxvYyh0bGVuLCAxLCBHRlBfS0VSTkVMKTsKKwlwcm9wID0ga3phbGxvYyh0bGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJvcCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAloZHIgPSAoc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqKShwcm9wICsgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYwppbmRleCA2YzI5ZmU3Li44MDFhOTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCiAJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicG11YmwiKTsKIAotCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBOVUxMLCAmcG11X2JhY2tsaWdodF9kYXRhKTsKKwliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgTlVMTCwgTlVMTCwgJnBtdV9iYWNrbGlnaHRfZGF0YSk7CiAJaWYgKElTX0VSUihiZCkpIHsKIAkJcHJpbnRrKCJwbXVibDogQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCmluZGV4IGM4NTU4ZDQuLjhjYTc1ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdTY4ay5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdTY4ay5jCmluZGV4IGQ5OTg2ZjMuLjkzZTZlZjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11NjhrLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdTY4ay5jCkBAIC04NDcsNyArODQ3LDcgQEAKIAluX3Bib29rX3BjaV9zYXZlcyA9IG5wY2k7CiAJaWYgKG5wY2kgPT0gMCkKIAkJcmV0dXJuOwotCXBzID0gKHN0cnVjdCBwY2lfc2F2ZSAqKSBrbWFsbG9jKG5wY2kgKiBzaXplb2YoKnBzKSwgR0ZQX0tFUk5FTCk7CisJcHMgPSBrbWFsbG9jKG5wY2kgKiBzaXplb2YoKnBzKSwgR0ZQX0tFUk5FTCk7CiAJcGJvb2tfcGNpX3NhdmVzID0gcHM7CiAJaWYgKHBzID09IE5VTEwpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvS2NvbmZpZyBiL2RyaXZlcnMvbWQvS2NvbmZpZwppbmRleCBjOTJjMTUyLi40NTQwYWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL0tjb25maWcKKysrIGIvZHJpdmVycy9tZC9LY29uZmlnCkBAIC0yMTUsNiArMjE1LDcgQEAKIAl0cmlzdGF0ZSAiQ3J5cHQgdGFyZ2V0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCTEtfREVWX0RNICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0NCQwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZGV2aWNlLW1hcHBlciB0YXJnZXQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBkZXZpY2UgdGhhdAogCSAgdHJhbnNwYXJlbnRseSBlbmNyeXB0cyB0aGUgZGF0YSBvbiBpdC4gWW91J2xsIG5lZWQgdG8gYWN0aXZhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvYml0bWFwLmMgYi9kcml2ZXJzL21kL2JpdG1hcC5jCmluZGV4IGQ2ZjYxNDcuLjExMTA4MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvYml0bWFwLmMKKysrIGIvZHJpdmVycy9tZC9iaXRtYXAuYwpAQCAtMjEyLDggKzIxMiw4IEBACiAJaWYgKCFidWYpCiAJCXJldHVybiBOVUxMOwogCi0JZCA9IGZpbGUtPmZfZGVudHJ5OwotCXYgPSBmaWxlLT5mX3Zmc21udDsKKwlkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKKwl2ID0gZmlsZS0+Zl9wYXRoLm1udDsKIAogCWJ1ZiA9IGRfcGF0aChkLCB2LCBidWYsIGNvdW50KTsKIApAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50KQogewogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzZWN0b3JfdCBibG9jazsKIApAQCAtNDc5LDkgKzQ3OSwxMiBAQAogCWludCBlcnIgPSAtRUlOVkFMOwogCiAJLyogcGFnZSAwIGlzIHRoZSBzdXBlcmJsb2NrLCByZWFkIGl0Li4uICovCi0JaWYgKGJpdG1hcC0+ZmlsZSkKLQkJYml0bWFwLT5zYl9wYWdlID0gcmVhZF9wYWdlKGJpdG1hcC0+ZmlsZSwgMCwgYml0bWFwLCBQQUdFX1NJWkUpOwotCWVsc2UgeworCWlmIChiaXRtYXAtPmZpbGUpIHsKKwkJbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoYml0bWFwLT5maWxlLT5mX21hcHBpbmctPmhvc3QpOworCQlpbnQgYnl0ZXMgPSBpc2l6ZSA+IFBBR0VfU0laRSA/IFBBR0VfU0laRSA6IGlzaXplOworCisJCWJpdG1hcC0+c2JfcGFnZSA9IHJlYWRfcGFnZShiaXRtYXAtPmZpbGUsIDAsIGJpdG1hcCwgYnl0ZXMpOworCX0gZWxzZSB7CiAJCWJpdG1hcC0+c2JfcGFnZSA9IHJlYWRfc2JfcGFnZShiaXRtYXAtPm1kZGV2LCBiaXRtYXAtPm9mZnNldCwgMCk7CiAJfQogCWlmIChJU19FUlIoYml0bWFwLT5zYl9wYWdlKSkgewpAQCAtNjYyLDcgKzY2NSw3IEBACiAJYml0bWFwX2ZpbGVfdW5tYXAoYml0bWFwKTsKIAogCWlmIChmaWxlKSB7Ci0JCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMoaW5vZGUtPmlfbWFwcGluZyk7CiAJCWZwdXQoZmlsZSk7CiAJfQpAQCAtODc3LDcgKzg4MCw4IEBACiAJCQlpbnQgY291bnQ7CiAJCQkvKiB1bm1hcCB0aGUgb2xkIHBhZ2UsIHdlJ3JlIGRvbmUgd2l0aCBpdCAqLwogCQkJaWYgKGluZGV4ID09IG51bV9wYWdlcy0xKQotCQkJCWNvdW50ID0gYnl0ZXMgLSBpbmRleCAqIFBBR0VfU0laRTsKKwkJCQljb3VudCA9IGJ5dGVzICsgc2l6ZW9mKGJpdG1hcF9zdXBlcl90KQorCQkJCQktIGluZGV4ICogUEFHRV9TSVpFOwogCQkJZWxzZQogCQkJCWNvdW50ID0gUEFHRV9TSVpFOwogCQkJaWYgKGluZGV4ID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaCBiL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaAppbmRleCBiYmY0NjE1Li5kYTQzNDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWJpby1saXN0LmgKKysrIGIvZHJpdmVycy9tZC9kbS1iaW8tbGlzdC5oCkBAIC00NCw2ICs0NCwyMCBAQAogCWJsLT50YWlsID0gYmwyLT50YWlsOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2xpc3RfbWVyZ2VfaGVhZChzdHJ1Y3QgYmlvX2xpc3QgKmJsLAorCQkJCSAgICAgICBzdHJ1Y3QgYmlvX2xpc3QgKmJsMikKK3sKKwlpZiAoIWJsMi0+aGVhZCkKKwkJcmV0dXJuOworCisJaWYgKGJsLT5oZWFkKQorCQlibDItPnRhaWwtPmJpX25leHQgPSBibC0+aGVhZDsKKwllbHNlCisJCWJsLT50YWlsID0gYmwyLT50YWlsOworCisJYmwtPmhlYWQgPSBibDItPmhlYWQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJpbyAqYmlvX2xpc3RfcG9wKHN0cnVjdCBiaW9fbGlzdCAqYmwpCiB7CiAJc3RydWN0IGJpbyAqYmlvID0gYmwtPmhlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggYTEwODZlZS4uNGMyNDcxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJCQkgICAgICBjb25zdCBjaGFyICpvcHRzKQogewogCXVuc2lnbmVkIGludCBicyA9IGNyeXB0b19ibGtjaXBoZXJfYmxvY2tzaXplKGNjLT50Zm0pOwotCWludCBsb2cgPSBsb25nX2xvZzIoYnMpOworCWludCBsb2cgPSBpbG9nMihicyk7CiAKIAkvKiB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBob3cgZmFyIHdlIG11c3Qgc2hpZnQgdGhlIHNlY3RvciBjb3VudAogCSAqIHRvIGdldCB0aGUgY2lwaGVyIGJsb2NrIGNvdW50LCB3ZSB1c2UgdGhpcyBzaGlmdCBpbiBfZ2VuICovCkBAIC05NjIsNyArOTYyLDcgQEAKIAlhdG9taWNfc2V0KCZpby0+cGVuZGluZywgMCk7CiAJa2NyeXB0ZF9xdWV1ZV9pbyhpbyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gRE1fTUFQSU9fU1VCTUlUVEVEOwogfQogCiBzdGF0aWMgaW50IGNyeXB0X3N0YXR1cyhzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RhdHVzX3R5cGVfdCB0eXBlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1lbWMuYyBiL2RyaXZlcnMvbWQvZG0tZW1jLmMKaW5kZXggMmIyZDQ1ZDcuLjI2NWM0NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZW1jLmMKKysrIGIvZHJpdmVycy9tZC9kbS1lbWMuYwpAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgaW50IGVtY19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBieXRlc19kb25lLCBpbnQgZXJyb3IpCiB7Ci0Jc3RydWN0IHBhdGggKnBhdGggPSBiaW8tPmJpX3ByaXZhdGU7CisJc3RydWN0IGRtX3BhdGggKnBhdGggPSBiaW8tPmJpX3ByaXZhdGU7CiAKIAlpZiAoYmlvLT5iaV9zaXplKQogCQlyZXR1cm4gMTsKQEAgLTYxLDcgKzYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBiaW8gKmdldF9mYWlsb3Zlcl9iaW8oc3RydWN0IHBhdGggKnBhdGgsIHVuc2lnbmVkIGRhdGFfc2l6ZSkKK3N0YXRpYyBzdHJ1Y3QgYmlvICpnZXRfZmFpbG92ZXJfYmlvKHN0cnVjdCBkbV9wYXRoICpwYXRoLCB1bnNpZ25lZCBkYXRhX3NpemUpCiB7CiAJc3RydWN0IGJpbyAqYmlvOwogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtOTYsNyArOTYsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJlcXVlc3QgKmdldF9mYWlsb3Zlcl9yZXEoc3RydWN0IGVtY19oYW5kbGVyICpoLAotCQkJCQlzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBwYXRoICpwYXRoKQorCQkJCQlzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBkbV9wYXRoICpwYXRoKQogewogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gYmlvLT5iaV9iZGV2OwpAQCAtMTMzLDcgKzEzMyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqZW1jX3RyZXNwYXNzX2dldChzdHJ1Y3QgZW1jX2hhbmRsZXIgKmgsCi0JCQkJCXN0cnVjdCBwYXRoICpwYXRoKQorCQkJCQlzdHJ1Y3QgZG1fcGF0aCAqcGF0aCkKIHsKIAlzdHJ1Y3QgYmlvICpiaW87CiAJc3RydWN0IHJlcXVlc3QgKnJxOwpAQCAtMTkxLDcgKzE5MSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGVtY19wZ19pbml0KHN0cnVjdCBod19oYW5kbGVyICpod2gsIHVuc2lnbmVkIGJ5cGFzc2VkLAotCQkJc3RydWN0IHBhdGggKnBhdGgpCisJCQlzdHJ1Y3QgZG1fcGF0aCAqcGF0aCkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShwYXRoLT5kZXYtPmJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1ody1oYW5kbGVyLmggYi9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuaAppbmRleCAxNWY1NjI5Li4zMmVmZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuaAorKysgYi9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuaApAQCAtMzIsNyArMzIsNyBAQAogCXZvaWQgKCpkZXN0cm95KSAoc3RydWN0IGh3X2hhbmRsZXIgKmh3aCk7CiAKIAl2b2lkICgqcGdfaW5pdCkgKHN0cnVjdCBod19oYW5kbGVyICpod2gsIHVuc2lnbmVkIGJ5cGFzc2VkLAotCQkJIHN0cnVjdCBwYXRoICpwYXRoKTsKKwkJCSBzdHJ1Y3QgZG1fcGF0aCAqcGF0aCk7CiAJdW5zaWduZWQgKCplcnJvcikgKHN0cnVjdCBod19oYW5kbGVyICpod2gsIHN0cnVjdCBiaW8gKmJpbyk7CiAJaW50ICgqc3RhdHVzKSAoc3RydWN0IGh3X2hhbmRsZXIgKmh3aCwgc3RhdHVzX3R5cGVfdCB0eXBlLAogCQkgICAgICAgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgbWF4bGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8uYyBiL2RyaXZlcnMvbWQvZG0taW8uYwppbmRleCBkYTY2M2QyLi40ZWI3M2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pby5jCkBAIC05MiwxMiArOTIsMTIgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fc2V0X3JlZ2lvbihzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIHJlZ2lvbikKIHsKLQliaW8tPmJpX2lvX3ZlY1tiaW8tPmJpX21heF92ZWNzIC0gMV0uYnZfbGVuID0gcmVnaW9uOworCWJpby0+YmlfaW9fdmVjW2Jpby0+YmlfbWF4X3ZlY3NdLmJ2X2xlbiA9IHJlZ2lvbjsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBiaW9fZ2V0X3JlZ2lvbihzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JcmV0dXJuIGJpby0+YmlfaW9fdmVjW2Jpby0+YmlfbWF4X3ZlY3MgLSAxXS5idl9sZW47CisJcmV0dXJuIGJpby0+YmlfaW9fdmVjW2Jpby0+YmlfbWF4X3ZlY3NdLmJ2X2xlbjsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM2LDYgKzEzNiw3IEBACiAJCXplcm9fZmlsbF9iaW8oYmlvKTsKIAogCWRlY19jb3VudChpbywgYmlvX2dldF9yZWdpb24oYmlvKSwgZXJyb3IpOworCWJpby0+YmlfbWF4X3ZlY3MrKzsKIAliaW9fcHV0KGJpbyk7CiAKIAlyZXR1cm4gMDsKQEAgLTI1MCwxNiArMjUxLDE4IEBACiAKIAl3aGlsZSAocmVtYWluaW5nKSB7CiAJCS8qCi0JCSAqIEFsbG9jYXRlIGEgc3VpdGFibHkgc2l6ZWQgYmlvLCB3ZSBhZGQgYW4gZXh0cmEKLQkJICogYnZlYyBmb3IgYmlvX2dldC9zZXRfcmVnaW9uKCkuCisJCSAqIEFsbG9jYXRlIGEgc3VpdGFibHkgc2l6ZWQtYmlvOiB3ZSBhZGQgYW4gZXh0cmEKKwkJICogYnZlYyBmb3IgYmlvX2dldC9zZXRfcmVnaW9uKCkgYW5kIGRlY3JlbWVudCBiaV9tYXhfdmVjcworCQkgKiB0byBoaWRlIGl0IGZyb20gYmlvX2FkZF9wYWdlKCkuCiAJCSAqLwotCQludW1fYnZlY3MgPSAocmVtYWluaW5nIC8gKFBBR0VfU0laRSA+PiA5KSkgKyAyOworCQludW1fYnZlY3MgPSAocmVtYWluaW5nIC8gKFBBR0VfU0laRSA+PiBTRUNUT1JfU0hJRlQpKSArIDI7CiAJCWJpbyA9IGJpb19hbGxvY19iaW9zZXQoR0ZQX05PSU8sIG51bV9idmVjcywgX2Jpb3MpOwogCQliaW8tPmJpX3NlY3RvciA9IHdoZXJlLT5zZWN0b3IgKyAod2hlcmUtPmNvdW50IC0gcmVtYWluaW5nKTsKIAkJYmlvLT5iaV9iZGV2ID0gd2hlcmUtPmJkZXY7CiAJCWJpby0+YmlfZW5kX2lvID0gZW5kaW87CiAJCWJpby0+YmlfcHJpdmF0ZSA9IGlvOwogCQliaW8tPmJpX2Rlc3RydWN0b3IgPSBkbV9iaW9fZGVzdHJ1Y3RvcjsKKwkJYmlvLT5iaV9tYXhfdmVjcy0tOwogCQliaW9fc2V0X3JlZ2lvbihiaW8sIHJlZ2lvbik7CiAKIAkJLyoKQEAgLTMwMiw3ICszMDUsNyBAQAogCX0KIAogCS8qCi0JICogRHJvcCB0aGUgZXh0cmEgcmVmZW5jZSB0aGF0IHdlIHdlcmUgaG9sZGluZyB0byBhdm9pZAorCSAqIERyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSB0aGF0IHdlIHdlcmUgaG9sZGluZyB0byBhdm9pZAogCSAqIHRoZSBpbyBiZWluZyBjb21wbGV0ZWQgdG9vIGVhcmx5LgogCSAqLwogCWRlY19jb3VudChpbywgMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKaW5kZXggNDUxMGFkOC4uY2Q2YTE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwpAQCAtNzY1LDcgKzc2NSw3IEBACiBzdGF0aWMgaW50IGRvX3N1c3BlbmQoc3RydWN0IGRtX2lvY3RsICpwYXJhbSkKIHsKIAlpbnQgciA9IDA7Ci0JaW50IGRvX2xvY2tmcyA9IDE7CisJdW5zaWduZWQgc3VzcGVuZF9mbGFncyA9IERNX1NVU1BFTkRfTE9DS0ZTX0ZMQUc7CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kOwogCiAJbWQgPSBmaW5kX2RldmljZShwYXJhbSk7CkBAIC03NzMsMTAgKzc3MywxMiBAQAogCQlyZXR1cm4gLUVOWElPOwogCiAJaWYgKHBhcmFtLT5mbGFncyAmIERNX1NLSVBfTE9DS0ZTX0ZMQUcpCi0JCWRvX2xvY2tmcyA9IDA7CisJCXN1c3BlbmRfZmxhZ3MgJj0gfkRNX1NVU1BFTkRfTE9DS0ZTX0ZMQUc7CisJaWYgKHBhcmFtLT5mbGFncyAmIERNX05PRkxVU0hfRkxBRykKKwkJc3VzcGVuZF9mbGFncyB8PSBETV9TVVNQRU5EX05PRkxVU0hfRkxBRzsKIAogCWlmICghZG1fc3VzcGVuZGVkKG1kKSkKLQkJciA9IGRtX3N1c3BlbmQobWQsIGRvX2xvY2tmcyk7CisJCXIgPSBkbV9zdXNwZW5kKG1kLCBzdXNwZW5kX2ZsYWdzKTsKIAogCWlmICghcikKIAkJciA9IF9fZGV2X3N0YXR1cyhtZCwgcGFyYW0pOwpAQCAtNzg4LDcgKzc5MCw3IEBACiBzdGF0aWMgaW50IGRvX3Jlc3VtZShzdHJ1Y3QgZG1faW9jdGwgKnBhcmFtKQogewogCWludCByID0gMDsKLQlpbnQgZG9fbG9ja2ZzID0gMTsKKwl1bnNpZ25lZCBzdXNwZW5kX2ZsYWdzID0gRE1fU1VTUEVORF9MT0NLRlNfRkxBRzsKIAlzdHJ1Y3QgaGFzaF9jZWxsICpoYzsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQ7CiAJc3RydWN0IGRtX3RhYmxlICpuZXdfbWFwOwpAQCAtODE0LDkgKzgxNiwxMSBAQAogCWlmIChuZXdfbWFwKSB7CiAJCS8qIFN1c3BlbmQgaWYgaXQgaXNuJ3QgYWxyZWFkeSBzdXNwZW5kZWQgKi8KIAkJaWYgKHBhcmFtLT5mbGFncyAmIERNX1NLSVBfTE9DS0ZTX0ZMQUcpCi0JCQlkb19sb2NrZnMgPSAwOworCQkJc3VzcGVuZF9mbGFncyAmPSB+RE1fU1VTUEVORF9MT0NLRlNfRkxBRzsKKwkJaWYgKHBhcmFtLT5mbGFncyAmIERNX05PRkxVU0hfRkxBRykKKwkJCXN1c3BlbmRfZmxhZ3MgfD0gRE1fU1VTUEVORF9OT0ZMVVNIX0ZMQUc7CiAJCWlmICghZG1fc3VzcGVuZGVkKG1kKSkKLQkJCWRtX3N1c3BlbmQobWQsIGRvX2xvY2tmcyk7CisJCQlkbV9zdXNwZW5kKG1kLCBzdXNwZW5kX2ZsYWdzKTsKIAogCQlyID0gZG1fc3dhcF90YWJsZShtZCwgbmV3X21hcCk7CiAJCWlmIChyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxpbmVhci5jIGIvZHJpdmVycy9tZC9kbS1saW5lYXIuYwppbmRleCAwMDIzNDkwLi4xNzc1M2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxpbmVhci5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbGluZWFyLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAliaW8tPmJpX2JkZXYgPSBsYy0+ZGV2LT5iZGV2OwogCWJpby0+Ymlfc2VjdG9yID0gbGMtPnN0YXJ0ICsgKGJpby0+Ymlfc2VjdG9yIC0gdGktPmJlZ2luKTsKIAotCXJldHVybiAxOworCXJldHVybiBETV9NQVBJT19SRU1BUFBFRDsKIH0KIAogc3RhdGljIGludCBsaW5lYXJfc3RhdHVzKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdGF0dXNfdHlwZV90IHR5cGUsCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5IGZha2VfZGVudHJ5ID0ge307CiAKIAlmYWtlX2ZpbGUuZl9tb2RlID0gbGMtPmRldi0+bW9kZTsKLQlmYWtlX2ZpbGUuZl9kZW50cnkgPSAmZmFrZV9kZW50cnk7CisJZmFrZV9maWxlLmZfcGF0aC5kZW50cnkgPSAmZmFrZV9kZW50cnk7CiAJZmFrZV9kZW50cnkuZF9pbm9kZSA9IGJkZXYtPmJkX2lub2RlOwogCiAJcmV0dXJuIGJsa2Rldl9kcml2ZXJfaW9jdGwoYmRldi0+YmRfaW5vZGUsICZmYWtlX2ZpbGUsIGJkZXYtPmJkX2Rpc2ssIGNtZCwgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbG9nLmMgYi9kcml2ZXJzL21kL2RtLWxvZy5jCmluZGV4IDY0Yjc2NGIuLjZhOTI2MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbG9nLmMKKysrIGIvZHJpdmVycy9tZC9kbS1sb2cuYwpAQCAtNDY2LDYgKzQ2Niw3IEBACiAJLyogY29weSBjbGVhbiBhY3Jvc3MgdG8gc3luYyAqLwogCW1lbWNweShsYy0+c3luY19iaXRzLCBsYy0+Y2xlYW5fYml0cywgc2l6ZSk7CiAJbGMtPnN5bmNfY291bnQgPSBjb3VudF9iaXRzMzIobGMtPmNsZWFuX2JpdHMsIGxjLT5iaXRzZXRfdWludDMyX2NvdW50KTsKKwlsYy0+c3luY19zZWFyY2ggPSAwOwogCiAJLyogc2V0IHRoZSBjb3JyZWN0IG51bWJlciBvZiByZWdpb25zIGluIHRoZSBoZWFkZXIgKi8KIAlsYy0+aGVhZGVyLm5yX3JlZ2lvbnMgPSBsYy0+cmVnaW9uX2NvdW50OwpAQCAtNDgwLDYgKzQ4MSwxMyBAQAogCXJldHVybiBsYy0+cmVnaW9uX3NpemU7CiB9CiAKK3N0YXRpYyBpbnQgY29yZV9yZXN1bWUoc3RydWN0IGRpcnR5X2xvZyAqbG9nKQoreworCXN0cnVjdCBsb2dfYyAqbGMgPSAoc3RydWN0IGxvZ19jICopIGxvZy0+Y29udGV4dDsKKwlsYy0+c3luY19zZWFyY2ggPSAwOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGNvcmVfaXNfY2xlYW4oc3RydWN0IGRpcnR5X2xvZyAqbG9nLCByZWdpb25fdCByZWdpb24pCiB7CiAJc3RydWN0IGxvZ19jICpsYyA9IChzdHJ1Y3QgbG9nX2MgKikgbG9nLT5jb250ZXh0OwpAQCAtNTQ5LDE2ICs1NTcsMTkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgY29yZV9jb21wbGV0ZV9yZXN5bmNfd29yayhzdHJ1Y3QgZGlydHlfbG9nICpsb2csIHJlZ2lvbl90IHJlZ2lvbiwKLQkJCQkgICAgICBpbnQgc3VjY2VzcykKK3N0YXRpYyB2b2lkIGNvcmVfc2V0X3JlZ2lvbl9zeW5jKHN0cnVjdCBkaXJ0eV9sb2cgKmxvZywgcmVnaW9uX3QgcmVnaW9uLAorCQkJCSBpbnQgaW5fc3luYykKIHsKIAlzdHJ1Y3QgbG9nX2MgKmxjID0gKHN0cnVjdCBsb2dfYyAqKSBsb2ctPmNvbnRleHQ7CiAKIAlsb2dfY2xlYXJfYml0KGxjLCBsYy0+cmVjb3ZlcmluZ19iaXRzLCByZWdpb24pOwotCWlmIChzdWNjZXNzKSB7CisJaWYgKGluX3N5bmMpIHsKIAkJbG9nX3NldF9iaXQobGMsIGxjLT5zeW5jX2JpdHMsIHJlZ2lvbik7CiAgICAgICAgICAgICAgICAgbGMtPnN5bmNfY291bnQrKzsKLSAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGxvZ190ZXN0X2JpdChsYy0+c3luY19iaXRzLCByZWdpb24pKSB7CisJCWxjLT5zeW5jX2NvdW50LS07CisJCWxvZ19jbGVhcl9iaXQobGMsIGxjLT5zeW5jX2JpdHMsIHJlZ2lvbik7CisJfQogfQogCiBzdGF0aWMgcmVnaW9uX3QgY29yZV9nZXRfc3luY19jb3VudChzdHJ1Y3QgZGlydHlfbG9nICpsb2cpCkBAIC02MTgsNiArNjI5LDcgQEAKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiAJLmN0ciA9IGNvcmVfY3RyLAogCS5kdHIgPSBjb3JlX2R0ciwKKwkucmVzdW1lID0gY29yZV9yZXN1bWUsCiAJLmdldF9yZWdpb25fc2l6ZSA9IGNvcmVfZ2V0X3JlZ2lvbl9zaXplLAogCS5pc19jbGVhbiA9IGNvcmVfaXNfY2xlYW4sCiAJLmluX3N5bmMgPSBjb3JlX2luX3N5bmMsCkBAIC02MjUsNyArNjM3LDcgQEAKIAkubWFya19yZWdpb24gPSBjb3JlX21hcmtfcmVnaW9uLAogCS5jbGVhcl9yZWdpb24gPSBjb3JlX2NsZWFyX3JlZ2lvbiwKIAkuZ2V0X3Jlc3luY193b3JrID0gY29yZV9nZXRfcmVzeW5jX3dvcmssCi0JLmNvbXBsZXRlX3Jlc3luY193b3JrID0gY29yZV9jb21wbGV0ZV9yZXN5bmNfd29yaywKKwkuc2V0X3JlZ2lvbl9zeW5jID0gY29yZV9zZXRfcmVnaW9uX3N5bmMsCiAJLmdldF9zeW5jX2NvdW50ID0gY29yZV9nZXRfc3luY19jb3VudCwKIAkuc3RhdHVzID0gY29yZV9zdGF0dXMsCiB9OwpAQCAtNjQ0LDcgKzY1Niw3IEBACiAJLm1hcmtfcmVnaW9uID0gY29yZV9tYXJrX3JlZ2lvbiwKIAkuY2xlYXJfcmVnaW9uID0gY29yZV9jbGVhcl9yZWdpb24sCiAJLmdldF9yZXN5bmNfd29yayA9IGNvcmVfZ2V0X3Jlc3luY193b3JrLAotCS5jb21wbGV0ZV9yZXN5bmNfd29yayA9IGNvcmVfY29tcGxldGVfcmVzeW5jX3dvcmssCisJLnNldF9yZWdpb25fc3luYyA9IGNvcmVfc2V0X3JlZ2lvbl9zeW5jLAogCS5nZXRfc3luY19jb3VudCA9IGNvcmVfZ2V0X3N5bmNfY291bnQsCiAJLnN0YXR1cyA9IGRpc2tfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbG9nLmggYi9kcml2ZXJzL21kL2RtLWxvZy5oCmluZGV4IDVhZTUzMDkuLjg2YTMwMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbG9nLmgKKysrIGIvZHJpdmVycy9tZC9kbS1sb2cuaApAQCAtOTAsMTIgKzkwLDEyIEBACiAJaW50ICgqZ2V0X3Jlc3luY193b3JrKShzdHJ1Y3QgZGlydHlfbG9nICpsb2csIHJlZ2lvbl90ICpyZWdpb24pOwogCiAJLyoKLQkgKiBUaGlzIG5vdGlmaWVzIHRoZSBsb2cgdGhhdCB0aGUgcmVzeW5jIG9mIGFuIGFyZWEgaGFzCi0JICogYmVlbiBjb21wbGV0ZWQuICBUaGUgbG9nIHNob3VsZCB0aGVuIG1hcmsgdGhpcyByZWdpb24KLQkgKiBhcyBDTEVBTi4KKwkgKiBUaGlzIG5vdGlmaWVzIHRoZSBsb2cgdGhhdCB0aGUgcmVzeW5jIHN0YXR1cyBvZiBhIHJlZ2lvbgorCSAqIGhhcyBjaGFuZ2VkLiAgSXQgYWxzbyBjbGVhcnMgdGhlIHJlZ2lvbiBmcm9tIHRoZSByZWNvdmVyaW5nCisJICogbGlzdCAoaWYgcHJlc2VudCkuCiAJICovCi0Jdm9pZCAoKmNvbXBsZXRlX3Jlc3luY193b3JrKShzdHJ1Y3QgZGlydHlfbG9nICpsb2csCi0JCQkJICAgICByZWdpb25fdCByZWdpb24sIGludCBzdWNjZXNzKTsKKwl2b2lkICgqc2V0X3JlZ2lvbl9zeW5jKShzdHJ1Y3QgZGlydHlfbG9nICpsb2csCisJCQkJcmVnaW9uX3QgcmVnaW9uLCBpbnQgaW5fc3luYyk7CiAKICAgICAgICAgLyoKIAkgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVnaW9ucyB0aGF0IGFyZSBpbiBzeW5jLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCmluZGV4IGNmOGJmMDUuLjNhYTAxMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYworKysgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlzdHJ1Y3QgcHJpb3JpdHlfZ3JvdXAgKnBnOwkvKiBPd25pbmcgUEcgKi8KIAl1bnNpZ25lZCBmYWlsX2NvdW50OwkJLyogQ3VtdWxhdGl2ZSBmYWlsdXJlIGNvdW50ICovCiAKLQlzdHJ1Y3QgcGF0aCBwYXRoOworCXN0cnVjdCBkbV9wYXRoIHBhdGg7CiB9OwogCiAjZGVmaW5lIHBhdGhfdG9fcGdwYXRoKF9fcGdwKSBjb250YWluZXJfb2YoKF9fcGdwKSwgc3RydWN0IHBncGF0aCwgcGF0aCkKQEAgLTIyOSw3ICsyMjksNyBAQAogCiBzdGF0aWMgaW50IF9fY2hvb3NlX3BhdGhfaW5fcGcoc3RydWN0IG11bHRpcGF0aCAqbSwgc3RydWN0IHByaW9yaXR5X2dyb3VwICpwZykKIHsKLQlzdHJ1Y3QgcGF0aCAqcGF0aDsKKwlzdHJ1Y3QgZG1fcGF0aCAqcGF0aDsKIAogCXBhdGggPSBwZy0+cHMudHlwZS0+c2VsZWN0X3BhdGgoJnBnLT5wcywgJm0tPnJlcGVhdF9jb3VudCk7CiAJaWYgKCFwYXRoKQpAQCAtMjgyLDEwICsyODIsMjcgQEAKIAltLT5jdXJyZW50X3BnID0gTlVMTDsKIH0KIAorLyoKKyAqIENoZWNrIHdoZXRoZXIgYmlvcyBtdXN0IGJlIHF1ZXVlZCBpbiB0aGUgZGV2aWNlLW1hcHBlciBjb3JlIHJhdGhlcgorICogdGhhbiBoZXJlIGluIHRoZSB0YXJnZXQuCisgKgorICogbS0+bG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkuCisgKgorICogSWYgbS0+cXVldWVfaWZfbm9fcGF0aCBhbmQgbS0+c2F2ZWRfcXVldWVfaWZfbm9fcGF0aCBob2xkIHRoZQorICogc2FtZSB2YWx1ZSB0aGVuIHdlIGFyZSBub3QgYmV0d2VlbiBtdWx0aXBhdGhfcHJlc3VzcGVuZCgpCisgKiBhbmQgbXVsdGlwYXRoX3Jlc3VtZSgpIGNhbGxzIGFuZCB3ZSBoYXZlIG5vIG5lZWQgdG8gY2hlY2sKKyAqIGZvciB0aGUgRE1GX05PRkxVU0hfU1VTUEVORElORyBmbGFnLgorICovCitzdGF0aWMgaW50IF9fbXVzdF9wdXNoX2JhY2soc3RydWN0IG11bHRpcGF0aCAqbSkKK3sKKwlyZXR1cm4gKG0tPnF1ZXVlX2lmX25vX3BhdGggIT0gbS0+c2F2ZWRfcXVldWVfaWZfbm9fcGF0aCAmJgorCQlkbV9ub2ZsdXNoX3N1c3BlbmRpbmcobS0+dGkpKTsKK30KKwogc3RhdGljIGludCBtYXBfaW8oc3RydWN0IG11bHRpcGF0aCAqbSwgc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgbXBhdGhfaW8gKm1waW8sCiAJCSAgdW5zaWduZWQgd2FzX3F1ZXVlZCkKIHsKLQlpbnQgciA9IDE7CisJaW50IHIgPSBETV9NQVBJT19SRU1BUFBFRDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBwZ3BhdGggKnBncGF0aDsKIApAQCAtMzEwLDExICszMjcsMTMgQEAKIAkJICAgICFtLT5xdWV1ZV9pbykKIAkJCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MpOwogCQlwZ3BhdGggPSBOVUxMOwotCQlyID0gMDsKLQl9IGVsc2UgaWYgKCFwZ3BhdGgpCi0JCXIgPSAtRUlPOwkJLyogRmFpbGVkICovCi0JZWxzZQorCQlyID0gRE1fTUFQSU9fU1VCTUlUVEVEOworCX0gZWxzZSBpZiAocGdwYXRoKQogCQliaW8tPmJpX2JkZXYgPSBwZ3BhdGgtPnBhdGguZGV2LT5iZGV2OworCWVsc2UgaWYgKF9fbXVzdF9wdXNoX2JhY2sobSkpCisJCXIgPSBETV9NQVBJT19SRVFVRVVFOworCWVsc2UKKwkJciA9IC1FSU87CS8qIEZhaWxlZCAqLwogCiAJbXBpby0+cGdwYXRoID0gcGdwYXRoOwogCkBAIC0zNzIsOCArMzkxLDEwIEBACiAJCXIgPSBtYXBfaW8obSwgYmlvLCBtcGlvLCAxKTsKIAkJaWYgKHIgPCAwKQogCQkJYmlvX2VuZGlvKGJpbywgYmlvLT5iaV9zaXplLCByKTsKLQkJZWxzZSBpZiAociA9PSAxKQorCQllbHNlIGlmIChyID09IERNX01BUElPX1JFTUFQUEVEKQogCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKKwkJZWxzZSBpZiAociA9PSBETV9NQVBJT19SRVFVRVVFKQorCQkJYmlvX2VuZGlvKGJpbywgYmlvLT5iaV9zaXplLCAtRUlPKTsKIAogCQliaW8gPSBuZXh0OwogCX0KQEAgLTc4Myw3ICs4MDQsNyBAQAogCW1hcF9jb250ZXh0LT5wdHIgPSBtcGlvOwogCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUKTsKIAlyID0gbWFwX2lvKG0sIGJpbywgbXBpbywgMCk7Ci0JaWYgKHIgPCAwKQorCWlmIChyIDwgMCB8fCByID09IERNX01BUElPX1JFUVVFVUUpCiAJCW1lbXBvb2xfZnJlZShtcGlvLCBtLT5tcGlvX3Bvb2wpOwogCiAJcmV0dXJuIHI7CkBAIC05NTcsNyArOTc4LDcgQEAKIC8qCiAgKiBwZ19pbml0IG11c3QgY2FsbCB0aGlzIHdoZW4gaXQgaGFzIGNvbXBsZXRlZCBpdHMgaW5pdGlhbGlzYXRpb24KICAqLwotdm9pZCBkbV9wZ19pbml0X2NvbXBsZXRlKHN0cnVjdCBwYXRoICpwYXRoLCB1bnNpZ25lZCBlcnJfZmxhZ3MpCit2b2lkIGRtX3BnX2luaXRfY29tcGxldGUoc3RydWN0IGRtX3BhdGggKnBhdGgsIHVuc2lnbmVkIGVycl9mbGFncykKIHsKIAlzdHJ1Y3QgcGdwYXRoICpwZ3BhdGggPSBwYXRoX3RvX3BncGF0aChwYXRoKTsKIAlzdHJ1Y3QgcHJpb3JpdHlfZ3JvdXAgKnBnID0gcGdwYXRoLT5wZzsKQEAgLTEwMDcsNyArMTAyOCwxMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm0tPmxvY2ssIGZsYWdzKTsKIAlpZiAoIW0tPm5yX3ZhbGlkX3BhdGhzKSB7Ci0JCWlmICghbS0+cXVldWVfaWZfbm9fcGF0aCkgeworCQlpZiAoX19tdXN0X3B1c2hfYmFjayhtKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbS0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIERNX0VORElPX1JFUVVFVUU7CisJCX0gZWxzZSBpZiAoIW0tPnF1ZXVlX2lmX25vX3BhdGgpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAtRUlPOwogCQl9IGVsc2UgewpAQCAtMTA0Miw3ICsxMDY2LDcgQEAKIAkJcXVldWVfd29yayhrbXVsdGlwYXRoZCwgJm0tPnByb2Nlc3NfcXVldWVkX2lvcyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDE7CS8qIGlvIG5vdCBjb21wbGV0ZSAqLworCXJldHVybiBETV9FTkRJT19JTkNPTVBMRVRFOwkvKiBpbyBub3QgY29tcGxldGUgKi8KIH0KIAogc3RhdGljIGludCBtdWx0aXBhdGhfZW5kX2lvKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8sCkBAIC0xMDYwLDcgKzEwODQsNyBAQAogCQlpZiAocHMtPnR5cGUtPmVuZF9pbykKIAkJCXBzLT50eXBlLT5lbmRfaW8ocHMsICZwZ3BhdGgtPnBhdGgpOwogCX0KLQlpZiAociA8PSAwKQorCWlmIChyICE9IERNX0VORElPX0lOQ09NUExFVEUpCiAJCW1lbXBvb2xfZnJlZShtcGlvLCBtLT5tcGlvX3Bvb2wpOwogCiAJcmV0dXJuIHI7CkBAIC0xMjcyLDcgKzEyOTYsNyBAQAogCXN0cnVjdCBkZW50cnkgZmFrZV9kZW50cnkgPSB7fTsKIAlpbnQgciA9IDA7CiAKLQlmYWtlX2ZpbGUuZl9kZW50cnkgPSAmZmFrZV9kZW50cnk7CisJZmFrZV9maWxlLmZfcGF0aC5kZW50cnkgPSAmZmFrZV9kZW50cnk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbS0+bG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLW1wYXRoLmggYi9kcml2ZXJzL21kL2RtLW1wYXRoLmgKaW5kZXggOGE0YmYyYi4uYjljZGNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1tcGF0aC5oCisrKyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguaApAQCAtMTEsNyArMTEsNyBAQAogCiBzdHJ1Y3QgZG1fZGV2OwogCi1zdHJ1Y3QgcGF0aCB7CitzdHJ1Y3QgZG1fcGF0aCB7CiAJc3RydWN0IGRtX2RldiAqZGV2OwkvKiBSZWFkLW9ubHkgKi8KIAl1bnNpZ25lZCBpc19hY3RpdmU7CS8qIFJlYWQtb25seSAqLwogCkBAIC0yMCw2ICsyMCw2IEBACiB9OwogCiAvKiBDYWxsYmFjayBmb3IgaHdoX3BnX2luaXRfZm4gdG8gdXNlIHdoZW4gY29tcGxldGUgKi8KLXZvaWQgZG1fcGdfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgdW5zaWduZWQgZXJyX2ZsYWdzKTsKK3ZvaWQgZG1fcGdfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgZG1fcGF0aCAqcGF0aCwgdW5zaWduZWQgZXJyX2ZsYWdzKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXBhdGgtc2VsZWN0b3IuaCBiL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5oCmluZGV4IDczMmQwNmEuLjI3MzU3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5oCisrKyBiL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5oCkBAIC00NCw3ICs0NCw3IEBACiAJICogQWRkIGFuIG9wYXF1ZSBwYXRoIG9iamVjdCwgYWxvbmcgd2l0aCBzb21lIHNlbGVjdG9yIHNwZWNpZmljCiAJICogcGF0aCBhcmdzIChlZywgcGF0aCBwcmlvcml0eSkuCiAJICovCi0JaW50ICgqYWRkX3BhdGgpIChzdHJ1Y3QgcGF0aF9zZWxlY3RvciAqcHMsIHN0cnVjdCBwYXRoICpwYXRoLAorCWludCAoKmFkZF9wYXRoKSAoc3RydWN0IHBhdGhfc2VsZWN0b3IgKnBzLCBzdHJ1Y3QgZG1fcGF0aCAqcGF0aCwKIAkJCSBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplcnJvcik7CiAKIAkvKgpAQCAtNTUsMjcgKzU1LDI3IEBACiAJICogY2FsbGluZyB0aGUgZnVuY3Rpb24gYWdhaW4uICAwIG1lYW5zIGRvbid0IGNhbGwgaXQgYWdhaW4gdW5sZXNzCiAJICogdGhlIHBhdGggZmFpbHMuCiAJICovCi0Jc3RydWN0IHBhdGggKigqc2VsZWN0X3BhdGgpIChzdHJ1Y3QgcGF0aF9zZWxlY3RvciAqcHMsCisJc3RydWN0IGRtX3BhdGggKigqc2VsZWN0X3BhdGgpIChzdHJ1Y3QgcGF0aF9zZWxlY3RvciAqcHMsCiAJCQkJICAgICB1bnNpZ25lZCAqcmVwZWF0X2NvdW50KTsKIAogCS8qCiAJICogTm90aWZ5IHRoZSBzZWxlY3RvciB0aGF0IGEgcGF0aCBoYXMgZmFpbGVkLgogCSAqLwotCXZvaWQgKCpmYWlsX3BhdGgpIChzdHJ1Y3QgcGF0aF9zZWxlY3RvciAqcHMsIHN0cnVjdCBwYXRoICpwKTsKKwl2b2lkICgqZmFpbF9wYXRoKSAoc3RydWN0IHBhdGhfc2VsZWN0b3IgKnBzLCBzdHJ1Y3QgZG1fcGF0aCAqcCk7CiAKIAkvKgogCSAqIEFzayBzZWxlY3RvciB0byByZWluc3RhdGUgYSBwYXRoLgogCSAqLwotCWludCAoKnJlaW5zdGF0ZV9wYXRoKSAoc3RydWN0IHBhdGhfc2VsZWN0b3IgKnBzLCBzdHJ1Y3QgcGF0aCAqcCk7CisJaW50ICgqcmVpbnN0YXRlX3BhdGgpIChzdHJ1Y3QgcGF0aF9zZWxlY3RvciAqcHMsIHN0cnVjdCBkbV9wYXRoICpwKTsKIAogCS8qCiAJICogVGFibGUgY29udGVudCBiYXNlZCBvbiBwYXJhbWV0ZXJzIGFkZGVkIGluIHBzX2FkZF9wYXRoX2ZuCiAJICogb3IgcGF0aCBzZWxlY3RvciBzdGF0dXMKIAkgKi8KLQlpbnQgKCpzdGF0dXMpIChzdHJ1Y3QgcGF0aF9zZWxlY3RvciAqcHMsIHN0cnVjdCBwYXRoICpwYXRoLAorCWludCAoKnN0YXR1cykgKHN0cnVjdCBwYXRoX3NlbGVjdG9yICpwcywgc3RydWN0IGRtX3BhdGggKnBhdGgsCiAJCSAgICAgICBzdGF0dXNfdHlwZV90IHR5cGUsIGNoYXIgKnJlc3VsdCwgdW5zaWduZWQgaW50IG1heGxlbik7CiAKLQlpbnQgKCplbmRfaW8pIChzdHJ1Y3QgcGF0aF9zZWxlY3RvciAqcHMsIHN0cnVjdCBwYXRoICpwYXRoKTsKKwlpbnQgKCplbmRfaW8pIChzdHJ1Y3QgcGF0aF9zZWxlY3RvciAqcHMsIHN0cnVjdCBkbV9wYXRoICpwYXRoKTsKIH07CiAKIC8qIFJlZ2lzdGVyIGEgcGF0aCBzZWxlY3RvciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCmluZGV4IGZjOGNiYjEuLjIzYTY0MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTM0NCw2ICszNDQsMTcgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX3Jlc3luY193b3JrKHN0cnVjdCByZWdpb24gKnJlZywgaW50IHN1Y2Nlc3MpCit7CisJc3RydWN0IHJlZ2lvbl9oYXNoICpyaCA9IHJlZy0+cmg7CisKKwlyaC0+bG9nLT50eXBlLT5zZXRfcmVnaW9uX3N5bmMocmgtPmxvZywgcmVnLT5rZXksIHN1Y2Nlc3MpOworCWRpc3BhdGNoX2Jpb3MocmgtPm1zLCAmcmVnLT5kZWxheWVkX2Jpb3MpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyaC0+cmVjb3ZlcnlfaW5fZmxpZ2h0KSkKKwkJd2FrZV91cF9hbGwoJl9rbWlycm9yZF9yZWNvdmVyeV9zdG9wcGVkKTsKKwl1cCgmcmgtPnJlY292ZXJ5X2NvdW50KTsKK30KKwogc3RhdGljIHZvaWQgcmhfdXBkYXRlX3N0YXRlcyhzdHJ1Y3QgcmVnaW9uX2hhc2ggKnJoKQogewogCXN0cnVjdCByZWdpb24gKnJlZywgKm5leHQ7CkBAIC0zODMsMTEgKzM5NCw3IEBACiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIChyZWcsIG5leHQsICZyZWNvdmVyZWQsIGxpc3QpIHsKIAkJcmgtPmxvZy0+dHlwZS0+Y2xlYXJfcmVnaW9uKHJoLT5sb2csIHJlZy0+a2V5KTsKLQkJcmgtPmxvZy0+dHlwZS0+Y29tcGxldGVfcmVzeW5jX3dvcmsocmgtPmxvZywgcmVnLT5rZXksIDEpOwotCQlkaXNwYXRjaF9iaW9zKHJoLT5tcywgJnJlZy0+ZGVsYXllZF9iaW9zKTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJoLT5yZWNvdmVyeV9pbl9mbGlnaHQpKQotCQkJd2FrZV91cF9hbGwoJl9rbWlycm9yZF9yZWNvdmVyeV9zdG9wcGVkKTsKLQkJdXAoJnJoLT5yZWNvdmVyeV9jb3VudCk7CisJCWNvbXBsZXRlX3Jlc3luY193b3JrKHJlZywgMSk7CiAJCW1lbXBvb2xfZnJlZShyZWcsIHJoLT5yZWdpb25fcG9vbCk7CiAJfQogCkBAIC0xMTM3LDcgKzExNDQsNyBAQAogCiAJaWYgKHJ3ID09IFdSSVRFKSB7CiAJCXF1ZXVlX2JpbyhtcywgYmlvLCBydyk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gRE1fTUFQSU9fU1VCTUlUVEVEOwogCX0KIAogCXIgPSBtcy0+cmgubG9nLT50eXBlLT5pbl9zeW5jKG1zLT5yaC5sb2csCkBAIC0xMTQ2LDcgKzExNTMsNyBAQAogCQlyZXR1cm4gcjsKIAogCWlmIChyID09IC1FV09VTERCTE9DSykJLyogRklYTUU6IHVnbHkgKi8KLQkJciA9IDA7CisJCXIgPSBETV9NQVBJT19TVUJNSVRURUQ7CiAKIAkvKgogCSAqIFdlIGRvbid0IHdhbnQgdG8gZmFzdCB0cmFjayBhIHJlY292ZXJ5IGp1c3QgZm9yIGEgcmVhZApAQCAtMTE1OSw3ICsxMTY2LDcgQEAKIAlpZiAoIXIpIHsKIAkJLyogUGFzcyB0aGlzIGlvIG92ZXIgdG8gdGhlIGRhZW1vbiAqLwogCQlxdWV1ZV9iaW8obXMsIGJpbywgcncpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIAl9CiAKIAltID0gY2hvb3NlX21pcnJvcihtcywgYmlvLT5iaV9zZWN0b3IpOwpAQCAtMTE2Nyw3ICsxMTc0LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAltYXBfYmlvKG1zLCBtLCBiaW8pOwotCXJldHVybiAxOworCXJldHVybiBETV9NQVBJT19SRU1BUFBFRDsKIH0KIAogc3RhdGljIGludCBtaXJyb3JfZW5kX2lvKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXJvdW5kLXJvYmluLmMgYi9kcml2ZXJzL21kL2RtLXJvdW5kLXJvYmluLmMKaW5kZXggNmY5ZmNkNC4uYTM0OGE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1yb3VuZC1yb2Jpbi5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcm91bmQtcm9iaW4uYwpAQCAtMjEsNyArMjEsNyBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RydWN0IHBhdGhfaW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBwYXRoICpwYXRoOworCXN0cnVjdCBkbV9wYXRoICpwYXRoOwogCXVuc2lnbmVkIHJlcGVhdF9jb3VudDsKIH07CiAKQEAgLTgwLDcgKzgwLDcgQEAKIAlwcy0+Y29udGV4dCA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgcnJfc3RhdHVzKHN0cnVjdCBwYXRoX3NlbGVjdG9yICpwcywgc3RydWN0IHBhdGggKnBhdGgsCitzdGF0aWMgaW50IHJyX3N0YXR1cyhzdHJ1Y3QgcGF0aF9zZWxlY3RvciAqcHMsIHN0cnVjdCBkbV9wYXRoICpwYXRoLAogCQkgICAgIHN0YXR1c190eXBlX3QgdHlwZSwgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgbWF4bGVuKQogewogCXN0cnVjdCBwYXRoX2luZm8gKnBpOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgKiBDYWxsZWQgZHVyaW5nIGluaXRpYWxpc2F0aW9uIHRvIHJlZ2lzdGVyIGVhY2ggcGF0aCB3aXRoIGFuCiAgKiBvcHRpb25hbCByZXBlYXRfY291bnQuCiAgKi8KLXN0YXRpYyBpbnQgcnJfYWRkX3BhdGgoc3RydWN0IHBhdGhfc2VsZWN0b3IgKnBzLCBzdHJ1Y3QgcGF0aCAqcGF0aCwKK3N0YXRpYyBpbnQgcnJfYWRkX3BhdGgoc3RydWN0IHBhdGhfc2VsZWN0b3IgKnBzLCBzdHJ1Y3QgZG1fcGF0aCAqcGF0aCwKIAkJICAgICAgIGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVycm9yKQogewogCXN0cnVjdCBzZWxlY3RvciAqcyA9IChzdHJ1Y3Qgc2VsZWN0b3IgKikgcHMtPmNvbnRleHQ7CkBAIC0xNDEsNyArMTQxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcnJfZmFpbF9wYXRoKHN0cnVjdCBwYXRoX3NlbGVjdG9yICpwcywgc3RydWN0IHBhdGggKnApCitzdGF0aWMgdm9pZCBycl9mYWlsX3BhdGgoc3RydWN0IHBhdGhfc2VsZWN0b3IgKnBzLCBzdHJ1Y3QgZG1fcGF0aCAqcCkKIHsKIAlzdHJ1Y3Qgc2VsZWN0b3IgKnMgPSAoc3RydWN0IHNlbGVjdG9yICopIHBzLT5jb250ZXh0OwogCXN0cnVjdCBwYXRoX2luZm8gKnBpID0gcC0+cHNjb250ZXh0OwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJbGlzdF9tb3ZlKCZwaS0+bGlzdCwgJnMtPmludmFsaWRfcGF0aHMpOwogfQogCi1zdGF0aWMgaW50IHJyX3JlaW5zdGF0ZV9wYXRoKHN0cnVjdCBwYXRoX3NlbGVjdG9yICpwcywgc3RydWN0IHBhdGggKnApCitzdGF0aWMgaW50IHJyX3JlaW5zdGF0ZV9wYXRoKHN0cnVjdCBwYXRoX3NlbGVjdG9yICpwcywgc3RydWN0IGRtX3BhdGggKnApCiB7CiAJc3RydWN0IHNlbGVjdG9yICpzID0gKHN0cnVjdCBzZWxlY3RvciAqKSBwcy0+Y29udGV4dDsKIAlzdHJ1Y3QgcGF0aF9pbmZvICpwaSA9IHAtPnBzY29udGV4dDsKQEAgLTE1OSw3ICsxNTksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhdGggKnJyX3NlbGVjdF9wYXRoKHN0cnVjdCBwYXRoX3NlbGVjdG9yICpwcywKK3N0YXRpYyBzdHJ1Y3QgZG1fcGF0aCAqcnJfc2VsZWN0X3BhdGgoc3RydWN0IHBhdGhfc2VsZWN0b3IgKnBzLAogCQkJCSAgIHVuc2lnbmVkICpyZXBlYXRfY291bnQpCiB7CiAJc3RydWN0IHNlbGVjdG9yICpzID0gKHN0cnVjdCBzZWxlY3RvciAqKSBwcy0+Y29udGV4dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKaW5kZXggYjBjZTJjZS4uMDgyMWEyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKQEAgLTM5LDcgKzM5LDcgQEAKICAqLwogI2RlZmluZSBTTkFQU0hPVF9QQUdFUyAyNTYKIAotc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtzbmFwZDsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa3NuYXBkOwogc3RhdGljIHZvaWQgZmx1c2hfcXVldWVkX2Jpb3Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogc3RydWN0IHBlbmRpbmdfZXhjZXB0aW9uIHsKQEAgLTU2NCw2ICs1NjQsMTcgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIHZvaWQgX19mcmVlX2V4Y2VwdGlvbnMoc3RydWN0IGRtX3NuYXBzaG90ICpzKQoreworCWtjb3B5ZF9jbGllbnRfZGVzdHJveShzLT5rY29weWRfY2xpZW50KTsKKwlzLT5rY29weWRfY2xpZW50ID0gTlVMTDsKKworCWV4aXRfZXhjZXB0aW9uX3RhYmxlKCZzLT5wZW5kaW5nLCBwZW5kaW5nX2NhY2hlKTsKKwlleGl0X2V4Y2VwdGlvbl90YWJsZSgmcy0+Y29tcGxldGUsIGV4Y2VwdGlvbl9jYWNoZSk7CisKKwlzLT5zdG9yZS5kZXN0cm95KCZzLT5zdG9yZSk7Cit9CisKIHN0YXRpYyB2b2lkIHNuYXBzaG90X2R0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKIHsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnMgPSAoc3RydWN0IGRtX3NuYXBzaG90ICopIHRpLT5wcml2YXRlOwpAQCAtNTc0LDEzICs1ODUsNyBAQAogCS8qIEFmdGVyIHRoaXMgcmV0dXJucyB0aGVyZSBjYW4gYmUgbm8gbmV3IGtjb3B5ZCBqb2JzLiAqLwogCXVucmVnaXN0ZXJfc25hcHNob3Qocyk7CiAKLQlrY29weWRfY2xpZW50X2Rlc3Ryb3kocy0+a2NvcHlkX2NsaWVudCk7Ci0KLQlleGl0X2V4Y2VwdGlvbl90YWJsZSgmcy0+cGVuZGluZywgcGVuZGluZ19jYWNoZSk7Ci0JZXhpdF9leGNlcHRpb25fdGFibGUoJnMtPmNvbXBsZXRlLCBleGNlcHRpb25fY2FjaGUpOwotCi0JLyogRGVhbGxvY2F0ZSBtZW1vcnkgdXNlZCAqLwotCXMtPnN0b3JlLmRlc3Ryb3koJnMtPnN0b3JlKTsKKwlfX2ZyZWVfZXhjZXB0aW9ucyhzKTsKIAogCWRtX3B1dF9kZXZpY2UodGksIHMtPm9yaWdpbik7CiAJZG1fcHV0X2RldmljZSh0aSwgcy0+Y293KTsKQEAgLTg2OCw3ICs4NzMsNyBAQAogewogCXN0cnVjdCBleGNlcHRpb24gKmU7CiAJc3RydWN0IGRtX3NuYXBzaG90ICpzID0gKHN0cnVjdCBkbV9zbmFwc2hvdCAqKSB0aS0+cHJpdmF0ZTsKLQlpbnQgciA9IDE7CisJaW50IHIgPSBETV9NQVBJT19SRU1BUFBFRDsKIAljaHVua190IGNodW5rOwogCXN0cnVjdCBwZW5kaW5nX2V4Y2VwdGlvbiAqcGUgPSBOVUxMOwogCkBAIC05MTQsNyArOTE5LDcgQEAKIAkJcmVtYXBfZXhjZXB0aW9uKHMsICZwZS0+ZSwgYmlvKTsKIAkJYmlvX2xpc3RfYWRkKCZwZS0+c25hcHNob3RfYmlvcywgYmlvKTsKIAotCQlyID0gMDsKKwkJciA9IERNX01BUElPX1NVQk1JVFRFRDsKIAogCQlpZiAoIXBlLT5zdGFydGVkKSB7CiAJCQkvKiB0aGlzIGlzIHByb3RlY3RlZCBieSBzbmFwLT5sb2NrICovCkBAIC05OTIsNyArOTk3LDcgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQgX19vcmlnaW5fd3JpdGUoc3RydWN0IGxpc3RfaGVhZCAqc25hcHNob3RzLCBzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JaW50IHIgPSAxLCBmaXJzdCA9IDA7CisJaW50IHIgPSBETV9NQVBJT19SRU1BUFBFRCwgZmlyc3QgPSAwOwogCXN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcDsKIAlzdHJ1Y3QgZXhjZXB0aW9uICplOwogCXN0cnVjdCBwZW5kaW5nX2V4Y2VwdGlvbiAqcGUsICpuZXh0X3BlLCAqcHJpbWFyeV9wZSA9IE5VTEw7CkBAIC0xMDUwLDcgKzEwNTUsNyBAQAogCiAJCQliaW9fbGlzdF9hZGQoJnByaW1hcnlfcGUtPm9yaWdpbl9iaW9zLCBiaW8pOwogCi0JCQlyID0gMDsKKwkJCXIgPSBETV9NQVBJT19TVUJNSVRURUQ7CiAJCX0KIAogCQlpZiAoIXBlLT5wcmltYXJ5X3BlKSB7CkBAIC0xMDk5LDcgKzExMDQsNyBAQAogc3RhdGljIGludCBkb19vcmlnaW4oc3RydWN0IGRtX2RldiAqb3JpZ2luLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IG9yaWdpbiAqbzsKLQlpbnQgciA9IDE7CisJaW50IHIgPSBETV9NQVBJT19SRU1BUFBFRDsKIAogCWRvd25fcmVhZCgmX29yaWdpbnNfbG9jayk7CiAJbyA9IF9fbG9va3VwX29yaWdpbihvcmlnaW4tPmJkZXYpOwpAQCAtMTE1Niw3ICsxMTYxLDcgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJLyogT25seSB0ZWxsIHNuYXBzaG90cyBpZiB0aGlzIGlzIGEgd3JpdGUgKi8KLQlyZXR1cm4gKGJpb19ydyhiaW8pID09IFdSSVRFKSA/IGRvX29yaWdpbihkZXYsIGJpbykgOiAxOworCXJldHVybiAoYmlvX3J3KGJpbykgPT0gV1JJVEUpID8gZG9fb3JpZ2luKGRldiwgYmlvKSA6IERNX01BUElPX1JFTUFQUEVEOwogfQogCiAjZGVmaW5lIG1pbl9ub3RfemVybyhsLCByKSAobCA9PSAwKSA/IHIgOiAoKHIgPT0gMCkgPyBsIDogbWluKGwsIHIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zdHJpcGUuYyBiL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKaW5kZXggNmMyOWZjZS4uNTFmNWUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zdHJpcGUuYworKysgYi9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAliaW8tPmJpX2JkZXYgPSBzYy0+c3RyaXBlW3N0cmlwZV0uZGV2LT5iZGV2OwogCWJpby0+Ymlfc2VjdG9yID0gc2MtPnN0cmlwZVtzdHJpcGVdLnBoeXNpY2FsX3N0YXJ0ICsKIAkgICAgKGNodW5rIDw8IHNjLT5jaHVua19zaGlmdCkgKyAob2Zmc2V0ICYgc2MtPmNodW5rX21hc2spOwotCXJldHVybiAxOworCXJldHVybiBETV9NQVBJT19SRU1BUFBFRDsKIH0KIAogc3RhdGljIGludCBzdHJpcGVfc3RhdHVzKHN0cnVjdCBkbV90YXJnZXQgKnRpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS16ZXJvLmMgYi9kcml2ZXJzL21kL2RtLXplcm8uYwppbmRleCBlYTU2OWY3Li5mMzE0ZDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXplcm8uYworKysgYi9kcml2ZXJzL21kL2RtLXplcm8uYwpAQCAtNDYsNyArNDYsNyBAQAogCWJpb19lbmRpbyhiaW8sIGJpby0+Ymlfc2l6ZSwgMCk7CiAKIAkvKiBhY2NlcHRlZCBiaW8sIGRvbid0IG1ha2UgbmV3IHJlcXVlc3QgKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gRE1fTUFQSU9fU1VCTUlUVEVEOwogfQogCiBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIHplcm9fdGFyZ2V0ID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IDdlYzFiMTEuLjM2NjhiMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTY4LDEwICs2OCwxMiBAQAogI2RlZmluZSBETUZfRlJPWkVOIDIKICNkZWZpbmUgRE1GX0ZSRUVJTkcgMwogI2RlZmluZSBETUZfREVMRVRJTkcgNAorI2RlZmluZSBETUZfTk9GTFVTSF9TVVNQRU5ESU5HIDUKIAogc3RydWN0IG1hcHBlZF9kZXZpY2UgewogCXN0cnVjdCByd19zZW1hcGhvcmUgaW9fbG9jazsKIAlzdHJ1Y3Qgc2VtYXBob3JlIHN1c3BlbmRfbG9jazsKKwlzcGlubG9ja190IHB1c2hiYWNrX2xvY2s7CiAJcndsb2NrX3QgbWFwX2xvY2s7CiAJYXRvbWljX3QgaG9sZGVyczsKIAlhdG9taWNfdCBvcGVuX2NvdW50OwpAQCAtODksNyArOTEsOCBAQAogCSAqLwogCWF0b21pY190IHBlbmRpbmc7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKLSAJc3RydWN0IGJpb19saXN0IGRlZmVycmVkOworCXN0cnVjdCBiaW9fbGlzdCBkZWZlcnJlZDsKKwlzdHJ1Y3QgYmlvX2xpc3QgcHVzaGJhY2s7CiAKIAkvKgogCSAqIFRoZSBjdXJyZW50IG1hcHBpbmcuCkBAIC00NDQsMjMgKzQ0Nyw1MCBAQAogICogICB5b3UgdGhpcyBjbGVhcmx5IGRlbWFyY2F0ZWQgY3JhcC4KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIGludCBfX25vZmx1c2hfc3VzcGVuZGluZyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCit7CisJcmV0dXJuIHRlc3RfYml0KERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcsICZtZC0+ZmxhZ3MpOworfQorCiAvKgogICogRGVjcmVtZW50cyB0aGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nIGlvcyB0aGF0IGEgYmlvIGhhcyBiZWVuCiAgKiBjbG9uZWQgaW50bywgY29tcGxldGluZyB0aGUgb3JpZ2luYWwgaW8gaWYgbmVjYy4KICAqLwogc3RhdGljIHZvaWQgZGVjX3BlbmRpbmcoc3RydWN0IGRtX2lvICppbywgaW50IGVycm9yKQogewotCWlmIChlcnJvcikKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogUHVzaC1iYWNrIHN1cGVyc2VkZXMgYW55IEkvTyBlcnJvcnMgKi8KKwlpZiAoZXJyb3IgJiYgIShpby0+ZXJyb3IgPiAwICYmIF9fbm9mbHVzaF9zdXNwZW5kaW5nKGlvLT5tZCkpKQogCQlpby0+ZXJyb3IgPSBlcnJvcjsKIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpby0+aW9fY291bnQpKSB7CisJCWlmIChpby0+ZXJyb3IgPT0gRE1fRU5ESU9fUkVRVUVVRSkgeworCQkJLyoKKwkJCSAqIFRhcmdldCByZXF1ZXN0ZWQgcHVzaGluZyBiYWNrIHRoZSBJL08uCisJCQkgKiBUaGlzIG11c3QgYmUgaGFuZGxlZCBiZWZvcmUgdGhlIHNsZWVwZXIgb24KKwkJCSAqIHN1c3BlbmQgcXVldWUgbWVyZ2VzIHRoZSBwdXNoYmFjayBsaXN0LgorCQkJICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW8tPm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7CisJCQlpZiAoX19ub2ZsdXNoX3N1c3BlbmRpbmcoaW8tPm1kKSkKKwkJCQliaW9fbGlzdF9hZGQoJmlvLT5tZC0+cHVzaGJhY2ssIGlvLT5iaW8pOworCQkJZWxzZQorCQkJCS8qIG5vZmx1c2ggc3VzcGVuZCB3YXMgaW50ZXJydXB0ZWQuICovCisJCQkJaW8tPmVycm9yID0gLUVJTzsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvLT5tZC0+cHVzaGJhY2tfbG9jaywgZmxhZ3MpOworCQl9CisKIAkJaWYgKGVuZF9pb19hY2N0KGlvKSkKIAkJCS8qIG51ZGdlIGFueW9uZSB3YWl0aW5nIG9uIHN1c3BlbmQgcXVldWUgKi8KIAkJCXdha2VfdXAoJmlvLT5tZC0+d2FpdCk7CiAKLQkJYmxrX2FkZF90cmFjZV9iaW8oaW8tPm1kLT5xdWV1ZSwgaW8tPmJpbywgQkxLX1RBX0NPTVBMRVRFKTsKKwkJaWYgKGlvLT5lcnJvciAhPSBETV9FTkRJT19SRVFVRVVFKSB7CisJCQlibGtfYWRkX3RyYWNlX2Jpbyhpby0+bWQtPnF1ZXVlLCBpby0+YmlvLAorCQkJCQkgIEJMS19UQV9DT01QTEVURSk7CiAKLQkJYmlvX2VuZGlvKGlvLT5iaW8sIGlvLT5iaW8tPmJpX3NpemUsIGlvLT5lcnJvcik7CisJCQliaW9fZW5kaW8oaW8tPmJpbywgaW8tPmJpby0+Ymlfc2l6ZSwgaW8tPmVycm9yKTsKKwkJfQorCiAJCWZyZWVfaW8oaW8tPm1kLCBpbyk7CiAJfQogfQpAQCAtNDgwLDEyICs1MTAsMTkgQEAKIAogCWlmIChlbmRpbykgewogCQlyID0gZW5kaW8odGlvLT50aSwgYmlvLCBlcnJvciwgJnRpby0+aW5mbyk7Ci0JCWlmIChyIDwgMCkKKwkJaWYgKHIgPCAwIHx8IHIgPT0gRE1fRU5ESU9fUkVRVUVVRSkKKwkJCS8qCisJCQkgKiBlcnJvciBhbmQgcmVxdWV1ZSByZXF1ZXN0IGFyZSBoYW5kbGVkCisJCQkgKiBpbiBkZWNfcGVuZGluZygpLgorCQkJICovCiAJCQllcnJvciA9IHI7Ci0KLQkJZWxzZSBpZiAociA+IDApCi0JCQkvKiB0aGUgdGFyZ2V0IHdhbnRzIGFub3RoZXIgc2hvdCBhdCB0aGUgaW8gKi8KKwkJZWxzZSBpZiAociA9PSBETV9FTkRJT19JTkNPTVBMRVRFKQorCQkJLyogVGhlIHRhcmdldCB3aWxsIGhhbmRsZSB0aGUgaW8gKi8KIAkJCXJldHVybiAxOworCQllbHNlIGlmIChyKSB7CisJCQlETVdBUk4oInVuaW1wbGVtZW50ZWQgdGFyZ2V0IGVuZGlvIHJldHVybiB2YWx1ZTogJWQiLCByKTsKKwkJCUJVRygpOworCQl9CiAJfQogCiAJZGVjX3BlbmRpbmcodGlvLT5pbywgZXJyb3IpOwpAQCAtNTQzLDcgKzU4MCw3IEBACiAJYXRvbWljX2luYygmdGlvLT5pby0+aW9fY291bnQpOwogCXNlY3RvciA9IGNsb25lLT5iaV9zZWN0b3I7CiAJciA9IHRpLT50eXBlLT5tYXAodGksIGNsb25lLCAmdGlvLT5pbmZvKTsKLQlpZiAociA+IDApIHsKKwlpZiAociA9PSBETV9NQVBJT19SRU1BUFBFRCkgewogCQkvKiB0aGUgYmlvIGhhcyBiZWVuIHJlbWFwcGVkIHNvIGRpc3BhdGNoIGl0ICovCiAKIAkJYmxrX2FkZF90cmFjZV9yZW1hcChiZGV2X2dldF9xdWV1ZShjbG9uZS0+YmlfYmRldiksIGNsb25lLApAQCAtNTUxLDEwICs1ODgsOCBAQAogCQkJCSAgICBjbG9uZS0+Ymlfc2VjdG9yKTsKIAogCQlnZW5lcmljX21ha2VfcmVxdWVzdChjbG9uZSk7Ci0JfQotCi0JZWxzZSBpZiAociA8IDApIHsKLQkJLyogZXJyb3IgdGhlIGlvIGFuZCBiYWlsIG91dCAqLworCX0gZWxzZSBpZiAociA8IDAgfHwgciA9PSBETV9NQVBJT19SRVFVRVVFKSB7CisJCS8qIGVycm9yIHRoZSBpbyBhbmQgYmFpbCBvdXQsIG9yIHJlcXVldWUgaXQgaWYgbmVlZGVkICovCiAJCW1kID0gdGlvLT5pby0+bWQ7CiAJCWRlY19wZW5kaW5nKHRpby0+aW8sIHIpOwogCQkvKgpAQCAtNTYzLDYgKzU5OCw5IEBACiAJCWNsb25lLT5iaV9wcml2YXRlID0gbWQtPmJzOwogCQliaW9fcHV0KGNsb25lKTsKIAkJZnJlZV90aW8obWQsIHRpbyk7CisJfSBlbHNlIGlmIChyKSB7CisJCURNV0FSTigidW5pbXBsZW1lbnRlZCB0YXJnZXQgbWFwIHJldHVybiB2YWx1ZTogJWQiLCByKTsKKwkJQlVHKCk7CiAJfQogfQogCkBAIC05NDgsNiArOTg2LDcgQEAKIAltZW1zZXQobWQsIDAsIHNpemVvZigqbWQpKTsKIAlpbml0X3J3c2VtKCZtZC0+aW9fbG9jayk7CiAJaW5pdF9NVVRFWCgmbWQtPnN1c3BlbmRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJm1kLT5wdXNoYmFja19sb2NrKTsKIAlyd2xvY2tfaW5pdCgmbWQtPm1hcF9sb2NrKTsKIAlhdG9taWNfc2V0KCZtZC0+aG9sZGVycywgMSk7CiAJYXRvbWljX3NldCgmbWQtPm9wZW5fY291bnQsIDApOwpAQCAtOTY2LDggKzEwMDUsOCBAQAogCW1kLT5xdWV1ZS0+aXNzdWVfZmx1c2hfZm4gPSBkbV9mbHVzaF9hbGw7CiAKIAltZC0+aW9fcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fSU9TLCBfaW9fY2FjaGUpOwotIAlpZiAoIW1kLT5pb19wb29sKQotIAkJZ290byBiYWQyOworCWlmICghbWQtPmlvX3Bvb2wpCisJCWdvdG8gYmFkMjsKIAogCW1kLT50aW9fcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fSU9TLCBfdGlvX2NhY2hlKTsKIAlpZiAoIW1kLT50aW9fcG9vbCkKQEAgLTEwNzcsNyArMTExNiw4IEBACiAJaWYgKHNpemUgIT0gZ2V0X2NhcGFjaXR5KG1kLT5kaXNrKSkKIAkJbWVtc2V0KCZtZC0+Z2VvbWV0cnksIDAsIHNpemVvZihtZC0+Z2VvbWV0cnkpKTsKIAotCV9fc2V0X3NpemUobWQsIHNpemUpOworCWlmIChtZC0+c3VzcGVuZGVkX2JkZXYpCisJCV9fc2V0X3NpemUobWQsIHNpemUpOwogCWlmIChzaXplID09IDApCiAJCXJldHVybiAwOwogCkBAIC0xMjI1LDYgKzEyNjUsMTEgQEAKIAlpZiAoIWRtX3N1c3BlbmRlZChtZCkpCiAJCWdvdG8gb3V0OwogCisJLyogd2l0aG91dCBiZGV2LCB0aGUgZGV2aWNlIHNpemUgY2Fubm90IGJlIGNoYW5nZWQgKi8KKwlpZiAoIW1kLT5zdXNwZW5kZWRfYmRldikKKwkJaWYgKGdldF9jYXBhY2l0eShtZC0+ZGlzaykgIT0gZG1fdGFibGVfZ2V0X3NpemUodGFibGUpKQorCQkJZ290byBvdXQ7CisKIAlfX3VuYmluZChtZCk7CiAJciA9IF9fYmluZChtZCwgdGFibGUpOwogCkBAIC0xMjc1LDEyICsxMzIwLDE1IEBACiAgKiBkbV9iaW5kX3RhYmxlLCBkbV9zdXNwZW5kIG11c3QgYmUgY2FsbGVkIHRvIGZsdXNoIGFueSBpbgogICogZmxpZ2h0IGJpb3MgYW5kIGVuc3VyZSB0aGF0IGFueSBmdXJ0aGVyIGlvIGdldHMgZGVmZXJyZWQuCiAgKi8KLWludCBkbV9zdXNwZW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgaW50IGRvX2xvY2tmcykKK2ludCBkbV9zdXNwZW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgdW5zaWduZWQgc3VzcGVuZF9mbGFncykKIHsKIAlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlzdHJ1Y3QgYmlvICpkZWY7CiAJaW50IHIgPSAtRUlOVkFMOworCWludCBkb19sb2NrZnMgPSBzdXNwZW5kX2ZsYWdzICYgRE1fU1VTUEVORF9MT0NLRlNfRkxBRyA/IDEgOiAwOworCWludCBub2ZsdXNoID0gc3VzcGVuZF9mbGFncyAmIERNX1NVU1BFTkRfTk9GTFVTSF9GTEFHID8gMSA6IDA7CiAKIAlkb3duKCZtZC0+c3VzcGVuZF9sb2NrKTsKIApAQCAtMTI4OSwxOCArMTMzNywzMSBAQAogCiAJbWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKIAorCS8qCisJICogRE1GX05PRkxVU0hfU1VTUEVORElORyBtdXN0IGJlIHNldCBiZWZvcmUgcHJlc3VzcGVuZC4KKwkgKiBUaGlzIGZsYWcgaXMgY2xlYXJlZCBiZWZvcmUgZG1fc3VzcGVuZCByZXR1cm5zLgorCSAqLworCWlmIChub2ZsdXNoKQorCQlzZXRfYml0KERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcsICZtZC0+ZmxhZ3MpOworCiAJLyogVGhpcyBkb2VzIG5vdCBnZXQgcmV2ZXJ0ZWQgaWYgdGhlcmUncyBhbiBlcnJvciBsYXRlci4gKi8KIAlkbV90YWJsZV9wcmVzdXNwZW5kX3RhcmdldHMobWFwKTsKIAotCW1kLT5zdXNwZW5kZWRfYmRldiA9IGJkZ2V0X2Rpc2sobWQtPmRpc2ssIDApOwotCWlmICghbWQtPnN1c3BlbmRlZF9iZGV2KSB7Ci0JCURNV0FSTigiYmRnZXQgZmFpbGVkIGluIGRtX3N1c3BlbmQiKTsKLQkJciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OworCS8qIGJkZ2V0KCkgY2FuIHN0YWxsIGlmIHRoZSBwZW5kaW5nIEkvT3MgYXJlIG5vdCBmbHVzaGVkICovCisJaWYgKCFub2ZsdXNoKSB7CisJCW1kLT5zdXNwZW5kZWRfYmRldiA9IGJkZ2V0X2Rpc2sobWQtPmRpc2ssIDApOworCQlpZiAoIW1kLT5zdXNwZW5kZWRfYmRldikgeworCQkJRE1XQVJOKCJiZGdldCBmYWlsZWQgaW4gZG1fc3VzcGVuZCIpOworCQkJciA9IC1FTk9NRU07CisJCQlnb3RvIGZsdXNoX2FuZF9vdXQ7CisJCX0KIAl9CiAKLQkvKiBGbHVzaCBJL08gdG8gdGhlIGRldmljZS4gKi8KLQlpZiAoZG9fbG9ja2ZzKSB7CisJLyoKKwkgKiBGbHVzaCBJL08gdG8gdGhlIGRldmljZS4KKwkgKiBub2ZsdXNoIHN1cGVyc2VkZXMgZG9fbG9ja2ZzLCBiZWNhdXNlIGxvY2tfZnMoKSBuZWVkcyB0byBmbHVzaCBJL09zLgorCSAqLworCWlmIChkb19sb2NrZnMgJiYgIW5vZmx1c2gpIHsKIAkJciA9IGxvY2tfZnMobWQpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwpAQCAtMTMzNiw2ICsxMzk3LDE0IEBACiAJZG93bl93cml0ZSgmbWQtPmlvX2xvY2spOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZtZC0+d2FpdCwgJndhaXQpOwogCisJaWYgKG5vZmx1c2gpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7CisJCWNsZWFyX2JpdChETUZfTk9GTFVTSF9TVVNQRU5ESU5HLCAmbWQtPmZsYWdzKTsKKwkJYmlvX2xpc3RfbWVyZ2VfaGVhZCgmbWQtPmRlZmVycmVkLCAmbWQtPnB1c2hiYWNrKTsKKwkJYmlvX2xpc3RfaW5pdCgmbWQtPnB1c2hiYWNrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWQtPnB1c2hiYWNrX2xvY2ssIGZsYWdzKTsKKwl9CisKIAkvKiB3ZXJlIHdlIGludGVycnVwdGVkID8gKi8KIAlyID0gLUVJTlRSOwogCWlmIChhdG9taWNfcmVhZCgmbWQtPnBlbmRpbmcpKSB7CkBAIC0xMzQ0LDcgKzE0MTMsNyBAQAogCQlfX2ZsdXNoX2RlZmVycmVkX2lvKG1kLCBkZWYpOwogCQl1cF93cml0ZSgmbWQtPmlvX2xvY2spOwogCQl1bmxvY2tfZnMobWQpOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXQ7IC8qIHB1c2hiYWNrIGxpc3QgaXMgYWxyZWFkeSBmbHVzaGVkLCBzbyBza2lwIGZsdXNoICovCiAJfQogCXVwX3dyaXRlKCZtZC0+aW9fbG9jayk7CiAKQEAgLTEzNTQsNiArMTQyMywyNSBAQAogCiAJciA9IDA7CiAKK2ZsdXNoX2FuZF9vdXQ6CisJaWYgKHIgJiYgbm9mbHVzaCkgeworCQkvKgorCQkgKiBCZWNhdXNlIHRoZXJlIG1heSBiZSBhbHJlYWR5IEkvT3MgaW4gdGhlIHB1c2hiYWNrIGxpc3QsCisJCSAqIGZsdXNoIHRoZW0gYmVmb3JlIHJldHVybi4KKwkJICovCisJCWRvd25fd3JpdGUoJm1kLT5pb19sb2NrKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWQtPnB1c2hiYWNrX2xvY2ssIGZsYWdzKTsKKwkJY2xlYXJfYml0KERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcsICZtZC0+ZmxhZ3MpOworCQliaW9fbGlzdF9tZXJnZV9oZWFkKCZtZC0+ZGVmZXJyZWQsICZtZC0+cHVzaGJhY2spOworCQliaW9fbGlzdF9pbml0KCZtZC0+cHVzaGJhY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZC0+cHVzaGJhY2tfbG9jaywgZmxhZ3MpOworCisJCWRlZiA9IGJpb19saXN0X2dldCgmbWQtPmRlZmVycmVkKTsKKwkJX19mbHVzaF9kZWZlcnJlZF9pbyhtZCwgZGVmKTsKKwkJdXBfd3JpdGUoJm1kLT5pb19sb2NrKTsKKwl9CisKIG91dDoKIAlpZiAociAmJiBtZC0+c3VzcGVuZGVkX2JkZXYpIHsKIAkJYmRwdXQobWQtPnN1c3BlbmRlZF9iZGV2KTsKQEAgLTEzOTQsOCArMTQ4MiwxMCBAQAogCiAJdW5sb2NrX2ZzKG1kKTsKIAotCWJkcHV0KG1kLT5zdXNwZW5kZWRfYmRldik7Ci0JbWQtPnN1c3BlbmRlZF9iZGV2ID0gTlVMTDsKKwlpZiAobWQtPnN1c3BlbmRlZF9iZGV2KSB7CisJCWJkcHV0KG1kLT5zdXNwZW5kZWRfYmRldik7CisJCW1kLT5zdXNwZW5kZWRfYmRldiA9IE5VTEw7CisJfQogCiAJY2xlYXJfYml0KERNRl9TVVNQRU5ERUQsICZtZC0+ZmxhZ3MpOwogCkBAIC0xNDQwLDYgKzE1MzAsMTcgQEAKIAlyZXR1cm4gdGVzdF9iaXQoRE1GX1NVU1BFTkRFRCwgJm1kLT5mbGFncyk7CiB9CiAKK2ludCBkbV9ub2ZsdXNoX3N1c3BlbmRpbmcoc3RydWN0IGRtX3RhcmdldCAqdGkpCit7CisJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gZG1fdGFibGVfZ2V0X21kKHRpLT50YWJsZSk7CisJaW50IHIgPSBfX25vZmx1c2hfc3VzcGVuZGluZyhtZCk7CisKKwlkbV9wdXQobWQpOworCisJcmV0dXJuIHI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkbV9ub2ZsdXNoX3N1c3BlbmRpbmcpOworCiBzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRtX2Jsa19kb3BzID0gewogCS5vcGVuID0gZG1fYmxrX29wZW4sCiAJLnJlbGVhc2UgPSBkbV9ibGtfY2xvc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmggYi9kcml2ZXJzL21kL2RtLmgKaW5kZXggYTQ4ZWM1ZS4uMmY3OTZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5oCisrKyBiL2RyaXZlcnMvbWQvZG0uaApAQCAtMzMsNiArMzMsMjUgQEAKICNkZWZpbmUgU0VDVE9SX1NISUZUIDkKIAogLyoKKyAqIERlZmluaXRpb25zIG9mIHJldHVybiB2YWx1ZXMgZnJvbSB0YXJnZXQgZW5kX2lvIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIERNX0VORElPX0lOQ09NUExFVEUJMQorI2RlZmluZSBETV9FTkRJT19SRVFVRVVFCTIKKworLyoKKyAqIERlZmluaXRpb25zIG9mIHJldHVybiB2YWx1ZXMgZnJvbSB0YXJnZXQgbWFwIGZ1bmN0aW9uLgorICovCisjZGVmaW5lIERNX01BUElPX1NVQk1JVFRFRAkwCisjZGVmaW5lIERNX01BUElPX1JFTUFQUEVECTEKKyNkZWZpbmUgRE1fTUFQSU9fUkVRVUVVRQlETV9FTkRJT19SRVFVRVVFCisKKy8qCisgKiBTdXNwZW5kIGZlYXR1cmUgZmxhZ3MKKyAqLworI2RlZmluZSBETV9TVVNQRU5EX0xPQ0tGU19GTEFHCQkoMSA8PCAwKQorI2RlZmluZSBETV9TVVNQRU5EX05PRkxVU0hfRkxBRwkJKDEgPDwgMSkKKworLyoKICAqIExpc3Qgb2YgZGV2aWNlcyB0aGF0IGEgbWV0YWRldmljZSB1c2VzIGFuZCBzaG91bGQgb3Blbi9jbG9zZS4KICAqLwogc3RydWN0IGRtX2RldiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2ZhdWx0eS5jIGIvZHJpdmVycy9tZC9mYXVsdHkuYwppbmRleCBhN2E1YWI1Li40ZWJkMGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2ZhdWx0eS5jCisrKyBiL2RyaXZlcnMvbWQvZmF1bHR5LmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCWNvbmZfdCAqY29uZiA9IChjb25mX3QqKW1kZGV2LT5wcml2YXRlOwogCWludCBmYWlsaXQgPSAwOwogCi0JaWYgKGJpby0+YmlfcncgJiAxKSB7CisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7CiAJCS8qIHdyaXRlIHJlcXVlc3QgKi8KIAkJaWYgKGF0b21pY19yZWFkKCZjb25mLT5jb3VudGVyc1tXcml0ZUFsbF0pKSB7CiAJCQkvKiBzcGVjaWFsIGNhc2UgLSBkb24ndCBkZWNyZW1lbnQsIGRvbid0IGdlbmVyaWNfbWFrZV9yZXF1ZXN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDZjNDM0NWIuLmU4ODA3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTE0MTMsNyArMTQxMyw3IEBACiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKLQliZGV2ID0gb3Blbl9wYXJ0aXRpb25fYnlfZGV2bnVtKGRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CisJYmRldiA9IG9wZW5fYnlfZGV2bnVtKGRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CiAJaWYgKElTX0VSUihiZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1kOiBjb3VsZCBub3Qgb3BlbiAlcy5cbiIsCiAJCQlfX2JkZXZuYW1lKGRldiwgYikpOwpAQCAtMTQyMyw3ICsxNDIzLDcgQEAKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWQ6IGNvdWxkIG5vdCBiZF9jbGFpbSAlcy5cbiIsCiAJCQliZGV2bmFtZShiZGV2LCBiKSk7Ci0JCWJsa2Rldl9wdXRfcGFydGl0aW9uKGJkZXYpOworCQlibGtkZXZfcHV0KGJkZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlyZGV2LT5iZGV2ID0gYmRldjsKQEAgLTE0MzcsNyArMTQzNyw3IEBACiAJaWYgKCFiZGV2KQogCQlNRF9CVUcoKTsKIAliZF9yZWxlYXNlKGJkZXYpOwotCWJsa2Rldl9wdXRfcGFydGl0aW9uKGJkZXYpOworCWJsa2Rldl9wdXQoYmRldik7CiB9CiAKIHZvaWQgbWRfYXV0b2RldGVjdF9kZXYoZGV2X3QgZGV2KTsKQEAgLTE2MzMsNyArMTYzMyw4IEBACiAJICogYW5kICdldmVudHMnIGlzIG9kZCwgd2UgY2FuIHJvbGwgYmFjayB0byB0aGUgcHJldmlvdXMgY2xlYW4gc3RhdGUgKi8KIAlpZiAobm9zcGFyZXMKIAkgICAgJiYgKG1kZGV2LT5pbl9zeW5jICYmIG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IpCi0JICAgICYmIChtZGRldi0+ZXZlbnRzICYgMSkpCisJICAgICYmIChtZGRldi0+ZXZlbnRzICYgMSkKKwkgICAgJiYgbWRkZXYtPmV2ZW50cyAhPSAxKQogCQltZGRldi0+ZXZlbnRzLS07CiAJZWxzZSB7CiAJCS8qIG90aGVyd2lzZSB3ZSBoYXZlIHRvIGdvIGZvcndhcmQgYW5kIC4uLiAqLwpAQCAtMTc5Miw3ICsxNzkzLDggQEAKIAkJZWxzZSB7CiAJCQltZGRldl90ICptZGRldiA9IHJkZXYtPm1kZGV2OwogCQkJa2lja19yZGV2X2Zyb21fYXJyYXkocmRldik7Ci0JCQltZF91cGRhdGVfc2IobWRkZXYsIDEpOworCQkJaWYgKG1kZGV2LT5wZXJzKQorCQkJCW1kX3VwZGF0ZV9zYihtZGRldiwgMSk7CiAJCQltZF9uZXdfZXZlbnQobWRkZXYpOwogCQkJZXJyID0gMDsKIAkJfQpAQCAtMjAwNCw2ICsyMDA2LDcgQEAKIAogCXJkZXYtPmRlc2NfbnIgPSAtMTsKIAlyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgPSAtMTsKKwlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKIAlyZGV2LT5mbGFncyA9IDA7CiAJcmRldi0+ZGF0YV9vZmZzZXQgPSAwOwogCXJkZXYtPnNiX2V2ZW50cyA9IDA7CkBAIC0yMjMzLDcgKzIyMzYsNiBAQAogc3RhdGljIHNzaXplX3QKIHJhaWRfZGlza3Nfc3RvcmUobWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQkvKiBjYW4gb25seSBzZXQgcmFpZF9kaXNrcyBpZiBhcnJheSBpcyBub3QgeWV0IGFjdGl2ZSAqLwogCWNoYXIgKmU7CiAJaW50IHJ2ID0gMDsKIAl1bnNpZ25lZCBsb25nIG4gPSBzaW1wbGVfc3RydG91bChidWYsICZlLCAxMCk7CkBAIC0yNjMxLDcgKzI2MzMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlidWYgPSBlKzE7CiAJbWlub3IgPSBzaW1wbGVfc3RydG91bChidWYsICZlLCAxMCk7Ci0JaWYgKGU9PWJ1ZiB8fCAqZSAhPSAnXG4nKQorCWlmIChlPT1idWYgfHwgKCplICYmICplICE9ICdcbicpICkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKG1ham9yID49IHNpemVvZihzdXBlcl90eXBlcykvc2l6ZW9mKHN1cGVyX3R5cGVzWzBdKSB8fAogCSAgICBzdXBlcl90eXBlc1ttYWpvcl0ubmFtZSA9PSBOVUxMKQpAQCAtMzMxNCw2ICszMzE2LDEwIEBACiAKIAkJCW1vZHVsZV9wdXQobWRkZXYtPnBlcnMtPm93bmVyKTsKIAkJCW1kZGV2LT5wZXJzID0gTlVMTDsKKworCQkJc2V0X2NhcGFjaXR5KGRpc2ssIDApOworCQkJbWRkZXYtPmNoYW5nZWQgPSAxOworCiAJCQlpZiAobWRkZXYtPnJvKQogCQkJCW1kZGV2LT5ybyA9IDA7CiAJCX0KQEAgLTMzMzMsNyArMzMzOSw3IEBACiAJaWYgKG1vZGUgPT0gMCkgewogCQltZGtfcmRldl90ICpyZGV2OwogCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0JCXN0cnVjdCBnZW5kaXNrICpkaXNrOworCiAJCXByaW50ayhLRVJOX0lORk8gIm1kOiAlcyBzdG9wcGVkLlxuIiwgbWRuYW1lKG1kZGV2KSk7CiAKIAkJYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwpAQCAtMzM1OCwxMCArMzM2NCw2IEBACiAJCW1kZGV2LT5yYWlkX2Rpc2tzID0gMDsKIAkJbWRkZXYtPnJlY292ZXJ5X2NwID0gMDsKIAotCQlkaXNrID0gbWRkZXYtPmdlbmRpc2s7Ci0JCWlmIChkaXNrKQotCQkJc2V0X2NhcGFjaXR5KGRpc2ssIDApOwotCQltZGRldi0+Y2hhbmdlZCA9IDE7CiAJfSBlbHNlIGlmIChtZGRldi0+cGVycykKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWQ6ICVzIHN3aXRjaGVkIHRvIHJlYWQtb25seSBtb2RlLlxuIiwKIAkJCW1kbmFtZShtZGRldikpOwpAQCAtMzM3MSw2ICszMzczLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCisjaWZuZGVmIE1PRFVMRQogc3RhdGljIHZvaWQgYXV0b3J1bl9hcnJheShtZGRldl90ICptZGRldikKIHsKIAltZGtfcmRldl90ICpyZGV2OwpAQCAtMzQ4NSw2ICszNDg4LDcgQEAKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IC4uLiBhdXRvcnVuIERPTkUuXG4iKTsKIH0KKyNlbmRpZiAvKiAhTU9EVUxFICovCiAKIHN0YXRpYyBpbnQgZ2V0X3ZlcnNpb24odm9pZCBfX3VzZXIgKiBhcmcpCiB7CkBAIC0zNTYwLDYgKzM1NjQsOCBAQAogCWNoYXIgKnB0ciwgKmJ1ZiA9IE5VTEw7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKKwltZF9hbGxvd193cml0ZShtZGRldik7CisKIAlmaWxlID0ga21hbGxvYyhzaXplb2YoKmZpbGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0OwpAQCAtMzcyMiw2ICszNzI4LDcgQEAKIAkJaWYgKGVycikKIAkJCWV4cG9ydF9yZGV2KHJkZXYpOwogCisJCW1kX3VwZGF0ZV9zYihtZGRldiwgMSk7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTM5NzcsNiArMzk4NCw3IEBACiAJCW1kZGV2LT5tYWpvcl92ZXJzaW9uID0gaW5mby0+bWFqb3JfdmVyc2lvbjsKIAkJbWRkZXYtPm1pbm9yX3ZlcnNpb24gPSBpbmZvLT5taW5vcl92ZXJzaW9uOwogCQltZGRldi0+cGF0Y2hfdmVyc2lvbiA9IGluZm8tPnBhdGNoX3ZlcnNpb247CisJCW1kZGV2LT5wZXJzaXN0ZW50ID0gIWluZm8tPm5vdF9wZXJzaXN0ZW50OwogCQlyZXR1cm4gMDsKIAl9CiAJbWRkZXYtPm1ham9yX3ZlcnNpb24gPSBNRF9NQUpPUl9WRVJTSU9OOwpAQCAtNDMwMSw5ICs0MzA5LDEwIEBACiAJICogQ29tbWFuZHMgcXVlcnlpbmcvY29uZmlndXJpbmcgYW4gZXhpc3RpbmcgYXJyYXk6CiAJICovCiAJLyogaWYgd2UgYXJlIG5vdCBpbml0aWFsaXNlZCB5ZXQsIG9ubHkgQUREX05FV19ESVNLLCBTVE9QX0FSUkFZLAotCSAqIFJVTl9BUlJBWSwgYW5kIFNFVF9CSVRNQVBfRklMRSBhcmUgYWxsb3dlZCAqLworCSAqIFJVTl9BUlJBWSwgYW5kIEdFVF8gYW5kIFNFVF9CSVRNQVBfRklMRSBhcmUgYWxsb3dlZCAqLwogCWlmICghbWRkZXYtPnJhaWRfZGlza3MgJiYgY21kICE9IEFERF9ORVdfRElTSyAmJiBjbWQgIT0gU1RPUF9BUlJBWQotCQkJJiYgY21kICE9IFJVTl9BUlJBWSAmJiBjbWQgIT0gU0VUX0JJVE1BUF9GSUxFKSB7CisJCQkmJiBjbWQgIT0gUlVOX0FSUkFZICYmIGNtZCAhPSBTRVRfQklUTUFQX0ZJTEUKKwkgICAgCQkmJiBjbWQgIT0gR0VUX0JJVE1BUF9GSUxFKSB7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gYWJvcnRfdW5sb2NrOwogCX0KQEAgLTQ0MjMsNyArNDQzMiw3IEBACiAJbWRkZXZfdCAqbWRkZXYgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gbWRkZXZfbG9jayhtZGRldikpKQorCWlmICgoZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX25lc3RlZCgmbWRkZXYtPnJlY29uZmlnX211dGV4LCAxKSkpCiAJCWdvdG8gb3V0OwogCiAJZXJyID0gMDsKQEAgLTQ4NDYsOCArNDg1NSw4IEBACiAJCQkJY2h1bmtfa2IgPyAiS0IiIDogIkIiKTsKIAkJCWlmIChiaXRtYXAtPmZpbGUpIHsKIAkJCQlzZXFfcHJpbnRmKHNlcSwgIiwgZmlsZTogIik7Ci0JCQkJc2VxX3BhdGgoc2VxLCBiaXRtYXAtPmZpbGUtPmZfdmZzbW50LAotCQkJCQkgYml0bWFwLT5maWxlLT5mX2RlbnRyeSwiIFx0XG4iKTsKKwkJCQlzZXFfcGF0aChzZXEsIGJpdG1hcC0+ZmlsZS0+Zl9wYXRoLm1udCwKKwkJCQkJIGJpdG1hcC0+ZmlsZS0+Zl9wYXRoLmRlbnRyeSwiIFx0XG4iKTsKIAkJCX0KIAogCQkJc2VxX3ByaW50ZihzZXEsICJcbiIpOwpAQCAtNTAyNSw2ICs1MDM0LDMzIEBACiAJfQogfQogCisvKiBtZF9hbGxvd193cml0ZShtZGRldikKKyAqIENhbGxpbmcgdGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5IGlzIG1hcmtlZCAnYWN0aXZlJyBzbyB0aGF0IHdyaXRlcworICogbWF5IHByb2NlZWQgd2l0aG91dCBibG9ja2luZy4gIEl0IGlzIGltcG9ydGFudCB0byBjYWxsIHRoaXMgYmVmb3JlCisgKiBhdHRlbXB0aW5nIGEgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uIHdoaWxlIGhvbGRpbmcgdGhlIG1kZGV2IGxvY2suCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG1kZGV2X2xvY2sgaGVsZC4KKyAqLwordm9pZCBtZF9hbGxvd193cml0ZShtZGRldl90ICptZGRldikKK3sKKwlpZiAoIW1kZGV2LT5wZXJzKQorCQlyZXR1cm47CisJaWYgKG1kZGV2LT5ybykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycSgmbWRkZXYtPndyaXRlX2xvY2spOworCWlmIChtZGRldi0+aW5fc3luYykgeworCQltZGRldi0+aW5fc3luYyA9IDA7CisJCXNldF9iaXQoTURfQ0hBTkdFX0NMRUFOLCAmbWRkZXYtPmZsYWdzKTsKKwkJaWYgKG1kZGV2LT5zYWZlbW9kZV9kZWxheSAmJgorCQkgICAgbWRkZXYtPnNhZmVtb2RlID09IDApCisJCQltZGRldi0+c2FmZW1vZGUgPSAxOworCQlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKKwkJbWRfdXBkYXRlX3NiKG1kZGV2LCAwKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtZF9hbGxvd193cml0ZSk7CisKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZXN5bmNfd2FpdCk7CiAKICNkZWZpbmUgU1lOQ19NQVJLUwkxMApAQCAtNTI3Myw3ICs1MzA5LDYgQEAKIAltZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KG1kZGV2LCBtYXhfc2VjdG9ycywgJnNraXBwZWQsIDEpOwogCiAJaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9FUlIsICZtZGRldi0+cmVjb3ZlcnkpICYmCi0JICAgIHRlc3RfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpICYmCiAJICAgICF0ZXN0X2JpdChNRF9SRUNPVkVSWV9DSEVDSywgJm1kZGV2LT5yZWNvdmVyeSkgJiYKIAkgICAgbWRkZXYtPmN1cnJfcmVzeW5jID4gMikgewogCQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSkpIHsKQEAgLTUyOTcsNiArNTMzMiw3IEBACiAJCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IG1kZGV2LT5jdXJyX3Jlc3luYzsKIAkJfQogCX0KKwlzZXRfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKTsKIAogIHNraXA6CiAJbWRkZXYtPmN1cnJfcmVzeW5jID0gMDsKQEAgLTU1OTMsNyArNTYyOSw3IEBACiAJYXV0b3J1bl9kZXZpY2VzKHBhcnQpOwogfQogCi0jZW5kaWYKKyNlbmRpZiAvKiAhTU9EVUxFICovCiAKIHN0YXRpYyBfX2V4aXQgdm9pZCBtZF9leGl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggNjU2ZmFlOS4uOTdlZTg3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtNzc1LDYgKzc3NSw3IEBACiAJc3RydWN0IGJpb19saXN0IGJsOwogCXN0cnVjdCBwYWdlICoqYmVoaW5kX3BhZ2VzID0gTlVMTDsKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKKwljb25zdCBpbnQgZG9fc3luYyA9IGJpb19zeW5jKGJpbyk7CiAJaW50IGRvX2JhcnJpZXJzOwogCiAJLyoKQEAgLTgzNSw3ICs4MzYsNyBAQAogCQlyZWFkX2Jpby0+Ymlfc2VjdG9yID0gcjFfYmlvLT5zZWN0b3IgKyBtaXJyb3ItPnJkZXYtPmRhdGFfb2Zmc2V0OwogCQlyZWFkX2Jpby0+YmlfYmRldiA9IG1pcnJvci0+cmRldi0+YmRldjsKIAkJcmVhZF9iaW8tPmJpX2VuZF9pbyA9IHJhaWQxX2VuZF9yZWFkX3JlcXVlc3Q7Ci0JCXJlYWRfYmlvLT5iaV9ydyA9IFJFQUQ7CisJCXJlYWRfYmlvLT5iaV9ydyA9IFJFQUQgfCBkb19zeW5jOwogCQlyZWFkX2Jpby0+YmlfcHJpdmF0ZSA9IHIxX2JpbzsKIAogCQlnZW5lcmljX21ha2VfcmVxdWVzdChyZWFkX2Jpbyk7CkBAIC05MDYsNyArOTA3LDcgQEAKIAkJbWJpby0+Ymlfc2VjdG9yCT0gcjFfYmlvLT5zZWN0b3IgKyBjb25mLT5taXJyb3JzW2ldLnJkZXYtPmRhdGFfb2Zmc2V0OwogCQltYmlvLT5iaV9iZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2LT5iZGV2OwogCQltYmlvLT5iaV9lbmRfaW8JPSByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdDsKLQkJbWJpby0+YmlfcncgPSBXUklURSB8IGRvX2JhcnJpZXJzOworCQltYmlvLT5iaV9ydyA9IFdSSVRFIHwgZG9fYmFycmllcnMgfCBkb19zeW5jOwogCQltYmlvLT5iaV9wcml2YXRlID0gcjFfYmlvOwogCiAJCWlmIChiZWhpbmRfcGFnZXMpIHsKQEAgLTk0MSw2ICs5NDIsOCBAQAogCWJsa19wbHVnX2RldmljZShtZGRldi0+cXVldWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAKKwlpZiAoZG9fc3luYykKKwkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKICNpZiAwCiAJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmJsKSkgIT0gTlVMTCkKIAkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKQEAgLTEyNjMsNiArMTI2NiwxMSBAQAogCQkJCQlzYmlvLT5iaV9zZWN0b3IgPSByMV9iaW8tPnNlY3RvciArCiAJCQkJCQljb25mLT5taXJyb3JzW2ldLnJkZXYtPmRhdGFfb2Zmc2V0OwogCQkJCQlzYmlvLT5iaV9iZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2LT5iZGV2OworCQkJCQlmb3IgKGogPSAwOyBqIDwgdmNudCA7IGorKykKKwkJCQkJCW1lbWNweShwYWdlX2FkZHJlc3Moc2Jpby0+YmlfaW9fdmVjW2pdLmJ2X3BhZ2UpLAorCQkJCQkJICAgICAgIHBhZ2VfYWRkcmVzcyhwYmlvLT5iaV9pb192ZWNbal0uYnZfcGFnZSksCisJCQkJCQkgICAgICAgUEFHRV9TSVpFKTsKKwogCQkJCX0KIAkJCX0KIAl9CkBAIC0xNTQxLDYgKzE1NDksNyBAQAogCQkJICogV2UgYWxyZWFkeSBoYXZlIGEgbnJfcGVuZGluZyByZWZlcmVuY2Ugb24gdGhlc2UgcmRldnMuCiAJCQkgKi8KIAkJCWludCBpOworCQkJY29uc3QgaW50IGRvX3N5bmMgPSBiaW9fc3luYyhyMV9iaW8tPm1hc3Rlcl9iaW8pOwogCQkJY2xlYXJfYml0KFIxQklPX0JhcnJpZXJSZXRyeSwgJnIxX2Jpby0+c3RhdGUpOwogCQkJY2xlYXJfYml0KFIxQklPX0JhcnJpZXIsICZyMV9iaW8tPnN0YXRlKTsKIAkJCWZvciAoaT0wOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKQpAQCAtMTU2MSw3ICsxNTcwLDcgQEAKIAkJCQkJCWNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZGF0YV9vZmZzZXQ7CiAJCQkJCWJpby0+YmlfYmRldiA9IGNvbmYtPm1pcnJvcnNbaV0ucmRldi0+YmRldjsKIAkJCQkJYmlvLT5iaV9lbmRfaW8gPSByYWlkMV9lbmRfd3JpdGVfcmVxdWVzdDsKLQkJCQkJYmlvLT5iaV9ydyA9IFdSSVRFOworCQkJCQliaW8tPmJpX3J3ID0gV1JJVEUgfCBkb19zeW5jOwogCQkJCQliaW8tPmJpX3ByaXZhdGUgPSByMV9iaW87CiAJCQkJCXIxX2Jpby0+Ymlvc1tpXSA9IGJpbzsKIAkJCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKQEAgLTE1OTMsNiArMTYwMiw3IEBACiAJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcjFfYmlvLT5zZWN0b3IpOwogCQkJCXJhaWRfZW5kX2Jpb19pbyhyMV9iaW8pOwogCQkJfSBlbHNlIHsKKwkJCQljb25zdCBpbnQgZG9fc3luYyA9IGJpb19zeW5jKHIxX2Jpby0+bWFzdGVyX2Jpbyk7CiAJCQkJcjFfYmlvLT5iaW9zW3IxX2Jpby0+cmVhZF9kaXNrXSA9CiAJCQkJCW1kZGV2LT5ybyA/IElPX0JMT0NLRUQgOiBOVUxMOwogCQkJCXIxX2Jpby0+cmVhZF9kaXNrID0gZGlzazsKQEAgLTE2MDgsNyArMTYxOCw3IEBACiAJCQkJYmlvLT5iaV9zZWN0b3IgPSByMV9iaW8tPnNlY3RvciArIHJkZXYtPmRhdGFfb2Zmc2V0OwogCQkJCWJpby0+YmlfYmRldiA9IHJkZXYtPmJkZXY7CiAJCQkJYmlvLT5iaV9lbmRfaW8gPSByYWlkMV9lbmRfcmVhZF9yZXF1ZXN0OwotCQkJCWJpby0+YmlfcncgPSBSRUFEOworCQkJCWJpby0+YmlfcncgPSBSRUFEIHwgZG9fc3luYzsKIAkJCQliaW8tPmJpX3ByaXZhdGUgPSByMV9iaW87CiAJCQkJdW5wbHVnID0gMTsKIAkJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwpAQCAtMTczNiw3ICsxNzQ2LDcgQEAKIAkJLyogdGFrZSBmcm9tIGJpb19pbml0ICovCiAJCWJpby0+YmlfbmV4dCA9IE5VTEw7CiAJCWJpby0+YmlfZmxhZ3MgfD0gMSA8PCBCSU9fVVBUT0RBVEU7Ci0JCWJpby0+YmlfcncgPSAwOworCQliaW8tPmJpX3J3ID0gUkVBRDsKIAkJYmlvLT5iaV92Y250ID0gMDsKIAkJYmlvLT5iaV9pZHggPSAwOwogCQliaW8tPmJpX3BoeXNfc2VnbWVudHMgPSAwOwpAQCAtMTk1MSw2ICsxOTYxLDcgQEAKIAkJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmZGlzay0+cmRldi0+ZmxhZ3MpKSB7CiAJCQlkaXNrLT5oZWFkX3Bvc2l0aW9uID0gMDsKIAkJCW1kZGV2LT5kZWdyYWRlZCsrOworCQkJY29uZi0+ZnVsbHN5bmMgPSAxOwogCQl9CiAJfQogCWlmIChtZGRldi0+ZGVncmFkZWQgPT0gY29uZi0+cmFpZF9kaXNrcykgewpAQCAtMjA5Myw2ICsyMTA0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJbWRfYWxsb3dfd3JpdGUobWRkZXYpOworCiAJcmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzICsgbWRkZXYtPmRlbHRhX2Rpc2tzOwogCiAJaWYgKHJhaWRfZGlza3MgPCBjb25mLT5yYWlkX2Rpc2tzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA3NDkyZDYwLi5hOTQwMWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTc4Miw2ICs3ODIsNyBAQAogCWludCBpOwogCWludCBjaHVua19zZWN0cyA9IGNvbmYtPmNodW5rX21hc2sgKyAxOwogCWNvbnN0IGludCBydyA9IGJpb19kYXRhX2RpcihiaW8pOworCWNvbnN0IGludCBkb19zeW5jID0gYmlvX3N5bmMoYmlvKTsKIAlzdHJ1Y3QgYmlvX2xpc3QgYmw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtODYzLDcgKzg2NCw3IEBACiAJCQltaXJyb3ItPnJkZXYtPmRhdGFfb2Zmc2V0OwogCQlyZWFkX2Jpby0+YmlfYmRldiA9IG1pcnJvci0+cmRldi0+YmRldjsKIAkJcmVhZF9iaW8tPmJpX2VuZF9pbyA9IHJhaWQxMF9lbmRfcmVhZF9yZXF1ZXN0OwotCQlyZWFkX2Jpby0+YmlfcncgPSBSRUFEOworCQlyZWFkX2Jpby0+YmlfcncgPSBSRUFEIHwgZG9fc3luYzsKIAkJcmVhZF9iaW8tPmJpX3ByaXZhdGUgPSByMTBfYmlvOwogCiAJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KHJlYWRfYmlvKTsKQEAgLTkwOSw3ICs5MTAsNyBAQAogCQkJY29uZi0+bWlycm9yc1tkXS5yZGV2LT5kYXRhX29mZnNldDsKIAkJbWJpby0+YmlfYmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldi0+YmRldjsKIAkJbWJpby0+YmlfZW5kX2lvCT0gcmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0OwotCQltYmlvLT5iaV9ydyA9IFdSSVRFOworCQltYmlvLT5iaV9ydyA9IFdSSVRFIHwgZG9fc3luYzsKIAkJbWJpby0+YmlfcHJpdmF0ZSA9IHIxMF9iaW87CiAKIAkJYXRvbWljX2luYygmcjEwX2Jpby0+cmVtYWluaW5nKTsKQEAgLTkyMiw2ICs5MjMsOSBAQAogCWJsa19wbHVnX2RldmljZShtZGRldi0+cXVldWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAKKwlpZiAoZG9fc3luYykKKwkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTYzLDYgKzE1NjcsNyBAQAogCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXIxMF9iaW8tPnNlY3Rvcik7CiAJCQkJcmFpZF9lbmRfYmlvX2lvKHIxMF9iaW8pOwogCQkJfSBlbHNlIHsKKwkJCQljb25zdCBpbnQgZG9fc3luYyA9IGJpb19zeW5jKHIxMF9iaW8tPm1hc3Rlcl9iaW8pOwogCQkJCXJkZXYgPSBjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldjsKIAkJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJCQlwcmludGsoS0VSTl9FUlIgInJhaWQxMDogJXM6IHJlZGlyZWN0aW5nIHNlY3RvciAlbGx1IHRvIgpAQCAtMTU3NCw3ICsxNTc5LDcgQEAKIAkJCQliaW8tPmJpX3NlY3RvciA9IHIxMF9iaW8tPmRldnNbcjEwX2Jpby0+cmVhZF9zbG90XS5hZGRyCiAJCQkJCSsgcmRldi0+ZGF0YV9vZmZzZXQ7CiAJCQkJYmlvLT5iaV9iZGV2ID0gcmRldi0+YmRldjsKLQkJCQliaW8tPmJpX3J3ID0gUkVBRDsKKwkJCQliaW8tPmJpX3J3ID0gUkVBRCB8IGRvX3N5bmM7CiAJCQkJYmlvLT5iaV9wcml2YXRlID0gcjEwX2JpbzsKIAkJCQliaW8tPmJpX2VuZF9pbyA9IHJhaWQxMF9lbmRfcmVhZF9yZXF1ZXN0OwogCQkJCXVucGx1ZyA9IDE7CkBAIC0xNzg1LDcgKzE3OTAsNyBAQAogCQkJCQkJYmlvbGlzdCA9IGJpbzsKIAkJCQkJCWJpby0+YmlfcHJpdmF0ZSA9IHIxMF9iaW87CiAJCQkJCQliaW8tPmJpX2VuZF9pbyA9IGVuZF9zeW5jX3JlYWQ7Ci0JCQkJCQliaW8tPmJpX3J3ID0gMDsKKwkJCQkJCWJpby0+YmlfcncgPSBSRUFEOwogCQkJCQkJYmlvLT5iaV9zZWN0b3IgPSByMTBfYmlvLT5kZXZzW2pdLmFkZHIgKwogCQkJCQkJCWNvbmYtPm1pcnJvcnNbZF0ucmRldi0+ZGF0YV9vZmZzZXQ7CiAJCQkJCQliaW8tPmJpX2JkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXYtPmJkZXY7CkBAIC0xODAxLDcgKzE4MDYsNyBAQAogCQkJCQkJYmlvbGlzdCA9IGJpbzsKIAkJCQkJCWJpby0+YmlfcHJpdmF0ZSA9IHIxMF9iaW87CiAJCQkJCQliaW8tPmJpX2VuZF9pbyA9IGVuZF9zeW5jX3dyaXRlOwotCQkJCQkJYmlvLT5iaV9ydyA9IDE7CisJCQkJCQliaW8tPmJpX3J3ID0gV1JJVEU7CiAJCQkJCQliaW8tPmJpX3NlY3RvciA9IHIxMF9iaW8tPmRldnNba10uYWRkciArCiAJCQkJCQkJY29uZi0+bWlycm9yc1tpXS5yZGV2LT5kYXRhX29mZnNldDsKIAkJCQkJCWJpby0+YmlfYmRldiA9IGNvbmYtPm1pcnJvcnNbaV0ucmRldi0+YmRldjsKQEAgLTE4NzAsNyArMTg3NSw3IEBACiAJCQliaW9saXN0ID0gYmlvOwogCQkJYmlvLT5iaV9wcml2YXRlID0gcjEwX2JpbzsKIAkJCWJpby0+YmlfZW5kX2lvID0gZW5kX3N5bmNfcmVhZDsKLQkJCWJpby0+YmlfcncgPSAwOworCQkJYmlvLT5iaV9ydyA9IFJFQUQ7CiAJCQliaW8tPmJpX3NlY3RvciA9IHIxMF9iaW8tPmRldnNbaV0uYWRkciArCiAJCQkJY29uZi0+bWlycm9yc1tkXS5yZGV2LT5kYXRhX29mZnNldDsKIAkJCWJpby0+YmlfYmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldi0+YmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCA1MjkxNGQ1Li40NjdjMTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC0xMzQsNiArMTM0LDggQEAKIAkJCWlmICghdGVzdF9iaXQoU1RSSVBFX0VYUEFORElORywgJnNoLT5zdGF0ZSkpIHsKIAkJCQlsaXN0X2FkZF90YWlsKCZzaC0+bHJ1LCAmY29uZi0+aW5hY3RpdmVfbGlzdCk7CiAJCQkJd2FrZV91cCgmY29uZi0+d2FpdF9mb3Jfc3RyaXBlKTsKKwkJCQlpZiAoY29uZi0+cmV0cnlfcmVhZF9hbGlnbmVkKQorCQkJCQltZF93YWtldXBfdGhyZWFkKGNvbmYtPm1kZGV2LT50aHJlYWQpOwogCQkJfQogCQl9CiAJfQpAQCAtNDAzLDYgKzQwNSw4IEBACiAJaWYgKG5ld3NpemUgPD0gY29uZi0+cG9vbF9zaXplKQogCQlyZXR1cm4gMDsgLyogbmV2ZXIgYm90aGVyIHRvIHNocmluayAqLwogCisJbWRfYWxsb3dfd3JpdGUoY29uZi0+bWRkZXYpOworCiAJLyogU3RlcCAxICovCiAJc2MgPSBrbWVtX2NhY2hlX2NyZWF0ZShjb25mLT5jYWNoZV9uYW1lWzEtY29uZi0+YWN0aXZlX25hbWVdLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpKyhuZXdzaXplLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpLApAQCAtNTQyLDM1ICs1NDYsNyBAQAogCX0KIAogCWlmICh1cHRvZGF0ZSkgewotI2lmIDAKLQkJc3RydWN0IGJpbyAqYmlvOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJLyogd2UgY2FuIHJldHVybiBhIGJ1ZmZlciBpZiB3ZSBieXBhc3NlZCB0aGUgY2FjaGUgb3IKLQkJICogaWYgdGhlIHRvcCBidWZmZXIgaXMgbm90IGluIGhpZ2htZW0uICBJZiB0aGVyZSBhcmUKLQkJICogbXVsdGlwbGUgYnVmZmVycywgbGVhdmUgdGhlIGV4dHJhIHdvcmsgdG8KLQkJICogaGFuZGxlX3N0cmlwZQotCQkgKi8KLQkJYnVmZmVyID0gc2gtPmJoX3JlYWRbaV07Ci0JCWlmIChidWZmZXIgJiYKLQkJICAgICghUGFnZUhpZ2hNZW0oYnVmZmVyLT5iX3BhZ2UpCi0JCSAgICAgfHwgYnVmZmVyLT5iX3BhZ2UgPT0gYmgtPmJfcGFnZSApCi0JCQkpIHsKLQkJCXNoLT5iaF9yZWFkW2ldID0gYnVmZmVyLT5iX3JlcW5leHQ7Ci0JCQlidWZmZXItPmJfcmVxbmV4dCA9IE5VTEw7Ci0JCX0gZWxzZQotCQkJYnVmZmVyID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHNoLT5iaF9wYWdlW2ldPT1iaC0+Yl9wYWdlKQotCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7Ci0JCWlmIChidWZmZXIpIHsKLQkJCWlmIChidWZmZXItPmJfcGFnZSAhPSBiaC0+Yl9wYWdlKQotCQkJCW1lbWNweShidWZmZXItPmJfZGF0YSwgYmgtPmJfZGF0YSwgYmgtPmJfc2l6ZSk7Ci0JCQlidWZmZXItPmJfZW5kX2lvKGJ1ZmZlciwgMSk7Ci0JCX0KLSNlbHNlCiAJCXNldF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2ldLmZsYWdzKTsKLSNlbmRpZgogCQlpZiAodGVzdF9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltpXS5mbGFncykpIHsKIAkJCXJkZXYgPSBjb25mLT5kaXNrc1tpXS5yZGV2OwogCQkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDU6JXM6IHJlYWQgZXJyb3IgY29ycmVjdGVkICglbHUgc2VjdG9ycyBhdCAlbGx1IG9uICVzKVxuIiwKQEAgLTYxNiwxNCArNTkyLDYgQEAKIAkJfQogCX0KIAlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPmRpc2tzW2ldLnJkZXYsIGNvbmYtPm1kZGV2KTsKLSNpZiAwCi0JLyogbXVzdCByZXN0b3JlIGJfcGFnZSBiZWZvcmUgdW5sb2NraW5nIGJ1ZmZlci4uLiAqLwotCWlmIChzaC0+YmhfcGFnZVtpXSAhPSBiaC0+Yl9wYWdlKSB7Ci0JCWJoLT5iX3BhZ2UgPSBzaC0+YmhfcGFnZVtpXTsKLQkJYmgtPmJfZGF0YSA9IHBhZ2VfYWRkcmVzcyhiaC0+Yl9wYWdlKTsKLQkJY2xlYXJfYnVmZmVyX3VwdG9kYXRlKGJoKTsKLQl9Ci0jZW5kaWYKIAljbGVhcl9iaXQoUjVfTE9DS0VELCAmc2gtPmRldltpXS5mbGFncyk7CiAJc2V0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKTsKIAlyZWxlYXNlX3N0cmlwZShzaCk7CkBAIC04MjEsNyArNzg5LDggQEAKIHN0YXRpYyBzZWN0b3JfdCBjb21wdXRlX2Jsb2NrbnIoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGkpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKLQlpbnQgcmFpZF9kaXNrcyA9IHNoLT5kaXNrcywgZGF0YV9kaXNrcyA9IHJhaWRfZGlza3MgLSAxOworCWludCByYWlkX2Rpc2tzID0gc2gtPmRpc2tzOworCWludCBkYXRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKIAlzZWN0b3JfdCBuZXdfc2VjdG9yID0gc2gtPnNlY3RvciwgY2hlY2s7CiAJaW50IHNlY3RvcnNfcGVyX2NodW5rID0gY29uZi0+Y2h1bmtfc2l6ZSA+PiA5OwogCXNlY3Rvcl90IHN0cmlwZTsKQEAgLTg1Nyw3ICs4MjYsNiBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgNjoKLQkJZGF0YV9kaXNrcyA9IHJhaWRfZGlza3MgLSAyOwogCQlpZiAoaSA9PSByYWlkNl9uZXh0X2Rpc2soc2gtPnBkX2lkeCwgcmFpZF9kaXNrcykpCiAJCQlyZXR1cm4gMDsgLyogSXQgaXMgdGhlIFEgZGlzayAqLwogCQlzd2l0Y2ggKGNvbmYtPmFsZ29yaXRobSkgewpAQCAtMTM1Myw4ICsxMzIxLDEwIEBACiAJaW50IHBkX2lkeCwgZGRfaWR4OwogCWludCBjaHVua19vZmZzZXQgPSBzZWN0b3JfZGl2KHN0cmlwZSwgc2VjdG9yc19wZXJfY2h1bmspOwogCi0JcmFpZDVfY29tcHV0ZV9zZWN0b3Ioc3RyaXBlKihkaXNrcy0xKSpzZWN0b3JzX3Blcl9jaHVuawotCQkJICAgICArIGNodW5rX29mZnNldCwgZGlza3MsIGRpc2tzLTEsICZkZF9pZHgsICZwZF9pZHgsIGNvbmYpOworCXJhaWQ1X2NvbXB1dGVfc2VjdG9yKHN0cmlwZSAqIChkaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCkKKwkJCSAgICAgKnNlY3RvcnNfcGVyX2NodW5rICsgY2h1bmtfb2Zmc2V0LAorCQkJICAgICBkaXNrcywgZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQsCisJCQkgICAgICZkZF9pZHgsICZwZF9pZHgsIGNvbmYpOwogCXJldHVybiBwZF9pZHg7CiB9CiAKQEAgLTE2MTUsMTUgKzE1ODUsNiBAQAogCQkJCX0gZWxzZSBpZiAodGVzdF9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFncykpIHsKIAkJCQkJc2V0X2JpdChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKTsKIAkJCQkJc2V0X2JpdChSNV9XYW50cmVhZCwgJmRldi0+ZmxhZ3MpOwotI2lmIDAKLQkJCQkJLyogaWYgSSBhbSBqdXN0IHJlYWRpbmcgdGhpcyBibG9jayBhbmQgd2UgZG9uJ3QgaGF2ZQotCQkJCQkgICBhIGZhaWxlZCBkcml2ZSwgb3IgYW55IHBlbmRpbmcgd3JpdGVzIHRoZW4gc2lkZXN0ZXAgdGhlIGNhY2hlICovCi0JCQkJCWlmIChzaC0+YmhfcmVhZFtpXSAmJiAhc2gtPmJoX3JlYWRbaV0tPmJfcmVxbmV4dCAmJgotCQkJCQkgICAgISBzeW5jaW5nICYmICFmYWlsZWQgJiYgIXRvX3dyaXRlKSB7Ci0JCQkJCQlzaC0+YmhfY2FjaGVbaV0tPmJfcGFnZSA9ICBzaC0+YmhfcmVhZFtpXS0+Yl9wYWdlOwotCQkJCQkJc2gtPmJoX2NhY2hlW2ldLT5iX2RhdGEgPSAgc2gtPmJoX3JlYWRbaV0tPmJfZGF0YTsKLQkJCQkJfQotI2VuZGlmCiAJCQkJCWxvY2tlZCsrOwogCQkJCQlQUklOVEsoIlJlYWRpbmcgYmxvY2sgJWQgKHN5bmM9JWQpXG4iLCAKIAkJCQkJCWksIHN5bmNpbmcpOwpAQCAtMTY0MSw5ICsxNjAyLDYgQEAKIAkJCWRldiA9ICZzaC0+ZGV2W2ldOwogCQkJaWYgKChkZXYtPnRvd3JpdGUgfHwgaSA9PSBzaC0+cGRfaWR4KSAmJgogCQkJICAgICghdGVzdF9iaXQoUjVfTE9DS0VELCAmZGV2LT5mbGFncykgCi0jaWYgMAotfHwgc2gtPmJoX3BhZ2VbaV0hPWJoLT5iX3BhZ2UKLSNlbmRpZgogCQkJCSAgICApICYmCiAJCQkgICAgIXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmZGV2LT5mbGFncykpIHsKIAkJCQlpZiAodGVzdF9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFncykKQEAgLTE2NTUsOSArMTYxMyw2IEBACiAJCQkvKiBXb3VsZCBJIGhhdmUgdG8gcmVhZCB0aGlzIGJ1ZmZlciBmb3IgcmVjb25zdHJ1Y3Rfd3JpdGUgKi8KIAkJCWlmICghdGVzdF9iaXQoUjVfT1ZFUldSSVRFLCAmZGV2LT5mbGFncykgJiYgaSAhPSBzaC0+cGRfaWR4ICYmCiAJCQkgICAgKCF0ZXN0X2JpdChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKSAKLSNpZiAwCi18fCBzaC0+YmhfcGFnZVtpXSAhPSBiaC0+Yl9wYWdlCi0jZW5kaWYKIAkJCQkgICAgKSAmJgogCQkJICAgICF0ZXN0X2JpdChSNV9VUFRPREFURSwgJmRldi0+ZmxhZ3MpKSB7CiAJCQkJaWYgKHRlc3RfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpKSByY3crKzsKQEAgLTE4NjUsMjMgKzE4MjAsMjUgQEAKIAkJcmV0dXJuX2JpID0gYmktPmJpX25leHQ7CiAJCWJpLT5iaV9uZXh0ID0gTlVMTDsKIAkJYmktPmJpX3NpemUgPSAwOwotCQliaS0+YmlfZW5kX2lvKGJpLCBieXRlcywgMCk7CisJCWJpLT5iaV9lbmRfaW8oYmksIGJ5dGVzLAorCQkJICAgICAgdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmktPmJpX2ZsYWdzKQorCQkJICAgICAgICA/IDAgOiAtRUlPKTsKIAl9CiAJZm9yIChpPWRpc2tzOyBpLS0gOykgewogCQlpbnQgcnc7CiAJCXN0cnVjdCBiaW8gKmJpOwogCQltZGtfcmRldl90ICpyZGV2OwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFI1X1dhbnR3cml0ZSwgJnNoLT5kZXZbaV0uZmxhZ3MpKQotCQkJcncgPSAxOworCQkJcncgPSBXUklURTsKIAkJZWxzZSBpZiAodGVzdF9hbmRfY2xlYXJfYml0KFI1X1dhbnRyZWFkLCAmc2gtPmRldltpXS5mbGFncykpCi0JCQlydyA9IDA7CisJCQlydyA9IFJFQUQ7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogIAogCQliaSA9ICZzaC0+ZGV2W2ldLnJlcTsKICAKIAkJYmktPmJpX3J3ID0gcnc7Ci0JCWlmIChydykKKwkJaWYgKHJ3ID09IFdSSVRFKQogCQkJYmktPmJpX2VuZF9pbyA9IHJhaWQ1X2VuZF93cml0ZV9yZXF1ZXN0OwogCQllbHNlCiAJCQliaS0+YmlfZW5kX2lvID0gcmFpZDVfZW5kX3JlYWRfcmVxdWVzdDsKQEAgLTE5MTcsNyArMTg3NCw3IEBACiAJCQkJYXRvbWljX2FkZChTVFJJUEVfU0VDVE9SUywgJnJkZXYtPmNvcnJlY3RlZF9lcnJvcnMpOwogCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmkpOwogCQl9IGVsc2UgewotCQkJaWYgKHJ3ID09IDEpCisJCQlpZiAocncgPT0gV1JJVEUpCiAJCQkJc2V0X2JpdChTVFJJUEVfREVHUkFERUQsICZzaC0+c3RhdGUpOwogCQkJUFJJTlRLKCJza2lwIG9wICVsZCBvbiBkaXNjICVkIGZvciBzZWN0b3IgJWxsdVxuIiwKIAkJCQliaS0+YmlfcncsIGksICh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3Rvcik7CkBAIC0yMTkzLDE1ICsyMTUwLDYgQEAKIAkJCQl9IGVsc2UgaWYgKHRlc3RfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpKSB7CiAJCQkJCXNldF9iaXQoUjVfTE9DS0VELCAmZGV2LT5mbGFncyk7CiAJCQkJCXNldF9iaXQoUjVfV2FudHJlYWQsICZkZXYtPmZsYWdzKTsKLSNpZiAwCi0JCQkJCS8qIGlmIEkgYW0ganVzdCByZWFkaW5nIHRoaXMgYmxvY2sgYW5kIHdlIGRvbid0IGhhdmUKLQkJCQkJICAgYSBmYWlsZWQgZHJpdmUsIG9yIGFueSBwZW5kaW5nIHdyaXRlcyB0aGVuIHNpZGVzdGVwIHRoZSBjYWNoZSAqLwotCQkJCQlpZiAoc2gtPmJoX3JlYWRbaV0gJiYgIXNoLT5iaF9yZWFkW2ldLT5iX3JlcW5leHQgJiYKLQkJCQkJICAgICEgc3luY2luZyAmJiAhZmFpbGVkICYmICF0b193cml0ZSkgewotCQkJCQkJc2gtPmJoX2NhY2hlW2ldLT5iX3BhZ2UgPSAgc2gtPmJoX3JlYWRbaV0tPmJfcGFnZTsKLQkJCQkJCXNoLT5iaF9jYWNoZVtpXS0+Yl9kYXRhID0gIHNoLT5iaF9yZWFkW2ldLT5iX2RhdGE7Ci0JCQkJCX0KLSNlbmRpZgogCQkJCQlsb2NrZWQrKzsKIAkJCQkJUFJJTlRLKCJSZWFkaW5nIGJsb2NrICVkIChzeW5jPSVkKVxuIiwKIAkJCQkJCWksIHN5bmNpbmcpOwpAQCAtMjIyMCw5ICsyMTY4LDYgQEAKIAkJCWlmICghdGVzdF9iaXQoUjVfT1ZFUldSSVRFLCAmZGV2LT5mbGFncykKIAkJCSAgICAmJiBpICE9IHBkX2lkeCAmJiBpICE9IHFkX2lkeAogCQkJICAgICYmICghdGVzdF9iaXQoUjVfTE9DS0VELCAmZGV2LT5mbGFncykKLSNpZiAwCi0JCQkJfHwgc2gtPmJoX3BhZ2VbaV0gIT0gYmgtPmJfcGFnZQotI2VuZGlmCiAJCQkJICAgICkgJiYKIAkJCSAgICAhdGVzdF9iaXQoUjVfVVBUT0RBVEUsICZkZXYtPmZsYWdzKSkgewogCQkJCWlmICh0ZXN0X2JpdChSNV9JbnN5bmMsICZkZXYtPmZsYWdzKSkgcmN3Kys7CkBAIC0yNDE4LDIzICsyMzYzLDI1IEBACiAJCXJldHVybl9iaSA9IGJpLT5iaV9uZXh0OwogCQliaS0+YmlfbmV4dCA9IE5VTEw7CiAJCWJpLT5iaV9zaXplID0gMDsKLQkJYmktPmJpX2VuZF9pbyhiaSwgYnl0ZXMsIDApOworCQliaS0+YmlfZW5kX2lvKGJpLCBieXRlcywKKwkJCSAgICAgIHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpLT5iaV9mbGFncykKKwkJCSAgICAgICAgPyAwIDogLUVJTyk7CiAJfQogCWZvciAoaT1kaXNrczsgaS0tIDspIHsKIAkJaW50IHJ3OwogCQlzdHJ1Y3QgYmlvICpiaTsKIAkJbWRrX3JkZXZfdCAqcmRldjsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9XYW50d3JpdGUsICZzaC0+ZGV2W2ldLmZsYWdzKSkKLQkJCXJ3ID0gMTsKKwkJCXJ3ID0gV1JJVEU7CiAJCWVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9XYW50cmVhZCwgJnNoLT5kZXZbaV0uZmxhZ3MpKQotCQkJcncgPSAwOworCQkJcncgPSBSRUFEOwogCQllbHNlCiAJCQljb250aW51ZTsKIAogCQliaSA9ICZzaC0+ZGV2W2ldLnJlcTsKIAogCQliaS0+YmlfcncgPSBydzsKLQkJaWYgKHJ3KQorCQlpZiAocncgPT0gV1JJVEUpCiAJCQliaS0+YmlfZW5kX2lvID0gcmFpZDVfZW5kX3dyaXRlX3JlcXVlc3Q7CiAJCWVsc2UKIAkJCWJpLT5iaV9lbmRfaW8gPSByYWlkNV9lbmRfcmVhZF9yZXF1ZXN0OwpAQCAtMjQ3MCw3ICsyNDE3LDcgQEAKIAkJCQlhdG9taWNfYWRkKFNUUklQRV9TRUNUT1JTLCAmcmRldi0+Y29ycmVjdGVkX2Vycm9ycyk7CiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaSk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAocncgPT0gMSkKKwkJCWlmIChydyA9PSBXUklURSkKIAkJCQlzZXRfYml0KFNUUklQRV9ERUdSQURFRCwgJnNoLT5zdGF0ZSk7CiAJCQlQUklOVEsoInNraXAgb3AgJWxkIG9uIGRpc2MgJWQgZm9yIHNlY3RvciAlbGx1XG4iLAogCQkJCWJpLT5iaV9ydywgaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yKTsKQEAgLTI2MTEsNiArMjU1OCwxODAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogV2Ugd2FudCByZWFkIHJlcXVlc3RzIHRvIGFsaWduIHdpdGggY2h1bmtzIHdoZXJlIHBvc3NpYmxlLAorICogYnV0IHdyaXRlIHJlcXVlc3RzIGRvbid0IG5lZWQgdG8uCisgKi8KK3N0YXRpYyBpbnQgcmFpZDVfbWVyZ2VhYmxlX2J2ZWMocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW9fdmVjICpiaW92ZWMpCit7CisJbWRkZXZfdCAqbWRkZXYgPSBxLT5xdWV1ZWRhdGE7CisJc2VjdG9yX3Qgc2VjdG9yID0gYmlvLT5iaV9zZWN0b3IgKyBnZXRfc3RhcnRfc2VjdChiaW8tPmJpX2JkZXYpOworCWludCBtYXg7CisJdW5zaWduZWQgaW50IGNodW5rX3NlY3RvcnMgPSBtZGRldi0+Y2h1bmtfc2l6ZSA+PiA5OworCXVuc2lnbmVkIGludCBiaW9fc2VjdG9ycyA9IGJpby0+Ymlfc2l6ZSA+PiA5OworCisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKQorCQlyZXR1cm4gYmlvdmVjLT5idl9sZW47IC8qIGFsd2F5cyBhbGxvdyB3cml0ZXMgdG8gYmUgbWVyZ2VhYmxlICovCisKKwltYXggPSAgKGNodW5rX3NlY3RvcnMgLSAoKHNlY3RvciAmIChjaHVua19zZWN0b3JzIC0gMSkpICsgYmlvX3NlY3RvcnMpKSA8PCA5OworCWlmIChtYXggPCAwKSBtYXggPSAwOworCWlmIChtYXggPD0gYmlvdmVjLT5idl9sZW4gJiYgYmlvX3NlY3RvcnMgPT0gMCkKKwkJcmV0dXJuIGJpb3ZlYy0+YnZfbGVuOworCWVsc2UKKwkJcmV0dXJuIG1heDsKK30KKworCitzdGF0aWMgaW50IGluX2NodW5rX2JvdW5kYXJ5KG1kZGV2X3QgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc2VjdG9yX3Qgc2VjdG9yID0gYmlvLT5iaV9zZWN0b3IgKyBnZXRfc3RhcnRfc2VjdChiaW8tPmJpX2JkZXYpOworCXVuc2lnbmVkIGludCBjaHVua19zZWN0b3JzID0gbWRkZXYtPmNodW5rX3NpemUgPj4gOTsKKwl1bnNpZ25lZCBpbnQgYmlvX3NlY3RvcnMgPSBiaW8tPmJpX3NpemUgPj4gOTsKKworCXJldHVybiAgY2h1bmtfc2VjdG9ycyA+PQorCQkoKHNlY3RvciAmIChjaHVua19zZWN0b3JzIC0gMSkpICsgYmlvX3NlY3RvcnMpOworfQorCisvKgorICogIGFkZCBiaW8gdG8gdGhlIHJldHJ5IExJRk8gICggaW4gTygxKSAuLi4gd2UgYXJlIGluIGludGVycnVwdCApCisgKiAgbGF0ZXIgc2FtcGxlZCBieSByYWlkNWQuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9iaW9fdG9fcmV0cnkoc3RydWN0IGJpbyAqYmkscmFpZDVfY29uZl90ICpjb25mKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWJpLT5iaV9uZXh0ID0gY29uZi0+cmV0cnlfcmVhZF9hbGlnbmVkX2xpc3Q7CisJY29uZi0+cmV0cnlfcmVhZF9hbGlnbmVkX2xpc3QgPSBiaTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CisJbWRfd2FrZXVwX3RocmVhZChjb25mLT5tZGRldi0+dGhyZWFkKTsKK30KKworCitzdGF0aWMgc3RydWN0IGJpbyAqcmVtb3ZlX2Jpb19mcm9tX3JldHJ5KHJhaWQ1X2NvbmZfdCAqY29uZikKK3sKKwlzdHJ1Y3QgYmlvICpiaTsKKworCWJpID0gY29uZi0+cmV0cnlfcmVhZF9hbGlnbmVkOworCWlmIChiaSkgeworCQljb25mLT5yZXRyeV9yZWFkX2FsaWduZWQgPSBOVUxMOworCQlyZXR1cm4gYmk7CisJfQorCWJpID0gY29uZi0+cmV0cnlfcmVhZF9hbGlnbmVkX2xpc3Q7CisJaWYoYmkpIHsKKwkJY29uZi0+cmV0cnlfcmVhZF9hbGlnbmVkID0gYmktPmJpX25leHQ7CisJCWJpLT5iaV9uZXh0ID0gTlVMTDsKKwkJYmktPmJpX3BoeXNfc2VnbWVudHMgPSAxOyAvKiBiaWFzZWQgY291bnQgb2YgYWN0aXZlIHN0cmlwZXMgKi8KKwkJYmktPmJpX2h3X3NlZ21lbnRzID0gMDsgLyogY291bnQgb2YgcHJvY2Vzc2VkIHN0cmlwZXMgKi8KKwl9CisKKwlyZXR1cm4gYmk7Cit9CisKKworLyoKKyAqICBUaGUgInJhaWQ1X2FsaWduX2VuZGlvIiBzaG91bGQgY2hlY2sgaWYgdGhlIHJlYWQgc3VjY2VlZGVkIGFuZCBpZiBpdAorICogIGRpZCwgY2FsbCBiaW9fZW5kaW8gb24gdGhlIG9yaWdpbmFsIGJpbyAoaGF2aW5nIGJpb19wdXQgdGhlIG5ldyBiaW8KKyAqICBmaXJzdCkuCisgKiAgSWYgdGhlIHJlYWQgZmFpbGVkLi4KKyAqLworc3RhdGljIGludCByYWlkNV9hbGlnbl9lbmRpbyhzdHJ1Y3QgYmlvICpiaSwgdW5zaWduZWQgaW50IGJ5dGVzLCBpbnQgZXJyb3IpCit7CisJc3RydWN0IGJpbyogcmFpZF9iaSAgPSBiaS0+YmlfcHJpdmF0ZTsKKwltZGRldl90ICptZGRldjsKKwlyYWlkNV9jb25mX3QgKmNvbmY7CisJaW50IHVwdG9kYXRlID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmktPmJpX2ZsYWdzKTsKKwltZGtfcmRldl90ICpyZGV2OworCisJaWYgKGJpLT5iaV9zaXplKQorCQlyZXR1cm4gMTsKKwliaW9fcHV0KGJpKTsKKworCW1kZGV2ID0gcmFpZF9iaS0+YmlfYmRldi0+YmRfZGlzay0+cXVldWUtPnF1ZXVlZGF0YTsKKwljb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CisJcmRldiA9ICh2b2lkKilyYWlkX2JpLT5iaV9uZXh0OworCXJhaWRfYmktPmJpX25leHQgPSBOVUxMOworCisJcmRldl9kZWNfcGVuZGluZyhyZGV2LCBjb25mLT5tZGRldik7CisKKwlpZiAoIWVycm9yICYmIHVwdG9kYXRlKSB7CisJCWJpb19lbmRpbyhyYWlkX2JpLCBieXRlcywgMCk7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjb25mLT5hY3RpdmVfYWxpZ25lZF9yZWFkcykpCisJCQl3YWtlX3VwKCZjb25mLT53YWl0X2Zvcl9zdHJpcGUpOworCQlyZXR1cm4gMDsKKwl9CisKKworCVBSSU5USygicmFpZDVfYWxpZ25fZW5kaW8gOiBpbyBlcnJvci4uLmhhbmRpbmcgSU8gZm9yIGEgcmV0cnlcbiIpOworCisJYWRkX2Jpb190b19yZXRyeShyYWlkX2JpLCBjb25mKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaHVua19hbGlnbmVkX3JlYWQocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgYmlvICogcmFpZF9iaW8pCit7CisJbWRkZXZfdCAqbWRkZXYgPSBxLT5xdWV1ZWRhdGE7CisJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CisJY29uc3QgdW5zaWduZWQgaW50IHJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOworCWNvbnN0IHVuc2lnbmVkIGludCBkYXRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKKwl1bnNpZ25lZCBpbnQgZGRfaWR4LCBwZF9pZHg7CisJc3RydWN0IGJpbyogYWxpZ25fYmk7CisJbWRrX3JkZXZfdCAqcmRldjsKKworCWlmICghaW5fY2h1bmtfYm91bmRhcnkobWRkZXYsIHJhaWRfYmlvKSkgeworCQlQUklOVEsoImNodW5rX2FsaWduZWRfcmVhZCA6IG5vbiBhbGlnbmVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qCisgCSAqIHVzZSBiaW9fY2xvbmUgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGJpbworCSAqLworCWFsaWduX2JpID0gYmlvX2Nsb25lKHJhaWRfYmlvLCBHRlBfTk9JTyk7CisJaWYgKCFhbGlnbl9iaSkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiAgIHNldCBiaV9lbmRfaW8gdG8gYSBuZXcgZnVuY3Rpb24sIGFuZCBzZXQgYmlfcHJpdmF0ZSB0byB0aGUKKwkgKiAgICAgb3JpZ2luYWwgYmlvLgorCSAqLworCWFsaWduX2JpLT5iaV9lbmRfaW8gID0gcmFpZDVfYWxpZ25fZW5kaW87CisJYWxpZ25fYmktPmJpX3ByaXZhdGUgPSByYWlkX2JpbzsKKwkvKgorCSAqCWNvbXB1dGUgcG9zaXRpb24KKwkgKi8KKwlhbGlnbl9iaS0+Ymlfc2VjdG9yID0gIHJhaWQ1X2NvbXB1dGVfc2VjdG9yKHJhaWRfYmlvLT5iaV9zZWN0b3IsCisJCQkJCXJhaWRfZGlza3MsCisJCQkJCWRhdGFfZGlza3MsCisJCQkJCSZkZF9pZHgsCisJCQkJCSZwZF9pZHgsCisJCQkJCWNvbmYpOworCisJcmN1X3JlYWRfbG9jaygpOworCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+ZGlza3NbZGRfaWR4XS5yZGV2KTsKKwlpZiAocmRldiAmJiB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CisJCWF0b21pY19pbmMoJnJkZXYtPm5yX3BlbmRpbmcpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmFpZF9iaW8tPmJpX25leHQgPSAodm9pZCopcmRldjsKKwkJYWxpZ25fYmktPmJpX2JkZXYgPSAgcmRldi0+YmRldjsKKwkJYWxpZ25fYmktPmJpX2ZsYWdzICY9IH4oMSA8PCBCSU9fU0VHX1ZBTElEKTsKKwkJYWxpZ25fYmktPmJpX3NlY3RvciArPSByZGV2LT5kYXRhX29mZnNldDsKKworCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CisJCXdhaXRfZXZlbnRfbG9ja19pcnEoY29uZi0+d2FpdF9mb3Jfc3RyaXBlLAorCQkJCSAgICBjb25mLT5xdWllc2NlID09IDAsCisJCQkJICAgIGNvbmYtPmRldmljZV9sb2NrLCAvKiBub3RoaW5nICovKTsKKwkJYXRvbWljX2luYygmY29uZi0+YWN0aXZlX2FsaWduZWRfcmVhZHMpOworCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKKworCQlnZW5lcmljX21ha2VfcmVxdWVzdChhbGlnbl9iaSk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQliaW9fcHV0KGFsaWduX2JpKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisKIHN0YXRpYyBpbnQgbWFrZV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGJpbyAqIGJpKQogewogCW1kZGV2X3QgKm1kZGV2ID0gcS0+cXVldWVkYXRhOwpAQCAtMjYzMiw2ICsyNzUzLDExIEBACiAJZGlza19zdGF0X2luYyhtZGRldi0+Z2VuZGlzaywgaW9zW3J3XSk7CiAJZGlza19zdGF0X2FkZChtZGRldi0+Z2VuZGlzaywgc2VjdG9yc1tyd10sIGJpb19zZWN0b3JzKGJpKSk7CiAKKwlpZiAocncgPT0gUkVBRCAmJgorCSAgICAgbWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yICYmCisJICAgICBjaHVua19hbGlnbmVkX3JlYWQocSxiaSkpCisgICAgICAgICAgICAJcmV0dXJuIDA7CisKIAlsb2dpY2FsX3NlY3RvciA9IGJpLT5iaV9zZWN0b3IgJiB+KChzZWN0b3JfdClTVFJJUEVfU0VDVE9SUy0xKTsKIAlsYXN0X3NlY3RvciA9IGJpLT5iaV9zZWN0b3IgKyAoYmktPmJpX3NpemU+PjkpOwogCWJpLT5iaV9uZXh0ID0gTlVMTDsKQEAgLTI3MzksNyArMjg2NSw5IEBACiAJCWlmICggcncgPT0gV1JJVEUgKQogCQkJbWRfd3JpdGVfZW5kKG1kZGV2KTsKIAkJYmktPmJpX3NpemUgPSAwOwotCQliaS0+YmlfZW5kX2lvKGJpLCBieXRlcywgMCk7CisJCWJpLT5iaV9lbmRfaW8oYmksIGJ5dGVzLAorCQkJICAgICAgdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmktPmJpX2ZsYWdzKQorCQkJICAgICAgICA/IDAgOiAtRUlPKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yOTUwLDYgKzMwNzgsNzQgQEAKIAlyZXR1cm4gU1RSSVBFX1NFQ1RPUlM7CiB9CiAKK3N0YXRpYyBpbnQgIHJldHJ5X2FsaWduZWRfcmVhZChyYWlkNV9jb25mX3QgKmNvbmYsIHN0cnVjdCBiaW8gKnJhaWRfYmlvKQoreworCS8qIFdlIG1heSBub3QgYmUgYWJsZSB0byBzdWJtaXQgYSB3aG9sZSBiaW8gYXQgb25jZSBhcyB0aGVyZQorCSAqIG1heSBub3QgYmUgZW5vdWdoIHN0cmlwZV9oZWFkcyBhdmFpbGFibGUuCisJICogV2UgY2Fubm90IHByZS1hbGxvY2F0ZSBlbm91Z2ggc3RyaXBlX2hlYWRzIGFzIHdlIG1heSBuZWVkCisJICogbW9yZSB0aGFuIGV4aXN0IGluIHRoZSBjYWNoZSAoaWYgd2UgYWxsb3cgZXZlciBsYXJnZSBjaHVua3MpLgorCSAqIFNvIHdlIGRvIG9uZSBzdHJpcGUgaGVhZCBhdCBhIHRpbWUgYW5kIHJlY29yZCBpbgorCSAqIC0+YmlfaHdfc2VnbWVudHMgaG93IG1hbnkgaGF2ZSBiZWVuIGRvbmUuCisJICoKKwkgKiBXZSAqa25vdyogdGhhdCB0aGlzIGVudGlyZSByYWlkX2JpbyBpcyBpbiBvbmUgY2h1bmssIHNvCisJICogaXQgd2lsbCBiZSBvbmx5IG9uZSAnZGRfaWR4JyBhbmQgb25seSBuZWVkIG9uZSBjYWxsIHRvIHJhaWQ1X2NvbXB1dGVfc2VjdG9yLgorCSAqLworCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CisJaW50IGRkX2lkeCwgcGRfaWR4OworCXNlY3Rvcl90IHNlY3RvciwgbG9naWNhbF9zZWN0b3IsIGxhc3Rfc2VjdG9yOworCWludCBzY250ID0gMDsKKwlpbnQgcmVtYWluaW5nOworCWludCBoYW5kbGVkID0gMDsKKworCWxvZ2ljYWxfc2VjdG9yID0gcmFpZF9iaW8tPmJpX3NlY3RvciAmIH4oKHNlY3Rvcl90KVNUUklQRV9TRUNUT1JTLTEpOworCXNlY3RvciA9IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKAlsb2dpY2FsX3NlY3RvciwKKwkJCQkJY29uZi0+cmFpZF9kaXNrcywKKwkJCQkJY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCwKKwkJCQkJJmRkX2lkeCwKKwkJCQkJJnBkX2lkeCwKKwkJCQkJY29uZik7CisJbGFzdF9zZWN0b3IgPSByYWlkX2Jpby0+Ymlfc2VjdG9yICsgKHJhaWRfYmlvLT5iaV9zaXplPj45KTsKKworCWZvciAoOyBsb2dpY2FsX3NlY3RvciA8IGxhc3Rfc2VjdG9yOworCSAgICAgbG9naWNhbF9zZWN0b3IgKz0gU1RSSVBFX1NFQ1RPUlMsIHNjbnQrKykgeworCisJCWlmIChzY250IDwgcmFpZF9iaW8tPmJpX2h3X3NlZ21lbnRzKQorCQkJLyogYWxyZWFkeSBkb25lIHRoaXMgc3RyaXBlICovCisJCQljb250aW51ZTsKKworCQlzaCA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHNlY3RvciwgY29uZi0+cmFpZF9kaXNrcywgcGRfaWR4LCAxKTsKKworCQlpZiAoIXNoKSB7CisJCQkvKiBmYWlsZWQgdG8gZ2V0IGEgc3RyaXBlIC0gbXVzdCB3YWl0ICovCisJCQlyYWlkX2Jpby0+YmlfaHdfc2VnbWVudHMgPSBzY250OworCQkJY29uZi0+cmV0cnlfcmVhZF9hbGlnbmVkID0gcmFpZF9iaW87CisJCQlyZXR1cm4gaGFuZGxlZDsKKwkJfQorCisJCXNldF9iaXQoUjVfUmVhZEVycm9yLCAmc2gtPmRldltkZF9pZHhdLmZsYWdzKTsKKwkJYWRkX3N0cmlwZV9iaW8oc2gsIHJhaWRfYmlvLCBkZF9pZHgsIDApOworCQloYW5kbGVfc3RyaXBlKHNoLCBOVUxMKTsKKwkJcmVsZWFzZV9zdHJpcGUoc2gpOworCQloYW5kbGVkKys7CisJfQorCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKKwlyZW1haW5pbmcgPSAtLXJhaWRfYmlvLT5iaV9waHlzX3NlZ21lbnRzOworCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOworCWlmIChyZW1haW5pbmcgPT0gMCkgeworCQlpbnQgYnl0ZXMgPSByYWlkX2Jpby0+Ymlfc2l6ZTsKKworCQlyYWlkX2Jpby0+Ymlfc2l6ZSA9IDA7CisJCXJhaWRfYmlvLT5iaV9lbmRfaW8ocmFpZF9iaW8sIGJ5dGVzLAorCQkJICAgICAgdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmcmFpZF9iaW8tPmJpX2ZsYWdzKQorCQkJICAgICAgICA/IDAgOiAtRUlPKTsKKwl9CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNvbmYtPmFjdGl2ZV9hbGlnbmVkX3JlYWRzKSkKKwkJd2FrZV91cCgmY29uZi0+d2FpdF9mb3Jfc3RyaXBlKTsKKwlyZXR1cm4gaGFuZGxlZDsKK30KKworCisKIC8qCiAgKiBUaGlzIGlzIG91ciByYWlkNSBrZXJuZWwgdGhyZWFkLgogICoKQEAgLTI5NzEsNiArMzE2Nyw3IEBACiAJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCXdoaWxlICgxKSB7CiAJCXN0cnVjdCBsaXN0X2hlYWQgKmZpcnN0OworCQlzdHJ1Y3QgYmlvICpiaW87CiAKIAkJaWYgKGNvbmYtPnNlcV9mbHVzaCAhPSBjb25mLT5zZXFfd3JpdGUpIHsKIAkJCWludCBzZXEgPSBjb25mLT5zZXFfZmx1c2g7CkBAIC0yOTg3LDYgKzMxODQsMTYgQEAKIAkJICAgICFsaXN0X2VtcHR5KCZjb25mLT5kZWxheWVkX2xpc3QpKQogCQkJcmFpZDVfYWN0aXZhdGVfZGVsYXllZChjb25mKTsKIAorCQl3aGlsZSAoKGJpbyA9IHJlbW92ZV9iaW9fZnJvbV9yZXRyeShjb25mKSkpIHsKKwkJCWludCBvazsKKwkJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOworCQkJb2sgPSByZXRyeV9hbGlnbmVkX3JlYWQoY29uZiwgYmlvKTsKKwkJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKKwkJCWlmICghb2spCisJCQkJYnJlYWs7CisJCQloYW5kbGVkKys7CisJCX0KKwogCQlpZiAobGlzdF9lbXB0eSgmY29uZi0+aGFuZGxlX2xpc3QpKQogCQkJYnJlYWs7CiAKQEAgLTMwNDUsNiArMzI1Miw3IEBACiAJCWVsc2UKIAkJCWJyZWFrOwogCX0KKwltZF9hbGxvd193cml0ZShtZGRldik7CiAJd2hpbGUgKG5ldyA+IGNvbmYtPm1heF9ucl9zdHJpcGVzKSB7CiAJCWlmIChncm93X29uZV9zdHJpcGUoY29uZikpCiAJCQljb25mLT5tYXhfbnJfc3RyaXBlcysrOwpAQCAtMzE3NCw2ICszMzgyLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmY29uZi0+aW5hY3RpdmVfbGlzdCk7CiAJYXRvbWljX3NldCgmY29uZi0+YWN0aXZlX3N0cmlwZXMsIDApOwogCWF0b21pY19zZXQoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMsIDApOworCWF0b21pY19zZXQoJmNvbmYtPmFjdGl2ZV9hbGlnbmVkX3JlYWRzLCAwKTsKIAogCVBSSU5USygicmFpZDU6IHJ1biglcykgY2FsbGVkLlxuIiwgbWRuYW1lKG1kZGV2KSk7CiAKQEAgLTMzMjAsNiArMzUyOSw4IEBACiAJbWRkZXYtPmFycmF5X3NpemUgPSAgbWRkZXYtPnNpemUgKiAoY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyAtCiAJCQkJCSAgICBjb25mLT5tYXhfZGVncmFkZWQpOwogCisJYmxrX3F1ZXVlX21lcmdlX2J2ZWMobWRkZXYtPnF1ZXVlLCByYWlkNV9tZXJnZWFibGVfYnZlYyk7CisKIAlyZXR1cm4gMDsKIGFib3J0OgogCWlmIChjb25mKSB7CkBAIC0zNjk0LDcgKzM5MDUsOCBAQAogCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCWNvbmYtPnF1aWVzY2UgPSAxOwogCQl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfZm9yX3N0cmlwZSwKLQkJCQkgICAgYXRvbWljX3JlYWQoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKSA9PSAwLAorCQkJCSAgICBhdG9taWNfcmVhZCgmY29uZi0+YWN0aXZlX3N0cmlwZXMpID09IDAgJiYKKwkJCQkgICAgYXRvbWljX3JlYWQoJmNvbmYtPmFjdGl2ZV9hbGlnbmVkX3JlYWRzKSA9PSAwLAogCQkJCSAgICBjb25mLT5kZXZpY2VfbG9jaywgLyogbm90aGluZyAqLyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwppbmRleCA5ZjdlMWZlLi44NzQxMGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9LY29uZmlnCkBAIC02Nyw2ICs2Nyw3IEBACiAKIGNvbmZpZyBWSURFT19UVU5FUgogCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBJMkMKIAogY29uZmlnIFZJREVPX0JVRgogCXRyaXN0YXRlCkBAIC04Miw2ICs4Myw3IEBACiAKIGNvbmZpZyBWSURFT19UVkVFUFJPTQogCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBJMkMKIAogY29uZmlnIFVTQl9EQUJVU0IKIAl0cmlzdGF0ZSAiREFCVVNCIGRyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWZ1bmN0aW9ucy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXItZnVuY3Rpb25zLmMKaW5kZXggOGVhYTg4Zi4uOWE4ZGQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXItZnVuY3Rpb25zLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXItZnVuY3Rpb25zLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYwppbmRleCBkYjc1MzQ0Li5mNTFlMDJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYwpAQCAtMTU1MiwzICsxNTUyLDU4IEBACiB9OwogCiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19ub3J3b29kKTsKKworLyogRnJvbSByZWFkaW5nIHRoZSBmb2xsb3dpbmcgcmVtb3RlczoKKyAqIFplbml0aCBVbml2ZXJzYWwgNyAvIFRWIE1vZGUgODA3IC8gVkNSIE1vZGUgODM3CisgKiBIYXVwcGF1Z2UgKGZyb20gTk9WQS1DSS1zIGJveCBwcm9kdWN0KQorICogVGhpcyBpcyBhICJtaWRkbGUgb2YgdGhlIHJvYWQiIGFwcHJvYWNoLCBkaWZmZXJlbmNlcyBhcmUgbm90ZWQKKyAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYnVkZ2V0X2NpX29sZFtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDAwIF0gPSBLRVlfMCwKKwlbIDB4MDEgXSA9IEtFWV8xLAorCVsgMHgwMiBdID0gS0VZXzIsCisJWyAweDAzIF0gPSBLRVlfMywKKwlbIDB4MDQgXSA9IEtFWV80LAorCVsgMHgwNSBdID0gS0VZXzUsCisJWyAweDA2IF0gPSBLRVlfNiwKKwlbIDB4MDcgXSA9IEtFWV83LAorCVsgMHgwOCBdID0gS0VZXzgsCisJWyAweDA5IF0gPSBLRVlfOSwKKwlbIDB4MGEgXSA9IEtFWV9FTlRFUiwKKwlbIDB4MGIgXSA9IEtFWV9SRUQsCisJWyAweDBjIF0gPSBLRVlfUE9XRVIsICAgICAgICAgICAgIC8qIFJBRElPIG9uIEhhdXBwYXVnZSAqLworCVsgMHgwZCBdID0gS0VZX01VVEUsCisJWyAweDBmIF0gPSBLRVlfQSwgICAgICAgICAgICAgICAgIC8qIFRWIG9uIEhhdXBwYXVnZSAqLworCVsgMHgxMCBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHgxMSBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAweDE0IF0gPSBLRVlfQiwKKwlbIDB4MWMgXSA9IEtFWV9VUCwKKwlbIDB4MWQgXSA9IEtFWV9ET1dOLAorCVsgMHgxZSBdID0gS0VZX09QVElPTiwgICAgICAgICAgICAvKiBSRVNFUlZFRCBvbiBIYXVwcGF1Z2UgKi8KKwlbIDB4MWYgXSA9IEtFWV9CUkVBSywKKwlbIDB4MjAgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDIxIF0gPSBLRVlfQ0hBTk5FTERPV04sCisJWyAweDIyIF0gPSBLRVlfUFJFVklPVVMsICAgICAgICAgIC8qIFByZXYuIENoIG9uIFplbml0aCwgU09VUkNFIG9uIEhhdXBwYXVnZSAqLworCVsgMHgyNCBdID0gS0VZX1JFU1RBUlQsCisJWyAweDI1IF0gPSBLRVlfT0ssCisJWyAweDI2IF0gPSBLRVlfQ1lDTEVXSU5ET1dTLCAgICAgIC8qIE1JTklNSVpFIG9uIEhhdXBwYXVnZSAqLworCVsgMHgyOCBdID0gS0VZX0VOVEVSLCAgICAgICAgICAgICAvKiBWQ1IgbW9kZSBvbiBaZW5pdGggKi8KKwlbIDB4MjkgXSA9IEtFWV9QQVVTRSwKKwlbIDB4MmIgXSA9IEtFWV9SSUdIVCwKKwlbIDB4MmMgXSA9IEtFWV9MRUZULAorCVsgMHgyZSBdID0gS0VZX01FTlUsICAgICAgICAgICAgICAvKiBGVUxMIFNDUkVFTiBvbiBIYXVwcGF1Z2UgKi8KKwlbIDB4MzAgXSA9IEtFWV9TTE9XLAorCVsgMHgzMSBdID0gS0VZX1BSRVZJT1VTLCAgICAgICAgICAvKiBWQ1IgbW9kZSBvbiBaZW5pdGggKi8KKwlbIDB4MzIgXSA9IEtFWV9SRVdJTkQsCisJWyAweDM0IF0gPSBLRVlfRkFTVEZPUldBUkQsCisJWyAweDM1IF0gPSBLRVlfUExBWSwKKwlbIDB4MzYgXSA9IEtFWV9TVE9QLAorCVsgMHgzNyBdID0gS0VZX1JFQ09SRCwKKwlbIDB4MzggXSA9IEtFWV9UVU5FUiwgICAgICAgICAgICAgLyogVFYvVkNSIG9uIFplbml0aCAqLworCVsgMHgzYSBdID0gS0VZX0MsCisJWyAweDNjIF0gPSBLRVlfRVhJVCwKKwlbIDB4M2QgXSA9IEtFWV9QT1dFUjIsCisJWyAweDNlIF0gPSBLRVlfVFVORVIsCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19idWRnZXRfY2lfb2xkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCmluZGV4IDUyOTdhMzYuLjhjODVlZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYwpAQCAtMTg5LDEzICsxODksMjEgQEAKIAkJc2FhNzE0Nl93cml0ZShkZXYsIEkyQ19UUkFOU0ZFUiwgKmR3b3JkKTsKIAogCQlkZXYtPmkyY19vcCA9IDE7CisJCVNBQTcxNDZfSVNSX0NMRUFSKGRldiwgTUFTS18xNnxNQVNLXzE3KTsKIAkJU0FBNzE0Nl9JRVJfRU5BQkxFKGRldiwgTUFTS18xNnxNQVNLXzE3KTsKIAkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgKE1BU0tfMDAgfCBNQVNLXzE2KSk7CiAKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+aTJjX3dxLCBkZXYtPmkyY19vcCA9PSAwKTsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgewotCQkJLyogYSBzaWduYWwgYXJyaXZlZCAqLwotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJdGltZW91dCA9IEhaLzEwMCArIDE7IC8qIDEwbXMgKi8KKwkJdGltZW91dCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+aTJjX3dxLCBkZXYtPmkyY19vcCA9PSAwLCB0aW1lb3V0KTsKKwkJaWYgKHRpbWVvdXQgPT0gLUVSRVNUQVJUU1lTIHx8IGRldi0+aTJjX29wKSB7CisJCQlTQUE3MTQ2X0lFUl9ESVNBQkxFKGRldiwgTUFTS18xNnxNQVNLXzE3KTsKKwkJCVNBQTcxNDZfSVNSX0NMRUFSKGRldiwgTUFTS18xNnxNQVNLXzE3KTsKKwkJCWlmICh0aW1lb3V0ID09IC1FUkVTVEFSVFNZUykKKwkJCQkvKiBhIHNpZ25hbCBhcnJpdmVkICovCisJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2FhNzE0Nl9pMmNfd3JpdGVvdXQ6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBlbmQgb2YgeGZlclxuIik7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQlzdGF0dXMgPSBzYWE3MTQ2X3JlYWQoZGV2LCBJMkNfU1RBVFVTKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCmluZGV4IGEwZGNkNTkuLjc5ODc1OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKQEAgLTksNiArOSw3IEBACiAJc2VsZWN0IERWQl9TVFYwMjk3IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9CQ00zNTEwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9MR0RUMzMwWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVFVORVJfTEdIMDZYRiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBkaWdpdGFsIFRWIHJlY2VpdmVyIGNoaXAgbWFkZSBieSBCMkMyIEluYy4gaW5jbHVkZWQgaW4KIAkgIFRlY2huaXNhdHMgUENJIGNhcmRzIGFuZCBVU0IgYm94ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCmluZGV4IGI4YmE4NzguLmMyYjM1ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSAic3R2MDI5Ny5oIgogI2luY2x1ZGUgIm10MzEyLmgiCiAjaW5jbHVkZSAibGdkdDMzMHguaCIKLSNpbmNsdWRlICJsZ19oMDZ4Zi5oIgorI2luY2x1ZGUgImxnaDA2eGYuaCIKICNpbmNsdWRlICJkdmItcGxsLmgiCiAKIC8qIGxuYiBjb250cm9sICovCkBAIC0zMDMsMTIgKzMwMyw2IEBACiAJcmV0dXJuIHJlcXVlc3RfZmlybXdhcmUoZncsIG5hbWUsIGZjLT5kZXYpOwogfQogCi1zdGF0aWMgaW50IGxnZHQzMzAzX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQotewotCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBmZS0+ZHZiLT5wcml2OwotCXJldHVybiBsZ19oMDZ4Zl9wbGxfc2V0KGZlLCAmZmMtPmkyY19hZGFwLCBwYXJhbXMpOwotfQotCiBzdGF0aWMgc3RydWN0IGxnZHQzMzB4X2NvbmZpZyBhaXIycGNfYXRzY19oZDUwMDBfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzICAgICAgID0gMHg1OSwKIAkuZGVtb2RfY2hpcCAgICAgICAgICA9IExHRFQzMzAzLApAQCAtNTMzLDcgKzUyNyw3IEBACiAJLyogdHJ5IHRoZSBhaXIgYXRzYyAzbmQgZ2VuZXJhdGlvbiAobGdkdDMzMDMpICovCiAJaWYgKChmYy0+ZmUgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwgJmFpcjJwY19hdHNjX2hkNTAwMF9jb25maWcsICZmYy0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CiAJCWZjLT5kZXZfdHlwZSAgICAgICAgICA9IEZDX0FJUl9BVFNDMzsKLQkJZmMtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBsZ2R0MzMwM190dW5lcl9zZXRfcGFyYW1zOworCQlkdmJfYXR0YWNoKGxnaDA2eGZfYXR0YWNoLCBmYy0+ZmUsICZmYy0+aTJjX2FkYXApOwogCQlpbmZvKCJmb3VuZCB0aGUgbGdkdDMzMDMgYXQgaTJjIGFkZHJlc3M6IDB4JTAyeCIsYWlyMnBjX2F0c2NfaGQ1MDAwX2NvbmZpZy5kZW1vZF9hZGRyZXNzKTsKIAl9IGVsc2UKIAkvKiB0cnkgdGhlIGFpciBhdHNjIDFuZCBnZW5lcmF0aW9uIChiY20zNTEwKS9wYW5hc29uaWMgY3QxMHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCmluZGV4IGFlMmZmNWQuLmRkNjZiNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZwpAQCAtMSwxMyArMSwxMyBAQAogY29uZmlnIERWQl9CVDhYWAogCXRyaXN0YXRlICJCVDh4eCBiYXNlZCBQQ0kgY2FyZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX0JUODQ4Ci0Jc2VsZWN0IERWQl9QTEwKIAlzZWxlY3QgRFZCX01UMzUyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TUDg4N1ggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX05YVDYwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0NYMjQxMTAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX09SNTEyMTEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0xHRFQzMzBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UVU5FUl9MR0gwNlhGIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IEZXX0xPQURFUgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKaW5kZXggMjQwYWQwOC4uNTBiYzMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCXN0cnVjdCBjYV9tc2cgKmh3X2J1ZmZlcjsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCWlmICgoaHdfYnVmZmVyID0gKHN0cnVjdCBjYV9tc2cgKikga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjYV9tc2cpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCWlmICgoaHdfYnVmZmVyID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjYV9tc2cpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9DQV9FUlJPUiwgMSwgIiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKaW5kZXggMTRlNjlhNy4uM2UzNTkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJkdmItYnQ4eHguaCIKICNpbmNsdWRlICJidDg3OC5oIgotI2luY2x1ZGUgImR2Yi1wbGwuaCIKIAogc3RhdGljIGludCBkZWJ1ZzsKIApAQCAtNTY4LDEyICs1NjcsNiBAQAogCS5kZW1vZF9pbml0ID0gZGlnaXR2X2FscHNfdGRlZDRfZGVtb2RfaW5pdCwKIH07CiAKLXN0YXRpYyBpbnQgdGR2c190dWE2MDM0X3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQotewotCXN0cnVjdCBkdmJfYnQ4eHhfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQgKikgZmUtPmR2Yi0+cHJpdjsKLQlyZXR1cm4gbGdfaDA2eGZfcGxsX3NldChmZSwgY2FyZC0+aTJjX2FkYXB0ZXIsIHBhcmFtcyk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbGdkdDMzMHhfY29uZmlnIHRkdnNfdHVhNjAzNF9jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgICAgPSAweDBlLAogCS5kZW1vZF9jaGlwICAgICAgID0gTEdEVDMzMDMsCkBAIC02MTYsNyArNjA5LDcgQEAKIAkJbGdkdDMzMHhfcmVzZXQoY2FyZCk7CiAJCWNhcmQtPmZlID0gZHZiX2F0dGFjaChsZ2R0MzMweF9hdHRhY2gsICZ0ZHZzX3R1YTYwMzRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWlmIChjYXJkLT5mZSAhPSBOVUxMKSB7Ci0JCQljYXJkLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gdGR2c190dWE2MDM0X3R1bmVyX3NldF9wYXJhbXM7CisJCQlkdmJfYXR0YWNoKGxnaDA2eGZfYXR0YWNoLCBjYXJkLT5mZSwgY2FyZC0+aTJjX2FkYXB0ZXIpOwogCQkJZHByaW50ayAoImR2Yl9idDh4eDogbGdkdDMzMHggZGV0ZWN0ZWRcbiIpOwogCQl9CiAJCWJyZWFrOwpAQCAtNjY0LDcgKzY1Nyw3IEBACiAKIAljYXNlIEJUVFZfQk9BUkRfVFdJTkhBTl9EU1Q6CiAJCS8qCURTVCBpcyBub3QgYSBmcm9udGVuZCBkcml2ZXIgISEhCQkqLwotCQlzdGF0ZSA9IChzdHJ1Y3QgZHN0X3N0YXRlICopIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgZHN0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCXN0YXRlID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBkc3Rfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzdGF0ZSkgewogCQkJcHJpbnRrKCJkdmJfYnQ4eHg6IE5vIG1lbW9yeVxuIik7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmgKaW5kZXggNDc0NWE5MC4uZTc1ZjQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmgKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJjeDI0MTEwLmgiCiAjaW5jbHVkZSAib3I1MTIxMS5oIgogI2luY2x1ZGUgImxnZHQzMzB4LmgiCi0jaW5jbHVkZSAibGdfaDA2eGYuaCIKKyNpbmNsdWRlICJsZ2gwNnhmLmgiCiAjaW5jbHVkZSAiemwxMDM1My5oIgogCiBzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCmluZGV4IDkxMjMxNDcuLmQ2NGI5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKQEAgLTc0Niw2ICs3NDYsNyBAQAogCQkJCWRwcmludGsoMSwgInJjX2lucHV0X2V2ZW50PSVkIFVwXG4iLCBjaW5lcmd5dDItPnJjX2lucHV0X2V2ZW50KTsKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZGV2LAogCQkJCQkJIGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQsIDApOworCQkJCWlucHV0X3N5bmMoY2luZXJneXQyLT5yY19pbnB1dF9kZXYpOwogCQkJCWNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQgPSBLRVlfTUFYOwogCQkJfQogCQkJY2luZXJneXQyLT5yY19sYXN0X2NvZGUgPSB+MDsKQEAgLTc4Myw2ICs3ODQsNyBAQAogCQkJZHByaW50aygxLCAicmNfaW5wdXRfZXZlbnQ9JWRcbiIsIGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQpOwogCQkJaW5wdXRfcmVwb3J0X2tleShjaW5lcmd5dDItPnJjX2lucHV0X2RldiwKIAkJCQkJIGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQsIDEpOworCQkJaW5wdXRfc3luYyhjaW5lcmd5dDItPnJjX2lucHV0X2Rldik7CiAJCQljaW5lcmd5dDItPnJjX2xhc3RfY29kZSA9IHJjX2V2ZW50c1tuXS52YWx1ZTsKIAkJfQogCX0KQEAgLTc5OCw4ICs4MDAsOSBAQAogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlpbnQgaTsKKwlpbnQgZXJyOwogCi0JY2luZXJneXQyLT5yY19pbnB1dF9kZXYgPSBpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlucHV0X2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTgxNyw3ICs4MjAsMTMgQEAKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gMDsKIAlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSAwOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwlpZiAoZXJyKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJCXJldHVybiBlcnI7CisJfQorCisJY2luZXJneXQyLT5yY19pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnJjX3F1ZXJ5X3dvcmssIEhaLzIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKaW5kZXggZWJmNGRjNS4uNzZlOWMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtNjA1LDcgKzYwNSw3IEBACiAJCQkJeyAmdXR5cGUsIHNpemVvZiB1dHlwZSB9LAogCQkJCXsgcHJpdi0+dWxlX3NrYi0+ZGF0YSwgcHJpdi0+dWxlX3NrYi0+bGVuIC0gNCB9CiAJCQl9OwotCQkJdW5zaWduZWQgbG9uZyB1bGVfY3JjID0gfjBMLCBleHBlY3RlZF9jcmM7CisJCQl1MzIgdWxlX2NyYyA9IH4wTCwgZXhwZWN0ZWRfY3JjOwogCQkJaWYgKHByaXYtPnVsZV9kYml0KSB7CiAJCQkJLyogU2V0IEQtYml0IGZvciBDUkMzMiB2ZXJpZmljYXRpb24sCiAJCQkJICogaWYgaXQgd2FzIHNldCBvcmlnaW5hbGx5LiAqLwpAQCAtNjE4LDcgKzYxOCw3IEBACiAJCQkJICAgICAgICooKHU4ICopcHJpdi0+dWxlX3NrYi0+dGFpbCAtIDIpIDw8IDggfAogCQkJCSAgICAgICAqKCh1OCAqKXByaXYtPnVsZV9za2ItPnRhaWwgLSAxKTsKIAkJCWlmICh1bGVfY3JjICE9IGV4cGVjdGVkX2NyYykgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVsdTogQ1JDMzIgY2hlY2sgRkFJTEVEOiAlI2x4IC8gJSNseCwgU05EVSBsZW4gJWQgdHlwZSAlI3gsIHRzX3JlbWFpbiAlZCwgbmV4dCAyOiAleC5cbiIsCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJWx1OiBDUkMzMiBjaGVjayBGQUlMRUQ6ICUwOHggLyAlMDh4LCBTTkRVIGxlbiAlZCB0eXBlICUjeCwgdHNfcmVtYWluICVkLCBuZXh0IDI6ICV4LlxuIiwKIAkJCQkgICAgICAgcHJpdi0+dHNfY291bnQsIHVsZV9jcmMsIGV4cGVjdGVkX2NyYywgcHJpdi0+dWxlX3NuZHVfbGVuLCBwcml2LT51bGVfc25kdV90eXBlLCB0c19yZW1haW4sIHRzX3JlbWFpbiA+IDIgPyAqKHVuc2lnbmVkIHNob3J0ICopZnJvbV93aGVyZSA6IDApOwogCiAjaWZkZWYgVUxFX0RFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggYTI2M2IzZi4uYWQ1MjE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtNjksNiArNjksOCBAQAogY29uZmlnIERWQl9VU0JfRElCMDcwMAogCXRyaXN0YXRlICJEaUJjb20gRGlCMDcwMCBVU0IgRFZCIGRldmljZXMgKHNlZSBoZWxwIGZvciBzdXBwb3J0ZWQgZGV2aWNlcykiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IERWQl9ESUI3MDAwUAorCXNlbGVjdCBEVkJfRElCNzAwME0KIAlzZWxlY3QgRFZCX0RJQjMwMDBNQwogCXNlbGVjdCBEVkJfVFVORVJfTVQyMDYwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscApAQCAtOTYsNiArOTgsNyBAQAogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfQ1gyMjcwMiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1RVTkVSX0xHSDA2WEYgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX01UMzUyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscApAQCAtMTU3LDYgKzE2MCwxNyBAQAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgSGF1cHBhdWdlIFdpblRWLU5PVkEtVCB1c2IyIERWQi1UIFVTQjIuMCByZWNlaXZlci4KIAorY29uZmlnIERWQl9VU0JfVFRVU0IyCisJdHJpc3RhdGUgIlBpbm5hY2xlIDQwMGUgRFZCLVMgVVNCMi4wIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IERWQl9UREExMDA4NiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTE5CUDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREE4MjZYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBQaW5uYWNsZSA0MDBlIERWQi1TIFVTQjIuMCByZWNlaXZlci4gVGhlCisJICBmaXJtd2FyZSBwcm90b2NvbCB1c2VkIGJ5IHRoaXMgbW9kdWxlIGlzIHNpbWlsYXIgdG8gdGhlIG9uZSB1c2VkIGJ5IHRoZQorCSAgb2xkIHR0dXNiLWRyaXZlciAtIHRoYXQncyB3aHkgdGhlIG1vZHVsZSBpcyBjYWxsZWQgZHZiLXVzYi10dHVzYjIua28uCisKIGNvbmZpZyBEVkJfVVNCX0RUVDIwMFUKIAl0cmlzdGF0ZSAiV2lkZVZpZXcgV1QtMjAwVSBhbmQgV1QtMjIwVSAocGVuKSBEVkItVCBVU0IyLjAgc3VwcG9ydCAoWWFrdW1vL0hhbWEvVHlwaG9vbi9ZdWFuKSIKIAlkZXBlbmRzIG9uIERWQl9VU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCmluZGV4IGUyMzkxMDcuLjE1NGQ1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQpAQCAtMzYsNiArMzYsOSBAQAogZHZiLXVzYi1jeHVzYi1vYmpzID0gY3h1c2Iubwogb2JqLSQoQ09ORklHX0RWQl9VU0JfQ1hVU0IpICs9IGR2Yi11c2ItY3h1c2IubwogCitkdmItdXNiLXR0dXNiMi1vYmpzID0gdHR1c2IyLm8KK29iai0kKENPTkZJR19EVkJfVVNCX1RUVVNCMikgKz0gZHZiLXVzYi10dHVzYjIubworCiBkdmItdXNiLWRpYjA3MDAtb2JqcyA9IGRpYjA3MDBfY29yZS5vIGRpYjA3MDBfZGV2aWNlcy5vCiBvYmotJChDT05GSUdfRFZCX1VTQl9ESUIwNzAwKSArPSBkdmItdXNiLWRpYjA3MDAubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCmluZGV4IDJlZDNlYjYuLmE2YzVmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jCkBAIC0xMTYsMjQgKzExNiwyNCBAQAogCQl7CiAJCQkuY2FwcyA9IERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfQURBUF9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGLAogCQkJLnBpZF9maWx0ZXJfY291bnQgPSAzMiwKLQkuc3RyZWFtaW5nX2N0cmwgICA9IGRpYnVzYjJfMF9zdHJlYW1pbmdfY3RybCwKLQkucGlkX2ZpbHRlciAgICAgICA9IGRpYnVzYl9waWRfZmlsdGVyLAotCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKKwkJCS5zdHJlYW1pbmdfY3RybCAgID0gZGlidXNiMl8wX3N0cmVhbWluZ19jdHJsLAorCQkJLnBpZF9maWx0ZXIgICAgICAgPSBkaWJ1c2JfcGlkX2ZpbHRlciwKKwkJCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKIAotCS5mcm9udGVuZF9hdHRhY2ggID0gZGlidXNiX2RpYjMwMDBtY19mcm9udGVuZF9hdHRhY2gsCi0JLnR1bmVyX2F0dGFjaCAgICAgPSBkaWJ1c2JfZGliMzAwMG1jX3R1bmVyX2F0dGFjaCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gZGlidXNiX2RpYjMwMDBtY19mcm9udGVuZF9hdHRhY2gsCisJCQkudHVuZXJfYXR0YWNoICAgICA9IGRpYnVzYl9kaWIzMDAwbWNfdHVuZXJfYXR0YWNoLAogCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwotCQkJLnN0cmVhbSA9IHsKLQkJCQkudHlwZSA9IFVTQl9CVUxLLAotCQkuY291bnQgPSA3LAotCQkuZW5kcG9pbnQgPSAweDA2LAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gNDA5NiwKLQkJCX0KLQkJfQotCX0sCisJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkJCS5zdHJlYW0gPSB7CisJCQkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCS5jb3VudCA9IDcsCisJCQkJLmVuZHBvaW50ID0gMHgwNiwKKwkJCQkudSA9IHsKKwkJCQkJLmJ1bGsgPSB7CisJCQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCisJCQkJCX0KKwkJCQl9CisJCQl9LAogCiAJCQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGlidXNiX3N0YXRlKSwKIAkJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCA0M2YzOTA2Li4xNWQxMmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC0xNCwxMiArMTQsMTIgQEAKICAqIFRPRE86IFVzZSB0aGUgY3gyNTg0MC1kcml2ZXIgZm9yIHRoZSBhbmFsb2d1ZSBwYXJ0CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IFBhdHJpY2sgQm9ldHRjaGVyIChwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlKQotICogQ29weXJpZ2h0IChDKSAyMDA1IE1pY2hhZWwgS3J1Zmt5IChta3J1Zmt5QG0xay5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBLcnVma3kgKG1rcnVma3lAbGludXh0di5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2hyaXMgUGFzY29lIChjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdSkKICAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqCVNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICAgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgogICoKICAqIHNlZSBEb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYiBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICovCkBAIC0yNywyOSArMjcsMjkgQEAKIAogI2luY2x1ZGUgImN4MjI3MDIuaCIKICNpbmNsdWRlICJsZ2R0MzMweC5oIgotI2luY2x1ZGUgImxnX2gwNnhmLmgiCisjaW5jbHVkZSAibGdoMDZ4Zi5oIgogI2luY2x1ZGUgIm10MzUyLmgiCiAjaW5jbHVkZSAibXQzNTJfcHJpdi5oIgogI2luY2x1ZGUgInpsMTAzNTMuaCIKIAogLyogZGVidWcgKi8KIGludCBkdmJfdXNiX2N4dXNiX2RlYnVnOwotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGR2Yl91c2JfY3h1c2JfZGVidWcsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfY3h1c2JfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1yYyAob3ItYWJsZSkpLiIgRFZCX1VTQl9ERUJVR19TVEFUVVMpOwogCiBzdGF0aWMgaW50IGN4dXNiX2N0cmxfbXNnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwKLQkJdTggY21kLCB1OCAqd2J1ZiwgaW50IHdsZW4sIHU4ICpyYnVmLCBpbnQgcmxlbikKKwkJCSAgdTggY21kLCB1OCAqd2J1ZiwgaW50IHdsZW4sIHU4ICpyYnVmLCBpbnQgcmxlbikKIHsKIAlpbnQgd28gPSAocmJ1ZiA9PSBOVUxMIHx8IHJsZW4gPT0gMCk7IC8qIHdyaXRlLW9ubHkgKi8KIAl1OCBzbmRidWZbMSt3bGVuXTsKLQltZW1zZXQoc25kYnVmLDAsMSt3bGVuKTsKKwltZW1zZXQoc25kYnVmLCAwLCAxK3dsZW4pOwogCiAJc25kYnVmWzBdID0gY21kOwotCW1lbWNweSgmc25kYnVmWzFdLHdidWYsd2xlbik7CisJbWVtY3B5KCZzbmRidWZbMV0sIHdidWYsIHdsZW4pOwogCWlmICh3bykKLQkJZHZiX3VzYl9nZW5lcmljX3dyaXRlKGQsc25kYnVmLDErd2xlbik7CisJCWR2Yl91c2JfZ2VuZXJpY193cml0ZShkLCBzbmRidWYsIDErd2xlbik7CiAJZWxzZQotCQlkdmJfdXNiX2dlbmVyaWNfcncoZCxzbmRidWYsMSt3bGVuLHJidWYscmxlbiwwKTsKKwkJZHZiX3VzYl9nZW5lcmljX3J3KGQsIHNuZGJ1ZiwgMSt3bGVuLCByYnVmLCBybGVuLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTgsMTQgKzU4LDE0IEBACiBzdGF0aWMgdm9pZCBjeHVzYl9ncGlvX3R1bmVyKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQogewogCXN0cnVjdCBjeHVzYl9zdGF0ZSAqc3QgPSBkLT5wcml2OwotCXU4IG9bMl0saTsKKwl1OCBvWzJdLCBpOwogCiAJaWYgKHN0LT5ncGlvX3dyaXRlX3N0YXRlW0dQSU9fVFVORVJdID09IG9ub2ZmKQogCQlyZXR1cm47CiAKIAlvWzBdID0gR1BJT19UVU5FUjsKIAlvWzFdID0gb25vZmY7Ci0JY3h1c2JfY3RybF9tc2coZCxDTURfR1BJT19XUklURSxvLDIsJmksMSk7CisJY3h1c2JfY3RybF9tc2coZCwgQ01EX0dQSU9fV1JJVEUsIG8sIDIsICZpLCAxKTsKIAogCWlmIChpICE9IDB4MDEpCiAJCWRlYl9pbmZvKCJncGlvX3dyaXRlIGZhaWxlZC5cbiIpOwpAQCAtNzQsNyArNzQsOCBAQAogfQogCiAvKiBJMkMgKi8KLXN0YXRpYyBpbnQgY3h1c2JfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLHN0cnVjdCBpMmNfbXNnIG1zZ1tdLGludCBudW0pCitzdGF0aWMgaW50IGN4dXNiX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sCisJCQkgIGludCBudW0pCiB7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKIAlpbnQgaTsKQEAgLTg5LDEyICs5MCwxMiBAQAogCiAJCWlmIChkLT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yID09IFVTQl9WSURfTUVESU9OKQogCQkJc3dpdGNoIChtc2dbaV0uYWRkcikgewotCQkJCWNhc2UgMHg2MzoKLQkJCQkJY3h1c2JfZ3Bpb190dW5lcihkLDApOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQljeHVzYl9ncGlvX3R1bmVyKGQsMSk7Ci0JCQkJCWJyZWFrOworCQkJY2FzZSAweDYzOgorCQkJCWN4dXNiX2dwaW9fdHVuZXIoZCwgMCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWN4dXNiX2dwaW9fdHVuZXIoZCwgMSk7CisJCQkJYnJlYWs7CiAJCQl9CiAKIAkJLyogcmVhZCByZXF1ZXN0ICovCkBAIC0xMDMsMjYgKzEwNCwyNyBAQAogCQkJb2J1ZlswXSA9IG1zZ1tpXS5sZW47CiAJCQlvYnVmWzFdID0gbXNnW2krMV0ubGVuOwogCQkJb2J1ZlsyXSA9IG1zZ1tpXS5hZGRyOwotCQkJbWVtY3B5KCZvYnVmWzNdLG1zZ1tpXS5idWYsbXNnW2ldLmxlbik7CisJCQltZW1jcHkoJm9idWZbM10sIG1zZ1tpXS5idWYsIG1zZ1tpXS5sZW4pOwogCiAJCQlpZiAoY3h1c2JfY3RybF9tc2coZCwgQ01EX0kyQ19SRUFELAotCQkJCQkJb2J1ZiwgMyttc2dbaV0ubGVuLAotCQkJCQkJaWJ1ZiwgMSttc2dbaSsxXS5sZW4pIDwgMCkKKwkJCQkJICAgb2J1ZiwgMyttc2dbaV0ubGVuLAorCQkJCQkgICBpYnVmLCAxK21zZ1tpKzFdLmxlbikgPCAwKQogCQkJCWJyZWFrOwogCiAJCQlpZiAoaWJ1ZlswXSAhPSAweDA4KQogCQkJCWRlYl9pMmMoImkyYyByZWFkIG1heSBoYXZlIGZhaWxlZFxuIik7CiAKLQkJCW1lbWNweShtc2dbaSsxXS5idWYsJmlidWZbMV0sbXNnW2krMV0ubGVuKTsKKwkJCW1lbWNweShtc2dbaSsxXS5idWYsICZpYnVmWzFdLCBtc2dbaSsxXS5sZW4pOwogCiAJCQlpKys7CiAJCX0gZWxzZSB7IC8qIHdyaXRlICovCiAJCQl1OCBvYnVmWzIrbXNnW2ldLmxlbl0sIGlidWY7CiAJCQlvYnVmWzBdID0gbXNnW2ldLmFkZHI7CiAJCQlvYnVmWzFdID0gbXNnW2ldLmxlbjsKLQkJCW1lbWNweSgmb2J1ZlsyXSxtc2dbaV0uYnVmLG1zZ1tpXS5sZW4pOworCQkJbWVtY3B5KCZvYnVmWzJdLCBtc2dbaV0uYnVmLCBtc2dbaV0ubGVuKTsKIAotCQkJaWYgKGN4dXNiX2N0cmxfbXNnKGQsQ01EX0kyQ19XUklURSwgb2J1ZiwgMittc2dbaV0ubGVuLCAmaWJ1ZiwxKSA8IDApCisJCQlpZiAoY3h1c2JfY3RybF9tc2coZCwgQ01EX0kyQ19XUklURSwgb2J1ZiwKKwkJCQkJICAgMittc2dbaV0ubGVuLCAmaWJ1ZiwxKSA8IDApCiAJCQkJYnJlYWs7CiAJCQlpZiAoaWJ1ZiAhPSAweDA4KQogCQkJCWRlYl9pMmMoImkyYyB3cml0ZSBtYXkgaGF2ZSBmYWlsZWRcbiIpOwpAQCAtMzI0LDE2ICszMjYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4dXNiX2xnaDA2NGZfdHVuZXJfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQkJCQkJICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKLXsKLQlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gZmUtPmR2Yi0+cHJpdjsKLQlyZXR1cm4gbGdfaDA2eGZfcGxsX3NldChmZSwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIGZlcCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgY3h1c2JfY3gyMjcwMl9jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDYzLAotCiAJLm91dHB1dF9tb2RlID0gQ1gyMjcwMl9QQVJBTExFTF9PVVRQVVQsCiB9OwogCkBAIC0zNzQsMzEgKzM2OCwyNyBAQAogCiBzdGF0aWMgaW50IGN4dXNiX2RlZTE2MDFfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0JYWRhcC0+cGxsX2FkZHIgPSAweDYxOwotCWFkYXAtPnBsbF9kZXNjID0gJmR2Yl9wbGxfdGhvbXNvbl9kdHQ3NTc5OwotCWFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLmNhbGNfcmVncyA9IGR2Yl91c2JfdHVuZXJfY2FsY19yZWdzOworCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGFkYXAtPmZlLCAweDYxLAorCQkgICBOVUxMLCAmZHZiX3BsbF90aG9tc29uX2R0dDc1NzkpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4dXNiX2xnejIwMV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKLQlhZGFwLT5wbGxfYWRkciA9IDB4NjE7Ci0JYWRhcC0+cGxsX2Rlc2MgPSAmZHZiX3BsbF9sZ196MjAxOwotCWFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLmNhbGNfcmVncyA9IGR2Yl91c2JfdHVuZXJfY2FsY19yZWdzOworCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGFkYXAtPmZlLCAweDYxLCBOVUxMLCAmZHZiX3BsbF9sZ196MjAxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeHVzYl9kdHQ3NTc5X3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewotCWFkYXAtPnBsbF9hZGRyID0gMHg2MDsKLQlhZGFwLT5wbGxfZGVzYyA9ICZkdmJfcGxsX3Rob21zb25fZHR0NzU3OTsKLQlhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5jYWxjX3JlZ3MgPSBkdmJfdXNiX3R1bmVyX2NhbGNfcmVnczsKKwlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBhZGFwLT5mZSwgMHg2MCwKKwkJICAgTlVMTCwgJmR2Yl9wbGxfdGhvbXNvbl9kdHQ3NTc5KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeHVzYl9sZ2R0MzMwM190dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbnQgY3h1c2JfbGdoMDY0Zl90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKLQlhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gY3h1c2JfbGdoMDY0Zl90dW5lcl9zZXRfcGFyYW1zOworCWR2Yl9hdHRhY2gobGdoMDZ4Zl9hdHRhY2gsIGFkYXAtPmZlLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxMCw3ICs0MDAsOCBAQAogCiAJY3h1c2JfY3RybF9tc2coYWRhcC0+ZGV2LCBDTURfRElHSVRBTCwgTlVMTCwgMCwgJmIsIDEpOwogCi0JaWYgKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsICZjeHVzYl9jeDIyNzAyX2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKQorCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLCAmY3h1c2JfY3gyMjcwMl9jb25maWcsCisJCQkJICAgJmFkYXAtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAtRUlPOwpAQCAtNDIzLDcgKzQxNCw4IEBACiAKIAljeHVzYl9jdHJsX21zZyhhZGFwLT5kZXYsIENNRF9ESUdJVEFMLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAotCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwgJmN4dXNiX2xnZHQzMzAzX2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKQorCWlmICgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwgJmN4dXNiX2xnZHQzMzAzX2NvbmZpZywKKwkJCQkgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpICE9IE5VTEwpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC1FSU87CkBAIC00MzcsNyArNDI5LDggQEAKIAogCWN4dXNiX2N0cmxfbXNnKGFkYXAtPmRldiwgQ01EX0RJR0lUQUwsIE5VTEwsIDAsIE5VTEwsIDApOwogCi0JaWYgKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmY3h1c2JfbXQzNTJfY29uZmlnLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpICE9IE5VTEwpCisJaWYgKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmY3h1c2JfbXQzNTJfY29uZmlnLAorCQkJCSAgICZhZGFwLT5kZXYtPmkyY19hZGFwKSkgIT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gLUVJTzsKQEAgLTQ1MCw4ICs0NDMsMTEgQEAKIAogCWN4dXNiX2N0cmxfbXNnKGFkYXAtPmRldiwgQ01EX0RJR0lUQUwsIE5VTEwsIDAsIE5VTEwsIDApOwogCi0JaWYgKCgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJmN4dXNiX2RlZTE2MDFfY29uZmlnLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpICE9IE5VTEwpIHx8Ci0JCSgoYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLCAmY3h1c2JfemwxMDM1M19kZWUxNjAxX2NvbmZpZywgJmFkYXAtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKSkKKwlpZiAoKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmY3h1c2JfZGVlMTYwMV9jb25maWcsCisJCQkJICAgICZhZGFwLT5kZXYtPmkyY19hZGFwKSkgIT0gTlVMTCkgfHwKKwkJKChhZGFwLT5mZSA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCQkJCSZjeHVzYl96bDEwMzUzX2RlZTE2MDFfY29uZmlnLAorCQkJCQkmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpICE9IE5VTEwpKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAtRUlPOwpAQCAtNDYzLDcgKzQ1OSw4IEBACiAgKi8KIAogI2RlZmluZSBCTFVFQklSRF8wMV9JRF9PRkZTRVQgNjYzOAotc3RhdGljIGludCBibHVlYmlyZF9wYXRjaF9kdmljb19maXJtd2FyZV9kb3dubG9hZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3N0YXRpYyBpbnQgYmx1ZWJpcmRfcGF0Y2hfZHZpY29fZmlybXdhcmVfZG93bmxvYWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJCQkgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7CiAJaWYgKGZ3LT5zaXplIDwgQkxVRUJJUkRfMDFfSURfT0ZGU0VUICsgNCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NzEsMTAgKzQ2OCwxMiBAQAogCWlmIChmdy0+ZGF0YVtCTFVFQklSRF8wMV9JRF9PRkZTRVRdID09IChVU0JfVklEX0RWSUNPICYgMHhmZikgJiYKIAkgICAgZnctPmRhdGFbQkxVRUJJUkRfMDFfSURfT0ZGU0VUICsgMV0gPT0gVVNCX1ZJRF9EVklDTyA+PiA4KSB7CiAKLQkJZnctPmRhdGFbQkxVRUJJUkRfMDFfSURfT0ZGU0VUICsgMl0gPSB1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCArIDE7Ci0JCWZ3LT5kYXRhW0JMVUVCSVJEXzAxX0lEX09GRlNFVCArIDNdID0gdWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPj4gODsKKwkJZnctPmRhdGFbQkxVRUJJUkRfMDFfSURfT0ZGU0VUICsgMl0gPQorCQkJdWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgKyAxOworCQlmdy0+ZGF0YVtCTFVFQklSRF8wMV9JRF9PRkZTRVQgKyAzXSA9CisJCQl1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA+PiA4OwogCi0JCXJldHVybiB1c2JfY3lwcmVzc19sb2FkX2Zpcm13YXJlKHVkZXYsZncsQ1lQUkVTU19GWDIpOworCQlyZXR1cm4gdXNiX2N5cHJlc3NfbG9hZF9maXJtd2FyZSh1ZGV2LCBmdywgQ1lQUkVTU19GWDIpOwogCX0KIAogCXJldHVybiAtRUlOVkFMOwpAQCAtNDg4LDcgKzQ4Nyw3IEBACiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY3h1c2JfYmx1ZWJpcmRfZHR0NzU3OV9wcm9wZXJ0aWVzOwogCiBzdGF0aWMgaW50IGN4dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJaWYgKGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwmY3h1c2JfbWVkaW9uX3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCB8fAogCQlkdmJfdXNiX2RldmljZV9pbml0KGludGYsJmN4dXNiX2JsdWViaXJkX2xnaDA2NGZfcHJvcGVydGllcyxUSElTX01PRFVMRSxOVUxMKSA9PSAwIHx8CkBAIC01MDIsMjAgKzUwMSwyMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY3h1c2JfdGFibGUgW10gPSB7Ci0JCXsgVVNCX0RFVklDRShVU0JfVklEX01FRElPTiwgVVNCX1BJRF9NRURJT05fTUQ5NTcwMCkgfSwKLQkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfTEcwNjRGX0NPTEQpIH0sCi0JCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHMDY0Rl9XQVJNKSB9LAotCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzFfQ09MRCkgfSwKLQkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF8xX1dBUk0pIH0sCi0JCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHWjIwMV9DT0xEKSB9LAotCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MR1oyMDFfV0FSTSkgfSwKLQkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfVEg3NTc5X0NPTEQpIH0sCi0JCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX1RINzU3OV9XQVJNKSB9LAotCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9ESUdJVEFMTk9XX0JMVUVCSVJEX0RVQUxfMV9DT0xEKSB9LAotCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9ESUdJVEFMTk9XX0JMVUVCSVJEX0RVQUxfMV9XQVJNKSB9LAotCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzJfQ09MRCkgfSwKLQkJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF8yX1dBUk0pIH0sCi0JCXt9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworCXsgVVNCX0RFVklDRShVU0JfVklEX01FRElPTiwgVVNCX1BJRF9NRURJT05fTUQ5NTcwMCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MRzA2NEZfQ09MRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MRzA2NEZfV0FSTSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzFfQ09MRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzFfV0FSTSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MR1oyMDFfQ09MRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MR1oyMDFfV0FSTSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9USDc1NzlfQ09MRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9USDc1NzlfV0FSTSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9ESUdJVEFMTk9XX0JMVUVCSVJEX0RVQUxfMV9DT0xEKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RJR0lUQUxOT1dfQkxVRUJJUkRfRFVBTF8xX1dBUk0pIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF8yX0NPTEQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF8yX1dBUk0pIH0sCisJe30JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBjeHVzYl90YWJsZSk7CiAKQEAgLTUyOSwyMCArNTI4LDIwIEBACiAJLm51bV9hZGFwdGVycyA9IDEsCiAJLmFkYXB0ZXIgPSB7CiAJCXsKLQkuc3RyZWFtaW5nX2N0cmwgICA9IGN4dXNiX3N0cmVhbWluZ19jdHJsLAotCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfY3gyMjcwMl9mcm9udGVuZF9hdHRhY2gsCi0JLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9mbWQxMjE2bWVfdHVuZXJfYXR0YWNoLAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KLQkJCS5zdHJlYW0gPSB7Ci0JCQkJLnR5cGUgPSBVU0JfQlVMSywKLQkJLmNvdW50ID0gNSwKLQkJLmVuZHBvaW50ID0gMHgwMiwKLQkJLnUgPSB7Ci0JCQkuYnVsayA9IHsKLQkJCQkuYnVmZmVyc2l6ZSA9IDgxOTIsCi0JCQl9Ci0JCX0KLQl9LAorCQkJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfY3gyMjcwMl9mcm9udGVuZF9hdHRhY2gsCisJCQkudHVuZXJfYXR0YWNoICAgICA9IGN4dXNiX2ZtZDEyMTZtZV90dW5lcl9hdHRhY2gsCisJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkJCS5zdHJlYW0gPSB7CisJCQkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCS5jb3VudCA9IDUsCisJCQkJLmVuZHBvaW50ID0gMHgwMiwKKwkJCQkudSA9IHsKKwkJCQkJLmJ1bGsgPSB7CisJCQkJCQkuYnVmZmVyc2l6ZSA9IDgxOTIsCisJCQkJCX0KKwkJCQl9CisJCQl9LAogCiAJCX0sCiAJfSwKQEAgLTU3NSwyMSArNTc0LDIxIEBACiAJLm51bV9hZGFwdGVycyA9IDEsCiAJLmFkYXB0ZXIgPSB7CiAJCXsKLQkuc3RyZWFtaW5nX2N0cmwgICA9IGN4dXNiX3N0cmVhbWluZ19jdHJsLAotCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfbGdkdDMzMDNfZnJvbnRlbmRfYXR0YWNoLAotCS50dW5lcl9hdHRhY2ggICAgID0gY3h1c2JfbGdkdDMzMDNfdHVuZXJfYXR0YWNoLAorCQkJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfbGdkdDMzMDNfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9sZ2gwNjRmX3R1bmVyX2F0dGFjaCwKIAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KLQkJCS5zdHJlYW0gPSB7Ci0JCQkJLnR5cGUgPSBVU0JfQlVMSywKLQkJLmNvdW50ID0gNSwKLQkJLmVuZHBvaW50ID0gMHgwMiwKLQkJLnUgPSB7Ci0JCQkuYnVsayA9IHsKLQkJCQkuYnVmZmVyc2l6ZSA9IDgxOTIsCi0JCQl9Ci0JCX0KLQl9LAorCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJCQkuc3RyZWFtID0geworCQkJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCQkuY291bnQgPSA1LAorCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA4MTkyLAorCQkJCQl9CisJCQkJfQorCQkJfSwKIAkJfSwKIAl9LAogCkBAIC02MjcsMjAgKzYyNiwyMCBAQAogCS5udW1fYWRhcHRlcnMgPSAxLAogCS5hZGFwdGVyID0gewogCQl7Ci0JLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKLQkuZnJvbnRlbmRfYXR0YWNoICA9IGN4dXNiX2RlZTE2MDFfZnJvbnRlbmRfYXR0YWNoLAotCS50dW5lcl9hdHRhY2ggICAgID0gY3h1c2JfZGVlMTYwMV90dW5lcl9hdHRhY2gsCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfZGVlMTYwMV9mcm9udGVuZF9hdHRhY2gsCisJCQkudHVuZXJfYXR0YWNoICAgICA9IGN4dXNiX2RlZTE2MDFfdHVuZXJfYXR0YWNoLAorCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwogCQkJLnN0cmVhbSA9IHsKIAkJCQkudHlwZSA9IFVTQl9CVUxLLAotCQkuY291bnQgPSA1LAotCQkuZW5kcG9pbnQgPSAweDA0LAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gODE5MiwKLQkJCX0KLQkJfQotCX0sCisJCQkJLmNvdW50ID0gNSwKKwkJCQkuZW5kcG9pbnQgPSAweDA0LAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gODE5MiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCiAJCX0sCiAJfSwKIApAQCAtNjg2LDIxICs2ODUsMjEgQEAKIAkubnVtX2FkYXB0ZXJzID0gMiwKIAkuYWRhcHRlciA9IHsKIAkJewotCS5zdHJlYW1pbmdfY3RybCAgID0gY3h1c2Jfc3RyZWFtaW5nX2N0cmwsCi0JLmZyb250ZW5kX2F0dGFjaCAgPSBjeHVzYl9tdDM1Ml9mcm9udGVuZF9hdHRhY2gsCi0JLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9sZ3oyMDFfdHVuZXJfYXR0YWNoLAorCQkJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfbXQzNTJfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9sZ3oyMDFfdHVuZXJfYXR0YWNoLAogCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwogCQkJLnN0cmVhbSA9IHsKIAkJCQkudHlwZSA9IFVTQl9CVUxLLAotCQkuY291bnQgPSA1LAotCQkuZW5kcG9pbnQgPSAweDA0LAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gODE5MiwKLQkJCX0KLQkJfQotCX0sCisJCQkJLmNvdW50ID0gNSwKKwkJCQkuZW5kcG9pbnQgPSAweDA0LAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gODE5MiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCiAJCX0sCiAJfSwKIAkucG93ZXJfY3RybCAgICAgICA9IGN4dXNiX2JsdWViaXJkX3Bvd2VyX2N0cmwsCkBAIC03MzYsMjEgKzczNSwyMSBAQAogCS5udW1fYWRhcHRlcnMgPSAxLAogCS5hZGFwdGVyID0gewogCQl7Ci0JLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKLQkuZnJvbnRlbmRfYXR0YWNoICA9IGN4dXNiX210MzUyX2Zyb250ZW5kX2F0dGFjaCwKLQkudHVuZXJfYXR0YWNoICAgICA9IGN4dXNiX2R0dDc1NzlfdHVuZXJfYXR0YWNoLAorCQkJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfbXQzNTJfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9kdHQ3NTc5X3R1bmVyX2F0dGFjaCwKIAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KIAkJCS5zdHJlYW0gPSB7CiAJCQkJLnR5cGUgPSBVU0JfQlVMSywKLQkJLmNvdW50ID0gNSwKLQkJLmVuZHBvaW50ID0gMHgwNCwKLQkJLnUgPSB7Ci0JCQkuYnVsayA9IHsKLQkJCQkuYnVmZmVyc2l6ZSA9IDgxOTIsCi0JCQl9Ci0JCX0KLQl9LAorCQkJCS5jb3VudCA9IDUsCisJCQkJLmVuZHBvaW50ID0gMHgwNCwKKwkJCQkudSA9IHsKKwkJCQkJLmJ1bGsgPSB7CisJCQkJCQkuYnVmZmVyc2l6ZSA9IDgxOTIsCisJCQkJCX0KKwkJCQl9CisJCQl9LAogCQl9LAogCX0sCiAJLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9ibHVlYmlyZF9wb3dlcl9jdHJsLApAQCAtNzc2LDcgKzc3NSw3IEBACiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3h1c2JfZHJpdmVyID0gewogCS5uYW1lCQk9ICJkdmJfdXNiX2N4dXNiIiwKIAkucHJvYmUJCT0gY3h1c2JfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LAorCS5kaXNjb25uZWN0ICAgICA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCiAJLmlkX3RhYmxlCT0gY3h1c2JfdGFibGUsCiB9OwogCkBAIC04MDIsNyArODAxLDcgQEAKIG1vZHVsZV9leGl0IChjeHVzYl9tb2R1bGVfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIlBhdHJpY2sgQm9ldHRjaGVyIDxwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlPiIpOwotTU9EVUxFX0FVVEhPUigiTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbTFrLm5ldD4iKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPiIpOwogTU9EVUxFX0FVVEhPUigiQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBDb25leGFudCBVU0IyLjAgaHlicmlkIHJlZmVyZW5jZSBkZXNpZ24iKTsKIE1PRFVMRV9WRVJTSU9OKCIxLjAtYWxwaGEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKaW5kZXggYWM4NDM0Ny4uY2RhM2FkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKQEAgLTI0LDE4ICsyNCwyMyBAQAogI2RlZmluZSBSRVFVRVNUX0kyQ19XUklURSAgICAweDMKICNkZWZpbmUgUkVRVUVTVF9QT0xMX1JDICAgICAgMHg0CiAjZGVmaW5lIFJFUVVFU1RfSlVNUFJBTSAgICAgIDB4OAorI2RlZmluZSBSRVFVRVNUX1NFVF9DTE9DSyAgICAweEIKICNkZWZpbmUgUkVRVUVTVF9TRVRfR1BJTyAgICAgMHhDCiAjZGVmaW5lIFJFUVVFU1RfRU5BQkxFX1ZJREVPIDB4RgogCS8vIDEgQnl0ZTogNE1TQigxID0gZW5hYmxlIHN0cmVhbWluZywgMCA9IGRpc2FibGUgc3RyZWFtaW5nKSA0TFNCKFZpZGVvIE1vZGU6IDAgPSBNUEVHMiAxODhCeXRlcywgMSA9IEFuYWxvZykKIAkvLyAyIEJ5dGU6IE1QRUcyIG1vZGU6ICA0TVNCKDEgPSBNYXN0ZXIgTW9kZSwgMCA9IFNsYXZlIE1vZGUpIDRMU0IoQ2hhbm5lbCAxID0gYml0MCwgQ2hhbm5lbCAyID0gYml0MSkKIAkvLyAyIEJ5dGU6IEFuYWxvZyBtb2RlOiA0TVNCKDAgPSA2MjUgbGluZXMsIDEgPSA1MjUgbGluZXMpICAgIDRMU0IoICAgICAiICAgICAgICAgICAgICAgICIgICAgICAgICAgICkKKyNkZWZpbmUgUkVRVUVTVF9HRVRfVkVSU0lPTiAgMHgxNQogCiBzdHJ1Y3QgZGliMDcwMF9zdGF0ZSB7CiAJdTggY2hhbm5lbF9zdGF0ZTsKIAl1MTYgbXQyMDYwX2lmMVsyXTsKKworCXU4IGlzX2RpYjcwMDBwYzsKIH07CiAKIGV4dGVybiBpbnQgZGliMDcwMF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiwgZW51bSBkaWIwN3gwX2dwaW9zIGdwaW8sIHU4IGdwaW9fZGlyLCB1OCBncGlvX3ZhbCk7CitleHRlcm4gaW50IGRpYjA3MDBfY3RybF9jbG9jayhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiBjbGtfTUh6LCB1OCBjbG9ja19vdXRfZ3AzKTsKIGV4dGVybiBpbnQgZGliMDcwMF9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyk7CiBleHRlcm4gaW50IGRpYjA3MDBfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKTsKIGV4dGVybiBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBkaWIwNzAwX2kyY19hbGdvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKaW5kZXggZGNhNmM2OS4uNmE0ZDE1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCkBAIC0xMzUsMTQgKzEzNSw0NiBAQAogaW50IGRpYjA3MDBfaWRlbnRpZnlfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcywKIAkJCXN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiAqKmRlc2MsIGludCAqY29sZCkKIHsKLQl1OCBidWZbM10gPSB7IFJFUVVFU1RfU0VUX0dQSU8sIDQsIChHUElPX0lOIDw8IDcpIHwgKDAgPDwgNikgfTsgLy8gR1BJTzQgaXMgc2F2ZSAtIHVzZWQgZm9yIEkyQwotCSpjb2xkID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LDApLAotCQlidWZbMF0sIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VULCAwLCAwLCBidWYsIDMsIFVTQl9DVFJMX0dFVF9USU1FT1VUKSAhPSAzOworCXU4IGJbMTZdOworCXMxNiByZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsMCksCisJCVJFUVVFU1RfR0VUX1ZFUlNJT04sIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4sIDAsIDAsIGIsIDE2LCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisKKwlkZWJfaW5mbygiRlcgR0VUX1ZFUlNJT04gbGVuZ3RoOiAlZFxuIixyZXQpOworCisJKmNvbGQgPSByZXQgPD0gMDsKIAogCWRlYl9pbmZvKCJjb2xkOiAlZFxuIiwgKmNvbGQpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRpYjA3MDBfc2V0X2Nsb2NrKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggZW5fcGxsLAorCXU4IHBsbF9zcmMsIHU4IHBsbF9yYW5nZSwgdTggY2xvY2tfZ3BpbzMsIHUxNiBwbGxfcHJlZGl2LAorCXUxNiBwbGxfbG9vcGRpdiwgdTE2IGZyZWVfZGl2LCB1MTYgZHN1U2NhbGVyKQoreworCXU4IGJbMTBdOworCWJbMF0gPSBSRVFVRVNUX1NFVF9DTE9DSzsKKwliWzFdID0gKGVuX3BsbCA8PCA3KSB8IChwbGxfc3JjIDw8IDYpIHwgKHBsbF9yYW5nZSA8PCA1KSB8IChjbG9ja19ncGlvMyA8PCA0KTsKKwliWzJdID0gKHBsbF9wcmVkaXYgPj4gOCkgICYgMHhmZjsgLy8gTVNCCisJYlszXSA9ICBwbGxfcHJlZGl2ICAgICAgICAmIDB4ZmY7IC8vIExTQgorCWJbNF0gPSAocGxsX2xvb3BkaXYgPj4gOCkgJiAweGZmOyAvLyBNU0IKKwliWzVdID0gIHBsbF9sb29wZGl2ICAgICAgICYgMHhmZjsgLy8gTFNCCisJYls2XSA9IChmcmVlX2RpdiA+PiA4KSAgICAmIDB4ZmY7IC8vIE1TQgorCWJbN10gPSAgZnJlZV9kaXYgICAgICAgICAgJiAweGZmOyAvLyBMU0IKKwliWzhdID0gKGRzdVNjYWxlciA+PiA4KSAgICYgMHhmZjsgLy8gTVNCCisJYls5XSA9ICBkc3VTY2FsZXIgICAgICAgICAmIDB4ZmY7IC8vIExTQgorCisJcmV0dXJuIGRpYjA3MDBfY3RybF93cihkLCBiLCAxMCk7Cit9CisKK2ludCBkaWIwNzAwX2N0cmxfY2xvY2soc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgY2xrX01IeiwgdTggY2xvY2tfb3V0X2dwMykKK3sKKwlzd2l0Y2ggKGNsa19NSHopIHsKKwkJY2FzZSA3MjogZGliMDcwMF9zZXRfY2xvY2soZCwgMSwgMCwgMSwgY2xvY2tfb3V0X2dwMywgMiwgMjQsIDAsIDB4NGMpOyBicmVhazsKKwkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGRpYjA3MDBfanVtcHJhbShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTMyIGFkZHJlc3MpCiB7CiAJaW50IHJldCwgYWN0bGVuOwpAQCAtMTk3LDcgKzIyOSw3IEBACiAJCS8qIHN0YXJ0IHRoZSBmaXJtd2FyZSAqLwogCQlpZiAoKHJldCA9IGRpYjA3MDBfanVtcHJhbSh1ZGV2LCAweDcwMDAwMDAwKSkgPT0gMCkgewogCQkJaW5mbygiZmlybXdhcmUgc3RhcnRlZCBzdWNjZXNzZnVsbHkuIik7Ci0JCQltc2xlZXAoMTAwKTsKKwkJCW1zbGVlcCg1MDApOwogCQl9CiAJfSBlbHNlCiAJCXJldCA9IC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCBlNDczYmZlLi4yMjA4NzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTksNiArOSw4IEBACiAjaW5jbHVkZSAiZGliMDcwMC5oIgogCiAjaW5jbHVkZSAiZGliMzAwMG1jLmgiCisjaW5jbHVkZSAiZGliNzAwMG0uaCIKKyNpbmNsdWRlICJkaWI3MDAwcC5oIgogI2luY2x1ZGUgIm10MjA2MC5oIgogCiBzdGF0aWMgaW50IGZvcmNlX2xuYV9hY3RpdmF0aW9uOwpAQCAtOTUsMzcgKzk3LDE4OSBAQAogfQogCiAvKiBTVEs3NzAwUDogSGF1cHBhdWdlIE5vdmEtVCBTdGljaywgQVZlck1lZGlhIFZvbGFyICovCi0vKgotc3RhdGljIHN0cnVjdCBtdDIwNjBfY29uZmlnIHN0azcwMDBwX210MjA2MF9jb25maWcgPSB7Ci0JMHg2MAorc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2FnY19jb25maWcgc3RrNzcwMHBfNzAwMG1fbXQyMDYwX2FnY19jb25maWcgPSB7CisJQkFORF9VSEYgfCBCQU5EX1ZIRiwgICAgICAgLy8gYmFuZF9jYXBzCisKKwkvKiBQX2FnY191c2Vfc2RfbW9kMT0wLCBQX2FnY191c2Vfc2RfbW9kMj0wLCBQX2FnY19mcmVxX3B3bV9kaXY9NSwgUF9hZ2NfaW52X3B3bTE9MCwgUF9hZ2NfaW52X3B3bTI9MCwKKwkgKiBQX2FnY19pbmhfZGNfcnZfZXN0PTAsIFBfYWdjX3RpbWVfZXN0PTMsIFBfYWdjX2ZyZWV6ZT0wLCBQX2FnY19uYl9lc3Q9MiwgUF9hZ2Nfd3JpdGU9MCAqLworCSgwIDw8IDE1KSB8ICgwIDw8IDE0KSB8ICg1IDw8IDExKSB8ICgwIDw8IDEwKSB8ICgwIDw8IDkpIHwgKDAgPDwgOCkgfCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDIgPDwgMSkgfCAoMCA8PCAwKSwgLy8gc2V0dXAKKworCTcxMiwgIC8vIGludl9nYWluCisJNDEsICAvLyB0aW1lX3N0YWJpbGl6CisKKwkwLCAgLy8gYWxwaGFfbGV2ZWwKKwkxMTgsICAvLyB0aGxvY2sKKworCTAsICAgICAvLyB3YmRfaW52CisJNDA5NSwgIC8vIHdiZF9yZWYKKwkwLCAgICAgLy8gd2JkX3NlbAorCTAsICAgICAvLyB3YmRfYWxwaGEKKworCTQyNTk4LCAgLy8gYWdjMV9tYXgKKwkxNzY5NCwgIC8vIGFnYzFfbWluCisJNDU4NzUsICAvLyBhZ2MyX21heAorCTI2MjEsICAvLyBhZ2MyX21pbgorCTAsICAvLyBhZ2MxX3B0MQorCTc2LCAgLy8gYWdjMV9wdDIKKwkxMzksICAvLyBhZ2MxX3B0MworCTUyLCAgLy8gYWdjMV9zbG9wZTEKKwk1OSwgIC8vIGFnYzFfc2xvcGUyCisJMTA3LCAgLy8gYWdjMl9wdDEKKwkxNzIsICAvLyBhZ2MyX3B0MgorCTU3LCAgLy8gYWdjMl9zbG9wZTEKKwk3MCwgIC8vIGFnYzJfc2xvcGUyCisKKwkyMSwgIC8vIGFscGhhX21hbnQKKwkyNSwgIC8vIGFscGhhX2V4cAorCTI4LCAgLy8gYmV0YV9tYW50CisJNDgsICAvLyBiZXRhX2V4cAorCisJMSwgIC8vIHBlcmZvcm1fYWdjX3NvZnRzcGxpdAorCXsgIDAsICAgICAvLyBzcGxpdF9taW4KKwkgICAxMDcsICAgLy8gc3BsaXRfbWF4CisJICAgNTE4MDAsIC8vIGdsb2JhbF9zcGxpdF9taW4KKwkgICAyNDcwMCAgLy8gZ2xvYmFsX3NwbGl0X21heAorCX0sCiB9OwotKi8KKworc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2FnY19jb25maWcgc3RrNzcwMHBfNzAwMHBfbXQyMDYwX2FnY19jb25maWcgPSB7CisJQkFORF9VSEYgfCBCQU5EX1ZIRiwKKworCS8qIFBfYWdjX3VzZV9zZF9tb2QxPTAsIFBfYWdjX3VzZV9zZF9tb2QyPTAsIFBfYWdjX2ZyZXFfcHdtX2Rpdj01LCBQX2FnY19pbnZfcHdtMT0wLCBQX2FnY19pbnZfcHdtMj0wLAorCSAqIFBfYWdjX2luaF9kY19ydl9lc3Q9MCwgUF9hZ2NfdGltZV9lc3Q9MywgUF9hZ2NfZnJlZXplPTAsIFBfYWdjX25iX2VzdD0yLCBQX2FnY193cml0ZT0wICovCisJKDAgPDwgMTUpIHwgKDAgPDwgMTQpIHwgKDUgPDwgMTEpIHwgKDAgPDwgMTApIHwgKDAgPDwgOSkgfCAoMCA8PCA4KSB8ICgzIDw8IDUpIHwgKDAgPDwgNCkgfCAoMiA8PCAxKSB8ICgwIDw8IDApLCAvLyBzZXR1cAorCisJNzEyLCAvLyBpbnZfZ2FpbgorCTQxLCAgLy8gdGltZV9zdGFiaWxpegorCisJMCwgICAvLyBhbHBoYV9sZXZlbAorCTExOCwgLy8gdGhsb2NrCisKKwkwLCAgICAvLyB3YmRfaW52CisJNDA5NSwgLy8gd2JkX3JlZgorCTAsICAgIC8vIHdiZF9zZWwKKwkwLCAgICAvLyB3YmRfYWxwaGEKKworCTQyNTk4LCAvLyBhZ2MxX21heAorCTE2Mzg0LCAvLyBhZ2MxX21pbgorCTQyNTk4LCAvLyBhZ2MyX21heAorCSAgICAwLCAvLyBhZ2MyX21pbgorCisJICAwLCAgIC8vIGFnYzFfcHQxCisJMTM3LCAgIC8vIGFnYzFfcHQyCisJMjU1LCAgIC8vIGFnYzFfcHQzCisKKwkgIDAsICAgLy8gYWdjMV9zbG9wZTEKKwkyNTUsICAgLy8gYWdjMV9zbG9wZTIKKworCTAsICAgICAvLyBhZ2MyX3B0MQorCTAsICAgICAvLyBhZ2MyX3B0MgorCisJIDAsICAgIC8vIGFnYzJfc2xvcGUxCisJNDEsICAgIC8vIGFnYzJfc2xvcGUyCisKKwkxNSwgLy8gYWxwaGFfbWFudAorCTI1LCAvLyBhbHBoYV9leHAKKworCTI4LCAvLyBiZXRhX21hbnQKKwk0OCwgLy8gYmV0YV9leHAKKworCTAsIC8vIHBlcmZvcm1fYWdjX3NvZnRzcGxpdAorfTsKKworc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2JhbmR3aWR0aF9jb25maWcgc3RrNzcwMHBfcGxsX2NvbmZpZyA9IHsKKwk2MDAwMCwgMzAwMDAsIC8vIGludGVybmFsLCBzYW1wbGluZworCTEsIDgsIDMsIDEsIDAsIC8vIHBsbF9jZmc6IHByZWRpdiwgcmF0aW8sIHJhbmdlLCByZXNldCwgYnlwYXNzCisJMCwgMCwgMSwgMSwgMCwgLy8gbWlzYzogcmVmZGl2LCBieXBjbGtfZGl2LCBJT19DTEtfZW5fY29yZSwgQURDbGtTcmMsIG1vZHVsbworCSgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1MjQgPDwgMCksIC8vIHNhZF9jZmc6IHJlZnNlbCwgc2VsLCBmcmVxXzE1aworCTYwMjU4MTY3LCAvLyBpZnJlcQorCTIwNDUyMjI1LCAvLyB0aW1mCit9OworCitzdGF0aWMgc3RydWN0IGRpYjcwMDBtX2NvbmZpZyBzdGs3NzAwcF9kaWI3MDAwbV9jb25maWcgPSB7CisJLmR2YnRfbW9kZSA9IDEsCisJLm91dHB1dF9tcGVnMl9pbl8xODhfYnl0ZXMgPSAxLAorCS5xdWFydHpfZGlyZWN0ID0gMSwKKworCS5hZ2NfY29uZmlnX2NvdW50ID0gMSwKKwkuYWdjID0gJnN0azc3MDBwXzcwMDBtX210MjA2MF9hZ2NfY29uZmlnLAorCS5idyAgPSAmc3RrNzcwMHBfcGxsX2NvbmZpZywKKworCS5ncGlvX2RpciA9IERJQjcwMDBNX0dQSU9fREVGQVVMVF9ESVJFQ1RJT05TLAorCS5ncGlvX3ZhbCA9IERJQjcwMDBNX0dQSU9fREVGQVVMVF9WQUxVRVMsCisJLmdwaW9fcHdtX3BvcyA9IERJQjcwMDBNX0dQSU9fREVGQVVMVF9QV01fUE9TLAorfTsKKworc3RhdGljIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgc3RrNzcwMHBfZGliNzAwMHBfY29uZmlnID0geworCS5vdXRwdXRfbXBlZzJfaW5fMTg4X2J5dGVzID0gMSwKKworCS5hZ2MgPSAmc3RrNzcwMHBfNzAwMHBfbXQyMDYwX2FnY19jb25maWcsCisJLmJ3ICA9ICZzdGs3NzAwcF9wbGxfY29uZmlnLAorCisJLmdwaW9fZGlyID0gRElCNzAwME1fR1BJT19ERUZBVUxUX0RJUkVDVElPTlMsCisJLmdwaW9fdmFsID0gRElCNzAwME1fR1BJT19ERUZBVUxUX1ZBTFVFUywKKwkuZ3Bpb19wd21fcG9zID0gRElCNzAwME1fR1BJT19ERUZBVUxUX1BXTV9QT1MsCit9OwogCiBzdGF0aWMgaW50IHN0azc3MDBwX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogeworCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGFkYXAtPmRldi0+cHJpdjsKIAkvKiB1bmxlc3MgdGhlcmUgaXMgbm8gcmVhbCBwb3dlciBtYW5hZ2VtZW50IGluIERWQiAtIHdlIGxlYXZlIHRoZSBkZXZpY2Ugb24gR1BJTzYgKi8KLQlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsIEdQSU9fT1VULCAwKTsgbXNsZWVwKDEwKTsKLQlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsIEdQSU9fT1VULCAxKTsgbXNsZWVwKDEwKTsKLQlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMSk7IG1zbGVlcCgxMCk7Ci0JZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDApOyBtc2xlZXAoMTApOwogCi0vLwlhZGFwLT5mZSA9IGRpYjcwMDBtX2F0dGFjaCgmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJnN0azc3MDBwX2RpYjcwMDBtX2NvbmZpZywgMTgpOwotCXJldHVybiAwOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsICBHUElPX09VVCwgMCk7IG1zbGVlcCg1MCk7CisKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsICBHUElPX09VVCwgMSk7IG1zbGVlcCgxMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU85LCAgR1BJT19PVVQsIDEpOworCisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDApOyBtc2xlZXAoMTApOworCWRpYjA3MDBfY3RybF9jbG9jayhhZGFwLT5kZXYsIDcyLCAxKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMSk7IG1zbGVlcCgxMDApOworCisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsICBHUElPMCwgR1BJT19PVVQsIDEpOworCisJc3QtPm10MjA2MF9pZjFbMF0gPSAxMjIwOworCisJaWYgKGRpYjcwMDBwY19kZXRlY3Rpb24oJmFkYXAtPmRldi0+aTJjX2FkYXApKSB7CisJCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAxOCwgJnN0azc3MDBwX2RpYjcwMDBwX2NvbmZpZyk7CisJCXN0LT5pc19kaWI3MDAwcGMgPSAxOworCX0gZWxzZQorCQlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliNzAwMG1fYXR0YWNoLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMTgsICZzdGs3NzAwcF9kaWI3MDAwbV9jb25maWcpOworCisJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKIH0KIAorc3RhdGljIHN0cnVjdCBtdDIwNjBfY29uZmlnIHN0azc3MDBwX210MjA2MF9jb25maWcgPSB7CisJMHg2MAorfTsKKwogc3RhdGljIGludCBzdGs3NzAwcF90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKLS8vCXR1bl9pMmMgPSBkaWI3MDAwbV9nZXRfdHVuZXJfaTJjX21hc3RlcihhZGFwLT5mZSwgMSk7Ci0vLwlyZXR1cm4gbXQyMDYwX2F0dGFjaChhZGFwLT5mZSwgdHVuX2kyYywgJnN0azMwMDBwX210MjA2MF9jb25maWcsIGlmMSk7Ci0JcmV0dXJuIDA7CisJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gYWRhcC0+ZGV2LT5wcml2OworCXN0cnVjdCBpMmNfYWRhcHRlciAqdHVuX2kyYzsKKworCWlmIChzdC0+aXNfZGliNzAwMHBjKQorCQl0dW5faTJjID0gZGliNzAwMHBfZ2V0X2kyY19tYXN0ZXIoYWRhcC0+ZmUsIERJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiwgMSk7CisJZWxzZQorCQl0dW5faTJjID0gZGliNzAwMG1fZ2V0X2kyY19tYXN0ZXIoYWRhcC0+ZmUsIERJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiwgMSk7CisKKwlyZXR1cm4gZHZiX2F0dGFjaChtdDIwNjBfYXR0YWNoLCBhZGFwLT5mZSwgdHVuX2kyYywgJnN0azc3MDBwX210MjA2MF9jb25maWcsCisJCXN0LT5tdDIwNjBfaWYxWzBdKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CiB9CiAKIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRpYjA3MDBfdXNiX2lkX3RhYmxlW10gPSB7CiAJCXsgVVNCX0RFVklDRShVU0JfVklEX0RJQkNPTSwgICAgVVNCX1BJRF9ESUJDT01fU1RLNzcwMFApIH0sCisJCXsgVVNCX0RFVklDRShVU0JfVklEX0RJQkNPTSwgICAgVVNCX1BJRF9ESUJDT01fU1RLNzcwMFBfUEMpIH0sCisKIAkJeyBVU0JfREVWSUNFKFVTQl9WSURfSEFVUFBBVUdFLCBVU0JfUElEX0hBVVBQQVVHRV9OT1ZBX1RfNTAwKSB9LAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9IQVVQUEFVR0UsIFVTQl9QSURfSEFVUFBBVUdFX05PVkFfVF81MDBfMikgfSwKIAkJeyBVU0JfREVWSUNFKFVTQl9WSURfSEFVUFBBVUdFLCBVU0JfUElEX0hBVVBQQVVHRV9OT1ZBX1RfU1RJQ0spIH0sCiAJCXsgVVNCX0RFVklDRShVU0JfVklEX0FWRVJNRURJQSwgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVIpIH0sCisJCXsgVVNCX0RFVklDRShVU0JfVklEX0NPTVBSTywgICAgVVNCX1BJRF9DT01QUk9fVklERU9NQVRFX1U1MDApIH0sCisJCXsgVVNCX0RFVklDRShVU0JfVklEX1VOSVdJTEwsICAgVVNCX1BJRF9VTklXSUxMX1NUSzc3MDBQKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9MRUFEVEVLLCAgIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX1NUSzc3MDBQKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9IQVVQUEFVR0UsIFVTQl9QSURfSEFVUFBBVUdFX05PVkFfVF9TVElDS18yKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BVkVSTUVESUEsIFVTQl9QSURfQVZFUk1FRElBX1ZPTEFSXzIpIH0sCiAJCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGliMDcwMF91c2JfaWRfdGFibGUpOwpAQCAtMTY3LDIwICszMjEsMzIgQEAKIAkJCX0sCiAJCX0sCiAKLQkJLm51bV9kZXZpY2VfZGVzY3MgPSAzLAorCQkubnVtX2RldmljZV9kZXNjcyA9IDYsCiAJCS5kZXZpY2VzID0gewogCQkJeyAgICJEaUJjb20gU1RLNzcwMFAgcmVmZXJlbmNlIGRlc2lnbiIsCi0JCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMF0sIE5VTEwgfSwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVswXSwgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzFdIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAogCQkJeyAgICJIYXVwcGF1Z2UgTm92YS1UIFN0aWNrIiwKLQkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszXSwgTlVMTCB9LAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzRdLCAmZGliMDcwMF91c2JfaWRfdGFibGVbOV0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCiAJCQl7ICAgIkFWZXJNZWRpYSBBVmVyVFYgRFZCLVQgVm9sYXIiLAotCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzRdLCBOVUxMIH0sCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNV0sICZkaWIwNzAwX3VzYl9pZF90YWJsZVsxMF0gfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCisJCQl7ICAgIkNvbXBybyBWaWRlb21hdGUgVTUwMCIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNl0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCQl7ICAgIlVuaXdpbGwgU1RLNzcwMFAgYmFzZWQgKEhhbWEgYW5kIG90aGVycykiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzddLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgICJMZWFkdGVrIFdpbmZhc3QgRFRWIERvbmdsZSAoU1RLNzcwMFAgYmFzZWQpIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs4XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfQogCQl9CiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAKQEAgLTIwMiw3ICszNjgsNyBAQAogCQkubnVtX2RldmljZV9kZXNjcyA9IDEsCiAJCS5kZXZpY2VzID0gewogCQkJeyAgICJIYXVwcGF1Z2UgTm92YS1UIDUwMCBEdWFsIERWQi1UIiwKLQkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVsxXSwgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzJdLCBOVUxMIH0sCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMl0sICZkaWIwNzAwX3VzYl9pZF90YWJsZVszXSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMKaW5kZXggNGZlMzYzZS4uN2E2YWU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jCkBAIC0xNjMsMjMgKzE2MywyMyBAQAogCQkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKIAkJCS5waWRfZmlsdGVyX2NvdW50ID0gMTYsCiAKLQkuc3RyZWFtaW5nX2N0cmwgICA9IGRpYnVzYl9zdHJlYW1pbmdfY3RybCwKLQkucGlkX2ZpbHRlciAgICAgICA9IGRpYnVzYl9waWRfZmlsdGVyLAotCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKLQkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWJfZnJvbnRlbmRfYXR0YWNoLAotCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3R1bmVyX3Byb2JlX2FuZF9hdHRhY2gsCisJCQkuc3RyZWFtaW5nX2N0cmwgICA9IGRpYnVzYl9zdHJlYW1pbmdfY3RybCwKKwkJCS5waWRfZmlsdGVyICAgICAgID0gZGlidXNiX3BpZF9maWx0ZXIsCisJCQkucGlkX2ZpbHRlcl9jdHJsICA9IGRpYnVzYl9waWRfZmlsdGVyX2N0cmwsCisJCQkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWJfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBkaWJ1c2JfdHVuZXJfcHJvYmVfYW5kX2F0dGFjaCwKIAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KIAkJCS5zdHJlYW0gPSB7CiAJCQkJLnR5cGUgPSBVU0JfQlVMSywKLQkJLmNvdW50ID0gNywKLQkJLmVuZHBvaW50ID0gMHgwMiwKLQkJLnUgPSB7Ci0JCQkuYnVsayA9IHsKLQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCi0JCQl9Ci0JCX0KLQl9LAorCQkJCS5jb3VudCA9IDcsCisJCQkJLmVuZHBvaW50ID0gMHgwMiwKKwkJCQkudSA9IHsKKwkJCQkJLmJ1bGsgPSB7CisJCQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCisJCQkJCX0KKwkJCQl9CisJCQl9LAogCQkJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGRpYnVzYl9zdGF0ZSksCiAJCX0KIAl9LApAQCAtMjQ4LDIzICsyNDgsMjMgQEAKIAkJCS5jYXBzID0gRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYgfCBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIsCiAJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDE2LAogCi0JLnN0cmVhbWluZ19jdHJsICAgPSBkaWJ1c2Jfc3RyZWFtaW5nX2N0cmwsCi0JLnBpZF9maWx0ZXIgICAgICAgPSBkaWJ1c2JfcGlkX2ZpbHRlciwKLQkucGlkX2ZpbHRlcl9jdHJsICA9IGRpYnVzYl9waWRfZmlsdGVyX2N0cmwsCi0JLmZyb250ZW5kX2F0dGFjaCAgPSBkaWJ1c2JfZGliMzAwMG1iX2Zyb250ZW5kX2F0dGFjaCwKLQkudHVuZXJfYXR0YWNoICAgICA9IGRpYnVzYl90dW5lcl9wcm9iZV9hbmRfYXR0YWNoLAorCQkJLnN0cmVhbWluZ19jdHJsICAgPSBkaWJ1c2Jfc3RyZWFtaW5nX2N0cmwsCisJCQkucGlkX2ZpbHRlciAgICAgICA9IGRpYnVzYl9waWRfZmlsdGVyLAorCQkJLnBpZF9maWx0ZXJfY3RybCAgPSBkaWJ1c2JfcGlkX2ZpbHRlcl9jdHJsLAorCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBkaWJ1c2JfZGliMzAwMG1iX2Zyb250ZW5kX2F0dGFjaCwKKwkJCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3R1bmVyX3Byb2JlX2FuZF9hdHRhY2gsCiAKLQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCiAJCQkuc3RyZWFtID0gewogCQkJCS50eXBlID0gVVNCX0JVTEssCi0JCS5jb3VudCA9IDcsCi0JCS5lbmRwb2ludCA9IDB4MDIsCi0JCS51ID0gewotCQkJLmJ1bGsgPSB7Ci0JCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAotCQkJfQotCQl9Ci0JfSwKKwkJCQkuY291bnQgPSA3LAorCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJCQl9CisJCQkJfQorCQkJfSwKIAkJCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWJ1c2Jfc3RhdGUpLAogCQl9LAogCX0sCkBAIC0zMTIsMjIgKzMxMiwyMyBAQAogCQkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKIAkJCS5waWRfZmlsdGVyX2NvdW50ID0gMTYsCiAKLQkuc3RyZWFtaW5nX2N0cmwgICA9IGRpYnVzYjJfMF9zdHJlYW1pbmdfY3RybCwKLQkucGlkX2ZpbHRlciAgICAgICA9IGRpYnVzYl9waWRfZmlsdGVyLAotCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKLQkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWJfZnJvbnRlbmRfYXR0YWNoLAotCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3Rob21zb25fdHVuZXJfYXR0YWNoLAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS5zdHJlYW1pbmdfY3RybCAgID0gZGlidXNiMl8wX3N0cmVhbWluZ19jdHJsLAorCQkJLnBpZF9maWx0ZXIgICAgICAgPSBkaWJ1c2JfcGlkX2ZpbHRlciwKKwkJCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gZGlidXNiX2RpYjMwMDBtYl9mcm9udGVuZF9hdHRhY2gsCisJCQkudHVuZXJfYXR0YWNoICAgICA9IGRpYnVzYl90aG9tc29uX3R1bmVyX2F0dGFjaCwKKworCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwogCQkJLnN0cmVhbSA9IHsKIAkJCQkudHlwZSA9IFVTQl9CVUxLLAotCQkuY291bnQgPSA3LAotCQkuZW5kcG9pbnQgPSAweDA2LAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gNDA5NiwKLQkJCX0KLQkJfQotCX0sCisJCQkJLmNvdW50ID0gNywKKwkJCQkuZW5kcG9pbnQgPSAweDA2LAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCiAJCQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGlidXNiX3N0YXRlKSwKIAkJfQogCX0sCkBAIC0zNjksMjIgKzM3MCwyMiBAQAogCQkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKIAkJCS5waWRfZmlsdGVyX2NvdW50ID0gMTYsCiAKLQkuc3RyZWFtaW5nX2N0cmwgICA9IGRpYnVzYjJfMF9zdHJlYW1pbmdfY3RybCwKLQkucGlkX2ZpbHRlciAgICAgICA9IGRpYnVzYl9waWRfZmlsdGVyLAotCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKLQkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWJfZnJvbnRlbmRfYXR0YWNoLAotCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3R1bmVyX3Byb2JlX2FuZF9hdHRhY2gsCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLnN0cmVhbWluZ19jdHJsICAgPSBkaWJ1c2IyXzBfc3RyZWFtaW5nX2N0cmwsCisJCQkucGlkX2ZpbHRlciAgICAgICA9IGRpYnVzYl9waWRfZmlsdGVyLAorCQkJLnBpZF9maWx0ZXJfY3RybCAgPSBkaWJ1c2JfcGlkX2ZpbHRlcl9jdHJsLAorCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBkaWJ1c2JfZGliMzAwMG1iX2Zyb250ZW5kX2F0dGFjaCwKKwkJCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX3R1bmVyX3Byb2JlX2FuZF9hdHRhY2gsCisJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCiAJCQkuc3RyZWFtID0gewogCQkJCS50eXBlID0gVVNCX0JVTEssCi0JCS5jb3VudCA9IDcsCi0JCS5lbmRwb2ludCA9IDB4MDYsCi0JCS51ID0gewotCQkJLmJ1bGsgPSB7Ci0JCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAotCQkJfQotCQl9Ci0JfSwKKwkJCQkuY291bnQgPSA3LAorCQkJCS5lbmRwb2ludCA9IDB4MDYsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJCQl9CisJCQkJfQorCQkJfSwKIAkJCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBkaWJ1c2Jfc3RhdGUpLAogCQl9CiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1jLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYy5jCmluZGV4IGEwZmQzN2UuLmU3ZWEzZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1jLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYwpAQCAtNTQsMjMgKzU0LDIzIEBACiAJCXsKIAkJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYsCiAJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDMyLAotCS5zdHJlYW1pbmdfY3RybCAgID0gZGlidXNiMl8wX3N0cmVhbWluZ19jdHJsLAotCS5waWRfZmlsdGVyICAgICAgID0gZGlidXNiX3BpZF9maWx0ZXIsCi0JLnBpZF9maWx0ZXJfY3RybCAgPSBkaWJ1c2JfcGlkX2ZpbHRlcl9jdHJsLAotCS5mcm9udGVuZF9hdHRhY2ggID0gZGlidXNiX2RpYjMwMDBtY19mcm9udGVuZF9hdHRhY2gsCi0JLnR1bmVyX2F0dGFjaCAgICAgPSBkaWJ1c2JfZGliMzAwMG1jX3R1bmVyX2F0dGFjaCwKKwkJCS5zdHJlYW1pbmdfY3RybCAgID0gZGlidXNiMl8wX3N0cmVhbWluZ19jdHJsLAorCQkJLnBpZF9maWx0ZXIgICAgICAgPSBkaWJ1c2JfcGlkX2ZpbHRlciwKKwkJCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gZGlidXNiX2RpYjMwMDBtY19mcm9udGVuZF9hdHRhY2gsCisJCQkudHVuZXJfYXR0YWNoICAgICA9IGRpYnVzYl9kaWIzMDAwbWNfdHVuZXJfYXR0YWNoLAogCiAJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwogCQkJLnN0cmVhbSA9IHsKIAkJCQkudHlwZSA9IFVTQl9CVUxLLAotCQkuY291bnQgPSA3LAotCQkuZW5kcG9pbnQgPSAweDA2LAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gNDA5NiwKLQkJCX0KLQkJfQotCX0sCisJCQkJLmNvdW50ID0gNywKKwkJCQkuZW5kcG9pbnQgPSAweDA2LAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCiAJCQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGlidXNiX3N0YXRlKSwKIAkJfQogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYwppbmRleCA4ZmIzNDM3Li40YTE5OGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMKQEAgLTI3NCwyMCArMjc0LDIwIEBACiAJLm51bV9hZGFwdGVycyA9IDEsCiAJLmFkYXB0ZXIgPSB7CiAJCXsKLQkuZnJvbnRlbmRfYXR0YWNoICA9IGRpZ2l0dl9mcm9udGVuZF9hdHRhY2gsCi0JLnR1bmVyX2F0dGFjaCAgICAgPSBkaWdpdHZfdHVuZXJfYXR0YWNoLAorCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBkaWdpdHZfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBkaWdpdHZfdHVuZXJfYXR0YWNoLAogCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwogCQkJLnN0cmVhbSA9IHsKIAkJCQkudHlwZSA9IFVTQl9CVUxLLAotCQkuY291bnQgPSA3LAotCQkuZW5kcG9pbnQgPSAweDAyLAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gNDA5NiwKLQkJCX0KLQkJfQotCX0sCisJCQkJLmNvdW50ID0gNywKKwkJCQkuZW5kcG9pbnQgPSAweDAyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCiAJCX0KIAl9LAogCS5pZGVudGlmeV9zdGF0ZSAgID0gZGlnaXR2X2lkZW50aWZ5X3N0YXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwppbmRleCBmYTQzYTQxLi43ZGJlMTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwpAQCAtMjY4LDIwICsyNjgsMjAgQEAKIAkJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwgRFZCX1VTQl9BREFQX05FRURfUElEX0ZJTFRFUklORywKIAkJCS5waWRfZmlsdGVyX2NvdW50ID0gMTUsCiAKLQkuc3RyZWFtaW5nX2N0cmwgID0gZHR0MjAwdV9zdHJlYW1pbmdfY3RybCwKLQkucGlkX2ZpbHRlciAgICAgID0gZHR0MjAwdV9waWRfZmlsdGVyLAotCS5mcm9udGVuZF9hdHRhY2ggPSBkdHQyMDB1X2Zyb250ZW5kX2F0dGFjaCwKLQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtaW5nX2N0cmwgID0gZHR0MjAwdV9zdHJlYW1pbmdfY3RybCwKKwkJCS5waWRfZmlsdGVyICAgICAgPSBkdHQyMDB1X3BpZF9maWx0ZXIsCisJCQkuZnJvbnRlbmRfYXR0YWNoID0gZHR0MjAwdV9mcm9udGVuZF9hdHRhY2gsCisJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCiAJCQkuc3RyZWFtID0gewogCQkJCS50eXBlID0gVVNCX0JVTEssCi0JCS5jb3VudCA9IDcsCi0JCS5lbmRwb2ludCA9IDB4MDIsCi0JCS51ID0gewotCQkJLmJ1bGsgPSB7Ci0JCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAotCQkJfQotCQl9Ci0JfSwKKwkJCQkuY291bnQgPSA3LAorCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJCQl9CisJCQkJfQorCQkJfSwKIAkJfQogCX0sCiAJLnBvd2VyX2N0cmwgICAgICA9IGR0dDIwMHVfcG93ZXJfY3RybCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAppbmRleCA0ZDZiMDY5Li4yOTkzODJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCkBAIC0zMyw2ICszMyw3IEBACiAjZGVmaW5lIFVTQl9WSURfVklTSU9OUExVUwkJCTB4MTNkMwogI2RlZmluZSBVU0JfVklEX1RXSU5IQU4JCQkJMHgxODIyCiAjZGVmaW5lIFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMJCTB4MDVkOAorI2RlZmluZSBVU0JfVklEX1VOSVdJTEwJCQkJMHgxNTg0CiAjZGVmaW5lIFVTQl9WSURfV0lERVZJRVcJCQkweDE0YWEKIAogLyogUHJvZHVjdCBJRHMgKi8KQEAgLTQ2LDYgKzQ3LDcgQEAKICNkZWZpbmUgVVNCX1BJRF9DT01QUk9fRFZCVTIwMDBfV0FSTQkJCTB4ZDAwMQogI2RlZmluZSBVU0JfUElEX0NPTVBST19EVkJVMjAwMF9VTktfQ09MRAkJMHgwMTBjCiAjZGVmaW5lIFVTQl9QSURfQ09NUFJPX0RWQlUyMDAwX1VOS19XQVJNCQkweDAxMGQKKyNkZWZpbmUgVVNCX1BJRF9DT01QUk9fVklERU9NQVRFX1U1MDAJCQkweDFlNzgKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fSE9PS19ERUZBVUxUCQkJMHgwMDY0CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX0hPT0tfREVGQVVMVF9SRUVOVU0JCTB4MDA2NQogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9NT0QzMDAwX0NPTEQJCQkweDBiYjgKQEAgLTUzLDcgKzU1LDkgQEAKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fTU9EMzAwMV9DT0xECQkJMHgwYmM2CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX01PRDMwMDFfV0FSTQkJCTB4MGJjNwogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9TVEs3NzAwUAkJCQkweDFlMTQKKyNkZWZpbmUgVVNCX1BJRF9ESUJDT01fU1RLNzcwMFBfUEMJCQkweDFlNzgKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fQU5DSE9SXzIxMzVfQ09MRAkJCTB4MjEzMQorI2RlZmluZSBVU0JfUElEX1VOSVdJTExfU1RLNzcwMFAJCQkweDYwMDMKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9DT0xECQkJMHgwZmEwCiAjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfV0FSTQkJCTB4MGZhMQogI2RlZmluZSBVU0JfUElEX0tXT1JMRF9WU1RSRUFNX0NPTEQJCQkweDE3ZGUKQEAgLTk3LDcgKzEwMSw5IEBACiAjZGVmaW5lIFVTQl9QSURfSEFVUFBBVUdFX05PVkFfVF81MDAJCQkweDk5NDEKICNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9UXzUwMF8yCQkJMHg5OTUwCiAjZGVmaW5lIFVTQl9QSURfSEFVUFBBVUdFX05PVkFfVF9TVElDSwkJCTB4NzA1MAotI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9WT0xBUgkJCQkweDEyMzQKKyNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9UX1NUSUNLXzIJCTB4NzA2MAorI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9WT0xBUgkJCQkweGE4MDcKKyNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVJfMgkJCTB4YjgwOAogI2RlZmluZSBVU0JfUElEX05FQlVMQV9ESUdJVFYJCQkJMHgwMjAxCiAjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfTEdEVAkJCTB4ZDgyMAogI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHMDY0Rl9DT0xECQkweGQ1MDAKQEAgLTExMCw4ICsxMTYsOCBAQAogI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RVQUxfMV9XQVJNCQkweGRiNTEKICNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzJfQ09MRAkJMHhkYjU4CiAjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF8yX1dBUk0JCTB4ZGI1OQotI2RlZmluZSBVU0JfUElEX0RJR0lUQUxOT1dfQkxVRUJJUkRfRFVBTF8xX0NPTEQJMHhkYjU0Ci0jZGVmaW5lIFVTQl9QSURfRElHSVRBTE5PV19CTFVFQklSRF9EVUFMXzFfV0FSTQkweGRiNTUKKyNkZWZpbmUgVVNCX1BJRF9ESUdJVEFMTk9XX0JMVUVCSVJEX0RVQUxfMV9DT0xECQkweGRiNTQKKyNkZWZpbmUgVVNCX1BJRF9ESUdJVEFMTk9XX0JMVUVCSVJEX0RVQUxfMV9XQVJNCQkweGRiNTUKICNkZWZpbmUgVVNCX1BJRF9NRURJT05fTUQ5NTcwMAkJCQkweDA5MzIKICNkZWZpbmUgVVNCX1BJRF9LWUVfRFZCX1RfQ09MRAkJCQkweDcwMWUKICNkZWZpbmUgVVNCX1BJRF9LWUVfRFZCX1RfV0FSTQkJCQkweDcwMWYKQEAgLTEyNSw3ICsxMzEsOSBAQAogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCMl9XQVJNCQkJMHgwYmM3CiAjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX0NPTEQJCQkweDYwMjUKICNkZWZpbmUgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfV0FSTQkJCTB4NjAyNgorI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9TVEs3NzAwUAkJMHg2ZjAwCiAjZGVmaW5lIFVTQl9QSURfR0VOUElYXzhQU0tfQ09MRAkJCTB4MDIwMAogI2RlZmluZSBVU0JfUElEX0dFTlBJWF84UFNLX1dBUk0JCQkweDAyMDEKIAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwppbmRleCA3OTRlNDQ3Li4xOWZmNTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCkBAIC05MCw3ICs5MCw5IEBACiAKIGludCBkdmJfdXNiX3JlbW90ZV9pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGk7CisJaW50IGVycjsKIAogCWlmIChkLT5wcm9wcy5yY19rZXlfbWFwID09IE5VTEwgfHwKIAkJZC0+cHJvcHMucmNfcXVlcnkgPT0gTlVMTCB8fApAQCAtMTAwLDIzICsxMDIsMjQgQEAKIAl1c2JfbWFrZV9wYXRoKGQtPnVkZXYsIGQtPnJjX3BoeXMsIHNpemVvZihkLT5yY19waHlzKSk7CiAJc3RybGNhdChkLT5yY19waHlzLCAiL2lyMCIsIHNpemVvZihkLT5yY19waHlzKSk7CiAKLQlkLT5yY19pbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWQtPnJjX2lucHV0X2RldikKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlucHV0X2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkLT5yY19pbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7Ci0JZC0+cmNfaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBjaGFyKTsKLQlkLT5yY19pbnB1dF9kZXYtPmtleWNvZGVtYXggPSBLRVlfTUFYOwotCWQtPnJjX2lucHV0X2Rldi0+bmFtZSA9ICJJUi1yZWNlaXZlciBpbnNpZGUgYW4gVVNCIERWQiByZWNlaXZlciI7Ci0JZC0+cmNfaW5wdXRfZGV2LT5waHlzID0gZC0+cmNfcGh5czsKLQl1c2JfdG9faW5wdXRfaWQoZC0+dWRldiwgJmQtPnJjX2lucHV0X2Rldi0+aWQpOwotCWQtPnJjX2lucHV0X2Rldi0+Y2Rldi5kZXYgPSAmZC0+dWRldi0+ZGV2OworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOworCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEtFWV9NQVg7CisJaW5wdXRfZGV2LT5uYW1lID0gIklSLXJlY2VpdmVyIGluc2lkZSBhbiBVU0IgRFZCIHJlY2VpdmVyIjsKKwlpbnB1dF9kZXYtPnBoeXMgPSBkLT5yY19waHlzOworCXVzYl90b19pbnB1dF9pZChkLT51ZGV2LCAmaW5wdXRfZGV2LT5pZCk7CisJaW5wdXRfZGV2LT5jZGV2LmRldiA9ICZkLT51ZGV2LT5kZXY7CiAKIAkvKiBzZXQgdGhlIGJpdHMgZm9yIHRoZSBrZXlzICovCiAJZGViX3JjKCJrZXkgbWFwIHNpemU6ICVkXG4iLCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemUpOwogCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykgewotCQlkZWJfcmMoInNldHRpbmcgYml0IGZvciBldmVudCAlZCBpdGVtICVkXG4iLGQtPnByb3BzLnJjX2tleV9tYXBbaV0uZXZlbnQsIGkpOwotCQlzZXRfYml0KGQtPnByb3BzLnJjX2tleV9tYXBbaV0uZXZlbnQsIGQtPnJjX2lucHV0X2Rldi0+a2V5Yml0KTsKKwkJZGViX3JjKCJzZXR0aW5nIGJpdCBmb3IgZXZlbnQgJWQgaXRlbSAlZFxuIiwKKwkJCWQtPnByb3BzLnJjX2tleV9tYXBbaV0uZXZlbnQsIGkpOworCQlzZXRfYml0KGQtPnByb3BzLnJjX2tleV9tYXBbaV0uZXZlbnQsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAl9CiAKIAkvKiBTdGFydCB0aGUgcmVtb3RlLWNvbnRyb2wgcG9sbGluZy4gKi8KQEAgLTEyNCwxMCArMTI3LDE2IEBACiAJCWQtPnByb3BzLnJjX2ludGVydmFsID0gMTAwOyAvKiBkZWZhdWx0ICovCiAKIAkvKiBzZXR0aW5nIHRoZXNlIHR3byB2YWx1ZXMgdG8gbm9uLXplcm8sIHdlIGhhdmUgdG8gbWFuYWdlIGtleSByZXBlYXRzICovCi0JZC0+cmNfaW5wdXRfZGV2LT5yZXBbUkVQX1BFUklPRF0gPSBkLT5wcm9wcy5yY19pbnRlcnZhbDsKLQlkLT5yY19pbnB1dF9kZXYtPnJlcFtSRVBfREVMQVldICA9IGQtPnByb3BzLnJjX2ludGVydmFsICsgMTUwOworCWlucHV0X2Rldi0+cmVwW1JFUF9QRVJJT0RdID0gZC0+cHJvcHMucmNfaW50ZXJ2YWw7CisJaW5wdXRfZGV2LT5yZXBbUkVQX0RFTEFZXSAgPSBkLT5wcm9wcy5yY19pbnRlcnZhbCArIDE1MDsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShkLT5yY19pbnB1dF9kZXYpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWlmIChlcnIpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlkLT5yY19pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CiAKIAlJTklUX0RFTEFZRURfV09SSygmZC0+cmNfcXVlcnlfd29yaywgZHZiX3VzYl9yZWFkX3JlbW90ZV9jb250cm9sKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2suYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmMKaW5kZXggNzM3NWViMi4uNTE4ZDY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2suYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay5jCkBAIC0xOTQsMTkgKzE5NCwxOSBAQAogCS5udW1fYWRhcHRlcnMgPSAxLAogCS5hZGFwdGVyID0gewogCQl7Ci0JLnN0cmVhbWluZ19jdHJsICAgPSBncDhwc2tfc3RyZWFtaW5nX2N0cmwsCi0JLmZyb250ZW5kX2F0dGFjaCAgPSBncDhwc2tfZnJvbnRlbmRfYXR0YWNoLAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS5zdHJlYW1pbmdfY3RybCAgID0gZ3A4cHNrX3N0cmVhbWluZ19jdHJsLAorCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBncDhwc2tfZnJvbnRlbmRfYXR0YWNoLAorCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwogCQkJLnN0cmVhbSA9IHsKIAkJCQkudHlwZSA9IFVTQl9CVUxLLAotCQkuY291bnQgPSA3LAotCQkuZW5kcG9pbnQgPSAweDgyLAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gODE5MiwKLQkJCX0KLQkJfQotCX0sCisJCQkJLmNvdW50ID0gNywKKwkJCQkuZW5kcG9pbnQgPSAweDgyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gODE5MiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCiAJCX0KIAl9LAogCS5wb3dlcl9jdHJsICAgICAgID0gZ3A4cHNrX3Bvd2VyX2N0cmwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMKaW5kZXggYTU4ODc0Yy4uYmFkYzQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivbm92YS10LXVzYjIuYwpAQCAtOTAsOSArOTAsMTEgQEAKIAkJCWRlYl9yYygicmF3IGtleSBjb2RlIDB4JTAyeCwgMHglMDJ4LCAweCUwMnggdG8gYzogJTAyeCBkOiAlMDJ4IHRvZ2dsZTogJWRcbiIsa2V5WzFdLGtleVsyXSxrZXlbM10sY3VzdG9tLGRhdGEsdG9nZ2xlKTsKIAogCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGF1cHBfcmNfa2V5cyk7IGkrKykgewotCQkJCWRlYl9yYygiYzogJXgsIGQ6ICV4XG4iLGhhdXBwX3JjX2tleXNbaV0uZGF0YSxoYXVwcF9yY19rZXlzW2ldLmN1c3RvbSk7CiAJCQkJaWYgKGhhdXBwX3JjX2tleXNbaV0uZGF0YSA9PSBkYXRhICYmCiAJCQkJCWhhdXBwX3JjX2tleXNbaV0uY3VzdG9tID09IGN1c3RvbSkgeworCisJCQkJCWRlYl9yYygiYzogJXgsIGQ6ICV4XG4iLGhhdXBwX3JjX2tleXNbaV0uZGF0YSxoYXVwcF9yY19rZXlzW2ldLmN1c3RvbSk7CisKIAkJCQkJKmV2ZW50ID0gaGF1cHBfcmNfa2V5c1tpXS5ldmVudDsKIAkJCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwogCQkJCQlpZiAoc3QtPm9sZF90b2dnbGUgPT0gdG9nZ2xlKSB7CkBAIC0xNjMsMjMgKzE2NSwyMyBAQAogCQkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKIAkJCS5waWRfZmlsdGVyX2NvdW50ID0gMzIsCiAKLQkuc3RyZWFtaW5nX2N0cmwgICA9IGRpYnVzYjJfMF9zdHJlYW1pbmdfY3RybCwKLQkucGlkX2ZpbHRlciAgICAgICA9IGRpYnVzYl9waWRfZmlsdGVyLAotCS5waWRfZmlsdGVyX2N0cmwgID0gZGlidXNiX3BpZF9maWx0ZXJfY3RybCwKLQkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWNfZnJvbnRlbmRfYXR0YWNoLAotCS50dW5lcl9hdHRhY2ggICAgID0gZGlidXNiX2RpYjMwMDBtY190dW5lcl9hdHRhY2gsCisJCQkuc3RyZWFtaW5nX2N0cmwgICA9IGRpYnVzYjJfMF9zdHJlYW1pbmdfY3RybCwKKwkJCS5waWRfZmlsdGVyICAgICAgID0gZGlidXNiX3BpZF9maWx0ZXIsCisJCQkucGlkX2ZpbHRlcl9jdHJsICA9IGRpYnVzYl9waWRfZmlsdGVyX2N0cmwsCisJCQkuZnJvbnRlbmRfYXR0YWNoICA9IGRpYnVzYl9kaWIzMDAwbWNfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBkaWJ1c2JfZGliMzAwMG1jX3R1bmVyX2F0dGFjaCwKIAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KLQkJCS5zdHJlYW0gPSB7Ci0JCQkJLnR5cGUgPSBVU0JfQlVMSywKLQkJLmNvdW50ID0gNywKLQkJLmVuZHBvaW50ID0gMHgwNiwKLQkJLnUgPSB7Ci0JCQkuYnVsayA9IHsKLQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCi0JCQl9Ci0JCX0KLQl9LAorCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJCQkuc3RyZWFtID0geworCQkJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCQkuY291bnQgPSA3LAorCQkJCS5lbmRwb2ludCA9IDB4MDYsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJCQl9CisJCQkJfQorCQkJfSwKIAogCQkJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGRpYnVzYl9zdGF0ZSksCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdHR1c2IyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3R0dXNiMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDI5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3R0dXNiMi5jCkBAIC0wLDAgKzEsMjcwIEBACisvKiBEVkIgVVNCIGNvbXBsaWFudCBsaW51eCBkcml2ZXIgZm9yIFRlY2hub3RyZW5kIERWQiBVU0IgYm94ZXMgYW5kIGNsb25lcworICogKGUuZy4gUGlubmFjbGUgNDAwZSBEVkItUyBVU0IyLjApLgorICoKKyAqIFRoZSBQaW5uYWNsZSA0MDBlIHVzZXMgdGhlIHNhbWUgcHJvdG9jb2wgYXMgdGhlIFRlY2hub3RyZW5kIFVTQjEuMSBib3hlcy4KKyAqCisgKiBUREE4MjYzICsgVERBMTAwODYKKyAqCisgKiBJMkMgYWRkcmVzc2VzOgorICogMHgwOCAtIExOQlAyMVBEICAgLSBMTkIgcG93ZXIgc3VwcGx5CisgKiAweDBlIC0gVERBMTAwODYgICAtIERlbW9kdWxhdG9yCisgKiAweDUwIC0gRlgyIGVlcHJvbQorICogMHg2MCAtIFREQTgyNjMgICAgLSBUdW5lcgorICogMHg3OCA/Pz8KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgSG9sZ2VyIFdhZWNodGxlciA8aG9sZ2VyQGNvbnZlcmdlbmNlLmRlPgorICogQ29weXJpZ2h0IChjKSAyMDAzIEZlbGl4IERvbWtlIDx0bWJpbmNAZWxpdGVkdmIubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA1LTYgUGF0cmljayBCb2V0dGNoZXIgPHBiQGxpbnV4dHYub3JnPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKgl1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICoJU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqIHNlZSBEb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERWQl9VU0JfTE9HX1BSRUZJWCAidHR1c2IyIgorI2luY2x1ZGUgImR2Yi11c2IuaCIKKworI2luY2x1ZGUgInR0dXNiMi5oIgorCisjaW5jbHVkZSAidGRhODI2eC5oIgorI2luY2x1ZGUgInRkYTEwMDg2LmgiCisjaW5jbHVkZSAibG5icDIxLmgiCisKKy8qIGRlYnVnICovCitzdGF0aWMgaW50IGR2Yl91c2JfdHR1c2IyX2RlYnVnOworI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl90dHVzYjJfZGVidWcsMHgwMSxhcmdzKQorbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGR2Yl91c2JfdHR1c2IyX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwgKDE9aW5mbyAob3ItYWJsZSkpLiIgRFZCX1VTQl9ERUJVR19TVEFUVVMpOworCitzdHJ1Y3QgdHR1c2IyX3N0YXRlIHsKKwl1OCBpZDsKK307CisKK3N0YXRpYyBpbnQgdHR1c2IyX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IGNtZCwKKwkJdTggKndidWYsIGludCB3bGVuLCB1OCAqcmJ1ZiwgaW50IHJsZW4pCit7CisJc3RydWN0IHR0dXNiMl9zdGF0ZSAqc3QgPSBkLT5wcml2OworCXU4IHNbd2xlbis0XSxyWzY0XSA9IHsgMCB9OworCWludCByZXQgPSAwOworCisJbWVtc2V0KHMsMCx3bGVuKzQpOworCisJc1swXSA9IDB4YWE7CisJc1sxXSA9ICsrc3QtPmlkOworCXNbMl0gPSBjbWQ7CisJc1szXSA9IHdsZW47CisJbWVtY3B5KCZzWzRdLHdidWYsd2xlbik7CisKKwlyZXQgPSBkdmJfdXNiX2dlbmVyaWNfcncoZCwgcywgd2xlbis0LCByLCA2NCwgMCk7CisKKwlpZiAocmV0ICAhPSAwIHx8CisJCXJbMF0gIT0gMHg1NSB8fAorCQlyWzFdICE9IHNbMV0gfHwKKwkJclsyXSAhPSBjbWQgfHwKKwkJKHJsZW4gPiAwICYmIHJbM10gIT0gcmxlbikpIHsKKwkJd2FybigidGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGFuIGVycm9yIGR1cmluZyBjb250cm9sIG1lc3NhZ2UgdHJhbnNmZXIuIChybGVuID0gJWQsIHdhcyAlZCkiLHJsZW4sclszXSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChybGVuID4gMCkKKwkJbWVtY3B5KHJidWYsICZyWzRdLCBybGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR0dXNiMl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsc3RydWN0IGkyY19tc2cgbXNnW10saW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCXN0YXRpYyB1OCBvYnVmWzYwXSwgaWJ1Zls2MF07CisJaW50IGkscmVhZDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWlmIChudW0gPiAyKQorCQl3YXJuKCJtb3JlIHRoYW4gMiBpMmMgbWVzc2FnZXMgYXQgYSB0aW1lIGlzIG5vdCBoYW5kbGVkIHlldC4gVE9ETy4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlyZWFkID0gaSsxIDwgbnVtICYmIChtc2dbaSsxXS5mbGFncyAmIEkyQ19NX1JEKTsKKworCQlvYnVmWzBdID0gKG1zZ1tpXS5hZGRyIDw8IDEpIHwgcmVhZDsKKwkJb2J1ZlsxXSA9IG1zZ1tpXS5sZW47CisKKwkJLyogcmVhZCByZXF1ZXN0ICovCisJCWlmIChyZWFkKQorCQkJb2J1ZlsyXSA9IG1zZ1tpKzFdLmxlbjsKKwkJZWxzZQorCQkJb2J1ZlsyXSA9IDA7CisKKwkJbWVtY3B5KCZvYnVmWzNdLG1zZ1tpXS5idWYsbXNnW2ldLmxlbik7CisKKwkJaWYgKHR0dXNiMl9tc2coZCwgQ01EX0kyQ19YRkVSLCBvYnVmLCBtc2dbaV0ubGVuKzMsIGlidWYsIG9idWZbMl0gKyAzKSA8IDApIHsKKwkJCWVycigiaTJjIHRyYW5zZmVyIGZhaWxlZC4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlYWQpIHsKKwkJCW1lbWNweShtc2dbaSsxXS5idWYsJmlidWZbM10sbXNnW2krMV0ubGVuKTsKKwkJCWkrKzsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHUzMiB0dHVzYjJfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19JMkM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSB0dHVzYjJfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSB0dHVzYjJfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSB0dHVzYjJfaTJjX2Z1bmMsCit9OworCisvKiBDYWxsYmFja3MgZm9yIERWQiBVU0IgKi8KK3N0YXRpYyBpbnQgdHR1c2IyX2lkZW50aWZ5X3N0YXRlIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0CisJCWR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnByb3BzLCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKipkZXNjLAorCQlpbnQgKmNvbGQpCit7CisJKmNvbGQgPSB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIgPT0gMCAmJiB1ZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0ID09IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHR1c2IyX3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCit7CisJdTggYiA9IG9ub2ZmOworCXR0dXNiMl9tc2coZCwgQ01EX1BPV0VSLCAmYiwgMCwgTlVMTCwgMCk7CisJcmV0dXJuIHR0dXNiMl9tc2coZCwgQ01EX1BPV0VSLCAmYiwgMSwgTlVMTCwgMCk7Cit9CisKKworc3RhdGljIHN0cnVjdCB0ZGExMDA4Nl9jb25maWcgdGRhMTAwODZfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwZSwKKwkuaW52ZXJ0ID0gMCwKK307CisKK3N0YXRpYyBpbnQgdHR1c2IyX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShhZGFwLT5kZXYtPnVkZXYsMCwzKSA8IDApCisJCWVycigic2V0IGludGVyZmFjZSB0byBhbHRzPTMgZmFpbGVkIik7CisKKwlpZiAoKGFkYXAtPmZlID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZ0ZGExMDA4Nl9jb25maWcsICZhZGFwLT5kZXYtPmkyY19hZGFwKSkgPT0gTlVMTCkgeworCQlkZWJfaW5mbygiVERBMTAwODYgYXR0YWNoIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR0dXNiMl90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgYWRhcC0+ZmUsIDB4NjAsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAwKSA9PSBOVUxMKSB7CisJCWRlYl9pbmZvKCJUREE4MjYzIGF0dGFjaCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBhZGFwLT5mZSwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDAsIDApID09IE5VTEwpIHsKKwkJZGViX2luZm8oIkxOQlAyMSBhdHRhY2ggZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAwOworfQorCisvKiBEVkIgVVNCIERyaXZlciBzdHVmZiAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHR0dXNiMl9wcm9wZXJ0aWVzOworCitzdGF0aWMgaW50IHR0dXNiMl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBkdmJfdXNiX2RldmljZV9pbml0KGludGYsJnR0dXNiMl9wcm9wZXJ0aWVzLFRISVNfTU9EVUxFLE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdHR1c2IyX3RhYmxlIFtdID0geworCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9QSU5OQUNMRSwgVVNCX1BJRF9QQ1RWXzQwMEUpIH0sCisJCXt9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdHR1c2IyX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHR0dXNiMl9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKworCS51c2JfY3RybCA9IENZUFJFU1NfRlgyLAorCS5maXJtd2FyZSA9ICJkdmItdXNiLXBjdHYtNDAwZS0wMS5mdyIsCisKKwkuc2l6ZV9vZl9wcml2ID0gc2l6ZW9mKHN0cnVjdCB0dHVzYjJfc3RhdGUpLAorCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5zdHJlYW1pbmdfY3RybCAgID0gTlVMTCwgLy8gdHR1c2IyX3N0cmVhbWluZ19jdHJsLAorCisJCQkuZnJvbnRlbmRfYXR0YWNoICA9IHR0dXNiMl9mcm9udGVuZF9hdHRhY2gsCisJCQkudHVuZXJfYXR0YWNoICAgICA9IHR0dXNiMl90dW5lcl9hdHRhY2gsCisKKwkJCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS5zdHJlYW0gPSB7CisJCQkJLnR5cGUgPSBVU0JfSVNPQywKKwkJCQkuY291bnQgPSA1LAorCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJLnUgPSB7CisJCQkJCS5pc29jID0geworCQkJCQkJLmZyYW1lc3BlcnVyYiA9IDQsCisJCQkJCQkuZnJhbWVzaXplID0gOTQwLAorCQkJCQkJLmludGVydmFsID0gMSwKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0sCisKKwkucG93ZXJfY3RybCAgICAgICA9IHR0dXNiMl9wb3dlcl9jdHJsLAorCS5pZGVudGlmeV9zdGF0ZSAgID0gdHR1c2IyX2lkZW50aWZ5X3N0YXRlLAorCisJLmkyY19hbGdvICAgICAgICAgPSAmdHR1c2IyX2kyY19hbGdvLAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeyAgICJQaW5uYWNsZSA0MDBlIERWQi1TIFVTQjIuMCIsCisJCQl7ICZ0dHVzYjJfdGFibGVbMF0sIE5VTEwgfSwKKwkJCXsgTlVMTCB9LAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB0dHVzYjJfZHJpdmVyID0geworCS5uYW1lCQk9ICJkdmJfdXNiX3R0dXNiMiIsCisJLnByb2JlCQk9IHR0dXNiMl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCisJLmlkX3RhYmxlCT0gdHR1c2IyX3RhYmxlLAorfTsKKworLyogbW9kdWxlIHN0dWZmICovCitzdGF0aWMgaW50IF9faW5pdCB0dHVzYjJfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCWlmICgocmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ0dHVzYjJfZHJpdmVyKSkpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0dHVzYjJfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmdHR1c2IyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0ICh0dHVzYjJfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQgKHR0dXNiMl9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlBhdHJpY2sgQm9ldHRjaGVyIDxwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFBpbm5hY2xlIFBDVFYgNDAwZSBEVkItUyBVU0IyLjAiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdHR1c2IyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3R0dXNiMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYTYzYWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3R0dXNiMi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qIERWQiBVU0IgY29tcGxpYW50IGxpbnV4IGRyaXZlciBmb3IgVGVjaG5vdHJlbmQgRFZCIFVTQiBib3hlcyBhbmQgY2xvbmVzCisgKiAoZS5nLiBQaW5uYWNsZSA0MDBlIERWQi1TIFVTQjIuMCkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIEhvbGdlciBXYWVjaHRsZXIgPGhvbGdlckBjb252ZXJnZW5jZS5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBGZWxpeCBEb21rZSA8dG1iaW5jQGVsaXRlZHZiLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwNS02IFBhdHJpY2sgQm9ldHRjaGVyIDxwYkBsaW51eHR2LmRlPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKgl1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICoJU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqIHNlZSBEb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICovCisjaWZuZGVmIF9EVkJfVVNCX1RUVVNCMl9IXworI2RlZmluZSBfRFZCX1VTQl9UVFVTQjJfSF8KKworLyogVFRVU0IgcHJvdG9jb2wKKyAqCisgKiBhbHdheXMgdG8gbWVzc2FnZXMgKG91dC9pbikKKyAqIG91dCBtZXNzYWdlOgorICogMHhhYSA8aWQ+IDxjbWRieXRlPiA8ZGF0YWxlbj4gPGRhdGEuLi4+CisgKgorICogaW4gbWVzc2FnZSAoY29tcGxldGUgYmxvY2sgaXMgYWx3YXlzIDB4NDAgYnl0ZXMgbG9uZykKKyAqIDB4NTUgPGlkPiA8Y21kYnl0ZT4gPGRhdGFsZW4+IDxkYXRhLi4uPgorICoKKyAqIGlkIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHRyYW5zYWN0aW9uCisgKi8KKworI2RlZmluZSBDTURfRFNQX0RPV05MT0FEICAgIDB4MTMKKy8qIG91dCBkYXRhOiA8Ynl0ZT5bMjhdCisgKiBsYXN0IGJsb2NrIG11c3QgYmUgZW1wdHkgKi8KKworI2RlZmluZSBDTURfRFNQX0JPT1QgICAgICAgIDB4MTQKKy8qIG91dCBkYXRhOiBub3RoaW5nICovCisKKyNkZWZpbmUgQ01EX1BPV0VSICAgICAgICAgICAweDE1CisvKiBvdXQgZGF0YTogPG9uPTEvb2ZmPTA+ICovCisKKyNkZWZpbmUgQ01EX0xOQiAgICAgICAgICAgICAweDE2CisvKiBvdXQgZGF0YTogPHBvd2VyPTE+IDwxOFY9MCwxM1Y9MT4gPHRvbmU+IDw/Pz0xPiA8Pz89MT4gKi8KKworI2RlZmluZSBDTURfR0VUX1ZFUlNJT04gICAgIDB4MTcKKy8qIGluICBkYXRhOiA8dmVyc2lvbl9ieXRlPls1XSAqLworCisjZGVmaW5lIENNRF9ESVNFUUMgICAgICAgICAgMHgxOAorLyogb3V0IGRhdGE6IDxtYXN0ZXI9MHhmZi9idXJzdD0/Pz4gPGNtZGxlbj4gPGNtZGJ5dGVzPltjbWRsZW5dICovCisKKyNkZWZpbmUgQ01EX1BJRF9FTkFCTEUgICAgICAweDIyCisvKiBvdXQgZGF0YTogPGluZGV4PiA8dHlwZTogdHM9MS9zZWM9Mj4gPHBpZCBtc2I+IDxwaWQgbHNiPiAqLworCisjZGVmaW5lIENNRF9QSURfRElTQUJMRSAgICAgMHgyMworLyogb3V0IGRhdGE6IDxpbmRleD4gKi8KKworI2RlZmluZSBDTURfRklMVEVSX0VOQUJMRSAgIDB4MjQKKy8qIG91dCBkYXRhOiA8aW5kZXg+IDxwaWRfaWR4PiA8ZmlsdGVyPlsxMl0gPG1hc2s+WzEyXSAqLworCisjZGVmaW5lIENNRF9GSUxURVJfRElTQUJMRSAgMHgyNQorLyogb3V0IGRhdGE6IDxpbmRleD4gKi8KKworI2RlZmluZSBDTURfR0VUX0RTUF9WRVJTSU9OIDB4MjYKKy8qIGluICBkYXRhOiA8dmVyc2lvbl9ieXRlPlsyOF0gKi8KKworI2RlZmluZSBDTURfSTJDX1hGRVIgICAgICAgIDB4MzEKKy8qIG91dCBkYXRhOiA8YWRkciA8PCAxPiA8c25kbGVuPiA8cmN2bGVuPiA8ZGF0YT5bc25kbGVuXQorICogaW4gIGRhdGE6IDxhZGRyIDw8IDE+IDxzbmRsZW4+IDxyY3ZsZW4+IDxkYXRhPltyY3ZsZW5dICovCisKKyNkZWZpbmUgQ01EX0kyQ19CSVRSQVRFICAgICAweDMyCisvKiBvdXQgZGF0YTogPGRlZmF1bHQ9MD4gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3VtdC0wMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdW10LTAxMC5jCmluZGV4IGY5OTQxZWEuLmY3N2I0OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdW10LTAxMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdW10LTAxMC5jCkBAIC05OSwyMSArOTksMjEgQEAKIAkubnVtX2FkYXB0ZXJzID0gMSwKIAkuYWRhcHRlciA9IHsKIAkJewotCS5zdHJlYW1pbmdfY3RybCAgID0gZGlidXNiMl8wX3N0cmVhbWluZ19jdHJsLAotCS5mcm9udGVuZF9hdHRhY2ggID0gdW10X210MzUyX2Zyb250ZW5kX2F0dGFjaCwKLQkudHVuZXJfYXR0YWNoICAgICA9IHVtdF90dW5lcl9hdHRhY2gsCisJCQkuc3RyZWFtaW5nX2N0cmwgICA9IGRpYnVzYjJfMF9zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gdW10X210MzUyX2Zyb250ZW5kX2F0dGFjaCwKKwkJCS50dW5lcl9hdHRhY2ggICAgID0gdW10X3R1bmVyX2F0dGFjaCwKIAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KIAkJCS5zdHJlYW0gPSB7CiAJCQkJLnR5cGUgPSBVU0JfQlVMSywKLQkJLmNvdW50ID0gMjAsCi0JCS5lbmRwb2ludCA9IDB4MDYsCi0JCS51ID0gewotCQkJLmJ1bGsgPSB7Ci0JCQkJLmJ1ZmZlcnNpemUgPSA1MTIsCi0JCQl9Ci0JCX0KLQl9LAorCQkJCS5jb3VudCA9IDIwLAorCQkJCS5lbmRwb2ludCA9IDB4MDYsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA1MTIsCisJCQkJCX0KKwkJCQl9CisJCQl9LAogCiAJCQkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgZGlidXNiX3N0YXRlKSwKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmMKaW5kZXggMDJiZDYxYS4uMTY1MzNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC5jCkBAIC0yNzUsMjIgKzI3NSwyMiBAQAogCQkJLmNhcHMgICAgICAgICAgICAgPSBEVkJfVVNCX0FEQVBfUkVDRUlWRVNfMjA0X0JZVEVfVFMsCiAKIAkJCS5zdHJlYW1pbmdfY3RybCAgID0gdnA3MDJ4X3N0cmVhbWluZ19jdHJsLAotCS5mcm9udGVuZF9hdHRhY2ggID0gdnA3MDJ4X2Zyb250ZW5kX2F0dGFjaCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gdnA3MDJ4X2Zyb250ZW5kX2F0dGFjaCwKIAotCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KIAkJCS5zdHJlYW0gPSB7CiAJCQkJLnR5cGUgPSBVU0JfQlVMSywKIAkJCQkuY291bnQgPSAxMCwKLQkJLmVuZHBvaW50ID0gMHgwMiwKLQkJLnUgPSB7Ci0JCQkuYnVsayA9IHsKLQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCi0JCQl9Ci0JCX0KLQl9LAorCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJCQl9CisJCQkJfQorCQkJfSwKIAkJCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCB2cDcwMnhfc3RhdGUpLAogCQl9Ci0JCX0sCisJfSwKIAkucmVhZF9tYWNfYWRkcmVzcyA9IHZwNzAyeF9yZWFkX21hY19hZGRyLAogCiAJLnJjX2tleV9tYXAgICAgICAgPSB2cDcwMnhfcmNfa2V5cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jCmluZGV4IGI0Y2YwMDIuLjY5YTQ2YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYwpAQCAtMTI1LDcgKzEyNSwyNSBAQAogCXsgMHgwMCwgMHgwMCwgS0VZX1RBQiB9LCAvKiBUYWIgKi8KIAl7IDB4MDAsIDB4NDgsIEtFWV9JTkZPIH0sIC8qIFByZXZpZXcgKi8KIAl7IDB4MDAsIDB4MDQsIEtFWV9MSVNUIH0sIC8qIFJlY29yZExpc3QgKi8KLQl7IDB4MDAsIDB4MGYsIEtFWV9URVhUIH0gLyogVGVsZXRleHQgKi8KKwl7IDB4MDAsIDB4MGYsIEtFWV9URVhUIH0sIC8qIFRlbGV0ZXh0ICovCisJeyAweDAwLCAweDQxLCBLRVlfUFJFVklPVVNTT05HIH0sCisJeyAweDAwLCAweDQyLCBLRVlfTkVYVFNPTkcgfSwKKwl7IDB4MDAsIDB4NGIsIEtFWV9VUCB9LAorCXsgMHgwMCwgMHg1MSwgS0VZX0RPV04gfSwKKwl7IDB4MDAsIDB4NGUsIEtFWV9MRUZUIH0sCisJeyAweDAwLCAweDUyLCBLRVlfUklHSFQgfSwKKwl7IDB4MDAsIDB4NGYsIEtFWV9FTlRFUiB9LAorCXsgMHgwMCwgMHgxMywgS0VZX0NBTkNFTCB9LAorCXsgMHgwMCwgMHg0YSwgS0VZX0NMRUFSIH0sCisJeyAweDAwLCAweDU0LCBLRVlfUFJJTlQgfSwgLyogQ2FwdHVyZSAqLworCXsgMHgwMCwgMHg0MywgS0VZX1NVQlRJVExFIH0sIC8qIFN1YnRpdGxlL0NDICovCisJeyAweDAwLCAweDA4LCBLRVlfVklERU8gfSwgLyogQS9WICovCisJeyAweDAwLCAweDA3LCBLRVlfU0xFRVAgfSwgLyogSGliZXJuYXRlICovCisJeyAweDAwLCAweDQ1LCBLRVlfWk9PTSB9LCAvKiBab29tKyAqLworCXsgMHgwMCwgMHgxOCwgS0VZX1JFRH0sCisJeyAweDAwLCAweDUzLCBLRVlfR1JFRU59LAorCXsgMHgwMCwgMHg1ZSwgS0VZX1lFTExPV30sCisJeyAweDAwLCAweDVmLCBLRVlfQkxVRX0KIH07CiAKIHN0YXRpYyBpbnQgdnA3MDQ1X3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKQEAgLTIxNywxOCArMjM1LDE4IEBACiAJLm51bV9hZGFwdGVycyA9IDEsCiAJLmFkYXB0ZXIgPSB7CiAJCXsKLQkuZnJvbnRlbmRfYXR0YWNoICA9IHZwNzA0NV9mcm9udGVuZF9hdHRhY2gsCi0JLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLmZyb250ZW5kX2F0dGFjaCAgPSB2cDcwNDVfZnJvbnRlbmRfYXR0YWNoLAorCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLwogCQkJLnN0cmVhbSA9IHsKIAkJCQkudHlwZSA9IFVTQl9CVUxLLAotCQkuY291bnQgPSA3LAotCQkuZW5kcG9pbnQgPSAweDAyLAotCQkudSA9IHsKLQkJCS5idWxrID0gewotCQkJCS5idWZmZXJzaXplID0gNDA5NiwKLQkJCX0KLQkJfQotCX0sCisJCQkJLmNvdW50ID0gNywKKwkJCQkuZW5kcG9pbnQgPSAweDAyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCiAJCX0KIAl9LAogCS5wb3dlcl9jdHJsICAgICAgID0gdnA3MDQ1X3Bvd2VyX2N0cmwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IGFlYmI4ZDZmLi5hZjMxNGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwpAQCAtMTcyLDYgKzE3MiwyMiBAQAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIERlc2lnbmVkIGZvciBtb2JpbGUgdXNhZ2UuIFNheSBZIHdoZW4geW91IHdhbnQKIAkgIHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9ESUI3MDAwTQorCXRyaXN0YXRlICJEaUJjb20gNzAwME1BL01CL1BBL1BCL01DIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gRGVzaWduZWQgZm9yIG1vYmlsZSB1c2FnZS4gU2F5IFkgd2hlbiB5b3Ugd2FudAorCSAgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCitjb25maWcgRFZCX0RJQjcwMDBQCisJdHJpc3RhdGUgIkRpQmNvbSA3MDAwUEMiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgRFZCLVQgdHVuZXIgbW9kdWxlLiBEZXNpZ25lZCBmb3IgbW9iaWxlIHVzYWdlLiBTYXkgWSB3aGVuIHlvdSB3YW50CisJICB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbW1lbnQgIkRWQi1DIChjYWJsZSkgZnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIApAQCAtMjgxLDYgKzI5NywxNCBAQAogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiBJRiB0dW5lciBNVDIwNjAgZnJvbSBNaWNyb3R1bmUuCiAKK2NvbmZpZyBEVkJfVFVORVJfTEdIMDZYRgorCXRyaXN0YXRlICJMRyBURFZTLUgwNnhGIEFUU0MgdHVuZXIiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlzZWxlY3QgRFZCX1BMTAorCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBkcml2ZXIgZm9yIHRoZSBMRyBURFZTLUgwNnhGIEFUU0MgdHVuZXIgZmFtaWx5LgorCiBjb21tZW50ICJNaXNjZWxsYW5lb3VzIGRldmljZXMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKaW5kZXggZGNlOWNmMC4uM2ZhNmU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQpAQCAtMTMsNiArMTMsOCBAQAogb2JqLSQoQ09ORklHX0RWQl9MNjQ3ODEpICs9IGw2NDc4MS5vCiBvYmotJChDT05GSUdfRFZCX0RJQjMwMDBNQikgKz0gZGliMzAwMG1iLm8KIG9iai0kKENPTkZJR19EVkJfRElCMzAwME1DKSArPSBkaWIzMDAwbWMubyBkaWJ4MDAwX2NvbW1vbi5vCitvYmotJChDT05GSUdfRFZCX0RJQjcwMDBNKSArPSBkaWI3MDAwbS5vIGRpYngwMDBfY29tbW9uLm8KK29iai0kKENPTkZJR19EVkJfRElCNzAwMFApICs9IGRpYjcwMDBwLm8gZGlieDAwMF9jb21tb24ubwogb2JqLSQoQ09ORklHX0RWQl9NVDMxMikgKz0gbXQzMTIubwogb2JqLSQoQ09ORklHX0RWQl9WRVMxODIwKSArPSB2ZXMxODIwLm8KIG9iai0kKENPTkZJR19EVkJfVkVTMVg5MykgKz0gdmVzMXg5My5vCkBAIC0zNywzICszOSw0IEBACiBvYmotJChDT05GSUdfRFZCX1REQTgyNlgpICs9IHRkYTgyNngubwogb2JqLSQoQ09ORklHX0RWQl9UVU5FUl9NVDIwNjApICs9IG10MjA2MC5vCiBvYmotJChDT05GSUdfRFZCX1RVQTYxMDApICs9IHR1YTYxMDAubworb2JqLSQoQ09ORklHX0RWQl9UVU5FUl9MR0gwNlhGKSArPSBsZ2gwNnhmLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYwppbmRleCAzNTYxYTc3Li4yM2FhNzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5jCkBAIC01MTEsMTYgKzUxMSwxMSBAQAogCiAKIAkvKiBhIGNoYW5uZWwgZm9yIGF1dG9zZWFyY2ggKi8KLQlyZWcgPSAwOwotCWlmIChjaGFuLT5uZmZ0ID09IC0xICYmIGNoYW4tPmd1YXJkID09IC0xKSByZWcgPSA3OwotCWlmIChjaGFuLT5uZmZ0ID09IC0xICYmIGNoYW4tPmd1YXJkICE9IC0xKSByZWcgPSAyOwotCWlmIChjaGFuLT5uZmZ0ICE9IC0xICYmIGNoYW4tPmd1YXJkID09IC0xKSByZWcgPSAzOwotCiAJZmNoYW4ubmZmdCA9IDE7IGZjaGFuLmd1YXJkID0gMDsgZmNoYW4ubnFhbSA9IDI7CiAJZmNoYW4udml0X2FscGhhID0gMTsgZmNoYW4udml0X2NvZGVfcmF0ZV9ocCA9IDI7IGZjaGFuLnZpdF9jb2RlX3JhdGVfbHAgPSAyOwogCWZjaGFuLnZpdF9ocmNoID0gMDsgZmNoYW4udml0X3NlbGVjdF9ocCA9IDE7CiAKLQlkaWIzMDAwbWNfc2V0X2NoYW5uZWxfY2ZnKHN0YXRlLCAmZmNoYW4sIHJlZyk7CisJZGliMzAwMG1jX3NldF9jaGFubmVsX2NmZyhzdGF0ZSwgJmZjaGFuLCAxMSk7CiAKIAlyZWcgPSBkaWIzMDAwbWNfcmVhZF93b3JkKHN0YXRlLCAwKTsKIAlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMCwgcmVnIHwgKDEgPDwgOCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWQ0MGFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmMKQEAgLTAsMCArMSwxMTkxIEBACisvKgorICogTGludXgtRFZCIERyaXZlciBmb3IgRGlCY29tJ3MgRGlCNzAwME0gYW5kCisgKiAgICAgICAgICAgICAgZmlyc3QgZ2VuZXJhdGlvbiBEaUI3MDAwUC1kZW1vZHVsYXRvci1mYW1pbHkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTYgRGlCY29tIChodHRwOi8vd3d3LmRpYmNvbS5mci8pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisjaW5jbHVkZSAiZGliNzAwMG0uaCIKKworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJ0dXJuIG9uIGRlYnVnZ2luZyAoZGVmYXVsdDogMCkiKTsKKworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50ayhLRVJOX0RFQlVHICJEaUI3MDAwTToiKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCisKK3N0cnVjdCBkaWI3MDAwbV9zdGF0ZSB7CisJc3RydWN0IGR2Yl9mcm9udGVuZCBkZW1vZDsKKyAgICBzdHJ1Y3QgZGliNzAwMG1fY29uZmlnIGNmZzsKKworCXU4IGkyY19hZGRyOworCXN0cnVjdCBpMmNfYWRhcHRlciAgICppMmNfYWRhcDsKKworCXN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgaTJjX21hc3RlcjsKKworLyogb2Zmc2V0IGlzIDEgaW4gY2FzZSBvZiB0aGUgNzAwME1DICovCisJdTggcmVnX29mZnM7CisKKwl1MTYgd2JkX3JlZjsKKworCXU4IGN1cnJlbnRfYmFuZDsKKwlmZV9iYW5kd2lkdGhfdCBjdXJyZW50X2JhbmR3aWR0aDsKKwlzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnICpjdXJyZW50X2FnYzsKKwl1MzIgdGltZjsKKworCXUxNiByZXZpc2lvbjsKK307CisKK2VudW0gZGliNzAwMG1fcG93ZXJfbW9kZSB7CisJRElCNzAwME1fUE9XRVJfQUxMID0gMCwKKworCURJQjcwMDBNX1BPV0VSX05PLAorCURJQjcwMDBNX1BPV0VSX0lOVEVSRl9BTkFMT0dfQUdDLAorCURJQjcwMDBNX1BPV0VSX0NPUjRfRElOVExWX0lDSVJNX0VRVUFMX0NGUk9ELAorCURJQjcwMDBNX1BPV0VSX0NPUjRfQ1JZX0VTUkFNX01PVVRfTlVELAorCURJQjcwMDBNX1BPV0VSX0lOVEVSRkFDRV9PTkxZLAorfTsKKworc3RhdGljIHUxNiBkaWI3MDAwbV9yZWFkX3dvcmQoc3RydWN0IGRpYjcwMDBtX3N0YXRlICpzdGF0ZSwgdTE2IHJlZykKK3sKKwl1OCB3YlsyXSA9IHsgKHJlZyA+PiA4KSB8IDB4ODAsIHJlZyAmIDB4ZmYgfTsKKwl1OCByYlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7CisJCXsgLmFkZHIgPSBzdGF0ZS0+aTJjX2FkZHIgPj4gMSwgLmZsYWdzID0gMCwgICAgICAgIC5idWYgPSB3YiwgLmxlbiA9IDIgfSwKKwkJeyAuYWRkciA9IHN0YXRlLT5pMmNfYWRkciA+PiAxLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IHJiLCAubGVuID0gMiB9LAorCX07CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmNfYWRhcCwgbXNnLCAyKSAhPSAyKQorCQlkcHJpbnRrKCJpMmMgcmVhZCBlcnJvciBvbiAlZFxuIixyZWcpOworCisJcmV0dXJuIChyYlswXSA8PCA4KSB8IHJiWzFdOworfQorCitzdGF0aWMgaW50IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RydWN0IGRpYjcwMDBtX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTE2IHZhbCkKK3sKKwl1OCBiWzRdID0geworCQkocmVnID4+IDgpICYgMHhmZiwgcmVnICYgMHhmZiwKKwkJKHZhbCA+PiA4KSAmIDB4ZmYsIHZhbCAmIDB4ZmYsCisJfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gc3RhdGUtPmkyY19hZGRyID4+IDEsIC5mbGFncyA9IDAsIC5idWYgPSBiLCAubGVuID0gNAorCX07CisJcmV0dXJuIGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEgPyAtRVJFTU9URUlPIDogMDsKK30KK3N0YXRpYyBpbnQgZGliNzAwMG1fc2V0X291dHB1dF9tb2RlKHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUsIGludCBtb2RlKQoreworCWludCAgICByZXQgPSAwOworCXUxNiBvdXRyZWcsIGZpZm9fdGhyZXNob2xkLCBzbW9fbW9kZSwKKwkJc3JhbSA9IDB4MDAwNTsgLyogYnkgZGVmYXVsdCBTUkFNIG91dHB1dCBpcyBkaXNhYmxlZCAqLworCisJb3V0cmVnID0gMDsKKwlmaWZvX3RocmVzaG9sZCA9IDE3OTI7CisJc21vX21vZGUgPSAoZGliNzAwMG1fcmVhZF93b3JkKHN0YXRlLCAyOTQgKyBzdGF0ZS0+cmVnX29mZnMpICYgMHgwMDEwKSB8ICgxIDw8IDEpOworCisJZHByaW50aygiLUktICBTZXR0aW5nIG91dHB1dCBtb2RlIGZvciBkZW1vZCAlcCB0byAlZFxuIiwKKwkJCSZzdGF0ZS0+ZGVtb2QsIG1vZGUpOworCisJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgT1VUTU9ERV9NUEVHMl9QQVJfR0FURURfQ0xLOiAgIC8vIFNUQnMgd2l0aCBwYXJhbGxlbCBnYXRlZCBjbG9jaworCQkJb3V0cmVnID0gKDEgPDwgMTApOyAgLyogMHgwNDAwICovCisJCQlicmVhazsKKwkJY2FzZSBPVVRNT0RFX01QRUcyX1BBUl9DT05UX0NMSzogICAgLy8gU1RCcyB3aXRoIHBhcmFsbGVsIGNvbnRpbnVlcyBjbG9jaworCQkJb3V0cmVnID0gKDEgPDwgMTApIHwgKDEgPDwgNik7IC8qIDB4MDQ0MCAqLworCQkJYnJlYWs7CisJCWNhc2UgT1VUTU9ERV9NUEVHMl9TRVJJQUw6ICAgICAgICAgIC8vIFNUQnMgd2l0aCBzZXJpYWwgaW5wdXQKKwkJCW91dHJlZyA9ICgxIDw8IDEwKSB8ICgyIDw8IDYpIHwgKDAgPDwgMSk7IC8qIDB4MDQ4MiAqLworCQkJYnJlYWs7CisJCWNhc2UgT1VUTU9ERV9ESVZFUlNJVFk6CisJCQlpZiAoc3RhdGUtPmNmZy5ob3N0YnVzX2RpdmVyc2l0eSkKKwkJCQlvdXRyZWcgPSAoMSA8PCAxMCkgfCAoNCA8PCA2KTsgLyogMHgwNTAwICovCisJCQllbHNlCisJCQkJc3JhbSAgIHw9IDB4MGMwMDsKKwkJCWJyZWFrOworCQljYXNlIE9VVE1PREVfTVBFRzJfRklGTzogICAgICAgICAgICAvLyBlLmcuIFVTQiBmZWVkaW5nCisJCQlzbW9fbW9kZSB8PSAoMyA8PCAxKTsKKwkJCWZpZm9fdGhyZXNob2xkID0gNTEyOworCQkJb3V0cmVnID0gKDEgPDwgMTApIHwgKDUgPDwgNik7CisJCQlicmVhazsKKwkJY2FzZSBPVVRNT0RFX0hJR0hfWjogIC8vIGRpc2FibGUKKwkJCW91dHJlZyA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoIlVuaGFuZGxlZCBvdXRwdXRfbW9kZSBwYXNzZWQgdG8gYmUgc2V0IGZvciBkZW1vZCAlcFxuIiwmc3RhdGUtPmRlbW9kKTsKKwkJCWJyZWFrOworCX0KKworCWlmIChzdGF0ZS0+Y2ZnLm91dHB1dF9tcGVnMl9pbl8xODhfYnl0ZXMpCisJCXNtb19tb2RlIHw9ICgxIDw8IDUpIDsKKworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAgMjk0ICsgc3RhdGUtPnJlZ19vZmZzLCBzbW9fbW9kZSk7CisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsICAyOTUgKyBzdGF0ZS0+cmVnX29mZnMsIGZpZm9fdGhyZXNob2xkKTsgLyogc3luY2hyb25vdXMgZnJlYWQgKi8KKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTc5NSwgb3V0cmVnKTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTgwNSwgc3JhbSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRpYjcwMDBtX3NldF9wb3dlcl9tb2RlKHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUsIGVudW0gZGliNzAwMG1fcG93ZXJfbW9kZSBtb2RlKQoreworCS8qIGJ5IGRlZmF1bHQgZXZlcnl0aGluZyBpcyBnb2luZyB0byBiZSBwb3dlcmVkIG9mZiAqLworCXUxNiByZWdfOTAzID0gMHhmZmZmLCByZWdfOTA0ID0gMHhmZmZmLCByZWdfOTA1ID0gMHhmZmZmLCByZWdfOTA2ICA9IDB4M2ZmZjsKKworCS8qIG5vdywgZGVwZW5kaW5nIG9uIHRoZSByZXF1ZXN0ZWQgbW9kZSwgd2UgcG93ZXIgb24gKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKwkJLyogcG93ZXIgdXAgZXZlcnl0aGluZyBpbiB0aGUgZGVtb2QgKi8KKwkJY2FzZSBESUI3MDAwTV9QT1dFUl9BTEw6CisJCQlyZWdfOTAzID0gMHgwMDAwOyByZWdfOTA0ID0gMHgwMDAwOyByZWdfOTA1ID0gMHgwMDAwOyByZWdfOTA2ID0gMHgwMDAwOworCQkJYnJlYWs7CisKKwkJLyoganVzdCBsZWF2ZSBwb3dlciBvbiB0aGUgY29udHJvbC1pbnRlcmZhY2VzOiBHUElPIGFuZCAoSTJDIG9yIFNESU8gb3IgU1JBTSkgKi8KKwkJY2FzZSBESUI3MDAwTV9QT1dFUl9JTlRFUkZBQ0VfT05MWTogLyogVE9ETyBwb3dlciB1cCBlaXRoZXIgU0RJTyBvciBJMkMgb3IgU1JBTSAqLworCQkJcmVnXzkwNSAmPSB+KCgxIDw8IDcpIHwgKDEgPDwgNikgfCAoMSA8PCA1KSB8ICgxIDw8IDIpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRElCNzAwME1fUE9XRVJfSU5URVJGX0FOQUxPR19BR0M6CisJCQlyZWdfOTAzICY9IH4oKDEgPDwgMTUpIHwgKDEgPDwgMTQpIHwgKDEgPDwgMTEpIHwgKDEgPDwgMTApKTsKKwkJCXJlZ185MDUgJj0gfigoMSA8PCA3KSB8ICgxIDw8IDYpIHwgKDEgPDwgNSkgfCAoMSA8PCA0KSB8ICgxIDw8IDIpKTsKKwkJCXJlZ185MDYgJj0gfigoMSA8PCAwKSk7CisJCQlicmVhazsKKworCQljYXNlIERJQjcwMDBNX1BPV0VSX0NPUjRfRElOVExWX0lDSVJNX0VRVUFMX0NGUk9EOgorCQkJcmVnXzkwMyA9IDB4MDAwMDsgcmVnXzkwNCA9IDB4ODAxZjsgcmVnXzkwNSA9IDB4MDAwMDsgcmVnXzkwNiA9IDB4MDAwMDsKKwkJCWJyZWFrOworCisJCWNhc2UgRElCNzAwME1fUE9XRVJfQ09SNF9DUllfRVNSQU1fTU9VVF9OVUQ6CisJCQlyZWdfOTAzID0gMHgwMDAwOyByZWdfOTA0ID0gMHg4MDAwOyByZWdfOTA1ID0gMHgwMTBiOyByZWdfOTA2ID0gMHgwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgRElCNzAwME1fUE9XRVJfTk86CisJCQlicmVhazsKKwl9CisKKwkvKiBhbHdheXMgcG93ZXIgZG93biB1bnVzZWQgcGFydHMgKi8KKwlpZiAoIXN0YXRlLT5jZmcubW9iaWxlX21vZGUpCisJCXJlZ185MDQgfD0gKDEgPDwgNykgfCAoMSA8PCA2KSB8ICgxIDw8IDQpIHwgKDEgPDwgMikgfCAoMSA8PCAxKTsKKworCS8qIFBfc2Rpb19zZWxlY3RfY2xrID0gMCBvbiBNQyAqLworCWlmIChzdGF0ZS0+cmV2aXNpb24gIT0gMHg0MDAwKQorCQlyZWdfOTA2IDw8PSAxOworCisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgIDkwMywgIHJlZ185MDMpOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsICA5MDQsICByZWdfOTA0KTsKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAgOTA1LCAgcmVnXzkwNSk7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgIDkwNiwgIHJlZ185MDYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMG1fc2V0X2FkY19zdGF0ZShzdHJ1Y3QgZGliNzAwMG1fc3RhdGUgKnN0YXRlLCBlbnVtIGRpYngwMDBfYWRjX3N0YXRlcyBubykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MTYgcmVnXzkxMyA9IGRpYjcwMDBtX3JlYWRfd29yZChzdGF0ZSwgOTEzKSwKKwkgICAgICAgcmVnXzkxNCA9IGRpYjcwMDBtX3JlYWRfd29yZChzdGF0ZSwgOTE0KTsKKworCXN3aXRjaCAobm8pIHsKKwkJY2FzZSBESUJYMDAwX1NMT1dfQURDX09OOgorCQkJcmVnXzkxNCB8PSAoMSA8PCAxKSB8ICgxIDw8IDApOworCQkJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDkxNCwgcmVnXzkxNCk7CisJCQlyZWdfOTE0ICY9IH4oMSA8PCAxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRElCWDAwMF9TTE9XX0FEQ19PRkY6CisJCQlyZWdfOTE0IHw9ICAoMSA8PCAxKSB8ICgxIDw8IDApOworCQkJYnJlYWs7CisKKwkJY2FzZSBESUJYMDAwX0FEQ19PTjoKKwkJCWlmIChzdGF0ZS0+cmV2aXNpb24gPT0gMHg0MDAwKSB7IC8vIHdvcmthcm91bmQgZm9yIFBBL01BCisJCQkJLy8gcG93ZXItdXAgQURDCisJCQkJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgOTEzLCAwKTsKKwkJCQlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MTQsIHJlZ185MTQgJiAweDMpOworCQkJCS8vIHBvd2VyLWRvd24gYmFuZGdhZworCQkJCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDkxMywgKDEgPDwgMTUpKTsKKwkJCQlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MTQsIHJlZ185MTQgJiAweDMpOworCQkJfQorCisJCQlyZWdfOTEzICY9IDB4MGZmZjsKKwkJCXJlZ185MTQgJj0gMHgwMDAzOworCQkJYnJlYWs7CisKKwkJY2FzZSBESUJYMDAwX0FEQ19PRkY6IC8vIGxlYXZlIHRoZSBWQkcgdm9sdGFnZSBvbgorCQkJcmVnXzkxMyB8PSAoMSA8PCAxNCkgfCAoMSA8PCAxMykgfCAoMSA8PCAxMik7CisJCQlyZWdfOTE0IHw9ICgxIDw8IDUpIHwgKDEgPDwgNCkgfCAoMSA8PCAzKSB8ICgxIDw8IDIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBESUJYMDAwX1ZCR19FTkFCTEU6CisJCQlyZWdfOTEzICY9IH4oMSA8PCAxNSk7CisJCQlicmVhazsKKworCQljYXNlIERJQlgwMDBfVkJHX0RJU0FCTEU6CisJCQlyZWdfOTEzIHw9ICgxIDw8IDE1KTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKy8vCWRwcmludGsoIi1ELSAgOTEzOiAleCwgOTE0OiAleFxuIiwgcmVnXzkxMywgcmVnXzkxNCk7CisKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgOTEzLCByZWdfOTEzKTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgOTE0LCByZWdfOTE0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMG1fc2V0X2JhbmR3aWR0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwgdTggYndfaWR4KQoreworCXN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUgPSBkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MzIgdGltZjsKKworCS8vIHN0b3JlIHRoZSBjdXJyZW50IGJhbmR3aWR0aCBmb3IgbGF0ZXIgdXNlCisJc3RhdGUtPmN1cnJlbnRfYmFuZHdpZHRoID0gYndfaWR4OworCisJaWYgKHN0YXRlLT50aW1mID09IDApIHsKKwkJZHByaW50aygiLUQtICBVc2luZyBkZWZhdWx0IHRpbWZcbiIpOworCQl0aW1mID0gc3RhdGUtPmNmZy5idy0+dGltZjsKKwl9IGVsc2UgeworCQlkcHJpbnRrKCItRC0gIFVzaW5nIHVwZGF0ZWQgdGltZlxuIik7CisJCXRpbWYgPSBzdGF0ZS0+dGltZjsKKwl9CisKKwl0aW1mID0gdGltZiAqIChCV19JTkRFWF9UT19LSFooYndfaWR4KSAvIDEwMCkgLyA4MDsKKworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDIzLCAodGltZiA+PiAxNikgJiAweGZmZmYpOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDI0LCAodGltZiAgICAgICkgJiAweGZmZmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMG1fc2FkX2NhbGliKHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUpCit7CisKKy8qIGludGVybmFsICovCisvLwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MjgsICgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1MjQgPDwgMCkpOyAvLyBzYW1wbGluZyBjbG9jayBvZiB0aGUgU0FEIGlzIHdyaXR0aW5nIGluIHNldF9iYW5kd2lkdGgKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MjksICgwIDw8IDEpIHwgKDAgPDwgMCkpOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDkzMCwgNzc2KTsgLy8gMC42MjUqMy4zIC8gNDA5NgorCisJLyogZG8gdGhlIGNhbGlicmF0aW9uICovCisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgOTI5LCAoMSA8PCAwKSk7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgOTI5LCAoMCA8PCAwKSk7CisKKwltc2xlZXAoMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGliNzAwMG1fcmVzZXRfcGxsX2NvbW1vbihzdHJ1Y3QgZGliNzAwMG1fc3RhdGUgKnN0YXRlLCBjb25zdCBzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnICpidykKK3sKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxOCwgKChidy0+aW50ZXJuYWwqMTAwMCkgPj4gMTYpICYgMHhmZmZmKTsKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxOSwgIChidy0+aW50ZXJuYWwqMTAwMCkgICAgICAgICYgMHhmZmZmKTsKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyMSwgIChidy0+aWZyZXEgICAgICAgICAgPj4gMTYpICYgMHhmZmZmKTsKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyMiwgICBidy0+aWZyZXEgICAgICAgICAgICAgICAgICYgMHhmZmZmKTsKKworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDkyOCwgYnctPnNhZF9jZmcpOworfQorCitzdGF0aWMgdm9pZCBkaWI3MDAwbV9yZXNldF9wbGwoc3RydWN0IGRpYjcwMDBtX3N0YXRlICpzdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnICpidyA9IHN0YXRlLT5jZmcuYnc7CisJdTE2IHJlZ185MDcscmVnXzkxMDsKKworCS8qIGRlZmF1bHQgKi8KKwlyZWdfOTA3ID0gKGJ3LT5wbGxfYnlwYXNzIDw8IDE1KSB8IChidy0+bW9kdWxvIDw8IDcpIHwKKwkJKGJ3LT5BRENsa1NyYyA8PCA2KSB8IChidy0+SU9fQ0xLX2VuX2NvcmUgPDwgNSkgfCAoYnctPmJ5cGNsa19kaXYgPDwgMikgfAorCQkoYnctPmVuYWJsZV9yZWZkaXYgPDwgMSkgfCAoMCA8PCAwKTsKKwlyZWdfOTEwID0gKCgoYnctPnBsbF9yYXRpbyA+PiA2KSAmIDB4MykgPDwgMykgfCAoYnctPnBsbF9yYW5nZSA8PCAxKSB8IGJ3LT5wbGxfcmVzZXQ7CisKKwkvLyBmb3IgdGhpcyBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBzaG91bGQgYmUgMzAgTUh6IGZvciB0aGUgTWFzdGVyIChkZWZhdWx0IHZhbHVlcyBpbiB0aGUgYm9hcmRfcGFyYW1ldGVycyBnaXZlIHRoYXQgdmFsdWUpCisJLy8gdGhpcyBpcyBvbmx5IHdvcmtpbmcgb25seSBmb3IgMzAgTUh6IGNyeXN0YWxzCisJaWYgKCFzdGF0ZS0+Y2ZnLnF1YXJ0el9kaXJlY3QpIHsKKwkJcmVnXzkxMCB8PSAoMSA8PCA1KTsgIC8vIGZvcmNpbmcgdGhlIHByZWRpdmlkZXIgdG8gMQorCisJCS8vIGlmIHRoZSBwcmV2aW91cyBmcm9udC1lbmQgaXMgYmFzZWJhbmQsIGl0cyBvdXRwdXQgZnJlcXVlbmN5IGlzIDE1IE1IeiAocHJldiBmcmVxIGRpdmlkZWQgYnkgMikKKwkJaWYoc3RhdGUtPmNmZy5pbnB1dF9jbGtfaXNfZGl2XzIpCisJCQlyZWdfOTA3IHw9ICgxNiA8PCA5KTsKKwkJZWxzZSAvLyBvdGhlcndpc2UgdGhlIHByZXZpb3VzIGZyb250LWVuZCBwdXRzIG91dCBpdHMgaW5wdXQgKGRlZmF1bHQgMzBNSHopIC0gbm8gZXh0cmEgZGl2aXNpb24gbmVjZXNzYXJ5CisJCQlyZWdfOTA3IHw9ICg4IDw8IDkpOworCX0gZWxzZSB7CisJCXJlZ185MDcgfD0gKGJ3LT5wbGxfcmF0aW8gJiAweDNmKSA8PCA5OworCQlyZWdfOTEwIHw9IChidy0+cGxsX3ByZWRpdiA8PCA1KTsKKwl9CisKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MTAsIHJlZ185MTApOyAvLyBwbGwgY2ZnCisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgOTA3LCByZWdfOTA3KTsgLy8gY2xrIGNmZzAKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MDgsIDB4MDAwNik7ICAvLyBjbGtfY2ZnMQorCisJZGliNzAwMG1fcmVzZXRfcGxsX2NvbW1vbihzdGF0ZSwgYncpOworfQorCitzdGF0aWMgdm9pZCBkaWI3MDAwbWNfcmVzZXRfcGxsKHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUpCit7CisJY29uc3Qgc3RydWN0IGRpYngwMDBfYmFuZHdpZHRoX2NvbmZpZyAqYncgPSBzdGF0ZS0+Y2ZnLmJ3OworCisJLy8gY2xrX2NmZzAKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MDcsIChidy0+cGxsX3ByZWRpdiA8PCA4KSB8IChidy0+cGxsX3JhdGlvIDw8IDApKTsKKworCS8vIGNsa19jZmcxCisJLy9kaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MDgsICgxIDw8IDE0KSB8ICgzIDw8IDEyKSB8KDAgPDwgMTEpIHwKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MDgsICgwIDw8IDE0KSB8ICgzIDw8IDEyKSB8KDAgPDwgMTEpIHwKKwkJCShidy0+SU9fQ0xLX2VuX2NvcmUgPDwgMTApIHwgKGJ3LT5ieXBjbGtfZGl2IDw8IDUpIHwgKGJ3LT5lbmFibGVfcmVmZGl2IDw8IDQpIHwKKwkJCShidy0+cGxsX2J5cGFzcyA8PCAzKSB8IChidy0+cGxsX3JhbmdlIDw8IDEpIHwgKGJ3LT5wbGxfcmVzZXQgPDwgMCkpOworCisJLy8gc21wbF9jZmcKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MTAsICgxIDw8IDEyKSB8ICgyIDw8IDEwKSB8IChidy0+bW9kdWxvIDw8IDgpIHwgKGJ3LT5BRENsa1NyYyA8PCA3KSk7CisKKwlkaWI3MDAwbV9yZXNldF9wbGxfY29tbW9uKHN0YXRlLCBidyk7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMG1fcmVzZXRfZ3BpbyhzdHJ1Y3QgZGliNzAwMG1fc3RhdGUgKnN0KQoreworCS8qIHJlc2V0IHRoZSBHUElPcyAqLworCWRwcmludGsoIi1ELSAgZ3BpbyBkaXI6ICV4OiBncGlvIHZhbDogJXgsIGdwaW8gcHdtIHBvczogJXhcbiIsCisJCXN0LT5jZmcuZ3Bpb19kaXIsIHN0LT5jZmcuZ3Bpb192YWwsc3QtPmNmZy5ncGlvX3B3bV9wb3MpOworCisJZGliNzAwMG1fd3JpdGVfd29yZChzdCwgNzczLCBzdC0+Y2ZnLmdwaW9fZGlyKTsKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0LCA3NzQsIHN0LT5jZmcuZ3Bpb192YWwpOworCisJLyogVE9ETyA3ODIgaXMgUF9ncGlvX29kICovCisKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0LCA3NzUsIHN0LT5jZmcuZ3Bpb19wd21fcG9zKTsKKworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3QsIDc4MCwgc3QtPmNmZy5wd21fZnJlcV9kaXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjcwMDBtX2RlbW9kX3Jlc2V0KHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUpCit7CisJZGliNzAwMG1fc2V0X3Bvd2VyX21vZGUoc3RhdGUsIERJQjcwMDBNX1BPV0VSX0FMTCk7CisKKwkvKiBhbHdheXMgbGVhdmUgdGhlIFZCRyB2b2x0YWdlIG9uIC0gaXQgY29uc3VtZXMgYWxtb3N0IG5vdGhpbmcgYnV0IHRha2VzIGEgbG9uZyB0aW1lIHRvIHN0YXJ0ICovCisJZGliNzAwMG1fc2V0X2FkY19zdGF0ZShzdGF0ZSwgRElCWDAwMF9WQkdfRU5BQkxFKTsKKworCS8qIHJlc3RhcnQgYWxsIHBhcnRzICovCisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgIDg5OCwgMHhmZmZmKTsKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAgODk5LCAweGZmZmYpOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsICA5MDAsIDB4ZmYwZik7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgIDkwMSwgMHhmZmZjKTsKKworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsICA4OTgsIDApOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsICA4OTksIDApOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsICA5MDAsIDApOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsICA5MDEsIDApOworCisJaWYgKHN0YXRlLT5yZXZpc2lvbiA9PSAweDQwMDApCisJCWRpYjcwMDBtX3Jlc2V0X3BsbChzdGF0ZSk7CisJZWxzZQorCQlkaWI3MDAwbWNfcmVzZXRfcGxsKHN0YXRlKTsKKworCWlmIChkaWI3MDAwbV9yZXNldF9ncGlvKHN0YXRlKSAhPSAwKQorCQlkcHJpbnRrKCItRS0gIEdQSU8gcmVzZXQgd2FzIG5vdCBzdWNjZXNzZnVsLlxuIik7CisKKwlpZiAoZGliNzAwMG1fc2V0X291dHB1dF9tb2RlKHN0YXRlLCBPVVRNT0RFX0hJR0hfWikgIT0gMCkKKwkJZHByaW50aygiLUUtICBPVVRQVVRfTU9ERSBjb3VsZCBub3QgYmUgcmVzZXR0ZWQuXG4iKTsKKworCS8qIHVuZm9yY2UgZGl2c3RyIHJlZ2FyZGxlc3Mgd2hldGhlciBpMmMgZW51bWVyYXRpb24gd2FzIGRvbmUgb3Igbm90ICovCisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTc5NCwgZGliNzAwMG1fcmVhZF93b3JkKHN0YXRlLCAxNzk0KSAmIH4oMSA8PCAxKSApOworCisJZGliNzAwMG1fc2V0X2JhbmR3aWR0aCgmc3RhdGUtPmRlbW9kLCBCQU5EV0lEVEhfOF9NSFopOworCisJZGliNzAwMG1fc2V0X2FkY19zdGF0ZShzdGF0ZSwgRElCWDAwMF9TTE9XX0FEQ19PTik7CisJZGliNzAwMG1fc2FkX2NhbGliKHN0YXRlKTsKKwlkaWI3MDAwbV9zZXRfYWRjX3N0YXRlKHN0YXRlLCBESUJYMDAwX1NMT1dfQURDX09GRik7CisKKwlkaWI3MDAwbV9zZXRfcG93ZXJfbW9kZShzdGF0ZSwgRElCNzAwME1fUE9XRVJfSU5URVJGQUNFX09OTFkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjcwMDBtX3Jlc3RhcnRfYWdjKHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUpCit7CisJLy8gUF9yZXN0YXJ0X2lxYyAmIFBfcmVzdGFydF9hZ2MKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA4OTgsIDB4MGMwMCk7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgODk4LCAweDAwMDApOworfQorCitzdGF0aWMgaW50IGRpYjcwMDBtX2FnY19zb2Z0X3NwbGl0KHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUpCit7CisJdTE2IGFnYyxzcGxpdF9vZmZzZXQ7CisKKwlpZighc3RhdGUtPmN1cnJlbnRfYWdjIHx8ICFzdGF0ZS0+Y3VycmVudF9hZ2MtPnBlcmZvcm1fYWdjX3NvZnRzcGxpdCB8fCBzdGF0ZS0+Y3VycmVudF9hZ2MtPnNwbGl0Lm1heCA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8vIG5fYWdjX2dsb2JhbAorCWFnYyA9IGRpYjcwMDBtX3JlYWRfd29yZChzdGF0ZSwgMzkwKTsKKworCWlmIChhZ2MgPiBzdGF0ZS0+Y3VycmVudF9hZ2MtPnNwbGl0Lm1pbl90aHJlcykKKwkJc3BsaXRfb2Zmc2V0ID0gc3RhdGUtPmN1cnJlbnRfYWdjLT5zcGxpdC5taW47CisJZWxzZSBpZiAoYWdjIDwgc3RhdGUtPmN1cnJlbnRfYWdjLT5zcGxpdC5tYXhfdGhyZXMpCisJCXNwbGl0X29mZnNldCA9IHN0YXRlLT5jdXJyZW50X2FnYy0+c3BsaXQubWF4OworCWVsc2UKKwkJc3BsaXRfb2Zmc2V0ID0gc3RhdGUtPmN1cnJlbnRfYWdjLT5zcGxpdC5tYXggKgorCQkJKGFnYyAtIHN0YXRlLT5jdXJyZW50X2FnYy0+c3BsaXQubWluX3RocmVzKSAvCisJCQkoc3RhdGUtPmN1cnJlbnRfYWdjLT5zcGxpdC5tYXhfdGhyZXMgLSBzdGF0ZS0+Y3VycmVudF9hZ2MtPnNwbGl0Lm1pbl90aHJlcyk7CisKKwlkcHJpbnRrKCJBR0Mgc3BsaXRfb2Zmc2V0OiAlZFxuIixzcGxpdF9vZmZzZXQpOworCisJLy8gUF9hZ2NfZm9yY2Vfc3BsaXQgYW5kIFBfYWdjX3NwbGl0X29mZnNldAorCXJldHVybiBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxMDMsIChkaWI3MDAwbV9yZWFkX3dvcmQoc3RhdGUsIDEwMykgJiAweGZmMDApIHwgc3BsaXRfb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBkaWI3MDAwbV91cGRhdGVfbG5hKHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUpCit7CisJaW50IGk7CisJdTE2IGR5bl9nYWluOworCisJLy8gd2hlbiB0aGVyZSBpcyBubyBMTkEgdG8gcHJvZ3JhbSByZXR1cm4gaW1tZWRpYXRseQorCWlmIChzdGF0ZS0+Y2ZnLnVwZGF0ZV9sbmEgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwltc2xlZXAoNjApOworCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisJCS8vIHJlYWQgZHluX2dhaW4gaGVyZSAoYmVjYXVzZSBpdCBpcyBkZW1vZC1kZXBlbmRlbnQgYW5kIG5vdCB0dW5lcikKKwkJZHluX2dhaW4gPSBkaWI3MDAwbV9yZWFkX3dvcmQoc3RhdGUsIDM5MCk7CisKKwkJZHByaW50aygiYWdjIGdsb2JhbDogJWRcbiIsIGR5bl9nYWluKTsKKworCQlpZiAoc3RhdGUtPmNmZy51cGRhdGVfbG5hKCZzdGF0ZS0+ZGVtb2QsZHluX2dhaW4pKSB7IC8vIExOQSBoYXMgY2hhbmdlZAorCQkJZGliNzAwMG1fcmVzdGFydF9hZ2Moc3RhdGUpOworCQkJbXNsZWVwKDYwKTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjcwMDBtX3NldF9hZ2NfY29uZmlnKHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUsIHU4IGJhbmQpCit7CisJc3RydWN0IGRpYngwMDBfYWdjX2NvbmZpZyAqYWdjID0gTlVMTDsKKwlpbnQgaTsKKwlpZiAoc3RhdGUtPmN1cnJlbnRfYmFuZCA9PSBiYW5kKQorCQlyZXR1cm47CisJc3RhdGUtPmN1cnJlbnRfYmFuZCA9IGJhbmQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPmNmZy5hZ2NfY29uZmlnX2NvdW50OyBpKyspCisJCWlmIChzdGF0ZS0+Y2ZnLmFnY1tpXS5iYW5kX2NhcHMgJiBiYW5kKSB7CisJCQlhZ2MgPSAmc3RhdGUtPmNmZy5hZ2NbaV07CisJCQlicmVhazsKKwkJfQorCisJaWYgKGFnYyA9PSBOVUxMKSB7CisJCWRwcmludGsoIi1FLSAgTm8gdmFsaWQgQUdDIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yIGJhbmQgMHglMDJ4XG4iLGJhbmQpOworCQlyZXR1cm47CisJfQorCisJc3RhdGUtPmN1cnJlbnRfYWdjID0gYWdjOworCisJLyogQUdDICovCisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgNzIgLCAgYWdjLT5zZXR1cCk7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgNzMgLCAgYWdjLT5pbnZfZ2Fpbik7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgNzQgLCAgYWdjLT50aW1lX3N0YWJpbGl6KTsKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5NyAsIChhZ2MtPmFscGhhX2xldmVsIDw8IDEyKSB8IGFnYy0+dGhsb2NrKTsKKworCS8vIERlbW9kIEFHQyBsb29wIGNvbmZpZ3VyYXRpb24KKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5OCwgKGFnYy0+YWxwaGFfbWFudCA8PCA1KSB8IGFnYy0+YWxwaGFfZXhwKTsKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5OSwgKGFnYy0+YmV0YV9tYW50ICA8PCA2KSB8IGFnYy0+YmV0YV9leHApOworCisJZHByaW50aygiLUQtICBXQkQ6IHJlZjogJWQsIHNlbDogJWQsIGFjdGl2ZTogJWQsIGFscGhhOiAlZFxuIiwKKwkJc3RhdGUtPndiZF9yZWYgIT0gMCA/IHN0YXRlLT53YmRfcmVmIDogYWdjLT53YmRfcmVmLCBhZ2MtPndiZF9zZWwsICFhZ2MtPnBlcmZvcm1fYWdjX3NvZnRzcGxpdCwgYWdjLT53YmRfc2VsKTsKKworCS8qIEFHQyBjb250aW51ZWQgKi8KKwlpZiAoc3RhdGUtPndiZF9yZWYgIT0gMCkKKwkJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTAyLCBzdGF0ZS0+d2JkX3JlZik7CisJZWxzZSAvLyB1c2UgZGVmYXVsdAorCQlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxMDIsIGFnYy0+d2JkX3JlZik7CisKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxMDMsIChhZ2MtPndiZF9hbHBoYSA8PCA5KSB8IChhZ2MtPnBlcmZvcm1fYWdjX3NvZnRzcGxpdCA8PCA4KSApOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDEwNCwgIGFnYy0+YWdjMV9tYXgpOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDEwNSwgIGFnYy0+YWdjMV9taW4pOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDEwNiwgIGFnYy0+YWdjMl9tYXgpOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDEwNywgIGFnYy0+YWdjMl9taW4pOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDEwOCwgKGFnYy0+YWdjMV9wdDEgPDwgOCkgfCBhZ2MtPmFnYzFfcHQyICk7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTA5LCAoYWdjLT5hZ2MxX3Nsb3BlMSA8PCA4KSB8IGFnYy0+YWdjMV9zbG9wZTIpOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDExMCwgKGFnYy0+YWdjMl9wdDEgPDwgOCkgfCBhZ2MtPmFnYzJfcHQyKTsKKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxMTEsIChhZ2MtPmFnYzJfc2xvcGUxIDw8IDgpIHwgYWdjLT5hZ2MyX3Nsb3BlMik7CisKKwlpZiAoc3RhdGUtPnJldmlzaW9uID4gMHg0MDAwKSB7IC8vIHNldHRpbmdzIGZvciB0aGUgTUMKKwkJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgNzEsICAgYWdjLT5hZ2MxX3B0Myk7CisvLwkJZHByaW50aygiLUQtICA5Mjk6ICV4ICVkICVkXG4iLAorLy8JCQkoZGliNzAwMG1fcmVhZF93b3JkKHN0YXRlLCA5MjkpICYgMHhmZmUzKSB8IChhZ2MtPndiZF9pbnYgPDwgNCkgfCAoYWdjLT53YmRfc2VsIDw8IDIpLCBhZ2MtPndiZF9pbnYsIGFnYy0+d2JkX3NlbCk7CisJCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDkyOSwgKGRpYjcwMDBtX3JlYWRfd29yZChzdGF0ZSwgOTI5KSAmIDB4ZmZlMykgfCAoYWdjLT53YmRfaW52IDw8IDQpIHwgKGFnYy0+d2JkX3NlbCA8PCAyKSk7CisJfSBlbHNlIHsKKwkJLy8gd3JvbmcgZGVmYXVsdCB2YWx1ZXMKKwkJdTE2IGJbOV0gPSB7IDY3NiwgNjk2LCA3MTcsIDczNywgNzU4LCA3NzgsIDc5OSwgODE5LCA4NDAgfTsKKwkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDg4ICsgaSwgYltpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaWI3MDAwbV91cGRhdGVfdGltZl9mcmVxKHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUpCit7CisJdTMyIHRpbWYgPSAoZGliNzAwMG1fcmVhZF93b3JkKHN0YXRlLCA0MzYpIDw8IDE2KSB8IGRpYjcwMDBtX3JlYWRfd29yZChzdGF0ZSwgNDM3KTsKKwlzdGF0ZS0+dGltZiA9IHRpbWYgKiA4MCAvIChCV19JTkRFWF9UT19LSFooc3RhdGUtPmN1cnJlbnRfYmFuZHdpZHRoKSAvIDEwMCk7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMjMsICh1MTYpICh0aW1mID4+IDE2KSk7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMjQsICh1MTYpICh0aW1mICYgMHhmZmZmKSk7CisJZHByaW50aygiLUQtICBVcGRhdGVkIHRpbWZfZnJlcXVlbmN5OiAlZCAoZGVmYXVsdDogJWQpXG4iLHN0YXRlLT50aW1mLCBzdGF0ZS0+Y2ZnLmJ3LT50aW1mKTsKK30KKworc3RhdGljIHZvaWQgZGliNzAwMG1fc2V0X2NoYW5uZWwoc3RydWN0IGRpYjcwMDBtX3N0YXRlICpzdGF0ZSwgc3RydWN0IGRpYngwMDBfb2ZkbV9jaGFubmVsICpjaCwgdTggc2VxKQoreworCXUxNiB2YWx1ZSwgZXN0WzRdOworCisJZGliNzAwMG1fc2V0X2FnY19jb25maWcoc3RhdGUsIEJBTkRfT0ZfRlJFUVVFTkNZKGNoLT5SRl9rSHopKTsKKworCS8qIG5mZnQsIGd1YXJkLCBxYW0sIGFscGhhICovCisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMCwgKGNoLT5uZmZ0IDw8IDcpIHwgKGNoLT5ndWFyZCA8PCA1KSB8IChjaC0+bnFhbSA8PCAzKSB8IChjaC0+dml0X2FscGhhKSk7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgNSwgKHNlcSA8PCA0KSk7CisKKwkvKiBQX2RpbnRsX25hdGl2ZSwgUF9kaW50bHZfaW52LCBQX3ZpdF9ocmNoLCBQX3ZpdF9jb2RlX3JhdGUsIFBfdml0X3NlbGVjdF9ocCAqLworCXZhbHVlID0gKGNoLT5pbnRsdl9uYXRpdmUgPDwgNikgfCAoY2gtPnZpdF9ocmNoIDw8IDQpIHwgKGNoLT52aXRfc2VsZWN0X2hwICYgMHgxKTsKKwlpZiAoY2gtPnZpdF9ocmNoID09IDAgfHwgY2gtPnZpdF9zZWxlY3RfaHAgPT0gMSkKKwkJdmFsdWUgfD0gKGNoLT52aXRfY29kZV9yYXRlX2hwIDw8IDEpOworCWVsc2UKKwkJdmFsdWUgfD0gKGNoLT52aXRfY29kZV9yYXRlX2xwIDw8IDEpOworCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDI2NyArIHN0YXRlLT5yZWdfb2ZmcywgdmFsdWUpOworCisJLyogb2Zmc2V0IGxvb3AgcGFyYW1ldGVycyAqLworCisJLyogUF90aW1mX2FscGhhID0gNiwgUF9jb3JtX2FscGhhPTYsIFBfY29ybV90aHJlcz0weDgwICovCisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMjYsICg2IDw8IDEyKSB8ICg2IDw8IDgpIHwgMHg4MCk7CisKKwkvKiBQX2N0cmxfaW5oX2Nvcj0wLCBQX2N0cmxfYWxwaGFfY29yPTQsIFBfY3RybF9pbmhfaXNpPTEsIFBfY3RybF9hbHBoYV9pc2k9MywgUF9jdHJsX2luaF9jb3I0PTEsIFBfY3RybF9hbHBoYV9jb3I0PTMgKi8KKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyOSwgKDAgPDwgMTQpIHwgKDQgPDwgMTApIHwgKDEgPDwgOSkgfCAoMyA8PCA1KSB8ICgxIDw8IDQpIHwgKDB4MykpOworCisJLyogUF9jdHJsX2ZyZWV6ZV9waGFfc2hpZnQ9MCwgUF9jdHJsX3BoYV9vZmZfbWF4PTMgKi8KKwlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAzMiwgKDAgPDwgNCkgfCAweDMpOworCisJLyogUF9jdHJsX3NmcmVxX2luaD0wLCBQX2N0cmxfc2ZyZXFfc3RlcD01ICovCisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMzMsICgwIDw8IDQpIHwgMHg1KTsKKworCS8qIFBfZHZzeV9zeW5jX3dhaXQgKi8KKwlzd2l0Y2ggKGNoLT5uZmZ0KSB7CisJCWNhc2UgMTogdmFsdWUgPSAyNTY7IGJyZWFrOworCQljYXNlIDI6IHZhbHVlID0gMTI4OyBicmVhazsKKwkJY2FzZSAwOgorCQlkZWZhdWx0OiB2YWx1ZSA9IDY0OyBicmVhazsKKwl9CisJdmFsdWUgKj0gKCgxIDw8IChjaC0+Z3VhcmQpKSAqIDMgLyAyKTsgLy8gYWRkIDUwJSBTRk4gbWFyZ2luCisJdmFsdWUgPDw9IDQ7CisKKwkvKiBkZWFjdGl2ZSB0aGUgcG9zc2liaWxpdHkgb2YgZGl2ZXJzaXR5IHJlY2VwdGlvbiBpZiBleHRlbmRlZCBpbnRlcmxlYXZlIC0gbm90IGZvciA3MDAwTUMgKi8KKwkvKiBQX2R2c3lfc3luY19tb2RlID0gMCwgUF9kdnN5X3N5bmNfZW5hYmxlPTEsIFBfZHZjYl9jb21iX21vZGU9MiAqLworCWlmIChjaC0+aW50bHZfbmF0aXZlIHx8IHN0YXRlLT5yZXZpc2lvbiA+IDB4NDAwMCkKKwkJdmFsdWUgfD0gKDEgPDwgMikgfCAoMiA8PCAwKTsKKwllbHNlCisJCXZhbHVlIHw9IDA7CisJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMjY2ICsgc3RhdGUtPnJlZ19vZmZzLCB2YWx1ZSk7CisKKwkvKiBjaGFubmVsIGVzdGltYXRpb24gZmluZSBjb25maWd1cmF0aW9uICovCisJc3dpdGNoIChjaC0+bnFhbSkgeworCQljYXNlIDI6CisJCQllc3RbMF0gPSAweDAxNDg7ICAgICAgIC8qIFBfYWRwX3JlZ3VsX2NudCAwLjA0ICovCisJCQllc3RbMV0gPSAweGZmZjA7ICAgICAgIC8qIFBfYWRwX25vaXNlX2NudCAtMC4wMDIgKi8KKwkJCWVzdFsyXSA9IDB4MDBhNDsgICAgICAgLyogUF9hZHBfcmVndWxfZXh0IDAuMDIgKi8KKwkJCWVzdFszXSA9IDB4ZmZmODsgICAgICAgLyogUF9hZHBfbm9pc2VfZXh0IC0wLjAwMSAqLworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWVzdFswXSA9IDB4MDIzZDsgICAgICAgLyogUF9hZHBfcmVndWxfY250IDAuMDcgKi8KKwkJCWVzdFsxXSA9IDB4ZmZkZjsgICAgICAgLyogUF9hZHBfbm9pc2VfY250IC0wLjAwNCAqLworCQkJZXN0WzJdID0gMHgwMGE0OyAgICAgICAvKiBQX2FkcF9yZWd1bF9leHQgMC4wMiAqLworCQkJZXN0WzNdID0gMHhmZmYwOyAgICAgICAvKiBQX2FkcF9ub2lzZV9leHQgLTAuMDAyICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVzdFswXSA9IDB4MDk5YTsgICAgICAgLyogUF9hZHBfcmVndWxfY250IDAuMyAqLworCQkJZXN0WzFdID0gMHhmZmFlOyAgICAgICAvKiBQX2FkcF9ub2lzZV9jbnQgLTAuMDEgKi8KKwkJCWVzdFsyXSA9IDB4MDMzMzsgICAgICAgLyogUF9hZHBfcmVndWxfZXh0IDAuMSAqLworCQkJZXN0WzNdID0gMHhmZmY4OyAgICAgICAvKiBQX2FkcF9ub2lzZV9leHQgLTAuMDAyICovCisJCQlicmVhazsKKwl9CisJZm9yICh2YWx1ZSA9IDA7IHZhbHVlIDwgNDsgdmFsdWUrKykKKwkJZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMjE0ICsgdmFsdWUgKyBzdGF0ZS0+cmVnX29mZnMsIGVzdFt2YWx1ZV0pOworCisJLy8gc2V0IHBvd2VyLXVwIGxldmVsOiBpbnRlcmYrYW5hbG9nK0FHQworCWRpYjcwMDBtX3NldF9wb3dlcl9tb2RlKHN0YXRlLCBESUI3MDAwTV9QT1dFUl9JTlRFUkZfQU5BTE9HX0FHQyk7CisJZGliNzAwMG1fc2V0X2FkY19zdGF0ZShzdGF0ZSwgRElCWDAwMF9BRENfT04pOworCisJbXNsZWVwKDcpOworCisJLy9BR0MgaW5pdGlhbGl6YXRpb24KKwlpZiAoc3RhdGUtPmNmZy5hZ2NfY29udHJvbCkKKwkJc3RhdGUtPmNmZy5hZ2NfY29udHJvbCgmc3RhdGUtPmRlbW9kLCAxKTsKKworCWRpYjcwMDBtX3Jlc3RhcnRfYWdjKHN0YXRlKTsKKworCS8vIHdhaXQgQUdDIHJvdWdoIGxvY2sgdGltZQorCW1zbGVlcCg1KTsKKworCWRpYjcwMDBtX3VwZGF0ZV9sbmEoc3RhdGUpOworCWRpYjcwMDBtX2FnY19zb2Z0X3NwbGl0KHN0YXRlKTsKKworCS8vIHdhaXQgQUdDIGFjY3VyYXRlIGxvY2sgdGltZQorCW1zbGVlcCg3KTsKKworCWlmIChzdGF0ZS0+Y2ZnLmFnY19jb250cm9sKQorCQlzdGF0ZS0+Y2ZnLmFnY19jb250cm9sKCZzdGF0ZS0+ZGVtb2QsIDApOworCisJLy8gc2V0IHBvd2VyLXVwIGxldmVsOiBhdXRvc2VhcmNoCisJZGliNzAwMG1fc2V0X3Bvd2VyX21vZGUoc3RhdGUsIERJQjcwMDBNX1BPV0VSX0NPUjRfRElOVExWX0lDSVJNX0VRVUFMX0NGUk9EKTsKK30KKworc3RhdGljIGludCBkaWI3MDAwbV9hdXRvc2VhcmNoX3N0YXJ0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kLCBzdHJ1Y3QgZGlieDAwMF9vZmRtX2NoYW5uZWwgKmNoKQoreworCXN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUgPSBkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZGlieDAwMF9vZmRtX2NoYW5uZWwgYXV0b19jaDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgdmFsdWU7CisKKwlJTklUX09GRE1fQ0hBTk5FTCgmYXV0b19jaCk7CisJYXV0b19jaC5SRl9rSHogICAgICAgICAgID0gY2gtPlJGX2tIejsKKwlhdXRvX2NoLkJ3ICAgICAgICAgICAgICAgPSBjaC0+Qnc7CisJYXV0b19jaC5ucWFtICAgICAgICAgICAgID0gMjsKKwlhdXRvX2NoLmd1YXJkICAgICAgICAgICAgPSAwOworCWF1dG9fY2gubmZmdCAgICAgICAgICAgICA9IDE7CisJYXV0b19jaC52aXRfYWxwaGEgICAgICAgID0gMTsKKwlhdXRvX2NoLnZpdF9zZWxlY3RfaHAgICAgPSAxOworCWF1dG9fY2gudml0X2NvZGVfcmF0ZV9ocCA9IDI7CisJYXV0b19jaC52aXRfY29kZV9yYXRlX2xwID0gMzsKKwlhdXRvX2NoLnZpdF9ocmNoICAgICAgICAgPSAwOworCWF1dG9fY2guaW50bHZfbmF0aXZlICAgICA9IDE7CisKKwlkaWI3MDAwbV9zZXRfY2hhbm5lbChzdGF0ZSwgJmF1dG9fY2gsIDcpOworCisJLy8gYWx3YXlzIHVzZSB0aGUgc2V0dGluZyBmb3IgOE1IeiBoZXJlIGxvY2tfdGltZSBmb3IgNyw2IE1IeiBhcmUgbG9uZ2VyCisJdmFsdWUgPSAzMCAqIHN0YXRlLT5jZmcuYnctPmludGVybmFsOworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA2LCAgKHUxNikgKCh2YWx1ZSA+PiAxNikgJiAweGZmZmYpKTsgLy8gbG9jazAgd2FpdCB0aW1lCisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDcsICAodTE2KSAgKHZhbHVlICAgICAgICAmIDB4ZmZmZikpOyAvLyBsb2NrMCB3YWl0IHRpbWUKKwl2YWx1ZSA9IDEwMCAqIHN0YXRlLT5jZmcuYnctPmludGVybmFsOworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA4LCAgKHUxNikgKCh2YWx1ZSA+PiAxNikgJiAweGZmZmYpKTsgLy8gbG9jazEgd2FpdCB0aW1lCisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDksICAodTE2KSAgKHZhbHVlICAgICAgICAmIDB4ZmZmZikpOyAvLyBsb2NrMSB3YWl0IHRpbWUKKwl2YWx1ZSA9IDUwMCAqIHN0YXRlLT5jZmcuYnctPmludGVybmFsOworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxMCwgKHUxNikgKCh2YWx1ZSA+PiAxNikgJiAweGZmZmYpKTsgLy8gbG9jazIgd2FpdCB0aW1lCisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDExLCAodTE2KSAgKHZhbHVlICAgICAgICAmIDB4ZmZmZikpOyAvLyBsb2NrMiB3YWl0IHRpbWUKKworCS8vIHN0YXJ0IHNlYXJjaAorCXZhbHVlID0gZGliNzAwMG1fcmVhZF93b3JkKHN0YXRlLCAwKTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMCwgdmFsdWUgfCAoMSA8PCA5KSk7CisKKwkvKiBjbGVhciBuX2lycV9wZW5kaW5nICovCisJaWYgKHN0YXRlLT5yZXZpc2lvbiA9PSAweDQwMDApCisJCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDE3OTMsIDApOworCWVsc2UKKwkJZGliNzAwMG1fcmVhZF93b3JkKHN0YXRlLCA1MzcpOworCisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDAsICh1MTYpIHZhbHVlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMG1fYXV0b3NlYXJjaF9pcnEoc3RydWN0IGRpYjcwMDBtX3N0YXRlICpzdGF0ZSwgdTE2IHJlZykKK3sKKwl1MTYgaXJxX3BlbmRpbmcgPSBkaWI3MDAwbV9yZWFkX3dvcmQoc3RhdGUsIHJlZyk7CisKKwlpZiAoaXJxX3BlbmRpbmcgJiAweDEpIHsgLy8gZmFpbGVkCisJCWRwcmludGsoIiNcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoaXJxX3BlbmRpbmcgJiAweDIpIHsgLy8gc3VjY2VlZGVkCisJCWRwcmludGsoIiFcbiIpOworCQlyZXR1cm4gMjsKKwl9CisJcmV0dXJuIDA7IC8vIHN0aWxsIHBlbmRpbmcKK30KKworc3RhdGljIGludCBkaWI3MDAwbV9hdXRvc2VhcmNoX2lzX2lycShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCkKK3sKKwlzdHJ1Y3QgZGliNzAwMG1fc3RhdGUgKnN0YXRlID0gZGVtb2QtPmRlbW9kdWxhdG9yX3ByaXY7CisJaWYgKHN0YXRlLT5yZXZpc2lvbiA9PSAweDQwMDApCisJCXJldHVybiBkaWI3MDAwbV9hdXRvc2VhcmNoX2lycShzdGF0ZSwgMTc5Myk7CisJZWxzZQorCQlyZXR1cm4gZGliNzAwMG1fYXV0b3NlYXJjaF9pcnEoc3RhdGUsIDUzNyk7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMG1fdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwgc3RydWN0IGRpYngwMDBfb2ZkbV9jaGFubmVsICpjaCkKK3sKKwlzdHJ1Y3QgZGliNzAwMG1fc3RhdGUgKnN0YXRlID0gZGVtb2QtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldCA9IDA7CisJdTE2IHZhbHVlOworCisJLy8gd2UgYXJlIGFscmVhZHkgdHVuZWQgLSBqdXN0IHJlc3VtaW5nIGZyb20gc3VzcGVuZAorCWlmIChjaCAhPSBOVUxMKQorCQlkaWI3MDAwbV9zZXRfY2hhbm5lbChzdGF0ZSwgY2gsIDApOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvLyByZXN0YXJ0IGRlbW9kCisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDg5OCwgMHg0MDAwKTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgODk4LCAweDAwMDApOworCW1zbGVlcCg0NSk7CisKKwlyZXQgfD0gZGliNzAwMG1fc2V0X3Bvd2VyX21vZGUoc3RhdGUsIERJQjcwMDBNX1BPV0VSX0NPUjRfQ1JZX0VTUkFNX01PVVRfTlVEKTsKKwkvKiBQX2N0cmxfaW5oX2Nvcj0wLCBQX2N0cmxfYWxwaGFfY29yPTQsIFBfY3RybF9pbmhfaXNpPTAsIFBfY3RybF9hbHBoYV9pc2k9MywgUF9jdHJsX2luaF9jb3I0PTEsIFBfY3RybF9hbHBoYV9jb3I0PTMgKi8KKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMjksICgwIDw8IDE0KSB8ICg0IDw8IDEwKSB8ICgwIDw8IDkpIHwgKDMgPDwgNSkgfCAoMSA8PCA0KSB8ICgweDMpKTsKKworCS8vIG5ldmVyIGFjaGlldmVkIGEgbG9jayB3aXRoIHRoYXQgYmFuZHdpZHRoIHNvIGZhciAtIHdhaXQgZm9yIHRpbWZyZXEgdG8gdXBkYXRlCisJaWYgKHN0YXRlLT50aW1mID09IDApCisJCW1zbGVlcCgyMDApOworCisJLy9kdW1wX3JlZyhzdGF0ZSk7CisJLyogUF90aW1mX2FscGhhLCBQX2Nvcm1fYWxwaGE9NiwgUF9jb3JtX3RocmVzPTB4ODAgKi8KKwl2YWx1ZSA9ICg2IDw8IDgpIHwgMHg4MDsKKwlzd2l0Y2ggKGNoLT5uZmZ0KSB7CisJCWNhc2UgMDogdmFsdWUgfD0gKDcgPDwgMTIpOyBicmVhazsKKwkJY2FzZSAxOiB2YWx1ZSB8PSAoOSA8PCAxMik7IGJyZWFrOworCQljYXNlIDI6IHZhbHVlIHw9ICg4IDw8IDEyKTsgYnJlYWs7CisJfQorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyNiwgdmFsdWUpOworCisJLyogUF9jdHJsX2ZyZWV6ZV9waGFfc2hpZnQ9MCwgUF9jdHJsX3BoYV9vZmZfbWF4ICovCisJdmFsdWUgPSAoMCA8PCA0KTsKKwlzd2l0Y2ggKGNoLT5uZmZ0KSB7CisJCWNhc2UgMDogdmFsdWUgfD0gMHg2OyBicmVhazsKKwkJY2FzZSAxOiB2YWx1ZSB8PSAweDg7IGJyZWFrOworCQljYXNlIDI6IHZhbHVlIHw9IDB4NzsgYnJlYWs7CisJfQorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAzMiwgdmFsdWUpOworCisJLyogUF9jdHJsX3NmcmVxX2luaD0wLCBQX2N0cmxfc2ZyZXFfc3RlcCAqLworCXZhbHVlID0gKDAgPDwgNCk7CisJc3dpdGNoIChjaC0+bmZmdCkgeworCQljYXNlIDA6IHZhbHVlIHw9IDB4NjsgYnJlYWs7CisJCWNhc2UgMTogdmFsdWUgfD0gMHg4OyBicmVhazsKKwkJY2FzZSAyOiB2YWx1ZSB8PSAweDc7IGJyZWFrOworCX0KKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMzMsICB2YWx1ZSk7CisKKwkvLyB3ZSBhY2hpZXZlZCBhIGxvY2sgLSBpdCdzIHRpbWUgdG8gdXBkYXRlIHRoZSBvc2MgZnJlcQorCWlmICgoZGliNzAwMG1fcmVhZF93b3JkKHN0YXRlLCA1MzUpID4+IDYpICAmIDB4MSkKKwkJZGliNzAwMG1fdXBkYXRlX3RpbWZfZnJlcShzdGF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRpYjcwMDBtX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QpCit7CisJc3RydWN0IGRpYjcwMDBtX3N0YXRlICpzdGF0ZSA9IGRlbW9kLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQgPSAwOworCXU4IG8gPSBzdGF0ZS0+cmVnX29mZnM7CisKKwlkaWI3MDAwbV9zZXRfcG93ZXJfbW9kZShzdGF0ZSwgRElCNzAwME1fUE9XRVJfQUxMKTsKKworCWlmIChkaWI3MDAwbV9zZXRfYWRjX3N0YXRlKHN0YXRlLCBESUJYMDAwX1NMT1dfQURDX09OKSAhPSAwKQorCQlkcHJpbnRrKCItRS0gIGNvdWxkIG5vdCBzdGFydCBTbG93IEFEQ1xuIik7CisKKwlpZiAoc3RhdGUtPmNmZy5kdmJ0X21vZGUpCisJCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDE3OTYsIDB4MCk7IC8vIHNlbGVjdCBEVkItVCBvdXRwdXQKKworCWlmIChzdGF0ZS0+Y2ZnLm1vYmlsZV9tb2RlKQorCQlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMjYxICsgbywgMik7CisJZWxzZQorCQlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMjI0ICsgbywgMSk7CisKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTczICsgbywgMCk7CisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDE3NCArIG8sIDApOworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxNzUgKyBvLCAwKTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTc2ICsgbywgMCk7CisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDE3NyArIG8sIDApOworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxNzggKyBvLCAwKTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTc5ICsgbywgMCk7CisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDE4MCArIG8sIDApOworCisJLy8gUF9jb3JtX3RocmVzIExvY2sgYWxnb3JpdGhtcyBjb25maWd1cmF0aW9uCisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDI2LCAweDY2ODApOworCisJLy8gUF9wYWxmX2FscGhhX3JlZ3VsLCBQX3BhbGZfZmlsdGVyX2ZyZWV6ZSwgUF9wYWxmX2ZpbHRlcl9vbgorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxNzAgKyBvLCAweDA0MTApOworCS8vIFBfZmZ0X25iX3RvX2N1dAorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxODIgKyBvLCA4MTkyKTsKKwkvLyBQX3BoYTNfdGhyZXMKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTk1ICsgbywgMHgwY2NkKTsKKwkvLyBQX2N0aV91c2VfY3BlLCBQX2N0aV91c2VfcHJvZworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxOTYgKyBvLCAgICAgMCk7CisJLy8gUF9jc3B1X3JlZ3VsLCBQX2NzcHVfd2luX2N1dAorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyMDUgKyBvLCAweDIwMGYpOworCS8vIFBfYWRwX3JlZ3VsX2NudAorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyMTQgKyBvLCAweDAyM2QpOworCS8vIFBfYWRwX25vaXNlX2NudAorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyMTUgKyBvLCAweDAwYTQpOworCS8vIFBfYWRwX3JlZ3VsX2V4dAorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyMTYgKyBvLCAweDAwYTQpOworCS8vIFBfYWRwX25vaXNlX2V4dAorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyMTcgKyBvLCAweDdmZjApOworCS8vIFBfYWRwX2ZpbAorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyMTggKyBvLCAweDNjY2MpOworCisJLy8gUF8yZF9ieXBfdGlfbnVtCisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDIyNiArIG8sIDApOworCisJLy8gUF9mZWNfKgorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyODEgKyBvLCAweDAwMTApOworCS8vIFBfc21vX21vZGUsIFBfc21vX3JzX2Rpc2NhcmQsIFBfc21vX2ZpZm9fZmx1c2gsIFBfc21vX3BpZF9wYXJzZSwgUF9zbW9fZXJyb3JfZGlzY2FyZAorCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAyOTQgKyBvLDB4MDA2Mik7CisKKwkvLyBQX2lxY19hbHBoYV9waGEsIFBfaXFjX2FscGhhX2FtcCwgUF9pcWNfZGNjX2FscGhhLCAuLi4KKwlpZihzdGF0ZS0+Y2ZnLnR1bmVyX2lzX2Jhc2ViYW5kKQorCQlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMzYsIDB4MDc1NSk7CisJZWxzZQorCQlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMzYsIDB4MWY1NSk7CisKKwkvLyBhdXRvIHNlYXJjaCBjb25maWd1cmF0aW9uCisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDIsICAweDAwMDQpOworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAzLCAgMHgxMDAwKTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgNCwgIDB4MDgxNCk7CisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDYsICAweDAwMWIpOworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA3LCAgMHg3NzQwKTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgOCwgIDB4MDA1Yik7CisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDksICAweDhkODApOworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxMCwgMHgwMWM5KTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTEsIDB4YzM4MCk7CisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDEyLCAweDAwMDApOworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxMywgMHgwMDgwKTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTQsIDB4MDAwMCk7CisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDE1LCAweDAwOTApOworCXJldCB8PSBkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCAxNiwgMHgwMDAxKTsKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgMTcsIDB4ZDRjMCk7CisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDI2MyArIG8sMHgwMDAxKTsKKworCS8vIFBfZGl2Y2xrc2VsPTMgUF9kaXZiaXRzZWw9MQorCWlmIChzdGF0ZS0+cmV2aXNpb24gPT0gMHg0MDAwKQorCQlkaWI3MDAwbV93cml0ZV93b3JkKHN0YXRlLCA5MDksICgzIDw8IDEwKSB8ICgxIDw8IDYpKTsKKwllbHNlCisJCWRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDkwOSwgKDMgPDwgNCkgfCAxKTsKKworCS8vIFR1bmVyIElPIGJhbms6IG1heCBkcml2ZSAoMTRtQSkKKwlyZXQgfD0gZGliNzAwMG1fd3JpdGVfd29yZChzdGF0ZSwgOTEyICwweDJjOGEpOworCisJcmV0IHw9IGRpYjcwMDBtX3dyaXRlX3dvcmQoc3RhdGUsIDE4MTcsIDEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkaWI3MDAwbV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCkKK3sKKwlzdHJ1Y3QgZGliNzAwMG1fc3RhdGUgKnN0ID0gZGVtb2QtPmRlbW9kdWxhdG9yX3ByaXY7CisJZGliNzAwMG1fc2V0X291dHB1dF9tb2RlKHN0LCBPVVRNT0RFX0hJR0hfWik7CisJcmV0dXJuIGRpYjcwMDBtX3NldF9wb3dlcl9tb2RlKHN0LCBESUI3MDAwTV9QT1dFUl9JTlRFUkZBQ0VfT05MWSkgfAorCQlkaWI3MDAwbV9zZXRfYWRjX3N0YXRlKHN0LCBESUJYMDAwX1NMT1dfQURDX09GRikgfAorCQlkaWI3MDAwbV9zZXRfYWRjX3N0YXRlKHN0LCBESUJYMDAwX0FEQ19PRkYpOworfQorCitzdGF0aWMgaW50IGRpYjcwMDBtX2lkZW50aWZ5KHN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUpCit7CisJdTE2IHZhbHVlOworCWlmICgodmFsdWUgPSBkaWI3MDAwbV9yZWFkX3dvcmQoc3RhdGUsIDg5NikpICE9IDB4MDFiMykgeworCQlkcHJpbnRrKCItRS0gIERpQjcwMDBNOiB3cm9uZyBWZW5kb3IgSUQgKHJlYWQ9MHgleClcbiIsdmFsdWUpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwlzdGF0ZS0+cmV2aXNpb24gPSBkaWI3MDAwbV9yZWFkX3dvcmQoc3RhdGUsIDg5Nyk7CisJaWYgKHN0YXRlLT5yZXZpc2lvbiAhPSAweDQwMDAgJiYKKwkJc3RhdGUtPnJldmlzaW9uICE9IDB4NDAwMSAmJgorCQlzdGF0ZS0+cmV2aXNpb24gIT0gMHg0MDAyKSB7CisJCWRwcmludGsoIi1FLSAgRGlCNzAwME06IHdyb25nIERldmljZSBJRCAoJXgpXG4iLHZhbHVlKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJLyogcHJvdGVjdCB0aGlzIGRyaXZlciB0byBiZSB1c2VkIHdpdGggNzAwMFBDICovCisJaWYgKHN0YXRlLT5yZXZpc2lvbiA9PSAweDQwMDAgJiYgZGliNzAwMG1fcmVhZF93b3JkKHN0YXRlLCA3NjkpID09IDB4NDAwMCkgeworCQlkcHJpbnRrKCItRS0gIERpQjcwMDBNOiB0aGlzIGRyaXZlciBkb2VzIG5vdCB3b3JrIHdpdGggRGlCNzAwMFBDXG4iKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJc3dpdGNoIChzdGF0ZS0+cmV2aXNpb24pIHsKKwkJY2FzZSAweDQwMDA6IGRwcmludGsoIi1JLSAgZm91bmQgRGlCNzAwME1BL1BBL01CL1BCXG4iKTsgYnJlYWs7CisJCWNhc2UgMHg0MDAxOiBzdGF0ZS0+cmVnX29mZnMgPSAxOyBkcHJpbnRrKCItSS0gIGZvdW5kIERpQjcwMDBIQ1xuIik7IGJyZWFrOworCQljYXNlIDB4NDAwMjogc3RhdGUtPnJlZ19vZmZzID0gMTsgZHByaW50aygiLUktICBmb3VuZCBEaUI3MDAwTUNcbiIpOyBicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGRpYjcwMDBtX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKKwkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3QgZGliNzAwMG1fc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IHRwcyA9IGRpYjcwMDBtX3JlYWRfd29yZChzdGF0ZSw0ODApOworCisJZmVwLT5pbnZlcnNpb24gPSBJTlZFUlNJT05fQVVUTzsKKworCWZlcC0+dS5vZmRtLmJhbmR3aWR0aCA9IHN0YXRlLT5jdXJyZW50X2JhbmR3aWR0aDsKKworCXN3aXRjaCAoKHRwcyA+PiA4KSAmIDB4MykgeworCQljYXNlIDA6IGZlcC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfMks7IGJyZWFrOworCQljYXNlIDE6IGZlcC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7IGJyZWFrOworCQkvKiBjYXNlIDI6IGZlcC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfNEs7IGJyZWFrOyAqLworCX0KKworCXN3aXRjaCAodHBzICYgMHgzKSB7CisJCWNhc2UgMDogZmVwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzMyOyBicmVhazsKKwkJY2FzZSAxOiBmZXAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMTY7IGJyZWFrOworCQljYXNlIDI6IGZlcC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV84OyBicmVhazsKKwkJY2FzZSAzOiBmZXAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfNDsgYnJlYWs7CisJfQorCisJc3dpdGNoICgodHBzID4+IDE0KSAmIDB4MykgeworCQljYXNlIDA6IGZlcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gPSBRUFNLOyBicmVhazsKKwkJY2FzZSAxOiBmZXAtPnUub2ZkbS5jb25zdGVsbGF0aW9uID0gUUFNXzE2OyBicmVhazsKKwkJY2FzZSAyOgorCQlkZWZhdWx0OiBmZXAtPnUub2ZkbS5jb25zdGVsbGF0aW9uID0gUUFNXzY0OyBicmVhazsKKwl9CisKKwkvKiBhcyBsb25nIGFzIHRoZSBmcm9udGVuZF9wYXJhbSBzdHJ1Y3R1cmUgaXMgZml4ZWQgZm9yIGhpZXJhcmNoaWNhbCB0cmFuc21pc3Npb24gSSByZWZ1c2UgdG8gdXNlIGl0ICovCisJLyogKHRwcyA+PiAxMykgJiAweDEgPT0gaHJjaCBpcyB1c2VkLCAodHBzID4+IDEwKSAmIDB4NyA9PSBhbHBoYSAqLworCisJZmVwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX05PTkU7CisJc3dpdGNoICgodHBzID4+IDUpICYgMHg3KSB7CisJCWNhc2UgMTogZmVwLT51Lm9mZG0uY29kZV9yYXRlX0hQID0gRkVDXzFfMjsgYnJlYWs7CisJCWNhc2UgMjogZmVwLT51Lm9mZG0uY29kZV9yYXRlX0hQID0gRkVDXzJfMzsgYnJlYWs7CisJCWNhc2UgMzogZmVwLT51Lm9mZG0uY29kZV9yYXRlX0hQID0gRkVDXzNfNDsgYnJlYWs7CisJCWNhc2UgNTogZmVwLT51Lm9mZG0uY29kZV9yYXRlX0hQID0gRkVDXzVfNjsgYnJlYWs7CisJCWNhc2UgNzoKKwkJZGVmYXVsdDogZmVwLT51Lm9mZG0uY29kZV9yYXRlX0hQID0gRkVDXzdfODsgYnJlYWs7CisKKwl9CisKKwlzd2l0Y2ggKCh0cHMgPj4gMikgJiAweDcpIHsKKwkJY2FzZSAxOiBmZXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfMV8yOyBicmVhazsKKwkJY2FzZSAyOiBmZXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfMl8zOyBicmVhazsKKwkJY2FzZSAzOiBmZXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfM180OyBicmVhazsKKwkJY2FzZSA1OiBmZXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfNV82OyBicmVhazsKKwkJY2FzZSA3OgorCQlkZWZhdWx0OiBmZXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfN184OyBicmVhazsKKwl9CisKKwkvKiBuYXRpdmUgaW50ZXJsZWF2ZXI6IChkaWI3MDAwbV9yZWFkX3dvcmQoc3RhdGUsIDQ4MSkgPj4gIDUpICYgMHgxICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI3MDAwbV9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCisJCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJc3RydWN0IGRpYjcwMDBtX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBkaWJ4MDAwX29mZG1fY2hhbm5lbCBjaDsKKworCUlOSVRfT0ZETV9DSEFOTkVMKCZjaCk7CisJRkVQMkRJQihmZXAsJmNoKTsKKworCXN0YXRlLT5jdXJyZW50X2JhbmR3aWR0aCA9IGZlcC0+dS5vZmRtLmJhbmR3aWR0aDsKKwlkaWI3MDAwbV9zZXRfYmFuZHdpZHRoKGZlLCBmZXAtPnUub2ZkbS5iYW5kd2lkdGgpOworCisJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpCisJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIGZlcCk7CisKKwlpZiAoZmVwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUgPT0gVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8fAorCQlmZXAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCAgICA9PSBHVUFSRF9JTlRFUlZBTF9BVVRPIHx8CisJCWZlcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gICAgID09IFFBTV9BVVRPIHx8CisJCWZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCAgICAgID09IEZFQ19BVVRPKSB7CisJCWludCBpID0gODAwLCBmb3VuZDsKKworCQlkaWI3MDAwbV9hdXRvc2VhcmNoX3N0YXJ0KGZlLCAmY2gpOworCQlkbyB7CisJCQltc2xlZXAoMSk7CisJCQlmb3VuZCA9IGRpYjcwMDBtX2F1dG9zZWFyY2hfaXNfaXJxKGZlKTsKKwkJfSB3aGlsZSAoZm91bmQgPT0gMCAmJiBpLS0pOworCisJCWRwcmludGsoImF1dG9zZWFyY2ggcmV0dXJuczogJWRcbiIsZm91bmQpOworCQlpZiAoZm91bmQgPT0gMCB8fCBmb3VuZCA9PSAxKQorCQkJcmV0dXJuIDA7IC8vIG5vIGNoYW5uZWwgZm91bmQKKworCQlkaWI3MDAwbV9nZXRfZnJvbnRlbmQoZmUsIGZlcCk7CisJCUZFUDJESUIoZmVwLCAmY2gpOworCX0KKworCS8qIG1ha2UgdGhpcyBhIGNvbmZpZyBwYXJhbWV0ZXIgKi8KKwlkaWI3MDAwbV9zZXRfb3V0cHV0X21vZGUoc3RhdGUsIE9VVE1PREVfTVBFRzJfRklGTyk7CisKKwlyZXR1cm4gZGliNzAwMG1fdHVuZShmZSwgJmNoKTsKK30KKworc3RhdGljIGludCBkaWI3MDAwbV9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXQpCit7CisJc3RydWN0IGRpYjcwMDBtX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBsb2NrID0gZGliNzAwMG1fcmVhZF93b3JkKHN0YXRlLCA1MzUpOworCisJKnN0YXQgPSAwOworCisJaWYgKGxvY2sgJiAweDgwMDApCisJCSpzdGF0IHw9IEZFX0hBU19TSUdOQUw7CisJaWYgKGxvY2sgJiAweDMwMDApCisJCSpzdGF0IHw9IEZFX0hBU19DQVJSSUVSOworCWlmIChsb2NrICYgMHgwMTAwKQorCQkqc3RhdCB8PSBGRV9IQVNfVklURVJCSTsKKwlpZiAobG9jayAmIDB4MDAxMCkKKwkJKnN0YXQgfD0gRkVfSEFTX1NZTkM7CisJaWYgKGxvY2sgJiAweDAwMDgpCisJCSpzdGF0IHw9IEZFX0hBU19MT0NLOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMG1fcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQoreworCXN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwkqYmVyID0gKGRpYjcwMDBtX3JlYWRfd29yZChzdGF0ZSwgNTI2KSA8PCAxNikgfCBkaWI3MDAwbV9yZWFkX3dvcmQoc3RhdGUsIDUyNyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMG1fcmVhZF91bmNfYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVuYykKK3sKKwlzdHJ1Y3QgZGliNzAwMG1fc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJKnVuYyA9IGRpYjcwMDBtX3JlYWRfd29yZChzdGF0ZSwgNTM0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI3MDAwbV9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzdHJlbmd0aCkKK3sKKwlzdHJ1Y3QgZGliNzAwMG1fc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IHZhbCA9IGRpYjcwMDBtX3JlYWRfd29yZChzdGF0ZSwgMzkwKTsKKwkqc3RyZW5ndGggPSA2NTUzNSAtIHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI3MDAwbV9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2ICpzbnIpCit7CisJKnNuciA9IDB4MDAwMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI3MDAwbV9mZV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQoreworCXR1bmUtPm1pbl9kZWxheV9tcyA9IDEwMDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjcwMDBtX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QpCit7CisJc3RydWN0IGRpYjcwMDBtX3N0YXRlICpzdCA9IGRlbW9kLT5kZW1vZHVsYXRvcl9wcml2OworCWRpYngwMDBfZXhpdF9pMmNfbWFzdGVyKCZzdC0+aTJjX21hc3Rlcik7CisJa2ZyZWUoc3QpOworfQorCitzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWI3MDAwbV9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaW50ZiwgaW50IGdhdGluZykKK3sKKwlzdHJ1Y3QgZGliNzAwMG1fc3RhdGUgKnN0ID0gZGVtb2QtPmRlbW9kdWxhdG9yX3ByaXY7CisJcmV0dXJuIGRpYngwMDBfZ2V0X2kyY19hZGFwdGVyKCZzdC0+aTJjX21hc3RlciwgaW50ZiwgZ2F0aW5nKTsKK30KK0VYUE9SVF9TWU1CT0woZGliNzAwMG1fZ2V0X2kyY19tYXN0ZXIpOworCitpbnQgZGliNzAwMG1faTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsIHN0cnVjdCBkaWI3MDAwbV9jb25maWcgY2ZnW10pCit7CisJc3RydWN0IGRpYjcwMDBtX3N0YXRlIHN0ID0geyAuaTJjX2FkYXAgPSBpMmMgfTsKKwlpbnQgayA9IDA7CisJdTggbmV3X2FkZHIgPSAwOworCisJZm9yIChrID0gbm9fb2ZfZGVtb2RzLTE7IGsgPj0gMDsgay0tKSB7CisJCXN0LmNmZyA9IGNmZ1trXTsKKworCQkvKiBkZXNpZ25hdGVkIGkyYyBhZGRyZXNzICovCisJCW5ld19hZGRyICAgICAgICAgID0gKDB4NDAgKyBrKSA8PCAxOworCQlzdC5pMmNfYWRkciA9IG5ld19hZGRyOworCQlpZiAoZGliNzAwMG1faWRlbnRpZnkoJnN0KSAhPSAwKSB7CisJCQlzdC5pMmNfYWRkciA9IGRlZmF1bHRfYWRkcjsKKwkJCWlmIChkaWI3MDAwbV9pZGVudGlmeSgmc3QpICE9IDApIHsKKwkJCQlkcHJpbnRrKCJEaUI3MDAwTSAjJWQ6IG5vdCBpZGVudGlmaWVkXG4iLCBrKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorCisJCS8qIHN0YXJ0IGRpdmVyc2l0eSB0byBwdWxsX2Rvd24gZGl2X3N0ciAtIGp1c3QgZm9yIGkyYy1lbnVtZXJhdGlvbiAqLworCQlkaWI3MDAwbV9zZXRfb3V0cHV0X21vZGUoJnN0LCBPVVRNT0RFX0RJVkVSU0lUWSk7CisKKwkJZGliNzAwMG1fd3JpdGVfd29yZCgmc3QsIDE3OTYsIDB4MCk7IC8vIHNlbGVjdCBEVkItVCBvdXRwdXQKKworCQkvKiBzZXQgbmV3IGkyYyBhZGRyZXNzIGFuZCBmb3JjZSBkaXZzdGFydCAqLworCQlkaWI3MDAwbV93cml0ZV93b3JkKCZzdCwgMTc5NCwgKG5ld19hZGRyIDw8IDIpIHwgMHgyKTsKKworCQlkcHJpbnRrKCJJQyAlZCBpbml0aWFsaXplZCAodG8gaTJjX2FkZHJlc3MgMHgleClcbiIsIGssIG5ld19hZGRyKTsKKwl9CisKKwlmb3IgKGsgPSAwOyBrIDwgbm9fb2ZfZGVtb2RzOyBrKyspIHsKKwkJc3QuY2ZnID0gY2ZnW2tdOworCQlzdC5pMmNfYWRkciA9ICgweDQwICsgaykgPDwgMTsKKworCQkvLyB1bmZvcmNlIGRpdnN0cgorCQlkaWI3MDAwbV93cml0ZV93b3JkKCZzdCwxNzk0LCBzdC5pMmNfYWRkciA8PCAyKTsKKworCQkvKiBkZWFjdGl2YXRlIGRpdiAtIGl0IHdhcyBqdXN0IGZvciBpMmMtZW51bWVyYXRpb24gKi8KKwkJZGliNzAwMG1fc2V0X291dHB1dF9tb2RlKCZzdCwgT1VUTU9ERV9ISUdIX1opOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkaWI3MDAwbV9pMmNfZW51bWVyYXRpb24pOworCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgZGliNzAwMG1fb3BzOworc3RydWN0IGR2Yl9mcm9udGVuZCAqIGRpYjcwMDBtX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjcwMDBtX2NvbmZpZyAqY2ZnKQoreworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kOworCXN0cnVjdCBkaWI3MDAwbV9zdGF0ZSAqc3Q7CisJc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGliNzAwMG1fc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3QgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1jcHkoJnN0LT5jZmcsIGNmZywgc2l6ZW9mKHN0cnVjdCBkaWI3MDAwbV9jb25maWcpKTsKKwlzdC0+aTJjX2FkYXAgPSBpMmNfYWRhcDsKKwlzdC0+aTJjX2FkZHIgPSBpMmNfYWRkcjsKKworCWRlbW9kICAgICAgICAgICAgICAgICAgID0gJnN0LT5kZW1vZDsKKwlkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdiA9IHN0OworCW1lbWNweSgmc3QtPmRlbW9kLm9wcywgJmRpYjcwMDBtX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisKKwlpZiAoZGliNzAwMG1faWRlbnRpZnkoc3QpICE9IDApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoc3QtPnJldmlzaW9uID09IDB4NDAwMCkKKwkJZGlieDAwMF9pbml0X2kyY19tYXN0ZXIoJnN0LT5pMmNfbWFzdGVyLCBESUI3MDAwLCBzdC0+aTJjX2FkYXAsIHN0LT5pMmNfYWRkcik7CisJZWxzZQorCQlkaWJ4MDAwX2luaXRfaTJjX21hc3Rlcigmc3QtPmkyY19tYXN0ZXIsIERJQjcwMDBNQywgc3QtPmkyY19hZGFwLCBzdC0+aTJjX2FkZHIpOworCisJZGliNzAwMG1fZGVtb2RfcmVzZXQoc3QpOworCisJcmV0dXJuIGRlbW9kOworCitlcnJvcjoKKwlrZnJlZShzdCk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGRpYjcwMDBtX2F0dGFjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkaWI3MDAwbV9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lID0gIkRpQmNvbSA3MDAwTUEvTUIvUEEvUEIvTUMiLAorCQkudHlwZSA9IEZFX09GRE0sCisJCS5mcmVxdWVuY3lfbWluICAgICAgPSA0NDI1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggICAgICA9IDg2NzI1MDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDYyNTAwLAorCQkuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8CisJCQlGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQkJRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUVBTSyB8IEZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV9BVVRPIHwKKwkJCUZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwKKwkJCUZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwKKwkJCUZFX0NBTl9SRUNPVkVSIHwKKwkJCUZFX0NBTl9ISUVSQVJDSFlfQVVUTywKKwl9LAorCisJLnJlbGVhc2UgICAgICAgICAgICAgID0gZGliNzAwMG1fcmVsZWFzZSwKKworCS5pbml0ICAgICAgICAgICAgICAgICA9IGRpYjcwMDBtX2luaXQsCisJLnNsZWVwICAgICAgICAgICAgICAgID0gZGliNzAwMG1fc2xlZXAsCisKKwkuc2V0X2Zyb250ZW5kICAgICAgICAgPSBkaWI3MDAwbV9zZXRfZnJvbnRlbmQsCisJLmdldF90dW5lX3NldHRpbmdzICAgID0gZGliNzAwMG1fZmVfZ2V0X3R1bmVfc2V0dGluZ3MsCisJLmdldF9mcm9udGVuZCAgICAgICAgID0gZGliNzAwMG1fZ2V0X2Zyb250ZW5kLAorCisJLnJlYWRfc3RhdHVzICAgICAgICAgID0gZGliNzAwMG1fcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyICAgICAgICAgICAgID0gZGliNzAwMG1fcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gZGliNzAwMG1fcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yICAgICAgICAgICAgID0gZGliNzAwMG1fcmVhZF9zbnIsCisJLnJlYWRfdWNibG9ja3MgICAgICAgID0gZGliNzAwMG1fcmVhZF91bmNfYmxvY2tzLAorfTsKKworTU9EVUxFX0FVVEhPUigiUGF0cmljayBCb2V0dGNoZXIgPHBib2V0dGNoZXJAZGliY29tLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBEaUJjb20gNzAwME1BL01CL1BBL1BCL01DIENPRkRNIGRlbW9kdWxhdG9yIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5N2U5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uaApAQCAtMCwwICsxLDUxIEBACisjaWZuZGVmIERJQjcwMDBNX0gKKyNkZWZpbmUgRElCNzAwME1fSAorCisjaW5jbHVkZSAiZGlieDAwMF9jb21tb24uaCIKKworc3RydWN0IGRpYjcwMDBtX2NvbmZpZyB7CisJdTggZHZidF9tb2RlOworCXU4IG91dHB1dF9tcGVnMl9pbl8xODhfYnl0ZXM7CisJdTggaG9zdGJ1c19kaXZlcnNpdHk7CisJdTggdHVuZXJfaXNfYmFzZWJhbmQ7CisJdTggbW9iaWxlX21vZGU7CisJaW50ICgqdXBkYXRlX2xuYSkgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTE2IGFnY19nbG9iYWwpOworCisJdTggYWdjX2NvbmZpZ19jb3VudDsKKwlzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnICphZ2M7CisKKwlzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnICpidzsKKworI2RlZmluZSBESUI3MDAwTV9HUElPX0RFRkFVTFRfRElSRUNUSU9OUyAweGZmZmYKKwl1MTYgZ3Bpb19kaXI7CisjZGVmaW5lIERJQjcwMDBNX0dQSU9fREVGQVVMVF9WQUxVRVMgICAgIDB4MDAwMAorCXUxNiBncGlvX3ZhbDsKKyNkZWZpbmUgRElCNzAwME1fR1BJT19QV01fUE9TMCh2KSAgICAgICAgKCh2ICYgMHhmKSA8PCAxMikKKyNkZWZpbmUgRElCNzAwME1fR1BJT19QV01fUE9TMSh2KSAgICAgICAgKCh2ICYgMHhmKSA8PCA4ICkKKyNkZWZpbmUgRElCNzAwME1fR1BJT19QV01fUE9TMih2KSAgICAgICAgKCh2ICYgMHhmKSA8PCA0ICkKKyNkZWZpbmUgRElCNzAwME1fR1BJT19QV01fUE9TMyh2KSAgICAgICAgICh2ICYgMHhmKQorI2RlZmluZSBESUI3MDAwTV9HUElPX0RFRkFVTFRfUFdNX1BPUyAgICAweGZmZmYKKwl1MTYgZ3Bpb19wd21fcG9zOworCisJdTE2IHB3bV9mcmVxX2RpdjsKKworCXU4IHF1YXJ0el9kaXJlY3Q7CisKKwl1OCBpbnB1dF9jbGtfaXNfZGl2XzI7CisKKwlpbnQgKCphZ2NfY29udHJvbCkgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTggYmVmb3JlKTsKK307CisKKyNkZWZpbmUgREVGQVVMVF9ESUI3MDAwTV9JMkNfQUREUkVTUyAxOAorCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqIGRpYjcwMDBtX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjcwMDBtX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWI3MDAwbV9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlLCBpbnQpOworCisvKiBUT0RPCitleHRlcm4gSU5UIGRpYjcwMDBtX3NldF9ncGlvKHN0cnVjdCBkaWJEZW1vZCAqZGVtb2QsIFVDSEFSIG51bSwgVUNIQVIgZGlyLCBVQ0hBUiB2YWwpOworZXh0ZXJuIElOVCBkaWI3MDAwbV9lbmFibGVfdmJnX3ZvbHRhZ2Uoc3RydWN0IGRpYkRlbW9kICpkZW1vZCk7CitleHRlcm4gdm9pZCBkaWI3MDAwbV9zZXRfaG9zdGJ1c19kaXZlcnNpdHkoc3RydWN0IGRpYkRlbW9kICpkZW1vZCwgVUNIQVIgb25vZmYpOworZXh0ZXJuIFVTSE9SVCBkaWI3MDAwbV9nZXRfY3VycmVudF9hZ2NfZ2xvYmFsKHN0cnVjdCBkaWJEZW1vZCAqZGVtb2QpOworKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDlhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwpAQCAtMCwwICsxLDEwMTkgQEAKKy8qCisgKiBMaW51eC1EVkIgRHJpdmVyIGZvciBEaUJjb20ncyBzZWNvbmQgZ2VuZXJhdGlvbiBEaUI3MDAwUCAoUEMpLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS02IERpQmNvbSAoaHR0cDovL3d3dy5kaWJjb20uZnIvKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworI2luY2x1ZGUgImRpYjcwMDBwLmgiCisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAidHVybiBvbiBkZWJ1Z2dpbmcgKGRlZmF1bHQ6IDApIik7CisKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBkbyB7IGlmIChkZWJ1ZykgeyBwcmludGsoS0VSTl9ERUJVRyAiRGlCNzAwMFA6Iik7IHByaW50ayhhcmdzKTsgfSB9IHdoaWxlICgwKQorCitzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgeworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZGVtb2Q7CisgICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyBjZmc7CisKKwl1OCBpMmNfYWRkcjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgICAqaTJjX2FkYXA7CisKKwlzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyIGkyY19tYXN0ZXI7CisKKwl1MTYgd2JkX3JlZjsKKworCXU4IGN1cnJlbnRfYmFuZDsKKwlmZV9iYW5kd2lkdGhfdCBjdXJyZW50X2JhbmR3aWR0aDsKKwlzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnICpjdXJyZW50X2FnYzsKKwl1MzIgdGltZjsKKworCXUxNiBncGlvX2RpcjsKKwl1MTYgZ3Bpb192YWw7Cit9OworCitlbnVtIGRpYjcwMDBwX3Bvd2VyX21vZGUgeworCURJQjcwMDBQX1BPV0VSX0FMTCA9IDAsCisJRElCNzAwMFBfUE9XRVJfSU5URVJGQUNFX09OTFksCit9OworCitzdGF0aWMgdTE2IGRpYjcwMDBwX3JlYWRfd29yZChzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlLCB1MTYgcmVnKQoreworCXU4IHdiWzJdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiB9OworCXU4IHJiWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJeyAuYWRkciA9IHN0YXRlLT5pMmNfYWRkciA+PiAxLCAuZmxhZ3MgPSAwLCAgICAgICAgLmJ1ZiA9IHdiLCAubGVuID0gMiB9LAorCQl7IC5hZGRyID0gc3RhdGUtPmkyY19hZGRyID4+IDEsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gcmIsIC5sZW4gPSAyIH0sCisJfTsKKworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmkyY19hZGFwLCBtc2csIDIpICE9IDIpCisJCWRwcmludGsoImkyYyByZWFkIGVycm9yIG9uICVkXG4iLHJlZyk7CisKKwlyZXR1cm4gKHJiWzBdIDw8IDgpIHwgcmJbMV07Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMHBfd3JpdGVfd29yZChzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXU4IGJbNF0gPSB7CisJCShyZWcgPj4gOCkgJiAweGZmLCByZWcgJiAweGZmLAorCQkodmFsID4+IDgpICYgMHhmZiwgdmFsICYgMHhmZiwKKwl9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBzdGF0ZS0+aTJjX2FkZHIgPj4gMSwgLmZsYWdzID0gMCwgLmJ1ZiA9IGIsIC5sZW4gPSA0CisJfTsKKwlyZXR1cm4gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSA/IC1FUkVNT1RFSU8gOiAwOworfQorc3RhdGljIGludCBkaWI3MDAwcF9zZXRfb3V0cHV0X21vZGUoc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSwgaW50IG1vZGUpCit7CisJaW50ICAgIHJldCA9IDA7CisJdTE2IG91dHJlZywgZmlmb190aHJlc2hvbGQsIHNtb19tb2RlOworCisJb3V0cmVnID0gMDsKKwlmaWZvX3RocmVzaG9sZCA9IDE3OTI7CisJc21vX21vZGUgPSAoZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLCAyMzUpICYgMHgwMDEwKSB8ICgxIDw8IDEpOworCisJZHByaW50aygiLUktICBTZXR0aW5nIG91dHB1dCBtb2RlIGZvciBkZW1vZCAlcCB0byAlZFxuIiwKKwkJCSZzdGF0ZS0+ZGVtb2QsIG1vZGUpOworCisJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgT1VUTU9ERV9NUEVHMl9QQVJfR0FURURfQ0xLOiAgIC8vIFNUQnMgd2l0aCBwYXJhbGxlbCBnYXRlZCBjbG9jaworCQkJb3V0cmVnID0gKDEgPDwgMTApOyAgLyogMHgwNDAwICovCisJCQlicmVhazsKKwkJY2FzZSBPVVRNT0RFX01QRUcyX1BBUl9DT05UX0NMSzogICAgLy8gU1RCcyB3aXRoIHBhcmFsbGVsIGNvbnRpbnVlcyBjbG9jaworCQkJb3V0cmVnID0gKDEgPDwgMTApIHwgKDEgPDwgNik7IC8qIDB4MDQ0MCAqLworCQkJYnJlYWs7CisJCWNhc2UgT1VUTU9ERV9NUEVHMl9TRVJJQUw6ICAgICAgICAgIC8vIFNUQnMgd2l0aCBzZXJpYWwgaW5wdXQKKwkJCW91dHJlZyA9ICgxIDw8IDEwKSB8ICgyIDw8IDYpIHwgKDAgPDwgMSk7IC8qIDB4MDQ4MCAqLworCQkJYnJlYWs7CisJCWNhc2UgT1VUTU9ERV9ESVZFUlNJVFk6CisJCQlpZiAoc3RhdGUtPmNmZy5ob3N0YnVzX2RpdmVyc2l0eSkKKwkJCQlvdXRyZWcgPSAoMSA8PCAxMCkgfCAoNCA8PCA2KTsgLyogMHgwNTAwICovCisJCQllbHNlCisJCQkJb3V0cmVnID0gKDEgPDwgMTEpOworCQkJYnJlYWs7CisJCWNhc2UgT1VUTU9ERV9NUEVHMl9GSUZPOiAgICAgICAgICAgIC8vIGUuZy4gVVNCIGZlZWRpbmcKKwkJCXNtb19tb2RlIHw9ICgzIDw8IDEpOworCQkJZmlmb190aHJlc2hvbGQgPSA1MTI7CisJCQlvdXRyZWcgPSAoMSA8PCAxMCkgfCAoNSA8PCA2KTsKKwkJCWJyZWFrOworCQljYXNlIE9VVE1PREVfSElHSF9aOiAgLy8gZGlzYWJsZQorCQkJb3V0cmVnID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZHByaW50aygiVW5oYW5kbGVkIG91dHB1dF9tb2RlIHBhc3NlZCB0byBiZSBzZXQgZm9yIGRlbW9kICVwXG4iLCZzdGF0ZS0+ZGVtb2QpOworCQkJYnJlYWs7CisJfQorCisJaWYgKHN0YXRlLT5jZmcub3V0cHV0X21wZWcyX2luXzE4OF9ieXRlcykKKwkJc21vX21vZGUgfD0gKDEgPDwgNSkgOworCisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsICAyMzUsIHNtb19tb2RlKTsKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgIDIzNiwgZmlmb190aHJlc2hvbGQpOyAvKiBzeW5jaHJvbm91cyBmcmVhZCAqLworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxMjg2LCBvdXRyZWcpOyAgICAgICAgIC8qIFBfRGl2X2FjdGl2ZSAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkaWI3MDAwcF9zZXRfcG93ZXJfbW9kZShzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlLCBlbnVtIGRpYjcwMDBwX3Bvd2VyX21vZGUgbW9kZSkKK3sKKwkvKiBieSBkZWZhdWx0IGV2ZXJ5dGhpbmcgaXMgcG93ZXJlZCBvZmYgKi8KKwl1MTYgcmVnXzc3NCA9IDB4ZmZmZiwgcmVnXzc3NSA9IDB4ZmZmZiwgcmVnXzc3NiA9IDB4MDAwNywgcmVnXzg5OSAgPSAweDAwMDMsCisJCXJlZ18xMjgwID0gKDB4ZmUwMCkgfCAoZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLCAxMjgwKSAmIDB4MDFmZik7CisKKwkvKiBub3csIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdGVkIG1vZGUsIHdlIHBvd2VyIG9uICovCisJc3dpdGNoIChtb2RlKSB7CisJCS8qIHBvd2VyIHVwIGV2ZXJ5dGhpbmcgaW4gdGhlIGRlbW9kICovCisJCWNhc2UgRElCNzAwMFBfUE9XRVJfQUxMOgorCQkJcmVnXzc3NCA9IDB4MDAwMDsgcmVnXzc3NSA9IDB4MDAwMDsgcmVnXzc3NiA9IDB4MDsgcmVnXzg5OSA9IDB4MDsgcmVnXzEyODAgJj0gMHgwMWZmOworCQkJYnJlYWs7CisJCS8qIGp1c3QgbGVhdmUgcG93ZXIgb24gdGhlIGNvbnRyb2wtaW50ZXJmYWNlczogR1BJTyBhbmQgKEkyQyBvciBTRElPKSAqLworCQljYXNlIERJQjcwMDBQX1BPV0VSX0lOVEVSRkFDRV9PTkxZOiAvKiBUT0RPIHBvd2VyIHVwIGVpdGhlciBTRElPIG9yIEkyQyAqLworCQkJcmVnXzEyODAgJj0gfigoMSA8PCAxNCkgfCAoMSA8PCAxMykgfCAoMSA8PCAxMikgfCAoMSA8PCAxMCkpOworCQkJYnJlYWs7CisvKiBUT0RPIGZvbGxvd2luZyBzdHVmZiBpcyBqdXN0IGNvbnZlcnRlZCBmcm9tIHRoZSBkaWI3MDAwLWRyaXZlciAtIGNoZWNrIHdoZW4gaXMgdXNlZCB3aGF0ICovCisJfQorCisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgIDc3NCwgIHJlZ183NzQpOworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsICA3NzUsICByZWdfNzc1KTsKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAgNzc2LCAgcmVnXzc3Nik7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgIDg5OSwgIHJlZ184OTkpOworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDEyODAsIHJlZ18xMjgwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaWI3MDAwcF9zZXRfYWRjX3N0YXRlKHN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3RhdGUsIGVudW0gZGlieDAwMF9hZGNfc3RhdGVzIG5vKQoreworCXUxNiByZWdfOTA4ID0gZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLCA5MDgpLAorCSAgICAgICByZWdfOTA5ID0gZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLCA5MDkpOworCisJc3dpdGNoIChubykgeworCQljYXNlIERJQlgwMDBfU0xPV19BRENfT046CisJCQlyZWdfOTA5IHw9ICgxIDw8IDEpIHwgKDEgPDwgMCk7CisJCQlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA5MDksIHJlZ185MDkpOworCQkJcmVnXzkwOSAmPSB+KDEgPDwgMSk7CisJCQlicmVhazsKKworCQljYXNlIERJQlgwMDBfU0xPV19BRENfT0ZGOgorCQkJcmVnXzkwOSB8PSAgKDEgPDwgMSkgfCAoMSA8PCAwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRElCWDAwMF9BRENfT046CisJCQlyZWdfOTA4ICY9IDB4MGZmZjsKKwkJCXJlZ185MDkgJj0gMHgwMDAzOworCQkJYnJlYWs7CisKKwkJY2FzZSBESUJYMDAwX0FEQ19PRkY6IC8vIGxlYXZlIHRoZSBWQkcgdm9sdGFnZSBvbgorCQkJcmVnXzkwOCB8PSAoMSA8PCAxNCkgfCAoMSA8PCAxMykgfCAoMSA8PCAxMik7CisJCQlyZWdfOTA5IHw9ICgxIDw8IDUpIHwgKDEgPDwgNCkgfCAoMSA8PCAzKSB8ICgxIDw8IDIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBESUJYMDAwX1ZCR19FTkFCTEU6CisJCQlyZWdfOTA4ICY9IH4oMSA8PCAxNSk7CisJCQlicmVhazsKKworCQljYXNlIERJQlgwMDBfVkJHX0RJU0FCTEU6CisJCQlyZWdfOTA4IHw9ICgxIDw8IDE1KTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKy8vCWRwcmludGsoIjkwODogJXgsIDkwOTogJXhcbiIsIHJlZ185MDgsIHJlZ185MDkpOworCisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgOTA4LCByZWdfOTA4KTsKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA5MDksIHJlZ185MDkpOworfQorCitzdGF0aWMgaW50IGRpYjcwMDBwX3NldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsIHU4IEJXX0lkeCkKK3sKKwlzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlID0gZGVtb2QtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTMyIHRpbWY7CisKKwkvLyBzdG9yZSB0aGUgY3VycmVudCBiYW5kd2lkdGggZm9yIGxhdGVyIHVzZQorCXN0YXRlLT5jdXJyZW50X2JhbmR3aWR0aCA9IEJXX0lkeDsKKworCWlmIChzdGF0ZS0+dGltZiA9PSAwKSB7CisJCWRwcmludGsoIi1ELSAgVXNpbmcgZGVmYXVsdCB0aW1mXG4iKTsKKwkJdGltZiA9IHN0YXRlLT5jZmcuYnctPnRpbWY7CisJfSBlbHNlIHsKKwkJZHByaW50aygiLUQtICBVc2luZyB1cGRhdGVkIHRpbWZcbiIpOworCQl0aW1mID0gc3RhdGUtPnRpbWY7CisJfQorCisJdGltZiA9IHRpbWYgKiAoQldfSU5ERVhfVE9fS0haKEJXX0lkeCkgLyAxMDApIC8gODA7CisKKwlkcHJpbnRrKCJ0aW1mOiAlZFxuIix0aW1mKTsKKworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDIzLCAodGltZiA+PiAxNikgJiAweGZmZmYpOworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDI0LCAodGltZiAgICAgICkgJiAweGZmZmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMHBfc2FkX2NhbGliKHN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3RhdGUpCit7CisvKiBpbnRlcm5hbCAqLworLy8JZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgNzIsICgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1MjQgPDwgMCkpOyAvLyBzYW1wbGluZyBjbG9jayBvZiB0aGUgU0FEIGlzIHdyaXR0aW5nIGluIHNldF9iYW5kd2lkdGgKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA3MywgKDAgPDwgMSkgfCAoMCA8PCAwKSk7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgNzQsIDc3Nik7IC8vIDAuNjI1KjMuMyAvIDQwOTYKKworCS8qIGRvIHRoZSBjYWxpYnJhdGlvbiAqLworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDczLCAoMSA8PCAwKSk7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgNzMsICgwIDw8IDApKTsKKworCW1zbGVlcCgxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaWI3MDAwcF9yZXNldF9wbGwoc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnICpidyA9ICZzdGF0ZS0+Y2ZnLmJ3WzBdOworCisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgOTAzLCAoYnctPnBsbF9wcmVkaXYgPDwgNSkgfCAoKChidy0+cGxsX3JhdGlvID4+IDYpICYgMHgzKSA8PCAzKSB8IChidy0+cGxsX3JhbmdlIDw8IDEpIHwgYnctPnBsbF9yZXNldCk7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgOTAwLCAoKGJ3LT5wbGxfcmF0aW8gJiAweDNmKSA8PCA5KSB8IChidy0+cGxsX2J5cGFzcyA8PCAxNSkgfCAoYnctPm1vZHVsbyA8PCA3KSB8IChidy0+QURDbGtTcmMgPDwgNikgfAorCQkoYnctPklPX0NMS19lbl9jb3JlIDw8IDUpIHwgKGJ3LT5ieXBjbGtfZGl2IDw8IDIpIHwgKGJ3LT5lbmFibGVfcmVmZGl2IDw8IDEpIHwgKDAgPDwgMCkpOworCisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTgsICgoYnctPmludGVybmFsKjEwMDApID4+IDE2KSAmIDB4ZmZmZik7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTksICAoYnctPmludGVybmFsKjEwMDAgICAgICAgKSAmIDB4ZmZmZik7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMjEsICAoYnctPmlmcmVxICAgICAgICAgID4+IDE2KSAmIDB4ZmZmZik7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMjIsICAoYnctPmlmcmVxICAgICAgICAgICAgICAgKSAmIDB4ZmZmZik7CisKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA3MiwgYnctPnNhZF9jZmcpOworfQorCitzdGF0aWMgaW50IGRpYjcwMDBwX3Jlc2V0X2dwaW8oc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdCkKK3sKKwkvKiByZXNldCB0aGUgR1BJT3MgKi8KKwlkcHJpbnRrKCItRC0gIGdwaW8gZGlyOiAleDogZ3BpbyB2YWw6ICV4LCBncGlvIHB3bSBwb3M6ICV4XG4iLHN0LT5ncGlvX2Rpciwgc3QtPmdwaW9fdmFsLHN0LT5jZmcuZ3Bpb19wd21fcG9zKTsKKworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3QsIDEwMjksIHN0LT5ncGlvX2Rpcik7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdCwgMTAzMCwgc3QtPmdwaW9fdmFsKTsKKworCS8qIFRPRE8gMTAzMSBpcyBQX2dwaW9fb2QgKi8KKworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3QsIDEwMzIsIHN0LT5jZmcuZ3Bpb19wd21fcG9zKTsKKworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3QsIDEwMzcsIHN0LT5jZmcucHdtX2ZyZXFfZGl2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI3MDAwcF9kZW1vZF9yZXNldChzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlKQoreworCWRpYjcwMDBwX3NldF9wb3dlcl9tb2RlKHN0YXRlLCBESUI3MDAwUF9QT1dFUl9BTEwpOworCisJZGliNzAwMHBfc2V0X2FkY19zdGF0ZShzdGF0ZSwgRElCWDAwMF9WQkdfRU5BQkxFKTsKKworCS8qIHJlc3RhcnQgYWxsIHBhcnRzICovCisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgIDc3MCwgMHhmZmZmKTsKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAgNzcxLCAweGZmZmYpOworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsICA3NzIsIDB4MDAxZik7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgIDg5OCwgMHgwMDAzKTsKKwkvKiBleGNlcHQgaTJjLCBzZGlvLCBncGlvIC0gY29udHJvbCBpbnRlcmZhY2VzICovCisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTI4MCwgMHgwMWZjIC0gKCgxIDw8IDcpIHwgKDEgPDwgNikgfCAoMSA8PCA1KSkgKTsKKworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsICA3NzAsIDApOworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsICA3NzEsIDApOworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsICA3NzIsIDApOworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsICA4OTgsIDApOworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDEyODAsIDApOworCisJLyogZGVmYXVsdCAqLworCWRpYjcwMDBwX3Jlc2V0X3BsbChzdGF0ZSk7CisKKwlpZiAoZGliNzAwMHBfcmVzZXRfZ3BpbyhzdGF0ZSkgIT0gMCkKKwkJZHByaW50aygiLUUtICBHUElPIHJlc2V0IHdhcyBub3Qgc3VjY2Vzc2Z1bC5cbiIpOworCisJaWYgKGRpYjcwMDBwX3NldF9vdXRwdXRfbW9kZShzdGF0ZSwgT1VUTU9ERV9ISUdIX1opICE9IDApCisJCWRwcmludGsoIi1FLSAgT1VUUFVUX01PREUgY291bGQgbm90IGJlIHJlc2V0dGVkLlxuIik7CisKKwkvKiB1bmZvcmNlIGRpdnN0ciByZWdhcmRsZXNzIHdoZXRoZXIgaTJjIGVudW1lcmF0aW9uIHdhcyBkb25lIG9yIG5vdCAqLworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDEyODUsIGRpYjcwMDBwX3JlYWRfd29yZChzdGF0ZSwgMTI4NSkgJiB+KDEgPDwgMSkgKTsKKworCWRpYjcwMDBwX3NldF9wb3dlcl9tb2RlKHN0YXRlLCBESUI3MDAwUF9QT1dFUl9JTlRFUkZBQ0VfT05MWSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGliNzAwMHBfcmVzdGFydF9hZ2Moc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSkKK3sKKwkvLyBQX3Jlc3RhcnRfaXFjICYgUF9yZXN0YXJ0X2FnYworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDc3MCwgMHgwYzAwKTsKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA3NzAsIDB4MDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjcwMDBwX3VwZGF0ZV9sbmEoc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgaTsKKwl1MTYgZHluX2dhaW47CisKKwkvLyB3aGVuIHRoZXJlIGlzIG5vIExOQSB0byBwcm9ncmFtIHJldHVybiBpbW1lZGlhdGx5CisJaWYgKHN0YXRlLT5jZmcudXBkYXRlX2xuYSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCS8vIHJlYWQgZHluX2dhaW4gaGVyZSAoYmVjYXVzZSBpdCBpcyBkZW1vZC1kZXBlbmRlbnQgYW5kIG5vdCB0dW5lcikKKwkJZHluX2dhaW4gPSBkaWI3MDAwcF9yZWFkX3dvcmQoc3RhdGUsIDM5NCk7CisKKwkJaWYgKHN0YXRlLT5jZmcudXBkYXRlX2xuYSgmc3RhdGUtPmRlbW9kLGR5bl9nYWluKSkgeyAvLyBMTkEgaGFzIGNoYW5nZWQKKwkJCWRpYjcwMDBwX3Jlc3RhcnRfYWdjKHN0YXRlKTsKKwkJCW1zbGVlcCg1KTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpYjcwMDBwX3BsbF9jbGtfY2ZnKHN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3RhdGUpCit7CisJdTE2IHRtcCA9IDA7CisJdG1wID0gZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLCA5MDMpOworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDkwMywgKHRtcCB8IDB4MSkpOyAgIC8vcHdyLXVwIHBsbAorCXRtcCA9IGRpYjcwMDBwX3JlYWRfd29yZChzdGF0ZSwgOTAwKTsKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA5MDAsICh0bXAgJiAweDdmZmYpIHwgKDEgPDwgNikpOyAgICAgLy91c2UgSGlnaCBmcmVxIGNsb2NrCit9CisKK3N0YXRpYyB2b2lkIGRpYjcwMDBwX3VwZGF0ZV90aW1mX2ZyZXEoc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSkKK3sKKwl1MzIgdGltZiA9IChkaWI3MDAwcF9yZWFkX3dvcmQoc3RhdGUsIDQyNykgPDwgMTYpIHwgZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLCA0MjgpOworCXN0YXRlLT50aW1mID0gdGltZiAqIDgwIC8gKEJXX0lOREVYX1RPX0tIWihzdGF0ZS0+Y3VycmVudF9iYW5kd2lkdGgpIC8gMTAwKTsKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAyMywgKHUxNikgKHRpbWYgPj4gMTYpKTsKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAyNCwgKHUxNikgKHRpbWYgJiAweGZmZmYpKTsKKwlkcHJpbnRrKCItRC0gIFVwZGF0ZWQgdGltZl9mcmVxdWVuY3k6ICVkIChkZWZhdWx0OiAlZClcbiIsc3RhdGUtPnRpbWYsIHN0YXRlLT5jZmcuYnctPnRpbWYpOworfQorCitzdGF0aWMgdm9pZCBkaWI3MDAwcF9zZXRfY2hhbm5lbChzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZGlieDAwMF9vZmRtX2NoYW5uZWwgKmNoLCB1OCBzZXEpCit7CisJdTE2IHRtcCwgZXN0WzRdOyAvLyByZWdfMjYsIHJlZ18zMiwgcmVnXzMzLCByZWdfMTg3LCByZWdfMTg4LCByZWdfMTg5LCByZWdfMTkwLCByZWdfMjA3LCByZWdfMjA4OworCisJLyogbmZmdCwgZ3VhcmQsIHFhbSwgYWxwaGEgKi8KKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAwLCAoY2gtPm5mZnQgPDwgNykgfCAoY2gtPmd1YXJkIDw8IDUpIHwgKGNoLT5ucWFtIDw8IDMpIHwgKGNoLT52aXRfYWxwaGEpKTsKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA1LCAoc2VxIDw8IDQpIHwgMSk7IC8qIGRvIG5vdCBmb3JjZSB0cHMsIHNlYXJjaCBsaXN0IDAgKi8KKworCS8qIFBfZGludGxfbmF0aXZlLCBQX2RpbnRsdl9pbnYsIFBfdml0X2hyY2gsIFBfdml0X2NvZGVfcmF0ZSwgUF92aXRfc2VsZWN0X2hwICovCisJdG1wID0gKGNoLT5pbnRsdl9uYXRpdmUgPDwgNikgfCAoY2gtPnZpdF9ocmNoIDw8IDQpIHwgKGNoLT52aXRfc2VsZWN0X2hwICYgMHgxKTsKKwlpZiAoY2gtPnZpdF9ocmNoID09IDAgfHwgY2gtPnZpdF9zZWxlY3RfaHAgPT0gMSkKKwkJdG1wIHw9IChjaC0+dml0X2NvZGVfcmF0ZV9ocCA8PCAxKTsKKwllbHNlCisJCXRtcCB8PSAoY2gtPnZpdF9jb2RlX3JhdGVfbHAgPDwgMSk7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMjA4LCB0bXApOworCisJLyogUF9kdnN5X3N5bmNfd2FpdCAqLworCXN3aXRjaCAoY2gtPm5mZnQpIHsKKwkJY2FzZSAxOiB0bXAgPSAyNTY7IGJyZWFrOworCQljYXNlIDI6IHRtcCA9IDEyODsgYnJlYWs7CisJCWNhc2UgMDoKKwkJZGVmYXVsdDogdG1wID0gNjQ7IGJyZWFrOworCX0KKwl0bXAgKj0gKCgxIDw8IChjaC0+Z3VhcmQpKSAqIDMgLyAyKTsgLy8gYWRkIDUwJSBTRk4gbWFyZ2luCisJdG1wIDw8PSA0OworCisJLyogZGVhY3RpdmUgdGhlIHBvc3NpYmlsaXR5IG9mIGRpdmVyc2l0eSByZWNlcHRpb24gaWYgZXh0ZW5kZWQgaW50ZXJsZWF2ZSAqLworCS8qIFBfZHZzeV9zeW5jX21vZGUgPSAwLCBQX2R2c3lfc3luY19lbmFibGU9MSwgUF9kdmNiX2NvbWJfbW9kZT0yICovCisJaWYgKGNoLT5pbnRsdl9uYXRpdmUgfHwgY2gtPm5mZnQgPT0gMSkKKwkJdG1wIHw9ICgxIDw8IDIpIHwgKDIgPDwgMCk7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMjA3LCB0bXApOworCisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMjYsIDB4NjY4MCk7ICAgLy8gdGltZig2eHh4KQorCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDI5LCAweDEyNzMpOyAgIC8vIGlzaSBpbmgxMjczIG9uMTA3MworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDMyLCAweDAwMDMpOyAgIC8vIHBoYV9vZmZfbWF4KHh4eDMpCisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMzMsIDB4MDAwNSk7ICAgLy8gc2ZyZXEoeHh4NSkKKworCS8qIGNoYW5uZWwgZXN0aW1hdGlvbiBmaW5lIGNvbmZpZ3VyYXRpb24gKi8KKwlzd2l0Y2ggKGNoLT5ucWFtKSB7CisJCWNhc2UgMjoKKwkJCWVzdFswXSA9IDB4MDE0ODsgICAgICAgLyogUF9hZHBfcmVndWxfY250IDAuMDQgKi8KKwkJCWVzdFsxXSA9IDB4ZmZmMDsgICAgICAgLyogUF9hZHBfbm9pc2VfY250IC0wLjAwMiAqLworCQkJZXN0WzJdID0gMHgwMGE0OyAgICAgICAvKiBQX2FkcF9yZWd1bF9leHQgMC4wMiAqLworCQkJZXN0WzNdID0gMHhmZmY4OyAgICAgICAvKiBQX2FkcF9ub2lzZV9leHQgLTAuMDAxICovCisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZXN0WzBdID0gMHgwMjNkOyAgICAgICAvKiBQX2FkcF9yZWd1bF9jbnQgMC4wNyAqLworCQkJZXN0WzFdID0gMHhmZmRmOyAgICAgICAvKiBQX2FkcF9ub2lzZV9jbnQgLTAuMDA0ICovCisJCQllc3RbMl0gPSAweDAwYTQ7ICAgICAgIC8qIFBfYWRwX3JlZ3VsX2V4dCAwLjAyICovCisJCQllc3RbM10gPSAweGZmZjA7ICAgICAgIC8qIFBfYWRwX25vaXNlX2V4dCAtMC4wMDIgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXN0WzBdID0gMHgwOTlhOyAgICAgICAvKiBQX2FkcF9yZWd1bF9jbnQgMC4zICovCisJCQllc3RbMV0gPSAweGZmYWU7ICAgICAgIC8qIFBfYWRwX25vaXNlX2NudCAtMC4wMSAqLworCQkJZXN0WzJdID0gMHgwMzMzOyAgICAgICAvKiBQX2FkcF9yZWd1bF9leHQgMC4xICovCisJCQllc3RbM10gPSAweGZmZjg7ICAgICAgIC8qIFBfYWRwX25vaXNlX2V4dCAtMC4wMDIgKi8KKwkJCWJyZWFrOworCX0KKwlmb3IgKHRtcCA9IDA7IHRtcCA8IDQ7IHRtcCsrKQorCQlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxODcgKyB0bXAsIGVzdFt0bXBdKTsKKworCS8vIHNldCBwb3dlci11cCBsZXZlbDogaW50ZXJmK2FuYWxvZytBR0MKKwlkaWI3MDAwcF9zZXRfcG93ZXJfbW9kZShzdGF0ZSwgRElCNzAwMFBfUE9XRVJfQUxMKTsKKwlkaWI3MDAwcF9zZXRfYWRjX3N0YXRlKHN0YXRlLCBESUJYMDAwX0FEQ19PTik7CisJZGliNzAwMHBfcGxsX2Nsa19jZmcoc3RhdGUpOworCW1zbGVlcCg3KTsKKworCS8vIEFHQyBpbml0aWFsaXphdGlvbgorCWlmIChzdGF0ZS0+Y2ZnLmFnY19jb250cm9sKQorCQlzdGF0ZS0+Y2ZnLmFnY19jb250cm9sKCZzdGF0ZS0+ZGVtb2QsIDEpOworCisJZGliNzAwMHBfcmVzdGFydF9hZ2Moc3RhdGUpOworCisJLy8gd2FpdCBBR0Mgcm91Z2ggbG9jayB0aW1lCisJbXNsZWVwKDUpOworCisJZGliNzAwMHBfdXBkYXRlX2xuYShzdGF0ZSk7CisKKwkvLyB3YWl0IEFHQyBhY2N1cmF0ZSBsb2NrIHRpbWUKKwltc2xlZXAoNyk7CisJaWYgKHN0YXRlLT5jZmcuYWdjX2NvbnRyb2wpCisJCXN0YXRlLT5jZmcuYWdjX2NvbnRyb2woJnN0YXRlLT5kZW1vZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMHBfYXV0b3NlYXJjaF9zdGFydChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwgc3RydWN0IGRpYngwMDBfb2ZkbV9jaGFubmVsICpjaCkKK3sKKwlzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlID0gZGVtb2QtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGRpYngwMDBfb2ZkbV9jaGFubmVsIGF1dG9fY2g7CisJdTMyIHZhbHVlOworCisJSU5JVF9PRkRNX0NIQU5ORUwoJmF1dG9fY2gpOworCWF1dG9fY2guUkZfa0h6ICAgICAgICAgICA9IGNoLT5SRl9rSHo7CisJYXV0b19jaC5CdyAgICAgICAgICAgICAgID0gY2gtPkJ3OworCWF1dG9fY2gubnFhbSAgICAgICAgICAgICA9IDI7CisJYXV0b19jaC5ndWFyZCAgICAgICAgICAgID0gMDsKKwlhdXRvX2NoLm5mZnQgICAgICAgICAgICAgPSAxOworCWF1dG9fY2gudml0X2FscGhhICAgICAgICA9IDE7CisJYXV0b19jaC52aXRfc2VsZWN0X2hwICAgID0gMTsKKwlhdXRvX2NoLnZpdF9jb2RlX3JhdGVfaHAgPSAyOworCWF1dG9fY2gudml0X2NvZGVfcmF0ZV9scCA9IDM7CisJYXV0b19jaC52aXRfaHJjaCAgICAgICAgID0gMDsKKwlhdXRvX2NoLmludGx2X25hdGl2ZSAgICAgPSAxOworCisJZGliNzAwMHBfc2V0X2NoYW5uZWwoc3RhdGUsICZhdXRvX2NoLCA3KTsKKworCS8vIGFsd2F5cyB1c2UgdGhlIHNldHRpbmcgZm9yIDhNSHogaGVyZSBsb2NrX3RpbWUgZm9yIDcsNiBNSHogYXJlIGxvbmdlcgorCXZhbHVlID0gMzAgKiBzdGF0ZS0+Y2ZnLmJ3LT5pbnRlcm5hbDsKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA2LCAgKHUxNikgKCh2YWx1ZSA+PiAxNikgJiAweGZmZmYpKTsgLy8gbG9jazAgd2FpdCB0aW1lCisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgNywgICh1MTYpICAodmFsdWUgICAgICAgICYgMHhmZmZmKSk7IC8vIGxvY2swIHdhaXQgdGltZQorCXZhbHVlID0gMTAwICogc3RhdGUtPmNmZy5idy0+aW50ZXJuYWw7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgOCwgICh1MTYpICgodmFsdWUgPj4gMTYpICYgMHhmZmZmKSk7IC8vIGxvY2sxIHdhaXQgdGltZQorCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDksICAodTE2KSAgKHZhbHVlICAgICAgICAmIDB4ZmZmZikpOyAvLyBsb2NrMSB3YWl0IHRpbWUKKwl2YWx1ZSA9IDUwMCAqIHN0YXRlLT5jZmcuYnctPmludGVybmFsOworCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDEwLCAodTE2KSAoKHZhbHVlID4+IDE2KSAmIDB4ZmZmZikpOyAvLyBsb2NrMiB3YWl0IHRpbWUKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxMSwgKHUxNikgICh2YWx1ZSAgICAgICAgJiAweGZmZmYpKTsgLy8gbG9jazIgd2FpdCB0aW1lCisKKwl2YWx1ZSA9IGRpYjcwMDBwX3JlYWRfd29yZChzdGF0ZSwgMCk7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMCwgKDEgPDwgOSkgfCB2YWx1ZSk7CisJZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLCAxMjg0KTsKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAwLCAodTE2KSB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI3MDAwcF9hdXRvc2VhcmNoX2lzX2lycShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCkKK3sKKwlzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlID0gZGVtb2QtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IGlycV9wZW5kaW5nID0gZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLCAxMjg0KTsKKworCWlmIChpcnFfcGVuZGluZyAmIDB4MSkgLy8gZmFpbGVkCisJCXJldHVybiAxOworCisJaWYgKGlycV9wZW5kaW5nICYgMHgyKSAvLyBzdWNjZWVkZWQKKwkJcmV0dXJuIDI7CisKKwlyZXR1cm4gMDsgLy8gc3RpbGwgcGVuZGluZworfQorCitzdGF0aWMgaW50IGRpYjcwMDBwX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsIHN0cnVjdCBkaWJ4MDAwX29mZG1fY2hhbm5lbCAqY2gpCit7CisJc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSA9IGRlbW9kLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiB0bXAgPSAwOworCisJaWYgKGNoICE9IE5VTEwpCisJCWRpYjcwMDBwX3NldF9jaGFubmVsKHN0YXRlLCBjaCwgMCk7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8vIHJlc3RhcnQgZGVtb2QKKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA3NzAsIDB4NDAwMCk7CisJZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgNzcwLCAweDAwMDApOworCW1zbGVlcCg0NSk7CisKKwkvKiBQX2N0cmxfaW5oX2Nvcj0wLCBQX2N0cmxfYWxwaGFfY29yPTQsIFBfY3RybF9pbmhfaXNpPTAsIFBfY3RybF9hbHBoYV9pc2k9MywgUF9jdHJsX2luaF9jb3I0PTEsIFBfY3RybF9hbHBoYV9jb3I0PTMgKi8KKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAyOSwgKDAgPDwgMTQpIHwgKDQgPDwgMTApIHwgKDAgPDwgOSkgfCAoMyA8PCA1KSB8ICgxIDw8IDQpIHwgKDB4MykpOworCisJLy8gbmV2ZXIgYWNoaWV2ZWQgYSBsb2NrIHdpdGggdGhhdCBiYW5kd2lkdGggc28gZmFyIC0gd2FpdCBmb3Igb3NjLWZyZXEgdG8gdXBkYXRlCisJaWYgKHN0YXRlLT50aW1mID09IDApCisJCW1zbGVlcCgyMDApOworCisJLyogb2Zmc2V0IGxvb3AgcGFyYW1ldGVycyAqLworCisJLyogUF90aW1mX2FscGhhLCBQX2Nvcm1fYWxwaGE9NiwgUF9jb3JtX3RocmVzPTB4ODAgKi8KKwl0bXAgPSAoNiA8PCA4KSB8IDB4ODA7CisJc3dpdGNoIChjaC0+bmZmdCkgeworCQljYXNlIDA6IHRtcCB8PSAoNyA8PCAxMik7IGJyZWFrOworCQljYXNlIDE6IHRtcCB8PSAoOSA8PCAxMik7IGJyZWFrOworCQljYXNlIDI6IHRtcCB8PSAoOCA8PCAxMik7IGJyZWFrOworCX0KKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAyNiwgdG1wKTsgIC8qIHRpbWZfYSg2eHh4KSAqLworCisJLyogUF9jdHJsX2ZyZWV6ZV9waGFfc2hpZnQ9MCwgUF9jdHJsX3BoYV9vZmZfbWF4ICovCisJdG1wID0gKDAgPDwgNCk7CisJc3dpdGNoIChjaC0+bmZmdCkgeworCQljYXNlIDA6IHRtcCB8PSAweDY7IGJyZWFrOworCQljYXNlIDE6IHRtcCB8PSAweDg7IGJyZWFrOworCQljYXNlIDI6IHRtcCB8PSAweDc7IGJyZWFrOworCX0KKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAzMiwgIHRtcCk7CisKKwkvKiBQX2N0cmxfc2ZyZXFfaW5oPTAsIFBfY3RybF9zZnJlcV9zdGVwICovCisJdG1wID0gKDAgPDwgNCk7CisJc3dpdGNoIChjaC0+bmZmdCkgeworCQljYXNlIDA6IHRtcCB8PSAweDY7IGJyZWFrOworCQljYXNlIDE6IHRtcCB8PSAweDg7IGJyZWFrOworCQljYXNlIDI6IHRtcCB8PSAweDc7IGJyZWFrOworCX0KKwlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAzMywgIHRtcCk7CisKKwl0bXAgPSBkaWI3MDAwcF9yZWFkX3dvcmQoc3RhdGUsNTA5KTsKKwlpZiAoISgodG1wID4+IDYpICYgMHgxKSkgeworCQkvKiByZXN0YXJ0IHRoZSBmZWMgKi8KKwkJdG1wID0gZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLDc3MSk7CisJCWRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDc3MSwgdG1wIHwgKDEgPDwgMSkpOworCQlkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA3NzEsIHRtcCk7CisJCW1zbGVlcCgxMCk7CisJCXRtcCA9IGRpYjcwMDBwX3JlYWRfd29yZChzdGF0ZSw1MDkpOworCX0KKworCS8vIHdlIGFjaGlldmVkIGEgbG9jayAtIGl0J3MgdGltZSB0byB1cGRhdGUgdGhlIG9zYyBmcmVxCisJaWYgKCh0bXAgPj4gNikgJiAweDEpCisJCWRpYjcwMDBwX3VwZGF0ZV90aW1mX2ZyZXEoc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMHBfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCkKK3sKKwlzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnICphZ2M7CisJc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSA9IGRlbW9kLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQgPSAwOworCisJLy8gRGVtb2R1bGF0b3IgZGVmYXVsdCBjb25maWd1cmF0aW9uCisJYWdjID0gc3RhdGUtPmNmZy5hZ2M7CisKKwlkaWI3MDAwcF9zZXRfcG93ZXJfbW9kZShzdGF0ZSwgRElCNzAwMFBfUE9XRVJfQUxMKTsKKwlkaWI3MDAwcF9zZXRfYWRjX3N0YXRlKHN0YXRlLCBESUJYMDAwX1NMT1dfQURDX09OKTsKKworCS8qIEFHQyAqLworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA3NSAsICBhZ2MtPnNldHVwICk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDc2ICwgIGFnYy0+aW52X2dhaW4gKTsKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgNzcgLCAgYWdjLT50aW1lX3N0YWJpbGl6ICk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDEwMCwgKGFnYy0+YWxwaGFfbGV2ZWwgPDwgMTIpIHwgYWdjLT50aGxvY2spOworCisJLy8gRGVtb2QgQUdDIGxvb3AgY29uZmlndXJhdGlvbgorCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxMDEsIChhZ2MtPmFscGhhX21hbnQgPDwgNSkgfCBhZ2MtPmFscGhhX2V4cCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDEwMiwgKGFnYy0+YmV0YV9tYW50IDw8IDYpICB8IGFnYy0+YmV0YV9leHApOworCisJLyogQUdDIGNvbnRpbnVlZCAqLworCWRwcmludGsoIi1ELSAgV0JEOiByZWY6ICVkLCBzZWw6ICVkLCBhY3RpdmU6ICVkLCBhbHBoYTogJWRcbiIsCisJCXN0YXRlLT53YmRfcmVmICE9IDAgPyBzdGF0ZS0+d2JkX3JlZiA6IGFnYy0+d2JkX3JlZiwgYWdjLT53YmRfc2VsLCAhYWdjLT5wZXJmb3JtX2FnY19zb2Z0c3BsaXQsIGFnYy0+d2JkX3NlbCk7CisKKwlpZiAoc3RhdGUtPndiZF9yZWYgIT0gMCkKKwkJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDEwNSwgKGFnYy0+d2JkX2ludiA8PCAxMikgfCBzdGF0ZS0+d2JkX3JlZik7CisJZWxzZQorCQlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTA1LCAoYWdjLT53YmRfaW52IDw8IDEyKSB8IGFnYy0+d2JkX3JlZik7CisKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTA2LCAoYWdjLT53YmRfc2VsIDw8IDEzKSB8IChhZ2MtPndiZF9hbHBoYSA8PCA5KSB8IChhZ2MtPnBlcmZvcm1fYWdjX3NvZnRzcGxpdCA8PCA4KSApOworCisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDEwNywgIGFnYy0+YWdjMV9tYXgpOworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxMDgsICBhZ2MtPmFnYzFfbWluKTsKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTA5LCAgYWdjLT5hZ2MyX21heCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDExMCwgIGFnYy0+YWdjMl9taW4pOworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxMTEsIChhZ2MtPmFnYzFfcHQxIDw8IDgpIHwgYWdjLT5hZ2MxX3B0MiApOworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxMTIsICBhZ2MtPmFnYzFfcHQzKTsKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTEzLCAoYWdjLT5hZ2MxX3Nsb3BlMSA8PCA4KSB8IGFnYy0+YWdjMV9zbG9wZTIpOworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxMTQsIChhZ2MtPmFnYzJfcHQxIDw8IDgpIHwgYWdjLT5hZ2MyX3B0Mik7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDExNSwgKGFnYy0+YWdjMl9zbG9wZTEgPDwgOCkgfCBhZ2MtPmFnYzJfc2xvcGUyKTsKKworCS8qIGRpc2FibGUgcG93ZXIgc21vb3RoaW5nICovCisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE0NSwgMCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE0NiwgMCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE0NywgMCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE0OCwgMCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE0OSwgMCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE1MCwgMCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE1MSwgMCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE1MiwgMCk7CisKKwkvLyBQX3RpbWZfYWxwaGE9NiwgUF9jb3JtX2FscGhhPTYsIFBfY29ybV90aHJlcz0xMjggZGVmYXVsdDogNiw0LDI2CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDI2ICwweDY2ODApOworCisJLy8gUF9wYWxmX2ZpbHRlcl9vbj0xLCBQX3BhbGZfZmlsdGVyX2ZyZWV6ZT0wLCBQX3BhbGZfYWxwaGFfcmVndWw9MTYKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTQyLDB4MDQxMCk7CisJLy8gUF9mZnRfZnJlcV9kaXI9MSwgUF9mZnRfbmJfdG9fY3V0PTAKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTU0LDEgPDwgMTMpOworCS8vIFBfcGhhM190aHJlcywgZGVmYXVsdCAweDMwMDAKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTY4LDB4MGNjZCk7CisJLy8gUF9jdGlfdXNlX2NwZT0wLCBQX2N0aV91c2VfcHJvZz0wLCBQX2N0aV93aW5fbGVuPTE2LCBkZWZhdWx0OiAweDAwMTAKKwkvL3JldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxNjksMHgwMDEwKTsKKwkvLyBQX2NzcHVfcmVndWw9NTEyLCBQX2NzcHVfd2luX2N1dD0xNSwgZGVmYXVsdDogMHgyMDA1CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE4MywweDIwMGYpOworCS8vIFBfYWRwX3JlZ3VsX2NudD01NzMsIGRlZmF1bHQ6IDQxMAorCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxODcsMHgwMjNkKTsKKwkvLyBQX2FkcF9ub2lzZV9jbnQ9CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE4OCwweDAwYTQpOworCS8vIFBfYWRwX3JlZ3VsX2V4dAorCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxODksMHgwMGE0KTsKKwkvLyBQX2FkcF9ub2lzZV9leHQKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTkwLDB4N2ZmMCk7CisJLy8gUF9hZHBfZmlsCisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE5MSwweDNjY2MpOworCisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDIyMiwweDAwMTApOworCS8vIFBfc21vX21vZGUsIFBfc21vX3JzX2Rpc2NhcmQsIFBfc21vX2ZpZm9fZmx1c2gsIFBfc21vX3BpZF9wYXJzZSwgUF9zbW9fZXJyb3JfZGlzY2FyZAorCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAyMzUsMHgwMDYyKTsKKworCS8vIFBfaXFjX2FscGhhX3BoYSwgUF9pcWNfYWxwaGFfYW1wX2RjY19hbHBoYSwgLi4uCisJaWYoc3RhdGUtPmNmZy50dW5lcl9pc19iYXNlYmFuZCkKKwkJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDM2LDB4MDc1NSk7CisJZWxzZQorCQlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMzYsMHgxZjU1KTsKKworCS8vIGF1dG8gc2VhcmNoIGNvbmZpZ3VyYXRpb24KKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMiAgLDB4MDAwNCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDMgICwweDEwMDApOworCisJLyogRXF1YWwgTG9jayAqLworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA0ICAgLDB4MDgxNCk7CisKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgNiAgLDB4MDAxYik7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDcgICwweDc3NDApOworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA4ICAsMHgwMDViKTsKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgOSAgLDB4OGQ4MCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDEwICwweDAxYzkpOworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxMSAsMHhjMzgwKTsKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTIgLDB4MDAwMCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDEzICwweDAwODApOworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxNCAsMHgwMDAwKTsKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgMTUgLDB4MDA5MCk7CisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDE2ICwweDAwMDEpOworCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCAxNyAsMHhkNGMwKTsKKworCS8vIFBfY2xrX2NmZzEKKwlyZXQgfD0gZGliNzAwMHBfd3JpdGVfd29yZChzdGF0ZSwgOTAxLCAweDAwMDYpOworCisJLy8gUF9kaXZjbGtzZWw9MyBQX2RpdmJpdHNlbD0xCisJcmV0IHw9IGRpYjcwMDBwX3dyaXRlX3dvcmQoc3RhdGUsIDkwMiwgKDMgPDwgMTApIHwgKDEgPDwgNikpOworCisJLy8gVHVuZXIgSU8gYmFuazogbWF4IGRyaXZlICgxNG1BKSArIGRpdm91dCBwYWRzIG1heCBkcml2ZQorCXJldCB8PSBkaWI3MDAwcF93cml0ZV93b3JkKHN0YXRlLCA5MDUsIDB4MmM4ZSk7CisKKwlyZXQgfD0gZGliNzAwMHBfc2V0X2JhbmR3aWR0aCgmc3RhdGUtPmRlbW9kLCBCQU5EV0lEVEhfOF9NSFopOworCWRpYjcwMDBwX3NhZF9jYWxpYihzdGF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRpYjcwMDBwX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kKQoreworCXN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3RhdGUgPSBkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlyZXR1cm4gZGliNzAwMHBfc2V0X291dHB1dF9tb2RlKHN0YXRlLCBPVVRNT0RFX0hJR0hfWikgfCBkaWI3MDAwcF9zZXRfcG93ZXJfbW9kZShzdGF0ZSwgRElCNzAwMFBfUE9XRVJfSU5URVJGQUNFX09OTFkpOworfQorCitzdGF0aWMgaW50IGRpYjcwMDBwX2lkZW50aWZ5KHN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3QpCit7CisJdTE2IHZhbHVlOworCWRwcmludGsoIi1JLSAgRGlCNzAwMFBDOiBjaGVja2luZyBkZW1vZCBvbiBJMkMgYWRkcmVzczogJWQgKCV4KVxuIiwKKwkJc3QtPmkyY19hZGRyLCBzdC0+aTJjX2FkZHIpOworCisJaWYgKCh2YWx1ZSA9IGRpYjcwMDBwX3JlYWRfd29yZChzdCwgNzY4KSkgIT0gMHgwMWIzKSB7CisJCWRwcmludGsoIi1FLSAgRGlCNzAwMFBDOiB3cm9uZyBWZW5kb3IgSUQgKHJlYWQ9MHgleClcbiIsdmFsdWUpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwlpZiAoKHZhbHVlID0gZGliNzAwMHBfcmVhZF93b3JkKHN0LCA3NjkpKSAhPSAweDQwMDApIHsKKwkJZHByaW50aygiLUUtICBEaUI3MDAwUEM6IHdyb25nIERldmljZSBJRCAoJXgpXG4iLHZhbHVlKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBkaWI3MDAwcF9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCisJCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiB0cHMgPSBkaWI3MDAwcF9yZWFkX3dvcmQoc3RhdGUsNDYzKTsKKworCWZlcC0+aW52ZXJzaW9uID0gSU5WRVJTSU9OX0FVVE87CisKKwlmZXAtPnUub2ZkbS5iYW5kd2lkdGggPSBzdGF0ZS0+Y3VycmVudF9iYW5kd2lkdGg7CisKKwlzd2l0Y2ggKCh0cHMgPj4gOCkgJiAweDMpIHsKKwkJY2FzZSAwOiBmZXAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOyBicmVhazsKKwkJY2FzZSAxOiBmZXAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOyBicmVhazsKKwkJLyogY2FzZSAyOiBmZXAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzRLOyBicmVhazsgKi8KKwl9CisKKwlzd2l0Y2ggKHRwcyAmIDB4MykgeworCQljYXNlIDA6IGZlcC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8zMjsgYnJlYWs7CisJCWNhc2UgMTogZmVwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OyBicmVhazsKKwkJY2FzZSAyOiBmZXAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfODsgYnJlYWs7CisJCWNhc2UgMzogZmVwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzQ7IGJyZWFrOworCX0KKworCXN3aXRjaCAoKHRwcyA+PiAxNCkgJiAweDMpIHsKKwkJY2FzZSAwOiBmZXAtPnUub2ZkbS5jb25zdGVsbGF0aW9uID0gUVBTSzsgYnJlYWs7CisJCWNhc2UgMTogZmVwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV8xNjsgYnJlYWs7CisJCWNhc2UgMjoKKwkJZGVmYXVsdDogZmVwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV82NDsgYnJlYWs7CisJfQorCisJLyogYXMgbG9uZyBhcyB0aGUgZnJvbnRlbmRfcGFyYW0gc3RydWN0dXJlIGlzIGZpeGVkIGZvciBoaWVyYXJjaGljYWwgdHJhbnNtaXNzaW9uIEkgcmVmdXNlIHRvIHVzZSBpdCAqLworCS8qICh0cHMgPj4gMTMpICYgMHgxID09IGhyY2ggaXMgdXNlZCwgKHRwcyA+PiAxMCkgJiAweDcgPT0gYWxwaGEgKi8KKworCWZlcC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOworCXN3aXRjaCAoKHRwcyA+PiA1KSAmIDB4NykgeworCQljYXNlIDE6IGZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ18xXzI7IGJyZWFrOworCQljYXNlIDI6IGZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ18yXzM7IGJyZWFrOworCQljYXNlIDM6IGZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ18zXzQ7IGJyZWFrOworCQljYXNlIDU6IGZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ181XzY7IGJyZWFrOworCQljYXNlIDc6CisJCWRlZmF1bHQ6IGZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ183Xzg7IGJyZWFrOworCisJfQorCisJc3dpdGNoICgodHBzID4+IDIpICYgMHg3KSB7CisJCWNhc2UgMTogZmVwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDXzFfMjsgYnJlYWs7CisJCWNhc2UgMjogZmVwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDXzJfMzsgYnJlYWs7CisJCWNhc2UgMzogZmVwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDXzNfNDsgYnJlYWs7CisJCWNhc2UgNTogZmVwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDXzVfNjsgYnJlYWs7CisJCWNhc2UgNzoKKwkJZGVmYXVsdDogZmVwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDXzdfODsgYnJlYWs7CisJfQorCisJLyogbmF0aXZlIGludGVybGVhdmVyOiAoZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLCA0NjQpID4+ICA1KSAmIDB4MSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMHBfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQoreworCXN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZGlieDAwMF9vZmRtX2NoYW5uZWwgY2g7CisKKwlJTklUX09GRE1fQ0hBTk5FTCgmY2gpOworCUZFUDJESUIoZmVwLCZjaCk7CisKKwlzdGF0ZS0+Y3VycmVudF9iYW5kd2lkdGggPSBmZXAtPnUub2ZkbS5iYW5kd2lkdGg7CisJZGliNzAwMHBfc2V0X2JhbmR3aWR0aChmZSwgZmVwLT51Lm9mZG0uYmFuZHdpZHRoKTsKKworCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKQorCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlLCBmZXApOworCisJaWYgKGZlcC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID09IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfHwKKwkJZmVwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgICAgPT0gR1VBUkRfSU5URVJWQUxfQVVUTyB8fAorCQlmZXAtPnUub2ZkbS5jb25zdGVsbGF0aW9uICAgICA9PSBRQU1fQVVUTyB8fAorCQlmZXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgICAgICA9PSBGRUNfQVVUTykgeworCQlpbnQgaSA9IDgwMCwgZm91bmQ7CisKKwkJZGliNzAwMHBfYXV0b3NlYXJjaF9zdGFydChmZSwgJmNoKTsKKwkJZG8geworCQkJbXNsZWVwKDEpOworCQkJZm91bmQgPSBkaWI3MDAwcF9hdXRvc2VhcmNoX2lzX2lycShmZSk7CisJCX0gd2hpbGUgKGZvdW5kID09IDAgJiYgaS0tKTsKKworCQlkcHJpbnRrKCJhdXRvc2VhcmNoIHJldHVybnM6ICVkXG4iLGZvdW5kKTsKKwkJaWYgKGZvdW5kID09IDAgfHwgZm91bmQgPT0gMSkKKwkJCXJldHVybiAwOyAvLyBubyBjaGFubmVsIGZvdW5kCisKKwkJZGliNzAwMHBfZ2V0X2Zyb250ZW5kKGZlLCBmZXApOworCQlGRVAyRElCKGZlcCwgJmNoKTsKKwl9CisKKwkvKiBtYWtlIHRoaXMgYSBjb25maWcgcGFyYW1ldGVyICovCisJZGliNzAwMHBfc2V0X291dHB1dF9tb2RlKHN0YXRlLCBPVVRNT0RFX01QRUcyX0ZJRk8pOworCisJcmV0dXJuIGRpYjcwMDBwX3R1bmUoZmUsICZjaCk7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMHBfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0KQoreworCXN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MTYgbG9jayA9IGRpYjcwMDBwX3JlYWRfd29yZChzdGF0ZSwgNTA5KTsKKworCSpzdGF0ID0gMDsKKworCWlmIChsb2NrICYgMHg4MDAwKQorCQkqc3RhdCB8PSBGRV9IQVNfU0lHTkFMOworCWlmIChsb2NrICYgMHgzMDAwKQorCQkqc3RhdCB8PSBGRV9IQVNfQ0FSUklFUjsKKwlpZiAobG9jayAmIDB4MDEwMCkKKwkJKnN0YXQgfD0gRkVfSEFTX1ZJVEVSQkk7CisJaWYgKGxvY2sgJiAweDAwMTApCisJCSpzdGF0IHw9IEZFX0hBU19TWU5DOworCWlmIChsb2NrICYgMHgwMDA4KQorCQkqc3RhdCB8PSBGRV9IQVNfTE9DSzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjcwMDBwX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJKmJlciA9IChkaWI3MDAwcF9yZWFkX3dvcmQoc3RhdGUsIDUwMCkgPDwgMTYpIHwgZGliNzAwMHBfcmVhZF93b3JkKHN0YXRlLCA1MDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjcwMDBwX3JlYWRfdW5jX2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1bmMpCit7CisJc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCSp1bmMgPSBkaWI3MDAwcF9yZWFkX3dvcmQoc3RhdGUsIDUwNik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMHBfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCit7CisJc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiB2YWwgPSBkaWI3MDAwcF9yZWFkX3dvcmQoc3RhdGUsIDM5NCk7CisJKnN0cmVuZ3RoID0gNjU1MzUgLSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMHBfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiAqc25yKQoreworCSpzbnIgPSAweDAwMDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGliNzAwMHBfZmVfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqdHVuZSkKK3sKKwl0dW5lLT5taW5fZGVsYXlfbXMgPSAxMDAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaWI3MDAwcF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kKQoreworCXN0cnVjdCBkaWI3MDAwcF9zdGF0ZSAqc3QgPSBkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlkaWJ4MDAwX2V4aXRfaTJjX21hc3Rlcigmc3QtPmkyY19tYXN0ZXIpOworCWtmcmVlKHN0KTsKK30KKworaW50IGRpYjcwMDBwY19kZXRlY3Rpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCkKK3sKKwl1OCB0eFsyXSwgcnhbMl07CisJc3RydWN0IGkyY19tc2cgbXNnWzJdID0geworCQl7IC5hZGRyID0gMTggPj4gMSwgLmZsYWdzID0gMCwgICAgICAgIC5idWYgPSB0eCwgLmxlbiA9IDIgfSwKKwkJeyAuYWRkciA9IDE4ID4+IDEsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gcngsIC5sZW4gPSAyIH0sCisJfTsKKworCXR4WzBdID0gMHgwMzsKKwl0eFsxXSA9IDB4MDA7CisKKwlpZiAoaTJjX3RyYW5zZmVyKGkyY19hZGFwLCBtc2csIDIpID09IDIpCisJCWlmIChyeFswXSA9PSAweDAxICYmIHJ4WzFdID09IDB4YjMpIHsKKwkJCWRwcmludGsoIi1ELSAgRGlCNzAwMFBDIGRldGVjdGVkXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisKKwltc2dbMF0uYWRkciA9IG1zZ1sxXS5hZGRyID0gMHg0MDsKKworCWlmIChpMmNfdHJhbnNmZXIoaTJjX2FkYXAsIG1zZywgMikgPT0gMikKKwkJaWYgKHJ4WzBdID09IDB4MDEgJiYgcnhbMV0gPT0gMHhiMykgeworCQkJZHByaW50aygiLUQtICBEaUI3MDAwUEMgZGV0ZWN0ZWRcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKworCWRwcmludGsoIi1ELSAgRGlCNzAwMFBDIG5vdCBkZXRlY3RlZFxuIik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRpYjcwMDBwY19kZXRlY3Rpb24pOworCitzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWI3MDAwcF9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaW50ZiwgaW50IGdhdGluZykKK3sKKwlzdHJ1Y3QgZGliNzAwMHBfc3RhdGUgKnN0ID0gZGVtb2QtPmRlbW9kdWxhdG9yX3ByaXY7CisJcmV0dXJuIGRpYngwMDBfZ2V0X2kyY19hZGFwdGVyKCZzdC0+aTJjX21hc3RlciwgaW50ZiwgZ2F0aW5nKTsKK30KK0VYUE9SVF9TWU1CT0woZGliNzAwMHBfZ2V0X2kyY19tYXN0ZXIpOworCitpbnQgZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgY2ZnW10pCit7CisJc3RydWN0IGRpYjcwMDBwX3N0YXRlIHN0ID0geyAuaTJjX2FkYXAgPSBpMmMgfTsKKwlpbnQgayA9IDA7CisJdTggbmV3X2FkZHIgPSAwOworCisJZm9yIChrID0gbm9fb2ZfZGVtb2RzLTE7IGsgPj0gMDsgay0tKSB7CisJCXN0LmNmZyA9IGNmZ1trXTsKKworCQkvKiBkZXNpZ25hdGVkIGkyYyBhZGRyZXNzICovCisJCW5ld19hZGRyICAgICAgICAgID0gKDB4NDAgKyBrKSA8PCAxOworCQlzdC5pMmNfYWRkciA9IG5ld19hZGRyOworCQlpZiAoZGliNzAwMHBfaWRlbnRpZnkoJnN0KSAhPSAwKSB7CisJCQlzdC5pMmNfYWRkciA9IGRlZmF1bHRfYWRkcjsKKwkJCWlmIChkaWI3MDAwcF9pZGVudGlmeSgmc3QpICE9IDApIHsKKwkJCQlkcHJpbnRrKCJEaUI3MDAwUCAjJWQ6IG5vdCBpZGVudGlmaWVkXG4iLCBrKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorCisJCS8qIHN0YXJ0IGRpdmVyc2l0eSB0byBwdWxsX2Rvd24gZGl2X3N0ciAtIGp1c3QgZm9yIGkyYy1lbnVtZXJhdGlvbiAqLworCQlkaWI3MDAwcF9zZXRfb3V0cHV0X21vZGUoJnN0LCBPVVRNT0RFX0RJVkVSU0lUWSk7CisKKwkJLyogc2V0IG5ldyBpMmMgYWRkcmVzcyBhbmQgZm9yY2UgZGl2c3RhcnQgKi8KKwkJZGliNzAwMHBfd3JpdGVfd29yZCgmc3QsIDEyODUsIChuZXdfYWRkciA8PCAyKSB8IDB4Mik7CisKKwkJZHByaW50aygiSUMgJWQgaW5pdGlhbGl6ZWQgKHRvIGkyY19hZGRyZXNzIDB4JXgpXG4iLCBrLCBuZXdfYWRkcik7CisJfQorCisJZm9yIChrID0gMDsgayA8IG5vX29mX2RlbW9kczsgaysrKSB7CisJCXN0LmNmZyA9IGNmZ1trXTsKKwkJc3QuaTJjX2FkZHIgPSAoMHg0MCArIGspIDw8IDE7CisKKwkJLy8gdW5mb3JjZSBkaXZzdHIKKwkJZGliNzAwMHBfd3JpdGVfd29yZCgmc3QsIDEyODUsIHN0LmkyY19hZGRyIDw8IDIpOworCisJCS8qIGRlYWN0aXZhdGUgZGl2IC0gaXQgd2FzIGp1c3QgZm9yIGkyYy1lbnVtZXJhdGlvbiAqLworCQlkaWI3MDAwcF9zZXRfb3V0cHV0X21vZGUoJnN0LCBPVVRNT0RFX0hJR0hfWik7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbik7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkaWI3MDAwcF9vcHM7CitzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZGliNzAwMHBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnICpjZmcpCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2Q7CisJc3RydWN0IGRpYjcwMDBwX3N0YXRlICpzdDsKKwlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkaWI3MDAwcF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbWNweSgmc3QtPmNmZywgY2ZnLCBzaXplb2Yoc3RydWN0IGRpYjcwMDBwX2NvbmZpZykpOworCXN0LT5pMmNfYWRhcCA9IGkyY19hZGFwOworCXN0LT5pMmNfYWRkciA9IGkyY19hZGRyOworCXN0LT5ncGlvX3ZhbCA9IGNmZy0+Z3Bpb192YWw7CisJc3QtPmdwaW9fZGlyID0gY2ZnLT5ncGlvX2RpcjsKKworCWRlbW9kICAgICAgICAgICAgICAgICAgID0gJnN0LT5kZW1vZDsKKwlkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdiA9IHN0OworCW1lbWNweSgmc3QtPmRlbW9kLm9wcywgJmRpYjcwMDBwX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisKKwlpZiAoZGliNzAwMHBfaWRlbnRpZnkoc3QpICE9IDApCisJCWdvdG8gZXJyb3I7CisKKwlkaWJ4MDAwX2luaXRfaTJjX21hc3Rlcigmc3QtPmkyY19tYXN0ZXIsIERJQjcwMDBQLCBzdC0+aTJjX2FkYXAsIHN0LT5pMmNfYWRkcik7CisKKwlkaWI3MDAwcF9kZW1vZF9yZXNldChzdCk7CisKKwlyZXR1cm4gZGVtb2Q7CisKK2Vycm9yOgorCWtmcmVlKHN0KTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woZGliNzAwMHBfYXR0YWNoKTsKKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGRpYjcwMDBwX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiRGlCY29tIDcwMDBQQyIsCisJCS50eXBlID0gRkVfT0ZETSwKKwkJLmZyZXF1ZW5jeV9taW4gICAgICA9IDQ0MjUwMDAwLAorCQkuZnJlcXVlbmN5X21heCAgICAgID0gODY3MjUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplID0gNjI1MDAsCisJCS5jYXBzID0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwKKwkJCUZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8CisJCQlGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1FBTV8xNiB8IEZFX0NBTl9RQU1fNjQgfCBGRV9DQU5fUUFNX0FVVE8gfAorCQkJRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAorCQkJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAorCQkJRkVfQ0FOX1JFQ09WRVIgfAorCQkJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPLAorCX0sCisKKwkucmVsZWFzZSAgICAgICAgICAgICAgPSBkaWI3MDAwcF9yZWxlYXNlLAorCisJLmluaXQgICAgICAgICAgICAgICAgID0gZGliNzAwMHBfaW5pdCwKKwkuc2xlZXAgICAgICAgICAgICAgICAgPSBkaWI3MDAwcF9zbGVlcCwKKworCS5zZXRfZnJvbnRlbmQgICAgICAgICA9IGRpYjcwMDBwX3NldF9mcm9udGVuZCwKKwkuZ2V0X3R1bmVfc2V0dGluZ3MgICAgPSBkaWI3MDAwcF9mZV9nZXRfdHVuZV9zZXR0aW5ncywKKwkuZ2V0X2Zyb250ZW5kICAgICAgICAgPSBkaWI3MDAwcF9nZXRfZnJvbnRlbmQsCisKKwkucmVhZF9zdGF0dXMgICAgICAgICAgPSBkaWI3MDAwcF9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIgICAgICAgICAgICAgPSBkaWI3MDAwcF9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBkaWI3MDAwcF9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIgICAgICAgICAgICAgPSBkaWI3MDAwcF9yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyAgICAgICAgPSBkaWI3MDAwcF9yZWFkX3VuY19ibG9ja3MsCit9OworCitNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIEJvZXR0Y2hlciA8cGJvZXR0Y2hlckBkaWJjb20uZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIERpQmNvbSA3MDAwUEMgQ09GRE0gZGVtb2R1bGF0b3IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0NjVjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oCkBAIC0wLDAgKzEsNDYgQEAKKyNpZm5kZWYgRElCNzAwMFBfSAorI2RlZmluZSBESUI3MDAwUF9ICisKKyNpbmNsdWRlICJkaWJ4MDAwX2NvbW1vbi5oIgorCitzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIHsKKwl1OCBvdXRwdXRfbXBlZzJfaW5fMTg4X2J5dGVzOworCXU4IGhvc3RidXNfZGl2ZXJzaXR5OworCXU4IHR1bmVyX2lzX2Jhc2ViYW5kOworCWludCAoKnVwZGF0ZV9sbmEpIChzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHUxNiBhZ2NfZ2xvYmFsKTsKKworCXN0cnVjdCBkaWJ4MDAwX2FnY19jb25maWcgKmFnYzsKKwlzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnICpidzsKKworI2RlZmluZSBESUI3MDAwUF9HUElPX0RFRkFVTFRfRElSRUNUSU9OUyAweGZmZmYKKwl1MTYgZ3Bpb19kaXI7CisjZGVmaW5lIERJQjcwMDBQX0dQSU9fREVGQVVMVF9WQUxVRVMgICAgIDB4MDAwMAorCXUxNiBncGlvX3ZhbDsKKyNkZWZpbmUgRElCNzAwMFBfR1BJT19QV01fUE9TMCh2KSAgICAgICAgKCh2ICYgMHhmKSA8PCAxMikKKyNkZWZpbmUgRElCNzAwMFBfR1BJT19QV01fUE9TMSh2KSAgICAgICAgKCh2ICYgMHhmKSA8PCA4ICkKKyNkZWZpbmUgRElCNzAwMFBfR1BJT19QV01fUE9TMih2KSAgICAgICAgKCh2ICYgMHhmKSA8PCA0ICkKKyNkZWZpbmUgRElCNzAwMFBfR1BJT19QV01fUE9TMyh2KSAgICAgICAgICh2ICYgMHhmKQorI2RlZmluZSBESUI3MDAwUF9HUElPX0RFRkFVTFRfUFdNX1BPUyAgICAweGZmZmYKKwl1MTYgZ3Bpb19wd21fcG9zOworCisJdTE2IHB3bV9mcmVxX2RpdjsKKworCXU4IHF1YXJ0el9kaXJlY3Q7CisKKwlpbnQgKCphZ2NfY29udHJvbCkgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTggYmVmb3JlKTsKK307CisKKyNkZWZpbmUgREVGQVVMVF9ESUI3MDAwUF9JMkNfQUREUkVTUyAxOAorCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqIGRpYjcwMDBwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWI3MDAwcF9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlLCBpbnQpOworZXh0ZXJuIGludCBkaWI3MDAwcGNfZGV0ZWN0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApOworCisvKiBUT0RPCitleHRlcm4gSU5UIGRpYjcwMDBwX3NldF9ncGlvKHN0cnVjdCBkaWJEZW1vZCAqZGVtb2QsIFVDSEFSIG51bSwgVUNIQVIgZGlyLCBVQ0hBUiB2YWwpOworZXh0ZXJuIElOVCBkaWI3MDAwcF9lbmFibGVfdmJnX3ZvbHRhZ2Uoc3RydWN0IGRpYkRlbW9kICpkZW1vZCk7CitleHRlcm4gdm9pZCBkaWI3MDAwcF9zZXRfaG9zdGJ1c19kaXZlcnNpdHkoc3RydWN0IGRpYkRlbW9kICpkZW1vZCwgVUNIQVIgb25vZmYpOworZXh0ZXJuIFVTSE9SVCBkaWI3MDAwcF9nZXRfY3VycmVudF9hZ2NfZ2xvYmFsKHN0cnVjdCBkaWJEZW1vZCAqZGVtb2QpOworKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oCmluZGV4IGJiMGM2NWYuLmExZGY2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oCkBAIC0zMiw2ICszMiwxMyBAQAogI2RlZmluZSBCQU5EX0xCQU5EIDB4MDEKICNkZWZpbmUgQkFORF9VSEYgICAweDAyCiAjZGVmaW5lIEJBTkRfVkhGICAgMHgwNAorI2RlZmluZSBCQU5EX1NCQU5EIDB4MDgKKyNkZWZpbmUgQkFORF9GTQkgICAweDEwCisKKyNkZWZpbmUgQkFORF9PRl9GUkVRVUVOQ1koZnJlcV9rSHopICggKGZyZXFfa0h6KSA8PSAxMTUwMDAgPyBCQU5EX0ZNIDogXAorCQkJCQkJCQkJKGZyZXFfa0h6KSA8PSAyNTAwMDAgPyBCQU5EX1ZIRiA6IFwKKwkJCQkJCQkJCShmcmVxX2tIeikgPD0gODYzMDAwID8gQkFORF9VSEYgOiBcCisJCQkJCQkJCQkoZnJlcV9rSHopIDw9IDIwMDAwMDAgPyBCQU5EX0xCQU5EIDogQkFORF9TQkFORCApCiAKIHN0cnVjdCBkaWJ4MDAwX2FnY19jb25maWcgewogCS8qIGRlZmluZXMgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGlzIEFHQy1zZXR0aW5nIC0gdXNpbmcgdGhlIEJBTkRfLWRlZmluZXMqLwpAQCAtMTI5LDYgKzEzNiw3IEBACiAKIC8qIEkgaG9wZSBJIGNhbiBnZXQgcmlkIG9mIHRoZSBmb2xsb3dpbmcga2x1ZGdlIGluIHRoZSBuZWFyIGZ1dHVyZSAqLwogc3RydWN0IGRpYngwMDBfb2ZkbV9jaGFubmVsIHsKKwl1MzIgUkZfa0h6OwogCXU4ICBCdzsKIAlzMTYgbmZmdDsKIAlzMTYgZ3VhcmQ7CkBAIC0xMzgsOSArMTQ2LDExIEBACiAJczE2IHZpdF9hbHBoYTsKIAlzMTYgdml0X2NvZGVfcmF0ZV9ocDsKIAlzMTYgdml0X2NvZGVfcmF0ZV9scDsKKwl1OCAgaW50bHZfbmF0aXZlOwogfTsKIAogI2RlZmluZSBGRVAyRElCKGZlcCxjaCkgXAorCShjaCktPlJGX2tIeiAgICAgICAgICAgPSAoZmVwKS0+ZnJlcXVlbmN5IC8gMTAwMDsgXAogCShjaCktPkJ3ICAgICAgICAgICAgICAgPSAoZmVwKS0+dS5vZmRtLmJhbmR3aWR0aDsgXAogCShjaCktPm5mZnQgICAgICAgICAgICAgPSAoZmVwKS0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID09IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE8gPyAtMSA6IChmZXApLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGU7IFwKIAkoY2gpLT5ndWFyZCAgICAgICAgICAgID0gKGZlcCktPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCA9PSBHVUFSRF9JTlRFUlZBTF9BVVRPID8gLTEgOiAoZmVwKS0+dS5vZmRtLmd1YXJkX2ludGVydmFsOyBcCkBAIC0xNDksNyArMTU5LDggQEAKIAkoY2gpLT52aXRfc2VsZWN0X2hwICAgID0gMTsgXAogCShjaCktPnZpdF9hbHBoYSAgICAgICAgPSAxOyBcCiAJKGNoKS0+dml0X2NvZGVfcmF0ZV9ocCA9IChmZXApLT51Lm9mZG0uY29kZV9yYXRlX0hQID09IEZFQ19BVVRPID8gLTEgOiAoZmVwKS0+dS5vZmRtLmNvZGVfcmF0ZV9IUDsgXAotCShjaCktPnZpdF9jb2RlX3JhdGVfbHAgPSAoZmVwKS0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9PSBGRUNfQVVUTyA/IC0xIDogKGZlcCktPnUub2ZkbS5jb2RlX3JhdGVfTFA7CisJKGNoKS0+dml0X2NvZGVfcmF0ZV9scCA9IChmZXApLT51Lm9mZG0uY29kZV9yYXRlX0xQID09IEZFQ19BVVRPID8gLTEgOiAoZmVwKS0+dS5vZmRtLmNvZGVfcmF0ZV9MUDsgXAorCShjaCktPmludGx2X25hdGl2ZSAgICAgPSAxOwogCiAjZGVmaW5lIElOSVRfT0ZETV9DSEFOTkVMKGNoKSBkbyB7XAogCShjaCktPkJ3ICAgICAgICAgICAgICAgPSAwOyAgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKaW5kZXggYjdlNzEwOC4uNjJkZTc2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCkBAIC00NzIsMTQgKzQ3MiwxNCBAQAogCQlwcmludGsoInBsbDogJXM6IGRpdj0lZCB8IGJ1Zj0weCUwMngsMHglMDJ4LDB4JTAyeCwweCUwMnhcbiIsCiAJCSAgICAgICBkZXNjLT5uYW1lLCBkaXYsIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSk7CiAKLQlyZXR1cm4gMDsKKwkvLyBjYWxjdWxhdGUgdGhlIGZyZXF1ZW5jeSB3ZSBzZXQgaXQgdG8KKwlyZXR1cm4gKGRpdiAqIGRlc2MtPmVudHJpZXNbaV0uc3RlcHNpemUpIC0gZGVzYy0+ZW50cmllc1tpXS5vZmZzZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGR2Yl9wbGxfY29uZmlndXJlKTsKIAogc3RhdGljIGludCBkdmJfcGxsX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0JaWYgKGZlLT50dW5lcl9wcml2KQotCQlrZnJlZShmZS0+dHVuZXJfcHJpdik7CisJa2ZyZWUoZmUtPnR1bmVyX3ByaXYpOwogCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4OSw3ICs0ODksOCBAQAogCXN0cnVjdCBkdmJfcGxsX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKIAl1OCBidWZbNF07CiAJc3RydWN0IGkyY19tc2cgbXNnID0KLQkJeyAuYWRkciA9IHByaXYtPnBsbF9pMmNfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07CisJCXsgLmFkZHIgPSBwcml2LT5wbGxfaTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsCisJCSAgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07CiAJaW50IGk7CiAJaW50IHJlc3VsdDsKIApAQCAtNTE3LDE2ICs1MTgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdmJfcGxsX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQorc3RhdGljIGludCBkdmJfcGxsX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgZHZiX3BsbF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CiAJdTggYnVmWzRdOwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9Ci0JCXsgLmFkZHIgPSBwcml2LT5wbGxfaTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OworCQl7IC5hZGRyID0gcHJpdi0+cGxsX2kyY19hZGRyZXNzLCAuZmxhZ3MgPSAwLAorCQkgIC5idWYgPSBidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwogCWludCByZXN1bHQ7Ci0JdTMyIGRpdjsKLQlpbnQgaTsKLQl1MzIgYmFuZHdpZHRoID0gMDsKKwl1MzIgYmFuZHdpZHRoID0gMCwgZnJlcXVlbmN5ID0gMDsKIAogCWlmIChwcml2LT5pMmMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MzYsOCArNTM3LDExIEBACiAJCWJhbmR3aWR0aCA9IHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aDsKIAl9CiAKLQlpZiAoKHJlc3VsdCA9IGR2Yl9wbGxfY29uZmlndXJlKHByaXYtPnBsbF9kZXNjLCBidWYsIHBhcmFtcy0+ZnJlcXVlbmN5LCBiYW5kd2lkdGgpKSAhPSAwKQorCWlmICgocmVzdWx0ID0gZHZiX3BsbF9jb25maWd1cmUocHJpdi0+cGxsX2Rlc2MsIGJ1ZiwKKwkJCQkJcGFyYW1zLT5mcmVxdWVuY3ksIGJhbmR3aWR0aCkpIDwgMCkKIAkJcmV0dXJuIHJlc3VsdDsKKwllbHNlCisJCWZyZXF1ZW5jeSA9IHJlc3VsdDsKIAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CkBAIC01NDUsMjYgKzU0OSwxOSBAQAogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAotCS8vIGNhbGN1bGF0ZSB0aGUgZnJlcXVlbmN5IHdlIHNldCBpdCB0bwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT5wbGxfZGVzYy0+Y291bnQ7IGkrKykgewotCQlpZiAocGFyYW1zLT5mcmVxdWVuY3kgPiBwcml2LT5wbGxfZGVzYy0+ZW50cmllc1tpXS5saW1pdCkKLQkJCWNvbnRpbnVlOwotCQlicmVhazsKLQl9Ci0JZGl2ID0gKHBhcmFtcy0+ZnJlcXVlbmN5ICsgcHJpdi0+cGxsX2Rlc2MtPmVudHJpZXNbaV0ub2Zmc2V0KSAvIHByaXYtPnBsbF9kZXNjLT5lbnRyaWVzW2ldLnN0ZXBzaXplOwotCXByaXYtPmZyZXF1ZW5jeSA9IChkaXYgKiBwcml2LT5wbGxfZGVzYy0+ZW50cmllc1tpXS5zdGVwc2l6ZSkgLSBwcml2LT5wbGxfZGVzYy0+ZW50cmllc1tpXS5vZmZzZXQ7CisJcHJpdi0+ZnJlcXVlbmN5ID0gZnJlcXVlbmN5OwogCXByaXYtPmJhbmR3aWR0aCA9IGJhbmR3aWR0aDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR2Yl9wbGxfY2FsY19yZWdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywgdTggKmJ1ZiwgaW50IGJ1Zl9sZW4pCitzdGF0aWMgaW50IGR2Yl9wbGxfY2FsY19yZWdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKKwkJCSAgICAgdTggKmJ1ZiwgaW50IGJ1Zl9sZW4pCiB7CiAJc3RydWN0IGR2Yl9wbGxfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OwogCWludCByZXN1bHQ7Ci0JdTMyIGRpdjsKLQlpbnQgaTsKLQl1MzIgYmFuZHdpZHRoID0gMDsKKwl1MzIgYmFuZHdpZHRoID0gMCwgZnJlcXVlbmN5ID0gMDsKIAogCWlmIChidWZfbGVuIDwgNSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01NzQsMTggKzU3MSwxNSBAQAogCQliYW5kd2lkdGggPSBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGg7CiAJfQogCi0JaWYgKChyZXN1bHQgPSBkdmJfcGxsX2NvbmZpZ3VyZShwcml2LT5wbGxfZGVzYywgYnVmKzEsIHBhcmFtcy0+ZnJlcXVlbmN5LCBiYW5kd2lkdGgpKSAhPSAwKQorCWlmICgocmVzdWx0ID0gZHZiX3BsbF9jb25maWd1cmUocHJpdi0+cGxsX2Rlc2MsIGJ1ZisxLAorCQkJCQlwYXJhbXMtPmZyZXF1ZW5jeSwgYmFuZHdpZHRoKSkgPCAwKQogCQlyZXR1cm4gcmVzdWx0OworCWVsc2UKKwkJZnJlcXVlbmN5ID0gcmVzdWx0OworCiAJYnVmWzBdID0gcHJpdi0+cGxsX2kyY19hZGRyZXNzOwogCi0JLy8gY2FsY3VsYXRlIHRoZSBmcmVxdWVuY3kgd2Ugc2V0IGl0IHRvCi0JZm9yIChpID0gMDsgaSA8IHByaXYtPnBsbF9kZXNjLT5jb3VudDsgaSsrKSB7Ci0JCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA+IHByaXYtPnBsbF9kZXNjLT5lbnRyaWVzW2ldLmxpbWl0KQotCQkJY29udGludWU7Ci0JCWJyZWFrOwotCX0KLQlkaXYgPSAocGFyYW1zLT5mcmVxdWVuY3kgKyBwcml2LT5wbGxfZGVzYy0+ZW50cmllc1tpXS5vZmZzZXQpIC8gcHJpdi0+cGxsX2Rlc2MtPmVudHJpZXNbaV0uc3RlcHNpemU7Ci0JcHJpdi0+ZnJlcXVlbmN5ID0gKGRpdiAqIHByaXYtPnBsbF9kZXNjLT5lbnRyaWVzW2ldLnN0ZXBzaXplKSAtIHByaXYtPnBsbF9kZXNjLT5lbnRyaWVzW2ldLm9mZnNldDsKKwlwcml2LT5mcmVxdWVuY3kgPSBmcmVxdWVuY3k7CiAJcHJpdi0+YmFuZHdpZHRoID0gYmFuZHdpZHRoOwogCiAJcmV0dXJuIDU7CkBAIC02MTQsMTAgKzYwOCwxMyBAQAogCS5nZXRfYmFuZHdpZHRoID0gZHZiX3BsbF9nZXRfYmFuZHdpZHRoLAogfTsKIAotc3RydWN0IGR2Yl9mcm9udGVuZCAqZHZiX3BsbF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBwbGxfYWRkciwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkdmJfcGxsX2Rlc2MgKmRlc2MpCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkdmJfcGxsX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IHBsbF9hZGRyLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkgICAgc3RydWN0IGR2Yl9wbGxfZGVzYyAqZGVzYykKIHsKIAl1OCBiMSBbXSA9IHsgMCB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBwbGxfYWRkciwgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBiMSwgLmxlbiA9IDEgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcGxsX2FkZHIsIC5mbGFncyA9IEkyQ19NX1JELAorCQkJICAgICAgIC5idWYgPSBiMSwgLmxlbiA9IDEgfTsKIAlzdHJ1Y3QgZHZiX3BsbF9wcml2ICpwcml2ID0gTlVMTDsKIAlpbnQgcmV0OwogCkBAIC02NDAsNyArNjM3LDkgQEAKIAlwcml2LT5pMmMgPSBpMmM7CiAJcHJpdi0+cGxsX2Rlc2MgPSBkZXNjOwogCi0JbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJmR2Yl9wbGxfdHVuZXJfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKKwltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmZHZiX3BsbF90dW5lcl9vcHMsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOworCiAJc3RybmNweShmZS0+b3BzLnR1bmVyX29wcy5pbmZvLm5hbWUsIGRlc2MtPm5hbWUsIDEyOCk7CiAJZmUtPm9wcy50dW5lcl9vcHMuaW5mby5mcmVxdWVuY3lfbWluID0gZGVzYy0+bWluOwogCWZlLT5vcHMudHVuZXJfb3BzLmluZm8uZnJlcXVlbmN5X21pbiA9IGRlc2MtPm1heDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oCmluZGV4IGVkNWFjNWEuLjY4MTE4NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaApAQCAtNDgsNyArNDgsNyBAQAogZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90aG9tc29uX2ZlNjYwMDsKIAogZXh0ZXJuIGludCBkdmJfcGxsX2NvbmZpZ3VyZShzdHJ1Y3QgZHZiX3BsbF9kZXNjICpkZXNjLCB1OCAqYnVmLAotCQkgICAgICB1MzIgZnJlcSwgaW50IGJhbmR3aWR0aCk7CisJCQkgICAgIHUzMiBmcmVxLCBpbnQgYmFuZHdpZHRoKTsKIAogLyoqCiAgKiBBdHRhY2ggYSBkdmItcGxsIHRvIHRoZSBzdXBwbGllZCBmcm9udGVuZCBzdHJ1Y3R1cmUuCkBAIC01OSw2ICs1OSw5IEBACiAgKiBAcGFyYW0gZGVzYyBkdmJfcGxsX2Rlc2MgdG8gdXNlLgogICogQHJldHVybiBGcm9udGVuZCBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZQogICovCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqZHZiX3BsbF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBwbGxfYWRkciwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkdmJfcGxsX2Rlc2MgKmRlc2MpOworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmR2Yl9wbGxfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkgICBpbnQgcGxsX2FkZHIsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkJCQkgICBzdHJ1Y3QgZHZiX3BsbF9kZXNjICpkZXNjKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdfaDA2eGYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ19oMDZ4Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTRkNTFkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ19oMDZ4Zi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqICBsZ19oMDZ4Zi5oIC0gQVRTQyBUdW5lciBzdXBwb3J0IGZvciBMRyBURFZTLUgwNnhGCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9MR19IMDZYRl9IXwotI2RlZmluZSBfTEdfSDA2WEZfSF8KLSNpbmNsdWRlICJkdmItcGxsLmgiCi0KLXN0YXRpYyBpbnQgbGdfaDA2eGZfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGkyY19hZGFwdGVyKiBpMmNfYWRhcCwKLQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKLXsKLQl1OCBidWZbNF07Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4NjEsIC5mbGFncyA9IDAsCi0JCQkgICAgICAgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07Ci0JaW50IGVycjsKLQotCWR2Yl9wbGxfY29uZmlndXJlKCZkdmJfcGxsX2xnX3RkdnNfaDA2eGYsIGJ1ZiwgcGFyYW1zLT5mcmVxdWVuY3ksIDApOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoaTJjX2FkYXAsICZtc2csIDEpKSAhPSAxKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImxnX2gwNnhmOiAlcyBlcnJvciAiCi0JCQkiKGFkZHIgJTAyeCA8LSAlMDJ4LCBlcnIgPSAlaSlcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGJ1ZlswXSwgYnVmWzFdLCBlcnIpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCWVsc2UKLQkJCXJldHVybiAtRVJFTU9URUlPOwotCX0KLQotCS8qIFNldCB0aGUgQXV4aWxpYXJ5IEJ5dGUuICovCi0JYnVmWzBdID0gYnVmWzJdOwotCWJ1ZlswXSAmPSB+MHgyMDsKLQlidWZbMF0gfD0gMHgxODsKLQlidWZbMV0gPSAweDUwOwotCW1zZy5sZW4gPSAyOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoaTJjX2FkYXAsICZtc2csIDEpKSAhPSAxKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImxnX2gwNnhmOiAlcyBlcnJvciAiCi0JCQkiKGFkZHIgJTAyeCA8LSAlMDJ4LCBlcnIgPSAlaSlcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGJ1ZlswXSwgYnVmWzFdLCBlcnIpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCWVsc2UKLQkJCXJldHVybiAtRVJFTU9URUlPOwotCX0KLQotCXJldHVybiAwOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweC5jCmluZGV4IDlhMzU0NzAuLjY4YWFkMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweC5jCkBAIC0zMSw5ICszMSw2IEBACiAgKiAgIEFpcjJQQy9BaXJTdGFyIDIgQVRTQyAzcmQgZ2VuZXJhdGlvbiAoSEQ1MDAwKQogICogICBwY0hEVFYgSEQ1NTAwCiAgKgotICogVE9ETzoKLSAqIHNpZ25hbCBzdHJlbmd0aCBhbHdheXMgcmV0dXJucyAwLgotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC00Niw5ICs0MywxMyBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImR2Yl9tYXRoLmgiCiAjaW5jbHVkZSAibGdkdDMzMHhfcHJpdi5oIgogI2luY2x1ZGUgImxnZHQzMzB4LmgiCiAKKy8qIFVzZSBFcXVhbGl6ZXIgTWVhbiBTcXVhcmVkIEVycm9yIGluc3RlYWQgb2YgUGhhc2VyIFRyYWNrZXIgTVNFICovCisvKiAjZGVmaW5lIFVTRV9FUU1TRSAqLworCiBzdGF0aWMgaW50IGRlYnVnID0gMDsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsIlR1cm4gb24vb2ZmIGxnZHQzMzB4IGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOwpAQCAtNjgsNiArNjksNyBAQAogCiAJLyogRGVtb2R1bGF0b3IgcHJpdmF0ZSBkYXRhICovCiAJZmVfbW9kdWxhdGlvbl90IGN1cnJlbnRfbW9kdWxhdGlvbjsKKwl1MzIgc25yOyAvKiBSZXN1bHQgb2YgbGFzdCBTTlIgY2FsY3VsYXRpb24gKi8KIAogCS8qIFR1bmVyIHByaXZhdGUgZGF0YSAqLwogCXUzMiBjdXJyZW50X2ZyZXF1ZW5jeTsKQEAgLTMwMiwxMCArMzA0LDEwIEBACiAJc3RhdGljIHU4IGxnZHQzMzAzXzh2c2JfNDRfZGF0YVtdID0gewogCQkweDA0LCAweDAwLAogCQkweDBkLCAweDQwLAotCTB4MGUsIDB4ODcsCi0JMHgwZiwgMHg4ZSwKLQkweDEwLCAweDAxLAotCTB4NDcsIDB4OGIgfTsKKwkJMHgwZSwgMHg4NywKKwkJMHgwZiwgMHg4ZSwKKwkJMHgxMCwgMHgwMSwKKwkJMHg0NywgMHg4YiB9OwogCiAJLyoKIAkgKiBBcnJheSBvZiBieXRlIHBhaXJzIDxhZGRyZXNzLCB2YWx1ZT4KQEAgLTQzNSw5ICs0MzcsNiBAQAogCQkvKiBUZXN0IHNpZ25hbCBkb2VzIG5vdCBleGlzdCBmbGFnICovCiAJCS8qIGFzIHdlbGwgYXMgdGhlIEFHQyBsb2NrIGZsYWcuICAgKi8KIAkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMOwotCX0gZWxzZSB7Ci0JCS8qIFdpdGhvdXQgYSBzaWduYWwgYWxsIG90aGVyIHN0YXR1cyBiaXRzIGFyZSBtZWFuaW5nbGVzcyAqLwotCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgpAQCAtNTAwLDkgKzQ5OSw2IEBACiAJCS8qIFRlc3QgaW5wdXQgc2lnbmFsIGRvZXMgbm90IGV4aXN0IGZsYWcgKi8KIAkJLyogYXMgd2VsbCBhcyB0aGUgQUdDIGxvY2sgZmxhZy4gICAqLwogCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7Ci0JfSBlbHNlIHsKLQkJLyogV2l0aG91dCBhIHNpZ25hbCBhbGwgb3RoZXIgc3RhdHVzIGJpdHMgYXJlIG1lYW5pbmdsZXNzICovCi0JCXJldHVybiAwOwogCX0KIAogCS8qIENhcnJpZXIgUmVjb3ZlcnkgTG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8KQEAgLTU0MywxNTEgKzUzOSwxNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsZ2R0MzMweF9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzdHJlbmd0aCkKKy8qIENhbGN1bGF0ZSBTTlIgZXN0aW1hdGlvbiAoc2NhbGVkIGJ5IDJeMjQpCisKKyAgIDgtVlNCIFNOUiBlcXVhdGlvbnMgZnJvbSBMR0RUMzMwMiBhbmQgTEdEVDMzMDMgZGF0YXNoZWV0cywgUUFNCisgICBlcXVhdGlvbnMgZnJvbSBMR0RUMzMwMyBkYXRhc2hlZXQuICBWU0IgaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgJzAyCisgICBhbmQgJzAzLCBzbyBtYXliZSBRQU0gaXMgdG9vPyAgUGVyaGFwcyBzb21lb25lIHdpdGggYSBuZXdlciBkYXRhc2hlZXQKKyAgIHRoYXQgaGFzIFFBTSBpbmZvcm1hdGlvbiBjb3VsZCB2ZXJpZnk/CisKKyAgIEZvciA4LVZTQjogKHR3byB3YXlzLCB0YWtlIHlvdXIgcGljaykKKyAgIExHRFQzMzAyOgorICAgICBTTlJfRVEgPSAxMCAqIGxvZzEwKDI1ICogMjReMiAvIEVRX01TRSkKKyAgIExHRFQzMzAzOgorICAgICBTTlJfRVEgPSAxMCAqIGxvZzEwKDI1ICogMzJeMiAvIEVRX01TRSkKKyAgIExHRFQzMzAyICYgTEdEVDMzMDM6CisgICAgIFNOUl9QVCA9IDEwICogbG9nMTAoMjUgKiAzMl4yIC8gUFRfTVNFKSAgKHdlIHVzZSB0aGlzIG9uZSkKKyAgIEZvciA2NC1RQU06CisgICAgIFNOUiAgICA9IDEwICogbG9nMTAoIDY4ODEyOCAgIC8gTVNFUUFNKQorICAgRm9yIDI1Ni1RQU06CisgICAgIFNOUiAgICA9IDEwICogbG9nMTAoIDY5NjMyMCAgIC8gTVNFUUFNKQorCisgICBXZSByZS13cml0ZSB0aGUgc25yIGVxdWF0aW9uIGFzOgorICAgICBTTlIgKiAyXjI0ID0gMTAqKGMgLSBpbnRsb2cxMChNU0UpKQorICAgV2hlcmUgZm9yIDI1Ni1RQU0sIGMgPSBsb2cxMCg2OTYzMjApICogMl4yNCwgYW5kIHNvIG9uLiAqLworCitzdGF0aWMgdTMyIGNhbGN1bGF0ZV9zbnIodTMyIG1zZSwgdTMyIGMpCiB7Ci0JLyogbm90IGRpcmVjdGx5IGF2YWlsYWJsZS4gKi8KLQkqc3RyZW5ndGggPSAwOwotCXJldHVybiAwOworCWlmIChtc2UgPT0gMCkgLyogTm8gc2lnbmFsICovCisJCXJldHVybiAwOworCisJbXNlID0gaW50bG9nMTAobXNlKTsKKwlpZiAobXNlID4gYykgeworCQkvKiBOZWdhdGl2ZSBTTlIsIHdoaWNoIGlzIHBvc3NpYmxlLCBidXQgcmVhbGlzdGljbHkgdGhlCisJCWRlbW9kIHdpbGwgbG9zZSBsb2NrIGJlZm9yZSB0aGUgc2lnbmFsIGdldHMgdGhpcyBiYWQuICBUaGUKKwkJQVBJIG9ubHkgYWxsb3dzIGZvciB1bnNpZ25lZCB2YWx1ZXMsIHNvIGp1c3QgcmV0dXJuIDAgKi8KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxMCooYyAtIG1zZSk7CiB9CiAKIHN0YXRpYyBpbnQgbGdkdDMzMDJfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQogewotI2lmZGVmIFNOUl9JTl9EQgotCS8qCi0JICogU3BlYyBzaGVldCBzaG93cyBmb3JtdWxhIGZvciBTTlJfRVEgPSAxMCBsb2cxMCgyNSAqIDI0KioyIC8gbm9pc2UpCi0JICogYW5kIFNOUl9QSCA9IDEwIGxvZzEwKDI1ICogMzIqKjIgLyBub2lzZSkgZm9yIGVxdWFsaXplciBhbmQgcGhhc2UgdHJhY2tlcgotCSAqIHJlc3BlY3RpdmVseS4gVGhlIGZvbGxvd2luZyB0YWJsZXMgYXJlIGJ1aWx0IG9uIHRoZXNlIGZvcm11bGFzLgotCSAqIFRoZSB1c3VhbCBkZWZpbml0aW9uIGlzIFNOUiA9IDIwIGxvZzEwKHNpZ25hbC9ub2lzZSkKLQkgKiBJZiB0aGUgc3BlY2lmaWNhdGlvbiBpcyB3cm9uZyB0aGUgdmFsdWUgcmV0dW5lZCBpcyAxLzIgdGhlIGFjdHVhbCBTTlIgaW4gZGIuCi0JICoKLQkgKiBUaGlzIHRhYmxlIGlzIGEgYW4gb3JkZXJlZCBsaXN0IG9mIG5vaXNlIHZhbHVlcyBjb21wdXRlZCBieSB0aGUKLQkgKiBmb3JtdWxhIGZyb20gdGhlIHNwZWMgc2hlZXQgc3VjaCB0aGF0IHRoZSBpbmRleCBpbnRvIHRoZSB0YWJsZQotCSAqIHN0YXJ0aW5nIGF0IDQzIG9yIDQ1IGlzIHRoZSBTTlIgdmFsdWUgaW4gZGIuIFRoZXJlIGFyZSBkdXBsaWNhdGUgbm9pc2UKLQkgKiB2YWx1ZSBlbnRyaWVzIGF0IHRoZSBiZWdpbm5pbmcgYmVjYXVzZSB0aGUgU05SIHZhcmllcyBtb3JlIHRoYW4KLQkgKiAxIGRiIGZvciBhIGNoYW5nZSBvZiAxIGRpZ2l0IGluIG5vaXNlIGF0IHZlcnkgc21hbGwgdmFsdWVzIG9mIG5vaXNlLgotCSAqCi0JICogRXhhbXBsZXMgZnJvbSBTTlJfRVEgdGFibGU6Ci0JICogbm9pc2UgU05SCi0JICogICAwICAgIDQzCi0JICogICAxICAgIDQyCi0JICogICAyICAgIDM5Ci0JICogICAzICAgIDM3Ci0JICogICA0ICAgIDM2Ci0JICogICA1ICAgIDM1Ci0JICogICA2ICAgIDM0Ci0JICogICA3ICAgIDMzCi0JICogICA4ICAgIDMzCi0JICogICA5ICAgIDMyCi0JICogICAxMCAgIDMyCi0JICogICAxMSAgIDMxCi0JICogICAxMiAgIDMxCi0JICogICAxMyAgIDMwCi0JICovCi0KLQlzdGF0aWMgY29uc3QgdTMyIFNOUl9FUVtdID0KLQkJeyAxLCAgICAgMiwgICAgICAyLCAgICAgIDIsIDMsICAgICAgMywgICAgICA0LCAgICAgNCwgICAgIDUsICAgICA3LAotCQkgIDksICAgICAxMSwgICAgIDEzLCAgICAgMTcsIDIxLCAgICAgMjYsICAgICAzMywgICAgNDEsICAgIDUyLCAgICA2NSwKLQkJICA4MSwgICAgMTAyLCAgICAxMjksICAgIDE2MiwgMjA0LCAgICAyNTcsICAgIDMyMywgICA0MDYsICAgNTExLCAgIDY0NCwKLQkJICA4MTAsICAgMTAyMCwgICAxMjg0LCAgIDE2MTYsIDIwMzUsICAgMjU2MSwgICAzMjI0LCAgNDA1OSwgIDUxMTAsICA2NDMzLAotCQkgIDgwOTgsICAxMDE5NSwgIDEyODM1LCAgMTYxNTgsIDIwMzQxLCAgMjU2MDgsICAzMjIzOCwgNDA1ODUsIDUxMDk0LCA2NDMyMywKLQkJICA4MDk3OCwgMTAxOTQ1LCAxMjgzNDEsIDE2MTU3MSwgMjAzNDA2LCAyNTYwNzMsIDB4NDAwMDAKLQkJfTsKLQotCXN0YXRpYyBjb25zdCB1MzIgU05SX1BIW10gPQotCQl7IDEsICAgICAyLCAgICAgIDIsICAgICAgMiwgICAgICAzLCAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA4LAotCQkgIDEwLCAgICAxMiwgICAgIDE1LCAgICAgMTksICAgICAyMywgICAgIDI5LCAzNywgICAgNDYsICAgIDU4LCAgICA3MywKLQkJICA5MSwgICAgMTE1LCAgICAxNDQsICAgIDE4MiwgICAgMjI5LCAgICAyODgsIDM2MiwgICA0NTYsICAgNTc0LCAgIDcyMiwKLQkJICA5MDksICAgMTE0NCwgICAxNDQwLCAgIDE4MTMsICAgMjI4MiwgICAyODczLCAzNjE3LCAgNDU1MywgIDU3MzIsICA3MjE2LAotCQkgIDkwODQsICAxMTQzNiwgIDE0Mzk2LCAgMTgxMjQsICAyMjgxNywgIDI4NzI0LCAgMzYxNjEsIDQ1NTI0LCA1NzMxMiwgNzIxNTEsCi0JCSAgOTA4MzMsIDExNDM1MSwgMTQzOTYwLCAxODEyMzUsIDIyODE2MSwgMHgwODAwMDAKLQkJfTsKLQotCXN0YXRpYyB1OCBidWZbNV07LyogcmVhZCBkYXRhIGJ1ZmZlciAqLwotCXN0YXRpYyB1MzIgbm9pc2U7ICAgLyogbm9pc2UgdmFsdWUgKi8KLQlzdGF0aWMgdTMyIHNucl9kYjsgIC8qIGluZGV4IGludG8gU05SX0VRW10gKi8KIAlzdHJ1Y3QgbGdkdDMzMHhfc3RhdGUqIHN0YXRlID0gKHN0cnVjdCBsZ2R0MzMweF9zdGF0ZSopIGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGJ1Zls1XTsJLyogcmVhZCBkYXRhIGJ1ZmZlciAqLworCXUzMiBub2lzZTsJLyogbm9pc2UgdmFsdWUgKi8KKwl1MzIgYzsJCS8qIHBlci1tb2R1bGF0aW9uIFNOUiBjYWxjdWxhdGlvbiBjb25zdGFudCAqLwogCi0JLyogcmVhZCBib3RoIGVxdWFsaXplciBhbmQgcGhhc2UgdHJhY2tlciBub2lzZSBkYXRhICovCi0JaTJjX3JlYWRfZGVtb2RfYnl0ZXMoc3RhdGUsIEVRUEhfRVJSMCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0KLQlpZiAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9PSBWU0JfOCkgewotCQkvKiBFcXVhbGl6ZXIgTWVhbi1TcXVhcmUgRXJyb3IgUmVnaXN0ZXIgZm9yIFZTQiAqLworCXN3aXRjaChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJaTJjX3JlYWRfZGVtb2RfYnl0ZXMoc3RhdGUsIExHRFQzMzAyX0VRUEhfRVJSMCwgYnVmLCA1KTsKKyNpZmRlZiBVU0VfRVFNU0UKKwkJLyogVXNlIEVxdWFsaXplciBNZWFuLVNxdWFyZSBFcnJvciBSZWdpc3RlciAqLworCQkvKiBTTlIgZm9yIHJhbmdlcyBmcm9tIC0xNS42MSB0byArNDEuNTggKi8KIAkJbm9pc2UgPSAoKGJ1ZlswXSAmIDcpIDw8IDE2KSB8IChidWZbMV0gPDwgOCkgfCBidWZbMl07Ci0KLQkJLyoKLQkJICogTG9vayB1cCBub2lzZSB2YWx1ZSBpbiB0YWJsZS4KLQkJICogQSBiZXR0ZXIgc2VhcmNoIGFsZ29yaXRobSBjb3VsZCBiZSB1c2VkLi4uCi0JCSAqIHdhdGNoIG91dCB0aGVyZSBhcmUgZHVwbGljYXRlIGVudHJpZXMuCi0JCSAqLwotCQlmb3IgKHNucl9kYiA9IDA7IHNucl9kYiA8IHNpemVvZihTTlJfRVEpOyBzbnJfZGIrKykgewotCQkJaWYgKG5vaXNlIDwgU05SX0VRW3Nucl9kYl0pIHsKLQkJCQkqc25yID0gNDMgLSBzbnJfZGI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBQaGFzZSBUcmFja2VyIE1lYW4tU3F1YXJlIEVycm9yIFJlZ2lzdGVyIGZvciBRQU0gKi8KLQkJbm9pc2UgPSAoKGJ1ZlswXSAmIDc8PDMpIDw8IDEzKSB8IChidWZbM10gPDwgOCkgfCBidWZbNF07Ci0KLQkJLyogTG9vayB1cCBub2lzZSB2YWx1ZSBpbiB0YWJsZS4gKi8KLQkJZm9yIChzbnJfZGIgPSAwOyBzbnJfZGIgPCBzaXplb2YoU05SX1BIKTsgc25yX2RiKyspIHsKLQkJCWlmIChub2lzZSA8IFNOUl9QSFtzbnJfZGJdKSB7Ci0JCQkJKnNuciA9IDQ1IC0gc25yX2RiOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQorCQljID0gNjk3NjU3NDU7IC8qIGxvZzEwKDI1KjI0XjIpKjJeMjQgKi8KICNlbHNlCi0JLyogUmV0dXJuIHRoZSByYXcgbm9pc2UgdmFsdWUgKi8KLQlzdGF0aWMgdTggYnVmWzVdOy8qIHJlYWQgZGF0YSBidWZmZXIgKi8KLQlzdGF0aWMgdTMyIG5vaXNlOyAgIC8qIG5vaXNlIHZhbHVlICovCi0Jc3RydWN0IGxnZHQzMzB4X3N0YXRlKiBzdGF0ZSA9IChzdHJ1Y3QgbGdkdDMzMHhfc3RhdGUqKSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQotCS8qIHJlYWQgYm90aCBlcXVhbGl6ZXIgYW5kIHBhc2UgdHJhY2tlciBub2lzZSBkYXRhICovCi0JaTJjX3JlYWRfZGVtb2RfYnl0ZXMoc3RhdGUsIEVRUEhfRVJSMCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0KLQlpZiAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9PSBWU0JfOCkgewotCQkvKiBQaGFzZSBUcmFja2VyIE1lYW4tU3F1YXJlIEVycm9yIFJlZ2lzdGVyIGZvciBWU0IgKi8KKwkJLyogVXNlIFBoYXNlIFRyYWNrZXIgTWVhbi1TcXVhcmUgRXJyb3IgUmVnaXN0ZXIgKi8KKwkJLyogU05SIGZvciByYW5nZXMgZnJvbSAtMTMuMTEgdG8gKzQ0LjA4ICovCiAJCW5vaXNlID0gKChidWZbMF0gJiA3PDwzKSA8PCAxMykgfCAoYnVmWzNdIDw8IDgpIHwgYnVmWzRdOwotCX0gZWxzZSB7Ci0KLQkJLyogQ2FycmllciBSZWNvdmVyeSBNZWFuLVNxdWFyZSBFcnJvciBmb3IgUUFNICovCi0JCWkyY19yZWFkX2RlbW9kX2J5dGVzKHN0YXRlLCAweDFhLCBidWYsIDIpOworCQljID0gNzM5NTc5OTQ7IC8qIGxvZzEwKDI1KjMyXjIpKjJeMjQgKi8KKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwljYXNlIFFBTV8yNTY6CisJCWkyY19yZWFkX2RlbW9kX2J5dGVzKHN0YXRlLCBDQVJSSUVSX01TRVFBTTEsIGJ1ZiwgMik7CiAJCW5vaXNlID0gKChidWZbMF0gJiAzKSA8PCA4KSB8IGJ1ZlsxXTsKKwkJYyA9IHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24gPT0gUUFNXzY0ID8gOTc5Mzk4MzcgOiA5ODAyNjA2NjsKKwkJLyogbG9nMTAoNjg4MTI4KSoyXjI0IGFuZCBsb2cxMCg2OTYzMjApKjJeMjQgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJsZ2R0MzMweDogJXM6IE1vZHVsYXRpb24gc2V0IHRvIHVuc3VwcG9ydGVkIHZhbHVlXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87IC8qIHJldHVybiAtRURSSVZFUl9JU19HSUJCRVJFRDsgKi8KIAl9CiAKLQkvKiBTbWFsbCB2YWx1ZXMgZm9yIG5vaXNlIG1lYW4gc2lnbmFsIGlzIGJldHRlciBzbyBpbnZlcnQgbm9pc2UgKi8KLQkqc25yID0gfm5vaXNlOwotI2VuZGlmCisJc3RhdGUtPnNuciA9IGNhbGN1bGF0ZV9zbnIobm9pc2UsIGMpOworCSpzbnIgPSAoc3RhdGUtPnNucikgPj4gMTY7IC8qIENvbnZlcnQgZnJvbSA4LjI0IGZpeGVkLXBvaW50IHRvIDguOCAqLwogCi0JZHByaW50aygiJXM6IG5vaXNlID0gMHglMDV4LCBzbnIgPSAlaWRiXG4iLF9fRlVOQ1RJT05fXywgbm9pc2UsICpzbnIpOworCWRwcmludGsoIiVzOiBub2lzZSA9IDB4JTA4eCwgc25yID0gJWQuJTAyZCBkQlxuIiwgX19GVU5DVElPTl9fLCBub2lzZSwKKwkJc3RhdGUtPnNuciA+PiAyNCwgKCgoc3RhdGUtPnNucj4+OCkgJiAweGZmZmYpICogMTAwKSA+PiAxNik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBsZ2R0MzMwM19yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIpCiB7Ci0JLyogUmV0dXJuIHRoZSByYXcgbm9pc2UgdmFsdWUgKi8KLQlzdGF0aWMgdTggYnVmWzVdOy8qIHJlYWQgZGF0YSBidWZmZXIgKi8KLQlzdGF0aWMgdTMyIG5vaXNlOyAgIC8qIG5vaXNlIHZhbHVlICovCiAJc3RydWN0IGxnZHQzMzB4X3N0YXRlKiBzdGF0ZSA9IChzdHJ1Y3QgbGdkdDMzMHhfc3RhdGUqKSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBidWZbNV07CS8qIHJlYWQgZGF0YSBidWZmZXIgKi8KKwl1MzIgbm9pc2U7CS8qIG5vaXNlIHZhbHVlICovCisJdTMyIGM7CQkvKiBwZXItbW9kdWxhdGlvbiBTTlIgY2FsY3VsYXRpb24gY29uc3RhbnQgKi8KIAotCWlmIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uID09IFZTQl84KSB7Ci0KLQkJaTJjX3JlYWRfZGVtb2RfYnl0ZXMoc3RhdGUsIDB4NmUsIGJ1ZiwgNSk7Ci0JCS8qIFBoYXNlIFRyYWNrZXIgTWVhbi1TcXVhcmUgRXJyb3IgUmVnaXN0ZXIgZm9yIFZTQiAqLworCXN3aXRjaChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJaTJjX3JlYWRfZGVtb2RfYnl0ZXMoc3RhdGUsIExHRFQzMzAzX0VRUEhfRVJSMCwgYnVmLCA1KTsKKyNpZmRlZiBVU0VfRVFNU0UKKwkJLyogVXNlIEVxdWFsaXplciBNZWFuLVNxdWFyZSBFcnJvciBSZWdpc3RlciAqLworCQkvKiBTTlIgZm9yIHJhbmdlcyBmcm9tIC0xNi4xMiB0byArNDQuMDggKi8KKwkJbm9pc2UgPSAoKGJ1ZlswXSAmIDB4NzgpIDw8IDEzKSB8IChidWZbMV0gPDwgOCkgfCBidWZbMl07CisJCWMgPSA3Mzk1Nzk5NDsgLyogbG9nMTAoMjUqMzJeMikqMl4yNCAqLworI2Vsc2UKKwkJLyogVXNlIFBoYXNlIFRyYWNrZXIgTWVhbi1TcXVhcmUgRXJyb3IgUmVnaXN0ZXIgKi8KKwkJLyogU05SIGZvciByYW5nZXMgZnJvbSAtMTMuMTEgdG8gKzQ0LjA4ICovCiAJCW5vaXNlID0gKChidWZbMF0gJiA3KSA8PCAxNikgfCAoYnVmWzNdIDw8IDgpIHwgYnVmWzRdOwotCX0gZWxzZSB7Ci0KLQkJLyogQ2FycmllciBSZWNvdmVyeSBNZWFuLVNxdWFyZSBFcnJvciBmb3IgUUFNICovCi0JCWkyY19yZWFkX2RlbW9kX2J5dGVzKHN0YXRlLCAweDFhLCBidWYsIDIpOworCQljID0gNzM5NTc5OTQ7IC8qIGxvZzEwKDI1KjMyXjIpKjJeMjQgKi8KKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwljYXNlIFFBTV8yNTY6CisJCWkyY19yZWFkX2RlbW9kX2J5dGVzKHN0YXRlLCBDQVJSSUVSX01TRVFBTTEsIGJ1ZiwgMik7CiAJCW5vaXNlID0gKGJ1ZlswXSA8PCA4KSB8IGJ1ZlsxXTsKKwkJYyA9IHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24gPT0gUUFNXzY0ID8gOTc5Mzk4MzcgOiA5ODAyNjA2NjsKKwkJLyogbG9nMTAoNjg4MTI4KSoyXjI0IGFuZCBsb2cxMCg2OTYzMjApKjJeMjQgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJsZ2R0MzMweDogJXM6IE1vZHVsYXRpb24gc2V0IHRvIHVuc3VwcG9ydGVkIHZhbHVlXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87IC8qIHJldHVybiAtRURSSVZFUl9JU19HSUJCRVJFRDsgKi8KIAl9CiAKLQkvKiBTbWFsbCB2YWx1ZXMgZm9yIG5vaXNlIG1lYW4gc2lnbmFsIGlzIGJldHRlciBzbyBpbnZlcnQgbm9pc2UgKi8KLQkqc25yID0gfm5vaXNlOworCXN0YXRlLT5zbnIgPSBjYWxjdWxhdGVfc25yKG5vaXNlLCBjKTsKKwkqc25yID0gKHN0YXRlLT5zbnIpID4+IDE2OyAvKiBDb252ZXJ0IGZyb20gOC4yNCBmaXhlZC1wb2ludCB0byA4LjggKi8KIAotCWRwcmludGsoIiVzOiBub2lzZSA9IDB4JTA1eCwgc25yID0gJWlkYlxuIixfX0ZVTkNUSU9OX18sIG5vaXNlLCAqc25yKTsKKwlkcHJpbnRrKCIlczogbm9pc2UgPSAweCUwOHgsIHNuciA9ICVkLiUwMmQgZEJcbiIsIF9fRlVOQ1RJT05fXywgbm9pc2UsCisJCXN0YXRlLT5zbnIgPj4gMjQsICgoKHN0YXRlLT5zbnIgPj4gOCkgJiAweGZmZmYpICogMTAwKSA+PiAxNik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMweF9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzdHJlbmd0aCkKK3sKKwkvKiBDYWxjdWxhdGUgU3RyZW5ndGggZnJvbSBTTlIgdXAgdG8gMzVkQiAqLworCS8qIEV2ZW4gdGhvdWdoIHRoZSBTTlIgY2FuIGdvIGhpZ2hlciB0aGFuIDM1ZEIsIHRoZXJlIGlzIHNvbWUgY29tZm9ydCAqLworCS8qIGZhY3RvciBpbiBoYXZpbmcgYSByYW5nZSBvZiBzdHJvbmcgc2lnbmFscyB0aGF0IGNhbiBzaG93IGF0IDEwMCUgICAqLworCXN0cnVjdCBsZ2R0MzMweF9zdGF0ZSogc3RhdGUgPSAoc3RydWN0IGxnZHQzMzB4X3N0YXRlKikgZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IHNucjsKKwlpbnQgcmV0OworCisJcmV0ID0gZmUtPm9wcy5yZWFkX3NucihmZSwgJnNucik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCS8qIFJhdGhlciB0aGFuIHVzZSB0aGUgOC44IHZhbHVlIHNuciwgdXNlIHN0YXRlLT5zbnIgd2hpY2ggaXMgOC4yNCAqLworCS8qIHNjYWxlIHRoZSByYW5nZSAwIC0gMzUqMl4yNCBpbnRvIDAgLSA2NTUzNSAqLworCWlmIChzdGF0ZS0+c25yID49IDg5NjAgKiAweDEwMDAwKQorCQkqc3RyZW5ndGggPSAweGZmZmY7CisJZWxzZQorCQkqc3RyZW5ndGggPSBzdGF0ZS0+c25yIC8gODk2MDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4X3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMweF9wcml2LmgKaW5kZXggNTliN2M1Yi4uMzhjNzY2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4X3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHhfcHJpdi5oCkBAIC01MSwxNCArNTEsMTkgQEAKIAlBR0NfUkZJRl9BQ0MyPSAweDNiLAogCUFHQ19TVEFUVVM9IDB4M2YsCiAJU1lOQ19TVEFUVVNfVlNCPSAweDQzLAotCUVRUEhfRVJSMD0gMHg0NywKLQlFUV9FUlIxPSAweDQ4LAotCUVRX0VSUjI9IDB4NDksCi0JUEhfRVJSMT0gMHg0YSwKLQlQSF9FUlIyPSAweDRiLAogCURFTVVYX0NPTlRST0w9IDB4NjYsCisJTEdEVDMzMDJfRVFQSF9FUlIwPSAweDQ3LAorCUxHRFQzMzAyX0VRX0VSUjE9IDB4NDgsCisJTEdEVDMzMDJfRVFfRVJSMj0gMHg0OSwKKwlMR0RUMzMwMl9QSF9FUlIxPSAweDRhLAorCUxHRFQzMzAyX1BIX0VSUjI9IDB4NGIsCiAJTEdEVDMzMDJfUEFDS0VUX0VSUl9DT1VOVEVSMT0gMHg2YSwKIAlMR0RUMzMwMl9QQUNLRVRfRVJSX0NPVU5URVIyPSAweDZiLAorCUxHRFQzMzAzX0VRUEhfRVJSMD0gMHg2ZSwKKwlMR0RUMzMwM19FUV9FUlIxPSAweDZmLAorCUxHRFQzMzAzX0VRX0VSUjI9IDB4NzAsCisJTEdEVDMzMDNfUEhfRVJSMT0gMHg3MSwKKwlMR0RUMzMwM19QSF9FUlIyPSAweDcyLAogCUxHRFQzMzAzX1BBQ0tFVF9FUlJfQ09VTlRFUjE9IDB4OGIsCiAJTEdEVDMzMDNfUEFDS0VUX0VSUl9DT1VOVEVSMj0gMHg4YywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdoMDZ4Zi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnaDA2eGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjAyZDBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnaDA2eGYuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqICBsZ2gwNnhmLmMgLSBBVFNDIFR1bmVyIHN1cHBvcnQgZm9yIExHIFREVlMtSDA2eEYKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJkdmItcGxsLmgiCisjaW5jbHVkZSAibGdoMDZ4Zi5oIgorCisjZGVmaW5lIExHX0gwNlhGX1BMTF9JMkNfQUREUiAweDYxCisKK3N0cnVjdCBsZ2gwNnhmX3ByaXYgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCXUzMiBmcmVxdWVuY3k7Cit9OworCitzdGF0aWMgaW50IGxnaDA2eGZfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlrZnJlZShmZS0+dHVuZXJfcHJpdik7CisJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnaDA2eGZfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKKwkJCSAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQoreworCXN0cnVjdCBsZ2gwNnhmX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1OCBidWZbNF07CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IExHX0gwNlhGX1BMTF9JMkNfQUREUiwgLmZsYWdzID0gMCwKKwkJCSAgICAgICAuYnVmID0gYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKKwl1MzIgZnJlcXVlbmN5OworCWludCByZXN1bHQ7CisKKwlpZiAoKHJlc3VsdCA9IGR2Yl9wbGxfY29uZmlndXJlKCZkdmJfcGxsX2xnX3RkdnNfaDA2eGYsIGJ1ZiwKKwkJCQkJcGFyYW1zLT5mcmVxdWVuY3ksIDApKSA8IDApCisJCXJldHVybiByZXN1bHQ7CisJZWxzZQorCQlmcmVxdWVuY3kgPSByZXN1bHQ7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCWlmICgocmVzdWx0ID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibGdoMDZ4ZjogJXMgZXJyb3IgIgorCQkgICAgICAgIihhZGRyICUwMnggPC0gJTAyeCwgcmVzdWx0ID0gJWkpXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBidWZbMF0sIGJ1ZlsxXSwgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gcmVzdWx0OworCQllbHNlCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwkvKiBTZXQgdGhlIEF1eGlsaWFyeSBCeXRlLiAqLworCWJ1ZlswXSA9IGJ1ZlsyXTsKKwlidWZbMF0gJj0gfjB4MjA7CisJYnVmWzBdIHw9IDB4MTg7CisJYnVmWzFdID0gMHg1MDsKKwltc2cubGVuID0gMjsKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCWlmICgocmVzdWx0ID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibGdoMDZ4ZjogJXMgZXJyb3IgIgorCQkgICAgICAgIihhZGRyICUwMnggPC0gJTAyeCwgcmVzdWx0ID0gJWkpXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBidWZbMF0sIGJ1ZlsxXSwgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gcmVzdWx0OworCQllbHNlCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwlwcml2LT5mcmVxdWVuY3kgPSBmcmVxdWVuY3k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2gwNnhmX2dldF9mcmVxdWVuY3koc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqZnJlcXVlbmN5KQoreworCXN0cnVjdCBsZ2gwNnhmX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwkqZnJlcXVlbmN5ID0gcHJpdi0+ZnJlcXVlbmN5OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl90dW5lcl9vcHMgbGdoMDZ4Zl90dW5lcl9vcHMgPSB7CisJLnJlbGVhc2UgICAgICAgPSBsZ2gwNnhmX3JlbGVhc2UsCisJLnNldF9wYXJhbXMgICAgPSBsZ2gwNnhmX3NldF9wYXJhbXMsCisJLmdldF9mcmVxdWVuY3kgPSBsZ2gwNnhmX2dldF9mcmVxdWVuY3ksCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBsZ2gwNnhmX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJc3RydWN0IGxnaDA2eGZfcHJpdiAqcHJpdiA9IE5VTEw7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxnaDA2eGZfcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcHJpdi0+aTJjID0gaTJjOworCisJbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJmxnaDA2eGZfdHVuZXJfb3BzLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKKworCXN0cmxjcHkoZmUtPm9wcy50dW5lcl9vcHMuaW5mby5uYW1lLCBkdmJfcGxsX2xnX3RkdnNfaDA2eGYubmFtZSwKKwkJc2l6ZW9mKGZlLT5vcHMudHVuZXJfb3BzLmluZm8ubmFtZSkpOworCisJZmUtPm9wcy50dW5lcl9vcHMuaW5mby5mcmVxdWVuY3lfbWluID0gZHZiX3BsbF9sZ190ZHZzX2gwNnhmLm1pbjsKKwlmZS0+b3BzLnR1bmVyX29wcy5pbmZvLmZyZXF1ZW5jeV9tYXggPSBkdmJfcGxsX2xnX3RkdnNfaDA2eGYubWF4OworCisJZmUtPnR1bmVyX3ByaXYgPSBwcml2OworCXJldHVybiBmZTsKK30KKworRVhQT1JUX1NZTUJPTChsZ2gwNnhmX2F0dGFjaCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTEcgVERWUy1IMDZ4RiBBVFNDIFR1bmVyIHN1cHBvcnQiKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgS3J1Zmt5Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdoMDZ4Zi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnaDA2eGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTBiNGJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnaDA2eGYuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogIGxnaDA2eGYuaCAtIEFUU0MgVHVuZXIgc3VwcG9ydCBmb3IgTEcgVERWUy1IMDZ4RgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTEdIMDZYRl9IXworI2RlZmluZSBfTEdIMDZYRl9IXworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX0xHSDA2WEYpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVFVORVJfTEdIMDZYRl9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBsZ2gwNnhmX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKKwkJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGxnaDA2eGZfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorCQkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX0RWQl9UVU5FUl9MR0gwNlhGICovCisKKyNlbmRpZiAvKiBfTEdIMDZYRl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTExMzIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMTMyLmMKaW5kZXggZDIwYWIzMC4uNWEzYTZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTExMzIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTEzMi5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAorI2luY2x1ZGUgImR2Yl9tYXRoLmgiCiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAiZHZiLXBsbC5oIgogI2luY2x1ZGUgIm9yNTExMzIuaCIKQEAgLTYyLDYgKzYzLDcgQEAKIAogCS8qIERlbW9kdWxhdG9yIHByaXZhdGUgZGF0YSAqLwogCWZlX21vZHVsYXRpb25fdCBjdXJyZW50X21vZHVsYXRpb247CisJdTMyIHNucjsgLyogUmVzdWx0IG9mIGxhc3QgU05SIGNhbGN1bGF0aW9uICovCiAKIAkvKiBUdW5lciBwcml2YXRlIGRhdGEgKi8KIAl1MzIgY3VycmVudF9mcmVxdWVuY3k7CkBAIC00NjUsMTI0ICs0NjcsMTI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGxvZzEwLTEgdGFibGUgYXQgLjUgaW5jcmVtZW50cyBmcm9tIDEgdG8gMTAwLjUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTEwMHgyMGxvZzEwW10gPSB7Ci0gICAgIDAsICAzNTIsICA2MDIsICA3OTUsICA5NTQsIDEwODgsIDEyMDQsIDEzMDYsIDEzOTcsIDE0ODAsCi0gIDE1NTYsIDE2MjUsIDE2OTAsIDE3NTAsIDE4MDYsIDE4NTgsIDE5MDgsIDE5NTUsIDIwMDAsIDIwNDIsCi0gIDIwODIsIDIxMjEsIDIxNTgsIDIxOTMsIDIyMjcsIDIyNjAsIDIyOTIsIDIzMjIsIDIzNTIsIDIzODAsCi0gIDI0MDgsIDI0MzQsIDI0NjAsIDI0ODYsIDI1MTAsIDI1MzQsIDI1NTcsIDI1ODAsIDI2MDIsIDI2MjMsCi0gIDI2NDQsIDI2NjQsIDI2ODQsIDI3MDQsIDI3MjMsIDI3NDIsIDI3NjAsIDI3NzgsIDI3OTUsIDI4MTMsCi0gIDI4MjksIDI4NDYsIDI4NjIsIDI4NzgsIDI4OTQsIDI5MDksIDI5MjQsIDI5MzksIDI5NTQsIDI5NjgsCi0gIDI5ODIsIDI5OTYsIDMwMTAsIDMwMjMsIDMwMzcsIDMwNTAsIDMwNjIsIDMwNzUsIDMwODgsIDMxMDAsCi0gIDMxMTIsIDMxMjQsIDMxMzYsIDMxNDgsIDMxNTksIDMxNzAsIDMxODIsIDMxOTMsIDMyMDQsIDMyMTQsCi0gIDMyMjUsIDMyMzYsIDMyNDYsIDMyNTYsIDMyNjYsIDMyNzYsIDMyODYsIDMyOTYsIDMzMDYsIDMzMTYsCi0gIDMzMjUsIDMzMzQsIDMzNDQsIDMzNTMsIDMzNjIsIDMzNzEsIDMzODAsIDMzODksIDMzOTcsIDM0MDYsCi0gIDM0MTUsIDM0MjMsIDM0MzIsIDM0NDAsIDM0NDgsIDM0NTYsIDM0NjQsIDM0NzIsIDM0ODAsIDM0ODgsCi0gIDM0OTYsIDM1MDQsIDM1MTEsIDM1MTksIDM1MjYsIDM1MzQsIDM1NDEsIDM1NDksIDM1NTYsIDM1NjMsCi0gIDM1NzAsIDM1NzcsIDM1ODQsIDM1OTEsIDM1OTgsIDM2MDUsIDM2MTIsIDM2MTksIDM2MjUsIDM2MzIsCi0gIDM2MzksIDM2NDUsIDM2NTIsIDM2NTgsIDM2NjUsIDM2NzEsIDM2NzcsIDM2ODMsIDM2OTAsIDM2OTYsCi0gIDM3MDIsIDM3MDgsIDM3MTQsIDM3MjAsIDM3MjYsIDM3MzIsIDM3MzgsIDM3NDQsIDM3NTAsIDM3NTUsCi0gIDM3NjEsIDM3NjcsIDM3NzIsIDM3NzgsIDM3ODQsIDM3ODksIDM3OTUsIDM4MDAsIDM4MDYsIDM4MTEsCi0gIDM4MTYsIDM4MjIsIDM4MjcsIDM4MzIsIDM4MzgsIDM4NDMsIDM4NDgsIDM4NTMsIDM4NTgsIDM4NjMsCi0gIDM4NjgsIDM4NzQsIDM4NzksIDM4ODQsIDM4ODgsIDM4OTMsIDM4OTgsIDM5MDMsIDM5MDgsIDM5MTMsCi0gIDM5MTgsIDM5MjIsIDM5MjcsIDM5MzIsIDM5MzYsIDM5NDEsIDM5NDYsIDM5NTAsIDM5NTUsIDM5NjAsCi0gIDM5NjQsIDM5NjksIDM5NzMsIDM5NzgsIDM5ODIsIDM5ODYsIDM5OTEsIDM5OTUsIDQwMDAsIDQwMDQsCi19OworLyogQ2FsY3VsYXRlIFNOUiBlc3RpbWF0aW9uIChzY2FsZWQgYnkgMl4yNCkKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZW5vbVtdID0gezEsMSwxMDAsMTAwMCwxMDAwMCwxMDAwMDAsMTAwMDAwMCwxMDAwMDAwMCwxMDAwMDAwMDB9OworICAgOC1WU0IgU05SIGFuZCBRQU0gZXF1YXRpb25zIGZyb20gT3JlbiBkYXRhc2hlZXRzCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTIwTG9nMTAodW5zaWduZWQgc2hvcnQgdmFsKQorICAgRm9yIDgtVlNCOgorICAgICBTTlJbZEJdID0gMTAgKiBsb2cxMCg4OTcxNTIwNDQuODI4MiAvIE1TRV4yICkgLSBLCisKKyAgICAgV2hlcmUgSyA9IDAgaWYgTlRTQyByZWplY3Rpb24gZmlsdGVyIGlzIE9GRjsgYW5kCisJICAgSyA9IDMgaWYgTlRTQyByZWplY3Rpb24gZmlsdGVyIGlzIE9OCisKKyAgIEZvciBRQU02NDoKKyAgICAgU05SW2RCXSA9IDEwICogbG9nMTAoODk3MTUyMDQ0LjgyODIgLyBNU0VeMiApCisKKyAgIEZvciBRQU0yNTY6CisgICAgIFNOUltkQl0gPSAxMCAqIGxvZzEwKDkwNzgzMjQyNi4zMTQyNjYgIC8gTVNFXjIgKQorCisgICBXZSByZS13cml0ZSB0aGUgc25yIGVxdWF0aW9uIGFzOgorICAgICBTTlIgKiAyXjI0ID0gMTAqKGMgLSAyKmludGxvZzEwKE1TRSkpCisgICBXaGVyZSBmb3IgUUFNMjU2LCBjID0gbG9nMTAoOTA3ODMyNDI2LjMxNDI2NikgKiAyXjI0CisgICBhbmQgZm9yIDgtVlNCIGFuZCBRQU02NCwgYyA9IGxvZzEwKDg5NzE1MjA0NC44MjgyKSAqIDJeMjQgKi8KKworc3RhdGljIHUzMiBjYWxjdWxhdGVfc25yKHUzMiBtc2UsIHUzMiBjKQogewotCXVuc2lnbmVkIGludCBybnR2YWwgPSAxMDA7Ci0JdW5zaWduZWQgaW50IHRtcCA9IHZhbDsKLQl1bnNpZ25lZCBpbnQgZXhwID0gMTsKKwlpZiAobXNlID09IDApIC8qIE5vIHNpZ25hbCAqLworCQlyZXR1cm4gMDsKIAotCXdoaWxlKHRtcCA+IDEwMCkge3RtcCAvPSAxMDA7IGV4cCsrO30KLQotCXZhbCA9ICgyICogdmFsKS9kZW5vbVtleHBdOwotCWlmIChleHAgPiAxKSBybnR2YWwgPSAyMDAwKmV4cDsKLQotCXJudHZhbCArPSBpMTAweDIwbG9nMTBbdmFsXTsKLQlyZXR1cm4gcm50dmFsOwotfQotCi1zdGF0aWMgaW50IG9yNTExMzJfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc3RyZW5ndGgpCi17Ci0Jc3RydWN0IG9yNTExMzJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JdW5zaWduZWQgY2hhciByZWNfYnVmWzJdOwotCXVuc2lnbmVkIGNoYXIgc25kX2J1ZlsyXTsKLQl1OCByY3ZyX3N0YXQ7Ci0JdTE2IHNucl9lcXU7Ci0JdTMyIHNpZ25hbF9zdHJlbmd0aDsKLQlpbnQgdXNLOwotCi0Jc25kX2J1ZlswXT0weDA0OwotCXNuZF9idWZbMV09MHgwMjsgLyogU05SIGFmdGVyIEVxdWFsaXplciAqLwotCW1zbGVlcCgzMCk7IC8qIDMwbXMgKi8KLQlpZiAoaTJjX3dyaXRlYnl0ZXMoc3RhdGUsc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcyxzbmRfYnVmLDIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm9yNTExMzI6IHJlYWRfc3RhdHVzIHdyaXRlIGVycm9yXG4iKTsKLQkJcmV0dXJuIC0xOworCW1zZSA9IDIqaW50bG9nMTAobXNlKTsKKwlpZiAobXNlID4gYykgeworCQkvKiBOZWdhdGl2ZSBTTlIsIHdoaWNoIGlzIHBvc3NpYmxlLCBidXQgcmVhbGlzdGljbHkgdGhlCisJCWRlbW9kIHdpbGwgbG9zZSBsb2NrIGJlZm9yZSB0aGUgc2lnbmFsIGdldHMgdGhpcyBiYWQuICBUaGUKKwkJQVBJIG9ubHkgYWxsb3dzIGZvciB1bnNpZ25lZCB2YWx1ZXMsIHNvIGp1c3QgcmV0dXJuIDAgKi8KKwkJcmV0dXJuIDA7CiAJfQotCW1zbGVlcCgzMCk7IC8qIDMwbXMgKi8KLQlpZiAoaTJjX3JlYWRieXRlcyhzdGF0ZSxzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLHJlY19idWYsMikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAib3I1MTEzMjogcmVhZF9zdGF0dXMgcmVhZCBlcnJvclxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0Jc25yX2VxdSA9IHJlY19idWZbMF0gfCAocmVjX2J1ZlsxXSA8PCA4KTsKLQlkcHJpbnRrKCJyZWFkX3NpZ25hbF9zdHJlbmd0aCBzbnJfZXF1ICV4ICV4ICglaSlcbiIscmVjX2J1ZlswXSxyZWNfYnVmWzFdLHNucl9lcXUpOwotCi0JLyogUmVjZWl2ZXIgU3RhdHVzICovCi0Jc25kX2J1ZlswXT0weDA0OwotCXNuZF9idWZbMV09MHgwMDsKLQltc2xlZXAoMzApOyAvKiAzMG1zICovCi0JaWYgKGkyY193cml0ZWJ5dGVzKHN0YXRlLHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3Msc25kX2J1ZiwyKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcjUxMTMyOiByZWFkX3NpZ25hbF9zdHJlbmd0aCByZWFkX3N0YXR1cyB3cml0ZSBlcnJvclxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JbXNsZWVwKDMwKTsgLyogMzBtcyAqLwotCWlmIChpMmNfcmVhZGJ5dGVzKHN0YXRlLHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MscmVjX2J1ZiwyKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcjUxMTMyOiByZWFkX3NpZ25hbF9zdHJlbmd0aCByZWFkX3N0YXR1cyByZWFkIGVycm9yXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlkcHJpbnRrKCJyZWFkX3NpZ25hbF9zdHJlbmd0aCByZWFkX3N0YXR1cyAleCAleFxuIixyZWNfYnVmWzBdLHJlY19idWZbMV0pOwotCXJjdnJfc3RhdCA9IHJlY19idWZbMV07Ci0JdXNLID0gKHJjdnJfc3RhdCAmIDB4MTApID8gMyA6IDA7Ci0KLQkvKiBUaGUgdmFsdWUgcmVwb3J0ZWQgYmFjayBmcm9tIHRoZSBmcm9udGVuZCB3aWxsIGJlIEZGRkY9MTAwJSAwMDAwPTAlICovCi0Jc2lnbmFsX3N0cmVuZ3RoID0gKCgoODk1MiAtIGkyMExvZzEwKHNucl9lcXUpIC0gdXNLKjEwMCkvMys1KSo2NTUzNSkvMTAwMDsKLQlpZiAoc2lnbmFsX3N0cmVuZ3RoID4gMHhmZmZmKQotCQkqc3RyZW5ndGggPSAweGZmZmY7Ci0JZWxzZQotCQkqc3RyZW5ndGggPSBzaWduYWxfc3RyZW5ndGg7Ci0JZHByaW50aygicmVhZF9zaWduYWxfc3RyZW5ndGggJWlcbiIsKnN0cmVuZ3RoKTsKLQotCXJldHVybiAwOworCXJldHVybiAxMCooYyAtIG1zZSk7CiB9CiAKIHN0YXRpYyBpbnQgb3I1MTEzMl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIpCiB7CiAJc3RydWN0IG9yNTExMzJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JdW5zaWduZWQgY2hhciByZWNfYnVmWzJdOwotCXVuc2lnbmVkIGNoYXIgc25kX2J1ZlsyXTsKLQl1MTYgc25yX2VxdTsKKwl1OCByZWNfYnVmWzJdOworCXU4IHNuZF9idWZbMl07CisJdTMyIG5vaXNlOworCXUzMiBjOworCXUzMiB1c0s7CiAKKwkvKiBSZWdpc3RlciBpcyBzYW1lIGZvciBWU0Igb3IgUUFNIGZpcm13YXJlICovCiAJc25kX2J1ZlswXT0weDA0OwogCXNuZF9idWZbMV09MHgwMjsgLyogU05SIGFmdGVyIEVxdWFsaXplciAqLwogCW1zbGVlcCgzMCk7IC8qIDMwbXMgKi8KIAlpZiAoaTJjX3dyaXRlYnl0ZXMoc3RhdGUsc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcyxzbmRfYnVmLDIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm9yNTExMzI6IHJlYWRfc25yIHdyaXRlIGVycm9yXG4iKTsKLQkJcmV0dXJuIC0xOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcjUxMTMyOiBzbnIgd3JpdGUgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAl9CiAJbXNsZWVwKDMwKTsgLyogMzBtcyAqLwogCWlmIChpMmNfcmVhZGJ5dGVzKHN0YXRlLHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MscmVjX2J1ZiwyKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcjUxMTMyOiByZWFkX3NuciBkdnIgcmVhZCBlcnJvclxuIik7Ci0JCXJldHVybiAtMTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAib3I1MTEzMjogc25yIHJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAl9Ci0Jc25yX2VxdSA9IHJlY19idWZbMF0gfCAocmVjX2J1ZlsxXSA8PCA4KTsKLQlkcHJpbnRrKCJyZWFkX3NuciBzbnJfZXF1ICV4ICV4ICglaSlcbiIscmVjX2J1ZlswXSxyZWNfYnVmWzFdLHNucl9lcXUpOworCW5vaXNlID0gcmVjX2J1ZlswXSB8IChyZWNfYnVmWzFdIDw8IDgpOworCWRwcmludGsoInJlYWRfc25yIG5vaXNlICV4ICV4ICglaSlcbiIscmVjX2J1ZlswXSxyZWNfYnVmWzFdLG5vaXNlKTsKIAotCSpzbnIgPSAweEZGRkYgLSBzbnJfZXF1OwotCWRwcmludGsoInJlYWRfc25yICVpXG4iLCpzbnIpOworCS8qIFJlYWQgc3RhdHVzLCBjb250YWlucyBtb2R1bGF0aW9uIHR5cGUgZm9yIFFBTV9BVVRPIGFuZAorCSAgIE5UU0MgZmlsdGVyIGZvciBWU0IgKi8KKwlzbmRfYnVmWzBdPTB4MDQ7CisJc25kX2J1ZlsxXT0weDAwOyAvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KKwltc2xlZXAoMzApOyAvKiAzMG1zICovCisJaWYgKGkyY193cml0ZWJ5dGVzKHN0YXRlLHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3Msc25kX2J1ZiwyKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcjUxMTMyOiBzdGF0dXMgd3JpdGUgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJbXNsZWVwKDMwKTsgLyogMzBtcyAqLworCWlmIChpMmNfcmVhZGJ5dGVzKHN0YXRlLHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MscmVjX2J1ZiwyKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcjUxMTMyOiBzdGF0dXMgcmVhZCBlcnJvclxuIik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKworCXVzSyA9IDA7CisJc3dpdGNoIChyZWNfYnVmWzBdKSB7CisJY2FzZSAweDA2OgorCQl1c0sgPSAocmVjX2J1ZlsxXSAmIDB4MTApID8gMHgwMzAwMDAwMCA6IDA7CisJCS8qIEZhbGwgdGhyb3VnaCB0byBRQU02NCBjYXNlICovCisJY2FzZSAweDQzOgorCQljID0gMTUwMjA0MTY3OworCQlicmVhazsKKwljYXNlIDB4NDU6CisJCWMgPSAxNTAyOTAzOTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAib3I1MTEzMjogdW5rbm93biBzdGF0dXMgMHglMDJ4XG4iLCByZWNfYnVmWzBdKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCWRwcmludGsoIiVzOiBtb2R1bGF0aW9uICUwMngsIE5UU0MgcmVqIE8lc1xuIiwgX19GVU5DVElPTl9fLAorCQlyZWNfYnVmWzBdLCByZWNfYnVmWzFdJjB4MTA/Im4iOiJmZiIpOworCisJLyogQ2FsY3VsYXRlIFNOUiB1c2luZyBub2lzZSwgYywgYW5kIE5UU0MgcmVqZWN0aW9uIGNvcnJlY3Rpb24gKi8KKwlzdGF0ZS0+c25yID0gY2FsY3VsYXRlX3Nucihub2lzZSwgYykgLSB1c0s7CisJKnNuciA9IChzdGF0ZS0+c25yKSA+PiAxNjsKKworCWRwcmludGsoIiVzOiBub2lzZSA9IDB4JTA4eCwgc25yID0gJWQuJTAyZCBkQlxuIiwgX19GVU5DVElPTl9fLCBub2lzZSwKKwkJc3RhdGUtPnNuciA+PiAyNCwgKCgoc3RhdGUtPnNucj4+OCkgJiAweGZmZmYpICogMTAwKSA+PiAxNik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcjUxMTMyX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHN0cmVuZ3RoKQoreworCS8qIENhbGN1bGF0ZSBTdHJlbmd0aCBmcm9tIFNOUiB1cCB0byAzNWRCICovCisJLyogRXZlbiB0aG91Z2ggdGhlIFNOUiBjYW4gZ28gaGlnaGVyIHRoYW4gMzVkQiwgdGhlcmUgaXMgc29tZSBjb21mb3J0ICovCisJLyogZmFjdG9yIGluIGhhdmluZyBhIHJhbmdlIG9mIHN0cm9uZyBzaWduYWxzIHRoYXQgY2FuIHNob3cgYXQgMTAwJSAgICovCisJc3RydWN0IG9yNTExMzJfc3RhdGUqIHN0YXRlID0gKHN0cnVjdCBvcjUxMTMyX3N0YXRlKikgZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IHNucjsKKwlpbnQgcmV0OworCisJcmV0ID0gZmUtPm9wcy5yZWFkX3NucihmZSwgJnNucik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCS8qIFJhdGhlciB0aGFuIHVzZSB0aGUgOC44IHZhbHVlIHNuciwgdXNlIHN0YXRlLT5zbnIgd2hpY2ggaXMgOC4yNCAqLworCS8qIHNjYWxlIHRoZSByYW5nZSAwIC0gMzUqMl4yNCBpbnRvIDAgLSA2NTUzNSAqLworCWlmIChzdGF0ZS0+c25yID49IDg5NjAgKiAweDEwMDAwKQorCQkqc3RyZW5ndGggPSAweGZmZmY7CisJZWxzZQorCQkqc3RyZW5ndGggPSBzdGF0ZS0+c25yIC8gODk2MDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmMKaW5kZXggMmJmMTI0Yi4uMDQ4ZDdjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTIxMS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAorI2luY2x1ZGUgImR2Yl9tYXRoLmgiCiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAib3I1MTIxMS5oIgogCkBAIC02Myw2ICs2NCw3IEBACiAKIAkvKiBEZW1vZHVsYXRvciBwcml2YXRlIGRhdGEgKi8KIAl1OCBpbml0aWFsaXplZDoxOworCXUzMiBzbnI7IC8qIFJlc3VsdCBvZiBsYXN0IFNOUiBjbGFjdWxhdGlvbiAqLwogCiAJLyogVHVuZXIgcHJpdmF0ZSBkYXRhICovCiAJdTMyIGN1cnJlbnRfZnJlcXVlbmN5OwpAQCAtMjkyLDEwNyArMjk0LDgxIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGxvZzEwLTEgdGFibGUgYXQgLjUgaW5jcmVtZW50cyBmcm9tIDEgdG8gMTAwLjUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTEwMHgyMGxvZzEwW10gPSB7Ci0JCTAsICAzNTIsICA2MDIsICA3OTUsICA5NTQsIDEwODgsIDEyMDQsIDEzMDYsIDEzOTcsIDE0ODAsCi0JIDE1NTYsIDE2MjUsIDE2OTAsIDE3NTAsIDE4MDYsIDE4NTgsIDE5MDgsIDE5NTUsIDIwMDAsIDIwNDIsCi0JIDIwODIsIDIxMjEsIDIxNTgsIDIxOTMsIDIyMjcsIDIyNjAsIDIyOTIsIDIzMjIsIDIzNTIsIDIzODAsCi0JIDI0MDgsIDI0MzQsIDI0NjAsIDI0ODYsIDI1MTAsIDI1MzQsIDI1NTcsIDI1ODAsIDI2MDIsIDI2MjMsCi0JIDI2NDQsIDI2NjQsIDI2ODQsIDI3MDQsIDI3MjMsIDI3NDIsIDI3NjAsIDI3NzgsIDI3OTUsIDI4MTMsCi0JIDI4MjksIDI4NDYsIDI4NjIsIDI4NzgsIDI4OTQsIDI5MDksIDI5MjQsIDI5MzksIDI5NTQsIDI5NjgsCi0JIDI5ODIsIDI5OTYsIDMwMTAsIDMwMjMsIDMwMzcsIDMwNTAsIDMwNjIsIDMwNzUsIDMwODgsIDMxMDAsCi0JIDMxMTIsIDMxMjQsIDMxMzYsIDMxNDgsIDMxNTksIDMxNzAsIDMxODIsIDMxOTMsIDMyMDQsIDMyMTQsCi0JIDMyMjUsIDMyMzYsIDMyNDYsIDMyNTYsIDMyNjYsIDMyNzYsIDMyODYsIDMyOTYsIDMzMDYsIDMzMTYsCi0JIDMzMjUsIDMzMzQsIDMzNDQsIDMzNTMsIDMzNjIsIDMzNzEsIDMzODAsIDMzODksIDMzOTcsIDM0MDYsCi0JIDM0MTUsIDM0MjMsIDM0MzIsIDM0NDAsIDM0NDgsIDM0NTYsIDM0NjQsIDM0NzIsIDM0ODAsIDM0ODgsCi0JIDM0OTYsIDM1MDQsIDM1MTEsIDM1MTksIDM1MjYsIDM1MzQsIDM1NDEsIDM1NDksIDM1NTYsIDM1NjMsCi0JIDM1NzAsIDM1NzcsIDM1ODQsIDM1OTEsIDM1OTgsIDM2MDUsIDM2MTIsIDM2MTksIDM2MjUsIDM2MzIsCi0JIDM2MzksIDM2NDUsIDM2NTIsIDM2NTgsIDM2NjUsIDM2NzEsIDM2NzcsIDM2ODMsIDM2OTAsIDM2OTYsCi0JIDM3MDIsIDM3MDgsIDM3MTQsIDM3MjAsIDM3MjYsIDM3MzIsIDM3MzgsIDM3NDQsIDM3NTAsIDM3NTUsCi0JIDM3NjEsIDM3NjcsIDM3NzIsIDM3NzgsIDM3ODQsIDM3ODksIDM3OTUsIDM4MDAsIDM4MDYsIDM4MTEsCi0JIDM4MTYsIDM4MjIsIDM4MjcsIDM4MzIsIDM4MzgsIDM4NDMsIDM4NDgsIDM4NTMsIDM4NTgsIDM4NjMsCi0JIDM4NjgsIDM4NzQsIDM4NzksIDM4ODQsIDM4ODgsIDM4OTMsIDM4OTgsIDM5MDMsIDM5MDgsIDM5MTMsCi0JIDM5MTgsIDM5MjIsIDM5MjcsIDM5MzIsIDM5MzYsIDM5NDEsIDM5NDYsIDM5NTAsIDM5NTUsIDM5NjAsCi0JIDM5NjQsIDM5NjksIDM5NzMsIDM5NzgsIDM5ODIsIDM5ODYsIDM5OTEsIDM5OTUsIDQwMDAsIDQwMDQsCi19OworLyogQ2FsY3VsYXRlIFNOUiBlc3RpbWF0aW9uIChzY2FsZWQgYnkgMl4yNCkKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZW5vbVtdID0gezEsMSwxMDAsMTAwMCwxMDAwMCwxMDAwMDAsMTAwMDAwMCwxMDAwMDAwMCwxMDAwMDAwMDB9OworICAgOC1WU0IgU05SIGVxdWF0aW9uIGZyb20gT3JlbiBkYXRhc2hlZXRzCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTIwTG9nMTAodW5zaWduZWQgc2hvcnQgdmFsKQorICAgRm9yIDgtVlNCOgorICAgICBTTlJbZEJdID0gMTAgKiBsb2cxMCgyMTkwMzcuOTQ1NCAvIE1TRV4yICkKKworICAgV2UgcmUtd3JpdGUgdGhlIHNuciBlcXVhdGlvbiBhczoKKyAgICAgU05SICogMl4yNCA9IDEwKihjIC0gMippbnRsb2cxMChNU0UpKQorICAgV2hlcmUgZm9yIDgtVlNCLCBjID0gbG9nMTAoMjE5MDM3Ljk0NTQpICogMl4yNCAqLworCitzdGF0aWMgdTMyIGNhbGN1bGF0ZV9zbnIodTMyIG1zZSwgdTMyIGMpCiB7Ci0JdW5zaWduZWQgaW50IHJudHZhbCA9IDEwMDsKLQl1bnNpZ25lZCBpbnQgdG1wID0gdmFsOwotCXVuc2lnbmVkIGludCBleHAgPSAxOworCWlmIChtc2UgPT0gMCkgLyogTm8gc2lnbmFsICovCisJCXJldHVybiAwOwogCi0Jd2hpbGUodG1wID4gMTAwKSB7dG1wIC89IDEwMDsgZXhwKys7fQotCi0JdmFsID0gKDIgKiB2YWwpL2Rlbm9tW2V4cF07Ci0JaWYgKGV4cCA+IDEpIHJudHZhbCA9IDIwMDAqZXhwOwotCi0Jcm50dmFsICs9IGkxMDB4MjBsb2cxMFt2YWxdOwotCXJldHVybiBybnR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgb3I1MTIxMV9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzdHJlbmd0aCkKLXsKLQlzdHJ1Y3Qgb3I1MTIxMV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1OCByZWNfYnVmWzJdOwotCXU4IHNuZF9idWZbNF07Ci0JdTggc25yX2VxdTsKLQl1MzIgc2lnbmFsX3N0cmVuZ3RoOwotCi0JLyogU05SIGFmdGVyIEVxdWFsaXplciAqLwotCXNuZF9idWZbMF0gPSAweDA0OwotCXNuZF9idWZbMV0gPSAweDAwOwotCXNuZF9idWZbMl0gPSAweDA0OwotCXNuZF9idWZbM10gPSAweDAwOwotCi0JaWYgKGkyY193cml0ZWJ5dGVzKHN0YXRlLHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3Msc25kX2J1ZiwzKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcjUxMjExOiByZWFkX3N0YXR1cyB3cml0ZSBlcnJvclxuIik7Ci0JCXJldHVybiAtMTsKKwltc2UgPSAyKmludGxvZzEwKG1zZSk7CisJaWYgKG1zZSA+IGMpIHsKKwkJLyogTmVnYXRpdmUgU05SLCB3aGljaCBpcyBwb3NzaWJsZSwgYnV0IHJlYWxpc3RpY2x5IHRoZQorCQlkZW1vZCB3aWxsIGxvc2UgbG9jayBiZWZvcmUgdGhlIHNpZ25hbCBnZXRzIHRoaXMgYmFkLiAgVGhlCisJCUFQSSBvbmx5IGFsbG93cyBmb3IgdW5zaWduZWQgdmFsdWVzLCBzbyBqdXN0IHJldHVybiAwICovCisJCXJldHVybiAwOwogCX0KLQltc2xlZXAoMyk7Ci0JaWYgKGkyY19yZWFkYnl0ZXMoc3RhdGUsc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcyxyZWNfYnVmLDIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm9yNTEyMTE6IHJlYWRfc3RhdHVzIHJlYWQgZXJyb3JcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXNucl9lcXUgPSByZWNfYnVmWzBdICYgMHhmZjsKLQotCS8qIFRoZSB2YWx1ZSByZXBvcnRlZCBiYWNrIGZyb20gdGhlIGZyb250ZW5kIHdpbGwgYmUgRkZGRj0xMDAlIDAwMDA9MCUgKi8KLQlzaWduYWxfc3RyZW5ndGggPSAoKCg1MzM0IC0gaTIwTG9nMTAoc25yX2VxdSkpLzMrNSkqNjU1MzUpLzEwMDA7Ci0JaWYgKHNpZ25hbF9zdHJlbmd0aCA+IDB4ZmZmZikKLQkJKnN0cmVuZ3RoID0gMHhmZmZmOwotCWVsc2UKLQkJKnN0cmVuZ3RoID0gc2lnbmFsX3N0cmVuZ3RoOwotCWRwcmludGsoInJlYWRfc2lnbmFsX3N0cmVuZ3RoICVpXG4iLCpzdHJlbmd0aCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTAqKGMgLSBtc2UpOwogfQogCiBzdGF0aWMgaW50IG9yNTEyMTFfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQogewogCXN0cnVjdCBvcjUxMjExX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXU4IHJlY19idWZbMl07Ci0JdTggc25kX2J1Zls0XTsKKwl1OCBzbmRfYnVmWzNdOwogCiAJLyogU05SIGFmdGVyIEVxdWFsaXplciAqLwogCXNuZF9idWZbMF0gPSAweDA0OwogCXNuZF9idWZbMV0gPSAweDAwOwogCXNuZF9idWZbMl0gPSAweDA0OwotCXNuZF9idWZbM10gPSAweDAwOwogCiAJaWYgKGkyY193cml0ZWJ5dGVzKHN0YXRlLHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3Msc25kX2J1ZiwzKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcjUxMjExOiByZWFkX3N0YXR1cyB3cml0ZSBlcnJvclxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBlcnJvciB3cml0aW5nIHNuciByZWdcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLTE7CiAJfQotCW1zbGVlcCgzKTsKIAlpZiAoaTJjX3JlYWRieXRlcyhzdGF0ZSxzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLHJlY19idWYsMikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAib3I1MTIxMTogcmVhZF9zdGF0dXMgcmVhZCBlcnJvclxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWFkX3N0YXR1cyByZWFkIGVycm9yXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkqc25yID0gcmVjX2J1ZlswXSAmIDB4ZmY7CiAKLQlkcHJpbnRrKCJyZWFkX3NuciAlaVxuIiwqc25yKTsKKwlzdGF0ZS0+c25yID0gY2FsY3VsYXRlX3NucihyZWNfYnVmWzBdLCA4OTU5OTA0Nyk7CisJKnNuciA9IChzdGF0ZS0+c25yKSA+PiAxNjsKKworCWRwcmludGsoIiVzOiBub2lzZSA9IDB4JTAyeCwgc25yID0gJWQuJTAyZCBkQlxuIiwgX19GVU5DVElPTl9fLCByZWNfYnVmWzBdLAorCQlzdGF0ZS0+c25yID4+IDI0LCAoKChzdGF0ZS0+c25yPj44KSAmIDB4ZmZmZikgKiAxMDApID4+IDE2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yNTEyMTFfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc3RyZW5ndGgpCit7CisJLyogQ2FsY3VsYXRlIFN0cmVuZ3RoIGZyb20gU05SIHVwIHRvIDM1ZEIgKi8KKwkvKiBFdmVuIHRob3VnaCB0aGUgU05SIGNhbiBnbyBoaWdoZXIgdGhhbiAzNWRCLCB0aGVyZSBpcyBzb21lIGNvbWZvcnQgKi8KKwkvKiBmYWN0b3IgaW4gaGF2aW5nIGEgcmFuZ2Ugb2Ygc3Ryb25nIHNpZ25hbHMgdGhhdCBjYW4gc2hvdyBhdCAxMDAlICAgKi8KKwlzdHJ1Y3Qgb3I1MTIxMV9zdGF0ZSogc3RhdGUgPSAoc3RydWN0IG9yNTEyMTFfc3RhdGUqKWZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBzbnI7CisJaW50IHJldDsKKworCXJldCA9IGZlLT5vcHMucmVhZF9zbnIoZmUsICZzbnIpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwkvKiBSYXRoZXIgdGhhbiB1c2UgdGhlIDguOCB2YWx1ZSBzbnIsIHVzZSBzdGF0ZS0+c25yIHdoaWNoIGlzIDguMjQgKi8KKwkvKiBzY2FsZSB0aGUgcmFuZ2UgMCAtIDM1KjJeMjQgaW50byAwIC0gNjU1MzUgKi8KKwlpZiAoc3RhdGUtPnNuciA+PSA4OTYwICogMHgxMDAwMCkKKwkJKnN0cmVuZ3RoID0gMHhmZmZmOworCWVsc2UKKwkJKnN0cmVuZ3RoID0gc3RhdGUtPnNuciAvIDg5NjA7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKaW5kZXggMTFlMGRjYS4uMDBlNGJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKQEAgLTY0OCwxOCArNjQ4LDI0IEBACiAJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX0NPTkYsIDB4MGEpOyAvLyBBR0Mgc2V0dXAKIAkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GX1BPTEFSSVRZLCAweDAwKTsgLy8gc2V0IEFHQyBwb2xhcml0aWVzCiAJCWJyZWFrOwotCWNhc2UgVERBMTAwNDZfQUdDX1REQTgyN1g6CisJY2FzZSBUREExMDA0Nl9BR0NfVERBODI3WF9HUDExOgogCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0FHQ19DT05GLCAweDAyKTsgICAvLyBBR0Mgc2V0dXAKIAkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfVEhSLCAweDcwKTsgICAgLy8gQUdDIFRocmVzaG9sZAogCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0FHQ19SRU5PUk0sIDB4MDgpOyAvLyBHYWluIFJlbm9ybWFsaXplCiAJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORl9QT0xBUklUWSwgMHg2YSk7IC8vIHNldCBBR0MgcG9sYXJpdGllcwogCQlicmVhazsKLQljYXNlIFREQTEwMDQ2X0FHQ19UREE4MjdYX0dQTDoKKwljYXNlIFREQTEwMDQ2X0FHQ19UREE4MjdYX0dQMDA6CiAJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX0NPTkYsIDB4MDIpOyAgIC8vIEFHQyBzZXR1cAogCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0FHQ19USFIsIDB4NzApOyAgICAvLyBBR0MgVGhyZXNob2xkCiAJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX1JFTk9STSwgMHgwOCk7IC8vIEdhaW4gUmVub3JtYWxpemUKIAkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GX1BPTEFSSVRZLCAweDYwKTsgLy8gc2V0IEFHQyBwb2xhcml0aWVzCiAJCWJyZWFrOworCWNhc2UgVERBMTAwNDZfQUdDX1REQTgyN1hfR1AwMToKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfQ09ORiwgMHgwMik7ICAgLy8gQUdDIHNldHVwCisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX1RIUiwgMHg3MCk7ICAgIC8vIEFHQyBUaHJlc2hvbGQKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfUkVOT1JNLCAweDA4KTsgLy8gR2FpbiBSZW5vcm1hbGl6ZQorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZfUE9MQVJJVFksIDB4NjIpOyAvLyBzZXQgQUdDIHBvbGFyaXRpZXMKKwkJYnJlYWs7CiAJfQogCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQURDMiwgMHgzOCk7CiAJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GX1RSSVNUQVRFMSwgMHg2MSk7IC8vIFR1cm4gYm90aCBBR0Mgb3V0cHV0cyBvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguaAppbmRleCA2MDVhZDJkLi5lYzUwMmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguaApAQCAtMzUsOCArMzUsOSBAQAogCVREQTEwMDQ2X0FHQ19ERUZBVUxULAkJLyogb3JpZ2luYWwgY29uZmlndXJhdGlvbiAqLwogCVREQTEwMDQ2X0FHQ19JRk9fQVVUT19ORUcsCS8qIElGIEFHQyBvbmx5LCBhdXRvbWF0aWMsIG5lZ3RpdmUgKi8KIAlUREExMDA0Nl9BR0NfSUZPX0FVVE9fUE9TLAkvKiBJRiBBR0Mgb25seSwgYXV0b21hdGljLCBwb3NpdGl2ZSAqLwotCVREQTEwMDQ2X0FHQ19UREE4MjdYLAkJLyogSUYgQUdDIG9ubHksIHNwZWNpYWwgc2V0dXAgZm9yIHRkYTgyN3ggKi8KLQlUREExMDA0Nl9BR0NfVERBODI3WF9HUEwsCS8qIHNhbWUgYXMgYWJvdmUsIGJ1dCBHUElPcyAwICovCisJVERBMTAwNDZfQUdDX1REQTgyN1hfR1AxMSwJLyogSUYgQUdDIG9ubHksIHNwZWNpYWwgc2V0dXAgZm9yIHRkYTgyN3ggKi8KKwlUREExMDA0Nl9BR0NfVERBODI3WF9HUDAwLAkvKiBzYW1lIGFzIGFib3ZlLCBidXQgR1BJT3MgMCAqLworCVREQTEwMDQ2X0FHQ19UREE4MjdYX0dQMDEsCS8qIHNhbWUgYXMgYWJvdmUsIGJ1dCBHUElPMz0wIEdQSU8xPTEqLwogfTsKIAogZW51bSB0ZGExMDA0Nl9pZiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODA4My5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgwODMuYwppbmRleCAzYWE0NWViLi42NzQxNWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODA4My5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MDgzLmMKQEAgLTI2MiwxMiArMjYyLDI5IEBACiAJaWYgKHN5bmMgJiAweDEwKQogCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DOwogCisJaWYgKHN5bmMgJiAweDIwKSAvKiBmcm9udGVuZCBjYW4gbm90IGxvY2sgKi8KKwkJKnN0YXR1cyB8PSBGRV9USU1FRE9VVDsKKwogCWlmICgoc3luYyAmIDB4MWYpID09IDB4MWYpCiAJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0ZGE4MDgzX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIGJlcikKK3sKKwlzdHJ1Y3QgdGRhODA4M19zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCXU4IGJ1ZlszXTsKKworCWlmICgocmV0ID0gdGRhODA4M19yZWFkcmVncyhzdGF0ZSwgMHgwYiwgYnVmLCBzaXplb2YoYnVmKSkpKQorCQlyZXR1cm4gcmV0OworCisJKmJlciA9ICgoYnVmWzBdICYgMHgxZikgPDwgMTYpIHwgKGJ1ZlsxXSA8PCA4KSB8IGJ1ZlsyXTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHRkYTgwODNfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc3RyZW5ndGgpCiB7CiAJc3RydWN0IHRkYTgwODNfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CkBAIC0yODgsNiArMzA1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdGRhODA4M19yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIHVjYmxvY2tzKQoreworCXN0cnVjdCB0ZGE4MDgzX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJKnVjYmxvY2tzID0gdGRhODA4M19yZWFkcmVnKHN0YXRlLCAweDBmKTsKKwlpZiAoKnVjYmxvY2tzID09IDB4ZmYpCisJCSp1Y2Jsb2NrcyA9IDB4ZmZmZmZmZmY7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB0ZGE4MDgzX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXN0cnVjdCB0ZGE4MDgzX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwpAQCAtNDQwLDYgKzQ2OCw4IEBACiAJLnJlYWRfc3RhdHVzID0gdGRhODA4M19yZWFkX3N0YXR1cywKIAkucmVhZF9zaWduYWxfc3RyZW5ndGggPSB0ZGE4MDgzX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAogCS5yZWFkX3NuciA9IHRkYTgwODNfcmVhZF9zbnIsCisJLnJlYWRfYmVyID0gdGRhODA4M19yZWFkX2JlciwKKwkucmVhZF91Y2Jsb2NrcyA9IHRkYTgwODNfcmVhZF91Y2Jsb2NrcywKIAogCS5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gdGRhODA4M19zZW5kX2Rpc2VxY19tc2csCiAJLmRpc2VxY19zZW5kX2J1cnN0ID0gdGRhODA4M19kaXNlcWNfc2VuZF9idXJzdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjZ4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2eC5jCmluZGV4IDM0ODE1YjAuLjc5Zjk3MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjZ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNnguYwpAQCAtNDIsOCArNDIsNyBAQAogCiBzdGF0aWMgaW50IHRkYTgyNnhfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlpZiAoZmUtPnR1bmVyX3ByaXYpCi0JCWtmcmVlKGZlLT50dW5lcl9wcml2KTsKKwlrZnJlZShmZS0+dHVuZXJfcHJpdik7CiAJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOwogCXJldHVybiAwOwogfQpAQCAtMTMzLDE4ICsxMzIsMjEgQEAKIHsKIAlzdHJ1Y3QgdGRhODI2eF9wcml2ICpwcml2ID0gTlVMTDsKIAl1OCBiMSBbXSA9IHsgMCwgMCB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBhZGRyLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIxLCAubGVuID0gMiB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJeyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IDAsICAgICAgICAuYnVmID0gTlVMTCwgLmxlbiA9IDAgfSwKKwkJeyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYjEsIC5sZW4gPSAyIH0KKwl9OwogCWludCByZXQ7CiAKIAlkcHJpbnRrKCIlczpcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCXJldCA9IGkyY190cmFuc2ZlciAoaTJjLCAmbXNnLCAxKTsKKwlyZXQgPSBpMmNfdHJhbnNmZXIgKGkyYywgbXNnLCAyKTsKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCi0JaWYgKHJldCAhPSAxKQorCWlmIChyZXQgIT0gMikKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKCEoYjFbMV0gJiAweDgwKSkKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdHVhNjEwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3R1YTYxMDAuYwppbmRleCA4ODU1NDM5Li42YmEwMDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdHVhNjEwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90dWE2MTAwLmMKQEAgLTQzLDggKzQzLDcgQEAKIAogc3RhdGljIGludCB0dWE2MTAwX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0JaWYgKGZlLT50dW5lcl9wcml2KQotCQlrZnJlZShmZS0+dHVuZXJfcHJpdik7CisJa2ZyZWUoZmUtPnR1bmVyX3ByaXYpOwogCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYwppbmRleCA4ZTRjZTEwLi5mZmRhNzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCkBAIC02NTAsNyArNjUwLDcgQEAKIAkvKiBkdmIgKi8KIAlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmcGx1dG8tPmR2Yl9hZGFwdGVyLCBEUklWRVJfTkFNRSwgVEhJU19NT0RVTEUsICZwZGV2LT5kZXYpOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9pMmNfYml0X2RlbF9idXM7CisJCWdvdG8gZXJyX2kyY19kZWxfYWRhcHRlcjsKIAogCWR2Yl9hZGFwdGVyID0gJnBsdXRvLT5kdmJfYWRhcHRlcjsKIApAQCAtNzEyLDggKzcxMiw4IEBACiAJZHZiX2RteF9yZWxlYXNlKGR2YmRlbXV4KTsKIGVycl9kdmJfdW5yZWdpc3Rlcl9hZGFwdGVyOgogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoZHZiX2FkYXB0ZXIpOwotZXJyX2kyY19iaXRfZGVsX2J1czoKLQlpMmNfYml0X2RlbF9idXMoJnBsdXRvLT5pMmNfYWRhcCk7CitlcnJfaTJjX2RlbF9hZGFwdGVyOgorCWkyY19kZWxfYWRhcHRlcigmcGx1dG8tPmkyY19hZGFwKTsKIGVycl9wbHV0b19od19leGl0OgogCXBsdXRvX2h3X2V4aXQocGx1dG8pOwogZXJyX2ZyZWVfaXJxOgpAQCAtNzQ4LDcgKzc0OCw3IEBACiAJZHZiX2RteGRldl9yZWxlYXNlKCZwbHV0by0+ZG14ZGV2KTsKIAlkdmJfZG14X3JlbGVhc2UoZHZiZGVtdXgpOwogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoZHZiX2FkYXB0ZXIpOwotCWkyY19iaXRfZGVsX2J1cygmcGx1dG8tPmkyY19hZGFwKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJnBsdXRvLT5pMmNfYWRhcCk7CiAJcGx1dG9faHdfZXhpdChwbHV0byk7CiAJZnJlZV9pcnEocGRldi0+aXJxLCBwbHV0byk7CiAJcGNpX2lvdW5tYXAocGRldiwgcGx1dG8tPmlvX21lbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwppbmRleCA5NTUzMWE2Li5lZWM3Y2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKQEAgLTkyLDYgKzkyLDcgQEAKIAlzZWxlY3QgRFZCX1NUVjAyOTkgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1REQTEwMDRYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9MTkJQMjEgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgVklERU9fSVIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBzaW1wbGUgU0FBNzE0NiBiYXNlZCBEVkIgY2FyZHMKIAkgIChzbyBjYWxsZWQgQnVkZ2V0LSBvciBOb3ZhLVBDSSBjYXJkcykgd2l0aG91dCBvbmJvYXJkCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCmluZGV4IGJiYTIzYmMuLjM2NmMxMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCkBAIC0yODI4LDcgKzI4MjgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGF2NzExMF9leHRlbnNpb24gPSB7CiAJLm5hbWUJCT0gImR2YiIsCi0JLmZsYWdzCQk9IFNBQTcxNDZfSTJDX1NIT1JUX0RFTEFZLAorCS5mbGFncwkJPSBTQUE3MTQ2X1VTRV9JMkNfSVJRLAogCiAJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKIAkucGNpX3RibAk9ICZwY2lfdGJsWzBdLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwppbmRleCBkNTRiYmNkLi5lNDU0NGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwpAQCAtNDgsNyArNDgsOCBAQAogCWlmICghZGF0YSB8fCAhdGVzdF9iaXQoZGF0YSwgaW5wdXRfZGV2LT5rZXkpKQogCQlyZXR1cm47CiAKLQlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX0tFWSwgZGF0YSwgISEwKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2RldiwgZGF0YSwgMCk7CisJaW5wdXRfc3luYyhpbnB1dF9kZXYpOwogfQogCiAKQEAgLTExNSwxNCArMTE2LDE3IEBACiAJCWRlbF90aW1lcigma2V5dXBfdGltZXIpOwogCQlpZiAoa2V5dXBfdGltZXIuZGF0YSAhPSBrZXljb2RlIHx8IG5ld190b2dnbGUgIT0gb2xkX3RvZ2dsZSkgewogCQkJZGVsYXlfdGltZXJfZmluaXNoZWQgPSAwOwotCQkJaW5wdXRfZXZlbnQoaW5wdXRfZGV2LCBFVl9LRVksIGtleXVwX3RpbWVyLmRhdGEsICEhMCk7Ci0JCQlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgITApOwotCQl9IGVsc2UKLQkJCWlmIChkZWxheV90aW1lcl9maW5pc2hlZCkKLQkJCQlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgMik7CisJCQlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX0tFWSwga2V5dXBfdGltZXIuZGF0YSwgMCk7CisJCQlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgMSk7CisJCQlpbnB1dF9zeW5jKGlucHV0X2Rldik7CisJCX0gZWxzZSBpZiAoZGVsYXlfdGltZXJfZmluaXNoZWQpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0X2RldiwgRVZfS0VZLCBrZXljb2RlLCAyKTsKKwkJCWlucHV0X3N5bmMoaW5wdXRfZGV2KTsKKwkJfQogCX0gZWxzZSB7CiAJCWRlbGF5X3RpbWVyX2ZpbmlzaGVkID0gMDsKLQkJaW5wdXRfZXZlbnQoaW5wdXRfZGV2LCBFVl9LRVksIGtleWNvZGUsICEwKTsKKwkJaW5wdXRfZXZlbnQoaW5wdXRfZGV2LCBFVl9LRVksIGtleWNvZGUsIDEpOworCQlpbnB1dF9zeW5jKGlucHV0X2Rldik7CiAJfQogCiAJa2V5dXBfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBVUF9USU1FT1VUOwpAQCAtMjExLDYgKzIxNSw3IEBACiBpbnQgX19kZXZpbml0IGF2NzExMF9pcl9pbml0KHN0cnVjdCBhdjcxMTAgKmF2NzExMCkKIHsKIAlzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOworCWludCBlcnI7CiAKIAlpZiAoYXZfY250ID49IHNpemVvZiBhdl9saXN0L3NpemVvZiBhdl9saXN0WzBdKQogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTIzMSw3ICsyMzYsMTEgQEAKIAkJc2V0X2JpdChFVl9LRVksIGlucHV0X2Rldi0+ZXZiaXQpOwogCQlzZXRfYml0KEVWX1JFUCwgaW5wdXRfZGV2LT5ldmJpdCk7CiAJCWlucHV0X3JlZ2lzdGVyX2tleXMoKTsKLQkJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCQlpZiAoZXJyKSB7CisJCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCQkJcmV0dXJuIGVycjsKKwkJfQogCQlpbnB1dF9kZXYtPnRpbWVyLmZ1bmN0aW9uID0gaW5wdXRfcmVwZWF0X2tleTsKIAogCQllID0gY3JlYXRlX3Byb2NfZW50cnkoImF2NzExMF9pciIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCmluZGV4IDIyMzVmZjguLjg5YWI0YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIAlzYWE3MTQ2X3NldGdwaW8oc2FhLCAzLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOwogCiAJLyogRW5hYmxlIERFQkkgcGlucyAqLwotCXNhYTcxNDZfd3JpdGUoc2FhLCBNQzEsIHNhYTcxNDZfcmVhZChzYWEsIE1DMSkgfCAoMHg4MDAgPDwgMTYpIHwgMHg4MDApOworCXNhYTcxNDZfd3JpdGUoc2FhLCBNQzEsIE1BU0tfMjcgfCBNQVNLXzExKTsKIAogCS8qIHJlZ2lzdGVyIENJIGludGVyZmFjZSAqLwogCWJ1ZGdldF9hdi0+Y2Eub3duZXIgPSBUSElTX01PRFVMRTsKQEAgLTM4Niw3ICszODYsNyBAQAogCXJldHVybiAwOwogCiBlcnJvcjoKLQlzYWE3MTQ2X3dyaXRlKHNhYSwgTUMxLCBzYWE3MTQ2X3JlYWQoc2FhLCBNQzEpIHwgKDB4ODAwIDw8IDE2KSk7CisJc2FhNzE0Nl93cml0ZShzYWEsIE1DMSwgTUFTS18yNyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDAzLDcgKzQwMyw3IEBACiAJZHZiX2NhX2VuNTAyMjFfcmVsZWFzZSgmYnVkZ2V0X2F2LT5jYSk7CiAKIAkvKiBkaXNhYmxlIERFQkkgcGlucyAqLwotCXNhYTcxNDZfd3JpdGUoc2FhLCBNQzEsIHNhYTcxNDZfcmVhZChzYWEsIE1DMSkgfCAoMHg4MDAgPDwgMTYpKTsKKwlzYWE3MTQ2X3dyaXRlKHNhYSwgTUMxLCBNQVNLXzI3KTsKIH0KIAogCkBAIC02NTUsNiArNjU1LDEwIEBACiAJLmRlbW9kX2FkZHJlc3MgPSAweDBjLAogfTsKIAorc3RhdGljIHN0cnVjdCB0ZGExMDAyMV9jb25maWcgcGhpbGlwc19jdTEyMTZfY29uZmlnX2FsdGFkZHJlc3MgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDBkLAorfTsKKwogCiAKIApAQCAtODMxLDcgKzgzNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmM9ZHZiX3BsbF9jb25maWd1cmUoJmR2Yl9wbGxfcGhpbGlwc19zZDE4NzhfdGRhODI2MSwgYnVmLAotCQkJcGFyYW1zLT5mcmVxdWVuY3ksIDApOworCQkJICAgICBwYXJhbXMtPmZyZXF1ZW5jeSwgMCk7CiAJaWYocmMgPCAwKSByZXR1cm4gcmM7CiAKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQpAQCAtOTE0LDYgKzkxOCw3IEBACiAjZGVmaW5lIFNVQklEX0RWQlNfVFZfU1RBUl9DSQkweDAwMTYKICNkZWZpbmUgU1VCSURfRFZCU19FQVNZV0FUQ0hfMSAgMHgwMDFhCiAjZGVmaW5lIFNVQklEX0RWQlNfRUFTWVdBVENICTB4MDAxZQorI2RlZmluZSBTVUJJRF9EVkJDX0VBU1lXQVRDSAkweDAwMmEKICNkZWZpbmUgU1VCSURfRFZCQ19LTkMxCQkweDAwMjAKICNkZWZpbmUgU1VCSURfRFZCQ19LTkMxX1BMVVMJMHgwMDIxCiAjZGVmaW5lIFNVQklEX0RWQkNfQ0lORVJHWTEyMDAJMHgxMTU2CkBAIC05NDcsMTEgKzk1MiwxNSBAQAogCS8qIEVuYWJsZSAvIFBvd2VyT04gRnJvbnRlbmQgKi8KIAlzYWE3MTQ2X3NldGdwaW8oc2FhLCAwLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOwogCisJLyogV2FpdCBmb3IgUG93ZXJPTiAqLworCW1zbGVlcCgxMDApOworCiAJLyogYWRkaXRpb25hbCBzZXR1cCBuZWNlc3NhcnkgZm9yIHRoZSBQTFVTIGNhcmRzICovCiAJc3dpdGNoIChzYWEtPnBjaS0+c3Vic3lzdGVtX2RldmljZSkgewogCQljYXNlIFNVQklEX0RWQlNfS05DMV9QTFVTOgogCQljYXNlIFNVQklEX0RWQkNfS05DMV9QTFVTOgogCQljYXNlIFNVQklEX0RWQlRfS05DMV9QTFVTOgorCQljYXNlIFNVQklEX0RWQkNfRUFTWVdBVENIOgogCQkJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMywgU0FBNzE0Nl9HUElPX09VVEhJKTsKIAkJCWJyZWFrOwogCX0KQEAgLTEwMDYsMTAgKzEwMTUsMTUgQEAKIAljYXNlIFNVQklEX0RWQkNfS05DMToKIAljYXNlIFNVQklEX0RWQkNfS05DMV9QTFVTOgogCWNhc2UgU1VCSURfRFZCQ19DSU5FUkdZMTIwMDoKKwljYXNlIFNVQklEX0RWQkNfRUFTWVdBVENIOgogCQlidWRnZXRfYXYtPnJlaW5pdGlhbGlzZV9kZW1vZCA9IDE7CiAJCWZlID0gZHZiX2F0dGFjaCh0ZGExMDAyMV9hdHRhY2gsICZwaGlsaXBzX2N1MTIxNl9jb25maWcsCiAJCQkJICAgICAmYnVkZ2V0X2F2LT5idWRnZXQuaTJjX2FkYXAsCiAJCQkJICAgICByZWFkX3B3bShidWRnZXRfYXYpKTsKKwkJaWYgKGZlID09IE5VTEwpCisJCQlmZSA9IGR2Yl9hdHRhY2godGRhMTAwMjFfYXR0YWNoLCAmcGhpbGlwc19jdTEyMTZfY29uZmlnX2FsdGFkZHJlc3MsCisJCQkJCSAgICAgJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwLAorCQkJCQkgICAgIHJlYWRfcHdtKGJ1ZGdldF9hdikpOwogCQlpZiAoZmUpIHsKIAkJCWJ1ZGdldF9hdi0+dGRhMTAwMjFfcG9jbGtwID0gMTsKIAkJCWJ1ZGdldF9hdi0+dGRhMTAwMjFfc2V0X2Zyb250ZW5kID0gZmUtPm9wcy5zZXRfZnJvbnRlbmQ7CkBAIC0xMjQyLDYgKzEyNTYsNyBAQAogTUFLRV9CVURHRVRfSU5GTyhrbmN4cywgIktOQyBUViBTVEFSIERWQi1TIiwgQlVER0VUX1RWU1RBUik7CiBNQUtFX0JVREdFVF9JTkZPKHNhdGV3cGxzLCAiU2F0ZWxjbyBFYXN5V2F0Y2ggRFZCLVMgbGlnaHQiLCBCVURHRVRfVFZTVEFSKTsKIE1BS0VfQlVER0VUX0lORk8oc2F0ZXdwbHMxLCAiU2F0ZWxjbyBFYXN5V2F0Y2ggRFZCLVMgbGlnaHQiLCBCVURHRVRfS05DMVMpOworTUFLRV9CVURHRVRfSU5GTyhzYXRld3BsYywgIlNhdGVsY28gRWFzeVdhdGNoIERWQi1DIiwgQlVER0VUX0tOQzFDUCk7CiBNQUtFX0JVREdFVF9JTkZPKGtuYzFzcCwgIktOQzEgRFZCLVMgUGx1cyIsIEJVREdFVF9LTkMxU1ApOwogTUFLRV9CVURHRVRfSU5GTyhrbmMxY3AsICJLTkMxIERWQi1DIFBsdXMiLCBCVURHRVRfS05DMUNQKTsKIE1BS0VfQlVER0VUX0lORk8oa25jMXRwLCAiS05DMSBEVkItVCBQbHVzIiwgQlVER0VUX0tOQzFUUCk7CkBAIC0xMjYwLDYgKzEyNzUsNyBAQAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmN4cywgMHgxODk0LCAweDAwMTYpLAogCU1BS0VfRVhURU5TSU9OX1BDSShzYXRld3BscywgMHgxODk0LCAweDAwMWUpLAogCU1BS0VfRVhURU5TSU9OX1BDSShzYXRld3BsczEsIDB4MTg5NCwgMHgwMDFhKSwKKwlNQUtFX0VYVEVOU0lPTl9QQ0koc2F0ZXdwbGMsIDB4MTg5NCwgMHgwMDJhKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMWMsIDB4MTg5NCwgMHgwMDIwKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMWNwLCAweDE4OTQsIDB4MDAyMSksCiAJTUFLRV9FWFRFTlNJT05fUENJKGtuYzF0LCAweDE4OTQsIDB4MDAzMCksCkBAIC0xMjc3LDcgKzEyOTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb24gPSB7CiAJLm5hbWUgPSAiYnVkZ2V0X2F2IiwKLQkuZmxhZ3MgPSBTQUE3MTQ2X0kyQ19TSE9SVF9ERUxBWSwKKwkuZmxhZ3MgPSBTQUE3MTQ2X1VTRV9JMkNfSVJRLAogCiAJLnBjaV90YmwgPSBwY2lfdGJsLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IGNkNWVjNDguLmYyMDY2YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgogCiAjaW5jbHVkZSAiZHZiX2NhX2VuNTAyMjEuaCIKICNpbmNsdWRlICJzdHYwMjk5LmgiCkBAIC03MiwxNjIgKzczLDIxOCBAQAogI2RlZmluZSBTTE9UU1RBVFVTX1JFQURZCTgKICNkZWZpbmUgU0xPVFNUQVRVU19PQ0NVUElFRAkoU0xPVFNUQVRVU19QUkVTRU5UfFNMT1RTVEFUVVNfUkVTRVR8U0xPVFNUQVRVU19SRUFEWSkKIAorLyogTWlsbGlzZWNvbmRzIGR1cmluZyB3aGljaCBrZXkgcHJlc3NlcyBhcmUgcmVnYXJkZWQgYXMga2V5IHJlcGVhdCBhbmQgZHVyaW5nCisgKiB3aGljaCB0aGUgZGVib3VuY2UgbG9naWMgaXMgYWN0aXZlCisgKi8KKyNkZWZpbmUgSVJfUkVQRUFUX1RJTUVPVVQJMzUwCisKKy8qIFJDNSBkZXZpY2Ugd2lsZGNhcmQgKi8KKyNkZWZpbmUgSVJfREVWSUNFX0FOWQkJMjU1CisKKy8qIFNvbWUgcmVtb3RlcyBzZW5kcyBtdWx0aXBsZSBzZXF1ZW5jZXMgcGVyIGtleXByZXNzIChlLmcuIFplbml0aCBzZW5kcyB0d28pLAorICogdGhpcyBzZXR0aW5nIGFsbG93cyB0aGUgc3VwZXJmbG91cyBzZXF1ZW5jZXMgdG8gYmUgaWdub3JlZAorICovCitzdGF0aWMgaW50IGRlYm91bmNlID0gMDsKK21vZHVsZV9wYXJhbShkZWJvdW5jZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVib3VuY2UsICJpZ25vcmUgcmVwZWF0ZWQgSVIgc2VxdWVuY2VzIChkZWZhdWx0OiAwID0gaWdub3JlIG5vIHNlcXVlbmNlcykiKTsKKworc3RhdGljIGludCByYzVfZGV2aWNlID0gLTE7Cittb2R1bGVfcGFyYW0ocmM1X2RldmljZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmM1X2RldmljZSwgIm9ubHkgSVIgY29tbWFuZHMgdG8gZ2l2ZW4gUkM1IGRldmljZSAoZGV2aWNlID0gMCAtIDMxLCBhbnkgZGV2aWNlID0gMjU1LCBkZWZhdWx0OiBhdXRvZGV0ZWN0KSIpOworCitzdGF0aWMgaW50IGlyX2RlYnVnID0gMDsKK21vZHVsZV9wYXJhbShpcl9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJfZGVidWcsICJlbmFibGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBJUiBkZWNvZGluZyIpOworCitzdHJ1Y3QgYnVkZ2V0X2NpX2lyIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IG1zcDQzMF9pcnFfdGFza2xldDsKKwljaGFyIG5hbWVbNzJdOyAvKiA0MCArIDMyIGZvciAoc3RydWN0IHNhYTcxNDZfZGV2KS5uYW1lICovCisJY2hhciBwaHlzWzMyXTsKKwlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgc3RhdGU7CisJaW50IHJjNV9kZXZpY2U7Cit9OworCiBzdHJ1Y3QgYnVkZ2V0X2NpIHsKIAlzdHJ1Y3QgYnVkZ2V0IGJ1ZGdldDsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IG1zcDQzMF9pcnFfdGFza2xldDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgY2lpbnRmX2lycV90YXNrbGV0OwogCWludCBzbG90X3N0YXR1czsKIAlpbnQgY2lfaXJxOwogCXN0cnVjdCBkdmJfY2FfZW41MDIyMSBjYTsKLQljaGFyIGlyX2Rldl9uYW1lWzUwXTsKKwlzdHJ1Y3QgYnVkZ2V0X2NpX2lyIGlyOwogCXU4IHR1bmVyX3BsbF9hZGRyZXNzOyAvKiB1c2VkIGZvciBwaGlsaXBzX3RkbTEzMTZsIGNvbmZpZ3MgKi8KIH07CiAKLS8qIGZyb20gcmVhZGluZyB0aGUgZm9sbG93aW5nIHJlbW90ZXM6Ci0gICBaZW5pdGggVW5pdmVyc2FsIDcgLyBUViBNb2RlIDgwNyAvIFZDUiBNb2RlIDgzNwotICAgSGF1cHBhdWdlIChmcm9tIE5PVkEtQ0ktcyBib3ggcHJvZHVjdCkKLSAgIGkndmUgdGFrZW4gYSAibWlkZGxlIG9mIHRoZSByb2FkIiBhcHByb2FjaCBhbmQgbm90ZSB0aGUgZGlmZmVyZW5jZXMKLSovCi1zdGF0aWMgdTE2IGtleV9tYXBbNjRdID0gewotCS8qIDB4MFggKi8KLQlLRVlfMCwgS0VZXzEsIEtFWV8yLCBLRVlfMywgS0VZXzQsIEtFWV81LCBLRVlfNiwgS0VZXzcsIEtFWV84LAotCUtFWV85LAotCUtFWV9FTlRFUiwKLQlLRVlfUkVELAotCUtFWV9QT1dFUiwJCS8qIFJBRElPIG9uIEhhdXBwYXVnZSAqLwotCUtFWV9NVVRFLAotCTAsCi0JS0VZX0EsCQkJLyogVFYgb24gSGF1cHBhdWdlICovCi0JLyogMHgxWCAqLwotCUtFWV9WT0xVTUVVUCwgS0VZX1ZPTFVNRURPV04sCi0JMCwgMCwKLQlLRVlfQiwKLQkwLCAwLCAwLCAwLCAwLCAwLCAwLAotCUtFWV9VUCwgS0VZX0RPV04sCi0JS0VZX09QVElPTiwJCS8qIFJFU0VSVkVEIG9uIEhhdXBwYXVnZSAqLwotCUtFWV9CUkVBSywKLQkvKiAweDJYICovCi0JS0VZX0NIQU5ORUxVUCwgS0VZX0NIQU5ORUxET1dOLAotCUtFWV9QUkVWSU9VUywJCS8qIFByZXYuIENoIG9uIFplbml0aCwgU09VUkNFIG9uIEhhdXBwYXVnZSAqLwotCTAsIEtFWV9SRVNUQVJULCBLRVlfT0ssCi0JS0VZX0NZQ0xFV0lORE9XUywJLyogTUlOSU1JWkUgb24gSGF1cHBhdWdlICovCi0JMCwKLQlLRVlfRU5URVIsCQkvKiBWQ1IgbW9kZSBvbiBaZW5pdGggKi8KLQlLRVlfUEFVU0UsCi0JMCwKLQlLRVlfUklHSFQsIEtFWV9MRUZULAotCTAsCi0JS0VZX01FTlUsCQkvKiBGVUxMIFNDUkVFTiBvbiBIYXVwcGF1Z2UgKi8KLQkwLAotCS8qIDB4M1ggKi8KLQlLRVlfU0xPVywKLQlLRVlfUFJFVklPVVMsCQkvKiBWQ1IgbW9kZSBvbiBaZW5pdGggKi8KLQlLRVlfUkVXSU5ELAotCTAsCi0JS0VZX0ZBU1RGT1JXQVJELAotCUtFWV9QTEFZLCBLRVlfU1RPUCwKLQlLRVlfUkVDT1JELAotCUtFWV9UVU5FUiwJCS8qIFRWL1ZDUiBvbiBaZW5pdGggKi8KLQkwLAotCUtFWV9DLAotCTAsCi0JS0VZX0VYSVQsCi0JS0VZX1BPV0VSMiwKLQlLRVlfVFVORVIsCQkvKiBWQ1IgbW9kZSBvbiBaZW5pdGggKi8KLQkwLAotfTsKLQotc3RhdGljIHZvaWQgbXNwNDMwX2lyX2RlYm91bmNlKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIG1zcDQzMF9pcl9rZXl1cCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0gKHN0cnVjdCBpbnB1dF9kZXYgKikgZGF0YTsKLQotCWlmIChkZXYtPnJlcFswXSA9PSAwIHx8IGRldi0+cmVwWzBdID09IH4wKSB7Ci0JCWlucHV0X2V2ZW50KGRldiwgRVZfS0VZLCBrZXlfbWFwW2Rldi0+cmVwZWF0X2tleV0sICEhMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkZXYtPnJlcFswXSA9IDA7Ci0JZGV2LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogMzUwIC8gMTAwMDsKLQlhZGRfdGltZXIoJmRldi0+dGltZXIpOwotCWlucHV0X2V2ZW50KGRldiwgRVZfS0VZLCBrZXlfbWFwW2Rldi0+cmVwZWF0X2tleV0sIDIpOwkvKiBSRVBFQVQgKi8KKwlzdHJ1Y3QgYnVkZ2V0X2NpX2lyICppciA9IChzdHJ1Y3QgYnVkZ2V0X2NpX2lyICopIGRhdGE7CisJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwgJmlyLT5zdGF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1zcDQzMF9pcl9pbnRlcnJ1cHQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBidWRnZXRfY2kgKmJ1ZGdldF9jaSA9IChzdHJ1Y3QgYnVkZ2V0X2NpICopIGRhdGE7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0gYnVkZ2V0X2NpLT5pbnB1dF9kZXY7Ci0JdW5zaWduZWQgaW50IGNvZGUgPQotCQl0dHBjaV9idWRnZXRfZGViaXJlYWQoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJTk9TV0FQLCBERUJJQUREUl9JUiwgMiwgMSwgMCkgPj4gODsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBidWRnZXRfY2ktPmlyLmRldjsKKwlzdGF0aWMgaW50IGJvdW5jZXMgPSAwOworCWludCBkZXZpY2U7CisJaW50IHRvZ2dsZTsKKwlzdGF0aWMgaW50IHByZXZfdG9nZ2xlID0gLTE7CisJc3RhdGljIHUzMiBpcl9rZXk7CisJdTMyIGNvbW1hbmQgPSB0dHBjaV9idWRnZXRfZGViaXJlYWQoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJTk9TV0FQLCBERUJJQUREUl9JUiwgMiwgMSwgMCkgPj4gODsKIAotCWlmIChjb2RlICYgMHg0MCkgewotCQljb2RlICY9IDB4M2Y7CisJLyoKKwkgKiBUaGUgbXNwNDMwIGNoaXAgY2FuIGdlbmVyYXRlIHR3byBkaWZmZXJlbnQgYnl0ZXMsIGNvbW1hbmQgYW5kIGRldmljZQorCSAqCisJICogdHlwZTE6IFgxQ0NDQ0NDLCBDID0gY29tbWFuZCBiaXRzICgwIC0gNjMpCisJICogdHlwZTI6IFgwVERERERELCBEID0gZGV2aWNlIGJpdHMgKDAgLSAzMSksIFQgPSBSQzUgdG9nZ2xlIGJpdAorCSAqCisJICogTW9yZSB0aGFuIG9uZSBjb21tYW5kIGJ5dGUgbWF5IGJlIGdlbmVyYXRlZCBiZWZvcmUgdGhlIGRldmljZSBieXRlCisJICogT25seSB3aGVuIHdlIGhhdmUgYm90aCwgYSBjb3JyZWN0IGtleXByZXNzIGlzIGdlbmVyYXRlZAorCSAqLwogCi0JCWlmICh0aW1lcl9wZW5kaW5nKCZkZXYtPnRpbWVyKSkgewotCQkJaWYgKGNvZGUgPT0gZGV2LT5yZXBlYXRfa2V5KSB7Ci0JCQkJKytkZXYtPnJlcFswXTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlkZWxfdGltZXIoJmRldi0+dGltZXIpOwotCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9LRVksIGtleV9tYXBbZGV2LT5yZXBlYXRfa2V5XSwgISEwKTsKLQkJfQorCS8qIElzIHRoaXMgYSBSQzUgY29tbWFuZCBieXRlPyAqLworCWlmIChjb21tYW5kICYgMHg0MCkgeworCQlpZiAoaXJfZGVidWcpCisJCQlwcmludGsoImJ1ZGdldF9jaTogcmVjZWl2ZWQgY29tbWFuZCBieXRlIDB4JTAyeFxuIiwgY29tbWFuZCk7CisJCWlyX2tleSA9IGNvbW1hbmQgJiAweDNmOworCQlyZXR1cm47CisJfQogCi0JCWlmICgha2V5X21hcFtjb2RlXSkgewotCQkJcHJpbnRrKCJEVkIgKCVzKTogbm8ga2V5IGZvciAlMDJ4IVxuIiwgX19GVU5DVElPTl9fLCBjb2RlKTsKLQkJCXJldHVybjsKLQkJfQorCS8qIEl0J3MgYSBSQzUgZGV2aWNlIGJ5dGUgKi8KKwlpZiAoaXJfZGVidWcpCisJCXByaW50aygiYnVkZ2V0X2NpOiByZWNlaXZlZCBkZXZpY2UgYnl0ZSAweCUwMnhcbiIsIGNvbW1hbmQpOworCWRldmljZSA9IGNvbW1hbmQgJiAweDFmOworCXRvZ2dsZSA9IGNvbW1hbmQgJiAweDIwOwogCi0JCS8qIGluaXRpYWxpemUgZGVib3VuY2UgYW5kIHJlcGVhdCAqLwotCQlkZXYtPnJlcGVhdF9rZXkgPSBjb2RlOwotCQkvKiBaZW5pdGggcmVtb3RlIF9hbHdheXNfIHNlbmRzIDIgc2VxdWVuY2VzICovCi0JCWRldi0+cmVwWzBdID0gfjA7Ci0JCS8qIDM1MCBtaWxsaXNlY29uZHMgKi8KLQkJZGV2LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogMzUwIC8gMTAwMDsKLQkJLyogTUFLRSAqLwotCQlpbnB1dF9ldmVudChkZXYsIEVWX0tFWSwga2V5X21hcFtjb2RlXSwgITApOwotCQlhZGRfdGltZXIoJmRldi0+dGltZXIpOworCWlmIChidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgIT0gSVJfREVWSUNFX0FOWSAmJiBidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgIT0gZGV2aWNlKQorCQlyZXR1cm47CisKKwkvKiBJZ25vcmUgcmVwZWF0ZWQga2V5IHNlcXVlbmNlcyBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAodG9nZ2xlID09IHByZXZfdG9nZ2xlICYmIGlyX2tleSA9PSBkZXYtPnJlcGVhdF9rZXkgJiYKKwkgICAgYm91bmNlcyA+IDAgJiYgdGltZXJfcGVuZGluZygmZGV2LT50aW1lcikpIHsKKwkJaWYgKGlyX2RlYnVnKQorCQkJcHJpbnRrKCJidWRnZXRfY2k6IGRlYm91bmNlIGxvZ2ljIGlnbm9yZWQgSVIgY29tbWFuZFxuIik7CisJCWJvdW5jZXMtLTsKKwkJcmV0dXJuOworCX0KKwlwcmV2X3RvZ2dsZSA9IHRvZ2dsZTsKKworCS8qIEFyZSB3ZSBzdGlsbCB3YWl0aW5nIGZvciBhIGtleXVwIGV2ZW50PyAqLworCWlmIChkZWxfdGltZXIoJmRldi0+dGltZXIpKQorCQlpcl9pbnB1dF9ub2tleShkZXYsICZidWRnZXRfY2ktPmlyLnN0YXRlKTsKKworCS8qIEdlbmVyYXRlIGtleXByZXNzICovCisJaWYgKGlyX2RlYnVnKQorCQlwcmludGsoImJ1ZGdldF9jaTogZ2VuZXJhdGluZyBrZXlwcmVzcyAweCUwMnhcbiIsIGlyX2tleSk7CisJaXJfaW5wdXRfa2V5ZG93bihkZXYsICZidWRnZXRfY2ktPmlyLnN0YXRlLCBpcl9rZXksIChpcl9rZXkgJiAoY29tbWFuZCA8PCA4KSkpOworCisJLyogRG8gd2Ugd2FudCB0byBkZWxheSB0aGUga2V5dXAgZXZlbnQ/ICovCisJaWYgKGRlYm91bmNlKSB7CisJCWJvdW5jZXMgPSBkZWJvdW5jZTsKKwkJbW9kX3RpbWVyKCZkZXYtPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhJUl9SRVBFQVRfVElNRU9VVCkpOworCX0gZWxzZSB7CisJCWlyX2lucHV0X25va2V5KGRldiwgJmJ1ZGdldF9jaS0+aXIuc3RhdGUpOwogCX0KIH0KIAogc3RhdGljIGludCBtc3A0MzBfaXJfaW5pdChzdHJ1Y3QgYnVkZ2V0X2NpICpidWRnZXRfY2kpCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpzYWEgPSBidWRnZXRfY2ktPmJ1ZGdldC5kZXY7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWludCBpOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGJ1ZGdldF9jaS0+aXIuZGV2OworCWludCBlcnJvcjsKIAotCWJ1ZGdldF9jaS0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpbnB1dF9kZXYpCi0JCXJldHVybiAtRU5PTUVNOworCWJ1ZGdldF9jaS0+aXIuZGV2ID0gaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpbnB1dF9kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJidWRnZXRfY2k6IElSIGludGVyZmFjZSBpbml0aWFsaXNhdGlvbiBmYWlsZWRcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0MTsKKwl9CiAKLQlzcHJpbnRmKGJ1ZGdldF9jaS0+aXJfZGV2X25hbWUsICJCdWRnZXQtQ0kgZHZiIGlyIHJlY2VpdmVyICVzIiwgc2FhLT5uYW1lKTsKKwlzbnByaW50ZihidWRnZXRfY2ktPmlyLm5hbWUsIHNpemVvZihidWRnZXRfY2ktPmlyLm5hbWUpLAorCQkgIkJ1ZGdldC1DSSBkdmIgaXIgcmVjZWl2ZXIgJXMiLCBzYWEtPm5hbWUpOworCXNucHJpbnRmKGJ1ZGdldF9jaS0+aXIucGh5cywgc2l6ZW9mKGJ1ZGdldF9jaS0+aXIucGh5cyksCisJCSAicGNpLSVzL2lyMCIsIHBjaV9uYW1lKHNhYS0+cGNpKSk7CiAKLQlpbnB1dF9kZXYtPm5hbWUgPSBidWRnZXRfY2ktPmlyX2Rldl9uYW1lOworCWlucHV0X2Rldi0+bmFtZSA9IGJ1ZGdldF9jaS0+aXIubmFtZTsKIAotCXNldF9iaXQoRVZfS0VZLCBpbnB1dF9kZXYtPmV2Yml0KTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShrZXlfbWFwKTsgaSsrKQotCQlpZiAoa2V5X21hcFtpXSkKLQkJCXNldF9iaXQoa2V5X21hcFtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCWlucHV0X2Rldi0+cGh5cyA9IGJ1ZGdldF9jaS0+aXIucGh5czsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfUENJOworCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDE7CisJaWYgKHNhYS0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yKSB7CisJCWlucHV0X2Rldi0+aWQudmVuZG9yID0gc2FhLT5wY2ktPnN1YnN5c3RlbV92ZW5kb3I7CisJCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IHNhYS0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlOworCX0gZWxzZSB7CisJCWlucHV0X2Rldi0+aWQudmVuZG9yID0gc2FhLT5wY2ktPnZlbmRvcjsKKwkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gc2FhLT5wY2ktPmRldmljZTsKKwl9CisJaW5wdXRfZGV2LT5jZGV2LmRldiA9ICZzYWEtPnBjaS0+ZGV2OwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGJ1ZGdldF9jaS0+aW5wdXRfZGV2KTsKKwkvKiBTZWxlY3Qga2V5bWFwIGFuZCBhZGRyZXNzICovCisJc3dpdGNoIChidWRnZXRfY2ktPmJ1ZGdldC5kZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSkgeworCWNhc2UgMHgxMDBjOgorCWNhc2UgMHgxMDBmOgorCWNhc2UgMHgxMDEwOgorCWNhc2UgMHgxMDExOgorCWNhc2UgMHgxMDEyOgorCWNhc2UgMHgxMDE3OgorCQkvKiBUaGUgaGF1cHBhdWdlIGtleW1hcCBpcyBhIHN1cGVyc2V0IG9mIHRoZXNlIHJlbW90ZXMgKi8KKwkJaXJfaW5wdXRfaW5pdChpbnB1dF9kZXYsICZidWRnZXRfY2ktPmlyLnN0YXRlLAorCQkJICAgICAgSVJfVFlQRV9SQzUsIGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcpOwogCi0JaW5wdXRfZGV2LT50aW1lci5mdW5jdGlvbiA9IG1zcDQzMF9pcl9kZWJvdW5jZTsKKwkJaWYgKHJjNV9kZXZpY2UgPCAwKQorCQkJYnVkZ2V0X2NpLT5pci5yYzVfZGV2aWNlID0gMHgxZjsKKwkJZWxzZQorCQkJYnVkZ2V0X2NpLT5pci5yYzVfZGV2aWNlID0gcmM1X2RldmljZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdW5rbm93biByZW1vdGUgKi8KKwkJaXJfaW5wdXRfaW5pdChpbnB1dF9kZXYsICZidWRnZXRfY2ktPmlyLnN0YXRlLAorCQkJICAgICAgSVJfVFlQRV9SQzUsIGlyX2NvZGVzX2J1ZGdldF9jaV9vbGQpOwogCi0Jc2FhNzE0Nl93cml0ZShzYWEsIElFUiwgc2FhNzE0Nl9yZWFkKHNhYSwgSUVSKSB8IE1BU0tfMDYpOworCQlpZiAocmM1X2RldmljZSA8IDApCisJCQlidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgPSBJUl9ERVZJQ0VfQU5ZOworCQllbHNlCisJCQlidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgPSByYzVfZGV2aWNlOworCQlicmVhazsKKwl9CisKKwkvKiBpbml0aWFsaXNlIHRoZSBrZXktdXAgZGVib3VuY2UgdGltZW91dCBoYW5kbGVyICovCisJaW5wdXRfZGV2LT50aW1lci5mdW5jdGlvbiA9IG1zcDQzMF9pcl9rZXl1cDsKKwlpbnB1dF9kZXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgJmJ1ZGdldF9jaS0+aXI7CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9FUlIgImJ1ZGdldF9jaTogY291bGQgbm90IGluaXQgZHJpdmVyIGZvciBJUiBkZXZpY2UgKGNvZGUgJWQpXG4iLCBlcnJvcik7CisJCWdvdG8gb3V0MjsKKwl9CisKKwl0YXNrbGV0X2luaXQoJmJ1ZGdldF9jaS0+aXIubXNwNDMwX2lycV90YXNrbGV0LCBtc3A0MzBfaXJfaW50ZXJydXB0LAorCQkgICAgICh1bnNpZ25lZCBsb25nKSBidWRnZXRfY2kpOworCisJU0FBNzE0Nl9JRVJfRU5BQkxFKHNhYSwgTUFTS18wNik7CiAJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMywgU0FBNzE0Nl9HUElPX0lSUUhJKTsKIAogCXJldHVybiAwOworCitvdXQyOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CitvdXQxOgorCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIHZvaWQgbXNwNDMwX2lyX2RlaW5pdChzdHJ1Y3QgYnVkZ2V0X2NpICpidWRnZXRfY2kpCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpzYWEgPSBidWRnZXRfY2ktPmJ1ZGdldC5kZXY7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0gYnVkZ2V0X2NpLT5pbnB1dF9kZXY7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gYnVkZ2V0X2NpLT5pci5kZXY7CiAKLQlzYWE3MTQ2X3dyaXRlKHNhYSwgSUVSLCBzYWE3MTQ2X3JlYWQoc2FhLCBJRVIpICYgfk1BU0tfMDYpOworCVNBQTcxNDZfSUVSX0RJU0FCTEUoc2FhLCBNQVNLXzA2KTsKIAlzYWE3MTQ2X3NldGdwaW8oc2FhLCAzLCBTQUE3MTQ2X0dQSU9fSU5QVVQpOworCXRhc2tsZXRfa2lsbCgmYnVkZ2V0X2NpLT5pci5tc3A0MzBfaXJxX3Rhc2tsZXQpOwogCi0JaWYgKGRlbF90aW1lcigmZGV2LT50aW1lcikpCi0JCWlucHV0X2V2ZW50KGRldiwgRVZfS0VZLCBrZXlfbWFwW2Rldi0+cmVwZWF0X2tleV0sICEhMCk7CisJaWYgKGRlbF90aW1lcigmZGV2LT50aW1lcikpIHsKKwkJaXJfaW5wdXRfbm9rZXkoZGV2LCAmYnVkZ2V0X2NpLT5pci5zdGF0ZSk7CisJCWlucHV0X3N5bmMoZGV2KTsKKwl9CiAKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZXYpOwogfQpAQCAtNDI4LDcgKzQ4NSw3IEBACiAJbWVtc2V0KCZidWRnZXRfY2ktPmNhLCAwLCBzaXplb2Yoc3RydWN0IGR2Yl9jYV9lbjUwMjIxKSk7CiAKIAkvLyBlbmFibGUgREVCSSBwaW5zCi0Jc2FhNzE0Nl93cml0ZShzYWEsIE1DMSwgc2FhNzE0Nl9yZWFkKHNhYSwgTUMxKSB8ICgweDgwMCA8PCAxNikgfCAweDgwMCk7CisJc2FhNzE0Nl93cml0ZShzYWEsIE1DMSwgTUFTS18yNyB8IE1BU0tfMTEpOwogCiAJLy8gdGVzdCBpZiBpdCBpcyB0aGVyZQogCWNpX3ZlcnNpb24gPSB0dHBjaV9idWRnZXRfZGViaXJlYWQoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBERUJJQ0lDVEwsIERFQklBRERSX0NJVkVSU0lPTiwgMSwgMSwgMCk7CkBAIC00ODAsNyArNTM3LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXNhYTcxNDZfc2V0Z3BpbyhzYWEsIDAsIFNBQTcxNDZfR1BJT19JUlFISSk7CiAJCX0KLQkJc2FhNzE0Nl93cml0ZShzYWEsIElFUiwgc2FhNzE0Nl9yZWFkKHNhYSwgSUVSKSB8IE1BU0tfMDMpOworCQlTQUE3MTQ2X0lFUl9FTkFCTEUoc2FhLCBNQVNLXzAzKTsKIAl9CiAKIAkvLyBlbmFibGUgaW50ZXJmYWNlCkBAIC01MDIsNyArNTU5LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0Jc2FhNzE0Nl93cml0ZShzYWEsIE1DMSwgc2FhNzE0Nl9yZWFkKHNhYSwgTUMxKSB8ICgweDgwMCA8PCAxNikpOworCXNhYTcxNDZfd3JpdGUoc2FhLCBNQzEsIE1BU0tfMjcpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTUxMiw3ICs1NjksNyBAQAogCiAJLy8gZGlzYWJsZSBDSSBpbnRlcnJ1cHRzCiAJaWYgKGJ1ZGdldF9jaS0+Y2lfaXJxKSB7Ci0JCXNhYTcxNDZfd3JpdGUoc2FhLCBJRVIsIHNhYTcxNDZfcmVhZChzYWEsIElFUikgJiB+TUFTS18wMyk7CisJCVNBQTcxNDZfSUVSX0RJU0FCTEUoc2FhLCBNQVNLXzAzKTsKIAkJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMCwgU0FBNzE0Nl9HUElPX0lOUFVUKTsKIAkJdGFza2xldF9raWxsKCZidWRnZXRfY2ktPmNpaW50Zl9pcnFfdGFza2xldCk7CiAJfQpAQCAtNTMwLDcgKzU4Nyw3IEBACiAJZHZiX2NhX2VuNTAyMjFfcmVsZWFzZSgmYnVkZ2V0X2NpLT5jYSk7CiAKIAkvLyBkaXNhYmxlIERFQkkgcGlucwotCXNhYTcxNDZfd3JpdGUoc2FhLCBNQzEsIHNhYTcxNDZfcmVhZChzYWEsIE1DMSkgfCAoMHg4MDAgPDwgMTYpKTsKKwlzYWE3MTQ2X3dyaXRlKHNhYSwgTUMxLCBNQVNLXzI3KTsKIH0KIAogc3RhdGljIHZvaWQgYnVkZ2V0X2NpX2lycShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgdTMyICogaXNyKQpAQCAtNTQwLDcgKzU5Nyw3IEBACiAJZHByaW50ayg4LCAiZGV2OiAlcCwgYnVkZ2V0X2NpOiAlcFxuIiwgZGV2LCBidWRnZXRfY2kpOwogCiAJaWYgKCppc3IgJiBNQVNLXzA2KQotCQl0YXNrbGV0X3NjaGVkdWxlKCZidWRnZXRfY2ktPm1zcDQzMF9pcnFfdGFza2xldCk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmJ1ZGdldF9jaS0+aXIubXNwNDMwX2lycV90YXNrbGV0KTsKIAogCWlmICgqaXNyICYgTUFTS18xMCkKIAkJdHRwY2lfYnVkZ2V0X2lycTEwX2hhbmRsZXIoZGV2LCBpc3IpOwpAQCAtODM1LDcgKzg5Miw3IEBACiAJCWJhbmQgPSAxOwogCX0gZWxzZSBpZiAodHVuZXJfZnJlcXVlbmN5IDwgMjAwMDAwMDAwKSB7CiAJCWNwID0gNjsKLQkJYmFuZCA9IDE7CisJCWJhbmQgPSAyOwogCX0gZWxzZSBpZiAodHVuZXJfZnJlcXVlbmN5IDwgMjkwMDAwMDAwKSB7CiAJCWNwID0gMzsKIAkJYmFuZCA9IDI7CkBAIC0xMDgzLDI0ICsxMTQwLDIzIEBACiAJc3RydWN0IGJ1ZGdldF9jaSAqYnVkZ2V0X2NpOwogCWludCBlcnI7CiAKLQlpZiAoIShidWRnZXRfY2kgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnVkZ2V0X2NpKSwgR0ZQX0tFUk5FTCkpKQotCQlyZXR1cm4gLUVOT01FTTsKKwlidWRnZXRfY2kgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnVkZ2V0X2NpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWRnZXRfY2kpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQxOworCX0KIAogCWRwcmludGsoMiwgImJ1ZGdldF9jaTogJXBcbiIsIGJ1ZGdldF9jaSk7CiAKLQlidWRnZXRfY2ktPmJ1ZGdldC5jaV9wcmVzZW50ID0gMDsKLQogCWRldi0+ZXh0X3ByaXYgPSBidWRnZXRfY2k7CiAKLQlpZiAoKGVyciA9IHR0cGNpX2J1ZGdldF9pbml0KCZidWRnZXRfY2ktPmJ1ZGdldCwgZGV2LCBpbmZvLCBUSElTX01PRFVMRSkpKSB7Ci0JCWtmcmVlKGJ1ZGdldF9jaSk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHR0cGNpX2J1ZGdldF9pbml0KCZidWRnZXRfY2ktPmJ1ZGdldCwgZGV2LCBpbmZvLCBUSElTX01PRFVMRSk7CisJaWYgKGVycikKKwkJZ290byBvdXQyOwogCi0JdGFza2xldF9pbml0KCZidWRnZXRfY2ktPm1zcDQzMF9pcnFfdGFza2xldCwgbXNwNDMwX2lyX2ludGVycnVwdCwKLQkJICAgICAodW5zaWduZWQgbG9uZykgYnVkZ2V0X2NpKTsKLQotCW1zcDQzMF9pcl9pbml0KGJ1ZGdldF9jaSk7CisJZXJyID0gbXNwNDMwX2lyX2luaXQoYnVkZ2V0X2NpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDM7CiAKIAljaWludGZfaW5pdChidWRnZXRfY2kpOwogCkBAIC0xMTEwLDYgKzExNjYsMTMgQEAKIAl0dHBjaV9idWRnZXRfaW5pdF9ob29rcygmYnVkZ2V0X2NpLT5idWRnZXQpOwogCiAJcmV0dXJuIDA7CisKK291dDM6CisJdHRwY2lfYnVkZ2V0X2RlaW5pdCgmYnVkZ2V0X2NpLT5idWRnZXQpOworb3V0MjoKKwlrZnJlZShidWRnZXRfY2kpOworb3V0MToKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGJ1ZGdldF9jaV9kZXRhY2goc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYpCkBAIC0xMTIwLDE2ICsxMTgzLDEzIEBACiAKIAlpZiAoYnVkZ2V0X2NpLT5idWRnZXQuY2lfcHJlc2VudCkKIAkJY2lpbnRmX2RlaW5pdChidWRnZXRfY2kpOworCW1zcDQzMF9pcl9kZWluaXQoYnVkZ2V0X2NpKTsKIAlpZiAoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKSB7CiAJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCk7CiAJCWR2Yl9mcm9udGVuZF9kZXRhY2goYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKTsKIAl9CiAJZXJyID0gdHRwY2lfYnVkZ2V0X2RlaW5pdCgmYnVkZ2V0X2NpLT5idWRnZXQpOwogCi0JdGFza2xldF9raWxsKCZidWRnZXRfY2ktPm1zcDQzMF9pcnFfdGFza2xldCk7Ci0KLQltc3A0MzBfaXJfZGVpbml0KGJ1ZGdldF9jaSk7Ci0KIAkvLyBkaXNhYmxlIGZyb250ZW5kIGFuZCBDSSBpbnRlcmZhY2UKIAlzYWE3MTQ2X3NldGdwaW8oc2FhLCAyLCBTQUE3MTQ2X0dQSU9fSU5QVVQpOwogCkBAIC0xMTYyLDcgKzEyMjIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb24gPSB7CiAJLm5hbWUgPSAiYnVkZ2V0X2NpIGR2YiIsCi0JLmZsYWdzID0gU0FBNzE0Nl9JMkNfU0hPUlRfREVMQVksCisJLmZsYWdzID0gU0FBNzE0Nl9VU0VfSTJDX0lSUSwKIAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIAkucGNpX3RibCA9ICZwY2lfdGJsWzBdLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYwppbmRleCA1NmYxYzgwLi45MjY4YTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYwpAQCAtNTU1LDcgKzU1NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gYnVkZ2V0X2V4dGVuc2lvbiA9IHsKIAkubmFtZQkJPSAiYnVkZ2V0IGR2YiIsCi0JLmZsYWdzCQk9IFNBQTcxNDZfSTJDX1NIT1JUX0RFTEFZLAorCS5mbGFncwkJPSBTQUE3MTQ2X1VTRV9JMkNfSVJRLAogCiAJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKIAkucGNpX3RibAk9IHBjaV90YmwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKaW5kZXggMTBiMTIxYS4uYmQ2ZTdiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYwpAQCAtMjM4LDYgKzIzOCw3IEBACiAJCSAqIGZvciBub3cgbGV0cyByZXBvcnQgZWFjaCBzaWduYWwgYXMgYSBrZXkgZG93biBhbmQgdXAqLwogCQlkcHJpbnRrKCIlczpyYyBzaWduYWw6JWRcbiIsIF9fRlVOQ1RJT05fXywgYnVmZmVyWzRdKTsKIAkJaW5wdXRfcmVwb3J0X2tleShkZWMtPnJjX2lucHV0X2RldiwgcmNfa2V5c1tidWZmZXJbNF0gLSAxXSwgMSk7CisJCWlucHV0X3N5bmMoZGVjLT5yY19pbnB1dF9kZXYpOwogCQlpbnB1dF9yZXBvcnRfa2V5KGRlYy0+cmNfaW5wdXRfZGV2LCByY19rZXlzW2J1ZmZlcls0XSAtIDFdLCAwKTsKIAkJaW5wdXRfc3luYyhkZWMtPnJjX2lucHV0X2Rldik7CiAJfQpAQCAtMTE4NywxMSArMTE4OCwxMiBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAl1OCBiW10gPSB7IDB4MDAsIDB4MDEgfTsKIAlpbnQgaTsKKwlpbnQgZXJyOwogCiAJdXNiX21ha2VfcGF0aChkZWMtPnVkZXYsIGRlYy0+cmNfcGh5cywgc2l6ZW9mKGRlYy0+cmNfcGh5cykpOwogCXN0cmxjcHkoZGVjLT5yY19waHlzLCAiL2lucHV0MCIsIHNpemVvZihkZWMtPnJjX3BoeXMpKTsKIAotCWRlYy0+cmNfaW5wdXRfZGV2ID0gaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFpbnB1dF9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMjA1LDggKzEyMDcsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyY19rZXlzKTsgaSsrKQogCQkgIHNldF9iaXQocmNfa2V5c1tpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycikgeworCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCQlyZXR1cm4gZXJyOworCX0KIAorCWRlYy0+cmNfaW5wdXRfZGV2ID0gaW5wdXRfZGV2OwogCWlmICh1c2Jfc3VibWl0X3VyYihkZWMtPmlycV91cmIsIEdGUF9LRVJORUwpKQogCQlwcmludGsoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIsX19GVU5DVElPTl9fKTsKIAkvKiBlbmFibGUgaXJxIHBpcGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYmRlY2ZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JkZWNmZS5jCmluZGV4IDQyZjM5YTguLmE2ZmIxZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYmRlY2ZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiZGVjZmUuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJc3RydWN0IHR0dXNiZGVjZmVfc3RhdGUqIHN0YXRlID0gTlVMTDsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCi0Jc3RhdGUgPSAoc3RydWN0IHR0dXNiZGVjZmVfc3RhdGUqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHR1c2JkZWNmZV9zdGF0ZSksIEdGUF9LRVJORUwpOworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHR0dXNiZGVjZmVfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXN0cnVjdCB0dHVzYmRlY2ZlX3N0YXRlKiBzdGF0ZSA9IE5VTEw7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwotCXN0YXRlID0gKHN0cnVjdCB0dHVzYmRlY2ZlX3N0YXRlKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHR0dXNiZGVjZmVfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0dHVzYmRlY2ZlX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggYjhmZGU1Yy4uNTczNTdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMTg0LDYgKzE4NCwxNCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga3MwMTI3LgogCitjb25maWcgVklERU9fT1Y3NjcwCisJdHJpc3RhdGUgIk9tbmlWaXNpb24gT1Y3NjcwIHNlbnNvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDIKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgVmlkZW80TGludXgyIHNlbnNvci1sZXZlbCBkcml2ZXIgZm9yIHRoZSBPbW5pVmlzaW9uCisJICBPVjc2NzAgVkdBIGNhbWVyYS4gIEl0IGN1cnJlbnRseSBvbmx5IHdvcmtzIHdpdGggdGhlIE04OEFMUDAxCisJICBjb250cm9sbGVyLgorCiBjb25maWcgVklERU9fU0FBNzExMAogCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMTAgdmlkZW8gZGVjb2RlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCkBAIC01NjcsMTggKzU3NSw2IEBACiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdGhlIEF2ZXJNZWRpYSA2IEV5ZXMgdmlkZW8gc3VydmVpbGxhbmNlIGNhcmQuCiAKLWNvbmZpZyBWSURFT19aUjM2MTIwCi0JdHJpc3RhdGUgIlpvcmFuIFpSMzYxMjAvMzYxMjUgVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gUENJICYmIEkyQyAmJiBWSURFT19WNEwxICYmIEJST0tFTgotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFpSMzYxMjAvWlIzNjEyNSBiYXNlZCBmcmFtZSBncmFiYmVyL292ZXJsYXkgYm9hcmRzLgotCSAgVGhpcyBpbmNsdWRlcyB0aGUgVmljdG9yIElJLCBXYXZlV2F0Y2hlciwgVmlkZW8gV29uZGVyLCBNYXhpLVRWLAotCSAgYW5kIEJ1c3RlciBib2FyZHMuIFBsZWFzZSByZWFkIHRoZSBtYXRlcmlhbCBpbgotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2MTIwLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHpyMzYxMjAuCi0KIGNvbmZpZyBWSURFT19NRVlFCiAJdHJpc3RhdGUgIlNvbnkgVmFpbyBQaWN0dXJlYm9vayBNb3Rpb24gRXllIFZpZGVvIEZvciBMaW51eCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBTT05ZUEkgJiYgVklERU9fVjRMMQpAQCAtNjcwLDYgKzY2NiwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXJ2LgogCitjb25maWcgVklERU9fQ0FGRV9DQ0lDCisJdHJpc3RhdGUgIk1hcnZlbGwgODhBTFAwMSAoQ2FmZSkgQ01PUyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIEkyQyAmJiBWSURFT19WNEwyCisJc2VsZWN0IFZJREVPX09WNzY3MAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eDIgZHJpdmVyIGZvciB0aGUgTWFydmVsbCA4OEFMUDAxIGludGVncmF0ZWQKKwkgIENNT1MgY2FtZXJhIGNvbnRyb2xsZXIuICBUaGlzIGlzIHRoZSBjb250cm9sbGVyIGZvdW5kIG9uIGZpcnN0LQorCSAgZ2VuZXJhdGlvbiBPTFBDIHN5c3RlbXMuCisKICMKICMgVVNCIE11bHRpbWVkaWEgZGV2aWNlIGNvbmZpZ3VyYXRpb24KICMKQEAgLTY4MSw2ICs2ODYsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggYWY1N2FiYy4uOWIxZjNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC0yLDcgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIHZpZGVvIGNhcHR1cmUvcGxheWJhY2sgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLXpvcmFuLW9ianMgICAgICA6PQl6cjM2MTIwLm8genIzNjEyMF9pMmMubyB6cjM2MTIwX21lbS5vCiB6cjM2MDY3LW9ianMJOj0Jem9yYW5fcHJvY2ZzLm8gem9yYW5fZGV2aWNlLm8gXAogCQkJem9yYW5fZHJpdmVyLm8gem9yYW5fY2FyZC5vCiB0dW5lci1vYmpzCTo9CXR1bmVyLWNvcmUubyB0dW5lci10eXBlcy5vIHR1bmVyLXNpbXBsZS5vIFwKQEAgLTIzLDcgKzIyLDYgQEAKIG9iai0kKENPTkZJR19WSURFT19UREE5ODc1KSArPSB0ZGE5ODc1Lm8KIG9iai0kKENPTkZJR19TT1VORF9UVk1JWEVSKSArPSB0dm1peGVyLm8KIAotb2JqLSQoQ09ORklHX1ZJREVPX1pSMzYxMjApICs9IHpvcmFuLm8KIG9iai0kKENPTkZJR19WSURFT19TQUE2NTg4KSArPSBzYWE2NTg4Lm8KIG9iai0kKENPTkZJR19WSURFT19TQUE1MjQ2QSkgKz0gc2FhNTI0NmEubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTUyNDkpICs9IHNhYTUyNDkubwpAQCAtNjQsNiArNjIsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMzQpICs9IGlyLWtiZC1pMmMubyBzYWE3MTM0Lwogb2JqLSQoQ09ORklHX1ZJREVPX0NYODgpICs9IGN4ODgvCiBvYmotJChDT05GSUdfVklERU9fRU0yOFhYKSArPSBlbTI4eHgvCitvYmotJChDT05GSUdfVklERU9fVVNCVklTSU9OKSArPSB1c2J2aXNpb24vCiBvYmotJChDT05GSUdfVklERU9fVFZQNTE1MCkgKz0gdHZwNTE1MC5vCiBvYmotJChDT05GSUdfVklERU9fUFZSVVNCMikgKz0gcHZydXNiMi8KIG9iai0kKENPTkZJR19WSURFT19NU1AzNDAwKSArPSBtc3AzNDAwLm8KQEAgLTkyLDYgKzkxLDkgQEAKIG9iai0kKENPTkZJR19WSURFT19VUEQ2NDA4MykgKz0gdXBkNjQwODMubwogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjM0MVgpICs9IGN4MjM0MXgubwogCitvYmotJChDT05GSUdfVklERU9fQ0FGRV9DQ0lDKSArPSBjYWZlX2NjaWMubworb2JqLSQoQ09ORklHX1ZJREVPX09WNzY3MCkgCSs9IG92NzY3MC5vCisKIG9iai0kKENPTkZJR19VU0JfREFCVVNCKSAgICAgICAgKz0gZGFidXNiLm8KIG9iai0kKENPTkZJR19VU0JfT1Y1MTEpICAgICAgICAgKz0gb3Y1MTEubwogb2JqLSQoQ09ORklHX1VTQl9TRTQwMSkgICAgICAgICArPSBzZTQwMS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKaW5kZXggNmUxZGRhZC4uYWI4Zjk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwpAQCAtMTc5Myw3ICsxNzkzLDcgQEAKIAkJbWVtc2V0KGksMCxzaXplb2YoKmkpKTsKIAkJaS0+aW5kZXggICAgPSBuOwogCQlpLT50eXBlICAgICA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7Ci0JCWktPmF1ZGlvc2V0ID0gMDsKKwkJaS0+YXVkaW9zZXQgPSAxOwogCQlpZiAoaS0+aW5kZXggPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcikgewogCQkJc3ByaW50ZihpLT5uYW1lLCAiVGVsZXZpc2lvbiIpOwogCQkJaS0+dHlwZSAgPSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7CkBAIC00MDUwLDggKzQwNTAsOCBAQAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYsMCkpOwogCXNjaGVkdWxlKCk7CiAKLQlidHYtPmJ0ODQ4X21taW89aW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LDApLCAweDEwMDApOwotCWlmIChOVUxMID09IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwwKSwgMHgxMDAwKSkgeworCWJ0di0+YnQ4NDhfbW1pbyA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksIDB4MTAwMCk7CisJaWYgKE5VTEwgPT0gYnR2LT5idDg0OF9tbWlvKSB7CiAJCXByaW50aygiYnR0diVkOiBpb3JlbWFwKCkgZmFpbGVkXG4iLCBidHYtPmMubnIpOwogCQlyZXN1bHQgPSAtRUlPOwogCQlnb3RvIGZhaWwxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCmluZGV4IDcwZGU2YzkuLjYyYjg3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKQEAgLTQ3OSwxMSArNDc5LDcgQEAKIAlpZiAoMCAhPSBidHYtPmkyY19yYykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYnR2LT51c2VfaTJjX2h3KSB7Ci0JCXJldHVybiBpMmNfZGVsX2FkYXB0ZXIoJmJ0di0+Yy5pMmNfYWRhcCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGkyY19iaXRfZGVsX2J1cygmYnR2LT5jLmkyY19hZGFwKTsKLQl9CisJcmV0dXJuIGkyY19kZWxfYWRhcHRlcigmYnR2LT5jLmkyY19hZGFwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKaW5kZXggOTMzZDZkYi4uY2JjMDEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKQEAgLTI1OSwyNCArMjU5LDU5IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIHZvaWQgYnR0dl9pcl9zdGFydChzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgYnR0dl9pciAqaXIpCit7CisJaWYgKGlyLT5wb2xsaW5nKSB7CisJCWluaXRfdGltZXIoJmlyLT50aW1lcik7CisJCWlyLT50aW1lci5mdW5jdGlvbiA9IGJ0dHZfaW5wdXRfdGltZXI7CisJCWlyLT50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWJ0djsKKwkJaXItPnRpbWVyLmV4cGlyZXMgID0gamlmZmllcyArIEhaOworCQlhZGRfdGltZXIoJmlyLT50aW1lcik7CisJfSBlbHNlIGlmIChpci0+cmM1X2dwaW8pIHsKKwkJLyogc2V0IHRpbWVyX2VuZCBmb3IgY29kZSBjb21wbGV0aW9uICovCisJCWluaXRfdGltZXIoJmlyLT50aW1lcl9lbmQpOworCQlpci0+dGltZXJfZW5kLmZ1bmN0aW9uID0gYnR0dl9yYzVfdGltZXJfZW5kOworCQlpci0+dGltZXJfZW5kLmRhdGEgPSAodW5zaWduZWQgbG9uZylpcjsKKworCQlpbml0X3RpbWVyKCZpci0+dGltZXJfa2V5dXApOworCQlpci0+dGltZXJfa2V5dXAuZnVuY3Rpb24gPSBidHR2X3JjNV90aW1lcl9rZXl1cDsKKwkJaXItPnRpbWVyX2tleXVwLmRhdGEgPSAodW5zaWduZWQgbG9uZylpcjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJ0dHZfaXJfc3RvcChzdHJ1Y3QgYnR0diAqYnR2KQoreworCWlmIChidHYtPnJlbW90ZS0+cG9sbGluZykgeworCQlkZWxfdGltZXJfc3luYygmYnR2LT5yZW1vdGUtPnRpbWVyKTsKKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwl9CisKKwlpZiAoYnR2LT5yZW1vdGUtPnJjNV9ncGlvKSB7CisJCXUzMiBncGlvOworCisJCWRlbF90aW1lcl9zeW5jKCZidHYtPnJlbW90ZS0+dGltZXJfZW5kKTsKKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCQlncGlvID0gYnR0dl9ncGlvX3JlYWQoJmJ0di0+Yyk7CisJCWJ0dHZfZ3Bpb193cml0ZSgmYnR2LT5jLCBncGlvICYgfigxIDw8IDQpKTsKKwl9Cit9CisKIGludCBidHR2X2lucHV0X2luaXQoc3RydWN0IGJ0dHYgKmJ0dikKIHsKIAlzdHJ1Y3QgYnR0dl9pciAqaXI7CiAJSVJfS0VZVEFCX1RZUEUgKmlyX2NvZGVzID0gTlVMTDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCWludCBlcnIgPSAtRU5PTUVNOwogCiAJaWYgKCFidHYtPmhhc19yZW1vdGUpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaXIgPSBremFsbG9jKHNpemVvZigqaXIpLEdGUF9LRVJORUwpOwogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghaXIgfHwgIWlucHV0X2RldikgewotCQlrZnJlZShpcik7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQltZW1zZXQoaXIsMCxzaXplb2YoKmlyKSk7CisJaWYgKCFpciB8fCAhaW5wdXRfZGV2KQorCQlnb3RvIGVycl9vdXRfZnJlZTsKIAogCS8qIGRldGVjdCAmIGNvbmZpZ3VyZSAqLwogCXN3aXRjaCAoYnR2LT5jLnR5cGUpIHsKQEAgLTM0OCwxMCArMzgzLDkgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChOVUxMID09IGlyX2NvZGVzKSB7Ci0JCWRwcmludGsoS0VSTl9JTkZPICJPb29wczogSVIgY29uZmlnIGVycm9yIFtjYXJkPSVkXVxuIixidHYtPmMudHlwZSk7Ci0JCWtmcmVlKGlyKTsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWRwcmludGsoS0VSTl9JTkZPICJPb29wczogSVIgY29uZmlnIGVycm9yIFtjYXJkPSVkXVxuIiwgYnR2LT5jLnR5cGUpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CiAKIAlpZiAoaXItPnJjNV9ncGlvKSB7CkBAIC0zODksMzIgKzQyMywyNiBAQAogCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmYnR2LT5jLnBjaS0+ZGV2OwogCiAJYnR2LT5yZW1vdGUgPSBpcjsKLQlpZiAoaXItPnBvbGxpbmcpIHsKLQkJaW5pdF90aW1lcigmaXItPnRpbWVyKTsKLQkJaXItPnRpbWVyLmZ1bmN0aW9uID0gYnR0dl9pbnB1dF90aW1lcjsKLQkJaXItPnRpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpYnR2OwotCQlpci0+dGltZXIuZXhwaXJlcyAgPSBqaWZmaWVzICsgSFo7Ci0JCWFkZF90aW1lcigmaXItPnRpbWVyKTsKLQl9IGVsc2UgaWYgKGlyLT5yYzVfZ3BpbykgewotCQkvKiBzZXQgdGltZXJfZW5kIGZvciBjb2RlIGNvbXBsZXRpb24gKi8KLQkJaW5pdF90aW1lcigmaXItPnRpbWVyX2VuZCk7Ci0JCWlyLT50aW1lcl9lbmQuZnVuY3Rpb24gPSBidHR2X3JjNV90aW1lcl9lbmQ7Ci0JCWlyLT50aW1lcl9lbmQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlyOwotCi0JCWluaXRfdGltZXIoJmlyLT50aW1lcl9rZXl1cCk7Ci0JCWlyLT50aW1lcl9rZXl1cC5mdW5jdGlvbiA9IGJ0dHZfcmM1X3RpbWVyX2tleXVwOwotCQlpci0+dGltZXJfa2V5dXAuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlyOwotCX0KKwlidHR2X2lyX3N0YXJ0KGJ0diwgaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYnR2LT5yZW1vdGUtPmRldik7Ci0JcHJpbnRrKERFVk5BTUUgIjogJXMgZGV0ZWN0ZWQgYXQgJXNcbiIsaXItPm5hbWUsaXItPnBoeXMpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShidHYtPnJlbW90ZS0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfc3RvcDsKIAogCS8qIHRoZSByZW1vdGUgaXNuJ3QgYXMgYm91bmN5IGFzIGEga2V5Ym9hcmQgKi8KIAlpci0+ZGV2LT5yZXBbUkVQX0RFTEFZXSA9IHJlcGVhdF9kZWxheTsKIAlpci0+ZGV2LT5yZXBbUkVQX1BFUklPRF0gPSByZXBlYXRfcGVyaW9kOwogCiAJcmV0dXJuIDA7CisKKyBlcnJfb3V0X3N0b3A6CisJYnR0dl9pcl9zdG9wKGJ0dik7CisJYnR2LT5yZW1vdGUgPSBOVUxMOworIGVycl9vdXRfZnJlZToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKGlyKTsKKwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIGJ0dHZfaW5wdXRfZmluaShzdHJ1Y3QgYnR0diAqYnR2KQpAQCAtNDIyLDIyICs0NTAsNyBAQAogCWlmIChidHYtPnJlbW90ZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlpZiAoYnR2LT5yZW1vdGUtPnBvbGxpbmcpIHsKLQkJZGVsX3RpbWVyX3N5bmMoJmJ0di0+cmVtb3RlLT50aW1lcik7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JfQotCi0KLQlpZiAoYnR2LT5yZW1vdGUtPnJjNV9ncGlvKSB7Ci0JCXUzMiBncGlvOwotCi0JCWRlbF90aW1lcl9zeW5jKCZidHYtPnJlbW90ZS0+dGltZXJfZW5kKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQotCQlncGlvID0gYnR0dl9ncGlvX3JlYWQoJmJ0di0+Yyk7Ci0JCWJ0dHZfZ3Bpb193cml0ZSgmYnR2LT5jLCBncGlvICYgfigxIDw8IDQpKTsKLQl9Ci0KKwlidHR2X2lyX3N0b3AoYnR2KTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShidHYtPnJlbW90ZS0+ZGV2KTsKIAlrZnJlZShidHYtPnJlbW90ZSk7CiAJYnR2LT5yZW1vdGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMtcmVncy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYzIyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy1yZWdzLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIG04OGFscDAxIGNhbWVyYSBpbnRlcmZhY2UuICBPZmZzZXRzIGluIGJ5dGVzCisgKiBhcyBnaXZlbiBpbiB0aGUgc3BlYy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBPbmUgTGFwdG9wIFBlciBDaGlsZCBBc3NvY2lhdGlvbiwgSW5jLgorICoKKyAqIFdyaXR0ZW4gYnkgSm9uYXRoYW4gQ29yYmV0LCBjb3JiZXRAbHduLm5ldC4KKyAqCisgKiBUaGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKi8KKyNkZWZpbmUgUkVHX1kwQkFSCTB4MDAKKyNkZWZpbmUgUkVHX1kxQkFSCTB4MDQKKyNkZWZpbmUgUkVHX1kyQkFSCTB4MDgKKy8qIC4uLiAqLworCisjZGVmaW5lIFJFR19JTUdQSVRDSAkweDI0CS8qIEltYWdlIHBpdGNoIHJlZ2lzdGVyICovCisjZGVmaW5lICAgSU1HUF9ZUF9TSEZUCSAgMgkJLyogWSBwaXRjaCBwYXJhbXMgKi8KKyNkZWZpbmUgICBJTUdQX1lQX01BU0sJICAweDAwMDAzZmZjCS8qIFkgcGl0Y2ggZmllbGQgKi8KKyNkZWZpbmUJICBJTUdQX1VWUF9TSEZUCSAgMTgJCS8qIFVWIHBpdGNoIChwbGFuYXIpICovCisjZGVmaW5lICAgSU1HUF9VVlBfTUFTSyAgIDB4M2ZmYzAwMDAKKyNkZWZpbmUgUkVHX0lSUVNUQVRSQVcJMHgyOAkvKiBSQVcgSVJRIFN0YXR1cyAqLworI2RlZmluZSAgIElSUV9FT0YwCSAgMHgwMDAwMDAwMQkvKiBFbmQgb2YgZnJhbWUgMCAqLworI2RlZmluZSAgIElSUV9FT0YxCSAgMHgwMDAwMDAwMgkvKiBFbmQgb2YgZnJhbWUgMSAqLworI2RlZmluZSAgIElSUV9FT0YyCSAgMHgwMDAwMDAwNAkvKiBFbmQgb2YgZnJhbWUgMiAqLworI2RlZmluZSAgIElSUV9TT0YwCSAgMHgwMDAwMDAwOAkvKiBTdGFydCBvZiBmcmFtZSAwICovCisjZGVmaW5lICAgSVJRX1NPRjEJICAweDAwMDAwMDEwCS8qIFN0YXJ0IG9mIGZyYW1lIDEgKi8KKyNkZWZpbmUgICBJUlFfU09GMgkgIDB4MDAwMDAwMjAJLyogU3RhcnQgb2YgZnJhbWUgMiAqLworI2RlZmluZSAgIElSUV9PVkVSRkxPVwkgIDB4MDAwMDAwNDAJLyogRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSAgIElSUV9UV1NJVwkgIDB4MDAwMTAwMDAJLyogVFdTSSAoc21idXMpIHdyaXRlICovCisjZGVmaW5lICAgSVJRX1RXU0lSCSAgMHgwMDAyMDAwMAkvKiBUV1NJIHJlYWQgKi8KKyNkZWZpbmUgICBJUlFfVFdTSUUJICAweDAwMDQwMDAwCS8qIFRXU0kgZXJyb3IgKi8KKyNkZWZpbmUgICBUV1NJSVJRUyAoSVJRX1RXU0lXfElSUV9UV1NJUnxJUlFfVFdTSUUpCisjZGVmaW5lICAgRlJBTUVJUlFTIChJUlFfRU9GMHxJUlFfRU9GMXxJUlFfRU9GMnxJUlFfU09GMHxJUlFfU09GMXxJUlFfU09GMikKKyNkZWZpbmUgICBBTExJUlFTIChUV1NJSVJRU3xGUkFNRUlSUVN8SVJRX09WRVJGTE9XKQorI2RlZmluZSBSRUdfSVJRTUFTSwkweDJjCS8qIElSUSBtYXNrIC0gc2FtZSBiaXRzIGFzIElSUVNUQVQgKi8KKyNkZWZpbmUgUkVHX0lSUVNUQVQJMHgzMAkvKiBJUlEgc3RhdHVzIC8gY2xlYXIgKi8KKworI2RlZmluZSBSRUdfSU1HU0laRQkweDM0CS8qIEltYWdlIHNpemUgKi8KKyNkZWZpbmUgIElNR1NaX1ZfTUFTSwkgIDB4MWZmZjAwMDAKKyNkZWZpbmUgIElNR1NaX1ZfU0hJRlQJICAxNgorI2RlZmluZQkgSU1HU1pfSF9NQVNLCSAgMHgwMDAwM2ZmZgorI2RlZmluZSBSRUdfSU1HT0ZGU0VUCTB4MzgJLyogSU1hZ2Ugb2Zmc2V0ICovCisKKyNkZWZpbmUgUkVHX0NUUkwwCTB4M2MJLyogQ29udHJvbCAwICovCisjZGVmaW5lICAgQzBfRU5BQkxFCSAgMHgwMDAwMDAwMQkvKiBNYWtlcyB0aGUgd2hvbGUgdGhpbmcgZ28gKi8KKworLyogTWFzayBmb3IgYWxsIHRoZSBmb3JtYXQgYml0cyAqLworI2RlZmluZSAgIEMwX0RGX01BU0sJICAweDAwZmZmZmZjICAgIC8qIEJpdHMgMi0yMyAqLworCisvKiBSR0Igb3JkZXJpbmcgKi8KKyNkZWZpbmUgICBDMF9SR0I0X1JHQlgJICAweDAwMDAwMDAwCisjZGVmaW5lCSAgQzBfUkdCNF9YUkdCCSAgMHgwMDAwMDAwNAorI2RlZmluZQkgIEMwX1JHQjRfQkdSWAkgIDB4MDAwMDAwMDgKKyNkZWZpbmUgICBDMF9SR0I0X1hCR1IJICAweDAwMDAwMDBjCisjZGVmaW5lICAgQzBfUkdCNV9SR0dCCSAgMHgwMDAwMDAwMAorI2RlZmluZQkgIEMwX1JHQjVfR1JCRwkgIDB4MDAwMDAwMDQKKyNkZWZpbmUJICBDMF9SR0I1X0dCUkcJICAweDAwMDAwMDA4CisjZGVmaW5lICAgQzBfUkdCNV9CR0dSCSAgMHgwMDAwMDAwYworCisvKiBTcGVjIGhhcyB0d28gZmllbGRzIGZvciBESU4gYW5kIERPVVQsIGJ1dCB0aGV5IG11c3QgbWF0Y2gsIHNvCisgICBjb21iaW5lIHRoZW0gaGVyZS4gKi8KKyNkZWZpbmUgICBDMF9ERl9ZVVYJICAweDAwMDAwMDAwICAgIC8qIERhdGEgaXMgWVVWCSAgICAqLworI2RlZmluZSAgIEMwX0RGX1JHQgkgIDB4MDAwMDAwYTAJLyogLi4uIFJHQgkJICAgICovCisjZGVmaW5lICAgQzBfREZfQkFZRVIgICAgIDB4MDAwMDAxNDAJLyogLi4uIEJheWVyICAgICAgICAgICAgICAgICovCisvKiA4LTgtOCBtdXN0IGJlIG1pc3NpbmcgZnJvbSB0aGUgYmVsb3cgLSBhc2sgKi8KKyNkZWZpbmUgICBDMF9SR0JGXzU2NQkgIDB4MDAwMDAwMDAKKyNkZWZpbmUgICBDMF9SR0JGXzQ0NAkgIDB4MDAwMDA4MDAKKyNkZWZpbmUgICBDMF9SR0JfQkdSCSAgMHgwMDAwMTAwMAkvKiBCbHVlIGNvbWVzIGZpcnN0ICovCisjZGVmaW5lICAgQzBfWVVWX1BMQU5BUgkgIDB4MDAwMDAwMDAJLyogWVVWIDQyMiBwbGFuYXIgZm9ybWF0ICovCisjZGVmaW5lICAgQzBfWVVWX1BBQ0tFRAkgIDB4MDAwMDgwMDAJLyogWVVWIDQyMiBwYWNrZWQJKi8KKyNkZWZpbmUgICBDMF9ZVVZfNDIwUEwJICAweDAwMDBhMDAwCS8qIFlVViA0MjAgcGxhbmFyCSovCisvKiBUaGluayB0aGF0IDQyMCBwYWNrZWQgbXVzdCBiZSAxMTEgLSBhc2sgKi8KKyNkZWZpbmUJICBDMF9ZVVZFX1lVWVYJICAweDAwMDAwMDAwCS8qIFkxQ2JZMENyIAkJKi8KKyNkZWZpbmUJICBDMF9ZVVZFX1lWWVUJICAweDAwMDEwMDAwCS8qIFkxQ3JZMENiIAkJKi8KKyNkZWZpbmUJICBDMF9ZVVZFX1ZZVVkJICAweDAwMDIwMDAwCS8qIENyWTFDYlkwIAkJKi8KKyNkZWZpbmUJICBDMF9ZVVZFX1VZVlkJICAweDAwMDMwMDAwCS8qIENiWTFDclkwIAkJKi8KKyNkZWZpbmUgICBDMF9ZVVZFX1hZVVYJICAweDAwMDAwMDAwICAgIC8qIDQyMDogLllVVgkJKi8KKyNkZWZpbmUJICBDMF9ZVVZFX1hZVlUJICAweDAwMDEwMDAwCS8qIDQyMDogLllWVSAJCSovCisjZGVmaW5lCSAgQzBfWVVWRV9YVVZZCSAgMHgwMDAyMDAwMAkvKiA0MjA6IC5VVlkgCQkqLworI2RlZmluZQkgIEMwX1lVVkVfWFZVWQkgIDB4MDAwMzAwMDAJLyogNDIwOiAuVlVZIAkJKi8KKy8qIEJheWVyIGJpdHMgMTgsMTkgaWYgbmVlZGVkICovCisjZGVmaW5lICAgQzBfSFBPTF9MT1cJICAweDAxMDAwMDAwCS8qIEhTWU5DIHBvbGFyaXR5IGFjdGl2ZSBsb3cgKi8KKyNkZWZpbmUgICBDMF9WUE9MX0xPVwkgIDB4MDIwMDAwMDAJLyogVlNZTkMgcG9sYXJpdHkgYWN0aXZlIGxvdyAqLworI2RlZmluZSAgIEMwX1ZDTEtfTE9XCSAgMHgwNDAwMDAwMAkvKiBWQ0xLIG9uIGZhbGxpbmcgZWRnZSAqLworI2RlZmluZSAgIEMwX0RPV05TQ0FMRQkgIDB4MDgwMDAwMDAJLyogRW5hYmxlIGRvd25zY2FsZXIgKi8KKyNkZWZpbmUJICBDMF9TSUZNX01BU0sJICAweGMwMDAwMDAwCS8qIFNJRiBtb2RlIGJpdHMgKi8KKyNkZWZpbmUgICBDMF9TSUZfSFZTWU5DCSAgMHgwMDAwMDAwMAkvKiBVc2UgSC9WU1lOQyAqLworI2RlZmluZSAgIENPX1NPRl9OT1NZTkMJICAweDQwMDAwMDAwCS8qIFVzZSBpbmJhbmQgYWN0aXZlIHNpZ25hbGluZyAqLworCisKKyNkZWZpbmUgUkVHX0NUUkwxCTB4NDAJLyogQ29udHJvbCAxICovCisjZGVmaW5lICAgQzFfNDQ0QUxQSEEJICAweDAwZjAwMDAwCS8qIEFscGhhIGZpZWxkIGluIFJHQjQ0NCAqLworI2RlZmluZSAgIEMxX0FMUEhBX1NIRlQJICAyMAorI2RlZmluZSAgIEMxX0RNQUIzMgkgIDB4MDAwMDAwMDAJLyogMzItYnl0ZSBETUEgYnVyc3QgKi8KKyNkZWZpbmUgICBDMV9ETUFCMTYJICAweDAyMDAwMDAwCS8qIDE2LWJ5dGUgRE1BIGJ1cnN0ICovCisjZGVmaW5lCSAgQzFfRE1BQjY0CSAgMHgwNDAwMDAwMAkvKiA2NC1ieXRlIERNQSBidXJzdCAqLworI2RlZmluZQkgIEMxX0RNQUJfTUFTSwkgIDB4MDYwMDAwMDAKKyNkZWZpbmUgICBDMV9UV09CVUZTCSAgMHgwODAwMDAwMAkvKiBVc2Ugb25seSB0d28gRE1BIGJ1ZmZlcnMgKi8KKyNkZWZpbmUgICBDMV9QV1JEV04JICAweDEwMDAwMDAwCS8qIFBvd2VyIGRvd24gKi8KKworI2RlZmluZSBSRUdfQ0xLQ1RSTAkweDg4CS8qIENsb2NrIGNvbnRyb2wgKi8KKyNkZWZpbmUgICBDTEtfRElWX01BU0sJICAweDAwMDBmZmZmCS8qIFVwcGVyIGJpdHMgUlcgInJlc2VydmVkIiAqLworCisjZGVmaW5lIFJFR19HUFIJCTB4YjQJLyogR2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyLiAgVGhpcworCQkJCSAgIGNvbnRyb2xzIGlucHV0cyB0byB0aGUgcG93ZXIgYW5kIHJlc2V0CisJCQkJICAgcGlucyBvbiB0aGUgT1Y3NjcwIHVzZWQgd2l0aCBPTFBDOworCQkJCSAgIG90aGVyIGRlcGxveW1lbnRzIGNvdWxkIGRpZmZlci4gICovCisjZGVmaW5lICAgR1BSX0MxRU4JICAweDAwMDAwMDIwCS8qIFBhZCAxIChwb3dlciBkb3duKSBlbmFibGUgKi8KKyNkZWZpbmUgICBHUFJfQzBFTgkgIDB4MDAwMDAwMTAJLyogUGFkIDAgKHJlc2V0KSBlbmFibGUgKi8KKyNkZWZpbmUJICBHUFJfQzEJICAweDAwMDAwMDAyCS8qIENvbnRyb2wgMSB2YWx1ZSAqLworLyoKKyAqIENvbnRyb2wgMCBpcyB3aXJlZCB0byByZXNldCBvbiBPTFBDIG1hY2hpbmVzLiAgRm9yIG92N3ggc2Vuc29ycywKKyAqIGl0IGlzIGFjdGl2ZSBsb3csIGZvciAwdjZ4LCBpbnN0ZWFkLCBpdCdzIGFjdGl2ZSBoaWdoLiAgV2hhdAorICogZnVuLgorICovCisjZGVmaW5lICAgR1BSX0MwCSAgMHgwMDAwMDAwMQkvKiBDb250cm9sIDAgdmFsdWUgKi8KKworI2RlZmluZSBSRUdfVFdTSUMwCTB4YjgJLyogVFdTSSAoc21idXMpIGNvbnRyb2wgMCAqLworI2RlZmluZSAgIFRXU0lDMF9FTiAgICAgICAweDAwMDAwMDAxCS8qIFRXU0kgZW5hYmxlICovCisjZGVmaW5lICAgVFdTSUMwX01PREUJICAweDAwMDAwMDAyCS8qIDEgPSAxNi1iaXQsIDAgPSA4LWJpdCAqLworI2RlZmluZSAgIFRXU0lDMF9TSUQJICAweDAwMDAwM2ZjCS8qIFNsYXZlIElEICovCisjZGVmaW5lICAgVFdTSUMwX1NJRF9TSElGVCAyCisjZGVmaW5lICAgVFdTSUMwX0NMS0RJViAgIDB4MDAwN2ZjMDAJLyogQ2xvY2sgZGl2aWRlciAqLworI2RlZmluZSAgIFRXU0lDMF9NQVNLQUNLICAweDAwNDAwMDAwCS8qIE1hc2sgYWNrIGZyb20gc2Vuc29yICovCisjZGVmaW5lICAgVFdTSUMwX09WTUFHSUMgIDB4MDA4MDAwMDAJLyogTWFrZSBpdCB3b3JrIG9uIE9WIHNlbnNvcnMgKi8KKworI2RlZmluZSBSRUdfVFdTSUMxCTB4YmMJLyogVFdTSSBjb250cm9sIDEgKi8KKyNkZWZpbmUgICBUV1NJQzFfREFUQQkgIDB4MDAwMGZmZmYJLyogRGF0YSB0by9mcm9tIGNhbWNoaXAgKi8KKyNkZWZpbmUgICBUV1NJQzFfQUREUgkgIDB4MDBmZjAwMDAJLyogQWRkcmVzcyAocmVnaXN0ZXIpICovCisjZGVmaW5lICAgVFdTSUMxX0FERFJfU0hJRlQgMTYKKyNkZWZpbmUgICBUV1NJQzFfUkVBRAkgIDB4MDEwMDAwMDAJLyogU2V0IGZvciByZWFkIG9wICovCisjZGVmaW5lICAgVFdTSUMxX1dTVEFUCSAgMHgwMjAwMDAwMAkvKiBXcml0ZSBzdGF0dXMgKi8KKyNkZWZpbmUgICBUV1NJQzFfUlZBTElECSAgMHgwNDAwMDAwMAkvKiBSZWFkIGRhdGEgdmFsaWQgKi8KKyNkZWZpbmUgICBUV1NJQzFfRVJST1IJICAweDA4MDAwMDAwCS8qIFNvbWV0aGluZyBzY3Jld2VkIHVwICovCisKKworI2RlZmluZSBSRUdfVUJBUgkweGM0CS8qIFVwcGVyIGJhc2UgYWRkcmVzcyByZWdpc3RlciAqLworCisvKgorICogSGVyZSdzIHRoZSB3ZWlyZCBnbG9iYWwgY29udHJvbCByZWdpc3RlcnMgd2hpY2ggYXJlIHNhaWQgdG8gbGl2ZQorICogd2F5IHVwIGhlcmUuCisgKi8KKyNkZWZpbmUgUkVHX0dMX0NTUiAgICAgMHgzMDA0ICAvKiBDb250cm9sL3N0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSAgIEdDU1JfU1JTCSAweDAwMDAwMDAxCS8qIFNXIFJlc2V0IHNldCAqLworI2RlZmluZSAgIEdDU1JfU1JDICAJIDB4MDAwMDAwMDIJLyogU1cgUmVzZXQgY2xlYXIgKi8KKyNkZWZpbmUJICBHQ1NSX01SUwkgMHgwMDAwMDAwNAkvKiBNYXN0ZXIgcmVzZXQgc2V0ICovCisjZGVmaW5lCSAgR0NTUl9NUkMJIDB4MDAwMDAwMDgJLyogSFcgUmVzZXQgY2xlYXIgKi8KKyNkZWZpbmUgICBHQ1NSX0NDSUNfRU4gICAweDAwMDA0MDAwICAgIC8qIENDSUMgQ2xvY2sgZW5hYmxlICovCisjZGVmaW5lIFJFR19HTF9JTUFTSyAgIDB4MzAwYyAgLyogSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgICBHSU1TS19DQ0lDX0VOICAgICAgICAgIDB4MDAwMDAwMDQgICAgLyogQ0NJQyBJbnRlcnJ1cHQgZW5hYmxlICovCisKKyNkZWZpbmUgUkVHX0xFTiAgICAgICAgICAgICAgICBSRUdfR0xfSU1BU0sgKyA0CisKKworLyoKKyAqIFVzZWZ1bCBzdHVmZiB0aGF0IHByb2JhYmx5IGJlbG9uZ3Mgc29tZXdoZXJlIGdsb2JhbC4KKyAqLworI2RlZmluZSBWR0FfV0lEVEgJNjQwCisjZGVmaW5lIFZHQV9IRUlHSFQJNDgwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDgzYzgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtMCwwICsxLDIyMjggQEAKKy8qCisgKiBBIGRyaXZlciBmb3IgdGhlIENNT1MgY2FtZXJhIGNvbnRyb2xsZXIgaW4gdGhlIE1hcnZlbGwgODhBTFAwMSAiY2FmZSIKKyAqIG11bHRpZnVuY3Rpb24gY2hpcC4gIEN1cnJlbnRseSB3b3JrcyB3aXRoIHRoZSBPbW5pdmlzaW9uIE9WNzY3MAorICogc2Vuc29yLgorICoKKyAqIENvcHlyaWdodCAyMDA2IE9uZSBMYXB0b3AgUGVyIENoaWxkIEFzc29jaWF0aW9uLCBJbmMuCisgKgorICogV3JpdHRlbiBieSBKb25hdGhhbiBDb3JiZXQsIGNvcmJldEBsd24ubmV0LgorICoKKyAqIFRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAiY2FmZV9jY2ljLXJlZ3MuaCIKKworI2RlZmluZSBDQUZFX1ZFUlNJT04gMHgwMDAwMDEKKworCisvKgorICogUGFyYW1ldGVycy4KKyAqLworTU9EVUxFX0FVVEhPUigiSm9uYXRoYW4gQ29yYmV0IDxjb3JiZXRAbHduLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWFydmVsbCA4OEFMUDAxIENNT1MgQ2FtZXJhIENvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiVmlkZW8iKTsKKworLyoKKyAqIEludGVybmFsIERNQSBidWZmZXIgbWFuYWdlbWVudC4gIFNpbmNlIHRoZSBjb250cm9sbGVyIGNhbm5vdCBkbyBTL0cgSS9PLAorICogd2UgbXVzdCBoYXZlIHBoeXNpY2FsbHkgY29udGlndW91cyBidWZmZXJzIHRvIGJyaW5nIGZyYW1lcyBpbnRvLgorICogVGhlc2UgcGFyYW1ldGVycyBjb250cm9sIGhvdyBtYW55IGJ1ZmZlcnMgd2UgdXNlLCB3aGV0aGVyIHdlCisgKiBhbGxvY2F0ZSB0aGVtIGF0IGxvYWQgdGltZSAoYmV0dGVyIGNoYW5jZSBvZiBzdWNjZXNzLCBidXQgbmFpbHMgZG93bgorICogbWVtb3J5KSBvciB3aGVuIHNvbWVib2R5IHRyaWVzIHRvIHVzZSB0aGUgY2FtZXJhIChyaXNraWVyKSwgYW5kLAorICogZm9yIGxvYWQtdGltZSBhbGxvY2F0aW9uLCBob3cgYmlnIHRoZXkgc2hvdWxkIGJlLgorICoKKyAqIFRoZSBjb250cm9sbGVyIGNhbiBjeWNsZSB0aHJvdWdoIHRocmVlIGJ1ZmZlcnMuICBXZSBjb3VsZCB1c2UKKyAqIG1vcmUgYnkgZmxpcHBpbmcgcG9pbnRlcnMgYXJvdW5kLCBidXQgaXQgcHJvYmFibHkgbWFrZXMgbGl0dGxlCisgKiBzZW5zZS4KKyAqLworCisjZGVmaW5lIE1BWF9ETUFfQlVGUyAzCitzdGF0aWMgaW50IGFsbG9jX2J1ZnNfYXRfbG9hZCA9IDA7Cittb2R1bGVfcGFyYW0oYWxsb2NfYnVmc19hdF9sb2FkLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYWxsb2NfYnVmc19hdF9sb2FkLAorCQkiTm9uLXplcm8gdmFsdWUgY2F1c2VzIERNQSBidWZmZXJzIHRvIGJlIGFsbG9jYXRlZCBhdCBtb2R1bGUgIgorCQkibG9hZCB0aW1lLiAgVGhpcyBpbmNyZWFzZXMgdGhlIGNoYW5jZXMgb2Ygc3VjY2Vzc2Z1bGx5IGdldHRpbmcgIgorCQkidGhvc2UgYnVmZmVycywgYnV0IGF0IHRoZSBjb3N0IG9mIG5haWxpbmcgZG93biB0aGUgbWVtb3J5IGZyb20gIgorCQkidGhlIG91dHNldC4iKTsKKworc3RhdGljIGludCBuX2RtYV9idWZzID0gMzsKK21vZHVsZV9wYXJhbShuX2RtYV9idWZzLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobl9kbWFfYnVmcywKKwkJIlRoZSBudW1iZXIgb2YgRE1BIGJ1ZmZlcnMgdG8gYWxsb2NhdGUuICBDYW4gYmUgZWl0aGVyIHR3byAiCisJCSIoc2F2ZXMgbWVtb3J5LCBtYWtlcyB0aW1pbmcgdGlnaHRlcikgb3IgdGhyZWUuIik7CisKK3N0YXRpYyBpbnQgZG1hX2J1Zl9zaXplID0gVkdBX1dJRFRIICogVkdBX0hFSUdIVCAqIDI7ICAvKiBXb3JzdCBjYXNlICovCittb2R1bGVfcGFyYW0oZG1hX2J1Zl9zaXplLCB1aW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hX2J1Zl9zaXplLAorCQkiVGhlIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBETUEgYnVmZmVycy4gIElmIGFjdHVhbCBvcGVyYXRpbmcgIgorCQkicGFyYW1ldGVycyByZXF1aXJlIGxhcmdlciBidWZmZXJzLCBhbiBhdHRlbXB0IHRvIHJlYWxsb2NhdGUgIgorCQkid2lsbCBiZSBtYWRlLiIpOworCitzdGF0aWMgaW50IG1pbl9idWZmZXJzID0gMTsKK21vZHVsZV9wYXJhbShtaW5fYnVmZmVycywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1pbl9idWZmZXJzLAorCQkiVGhlIG1pbmltdW0gbnVtYmVyIG9mIHN0cmVhbWluZyBJL08gYnVmZmVycyB3ZSBhcmUgd2lsbGluZyAiCisJCSJ0byB3b3JrIHdpdGguIik7CisKK3N0YXRpYyBpbnQgbWF4X2J1ZmZlcnMgPSAxMDsKK21vZHVsZV9wYXJhbShtYXhfYnVmZmVycywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9idWZmZXJzLAorCQkiVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0cmVhbWluZyBJL08gYnVmZmVycyBhbiBhcHBsaWNhdGlvbiAiCisJCSJ3aWxsIGJlIGFsbG93ZWQgdG8gYWxsb2NhdGUuICBUaGVzZSBidWZmZXJzIGFyZSBiaWcgYW5kIGxpdmUgIgorCQkiaW4gdm1hbGxvYyBzcGFjZS4iKTsKKworc3RhdGljIGludCBmbGlwID0gMDsKK21vZHVsZV9wYXJhbShmbGlwLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZmxpcCwKKwkJIklmIHNldCwgdGhlIHNlbnNvciB3aWxsIGJlIGluc3RydWN0ZWQgdG8gZmxpcCB0aGUgaW1hZ2UgIgorCQkidmVydGljYWxseS4iKTsKKworCitlbnVtIGNhZmVfc3RhdGUgeworCVNfTk9UUkVBRFksCS8qIE5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKwlTX0lETEUsCQkvKiBKdXN0IGhhbmdpbmcgYXJvdW5kICovCisJU19GTEFLRUQsCS8qIFNvbWUgc29ydCBvZiBwcm9ibGVtICovCisJU19TSU5HTEVSRUFELAkvKiBJbiByZWFkKCkgKi8KKwlTX1NQRUNSRUFELCAgIAkvKiBTcGVjdWxhdGl2ZSByZWFkIChmb3IgZnV0dXJlIHJlYWQoKSkgKi8KKwlTX1NUUkVBTUlORwkvKiBTdHJlYW1pbmcgZGF0YSAqLworfTsKKworLyoKKyAqIFRyYWNraW5nIG9mIHN0cmVhbWluZyBJL08gYnVmZmVycy4KKyAqLworc3RydWN0IGNhZmVfc2lvX2J1ZmZlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB2NGwyX2J1ZmZlciB2NGxidWY7CisJY2hhciAqYnVmZmVyOyAgIC8qIFdoZXJlIGl0IGxpdmVzIGluIGtlcm5lbCBzcGFjZSAqLworCWludCBtYXBjb3VudDsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbTsKK307CisKKy8qCisgKiBBIGRlc2NyaXB0aW9uIG9mIG9uZSBvZiBvdXIgZGV2aWNlcy4KKyAqIExvY2tpbmc6IGNvbnRyb2xsZWQgYnkgc19tdXRleC4gIENlcnRhaW4gZmllbGRzLCBob3dldmVyLCByZXF1aXJlCisgKiAJICAgIHRoZSBkZXZfbG9jayBzcGlubG9jazsgdGhleSBhcmUgbWFya2VkIGFzIHN1Y2ggYnkgY29tbWVudHMuCisgKgkgICAgZGV2X2xvY2sgaXMgYWxzbyByZXF1aXJlZCBmb3IgYWNjZXNzIHRvIGRldmljZSByZWdpc3RlcnMuCisgKi8KK3N0cnVjdCBjYWZlX2NhbWVyYQoreworCWVudW0gY2FmZV9zdGF0ZSBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOyAgIAkJLyogQnVmZmVyIHN0YXR1cywgbWFpbmx5IChkZXZfbG9jaykgKi8KKwlpbnQgdXNlcnM7CQkJLyogSG93IG1hbnkgb3BlbiBGRHMgKi8KKwlzdHJ1Y3QgZmlsZSAqb3duZXI7CQkvKiBXaG8gaGFzIGRhdGEgYWNjZXNzICh2NGwyKSAqLworCisJLyoKKwkgKiBTdWJzeXN0ZW0gc3RydWN0dXJlcy4KKwkgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHY0bGRldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQgKnNlbnNvcjsKKworCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OwkvKiBsaW5rIHRvIG90aGVyIGRldmljZXMgKi8KKworCS8qIERNQSBidWZmZXJzICovCisJdW5zaWduZWQgaW50IG5idWZzOwkJLyogSG93IG1hbnkgYXJlIGFsbG9jJ2QgKi8KKwlpbnQgbmV4dF9idWY7CQkJLyogTmV4dCB0byBjb25zdW1lIChkZXZfbG9jaykgKi8KKwl1bnNpZ25lZCBpbnQgZG1hX2J1Zl9zaXplOyAgCS8qIGFsbG9jYXRlZCBzaXplICovCisJdm9pZCAqZG1hX2J1ZnNbTUFYX0RNQV9CVUZTXTsJLyogSW50ZXJuYWwgYnVmZmVyIGFkZHJlc3NlcyAqLworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZXNbTUFYX0RNQV9CVUZTXTsgLyogQnVmZmVyIGJ1cyBhZGRyZXNzZXMgKi8KKwl1bnNpZ25lZCBpbnQgc3BlY2ZyYW1lczsJLyogVW5jb25zdW1lZCBzcGVjIGZyYW1lcyAoZGV2X2xvY2spICovCisJdW5zaWduZWQgaW50IHNlcXVlbmNlOwkJLyogRnJhbWUgc2VxdWVuY2UgbnVtYmVyICovCisJdW5zaWduZWQgaW50IGJ1Zl9zZXFbTUFYX0RNQV9CVUZTXTsgLyogU2VxdWVuY2UgZm9yIGluZGl2aWR1YWwgYnVmZmVycyAqLworCisJLyogU3RyZWFtaW5nIGJ1ZmZlcnMgKi8KKwl1bnNpZ25lZCBpbnQgbl9zYnVmczsJCS8qIEhvdyBtYW55IHdlIGhhdmUgKi8KKwlzdHJ1Y3QgY2FmZV9zaW9fYnVmZmVyICpzYl9idWZzOyAvKiBUaGUgYXJyYXkgb2YgaG91c2VrZWVwaW5nIHN0cnVjdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNiX2F2YWlsOwkvKiBBdmFpbGFibGUgZm9yIGRhdGEgKHdlIG93bikgKGRldl9sb2NrKSAqLworCXN0cnVjdCBsaXN0X2hlYWQgc2JfZnVsbDsJLyogV2l0aCBkYXRhICh1c2VyIHNwYWNlIG93bnMpIChkZXZfbG9jaykgKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qgc190YXNrbGV0OworCisJLyogQ3VycmVudCBvcGVyYXRpbmcgcGFyYW1ldGVycyAqLworCWVudW0gdjRsMl9jaGlwX2lkZW50IHNlbnNvcl90eXBlOwkJLyogQ3VycmVudGx5IG92NzY3MCBvbmx5ICovCisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXhfZm9ybWF0OworCisJLyogTG9ja3MgKi8KKwlzdHJ1Y3QgbXV0ZXggc19tdXRleDsgLyogQWNjZXNzIHRvIHRoaXMgc3RydWN0dXJlICovCisJc3BpbmxvY2tfdCBkZXZfbG9jazsgIC8qIEFjY2VzcyB0byBkZXZpY2UgKi8KKworCS8qIE1pc2MgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBzbWJ1c193YWl0OwkvKiBXYWl0aW5nIG9uIGkyYyBldmVudHMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBpb3dhaXQ7CS8qIFdhaXRpbmcgb24gZnJhbWUgZGF0YSAqLworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwlzdHJ1Y3QgZGVudHJ5ICpkZnNfcmVnczsKKwlzdHJ1Y3QgZGVudHJ5ICpkZnNfY2FtX3JlZ3M7CisjZW5kaWYKK307CisKKy8qCisgKiBTdGF0dXMgZmxhZ3MuICBBbHdheXMgbWFuaXB1bGF0ZWQgd2l0aCBiaXQgb3BlcmF0aW9ucy4KKyAqLworI2RlZmluZSBDRl9CVUYwX1ZBTElECSAwCS8qIEJ1ZmZlcnMgdmFsaWQgLSBmaXJzdCB0aHJlZSAqLworI2RlZmluZSBDRl9CVUYxX1ZBTElECSAxCisjZGVmaW5lIENGX0JVRjJfVkFMSUQJIDIKKyNkZWZpbmUgQ0ZfRE1BX0FDVElWRQkgMwkvKiBBIGZyYW1lIGlzIGluY29taW5nICovCisjZGVmaW5lIENGX0NPTkZJR19ORUVERUQgNAkvKiBNdXN0IGNvbmZpZ3VyZSBoYXJkd2FyZSAqLworCisKKworLyoKKyAqIFN0YXJ0IG92ZXIgd2l0aCBETUEgYnVmZmVycyAtIGRldl9sb2NrIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQgY2FmZV9yZXNldF9idWZmZXJzKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQoreworCWludCBpOworCisJY2FtLT5uZXh0X2J1ZiA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZzOyBpKyspCisJCWNsZWFyX2JpdChpLCAmY2FtLT5mbGFncyk7CisJY2FtLT5zcGVjZnJhbWVzID0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2FmZV9uZWVkc19jb25maWcoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJcmV0dXJuIHRlc3RfYml0KENGX0NPTkZJR19ORUVERUQsICZjYW0tPmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgY2FmZV9zZXRfY29uZmlnX25lZWRlZChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwgaW50IG5lZWRlZCkKK3sKKwlpZiAobmVlZGVkKQorCQlzZXRfYml0KENGX0NPTkZJR19ORUVERUQsICZjYW0tPmZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChDRl9DT05GSUdfTkVFREVELCAmY2FtLT5mbGFncyk7Cit9CisKKworCisKKy8qCisgKiBEZWJ1Z2dpbmcgYW5kIHJlbGF0ZWQuCisgKi8KKyNkZWZpbmUgY2FtX2VycihjYW0sIGZtdCwgYXJnLi4uKSBcCisJZGV2X2VycigmKGNhbSktPnBkZXYtPmRldiwgZm10LCAjI2FyZyk7CisjZGVmaW5lIGNhbV93YXJuKGNhbSwgZm10LCBhcmcuLi4pIFwKKwlkZXZfd2FybigmKGNhbSktPnBkZXYtPmRldiwgZm10LCAjI2FyZyk7CisjZGVmaW5lIGNhbV9kYmcoY2FtLCBmbXQsIGFyZy4uLikgXAorCWRldl9kYmcoJihjYW0pLT5wZGV2LT5kZXYsIGZtdCwgIyNhcmcpOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogV2Uga2VlcCBhIHNpbXBsZSBsaXN0IG9mIGtub3duIGRldmljZXMgdG8gc2VhcmNoIGF0IG9wZW4gdGltZS4KKyAqLworc3RhdGljIExJU1RfSEVBRChjYWZlX2Rldl9saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY2FmZV9kZXZfbGlzdF9sb2NrKTsKKworc3RhdGljIHZvaWQgY2FmZV9hZGRfZGV2KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQoreworCW11dGV4X2xvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmY2FtLT5kZXZfbGlzdCwgJmNhZmVfZGV2X2xpc3QpOworCW11dGV4X3VubG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgY2FmZV9yZW1vdmVfZGV2KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQoreworCW11dGV4X2xvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7CisJbGlzdF9kZWwoJmNhbS0+ZGV2X2xpc3QpOworCW11dGV4X3VubG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FmZV9maW5kX2RldihpbnQgbWlub3IpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW07CisKKwltdXRleF9sb2NrKCZjYWZlX2Rldl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FtLCAmY2FmZV9kZXZfbGlzdCwgZGV2X2xpc3QpIHsKKwkJaWYgKGNhbS0+djRsZGV2Lm1pbm9yID09IG1pbm9yKQorCQkJZ290byBkb25lOworCX0KKwljYW0gPSBOVUxMOworICBkb25lOgorCW11dGV4X3VubG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKKwlyZXR1cm4gY2FtOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhZmVfZmluZF9ieV9wZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtOworCisJbXV0ZXhfbG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbSwgJmNhZmVfZGV2X2xpc3QsIGRldl9saXN0KSB7CisJCWlmIChjYW0tPnBkZXYgPT0gcGRldikKKwkJCWdvdG8gZG9uZTsKKwl9CisJY2FtID0gTlVMTDsKKyAgZG9uZToKKwltdXRleF91bmxvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7CisJcmV0dXJuIGNhbTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBEZXZpY2UgcmVnaXN0ZXIgSS9PCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWZlX3JlZ193cml0ZShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwgdW5zaWduZWQgaW50IHJlZywKKwkJdW5zaWduZWQgaW50IHZhbCkKK3sKKwlpb3dyaXRlMzIodmFsLCBjYW0tPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWZlX3JlZ19yZWFkKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLAorCQl1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBpb3JlYWQzMihjYW0tPnJlZ3MgKyByZWcpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWZlX3JlZ193cml0ZV9tYXNrKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLCB1bnNpZ25lZCBpbnQgcmVnLAorCQl1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwl1bnNpZ25lZCBpbnQgdiA9IGNhZmVfcmVnX3JlYWQoY2FtLCByZWcpOworCisJdiA9ICh2ICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOworCWNhZmVfcmVnX3dyaXRlKGNhbSwgcmVnLCB2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhZmVfcmVnX2NsZWFyX2JpdChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwKKwkJdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwljYWZlX3JlZ193cml0ZV9tYXNrKGNhbSwgcmVnLCAwLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FmZV9yZWdfc2V0X2JpdChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwKKwkJdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwljYWZlX3JlZ193cml0ZV9tYXNrKGNhbSwgcmVnLCB2YWwsIHZhbCk7Cit9CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFRoZSBJMkMvU01CVVMgaW50ZXJmYWNlIHRvIHRoZSBjYW1lcmEgaXRzZWxmIHN0YXJ0cyBoZXJlLiAgVGhlCisgKiBjb250cm9sbGVyIGhhbmRsZXMgU01CVVMgaXRzZWxmLCBwcmVzZW50aW5nIGEgcmVsYXRpdmVseSBzaW1wbGUgcmVnaXN0ZXIKKyAqIGludGVyZmFjZTsgYWxsIHdlIGhhdmUgdG8gZG8gaXMgdG8gdGVsbCBpdCB3aGVyZSB0byByb3V0ZSB0aGUgZGF0YS4KKyAqLworI2RlZmluZSBDQUZFX1NNQlVTX1RJTUVPVVQgKEhaKSAgLyogZ2VuZXJvdXMgKi8KKworc3RhdGljIGludCBjYWZlX3NtYnVzX3dyaXRlX2RvbmUoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYzE7CisKKwkvKgorCSAqIFdlIG11c3QgZGVsYXkgYWZ0ZXIgdGhlIGludGVycnVwdCwgb3IgdGhlIGNvbnRyb2xsZXIgZ2V0cyBjb25mdXNlZAorCSAqIGFuZCBuZXZlciBkb2VzIGdpdmUgdXMgZ29vZCBzdGF0dXMuICBGb3J0dW5hdGVseSwgd2UgZG9uJ3QgZG8gdGhpcworCSAqIG9mdGVuLgorCSAqLworCXVkZWxheSgyMCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwljMSA9IGNhZmVfcmVnX3JlYWQoY2FtLCBSRUdfVFdTSUMxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIChjMSAmIChUV1NJQzFfV1NUQVR8VFdTSUMxX0VSUk9SKSkgIT0gVFdTSUMxX1dTVEFUOworfQorCitzdGF0aWMgaW50IGNhZmVfc21idXNfd3JpdGVfZGF0YShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwKKwkJdTE2IGFkZHIsIHU4IGNvbW1hbmQsIHU4IHZhbHVlKQoreworCXVuc2lnbmVkIGludCBydmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCXJ2YWwgPSBUV1NJQzBfRU4gfCAoKGFkZHIgPDwgVFdTSUMwX1NJRF9TSElGVCkgJiBUV1NJQzBfU0lEKTsKKwlydmFsIHw9IFRXU0lDMF9PVk1BR0lDOyAgLyogTWFrZSBPViBzZW5zb3JzIHdvcmsgKi8KKwkvKgorCSAqIE1hcnZlbGwgc2V6IHNldCBjbGtkaXYgdG8gYWxsIDEncyBmb3Igbm93LgorCSAqLworCXJ2YWwgfD0gVFdTSUMwX0NMS0RJVjsKKwljYWZlX3JlZ193cml0ZShjYW0sIFJFR19UV1NJQzAsIHJ2YWwpOworCSh2b2lkKSBjYWZlX3JlZ19yZWFkKGNhbSwgUkVHX1RXU0lDMSk7IC8qIGZvcmNlIHdyaXRlICovCisJcnZhbCA9IHZhbHVlIHwgKChjb21tYW5kIDw8IFRXU0lDMV9BRERSX1NISUZUKSAmIFRXU0lDMV9BRERSKTsKKwljYWZlX3JlZ193cml0ZShjYW0sIFJFR19UV1NJQzEsIHJ2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwltc2xlZXAoMik7IC8qIFJlcXVpcmVkIG9yIHRoaW5ncyBmbGFrZSAqLworCisJd2FpdF9ldmVudF90aW1lb3V0KGNhbS0+c21idXNfd2FpdCwgY2FmZV9zbWJ1c193cml0ZV9kb25lKGNhbSksCisJCQlDQUZFX1NNQlVTX1RJTUVPVVQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJcnZhbCA9IGNhZmVfcmVnX3JlYWQoY2FtLCBSRUdfVFdTSUMxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisKKwlpZiAocnZhbCAmIFRXU0lDMV9XU1RBVCkgeworCQljYW1fZXJyKGNhbSwgIlNNQlVTIHdyaXRlICglMDJ4LyUwMngvJTAyeCkgdGltZWQgb3V0XG4iLCBhZGRyLAorCQkJCWNvbW1hbmQsIHZhbHVlKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChydmFsICYgVFdTSUMxX0VSUk9SKSB7CisJCWNhbV9lcnIoY2FtLCAiU01CVVMgd3JpdGUgKCUwMngvJTAyeC8lMDJ4KSBlcnJvclxuIiwgYWRkciwKKwkJCQljb21tYW5kLCB2YWx1ZSk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgY2FmZV9zbWJ1c19yZWFkX2RvbmUoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYzE7CisKKwkvKgorCSAqIFdlIG11c3QgZGVsYXkgYWZ0ZXIgdGhlIGludGVycnVwdCwgb3IgdGhlIGNvbnRyb2xsZXIgZ2V0cyBjb25mdXNlZAorCSAqIGFuZCBuZXZlciBkb2VzIGdpdmUgdXMgZ29vZCBzdGF0dXMuICBGb3J0dW5hdGVseSwgd2UgZG9uJ3QgZG8gdGhpcworCSAqIG9mdGVuLgorCSAqLworCXVkZWxheSgyMCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwljMSA9IGNhZmVfcmVnX3JlYWQoY2FtLCBSRUdfVFdTSUMxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGMxICYgKFRXU0lDMV9SVkFMSUR8VFdTSUMxX0VSUk9SKTsKK30KKworCisKK3N0YXRpYyBpbnQgY2FmZV9zbWJ1c19yZWFkX2RhdGEoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0sCisJCXUxNiBhZGRyLCB1OCBjb21tYW5kLCB1OCAqdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHJ2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJcnZhbCA9IFRXU0lDMF9FTiB8ICgoYWRkciA8PCBUV1NJQzBfU0lEX1NISUZUKSAmIFRXU0lDMF9TSUQpOworCXJ2YWwgfD0gVFdTSUMwX09WTUFHSUM7IC8qIE1ha2UgT1Ygc2Vuc29ycyB3b3JrICovCisJLyoKKwkgKiBNYXJ2ZWwgc2V6IHNldCBjbGtkaXYgdG8gYWxsIDEncyBmb3Igbm93LgorCSAqLworCXJ2YWwgfD0gVFdTSUMwX0NMS0RJVjsKKwljYWZlX3JlZ193cml0ZShjYW0sIFJFR19UV1NJQzAsIHJ2YWwpOworCSh2b2lkKSBjYWZlX3JlZ19yZWFkKGNhbSwgUkVHX1RXU0lDMSk7IC8qIGZvcmNlIHdyaXRlICovCisJcnZhbCA9IFRXU0lDMV9SRUFEIHwgKChjb21tYW5kIDw8IFRXU0lDMV9BRERSX1NISUZUKSAmIFRXU0lDMV9BRERSKTsKKwljYWZlX3JlZ193cml0ZShjYW0sIFJFR19UV1NJQzEsIHJ2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCXdhaXRfZXZlbnRfdGltZW91dChjYW0tPnNtYnVzX3dhaXQsCisJCQljYWZlX3NtYnVzX3JlYWRfZG9uZShjYW0pLCBDQUZFX1NNQlVTX1RJTUVPVVQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJcnZhbCA9IGNhZmVfcmVnX3JlYWQoY2FtLCBSRUdfVFdTSUMxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisKKwlpZiAocnZhbCAmIFRXU0lDMV9FUlJPUikgeworCQljYW1fZXJyKGNhbSwgIlNNQlVTIHJlYWQgKCUwMngvJTAyeCkgZXJyb3JcbiIsIGFkZHIsIGNvbW1hbmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKCEgKHJ2YWwgJiBUV1NJQzFfUlZBTElEKSkgeworCQljYW1fZXJyKGNhbSwgIlNNQlVTIHJlYWQgKCUwMngvJTAyeCkgdGltZWQgb3V0XG4iLCBhZGRyLAorCQkJCWNvbW1hbmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJKnZhbHVlID0gcnZhbCAmIDB4ZmY7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgdHJhbnNmZXIgb3ZlciBTTUJVUy4gIFRoaXMgdGhpbmcgaXMgY2FsbGVkIHVuZGVyCisgKiB0aGUgaTJjIGJ1cyBsb2NrLCBzbyB3ZSBzaG91bGRuJ3QgcmFjZSB3aXRoIG91cnNlbHZlcy4uLgorICovCitzdGF0aWMgaW50IGNhZmVfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLAorCQl1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciBydywgdTggY29tbWFuZCwKKwkJaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQoreworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCS8qCisJICogUmVmdXNlIHRvIHRhbGsgdG8gYW55dGhpbmcgYnV0IE9WIGNhbSBjaGlwcy4gIFdlIHNob3VsZAorCSAqIG5ldmVyIGV2ZW4gc2VlIGFuIGF0dGVtcHQgdG8gZG8gc28sIGJ1dCBvbmUgbmV2ZXIga25vd3MuCisJICovCisJaWYgKGNhbS0+c2Vuc29yICYmIGFkZHIgIT0gY2FtLT5zZW5zb3ItPmFkZHIpIHsKKwkJY2FtX2VycihjYW0sICJmdW5reSBzbWJ1cyBhZGRyICVkXG4iLCBhZGRyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qCisJICogVGhpcyBpbnRlcmZhY2Ugd291bGQgYXBwZWFyIHRvIG9ubHkgZG8gYnl0ZSBkYXRhIG9wcy4gIE9LCisJICogaXQgY2FuIGRvIHdvcmQgdG9vLCBidXQgdGhlIGNhbSBjaGlwIGhhcyBubyB1c2UgZm9yIHRoYXQuCisJICovCisJaWYgKHNpemUgIT0gSTJDX1NNQlVTX0JZVEVfREFUQSkgeworCQljYW1fZXJyKGNhbSwgImZ1bmt5IHhmZXIgc2l6ZSAlZFxuIiwgc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChydyA9PSBJMkNfU01CVVNfV1JJVEUpCisJCXJldCA9IGNhZmVfc21idXNfd3JpdGVfZGF0YShjYW0sIGFkZHIsIGNvbW1hbmQsIGRhdGEtPmJ5dGUpOworCWVsc2UgaWYgKHJ3ID09IEkyQ19TTUJVU19SRUFEKQorCQlyZXQgPSBjYWZlX3NtYnVzX3JlYWRfZGF0YShjYW0sIGFkZHIsIGNvbW1hbmQsICZkYXRhLT5ieXRlKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIGNhZmVfc21idXNfZW5hYmxlX2lycShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwljYWZlX3JlZ19zZXRfYml0KGNhbSwgUkVHX0lSUU1BU0ssIFRXU0lJUlFTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1MzIgY2FmZV9zbWJ1c19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEgIHwKKwkgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gY2FmZV9zbWJ1c19hbGdvID0geworCS5zbWJ1c194ZmVyID0gY2FmZV9zbWJ1c194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gY2FmZV9zbWJ1c19mdW5jCit9OworCisvKiBTb21lYm9keSBpcyBvbiB0aGUgYnVzICovCitzdGF0aWMgaW50IGNhZmVfY2FtX2luaXQoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pOworc3RhdGljIHZvaWQgY2FmZV9jdGxyX3N0b3BfZG1hKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKTsKK3N0YXRpYyB2b2lkIGNhZmVfY3Rscl9wb3dlcl9kb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKTsKKworc3RhdGljIGludCBjYWZlX3NtYnVzX2F0dGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOworCisJLyoKKwkgKiBEb24ndCB0YWxrIHRvIGNoaXBzIHdlIGRvbid0IHJlY29nbml6ZS4KKwkgKi8KKwlpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IEkyQ19EUklWRVJJRF9PVjc2NzApIHsKKwkJY2FtLT5zZW5zb3IgPSBjbGllbnQ7CisJCXJldHVybiBjYWZlX2NhbV9pbml0KGNhbSk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGNhZmVfc21idXNfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7CisKKwlpZiAoY2FtLT5zZW5zb3IgPT0gY2xpZW50KSB7CisJCWNhZmVfY3Rscl9zdG9wX2RtYShjYW0pOworCQljYWZlX2N0bHJfcG93ZXJfZG93bihjYW0pOworCQljYW1fZXJyKGNhbSwgImxvc3QgdGhlIHNlbnNvciFcbiIpOworCQljYW0tPnNlbnNvciA9IE5VTEw7ICAvKiBCdW1tZXIsIG5vIGNhbWVyYSAqLworCQljYW0tPnN0YXRlID0gU19OT1RSRUFEWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FmZV9zbWJ1c19zZXR1cChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSAmY2FtLT5pMmNfYWRhcHRlcjsKKwlpbnQgcmV0OworCisJY2FmZV9zbWJ1c19lbmFibGVfaXJxKGNhbSk7CisJYWRhcC0+aWQgPSBJMkNfSFdfU01CVVNfQ0FGRTsKKwlhZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19DQU1fRElHSVRBTDsKKwlhZGFwLT5vd25lciA9IFRISVNfTU9EVUxFOworCWFkYXAtPmNsaWVudF9yZWdpc3RlciA9IGNhZmVfc21idXNfYXR0YWNoOworCWFkYXAtPmNsaWVudF91bnJlZ2lzdGVyID0gY2FmZV9zbWJ1c19kZXRhY2g7CisJYWRhcC0+YWxnbyA9ICZjYWZlX3NtYnVzX2FsZ287CisJc3RyY3B5KGFkYXAtPm5hbWUsICJjYWZlX2NjaWMiKTsKKwlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsIGNhbSk7CisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKGFkYXApOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIGNhZmUgaTJjIGFkYXB0ZXJcbiIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNhZmVfc21idXNfc2h1dGRvd24oc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJaTJjX2RlbF9hZGFwdGVyKCZjYW0tPmkyY19hZGFwdGVyKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogRGVhbCB3aXRoIHRoZSBjb250cm9sbGVyLgorICovCisKKy8qCisgKiBEbyBldmVyeXRoaW5nIHdlIHRoaW5rIHdlIG5lZWQgdG8gaGF2ZSB0aGUgaW50ZXJmYWNlIG9wZXJhdGluZworICogYWNjb3JkaW5nIHRvIHRoZSBkZXNpcmVkIGZvcm1hdC4KKyAqLworc3RhdGljIHZvaWQgY2FmZV9jdGxyX2RtYShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwkvKgorCSAqIFN0b3JlIHRoZSBmaXJzdCB0d28gWSBidWZmZXJzICh3ZSBhcmVuJ3Qgc3VwcG9ydGluZworCSAqIHBsYW5hciBmb3JtYXRzIGZvciBub3csIHNvIG5vIFVWIGJ1ZnMpLiAgVGhlbiBlaXRoZXIKKwkgKiBzZXQgdGhlIHRoaXJkIGlmIGl0IGV4aXN0cywgb3IgdGVsbCB0aGUgY29udHJvbGxlcgorCSAqIHRvIGp1c3QgdXNlIHR3by4KKwkgKi8KKwljYWZlX3JlZ193cml0ZShjYW0sIFJFR19ZMEJBUiwgY2FtLT5kbWFfaGFuZGxlc1swXSk7CisJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfWTFCQVIsIGNhbS0+ZG1hX2hhbmRsZXNbMV0pOworCWlmIChjYW0tPm5idWZzID4gMikgeworCQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19ZMkJBUiwgY2FtLT5kbWFfaGFuZGxlc1syXSk7CisJCWNhZmVfcmVnX2NsZWFyX2JpdChjYW0sIFJFR19DVFJMMSwgQzFfVFdPQlVGUyk7CisJfQorCWVsc2UKKwkJY2FmZV9yZWdfc2V0X2JpdChjYW0sIFJFR19DVFJMMSwgQzFfVFdPQlVGUyk7CisJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfVUJBUiwgMCk7IC8qIDMyIGJpdHMgb25seSBmb3Igbm93ICovCit9CisKK3N0YXRpYyB2b2lkIGNhZmVfY3Rscl9pbWFnZShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwlpbnQgaW1nc3o7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqZm10ID0gJmNhbS0+cGl4X2Zvcm1hdDsKKworCWltZ3N6ID0gKChmbXQtPmhlaWdodCA8PCBJTUdTWl9WX1NISUZUKSAmIElNR1NaX1ZfTUFTSykgfAorCQkoZm10LT5ieXRlc3BlcmxpbmUgJiBJTUdTWl9IX01BU0spOworCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0lNR1NJWkUsIGltZ3N6KTsKKwljYWZlX3JlZ193cml0ZShjYW0sIFJFR19JTUdPRkZTRVQsIDApOworCS8qIFlQSVRDSCBqdXN0IGRyb3BzIHRoZSBsYXN0IHR3byBiaXRzICovCisJY2FmZV9yZWdfd3JpdGVfbWFzayhjYW0sIFJFR19JTUdQSVRDSCwgZm10LT5ieXRlc3BlcmxpbmUsCisJCQlJTUdQX1lQX01BU0spOworCS8qCisJICogVGVsbCB0aGUgY29udHJvbGxlciBhYm91dCB0aGUgaW1hZ2UgZm9ybWF0IHdlIGFyZSB1c2luZy4KKwkgKi8KKwlzd2l0Y2ggKGNhbS0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCkgeworCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CisJICAgIGNhZmVfcmVnX3dyaXRlX21hc2soY2FtLCBSRUdfQ1RSTDAsCisJCQkgICAgQzBfREZfWVVWfEMwX1lVVl9QQUNLRUR8QzBfWVVWRV9ZVVlWLAorCQkJICAgIEMwX0RGX01BU0spOworCSAgICBicmVhazsKKworCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjQ0NDoKKwkgICAgY2FmZV9yZWdfd3JpdGVfbWFzayhjYW0sIFJFR19DVFJMMCwKKwkJCSAgICBDMF9ERl9SR0J8QzBfUkdCRl80NDR8QzBfUkdCNF9YUkdCLAorCQkJICAgIEMwX0RGX01BU0spOworCQkvKiBBbHBoYSB2YWx1ZT8gKi8KKwkgICAgYnJlYWs7CisKKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJICAgIGNhZmVfcmVnX3dyaXRlX21hc2soY2FtLCBSRUdfQ1RSTDAsCisJCQkgICAgQzBfREZfUkdCfEMwX1JHQkZfNTY1fEMwX1JHQjVfQkdHUiwKKwkJCSAgICBDMF9ERl9NQVNLKTsKKwkgICAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBjYW1fZXJyKGNhbSwgIlVua25vd24gZm9ybWF0ICV4XG4iLCBjYW0tPnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQpOworCSAgICBicmVhazsKKwl9CisJLyoKKwkgKiBNYWtlIHN1cmUgaXQga25vd3Mgd2Ugd2FudCB0byB1c2UgaHN5bmMvdnN5bmMuCisJICovCisJY2FmZV9yZWdfd3JpdGVfbWFzayhjYW0sIFJFR19DVFJMMCwgQzBfU0lGX0hWU1lOQywKKwkJCUMwX1NJRk1fTUFTSyk7Cit9CisKKworLyoKKyAqIENvbmZpZ3VyZSB0aGUgY29udHJvbGxlciBmb3Igb3BlcmF0aW9uOyBjYWxsZXIgaG9sZHMgdGhlCisgKiBkZXZpY2UgbXV0ZXguCisgKi8KK3N0YXRpYyBpbnQgY2FmZV9jdGxyX2NvbmZpZ3VyZShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwljYWZlX2N0bHJfZG1hKGNhbSk7CisJY2FmZV9jdGxyX2ltYWdlKGNhbSk7CisJY2FmZV9zZXRfY29uZmlnX25lZWRlZChjYW0sIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2FmZV9jdGxyX2lycV9lbmFibGUoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJLyoKKwkgKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLCBzaW5jZSB3ZSBkbyBub3QKKwkgKiBleHBlY3QgdG8gaGF2ZSBJL08gYWN0aXZlIHByaW9yIHRvIGVuYWJsaW5nLgorCSAqLworCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0lSUVNUQVQsIEZSQU1FSVJRUyk7CisJY2FmZV9yZWdfc2V0X2JpdChjYW0sIFJFR19JUlFNQVNLLCBGUkFNRUlSUVMpOworfQorCitzdGF0aWMgdm9pZCBjYWZlX2N0bHJfaXJxX2Rpc2FibGUoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJY2FmZV9yZWdfY2xlYXJfYml0KGNhbSwgUkVHX0lSUU1BU0ssIEZSQU1FSVJRUyk7Cit9CisKKy8qCisgKiBNYWtlIHRoZSBjb250cm9sbGVyIHN0YXJ0IGdyYWJiaW5nIGltYWdlcy4gIEV2ZXJ5dGhpbmcgbXVzdAorICogYmUgc2V0IHVwIGJlZm9yZSBkb2luZyB0aGlzLgorICovCitzdGF0aWMgdm9pZCBjYWZlX2N0bHJfc3RhcnQoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJLyogc2V0X2JpdCBwZXJmb3JtcyBhIHJlYWQsIHNvIG5vIG90aGVyIGJhcnJpZXIgc2hvdWxkIGJlCisJICAgbmVlZGVkIGhlcmUgKi8KKwljYWZlX3JlZ19zZXRfYml0KGNhbSwgUkVHX0NUUkwwLCBDMF9FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCBjYWZlX2N0bHJfc3RvcChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwljYWZlX3JlZ19jbGVhcl9iaXQoY2FtLCBSRUdfQ1RSTDAsIEMwX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGNhZmVfY3Rscl9pbml0KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCS8qCisJICogQWRkZWQgbWFnaWMgdG8gYnJpbmcgdXAgdGhlIGhhcmR3YXJlIG9uIHRoZSBCLVRlc3QgYm9hcmQKKwkgKi8KKwljYWZlX3JlZ193cml0ZShjYW0sIDB4MzAzOCwgMHg4KTsKKwljYWZlX3JlZ193cml0ZShjYW0sIDB4MzE1YywgMHg4MDAwOCk7CisJLyoKKwkgKiBHbyB0aHJvdWdoIHRoZSBkYW5jZSBuZWVkZWQgdG8gd2FrZSB0aGUgZGV2aWNlIHVwLgorCSAqIE5vdGUgdGhhdCB0aGVzZSByZWdpc3RlcnMgYXJlIGdsb2JhbCBhbmQgc2hhcmVkCisJICogd2l0aCB0aGUgTkFORCBhbmQgU0QgZGV2aWNlcy4gIEludGVyYWN0aW9uIGJldHdlZW4gdGhlCisJICogdGhyZWUgc3RpbGwgbmVlZHMgdG8gYmUgZXhhbWluZWQuCisJICovCisJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR0xfQ1NSLCBHQ1NSX1NSU3xHQ1NSX01SUyk7IC8qIE5lZWRlZD8gKi8KKwljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HTF9DU1IsIEdDU1JfU1JDfEdDU1JfTVJDKTsKKwljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HTF9DU1IsIEdDU1JfU1JDfEdDU1JfTVJTKTsKKwltZGVsYXkoNSk7CS8qIEZJWE1FIHJldmlzaXQgdGhpcyAqLworCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0dMX0NTUiwgR0NTUl9DQ0lDX0VOfEdDU1JfU1JDfEdDU1JfTVJDKTsKKwljYWZlX3JlZ19zZXRfYml0KGNhbSwgUkVHX0dMX0lNQVNLLCBHSU1TS19DQ0lDX0VOKTsKKwkvKgorCSAqIE1ha2Ugc3VyZSBpdCdzIG5vdCBwb3dlcmVkIGRvd24uCisJICovCisJY2FmZV9yZWdfY2xlYXJfYml0KGNhbSwgUkVHX0NUUkwxLCBDMV9QV1JEV04pOworCS8qCisJICogVHVybiBvZmYgdGhlIGVuYWJsZSBiaXQuICBJdCBzdXJlIHNob3VsZCBiZSBvZmYgYW55d2F5LAorCSAqIGJ1dCBpdCdzIGdvb2QgdG8gYmUgc3VyZS4KKwkgKi8KKwljYWZlX3JlZ19jbGVhcl9iaXQoY2FtLCBSRUdfQ1RSTDAsIEMwX0VOQUJMRSk7CisJLyoKKwkgKiBNYXNrIGFsbCBpbnRlcnJ1cHRzLgorCSAqLworCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0lSUU1BU0ssIDApOworCS8qCisJICogQ2xvY2sgdGhlIHNlbnNvciBhcHByb3ByaWF0ZWx5LiAgQ29udHJvbGxlciBjbG9jayBzaG91bGQKKwkgKiBiZSA0OE1Ieiwgc2Vuc29yICJ0eXBpY2FsIiB2YWx1ZSBpcyBoYWxmIHRoYXQuCisJICovCisJY2FmZV9yZWdfd3JpdGVfbWFzayhjYW0sIFJFR19DTEtDVFJMLCAyLCBDTEtfRElWX01BU0spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKK30KKworCisvKgorICogU3RvcCB0aGUgY29udHJvbGxlciwgYW5kIGRvbid0IHJldHVybiB1bnRpbCB3ZSdyZSByZWFsbHkgc3VyZSB0aGF0IG5vCisgKiBmdXJ0aGVyIERNQSBpcyBnb2luZyBvbi4KKyAqLworc3RhdGljIHZvaWQgY2FmZV9jdGxyX3N0b3BfZG1hKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIFRoZW9yeTogc3RvcCB0aGUgY2FtZXJhIGNvbnRyb2xsZXIgKHdoZXRoZXIgaXQgaXMgb3BlcmF0aW5nCisJICogb3Igbm90KS4gIERlbGF5IGJyaWVmbHkganVzdCBpbiBjYXNlIHdlIHJhY2Ugd2l0aCB0aGUgU09GCisJICogaW50ZXJydXB0LCB0aGVuIHdhaXQgdW50aWwgbm8gRE1BIGlzIGFjdGl2ZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCWNhZmVfY3Rscl9zdG9wKGNhbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCW1kZWxheSgxKTsKKwl3YWl0X2V2ZW50X3RpbWVvdXQoY2FtLT5pb3dhaXQsCisJCQkhdGVzdF9iaXQoQ0ZfRE1BX0FDVElWRSwgJmNhbS0+ZmxhZ3MpLCBIWik7CisJaWYgKHRlc3RfYml0KENGX0RNQV9BQ1RJVkUsICZjYW0tPmZsYWdzKSkKKwkJY2FtX2VycihjYW0sICJUaW1lb3V0IHdhaXRpbmcgZm9yIERNQSB0byBlbmRcbiIpOworCQkvKiBUaGlzIHdvdWxkIGJlIGJhZCBuZXdzIC0gd2hhdCBub3c/ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwljYW0tPnN0YXRlID0gU19JRExFOworCWNhZmVfY3Rscl9pcnFfZGlzYWJsZShjYW0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFBvd2VyIHVwIGFuZCBkb3duLgorICovCitzdGF0aWMgdm9pZCBjYWZlX2N0bHJfcG93ZXJfdXAoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJY2FmZV9yZWdfY2xlYXJfYml0KGNhbSwgUkVHX0NUUkwxLCBDMV9QV1JEV04pOworCS8qCisJICogUHV0IHRoZSBzZW5zb3IgaW50byBvcGVyYXRpb25hbCBtb2RlIChhc3N1bWVzIE9MUEMtc3R5bGUKKwkgKiB3aXJpbmcpLiAgQ29udHJvbCAwIGlzIHJlc2V0IC0gc2V0IHRvIDEgdG8gb3BlcmF0ZS4KKwkgKiBDb250cm9sIDEgaXMgcG93ZXIgZG93biwgc2V0IHRvIDAgdG8gb3BlcmF0ZS4KKwkgKi8KKwljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HUFIsIEdQUl9DMUVOfEdQUl9DMEVOKTsgLyogcHdyIHVwLCByZXNldCAqLworCW1kZWxheSgxKTsgLyogTWFydmVsbCBzYXlzIDFtcyB3aWxsIGRvIGl0ICovCisJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR1BSLCBHUFJfQzFFTnxHUFJfQzBFTnxHUFJfQzApOworCW1kZWxheSgxKTsgLyogRW5vdWdoPyAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgY2FmZV9jdGxyX3Bvd2VyX2Rvd24oc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR1BSLCBHUFJfQzFFTnxHUFJfQzBFTnxHUFJfQzEpOworCWNhZmVfcmVnX3NldF9iaXQoY2FtLCBSRUdfQ1RSTDEsIEMxX1BXUkRXTik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIENvbW11bmljYXRpb25zIHdpdGggdGhlIHNlbnNvci4KKyAqLworCitzdGF0aWMgaW50IF9fY2FmZV9jYW1fY21kKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKnNjID0gY2FtLT5zZW5zb3I7CisJaW50IHJldDsKKworCWlmIChzYyA9PSBOVUxMIHx8IHNjLT5kcml2ZXIgPT0gTlVMTCB8fCBzYy0+ZHJpdmVyLT5jb21tYW5kID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IHNjLT5kcml2ZXItPmNvbW1hbmQoc2MsIGNtZCwgYXJnKTsKKwlpZiAocmV0ID09IC1FUEVSTSkgLyogVW5zdXBwb3J0ZWQgY29tbWFuZCAqLworCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fY2FmZV9jYW1fcmVzZXQoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJaW50IHplcm8gPSAwOworCXJldHVybiBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19JTlRfUkVTRVQsICZ6ZXJvKTsKK30KKworLyoKKyAqIFdlIGhhdmUgZm91bmQgdGhlIHNlbnNvciBvbiB0aGUgaTJjLiAgTGV0J3MgdHJ5IHRvIGhhdmUgYQorICogY29udmVyc2F0aW9uLgorICovCitzdGF0aWMgaW50IGNhZmVfY2FtX2luaXQoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJaWYgKGNhbS0+c3RhdGUgIT0gU19OT1RSRUFEWSkKKwkJY2FtX3dhcm4oY2FtLCAiQ2FtIGluaXQgd2l0aCBkZXZpY2UgaW4gZnVua3kgc3RhdGUgJWQiLAorCQkJCWNhbS0+c3RhdGUpOworCXJldCA9IF9fY2FmZV9jYW1fcmVzZXQoY2FtKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19JTlRfR19DSElQX0lERU5ULCAmY2FtLT5zZW5zb3JfdHlwZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisvLwlpZiAoY2FtLT5zZW5zb3ItPmFkZHIgIT0gT1Y3eHgwX1NJRCkgeworCWlmIChjYW0tPnNlbnNvcl90eXBlICE9IFY0TDJfSURFTlRfT1Y3NjcwKSB7CisJCWNhbV9lcnIoY2FtLCAiVW5zdXBwb3J0ZWQgc2Vuc29yIHR5cGUgJWQiLCBjYW0tPnNlbnNvci0+YWRkcik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKy8qIEdldC9zZXQgcGFyYW1ldGVycz8gKi8KKwlyZXQgPSAwOworCWNhbS0+c3RhdGUgPSBTX0lETEU7CisgIG91dDoKKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENvbmZpZ3VyZSB0aGUgc2Vuc29yIHRvIG1hdGNoIHRoZSBwYXJhbWV0ZXJzIHdlIGhhdmUuICBDYWxsZXIgc2hvdWxkCisgKiBob2xkIHNfbXV0ZXgKKyAqLworc3RhdGljIGludCBjYWZlX2NhbV9zZXRfZmxpcChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisKKwltZW1zZXQoJmN0cmwsIDAsIHNpemVvZihjdHJsKSk7CisJY3RybC5pZCA9IFY0TDJfQ0lEX1ZGTElQOworCWN0cmwudmFsdWUgPSBmbGlwOworCXJldHVybiBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19TX0NUUkwsICZjdHJsKTsKK30KKworCitzdGF0aWMgaW50IGNhZmVfY2FtX2NvbmZpZ3VyZShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OworCWludCByZXQsIHplcm8gPSAwOworCisJaWYgKGNhbS0+c3RhdGUgIT0gU19JRExFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmbXQuZm10LnBpeCA9IGNhbS0+cGl4X2Zvcm1hdDsKKwlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19JTlRfSU5JVCwgJnplcm8pOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfU19GTVQsICZmbXQpOworCS8qCisJICogT1Y3NjcwIGRvZXMgd2VpcmQgdGhpbmdzIGlmIGZsaXAgaXMgc2V0ICpiZWZvcmUqIGZvcm1hdC4uLgorCSAqLworCXJldCArPSBjYWZlX2NhbV9zZXRfZmxpcChjYW0pOworCXJldHVybiByZXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogRE1BIGJ1ZmZlciBtYW5hZ2VtZW50LiAgVGhlc2UgZnVuY3Rpb25zIG5lZWQgc19tdXRleCBoZWxkLgorICovCisKKy8qIEZJWE1FOiB0aGlzIGlzIGluZWZmaWNpZW50IGFzIGhlbGwsIHNpbmNlIGRtYV9hbGxvY19jb2hlcmVudCBqdXN0CisgKiBkb2VzIGEgZ2V0X2ZyZWVfcGFnZXMoKSBjYWxsLCBhbmQgd2Ugd2FzdGUgYSBnb29kIGNodW5rIG9mIGFuIG9yZGVyTgorICogYWxsb2NhdGlvbi4gIFNob3VsZCB0cnkgdG8gYWxsb2NhdGUgdGhlIHdob2xlIHNldCBpbiBvbmUgY2h1bmsuCisgKi8KK3N0YXRpYyBpbnQgY2FmZV9hbGxvY19kbWFfYnVmcyhzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwgaW50IGxvYWR0aW1lKQoreworCWludCBpOworCisJY2FmZV9zZXRfY29uZmlnX25lZWRlZChjYW0sIDEpOworCWlmIChsb2FkdGltZSkKKwkJY2FtLT5kbWFfYnVmX3NpemUgPSBkbWFfYnVmX3NpemU7CisJZWxzZQorCQljYW0tPmRtYV9idWZfc2l6ZSA9IGNhbS0+cGl4X2Zvcm1hdC5zaXplaW1hZ2U7CisJaWYgKG5fZG1hX2J1ZnMgPiAzKQorCQluX2RtYV9idWZzID0gMzsKKworCWNhbS0+bmJ1ZnMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBuX2RtYV9idWZzOyBpKyspIHsKKwkJY2FtLT5kbWFfYnVmc1tpXSA9IGRtYV9hbGxvY19jb2hlcmVudCgmY2FtLT5wZGV2LT5kZXYsCisJCQkJY2FtLT5kbWFfYnVmX3NpemUsIGNhbS0+ZG1hX2hhbmRsZXMgKyBpLAorCQkJCUdGUF9LRVJORUwpOworCQlpZiAoY2FtLT5kbWFfYnVmc1tpXSA9PSBOVUxMKSB7CisJCQljYW1fd2FybihjYW0sICJGYWlsZWQgdG8gYWxsb2NhdGUgRE1BIGJ1ZmZlclxuIik7CisJCQlicmVhazsKKwkJfQorCQkvKiBGb3IgZGVidWcsIHJlbW92ZSBldmVudHVhbGx5ICovCisJCW1lbXNldChjYW0tPmRtYV9idWZzW2ldLCAweGNjLCBjYW0tPmRtYV9idWZfc2l6ZSk7CisJCShjYW0tPm5idWZzKSsrOworCX0KKworCXN3aXRjaCAoY2FtLT5uYnVmcykgeworCWNhc2UgMToKKwkgICAgZG1hX2ZyZWVfY29oZXJlbnQoJmNhbS0+cGRldi0+ZGV2LCBjYW0tPmRtYV9idWZfc2l6ZSwKKwkJCSAgICBjYW0tPmRtYV9idWZzWzBdLCBjYW0tPmRtYV9oYW5kbGVzWzBdKTsKKwkgICAgY2FtLT5uYnVmcyA9IDA7CisJY2FzZSAwOgorCSAgICBjYW1fZXJyKGNhbSwgIkluc3VmZmljaWVudCBETUEgYnVmZmVycywgY2Fubm90IG9wZXJhdGVcbiIpOworCSAgICByZXR1cm4gLUVOT01FTTsKKworCWNhc2UgMjoKKwkgICAgaWYgKG5fZG1hX2J1ZnMgPiAyKQorCQkgICAgY2FtX3dhcm4oY2FtLCAiV2lsbCBsaW1wIGFsb25nIHdpdGggb25seSAyIGJ1ZmZlcnNcbiIpOworCSAgICBicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhZmVfZnJlZV9kbWFfYnVmcyhzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZzOyBpKyspIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmNhbS0+cGRldi0+ZGV2LCBjYW0tPmRtYV9idWZfc2l6ZSwKKwkJCQljYW0tPmRtYV9idWZzW2ldLCBjYW0tPmRtYV9oYW5kbGVzW2ldKTsKKwkJY2FtLT5kbWFfYnVmc1tpXSA9IE5VTEw7CisJfQorCWNhbS0+bmJ1ZnMgPSAwOworfQorCisKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogSGVyZSBzdGFydHMgdGhlIFY0TDIgaW50ZXJmYWNlIGNvZGUuCisgKi8KKworLyoKKyAqIFJlYWQgYW4gaW1hZ2UgZnJvbSB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgc3NpemVfdCBjYWZlX2RlbGl2ZXJfYnVmZmVyKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLAorCQljaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgYnVmbm87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJaWYgKGNhbS0+bmV4dF9idWYgPCAwKSB7CisJCWNhbV9lcnIoY2FtLCAiZGVsaXZlcl9idWZmZXI6IE5vIG5leHQgYnVmZmVyXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJYnVmbm8gPSBjYW0tPm5leHRfYnVmOworCWNsZWFyX2JpdChidWZubywgJmNhbS0+ZmxhZ3MpOworCWlmICgrKyhjYW0tPm5leHRfYnVmKSA+PSBjYW0tPm5idWZzKQorCQljYW0tPm5leHRfYnVmID0gMDsKKwlpZiAoISB0ZXN0X2JpdChjYW0tPm5leHRfYnVmLCAmY2FtLT5mbGFncykpCisJCWNhbS0+bmV4dF9idWYgPSAtMTsKKwljYW0tPnNwZWNmcmFtZXMgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCWlmIChsZW4gPiBjYW0tPnBpeF9mb3JtYXQuc2l6ZWltYWdlKQorCQlsZW4gPSBjYW0tPnBpeF9mb3JtYXQuc2l6ZWltYWdlOworCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBjYW0tPmRtYV9idWZzW2J1Zm5vXSwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJKCpwb3MpICs9IGxlbjsKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogR2V0IGV2ZXJ5dGhpbmcgcmVhZHksIGFuZCBzdGFydCBncmFiYmluZyBmcmFtZXMuCisgKi8KK3N0YXRpYyBpbnQgY2FmZV9yZWFkX3NldHVwKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLCBlbnVtIGNhZmVfc3RhdGUgc3RhdGUpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBDb25maWd1cmF0aW9uLiAgSWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBETUEgYnVmZmVycywKKwkgKiBtYWtlIG9uZSBsYXN0LCBkZXNwZXJhdGUgYXR0ZW1wdC4KKwkgKi8KKwlpZiAoY2FtLT5uYnVmcyA9PSAwKQorCQlpZiAoY2FmZV9hbGxvY19kbWFfYnVmcyhjYW0sIDApKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY2FmZV9uZWVkc19jb25maWcoY2FtKSkgeworCQljYWZlX2NhbV9jb25maWd1cmUoY2FtKTsKKwkJcmV0ID0gY2FmZV9jdGxyX2NvbmZpZ3VyZShjYW0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIFR1cm4gaXQgbG9vc2UuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwljYWZlX3Jlc2V0X2J1ZmZlcnMoY2FtKTsKKwljYWZlX2N0bHJfaXJxX2VuYWJsZShjYW0pOworCWNhbS0+c3RhdGUgPSBzdGF0ZTsKKwljYWZlX2N0bHJfc3RhcnQoY2FtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHNzaXplX3QgY2FmZV92NGxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCS8qCisJICogUGVyaGFwcyB3ZSdyZSBpbiBzcGVjdWxhdGl2ZSByZWFkIG1vZGUgYW5kIGFscmVhZHkKKwkgKiBoYXZlIGRhdGE/CisJICovCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlpZiAoY2FtLT5zdGF0ZSA9PSBTX1NQRUNSRUFEKSB7CisJCWlmIChjYW0tPm5leHRfYnVmID49IDApIHsKKwkJCXJldCA9IGNhZmVfZGVsaXZlcl9idWZmZXIoY2FtLCBidWZmZXIsIGxlbiwgcG9zKTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9IGVsc2UgaWYgKGNhbS0+c3RhdGUgPT0gU19GTEFLRUQgfHwgY2FtLT5zdGF0ZSA9PSBTX05PVFJFQURZKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0X3VubG9jazsKKwl9IGVsc2UgaWYgKGNhbS0+c3RhdGUgIT0gU19JRExFKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qCisJICogdjRsMjogbXVsdGlwbGUgcHJvY2Vzc2VzIGNhbiBvcGVuIHRoZSBkZXZpY2UsIGJ1dCBvbmx5CisJICogb25lIGdldHMgdG8gZ3JhYiBkYXRhIGZyb20gaXQuCisJICovCisJaWYgKGNhbS0+b3duZXIgJiYgY2FtLT5vd25lciAhPSBmaWxwKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwljYW0tPm93bmVyID0gZmlscDsKKworCS8qCisJICogRG8gc2V0dXAgaWYgbmVlZCBiZS4KKwkgKi8KKwlpZiAoY2FtLT5zdGF0ZSAhPSBTX1NQRUNSRUFEKSB7CisJCXJldCA9IGNhZmVfcmVhZF9zZXR1cChjYW0sIFNfU0lOR0xFUkVBRCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF91bmxvY2s7CisJfQorCS8qCisJICogV2FpdCBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbi4gIFRoaXMgc2hvdWxkIHByb2JhYmx5CisJICogYmUgaW50ZXJydXB0aWJsZSAoRklYTUUpLgorCSAqLworCXdhaXRfZXZlbnRfdGltZW91dChjYW0tPmlvd2FpdCwgY2FtLT5uZXh0X2J1ZiA+PSAwLCBIWik7CisJaWYgKGNhbS0+bmV4dF9idWYgPCAwKSB7CisJCWNhbV9lcnIoY2FtLCAicmVhZCgpIG9wZXJhdGlvbiB0aW1lZCBvdXRcbiIpOworCQljYWZlX2N0bHJfc3RvcF9kbWEoY2FtKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwkvKgorCSAqIEdpdmUgdGhlbSB0aGVpciBkYXRhIGFuZCB3ZSBzaG91bGQgYmUgZG9uZS4KKwkgKi8KKwlyZXQgPSBjYWZlX2RlbGl2ZXJfYnVmZmVyKGNhbSwgYnVmZmVyLCBsZW4sIHBvcyk7CisKKyAgb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCisKKworCisKKworCisvKgorICogU3RyZWFtaW5nIEkvTyBzdXBwb3J0LgorICovCisKKworCitzdGF0aWMgaW50IGNhZmVfdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICh0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJZ290byBvdXQ7CisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlpZiAoY2FtLT5zdGF0ZSAhPSBTX0lETEUgfHwgY2FtLT5uX3NidWZzID09IDApCisJCWdvdG8gb3V0X3VubG9jazsKKworCWNhbS0+c2VxdWVuY2UgPSAwOworCXJldCA9IGNhZmVfcmVhZF9zZXR1cChjYW0sIFNfU1RSRUFNSU5HKTsKKworICBvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKyAgb3V0OgorCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBjYWZlX3ZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlnb3RvIG91dDsKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCWlmIChjYW0tPnN0YXRlICE9IFNfU1RSRUFNSU5HKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwljYWZlX2N0bHJfc3RvcF9kbWEoY2FtKTsKKwlyZXQgPSAwOworCisgIG91dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworICBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworCisKK3N0YXRpYyBpbnQgY2FmZV9zZXR1cF9zaW9idWYoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0sIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgY2FmZV9zaW9fYnVmZmVyICpidWYgPSBjYW0tPnNiX2J1ZnMgKyBpbmRleDsKKworCUlOSVRfTElTVF9IRUFEKCZidWYtPmxpc3QpOworCWJ1Zi0+djRsYnVmLmxlbmd0aCA9IFBBR0VfQUxJR04oY2FtLT5waXhfZm9ybWF0LnNpemVpbWFnZSk7CisJYnVmLT5idWZmZXIgPSB2bWFsbG9jX3VzZXIoYnVmLT52NGxidWYubGVuZ3RoKTsKKwlpZiAoYnVmLT5idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJYnVmLT5tYXBjb3VudCA9IDA7CisJYnVmLT5jYW0gPSBjYW07CisKKwlidWYtPnY0bGJ1Zi5pbmRleCA9IGluZGV4OworCWJ1Zi0+djRsYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJYnVmLT52NGxidWYuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJYnVmLT52NGxidWYubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwkvKgorCSAqIE9mZnNldDogbXVzdCBiZSAzMi1iaXQgZXZlbiBvbiBhIDY0LWJpdCBzeXN0ZW0uICB2aWRlby1idWYKKwkgKiBqdXN0IHVzZXMgdGhlIGxlbmd0aCB0aW1lcyB0aGUgaW5kZXgsIGJ1dCB0aGUgc3BlYyB3YXJucworCSAqIGFnYWluc3QgZG9pbmcganVzdCB0aGF0IC0gdm1hIG1lcmdpbmcgcHJvYmxlbXMuICBTbyB3ZQorCSAqIGxlYXZlIGEgZ2FwIGJldHdlZW4gZWFjaCBwYWlyIG9mIGJ1ZmZlcnMuCisJICovCisJYnVmLT52NGxidWYubS5vZmZzZXQgPSAyKmluZGV4KmJ1Zi0+djRsYnVmLmxlbmd0aDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYWZlX2ZyZWVfc2lvX2J1ZmZlcnMoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJaW50IGk7CisKKwkvKgorCSAqIElmIGFueSBidWZmZXJzIGFyZSBtYXBwZWQsIHdlIGNhbm5vdCBmcmVlIHRoZW0gYXQgYWxsLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5fc2J1ZnM7IGkrKykKKwkJaWYgKGNhbS0+c2JfYnVmc1tpXS5tYXBjb3VudCA+IDApCisJCQlyZXR1cm4gLUVCVVNZOworCS8qCisJICogT0ssIGxldCdzIGRvIGl0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5fc2J1ZnM7IGkrKykKKwkJdmZyZWUoY2FtLT5zYl9idWZzW2ldLmJ1ZmZlcik7CisJY2FtLT5uX3NidWZzID0gMDsKKwlrZnJlZShjYW0tPnNiX2J1ZnMpOworCWNhbS0+c2JfYnVmcyA9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQoJmNhbS0+c2JfYXZhaWwpOworCUlOSVRfTElTVF9IRUFEKCZjYW0tPnNiX2Z1bGwpOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBjYWZlX3ZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxKQoreworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBpdCdzIHNvbWV0aGluZyB3ZSBjYW4gZG8uICBVc2VyIHBvaW50ZXJzIGNvdWxkIGJlCisJICogaW1wbGVtZW50ZWQgd2l0aG91dCBncmVhdCBwYWluLCBidXQgdGhhdCdzIG5vdCBiZWVuIGRvbmUgeWV0LgorCSAqLworCWlmIChyZXEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocmVxLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyoKKwkgKiBJZiB0aGV5IGFzayBmb3IgemVybyBidWZmZXJzLCB0aGV5IHJlYWxseSB3YW50IHVzIHRvIHN0b3Agc3RyZWFtaW5nCisJICogKGlmIGl0J3MgaGFwcGVuaW5nKSBhbmQgZnJlZSBldmVyeXRoaW5nLiAgU2hvdWxkIHdlIGNoZWNrIG93bmVyPworCSAqLworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJaWYgKHJlcS0+Y291bnQgPT0gMCkgeworCQlpZiAoY2FtLT5zdGF0ZSA9PSBTX1NUUkVBTUlORykKKwkJCWNhZmVfY3Rscl9zdG9wX2RtYShjYW0pOworCQlyZXQgPSBjYWZlX2ZyZWVfc2lvX2J1ZmZlcnMgKGNhbSk7CisJCWdvdG8gb3V0OworCX0KKwkvKgorCSAqIERldmljZSBuZWVkcyB0byBiZSBpZGxlIGFuZCB3b3JraW5nLiAgV2UgKmNvdWxkKiB0cnkgdG8gZG8gdGhlCisJICogcmlnaHQgdGhpbmcgaW4gU19TUEVDUkVBRCBieSBzaHV0dGluZyB0aGluZ3MgZG93biwgYnV0IGl0CisJICogcHJvYmFibHkgZG9lc24ndCBtYXR0ZXIuCisJICovCisJaWYgKGNhbS0+c3RhdGUgIT0gU19JRExFIHx8IChjYW0tPm93bmVyICYmIGNhbS0+b3duZXIgIT0gZmlscCkpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisJY2FtLT5vd25lciA9IGZpbHA7CisKKwlpZiAocmVxLT5jb3VudCA8IG1pbl9idWZmZXJzKQorCQlyZXEtPmNvdW50ID0gbWluX2J1ZmZlcnM7CisJZWxzZSBpZiAocmVxLT5jb3VudCA+IG1heF9idWZmZXJzKQorCQlyZXEtPmNvdW50ID0gbWF4X2J1ZmZlcnM7CisJaWYgKGNhbS0+bl9zYnVmcyA+IDApIHsKKwkJcmV0ID0gY2FmZV9mcmVlX3Npb19idWZmZXJzKGNhbSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CisKKwljYW0tPnNiX2J1ZnMgPSBremFsbG9jKHJlcS0+Y291bnQqc2l6ZW9mKHN0cnVjdCBjYWZlX3Npb19idWZmZXIpLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKGNhbS0+c2JfYnVmcyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlmb3IgKGNhbS0+bl9zYnVmcyA9IDA7IGNhbS0+bl9zYnVmcyA8IHJlcS0+Y291bnQ7IChjYW0tPm5fc2J1ZnMrKykpIHsKKwkJcmV0ID0gY2FmZV9zZXR1cF9zaW9idWYoY2FtLCBjYW0tPm5fc2J1ZnMpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJaWYgKGNhbS0+bl9zYnVmcyA9PSAwKSAgLyogbm8gbHVjayBhdCBhbGwgLSByZXQgYWxyZWFkeSBzZXQgKi8KKwkJa2ZyZWUoY2FtLT5zYl9idWZzKTsKKwllbHNlCisJCXJldCA9IDA7CisJcmVxLT5jb3VudCA9IGNhbS0+bl9zYnVmczsgIC8qIEluIGNhc2Ugb2YgcGFydGlhbCBzdWNjZXNzICovCisKKyAgb3V0OgorCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWludCByZXQgPSAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJZ290byBvdXQ7CisJaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gY2FtLT5uX3NidWZzKQorCQlnb3RvIG91dDsKKwkqYnVmID0gY2FtLT5zYl9idWZzW2J1Zi0+aW5kZXhdLnY0bGJ1ZjsKKwlyZXQgPSAwOworICBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNhZmVfc2lvX2J1ZmZlciAqc2J1ZjsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJZ290byBvdXQ7CisJaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gY2FtLT5uX3NidWZzKQorCQlnb3RvIG91dDsKKwlzYnVmID0gY2FtLT5zYl9idWZzICsgYnVmLT5pbmRleDsKKwlpZiAoc2J1Zi0+djRsYnVmLmZsYWdzICYgVjRMMl9CVUZfRkxBR19RVUVVRUQpIHsKKwkJcmV0ID0gMDsgLyogQWxyZWFkeSBxdWV1ZWQ/PyAqLworCQlnb3RvIG91dDsKKwl9CisJaWYgKHNidWYtPnY0bGJ1Zi5mbGFncyAmIFY0TDJfQlVGX0ZMQUdfRE9ORSkgeworCQkvKiBTcGVjIGRvZXNuJ3Qgc2F5IGFueXRoaW5nLCBzZWVtcyBhcHByb3ByaWF0ZSB0aG8gKi8KKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisJc2J1Zi0+djRsYnVmLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJnNidWYtPmxpc3QsICZjYW0tPnNiX2F2YWlsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJcmV0ID0gMDsKKyAgb3V0OgorCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNhZmVfdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2FmZV9zaW9fYnVmZmVyICpzYnVmOworCWludCByZXQgPSAtRUlOVkFMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlnb3RvIG91dF91bmxvY2s7CisJaWYgKGNhbS0+c3RhdGUgIT0gU19TVFJFQU1JTkcpCisJCWdvdG8gb3V0X3VubG9jazsKKwlpZiAobGlzdF9lbXB0eSgmY2FtLT5zYl9mdWxsKSAmJiBmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJd2hpbGUgKGxpc3RfZW1wdHkoJmNhbS0+c2JfZnVsbCkgJiYgY2FtLT5zdGF0ZSA9PSBTX1NUUkVBTUlORykgeworCQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT5pb3dhaXQsCisJCQkJCQkhbGlzdF9lbXB0eSgmY2FtLT5zYl9mdWxsKSkpIHsKKwkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCWdvdG8gb3V0OworCQl9CisJCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJfQorCisJaWYgKGNhbS0+c3RhdGUgIT0gU19TVFJFQU1JTkcpCisJCXJldCA9IC1FSU5UUjsKKwllbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwkJLyogU2hvdWxkIHByb2JhYmx5IHJlY2hlY2sgIWxpc3RfZW1wdHkoKSBoZXJlICovCisJCXNidWYgPSBsaXN0X2VudHJ5KGNhbS0+c2JfZnVsbC5uZXh0LAorCQkJCXN0cnVjdCBjYWZlX3Npb19idWZmZXIsIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZzYnVmLT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCQlzYnVmLT52NGxidWYuZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfRE9ORTsKKwkJKmJ1ZiA9IHNidWYtPnY0bGJ1ZjsKKwkJcmV0ID0gMDsKKwl9CisKKyAgb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisgIG91dDoKKwlyZXR1cm4gcmV0OworfQorCisKKworc3RhdGljIHZvaWQgY2FmZV92NGxfdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgY2FmZV9zaW9fYnVmZmVyICpzYnVmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJLyoKKwkgKiBMb2NraW5nOiBkb25lIHVuZGVyIG1tYXBfc2VtLCBzbyB3ZSBkb24ndCBuZWVkIHRvCisJICogZ28gYmFjayB0byB0aGUgY2FtZXJhIGxvY2sgaGVyZS4KKwkgKi8KKwlzYnVmLT5tYXBjb3VudCsrOworfQorCisKK3N0YXRpYyB2b2lkIGNhZmVfdjRsX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBjYWZlX3Npb19idWZmZXIgKnNidWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKworCW11dGV4X2xvY2soJnNidWYtPmNhbS0+c19tdXRleCk7CisJc2J1Zi0+bWFwY291bnQtLTsKKwkvKiBEb2NzIHNheSB3ZSBzaG91bGQgc3RvcCBJL08gdG9vLi4uICovCisJaWYgKHNidWYtPm1hcGNvdW50ID09IDApCisJCXNidWYtPnY0bGJ1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19NQVBQRUQ7CisJbXV0ZXhfdW5sb2NrKCZzYnVmLT5jYW0tPnNfbXV0ZXgpOworfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNhZmVfdjRsX3ZtX29wcyA9IHsKKwkub3BlbiA9IGNhZmVfdjRsX3ZtX29wZW4sCisJLmNsb3NlID0gY2FmZV92NGxfdm1fY2xvc2UKK307CisKKworc3RhdGljIGludCBjYWZlX3Y0bF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgaTsKKwlzdHJ1Y3QgY2FmZV9zaW9fYnVmZmVyICpzYnVmID0gTlVMTDsKKworCWlmICghICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHx8ICEgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKgorCSAqIEZpbmQgdGhlIGJ1ZmZlciB0aGV5IGFyZSBsb29raW5nIGZvci4KKwkgKi8KKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5fc2J1ZnM7IGkrKykKKwkJaWYgKGNhbS0+c2JfYnVmc1tpXS52NGxidWYubS5vZmZzZXQgPT0gb2Zmc2V0KSB7CisJCQlzYnVmID0gY2FtLT5zYl9idWZzICsgaTsKKwkJCWJyZWFrOworCQl9CisJaWYgKHNidWYgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgc2J1Zi0+YnVmZmVyLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQ7CisJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBzYnVmOworCXZtYS0+dm1fb3BzID0gJmNhZmVfdjRsX3ZtX29wczsKKwlzYnVmLT52NGxidWYuZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CisJY2FmZV92NGxfdm1fb3Blbih2bWEpOworCXJldCA9IDA7CisgIG91dDoKKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCisKK3N0YXRpYyBpbnQgY2FmZV92NGxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbTsKKworCWNhbSA9IGNhZmVfZmluZF9kZXYoaW1pbm9yKGlub2RlKSk7CisJaWYgKGNhbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBjYW07CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCWlmIChjYW0tPnVzZXJzID09IDApIHsKKwkJY2FmZV9jdGxyX3Bvd2VyX3VwKGNhbSk7CisJCV9fY2FmZV9jYW1fcmVzZXQoY2FtKTsKKwkJY2FmZV9zZXRfY29uZmlnX25lZWRlZChjYW0sIDEpOworCS8qIEZJWE1FIG1ha2Ugc3VyZSB0aGlzIGlzIGNvbXBsZXRlICovCisJfQorCShjYW0tPnVzZXJzKSsrOworCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGNhZmVfdjRsX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCShjYW0tPnVzZXJzKS0tOworCWlmIChmaWxwID09IGNhbS0+b3duZXIpIHsKKwkJY2FmZV9jdGxyX3N0b3BfZG1hKGNhbSk7CisJCWNhZmVfZnJlZV9zaW9fYnVmZmVycyhjYW0pOworCQljYW0tPm93bmVyID0gTlVMTDsKKwl9CisJaWYgKGNhbS0+dXNlcnMgPT0gMCkgeworCQljYWZlX2N0bHJfcG93ZXJfZG93bihjYW0pOworCQlpZiAoISBhbGxvY19idWZzX2F0X2xvYWQpCisJCQljYWZlX2ZyZWVfZG1hX2J1ZnMoY2FtKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIHVuc2lnbmVkIGludCBjYWZlX3Y0bF9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLAorCQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0KQoreworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJcG9sbF93YWl0KGZpbHAsICZjYW0tPmlvd2FpdCwgcHQpOworCWlmIChjYW0tPm5leHRfYnVmID49IDApCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIGludCBjYWZlX3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfUVVFUllDVFJMLCBxYyk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBjYWZlX3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfR19DVFJMLCBjdHJsKTsKKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IGNhZmVfdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19TX0NUUkwsIGN0cmwpOworCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKKworCisKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJjcHkoY2FwLT5kcml2ZXIsICJjYWZlX2NjaWMiKTsKKwlzdHJjcHkoY2FwLT5jYXJkLCAiY2FmZV9jY2ljIik7CisJY2FwLT52ZXJzaW9uID0gQ0FGRV9WRVJTSU9OOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCVY0TDJfQ0FQX1JFQURXUklURSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogVGhlIGRlZmF1bHQgZm9ybWF0IHdlIHVzZSB1bnRpbCBzb21lYm9keSBzYXlzIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgY2FmZV9kZWZfcGl4X2Zvcm1hdCA9IHsKKwkud2lkdGgJCT0gVkdBX1dJRFRILAorCS5oZWlnaHQJCT0gVkdBX0hFSUdIVCwKKwkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkuZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FLAorCS5ieXRlc3BlcmxpbmUJPSBWR0FfV0lEVEgqMiwKKwkuc2l6ZWltYWdlCT0gVkdBX1dJRFRIKlZHQV9IRUlHSFQqMiwKK307CisKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2NfZW51bV9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLAorCQl2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OworCWludCByZXQ7CisKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19FTlVNX0ZNVCwgZm10KTsKKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IGNhZmVfdmlkaW9jX3RyeV9mbXRfY2FwIChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX1RSWV9GTVQsIGZtdCk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2Nfc19mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CisJaW50IHJldDsKKworCS8qCisJICogQ2FuJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGRldmljZSBpcyBub3QgaWRsZQorCSAqIEFsc28gY2FuJ3QgaWYgdGhlcmUgYXJlIHN0cmVhbWluZyBidWZmZXJzIGluIHBsYWNlLgorCSAqLworCWlmIChjYW0tPnN0YXRlICE9IFNfSURMRSB8fCBjYW0tPm5fc2J1ZnMgPiAwKQorCQlyZXR1cm4gLUVCVVNZOworCS8qCisJICogU2VlIGlmIHRoZSBmb3JtYXR0aW5nIHdvcmtzIGluIHByaW5jaXBsZS4KKwkgKi8KKwlyZXQgPSBjYWZlX3ZpZGlvY190cnlfZm10X2NhcChmaWxwLCBwcml2LCBmbXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJLyoKKwkgKiBOb3cgd2Ugc3RhcnQgdG8gY2hhbmdlIHRoaW5ncyBmb3IgcmVhbCwgc28gbGV0J3MgZG8gaXQKKwkgKiB1bmRlciBsb2NrLgorCSAqLworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJY2FtLT5waXhfZm9ybWF0ID0gZm10LT5mbXQucGl4OworCS8qCisJICogTWFrZSBzdXJlIHdlIGhhdmUgYXBwcm9wcmlhdGUgRE1BIGJ1ZmZlcnMuCisJICovCisJcmV0ID0gLUVOT01FTTsKKwlpZiAoY2FtLT5uYnVmcyA+IDAgJiYgY2FtLT5kbWFfYnVmX3NpemUgPCBjYW0tPnBpeF9mb3JtYXQuc2l6ZWltYWdlKQorCQljYWZlX2ZyZWVfZG1hX2J1ZnMoY2FtKTsKKwlpZiAoY2FtLT5uYnVmcyA9PSAwKSB7CisJCWlmIChjYWZlX2FsbG9jX2RtYV9idWZzKGNhbSwgMCkpCisJCQlnb3RvIG91dDsKKwl9CisJLyoKKwkgKiBJdCBsb29rcyBsaWtlIHRoaXMgbWlnaHQgd29yaywgc28gbGV0J3MgcHJvZ3JhbSB0aGUgc2Vuc29yLgorCSAqLworCXJldCA9IGNhZmVfY2FtX2NvbmZpZ3VyZShjYW0pOworCWlmICghIHJldCkKKwkJcmV0ID0gY2FmZV9jdGxyX2NvbmZpZ3VyZShjYW0pOworICBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm4gb3VyIHN0b3JlZCBub3Rpb24gb2YgaG93IHRoZSBjYW1lcmEgaXMvc2hvdWxkIGJlIGNvbmZpZ3VyZWQuCisgKiBUaGUgVjRsMiBzcGVjIHdhbnRzIHVzIHRvIGJlIHNtYXJ0ZXIsIGFuZCBhY3R1YWxseSBnZXQgdGhpcyBmcm9tCisgKiB0aGUgY2FtZXJhIChhbmQgbm90IG1lc3Mgd2l0aCBpdCBhdCBvcGVuIHRpbWUpLiAgU29tZWRheS4KKyAqLworc3RhdGljIGludCBjYWZlX3ZpZGlvY19nX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CisKKwlmLT5mbXQucGl4ID0gY2FtLT5waXhfZm9ybWF0OworCXJldHVybiAwOworfQorCisvKgorICogV2Ugb25seSBoYXZlIG9uZSBpbnB1dCAtIHRoZSBzZW5zb3IgLSBzbyBtaW5pbWl6ZSB0aGUgbm9uc2Vuc2UgaGVyZS4KKyAqLworc3RhdGljIGludCBjYWZlX3ZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wdXQpCit7CisJaWYgKGlucHV0LT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlucHV0LT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwlpbnB1dC0+c3RkID0gVjRMMl9TVERfQUxMOyAvKiBOb3Qgc3VyZSB3aGF0IHNob3VsZCBnbyBoZXJlICovCisJc3RyY3B5KGlucHV0LT5uYW1lLCAiQ2FtZXJhIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQoreworCSppID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYWZlX3ZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoaSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworLyogZnJvbSB2aXZpLmMgKi8KK3N0YXRpYyBpbnQgY2FmZV92aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICphKQoreworCXJldHVybiAwOworfQorCisvKgorICogRy9TX1BBUk0uICBNb3N0IG9mIHRoaXMgaXMgZG9uZSBieSB0aGUgc2Vuc29yLCBidXQgd2UgYXJlCisgKiB0aGUgbGV2ZWwgd2hpY2ggY29udHJvbHMgdGhlIG51bWJlciBvZiByZWFkIGJ1ZmZlcnMuCisgKi8KK3N0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19wYXJtKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtcykKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfR19QQVJNLCBwYXJtcyk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXBhcm1zLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBuX2RtYV9idWZzOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2Nfc19wYXJtKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtcykKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfU19QQVJNLCBwYXJtcyk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXBhcm1zLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBuX2RtYV9idWZzOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgY2FmZV92NGxfZGV2X3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmQpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBjb250YWluZXJfb2YodmQsIHN0cnVjdCBjYWZlX2NhbWVyYSwgdjRsZGV2KTsKKworCWtmcmVlKGNhbSk7Cit9CisKKworLyoKKyAqIFRoaXMgdGVtcGxhdGUgZGV2aWNlIGhvbGRzIGFsbCBvZiB0aG9zZSB2NGwyIG1ldGhvZHM7IHdlCisgKiBjbG9uZSBpdCBmb3Igc3BlY2lmaWMgcmVhbCBkZXZpY2VzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhZmVfdjRsX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBjYWZlX3Y0bF9vcGVuLAorCS5yZWxlYXNlID0gY2FmZV92NGxfcmVsZWFzZSwKKwkucmVhZCA9IGNhZmVfdjRsX3JlYWQsCisJLnBvbGwgPSBjYWZlX3Y0bF9wb2xsLAorCS5tbWFwID0gY2FmZV92NGxfbW1hcCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCisJLmxsc2VlayA9IG5vX2xsc2VlaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGNhZmVfdjRsX3RlbXBsYXRlID0geworCS5uYW1lID0gImNhZmUiLAorCS50eXBlID0gVkZMX1RZUEVfR1JBQkJFUiwKKwkudHlwZTIgPSBWSURfVFlQRV9DQVBUVVJFLAorCS5taW5vciA9IC0xLCAvKiBHZXQgb25lIGR5bmFtaWNhbGx5ICovCisJLnR2bm9ybXMgPSBWNEwyX1NURF9OVFNDX00sCisJLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwgIC8qIG1ha2UgbXBsYXllciBoYXBweSAqLworCisJLmZvcHMgPSAmY2FmZV92NGxfZm9wcywKKwkucmVsZWFzZSA9IGNhZmVfdjRsX2Rldl9yZWxlYXNlLAorCisJLnZpZGlvY19xdWVyeWNhcCAJPSBjYWZlX3ZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X2NhcAk9IGNhZmVfdmlkaW9jX2VudW1fZm10X2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfY2FwCT0gY2FmZV92aWRpb2NfdHJ5X2ZtdF9jYXAsCisJLnZpZGlvY19zX2ZtdF9jYXAJPSBjYWZlX3ZpZGlvY19zX2ZtdF9jYXAsCisJLnZpZGlvY19nX2ZtdF9jYXAJPSBjYWZlX3ZpZGlvY19nX2ZtdF9jYXAsCisJLnZpZGlvY19lbnVtX2lucHV0CT0gY2FmZV92aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQJCT0gY2FmZV92aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCT0gY2FmZV92aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX3Nfc3RkCQk9IGNhZmVfdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfcmVxYnVmcwkJPSBjYWZlX3ZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYJPSBjYWZlX3ZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYJCT0gY2FmZV92aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmCQk9IGNhZmVfdmlkaW9jX2RxYnVmLAorCS52aWRpb2Nfc3RyZWFtb24JPSBjYWZlX3ZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZgk9IGNhZmVfdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX3F1ZXJ5Y3RybAk9IGNhZmVfdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybAkJPSBjYWZlX3ZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwJCT0gY2FmZV92aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfZ19wYXJtCQk9IGNhZmVfdmlkaW9jX2dfcGFybSwKKwkudmlkaW9jX3NfcGFybQkJPSBjYWZlX3ZpZGlvY19zX3Bhcm0sCit9OworCisKKworCisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogSW50ZXJydXB0IGhhbmRsZXIgc3R1ZmYKKyAqLworCisKKworc3RhdGljIHZvaWQgY2FmZV9mcmFtZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IChzdHJ1Y3QgY2FmZV9jYW1lcmEgKikgZGF0YTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjYWZlX3Npb19idWZmZXIgKnNidWY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZzOyBpKyspIHsKKwkJaW50IGJ1Zm5vID0gY2FtLT5uZXh0X2J1ZjsKKwkJaWYgKGJ1Zm5vIDwgMCkgeyAgLyogIndpbGwgbmV2ZXIgaGFwcGVuIiAqLworCQkJY2FtX2VycihjYW0sICJObyB2YWxpZCBidWZzIGluIHRhc2tsZXQhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWlmICgrKyhjYW0tPm5leHRfYnVmKSA+PSBjYW0tPm5idWZzKQorCQkJY2FtLT5uZXh0X2J1ZiA9IDA7CisJCWlmICghIHRlc3RfYml0KGJ1Zm5vLCAmY2FtLT5mbGFncykpCisJCQljb250aW51ZTsKKwkJaWYgKGxpc3RfZW1wdHkoJmNhbS0+c2JfYXZhaWwpKQorCQkJYnJlYWs7ICAvKiBMZWF2ZSBpdCB2YWxpZCwgaG9wZSBmb3IgYmV0dGVyIGxhdGVyICovCisJCWNsZWFyX2JpdChidWZubywgJmNhbS0+ZmxhZ3MpOworCQkvKgorCQkgKiBXZSBjb3VsZCBwZXJoYXBzIGRyb3AgdGhlIHNwaW5sb2NrIGR1cmluZyB0aGlzCisJCSAqIGJpZyBjb3B5LiAgU29tZXRoaW5nIHRvIGNvbnNpZGVyLgorCQkgKi8KKwkJc2J1ZiA9IGxpc3RfZW50cnkoY2FtLT5zYl9hdmFpbC5uZXh0LAorCQkJCXN0cnVjdCBjYWZlX3Npb19idWZmZXIsIGxpc3QpOworCQltZW1jcHkoc2J1Zi0+YnVmZmVyLCBjYW0tPmRtYV9idWZzW2J1Zm5vXSwKKwkJCQljYW0tPnBpeF9mb3JtYXQuc2l6ZWltYWdlKTsKKwkJc2J1Zi0+djRsYnVmLmJ5dGVzdXNlZCA9IGNhbS0+cGl4X2Zvcm1hdC5zaXplaW1hZ2U7CisJCXNidWYtPnY0bGJ1Zi5zZXF1ZW5jZSA9IGNhbS0+YnVmX3NlcVtidWZub107CisJCXNidWYtPnY0bGJ1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19RVUVVRUQ7CisJCXNidWYtPnY0bGJ1Zi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7CisJCWxpc3RfbW92ZV90YWlsKCZzYnVmLT5saXN0LCAmY2FtLT5zYl9mdWxsKTsKKwl9CisJaWYgKCEgbGlzdF9lbXB0eSgmY2FtLT5zYl9mdWxsKSkKKwkJd2FrZV91cCgmY2FtLT5pb3dhaXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKK30KKworCisKK3N0YXRpYyB2b2lkIGNhZmVfZnJhbWVfY29tcGxldGUoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0sIGludCBmcmFtZSkKK3sKKwkvKgorCSAqIEJhc2ljIGZyYW1lIGhvdXNla2VlcGluZy4KKwkgKi8KKwlpZiAodGVzdF9iaXQoZnJhbWUsICZjYW0tPmZsYWdzKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCWNhbV9lcnIoY2FtLCAiRnJhbWUgb3ZlcnJ1biBvbiAlZCwgZnJhbWVzIGxvc3RcbiIsIGZyYW1lKTsKKwlzZXRfYml0KGZyYW1lLCAmY2FtLT5mbGFncyk7CisJY2xlYXJfYml0KENGX0RNQV9BQ1RJVkUsICZjYW0tPmZsYWdzKTsKKwlpZiAoY2FtLT5uZXh0X2J1ZiA8IDApCisJCWNhbS0+bmV4dF9idWYgPSBmcmFtZTsKKwljYW0tPmJ1Zl9zZXFbZnJhbWVdID0gKysoY2FtLT5zZXF1ZW5jZSk7CisKKwlzd2l0Y2ggKGNhbS0+c3RhdGUpIHsKKwkvKgorCSAqIElmIGluIHNpbmdsZSByZWFkIG1vZGUsIHRyeSBnb2luZyBzcGVjdWxhdGl2ZS4KKwkgKi8KKwkgICAgY2FzZSBTX1NJTkdMRVJFQUQ6CisJCWNhbS0+c3RhdGUgPSBTX1NQRUNSRUFEOworCQljYW0tPnNwZWNmcmFtZXMgPSAwOworCQl3YWtlX3VwKCZjYW0tPmlvd2FpdCk7CisJCWJyZWFrOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgYWxyZWFkeSBkb2luZyBzcGVjdWxhdGl2ZSByZWFkcywgYW5kIG5vYm9keSBpcworCSAqIHJlYWRpbmcgdGhlbSwganVzdCBzdG9wLgorCSAqLworCSAgICBjYXNlIFNfU1BFQ1JFQUQ6CisJCWlmICgrKyhjYW0tPnNwZWNmcmFtZXMpID49IGNhbS0+bmJ1ZnMpIHsKKwkJCWNhZmVfY3Rscl9zdG9wKGNhbSk7CisJCQljYWZlX2N0bHJfaXJxX2Rpc2FibGUoY2FtKTsKKwkJCWNhbS0+c3RhdGUgPSBTX0lETEU7CisJCX0KKwkJd2FrZV91cCgmY2FtLT5pb3dhaXQpOworCQlicmVhazsKKwkvKgorCSAqIEZvciB0aGUgc3RyZWFtaW5nIGNhc2UsIHdlIGRlZmVyIHRoZSByZWFsIHdvcmsgdG8gdGhlCisJICogY2FtZXJhIHRhc2tsZXQuCisJICoKKwkgKiBGSVhNRTogaWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBjb25zdW1pbmcgdGhlIGJ1ZmZlcnMsCisJICogd2Ugc2hvdWxkIGV2ZW50dWFsbHkgcHV0IHRoaW5ncyBvbiBob2xkIGFuZCByZXN0YXJ0IGluCisJICogdmlkaW9jX2RxYnVmKCkuCisJICovCisJICAgIGNhc2UgU19TVFJFQU1JTkc6CisJCXRhc2tsZXRfc2NoZWR1bGUoJmNhbS0+c190YXNrbGV0KTsKKwkJYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkJY2FtX2VycihjYW0sICJGcmFtZSBpbnRlcnJ1cHQgaW4gbm9uLW9wZXJhdGlvbmFsIHN0YXRlXG4iKTsKKwkJYnJlYWs7CisJfQorfQorCisKKworCitzdGF0aWMgdm9pZCBjYWZlX2ZyYW1lX2lycShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwgdW5zaWduZWQgaW50IGlycXMpCit7CisJdW5zaWduZWQgaW50IGZyYW1lOworCisJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfSVJRU1RBVCwgRlJBTUVJUlFTKTsgLyogQ2xlYXInZW0gYWxsICovCisJLyoKKwkgKiBIYW5kbGUgYW55IGZyYW1lIGNvbXBsZXRpb25zLiAgVGhlcmUgcmVhbGx5IHNob3VsZAorCSAqIG5vdCBiZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlLCBvciB3ZSBoYXZlIGZhbGxlbgorCSAqIGZhciBiZWhpbmQuCisJICovCisJZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgY2FtLT5uYnVmczsgZnJhbWUrKykKKwkJaWYgKGlycXMgJiAoSVJRX0VPRjAgPDwgZnJhbWUpKQorCQkJY2FmZV9mcmFtZV9jb21wbGV0ZShjYW0sIGZyYW1lKTsKKwkvKgorCSAqIElmIGEgZnJhbWUgc3RhcnRzLCBub3RlIHRoYXQgd2UgaGF2ZSBETUEgYWN0aXZlLiAgVGhpcworCSAqIGNvZGUgYXNzdW1lcyB0aGF0IHdlIHdvbid0IGdldCBtdWx0aXBsZSBmcmFtZSBpbnRlcnJ1cHRzCisJICogYXQgb25jZTsgbWF5IHdhbnQgdG8gcmV0aGluayB0aGF0LgorCSAqLworCWlmIChpcnFzICYgKElSUV9TT0YwIHwgSVJRX1NPRjEgfCBJUlFfU09GMikpCisJCXNldF9iaXQoQ0ZfRE1BX0FDVElWRSwgJmNhbS0+ZmxhZ3MpOworfQorCisKKworc3RhdGljIGlycXJldHVybl90IGNhZmVfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBkYXRhOworCXVuc2lnbmVkIGludCBpcnFzOworCisJc3Bpbl9sb2NrKCZjYW0tPmRldl9sb2NrKTsKKwlpcnFzID0gY2FmZV9yZWdfcmVhZChjYW0sIFJFR19JUlFTVEFUKTsKKwlpZiAoKGlycXMgJiBBTExJUlFTKSA9PSAwKSB7CisJCXNwaW5fdW5sb2NrKCZjYW0tPmRldl9sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwlpZiAoaXJxcyAmIEZSQU1FSVJRUykKKwkJY2FmZV9mcmFtZV9pcnEoY2FtLCBpcnFzKTsKKwlpZiAoaXJxcyAmIFRXU0lJUlFTKSB7CisJCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0lSUVNUQVQsIFRXU0lJUlFTKTsKKwkJd2FrZV91cCgmY2FtLT5zbWJ1c193YWl0KTsKKwl9CisJc3Bpbl91bmxvY2soJmNhbS0+ZGV2X2xvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKy8qCisgKiBEZWJ1Z2ZzIHN0dWZmLgorICovCisKK3N0YXRpYyBjaGFyIGNhZmVfZGVidWdfYnVmWzEwMjRdOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmNhZmVfZGZzX3Jvb3Q7CisKK3N0YXRpYyB2b2lkIGNhZmVfZGZzX3NldHVwKHZvaWQpCit7CisJY2FmZV9kZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY2FmZV9jY2ljIiwgTlVMTCk7CisJaWYgKElTX0VSUihjYWZlX2Rmc19yb290KSkgeworCQljYWZlX2Rmc19yb290ID0gTlVMTDsgIC8qIE5ldmVyIG1pbmQgKi8KKwkJcHJpbnRrKEtFUk5fTk9USUNFICJjYWZlX2NjaWMgdW5hYmxlIHRvIHNldCB1cCBkZWJ1Z2ZzXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNhZmVfZGZzX3NodXRkb3duKHZvaWQpCit7CisJaWYgKGNhZmVfZGZzX3Jvb3QpCisJCWRlYnVnZnNfcmVtb3ZlKGNhZmVfZGZzX3Jvb3QpOworfQorCitzdGF0aWMgaW50IGNhZmVfZGZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgY2FmZV9kZnNfcmVhZF9yZWdzKHN0cnVjdCBmaWxlICpmaWxlLAorCQljaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpzID0gY2FmZV9kZWJ1Z19idWY7CisJaW50IG9mZnNldDsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgMHg0NDsgb2Zmc2V0ICs9IDQpCisJCXMgKz0gc3ByaW50ZihzLCAiJTAyeDogJTA4eFxuIiwgb2Zmc2V0LAorCQkJCWNhZmVfcmVnX3JlYWQoY2FtLCBvZmZzZXQpKTsKKwlmb3IgKG9mZnNldCA9IDB4ODg7IG9mZnNldCA8PSAweDkwOyBvZmZzZXQgKz0gNCkKKwkJcyArPSBzcHJpbnRmKHMsICIlMDJ4OiAlMDh4XG4iLCBvZmZzZXQsCisJCQkJY2FmZV9yZWdfcmVhZChjYW0sIG9mZnNldCkpOworCWZvciAob2Zmc2V0ID0gMHhiNDsgb2Zmc2V0IDw9IDB4YmM7IG9mZnNldCArPSA0KQorCQlzICs9IHNwcmludGYocywgIiUwMng6ICUwOHhcbiIsIG9mZnNldCwKKwkJCQljYWZlX3JlZ19yZWFkKGNhbSwgb2Zmc2V0KSk7CisJZm9yIChvZmZzZXQgPSAweDMwMDA7IG9mZnNldCA8PSAweDMwMGM7IG9mZnNldCArPSA0KQorCQlzICs9IHNwcmludGYocywgIiUwNHg6ICUwOHhcbiIsIG9mZnNldCwKKwkJCQljYWZlX3JlZ19yZWFkKGNhbSwgb2Zmc2V0KSk7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIGNhZmVfZGVidWdfYnVmLAorCQkJcyAtIGNhZmVfZGVidWdfYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FmZV9kZnNfcmVnX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkucmVhZCA9IGNhZmVfZGZzX3JlYWRfcmVncywKKwkub3BlbiA9IGNhZmVfZGZzX29wZW4KK307CisKK3N0YXRpYyBzc2l6ZV90IGNhZmVfZGZzX3JlYWRfY2FtKHN0cnVjdCBmaWxlICpmaWxlLAorCQljaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpzID0gY2FmZV9kZWJ1Z19idWY7CisJaW50IG9mZnNldDsKKworCWlmICghIGNhbS0+c2Vuc29yKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmb3IgKG9mZnNldCA9IDB4MDsgb2Zmc2V0IDwgMHg4YTsgb2Zmc2V0KyspCisJeworCQl1OCB2OworCisJCWNhZmVfc21idXNfcmVhZF9kYXRhKGNhbSwgY2FtLT5zZW5zb3ItPmFkZHIsIG9mZnNldCwgJnYpOworCQlzICs9IHNwcmludGYocywgIiUwMng6ICUwMnhcbiIsIG9mZnNldCwgdik7CisJfQorCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCBjYWZlX2RlYnVnX2J1ZiwKKwkJCXMgLSBjYWZlX2RlYnVnX2J1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhZmVfZGZzX2NhbV9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSBjYWZlX2Rmc19yZWFkX2NhbSwKKwkub3BlbiA9IGNhZmVfZGZzX29wZW4KK307CisKKworCitzdGF0aWMgdm9pZCBjYWZlX2Rmc19jYW1fc2V0dXAoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJY2hhciBmbmFtZVs0MF07CisKKwlpZiAoIWNhZmVfZGZzX3Jvb3QpCisJCXJldHVybjsKKwlzcHJpbnRmKGZuYW1lLCAicmVncy0lZCIsIGNhbS0+djRsZGV2Lm1pbm9yKTsKKwljYW0tPmRmc19yZWdzID0gZGVidWdmc19jcmVhdGVfZmlsZShmbmFtZSwgMDQ0NCwgY2FmZV9kZnNfcm9vdCwKKwkJCWNhbSwgJmNhZmVfZGZzX3JlZ19vcHMpOworCXNwcmludGYoZm5hbWUsICJjYW0tJWQiLCBjYW0tPnY0bGRldi5taW5vcik7CisJY2FtLT5kZnNfY2FtX3JlZ3MgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZuYW1lLCAwNDQ0LCBjYWZlX2Rmc19yb290LAorCQkJY2FtLCAmY2FmZV9kZnNfY2FtX29wcyk7Cit9CisKKworc3RhdGljIHZvaWQgY2FmZV9kZnNfY2FtX3NodXRkb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQoreworCWlmICghIElTX0VSUihjYW0tPmRmc19yZWdzKSkKKwkJZGVidWdmc19yZW1vdmUoY2FtLT5kZnNfcmVncyk7CisJaWYgKCEgSVNfRVJSKGNhbS0+ZGZzX2NhbV9yZWdzKSkKKwkJZGVidWdmc19yZW1vdmUoY2FtLT5kZnNfY2FtX3JlZ3MpOworfQorCisjZWxzZQorCisjZGVmaW5lIGNhZmVfZGZzX3NldHVwKCkKKyNkZWZpbmUgY2FmZV9kZnNfc2h1dGRvd24oKQorI2RlZmluZSBjYWZlX2Rmc19jYW1fc2V0dXAoY2FtKQorI2RlZmluZSBjYWZlX2Rmc19jYW1fc2h1dGRvd24oY2FtKQorI2VuZGlmICAgIC8qIENPTkZJR19WSURFT19BRFZfREVCVUcgKi8KKworCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBQQ0kgaW50ZXJmYWNlIHN0dWZmLgorICovCisKK3N0YXRpYyBpbnQgY2FmZV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXUxNiBjbGFzc3dvcmQ7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW07CisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIGNhbWVyYSBoZXJlIC0gd2UnbGwgZ2V0IGNhbGxzIGZvcgorCSAqIHRoZSBvdGhlciBjYWZlIGRldmljZXMgYXMgd2VsbC4KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ0xBU1NfREVWSUNFLCAmY2xhc3N3b3JkKTsKKwlpZiAoY2xhc3N3b3JkICE9IFBDSV9DTEFTU19NVUxUSU1FRElBX1ZJREVPKQorCQlyZXR1cm4gLUVOT0RFVjsKKwkvKgorCSAqIFN0YXJ0IHB1dHRpbmcgdG9nZXRoZXIgb25lIG9mIG91ciBiaWcgY2FtZXJhIHN0cnVjdHVyZXMuCisJICovCisJcmV0ID0gLUVOT01FTTsKKwljYW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2FmZV9jYW1lcmEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2FtID09IE5VTEwpCisJCWdvdG8gb3V0OworCW11dGV4X2luaXQoJmNhbS0+c19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlzcGluX2xvY2tfaW5pdCgmY2FtLT5kZXZfbG9jayk7CisJY2FtLT5zdGF0ZSA9IFNfTk9UUkVBRFk7CisJY2FmZV9zZXRfY29uZmlnX25lZWRlZChjYW0sIDEpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+c21idXNfd2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT5pb3dhaXQpOworCWNhbS0+cGRldiA9IHBkZXY7CisJY2FtLT5waXhfZm9ybWF0ID0gY2FmZV9kZWZfcGl4X2Zvcm1hdDsKKwlJTklUX0xJU1RfSEVBRCgmY2FtLT5kZXZfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhbS0+c2JfYXZhaWwpOworCUlOSVRfTElTVF9IRUFEKCZjYW0tPnNiX2Z1bGwpOworCXRhc2tsZXRfaW5pdCgmY2FtLT5zX3Rhc2tsZXQsIGNhZmVfZnJhbWVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpIGNhbSk7CisJLyoKKwkgKiBHZXQgc2V0IHVwIG9uIHRoZSBQQ0kgYnVzLgorCSAqLworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlyZXQgPSAtRUlPOworCWNhbS0+cmVncyA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoISBjYW0tPnJlZ3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW9yZW1hcCBjYWZlLWNjaWMgcmVnc1xuIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgY2FmZV9pcnEsIElSUUZfU0hBUkVELCAiY2FmZS1jY2ljIiwgY2FtKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9pb3VubWFwOworCWNhZmVfY3Rscl9pbml0KGNhbSk7CisJY2FmZV9jdGxyX3Bvd2VyX3VwKGNhbSk7CisJLyoKKwkgKiBTZXQgdXAgSTJDL1NNQlVTIGNvbW11bmljYXRpb25zCisJICovCisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOyAgLyogYXR0YWNoIGNhbiBkZWFkbG9jayAqLworCXJldCA9IGNhZmVfc21idXNfc2V0dXAoY2FtKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlaXJxOworCS8qCisJICogR2V0IHRoZSB2NGwyIHNldHVwIGRvbmUuCisJICovCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwljYW0tPnY0bGRldiA9IGNhZmVfdjRsX3RlbXBsYXRlOworCWNhbS0+djRsZGV2LmRlYnVnID0gMDsKKy8vCWNhbS0+djRsZGV2LmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTF9BUkc7CisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnY0bGRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3NtYnVzOworCS8qCisJICogSWYgc28gcmVxdWVzdGVkLCB0cnkgdG8gZ2V0IG91ciBETUEgYnVmZmVycyBub3cuCisJICovCisJaWYgKGFsbG9jX2J1ZnNfYXRfbG9hZCkgeworCQlpZiAoY2FmZV9hbGxvY19kbWFfYnVmcyhjYW0sIDEpKQorCQkJY2FtX3dhcm4oY2FtLCAiVW5hYmxlIHRvIGFsbG9jIERNQSBidWZmZXJzIGF0IGxvYWQiCisJCQkJCSIgd2lsbCB0cnkgYWdhaW4gbGF0ZXIuIik7CisJfQorCisJY2FmZV9kZnNfY2FtX3NldHVwKGNhbSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCWNhZmVfYWRkX2RldihjYW0pOworCXJldHVybiAwOworCisgIG91dF9zbWJ1czoKKwljYWZlX3NtYnVzX3NodXRkb3duKGNhbSk7CisgIG91dF9mcmVlaXJxOgorCWNhZmVfY3Rscl9wb3dlcl9kb3duKGNhbSk7CisJZnJlZV9pcnEocGRldi0+aXJxLCBjYW0pOworICBvdXRfaW91bm1hcDoKKwlwY2lfaW91bm1hcChwZGV2LCBjYW0tPnJlZ3MpOworICBvdXRfZnJlZToKKwlrZnJlZShjYW0pOworICBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogU2h1dCBkb3duIGFuIGluaXRpYWxpemVkIGRldmljZQorICovCitzdGF0aWMgdm9pZCBjYWZlX3NodXRkb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQoreworLyogRklYTUU6IE1ha2Ugc3VyZSB3ZSB0YWtlIGNhcmUgb2YgZXZlcnl0aGluZyBoZXJlICovCisJY2FmZV9kZnNfY2FtX3NodXRkb3duKGNhbSk7CisJaWYgKGNhbS0+bl9zYnVmcyA+IDApCisJCS8qIFdoYXQgaWYgdGhleSBhcmUgc3RpbGwgbWFwcGVkPyAgU2hvdWxkbid0IGJlLCBidXQuLi4gKi8KKwkJY2FmZV9mcmVlX3Npb19idWZmZXJzKGNhbSk7CisJY2FmZV9yZW1vdmVfZGV2KGNhbSk7CisJY2FmZV9jdGxyX3N0b3BfZG1hKGNhbSk7CisJY2FmZV9jdGxyX3Bvd2VyX2Rvd24oY2FtKTsKKwljYWZlX3NtYnVzX3NodXRkb3duKGNhbSk7CisJY2FmZV9mcmVlX2RtYV9idWZzKGNhbSk7CisJZnJlZV9pcnEoY2FtLT5wZGV2LT5pcnEsIGNhbSk7CisJcGNpX2lvdW5tYXAoY2FtLT5wZGV2LCBjYW0tPnJlZ3MpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnY0bGRldik7CisJLyoga2ZyZWUoY2FtKTsgZG9uZSBpbiB2NGxfcmVsZWFzZSAoKSAqLworfQorCisKK3N0YXRpYyB2b2lkIGNhZmVfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGNhZmVfZmluZF9ieV9wZGV2KHBkZXYpOworCisJaWYgKGNhbSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInBjaV9yZW1vdmUgb24gdW5rbm93biBwZGV2ICVwXG4iLCBwZGV2KTsKKwkJcmV0dXJuOworCX0KKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCWlmIChjYW0tPnVzZXJzID4gMCkKKwkJY2FtX3dhcm4oY2FtLCAiUmVtb3ZpbmcgYSBkZXZpY2Ugd2l0aCB1c2VycyFcbiIpOworCWNhZmVfc2h1dGRvd24oY2FtKTsKKy8qIE5vIHVubG9jayAtIGl0IG5vIGxvbmdlciBleGlzdHMgKi8KK30KKworCisKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhZmVfaWRzW10gPSB7CisJeyBQQ0lfREVWSUNFKDB4MTE0OCwgMHg0MzQwKSB9LCAvKiBUZW1wb3JhcnkgSUQgb24gZGV2ZWwgYm9hcmQgKi8KKwl7IFBDSV9ERVZJQ0UoMHgxMWFiLCAweDQxMDApIH0sIC8qIEV2ZW50dWFsIHJlYWwgSUQgKi8KKwl7IFBDSV9ERVZJQ0UoMHgxMWFiLCAweDQxMDIpIH0sIC8qIFJlYWxseSBldmVudHVhbCByZWFsIElEICovCisJeyAwLCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY2FmZV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2FmZV9wY2lfZHJpdmVyID0geworCS5uYW1lID0gImNhZmUxMDAwLWNjaWMiLAorCS5pZF90YWJsZSA9IGNhZmVfaWRzLAorCS5wcm9iZSA9IGNhZmVfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBjYWZlX3BjaV9yZW1vdmUsCit9OworCisKKworCitzdGF0aWMgaW50IF9faW5pdCBjYWZlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fTk9USUNFICJNYXJ2ZWxsIE04OEFMUDAxICdDQUZFJyBDYW1lcmEgQ29udHJvbGxlciB2ZXJzaW9uICVkXG4iLAorCQkJQ0FGRV9WRVJTSU9OKTsKKwljYWZlX2Rmc19zZXR1cCgpOworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNhZmVfcGNpX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBjYWZlX2NjaWMgZHJpdmVyXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXJlcXVlc3RfbW9kdWxlKCJvdjc2NzAiKTsgIC8qIEZJWE1FIHdhbnQgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbCAqLworCXJldCA9IDA7CisKKyAgb3V0OgorCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGNhZmVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY2FmZV9wY2lfZHJpdmVyKTsKKwljYWZlX2Rmc19zaHV0ZG93bigpOworfQorCittb2R1bGVfaW5pdChjYWZlX2luaXQpOworbW9kdWxlX2V4aXQoY2FmZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY29tcGF0X2lvY3RsMzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY29tcGF0X2lvY3RsMzIuYwppbmRleCBkODJhNDg4Li5mMDY1YWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NvbXBhdF9pb2N0bDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jb21wYXRfaW9jdGwzMi5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJcmV0ID0gZmlsZS0+Zl9vcC0+dW5sb2NrZWRfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCWVsc2UgaWYgKGZpbGUtPmZfb3AtPmlvY3RsKSB7CiAJCWxvY2tfa2VybmVsKCk7Ci0JCXJldCA9IGZpbGUtPmZfb3AtPmlvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLCBjbWQsIGFyZyk7CisJCXJldCA9IGZpbGUtPmZfb3AtPmlvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl91c2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdXNiLmMKaW5kZXggMjhkYzZhMS4uZDhlOTI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl91c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3VzYi5jCkBAIC02NDAsNiArNjQwLDEwIEBACiAJCWNhbS0+c2J1ZltpXS5kYXRhID0KIAkJICAgIGttYWxsb2MoRlJBTUVTX1BFUl9ERVNDICogRlJBTUVfU0laRV9QRVJfREVTQywgR0ZQX0tFUk5FTCk7CiAJCWlmICghY2FtLT5zYnVmW2ldLmRhdGEpIHsKKwkJCXdoaWxlICgtLWkgPj0gMCkgeworCQkJCWtmcmVlKGNhbS0+c2J1ZltpXS5kYXRhKTsKKwkJCQljYW0tPnNidWZbaV0uZGF0YSA9IE5VTEw7CisJCQl9CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKaW5kZXggNjU3ZTBiOS4uMmY1Y2E3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKQEAgLTc0Miw3ICs3NDIsNiBAQAogCiAJaWYgKG9sZCA9PSBOVUxMIHx8IG9sZC0+d2lkdGggIT0gbmV3LT53aWR0aCB8fCBvbGQtPmhlaWdodCAhPSBuZXctPmhlaWdodCB8fAogCQkJb2xkLT52aWRlb19lbmNvZGluZyAhPSBuZXctPnZpZGVvX2VuY29kaW5nKSB7Ci0JCWludCBpc19zY2FsaW5nOwogCQl1MTYgdyA9IG5ldy0+d2lkdGg7CiAJCXUxNiBoID0gbmV3LT5oZWlnaHQ7CiAKQEAgLTc1MiwyMCArNzUxLDE4IEBACiAJCX0KIAkJZXJyID0gY3gyMzQxeF9hcGkocHJpdiwgZnVuYywgQ1gyMzQxWF9FTkNfU0VUX0ZSQU1FX1NJWkUsIDIsIGgsIHcpOwogCQlpZiAoZXJyKSByZXR1cm4gZXJyOworCX0KIAorCWlmIChuZXctPndpZHRoICE9IDcyMCB8fCBuZXctPmhlaWdodCAhPSAobmV3LT5pc181MGh6ID8gNTc2IDogNDgwKSkgewogCQkvKiBBZGp1c3QgdGVtcG9yYWwgZmlsdGVyIGlmIG5lY2Vzc2FyeS4gVGhlIHByb2JsZW0gd2l0aCB0aGUgdGVtcG9yYWwKIAkJICAgZmlsdGVyIGlzIHRoYXQgaXQgd29ya3Mgd2VsbCB3aXRoIGZ1bGwgcmVzb2x1dGlvbiBjYXB0dXJpbmcsIGJ1dAogCQkgICBub3Qgd2hlbiB0aGUgY2FwdHVyZSB3aW5kb3cgaXMgc2NhbGVkICh0aGUgZmlsdGVyIGludHJvZHVjZXMKLQkJICAgYSBnaG9zdGluZyBlZmZlY3QpLiBTbyBpZiB0aGUgY2FwdHVyZSB3aW5kb3cgY2hhbmdlZCwgYW5kIHRoZXJlIGlzCi0JCSAgIG5vIHVwZGF0ZWQgZmlsdGVyIHZhbHVlLCB0aGVuIHRoZSBmaWx0ZXIgaXMgc2V0IGRlcGVuZGluZyBvbiB3aGV0aGVyCi0JCSAgIHRoZSBuZXcgd2luZG93IGlzIGZ1bGwgcmVzb2x1dGlvbiBvciBub3QuCisJCSAgIGEgZ2hvc3RpbmcgZWZmZWN0KS4gU28gaWYgdGhlIGNhcHR1cmUgd2luZG93IGlzIHNjYWxlZCwgdGhlbgorCQkgICBmb3JjZSB0aGUgZmlsdGVyIHRvIDAuCiAKLQkJICAgRm9yIGZ1bGwgcmVzb2x1dGlvbiBhIHNldHRpbmcgb2YgOCByZWFsbHkgaW1wcm92ZXMgdGhlIHZpZGVvCisJCSAgIEZvciBmdWxsIHJlc29sdXRpb24gdGhlIGZpbHRlciByZWFsbHkgaW1wcm92ZXMgdGhlIHZpZGVvCiAJCSAgIHF1YWxpdHksIGVzcGVjaWFsbHkgaWYgdGhlIG9yaWdpbmFsIHZpZGVvIHF1YWxpdHkgaXMgc3Vib3B0aW1hbC4gKi8KLQkJaXNfc2NhbGluZyA9IG5ldy0+d2lkdGggIT0gNzIwIHx8IG5ldy0+aGVpZ2h0ICE9IChuZXctPmlzXzUwaHogPyA1NzYgOiA0ODApOwotCQlpZiAob2xkICYmIG9sZC0+dmlkZW9fdGVtcG9yYWxfZmlsdGVyID09IHRlbXBvcmFsKSB7Ci0JCQl0ZW1wb3JhbCA9IGlzX3NjYWxpbmcgPyAwIDogODsKLQkJfQorCQl0ZW1wb3JhbCA9IDA7CiAJfQogCiAJaWYgKG9sZCA9PSBOVUxMIHx8IG9sZC0+c3RyZWFtX3R5cGUgIT0gbmV3LT5zdHJlYW1fdHlwZSkgewpAQCAtODY2LDYgKzg2Myw3IEBACiB2b2lkIGN4MjM0MXhfbG9nX3N0YXR1cyhzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcCwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBpc19tcGVnMSA9IHAtPnZpZGVvX2VuY29kaW5nID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzE7CisJaW50IHRlbXBvcmFsID0gcC0+dmlkZW9fdGVtcG9yYWxfZmlsdGVyOwogCiAJLyogU3RyZWFtICovCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN0cmVhbTogJXNcbiIsCkBAIC05MjIsMTAgKzkyMCwxMyBAQAogCQljeDIzNDF4X21lbnVfaXRlbShwLCBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFKSwKIAkJY3gyMzQxeF9tZW51X2l0ZW0ocCwgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFKSwKIAkJcC0+dmlkZW9fc3BhdGlhbF9maWx0ZXIpOworCWlmIChwLT53aWR0aCAhPSA3MjAgfHwgcC0+aGVpZ2h0ICE9IChwLT5pc181MGh6ID8gNTc2IDogNDgwKSkgeworCQl0ZW1wb3JhbCA9IDA7CisJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiBUZW1wb3JhbCBGaWx0ZXI6ICVzLCAlZFxuIiwKIAkJcHJlZml4LAogCQljeDIzNDF4X21lbnVfaXRlbShwLCBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREUpLAotCQlwLT52aWRlb190ZW1wb3JhbF9maWx0ZXIpOworCQl0ZW1wb3JhbCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1lZGlhbiBGaWx0ZXI6ICAgJXMsIEx1bWEgWyVkLCAlZF0sIENocm9tYSBbJWQsICVkXVxuIiwKIAkJcHJlZml4LAogCQljeDIzNDF4X21lbnVfaXRlbShwLCBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKaW5kZXggZjg1ZjIwOC4uY2VkMTNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKQEAgLTEyOCw3ICsxMjgsMTQgQEAKIAkJdXZfbHBmPTE7CiAKIAkJc3JjX2RlY2ltYXRpb249MHgyMWY7Ci0JCWlmIChzdGQgPT0gVjRMMl9TVERfUEFMX00pIHsKKwkJaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfNjApIHsKKwkJCXZibGFuaz0yNjsKKwkJCXZibGFuazY1Nj0yNjsKKwkJCWJ1cnN0PTB4NWI7CisJCQlsdW1hX2xwZj0yOworCQkJY29tYj0weDIwOworCQkJc2M9MHgwYTgyNjM7CisJCX0gZWxzZSBpZiAoc3RkID09IFY0TDJfU1REX1BBTF9NKSB7CiAJCQl2Ymxhbms9MjA7CiAJCQl2Ymxhbms2NTY9MjQ7CiAJCQlidXJzdD0weDYxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZwppbmRleCAwZjlkOTY5Li5iMmE2NmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZwpAQCAtNTMsNiArNTMsNyBAQAogCXNlbGVjdCBEVkJfT1I1MTEzMiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfQ1gyMjcwMiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1RVTkVSX0xHSDA2WEYgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX05YVDIwMFggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0NYMjQxMjMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0lTTDY0MjEgaWYgIURWQl9GRV9DVVNUT01JU0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKaW5kZXggNDY3MzgzMi4uMGNmMDM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKQEAgLTUwLDcgKzUwLDYgQEAKICNkZWZpbmUgZHByaW50ayhsZXZlbCxmbXQsIGFyZy4uLikJaWYgKGRlYnVnID49IGxldmVsKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzLzItYmI6ICIgZm10LCBkZXYtPmNvcmUtPm5hbWUgLCAjIyBhcmcpCiAKLXN0YXRpYyBMSVNUX0hFQUQoY3g4ODAyX2Rldmxpc3QpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtODgyLDcgKzg4MSw3IEBACiAJCQkJICBCTEFDS0JJUkRfTVBFR19DQVBUVVJFLAogCQkJCSAgQkxBQ0tCSVJEX1JBV19CSVRTX05PTkUpOwogCi0JCWN4ODhfZG9faW9jdGwoaW5vZGUsIGZpbGUsIDAsIGRldi0+Y29yZSwgY21kLCBhcmcsIG1wZWdfZG9faW9jdGwpOworCQljeDg4X2RvX2lvY3RsKGlub2RlLCBmaWxlLCAwLCBkZXYtPmNvcmUsIGNtZCwgYXJnLCBjeDg4X2lvY3RsX2hvb2spOwogCiAJCWJsYWNrYmlyZF9pbml0aWFsaXplX2NvZGVjKGRldik7CiAJCWN4ODhfc2V0X3NjYWxlKGRldi0+Y29yZSwgZGV2LT53aWR0aCwgZGV2LT5oZWlnaHQsCkBAIC05MTQsMTEgKzkxMywxNSBAQAogCX0KIAogCWRlZmF1bHQ6Ci0JCXJldHVybiBjeDg4X2RvX2lvY3RsKGlub2RlLCBmaWxlLCAwLCBkZXYtPmNvcmUsIGNtZCwgYXJnLCBtcGVnX2RvX2lvY3RsKTsKKwkJcmV0dXJuIGN4ODhfZG9faW9jdGwoaW5vZGUsIGZpbGUsIDAsIGRldi0+Y29yZSwgY21kLCBhcmcsIGN4ODhfaW9jdGxfaG9vayk7CiAJfQogCXJldHVybiAwOwogfQogCitpbnQgKCpjeDg4X2lvY3RsX2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK3Vuc2lnbmVkIGludCAoKmN4ODhfaW9jdGxfdHJhbnNsYXRvcikodW5zaWduZWQgaW50IGNtZCk7CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbXBlZ190cmFuc2xhdGVfaW9jdGwodW5zaWduZWQgaW50IGNtZCkKIHsKIAlyZXR1cm4gY21kOwpAQCAtOTI3LDMzICs5MzAsNDkgQEAKIHN0YXRpYyBpbnQgbXBlZ19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWNtZCA9IG1wZWdfdHJhbnNsYXRlX2lvY3RsKCBjbWQgKTsKLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBtcGVnX2RvX2lvY3RsKTsKKwljbWQgPSBjeDg4X2lvY3RsX3RyYW5zbGF0b3IoIGNtZCApOworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIGN4ODhfaW9jdGxfaG9vayk7CiB9CiAKIHN0YXRpYyBpbnQgbXBlZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0Jc3RydWN0IGN4ODgwMl9kZXYgKmgsKmRldiA9IE5VTEw7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IE5VTEw7CiAJc3RydWN0IGN4ODgwMl9maCAqZmg7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2ID0gTlVMTDsKKwlpbnQgZXJyOwogCi0JbGlzdF9mb3JfZWFjaChsaXN0LCZjeDg4MDJfZGV2bGlzdCkgewotCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3g4ODAyX2RldiwgZGV2bGlzdCk7Ci0JCWlmIChoLT5tcGVnX2Rldi0+bWlub3IgPT0gbWlub3IpCi0JCQlkZXYgPSBoOwotCX0KLQlpZiAoTlVMTCA9PSBkZXYpCisgICAgICAgZGV2ID0gY3g4ODAyX2dldF9kZXZpY2UoaW5vZGUpOworCisJZHByaW50ayggMSwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChibGFja2JpcmRfaW5pdGlhbGl6ZV9jb2RlYyhkZXYpIDwgMCkKKwkvKiBNYWtlIHN1cmUgd2UgY2FuIGFjcXVpcmUgdGhlIGhhcmR3YXJlICovCisJZHJ2ID0gY3g4ODAyX2dldF9kcml2ZXIoZGV2LCBDWDg4X01QRUdfQkxBQ0tCSVJEKTsKKwlpZiAoZHJ2KSB7CisJCWVyciA9IGRydi0+cmVxdWVzdF9hY3F1aXJlKGRydik7CisJCWlmKGVyciAhPSAwKSB7CisJCQlkcHJpbnRrKDEsIiVzOiBVbmFibGUgdG8gYWNxdWlyZSBoYXJkd2FyZSwgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAoYmxhY2tiaXJkX2luaXRpYWxpemVfY29kZWMoZGV2KSA8IDApIHsKKwkJaWYgKGRydikKKwkJCWRydi0+cmVxdWVzdF9yZWxlYXNlKGRydik7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAlkcHJpbnRrKDEsIm9wZW4gbWlub3I9JWRcbiIsbWlub3IpOwogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJaWYgKGRydikKKwkJCWRydi0+cmVxdWVzdF9yZWxlYXNlKGRydik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ICAgICAgPSBkZXY7CiAKQEAgLTk3NCw2ICs5OTMsOCBAQAogc3RhdGljIGludCBtcGVnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGN4ODgwMl9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2ID0gTlVMTDsKIAogCS8qIGJsYWNrYmlyZF9hcGlfY21kKGZoLT5kZXYsIENYMjM0MVhfRU5DX1NUT1BfQ0FQVFVSRSwgMywgMCwgQkxBQ0tCSVJEX0VORF9OT1csIDAsIDB4MTMpOyAqLwogCWJsYWNrYmlyZF9hcGlfY21kKGZoLT5kZXYsIENYMjM0MVhfRU5DX1NUT1BfQ0FQVFVSRSwgMywgMCwKQEAgLTk5Miw2ICsxMDEzLDE2IEBACiAJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+bXBlZ3EpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJa2ZyZWUoZmgpOworCisJLyogTWFrZSBzdXJlIHdlIHJlbGVhc2UgdGhlIGhhcmR3YXJlICovCisJZGV2ID0gY3g4ODAyX2dldF9kZXZpY2UoaW5vZGUpOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkcnYgPSBjeDg4MDJfZ2V0X2RyaXZlcihkZXYsIENYODhfTVBFR19CTEFDS0JJUkQpOworCWlmIChkcnYpCisJCWRydi0+cmVxdWVzdF9yZWxlYXNlKGRydik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA0Myw2ICsxMDc0LDQ0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisvKiBUaGUgQ1g4ODAyIE1QRUcgQVBJIHdpbGwgY2FsbCB0aGlzIHdoZW4gd2UgY2FuIHVzZSB0aGUgaGFyZHdhcmUgKi8KK3N0YXRpYyBpbnQgY3g4ODAyX2JsYWNrYmlyZF9hZHZpc2VfYWNxdWlyZShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkcnYtPmNvcmU7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGNvcmUtPmJvYXJkKSB7CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgorCQkvKiBCeSBkZWZhdWx0LCBjb3JlIHNldHVwIHdpbGwgbGVhdmUgdGhlIGN4MjI3MDIgb3V0IG9mIHJlc2V0LCBvbiB0aGUgYnVzLgorCQkgKiBXZSBsZWZ0IHRoZSBoYXJkd2FyZSBvbiBwb3dlciB1cCB3aXRoIHRoZSBjeDIyNzAyIGFjdGl2ZS4KKwkJICogV2UncmUgYmVpbmcgZ2l2ZW4gYWNjZXNzIHRvIHJlLWFycmFuZ2UgdGhlIEdQSU9zLgorCQkgKiBUYWtlIHRoZSBidXMgb2ZmIHRoZSBjeDIyNzAyIGFuZCBwdXQgdGhlIGN4MjM0MTYgb24gaXQuCisJCSAqLworCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODApOyAvKiBjeDIyNzAyIGluIHJlc2V0ICovCisJCWN4X3NldChNT19HUDBfSU8sICAgMHgwMDAwMDAwNCk7IC8qIERpc2FibGUgdGhlIGN4MjI3MDIgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT0RFVjsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyogVGhlIENYODgwMiBNUEVHIEFQSSB3aWxsIGNhbGwgdGhpcyB3aGVuIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgaGFyZHdhcmUgKi8KK3N0YXRpYyBpbnQgY3g4ODAyX2JsYWNrYmlyZF9hZHZpc2VfcmVsZWFzZShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkcnYtPmNvcmU7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGNvcmUtPmJvYXJkKSB7CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgorCQkvKiBFeGl0IGxlYXZpbmcgdGhlIGN4MjM0MTYgb24gdGhlIGJ1cyAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PREVWOworCX0KKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgdm9pZCBibGFja2JpcmRfdW5yZWdpc3Rlcl92aWRlbyhzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQogewogCWlmIChkZXYtPm1wZWdfZGV2KSB7CkBAIC0xMDczLDI4ICsxMTQyLDIzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGJsYWNrYmlyZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCitzdGF0aWMgaW50IGN4ODgwMl9ibGFja2JpcmRfcHJvYmUoc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydikKIHsKLQlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2OwotCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlOworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkcnYtPmNvcmU7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGNvcmUtPmR2YmRldjsKIAlpbnQgZXJyOwogCi0JLyogZ2VuZXJhbCBzZXR1cCAqLwotCWNvcmUgPSBjeDg4X2NvcmVfZ2V0KHBjaV9kZXYpOwotCWlmIChOVUxMID09IGNvcmUpCi0JCXJldHVybiAtRUlOVkFMOworCWRwcmludGsoIDEsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkcHJpbnRrKCAxLCAiIC0+YmVpbmcgcHJvYmVkIGJ5IENhcmQ9JWQgTmFtZT0lcywgUENJICUwMng6JTAyeFxuIiwKKwkJY29yZS0+Ym9hcmQsCisJCWNvcmUtPm5hbWUsCisJCWNvcmUtPnBjaV9idXMsCisJCWNvcmUtPnBjaV9zbG90KTsKIAogCWVyciA9IC1FTk9ERVY7CiAJaWYgKCEoY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm1wZWcgJiBDWDg4X01QRUdfQkxBQ0tCSVJEKSkKIAkJZ290byBmYWlsX2NvcmU7CiAKLQllcnIgPSAtRU5PTUVNOwotCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGRldikKLQkJZ290byBmYWlsX2NvcmU7Ci0JZGV2LT5wY2kgPSBwY2lfZGV2OwotCWRldi0+Y29yZSA9IGNvcmU7CiAJZGV2LT53aWR0aCA9IDcyMDsKIAlkZXYtPmhlaWdodCA9IDU3NjsKIAljeDIzNDF4X2ZpbGxfZGVmYXVsdHMoJmRldi0+cGFyYW1zKTsKQEAgLTExMDYsNjQgKzExNzAsMzYgQEAKIAkJZGV2LT5oZWlnaHQgPSA1NzY7CiAJfQogCi0JZXJyID0gY3g4ODAyX2luaXRfY29tbW9uKGRldik7Ci0JaWYgKDAgIT0gZXJyKQotCQlnb3RvIGZhaWxfZnJlZTsKLQogCS8qIGJsYWNrYmlyZCBzdHVmZiAqLwogCXByaW50aygiJXMvMjogY3gyMzQxNiBiYXNlZCBtcGVnIGVuY29kZXIgKGJsYWNrYmlyZCByZWZlcmVuY2UgZGVzaWduKVxuIiwKIAkgICAgICAgY29yZS0+bmFtZSk7CiAJaG9zdF9zZXR1cChkZXYtPmNvcmUpOwogCi0JbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCZjeDg4MDJfZGV2bGlzdCk7CiAJYmxhY2tiaXJkX3JlZ2lzdGVyX3ZpZGVvKGRldik7CiAKIAkvKiBpbml0aWFsIGRldmljZSBjb25maWd1cmF0aW9uOiBuZWVkZWQgPyAqLwogCiAJcmV0dXJuIDA7CiAKLSBmYWlsX2ZyZWU6Ci0Ja2ZyZWUoZGV2KTsKICBmYWlsX2NvcmU6Ci0JY3g4OF9jb3JlX3B1dChjb3JlLHBjaV9kZXYpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBibGFja2JpcmRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQorc3RhdGljIGludCBjeDg4MDJfYmxhY2tiaXJkX3JlbW92ZShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KQogewotCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7Ci0KIAkvKiBibGFja2JpcmQgKi8KLQlibGFja2JpcmRfdW5yZWdpc3Rlcl92aWRlbyhkZXYpOwotCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOworCWJsYWNrYmlyZF91bnJlZ2lzdGVyX3ZpZGVvKGRydi0+Y29yZS0+ZHZiZGV2KTsKIAotCS8qIGNvbW1vbiAqLwotCWN4ODgwMl9maW5pX2NvbW1vbihkZXYpOwotCWN4ODhfY29yZV9wdXQoZGV2LT5jb3JlLGRldi0+cGNpKTsKLQlrZnJlZShkZXYpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3g4ODAyX3BjaV90YmxbXSA9IHsKLQl7Ci0JCS52ZW5kb3IgICAgICAgPSAweDE0ZjEsCi0JCS5kZXZpY2UgICAgICAgPSAweDg4MDIsCi0JCS5zdWJ2ZW5kb3IgICAgPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlICAgID0gUENJX0FOWV9JRCwKLQl9LHsKLQkJLyogLS0tIGVuZCBvZiBsaXN0IC0tLSAqLwotCX0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3g4ODAyX3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYmxhY2tiaXJkX3BjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgICAgID0gImN4ODgtYmxhY2tiaXJkIiwKLQkuaWRfdGFibGUgPSBjeDg4MDJfcGNpX3RibCwKLQkucHJvYmUgICAgPSBibGFja2JpcmRfcHJvYmUsCi0JLnJlbW92ZSAgID0gX19kZXZleGl0X3AoYmxhY2tiaXJkX3JlbW92ZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgID0gY3g4ODAyX3N1c3BlbmRfY29tbW9uLAotCS5yZXN1bWUgICA9IGN4ODgwMl9yZXN1bWVfY29tbW9uLAotI2VuZGlmCitzdGF0aWMgc3RydWN0IGN4ODgwMl9kcml2ZXIgY3g4ODAyX2JsYWNrYmlyZF9kcml2ZXIgPSB7CisJLnR5cGVfaWQJPSBDWDg4X01QRUdfQkxBQ0tCSVJELAorCS5od19hY2Nlc3MJPSBDWDg4MDJfRFJWQ1RMX1NIQVJFRCwKKwkucHJvYmUJCT0gY3g4ODAyX2JsYWNrYmlyZF9wcm9iZSwKKwkucmVtb3ZlCQk9IGN4ODgwMl9ibGFja2JpcmRfcmVtb3ZlLAorCS5hZHZpc2VfYWNxdWlyZQk9IGN4ODgwMl9ibGFja2JpcmRfYWR2aXNlX2FjcXVpcmUsCisJLmFkdmlzZV9yZWxlYXNlCT0gY3g4ODAyX2JsYWNrYmlyZF9hZHZpc2VfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgYmxhY2tiaXJkX2luaXQodm9pZCkKQEAgLTExNzYsMTcgKzEyMTIsMjIgQEAKIAlwcmludGsoS0VSTl9JTkZPICJjeDIzODh4OiBzbmFwc2hvdCBkYXRlICUwNGQtJTAyZC0lMDJkXG4iLAogCSAgICAgICBTTkFQU0hPVC8xMDAwMCwgKFNOQVBTSE9ULzEwMCklMTAwLCBTTkFQU0hPVCUxMDApOwogI2VuZGlmCi0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJsYWNrYmlyZF9wY2lfZHJpdmVyKTsKKwljeDg4X2lvY3RsX2hvb2sgPSBtcGVnX2RvX2lvY3RsOworCWN4ODhfaW9jdGxfdHJhbnNsYXRvciA9IG1wZWdfdHJhbnNsYXRlX2lvY3RsOworCXJldHVybiBjeDg4MDJfcmVnaXN0ZXJfZHJpdmVyKCZjeDg4MDJfYmxhY2tiaXJkX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGJsYWNrYmlyZF9maW5pKHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZibGFja2JpcmRfcGNpX2RyaXZlcik7CisJY3g4ODAyX3VucmVnaXN0ZXJfZHJpdmVyKCZjeDg4MDJfYmxhY2tiaXJkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGJsYWNrYmlyZF9pbml0KTsKIG1vZHVsZV9leGl0KGJsYWNrYmlyZF9maW5pKTsKIAorRVhQT1JUX1NZTUJPTChjeDg4X2lvY3RsX2hvb2spOworRVhQT1JUX1NZTUJPTChjeDg4X2lvY3RsX3RyYW5zbGF0b3IpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IGY3NjRhNTcuLjQzNGI3OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMjgxLDE4ICsyODEsMjIgQEAKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4MDAwMGJkZTIsCisJCQkuZXh0YWRjID0gMSwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweDAwMDBiZGU2LAorCQkJLmV4dGFkYyA9IDEsCiAJCX0sewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweDAwMDBiZGU2LAorCQkJLmV4dGFkYyA9IDEsCiAJCX19LAogCQkucmFkaW8gPSB7CiAJCQkudHlwZSAgID0gQ1g4OF9SQURJTywKIAkJCS5ncGlvMCAgPSAweDAwMDBiZDYyLAorCQkJLmV4dGFkYyA9IDEsCiAJCX0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19CTEFDS0JJUkQsCiAJfSwKQEAgLTM1Myw2ICszNTcsNyBAQAogCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweDAwMDBmZGU2LCAvLyAweDAwMDBmZGE2IEwsUiBSQ0EgYXVkaW8gaW4/CisJCQkuZXh0YWRjID0gMSwKIAkJfX0sCiAJCS5yYWRpbyA9IHsKIAkJCS50eXBlICAgPSBDWDg4X1JBRElPLApAQCAtNTIzLDYgKzUyOCw3IEBACiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKKwkJCS5leHRhZGMgPSAxLAogCQl9fSwKIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0JMQUNLQklSRCwKIAl9LApAQCAtNjQ2LDE4ICs2NTIsMjIgQEAKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4MDAwMDlkODAsCisJCQkuZXh0YWRjID0gMSwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweDAwMDA5ZDc2LAorCQkJLmV4dGFkYyA9IDEsCiAJCX0sewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweDAwMDA5ZDc2LAorCQkJLmV4dGFkYyA9IDEsCiAJCX19LAogCQkucmFkaW8gPSB7CiAJCQkudHlwZSAgID0gQ1g4OF9SQURJTywKIAkJCS5ncGlvMCAgPSAweDAwMDA5ZDAwLAorCQkJLmV4dGFkYyA9IDEsCiAJCX0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19CTEFDS0JJUkQsCiAJfSwKQEAgLTc4NiwyNSArNzk2LDI5IEBACiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKLQkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0JMQUNLQklSRCwKIAkJLmlucHV0ICAgICAgICAgID0ge3sKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4MDAwMGNkNzMsCisJCQkuZXh0YWRjID0gMSwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4MDAwMGNkNzMsCisJCQkuZXh0YWRjID0gMSwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMywKIAkJCS5ncGlvMCAgPSAweDAwMDBjZGIzLAorCQkJLmV4dGFkYyA9IDEsCiAJCX19LAogCQkucmFkaW8gPSB7CiAJCQkudHlwZSAgID0gQ1g4OF9SQURJTywKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4MDAwMGNkZjMsCisJCQkuZXh0YWRjID0gMSwKIAkJfSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0JMQUNLQklSRCwKIAl9LAogCVtDWDg4X0JPQVJEX0tXT1JMRF9WU1RSRUFNX0VYUEVSVF9EVkRdID0gewogCQkgLyogQWxleGFuZGVyIFdvbGQgPGF3b2xkQGJpZ2Zvb3QuY29tPiAqLwpAQCAtMTA1MCw3ICsxMDY0LDYgQEAKIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAogCVtDWDg4X0JPQVJEX0tXT1JMRF9IQVJEV0FSRV9NUEVHX1RWX1hQRVJUXSA9IHsKLQkJLyogRklYTUU6IEF1ZGlvIG5vdCB3b3JraW5nIGZvciBzLXZpZGVvIC8gY29tcG9zaXRlIGlucHV0cy4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIktXb3JsZCBIYXJkd2FyZU1wZWdUViBYUGVydCIsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCkBAIC0xMDY1LDEwICsxMDc4LDEyIEBACiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweDNkZTYsCisJCQkuZXh0YWRjID0gMSwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4M2RlNiwKKwkJCS5leHRhZGMgPSAxLAogCQl9fSwKIAkJLnJhZGlvID0gewogCQkJLnR5cGUgICA9IENYODhfUkFESU8sCkBAIC0xMjUyLDM1ICsxMjY3LDM1IEBACiAJCQkuZ3BpbzAgID0gMHgwNzBiLAogCQl9fSwKIAl9LAotICAgICAgIFtDWDg4X0JPQVJEX1RFX0RUVl8yNTBfT0VNX1NXQU5OXSA9IHsKLQkgICAgICAgLm5hbWUgICAgICAgICAgID0gIlNoZW56aGVuIFR1bmdzdGVuIEFnZXMgVGVjaCBURS1EVFYtMjUwIC8gU3dhbm4gT0VNIiwKLQkgICAgICAgLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAotCSAgICAgICAucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKLQkgICAgICAgLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkgICAgICAgLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkgICAgICAgLmlucHV0ICAgICAgICAgID0ge3sKLQkJICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKLQkJICAgICAgIC52bXV4ICAgPSAwLAotCQkgICAgICAgLmdwaW8wICA9IDB4MDAzZmZmZmYsCi0JCSAgICAgICAuZ3BpbzEgID0gMHgwMGUwMDAwMCwKLQkJICAgICAgIC5ncGlvMiAgPSAweDAwM2ZmZmZmLAotCQkgICAgICAgLmdwaW8zICA9IDB4MDIwMDAwMDAsCi0JICAgICAgIH0sewotCQkgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAotCQkgICAgICAgLnZtdXggICA9IDEsCi0JCSAgICAgICAuZ3BpbzAgID0gMHgwMDNmZmZmZiwKLQkJICAgICAgIC5ncGlvMSAgPSAweDAwZTAwMDAwLAotCQkgICAgICAgLmdwaW8yICA9IDB4MDAzZmZmZmYsCi0JCSAgICAgICAuZ3BpbzMgID0gMHgwMjAwMDAwMCwKKwlbQ1g4OF9CT0FSRF9URV9EVFZfMjUwX09FTV9TV0FOTl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJTaGVuemhlbiBUdW5nc3RlbiBBZ2VzIFRlY2ggVEUtRFRWLTI1MCAvIFN3YW5uIE9FTSIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDAwM2ZmZmZmLAorCQkJLmdwaW8xICA9IDB4MDBlMDAwMDAsCisJCQkuZ3BpbzIgID0gMHgwMDNmZmZmZiwKKwkJCS5ncGlvMyAgPSAweDAyMDAwMDAwLAogCQl9LHsKLQkJICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAotCQkgICAgICAgLnZtdXggICA9IDIsCi0JCSAgICAgICAuZ3BpbzAgID0gMHgwMDNmZmZmZiwKLQkJICAgICAgIC5ncGlvMSAgPSAweDAwZTAwMDAwLAotCQkgICAgICAgLmdwaW8yICA9IDB4MDAzZmZmZmYsCi0JCSAgICAgICAuZ3BpbzMgID0gMHgwMjAwMDAwMCwKLQkgICAgICAgfX0sCi0gICAgICAgfSwKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4MDAzZmZmZmYsCisJCQkuZ3BpbzEgID0gMHgwMGUwMDAwMCwKKwkJCS5ncGlvMiAgPSAweDAwM2ZmZmZmLAorCQkJLmdwaW8zICA9IDB4MDIwMDAwMDAsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDAwM2ZmZmZmLAorCQkJLmdwaW8xICA9IDB4MDBlMDAwMDAsCisJCQkuZ3BpbzIgID0gMHgwMDNmZmZmZiwKKwkJCS5ncGlvMyAgPSAweDAyMDAwMDAwLAorCQl9fSwKKwl9LAogCVtDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIxMzAwIERWQi1UL0h5YnJpZCBNUEVHIEVuY29kZXIiLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMsCkBAIC0xMjkzLDE3ICsxMzA4LDIwIEBACiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKIAkJCS5ncGlvMAk9IDB4ZTc4MCwKKwkJCS5leHRhZGMgPSAxLAogCQl9LHsKIAkJCS50eXBlCT0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eAk9IDEsCiAJCQkuZ3BpbzAJPSAweGU3ODAsCisJCQkuZXh0YWRjID0gMSwKIAkJfSx7CiAJCQkudHlwZQk9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eAk9IDIsCiAJCQkuZ3BpbzAJPSAweGU3ODAsCisJCQkuZXh0YWRjID0gMSwKIAkJfX0sCiAJCS8qIGZpeG1lOiBBZGQgcmFkaW8gc3VwcG9ydCAqLwotCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCIHwgQ1g4OF9NUEVHX0JMQUNLQklSRCwKIAl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDg4X2Jjb3VudCA9IEFSUkFZX1NJWkUoY3g4OF9ib2FyZHMpOwpAQCAtMTUxMyw2ICsxNTMxLDEwIEBACiAJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDE3ZGUsCiAJCS5zdWJkZXZpY2UgPSAweDA4NDAsCisJICAgICAgIC5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0tXT1JMRF9IQVJEV0FSRV9NUEVHX1RWX1hQRVJULAorICAgICAgIH0seworCSAgICAgICAuc3VidmVuZG9yID0gMHgxNDIxLAorCSAgICAgICAuc3ViZGV2aWNlID0gMHgwMzA1LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9LV09STERfSEFSRFdBUkVfTVBFR19UVl9YUEVSVCwKIAl9LHsKIAkJLnN1YnZlbmRvciA9IDB4MThhYywKQEAgLTE2MTAsNyArMTYzMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogc29tZSBsZWFkdGVrIHNwZWNpZmljIHN0dWZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGxlYWR0ZWtfZWVwcm9tKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHU4ICplZXByb21fZGF0YSkKK3N0YXRpYyB2b2lkIGxlYWR0ZWtfZWVwcm9tKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHU4ICplZXByb21fZGF0YSkKIHsKIAkvKiBUaGlzIGlzIGp1c3QgZm9yIHRoZSAiV2luZmFzdCAyMDAwWFAgRXhwZXJ0IiBib2FyZCBBVE07IEkgZG9uJ3QgaGF2ZSBkYXRhIG9uCiAJICogYW55IG90aGVycy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwppbmRleCA0YjY1NWYyLi4xODk5NzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCkBAIC02MzMsMTIgKzYzMywxMiBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGlubGluZSBub3JtX3N3aWR0aChzdHJ1Y3QgY3g4OF90dm5vcm0gKm5vcm0pCiB7Ci0JcmV0dXJuIChub3JtLT5pZCAmIFY0TDJfU1REXzYyNV81MCkgPyA5MjIgOiA3NTQ7CisJcmV0dXJuIChub3JtLT5pZCAmIChWNEwyX1NURF9NTiAmIH5WNEwyX1NURF9QQUxfTmMpKSA/IDc1NCA6IDkyMjsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV9oZGVsYXkoc3RydWN0IGN4ODhfdHZub3JtICpub3JtKQogewotCXJldHVybiAobm9ybS0+aWQgJiBWNEwyX1NURF82MjVfNTApID8gMTg2IDogMTM1OworCXJldHVybiAobm9ybS0+aWQgJiAoVjRMMl9TVERfTU4gJiB+VjRMMl9TVERfUEFMX05jKSkgPyAxMzUgOiAxODY7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5saW5lIG5vcm1fdmRlbGF5KHN0cnVjdCBjeDg4X3R2bm9ybSAqbm9ybSkKQEAgLTY0OCwyNCArNjQ4LDMzIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5saW5lIG5vcm1fZnNjOChzdHJ1Y3QgY3g4OF90dm5vcm0gKm5vcm0pCiB7Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBudHNjID0gMjg2MzYzNjA7Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwYWwgID0gMzU0Njg5NTA7Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwYWxtICA9IDI4NjA0ODkyOwotCiAJaWYgKG5vcm0tPmlkICYgVjRMMl9TVERfUEFMX00pCi0JCXJldHVybiBwYWxtOworCQlyZXR1cm4gMjg2MDQ4OTI7ICAgICAgLy8gMy41NzU2MTEgTUh6CiAKLQlyZXR1cm4gKG5vcm0tPmlkICYgVjRMMl9TVERfNjI1XzUwKSA/IHBhbCA6IG50c2M7CisJaWYgKG5vcm0tPmlkICYgKFY0TDJfU1REX1BBTF9OYykpCisJCXJldHVybiAyODY1NjQ0ODsgICAgICAvLyAzLjU4MjA1NiBNSHoKKworCWlmIChub3JtLT5pZCAmIFY0TDJfU1REX05UU0MpIC8vIEFsbCBOVFNDL00gYW5kIHZhcmlhbnRzCisJCXJldHVybiAyODYzNjM2MDsgICAgICAvLyAzLjU3OTU0NTQ1IE1IeiArLy0gMTAgSHoKKworCS8qIFNFQ0FNIGhhdmUgYWxzbyBkaWZmZXJlbnQgc3ViIGNhcnJpZXIgZm9yIGNocm9tYSwKKwkgICBidXQgc3RlcF9kYiBhbmQgc3RlcF9kciwgYXQgY3g4OF9zZXRfdHZub3JtIGFscmVhZHkgaGFuZGxlcyB0aGF0LgorCisJICAgVGhlIHNhbWUgRlNDIGFwcGxpZXMgdG8gUEFML0JHREtJSCwgUEFMLzYwLCBOVFNDLzQuNDMgYW5kIFBBTC9OCisJICovCisKKwlyZXR1cm4gMzU0Njg5NTA7ICAgICAgLy8gNC40MzM2MTg3NSBNSHogKy8tIDUgSHoKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV9odG90YWwoc3RydWN0IGN4ODhfdHZub3JtICpub3JtKQogewotCS8qIFNob3VsZCBhbHdheXMgYmUgTGluZSBEcmF3IFRpbWUgLyAoNCpGU0MpICovCiAKLQlpZiAobm9ybS0+aWQgJiBWNEwyX1NURF9QQUxfTSkKLQkJcmV0dXJuIDkwOTsKKwl1bnNpZ25lZCBpbnQgZnNjND1ub3JtX2ZzYzgobm9ybSkvMjsKIAotCXJldHVybiAobm9ybS0+aWQgJiBWNEwyX1NURF82MjVfNTApID8gMTEzNSA6IDkxMDsKKwkvKiByZXR1cm5zIDQqRlNDIC8gdnRvdGFsIC8gZnJhbWVzIHBlciBzZWNvbmRzICovCisJcmV0dXJuIChub3JtLT5pZCAmIFY0TDJfU1REXzYyNV81MCkgPworCQkJCSgoZnNjNCszMTIpLzYyNSsxMikvMjUgOgorCQkJCSgoZnNjNCsyNjIpLzUyNSoxMDAxKzE1MDAwKS8zMDAwMDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV92YmlwYWNrKHN0cnVjdCBjeDg4X3R2bm9ybSAqbm9ybSkKQEAgLTY5Miw3ICs3MDEsNyBAQAogCXZhbHVlICY9IDB4M2ZlOwogCWN4X3dyaXRlKE1PX0hERUxBWV9FVkVOLCAgdmFsdWUpOwogCWN4X3dyaXRlKE1PX0hERUxBWV9PREQsICAgdmFsdWUpOwotCWRwcmludGsoMSwic2V0X3NjYWxlOiBoZGVsYXkgIDB4JTA0eFxuIiwgdmFsdWUpOworCWRwcmludGsoMSwic2V0X3NjYWxlOiBoZGVsYXkgIDB4JTA0eCAod2lkdGggJWQpXG4iLCB2YWx1ZSxzd2lkdGgpOwogCiAJdmFsdWUgPSAoc3dpZHRoICogNDA5NiAvIHdpZHRoKSAtIDQwOTY7CiAJY3hfd3JpdGUoTU9fSFNDQUxFX0VWRU4sICB2YWx1ZSk7CkBAIC0xMTUzLDcgKzExNjIsNyBAQAogCW11dGV4X2xvY2soJmRldmxpc3QpOwogCWN4ODhfaXJfZmluaShjb3JlKTsKIAlpZiAoMCA9PSBjb3JlLT5pMmNfcmMpCi0JCWkyY19iaXRfZGVsX2J1cygmY29yZS0+aTJjX2FkYXApOworCQlpMmNfZGVsX2FkYXB0ZXIoJmNvcmUtPmkyY19hZGFwKTsKIAlsaXN0X2RlbCgmY29yZS0+ZGV2bGlzdCk7CiAJaW91bm1hcChjb3JlLT5sbW1pbyk7CiAJY3g4OF9kZXZjb3VudC0tOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCAwZWYxM2U3Li44YjIwMzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgImN4MjI3MDIuaCIKICNpbmNsdWRlICJvcjUxMTMyLmgiCiAjaW5jbHVkZSAibGdkdDMzMHguaCIKLSNpbmNsdWRlICJsZ19oMDZ4Zi5oIgorI2luY2x1ZGUgImxnaDA2eGYuaCIKICNpbmNsdWRlICJueHQyMDB4LmgiCiAjaW5jbHVkZSAiY3gyNDEyMy5oIgogI2luY2x1ZGUgImlzbDY0MjEuaCIKQEAgLTU3LDcgKzU3LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbZHZiXSIpOwogCiAjZGVmaW5lIGRwcmludGsobGV2ZWwsZm10LCBhcmcuLi4pCWlmIChkZWJ1ZyA+PSBsZXZlbCkgXAotCXByaW50ayhLRVJOX0RFQlVHICIlcy8yLWR2YjogIiBmbXQsIGRldi0+Y29yZS0+bmFtZSAsICMjIGFyZykKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMvMi1kdmI6ICIgZm10LCBjb3JlLT5uYW1lLCAjIyBhcmcpCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC03NCw4ICs3NCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHZiX2J1Zl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCi0JCQkgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCitzdGF0aWMgaW50IGR2Yl9idWZfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogewogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBxLT5wcml2X2RhdGE7CiAJcmV0dXJuIGN4ODgwMl9idWZfcHJlcGFyZShxLCBkZXYsIChzdHJ1Y3QgY3g4OF9idWZmZXIqKXZiLGZpZWxkKTsKQEAgLTg3LDcgKzg3LDggQEAKIAljeDg4MDJfYnVmX3F1ZXVlKGRldiwgKHN0cnVjdCBjeDg4X2J1ZmZlciopdmIpOwogfQogCi1zdGF0aWMgdm9pZCBkdmJfYnVmX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3N0YXRpYyB2b2lkIGR2Yl9idWZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7CiAJY3g4OF9mcmVlX2J1ZmZlcihxLCAoc3RydWN0IGN4ODhfYnVmZmVyKil2Yik7CiB9CkBAIC0xMDAsNiArMTAxLDI2IEBACiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBjeDg4X2R2Yl9idXNfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGFjcXVpcmUpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2ID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKworCWRydiA9IGN4ODgwMl9nZXRfZHJpdmVyKGRldiwgQ1g4OF9NUEVHX0RWQik7CisJaWYgKGRydikgeworCQlpZiAoYWNxdWlyZSkKKwkJCXJldCA9IGRydi0+cmVxdWVzdF9hY3F1aXJlKGRydik7CisJCWVsc2UKKwkJCXJldCA9IGRydi0+cmVxdWVzdF9yZWxlYXNlKGRydik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKIHN0YXRpYyBpbnQgZHZpY29fZnVzaW9uaGR0dl9kZW1vZF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogewogCXN0YXRpYyB1OCBjbG9ja19jb25maWcgW10gID0geyBDTE9DS19DVEwsICAweDM4LCAweDM5IH07CkBAIC0yNjgsMzUgKzI4OSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZHZpY29faHlicmlkX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCi0JCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKLXsKLQl1OCBwbGxidWZbNF07Ci0Jc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPQotCQl7IC5hZGRyID0gZGV2LT5jb3JlLT5wbGxfYWRkciwgLmZsYWdzID0gMCwKLQkJICAuYnVmID0gcGxsYnVmLCAubGVuID0gNCB9OwotCWludCBlcnI7Ci0KLQlkdmJfcGxsX2NvbmZpZ3VyZShkZXYtPmNvcmUtPnBsbF9kZXNjLCBwbGxidWYsCi0JCQkgIHBhcmFtcy0+ZnJlcXVlbmN5LAotCQkJICBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpOwotCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpZiAoKGVyciA9IGkyY190cmFuc2ZlcigmZGV2LT5jb3JlLT5pMmNfYWRhcCwgJm1zZywgMSkpICE9IDEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3g4OC1kdmI6ICVzIGVycm9yICIKLQkJICAgICAgICIoYWRkciAlMDJ4IDwtICUwMngsIGVyciA9ICVpKVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgcGxsYnVmWzBdLCBwbGxidWZbMV0sIGVycik7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJZWxzZQotCQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgZHZpY29fZnVzaW9uaGR0dl9oeWJyaWQgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDBmLAogCS5ub190dW5lciAgICAgID0gMSwKQEAgLTMxMSwyOCArMzAzLDEyIEBACiAJLm91dHB1dF9tb2RlICAgPSBDWDIyNzAyX1NFUklBTF9PVVRQVVQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGN4MjI3MDJfY29uZmlnIGhhdXBwYXVnZV9ub3ZhdF9jb25maWcgPSB7Ci0JLmRlbW9kX2FkZHJlc3MgPSAweDQzLAotCS5vdXRwdXRfbW9kZSAgID0gQ1gyMjcwMl9TRVJJQUxfT1VUUFVULAotfTsKLQotc3RhdGljIHN0cnVjdCBjeDIyNzAyX2NvbmZpZyBoYXVwcGF1Z2VfaHZyMTEwMF9jb25maWcgPSB7CitzdGF0aWMgc3RydWN0IGN4MjI3MDJfY29uZmlnIGhhdXBwYXVnZV9odnJfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHg2MywKIAkub3V0cHV0X21vZGUgICA9IENYMjI3MDJfU0VSSUFMX09VVFBVVCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgaGF1cHBhdWdlX2h2cjEzMDBfY29uZmlnID0gewotCS5kZW1vZF9hZGRyZXNzID0gMHg2MywKLQkub3V0cHV0X21vZGUgICA9IENYMjI3MDJfU0VSSUFMX09VVFBVVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgaGF1cHBhdWdlX2h2cjMwMDBfY29uZmlnID0gewotCS5kZW1vZF9hZGRyZXNzID0gMHg2MywKLQkub3V0cHV0X21vZGUgPSBDWDIyNzAyX1NFUklBTF9PVVRQVVQsCi19OwotCi1zdGF0aWMgaW50IG9yNTExMzJfc2V0X3RzX3BhcmFtKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAotCQkJCWludCBpc19wdW5jdHVyZWQpCitzdGF0aWMgaW50IG9yNTExMzJfc2V0X3RzX3BhcmFtKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgaXNfcHVuY3R1cmVkKQogewogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY9IGZlLT5kdmItPnByaXY7CiAJZGV2LT50c19nZW5fY250cmwgPSBpc19wdW5jdHVyZWQgPyAweDA0IDogMHgwMDsKQEAgLTM0NCw1MCArMzIwLDYgQEAKIAkuc2V0X3RzX3BhcmFtcyA9IG9yNTExMzJfc2V0X3RzX3BhcmFtLAogfTsKIAotc3RhdGljIGludCBsZ2R0MzMwMl90dW5lcl9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAotCQkJCSAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpCi17Ci0JLyogRklYTUUgbWFrZSB0aGlzIHJvdXRpbmUgdXNlIHRoZSB0dW5lci1zaW1wbGUgY29kZS4KLQkgKiBJdCBjb3VsZCBwcm9iYWJseSBiZSBzaGFyZWQgd2l0aCBhIG51bWJlciBvZiBBVFNDCi0JICogZnJvbnRlbmRzLiBNYW55IHNoYXJlIHRoZSBzYW1lIHR1bmVyIHdpdGggYW5hbG9nIFRWLiAqLwotCi0Jc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKLQlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOwotCXU4IGJ1Zls0XTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPQotCQl7IC5hZGRyID0gZGV2LT5jb3JlLT5wbGxfYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDQgfTsKLQlpbnQgZXJyOwotCi0JZHZiX3BsbF9jb25maWd1cmUoY29yZS0+cGxsX2Rlc2MsIGJ1ZiwgcGFyYW1zLT5mcmVxdWVuY3ksIDApOwotCWRwcmludGsoMSwgIiVzOiB0dW5lciBhdCAweCUwMnggYnl0ZXM6IDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeFxuIiwKLQkJX19GVU5DVElPTl9fLCBtc2cuYWRkciwgYnVmWzBdLGJ1ZlsxXSxidWZbMl0sYnVmWzNdKTsKLQotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoJmNvcmUtPmkyY19hZGFwLCAmbXNnLCAxKSkgIT0gMSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjeDg4LWR2YjogJXMgZXJyb3IgIgotCQkgICAgICAgIihhZGRyICUwMnggPC0gJTAyeCwgZXJyID0gJWkpXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBidWZbMF0sIGJ1ZlsxXSwgZXJyKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQllbHNlCi0JCQlyZXR1cm4gLUVSRU1PVEVJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGdkdDMzMDNfdHVuZXJfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKLQkJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQotewotCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY9IGZlLT5kdmItPnByaXY7Ci0Jc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKLQotCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzIChkZXYtPmNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKLQotCXJldHVybiBsZ19oMDZ4Zl9wbGxfc2V0KGZlLCAmY29yZS0+aTJjX2FkYXAsIHBhcmFtcyk7Ci19Ci0KIHN0YXRpYyBpbnQgbGdkdDMzMHhfcGxsX3JmX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGluZGV4KQogewogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY9IGZlLT5kdmItPnByaXY7CkBAIC00MzIsOCArMzY0LDcgQEAKIAkuc2V0X3RzX3BhcmFtcyA9IGxnZHQzMzB4X3NldF90c19wYXJhbSwKIH07CiAKLXN0YXRpYyBpbnQgbnh0MjAweF9zZXRfdHNfcGFyYW0oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCi0JCQkJaW50IGlzX3B1bmN0dXJlZCkKK3N0YXRpYyBpbnQgbnh0MjAweF9zZXRfdHNfcGFyYW0oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBpc19wdW5jdHVyZWQpCiB7CiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKIAlkZXYtPnRzX2dlbl9jbnRybCA9IGlzX3B1bmN0dXJlZCA/IDB4MDQgOiAweDAwOwpAQCAtNDY5LDExICs0MDAsMTAgQEAKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2PSBmZS0+ZHZiLT5wcml2OwogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CiAKLQlpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV9PRkYpIHsKKwlpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV9PRkYpCiAJCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgwMDAwMDZmYik7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgwMDAwMDZmOSk7Ci0JfQogCiAJaWYgKGNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UpCiAJCXJldHVybiBjb3JlLT5wcmV2X3NldF92b2x0YWdlKGZlLCB2b2x0YWdlKTsKQEAgLTUyMiw3ICs0NTIsNyBAQAogCXN3aXRjaCAoZGV2LT5jb3JlLT5ib2FyZCkgewogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfRFZCX1QxOgogCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCi0JCQkJCSAgICAgICAmaGF1cHBhdWdlX25vdmF0X2NvbmZpZywKKwkJCQkJICAgICAgICZjb25uZXhhbnRfcmVmYm9hcmRfY29uZmlnLAogCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewogCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCkBAIC01NDcsMzIgKzQ3NywxMSBAQAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDBMUDoKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAotCQkJCQkgICAgICAgJmhhdXBwYXVnZV9odnIxMTAwX2NvbmZpZywKKwkJCQkJICAgICAgICZoYXVwcGF1Z2VfaHZyX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYxLAotCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwLAotCQkJCSAgICZkdmJfcGxsX2ZtZDEyMTZtZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCi0JCQkJCSAgICAgICAmaGF1cHBhdWdlX2h2cjEzMDBfY29uZmlnLAotCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCi0JCQkJICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsCi0JCQkJICAgJmR2Yl9wbGxfZm1kMTIxNm1lKTsKLQkJfQotCQlicmVhazsKLQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKLQkJCQkJICAgICAgICZoYXVwcGF1Z2VfaHZyMzAwMF9jb25maWcsCi0JCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKLQkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCwKLQkJCQkgICAmZHZiX3BsbF9mbWQxMjE2bWUpOworCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwLCAmZHZiX3BsbF9mbWQxMjE2bWUpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX1BMVVM6CkBAIC02NDcsMTggKzU1NiwxNyBAQAogI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0hZQlJJRDoKLQkJZGV2LT5jb3JlLT5wbGxfYWRkciA9IDB4NjE7Ci0JCWRldi0+Y29yZS0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90aG9tc29uX2ZlNjYwMDsKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfaHlicmlkLAogCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGR2aWNvX2h5YnJpZF90dW5lcl9zZXRfcGFyYW1zOworCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCisJCQkJICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsCisJCQkJICAgJmR2Yl9wbGxfdGhvbXNvbl9mZTY2MDApOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gob3I1MTEzMl9hdHRhY2gsCi0JCQkJCSAgICAgICAmcGNoZHR2X2hkMzAwMCwKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG9yNTExMzJfYXR0YWNoLCAmcGNoZHR2X2hkMzAwMCwKIAkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYxLApAQCAtNjc5LDEzICs1ODcsMTMgQEAKIAogCQkvKiBTZWxlY3QgUkYgY29ubmVjdG9yIGNhbGxiYWNrICovCiAJCWZ1c2lvbmhkdHZfM19nb2xkLnBsbF9yZl9zZXQgPSBsZ2R0MzMweF9wbGxfcmZfc2V0OwotCQlkZXYtPmNvcmUtPnBsbF9hZGRyID0gMHg2MTsKLQkJZGV2LT5jb3JlLT5wbGxfZGVzYyA9ICZkdmJfcGxsX21pY3JvdHVuZV80MDQyOwogCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmZ1c2lvbmhkdHZfM19nb2xkLAogCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGxnZHQzMzAyX3R1bmVyX3NldF9wYXJhbXM7CisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCwKKwkJCQkgICAmZHZiX3BsbF9taWNyb3R1bmVfNDA0Mik7CiAJCX0KIAkJfQogCQlicmVhazsKQEAgLTY5OSwxMyArNjA3LDEzIEBACiAJCW1kZWxheSgxMDApOwogCQljeF9zZXQoTU9fR1AwX0lPLCA5KTsKIAkJbWRlbGF5KDIwMCk7Ci0JCWRldi0+Y29yZS0+cGxsX2FkZHIgPSAweDYxOwotCQlkZXYtPmNvcmUtPnBsbF9kZXNjID0gJmR2Yl9wbGxfdGhvbXNvbl9kdHQ3NjF4OwogCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmZ1c2lvbmhkdHZfM19nb2xkLAogCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGxnZHQzMzAyX3R1bmVyX3NldF9wYXJhbXM7CisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCwKKwkJCQkgICAmZHZiX3BsbF90aG9tc29uX2R0dDc2MXgpOwogCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC03MjMsNyArNjMxLDggQEAKIAkJCQkJICAgICAgICZmdXNpb25oZHR2XzVfZ29sZCwKIAkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBsZ2R0MzMwM190dW5lcl9zZXRfcGFyYW1zOworCQkJZHZiX2F0dGFjaChsZ2gwNnhmX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQkJICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC03NDEsNyArNjUwLDggQEAKIAkJCQkJICAgICAgICZwY2hkdHZfaGQ1NTAwLAogCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGxnZHQzMzAzX3R1bmVyX3NldF9wYXJhbXM7CisJCQlkdmJfYXR0YWNoKGxnaDA2eGZfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCX0KIAkJfQogCQlicmVhazsKQEAgLTc4Miw2ICs2OTIsMjQgQEAKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBnZW5pYXRlY2hfZHZic19zZXRfdm9sdGFnZTsKIAkJfQogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjEzMDA6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJCQkJICAgICAgICZoYXVwcGF1Z2VfaHZyX2NvbmZpZywKKwkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYxLAorCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwLCAmZHZiX3BsbF9mbWQxMjE2bWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQkJCQkgICAgICAgJmhhdXBwYXVnZV9odnJfY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCisJCQkJICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsICZkdmJfcGxsX2ZtZDEyMTZtZSk7CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKCIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAogCQkgICAgICAgZGV2LT5jb3JlLT5uYW1lKTsKQEAgLTc5Niw2ICs3MjQsOCBAQAogCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmluZm8uZnJlcXVlbmN5X21pbiA9IGRldi0+Y29yZS0+cGxsX2Rlc2MtPm1pbjsKIAkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pbmZvLmZyZXF1ZW5jeV9tYXggPSBkZXYtPmNvcmUtPnBsbF9kZXNjLT5tYXg7CiAJfQorCS8qIEVuc3VyZSBhbGwgZnJvbnRlbmRzIG5lZ290aWF0ZSBidXMgYWNjZXNzICovCisJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50c19idXNfY3RybCA9IGN4ODhfZHZiX2J1c19jdHJsOwogCiAJLyogUHV0IHRoZSBhbmFsb2cgZGVjb2RlciBpbiBzdGFuZGJ5IHRvIGtlZXAgaXQgcXVpZXQgKi8KIAljeDg4X2NhbGxfaTJjX2NsaWVudHMgKGRldi0+Y29yZSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOwpAQCAtODA2LDM3ICs3MzYsNjcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgZHZiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCisvKiBDWDg4MDIgTVBFRyAtPiBtaW5pIGRyaXZlciAtIFdlIGhhdmUgYmVlbiBnaXZlbiB0aGUgaGFyZHdhcmUgKi8KK3N0YXRpYyBpbnQgY3g4ODAyX2R2Yl9hZHZpc2VfYWNxdWlyZShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KQogewotCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY7Ci0Jc3RydWN0IGN4ODhfY29yZSAgKmNvcmU7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRydi0+Y29yZTsKKwlpbnQgZXJyID0gMDsKKwlkcHJpbnRrKCAxLCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKGNvcmUtPmJvYXJkKSB7CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgorCQkvKiBXZSBhcnJpdmUgaGVyZSB3aXRoIGVpdGhlciB0aGUgY3gyMzQxNiBvciB0aGUgY3gyMjcwMgorCQkgKiBvbiB0aGUgYnVzLiBUYWtlIHRoZSBidXMgZnJvbSB0aGUgY3gyMzQxNiBhbmQgZW5hYmxlIHRoZQorCQkgKiBjeDIyNzAyIGRlbW9kCisJCSAqLworCQljeF9zZXQoTU9fR1AwX0lPLCAgIDB4MDAwMDAwODApOyAvKiBjeDIyNzAyIG91dCBvZiByZXNldCBhbmQgZW5hYmxlICovCisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDAwNCk7CisJCXVkZWxheSgxMDAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT0RFVjsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyogQ1g4ODAyIE1QRUcgLT4gbWluaSBkcml2ZXIgLSBXZSBubyBsb25nZXIgaGF2ZSB0aGUgaGFyZHdhcmUgKi8KK3N0YXRpYyBpbnQgY3g4ODAyX2R2Yl9hZHZpc2VfcmVsZWFzZShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkcnYtPmNvcmU7CisJaW50IGVyciA9IDA7CisJZHByaW50ayggMSwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc3dpdGNoIChjb3JlLT5ib2FyZCkgeworCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTMwMDoKKwkJLyogRG8gTm90aGluZywgbGVhdmUgdGhlIGN4MjI3MDIgb24gdGhlIGJ1cy4gKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT0RFVjsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjeDg4MDJfZHZiX3Byb2JlKHN0cnVjdCBjeDg4MDJfZHJpdmVyICpkcnYpCit7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRydi0+Y29yZTsKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZHJ2LT5jb3JlLT5kdmJkZXY7CiAJaW50IGVycjsKIAotCS8qIGdlbmVyYWwgc2V0dXAgKi8KLQljb3JlID0gY3g4OF9jb3JlX2dldChwY2lfZGV2KTsKLQlpZiAoTlVMTCA9PSBjb3JlKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlkcHJpbnRrKCAxLCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZHByaW50ayggMSwgIiAtPmJlaW5nIHByb2JlZCBieSBDYXJkPSVkIE5hbWU9JXMsIFBDSSAlMDJ4OiUwMnhcbiIsCisJCWNvcmUtPmJvYXJkLAorCQljb3JlLT5uYW1lLAorCQljb3JlLT5wY2lfYnVzLAorCQljb3JlLT5wY2lfc2xvdCk7CiAKIAllcnIgPSAtRU5PREVWOwogCWlmICghKGN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5tcGVnICYgQ1g4OF9NUEVHX0RWQikpCiAJCWdvdG8gZmFpbF9jb3JlOwogCi0JZXJyID0gLUVOT01FTTsKLQlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSxHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBkZXYpCi0JCWdvdG8gZmFpbF9jb3JlOwotCWRldi0+cGNpID0gcGNpX2RldjsKLQlkZXYtPmNvcmUgPSBjb3JlOwotCi0JZXJyID0gY3g4ODAyX2luaXRfY29tbW9uKGRldik7Ci0JaWYgKDAgIT0gZXJyKQotCQlnb3RvIGZhaWxfZnJlZTsKLQogI2lmZGVmIEhBVkVfVlAzMDU0X0kyQwogCWVyciA9IHZwMzA1NF9pMmNfcHJvYmUoZGV2KTsKIAlpZiAoMCAhPSBlcnIpCi0JCWdvdG8gZmFpbF9mcmVlOworCQlnb3RvIGZhaWxfY29yZTsKICNlbmRpZgogCiAJLyogZHZiIHN0dWZmICovCkBAIC04NDgsMjggKzgwOCwxNiBAQAogCQkJICAgIHNpemVvZihzdHJ1Y3QgY3g4OF9idWZmZXIpLAogCQkJICAgIGRldik7CiAJZXJyID0gZHZiX3JlZ2lzdGVyKGRldik7Ci0JaWYgKDAgIT0gZXJyKQotCQlnb3RvIGZhaWxfZmluaTsKKwlpZiAoZXJyICE9IDApCisJCXByaW50aygiJXMgZHZiX3JlZ2lzdGVyIGZhaWxlZCBlcnIgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBlcnIpOwogCi0JLyogTWFpbnRhaW4gYSByZWZlcmVuY2UgdG8gY3g4OC12aWRlbyBjYW4gcXVlcnkgdGhlIDg4MDIgZGV2aWNlLiAqLwotCWNvcmUtPmR2YmRldiA9IGRldjsKLQlyZXR1cm4gMDsKLQotIGZhaWxfZmluaToKLQljeDg4MDJfZmluaV9jb21tb24oZGV2KTsKLSBmYWlsX2ZyZWU6Ci0Ja2ZyZWUoZGV2KTsKICBmYWlsX2NvcmU6Ci0JY3g4OF9jb3JlX3B1dChjb3JlLHBjaV9kZXYpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkdmJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQorc3RhdGljIGludCBjeDg4MDJfZHZiX3JlbW92ZShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KQogewotCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7Ci0KLQkvKiBEZXN0cm95IGFueSA4ODAyIHJlZmVyZW5jZS4gKi8KLQlkZXYtPmNvcmUtPmR2YmRldiA9IE5VTEw7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGRydi0+Y29yZS0+ZHZiZGV2OwogCiAJLyogZHZiICovCiAJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoJmRldi0+ZHZiKTsKQEAgLTg3OCwzMyArODI2LDE2IEBACiAJdnAzMDU0X2kyY19yZW1vdmUoZGV2KTsKICNlbmRpZgogCi0JLyogY29tbW9uICovCi0JY3g4ODAyX2ZpbmlfY29tbW9uKGRldik7Ci0JY3g4OF9jb3JlX3B1dChkZXYtPmNvcmUsZGV2LT5wY2kpOwotCWtmcmVlKGRldik7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeDg4MDJfcGNpX3RibFtdID0gewotCXsKLQkJLnZlbmRvciAgICAgICA9IDB4MTRmMSwKLQkJLmRldmljZSAgICAgICA9IDB4ODgwMiwKLQkJLnN1YnZlbmRvciAgICA9IFBDSV9BTllfSUQsCi0JCS5zdWJkZXZpY2UgICAgPSBQQ0lfQU5ZX0lELAotCX0sewotCQkvKiAtLS0gZW5kIG9mIGxpc3QgLS0tICovCi0JfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjeDg4MDJfcGNpX3RibCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkdmJfcGNpX2RyaXZlciA9IHsKLQkubmFtZSAgICAgPSAiY3g4OC1kdmIiLAotCS5pZF90YWJsZSA9IGN4ODgwMl9wY2lfdGJsLAotCS5wcm9iZSAgICA9IGR2Yl9wcm9iZSwKLQkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChkdmJfcmVtb3ZlKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZCAgPSBjeDg4MDJfc3VzcGVuZF9jb21tb24sCi0JLnJlc3VtZSAgID0gY3g4ODAyX3Jlc3VtZV9jb21tb24sCi0jZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgY3g4ODAyX2RyaXZlciBjeDg4MDJfZHZiX2RyaXZlciA9IHsKKwkudHlwZV9pZCAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCS5od19hY2Nlc3MgICAgICA9IENYODgwMl9EUlZDVExfU0hBUkVELAorCS5wcm9iZSAgICAgICAgICA9IGN4ODgwMl9kdmJfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gY3g4ODAyX2R2Yl9yZW1vdmUsCisJLmFkdmlzZV9hY3F1aXJlID0gY3g4ODAyX2R2Yl9hZHZpc2VfYWNxdWlyZSwKKwkuYWR2aXNlX3JlbGVhc2UgPSBjeDg4MDJfZHZiX2FkdmlzZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBkdmJfaW5pdCh2b2lkKQpAQCAtOTE3LDEyICs4NDgsMTIgQEAKIAlwcmludGsoS0VSTl9JTkZPICJjeDIzODh4OiBzbmFwc2hvdCBkYXRlICUwNGQtJTAyZC0lMDJkXG4iLAogCSAgICAgICBTTkFQU0hPVC8xMDAwMCwgKFNOQVBTSE9ULzEwMCklMTAwLCBTTkFQU0hPVCUxMDApOwogI2VuZGlmCi0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmR2Yl9wY2lfZHJpdmVyKTsKKwlyZXR1cm4gY3g4ODAyX3JlZ2lzdGVyX2RyaXZlcigmY3g4ODAyX2R2Yl9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBkdmJfZmluaSh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHZiX3BjaV9kcml2ZXIpOworCWN4ODgwMl91bnJlZ2lzdGVyX2RyaXZlcigmY3g4ODAyX2R2Yl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChkdmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwppbmRleCBlNjBhMGE1Li44MTM2NjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKQEAgLTE1NSw2ICsxNTUsMzUgQEAKIAltb2RfdGltZXIoJmlyLT50aW1lciwgdGltZW91dCk7CiB9CiAKK3N0YXRpYyB2b2lkIGN4ODhfaXJfc3RhcnQoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgc3RydWN0IGN4ODhfSVIgKmlyKQoreworCWlmIChpci0+cG9sbGluZykgeworCQlJTklUX1dPUksoJmlyLT53b3JrLCBjeDg4X2lyX3dvcmspOworCQlpbml0X3RpbWVyKCZpci0+dGltZXIpOworCQlpci0+dGltZXIuZnVuY3Rpb24gPSBpcl90aW1lcjsKKwkJaXItPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpcjsKKwkJc2NoZWR1bGVfd29yaygmaXItPndvcmspOworCX0KKwlpZiAoaXItPnNhbXBsaW5nKSB7CisJCWNvcmUtPnBjaV9pcnFtYXNrIHw9ICgxIDw8IDE4KTsJLyogSVJfU01QX0lOVCAqLworCQljeF93cml0ZShNT19ERFNfSU8sIDB4YTgwYTgwKTsJLyogNCBrSHogc2FtcGxlIHJhdGUgKi8KKwkJY3hfd3JpdGUoTU9fRERTQ0ZHX0lPLCAweDUpOwkvKiBlbmFibGUgKi8KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGN4ODhfaXJfc3RvcChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBzdHJ1Y3QgY3g4OF9JUiAqaXIpCit7CisJaWYgKGlyLT5zYW1wbGluZykgeworCQljeF93cml0ZShNT19ERFNDRkdfSU8sIDB4MCk7CisJCWNvcmUtPnBjaV9pcnFtYXNrICY9IH4oMSA8PCAxOCk7CisJfQorCisJaWYgKGlyLT5wb2xsaW5nKSB7CisJCWRlbF90aW1lcl9zeW5jKCZpci0+dGltZXIpOworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCX0KK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBpbnQgY3g4OF9pcl9pbml0KHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHN0cnVjdCBwY2lfZGV2ICpwY2kpCkBAIC0xNjMsMTQgKzE5MiwxMiBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlJUl9LRVlUQUJfVFlQRSAqaXJfY29kZXMgPSBOVUxMOwogCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlyID0ga3phbGxvYyhzaXplb2YoKmlyKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpciB8fCAhaW5wdXRfZGV2KSB7Ci0JCWtmcmVlKGlyKTsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWlmICghaXIgfHwgIWlucHV0X2RldikKKwkJZ290byBlcnJfb3V0X2ZyZWU7CiAKIAlpci0+aW5wdXQgPSBpbnB1dF9kZXY7CiAKQEAgLTI4MCw5ICszMDcsOCBAQAogCX0KIAogCWlmIChOVUxMID09IGlyX2NvZGVzKSB7Ci0JCWtmcmVlKGlyKTsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KIAogCS8qIGluaXQgaW5wdXQgZGV2aWNlICovCkBAIC0zMDcsMjMgKzMzMywyMiBAQAogCWlyLT5jb3JlID0gY29yZTsKIAljb3JlLT5pciA9IGlyOwogCi0JaWYgKGlyLT5wb2xsaW5nKSB7Ci0JCUlOSVRfV09SSygmaXItPndvcmssIGN4ODhfaXJfd29yayk7Ci0JCWluaXRfdGltZXIoJmlyLT50aW1lcik7Ci0JCWlyLT50aW1lci5mdW5jdGlvbiA9IGlyX3RpbWVyOwotCQlpci0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlyOwotCQlzY2hlZHVsZV93b3JrKCZpci0+d29yayk7Ci0JfQotCWlmIChpci0+c2FtcGxpbmcpIHsKLQkJY29yZS0+cGNpX2lycW1hc2sgfD0gKDEgPDwgMTgpOwkvKiBJUl9TTVBfSU5UICovCi0JCWN4X3dyaXRlKE1PX0REU19JTywgMHhhODBhODApOwkvKiA0IGtIeiBzYW1wbGUgcmF0ZSAqLwotCQljeF93cml0ZShNT19ERFNDRkdfSU8sIDB4NSk7CS8qIGVuYWJsZSAqLwotCX0KKwljeDg4X2lyX3N0YXJ0KGNvcmUsIGlyKTsKIAogCS8qIGFsbCBkb25lICovCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlyLT5pbnB1dCk7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlyLT5pbnB1dCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3N0b3A7CiAKIAlyZXR1cm4gMDsKKworIGVycl9vdXRfc3RvcDoKKwljeDg4X2lyX3N0b3AoY29yZSwgaXIpOworCWNvcmUtPmlyID0gTlVMTDsKKyBlcnJfb3V0X2ZyZWU6CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlrZnJlZShpcik7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IGN4ODhfaXJfZmluaShzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKQpAQCAtMzM0LDE1ICszNTksNyBAQAogCWlmIChOVUxMID09IGlyKQogCQlyZXR1cm4gMDsKIAotCWlmIChpci0+c2FtcGxpbmcpIHsKLQkJY3hfd3JpdGUoTU9fRERTQ0ZHX0lPLCAweDApOwotCQljb3JlLT5wY2lfaXJxbWFzayAmPSB+KDEgPDwgMTgpOwotCX0KLQlpZiAoaXItPnBvbGxpbmcpIHsKLQkJZGVsX3RpbWVyKCZpci0+dGltZXIpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCX0KLQorCWN4ODhfaXJfc3RvcChjb3JlLCBpcik7CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKIAlrZnJlZShpcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwppbmRleCA2YjIzYTRlLi4xZmUxYTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCkBAIC00NCw4ICs0NCwxMiBAQAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFttcGVnXSIpOwogCiAjZGVmaW5lIGRwcmludGsobGV2ZWwsZm10LCBhcmcuLi4pCWlmIChkZWJ1ZyA+PSBsZXZlbCkgXAotCXByaW50ayhLRVJOX0RFQlVHICIlcy8yOiAiIGZtdCwgZGV2LT5jb3JlLT5uYW1lICwgIyMgYXJnKQorCXByaW50ayhLRVJOX0RFQlVHICIlcy8yLW1wZWc6ICIgZm10LCBkZXYtPmNvcmUtPm5hbWUsICMjIGFyZykKIAorI2RlZmluZSBtcGVnX2RiZyhsZXZlbCxmbXQsIGFyZy4uLikJaWYgKGRlYnVnID49IGxldmVsKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzLzItbXBlZzogIiBmbXQsIGNvcmUtPm5hbWUsICMjIGFyZykKKworc3RhdGljIExJU1RfSEVBRChjeDg4MDJfZGV2bGlzdCk7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBjeDg4MDJfc3RhcnRfZG1hKHN0cnVjdCBjeDg4MDJfZGV2ICAgICpkZXYsCkBAIC02NSwxNyArNjksMTMgQEAKIAogCS8qIEZJWE1FOiB0aGlzIG5lZWRzIGEgcmV2aWV3LgogCSAqIGFsc286IG1vdmUgdG8gY3g4OC1ibGFja2JpcmQgKyBjeDg4LWR2YiBzb3VyY2UgZmlsZXM/ICovCi0JaWYgKGN4ODhfYm9hcmRzW2NvcmUtPmJvYXJkXS5tcGVnID09IChDWDg4X01QRUdfRFZCIHwgQ1g4OF9NUEVHX0JMQUNLQklSRCkgKSB7Ci0JCS8qIFJlcG9ydCBhIHdhcm5pbmcgdW50aWwgdGhlIG1pbmkgZHJpdmVyIHBhdGNoIGlzIGFwcGxpZWQsCi0JCSAqIGVsc2UgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHdpbGwgc2V0IHRoZSBkbWEgcmVnaXN0ZXJzIGluY29ycmVjdGx5LgotCQkgKiBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciBwYXRjaCBhbmQgY2hhbmdlcyB0byB0aGUgY29uZGl0aW9ucwotCQkgKiB3aWxsIGJlIG1hZGUuCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICIlcygpIGJvYXJkLT4oQ1g4OF9NUEVHX0RWQiB8IENYODhfTVBFR19CTEFDS0JJUkQpIGlzIGludmFsaWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAotCWlmIChjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ubXBlZyAmIENYODhfTVBFR19EVkIpIHsKKwlkcHJpbnRrKCAxLCAiY29yZS0+YWN0aXZlX3R5cGVfaWQgPSAweCUwOHhcbiIsIGNvcmUtPmFjdGl2ZV90eXBlX2lkKTsKKworCWlmICggKGNvcmUtPmFjdGl2ZV90eXBlX2lkID09IENYODhfTVBFR19EVkIpICYmCisJCShjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ubXBlZyAmIENYODhfTVBFR19EVkIpICkgeworCisJCWRwcmludGsoIDEsICJjeDg4MDJfc3RhcnRfZG1hIGRvaW5nIC5kdmJcbiIpOwogCQkvKiBuZWdlZGdlIGRyaXZlbiAmIHNvZnR3YXJlIHJlc2V0ICovCiAJCWN4X3dyaXRlKFRTX0dFTl9DTlRSTCwgMHgwMDQwIHwgZGV2LT50c19nZW5fY250cmwpOwogCQl1ZGVsYXkoMTAwKTsKQEAgLTkzLDE1ICs5MywxNyBAQAogCQkJY3hfd3JpdGUoTU9fUElOTVVYX0lPLCAweDg4KTsgLyogRW5hYmxlIE1QRUcgcGFyYWxsZWwgSU8gYW5kIHZpZGVvIHNpZ25hbCBwaW5zICovCiAJCQl1ZGVsYXkoMTAwKTsKIAkJCWJyZWFrOworCQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjEzMDA6CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWN4X3dyaXRlKFRTX1NPUF9TVEFULCAweDAwKTsKIAkJCWJyZWFrOwogCQl9CiAJCWN4X3dyaXRlKFRTX0dFTl9DTlRSTCwgZGV2LT50c19nZW5fY250cmwpOwogCQl1ZGVsYXkoMTAwKTsKLQl9Ci0KLQlpZiAoY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm1wZWcgJiBDWDg4X01QRUdfQkxBQ0tCSVJEKSB7CisJfSBlbHNlIGlmICggKGNvcmUtPmFjdGl2ZV90eXBlX2lkID09IENYODhfTVBFR19CTEFDS0JJUkQpICYmCisJCShjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ubXBlZyAmIENYODhfTVBFR19CTEFDS0JJUkQpICkgeworCQlkcHJpbnRrKCAxLCAiY3g4ODAyX3N0YXJ0X2RtYSBkb2luZyAuYmxhY2tiaXJkXG4iKTsKIAkJY3hfd3JpdGUoTU9fUElOTVVYX0lPLCAweDg4KTsgLyogZW5hYmxlIE1QRUcgcGFyYWxsZWwgSU8gKi8KIAogCQljeF93cml0ZShUU19HRU5fQ05UUkwsIDB4NDYpOyAvKiBwdW5jdHVyZWQgY2xvY2sgVFMgJiBwb3NlZGdlIGRyaXZlbiAmIHNvZnR3YXJlIHJlc2V0ICovCkBAIC0xMTIsNiArMTE0LDEwIEBACiAKIAkJY3hfd3JpdGUoVFNfR0VOX0NOVFJMLCAweDA2KTsgLyogcHVuY3R1cmVkIGNsb2NrIFRTICYgcG9zZWRnZSBkcml2ZW4gKi8KIAkJdWRlbGF5KDEwMCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCAiJXMoKSBGYWlsZWQuIFVuc3VwcG9ydGVkIHZhbHVlIGluIC5tcGVnICgweCUwOHgpXG4iLCBfX0ZVTkNUSU9OX18sCisJCQljeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ubXBlZyApOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiByZXNldCBjb3VudGVyICovCkBAIC01NDIsOCArNTQ4LDMxNSBAQAogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RydWN0IGN4ODgwMl9kZXYgKiBjeDg4MDJfZ2V0X2RldmljZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IGN4ODgwMl9kZXYgKmggPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsJmN4ODgwMl9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDg4MDJfZGV2LCBkZXZsaXN0KTsKKwkJaWYgKGgtPm1wZWdfZGV2LT5taW5vciA9PSBtaW5vcikKKwkJCXJldHVybiBoOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqIGN4ODgwMl9nZXRfZHJpdmVyKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIGVudW0gY3g4OF9ib2FyZF90eXBlIGJ0eXBlKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpoID0gTlVMTDsKKwlzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0MjsKKworCWxpc3RfZm9yX2VhY2gobGlzdCwmY3g4ODAyX2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4ODgwMl9kZXYsIGRldmxpc3QpOworCQlpZiAoaCAhPSBkZXYpCisJCQljb250aW51ZTsKKworCQlsaXN0X2Zvcl9lYWNoKGxpc3QyLCAmaC0+ZHJ2bGlzdC5kZXZsaXN0KSB7CisJCQlkID0gbGlzdF9lbnRyeShsaXN0Miwgc3RydWN0IGN4ODgwMl9kcml2ZXIsIGRldmxpc3QpOworCisJCQkvKiBvbmx5IHVucmVnaXN0ZXIgdGhlIGNvcnJlY3QgZHJpdmVyIHR5cGUgKi8KKwkJCWlmIChkLT50eXBlX2lkID09IGJ0eXBlKSB7CisJCQkJcmV0dXJuIGQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogRHJpdmVyIGFza2VkIGZvciBoYXJkd2FyZSBhY2Nlc3MuICovCitpbnQgY3g4ODAyX3JlcXVlc3RfYWNxdWlyZShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkcnYtPmNvcmU7CisKKwkvKiBGYWlsIGEgcmVxdWVzdCBmb3IgaGFyZHdhcmUgaWYgdGhlIGRldmljZSBpcyBidXN5LiAqLworCWlmIChjb3JlLT5hY3RpdmVfdHlwZV9pZCAhPSBDWDg4X0JPQVJEX05PTkUpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoZHJ2LT5hZHZpc2VfYWNxdWlyZSkKKwl7CisJCWNvcmUtPmFjdGl2ZV90eXBlX2lkID0gZHJ2LT50eXBlX2lkOworCQlkcnYtPmFkdmlzZV9hY3F1aXJlKGRydik7CisKKwkJbXBlZ19kYmcoMSwiJXMoKSBQb3N0IGFjcXVpcmUgR1BJTz0leFxuIiwgX19GVU5DVElPTl9fLCBjeF9yZWFkKE1PX0dQMF9JTykpOworCX0KKworCXJldHVybiAwOworfQorCisvKiBEcml2ZXIgYXNrZWQgdG8gcmVsZWFzZSBoYXJkd2FyZS4gKi8KK2ludCBjeDg4MDJfcmVxdWVzdF9yZWxlYXNlKHN0cnVjdCBjeDg4MDJfZHJpdmVyICpkcnYpCit7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRydi0+Y29yZTsKKworCWlmIChkcnYtPmFkdmlzZV9yZWxlYXNlKQorCXsKKwkJZHJ2LT5hZHZpc2VfcmVsZWFzZShkcnYpOworCQljb3JlLT5hY3RpdmVfdHlwZV9pZCA9IENYODhfQk9BUkRfTk9ORTsKKwkJbXBlZ19kYmcoMSwiJXMoKSBQb3N0IHJlbGVhc2UgR1BJTz0leFxuIiwgX19GVU5DVElPTl9fLCBjeF9yZWFkKE1PX0dQMF9JTykpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4ODgwMl9jaGVja19kcml2ZXIoc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydikKK3sKKwlpZiAoZHJ2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKChkcnYtPnR5cGVfaWQgIT0gQ1g4OF9NUEVHX0RWQikgJiYKKwkJKGRydi0+dHlwZV9pZCAhPSBDWDg4X01QRUdfQkxBQ0tCSVJEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKGRydi0+aHdfYWNjZXNzICE9IENYODgwMl9EUlZDVExfU0hBUkVEKSAmJgorCQkoZHJ2LT5od19hY2Nlc3MgIT0gQ1g4ODAyX0RSVkNUTF9FWENMVVNJVkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoZHJ2LT5wcm9iZSA9PSBOVUxMKSB8fAorCQkoZHJ2LT5yZW1vdmUgPT0gTlVMTCkgfHwKKwkJKGRydi0+YWR2aXNlX2FjcXVpcmUgPT0gTlVMTCkgfHwKKwkJKGRydi0+YWR2aXNlX3JlbGVhc2UgPT0gTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjeDg4MDJfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBjeDg4MDJfZHJpdmVyICpkcnYpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmg7CisJc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWludCBlcnIgPSAwLCBpID0gMDsKKworCXByaW50ayhLRVJOX0lORk8gIiVzKCkgLT5yZWdpc3RlcmluZyBkcml2ZXIgdHlwZT0lcyBhY2Nlc3M9JXNcbiIsIF9fRlVOQ1RJT05fXyAsCisJCWRydi0+dHlwZV9pZCA9PSBDWDg4X01QRUdfRFZCID8gImR2YiIgOiAiYmxhY2tiaXJkIiwKKwkJZHJ2LT5od19hY2Nlc3MgPT0gQ1g4ODAyX0RSVkNUTF9TSEFSRUQgPyAic2hhcmVkIiA6ICJleGNsdXNpdmUiKTsKKworCWlmICgoZXJyID0gY3g4ODAyX2NoZWNrX2RyaXZlcihkcnYpKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzKCkgY3g4ODAyX2RyaXZlciBpcyBpbnZhbGlkXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsJmN4ODgwMl9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjeDg4MDJfZGV2LCBkZXZsaXN0KTsKKworCQlwcmludGsoS0VSTl9JTkZPICJDT1JFICVzOiBzdWJzeXN0ZW06ICUwNHg6JTA0eCwgYm9hcmQ6ICVzIFtjYXJkPSVkXVxuIiwKKwkJCWgtPmNvcmUtPm5hbWUsaC0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLAorCQkJaC0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlLGN4ODhfYm9hcmRzW2gtPmNvcmUtPmJvYXJkXS5uYW1lLAorCQkJaC0+Y29yZS0+Ym9hcmQpOworCisJCS8qIEJyaW5nIHVwIGEgbmV3IHN0cnVjdCBmb3IgZWFjaCBkcml2ZXIgaW5zdGFuY2UgKi8KKwkJZHJpdmVyID0ga3phbGxvYyhzaXplb2YoKmRydiksR0ZQX0tFUk5FTCk7CisJCWlmIChkcml2ZXIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qIFNuYXBzaG90IG9mIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uIGRhdGEgKi8KKwkJZHJ2LT5jb3JlID0gaC0+Y29yZTsKKwkJZHJ2LT5zdXNwZW5kID0gY3g4ODAyX3N1c3BlbmRfY29tbW9uOworCQlkcnYtPnJlc3VtZSA9IGN4ODgwMl9yZXN1bWVfY29tbW9uOworCQlkcnYtPnJlcXVlc3RfYWNxdWlyZSA9IGN4ODgwMl9yZXF1ZXN0X2FjcXVpcmU7CisJCWRydi0+cmVxdWVzdF9yZWxlYXNlID0gY3g4ODAyX3JlcXVlc3RfcmVsZWFzZTsKKwkJbWVtY3B5KGRyaXZlciwgZHJ2LCBzaXplb2YoKmRyaXZlcikpOworCisJCWVyciA9IGRydi0+cHJvYmUoZHJpdmVyKTsKKwkJaWYgKGVyciA9PSAwKSB7CisJCQlpKys7CisJCQltdXRleF9sb2NrKCZkcnYtPmNvcmUtPmxvY2spOworCQkJbGlzdF9hZGRfdGFpbCgmZHJpdmVyLT5kZXZsaXN0LCZoLT5kcnZsaXN0LmRldmxpc3QpOworCQkJbXV0ZXhfdW5sb2NrKCZkcnYtPmNvcmUtPmxvY2spOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIC0+cHJvYmUgZmFpbGVkIGVyciA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCX0KKworCX0KKwlpZiAoaSA9PSAwKQorCQllcnIgPSAtRU5PREVWOworCWVsc2UKKwkJZXJyID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBjeDg4MDJfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydikKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqaDsKKwlzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QyLCAqcTsKKwlpbnQgZXJyID0gMCwgaSA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcygpIC0+dW5yZWdpc3RlcmluZyBkcml2ZXIgdHlwZT0lc1xuIiwgX19GVU5DVElPTl9fICwKKwkJZHJ2LT50eXBlX2lkID09IENYODhfTVBFR19EVkIgPyAiZHZiIiA6ICJibGFja2JpcmQiKTsKKworCWxpc3RfZm9yX2VhY2gobGlzdCwmY3g4ODAyX2Rldmxpc3QpIHsKKwkJaSsrOworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3g4ODAyX2RldiwgZGV2bGlzdCk7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ09SRSAlczogc3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZF1cbiIsCisJCQloLT5jb3JlLT5uYW1lLGgtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKKwkJCWgtPnBjaS0+c3Vic3lzdGVtX2RldmljZSxjeDg4X2JvYXJkc1toLT5jb3JlLT5ib2FyZF0ubmFtZSwKKwkJCWgtPmNvcmUtPmJvYXJkKTsKKworCQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdDIsIHEsICZoLT5kcnZsaXN0LmRldmxpc3QpIHsKKwkJCWQgPSBsaXN0X2VudHJ5KGxpc3QyLCBzdHJ1Y3QgY3g4ODAyX2RyaXZlciwgZGV2bGlzdCk7CisKKwkJCS8qIG9ubHkgdW5yZWdpc3RlciB0aGUgY29ycmVjdCBkcml2ZXIgdHlwZSAqLworCQkJaWYgKGQtPnR5cGVfaWQgIT0gZHJ2LT50eXBlX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQllcnIgPSBkLT5yZW1vdmUoZCk7CisJCQlpZiAoZXJyID09IDApIHsKKwkJCQltdXRleF9sb2NrKCZkcnYtPmNvcmUtPmxvY2spOworCQkJCWxpc3RfZGVsKGxpc3QyKTsKKwkJCQltdXRleF91bmxvY2soJmRydi0+Y29yZS0+bG9jayk7CisJCQl9IGVsc2UKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgLT5yZW1vdmUgZmFpbGVkIGVyciA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVycik7CisKKwkJfQorCisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGN4ODgwMl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY7CisJc3RydWN0IGN4ODhfY29yZSAgKmNvcmU7CisJaW50IGVycjsKKworCS8qIGdlbmVyYWwgc2V0dXAgKi8KKwljb3JlID0gY3g4OF9jb3JlX2dldChwY2lfZGV2KTsKKwlpZiAoTlVMTCA9PSBjb3JlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaW50aygiJXMvMjogY3gyMzg4eCA4ODAyIERyaXZlciBNYW5hZ2VyXG4iLCBjb3JlLT5uYW1lKTsKKworCWVyciA9IC1FTk9ERVY7CisJaWYgKCFjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ubXBlZykKKwkJZ290byBmYWlsX2NvcmU7CisKKwllcnIgPSAtRU5PTUVNOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGRldikKKwkJZ290byBmYWlsX2NvcmU7CisJZGV2LT5wY2kgPSBwY2lfZGV2OworCWRldi0+Y29yZSA9IGNvcmU7CisKKwllcnIgPSBjeDg4MDJfaW5pdF9jb21tb24oZGV2KTsKKwlpZiAoZXJyICE9IDApCisJCWdvdG8gZmFpbF9mcmVlOworCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZHJ2bGlzdC5kZXZsaXN0KTsKKwlsaXN0X2FkZF90YWlsKCZkZXYtPmRldmxpc3QsJmN4ODgwMl9kZXZsaXN0KTsKKworCS8qIE1haW50YWluIGEgcmVmZXJlbmNlIHNvIGN4ODgtdmlkZW8gY2FuIHF1ZXJ5IHRoZSA4ODAyIGRldmljZS4gKi8KKwljb3JlLT5kdmJkZXYgPSBkZXY7CisJcmV0dXJuIDA7CisKKyBmYWlsX2ZyZWU6CisJa2ZyZWUoZGV2KTsKKyBmYWlsX2NvcmU6CisJY3g4OF9jb3JlX3B1dChjb3JlLHBjaV9kZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjeDg4MDJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY7CisJc3RydWN0IGN4ODgwMl9kcml2ZXIgKmg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKworCWRwcmludGsoIDEsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWxpc3RfZm9yX2VhY2gobGlzdCwmZGV2LT5kcnZsaXN0LmRldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4ODgwMl9kcml2ZXIsIGRldmxpc3QpOworCQlkcHJpbnRrKCAxLCAiIC0+ZHJpdmVyXG4iKTsKKwkJaWYgKGgtPnJlbW92ZSA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzIC4uIHNraXBwaW5nIGRyaXZlciwgbm8gcHJvYmUgZnVuY3Rpb25cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQljb250aW51ZTsKKwkJfQorCQlwcmludGsoS0VSTl9JTkZPICIlcyAuLiBSZW1vdmluZyBkcml2ZXIgdHlwZSAlZFxuIiwgX19GVU5DVElPTl9fLCBoLT50eXBlX2lkKTsKKwkJY3g4ODAyX3VucmVnaXN0ZXJfZHJpdmVyKGgpOworCQlsaXN0X2RlbCgmZGV2LT5kcnZsaXN0LmRldmxpc3QpOworCX0KKworCS8qIERlc3Ryb3kgYW55IDg4MDIgcmVmZXJlbmNlLiAqLworCWRldi0+Y29yZS0+ZHZiZGV2ID0gTlVMTDsKKworCS8qIGNvbW1vbiAqLworCWN4ODgwMl9maW5pX2NvbW1vbihkZXYpOworCWN4ODhfY29yZV9wdXQoZGV2LT5jb3JlLGRldi0+cGNpKTsKKwlrZnJlZShkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3g4ODAyX3BjaV90YmxbXSA9IHsKKwl7CisJCS52ZW5kb3IgICAgICAgPSAweDE0ZjEsCisJCS5kZXZpY2UgICAgICAgPSAweDg4MDIsCisJCS5zdWJ2ZW5kb3IgICAgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlICAgID0gUENJX0FOWV9JRCwKKwl9LHsKKwkJLyogLS0tIGVuZCBvZiBsaXN0IC0tLSAqLworCX0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3g4ODAyX3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY3g4ODAyX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgICAgID0gImN4ODgtbXBlZyBkcml2ZXIgbWFuYWdlciIsCisJLmlkX3RhYmxlID0gY3g4ODAyX3BjaV90YmwsCisJLnByb2JlICAgID0gY3g4ODAyX3Byb2JlLAorCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGN4ODgwMl9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBjeDg4MDJfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gImN4MjM4OHggY3g4OC1tcGVnIERyaXZlciBNYW5hZ2VyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAorCSAgICAgICAoQ1g4OF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKKwkgICAgICAgKENYODhfVkVSU0lPTl9DT0RFID4+ICA4KSAmIDB4ZmYsCisJICAgICAgIENYODhfVkVSU0lPTl9DT0RFICYgMHhmZik7CisjaWZkZWYgU05BUFNIT1QKKwlwcmludGsoS0VSTl9JTkZPICJjeDIzODh4OiBzbmFwc2hvdCBkYXRlICUwNGQtJTAyZC0lMDJkXG4iLAorCSAgICAgICBTTkFQU0hPVC8xMDAwMCwgKFNOQVBTSE9ULzEwMCklMTAwLCBTTkFQU0hPVCUxMDApOworI2VuZGlmCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmN4ODgwMl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgY3g4ODAyX2Zpbmkodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmN4ODgwMl9wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY3g4ODAyX2luaXQpOworbW9kdWxlX2V4aXQoY3g4ODAyX2ZpbmkpOwogRVhQT1JUX1NZTUJPTChjeDg4MDJfYnVmX3ByZXBhcmUpOwogRVhQT1JUX1NZTUJPTChjeDg4MDJfYnVmX3F1ZXVlKTsKIEVYUE9SVF9TWU1CT0woY3g4ODAyX2NhbmNlbF9idWZmZXJzKTsKQEAgLTU1MSw5ICs4NjQsMTAgQEAKIEVYUE9SVF9TWU1CT0woY3g4ODAyX2luaXRfY29tbW9uKTsKIEVYUE9SVF9TWU1CT0woY3g4ODAyX2ZpbmlfY29tbW9uKTsKIAotRVhQT1JUX1NZTUJPTChjeDg4MDJfc3VzcGVuZF9jb21tb24pOwotRVhQT1JUX1NZTUJPTChjeDg4MDJfcmVzdW1lX2NvbW1vbik7Ci0KK0VYUE9SVF9TWU1CT0woY3g4ODAyX3JlZ2lzdGVyX2RyaXZlcik7CitFWFBPUlRfU1lNQk9MKGN4ODgwMl91bnJlZ2lzdGVyX2RyaXZlcik7CitFWFBPUlRfU1lNQk9MKGN4ODgwMl9nZXRfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0woY3g4ODAyX2dldF9kcml2ZXIpOwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKaW5kZXggNThiYTlmNy4uMmJkODRkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0xNDMsMTkgKzE0NCw2IEBACiAJY3g4OF9zdGFydF9hdWRpb19kbWEoY29yZSk7CiAKIAlpZiAoY3g4OF9ib2FyZHNbY29yZS0+Ym9hcmRdLm1wZWcgJiBDWDg4X01QRUdfQkxBQ0tCSVJEKSB7Ci0JCS8qIHNldHMgc291bmQgaW5wdXQgZnJvbSBleHRlcm5hbCBhZGMgKi8KLQkJc3dpdGNoIChjb3JlLT5ib2FyZCkgewotCQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX1JPU0xZTjoKLQkJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9NQ0UyMDBfREVMVVhFOgotCQljYXNlIENYODhfQk9BUkRfS1dPUkxEX0hBUkRXQVJFX01QRUdfVFZfWFBFUlQ6Ci0JCWNhc2UgQ1g4OF9CT0FSRF9QSVhFTFZJRVdfUExBWVRWX1A3MDAwOgotCQljYXNlIENYODhfQk9BUkRfQVNVU19QVlJfNDE2OgotCQkJY3hfY2xlYXIoQVVEX0NUTCwgRU5fSTJTSU5fRU5BQkxFKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJY3hfc2V0KEFVRF9DVEwsIEVOX0kyU0lOX0VOQUJMRSk7Ci0JCX0KLQogCQljeF93cml0ZShBVURfSTJTSU5QVVRDTlRMLCA0KTsKIAkJY3hfd3JpdGUoQVVEX0JBVURSQVRFLCAxKTsKIAkJLyogJ3Bhc3MtdGhydSBtb2RlJzogdGhpcyBlbmFibGVzIHRoZSBpMnMgb3V0cHV0IHRvIHRoZSBtcGVnIGVuY29kZXIgKi8KQEAgLTk3NCw2ICs5NjIsNyBAQAogCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDAwKTsKIAkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOworCQl0cnlfdG9fZnJlZXplKCk7CiAKIAkJLyoganVzdCBtb25pdG9yIHRoZSBhdWRpbyBzdGF0dXMgZm9yIG5vdyAuLi4gKi8KIAkJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggOTBlMjk4ZC4uODYxMzM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC00NTQsNiArNDU0LDE0IEBACiAJCWN4X2NsZWFyKE1PX0ZJTFRFUl9PREQsICAgMHgwMDAwMjAyMCk7CiAJCWJyZWFrOwogCX0KKworCWlmIChjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0ubXBlZyAmIENYODhfTVBFR19CTEFDS0JJUkQpIHsKKwkJLyogc2V0cyBzb3VuZCBpbnB1dCBmcm9tIGV4dGVybmFsIGFkYyAqLworCQlpZiAoSU5QVVQoaW5wdXQpLT5leHRhZGMpCisJCQljeF9zZXQoQVVEX0NUTCwgRU5fSTJTSU5fRU5BQkxFKTsKKwkJZWxzZQorCQkJY3hfY2xlYXIoQVVEX0NUTCwgRU5fSTJTSU5fRU5BQkxFKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0OTAsNiArMTQ5OCwzMCBAQAogCQltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS8qIGlvY3RscyB0byBhbGxvdyBkaXJlY3QgYWNjZXMgdG8gdGhlIGN4MjM4OHggcmVnaXN0ZXJzICovCisJY2FzZSBWSURJT0NfSU5UX0dfUkVHSVNURVI6CisJeworCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOworCisJCWlmIChyZWctPmkyY19pZCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIGN4MjM4OHggaGFzIGEgMjQtYml0IHJlZ2lzdGVyIHNwYWNlICovCisJCXJlZy0+dmFsID0gY3hfcmVhZChyZWctPnJlZyYweGZmZmZmZik7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19JTlRfU19SRUdJU1RFUjoKKwl7CisJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcgPSBhcmc7CisKKwkJaWYgKHJlZy0+aTJjX2lkICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJY3hfd3JpdGUocmVnLT5yZWcmMHhmZmZmZmYsIHJlZy0+dmFsKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5jCmluZGV4IDJiNGYxOTcuLjYwNjhjOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZwMzA1NC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCSAgICBkZXYtPmNvcmUtPmJvYXJkICE9IENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UX1BSTykKIAkJcmV0dXJuOwogCi0JaTJjX2JpdF9kZWxfYnVzKCZ2cDMwNTRfaTJjLT5hZGFwKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJnZwMzA1NF9pMmMtPmFkYXApOwogCWtmcmVlKHZwMzA1NF9pMmMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCAzYmM5MWFhLi5hOTU3NWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTc0LDYgKzc0LDExIEBACiAJQ1g4OF9NUEVHX0JMQUNLQklSRAogfTsKIAorZW51bSBjeDg4MDJfYm9hcmRfYWNjZXNzIHsKKwlDWDg4MDJfRFJWQ1RMX1NIQVJFRCAgICA9IDEsCisJQ1g4ODAyX0RSVkNUTF9FWENMVVNJVkUgPSAyLAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHR2IG5vcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTg2LDcgKzkxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBpbmxpbmUgbm9ybV9tYXh3KHN0cnVjdCBjeDg4X3R2bm9ybSAqbm9ybSkKIHsKLQlyZXR1cm4gKG5vcm0tPmlkICYgVjRMMl9TVERfNjI1XzUwKSA/IDc2OCA6IDY0MDsKKwlyZXR1cm4gKG5vcm0tPmlkICYgKFY0TDJfU1REX01OICYgflY0TDJfU1REX1BBTF9OYykpID8gNzIwIDogNzY4OwogfQogCiAKQEAgLTIyMCw2ICsyMjUsNyBAQAogCWVudW0gY3g4OF9pdHlwZSB0eXBlOwogCXVuc2lnbmVkIGludCAgICB2bXV4OwogCXUzMiAgICAgICAgICAgICBncGlvMCwgZ3BpbzEsIGdwaW8yLCBncGlvMzsKKwl1bnNpZ25lZCBpbnQgICAgZXh0YWRjOjE7CiB9OwogCiBzdHJ1Y3QgY3g4OF9ib2FyZCB7CkBAIC0zMzAsNiArMzM2LDcgQEAKIAogCS8qIGN4ODgtdmlkZW8gbmVlZHMgdG8gYWNjZXNzIGN4ODgwMiBmb3IgaHlicmlkIHR1bmVyIHBsbCBhY2Nlc3MuICovCiAJc3RydWN0IGN4ODgwMl9kZXYgICAgICAgICAgKmR2YmRldjsKKwllbnVtIGN4ODhfYm9hcmRfdHlwZSAgICAgICBhY3RpdmVfdHlwZV9pZDsKIH07CiAKIHN0cnVjdCBjeDg4MDBfZGV2OwpAQCAtNDA1LDYgKzQxMiwzMSBAQAogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOwogfTsKIAorc3RydWN0IGN4ODgwMl9kcml2ZXIgeworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmU7CisJc3RydWN0IGxpc3RfaGVhZCBkZXZsaXN0OworCisJLyogVHlwZSBvZiBkcml2ZXIgYW5kIGFjY2VzcyByZXF1aXJlZCAqLworCWVudW0gY3g4OF9ib2FyZF90eXBlIHR5cGVfaWQ7CisJZW51bSBjeDg4MDJfYm9hcmRfYWNjZXNzIGh3X2FjY2VzczsKKworCS8qIE1QRUcgODgwMiBpbnRlcm5hbCBvbmx5ICovCisJaW50ICgqc3VzcGVuZCkoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldik7CisKKwkvKiBNUEVHIDg4MDIgLT4gbWluaSBkcml2ZXIgLSBEcml2ZXIgcHJvYmUgYW5kIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgKCpwcm9iZSkoc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydik7CisJaW50ICgqcmVtb3ZlKShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KTsKKworCS8qIE1QRUcgODgwMiAtPiBtaW5pIGRyaXZlciAtIEFjY2VzcyBmb3IgaGFyZHdhcmUgY29udHJvbCAqLworCWludCAoKmFkdmlzZV9hY3F1aXJlKShzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KTsKKwlpbnQgKCphZHZpc2VfcmVsZWFzZSkoc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydik7CisKKwkvKiBNUEVHIDg4MDIgPC0gbWluaSBkcml2ZXIgLSBBY2Nlc3MgZm9yIGhhcmR3YXJlIGNvbnRyb2wgKi8KKwlpbnQgKCpyZXF1ZXN0X2FjcXVpcmUpKHN0cnVjdCBjeDg4MDJfZHJpdmVyICpkcnYpOworCWludCAoKnJlcXVlc3RfcmVsZWFzZSkoc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydik7Cit9OworCiBzdHJ1Y3QgY3g4ODAyX2RldiB7CiAJc3RydWN0IGN4ODhfY29yZSAgICAgICAgICAgKmNvcmU7CiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgc2xvY2s7CkBAIC00MzksNiArNDcxLDkgQEAKIAogCS8qIG1wZWcgcGFyYW1zICovCiAJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgcGFyYW1zOworCisJLyogTGlzdCBvZiBhdHRhY2hlZCBkcml2ZXJzICovCisJc3RydWN0IGN4ODgwMl9kcml2ZXIgICAgICAgZHJ2bGlzdDsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC01NzEsNiArNjA2LDExIEBACiB2b2lkIGN4ODhfc2V0X3N0ZXJlbyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1MzIgbW9kZSwgaW50IG1hbnVhbCk7CiBpbnQgY3g4OF9hdWRpb190aHJlYWQodm9pZCAqZGF0YSk7CiAKK2ludCBjeDg4MDJfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBjeDg4MDJfZHJpdmVyICpkcnYpOworaW50IGN4ODgwMl91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2KTsKK3N0cnVjdCBjeDg4MDJfZGV2ICogY3g4ODAyX2dldF9kZXZpY2Uoc3RydWN0IGlub2RlICppbm9kZSk7CitzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqIGN4ODgwMl9nZXRfZHJpdmVyKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIGVudW0gY3g4OF9ib2FyZF90eXBlIGJ0eXBlKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4ODgtaW5wdXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTYwMCw2ICs2NDAsMTMgQEAKIGV4dGVybiBjb25zdCB1MzIgY3g4OF91c2VyX2N0cmxzW107CiBleHRlcm4gaW50IGN4ODgwMF9jdHJsX3F1ZXJ5KHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpOwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogY3g4OC1ibGFja2JpcmQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIHVzZWQgYnkgY3g4OC1pdnR2IGlvY3RsIGVtdWxhdGlvbiBsYXllciAgICAgICAgICAgICAgICAgICAgICovCitleHRlcm4gaW50ICgqY3g4OF9pb2N0bF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitleHRlcm4gdW5zaWduZWQgaW50ICgqY3g4OF9pb2N0bF90cmFuc2xhdG9yKSh1bnNpZ25lZCBpbnQgY21kKTsKKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIGMtYmFzaWMtb2Zmc2V0OiA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwppbmRleCBiMTAxMmU5Li45MTcwMjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQkgcGlwZXNpemUsIHBhY2tldHMsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCiAJd2hpbGUgKGJ1ZmZlcnMgPCAocy0+dG90YWxfYnVmZmVyX3NpemUgPDwgMTApKSB7Ci0JCWIgPSAocGJ1ZmZfdCkga3phbGxvYyAoc2l6ZW9mIChidWZmX3QpLCBHRlBfS0VSTkVMKTsKKwkJYiA9IGt6YWxsb2Moc2l6ZW9mIChidWZmX3QpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFiKSB7CiAJCQllcnIoImt6YWxsb2Moc2l6ZW9mKGJ1ZmZfdCkpPT1OVUxMIik7CiAJCQlnb3RvIGVycjsKQEAgLTY1OSw3ICs2NTksNyBAQAogCXN3aXRjaCAoY21kKSB7CiAKIAljYXNlIElPQ1RMX0RBQl9CVUxLOgotCQlwYnVsayA9IChwYnVsa190cmFuc2Zlcl90KSBrbWFsbG9jIChzaXplb2YgKGJ1bGtfdHJhbnNmZXJfdCksIEdGUF9LRVJORUwpOworCQlwYnVsayA9IGttYWxsb2Moc2l6ZW9mIChidWxrX3RyYW5zZmVyX3QpLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAoIXBidWxrKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCAyYTQ2MWRkZTQuLjM2ZTcyYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC0xNjc0LDkgKzE2NzQsOSBAQAogCWlmIChkZXYtPmhhc19tc3AzNHh4KSB7CiAJCS8qIFNlbmQgYSByZXNldCB0byBvdGhlciBjaGlwcyB2aWEgZ3BpbyAqLwogCQllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA4LCAiXHhmNyIsIDEpOwotCQl1ZGVsYXkoMjUwMCk7CisJCW1zbGVlcCgzKTsKIAkJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZmYiLCAxKTsKLQkJdWRlbGF5KDI1MDApOworCQltc2xlZXAoMyk7CiAKIAl9CiAJdmlkZW9fbXV4KGRldiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCmluZGV4IGFiODdlN2IuLjU5ZWRmNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC0zMDUsMTUgKzMwNSwxNCBAQAogCWludCBpcl90eXBlOwogCXN0cnVjdCBJUl9pMmMgKmlyOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlpbnQgZXJyOwogCiAJaXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgSVJfaTJjKSxHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpIHsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQkJa2ZyZWUoaXIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CiAJfQotCW1lbXNldChpciwwLHNpemVvZigqaXIpKTsKIAogCWlyLT5jID0gY2xpZW50X3RlbXBsYXRlOwogCWlyLT5pbnB1dCA9IGlucHV0X2RldjsKQEAgLTM1NSwzMiArMzU0LDM0IEBACiAJCWJyZWFrOwogCWNhc2UgMHg3YToKIAljYXNlIDB4NDc6CisJY2FzZSAweDcxOgogCQkvKiBIYW5kbGVkIGJ5IHNhYTcxMzQtaW5wdXQgKi8KIAkJbmFtZSAgICAgICAgPSAiU0FBNzEzeCByZW1vdGUiOwogCQlpcl90eXBlICAgICA9IElSX1RZUEVfT1RIRVI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJcHJpbnRrKERFVk5BTUUgIjogSHVoPyB1bmtub3duIGkyYyBhZGRyZXNzICgweCUwMngpP1xuIixhZGRyKTsKLQkJa2ZyZWUoaXIpOwotCQlyZXR1cm4gLTE7CisJCXByaW50ayhERVZOQU1FICI6IEh1aD8gdW5rbm93biBpMmMgYWRkcmVzcyAoMHglMDJ4KT9cbiIsIGFkZHIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CiAKIAkvKiBTZXRzIG5hbWUgKi8KIAlzbnByaW50Zihpci0+Yy5uYW1lLCBzaXplb2YoaXItPmMubmFtZSksICJpMmMgSVIgKCVzKSIsIG5hbWUpOwotCWlyLT5pcl9jb2Rlcz1pcl9jb2RlczsKKwlpci0+aXJfY29kZXMgPSBpcl9jb2RlczsKIAogCS8qIHJlZ2lzdGVyIGkyYyBkZXZpY2UKIAkgKiBBdCBkZXZpY2UgcmVnaXN0ZXIsIElSIGNvZGVzIG1heSBiZSBjaGFuZ2VkIHRvIGJlCiAJICogYm9hcmQgZGVwZW5kZW50LgogCSAqLwotCWkyY19hdHRhY2hfY2xpZW50KCZpci0+Yyk7CisJZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoJmlyLT5jKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKIAogCS8qIElmIElSIG5vdCBzdXBwb3J0ZWQgb3IgZGlzYWJsZWQsIHVucmVnaXN0ZXJzIGRyaXZlciAqLwogCWlmIChpci0+Z2V0X2tleSA9PSBOVUxMKSB7Ci0JCWkyY19kZXRhY2hfY2xpZW50KCZpci0+Yyk7Ci0JCWtmcmVlKGlyKTsKLQkJcmV0dXJuIC0xOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXRfZGV0YWNoOwogCX0KIAogCS8qIFBoeXMgYWRkciBjYW4gb25seSBiZSBzZXQgYWZ0ZXIgYXR0YWNoaW5nIChmb3IgaXItPmMuZGV2LmJ1c19pZCkgKi8KQEAgLTM4OSwxNSArMzkwLDE3IEBACiAJCSBpci0+Yy5kZXYuYnVzX2lkKTsKIAogCS8qIGluaXQgKyByZWdpc3RlciBpbnB1dCBkZXZpY2UgKi8KLQlpcl9pbnB1dF9pbml0KGlucHV0X2RldiwmaXItPmlyLGlyX3R5cGUsaXItPmlyX2NvZGVzKTsKKwlpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmlyLT5pciwgaXJfdHlwZSwgaXItPmlyX2NvZGVzKTsKIAlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSTJDOwogCWlucHV0X2Rldi0+bmFtZSAgICAgICA9IGlyLT5jLm5hbWU7CiAJaW5wdXRfZGV2LT5waHlzICAgICAgID0gaXItPnBoeXM7CiAKLQkvKiByZWdpc3RlciBldmVudCBkZXZpY2UgKi8KLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaXItPmlucHV0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZGV0YWNoOworCiAJcHJpbnRrKERFVk5BTUUgIjogJXMgZGV0ZWN0ZWQgYXQgJXMgWyVzXVxuIiwKLQkgICAgICAgaXItPmlucHV0LT5uYW1lLGlyLT5pbnB1dC0+cGh5cyxhZGFwLT5uYW1lKTsKKwkgICAgICAgaXItPmlucHV0LT5uYW1lLCBpci0+aW5wdXQtPnBoeXMsIGFkYXAtPm5hbWUpOwogCiAJLyogc3RhcnQgcG9sbGluZyB2aWEgZXZlbnRkICovCiAJSU5JVF9XT1JLKCZpci0+d29yaywgaXJfd29yayk7CkBAIC00MDcsNiArNDEwLDEzIEBACiAJc2NoZWR1bGVfd29yaygmaXItPndvcmspOwogCiAJcmV0dXJuIDA7CisKKyBlcnJfb3V0X2RldGFjaDoKKwlpMmNfZGV0YWNoX2NsaWVudCgmaXItPmMpOworIGVycl9vdXRfZnJlZToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKGlyKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGlyX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQpAQCAtNDE0LDcgKzQyNCw3IEBACiAJc3RydWN0IElSX2kyYyAqaXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCS8qIGtpbGwgb3V0c3RhbmRpbmcgcG9sbHMgKi8KLQlkZWxfdGltZXIoJmlyLT50aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJmlyLT50aW1lcik7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAogCS8qIHVucmVnaXN0ZXIgZGV2aWNlcyAqLwpAQCAtNDM5LDcgKzQ0OSw3IEBACiAJKi8KIAogCXN0YXRpYyBjb25zdCBpbnQgcHJvYmVfYnR0dltdID0geyAweDFhLCAweDE4LCAweDRiLCAweDY0LCAweDMwLCAtMX07Ci0Jc3RhdGljIGNvbnN0IGludCBwcm9iZV9zYWE3MTM0W10gPSB7IDB4N2EsIDB4NDcsIC0xIH07CisJc3RhdGljIGNvbnN0IGludCBwcm9iZV9zYWE3MTM0W10gPSB7IDB4N2EsIDB4NDcsIDB4NzEsIC0xIH07CiAJc3RhdGljIGNvbnN0IGludCBwcm9iZV9lbTI4WFhbXSA9IHsgMHgzMCwgMHg0NywgLTEgfTsKIAljb25zdCBpbnQgKnByb2JlID0gTlVMTDsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKaW5kZXggYzFhMzc3Zi4uYjZjZDIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCkBAIC03MTIsMTMgKzcxMiwxMyBAQAogCQkqaWFyZyA9IDA7CiAJCXN0YXR1cyA9IGtzMDEyN19yZWFkKGtzLCBLU19TVEFUKTsKIAkJaWYgKCEoc3RhdHVzICYgMHgyMCkpCQkgLyogTk9WSUQgbm90IHNldCAqLwotCQkJKmlhcmcgPSAoKmlhcmcgJiBERUNPREVSX1NUQVRVU19HT09EKTsKKwkJCSppYXJnID0gKCppYXJnIHwgREVDT0RFUl9TVEFUVVNfR09PRCk7CiAJCWlmICgoc3RhdHVzICYgMHgwMSkpCQkgICAgICAvKiBDTE9DSyBzZXQgKi8KLQkJCSppYXJnID0gKCppYXJnICYgREVDT0RFUl9TVEFUVVNfQ09MT1IpOworCQkJKmlhcmcgPSAoKmlhcmcgfCBERUNPREVSX1NUQVRVU19DT0xPUik7CiAJCWlmICgoc3RhdHVzICYgMHgwOCkpCQkgICAvKiBQQUxERVQgc2V0ICovCi0JCQkqaWFyZyA9ICgqaWFyZyAmIERFQ09ERVJfU1RBVFVTX1BBTCk7CisJCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX1BBTCk7CiAJCWVsc2UKLQkJCSppYXJnID0gKCppYXJnICYgREVDT0RFUl9TVEFUVVNfTlRTQyk7CisJCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX05UU0MpOwogCQlicmVhazsKIAogCS8vQ2F0Y2ggYW55IHVua25vd24gY29tbWFuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwppbmRleCBiMDgzMzM4Li42MTZhMzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwpAQCAtOTIzLDcgKzkyMyw3IEBACiAJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOwogCQlpZiAocC0+ZGVwdGggIT0gMTYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHAtPnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9ZVVY0MjIpCisJCWlmIChwLT5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfWVVWNDIyICYmIHAtPnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9ZVVlWKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAJCXNvbnlwaV9jYW1lcmFfY29tbWFuZChTT05ZUElfQ09NTUFORF9TRVRDQU1FUkFCUklHSFRORVNTLApAQCAtOTc4LDcgKzk3OCw3IEBACiAKIAkJaWYgKHZtLT5mcmFtZSA+PSBnYnVmZmVycyB8fCB2bS0+ZnJhbWUgPCAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICh2bS0+Zm9ybWF0ICE9IFZJREVPX1BBTEVUVEVfWVVWNDIyKQorCQlpZiAodm0tPmZvcm1hdCAhPSBWSURFT19QQUxFVFRFX1lVVjQyMiAmJiB2bS0+Zm9ybWF0ICE9IFZJREVPX1BBTEVUVEVfWVVZVikKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAodm0tPmhlaWdodCAqIHZtLT53aWR0aCAqIDIgPiBnYnVmc2l6ZSkKIAkJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCmluZGV4IGUxYjU2ZGMuLjJmYjlmZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKQEAgLTYzMywxMCArNjMzLDggQEAKIAkJCWlmICgoKHJ0LT5pbnB1dCA+PiAoNCArIGkgKiA0KSkgJiAweGYpID09IDApCiAJCQkJZXh0ZXJuX2lucHV0ID0gMDsKIAkJfQotCQlpZiAoZXh0ZXJuX2lucHV0KQotCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9FWFRFUk47Ci0JCWVsc2UKLQkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfQU1fREVURUNUOworCQlzdGF0ZS0+bW9kZSA9IGV4dGVybl9pbnB1dCA/IE1TUF9NT0RFX0VYVEVSTiA6IE1TUF9NT0RFX0FNX0RFVEVDVDsKKwkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBzY19pbiwgMCk7CiAJCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBzYzFfb3V0LCAxKTsKIAkJbXNwX3NldF9zY2FydChjbGllbnQsIHNjMl9vdXQsIDIpOwpAQCAtOTUxLDcgKzk0OSw3IEBACiAJaWYgKHRocmVhZF9mdW5jKSB7CiAJCXN0YXRlLT5rdGhyZWFkID0ga3RocmVhZF9ydW4odGhyZWFkX2Z1bmMsIGNsaWVudCwgIm1zcDM0eHgiKTsKIAotCQlpZiAoc3RhdGUtPmt0aHJlYWQgPT0gTlVMTCkKKwkJaWYgKElTX0VSUihzdGF0ZS0+a3RocmVhZCkpCiAJCQl2NGxfd2FybihjbGllbnQsICJrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXG4iKTsKIAkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYwppbmRleCA0YzdmODViLi5lMTgyMWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYwpAQCAtNDgzLDcgKzQ4Myw2IEBACiAJCQkvKiBubyBjYXJyaWVyIHNjYW4sIGp1c3QgdW5tdXRlICovCiAJCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAidGhyZWFkOiBubyBjYXJyaWVyIHNjYW5cbiIpOwogCQkJc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3MgPSAwOwotCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtODUxLDEyICs4NTAsMTUgQEAKIAkJc291cmNlID0gMTsgLyogc3RlcmVvIG9yIEF8QiAqLwogCQltYXRyaXggPSAweDIwOwogCQlicmVhazsKLQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6Ci0JZGVmYXVsdDoKIAkJc291cmNlID0gMzsgLyogc3RlcmVvIG9yIEEgKi8KIAkJbWF0cml4ID0gMHgwMDsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCWRlZmF1bHQ6CisJCXNvdXJjZSA9IDM7IC8qIHN0ZXJlbyBvciBBICovCisJCW1hdHJpeCA9IDB4MjA7CisJCWJyZWFrOwogCX0KIAogCWlmIChpbiA9PSBNU1BfRFNQX0lOX1RVTkVSKQpAQCAtMTAzMCw2ICsxMDMyLDkgQEAKIAlpbnQgaXNfc3RlcmVvID0gc3RhdHVzICYgMHg0MDsKIAlpbnQgb2xkcnggPSBzdGF0ZS0+cnhzdWJjaGFuczsKIAorCWlmIChzdGF0ZS0+bW9kZSA9PSBNU1BfTU9ERV9FWFRFUk4pCisJCXJldHVybiAwOworCiAJc3RhdGUtPnJ4c3ViY2hhbnMgPSAwOwogCWlmIChpc19zdGVyZW8pCiAJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKaW5kZXggYjBhZWE0MC4uMTUyY2M2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCkBAIC0xNjAsMTAgKzE2MCw2IEBACiAJCXByaW50aygibXhiOiBzYWE3MTExIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKChyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidHVuZXIiKSkgPCAwKSB7Ci0JCXByaW50aygibXhiOiB0dW5lciBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInRlYTY0MjAiKSkgPCAwKSB7CiAJCXByaW50aygibXhiOiB0ZWE2NDIwIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE3Niw2ICsxNzIsMTAgQEAKIAkJcHJpbnRrKCJteGI6IHRkYTk4NDAgaTJjIG1vZHVsZSBub3QgYXZhaWxhYmxlLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwlpZiAoKHJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKCJ0dW5lciIpKSA8IDApIHsKKwkJcHJpbnRrKCJteGI6IHR1bmVyIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlteGIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXhiKSwgR0ZQX0tFUk5FTCk7CiAJaWYoIE5VTEwgPT0gbXhiICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc2NzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkMGFkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMKQEAgLTAsMCArMSwxMzMzIEBACisvKgorICogQSBWNEwyIGRyaXZlciBmb3IgT21uaVZpc2lvbiBPVjc2NzAgY2FtZXJhcy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBPbmUgTGFwdG9wIFBlciBDaGlsZCBBc3NvY2lhdGlvbiwgSW5jLiAgV3JpdHRlbgorICogYnkgSm9uYXRoYW4gQ29yYmV0IHdpdGggc3Vic3RhbnRpYWwgaW5zcGlyYXRpb24gZnJvbSBNYXJrCisgKiBNY0NsZWxsYW5kJ3Mgb3ZjYW1jaGlwIGNvZGUuCisgKgorICogVGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisKK01PRFVMRV9BVVRIT1IoIkpvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgbG93LWxldmVsIGRyaXZlciBmb3IgT21uaVZpc2lvbiBvdjc2NzAgc2Vuc29ycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogQmFzaWMgd2luZG93IHNpemVzLiAgVGhlc2UgcHJvYmFibHkgYmVsb25nIHNvbWV3aGVyZSBtb3JlIGdsb2JhbGx5CisgKiB1c2VmdWwuCisgKi8KKyNkZWZpbmUgVkdBX1dJRFRICTY0MAorI2RlZmluZSBWR0FfSEVJR0hUCTQ4MAorI2RlZmluZSBRVkdBX1dJRFRICTMyMAorI2RlZmluZSBRVkdBX0hFSUdIVAkyNDAKKyNkZWZpbmUgQ0lGX1dJRFRICTM1MgorI2RlZmluZSBDSUZfSEVJR0hUCTI4OAorI2RlZmluZSBRQ0lGX1dJRFRICTE3NgorI2RlZmluZQlRQ0lGX0hFSUdIVAkxNDQKKworLyoKKyAqIE91ciBub21pbmFsIChkZWZhdWx0KSBmcmFtZSByYXRlLgorICovCisjZGVmaW5lIE9WNzY3MF9GUkFNRV9SQVRFIDMwCisKKy8qCisgKiBUaGUgNzY3MCBzaXRzIG9uIGkyYyB3aXRoIElEIDB4NDIKKyAqLworI2RlZmluZSBPVjc2NzBfSTJDX0FERFIgMHg0MgorCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUkVHX0dBSU4JMHgwMAkvKiBHYWluIGxvd2VyIDggYml0cyAocmVzdCBpbiB2cmVmKSAqLworI2RlZmluZSBSRUdfQkxVRQkweDAxCS8qIGJsdWUgZ2FpbiAqLworI2RlZmluZSBSRUdfUkVECQkweDAyCS8qIHJlZCBnYWluICovCisjZGVmaW5lIFJFR19WUkVGCTB4MDMJLyogUGllY2VzIG9mIEdBSU4sIFZTVEFSVCwgVlNUT1AgKi8KKyNkZWZpbmUgUkVHX0NPTTEJMHgwNAkvKiBDb250cm9sIDEgKi8KKyNkZWZpbmUgIENPTTFfQ0NJUjY1NgkgIDB4NDAgIC8qIENDSVI2NTYgZW5hYmxlICovCisjZGVmaW5lIFJFR19CQVZFCTB4MDUJLyogVS9CIEF2ZXJhZ2UgbGV2ZWwgKi8KKyNkZWZpbmUgUkVHX0diQVZFCTB4MDYJLyogWS9HYiBBdmVyYWdlIGxldmVsICovCisjZGVmaW5lIFJFR19BRUNISAkweDA3CS8qIEFFQyBNUyA1IGJpdHMgKi8KKyNkZWZpbmUgUkVHX1JBVkUJMHgwOAkvKiBWL1IgQXZlcmFnZSBsZXZlbCAqLworI2RlZmluZSBSRUdfQ09NMgkweDA5CS8qIENvbnRyb2wgMiAqLworI2RlZmluZSAgQ09NMl9TU0xFRVAJICAweDEwCS8qIFNvZnQgc2xlZXAgbW9kZSAqLworI2RlZmluZSBSRUdfUElECQkweDBhCS8qIFByb2R1Y3QgSUQgTVNCICovCisjZGVmaW5lIFJFR19WRVIJCTB4MGIJLyogUHJvZHVjdCBJRCBMU0IgKi8KKyNkZWZpbmUgUkVHX0NPTTMJMHgwYwkvKiBDb250cm9sIDMgKi8KKyNkZWZpbmUgIENPTTNfU1dBUAkgIDB4NDAJICAvKiBCeXRlIHN3YXAgKi8KKyNkZWZpbmUgIENPTTNfU0NBTEVFTgkgIDB4MDgJICAvKiBFbmFibGUgc2NhbGluZyAqLworI2RlZmluZSAgQ09NM19EQ1dFTgkgIDB4MDQJICAvKiBFbmFibGUgZG93bnNhbXAvY3JvcC93aW5kb3cgKi8KKyNkZWZpbmUgUkVHX0NPTTQJMHgwZAkvKiBDb250cm9sIDQgKi8KKyNkZWZpbmUgUkVHX0NPTTUJMHgwZQkvKiBBbGwgInJlc2VydmVkIiAqLworI2RlZmluZSBSRUdfQ09NNgkweDBmCS8qIENvbnRyb2wgNiAqLworI2RlZmluZSBSRUdfQUVDSAkweDEwCS8qIE1vcmUgYml0cyBvZiBBRUMgdmFsdWUgKi8KKyNkZWZpbmUgUkVHX0NMS1JDCTB4MTEJLyogQ2xvY2wgY29udHJvbCAqLworI2RlZmluZSAgIENMS19FWFQJICAweDQwCSAgLyogVXNlIGV4dGVybmFsIGNsb2NrIGRpcmVjdGx5ICovCisjZGVmaW5lICAgQ0xLX1NDQUxFCSAgMHgzZgkgIC8qIE1hc2sgZm9yIGludGVybmFsIGNsb2NrIHNjYWxlICovCisjZGVmaW5lIFJFR19DT003CTB4MTIJLyogQ29udHJvbCA3ICovCisjZGVmaW5lICAgQ09NN19SRVNFVAkgIDB4ODAJICAvKiBSZWdpc3RlciByZXNldCAqLworI2RlZmluZSAgIENPTTdfRk1UX01BU0sJICAweDM4CisjZGVmaW5lICAgQ09NN19GTVRfVkdBCSAgMHgwMAorI2RlZmluZQkgIENPTTdfRk1UX0NJRgkgIDB4MjAJICAvKiBDSUYgZm9ybWF0ICovCisjZGVmaW5lICAgQ09NN19GTVRfUVZHQQkgIDB4MTAJICAvKiBRVkdBIGZvcm1hdCAqLworI2RlZmluZSAgIENPTTdfRk1UX1FDSUYJICAweDA4CSAgLyogUUNJRiBmb3JtYXQgKi8KKyNkZWZpbmUJICBDT003X1JHQgkgIDB4MDQJICAvKiBiaXRzIDAgYW5kIDIgLSBSR0IgZm9ybWF0ICovCisjZGVmaW5lCSAgQ09NN19ZVVYJICAweDAwCSAgLyogWVVWICovCisjZGVmaW5lCSAgQ09NN19CQVlFUgkgIDB4MDEJICAvKiBCYXllciBmb3JtYXQgKi8KKyNkZWZpbmUJICBDT003X1BCQVlFUgkgIDB4MDUJICAvKiAiUHJvY2Vzc2VkIGJheWVyIiAqLworI2RlZmluZSBSRUdfQ09NOAkweDEzCS8qIENvbnRyb2wgOCAqLworI2RlZmluZSAgIENPTThfRkFTVEFFQwkgIDB4ODAJICAvKiBFbmFibGUgZmFzdCBBR0MvQUVDICovCisjZGVmaW5lICAgQ09NOF9BRUNTVEVQCSAgMHg0MAkgIC8qIFVubGltaXRlZCBBRUMgc3RlcCBzaXplICovCisjZGVmaW5lICAgQ09NOF9CRklMVAkgIDB4MjAJICAvKiBCYW5kIGZpbHRlciBlbmFibGUgKi8KKyNkZWZpbmUgICBDT004X0FHQwkgIDB4MDQJICAvKiBBdXRvIGdhaW4gZW5hYmxlICovCisjZGVmaW5lICAgQ09NOF9BV0IJICAweDAyCSAgLyogV2hpdGUgYmFsYW5jZSBlbmFibGUgKi8KKyNkZWZpbmUgICBDT004X0FFQwkgIDB4MDEJICAvKiBBdXRvIGV4cG9zdXJlIGVuYWJsZSAqLworI2RlZmluZSBSRUdfQ09NOQkweDE0CS8qIENvbnRyb2wgOSAgLSBnYWluIGNlaWxpbmcgKi8KKyNkZWZpbmUgUkVHX0NPTTEwCTB4MTUJLyogQ29udHJvbCAxMCAqLworI2RlZmluZSAgIENPTTEwX0hTWU5DCSAgMHg0MAkgIC8qIEhTWU5DIGluc3RlYWQgb2YgSFJFRiAqLworI2RlZmluZSAgIENPTTEwX1BDTEtfSEIJICAweDIwCSAgLyogU3VwcHJlc3MgUENMSyBvbiBob3JpeiBibGFuayAqLworI2RlZmluZSAgIENPTTEwX0hSRUZfUkVWICAweDA4CSAgLyogUmV2ZXJzZSBIUkVGICovCisjZGVmaW5lICAgQ09NMTBfVlNfTEVBRAkgIDB4MDQJICAvKiBWU1lOQyBvbiBjbG9jayBsZWFkaW5nIGVkZ2UgKi8KKyNkZWZpbmUgICBDT00xMF9WU19ORUcJICAweDAyCSAgLyogVlNZTkMgbmVnYXRpdmUgKi8KKyNkZWZpbmUgICBDT00xMF9IU19ORUcJICAweDAxCSAgLyogSFNZTkMgbmVnYXRpdmUgKi8KKyNkZWZpbmUgUkVHX0hTVEFSVAkweDE3CS8qIEhvcml6IHN0YXJ0IGhpZ2ggYml0cyAqLworI2RlZmluZSBSRUdfSFNUT1AJMHgxOAkvKiBIb3JpeiBzdG9wIGhpZ2ggYml0cyAqLworI2RlZmluZSBSRUdfVlNUQVJUCTB4MTkJLyogVmVydCBzdGFydCBoaWdoIGJpdHMgKi8KKyNkZWZpbmUgUkVHX1ZTVE9QCTB4MWEJLyogVmVydCBzdG9wIGhpZ2ggYml0cyAqLworI2RlZmluZSBSRUdfUFNIRlQJMHgxYgkvKiBQaXhlbCBkZWxheSBhZnRlciBIUkVGICovCisjZGVmaW5lIFJFR19NSURICTB4MWMJLyogTWFudWYuIElEIGhpZ2ggKi8KKyNkZWZpbmUgUkVHX01JREwJMHgxZAkvKiBNYW51Zi4gSUQgbG93ICovCisjZGVmaW5lIFJFR19NVkZQCTB4MWUJLyogTWlycm9yIC8gdmZsaXAgKi8KKyNkZWZpbmUgICBNVkZQX01JUlJPUgkgIDB4MjAJICAvKiBNaXJyb3IgaW1hZ2UgKi8KKyNkZWZpbmUgICBNVkZQX0ZMSVAJICAweDEwCSAgLyogVmVydGljYWwgZmxpcCAqLworCisjZGVmaW5lIFJFR19BRVcJCTB4MjQJLyogQUdDIHVwcGVyIGxpbWl0ICovCisjZGVmaW5lIFJFR19BRUIJCTB4MjUJLyogQUdDIGxvd2VyIGxpbWl0ICovCisjZGVmaW5lIFJFR19WUFQJCTB4MjYJLyogQUdDL0FFQyBmYXN0IG1vZGUgb3AgcmVnaW9uICovCisjZGVmaW5lIFJFR19IU1lTVAkweDMwCS8qIEhTWU5DIHJpc2luZyBlZGdlIGRlbGF5ICovCisjZGVmaW5lIFJFR19IU1lFTgkweDMxCS8qIEhTWU5DIGZhbGxpbmcgZWRnZSBkZWxheSAqLworI2RlZmluZSBSRUdfSFJFRgkweDMyCS8qIEhSRUYgcGllY2VzICovCisjZGVmaW5lIFJFR19UU0xCCTB4M2EJLyogbG90cyBvZiBzdHVmZiAqLworI2RlZmluZSAgIFRTTEJfWUxBU1QJICAweDA0CSAgLyogVVlWWSBvciBWWVVZIC0gc2VlIGNvbTEzICovCisjZGVmaW5lIFJFR19DT00xMQkweDNiCS8qIENvbnRyb2wgMTEgKi8KKyNkZWZpbmUgICBDT00xMV9OSUdIVAkgIDB4ODAJICAvKiBOSWdodCBtb2RlIGVuYWJsZSAqLworI2RlZmluZSAgIENPTTExX05NRlIJICAweDYwCSAgLyogVHdvIGJpdCBOTSBmcmFtZSByYXRlICovCisjZGVmaW5lICAgQ09NMTFfSFpBVVRPCSAgMHgxMAkgIC8qIEF1dG8gZGV0ZWN0IDUwLzYwIEh6ICovCisjZGVmaW5lCSAgQ09NMTFfNTBIWgkgIDB4MDgJICAvKiBNYW51YWwgNTBIeiBzZWxlY3QgKi8KKyNkZWZpbmUgICBDT00xMV9FWFAJICAweDAyCisjZGVmaW5lIFJFR19DT00xMgkweDNjCS8qIENvbnRyb2wgMTIgKi8KKyNkZWZpbmUgICBDT00xMl9IUkVGCSAgMHg4MAkgIC8qIEhSRUYgYWx3YXlzICovCisjZGVmaW5lIFJFR19DT00xMwkweDNkCS8qIENvbnRyb2wgMTMgKi8KKyNkZWZpbmUgICBDT00xM19HQU1NQQkgIDB4ODAJICAvKiBHYW1tYSBlbmFibGUgKi8KKyNkZWZpbmUJICBDT00xM19VVlNBVAkgIDB4NDAJICAvKiBVViBzYXR1cmF0aW9uIGF1dG8gYWRqdXN0bWVudCAqLworI2RlZmluZSAgIENPTTEzX1VWU1dBUAkgIDB4MDEJICAvKiBWIGJlZm9yZSBVIC0gdy9UU0xCICovCisjZGVmaW5lIFJFR19DT00xNAkweDNlCS8qIENvbnRyb2wgMTQgKi8KKyNkZWZpbmUgICBDT00xNF9EQ1dFTgkgIDB4MTAJICAvKiBEQ1cvUENMSy1zY2FsZSBlbmFibGUgKi8KKyNkZWZpbmUgUkVHX0VER0UJMHgzZgkvKiBFZGdlIGVuaGFuY2VtZW50IGZhY3RvciAqLworI2RlZmluZSBSRUdfQ09NMTUJMHg0MAkvKiBDb250cm9sIDE1ICovCisjZGVmaW5lICAgQ09NMTVfUjEwRjAJICAweDAwCSAgLyogRGF0YSByYW5nZSAxMCB0byBGMCAqLworI2RlZmluZQkgIENPTTE1X1IwMUZFCSAgMHg4MAkgIC8qICAgICAgICAgICAgMDEgdG8gRkUgKi8KKyNkZWZpbmUgICBDT00xNV9SMDBGRgkgIDB4YzAJICAvKiAgICAgICAgICAgIDAwIHRvIEZGICovCisjZGVmaW5lICAgQ09NMTVfUkdCNTY1CSAgMHgxMAkgIC8qIFJHQjU2NSBvdXRwdXQgKi8KKyNkZWZpbmUgICBDT00xNV9SR0I1NTUJICAweDMwCSAgLyogUkdCNTU1IG91dHB1dCAqLworI2RlZmluZSBSRUdfQ09NMTYJMHg0MQkvKiBDb250cm9sIDE2ICovCisjZGVmaW5lICAgQ09NMTZfQVdCR0FJTiAgIDB4MDgJICAvKiBBV0IgZ2FpbiBlbmFibGUgKi8KKyNkZWZpbmUgUkVHX0NPTTE3CTB4NDIJLyogQ29udHJvbCAxNyAqLworI2RlZmluZSAgIENPTTE3X0FFQ1dJTgkgIDB4YzAJICAvKiBBRUMgd2luZG93IC0gbXVzdCBtYXRjaCBDT000ICovCisjZGVmaW5lICAgQ09NMTdfQ0JBUgkgIDB4MDgJICAvKiBEU1AgQ29sb3IgYmFyICovCisKKy8qCisgKiBUaGlzIG1hdHJpeCBkZWZpbmVzIGhvdyB0aGUgY29sb3JzIGFyZSBnZW5lcmF0ZWQsIG11c3QgYmUKKyAqIHR3ZWFrZWQgdG8gYWRqdXN0IGh1ZSBhbmQgc2F0dXJhdGlvbi4KKyAqCisgKiBPcmRlcjogdi1yZWQsIHYtZ3JlZW4sIHYtYmx1ZSwgdS1yZWQsIHUtZ3JlZW4sIHUtYmx1ZQorICoKKyAqIFRoZXkgYXJlIG5pbmUtYml0IHNpZ25lZCBxdWFudGl0aWVzLCB3aXRoIHRoZSBzaWduIGJpdAorICogc3RvcmVkIGluIDB4NTguICBTaWduIGZvciB2LXJlZCBpcyBiaXQgMCwgYW5kIHVwIGZyb20gdGhlcmUuCisgKi8KKyNkZWZpbmUJUkVHX0NNQVRSSVhfQkFTRSAweDRmCisjZGVmaW5lICAgQ01BVFJJWF9MRU4gNgorI2RlZmluZSBSRUdfQ01BVFJJWF9TSUdOIDB4NTgKKworCisjZGVmaW5lIFJFR19CUklHSFQJMHg1NQkvKiBCcmlnaHRuZXNzICovCisjZGVmaW5lIFJFR19DT05UUkFTCTB4NTYJLyogQ29udHJhc3QgY29udHJvbCAqLworCisjZGVmaW5lIFJFR19HRklYCTB4NjkJLyogRml4IGdhaW4gY29udHJvbCAqLworCisjZGVmaW5lIFJFR19SR0I0NDQJMHg4YwkvKiBSR0IgNDQ0IGNvbnRyb2wgKi8KKyNkZWZpbmUgICBSNDQ0X0VOQUJMRQkgIDB4MDIJICAvKiBUdXJuIG9uIFJHQjQ0NCwgb3ZlcnJpZGVzIDV4NSAqLworI2RlZmluZSAgIFI0NDRfUkdCWAkgIDB4MDEJICAvKiBFbXB0eSBuaWJibGUgYXQgZW5kICovCisKKyNkZWZpbmUgUkVHX0hBRUNDMQkweDlmCS8qIEhpc3QgQUVDL0FHQyBjb250cm9sIDEgKi8KKyNkZWZpbmUgUkVHX0hBRUNDMgkweGEwCS8qIEhpc3QgQUVDL0FHQyBjb250cm9sIDIgKi8KKworI2RlZmluZSBSRUdfQkQ1ME1BWAkweGE1CS8qIDUwaHogYmFuZGluZyBzdGVwIGxpbWl0ICovCisjZGVmaW5lIFJFR19IQUVDQzMJMHhhNgkvKiBIaXN0IEFFQy9BR0MgY29udHJvbCAzICovCisjZGVmaW5lIFJFR19IQUVDQzQJMHhhNwkvKiBIaXN0IEFFQy9BR0MgY29udHJvbCA0ICovCisjZGVmaW5lIFJFR19IQUVDQzUJMHhhOAkvKiBIaXN0IEFFQy9BR0MgY29udHJvbCA1ICovCisjZGVmaW5lIFJFR19IQUVDQzYJMHhhOQkvKiBIaXN0IEFFQy9BR0MgY29udHJvbCA2ICovCisjZGVmaW5lIFJFR19IQUVDQzcJMHhhYQkvKiBIaXN0IEFFQy9BR0MgY29udHJvbCA3ICovCisjZGVmaW5lIFJFR19CRDYwTUFYCTB4YWIJLyogNjBoeiBiYW5kaW5nIHN0ZXAgbGltaXQgKi8KKworCisvKgorICogSW5mb3JtYXRpb24gd2UgbWFpbnRhaW4gYWJvdXQgYSBrbm93biBzZW5zb3IuCisgKi8KK3N0cnVjdCBvdjc2NzBfZm9ybWF0X3N0cnVjdDsgIC8qIGNvbWluZyBsYXRlciAqLworc3RydWN0IG92NzY3MF9pbmZvIHsKKwlzdHJ1Y3Qgb3Y3NjcwX2Zvcm1hdF9zdHJ1Y3QgKmZtdDsgIC8qIEN1cnJlbnQgZm9ybWF0ICovCisJdW5zaWduZWQgY2hhciBzYXQ7CQkvKiBTYXR1cmF0aW9uIHZhbHVlICovCisJaW50IGh1ZTsJCQkvKiBIdWUgdmFsdWUgKi8KK307CisKKworCisKKy8qCisgKiBUaGUgZGVmYXVsdCByZWdpc3RlciBzZXR0aW5ncywgYXMgb2J0YWluZWQgZnJvbSBPbW5pVmlzaW9uLiAgVGhlcmUKKyAqIGlzIHJlYWxseSBubyBtYWtpbmcgc2Vuc2Ugb2YgbW9zdCBvZiB0aGVzZSAtIGxvdHMgb2YgInJlc2VydmVkIiB2YWx1ZXMKKyAqIGFuZCBzdWNoLgorICoKKyAqIFRoZXNlIHNldHRpbmdzIGdpdmUgVkdBIFlVWVYuCisgKi8KKworc3RydWN0IHJlZ3ZhbF9saXN0IHsKKwl1bnNpZ25lZCBjaGFyIHJlZ19udW07CisJdW5zaWduZWQgY2hhciB2YWx1ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NjcwX2RlZmF1bHRfcmVnc1tdID0geworCXsgUkVHX0NPTTcsIENPTTdfUkVTRVQgfSwKKy8qCisgKiBDbG9jayBzY2FsZTogMyA9IDE1ZnBzCisgKiAgICAgICAgICAgICAgMiA9IDIwZnBzCisgKiAgICAgICAgICAgICAgMSA9IDMwZnBzCisgKi8KKwl7IFJFR19DTEtSQywgMHgxIH0sCS8qIE9WOiBjbG9jayBzY2FsZSAoMzAgZnBzKSAqLworCXsgUkVHX1RTTEIsICAweDA0IH0sCS8qIE9WICovCisJeyBSRUdfQ09NNywgMCB9LAkvKiBWR0EgKi8KKwkvKgorCSAqIFNldCB0aGUgaGFyZHdhcmUgd2luZG93LiAgVGhlc2UgdmFsdWVzIGZyb20gT1YgZG9uJ3QgZW50aXJlbHkKKwkgKiBtYWtlIHNlbnNlIC0gaHN0b3AgaXMgbGVzcyB0aGFuIGhzdGFydC4gIEJ1dCB0aGV5IHdvcmsuLi4KKwkgKi8KKwl7IFJFR19IU1RBUlQsIDB4MTMgfSwJeyBSRUdfSFNUT1AsIDB4MDEgfSwKKwl7IFJFR19IUkVGLCAweGI2IH0sCXsgUkVHX1ZTVEFSVCwgMHgwMiB9LAorCXsgUkVHX1ZTVE9QLCAweDdhIH0sCXsgUkVHX1ZSRUYsIDB4MGEgfSwKKworCXsgUkVHX0NPTTMsIDAgfSwJeyBSRUdfQ09NMTQsIDAgfSwKKwkvKiBNeXN0ZXJ5IHNjYWxpbmcgbnVtYmVycyAqLworCXsgMHg3MCwgMHgzYSB9LAkJeyAweDcxLCAweDM1IH0sCisJeyAweDcyLCAweDExIH0sCQl7IDB4NzMsIDB4ZjAgfSwKKwl7IDB4YTIsIDB4MDIgfSwJCXsgUkVHX0NPTTEwLCAweDAgfSwKKworCS8qIEdhbW1hIGN1cnZlIHZhbHVlcyAqLworCXsgMHg3YSwgMHgyMCB9LAkJeyAweDdiLCAweDEwIH0sCisJeyAweDdjLCAweDFlIH0sCQl7IDB4N2QsIDB4MzUgfSwKKwl7IDB4N2UsIDB4NWEgfSwJCXsgMHg3ZiwgMHg2OSB9LAorCXsgMHg4MCwgMHg3NiB9LAkJeyAweDgxLCAweDgwIH0sCisJeyAweDgyLCAweDg4IH0sCQl7IDB4ODMsIDB4OGYgfSwKKwl7IDB4ODQsIDB4OTYgfSwJCXsgMHg4NSwgMHhhMyB9LAorCXsgMHg4NiwgMHhhZiB9LAkJeyAweDg3LCAweGM0IH0sCisJeyAweDg4LCAweGQ3IH0sCQl7IDB4ODksIDB4ZTggfSwKKworCS8qIEFHQyBhbmQgQUVDIHBhcmFtZXRlcnMuICBOb3RlIHdlIHN0YXJ0IGJ5IGRpc2FibGluZyB0aG9zZSBmZWF0dXJlcywKKwkgICB0aGVuIHR1cm4gdGhlbSBvbmx5IGFmdGVyIHR3ZWFraW5nIHRoZSB2YWx1ZXMuICovCisJeyBSRUdfQ09NOCwgQ09NOF9GQVNUQUVDIHwgQ09NOF9BRUNTVEVQIHwgQ09NOF9CRklMVCB9LAorCXsgUkVHX0dBSU4sIDAgfSwJeyBSRUdfQUVDSCwgMCB9LAorCXsgUkVHX0NPTTQsIDB4NDAgfSwgLyogbWFnaWMgcmVzZXJ2ZWQgYml0ICovCisJeyBSRUdfQ09NOSwgMHgxOCB9LCAvKiA0eCBnYWluICsgbWFnaWMgcnN2ZCBiaXQgKi8KKwl7IFJFR19CRDUwTUFYLCAweDA1IH0sCXsgUkVHX0JENjBNQVgsIDB4MDcgfSwKKwl7IFJFR19BRVcsIDB4OTUgfSwJeyBSRUdfQUVCLCAweDMzIH0sCisJeyBSRUdfVlBULCAweGUzIH0sCXsgUkVHX0hBRUNDMSwgMHg3OCB9LAorCXsgUkVHX0hBRUNDMiwgMHg2OCB9LAl7IDB4YTEsIDB4MDMgfSwgLyogbWFnaWMgKi8KKwl7IFJFR19IQUVDQzMsIDB4ZDggfSwJeyBSRUdfSEFFQ0M0LCAweGQ4IH0sCisJeyBSRUdfSEFFQ0M1LCAweGYwIH0sCXsgUkVHX0hBRUNDNiwgMHg5MCB9LAorCXsgUkVHX0hBRUNDNywgMHg5NCB9LAorCXsgUkVHX0NPTTgsIENPTThfRkFTVEFFQ3xDT004X0FFQ1NURVB8Q09NOF9CRklMVHxDT004X0FHQ3xDT004X0FFQyB9LAorCisJLyogQWxtb3N0IGFsbCBvZiB0aGVzZSBhcmUgbWFnaWMgInJlc2VydmVkIiB2YWx1ZXMuICAqLworCXsgUkVHX0NPTTUsIDB4NjEgfSwJeyBSRUdfQ09NNiwgMHg0YiB9LAorCXsgMHgxNiwgMHgwMiB9LAkJeyBSRUdfTVZGUCwgMHgwN3xNVkZQX01JUlJPUiB9LAorCXsgMHgyMSwgMHgwMiB9LAkJeyAweDIyLCAweDkxIH0sCisJeyAweDI5LCAweDA3IH0sCQl7IDB4MzMsIDB4MGIgfSwKKwl7IDB4MzUsIDB4MGIgfSwJCXsgMHgzNywgMHgxZCB9LAorCXsgMHgzOCwgMHg3MSB9LAkJeyAweDM5LCAweDJhIH0sCisJeyBSRUdfQ09NMTIsIDB4NzggfSwJeyAweDRkLCAweDQwIH0sCisJeyAweDRlLCAweDIwIH0sCQl7IFJFR19HRklYLCAwIH0sCisJeyAweDZiLCAweDRhIH0sCQl7IDB4NzQsIDB4MTAgfSwKKwl7IDB4OGQsIDB4NGYgfSwJCXsgMHg4ZSwgMCB9LAorCXsgMHg4ZiwgMCB9LAkJeyAweDkwLCAwIH0sCisJeyAweDkxLCAwIH0sCQl7IDB4OTYsIDAgfSwKKwl7IDB4OWEsIDAgfSwJCXsgMHhiMCwgMHg4NCB9LAorCXsgMHhiMSwgMHgwYyB9LAkJeyAweGIyLCAweDBlIH0sCisJeyAweGIzLCAweDgyIH0sCQl7IDB4YjgsIDB4MGEgfSwKKworCS8qIE1vcmUgcmVzZXJ2ZWQgbWFnaWMsIHNvbWUgb2Ygd2hpY2ggdHdlYWtzIHdoaXRlIGJhbGFuY2UgKi8KKwl7IDB4NDMsIDB4MGEgfSwJCXsgMHg0NCwgMHhmMCB9LAorCXsgMHg0NSwgMHgzNCB9LAkJeyAweDQ2LCAweDU4IH0sCisJeyAweDQ3LCAweDI4IH0sCQl7IDB4NDgsIDB4M2EgfSwKKwl7IDB4NTksIDB4ODggfSwJCXsgMHg1YSwgMHg4OCB9LAorCXsgMHg1YiwgMHg0NCB9LAkJeyAweDVjLCAweDY3IH0sCisJeyAweDVkLCAweDQ5IH0sCQl7IDB4NWUsIDB4MGUgfSwKKwl7IDB4NmMsIDB4MGEgfSwJCXsgMHg2ZCwgMHg1NSB9LAorCXsgMHg2ZSwgMHgxMSB9LAkJeyAweDZmLCAweDlmIH0sIC8qICI5ZSBmb3IgYWR2YW5jZSBBV0IiICovCisJeyAweDZhLCAweDQwIH0sCQl7IFJFR19CTFVFLCAweDQwIH0sCisJeyBSRUdfUkVELCAweDYwIH0sCisJeyBSRUdfQ09NOCwgQ09NOF9GQVNUQUVDfENPTThfQUVDU1RFUHxDT004X0JGSUxUfENPTThfQUdDfENPTThfQUVDfENPTThfQVdCIH0sCisKKwkvKiBNYXRyaXggY29lZmZpY2llbnRzICovCisJeyAweDRmLCAweDgwIH0sCQl7IDB4NTAsIDB4ODAgfSwKKwl7IDB4NTEsIDAgfSwJCXsgMHg1MiwgMHgyMiB9LAorCXsgMHg1MywgMHg1ZSB9LAkJeyAweDU0LCAweDgwIH0sCisJeyAweDU4LCAweDllIH0sCisKKwl7IFJFR19DT00xNiwgQ09NMTZfQVdCR0FJTiB9LAl7IFJFR19FREdFLCAwIH0sCisJeyAweDc1LCAweDA1IH0sCQl7IDB4NzYsIDB4ZTEgfSwKKwl7IDB4NGMsIDAgfSwJCXsgMHg3NywgMHgwMSB9LAorCXsgUkVHX0NPTTEzLCAweGMzIH0sCXsgMHg0YiwgMHgwOSB9LAorCXsgMHhjOSwgMHg2MCB9LAkJeyBSRUdfQ09NMTYsIDB4MzggfSwKKwl7IDB4NTYsIDB4NDAgfSwKKworCXsgMHgzNCwgMHgxMSB9LAkJeyBSRUdfQ09NMTEsIENPTTExX0VYUHxDT00xMV9IWkFVVE8gfSwKKwl7IDB4YTQsIDB4ODggfSwJCXsgMHg5NiwgMCB9LAorCXsgMHg5NywgMHgzMCB9LAkJeyAweDk4LCAweDIwIH0sCisJeyAweDk5LCAweDMwIH0sCQl7IDB4OWEsIDB4ODQgfSwKKwl7IDB4OWIsIDB4MjkgfSwJCXsgMHg5YywgMHgwMyB9LAorCXsgMHg5ZCwgMHg0YyB9LAkJeyAweDllLCAweDNmIH0sCisJeyAweDc4LCAweDA0IH0sCisKKwkvKiBFeHRyYS13ZWlyZCBzdHVmZi4gIFNvbWUgc29ydCBvZiBtdWx0aXBsZXhvciByZWdpc3RlciAqLworCXsgMHg3OSwgMHgwMSB9LAkJeyAweGM4LCAweGYwIH0sCisJeyAweDc5LCAweDBmIH0sCQl7IDB4YzgsIDB4MDAgfSwKKwl7IDB4NzksIDB4MTAgfSwJCXsgMHhjOCwgMHg3ZSB9LAorCXsgMHg3OSwgMHgwYSB9LAkJeyAweGM4LCAweDgwIH0sCisJeyAweDc5LCAweDBiIH0sCQl7IDB4YzgsIDB4MDEgfSwKKwl7IDB4NzksIDB4MGMgfSwJCXsgMHhjOCwgMHgwZiB9LAorCXsgMHg3OSwgMHgwZCB9LAkJeyAweGM4LCAweDIwIH0sCisJeyAweDc5LCAweDA5IH0sCQl7IDB4YzgsIDB4ODAgfSwKKwl7IDB4NzksIDB4MDIgfSwJCXsgMHhjOCwgMHhjMCB9LAorCXsgMHg3OSwgMHgwMyB9LAkJeyAweGM4LCAweDQwIH0sCisJeyAweDc5LCAweDA1IH0sCQl7IDB4YzgsIDB4MzAgfSwKKwl7IDB4NzksIDB4MjYgfSwKKworCXsgMHhmZiwgMHhmZiB9LAkvKiBFTkQgTUFSS0VSICovCit9OworCisKKy8qCisgKiBIZXJlIHdlJ2xsIHRyeSB0byBlbmNhcHN1bGF0ZSB0aGUgY2hhbmdlcyBmb3IganVzdCB0aGUgb3V0cHV0CisgKiB2aWRlbyBmb3JtYXQuCisgKgorICogUkdCNjU2IGFuZCBZVVY0MjIgY29tZSBmcm9tIE9WOyBSR0I0NDQgaXMgaG9tZWJyZXdlZC4KKyAqCisgKiBJTVBPUlRBTlQgUlVMRTogdGhlIGZpcnN0IGVudHJ5IG11c3QgYmUgZm9yIENPTTcsIHNlZSBvdjc2NzBfc19mbXQgZm9yIHdoeS4KKyAqLworCisKK3N0YXRpYyBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NjcwX2ZtdF95dXY0MjJbXSA9IHsKKwl7IFJFR19DT003LCAweDAgfSwgIC8qIFNlbGVjdHMgWVVWIG1vZGUgKi8KKwl7IFJFR19SR0I0NDQsIDAgfSwJLyogTm8gUkdCNDQ0IHBsZWFzZSAqLworCXsgUkVHX0NPTTEsIDAgfSwKKwl7IFJFR19DT00xNSwgQ09NMTVfUjAwRkYgfSwKKwl7IFJFR19DT005LCAweDE4IH0sIC8qIDR4IGdhaW4gY2VpbGluZzsgMHg4IGlzIHJlc2VydmVkIGJpdCAqLworCXsgMHg0ZiwgMHg4MCB9LCAJLyogIm1hdHJpeCBjb2VmZmljaWVudCAxIiAqLworCXsgMHg1MCwgMHg4MCB9LCAJLyogIm1hdHJpeCBjb2VmZmljaWVudCAyIiAqLworCXsgMHg1MSwgMCAgICB9LAkJLyogdmIgKi8KKwl7IDB4NTIsIDB4MjIgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgNCIgKi8KKwl7IDB4NTMsIDB4NWUgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgNSIgKi8KKwl7IDB4NTQsIDB4ODAgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgNiIgKi8KKwl7IFJFR19DT00xMywgQ09NMTNfR0FNTUF8Q09NMTNfVVZTQVQgfSwKKwl7IDB4ZmYsIDB4ZmYgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NjcwX2ZtdF9yZ2I1NjVbXSA9IHsKKwl7IFJFR19DT003LCBDT003X1JHQiB9LAkvKiBTZWxlY3RzIFJHQiBtb2RlICovCisJeyBSRUdfUkdCNDQ0LCAwIH0sCS8qIE5vIFJHQjQ0NCBwbGVhc2UgKi8KKwl7IFJFR19DT00xLCAweDAgfSwKKwl7IFJFR19DT00xNSwgQ09NMTVfUkdCNTY1IH0sCisJeyBSRUdfQ09NOSwgMHgzOCB9LCAJLyogMTZ4IGdhaW4gY2VpbGluZzsgMHg4IGlzIHJlc2VydmVkIGJpdCAqLworCXsgMHg0ZiwgMHhiMyB9LCAJLyogIm1hdHJpeCBjb2VmZmljaWVudCAxIiAqLworCXsgMHg1MCwgMHhiMyB9LCAJLyogIm1hdHJpeCBjb2VmZmljaWVudCAyIiAqLworCXsgMHg1MSwgMCAgICB9LAkJLyogdmIgKi8KKwl7IDB4NTIsIDB4M2QgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgNCIgKi8KKwl7IDB4NTMsIDB4YTcgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgNSIgKi8KKwl7IDB4NTQsIDB4ZTQgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgNiIgKi8KKwl7IFJFR19DT00xMywgQ09NMTNfR0FNTUF8Q09NMTNfVVZTQVQgfSwKKwl7IDB4ZmYsIDB4ZmYgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NjcwX2ZtdF9yZ2I0NDRbXSA9IHsKKwl7IFJFR19DT003LCBDT003X1JHQiB9LAkvKiBTZWxlY3RzIFJHQiBtb2RlICovCisJeyBSRUdfUkdCNDQ0LCBSNDQ0X0VOQUJMRSB9LAkvKiBFbmFibGUgeHh4eHJycnIgZ2dnZ2JiYmIgKi8KKwl7IFJFR19DT00xLCAweDQwIH0sCS8qIE1hZ2ljIHJlc2VydmVkIGJpdCAqLworCXsgUkVHX0NPTTE1LCBDT00xNV9SMDFGRXxDT00xNV9SR0I1NjUgfSwgLyogRGF0YSByYW5nZSBuZWVkZWQ/ICovCisJeyBSRUdfQ09NOSwgMHgzOCB9LCAJLyogMTZ4IGdhaW4gY2VpbGluZzsgMHg4IGlzIHJlc2VydmVkIGJpdCAqLworCXsgMHg0ZiwgMHhiMyB9LCAJLyogIm1hdHJpeCBjb2VmZmljaWVudCAxIiAqLworCXsgMHg1MCwgMHhiMyB9LCAJLyogIm1hdHJpeCBjb2VmZmljaWVudCAyIiAqLworCXsgMHg1MSwgMCAgICB9LAkJLyogdmIgKi8KKwl7IDB4NTIsIDB4M2QgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgNCIgKi8KKwl7IDB4NTMsIDB4YTcgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgNSIgKi8KKwl7IDB4NTQsIDB4ZTQgfSwgCS8qICJtYXRyaXggY29lZmZpY2llbnQgNiIgKi8KKwl7IFJFR19DT00xMywgQ09NMTNfR0FNTUF8Q09NMTNfVVZTQVR8MHgyIH0sICAvKiBNYWdpYyByc3ZkIGJpdCAqLworCXsgMHhmZiwgMHhmZiB9LAorfTsKKworCisKKworLyoKKyAqIExvdy1sZXZlbCByZWdpc3RlciBJL08uCisgKi8KKworc3RhdGljIGludCBvdjc2NzBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY2hhciByZWcsCisJCXVuc2lnbmVkIGNoYXIgKnZhbHVlKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoYywgcmVnKTsKKwlpZiAocmV0ID49IDApCisJCSp2YWx1ZSA9ICh1bnNpZ25lZCBjaGFyKSByZXQ7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IG92NzY3MF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY2hhciByZWcsCisJCXVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoYywgcmVnLCB2YWx1ZSk7Cit9CisKKworLyoKKyAqIFdyaXRlIGEgbGlzdCBvZiByZWdpc3RlciBzZXR0aW5nczsgZmYvZmYgc3RvcHMgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgb3Y3NjcwX3dyaXRlX2FycmF5KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgcmVndmFsX2xpc3QgKnZhbHMpCit7CisJd2hpbGUgKHZhbHMtPnJlZ19udW0gIT0gMHhmZiB8fCB2YWxzLT52YWx1ZSAhPSAweGZmKSB7CisJCWludCByZXQgPSBvdjc2NzBfd3JpdGUoYywgdmFscy0+cmVnX251bSwgdmFscy0+dmFsdWUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXZhbHMrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFN0dWZmIHRoYXQga25vd3MgYWJvdXQgdGhlIHNlbnNvci4KKyAqLworc3RhdGljIHZvaWQgb3Y3NjcwX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0NPTTcsIENPTTdfUkVTRVQpOworCW1zbGVlcCgxKTsKK30KKworCitzdGF0aWMgaW50IG92NzY3MF9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIG92NzY3MF93cml0ZV9hcnJheShjbGllbnQsIG92NzY3MF9kZWZhdWx0X3JlZ3MpOworfQorCisKKworc3RhdGljIGludCBvdjc2NzBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJdW5zaWduZWQgY2hhciB2OworCWludCByZXQ7CisKKwlyZXQgPSBvdjc2NzBfaW5pdChjbGllbnQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01JREgsICZ2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAodiAhPSAweDdmKSAvKiBPViBtYW51Zi4gaWQuICovCisJCXJldHVybiAtRU5PREVWOworCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01JREwsICZ2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAodiAhPSAweGEyKQorCQlyZXR1cm4gLUVOT0RFVjsKKwkvKgorCSAqIE9LLCB3ZSBrbm93IHdlIGhhdmUgYW4gT21uaVZpc2lvbiBjaGlwLi4uYnV0IHdoaWNoIG9uZT8KKwkgKi8KKwlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19QSUQsICZ2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAodiAhPSAweDc2KSAgLyogUElEICsgVkVSID0gMHg3NiAvIDB4NzMgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfVkVSLCAmdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHYgIT0gMHg3MykgIC8qIFBJRCArIFZFUiA9IDB4NzYgLyAweDczICovCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiAwOworfQorCisKKy8qCisgKiBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmlkZW8gZGF0YSBmb3JtYXQuICBUaGUgY29sb3IgbWF0cml4CisgKiBpcyBkZWVwbHkgdGllZCBpbnRvIHRoZSBmb3JtYXQsIHNvIGtlZXAgdGhlIHJlbGV2YW50IHZhbHVlcyBoZXJlLgorICogVGhlIG1hZ2ljIG1hdHJpeCBudWJtZXJzIGNvbWUgZnJvbSBPbW5pVmlzaW9uLgorICovCitzdGF0aWMgc3RydWN0IG92NzY3MF9mb3JtYXRfc3RydWN0IHsKKwlfX3U4ICpkZXNjOworCV9fdTMyIHBpeGVsZm9ybWF0OworCXN0cnVjdCByZWd2YWxfbGlzdCAqcmVnczsKKwlpbnQgY21hdHJpeFtDTUFUUklYX0xFTl07Cit9IG92NzY3MF9mb3JtYXRzW10gPSB7CisJeworCQkuZGVzYwkJPSAiWVVZViA0OjI6MiIsCisJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCQkucmVncyAJCT0gb3Y3NjcwX2ZtdF95dXY0MjIsCisJCS5jbWF0cml4CT0geyAxMjgsIC0xMjgsIDAsIC0zNCwgLTk0LCAxMjggfSwKKwl9LAorCXsKKwkJLmRlc2MJCT0gIlJHQiA0NDQiLAorCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfUkdCNDQ0LAorCQkucmVncwkJPSBvdjc2NzBfZm10X3JnYjQ0NCwKKwkJLmNtYXRyaXgJPSB7IDE3OSwgLTE3OSwgMCwgLTYxLCAtMTc2LCAyMjggfSwKKwl9LAorCXsKKwkJLmRlc2MJCT0gIlJHQiA1NjUiLAorCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfUkdCNTY1LAorCQkucmVncwkJPSBvdjc2NzBfZm10X3JnYjU2NSwKKwkJLmNtYXRyaXgJPSB7IDE3OSwgLTE3OSwgMCwgLTYxLCAtMTc2LCAyMjggfSwKKwl9LAorfTsKKyNkZWZpbmUgTl9PVjc2NzBfRk1UUyAoc2l6ZW9mKG92NzY3MF9mb3JtYXRzKS9zaXplb2Yob3Y3NjcwX2Zvcm1hdHNbMF0pKQorCisvKgorICogQWxsIGZvcm1hdHMgd2Ugc3VwcG9ydCBhcmUgMiBieXRlcy9waXhlbC4KKyAqLworI2RlZmluZSBCWVRFU19QRVJfUElYRUwgMgorCisvKgorICogVGhlbiB0aGVyZSBpcyB0aGUgaXNzdWUgb2Ygd2luZG93IHNpemVzLiAgVHJ5IHRvIGNhcHR1cmUgdGhlIGluZm8gaGVyZS4KKyAqLworCisvKgorICogUUNJRiBtb2RlIGlzIGRvbmUgKGJ5IE9WKSBpbiBhIHZlcnkgc3RyYW5nZSB3YXkgLSBpdCBhY3R1YWxseSBsb29rcyBsaWtlCisgKiBWR0Egd2l0aCB3ZWlyZCBzY2FsaW5nIG9wdGlvbnMgLSB0aGV5IGRvICpub3QqIHVzZSB0aGUgY2FubmVkIFFDSUYgbW9kZQorICogd2hpY2ggaXMgYWxsZWdlZGx5IHByb3ZpZGVkIGJ5IHRoZSBzZW5zb3IuICBTbyBoZXJlJ3MgdGhlIHdlaXJkIHJlZ2lzdGVyCisgKiBzZXR0aW5ncy4KKyAqLworc3RhdGljIHN0cnVjdCByZWd2YWxfbGlzdCBvdjc2NzBfcWNpZl9yZWdzW10gPSB7CisJeyBSRUdfQ09NMywgQ09NM19TQ0FMRUVOfENPTTNfRENXRU4gfSwKKwl7IFJFR19DT00zLCBDT00zX0RDV0VOIH0sCisJeyBSRUdfQ09NMTQsIENPTTE0X0RDV0VOIHwgMHgwMX0sCisJeyAweDczLCAweGYxIH0sCisJeyAweGEyLCAweDUyIH0sCisJeyAweDdiLCAweDFjIH0sCisJeyAweDdjLCAweDI4IH0sCisJeyAweDdkLCAweDNjIH0sCisJeyAweDdmLCAweDY5IH0sCisJeyBSRUdfQ09NOSwgMHgzOCB9LAorCXsgMHhhMSwgMHgwYiB9LAorCXsgMHg3NCwgMHgxOSB9LAorCXsgMHg5YSwgMHg4MCB9LAorCXsgMHg0MywgMHgxNCB9LAorCXsgUkVHX0NPTTEzLCAweGMwIH0sCisJeyAweGZmLCAweGZmIH0sCit9OworCitzdGF0aWMgc3RydWN0IG92NzY3MF93aW5fc2l6ZSB7CisJaW50CXdpZHRoOworCWludAloZWlnaHQ7CisJdW5zaWduZWQgY2hhciBjb203X2JpdDsKKwlpbnQJaHN0YXJ0OwkJLyogU3RhcnQvc3RvcCB2YWx1ZXMgZm9yIHRoZSBjYW1lcmEuICBOb3RlICovCisJaW50CWhzdG9wOwkJLyogdGhhdCB0aGV5IGRvIG5vdCBhbHdheXMgbWFrZSBjb21wbGV0ZSAqLworCWludAl2c3RhcnQ7CQkvKiBzZW5zZSB0byBodW1hbnMsIGJ1dCBldmlkZW50bHkgdGhlIHNlbnNvciAqLworCWludAl2c3RvcDsJCS8qIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nLi4uICovCisJc3RydWN0IHJlZ3ZhbF9saXN0ICpyZWdzOyAvKiBSZWdzIHRvIHR3ZWFrICovCisvKiBoL3ZyZWYgc3R1ZmYgKi8KK30gb3Y3NjcwX3dpbl9zaXplc1tdID0geworCS8qIFZHQSAqLworCXsKKwkJLndpZHRoCQk9IFZHQV9XSURUSCwKKwkJLmhlaWdodAkJPSBWR0FfSEVJR0hULAorCQkuY29tN19iaXQJPSBDT003X0ZNVF9WR0EsCisJCS5oc3RhcnQJCT0gMTU4LAkJLyogVGhlc2UgdmFsdWVzIGZyb20gKi8KKwkJLmhzdG9wCQk9ICAxNCwJCS8qIE9tbml2aXNpb24gKi8KKwkJLnZzdGFydAkJPSAgMTAsCisJCS52c3RvcAkJPSA0OTAsCisJCS5yZWdzIAkJPSBOVUxMLAorCX0sCisJLyogQ0lGICovCisJeworCQkud2lkdGgJCT0gQ0lGX1dJRFRILAorCQkuaGVpZ2h0CQk9IENJRl9IRUlHSFQsCisJCS5jb203X2JpdAk9IENPTTdfRk1UX0NJRiwKKwkJLmhzdGFydAkJPSAxNzAsCQkvKiBFbXBpcmljYWxseSBkZXRlcm1pbmVkICovCisJCS5oc3RvcAkJPSAgOTAsCisJCS52c3RhcnQJCT0gIDE0LAorCQkudnN0b3AJCT0gNDk0LAorCQkucmVncyAJCT0gTlVMTCwKKwl9LAorCS8qIFFWR0EgKi8KKwl7CisJCS53aWR0aAkJPSBRVkdBX1dJRFRILAorCQkuaGVpZ2h0CQk9IFFWR0FfSEVJR0hULAorCQkuY29tN19iaXQJPSBDT003X0ZNVF9RVkdBLAorCQkuaHN0YXJ0CQk9IDE2NCwJCS8qIEVtcGlyaWNhbGx5IGRldGVybWluZWQgKi8KKwkJLmhzdG9wCQk9ICAyMCwKKwkJLnZzdGFydAkJPSAgMTQsCisJCS52c3RvcAkJPSA0OTQsCisJCS5yZWdzIAkJPSBOVUxMLAorCX0sCisJLyogUUNJRiAqLworCXsKKwkJLndpZHRoCQk9IFFDSUZfV0lEVEgsCisJCS5oZWlnaHQJCT0gUUNJRl9IRUlHSFQsCisJCS5jb203X2JpdAk9IENPTTdfRk1UX1ZHQSwgLyogc2VlIGNvbW1lbnQgYWJvdmUgKi8KKwkJLmhzdGFydAkJPSA0NTYsCQkvKiBFbXBpcmljYWxseSBkZXRlcm1pbmVkICovCisJCS5oc3RvcAkJPSAgMjQsCisJCS52c3RhcnQJCT0gIDE0LAorCQkudnN0b3AJCT0gNDk0LAorCQkucmVncyAJCT0gb3Y3NjcwX3FjaWZfcmVncywKKwl9LAorfTsKKworI2RlZmluZSBOX1dJTl9TSVpFUyAoc2l6ZW9mKG92NzY3MF93aW5fc2l6ZXMpL3NpemVvZihvdjc2NzBfd2luX3NpemVzWzBdKSkKKworCisvKgorICogU3RvcmUgYSBzZXQgb2Ygc3RhcnQvc3RvcCB2YWx1ZXMgaW50byB0aGUgY2FtZXJhLgorICovCitzdGF0aWMgaW50IG92NzY3MF9zZXRfaHcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGhzdGFydCwgaW50IGhzdG9wLAorCQlpbnQgdnN0YXJ0LCBpbnQgdnN0b3ApCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIHY7CisvKgorICogSG9yaXpvbnRhbDogMTEgYml0cywgdG9wIDggbGl2ZSBpbiBoc3RhcnQgYW5kIGhzdG9wLiAgQm90dG9tIDMgb2YKKyAqIGhzdGFydCBhcmUgaW4gaHJlZlsyOjBdLCBib3R0b20gMyBvZiBoc3RvcCBpbiBocmVmWzU6M10uICBUaGVyZSBpcworICogYSBteXN0ZXJ5ICJlZGdlIG9mZnNldCIgdmFsdWUgaW4gdGhlIHRvcCB0d28gYml0cyBvZiBocmVmLgorICovCisJcmV0ID0gIG92NzY3MF93cml0ZShjbGllbnQsIFJFR19IU1RBUlQsIChoc3RhcnQgPj4gMykgJiAweGZmKTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0hTVE9QLCAoaHN0b3AgPj4gMykgJiAweGZmKTsKKwlyZXQgKz0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfSFJFRiwgJnYpOworCXYgPSAodiAmIDB4YzApIHwgKChoc3RvcCAmIDB4NykgPDwgMykgfCAoaHN0YXJ0ICYgMHg3KTsKKwltc2xlZXAoMTApOworCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfSFJFRiwgdik7CisvKgorICogVmVydGljYWw6IHNpbWlsYXIgYXJyYW5nZW1lbnQsIGJ1dCBvbmx5IDEwIGJpdHMuCisgKi8KKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX1ZTVEFSVCwgKHZzdGFydCA+PiAyKSAmIDB4ZmYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfVlNUT1AsICh2c3RvcCA+PiAyKSAmIDB4ZmYpOworCXJldCArPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19WUkVGLCAmdik7CisJdiA9ICh2ICYgMHhmMCkgfCAoKHZzdG9wICYgMHgzKSA8PCAyKSB8ICh2c3RhcnQgJiAweDMpOworCW1zbGVlcCgxMCk7CisJcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19WUkVGLCB2KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgb3Y3NjcwX2VudW1fZm10KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCit7CisJc3RydWN0IG92NzY3MF9mb3JtYXRfc3RydWN0ICpvZm10OworCisJaWYgKGZtdC0+aW5kZXggPj0gTl9PVjc2NzBfRk1UUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvZm10ID0gb3Y3NjcwX2Zvcm1hdHMgKyBmbXQtPmluZGV4OworCWZtdC0+ZmxhZ3MgPSAwOworCXN0cmNweShmbXQtPmRlc2NyaXB0aW9uLCBvZm10LT5kZXNjKTsKKwlmbXQtPnBpeGVsZm9ybWF0ID0gb2ZtdC0+cGl4ZWxmb3JtYXQ7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBvdjc2NzBfdHJ5X2ZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsCisJCXN0cnVjdCBvdjc2NzBfZm9ybWF0X3N0cnVjdCAqKnJldF9mbXQsCisJCXN0cnVjdCBvdjc2NzBfd2luX3NpemUgKipyZXRfd3NpemUpCit7CisJaW50IGluZGV4OworCXN0cnVjdCBvdjc2NzBfd2luX3NpemUgKndzaXplOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmbXQtPmZtdC5waXg7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOX09WNzY3MF9GTVRTOyBpbmRleCsrKQorCQlpZiAob3Y3NjcwX2Zvcm1hdHNbaW5kZXhdLnBpeGVsZm9ybWF0ID09IHBpeC0+cGl4ZWxmb3JtYXQpCisJCQlicmVhazsKKwlpZiAoaW5kZXggPj0gTl9PVjc2NzBfRk1UUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJldF9mbXQgIT0gTlVMTCkKKwkJKnJldF9mbXQgPSBvdjc2NzBfZm9ybWF0cyArIGluZGV4OworCS8qCisJICogRmllbGRzOiB0aGUgT1YgZGV2aWNlcyBjbGFpbSB0byBiZSBwcm9ncmVzc2l2ZS4KKwkgKi8KKwlpZiAocGl4LT5maWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkKKwkJcGl4LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwllbHNlIGlmIChwaXgtPmZpZWxkICE9IFY0TDJfRklFTERfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyoKKwkgKiBSb3VuZCByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZSBkb3duIHRvIHRoZSBuZWFyZXN0CisJICogd2Ugc3VwcG9ydCwgYnV0IG5vdCBiZWxvdyB0aGUgc21hbGxlc3QuCisJICovCisJZm9yICh3c2l6ZSA9IG92NzY3MF93aW5fc2l6ZXM7IHdzaXplIDwgb3Y3NjcwX3dpbl9zaXplcyArIE5fV0lOX1NJWkVTOworCSAgICAgd3NpemUrKykKKwkJaWYgKHBpeC0+d2lkdGggPj0gd3NpemUtPndpZHRoICYmIHBpeC0+aGVpZ2h0ID49IHdzaXplLT5oZWlnaHQpCisJCQlicmVhazsKKwlpZiAod3NpemUgPj0gb3Y3NjcwX3dpbl9zaXplcyArIE5fV0lOX1NJWkVTKQorCQl3c2l6ZS0tOyAgIC8qIFRha2UgdGhlIHNtYWxsZXN0IG9uZSAqLworCWlmIChyZXRfd3NpemUgIT0gTlVMTCkKKwkJKnJldF93c2l6ZSA9IHdzaXplOworCS8qCisJICogTm90ZSB0aGUgc2l6ZSB3ZSdsbCBhY3R1YWxseSBoYW5kbGUuCisJICovCisJcGl4LT53aWR0aCA9IHdzaXplLT53aWR0aDsKKwlwaXgtPmhlaWdodCA9IHdzaXplLT5oZWlnaHQ7CisJcGl4LT5ieXRlc3BlcmxpbmUgPSBwaXgtPndpZHRoKkJZVEVTX1BFUl9QSVhFTDsKKwlwaXgtPnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0KnBpeC0+Ynl0ZXNwZXJsaW5lOworCXJldHVybiAwOworfQorCisvKgorICogU2V0IGEgZm9ybWF0LgorICovCitzdGF0aWMgaW50IG92NzY3MF9zX2ZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb3Y3NjcwX2Zvcm1hdF9zdHJ1Y3QgKm92Zm10OworCXN0cnVjdCBvdjc2NzBfd2luX3NpemUgKndzaXplOworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwl1bnNpZ25lZCBjaGFyIGNvbTc7CisKKwlyZXQgPSBvdjc2NzBfdHJ5X2ZtdChjLCBmbXQsICZvdmZtdCwgJndzaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogQ09NNyBpcyBhIHBhaW4gaW4gdGhlIGFzcywgaXQgZG9lc24ndCBsaWtlIHRvIGJlIHJlYWQgdGhlbgorCSAqIHF1aWNrbHkgd3JpdHRlbiBhZnRlcndhcmQuICBCdXQgd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQKKwkgKiB0byBzZXQgaXQgYWJzb2x1dGVseSBoZXJlLCBhcyBsb25nIGFzIHRoZSBmb3JtYXQtc3BlY2lmaWMKKwkgKiByZWdpc3RlciBzZXRzIGxpc3QgaXQgZmlyc3QuCisJICovCisJY29tNyA9IG92Zm10LT5yZWdzWzBdLnZhbHVlOworCWNvbTcgfD0gd3NpemUtPmNvbTdfYml0OworCW92NzY3MF93cml0ZShjLCBSRUdfQ09NNywgY29tNyk7CisJLyoKKwkgKiBOb3cgd3JpdGUgdGhlIHJlc3Qgb2YgdGhlIGFycmF5LiAgQWxzbyBzdG9yZSBzdGFydC9zdG9wcworCSAqLworCW92NzY3MF93cml0ZV9hcnJheShjLCBvdmZtdC0+cmVncyArIDEpOworCW92NzY3MF9zZXRfaHcoYywgd3NpemUtPmhzdGFydCwgd3NpemUtPmhzdG9wLCB3c2l6ZS0+dnN0YXJ0LAorCQkJd3NpemUtPnZzdG9wKTsKKwlyZXQgPSAwOworCWlmICh3c2l6ZS0+cmVncykKKwkJcmV0ID0gb3Y3NjcwX3dyaXRlX2FycmF5KGMsIHdzaXplLT5yZWdzKTsKKwlpbmZvLT5mbXQgPSBvdmZtdDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEltcGxlbWVudCBHL1NfUEFSTS4gIFRoZXJlIGlzIGEgImhpZ2ggcXVhbGl0eSIgbW9kZSB3ZSBjb3VsZCB0cnkKKyAqIHRvIGRvIHNvbWVkYXk7IGZvciBub3csIHdlIGp1c3QgZG8gdGhlIGZyYW1lIHJhdGUgdHdlYWsuCisgKi8KK3N0YXRpYyBpbnQgb3Y3NjcwX2dfcGFybShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybXMpCit7CisJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnBhcm1zLT5wYXJtLmNhcHR1cmU7CisJdW5zaWduZWQgY2hhciBjbGtyYzsKKwlpbnQgcmV0OworCisJaWYgKHBhcm1zLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gb3Y3NjcwX3JlYWQoYywgUkVHX0NMS1JDLCAmY2xrcmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCW1lbXNldChjcCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtKSk7CisJY3AtPmNhcGFiaWxpdHkgPSBWNEwyX0NBUF9USU1FUEVSRlJBTUU7CisJY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSAxOworCWNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSBPVjc2NzBfRlJBTUVfUkFURTsKKwlpZiAoKGNsa3JjICYgQ0xLX0VYVCkgPT0gMCAmJiAoY2xrcmMgJiBDTEtfU0NBTEUpID4gMSkKKwkJY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciAvPSAoY2xrcmMgJiBDTEtfU0NBTEUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NzY3MF9zX3Bhcm0oc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm1zKQoreworCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZwYXJtcy0+cGFybS5jYXB0dXJlOworCXN0cnVjdCB2NGwyX2ZyYWN0ICp0cGYgPSAmY3AtPnRpbWVwZXJmcmFtZTsKKwl1bnNpZ25lZCBjaGFyIGNsa3JjOworCWludCByZXQsIGRpdjsKKworCWlmIChwYXJtcy0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjcC0+ZXh0ZW5kZWRtb2RlICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCS8qCisJICogQ0xLUkMgaGFzIGEgcmVzZXJ2ZWQgYml0LCBzbyBsZXQncyBwcmVzZXJ2ZSBpdC4KKwkgKi8KKwlyZXQgPSBvdjc2NzBfcmVhZChjLCBSRUdfQ0xLUkMsICZjbGtyYyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHRwZi0+bnVtZXJhdG9yID09IDAgfHwgdHBmLT5kZW5vbWluYXRvciA9PSAwKQorCQlkaXYgPSAxOyAgLyogUmVzZXQgdG8gZnVsbCByYXRlICovCisJZWxzZQorCQlkaXYgPSAodHBmLT5udW1lcmF0b3IqT1Y3NjcwX0ZSQU1FX1JBVEUpL3RwZi0+ZGVub21pbmF0b3I7CisJaWYgKGRpdiA9PSAwKQorCQlkaXYgPSAxOworCWVsc2UgaWYgKGRpdiA+IENMS19TQ0FMRSkKKwkJZGl2ID0gQ0xLX1NDQUxFOworCWNsa3JjID0gKGNsa3JjICYgMHg4MCkgfCBkaXY7CisJdHBmLT5udW1lcmF0b3IgPSAxOworCXRwZi0+ZGVub21pbmF0b3IgPSBPVjc2NzBfRlJBTUVfUkFURS9kaXY7CisJcmV0dXJuIG92NzY3MF93cml0ZShjLCBSRUdfQ0xLUkMsIGNsa3JjKTsKK30KKworCisKKy8qCisgKiBDb2RlIGZvciBkZWFsaW5nIHdpdGggY29udHJvbHMuCisgKi8KKworCisKKworCitzdGF0aWMgaW50IG92NzY3MF9zdG9yZV9jbWF0cml4KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCWludCBtYXRyaXhbQ01BVFJJWF9MRU5dKQoreworCWludCBpLCByZXQ7CisJdW5zaWduZWQgY2hhciBzaWduYml0czsKKworCS8qCisJICogV2VpcmQgY3JhcCBzZWVtcyB0byBleGlzdCBpbiB0aGUgdXBwZXIgcGFydCBvZgorCSAqIHRoZSBzaWduIGJpdHMgcmVnaXN0ZXIsIHNvIGxldCdzIHByZXNlcnZlIGl0LgorCSAqLworCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX0NNQVRSSVhfU0lHTiwgJnNpZ25iaXRzKTsKKwlzaWduYml0cyAmPSAweGMwOworCisJZm9yIChpID0gMDsgaSA8IENNQVRSSVhfTEVOOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciByYXc7CisKKwkJaWYgKG1hdHJpeFtpXSA8IDApIHsKKwkJCXNpZ25iaXRzIHw9ICgxIDw8IGkpOworCQkJaWYgKG1hdHJpeFtpXSA8IC0yNTUpCisJCQkJcmF3ID0gMHhmZjsKKwkJCWVsc2UKKwkJCQlyYXcgPSAoLTEgKiBtYXRyaXhbaV0pICYgMHhmZjsKKwkJfQorCQllbHNlIHsKKwkJCWlmIChtYXRyaXhbaV0gPiAyNTUpCisJCQkJcmF3ID0gMHhmZjsKKwkJCWVsc2UKKwkJCQlyYXcgPSBtYXRyaXhbaV0gJiAweGZmOworCQl9CisJCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQ01BVFJJWF9CQVNFICsgaSwgcmF3KTsKKwl9CisJcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19DTUFUUklYX1NJR04sIHNpZ25iaXRzKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBIdWUgYWxzbyByZXF1aXJlcyBtZXNzaW5nIHdpdGggdGhlIGNvbG9yIG1hdHJpeC4gIEl0IGFsc28gcmVxdWlyZXMKKyAqIHRyaWcgZnVuY3Rpb25zLCB3aGljaCB0ZW5kIG5vdCB0byBiZSB3ZWxsIHN1cHBvcnRlZCBpbiB0aGUga2VybmVsLgorICogU28gaGVyZSBpcyBhIHNpbXBsZSB0YWJsZSBvZiBzaW5lIHZhbHVlcywgMC05MCBkZWdyZWVzLCBpbiBzdGVwcworICogb2YgZml2ZSBkZWdyZWVzLiAgVmFsdWVzIGFyZSBtdWx0aXBsaWVkIGJ5IDEwMDAuCisgKgorICogVGhlIGZvbGxvd2luZyBuYWl2ZSBhcHByb3hpbWF0ZSB0cmlnIGZ1bmN0aW9ucyByZXF1aXJlIGFuIGFyZ3VtZW50CisgKiBjYXJlZnVsbHkgbGltaXRlZCB0byAtMTgwIDw9IHRoZXRhIDw9IDE4MC4KKyAqLworI2RlZmluZSBTSU5fU1RFUCA1CitzdGF0aWMgY29uc3QgaW50IG92NzY3MF9zaW5fdGFibGVbXSA9IHsKKwkgICAwLAkgODcsICAgMTczLCAgIDI1OCwgICAzNDIsICAgNDIyLAorCSA0OTksCTU3MywgICA2NDIsICAgNzA3LCAgIDc2NiwgICA4MTksCisJIDg2NiwJOTA2LCAgIDkzOSwgICA5NjUsICAgOTg0LCAgIDk5NiwKKwkxMDAwCit9OworCitzdGF0aWMgaW50IG92NzY3MF9zaW5lKGludCB0aGV0YSkKK3sKKwlpbnQgY2hzID0gMTsKKwlpbnQgc2luZTsKKworCWlmICh0aGV0YSA8IDApIHsKKwkJdGhldGEgPSAtdGhldGE7CisJCWNocyA9IC0xOworCX0KKwlpZiAodGhldGEgPD0gOTApCisJCXNpbmUgPSBvdjc2NzBfc2luX3RhYmxlW3RoZXRhL1NJTl9TVEVQXTsKKwllbHNlIHsKKwkJdGhldGEgLT0gOTA7CisJCXNpbmUgPSAxMDAwIC0gb3Y3NjcwX3Npbl90YWJsZVt0aGV0YS9TSU5fU1RFUF07CisJfQorCXJldHVybiBzaW5lKmNoczsKK30KKworc3RhdGljIGludCBvdjc2NzBfY29zaW5lKGludCB0aGV0YSkKK3sKKwl0aGV0YSA9IDkwIC0gdGhldGE7CisJaWYgKHRoZXRhID4gMTgwKQorCQl0aGV0YSAtPSAzNjA7CisJZWxzZSBpZiAodGhldGEgPCAtMTgwKQorCQl0aGV0YSArPSAzNjA7CisJcmV0dXJuIG92NzY3MF9zaW5lKHRoZXRhKTsKK30KKworCisKKworc3RhdGljIHZvaWQgb3Y3NjcwX2NhbGNfY21hdHJpeChzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8sCisJCWludCBtYXRyaXhbQ01BVFJJWF9MRU5dKQoreworCWludCBpOworCS8qCisJICogQXBwbHkgdGhlIGN1cnJlbnQgc2F0dXJhdGlvbiBzZXR0aW5nIGZpcnN0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBDTUFUUklYX0xFTjsgaSsrKQorCQltYXRyaXhbaV0gPSAoaW5mby0+Zm10LT5jbWF0cml4W2ldKmluZm8tPnNhdCkgPj4gNzsKKwkvKgorCSAqIFRoZW4sIGlmIG5lZWQgYmUsIHJvdGF0ZSB0aGUgaHVlIHZhbHVlLgorCSAqLworCWlmIChpbmZvLT5odWUgIT0gMCkgeworCQlpbnQgc2ludGgsIGNvc3RoLCB0bXBtYXRyaXhbQ01BVFJJWF9MRU5dOworCisJCW1lbWNweSh0bXBtYXRyaXgsIG1hdHJpeCwgQ01BVFJJWF9MRU4qc2l6ZW9mKGludCkpOworCQlzaW50aCA9IG92NzY3MF9zaW5lKGluZm8tPmh1ZSk7CisJCWNvc3RoID0gb3Y3NjcwX2Nvc2luZShpbmZvLT5odWUpOworCisJCW1hdHJpeFswXSA9IChtYXRyaXhbM10qc2ludGggKyBtYXRyaXhbMF0qY29zdGgpLzEwMDA7CisJCW1hdHJpeFsxXSA9IChtYXRyaXhbNF0qc2ludGggKyBtYXRyaXhbMV0qY29zdGgpLzEwMDA7CisJCW1hdHJpeFsyXSA9IChtYXRyaXhbNV0qc2ludGggKyBtYXRyaXhbMl0qY29zdGgpLzEwMDA7CisJCW1hdHJpeFszXSA9IChtYXRyaXhbM10qY29zdGggLSBtYXRyaXhbMF0qc2ludGgpLzEwMDA7CisJCW1hdHJpeFs0XSA9IChtYXRyaXhbNF0qY29zdGggLSBtYXRyaXhbMV0qc2ludGgpLzEwMDA7CisJCW1hdHJpeFs1XSA9IChtYXRyaXhbNV0qY29zdGggLSBtYXRyaXhbMl0qc2ludGgpLzEwMDA7CisJfQorfQorCisKKworc3RhdGljIGludCBvdjc2NzBfdF9zYXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBtYXRyaXhbQ01BVFJJWF9MRU5dOworCWludCByZXQ7CisKKwlpbmZvLT5zYXQgPSB2YWx1ZTsKKwlvdjc2NzBfY2FsY19jbWF0cml4KGluZm8sIG1hdHJpeCk7CisJcmV0ID0gb3Y3NjcwX3N0b3JlX2NtYXRyaXgoY2xpZW50LCBtYXRyaXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjcwX3Ffc2F0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCSp2YWx1ZSA9IGluZm8tPnNhdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjc2NzBfdF9odWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBtYXRyaXhbQ01BVFJJWF9MRU5dOworCWludCByZXQ7CisKKwlpZiAodmFsdWUgPCAtMTgwIHx8IHZhbHVlID4gMTgwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpbmZvLT5odWUgPSB2YWx1ZTsKKwlvdjc2NzBfY2FsY19jbWF0cml4KGluZm8sIG1hdHJpeCk7CisJcmV0ID0gb3Y3NjcwX3N0b3JlX2NtYXRyaXgoY2xpZW50LCBtYXRyaXgpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBvdjc2NzBfcV9odWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQoreworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJKnZhbHVlID0gaW5mby0+aHVlOworCXJldHVybiAwOworfQorCisKKy8qCisgKiBTb21lIHdlaXJkIHJlZ2lzdGVycyBzZWVtIHRvIHN0b3JlIHZhbHVlcyBpbiBhIHNpZ24vbWFnbml0dWRlIGZvcm1hdCEKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgb3Y3NjcwX3NtX3RvX2Ficyh1bnNpZ25lZCBjaGFyIHYpCit7CisJaWYgKCh2ICYgMHg4MCkgPT0gMCkKKwkJcmV0dXJuIHYgKyAxMjg7CisJZWxzZQorCQlyZXR1cm4gMTI4IC0gKHYgJiAweDdmKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgY2hhciBvdjc2NzBfYWJzX3RvX3NtKHVuc2lnbmVkIGNoYXIgdikKK3sKKwlpZiAodiA+IDEyNykKKwkJcmV0dXJuIHYgJiAweDdmOworCWVsc2UKKwkJcmV0dXJuICgxMjggLSB2KSB8IDB4ODA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjcwX3RfYnJpZ2h0bmVzcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciBjb204LCB2OworCWludCByZXQ7CisKKwlvdjc2NzBfcmVhZChjbGllbnQsIFJFR19DT004LCAmY29tOCk7CisJY29tOCAmPSB+Q09NOF9BRUM7CisJb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0NPTTgsIGNvbTgpOworCXYgPSBvdjc2NzBfYWJzX3RvX3NtKHZhbHVlKTsKKwlyZXQgPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQlJJR0hULCB2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92NzY3MF9xX2JyaWdodG5lc3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgdjsKKwlpbnQgcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfQlJJR0hULCAmdik7CisKKwkqdmFsdWUgPSBvdjc2NzBfc21fdG9fYWJzKHYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjcwX3RfY29udHJhc3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQoreworCXJldHVybiBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQ09OVFJBUywgKHVuc2lnbmVkIGNoYXIpIHZhbHVlKTsKK30KKworc3RhdGljIGludCBvdjc2NzBfcV9jb250cmFzdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciB2OworCWludCByZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19DT05UUkFTLCAmdik7CisKKwkqdmFsdWUgPSB2OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjcwX3FfaGZsaXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciB2OworCisJcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfTVZGUCwgJnYpOworCSp2YWx1ZSA9ICh2ICYgTVZGUF9NSVJST1IpID09IE1WRlBfTUlSUk9SOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBvdjc2NzBfdF9oZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciB2OworCWludCByZXQ7CisKKwlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19NVkZQLCAmdik7CisJaWYgKHZhbHVlKQorCQl2IHw9IE1WRlBfTUlSUk9SOworCWVsc2UKKwkJdiAmPSB+TVZGUF9NSVJST1I7CisJbXNsZWVwKDEwKTsgIC8qIEZJWE1FICovCisJcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19NVkZQLCB2KTsKKwlyZXR1cm4gcmV0OworfQorCisKKworc3RhdGljIGludCBvdjc2NzBfcV92ZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIHY7CisKKwlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19NVkZQLCAmdik7CisJKnZhbHVlID0gKHYgJiBNVkZQX0ZMSVApID09IE1WRlBfRkxJUDsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgb3Y3NjcwX3RfdmZsaXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgdjsKKwlpbnQgcmV0OworCisJcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfTVZGUCwgJnYpOworCWlmICh2YWx1ZSkKKwkJdiB8PSBNVkZQX0ZMSVA7CisJZWxzZQorCQl2ICY9IH5NVkZQX0ZMSVA7CisJbXNsZWVwKDEwKTsgIC8qIEZJWE1FICovCisJcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19NVkZQLCB2KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgb3Y3NjcwX2NvbnRyb2wgeworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxYzsKKwlpbnQgKCpxdWVyeSkoc3RydWN0IGkyY19jbGllbnQgKmMsIF9fczMyICp2YWx1ZSk7CisJaW50ICgqdHdlYWspKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBpbnQgdmFsdWUpOworfSBvdjc2NzBfY29udHJvbHNbXSA9Cit7CisJeworCQkucWMgPSB7CisJCQkuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiQnJpZ2h0bmVzcyIsCisJCQkubWluaW11bSA9IDAsCisJCQkubWF4aW11bSA9IDI1NSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHg4MCwKKwkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkudHdlYWsgPSBvdjc2NzBfdF9icmlnaHRuZXNzLAorCQkucXVlcnkgPSBvdjc2NzBfcV9icmlnaHRuZXNzLAorCX0sCisJeworCQkucWMgPSB7CisJCQkuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkNvbnRyYXN0IiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMTI3LAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDQwLCAgIC8qIFhYWCBvdjc2NzAgc3BlYyAqLworCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS50d2VhayA9IG92NzY3MF90X2NvbnRyYXN0LAorCQkucXVlcnkgPSBvdjc2NzBfcV9jb250cmFzdCwKKwl9LAorCXsKKwkJLnFjID0geworCQkJLmlkID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIlNhdHVyYXRpb24iLAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSAyNTYsCisJCQkuc3RlcCA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4ODAsCisJCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnR3ZWFrID0gb3Y3NjcwX3Rfc2F0LAorCQkucXVlcnkgPSBvdjc2NzBfcV9zYXQsCisJfSwKKwl7CisJCS5xYyA9IHsKKwkJCS5pZCA9IFY0TDJfQ0lEX0hVRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkhVRSIsCisJCQkubWluaW11bSA9IC0xODAsCisJCQkubWF4aW11bSA9IDE4MCwKKwkJCS5zdGVwID0gNSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkudHdlYWsgPSBvdjc2NzBfdF9odWUsCisJCS5xdWVyeSA9IG92NzY3MF9xX2h1ZSwKKwl9LAorCXsKKwkJLnFjID0geworCQkJLmlkID0gVjRMMl9DSURfVkZMSVAsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSA9ICJWZXJ0aWNhbCBmbGlwIiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJfSwKKwkJLnR3ZWFrID0gb3Y3NjcwX3RfdmZsaXAsCisJCS5xdWVyeSA9IG92NzY3MF9xX3ZmbGlwLAorCX0sCisJeworCQkucWMgPSB7CisJCQkuaWQgPSBWNEwyX0NJRF9IRkxJUCwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lID0gIkhvcml6b250YWwgbWlycm9yIiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gMSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJfSwKKwkJLnR3ZWFrID0gb3Y3NjcwX3RfaGZsaXAsCisJCS5xdWVyeSA9IG92NzY3MF9xX2hmbGlwLAorCX0sCit9OworI2RlZmluZSBOX0NPTlRST0xTIChzaXplb2Yob3Y3NjcwX2NvbnRyb2xzKS9zaXplb2Yob3Y3NjcwX2NvbnRyb2xzWzBdKSkKKworc3RhdGljIHN0cnVjdCBvdjc2NzBfY29udHJvbCAqb3Y3NjcwX2ZpbmRfY29udHJvbChfX3UzMiBpZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOX0NPTlRST0xTOyBpKyspCisJCWlmIChvdjc2NzBfY29udHJvbHNbaV0ucWMuaWQgPT0gaWQpCisJCQlyZXR1cm4gb3Y3NjcwX2NvbnRyb2xzICsgaTsKKwlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgaW50IG92NzY3MF9xdWVyeWN0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3Qgb3Y3NjcwX2NvbnRyb2wgKmN0cmwgPSBvdjc2NzBfZmluZF9jb250cm9sKHFjLT5pZCk7CisKKwlpZiAoY3RybCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqcWMgPSBjdHJsLT5xYzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjc2NzBfZ19jdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IG92NzY3MF9jb250cm9sICpvY3RybCA9IG92NzY3MF9maW5kX2NvbnRyb2woY3RybC0+aWQpOworCWludCByZXQ7CisKKwlpZiAob2N0cmwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gb2N0cmwtPnF1ZXJ5KGNsaWVudCwgJmN0cmwtPnZhbHVlKTsKKwlpZiAocmV0ID49IDApCisJCXJldHVybiAwOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBvdjc2NzBfY29udHJvbCAqb2N0cmwgPSBvdjc2NzBfZmluZF9jb250cm9sKGN0cmwtPmlkKTsKKwlpbnQgcmV0OworCisJaWYgKG9jdHJsID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9ICBvY3RybC0+dHdlYWsoY2xpZW50LCBjdHJsLT52YWx1ZSk7CisJaWYgKHJldCA+PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OworfQorCisKKworCisKKworLyoKKyAqIEJhc2ljIGkyYyBzdHVmZi4KKyAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG92NzY3MF9kcml2ZXI7CisKK3N0YXRpYyBpbnQgb3Y3NjcwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbzsKKworCS8qCisJICogRm9yIG5vdzogb25seSBkZWFsIHdpdGggYWRhcHRlcnMgd2UgcmVjb2duaXplLgorCSAqLworCWlmIChhZGFwdGVyLT5pZCAhPSBJMkNfSFdfU01CVVNfQ0FGRSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljbGllbnQgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoISBjbGllbnQpCisJCXJldHVybiAtRU5PTUVNOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gT1Y3NjcwX0kyQ19BRERSOworCWNsaWVudC0+ZHJpdmVyID0gJm92NzY3MF9kcml2ZXIsCisJc3RyY3B5KGNsaWVudC0+bmFtZSwgIk9WNzY3MCIpOworCS8qCisJICogU2V0IHVwIG91ciBpbmZvIHN0cnVjdHVyZS4KKwkgKi8KKwlpbmZvID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBvdjc2NzBfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghIGluZm8pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisJaW5mby0+Zm10ID0gJm92NzY3MF9mb3JtYXRzWzBdOworCWluZm8tPnNhdCA9IDEyODsJLyogUmV2aWV3IHRoaXMgKi8KKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpbmZvKTsKKworCS8qCisJICogTWFrZSBzdXJlIGl0J3MgYW4gb3Y3NjcwCisJICovCisJcmV0ID0gb3Y3NjcwX2RldGVjdChjbGllbnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfaW5mbzsKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCXJldHVybiAwOworCisgIG91dF9mcmVlX2luZm86CisJa2ZyZWUoaW5mbyk7CisgIG91dF9mcmVlOgorCWtmcmVlKGNsaWVudCk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IG92NzY3MF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlrZnJlZShjbGllbnQpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgb3Y3NjcwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKKwkJdm9pZCAqYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfSU5UX0dfQ0hJUF9JREVOVDoKKwkJKiAoZW51bSB2NGwyX2NoaXBfaWRlbnQgKikgYXJnID0gVjRMMl9JREVOVF9PVjc2NzA7CisJCXJldHVybiAwOworCisJY2FzZSBWSURJT0NfSU5UX1JFU0VUOgorCQlvdjc2NzBfcmVzZXQoY2xpZW50KTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFZJRElPQ19JTlRfSU5JVDoKKwkJcmV0dXJuIG92NzY3MF9pbml0KGNsaWVudCk7CisKKwljYXNlIFZJRElPQ19FTlVNX0ZNVDoKKwkJcmV0dXJuIG92NzY3MF9lbnVtX2ZtdChjbGllbnQsIChzdHJ1Y3QgdjRsMl9mbXRkZXNjICopIGFyZyk7CisJY2FzZSBWSURJT0NfVFJZX0ZNVDoKKwkJcmV0dXJuIG92NzY3MF90cnlfZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKSBhcmcsIE5VTEwsIE5VTEwpOworCWNhc2UgVklESU9DX1NfRk1UOgorCQlyZXR1cm4gb3Y3NjcwX3NfZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKSBhcmcpOworCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwkJcmV0dXJuIG92NzY3MF9xdWVyeWN0cmwoY2xpZW50LCAoc3RydWN0IHY0bDJfcXVlcnljdHJsICopIGFyZyk7CisJY2FzZSBWSURJT0NfU19DVFJMOgorCQlyZXR1cm4gb3Y3NjcwX3NfY3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopIGFyZyk7CisJY2FzZSBWSURJT0NfR19DVFJMOgorCQlyZXR1cm4gb3Y3NjcwX2dfY3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopIGFyZyk7CisJY2FzZSBWSURJT0NfU19QQVJNOgorCQlyZXR1cm4gb3Y3NjcwX3NfcGFybShjbGllbnQsIChzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICopIGFyZyk7CisJY2FzZSBWSURJT0NfR19QQVJNOgorCQlyZXR1cm4gb3Y3NjcwX2dfcGFybShjbGllbnQsIChzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICopIGFyZyk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG92NzY3MF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAib3Y3NjcwIiwKKwl9LAorCS5pZCAJCT0gSTJDX0RSSVZFUklEX09WNzY3MCwKKwkuY2xhc3MgCQk9IEkyQ19DTEFTU19DQU1fRElHSVRBTCwKKwkuYXR0YWNoX2FkYXB0ZXIgPSBvdjc2NzBfYXR0YWNoLAorCS5kZXRhY2hfY2xpZW50CT0gb3Y3NjcwX2RldGFjaCwKKwkuY29tbWFuZAk9IG92NzY3MF9jb21tYW5kLAorfTsKKworCisvKgorICogTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG92NzY3MF9tb2RfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX05PVElDRSAiT21uaVZpc2lvbiBvdjc2NzAgc2Vuc29yIGRyaXZlciwgYXQgeW91ciBzZXJ2aWNlXG4iKTsKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm92NzY3MF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb3Y3NjcwX21vZF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm92NzY3MF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChvdjc2NzBfbW9kX2luaXQpOworbW9kdWxlX2V4aXQob3Y3NjcwX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcGxhbmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcGxhbmIuYwppbmRleCAzNjhkNmUyLi44NmQyODg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3BsYW5iLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wbGFuYi5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJKyBNQVhfTE5VTQogI2VuZGlmIC8qIFBMQU5CX0dTQ0FOTElORSAqLwogCQkpOwotCWlmICgocGItPnJhd2J1ZiA9ICh1bnNpZ25lZCBjaGFyKiopIGttYWxsb2MgKG5wYWdlCisJaWYgKChwYi0+cmF3YnVmID0ga21hbGxvYyhucGFnZQogCQkJCSogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKSkgPT0gMCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZm9yIChpID0gMDsgaSA8IG5wYWdlOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCmluZGV4IGM4MGMyNmIuLjg0OGZiMjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMKQEAgLTI2MCw2ICsyNjAsMjIgQEAKIAkJCQkgIHNpemVvZihkZWNvZGVyX29wc1swXSkpKSAtIDE7CiAJaGR3LT5kZWNvZGVyX2N0cmwgPSAmY3R4dC0+Y3RybDsKIAljcC0+aGFuZGxlciA9ICZjdHh0LT5oYW5kbGVyOworCXsKKwkJLyoKKwkJICBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+IDE5LU5vdi0yMDA2IC0gVGhpcyBiaXQKKwkJICBvZiBudXR0aW5lc3MgZm9yIGN4MjU4NDAgY2F1c2VzIHRoYXQgbW9kdWxlIHRvCisJCSAgY29ycmVjdGx5IHNldCB1cCBpdHMgdmlkZW8gc2NhbGluZy4gIFRoaXMgaXMgcmVhbGx5CisJCSAgYSBwcm9ibGVtIGluIHRoZSBjeDI1ODQwIG1vZHVsZSBpdHNlbGYsIGJ1dCB3ZSB3b3JrCisJCSAgYXJvdW5kIGl0IGhlcmUuICBUaGUgcHJvYmxlbSBoYXMgbm90IGJlZW4gc2VlbiBpbgorCQkgIGl2dHYgYmVjYXVzZSB0aGVyZSBWQkkgaXMgc3VwcG9ydGVkIGFuZCBzZXQgdXAuICBXZQorCQkgIGRvbid0IGRvIFZCSSBoZXJlIChhdCBsZWFzdCBub3QgeWV0KSBhbmQgdGh1cyB3ZQorCQkgIG5ldmVyIGF0dGVtcHRlZCB0byBldmVuIHNldCBpdCB1cC4KKwkJICovCisJCXN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7CisJCW1lbXNldCgmZm10LDAsc2l6ZW9mKGZtdCkpOworCQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOworCQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfU19GTVQsJmZtdCk7CisJfQogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIDB4JXggY3gyNTg0eCBWNEwyIGhhbmRsZXIgc2V0IHVwIiwKIAkJICAgY3AtPmNsaWVudC0+YWRkcik7CiAJcmV0dXJuICEwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYwppbmRleCAxZjc4NzMzLi5kMjAwNDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYwpAQCAtMzU2LDI4ICszNTYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN0cmxfaHJlc19tYXhfZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsaW50ICp2cCkKLXsKLQkvKiBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSAyNHh4eCBkZXZpY2UsIGZvcmNlIHRoZSBob3Jpem9udGFsCi0JICAgbWF4aW11bSB0byBiZSA3MjAgbm8gbWF0dGVyIHdoYXQsIHNpbmNlIHdlIGNhbid0IGdldCB0aGUgZGV2aWNlCi0JICAgdG8gd29yayBwcm9wZXJseSB3aXRoIGFueSBvdGhlciB2YWx1ZS4gIE90aGVyd2lzZSBqdXN0IHJldHVybgotCSAgIHRoZSBub3JtYWwgdmFsdWUuICovCi0JKnZwID0gY3B0ci0+aW5mby0+ZGVmLnR5cGVfaW50Lm1heF92YWx1ZTsKLQlpZiAoY3B0ci0+aGR3LT5oZHdfdHlwZSA9PSBQVlIyX0hEV19UWVBFXzI0WFhYKSAqdnAgPSA3MjA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY3RybF9ocmVzX21pbl9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0cixpbnQgKnZwKQotewotCS8qIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIDI0eHh4IGRldmljZSwgZm9yY2UgdGhlIGhvcml6b250YWwKLQkgICBtaW5pbXVtIHRvIGJlIDcyMCBubyBtYXR0ZXIgd2hhdCwgc2luY2Ugd2UgY2FuJ3QgZ2V0IHRoZSBkZXZpY2UKLQkgICB0byB3b3JrIHByb3Blcmx5IHdpdGggYW55IG90aGVyIHZhbHVlLiAgT3RoZXJ3aXNlIGp1c3QgcmV0dXJuCi0JICAgdGhlIG5vcm1hbCB2YWx1ZS4gKi8KLQkqdnAgPSBjcHRyLT5pbmZvLT5kZWYudHlwZV9pbnQubWluX3ZhbHVlOwotCWlmIChjcHRyLT5oZHctPmhkd190eXBlID09IFBWUjJfSERXX1RZUEVfMjRYWFgpICp2cCA9IDcyMDsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBjdHJsX3ZyZXNfbWF4X2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLGludCAqdnApCiB7CiAJLyogQWN0dWFsIG1heGltdW0gZGVwZW5kcyBvbiB0aGUgdmlkZW8gc3RhbmRhcmQgaW4gZWZmZWN0LiAqLwpAQCAtNzU4LDEwICs3MzYsNiBAQAogCQkuZGVmYXVsdF92YWx1ZSA9IDcyMCwKIAkJREVGUkVGKHJlc19ob3IpLAogCQlERUZJTlQoMTksNzIwKSwKLQkJLyogSG9vayBpbiBjaGVjayBmb3IgY2xhbXAgb24gaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluCi0JCSAgIG9yZGVyIHRvIGF2b2lkIHVuc29sdmVkIHByb2JsZW0gaW52b2x2aW5nIGN4MjU4NDAuICovCi0JCS5nZXRfbWF4X3ZhbHVlID0gY3RybF9ocmVzX21heF9nZXQsCi0JCS5nZXRfbWluX3ZhbHVlID0gY3RybF9ocmVzX21pbl9nZXQsCiAJfSx7CiAJCS5kZXNjID0gIlZlcnRpY2FsIGNhcHR1cmUgcmVzb2x1dGlvbiIsCiAJCS5uYW1lID0gInJlc29sdXRpb25fdmVyIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCmluZGV4IDNiOTAxMmY4ZTMuLmY5YmI0MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwpAQCAtMTg1LDYgKzE4NSw3OSBAQAogCX0KIH0KIAorCisvKiBUaGlzIGlzIGEgc3BlY2lhbCBlbnRyeSBwb2ludCBmb3IgY2FzZXMgb2YgSTJDIHRyYW5zYWN0aW9uIGF0dGVtcHRzIHRvCisgICB0aGUgSVIgcmVjZWl2ZXIuICBUaGUgaW1wbGVtZW50YXRpb24gaGVyZSBzaW11bGF0ZXMgdGhlIElSIHJlY2VpdmVyIGJ5CisgICBpc3N1aW5nIGEgY29tbWFuZCB0byB0aGUgRlgyIGZpcm13YXJlIGFuZCB1c2luZyB0aGF0IHJlc3BvbnNlIHRvIHJldHVybgorICAgd2hhdCB0aGUgcmVhbCBJMkMgcmVjZWl2ZXIgd291bGQgaGF2ZSByZXR1cm5lZC4gIFdlIHVzZSB0aGlzIGZvciAyNHh4eAorICAgZGV2aWNlcywgd2hlcmUgdGhlIElSIHJlY2VpdmVyIGNoaXAgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgcmVwbGFjZWQgd2l0aAorICAgRlgyIHJlbGF0ZWQgbG9naWMuICovCitzdGF0aWMgaW50IGkyY18yNHh4eF9pcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCXU4IGkyY19hZGRyLHU4ICp3ZGF0YSx1MTYgd2xlbix1OCAqcmRhdGEsdTE2IHJsZW4pCit7CisJdTggZGF0WzRdOworCXVuc2lnbmVkIGludCBzdGF0OworCisJaWYgKCEocmxlbiB8fCB3bGVuKSkgeworCQkvKiBUaGlzIGlzIGEgcHJvYmUgYXR0ZW1wdC4gIEp1c3QgbGV0IGl0IHN1Y2NlZWQuICovCisJCXJldHVybiAwOworCX0KKworCS8qIFdlIGRvbid0IHVuZGVyc3RhbmQgdGhpcyBraW5kIG9mIHRyYW5zYWN0aW9uICovCisJaWYgKCh3bGVuICE9IDApIHx8IChybGVuID09IDApKSByZXR1cm4gLUVJTzsKKworCWlmIChybGVuIDwgMykgeworCQkvKiBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+IEFwcGVhcnMgdG8gYmUgYSBwcm9iZQorCQkgICBhdHRlbXB0IGZyb20gbGlyYy4gIEp1c3QgZmlsbCBpbiB6ZXJvZXMgYW5kIHJldHVybi4gIElmCisJCSAgIHdlIHRyeSBpbnN0ZWFkIHRvIGRvIHRoZSBmdWxsIHRyYW5zYWN0aW9uIGhlcmUsIHRoZW4gYmFkCisJCSAgIHRoaW5ncyBzZWVtIHRvIGhhcHBlbiB3aXRoaW4gdGhlIGxpcmMgZHJpdmVyIG1vZHVsZQorCQkgICAodmVyc2lvbiAwLjguMC03IHNvdXJjZXMgZnJvbSBEZWJpYW4sIHdoZW4gcnVuIHVuZGVyCisJCSAgIHZhbmlsbGEgMi42LjE3LjYga2VybmVsKSAtIGFuZCBJIGRvbid0IGhhdmUgdGhlIHBhdGllbmNlCisJCSAgIHRvIGNoYXNlIGl0IGRvd24uICovCisJCWlmIChybGVuID4gMCkgcmRhdGFbMF0gPSAwOworCQlpZiAocmxlbiA+IDEpIHJkYXRhWzFdID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSXNzdWUgYSBjb21tYW5kIHRvIHRoZSBGWDIgdG8gcmVhZCB0aGUgSVIgcmVjZWl2ZXIuICovCisJTE9DS19UQUtFKGhkdy0+Y3RsX2xvY2spOyBkbyB7CisJCWhkdy0+Y21kX2J1ZmZlclswXSA9IDB4ZWM7CisJCXN0YXQgPSBwdnIyX3NlbmRfcmVxdWVzdChoZHcsCisJCQkJCSBoZHctPmNtZF9idWZmZXIsMSwKKwkJCQkJIGhkdy0+Y21kX2J1ZmZlciw0KTsKKwkJZGF0WzBdID0gaGR3LT5jbWRfYnVmZmVyWzBdOworCQlkYXRbMV0gPSBoZHctPmNtZF9idWZmZXJbMV07CisJCWRhdFsyXSA9IGhkdy0+Y21kX2J1ZmZlclsyXTsKKwkJZGF0WzNdID0gaGR3LT5jbWRfYnVmZmVyWzNdOworCX0gd2hpbGUgKDApOyBMT0NLX0dJVkUoaGR3LT5jdGxfbG9jayk7CisKKwkvKiBHaXZlIHVwIGlmIHRoYXQgb3BlcmF0aW9uIGZhaWxlZC4gKi8KKwlpZiAoc3RhdCAhPSAwKSByZXR1cm4gc3RhdDsKKworCS8qIE1hbmdsZSB0aGUgcmVzdWx0cyBpbnRvIHNvbWV0aGluZyB0aGF0IGxvb2tzIGxpa2UgdGhlIHJlYWwgSVIKKwkgICByZWNlaXZlci4gKi8KKwlyZGF0YVsyXSA9IDB4YzE7CisJaWYgKGRhdFswXSAhPSAxKSB7CisJCS8qIE5vIGNvZGUgcmVjZWl2ZWQuICovCisJCXJkYXRhWzBdID0gMDsKKwkJcmRhdGFbMV0gPSAwOworCX0gZWxzZSB7CisJCXUxNiB2YWw7CisJCS8qIE1hc2ggdGhlIEZYMiBmaXJtd2FyZS1wcm92aWRlZCBJUiBjb2RlIGludG8gc29tZXRoaW5nCisJCSAgIHRoYXQgdGhlIG5vcm1hbCBpMmMgY2hpcC1sZXZlbCBkcml2ZXIgZXhwZWN0cy4gKi8KKwkJdmFsID0gZGF0WzFdOworCQl2YWwgPDw9IDg7CisJCXZhbCB8PSBkYXRbMl07CisJCXZhbCA+Pj0gMTsKKwkJdmFsICY9IH4weDAwMDM7CisJCXZhbCB8PSAweDgwMDA7CisJCXJkYXRhWzBdID0gKHZhbCA+PiA4KSAmIDB4ZmZ1OworCQlyZGF0YVsxXSA9IHZhbCAmIDB4ZmZ1OworCX0KKworCXJldHVybiAwOworfQorCiAvKiBUaGlzIGlzIGEgc3BlY2lhbCBlbnRyeSBwb2ludCB0aGF0IGlzIGVudGVyZWQgaWYgYW4gSTJDIG9wZXJhdGlvbiBpcwogICAgYXR0ZW1wdGVkIHRvIGEgd204Nzc1IGNoaXAgb24gbW9kZWwgMjR4eHggaGFyZHdhcmUuICBBdXRvZGV0ZWN0IG9mIHRoaXMKICAgIHBhcnQgZG9lc24ndCB3b3JrLCBidXQgd2Uga25vdyBpdCBpcyByZWFsbHkgdGhlcmUuICBTbyBsZXQncyBsb29rIGZvcgpAQCAtODg3LDE3ICs5NjAsMTcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCi0JLy8gVGhlIGRlZmF1bHQgYWN0aW9uIGZvciBhbGwgcG9zc2libGUgSTJDIGFkZHJlc3NlcyBpcyBqdXN0IHRvIGRvCi0JLy8gdGhlIHRyYW5zZmVyIG5vcm1hbGx5LgorCS8qIFRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYWxsIHBvc3NpYmxlIEkyQyBhZGRyZXNzZXMgaXMganVzdCB0byBkbworCSAgIHRoZSB0cmFuc2ZlciBub3JtYWxseS4gKi8KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IFBWUjJfSTJDX0ZVTkNfQ05UOyBpZHgrKykgewogCQloZHctPmkyY19mdW5jW2lkeF0gPSBwdnIyX2kyY19iYXNpY19vcDsKIAl9CiAKLQkvLyBJZiBob3dldmVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXcgaGFyZHdhcmUsIGluc2VydCBzb21lIGhhY2tzIGluCi0JLy8gdGhlIEkyQyB0cmFuc2ZlciBzdGFjayB0byBsZXQgdGhpbmdzIHdvcmsgYmV0dGVyLgorCS8qIEhvd2V2ZXIsIGRlYWwgd2l0aCB2YXJpb3VzIHNwZWNpYWwgY2FzZXMgZm9yIDI0eHh4IGhhcmR3YXJlLiAqLwogCWlmIChoZHctPmhkd190eXBlID09IFBWUjJfSERXX1RZUEVfMjRYWFgpIHsKIAkJaGR3LT5pMmNfZnVuY1sweDFiXSA9IGkyY19oYWNrX3dtODc3NTsKIAkJaGR3LT5pMmNfZnVuY1sweDQ0XSA9IGkyY19oYWNrX2N4MjU4NDA7CisJCWhkdy0+aTJjX2Z1bmNbMHgxOF0gPSBpMmNfMjR4eHhfaXI7CiAJfQogCiAJLy8gQ29uZmlndXJlIHRoZSBhZGFwdGVyIGFuZCBzZXQgdXAgZXZlcnl0aGluZyBlbHNlIHJlbGF0ZWQgdG8gaXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IGYyODM5OGQuLmMyMzc0ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC04NTEsNyArODUxLDcgQEAKIAogCS8qIE9uIDYwSHosIGl0IGlzIHVzaW5nIGEgaGlnaGVyIFZlcnRpY2FsIE91dHB1dCBTaXplICovCiAJaWYgKCFpc181MGh6KQotCQlyZXMrPShWUkVTXzYwSFotNDgwKT4+MTsKKwkJcmVzICs9IChWUkVTXzYwSFogLSA0ODApID4+IDE7CiAKIAkJLyogaGVpZ2h0ICovCiAJc2FhNzExeF93cml0ZShjbGllbnQsIFJfQ0VfQl9WRVJUX09VVFBVVF9XSU5ET1dfTEVOR1RILApAQCAtOTA3LDcgKzkwNyw3IEBACiAKIAkvKiBBY3RpdmF0ZXMgdGFzayAiQiIgKi8KIAlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl84MF9HTE9CQUxfQ05UTF8xLAotCQkJCXNhYTcxMXhfcmVhZChjbGllbnQsUl84MF9HTE9CQUxfQ05UTF8xKXwweDIwKTsKKwkJCQlzYWE3MTF4X3JlYWQoY2xpZW50LFJfODBfR0xPQkFMX0NOVExfMSkgfCAweDIwKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTMyLDExICs5MzIsMTEgQEAKIAlpZiAoc3RkICYgVjRMMl9TVERfNTI1XzYwKSB7CiAJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IHN0YW5kYXJkIDYwIEh6XG4iKTsKIAkJc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ182MGh6X3ZpZGVvKTsKLQkJc2FhNzExeF9zZXRfc2l6ZShjbGllbnQsNzIwLDQ4MCk7CisJCXNhYTcxMXhfc2V0X3NpemUoY2xpZW50LCA3MjAsIDQ4MCk7CiAJfSBlbHNlIHsKIAkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZGVjb2RlciBzZXQgc3RhbmRhcmQgNTAgSHpcbiIpOwogCQlzYWE3MTF4X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzUwaHpfdmlkZW8pOwotCQlzYWE3MTF4X3NldF9zaXplKGNsaWVudCw3MjAsNTc2KTsKKwkJc2FhNzExeF9zZXRfc2l6ZShjbGllbnQsIDcyMCwgNTc2KTsKIAl9CiAKIAkvKiBSZWdpc3RlciAwRSAtIEJpdHMgRDYtRDQgb24gTk8tQVVUTyBtb2RlCkBAIC0xNDY0LDEzICsxNDY0LDEzIEBACiAJY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTF4OwogCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSkgLSAxLCAic2FhNzExNSIpOwogCi0JZm9yIChpPTA7aTwweDBmO2krKykgeworCWZvciAoaSA9IDA7IGkgPCAweDBmOyBpKyspIHsKIAkJc2FhNzExeF93cml0ZShjbGllbnQsIDAsIGkpOwotCQluYW1lW2ldID0gKHNhYTcxMXhfcmVhZChjbGllbnQsIDApICYweDBmKSArJzAnOwotCQlpZiAobmFtZVtpXT4nOScpCi0JCQluYW1lW2ldKz0nYSctJzknLTE7CisJCW5hbWVbaV0gPSAoc2FhNzExeF9yZWFkKGNsaWVudCwgMCkgJiAweDBmKSArICcwJzsKKwkJaWYgKG5hbWVbaV0gPiAnOScpCisJCQluYW1lW2ldICs9ICdhJyAtICc5JyAtIDE7CiAJfQotCW5hbWVbaV09J1wwJzsKKwluYW1lW2ldID0gJ1wwJzsKIAogCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAwLCA1KTsKIAljaGlwX2lkID0gc2FhNzExeF9yZWFkKGNsaWVudCwgMCkgJiAweDBmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCmluZGV4IDRhYmY1YzAuLmZmYjBmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKQEAgLTEsMTAgKzEsNiBAQAogLyoKICAqICAgU0FBNzEzeCBBTFNBIHN1cHBvcnQgZm9yIFY0TAogICoKLSAqCi0gKiAgIENhdmVhdHM6Ci0gKiAgICAgICAgLSBWb2x1bWUgZG9lc24ndCB3b3JrIChpdCdzIGFsd2F5cyBhdCBtYXgpCi0gKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIKQEAgLTYxNCwxMyArNjEwLDE4IEBACiAJc25kX2NhcmRfc2FhNzEzNF9wY21fdCAqcGNtOwogCXNuZF9jYXJkX3NhYTcxMzRfdCAqc2FhNzEzNCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYTcxMzQtPmRldjsKLQlpbnQgZXJyOworCWludCBhbXV4LCBlcnI7CiAKIAltdXRleF9sb2NrKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCiAJZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50ICA9IDA7CiAJZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldCA9IDA7CiAKKwlhbXV4ID0gZGV2LT5pbnB1dC0+YW11eDsKKwlpZiAoKGFtdXggPCAxKSB8fCAoYW11eCA+IDMpKQorCQlhbXV4ID0gMTsKKwlkZXYtPmRtYXNvdW5kLmlucHV0ICA9ICBhbXV4IC0gMTsKKwogCW11dGV4X3VubG9jaygmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAogCXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCpwY20pLCBHRlBfS0VSTkVMKTsKQEAgLTcxMyw2ICs3MTQsOCBAQAogCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqIHVjb250cm9sKQogewogCXNuZF9jYXJkX3NhYTcxMzRfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGNoaXAtPmRldjsKKwogCWludCBjaGFuZ2UsIGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAlpbnQgbGVmdCwgcmlnaHQ7CiAKQEAgLTcyNywxMCArNzMwLDUyIEBACiAJaWYgKHJpZ2h0ID4gMjApCiAJCXJpZ2h0ID0gMjA7CiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bWl4ZXJfbG9jayk7Ci0JY2hhbmdlID0gY2hpcC0+bWl4ZXJfdm9sdW1lW2FkZHJdWzBdICE9IGxlZnQgfHwKLQkJIGNoaXAtPm1peGVyX3ZvbHVtZVthZGRyXVsxXSAhPSByaWdodDsKLQljaGlwLT5taXhlcl92b2x1bWVbYWRkcl1bMF0gPSBsZWZ0OwotCWNoaXAtPm1peGVyX3ZvbHVtZVthZGRyXVsxXSA9IHJpZ2h0OworCWNoYW5nZSA9IDA7CisJaWYgKGNoaXAtPm1peGVyX3ZvbHVtZVthZGRyXVswXSAhPSBsZWZ0KSB7CisJCWNoYW5nZSA9IDE7CisJCXJpZ2h0ID0gbGVmdDsKKwl9CisJaWYgKGNoaXAtPm1peGVyX3ZvbHVtZVthZGRyXVsxXSAhPSByaWdodCkgeworCQljaGFuZ2UgPSAxOworCQlsZWZ0ID0gcmlnaHQ7CisJfQorCWlmIChjaGFuZ2UpIHsKKwkJc3dpdGNoIChkZXYtPnBjaS0+ZGV2aWNlKSB7CisJCQljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0OgorCQkJCXN3aXRjaCAoYWRkcikgeworCQkJCQljYXNlIE1JWEVSX0FERFJfVFZUVU5FUjoKKwkJCQkJCWxlZnQgPSAyMDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIE1JWEVSX0FERFJfTElORTE6CisJCQkJCQlzYWFfYW5kb3JiKFNBQTcxMzRfQU5BTE9HX0lPX1NFTEVDVCwgIDB4MTAsCisJCQkJCQkJICAgKGxlZnQgPiAxMCkgPyAweDAwIDogMHgxMCk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBNSVhFUl9BRERSX0xJTkUyOgorCQkJCQkJc2FhX2FuZG9yYihTQUE3MTM0X0FOQUxPR19JT19TRUxFQ1QsICAweDIwLAorCQkJCQkJCSAgIChsZWZ0ID4gMTApID8gMHgwMCA6IDB4MjApOworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMzoKKwkJCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzU6CisJCQkJc3dpdGNoIChhZGRyKSB7CisJCQkJCWNhc2UgTUlYRVJfQUREUl9UVlRVTkVSOgorCQkJCQkJbGVmdCA9IDIwOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgTUlYRVJfQUREUl9MSU5FMToKKwkJCQkJCXNhYV9hbmRvcmIoMHgwNTk0LCAgMHgxMCwKKwkJCQkJCQkgICAobGVmdCA+IDEwKSA/IDB4MDAgOiAweDEwKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIE1JWEVSX0FERFJfTElORTI6CisJCQkJCQlzYWFfYW5kb3JiKDB4MDU5NCwgIDB4MjAsCisJCQkJCQkJICAgKGxlZnQgPiAxMCkgPyAweDAwIDogMHgyMCk7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCX0KKwkJY2hpcC0+bWl4ZXJfdm9sdW1lW2FkZHJdWzBdID0gbGVmdDsKKwkJY2hpcC0+bWl4ZXJfdm9sdW1lW2FkZHJdWzFdID0gcmlnaHQ7CisJfQogCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bWl4ZXJfbG9jayk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IDUxZjBjZmQuLmFlOTg0YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtMjQ2MiwxNCArMjQ2MiwxNyBAQAogCQkJLnZtdXggPSAxLAogCQkJLmFtdXggPSBUViwKIAkJCS50diAgID0gMSwKKwkJCS5ncGlvID0gMHgwMDAwMDAwLAogCQl9LHsKIAkJCS5uYW1lID0gbmFtZV9jb21wMSwKIAkJCS52bXV4ID0gMywKIAkJCS5hbXV4ID0gTElORTIsCisJCQkuZ3BpbyA9IDB4MDIwMDAwMCwKIAkJfSx7CiAJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAogCQkJLnZtdXggPSA4LAogCQkJLmFtdXggPSBMSU5FMiwKKwkJCS5ncGlvID0gMHgwMjAwMDAwLAogCQl9fSwKIAkJLnJhZGlvID0gewogCQkJLm5hbWUgPSBuYW1lX3JhZGlvLApAQCAtMjU2Nyw2ICsyNTcwLDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuZ3Bpb21hc2sgICAgICAgPSAxIDw8IDIxLAogCQkuaW5wdXRzID0ge3sKIAkJCS5uYW1lICAgPSBuYW1lX3R2LAogCQkJLnZtdXggICA9IDEsCkBAIC0yNTc1LDE1ICsyNTc5LDIwIEBACiAJCX0sewogCQkJLm5hbWUgICA9IG5hbWVfY29tcDEsCiAJCQkudm11eCAgID0gMywKLQkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJCS5hbXV4ICAgPSBMSU5FMiwJLyogdW5jb25maXJtZWQsIHRha2VuIGZyb20gUGhpbGlwcyBkcml2ZXIgKi8KKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMiwKKwkJCS52bXV4ICAgPSAwLAkJLyogdW50ZXN0ZWQsIENvbXBvc2l0ZSBvdmVyIFMtVmlkZW8gKi8KKwkJCS5hbXV4ICAgPSBMSU5FMiwKIAkJfSx7CiAJCQkubmFtZSAgID0gbmFtZV9zdmlkZW8sCi0JCQkudm11eCAgID0gMCwKLQkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJCS52bXV4ICAgPSA4LAorCQkJLmFtdXggICA9IExJTkUyLAogCQl9fSwKIAkJLnJhZGlvID0gewogCQkJLm5hbWUgICA9IG5hbWVfcmFkaW8sCi0JCQkuYW11eCAgID0gTElORTEsCisJCQkuYW11eCAgID0gVFYsCisJCQkuZ3BpbyAgID0gMHgwMjAwMDAwLAogCQl9LAogCX0sCiAJW1NBQTcxMzRfQk9BUkRfQ0lORVJHWTI1MFBDSV0gPSB7CkBAIC0zMDIyLDYgKzMwMzEsMTU4IEBACiAJCQkuYW11eCAgID0gTElORTEsCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzMxMGldID0geworCQkubmFtZSAgICAgICAgICAgPSAiUGlubmFjbGUgUENUViAzMTBpIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMDAyMDAwMDAsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDQsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gTElORTIsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAyLAorCQkJLnZtdXggPSAwLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfX0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ICAgPSBUViwKKwkJCS5ncGlvICAgPSAweDAyMDAwMDAsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzUwN10gPSB7CisJCS8qIE1pa2hhaWwgRmVkb3RvdiA8bW9fZmVkb3RvdkBtYWlsLnJ1PiAqLworCQkubmFtZSAgICAgICAgICAgPSAiQXZlcm1lZGlhIEFWZXJUViBTdHVkaW8gNTA3IiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyNTZfSUgzLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMywKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCQkuZ3BpbyA9IDB4MDAsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAwLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJCS5ncGlvID0gMHgwMCwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDIsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUyLAorCQkJLmdwaW8gPSAweDAwLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUyLAorCQkJLmdwaW8gPSAweDAwLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJCS5ncGlvID0gMHgwMSwKKwkJfSwKKwkJLm11dGUgID0geworCQkJLm5hbWUgPSBuYW1lX211dGUsCisJCQkuYW11eCA9IExJTkUxLAorCQkJLmdwaW8gPSAweDAwLAorCQl9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwQV0gPSB7CisJCS8qIEZyYW5jaXMgQmFyYmVyIDxmZWRvcmFAYmFyYmVyLWZhbWlseS5pZC5hdT4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkNvbXBybyBWaWRlb21hdGUgRFZCLVQyMDBBIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCB8IFREQTk4ODdfUE9SVDFfQUNUSVZFLAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzID0ge3sKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDMsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ICAgPSA4LAorCQkJLmFtdXggICA9IExJTkUyLAorCQl9fSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwXSA9IHsKKwkJLyogVGhvbWFzIEdlbnR5IDx0b21sb2hhdmVAZ21haWwuY29tPiAqLworCQkubmFtZSAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWLUhWUjExMTAgRFZCLVQvSHlicmlkIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgICA9IG5hbWVfY29tcDEsCisJCQkudm11eCAgID0gMywKKwkJCS5hbXV4ICAgPSBMSU5FMiwgLyogRklYTUU6IGF1ZGlvIGRvZXNuJ3Qgd29yayBvbiBzdmlkZW8vY29tcG9zaXRlICovCisJCX0seworCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggICA9IDgsCisJCQkuYW11eCAgID0gTElORTIsIC8qIEZJWE1FOiBhdWRpbyBkb2Vzbid0IHdvcmsgb24gc3ZpZGVvL2NvbXBvc2l0ZSAqLworCQl9fSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggICA9IFRWLAorCQl9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ01DSUFdID0geworCQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSBIVCBQQ01DSUEiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmlucHV0cyA9IHt7CisJCQkubmFtZSAgID0gbmFtZV90diwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IFRWLAorCQkJLnR2ICAgICA9IDEsCisJCX0seworCQkJLm5hbWUgICA9IG5hbWVfY29tcDEsCisJCQkudm11eCAgID0gMCwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCAgID0gNiwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJfX0sCisJfSwKIH07CiAKIGNvbnN0IHVuc2lnbmVkIGludCBzYWE3MTM0X2Jjb3VudCA9IEFSUkFZX1NJWkUoc2FhNzEzNF9ib2FyZHMpOwpAQCAtMzYzMSw2ICszNzkyLDM2IEBACiAJCS5zdWJkZXZpY2UgICAgPSAweDQ4NjAsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FTVVNfRVVST1BBMl9IWUJSSUQsCiAJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTFiZCwKKwkJLnN1YmRldmljZSAgICA9IDB4MDAyZiwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8zMTBpLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE0NjEsIC8qIEF2ZXJtZWRpYSBUZWNobm9sb2dpZXMgSW5jICovCisJCS5zdWJkZXZpY2UgICAgPSAweDk3MTUsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fNTA3LAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDEwNDMsCisJCS5zdWJkZXZpY2UgICAgPSAweDQ4NzYsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlICAgID0gMHg2NzAxLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgxNTNiLAorCQkuc3ViZGV2aWNlICAgID0gMHgxMTcyLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9DSU5FUkdZX0hUX1BDTUNJQSwKKwl9LHsKIAkJLyogLS0tIGJvYXJkcyB3aXRob3V0IGVlcHJvbSArIHN1YnN5c3RlbSBJRCAtLS0gKi8KIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LApAQCAtMzcxNyw2ICszOTA4LDcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBXzMwNToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX1NUVURJT18zMDc6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV8zMDc6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fNTA3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfR09fMDA3X0ZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfNzc3OgogLyogICAgICBjYXNlIFNBQTcxMzRfQk9BUkRfU0FCUkVOVF9TQlRUVkZNOiAgKi8gLyogbm90IGZpbmlzaGVkIHlldCAqLwpAQCAtMzcyNSw2ICszOTE3LDcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX1RWX0dPTERfUExVU0lJOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMDoKKwljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwQToKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUFOTElfTVRWMDAxOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9NQU5MSV9NVFYwMDI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDlGTToKQEAgLTM3OTMsNyArMzk4Niw5IEBACiAJCWJyZWFrOwogCS8qIGkyYyByZW1vdGVzICovCiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFX1BDVFZfMTEwaToKKwljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8zMTBpOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9VUE1PU1RfUFVSUExFX1RWOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMDoKIAkJZGV2LT5oYXNfcmVtb3RlID0gU0FBNzEzNF9SRU1PVEVfSTJDOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNjlfQjoKQEAgLTM5MjQsOSArNDExOSwxMSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RJR0VSOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzMxMGk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1RFVklPTl9EVkJUXzIyMFJGOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0RVQUw6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX01FRElPTl9NRDg4MDBfUVVBRFJPOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMDoKIAkJLyogdGhpcyBpcyBhIGh5YnJpZCBib2FyZCwgaW5pdGlhbGl6ZSB0byBhbmFsb2cgbW9kZQogCQkgKiBhbmQgY29uZmlndXJlIGZpcm13YXJlIGVlcHJvbSBhZGRyZXNzCiAJCSAqLwpAQCAtMzk1Miw2ICs0MTQ5LDE0IEBACiAJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1lfSFRfUENNQ0lBOgorCQkvKiBtYWtlIHRoZSB0ZGExMDA0NiBmaW5kIGl0cyBlZXByb20gKi8KKwkJeworCQl1OCBkYXRhW10gPSB7IDB4M2MsIDB4MzMsIDB4NjB9OworCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHI9MHgwOCwgLmZsYWdzPTAsIC5idWY9ZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKX07CisJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9BVFNDMTEwOgogCQl7CiAJCQkvKiBlbmFibGUgdHVuZXIgKi8KQEAgLTM5NjQsNiArNDE2OSwyOSBAQAogCQkJCQkgICAgICAgZGV2LT5uYW1lLCBpKTsKIAkJfQogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDBBOgorCQkvKiBUaGUgVDIwMCBhbmQgdGhlIFQyMDBBIHNoYXJlIHRoZSBzYW1lIHBjaSBpZC4gIENvbnNlcXVlbnRseSwKKwkJICogd2UgYXJlIGdvaW5nIHRvIHF1ZXJ5IGVlcHJvbSB0byB0cnkgdG8gZmluZCBvdXQgd2hpY2ggb25lIHdlCisJCSAqIGFyZSBhY3R1YWxseSBsb29raW5nIGF0LiAqLworCisJCS8qIERvbid0IGRvIHRoaXMgaWYgdGhlIGJvYXJkIHdhcyBzcGVjaWZpY2FsbHkgc2VsZWN0ZWQgd2l0aCBhbgorCQkgKiBpbnNtb2Qgb3B0aW9uIG9yIGlmIHdlIGhhdmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBUMjAwKi8KKwkJaWYoIWRldi0+YXV0b2RldGVjdGVkIHx8IChkZXYtPmVlZGF0YVsweDQxXSA9PSAweGQwKSkKKwkJCWJyZWFrOworCQlpZihkZXYtPmVlZGF0YVsweDQxXSA9PSAweDAyKSB7CisJCQkvKiBSZWNvbmZpZ3VyZSBib2FyZCAgYXMgVDIwMEEgKi8KKwkJCWRldi0+Ym9hcmQgPSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMEE7CisJCQlkZXYtPnR1bmVyX3R5cGUgICA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnR1bmVyX3R5cGU7CisJCQlkZXYtPnRkYTk4ODdfY29uZiA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnRkYTk4ODdfY29uZjsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNvbmZpZ3VyZWQgYm9hcmQgYXMgJXNcbiIsCisJCQkJZGV2LT5uYW1lLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmV4cGVjdGVkIHR1bmVyIHR5cGUgaW5mbzogJXggaW4gZWVwcm9tXG4iLAorCQkJCWRldi0+bmFtZSwgZGV2LT5lZWRhdGFbMHg0MV0pOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCmluZGV4IDVjOWU2M2QuLmVkMDM4ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKQEAgLTg4OSwxNSArODg5LDE2IEBACiAJCW11c3RfY29uZmlndXJlX21hbnVhbGx5KCk7CiAJCWRldi0+Ym9hcmQgPSBTQUE3MTM0X0JPQVJEX1VOS05PV047CiAJfQorCWRldi0+YXV0b2RldGVjdGVkID0gY2FyZFtkZXYtPm5yXSAhPSBkZXYtPmJvYXJkOwogCWRldi0+dHVuZXJfdHlwZSAgID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHVuZXJfdHlwZTsKIAlkZXYtPnRkYTk4ODdfY29uZiA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnRkYTk4ODdfY29uZjsKIAlpZiAoVU5TRVQgIT0gdHVuZXJbZGV2LT5ucl0pCiAJCWRldi0+dHVuZXJfdHlwZSA9IHR1bmVyW2Rldi0+bnJdOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBzdWJzeXN0ZW06ICUwNHg6JTA0eCwgYm9hcmQ6ICVzIFtjYXJkPSVkLCVzXVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLHBjaV9kZXYtPnN1YnN5c3RlbV92ZW5kb3IsCi0JICAgICAgIHBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2Usc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwKLQkgICAgICAgZGV2LT5ib2FyZCwgY2FyZFtkZXYtPm5yXSA9PSBkZXYtPmJvYXJkID8KLQkgICAgICAgImluc21vZCBvcHRpb24iIDogImF1dG9kZXRlY3RlZCIpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogc3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc11cbiIsCisJCWRldi0+bmFtZSxwY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAorCQlwY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlLHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUsCisJCWRldi0+Ym9hcmQsIGRldi0+YXV0b2RldGVjdGVkID8KKwkJImF1dG9kZXRlY3RlZCIgOiAiaW5zbW9kIG9wdGlvbiIpOwogCiAJLyogZ2V0IG1taW8gKi8KIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKaW5kZXggNmI2MWQ5Yi4uYzMzZjZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKQEAgLTUwLDYgKzUwLDEwIEBACiBtb2R1bGVfcGFyYW0oYW50ZW5uYV9wd3IsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFudGVubmFfcHdyLCJlbmFibGUgYW50ZW5uYSBwb3dlciAoUGlubmFjbGUgMzAwaSkiKTsKIAorc3RhdGljIGludCB1c2VfZnJvbnRlbmQgPSAwOworbW9kdWxlX3BhcmFtKHVzZV9mcm9udGVuZCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModXNlX2Zyb250ZW5kLCJmb3IgY2FyZHMgd2l0aCBtdWx0aXBsZSBmcm9udGVuZHMgKDA6IHRlcnJlc3RyaWFsLCAxOiBzYXRlbGxpdGUpIik7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBwaW5uYWNsZV9hbnRlbm5hX3B3cihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgaW50IG9uKQogewpAQCAtMjkzLDcgKzI5Nyw3IEBACiAJcmV0dXJuIHBoaWxpcHNfdGRhNjY1MV9wbGxfc2V0KDB4NjAsIGZlLCBwYXJhbXMpOwogfQogCi1zdGF0aWMgaW50IHBoaWxpcHNfdHUxMjE2X3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCitzdGF0aWMgaW50IHBoaWxpcHNfdGRhMTAwNHhfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OwpAQCAtMzA4LDcgKzMxMiw3IEBACiAJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzRNLAogCS5hZ2NfY29uZmlnICAgID0gVERBMTAwNDZfQUdDX0RFRkFVTFQsCiAJLmlmX2ZyZXEgICAgICAgPSBUREExMDA0Nl9GUkVRXzM2MTcsCi0JLnJlcXVlc3RfZmlybXdhcmUgPSBwaGlsaXBzX3R1MTIxNl9yZXF1ZXN0X2Zpcm13YXJlLAorCS5yZXF1ZXN0X2Zpcm13YXJlID0gcGhpbGlwc190ZGExMDA0eF9yZXF1ZXN0X2Zpcm13YXJlLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zMzEsMTIgKzMzNSwxMiBAQAogCS54dGFsX2ZyZXEgICAgID0gVERBMTAwNDZfWFRBTF80TSwKIAkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19ERUZBVUxULAogCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8zNjE3LAotCS5yZXF1ZXN0X2Zpcm13YXJlID0gcGhpbGlwc190dTEyMTZfcmVxdWVzdF9maXJtd2FyZSwKKwkucmVxdWVzdF9maXJtd2FyZSA9IHBoaWxpcHNfdGRhMTAwNHhfcmVxdWVzdF9maXJtd2FyZSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHBoaWxpcHNfZXVyb3BhX3R1bmVyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCitzdGF0aWMgaW50IHBoaWxpcHNfdGQxMzE2X3R1bmVyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OwogCXN0YXRpYyB1OCBtc2dbXSA9IHsgMHgwYiwgMHhmNSwgMHg4NiwgMHhhYiB9OwpAQCAtMzQ3LDE4ICszNTEsOCBAQAogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZpbml0X21zZywgMSkgIT0gMSkKIAkJcmV0dXJuIC1FSU87Ci0JbXNsZWVwKDEpOwotCi0JLyogc3dpdGNoIHRoZSBib2FyZCB0byBkdmIgbW9kZSAqLwotCWluaXRfbXNnLmFkZHIgPSAweDQzOwotCWluaXRfbXNnLmxlbiAgPSAweDAyOwotCW1zZ1swXSA9IDB4MDA7Ci0JbXNnWzFdID0gMHg0MDsKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZpbml0X21zZywgMSkgIT0gMSkKLQkJcmV0dXJuIC1FSU87Ci0KKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzY3LDYgKzM2MSwyMiBAQAogCXJldHVybiBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldCgweDYxLCBmZSwgcGFyYW1zKTsKIH0KIAorc3RhdGljIGludCBwaGlsaXBzX2V1cm9wYV90dW5lcl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdGF0aWMgdTggbXNnW10gPSB7IDB4MDAsIDB4NDB9OworCXN0cnVjdCBpMmNfbXNnIGluaXRfbXNnID0gey5hZGRyID0gMHg0MywuZmxhZ3MgPSAwLC5idWYgPSBtc2csLmxlbiA9IHNpemVvZihtc2cpIH07CisKKworCWlmIChwaGlsaXBzX3RkMTMxNl90dW5lcl9pbml0KGZlKSkKKwkJcmV0dXJuIC1FSU87CisJbXNsZWVwKDEpOworCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZpbml0X21zZywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBwaGlsaXBzX2V1cm9wYV90dW5lcl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CkBAIC02NzEsNyArNjgxLDcgQEAKIAkuaW52ZXJ0ICAgICAgICA9IDEsCiAJLmludmVydF9vY2xrICAgPSAwLAogCS54dGFsX2ZyZXEgICAgID0gVERBMTAwNDZfWFRBTF8xNk0sCi0JLmFnY19jb25maWcgICAgPSBUREExMDA0Nl9BR0NfVERBODI3WCwKKwkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYX0dQMTEsCiAJLmlmX2ZyZXEgICAgICAgPSBUREExMDA0Nl9GUkVRXzA0NSwKIAkucmVxdWVzdF9maXJtd2FyZSA9IE5VTEwsCiB9OwpAQCAtODEyLDYgKzgyMiwyNyBAQAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmdHVuZXJfbXNnLCAxKTsKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB0ZGE4MjkwX2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBlbmFibGUpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXN0YXRpYyB1OCB0ZGE4MjkwX2Nsb3NlW10gPSB7IDB4MjEsIDB4YzB9OworCXN0YXRpYyB1OCB0ZGE4MjkwX29wZW5bXSAgPSB7IDB4MjEsIDB4ODB9OworCXN0cnVjdCBpMmNfbXNnIHRkYTgyOTBfbXNnID0gey5hZGRyID0gMHg0YiwuZmxhZ3MgPSAwLCAubGVuID0gMn07CisJaWYgKGVuYWJsZSkgeworCQl0ZGE4MjkwX21zZy5idWYgPSB0ZGE4MjkwX2Nsb3NlOworCX0gZWxzZSB7CisJCXRkYTgyOTBfbXNnLmJ1ZiA9IHRkYTgyOTBfb3BlbjsKKwl9CisJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJnRkYTgyOTBfbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKwltc2xlZXAoMjApOwogCXJldHVybiAwOwogfQogCkBAIC04MjAsMjQgKzg1MSwxMSBAQAogc3RhdGljIGludCBwaGlsaXBzX3RpZ2VyX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCWludCByZXQ7Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OwotCXN0YXRpYyB1OCB0ZGE4MjkwX2Nsb3NlW10gPSB7IDB4MjEsIDB4YzB9OwotCXN0YXRpYyB1OCB0ZGE4MjkwX29wZW5bXSAgPSB7IDB4MjEsIDB4ODB9OwotCXN0cnVjdCBpMmNfbXNnIHRkYTgyOTBfbXNnID0gey5hZGRyID0gMHg0YiwuZmxhZ3MgPSAwLCAubGVuID0gMn07CiAKLQkvKiBjbG9zZSB0ZGE4MjkwIGkyYyBicmlkZ2UgKi8KLQl0ZGE4MjkwX21zZy5idWYgPSB0ZGE4MjkwX2Nsb3NlOwotCXJldCA9IGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJnRkYTgyOTBfbXNnLCAxKTsKLQlpZiAocmV0ICE9IDEpCi0JCXJldHVybiAtRUlPOwotCW1zbGVlcCgyMCk7CiAJcmV0ID0gcGhpbGlwc190ZGE4Mjd4YV9wbGxfc2V0KDB4NjEsIGZlLCBwYXJhbXMpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKLQkvKiBvcGVuIHRkYTgyOTAgaTJjIGJyaWRnZSAqLwotCXRkYTgyOTBfbXNnLmJ1ZiA9IHRkYTgyOTBfb3BlbjsKLQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZ0ZGE4MjkwX21zZywgMSk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwaGlsaXBzX3RpZ2VyX3R1bmVyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCkBAIC04NjcsMTMgKzg4NSw4MCBAQAogCS5pbnZlcnQgICAgICAgID0gMSwKIAkuaW52ZXJ0X29jbGsgICA9IDAsCiAJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzE2TSwKLQkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYLAorCS5hZ2NfY29uZmlnICAgID0gVERBMTAwNDZfQUdDX1REQTgyN1hfR1AxMSwKKwkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMDQ1LAorCS5yZXF1ZXN0X2Zpcm13YXJlID0gTlVMTCwKK307CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBjaW5lcmd5X2h0X3R1bmVyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXN0YXRpYyB1OCBkYXRhW10gPSB7IDB4M2MsIDB4MzMsIDB4NjJ9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkcj0weDA4LCAuZmxhZ3M9MCwgLmJ1Zj1kYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpfTsKKworCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpbmVyZ3lfaHRfdHVuZXJfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCXN0YXRpYyB1OCBkYXRhW10gPSB7IDB4M2MsIDB4MzMsIDB4NjB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkcj0weDA4LCAuZmxhZ3M9MCwgLmJ1Zj1kYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpfTsKKworCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcGhpbGlwc190ZGE4Mjd4YV90dW5lcl9zbGVlcCggMHg2MSwgZmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBjaW5lcmd5X2h0X2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MDgsCisJLmludmVydCAgICAgICAgPSAxLAorCS5pbnZlcnRfb2NsayAgID0gMCwKKwkueHRhbF9mcmVxICAgICA9IFREQTEwMDQ2X1hUQUxfMTZNLAorCS5hZ2NfY29uZmlnICAgID0gVERBMTAwNDZfQUdDX1REQTgyN1hfR1AwMSwKIAkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMDQ1LAogCS5yZXF1ZXN0X2Zpcm13YXJlID0gTlVMTCwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBwaW5uYWNsZV9wY3R2XzMxMGlfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwOCwKKwkuaW52ZXJ0ICAgICAgICA9IDEsCisJLmludmVydF9vY2xrICAgPSAwLAorCS54dGFsX2ZyZXEgICAgID0gVERBMTAwNDZfWFRBTF8xNk0sCisJLmFnY19jb25maWcgICAgPSBUREExMDA0Nl9BR0NfVERBODI3WF9HUDExLAorCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8wNDUsCisJLnJlcXVlc3RfZmlybXdhcmUgPSBwaGlsaXBzX3RkYTEwMDR4X3JlcXVlc3RfZmlybXdhcmUsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgaGF1cHBhdWdlX2h2cl8xMTEwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MDgsCisJLmludmVydCAgICAgICAgPSAxLAorCS5pbnZlcnRfb2NsayAgID0gMCwKKwkueHRhbF9mcmVxICAgICA9IFREQTEwMDQ2X1hUQUxfMTZNLAorCS5hZ2NfY29uZmlnICAgID0gVERBMTAwNDZfQUdDX1REQTgyN1hfR1AxMSwKKwkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMDQ1LAorCS5yZXF1ZXN0X2Zpcm13YXJlID0gcGhpbGlwc190ZGExMDA0eF9yZXF1ZXN0X2Zpcm13YXJlLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIGFzdXNfcDcxMzFfZHVhbF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDA4LAorCS5pbnZlcnQgICAgICAgID0gMSwKKwkuaW52ZXJ0X29jbGsgICA9IDAsCisJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzE2TSwKKwkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYX0dQMTEsCisJLmlmX2ZyZXEgICAgICAgPSBUREExMDA0Nl9GUkVRXzA0NSwKKwkucmVxdWVzdF9maXJtd2FyZSA9IHBoaWxpcHNfdGRhMTAwNHhfcmVxdWVzdF9maXJtd2FyZSwKK307CisKIHN0YXRpYyBpbnQgYXN1c19wNzEzMV9kdWFsX3R1bmVyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OwpAQCAtOTIxLDcgKzEwMDYsNyBAQAogCS5pbnZlcnQgICAgICAgID0gMSwKIAkuaW52ZXJ0X29jbGsgICA9IDAsCiAJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzE2TSwKLQkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYX0dQTCwKKwkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYX0dQMDAsCiAJLmlmX2ZyZXEgICAgICAgPSBUREExMDA0Nl9GUkVRXzA0NSwKIAkucmVxdWVzdF9maXJtd2FyZSA9IE5VTEwsCiB9OwpAQCAtOTU4LDcgKzEwNDMsNyBAQAogCS5pbnZlcnQgICAgICAgID0gMSwKIAkuaW52ZXJ0X29jbGsgICA9IDAsCiAJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzE2TSwKLQkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYX0dQTCwKKwkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYX0dQMDAsCiAJLmlmX2ZyZXEgICAgICAgPSBUREExMDA0Nl9GUkVRXzA0NSwKIAkucmVxdWVzdF9maXJtd2FyZSA9IE5VTEwsCiB9OwpAQCAtOTgzLDcgKzEwNjgsNyBAQAogCS5pbnZlcnQgICAgICAgID0gMSwKIAkuaW52ZXJ0X29jbGsgICA9IDAsCiAJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzE2TSwKLQkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYLAorCS5hZ2NfY29uZmlnICAgID0gVERBMTAwNDZfQUdDX1REQTgyN1hfR1AxMSwKIAkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMDQ1LAogCS5yZXF1ZXN0X2Zpcm13YXJlID0gTlVMTCwKIH07CkBAIC0xMDI4LDcgKzExMTMsNyBAQAogCS5pbnZlcnQgICAgICAgID0gMSwKIAkuaW52ZXJ0X29jbGsgICA9IDAsCiAJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzE2TSwKLQkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYLAorCS5hZ2NfY29uZmlnICAgID0gVERBMTAwNDZfQUdDX1REQTgyN1hfR1AxMSwKIAkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMDQ1LAogCS5yZXF1ZXN0X2Zpcm13YXJlID0gTlVMTCwKIH07CkBAIC0xMTY4LDYgKzEyNTMsMjkgQEAKIAkJCQkJICAgICAgICZwaGlsaXBzX3RpZ2VyX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CisJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSB0ZGE4MjkwX2kyY19nYXRlX2N0cmw7CisJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190aWdlcl90dW5lcl9pbml0OworCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAgPSBwaGlsaXBzX3RpZ2VyX3R1bmVyX3NsZWVwOworCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGlnZXJfdHVuZXJfc2V0X3BhcmFtczsKKwkJfQorCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8zMTBpOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCQkgICAgICAgJnBpbm5hY2xlX3BjdHZfMzEwaV9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgeworCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsID0gdGRhODI5MF9pMmNfZ2F0ZV9jdHJsOworCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGlnZXJfdHVuZXJfaW5pdDsKKwkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gcGhpbGlwc190aWdlcl90dW5lcl9zbGVlcDsKKwkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RpZ2VyX3R1bmVyX3NldF9wYXJhbXM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCQkgICAgICAgJmhhdXBwYXVnZV9odnJfMTExMF9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgeworCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsID0gdGRhODI5MF9pMmNfZ2F0ZV9jdHJsOwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGlnZXJfdHVuZXJfaW5pdDsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gcGhpbGlwc190aWdlcl90dW5lcl9zbGVlcDsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RpZ2VyX3R1bmVyX3NldF9wYXJhbXM7CkBAIC0xMTc1LDkgKzEyODMsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKLQkJCQkJICAgICAgICZwaGlsaXBzX3RpZ2VyX2NvbmZpZywKKwkJCQkJICAgICAgICZhc3VzX3A3MTMxX2R1YWxfY29uZmlnLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IHRkYTgyOTBfaTJjX2dhdGVfY3RybDsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBhc3VzX3A3MTMxX2R1YWxfdHVuZXJfaW5pdDsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gYXN1c19wNzEzMV9kdWFsX3R1bmVyX3NsZWVwOwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGlnZXJfdHVuZXJfc2V0X3BhcmFtczsKQEAgLTExOTQsMTIgKzEzMDMsMjcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCX1RSSU86Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCi0JCQkJCSAgICAgICAmbGlmZXZpZXdfdHJpb19jb25maWcsCi0JCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAgPSBsaWZldmlld190cmlvX3R1bmVyX3NsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGxpZmV2aWV3X3RyaW9fdHVuZXJfc2V0X3BhcmFtczsKKwkJaWYoISB1c2VfZnJvbnRlbmQpIHsJLy90ZXJyZXN0cmlhbAorCQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJCQkJCSAgICAgICAmbGlmZXZpZXdfdHJpb19jb25maWcsCisJCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOworCQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CisJCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAgPSBsaWZldmlld190cmlvX3R1bmVyX3NsZWVwOworCQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPQorCQkJCQkJCQlsaWZldmlld190cmlvX3R1bmVyX3NldF9wYXJhbXM7CisJCQl9CisJCX0gZWxzZSB7ICAJICAgICAgLy9zYXRlbGxpdGUKKwkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7CisJCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjMsCisJCQkJCQkJCQkmZGV2LT5pMmNfYWRhcCwgMCkgPT0gTlVMTCkgeworCQkJCQlwcmludGsoIiVzOiBMaWZldmlldyBUcmlvLCBObyB0ZGE4MjZ4IGZvdW5kIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQl9CisJCQkJaWYgKGR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAmZGV2LT5pMmNfYWRhcCwKKwkJCQkJCQkJCQkweDA4LCAwLCAwKSA9PSBOVUxMKSB7CisJCQkJCXByaW50aygiJXM6IExpZmV2aWV3IFRyaW8sIE5vIElTTDY0MjEgZm91bmQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCX0KKwkJCX0KIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQURTX0RVT19DQVJEQlVTX1BUVjMzMToKQEAgLTEyODEsNyArMTQwNSwyNyBAQAogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfZm1kMTIxNl90dW5lcl9zZXRfcGFyYW1zOwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDBBOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCSZwaGlsaXBzX2V1cm9wYV9jb25maWcsCisJCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3RkMTMxNl90dW5lcl9pbml0OworCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1lfSFRfUENNQ0lBOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCQkgICAgICAgJmNpbmVyZ3lfaHRfY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IHRkYTgyOTBfaTJjX2dhdGVfY3RybDsKKwkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBjaW5lcmd5X2h0X3R1bmVyX2luaXQ7CisJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IGNpbmVyZ3lfaHRfdHVuZXJfc2xlZXA7CisJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190aWdlcl90dW5lcl9zZXRfcGFyYW1zOwogCisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKCIlczogSHVoPyB1bmtub3duIERWQiBjYXJkP1xuIixkZXYtPm5hbWUpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKaW5kZXggNjE2MjU1MC4uNmY5ZmU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKQEAgLTM0MSw2ICszNDEsNyBAQAogCXN3aXRjaCAoY2xpZW50LT5hZGRyKSB7CiAJCWNhc2UgMHg3YToKIAkJY2FzZSAweDQ3OgorCQljYXNlIDB4NzE6CiAJCXsKIAkJCXN0cnVjdCBJUl9pMmMgKmlyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJCQlkMXByaW50aygiJXMgaTJjIElSIGRldGVjdGVkICglcykuXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggZGVlODM1NS4uNjBiMzhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC0xMTIsNiArMTEyLDI3IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X2tleV9odnIxMTEwKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJdW5zaWduZWQgY2hhciBidWZbNV0sIGNvZDQsIGNvZGUzLCBjb2RlNDsKKworCS8qIHBvbGwgSVIgY2hpcCAqLworCWlmICg1ICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsYnVmLDUpKQorCQlyZXR1cm4gLUVJTzsKKworCWNvZDQJPSBidWZbNF07CisJY29kZTQJPSAoY29kNCA+PiAyKTsKKwljb2RlMwk9IGJ1ZlszXTsKKwlpZiAoY29kZTMgPT0gMCkKKwkJLyogbm8ga2V5IHByZXNzZWQgKi8KKwkJcmV0dXJuIDA7CisKKwkvKiByZXR1cm4ga2V5ICovCisJKmlyX2tleSA9IGNvZGU0OworCSppcl9yYXcgPSBjb2RlNDsKKwlyZXR1cm4gMTsKK30KKwogdm9pZCBzYWE3MTM0X2lucHV0X2lycShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKQEAgLTEzMSw2ICsxNTIsMjMgQEAKIAltb2RfdGltZXIoJmlyLT50aW1lciwgdGltZW91dCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNhYTcxMzRfaXJfc3RhcnQoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTM0X2lyICppcikKK3sKKwlpZiAoaXItPnBvbGxpbmcpIHsKKwkJaW5pdF90aW1lcigmaXItPnRpbWVyKTsKKwkJaXItPnRpbWVyLmZ1bmN0aW9uID0gc2FhNzEzNF9pbnB1dF90aW1lcjsKKwkJaXItPnRpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpZGV2OworCQlpci0+dGltZXIuZXhwaXJlcyAgPSBqaWZmaWVzICsgSFo7CisJCWFkZF90aW1lcigmaXItPnRpbWVyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNhYTcxMzRfaXJfc3RvcChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5yZW1vdGUtPnBvbGxpbmcpCisJCWRlbF90aW1lcl9zeW5jKCZkZXYtPnJlbW90ZS0+dGltZXIpOworfQorCiBpbnQgc2FhNzEzNF9pbnB1dF9pbml0MShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9pciAqaXI7CkBAIC0xNDEsNiArMTc5LDcgQEAKIAl1MzIgbWFza19rZXl1cCAgID0gMDsKIAlpbnQgcG9sbGluZyAgICAgID0gMDsKIAlpbnQgaXJfdHlwZSAgICAgID0gSVJfVFlQRV9PVEhFUjsKKwlpbnQgZXJyOwogCiAJaWYgKGRldi0+aGFzX3JlbW90ZSAhPSBTQUE3MTM0X1JFTU9URV9HUElPKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE4NCw2ICsyMjMsNyBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfMzA3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzMwNToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX1NUVURJT18zMDc6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fNTA3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfR09fMDA3X0ZNOgogCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19hdmVybWVkaWE7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwN0M4OwpAQCAtMjY2LDkgKzMwNiw4IEBACiAJaXIgPSBremFsbG9jKHNpemVvZigqaXIpLCBHRlBfS0VSTkVMKTsKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpIHsKLQkJa2ZyZWUoaXIpOwotCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CiAJfQogCiAJaXItPmRldiA9IGlucHV0X2RldjsKQEAgLTI5OSwxOCArMzM4LDIyIEBACiAJfQogCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmZGV2LT5wY2ktPmRldjsKIAotCS8qIGFsbCBkb25lICovCiAJZGV2LT5yZW1vdGUgPSBpcjsKLQlpZiAoaXItPnBvbGxpbmcpIHsKLQkJaW5pdF90aW1lcigmaXItPnRpbWVyKTsKLQkJaXItPnRpbWVyLmZ1bmN0aW9uID0gc2FhNzEzNF9pbnB1dF90aW1lcjsKLQkJaXItPnRpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpZGV2OwotCQlpci0+dGltZXIuZXhwaXJlcyAgPSBqaWZmaWVzICsgSFo7Ci0JCWFkZF90aW1lcigmaXItPnRpbWVyKTsKLQl9CisJc2FhNzEzNF9pcl9zdGFydChkZXYsIGlyKTsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShpci0+ZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaXItPmRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3N0b3A7CisKIAlyZXR1cm4gMDsKKworIGVycl9vdXRfc3RvcDoKKwlzYWE3MTM0X2lyX3N0b3AoZGV2KTsKKwlkZXYtPnJlbW90ZSA9IE5VTEw7CisgZXJyX291dF9mcmVlOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUoaXIpOworCXJldHVybiBlcnI7CiB9CiAKIHZvaWQgc2FhNzEzNF9pbnB1dF9maW5pKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQpAQCAtMzE4LDggKzM2MSw3IEBACiAJaWYgKE5VTEwgPT0gZGV2LT5yZW1vdGUpCiAJCXJldHVybjsKIAotCWlmIChkZXYtPnJlbW90ZS0+cG9sbGluZykKLQkJZGVsX3RpbWVyX3N5bmMoJmRldi0+cmVtb3RlLT50aW1lcik7CisJc2FhNzEzNF9pcl9zdG9wKGRldik7CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT5yZW1vdGUtPmRldik7CiAJa2ZyZWUoZGV2LT5yZW1vdGUpOwogCWRldi0+cmVtb3RlID0gTlVMTDsKQEAgLTMzNSw2ICszNzcsNyBAQAogCiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFX1BDVFZfMTEwaToKKwljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8zMTBpOgogCQlzbnByaW50Zihpci0+Yy5uYW1lLCBzaXplb2YoaXItPmMubmFtZSksICJQaW5uYWNsZSBQQ1RWIik7CiAJCWlmIChwaW5uYWNsZV9yZW1vdGUgPT0gMCkgewogCQkJaXItPmdldF9rZXkgICA9IGdldF9rZXlfcGlubmFjbGVfY29sb3I7CkBAIC0zNDksNiArMzkyLDExIEBACiAJCWlyLT5nZXRfa2V5ICAgPSBnZXRfa2V5X3B1cnBsZXR2OwogCQlpci0+aXJfY29kZXMgID0gaXJfY29kZXNfcHVycGxldHY7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMDoKKwkJc25wcmludGYoaXItPmMubmFtZSwgc2l6ZW9mKGlyLT5jLm5hbWUpLCAiSFZSIDExMTAiKTsKKwkJaXItPmdldF9rZXkgICA9IGdldF9rZXlfaHZyMTExMDsKKwkJaXItPmlyX2NvZGVzICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXc7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRwcmludGsoIlNob3VsZG4ndCBnZXQgaGVyZTogVW5rbm93biBib2FyZCAleCBmb3IgSTJDIElSP1xuIixkZXYtPmJvYXJkKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCA3Y2Y5NmI0Li5lODhhZDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTIyNyw2ICsyMjcsMTEgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9QUk9URVVTXzIzMDkgOTgKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVIgICA5OQogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FTVVNfRVVST1BBMl9IWUJSSUQgMTAwCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8zMTBpICAxMDEKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzUwNyAxMDIKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDBBICAxMDMKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMCAgICAxMDQKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9DSU5FUkdZX0hUX1BDTUNJQSAgICAxMDUKIAogI2RlZmluZSBTQUE3MTM0X01BWEJPQVJEUyA4CiAjZGVmaW5lIFNBQTcxMzRfSU5QVVRfTUFYIDgKQEAgLTQ0Niw2ICs0NTEsOSBAQAogCXN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgICAgIHByaW87CiAjZW5kaWYKIAorCS8qIGluc21vZCBvcHRpb24vYXV0b2RldGVjdGVkICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2RldGVjdGVkOworCiAJLyogdmFyaW91cyBkZXZpY2UgaW5mbyAqLwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHJlc291cmNlczsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICAgICAgICAqdmlkZW9fZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMKaW5kZXggNmQxZWYxZS4uYTFlYzNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jCkBAIC02ODcsNyArNjg3LDcgQEAKIAkJc3R2NjgwLT5zYnVmW2ldLmRhdGEgPSBrbWFsbG9jIChzdHY2ODAtPnJhd2J1ZnNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoc3R2NjgwLT5zYnVmW2ldLmRhdGEgPT0gTlVMTCkgewogCQkJUERFQlVHICgwLCAiU1RWKGUpOiBDb3VsZCBub3Qga21hbGxvYyByYXcgZGF0YSBidWZmZXIgJWkiLCBpKTsKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gbm9tZW1fZXJyOwogCQl9CiAJfQogCkBAIC02OTgsNyArNjk4LDcgQEAKIAkJc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEgPSBrbWFsbG9jIChzdHY2ODAtPnJhd2J1ZnNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEgPT0gTlVMTCkgewogCQkJUERFQlVHICgwLCAiU1RWKGUpOiBDb3VsZCBub3Qga21hbGxvYyByYXcgc2NyYXRjaCBidWZmZXIgJWkiLCBpKTsKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gbm9tZW1fZXJyOwogCQl9CiAJCXN0djY4MC0+c2NyYXRjaFtpXS5zdGF0ZSA9IEJVRkZFUl9VTlVTRUQ7CiAJfQpAQCAtNzA2LDcgKzcwNiw3IEBACiAJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQlVGOyBpKyspIHsKIAkJdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlnb3RvIG5vbWVtX2VycjsKIAogCQkvKiBzYnVmIGlzIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsYXRlciBnZXRzIG1lbWNweWVkIHRvIHNjcmF0Y2ggKi8KIAkJdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgc3R2NjgwLT51ZGV2LApAQCAtNzIxLDYgKzcyMSwyMSBAQAogCiAJc3R2NjgwLT5mcmFtZWNvdW50ID0gMDsKIAlyZXR1cm4gMDsKKworIG5vbWVtX2VycjoKKwlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNDUkFUQ0g7IGkrKykgeworCQlrZnJlZShzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSk7CisJCXN0djY4MC0+c2NyYXRjaFtpXS5kYXRhID0gTlVMTDsKKwl9CisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQlVGOyBpKyspIHsKKwkJdXNiX2tpbGxfdXJiKHN0djY4MC0+dXJiW2ldKTsKKwkJdXNiX2ZyZWVfdXJiKHN0djY4MC0+dXJiW2ldKTsKKwkJc3R2NjgwLT51cmJbaV0gPSBOVUxMOworCQlrZnJlZShzdHY2ODAtPnNidWZbaV0uZGF0YSk7CisJCXN0djY4MC0+c2J1ZltpXS5kYXRhID0gTlVMTDsKKwl9CisJcmV0dXJuIC1FTk9NRU07CisKIH0KIAogc3RhdGljIGludCBzdHY2ODBfc3RvcF9zdHJlYW0gKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4ODcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg4Ny5jCmluZGV4IDg3ZmZiMGUuLmZkZTU3NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg4Ny5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg4Ny5jCkBAIC00ODIsNiArNDgyLDEyIEBACiAJCWJ1ZlsxXSAmPSB+Y1FTUzsKIAlpZiAodC0+dGRhOTg4N19jb25maWcgJiBUREE5ODg3X0dBVElOR18xOCkKIAkJYnVmWzNdICY9IH5jR2F0aW5nXzM2OworCisJaWYgKHQtPnRkYTk4ODdfY29uZmlnICYgVERBOTg4N19HQUlOX05PUk1BTCkgeworCQlyYWRpb19zdGVyZW8uZSAmPSB+Y1R1bmVyR2FpbkxvdzsKKwkJcmFkaW9fbW9uby5lICY9IH5jVHVuZXJHYWluTG93OworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCmluZGV4IDQwNTkwYmEuLmVlNGE0OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCkBAIC0yNjcsNiArMjY3LDEwIEBACiB7CiAJaWYgKCh0LT5zdGQgJiBWNEwyX1NURF9QQUwpID09IFY0TDJfU1REX1BBTCkgewogCQlzd2l0Y2ggKHBhbFswXSkgeworCQljYXNlICc2JzoKKwkJCXR1bmVyX2RiZyAoImluc21vZCBmaXh1cDogUEFMID0+IFBBTC02MFxuIik7CisJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfNjA7CisJCQlicmVhazsKIAkJY2FzZSAnYic6CiAJCWNhc2UgJ0InOgogCQljYXNlICdnJzoKQEAgLTQ0Myw2ICs0NDcsMTAgQEAKIAkJCXByaW50aygiJTAyeCAiLGJ1ZmZlcltpXSk7CiAJCXByaW50aygiXG4iKTsKIAl9CisJLyogSEFDSzogVGhpcyB0ZXN0IHdlcmUgYWRkZWQgdG8gYXZvaWQgdHVuZXIgdG8gcHJvYmUgdGRhOTg0MCBhbmQgdGVhNjQxNWMgb24gdGhlIE1YQiBjYXJkICovCisJaWYgKGFkYXAtPmlkID09IEkyQ19IV19TQUE3MTQ2ICYmIGFkZHIgPCAweDRhKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIGF1dG9kZXRlY3Rpb24gY29kZSBiYXNlZCBvbiB0aGUgaTJjIGFkZHIgKi8KIAlpZiAoIW5vX2F1dG9kZXRlY3QpIHsKIAkJc3dpdGNoIChhZGRyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYwppbmRleCA2M2RiNGU5Li4xYjliMDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMKQEAgLTEwOCw2ICsxMDgsNyBAQAogCQljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszOgogCQljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMzoKIAkJY2FzZSBUVU5FUl9QSElMSVBTX0ZNMTI1Nl9JSDM6CisJCWNhc2UgVFVORVJfTEdfTlRTQ19UQVBFOgogCQkJc3RlcmVvID0gKChzdGF0dXMgJiBUVU5FUl9TSUdOQUwpID09IFRVTkVSX1NURVJFT19NSzMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00MjEsNiArNDIyLDcgQEAKIAljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszOgogCWNhc2UgVFVORVJfUEhJTElQU19GTTEyMzZfTUszOgogCWNhc2UgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszOgorCWNhc2UgVFVORVJfTEdfTlRTQ19UQVBFOgogCQlidWZmZXJbM10gPSAweDE5OwogCQlicmVhazsKIAljYXNlIFRVTkVSX1RORl81MzM1TUY6CkBAIC00NjUsNiArNDY3LDggQEAKIAkJCWNvbmZpZyB8PSBUREE5ODg3X0lOVEVSQ0FSUklFUjsKIC8qCQlpZiAocGFyYW1zLT5wb3J0MV9zZXRfZm9yX2ZtX21vbm8pCiAJCQljb25maWcgJj0gflREQTk4ODdfUE9SVDFfQUNUSVZFOyovCisJCWlmIChwYXJhbXMtPmZtX2dhaW5fbm9ybWFsKQorCQkJY29uZmlnIHw9IFREQTk4ODdfR0FJTl9OT1JNQUw7CiAJCWkyY19jbGllbnRzX2NvbW1hbmQoYy0+YWRhcHRlciwgVERBOTg4N19TRVRfQ09ORklHLCAmY29uZmlnKTsKIAl9CiAJaWYgKDQgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsYnVmZmVyLDQpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItdHlwZXMuYwppbmRleCA3ODE2ODIzLi43NGMzZTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci10eXBlcy5jCkBAIC02NTEsNiArNjUxLDcgQEAKIAkJLmhhc190ZGE5ODg3ID0gMSwKIAkJLnBvcnQxX2ludmVydF9mb3Jfc2VjYW1fbGMgPSAxLAogCQkuZGVmYXVsdF9wbGxfZ2F0aW5nXzE4ID0gMSwKKwkJLmZtX2dhaW5fbm9ybWFsPTEsCiAJfSwKIH07CiAKQEAgLTY3MiwxNiArNjczLDYgQEAKIAl9LAogfTsKIAotLyogLS0tLS0tLS0tLS0tIFRVTkVSX0xHX05UU0NfVEFQRSAtIExHSU5OT1RFSyBOVFNDIC0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9sZ19udHNjX3RhcGVfcGFyYW1zW10gPSB7Ci0JewotCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAotCQkucmFuZ2VzID0gdHVuZXJfZm0xMjM2X21rM19udHNjX3JhbmdlcywKLQkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfZm0xMjM2X21rM19udHNjX3JhbmdlcyksCi0JfSwKLX07Ci0KIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9UTkZfODgzMUJHRkYgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90bmZfODgzMWJnZmZfcGFsX3Jhbmdlc1tdID0gewpAQCAtMTMzMSw4ICsxMzIyLDggQEAKIAl9LAogCVtUVU5FUl9MR19OVFNDX1RBUEVdID0geyAvKiBMR0lOTk9URUsgTlRTQyAqLwogCQkubmFtZSAgID0gIkxHIE5UU0MgKFRBUEUgc2VyaWVzKSIsCi0JCS5wYXJhbXMgPSB0dW5lcl9sZ19udHNjX3RhcGVfcGFyYW1zLAotCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9sZ19udHNjX3RhcGVfcGFyYW1zKSwKKwkJLnBhcmFtcyA9IHR1bmVyX2ZtMTIzNl9tazNfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9mbTEyMzZfbWszX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfVE5GXzg4MzFCR0ZGXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KIAkJLm5hbWUgICA9ICJUZW5uYSBUTkYgODgzMSBCR0ZGKSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKaW5kZXggNmI5ZWY3My4uNGU3YzFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAiVGhvbXBzb24gRFRUNzU3In0sCiAJLyogODAtODkgKi8KIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJQaGlsaXBzIEZRMTIxNkxNRSBNSzMifSwKLQl7IFRVTkVSX0FCU0VOVCwgICAgICAgICJMRyBUQVBDIEc3MDFEIn0sCisJeyBUVU5FUl9MR19QQUxfTkVXX1RBUEMsICJMRyBUQVBDIEc3MDFEIn0sCiAJeyBUVU5FUl9MR19OVFNDX05FV19UQVBDLCAiTEcgVEFQQyBINzkxRiJ9LAogCXsgVFVORVJfTEdfUEFMX05FV19UQVBDLCAiVENMIDIwMDJNQiAzIn0sCiAJeyBUVU5FUl9MR19QQUxfTkVXX1RBUEMsICJUQ0wgMjAwMk1JIDMifSwKQEAgLTQzMCw3ICs0MzAsNyBAQAogCQkJdHZlZS0+aGFzX3JhZGlvID0gZWVwcm9tX2RhdGFbaStsZW4tMV07CiAJCQkvKiBvbGQgc3R5bGUgdGFnLCBkb24ndCBrbm93IGhvdyB0byBkZXRlY3QKIAkJCUlSIHByZXNlbmNlLCBtYXJrIGFzIHVua25vd24uICovCi0JCQl0dmVlLT5oYXNfaXIgPSAyOworCQkJdHZlZS0+aGFzX2lyID0gLTE7CiAJCQl0dmVlLT5tb2RlbCA9CiAJCQkJZWVwcm9tX2RhdGFbaSs4XSArCiAJCQkJKGVlcHJvbV9kYXRhW2krOV0gPDwgOCk7CkBAIC02NTMsMTMgKzY1MywxNCBAQAogCQkJU1RSTShkZWNvZGVySUMsIHR2ZWUtPmRlY29kZXJfcHJvY2Vzc29yKSwKIAkJCXR2ZWUtPmRlY29kZXJfcHJvY2Vzc29yKTsKIAl9Ci0JaWYgKHR2ZWUtPmhhc19pciA9PSAyKQorCWlmICh0dmVlLT5oYXNfaXIgPT0gLTEpCiAJCXR2ZWVwcm9tX2luZm8oImhhcyAlc3JhZGlvXG4iLAogCQkJCXR2ZWUtPmhhc19yYWRpbyA/ICIiIDogIm5vICIpOwogCWVsc2UKLQkJdHZlZXByb21faW5mbygiaGFzICVzcmFkaW8sIGhhcyAlc0lSIHJlbW90ZVxuIiwKKwkJdHZlZXByb21faW5mbygiaGFzICVzcmFkaW8sIGhhcyAlc0lSIHJlY2VpdmVyLCBoYXMgJXNJUiB0cmFuc21pdHRlclxuIiwKIAkJCQl0dmVlLT5oYXNfcmFkaW8gPyAiIiA6ICJubyAiLAotCQkJCXR2ZWUtPmhhc19pciA/ICIiIDogIm5vICIpOworCQkJCSh0dmVlLT5oYXNfaXIgJiAxKSA/ICIiIDogIm5vICIsCisJCQkJKHR2ZWUtPmhhc19pciAmIDIpID8gIiIgOiAibm8gIik7CiB9CiBFWFBPUlRfU1lNQk9MKHR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2cpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuYwppbmRleCBiYmYyYmVlLi5lYzBmZjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMKQEAgLTg2LDYgKzg2LDcgQEAKIHN0YXRpYyB2b2lkIHFjbV9yZWdpc3Rlcl9pbnB1dChzdHJ1Y3QgcWNtICpjYW0sIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBlcnJvcjsKIAogCXVzYl9tYWtlX3BhdGgoZGV2LCBjYW0tPmlucHV0X3BoeXNuYW1lLCBzaXplb2YoY2FtLT5pbnB1dF9waHlzbmFtZSkpOwogCXN0cm5jYXQoY2FtLT5pbnB1dF9waHlzbmFtZSwgIi9pbnB1dDAiLCBzaXplb2YoY2FtLT5pbnB1dF9waHlzbmFtZSkpOwpAQCAtMTA2LDcgKzEwNywxMyBAQAogCiAJaW5wdXRfZGV2LT5wcml2YXRlID0gY2FtOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNhbS0+aW5wdXQpOworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNhbS0+aW5wdXQpOworCWlmIChlcnJvcikgeworCQl3YXJuKCJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAorCQkgICAgIGVycm9yKTsKKwkJaW5wdXRfZnJlZV9kZXZpY2UoY2FtLT5pbnB1dCk7CisJCWNhbS0+aW5wdXQgPSBOVUxMOworCX0KIH0KIAogc3RhdGljIHZvaWQgcWNtX3VucmVnaXN0ZXJfaW5wdXQoc3RydWN0IHFjbSAqY2FtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmgKaW5kZXggYmFhYjljMC4uMTdhY2UzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5oCkBAIC0zNSwyNyArMzUsMTMgQEAKIH07CiAKIHN0cnVjdCBiYXlMMCB7Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JdTggcjsKLQl1OCBnOwotI2VsaWYgX19MSVRUTEVfRU5ESUFOCiAJdTggZzsKIAl1OCByOwotI2Vsc2UKLSNlcnJvciBub3QgYnl0ZSBvcmRlciBkZWZpbmVkCi0jZW5kaWYKIH07CiAKIHN0cnVjdCBiYXlMMSB7Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JdTggZzsKLQl1OCBiOwotI2VsaWYgX19MSVRUTEVfRU5ESUFOCiAJdTggYjsKIAl1OCBnOwotI2Vsc2UKLSNlcnJvciBub3QgYnl0ZSBvcmRlciBkZWZpbmVkCi0jZW5kaWYKIH07CiAKIHN0cnVjdCBjYW1fc2l6ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKaW5kZXggZDhiODgwMi4uYjU2MGM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYwpAQCAtNjkwLDcgKzY5MCw3IEBACiAJfQogCiAJYmFzZV9zaXplID0gbnVtX2NhbXMgKiBzaXplb2Yoc3RydWN0IHV2ZCkgKyBzaXplb2Yoc3RydWN0IHVzYnZpZGVvKTsKLQljYW1zID0gKHN0cnVjdCB1c2J2aWRlbyAqKSBremFsbG9jKGJhc2Vfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJY2FtcyA9IGt6YWxsb2MoYmFzZV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FtcyA9PSBOVUxMKSB7CiAJCWVycigiRmFpbGVkIHRvIGFsbG9jYXRlICVkLiBieXRlcyBmb3IgdXNidmlkZW8gc3RydWN0IiwgYmFzZV9zaXplKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzI0ZWYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vS2NvbmZpZwpAQCAtMCwwICsxLDEyIEBACitjb25maWcgVklERU9fVVNCVklTSU9OCisJdHJpc3RhdGUgIlVTQiB2aWRlbyBkZXZpY2VzIGJhc2VkIG9uIE5vZ2F0ZWNoIE5UMTAwMy8xMDA0LzEwMDUiCisJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMgorCXNlbGVjdCBWSURFT19UVU5FUgorCXNlbGVjdCBWSURFT19TQUE3MTFYIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJLS0taGVscC0tLQorCSAgVGhlcmUgYXJlIG1vcmUgdGhhbiA1MCBkaWZmZXJlbnQgVVNCIHZpZGVvIGRldmljZXMgYmFzZWQgb24KKwkgIE5UMTAwMy8xMDA0LzEwMDUgVVNCIEJyaWRnZXMuIFRoaXMgZHJpdmVyIGVuYWJsZXMgdXNpbmcgdGhvc2UKKwkgIGRldmljZXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYnZpc2lvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjOTJhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAordXNidmlzaW9uLW9ianMgIDo9IHVzYnZpc2lvbi1jb3JlLm8gdXNidmlzaW9uLXZpZGVvLm8gdXNidmlzaW9uLWkyYy5vIHVzYnZpc2lvbi1jYXJkcy5vCisKK29iai0kKENPTkZJR19WSURFT19VU0JWSVNJT04pICs9IHVzYnZpc2lvbi5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNhcmRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQwZTU4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jYXJkcy5jCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogVVNCVklTSU9OLkgKKyAqICB1c2J2aXNpb24gaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBKb2VyZyBIZWNrZW5iYWNoIDxqb2VyZ0BoZWNrZW5iYWNoLWF3LmRlPgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIHBhcnQgb2YgdXNidmlzaW9uIGRyaXZlciBwcm9qZWN0LgorICogVXBkYXRlcyB0byBkcml2ZXIgY29tcGxldGVkIGJ5IER3YWluZSBQLiBHYXJkZW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgInVzYnZpc2lvbi5oIgorCisvKiBTdXBwb3J0ZWQgRGV2aWNlczogQSB0YWJsZSBmb3IgdXNidmlzaW9uLmMqLworc3RydWN0IHVzYnZpc2lvbl9kZXZpY2VfZGF0YV9zdCAgdXNidmlzaW9uX2RldmljZV9kYXRhW10gPSB7CisJezB4RkZGMCwgMHhGRkYwLCAtMSwgQ09ERUNfU0FBNzExMSwgMywgVjRMMl9TVERfTlRTQywgIDEsIDEsIDEsIDEsIFRVTkVSX1BISUxJUFNfTlRTQ19NLCAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsICJDdXN0b20gRHVtbXkgVVNCVmlzaW9uIERldmljZSJ9LAorCXsweDBBNkYsIDB4MDQwMCwgLTEsIENPREVDX1NBQTcxMTMsIDQsIFY0TDJfU1REX05UU0MsICAxLCAwLCAxLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAiWGFuYm9vIn0sCisJezB4MDUwRCwgMHgwMjA4LCAtMSwgQ09ERUNfU0FBNzExMywgMiwgVjRMMl9TVERfUEFMLCAgIDEsIDAsIDEsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsICAwLCAgMywgIDcsICJCZWxraW4gVVNCVmlldyBJSSJ9LAorCXsweDA1NzEsIDB4MDAwMiwgIDAsIENPREVDX1NBQTcxMTEsIDIsIFY0TDJfU1REX1BBTCwgICAwLCAwLCAxLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsICA3LCAiZWNob0ZYIEludGVyVmlldyBMaXRlIn0sCisJezB4MDU3MywgMHgwMDAzLCAtMSwgQ09ERUNfU0FBNzExMSwgMiwgVjRMMl9TVERfTlRTQywgIDEsIDAsIDEsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsICJVU0JHZWFyIFVTQkctVjEgcmVzcC4gSEFNQSBVU0IifSwKKwl7MHgwNTczLCAweDA0MDAsIC0xLCBDT0RFQ19TQUE3MTEzLCA0LCBWNEwyX1NURF9OVFNDLCAgMCwgMCwgMSwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkQtTGluayBWMTAwIn0sCisJezB4MDU3MywgMHgyMDAwLCAtMSwgQ09ERUNfU0FBNzExMSwgMiwgVjRMMl9TVERfTlRTQywgIDEsIDAsIDEsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsICJYMTAgVVNCIENhbWVyYSJ9LAorCXsweDA1NzMsIDB4MmQwMCwgLTEsIENPREVDX1NBQTcxMTEsIDIsIFY0TDJfU1REX1BBTCwgICAxLCAwLCAxLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgIDMsICA3LCAiT3NwcmV5IDUwIn0sCisJezB4MDU3MywgMHgyZDAxLCAtMSwgQ09ERUNfU0FBNzExMywgMiwgVjRMMl9TVERfTlRTQywgIDAsIDAsIDEsIDAsIDAsCQkJICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkhhdXBwYXVnZSBVU0ItTGl2ZSBNb2RlbCA2MDAifSwKKwl7MHgwNTczLCAweDIxMDEsIC0xLCBDT0RFQ19TQUE3MTEzLCAyLCBWNEwyX1NURF9QQUwsICAgMiwgMCwgMSwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIlpvcmFuIENvLiBQTUQgKE5vZ2F0ZWNoKSBBVi1ncmFiYmVyIE1hbmhhdHRhbiJ9LAorCXsweDA1NzMsIDB4NDEwMCwgLTEsIENPREVDX1NBQTcxMTEsIDMsIFY0TDJfU1REX05UU0MsICAxLCAxLCAxLCAxLCBUVU5FUl9QSElMSVBTX05UU0NfTSwgICAgICAgLTEsIC0xLCAtMSwgMjAsIC0xLCAiTm9nYXRlY2ggVVNCLVRWIChOVFNDKSBGTSJ9LAorCXsweDA1NzMsIDB4NDExMCwgLTEsIENPREVDX1NBQTcxMTEsIDMsIFY0TDJfU1REX05UU0MsICAxLCAxLCAxLCAxLCBUVU5FUl9QSElMSVBTX05UU0NfTSwgICAgICAgLTEsIC0xLCAtMSwgMjAsIC0xLCAiUE5ZIFVTQi1UViAoTlRTQykgRk0ifSwKKwl7MHgwNTczLCAweDQ0NTAsICAwLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9QQUwsICAgMSwgMSwgMSwgMSwgVFVORVJfUEhJTElQU19QQUwsICAgICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIlBpeGVsVmlldyBQbGF5VHYtVVNCIFBSTyAoUEFMKSBGTSJ9LAorCXsweDA1NzMsIDB4NDU1MCwgIDAsIENPREVDX1NBQTcxMTMsIDMsIFY0TDJfU1REX1BBTCwgICAxLCAxLCAxLCAxLCBUVU5FUl9QSElMSVBTX1BBTCwgICAgICAgICAgLTEsIC0xLCAgMCwgIDMsICA3LCAiWlRWIFpULTcyMSAyLjRHSHogVVNCIEEvViBSZWNlaXZlciJ9LAorCXsweDA1NzMsIDB4NGQwMCwgLTEsIENPREVDX1NBQTcxMTEsIDMsIFY0TDJfU1REX05UU0MsICAxLCAwLCAxLCAxLCBUVU5FUl9QSElMSVBTX05UU0NfTSwgICAgICAgLTEsIC0xLCAtMSwgMjAsIC0xLCAiSGF1cHBhdWdlIFdpblR2LVVTQiBVU0EifSwKKwl7MHgwNTczLCAweDRkMDEsIC0xLCBDT0RFQ19TQUE3MTExLCAzLCBWNEwyX1NURF9OVFNDLCAgMSwgMCwgMSwgMSwgVFVORVJfUEhJTElQU19OVFNDX00sICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgIkhhdXBwYXVnZSBXaW5Udi1VU0IifSwKKwl7MHgwNTczLCAweDRkMDIsIC0xLCBDT0RFQ19TQUE3MTExLCAzLCBWNEwyX1NURF9OVFNDLCAgMSwgMCwgMSwgMSwgVFVORVJfUEhJTElQU19OVFNDX00sICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgIkhhdXBwYXVnZSBXaW5Udi1VU0IgKE5UU0MpIn0sCisJezB4MDU3MywgMHg0ZDAzLCAtMSwgQ09ERUNfU0FBNzExMSwgMywgVjRMMl9TVERfU0VDQU0sIDEsIDAsIDEsIDEsIFRVTkVSX1BISUxJUFNfU0VDQU0sICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsICJIYXVwcGF1Z2UgV2luVHYtVVNCIChTRUNBTSkgIn0sCisJezB4MDU3MywgMHg0ZDEwLCAtMSwgQ09ERUNfU0FBNzExMSwgMywgVjRMMl9TVERfTlRTQywgIDEsIDEsIDEsIDEsIFRVTkVSX1BISUxJUFNfTlRTQ19NLCAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsICJIYXVwcGF1Z2UgV2luVHYtVVNCIChOVFNDKSBGTSJ9LAorCXsweDA1NzMsIDB4NGQxMSwgLTEsIENPREVDX1NBQTcxMTEsIDMsIFY0TDJfU1REX1BBTCwgICAxLCAxLCAxLCAxLCBUVU5FUl9QSElMSVBTX1BBTCwgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAiSGF1cHBhdWdlIFdpblR2LVVTQiAoUEFMKSBGTSJ9LAorCXsweDA1NzMsIDB4NGQxMiwgLTEsIENPREVDX1NBQTcxMTEsIDMsIFY0TDJfU1REX1BBTCwgICAxLCAxLCAxLCAxLCBUVU5FUl9QSElMSVBTX1BBTCwgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAiSGF1cHBhdWdlIFdpblR2LVVTQiAoUEFMKSBGTSJ9LAorCXsweDA1NzMsIDB4NGQyYSwgIDAsIENPREVDX1NBQTcxMTMsIDMsIFY0TDJfU1REX05UU0MsICAxLCAxLCAxLCAxLCBUVU5FUl9NSUNST1RVTkVfNDA0OUZNNSwgICAgLTEsIC0xLCAgMCwgIDMsICA3LCAiSGF1cHBhdWdlIFdpblR2IFVTQiAoTlRTQykgRk0gTW9kZWwgNjAyIDQwMjAxIFJldiBCMjg1In0sCisJezB4MDU3MywgMHg0ZDJiLCAgMCwgQ09ERUNfU0FBNzExMywgMywgVjRMMl9TVERfTlRTQywgIDEsIDEsIDEsIDEsIFRVTkVSX01JQ1JPVFVORV80MDQ5Rk01LCAgICAtMSwgLTEsICAwLCAgMywgIDcsICJIYXVwcGF1Z2UgV2luVHYgVVNCIChOVFNDKSBGTSBNb2RlbCA2MDIgNDAyMDEgUmV2IEIyODIifSwKKwl7MHgwNTczLCAweDRkMmMsICAwLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9QQUwsICAgMSwgMCwgMSwgMSwgVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsIC0xLCAtMSwgIDAsICAzLCAgNywgIkhhdXBwYXVnZSBXaW5UdiBVU0IgKFBBTC9TRUNBTSkgNDAyMDkgUmV2IEUxQTUifSwKKwl7MHgwNTczLCAweDRkMjAsICAwLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9QQUwsICAgMSwgMSwgMSwgMSwgVFVORVJfUEhJTElQU19QQUwsICAgICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkhhdXBwYXVnZSBXaW5Udi1VU0IgSUkgKFBBTCkgRk0gTW9kZWwgNDAyMDEgUmV2IEIyMjYifSwKKwl7MHgwNTczLCAweDRkMjEsICAwLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9QQUwsICAgMSwgMCwgMSwgMSwgVFVORVJfUEhJTElQU19QQUwsICAgICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkhhdXBwYXVnZSBXaW5Udi1VU0IgSUkgKFBBTCkifSwKKwl7MHgwNTczLCAweDRkMjIsICAwLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9QQUwsICAgMSwgMCwgMSwgMSwgVFVORVJfUEhJTElQU19QQUwsICAgICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkhhdXBwYXVnZSBXaW5Udi1VU0IgSUkgKFBBTCkgTU9ERUwgNTY2In0sCisJezB4MDU3MywgMHg0ZDIzLCAtMSwgQ09ERUNfU0FBNzExMywgMywgVjRMMl9TVERfU0VDQU0sIDEsIDAsIDEsIDEsIFRVTkVSX1BISUxJUFNfU0VDQU0sICAgICAgICAtMSwgLTEsICAwLCAgMywgIDcsICJIYXVwcGF1Z2UgV2luVHYtVVNCIChTRUNBTSkgNEQyMyJ9LAorCXsweDA1NzMsIDB4NGQyNSwgLTEsIENPREVDX1NBQTcxMTMsIDMsIFY0TDJfU1REX1NFQ0FNLCAxLCAwLCAxLCAxLCBUVU5FUl9QSElMSVBTX1NFQ0FNLCAgICAgICAgLTEsIC0xLCAgMCwgIDMsICA3LCAiSGF1cHBhdWdlIFdpblR2LVVTQiAoU0VDQU0pIE1vZGVsIDQwMjA5IFJldiBCMjM0In0sCisJezB4MDU3MywgMHg0ZDI2LCAtMSwgQ09ERUNfU0FBNzExMywgMywgVjRMMl9TVERfU0VDQU0sIDEsIDAsIDEsIDEsIFRVTkVSX1BISUxJUFNfU0VDQU0sICAgICAgICAtMSwgLTEsICAwLCAgMywgIDcsICJIYXVwcGF1Z2UgV2luVHYtVVNCIChTRUNBTSkgTW9kZWwgNDAyMDkgUmV2IEIyNDMifSwKKwl7MHgwNTczLCAweDRkMjcsIC0xLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9QQUwsICAgMSwgMCwgMSwgMSwgVFVORVJfQUxQU19UU0JFMV9QQUwsICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkhhdXBwYXVnZSBXaW5Udi1VU0IgTW9kZWwgNDAyMDQgUmV2IEIyODEifSwKKwl7MHgwNTczLCAweDRkMjgsIC0xLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9QQUwsICAgMSwgMCwgMSwgMSwgVFVORVJfQUxQU19UU0JFMV9QQUwsICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkhhdXBwYXVnZSBXaW5Udi1VU0IgTW9kZWwgNDAyMDQgUmV2IEIyODMifSwKKwl7MHgwNTczLCAweDRkMjksIC0xLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9QQUwsICAgMSwgMCwgMSwgMSwgVFVORVJfUEhJTElQU19QQUwsICAgICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkhhdXBwYXVnZSBXaW5Udi1VU0IgTW9kZWwgNDAyMDUgUmV2IEIyOTgifSwKKwl7MHgwNTczLCAweDRkMzAsIC0xLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9OVFNDLCAgMSwgMSwgMSwgMSwgVFVORVJfUEhJTElQU19OVFNDX00sICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkhhdXBwYXVnZSBXaW5Udi1VU0IgRk0gTW9kZWwgNDAyMTEgUmV2IEIxMjMifSwKKwl7MHgwNTczLCAweDRkMzEsICAwLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9QQUwsICAgMSwgMSwgMSwgMSwgVFVORVJfUEhJTElQU19QQUwsICAgICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkhhdXBwYXVnZSBXaW5Udi1VU0IgSUlJIChQQUwpIEZNIE1vZGVsIDU2OCJ9LAorCXsweDA1NzMsIDB4NGQzMiwgIDAsIENPREVDX1NBQTcxMTMsIDMsIFY0TDJfU1REX1BBTCwgICAxLCAxLCAxLCAxLCBUVU5FUl9QSElMSVBTX1BBTCwgICAgICAgICAgLTEsIC0xLCAgMCwgIDMsICA3LCAiSGF1cHBhdWdlIFdpblR2LVVTQiBJSUkgKFBBTCkgRk0gTW9kZWwgNTczIn0sCisJezB4MDU3MywgMHg0ZDM1LCAgMCwgQ09ERUNfU0FBNzExMywgMywgVjRMMl9TVERfUEFMLCAgIDEsIDEsIDEsIDEsIFRVTkVSX01JQ1JPVFVORV80MDQ5Rk01LCAgICAtMSwgLTEsICAwLCAgMywgIDcsICJIYXVwcGF1Z2UgV2luVHYtVVNCIElJSSAoUEFMKSBGTSBNb2RlbCA0MDIxOSBSZXYgQjI1MiJ9LAorCXsweDA1NzMsIDB4NGQzNywgIDAsIENPREVDX1NBQTcxMTMsIDMsIFY0TDJfU1REX1BBTCwgICAxLCAxLCAxLCAxLCBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywgLTEsIC0xLCAgMCwgIDMsICA3LCAiSGF1cHBhdWdlIFdpblRWIFVTQiBkZXZpY2UgTW9kZWwgNDAyMTkgUmV2IEUxODkifSwKKwl7MHgwNzY4LCAweDAwMDYsIC0xLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9OVFNDLCAgMSwgMSwgMSwgMSwgVFVORVJfUEhJTElQU19OVFNDX00sICAgICAgIC0xLCAtMSwgIDUsICA1LCAtMSwgIkNhbXRlbCBUZWNobm9sb2d5IFVTQiBUViBHZW5pZSBQcm8gRk0gTW9kZWwgVFZCMzMwIn0sCisJezB4MDdkMCwgMHgwMDAxLCAtMSwgQ09ERUNfU0FBNzExMywgMiwgVjRMMl9TVERfUEFMLCAgIDAsIDAsIDEsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsICAwLCAgMywgIDcsICJEaWdpdGFsIFZpZGVvIENyZWF0b3IgSSJ9LAorCXsweDA3ZDAsIDB4MDAwMiwgLTEsIENPREVDX1NBQTcxMTEsIDIsIFY0TDJfU1REX05UU0MsICAwLCAwLCAxLCAwLCAwLCAgIAkJICAgICAgIC0xLCAtMSwgODIsIDIwLCAgNywgIkdsb2JhbCBWaWxsYWdlIEdWLTAwNyAoTlRTQykifSwKKwl7MHgwN2QwLCAweDAwMDMsICAwLCBDT0RFQ19TQUE3MTEzLCAyLCBWNEwyX1NURF9OVFNDLCAgMCwgMCwgMSwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIkRhenpsZSBGdXNpb24gTW9kZWwgRFZDLTUwIFJldiAxIChOVFNDKSJ9LAorCXsweDA3ZDAsIDB4MDAwNCwgIDAsIENPREVDX1NBQTcxMTMsIDIsIFY0TDJfU1REX1BBTCwgICAwLCAwLCAxLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAgMCwgIDMsICA3LCAiRGF6emxlIEZ1c2lvbiBNb2RlbCBEVkMtODAgUmV2IDEgKFBBTCkifSwKKwl7MHgwN2QwLCAweDAwMDUsICAwLCBDT0RFQ19TQUE3MTEzLCAyLCBWNEwyX1NURF9TRUNBTSwgMCwgMCwgMSwgMCwgMCwJCQkgICAgICAgLTEsIC0xLCAgMCwgIDMsICA3LCAiRGF6emxlIEZ1c2lvbiBNb2RlbCBEVkMtOTAgUmV2IDEgKFNFQ0FNKSJ9LAorCXsweDIzMDQsIDB4MDEwZCwgLTEsIENPREVDX1NBQTcxMTEsIDMsIFY0TDJfU1REX1BBTCwgICAxLCAwLCAwLCAxLCBUVU5FUl9URU1JQ180MDY2Rlk1X1BBTF9JLCAgLTEsIC0xLCAtMSwgLTEsIC0xLCAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChQQUwpIn0sCisJezB4MjMwNCwgMHgwMTA5LCAtMSwgQ09ERUNfU0FBNzExMSwgMywgVjRMMl9TVERfU0VDQU0sIDEsIDAsIDEsIDEsIFRVTkVSX1BISUxJUFNfU0VDQU0sICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsICJQaW5uYWNsZSBTdHVkaW8gUENUViBVU0IgKFNFQ0FNKSJ9LAorCXsweDIzMDQsIDB4MDExMCwgLTEsIENPREVDX1NBQTcxMTEsIDMsIFY0TDJfU1REX1BBTCwgICAxLCAxLCAxLCAxLCBUVU5FUl9QSElMSVBTX1BBTCwgICAgICAgICAgLTEsIC0xLDEyOCwgMjMsIC0xLCAiUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChQQUwpIEZNIn0sCisJezB4MjMwNCwgMHgwMTExLCAtMSwgQ09ERUNfU0FBNzExMSwgMywgVjRMMl9TVERfUEFMLCAgIDEsIDAsIDEsIDEsIFRVTkVSX1BISUxJUFNfUEFMLCAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsICJNaXJvIFBDVFYgVVNCIn0sCisJezB4MjMwNCwgMHgwMTEyLCAtMSwgQ09ERUNfU0FBNzExMSwgMywgVjRMMl9TVERfTlRTQywgIDEsIDEsIDEsIDEsIFRVTkVSX1BISUxJUFNfTlRTQ19NLCAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsICJQaW5uYWNsZSBTdHVkaW8gUENUViBVU0IgKE5UU0MpIEZNIn0sCisJezB4MjMwNCwgMHgwMjEwLCAtMSwgQ09ERUNfU0FBNzExMywgMywgVjRMMl9TVERfUEFMLCAgIDEsIDEsIDEsIDEsIFRVTkVSX1RFTUlDXzQwMDlGUjVfUEFMLCAgICAtMSwgLTEsICAwLCAgMywgIDcsICJQaW5uYWNsZSBTdHVkaW8gUENUViBVU0IgKFBBTCkgRk0ifSwKKwl7MHgyMzA0LCAweDAyMTIsIC0xLCBDT0RFQ19TQUE3MTExLCAzLCBWNEwyX1NURF9OVFNDLCAgMSwgMSwgMSwgMSwgVFVORVJfVEVNSUNfNDAzOUZSNV9OVFNDLCAgIC0xLCAtMSwgIDAsICAzLCAgNywgIlBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoTlRTQykgRk0ifSwKKwl7MHgyMzA0LCAweDAyMTQsIC0xLCBDT0RFQ19TQUE3MTEzLCAzLCBWNEwyX1NURF9QQUwsICAgMSwgMSwgMSwgMSwgVFVORVJfVEVNSUNfNDAwOUZSNV9QQUwsICAgIC0xLCAtMSwgIDAsICAzLCAgNywgIlBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoUEFMKSBGTSJ9LAorCXsweDIzMDQsIDB4MDMwMCwgLTEsIENPREVDX1NBQTcxMTMsIDIsIFY0TDJfU1REX05UU0MsICAxLCAwLCAxLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAgMCwgIDMsICA3LCAiUGlubmFjbGUgU3R1ZGlvIExpbnggVmlkZW8gaW5wdXQgY2FibGUgKE5UU0MpIn0sCisJezB4MjMwNCwgMHgwMzAxLCAtMSwgQ09ERUNfU0FBNzExMywgMiwgVjRMMl9TVERfUEFMLCAgIDEsIDAsIDEsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEsICAwLCAgMywgIDcsICJQaW5uYWNsZSBTdHVkaW8gTGlueCBWaWRlbyBpbnB1dCBjYWJsZSAoUEFMKSJ9LAorCXsweDIzMDQsIDB4MDQxOSwgLTEsIENPREVDX1NBQTcxMTMsIDMsIFY0TDJfU1REX1BBTCwgICAxLCAxLCAxLCAxLCBUVU5FUl9URU1JQ180MDA5RlI1X1BBTCwgICAgLTEsIC0xLCAgMCwgIDMsICA3LCAiUGlubmFjbGUgUENUViBCdW5nZWUgVVNCIChQQUwpIEZNIn0sCisJezB4MjQwMCwgMHg0MjAwLCAtMSwgQ09ERUNfU0FBNzExMSwgMywgVjRMMl9TVERfTlRTQywgIDEsIDAsIDEsIDEsIFRVTkVSX1BISUxJUFNfTlRTQ19NLCAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsICJIYXVwcGF1Z2UgV2luVHYtVVNCIn0sCisJe30gIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBTdXBwb3J0ZWQgRGV2aWNlcyAqLworCitzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J2aXNpb25fdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4RkZGMCwgMHhGRkYwKSB9LCAgLyogQ3VzdG9tIER1bW15IFVTQlZpc2lvbiBEZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQTZGLCAweDA0MDApIH0sICAvKiBYYW5ib28gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAyMDgpIH0sICAvKiBCZWxraW4gVVNCVmlldyBJSSAqLworCXsgVVNCX0RFVklDRSgweDA1NzEsIDB4MDAwMikgfSwgIC8qIGVjaG9GWCBJbnRlclZpZXcgTGl0ZSAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4MDAwMykgfSwgIC8qIFVTQkdlYXIgVVNCRy1WMSAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4MDQwMCkgfSwgIC8qIEQtTGluayBWMTAwICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHgyMDAwKSB9LCAgLyogWDEwIFVTQiBDYW1lcmEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDJkMDApIH0sICAvKiBPc3ByZXkgNTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDJkMDEpIH0sICAvKiBIYXVwcGF1Z2UgVVNCLUxpdmUgTW9kZWwgNjAwICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHgyMTAxKSB9LCAgLyogWm9yYW4gQ28uIFBNRCAoTm9nYXRlY2gpIEFWLWdyYWJiZXIgTWFuaGF0dGFuICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0MTAwKSB9LCAgLyogTm9nYXRlY2ggVVNCLVRWIEZNIChOVFNDKSAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NDExMCkgfSwgIC8qIFBOWSBVU0ItVFYgKE5UU0MpIEZNICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0NDUwKSB9LCAgLyogUGl4ZWxWaWV3IFBsYXlUdi1VU0IgUFJPIChQQUwpIEZNICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0NTUwKSB9LCAgLyogWlRWIFpULTcyMSAyLjRHSHogVVNCIEEvViBSZWNlaXZlciAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQwMCkgfSwgIC8qIEhhdXBwYXVnZSBXaW5Udi1VU0IgVVNBICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDAxKSB9LCAgLyogSGF1cHBhdWdlIFdpblR2LVVTQiAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQwMikgfSwgIC8qIEhhdXBwYXVnZSBXaW5Udi1VU0IgVUsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMDMpIH0sICAvKiBIYXVwcGF1Z2UgV2luVHYtVVNCIEZyYW5jZSAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQxMCkgfSwgIC8qIEhhdXBwYXVnZSBXaW5Udi1VU0Igd2l0aCBGTSBVU0EgcmFkaW8gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMTEpIH0sICAvKiBIYXVwcGF1Z2UgV2luVHYtVVNCIChQQUwpIHdpdGggRk0gcmFkaW8gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMTIpIH0sICAvKiBIYXVwcGF1Z2UgV2luVHYtVVNCIFVLIHdpdGggRk0gUmFkaW8gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMmEpIH0sICAvKiBIYXVwcGFndWUgV2luVHYgVVNCIE1vZGVsIDYwMiA0MDIwMSBSZXYgQjI4NSAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyYikgfSwgIC8qIEhhdXBwYWd1ZSBXaW5UdiBVU0IgTW9kZWwgNjAyIDQwMjAxIFJldiBCMjgyICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDJjKSB9LCAgLyogSGF1cHBhZ3VlIFdpblR2IFVTQiBNb2RlbCA0MDIwOSBSZXYuIEUxQTUgUEFMKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjApIH0sICAvKiBIYXVwcGF1Z2UgV2luVHYtVVNCIElJIChQQUwpIEZNIE1vZGVsIDQwMjAxIFJldiBCMjI2ICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDIxKSB9LCAgLyogSGF1cHBhdWdlIFdpblR2LVVTQiBJSSAoUEFMKSB3aXRoIEZNIHJhZGlvKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjIpIH0sICAvKiBIYXVwcGF1Z2UgV2luVHYtVVNCIElJIChQQUwpIE1vZGVsIDU2NiAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyMykgfSwgIC8qIEhhdXBwYXVnZSBXaW5Udi1VU0IgRnJhbmNlIDREMjMqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyNSkgfSwgIC8qIEhhdXBwYXVnZSBXaW5Udi1VU0IgTW9kZWwgNDAyMDkgcmV2IEIyMzQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjYpIH0sICAvKiBIYXVwcGF1Z2UgV2luVHYtVVNCIE1vZGVsIDQwMjA5IFJldiBCMjQzICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDI3KSB9LCAgLyogSGF1cHBhdWdlIFdpblR2LVVTQiBNb2RlbCA0MDIwNCBSZXYgQjI4MSAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQyOCkgfSwgIC8qIEhhdXBwYXVnZSBXaW5Udi1VU0IgTW9kZWwgNDAyMDQgUmV2IEIyODMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTczLCAweDRkMjkpIH0sICAvKiBIYXVwcGF1Z2UgV2luVHYtVVNCIE1vZGVsIDQwMjA1IFJldiBCMjk4ICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDMwKSB9LCAgLyogSGF1cHBhdWdlIFdpblR2LVVTQiBGTSBNb2RlbCA0MDIxMSBSZXYgQjEyMyAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQzMSkgfSwgIC8qIEhhdXBwYXVnZSBXaW5Udi1VU0IgSUlJIChQQUwpIHdpdGggRk0gcmFkaW8gTW9kZWwgNTY4ICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDMyKSB9LCAgLyogSGF1cHBhdWdlIFdpblR2LVVTQiBJSUkgKFBBTCkgRk0gTW9kZWwgNTczICovCisJeyBVU0JfREVWSUNFKDB4MDU3MywgMHg0ZDM1KSB9LCAgLyogSGF1cHBhdWdlIFdpblR2LVVTQiBJSUkgKFNFQ0FNKSBGTSBNb2RlbCA0MDIxOSBSZXYgQjI1MiAqLworCXsgVVNCX0RFVklDRSgweDA1NzMsIDB4NGQzNykgfSwgIC8qIEhhdXBwYXVnZSBXaW5Udi1VU0IgTW9kZWwgNDAyMTkgUmV2IEUxODkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNzY4LCAweDAwMDYpIH0sICAvKiBDYW10ZWwgVGVjaG5vbG9neSBVU0IgVFYgR2VuaWUgUHJvIEZNIE1vZGVsIFRWQjMzMCAqLworCXsgVVNCX0RFVklDRSgweDA3ZDAsIDB4MDAwMSkgfSwgIC8qIERpZ2l0YWwgVmlkZW8gQ3JlYXRvciBJICovCisJeyBVU0JfREVWSUNFKDB4MDdkMCwgMHgwMDAyKSB9LCAgLyogR2xvYmFsIFZpbGxhZ2UgR1YtMDA3IChOVFNDKSAqLworCXsgVVNCX0RFVklDRSgweDA3ZDAsIDB4MDAwMykgfSwgIC8qIERhenpsZSBGdXNpb24gTW9kZWwgRFZDLTUwIFJldiAxIChOVFNDKSAqLworCXsgVVNCX0RFVklDRSgweDA3ZDAsIDB4MDAwNCkgfSwgIC8qIERhenpsZSBGdXNpb24gTW9kZWwgRFZDLTgwIFJldiAxIChQQUwpICovCisJeyBVU0JfREVWSUNFKDB4MDdkMCwgMHgwMDA1KSB9LCAgLyogRGF6emxlIEZ1c2lvbiBNb2RlbCBEVkMtOTAgUmV2IDEgKFNFQ0FNKSAqLworCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDEwZCkgfSwgIC8qIFBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoUEFMKSAqLworCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDEwOSkgfSwgIC8qIFBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoU0VDQU0pICovCisJeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMTEwKSB9LCAgLyogUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChQQUwpICovCisJeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMTExKSB9LCAgLyogTWlybyBQQ1RWIFVTQiAqLworCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDExMikgfSwgIC8qIFBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoTlRTQykgd2l0aCBGTSByYWRpbyAqLworCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDIxMCkgfSwgIC8qIFBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoUEFMKSB3aXRoIEZNIHJhZGlvICovCisJeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMjEyKSB9LCAgLyogUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChOVFNDKSB3aXRoIEZNIHJhZGlvICovCisJeyBVU0JfREVWSUNFKDB4MjMwNCwgMHgwMjE0KSB9LCAgLyogUGlubmFjbGUgU3R1ZGlvIFBDVFYgVVNCIChQQUwpIHdpdGggRk0gcmFkaW8gKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAzMDApIH0sICAvKiBQaW5uYWNsZSBTdHVkaW8gTGlueCBWaWRlbyBpbnB1dCBjYWJsZSAoTlRTQykgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMzA0LCAweDAzMDEpIH0sICAvKiBQaW5uYWNsZSBTdHVkaW8gTGlueCBWaWRlbyBpbnB1dCBjYWJsZSAoUEFMKSAqLworCXsgVVNCX0RFVklDRSgweDIzMDQsIDB4MDQxOSkgfSwgIC8qIFBpbm5hY2xlIFBDVFYgQnVuZ2VlIFVTQiAoUEFMKSBGTSAqLworCXsgVVNCX0RFVklDRSgweDI0MDAsIDB4NDIwMCkgfSwgIC8qIEhhdXBwYXVnZSBXaW5Udi1VU0IyIE1vZGVsIDQyMDEyICovCisKKwl7IH0gIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYnZpc2lvbl90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODA3ZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwpAQCAtMCwwICsxLDI1MzUgQEAKKy8qCisgKiB1c2J2aXNpb24tY29yZS5jIC0gZHJpdmVyIGZvciBOVDEwMHggVVNCIHZpZGVvIGNhcHR1cmUgZGV2aWNlcworICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBKb2VyZyBIZWNrZW5iYWNoIDxqb2VyZ0BoZWNrZW5iYWNoLWF3LmRlPgorICogICAgICAgICAgICAgICAgICAgICAgICAgRHdhaW5lIEdhcmRlbiA8ZHdhaW5lZ2FyZGVuQHJvZ2Vycy5jb20+CisgKgorICogVGhpcyBtb2R1bGUgaXMgcGFydCBvZiB1c2J2aXNpb24gZHJpdmVyIHByb2plY3QuCisgKiBVcGRhdGVzIHRvIGRyaXZlciBjb21wbGV0ZWQgYnkgRHdhaW5lIFAuIEdhcmRlbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2lmZGVmIENPTkZJR19LTU9ECisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ1c2J2aXNpb24uaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBjb3JlX2RlYnVnID0gMDsKK21vZHVsZV9wYXJhbShjb3JlX2RlYnVnLGludCwwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY29yZV9kZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtjb3JlXSIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGZvcmNlX3Rlc3RwYXR0ZXJuID0gMDsKK21vZHVsZV9wYXJhbShmb3JjZV90ZXN0cGF0dGVybixpbnQsMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3Rlc3RwYXR0ZXJuLCJlbmFibGUgdGVzdCBwYXR0ZXJuIGRpc3BsYXkgW2NvcmVdIik7CisKK3N0YXRpYyBpbnQgYWRqdXN0Q29tcHJlc3Npb24gPSAxOwkJCS8vIFNldCB0aGUgY29tcHJlc3Npb24gdG8gYmUgYWRhcHRpdmUKK21vZHVsZV9wYXJhbShhZGp1c3RDb21wcmVzc2lvbiwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYWRqdXN0Q29tcHJlc3Npb24sICIgU2V0IHRoZSBBRFBDTSBjb21wcmVzc2lvbiBmb3IgdGhlIGRldmljZS4gIERlZmF1bHQ6IDEgKE9uKSIpOworCitzdGF0aWMgaW50IFN3aXRjaFNWaWRlb0lucHV0ID0gMDsJCQkvLyBUbyBoZWxwIHBlb3BsZSB3aXRoIEJsYWNrIGFuZCBXaGl0ZSBvdXRwdXQgd2l0aCB1c2luZyBzLXZpZGVvIGlucHV0LiAgU29tZSBjYWJsZXMgYW5kIGlucHV0IGRldmljZSBhcmUgd2lyZWQgZGlmZmVyZW50bHkuCittb2R1bGVfcGFyYW0oU3dpdGNoU1ZpZGVvSW5wdXQsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKFN3aXRjaFNWaWRlb0lucHV0LCAiIFNldCB0aGUgUy1WaWRlbyBpbnB1dC4gIFNvbWUgY2FibGVzIGFuZCBpbnB1dCBkZXZpY2UgYXJlIHdpcmVkIGRpZmZlcmVudGx5LiBEZWZhdWx0OiAwIChPZmYpIik7CisKKyNkZWZpbmUJRU5BQkxFX0hFWERVTVAJMAkvKiBFbmFibGUgaWYgeW91IG5lZWQgaXQgKi8KKworCisjaWZkZWYgVVNCVklTSU9OX0RFQlVHCisJI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAorCQlpZiAoY29yZV9kZWJ1ZyAmIChsZXZlbCkpIGluZm8oIlslczolZF0gIiBmbXQsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncykKKyNlbHNlCisJI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIERCR19IRUFERVIJMTw8MAorI2RlZmluZSBEQkdfSVJRCQkxPDwxCisjZGVmaW5lIERCR19JU09DCTE8PDIKKyNkZWZpbmUgREJHX1BBUlNFCTE8PDMKKyNkZWZpbmUgREJHX1NDUkFUQ0gJMTw8NAorI2RlZmluZSBEQkdfRlVOQwkxPDw1CisKK3N0YXRpYyBjb25zdCBpbnQgbWF4X2ltZ3dpZHRoID0gTUFYX0ZSQU1FX1dJRFRIOworc3RhdGljIGNvbnN0IGludCBtYXhfaW1naGVpZ2h0ID0gTUFYX0ZSQU1FX0hFSUdIVDsKK3N0YXRpYyBjb25zdCBpbnQgbWluX2ltZ3dpZHRoID0gTUlOX0ZSQU1FX1dJRFRIOworc3RhdGljIGNvbnN0IGludCBtaW5faW1naGVpZ2h0ID0gTUlOX0ZSQU1FX0hFSUdIVDsKKworLyogVGhlIHZhbHVlIG9mICdzY3JhdGNoX2J1Zl9zaXplJyBhZmZlY3RzIHF1YWxpdHkgb2YgdGhlIHBpY3R1cmUKKyAqIGluIG1hbnkgd2F5cy4gU2hvcnRlciBidWZmZXJzIG1heSBjYXVzZSBsb3NzIG9mIGRhdGEgd2hlbiBjbGllbnQKKyAqIGlzIHRvbyBzbG93LiBMYXJnZXIgYnVmZmVycyBhcmUgbWVtb3J5LWNvbnN1bWluZyBhbmQgdGFrZSBsb25nZXIKKyAqIHRvIHdvcmsgd2l0aC4gVGhpcyBzZXR0aW5nIGNhbiBiZSBhZGp1c3RlZCwgYnV0IHRoZSBkZWZhdWx0IHZhbHVlCisgKiBzaG91bGQgYmUgT0sgZm9yIG1vc3QgZGVza3RvcCB1c2Vycy4KKyAqLworI2RlZmluZSBERUZBVUxUX1NDUkFUQ0hfQlVGX1NJWkUJKDB4MjAwMDApCQkvLyAxMjhrQiBtZW1vcnkgc2NyYXRjaCBidWZmZXIKK3N0YXRpYyBjb25zdCBpbnQgc2NyYXRjaF9idWZfc2l6ZSA9IERFRkFVTFRfU0NSQVRDSF9CVUZfU0laRTsKKworLy8gRnVuY3Rpb24gcHJvdG90eXBlcworc3RhdGljIGludCB1c2J2aXNpb25fcmVxdWVzdF9pbnRyYSAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CitzdGF0aWMgaW50IHVzYnZpc2lvbl91bnJlcXVlc3RfaW50cmEgKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOworc3RhdGljIGludCB1c2J2aXNpb25fYWRqdXN0X2NvbXByZXNzaW9uIChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKK3N0YXRpYyBpbnQgdXNidmlzaW9uX21lYXN1cmVfYmFuZHdpZHRoIChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogSGVyZSB3ZSB3YW50IHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkuCisgKiBUaGlzIGlzIHVzZWQgd2hlbiBpbml0aWFsaXppbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBhcmVhLgorICovCisKK3N0YXRpYyB2b2lkICp1c2J2aXNpb25fcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCW1lbSA9IHZtYWxsb2NfMzIoc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gbWVtOworfQorCit2b2lkIHVzYnZpc2lvbl9ydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlICgobG9uZykgc2l6ZSA+IDApIHsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXZmcmVlKG1lbSk7Cit9CisKKworCisjaWYgRU5BQkxFX0hFWERVTVAKK3N0YXRpYyB2b2lkIHVzYnZpc2lvbl9oZXhkdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJY2hhciB0bXBbODBdOworCWludCBpLCBrOworCisJZm9yIChpID0gayA9IDA7IGxlbiA+IDA7IGkrKywgbGVuLS0pIHsKKwkJaWYgKGkgPiAwICYmIChpICUgMTYgPT0gMCkpIHsKKwkJCXByaW50aygiJXNcbiIsIHRtcCk7CisJCQlrID0gMDsKKwkJfQorCQlrICs9IHNwcmludGYoJnRtcFtrXSwgIiUwMnggIiwgZGF0YVtpXSk7CisJfQorCWlmIChrID4gMCkKKwkJcHJpbnRrKCIlc1xuIiwgdG1wKTsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHNjcmF0Y2ggcmluZyBidWZmZXIgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2NyYXRjaF9sZW4oc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikgICAgLypUaGlzIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGFjdHVhbGx5IGluIHRoZSBidWZmZXIgKi8KK3sKKwlpbnQgbGVuID0gdXNidmlzaW9uLT5zY3JhdGNoX3dyaXRlX3B0ciAtIHVzYnZpc2lvbi0+c2NyYXRjaF9yZWFkX3B0cjsKKwlpZiAobGVuIDwgMCkgeworCQlsZW4gKz0gc2NyYXRjaF9idWZfc2l6ZTsKKwl9CisJUERFQlVHKERCR19TQ1JBVENILCAic2NyYXRjaF9sZW4oKSA9ICVkXG4iLCBsZW4pOworCisJcmV0dXJuIGxlbjsKK30KKworCisvKiBUaGlzIHJldHVybnMgdGhlIGZyZWUgc3BhY2UgbGVmdCBpbiB0aGUgYnVmZmVyICovCitzdGF0aWMgaW50IHNjcmF0Y2hfZnJlZShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCWludCBmcmVlID0gdXNidmlzaW9uLT5zY3JhdGNoX3JlYWRfcHRyIC0gdXNidmlzaW9uLT5zY3JhdGNoX3dyaXRlX3B0cjsKKwlpZiAoZnJlZSA8PSAwKSB7CisJCWZyZWUgKz0gc2NyYXRjaF9idWZfc2l6ZTsKKwl9CisJaWYgKGZyZWUpIHsKKwkJZnJlZSAtPSAxOwkJCQkJCQkvKiBhdCBsZWFzdCBvbmUgYnl0ZSBpbiB0aGUgYnVmZmVyIG11c3QgKi8KKwkJCQkJCQkJCQkvKiBsZWZ0IGJsYW5rLCBvdGhlcndpc2UgdGhlcmUgaXMgbm8gY2hhbmNlIHRvIGRpZmZlciBiZXR3ZWVuIGZ1bGwgYW5kIGVtcHR5ICovCisJfQorCVBERUJVRyhEQkdfU0NSQVRDSCwgInJldHVybiAlZFxuIiwgZnJlZSk7CisKKwlyZXR1cm4gZnJlZTsKK30KKworCisvKiBUaGlzIHB1dHMgZGF0YSBpbnRvIHRoZSBidWZmZXIgKi8KK3N0YXRpYyBpbnQgc2NyYXRjaF9wdXQoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJICAgICAgIGludCBsZW4pCit7CisJaW50IGxlbl9wYXJ0OworCisJaWYgKHVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHIgKyBsZW4gPCBzY3JhdGNoX2J1Zl9zaXplKSB7CisJCW1lbWNweSh1c2J2aXNpb24tPnNjcmF0Y2ggKyB1c2J2aXNpb24tPnNjcmF0Y2hfd3JpdGVfcHRyLCBkYXRhLCBsZW4pOworCQl1c2J2aXNpb24tPnNjcmF0Y2hfd3JpdGVfcHRyICs9IGxlbjsKKwl9CisJZWxzZSB7CisJCWxlbl9wYXJ0ID0gc2NyYXRjaF9idWZfc2l6ZSAtIHVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHI7CisJCW1lbWNweSh1c2J2aXNpb24tPnNjcmF0Y2ggKyB1c2J2aXNpb24tPnNjcmF0Y2hfd3JpdGVfcHRyLCBkYXRhLCBsZW5fcGFydCk7CisJCWlmIChsZW4gPT0gbGVuX3BhcnQpIHsKKwkJCXVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHIgPSAwOwkJCS8qIGp1c3Qgc2V0IHdyaXRlX3B0ciB0byB6ZXJvICovCisJCX0KKwkJZWxzZSB7CisJCQltZW1jcHkodXNidmlzaW9uLT5zY3JhdGNoLCBkYXRhICsgbGVuX3BhcnQsIGxlbiAtIGxlbl9wYXJ0KTsKKwkJCXVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHIgPSBsZW4gLSBsZW5fcGFydDsKKwkJfQorCX0KKworCVBERUJVRyhEQkdfU0NSQVRDSCwgImxlbj0lZCwgbmV3IHdyaXRlX3B0cj0lZFxuIiwgbGVuLCB1c2J2aXNpb24tPnNjcmF0Y2hfd3JpdGVfcHRyKTsKKworCXJldHVybiBsZW47Cit9CisKKy8qIFRoaXMgbWFya3MgdGhlIHdyaXRlX3B0ciBhcyBwb3NpdGlvbiBvZiBuZXcgZnJhbWUgaGVhZGVyICovCitzdGF0aWMgdm9pZCBzY3JhdGNoX21hcmtfaGVhZGVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCit7CisJUERFQlVHKERCR19TQ1JBVENILCAiaGVhZGVyIGF0IHdyaXRlX3B0cj0lZFxuIiwgdXNidmlzaW9uLT5zY3JhdGNoX2hlYWRlcm1hcmtlcl93cml0ZV9wdHIpOworCisJdXNidmlzaW9uLT5zY3JhdGNoX2hlYWRlcm1hcmtlclt1c2J2aXNpb24tPnNjcmF0Y2hfaGVhZGVybWFya2VyX3dyaXRlX3B0cl0gPQorCQkJCXVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHI7CisJdXNidmlzaW9uLT5zY3JhdGNoX2hlYWRlcm1hcmtlcl93cml0ZV9wdHIgKz0gMTsKKwl1c2J2aXNpb24tPnNjcmF0Y2hfaGVhZGVybWFya2VyX3dyaXRlX3B0ciAlPSBVU0JWSVNJT05fTlVNX0hFQURFUk1BUktFUjsKK30KKworLyogVGhpcyBnZXRzIGRhdGEgZnJvbSB0aGUgYnVmZmVyIGF0IHRoZSBnaXZlbiAicHRyIiBwb3NpdGlvbiAqLworc3RhdGljIGludCBzY3JhdGNoX2dldF9leHRyYShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgKnB0ciwgaW50IGxlbikKK3sKKwlpbnQgbGVuX3BhcnQ7CisJaWYgKCpwdHIgKyBsZW4gPCBzY3JhdGNoX2J1Zl9zaXplKSB7CisJCW1lbWNweShkYXRhLCB1c2J2aXNpb24tPnNjcmF0Y2ggKyAqcHRyLCBsZW4pOworCQkqcHRyICs9IGxlbjsKKwl9CisJZWxzZSB7CisJCWxlbl9wYXJ0ID0gc2NyYXRjaF9idWZfc2l6ZSAtICpwdHI7CisJCW1lbWNweShkYXRhLCB1c2J2aXNpb24tPnNjcmF0Y2ggKyAqcHRyLCBsZW5fcGFydCk7CisJCWlmIChsZW4gPT0gbGVuX3BhcnQpIHsKKwkJCSpwdHIgPSAwOwkJCQkJCQkvKiBqdXN0IHNldCB0aGUgeV9wdHIgdG8gemVybyAqLworCQl9CisJCWVsc2UgeworCQkJbWVtY3B5KGRhdGEgKyBsZW5fcGFydCwgdXNidmlzaW9uLT5zY3JhdGNoLCBsZW4gLSBsZW5fcGFydCk7CisJCQkqcHRyID0gbGVuIC0gbGVuX3BhcnQ7CisJCX0KKwl9CisKKwlQREVCVUcoREJHX1NDUkFUQ0gsICJsZW49JWQsIG5ldyBwdHI9JWRcbiIsIGxlbiwgKnB0cik7CisKKwlyZXR1cm4gbGVuOworfQorCisKKy8qIFRoaXMgc2V0cyB0aGUgc2NyYXRjaCBleHRyYSByZWFkIHBvaW50ZXIgKi8KK3N0YXRpYyB2b2lkIHNjcmF0Y2hfc2V0X2V4dHJhX3B0cihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCBpbnQgKnB0ciwKKwkJCQkgIGludCBsZW4pCit7CisJKnB0ciA9ICh1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIgKyBsZW4pJXNjcmF0Y2hfYnVmX3NpemU7CisKKwlQREVCVUcoREJHX1NDUkFUQ0gsICJwdHI9JWRcbiIsICpwdHIpOworfQorCisKKy8qVGhpcyBpbmNyZW1lbnRzIHRoZSBzY3JhdGNoIGV4dHJhIHJlYWQgcG9pbnRlciAqLworc3RhdGljIHZvaWQgc2NyYXRjaF9pbmNfZXh0cmFfcHRyKGludCAqcHRyLCBpbnQgbGVuKQoreworCSpwdHIgPSAoKnB0ciArIGxlbikgJSBzY3JhdGNoX2J1Zl9zaXplOworCisJUERFQlVHKERCR19TQ1JBVENILCAicHRyPSVkXG4iLCAqcHRyKTsKK30KKworCisvKiBUaGlzIGdldHMgZGF0YSBmcm9tIHRoZSBidWZmZXIgKi8KK3N0YXRpYyBpbnQgc2NyYXRjaF9nZXQoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJICAgICAgIGludCBsZW4pCit7CisJaW50IGxlbl9wYXJ0OworCWlmICh1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIgKyBsZW4gPCBzY3JhdGNoX2J1Zl9zaXplKSB7CisJCW1lbWNweShkYXRhLCB1c2J2aXNpb24tPnNjcmF0Y2ggKyB1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIsIGxlbik7CisJCXVzYnZpc2lvbi0+c2NyYXRjaF9yZWFkX3B0ciArPSBsZW47CisJfQorCWVsc2UgeworCQlsZW5fcGFydCA9IHNjcmF0Y2hfYnVmX3NpemUgLSB1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHI7CisJCW1lbWNweShkYXRhLCB1c2J2aXNpb24tPnNjcmF0Y2ggKyB1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIsIGxlbl9wYXJ0KTsKKwkJaWYgKGxlbiA9PSBsZW5fcGFydCkgeworCQkJdXNidmlzaW9uLT5zY3JhdGNoX3JlYWRfcHRyID0gMDsJCQkJLyoganVzdCBzZXQgdGhlIHJlYWRfcHRyIHRvIHplcm8gKi8KKwkJfQorCQllbHNlIHsKKwkJCW1lbWNweShkYXRhICsgbGVuX3BhcnQsIHVzYnZpc2lvbi0+c2NyYXRjaCwgbGVuIC0gbGVuX3BhcnQpOworCQkJdXNidmlzaW9uLT5zY3JhdGNoX3JlYWRfcHRyID0gbGVuIC0gbGVuX3BhcnQ7CisJCX0KKwl9CisKKwlQREVCVUcoREJHX1NDUkFUQ0gsICJsZW49JWQsIG5ldyByZWFkX3B0cj0lZFxuIiwgbGVuLCB1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIpOworCisJcmV0dXJuIGxlbjsKK30KKworCisvKiBUaGlzIHNldHMgcmVhZCBwb2ludGVyIHRvIG5leHQgaGVhZGVyIGFuZCByZXR1cm5zIGl0ICovCitzdGF0aWMgaW50IHNjcmF0Y2hfZ2V0X2hlYWRlcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLAorCQkJICAgICAgc3RydWN0IHVzYnZpc2lvbl9mcmFtZV9oZWFkZXIgKmhlYWRlcikKK3sKKwlpbnQgZXJyQ29kZSA9IDA7CisKKwlQREVCVUcoREJHX1NDUkFUQ0gsICJmcm9tIHJlYWRfcHRyPSVkIiwgdXNidmlzaW9uLT5zY3JhdGNoX2hlYWRlcm1hcmtlcl9yZWFkX3B0cik7CisKKwl3aGlsZSAodXNidmlzaW9uLT5zY3JhdGNoX2hlYWRlcm1hcmtlcl93cml0ZV9wdHIgLQorCQl1c2J2aXNpb24tPnNjcmF0Y2hfaGVhZGVybWFya2VyX3JlYWRfcHRyICE9IDApIHsKKwkJdXNidmlzaW9uLT5zY3JhdGNoX3JlYWRfcHRyID0KKwkJCXVzYnZpc2lvbi0+c2NyYXRjaF9oZWFkZXJtYXJrZXJbdXNidmlzaW9uLT5zY3JhdGNoX2hlYWRlcm1hcmtlcl9yZWFkX3B0cl07CisJCXVzYnZpc2lvbi0+c2NyYXRjaF9oZWFkZXJtYXJrZXJfcmVhZF9wdHIgKz0gMTsKKwkJdXNidmlzaW9uLT5zY3JhdGNoX2hlYWRlcm1hcmtlcl9yZWFkX3B0ciAlPSBVU0JWSVNJT05fTlVNX0hFQURFUk1BUktFUjsKKwkJc2NyYXRjaF9nZXQodXNidmlzaW9uLCAodW5zaWduZWQgY2hhciAqKWhlYWRlciwgVVNCVklTSU9OX0hFQURFUl9MRU5HVEgpOworCQlpZiAoKGhlYWRlci0+bWFnaWNfMSA9PSBVU0JWSVNJT05fTUFHSUNfMSkKKwkJCSAmJiAoaGVhZGVyLT5tYWdpY18yID09IFVTQlZJU0lPTl9NQUdJQ18yKQorCQkJICYmIChoZWFkZXItPmhlYWRlckxlbmd0aCA9PSBVU0JWSVNJT05fSEVBREVSX0xFTkdUSCkpIHsKKwkJCWVyckNvZGUgPSBVU0JWSVNJT05fSEVBREVSX0xFTkdUSDsKKwkJCWhlYWRlci0+ZnJhbWVXaWR0aCAgPSBoZWFkZXItPmZyYW1lV2lkdGhMbyAgKyAoaGVhZGVyLT5mcmFtZVdpZHRoSGkgPDwgOCk7CisJCQloZWFkZXItPmZyYW1lSGVpZ2h0ID0gaGVhZGVyLT5mcmFtZUhlaWdodExvICsgKGhlYWRlci0+ZnJhbWVIZWlnaHRIaSA8PCA4KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGVyckNvZGU7Cit9CisKKworLypUaGlzIHJlbW92ZXMgbGVuIGJ5dGVzIG9mIG9sZCBkYXRhIGZyb20gdGhlIGJ1ZmZlciAqLworc3RhdGljIHZvaWQgc2NyYXRjaF9ybV9vbGQoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgaW50IGxlbikKK3sKKworCXVzYnZpc2lvbi0+c2NyYXRjaF9yZWFkX3B0ciArPSBsZW47CisJdXNidmlzaW9uLT5zY3JhdGNoX3JlYWRfcHRyICU9IHNjcmF0Y2hfYnVmX3NpemU7CisJUERFQlVHKERCR19TQ1JBVENILCAicmVhZF9wdHIgaXMgbm93ICVkXG4iLCB1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIpOworfQorCisKKy8qVGhpcyByZXNldHMgdGhlIGJ1ZmZlciAtIGtpbGxzIGFsbCBkYXRhIGluIGl0IHRvbyAqLworc3RhdGljIHZvaWQgc2NyYXRjaF9yZXNldChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCVBERUJVRyhEQkdfU0NSQVRDSCwgIlxuIik7CisKKwl1c2J2aXNpb24tPnNjcmF0Y2hfcmVhZF9wdHIgPSAwOworCXVzYnZpc2lvbi0+c2NyYXRjaF93cml0ZV9wdHIgPSAwOworCXVzYnZpc2lvbi0+c2NyYXRjaF9oZWFkZXJtYXJrZXJfcmVhZF9wdHIgPSAwOworCXVzYnZpc2lvbi0+c2NyYXRjaF9oZWFkZXJtYXJrZXJfd3JpdGVfcHRyID0gMDsKKwl1c2J2aXNpb24tPmlzb2NzdGF0ZSA9IElzb2NTdGF0ZV9Ob0ZyYW1lOworfQorCitpbnQgdXNidmlzaW9uX3NjcmF0Y2hfYWxsb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwl1c2J2aXNpb24tPnNjcmF0Y2ggPSB2bWFsbG9jXzMyKHNjcmF0Y2hfYnVmX3NpemUpOworCXNjcmF0Y2hfcmVzZXQodXNidmlzaW9uKTsKKwlpZih1c2J2aXNpb24tPnNjcmF0Y2ggPT0gTlVMTCkgeworCQllcnIoIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yIHNjcmF0Y2giLAorCQkgICAgX19GVU5DVElPTl9fLCBzY3JhdGNoX2J1Zl9zaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHVzYnZpc2lvbl9zY3JhdGNoX2ZyZWUoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwlpZiAodXNidmlzaW9uLT5zY3JhdGNoICE9IE5VTEwpIHsKKwkJdmZyZWUodXNidmlzaW9uLT5zY3JhdGNoKTsKKwkJdXNidmlzaW9uLT5zY3JhdGNoID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiB1c2J2aXNpb25fdGVzdHBhdHRlcm4oKQorICoKKyAqIFByb2NlZHVyZSBmb3JtcyBhIHRlc3QgcGF0dGVybiAoeWVsbG93IGdyaWQgb24gYmx1ZSBiYWNrZ3JvdW5kKS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogZnVsbGZyYW1lOiAgIGlmIFRSVUUgdGhlbiBlbnRpcmUgZnJhbWUgaXMgZmlsbGVkLCBvdGhlcndpc2UgdGhlIHByb2NlZHVyZQorICoJCWNvbnRpbnVlcyBmcm9tIHRoZSBjdXJyZW50IHNjYW5saW5lLgorICogcG1vZGUJMDogZmlsbCB0aGUgZnJhbWUgd2l0aCBzb2xpZCBibHVlIGNvbG9yIChsaWtlIG9uIFZDUiBvciBUVikKKyAqCQkxOiBEcmF3IGEgY29sb3JlZCBncmlkCisgKgorICovCitzdGF0aWMgdm9pZCB1c2J2aXNpb25fdGVzdHBhdHRlcm4oc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwKKwkJCQkgIGludCBmdWxsZnJhbWUsIGludCBwbW9kZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBwcm9jW10gPSAidXNidmlzaW9uX3Rlc3RwYXR0ZXJuIjsKKwlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpmcmFtZTsKKwl1bnNpZ25lZCBjaGFyICpmOworCWludCBudW1fY2VsbCA9IDA7CisJaW50IHNjYW5fbGVuZ3RoID0gMDsKKwlzdGF0aWMgaW50IG51bV9wYXNzID0gMDsKKworCWlmICh1c2J2aXNpb24gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1c2J2aXNpb24gPT0gTlVMTFxuIiwgcHJvYyk7CisJCXJldHVybjsKKwl9CisJaWYgKHVzYnZpc2lvbi0+Y3VyRnJhbWUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1c2J2aXNpb24tPmN1ckZyYW1lIGlzIE5VTEwuXG4iLCBwcm9jKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEdyYWIgdGhlIGN1cnJlbnQgZnJhbWUgKi8KKwlmcmFtZSA9IHVzYnZpc2lvbi0+Y3VyRnJhbWU7CisKKwkvKiBPcHRpb25hbGx5IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKi8KKwlpZiAoZnVsbGZyYW1lKSB7CisJCWZyYW1lLT5jdXJsaW5lID0gMDsKKwkJZnJhbWUtPnNjYW5sZW5ndGggPSAwOworCX0KKworCS8qIEZvcm0gZXZlcnkgc2NhbiBsaW5lICovCisJZm9yICg7IGZyYW1lLT5jdXJsaW5lIDwgZnJhbWUtPmZybWhlaWdodDsgZnJhbWUtPmN1cmxpbmUrKykgeworCQlpbnQgaTsKKworCQlmID0gZnJhbWUtPmRhdGEgKyAodXNidmlzaW9uLT5jdXJ3aWR0aCAqIDMgKiBmcmFtZS0+Y3VybGluZSk7CisJCWZvciAoaSA9IDA7IGkgPCB1c2J2aXNpb24tPmN1cndpZHRoOyBpKyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgY2IgPSAweDgwOworCQkJdW5zaWduZWQgY2hhciBjZyA9IDA7CisJCQl1bnNpZ25lZCBjaGFyIGNyID0gMDsKKworCQkJaWYgKHBtb2RlID09IDEpIHsKKwkJCQlpZiAoZnJhbWUtPmN1cmxpbmUgJSAzMiA9PSAwKQorCQkJCQljYiA9IDAsIGNnID0gY3IgPSAweEZGOworCQkJCWVsc2UgaWYgKGkgJSAzMiA9PSAwKSB7CisJCQkJCWlmIChmcmFtZS0+Y3VybGluZSAlIDMyID09IDEpCisJCQkJCQludW1fY2VsbCsrOworCQkJCQljYiA9IDAsIGNnID0gY3IgPSAweEZGOworCQkJCX0gZWxzZSB7CisJCQkJCWNiID0KKwkJCQkJICAgICgobnVtX2NlbGwgKiA3KSArCisJCQkJCSAgICAgbnVtX3Bhc3MpICYgMHhGRjsKKwkJCQkJY2cgPQorCQkJCQkgICAgKChudW1fY2VsbCAqIDUpICsKKwkJCQkJICAgICBudW1fcGFzcyAqIDIpICYgMHhGRjsKKwkJCQkJY3IgPQorCQkJCQkgICAgKChudW1fY2VsbCAqIDMpICsKKwkJCQkJICAgICBudW1fcGFzcyAqIDMpICYgMHhGRjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIEp1c3QgdGhlIGJsdWUgc2NyZWVuICovCisJCQl9CisKKwkJCSpmKysgPSBjYjsKKwkJCSpmKysgPSBjZzsKKwkJCSpmKysgPSBjcjsKKwkJCXNjYW5fbGVuZ3RoICs9IDM7CisJCX0KKwl9CisKKwlmcmFtZS0+Z3JhYnN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lOworCWZyYW1lLT5zY2FubGVuZ3RoICs9IHNjYW5fbGVuZ3RoOworCSsrbnVtX3Bhc3M7CisKK30KKworLyoKKyAqIHVzYnZpc2lvbl9kZWNvbXByZXNzX2FsbG9jKCkKKyAqCisgKiBhbGxvY2F0ZXMgaW50ZXJtZWRpYXRlIGJ1ZmZlciBmb3IgZGVjb21wcmVzc2lvbgorICovCitpbnQgdXNidmlzaW9uX2RlY29tcHJlc3NfYWxsb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwlpbnQgSUZCX3NpemUgPSBNQVhfRlJBTUVfV0lEVEggKiBNQVhfRlJBTUVfSEVJR0hUICogMyAvIDI7CisJdXNidmlzaW9uLT5JbnRyYUZyYW1lQnVmZmVyID0gdm1hbGxvY18zMihJRkJfc2l6ZSk7CisJaWYgKHVzYnZpc2lvbi0+SW50cmFGcmFtZUJ1ZmZlciA9PSBOVUxMKSB7CisJCWVycigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBmb3IgY29tcHIuIGZyYW1lIGJ1ZmZlciIsIF9fRlVOQ1RJT05fXywgSUZCX3NpemUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1c2J2aXNpb25fZGVjb21wcmVzc19mcmVlKCkKKyAqCisgKiBmcmVlcyBpbnRlcm1lZGlhdGUgYnVmZmVyIGZvciBkZWNvbXByZXNzaW9uCisgKi8KK3ZvaWQgdXNidmlzaW9uX2RlY29tcHJlc3NfZnJlZShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCWlmICh1c2J2aXNpb24tPkludHJhRnJhbWVCdWZmZXIgIT0gTlVMTCkgeworCQl2ZnJlZSh1c2J2aXNpb24tPkludHJhRnJhbWVCdWZmZXIpOworCQl1c2J2aXNpb24tPkludHJhRnJhbWVCdWZmZXIgPSBOVUxMOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSGVyZSBjb21lcyB0aGUgZGF0YSBwYXJzaW5nIHN0dWZmIHRoYXQgaXMgcnVuIGFzIGludGVycnVwdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiB1c2J2aXNpb25fZmluZF9oZWFkZXIoKQorICoKKyAqIExvY2F0ZSBvbmUgb2Ygc3VwcG9ydGVkIGhlYWRlciBtYXJrZXJzIGluIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAqLworc3RhdGljIGVudW0gUGFyc2VTdGF0ZSB1c2J2aXNpb25fZmluZF9oZWFkZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpmcmFtZTsKKwlpbnQgZm91bmRIZWFkZXIgPSAwOworCisJZnJhbWUgPSB1c2J2aXNpb24tPmN1ckZyYW1lOworCisJd2hpbGUgKHNjcmF0Y2hfZ2V0X2hlYWRlcih1c2J2aXNpb24sICZmcmFtZS0+aXNvY0hlYWRlcikgPT0gVVNCVklTSU9OX0hFQURFUl9MRU5HVEgpIHsKKwkJLy8gZm91bmQgaGVhZGVyIGluIHNjcmF0Y2gKKwkJUERFQlVHKERCR19IRUFERVIsICJmb3VuZCBoZWFkZXI6IDB4JTAyeCUwMnggJWQgJWQgJWQgJWQgJSN4IDB4JTAyeCAldSAldSIsCisJCQkJZnJhbWUtPmlzb2NIZWFkZXIubWFnaWNfMiwKKwkJCQlmcmFtZS0+aXNvY0hlYWRlci5tYWdpY18xLAorCQkJCWZyYW1lLT5pc29jSGVhZGVyLmhlYWRlckxlbmd0aCwKKwkJCQlmcmFtZS0+aXNvY0hlYWRlci5mcmFtZU51bSwKKwkJCQlmcmFtZS0+aXNvY0hlYWRlci5mcmFtZVBoYXNlLAorCQkJCWZyYW1lLT5pc29jSGVhZGVyLmZyYW1lTGF0ZW5jeSwKKwkJCQlmcmFtZS0+aXNvY0hlYWRlci5kYXRhRm9ybWF0LAorCQkJCWZyYW1lLT5pc29jSGVhZGVyLmZvcm1hdFBhcmFtLAorCQkJCWZyYW1lLT5pc29jSGVhZGVyLmZyYW1lV2lkdGgsCisJCQkJZnJhbWUtPmlzb2NIZWFkZXIuZnJhbWVIZWlnaHQpOworCisJCWlmICh1c2J2aXNpb24tPnJlcXVlc3RJbnRyYSkgeworCQkJaWYgKGZyYW1lLT5pc29jSGVhZGVyLmZvcm1hdFBhcmFtICYgMHg4MCkgeworCQkJCWZvdW5kSGVhZGVyID0gMTsKKwkJCQl1c2J2aXNpb24tPmxhc3RJc29jRnJhbWVOdW0gPSAtMTsgLy8gZG8gbm90IGNoZWNrIGZvciBsb3N0IGZyYW1lcyB0aGlzIHRpbWUKKwkJCQl1c2J2aXNpb25fdW5yZXF1ZXN0X2ludHJhKHVzYnZpc2lvbik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQlmb3VuZEhlYWRlciA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZEhlYWRlcikgeworCQlmcmFtZS0+ZnJtd2lkdGggPSBmcmFtZS0+aXNvY0hlYWRlci5mcmFtZVdpZHRoICogdXNidmlzaW9uLT5zdHJldGNoX3dpZHRoOworCQlmcmFtZS0+ZnJtaGVpZ2h0ID0gZnJhbWUtPmlzb2NIZWFkZXIuZnJhbWVIZWlnaHQgKiB1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0OworCQlmcmFtZS0+djRsMl9saW5lc2l6ZSA9IChmcmFtZS0+ZnJtd2lkdGggKiBmcmFtZS0+djRsMl9mb3JtYXQuZGVwdGgpPj4gMzsKKwl9CisJZWxzZSB7IC8vIG5vIGhlYWRlciBmb3VuZAorCQlQREVCVUcoREJHX0hFQURFUiwgInNraXBwaW5nIHNjcmF0Y2ggZGF0YSwgbm8gaGVhZGVyIik7CisJCXNjcmF0Y2hfcmVzZXQodXNidmlzaW9uKTsKKwkJcmV0dXJuIFBhcnNlU3RhdGVfRW5kUGFyc2U7CisJfQorCisJLy8gZm91bmQgaGVhZGVyCisJaWYgKGZyYW1lLT5pc29jSGVhZGVyLmRhdGFGb3JtYXQ9PUlTT0NfTU9ERV9DT01QUkVTUykgeworCQkvL2NoZWNrIGlzb2NIZWFkZXIuZnJhbWVOdW0gZm9yIGxvc3QgZnJhbWVzCisJCWlmICh1c2J2aXNpb24tPmxhc3RJc29jRnJhbWVOdW0gPj0gMCkgeworCQkJaWYgKCgodXNidmlzaW9uLT5sYXN0SXNvY0ZyYW1lTnVtICsgMSkgJSAzMikgIT0gZnJhbWUtPmlzb2NIZWFkZXIuZnJhbWVOdW0pIHsKKwkJCQkvLyB1bmV4cGVjdGVkIGZyYW1lIGRyb3A6IG5lZWQgdG8gcmVxdWVzdCBuZXcgaW50cmEgZnJhbWUKKwkJCQlQREVCVUcoREJHX0hFQURFUiwgIkxvc3QgZnJhbWUgYmVmb3JlICVkIG9uIFVTQiIsIGZyYW1lLT5pc29jSGVhZGVyLmZyYW1lTnVtKTsKKwkJCQl1c2J2aXNpb25fcmVxdWVzdF9pbnRyYSh1c2J2aXNpb24pOworCQkJCXJldHVybiBQYXJzZVN0YXRlX05leHRGcmFtZTsKKwkJCX0KKwkJfQorCQl1c2J2aXNpb24tPmxhc3RJc29jRnJhbWVOdW0gPSBmcmFtZS0+aXNvY0hlYWRlci5mcmFtZU51bTsKKwl9CisJdXNidmlzaW9uLT5oZWFkZXJfY291bnQrKzsKKwlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX0xpbmVzOworCWZyYW1lLT5jdXJsaW5lID0gMDsKKworCWlmIChmb3JjZV90ZXN0cGF0dGVybikgeworCQl1c2J2aXNpb25fdGVzdHBhdHRlcm4odXNidmlzaW9uLCAxLCAxKTsKKwkJcmV0dXJuIFBhcnNlU3RhdGVfTmV4dEZyYW1lOworCX0KKwlyZXR1cm4gUGFyc2VTdGF0ZV9Db250aW51ZTsKK30KKworc3RhdGljIGVudW0gUGFyc2VTdGF0ZSB1c2J2aXNpb25fcGFyc2VfbGluZXNfNDIyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sCisJCQkJCSAgIGxvbmcgKnBjb3B5bGVuKQoreworCXZvbGF0aWxlIHN0cnVjdCB1c2J2aXNpb25fZnJhbWUgKmZyYW1lOworCXVuc2lnbmVkIGNoYXIgKmY7CisJaW50IGxlbjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIHl1eXZbNF09ezE4MCwgMTI4LCAxMCwgMTI4fTsgLy8gWVVWIGNvbXBvbmVudHMKKwl1bnNpZ25lZCBjaGFyIHJ2LCBndiwgYnY7CS8vIFJHQiBjb21wb25lbnRzCisJaW50IGNsaXBtYXNrX2luZGV4LCBieXRlc19wZXJfcGl4ZWw7CisJaW50IHN0cmV0Y2hfYnl0ZXMsIGNsaXBtYXNrX2FkZDsKKworCWZyYW1lICA9IHVzYnZpc2lvbi0+Y3VyRnJhbWU7CisJZiA9IGZyYW1lLT5kYXRhICsgKGZyYW1lLT52NGwyX2xpbmVzaXplICogZnJhbWUtPmN1cmxpbmUpOworCisJLyogTWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgZm9yIHRoZSBlbnRpcmUgbGluZSAqLworCWxlbiA9IChmcmFtZS0+aXNvY0hlYWRlci5mcmFtZVdpZHRoICogMikrNTsKKwlpZiAoc2NyYXRjaF9sZW4odXNidmlzaW9uKSA8IGxlbikgeworCQlQREVCVUcoREJHX1BBUlNFLCAib3V0IG9mIGRhdGEgaW4gbGluZSAlZCwgbmVlZCAldS5cbiIsIGZyYW1lLT5jdXJsaW5lLCBsZW4pOworCQlyZXR1cm4gUGFyc2VTdGF0ZV9PdXQ7CisJfQorCisJaWYgKChmcmFtZS0+Y3VybGluZSArIDEpID49IGZyYW1lLT5mcm1oZWlnaHQpIHsKKwkJcmV0dXJuIFBhcnNlU3RhdGVfTmV4dEZyYW1lOworCX0KKworCWJ5dGVzX3Blcl9waXhlbCA9IGZyYW1lLT52NGwyX2Zvcm1hdC5ieXRlc19wZXJfcGl4ZWw7CisJc3RyZXRjaF9ieXRlcyA9ICh1c2J2aXNpb24tPnN0cmV0Y2hfd2lkdGggLSAxKSAqIGJ5dGVzX3Blcl9waXhlbDsKKwljbGlwbWFza19pbmRleCA9IGZyYW1lLT5jdXJsaW5lICogTUFYX0ZSQU1FX1dJRFRIOworCWNsaXBtYXNrX2FkZCA9IHVzYnZpc2lvbi0+c3RyZXRjaF93aWR0aDsKKworCWZvciAoaSA9IDA7IGkgPCBmcmFtZS0+ZnJtd2lkdGg7IGkrPSgyICogdXNidmlzaW9uLT5zdHJldGNoX3dpZHRoKSkgeworCisJCXNjcmF0Y2hfZ2V0KHVzYnZpc2lvbiwgJnl1eXZbMF0sIDQpOworCisJCWlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKSB7CisJCQkqZisrID0geXV5dlswXTsgLy8gWQorCQkJKmYrKyA9IHl1eXZbM107IC8vIFUKKwkJfQorCQllbHNlIHsKKworCQkJWVVWX1RPX1JHQl9CWV9USEVfQk9PSyh5dXl2WzBdLCB5dXl2WzFdLCB5dXl2WzNdLCBydiwgZ3YsIGJ2KTsKKwkJCXN3aXRjaCAoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCkgeworCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKKwkJCQkJKmYrKyA9ICgweDFGICYgKGJ2ID4+IDMpKSB8ICgweEUwICYgKGd2IDw8IDMpKTsKKwkJCQkJKmYrKyA9ICgweDA3ICYgKGd2ID4+IDUpKSB8ICgweEY4ICYgIHJ2KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCMjQ6CisJCQkJCSpmKysgPSBidjsKKwkJCQkJKmYrKyA9IGd2OworCQkJCQkqZisrID0gcnY7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjMyOgorCQkJCQkqZisrID0gYnY7CisJCQkJCSpmKysgPSBndjsKKwkJCQkJKmYrKyA9IHJ2OworCQkJCQlmKys7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKKwkJCQkJKmYrKyA9ICgweDFGICYgKGJ2ID4+IDMpKSB8ICgweEUwICYgKGd2IDw8IDIpKTsKKwkJCQkJKmYrKyA9ICgweDAzICYgKGd2ID4+IDYpKSB8ICgweDdDICYgKHJ2ID4+IDEpKTsKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJY2xpcG1hc2tfaW5kZXggKz0gY2xpcG1hc2tfYWRkOworCQlmICs9IHN0cmV0Y2hfYnl0ZXM7CisKKwkJaWYgKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpIHsKKwkJCSpmKysgPSB5dXl2WzJdOyAvLyBZCisJCQkqZisrID0geXV5dlsxXTsgLy8gVgorCQl9CisJCWVsc2UgeworCisJCQlZVVZfVE9fUkdCX0JZX1RIRV9CT09LKHl1eXZbMl0sIHl1eXZbMV0sIHl1eXZbM10sIHJ2LCBndiwgYnYpOworCQkJc3dpdGNoIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0KSB7CisJCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQkJCQkqZisrID0gKDB4MUYgJiAoYnYgPj4gMykpIHwgKDB4RTAgJiAoZ3YgPDwgMykpOworCQkJCQkqZisrID0gKDB4MDcgJiAoZ3YgPj4gNSkpIHwgKDB4RjggJiAgcnYpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0IyNDoKKwkJCQkJKmYrKyA9IGJ2OworCQkJCQkqZisrID0gZ3Y7CisJCQkJCSpmKysgPSBydjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCMzI6CisJCQkJCSpmKysgPSBidjsKKwkJCQkJKmYrKyA9IGd2OworCQkJCQkqZisrID0gcnY7CisJCQkJCWYrKzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgorCQkJCQkqZisrID0gKDB4MUYgJiAoYnYgPj4gMykpIHwgKDB4RTAgJiAoZ3YgPDwgMikpOworCQkJCQkqZisrID0gKDB4MDMgJiAoZ3YgPj4gNikpIHwgKDB4N0MgJiAocnYgPj4gMSkpOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQljbGlwbWFza19pbmRleCArPSBjbGlwbWFza19hZGQ7CisJCWYgKz0gc3RyZXRjaF9ieXRlczsKKwl9CisKKwlmcmFtZS0+Y3VybGluZSArPSB1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0OworCSpwY29weWxlbiArPSBmcmFtZS0+djRsMl9saW5lc2l6ZSAqIHVzYnZpc2lvbi0+c3RyZXRjaF9oZWlnaHQ7CisKKwlpZiAoZnJhbWUtPmN1cmxpbmUgPj0gZnJhbWUtPmZybWhlaWdodCkgeworCQlyZXR1cm4gUGFyc2VTdGF0ZV9OZXh0RnJhbWU7CisJfQorCWVsc2UgeworCQlyZXR1cm4gUGFyc2VTdGF0ZV9Db250aW51ZTsKKwl9Cit9CisKKy8qIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmUgICovCitzdGF0aWMgaW50IHVzYnZpc2lvbl9kZWNvbXByZXNzKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sdW5zaWduZWQgY2hhciAqQ29tcHJlc3NlZCwKKwkJCQkJCQkJdW5zaWduZWQgY2hhciAqRGVjb21wcmVzc2VkLCBpbnQgKlN0YXJ0UG9zLAorCQkJCQkJCQlpbnQgKkJsb2NrVHlwZVN0YXJ0UG9zLCBpbnQgTGVuKQoreworCWludCBSZXN0UGl4ZWwsIElkeCwgTWF4UG9zLCBQb3MsIEV4dHJhUG9zLCBCbG9ja0xlbiwgQmxvY2tUeXBlUG9zLCBCbG9ja1R5cGVMZW47CisJdW5zaWduZWQgY2hhciBCbG9ja0J5dGUsIEJsb2NrQ29kZSwgQmxvY2tUeXBlLCBCbG9ja1R5cGVCeXRlLCBJbnRlZ3JhdG9yOworCisJSW50ZWdyYXRvciA9IDA7CisJUG9zID0gKlN0YXJ0UG9zOworCUJsb2NrVHlwZVBvcyA9ICpCbG9ja1R5cGVTdGFydFBvczsKKwlNYXhQb3MgPSAzOTY7IC8vUG9zICsgTGVuOworCUV4dHJhUG9zID0gUG9zOworCUJsb2NrTGVuID0gMDsKKwlCbG9ja0J5dGUgPSAwOworCUJsb2NrQ29kZSA9IDA7CisJQmxvY2tUeXBlID0gMDsKKwlCbG9ja1R5cGVCeXRlID0gMDsKKwlCbG9ja1R5cGVMZW4gPSAwOworCVJlc3RQaXhlbCA9IExlbjsKKworCWZvciAoSWR4ID0gMDsgSWR4IDwgTGVuOyBJZHgrKykgeworCisJCWlmIChCbG9ja0xlbiA9PSAwKSB7CisJCQlpZiAoQmxvY2tUeXBlTGVuPT0wKSB7CisJCQkJQmxvY2tUeXBlQnl0ZSA9IENvbXByZXNzZWRbQmxvY2tUeXBlUG9zXTsKKwkJCQlCbG9ja1R5cGVQb3MrKzsKKwkJCQlCbG9ja1R5cGVMZW4gPSA0OworCQkJfQorCQkJQmxvY2tUeXBlID0gKEJsb2NrVHlwZUJ5dGUgJiAweEMwKSA+PiA2OworCisJCQkvL3N0YXRpc3RpYzoKKwkJCXVzYnZpc2lvbi0+Q29tcHJCbG9ja1R5cGVzW0Jsb2NrVHlwZV0rKzsKKworCQkJUG9zID0gRXh0cmFQb3M7CisJCQlpZiAoQmxvY2tUeXBlID09IDApIHsKKwkJCQlpZihSZXN0UGl4ZWwgPj0gMjQpIHsKKwkJCQkJSWR4ICs9IDIzOworCQkJCQlSZXN0UGl4ZWwgLT0gMjQ7CisJCQkJCUludGVncmF0b3IgPSBEZWNvbXByZXNzZWRbSWR4XTsKKwkJCQl9IGVsc2UgeworCQkJCQlJZHggKz0gUmVzdFBpeGVsIC0gMTsKKwkJCQkJUmVzdFBpeGVsID0gMDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCUJsb2NrQ29kZSA9IENvbXByZXNzZWRbUG9zXTsKKwkJCQlQb3MrKzsKKwkJCQlpZiAoUmVzdFBpeGVsID49IDI0KSB7CisJCQkJCUJsb2NrTGVuICA9IDI0OworCQkJCX0gZWxzZSB7CisJCQkJCUJsb2NrTGVuID0gUmVzdFBpeGVsOworCQkJCX0KKwkJCQlSZXN0UGl4ZWwgLT0gQmxvY2tMZW47CisJCQkJRXh0cmFQb3MgPSBQb3MgKyAoQmxvY2tMZW4gLyA0KTsKKwkJCX0KKwkJCUJsb2NrVHlwZUJ5dGUgPDw9IDI7CisJCQlCbG9ja1R5cGVMZW4gLT0gMTsKKwkJfQorCQlpZiAoQmxvY2tMZW4gPiAwKSB7CisJCQlpZiAoKEJsb2NrTGVuJTQpID09IDApIHsKKwkJCQlCbG9ja0J5dGUgPSBDb21wcmVzc2VkW1Bvc107CisJCQkJUG9zKys7CisJCQl9CisJCQlpZiAoQmxvY2tUeXBlID09IDEpIHsgLy9pbnRlciBCbG9jaworCQkJCUludGVncmF0b3IgPSBEZWNvbXByZXNzZWRbSWR4XTsKKwkJCX0KKwkJCXN3aXRjaCAoQmxvY2tCeXRlICYgMHhDMCkgeworCQkJCWNhc2UgMHgwMzw8NjoKKwkJCQkJSW50ZWdyYXRvciArPSBDb21wcmVzc2VkW0V4dHJhUG9zXTsKKwkJCQkJRXh0cmFQb3MrKzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAweDAyPDw2OgorCQkJCQlJbnRlZ3JhdG9yICs9IEJsb2NrQ29kZTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAweDAwOgorCQkJCQlJbnRlZ3JhdG9yIC09IEJsb2NrQ29kZTsKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlEZWNvbXByZXNzZWRbSWR4XSA9IEludGVncmF0b3I7CisJCQlCbG9ja0J5dGUgPDw9IDI7CisJCQlCbG9ja0xlbiAtPSAxOworCQl9CisJfQorCSpTdGFydFBvcyA9IEV4dHJhUG9zOworCSpCbG9ja1R5cGVTdGFydFBvcyA9IEJsb2NrVHlwZVBvczsKKwlyZXR1cm4gSWR4OworfQorCisKKy8qCisgKiB1c2J2aXNpb25fcGFyc2VfY29tcHJlc3MoKQorICoKKyAqIFBhcnNlIGNvbXByZXNzZWQgZnJhbWUgZnJvbSB0aGUgc2NyYXRjaCBidWZmZXIsIHB1dAorICogZGVjb2RlZCBSR0IgdmFsdWUgaW50byB0aGUgY3VycmVudCBmcmFtZSBidWZmZXIgYW5kIGFkZCB0aGUgd3JpdHRlbgorICogbnVtYmVyIG9mIGJ5dGVzIChSR0IpIHRvIHRoZSAqcGNvcHlsZW4uCisgKgorICovCitzdGF0aWMgZW51bSBQYXJzZVN0YXRlIHVzYnZpc2lvbl9wYXJzZV9jb21wcmVzcyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLAorCQkJCQkgICBsb25nICpwY29weWxlbikKK3sKKyNkZWZpbmUgVVNCVklTSU9OX1NUUklQX01BR0lDCQkweDVBCisjZGVmaW5lIFVTQlZJU0lPTl9TVFJJUF9MRU5fTUFYCQk0MDAKKyNkZWZpbmUgVVNCVklTSU9OX1NUUklQX0hFQURFUl9MRU4JMworCisJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqZnJhbWU7CisJdW5zaWduZWQgY2hhciAqZiwqdSA9IE5VTEwgLCp2ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIFN0cmlwRGF0YVtVU0JWSVNJT05fU1RSSVBfTEVOX01BWF07CisJdW5zaWduZWQgY2hhciBTdHJpcEhlYWRlcltVU0JWSVNJT05fU1RSSVBfSEVBREVSX0xFTl07CisJaW50IElkeCwgSWR4RW5kLCBTdHJpcExlbiwgU3RyaXBQdHIsIFN0YXJ0QmxvY2tQb3MsIEJsb2NrUG9zLCBCbG9ja1R5cGVQb3M7CisJaW50IGNsaXBtYXNrX2luZGV4LCBieXRlc19wZXJfcGl4ZWwsIHJjOworCWludCBpbWFnZVNpemU7CisJdW5zaWduZWQgY2hhciBydiwgZ3YsIGJ2OworCXN0YXRpYyB1bnNpZ25lZCBjaGFyICpZLCAqVSwgKlY7CisKKwlmcmFtZSAgPSB1c2J2aXNpb24tPmN1ckZyYW1lOworCWltYWdlU2l6ZSA9IGZyYW1lLT5mcm13aWR0aCAqIGZyYW1lLT5mcm1oZWlnaHQ7CisJaWYgKCAoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVWNDIyUCkgfHwKKwkgICAgIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVlU0MjApICkgeyAgICAgICAvLyB0aGlzIGlzIGEgcGxhbmFyIGZvcm1hdAorCQkvLy4uLiB2NGwyX2xpbmVzaXplIG5vdCB1c2VkIGhlcmUuCisJCWYgPSBmcmFtZS0+ZGF0YSArIChmcmFtZS0+d2lkdGggKiBmcmFtZS0+Y3VybGluZSk7CisJfSBlbHNlCisJCWYgPSBmcmFtZS0+ZGF0YSArIChmcmFtZS0+djRsMl9saW5lc2l6ZSAqIGZyYW1lLT5jdXJsaW5lKTsKKworCWlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKXsgLy9pbml0aWFsaXNlIHUgYW5kIHYgcG9pbnRlcnMKKwkJLy8gZ2V0IGJhc2Ugb2YgdSBhbmQgYiBwbGFuZXMgYWRkIGhhbGZvZmZzZXQKKworCQl1ID0gZnJhbWUtPmRhdGEKKwkJCSsgaW1hZ2VTaXplCisJCQkrIChmcmFtZS0+ZnJtd2lkdGggPj4xKSAqIGZyYW1lLT5jdXJsaW5lIDsKKwkJdiA9IHUgKyAoaW1hZ2VTaXplID4+MSApOworCisJfSBlbHNlIGlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVlU0MjApeworCisJCXYgPSBmcmFtZS0+ZGF0YSArIGltYWdlU2l6ZSArICgoZnJhbWUtPmN1cmxpbmUqIChmcmFtZS0+d2lkdGgpKT4+MikgOworCQl1ID0gdiArIChpbWFnZVNpemUgPj4yKSA7CisJfQorCisJaWYgKGZyYW1lLT5jdXJsaW5lID09IDApIHsKKwkJdXNidmlzaW9uX2FkanVzdF9jb21wcmVzc2lvbih1c2J2aXNpb24pOworCX0KKworCWlmIChzY3JhdGNoX2xlbih1c2J2aXNpb24pIDwgVVNCVklTSU9OX1NUUklQX0hFQURFUl9MRU4pIHsKKwkJcmV0dXJuIFBhcnNlU3RhdGVfT3V0OworCX0KKworCS8vZ2V0IHN0cmlwIGhlYWRlciB3aXRob3V0IGNoYW5naW5nIHRoZSBzY3JhdGNoX3JlYWRfcHRyCisJc2NyYXRjaF9zZXRfZXh0cmFfcHRyKHVzYnZpc2lvbiwgJlN0cmlwUHRyLCAwKTsKKwlzY3JhdGNoX2dldF9leHRyYSh1c2J2aXNpb24sICZTdHJpcEhlYWRlclswXSwgJlN0cmlwUHRyLAorCQkJCVVTQlZJU0lPTl9TVFJJUF9IRUFERVJfTEVOKTsKKworCWlmIChTdHJpcEhlYWRlclswXSAhPSBVU0JWSVNJT05fU1RSSVBfTUFHSUMpIHsKKwkJLy8gd3Jvbmcgc3RyaXAgbWFnaWMKKwkJdXNidmlzaW9uLT5zdHJpcE1hZ2ljRXJyb3JzKys7CisJCXJldHVybiBQYXJzZVN0YXRlX05leHRGcmFtZTsKKwl9CisKKwlpZiAoZnJhbWUtPmN1cmxpbmUgIT0gKGludClTdHJpcEhlYWRlclsyXSkgeworCQkvL2xpbmUgbnVtYmVyIG1pc3NtYXRjaCBlcnJvcgorCQl1c2J2aXNpb24tPnN0cmlwTGluZU51bWJlckVycm9ycysrOworCX0KKworCVN0cmlwTGVuID0gMiAqICh1bnNpZ25lZCBpbnQpU3RyaXBIZWFkZXJbMV07CisJaWYgKFN0cmlwTGVuID4gVVNCVklTSU9OX1NUUklQX0xFTl9NQVgpIHsKKwkJLy8gc3RyaXAgb3ZlcnJ1bgorCQkvLyBJIHRoaW5rIHRoaXMgbmV2ZXIgaGFwcGVucworCQl1c2J2aXNpb25fcmVxdWVzdF9pbnRyYSh1c2J2aXNpb24pOworCX0KKworCWlmIChzY3JhdGNoX2xlbih1c2J2aXNpb24pIDwgU3RyaXBMZW4pIHsKKwkJLy90aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEgZm9yIHRoZSBzdHJpcAorCQlyZXR1cm4gUGFyc2VTdGF0ZV9PdXQ7CisJfQorCisJaWYgKHVzYnZpc2lvbi0+SW50cmFGcmFtZUJ1ZmZlcikgeworCQlZID0gdXNidmlzaW9uLT5JbnRyYUZyYW1lQnVmZmVyICsgZnJhbWUtPmZybXdpZHRoICogZnJhbWUtPmN1cmxpbmU7CisJCVUgPSB1c2J2aXNpb24tPkludHJhRnJhbWVCdWZmZXIgKyBpbWFnZVNpemUgKyAoZnJhbWUtPmZybXdpZHRoIC8gMikgKiAoZnJhbWUtPmN1cmxpbmUgLyAyKTsKKwkJViA9IHVzYnZpc2lvbi0+SW50cmFGcmFtZUJ1ZmZlciArIGltYWdlU2l6ZSAvIDQgKiA1ICsgKGZyYW1lLT5mcm13aWR0aCAvIDIpICogKGZyYW1lLT5jdXJsaW5lIC8gMik7CisJfQorCWVsc2UgeworCQlyZXR1cm4gUGFyc2VTdGF0ZV9OZXh0RnJhbWU7CisJfQorCisJYnl0ZXNfcGVyX3BpeGVsID0gZnJhbWUtPnY0bDJfZm9ybWF0LmJ5dGVzX3Blcl9waXhlbDsKKwljbGlwbWFza19pbmRleCA9IGZyYW1lLT5jdXJsaW5lICogTUFYX0ZSQU1FX1dJRFRIOworCisJc2NyYXRjaF9nZXQodXNidmlzaW9uLCBTdHJpcERhdGEsIFN0cmlwTGVuKTsKKworCUlkeEVuZCA9IGZyYW1lLT5mcm13aWR0aDsKKwlCbG9ja1R5cGVQb3MgPSBVU0JWSVNJT05fU1RSSVBfSEVBREVSX0xFTjsKKwlTdGFydEJsb2NrUG9zID0gQmxvY2tUeXBlUG9zICsgKElkeEVuZCAtIDEpIC8gOTYgKyAoSWR4RW5kIC8gMiAtIDEpIC8gOTYgKyAyOworCUJsb2NrUG9zID0gU3RhcnRCbG9ja1BvczsKKworCXVzYnZpc2lvbi0+QmxvY2tQb3MgPSBCbG9ja1BvczsKKworCWlmICgocmMgPSB1c2J2aXNpb25fZGVjb21wcmVzcyh1c2J2aXNpb24sIFN0cmlwRGF0YSwgWSwgJkJsb2NrUG9zLCAmQmxvY2tUeXBlUG9zLCBJZHhFbmQpKSAhPSBJZHhFbmQpIHsKKwkJLy9yZXR1cm4gUGFyc2VTdGF0ZV9Db250aW51ZTsKKwl9CisJaWYgKFN0cmlwTGVuID4gdXNidmlzaW9uLT5tYXhTdHJpcExlbikgeworCQl1c2J2aXNpb24tPm1heFN0cmlwTGVuID0gU3RyaXBMZW47CisJfQorCisJaWYgKGZyYW1lLT5jdXJsaW5lJTIpIHsKKwkJaWYgKChyYyA9IHVzYnZpc2lvbl9kZWNvbXByZXNzKHVzYnZpc2lvbiwgU3RyaXBEYXRhLCBWLCAmQmxvY2tQb3MsICZCbG9ja1R5cGVQb3MsIElkeEVuZC8yKSkgIT0gSWR4RW5kLzIpIHsKKwkJLy9yZXR1cm4gUGFyc2VTdGF0ZV9Db250aW51ZTsKKwkJfQorCX0KKwllbHNlIHsKKwkJaWYgKChyYyA9IHVzYnZpc2lvbl9kZWNvbXByZXNzKHVzYnZpc2lvbiwgU3RyaXBEYXRhLCBVLCAmQmxvY2tQb3MsICZCbG9ja1R5cGVQb3MsIElkeEVuZC8yKSkgIT0gSWR4RW5kLzIpIHsKKwkJCS8vcmV0dXJuIFBhcnNlU3RhdGVfQ29udGludWU7CisJCX0KKwl9CisKKwlpZiAoQmxvY2tQb3MgPiB1c2J2aXNpb24tPmNvbXByQmxvY2tQb3MpIHsKKwkJdXNidmlzaW9uLT5jb21wckJsb2NrUG9zID0gQmxvY2tQb3M7CisJfQorCWlmIChCbG9ja1BvcyA+IFN0cmlwTGVuKSB7CisJCXVzYnZpc2lvbi0+c3RyaXBMZW5FcnJvcnMrKzsKKwl9CisKKwlmb3IgKElkeCA9IDA7IElkeCA8IElkeEVuZDsgSWR4KyspIHsKKwkJaWYoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikgeworCQkJKmYrKyA9IFlbSWR4XTsKKwkJCSpmKysgPSBJZHggJiAweDAxID8gVVtJZHgvMl0gOiBWW0lkeC8yXTsKKwkJfQorCQllbHNlIGlmKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVVjQyMlApIHsKKwkJCSpmKysgPSBZW0lkeF07CisJCQlpZiAoIElkeCAmIDB4MDEpCisJCQkJKnUrKyA9IFVbSWR4Pj4xXSA7CisJCQllbHNlCisJCQkJKnYrKyA9IFZbSWR4Pj4xXTsKKwkJfQorCQllbHNlIGlmIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVlU0MjApIHsKKwkJCSpmKysgPSBZIFtJZHhdOworCQkJaWYgKCAhKCggIElkeCAmIDB4MDEgICkgfCAoICBmcmFtZS0+Y3VybGluZSAmIDB4MDEgICkpICl7CisKKy8qIAkJCQkgb25seSBuZWVkIGRvIHRoaXMgZm9yIDEgaW4gNCBwaXhlbHMgKi8KKy8qIAkJCQkgaW50cmFmcmFtZSBidWZmZXIgaXMgWVVWNDIwIGZvcm1hdCAqLworCisJCQkJKnUrKyA9IFVbSWR4ID4+MV07CisJCQkJKnYrKyA9IFZbSWR4ID4+MV07CisJCQl9CisKKwkJfQorCQllbHNlIHsKKwkJCVlVVl9UT19SR0JfQllfVEhFX0JPT0soWVtJZHhdLCBVW0lkeC8yXSwgVltJZHgvMl0sIHJ2LCBndiwgYnYpOworCQkJc3dpdGNoIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0KSB7CisJCQkJY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToKKwkJCQkJKmYrKyA9IFlbSWR4XTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgorCQkJCQkqZisrID0gKDB4MUYgJiAoYnYgPj4gMykpIHwgKDB4RTAgJiAoZ3YgPDwgMikpOworCQkJCQkqZisrID0gKDB4MDMgJiAoZ3YgPj4gNikpIHwgKDB4N0MgJiAocnYgPj4gMSkpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJCQkJCSpmKysgPSAoMHgxRiAmIChidiA+PiAzKSkgfCAoMHhFMCAmIChndiA8PCAzKSk7CisJCQkJCSpmKysgPSAoMHgwNyAmIChndiA+PiA1KSkgfCAoMHhGOCAmICBydik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjI0OgorCQkJCQkqZisrID0gYnY7CisJCQkJCSpmKysgPSBndjsKKwkJCQkJKmYrKyA9IHJ2OworCQkJCQlicmVhazsKKwkJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0IzMjoKKwkJCQkJKmYrKyA9IGJ2OworCQkJCQkqZisrID0gZ3Y7CisJCQkJCSpmKysgPSBydjsKKwkJCQkJZisrOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQljbGlwbWFza19pbmRleCsrOworCX0KKwkvKiBEZWFsIHdpdGggbm9uLWludGVnZXIgbm8uIG9mIGJ5dGVzIGZvciBZVVY0MjBQICovCisJaWYgKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1lWVTQyMCApCisJCSpwY29weWxlbiArPSBmcmFtZS0+djRsMl9saW5lc2l6ZTsKKwllbHNlCisJCSpwY29weWxlbiArPSBmcmFtZS0+Y3VybGluZSAmIDB4MDEgPyBmcmFtZS0+djRsMl9saW5lc2l6ZSA6IGZyYW1lLT52NGwyX2xpbmVzaXplIDw8IDE7CisKKwlmcmFtZS0+Y3VybGluZSArPSAxOworCisJaWYgKGZyYW1lLT5jdXJsaW5lID49IGZyYW1lLT5mcm1oZWlnaHQpIHsKKwkJcmV0dXJuIFBhcnNlU3RhdGVfTmV4dEZyYW1lOworCX0KKwllbHNlIHsKKwkJcmV0dXJuIFBhcnNlU3RhdGVfQ29udGludWU7CisJfQorCit9CisKKworLyoKKyAqIHVzYnZpc2lvbl9wYXJzZV9saW5lc180MjAoKQorICoKKyAqIFBhcnNlIHR3byBsaW5lcyBmcm9tIHRoZSBzY3JhdGNoIGJ1ZmZlciwgcHV0CisgKiBkZWNvZGVkIFJHQiB2YWx1ZSBpbnRvIHRoZSBjdXJyZW50IGZyYW1lIGJ1ZmZlciBhbmQgYWRkIHRoZSB3cml0dGVuCisgKiBudW1iZXIgb2YgYnl0ZXMgKFJHQikgdG8gdGhlICpwY29weWxlbi4KKyAqCisgKi8KK3N0YXRpYyBlbnVtIFBhcnNlU3RhdGUgdXNidmlzaW9uX3BhcnNlX2xpbmVzXzQyMChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLAorCQkJCQkgICBsb25nICpwY29weWxlbikKK3sKKwlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpmcmFtZTsKKwl1bnNpZ25lZCBjaGFyICpmX2V2ZW4gPSBOVUxMLCAqZl9vZGQgPSBOVUxMOworCXVuc2lnbmVkIGludCBwaXhlbF9wZXJfbGluZSwgYmxvY2s7CisJaW50IHBpeGVsLCBibG9ja19zcGxpdDsKKwlpbnQgeV9wdHIsIHVfcHRyLCB2X3B0ciwgeV9vZGRfb2Zmc2V0OworCWNvbnN0IGludCAgIHlfYmxvY2tfc2l6ZSA9IDEyODsKKwljb25zdCBpbnQgIHV2X2Jsb2NrX3NpemUgPSA2NDsKKwljb25zdCBpbnQgc3ViX2Jsb2NrX3NpemUgPSAzMjsKKwljb25zdCBpbnQgeV9zdGVwW10gPSB7IDAsIDAsIDAsIDIgfSwgIHlfc3RlcF9zaXplID0gNDsKKwljb25zdCBpbnQgdXZfc3RlcFtdPSB7IDAsIDAsIDAsIDQgfSwgdXZfc3RlcF9zaXplID0gNDsKKwl1bnNpZ25lZCBjaGFyIHlbMl0sIHUsIHY7CS8qIFlVViBjb21wb25lbnRzICovCisJaW50IHlfLCB1Xywgdl8sIHZiLCB1dmcsIHVyOworCWludCByXywgZ18sIGJfOwkJCS8qIFJHQiBjb21wb25lbnRzICovCisJdW5zaWduZWQgY2hhciBnOworCWludCBjbGlwbWFza19ldmVuX2luZGV4LCBjbGlwbWFza19vZGRfaW5kZXgsIGJ5dGVzX3Blcl9waXhlbDsKKwlpbnQgY2xpcG1hc2tfYWRkLCBzdHJldGNoX2J5dGVzOworCisJZnJhbWUgID0gdXNidmlzaW9uLT5jdXJGcmFtZTsKKwlmX2V2ZW4gPSBmcmFtZS0+ZGF0YSArIChmcmFtZS0+djRsMl9saW5lc2l6ZSAqIGZyYW1lLT5jdXJsaW5lKTsKKwlmX29kZCAgPSBmX2V2ZW4gKyBmcmFtZS0+djRsMl9saW5lc2l6ZSAqIHVzYnZpc2lvbi0+c3RyZXRjaF9oZWlnaHQ7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggZGF0YSBmb3IgdGhlIGVudGlyZSBsaW5lICovCisJLyogSW4gdGhpcyBtb2RlIHVzYnZpc2lvbiB0cmFuc2ZlciAzIGJ5dGVzIGZvciBldmVyeSAyIHBpeGVscyAqLworCS8qIEkgbmVlZCB0d28gbGluZXMgdG8gZGVjb2RlIHRoZSBjb2xvciAqLworCWJ5dGVzX3Blcl9waXhlbCA9IGZyYW1lLT52NGwyX2Zvcm1hdC5ieXRlc19wZXJfcGl4ZWw7CisJc3RyZXRjaF9ieXRlcyA9ICh1c2J2aXNpb24tPnN0cmV0Y2hfd2lkdGggLSAxKSAqIGJ5dGVzX3Blcl9waXhlbDsKKwljbGlwbWFza19ldmVuX2luZGV4ID0gZnJhbWUtPmN1cmxpbmUgKiBNQVhfRlJBTUVfV0lEVEg7CisJY2xpcG1hc2tfb2RkX2luZGV4ICA9IGNsaXBtYXNrX2V2ZW5faW5kZXggKyBNQVhfRlJBTUVfV0lEVEg7CisJY2xpcG1hc2tfYWRkID0gdXNidmlzaW9uLT5zdHJldGNoX3dpZHRoOworCXBpeGVsX3Blcl9saW5lID0gZnJhbWUtPmlzb2NIZWFkZXIuZnJhbWVXaWR0aDsKKworCWlmIChzY3JhdGNoX2xlbih1c2J2aXNpb24pIDwgKGludClwaXhlbF9wZXJfbGluZSAqIDMpIHsKKwkJLy9wcmludGsoS0VSTl9ERUJVRyAib3V0IG9mIGRhdGEsIG5lZWQgJWRcbiIsIGxlbik7CisJCXJldHVybiBQYXJzZVN0YXRlX091dDsKKwl9CisKKwlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMSkgPj0gZnJhbWUtPmZybWhlaWdodCkgeworCQlyZXR1cm4gUGFyc2VTdGF0ZV9OZXh0RnJhbWU7CisJfQorCisJYmxvY2tfc3BsaXQgPSAocGl4ZWxfcGVyX2xpbmUleV9ibG9ja19zaXplKSA/IDEgOiAwOwkvL2FyZSBzb21lIGJsb2NrcyBzcGxpdHRlZCBpbnRvIGRpZmZlcmVudCBsaW5lcz8KKworCXlfb2RkX29mZnNldCA9IChwaXhlbF9wZXJfbGluZSAvIHlfYmxvY2tfc2l6ZSkgKiAoeV9ibG9ja19zaXplICsgdXZfYmxvY2tfc2l6ZSkKKwkJCSsgYmxvY2tfc3BsaXQgKiB1dl9ibG9ja19zaXplOworCisJc2NyYXRjaF9zZXRfZXh0cmFfcHRyKHVzYnZpc2lvbiwgJnlfcHRyLCB5X29kZF9vZmZzZXQpOworCXNjcmF0Y2hfc2V0X2V4dHJhX3B0cih1c2J2aXNpb24sICZ1X3B0ciwgeV9ibG9ja19zaXplKTsKKwlzY3JhdGNoX3NldF9leHRyYV9wdHIodXNidmlzaW9uLCAmdl9wdHIsIHlfb2RkX29mZnNldAorCQkJKyAoNCAtIGJsb2NrX3NwbGl0KSAqIHN1Yl9ibG9ja19zaXplKTsKKworCWZvciAoYmxvY2sgPSAwOyBibG9jayA8IChwaXhlbF9wZXJfbGluZSAvIHN1Yl9ibG9ja19zaXplKTsKKwkgICAgIGJsb2NrKyspIHsKKworCisJCWZvciAocGl4ZWwgPSAwOyBwaXhlbCA8IHN1Yl9ibG9ja19zaXplOyBwaXhlbCArPTIpIHsKKwkJCXNjcmF0Y2hfZ2V0KHVzYnZpc2lvbiwgJnlbMF0sIDIpOworCQkJc2NyYXRjaF9nZXRfZXh0cmEodXNidmlzaW9uLCAmdSwgJnVfcHRyLCAxKTsKKwkJCXNjcmF0Y2hfZ2V0X2V4dHJhKHVzYnZpc2lvbiwgJnYsICZ2X3B0ciwgMSk7CisKKwkJCS8vSSBkb24ndCB1c2UgdGhlIFlVVl9UT19SR0IgbWFjcm8gZm9yIGJldHRlciBwZXJmb3JtYW5jZQorCQkJdl8gPSB2IC0gMTI4OworCQkJdV8gPSB1IC0gMTI4OworCQkJdmIgPSAgICAgICAgICAgICAgMTMyMjUyICogdl87CisJCQl1dmc9IC01MzI4MSAqIHVfIC0gMjU2MjUgKiB2XzsKKwkJCXVyID0gMTA0NTk1ICogdV87CisKKwkJCWlmKGZyYW1lLT52NGwyX2Zvcm1hdC5mb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1lVWVYpIHsKKwkJCQkqZl9ldmVuKysgPSB5WzBdOworCQkJCSpmX2V2ZW4rKyA9IHY7CisJCQl9CisJCQllbHNlIHsKKwkJCQl5XyA9IDc2Mjg0ICogKHlbMF0gLSAxNik7CisKKwkJCQliXyA9ICh5XyArIHZiKSA+PiAxNjsKKwkJCQlnXyA9ICh5XyArIHV2Zyk+PiAxNjsKKwkJCQlyXyA9ICh5XyArIHVyKSA+PiAxNjsKKworCQkJCXN3aXRjaCAoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCkgeworCQkJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJCQkJCQlnID0gTElNSVRfUkdCKGdfKTsKKwkJCQkJCSpmX2V2ZW4rKyA9ICgweDFGICYgKExJTUlUX1JHQihiXykgPj4gMykpIHwgKDB4RTAgJiAoZyA8PCAzKSk7CisJCQkJCQkqZl9ldmVuKysgPSAoMHgwNyAmICggICAgICAgICAgZyAgID4+IDUpKSB8ICgweEY4ICYgTElNSVRfUkdCKHJfKSk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCMjQ6CisJCQkJCQkqZl9ldmVuKysgPSBMSU1JVF9SR0IoYl8pOworCQkJCQkJKmZfZXZlbisrID0gTElNSVRfUkdCKGdfKTsKKwkJCQkJCSpmX2V2ZW4rKyA9IExJTUlUX1JHQihyXyk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCMzI6CisJCQkJCQkqZl9ldmVuKysgPSBMSU1JVF9SR0IoYl8pOworCQkJCQkJKmZfZXZlbisrID0gTElNSVRfUkdCKGdfKTsKKwkJCQkJCSpmX2V2ZW4rKyA9IExJTUlUX1JHQihyXyk7CisJCQkJCQlmX2V2ZW4rKzsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6CisJCQkJCQlnID0gTElNSVRfUkdCKGdfKTsKKwkJCQkJCSpmX2V2ZW4rKyA9ICgweDFGICYgKExJTUlUX1JHQihiXykgPj4gMykpIHwgKDB4RTAgJiAoZyA8PCAyKSk7CisJCQkJCQkqZl9ldmVuKysgPSAoMHgwMyAmICggICAgICAgICAgZyAgID4+IDYpKSB8CisJCQkJCQkJICAgICgweDdDICYgKExJTUlUX1JHQihyXykgPj4gMSkpOworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJY2xpcG1hc2tfZXZlbl9pbmRleCArPSBjbGlwbWFza19hZGQ7CisJCQlmX2V2ZW4gKz0gc3RyZXRjaF9ieXRlczsKKworCQkJaWYoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikgeworCQkJCSpmX2V2ZW4rKyA9IHlbMV07CisJCQkJKmZfZXZlbisrID0gdTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXlfID0gNzYyODQgKiAoeVsxXSAtIDE2KTsKKworCQkJCWJfID0gKHlfICsgdmIpID4+IDE2OworCQkJCWdfID0gKHlfICsgdXZnKT4+IDE2OworCQkJCXJfID0gKHlfICsgdXIpID4+IDE2OworCisJCQkJc3dpdGNoIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0KSB7CisJCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKKwkJCQkJCWcgPSBMSU1JVF9SR0IoZ18pOworCQkJCQkJKmZfZXZlbisrID0gKDB4MUYgJiAoTElNSVRfUkdCKGJfKSA+PiAzKSkgfCAoMHhFMCAmIChnIDw8IDMpKTsKKwkJCQkJCSpmX2V2ZW4rKyA9ICgweDA3ICYgKCAgICAgICAgICBnICAgPj4gNSkpIHwgKDB4RjggJiBMSU1JVF9SR0Iocl8pKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0IyNDoKKwkJCQkJCSpmX2V2ZW4rKyA9IExJTUlUX1JHQihiXyk7CisJCQkJCQkqZl9ldmVuKysgPSBMSU1JVF9SR0IoZ18pOworCQkJCQkJKmZfZXZlbisrID0gTElNSVRfUkdCKHJfKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0IzMjoKKwkJCQkJCSpmX2V2ZW4rKyA9IExJTUlUX1JHQihiXyk7CisJCQkJCQkqZl9ldmVuKysgPSBMSU1JVF9SR0IoZ18pOworCQkJCQkJKmZfZXZlbisrID0gTElNSVRfUkdCKHJfKTsKKwkJCQkJCWZfZXZlbisrOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKKwkJCQkJCWcgPSBMSU1JVF9SR0IoZ18pOworCQkJCQkJKmZfZXZlbisrID0gKDB4MUYgJiAoTElNSVRfUkdCKGJfKSA+PiAzKSkgfCAoMHhFMCAmIChnIDw8IDIpKTsKKwkJCQkJCSpmX2V2ZW4rKyA9ICgweDAzICYgKCAgICAgICAgICBnICAgPj4gNikpIHwKKwkJCQkJCQkgICAgKDB4N0MgJiAoTElNSVRfUkdCKHJfKSA+PiAxKSk7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQljbGlwbWFza19ldmVuX2luZGV4ICs9IGNsaXBtYXNrX2FkZDsKKwkJCWZfZXZlbiArPSBzdHJldGNoX2J5dGVzOworCisJCQlzY3JhdGNoX2dldF9leHRyYSh1c2J2aXNpb24sICZ5WzBdLCAmeV9wdHIsIDIpOworCisJCQlpZihmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZVVlWKSB7CisJCQkJKmZfb2RkKysgPSB5WzBdOworCQkJCSpmX29kZCsrID0gdjsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXlfID0gNzYyODQgKiAoeVswXSAtIDE2KTsKKworCQkJCWJfID0gKHlfICsgdmIpID4+IDE2OworCQkJCWdfID0gKHlfICsgdXZnKT4+IDE2OworCQkJCXJfID0gKHlfICsgdXIpID4+IDE2OworCisJCQkJc3dpdGNoIChmcmFtZS0+djRsMl9mb3JtYXQuZm9ybWF0KSB7CisJCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKKwkJCQkJCWcgPSBMSU1JVF9SR0IoZ18pOworCQkJCQkJKmZfb2RkKysgPSAoMHgxRiAmIChMSU1JVF9SR0IoYl8pID4+IDMpKSB8ICgweEUwICYgKGcgPDwgMykpOworCQkJCQkJKmZfb2RkKysgPSAoMHgwNyAmICggICAgICAgICAgZyAgID4+IDUpKSB8ICgweEY4ICYgTElNSVRfUkdCKHJfKSk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCMjQ6CisJCQkJCQkqZl9vZGQrKyA9IExJTUlUX1JHQihiXyk7CisJCQkJCQkqZl9vZGQrKyA9IExJTUlUX1JHQihnXyk7CisJCQkJCQkqZl9vZGQrKyA9IExJTUlUX1JHQihyXyk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCMzI6CisJCQkJCQkqZl9vZGQrKyA9IExJTUlUX1JHQihiXyk7CisJCQkJCQkqZl9vZGQrKyA9IExJTUlUX1JHQihnXyk7CisJCQkJCQkqZl9vZGQrKyA9IExJTUlUX1JHQihyXyk7CisJCQkJCQlmX29kZCsrOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKKwkJCQkJCWcgPSBMSU1JVF9SR0IoZ18pOworCQkJCQkJKmZfb2RkKysgPSAoMHgxRiAmIChMSU1JVF9SR0IoYl8pID4+IDMpKSB8ICgweEUwICYgKGcgPDwgMikpOworCQkJCQkJKmZfb2RkKysgPSAoMHgwMyAmICggICAgICAgICAgZyAgID4+IDYpKSB8CisJCQkJCQkJICAgKDB4N0MgJiAoTElNSVRfUkdCKHJfKSA+PiAxKSk7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQljbGlwbWFza19vZGRfaW5kZXggKz0gY2xpcG1hc2tfYWRkOworCQkJZl9vZGQgKz0gc3RyZXRjaF9ieXRlczsKKworCQkJaWYoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWVVZVikgeworCQkJCSpmX29kZCsrID0geVsxXTsKKwkJCQkqZl9vZGQrKyA9IHU7CisJCQl9CisJCQllbHNlIHsKKwkJCQl5XyA9IDc2Mjg0ICogKHlbMV0gLSAxNik7CisKKwkJCQliXyA9ICh5XyArIHZiKSA+PiAxNjsKKwkJCQlnXyA9ICh5XyArIHV2Zyk+PiAxNjsKKwkJCQlyXyA9ICh5XyArIHVyKSA+PiAxNjsKKworCQkJCXN3aXRjaCAoZnJhbWUtPnY0bDJfZm9ybWF0LmZvcm1hdCkgeworCQkJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJCQkJCQlnID0gTElNSVRfUkdCKGdfKTsKKwkJCQkJCSpmX29kZCsrID0gKDB4MUYgJiAoTElNSVRfUkdCKGJfKSA+PiAzKSkgfCAoMHhFMCAmIChnIDw8IDMpKTsKKwkJCQkJCSpmX29kZCsrID0gKDB4MDcgJiAoICAgICAgICAgIGcgICA+PiA1KSkgfCAoMHhGOCAmIExJTUlUX1JHQihyXykpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjI0OgorCQkJCQkJKmZfb2RkKysgPSBMSU1JVF9SR0IoYl8pOworCQkJCQkJKmZfb2RkKysgPSBMSU1JVF9SR0IoZ18pOworCQkJCQkJKmZfb2RkKysgPSBMSU1JVF9SR0Iocl8pOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjMyOgorCQkJCQkJKmZfb2RkKysgPSBMSU1JVF9SR0IoYl8pOworCQkJCQkJKmZfb2RkKysgPSBMSU1JVF9SR0IoZ18pOworCQkJCQkJKmZfb2RkKysgPSBMSU1JVF9SR0Iocl8pOworCQkJCQkJZl9vZGQrKzsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6CisJCQkJCQlnID0gTElNSVRfUkdCKGdfKTsKKwkJCQkJCSpmX29kZCsrID0gKDB4MUYgJiAoTElNSVRfUkdCKGJfKSA+PiAzKSkgfCAoMHhFMCAmIChnIDw8IDIpKTsKKwkJCQkJCSpmX29kZCsrID0gKDB4MDMgJiAoICAgICAgICAgIGcgICA+PiA2KSkgfAorCQkJCQkJCSAgICgweDdDICYgKExJTUlUX1JHQihyXykgPj4gMSkpOworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJY2xpcG1hc2tfb2RkX2luZGV4ICs9IGNsaXBtYXNrX2FkZDsKKwkJCWZfb2RkICs9IHN0cmV0Y2hfYnl0ZXM7CisJCX0KKworCQlzY3JhdGNoX3JtX29sZCh1c2J2aXNpb24seV9zdGVwW2Jsb2NrICUgeV9zdGVwX3NpemVdICogc3ViX2Jsb2NrX3NpemUpOworCQlzY3JhdGNoX2luY19leHRyYV9wdHIoJnlfcHRyLCB5X3N0ZXBbKGJsb2NrICsgMiAqIGJsb2NrX3NwbGl0KSAlIHlfc3RlcF9zaXplXQorCQkJCSogc3ViX2Jsb2NrX3NpemUpOworCQlzY3JhdGNoX2luY19leHRyYV9wdHIoJnVfcHRyLCB1dl9zdGVwW2Jsb2NrICUgdXZfc3RlcF9zaXplXQorCQkJCSogc3ViX2Jsb2NrX3NpemUpOworCQlzY3JhdGNoX2luY19leHRyYV9wdHIoJnZfcHRyLCB1dl9zdGVwWyhibG9jayArIDIgKiBibG9ja19zcGxpdCkgJSB1dl9zdGVwX3NpemVdCisJCQkJKiBzdWJfYmxvY2tfc2l6ZSk7CisJfQorCisJc2NyYXRjaF9ybV9vbGQodXNidmlzaW9uLCBwaXhlbF9wZXJfbGluZSAqIDMgLyAyCisJCQkrIGJsb2NrX3NwbGl0ICogc3ViX2Jsb2NrX3NpemUpOworCisJZnJhbWUtPmN1cmxpbmUgKz0gMiAqIHVzYnZpc2lvbi0+c3RyZXRjaF9oZWlnaHQ7CisJKnBjb3B5bGVuICs9IGZyYW1lLT52NGwyX2xpbmVzaXplICogMiAqIHVzYnZpc2lvbi0+c3RyZXRjaF9oZWlnaHQ7CisKKwlpZiAoZnJhbWUtPmN1cmxpbmUgPj0gZnJhbWUtPmZybWhlaWdodCkKKwkJcmV0dXJuIFBhcnNlU3RhdGVfTmV4dEZyYW1lOworCWVsc2UKKwkJcmV0dXJuIFBhcnNlU3RhdGVfQ29udGludWU7Cit9CisKKy8qCisgKiB1c2J2aXNpb25fcGFyc2VfZGF0YSgpCisgKgorICogR2VuZXJpYyByb3V0aW5lIHRvIHBhcnNlIHRoZSBzY3JhdGNoIGJ1ZmZlci4gSXQgZW1wbG95cyBlaXRoZXIKKyAqIHVzYnZpc2lvbl9maW5kX2hlYWRlcigpIG9yIHVzYnZpc2lvbl9wYXJzZV9saW5lcygpIHRvIGRvIG1vc3QKKyAqIG9mIHdvcmsuCisgKgorICovCitzdGF0aWMgdm9pZCB1c2J2aXNpb25fcGFyc2VfZGF0YShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCXN0cnVjdCB1c2J2aXNpb25fZnJhbWUgKmZyYW1lOworCWVudW0gUGFyc2VTdGF0ZSBuZXdzdGF0ZTsKKwlsb25nIGNvcHlsZW4gPSAwOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKworCWZyYW1lID0gdXNidmlzaW9uLT5jdXJGcmFtZTsKKworCVBERUJVRyhEQkdfUEFSU0UsICJwYXJzaW5nIGxlbj0lZFxuIiwgc2NyYXRjaF9sZW4odXNidmlzaW9uKSk7CisKKwl3aGlsZSAoMSkgeworCisJCW5ld3N0YXRlID0gUGFyc2VTdGF0ZV9PdXQ7CisJCWlmIChzY3JhdGNoX2xlbih1c2J2aXNpb24pKSB7CisJCQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTY2FuU3RhdGVfU2Nhbm5pbmcpIHsKKwkJCQluZXdzdGF0ZSA9IHVzYnZpc2lvbl9maW5kX2hlYWRlcih1c2J2aXNpb24pOworCQkJfQorCQkJZWxzZSBpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTY2FuU3RhdGVfTGluZXMpIHsKKwkJCQlpZiAodXNidmlzaW9uLT5pc29jTW9kZSA9PSBJU09DX01PREVfWVVWNDIwKSB7CisJCQkJCW5ld3N0YXRlID0gdXNidmlzaW9uX3BhcnNlX2xpbmVzXzQyMCh1c2J2aXNpb24sICZjb3B5bGVuKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAodXNidmlzaW9uLT5pc29jTW9kZSA9PSBJU09DX01PREVfWVVWNDIyKSB7CisJCQkJCW5ld3N0YXRlID0gdXNidmlzaW9uX3BhcnNlX2xpbmVzXzQyMih1c2J2aXNpb24sICZjb3B5bGVuKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAodXNidmlzaW9uLT5pc29jTW9kZSA9PSBJU09DX01PREVfQ09NUFJFU1MpIHsKKwkJCQkJbmV3c3RhdGUgPSB1c2J2aXNpb25fcGFyc2VfY29tcHJlc3ModXNidmlzaW9uLCAmY29weWxlbik7CisJCQkJfQorCisJCQl9CisJCX0KKwkJaWYgKG5ld3N0YXRlID09IFBhcnNlU3RhdGVfQ29udGludWUpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKChuZXdzdGF0ZSA9PSBQYXJzZVN0YXRlX05leHRGcmFtZSkgfHwgKG5ld3N0YXRlID09IFBhcnNlU3RhdGVfT3V0KSkgeworCQkJYnJlYWs7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm47CS8qIFBhcnNlU3RhdGVfRW5kUGFyc2UgKi8KKwkJfQorCX0KKworCWlmIChuZXdzdGF0ZSA9PSBQYXJzZVN0YXRlX05leHRGcmFtZSkgeworCQlmcmFtZS0+Z3JhYnN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lOworCQlkb19nZXR0aW1lb2ZkYXkoJihmcmFtZS0+dGltZXN0YW1wKSk7CisJCWZyYW1lLT5zZXF1ZW5jZSA9IHVzYnZpc2lvbi0+ZnJhbWVfbnVtOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2J2aXNpb24tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQlsaXN0X21vdmVfdGFpbCgmKGZyYW1lLT5mcmFtZSksICZ1c2J2aXNpb24tPm91dHF1ZXVlKTsKKwkJdXNidmlzaW9uLT5jdXJGcmFtZSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYnZpc2lvbi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwkJdXNidmlzaW9uLT5mcmFtZV9udW0rKzsKKworCQkvKiBUaGlzIHdpbGwgY2F1c2UgdGhlIHByb2Nlc3MgdG8gcmVxdWVzdCBhbm90aGVyIGZyYW1lLiAqLworCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmdXNidmlzaW9uLT53YWl0X2ZyYW1lKSkgeworCQkJUERFQlVHKERCR19QQVJTRSwgIldha2UgdXAgISIpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1c2J2aXNpb24tPndhaXRfZnJhbWUpOworCQl9CisJfQorCWVsc2UKKwkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZyYW1lU3RhdGVfR3JhYmJpbmc7CisKKworCS8qIFVwZGF0ZSB0aGUgZnJhbWUncyB1bmNvbXByZXNzZWQgbGVuZ3RoLiAqLworCWZyYW1lLT5zY2FubGVuZ3RoICs9IGNvcHlsZW47Cit9CisKKworLyoKKyAqIE1ha2UgYWxsIG9mIHRoZSBibG9ja3Mgb2YgZGF0YSBjb250aWd1b3VzCisgKi8KK3N0YXRpYyBpbnQgdXNidmlzaW9uX2NvbXByZXNzX2lzb2Nocm9ub3VzKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sCisJCQkJCSAgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGNoYXIgKnBhY2tldF9kYXRhOworCWludCBpLCB0b3RsZW4gPSAwOworCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlpbnQgcGFja2V0X2xlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJaW50IHBhY2tldF9zdGF0ID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisKKwkJcGFja2V0X2RhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCisJCS8qIERldGVjdCBhbmQgaWdub3JlIGVycm9yZWQgcGFja2V0cyAqLworCQlpZiAocGFja2V0X3N0YXQpIHsJLy8gcGFja2V0X3N0YXQgIT0gMCA/Pz8/Pz8/Pz8/Pz8/CisJCQlQREVCVUcoREJHX0lTT0MsICJkYXRhIGVycm9yOiBbJWRdIGxlbj0lZCwgc3RhdHVzPSVYIiwgaSwgcGFja2V0X2xlbiwgcGFja2V0X3N0YXQpOworCQkJdXNidmlzaW9uLT5pc29jRXJyQ291bnQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRGV0ZWN0IGFuZCBpZ25vcmUgZW1wdHkgcGFja2V0cyAqLworCQlpZiAocGFja2V0X2xlbiA8IDApIHsKKwkJCVBERUJVRyhEQkdfSVNPQywgImVycm9yIHBhY2tldCBbJWRdIiwgaSk7CisJCQl1c2J2aXNpb24tPmlzb2NTa2lwQ291bnQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHBhY2tldF9sZW4gPT0gMCkgewkvKiBGcmFtZSBlbmQgPz8/Pz8gKi8KKwkJCVBERUJVRyhEQkdfSVNPQywgIm51bGwgcGFja2V0IFslZF0iLCBpKTsKKwkJCXVzYnZpc2lvbi0+aXNvY3N0YXRlPUlzb2NTdGF0ZV9Ob0ZyYW1lOworCQkJdXNidmlzaW9uLT5pc29jU2tpcENvdW50Kys7CisJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChwYWNrZXRfbGVuID4gdXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSkgeworCQkJUERFQlVHKERCR19JU09DLCAicGFja2V0WyVkXSA+IGlzb2NQYWNrZXRTaXplIiwgaSk7CisJCQl1c2J2aXNpb24tPmlzb2NTa2lwQ291bnQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJUERFQlVHKERCR19JU09DLCAicGFja2V0IG9rIFslZF0gbGVuPSVkIiwgaSwgcGFja2V0X2xlbik7CisKKwkJaWYgKHVzYnZpc2lvbi0+aXNvY3N0YXRlPT1Jc29jU3RhdGVfTm9GcmFtZSkgeyAvL25ldyBmcmFtZSBiZWdpbnMKKwkJCXVzYnZpc2lvbi0+aXNvY3N0YXRlPUlzb2NTdGF0ZV9JbkZyYW1lOworCQkJc2NyYXRjaF9tYXJrX2hlYWRlcih1c2J2aXNpb24pOworCQkJdXNidmlzaW9uX21lYXN1cmVfYmFuZHdpZHRoKHVzYnZpc2lvbik7CisJCQlQREVCVUcoREJHX0lTT0MsICJwYWNrZXQgd2l0aCBoZWFkZXIiKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHVzYnZpc2lvbiBjb250aW51ZXMgdG8gZmVlZCB1cyB3aXRoIGRhdGEgYnV0IHRoZXJlIGlzIG5vCisJCSAqIGNvbnN1bXB0aW9uIChpZiwgZm9yIGV4YW1wbGUsIFY0TCBjbGllbnQgZmVsbCBhc2xlZXApIHdlCisJCSAqIG1heSBvdmVyZmxvdyB0aGUgYnVmZmVyLiBXZSBoYXZlIHRvIG1vdmUgb2xkIGRhdGEgb3ZlciB0bworCQkgKiBmcmVlIHJvb20gZm9yIG5ldyBkYXRhLiBUaGlzIGlzIGJhZCBmb3Igb2xkIGRhdGEuIElmIHdlCisJCSAqIGp1c3QgZHJvcCBuZXcgZGF0YSB0aGVuIGl0J3MgYmFkIGZvciBuZXcgZGF0YS4uLiBjaG9vc2UKKwkJICogeW91ciBmYXZvcml0ZSBldmlsIGhlcmUuCisJCSAqLworCQlpZiAoc2NyYXRjaF9mcmVlKHVzYnZpc2lvbikgPCBwYWNrZXRfbGVuKSB7CisKKwkJCXVzYnZpc2lvbi0+c2NyYXRjaF9vdmZfY291bnQrKzsKKwkJCVBERUJVRyhEQkdfSVNPQywgInNjcmF0Y2ggYnVmIG92ZXJmbG93ISBzY3JfbGVuOiAlZCwgbjogJWQiLAorCQkJICAgICAgIHNjcmF0Y2hfbGVuKHVzYnZpc2lvbiksIHBhY2tldF9sZW4pOworCQkJc2NyYXRjaF9ybV9vbGQodXNidmlzaW9uLCBwYWNrZXRfbGVuIC0gc2NyYXRjaF9mcmVlKHVzYnZpc2lvbikpOworCQl9CisKKwkJLyogTm93IHdlIGtub3cgdGhhdCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbiBzY3JhdGNoIGJ1ZmZlciAqLworCQlzY3JhdGNoX3B1dCh1c2J2aXNpb24sIHBhY2tldF9kYXRhLCBwYWNrZXRfbGVuKTsKKwkJdG90bGVuICs9IHBhY2tldF9sZW47CisJCXVzYnZpc2lvbi0+aXNvY0RhdGFDb3VudCArPSBwYWNrZXRfbGVuOworCQl1c2J2aXNpb24tPmlzb2NQYWNrZXRDb3VudCsrOworCX0KKyNpZiBFTkFCTEVfSEVYRFVNUAorCWlmICh0b3RsZW4gPiAwKSB7CisJCXN0YXRpYyBpbnQgZm9vID0gMDsKKwkJaWYgKGZvbyA8IDEpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIrJWQuXG4iLCB1c2J2aXNpb24tPnNjcmF0Y2hsZW4pOworCQkJdXNidmlzaW9uX2hleGR1bXAoZGF0YTAsICh0b3RsZW4gPiA2NCkgPyA2NCA6IHRvdGxlbik7CisJCQkrK2ZvbzsKKwkJfQorCX0KKyNlbmRpZgorIHJldHVybiB0b3RsZW47Cit9CisKK3N0YXRpYyB2b2lkIHVzYnZpc2lvbl9pc29jSXJxKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgZXJyQ29kZSA9IDA7CisJaW50IGxlbjsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdXJiLT5jb250ZXh0OworCWludCBpOworCXVuc2lnbmVkIGxvbmcgc3RhcnRUaW1lID0gamlmZmllczsKKwlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICoqZjsKKworCS8qIFdlIGRvbid0IHdhbnQgdG8gZG8gYW55dGhpbmcgaWYgd2UgYXJlIGFib3V0IHRvIGJlIHJlbW92ZWQhICovCisJaWYgKCFVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodXNidmlzaW9uKSkKKwkJcmV0dXJuOworCisJZiA9ICZ1c2J2aXNpb24tPmN1ckZyYW1lOworCisJLyogTWFuYWdlIHN0cmVhbWluZyBpbnRlcnJ1cHRpb24gKi8KKwlpZiAodXNidmlzaW9uLT5zdHJlYW1pbmcgPT0gU3RyZWFtX0ludGVycnVwdCkgeworCQl1c2J2aXNpb24tPnN0cmVhbWluZyA9IFN0cmVhbV9JZGxlOworCQlpZiAoKCpmKSkgeworCQkJKCpmKS0+Z3JhYnN0YXRlID0gRnJhbWVTdGF0ZV9SZWFkeTsKKwkJCSgqZiktPnNjYW5zdGF0ZSA9IFNjYW5TdGF0ZV9TY2FubmluZzsKKwkJfQorCQlQREVCVUcoREJHX0lSUSwgInN0cmVhbSBpbnRlcnJ1cHRlZCIpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVzYnZpc2lvbi0+d2FpdF9zdHJlYW0pOworCX0KKworCS8qIENvcHkgdGhlIGRhdGEgcmVjZWl2ZWQgaW50byBvdXIgc2NyYXRjaCBidWZmZXIgKi8KKwlsZW4gPSB1c2J2aXNpb25fY29tcHJlc3NfaXNvY2hyb25vdXModXNidmlzaW9uLCB1cmIpOworCisJdXNidmlzaW9uLT5pc29jVXJiQ291bnQrKzsKKwl1c2J2aXNpb24tPnVyYl9sZW5ndGggPSBsZW47CisKKwlpZiAodXNidmlzaW9uLT5zdHJlYW1pbmcgPT0gU3RyZWFtX09uKSB7CisKKwkJLyogSWYgd2UgY29sbGVjdGVkIGVub3VnaCBkYXRhIGxldCdzIHBhcnNlISAqLworCQlpZiAoc2NyYXRjaF9sZW4odXNidmlzaW9uKSA+IFVTQlZJU0lPTl9IRUFERVJfTEVOR1RIKSB7CS8qIDEyID09IGhlYWRlcl9sZW5ndGggKi8KKwkJCS8qSWYgd2UgZG9uJ3QgaGF2ZSBhIGZyYW1lIHdlJ3JlIGN1cnJlbnQgd29ya2luZyBvbiwgY29tcGxhaW4gKi8KKwkJCWlmKCFsaXN0X2VtcHR5KCYodXNidmlzaW9uLT5pbnF1ZXVlKSkpIHsKKwkJCQlpZiAoISgqZikpIHsKKwkJCQkJKCpmKSA9IGxpc3RfZW50cnkodXNidmlzaW9uLT5pbnF1ZXVlLm5leHQsc3RydWN0IHVzYnZpc2lvbl9mcmFtZSwgZnJhbWUpOworCQkJCX0KKwkJCQl1c2J2aXNpb25fcGFyc2VfZGF0YSh1c2J2aXNpb24pOworCQkJfQorCQkJZWxzZSB7CisJCQkJUERFQlVHKERCR19JUlEsICJyZWNlaXZlZCBkYXRhLCBidXQgbm8gb25lIG5lZWRzIGl0Iik7CisJCQkJc2NyYXRjaF9yZXNldCh1c2J2aXNpb24pOworCQkJfQorCQl9CisJfQorCWVsc2UgeworCQlQREVCVUcoREJHX0lSUSwgInJlY2VpdmVkIGRhdGEsIGJ1dCBubyBvbmUgbmVlZHMgaXQiKTsKKwkJc2NyYXRjaF9yZXNldCh1c2J2aXNpb24pOworCX0KKworCXVzYnZpc2lvbi0+dGltZUluSXJxICs9IGppZmZpZXMgLSBzdGFydFRpbWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCVklTSU9OX1VSQl9GUkFNRVM7IGkrKykgeworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CisJfQorCisJdXJiLT5zdGF0dXMgPSAwOworCXVyYi0+ZGV2ID0gdXNidmlzaW9uLT5kZXY7CisJZXJyQ29kZSA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCisJLyogRGlzYWJsZSB0aGlzIHdhcm5pbmcuICBCeSBkZXNpZ24gb2YgdGhlIGRyaXZlci4gKi8KKwkvLwlpZihlcnJDb2RlKSB7CisJLy8JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIGVyckNvZGUpOworCS8vCX0KKworCXJldHVybjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBMb3cgbGV2ZWwgdXNidmlzaW9uIGFjY2VzcyBmdW5jdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogdXNidmlzaW9uX3JlYWRfcmVnKCkKKyAqCisgKiByZXR1cm4gIDwgMCAtPiBFcnJvcgorICogICAgICAgID49IDAgLT4gRGF0YQorICovCisKK2ludCB1c2J2aXNpb25fcmVhZF9yZWcoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgdW5zaWduZWQgY2hhciByZWcpCit7CisJaW50IGVyckNvZGUgPSAwOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzFdOworCisJaWYgKCFVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodXNidmlzaW9uKSkKKwkJcmV0dXJuIC0xOworCisJZXJyQ29kZSA9IHVzYl9jb250cm9sX21zZyh1c2J2aXNpb24tPmRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYnZpc2lvbi0+ZGV2LCAxKSwKKwkJCQlVU0JWSVNJT05fT1BfQ09ERSwKKwkJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQkJCTAsIChfX3UxNikgcmVnLCBidWZmZXIsIDEsIEhaKTsKKworCWlmIChlcnJDb2RlIDwgMCkgeworCQllcnIoIiVzOiBmYWlsZWQ6IGVycm9yICVkIiwgX19GVU5DVElPTl9fLCBlcnJDb2RlKTsKKwkJcmV0dXJuIGVyckNvZGU7CisJfQorCXJldHVybiBidWZmZXJbMF07Cit9CisKKy8qCisgKiB1c2J2aXNpb25fd3JpdGVfcmVnKCkKKyAqCisgKiByZXR1cm4gMSAtPiBSZWcgd3JpdHRlbgorICogICAgICAgIDAgLT4gdXNidmlzaW9uIGlzIG5vdCB5ZXQgcmVhZHkKKyAqICAgICAgIC0xIC0+IFNvbWV0aGluZyB3ZW50IHdyb25nCisgKi8KKworaW50IHVzYnZpc2lvbl93cml0ZV9yZWcoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgdW5zaWduZWQgY2hhciByZWcsCisJCQkgICAgdW5zaWduZWQgY2hhciB2YWx1ZSkKK3sKKwlpbnQgZXJyQ29kZSA9IDA7CisKKwlpZiAoIVVTQlZJU0lPTl9JU19PUEVSQVRJT05BTCh1c2J2aXNpb24pKQorCQlyZXR1cm4gMDsKKworCWVyckNvZGUgPSB1c2JfY29udHJvbF9tc2codXNidmlzaW9uLT5kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2J2aXNpb24tPmRldiwgMSksCisJCQkJVVNCVklTSU9OX09QX0NPREUsCisJCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJCVVTQl9SRUNJUF9FTkRQT0lOVCwgMCwgKF9fdTE2KSByZWcsICZ2YWx1ZSwgMSwgSFopOworCisJaWYgKGVyckNvZGUgPCAwKSB7CisJCWVycigiJXM6IGZhaWxlZDogZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIGVyckNvZGUpOworCX0KKwlyZXR1cm4gZXJyQ29kZTsKK30KKworCitzdGF0aWMgdm9pZCB1c2J2aXNpb25fY3RybFVyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKXVyYi0+Y29udGV4dDsKKworCVBERUJVRyhEQkdfSVJRLCAiIik7CisJdXNidmlzaW9uLT5jdHJsVXJiQnVzeSA9IDA7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnVzYnZpc2lvbi0+Y3RybFVyYl93cSkpIHsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1c2J2aXNpb24tPmN0cmxVcmJfd3EpOworCX0KK30KKworCitzdGF0aWMgaW50IHVzYnZpc2lvbl93cml0ZV9yZWdfaXJxKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24saW50IGFkZHJlc3MsCisJCQkJCQkJCQl1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCBlcnJDb2RlID0gMDsKKworCVBERUJVRyhEQkdfSVJRLCAiIik7CisJaWYgKGxlbiA+IDgpIHsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorLy8JZG93bigmdXNidmlzaW9uLT5jdHJsVXJiTG9jayk7CisJaWYgKHVzYnZpc2lvbi0+Y3RybFVyYkJ1c3kpIHsKKy8vCQl1cCgmdXNidmlzaW9uLT5jdHJsVXJiTG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXVzYnZpc2lvbi0+Y3RybFVyYkJ1c3kgPSAxOworLy8JdXAoJnVzYnZpc2lvbi0+Y3RybFVyYkxvY2spOworCisJdXNidmlzaW9uLT5jdHJsVXJiU2V0dXAuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQ7CisJdXNidmlzaW9uLT5jdHJsVXJiU2V0dXAuYlJlcXVlc3QgICAgID0gVVNCVklTSU9OX09QX0NPREU7CisJdXNidmlzaW9uLT5jdHJsVXJiU2V0dXAud1ZhbHVlICAgICAgID0gMDsKKwl1c2J2aXNpb24tPmN0cmxVcmJTZXR1cC53SW5kZXggICAgICAgPSBjcHVfdG9fbGUxNihhZGRyZXNzKTsKKwl1c2J2aXNpb24tPmN0cmxVcmJTZXR1cC53TGVuZ3RoICAgICAgPSBjcHVfdG9fbGUxNihsZW4pOworCXVzYl9maWxsX2NvbnRyb2xfdXJiICh1c2J2aXNpb24tPmN0cmxVcmIsIHVzYnZpc2lvbi0+ZGV2LAorCQkJCQkJCXVzYl9zbmRjdHJscGlwZSh1c2J2aXNpb24tPmRldiwgMSksCisJCQkJCQkJKHVuc2lnbmVkIGNoYXIgKikmdXNidmlzaW9uLT5jdHJsVXJiU2V0dXAsCisJCQkJCQkJKHZvaWQgKil1c2J2aXNpb24tPmN0cmxVcmJCdWZmZXIsIGxlbiwKKwkJCQkJCQl1c2J2aXNpb25fY3RybFVyYl9jb21wbGV0ZSwKKwkJCQkJCQkodm9pZCAqKXVzYnZpc2lvbik7CisKKwltZW1jcHkodXNidmlzaW9uLT5jdHJsVXJiQnVmZmVyLCBkYXRhLCBsZW4pOworCisJZXJyQ29kZSA9IHVzYl9zdWJtaXRfdXJiKHVzYnZpc2lvbi0+Y3RybFVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVyckNvZGUgPCAwKSB7CisJCS8vIGVycm9yIGluIHVzYl9zdWJtaXRfdXJiKCkKKwkJdXNidmlzaW9uLT5jdHJsVXJiQnVzeSA9IDA7CisJfQorCVBERUJVRyhEQkdfSVJRLCAic3VibWl0ICVkIGJ5dGU6IGVycm9yICVkIiwgbGVuLCBlcnJDb2RlKTsKKwlyZXR1cm4gZXJyQ29kZTsKK30KKworCitzdGF0aWMgaW50IHVzYnZpc2lvbl9pbml0X2NvbXByZXNzaW9uKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCit7CisJaW50IGVyckNvZGUgPSAwOworCisJdXNidmlzaW9uLT5sYXN0SXNvY0ZyYW1lTnVtID0gLTE7CisJdXNidmlzaW9uLT5pc29jRGF0YUNvdW50ID0gMDsKKwl1c2J2aXNpb24tPmlzb2NQYWNrZXRDb3VudCA9IDA7CisJdXNidmlzaW9uLT5pc29jU2tpcENvdW50ID0gMDsKKwl1c2J2aXNpb24tPmNvbXByTGV2ZWwgPSA1MDsKKwl1c2J2aXNpb24tPmxhc3RDb21wckxldmVsID0gLTE7CisJdXNidmlzaW9uLT5pc29jVXJiQ291bnQgPSAwOworCXVzYnZpc2lvbi0+cmVxdWVzdEludHJhID0gMTsKKwl1c2J2aXNpb24tPmlzb2NNZWFzdXJlQmFuZHdpZHRoQ291bnQgPSAwOworCisJcmV0dXJuIGVyckNvZGU7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gbWVhc3VyZXMgdGhlIHVzZWQgYmFuZHdpZHRoIHNpbmNlIGxhc3QgY2FsbAorICogcmV0dXJuOiAgICAwIDogbm8gZXJyb3IKKyAqIHNldHMgdXNlZEJhbmR3aWR0aCB0byAxLTEwMCA6IDEtMTAwJSBvZiBmdWxsIGJhbmR3aWR0aCByZXNwLiB0byBpc29jUGFja2V0U2l6ZQorICovCitzdGF0aWMgaW50IHVzYnZpc2lvbl9tZWFzdXJlX2JhbmR3aWR0aCAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwlpbnQgZXJyQ29kZSA9IDA7CisKKwlpZiAodXNidmlzaW9uLT5pc29jTWVhc3VyZUJhbmR3aWR0aENvdW50IDwgMikgeyAvLyB0aGlzIGdpdmVzIGFuIGF2ZXJhZ2UgYmFuZHdpZHRoIG9mIDMgZnJhbWVzCisJCXVzYnZpc2lvbi0+aXNvY01lYXN1cmVCYW5kd2lkdGhDb3VudCsrOworCQlyZXR1cm4gZXJyQ29kZTsKKwl9CisJaWYgKCh1c2J2aXNpb24tPmlzb2NQYWNrZXRTaXplID4gMCkgJiYgKHVzYnZpc2lvbi0+aXNvY1BhY2tldENvdW50ID4gMCkpIHsKKwkJdXNidmlzaW9uLT51c2VkQmFuZHdpZHRoID0gdXNidmlzaW9uLT5pc29jRGF0YUNvdW50IC8KKwkJCQkJKHVzYnZpc2lvbi0+aXNvY1BhY2tldENvdW50ICsgdXNidmlzaW9uLT5pc29jU2tpcENvdW50KSAqCisJCQkJCTEwMCAvIHVzYnZpc2lvbi0+aXNvY1BhY2tldFNpemU7CisJfQorCXVzYnZpc2lvbi0+aXNvY01lYXN1cmVCYW5kd2lkdGhDb3VudCA9IDA7CisJdXNidmlzaW9uLT5pc29jRGF0YUNvdW50ID0gMDsKKwl1c2J2aXNpb24tPmlzb2NQYWNrZXRDb3VudCA9IDA7CisJdXNidmlzaW9uLT5pc29jU2tpcENvdW50ID0gMDsKKwlyZXR1cm4gZXJyQ29kZTsKK30KKworc3RhdGljIGludCB1c2J2aXNpb25fYWRqdXN0X2NvbXByZXNzaW9uIChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCWludCBlcnJDb2RlID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2XTsKKworCVBERUJVRyhEQkdfSVJRLCAiIik7CisJaWYgKChhZGp1c3RDb21wcmVzc2lvbikgJiYgKHVzYnZpc2lvbi0+dXNlZEJhbmR3aWR0aCA+IDApKSB7CisJCXVzYnZpc2lvbi0+Y29tcHJMZXZlbCArPSAodXNidmlzaW9uLT51c2VkQmFuZHdpZHRoIC0gOTApIC8gMjsKKwkJUkVTVFJJQ1RfVE9fUkFOR0UodXNidmlzaW9uLT5jb21wckxldmVsLCAwLCAxMDApOworCQlpZiAodXNidmlzaW9uLT5jb21wckxldmVsICE9IHVzYnZpc2lvbi0+bGFzdENvbXByTGV2ZWwpIHsKKwkJCWludCBkaXN0b3JzaW9uOworCQkJaWYgKHVzYnZpc2lvbi0+YnJpZGdlVHlwZSA9PSBCUklER0VfTlQxMDA0IHx8IHVzYnZpc2lvbi0+YnJpZGdlVHlwZSA9PSBCUklER0VfTlQxMDA1KSB7CisJCQkJYnVmZmVyWzBdID0gKHVuc2lnbmVkIGNoYXIpKDQgKyAxNiAqIHVzYnZpc2lvbi0+Y29tcHJMZXZlbCAvIDEwMCk7CS8vIFBDTSBUaHJlc2hvbGQgMQorCQkJCWJ1ZmZlclsxXSA9ICh1bnNpZ25lZCBjaGFyKSg0ICsgOCAqIHVzYnZpc2lvbi0+Y29tcHJMZXZlbCAvIDEwMCk7CS8vIFBDTSBUaHJlc2hvbGQgMgorCQkJCWRpc3RvcnNpb24gPSA3ICsgMjQ4ICogdXNidmlzaW9uLT5jb21wckxldmVsIC8gMTAwOworCQkJCWJ1ZmZlclsyXSA9ICh1bnNpZ25lZCBjaGFyKShkaXN0b3JzaW9uICYgMHhGRik7CQkJCS8vIEF2ZXJhZ2UgZGlzdG9yc2lvbiBUaHJlc2hvbGQgKGludGVyKQorCQkJCWJ1ZmZlclszXSA9ICh1bnNpZ25lZCBjaGFyKShkaXN0b3JzaW9uICYgMHhGRik7CQkJCS8vIEF2ZXJhZ2UgZGlzdG9yc2lvbiBUaHJlc2hvbGQgKGludHJhKQorCQkJCWRpc3RvcnNpb24gPSAxICsgNDIgKiB1c2J2aXNpb24tPmNvbXByTGV2ZWwgLyAxMDA7CisJCQkJYnVmZmVyWzRdID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RvcnNpb24gJiAweEZGKTsJCQkJLy8gTWF4aW11bSBkaXN0b3JzaW9uIFRocmVzaG9sZCAoaW50ZXIpCisJCQkJYnVmZmVyWzVdID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RvcnNpb24gJiAweEZGKTsJCQkJLy8gTWF4aW11bSBkaXN0b3JzaW9uIFRocmVzaG9sZCAoaW50cmEpCisJCQl9CisJCQllbHNlIHsgLy9CUklER0VfTlQxMDAzCisJCQkJYnVmZmVyWzBdID0gKHVuc2lnbmVkIGNoYXIpKDQgKyAxNiAqIHVzYnZpc2lvbi0+Y29tcHJMZXZlbCAvIDEwMCk7CS8vIFBDTSB0aHJlc2hvbGQgMQorCQkJCWJ1ZmZlclsxXSA9ICh1bnNpZ25lZCBjaGFyKSg0ICsgOCAqIHVzYnZpc2lvbi0+Y29tcHJMZXZlbCAvIDEwMCk7CS8vIFBDTSB0aHJlc2hvbGQgMgorCQkJCWRpc3RvcnNpb24gPSAyICsgMjUzICogdXNidmlzaW9uLT5jb21wckxldmVsIC8gMTAwOworCQkJCWJ1ZmZlclsyXSA9ICh1bnNpZ25lZCBjaGFyKShkaXN0b3JzaW9uICYgMHhGRik7CQkJCS8vIGRpc3RvcnNpb24gdGhyZXNob2xkIGJpdDAtNworCQkJCWJ1ZmZlclszXSA9IDA7IAkvLyh1bnNpZ25lZCBjaGFyKSgoZGlzdG9yc2lvbiA+PiA4KSAmIDB4MEYpOwkJLy8gZGlzdG9yc2lvbiB0aHJlc2hvbGQgYml0IDgtMTEKKwkJCQlkaXN0b3JzaW9uID0gMCArIDQzICogdXNidmlzaW9uLT5jb21wckxldmVsIC8gMTAwOworCQkJCWJ1ZmZlcls0XSA9ICh1bnNpZ25lZCBjaGFyKShkaXN0b3JzaW9uICYgMHhGRik7CQkJCS8vIG1heGltdW0gZGlzdG9yc2lvbiBiaXQwLTcKKwkJCQlidWZmZXJbNV0gPSAwOyAvLyh1bnNpZ25lZCBjaGFyKSgoZGlzdG9yc2lvbiA+PiA4KSAmIDB4MDEpOwkJLy8gbWF4aW11bSBkaXN0b3JzaW9uIGJpdCA4CisJCQl9CisJCQllcnJDb2RlID0gdXNidmlzaW9uX3dyaXRlX3JlZ19pcnEodXNidmlzaW9uLCBVU0JWSVNJT05fUENNX1RIUjEsIGJ1ZmZlciwgNik7CisJCQlpZiAoZXJyQ29kZSA9PSAwKXsKKwkJCQlQREVCVUcoREJHX0lSUSwgIm5ldyBjb21wciBwYXJhbXMgJSMwMnggJSMwMnggJSMwMnggJSMwMnggJSMwMnggJSMwMngiLCBidWZmZXJbMF0sCisJCQkJCQkJCWJ1ZmZlclsxXSwgYnVmZmVyWzJdLCBidWZmZXJbM10sIGJ1ZmZlcls0XSwgYnVmZmVyWzVdKTsKKwkJCQl1c2J2aXNpb24tPmxhc3RDb21wckxldmVsID0gdXNidmlzaW9uLT5jb21wckxldmVsOworCQkJfQorCQl9CisJfQorCXJldHVybiBlcnJDb2RlOworfQorCitzdGF0aWMgaW50IHVzYnZpc2lvbl9yZXF1ZXN0X2ludHJhIChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCWludCBlcnJDb2RlID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsKKworCVBERUJVRyhEQkdfSVJRLCAiIik7CisJdXNidmlzaW9uLT5yZXF1ZXN0SW50cmEgPSAxOworCWJ1ZmZlclswXSA9IDE7CisJdXNidmlzaW9uX3dyaXRlX3JlZ19pcnEodXNidmlzaW9uLCBVU0JWSVNJT05fRk9SQ0VfSU5UUkEsIGJ1ZmZlciwgMSk7CisJcmV0dXJuIGVyckNvZGU7Cit9CisKK3N0YXRpYyBpbnQgdXNidmlzaW9uX3VucmVxdWVzdF9pbnRyYSAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwlpbnQgZXJyQ29kZSA9IDA7CisJdW5zaWduZWQgY2hhciBidWZmZXJbMV07CisKKwlQREVCVUcoREJHX0lSUSwgIiIpOworCXVzYnZpc2lvbi0+cmVxdWVzdEludHJhID0gMDsKKwlidWZmZXJbMF0gPSAwOworCXVzYnZpc2lvbl93cml0ZV9yZWdfaXJxKHVzYnZpc2lvbiwgVVNCVklTSU9OX0ZPUkNFX0lOVFJBLCBidWZmZXIsIDEpOworCXJldHVybiBlcnJDb2RlOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdXNidmlzaW9uIHV0aWxpdHkgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IHVzYnZpc2lvbl9wb3dlcl9vZmYoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwlpbnQgZXJyQ29kZSA9IDA7CisKKwlQREVCVUcoREJHX0ZVTkMsICIiKTsKKworCWVyckNvZGUgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1BXUl9SRUcsIFVTQlZJU0lPTl9TU1BORF9FTik7CisJaWYgKGVyckNvZGUgPT0gMSkgeworCQl1c2J2aXNpb24tPnBvd2VyID0gMDsKKwl9CisJUERFQlVHKERCR19GVU5DLCAiJXM6IGVyckNvZGUgJWQiLCAoZXJyQ29kZSE9MSk/IkVSUk9SIjoicG93ZXIgaXMgb2ZmIiwgZXJyQ29kZSk7CisJcmV0dXJuIGVyckNvZGU7Cit9CisKKy8qCisgKiB1c2J2aXNpb25fc2V0X3ZpZGVvX2Zvcm1hdCgpCisgKgorICovCitzdGF0aWMgaW50IHVzYnZpc2lvbl9zZXRfdmlkZW9fZm9ybWF0KHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCBmb3JtYXQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gInVzYnZpc2lvbl9zZXRfdmlkZW9fZm9ybWF0IjsKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciB2YWx1ZVsyXTsKKworCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCisJCXJldHVybiAwOworCisJUERFQlVHKERCR19GVU5DLCAiaXNvY01vZGUgJSMwMngiLCBmb3JtYXQpOworCisJaWYgKChmb3JtYXQgIT0gSVNPQ19NT0RFX1lVVjQyMikKKwkgICAgJiYgKGZvcm1hdCAhPSBJU09DX01PREVfWVVWNDIwKQorCSAgICAmJiAoZm9ybWF0ICE9IElTT0NfTU9ERV9DT01QUkVTUykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2J2aXNpb246IHVua25vd24gdmlkZW8gZm9ybWF0ICUwMngsIHVzaW5nIGRlZmF1bHQgWVVWNDIwIiwKKwkJICAgICAgIGZvcm1hdCk7CisJCWZvcm1hdCA9IElTT0NfTU9ERV9ZVVY0MjA7CisJfQorCXZhbHVlWzBdID0gMHgwQTsgIC8vVE9ETzogU2VlIHRoZSBlZmZlY3Qgb2YgdGhlIGZpbHRlcgorCXZhbHVlWzFdID0gZm9ybWF0OworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHVzYnZpc2lvbi0+ZGV2LCB1c2Jfc25kY3RybHBpcGUodXNidmlzaW9uLT5kZXYsIDEpLAorCQkJICAgICBVU0JWSVNJT05fT1BfQ09ERSwKKwkJCSAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJICAgICBVU0JfUkVDSVBfRU5EUE9JTlQsIDAsCisJCQkgICAgIChfX3UxNikgVVNCVklTSU9OX0ZJTFRfQ09OVCwgdmFsdWUsIDIsIEhaKTsKKworCWlmIChyYyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRVJST1I9JWQuIFVTQlZJU0lPTiBzdG9wcGVkIC0gIgorCQkgICAgICAgInJlY29ubmVjdCBvciByZWxvYWQgZHJpdmVyLlxuIiwgcHJvYywgcmMpOworCX0KKwl1c2J2aXNpb24tPmlzb2NNb2RlID0gZm9ybWF0OworCXJldHVybiByYzsKK30KKworLyoKKyAqIHVzYnZpc2lvbl9zZXRfb3V0cHV0KCkKKyAqCisgKi8KKworaW50IHVzYnZpc2lvbl9zZXRfb3V0cHV0KHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCB3aWR0aCwKKwkJCSBpbnQgaGVpZ2h0KQoreworCWludCBlcnJDb2RlID0gMDsKKwlpbnQgVXNiV2lkdGgsIFVzYkhlaWdodDsKKwl1bnNpZ25lZCBpbnQgZnJhbWVSYXRlPTAsIGZyYW1lRHJvcD0wOworCXVuc2lnbmVkIGNoYXIgdmFsdWVbNF07CisKKwlpZiAoIVVTQlZJU0lPTl9JU19PUEVSQVRJT05BTCh1c2J2aXNpb24pKSB7CisJCXJldHVybiAwOworCX0KKworCWlmICh3aWR0aCA+IE1BWF9VU0JfV0lEVEgpIHsKKwkJVXNiV2lkdGggPSB3aWR0aCAvIDI7CisJCXVzYnZpc2lvbi0+c3RyZXRjaF93aWR0aCA9IDI7CisJfQorCWVsc2UgeworCQlVc2JXaWR0aCA9IHdpZHRoOworCQl1c2J2aXNpb24tPnN0cmV0Y2hfd2lkdGggPSAxOworCX0KKworCWlmIChoZWlnaHQgPiBNQVhfVVNCX0hFSUdIVCkgeworCQlVc2JIZWlnaHQgPSBoZWlnaHQgLyAyOworCQl1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0ID0gMjsKKwl9CisJZWxzZSB7CisJCVVzYkhlaWdodCA9IGhlaWdodDsKKwkJdXNidmlzaW9uLT5zdHJldGNoX2hlaWdodCA9IDE7CisJfQorCisJUkVTVFJJQ1RfVE9fUkFOR0UoVXNiV2lkdGgsIE1JTl9GUkFNRV9XSURUSCwgTUFYX1VTQl9XSURUSCk7CisJVXNiV2lkdGggJj0gfihNSU5fRlJBTUVfV0lEVEgtMSk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoVXNiSGVpZ2h0LCBNSU5fRlJBTUVfSEVJR0hULCBNQVhfVVNCX0hFSUdIVCk7CisJVXNiSGVpZ2h0ICY9IH4oMSk7CisKKwlQREVCVUcoREJHX0ZVTkMsICJ1c2IgJWR4JWQ7IHNjcmVlbiAlZHglZDsgc3RyZXRjaCAlZHglZCIsCisJCQkJCQlVc2JXaWR0aCwgVXNiSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LAorCQkJCQkJdXNidmlzaW9uLT5zdHJldGNoX3dpZHRoLCB1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0KTsKKworCS8qIEknbGwgbm90IHJld3JpdGUgdGhlIHNhbWUgdmFsdWVzICovCisJaWYgKChVc2JXaWR0aCAhPSB1c2J2aXNpb24tPmN1cndpZHRoKSB8fCAoVXNiSGVpZ2h0ICE9IHVzYnZpc2lvbi0+Y3VyaGVpZ2h0KSkgeworCQl2YWx1ZVswXSA9IFVzYldpZHRoICYgMHhmZjsJCS8vTFNCCisJCXZhbHVlWzFdID0gKFVzYldpZHRoID4+IDgpICYgMHgwMzsJLy9NU0IKKwkJdmFsdWVbMl0gPSBVc2JIZWlnaHQgJiAweGZmOwkJLy9MU0IKKwkJdmFsdWVbM10gPSAoVXNiSGVpZ2h0ID4+IDgpICYgMHgwMzsJLy9NU0IKKworCQllcnJDb2RlID0gdXNiX2NvbnRyb2xfbXNnKHVzYnZpc2lvbi0+ZGV2LCB1c2Jfc25kY3RybHBpcGUodXNidmlzaW9uLT5kZXYsIDEpLAorCQkJICAgICBVU0JWSVNJT05fT1BfQ09ERSwKKwkJCSAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkJIDAsIChfX3UxNikgVVNCVklTSU9OX0xYU0laRV9PLCB2YWx1ZSwgNCwgSFopOworCisJCWlmIChlcnJDb2RlIDwgMCkgeworCQkJZXJyKCIlcyBmYWlsZWQ6IGVycm9yICVkIiwgX19GVU5DVElPTl9fLCBlcnJDb2RlKTsKKwkJCXJldHVybiBlcnJDb2RlOworCQl9CisJCXVzYnZpc2lvbi0+Y3Vyd2lkdGggPSB1c2J2aXNpb24tPnN0cmV0Y2hfd2lkdGggKiBVc2JXaWR0aDsKKwkJdXNidmlzaW9uLT5jdXJoZWlnaHQgPSB1c2J2aXNpb24tPnN0cmV0Y2hfaGVpZ2h0ICogVXNiSGVpZ2h0OworCX0KKworCWlmICh1c2J2aXNpb24tPmlzb2NNb2RlID09IElTT0NfTU9ERV9ZVVY0MjIpIHsKKwkJZnJhbWVSYXRlID0gKHVzYnZpc2lvbi0+aXNvY1BhY2tldFNpemUgKiAxMDAwKSAvIChVc2JXaWR0aCAqIFVzYkhlaWdodCAqIDIpOworCX0KKwllbHNlIGlmICh1c2J2aXNpb24tPmlzb2NNb2RlID09IElTT0NfTU9ERV9ZVVY0MjApIHsKKwkJZnJhbWVSYXRlID0gKHVzYnZpc2lvbi0+aXNvY1BhY2tldFNpemUgKiAxMDAwKSAvICgoVXNiV2lkdGggKiBVc2JIZWlnaHQgKiAxMikgLyA4KTsKKwl9CisJZWxzZSB7CisJCWZyYW1lUmF0ZSA9IEZSQU1FUkFURV9NQVg7CisJfQorCisJaWYgKHVzYnZpc2lvbi0+dHZub3JtLT5pZCAmIFY0TDJfU1REXzYyNV81MCkgeworCQlmcmFtZURyb3AgPSBmcmFtZVJhdGUgKiAzMiAvIDI1IC0gMTsKKwl9CisJZWxzZSBpZiAodXNidmlzaW9uLT50dm5vcm0tPmlkICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCWZyYW1lRHJvcCA9IGZyYW1lUmF0ZSAqIDMyIC8gMzAgLSAxOworCX0KKworCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lRHJvcCwgRlJBTUVSQVRFX01JTiwgRlJBTUVSQVRFX01BWCk7CisKKwlQREVCVUcoREJHX0ZVTkMsICJmcmFtZVJhdGUgJWQgZnBzLCBmcmFtZURyb3AgJWQiLCBmcmFtZVJhdGUsIGZyYW1lRHJvcCk7CisKKwlmcmFtZURyb3AgPSBGUkFNRVJBVEVfTUFYOyAJLy8gV2UgY2FuIGFsbG93IHRoZSBtYXhpbXVtIGhlcmUsIGJlY2F1c2UgZHJvcHBpbmcgaXMgY29udHJvbGxlZAorCisJLyogZnJhbWVEcm9wID0gNzsgPT4gZnJhbWVQaGFzZSA9IDEsIDUsIDksIDEzLCAxNywgMjEsIDI1LCAwLCA0LCA4LCAuLi4KKwkJPT4gZnJhbWVTa2lwID0gNDsKKwkJPT4gZnJhbWVSYXRlID0gKDcgKyAxKSAqIDI1IC8gMzIgPSAyMDAgLyAzMiA9IDYuMjU7CisKKwkgICBmcmFtZURyb3AgPSA5OyA9PiBmcmFtZVBoYXNlID0gMSwgNSwgOCwgMTEsIDE0LCAxNywgMjEsIDI0LCAyNywgMSwgNCwgOCwgLi4uCisJICAgID0+IGZyYW1lU2tpcCA9IDQsIDMsIDMsIDMsIDMsIDQsIDMsIDMsIDMsIDMsIDQsIC4uLgorCQk9PiBmcmFtZVJhdGUgPSAoOSArIDEpICogMjUgLyAzMiA9IDI1MCAvIDMyID0gNy44MTI1OworCSovCisJZXJyQ29kZSA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fRlJNX1JBVEUsIGZyYW1lRHJvcCk7CisJcmV0dXJuIGVyckNvZGU7Cit9CisKKworLyoKKyAqIHVzYnZpc2lvbl9mcmFtZXNfYWxsb2MKKyAqIGFsbG9jYXRlIHRoZSBtYXhpbXVtIGZyYW1lcyB0aGlzIGRyaXZlciBjYW4gbWFuYWdlCisgKi8KK2ludCB1c2J2aXNpb25fZnJhbWVzX2FsbG9jKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCit7CisJaW50IGk7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmcmFtZSBidWZmZXJzICovCisJdXNidmlzaW9uLT5tYXhfZnJhbWVfc2l6ZSA9IE1BWF9GUkFNRV9TSVpFOworCXVzYnZpc2lvbi0+ZmJ1Zl9zaXplID0gVVNCVklTSU9OX05VTUZSQU1FUyAqIHVzYnZpc2lvbi0+bWF4X2ZyYW1lX3NpemU7CisJdXNidmlzaW9uLT5mYnVmID0gdXNidmlzaW9uX3J2bWFsbG9jKHVzYnZpc2lvbi0+ZmJ1Zl9zaXplKTsKKworCWlmKHVzYnZpc2lvbi0+ZmJ1ZiA9PSBOVUxMKSB7CisJCWVycigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgZmJ1ZiAiLAorCQkgICAgX19GVU5DVElPTl9fLCB1c2J2aXNpb24tPmZidWZfc2l6ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzcGluX2xvY2tfaW5pdCgmdXNidmlzaW9uLT5xdWV1ZV9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1c2J2aXNpb24tPndhaXRfZnJhbWUpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVzYnZpc2lvbi0+d2FpdF9zdHJlYW0pOworCisJLyogQWxsb2NhdGUgYWxsIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVVNCVklTSU9OX05VTUZSQU1FUzsgaSsrKSB7CisJCXVzYnZpc2lvbi0+ZnJhbWVbaV0uaW5kZXggPSBpOworCQl1c2J2aXNpb24tPmZyYW1lW2ldLmdyYWJzdGF0ZSA9IEZyYW1lU3RhdGVfVW51c2VkOworCQl1c2J2aXNpb24tPmZyYW1lW2ldLmRhdGEgPSB1c2J2aXNpb24tPmZidWYgKworCQkJaSAqIHVzYnZpc2lvbi0+bWF4X2ZyYW1lX3NpemU7CisJCS8qCisJCSAqIFNldCBkZWZhdWx0IHNpemVzIGZvciByZWFkIG9wZXJhdGlvbi4KKwkJICovCisJCXVzYnZpc2lvbi0+c3RyZXRjaF93aWR0aCA9IDE7CisJCXVzYnZpc2lvbi0+c3RyZXRjaF9oZWlnaHQgPSAxOworCQl1c2J2aXNpb24tPmZyYW1lW2ldLndpZHRoID0gdXNidmlzaW9uLT5jdXJ3aWR0aDsKKwkJdXNidmlzaW9uLT5mcmFtZVtpXS5oZWlnaHQgPSB1c2J2aXNpb24tPmN1cmhlaWdodDsKKwkJdXNidmlzaW9uLT5mcmFtZVtpXS5ieXRlc19yZWFkID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1c2J2aXNpb25fZnJhbWVzX2ZyZWUKKyAqIGZyZWVzIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBmcmFtZXMKKyAqLwordm9pZCB1c2J2aXNpb25fZnJhbWVzX2ZyZWUoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwkvKiBIYXZlIHRvIGZyZWUgYWxsIHRoYXQgbWVtb3J5ICovCisJaWYgKHVzYnZpc2lvbi0+ZmJ1ZiAhPSBOVUxMKSB7CisJCXVzYnZpc2lvbl9ydmZyZWUodXNidmlzaW9uLT5mYnVmLCB1c2J2aXNpb24tPmZidWZfc2l6ZSk7CisJCXVzYnZpc2lvbi0+ZmJ1ZiA9IE5VTEw7CisJfQorfQorLyoKKyAqIHVzYnZpc2lvbl9lbXB0eV9mcmFtZXF1ZXVlcygpCisgKiBwcmVwYXJlIHF1ZXVlcyBmb3IgaW5jb21pbmcgYW5kIG91dGdvaW5nIGZyYW1lcworICovCit2b2lkIHVzYnZpc2lvbl9lbXB0eV9mcmFtZXF1ZXVlcyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCXUzMiBpOworCisJSU5JVF9MSVNUX0hFQUQoJih1c2J2aXNpb24tPmlucXVldWUpKTsKKwlJTklUX0xJU1RfSEVBRCgmKHVzYnZpc2lvbi0+b3V0cXVldWUpKTsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JWSVNJT05fTlVNRlJBTUVTOyBpKyspIHsKKwkJdXNidmlzaW9uLT5mcmFtZVtpXS5ncmFic3RhdGUgPSBGcmFtZVN0YXRlX1VudXNlZDsKKwkJdXNidmlzaW9uLT5mcmFtZVtpXS5ieXRlc19yZWFkID0gMDsKKwl9Cit9CisKKy8qCisgKiB1c2J2aXNpb25fc3RyZWFtX2ludGVycnVwdCgpCisgKiBzdG9wcyBzdHJlYW1pbmcKKyAqLworaW50IHVzYnZpc2lvbl9zdHJlYW1faW50ZXJydXB0KHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCit7CisJaW50IHJldCA9IDA7CisKKwkvKiBzdG9wIHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisKKwl1c2J2aXNpb24tPnN0cmVhbWluZyA9IFN0cmVhbV9JbnRlcnJ1cHQ7CisJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KHVzYnZpc2lvbi0+d2FpdF9zdHJlYW0sCisJCQkJICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fSWRsZSksCisJCQkJIG1zZWNzX3RvX2ppZmZpZXMoVVNCVklTSU9OX05VTVNCVUYqVVNCVklTSU9OX1VSQl9GUkFNRVMpKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogdXNidmlzaW9uX3NldF9jb21wcmVzc19wYXJhbXMoKQorICoKKyAqLworCitzdGF0aWMgaW50IHVzYnZpc2lvbl9zZXRfY29tcHJlc3NfcGFyYW1zKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gInVzYnZpc2lvbl9zZXRfY29tcHJlc2lvbl9wYXJhbXM6ICI7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgdmFsdWVbNl07CisKKwl2YWx1ZVswXSA9IDB4MEY7ICAgIC8vIEludHJhLUNvbXByZXNzaW9uIGN5Y2xlCisJdmFsdWVbMV0gPSAweDAxOyAgICAvLyBSZWcuNDUgb25lIGxpbmUgcGVyIHN0cmlwCisJdmFsdWVbMl0gPSAweDAwOyAgICAvLyBSZWcuNDYgRm9yY2UgaW50cmEgbW9kZSBvbiBhbGwgbmV3IGZyYW1lcworCXZhbHVlWzNdID0gMHgwMDsgICAgLy8gUmVnLjQ3IEZPUkNFX1VQIDwtIDAgbm9ybWFsIG9wZXJhdGlvbiAobm90IGZvcmNlKQorCXZhbHVlWzRdID0gMHhBMjsgICAgLy8gUmVnLjQ4IEJVRl9USFIgSSdtIG5vdCBzdXJlIGlmIHRoaXMgZG9lcyBzb21ldGhpbmcgaW4gbm90IGNvbXByZXNzZWQgbW9kZS4KKwl2YWx1ZVs1XSA9IDB4MDA7ICAgIC8vIFJlZy40OSBEVklfWVVWIFRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjb21wcmVzc2lvbgorCisJLy9jYXRjaGVkIHZhbHVlcyBmb3IgTlQxMDA0CisJLy8gdmFsdWVbMF0gPSAweEZGOyAvLyBOZXZlciBhcHBseSBpbnRyYSBtb2RlIGF1dG9tYXRpY2FsbHkKKwkvLyB2YWx1ZVsxXSA9IDB4RjE7IC8vIFVzZSBmdWxsIGZyYW1lIGhlaWdodCBmb3IgdmlydHVhbCBzdHJpcCB3aWR0aDsgT25lIGxpbmUgcGVyIHN0cmlwCisJLy8gdmFsdWVbMl0gPSAweDAxOyAvLyBGb3JjZSBpbnRyYSBtb2RlIG9uIGFsbCBuZXcgZnJhbWVzCisJLy8gdmFsdWVbM10gPSAweDAwOyAvLyBTdHJpcCBzaXplIDQwMCBCeXRlczsgZG8gbm90IGZvcmNlIHVwCisJLy8gdmFsdWVbNF0gPSAweEEyOyAvLworCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCisJCXJldHVybiAwOworCisJcmMgPSB1c2JfY29udHJvbF9tc2codXNidmlzaW9uLT5kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2J2aXNpb24tPmRldiwgMSksCisJCQkgICAgIFVTQlZJU0lPTl9PUF9DT0RFLAorCQkJICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8CisJCQkgICAgIFVTQl9SRUNJUF9FTkRQT0lOVCwgMCwKKwkJCSAgICAgKF9fdTE2KSBVU0JWSVNJT05fSU5UUkFfQ1lDLCB2YWx1ZSwgNSwgSFopOworCisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzRVJST1I9JWQuIFVTQlZJU0lPTiBzdG9wcGVkIC0gIgorCQkgICAgICAgInJlY29ubmVjdCBvciByZWxvYWQgZHJpdmVyLlxuIiwgcHJvYywgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJaWYgKHVzYnZpc2lvbi0+YnJpZGdlVHlwZSA9PSBCUklER0VfTlQxMDA0KSB7CisJCXZhbHVlWzBdID0gIDIwOyAvLyBQQ00gVGhyZXNob2xkIDEKKwkJdmFsdWVbMV0gPSAgMTI7IC8vIFBDTSBUaHJlc2hvbGQgMgorCQl2YWx1ZVsyXSA9IDI1NTsgLy8gRGlzdG9yc2lvbiBUaHJlc2hvbGQgaW50ZXIKKwkJdmFsdWVbM10gPSAyNTU7IC8vIERpc3RvcnNpb24gVGhyZXNob2xkIGludHJhCisJCXZhbHVlWzRdID0gIDQzOyAvLyBNYXggRGlzdG9yc2lvbiBpbnRlcgorCQl2YWx1ZVs1XSA9ICA0MzsgLy8gTWF4IERpc3RvcnNpb24gaW50cmEKKwl9CisJZWxzZSB7CisJCXZhbHVlWzBdID0gIDIwOyAvLyBQQ00gVGhyZXNob2xkIDEKKwkJdmFsdWVbMV0gPSAgMTI7IC8vIFBDTSBUaHJlc2hvbGQgMgorCQl2YWx1ZVsyXSA9IDI1NTsgLy8gRGlzdG9yc2lvbiBUaHJlc2hvbGQgZDctZDAKKwkJdmFsdWVbM10gPSAgIDA7IC8vIERpc3RvcnNpb24gVGhyZXNob2xkIGQxMS1kOAorCQl2YWx1ZVs0XSA9ICA0MzsgLy8gTWF4IERpc3RvcnNpb24gZDctZDAKKwkJdmFsdWVbNV0gPSAgIDA7IC8vIE1heCBEaXN0b3JzaW9uIGQ4CisJfQorCisJaWYgKCFVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodXNidmlzaW9uKSkKKwkJcmV0dXJuIDA7CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyh1c2J2aXNpb24tPmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYnZpc2lvbi0+ZGV2LCAxKSwKKwkJCSAgICAgVVNCVklTSU9OX09QX0NPREUsCisJCQkgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwKKwkJCSAgICAgVVNCX1JFQ0lQX0VORFBPSU5ULCAwLAorCQkJICAgICAoX191MTYpIFVTQlZJU0lPTl9QQ01fVEhSMSwgdmFsdWUsIDYsIEhaKTsKKworCWlmIChyYyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlc0VSUk9SPSVkLiBVU0JWSVNJT04gc3RvcHBlZCAtICIKKwkJICAgICAgICJyZWNvbm5lY3Qgb3IgcmVsb2FkIGRyaXZlci5cbiIsIHByb2MsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCisJcmV0dXJuIHJjOworfQorCisKKy8qCisgKiB1c2J2aXNpb25fc2V0X2lucHV0KCkKKyAqCisgKiBTZXQgdGhlIGlucHV0IChzYWE3MTF4LCAuLi4pIHNpemUgeCB5IGFuZCBvdGhlciBtaXNjIGlucHV0IHBhcmFtcworICogSSd2ZSBubyBpZGVhIGlmIHRoaXMgcGFyYW1ldGVycyBhcmUgcmlnaHQKKyAqCisgKi8KK2ludCB1c2J2aXNpb25fc2V0X2lucHV0KHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gInVzYnZpc2lvbl9zZXRfaW5wdXQ6ICI7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgdmFsdWVbOF07CisJdW5zaWduZWQgY2hhciBkdmlfeXV2X3ZhbHVlOworCisJaWYgKCFVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodXNidmlzaW9uKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBTZXQgaW5wdXQgZm9ybWF0IGV4cGVjdGVkIGZyb20gZGVjb2RlciovCisJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5WaW5fUmVnMSA+PSAwKSB7CisJCXZhbHVlWzBdID0gdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlZpbl9SZWcxICYgMHhmZjsKKwl9IGVsc2UgaWYodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLkNvZGVjID09IENPREVDX1NBQTcxMTMpIHsKKwkJLyogU0FBNzExMyB1c2VzIDggYml0IG91dHB1dCAqLworCQl2YWx1ZVswXSA9IFVTQlZJU0lPTl84XzQyMl9TWU5DOworCX0gZWxzZSB7CisJCS8qIEknbSBzdXJlIG9ubHkgYWJvdXQgZDItZDAgWzAxMF0gMTYgYml0IDQ6MjoyIHVzaW4gc3luYyBwdWxzZXMKKwkJICogYXMgdGhhdCBpcyBob3cgc2FhNzExMSBpcyBjb25maWd1cmVkICovCisJCXZhbHVlWzBdID0gVVNCVklTSU9OXzE2XzQyMl9TWU5DOworCQkvKiB8IFVTQlZJU0lPTl9WU05DX1BPTCB8IFVTQlZJU0lPTl9WQ0xLX1BPTCk7Ki8KKwl9CisKKwlyYyA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fVklOX1JFRzEsIHZhbHVlWzBdKTsKKwlpZiAocmMgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXNFUlJPUj0lZC4gVVNCVklTSU9OIHN0b3BwZWQgLSAiCisJCSAgICAgICAicmVjb25uZWN0IG9yIHJlbG9hZCBkcml2ZXIuXG4iLCBwcm9jLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKworCWlmICh1c2J2aXNpb24tPnR2bm9ybS0+aWQgJiBWNEwyX1NURF9QQUwpIHsKKwkJdmFsdWVbMF0gPSAweEMwOworCQl2YWx1ZVsxXSA9IDB4MDI7CS8vMHgwMkMwIC0+IDcwNCBJbnB1dCB2aWRlbyBsaW5lIGxlbmd0aAorCQl2YWx1ZVsyXSA9IDB4MjA7CisJCXZhbHVlWzNdID0gMHgwMTsJLy8weDAxMjAgLT4gMjg4IElucHV0IHZpZGVvIG4uIG9mIGxpbmVzCisJCXZhbHVlWzRdID0gMHg2MDsKKwkJdmFsdWVbNV0gPSAweDAwOwkvLzB4MDA2MCAtPiA5NiBJbnB1dCB2aWRlbyBoIG9mZnNldAorCQl2YWx1ZVs2XSA9IDB4MTY7CisJCXZhbHVlWzddID0gMHgwMDsJLy8weDAwMTYgLT4gMjIgSW5wdXQgdmlkZW8gdiBvZmZzZXQKKwl9IGVsc2UgaWYgKHVzYnZpc2lvbi0+dHZub3JtLT5pZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCXZhbHVlWzBdID0gMHhDMDsKKwkJdmFsdWVbMV0gPSAweDAyOwkvLzB4MDJDMCAtPiA3MDQgSW5wdXQgdmlkZW8gbGluZSBsZW5ndGgKKwkJdmFsdWVbMl0gPSAweDIwOworCQl2YWx1ZVszXSA9IDB4MDE7CS8vMHgwMTIwIC0+IDI4OCBJbnB1dCB2aWRlbyBuLiBvZiBsaW5lcworCQl2YWx1ZVs0XSA9IDB4MDE7CisJCXZhbHVlWzVdID0gMHgwMDsJLy8weDAwMDEgLT4gMDEgSW5wdXQgdmlkZW8gaCBvZmZzZXQKKwkJdmFsdWVbNl0gPSAweDAxOworCQl2YWx1ZVs3XSA9IDB4MDA7CS8vMHgwMDAxIC0+IDAxIElucHV0IHZpZGVvIHYgb2Zmc2V0CisJfSBlbHNlIHsJLyogVjRMMl9TVERfTlRTQyAqLworCQl2YWx1ZVswXSA9IDB4RDA7CisJCXZhbHVlWzFdID0gMHgwMjsJLy8weDAyRDAgLT4gNzIwIElucHV0IHZpZGVvIGxpbmUgbGVuZ3RoCisJCXZhbHVlWzJdID0gMHhGMDsKKwkJdmFsdWVbM10gPSAweDAwOwkvLzB4MDBGMCAtPiAyNDAgSW5wdXQgdmlkZW8gbnVtYmVyIG9mIGxpbmVzCisJCXZhbHVlWzRdID0gMHg1MDsKKwkJdmFsdWVbNV0gPSAweDAwOwkvLzB4MDA1MCAtPiA4MCBJbnB1dCB2aWRlbyBoIG9mZnNldAorCQl2YWx1ZVs2XSA9IDB4MTA7CisJCXZhbHVlWzddID0gMHgwMDsJLy8weDAwMTAgLT4gMTYgSW5wdXQgdmlkZW8gdiBvZmZzZXQKKwl9CisKKwlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlhfT2Zmc2V0ID49IDApIHsKKwkJdmFsdWVbNF09dXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlhfT2Zmc2V0ICYgMHhmZjsKKwkJdmFsdWVbNV09KHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5YX09mZnNldCAmIDB4MDMwMCkgPj4gODsKKwl9CisKKwlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLllfT2Zmc2V0ID49IDApIHsKKwkJdmFsdWVbNl09dXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLllfT2Zmc2V0ICYgMHhmZjsKKwkJdmFsdWVbN109KHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5ZX09mZnNldCAmIDB4MDMwMCkgPj4gODsKKwl9CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyh1c2J2aXNpb24tPmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYnZpc2lvbi0+ZGV2LCAxKSwKKwkJCSAgICAgVVNCVklTSU9OX09QX0NPREUsCS8qIFVTQlZJU0lPTiBzcGVjaWZpYyBjb2RlICovCisJCQkgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5ULCAwLAorCQkJICAgICAoX191MTYpIFVTQlZJU0lPTl9MWFNJWkVfSSwgdmFsdWUsIDgsIEhaKTsKKwlpZiAocmMgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXNFUlJPUj0lZC4gVVNCVklTSU9OIHN0b3BwZWQgLSAiCisJCSAgICAgICAicmVjb25uZWN0IG9yIHJlbG9hZCBkcml2ZXIuXG4iLCBwcm9jLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKworCWR2aV95dXZfdmFsdWUgPSAweDAwOwkvKiBVIGNvbWVzIGFmdGVyIFYsIFlhIGNvbWVzIGFmdGVyIFUvViwgWWIgY29tZXMgYWZ0ZXIgWWIgKi8KKworCWlmKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5EdmlfeXV2ID49IDApeworCQlkdmlfeXV2X3ZhbHVlID0gdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLkR2aV95dXYgJiAweGZmOworCX0KKwllbHNlIGlmKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5Db2RlYyA9PSBDT0RFQ19TQUE3MTEzKSB7CisJLyogVGhpcyBjaGFuZ2VzIGFzIHRoZSBmaW5lIHN5bmMgY29udHJvbCBjaGFuZ2VzLiBGdXJ0aGVyIGludmVzdGlnYXRpb24gbmVjZXNzYXJ5ICovCisJCWR2aV95dXZfdmFsdWUgPSAweDA2OworCX0KKworCXJldHVybiAodXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9EVklfWVVWLCBkdmlfeXV2X3ZhbHVlKSk7Cit9CisKKworLyoKKyAqIHVzYnZpc2lvbl9zZXRfZHJhbV9zZXR0aW5ncygpCisgKgorICogU2V0IHRoZSBidWZmZXIgYWRkcmVzcyBuZWVkZWQgYnkgdGhlIHVzYnZpc2lvbiBkcmFtIHRvIG9wZXJhdGUKKyAqIFRoaXMgdmFsdWVzIGhhcyBiZWVuIHRha2VuIHdpdGggdXNic25vb3AuCisgKgorICovCisKK3N0YXRpYyBpbnQgdXNidmlzaW9uX3NldF9kcmFtX3NldHRpbmdzKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCit7CisJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgdmFsdWVbOF07CisKKwlpZiAodXNidmlzaW9uLT5pc29jTW9kZSA9PSBJU09DX01PREVfQ09NUFJFU1MpIHsKKwkJdmFsdWVbMF0gPSAweDQyOworCQl2YWx1ZVsxXSA9IDB4NzE7CisJCXZhbHVlWzJdID0gMHhmZjsKKwkJdmFsdWVbM10gPSAweDAwOworCQl2YWx1ZVs0XSA9IDB4OTg7CisJCXZhbHVlWzVdID0gMHhlMDsKKwkJdmFsdWVbNl0gPSAweDcxOworCQl2YWx1ZVs3XSA9IDB4ZmY7CisJCS8vIFVSOiAgMHgwRTIwMC0weDNGRkZGID0gMjA0Mjg4IFdvcmRzICgxIFdvcmQgPSAyIEJ5dGUpCisJCS8vIEZETDogMHgwMDAwMC0weDBFMDk5ID0gIDU3NDk4IFdvcmRzCisJCS8vIFZEVzogMHgwRTNGRi0weDNGRkZGCisJfQorCWVsc2UgeworCQl2YWx1ZVswXSA9IDB4NDI7CisJCXZhbHVlWzFdID0gMHgwMDsKKwkJdmFsdWVbMl0gPSAweGZmOworCQl2YWx1ZVszXSA9IDB4MDA7CisJCXZhbHVlWzRdID0gMHgwMDsKKwkJdmFsdWVbNV0gPSAweDAwOworCQl2YWx1ZVs2XSA9IDB4MDA7CisJCXZhbHVlWzddID0gMHhmZjsKKwl9CisJLyogVGhlc2UgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlIGFkZHJlc3Mgb2YgdGhlIHZpZGVvIGJ1ZmZlciwKKwkgKiB0aGV5IGhhdmUgdG8gYmUgbG9hZGVkIGludG8gdGhlIFVTQlZJU0lPTl9EUk1fUFJNMS04CisJICoKKwkgKiBTdGFydCBhZGRyZXNzIG9mIHZpZGVvIG91dHB1dCBidWZmZXIgZm9yIHJlYWQ6IAlkcm1fcHJtMS0yIC0+IDB4MDAwMDAKKwkgKiBFbmQgYWRkcmVzcyBvZiB2aWRlbyBvdXRwdXQgYnVmZmVyIGZvciByZWFkOiAJZHJtX3BybTEtMyAtPiAweDFmZmZmCisJICogU3RhcnQgYWRkcmVzcyBvZiB2aWRlbyBmcmFtZSBkZWxheSBidWZmZXI6IAkJZHJtX3BybTEtNCAtPiAweDIwMDAwCisJICogICAgT25seSB1c2VkIGluIGNvbXByZXNzZWQgbW9kZQorCSAqIEVuZCBhZGRyZXNzIG9mIHZpZGVvIGZyYW1lIGRlbGF5IGJ1ZmZlcjogCQlkcm1fcHJtMS01LTYgLT4gMHgzZmZmZgorCSAqICAgIE9ubHkgdXNlZCBpbiBjb21wcmVzc2VkIG1vZGUKKwkgKiBTdGFydCBhZGRyZXNzIG9mIHZpZGVvIG91dHB1dCBidWZmZXIgZm9yIHdyaXRlOiAJZHJtX3BybTEtNyAtPiAweDAwMDAwCisJICogRW5kIGFkZHJlc3Mgb2YgdmlkZW8gb3V0cHV0IGJ1ZmZlciBmb3Igd3JpdGU6IAlkcm1fcHJtMS04IC0+IDB4MWZmZmYKKwkgKi8KKworCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCisJCXJldHVybiAwOworCisJcmMgPSB1c2JfY29udHJvbF9tc2codXNidmlzaW9uLT5kZXYsIHVzYl9zbmRjdHJscGlwZSh1c2J2aXNpb24tPmRldiwgMSksCisJCQkgICAgIFVTQlZJU0lPTl9PUF9DT0RFLAkvKiBVU0JWSVNJT04gc3BlY2lmaWMgY29kZSAqLworCQkJICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8CisJCQkgICAgIFVTQl9SRUNJUF9FTkRQT0lOVCwgMCwKKwkJCSAgICAgKF9fdTE2KSBVU0JWSVNJT05fRFJNX1BSTTEsIHZhbHVlLCA4LCBIWik7CisKKwlpZiAocmMgPCAwKSB7CisJCWVycigiJXNFUlJPUj0lZCIsIF9fRlVOQ1RJT05fXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogUmVzdGFydCB0aGUgdmlkZW8gYnVmZmVyIGxvZ2ljICovCisJaWYgKChyYyA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fRFJNX0NPTlQsIFVTQlZJU0lPTl9SRVNfVVIgfAorCQkJCSAgIFVTQlZJU0lPTl9SRVNfRkRMIHwgVVNCVklTSU9OX1JFU19WRFcpKSA8IDApCisJCXJldHVybiByYzsKKwlyYyA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fRFJNX0NPTlQsIDB4MDApOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogKCkKKyAqCisgKiBQb3dlciBvbiB0aGUgZGV2aWNlLCBlbmFibGVzIHN1c3BlbmQtcmVzdW1lIGxvZ2ljCisgKiAmICByZXNldCB0aGUgaXNvYyBFbmQtUG9pbnQKKyAqCisgKi8KKworaW50IHVzYnZpc2lvbl9wb3dlcl9vbihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCWludCBlcnJDb2RlID0gMDsKKworCVBERUJVRyhEQkdfRlVOQywgIiIpOworCisJdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9QV1JfUkVHLCBVU0JWSVNJT05fU1NQTkRfRU4pOworCXVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fUFdSX1JFRywKKwkJCSBVU0JWSVNJT05fU1NQTkRfRU4gfCBVU0JWSVNJT05fUkVTMik7CisKKwl1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1BXUl9SRUcsCisJCQkgVVNCVklTSU9OX1NTUE5EX0VOIHwgVVNCVklTSU9OX1BXUl9WSUQpOworCWVyckNvZGUgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1BXUl9SRUcsCisJCQkJCQlVU0JWSVNJT05fU1NQTkRfRU4gfCBVU0JWSVNJT05fUFdSX1ZJRCB8IFVTQlZJU0lPTl9SRVMyKTsKKwlpZiAoZXJyQ29kZSA9PSAxKSB7CisJCXVzYnZpc2lvbi0+cG93ZXIgPSAxOworCX0KKwlQREVCVUcoREJHX0ZVTkMsICIlczogZXJyQ29kZSAlZCIsIChlcnJDb2RlPDApPyJFUlJPUiI6InBvd2VyIGlzIG9uIiwgZXJyQ29kZSk7CisJcmV0dXJuIGVyckNvZGU7Cit9CisKKworLyoKKyAqIHVzYnZpc2lvbiB0aW1lciBzdHVmZgorICovCisKKy8vIHRvIGNhbGwgdXNidmlzaW9uX3Bvd2VyX29mZiBmcm9tIHRhc2sgcXVldWUKK3N0YXRpYyB2b2lkIGNhbGxfdXNidmlzaW9uX3Bvd2VyX29mZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX3VzYnZpc2lvbiwgcG93ZXJPZmZXb3JrKTsKKworCVBERUJVRyhEQkdfRlVOQywgIiIpOworCWRvd25faW50ZXJydXB0aWJsZSgmdXNidmlzaW9uLT5sb2NrKTsKKwlpZih1c2J2aXNpb24tPnVzZXIgPT0gMCkgeworCQl1c2J2aXNpb25faTJjX3VzYl9kZWxfYnVzKCZ1c2J2aXNpb24tPmkyY19hZGFwKTsKKworCQl1c2J2aXNpb25fcG93ZXJfb2ZmKHVzYnZpc2lvbik7CisJCXVzYnZpc2lvbi0+aW5pdGlhbGl6ZWQgPSAwOworCX0KKwl1cCgmdXNidmlzaW9uLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdXNidmlzaW9uX3Bvd2VyT2ZmVGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSAodm9pZCAqKSBkYXRhOworCisJUERFQlVHKERCR19GVU5DLCAiIik7CisJZGVsX3RpbWVyKCZ1c2J2aXNpb24tPnBvd2VyT2ZmVGltZXIpOworCUlOSVRfV09SSygmdXNidmlzaW9uLT5wb3dlck9mZldvcmssIGNhbGxfdXNidmlzaW9uX3Bvd2VyX29mZik7CisJKHZvaWQpIHNjaGVkdWxlX3dvcmsoJnVzYnZpc2lvbi0+cG93ZXJPZmZXb3JrKTsKKworfQorCit2b2lkIHVzYnZpc2lvbl9pbml0X3Bvd2VyT2ZmVGltZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwlpbml0X3RpbWVyKCZ1c2J2aXNpb24tPnBvd2VyT2ZmVGltZXIpOworCXVzYnZpc2lvbi0+cG93ZXJPZmZUaW1lci5kYXRhID0gKGxvbmcpIHVzYnZpc2lvbjsKKwl1c2J2aXNpb24tPnBvd2VyT2ZmVGltZXIuZnVuY3Rpb24gPSB1c2J2aXNpb25fcG93ZXJPZmZUaW1lcjsKK30KKwordm9pZCB1c2J2aXNpb25fc2V0X3Bvd2VyT2ZmVGltZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwltb2RfdGltZXIoJnVzYnZpc2lvbi0+cG93ZXJPZmZUaW1lciwgamlmZmllcyArIFVTQlZJU0lPTl9QT1dFUk9GRl9USU1FKTsKK30KKwordm9pZCB1c2J2aXNpb25fcmVzZXRfcG93ZXJPZmZUaW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCWlmICh0aW1lcl9wZW5kaW5nKCZ1c2J2aXNpb24tPnBvd2VyT2ZmVGltZXIpKSB7CisJCWRlbF90aW1lcigmdXNidmlzaW9uLT5wb3dlck9mZlRpbWVyKTsKKwl9Cit9CisKKy8qCisgKiB1c2J2aXNpb25fYmVnaW5fc3RyZWFtaW5nKCkKKyAqIFN1cmUgeW91IGhhdmUgdG8gcHV0IGJpdCA3IHRvIDAsIGlmIG5vdCBpbmNvbWluZyBmcmFtZXMgYXJlIGRyb3BlZCwgYnV0IG5vCisgKiBpZGVhIGFib3V0IHRoZSByZXN0CisgKi8KK2ludCB1c2J2aXNpb25fYmVnaW5fc3RyZWFtaW5nKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCit7CisJaW50IGVyckNvZGUgPSAwOworCisJaWYgKHVzYnZpc2lvbi0+aXNvY01vZGUgPT0gSVNPQ19NT0RFX0NPTVBSRVNTKSB7CisJCXVzYnZpc2lvbl9pbml0X2NvbXByZXNzaW9uKHVzYnZpc2lvbik7CisJfQorCWVyckNvZGUgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1ZJTl9SRUcyLCBVU0JWSVNJT05fTk9IVkFMSUQgfAorCQkJCQkJCQkJCXVzYnZpc2lvbi0+VmluX1JlZzJfUHJlc2V0KTsKKwlyZXR1cm4gZXJyQ29kZTsKK30KKworLyoKKyAqIHVzYnZpc2lvbl9yZXN0YXJ0X2lzb2MoKQorICogTm90IHN1cmUgeWV0IGlmIHRvdWNoaW5nIGhlcmUgUFdSX1JFRyBtYWtlIGxvb3NlIHRoZSBjb25maWcKKyAqLworCitpbnQgdXNidmlzaW9uX3Jlc3RhcnRfaXNvYyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCWludCByZXQ7CisKKwlpZiAoCisJICAgIChyZXQgPQorCSAgICAgdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9QV1JfUkVHLAorCQkJICAgICAgVVNCVklTSU9OX1NTUE5EX0VOIHwgVVNCVklTSU9OX1BXUl9WSUQpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKAorCSAgICAocmV0ID0KKwkgICAgIHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fUFdSX1JFRywKKwkJCSAgICAgIFVTQlZJU0lPTl9TU1BORF9FTiB8IFVTQlZJU0lPTl9QV1JfVklEIHwKKwkJCSAgICAgIFVTQlZJU0lPTl9SRVMyKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgKKwkgICAgKHJldCA9CisJICAgICB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1ZJTl9SRUcyLAorCQkJICAgICAgVVNCVklTSU9OX0tFRVBfQkxBTksgfCBVU0JWSVNJT05fTk9IVkFMSUQgfAorCQkJCSAgdXNidmlzaW9uLT5WaW5fUmVnMl9QcmVzZXQpKSA8IDApIHJldHVybiByZXQ7CisKKwkvKiBUT0RPOiBzY2hlZHVsZSB0aW1lb3V0ICovCisJd2hpbGUgKCh1c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fU1RBVFVTX1JFRykgJiAweDAxKSAhPSAxKTsKKworCXJldHVybiAwOworfQorCitpbnQgdXNidmlzaW9uX2F1ZGlvX29mZihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCWlmICh1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX0lPUElOX1JFRywgVVNCVklTSU9OX0FVRElPX01VVEUpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYnZpc2lvbl9hdWRpb19vZmY6IGNhbid0IHdpcnRlIHJlZ1xuIik7CisJCXJldHVybiAtMTsKKwl9CisJdXNidmlzaW9uLT5BdWRpb011dGUgPSAwOworCXVzYnZpc2lvbi0+QXVkaW9DaGFubmVsID0gVVNCVklTSU9OX0FVRElPX01VVEU7CisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2J2aXNpb25fc2V0X2F1ZGlvKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCBBdWRpb0NoYW5uZWwpCit7CisJaWYgKCF1c2J2aXNpb24tPkF1ZGlvTXV0ZSkgeworCQlpZiAodXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9JT1BJTl9SRUcsIEF1ZGlvQ2hhbm5lbCkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYnZpc2lvbl9zZXRfYXVkaW86IGNhbid0IHdyaXRlIGlvcGluIHJlZ2lzdGVyIGZvciBhdWRpbyBzd2l0Y2hpbmdcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXVzYnZpc2lvbi0+QXVkaW9DaGFubmVsID0gQXVkaW9DaGFubmVsOworCXJldHVybiAwOworfQorCitpbnQgdXNidmlzaW9uX3NldHVwKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24saW50IGZvcm1hdCkKK3sKKwl1c2J2aXNpb25fc2V0X3ZpZGVvX2Zvcm1hdCh1c2J2aXNpb24sIGZvcm1hdCk7CisJdXNidmlzaW9uX3NldF9kcmFtX3NldHRpbmdzKHVzYnZpc2lvbik7CisJdXNidmlzaW9uX3NldF9jb21wcmVzc19wYXJhbXModXNidmlzaW9uKTsKKwl1c2J2aXNpb25fc2V0X2lucHV0KHVzYnZpc2lvbik7CisJdXNidmlzaW9uX3NldF9vdXRwdXQodXNidmlzaW9uLCBNQVhfVVNCX1dJRFRILCBNQVhfVVNCX0hFSUdIVCk7CisJdXNidmlzaW9uX3Jlc3RhcnRfaXNvYyh1c2J2aXNpb24pOworCisJLyogY29zYXMgZGVsIFBDTSAqLworCXJldHVybiBVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodXNidmlzaW9uKTsKK30KKworLyoKKyAqIHVzYnZpc2lvbl9pbml0X2lzb2MoKQorICoKKyAqLworaW50IHVzYnZpc2lvbl9pbml0X2lzb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gdXNidmlzaW9uLT5kZXY7CisJaW50IGJ1ZklkeCwgZXJyQ29kZSwgcmVnVmFsdWU7CisJY29uc3QgaW50IHNiX3NpemUgPSBVU0JWSVNJT05fVVJCX0ZSQU1FUyAqIFVTQlZJU0lPTl9NQVhfSVNPQ19QQUNLRVRfU0laRTsKKworCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCisJCXJldHVybiAtRUZBVUxUOworCisJdXNidmlzaW9uLT5jdXJGcmFtZSA9IE5VTEw7CisJc2NyYXRjaF9yZXNldCh1c2J2aXNpb24pOworCisJLyogQWx0ZXJuYXRlIGludGVyZmFjZSAxIGlzIGlzIHRoZSBiaWdnZXN0IGZyYW1lIHNpemUgKi8KKwllcnJDb2RlID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LCB1c2J2aXNpb24tPmlmYWNlLCB1c2J2aXNpb24tPmlmYWNlQWx0QWN0aXZlKTsKKwlpZiAoZXJyQ29kZSA8IDApIHsKKwkJdXNidmlzaW9uLT5sYXN0X2Vycm9yID0gZXJyQ29kZTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZWdWYWx1ZSA9ICgxNiAtIHVzYnZpc2lvbl9yZWFkX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9BTFRFUl9SRUcpKSAmIDB4MEY7CisJdXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSA9IChyZWdWYWx1ZSA9PSAwKSA/IDAgOiAocmVnVmFsdWUgKiA2NCkgLSAxOworCVBERUJVRyhEQkdfSVNPQywgIklTTyBQYWNrZXQgTGVuZ3RoOiVkIiwgdXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSk7CisKKwl1c2J2aXNpb24tPnVzYl9iYW5kd2lkdGggPSByZWdWYWx1ZSA+PiAxOworCVBERUJVRyhEQkdfSVNPQywgIlVTQiBCYW5kd2lkdGggVXNhZ2U6ICVkTWJpdC9TZWMiLCB1c2J2aXNpb24tPnVzYl9iYW5kd2lkdGgpOworCisKKworCS8qIFdlIGRvdWJsZSBidWZmZXIgdGhlIElzbyBsaXN0cyAqLworCisJZm9yIChidWZJZHggPSAwOyBidWZJZHggPCBVU0JWSVNJT05fTlVNU0JVRjsgYnVmSWR4KyspIHsKKwkJaW50IGosIGs7CisJCXN0cnVjdCB1cmIgKnVyYjsKKworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKFVTQlZJU0lPTl9VUkJfRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVyYiA9PSBOVUxMKSB7CisJCQllcnIoIiVzOiB1c2JfYWxsb2NfdXJiKCkgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXVzYnZpc2lvbi0+c2J1ZltidWZJZHhdLnVyYiA9IHVyYjsKKwkJdXNidmlzaW9uLT5zYnVmW2J1ZklkeF0uZGF0YSA9IHVzYl9idWZmZXJfYWxsb2ModXNidmlzaW9uLT5kZXYsIHNiX3NpemUsIEdGUF9LRVJORUwsJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXVyYi0+Y29udGV4dCA9IHVzYnZpc2lvbjsKKwkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgdXNidmlzaW9uLT52aWRlb19lbmRwKTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT5pbnRlcnZhbCA9IDE7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXNidmlzaW9uLT5zYnVmW2J1ZklkeF0uZGF0YTsKKwkJdXJiLT5jb21wbGV0ZSA9IHVzYnZpc2lvbl9pc29jSXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gVVNCVklTSU9OX1VSQl9GUkFNRVM7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9CisJCSAgICB1c2J2aXNpb24tPmlzb2NQYWNrZXRTaXplICogVVNCVklTSU9OX1VSQl9GUkFNRVM7CisJCWZvciAoaiA9IGsgPSAwOyBqIDwgVVNCVklTSU9OX1VSQl9GUkFNRVM7IGorKywKKwkJICAgICBrICs9IHVzYnZpc2lvbi0+aXNvY1BhY2tldFNpemUpIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gazsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gdXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZTsKKwkJfQorCX0KKworCisJLyogU3VibWl0IGFsbCBVUkJzICovCisJZm9yIChidWZJZHggPSAwOyBidWZJZHggPCBVU0JWSVNJT05fTlVNU0JVRjsgYnVmSWR4KyspIHsKKwkJCWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYih1c2J2aXNpb24tPnNidWZbYnVmSWR4XS51cmIsIEdGUF9LRVJORUwpOworCQlpZiAoZXJyQ29kZSkgeworCQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIoJWQpIGZhaWxlZDogZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIGJ1ZklkeCwgZXJyQ29kZSk7CisJCX0KKwl9CisKKwl1c2J2aXNpb24tPnN0cmVhbWluZyA9IFN0cmVhbV9JZGxlOworCVBERUJVRyhEQkdfSVNPQywgIiVzOiBzdHJlYW1pbmc9MSB1c2J2aXNpb24tPnZpZGVvX2VuZHA9JCUwMngiLCBfX0ZVTkNUSU9OX18sIHVzYnZpc2lvbi0+dmlkZW9fZW5kcCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1c2J2aXNpb25fc3RvcF9pc29jKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBzdG9wcyBzdHJlYW1pbmcgYW5kIGRlYWxsb2NhdGVzIFVSQnMuIFRoZW4gaXQKKyAqIGFjdGl2YXRlcyB6ZXJvLWJhbmR3aWR0aCBhbHQuIHNldHRpbmcgb2YgdGhlIHZpZGVvIGludGVyZmFjZS4KKyAqCisgKi8KK3ZvaWQgdXNidmlzaW9uX3N0b3BfaXNvYyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCWludCBidWZJZHgsIGVyckNvZGUsIHJlZ1ZhbHVlOworCWNvbnN0IGludCBzYl9zaXplID0gVVNCVklTSU9OX1VSQl9GUkFNRVMgKiBVU0JWSVNJT05fTUFYX0lTT0NfUEFDS0VUX1NJWkU7CisKKwlpZiAoKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IFN0cmVhbV9PZmYpIHx8ICh1c2J2aXNpb24tPmRldiA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJLyogVW5zY2hlZHVsZSBhbGwgb2YgdGhlIGlzbyB0ZCdzICovCisJZm9yIChidWZJZHggPSAwOyBidWZJZHggPCBVU0JWSVNJT05fTlVNU0JVRjsgYnVmSWR4KyspIHsKKwkJdXNiX2tpbGxfdXJiKHVzYnZpc2lvbi0+c2J1ZltidWZJZHhdLnVyYik7CisJCWlmICh1c2J2aXNpb24tPnNidWZbYnVmSWR4XS5kYXRhKXsKKwkJCXVzYl9idWZmZXJfZnJlZSh1c2J2aXNpb24tPmRldiwKKwkJCQkJc2Jfc2l6ZSwKKwkJCQkJdXNidmlzaW9uLT5zYnVmW2J1ZklkeF0uZGF0YSwKKwkJCQkJdXNidmlzaW9uLT5zYnVmW2J1ZklkeF0udXJiLT50cmFuc2Zlcl9kbWEpOworCQl9CisJCXVzYl9mcmVlX3VyYih1c2J2aXNpb24tPnNidWZbYnVmSWR4XS51cmIpOworCQl1c2J2aXNpb24tPnNidWZbYnVmSWR4XS51cmIgPSBOVUxMOworCX0KKworCisJUERFQlVHKERCR19JU09DLCAiJXM6IHN0cmVhbWluZz1TdHJlYW1fT2ZmXG4iLCBfX0ZVTkNUSU9OX18pOworCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gU3RyZWFtX09mZjsKKworCWlmICghdXNidmlzaW9uLT5yZW1vdmVfcGVuZGluZykgeworCisJCS8qIFNldCBwYWNrZXQgc2l6ZSB0byAwICovCisJCWVyckNvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2J2aXNpb24tPmRldiwgdXNidmlzaW9uLT5pZmFjZSwKKwkJCQkgICAgICB1c2J2aXNpb24tPmlmYWNlQWx0SW5hY3RpdmUpOworCQlpZiAoZXJyQ29kZSA8IDApIHsKKwkJCWVycigiJXM6IHVzYl9zZXRfaW50ZXJmYWNlKCkgZmFpbGVkOiBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgZXJyQ29kZSk7CisJCQl1c2J2aXNpb24tPmxhc3RfZXJyb3IgPSBlcnJDb2RlOworCQl9CisJCXJlZ1ZhbHVlID0gKDE2IC0gdXNidmlzaW9uX3JlYWRfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX0FMVEVSX1JFRykpICYgMHgwRjsKKwkJdXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSA9IChyZWdWYWx1ZSA9PSAwKSA/IDAgOiAocmVnVmFsdWUgKiA2NCkgLSAxOworCQlQREVCVUcoREJHX0lTT0MsICJJU08gUGFja2V0IExlbmd0aDolZCIsIHVzYnZpc2lvbi0+aXNvY1BhY2tldFNpemUpOworCisJCXVzYnZpc2lvbi0+dXNiX2JhbmR3aWR0aCA9IHJlZ1ZhbHVlID4+IDE7CisJCVBERUJVRyhEQkdfSVNPQywgIlVTQiBCYW5kd2lkdGggVXNhZ2U6ICVkTWJpdC9TZWMiLCB1c2J2aXNpb24tPnVzYl9iYW5kd2lkdGgpOworCX0KK30KKworaW50IHVzYnZpc2lvbl9tdXhzZWwoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgaW50IGNoYW5uZWwpCit7CisJaW50IG1vZGVbNF07CisJaW50IGF1ZGlvW109IHsxLCAwLCAwLCAwfTsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCS8vY2hhbm5lbCAwIGlzIFRWIHdpdGggYXVkaW9jaGFubmVsIDEgKHR1bmVyIG1vbm8pCisJLy9jaGFubmVsIDEgaXMgQ29tcG9zaXRlIHdpdGggYXVkaW8gY2hhbm5lbCAwIChsaW5lIGluKQorCS8vY2hhbm5lbCAyIGlzIFMtVmlkZW8gd2l0aCBhdWRpbyBjaGFubmVsIDAgKGxpbmUgaW4pCisJLy9jaGFubmVsIDMgaXMgYWRkaXRpb25hbCB2aWRlbyBpbnB1dHMgdG8gdGhlIGRldmljZSB3aXRoIGF1ZGlvIGNoYW5uZWwgMCAobGluZSBpbikKKworCVJFU1RSSUNUX1RPX1JBTkdFKGNoYW5uZWwsIDAsIHVzYnZpc2lvbi0+dmlkZW9faW5wdXRzKTsKKwl1c2J2aXNpb24tPmN0bF9pbnB1dCA9IGNoYW5uZWw7CisJICByb3V0ZS5pbnB1dCA9IFNBQTcxMTVfQ09NUE9TSVRFMTsKKwkgIGNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywmcm91dGUpOworCSAgY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19TX0lOUFVULCAmdXNidmlzaW9uLT5jdGxfaW5wdXQpOworCisJLy8gc2V0IHRoZSBuZXcgY2hhbm5lbAorCS8vIFJlZ3VsYXIgVVNCIFRWIFR1bmVycyAtPiBjaGFubmVsOiAwID0gVGVsZXZpc2lvbiwgMSA9IENvbXBvc2l0ZSwgMiA9IFMtVmlkZW8KKwkvLyBGb3VyIHZpZGVvIGlucHV0IGRldmljZXMgLT4gY2hhbm5lbDogMCA9IENoYW4gV2hpdGUsIDEgPSBDaGFuIEdyZWVuLCAyID0gQ2hhbiBZZWxsb3csIDMgPSBDaGFuIFJlZAorCisJc3dpdGNoICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uQ29kZWMpIHsKKwkJY2FzZSBDT0RFQ19TQUE3MTEzOgorCQkJaWYgKFN3aXRjaFNWaWRlb0lucHV0KSB7IC8vIFRvIGhhbmRsZSBwcm9ibGVtcyB3aXRoIFMtVmlkZW8gSW5wdXQgZm9yIHNvbWUgZGV2aWNlcy4gIFVzZSBTd2l0Y2hTVmlkZW9JbnB1dCBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuCisJCQkJbW9kZVsyXSA9IDE7CisJCQl9CisJCQllbHNlIHsKKwkJCQltb2RlWzJdID0gNzsKKwkJCX0KKwkJCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uVmlkZW9DaGFubmVscyA9PSA0KSB7CisJCQkJbW9kZVswXSA9IDA7IG1vZGVbMV0gPSAyOyBtb2RlWzNdID0gMzsgIC8vIFNwZWNpYWwgZm9yIGZvdXIgaW5wdXQgZGV2aWNlcworCQkJfQorCQkJZWxzZSB7CisJCQkJbW9kZVswXSA9IDA7IG1vZGVbMV0gPSAyOyAvL21vZGVzIGZvciByZWd1bGFyIHNhYTcxMTMgZGV2aWNlcworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ09ERUNfU0FBNzExMToKKwkJCW1vZGVbMF0gPSAwOyBtb2RlWzFdID0gMTsgbW9kZVsyXSA9IDc7IC8vbW9kZXMgZm9yIHNhYTcxMTEKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbW9kZVswXSA9IDA7IG1vZGVbMV0gPSAxOyBtb2RlWzJdID0gNzsgLy9kZWZhdWx0IG1vZGVzCisJfQorCXJvdXRlLmlucHV0ID0gbW9kZVtjaGFubmVsXTsKKwljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsJnJvdXRlKTsKKwl1c2J2aXNpb24tPmNoYW5uZWwgPSBjaGFubmVsOworCXVzYnZpc2lvbl9zZXRfYXVkaW8odXNidmlzaW9uLCBhdWRpb1tjaGFubmVsXSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODI1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKQEAgLTAsMCArMSw1NTIgQEAKKy8qCisgKiBJMkNfQUxHT19VU0IuQworICogIGkyYyBhbGdvcml0aG0gZm9yIFVTQi1JMkMgQnJpZGdlcworICoKKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IEpvZXJnIEhlY2tlbmJhY2ggPGpvZXJnQGhlY2tlbmJhY2gtYXcuZGU+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBEd2FpbmUgR2FyZGVuIDxkd2FpbmVnYXJkZW5Acm9nZXJzLmNvbT4KKyAqCisgKiBUaGlzIG1vZHVsZSBpcyBwYXJ0IG9mIHVzYnZpc2lvbiBkcml2ZXIgcHJvamVjdC4KKyAqIFVwZGF0ZXMgdG8gZHJpdmVyIGNvbXBsZXRlZCBieSBEd2FpbmUgUC4gR2FyZGVuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSAidXNidmlzaW9uLmgiCisKKyNkZWZpbmUgREJHX0kyQwkJMTw8MAorI2RlZmluZSBEQkdfQUxHTwkxPDwxCisKK3N0YXRpYyBpbnQgaTJjX2RlYnVnID0gMDsKKworbW9kdWxlX3BhcmFtIChpMmNfZGVidWcsIGludCwgMDY0NCk7CQkJLy8gZGVidWdfaTJjX3VzYiBtb2RlIG9mIHRoZSBkZXZpY2UgZHJpdmVyCitNT0RVTEVfUEFSTV9ERVNDKGkyY19kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbaTJjXSIpOworCisjZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCisJCWlmIChpMmNfZGVidWcgJiAobGV2ZWwpKSBpbmZvKCJbJXM6JWRdICIgZm10LCBfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpCisKK3N0YXRpYyBpbnQgdXNidmlzaW9uX2kyY193cml0ZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKmJ1ZiwKKwkJCSAgICBzaG9ydCBsZW4pOworc3RhdGljIGludCB1c2J2aXNpb25faTJjX3JlYWQodm9pZCAqZGF0YSwgdW5zaWduZWQgY2hhciBhZGRyLCBjaGFyICpidWYsCisJCQkgICBzaG9ydCBsZW4pOworCitzdGF0aWMgaW5saW5lIGludCB0cnlfd3JpdGVfYWRkcmVzcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCSAgICB1bnNpZ25lZCBjaGFyIGFkZHIsIGludCByZXRyaWVzKQoreworCXZvaWQgKmRhdGE7CisJaW50IGksIHJldCA9IC0xOworCWNoYXIgYnVmWzRdOworCisJZGF0YSA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCWJ1ZlswXSA9IDB4MDA7CisJZm9yIChpID0gMDsgaSA8PSByZXRyaWVzOyBpKyspIHsKKwkJcmV0ID0gKHVzYnZpc2lvbl9pMmNfd3JpdGUoZGF0YSwgYWRkciwgYnVmLCAxKSk7CisJCWlmIChyZXQgPT0gMSkKKwkJCWJyZWFrOwkvKiBzdWNjZXNzISAqLworCQl1ZGVsYXkoNSk7CisJCWlmIChpID09IHJldHJpZXMpCS8qIG5vIHN1Y2Nlc3MgKi8KKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwlpZiAoaSkgeworCQlQREVCVUcoREJHX0FMR08sIk5lZWRlZCAlZCByZXRyaWVzIGZvciBhZGRyZXNzICUjMngiLCBpLCBhZGRyKTsKKwkJUERFQlVHKERCR19BTEdPLCJNYXliZSB0aGVyZSdzIG5vIGRldmljZSBhdCB0aGlzIGFkZHJlc3MiKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdHJ5X3JlYWRfYWRkcmVzcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgYWRkciwgaW50IHJldHJpZXMpCit7CisJdm9pZCAqZGF0YTsKKwlpbnQgaSwgcmV0ID0gLTE7CisJY2hhciBidWZbNF07CisKKwlkYXRhID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CisJZm9yIChpID0gMDsgaSA8PSByZXRyaWVzOyBpKyspIHsKKwkJcmV0ID0gKHVzYnZpc2lvbl9pMmNfcmVhZChkYXRhLCBhZGRyLCBidWYsIDEpKTsKKwkJaWYgKHJldCA9PSAxKQorCQkJYnJlYWs7CS8qIHN1Y2Nlc3MhICovCisJCXVkZWxheSg1KTsKKwkJaWYgKGkgPT0gcmV0cmllcykJLyogbm8gc3VjY2VzcyAqLworCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCWlmIChpKSB7CisJCVBERUJVRyhEQkdfQUxHTywiTmVlZGVkICVkIHJldHJpZXMgZm9yIGFkZHJlc3MgJSMyeCIsIGksIGFkZHIpOworCQlQREVCVUcoREJHX0FMR08sIk1heWJlIHRoZXJlJ3Mgbm8gZGV2aWNlIGF0IHRoaXMgYWRkcmVzcyIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCB1c2JfZmluZF9hZGRyZXNzKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkJICAgc3RydWN0IGkyY19tc2cgKm1zZywgaW50IHJldHJpZXMsCisJCQkJICAgdW5zaWduZWQgY2hhciAqYWRkKQoreworCXVuc2lnbmVkIHNob3J0IGZsYWdzID0gbXNnLT5mbGFnczsKKworCXVuc2lnbmVkIGNoYXIgYWRkcjsKKwlpbnQgcmV0OworCWlmICgoZmxhZ3MgJiBJMkNfTV9URU4pKSB7CisJCS8qIGEgdGVuIGJpdCBhZGRyZXNzICovCisJCWFkZHIgPSAweGYwIHwgKChtc2ctPmFkZHIgPj4gNykgJiAweDAzKTsKKwkJLyogdHJ5IGV4dGVuZGVkIGFkZHJlc3MgY29kZS4uLiAqLworCQlyZXQgPSB0cnlfd3JpdGVfYWRkcmVzcyhpMmNfYWRhcCwgYWRkciwgcmV0cmllcyk7CisJCWlmIChyZXQgIT0gMSkgeworCQkJZXJyKCJkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZSwgd2hpbGUgd3JpdGluZyIpOworCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCX0KKwkJYWRkWzBdID0gYWRkcjsKKwkJaWYgKGZsYWdzICYgSTJDX01fUkQpIHsKKwkJCS8qIG9rYXksIG5vdyBzd2l0Y2ggaW50byByZWFkaW5nIG1vZGUgKi8KKwkJCWFkZHIgfD0gMHgwMTsKKwkJCXJldCA9IHRyeV9yZWFkX2FkZHJlc3MoaTJjX2FkYXAsIGFkZHIsIHJldHJpZXMpOworCQkJaWYgKHJldCAhPSAxKSB7CisJCQkJZXJyKCJkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZSwgd2hpbGUgcmVhZGluZyIpOworCQkJCXJldHVybiAtRVJFTU9URUlPOworCQkJfQorCQl9CisKKwl9IGVsc2UgewkJLyogbm9ybWFsIDdiaXQgYWRkcmVzcyAgKi8KKwkJYWRkciA9IChtc2ctPmFkZHIgPDwgMSk7CisJCWlmIChmbGFncyAmIEkyQ19NX1JEKQorCQkJYWRkciB8PSAxOworCQlpZiAoZmxhZ3MgJiBJMkNfTV9SRVZfRElSX0FERFIpCisJCQlhZGRyIF49IDE7CisKKwkJYWRkWzBdID0gYWRkcjsKKwkJaWYgKGZsYWdzICYgSTJDX01fUkQpCisJCQlyZXQgPSB0cnlfcmVhZF9hZGRyZXNzKGkyY19hZGFwLCBhZGRyLCByZXRyaWVzKTsKKwkJZWxzZQorCQkJcmV0ID0gdHJ5X3dyaXRlX2FkZHJlc3MoaTJjX2FkYXAsIGFkZHIsIHJldHJpZXMpOworCisJCWlmIChyZXQgIT0gMSkgeworCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VzYl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgaTJjX21zZyAqcG1zZzsKKwl2b2lkICpkYXRhOworCWludCBpLCByZXQ7CisJdW5zaWduZWQgY2hhciBhZGRyOworCisJZGF0YSA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXBtc2cgPSAmbXNnc1tpXTsKKwkJcmV0ID0gdXNiX2ZpbmRfYWRkcmVzcyhpMmNfYWRhcCwgcG1zZywgaTJjX2FkYXAtPnJldHJpZXMsICZhZGRyKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlQREVCVUcoREJHX0FMR08sImdvdCBOQUsgZnJvbSBkZXZpY2UsIG1lc3NhZ2UgIyVkIiwgaSk7CisJCQlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogLUVSRU1PVEVJTzsKKwkJfQorCisJCWlmIChwbXNnLT5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQkvKiByZWFkIGJ5dGVzIGludG8gYnVmZmVyICovCisJCQlyZXQgPSAodXNidmlzaW9uX2kyY19yZWFkKGRhdGEsIGFkZHIsIHBtc2ctPmJ1ZiwgcG1zZy0+bGVuKSk7CisJCQlpZiAocmV0IDwgcG1zZy0+bGVuKSB7CisJCQkJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IC1FUkVNT1RFSU87CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiB3cml0ZSBieXRlcyBmcm9tIGJ1ZmZlciAqLworCQkJcmV0ID0gKHVzYnZpc2lvbl9pMmNfd3JpdGUoZGF0YSwgYWRkciwgcG1zZy0+YnVmLCBwbXNnLT5sZW4pKTsKKwkJCWlmIChyZXQgPCBwbXNnLT5sZW4pIHsKKwkJCQlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogLUVSRU1PVEVJTzsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgaW50IGFsZ29fY29udHJvbChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIHVzYl9mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTCB8IEkyQ19GVU5DXzEwQklUX0FERFIgfCBJMkNfRlVOQ19QUk9UT0NPTF9NQU5HTElORzsKK30KKworCisvKiAtLS0tLWV4cG9ydGVkIGFsZ29yaXRobSBkYXRhOiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpMmNfdXNiX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSB1c2JfeGZlciwKKwkuc21idXNfeGZlciAgICA9IE5VTEwsCisJLmFsZ29fY29udHJvbCAgPSBhbGdvX2NvbnRyb2wsCisJLmZ1bmN0aW9uYWxpdHkgPSB1c2JfZnVuYywKK307CisKKworLyoKKyAqIHJlZ2lzdGVyaW5nIGZ1bmN0aW9ucyB0byBsb2FkIGFsZ29yaXRobXMgYXQgcnVudGltZQorICovCitzdGF0aWMgaW50IHVzYnZpc2lvbl9pMmNfdXNiX2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCVBERUJVRyhEQkdfSTJDLCAiSTJDICAgZGVidWdnaW5nIGlzIGVuYWJsZWQgW2kyY10iKTsKKwlQREVCVUcoREJHX0FMR08sICJBTEdPICAgZGVidWdnaW5nIGlzIGVuYWJsZWQgW2kyY10iKTsKKworCS8qIHJlZ2lzdGVyIG5ldyBhZGFwdGVyIHRvIGkyYyBtb2R1bGUuLi4gKi8KKworCWFkYXAtPmFsZ28gPSAmaTJjX3VzYl9hbGdvOworCisJYWRhcC0+dGltZW91dCA9IDEwMDsJLyogZGVmYXVsdCB2YWx1ZXMsIHNob3VsZCAgICAgICAqLworCWFkYXAtPnJldHJpZXMgPSAzOwkvKiBiZSByZXBsYWNlZCBieSBkZWZpbmVzICAgICAgICovCisKKwlpMmNfYWRkX2FkYXB0ZXIoYWRhcCk7CisKKwlQREVCVUcoREJHX0FMR08sImkyYyBidXMgZm9yICVzIHJlZ2lzdGVyZWQiLCBhZGFwLT5uYW1lKTsKKworCXJldHVybiAwOworfQorCisKK2ludCB1c2J2aXNpb25faTJjX3VzYl9kZWxfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKworCWkyY19kZWxfYWRhcHRlcihhZGFwKTsKKworCVBERUJVRyhEQkdfQUxHTywiaTJjIGJ1cyBmb3IgJXMgdW5yZWdpc3RlcmVkIiwgYWRhcC0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogdXNidmlzaW9uIHNwZWNpZmljIEkyQyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwX3RlbXBsYXRlOworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGkyY19jbGllbnRfdGVtcGxhdGU7CisKK2ludCB1c2J2aXNpb25faW5pdF9pMmMoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwltZW1jcHkoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICZpMmNfYWRhcF90ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlcikpOworCW1lbWNweSgmdXNidmlzaW9uLT5pMmNfY2xpZW50LCAmaTJjX2NsaWVudF90ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7CisKKwlzcHJpbnRmKHVzYnZpc2lvbi0+aTJjX2FkYXAubmFtZSArIHN0cmxlbih1c2J2aXNpb24tPmkyY19hZGFwLm5hbWUpLAorCQkiICMlZCIsIHVzYnZpc2lvbi0+dmRldi0+bWlub3IgJiAweDFmKTsKKwlQREVCVUcoREJHX0kyQywiQWRhcHRlcm5hbWU6ICVzIiwgdXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKTsKKworCWkyY19zZXRfYWRhcGRhdGEoJnVzYnZpc2lvbi0+aTJjX2FkYXAsIHVzYnZpc2lvbik7CisJaTJjX3NldF9jbGllbnRkYXRhKCZ1c2J2aXNpb24tPmkyY19jbGllbnQsIHVzYnZpc2lvbik7CisKKwl1c2J2aXNpb24tPmkyY19jbGllbnQuYWRhcHRlciA9ICZ1c2J2aXNpb24tPmkyY19hZGFwOworCisJaWYgKHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fU0VSX01PREUsIFVTQlZJU0lPTl9JSUNfTFJOQUNLKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2J2aXNpb25faW5pdF9pMmM6IGNhbid0IHdyaXRlIHJlZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkvKiBSZXF1ZXN0IHRoZSBsb2FkIG9mIHRoZSBpMmMgbW9kdWxlcyB3ZSBuZWVkICovCisJc3dpdGNoICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uQ29kZWMpIHsKKwljYXNlIENPREVDX1NBQTcxMTM6CisJCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTE1Iik7CisJCWJyZWFrOworCWNhc2UgQ09ERUNfU0FBNzExMToKKwkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMTUiKTsKKwkJYnJlYWs7CisJfQorCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uVHVuZXIgPT0gMSkgeworCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKKwl9CisjZW5kaWYKKworCXJldHVybiB1c2J2aXNpb25faTJjX3VzYl9hZGRfYnVzKCZ1c2J2aXNpb24tPmkyY19hZGFwKTsKK30KKwordm9pZCBjYWxsX2kyY19jbGllbnRzKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIHVuc2lnbmVkIGludCBjbWQsCisJCSAgICAgIHZvaWQgKmFyZykKK3sKKwlpMmNfY2xpZW50c19jb21tYW5kKCZ1c2J2aXNpb24tPmkyY19hZGFwLCBjbWQsIGFyZyk7Cit9CisKK3N0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb247CisKKwl1c2J2aXNpb24gPSAoc3RydWN0IHVzYl91c2J2aXNpb24gKilpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7CisKKwlzd2l0Y2ggKGNsaWVudC0+YWRkciA8PCAxKSB7CisJCWNhc2UgMHg0MzoKKwkJY2FzZSAweDRiOgorCQl7CisJCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOworCisJCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfCBUX1JBRElPOworCQkJdHVuX3NldHVwLnR5cGUgPSBUVU5FUl9UREE5ODg3OworCQkJdHVuX3NldHVwLmFkZHIgPSBjbGllbnQtPmFkZHI7CisKKwkJCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAweDQyOgorCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHNhYTcxMTQgZGV0ZWN0ZWQuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDRhOgorCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHNhYTcxMTMgZGV0ZWN0ZWQuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDQ4OgorCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHNhYTcxMTEgZGV0ZWN0ZWQuIik7CisJCQlicmVhazsKKwkJY2FzZSAweGEwOgorCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IGVlcHJvbSBkZXRlY3RlZC4iKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQl7CisJCQkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKKworCQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2ggaW5mb3JtOiBkZXRlY3RlZCBJMkMgYWRkcmVzcyAleCIsIGNsaWVudC0+YWRkciA8PCAxKTsKKwkJCQl1c2J2aXNpb24tPnR1bmVyX2FkZHIgPSBjbGllbnQtPmFkZHI7CisKKwkJCQlpZiAoKHVzYnZpc2lvbi0+aGF2ZV90dW5lcikgJiYgKHVzYnZpc2lvbi0+dHVuZXJfdHlwZSAhPSAtMSkpIHsKKwkJCQkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWIHwgVF9SQURJTzsKKwkJCQkJdHVuX3NldHVwLnR5cGUgPSB1c2J2aXNpb24tPnR1bmVyX3R5cGU7CisJCQkJCXR1bl9zZXR1cC5hZGRyID0gdXNidmlzaW9uLT50dW5lcl9hZGRyOworCQkJCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uOworCisJdXNidmlzaW9uID0gKHN0cnVjdCB1c2JfdXNidmlzaW9uICopaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOworCisJUERFQlVHKERCR19JMkMsInVzYnZpc2lvblslZF0gZGV0YWNoZXMgJXMiLCB1c2J2aXNpb24tPm5yLCBjbGllbnQtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1c2J2aXNpb25faTJjX3JlYWRfbWF4NChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCSAgICAgY2hhciAqYnVmLCBzaG9ydCBsZW4pCit7CisJaW50IHJjLCByZXRyaWVzOworCisJZm9yIChyZXRyaWVzID0gNTs7KSB7CisJCXJjID0gdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9TRVJfQURSUywgYWRkcik7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJLyogSW5pdGlhdGUgYnl0ZSByZWFkIGN5Y2xlICAgICAgICAgICAgICAgICAgICAqLworCQkvKiBVU0JWSVNJT05fU0VSX0NPTlQgPC0gZDAtZDIgbi4gb2YgYnl0ZXMgdG8gci93ICovCisJCS8qICAgICAgICAgICAgICAgICAgICBkMyAwPVdyIDE9UmQgICAgICAgICAgICAgKi8KKwkJcmMgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1NFUl9DT05ULAorCQkJCSAgICAgIChsZW4gJiAweDA3KSB8IDB4MTgpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCS8qIFRlc3QgZm9yIEJ1c3kgYW5kIEFDSyAqLworCQlkbyB7CisJCQkvKiBVU0JWSVNJT05fU0VSX0NPTlQgLT4gZDQgPT0gMCBidXN5ICovCisJCQlyYyA9IHVzYnZpc2lvbl9yZWFkX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9TRVJfQ09OVCk7CisJCX0gd2hpbGUgKHJjID4gMCAmJiAoKHJjICYgMHgxMCkgIT0gMCkpOwkvKiBSZXRyeSB3aGlsZSBidXN5ICovCisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJLyogVVNCVklTSU9OX1NFUl9DT05UIC0+IGQ1ID09IDEgTm90IGFjayAqLworCQlpZiAoKHJjICYgMHgyMCkgPT0gMCkJLyogQWNrPyAqLworCQkJYnJlYWs7CisKKwkJLyogSTJDIGFib3J0ICovCisJCXJjID0gdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9TRVJfQ09OVCwgMHgwMCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJaWYgKC0tcmV0cmllcyA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDQ6CisJCWJ1ZlszXSA9IHVzYnZpc2lvbl9yZWFkX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9TRVJfREFUNCk7CisJY2FzZSAzOgorCQlidWZbMl0gPSB1c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fU0VSX0RBVDMpOworCWNhc2UgMjoKKwkJYnVmWzFdID0gdXNidmlzaW9uX3JlYWRfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1NFUl9EQVQyKTsKKwljYXNlIDE6CisJCWJ1ZlswXSA9IHVzYnZpc2lvbl9yZWFkX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9TRVJfREFUMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInVzYnZpc2lvbl9pMmNfcmVhZF9tYXg0OiBidWZmZXIgbGVuZ3RoID4gNFxuIik7CisJfQorCisJaWYgKGkyY19kZWJ1ZyAmIERCR19JMkMpIHsKKwkJaW50IGlkeDsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7CisJCQlQREVCVUcoREJHX0kyQywicmVhZCAleCBmcm9tIGFkZHJlc3MgJXgiLCAodW5zaWduZWQgY2hhcilidWZbaWR4XSwgYWRkcik7CisJCX0KKwl9CisJcmV0dXJuIGxlbjsKK30KKworCitzdGF0aWMgaW50IHVzYnZpc2lvbl9pMmNfd3JpdGVfbWF4NChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLAorCQkJCSB1bnNpZ25lZCBjaGFyIGFkZHIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgc2hvcnQgbGVuKQoreworCWludCByYywgcmV0cmllczsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlWzZdOworCXVuc2lnbmVkIGNoYXIgc2VyX2NvbnQ7CisKKwlzZXJfY29udCA9IChsZW4gJiAweDA3KSB8IDB4MTA7CisKKwl2YWx1ZVswXSA9IGFkZHI7CisJdmFsdWVbMV0gPSBzZXJfY29udDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXZhbHVlW2kgKyAyXSA9IGJ1ZltpXTsKKworCWZvciAocmV0cmllcyA9IDU7OykgeworCQlyYyA9IHVzYl9jb250cm9sX21zZyh1c2J2aXNpb24tPmRldiwKKwkJCQkgICAgIHVzYl9zbmRjdHJscGlwZSh1c2J2aXNpb24tPmRldiwgMSksCisJCQkJICAgICBVU0JWSVNJT05fT1BfQ09ERSwKKwkJCQkgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwKKwkJCQkgICAgIFVTQl9SRUNJUF9FTkRQT0lOVCwgMCwKKwkJCQkgICAgIChfX3UxNikgVVNCVklTSU9OX1NFUl9BRFJTLCB2YWx1ZSwKKwkJCQkgICAgIGxlbiArIDIsIEhaKTsKKworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCXJjID0gdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9TRVJfQ09OVCwKKwkJCQkgICAgICAobGVuICYgMHgwNykgfCAweDEwKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQkvKiBUZXN0IGZvciBCdXN5IGFuZCBBQ0sgKi8KKwkJZG8geworCQkJcmMgPSB1c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fU0VSX0NPTlQpOworCQl9IHdoaWxlIChyYyA+IDAgJiYgKChyYyAmIDB4MTApICE9IDApKTsJLyogUmV0cnkgd2hpbGUgYnVzeSAqLworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCWlmICgocmMgJiAweDIwKSA9PSAwKQkvKiBBY2s/ICovCisJCQlicmVhazsKKworCQkvKiBJMkMgYWJvcnQgKi8KKwkJdXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9TRVJfQ09OVCwgMHgwMCk7CisKKwkJaWYgKC0tcmV0cmllcyA8IDApCisJCQlyZXR1cm4gLTE7CisKKwl9CisKKwlpZiAoaTJjX2RlYnVnICYgREJHX0kyQykgeworCQlpbnQgaWR4OworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4KyspIHsKKwkJCVBERUJVRyhEQkdfSTJDLCJ3cm90ZSAleCBhdCBhZGRyZXNzICV4IiwgKHVuc2lnbmVkIGNoYXIpYnVmW2lkeF0sIGFkZHIpOworCQl9CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgdXNidmlzaW9uX2kyY193cml0ZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKmJ1ZiwKKwkJCSAgICBzaG9ydCBsZW4pCit7CisJY2hhciAqYnVmUHRyID0gYnVmOworCWludCByZXR2YWw7CisJaW50IHdyY291bnQgPSAwOworCWludCBjb3VudDsKKwlpbnQgbWF4TGVuID0gNDsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIGRhdGE7CisKKwl3aGlsZSAobGVuID4gMCkgeworCQljb3VudCA9IChsZW4gPiBtYXhMZW4pID8gbWF4TGVuIDogbGVuOworCQlyZXR2YWwgPSB1c2J2aXNpb25faTJjX3dyaXRlX21heDQodXNidmlzaW9uLCBhZGRyLCBidWZQdHIsIGNvdW50KTsKKwkJaWYgKHJldHZhbCA+IDApIHsKKwkJCWxlbiAtPSBjb3VudDsKKwkJCWJ1ZlB0ciArPSBjb3VudDsKKwkJCXdyY291bnQgKz0gY291bnQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FRkFVTFQ7CisJfQorCXJldHVybiB3cmNvdW50OworfQorCitzdGF0aWMgaW50IHVzYnZpc2lvbl9pMmNfcmVhZCh2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKmJ1ZiwKKwkJCSAgIHNob3J0IGxlbikKK3sKKwljaGFyIHRlbXBbNF07CisJaW50IHJldHZhbCwgaTsKKwlpbnQgcmRjb3VudCA9IDA7CisJaW50IGNvdW50OworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSAoc3RydWN0IHVzYl91c2J2aXNpb24gKikgZGF0YTsKKworCXdoaWxlIChsZW4gPiAwKSB7CisJCWNvdW50ID0gKGxlbiA+IDMpID8gNCA6IGxlbjsKKwkJcmV0dmFsID0gdXNidmlzaW9uX2kyY19yZWFkX21heDQodXNidmlzaW9uLCBhZGRyLCB0ZW1wLCBjb3VudCk7CisJCWlmIChyZXR2YWwgPiAwKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQkJYnVmW3JkY291bnQgKyBpXSA9IHRlbXBbaV07CisJCQlsZW4gLT0gY291bnQ7CisJCQlyZGNvdW50ICs9IGNvdW50OworCQl9IGVsc2UKKwkJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRUZBVUxUOworCX0KKwlyZXR1cm4gcmRjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcF90ZW1wbGF0ZSA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSAgICAgICAgICAgICAgPSAidXNidmlzaW9uIiwKKwkuaWQgICAgICAgICAgICAgICAgPSBJMkNfSFdfQl9CVDg0OCwgLyogRklYTUUgKi8KKwkuY2xpZW50X3JlZ2lzdGVyICAgPSBhdHRhY2hfaW5mb3JtLAorCS5jbGllbnRfdW5yZWdpc3RlciA9IGRldGFjaF9pbmZvcm0sCisjaWZkZWYgSTJDX0FEQVBfQ0xBU1NfVFZfQU5BTE9HCisJLmNsYXNzICAgICAgICAgICAgID0gSTJDX0FEQVBfQ0xBU1NfVFZfQU5BTE9HLAorI2Vsc2UKKwkuY2xhc3MJCSAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGkyY19jbGllbnRfdGVtcGxhdGUgPSB7CisJLm5hbWUJCT0gInVzYnZpc2lvbiBpbnRlcm5hbCIsCit9OworCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0MzMzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCkBAIC0wLDAgKzEsMjA4OCBAQAorLyoKKyAqIFVTQiBVU0JWSVNJT04gVmlkZW8gZGV2aWNlIGRyaXZlciAwLjkuOQorICoKKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgSm9lcmcgSGVja2VuYmFjaCA8am9lcmdAaGVja2VuYmFjaC1hdy5kZT4KKyAqCisgKiBUaGlzIG1vZHVsZSBpcyBwYXJ0IG9mIHVzYnZpc2lvbiBkcml2ZXIgcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBMZXQncyBjYWxsIHRoZSB2ZXJzaW9uIDAuLi4uIHVudGlsIGNvbXByZXNzaW9uIGRlY29kaW5nIGlzIGNvbXBsZXRlbHkKKyAqIGltcGxlbWVudGVkLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIHdyaXR0ZW4gYnkgSm9zZSBJZ25hY2lvIEdpam9uIGFuZCBKb2VyZyBIZWNrZW5iYWNoLgorICogSXQgd2FzIGJhc2VkIG9uIFVTQiBDUGlBIGRyaXZlciB3cml0dGVuIGJ5IFBldGVyIFByZWdsZXIsCisgKiBTY290dCBKLiBCZXJ0aW4gYW5kIEpvaGFubmVzIEVyZGZlbHQKKyAqIElkZWFzIGFyZSB0YWtlbiBmcm9tIGJ0dHYgZHJpdmVyIGJ5IFJhbHBoIE1ldHpsZXIsIE1hcmN1cyBNZXR6bGVyICYKKyAqIEdlcmQgS25vcnIgYW5kIHpvcmFuIDM2MTIwLzM2MTI1IGRyaXZlciBieSBQYXVsaW5lIE1pZGRlbGluaworICogVXBkYXRlcyB0byBkcml2ZXIgY29tcGxldGVkIGJ5IER3YWluZSBQLiBHYXJkZW4KKyAqCisgKgorICogVE9ETzoKKyAqICAgICAtIHVzZSBzdWJtaXRfdXJiIGZvciBhbGwgc2V0dXAgcGFja2V0cworICogICAgIC0gRml4IG1lbW9yeSBzZXR0aW5ncyBmb3IgbnQxMDA0LiBJdCBpcyA0IHRpbWVzIGFzIGJpZyBhcyB0aGUKKyAqICAgICAgIG50MTAwMyBtZW1vcnkuCisgKiAgICAgLSBBZGQgYXVkaW8gb24gZW5kcG9pbnQgMyBmb3IgbnQxMDA0IGNoaXAuICBTZWVtcyBpbXBvc3NpYmxlLCBuZWVkcyBhIGNvZGVjIGludGVyZmFjZS4gIFdoaWNoIG9uZT8KKyAqICAgICAtIENsZWFuIHVwIHRoZSBkcml2ZXIuCisgKiAgICAgLSBvcHRpbWl6YXRpb24gZm9yIHBlcmZvcm1hbmNlLgorICogICAgIC0gQWRkIFZpZGVvdGV4dCBjYXBhYmlsaXR5IChWQkkpLiAgV29ya2luZyBvbiBpdC4uLi4uCisgKiAgICAgLSBDaGVjayBhdWRpbyBmb3Igb3RoZXIgZGV2aWNlcworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CisjaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaWZkZWYgQ09ORklHX0tNT0QKKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInVzYnZpc2lvbi5oIgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkpvZXJnIEhlY2tlbmJhY2ggPGpvZXJnQGhlY2tlbmJhY2gtYXcuZGU+LCBEd2FpbmUgR2FyZGVuIDxEd2FpbmVHYXJkZW5Acm9nZXJzLmNvbT4iCisjZGVmaW5lIERSSVZFUl9OQU1FICJ1c2J2aXNpb24iCisjZGVmaW5lIERSSVZFUl9BTElBUyAiVVNCVmlzaW9uIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCVmlzaW9uIFVTQiBWaWRlbyBEZXZpY2UgRHJpdmVyIGZvciBMaW51eCIKKyNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKKyNkZWZpbmUgVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX01BSk9SIDAKKyNkZWZpbmUgVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX01JTk9SIDkKKyNkZWZpbmUgVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgOQorI2RlZmluZSBVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX01BSk9SLFVTQlZJU0lPTl9EUklWRVJfVkVSU0lPTl9NSU5PUixVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKKyNkZWZpbmUgVVNCVklTSU9OX1ZFUlNJT05fU1RSSU5HIF9fc3RyaW5naWZ5KFVTQlZJU0lPTl9EUklWRVJfVkVSU0lPTl9NQUpPUikgIi4iIF9fc3RyaW5naWZ5KFVTQlZJU0lPTl9EUklWRVJfVkVSU0lPTl9NSU5PUikgIi4iIF9fc3RyaW5naWZ5KFVTQlZJU0lPTl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMKQorCisjZGVmaW5lCUVOQUJMRV9IRVhEVU1QCTAJLyogRW5hYmxlIGlmIHlvdSBuZWVkIGl0ICovCisKKworI2lmZGVmIFVTQlZJU0lPTl9ERUJVRworCSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKKwkJaWYgKHZpZGVvX2RlYnVnICYgKGxldmVsKSkgaW5mbygiWyVzOiVkXSAiIGZtdCwgX19QUkVUVFlfRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKQorI2Vsc2UKKwkjZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgREJHX0lPQ1RMCTE8PDAKKyNkZWZpbmUgREJHX0lPCQkxPDwxCisjZGVmaW5lIERCR19QUk9CRQkxPDwyCisjZGVmaW5lIERCR19NTUFQCTE8PDMKKworLy9TdHJpbmcgb3BlcmF0aW9ucworI2RlZmluZSBybXNwYWNlKHN0cikJd2hpbGUoKnN0cj09JyAnKSBzdHIrKzsKKyNkZWZpbmUgZ290bzJuZXh0KHN0cikJd2hpbGUoKnN0ciE9JyAnKSBzdHIrKzsgd2hpbGUoKnN0cj09JyAnKSBzdHIrKzsKKworCitzdGF0aWMgaW50IHVzYnZpc2lvbl9uciA9IDA7CQkJLy8gc2VxdWVudGlhbCBudW1iZXIgb2YgdXNidmlzaW9uIGRldmljZQorCitzdGF0aWMgc3RydWN0IHVzYnZpc2lvbl92NGwyX2Zvcm1hdF9zdCB1c2J2aXNpb25fdjRsMl9mb3JtYXRbXSA9IHsKKwl7IDEsIDEsICA4LCBWNEwyX1BJWF9GTVRfR1JFWSAgICAsICJHUkVZIiB9LAorCXsgMSwgMiwgMTYsIFY0TDJfUElYX0ZNVF9SR0I1NjUgICwgIlJHQjU2NSIgfSwKKwl7IDEsIDMsIDI0LCBWNEwyX1BJWF9GTVRfUkdCMjQgICAsICJSR0IyNCIgfSwKKwl7IDEsIDQsIDMyLCBWNEwyX1BJWF9GTVRfUkdCMzIgICAsICJSR0IzMiIgfSwKKwl7IDEsIDIsIDE2LCBWNEwyX1BJWF9GTVRfUkdCNTU1ICAsICJSR0I1NTUiIH0sCisJeyAxLCAyLCAxNiwgVjRMMl9QSVhfRk1UX1lVWVYgICAgLCAiWVVWNDIyIiB9LAorCXsgMSwgMiwgMTIsIFY0TDJfUElYX0ZNVF9ZVlU0MjAgICwgIllVVjQyMFAiIH0sIC8vIDEuNSAhCisJeyAxLCAyLCAxNiwgVjRMMl9QSVhfRk1UX1lVVjQyMlAgLCAiWVVWNDIyUCIgfQorfTsKKworLyogc3VwcG9ydGVkIHR2IG5vcm1zICovCitzdGF0aWMgc3RydWN0IHVzYnZpc2lvbl90dm5vcm0gdHZub3Jtc1tdID0geworCXsKKwkJLm5hbWUgPSAiUEFMIiwKKwkJLmlkID0gVjRMMl9TVERfUEFMLAorCX0sIHsKKwkJLm5hbWUgPSAiTlRTQyIsCisJCS5pZCA9IFY0TDJfU1REX05UU0MsCisJfSwgeworCQkgLm5hbWUgPSAiU0VDQU0iLAorCQkgLmlkID0gVjRMMl9TVERfU0VDQU0sCisJfSwgeworCQkubmFtZSA9ICJQQUwtTSIsCisJCS5pZCA9IFY0TDJfU1REX1BBTF9NLAorCX0KK307CisKKyNkZWZpbmUgVFZOT1JNUyBBUlJBWV9TSVpFKHR2bm9ybXMpCisKKy8vIEZ1bmN0aW9uIHByb3RvdHlwZXMKK3N0YXRpYyB2b2lkIHVzYnZpc2lvbl9yZWxlYXNlKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOworCisvLyBEZWZhdWx0IGluaXRhbGl6YXRpb24gb2YgZGV2aWNlIGRyaXZlciBwYXJhbWV0ZXJzCitzdGF0aWMgaW50IGlzb2NNb2RlID0gSVNPQ19NT0RFX0NPTVBSRVNTOwkJLy8gU2V0IHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgSVNPQyBlbmRwb2ludAorc3RhdGljIGludCB2aWRlb19kZWJ1ZyA9IDA7CQkJCS8vIFNldCB0aGUgZGVmYXVsdCBEZWJ1ZyBNb2RlIG9mIHRoZSBkZXZpY2UgZHJpdmVyCitzdGF0aWMgaW50IFBvd2VyT25BdE9wZW4gPSAxOwkJCQkvLyBTZXQgdGhlIGRlZmF1bHQgZGV2aWNlIHRvIHBvd2VyIG9uIGF0IHN0YXJ0dXAKK3N0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsJCQkJLy8gU2VxdWVudGlhbCBOdW1iZXIgb2YgVmlkZW8gRGV2aWNlCitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CQkJCS8vIFNlcXVlbnRpYWwgTnVtYmVyIG9mIFJhZGlvIERldmljZQorc3RhdGljIGludCB2YmlfbnIgPSAtMTsJCQkJCS8vIFNlcXVlbnRpYWwgTnVtYmVyIG9mIFZCSSBEZXZpY2UKK3N0YXRpYyBjaGFyICpDdXN0b21EZXZpY2U9TlVMTDsJCQkJLy8gU2V0IGFzIG5vdGhpbmcuLi4uCisKKy8vIEdyYWIgcGFyYW1ldGVycyBmb3IgdGhlIGRldmljZSBkcml2ZXIKKworI2lmIGRlZmluZWQobW9kdWxlX3BhcmFtKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG93aW5nIHBhcmFtZXRlcnMgdW5kZXIgU1lTRlMKK21vZHVsZV9wYXJhbShpc29jTW9kZSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbSh2aWRlb19kZWJ1ZywgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShQb3dlck9uQXRPcGVuLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKHZpZGVvX25yLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKHZiaV9uciwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShDdXN0b21EZXZpY2UsIGNoYXJwLCAwNDQ0KTsKKyNlbHNlCQkJCQkJCS8vIE9sZCBTdHlsZQorTU9EVUxFX1BBUkFNKGlzb2NNb2RlLCAiaSIpOworTU9EVUxFX1BBUk0odmlkZW9fZGVidWcsICJpIik7CQkJCS8vIEdyYWIgdGhlIERlYnVnIE1vZGUgb2YgdGhlIGRldmljZSBkcml2ZXIKK01PRFVMRV9QQVJNKGFkanVzdENvbXByZXNzaW9uLCAiaSIpOwkJCS8vIEdyYWIgdGhlIGNvbXByZXNzaW9uIHRvIGJlIGFkYXB0aXZlCitNT0RVTEVfUEFSTShQb3dlck9uQXRPcGVuLCAiaSIpOwkJCS8vIEdyYWIgdGhlIGRldmljZSB0byBwb3dlciBvbiBhdCBzdGFydHVwCitNT0RVTEVfUEFSTShTd2l0Y2hTVmlkZW9JbnB1dCwgImkiKTsJCQkvLyBUbyBoZWxwIHBlb3BsZSB3aXRoIEJsYWNrIGFuZCBXaGl0ZSBvdXRwdXQgd2l0aCB1c2luZyBzLXZpZGVvIGlucHV0LiAgU29tZSBjYWJsZXMgYW5kIGlucHV0IGRldmljZSBhcmUgd2lyZWQgZGlmZmVyZW50bHkuCitNT0RVTEVfUEFSTSh2aWRlb19uciwgImkiKTsJCQkJLy8gdmlkZW9fbnIgb3B0aW9uIGFsbG93cyB0byBzcGVjaWZ5IGEgY2VydGFpbiAvZGV2L3ZpZGVvWCBkZXZpY2UgKGxpa2UgL2Rldi92aWRlbzAgb3IgL2Rldi92aWRlbzEgLi4uKQorTU9EVUxFX1BBUk0ocmFkaW9fbnIsICJpIik7CQkJCS8vIHJhZGlvX25yIG9wdGlvbiBhbGxvd3MgdG8gc3BlY2lmeSBhIGNlcnRhaW4gL2Rldi9yYWRpb1ggZGV2aWNlIChsaWtlIC9kZXYvcmFkaW8wIG9yIC9kZXYvcmFkaW8xIC4uLikKK01PRFVMRV9QQVJNKHZiaV9uciwgImkiKTsJCQkJLy8gdmJpX25yIG9wdGlvbiBhbGxvd3MgdG8gc3BlY2lmeSBhIGNlcnRhaW4gL2Rldi92YmlYIGRldmljZSAobGlrZSAvZGV2L3ZiaTAgb3IgL2Rldi92YmkxIC4uLikKK01PRFVMRV9QQVJNKEN1c3RvbURldmljZSwgInMiKTsJCQkJLy8gLi4uLiBDdXN0b21EZXZpY2UKKyNlbmRpZgorCitNT0RVTEVfUEFSTV9ERVNDKGlzb2NNb2RlLCAiIFNldCB0aGUgZGVmYXVsdCBmb3JtYXQgZm9yIElTT0MgZW5kcG9pbnQuICBEZWZhdWx0OiAweDYwIChDb21wcmVzc2lvbiBPbikiKTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fZGVidWcsICIgU2V0IHRoZSBkZWZhdWx0IERlYnVnIE1vZGUgb2YgdGhlIGRldmljZSBkcml2ZXIuICBEZWZhdWx0OiAwIChPZmYpIik7CitNT0RVTEVfUEFSTV9ERVNDKFBvd2VyT25BdE9wZW4sICIgU2V0IHRoZSBkZWZhdWx0IGRldmljZSB0byBwb3dlciBvbiB3aGVuIGRldmljZSBpcyBvcGVuZWQuICBEZWZhdWx0OiAxIChPbikiKTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsICJTZXQgdmlkZW8gZGV2aWNlIG51bWJlciAoL2Rldi92aWRlb1gpLiAgRGVmYXVsdDogLTEgKGF1dG9kZXRlY3QpIik7CitNT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiU2V0IHJhZGlvIGRldmljZSBudW1iZXIgKC9kZXYvcmFkaW9YKS4gIERlZmF1bHQ6IC0xIChhdXRvZGV0ZWN0KSIpOworTU9EVUxFX1BBUk1fREVTQyh2YmlfbnIsICJTZXQgdmJpIGRldmljZSBudW1iZXIgKC9kZXYvdmJpWCkuICBEZWZhdWx0OiAtMSAoYXV0b2RldGVjdCkiKTsKK01PRFVMRV9QQVJNX0RFU0MoQ3VzdG9tRGV2aWNlLCAiIERlZmluZSB0aGUgZmluZSB0dW5pbmcgcGFyYW1ldGVycyBmb3IgdGhlIGRldmljZS4gIERlZmF1bHQ6IG51bGwiKTsKKworCisvLyBNaXNjIHN0dWZmCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKERSSVZFUl9MSUNFTlNFKTsKK01PRFVMRV9WRVJTSU9OKFVTQlZJU0lPTl9WRVJTSU9OX1NUUklORyk7CitNT0RVTEVfQUxJQVMoRFJJVkVSX0FMSUFTKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNZU0ZTIENvZGUgLSBDb3BpZWQgZnJvbSB0aGUgc3R2NjgwLmMgdXNiIG1vZHVsZS4JCQkJCSovCisvKiBEZXZpY2UgaW5mb3JtYXRpb24gaXMgbG9jYXRlZCBhdCAvc3lzL2NsYXNzL3ZpZGVvNGxpbnV4L3ZpZGVvMAkJCSovCisvKiBEZXZpY2UgcGFyYW1ldGVycyBpbmZvcm1hdGlvbiBpcyBsb2NhdGVkIGF0IC9zeXMvbW9kdWxlL3VzYnZpc2lvbiAgICAgICAgICAgICAgICAgICAgKi8KKy8qIERldmljZSBVU0IgSW5mb3JtYXRpb24gaXMgbG9jYXRlZCBhdCAvc3lzL2J1cy91c2IvZHJpdmVycy9VU0JWaXNpb24gVmlkZW8gR3JhYmJlciAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2RlZmluZSBZRVNfTk8oeCkgKCh4KSA/ICJZZXMiIDogIk5vIikKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqY2RfdG9fdXNidmlzaW9uKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGNsYXNzX2Rldik7CisJcmV0dXJuIHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3ZlcnNpb24oc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgVVNCVklTSU9OX1ZFUlNJT05fU1RSSU5HKTsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCBzaG93X3ZlcnNpb24sIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X21vZGVsKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5Nb2RlbFN0cmluZyk7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobW9kZWwsIFNfSVJVR08sIHNob3dfbW9kZWwsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2h1ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGNsYXNzX2Rldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKKwljdHJsLmlkID0gVjRMMl9DSURfSFVFOworCWN0cmwudmFsdWUgPSAwOworCWlmKHVzYnZpc2lvbi0+dXNlcikKKwkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSA+PiA4KTsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihodWUsIFNfSVJVR08sIHNob3dfaHVlLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19jb250cmFzdChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGNsYXNzX2Rldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKKwljdHJsLmlkID0gVjRMMl9DSURfQ09OVFJBU1Q7CisJY3RybC52YWx1ZSA9IDA7CisJaWYodXNidmlzaW9uLT51c2VyKQorCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0dfQ1RSTCwgJmN0cmwpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdHJsLnZhbHVlID4+IDgpOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGNvbnRyYXN0LCBTX0lSVUdPLCBzaG93X2NvbnRyYXN0LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19icmlnaHRuZXNzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOworCWN0cmwuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTOworCWN0cmwudmFsdWUgPSAwOworCWlmKHVzYnZpc2lvbi0+dXNlcikKKwkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSA+PiA4KTsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihicmlnaHRuZXNzLCBTX0lSVUdPLCBzaG93X2JyaWdodG5lc3MsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X3NhdHVyYXRpb24oc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBjbGFzc19kZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisJY3RybC5pZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT047CisJY3RybC52YWx1ZSA9IDA7CisJaWYodXNidmlzaW9uLT51c2VyKQorCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0dfQ1RSTCwgJmN0cmwpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdHJsLnZhbHVlID4+IDgpOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHNhdHVyYXRpb24sIFNfSVJVR08sIHNob3dfc2F0dXJhdGlvbiwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RyZWFtaW5nKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIFlFU19OTyh1c2J2aXNpb24tPnN0cmVhbWluZz09U3RyZWFtX09uPzE6MCkpOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHN0cmVhbWluZywgU19JUlVHTywgc2hvd19zdHJlYW1pbmcsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2NvbXByZXNzaW9uKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgY2xhc3NfZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIFlFU19OTyh1c2J2aXNpb24tPmlzb2NNb2RlPT1JU09DX01PREVfQ09NUFJFU1MpKTsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihjb21wcmVzc2lvbiwgU19JUlVHTywgc2hvd19jb21wcmVzc2lvbiwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZGV2aWNlX2JyaWRnZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGNsYXNzX2Rldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB1c2J2aXNpb24tPmJyaWRnZVR5cGUpOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJyaWRnZSwgU19JUlVHTywgc2hvd19kZXZpY2VfYnJpZGdlLCBOVUxMKTsKKworc3RhdGljIHZvaWQgdXNidmlzaW9uX2NyZWF0ZV9zeXNmcyhzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQoreworCWludCByZXM7CisJaWYgKCF2ZGV2KQorCQlyZXR1cm47CisJZG8geworCQlyZXM9Y2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5jbGFzc19kZXYsCisJCQkJCSAgICAgJmNsYXNzX2RldmljZV9hdHRyX3ZlcnNpb24pOworCQlpZiAocmVzPDApCisJCQlicmVhazsKKwkJcmVzPWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmdmRldi0+Y2xhc3NfZGV2LAorCQkJCQkgICAgICZjbGFzc19kZXZpY2VfYXR0cl9tb2RlbCk7CisJCWlmIChyZXM8MCkKKwkJCWJyZWFrOworCQlyZXM9Y2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5jbGFzc19kZXYsCisJCQkJCSAgICAgJmNsYXNzX2RldmljZV9hdHRyX2h1ZSk7CisJCWlmIChyZXM8MCkKKwkJCWJyZWFrOworCQlyZXM9Y2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5jbGFzc19kZXYsCisJCQkJCSAgICAgJmNsYXNzX2RldmljZV9hdHRyX2NvbnRyYXN0KTsKKwkJaWYgKHJlczwwKQorCQkJYnJlYWs7CisJCXJlcz1jbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJnZkZXYtPmNsYXNzX2RldiwKKwkJCQkJICAgICAmY2xhc3NfZGV2aWNlX2F0dHJfYnJpZ2h0bmVzcyk7CisJCWlmIChyZXM8MCkKKwkJCWJyZWFrOworCQlyZXM9Y2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5jbGFzc19kZXYsCisJCQkJCSAgICAgJmNsYXNzX2RldmljZV9hdHRyX3NhdHVyYXRpb24pOworCQlpZiAocmVzPDApCisJCQlicmVhazsKKwkJcmVzPWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmdmRldi0+Y2xhc3NfZGV2LAorCQkJCQkgICAgICZjbGFzc19kZXZpY2VfYXR0cl9zdHJlYW1pbmcpOworCQlpZiAocmVzPDApCisJCQlicmVhazsKKwkJcmVzPWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmdmRldi0+Y2xhc3NfZGV2LAorCQkJCQkgICAgICZjbGFzc19kZXZpY2VfYXR0cl9jb21wcmVzc2lvbik7CisJCWlmIChyZXM8MCkKKwkJCWJyZWFrOworCQlyZXM9Y2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZGV2LT5jbGFzc19kZXYsCisJCQkJCSAgICAgJmNsYXNzX2RldmljZV9hdHRyX2JyaWRnZSk7CisJCWlmIChyZXM+PTApCisJCQlyZXR1cm47CisJfSB3aGlsZSAoMCk7CisKKwllcnIoIiVzIGVycm9yOiAlZFxuIiwgX19GVU5DVElPTl9fLCByZXMpOworfQorCitzdGF0aWMgdm9pZCB1c2J2aXNpb25fcmVtb3ZlX3N5c2ZzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJaWYgKHZkZXYpIHsKKwkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5jbGFzc19kZXYsCisJCQkJCSAmY2xhc3NfZGV2aWNlX2F0dHJfdmVyc2lvbik7CisJCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZSgmdmRldi0+Y2xhc3NfZGV2LAorCQkJCQkgJmNsYXNzX2RldmljZV9hdHRyX21vZGVsKTsKKwkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5jbGFzc19kZXYsCisJCQkJCSAmY2xhc3NfZGV2aWNlX2F0dHJfaHVlKTsKKwkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5jbGFzc19kZXYsCisJCQkJCSAmY2xhc3NfZGV2aWNlX2F0dHJfY29udHJhc3QpOworCQljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmNsYXNzX2RldiwKKwkJCQkJICZjbGFzc19kZXZpY2VfYXR0cl9icmlnaHRuZXNzKTsKKwkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5jbGFzc19kZXYsCisJCQkJCSAmY2xhc3NfZGV2aWNlX2F0dHJfc2F0dXJhdGlvbik7CisJCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZSgmdmRldi0+Y2xhc3NfZGV2LAorCQkJCQkgJmNsYXNzX2RldmljZV9hdHRyX3N0cmVhbWluZyk7CisJCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZSgmdmRldi0+Y2xhc3NfZGV2LAorCQkJCQkgJmNsYXNzX2RldmljZV9hdHRyX2NvbXByZXNzaW9uKTsKKwkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKCZ2ZGV2LT5jbGFzc19kZXYsCisJCQkJCSAmY2xhc3NfZGV2aWNlX2F0dHJfYnJpZGdlKTsKKwl9Cit9CisKKworLyoKKyAqIHVzYnZpc2lvbl9vcGVuKCkKKyAqCisgKiBUaGlzIGlzIHBhcnQgb2YgVmlkZW8gNCBMaW51eCBBUEkuIFRoZSBkcml2ZXIgY2FuIGJlIG9wZW5lZCBieSBvbmUKKyAqIGNsaWVudCBvbmx5IChjaGVja3MgaW50ZXJuYWwgY291bnRlciAndXNidmlzaW9uLT51c2VyJykuIFRoZSBwcm9jZWR1cmUKKyAqIHRoZW4gYWxsb2NhdGVzIGJ1ZmZlcnMgbmVlZGVkIGZvciB2aWRlbyBwcm9jZXNzaW5nLgorICoKKyAqLworc3RhdGljIGludCB1c2J2aXNpb25fdjRsMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCWludCBlcnJDb2RlID0gMDsKKworCVBERUJVRyhEQkdfSU8sICJvcGVuIik7CisKKworCXVzYnZpc2lvbl9yZXNldF9wb3dlck9mZlRpbWVyKHVzYnZpc2lvbik7CisKKwlpZiAodXNidmlzaW9uLT51c2VyKQorCQllcnJDb2RlID0gLUVCVVNZOworCWVsc2UgeworCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmcmFtZSBidWZmZXJzICovCisJCWVyckNvZGUgPSB1c2J2aXNpb25fZnJhbWVzX2FsbG9jKHVzYnZpc2lvbik7CisJCWlmKCFlcnJDb2RlKSB7CisJCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBzY3JhdGNoIHJpbmcgYnVmZmVyICovCisJCQllcnJDb2RlID0gdXNidmlzaW9uX3NjcmF0Y2hfYWxsb2ModXNidmlzaW9uKTsKKwkJCWlmICgoIWVyckNvZGUpICYmIChpc29jTW9kZT09SVNPQ19NT0RFX0NPTVBSRVNTKSkgeworCQkJCS8qIEFsbG9jYXRlIGludGVybWVkaWF0ZSBkZWNvbXByZXNzaW9uIGJ1ZmZlcnMgb25seSBpZiBuZWVkZWQgKi8KKwkJCQllcnJDb2RlID0gdXNidmlzaW9uX2RlY29tcHJlc3NfYWxsb2ModXNidmlzaW9uKTsKKwkJCX0KKwkJfQorCQlpZiAoZXJyQ29kZSkgeworCQkJLyogRGVhbGxvY2F0ZSBhbGwgYnVmZmVycyBpZiB0cm91YmxlICovCisJCQl1c2J2aXNpb25fZnJhbWVzX2ZyZWUodXNidmlzaW9uKTsKKwkJCXVzYnZpc2lvbl9zY3JhdGNoX2ZyZWUodXNidmlzaW9uKTsKKwkJCXVzYnZpc2lvbl9kZWNvbXByZXNzX2ZyZWUodXNidmlzaW9uKTsKKwkJfQorCX0KKworCS8qIElmIHNvIGZhciBubyBlcnJvcnMgdGhlbiB3ZSBzaGFsbCBzdGFydCB0aGUgY2FtZXJhICovCisJaWYgKCFlcnJDb2RlKSB7CisJCWRvd24oJnVzYnZpc2lvbi0+bG9jayk7CisJCWlmICh1c2J2aXNpb24tPnBvd2VyID09IDApIHsKKwkJCXVzYnZpc2lvbl9wb3dlcl9vbih1c2J2aXNpb24pOworCQkJdXNidmlzaW9uX2luaXRfaTJjKHVzYnZpc2lvbik7CisJCX0KKworCQkvKiBTZW5kIGluaXQgc2VxdWVuY2Ugb25seSBvbmNlLCBpdCdzIGxhcmdlISAqLworCQlpZiAoIXVzYnZpc2lvbi0+aW5pdGlhbGl6ZWQpIHsKKwkJCWludCBzZXR1cF9vayA9IDA7CisJCQlzZXR1cF9vayA9IHVzYnZpc2lvbl9zZXR1cCh1c2J2aXNpb24saXNvY01vZGUpOworCQkJaWYgKHNldHVwX29rKQorCQkJCXVzYnZpc2lvbi0+aW5pdGlhbGl6ZWQgPSAxOworCQkJZWxzZQorCQkJCWVyckNvZGUgPSAtRUJVU1k7CisJCX0KKworCQlpZiAoIWVyckNvZGUpIHsKKwkJCXVzYnZpc2lvbl9iZWdpbl9zdHJlYW1pbmcodXNidmlzaW9uKTsKKwkJCWVyckNvZGUgPSB1c2J2aXNpb25faW5pdF9pc29jKHVzYnZpc2lvbik7CisJCQkvKiBkZXZpY2UgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGlzb2MgdHJhbnNmZXIgKi8KKwkJCXVzYnZpc2lvbl9tdXhzZWwodXNidmlzaW9uLDApOworCQkJdXNidmlzaW9uLT51c2VyKys7CisJCX0KKwkJZWxzZSB7CisJCQlpZiAoUG93ZXJPbkF0T3BlbikgeworCQkJCXVzYnZpc2lvbl9pMmNfdXNiX2RlbF9idXMoJnVzYnZpc2lvbi0+aTJjX2FkYXApOworCQkJCXVzYnZpc2lvbl9wb3dlcl9vZmYodXNidmlzaW9uKTsKKwkJCQl1c2J2aXNpb24tPmluaXRpYWxpemVkID0gMDsKKwkJCX0KKwkJfQorCQl1cCgmdXNidmlzaW9uLT5sb2NrKTsKKwl9CisKKwlpZiAoZXJyQ29kZSkgeworCX0KKworCS8qIHByZXBhcmUgcXVldWVzICovCisJdXNidmlzaW9uX2VtcHR5X2ZyYW1lcXVldWVzKHVzYnZpc2lvbik7CisKKwlQREVCVUcoREJHX0lPLCAic3VjY2VzcyIpOworCXJldHVybiBlcnJDb2RlOworfQorCisvKgorICogdXNidmlzaW9uX3Y0bDJfY2xvc2UoKQorICoKKyAqIFRoaXMgaXMgcGFydCBvZiBWaWRlbyA0IExpbnV4IEFQSS4gVGhlIHByb2NlZHVyZQorICogc3RvcHMgc3RyZWFtaW5nIGFuZCBkZWFsbG9jYXRlcyBhbGwgYnVmZmVycyB0aGF0IHdlcmUgZWFybGllcgorICogYWxsb2NhdGVkIGluIHVzYnZpc2lvbl92NGwyX29wZW4oKS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgdXNidmlzaW9uX3Y0bDJfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisKKwlQREVCVUcoREJHX0lPLCAiY2xvc2UiKTsKKwlkb3duKCZ1c2J2aXNpb24tPmxvY2spOworCisJdXNidmlzaW9uX2F1ZGlvX29mZih1c2J2aXNpb24pOworCXVzYnZpc2lvbl9yZXN0YXJ0X2lzb2ModXNidmlzaW9uKTsKKwl1c2J2aXNpb25fc3RvcF9pc29jKHVzYnZpc2lvbik7CisKKwl1c2J2aXNpb25fZGVjb21wcmVzc19mcmVlKHVzYnZpc2lvbik7CisJdXNidmlzaW9uX2ZyYW1lc19mcmVlKHVzYnZpc2lvbik7CisJdXNidmlzaW9uX3NjcmF0Y2hfZnJlZSh1c2J2aXNpb24pOworCisJdXNidmlzaW9uLT51c2VyLS07CisKKwlpZiAoUG93ZXJPbkF0T3BlbikgeworCQkvKiBwb3dlciBvZmYgaW4gYSBsaXR0bGUgd2hpbGUgdG8gYXZvaWQgb2ZmL29uIGV2ZXJ5IGNsb3NlL29wZW4gc2hvcnQgc2VxdWVuY2VzICovCisJCXVzYnZpc2lvbl9zZXRfcG93ZXJPZmZUaW1lcih1c2J2aXNpb24pOworCQl1c2J2aXNpb24tPmluaXRpYWxpemVkID0gMDsKKwl9CisKKwl1cCgmdXNidmlzaW9uLT5sb2NrKTsKKworCWlmICh1c2J2aXNpb24tPnJlbW92ZV9wZW5kaW5nKSB7CisJCWluZm8oIiVzOiBGaW5hbCBkaXNjb25uZWN0IiwgX19GVU5DVElPTl9fKTsKKwkJdXNidmlzaW9uX3JlbGVhc2UodXNidmlzaW9uKTsKKwl9CisKKwlQREVCVUcoREJHX0lPLCAic3VjY2VzcyIpOworCisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogdXNidmlzaW9uX2lvY3RsKCkKKyAqCisgKiBUaGlzIGlzIHBhcnQgb2YgVmlkZW8gNCBMaW51eCBBUEkuIFRoZSBwcm9jZWR1cmUgaGFuZGxlcyBpb2N0bCgpIGNhbGxzLgorICoKKyAqLworc3RhdGljIGludCB1c2J2aXNpb25fdjRsMl9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodXNidmlzaW9uKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCQkvKiBpb2N0bHMgdG8gYWxsb3cgZGlyZWN0IGFjY2VzIHRvIHRoZSBOVDEwMHggcmVnaXN0ZXJzICovCisJCWNhc2UgVklESU9DX0lOVF9HX1JFR0lTVEVSOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnID0gYXJnOworCQkJaW50IGVyckNvZGU7CisKKwkJCWlmIChyZWctPmkyY19pZCAhPSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJLyogTlQxMDB4IGhhcyBhIDgtYml0IHJlZ2lzdGVyIHNwYWNlICovCisJCQllcnJDb2RlID0gdXNidmlzaW9uX3JlYWRfcmVnKHVzYnZpc2lvbiwgcmVnLT5yZWcmMHhmZik7CisJCQlpZiAoZXJyQ29kZSA8IDApIHsKKwkJCQllcnIoIiVzOiBWSURJT0NfSU5UX0dfUkVHSVNURVIgZmFpbGVkOiBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgZXJyQ29kZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZWctPnZhbD0odW5zaWduZWQgY2hhcillcnJDb2RlOworCQkJCVBERUJVRyhEQkdfSU9DVEwsICJWSURJT0NfSU5UX0dfUkVHSVNURVIgcmVnPTB4JTAyWCwgdmFsdWU9MHglMDJYIiwKKwkJCQkJCQkodW5zaWduZWQgaW50KXJlZy0+cmVnLCByZWctPnZhbCk7CisJCQkJZXJyQ29kZSA9IDA7IC8vIE5vIGVycm9yCisJCQl9CisJCQlyZXR1cm4gZXJyQ29kZTsKKwkJfQorCQljYXNlIFZJRElPQ19JTlRfU19SRUdJU1RFUjoKKwkJeworCQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZyA9IGFyZzsKKwkJCWludCBlcnJDb2RlOworCisJCQlpZiAocmVnLT5pMmNfaWQgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCQlyZXR1cm4gLUVQRVJNOworCQkJZXJyQ29kZSA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCByZWctPnJlZyYweGZmLCByZWctPnZhbCk7CisJCQlpZiAoZXJyQ29kZSA8IDApIHsKKwkJCQllcnIoIiVzOiBWSURJT0NfSU5UX1NfUkVHSVNURVIgZmFpbGVkOiBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgZXJyQ29kZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlQREVCVUcoREJHX0lPQ1RMLCAiVklESU9DX0lOVF9TX1JFR0lTVEVSIHJlZz0weCUwMlgsIHZhbHVlPTB4JTAyWCIsCisJCQkJCQkJKHVuc2lnbmVkIGludClyZWctPnJlZywgcmVnLT52YWwpOworCQkJCWVyckNvZGUgPSAwOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgorCQljYXNlIFZJRElPQ19RVUVSWUNBUDoKKwkJeworCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdmM9YXJnOworCisJCQltZW1zZXQodmMsIDAsIHNpemVvZigqdmMpKTsKKwkJCXN0cmxjcHkodmMtPmRyaXZlciwgIlVTQlZpc2lvbiIsIHNpemVvZih2Yy0+ZHJpdmVyKSk7CisJCQlzdHJsY3B5KHZjLT5jYXJkLCB1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uTW9kZWxTdHJpbmcsCisJCQkJc2l6ZW9mKHZjLT5jYXJkKSk7CisJCQlzdHJsY3B5KHZjLT5idXNfaW5mbywgdXNidmlzaW9uLT5kZXYtPmRldi5idXNfaWQsCisJCQkJc2l6ZW9mKHZjLT5idXNfaW5mbykpOworCQkJdmMtPnZlcnNpb24gPSBVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT047CisJCQl2Yy0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkJVjRMMl9DQVBfQVVESU8gfAorCQkJCVY0TDJfQ0FQX1JFQURXUklURSB8CisJCQkJVjRMMl9DQVBfU1RSRUFNSU5HIHwKKwkJCQkodXNidmlzaW9uLT5oYXZlX3R1bmVyID8gVjRMMl9DQVBfVFVORVIgOiAwKTsKKwkJCVBERUJVRyhEQkdfSU9DVEwsICJWSURJT0NfUVVFUllDQVAiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKKwkJeworCQkJc3RydWN0IHY0bDJfaW5wdXQgKnZpID0gYXJnOworCQkJaW50IGNoYW47CisKKwkJCWlmICgodmktPmluZGV4ID49IHVzYnZpc2lvbi0+dmlkZW9faW5wdXRzKSB8fCAodmktPmluZGV4IDwgMCkgKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKHVzYnZpc2lvbi0+aGF2ZV90dW5lcikgeworCQkJCWNoYW4gPSB2aS0+aW5kZXg7CisJCQl9CisJCQllbHNlIHsKKwkJCQljaGFuID0gdmktPmluZGV4ICsgMTsgLy9za2lwIFRlbGV2aXNpb24gc3RyaW5nCisJCQl9CisJCQlzd2l0Y2goY2hhbikgeworCQkJCWNhc2UgMDoKKwkJCQkJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5WaWRlb0NoYW5uZWxzID09IDQpIHsKKwkJCQkJCXN0cmNweSh2aS0+bmFtZSwgIldoaXRlIFZpZGVvIElucHV0Iik7CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQlzdHJjcHkodmktPm5hbWUsICJUZWxldmlzaW9uIik7CisJCQkJCQl2aS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKKwkJCQkJCXZpLT5hdWRpb3NldCA9IDE7CisJCQkJCQl2aS0+dHVuZXIgPSBjaGFuOworCQkJCQkJdmktPnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9TRUNBTTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIDE6CisJCQkJCXZpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJCQkJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5WaWRlb0NoYW5uZWxzID09IDQpIHsKKwkJCQkJCXN0cmNweSh2aS0+bmFtZSwgIkdyZWVuIFZpZGVvIElucHV0Iik7CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQlzdHJjcHkodmktPm5hbWUsICJDb21wb3NpdGUgVmlkZW8gSW5wdXQiKTsKKwkJCQkJfQorCQkJCQl2aS0+c3RkID0gVjRMMl9TVERfUEFMOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6CisJCQkJCXZpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJCQkJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5WaWRlb0NoYW5uZWxzID09IDQpIHsKKwkJCQkJCXN0cmNweSh2aS0+bmFtZSwgIlllbGxvdyBWaWRlbyBJbnB1dCIpOworCQkJCQl9CisJCQkJCWVsc2UgeworCQkJCQlzdHJjcHkodmktPm5hbWUsICJTLVZpZGVvIElucHV0Iik7CisJCQkJCX0KKwkJCQkJdmktPnN0ZCA9IFY0TDJfU1REX1BBTDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCQl2aS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJCQkJCXN0cmNweSh2aS0+bmFtZSwgIlJlZCBWaWRlbyBJbnB1dCIpOworCQkJCQl2aS0+c3RkID0gVjRMMl9TVERfUEFMOworCQkJCQlicmVhazsKKwkJCX0KKwkJCVBERUJVRyhEQkdfSU9DVEwsICJWSURJT0NfRU5VTUlOUFVUIG5hbWU9JXM6JWQgdHVuZXJzPSVkIHR5cGU9JWQgbm9ybT0leCIsCisJCQkgICAgICAgdmktPm5hbWUsIHZpLT5pbmRleCwgdmktPnR1bmVyLHZpLT50eXBlLChpbnQpdmktPnN0ZCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19FTlVNU1REOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqZSA9IGFyZzsKKwkJCXVuc2lnbmVkIGludCBpOworCQkJaW50IHJldDsKKworCQkJaSA9IGUtPmluZGV4OworCQkJaWYgKGkgPj0gVFZOT1JNUykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldCA9IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChlLCB0dm5vcm1zW2UtPmluZGV4XS5pZCwKKwkJCQkJCSAgICAgICB0dm5vcm1zW2UtPmluZGV4XS5uYW1lKTsKKwkJCWUtPmluZGV4ID0gaTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19HX0lOUFVUOgorCQl7CisJCQlpbnQgKmlucHV0ID0gYXJnOworCQkJKmlucHV0ID0gdXNidmlzaW9uLT5jdGxfaW5wdXQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0lOUFVUOgorCQl7CisJCQlpbnQgKmlucHV0ID0gYXJnOworCQkJaWYgKCgqaW5wdXQgPj0gdXNidmlzaW9uLT52aWRlb19pbnB1dHMpIHx8ICgqaW5wdXQgPCAwKSApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl1c2J2aXNpb24tPmN0bF9pbnB1dCA9ICppbnB1dDsKKworCQkJZG93bigmdXNidmlzaW9uLT5sb2NrKTsKKwkJCXVzYnZpc2lvbl9tdXhzZWwodXNidmlzaW9uLCB1c2J2aXNpb24tPmN0bF9pbnB1dCk7CisJCQl1c2J2aXNpb25fc2V0X2lucHV0KHVzYnZpc2lvbik7CisJCQl1c2J2aXNpb25fc2V0X291dHB1dCh1c2J2aXNpb24sIHVzYnZpc2lvbi0+Y3Vyd2lkdGgsIHVzYnZpc2lvbi0+Y3VyaGVpZ2h0KTsKKwkJCXVwKCZ1c2J2aXNpb24tPmxvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfR19TVEQ6CisJCXsKKwkJCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKKworCQkJKmlkID0gdXNidmlzaW9uLT50dm5vcm0tPmlkOworCisJCQlQREVCVUcoREJHX0lPQ1RMLCAiVklESU9DX0dfU1REIHN0ZF9pZD0lcyIsIHVzYnZpc2lvbi0+dHZub3JtLT5uYW1lKTsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX1NfU1REOgorCQl7CisJCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7CisJCQl1bnNpZ25lZCBpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IFRWTk9STVM7IGkrKykKKwkJCQlpZiAoKmlkID09IHR2bm9ybXNbaV0uaWQpCisJCQkJCWJyZWFrOworCQkJaWYgKGkgPT0gVFZOT1JNUykKKwkJCQlmb3IgKGkgPSAwOyBpIDwgVFZOT1JNUzsgaSsrKQorCQkJCQlpZiAoKmlkICYgdHZub3Jtc1tpXS5pZCkKKwkJCQkJCWJyZWFrOworCQkJaWYgKGkgPT0gVFZOT1JNUykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJZG93bigmdXNidmlzaW9uLT5sb2NrKTsKKwkJCXVzYnZpc2lvbi0+dHZub3JtID0gJnR2bm9ybXNbaV07CisKKwkJCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfU19TVEQsCisJCQkJCSAmdXNidmlzaW9uLT50dm5vcm0tPmlkKTsKKworCQkJdXAoJnVzYnZpc2lvbi0+bG9jayk7CisKKwkJCVBERUJVRyhEQkdfSU9DVEwsICJWSURJT0NfU19TVEQgc3RkX2lkPSVzIiwgdXNidmlzaW9uLT50dm5vcm0tPm5hbWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfR19UVU5FUjoKKwkJeworCQkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gYXJnOworCisJCQlpZiAoIXVzYnZpc2lvbi0+aGF2ZV90dW5lciB8fCB2dC0+aW5kZXgpCS8vIE9ubHkgdHVuZXIgMAorCQkJCXJldHVybiAtRUlOVkFMOworCQkJc3RyY3B5KHZ0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOworCQkJLyogTGV0IGNsaWVudHMgZmlsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoaXMgc3RydWN0ICovCisJCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbixWSURJT0NfR19UVU5FUix2dCk7CisKKwkJCVBERUJVRyhEQkdfSU9DVEwsICJWSURJT0NfR19UVU5FUiBzaWduYWw9JXgsIGFmYz0leCIsdnQtPnNpZ25hbCx2dC0+YWZjKTsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX1NfVFVORVI6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKKworCQkJLy8gT25seSBubyBvciBvbmUgdHVuZXIgZm9yIG5vdworCQkJaWYgKCF1c2J2aXNpb24tPmhhdmVfdHVuZXIgfHwgdnQtPmluZGV4KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJLyogbGV0IGNsaWVudHMgaGFuZGxlIHRoaXMgKi8KKwkJCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLFZJRElPQ19TX1RVTkVSLHZ0KTsKKworCQkJUERFQlVHKERCR19JT0NUTCwgIlZJRElPQ19TX1RVTkVSIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKKwkJeworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxID0gYXJnOworCisJCQlmcmVxLT50dW5lciA9IDA7IC8vIE9ubHkgb25lIHR1bmVyCisJCQlmcmVxLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJCQlmcmVxLT5mcmVxdWVuY3kgPSB1c2J2aXNpb24tPmZyZXE7CisJCQlQREVCVUcoREJHX0lPQ1RMLCAiVklESU9DX0dfRlJFUVVFTkNZIGZyZXE9MHglWCIsICh1bnNpZ25lZClmcmVxLT5mcmVxdWVuY3kpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSA9IGFyZzsKKworCQkJLy8gT25seSBubyBvciBvbmUgdHVuZXIgZm9yIG5vdworCQkJaWYgKCF1c2J2aXNpb24tPmhhdmVfdHVuZXIgfHwgZnJlcS0+dHVuZXIpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCXVzYnZpc2lvbi0+ZnJlcSA9IGZyZXEtPmZyZXF1ZW5jeTsKKwkJCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBjbWQsIGZyZXEpOworCQkJUERFQlVHKERCR19JT0NUTCwgIlZJRElPQ19TX0ZSRVFVRU5DWSBmcmVxPTB4JVgiLCAodW5zaWduZWQpZnJlcS0+ZnJlcXVlbmN5KTsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX0dfQVVESU86CisJCXsKKwkJCXN0cnVjdCB2NGwyX2F1ZGlvICp2ID0gYXJnOworCQkJbWVtc2V0KHYsMCwgc2l6ZW9mKHYpKTsKKwkJCXN0cmNweSh2LT5uYW1lLCAiVFYiKTsKKwkJCVBERUJVRyhEQkdfSU9DVEwsICJWSURJT0NfR19BVURJTyIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfU19BVURJTzoKKwkJeworCQkJc3RydWN0IHY0bDJfYXVkaW8gKnYgPSBhcmc7CisJCQlpZih2LT5pbmRleCkgeworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJUERFQlVHKERCR19JT0NUTCwgIlZJRElPQ19TX0FVRElPIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCA9IGFyZzsKKwkJCWludCBpZD1jdHJsLT5pZDsKKworCQkJbWVtc2V0KGN0cmwsMCxzaXplb2YoKmN0cmwpKTsKKwkJCWN0cmwtPmlkPWlkOworCisJCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgY21kLCBhcmcpOworCisJCQlpZiAoY3RybC0+dHlwZSkKKwkJCQlyZXR1cm4gMDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJUERFQlVHKERCR19JT0NUTCwiVklESU9DX1FVRVJZQ1RSTCBpZD0leCB2YWx1ZT0leCIsY3RybC0+aWQsY3RybC0+dHlwZSk7CisJCX0KKwkJY2FzZSBWSURJT0NfR19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCQkJUERFQlVHKERCR19JT0NUTCwiVklESU9DX0dfQ1RSTCBpZD0leCB2YWx1ZT0leCIsY3RybC0+aWQsY3RybC0+dmFsdWUpOworCQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfU19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCQlQREVCVUcoREJHX0lPQ1RMLCAiVklESU9DX1NfQ1RSTCBpZD0leCB2YWx1ZT0leCIsY3RybC0+aWQsY3RybC0+dmFsdWUpOworCQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19TX0NUUkwsIGN0cmwpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfUkVRQlVGUzoKKwkJeworCQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnZyID0gYXJnOworCQkJaW50IHJldDsKKworCQkJUkVTVFJJQ1RfVE9fUkFOR0UodnItPmNvdW50LDEsVVNCVklTSU9OX05VTUZSQU1FUyk7CisKKwkJCS8vIENoZWNrIGlucHV0IHZhbGlkaXR5IDogdGhlIHVzZXIgbXVzdCBkbyBhIFZJREVPIENBUFRVUkUgYW5kIE1NQVAgbWV0aG9kLgorCQkJaWYoKHZyLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgfHwKKwkJCSAgICh2ci0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZih1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fT24pIHsKKwkJCQlpZiAoKHJldCA9IHVzYnZpc2lvbl9zdHJlYW1faW50ZXJydXB0KHVzYnZpc2lvbikpKQorCQkJCSAgICByZXR1cm4gcmV0OworCQkJfQorCisJCQl1c2J2aXNpb25fZW1wdHlfZnJhbWVxdWV1ZXModXNidmlzaW9uKTsKKworCQkJdXNidmlzaW9uLT5jdXJGcmFtZSA9IE5VTEw7CisKKwkJCVBERUJVRyhEQkdfSU9DVEwsICJWSURJT0NfUkVRQlVGUyBjb3VudD0lZCIsdnItPmNvdW50KTsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX1FVRVJZQlVGOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnZiID0gYXJnOworCQkJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqZnJhbWU7CisKKwkJCS8vIEZJWE1FIDogbXVzdCBjb250cm9sIHRoYXQgYnVmZmVycyBhcmUgbWFwcGVkIChWSURJT0NfUkVRQlVGUyBoYXMgYmVlbiBjYWxsZWQpCisKKwkJCWlmKHZiLT50eXBlICE9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUpIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWlmKHZiLT5pbmRleD49VVNCVklTSU9OX05VTUZSQU1FUykgIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCS8vIFVwZGF0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGZyYW1lIHN0YXRlCisJCQl2Yi0+ZmxhZ3MgPSAwOworCQkJZnJhbWUgPSAmdXNidmlzaW9uLT5mcmFtZVt2Yi0+aW5kZXhdOworCQkJaWYoZnJhbWUtPmdyYWJzdGF0ZSA+PSBGcmFtZVN0YXRlX1JlYWR5KQorCQkJCXZiLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKKwkJCWlmKGZyYW1lLT5ncmFic3RhdGUgPj0gRnJhbWVTdGF0ZV9Eb25lKQorCQkJCXZiLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7CisJCQlpZihmcmFtZS0+Z3JhYnN0YXRlID09IEZyYW1lU3RhdGVfVW51c2VkKQorCQkJCXZiLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKwkJCXZiLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCisJCQl2Yi0+bS5vZmZzZXQgPSB2Yi0+aW5kZXgqdXNidmlzaW9uLT5tYXhfZnJhbWVfc2l6ZTsKKworCQkJdmItPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJCQl2Yi0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCQl2Yi0+bGVuZ3RoID0gdXNidmlzaW9uLT5jdXJ3aWR0aCp1c2J2aXNpb24tPmN1cmhlaWdodCp1c2J2aXNpb24tPnBhbGV0dGUuYnl0ZXNfcGVyX3BpeGVsOworCQkJdmItPnRpbWVzdGFtcCA9IHVzYnZpc2lvbi0+ZnJhbWVbdmItPmluZGV4XS50aW1lc3RhbXA7CisJCQl2Yi0+c2VxdWVuY2UgPSB1c2J2aXNpb24tPmZyYW1lW3ZiLT5pbmRleF0uc2VxdWVuY2U7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19RQlVGOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnZiID0gYXJnOworCQkJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqZnJhbWU7CisJCQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwkJCS8vIEZJWE1FIDogd29ya3Mgb25seSBvbiBWSURFT19DQVBUVVJFIE1PREUsIE1NQVAuCisJCQlpZih2Yi0+dHlwZSAhPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFKSB7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZih2Yi0+aW5kZXg+PVVTQlZJU0lPTl9OVU1GUkFNRVMpICB7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWZyYW1lID0gJnVzYnZpc2lvbi0+ZnJhbWVbdmItPmluZGV4XTsKKworCQkJaWYgKGZyYW1lLT5ncmFic3RhdGUgIT0gRnJhbWVTdGF0ZV9VbnVzZWQpIHsKKwkJCQlyZXR1cm4gLUVBR0FJTjsKKwkJCX0KKworCQkJLyogTWFyayBpdCBhcyByZWFkeSBhbmQgZW5xdWV1ZSBmcmFtZSAqLworCQkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZyYW1lU3RhdGVfUmVhZHk7CisJCQlmcmFtZS0+c2NhbnN0YXRlID0gU2NhblN0YXRlX1NjYW5uaW5nOworCQkJZnJhbWUtPnNjYW5sZW5ndGggPSAwOwkvKiBBY2N1bXVsYXRlZCBpbiB1c2J2aXNpb25fcGFyc2VfZGF0YSgpICovCisKKwkJCXZiLT5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19ET05FOworCisJCQkvKiBzZXQgdjRsMl9mb3JtYXQgaW5kZXggKi8KKwkJCWZyYW1lLT52NGwyX2Zvcm1hdCA9IHVzYnZpc2lvbi0+cGFsZXR0ZTsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYnZpc2lvbi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJCQlsaXN0X2FkZF90YWlsKCZ1c2J2aXNpb24tPmZyYW1lW3ZiLT5pbmRleF0uZnJhbWUsICZ1c2J2aXNpb24tPmlucXVldWUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNidmlzaW9uLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCQkJUERFQlVHKERCR19JT0NUTCwgIlZJRElPQ19RQlVGIGZyYW1lICMlZCIsdmItPmluZGV4KTsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX0RRQlVGOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnZiID0gYXJnOworCQkJaW50IHJldDsKKwkJCXN0cnVjdCB1c2J2aXNpb25fZnJhbWUgKmY7CisJCQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwkJCWlmICh2Yi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmIChsaXN0X2VtcHR5KCYodXNidmlzaW9uLT5vdXRxdWV1ZSkpKSB7CisJCQkJaWYgKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IFN0cmVhbV9JZGxlKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJCQkJKHVzYnZpc2lvbi0+d2FpdF9mcmFtZSwKKwkJCQkJICFsaXN0X2VtcHR5KCYodXNidmlzaW9uLT5vdXRxdWV1ZSkpKTsKKwkJCQlpZiAocmV0KQorCQkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNidmlzaW9uLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJCWYgPSBsaXN0X2VudHJ5KHVzYnZpc2lvbi0+b3V0cXVldWUubmV4dCwKKwkJCQkgICAgICAgc3RydWN0IHVzYnZpc2lvbl9mcmFtZSwgZnJhbWUpOworCQkJbGlzdF9kZWwodXNidmlzaW9uLT5vdXRxdWV1ZS5uZXh0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYnZpc2lvbi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwkJCWYtPmdyYWJzdGF0ZSA9IEZyYW1lU3RhdGVfVW51c2VkOworCisJCQl2Yi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwkJCXZiLT5mbGFncyA9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEIHwgVjRMMl9CVUZfRkxBR19RVUVVRUQgfCBWNEwyX0JVRl9GTEFHX0RPTkU7CisJCQl2Yi0+aW5kZXggPSBmLT5pbmRleDsKKwkJCXZiLT5zZXF1ZW5jZSA9IGYtPnNlcXVlbmNlOworCQkJdmItPnRpbWVzdGFtcCA9IGYtPnRpbWVzdGFtcDsKKwkJCXZiLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJCXZiLT5ieXRlc3VzZWQgPSBmLT5zY2FubGVuZ3RoOworCisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19TVFJFQU1PTjoKKwkJeworCQkJaW50IGI9VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJCQl1c2J2aXNpb24tPnN0cmVhbWluZyA9IFN0cmVhbV9PbjsKKworCQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX1NUUkVBTU9OICwgJmIpOworCisJCQlQREVCVUcoREJHX0lPQ1RMLCAiVklESU9DX1NUUkVBTU9OIik7CisKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKKwkJeworCQkJaW50ICp0eXBlID0gYXJnOworCQkJaW50IGI9VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJCQlpZiAoKnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZih1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fT24pIHsKKwkJCQl1c2J2aXNpb25fc3RyZWFtX2ludGVycnVwdCh1c2J2aXNpb24pOworCQkJCS8vIFN0b3AgYWxsIHZpZGVvIHN0cmVhbWluZ3MKKwkJCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbixWSURJT0NfU1RSRUFNT0ZGICwgJmIpOworCQkJfQorCQkJdXNidmlzaW9uX2VtcHR5X2ZyYW1lcXVldWVzKHVzYnZpc2lvbik7CisKKwkJCVBERUJVRyhEQkdfSU9DVEwsICJWSURJT0NfU1RSRUFNT0ZGIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19FTlVNX0ZNVDoKKwkJeworCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqdmZkID0gYXJnOworCisJCQlpZih2ZmQtPmluZGV4Pj1VU0JWSVNJT05fU1VQUE9SVEVEX1BBTEVUVEVTLTEpIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXZmZC0+ZmxhZ3MgPSAwOworCQkJdmZkLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkJc3RyY3B5KHZmZC0+ZGVzY3JpcHRpb24sdXNidmlzaW9uX3Y0bDJfZm9ybWF0W3ZmZC0+aW5kZXhdLmRlc2MpOworCQkJdmZkLT5waXhlbGZvcm1hdCA9IHVzYnZpc2lvbl92NGwyX2Zvcm1hdFt2ZmQtPmluZGV4XS5mb3JtYXQ7CisJCQltZW1zZXQodmZkLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHZmZC0+cmVzZXJ2ZWQpKTsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX0dfRk1UOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKnZmID0gYXJnOworCisJCQlzd2l0Y2ggKHZmLT50eXBlKSB7CisJCQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCQkJeworCQkJCQl2Zi0+Zm10LnBpeC53aWR0aCA9IHVzYnZpc2lvbi0+Y3Vyd2lkdGg7CisJCQkJCXZmLT5mbXQucGl4LmhlaWdodCA9IHVzYnZpc2lvbi0+Y3VyaGVpZ2h0OworCQkJCQl2Zi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IHVzYnZpc2lvbi0+cGFsZXR0ZS5mb3JtYXQ7CisJCQkJCXZmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9ICB1c2J2aXNpb24tPmN1cndpZHRoKnVzYnZpc2lvbi0+cGFsZXR0ZS5ieXRlc19wZXJfcGl4ZWw7CisJCQkJCXZmLT5mbXQucGl4LnNpemVpbWFnZSA9IHZmLT5mbXQucGl4LmJ5dGVzcGVybGluZSp1c2J2aXNpb24tPmN1cmhlaWdodDsKKwkJCQkJdmYtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJCQkJCXZmLT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOyAvKiBBbHdheXMgcHJvZ3Jlc3NpdmUgaW1hZ2UgKi8KKwkJCQkJUERFQlVHKERCR19JT0NUTCwgIlZJRElPQ19HX0ZNVCB3PSVkLCBoPSVkLCBmb3JtYXQ9JXMiLAorCQkJCQkgICAgICAgdmYtPmZtdC5waXgud2lkdGgsIHZmLT5mbXQucGl4LmhlaWdodCx1c2J2aXNpb24tPnBhbGV0dGUuZGVzYyk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCQlkZWZhdWx0OgorCQkJCQlQREVCVUcoREJHX0lPQ1RMLCAiVklESU9DX0dfRk1UIGludmFsaWQgdHlwZSAlZCIsdmYtPnR5cGUpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX1RSWV9GTVQ6CisJCWNhc2UgVklESU9DX1NfRk1UOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKnZmID0gYXJnOworCQkJaW50IGZvcm1hdElkeCxyZXQ7CisKKwkJCXN3aXRjaCh2Zi0+dHlwZSkgeworCQkJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQkJCXsKKwkJCQkJLyogRmluZCByZXF1ZXN0ZWQgZm9ybWF0IGluIGF2YWlsYWJsZSBvbmVzICovCisJCQkJCWZvcihmb3JtYXRJZHg9MDtmb3JtYXRJZHg8VVNCVklTSU9OX1NVUFBPUlRFRF9QQUxFVFRFUztmb3JtYXRJZHgrKykgeworCQkJCQkJaWYodmYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gdXNidmlzaW9uX3Y0bDJfZm9ybWF0W2Zvcm1hdElkeF0uZm9ybWF0KSB7CisJCQkJCQkJdXNidmlzaW9uLT5wYWxldHRlID0gdXNidmlzaW9uX3Y0bDJfZm9ybWF0W2Zvcm1hdElkeF07CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJLyogcm9idXN0bmVzcyAqLworCQkJCQlpZihmb3JtYXRJZHggPT0gVVNCVklTSU9OX1NVUFBPUlRFRF9QQUxFVFRFUykgeworCQkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJCX0KKwkJCQkJUkVTVFJJQ1RfVE9fUkFOR0UodmYtPmZtdC5waXgud2lkdGgsIE1JTl9GUkFNRV9XSURUSCwgTUFYX0ZSQU1FX1dJRFRIKTsKKwkJCQkJUkVTVFJJQ1RfVE9fUkFOR0UodmYtPmZtdC5waXguaGVpZ2h0LCBNSU5fRlJBTUVfSEVJR0hULCBNQVhfRlJBTUVfSEVJR0hUKTsKKworCQkJCQl2Zi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSB2Zi0+Zm10LnBpeC53aWR0aCp1c2J2aXNpb24tPnBhbGV0dGUuYnl0ZXNfcGVyX3BpeGVsOworCQkJCQl2Zi0+Zm10LnBpeC5zaXplaW1hZ2UgPSB2Zi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUqdmYtPmZtdC5waXguaGVpZ2h0OworCisJCQkJCWlmKGNtZCA9PSBWSURJT0NfVFJZX0ZNVCkgeworCQkJCQkJUERFQlVHKERCR19JT0NUTCwgIlZJRElPQ19UUllfRk1UIGdyYWJkaXNwbGF5IHc9JWQsIGg9JWQsIGZvcm1hdD0lcyIsCisJCQkJCSAgICAgICB2Zi0+Zm10LnBpeC53aWR0aCwgdmYtPmZtdC5waXguaGVpZ2h0LHVzYnZpc2lvbi0+cGFsZXR0ZS5kZXNjKTsKKwkJCQkJCXJldHVybiAwOworCQkJCQl9CisKKwkJCQkJLyogc3RvcCBpbyBpbiBjYXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi8KKwkJCQkJaWYodXNidmlzaW9uLT5zdHJlYW1pbmcgPT0gU3RyZWFtX09uKSB7CisJCQkJCQlpZiAoKHJldCA9IHVzYnZpc2lvbl9zdHJlYW1faW50ZXJydXB0KHVzYnZpc2lvbikpKQorCQkJCQkJCXJldHVybiByZXQ7CisJCQkJCX0KKwkJCQkJdXNidmlzaW9uX2VtcHR5X2ZyYW1lcXVldWVzKHVzYnZpc2lvbik7CisKKwkJCQkJdXNidmlzaW9uLT5jdXJGcmFtZSA9IE5VTEw7CisKKwkJCQkJLy8gYnkgbm93IHdlIGFyZSBjb21taXR0ZWQgdG8gdGhlIG5ldyBkYXRhLi4uCisJCQkJCWRvd24oJnVzYnZpc2lvbi0+bG9jayk7CisJCQkJCXVzYnZpc2lvbl9zZXRfb3V0cHV0KHVzYnZpc2lvbiwgdmYtPmZtdC5waXgud2lkdGgsIHZmLT5mbXQucGl4LmhlaWdodCk7CisJCQkJCXVwKCZ1c2J2aXNpb24tPmxvY2spOworCisJCQkJCVBERUJVRyhEQkdfSU9DVEwsICJWSURJT0NfU19GTVQgZ3JhYmRpc3BsYXkgdz0lZCwgaD0lZCwgZm9ybWF0PSVzIiwKKwkJCQkJICAgICAgIHZmLT5mbXQucGl4LndpZHRoLCB2Zi0+Zm10LnBpeC5oZWlnaHQsdXNidmlzaW9uLT5wYWxldHRlLmRlc2MpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJZGVmYXVsdDoKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYnZpc2lvbl92NGwyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgdXNidmlzaW9uX3Y0bDJfZG9faW9jdGwpOworfQorCisKK3N0YXRpYyBzc2l6ZV90IHVzYnZpc2lvbl92NGwyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1ZiwKKwkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJaW50IG5vYmxvY2sgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwlpbnQgcmV0LGk7CisJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqZnJhbWU7CisKKwlQREVCVUcoREJHX0lPLCAiJXM6ICVsZCBieXRlcywgbm9ibG9jaz0lZCIsIF9fRlVOQ1RJT05fXywgKHVuc2lnbmVkIGxvbmcpY291bnQsIG5vYmxvY2spOworCisJaWYgKCFVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodXNidmlzaW9uKSB8fCAoYnVmID09IE5VTEwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIG5vIHN0cmVhbSBpcyBydW5uaW5nLCBtYWtlIGl0IHJ1bm5pbmcgISAqLworCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gU3RyZWFtX09uOworCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLFZJRElPQ19TVFJFQU1PTiAsIE5VTEwpOworCisJLyogRmlyc3QsIGVucXVldWUgYXMgbWFueSBmcmFtZXMgYXMgcG9zc2libGUgKGxpa2UgYSB1c2VyIG9mIFZJRElPQ19RQlVGIHdvdWxkIGRvKSAqLworCWZvcihpPTA7aTxVU0JWSVNJT05fTlVNRlJBTUVTO2krKykgeworCQlmcmFtZSA9ICZ1c2J2aXNpb24tPmZyYW1lW2ldOworCQlpZihmcmFtZS0+Z3JhYnN0YXRlID09IEZyYW1lU3RhdGVfVW51c2VkKSB7CisJCQkvKiBNYXJrIGl0IGFzIHJlYWR5IGFuZCBlbnF1ZXVlIGZyYW1lICovCisJCQlmcmFtZS0+Z3JhYnN0YXRlID0gRnJhbWVTdGF0ZV9SZWFkeTsKKwkJCWZyYW1lLT5zY2Fuc3RhdGUgPSBTY2FuU3RhdGVfU2Nhbm5pbmc7CisJCQlmcmFtZS0+c2Nhbmxlbmd0aCA9IDA7CS8qIEFjY3VtdWxhdGVkIGluIHVzYnZpc2lvbl9wYXJzZV9kYXRhKCkgKi8KKworCQkJLyogc2V0IHY0bDJfZm9ybWF0IGluZGV4ICovCisJCQlmcmFtZS0+djRsMl9mb3JtYXQgPSB1c2J2aXNpb24tPnBhbGV0dGU7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2J2aXNpb24tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQkJbGlzdF9hZGRfdGFpbCgmZnJhbWUtPmZyYW1lLCAmdXNidmlzaW9uLT5pbnF1ZXVlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYnZpc2lvbi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJCX0KKwl9CisKKwkvKiBUaGVuIHRyeSB0byBzdGVhbCBhIGZyYW1lIChsaWtlIGEgVklESU9DX0RRQlVGIHdvdWxkIGRvKSAqLworCWlmIChsaXN0X2VtcHR5KCYodXNidmlzaW9uLT5vdXRxdWV1ZSkpKSB7CisJCWlmKG5vYmxvY2spCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJCSh1c2J2aXNpb24tPndhaXRfZnJhbWUsCisJCQkgIWxpc3RfZW1wdHkoJih1c2J2aXNpb24tPm91dHF1ZXVlKSkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNidmlzaW9uLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlmcmFtZSA9IGxpc3RfZW50cnkodXNidmlzaW9uLT5vdXRxdWV1ZS5uZXh0LAorCQkJICAgc3RydWN0IHVzYnZpc2lvbl9mcmFtZSwgZnJhbWUpOworCWxpc3RfZGVsKHVzYnZpc2lvbi0+b3V0cXVldWUubmV4dCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNidmlzaW9uLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCS8qIEFuIGVycm9yIHJldHVybnMgYW4gZW1wdHkgZnJhbWUgKi8KKwlpZiAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGcmFtZVN0YXRlX0Vycm9yKSB7CisJCWZyYW1lLT5ieXRlc19yZWFkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJUERFQlVHKERCR19JTywgIiVzOiBmcm14PSVkLCBieXRlc19yZWFkPSVsZCwgc2Nhbmxlbmd0aD0lbGQiLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgICBmcmFtZS0+aW5kZXgsIGZyYW1lLT5ieXRlc19yZWFkLCBmcmFtZS0+c2Nhbmxlbmd0aCk7CisKKwkvKiBjb3B5IGJ5dGVzIHRvIHVzZXIgc3BhY2U7IHdlIGFsbG93IGZvciBwYXJ0aWFscyByZWFkcyAqLworCWlmICgoY291bnQgKyBmcmFtZS0+Ynl0ZXNfcmVhZCkgPiAodW5zaWduZWQgbG9uZylmcmFtZS0+c2Nhbmxlbmd0aCkKKwkJY291bnQgPSBmcmFtZS0+c2Nhbmxlbmd0aCAtIGZyYW1lLT5ieXRlc19yZWFkOworCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGZyYW1lLT5kYXRhICsgZnJhbWUtPmJ5dGVzX3JlYWQsIGNvdW50KSkgeworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlmcmFtZS0+Ynl0ZXNfcmVhZCArPSBjb3VudDsKKwlQREVCVUcoREJHX0lPLCAiJXM6IHtjb3B5fSBjb3VudCB1c2VkPSVsZCwgbmV3IGJ5dGVzX3JlYWQ9JWxkIiwgX19GVU5DVElPTl9fLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpY291bnQsIGZyYW1lLT5ieXRlc19yZWFkKTsKKworCS8vIEZvciBub3csIGZvcmdldCB0aGUgZnJhbWUgaWYgaXQgaGFzIG5vdCBiZWVuIHJlYWQgaW4gb25lIHNob3QuCisvKiAJaWYgKGZyYW1lLT5ieXRlc19yZWFkID49IGZyYW1lLT5zY2FubGVuZ3RoKSB7Ly8gQWxsIGRhdGEgaGFzIGJlZW4gcmVhZCAqLworCQlmcmFtZS0+Ynl0ZXNfcmVhZCA9IDA7CisKKwkJLyogTWFyayBpdCBhcyBhdmFpbGFibGUgdG8gYmUgdXNlZCBhZ2Fpbi4gKi8KKwkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZyYW1lU3RhdGVfVW51c2VkOworLyogCX0gKi8KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCB1c2J2aXNpb25fdjRsMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwl2b2lkICpwb3M7CisJdTMyIGk7CisKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSAoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKworCWRvd24oJnVzYnZpc2lvbi0+bG9jayk7CisKKwlpZiAoIVVTQlZJU0lPTl9JU19PUEVSQVRJT05BTCh1c2J2aXNpb24pKSB7CisJCXVwKCZ1c2J2aXNpb24tPmxvY2spOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHx8CisJICAgIHNpemUgIT0gUEFHRV9BTElHTih1c2J2aXNpb24tPmN1cndpZHRoKnVzYnZpc2lvbi0+Y3VyaGVpZ2h0KnVzYnZpc2lvbi0+cGFsZXR0ZS5ieXRlc19wZXJfcGl4ZWwpKSB7CisJCXVwKCZ1c2J2aXNpb24tPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCVklTSU9OX05VTUZSQU1FUzsgaSsrKSB7CisJCWlmICgoKHVzYnZpc2lvbi0+bWF4X2ZyYW1lX3NpemUqaSkgPj4gUEFHRV9TSElGVCkgPT0gdm1hLT52bV9wZ29mZikKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBVU0JWSVNJT05fTlVNRlJBTUVTKSB7CisJCVBERUJVRyhEQkdfTU1BUCwgIm1tYXA6IHVzZXIgc3VwcGxpZWQgbWFwcGluZyBhZGRyZXNzIGlzIG91dCBvZiByYW5nZSIpOworCQl1cCgmdXNidmlzaW9uLT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVk1fSU8gaXMgZXZlbnR1YWxseSBnb2luZyB0byByZXBsYWNlIFBhZ2VSZXNlcnZlZCBhbHRvZ2V0aGVyICovCisJdm1hLT52bV9mbGFncyB8PSBWTV9JTzsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOwkvKiBhdm9pZCB0byBzd2FwIG91dCB0aGlzIFZNQSAqLworCisJcG9zID0gdXNidmlzaW9uLT5mcmFtZVtpXS5kYXRhOworCXdoaWxlIChzaXplID4gMCkgeworCisJCWlmICh2bV9pbnNlcnRfcGFnZSh2bWEsIHN0YXJ0LCB2bWFsbG9jX3RvX3BhZ2UocG9zKSkpIHsKKwkJCVBERUJVRyhEQkdfTU1BUCwgIm1tYXA6IHZtX2luc2VydF9wYWdlIGZhaWxlZCIpOworCQkJdXAoJnVzYnZpc2lvbi0+bG9jayk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXVwKCZ1c2J2aXNpb24tPmxvY2spOworCXJldHVybiAwOworfQorCisKKy8qCisgKiBIZXJlIGNvbWVzIHRoZSBzdHVmZiBmb3IgcmFkaW8gb24gdXNidmlzaW9uIGJhc2VkIGRldmljZXMKKyAqCisgKi8KK3N0YXRpYyBpbnQgdXNidmlzaW9uX3JhZGlvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHY0bDJfZnJlcXVlbmN5IGZyZXE7CisJaW50IGVyckNvZGUgPSAwOworCisJUERFQlVHKERCR19JTywgIiVzOiIsIF9fRlVOQ1RJT05fXyk7CisKKwlkb3duKCZ1c2J2aXNpb24tPmxvY2spOworCisJaWYgKHVzYnZpc2lvbi0+dXNlcikgeworCQllcnIoIiVzOiBTb21lb25lIHRyaWVkIHRvIG9wZW4gYW4gYWxyZWFkeSBvcGVuZWQgVVNCVmlzaW9uIFJhZGlvISIsIF9fRlVOQ1RJT05fXyk7CisJCWVyckNvZGUgPSAtRUJVU1k7CisJfQorCWVsc2UgeworCQlpZihQb3dlck9uQXRPcGVuKSB7CisJCQl1c2J2aXNpb25fcmVzZXRfcG93ZXJPZmZUaW1lcih1c2J2aXNpb24pOworCQkJaWYgKHVzYnZpc2lvbi0+cG93ZXIgPT0gMCkgeworCQkJCXVzYnZpc2lvbl9wb3dlcl9vbih1c2J2aXNpb24pOworCQkJCXVzYnZpc2lvbl9pbml0X2kyYyh1c2J2aXNpb24pOworCQkJfQorCQl9CisKKwkJLy8gSWYgc28gZmFyIG5vIGVycm9ycyB0aGVuIHdlIHNoYWxsIHN0YXJ0IHRoZSByYWRpbworCQl1c2J2aXNpb24tPnJhZGlvID0gMTsKKwkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sQVVEQ19TRVRfUkFESU8sJnVzYnZpc2lvbi0+dHVuZXJfdHlwZSk7CisJCWZyZXEuZnJlcXVlbmN5ID0gMTUxNzsgLy9TV1IzIEAgOTQuOE1IegorCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX1NfRlJFUVVFTkNZLCAmZnJlcSk7CisJCXVzYnZpc2lvbl9zZXRfYXVkaW8odXNidmlzaW9uLCBVU0JWSVNJT05fQVVESU9fUkFESU8pOworCQl1c2J2aXNpb24tPnVzZXIrKzsKKwl9CisKKwlpZiAoZXJyQ29kZSkgeworCQlpZiAoUG93ZXJPbkF0T3BlbikgeworCQkJdXNidmlzaW9uX2kyY191c2JfZGVsX2J1cygmdXNidmlzaW9uLT5pMmNfYWRhcCk7CisJCQl1c2J2aXNpb25fcG93ZXJfb2ZmKHVzYnZpc2lvbik7CisJCQl1c2J2aXNpb24tPmluaXRpYWxpemVkID0gMDsKKwkJfQorCX0KKwl1cCgmdXNidmlzaW9uLT5sb2NrKTsKKwlyZXR1cm4gZXJyQ29kZTsKK30KKworCitzdGF0aWMgaW50IHVzYnZpc2lvbl9yYWRpb19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSAoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyQ29kZSA9IDA7CisKKwlQREVCVUcoREJHX0lPLCAiIik7CisKKwlkb3duKCZ1c2J2aXNpb24tPmxvY2spOworCisJdXNidmlzaW9uX2F1ZGlvX29mZih1c2J2aXNpb24pOworCXVzYnZpc2lvbi0+cmFkaW89MDsKKwl1c2J2aXNpb24tPnVzZXItLTsKKworCWlmIChQb3dlck9uQXRPcGVuKSB7CisJCXVzYnZpc2lvbl9zZXRfcG93ZXJPZmZUaW1lcih1c2J2aXNpb24pOworCQl1c2J2aXNpb24tPmluaXRpYWxpemVkID0gMDsKKwl9CisKKwl1cCgmdXNidmlzaW9uLT5sb2NrKTsKKworCWlmICh1c2J2aXNpb24tPnJlbW92ZV9wZW5kaW5nKSB7CisJCWluZm8oIiVzOiBGaW5hbCBkaXNjb25uZWN0IiwgX19GVU5DVElPTl9fKTsKKwkJdXNidmlzaW9uX3JlbGVhc2UodXNidmlzaW9uKTsKKwl9CisKKworCVBERUJVRyhEQkdfSU8sICJzdWNjZXNzIik7CisKKwlyZXR1cm4gZXJyQ29kZTsKK30KKworc3RhdGljIGludCB1c2J2aXNpb25fZG9fcmFkaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSAoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghVVNCVklTSU9OX0lTX09QRVJBVElPTkFMKHVzYnZpc2lvbikpCisJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBWSURJT0NfUVVFUllDQVA6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnZjPWFyZzsKKworCQkJbWVtc2V0KHZjLCAwLCBzaXplb2YoKnZjKSk7CisJCQlzdHJsY3B5KHZjLT5kcml2ZXIsICJVU0JWaXNpb24iLCBzaXplb2YodmMtPmRyaXZlcikpOworCQkJc3RybGNweSh2Yy0+Y2FyZCwgdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLk1vZGVsU3RyaW5nLAorCQkJCXNpemVvZih2Yy0+Y2FyZCkpOworCQkJc3RybGNweSh2Yy0+YnVzX2luZm8sIHVzYnZpc2lvbi0+ZGV2LT5kZXYuYnVzX2lkLAorCQkJCXNpemVvZih2Yy0+YnVzX2luZm8pKTsKKwkJCXZjLT52ZXJzaW9uID0gVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OOworCQkJdmMtPmNhcGFiaWxpdGllcyA9ICh1c2J2aXNpb24tPmhhdmVfdHVuZXIgPyBWNEwyX0NBUF9UVU5FUiA6IDApOworCQkJUERFQlVHKERCR19JTywgIlZJRElPQ19RVUVSWUNBUCIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwgPSBhcmc7CisJCQlpbnQgaWQ9Y3RybC0+aWQ7CisKKwkJCW1lbXNldChjdHJsLDAsc2l6ZW9mKCpjdHJsKSk7CisJCQljdHJsLT5pZD1pZDsKKworCQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIGNtZCwgYXJnKTsKKwkJCVBERUJVRyhEQkdfSU8sIlZJRElPQ19RVUVSWUNUUkwgaWQ9JXggdmFsdWU9JXgiLGN0cmwtPmlkLGN0cmwtPnR5cGUpOworCisJCQlpZiAoY3RybC0+dHlwZSkKKwkJCQlyZXR1cm4gMDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl9CisJCWNhc2UgVklESU9DX0dfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCQkJUERFQlVHKERCR19JTywiVklESU9DX0dfQ1RSTCBpZD0leCB2YWx1ZT0leCIsY3RybC0+aWQsY3RybC0+dmFsdWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfU19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX1NfQ1RSTCwgY3RybCk7CisJCQlQREVCVUcoREJHX0lPLCAiVklESU9DX1NfQ1RSTCBpZD0leCB2YWx1ZT0leCIsY3RybC0+aWQsY3RybC0+dmFsdWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfR19UVU5FUjoKKwkJeworCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7CisKKwkJCWlmICh0LT5pbmRleCA+IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCW1lbXNldCh0LDAsc2l6ZW9mKCp0KSk7CisJCQlzdHJjcHkodC0+bmFtZSwgIlJhZGlvIik7CisJCQl0LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKworCQkJLyogTGV0IGNsaWVudHMgZmlsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoaXMgc3RydWN0ICovCisJCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbixWSURJT0NfR19UVU5FUix0KTsKKwkJCVBERUJVRyhEQkdfSU8sICJWSURJT0NfR19UVU5FUiBzaWduYWw9JXgsIGFmYz0leCIsdC0+c2lnbmFsLHQtPmFmYyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19TX1RVTkVSOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSBhcmc7CisKKwkJCS8vIE9ubHkgbm8gb3Igb25lIHR1bmVyIGZvciBub3cKKwkJCWlmICghdXNidmlzaW9uLT5oYXZlX3R1bmVyIHx8IHZ0LT5pbmRleCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCS8qIGxldCBjbGllbnRzIGhhbmRsZSB0aGlzICovCisJCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbixWSURJT0NfU19UVU5FUix2dCk7CisKKwkJCVBERUJVRyhEQkdfSU8sICJWSURJT0NfU19UVU5FUiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfR19BVURJTzoKKwkJeworCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7CisKKwkJCW1lbXNldChhLDAsc2l6ZW9mKCphKSk7CisJCQlzdHJjcHkoYS0+bmFtZSwiUmFkaW8iKTsKKwkJCVBERUJVRyhEQkdfSU8sICJWSURJT0NfR19BVURJTyIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfU19BVURJTzoKKwkJY2FzZSBWSURJT0NfU19JTlBVVDoKKwkJY2FzZSBWSURJT0NfU19TVEQ6CisJCXJldHVybiAwOworCisJCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCW1lbXNldChmLDAsc2l6ZW9mKCpmKSk7CisKKwkJCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCQkJZi0+ZnJlcXVlbmN5ID0gdXNidmlzaW9uLT5mcmVxOworCQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIGNtZCwgZik7CisJCQlQREVCVUcoREJHX0lPLCAiVklESU9DX0dfRlJFUVVFTkNZIGZyZXE9MHglWCIsICh1bnNpZ25lZClmLT5mcmVxdWVuY3kpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKKwkJeworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQlpZiAoZi0+dHVuZXIgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXVzYnZpc2lvbi0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwkJCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBjbWQsIGYpOworCQkJUERFQlVHKERCR19JTywgIlZJRElPQ19TX0ZSRVFVRU5DWSBmcmVxPTB4JVgiLCAodW5zaWduZWQpZi0+ZnJlcXVlbmN5KTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwkJZGVmYXVsdDoKKwkJeworCQkJUERFQlVHKERCR19JTywgIiVzOiBVbmtub3duIGNvbW1hbmQgJXgiLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCQl9CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdXNidmlzaW9uX3JhZGlvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgdXNidmlzaW9uX2RvX3JhZGlvX2lvY3RsKTsKK30KKworCisvKgorICogSGVyZSBjb21lcyB0aGUgc3R1ZmYgZm9yIHZiaSBvbiB1c2J2aXNpb24gYmFzZWQgZGV2aWNlcworICoKKyAqLworc3RhdGljIGludCB1c2J2aXNpb25fdmJpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJLyogVE9ETyAqLworCXJldHVybiAtRUlOVkFMOworCit9CisKK3N0YXRpYyBpbnQgdXNidmlzaW9uX3ZiaV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwkvKiBUT0RPICovCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdXNidmlzaW9uX2RvX3ZiaV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCS8qIFRPRE8gKi8KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB1c2J2aXNpb25fdmJpX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgdXNidmlzaW9uX2RvX3ZiaV9pb2N0bCk7Cit9CisKKworLy8KKy8vIFZpZGVvIHJlZ2lzdHJhdGlvbiBzdHVmZgorLy8KKworLy8gVmlkZW8gdGVtcGxhdGUKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYnZpc2lvbl9mb3BzID0geworCS5vd25lciAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHVzYnZpc2lvbl92NGwyX29wZW4sCisJLnJlbGVhc2UJPSB1c2J2aXNpb25fdjRsMl9jbG9zZSwKKwkucmVhZAkJPSB1c2J2aXNpb25fdjRsMl9yZWFkLAorCS5tbWFwCQk9IHVzYnZpc2lvbl92NGwyX21tYXAsCisJLmlvY3RsCQk9IHVzYnZpc2lvbl92NGwyX2lvY3RsLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorfTsKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHVzYnZpc2lvbl92aWRlb190ZW1wbGF0ZSA9IHsKKwkub3duZXIgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkudHlwZQkJPSBWSURfVFlQRV9UVU5FUiB8IFZJRF9UWVBFX0NBUFRVUkUsCisJLmhhcmR3YXJlCT0gVklEX0hBUkRXQVJFX1VTQlZJU0lPTiwKKwkuZm9wcwkJPSAmdXNidmlzaW9uX2ZvcHMsCisJLm5hbWUgICAgICAgICAgID0gInVzYnZpc2lvbi12aWRlbyIsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkubWlub3IJCT0gLTEsCit9OworCisKKy8vIFJhZGlvIHRlbXBsYXRlCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2J2aXNpb25fcmFkaW9fZm9wcyA9IHsKKwkub3duZXIgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB1c2J2aXNpb25fcmFkaW9fb3BlbiwKKwkucmVsZWFzZQk9IHVzYnZpc2lvbl9yYWRpb19jbG9zZSwKKwkuaW9jdGwJCT0gdXNidmlzaW9uX3JhZGlvX2lvY3RsLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdXNidmlzaW9uX3JhZGlvX3RlbXBsYXRlPQoreworCS5vd25lciAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS50eXBlCQk9IFZJRF9UWVBFX1RVTkVSLAorCS5oYXJkd2FyZQk9IFZJRF9IQVJEV0FSRV9VU0JWSVNJT04sCisJLmZvcHMJCT0gJnVzYnZpc2lvbl9yYWRpb19mb3BzLAorCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLm5hbWUgICAgICAgICAgID0gInVzYnZpc2lvbi1yYWRpbyIsCisJLm1pbm9yCQk9IC0xLAorfTsKKworCisvLyB2YmkgdGVtcGxhdGUKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYnZpc2lvbl92YmlfZm9wcyA9IHsKKwkub3duZXIgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSB1c2J2aXNpb25fdmJpX29wZW4sCisJLnJlbGVhc2UJPSB1c2J2aXNpb25fdmJpX2Nsb3NlLAorCS5pb2N0bAkJPSB1c2J2aXNpb25fdmJpX2lvY3RsLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdXNidmlzaW9uX3ZiaV90ZW1wbGF0ZT0KK3sKKwkub3duZXIgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkudHlwZQkJPSBWSURfVFlQRV9UVU5FUiwKKwkuaGFyZHdhcmUJPSBWSURfSEFSRFdBUkVfVVNCVklTSU9OLAorCS5mb3BzCQk9ICZ1c2J2aXNpb25fdmJpX2ZvcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkubmFtZSAgICAgICAgICAgPSAidXNidmlzaW9uLXZiaSIsCisJLm1pbm9yCQk9IC0xLAorfTsKKworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSAqdXNidmlzaW9uX3ZkZXZfaW5pdChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLAorCQkJCQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2X3RlbXBsYXRlLAorCQkJCQljaGFyICpuYW1lKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gdXNidmlzaW9uLT5kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKworCWlmICh1c2JfZGV2ID09IE5VTEwpIHsKKwkJZXJyKCIlczogdXNidmlzaW9uLT5kZXYgaXMgbm90IHNldCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBOVUxMOworCX0KKworCXZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoTlVMTCA9PSB2ZGV2KSB7CisJCXJldHVybiBOVUxMOworCX0KKwkqdmRldiA9ICp2ZGV2X3RlbXBsYXRlOworLy8JdmRldi0+bWlub3IgICA9IC0xOworCXZkZXYtPmRldiAgICAgPSAmdXNiX2Rldi0+ZGV2OworCXNucHJpbnRmKHZkZXYtPm5hbWUsIHNpemVvZih2ZGV2LT5uYW1lKSwgIiVzIiwgbmFtZSk7CisJdmlkZW9fc2V0X2RydmRhdGEodmRldiwgdXNidmlzaW9uKTsKKwlyZXR1cm4gdmRldjsKK30KKworLy8gdW5yZWdpc3RlciB2aWRlbzRsaW51eCBkZXZpY2VzCitzdGF0aWMgdm9pZCB1c2J2aXNpb25fdW5yZWdpc3Rlcl92aWRlbyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQoreworCS8vIHZiaSBEZXZpY2U6CisJaWYgKHVzYnZpc2lvbi0+dmJpKSB7CisJCVBERUJVRyhEQkdfUFJPQkUsICJ1bnJlZ2lzdGVyIC9kZXYvdmJpJWQgW3Y0bDJdIiwgdXNidmlzaW9uLT52YmktPm1pbm9yICYgMHgxZik7CisJCWlmICh1c2J2aXNpb24tPnZiaS0+bWlub3IgIT0gLTEpIHsKKwkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHVzYnZpc2lvbi0+dmJpKTsKKwkJfQorCQllbHNlIHsKKwkJCXZpZGVvX2RldmljZV9yZWxlYXNlKHVzYnZpc2lvbi0+dmJpKTsKKwkJfQorCQl1c2J2aXNpb24tPnZiaSA9IE5VTEw7CisJfQorCisJLy8gUmFkaW8gRGV2aWNlOgorCWlmICh1c2J2aXNpb24tPnJkZXYpIHsKKwkJUERFQlVHKERCR19QUk9CRSwgInVucmVnaXN0ZXIgL2Rldi9yYWRpbyVkIFt2NGwyXSIsIHVzYnZpc2lvbi0+cmRldi0+bWlub3IgJiAweDFmKTsKKwkJaWYgKHVzYnZpc2lvbi0+cmRldi0+bWlub3IgIT0gLTEpIHsKKwkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHVzYnZpc2lvbi0+cmRldik7CisJCX0KKwkJZWxzZSB7CisJCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh1c2J2aXNpb24tPnJkZXYpOworCQl9CisJCXVzYnZpc2lvbi0+cmRldiA9IE5VTEw7CisJfQorCisJLy8gVmlkZW8gRGV2aWNlOgorCWlmICh1c2J2aXNpb24tPnZkZXYpIHsKKwkJUERFQlVHKERCR19QUk9CRSwgInVucmVnaXN0ZXIgL2Rldi92aWRlbyVkIFt2NGwyXSIsIHVzYnZpc2lvbi0+dmRldi0+bWlub3IgJiAweDFmKTsKKwkJaWYgKHVzYnZpc2lvbi0+dmRldi0+bWlub3IgIT0gLTEpIHsKKwkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHVzYnZpc2lvbi0+dmRldik7CisJCX0KKwkJZWxzZSB7CisJCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh1c2J2aXNpb24tPnZkZXYpOworCQl9CisJCXVzYnZpc2lvbi0+dmRldiA9IE5VTEw7CisJfQorfQorCisvLyByZWdpc3RlciB2aWRlbzRsaW51eCBkZXZpY2VzCitzdGF0aWMgaW50IF9fZGV2aW5pdCB1c2J2aXNpb25fcmVnaXN0ZXJfdmlkZW8oc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwkvLyBWaWRlbyBEZXZpY2U6CisJdXNidmlzaW9uLT52ZGV2ID0gdXNidmlzaW9uX3ZkZXZfaW5pdCh1c2J2aXNpb24sICZ1c2J2aXNpb25fdmlkZW9fdGVtcGxhdGUsICJVU0JWaXNpb24gVmlkZW8iKTsKKwlpZiAodXNidmlzaW9uLT52ZGV2ID09IE5VTEwpIHsKKwkJZ290byBlcnJfZXhpdDsKKwl9CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSh1c2J2aXNpb24tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTwwKSB7CisJCWdvdG8gZXJyX2V4aXQ7CisJfQorCWluZm8oIlVTQlZpc2lvblslZF06IHJlZ2lzdGVyZWQgVVNCVmlzaW9uIFZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWQgW3Y0bDJdIiwgdXNidmlzaW9uLT5ucix1c2J2aXNpb24tPnZkZXYtPm1pbm9yICYgMHgxZik7CisKKwkvLyBSYWRpbyBEZXZpY2U6CisJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5SYWRpbykgeworCQkvLyB1c2J2aXNpb24gaGFzIHJhZGlvCisJCXVzYnZpc2lvbi0+cmRldiA9IHVzYnZpc2lvbl92ZGV2X2luaXQodXNidmlzaW9uLCAmdXNidmlzaW9uX3JhZGlvX3RlbXBsYXRlLCAiVVNCVmlzaW9uIFJhZGlvIik7CisJCWlmICh1c2J2aXNpb24tPnJkZXYgPT0gTlVMTCkgeworCQkJZ290byBlcnJfZXhpdDsKKwkJfQorCQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHVzYnZpc2lvbi0+cmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKTwwKSB7CisJCQlnb3RvIGVycl9leGl0OworCQl9CisJCWluZm8oIlVTQlZpc2lvblslZF06IHJlZ2lzdGVyZWQgVVNCVmlzaW9uIFJhZGlvIGRldmljZSAvZGV2L3JhZGlvJWQgW3Y0bDJdIiwgdXNidmlzaW9uLT5uciwgdXNidmlzaW9uLT5yZGV2LT5taW5vciAmIDB4MWYpOworCX0KKwkvLyB2YmkgRGV2aWNlOgorCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0udmJpKSB7CisJCXVzYnZpc2lvbi0+dmJpID0gdXNidmlzaW9uX3ZkZXZfaW5pdCh1c2J2aXNpb24sICZ1c2J2aXNpb25fdmJpX3RlbXBsYXRlLCAiVVNCVmlzaW9uIFZCSSIpOworCQlpZiAodXNidmlzaW9uLT52ZGV2ID09IE5VTEwpIHsKKwkJCWdvdG8gZXJyX2V4aXQ7CisJCX0KKwkJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSh1c2J2aXNpb24tPnZiaSwgVkZMX1RZUEVfVkJJLCB2YmlfbnIpPDApIHsKKwkJCWdvdG8gZXJyX2V4aXQ7CisJCX0KKwkJaW5mbygiVVNCVmlzaW9uWyVkXTogcmVnaXN0ZXJlZCBVU0JWaXNpb24gVkJJIGRldmljZSAvZGV2L3ZiaSVkIFt2NGwyXSAoTm90IFdvcmtpbmcgWWV0ISkiLCB1c2J2aXNpb24tPm5yLHVzYnZpc2lvbi0+dmJpLT5taW5vciAmIDB4MWYpOworCX0KKwkvLyBhbGwgZG9uZQorCXJldHVybiAwOworCisgZXJyX2V4aXQ6CisJZXJyKCJVU0JWaXNpb25bJWRdOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSBmYWlsZWQiLCB1c2J2aXNpb24tPm5yKTsKKwl1c2J2aXNpb25fdW5yZWdpc3Rlcl92aWRlbyh1c2J2aXNpb24pOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIHVzYnZpc2lvbl9hbGxvYygpCisgKgorICogVGhpcyBjb2RlIGFsbG9jYXRlcyB0aGUgc3RydWN0IHVzYl91c2J2aXNpb24uIEl0IGlzIGZpbGxlZCB3aXRoIGRlZmF1bHQgdmFsdWVzLgorICoKKyAqIFJldHVybnMgTlVMTCBvbiBlcnJvciwgYSBwb2ludGVyIHRvIHVzYl91c2J2aXNpb24gZWxzZS4KKyAqCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uX2FsbG9jKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbjsKKworCWlmICgodXNidmlzaW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYl91c2J2aXNpb24pLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQlnb3RvIGVycl9leGl0OworCX0KKworCXVzYnZpc2lvbi0+ZGV2ID0gZGV2OworCisJaW5pdF9NVVRFWCgmdXNidmlzaW9uLT5sb2NrKTsJLyogdG8gMSA9PSBhdmFpbGFibGUgKi8KKworCS8vIHByZXBhcmUgY29udHJvbCB1cmIgZm9yIGNvbnRyb2wgbWVzc2FnZXMgZHVyaW5nIGludGVycnVwdHMKKwl1c2J2aXNpb24tPmN0cmxVcmIgPSB1c2JfYWxsb2NfdXJiKFVTQlZJU0lPTl9VUkJfRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlpZiAodXNidmlzaW9uLT5jdHJsVXJiID09IE5VTEwpIHsKKwkJZ290byBlcnJfZXhpdDsKKwl9CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdXNidmlzaW9uLT5jdHJsVXJiX3dxKTsKKwlpbml0X01VVEVYKCZ1c2J2aXNpb24tPmN0cmxVcmJMb2NrKTsJLyogdG8gMSA9PSBhdmFpbGFibGUgKi8KKworCXVzYnZpc2lvbl9pbml0X3Bvd2VyT2ZmVGltZXIodXNidmlzaW9uKTsKKworCXJldHVybiB1c2J2aXNpb247CisKK2Vycl9leGl0OgorCWlmICh1c2J2aXNpb24gJiYgdXNidmlzaW9uLT5jdHJsVXJiKSB7CisJCXVzYl9mcmVlX3VyYih1c2J2aXNpb24tPmN0cmxVcmIpOworCX0KKwlpZiAodXNidmlzaW9uKSB7CisJCWtmcmVlKHVzYnZpc2lvbik7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogdXNidmlzaW9uX3JlbGVhc2UoKQorICoKKyAqIFRoaXMgY29kZSBkb2VzIGZpbmFsIHJlbGVhc2Ugb2Ygc3RydWN0IHVzYl91c2J2aXNpb24uIFRoaXMgaGFwcGVucworICogYWZ0ZXIgdGhlIGRldmljZSBpcyBkaXNjb25uZWN0ZWQgLWFuZC0gYWxsIGNsaWVudHMgY2xvc2VkIHRoZWlyIGZpbGVzLgorICoKKyAqLworc3RhdGljIHZvaWQgdXNidmlzaW9uX3JlbGVhc2Uoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwlQREVCVUcoREJHX1BST0JFLCAiIik7CisKKwlkb3duKCZ1c2J2aXNpb24tPmxvY2spOworCisJdXNidmlzaW9uX3Jlc2V0X3Bvd2VyT2ZmVGltZXIodXNidmlzaW9uKTsKKworCXVzYnZpc2lvbi0+aW5pdGlhbGl6ZWQgPSAwOworCisJdXAoJnVzYnZpc2lvbi0+bG9jayk7CisKKwl1c2J2aXNpb25fcmVtb3ZlX3N5c2ZzKHVzYnZpc2lvbi0+dmRldik7CisJdXNidmlzaW9uX3VucmVnaXN0ZXJfdmlkZW8odXNidmlzaW9uKTsKKworCWlmICh1c2J2aXNpb24tPmN0cmxVcmIpIHsKKwkJdXNiX2ZyZWVfdXJiKHVzYnZpc2lvbi0+Y3RybFVyYik7CisJfQorCisJa2ZyZWUodXNidmlzaW9uKTsKKworCVBERUJVRyhEQkdfUFJPQkUsICJzdWNjZXNzIik7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHVzYiBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHVzYnZpc2lvbl9jb25maWd1cmVfdmlkZW8oc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKK3sKKwlpbnQgbW9kZWwsaTsKKworCWlmICh1c2J2aXNpb24gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJbW9kZWwgPSB1c2J2aXNpb24tPkRldk1vZGVsOworCXVzYnZpc2lvbi0+cGFsZXR0ZSA9IHVzYnZpc2lvbl92NGwyX2Zvcm1hdFsyXTsgLy8gVjRMMl9QSVhfRk1UX1JHQjI0OworCisJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5WaW5fUmVnMiA+PSAwKSB7CisJCXVzYnZpc2lvbi0+VmluX1JlZzJfUHJlc2V0ID0gdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlZpbl9SZWcyICYgMHhmZjsKKwl9IGVsc2UgeworCQl1c2J2aXNpb24tPlZpbl9SZWcyX1ByZXNldCA9IDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRWTk9STVM7IGkrKykKKwkJaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uVmlkZW9Ob3JtID09IHR2bm9ybXNbaV0ubW9kZSkKKwkJCWJyZWFrOworCWlmIChpID09IFRWTk9STVMpCisJCWkgPSAwOworCXVzYnZpc2lvbi0+dHZub3JtID0gJnR2bm9ybXNbaV07ICAgICAgICAvKiBzZXQgZGVmYXVsdCBub3JtICovCisKKwl1c2J2aXNpb24tPnZpZGVvX2lucHV0cyA9IHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uVmlkZW9DaGFubmVsczsKKwl1c2J2aXNpb24tPmN0bF9pbnB1dCA9IDA7CisKKwkvKiBUaGlzIHNob3VsZCBiZSBoZXJlIHRvIG1ha2UgaTJjIGNsaWVudHMgdG8gYmUgYWJsZSB0byByZWdpc3RlciAqLworCXVzYnZpc2lvbl9hdWRpb19vZmYodXNidmlzaW9uKTsJLy9maXJzdCBzd2l0Y2ggb2ZmIGF1ZGlvCisJaWYgKCFQb3dlck9uQXRPcGVuKSB7CisJCXVzYnZpc2lvbl9wb3dlcl9vbih1c2J2aXNpb24pOwkvL2FuZCB0aGVuIHBvd2VyIHVwIHRoZSBub2lzeSB0dW5lcgorCQl1c2J2aXNpb25faW5pdF9pMmModXNidmlzaW9uKTsKKwl9Cit9CisKKy8qCisgKiB1c2J2aXNpb25fcHJvYmUoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIHF1ZXJpZXMgZGV2aWNlIGRlc2NyaXB0b3IgYW5kIGFjY2VwdHMgdGhlIGludGVyZmFjZQorICogaWYgaXQgbG9va3MgbGlrZSBVU0JWSVNJT04gdmlkZW8gZGV2aWNlCisgKgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCB1c2J2aXNpb25fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlfX3U4IGlmbnVtID0gaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCWludCBtb2RlbDsKKworCVBERUJVRyhEQkdfUFJPQkUsICJWSUQ9JSMwNHgsIFBJRD0lIzA0eCwgaWZudW09JXUiLAorCQkJCQlkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IsIGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QsIGlmbnVtKTsKKwkvKiBJcyBpdCBhbiBVU0JWSVNJT04gdmlkZW8gZGV2PyAqLworCW1vZGVsID0gMDsKKwlmb3IobW9kZWwgPSAwOyB1c2J2aXNpb25fZGV2aWNlX2RhdGFbbW9kZWxdLmlkVmVuZG9yOyBtb2RlbCsrKSB7CisJCWlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uaWRWZW5kb3IpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSB1c2J2aXNpb25fZGV2aWNlX2RhdGFbbW9kZWxdLmlkUHJvZHVjdCkgeworCQkJY29udGludWU7CisJCX0KKworCQlpbmZvKCIlczogJXMgZm91bmQiLCBfX0ZVTkNUSU9OX18sIHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uTW9kZWxTdHJpbmcpOworCQlicmVhazsKKwl9CisKKwlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5pZFZlbmRvciA9PSAwKSB7CisJCXJldHVybiAtRU5PREVWOyAvL25vIG1hdGNoaW5nIGRldmljZQorCX0KKwlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5JbnRlcmZhY2UgPj0gMCkgeworCQlpbnRlcmZhY2UgPSAmZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVt1c2J2aXNpb25fZGV2aWNlX2RhdGFbbW9kZWxdLkludGVyZmFjZV0tPmFsdHNldHRpbmdbMF07CisJfQorCWVsc2UgeworCQlpbnRlcmZhY2UgPSAmZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpZm51bV0tPmFsdHNldHRpbmdbMF07CisJfQorCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMV0uZGVzYzsKKwlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgIT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgeworCQllcnIoIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50ISIsIF9fRlVOQ1RJT05fXywgaWZudW0pOworCQllcnIoIiVzOiBFbmRwb2ludCBhdHRyaWJ1cmVzICVkIiwgX19GVU5DVElPTl9fLCBlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKSB7CisJCWVycigiJXM6IGludGVyZmFjZSAlZC4gaGFzIElTTyBPVVQgZW5kcG9pbnQhIiwgX19GVU5DVElPTl9fLCBpZm51bSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXVzYl9nZXRfZGV2KGRldik7CisKKwlpZiAoKHVzYnZpc2lvbiA9IHVzYnZpc2lvbl9hbGxvYyhkZXYpKSA9PSBOVUxMKSB7CisJCWVycigiJXM6IGNvdWxkbid0IGFsbG9jYXRlIFVTQlZpc2lvbiBzdHJ1Y3QiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgPiAxKSB7CisJCXVzYnZpc2lvbi0+YnJpZGdlVHlwZSA9IEJSSURHRV9OVDEwMDQ7CisJfQorCWVsc2UgaWYgKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uTW9kZWxTdHJpbmcgPT0gIkRhenpsZSBGdXNpb24gTW9kZWwgRFZDLTkwIFJldiAxIChTRUNBTSkiKSB7CisJCXVzYnZpc2lvbi0+YnJpZGdlVHlwZSA9IEJSSURHRV9OVDEwMDU7CisJfQorCWVsc2UgeworCQl1c2J2aXNpb24tPmJyaWRnZVR5cGUgPSBCUklER0VfTlQxMDAzOworCX0KKwlQREVCVUcoREJHX1BST0JFLCAiYnJpZGdlVHlwZSAlZCIsIHVzYnZpc2lvbi0+YnJpZGdlVHlwZSk7CisKKwlkb3duKCZ1c2J2aXNpb24tPmxvY2spOworCisJdXNidmlzaW9uLT5uciA9IHVzYnZpc2lvbl9ucisrOworCisJdXNidmlzaW9uLT5oYXZlX3R1bmVyID0gdXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5UdW5lcjsKKwlpZiAodXNidmlzaW9uLT5oYXZlX3R1bmVyKSB7CisJCXVzYnZpc2lvbi0+dHVuZXJfdHlwZSA9IHVzYnZpc2lvbl9kZXZpY2VfZGF0YVttb2RlbF0uVHVuZXJUeXBlOworCX0KKworCXVzYnZpc2lvbi0+dHVuZXJfYWRkciA9IEFERFJfVU5TRVQ7CisKKwl1c2J2aXNpb24tPkRldk1vZGVsID0gbW9kZWw7CisJdXNidmlzaW9uLT5yZW1vdmVfcGVuZGluZyA9IDA7CisJdXNidmlzaW9uLT5pZmFjZSA9IGlmbnVtOworCXVzYnZpc2lvbi0+aWZhY2VBbHRJbmFjdGl2ZSA9IDA7CisJdXNidmlzaW9uLT5pZmFjZUFsdEFjdGl2ZSA9IDE7CisJdXNidmlzaW9uLT52aWRlb19lbmRwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJdXNidmlzaW9uLT5pc29jUGFja2V0U2l6ZSA9IDA7CisJdXNidmlzaW9uLT51c2JfYmFuZHdpZHRoID0gMDsKKwl1c2J2aXNpb24tPnVzZXIgPSAwOworCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gU3RyZWFtX09mZjsKKwl1c2J2aXNpb25fcmVnaXN0ZXJfdmlkZW8odXNidmlzaW9uKTsKKwl1c2J2aXNpb25fY29uZmlndXJlX3ZpZGVvKHVzYnZpc2lvbik7CisJdXAoJnVzYnZpc2lvbi0+bG9jayk7CisKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHVzYnZpc2lvbik7CisJdXNidmlzaW9uX2NyZWF0ZV9zeXNmcyh1c2J2aXNpb24tPnZkZXYpOworCisJUERFQlVHKERCR19QUk9CRSwgInN1Y2Nlc3MiKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogdXNidmlzaW9uX2Rpc2Nvbm5lY3QoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIHN0b3BzIGFsbCBkcml2ZXIgYWN0aXZpdHksIGRlYWxsb2NhdGVzIGludGVyZmFjZS1wcml2YXRlCisgKiBzdHJ1Y3R1cmUgKHBvaW50ZWQgYnkgJ3B0cicpIGFuZCBhZnRlciB0aGF0IGRyaXZlciBzaG91bGQgYmUgcmVtb3ZhYmxlCisgKiB3aXRoIG5vIGlsbCBjb25zZXF1ZW5jZXMuCisgKgorICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdXNidmlzaW9uX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlQREVCVUcoREJHX1BST0JFLCAiIik7CisKKwlpZiAodXNidmlzaW9uID09IE5VTEwpIHsKKwkJZXJyKCIlczogdXNiX2dldF9pbnRmZGF0YSgpIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwlkb3duKCZ1c2J2aXNpb24tPmxvY2spOworCisJLy8gQXQgdGhpcyB0aW1lIHdlIGFzayB0byBjYW5jZWwgb3V0c3RhbmRpbmcgVVJCcworCXVzYnZpc2lvbl9zdG9wX2lzb2ModXNidmlzaW9uKTsKKworCWlmICh1c2J2aXNpb24tPnBvd2VyKSB7CisJCXVzYnZpc2lvbl9pMmNfdXNiX2RlbF9idXMoJnVzYnZpc2lvbi0+aTJjX2FkYXApOworCQl1c2J2aXNpb25fcG93ZXJfb2ZmKHVzYnZpc2lvbik7CisJfQorCXVzYnZpc2lvbi0+cmVtb3ZlX3BlbmRpbmcgPSAxOwkvLyBOb3cgYWxsIElTTyBkYXRhIHdpbGwgYmUgaWdub3JlZAorCisJdXNiX3B1dF9kZXYodXNidmlzaW9uLT5kZXYpOworCXVzYnZpc2lvbi0+ZGV2ID0gTlVMTDsJLy8gVVNCIGRldmljZSBpcyBubyBtb3JlCisKKwl1cCgmdXNidmlzaW9uLT5sb2NrKTsKKworCWlmICh1c2J2aXNpb24tPnVzZXIpIHsKKwkJaW5mbygiJXM6IEluIHVzZSwgZGlzY29ubmVjdCBwZW5kaW5nIiwgX19GVU5DVElPTl9fKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1c2J2aXNpb24tPndhaXRfZnJhbWUpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVzYnZpc2lvbi0+d2FpdF9zdHJlYW0pOworCX0KKwllbHNlIHsKKwkJdXNidmlzaW9uX3JlbGVhc2UodXNidmlzaW9uKTsKKwl9CisKKwlQREVCVUcoREJHX1BST0JFLCAic3VjY2VzcyIpOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2J2aXNpb25fZHJpdmVyID0geworCS5uYW1lCQk9ICJ1c2J2aXNpb24iLAorCS5pZF90YWJsZQk9IHVzYnZpc2lvbl90YWJsZSwKKwkucHJvYmUJCT0gdXNidmlzaW9uX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gdXNidmlzaW9uX2Rpc2Nvbm5lY3QKK307CisKKy8qCisgKiBjdXN0b21kZXZpY2VfcHJvY2VzcygpCisgKgorICogVGhpcyBwcm9jZWR1cmUgcHJlcHJvY2Vzc2VzIEN1c3RvbURldmljZSBwYXJhbWV0ZXIgaWYgYW55CisgKgorICovCitzdGF0aWMgdm9pZCBjdXN0b21kZXZpY2VfcHJvY2Vzcyh2b2lkKQoreworCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXT11c2J2aXNpb25fZGV2aWNlX2RhdGFbMV07CisJdXNidmlzaW9uX3RhYmxlWzBdPXVzYnZpc2lvbl90YWJsZVsxXTsKKworCWlmKEN1c3RvbURldmljZSkKKwl7CisJCWNoYXIgKnBhcnNlPUN1c3RvbURldmljZTsKKworCQlQREVCVUcoREJHX1BST0JFLCAiQ3VzdG9tRGV2aWRlPSVzIiwgQ3VzdG9tRGV2aWNlKTsKKworCQkvKmZvcm1hdCBpcyBDdXN0b21EZXZpY2U9IjB4MDU3MyAweDREMzEgMCA3MTEzIDMgUEFMIDEgMSAxIDUgLTEgLTEgLTEgLTEgLTEiCisJCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5pZFZlbmRvcjsKKwkJdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLmlkUHJvZHVjdDsKKwkJdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLkludGVyZmFjZTsKKwkJdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLkNvZGVjOworCQl1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uVmlkZW9DaGFubmVsczsKKwkJdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLlZpZGVvTm9ybTsKKwkJdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLkF1ZGlvQ2hhbm5lbHM7CisJCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5SYWRpbzsKKwkJdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLlR1bmVyOworCQl1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uVHVuZXJUeXBlOworCQl1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uVmluX1JlZzE7CisJCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5WaW5fUmVnMjsKKwkJdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLlhfT2Zmc2V0OworCQl1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uWV9PZmZzZXQ7CisJCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5EdmlfeXV2OworCQl1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uTW9kZWxTdHJpbmc7CisJCSovCisKKwkJcm1zcGFjZShwYXJzZSk7CisJCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5Nb2RlbFN0cmluZz0iVVNCVklTSU9OIEN1c3RvbSBEZXZpY2UiOworCisJCXBhcnNlKz0yOworCQlzc2NhbmYocGFyc2UsIiV4IiwmdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLmlkVmVuZG9yKTsKKwkJZ290bzJuZXh0KHBhcnNlKTsKKwkJUERFQlVHKERCR19QUk9CRSwgImlkVmVuZG9yPTB4JS40WCIsIHVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5pZFZlbmRvcik7CisJCXBhcnNlKz0yOworCQlzc2NhbmYocGFyc2UsIiV4IiwmdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLmlkUHJvZHVjdCk7CisJCWdvdG8ybmV4dChwYXJzZSk7CisJCVBERUJVRyhEQkdfUFJPQkUsICJpZFByb2R1Y3Q9MHglLjRYIiwgdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLmlkUHJvZHVjdCk7CisJCXNzY2FuZihwYXJzZSwiJWQiLCZ1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uSW50ZXJmYWNlKTsKKwkJZ290bzJuZXh0KHBhcnNlKTsKKwkJUERFQlVHKERCR19QUk9CRSwgIkludGVyZmFjZT0lZCIsIHVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5JbnRlcmZhY2UpOworCQlzc2NhbmYocGFyc2UsIiVkIiwmdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLkNvZGVjKTsKKwkJZ290bzJuZXh0KHBhcnNlKTsKKwkJUERFQlVHKERCR19QUk9CRSwgIkNvZGVjPSVkIiwgdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLkNvZGVjKTsKKwkJc3NjYW5mKHBhcnNlLCIlZCIsJnVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5WaWRlb0NoYW5uZWxzKTsKKwkJZ290bzJuZXh0KHBhcnNlKTsKKwkJUERFQlVHKERCR19QUk9CRSwgIlZpZGVvQ2hhbm5lbHM9JWQiLCB1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uVmlkZW9DaGFubmVscyk7CisKKwkJc3dpdGNoKCpwYXJzZSkKKwkJeworCQkJY2FzZSAnUCc6CisJCQkJUERFQlVHKERCR19QUk9CRSwgIlZpZGVvTm9ybT1QQUwiKTsKKwkJCQl1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uVmlkZW9Ob3JtPVY0TDJfU1REX1BBTDsKKwkJCQlicmVhazsKKworCQkJY2FzZSAnUyc6CisJCQkJUERFQlVHKERCR19QUk9CRSwgIlZpZGVvTm9ybT1TRUNBTSIpOworCQkJCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5WaWRlb05vcm09VjRMMl9TVERfU0VDQU07CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ04nOgorCQkJCVBERUJVRyhEQkdfUFJPQkUsICJWaWRlb05vcm09TlRTQyIpOworCQkJCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5WaWRlb05vcm09VjRMMl9TVERfTlRTQzsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlQREVCVUcoREJHX1BST0JFLCAiVmlkZW9Ob3JtPVBBTCAoYnkgZGVmYXVsdCkiKTsKKwkJCQl1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uVmlkZW9Ob3JtPVY0TDJfU1REX1BBTDsKKwkJCQlicmVhazsKKwkJfQorCQlnb3RvMm5leHQocGFyc2UpOworCisJCXNzY2FuZihwYXJzZSwiJWQiLCZ1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uQXVkaW9DaGFubmVscyk7CisJCWdvdG8ybmV4dChwYXJzZSk7CisJCVBERUJVRyhEQkdfUFJPQkUsICJBdWRpb0NoYW5uZWxzPSVkIiwgdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLkF1ZGlvQ2hhbm5lbHMpOworCQlzc2NhbmYocGFyc2UsIiVkIiwmdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLlJhZGlvKTsKKwkJZ290bzJuZXh0KHBhcnNlKTsKKwkJUERFQlVHKERCR19QUk9CRSwgIlJhZGlvPSVkIiwgdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLlJhZGlvKTsKKwkJc3NjYW5mKHBhcnNlLCIlZCIsJnVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5UdW5lcik7CisJCWdvdG8ybmV4dChwYXJzZSk7CisJCVBERUJVRyhEQkdfUFJPQkUsICJUdW5lcj0lZCIsIHVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5UdW5lcik7CisJCXNzY2FuZihwYXJzZSwiJWQiLCZ1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uVHVuZXJUeXBlKTsKKwkJZ290bzJuZXh0KHBhcnNlKTsKKwkJUERFQlVHKERCR19QUk9CRSwgIlR1bmVyVHlwZT0lZCIsIHVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5UdW5lclR5cGUpOworCQlzc2NhbmYocGFyc2UsIiVkIiwmdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLlZpbl9SZWcxKTsKKwkJZ290bzJuZXh0KHBhcnNlKTsKKwkJUERFQlVHKERCR19QUk9CRSwgIlZpbl9SZWcxPSVkIiwgdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLlZpbl9SZWcxKTsKKwkJc3NjYW5mKHBhcnNlLCIlZCIsJnVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5WaW5fUmVnMik7CisJCWdvdG8ybmV4dChwYXJzZSk7CisJCVBERUJVRyhEQkdfUFJPQkUsICJWaW5fUmVnMj0lZCIsIHVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5WaW5fUmVnMik7CisJCXNzY2FuZihwYXJzZSwiJWQiLCZ1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uWF9PZmZzZXQpOworCQlnb3RvMm5leHQocGFyc2UpOworCQlQREVCVUcoREJHX1BST0JFLCAiWF9PZmZzZXQ9JWQiLCB1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uWF9PZmZzZXQpOworCQlzc2NhbmYocGFyc2UsIiVkIiwmdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLllfT2Zmc2V0KTsKKwkJZ290bzJuZXh0KHBhcnNlKTsKKwkJUERFQlVHKERCR19QUk9CRSwgIllfT2Zmc2V0PSVkIiwgdXNidmlzaW9uX2RldmljZV9kYXRhWzBdLllfT2Zmc2V0KTsKKwkJc3NjYW5mKHBhcnNlLCIlZCIsJnVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5EdmlfeXV2KTsKKwkJUERFQlVHKERCR19QUk9CRSwgIkR2aV95dXY9JWQiLCB1c2J2aXNpb25fZGV2aWNlX2RhdGFbMF0uRHZpX3l1dik7CisKKwkJLy9hZGQgdG8gdXNidmlzaW9uX3RhYmxlIGFsc28KKwkJdXNidmlzaW9uX3RhYmxlWzBdLm1hdGNoX2ZsYWdzPVVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFOworCQl1c2J2aXNpb25fdGFibGVbMF0uaWRWZW5kb3I9dXNidmlzaW9uX2RldmljZV9kYXRhWzBdLmlkVmVuZG9yOworCQl1c2J2aXNpb25fdGFibGVbMF0uaWRQcm9kdWN0PXVzYnZpc2lvbl9kZXZpY2VfZGF0YVswXS5pZFByb2R1Y3Q7CisKKwl9Cit9CisKKworCisvKgorICogdXNidmlzaW9uX2luaXQoKQorICoKKyAqIFRoaXMgY29kZSBpcyBydW4gdG8gaW5pdGlhbGl6ZSB0aGUgZHJpdmVyLgorICoKKyAqLworc3RhdGljIGludCBfX2luaXQgdXNidmlzaW9uX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyQ29kZTsKKworCVBERUJVRyhEQkdfUFJPQkUsICIiKTsKKworCVBERUJVRyhEQkdfSU9DVEwsICJJT0NUTCAgIGRlYnVnZ2luZyBpcyBlbmFibGVkIFt2aWRlb10iKTsKKwlQREVCVUcoREJHX0lPLCAgIklPICAgICAgZGVidWdnaW5nIGlzIGVuYWJsZWQgW3ZpZGVvXSIpOworCVBERUJVRyhEQkdfUFJPQkUsICJQUk9CRSAgIGRlYnVnZ2luZyBpcyBlbmFibGVkIFt2aWRlb10iKTsKKwlQREVCVUcoREJHX01NQVAsICJNTUFQICAgIGRlYnVnZ2luZyBpcyBlbmFibGVkIFt2aWRlb10iKTsKKworCS8qIGRpc2FibGUgcGxhbmFyIG1vZGUgc3VwcG9ydCB1bmxlc3MgY29tcHJlc3Npb24gZW5hYmxlZCAqLworCWlmIChpc29jTW9kZSAhPSBJU09DX01PREVfQ09NUFJFU1MgKSB7CisJCS8vIEZJWE1FIDogbm90IHRoZSByaWdodCB3YXkgdG8gc2V0IHN1cHBvcnRlZCBmbGFnCisJCXVzYnZpc2lvbl92NGwyX2Zvcm1hdFs2XS5zdXBwb3J0ZWQgPSAwOyAvLyBWNEwyX1BJWF9GTVRfWVZVNDIwCisJCXVzYnZpc2lvbl92NGwyX2Zvcm1hdFs3XS5zdXBwb3J0ZWQgPSAwOyAvLyBWNEwyX1BJWF9GTVRfWVVWNDIyUAorCX0KKworCWN1c3RvbWRldmljZV9wcm9jZXNzKCk7CisKKwllcnJDb2RlID0gdXNiX3JlZ2lzdGVyKCZ1c2J2aXNpb25fZHJpdmVyKTsKKworCWlmIChlcnJDb2RlID09IDApIHsKKwkJaW5mbyhEUklWRVJfREVTQyAiIDogIiBVU0JWSVNJT05fVkVSU0lPTl9TVFJJTkcpOworCQlQREVCVUcoREJHX1BST0JFLCAic3VjY2VzcyIpOworCX0KKwlyZXR1cm4gZXJyQ29kZTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYnZpc2lvbl9leGl0KHZvaWQpCit7CisgUERFQlVHKERCR19QUk9CRSwgIiIpOworCisgdXNiX2RlcmVnaXN0ZXIoJnVzYnZpc2lvbl9kcml2ZXIpOworIFBERUJVRyhEQkdfUFJPQkUsICJzdWNjZXNzIik7Cit9CisKK21vZHVsZV9pbml0KHVzYnZpc2lvbl9pbml0KTsKK21vZHVsZV9leGl0KHVzYnZpc2lvbl9leGl0KTsKKworLyoKKyAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYmNhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24uaApAQCAtMCwwICsxLDUzMSBAQAorLyoKKyAqIFVTQlZJU0lPTi5ICisgKiAgdXNidmlzaW9uIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgSm9lcmcgSGVja2VuYmFjaCA8am9lcmdAaGVja2VuYmFjaC1hdy5kZT4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIER3YWluZSBHYXJkZW4gPGR3YWluZWdhcmRlbkByb2dlcnMuY29tPgorICoKKyAqCisgKiBSZXBvcnQgcHJvYmxlbXMgdG8gdjRsIE1haWxpbmdMaXN0IDogaHR0cDovL3d3dy5yZWRoYXQuY29tL21haWxtYW4vbGlzdGluZm8vdmlkZW80bGludXgtbGlzdAorICoKKyAqIFRoaXMgbW9kdWxlIGlzIHBhcnQgb2YgdXNidmlzaW9uIGRyaXZlciBwcm9qZWN0LgorICogVXBkYXRlcyB0byBkcml2ZXIgY29tcGxldGVkIGJ5IER3YWluZSBQLiBHYXJkZW4KKyAqIHY0bDIgY29udmVyc2lvbiBieSBUaGllcnJ5IE1lcmxlIDx0aGllcnJ5Lm1lcmxlQGZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworCisjaWZuZGVmIF9fTElOVVhfVVNCVklTSU9OX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JWSVNJT05fSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2RlZmluZSBVU0JWSVNJT05fREVCVUcJCS8qIFR1cm4gb24gZGVidWcgbWVzc2FnZXMgKi8KKworI2lmbmRlZiBWSURfSEFSRFdBUkVfVVNCVklTSU9OCisJI2RlZmluZSBWSURfSEFSRFdBUkVfVVNCVklTSU9OIDM0ICAgLyogVVNCVmlzaW9uIFZpZGVvIEdyYWJiZXIgKi8KKyNlbmRpZgorCisjZGVmaW5lIFVTQlZJU0lPTl9QV1JfUkVHCQkweDAwCisJI2RlZmluZSBVU0JWSVNJT05fU1NQTkRfRU4JCSgxIDw8IDEpCisJI2RlZmluZSBVU0JWSVNJT05fUkVTMgkJCSgxIDw8IDIpCisJI2RlZmluZSBVU0JWSVNJT05fUFdSX1ZJRAkJKDEgPDwgNSkKKwkjZGVmaW5lIFVTQlZJU0lPTl9FMl9FTgkJCSgxIDw8IDcpCisjZGVmaW5lIFVTQlZJU0lPTl9DT05GSUdfUkVHCQkweDAxCisjZGVmaW5lIFVTQlZJU0lPTl9BRFJTX1JFRwkJMHgwMgorI2RlZmluZSBVU0JWSVNJT05fQUxURVJfUkVHCQkweDAzCisjZGVmaW5lIFVTQlZJU0lPTl9GT1JDRV9BTFRFUl9SRUcJMHgwNAorI2RlZmluZSBVU0JWSVNJT05fU1RBVFVTX1JFRwkJMHgwNQorI2RlZmluZSBVU0JWSVNJT05fSU9QSU5fUkVHCQkweDA2CisJI2RlZmluZSBVU0JWSVNJT05fSU9fMQkJCSgxIDw8IDApCisJI2RlZmluZSBVU0JWSVNJT05fSU9fMgkJCSgxIDw8IDEpCisJI2RlZmluZSBVU0JWSVNJT05fQVVESU9fSU4JCTAKKwkjZGVmaW5lIFVTQlZJU0lPTl9BVURJT19UVgkJMQorCSNkZWZpbmUgVVNCVklTSU9OX0FVRElPX1JBRElPCQkyCisJI2RlZmluZSBVU0JWSVNJT05fQVVESU9fTVVURQkJMworI2RlZmluZSBVU0JWSVNJT05fU0VSX01PREUJCTB4MDcKKyNkZWZpbmUgVVNCVklTSU9OX1NFUl9BRFJTCQkweDA4CisjZGVmaW5lIFVTQlZJU0lPTl9TRVJfQ09OVAkJMHgwOQorI2RlZmluZSBVU0JWSVNJT05fU0VSX0RBVDEJCTB4MEEKKyNkZWZpbmUgVVNCVklTSU9OX1NFUl9EQVQyCQkweDBCCisjZGVmaW5lIFVTQlZJU0lPTl9TRVJfREFUMwkJMHgwQworI2RlZmluZSBVU0JWSVNJT05fU0VSX0RBVDQJCTB4MEQKKyNkZWZpbmUgVVNCVklTSU9OX0VFX0RBVEEJCTB4MEUKKyNkZWZpbmUgVVNCVklTSU9OX0VFX0xTQkFECQkweDBGCisjZGVmaW5lIFVTQlZJU0lPTl9FRV9DT05UCQkweDEwCisjZGVmaW5lIFVTQlZJU0lPTl9EUk1fQ09OVAkJCTB4MTIKKwkjZGVmaW5lIFVTQlZJU0lPTl9SRUYJCQkoMSA8PCAwKQorCSNkZWZpbmUgVVNCVklTSU9OX1JFU19VUgkJKDEgPDwgMikKKwkjZGVmaW5lIFVTQlZJU0lPTl9SRVNfRkRMCQkoMSA8PCAzKQorCSNkZWZpbmUgVVNCVklTSU9OX1JFU19WRFcJCSgxIDw8IDQpCisjZGVmaW5lIFVTQlZJU0lPTl9EUk1fUFJNMQkJMHgxMworI2RlZmluZSBVU0JWSVNJT05fRFJNX1BSTTIJCTB4MTQKKyNkZWZpbmUgVVNCVklTSU9OX0RSTV9QUk0zCQkweDE1CisjZGVmaW5lIFVTQlZJU0lPTl9EUk1fUFJNNAkJMHgxNgorI2RlZmluZSBVU0JWSVNJT05fRFJNX1BSTTUJCTB4MTcKKyNkZWZpbmUgVVNCVklTSU9OX0RSTV9QUk02CQkweDE4CisjZGVmaW5lIFVTQlZJU0lPTl9EUk1fUFJNNwkJMHgxOQorI2RlZmluZSBVU0JWSVNJT05fRFJNX1BSTTgJCTB4MUEKKyNkZWZpbmUgVVNCVklTSU9OX1ZJTl9SRUcxCQkweDFCCisJI2RlZmluZSBVU0JWSVNJT05fOF80MjJfU1lOQwkJMHgwMQorCSNkZWZpbmUgVVNCVklTSU9OXzE2XzQyMl9TWU5DCQkweDAyCisJI2RlZmluZSBVU0JWSVNJT05fVlNOQ19QT0wJCSgxIDw8IDMpCisJI2RlZmluZSBVU0JWSVNJT05fSFNOQ19QT0wJCSgxIDw8IDQpCisJI2RlZmluZSBVU0JWSVNJT05fRklEX1BPTAkJKDEgPDwgNSkKKwkjZGVmaW5lIFVTQlZJU0lPTl9IVkFMSURfUE8JCSgxIDw8IDYpCisJI2RlZmluZSBVU0JWSVNJT05fVkNMS19QT0wJCSgxIDw8IDcpCisjZGVmaW5lIFVTQlZJU0lPTl9WSU5fUkVHMgkJMHgxQworCSNkZWZpbmUgVVNCVklTSU9OX0FVVE9fRklECQkoMSA8PCAwKQorCSNkZWZpbmUgVVNCVklTSU9OX05PTkVfSU5URVIJCSgxIDw8IDEpCisJI2RlZmluZSBVU0JWSVNJT05fTk9IVkFMSUQJCSgxIDw8IDIpCisJI2RlZmluZSBVU0JWSVNJT05fVVZfSUQJCQkoMSA8PCAzKQorCSNkZWZpbmUgVVNCVklTSU9OX0ZJWF8yQwkJKDEgPDwgNCkKKwkjZGVmaW5lIFVTQlZJU0lPTl9TRU5EX0ZJRAkJKDEgPDwgNSkKKwkjZGVmaW5lIFVTQlZJU0lPTl9LRUVQX0JMQU5LCQkoMSA8PCA3KQorI2RlZmluZSBVU0JWSVNJT05fTFhTSVpFX0kJCTB4MUQKKyNkZWZpbmUgVVNCVklTSU9OX01YU0laRV9JCQkweDFFCisjZGVmaW5lIFVTQlZJU0lPTl9MWVNJWkVfSQkJMHgxRgorI2RlZmluZSBVU0JWSVNJT05fTVlTSVpFX0kJCTB4MjAKKyNkZWZpbmUgVVNCVklTSU9OX0xYX09GRlNUCQkweDIxCisjZGVmaW5lIFVTQlZJU0lPTl9NWF9PRkZTVAkJMHgyMgorI2RlZmluZSBVU0JWSVNJT05fTFlfT0ZGU1QJCTB4MjMKKyNkZWZpbmUgVVNCVklTSU9OX01ZX09GRlNUCQkweDI0CisjZGVmaW5lIFVTQlZJU0lPTl9GUk1fUkFURQkJMHgyNQorI2RlZmluZSBVU0JWSVNJT05fTFhTSVpFX08JCTB4MjYKKyNkZWZpbmUgVVNCVklTSU9OX01YU0laRV9PCQkweDI3CisjZGVmaW5lIFVTQlZJU0lPTl9MWVNJWkVfTwkJMHgyOAorI2RlZmluZSBVU0JWSVNJT05fTVlTSVpFX08JCTB4MjkKKyNkZWZpbmUgVVNCVklTSU9OX0ZJTFRfQ09OVAkJMHgyQQorI2RlZmluZSBVU0JWSVNJT05fVk9fTU9ERQkJMHgyQgorI2RlZmluZSBVU0JWSVNJT05fSU5UUkFfQ1lDCQkweDJDCisjZGVmaW5lIFVTQlZJU0lPTl9TVFJJUF9TWgkJMHgyRAorI2RlZmluZSBVU0JWSVNJT05fRk9SQ0VfSU5UUkEJCTB4MkUKKyNkZWZpbmUgVVNCVklTSU9OX0ZPUkNFX1VQCQkweDJGCisjZGVmaW5lIFVTQlZJU0lPTl9CVUZfVEhSCQkweDMwCisjZGVmaW5lIFVTQlZJU0lPTl9EVklfWVVWCQkweDMxCisjZGVmaW5lIFVTQlZJU0lPTl9BVURJT19DT05UCQkweDMyCisjZGVmaW5lIFVTQlZJU0lPTl9BVURfUEtfTEVOCQkweDMzCisjZGVmaW5lIFVTQlZJU0lPTl9CTEtfUEtfTEVOCQkweDM0CisjZGVmaW5lIFVTQlZJU0lPTl9QQ01fVEhSMQkJMHgzOAorI2RlZmluZSBVU0JWSVNJT05fUENNX1RIUjIJCTB4MzkKKyNkZWZpbmUgVVNCVklTSU9OX0RJU1RfVEhSX0wJCTB4M0EKKyNkZWZpbmUgVVNCVklTSU9OX0RJU1RfVEhSX0gJCTB4M0IKKyNkZWZpbmUgVVNCVklTSU9OX01BWF9ESVNUX0wJCTB4M0MKKyNkZWZpbmUgVVNCVklTSU9OX01BWF9ESVNUX0gJCTB4M0QKKyNkZWZpbmUgVVNCVklTSU9OX09QX0NPREUJCTB4MzMKKworI2RlZmluZSBNQVhfQllURVNfUEVSX1BJWEVMCQk0CisKKyNkZWZpbmUgTUlOX0ZSQU1FX1dJRFRICQkJNjQKKyNkZWZpbmUgTUFYX1VTQl9XSURUSAkJCTMyMCAgLy8zODQKKyNkZWZpbmUgTUFYX0ZSQU1FX1dJRFRICQkJMzIwICAvLzM4NAkJCS8qc3RyZWNoaW5nIHNvbWV0aW1lcyBjYXVzZXMgY3Jhc2hlcyovCisKKyNkZWZpbmUgTUlOX0ZSQU1FX0hFSUdIVAkJNDgKKyNkZWZpbmUgTUFYX1VTQl9IRUlHSFQJCQkyNDAgIC8vMjg4CisjZGVmaW5lIE1BWF9GUkFNRV9IRUlHSFQJCTI0MCAgLy8yODgJCQkvKlN0cmVjaGluZyBzb21ldGltZXMgY2F1c2VzIGNyYXNoZXMqLworCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFICAgICAJCShNQVhfRlJBTUVfV0lEVEggKiBNQVhfRlJBTUVfSEVJR0hUICogTUFYX0JZVEVTX1BFUl9QSVhFTCkKKyNkZWZpbmUgVVNCVklTSU9OX0NMSVBNQVNLX1NJWkUJCShNQVhfRlJBTUVfV0lEVEggKiBNQVhfRlJBTUVfSEVJR0hUIC8gOCkgLy9ieXRlc2l6ZSBvZiBjbGlwbWFzaworCisjZGVmaW5lIFVTQlZJU0lPTl9VUkJfRlJBTUVTCQkzMgorI2RlZmluZSBVU0JWSVNJT05fTUFYX0lTT0NfUEFDS0VUX1NJWkUgCTk1OQkJCS8vIE5UMTAwMyBTcGVjcyBEb2N1bWVudCBzYXlzIDEwMjMKKworI2RlZmluZSBVU0JWSVNJT05fTlVNX0hFQURFUk1BUktFUgkyMAorI2RlZmluZSBVU0JWSVNJT05fTlVNRlJBTUVTCQkzICAvKiBNYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgYW4gYXBwbGljYXRpb24gY2FuIGdldCAqLworI2RlZmluZSBVU0JWSVNJT05fTlVNU0JVRgkJMiAvKiBEaW1lbnNpb25pbmcgdGhlIFVTQiBTIGJ1ZmZlcmluZyAqLworCisjZGVmaW5lIFVTQlZJU0lPTl9QT1dFUk9GRl9USU1FCQkzICogKEhaKQkJLy8gMyBzZWNvbmRzCisKKworI2RlZmluZSBGUkFNRVJBVEVfTUlOCTAKKyNkZWZpbmUgRlJBTUVSQVRFX01BWAkzMQorCitlbnVtIHsKKwlJU09DX01PREVfWVVWNDIyID0gMHgwMywKKwlJU09DX01PREVfWVVWNDIwID0gMHgxNCwKKwlJU09DX01PREVfQ09NUFJFU1MgPSAweDYwLAorfTsKKworLyogVGhpcyBtYWNybyByZXN0cmljdHMgYW4gaW50IHZhcmlhYmxlIHRvIGFuIGluY2x1c2l2ZSByYW5nZSAqLworI2RlZmluZSBSRVNUUklDVF9UT19SQU5HRSh2LG1pLG1hKSB7IGlmICgodikgPCAobWkpKSAodikgPSAobWkpOyBlbHNlIGlmICgodikgPiAobWEpKSAodikgPSAobWEpOyB9CisKKy8qCisgKiBXZSB1c2UgbWFjcm9zIHRvIGRvIFlVViAtPiBSR0IgY29udmVyc2lvbiBiZWNhdXNlIHRoaXMgaXMKKyAqIHZlcnkgaW1wb3J0YW50IGZvciBzcGVlZCBhbmQgdG90YWxseSB1bmltcG9ydGFudCBmb3Igc2l6ZS4KKyAqCisgKiBZVVYgLT4gUkdCIENvbnZlcnNpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEIgPSAxLjE2NCooWS0xNikJCSAgICArIDIuMDE4KihWLTEyOCkKKyAqIEcgPSAxLjE2NCooWS0xNikgLSAwLjgxMyooVS0xMjgpIC0gMC4zOTEqKFYtMTI4KQorICogUiA9IDEuMTY0KihZLTE2KSArIDEuNTk2KihVLTEyOCkKKyAqCisgKiBJZiB5b3UgZmFuY3kgaW50ZWdlciBhcml0aG1ldGljcyAoYXMgeW91IHNob3VsZCksIGhlYXIgdGhpczoKKyAqCisgKiA2NTUzNipCID0gNzYyODQqKFktMTYpCQkgICsgMTMyMjUyKihWLTEyOCkKKyAqIDY1NTM2KkcgPSA3NjI4NCooWS0xNikgLSAgNTMyODEqKFUtMTI4KSAtICAyNTYyNSooVi0xMjgpCisgKiA2NTUzNipSID0gNzYyODQqKFktMTYpICsgMTA0NTk1KihVLTEyOCkKKyAqCisgKiBNYWtlIHN1cmUgdGhlIG91dHB1dCB2YWx1ZXMgYXJlIHdpdGhpbiBbMC4uMjU1XSByYW5nZS4KKyAqLworI2RlZmluZSBMSU1JVF9SR0IoeCkgKCgoeCkgPCAwKSA/IDAgOiAoKCh4KSA+IDI1NSkgPyAyNTUgOiAoeCkpKQorI2RlZmluZSBZVVZfVE9fUkdCX0JZX1RIRV9CT09LKG15LG11LG12LG1yLG1nLG1iKSB7IFwKKyAgICBpbnQgbW1feSwgbW1feWMsIG1tX3UsIG1tX3YsIG1tX3IsIG1tX2csIG1tX2I7IFwKKyAgICBtbV95ID0gKG15KSAtIDE2OyAgXAorICAgIG1tX3UgPSAobXUpIC0gMTI4OyBcCisgICAgbW1fdiA9IChtdikgLSAxMjg7IFwKKyAgICBtbV95Yz0gbW1feSAqIDc2Mjg0OyBcCisgICAgbW1fYiA9IChtbV95YwkJKyAxMzIyNTIqbW1fdgkpID4+IDE2OyBcCisgICAgbW1fZyA9IChtbV95YyAtICA1MzI4MSptbV91IC0gIDI1NjI1Km1tX3YJKSA+PiAxNjsgXAorICAgIG1tX3IgPSAobW1feWMgKyAxMDQ1OTUqbW1fdQkJCSkgPj4gMTY7IFwKKyAgICBtYiA9IExJTUlUX1JHQihtbV9iKTsgXAorICAgIG1nID0gTElNSVRfUkdCKG1tX2cpOyBcCisgICAgbXIgPSBMSU1JVF9SR0IobW1fcik7IFwKK30KKworLyogRGVidWdnaW5nIGFpZCAqLworI2RlZmluZSBVU0JWSVNJT05fU0FZX0FORF9XQUlUKHdoYXQpIHsgXAorCXdhaXRfcXVldWVfaGVhZF90IHdxOyBcCisJaW5pdF93YWl0cXVldWVfaGVhZCgmd3EpOyBcCisJcHJpbnRrKEtFUk5fSU5GTyAiU2F5OiAlc1xuIiwgd2hhdCk7IFwKKwlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQgKCZ3cSwgSFoqMyk7IFwKK30KKworLyoKKyAqIFRoaXMgbWFjcm8gY2hlY2tzIGlmIHVzYnZpc2lvbiBpcyBzdGlsbCBvcGVyYXRpb25hbC4gVGhlICd1c2J2aXNpb24nCisgKiBwb2ludGVyIG11c3QgYmUgdmFsaWQsIHVzYnZpc2lvbi0+ZGV2IG11c3QgYmUgdmFsaWQsIHdlIGFyZSBub3QKKyAqIHJlbW92aW5nIHRoZSBkZXZpY2UgYW5kIHRoZSBkZXZpY2UgaGFzIG5vdCBlcnJlZCBvbiB1cy4KKyAqLworI2RlZmluZSBVU0JWSVNJT05fSVNfT1BFUkFUSU9OQUwodWRldmljZSkgKFwKKwkodWRldmljZSAhPSBOVUxMKSAmJiBcCisJKCh1ZGV2aWNlKS0+ZGV2ICE9IE5VTEwpICYmIFwKKwkoKHVkZXZpY2UpLT5sYXN0X2Vycm9yID09IDApICYmIFwKKwkoISh1ZGV2aWNlKS0+cmVtb3ZlX3BlbmRpbmcpKQorCisjZGVmaW5lIEkyQ19VU0JfQURBUF9NQVgJMTYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHVzYnZpc2lvbiB2aWRlbyBzdHJ1Y3R1cmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworZW51bSBTY2FuU3RhdGUgeworCVNjYW5TdGF0ZV9TY2FubmluZywJLyogU2Nhbm5pbmcgZm9yIGhlYWRlciAqLworCVNjYW5TdGF0ZV9MaW5lcwkJLyogUGFyc2luZyBsaW5lcyAqLworfTsKKworLyogQ29tcGxldGlvbiBzdGF0ZXMgb2YgdGhlIGRhdGEgcGFyc2VyICovCitlbnVtIFBhcnNlU3RhdGUgeworCVBhcnNlU3RhdGVfQ29udGludWUsCS8qIEp1c3QgcGFyc2UgbmV4dCBpdGVtICovCisJUGFyc2VTdGF0ZV9OZXh0RnJhbWUsCS8qIEZyYW1lIGRvbmUsIHNlbmQgaXQgdG8gVjRMICovCisJUGFyc2VTdGF0ZV9PdXQsCQkvKiBOb3QgZW5vdWdoIGRhdGEgZm9yIGZyYW1lICovCisJUGFyc2VTdGF0ZV9FbmRQYXJzZQkvKiBFbmQgcGFyc2luZyAqLworfTsKKworZW51bSBGcmFtZVN0YXRlIHsKKwlGcmFtZVN0YXRlX1VudXNlZCwJLyogVW51c2VkIChubyBNQ0FQVFVSRSkgKi8KKwlGcmFtZVN0YXRlX1JlYWR5LAkvKiBSZWFkeSB0byBzdGFydCBncmFiYmluZyAqLworCUZyYW1lU3RhdGVfR3JhYmJpbmcsCS8qIEluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGdyYWJiZWQgaW50byAqLworCUZyYW1lU3RhdGVfRG9uZSwJLyogRmluaXNoZWQgZ3JhYmJpbmcsIGJ1dCBub3QgYmVlbiBzeW5jZWQgeWV0ICovCisJRnJhbWVTdGF0ZV9Eb25lSG9sZCwJLyogQXJlIHN5bmNpbmcgb3IgcmVhZGluZyAqLworCUZyYW1lU3RhdGVfRXJyb3IsCS8qIFNvbWV0aGluZyBiYWQgaGFwcGVuZWQgd2hpbGUgcHJvY2Vzc2luZyAqLworfTsKKworLyogc3RyZWFtIHN0YXRlcyAqLworZW51bSBTdHJlYW1TdGF0ZSB7CisJU3RyZWFtX09mZiwJCS8qIERyaXZlciBzdHJlYW1pbmcgaXMgY29tcGxldGVseSBPRkYgKi8KKwlTdHJlYW1fSWRsZSwJCS8qIERyaXZlciBzdHJlYW1pbmcgaXMgcmVhZHkgdG8gYmUgcHV0IE9OIGJ5IHRoZSBhcHBsaWNhdGlvbiAqLworCVN0cmVhbV9JbnRlcnJ1cHQsCS8qIERyaXZlciBzdHJlYW1pbmcgbXVzdCBiZSBpbnRlcnJ1cHRlZCAqLworCVN0cmVhbV9PbiwJCS8qIERyaXZlciBzdHJlYW1pbmcgaXMgcHV0IE9OIGJ5IHRoZSBhcHBsaWNhdGlvbiAqLworfTsKKworZW51bSBJc29jU3RhdGUgeworCUlzb2NTdGF0ZV9JbkZyYW1lLAkvKiBJc29jIHBhY2tldCBpcyBtZW1iZXIgb2YgZnJhbWUgKi8KKwlJc29jU3RhdGVfTm9GcmFtZSwJLyogSXNvYyBwYWNrZXQgaXMgbm90IG1lbWJlciBvZiBhbnkgZnJhbWUgKi8KK307CisKK3N0cnVjdCB1c2JfZGV2aWNlOworCitzdHJ1Y3QgdXNidmlzaW9uX3NidWYgeworCWNoYXIgKmRhdGE7CisJc3RydWN0IHVyYiAqdXJiOworfTsKKworI2RlZmluZSBVU0JWSVNJT05fTUFHSUNfMSAgICAgIAkJCTB4NTUKKyNkZWZpbmUgVVNCVklTSU9OX01BR0lDXzIgICAgICAJCQkweEFBCisjZGVmaW5lIFVTQlZJU0lPTl9IRUFERVJfTEVOR1RICQkJMHgwYworI2RlZmluZSBVU0JWSVNJT05fU0FBNzExMV9BRERSCQkJMHg0OAorI2RlZmluZSBVU0JWSVNJT05fU0FBNzExM19BRERSCQkJMHg0YQorI2RlZmluZSBVU0JWSVNJT05fSUlDX0xSQUNLCQkJMHgyMAorI2RlZmluZSBVU0JWSVNJT05fSUlDX0xSTkFDSwkJCTB4MzAKKyNkZWZpbmUgVVNCVklTSU9OX0ZSQU1FX0ZPUk1BVF9QQVJBTV9JTlRSQQkoMTw8NykKKworc3RydWN0IHVzYnZpc2lvbl92NGwyX2Zvcm1hdF9zdCB7CisJaW50CQlzdXBwb3J0ZWQ7CisJaW50CQlieXRlc19wZXJfcGl4ZWw7CisJaW50CQlkZXB0aDsKKwlpbnQJCWZvcm1hdDsKKwljaGFyCQkqZGVzYzsKK307CisjZGVmaW5lIFVTQlZJU0lPTl9TVVBQT1JURURfUEFMRVRURVMgQVJSQVlfU0laRSh1c2J2aXNpb25fdjRsMl9mb3JtYXQpCisKK3N0cnVjdCB1c2J2aXNpb25fZnJhbWVfaGVhZGVyIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljXzE7CQkJCS8qIDAgbWFnaWMgKi8KKwl1bnNpZ25lZCBjaGFyIG1hZ2ljXzI7CQkJCS8qIDEgIG1hZ2ljICovCisJdW5zaWduZWQgY2hhciBoZWFkZXJMZW5ndGg7CQkJLyogMiAqLworCXVuc2lnbmVkIGNoYXIgZnJhbWVOdW07CQkJCS8qIDMgKi8KKwl1bnNpZ25lZCBjaGFyIGZyYW1lUGhhc2U7CQkJLyogNCAqLworCXVuc2lnbmVkIGNoYXIgZnJhbWVMYXRlbmN5OwkJCS8qIDUgKi8KKwl1bnNpZ25lZCBjaGFyIGRhdGFGb3JtYXQ7CQkJLyogNiAqLworCXVuc2lnbmVkIGNoYXIgZm9ybWF0UGFyYW07CQkJLyogNyAqLworCXVuc2lnbmVkIGNoYXIgZnJhbWVXaWR0aExvOwkJCS8qIDggKi8KKwl1bnNpZ25lZCBjaGFyIGZyYW1lV2lkdGhIaTsJCQkvKiA5ICovCisJdW5zaWduZWQgY2hhciBmcmFtZUhlaWdodExvOwkJCS8qIDEwICovCisJdW5zaWduZWQgY2hhciBmcmFtZUhlaWdodEhpOwkJCS8qIDExICovCisJX191MTYgZnJhbWVXaWR0aDsJCQkJLyogOCAtIDkgYWZ0ZXIgZW5kaWFuIGNvcnJlY3Rpb24qLworCV9fdTE2IGZyYW1lSGVpZ2h0OwkJCQkvKiAxMCAtIDExIGFmdGVyIGVuZGlhbiBjb3JyZWN0aW9uKi8KK307CisKKy8qIHR2bm9ybXMgKi8KK3N0cnVjdCB1c2J2aXNpb25fdHZub3JtIHsKKwljaGFyICpuYW1lOworCXY0bDJfc3RkX2lkIGlkOworCS8qIG1vZGUgZm9yIHNhYTcxMTNoICovCisJaW50IG1vZGU7Cit9OworCitzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lIHsKKwljaGFyICpkYXRhOwkJCQkJLyogRnJhbWUgYnVmZmVyICovCisJc3RydWN0IHVzYnZpc2lvbl9mcmFtZV9oZWFkZXIgaXNvY0hlYWRlcjsJLyogSGVhZGVyIGZyb20gc3RyZWFtICovCisKKwlpbnQgd2lkdGg7CQkJCQkvKiBXaWR0aCBhcHBsaWNhdGlvbiBpcyBleHBlY3RpbmcgKi8KKwlpbnQgaGVpZ2h0OwkJCQkJLyogSGVpZ2h0ICovCisJaW50IGluZGV4OwkJCQkJLyogRnJhbWUgaW5kZXggKi8KKwlpbnQgZnJtd2lkdGg7CQkJCQkvKiBXaWR0aCB0aGUgZnJhbWUgYWN0dWFsbHkgaXMgKi8KKwlpbnQgZnJtaGVpZ2h0OwkJCQkJLyogSGVpZ2h0ICovCisKKwl2b2xhdGlsZSBpbnQgZ3JhYnN0YXRlOwkJCQkvKiBTdGF0ZSBvZiBncmFiYmluZyAqLworCWludCBzY2Fuc3RhdGU7CQkJCQkvKiBTdGF0ZSBvZiBzY2FubmluZyAqLworCisJc3RydWN0IGxpc3RfaGVhZCBmcmFtZTsKKworCWludCBjdXJsaW5lOwkJCQkJLyogTGluZSBvZiBmcmFtZSB3ZSdyZSB3b3JraW5nIG9uICovCisKKwlsb25nIHNjYW5sZW5ndGg7CQkJCS8qIHVuY29tcHJlc3NlZCwgcmF3IGRhdGEgbGVuZ3RoIG9mIGZyYW1lICovCisJbG9uZyBieXRlc19yZWFkOwkJCQkvKiBhbW91bnQgb2Ygc2Nhbmxlbmd0aCB0aGF0IGhhcyBiZWVuIHJlYWQgZnJvbSBkYXRhICovCisJc3RydWN0IHVzYnZpc2lvbl92NGwyX2Zvcm1hdF9zdCB2NGwyX2Zvcm1hdDsJLyogZm9ybWF0IHRoZSB1c2VyIG5lZWRzKi8KKwlpbnQgdjRsMl9saW5lc2l6ZTsJCQkJLyogYnl0ZXMgZm9yIG9uZSB2aWRlb2xpbmUqLworCXN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKKwlpbnQgc2VxdWVuY2U7CQkJCQkvLyBIb3cgbWFueSB2aWRlbyBmcmFtZXMgd2Ugc2VuZCB0byB1c2VyCit9OworCisjZGVmaW5lIENPREVDX1NBQTcxMTMJNzExMworI2RlZmluZSBDT0RFQ19TQUE3MTExCTcxMTEKKyNkZWZpbmUgQlJJREdFX05UMTAwMwkxMDAzCisjZGVmaW5lIEJSSURHRV9OVDEwMDQJMTAwNAorI2RlZmluZSBCUklER0VfTlQxMDA1ICAgMTAwNQorCitzdHJ1Y3QgdXNidmlzaW9uX2RldmljZV9kYXRhX3N0IHsKKwlpbnQgaWRWZW5kb3I7CisJaW50IGlkUHJvZHVjdDsKKwlpbnQgSW50ZXJmYWNlOyAvKiB0byBoYW5kbGUgc3BlY2lhbCBpbnRlcmZhY2UgbnVtYmVyIGxpa2UgQkVMS0lOIGFuZCBIYXVwcGF1Z2UgV2luVFYtVVNCIElJICovCisJaW50IENvZGVjOworCWludCBWaWRlb0NoYW5uZWxzOworCV9fdTY0IFZpZGVvTm9ybTsKKwlpbnQgQXVkaW9DaGFubmVsczsKKwlpbnQgUmFkaW87CisJaW50IHZiaTsKKwlpbnQgVHVuZXI7CisJaW50IFR1bmVyVHlwZTsKKwlpbnQgVmluX1JlZzE7CisJaW50IFZpbl9SZWcyOworCWludCBYX09mZnNldDsKKwlpbnQgWV9PZmZzZXQ7CisJaW50IER2aV95dXY7CisJY2hhciAqTW9kZWxTdHJpbmc7Cit9OworCisvKiBEZWNsYXJlZCBvbiB1c2J2aXNpb24tY2FyZHMuYyAqLworZXh0ZXJuIHN0cnVjdCB1c2J2aXNpb25fZGV2aWNlX2RhdGFfc3QgdXNidmlzaW9uX2RldmljZV9kYXRhW107CitleHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNidmlzaW9uX3RhYmxlW107CisKK3N0cnVjdCB1c2JfdXNidmlzaW9uIHsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OyAgICAgICAgIAkJCQkvKiBWaWRlbyBEZXZpY2UgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpyZGV2OyAgICAgICAgICAgICAgIAkJCS8qIFJhZGlvIERldmljZSAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZiaTsgCQkJCQkvKiBWQkkgRGV2aWNlICAgKi8KKworCS8qIGkyYyBEZWNsYXJhdGlvbiBTZWN0aW9uKi8KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CisJc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudDsKKworCXN0cnVjdCB1cmIgKmN0cmxVcmI7CisJdW5zaWduZWQgY2hhciBjdHJsVXJiQnVmZmVyWzhdOworCWludCBjdHJsVXJiQnVzeTsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGN0cmxVcmJTZXR1cDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBjdHJsVXJiX3dxOwkJCQkJLy8gUHJvY2Vzc2VzIHdhaXRpbmcKKwlzdHJ1Y3Qgc2VtYXBob3JlIGN0cmxVcmJMb2NrOworCisJLyogY29uZmlndXJhdGlvbiBwYXJ0ICovCisJaW50IGhhdmVfdHVuZXI7CisJaW50IHR1bmVyX3R5cGU7CisJaW50IHR1bmVyX2FkZHI7CisJaW50IGJyaWRnZVR5cGU7CQkJCQkJCS8vIE5UMTAwMywgTlQxMDA0LCBOVDEwMDUKKwlpbnQgY2hhbm5lbDsKKwlpbnQgcmFkaW87CisJaW50IHZpZGVvX2lucHV0czsJCQkJCQkvLyAjIG9mIGlucHV0cworCXVuc2lnbmVkIGxvbmcgZnJlcTsKKwlpbnQgQXVkaW9NdXRlOworCWludCBBdWRpb0NoYW5uZWw7CisJaW50IGlzb2NNb2RlOwkJCQkJCQkvLyBmb3JtYXQgb2YgdmlkZW8gZGF0YSBmb3IgdGhlIHVzYiBpc29jLXRyYW5zZmVyCisJdW5zaWduZWQgaW50IG5yOwkJCQkJCS8vIE51bWJlciBvZiB0aGUgZGV2aWNlCisKKwkvKiBEZXZpY2Ugc3RydWN0dXJlICovCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBjaGFyIGlmYWNlOwkJCQkJCS8qIFZpZGVvIGludGVyZmFjZSBudW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGlmYWNlQWx0QWN0aXZlLCBpZmFjZUFsdEluYWN0aXZlOwkJCS8qIEFsdCBzZXR0aW5ncyAqLworCXVuc2lnbmVkIGNoYXIgVmluX1JlZzJfUHJlc2V0OworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBwb3dlck9mZlRpbWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCBwb3dlck9mZldvcms7CisJaW50IHBvd2VyOwkJCQkJCQkvKiBpcyB0aGUgZGV2aWNlIHBvd2VyZWQgb24/ICovCisJaW50IHVzZXI7CQkJCQkJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KKwlpbnQgaW5pdGlhbGl6ZWQ7CQkJCQkJLyogSGFkIHdlIGFscmVhZHkgc2VudCBpbml0IHNlcXVlbmNlPyAqLworCWludCBEZXZNb2RlbDsJCQkJCQkJLyogV2hhdCB0eXBlIG9mIFVTQlZJU0lPTiBkZXZpY2Ugd2UgZ290PyAqLworCWVudW0gU3RyZWFtU3RhdGUgc3RyZWFtaW5nOwkJCQkJLyogQXJlIHdlIHN0cmVhbWluZyBJc29jaHJvbm91cz8gKi8KKwlpbnQgbGFzdF9lcnJvcjsJCQkJCQkJLyogV2hhdCBjYWxhbWl0eSBzdHJ1Y2sgdXM/ICovCisJaW50IGN1cndpZHRoOwkJCQkJCQkvKiB3aWR0aCBvZiB0aGUgZnJhbWUgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgc2V0IHRvKi8KKwlpbnQgY3VyaGVpZ2h0OyAgICAgIAkJCQkJCS8qIGhlaWdodCBvZiB0aGUgZnJhbWUgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgc2V0IHRvKi8KKwlpbnQgc3RyZXRjaF93aWR0aDsJCQkJCQkvKiBzdHJldGNoLWZhY3RvciBmb3IgZnJhbWUgd2lkdGggKGZyb20gdXNiIHRvIHNjcmVlbikqLworCWludCBzdHJldGNoX2hlaWdodDsJCQkJCQkvKiBzdHJldGNoLWZhY3RvciBmb3IgZnJhbWUgaGVpZ2h0IChmcm9tIHVzYiB0byBzY3JlZW4pKi8KKwljaGFyICpmYnVmOwkJCQkJCQkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSBmb3IgbW1hcCovCisJaW50IG1heF9mcmFtZV9zaXplOwkJCQkJCS8qIEJ5dGVzIGluIG9uZSB2aWRlbyBmcmFtZSAqLworCWludCBmYnVmX3NpemU7CQkJCQkJCS8qIFZpZGVvZGV2IGJ1ZmZlciBzaXplICovCisJc3BpbmxvY2tfdCBxdWV1ZV9sb2NrOwkJCQkJCS8qIHNwaW5sb2NrIGZvciBwcm90ZWN0aW5nIG1vZHMgb24gaW5xdWV1ZSBhbmQgb3V0cXVldWUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGlucXVldWUsIG91dHF1ZXVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcXVldWVkIGZyYW1lIGxpc3QgYW5kIHJlYWR5IHRvIGRlcXVldWUgZnJhbWUgbGlzdCAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfZnJhbWU7CQkJCQkvKiBQcm9jZXNzZXMgd2FpdGluZyAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfc3RyZWFtOwkJCQkJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KKwlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpjdXJGcmFtZTsJCQkJLy8gcG9pbnRlciB0byBjdXJyZW50IGZyYW1lLCBzZXQgYnkgdXNidmlzaW9uX2ZpbmRfaGVhZGVyCisJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSBmcmFtZVtVU0JWSVNJT05fTlVNRlJBTUVTXTsJCS8vIGZyYW1lIGJ1ZmZlcgorCXN0cnVjdCB1c2J2aXNpb25fc2J1ZiBzYnVmW1VTQlZJU0lPTl9OVU1TQlVGXTsJCQkvLyBTIGJ1ZmZlcmluZworCXZvbGF0aWxlIGludCByZW1vdmVfcGVuZGluZzsJCQkJCS8qIElmIHNldCB0aGVuIGFib3V0IHRvIGV4aXQgKi8KKworCS8qIFNjcmF0Y2ggc3BhY2UgZnJvbSB0aGUgSXNvY2hyb25vdXMgUGlwZS4qLworCXVuc2lnbmVkIGNoYXIgKnNjcmF0Y2g7CisJaW50IHNjcmF0Y2hfcmVhZF9wdHI7CisJaW50IHNjcmF0Y2hfd3JpdGVfcHRyOworCWludCBzY3JhdGNoX2hlYWRlcm1hcmtlcltVU0JWSVNJT05fTlVNX0hFQURFUk1BUktFUl07CisJaW50IHNjcmF0Y2hfaGVhZGVybWFya2VyX3JlYWRfcHRyOworCWludCBzY3JhdGNoX2hlYWRlcm1hcmtlcl93cml0ZV9wdHI7CisJZW51bSBJc29jU3RhdGUgaXNvY3N0YXRlOworCXN0cnVjdCB1c2J2aXNpb25fdjRsMl9mb3JtYXRfc3QgcGFsZXR0ZTsKKworCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgdmNhcDsJCQkJCS8qIFZpZGVvIGNhcGFiaWxpdGllcyAqLworCXVuc2lnbmVkIGludCBjdGxfaW5wdXQ7CQkJCQkJLyogc2VsZWN0ZWQgaW5wdXQgKi8KKwlzdHJ1Y3QgdXNidmlzaW9uX3R2bm9ybSAqdHZub3JtOwkJCQkvKiBzZWxlY3RlZCB0diBub3JtICovCisJdW5zaWduZWQgY2hhciB2aWRlb19lbmRwOwkJCQkJLyogMHg4MiBmb3IgVVNCVklTSU9OIGRldmljZXMgYmFzZWQgKi8KKworCS8vIERlY29tcHJlc3Npb24gc3R1ZmY6CisJdW5zaWduZWQgY2hhciAqSW50cmFGcmFtZUJ1ZmZlcjsJCQkJLyogQnVmZmVyIGZvciByZWZlcmVuY2UgZnJhbWUgKi8KKwlpbnQgQmxvY2tQb3M7IAkJCQkJCQkvL2ZvciB0ZXN0IG9ubHkKKwlpbnQgcmVxdWVzdEludHJhOwkJCQkJCS8vIDAgPSBub3JtYWw7IDEgPSBpbnRyYSBmcmFtZSBpcyByZXF1ZXN0ZWQ7CisJaW50IGxhc3RJc29jRnJhbWVOdW07CQkJCQkJLy8gY2hlY2sgZm9yIGxvc3QgaXNvYyBmcmFtZXMKKwlpbnQgaXNvY1BhY2tldFNpemU7CQkJCQkJLy8gbmVlZCB0byBjYWxjdWxhdGUgdXNlZEJhbmR3aWR0aAorCWludCB1c2VkQmFuZHdpZHRoOwkJCQkJCS8vIHVzZWQgYmFuZHdpZHRoIDAtMTAwJSwgbmVlZCB0byBzZXQgY29tcHJMZXZlbAorCWludCBjb21wckxldmVsOwkJCQkJCQkvLyBIb3cgc3Ryb25nICgxMDApIG9yIHdlYWsgKDApIGlzIGNvbXByZXNzaW9uCisJaW50IGxhc3RDb21wckxldmVsOwkJCQkJCS8vIEhvdyBzdHJvbmcgKDEwMCkgb3Igd2VhayAoMCkgd2FzIGNvbXByZXNzaW9uCisJaW50IHVzYl9iYW5kd2lkdGg7CQkJCQkJLyogTWJpdC9zICovCisKKwkvKiBTdGF0aXN0aWNzIHRoYXQgY2FuIGJlIG92ZXJsYXllZCBvbiB0aGUgc2NyZWVuICovCisJdW5zaWduZWQgbG9uZyBpc29jVXJiQ291bnQ7CQkJLy8gSG93IG1hbnkgVVJCcyB3ZSByZWNlaXZlZCBzbyBmYXIKKwl1bnNpZ25lZCBsb25nIHVyYl9sZW5ndGg7CQkJLyogTGVuZ3RoIG9mIGxhc3QgVVJCICovCisJdW5zaWduZWQgbG9uZyBpc29jRGF0YUNvdW50OwkJCS8qIEhvdyBtYW55IGJ5dGVzIHdlIHJlY2VpdmVkICovCisJdW5zaWduZWQgbG9uZyBoZWFkZXJfY291bnQ7CQkJLyogSG93IG1hbnkgZnJhbWUgaGVhZGVycyB3ZSBmb3VuZCAqLworCXVuc2lnbmVkIGxvbmcgc2NyYXRjaF9vdmZfY291bnQ7CQkvKiBIb3cgbWFueSB0aW1lcyB3ZSBvdmVyZmxvd2VkIHNjcmF0Y2ggKi8KKwl1bnNpZ25lZCBsb25nIGlzb2NTa2lwQ291bnQ7CQkJLyogSG93IG1hbnkgZW1wdHkgSVNPIHBhY2tldHMgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGlzb2NFcnJDb3VudDsJCQkvKiBIb3cgbWFueSBiYWQgSVNPIHBhY2tldHMgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGlzb2NQYWNrZXRDb3VudDsJCQkvLyBIb3cgbWFueSBwYWNrZXRzIHdlIHRvdGFsbHkgZ290CisJdW5zaWduZWQgbG9uZyB0aW1lSW5JcnE7CQkJLy8gSG93IGxvbmcgZG8gd2UgbmVlZCBmb3IgaW50ZXJydXB0CisJaW50IGlzb2NNZWFzdXJlQmFuZHdpZHRoQ291bnQ7CisJaW50IGZyYW1lX251bTsJCQkJCS8vIEhvdyBtYW55IHZpZGVvIGZyYW1lcyB3ZSBzZW5kIHRvIHVzZXIKKwlpbnQgbWF4U3RyaXBMZW47CQkJCS8vIEhvdyBiaWcgaXMgdGhlIGJpZ2dlc3Qgc3RyaXAKKwlpbnQgY29tcHJCbG9ja1BvczsKKwlpbnQgc3RyaXBMZW5FcnJvcnM7CQkJCS8vIEhvdyBtYW55IHRpbWVzIHdhcyBCbG9ja1BvcyBncmVhdGVyIHRoYW4gU3RyaXBMZW4KKwlpbnQgc3RyaXBNYWdpY0Vycm9yczsKKwlpbnQgc3RyaXBMaW5lTnVtYmVyRXJyb3JzOworCWludCBDb21wckJsb2NrVHlwZXNbNF07Cit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogZGVmaW5lZCBpbiB1c2J2aXNpb24taTJjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBpMmMtYWxnby11c2IgZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitpbnQgdXNidmlzaW9uX2kyY191c2JfZGVsX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHVzYnZpc2lvbiBzcGVjaWZpYyBJMkMgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworaW50IHVzYnZpc2lvbl9pbml0X2kyYyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKK3ZvaWQgY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZyk7CisKKy8qIGRlZmluZWQgaW4gdXNidmlzaW9uLWNvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3ZvaWQgdXNidmlzaW9uX3J2ZnJlZSh2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitpbnQgdXNidmlzaW9uX3JlYWRfcmVnKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIHVuc2lnbmVkIGNoYXIgcmVnKTsKK2ludCB1c2J2aXNpb25fd3JpdGVfcmVnKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkJdW5zaWduZWQgY2hhciB2YWx1ZSk7CisKK2ludCB1c2J2aXNpb25fZnJhbWVzX2FsbG9jKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwordm9pZCB1c2J2aXNpb25fZnJhbWVzX2ZyZWUoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CitpbnQgdXNidmlzaW9uX3NjcmF0Y2hfYWxsb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7Cit2b2lkIHVzYnZpc2lvbl9zY3JhdGNoX2ZyZWUoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CitpbnQgdXNidmlzaW9uX2RlY29tcHJlc3NfYWxsb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7Cit2b2lkIHVzYnZpc2lvbl9kZWNvbXByZXNzX2ZyZWUoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CisKK2ludCB1c2J2aXNpb25fc2V0dXAoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbixpbnQgZm9ybWF0KTsKK2ludCB1c2J2aXNpb25faW5pdF9pc29jKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOworaW50IHVzYnZpc2lvbl9yZXN0YXJ0X2lzb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7Cit2b2lkIHVzYnZpc2lvbl9zdG9wX2lzb2Moc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CisKK2ludCB1c2J2aXNpb25fc2V0X2F1ZGlvKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCBBdWRpb0NoYW5uZWwpOworaW50IHVzYnZpc2lvbl9hdWRpb19vZmYoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CisKK2ludCB1c2J2aXNpb25fYmVnaW5fc3RyZWFtaW5nKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwordm9pZCB1c2J2aXNpb25fZW1wdHlfZnJhbWVxdWV1ZXMoc3RydWN0IHVzYl91c2J2aXNpb24gKmRldik7CitpbnQgdXNidmlzaW9uX3N0cmVhbV9pbnRlcnJ1cHQoc3RydWN0IHVzYl91c2J2aXNpb24gKmRldik7CisKK2ludCB1c2J2aXNpb25fbXV4c2VsKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCBjaGFubmVsKTsKK2ludCB1c2J2aXNpb25fc2V0X2lucHV0KHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOworaW50IHVzYnZpc2lvbl9zZXRfb3V0cHV0KHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKK3ZvaWQgdXNidmlzaW9uX2luaXRfcG93ZXJPZmZUaW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKK3ZvaWQgdXNidmlzaW9uX3NldF9wb3dlck9mZlRpbWVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwordm9pZCB1c2J2aXNpb25fcmVzZXRfcG93ZXJPZmZUaW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKK2ludCB1c2J2aXNpb25fcG93ZXJfb2ZmKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOworaW50IHVzYnZpc2lvbl9wb3dlcl9vbihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKKworI2VuZGlmCQkJCQkJCQkJLyogX19MSU5VWF9VU0JWSVNJT05fSCAqLworCisvKgorICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwppbmRleCAxZDg5OWUyLi44YTEzZTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCkBAIC0zNTAsNiArMzUwLDcgQEAKIAkJc3RydWN0IHZpZGVvX2J1ZmZlcgkqYnVmZmVyID0gYXJnOwogCiAJCW1lbXNldChidWZmZXIsIDAsIHNpemVvZigqYnVmZmVyKSk7CisJCW1lbXNldCgmZmJ1ZjIsIDAsIHNpemVvZihmYnVmMikpOwogCiAJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX0dfRkJVRiwgJmZidWYyKTsKIAkJaWYgKGVyciA8IDApIHsKQEAgLTYxNiw2ICs2MTcsNyBAQAogCWNhc2UgVklESU9DU1BJQ1Q6IC8qICBzZXQgdG9uZSBjb250cm9scyAmIHBhcnRpYWwgY2FwdHVyZSBmb3JtYXQgICovCiAJewogCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZQkqcGljdCA9IGFyZzsKKwkJbWVtc2V0KCZmYnVmMiwgMCwgc2l6ZW9mKGZidWYyKSk7CiAKIAkJc2V0X3Y0bF9jb250cm9sKGlub2RlLCBmaWxlLAogCQkJCVY0TDJfQ0lEX0JSSUdIVE5FU1MsIHBpY3QtPmJyaWdodG5lc3MsIGRydik7CkBAIC03MDgsMTIgKzcxMCwyMiBAQAogCX0KIAljYXNlIFZJRElPQ1NUVU5FUjogLyogIHNlbGVjdCBhIHR1bmVyIGlucHV0ICAqLwogCXsKLQkJZXJyID0gMDsKKwkJc3RydWN0IHZpZGVvX3R1bmVyCSp0dW4gPSBhcmc7CisJCXN0cnVjdCB2NGwyX3R1bmVyCXQ7CisJCW1lbXNldCgmdCwwLHNpemVvZih0KSk7CisKKwkJdC5pbmRleD10dW4tPnR1bmVyOworCisJCWVyciA9IGRydihpbm9kZSwgZmlsZSwgVklESU9DX1NfSU5QVVQsICZ0KTsKKwkJaWYgKGVyciA8IDApCisJCQlkcHJpbnRrKCJWSURJT0NTVFVORVIgLyBWSURJT0NfU19JTlBVVDogJWRcbiIsZXJyKTsKKwogCQlicmVhazsKIAl9CiAJY2FzZSBWSURJT0NHRlJFUTogLyogIGdldCBmcmVxdWVuY3kgICovCiAJewogCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOworCQltZW1zZXQoJmZyZXEyLDAsc2l6ZW9mKGZyZXEyKSk7CiAKIAkJZnJlcTIudHVuZXIgPSAwOwogCQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX0ZSRVFVRU5DWSwgJmZyZXEyKTsKQEAgLTcyNiw4ICs3MzgsOCBAQAogCWNhc2UgVklESU9DU0ZSRVE6IC8qICBzZXQgZnJlcXVlbmN5ICAqLwogCXsKIAkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKKwkJbWVtc2V0KCZmcmVxMiwwLHNpemVvZihmcmVxMikpOwogCi0JCWZyZXEyLnR1bmVyID0gMDsKIAkJZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19GUkVRVUVOQ1ksICZmcmVxMik7CiAJCWZyZXEyLmZyZXF1ZW5jeSA9ICpmcmVxOwogCQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19TX0ZSRVFVRU5DWSwgJmZyZXEyKTsKQEAgLTczOCw2ICs3NTAsNyBAQAogCWNhc2UgVklESU9DR0FVRElPOiAvKiAgZ2V0IGF1ZGlvIHByb3BlcnRpZXMvY29udHJvbHMgICovCiAJewogCQlzdHJ1Y3QgdmlkZW9fYXVkaW8JKmF1ZCA9IGFyZzsKKwkJbWVtc2V0KCZhdWQyLDAsc2l6ZW9mKGF1ZDIpKTsKIAogCQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19HX0FVRElPLCAmYXVkMik7CiAJCWlmIChlcnIgPCAwKSB7CkBAIC04OTgsNiArOTExLDcgQEAKIAl7CiAJCWludAkJCSppID0gYXJnOwogCisJCW1lbXNldCgmYnVmMiwwLHNpemVvZihidWYyKSk7CiAJCWJ1ZjIuaW5kZXggPSAqaTsKIAkJYnVmMi50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCQllcnIgPSBkcnYoaW5vZGUsIGZpbGUsIFZJRElPQ19RVUVSWUJVRiwgJmJ1ZjIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCmluZGV4IDc4ZDI4YjAuLmI4N2Q1NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKQEAgLTg3LDYgKzg3LDg1IEBACiAgKi8KIAogCitjaGFyICp2NGwyX25vcm1fdG9fbmFtZSh2NGwyX3N0ZF9pZCBpZCkKK3sKKwljaGFyICpuYW1lOworCXUzMiBteWlkID0gaWQ7CisKKwkvKiBIQUNLOiBwcGMzMiBhcmNoaXRlY3R1cmUgZG9lc24ndCBoYXZlIF9fdWNtcGRpMiBmdW5jdGlvbiB0byBoYW5kbGUKKwkgICA2NCBiaXQgY29tcGFyYXRpb25zLiBTbywgb24gdGhhdCBhcmNoaXRlY3R1cmUsIHdpdGggc29tZSBnY2MgdmFyaWFudHMsCisJICAgY29tcGlsYXRpb24gZmFpbHMuIEN1cnJlbnRseSwgdGhlIG1heCB2YWx1ZSBpcyAzMGJpdCB3aWRlLgorCSAqLworCUJVR19PTihteWlkICE9IGlkKTsKKworCXN3aXRjaCAobXlpZCkgeworCWNhc2UgVjRMMl9TVERfUEFMOgorCQluYW1lPSJQQUwiOwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9QQUxfQkc6CisJCW5hbWU9IlBBTC1CRyI7CQlicmVhazsKKwljYXNlIFY0TDJfU1REX1BBTF9ESzoKKwkJbmFtZT0iUEFMLURLIjsJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfUEFMX0I6CisJCW5hbWU9IlBBTC1CIjsJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfUEFMX0IxOgorCQluYW1lPSJQQUwtQjEiOwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9QQUxfRzoKKwkJbmFtZT0iUEFMLUciOwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9QQUxfSDoKKwkJbmFtZT0iUEFMLUgiOwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9QQUxfSToKKwkJbmFtZT0iUEFMLUkiOwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9QQUxfRDoKKwkJbmFtZT0iUEFMLUQiOwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9QQUxfRDE6CisJCW5hbWU9IlBBTC1EMSI7CQlicmVhazsKKwljYXNlIFY0TDJfU1REX1BBTF9LOgorCQluYW1lPSJQQUwtSyI7CQlicmVhazsKKwljYXNlIFY0TDJfU1REX1BBTF9NOgorCQluYW1lPSJQQUwtTSI7CQlicmVhazsKKwljYXNlIFY0TDJfU1REX1BBTF9OOgorCQluYW1lPSJQQUwtTiI7CQlicmVhazsKKwljYXNlIFY0TDJfU1REX1BBTF9OYzoKKwkJbmFtZT0iUEFMLU5jIjsJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfUEFMXzYwOgorCQluYW1lPSJQQUwtNjAiOwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9OVFNDOgorCQluYW1lPSJOVFNDIjsJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfTlRTQ19NOgorCQluYW1lPSJOVFNDLU0iOwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9OVFNDX01fSlA6CisJCW5hbWU9Ik5UU0MtTS1KUCI7CWJyZWFrOworCWNhc2UgVjRMMl9TVERfTlRTQ180NDM6CisJCW5hbWU9Ik5UU0MtNDQzIjsJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9OVFNDX01fS1I6CisJCW5hbWU9Ik5UU0MtTS1LUiI7CWJyZWFrOworCWNhc2UgVjRMMl9TVERfU0VDQU06CisJCW5hbWU9IlNFQ0FNIjsJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfU0VDQU1fREs6CisJCW5hbWU9IlNFQ0FNLURLIjsJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9TRUNBTV9COgorCQluYW1lPSJTRUNBTS1CIjsJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfU0VDQU1fRDoKKwkJbmFtZT0iU0VDQU0tRCI7CQlicmVhazsKKwljYXNlIFY0TDJfU1REX1NFQ0FNX0c6CisJCW5hbWU9IlNFQ0FNLUciOwkJYnJlYWs7CisJY2FzZSBWNEwyX1NURF9TRUNBTV9IOgorCQluYW1lPSJTRUNBTS1IIjsJCWJyZWFrOworCWNhc2UgVjRMMl9TVERfU0VDQU1fSzoKKwkJbmFtZT0iU0VDQU0tSyI7CQlicmVhazsKKwljYXNlIFY0TDJfU1REX1NFQ0FNX0sxOgorCQluYW1lPSJTRUNBTS1LMSI7CWJyZWFrOworCWNhc2UgVjRMMl9TVERfU0VDQU1fTDoKKwkJbmFtZT0iU0VDQU0tTCI7CQlicmVhazsKKwljYXNlIFY0TDJfU1REX1NFQ0FNX0xDOgorCQluYW1lPSJTRUNBTS1MQyI7CWJyZWFrOworCWRlZmF1bHQ6CisJCW5hbWU9IlVua25vd24iOwkJYnJlYWs7CisJfQorCisJcmV0dXJuIG5hbWU7Cit9CisKIC8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiBhIHY0bDJfc3RhbmRhcmQgc3RydWN0dXJlIGFjY29yZGluZyB0byB0aGUKICAgICdpZCcgYW5kICd0cmFuc21pc3Npb24nIHBhcmFtZXRlcnMuICBSZXR1cm5zIG5lZ2F0aXZlIG9uIGVycm9yLiAgKi8KIGludCB2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RydWN0IHY0bDJfc3RhbmRhcmQgKnZzLApAQCAtMTg0LDExICsyNjMsMTMgQEAKIH07CiAKIGNoYXIgKnY0bDJfdHlwZV9uYW1lc1tdID0gewotCVtWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVdID0gInZpZGVvLWNhcCIsCi0JW1Y0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWV0gPSAidmlkZW8tb3ZlciIsCi0JW1Y0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUXSAgPSAidmlkZW8tb3V0IiwKLQlbVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRV0gICA9ICJ2YmktY2FwIiwKLQlbVjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUXSAgICA9ICJ2Ymktb3V0IiwKKwlbVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFXSAgICAgID0gInZpZGVvLWNhcCIsCisJW1Y0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWV0gICAgICA9ICJ2aWRlby1vdmVyIiwKKwlbVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRdICAgICAgID0gInZpZGVvLW91dCIsCisJW1Y0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkVdICAgICAgICA9ICJ2YmktY2FwIiwKKwlbVjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUXSAgICAgICAgID0gInZiaS1vdXQiLAorCVtWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRV0gPSAic2xpY2VkLXZiaS1jYXAiLAorCVtWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUXSAgPSAic2xpY2VjLXZiaS1vdXQiLAogfTsKIAogc3RhdGljIGNoYXIgKnY0bDJfbWVtb3J5X25hbWVzW10gPSB7CkBAIC0xNDUxLDYgKzE1MzIsNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitFWFBPUlRfU1lNQk9MKHY0bDJfbm9ybV90b19uYW1lKTsKIEVYUE9SVF9TWU1CT0wodjRsMl92aWRlb19zdGRfY29uc3RydWN0KTsKIAogRVhQT1JUX1NZTUJPTCh2NGwyX3ByaW9faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYwppbmRleCBmNDI5ZjQ5Li42NTA0YTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMKQEAgLTcwMCw2ICs3MDAsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCWlmIChidWYtPnN0YXRlID09IFNUQVRFX1FVRVVFRCB8fAorCSAgICBidWYtPnN0YXRlID09IFNUQVRFX1BSRVBBUkVEIHx8CiAJICAgIGJ1Zi0+c3RhdGUgPT0gU1RBVEVfQUNUSVZFKSB7CiAJCWRwcmludGsoMSwicWJ1ZjogYnVmZmVyIGlzIGFscmVhZHkgcXVldWVkIG9yIGFjdGl2ZS5cbiIpOwogCQlnb3RvIGRvbmU7CkBAIC0xMjI5LDcgKzEyMzAsNyBAQAogCQl2YWRkcix2bWEtPnZtX3N0YXJ0LHZtYS0+dm1fZW5kKTsKIAlpZiAodmFkZHIgPiB2bWEtPnZtX2VuZCkKIAkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7Ci0JcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX1VTRVIpOworCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9VU0VSIHwgX19HRlBfRE1BMzIpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIE5PUEFHRV9PT007CiAJY2xlYXJfdXNlcl9wYWdlKHBhZ2VfYWRkcmVzcyhwYWdlKSwgdmFkZHIsIHBhZ2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2NvZGVjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvY29kZWMuYwppbmRleCAyYWUzZmIyLi4yOTBlNjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvY29kZWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvY29kZWMuYwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAJCXNpemUpOwogCiAJa2ZyZWUodmlkZW9jb2RlY19idWYpOwotCXZpZGVvY29kZWNfYnVmID0gKGNoYXIgKikga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwl2aWRlb2NvZGVjX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpID0gMDsKIAlpICs9IHNjbnByaW50Zih2aWRlb2NvZGVjX2J1ZiArIGksIHNpemUgLSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCmluZGV4IGQ0MjRhNDEuLjZhMGU4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiBzdHJ1Y3QgdmlkZW9fZGV2aWNlKiB2aWRlb19kZXZkYXRhKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB2aWRlb19kZXZpY2VbaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKV07CisJcmV0dXJuIHZpZGVvX2RldmljZVtpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSldOwogfQogCiAvKgpAQCAtMzQyLDcgKzM0Miw3IEBACiAKIAlkYmdhcmcgKGNtZCwgIiUwMmxkOiUwMmQ6JTAyZC4lMDhsZCBpbmRleD0lZCwgdHlwZT0lcywgIgogCQkiYnl0ZXN1c2VkPSVkLCBmbGFncz0weCUwOGQsICIKLQkJImZpZWxkPSUwZCwgc2VxdWVuY2U9JWQsIG1lbW9yeT0lcywgb2Zmc2V0L3VzZXJwdHI9MHglMDhseFxuIiwKKwkJImZpZWxkPSUwZCwgc2VxdWVuY2U9JWQsIG1lbW9yeT0lcywgb2Zmc2V0L3VzZXJwdHI9MHglMDhseCwgbGVuZ3RoPSVkXG4iLAogCQkJKHAtPnRpbWVzdGFtcC50dl9zZWMvMzYwMCksCiAJCQkoaW50KShwLT50aW1lc3RhbXAudHZfc2VjLzYwKSU2MCwKIAkJCShpbnQpKHAtPnRpbWVzdGFtcC50dl9zZWMlNjApLApAQCAtMzUyLDcgKzM1Miw3IEBACiAJCQlwLT5ieXRlc3VzZWQscC0+ZmxhZ3MsCiAJCQlwLT5maWVsZCxwLT5zZXF1ZW5jZSwKIAkJCXBydF9uYW1lcyhwLT5tZW1vcnksdjRsMl9tZW1vcnlfbmFtZXMpLAotCQkJcC0+bS51c2VycHRyKTsKKwkJCXAtPm0udXNlcnB0ciwgcC0+bGVuZ3RoKTsKIAlkYmdhcmcyICgidGltZWNvZGU9ICUwMmQ6JTAyZDolMDJkIHR5cGU9JWQsICIKIAkJImZsYWdzPTB4JTA4ZCwgZnJhbWVzPSVkLCB1c2VyYml0cz0weCUwOHhcbiIsCiAJCQl0Yy0+aG91cnMsdGMtPm1pbnV0ZXMsdGMtPnNlY29uZHMsCkBAIC0zNjksOSArMzY5LDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdjRsX3ByaW50X3BpeF9mbXQgKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwKIAkJCQkJCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmZtdCkKIHsKLQlkYmdhcmcyICgid2lkdGg9JWQsIGhlaWdodD0lZCwgZm9ybWF0PTB4JTA4eCwgZmllbGQ9JXMsICIKKwlkYmdhcmcyICgid2lkdGg9JWQsIGhlaWdodD0lZCwgZm9ybWF0PSVjJWMlYyVjLCBmaWVsZD0lcywgIgogCQkiYnl0ZXNwZXJsaW5lPSVkIHNpemVpbWFnZT0lZCwgY29sb3JzcGFjZT0lZFxuIiwKLQkJZm10LT53aWR0aCxmbXQtPmhlaWdodCxmbXQtPnBpeGVsZm9ybWF0LAorCQlmbXQtPndpZHRoLGZtdC0+aGVpZ2h0LAorCQkoZm10LT5waXhlbGZvcm1hdCAmIDB4ZmYpLAorCQkoZm10LT5waXhlbGZvcm1hdCA+PiAgOCkgJiAweGZmLAorCQkoZm10LT5waXhlbGZvcm1hdCA+PiAxNikgJiAweGZmLAorCQkoZm10LT5waXhlbGZvcm1hdCA+PiAyNCkgJiAweGZmLAogCQlwcnRfbmFtZXMoZm10LT5maWVsZCx2NGwyX2ZpZWxkX25hbWVzX0ZJWE1FKSwKIAkJZm10LT5ieXRlc3BlcmxpbmUsZm10LT5zaXplaW1hZ2UsZm10LT5jb2xvcnNwYWNlKTsKIH07CkBAIC00MjgsNiArNDMyLDEwIEBACiAJCXY0bF9wcmludF9pb2N0bCh2ZmQtPm5hbWUsIGNtZCk7CiAJfQogCisJaWYgKF9JT0NfVFlQRShjbWQpPT0ndicpCisJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsCisJCQkJCQlfX3ZpZGVvX2RvX2lvY3RsKTsKKwogCXN3aXRjaChjbWQpIHsKIAkvKiAtLS0gY2FwYWJpbGl0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCWNhc2UgVklESU9DX1FVRVJZQ0FQOgpAQCAtNTI2LDEyICs1MzQsMTMgQEAKIAkJfQogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyAoY21kLCAiaW5kZXg9JWQsIHR5cGU9JWQsIGZsYWdzPSVkLCAiCi0JCQkJCSJkZXNjcmlwdGlvbj0lcywiCi0JCQkJCSIgcGl4ZWxmb3JtYXQ9MHglOHhcbiIsCisJCQkJCSJwaXhlbGZvcm1hdD0lYyVjJWMlYywgZGVzY3JpcHRpb249JyVzJ1xuIiwKIAkJCQkJZi0+aW5kZXgsIGYtPnR5cGUsIGYtPmZsYWdzLAotCQkJCQlmLT5kZXNjcmlwdGlvbiwKLQkJCQkJZi0+cGl4ZWxmb3JtYXQpOwotCisJCQkJCShmLT5waXhlbGZvcm1hdCAmIDB4ZmYpLAorCQkJCQkoZi0+cGl4ZWxmb3JtYXQgPj4gIDgpICYgMHhmZiwKKwkJCQkJKGYtPnBpeGVsZm9ybWF0ID4+IDE2KSAmIDB4ZmYsCisJCQkJCShmLT5waXhlbGZvcm1hdCA+PiAyNCkgJiAweGZmLAorCQkJCQlmLT5kZXNjcmlwdGlvbik7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJRElPQ19HX0ZNVDoKQEAgLTgyOSwyMCArODM4LDg1IEBACiAJY2FzZSBWSURJT0NfRU5VTVNURDoKIAl7CiAJCXN0cnVjdCB2NGwyX3N0YW5kYXJkICpwID0gYXJnOwotCQl1bnNpZ25lZCBpbnQgaW5kZXggPSBwLT5pbmRleDsKKwkJdjRsMl9zdGRfaWQgaWQgPSB2ZmQtPnR2bm9ybXMsY3Vycl9pZD0wOworCQl1bnNpZ25lZCBpbnQgaW5kZXggPSBwLT5pbmRleCxpOwogCi0JCWlmICghdmZkLT50dm5vcm1zaXplKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IG5vIFRWIG5vcm1zIGRlZmluZWQhXG4iLAotCQkJCQkJdmZkLT5uYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGluZGV4PDAgfHwgaW5kZXggPj0gdmZkLT50dm5vcm1zaXplKSB7CisJCWlmIChpbmRleDwwKSB7CiAJCQlyZXQ9LUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9Ci0JCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChwLCB2ZmQtPnR2bm9ybXNbcC0+aW5kZXhdLmlkLAotCQkJCQkgdmZkLT50dm5vcm1zW3AtPmluZGV4XS5uYW1lKTsKKworCQkvKiBSZXR1cm4gbm9ybSBhcnJheSBvbiBhIGNhbm9uaWNhbCB3YXkgKi8KKwkJZm9yIChpPTA7aTw9IGluZGV4ICYmIGlkOyBpKyspIHsKKwkJCWlmICggKGlkICYgVjRMMl9TVERfUEFMKSA9PSBWNEwyX1NURF9QQUwpIHsKKwkJCQljdXJyX2lkID0gVjRMMl9TVERfUEFMOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX0JHKSA9PSBWNEwyX1NURF9QQUxfQkcpIHsKKwkJCQljdXJyX2lkID0gVjRMMl9TVERfUEFMX0JHOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX0RLKSA9PSBWNEwyX1NURF9QQUxfREspIHsKKwkJCQljdXJyX2lkID0gVjRMMl9TVERfUEFMX0RLOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX0IpID09IFY0TDJfU1REX1BBTF9CKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1BBTF9COworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX0IxKSA9PSBWNEwyX1NURF9QQUxfQjEpIHsKKwkJCQljdXJyX2lkID0gVjRMMl9TVERfUEFMX0IxOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX0cpID09IFY0TDJfU1REX1BBTF9HKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1BBTF9HOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX0gpID09IFY0TDJfU1REX1BBTF9IKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1BBTF9IOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX0kpID09IFY0TDJfU1REX1BBTF9JKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1BBTF9JOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX0QpID09IFY0TDJfU1REX1BBTF9EKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1BBTF9EOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX0QxKSA9PSBWNEwyX1NURF9QQUxfRDEpIHsKKwkJCQljdXJyX2lkID0gVjRMMl9TVERfUEFMX0QxOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX0spID09IFY0TDJfU1REX1BBTF9LKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1BBTF9LOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX00pID09IFY0TDJfU1REX1BBTF9NKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1BBTF9NOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX04pID09IFY0TDJfU1REX1BBTF9OKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1BBTF9OOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMX05jKSA9PSBWNEwyX1NURF9QQUxfTmMpIHsKKwkJCQljdXJyX2lkID0gVjRMMl9TVERfUEFMX05jOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfUEFMXzYwKSA9PSBWNEwyX1NURF9QQUxfNjApIHsKKwkJCQljdXJyX2lkID0gVjRMMl9TVERfUEFMXzYwOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfTlRTQykgPT0gVjRMMl9TVERfTlRTQykgeworCQkJCWN1cnJfaWQgPSBWNEwyX1NURF9OVFNDOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfTlRTQ19NKSA9PSBWNEwyX1NURF9OVFNDX00pIHsKKwkJCQljdXJyX2lkID0gVjRMMl9TVERfTlRTQ19NOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfTlRTQ19NX0pQKSA9PSBWNEwyX1NURF9OVFNDX01fSlApIHsKKwkJCQljdXJyX2lkID0gVjRMMl9TVERfTlRTQ19NX0pQOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfTlRTQ180NDMpID09IFY0TDJfU1REX05UU0NfNDQzKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX05UU0NfNDQzOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfTlRTQ19NX0tSKSA9PSBWNEwyX1NURF9OVFNDX01fS1IpIHsKKwkJCQljdXJyX2lkID0gVjRMMl9TVERfTlRTQ19NX0tSOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfU0VDQU0pID09IFY0TDJfU1REX1NFQ0FNKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1NFQ0FNOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfU0VDQU1fREspID09IFY0TDJfU1REX1NFQ0FNX0RLKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1NFQ0FNX0RLOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfU0VDQU1fQikgPT0gVjRMMl9TVERfU0VDQU1fQikgeworCQkJCWN1cnJfaWQgPSBWNEwyX1NURF9TRUNBTV9COworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfU0VDQU1fRCkgPT0gVjRMMl9TVERfU0VDQU1fRCkgeworCQkJCWN1cnJfaWQgPSBWNEwyX1NURF9TRUNBTV9EOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfU0VDQU1fRykgPT0gVjRMMl9TVERfU0VDQU1fRykgeworCQkJCWN1cnJfaWQgPSBWNEwyX1NURF9TRUNBTV9HOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfU0VDQU1fSCkgPT0gVjRMMl9TVERfU0VDQU1fSCkgeworCQkJCWN1cnJfaWQgPSBWNEwyX1NURF9TRUNBTV9IOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfU0VDQU1fSykgPT0gVjRMMl9TVERfU0VDQU1fSykgeworCQkJCWN1cnJfaWQgPSBWNEwyX1NURF9TRUNBTV9LOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfU0VDQU1fSzEpID09IFY0TDJfU1REX1NFQ0FNX0sxKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1NFQ0FNX0sxOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfU0VDQU1fTCkgPT0gVjRMMl9TVERfU0VDQU1fTCkgeworCQkJCWN1cnJfaWQgPSBWNEwyX1NURF9TRUNBTV9MOworCQkJfSBlbHNlIGlmICggKGlkICYgVjRMMl9TVERfU0VDQU1fTEMpID09IFY0TDJfU1REX1NFQ0FNX0xDKSB7CisJCQkJY3Vycl9pZCA9IFY0TDJfU1REX1NFQ0FNX0xDOworCQkJfSBlbHNlIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlkICY9IH5jdXJyX2lkOworCQl9CisJCWlmIChpPD1pbmRleCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChwLCBjdXJyX2lkLHY0bDJfbm9ybV90b19uYW1lKGN1cnJfaWQpKTsKIAkJcC0+aW5kZXggPSBpbmRleDsKIAogCQlkYmdhcmcgKGNtZCwgImluZGV4PSVkLCBpZD0lTGQsIG5hbWU9JXMsIGZwcz0lZC8lZCwgIgpAQCAtODY4LDM5ICs5NDIsMjMgQEAKIAl9CiAJY2FzZSBWSURJT0NfU19TVEQ6CiAJewotCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7Ci0JCXVuc2lnbmVkIGludCBpOwotCi0JCWlmICghdmZkLT50dm5vcm1zaXplKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IG5vIFRWIG5vcm1zIGRlZmluZWQhXG4iLAotCQkJCQkJdmZkLT5uYW1lKTsKLQkJCWJyZWFrOwotCQl9CisJCXY0bDJfc3RkX2lkICppZCA9IGFyZyxub3JtOwogCiAJCWRiZ2FyZyAoY21kLCAidmFsdWU9JUx1XG4iLCAobG9uZyBsb25nIHVuc2lnbmVkKSAqaWQpOwogCi0JCS8qIEZpcnN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2ggKi8KLQkJZm9yIChpID0gMDsgaSA8IHZmZC0+dHZub3Jtc2l6ZTsgaSsrKQotCQkJaWYgKCppZCA9PSB2ZmQtPnR2bm9ybXNbaV0uaWQpCi0JCQkJYnJlYWs7Ci0JCS8qIFRoZW4gZm9yIGEgZ2VuZXJpYyB2aWRlbyBzdGQgdGhhdCBjb250YWlucyBkZXNpcmVkIHN0ZCAqLwotCQlpZiAoaSA9PSB2ZmQtPnR2bm9ybXNpemUpCi0JCQlmb3IgKGkgPSAwOyBpIDwgdmZkLT50dm5vcm1zaXplOyBpKyspCi0JCQkJaWYgKCppZCAmIHZmZC0+dHZub3Jtc1tpXS5pZCkKLQkJCQkJYnJlYWs7Ci0JCWlmIChpID09IHZmZC0+dHZub3Jtc2l6ZSkgeworCQlub3JtID0gKCppZCkgJiB2ZmQtPnR2bm9ybXM7CisJCWlmICggdmZkLT50dm5vcm1zICYmICFub3JtKQkvKiBDaGVjayBpZiBzdGQgaXMgc3VwcG9ydGVkICovCiAJCQlicmVhazsKLQkJfQogCiAJCS8qIENhbGxzIHRoZSBzcGVjaWZpYyBoYW5kbGVyICovCiAJCWlmICh2ZmQtPnZpZGlvY19zX3N0ZCkKLQkJCXJldD12ZmQtPnZpZGlvY19zX3N0ZChmaWxlLCBmaCwgaSk7CisJCQlyZXQ9dmZkLT52aWRpb2Nfc19zdGQoZmlsZSwgZmgsICZub3JtKTsKIAkJZWxzZQogCQkJcmV0PS1FSU5WQUw7CiAKIAkJLyogVXBkYXRlcyBzdGFuZGFyZCBpbmZvcm1hdGlvbiAqLwotCQlpZiAoIXJldCkKLQkJCXZmZC0+Y3VycmVudF9ub3JtPSppZDsKKwkJaWYgKHJldD49MCkKKwkJCXZmZC0+Y3VycmVudF9ub3JtPW5vcm07CiAKIAkJYnJlYWs7CiAJfQpAQCAtMTA4OCw5ICsxMTQ2LDEzIEBACiAJY2FzZSBWSURJT0NfR19BVURJTzoKIAl7CiAJCXN0cnVjdCB2NGwyX2F1ZGlvICpwPWFyZzsKKwkJX191MzIgaW5kZXg9cC0+aW5kZXg7CiAKIAkJaWYgKCF2ZmQtPnZpZGlvY19nX2F1ZGlvKQogCQkJYnJlYWs7CisKKwkJbWVtc2V0KHAsMCxzaXplb2YoKnApKTsKKwkJcC0+aW5kZXg9aW5kZXg7CiAJCWRiZ2FyZyhjbWQsICJHZXQgZm9yIGluZGV4PSVkXG4iLCBwLT5pbmRleCk7CiAJCXJldD12ZmQtPnZpZGlvY19nX2F1ZGlvKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCkBAIC0xMjg4LDI1ICsxMzUwLDEyIEBACiAJCQlyZXQ9dmZkLT52aWRpb2NfZ19wYXJtKGZpbGUsIGZoLCBwKTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCB2NGwyX3N0YW5kYXJkIHM7Ci0JCQlpbnQgaTsKLQotCQkJaWYgKCF2ZmQtPnR2bm9ybXNpemUpIHsKLQkJCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IG5vIFRWIG5vcm1zIGRlZmluZWQhXG4iLAotCQkJCQkJCXZmZC0+bmFtZSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CiAKIAkJCWlmIChwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJZm9yIChpID0gMDsgaSA8IHZmZC0+dHZub3Jtc2l6ZTsgaSsrKQotCQkJCWlmICh2ZmQtPnR2bm9ybXNbaV0uaWQgPT0gdmZkLT5jdXJyZW50X25vcm0pCi0JCQkJCWJyZWFrOwotCQkJaWYgKGkgPj0gdmZkLT50dm5vcm1zaXplKQotCQkJCXJldHVybiAtRUlOVkFMOwotCiAJCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3QoJnMsIHZmZC0+Y3VycmVudF9ub3JtLAotCQkJCQkJIHZmZC0+dHZub3Jtc1tpXS5uYW1lKTsKKwkJCQkJCSB2NGwyX25vcm1fdG9fbmFtZSh2ZmQtPmN1cnJlbnRfbm9ybSkpOwogCiAJCQltZW1zZXQocCwwLHNpemVvZigqcCkpOwogCkBAIC0xMzI5LDggKzEzNzgsMTQgQEAKIAljYXNlIFZJRElPQ19HX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnA9YXJnOworCQlfX3UzMiBpbmRleD1wLT5pbmRleDsKKwogCQlpZiAoIXZmZC0+dmlkaW9jX2dfdHVuZXIpCiAJCQlicmVhazsKKworCQltZW1zZXQocCwwLHNpemVvZigqcCkpOworCQlwLT5pbmRleD1pbmRleDsKKwogCQlyZXQ9dmZkLT52aWRpb2NfZ190dW5lcihmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQogCQkJZGJnYXJnIChjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgIgpAQCAtMTM2Myw2ICsxNDE4LDkgQEAKIAkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpwPWFyZzsKIAkJaWYgKCF2ZmQtPnZpZGlvY19nX2ZyZXF1ZW5jeSkKIAkJCWJyZWFrOworCisJCW1lbXNldChwLDAsc2l6ZW9mKCpwKSk7CisKIAkJcmV0PXZmZC0+dmlkaW9jX2dfZnJlcXVlbmN5KGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcgKGNtZCwgInR1bmVyPSVkLCB0eXBlPSVkLCBmcmVxdWVuY3k9JWRcbiIsCkBAIC0xMzk2LDEyICsxNDU0LDcgQEAKIAkJcmV0PXZmZC0+dmlkaW9jX2xvZ19zdGF0dXMoZmlsZSwgZmgpOwogCQlicmVhazsKIAl9Ci0KLQkvKiAtLS0gT3RoZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0JZGVmYXVsdDoKLQkJcmV0PXY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGlub2RlLGZpbGUsY21kLGFyZyxfX3ZpZGVvX2RvX2lvY3RsKTsKLQl9CisJfSAvKiBzd2l0Y2ggKi8KIAogCWlmICh2ZmQtPmRlYnVnICYgVjRMMl9ERUJVR19JT0NUTF9BUkcpIHsKIAkJaWYgKHJldDwwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCmluZGV4IDZiNmRmZjQuLmEzNzNjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCkBAIC03ODIsNyArNzgyLDcgQEAKIAogc3RhdGljIGludCB2aW5vX2kyY19kZWxfYnVzKHZvaWQpCiB7Ci0JcmV0dXJuIGkyY19zZ2lfZGVsX2J1cygmdmlub19pMmNfYWRhcHRlcik7CisJcmV0dXJuIGkyY19kZWxfYWRhcHRlcigmdmlub19pMmNfYWRhcHRlcik7CiB9CiAKIHN0YXRpYyBpbnQgaTJjX2NhbWVyYV9jb21tYW5kKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKaW5kZXggOTk4NmRlNS4uZDRjZjU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKQEAgLTI3MCwxMCArMjcwLDE1IEBACiAJY2hhciAqcCwqcywqYmFzZXA7CiAJc3RydWN0IHBhZ2UgKnBnOwogCXU4ICAgY2hyLHIsZyxiLGNvbG9yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3BpbmxvY2tfdCBzcGlubG9jazsKKworCXNwaW5fbG9ja19pbml0KCZzcGlubG9jayk7CiAKIAkvKiBHZXQgZmlyc3QgYWRkciBwb2ludGVkIHRvIHBpeGVsIHBvc2l0aW9uICovCiAJb2xkcGc9Z2V0X2FkZHJfcG9zKHBvcyxwYWdlcyx0b19hZGRyKTsKIAlwZz1wZm5fdG9fcGFnZShzZ19kbWFfYWRkcmVzcyh0b19hZGRyW29sZHBnXS5zZykgPj4gUEFHRV9TSElGVCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNwaW5sb2NrLGZsYWdzKTsKIAliYXNlcCA9IGttYXBfYXRvbWljKHBnLCBLTV9CT1VOQ0VfUkVBRCkrdG9fYWRkcltvbGRwZ10uc2ctPm9mZnNldDsKIAogCS8qIFdlIHdpbGwganVzdCBkdXBsaWNhdGUgdGhlIHNlY29uZCBwaXhlbCBhdCB0aGUgcGFja2V0ICovCkBAIC0zNzYsNiArMzgxLDggQEAKIAogZW5kOgogCWt1bm1hcF9hdG9taWMoYmFzZXAsIEtNX0JPVU5DRV9SRUFEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGlubG9jayxmbGFncyk7CisKIH0KIHN0YXRpYyB2b2lkIHZpdmlfZmlsbGJ1ZmYoc3RydWN0IHZpdmlfZGV2ICpkZXYsc3RydWN0IHZpdmlfYnVmZmVyICpidWYpCiB7CkBAIC01MzUsOSArNTQyLDkgQEAKIAogCWRtYV9xLT5rdGhyZWFkID0ga3RocmVhZF9ydW4odml2aV90aHJlYWQsIGRtYV9xLCAidml2aSIpOwogCi0JaWYgKGRtYV9xLT5rdGhyZWFkID09IE5VTEwpIHsKKwlpZiAoSVNfRVJSKGRtYV9xLT5rdGhyZWFkKSkgewogCQlwcmludGsoS0VSTl9FUlIgInZpdmk6IGtlcm5lbF90aHJlYWQoKSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIFBUUl9FUlIoZG1hX3EtPmt0aHJlYWQpOwogCX0KIAlkcHJpbnRrKDEsInJldHVybmluZyBmcm9tICVzXG4iLF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuIDA7CkBAIC0xMDQ0LDE2ICsxMDUxLDggQEAKIAlyZXR1cm4gKDApOwogfQogCi1zdGF0aWMgc3RydWN0IHY0bDJfdHZub3JtIHR2bm9ybXNbXSA9IHsKLQl7Ci0JCS5uYW1lICAgICAgPSAiTlRTQy1NIiwKLQkJLmlkICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKLQl9Ci19OwotCi1zdGF0aWMgaW50IHZpZGlvY19zX3N0ZCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkIGEpCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICppKQogewotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMzMsOCArMTMzMiw4IEBACiAjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAJLnZpZGlvY2dtYnVmICAgICAgICAgID0gdmlkaW9jZ21idWYsCiAjZW5kaWYKLQkudHZub3JtcyAgICAgICAgICAgICAgPSB0dm5vcm1zLAotCS50dm5vcm1zaXplICAgICAgICAgICA9IEFSUkFZX1NJWkUodHZub3JtcyksCisJLnR2bm9ybXMgICAgICAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAorCS5jdXJyZW50X25vcm0gICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKIH07CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCUluaXRpYWxpemF0aW9uIGFuZCBtb2R1bGUgc3R1ZmYKQEAgLTEzNjEsOCArMTM2MCw2IEBACiAJZGV2LT52aWRxLnRpbWVvdXQuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZylkZXY7CiAJaW5pdF90aW1lcigmZGV2LT52aWRxLnRpbWVvdXQpOwogCi0Jdml2aS5jdXJyZW50X25vcm0gICAgICAgICA9IHR2bm9ybXNbMF0uaWQ7Ci0KIAlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnZpdmksIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTsKIAlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBUZWNobm9sb2d5IE1hZ2F6aW5lIFZpcnR1YWwgVmlkZW8gQ2FwdHVyZSBCb2FyZCAoTG9hZCBzdGF0dXM6ICVkKVxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTM3Myw3ICsxMzcwLDkgQEAKIAlzdHJ1Y3Qgdml2aV9kZXYgKmg7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAotCWxpc3RfZm9yX2VhY2gobGlzdCwmdml2aV9kZXZsaXN0KSB7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ2aXZpX2Rldmxpc3QpKSB7CisJCWxpc3QgPSB2aXZpX2Rldmxpc3QubmV4dDsKKwkJbGlzdF9kZWwobGlzdCk7CiAJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB2aXZpX2Rldiwgdml2aV9kZXZsaXN0KTsKIAkJa2ZyZWUgKGgpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYwppbmRleCA0YmRjODg2Li44ZDE0ZjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCkBAIC03ODksNyArNzg5LDcgQEAKIAljYXNlIFZJRElPQ1NQSUNUOgogCXsKIAkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnZwaWMgPSBhcmc7Ci0JCWlmICh2cGljLT5kZXB0aCAhPSAxNiB8fCB2cGljLT5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfWVVWNDIyKQorCQlpZiAodnBpYy0+ZGVwdGggIT0gMTYgfHwgKHZwaWMtPnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9ZVVY0MjIgJiYgdnBpYy0+cGFsZXR0ZSAhPSBWSURFT19QQUxFVFRFX1lVWVYpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY2FtLT5icmlnaHRuZXNzID0gdnBpYy0+YnJpZ2h0bmVzcyA+PiA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwppbmRleCBkZGNlMmZiLi45ZjQwM2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwpAQCAtMTgyNyw4ICsxODI3LDggQEAKIAlpbnQgZXJyID0gMDsKIAogCS8qIFdvcmsgYXJvdW5kIHRvIGF2b2lkIEZQIGFyaXRobWV0aWNzICovCi0JI2RlZmluZSBfX1NDKHgpICgoeCkgPDwgMTApCi0JI2RlZmluZSBfX1VOU0MoeCkgKCh4KSA+PiAxMCkKKwkjZGVmaW5lIFNDKHgpICgoeCkgPDwgMTApCisJI2RlZmluZSBVTlNDKHgpICgoeCkgPj4gMTApCiAKIAkvKiBNYWtlIHN1cmUgd2UgYXJlIHVzaW5nIGEgc3VwcG9ydGVkIHJlc29sdXRpb24gKi8KIAlpZiAoKGVyciA9IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKGNhbSwgKHUxNiopJndpbi53aWR0aCwKQEAgLTE4MzYsMTUgKzE4MzYsMTUgQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIFNjYWxpbmcgZmFjdG9ycyAqLwotCWZ3ID0gX19TQyh3aW4ud2lkdGgpIC8gY2FtLT5tYXh3aWR0aDsKLQlmaCA9IF9fU0Mod2luLmhlaWdodCkgLyBjYW0tPm1heGhlaWdodDsKKwlmdyA9IFNDKHdpbi53aWR0aCkgLyBjYW0tPm1heHdpZHRoOworCWZoID0gU0Mod2luLmhlaWdodCkgLyBjYW0tPm1heGhlaWdodDsKIAogCS8qIFNldCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB2YWx1ZXMgdXNlZCBieSB0aGUgY2hpcCAqLwogCWlmICgod2luLndpZHRoID4gY2FtLT5tYXh3aWR0aCkgfHwgKHdpbi5oZWlnaHQgPiBjYW0tPm1heGhlaWdodCkpIHsKIAkJY2FtLT52cHBfZmxhZyB8PSBWUFBfVVBTQ0FMRTsKIAkJLyogQ2FsY3VsYXRlIGxhcmdlc3QgdyxoIG1hbnRhaW5pbmcgdGhlIHNhbWUgdy9oIHJhdGlvICovCi0JCXcgPSAoZncgPj0gZmgpID8gY2FtLT5tYXh3aWR0aCA6IF9fU0Mod2luLndpZHRoKS9maDsKLQkJaCA9IChmdyA+PSBmaCkgPyBfX1NDKHdpbi5oZWlnaHQpL2Z3IDogY2FtLT5tYXhoZWlnaHQ7CisJCXcgPSAoZncgPj0gZmgpID8gY2FtLT5tYXh3aWR0aCA6IFNDKHdpbi53aWR0aCkvZmg7CisJCWggPSAoZncgPj0gZmgpID8gU0Mod2luLmhlaWdodCkvZncgOiBjYW0tPm1heGhlaWdodDsKIAkJaWYgKHcgPCBjYW0tPm1pbndpZHRoKSAvKiBqdXN0IGluIGNhc2UgKi8KIAkJCXcgPSBjYW0tPm1pbndpZHRoOwogCQlpZiAoaCA8IGNhbS0+bWluaGVpZ2h0KSAvKiBqdXN0IGluIGNhc2UgKi8KQEAgLTE4NjEsOCArMTg2MSw4IEBACiAKIAkvKiBDYWxjdWxhdGUgY3JvcHBlZCBhcmVhIG1hbnRlaW5pbmcgdGhlIHJpZ2h0IHcvaCByYXRpbyAqLwogCWlmIChjYW0tPmxhcmdldmlldyAmJiAhKGNhbS0+dnBwX2ZsYWcgJiBWUFBfVVBTQ0FMRSkpIHsKLQkJY3cgPSAoZncgPj0gZmgpID8gY2FtLT5tYXh3aWR0aCA6IF9fU0Mod2luLndpZHRoKS9maDsKLQkJY2ggPSAoZncgPj0gZmgpID8gX19TQyh3aW4uaGVpZ2h0KS9mdyA6IGNhbS0+bWF4aGVpZ2h0OworCQljdyA9IChmdyA+PSBmaCkgPyBjYW0tPm1heHdpZHRoIDogU0Mod2luLndpZHRoKS9maDsKKwkJY2ggPSAoZncgPj0gZmgpID8gU0Mod2luLmhlaWdodCkvZncgOiBjYW0tPm1heGhlaWdodDsKIAl9IGVsc2UgewogCQljdyA9IHc7CiAJCWNoID0gaDsKQEAgLTE5MDEsOCArMTkwMSw4IEBACiAJLyogV2UgaGF2ZSB0byBzY2FsZSB3aW4ueCBhbmQgd2luLnkgb2Zmc2V0cyAqLwogCWlmICggKGNhbS0+bGFyZ2V2aWV3ICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9VUFNDQUxFKSkKIAkgICAgIHx8IChjYW0tPnZwcF9mbGFnICYgVlBQX1VQU0NBTEUpICkgewotCQlheCA9IF9fU0Mod2luLngpL2Z3OwotCQlheSA9IF9fU0Mod2luLnkpL2ZoOworCQlheCA9IFNDKHdpbi54KS9mdzsKKwkJYXkgPSBTQyh3aW4ueSkvZmg7CiAJfSBlbHNlIHsKIAkJYXggPSB3aW4ueDsKIAkJYXkgPSB3aW4ueTsKQEAgLTE5MTcsOCArMTkxNyw4IEBACiAJLyogQWRqdXN0IHdpbi54LCB3aW4ueSAqLwogCWlmICggKGNhbS0+bGFyZ2V2aWV3ICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9VUFNDQUxFKSkKIAkgICAgIHx8IChjYW0tPnZwcF9mbGFnICYgVlBQX1VQU0NBTEUpICkgewotCQl3aW4ueCA9IF9fVU5TQyhheCpmdyk7Ci0JCXdpbi55ID0gX19VTlNDKGF5KmZoKTsKKwkJd2luLnggPSBVTlNDKGF4KmZ3KTsKKwkJd2luLnkgPSBVTlNDKGF5KmZoKTsKIAl9IGVsc2UgewogCQl3aW4ueCA9IGF4OwogCQl3aW4ueSA9IGF5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuYwppbmRleCA2NTM4MjJjLi40ZDFlYjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuYwpAQCAtODQ5LDcgKzg0OSw3IEBACiBzdGF0aWMgdm9pZAogem9yYW5fdW5yZWdpc3Rlcl9pMmMgKHN0cnVjdCB6b3JhbiAqenIpCiB7Ci0JaTJjX2JpdF9kZWxfYnVzKCgmenItPmkyY19hZGFwdGVyKSk7CisJaTJjX2RlbF9hZGFwdGVyKCZ6ci0+aTJjX2FkYXB0ZXIpOwogfQogCiAvKiBDaGVjayBhIHpvcmFuX3BhcmFtcyBzdHJ1Y3QgZm9yIGNvcnJlY3RuZXNzLCBpbnNlcnQgZGVmYXVsdCBwYXJhbXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5jCmluZGV4IDE2OGU0MzEuLmIwNzUyNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuYwpAQCAtNDI5LDcgKzQyOSw3IEBACiAJcmVnIHw9IChIb3JEY20gPDwgWlIzNjA1N19WRkVTUEZSX0hvckRjbSk7CiAJcmVnIHw9IChWZXJEY20gPDwgWlIzNjA1N19WRkVTUEZSX1ZlckRjbSk7CiAJcmVnIHw9IChEaXNwTW9kZSA8PCBaUjM2MDU3X1ZGRVNQRlJfRGlzcE1vZGUpOwotCWlmIChmb3JtYXQtPnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9ZVVY0MjIpCisJaWYgKGZvcm1hdC0+cGFsZXR0ZSAhPSBWSURFT19QQUxFVFRFX1lVVjQyMiAmJiBmb3JtYXQtPnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9ZVVlWKQogCQlyZWcgfD0gWlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbjsKIAkvKiBSSjogSSBkb24ndCBrbm93LCB3aHkgdGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdGhlIG9wcG9zaXRlCiAJICogb2YgdGhlIGNvcnJlc3BvbmRpbmcgWlIzNjA2MCBzZXR0aW5nLCBidXQgb25seSB0aGlzIHdheQpAQCAtNDQxLDYgKzQ0MSw3IEBACiAJcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9Ub3BGaWVsZDsKIAlzd2l0Y2ggKGZvcm1hdC0+cGFsZXR0ZSkgewogCisJY2FzZSBWSURFT19QQUxFVFRFX1lVWVY6CiAJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMjoKIAkJcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9ZVVY0MjI7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9wcm9jZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fcHJvY2ZzLmMKaW5kZXggYzdmNmY2NC4uYzM3NGM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9wcm9jZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX3Byb2Nmcy5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHpvcmFuX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAljaGFyICpzdHJpbmcsICpzcDsKIAljaGFyICpsaW5lLCAqbGRlbGltLCAqdmFybmFtZSwgKnN2YXIsICp0ZGVsaW07CiAKQEAgLTE2NSw3ICsxNjUsNyBAQAogCX0KIAlzdHJpbmdbY291bnRdID0gMDsKIAlkcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6IHdyaXRlX3Byb2M6IG5hbWU9JXMgY291bnQ9JXp1IHpyPSVwXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLCBjb3VudCwgenIpOworCQlaUl9ERVZOQU1FKHpyKSwgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUsIGNvdW50LCB6cik7CiAJbGRlbGltID0gIiBcdFxuIjsKIAl0ZGVsaW0gPSAiPSI7CiAJbGluZSA9IHN0cnBicmsoc3AsIGxkZWxpbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2JmNTY0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA3OSArMCwwIEBACi0vKgotICAgIHpyMzYxMjAuYyAtIFpvcmFuIDM2MTIwLzM2MTI1IGJhc2VkIGZyYW1lZ3JhYmJlcnMKLQotICAgIENvcHlyaWdodCAoQykgMTk5OC0xOTk5IFBhdWxpbmUgTWlkZGVsaW5rIDxtaWRkZWxpbkBwb2x5d2FyZS5ubD4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgInR1bmVyLmgiCi0jaW5jbHVkZSAienIzNjEyMC5oIgotI2luY2x1ZGUgInpyMzYxMjBfbWVtLmgiCi0KLS8qIG1hcmsgYW4gcmVxdWlyZWQgZnVuY3Rpb24gYXJndW1lbnQgdW51c2VkIC0gbGludGlzbSAqLwotI2RlZmluZQlVTlVTRUQoeCkJKHZvaWQpKHgpCi0KLS8qIHNlbnNpYmxlIGRlZmF1bHQgKi8KLSNpZm5kZWYgQ0FSRFRZUEUKLSNkZWZpbmUgQ0FSRFRZUEUgMAotI2VuZGlmCi0KLS8qIEFueWJvZHkgd2hvIHVzZXMgbW9yZSB0aGFuIGZvdXI/ICovCi0jZGVmaW5lIFpPUkFOX01BWCA0Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHJpdG9uMT0wOwkJCS8qIHRyaXRvbjEgY2hpcHNldD8gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FyZHR5cGVbWk9SQU5fTUFYXT17IFsgMCAuLi4gWk9SQU5fTUFYLTEgXSA9IENBUkRUWVBFIH07Ci1zdGF0aWMgaW50IHZpZGVvX25yID0gLTE7Ci1zdGF0aWMgaW50IHZiaV9uciA9IC0xOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgenIzNjEyMF9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX1pPUkFOLFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYxMjAsCi0JICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0JeyAwIH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgenIzNjEyMF9wY2lfdGJsKTsKLQotTU9EVUxFX0FVVEhPUigiUGF1bGluZSBNaWRkZWxpbmsgPG1pZGRlbGluQHBvbHl3YXJlLm5sPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJab3JhbiBaUjM2MTIwIGJhc2VkIGZyYW1lZ3JhYmJlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0odHJpdG9uMSwgdWludCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoY2FyZHR5cGUsIHVpbnQsIE5VTEwsIDApOwotbW9kdWxlX3BhcmFtKHZpZGVvX25yLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHZiaV9uciwgaW50LCAwKTsKLQotc3RhdGljIGludCB6b3Jhbl9jYXJkczsKLXN0YXRpYyBzdHJ1Y3Qgem9yYW4gem9yYW5zW1pPUkFOX01BWF07Ci0KLS8qCi0gKiB0aGUgbWVhbmluZyBvZiBlYWNoIGVsZW1lbnQgY2FuIGJlIGZvdW5kIGluIHpyMzYxMjAuaAotICogRGV0ZXJtaW5pbmcgdGhlIHZhbHVlIG9mIGdwZGlyL2dwdmFsIGNhbiBiZSB0cmlja3kuIFRoZQotICogYmVzdCB3YXkgaXMgdG8gcnVuIHRoZSBjYXJkIHVuZGVyIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZQotICogYW5kIHJlYWQgdGhlIHZhbHVlcyBmcm9tIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzCi0gKiAweDI4IGFuZCAweDJDLiBIb3cgeW91IGRvIHRoYXQgaXMgbGVmdCBhcyBhbiBleGVyY2lzZQotICogdG8gdGhlIGltcGF0aWVudCByZWFkZXIgOikKLSAqLwotI2RlZmluZSBUIDEJLyogdG8gc2VwYXJhdGUgdGhlIGJvb2xzIGZyb20gdGhlIGludHMgKi8KLSNkZWZpbmUgRiAwCi1zdGF0aWMgc3RydWN0IHR2Y2FyZCB0dmNhcmRzW10gPSB7Ci0JLyogcmVwb3J0ZWQgd29ya2luZyBieSA8bWlkZGVsaW5AcG9seXdhcmUubmw+ICovCi0vKjAqLwl7ICJUcnVzdCBWaWN0b3IgSUkiLAotCSAgMiwgMCwgVCwgVCwgVCwgVCwgMHg3RiwgMHg4MCwgeyAxLCBTVkhTKDYpIH0sIHsgMCB9IH0sCi0JLyogcmVwb3J0ZWQgd29ya2luZyBieSA8TWljaGFlbC5QYXh0b25AYWlody5nb3YuYXU+ICAqLwotLyoxKi8gICB7ICJBaXRlY2ggV2F2ZVdhdGNoZXIgVFYtUENJIiwKLQkgIDMsIDAsIFQsIEYsIFQsIFQsIDB4N0YsIDB4ODAsIHsgMSwgVFVORVIoMyksIFNWSFMoNikgfSwgeyAwIH0gfSwKLQkvKiByZXBvcnRlZCB3b3JraW5nIGJ5ID8gKi8KLS8qMiovCXsgIkdlbml1cyBWaWRlbyBXb25kZXIgUENJIFZpZGVvIENhcHR1cmUgQ2FyZCIsCi0JICAyLCAwLCBULCBULCBULCBULCAweDdGLCAweDgwLCB7IDEsIFNWSFMoNikgfSwgeyAwIH0gfSwKLQkvKiByZXBvcnRlZCB3b3JraW5nIGJ5IDxQYXNjYWwuR2FicmllbEB3YW5hZG9vLmZyPiAqLwotLyozKi8JeyAiR3VpbGxlbW90IE1heGktVFYgUENJIiwKLQkgIDIsIDAsIFQsIFQsIFQsIFQsIDB4N0YsIDB4ODAsIHsgMSwgU1ZIUyg2KSB9LCB7IDAgfSB9LAotCS8qIHJlcG9ydGVkIHdvcmtpbmcgYnkgIkNyYWlnIFdoaXRtb3JlIDxsZW5ub25AaWdyaW4uY28ubno+ICovCi0vKjQqLwl7ICJRdWFkcmFudCBCdXN0ZXIiLAotCSAgMywgMywgVCwgRiwgVCwgVCwgMHg3RiwgMHg4MCwgeyBTVkhTKDEpLCBUVU5FUigyKSwgMyB9LCB7IDEsIDIsIDMgfSB9LAotCS8qIGEgZGVidWcgZW50cnkgd2hpY2ggaGFzIGFsbCBpbnB1dHMgbWFwcGVkICovCi0vKjUqLwl7ICJaUjM2MTIwIGJhc2VkIGZyYW1lZ3JhYmJlciAoYWxsIGlucHV0cyBlbmFibGVkKSIsCi0JICA2LCAwLCBULCBULCBULCBULCAweDdGLCAweDgwLCB7IDEsIDIsIDMsIDQsIDUsIDYgfSwgeyAwIH0gfQotfTsKLSN1bmRlZiBUCi0jdW5kZWYgRgotI2RlZmluZSBOUlRWQ0FSRFMgKHNpemVvZih0dmNhcmRzKS9zaXplb2YodHZjYXJkc1swXSkpCi0KLSNpZmRlZiBfX3NwYXJjX18KLSNkZWZpbmUJRU5ESUFORVNTCTAKLSNlbHNlCi0jZGVmaW5lCUVORElBTkVTUwlaT1JBTl9WRkVDX0xFCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCB7IGNvbnN0IGNoYXIgbmFtZVs4XTsgdWludCBtb2RlOyB1aW50IGJwcDsgfSBwYWxldHRlMmZtdFtdID0gewotLyogbi9hICAgICAqLwl7ICJuL2EiLCAgICAgMCwgMCB9LAotLyogR1JFWSAgICAqLwl7ICJHUkFZIiwgICAgMCwgMCB9LAotLyogSEkyNDAgICAqLwl7ICJISTI0MCIsICAgMCwgMCB9LAotLyogUkdCNTY1ICAqLwl7ICJSR0I1NjUiLCAgWk9SQU5fVkZFQ19SR0JfUkdCNTY1fEVORElBTkVTUywgMiB9LAotLyogUkdCMjQgICAqLwl7ICJSR0IyNCIsICAgWk9SQU5fVkZFQ19SR0JfUkdCODg4fEVORElBTkVTU3xaT1JBTl9WRkVDX1BBQ0syNCwgMyB9LAotLyogUkdCMzIgICAqLwl7ICJSR0IzMiIsICAgWk9SQU5fVkZFQ19SR0JfUkdCODg4fEVORElBTkVTUywgNCB9LAotLyogUkdCNTU1ICAqLwl7ICJSR0I1NTUiLCAgWk9SQU5fVkZFQ19SR0JfUkdCNTU1fEVORElBTkVTUywgMiB9LAotLyogWVVWNDIyICAqLwl7ICJZVVY0MjIiLCAgWk9SQU5fVkZFQ19SR0JfWVVWNDIyfEVORElBTkVTUywgMiB9LAotLyogWVVZViAgICAqLwl7ICJZVVlWIiwgICAgMCwgMCB9LAotLyogVVlWWSAgICAqLwl7ICJVWVZZIiwgICAgMCwgMCB9LAotLyogWVVWNDIwICAqLwl7ICJZVVY0MjAiLCAgMCwgMCB9LAotLyogWVVWNDExICAqLwl7ICJZVVY0MTEiLCAgMCwgMCB9LAotLyogUkFXICAgICAqLwl7ICJSQVciLCAgICAgMCwgMCB9LAotLyogWVVWNDIyUCAqLwl7ICJZVVY0MjJQIiwgMCwgMCB9LAotLyogWVVWNDExUCAqLwl7ICJZVVY0MTFQIiwgMCwgMCB9fTsKLSNkZWZpbmUgTlJQQUxFVFRFUyAoc2l6ZW9mKHBhbGV0dGUyZm10KS9zaXplb2YocGFsZXR0ZTJmbXRbMF0pKQotI3VuZGVmIEVORElBTkVTUwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogWk9SQU4gY2hpcHNldCBkZXRlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gYnR0di5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogUmVhc29uIGZvciBiZWVpbmcgaGVyZTogd2UgbmVlZCB0byBkZXRlY3QgaWYgd2UgYXJlIHJ1bm5pbmcgb24gYSAgICAgICAgKi8KLS8qIFRyaXRvbiBiYXNlZCBjaGlwc2V0LCBhbmQgaWYgc28sIGVuYWJsZSBhIGNlcnRhaW4gYml0ICAgICAgICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljCi12b2lkIF9faW5pdCBoYW5kbGVfY2hpcHNldCh2b2lkKQotewotCS8qIEp1c3QgaW4gY2FzZSBzb21lIG51dCBzZXQgdGhpcyB0byBzb21ldGhpbmcgZGFuZ2Vyb3VzICovCi0JaWYgKHRyaXRvbjEpCi0JCXRyaXRvbjEgPSBaT1JBTl9WRENfVFJJQ09NOwotCi0JaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiBQQ0lQQ0lfVFJJVE9OKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gInpvcmFuOiBIb3N0IGJyaWRnZSA4MjQzN0ZYIFRyaXRvbiBQSUlYXG4iKTsKLQkJdHJpdG9uMSA9IFpPUkFOX1ZEQ19UUklDT007Ci0JfQotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogWk9SQU4gZnVuY3Rpb25zCQkJCQkJCSAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdm9pZCB6b3Jhbl9zZXRfZ2VvKHN0cnVjdCB6b3JhbiogenR2LCBzdHJ1Y3QgdmlkaW5mbyogaSk7Ci0KLSNpZiAwIC8qIHVudXNlZCAqLwotc3RhdGljCi12b2lkIHpvcmFuX2R1bXAoc3RydWN0IHpvcmFuICp6dHYpCi17Ci0JY2hhcglzdHJbMjU2XTsKLQljaGFyCSpwPXN0cjsgLyogc2h1dCB1cCwgZ2NjISAqLwotCWludAlpOwotCi0JZm9yIChpPTA7IGk8MHg2MDsgaSs9NCkgewotCQlpZiAoKGkgJSAxNikgPT0gMCkgewotCQkJaWYgKGkpIHByaW50aygiJXNcbiIsc3RyKTsKLQkJCXAgPSBzdHI7Ci0JCQlwKz0gc3ByaW50ZihzdHIsIEtFUk5fREVCVUcgIiAgICAgICAlMDR4OiAiLGkpOwotCQl9Ci0JCXAgKz0gc3ByaW50ZihwLCAiJTA4eCAiLHpycmVhZChpKSk7Ci0JfQotfQotI2VuZGlmIC8qIHVudXNlZCAqLwotCi1zdGF0aWMKLXZvaWQgcmVhcF9zdGF0ZXMoc3RydWN0IHpvcmFuKiB6dHYpCi17Ci0JLyogY291bnQgZnJhbWVzICovCi0JenR2LT5maWVsZG5yKys7Ci0KLQkvKgotCSAqIEFyZSB3ZSBidXN5IGF0IGFsbD8KLQkgKiBUaGlzIGRlcGVuZHMgb24gaWYgdGhlcmUgaXMgYSB3b3JrcXVldWUgQU5EIHRoZQotCSAqIHZpZGVvdHJhbnNmZXIgaXMgZW5hYmxlZCBvbiB0aGUgY2hpcC4uLgotCSAqLwotCWlmICh6dHYtPndvcmtxdWV1ZSAmJiAoenJyZWFkKFpPUkFOX1ZEQykgJiBaT1JBTl9WRENfVklERU4pKQotCXsKLQkJc3RydWN0IHZpZGluZm8qIG5ld2l0ZW07Ci0KLQkJLyogZGlkIHdlIGdldCBhIGNvbXBsZXRlIGZyYW1lPyAqLwotCQlpZiAoenJyZWFkKFpPUkFOX1ZTVFIpICYgWk9SQU5fVlNUUl9HUkFCKQotCQkJcmV0dXJuOwotCi1ERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiY29tcGxldGVkICVzIGF0ICVwXG4iLENBUkQsenR2LT53b3JrcXVldWUtPmtpbmRvZj09RkJVRkZFUl9HUkFCPyJncmFiIjoicmVhZCIsenR2LT53b3JrcXVldWUpKTsKLQotCQkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgYnVmZmVyLCB0ZWxsIGV2ZXJ5b25lICovCi0JCXp0di0+d29ya3F1ZXVlLT5zdGF0dXMgPSBGQlVGRkVSX0RPTkU7Ci0JCXp0di0+d29ya3F1ZXVlLT5maWVsZG5yID0genR2LT5maWVsZG5yOwotCQkvKiBub3QgZ29vZCwgaGVyZSBmb3IgQlRUVl9GSUVMRE5SIHJlYXNvbnMgKi8KLQkJenR2LT5sYXN0ZmllbGRuciA9IHp0di0+ZmllbGRucjsKLQotCQlzd2l0Y2ggKHp0di0+d29ya3F1ZXVlLT5raW5kb2YpIHsKLQkJIGNhc2UgRkJVRkZFUl9HUkFCOgotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6dHYtPmdyYWJxKTsKLQkJCWJyZWFrOwotCQkgY2FzZSBGQlVGRkVSX1ZCSToKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenR2LT52YmlxKTsKLQkJCWJyZWFrOwotCQkgZGVmYXVsdDoKLQkJCXByaW50ayhDQVJEX0lORk8gInNvbWVib2R5IGtpbGxlZCB0aGUgd29ya3F1ZXVlIChraW5kb2Y9JWQpIVxuIixDQVJELHp0di0+d29ya3F1ZXVlLT5raW5kb2YpOwotCQl9Ci0KLQkJLyogaXRlbSBjb21wbGV0ZWQsIHNraXAgdG8gbmV4dCBpdGVtIGluIHF1ZXVlICovCi0JCXdyaXRlX2xvY2soJnp0di0+bG9jayk7Ci0JCW5ld2l0ZW0gPSB6dHYtPndvcmtxdWV1ZS0+bmV4dDsKLQkJenR2LT53b3JrcXVldWUtPm5leHQgPSAwOwkvKiBtYXJrIGNvbXBsZXRlZCAqLwotCQl6dHYtPndvcmtxdWV1ZSA9IG5ld2l0ZW07Ci0JCXdyaXRlX3VubG9jaygmenR2LT5sb2NrKTsKLQl9Ci0KLQkvKgotCSAqIG9rLCBzbyBpdCBzZWVtcyB3ZSBoYXZlIG5vdGhpbmcgaW4gcHJvZ3Jlc3MgcmlnaHQgbm93LgotCSAqIExldHMgc2VlIGlmIHdlIGNhbiBmaW5kIHNvbWUgd29yay4KLQkgKi8KLQlpZiAoenR2LT53b3JrcXVldWUpCi0JewotCQlzdHJ1Y3QgdmlkaW5mbyogbmV3aXRlbTsKLWFnYWluOgotCi1ERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAic3RhcnRpbmcgJXMgYXQgJXBcbiIsQ0FSRCx6dHYtPndvcmtxdWV1ZS0+a2luZG9mPT1GQlVGRkVSX0dSQUI/ImdyYWIiOiJyZWFkIix6dHYtPndvcmtxdWV1ZSkpOwotCi0JCS8qIGxvYWR1cCB0aGUgZnJhbWUgc2V0dGluZ3MgKi8KLQkJcmVhZF9sb2NrKCZ6dHYtPmxvY2spOwotCQl6b3Jhbl9zZXRfZ2VvKHp0dix6dHYtPndvcmtxdWV1ZSk7Ci0JCXJlYWRfdW5sb2NrKCZ6dHYtPmxvY2spOwotCi0JCXN3aXRjaCAoenR2LT53b3JrcXVldWUtPmtpbmRvZikgewotCQkgY2FzZSBGQlVGRkVSX0dSQUI6Ci0JCSBjYXNlIEZCVUZGRVJfVkJJOgotCQkJenJhbmQoflpPUkFOX09DUl9PVkxFTiwgWk9SQU5fT0NSKTsKLQkJCXpyb3IoWk9SQU5fVlNUUl9TTkFQU0hPVCxaT1JBTl9WU1RSKTsKLQkJCXpyb3IoWk9SQU5fVkRDX1ZJREVOLFpPUkFOX1ZEQyk7Ci0KLQkJCS8qIHN0YXJ0IHNpbmdsZS1zaG90IGdyYWIgKi8KLQkJCXpyb3IoWk9SQU5fVlNUUl9HUkFCLCBaT1JBTl9WU1RSKTsKLQkJCWJyZWFrOwotCQkgZGVmYXVsdDoKLQkJCXByaW50ayhDQVJEX0lORk8gIndoYXQgaXMgdGhpcyBkb2luZyBvbiB0aGUgcXVldWU/IChraW5kb2Y9JWQpXG4iLENBUkQsenR2LT53b3JrcXVldWUtPmtpbmRvZik7Ci0JCQl3cml0ZV9sb2NrKCZ6dHYtPmxvY2spOwotCQkJbmV3aXRlbSA9IHp0di0+d29ya3F1ZXVlLT5uZXh0OwotCQkJenR2LT53b3JrcXVldWUtPm5leHQgPSAwOwotCQkJenR2LT53b3JrcXVldWUgPSBuZXdpdGVtOwotCQkJd3JpdGVfdW5sb2NrKCZ6dHYtPmxvY2spOwotCQkJaWYgKG5ld2l0ZW0pCi0JCQkJZ290byBhZ2FpbjsJLyogeWVhaCwgc3VyZS4uICovCi0JCX0KLQkJLyogYnllIGZvciBub3cgKi8KLQkJcmV0dXJuOwotCX0KLURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJub3RoaW5nIGluIHF1ZXVlXG4iLENBUkQpKTsKLQotCS8qCi0JICogV2hhdD8gRXZlbiB0aGUgd29ya3F1ZXVlIGlzIGVtcHR5PyBBbSBpIHJlYWxseSBoZXJlCi0JICogZm9yIG5vdGhpbmc/IERpZCBpIGNvbWUgYWxsIHRoYXQgd2F5IHRvLi4uIGRvIG5vdGhpbmc/Ci0JICovCi0KLQkvKiBkbyB3ZSBuZWVkIHRvIG92ZXJsYXk/ICovCi0JaWYgKHRlc3RfYml0KFNUQVRFX09WRVJMQVksICZ6dHYtPnN0YXRlKSkKLQl7Ci0JCS8qIGFyZSB3ZSBhbHJlYWR5IG92ZXJsYXlpbmc/ICovCi0JCWlmICghKHpycmVhZChaT1JBTl9PQ1IpICYgWk9SQU5fT0NSX09WTEVOKSB8fAotCQkgICAgISh6cnJlYWQoWk9SQU5fVkRDKSAmIFpPUkFOX1ZEQ19WSURFTikpCi0JCXsKLURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJzdGFydGluZyBvdmVybGF5XG4iLENBUkQpKTsKLQotCQkJcmVhZF9sb2NrKCZ6dHYtPmxvY2spOwotCQkJem9yYW5fc2V0X2dlbyh6dHYsJnp0di0+b3ZlcmluZm8pOwotCQkJcmVhZF91bmxvY2soJnp0di0+bG9jayk7Ci0KLQkJCXpyb3IoWk9SQU5fT0NSX09WTEVOLCBaT1JBTl9PQ1IpOwotCQkJenJhbmQoflpPUkFOX1ZTVFJfU05BUFNIT1QsWk9SQU5fVlNUUik7Ci0JCQl6cm9yKFpPUkFOX1ZEQ19WSURFTixaT1JBTl9WREMpOwotCQl9Ci0KLQkJLyoKLQkJICogbGVhdmUgb3ZlcmxheWluZyBvbiwgYnV0IHR1cm4gaW50ZXJydXB0cyBvZmYuCi0JCSAqLwotCQl6cmFuZCh+Wk9SQU5fSUNSX0VOLFpPUkFOX0lDUik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBkbyB3ZSBoYXZlIGFueSBWQkkgaWRsZSB0aW1lIHByb2Nlc3Npbmc/ICovCi0JaWYgKHRlc3RfYml0KFNUQVRFX1ZCSSwgJnp0di0+c3RhdGUpKQotCXsKLQkJc3RydWN0IHZpZGluZm8qIGl0ZW07Ci0JCXN0cnVjdCB2aWRpbmZvKiBsYXN0aXRlbTsKLQotCQkvKiBwcm90ZWN0IHRoZSB3b3JrcXVldWUgKi8KLQkJd3JpdGVfbG9jaygmenR2LT5sb2NrKTsKLQkJbGFzdGl0ZW0gPSB6dHYtPndvcmtxdWV1ZTsKLQkJaWYgKGxhc3RpdGVtKQotCQkJd2hpbGUgKGxhc3RpdGVtLT5uZXh0KSBsYXN0aXRlbSA9IGxhc3RpdGVtLT5uZXh0OwotCQlmb3IgKGl0ZW09enR2LT5yZWFkaW5mbzsgaXRlbSE9enR2LT5yZWFkaW5mbytaT1JBTl9WQklfQlVGRkVSUzsgaXRlbSsrKQotCQkJaWYgKGl0ZW0tPm5leHQgPT0gMCAmJiBpdGVtLT5zdGF0dXMgPT0gRkJVRkZFUl9GUkVFKQotCQkJewotREVCVUcocHJpbnRrKENBUkRfREVCVUcgIiVwIGFkZGVkIHRvIHF1ZXVlXG4iLENBUkQsaXRlbSkpOwotCQkJCWl0ZW0tPnN0YXR1cyA9IEZCVUZGRVJfQlVTWTsKLQkJCQlpZiAoIWxhc3RpdGVtKQotCQkJCQl6dHYtPndvcmtxdWV1ZSA9IGl0ZW07Ci0JCQkJZWxzZQotCQkJCQlsYXN0aXRlbS0+bmV4dCA9IGl0ZW07Ci0JCQkJbGFzdGl0ZW0gPSBpdGVtOwotCQkJfQotCQl3cml0ZV91bmxvY2soJnp0di0+bG9jayk7Ci0JCWlmICh6dHYtPndvcmtxdWV1ZSkKLQkJCWdvdG8gYWdhaW47CS8qIGhleSwgX2lfIGdyYWR1YXRlZCA6KSAqLwotCX0KLQotCS8qCi0JICogVGhlbiB3ZSBtdXN0IGJlIHJlYWx5IElETEUKLQkgKi8KLURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJ0dXJuaW5nIG9mZlxuIixDQVJEKSk7Ci0JLyogbm90aGluZyBmdXJ0aGVyIHRvIGRvLCBkaXNhYmxlIERNQSBhbmQgZnVydGhlciBJUlFzICovCi0JenJhbmQoflpPUkFOX1ZEQ19WSURFTixaT1JBTl9WREMpOwotCXpyYW5kKH5aT1JBTl9JQ1JfRU4sWk9SQU5fSUNSKTsKLX0KLQotc3RhdGljCi12b2lkIHpvcmFuX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JdTMyIHN0YXQsZXN0YXQ7Ci0JaW50IGNvdW50ID0gMDsKLQlzdHJ1Y3Qgem9yYW4gKnp0diA9IGRldl9pZDsKLQotCVVOVVNFRChpcnEpOwotCWZvciAoOzspIHsKLQkJLyogZ2V0L2NsZWFyIGludGVycnVwdCBzdGF0dXMgYml0cyAqLwotCQlzdGF0PXpycmVhZChaT1JBTl9JU1IpOwotCQllc3RhdD1zdGF0ICYgenJyZWFkKFpPUkFOX0lDUik7Ci0JCWlmICghZXN0YXQpCi0JCQlyZXR1cm47Ci0JCXpyd3JpdGUoZXN0YXQsWk9SQU5fSVNSKTsKLQkJSURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJlc3RhdCAlMDh4XG4iLENBUkQsZXN0YXQpKTsKLQkJSURFQlVHKHByaW50ayhDQVJEX0RFQlVHICIgc3RhdCAlMDh4XG4iLENBUkQsc3RhdCkpOwotCi0JCWlmIChlc3RhdCAmIFpPUkFOX0lTUl9DT0RFKQotCQl7Ci0JCQlJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIkNvZFJlcGxJUlFcbiIsQ0FSRCkpOwotCQl9Ci0JCWlmIChlc3RhdCAmIFpPUkFOX0lTUl9HSVJRMCkKLQkJewotCQkJSURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJHSVJRMFxuIixDQVJEKSk7Ci0JCQlpZiAoIXp0di0+Y2FyZC0+dXNlZ2lycTEpCi0JCQkJcmVhcF9zdGF0ZXMoenR2KTsKLQkJfQotCQlpZiAoZXN0YXQgJiBaT1JBTl9JU1JfR0lSUTEpCi0JCXsKLQkJCUlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiR0lSUTFcbiIsQ0FSRCkpOwotCQkJaWYgKHp0di0+Y2FyZC0+dXNlZ2lycTEpCi0JCQkJcmVhcF9zdGF0ZXMoenR2KTsKLQkJfQotCi0JCWNvdW50Kys7Ci0JCWlmIChjb3VudCA+IDEwKQotCQkJcHJpbnRrKENBUkRfRVJSICJpcnEgbG9vcCAlZCAoJXgpXG4iLENBUkQsY291bnQsZXN0YXQpOwotCQlpZiAoY291bnQgPiAyMCkKLQkJewotCQkJenJ3cml0ZSgwLCBaT1JBTl9JQ1IpOwotCQkJcHJpbnRrKENBUkRfRVJSICJJUlEgbG9ja3VwLCBjbGVhcmVkIGludCBtYXNrXG4iLENBUkQpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMKLWludCB6b3Jhbl9tdXhzZWwoc3RydWN0IHpvcmFuKiB6dHYsIGludCBjaGFubmVsLCBpbnQgbm9ybSkKLXsKLQlpbnQJcnY7Ci0KLQkvKiBzZXQgdGhlIG5ldyB2aWRlbyBub3JtICovCi0JcnYgPSBpMmNfY29udHJvbF9kZXZpY2UoJih6dHYtPmkyYyksIEkyQ19EUklWRVJJRF9WSURFT0RFQ09ERVIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKLQlpZiAocnYpCi0JCXJldHVybiBydjsKLQl6dHYtPm5vcm0gPSBub3JtOwotCi0JLyogbWFwIHRoZSBnaXZlbiBjaGFubmVsIHRvIHRoZSBjYXJkcyBkZWNvZGVyJ3MgY2hhbm5lbCAqLwotCWNoYW5uZWwgPSB6dHYtPmNhcmQtPnZpZGVvX211eFtjaGFubmVsXSAmIENIQU5ORUxfTUFTSzsKLQotCS8qIHNldCB0aGUgbmV3IGNoYW5uZWwgKi8KLQlydiA9IGkyY19jb250cm9sX2RldmljZSgmKHp0di0+aTJjKSwgSTJDX0RSSVZFUklEX1ZJREVPREVDT0RFUiwgREVDT0RFUl9TRVRfSU5QVVQsICZjaGFubmVsKTsKLQlyZXR1cm4gcnY7Ci19Ci0KLS8qIFRlbGwgdGhlIGludGVycnVwdCBoYW5kbGVyIHdoYXQgdG8gdG8uICAqLwotc3RhdGljCi12b2lkIHpvcmFuX2NhcChzdHJ1Y3Qgem9yYW4qIHp0diwgaW50IG9uKQotewotREVCVUcocHJpbnRrKENBUkRfREVCVUcgInpvcmFuX2NhcCglZCkgc3RhdGU9JXhcbiIsQ0FSRCxvbix6dHYtPnN0YXRlKSk7Ci0KLQlpZiAob24pIHsKLQkJenR2LT5ydW5uaW5nID0gMTsKLQotCQkvKgotCQkgKiB0dXJuIGludGVycnVwdHMgKGJhY2spIG9uLiBUaGUgRE1BIHdpbGwgYmUgZW5hYmxlZAotCQkgKiBpbnNpZGUgdGhlIGlycSBoYW5kbGVyIHdoZW4gaXQgZGV0ZWN0cyBhIHJlc3RhcnQuCi0JCSAqLwotCQl6cm9yKFpPUkFOX0lDUl9FTixaT1JBTl9JQ1IpOwotCX0KLQllbHNlIHsKLQkJLyoKLQkJICogdHVybiBib3RoIGludGVycnVwdHMgYW5kIERNQSBvZmYKLQkJICovCi0JCXpyYW5kKH5aT1JBTl9WRENfVklERU4sWk9SQU5fVkRDKTsKLQkJenJhbmQoflpPUkFOX0lDUl9FTixaT1JBTl9JQ1IpOwotCi0JCXp0di0+cnVubmluZyA9IDA7Ci0JfQotfQotCi1zdGF0aWMgdWxvbmcgZG1hc2tbXSA9IHsKLQkweEZGRkZGRkZGLCAweEZGRkZGRkZFLCAweEZGRkZGRkZDLCAweEZGRkZGRkY4LAotCTB4RkZGRkZGRjAsIDB4RkZGRkZGRTAsIDB4RkZGRkZGQzAsIDB4RkZGRkZGODAsCi0JMHhGRkZGRkYwMCwgMHhGRkZGRkUwMCwgMHhGRkZGRkMwMCwgMHhGRkZGRjgwMCwKLQkweEZGRkZGMDAwLCAweEZGRkZFMDAwLCAweEZGRkZDMDAwLCAweEZGRkY4MDAwLAotCTB4RkZGRjAwMDAsIDB4RkZGRTAwMDAsIDB4RkZGQzAwMDAsIDB4RkZGODAwMDAsCi0JMHhGRkYwMDAwMCwgMHhGRkUwMDAwMCwgMHhGRkMwMDAwMCwgMHhGRjgwMDAwMCwKLQkweEZGMDAwMDAwLCAweEZFMDAwMDAwLCAweEZDMDAwMDAwLCAweEY4MDAwMDAwLAotCTB4RjAwMDAwMDAsIDB4RTAwMDAwMDAsIDB4QzAwMDAwMDAsIDB4ODAwMDAwMDAKLX07Ci0KLXN0YXRpYwotdm9pZCB6b3Jhbl9idWlsdF9vdmVybGF5KHN0cnVjdCB6b3JhbiogenR2LCBpbnQgY291bnQsIHN0cnVjdCB2aWRlb19jbGlwICp2Y3ApCi17Ci0JdWxvbmcqCW10b3A7Ci0JaW50CXlzdGVwID0gKHp0di0+dmlkWHNoaWZ0ICsgenR2LT52aWRXaWR0aCszMSkvMzI7CS8qIG5leHQgRFdPUkQgKi8KLQlpbnQJaTsKLQotREVCVUcocHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICBvdmVybGF5IGF0ICVwLCB5c3RlcD0lZCwgY2xpcHM9JWRcbiIsenR2LT5vdmVyaW5mby5vdmVybGF5LHlzdGVwLGNvdW50KSk7Ci0KLQlmb3IgKGk9MDsgaTxjb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCB2aWRlb19jbGlwICp2cCA9IHZjcCtpOwotCQlVTlVTRUQodnApOwotREVCVUcocHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICAlZDogY2xpcCglZCwlZCwlZCwlZClcbiIsIGksdnAtPngsdnAtPnksdnAtPndpZHRoLHZwLT5oZWlnaHQpKTsKLQl9Ci0KLQkvKgotCSAqIGFjdGl2YXRlIHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHNjcmVlbgotCSAqIE5vdGUgd2UgdGFrZSBzb21lIHNob3J0Y3V0cyBoZXJlLCBiZWNhdXNlIHdlCi0JICoga25vdyB0aGUgd2lkdGggY2FuIG5ldmVyIGJlIDwgMzIuIChJLmUuIGEgRFdPUkQpCi0JICogV2UgYWxzbyBhc3N1bWUgdGhlIG92ZXJsYXkgc3RhcnRzIHNvbWV3aGVyZSBpbgotCSAqIHRoZSBGSVJTVCBkd29yZC4KLQkgKi8KLQl7Ci0JCWludCBzdGFydCA9IHp0di0+dmlkWHNoaWZ0OwotCQl1bG9uZyBmaXJzdGQgPSBkbWFza1tzdGFydF07Ci0JCXVsb25nIGxhc3RkID0gfmRtYXNrWyhzdGFydCArIHp0di0+b3ZlcmluZm8udykgJiAzMV07Ci0JCW10b3AgPSB6dHYtPm92ZXJpbmZvLm92ZXJsYXk7Ci0JCWZvciAoaT0wOyBpPHp0di0+b3ZlcmluZm8uaDsgaSsrKSB7Ci0JCQlpbnQgdyA9IHp0di0+dmlkV2lkdGg7Ci0JCQl1bG9uZyogbGluZSA9IG10b3A7Ci0JCQlpZiAoc3RhcnQgJiAzMSkgewotCQkJCSpsaW5lKysgPSBmaXJzdGQ7Ci0JCQkJdyAtPSAzMi0oc3RhcnQmMzEpOwotCQkJfQotCQkJbWVtc2V0KGxpbmUsIH4wLCB3LzgpOwotCQkJaWYgKHcgJiAzMSkKLQkJCQlsaW5lW3cvMzJdID0gbGFzdGQ7Ci0JCQltdG9wICs9IHlzdGVwOwotCQl9Ci0JfQotCi0JLyogcHJvY2VzcyBjbGlwcGluZyByZWdpb25zICovCi0JZm9yIChpPTA7IGk8Y291bnQ7IGkrKykgewotCQlpbnQgaDsKLQkJaWYgKHZjcC0+eCA8IDAgfHwgKHVpbnQpdmNwLT54ID4genR2LT5vdmVyaW5mby53IHx8Ci0JCSAgICB2Y3AtPnkgPCAwIHx8IHZjcC0+eSA+IHp0di0+b3ZlcmluZm8uaCB8fAotCQkgICAgdmNwLT53aWR0aCA8IDAgfHwgKHVpbnQpKHZjcC0+eCt2Y3AtPndpZHRoKSA+IHp0di0+b3ZlcmluZm8udyB8fAotCQkgICAgdmNwLT5oZWlnaHQgPCAwIHx8ICh2Y3AtPnkrdmNwLT5oZWlnaHQpID4genR2LT5vdmVyaW5mby5oKQotCQl7Ci0JCQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiaW52YWxpZCBjbGlwem9uZSAoJWQsJWQsJWQsJWQpIG5vdCBpbiAoMCwwLCVkLCVkKSwgYWRhcHRpbmdcbiIsQ0FSRCx2Y3AtPngsdmNwLT55LHZjcC0+d2lkdGgsdmNwLT5oZWlnaHQsenR2LT5vdmVyaW5mby53LHp0di0+b3ZlcmluZm8uaCkpOwotCQkJaWYgKHZjcC0+eCA8IDApIHZjcC0+eCA9IDA7Ci0JCQlpZiAoKHVpbnQpdmNwLT54ID4genR2LT5vdmVyaW5mby53KSB2Y3AtPnggPSB6dHYtPm92ZXJpbmZvLnc7Ci0JCQlpZiAodmNwLT55IDwgMCkgdmNwLT55ID0gMDsKLQkJCWlmICh2Y3AtPnkgPiB6dHYtPm92ZXJpbmZvLmgpIHZjcC0+eSA9IHp0di0+b3ZlcmluZm8uaDsKLQkJCWlmICh2Y3AtPndpZHRoIDwgMCkgdmNwLT53aWR0aCA9IDA7Ci0JCQlpZiAoKHVpbnQpKHZjcC0+eCt2Y3AtPndpZHRoKSA+IHp0di0+b3ZlcmluZm8udykgdmNwLT53aWR0aCA9IHp0di0+b3ZlcmluZm8udyAtIHZjcC0+eDsKLQkJCWlmICh2Y3AtPmhlaWdodCA8IDApIHZjcC0+aGVpZ2h0ID0gMDsKLQkJCWlmICh2Y3AtPnkrdmNwLT5oZWlnaHQgPiB6dHYtPm92ZXJpbmZvLmgpIHZjcC0+aGVpZ2h0ID0genR2LT5vdmVyaW5mby5oIC0gdmNwLT55OwotLy8JCQljb250aW51ZTsKLQkJfQotCi0JCW10b3AgPSAmenR2LT5vdmVyaW5mby5vdmVybGF5W3ZjcC0+eSp5c3RlcF07Ci0JCWZvciAoaD0wOyBoPD12Y3AtPmhlaWdodDsgaCsrKSB7Ci0JCQlpbnQgdzsKLQkJCWludCB4ID0genR2LT52aWRYc2hpZnQgKyB2Y3AtPng7Ci0JCQlmb3IgKHc9MDsgdzw9dmNwLT53aWR0aDsgdysrKSB7Ci0JCQkJY2xlYXJfYml0KHgmMzEsICZtdG9wW3gvMzJdKTsKLQkJCQl4Kys7Ci0JCQl9Ci0JCQltdG9wICs9IHlzdGVwOwotCQl9Ci0JCSsrdmNwOwotCX0KLQotCW10b3AgPSB6dHYtPm92ZXJpbmZvLm92ZXJsYXk7Ci0JenJ3cml0ZSh2aXJ0X3RvX2J1cyhtdG9wKSwgWk9SQU5fTVRPUCk7Ci0JenJ3cml0ZSh2aXJ0X3RvX2J1cyhtdG9wK3lzdGVwKSwgWk9SQU5fTUJPVCk7Ci0JenJhb3IoKHp0di0+dmlkSW50ZXJsYWNlKnlzdGVwKTw8MCx+Wk9SQU5fT0NSX01BU0tTVFJJREUsWk9SQU5fT0NSKTsKLX0KLQotc3RydWN0IHR2bm9ybQotewotCXUxNiBXdCwgV2EsIEh0LCBIYSwgSFN0YXJ0LCBWU3RhcnQ7Ci19OwotCi1zdGF0aWMgc3RydWN0IHR2bm9ybSB0dm5vcm1zW10gPSB7Ci0JLyogUEFMLUJER0hJICovCi0vKgl7IDg2NCwgNzIwLCA2MjUsIDU3NiwgMTMxLCAyMSB9LCovCi0vKjAwKi8JeyA4NjQsIDc2OCwgNjI1LCA1NzYsIDgxLCAxNyB9LAotCS8qIE5UU0MgKi8KLS8qMDEqLwl7IDg1OCwgNzIwLCA1MjUsIDQ4MCwgMTIxLCAxMCB9LAotCS8qIFNFQ0FNICovCi0vKjAyKi8JeyA4NjQsIDcyMCwgNjI1LCA1NzYsIDEzMSwgMjEgfSwKLQkvKiBCVzUwICovCi0vKjAzKi8JeyA4NjQsIDcyMCwgNjI1LCA1NzYsIDEzMSwgMjEgfSwKLQkvKiBCVzYwICovCi0vKjA0Ki8JeyA4NTgsIDcyMCwgNTI1LCA0ODAsIDEyMSwgMTAgfQotfTsKLSNkZWZpbmUgVFZOT1JNUyAoc2l6ZW9mKHR2bm9ybXMpL3NpemVvZih0dm5vcm0pKQotCi0vKgotICogUHJvZ3JhbSB0aGUgY2hpcCBmb3IgYSBzZXR1cCBhcyBkZXNjcmliZWQgaW4gdGhlIHZpZGluZm8gc3RydWN0LgotICoKLSAqIFNpZGUtZWZmZWN0czogY2FsY3VsYXRlcyB2aWRYc2hpZnQsIHZpZEludGVybGFjZSwKLSAqIHZpZEhlaWdodCwgdmlkV2lkdGggd2hpY2ggYXJlIHVzZWQgaW4gYSBsYXRlciBzdGFnZQotICogdG8gY2FsY3VsYXRlIHRoZSBvdmVybGF5IG1hc2sKLSAqCi0gKiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBhcyBzdWNoIGl0IGRvZXMgbm90IGNoZWNrIHRoZQotICogdmFsaWRpdHkgb2YgdGhlIHN0cnVjdCBtZW1iZXJzLi4uIFNwZWN0YWN1bGFpciBjcmFzaGVzIHdpbGwKLSAqIGZvbGxvdyAvdmVyeS8gcXVpY2sgd2hlbiB5b3UncmUgd3JvbmcgYW5kIHRoZSBjaGlwIHJpZ2h0IDopCi0gKi8KLXN0YXRpYwotdm9pZCB6b3Jhbl9zZXRfZ2VvKHN0cnVjdCB6b3JhbiogenR2LCBzdHJ1Y3QgdmlkaW5mbyogaSkKLXsKLQl1bG9uZwl0b3AsIGJvdDsKLQlpbnQJc3RyaWRlOwotCWludAl3aW5XaWR0aCwgd2luSGVpZ2h0OwotCWludAltYXhXaWR0aCwgbWF4SGVpZ2h0LCBtYXhYT2Zmc2V0LCBtYXhZT2Zmc2V0OwotCWxvbmcJdmZlYzsKLQotREVCVUcocHJpbnRrKENBUkRfREVCVUcgInNldF9nZW8ocmVjdD0oJWQsJWQsJWQsJWQpLCBub3JtPSVkLCBmb3JtYXQ9JWQsIGJwcD0lZCwgYnBsPSVkLCBidXNhZHI9JWx4LCBvdmVybGF5PSVwKVxuIixDQVJELGktPngsaS0+eSxpLT53LGktPmgsenR2LT5ub3JtLGktPmZvcm1hdCxpLT5icHAsaS0+YnBsLGktPmJ1c2FkcixpLT5vdmVybGF5KSk7Ci0KLQkvKgotCSAqIG1ha2Ugc3VyZSB0aGUgRE1BIHRyYW5zZmVycyBhcmUgaW5oaWJpdGVkIGR1cmluZyBvdXIKLQkgKiByZXByb2dyYW1taW5nIG9mIHRoZSBjaGlwCi0JICovCi0JenJhbmQoflpPUkFOX1ZEQ19WSURFTixaT1JBTl9WREMpOwotCi0JbWF4V2lkdGggPSB0dm5vcm1zW3p0di0+bm9ybV0uV2E7Ci0JbWF4SGVpZ2h0ID0gdHZub3Jtc1t6dHYtPm5vcm1dLkhhLzI7Ci0JbWF4WE9mZnNldCA9IHR2bm9ybXNbenR2LT5ub3JtXS5IU3RhcnQ7Ci0JbWF4WU9mZnNldCA9IHR2bm9ybXNbenR2LT5ub3JtXS5WU3RhcnQ7Ci0KLQkvKiBzZXR1cCB2ZmVjIHJlZ2lzdGVyIChrZWVwIEV4dEZsLFRvcEZpZWxkIGFuZCBWQ0xLUG9sIHNldHRpbmdzKSAqLwotCXZmZWMgPSAoenJyZWFkKFpPUkFOX1ZGRUMpICYgKFpPUkFOX1ZGRUNfRVhURkx8Wk9SQU5fVkZFQ19UT1BGSUVMRHxaT1JBTl9WRkVDX1ZDTEtQT0wpKSB8Ci0JICAgICAgIChwYWxldHRlMmZtdFtpLT5mb3JtYXRdLm1vZGUgJiAoWk9SQU5fVkZFQ19SR0J8Wk9SQU5fVkZFQ19FUlJESUZ8Wk9SQU5fVkZFQ19MRXxaT1JBTl9WRkVDX1BBQ0syNCkpOwotCi0JLyoKLQkgKiBTZXQgdG9wLCBib3R0b20gcHRycy4gU2luY2UgdGhlc2UgbXVzdCBiZSBEV09SRCBhbGlnbmVkLAotCSAqIHBvc3NpYmxlIGFkanVzdCB0aGUgeCBhbmQgdGhlIHdpZHRoIG9mIHRoZSB3aW5kb3cuCi0JICogc28gdGhlIGVuZHBvc2l0aW9uIHN0YXkgdGhlIHNhbWUuIFRoZSB2aWRYc2hpZnQgd2lsbCBtYWtlCi0JICogc3VyZSB3ZSBhcmUgbm90IHdyaXRpbmcgcGl4ZWxzIGJlZm9yZSB0aGUgcmVxdWVzdGVkIHguCi0JICovCi0JenR2LT52aWRYc2hpZnQgPSAwOwotCXdpbldpZHRoID0gaS0+dzsKLQlpZiAod2luV2lkdGggPCAwKQotCQl3aW5XaWR0aCA9IC13aW5XaWR0aDsKLQl0b3AgPSBpLT5idXNhZHIgKyBpLT54KmktPmJwcCArIGktPnkqaS0+YnBsOwotCWlmICh0b3AgJiAzKSB7Ci0JCXp0di0+dmlkWHNoaWZ0ID0gKHRvcCAmIDMpIC8gaS0+YnBwOwotCQl3aW5XaWR0aCArPSB6dHYtPnZpZFhzaGlmdDsKLQkJREVCVUcocHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICB3aW5kb3cteCBzaGlmdGVkICVkIHBpeGVscyBsZWZ0XG4iLHp0di0+dmlkWHNoaWZ0KSk7Ci0JCXRvcCAmPSB+MzsKLQl9Ci0KLQkvKgotCSAqIGJvdHRvbSBwb2ludHMgdG8gbmV4dCBmcmFtZSBidXQgaW4gaW50ZXJsZWF2ZWQgbW9kZSB3ZSB3YW50Ci0JICogdG8gJ21peCcgdGhlIDIgZnJhbWVzIHRvIG9uZSBjYXB0dXJlLCBzbyAnYm90JyBwb2ludHMgdG8gb25lCi0JICogKHBoeXNpY2FsKSBsaW5lIGJlbG93IHRoZSB0b3AgbGluZS4KLQkgKi8KLQlib3QgPSB0b3AgKyBpLT5icGw7Ci0JenJ3cml0ZSh0b3AsWk9SQU5fVlRPUCk7Ci0JenJ3cml0ZShib3QsWk9SQU5fVkJPVCk7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgd2luV2lkdGggaXMgRFdPUkQgYWxpZ25lZCB0b28sCi0JICogdGhlcmVieSBhdXRvbWF0aWNseSBtYWtpbmcgc3VyZSB0aGUgc3RyaWRlIHRvIHRoZQotCSAqIG5leHQgbGluZSBpcyBEV09SRCBhbGlnbmVkIHRvbyAoYXMgcmVxdWlyZWQgYnkgc3BlYykuCi0JICovCi0JaWYgKCh3aW5XaWR0aCppLT5icHApICYgMykgewotREVCVUcocHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICB3aW5kb3ctd2lkdGggZW5sYXJnZWQgYnkgJWQgcGl4ZWxzXG4iLCh3aW5XaWR0aCppLT5icHApICYgMykpOwotCQl3aW5XaWR0aCArPSAod2luV2lkdGgqaS0+YnBwKSAmIDM7Ci0JfQotCi0JLyogZGV0ZXJtaW5lIHRoZSBEaXNwTW9kZSBhbmQgc3RyaWRlICovCi0JaWYgKGktPmggPj0gMCAmJiBpLT5oIDw9IG1heEhlaWdodCkgewotCQkvKiBzaW5nbGUgZnJhbWUgZ3JhYiBzdWZmaWNlcyBmb3IgdGhpcyBoZWlnaHQuICovCi0JCXZmZWMgfD0gWk9SQU5fVkZFQ19ESVNQTU9EOwotCQl6dHYtPnZpZEludGVybGFjZSA9IDA7Ci0JCXN0cmlkZSA9IGktPmJwbCAtICh3aW5XaWR0aCppLT5icHApOwotCQl3aW5IZWlnaHQgPSBpLT5oOwotCX0KLQllbHNlIHsKLQkJLyogaW50ZXJsZWF2aW5nIG5lZWRlZCBmb3IgdGhpcyBoZWlnaHQgKi8KLQkJenR2LT52aWRJbnRlcmxhY2UgPSAxOwotCQlzdHJpZGUgPSBpLT5icGwqMiAtICh3aW5XaWR0aCppLT5icHApOwotCQl3aW5IZWlnaHQgPSBpLT5oLzI7Ci0JfQotCWlmICh3aW5IZWlnaHQgPCAwKQkvKiBjYW4gaGFwcGVuIGZvciBWQkkhICovCi0JCXdpbkhlaWdodCA9IC13aW5IZWlnaHQ7Ci0KLQkvKiBzYWZldHkgbmV0LCBzb21ldGltZXMgYnBsIGlzIHRvbyBzaG9ydD8/PyAqLwotCWlmIChzdHJpZGU8MCkgewotREVCVUcocHJpbnRrKENBUkRfREVCVUcgIldBUk5JTkcgc3RyaWRlID0gJWRcbiIsQ0FSRCxzdHJpZGUpKTsKLQkJc3RyaWRlID0gMDsKLQl9Ci0KLQl6cmFvcigod2luSGVpZ2h0PDwxMil8KHdpbldpZHRoPDwwKSx+KFpPUkFOX1ZEQ19WSURXSU5IVHxaT1JBTl9WRENfVklEV0lOV0lEKSwgWk9SQU5fVkRDKTsKLQl6cmFvcihzdHJpZGU8PDE2LH5aT1JBTl9WU1RSX0RJU1BTVFJJREUsWk9SQU5fVlNUUik7Ci0KLQkvKiByZW1lbWJlciB2aWRXaWR0aCwgdmlkSGVpZ2h0IGZvciBvdmVybGF5IGNhbGN1bGF0aW9ucyAqLwotCXp0di0+dmlkV2lkdGggPSB3aW5XaWR0aDsKLQl6dHYtPnZpZEhlaWdodCA9IHdpbkhlaWdodDsKLURFQlVHKHByaW50ayhLRVJOX0RFQlVHICIgICAgICAgdG9wPSUwOGx4LCBib3R0b209JTA4bHhcbiIsdG9wLGJvdCkpOwotREVCVUcocHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICB3aW5XaWR0aD0lZCwgd2luSGVpZ2h0PSVkXG4iLHdpbldpZHRoLHdpbkhlaWdodCkpOwotREVCVUcocHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICBtYXhXaWR0aD0lZCwgbWF4SGVpZ2h0PSVkXG4iLG1heFdpZHRoLG1heEhlaWdodCkpOwotREVCVUcocHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICBzdHJpZGU9JWRcbiIsc3RyaWRlKSk7Ci0KLQkvKgotCSAqIGRldGVybWluZSBob3Jpem9udGFsIHNjYWxlcyBhbmQgY3JvcHMKLQkgKi8KLQlpZiAoaS0+dyA8IDApIHsKLQkJaW50IEhzdGFydCA9IDE7Ci0JCWludCBIZW5kID0gSHN0YXJ0ICsgd2luV2lkdGg7Ci1ERUJVRyhwcmludGsoS0VSTl9ERUJVRyAiICAgICAgIFk6IHNjYWxlPTAsIHN0YXJ0PSVkLCBlbmQ9JWRcbiIsIEhzdGFydCwgSGVuZCkpOwotCQl6cmFvcigoSHN0YXJ0PDwxMCl8KEhlbmQ8PDApLH4oWk9SQU5fVkZFSF9IU1RBUlR8Wk9SQU5fVkZFSF9IRU5EKSxaT1JBTl9WRkVIKTsKLQl9Ci0JZWxzZSB7Ci0JCWludCBXYSA9IG1heFdpZHRoOwotCQlpbnQgWCA9ICh3aW5XaWR0aCo2NCtXYS0xKS9XYTsKLQkJaW50IFdlID0gd2luV2lkdGgqNjQvWDsKLQkJaW50IEhvckRjbSA9IDY0LVg7Ci0JCWludCBoY3JvcDEgPSAyKihXYS1XZSkvNDsKLQkJLyoKLQkJICogQlVHRklYOiBKdWhhIE51cm1lbGEgPGp1bmtpQHFuLWxwcjItMTY1LnF1aWNrbmV0LmluZXQuZmk+Ci0JCSAqIGZvdW5kIHRoZSBzb2x1dGlvbiB0byB0aGUgY29sb3IgcGhhc2Ugc2hpZnQuCi0JCSAqIFNlZSBDaGFuZ2VMb2cgZm9yIHRoZSBmdWxsIGV4cGxhbmF0aW9uKQotCQkgKi8KLQkJaW50IEhzdGFydCA9IChtYXhYT2Zmc2V0ICsgaGNyb3AxKSB8IDE7Ci0JCWludCBIZW5kID0gSHN0YXJ0ICsgV2UgLSAxOwotCi1ERUJVRyhwcmludGsoS0VSTl9ERUJVRyAiICAgICAgIFg6IHNjYWxlPSVkLCBzdGFydD0lZCwgZW5kPSVkXG4iLCBIb3JEY20sIEhzdGFydCwgSGVuZCkpOwotCi0JCXpyYW9yKChIc3RhcnQ8PDEwKXwoSGVuZDw8MCksfihaT1JBTl9WRkVIX0hTVEFSVHxaT1JBTl9WRkVIX0hFTkQpLFpPUkFOX1ZGRUgpOwotCQl2ZmVjIHw9IEhvckRjbTw8MTQ7Ci0KLQkJaWYgKEhvckRjbTwxNikKLQkJCXZmZWMgfD0gWk9SQU5fVkZFQ19IRklMVEVSXzE7IC8qIG5vIGZpbHRlciAqLwotCQllbHNlIGlmIChIb3JEY208MzIpCi0JCQl2ZmVjIHw9IFpPUkFOX1ZGRUNfSEZJTFRFUl8zOyAvKiAzIHRhcCBmaWx0ZXIgKi8KLQkJZWxzZSBpZiAoSG9yRGNtPDQ4KQotCQkJdmZlYyB8PSBaT1JBTl9WRkVDX0hGSUxURVJfNDsgLyogNCB0YXAgZmlsdGVyICovCi0JCWVsc2UJdmZlYyB8PSBaT1JBTl9WRkVDX0hGSUxURVJfNTsgLyogNSB0YXAgZmlsdGVyICovCi0JfQotCi0JLyoKLQkgKiBEZXRlcm1pbmUgdmVydGljYWwgc2NhbGVzIGFuZCBjcm9wcwotCSAqCi0JICogd2hlbiBoZWlnaHQgaXMgbmVnYXRpdmUsIHdlIHdhbnQgdG8gcmVhZCBzdGFydGluZyBhdCBsaW5lIDAKLQkgKiBPbmUgZGF5IHNvbWVvbmUgbWlnaHQgbmVlZCBhY2Nlc3MgdG8gdGhlc2UgbGluZXMuLi4KLQkgKi8KLQlpZiAoaS0+aCA8IDApIHsKLQkJaW50IFZzdGFydCA9IDA7Ci0JCWludCBWZW5kID0gVnN0YXJ0ICsgd2luSGVpZ2h0OwotREVCVUcocHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICBZOiBzY2FsZT0wLCBzdGFydD0lZCwgZW5kPSVkXG4iLCBWc3RhcnQsIFZlbmQpKTsKLQkJenJhb3IoKFZzdGFydDw8MTApfChWZW5kPDwwKSx+KFpPUkFOX1ZGRVZfVlNUQVJUfFpPUkFOX1ZGRVZfVkVORCksWk9SQU5fVkZFVik7Ci0JfQotCWVsc2UgewotCQlpbnQgSGEgPSBtYXhIZWlnaHQ7Ci0JCWludCBZID0gKHdpbkhlaWdodCo2NCtIYS0xKS9IYTsKLQkJaW50IEhlID0gd2luSGVpZ2h0KjY0L1k7Ci0JCWludCBWZXJEY20gPSA2NC1ZOwotCQlpbnQgdmNyb3AxID0gMiooSGEtSGUpLzQ7Ci0JCWludCBWc3RhcnQgPSBtYXhZT2Zmc2V0ICsgdmNyb3AxOwotCQlpbnQgVmVuZCA9IFZzdGFydCArIEhlIC0gMTsKLQotREVCVUcocHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICBZOiBzY2FsZT0lZCwgc3RhcnQ9JWQsIGVuZD0lZFxuIiwgVmVyRGNtLCBWc3RhcnQsIFZlbmQpKTsKLQkJenJhb3IoKFZzdGFydDw8MTApfChWZW5kPDwwKSx+KFpPUkFOX1ZGRVZfVlNUQVJUfFpPUkFOX1ZGRVZfVkVORCksWk9SQU5fVkZFVik7Ci0JCXZmZWMgfD0gVmVyRGNtPDw4OwotCX0KLQotREVCVUcocHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICBGOiBmb3JtYXQ9JWQoPSVzKVxuIixpLT5mb3JtYXQscGFsZXR0ZTJmbXRbaS0+Zm9ybWF0XS5uYW1lKSk7Ci0KLQkvKiBzZXR1cCB0aGUgcmVxdWVzdGVkIGZvcm1hdCAqLwotCXpyd3JpdGUodmZlYywgWk9SQU5fVkZFQyk7Ci19Ci0KLXN0YXRpYwotdm9pZCB6b3Jhbl9jb21tb25fb3BlbihzdHJ1Y3Qgem9yYW4qIHp0diwgaW50IGZsYWdzKQotewotCVVOVVNFRChmbGFncyk7Ci0KLQkvKiBhbHJlYWR5IG9wZW5lZD8gKi8KLQlpZiAoenR2LT51c2VycysrICE9IDApCi0JCXJldHVybjsKLQotCS8qIHVubXV0ZSBhdWRpbyAqLwotCS8qIC93aGF0LyBhdWRpbz8gKi8KLQotCXp0di0+c3RhdGUgPSAwOwotCi0JLyogc2V0dXAgdGhlIGVuY29kZXIgdG8gdGhlIGluaXRpYWwgdmFsdWVzICovCi0JenR2LT5waWN0dXJlLmNvbG91cj0yNTQ8PDc7Ci0JenR2LT5waWN0dXJlLmJyaWdodG5lc3M9MTI4PDw4OwotCXp0di0+cGljdHVyZS5odWU9MTI4PDw4OwotCXp0di0+cGljdHVyZS5jb250cmFzdD0yMTY8PDc7Ci0JaTJjX2NvbnRyb2xfZGV2aWNlKCZ6dHYtPmkyYywgSTJDX0RSSVZFUklEX1ZJREVPREVDT0RFUiwgREVDT0RFUl9TRVRfUElDVFVSRSwgJnp0di0+cGljdHVyZSk7Ci0KLQkvKiBkZWZhdWx0IHRvIHRoZSBjb21wb3NpdGUgaW5wdXQgc2luY2UgbXkgY2FtZXJhIGlzIHRoZXJlICovCi0Jem9yYW5fbXV4c2VsKHp0diwgMCwgVklERU9fTU9ERV9QQUwpOwotfQotCi1zdGF0aWMKLXZvaWQgem9yYW5fY29tbW9uX2Nsb3NlKHN0cnVjdCB6b3JhbiogenR2KQotewotCWlmICgtLXp0di0+dXNlcnMgIT0gMCkKLQkJcmV0dXJuOwotCi0JLyogbXV0ZSBhdWRpbyAqLwotCS8qIC93aGF0LyBhdWRpbz8gKi8KLQotCS8qIHN0b3AgdGhlIGNoaXAgKi8KLQl6b3Jhbl9jYXAoenR2LCAwKTsKLX0KLQotLyoKLSAqIE9wZW4gYSB6b3JhbiBjYXJkLiBSaWdodCBub3cgdGhlIGZsYWdzIGFyZSBqdXN0IGEgaGFjawotICovCi1zdGF0aWMgaW50IHpvcmFuX29wZW4oc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IHpvcmFuICp6dHYgPSAoc3RydWN0IHpvcmFuKilkZXY7Ci0Jc3RydWN0IHZpZGluZm8qIGl0ZW07Ci0JY2hhciogcG9zOwotCi0JREVCVUcocHJpbnRrKENBUkRfREVCVUcgIm9wZW4oZGV2LCVkKVxuIixDQVJELGZsYWdzKSk7Ci0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JICogV2UgcmVhbGx5IHNob3VsZCBiZSBkb2luZyBsYXp5IGFsbG9jaW5nLi4uCi0JICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKiBhbGxvY2F0ZSBhIGZyYW1lIGJ1ZmZlciAqLwotCWlmICghenR2LT5mYnVmZmVyKQotCQl6dHYtPmZidWZmZXIgPSBibWFsbG9jKFpPUkFOX01BWF9GQlVGU0laRSk7Ci0JaWYgKCF6dHYtPmZidWZmZXIpIHsKLQkJLyogY291bGQgbm90IGdldCBhIGJ1ZmZlciwgYmFpbCBvdXQgKi8KLQkJcmV0dXJuIC1FTk9CVUZTOwotCX0KLQkvKiBhdCB0aGlzIHRpbWUgd2UgX2Fsd2F5c18gaGF2ZSBhIGZyYW1lYnVmZmVyICovCi0JbWVtc2V0KHp0di0+ZmJ1ZmZlciwwLFpPUkFOX01BWF9GQlVGU0laRSk7Ci0KLQlpZiAoIXp0di0+b3ZlcmluZm8ub3ZlcmxheSkKLQkJenR2LT5vdmVyaW5mby5vdmVybGF5ID0ga21hbGxvYygxMDI0KjEwMjQvOCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF6dHYtPm92ZXJpbmZvLm92ZXJsYXkpIHsKLQkJLyogY291bGQgbm90IGdldCBhbiBvdmVybGF5IGJ1ZmZlciwgYmFpbCBvdXQgKi8KLQkJYmZyZWUoenR2LT5mYnVmZmVyLCBaT1JBTl9NQVhfRkJVRlNJWkUpOwotCQlyZXR1cm4gLUVOT0JVRlM7Ci0JfQotCS8qIGF0IHRoaXMgdGltZSB3ZSBfYWx3YXlzXyBoYXZlIGEgb3ZlcmxheSAqLwotCi0JLyogY2xlYXIgYnVmZmVyIHN0YXR1cywgYW5kIGdpdmUgdGhlbSBhIERNQWFibGUgYWRkcmVzcyAqLwotCXBvcyA9IHp0di0+ZmJ1ZmZlcjsKLQlmb3IgKGl0ZW09enR2LT5ncmFiaW5mbzsgaXRlbSE9enR2LT5ncmFiaW5mbytaT1JBTl9NQVhfRkJVRkZFUlM7IGl0ZW0rKykKLQl7Ci0JCWl0ZW0tPnN0YXR1cyA9IEZCVUZGRVJfRlJFRTsKLQkJaXRlbS0+bWVtYWRyID0gcG9zOwotCQlpdGVtLT5idXNhZHIgPSB2aXJ0X3RvX2J1cyhwb3MpOwotCQlwb3MgKz0gWk9SQU5fTUFYX0ZCVUZGRVI7Ci0JfQotCi0JLyogZG8gdGhlIGNvbW1vbiBwYXJ0IG9mIGFsbCBvcGVuJ3MgKi8KLQl6b3Jhbl9jb21tb25fb3Blbih6dHYsIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMKLXZvaWQgem9yYW5fY2xvc2Uoc3RydWN0IHZpZGVvX2RldmljZSogZGV2KQotewotCXN0cnVjdCB6b3JhbiAqenR2ID0gKHN0cnVjdCB6b3JhbiopZGV2OwotCi0JREVCVUcocHJpbnRrKENBUkRfREVCVUcgImNsb3NlKGRldilcbiIsQ0FSRCkpOwotCi0JLyogZHJpdmVyIHNwZWNpZmljIGNsb3N1cmUgKi8KLQljbGVhcl9iaXQoU1RBVEVfT1ZFUkxBWSwgJnp0di0+c3RhdGUpOwotCi0Jem9yYW5fY29tbW9uX2Nsb3NlKHp0dik7Ci0KLQkvKgotCSAqICAgICAgVGhpcyBpcyBzdWNreSBidXQgcmlnaHQgbm93IEkgY2FuJ3QgZmluZCBhIGdvb2Qgd2F5IHRvCi0JICogICAgICBiZSBzdXJlIGl0cyBzYWZlIHRvIGZyZWUgdGhlIGJ1ZmZlci4gV2Ugd2FpdCA1LTYgZmllbGRzCi0JICogICAgICB3aGljaCBpcyBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBiZSBzdXJlLgotCSAqLwotCW1zbGVlcCgxMDApOwkJCS8qIFdhaXQgMS8xMHRoIG9mIGEgc2Vjb25kICovCi0KLQkvKiBmcmVlIHRoZSBhbGxvY2F0ZWQgZnJhbWVidWZmZXIgKi8KLQliZnJlZSh6dHYtPmZidWZmZXIsIFpPUkFOX01BWF9GQlVGU0laRSk7Ci0JenR2LT5mYnVmZmVyID0gMDsKLQlrZnJlZSh6dHYtPm92ZXJpbmZvLm92ZXJsYXkpOwotCXp0di0+b3ZlcmluZm8ub3ZlcmxheSA9IDA7Ci0KLX0KLQotLyoKLSAqIFRoaXMgcmVhZCBmdW5jdGlvbiBjb3VsZCBiZSB1c2VkIHJlZW50cmFudCBpbiBhIFNNUCBzaXR1YXRpb24uCi0gKgotICogVGhpcyBpcyBtYWRlIHBvc3NpYmxlIGJ5IHRoZSBzcGlubG9jayB3aGljaCBpcyBrZXB0IHRpbGwgd2UKLSAqIGZvdW5kIGFuZCBtYXJrZWQgYSBidWZmZXIgZm9yIG91ciBvd24gdXNlLiBUaGUgbG9jayBtdXN0Ci0gKiBiZSByZWxlYXNlZCBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIHByZXZlbnQgbG9jayBjb250ZW50aW9uLgotICovCi1zdGF0aWMKLWxvbmcgem9yYW5fcmVhZChzdHJ1Y3QgdmlkZW9fZGV2aWNlKiBkZXYsIGNoYXIqIGJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCwgaW50IG5vbmJsb2NrKQotewotCXN0cnVjdCB6b3JhbiAqenR2ID0gKHN0cnVjdCB6b3JhbiopZGV2OwotCXVuc2lnbmVkIGxvbmcgbWF4OwotCXN0cnVjdCB2aWRpbmZvKiB1bnVzZWQgPSAwOwotCXN0cnVjdCB2aWRpbmZvKiBkb25lID0gMDsKLQotCURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJ6b3Jhbl9yZWFkKCVwLCVsZCwlZClcbiIsQ0FSRCxidWYsY291bnQsbm9uYmxvY2spKTsKLQotCS8qIGZpbmQgb3Vyc2VsZiBhIGZyZWUgb3IgY29tcGxldGVkIGJ1ZmZlciAqLwotCWZvciAoOzspIHsKLQkJc3RydWN0IHZpZGluZm8qIGl0ZW07Ci0KLQkJd3JpdGVfbG9ja19pcnEoJnp0di0+bG9jayk7Ci0JCWZvciAoaXRlbT16dHYtPmdyYWJpbmZvOyBpdGVtIT16dHYtPmdyYWJpbmZvK1pPUkFOX01BWF9GQlVGRkVSUzsgaXRlbSsrKQotCQl7Ci0JCQlpZiAoIXVudXNlZCAmJiBpdGVtLT5zdGF0dXMgPT0gRkJVRkZFUl9GUkVFKQotCQkJCXVudXNlZCA9IGl0ZW07Ci0JCQlpZiAoIWRvbmUgJiYgaXRlbS0+c3RhdHVzID09IEZCVUZGRVJfRE9ORSkKLQkJCQlkb25lID0gaXRlbTsKLQkJfQotCQlpZiAoZG9uZSB8fCB1bnVzZWQpCi0JCQlicmVhazsKLQotCQkvKiBubyBtb3JlIGZyZWUgYnVmZmVycywgd2FpdCBmb3IgdGhlbS4gKi8KLQkJd3JpdGVfdW5sb2NrX2lycSgmenR2LT5sb2NrKTsKLQkJaWYgKG5vbmJsb2NrKQotCQkJcmV0dXJuIC1FV09VTERCTE9DSzsKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmenR2LT5ncmFicSk7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCXJldHVybiAtRUlOVFI7Ci0JfQotCi0JLyogRG8gd2UgaGF2ZSAncmVhZHknIGRhdGE/ICovCi0JaWYgKCFkb25lKSB7Ci0JCS8qIG5vPyB0aGFuIHRoaXMgd2lsbCB0YWtlIGEgd2hpbGUuLi4gKi8KLQkJaWYgKG5vbmJsb2NrKSB7Ci0JCQl3cml0ZV91bmxvY2tfaXJxKCZ6dHYtPmxvY2spOwotCQkJcmV0dXJuIC1FV09VTERCTE9DSzsKLQkJfQotCi0JCS8qIG1hcmsgdGhlIHVudXNlZCBidWZmZXIgYXMgd2FudGVkICovCi0JCXVudXNlZC0+c3RhdHVzID0gRkJVRkZFUl9CVVNZOwotCQl1bnVzZWQtPncgPSAzMjA7Ci0JCXVudXNlZC0+aCA9IDI0MDsKLQkJdW51c2VkLT5mb3JtYXQgPSBWSURFT19QQUxFVFRFX1JHQjI0OwotCQl1bnVzZWQtPmJwcCA9IHBhbGV0dGUyZm10W3VudXNlZC0+Zm9ybWF0XS5icHA7Ci0JCXVudXNlZC0+YnBsID0gdW51c2VkLT53ICogdW51c2VkLT5icHA7Ci0JCXVudXNlZC0+bmV4dCA9IDA7Ci0JCXsgLyogYWRkIHRvIHRhaWwgb2YgcXVldWUgKi8KLQkJICBzdHJ1Y3QgdmlkaW5mbyogb2xkZnJhbWUgPSB6dHYtPndvcmtxdWV1ZTsKLQkJICBpZiAoIW9sZGZyYW1lKSB6dHYtPndvcmtxdWV1ZSA9IHVudXNlZDsKLQkJICBlbHNlIHsKLQkJICAgIHdoaWxlIChvbGRmcmFtZS0+bmV4dCkgb2xkZnJhbWUgPSBvbGRmcmFtZS0+bmV4dDsKLQkJICAgIG9sZGZyYW1lLT5uZXh0ID0gdW51c2VkOwotCQkgIH0KLQkJfQotCQl3cml0ZV91bmxvY2tfaXJxKCZ6dHYtPmxvY2spOwotCi0JCS8qIHRlbGwgdGhlIHN0YXRlIG1hY2hpbmUgd2Ugd2FudCBpdCBmaWxsZWQgL05PVy8gKi8KLQkJem9yYW5fY2FwKHp0diwgMSk7Ci0KLQkJLyogd2FpdCB0aWxsIHRoaXMgYnVmZmVyIGdldHMgZ3JhYmJlZCAqLwotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoenR2LT5ncmFicSwKLQkJCQkodW51c2VkLT5zdGF0dXMgIT0gRkJVRkZFUl9CVVNZKSk7Ci0JCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJcmV0dXJuIC1FSU5UUjsKLQkJZG9uZSA9IHVudXNlZDsKLQl9Ci0JZWxzZQotCQl3cml0ZV91bmxvY2tfaXJxKCZ6dHYtPmxvY2spOwotCi0JLyogWWVzISB3ZSBnb3QgZGF0YSEgKi8KLQltYXggPSBkb25lLT5icGwgKiBkb25lLT5oOwotCWlmIChjb3VudCA+IG1heCkKLQkJY291bnQgPSBtYXg7Ci0JaWYgKGNvcHlfdG9fdXNlcigodm9pZCopYnVmLCBkb25lLT5tZW1hZHIsIGNvdW50KSkKLQkJY291bnQgPSAtRUZBVUxUOwotCi0JLyoga2VlcCB0aGUgZW5naW5lIHJ1bm5pbmcgKi8KLQlkb25lLT5zdGF0dXMgPSBGQlVGRkVSX0ZSRUU7Ci0vLwl6b3Jhbl9jYXAoenR2LDEpOwotCi0JLyogdGVsbCBsaXN0ZW5lcnMgdGhpcyBidWZmZXIgYmVjYW1lIGZyZWUgKi8KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnp0di0+Z3JhYnEpOwotCi0JLyogZ29vZGJ5ZSAqLwotCURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJ6b3Jhbl9yZWFkKCkgcmV0dXJucyAlbHVcbiIsQ0FSRCxjb3VudCkpOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljCi1sb25nIHpvcmFuX3dyaXRlKHN0cnVjdCB2aWRlb19kZXZpY2UqIGRldiwgY29uc3QgY2hhciogYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbm9uYmxvY2spCi17Ci0Jc3RydWN0IHpvcmFuICp6dHYgPSAoc3RydWN0IHpvcmFuICopZGV2OwotCVVOVVNFRCh6dHYpOyBVTlVTRUQoZGV2KTsgVU5VU0VEKGJ1Zik7IFVOVVNFRChjb3VudCk7IFVOVVNFRChub25ibG9jayk7Ci0JREVCVUcocHJpbnRrKENBUkRfREVCVUcgInpvcmFuX3dyaXRlXG4iLENBUkQpKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljCi11bnNpZ25lZCBpbnQgem9yYW5fcG9sbChzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQotewotCXN0cnVjdCB6b3JhbiAqenR2ID0gKHN0cnVjdCB6b3JhbiAqKWRldjsKLQlzdHJ1Y3QgdmlkaW5mbyogaXRlbTsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0KLQlwb2xsX3dhaXQoZmlsZSwgJnp0di0+Z3JhYnEsIHdhaXQpOwotCi0JZm9yIChpdGVtPXp0di0+Z3JhYmluZm87IGl0ZW0hPXp0di0+Z3JhYmluZm8rWk9SQU5fTUFYX0ZCVUZGRVJTOyBpdGVtKyspCi0JCWlmIChpdGVtLT5zdGF0dXMgPT0gRkJVRkZFUl9ET05FKQotCQl7Ci0JCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiem9yYW5fcG9sbCgpPSV4XG4iLENBUkQsbWFzaykpOwotCi0JcmV0dXJuIG1hc2s7Ci19Ci0KLS8qIGFwcGVuZCBhIG5ldyBjbGlwcmVnaW9uIHRvIHRoZSB2ZWN0b3Igb2YgdmlkZW9fY2xpcHMgKi8KLXN0YXRpYwotdm9pZCBuZXdfY2xpcChzdHJ1Y3QgdmlkZW9fd2luZG93KiB2dywgc3RydWN0IHZpZGVvX2NsaXAqIHZjcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCi17Ci0JdmNwW3Z3LT5jbGlwY291bnRdLnggPSB4OwotCXZjcFt2dy0+Y2xpcGNvdW50XS55ID0geTsKLQl2Y3BbdnctPmNsaXBjb3VudF0ud2lkdGggPSB3OwotCXZjcFt2dy0+Y2xpcGNvdW50XS5oZWlnaHQgPSBoOwotCXZ3LT5jbGlwY291bnQrKzsKLX0KLQotc3RhdGljCi1pbnQgem9yYW5faW9jdGwoc3RydWN0IHZpZGVvX2RldmljZSogZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHpvcmFuKiB6dHYgPSAoc3RydWN0IHpvcmFuKilkZXY7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCSBjYXNlIFZJRElPQ0dDQVA6Ci0JIHsKLQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgYzsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIlZJRElPQ0dDQVBcbiIsQ0FSRCkpOwotCi0JCXN0cmNweShjLm5hbWUsenR2LT52aWRlb19kZXYubmFtZSk7Ci0JCWMudHlwZSA9IFZJRF9UWVBFX0NBUFRVUkV8Ci0JCQkgVklEX1RZUEVfT1ZFUkxBWXwKLQkJCSBWSURfVFlQRV9DTElQUElOR3wKLQkJCSBWSURfVFlQRV9GUkFNRVJBTXwKLQkJCSBWSURfVFlQRV9TQ0FMRVM7Ci0JCWlmICh6dHYtPmhhdmVfdHVuZXIpCi0JCQljLnR5cGUgfD0gVklEX1RZUEVfVFVORVI7Ci0JCWlmIChwY2lfcHJvYmxlbXMgJiAoUENJUENJX0ZBSUx8UENJQUdQX0ZBSUwpKQotCQkJYy50eXBlICY9IH5WSURfVFlQRV9PVkVSTEFZOwotCQlpZiAoenR2LT5oYXZlX2RlY29kZXIpIHsKLQkJCWMuY2hhbm5lbHMgPSB6dHYtPmNhcmQtPnZpZGVvX2lucHV0czsKLQkJCWMuYXVkaW9zID0genR2LT5jYXJkLT5hdWRpb19pbnB1dHM7Ci0JCX0gZWxzZQotCQkJLyogbm8gZGVjb2RlciAtPiBubyBjaGFubmVscyAqLwotCQkJYy5jaGFubmVscyA9IGMuYXVkaW9zID0gMDsKLQkJYy5tYXh3aWR0aCA9IDc2ODsKLQkJYy5tYXhoZWlnaHQgPSA1NzY7Ci0JCWMubWlud2lkdGggPSAzMjsKLQkJYy5taW5oZWlnaHQgPSAzMjsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsJmMsc2l6ZW9mKGMpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKLQkgfQotCi0JIGNhc2UgVklESU9DR0NIQU46Ci0JIHsKLQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgdjsKLQkJaW50IG11eDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsc2l6ZW9mKHYpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiVklESU9DR0NIQU4oJWQpXG4iLENBUkQsdi5jaGFubmVsKSk7Ci0JCXYuZmxhZ3M9VklERU9fVkNfQVVESU8KLSNpZmRlZiBWSURFT19WQ19OT1JNCi0JCQl8VklERU9fVkNfTk9STQotI2VuZGlmCi0JCQk7Ci0JCXYudHVuZXJzPTA7Ci0JCXYudHlwZT1WSURFT19UWVBFX0NBTUVSQTsKLSNpZmRlZiBJX0VYUEVDVF9QT1NTSUJMRV9OT1JNU19JTl9USEVfQVBJCi0JCXYubm9ybT1WSURFT19NT0RFX1BBTHwKLQkJICAgICAgIFZJREVPX01PREVfTlRTQ3wKLQkJICAgICAgIFZJREVPX01PREVfU0VDQU07Ci0jZWxzZQotCQl2Lm5vcm09VklERU9fTU9ERV9QQUw7Ci0jZW5kaWYKLQkJLyogdG9vIG1hbnkgaW5wdXRzPyBubyBkZWNvZGVyIC0+IG5vIGNoYW5uZWxzICovCi0JCWlmICghenR2LT5oYXZlX2RlY29kZXIgfHwgdi5jaGFubmVsIDwgMCB8fCAgdi5jaGFubmVsID49IHp0di0+Y2FyZC0+dmlkZW9faW5wdXRzKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJLyogbm93IGRldGVybWluZSB0aGUgbmFtZSBvZiB0aGUgY2hhbm5lbCAqLwotCQltdXggPSB6dHYtPmNhcmQtPnZpZGVvX211eFt2LmNoYW5uZWxdOwotCQlpZiAobXV4ICYgSVNfVFVORVIpIHsKLQkJCS8qIGxldHMgYXNzdW1lIG9ubHkgb25lIHR1bmVyLCB5ZXM/ICovCi0JCQlzdHJjcHkodi5uYW1lLCJUZWxldmlzaW9uIik7Ci0JCQl2LnR5cGUgPSBWSURFT19UWVBFX1RWOwotCQkJaWYgKHp0di0+aGF2ZV90dW5lcikgewotCQkJCXYuZmxhZ3MgfD0gVklERU9fVkNfVFVORVI7Ci0JCQkJdi50dW5lcnMgPSAxOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKG11eCAmIElTX1NWSFMpCi0JCQlzcHJpbnRmKHYubmFtZSwiUy1WaWRlby0lZCIsdi5jaGFubmVsKTsKLQkJZWxzZQotCQkJc3ByaW50Zih2Lm5hbWUsIkNWQlMtJWQiLHYuY2hhbm5lbCk7Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsJnYsc2l6ZW9mKHYpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKLQkgfQotCSBjYXNlIFZJRElPQ1NDSEFOOgotCSB7CS8qIHNldCB2aWRlbyBjaGFubmVsICovCi0JCXN0cnVjdCB2aWRlb19jaGFubmVsIHY7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdiwgYXJnLHNpemVvZih2KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIlZJRElPQ1NDSEFOKCVkLCVkKVxuIixDQVJELHYuY2hhbm5lbCx2Lm5vcm0pKTsKLQotCQkvKiB0b28gbWFueSBpbnB1dHM/IG5vIGRlY29kZXIgLT4gbm8gY2hhbm5lbHMgKi8KLQkJaWYgKCF6dHYtPmhhdmVfZGVjb2RlciB8fCB2LmNoYW5uZWwgPj0genR2LT5jYXJkLT52aWRlb19pbnB1dHMgfHwgdi5jaGFubmVsIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICh2Lm5vcm0gIT0gVklERU9fTU9ERV9QQUwgJiYKLQkJICAgIHYubm9ybSAhPSBWSURFT19NT0RFX05UU0MgJiYKLQkJICAgIHYubm9ybSAhPSBWSURFT19NT0RFX1NFQ0FNICYmCi0JCSAgICB2Lm5vcm0gIT0gVklERU9fTU9ERV9BVVRPKQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JCS8qIG1ha2UgaXQgaGFwcGVuLCBucjEhICovCi0JCXJldHVybiB6b3Jhbl9tdXhzZWwoenR2LHYuY2hhbm5lbCx2Lm5vcm0pOwotCSB9Ci0KLQkgY2FzZSBWSURJT0NHVFVORVI6Ci0JIHsKLQkJc3RydWN0IHZpZGVvX3R1bmVyIHY7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdiwgYXJnLHNpemVvZih2KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIlZJRElPQ0dUVU5FUiglZClcbiIsQ0FSRCx2LnR1bmVyKSk7Ci0KLQkJLyogT25seSBubyBvciBvbmUgdHVuZXIgZm9yIG5vdyAqLwotCQlpZiAoIXp0di0+aGF2ZV90dW5lciB8fCB2LnR1bmVyKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJc3RyY3B5KHYubmFtZSwiVGVsZXZpc2lvbiIpOwotCQl2LnJhbmdlbG93ICA9IDA7Ci0JCXYucmFuZ2VoaWdoID0gfjA7Ci0JCXYuZmxhZ3MgICAgID0gVklERU9fVFVORVJfUEFMfFZJREVPX1RVTkVSX05UU0N8VklERU9fVFVORVJfU0VDQU07Ci0JCXYubW9kZSAgICAgID0genR2LT5ub3JtOwotCQl2LnNpZ25hbCAgICA9IDB4RkZGRjsgLyogdW5rbm93biAqLwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCZ2LHNpemVvZih2KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JIH0KLQkgY2FzZSBWSURJT0NTVFVORVI6Ci0JIHsKLQkJc3RydWN0IHZpZGVvX3R1bmVyIHY7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdiwgYXJnLCBzaXplb2YodikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJWSURJT0NTVFVORVIoJWQsJWQpXG4iLENBUkQsdi50dW5lcix2Lm1vZGUpKTsKLQotCQkvKiBPbmx5IG5vIG9yIG9uZSB0dW5lciBmb3Igbm93ICovCi0JCWlmICghenR2LT5oYXZlX3R1bmVyIHx8IHYudHVuZXIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBhbmQgaXQgb25seSBoYXMgY2VydGFpbiB2YWxpZCBtb2RlcyAqLwotCQlpZiggdi5tb2RlICE9IFZJREVPX01PREVfUEFMICYmCi0JCSAgICB2Lm1vZGUgIT0gVklERU9fTU9ERV9OVFNDICYmCi0JCSAgICB2Lm1vZGUgIT0gVklERU9fTU9ERV9TRUNBTSkKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCQkvKiBlbmdhZ2UhICovCi0JCXJldHVybiB6b3Jhbl9tdXhzZWwoenR2LHYudHVuZXIsdi5tb2RlKTsKLQkgfQotCi0JIGNhc2UgVklESU9DR1BJQ1Q6Ci0JIHsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgcCA9IHp0di0+cGljdHVyZTsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIlZJRElPQ0dQSUNUXG4iLENBUkQpKTsKLQkJcC5kZXB0aCA9IHp0di0+ZGVwdGg7Ci0JCXN3aXRjaCAocC5kZXB0aCkgewotCQkgY2FzZSAgODogcC5wYWxldHRlPVZJREVPX1BBTEVUVEVfWVVWNDIyOwotCQkJICBicmVhazsKLQkJIGNhc2UgMTU6IHAucGFsZXR0ZT1WSURFT19QQUxFVFRFX1JHQjU1NTsKLQkJCSAgYnJlYWs7Ci0JCSBjYXNlIDE2OiBwLnBhbGV0dGU9VklERU9fUEFMRVRURV9SR0I1NjU7Ci0JCQkgIGJyZWFrOwotCQkgY2FzZSAyNDogcC5wYWxldHRlPVZJREVPX1BBTEVUVEVfUkdCMjQ7Ci0JCQkgIGJyZWFrOwotCQkgY2FzZSAzMjogcC5wYWxldHRlPVZJREVPX1BBTEVUVEVfUkdCMzI7Ci0JCQkgIGJyZWFrOwotCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcCwgc2l6ZW9mKHApKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKLQkgfQotCSBjYXNlIFZJRElPQ1NQSUNUOgotCSB7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlIHA7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmcCwgYXJnLHNpemVvZihwKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIlZJRElPQ1NQSUNUKCVkLCVkLCVkLCVkLCVkLCVkLCVkKVxuIixDQVJELHAuYnJpZ2h0bmVzcyxwLmh1ZSxwLmNvbG91cixwLmNvbnRyYXN0LHAud2hpdGVuZXNzLHAuZGVwdGgscC5wYWxldHRlKSk7Ci0KLQkJLyogZGVwdGggbXVzdCBtYXRjaCB3aXRoIGZyYW1lYnVmZmVyICovCi0JCWlmIChwLmRlcHRoICE9IHp0di0+ZGVwdGgpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBjaGVjayBpZiBwYWxldHRlIG1hdGNoZXMgdGhpcyBicHAgKi8KLQkJaWYgKHAucGFsZXR0ZT5OUlBBTEVUVEVTIHx8Ci0JCSAgICBwYWxldHRlMmZtdFtwLnBhbGV0dGVdLmJwcCAhPSB6dHYtPm92ZXJpbmZvLmJwcCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXdyaXRlX2xvY2tfaXJxKCZ6dHYtPmxvY2spOwotCQl6dHYtPm92ZXJpbmZvLmZvcm1hdCA9IHAucGFsZXR0ZTsKLQkJenR2LT5waWN0dXJlID0gcDsKLQkJd3JpdGVfdW5sb2NrX2lycSgmenR2LT5sb2NrKTsKLQotCQkvKiB0ZWxsIHRoZSBkZWNvZGVyICovCi0JCWkyY19jb250cm9sX2RldmljZSgmenR2LT5pMmMsIEkyQ19EUklWRVJJRF9WSURFT0RFQ09ERVIsIERFQ09ERVJfU0VUX1BJQ1RVUkUsICZwKTsKLQkJYnJlYWs7Ci0JIH0KLQotCSBjYXNlIFZJRElPQ0dXSU46Ci0JIHsKLQkJc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIlZJRElPQ0dXSU5cbiIsQ0FSRCkpOwotCQlyZWFkX2xvY2soJnp0di0+bG9jayk7Ci0JCXZ3LnggICAgICA9IHp0di0+b3ZlcmluZm8ueDsKLQkJdncueSAgICAgID0genR2LT5vdmVyaW5mby55OwotCQl2dy53aWR0aCAgPSB6dHYtPm92ZXJpbmZvLnc7Ci0JCXZ3LmhlaWdodCA9IHp0di0+b3ZlcmluZm8uaDsKLQkJdncuY2hyb21ha2V5PSAwOwotCQl2dy5mbGFncyAgPSAwOwotCQlpZiAoenR2LT52aWRJbnRlcmxhY2UpCi0JCQl2dy5mbGFnc3w9VklERU9fV0lORE9XX0lOVEVSTEFDRTsKLQkJcmVhZF91bmxvY2soJnp0di0+bG9jayk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCZ2dyxzaXplb2YodncpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKLQkgfQotCSBjYXNlIFZJRElPQ1NXSU46Ci0JIHsKLQkJc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsKLQkJc3RydWN0IHZpZGVvX2NsaXAgKnZjcDsKLQkJaW50IG9uOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJnZ3LGFyZyxzaXplb2YodncpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiVklESU9DU1dJTiglZCwlZCwlZCwlZCwleCwlZClcbiIsQ0FSRCx2dy54LHZ3Lnksdncud2lkdGgsdncuaGVpZ2h0LHZ3LmZsYWdzLHZ3LmNsaXBjb3VudCkpOwotCi0JCWlmICh2dy5mbGFncykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICh2dy5jbGlwY291bnQgPDAgfHwgdncuY2xpcGNvdW50PjI1NikKLQkJCXJldHVybiAtRURPTTsgICAvKiBUb28gbWFueSEgKi8KLQotCQkvKgotCQkgKiAgICAgIERvIGFueSBjbGlwcy4KLQkJICovCi0JCXZjcCA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb19jbGlwKSoodncuY2xpcGNvdW50KzQpKTsKLQkJaWYgKHZjcD09TlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAodncuY2xpcGNvdW50ICYmIGNvcHlfZnJvbV91c2VyKHZjcCx2dy5jbGlwcyxzaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApKnZ3LmNsaXBjb3VudCkpIHsKLQkJCXZmcmVlKHZjcCk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCW9uID0genR2LT5ydW5uaW5nOwotCQlpZiAob24pCi0JCQl6b3Jhbl9jYXAoenR2LCAwKTsKLQotCQkvKgotCQkgKiBzdHJhbmdlLCBpdCBzZWVtcyB4YXd0diBzb21ldGltZXMgY2FsbHMgdXMgd2l0aCAwCi0JCSAqIHdpZHRoIGFuZC9vciBoZWlnaHQuIElnbm9yZSB0aGVzZSB2YWx1ZXMKLQkJICovCi0JCWlmICh2dy54ID09IDApCi0JCQl2dy54ID0genR2LT5vdmVyaW5mby54OwotCQlpZiAodncueSA9PSAwKQotCQkJdncueSA9IHp0di0+b3ZlcmluZm8ueTsKLQotCQkvKiBieSBub3cgd2UgYXJlIGNvbW1pdHRlZCB0byB0aGUgbmV3IGRhdGEuLi4gKi8KLQkJd3JpdGVfbG9ja19pcnEoJnp0di0+bG9jayk7Ci0JCXp0di0+b3ZlcmluZm8ueCA9IHZ3Lng7Ci0JCXp0di0+b3ZlcmluZm8ueSA9IHZ3Lnk7Ci0JCXp0di0+b3ZlcmluZm8udyA9IHZ3LndpZHRoOwotCQl6dHYtPm92ZXJpbmZvLmggPSB2dy5oZWlnaHQ7Ci0JCXdyaXRlX3VubG9ja19pcnEoJnp0di0+bG9jayk7Ci0KLQkJLyoKLQkJICogICAgICBJbXBvc2UgZGlzcGxheSBjbGlwcwotCQkgKi8KLQkJaWYgKHZ3Lngrdncud2lkdGggPiB6dHYtPnN3aWR0aCkKLQkJCW5ld19jbGlwKCZ2dywgdmNwLCB6dHYtPnN3aWR0aC12dy54LCAwLCB2dy53aWR0aC0xLCB2dy5oZWlnaHQtMSk7Ci0JCWlmICh2dy55K3Z3LmhlaWdodCA+IHp0di0+c2hlaWdodCkKLQkJCW5ld19jbGlwKCZ2dywgdmNwLCAwLCB6dHYtPnNoZWlnaHQtdncueSwgdncud2lkdGgtMSwgdncuaGVpZ2h0LTEpOwotCi0JCS8qIGJ1aWx0IHRoZSByZXF1ZXN0ZWQgY2xpcHBpbmcgem9uZXMgKi8KLQkJem9yYW5fc2V0X2dlbyh6dHYsICZ6dHYtPm92ZXJpbmZvKTsKLQkJem9yYW5fYnVpbHRfb3ZlcmxheSh6dHYsIHZ3LmNsaXBjb3VudCwgdmNwKTsKLQkJdmZyZWUodmNwKTsKLQotCQkvKiBpZiB3ZSB3ZXJlIG9uLCByZXN0YXJ0IHRoZSB2aWRlbyBlbmdpbmUgKi8KLQkJaWYgKG9uKQotCQkJem9yYW5fY2FwKHp0diwgMSk7Ci0JCWJyZWFrOwotCSB9Ci0KLQkgY2FzZSBWSURJT0NDQVBUVVJFOgotCSB7Ci0JCWludCB2OwotCQlpZiAoZ2V0X3VzZXIodiwgKGludCAqKWFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIlZJRElPQ0NBUFRVUkUoJWQpXG4iLENBUkQsdikpOwotCi0JCWlmICh2PT0wKSB7Ci0JCQljbGVhcl9iaXQoU1RBVEVfT1ZFUkxBWSwgJnp0di0+c3RhdGUpOwotCQkJem9yYW5fY2FwKHp0diwgMSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvKiBpcyBWSURJT0NTRkJVRiwgVklESU9DU1dJTiBkb25lPyAqLwotCQkJaWYgKHp0di0+b3ZlcmluZm8uYnVzYWRyPT0wIHx8IHp0di0+b3ZlcmluZm8udz09MCB8fCB6dHYtPm92ZXJpbmZvLmg9PTApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCXNldF9iaXQoU1RBVEVfT1ZFUkxBWSwgJnp0di0+c3RhdGUpOwotCQkJem9yYW5fY2FwKHp0diwgMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JIH0KLQotCSBjYXNlIFZJRElPQ0dGQlVGOgotCSB7Ci0JCXN0cnVjdCB2aWRlb19idWZmZXIgdjsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIlZJRElPQ0dGQlVGXG4iLENBUkQpKTsKLQkJcmVhZF9sb2NrKCZ6dHYtPmxvY2spOwotCQl2LmJhc2UgICA9ICh2b2lkICopenR2LT5vdmVyaW5mby5idXNhZHI7Ci0JCXYuaGVpZ2h0ID0genR2LT5zaGVpZ2h0OwotCQl2LndpZHRoICA9IHp0di0+c3dpZHRoOwotCQl2LmRlcHRoICA9IHp0di0+ZGVwdGg7Ci0JCXYuYnl0ZXNwZXJsaW5lID0genR2LT5vdmVyaW5mby5icGw7Ci0JCXJlYWRfdW5sb2NrKCZ6dHYtPmxvY2spOwotCQlpZihjb3B5X3RvX3VzZXIoYXJnLCAmdixzaXplb2YodikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJyZWFrOwotCSB9Ci0JIGNhc2UgVklESU9DU0ZCVUY6Ci0JIHsKLQkJc3RydWN0IHZpZGVvX2J1ZmZlciB2OwotCQlpZighY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JCWlmIChwY2lwY2lfcHJvYmxlbXMgJiAoUENJUENJX0ZBSUx8UENJQUdQX0ZBSUwpKQotCQkJcmV0dXJuIC1FTlhJTzsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsc2l6ZW9mKHYpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiVklESU9DU0ZCVUYoJXAsJWQsJWQsJWQsJWQpXG4iLENBUkQsdi5iYXNlLCB2LndpZHRoLHYuaGVpZ2h0LHYuZGVwdGgsdi5ieXRlc3BlcmxpbmUpKTsKLQotCQlpZiAodi5kZXB0aCE9MTUgJiYgdi5kZXB0aCE9MTYgJiYgdi5kZXB0aCE9MjQgJiYgdi5kZXB0aCE9MzIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHYuYnl0ZXNwZXJsaW5lPDEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHp0di0+cnVubmluZykKLQkJCXJldHVybiAtRUJVU1k7Ci0JCXdyaXRlX2xvY2tfaXJxKCZ6dHYtPmxvY2spOwotCQl6dHYtPm92ZXJpbmZvLmJ1c2FkciAgPSAodWxvbmcpdi5iYXNlOwotCQl6dHYtPnNoZWlnaHQgICAgICA9IHYuaGVpZ2h0OwotCQl6dHYtPnN3aWR0aCAgICAgICA9IHYud2lkdGg7Ci0JCXp0di0+ZGVwdGggICAgICAgID0gdi5kZXB0aDsJCS8qIGJpdHMgcGVyIHBpeGVsICovCi0JCXp0di0+b3ZlcmluZm8uYnBwID0gKCh2LmRlcHRoKzEpJjB4MzgpLzg7LyogYnl0ZXMgcGVyIHBpeGVsICovCi0JCXp0di0+b3ZlcmluZm8uYnBsID0gdi5ieXRlc3BlcmxpbmU7CS8qIGJ5dGVzIHBlciBsaW5lICovCi0JCXdyaXRlX3VubG9ja19pcnEoJnp0di0+bG9jayk7Ci0JCWJyZWFrOwotCSB9Ci0KLQkgY2FzZSBWSURJT0NLRVk6Ci0JIHsKLQkJLyogV2lsbCBiZSBoYW5kbGVkIGhpZ2hlciB1cCAuLiAqLwotCQlicmVhazsKLQkgfQotCi0JIGNhc2UgVklESU9DU1lOQzoKLQkgewotCQlpbnQgaTsKLQkJaWYgKGdldF91c2VyKGksIChpbnQgKikgYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiVklERU9DU1lOQyglZClcbiIsQ0FSRCxpKSk7Ci0JCWlmIChpPDAgfHwgaT5aT1JBTl9NQVhfRkJVRkZFUlMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3dpdGNoICh6dHYtPmdyYWJpbmZvW2ldLnN0YXR1cykgewotCQkgY2FzZSBGQlVGRkVSX0ZSRUU6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJIGNhc2UgRkJVRkZFUl9CVVNZOgotCQkJLyogd2FpdCB0aWxsIHRoaXMgYnVmZmVyIGdldHMgZ3JhYmJlZCAqLwotCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHp0di0+Z3JhYnEsCi0JCQkJCSh6dHYtPmdyYWJpbmZvW2ldLnN0YXR1cyAhPSBGQlVGRkVSX0JVU1kpKTsKLQkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQlyZXR1cm4gLUVJTlRSOwotCQkJLyogZG9uJ3QgZmFsbCB0aHJvdWdoOyBhIERPTkUgYnVmZmVyIGlzIG5vdCBVTlVTRUQgKi8KLQkJCWJyZWFrOwotCQkgY2FzZSBGQlVGRkVSX0RPTkU6Ci0JCQl6dHYtPmdyYWJpbmZvW2ldLnN0YXR1cyA9IEZCVUZGRVJfRlJFRTsKLQkJCS8qIHRlbGwgcHBsIHdlIGhhdmUgYSBzcGFyZSBidWZmZXIgKi8KLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenR2LT5ncmFicSk7Ci0JCQlicmVhazsKLQkJfQotCQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiVklERU9DU1lOQyglZCkgcmV0dXJuc1xuIixDQVJELGkpKTsKLQkJYnJlYWs7Ci0JIH0KLQotCSBjYXNlIFZJRElPQ01DQVBUVVJFOgotCSB7Ci0JCXN0cnVjdCB2aWRlb19tbWFwIHZtOwotCQlzdHJ1Y3QgdmlkaW5mbyogZnJhbWU7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdm0sYXJnLHNpemVvZih2bSkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJWSURJT0NNQ0FQVFVSRSglZCwoJWQsJWQpLCVkKVxuIixDQVJELHZtLmZyYW1lLHZtLndpZHRoLHZtLmhlaWdodCx2bS5mb3JtYXQpKTsKLQkJaWYgKHZtLmZyYW1lPDAgfHwgdm0uZnJhbWU+Wk9SQU5fTUFYX0ZCVUZGRVJTIHx8Ci0JCSAgICB2bS53aWR0aDwzMiB8fCB2bS53aWR0aD43NjggfHwKLQkJICAgIHZtLmhlaWdodDwzMiB8fCB2bS5oZWlnaHQ+NTc2IHx8Ci0JCSAgICB2bS5mb3JtYXQ+TlJQQUxFVFRFUyB8fAotCQkgICAgcGFsZXR0ZTJmbXRbdm0uZm9ybWF0XS5tb2RlID09IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiB3ZSBhcmUgYWxsb3dlZCB0byB0YWtlIG92ZXIgVU5VU0VEIGFuZCBET05FIGJ1ZmZlcnMgKi8KLQkJZnJhbWUgPSAmenR2LT5ncmFiaW5mb1t2bS5mcmFtZV07Ci0JCWlmIChmcmFtZS0+c3RhdHVzID09IEZCVUZGRVJfQlVTWSkKLQkJCXJldHVybiAtRUJVU1k7Ci0KLQkJLyogc2V0dXAgdGhlIG90aGVyIHBhcmFtZXRlcnMgaWYgdGhleSBhcmUgZ2l2ZW4gKi8KLQkJd3JpdGVfbG9ja19pcnEoJnp0di0+bG9jayk7Ci0JCWZyYW1lLT53ID0gdm0ud2lkdGg7Ci0JCWZyYW1lLT5oID0gdm0uaGVpZ2h0OwotCQlmcmFtZS0+Zm9ybWF0ID0gdm0uZm9ybWF0OwotCQlmcmFtZS0+YnBwID0gcGFsZXR0ZTJmbXRbZnJhbWUtPmZvcm1hdF0uYnBwOwotCQlmcmFtZS0+YnBsID0gZnJhbWUtPncqZnJhbWUtPmJwcDsKLQkJZnJhbWUtPnN0YXR1cyA9IEZCVUZGRVJfQlVTWTsKLQkJZnJhbWUtPm5leHQgPSAwOwotCQl7IC8qIGFkZCB0byB0YWlsIG9mIHF1ZXVlICovCi0JCSAgc3RydWN0IHZpZGluZm8qIG9sZGZyYW1lID0genR2LT53b3JrcXVldWU7Ci0JCSAgaWYgKCFvbGRmcmFtZSkgenR2LT53b3JrcXVldWUgPSBmcmFtZTsKLQkJICBlbHNlIHsKLQkJICAgIHdoaWxlIChvbGRmcmFtZS0+bmV4dCkgb2xkZnJhbWUgPSBvbGRmcmFtZS0+bmV4dDsKLQkJICAgIG9sZGZyYW1lLT5uZXh0ID0gZnJhbWU7Ci0JCSAgfQotCQl9Ci0JCXdyaXRlX3VubG9ja19pcnEoJnp0di0+bG9jayk7Ci0JCXpvcmFuX2NhcCh6dHYsIDEpOwotCQlicmVhazsKLQkgfQotCi0JIGNhc2UgVklESU9DR01CVUY6Ci0JIHsKLQkJc3RydWN0IHZpZGVvX21idWYgbWI7Ci0JCWludCBpOwotCQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiVklESU9DR01CVUZcbiIsQ0FSRCkpOwotCQltYi5zaXplID0gWk9SQU5fTUFYX0ZCVUZTSVpFOwotCQltYi5mcmFtZXMgPSBaT1JBTl9NQVhfRkJVRkZFUlM7Ci0JCWZvciAoaT0wOyBpPFpPUkFOX01BWF9GQlVGRkVSUzsgaSsrKQotCQkJbWIub2Zmc2V0c1tpXSA9IGkqWk9SQU5fTUFYX0ZCVUZGRVI7Ci0JCWlmKGNvcHlfdG9fdXNlcihhcmcsICZtYixzaXplb2YobWIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKLQkgfQotCi0JIGNhc2UgVklESU9DR1VOSVQ6Ci0JIHsKLQkJc3RydWN0IHZpZGVvX3VuaXQgdnU7Ci0JCURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJWSURJT0NHVU5JVFxuIixDQVJEKSk7Ci0JCXZ1LnZpZGVvID0genR2LT52aWRlb19kZXYubWlub3I7Ci0JCXZ1LnZiaSA9IHp0di0+dmJpX2Rldi5taW5vcjsKLQkJdnUucmFkaW8gPSBWSURFT19OT19VTklUOwotCQl2dS5hdWRpbyA9IFZJREVPX05PX1VOSVQ7Ci0JCXZ1LnRlbGV0ZXh0ID0gVklERU9fTk9fVU5JVDsKLQkJaWYoY29weV90b191c2VyKGFyZywgJnZ1LHNpemVvZih2dSkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJyZWFrOwotCSB9Ci0KLQkgY2FzZSBWSURJT0NHRlJFUToKLQkgewotCQl1bnNpZ25lZCBsb25nIHYgPSB6dHYtPnR1bmVyX2ZyZXE7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCZ2LHNpemVvZih2KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIlZJRElPQ0dGUkVRXG4iLENBUkQpKTsKLQkJYnJlYWs7Ci0JIH0KLQkgY2FzZSBWSURJT0NTRlJFUToKLQkgewotCQl1bnNpZ25lZCBsb25nIHY7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdiwgYXJnLCBzaXplb2YodikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJWSURJT0NTRlJFUVxuIixDQVJEKSk7Ci0KLQkJaWYgKHp0di0+aGF2ZV90dW5lcikgewotCQkJaW50IGZpeG1lID0gdjsKLQkJCWlmIChpMmNfY29udHJvbF9kZXZpY2UoJih6dHYtPmkyYyksIEkyQ19EUklWRVJJRF9UVU5FUiwgVFVORVJfU0VUX1RWRlJFUSwgJmZpeG1lKSA8IDApCi0JCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KLQkJenR2LT50dW5lcl9mcmVxID0gdjsKLQkJYnJlYWs7Ci0JIH0KLQotCSAvKiBXaHkgaXNuJ3QgdGhpcyBpbiB0aGUgQVBJPwotCSAgKiBBbmQgd2h5IGRvZXNuJ3QgaXQgdGFrZSBhIGJ1ZmZlciBudW1iZXI/Ci0JIGNhc2UgQlRUVl9GSUVMRE5SOgotCSB7Ci0JCXVuc2lnbmVkIGxvbmcgdiA9IHp0di0+bGFzdGZpZWxkbnI7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCZ2LHNpemVvZih2KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIkJUVFZfRklFTEROUlxuIixDQVJEKSk7Ci0JCWJyZWFrOwotCSB9Ci0JICovCi0KLQkgZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYwotaW50IHpvcmFuX21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2aWRlb19kZXZpY2UqIGRldiwgY29uc3QgY2hhciogYWRyLCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0Jc3RydWN0IHpvcmFuKiB6dHYgPSAoc3RydWN0IHpvcmFuKilkZXY7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKWFkcjsKLQl1bnNpZ25lZCBsb25nIHBvczsKLQotCURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJ6b3Jhbl9tbWFwKDB4JXAsJWxkKVxuIixDQVJELGFkcixzaXplKSk7Ci0KLQkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYgKHNpemUgPiBaT1JBTl9NQVhfRkJVRlNJWkUgfHwgIXp0di0+ZmJ1ZmZlcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBzdGFydCBtYXBwaW5nIHRoZSB3aG9sZSBzaGFiYW5nIHRvIHVzZXIgbWVtb3J5ICovCi0JcG9zID0gKHVuc2lnbmVkIGxvbmcpenR2LT5mYnVmZmVyOwotCXdoaWxlIChzaXplPjApIHsKLQkJdW5zaWduZWQgbG9uZyBwZm4gPSB2aXJ0X3RvX3BoeXMoKHZvaWQqKXBvcykgPj4gUEFHRV9TSElGVDsKLQkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwZm4sIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCXN0YXJ0ICs9IFBBR0VfU0laRTsKLQkJcG9zICs9IFBBR0VfU0laRTsKLQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB6cjM2MTIwX3RlbXBsYXRlPQotewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiVU5TRVQiLAotCS50eXBlCQk9IFZJRF9UWVBFX1RVTkVSfFZJRF9UWVBFX0NBUFRVUkV8VklEX1RZUEVfT1ZFUkxBWSwKLQkuaGFyZHdhcmUJPSBWSURfSEFSRFdBUkVfWlIzNjEyMCwKLQkub3BlbgkJPSB6b3Jhbl9vcGVuLAotCS5jbG9zZQkJPSB6b3Jhbl9jbG9zZSwKLQkucmVhZAkJPSB6b3Jhbl9yZWFkLAotCS53cml0ZQkJPSB6b3Jhbl93cml0ZSwKLQkucG9sbAkJPSB6b3Jhbl9wb2xsLAotCS5pb2N0bAkJPSB6b3Jhbl9pb2N0bCwKLQkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAotCS5tbWFwCQk9IHpvcmFuX21tYXAsCi0JLm1pbm9yCQk9IC0xLAotfTsKLQotc3RhdGljCi1pbnQgdmJpX29wZW4oc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IHpvcmFuICp6dHYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHZpZGluZm8qIGl0ZW07Ci0KLQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAidmJpX29wZW4oZGV2LCVkKVxuIixDQVJELGZsYWdzKSk7Ci0KLQkvKgotCSAqIER1cmluZyBWQkkgZGV2aWNlIG9wZW4sIHdlIGNvbnRpbmlvdXNseSBncmFiIFZCSS1saWtlCi0JICogZGF0YSBpbiB0aGUgdmJpIGJ1ZmZlciB3aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLQkgKiBPbmx5IHdoZW4gdGhlcmUgaXMgYW4gZXhwbGljaXQgcmVxdWVzdCBmb3IgVkJJIGRhdGEKLQkgKiAocmVhZCBjYWxsKSB3ZSAvZm9yY2UvIGEgcmVhZC4KLQkgKi8KLQotCS8qIGFsbG9jYXRlIGJ1ZmZlcnMgKi8KLQlmb3IgKGl0ZW09enR2LT5yZWFkaW5mbzsgaXRlbSE9enR2LT5yZWFkaW5mbytaT1JBTl9WQklfQlVGRkVSUzsgaXRlbSsrKQotCXsKLQkJaXRlbS0+c3RhdHVzID0gRkJVRkZFUl9GUkVFOwotCi0JCS8qIGFsbG9jICovCi0JCWlmICghaXRlbS0+bWVtYWRyKSB7Ci0JCQlpdGVtLT5tZW1hZHIgPSBibWFsbG9jKFpPUkFOX1ZCSV9CVUZTSVpFKTsKLQkJCWlmICghaXRlbS0+bWVtYWRyKSB7Ci0JCQkJLyogY291bGQgbm90IGdldCBhIGJ1ZmZlciwgYmFpbCBvdXQgKi8KLQkJCQl3aGlsZSAoaXRlbSAhPSB6dHYtPnJlYWRpbmZvKSB7Ci0JCQkJCWl0ZW0tLTsKLQkJCQkJYmZyZWUoaXRlbS0+bWVtYWRyLCBaT1JBTl9WQklfQlVGU0laRSk7Ci0JCQkJCWl0ZW0tPm1lbWFkciA9IDA7Ci0JCQkJCWl0ZW0tPmJ1c2FkciA9IDA7Ci0JCQkJfQotCQkJCXJldHVybiAtRU5PQlVGUzsKLQkJCX0KLQkJfQotCi0JCS8qIGRldGVybWluZSB0aGUgRE1BYWJsZSBhZGRyZXNzICovCi0JCWl0ZW0tPmJ1c2FkciA9IHZpcnRfdG9fYnVzKGl0ZW0tPm1lbWFkcik7Ci0JfQotCi0JLyogZG8gdGhlIGNvbW1vbiBwYXJ0IG9mIGFsbCBvcGVuJ3MgKi8KLQl6b3Jhbl9jb21tb25fb3Blbih6dHYsIGZsYWdzKTsKLQotCXNldF9iaXQoU1RBVEVfVkJJLCAmenR2LT5zdGF0ZSk7Ci0JLyogc3RhcnQgcmVhZC1haGVhZCAqLwotCXpvcmFuX2NhcCh6dHYsIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYwotdm9pZCB2YmlfY2xvc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KQotewotCXN0cnVjdCB6b3JhbiAqenR2ID0gZGV2LT5wcml2OwotCXN0cnVjdCB2aWRpbmZvKiBpdGVtOwotCi0JREVCVUcocHJpbnRrKENBUkRfREVCVUcgInZiaV9jbG9zZShkZXYpXG4iLENBUkQpKTsKLQotCS8qIGRyaXZlciBzcGVjaWZpYyBjbG9zdXJlICovCi0JY2xlYXJfYml0KFNUQVRFX1ZCSSwgJnp0di0+c3RhdGUpOwotCi0Jem9yYW5fY29tbW9uX2Nsb3NlKHp0dik7Ci0KLQkvKgotCSAqICAgICAgVGhpcyBpcyBzdWNreSBidXQgcmlnaHQgbm93IEkgY2FuJ3QgZmluZCBhIGdvb2Qgd2F5IHRvCi0JICogICAgICBiZSBzdXJlIGl0cyBzYWZlIHRvIGZyZWUgdGhlIGJ1ZmZlci4gV2Ugd2FpdCA1LTYgZmllbGRzCi0JICogICAgICB3aGljaCBpcyBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBiZSBzdXJlLgotCSAqLwotCW1zbGVlcCgxMDApOwkJCS8qIFdhaXQgMS8xMHRoIG9mIGEgc2Vjb25kICovCi0KLQlmb3IgKGl0ZW09enR2LT5yZWFkaW5mbzsgaXRlbSE9enR2LT5yZWFkaW5mbytaT1JBTl9WQklfQlVGRkVSUzsgaXRlbSsrKQotCXsKLQkJaWYgKGl0ZW0tPm1lbWFkcikKLQkJCWJmcmVlKGl0ZW0tPm1lbWFkciwgWk9SQU5fVkJJX0JVRlNJWkUpOwotCQlpdGVtLT5tZW1hZHIgPSAwOwotCX0KLQotfQotCi0vKgotICogVGhpcyByZWFkIGZ1bmN0aW9uIGNvdWxkIGJlIHVzZWQgcmVlbnRyYW50IGluIGEgU01QIHNpdHVhdGlvbi4KLSAqCi0gKiBUaGlzIGlzIG1hZGUgcG9zc2libGUgYnkgdGhlIHNwaW5sb2NrIHdoaWNoIGlzIGtlcHQgdGlsbCB3ZQotICogZm91bmQgYW5kIG1hcmtlZCBhIGJ1ZmZlciBmb3Igb3VyIG93biB1c2UuIFRoZSBsb2NrIG11c3QKLSAqIGJlIHJlbGVhc2VkIGFzIHNvb24gYXMgcG9zc2libGUgdG8gcHJldmVudCBsb2NrIGNvbnRlbnRpb24uCi0gKi8KLXN0YXRpYwotbG9uZyB2YmlfcmVhZChzdHJ1Y3QgdmlkZW9fZGV2aWNlKiBkZXYsIGNoYXIqIGJ1ZiwgdW5zaWduZWQgbG9uZyBjb3VudCwgaW50IG5vbmJsb2NrKQotewotCXN0cnVjdCB6b3JhbiAqenR2ID0gZGV2LT5wcml2OwotCXVuc2lnbmVkIGxvbmcgbWF4OwotCXN0cnVjdCB2aWRpbmZvKiB1bnVzZWQgPSAwOwotCXN0cnVjdCB2aWRpbmZvKiBkb25lID0gMDsKLQotCURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJ2YmlfcmVhZCgweCVwLCVsZCwlZClcbiIsQ0FSRCxidWYsY291bnQsbm9uYmxvY2spKTsKLQotCS8qIGZpbmQgb3Vyc2VsZiBhIGZyZWUgb3IgY29tcGxldGVkIGJ1ZmZlciAqLwotCWZvciAoOzspIHsKLQkJc3RydWN0IHZpZGluZm8qIGl0ZW07Ci0KLQkJd3JpdGVfbG9ja19pcnEoJnp0di0+bG9jayk7Ci0JCWZvciAoaXRlbT16dHYtPnJlYWRpbmZvOyBpdGVtIT16dHYtPnJlYWRpbmZvK1pPUkFOX1ZCSV9CVUZGRVJTOyBpdGVtKyspIHsKLQkJCWlmICghdW51c2VkICYmIGl0ZW0tPnN0YXR1cyA9PSBGQlVGRkVSX0ZSRUUpCi0JCQkJdW51c2VkID0gaXRlbTsKLQkJCWlmICghZG9uZSAmJiBpdGVtLT5zdGF0dXMgPT0gRkJVRkZFUl9ET05FKQotCQkJCWRvbmUgPSBpdGVtOwotCQl9Ci0JCWlmIChkb25lIHx8IHVudXNlZCkKLQkJCWJyZWFrOwotCi0JCS8qIG5vIG1vcmUgZnJlZSBidWZmZXJzLCB3YWl0IGZvciB0aGVtLiAqLwotCQl3cml0ZV91bmxvY2tfaXJxKCZ6dHYtPmxvY2spOwotCQlpZiAobm9uYmxvY2spCi0JCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZ6dHYtPnZiaXEpOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlyZXR1cm4gLUVJTlRSOwotCX0KLQotCS8qIERvIHdlIGhhdmUgJ3JlYWR5JyBkYXRhPyAqLwotCWlmICghZG9uZSkgewotCQkvKiBubz8gdGhhbiB0aGlzIHdpbGwgdGFrZSBhIHdoaWxlLi4uICovCi0JCWlmIChub25ibG9jaykgewotCQkJd3JpdGVfdW5sb2NrX2lycSgmenR2LT5sb2NrKTsKLQkJCXJldHVybiAtRVdPVUxEQkxPQ0s7Ci0JCX0KLQotCQkvKiBtYXJrIHRoZSB1bnVzZWQgYnVmZmVyIGFzIHdhbnRlZCAqLwotCQl1bnVzZWQtPnN0YXR1cyA9IEZCVUZGRVJfQlVTWTsKLQkJdW51c2VkLT5uZXh0ID0gMDsKLQkJeyAvKiBhZGQgdG8gdGFpbCBvZiBxdWV1ZSAqLwotCQkgIHN0cnVjdCB2aWRpbmZvKiBvbGRmcmFtZSA9IHp0di0+d29ya3F1ZXVlOwotCQkgIGlmICghb2xkZnJhbWUpIHp0di0+d29ya3F1ZXVlID0gdW51c2VkOwotCQkgIGVsc2UgewotCQkgICAgd2hpbGUgKG9sZGZyYW1lLT5uZXh0KSBvbGRmcmFtZSA9IG9sZGZyYW1lLT5uZXh0OwotCQkgICAgb2xkZnJhbWUtPm5leHQgPSB1bnVzZWQ7Ci0JCSAgfQotCQl9Ci0JCXdyaXRlX3VubG9ja19pcnEoJnp0di0+bG9jayk7Ci0KLQkJLyogdGVsbCB0aGUgc3RhdGUgbWFjaGluZSB3ZSB3YW50IGl0IGZpbGxlZCAvTk9XLyAqLwotCQl6b3Jhbl9jYXAoenR2LCAxKTsKLQotCQkvKiB3YWl0IHRpbGwgdGhpcyBidWZmZXIgZ2V0cyBncmFiYmVkICovCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh6dHYtPnZiaXEsCi0JCQkJKHVudXNlZC0+c3RhdHVzICE9IEZCVUZGRVJfQlVTWSkpOwotCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCi0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCXJldHVybiAtRUlOVFI7Ci0JCWRvbmUgPSB1bnVzZWQ7Ci0JfQotCWVsc2UKLQkJd3JpdGVfdW5sb2NrX2lycSgmenR2LT5sb2NrKTsKLQotCS8qIFllcyEgd2UgZ290IGRhdGEhICovCi0JbWF4ID0gZG9uZS0+YnBsICogLWRvbmUtPmg7Ci0JaWYgKGNvdW50ID4gbWF4KQotCQljb3VudCA9IG1heDsKLQotCS8qIGNoZWNrIGlmIHRoZSB1c2VyIGdhdmUgdXMgZW5vdWdoIHJvb20gdG8gd3JpdGUgdGhlIGRhdGEgKi8KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgY291bnQpKSB7Ci0JCWNvdW50ID0gLUVGQVVMVDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBOb3cgdHJhbnNmb3JtL3N0cmlwIHRoZSBkYXRhIGZyb20gWVVWIHRvIFktb25seQotCSAqIE5CLiBBc3N1bWUgdGhlIFkgaXMgaW4gdGhlIExTQiBvZiB0aGUgWVVWIGRhdGEuCi0JICovCi0JewotCXVuc2lnbmVkIGNoYXIqIG9wdHIgPSBidWY7Ci0JdW5zaWduZWQgY2hhciogZXB0ciA9IGJ1Zitjb3VudDsKLQotCS8qIGFyZSB3ZSBiZWVpbmcgYWNjZXNzZWQgZnJvbSBhbiBvbGQgZHJpdmVyPyAqLwotCWlmIChjb3VudCA9PSAyKjE5KjIwNDgpIHsKLQkJLyoKLQkJICogRXh0cmVtZSBIQUNLLCBvbGQgVkJJIHByb2dyYW1zIGV4cGVjdCAyMDQ4IHBvaW50cwotCQkgKiBvZiBkYXRhLCBhbmQgd2Ugb25seSBnb3QgODY0IG9yc28uIERvdWJsZSBlYWNoCi0JCSAqIGRhdGFwb2ludCBhbmQgY2xlYXIgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuCi0JCSAqIFRoaXMgd2F5IHdlIGhhdmUgYXBwZWFyIHRvIGhhdmUgYQotCQkgKiBzYW1wbGVfZnJlcXVlbmN5IG9mIDI5LjUgTWMuCi0JCSAqLwotCQlpbnQgeCx5OwotCQl1bnNpZ25lZCBjaGFyKiBpcHRyID0gZG9uZS0+bWVtYWRyKzE7Ci0JCWZvciAoeT1kb25lLT5oOyBvcHRyPGVwdHIgJiYgeTwwOyB5KyspCi0JCXsKLQkJCS8qIGNvcHkgdG8gZG91YmxlZCBkYXRhIHRvIHVzZXJsYW5kICovCi0JCQlmb3IgKHg9MDsgb3B0cisxPGVwdHIgJiYgeDwtZG9uZS0+dzsgeCsrKQotCQkJewotCQkJCXVuc2lnbmVkIGNoYXIgYSA9IGlwdHJbeCoyXTsKLQkJCQlfX3B1dF91c2VyKGEsIG9wdHIrKyk7Ci0JCQkJX19wdXRfdXNlcihhLCBvcHRyKyspOwotCQkJfQotCQkJLyogYW5kIGNsZWFyIHRoZSByZXN0IG9mIHRoZSBsaW5lICovCi0JCQlmb3IgKHgqPTI7IG9wdHI8ZXB0ciAmJiB4PGRvbmUtPmJwbDsgeCsrKQotCQkJCV9fcHV0X3VzZXIoMCwgb3B0cisrKTsKLQkJCS8qIG5leHQgbGluZSAqLwotCQkJaXB0ciArPSBkb25lLT5icGw7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCS8qCi0JCSAqIE90aGVyIChwcm9iYWJseSBuZXdlcikgcHJvZ3JhbXMgYXNrZWQKLQkJICogdXMgd2hhdCBnZW9tZXRyeSB3ZSBhcmUgdXNpbmcsIGFuZCBhcmUKLQkJICogcmVhZGluZyB0aGUgY29ycmVjdCBzaXplLgotCQkgKi8KLQkJaW50IHgseTsKLQkJdW5zaWduZWQgY2hhciogaXB0ciA9IGRvbmUtPm1lbWFkcisxOwotCQlmb3IgKHk9ZG9uZS0+aDsgb3B0cjxlcHRyICYmIHk8MDsgeSsrKQotCQl7Ci0JCQkvKiBjb3B5IHRvIGRvdWJsZWQgZGF0YSB0byB1c2VybGFuZCAqLwotCQkJZm9yICh4PTA7IG9wdHI8ZXB0ciAmJiB4PC1kb25lLT53OyB4KyspCi0JCQkJX19wdXRfdXNlcihpcHRyW3gqMl0sIG9wdHIrKyk7Ci0JCQkvKiBhbmQgY2xlYXIgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKi8KLQkJCWZvciAoO29wdHI8ZXB0ciAmJiB4PGRvbmUtPmJwbDsgeCsrKQotCQkJCV9fcHV0X3VzZXIoMCwgb3B0cisrKTsKLQkJCS8qIG5leHQgbGluZSAqLwotCQkJaXB0ciArPSBkb25lLT5icGw7Ci0JCX0KLQl9Ci0KLQkvKiBBUEkgY29tcGxpYW5jZToKLQkgKiBwbGFjZSB0aGUgZnJhbWVudW1iZXIgKGhhbGYgZmllbGRucikgaW4gdGhlIGxhc3QgbG9uZwotCSAqLwotCV9fcHV0X3VzZXIoZG9uZS0+ZmllbGRuci8yLCAoKHVsb25nKillcHRyKVstMV0pOwotCX0KLQotCS8qIGtlZXAgdGhlIGVuZ2luZSBydW5uaW5nICovCi0JZG9uZS0+c3RhdHVzID0gRkJVRkZFUl9GUkVFOwotCXpvcmFuX2NhcCh6dHYsIDEpOwotCi0JLyogdGVsbCBsaXN0ZW5lcnMgdGhpcyBidWZmZXIganVzdCBiZWNhbWUgZnJlZSAqLwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenR2LT52YmlxKTsKLQotCS8qIGdvb2RieWUgKi8KLW91dDoKLQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAidmJpX3JlYWQoKSByZXR1cm5zICVsdVxuIixDQVJELGNvdW50KSk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMKLXVuc2lnbmVkIGludCB2YmlfcG9sbChzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQotewotCXN0cnVjdCB6b3JhbiAqenR2ID0gZGV2LT5wcml2OwotCXN0cnVjdCB2aWRpbmZvKiBpdGVtOwotCXVuc2lnbmVkIGludCBtYXNrID0gMDsKLQotCXBvbGxfd2FpdChmaWxlLCAmenR2LT52YmlxLCB3YWl0KTsKLQotCWZvciAoaXRlbT16dHYtPnJlYWRpbmZvOyBpdGVtIT16dHYtPnJlYWRpbmZvK1pPUkFOX1ZCSV9CVUZGRVJTOyBpdGVtKyspCi0JCWlmIChpdGVtLT5zdGF0dXMgPT0gRkJVRkZFUl9ET05FKQotCQl7Ci0JCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAidmJpX3BvbGwoKT0leFxuIixDQVJELG1hc2spKTsKLQotCXJldHVybiBtYXNrOwotfQotCi1zdGF0aWMKLWludCB2YmlfaW9jdGwoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHpvcmFuKiB6dHYgPSBkZXYtPnByaXY7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCSBjYXNlIFZJRElPQ0dWQklGTVQ6Ci0JIHsKLQkJc3RydWN0IHZiaV9mb3JtYXQgZjsKLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgIlZJRElPQ0dWQklJTkZPXG4iLENBUkQpKTsKLQkJZi5zYW1wbGluZ19yYXRlID0gMTQ3NTAwMDBVTDsKLQkJZi5zYW1wbGVzX3Blcl9saW5lID0gLXp0di0+cmVhZGluZm9bMF0udzsKLQkJZi5zYW1wbGVfZm9ybWF0ID0gVklERU9fUEFMRVRURV9SQVc7Ci0JCWYuc3RhcnRbMF0gPSBmLnN0YXJ0WzFdID0genR2LT5yZWFkaW5mb1swXS55OwotCQlmLnN0YXJ0WzFdICs9IDMxMjsKLQkJZi5jb3VudFswXSA9IGYuY291bnRbMV0gPSAtenR2LT5yZWFkaW5mb1swXS5oOwotCQlmLmZsYWdzID0gVkJJX0lOVEVSTEFDRUQ7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCZmLHNpemVvZihmKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JIH0KLQkgY2FzZSBWSURJT0NTVkJJRk1UOgotCSB7Ci0JCXN0cnVjdCB2YmlfZm9ybWF0IGY7Ci0JCWludCBpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmYsIGFyZyxzaXplb2YoZikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCURFQlVHKHByaW50ayhDQVJEX0RFQlVHICJWSURJT0NTVkJJSU5GTyglZCwlZCwlZCwlZCwlZCwlZCwlZCwleClcbiIsQ0FSRCxmLnNhbXBsaW5nX3JhdGUsZi5zYW1wbGVzX3Blcl9saW5lLGYuc2FtcGxlX2Zvcm1hdCxmLnN0YXJ0WzBdLGYuc3RhcnRbMV0sZi5jb3VudFswXSxmLmNvdW50WzFdLGYuZmxhZ3MpKTsKLQotCQkvKiBsb3RzIG9mIHBhcmFtZXRlcnMgYXJlIGZpeGVkLi4uIChQQUwpICovCi0JCWlmIChmLnNhbXBsaW5nX3JhdGUgIT0gMTQ3NTAwMDBVTCB8fAotCQkgICAgZi5zYW1wbGVzX3Blcl9saW5lID4gODY0IHx8Ci0JCSAgICBmLnNhbXBsZV9mb3JtYXQgIT0gVklERU9fUEFMRVRURV9SQVcgfHwKLQkJICAgIGYuc3RhcnRbMF0gPCAwIHx8Ci0JCSAgICBmLnN0YXJ0WzBdICE9IGYuc3RhcnRbMV0tMzEyIHx8Ci0JCSAgICBmLmNvdW50WzBdICE9IGYuY291bnRbMV0gfHwKLQkJICAgIGYuc3RhcnRbMF0rZi5jb3VudFswXSA+PSAyODggfHwKLQkJICAgIGYuZmxhZ3MgIT0gVkJJX0lOVEVSTEFDRUQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQl3cml0ZV9sb2NrX2lycSgmenR2LT5sb2NrKTsKLQkJenR2LT5yZWFkaW5mb1swXS55ID0gZi5zdGFydFswXTsKLQkJenR2LT5yZWFkaW5mb1swXS53ID0gLWYuc2FtcGxlc19wZXJfbGluZTsKLQkJenR2LT5yZWFkaW5mb1swXS5oID0gLWYuY291bnRbMF07Ci0JCXp0di0+cmVhZGluZm9bMF0uYnBsID0gZi5zYW1wbGVzX3Blcl9saW5lKnp0di0+cmVhZGluZm9bMF0uYnBwOwotCQlmb3IgKGk9MTsgaTxaT1JBTl9WQklfQlVGRkVSUzsgaSsrKQotCQkJenR2LT5yZWFkaW5mb1tpXSA9IHp0di0+cmVhZGluZm9baV07Ci0JCXdyaXRlX3VubG9ja19pcnEoJnp0di0+bG9jayk7Ci0JCWJyZWFrOwotCSB9Ci0JIGRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2YmlfdGVtcGxhdGU9Ci17Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJVTlNFVCIsCi0JLnR5cGUJCT0gVklEX1RZUEVfQ0FQVFVSRXxWSURfVFlQRV9URUxFVEVYVCwKLQkuaGFyZHdhcmUJPSBWSURfSEFSRFdBUkVfWlIzNjEyMCwKLQkub3BlbgkJPSB2Ymlfb3BlbiwKLQkuY2xvc2UJCT0gdmJpX2Nsb3NlLAotCS5yZWFkCQk9IHZiaV9yZWFkLAotCS53cml0ZQkJPSB6b3Jhbl93cml0ZSwKLQkucG9sbAkJPSB2YmlfcG9sbCwKLQkuaW9jdGwJCT0gdmJpX2lvY3RsLAotCS5taW5vcgkJPSAtMSwKLX07Ci0KLS8qCi0gKiAgICAgIFNjYW4gZm9yIGEgWm9yYW4gY2hpcCwgcmVxdWVzdCB0aGUgaXJxIGFuZCBtYXAgdGhlIGlvIG1lbW9yeQotICovCi1zdGF0aWMKLWludCBfX2luaXQgZmluZF96b3Jhbih2b2lkKQotewotCWludCByZXN1bHQ7Ci0Jc3RydWN0IHpvcmFuICp6dHY7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7Ci0JdW5zaWduZWQgY2hhciByZXZpc2lvbjsKLQlpbnQgem9yYW5fbnVtID0gMDsKLQotCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9aT1JBTixQQ0lfREVWSUNFX0lEX1pPUkFOXzM2MTIwLCBkZXYpKSkKLQl7Ci0JCS8qIE9rLCBhIFpSMzYxMjAvWlIzNjEyNSBmb3VuZCEgKi8KLQkJenR2ID0gJnpvcmFuc1t6b3Jhbl9udW1dOwotCQl6dHYtPmRldiA9IGRldjsKLQotCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkKLQkJCWNvbnRpbnVlOwotCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmcmV2aXNpb24pOwotCQlwcmludGsoS0VSTl9JTkZPICJ6b3JhbjogWm9yYW4gJXggKHJldiAlZCkgIiwKLQkJCWRldi0+ZGV2aWNlLCByZXZpc2lvbik7Ci0JCXByaW50aygiYnVzOiAlZCwgZGV2Zm46ICVkLCBpcnE6ICVkLCAiLAotCQkJZGV2LT5idXMtPm51bWJlciwgZGV2LT5kZXZmbiwgZGV2LT5pcnEpOwotCQlwcmludGsoIm1lbW9yeTogMHglMDhseC5cbiIsIHp0di0+em9yYW5fYWRyKTsKLQotCQl6dHYtPnpvcmFuX21lbSA9IGlvcmVtYXAoenR2LT56b3Jhbl9hZHIsIDB4MTAwMCk7Ci0JCURFQlVHKHByaW50ayhLRVJOX0RFQlVHICJ6b3JhbjogbWFwcGVkLW1lbW9yeSBhdCAweCVwXG4iLHp0di0+em9yYW5fbWVtKSk7Ci0KLQkJcmVzdWx0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHpvcmFuX2lycSwKLQkJCUlSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQsInpvcmFuIiwgenR2KTsKLQkJaWYgKHJlc3VsdD09LUVJTlZBTCkKLQkJewotCQkJaW91bm1hcCh6dHYtPnpvcmFuX21lbSk7Ci0JCQlwcmludGsoS0VSTl9FUlIgInpvcmFuOiBCYWQgaXJxIG51bWJlciBvciBoYW5kbGVyXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChyZXN1bHQ9PS1FQlVTWSkKLQkJCXByaW50ayhLRVJOX0VSUiAiem9yYW46IElSUSAlZCBidXN5LCBjaGFuZ2UgeW91ciBQblAgY29uZmlnIGluIEJJT1NcbiIsZGV2LT5pcnEpOwotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJaW91bm1hcCh6dHYtPnpvcmFuX21lbSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQkvKiBFbmFibGUgYnVzLW1hc3RlcmluZyAqLwotCQlwY2lfc2V0X21hc3RlcihkZXYpOwotCQkvKiBLZWVwIGEgcmVmZXJlbmNlICovCi0JCXBjaV9kZXZfZ2V0KGRldik7Ci0JCXpvcmFuX251bSsrOwotCX0KLQlpZih6b3Jhbl9udW0pCi0JCXByaW50ayhLRVJOX0lORk8gInpvcmFuOiAlZCBab3JhbiBjYXJkKHMpIGZvdW5kLlxuIix6b3Jhbl9udW0pOwotCXJldHVybiB6b3Jhbl9udW07Ci19Ci0KLXN0YXRpYwotaW50IF9faW5pdCBpbml0X3pvcmFuKGludCBjYXJkKQotewotCXN0cnVjdCB6b3JhbiAqenR2ID0gJnpvcmFuc1tjYXJkXTsKLQlpbnQJaTsKLQotCS8qIGlmIHRoZSBnaXZlbiBjYXJkdHlwZSB2YWxpZD8gKi8KLQlpZiAoY2FyZHR5cGVbY2FyZF0+PU5SVFZDQVJEUykgewotCQlwcmludGsoS0VSTl9JTkZPICJpbnZhbGlkIGNhcmR0eXBlKCVkKSBkZXRlY3RlZFxuIixjYXJkdHlwZVtjYXJkXSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiByZXNldCB0aGUgem9yYW4gKi8KLQl6cmFuZCh+Wk9SQU5fUENJX1NPRlRSRVNFVCxaT1JBTl9QQ0kpOwotCXVkZWxheSgxMCk7Ci0JenJvcihaT1JBTl9QQ0lfU09GVFJFU0VULFpPUkFOX1BDSSk7Ci0JdWRlbGF5KDEwKTsKLQotCS8qIHpvcmFuIGNoaXAgc3BlY2lmaWMgZGV0YWlscyAqLwotCXp0di0+Y2FyZCA9IHR2Y2FyZHMrY2FyZHR5cGVbY2FyZF07CS8qIHBvaW50IHRvIHRoZSBzZWxlY3RlZCBjYXJkICovCi0JenR2LT5ub3JtID0gMDsJCQkJLyogUEFMICovCi0JenR2LT50dW5lcl9mcmVxID0gMDsKLQotCS8qIHZpZGVvY2FyZCBkZXRhaWxzICovCi0JenR2LT5zd2lkdGggPSA4MDA7Ci0JenR2LT5zaGVpZ2h0ID0gNjAwOwotCXp0di0+ZGVwdGggPSAxNjsKLQotCS8qIFN0YXRlIGRldGFpbHMgKi8KLQl6dHYtPmZidWZmZXIgPSAwOwotCXp0di0+b3ZlcmluZm8ua2luZG9mID0gRkJVRkZFUl9PVkVSTEFZOwotCXp0di0+b3ZlcmluZm8uc3RhdHVzID0gRkJVRkZFUl9GUkVFOwotCXp0di0+b3ZlcmluZm8ueCA9IDA7Ci0JenR2LT5vdmVyaW5mby55ID0gMDsKLQl6dHYtPm92ZXJpbmZvLncgPSA3Njg7IC8qIDY0MCAqLwotCXp0di0+b3ZlcmluZm8uaCA9IDU3NjsgLyogNDgwICovCi0JenR2LT5vdmVyaW5mby5mb3JtYXQgPSBWSURFT19QQUxFVFRFX1JHQjU2NTsKLQl6dHYtPm92ZXJpbmZvLmJwcCA9IHBhbGV0dGUyZm10W3p0di0+b3ZlcmluZm8uZm9ybWF0XS5icHA7Ci0JenR2LT5vdmVyaW5mby5icGwgPSB6dHYtPm92ZXJpbmZvLmJwcCp6dHYtPnN3aWR0aDsKLQl6dHYtPm92ZXJpbmZvLmJ1c2FkciA9IDA7Ci0JenR2LT5vdmVyaW5mby5tZW1hZHIgPSAwOwotCXp0di0+b3ZlcmluZm8ub3ZlcmxheSA9IDA7Ci0JZm9yIChpPTA7IGk8Wk9SQU5fTUFYX0ZCVUZGRVJTOyBpKyspIHsKLQkJenR2LT5ncmFiaW5mb1tpXSA9IHp0di0+b3ZlcmluZm87Ci0JCXp0di0+Z3JhYmluZm9baV0ua2luZG9mID0gRkJVRkZFUl9HUkFCOwotCX0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ6dHYtPmdyYWJxKTsKLQotCS8qIFZCSSBkZXRhaWxzICovCi0JenR2LT5yZWFkaW5mb1swXSA9IHp0di0+b3ZlcmluZm87Ci0JenR2LT5yZWFkaW5mb1swXS5raW5kb2YgPSBGQlVGRkVSX1ZCSTsKLQl6dHYtPnJlYWRpbmZvWzBdLncgPSAtODY0OwotCXp0di0+cmVhZGluZm9bMF0uaCA9IC0zODsKLQl6dHYtPnJlYWRpbmZvWzBdLmZvcm1hdCA9IFZJREVPX1BBTEVUVEVfWVVWNDIyOwotCXp0di0+cmVhZGluZm9bMF0uYnBwID0gcGFsZXR0ZTJmbXRbenR2LT5yZWFkaW5mb1swXS5mb3JtYXRdLmJwcDsKLQl6dHYtPnJlYWRpbmZvWzBdLmJwbCA9IDEwMjQqenR2LT5yZWFkaW5mb1swXS5icHA7Ci0JZm9yIChpPTE7IGk8Wk9SQU5fVkJJX0JVRkZFUlM7IGkrKykKLQkJenR2LT5yZWFkaW5mb1tpXSA9IHp0di0+cmVhZGluZm9bMF07Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmenR2LT52YmlxKTsKLQotCS8qIG1haW50ZW5hbmNlIGRhdGEgKi8KLQl6dHYtPmhhdmVfZGVjb2RlciA9IDA7Ci0JenR2LT5oYXZlX3R1bmVyID0gMDsKLQl6dHYtPnR1bmVyX3R5cGUgPSAwOwotCXp0di0+cnVubmluZyA9IDA7Ci0JenR2LT51c2VycyA9IDA7Ci0Jcndsb2NrX2luaXQoJnp0di0+bG9jayk7Ci0JenR2LT53b3JrcXVldWUgPSAwOwotCXp0di0+ZmllbGRuciA9IDA7Ci0JenR2LT5sYXN0ZmllbGRuciA9IDA7Ci0KLQlpZiAodHJpdG9uMSkKLQkJenJhbmQoflpPUkFOX1ZEQ19UUklDT00sIFpPUkFOX1ZEQyk7Ci0KLQkvKiBleHRlcm5hbCBGTCBkZXRlcm1pbmVzIFRPUCBmcmFtZSAqLwotCXpyb3IoWk9SQU5fVkZFQ19FWFRGTCwgWk9SQU5fVkZFQyk7Ci0KLQkvKiBzZXQgSFNwb2wgKi8KLQlpZiAoenR2LT5jYXJkLT5oc3luY19wb3MpCi0JCXpyd3JpdGUoWk9SQU5fVkZFSF9IU1BPTCwgWk9SQU5fVkZFSCk7Ci0JLyogc2V0IFZTcG9sICovCi0JaWYgKHp0di0+Y2FyZC0+dnN5bmNfcG9zKQotCQl6cndyaXRlKFpPUkFOX1ZGRVZfVlNQT0wsIFpPUkFOX1ZGRVYpOwotCi0JLyogU2V0IHRoZSBwcm9wZXIgR2VuZXJhbCBQdXJwdXNlIHJlZ2lzdGVyIGJpdHMgKi8KLQkvKiBpbXBsaWNpdDogbm8gc29mdHJlc2V0LCAwIHdhaXRzdGF0ZXMgKi8KLQl6cndyaXRlKFpPUkFOX1BDSV9TT0ZUUkVTRVR8KHp0di0+Y2FyZC0+Z3BkaXI8PDApLFpPUkFOX1BDSSk7Ci0JLyogaW1wbGljaXQ6IDMgZHVyYXRpb24gYW5kIHJlY292ZXJ5IFBDSSBjbG9ja3Mgb24gZ3Vlc3QgMC0zICovCi0JenJ3cml0ZSh6dHYtPmNhcmQtPmdwdmFsPDwyNCxaT1JBTl9HVUVTVCk7Ci0KLQkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCi0JenJ3cml0ZSh+MCwgWk9SQU5fSVNSKTsKLQotCS8qCi0JICogaTJjIHRlbXBsYXRlCi0JICovCi0JenR2LT5pMmMgPSB6b3Jhbl9pMmNfYnVzX3RlbXBsYXRlOwotCXNwcmludGYoenR2LT5pMmMubmFtZSwiem9yYW4tJWQiLGNhcmQpOwotCXp0di0+aTJjLmRhdGEgPSB6dHY7Ci0KLQkvKgotCSAqIE5vdyBhZGQgdGhlIHRlbXBsYXRlIGFuZCByZWdpc3RlciB0aGUgZGV2aWNlIHVuaXQKLQkgKi8KLQl6dHYtPnZpZGVvX2RldiA9IHpyMzYxMjBfdGVtcGxhdGU7Ci0Jc3RyY3B5KHp0di0+dmlkZW9fZGV2Lm5hbWUsIHp0di0+aTJjLm5hbWUpOwotCXp0di0+dmlkZW9fZGV2LnByaXYgPSB6dHY7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmenR2LT52aWRlb19kZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA8IDApCi0JCXJldHVybiAtMTsKLQotCXp0di0+dmJpX2RldiA9IHZiaV90ZW1wbGF0ZTsKLQlzdHJjcHkoenR2LT52YmlfZGV2Lm5hbWUsIHp0di0+aTJjLm5hbWUpOwotCXp0di0+dmJpX2Rldi5wcml2ID0genR2OwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnp0di0+dmJpX2RldiwgVkZMX1RZUEVfVkJJLCB2YmlfbnIpIDwgMCkgewotCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmenR2LT52aWRlb19kZXYpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWkyY19yZWdpc3Rlcl9idXMoJnp0di0+aTJjKTsKLQotCS8qIHNldCBpbnRlcnJ1cHQgbWFzayAtIHRoZSBQSU4gZW5hYmxlIHdpbGwgYmUgc2V0IGxhdGVyICovCi0JenJ3cml0ZShaT1JBTl9JQ1JfR0lSUTB8Wk9SQU5fSUNSX0dJUlExfFpPUkFOX0lDUl9DT0RFLCBaT1JBTl9JQ1IpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluc3RhbGxlZCAlc1xuIix6dHYtPmkyYy5uYW1lLHp0di0+Y2FyZC0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYwotdm9pZCByZWxlYXNlX3pvcmFuKGludCBtYXgpCi17Ci0Jc3RydWN0IHpvcmFuICp6dHY7Ci0JaW50IGk7Ci0KLQlmb3IgKGk9MDtpPG1heDsgaSsrKQotCXsKLQkJenR2ID0gJnpvcmFuc1tpXTsKLQotCQkvKiB0dXJuIG9mZiBhbGwgY2FwdHVyaW5nLCBETUEgYW5kIElSUXMgKi8KLQkJLyogcmVzZXQgdGhlIHpvcmFuICovCi0JCXpyYW5kKH5aT1JBTl9QQ0lfU09GVFJFU0VULFpPUkFOX1BDSSk7Ci0JCXVkZWxheSgxMCk7Ci0JCXpyb3IoWk9SQU5fUENJX1NPRlRSRVNFVCxaT1JBTl9QQ0kpOwotCQl1ZGVsYXkoMTApOwotCi0JCS8qIGZpcnN0IGRpc2FibGUgaW50ZXJydXB0cyBiZWZvcmUgdW5tYXBwaW5nIHRoZSBtZW1vcnkhICovCi0JCXpyd3JpdGUoMCwgWk9SQU5fSUNSKTsKLQkJenJ3cml0ZSgweGZmZmZmZmZmVUwsWk9SQU5fSVNSKTsKLQotCQkvKiBmcmVlIGl0ICovCi0JCWZyZWVfaXJxKHp0di0+ZGV2LT5pcnEsenR2KTsKLQotCQkvKiB1bnJlZ2lzdGVyIGkyY19idXMgKi8KLQkJaTJjX3VucmVnaXN0ZXJfYnVzKCgmenR2LT5pMmMpKTsKLQotCQkvKiB1bm1hcCBhbmQgZnJlZSBtZW1vcnkgKi8KLQkJaWYgKHp0di0+em9yYW5fbWVtKQotCQkJaW91bm1hcCh6dHYtPnpvcmFuX21lbSk7Ci0KLQkJLyogRHJvcCBQQ0kgZGV2aWNlICovCi0JCXBjaV9kZXZfcHV0KHp0di0+ZGV2KTsKLQotCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmenR2LT52aWRlb19kZXYpOwotCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmenR2LT52YmlfZGV2KTsKLQl9Ci19Ci0KLXZvaWQgX19leGl0IHpyMzYxMjBfZXhpdCh2b2lkKQotewotCXJlbGVhc2Vfem9yYW4oem9yYW5fY2FyZHMpOwotfQotCi1pbnQgX19pbml0IHpyMzYxMjBfaW5pdCh2b2lkKQotewotCWludAljYXJkOwotCi0JaGFuZGxlX2NoaXBzZXQoKTsKLQl6b3Jhbl9jYXJkcyA9IGZpbmRfem9yYW4oKTsKLQlpZiAoem9yYW5fY2FyZHMgPD0gMCkKLQkJcmV0dXJuIC1FSU87Ci0KLQkvKiBpbml0aWFsaXplIFpvcmFucyAqLwotCWZvciAoY2FyZD0wOyBjYXJkPHpvcmFuX2NhcmRzOyBjYXJkKyspIHsKLQkJaWYgKGluaXRfem9yYW4oY2FyZCkgPCAwKSB7Ci0JCQkvKiBvbmx5IHJlbGVhc2UgdGhlIHpvcmFucyB3ZSBoYXZlIHJlZ2lzdGVyZWQgKi8KLQkJCXJlbGVhc2Vfem9yYW4oY2FyZCk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotbW9kdWxlX2luaXQoenIzNjEyMF9pbml0KTsKLW1vZHVsZV9leGl0KHpyMzYxMjBfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzFlNDg1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjc5ICswLDAgQEAKLS8qCi0gICAgenIzNjEyMC5oIC0gWm9yYW4gMzYxMjAvMzYxMjUgYmFzZWQgZnJhbWVncmFiYmVycwotCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgUGF1bGluZSBNaWRkZWxpbmsgKG1pZGRlbGluQHBvbHl3YXJlLm5sKQotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotCi0jaWZuZGVmIF9aUjM2MTIwX0gKLSNkZWZpbmUgX1pSMzYxMjBfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pMmMtb2xkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0vKgotICogRGVidWcgbWFjcm8ncywgcGxhY2UgYW4geCBiZWhpbmQgdGhlICkgZm9yIGFjdHVhbCBkZWJ1Zy1jb21waWxhdGlvbgotICogRS5nLiAjZGVmaW5lIERFQlVHKHguLi4pCXgKLSAqLwotI2RlZmluZSBERUJVRyh4Li4uKQkJCS8qIERlYnVnIGRyaXZlciAqLwotI2RlZmluZSBJREVCVUcoeC4uLikJCQkvKiBEZWJ1ZyBpbnRlcnJ1cHQgaGFuZGxlciAqLwotI2RlZmluZSBQREVCVUcJCTAJCS8qIERlYnVnIFBDSSB3cml0ZXMgKi8KLQotLyogZGVmaW5lZCBpbiB6cjM2MTIwX2kyYyAqLwotZXh0ZXJuIHN0cnVjdCBpMmNfYnVzIHpvcmFuX2kyY19idXNfdGVtcGxhdGU7Ci0KLSNkZWZpbmUJWk9SQU5fTUFYX0ZCVUZGRVJTCTIKLSNkZWZpbmUJWk9SQU5fTUFYX0ZCVUZGRVIJKDc2OCo1NzYqMikKLSNkZWZpbmUJWk9SQU5fTUFYX0ZCVUZTSVpFCShaT1JBTl9NQVhfRkJVRkZFUlMqWk9SQU5fTUFYX0ZCVUZGRVIpCi0KLSNkZWZpbmUJWk9SQU5fVkJJX0JVRkZFUlMJMgotI2RlZmluZQlaT1JBTl9WQklfQlVGU0laRQkoMjIqMTAyNCoyKQotCi1zdHJ1Y3QgdHZjYXJkIHsKLQljaGFyKgluYW1lOwkJLyogbmFtZSBvZiB0aGUgY2FyZHR5cGUgKi8KLQlpbnQJdmlkZW9faW5wdXRzOwkvKiBudW1iZXIgb2YgY2hhbm5lbHMgZGVmaW5lZCBpbiB2aWRlb19tdXggKi8KLQlpbnQJYXVkaW9faW5wdXRzOwkvKiBudW1iZXIgb2YgY2hhbm5lbHMgZGVmaW5lZCBpbiBhdWRpb19tdXggKi8KLQlfX3UzMglzd2FwaTJjOjEsCS8qIG5lZWQgdG8gc3dhcCBpMmMgd2lyZXMgU0RBL1NDTD8gKi8KLQkJdXNlZ2lycTE6MSwJLyogVlNZTkMgYXQgR0lSUTEgaW5zdGVhZCBvZiBHSVJRMD8gKi8KLQkJdnN5bmNfcG9zOjEsCS8qIHBvc2l0aXZlIFZTWU5DIHNpZ25hbD8gKi8KLQkJaHN5bmNfcG9zOjEsCS8qIHBvc2l0aXZlIEhTWU5DIHNpZ25hbD8gKi8KLQkJZ3BkaXI6OCwJLyogR2VuZXJhbCBQdXJwb3NlIERpcmVjdGlvbiByZWdpc3RlciAqLwotCQlncHZhbDo4OwkvKiBHZW5lcmFsIFB1cnBvc2UgVmFsdWUgcmVnaXN0ZXIgKi8KLQlpbnQJdmlkZW9fbXV4WzZdOwkvKiBtYXBwaW5nIGNoYW5uZWwgbnVtYmVyIHRvIHBoeXNpY2FsIGlucHV0ICovCi0jZGVmaW5lCQlJU19UVU5FUgkweDgwCi0jZGVmaW5lCQlJU19TVkhTCQkweDQwCi0jZGVmaW5lCQlDSEFOTkVMX01BU0sJMHgzRgotCWludAlhdWRpb19tdXhbNl07CS8qIG1hcHBpbmcgY2hhbm5lbCBudW1iZXIgdG8gcGh5c2ljYWwgaW5wdXQgKi8KLX07Ci0jZGVmaW5lCVRVTkVSKHgpCSgoeCl8SVNfVFVORVIpCi0jZGVmaW5lCVNWSFMoeCkJCSgoeCl8SVNfU1ZIUykKLQotc3RydWN0IHZpZGluZm8gewotCXN0cnVjdAl2aWRpbmZvKiBuZXh0OwkvKiBuZXh0IGFjdGl2ZSBidWZmZXIJCQkqLwotCXVpbnQJa2luZG9mOwotI2RlZmluZQlGQlVGRkVSX09WRVJMQVkJCTAKLSNkZWZpbmUJRkJVRkZFUl9HUkFCCQkxCi0jZGVmaW5lCUZCVUZGRVJfVkJJCQkyCi0JdWludAlzdGF0dXM7Ci0jZGVmaW5lIEZCVUZGRVJfRlJFRQkJMAotI2RlZmluZSBGQlVGRkVSX0JVU1kJCTEKLSNkZWZpbmUgRkJVRkZFUl9ET05FCQkyCi0JdWxvbmcJZmllbGRucjsJLyogIyBvZiBmaWVsZCwgbm90IGZyYW1lciEJCSovCi0JdWludAl4LHk7Ci0JaW50CXcsaDsJCS8qIHcsaCBjYW4gYmUgbmVnYXRpdmUhCQkJKi8KLQl1aW50CWZvcm1hdDsJCS8qIGluZGV4IGluIHBhbGV0dGUyZm10W10JCSovCi0JdWludAlicHA7CQkvKiBsb29rdXAgZnJvbSBwYWxldHRlMmZtdFtdCQkqLwotCXVpbnQJYnBsOwkJLyogY2FsYzogd2lkdGggKiBicHAJCQkqLwotCXVsb25nCWJ1c2FkcjsJCS8qIGJ1cyBhZGRyIGZvciBETUEgZW5naW5lCQkqLwotCWNoYXIqCW1lbWFkcjsJCS8qIGtlcm5lbCBhZGRyIGZvciBtYWtpbmcgY29waWVzCSovCi0JdWxvbmcqCW92ZXJsYXk7CS8qIGtlcm5lbCBhZGRyIG9mIG92ZXJsYXkgbWFzawkJKi8KLX07Ci0KLXN0cnVjdCB6b3JhbgotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgdmlkZW9fZGV2OwotI2RlZmluZSBDQVJEX0RFQlVHCUtFUk5fREVCVUcgIiVzKCVsdSk6ICIKLSNkZWZpbmUgQ0FSRF9JTkZPCUtFUk5fSU5GTyAiJXMoJWx1KTogIgotI2RlZmluZSBDQVJEX0VSUglLRVJOX0VSUiAiJXMoJWx1KTogIgotI2RlZmluZSBDQVJECQl6dHYtPnZpZGVvX2Rldi5uYW1lLHp0di0+ZmllbGRucgotCi0JLyogem9yYW4gY2hpcCBzcGVjaWZpYyBkZXRhaWxzICovCi0Jc3RydWN0IGkyY19idXMJaTJjOwkJLyogaTJjIHJlZ2lzdHJhdGlvbiBkYXRhCSovCi0Jc3RydWN0IHBjaV9kZXYqCWRldjsJCS8qIHB0ciB0byBQQ0kgZGV2aWNlCQkqLwotCXVsb25nCQl6b3Jhbl9hZHI7CS8qIGJ1cyBhZGRyZXNzIG9mIElPIG1lbW9yeQkqLwotCWNoYXIqCQl6b3Jhbl9tZW07CS8qIGtlcm5lbCBhZGRyZXNzIG9mIElPIG1lbW9yeQkqLwotCXN0cnVjdCB0dmNhcmQqCWNhcmQ7CQkvKiB0aGUgY2FyZHR5cGUJCQkqLwotCXVpbnQJCW5vcm07CQkvKiAwPVBBTCwgMT1OVFNDLCAyPVNFQ0FNCSovCi0JdWludAkJdHVuZXJfZnJlcTsJLyogQ3VycmVudCBmcmVxIGluIGtIegkJKi8KLQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0dXJlOwkvKiBDdXJyZW50IHBpY3R1cmUgcGFyYW1zCSovCi0KLQkvKiB2aWRlb2NhcmQgZGV0YWlscyAqLwotCXVpbnQJCXN3aWR0aDsJCS8qIHNjcmVlbiB3aWR0aAkJCSovCi0JdWludAkJc2hlaWdodDsJLyogc2NyZWVuIGhlaWdodAkJKi8KLQl1aW50CQlkZXB0aDsJCS8qIGRlcHRoIGluIGJpdHMJCSovCi0KLQkvKiBTdGF0ZSBkZXRhaWxzICovCi0JY2hhcioJCWZidWZmZXI7CS8qIGZyYW1lYnVmZmVycyBmb3IgbW1hcAkqLwotCXN0cnVjdCB2aWRpbmZvCW92ZXJpbmZvOwkvKiBvdmVybGF5IGRhdGEJCQkqLwotCXN0cnVjdCB2aWRpbmZvCWdyYWJpbmZvW1pPUkFOX01BWF9GQlVGRkVSU107CS8qIGdyYWJiaW5nIGRhdGEqLwotCXdhaXRfcXVldWVfaGVhZF90IGdyYWJxOwkvKiBncmFiYmVycyBxdWV1ZQkJKi8KLQotCS8qIFZCSSBkZXRhaWxzICovCi0Jc3RydWN0IHZpZGVvX2RldmljZSB2YmlfZGV2OwotCXN0cnVjdCB2aWRpbmZvCXJlYWRpbmZvWzJdOwkvKiBWQkkgZGF0YSAtIGZsaXAgYnVmZmVycwkqLwotCXdhaXRfcXVldWVfaGVhZF90IHZiaXE7CQkvKiB2YmkgcXVldWUJCQkqLwotCi0JLyogbWFpbnRlbmFuY2UgZGF0YSAqLwotCWludAkJaGF2ZV9kZWNvZGVyOwkvKiBkaWQgd2UgZGV0ZWN0IGEgbXV4PwkJKi8KLQlpbnQJCWhhdmVfdHVuZXI7CS8qIGRpZCB3ZSBkZXRlY3QgYSB0dW5lcj8JKi8KLQlpbnQJCXVzZXJzOwkJLyogaG93bWFueSB2aWRlby92Ymkgb3Blbj8JKi8KLQlpbnQJCXR1bmVyX3R5cGU7CS8qIHR1bmVyIHR5cGUsIHdoZW4gZm91bmQJKi8KLQlpbnQJCXJ1bm5pbmc7CS8qIGFyZSB3ZSByb2xsaW5nPwkJKi8KLQlyd2xvY2tfdAlsb2NrOwotCWxvbmcJCXN0YXRlOwkJLyogd2hhdCBpcyByZXF1ZXN0ZWQgb2YgdXM/CSovCi0jZGVmaW5lIFNUQVRFX09WRVJMQVkJMAotI2RlZmluZSBTVEFURV9WQkkJMQotCXN0cnVjdCB2aWRpbmZvKgl3b3JrcXVldWU7CS8qIGJ1ZmZlcnMgdG8gZ3JhYiwgaGVhZCBpcyBhY3RpdmUgKi8KLQl1bG9uZwkJZmllbGRucjsJLyogI2ZpZWxkLCB0aWNrZWQgZXZlcnkgVlNZTkMJKi8KLQl1bG9uZwkJbGFzdGZpZWxkbnI7CS8qICNmaWVsZCwgdGlja2VkIGV2ZXJ5IEdSQUIJKi8KLQotCWludAkJdmlkSW50ZXJsYWNlOwkvKiBjYWxjdWxhdGVkICovCi0JaW50CQl2aWRYc2hpZnQ7CS8qIGNhbGN1bGF0ZWQgKi8KLQl1aW50CQl2aWRXaWR0aDsJLyogY2FsY3VsYXRlZCAqLwotCXVpbnQJCXZpZEhlaWdodDsJLyogY2FsY3VsYXRlZCAqLwotfTsKLQotI2RlZmluZSB6cndyaXRlKGRhdCxhZHIpICAgIHdyaXRlbCgoZGF0KSwoY2hhciAqKSAoenR2LT56b3Jhbl9tZW0rKGFkcikpKQotI2RlZmluZSB6cnJlYWQoYWRyKSAgICAgICAgIHJlYWRsKHp0di0+em9yYW5fbWVtKyhhZHIpKQotCi0jaWYgUERFQlVHID09IDAKLSNkZWZpbmUgenJhbmQoZGF0LGFkcikgICAgICB6cndyaXRlKChkYXQpICYgenJyZWFkKGFkciksIGFkcikKLSNkZWZpbmUgenJvcihkYXQsYWRyKSAgICAgICB6cndyaXRlKChkYXQpIHwgenJyZWFkKGFkciksIGFkcikKLSNkZWZpbmUgenJhb3IoZGF0LG1hc2ssYWRyKSB6cndyaXRlKCAoKGRhdCkmfihtYXNrKSkgfCAoKG1hc2spJnpycmVhZChhZHIpKSwgYWRyKQotI2Vsc2UKLSNkZWZpbmUgenJhbmQoZGF0LCBhZHIpIFwKLWRvIHsgXAotCXVsb25nIGRhdGEgPSAoZGF0KSAmIHpycmVhZCgoYWRyKSk7IFwKLQl6cndyaXRlKGRhdGEsIChhZHIpKTsgXAotCWlmICgwICE9ICh+KGRhdCkgJiB6cnJlYWQoKGFkcikpKSkgXAotCQlwcmludGsoS0VSTl9ERUJVRyAiem9yYW46IHpyYW5kIGF0ICVkKCVkKSBkZXRlY3RlZCBzZXQgYml0cygleClcbiIsIF9fTElORV9fLCAoYWRyKSwgKGRhdCkpOyBcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUgenJvcihkYXQsIGFkcikgXAotZG8geyBcCi0JdWxvbmcgZGF0YSA9IChkYXQpIHwgenJyZWFkKChhZHIpKTsgXAotCXpyd3JpdGUoZGF0YSwgKGFkcikpOyBcCi0JaWYgKChkYXQpICE9ICgoZGF0KSAmIHpycmVhZChhZHIpKSkgXAotCQlwcmludGsoS0VSTl9ERUJVRyAiem9yYW46IHpyb3IgYXQgJWQoJWQpIGRldGVjdGVkIHVuc2V0IGJpdHMoJXgpXG4iLCBfX0xJTkVfXywgKGFkciksIChkYXQpKTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIHpyYW9yKGRhdCwgbWFzaywgYWRyKSBcCi1kbyB7IFwKLQl1bG9uZyBkYXRhOyBcCi0JaWYgKChkYXQpICYgKG1hc2spKSBcCi0JCXByaW50ayhLRVJOX0RFQlVHICJ6b3JhbjogenJhb3IgYXQgJWQoJWQpIGRldGVjdGVkIGJpdHMoJXg6JXgpXG4iLCBfX0xJTkVfXywgKGFkciksIChkYXQpLCAobWFzaykpOyBcCi0JZGF0YSA9ICgoZGF0KSZ+KG1hc2spKSB8ICgobWFzaykgJiB6cnJlYWQoKGFkcikpKTsgXAotCXpyd3JpdGUoZGF0YSwoYWRyKSk7IFwKLQlpZiAoIChkYXQpICE9ICh+KG1hc2spICYgenJyZWFkKChhZHIpKSkgKSBcCi0JCXByaW50ayhLRVJOX0RFQlVHICJ6b3JhbjogenJhb3IgYXQgJWQoJWQpIGNvdWxkIG5vdCBzZXQgYWxsIGJpdHMoJXg6JXgpXG4iLCBfX0xJTkVfXywgKGFkciksIChkYXQpLCAobWFzaykpOyBcCi19IHdoaWxlKDApCi0jZW5kaWYKLQotI2VuZGlmCi0KLS8qIHpvcmFuIFBDSSBhZGRyZXNzIHNwYWNlICovCi0jZGVmaW5lIFpPUkFOX1ZGRUgJCTB4MDAwCS8qIFZpZGVvIEZyb250IEVuZCBIb3Jpem9udGFsIENvbmYuICovCi0jZGVmaW5lCVpPUkFOX1ZGRUhfSFNQT0wJKDE8PDMwKQotI2RlZmluZQlaT1JBTl9WRkVIX0hTVEFSVAkoMHgzRkY8PDEwKQotI2RlZmluZQlaT1JBTl9WRkVIX0hFTkQJCSgweDNGRjw8MCkKLQotI2RlZmluZSBaT1JBTl9WRkVWCQkweDAwNAkvKiBWaWRlbyBGcm9udCBFbmQgVmVydGljYWwgQ29uZi4gKi8KLSNkZWZpbmUJWk9SQU5fVkZFVl9WU1BPTAkoMTw8MzApCi0jZGVmaW5lCVpPUkFOX1ZGRVZfVlNUQVJUCSgweDNGRjw8MTApCi0jZGVmaW5lCVpPUkFOX1ZGRVZfVkVORAkJKDB4M0ZGPDwwKQotCi0jZGVmaW5lCVpPUkFOX1ZGRUMJCTB4MDA4CS8qIFZpZGVvIEZyb250IEVuZCBTY2FsZXIgYW5kIFBpeGVsICovCi0jZGVmaW5lIFpPUkFOX1ZGRUNfRVhURkwJKDE8PDI2KQotI2RlZmluZQlaT1JBTl9WRkVDX1RPUEZJRUxECSgxPDwyNSkKLSNkZWZpbmUJWk9SQU5fVkZFQ19WQ0xLUE9MCSgxPDwyNCkKLSNkZWZpbmUJWk9SQU5fVkZFQ19IRklMVEVSCSg3PDwyMSkKLSNkZWZpbmUJWk9SQU5fVkZFQ19IRklMVEVSXzEJKDA8PDIxKQkvKiBubyBsdW1pLCAgICAzLXRhcCBjaHJvbW8gKi8KLSNkZWZpbmUJWk9SQU5fVkZFQ19IRklMVEVSXzIJKDE8PDIxKQkvKiAzLXRhcCBsdW1pLCAzLXRhcCBjaHJvbW8gKi8KLSNkZWZpbmUJWk9SQU5fVkZFQ19IRklMVEVSXzMJKDI8PDIxKQkvKiA0LXRhcCBsdW1pLCA0LXRhcCBjaHJvbW8gKi8KLSNkZWZpbmUJWk9SQU5fVkZFQ19IRklMVEVSXzQJKDM8PDIxKQkvKiA1LXRhcCBsdW1pLCA0LXRhcCBjaHJvbW8gKi8KLSNkZWZpbmUJWk9SQU5fVkZFQ19IRklMVEVSXzUJKDQ8PDIxKQkvKiA0LXRhcCBsdW1pLCA0LXRhcCBjaHJvbW8gKi8KLSNkZWZpbmUJWk9SQU5fVkZFQ19EVVBGTEQJKDE8PDIwKQotI2RlZmluZQlaT1JBTl9WRkVDX0hPUkRDTQkoNjM8PDE0KQotI2RlZmluZQlaT1JBTl9WRkVDX1ZFUkRDTQkoNjM8PDgpCi0jZGVmaW5lCVpPUkFOX1ZGRUNfRElTUE1PRAkoMTw8NikKLSNkZWZpbmUJWk9SQU5fVkZFQ19SR0IJCSgzPDwzKQotI2RlZmluZQlaT1JBTl9WRkVDX1JHQl9ZVVY0MjIJKDA8PDMpCi0jZGVmaW5lCVpPUkFOX1ZGRUNfUkdCX1JHQjg4OAkoMTw8MykKLSNkZWZpbmUJWk9SQU5fVkZFQ19SR0JfUkdCNTY1CSgyPDwzKQotI2RlZmluZQlaT1JBTl9WRkVDX1JHQl9SR0I1NTUJKDM8PDMpCi0jZGVmaW5lCVpPUkFOX1ZGRUNfRVJSRElGCSgxPDwyKQotI2RlZmluZQlaT1JBTl9WRkVDX1BBQ0syNAkoMTw8MSkKLSNkZWZpbmUJWk9SQU5fVkZFQ19MRQkJKDE8PDApCi0KLSNkZWZpbmUJWk9SQU5fVlRPUAkJMHgwMEMJLyogVmlkZW8gRGlzcGxheSAiVG9wIiAqLwotCi0jZGVmaW5lCVpPUkFOX1ZCT1QJCTB4MDEwCS8qIFZpZGVvIERpc3BsYXkgIkJvdHRvbSIgKi8KLQotI2RlZmluZQlaT1JBTl9WU1RSCQkweDAxNAkvKiBWaWRlbyBEaXNwbGF5IFN0cmlkZSAqLwotI2RlZmluZQlaT1JBTl9WU1RSX0RJU1BTVFJJREUJKDB4RkZGRjw8MTYpCi0jZGVmaW5lCVpPUkFOX1ZTVFJfVklET1ZGCSgxPDw4KQotI2RlZmluZQlaT1JBTl9WU1RSX1NOQVBTSE9UCSgxPDwxKQotI2RlZmluZQlaT1JBTl9WU1RSX0dSQUIJCSgxPDwwKQotCi0jZGVmaW5lCVpPUkFOX1ZEQwkJMHgwMTgJLyogVmlkZW8gRGlzcGxheSBDb25mLiAqLwotI2RlZmluZQlaT1JBTl9WRENfVklERU4JCSgxPDwzMSkKLSNkZWZpbmUJWk9SQU5fVkRDX01JTlBJWAkoMHgxRjw8MjUpCi0jZGVmaW5lCVpPUkFOX1ZEQ19UUklDT00JKDE8PDI0KQotI2RlZmluZQlaT1JBTl9WRENfVklEV0lOSFQJKDB4M0ZGPDwxMikKLSNkZWZpbmUJWk9SQU5fVkRDX1ZJRFdJTldJRAkoMHgzRkY8PDApCi0KLSNkZWZpbmUJWk9SQU5fTVRPUAkJMHgwMUMJLyogTWFza2luZyBNYXAgIlRvcCIgKi8KLQotI2RlZmluZQlaT1JBTl9NQk9UCQkweDAyMAkvKiBNYXNraW5nIE1hcCAiQm90dG9tIiAqLwotCi0jZGVmaW5lCVpPUkFOX09DUgkJMHgwMjQJLyogT3ZlcmxheSBDb250cm9sICovCi0jZGVmaW5lCVpPUkFOX09DUl9PVkxFTgkJKDE8PDE1KQotI2RlZmluZQlaT1JBTl9PQ1JfTUFTS1NUUklERQkoMHhGRjw8MCkKLQotI2RlZmluZQlaT1JBTl9QQ0kJCTB4MDI4CS8qIFN5c3RlbSwgUENJIGFuZCBHUFAgQ29udHJvbCAqLwotI2RlZmluZQlaT1JBTl9QQ0lfU09GVFJFU0VUCSgxPDwyNCkKLSNkZWZpbmUJWk9SQU5fUENJX1dBSVRTVEFURQkoMzw8MTYpCi0jZGVmaW5lCVpPUkFOX1BDSV9HRU5QVVJESVIJKDB4RkY8PDApCi0KLSNkZWZpbmUJWk9SQU5fR1VFU1QJCTB4MDJDCS8qIEd1ZXN0QnVzIENvbnRyb2wgKi8KLQotI2RlZmluZQlaT1JBTl9DU09VUkNFCQkweDAzMAkvKiBDb2RlIFNvdXJjZSBBZGRyZXNzICovCi0KLSNkZWZpbmUJWk9SQU5fQ1RSQU5TCQkweDAzNAkvKiBDb2RlIFRyYW5zZmVyIENvbnRyb2wgKi8KLQotI2RlZmluZQlaT1JBTl9DTUVNCQkweDAzOAkvKiBDb2RlIE1lbW9yeSBQb2ludGVyICovCi0KLSNkZWZpbmUJWk9SQU5fSVNSCQkweDAzQwkvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lCVpPUkFOX0lTUl9DT0RFCQkoMTw8MjgpCi0jZGVmaW5lCVpPUkFOX0lTUl9HSVJRMAkJKDE8PDI5KQotI2RlZmluZQlaT1JBTl9JU1JfR0lSUTEJCSgxPDwzMCkKLQotI2RlZmluZQlaT1JBTl9JQ1IJCTB4MDQwCS8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lCVpPUkFOX0lDUl9FTgkJKDE8PDI0KQotI2RlZmluZQlaT1JBTl9JQ1JfQ09ERQkJKDE8PDI4KQotI2RlZmluZQlaT1JBTl9JQ1JfR0lSUTAJCSgxPDwyOSkKLSNkZWZpbmUJWk9SQU5fSUNSX0dJUlExCQkoMTw8MzApCi0KLSNkZWZpbmUJWk9SQU5fSTJDCQkweDA0NAkvKiBJMkMtQnVzICovCi0jZGVmaW5lIFpPUkFOX0kyQ19TQ0wJCSgxPDwxKQotI2RlZmluZSBaT1JBTl9JMkNfU0RBCQkoMTw8MCkKLQotI2RlZmluZQlaT1JBTl9QT1NUCQkweDQ4CS8qIFBvc3RPZmZpY2UgKi8KLSNkZWZpbmUJWk9SQU5fUE9TVF9QRU4JCSgxPDwyNSkKLSNkZWZpbmUJWk9SQU5fUE9TVF9USU1FCQkoMTw8MjQpCi0jZGVmaW5lCVpPUkFOX1BPU1RfRElSCQkoMTw8MjMpCi0jZGVmaW5lCVpPUkFOX1BPU1RfR1VFU1RJRAkoMzw8MjApCi0jZGVmaW5lCVpPUkFOX1BPU1RfR1VFU1QJKDc8PDE2KQotI2RlZmluZQlaT1JBTl9QT1NUX0RBVEEJCSgweEZGPDwwKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMF9pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMF9pMmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFmZGU0My4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjBfaTJjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAgICB6cjM2MTIwX2kyYy5jIC0gWm9yYW4gMzYxMjAvMzYxMjUgYmFzZWQgZnJhbWVncmFiYmVycwotCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgUGF1bGluZSBNaWRkZWxpbmsgPG1pZGRlbGluQHBvbHl3YXJlLm5sPgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlICJ0dW5lci5oIgotI2luY2x1ZGUgInpyMzYxMjAuaCIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIEkyQyBmdW5jdGlvbnMJCQkJCQkJICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIHNvZnR3YXJlIEkyQyBmdW5jdGlvbnMgKi8KLQotI2RlZmluZSBJMkNfREVMQVkgICAxMAotCi1zdGF0aWMgdm9pZCBpMmNfc2V0bGluZXMoc3RydWN0IGkyY19idXMgKmJ1cyxpbnQgY3RybCxpbnQgZGF0YSkKLXsKLQlzdHJ1Y3Qgem9yYW4gKnp0diA9IChzdHJ1Y3Qgem9yYW4qKWJ1cy0+ZGF0YTsKLQl1bnNpZ25lZCBpbnQgYiA9IDA7Ci0JaWYgKGRhdGEpIGIgfD0genR2LT5jYXJkLT5zd2FwaTJjID8gWk9SQU5fSTJDX1NDTCA6IFpPUkFOX0kyQ19TREE7Ci0JaWYgKGN0cmwpIGIgfD0genR2LT5jYXJkLT5zd2FwaTJjID8gWk9SQU5fSTJDX1NEQSA6IFpPUkFOX0kyQ19TQ0w7Ci0JenJ3cml0ZShiLCBaT1JBTl9JMkMpOwotCXVkZWxheShJMkNfREVMQVkpOwotfQotCi1zdGF0aWMgaW50IGkyY19nZXRkYXRhbGluZShzdHJ1Y3QgaTJjX2J1cyAqYnVzKQotewotCXN0cnVjdCB6b3JhbiAqenR2ID0gKHN0cnVjdCB6b3JhbiopYnVzLT5kYXRhOwotCWlmICh6dHYtPmNhcmQtPnN3YXBpMmMpCi0JCXJldHVybiB6cnJlYWQoWk9SQU5fSTJDKSAmIFpPUkFOX0kyQ19TQ0w7Ci0JcmV0dXJuIHpycmVhZChaT1JBTl9JMkMpICYgWk9SQU5fSTJDX1NEQTsKLX0KLQotc3RhdGljCi12b2lkIGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19idXMgKmJ1cywgaW50IGlkKQotewotCXN0cnVjdCB6b3JhbiAqenR2ID0gKHN0cnVjdCB6b3JhbiopYnVzLT5kYXRhOwotCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgZGM7Ci0JaW50IHJ2OwotCi0Jc3dpdGNoIChpZCkgewotCSBjYXNlIEkyQ19EUklWRVJJRF9WSURFT0RFQ09ERVI6Ci0JCURFQlVHKHByaW50ayhDQVJEX0lORk8gImRlY29kZXIgYXR0YWNoZWRcbiIsQ0FSRCkpOwotCi0JCS8qIGZldGNoIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRlY29kZXIgKi8KLQkJcnYgPSBpMmNfY29udHJvbF9kZXZpY2UoJnp0di0+aTJjLCBJMkNfRFJJVkVSSURfVklERU9ERUNPREVSLCBERUNPREVSX0dFVF9DQVBBQklMSVRJRVMsICZkYyk7Ci0JCWlmIChydikgewotCQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgImRlY29kZXIgaXMgbm90IFY0TCBhd2FyZSFcbiIsQ0FSRCkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJREVCVUcocHJpbnRrKENBUkRfREVCVUcgImNhcGFiaWxpdGllcyAlZCAlZCAlZFxuIixDQVJELGRjLmZsYWdzLGRjLmlucHV0cyxkYy5vdXRwdXRzKSk7Ci0KLQkJLyogVGVzdCBpZiB0aGUgZGVjb2RlciBjYW4gZGUgVkJJIHRyYW5zZmVycyAqLwotCQlpZiAoZGMuZmxhZ3MgJiAxNiAvKlZJREVPX0RFQ09ERVJfVkJJKi8pCi0JCQl6dHYtPmhhdmVfZGVjb2RlciA9IDI7Ci0JCWVsc2UKLQkJCXp0di0+aGF2ZV9kZWNvZGVyID0gMTsKLQkJYnJlYWs7Ci0JIGNhc2UgSTJDX0RSSVZFUklEX1RVTkVSOgotCQl6dHYtPmhhdmVfdHVuZXIgPSAxOwotCQlERUJVRyhwcmludGsoQ0FSRF9JTkZPICJ0dW5lciBhdHRhY2hlZFxuIixDQVJEKSk7Ci0JCWlmICh6dHYtPnR1bmVyX3R5cGUgPj0gMCkKLQkJewotCQkJaWYgKGkyY19jb250cm9sX2RldmljZSgmenR2LT5pMmMsSTJDX0RSSVZFUklEX1RVTkVSLFRVTkVSX1NFVF9UWVBFLCZ6dHYtPnR1bmVyX3R5cGUpPDApCi0JCQlERUJVRyhwcmludGsoQ0FSRF9JTkZPICJhdHRhY2hfaW5mb3JtOyB0dW5lciB3b24ndCBiZSBzZXQgdG8gdHlwZSAlZFxuIixDQVJELHp0di0+dHVuZXJfdHlwZSkpOwotCQl9Ci0JCWJyZWFrOwotCSBkZWZhdWx0OgotCQlERUJVRyhwcmludGsoQ0FSRF9JTkZPICJhdHRhY2hfaW5mb3JtOyB1bmtub3duIGRldmljZSBpZD0lZFxuIixDQVJELGlkKSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljCi12b2lkIGRldGFjaF9pbmZvcm0oc3RydWN0IGkyY19idXMgKmJ1cywgaW50IGlkKQotewotCXN0cnVjdCB6b3JhbiAqenR2ID0gKHN0cnVjdCB6b3JhbiopYnVzLT5kYXRhOwotCi0Jc3dpdGNoIChpZCkgewotCSBjYXNlIEkyQ19EUklWRVJJRF9WSURFT0RFQ09ERVI6Ci0JCXp0di0+aGF2ZV9kZWNvZGVyID0gMDsKLQkJREVCVUcocHJpbnRrKENBUkRfSU5GTyAiZGVjb2RlciBkZXRhY2hlZFxuIixDQVJEKSk7Ci0JCWJyZWFrOwotCSBjYXNlIEkyQ19EUklWRVJJRF9UVU5FUjoKLQkJenR2LT5oYXZlX3R1bmVyID0gMDsKLQkJREVCVUcocHJpbnRrKENBUkRfSU5GTyAidHVuZXIgZGV0YWNoZWRcbiIsQ0FSRCkpOwotCQlicmVhazsKLQkgZGVmYXVsdDoKLQkJREVCVUcocHJpbnRrKENBUkRfSU5GTyAiZGV0YWNoX2luZm9ybTsgdW5rbm93biBkZXZpY2UgaWQ9JWRcbiIsQ0FSRCxpZCkpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0cnVjdCBpMmNfYnVzIHpvcmFuX2kyY19idXNfdGVtcGxhdGUgPQotewotCSJaUjM2MTIwIiwKLQlJMkNfQlVTSURfWk9SQU4sCi0JTlVMTCwKLQotCVNQSU5fTE9DS19VTkxPQ0tFRCwKLQotCWF0dGFjaF9pbmZvcm0sCi0JZGV0YWNoX2luZm9ybSwKLQotCWkyY19zZXRsaW5lcywKLQlpMmNfZ2V0ZGF0YWxpbmUsCi0JTlVMTCwKLQlOVUxMCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwX21lbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwX21lbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTZlYWE5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMF9tZW0uYworKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gICAgenIzNjEyMF9tZW0uYyAtIFpvcmFuIDM2MTIwLzM2MTI1IGJhc2VkIGZyYW1lZ3JhYmJlcnMKLQotICAgIENvcHlyaWdodCAoQykgMTk5OC0xOTk5IFBhdWxpbmUgTWlkZGVsaW5rIDxtaWRkZWxpbkBwb2x5d2FyZS5ubD4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2lmZGVmIENPTkZJR19CSUdQSFlTX0FSRUEKLSNpbmNsdWRlIDxsaW51eC9iaWdwaHlzYXJlYS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJ6cjM2MTIwLmgiCi0jaW5jbHVkZSAienIzNjEyMF9tZW0uaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBNZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkKiBibWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl2b2lkKiBtZW07Ci0jaWZkZWYgQ09ORklHX0JJR1BIWVNfQVJFQQotCW1lbSA9IGJpZ3BoeXNhcmVhX2FsbG9jX3BhZ2VzKHNpemUvUEFHRV9TSVpFLCAxLCBHRlBfS0VSTkVMKTsKLSNlbHNlCi0JLyoKLQkgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGdvdCBhIGxvdCBvZiBtZW1vcnkgYXQgYm9vdHRpbWUsCi0JICogc28gd2Uga25vdyBpdHMgYWx3YXlzIHRoZXJlLi4uCi0JICovCi0JbWVtID0gKHZvaWQqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX1VTRVJ8R0ZQX0RNQSxnZXRfb3JkZXIoc2l6ZSkpOwotI2VuZGlmCi0JaWYgKG1lbSkgewotCQl1bnNpZ25lZCBsb25nIGFkciA9ICh1bnNpZ25lZCBsb25nKW1lbTsKLQkJd2hpbGUgKHNpemUgPiAwKSB7Ci0JCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBoeXNfdG9fdmlydChhZHIpKSk7Ci0JCQlhZHIgKz0gUEFHRV9TSVpFOwotCQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JCX0KLQl9Ci0JcmV0dXJuIG1lbTsKLX0KLQotdm9pZCBiZnJlZSh2b2lkKiBtZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlpZiAobWVtKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYWRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOwotCQl1bnNpZ25lZCBsb25nIHNpeiA9IHNpemU7Ci0JCXdoaWxlIChzaXogPiAwKSB7Ci0JCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocGh5c190b192aXJ0KGFkcikpKTsKLQkJCWFkciArPSBQQUdFX1NJWkU7Ci0JCQlzaXogLT0gUEFHRV9TSVpFOwotCQl9Ci0jaWZkZWYgQ09ORklHX0JJR1BIWVNfQVJFQQotCQliaWdwaHlzYXJlYV9mcmVlX3BhZ2VzKG1lbSk7Ci0jZWxzZQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW1lbSxnZXRfb3JkZXIoc2l6ZSkpOwotI2VuZGlmCi0JfQotfQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjBfbWVtLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjBfbWVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZDExN2EuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwX21lbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0vKiBlaXRoZXIga21hbGxvYygpIG9yIGJpZ3BoeXNhcmVhKCkgYWxsb2NlZCBtZW1vcnkgLSBjb250aW51b3VzICovCi12b2lkKglibWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci12b2lkCWJmcmVlKHZvaWQqIG1lbSwgdW5zaWduZWQgbG9uZyBzaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKaW5kZXggNmUwNjhjZi4uYjNmMjhhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgIEZvciB1c2Ugd2l0aCBMU0kgTG9naWMgUENJIGNoaXAvYWRhcHRlcihzKQogICogICAgICBydW5uaW5nIExTSSBMb2dpYyBGdXNpb24gTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgZmlybXdhcmUuCiAgKgotICogIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IExTSSBMb2dpYyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IExTSSBMb2dpYyBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86bXB0X2xpbnV4X2RldmVsb3BlckBsc2lsLmNvbSkKICAqCiAgKi8KQEAgLTczLDYgKzczLDcgQEAKIE1PRFVMRV9BVVRIT1IoTU9EVUxFQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihteV9OQU1FKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKG15X1ZFUlNJT04pOwogCiAvKgogICogIGNtZCBsaW5lIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKaW5kZXggYTRhZmFkNC4uZTMxNjcwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICBMU0lGQzl4eC9MU0k0MDl4eCBGaWJyZSBDaGFubmVsCiAgKiAgICAgIHJ1bm5pbmcgTFNJIExvZ2ljIEZ1c2lvbiBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBmaXJtd2FyZS4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgTFNJIExvZ2ljIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgTFNJIExvZ2ljIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzptcHRfbGludXhfZGV2ZWxvcGVyQGxzaWwuY29tKQogICoKICAqLwpAQCAtNzIsMTEgKzcyLDExIEBACiAjZW5kaWYKIAogI2lmbmRlZiBDT1BZUklHSFQKLSNkZWZpbmUgQ09QWVJJR0hUCSJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSAiIE1PRFVMRUFVVEhPUgorI2RlZmluZSBDT1BZUklHSFQJIkNvcHlyaWdodCAoYykgMTk5OS0yMDA3ICIgTU9EVUxFQVVUSE9SCiAjZW5kaWYKIAotI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMDIiCi0jZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4wMiIKKyNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjAzIgorI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMDMiCiAjZGVmaW5lIFdIQVRfTUFHSUNfU1RSSU5HCQkiQCIgIigiICIjIiAiKSIKIAogI2RlZmluZSBzaG93X21wdG1vZF92ZXIocyx2ZXIpICBcCkBAIC0xMDU5LDcgKzEwNTksNyBAQAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogI2VuZGlmCQkvKiB9IF9fS0VSTkVMX18gKi8KIAotI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9fc3BhcmNfdjlfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9fc3BhcmNfdjlfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fcG93ZXJwY19fKQogI2RlZmluZSBDQVNUX1UzMl9UT19QVFIoeCkJKCh2b2lkICopKHU2NCl4KQogI2RlZmluZSBDQVNUX1BUUl9UT19VMzIoeCkJKCh1MzIpKHU2NCl4KQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCmluZGV4IDMwOTc1Y2MuLjUwNDYzMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgRm9yIHVzZSB3aXRoIExTSSBMb2dpYyBQQ0kgY2hpcC9hZGFwdGVycwogICogICAgICBydW5uaW5nIExTSSBMb2dpYyBGdXNpb24gTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgZmlybXdhcmUuCiAgKgotICogIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IExTSSBMb2dpYyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IExTSSBMb2dpYyBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86bXB0X2xpbnV4X2RldmVsb3BlckBsc2lsLmNvbSkKICAqCiAgKi8KQEAgLTY2LDcgKzY2LDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KIAotI2RlZmluZSBDT1BZUklHSFQJIkNvcHlyaWdodCAoYykgMTk5OS0yMDA1IExTSSBMb2dpYyBDb3Jwb3JhdGlvbiIKKyNkZWZpbmUgQ09QWVJJR0hUCSJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBMU0kgTG9naWMgQ29ycG9yYXRpb24iCiAjZGVmaW5lIE1PRFVMRUFVVEhPUgkiTFNJIExvZ2ljIENvcnBvcmF0aW9uIgogI2luY2x1ZGUgIm1wdGJhc2UuaCIKICNpbmNsdWRlICJtcHRjdGwuaCIKQEAgLTc5LDYgKzc5LDcgQEAKIE1PRFVMRV9BVVRIT1IoTU9EVUxFQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihteV9OQU1FKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKG15X1ZFUlNJT04pOwogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5oCmluZGV4IDA0Mzk0MTguLmU2NWExY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuaApAQCAtNSw3ICs1LDcgQEAKICAqICAgICAgICAgIExTSUZDOXh4L0xTSTQwOXh4IEZpYnJlIENoYW5uZWwKICAqICAgICAgcnVubmluZyBMU0kgTG9naWMgRnVzaW9uIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGZpcm13YXJlLgogICoKLSAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBMU0kgTG9naWMgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBMU0kgTG9naWMgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOm1wdF9saW51eF9kZXZlbG9wZXJAbHNpbC5jb20pCiAgKgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKaW5kZXggY2EyZjkxMC4uYzgxOWMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgRm9yIHVzZSB3aXRoIExTSSBMb2dpYyBQQ0kgY2hpcC9hZGFwdGVyKHMpCiAgKiAgICAgIHJ1bm5pbmcgTFNJIExvZ2ljIEZ1c2lvbiBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBmaXJtd2FyZS4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgTFNJIExvZ2ljIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgTFNJIExvZ2ljIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzptcHRfbGludXhfZGV2ZWxvcGVyQGxzaWwuY29tKQogICoKICAqLwpAQCAtNzUsNiArNzUsNyBAQAogTU9EVUxFX0FVVEhPUihNT0RVTEVBVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKG15X05BTUUpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04obXlfVkVSU0lPTik7CiAKIC8qIENvbW1hbmQgbGluZSBhcmdzICovCiAjZGVmaW5lIE1QVEZDX0RFVl9MT1NTX1RNTyAoNjApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYwppbmRleCBiN2M0NDA3Li4yOTM2MjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKQEAgLTQsNyArNCw3IEBACiAgKiAgICAgIEZvciB1c2Ugd2l0aCBMU0kgTG9naWMgRmlicmUgQ2hhbm5lbCBQQ0kgY2hpcC9hZGFwdGVycwogICogICAgICBydW5uaW5nIExTSSBMb2dpYyBGdXNpb24gTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgZmlybXdhcmUuCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IExTSSBMb2dpYyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA3IExTSSBMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqLwogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpAQCAtNTYsOSArNTYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCisjZGVmaW5lIG15X1ZFUlNJT04JTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCiAjZGVmaW5lIE1ZTkFNCQkibXB0bGFuIgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihteV9WRVJTSU9OKTsKIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5oCmluZGV4IDM3MjZlY2IuLjcwYWI3NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uaApAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgRm9yIHVzZSB3aXRoIExTSSBMb2dpYyBGaWJyZSBDaGFubmVsIFBDSSBjaGlwL2FkYXB0ZXJzCiAgKiAgICAgIHJ1bm5pbmcgTFNJIExvZ2ljIEZ1c2lvbiBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBmaXJtd2FyZS4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgTFNJIExvZ2ljIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDcgTFNJIExvZ2ljIENvcnBvcmF0aW9uCiAgKgogICovCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCA0ZjBjNTMwLi4wOWU5YTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKQEAgLTMsOSArMyw5IEBACiAgKiAgICAgIEZvciB1c2Ugd2l0aCBMU0kgTG9naWMgUENJIGNoaXAvYWRhcHRlcihzKQogICogICAgICBydW5uaW5nIExTSSBMb2dpYyBGdXNpb24gTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgZmlybXdhcmUuCiAgKgotICogIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IExTSSBMb2dpYyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IExTSSBMb2dpYyBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86bXB0X2xpbnV4X2RldmVsb3BlckBsc2lsLmNvbSkKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNiBEZWxsCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgRGVsbAogICovCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAvKgpAQCAtNzUsNiArNzUsNyBAQAogTU9EVUxFX0FVVEhPUihNT0RVTEVBVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKG15X05BTUUpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04obXlfVkVSU0lPTik7CiAKIHN0YXRpYyBpbnQgbXB0X3B0X2NsZWFyOwogbW9kdWxlX3BhcmFtKG1wdF9wdF9jbGVhciwgaW50LCAwKTsKQEAgLTI0NSw3ICsyNDYsOCBAQAogCXByaW50aygiUGFyZW50IEhhbmRsZT0weCVYXG4iICxsZTE2X3RvX2NwdShwZzAtPlBhcmVudERldkhhbmRsZSkpOwogCXByaW50aygiRW5jbG9zdXJlIEhhbmRsZT0weCVYXG4iLCBsZTE2X3RvX2NwdShwZzAtPkVuY2xvc3VyZUhhbmRsZSkpOwogCXByaW50aygiU2xvdD0weCVYXG4iLCBsZTE2X3RvX2NwdShwZzAtPlNsb3QpKTsKLQlwcmludGsoIlNBUyBBZGRyZXNzPTB4JWxsWFxuIiwgbGU2NF90b19jcHUoc2FzX2FkZHJlc3MpKTsKKwlwcmludGsoIlNBUyBBZGRyZXNzPTB4JWxsWFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkgICAgbGU2NF90b19jcHUoc2FzX2FkZHJlc3MpKTsKIAlwcmludGsoIlRhcmdldCBJRD0weCVYXG4iLCBwZzAtPlRhcmdldElEKTsKIAlwcmludGsoIkJ1cz0weCVYXG4iLCBwZzAtPkJ1cyk7CiAJLyogVGhlIFBoeU51bSBmaWVsZCBzcGVjaWZpZXMgdGhlIFBIWSBudW1iZXIgb2YgdGhlIHBhcmVudApAQCAtMzQ5LDkgKzM1MSw5IEBACiAJcGh5X2luZm8gPSBwb3J0X2luZm8tPnBoeV9pbmZvOwogCiAJZHNhc3dpZGVwcmludGsoKEtFUk5fREVCVUcgIiVzOiBbJXBdOiBudW1fcGh5cz0lMDJkICIKLQkgICAgCSJiaXRtYXNrPTB4JTAxNmxsWFxuIiwKLQkJX19GVU5DVElPTl9fLCBwb3J0X2RldGFpbHMsIHBvcnRfZGV0YWlscy0+bnVtX3BoeXMsCi0JCSAgICBwb3J0X2RldGFpbHMtPnBoeV9iaXRtYXNrKSk7CisJICAgICJiaXRtYXNrPTB4JTAxNmxsWFxuIiwgX19GVU5DVElPTl9fLCBwb3J0X2RldGFpbHMsCisJICAgIHBvcnRfZGV0YWlscy0+bnVtX3BoeXMsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJICAgIHBvcnRfZGV0YWlscy0+cGh5X2JpdG1hc2spKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwb3J0X2luZm8tPm51bV9waHlzOyBpKyssIHBoeV9pbmZvKyspIHsKIAkJaWYocGh5X2luZm8tPnBvcnRfZGV0YWlscyAhPSBwb3J0X2RldGFpbHMpCkBAIC00NzYsNyArNDc4LDcgQEAKIAlmb3IgKGkgPSAwIDsgaSA8IHBvcnRfaW5mby0+bnVtX3BoeXMgOyBpKyssIHBoeV9pbmZvKyspIHsKIAkJc2FzX2FkZHJlc3MgPSBwaHlfaW5mby0+YXR0YWNoZWQuc2FzX2FkZHJlc3M7CiAJCWRzYXN3aWRlcHJpbnRrKChLRVJOX0RFQlVHICJwaHlfaWQ9JWQgc2FzX2FkZHJlc3M9MHglMDE4bGxYXG4iLAotCQkJaSwgc2FzX2FkZHJlc3MpKTsKKwkJICAgIGksICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2FkZHJlc3MpKTsKIAkJaWYgKCFzYXNfYWRkcmVzcykKIAkJCWNvbnRpbnVlOwogCQlwb3J0X2RldGFpbHMgPSBwaHlfaW5mby0+cG9ydF9kZXRhaWxzOwpAQCAtNDk1LDggKzQ5Nyw4IEBACiAJCQkJICAgICgxIDw8IHBoeV9pbmZvLT5waHlfaWQpOwogCQkJcGh5X2luZm8tPnNhc19wb3J0X2FkZF9waHk9MTsKIAkJCWRzYXN3aWRlcHJpbnRrKChLRVJOX0RFQlVHICJcdFx0Rm9ybWluZyBwb3J0XG5cdFx0IgotCQkJCSJwaHlfaWQ9JWQgc2FzX2FkZHJlc3M9MHglMDE4bGxYXG4iLAotCQkJCWksIHNhc19hZGRyZXNzKSk7CisJCQkgICAgInBoeV9pZD0lZCBzYXNfYWRkcmVzcz0weCUwMThsbFhcbiIsCisJCQkgICAgaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfYWRkcmVzcykpOwogCQkJcGh5X2luZm8tPnBvcnRfZGV0YWlscyA9IHBvcnRfZGV0YWlsczsKIAkJfQogCkBAIC01MTIsOCArNTE0LDkgQEAKIAkJCWlmIChwaHlfaW5mb19jbXAtPnBvcnRfZGV0YWlscyA9PSBwb3J0X2RldGFpbHMgKQogCQkJCWNvbnRpbnVlOwogCQkJZHNhc3dpZGVwcmludGsoKEtFUk5fREVCVUcKLQkJCQkiXHRcdHBoeV9pZD0lZCBzYXNfYWRkcmVzcz0weCUwMThsbFhcbiIsCi0JCQkJaiwgcGh5X2luZm9fY21wLT5hdHRhY2hlZC5zYXNfYWRkcmVzcykpOworCQkJICAgICJcdFx0cGh5X2lkPSVkIHNhc19hZGRyZXNzPTB4JTAxOGxsWFxuIiwKKwkJCSAgICBqLCAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAgIHBoeV9pbmZvX2NtcC0+YXR0YWNoZWQuc2FzX2FkZHJlc3MpKTsKIAkJCWlmIChwaHlfaW5mb19jbXAtPnBvcnRfZGV0YWlscykgewogCQkJCXBvcnRfZGV0YWlscy0+cnBoeSA9CiAJCQkJICAgIG1wdHNhc19nZXRfcnBoeShwaHlfaW5mb19jbXApOwpAQCAtNTQ2LDExICs1NDksMTAgQEAKIAkJaWYgKCFwb3J0X2RldGFpbHMpCiAJCQljb250aW51ZTsKIAkJZHNhc3dpZGVwcmludGsoKEtFUk5fREVCVUcKLQkJCSIlczogWyVwXTogcGh5X2lkPSUwMmQgbnVtX3BoeXM9JTAyZCAiCi0JCSAgICAJImJpdG1hc2s9MHglMDE2bGxYXG4iLAotCQkJX19GVU5DVElPTl9fLAotCQkJcG9ydF9kZXRhaWxzLCBpLCBwb3J0X2RldGFpbHMtPm51bV9waHlzLAotCQkJcG9ydF9kZXRhaWxzLT5waHlfYml0bWFzaykpOworCQkgICAgIiVzOiBbJXBdOiBwaHlfaWQ9JTAyZCBudW1fcGh5cz0lMDJkICIKKwkJICAgICJiaXRtYXNrPTB4JTAxNmxsWFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgcG9ydF9kZXRhaWxzLCBpLCBwb3J0X2RldGFpbHMtPm51bV9waHlzLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwb3J0X2RldGFpbHMtPnBoeV9iaXRtYXNrKSk7CiAJCWRzYXN3aWRlcHJpbnRrKChLRVJOX0RFQlVHIlx0XHRwb3J0ID0gJXAgcnBoeT0lcFxuIiwKIAkJCXBvcnRfZGV0YWlscy0+cG9ydCwgcG9ydF9kZXRhaWxzLT5ycGh5KSk7CiAJfQpAQCAtMjA3OSw4ICsyMDgxLDEwIEBACiBzdGF0aWMgdm9pZAogbXB0c2FzX3JlcHJvYmVfbHVuKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgdm9pZCAqZGF0YSkKIHsKKwlpbnQgcmM7CisKIAlzZGV2LT5ub191bGRfYXR0YWNoID0gZGF0YSA/IDEgOiAwOwotCXNjc2lfZGV2aWNlX3JlcHJvYmUoc2Rldik7CisJcmMgPSBzY3NpX2RldmljZV9yZXByb2JlKHNkZXYpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IDJjNzJjMzYuLmYwY2NhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgIEZvciB1c2Ugd2l0aCBMU0kgTG9naWMgUENJIGNoaXAvYWRhcHRlcihzKQogICogICAgICBydW5uaW5nIExTSSBMb2dpYyBGdXNpb24gTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgZmlybXdhcmUuCiAgKgotICogIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IExTSSBMb2dpYyBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IExTSSBMb2dpYyBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86bXB0X2xpbnV4X2RldmVsb3BlckBsc2lsLmNvbSkKICAqCiAgKi8KQEAgLTc2LDYgKzc2LDcgQEAKIE1PRFVMRV9BVVRIT1IoTU9EVUxFQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihteV9OQU1FKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKG15X1ZFUlNJT04pOwogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAKQEAgLTcwMSw2ICs3MDIsMTcgQEAKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJfQorCQkJfSBlbHNlIGlmIChpb2MtPmJ1c190eXBlID09IEZDKSB7CisJCQkJLyoKKwkJCQkgKiBUaGUgRkMgSU9DIG1heSBraWxsIGEgcmVxdWVzdCBmb3IgdmFyaWV0eSBvZgorCQkJCSAqIHJlYXNvbnMsIHNvbWUgb2Ygd2hpY2ggbWF5IGJlIHJlY292ZXJlZCBieSBhCisJCQkJICogcmV0cnksIHNvbWUgd2hpY2ggYXJlIHVubGlrZWx5IHRvIGJlCisJCQkJICogcmVjb3ZlcmVkLiBSZXR1cm4gRElEX0VSUk9SIGluc3RlYWQgb2YKKwkJCQkgKiBESURfUkVTRVQgdG8gcGVybWl0IHJldHJ5IG9mIHRoZSBjb21tYW5kLAorCQkJCSAqIGp1c3Qgbm90IGFuIGluZmluaXRlIG51bWJlciBvZiB0aGVtCisJCQkJICovCisJCQkJc2MtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJCQlicmVhazsKIAkJCX0KIAogCQkJLyoKQEAgLTI2ODgsNyArMjcwMCw4IEBACiAJCSAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJZGluaXRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgImluaXRUYXJnZXQgYnVzPSVkIGlkPSVkIGx1bj0lZCBoZD0lcFxuIiwKLQkJaGQtPmlvYy0+bmFtZSwgdnRhcmdldC0+YnVzX2lkLCB2dGFyZ2V0LT50YXJnZXRfaWQsIGx1biwgaGQpKTsKKwkJaGQtPmlvYy0+bmFtZSwgdnRhcmdldC0+YnVzX2lkLCB2dGFyZ2V0LT50YXJnZXRfaWQsCisJCXNkZXYtPmx1biwgaGQpKTsKIAogCS8qIElzIExVTiBzdXBwb3J0ZWQ/IElmIHNvLCB1cHBlciAyIGJpdHMgd2lsbCBiZSAwCiAJKiBpbiBmaXJzdCBieXRlIG9mIGlucXVpcnkgZGF0YS4KQEAgLTI3NzAsNyArMjc4Myw3IEBACiAJCQkJZWxzZSB7CiAJCQkJCWZhY3RvciA9IE1QVF9VTFRSQTMyMDsKIAkJCQkJaWYgKHNjc2lfZGV2aWNlX3FhcyhzZGV2KSkgewotCQkJCQkJZGR2dHByaW50aygoS0VSTl9JTkZPICJFbmFibGluZyBRQVMgZHVlIHRvIGJ5dGU1Nj0lMDJ4IG9uIGlkPSVkIVxuIiwgYnl0ZTU2LCBpZCkpOworCQkJCQkJZGR2dHByaW50aygoS0VSTl9JTkZPICJFbmFibGluZyBRQVMgZHVlIHRvIGJ5dGU1Nj0lMDJ4IG9uIGlkPSVkIVxuIiwgc2NzaV9kZXZpY2VfcWFzKHNkZXYpLCBpZCkpOwogCQkJCQkJbm9RYXMgPSAwOwogCQkJCQl9CiAJCQkJCWlmIChzZGV2LT50eXBlID09IFRZUEVfVEFQRSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCmluZGV4IDE0YTViNmMuLjE4N2M4YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICBMU0lGQzl4eC9MU0k0MDl4eCBGaWJyZSBDaGFubmVsCiAgKiAgICAgIHJ1bm5pbmcgTFNJIExvZ2ljIEZ1c2lvbiBNUFQgKE1lc3NhZ2UgUGFzc2luZyBUZWNobm9sb2d5KSBmaXJtd2FyZS4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgTFNJIExvZ2ljIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgTFNJIExvZ2ljIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzptcHRfbGludXhfZGV2ZWxvcGVyQGxzaWwuY29tKQogICoKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKaW5kZXggMzY2NDFkYS4uMjAzYzY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCkBAIC0zLDcgKzMsNyBAQAogICogICAgICBGb3IgdXNlIHdpdGggTFNJIExvZ2ljIFBDSSBjaGlwL2FkYXB0ZXIocykKICAqICAgICAgcnVubmluZyBMU0kgTG9naWMgRnVzaW9uIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGZpcm13YXJlLgogICoKLSAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBMU0kgTG9naWMgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBMU0kgTG9naWMgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOm1wdF9saW51eF9kZXZlbG9wZXJAbHNpbC5jb20pCiAgKgogICovCkBAIC03Nyw2ICs3Nyw3IEBACiBNT0RVTEVfQVVUSE9SKE1PRFVMRUFVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04obXlfTkFNRSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihteV9WRVJTSU9OKTsKIAogLyogQ29tbWFuZCBsaW5lIGFyZ3MgKi8KIHN0YXRpYyBpbnQgbXB0X3NhZl90ZSA9IE1QVFNDU0lIX1NBRl9URTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vY29yZS5oIGIvZHJpdmVycy9tZXNzYWdlL2kyby9jb3JlLmgKaW5kZXggZGMzODhhMy4uY2JlMzg0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9jb3JlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9jb3JlLmgKQEAgLTE4LDcgKzE4LDcgQEAKIGV4dGVybiBpbnQgaTJvX2V4ZWNfbGN0X2dldChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKik7CiAKIGV4dGVybiBpbnQgX19pbml0IGkyb19leGVjX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2V4aXQgaTJvX2V4ZWNfZXhpdCh2b2lkKTsKK2V4dGVybiB2b2lkIGkyb19leGVjX2V4aXQodm9pZCk7CiAKIC8qIGRyaXZlciAqLwogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBpMm9fYnVzX3R5cGU7CkBAIC0yNiw3ICsyNiw3IEBACiBleHRlcm4gaW50IGkyb19kcml2ZXJfZGlzcGF0Y2goc3RydWN0IGkyb19jb250cm9sbGVyICosIHUzMik7CiAKIGV4dGVybiBpbnQgX19pbml0IGkyb19kcml2ZXJfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9fZXhpdCBpMm9fZHJpdmVyX2V4aXQodm9pZCk7CitleHRlcm4gdm9pZCBpMm9fZHJpdmVyX2V4aXQodm9pZCk7CiAKIC8qIFBDSSAqLwogZXh0ZXJuIGludCBfX2luaXQgaTJvX3BjaV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9kcml2ZXIuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vZHJpdmVyLmMKaW5kZXggOTEwNGI2NS4uZDMyMzVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2RyaXZlci5jCkBAIC0zNjIsNyArMzYyLDcgQEAKICAqCiAgKglVbnJlZ2lzdGVycyB0aGUgSTJPIGJ1cyBhbmQgZnJlZXMgZHJpdmVyIGFycmF5LgogICovCi12b2lkIF9fZXhpdCBpMm9fZHJpdmVyX2V4aXQodm9pZCkKK3ZvaWQgaTJvX2RyaXZlcl9leGl0KHZvaWQpCiB7CiAJYnVzX3VucmVnaXN0ZXIoJmkyb19idXNfdHlwZSk7CiAJa2ZyZWUoaTJvX2RyaXZlcnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCmluZGV4IDkwMjc1M2IuLjUyNzhhYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKQEAgLTM2Nyw3ICszNjcsNyBAQAogCiAvKioKICAqCWkyb19leGVjX2xjdF9tb2RpZmllZCAtIENhbGxlZCBvbiBMQ1QgTk9USUZZIHJlcGx5Ci0gKglAd29yazogd29yayBzdHJ1Y3QgZm9yIGEgc3BlY2lmaWMgY29udHJvbGxlcgorICoJQF93b3JrOiB3b3JrIHN0cnVjdCBmb3IgYSBzcGVjaWZpYyBjb250cm9sbGVyCiAgKgogICoJVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFzeW5jaHJvbnVzIExDVCBOT1RJRlkgcmVwbGllcy4gSXQgcGFyc2VzIHRoZQogICoJbmV3IExDVCBhbmQgaWYgdGhlIGJ1ZmZlciBmb3IgdGhlIExDVCB3YXMgdG8gc21hbGwgc2VuZHMgYSBMQ1QgTk9USUZZCkBAIC01OTUsNyArNTk1LDcgQEAKICAqCiAgKglVbnJlZ2lzdGVycyB0aGUgRXhlYyBPU00gZnJvbSB0aGUgSTJPIGNvcmUuCiAgKi8KLXZvaWQgX19leGl0IGkyb19leGVjX2V4aXQodm9pZCkKK3ZvaWQgaTJvX2V4ZWNfZXhpdCh2b2lkKQogewogCWkyb19kcml2ZXJfdW5yZWdpc3RlcigmaTJvX2V4ZWNfZHJpdmVyKTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCmluZGV4IDFkZTMwZDcuLmUzM2Q0NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTlhJTzsKIAotCW9wcyA9ICh1OCAqKSBrbWFsbG9jKGtjbWQub3BsZW4sIEdGUF9LRVJORUwpOworCW9wcyA9IGttYWxsb2Moa2NtZC5vcGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvcHMpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xOTksNyArMTk5LDcgQEAKIAkgKiBJdCdzIHBvc3NpYmxlIHRvIGhhdmUgYSBfdmVyeV8gbGFyZ2UgdGFibGUKIAkgKiBhbmQgdGhhdCB0aGUgdXNlciBhc2tzIGZvciBhbGwgb2YgaXQgYXQgb25jZS4uLgogCSAqLwotCXJlcyA9ICh1OCAqKSBrbWFsbG9jKDY1NTM2LCBHRlBfS0VSTkVMKTsKKwlyZXMgPSBrbWFsbG9jKDY1NTM2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJlcykgewogCQlrZnJlZShvcHMpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9tc2ktbGFwdG9wLmMgYi9kcml2ZXJzL21pc2MvbXNpLWxhcHRvcC5jCmluZGV4IGZkYjcxNTMuLjhlNWUwN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9tc2ktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9taXNjL21zaS1sYXB0b3AuYwpAQCAtMzE3LDcgKzMxNyw4IEBACiAKIAkvKiBSZWdpc3RlciBiYWNrbGlnaHQgc3R1ZmYgKi8KIAotCW1zaWJsX2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIm1zaS1sYXB0b3AtYmwiLCBOVUxMLCAmbXNpYmxfcHJvcHMpOworCW1zaWJsX2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIm1zaS1sYXB0b3AtYmwiLCBOVUxMLCBOVUxMLAorCQkJCQkJJm1zaWJsX3Byb3BzKTsKIAlpZiAoSVNfRVJSKG1zaWJsX2RldmljZSkpCiAJCXJldHVybiBQVFJfRVJSKG1zaWJsX2RldmljZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2F0OTFfbWNpLmMgYi9kcml2ZXJzL21tYy9hdDkxX21jaS5jCmluZGV4IDQ2MzNkYmMuLmFhMTUyZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2F0OTFfbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYyAtIEFUTUVMIEFUOTFSTTkyMDAgTUNJIERyaXZlcgorICogIGxpbnV4L2RyaXZlcnMvbW1jL2F0OTFfbWNpLmMgLSBBVE1FTCBBVDkxIE1DSSBEcml2ZXIKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IENvdWdhciBDcmVlayBDb21wdXRpbmcgRGV2aWNlcyBMdGQsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICAqCkBAIC0xMSw3ICsxMSw3IEBACiAgKi8KIAogLyoKLSAgIFRoaXMgaXMgdGhlIEFUOTFSTTkyMDAgTUNJIGRyaXZlciB0aGF0IGhhcyBiZWVuIHRlc3RlZCB3aXRoIGJvdGggTU1DIGNhcmRzCisgICBUaGlzIGlzIHRoZSBBVDkxIE1DSSBkcml2ZXIgdGhhdCBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBib3RoIE1NQyBjYXJkcwogICAgYW5kIFNELWNhcmRzLiAgQm9hcmRzIHRoYXQgc3VwcG9ydCB3cml0ZSBwcm90ZWN0IGFyZSBub3cgc3VwcG9ydGVkLgogICAgVGhlIENDQVQ5MVNCQzAwMSBib2FyZCBkb2VzIG5vdCBzdXBwb3J0IFNEIGNhcmRzLgogCkBAIC0zOCw4ICszOCw4IEBACiAgICAgIGNvbnRyb2xsZXIgdG8gbWFuYWdlIHRoZSB0cmFuc2ZlcnMuCiAKICAgICAgQSByZWFkIGlzIGRvbmUgZnJvbSB0aGUgY29udHJvbGxlciBkaXJlY3RseSB0byB0aGUgc2NhdHRlcmxpc3QgcGFzc2VkIGluIGZyb20gdGhlIHJlcXVlc3QuCi0gICAgIER1ZSB0byBhIGJ1ZyBpbiB0aGUgY29udHJvbGxlciwgd2hlbiBhIHJlYWQgaXMgY29tcGxldGVkLCBhbGwgdGhlIHdvcmRzIGFyZSBieXRlCi0gICAgIHN3YXBwZWQgaW4gdGhlIHNjYXR0ZXJsaXN0IGJ1ZmZlcnMuCisgICAgIER1ZSB0byBhIGJ1ZyBpbiB0aGUgQVQ5MVJNOTIwMCBjb250cm9sbGVyLCB3aGVuIGEgcmVhZCBpcyBjb21wbGV0ZWQsIGFsbCB0aGUgd29yZHMgYXJlIGJ5dGUKKyAgICAgc3dhcHBlZCBpbiB0aGUgc2NhdHRlcmxpc3QgYnVmZmVycy4gIEFUOTFTQU05MjZ4IGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhpcyBidWcuCiAKICAgICAgVGhlIHNlcXVlbmNlIG9mIHJlYWQgaW50ZXJydXB0cyBpczogRU5EUlgsIFJYQlVGRiwgQ01EUkRZCiAKQEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MV9tY2kuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3BkYy5oPgpAQCAtODAsMzQgKzgxLDE4IEBACiAKICN1bmRlZglTVVBQT1JUXzRXSVJFCiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICptY2lfY2xrOworI2RlZmluZSBGTF9TRU5UX0NPTU1BTkQJKDEgPDwgMCkKKyNkZWZpbmUgRkxfU0VOVF9TVE9QCSgxIDw8IDEpCiAKLSNkZWZpbmUgRkxfU0VOVF9DT01NQU5EICgxIDw8IDApCi0jZGVmaW5lIEZMX1NFTlRfU1RPUCAoMSA8PCAxKQorI2RlZmluZSBBVDkxX01DSV9FUlJPUlMJKEFUOTFfTUNJX1JJTkRFIHwgQVQ5MV9NQ0lfUkRJUkUgfCBBVDkxX01DSV9SQ1JDRQlcCisJCXwgQVQ5MV9NQ0lfUkVOREUgfCBBVDkxX01DSV9SVE9FIHwgQVQ5MV9NQ0lfRENSQ0UJCVwKKwkJfCBBVDkxX01DSV9EVE9FIHwgQVQ5MV9NQ0lfT1ZSRSB8IEFUOTFfTUNJX1VOUkUpCQkJCiAKKyNkZWZpbmUgYXQ5MV9tY2lfcmVhZChob3N0LCByZWcpCV9fcmF3X3JlYWRsKChob3N0KS0+YmFzZWFkZHIgKyAocmVnKSkKKyNkZWZpbmUgYXQ5MV9tY2lfd3JpdGUoaG9zdCwgcmVnLCB2YWwpCV9fcmF3X3dyaXRlbCgodmFsKSwgKGhvc3QpLT5iYXNlYWRkciArIChyZWcpKQogCiAKIC8qCi0gKiBSZWFkIGZyb20gYSBNQ0kgcmVnaXN0ZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhdDkxX21jaV9yZWFkKHVuc2lnbmVkIGludCByZWcpCi17Ci0Jdm9pZCBfX2lvbWVtICptY2lfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfTUNJOwotCi0JcmV0dXJuIF9fcmF3X3JlYWRsKG1jaV9iYXNlICsgcmVnKTsKLX0KLQotLyoKLSAqIFdyaXRlIHRvIGEgTUNJIHJlZ2lzdGVyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXQ5MV9tY2lfd3JpdGUodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKLXsKLSAgICAgICAgdm9pZCBfX2lvbWVtICptY2lfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfTUNJOwotCi0gICAgICAgIF9fcmF3X3dyaXRlbCh2YWx1ZSwgbWNpX2Jhc2UgKyByZWcpOwotfQotCi0vKgogICogTG93IGxldmVsIHR5cGUgZm9yIHRoaXMgZHJpdmVyCiAgKi8KIHN0cnVjdCBhdDkxbWNpX2hvc3QKQEAgLTExNiw5ICsxMDEsMTQgQEAKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZDsKIAlzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcXVlc3Q7CiAKKwl2b2lkIF9faW9tZW0gKmJhc2VhZGRyOworCWludCBpcnE7CisKIAlzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqYm9hcmQ7CiAJaW50IHByZXNlbnQ7CiAKKwlzdHJ1Y3QgY2xrICptY2lfY2xrOworCiAJLyoKIAkgKiBGbGFnIGluZGljYXRpbmcgd2hlbiB0aGUgY29tbWFuZCBoYXMgYmVlbiBzZW50LiBUaGlzIGlzIHVzZWQgdG8KIAkgKiB3b3JrIG91dCB3aGV0aGVyIG9yIG5vdCB0byBzZW5kIHRoZSBzdG9wCkBAIC0xNTgsNyArMTQ4LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAkJaW50IGFtb3VudDsKLQkJaW50IGluZGV4OwogCQl1bnNpZ25lZCBpbnQgKnNnYnVmZmVyOwogCiAJCXNnID0gJmRhdGEtPnNnW2ldOwpAQCAtMTY2LDEwICsxNTUsMTUgQEAKIAkJc2didWZmZXIgPSBrbWFwX2F0b21pYyhzZy0+cGFnZSwgS01fQklPX1NSQ19JUlEpICsgc2ctPm9mZnNldDsKIAkJYW1vdW50ID0gbWluKHNpemUsIHNnLT5sZW5ndGgpOwogCQlzaXplIC09IGFtb3VudDsKLQkJYW1vdW50IC89IDQ7CiAKLQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYW1vdW50OyBpbmRleCsrKQotCQkJKmRtYWJ1ZisrID0gc3dhYjMyKHNnYnVmZmVyW2luZGV4XSk7CisJCWlmIChjcHVfaXNfYXQ5MXJtOTIwMCgpKSB7CS8qIEFUOTFSTTkyMDAgZXJyYXRhICovCisJCQlpbnQgaW5kZXg7CisKKwkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IChhbW91bnQgLyA0KTsgaW5kZXgrKykKKwkJCQkqZG1hYnVmKysgPSBzd2FiMzIoc2didWZmZXJbaW5kZXhdKTsKKwkJfQorCQllbHNlCisJCQltZW1jcHkoZG1hYnVmLCBzZ2J1ZmZlciwgYW1vdW50KTsKIAogCQlrdW5tYXBfYXRvbWljKHNnYnVmZmVyLCBLTV9CSU9fU1JDX0lSUSk7CiAKQEAgLTIxNywxMyArMjExLDEzIEBACiAKIAkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgbmVlZHMgZmlsbGluZyAqLwogCQlpZiAoaSA9PSAwKSB7Ci0JCQlpZiAoYXQ5MV9tY2lfcmVhZChBVDkxX1BEQ19SQ1IpICE9IDApIHsKKwkJCWlmIChhdDkxX21jaV9yZWFkKGhvc3QsIEFUOTFfUERDX1JDUikgIT0gMCkgewogCQkJCXByX2RlYnVnKCJUcmFuc2ZlciBhY3RpdmUgaW4gY3VycmVudFxuIik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KIAkJZWxzZSB7Ci0JCQlpZiAoYXQ5MV9tY2lfcmVhZChBVDkxX1BEQ19STkNSKSAhPSAwKSB7CisJCQlpZiAoYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX1BEQ19STkNSKSAhPSAwKSB7CiAJCQkJcHJfZGVidWcoIlRyYW5zZmVyIGFjdGl2ZSBpbiBuZXh0XG4iKTsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTI0MCwxMiArMjM0LDEyIEBACiAJCXByX2RlYnVnKCJkbWEgYWRkcmVzcyA9ICUwOFgsIGxlbmd0aCA9ICVkXG4iLCBzZy0+ZG1hX2FkZHJlc3MsIHNnLT5sZW5ndGgpOwogCiAJCWlmIChpID09IDApIHsKLQkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JQUiwgc2ctPmRtYV9hZGRyZXNzKTsKLQkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JDUiwgc2ctPmxlbmd0aCAvIDQpOworCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUlBSLCBzZy0+ZG1hX2FkZHJlc3MpOworCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUkNSLCBzZy0+bGVuZ3RoIC8gNCk7CiAJCX0KIAkJZWxzZSB7Ci0JCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19STlBSLCBzZy0+ZG1hX2FkZHJlc3MpOwotCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUk5DUiwgc2ctPmxlbmd0aCAvIDQpOworCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUk5QUiwgc2ctPmRtYV9hZGRyZXNzKTsKKwkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1JOQ1IsIHNnLT5sZW5ndGggLyA0KTsKIAkJfQogCX0KIApAQCAtMjc2LDggKzI3MCw2IEBACiAKIAl3aGlsZSAoaG9zdC0+aW5fdXNlX2luZGV4IDwgaG9zdC0+dHJhbnNmZXJfaW5kZXgpIHsKIAkJdW5zaWduZWQgaW50ICpidWZmZXI7Ci0JCWludCBpbmRleDsKLQkJaW50IGxlbjsKIAogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCkBAIC0yOTUsMTEgKzI4NywxMyBAQAogCiAJCWRhdGEtPmJ5dGVzX3hmZXJlZCArPSBzZy0+bGVuZ3RoOwogCi0JCWxlbiA9IHNnLT5sZW5ndGggLyA0OworCQlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkgewkvKiBBVDkxUk05MjAwIGVycmF0YSAqLworCQkJaW50IGluZGV4OwogCi0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgewotCQkJYnVmZmVyW2luZGV4XSA9IHN3YWIzMihidWZmZXJbaW5kZXhdKTsKKwkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IChzZy0+bGVuZ3RoIC8gNCk7IGluZGV4KyspCisJCQkJYnVmZmVyW2luZGV4XSA9IHN3YWIzMihidWZmZXJbaW5kZXhdKTsKIAkJfQorCiAJCWt1bm1hcF9hdG9taWMoYnVmZmVyLCBLTV9CSU9fU1JDX0lSUSk7CiAJCWZsdXNoX2RjYWNoZV9wYWdlKHNnLT5wYWdlKTsKIAl9CkBAIC0zMDgsOCArMzAyLDggQEAKIAlpZiAoaG9zdC0+dHJhbnNmZXJfaW5kZXggPCBkYXRhLT5zZ19sZW4pCiAJCWF0OTFtY2lfcHJlX2RtYV9yZWFkKGhvc3QpOwogCWVsc2UgewotCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRVIsIEFUOTFfTUNJX1JYQlVGRik7Ci0JCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1JYVERJUyB8IEFUOTFfUERDX1RYVERJUyk7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0lFUiwgQVQ5MV9NQ0lfUlhCVUZGKTsKKwkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUFRDUiwgQVQ5MV9QRENfUlhURElTIHwgQVQ5MV9QRENfVFhURElTKTsKIAl9CiAKIAlwcl9kZWJ1ZygicG9zdCBkbWEgcmVhZCBkb25lXG4iKTsKQEAgLTMyNiwxMSArMzIwLDExIEBACiAJcHJfZGVidWcoIkhhbmRsaW5nIHRoZSB0cmFuc21pdFxuIik7CiAKIAkvKiBEaXNhYmxlIHRoZSB0cmFuc2ZlciAqLwotCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1JYVERJUyB8IEFUOTFfUERDX1RYVERJUyk7CisJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUFRDUiwgQVQ5MV9QRENfUlhURElTIHwgQVQ5MV9QRENfVFhURElTKTsKIAogCS8qIE5vdyB3YWl0IGZvciBjbWQgcmVhZHkgKi8KLQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRFIsIEFUOTFfTUNJX1RYQlVGRSk7Ci0JYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfSUVSLCBBVDkxX01DSV9OT1RCVVNZKTsKKwlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9JRFIsIEFUOTFfTUNJX1RYQlVGRSk7CisJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfSUVSLCBBVDkxX01DSV9OT1RCVVNZKTsKIAogCWNtZCA9IGhvc3QtPmNtZDsKIAlpZiAoIWNtZCkgcmV0dXJuOwpAQCAtMzQ0LDIxICszMzgsMjMgQEAKIC8qCiAgKiBFbmFibGUgdGhlIGNvbnRyb2xsZXIKICAqLwotc3RhdGljIHZvaWQgYXQ5MV9tY2lfZW5hYmxlKHZvaWQpCitzdGF0aWMgdm9pZCBhdDkxX21jaV9lbmFibGUoc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCkKIHsKLQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9DUiwgQVQ5MV9NQ0lfTUNJRU4pOwotCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0lEUiwgMHhGRkZGRkZGRik7Ci0JYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfRFRPUiwgQVQ5MV9NQ0lfRFRPTVVMXzFNIHwgQVQ5MV9NQ0lfRFRPQ1lDKTsKLQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9NUiwgMHg4MzRBKTsKLQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9TRENSLCAweDApOworCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0NSLCBBVDkxX01DSV9NQ0lFTik7CisJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfSURSLCAweGZmZmZmZmZmKTsKKwlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9EVE9SLCBBVDkxX01DSV9EVE9NVUxfMU0gfCBBVDkxX01DSV9EVE9DWUMpOworCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX01SLCBBVDkxX01DSV9QRENNT0RFIHwgMHgzNGEpOworCisJLyogdXNlIFNsb3QgQSBvciBCIChvbmx5IG9uZSBhdCBzYW1lIHRpbWUpICovCisJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfU0RDUiwgaG9zdC0+Ym9hcmQtPnNsb3RfYik7CiB9CiAKIC8qCiAgKiBEaXNhYmxlIHRoZSBjb250cm9sbGVyCiAgKi8KLXN0YXRpYyB2b2lkIGF0OTFfbWNpX2Rpc2FibGUodm9pZCkKK3N0YXRpYyB2b2lkIGF0OTFfbWNpX2Rpc2FibGUoc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCkKIHsKLQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9DUiwgQVQ5MV9NQ0lfTUNJRElTIHwgQVQ5MV9NQ0lfU1dSU1QpOworCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0NSLCBBVDkxX01DSV9NQ0lESVMgfCBBVDkxX01DSV9TV1JTVCk7CiB9CiAKIC8qCkBAIC0zNzgsMTMgKzM3NCwxMyBAQAogCiAJLyogTm90IHN1cmUgaWYgdGhpcyBpcyBuZWVkZWQgKi8KICNpZiAwCi0JaWYgKChhdDkxX21jaV9yZWFkKEFUOTFfTUNJX1NSKSAmIEFUOTFfTUNJX1JUT0UpICYmIChjbWQtPm9wY29kZSA9PSAxKSkgeworCWlmICgoYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9TUikgJiBBVDkxX01DSV9SVE9FKSAmJiAoY21kLT5vcGNvZGUgPT0gMSkpIHsKIAkJcHJfZGVidWcoIkNsZWFyaW5nIHRpbWVvdXRcbiIpOwotCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9BUkdSLCAwKTsKLQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfQ01EUiwgQVQ5MV9NQ0lfT1BEQ01EKTsKLQkJd2hpbGUgKCEoYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9TUikgJiBBVDkxX01DSV9DTURSRFkpKSB7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0FSR1IsIDApOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9DTURSLCBBVDkxX01DSV9PUERDTUQpOworCQl3aGlsZSAoIShhdDkxX21jaV9yZWFkKGhvc3QsIEFUOTFfTUNJX1NSKSAmIEFUOTFfTUNJX0NNRFJEWSkpIHsKIAkJCS8qIHNwaW4gKi8KLQkJCXByX2RlYnVnKCJDbGVhcmluZzogU1IgPSAlMDhYXG4iLCBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX1NSKSk7CisJCQlwcl9kZWJ1ZygiQ2xlYXJpbmc6IFNSID0gJTA4WFxuIiwgYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9TUikpOwogCQl9CiAJfQogI2VuZGlmCkBAIC00MzEsMzIgKzQyNywzMiBAQAogCS8qCiAJICogU2V0IHRoZSBhcmd1bWVudHMgYW5kIHNlbmQgdGhlIGNvbW1hbmQKIAkgKi8KLQlwcl9kZWJ1ZygiU2VuZGluZyBjb21tYW5kICVkIGFzICUwOFgsIGFyZyA9ICUwOFgsIGJsb2NrcyA9ICVkLCBsZW5ndGggPSAlZCAoTVIgPSAlMDhsWClcbiIsCi0JCWNtZC0+b3Bjb2RlLCBjbWRyLCBjbWQtPmFyZywgYmxvY2tzLCBibG9ja19sZW5ndGgsIGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfTVIpKTsKKwlwcl9kZWJ1ZygiU2VuZGluZyBjb21tYW5kICVkIGFzICUwOFgsIGFyZyA9ICUwOFgsIGJsb2NrcyA9ICVkLCBsZW5ndGggPSAlZCAoTVIgPSAlMDhYKVxuIiwKKwkJY21kLT5vcGNvZGUsIGNtZHIsIGNtZC0+YXJnLCBibG9ja3MsIGJsb2NrX2xlbmd0aCwgYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9NUikpOwogCiAJaWYgKCFkYXRhKSB7Ci0JCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1RYVERJUyB8IEFUOTFfUERDX1JYVERJUyk7Ci0JCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JQUiwgMCk7Ci0JCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JDUiwgMCk7Ci0JCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1JOUFIsIDApOwotCQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19STkNSLCAwKTsKLQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfVFBSLCAwKTsKLQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfVENSLCAwKTsKLQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfVE5QUiwgMCk7Ci0JCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1ROQ1IsIDApOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19UWFRESVMgfCBBVDkxX1BEQ19SWFRESVMpOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19SUFIsIDApOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19SQ1IsIDApOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19STlBSLCAwKTsKKwkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUk5DUiwgMCk7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1RQUiwgMCk7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1RDUiwgMCk7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1ROUFIsIDApOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19UTkNSLCAwKTsKIAotCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9BUkdSLCBjbWQtPmFyZyk7Ci0JCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0NNRFIsIGNtZHIpOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9BUkdSLCBjbWQtPmFyZyk7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0NNRFIsIGNtZHIpOwogCQlyZXR1cm4gQVQ5MV9NQ0lfQ01EUkRZOwogCX0KIAotCW1yID0gYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9NUikgJiAweDdmZmY7CS8qIHplcm8gYmxvY2sgbGVuZ3RoIGFuZCBQREMgbW9kZSAqLwotCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX01SLCBtciB8IChibG9ja19sZW5ndGggPDwgMTYpIHwgQVQ5MV9NQ0lfUERDTU9ERSk7CisJbXIgPSBhdDkxX21jaV9yZWFkKGhvc3QsIEFUOTFfTUNJX01SKSAmIDB4N2ZmZjsJLyogemVybyBibG9jayBsZW5ndGggYW5kIFBEQyBtb2RlICovCisJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfTVIsIG1yIHwgKGJsb2NrX2xlbmd0aCA8PCAxNikgfCBBVDkxX01DSV9QRENNT0RFKTsKIAogCS8qCiAJICogRGlzYWJsZSB0aGUgUERDIGNvbnRyb2xsZXIKIAkgKi8KLQlhdDkxX21jaV93cml0ZShBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRESVMgfCBBVDkxX1BEQ19UWFRESVMpOworCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1JYVERJUyB8IEFUOTFfUERDX1RYVERJUyk7CiAKIAlpZiAoY21kciAmIEFUOTFfTUNJX1RSQ01EX1NUQVJUKSB7CiAJCWRhdGEtPmJ5dGVzX3hmZXJlZCA9IDA7CkBAIC00ODUsOCArNDgxLDggQEAKIAogCQkJcHJfZGVidWcoIlRyYW5zbWl0dGluZyAlZCBieXRlc1xuIiwgaG9zdC0+dG90YWxfbGVuZ3RoKTsKIAotCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfVFBSLCBob3N0LT5waHlzaWNhbF9hZGRyZXNzKTsKLQkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1RDUiwgaG9zdC0+dG90YWxfbGVuZ3RoIC8gNCk7CisJCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX1BEQ19UUFIsIGhvc3QtPnBoeXNpY2FsX2FkZHJlc3MpOworCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfVENSLCBob3N0LT50b3RhbF9sZW5ndGggLyA0KTsKIAkJCWllciA9IEFUOTFfTUNJX1RYQlVGRTsKIAkJfQogCX0KQEAgLTQ5NiwxNCArNDkyLDE0IEBACiAJICogdGhlIGRhdGEgc2hlZXQgc2F5cwogCSAqLwogCi0JYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfQVJHUiwgY21kLT5hcmcpOwotCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0NNRFIsIGNtZHIpOworCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0FSR1IsIGNtZC0+YXJnKTsKKwlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9DTURSLCBjbWRyKTsKIAogCWlmIChjbWRyICYgQVQ5MV9NQ0lfVFJDTURfU1RBUlQpIHsKIAkJaWYgKGNtZHIgJiBBVDkxX01DSV9UUkRJUikKLQkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1JYVEVOKTsKKwkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfUERDX1BUQ1IsIEFUOTFfUERDX1JYVEVOKTsKIAkJZWxzZQotCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9QRENfUFRDUiwgQVQ5MV9QRENfVFhURU4pOworCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9QRENfUFRDUiwgQVQ5MV9QRENfVFhURU4pOwogCX0KIAlyZXR1cm4gaWVyOwogfQpAQCAtNTIwLDcgKzUxNiw3IEBACiAJcHJfZGVidWcoInNldHRpbmcgaWVyIHRvICUwOFhcbiIsIGllcik7CiAKIAkvKiBTdG9wIG9uIGVycm9ycyBvciB0aGUgcmVxdWlyZWQgdmFsdWUgKi8KLQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRVIsIDB4ZmZmZjAwMDAgfCBpZXIpOworCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0lFUiwgQVQ5MV9NQ0lfRVJST1JTIHwgaWVyKTsKIH0KIAogLyoKQEAgLTU0OCwxOSArNTQ0LDE5IEBACiAJc3RydWN0IG1tY19jb21tYW5kICpjbWQgPSBob3N0LT5jbWQ7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAotCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX0lEUiwgMHhmZmZmZmZmZik7CisJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfSURSLCAweGZmZmZmZmZmKTsKIAotCWNtZC0+cmVzcFswXSA9IGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfUlNQUigwKSk7Ci0JY21kLT5yZXNwWzFdID0gYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9SU1BSKDEpKTsKLQljbWQtPnJlc3BbMl0gPSBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX1JTUFIoMikpOwotCWNtZC0+cmVzcFszXSA9IGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfUlNQUigzKSk7CisJY21kLT5yZXNwWzBdID0gYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9SU1BSKDApKTsKKwljbWQtPnJlc3BbMV0gPSBhdDkxX21jaV9yZWFkKGhvc3QsIEFUOTFfTUNJX1JTUFIoMSkpOworCWNtZC0+cmVzcFsyXSA9IGF0OTFfbWNpX3JlYWQoaG9zdCwgQVQ5MV9NQ0lfUlNQUigyKSk7CisJY21kLT5yZXNwWzNdID0gYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9SU1BSKDMpKTsKIAogCWlmIChob3N0LT5idWZmZXIpIHsKIAkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgaG9zdC0+dG90YWxfbGVuZ3RoLCBob3N0LT5idWZmZXIsIGhvc3QtPnBoeXNpY2FsX2FkZHJlc3MpOwogCQlob3N0LT5idWZmZXIgPSBOVUxMOwogCX0KIAotCXN0YXR1cyA9IGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfU1IpOworCXN0YXR1cyA9IGF0OTFfbWNpX3JlYWQoaG9zdCwgQVQ5MV9NQ0lfU1IpOwogCiAJcHJfZGVidWcoIlN0YXR1cyA9ICUwOFggWyUwOFggJTA4WCAlMDhYICUwOFhdXG4iLAogCQkgc3RhdHVzLCBjbWQtPnJlc3BbMF0sIGNtZC0+cmVzcFsxXSwgY21kLT5yZXNwWzJdLCBjbWQtPnJlc3BbM10pOwpAQCAtNjExLDE4ICs2MDcsMTggQEAKIHsKIAlpbnQgY2xrZGl2OwogCXN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCXVuc2lnbmVkIGxvbmcgYXQ5MV9tYXN0ZXJfY2xvY2sgPSBjbGtfZ2V0X3JhdGUobWNpX2Nsayk7CisJdW5zaWduZWQgbG9uZyBhdDkxX21hc3Rlcl9jbG9jayA9IGNsa19nZXRfcmF0ZShob3N0LT5tY2lfY2xrKTsKIAogCWhvc3QtPmJ1c19tb2RlID0gaW9zLT5idXNfbW9kZTsKIAogCWlmIChpb3MtPmNsb2NrID09IDApIHsKIAkJLyogRGlzYWJsZSB0aGUgTUNJIGNvbnRyb2xsZXIgKi8KLQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfQ1IsIEFUOTFfTUNJX01DSURJUyk7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0NSLCBBVDkxX01DSV9NQ0lESVMpOwogCQljbGtkaXYgPSAwOwogCX0KIAllbHNlIHsKIAkJLyogRW5hYmxlIHRoZSBNQ0kgY29udHJvbGxlciAqLwotCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9DUiwgQVQ5MV9NQ0lfTUNJRU4pOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9DUiwgQVQ5MV9NQ0lfTUNJRU4pOwogCiAJCWlmICgoYXQ5MV9tYXN0ZXJfY2xvY2sgJSAoaW9zLT5jbG9jayAqIDIpKSA9PSAwKQogCQkJY2xrZGl2ID0gKChhdDkxX21hc3Rlcl9jbG9jayAvIGlvcy0+Y2xvY2spIC8gMikgLSAxOwpAQCAtNjM0LDI1ICs2MzAsMjUgQEAKIAl9CiAJaWYgKGlvcy0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCAmJiBob3N0LT5ib2FyZC0+d2lyZTQpIHsKIAkJcHJfZGVidWcoIk1NQzogU2V0dGluZyBjb250cm9sbGVyIGJ1cyB3aWR0aCB0byA0XG4iKTsKLQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfU0RDUiwgYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9TRENSKSB8IEFUOTFfTUNJX1NEQ0JVUyk7CisJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX1NEQ1IsIGF0OTFfbWNpX3JlYWQoaG9zdCwgQVQ5MV9NQ0lfU0RDUikgfCBBVDkxX01DSV9TRENCVVMpOwogCX0KIAllbHNlIHsKIAkJcHJfZGVidWcoIk1NQzogU2V0dGluZyBjb250cm9sbGVyIGJ1cyB3aWR0aCB0byAxXG4iKTsKLQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfU0RDUiwgYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9TRENSKSAmIH5BVDkxX01DSV9TRENCVVMpOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9TRENSLCBhdDkxX21jaV9yZWFkKGhvc3QsIEFUOTFfTUNJX1NEQ1IpICYgfkFUOTFfTUNJX1NEQ0JVUyk7CiAJfQogCiAJLyogU2V0IHRoZSBjbG9jayBkaXZpZGVyICovCi0JYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfTVIsIChhdDkxX21jaV9yZWFkKEFUOTFfTUNJX01SKSAmIH5BVDkxX01DSV9DTEtESVYpIHwgY2xrZGl2KTsKKwlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9NUiwgKGF0OTFfbWNpX3JlYWQoaG9zdCwgQVQ5MV9NQ0lfTVIpICYgfkFUOTFfTUNJX0NMS0RJVikgfCBjbGtkaXYpOwogCiAJLyogbWF5YmUgc3dpdGNoIHBvd2VyIHRvIHRoZSBjYXJkICovCiAJaWYgKGhvc3QtPmJvYXJkLT52Y2NfcGluKSB7CiAJCXN3aXRjaCAoaW9zLT5wb3dlcl9tb2RlKSB7CiAJCQljYXNlIE1NQ19QT1dFUl9PRkY6Ci0JCQkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoaG9zdC0+Ym9hcmQtPnZjY19waW4sIDApOworCQkJCWF0OTFfc2V0X2dwaW9fdmFsdWUoaG9zdC0+Ym9hcmQtPnZjY19waW4sIDApOwogCQkJCWJyZWFrOwogCQkJY2FzZSBNTUNfUE9XRVJfVVA6CiAJCQljYXNlIE1NQ19QT1dFUl9PTjoKLQkJCQlhdDkxX3NldF9ncGlvX291dHB1dChob3N0LT5ib2FyZC0+dmNjX3BpbiwgMSk7CisJCQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZShob3N0LT5ib2FyZC0+dmNjX3BpbiwgMSk7CiAJCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC02NjUsMzkgKzY2MSw0MCBAQAogewogCXN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QgPSBkZXZpZDsKIAlpbnQgY29tcGxldGVkID0gMDsKKwl1bnNpZ25lZCBpbnQgaW50X3N0YXR1cywgaW50X21hc2s7CiAKLQl1bnNpZ25lZCBpbnQgaW50X3N0YXR1czsKKwlpbnRfc3RhdHVzID0gYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9TUik7CisJaW50X21hc2sgPSBhdDkxX21jaV9yZWFkKGhvc3QsIEFUOTFfTUNJX0lNUik7CisJCisJcHJfZGVidWcoIk1DSSBpcnE6IHN0YXR1cyA9ICUwOFgsICUwOFgsICUwOFhcbiIsIGludF9zdGF0dXMsIGludF9tYXNrLAorCQlpbnRfc3RhdHVzICYgaW50X21hc2spOworCQorCWludF9zdGF0dXMgPSBpbnRfc3RhdHVzICYgaW50X21hc2s7CiAKLQlpbnRfc3RhdHVzID0gYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9TUik7Ci0JcHJfZGVidWcoIk1DSSBpcnE6IHN0YXR1cyA9ICUwOFgsICUwOGxYLCAlMDhsWFxuIiwgaW50X3N0YXR1cywgYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9JTVIpLAotCQlpbnRfc3RhdHVzICYgYXQ5MV9tY2lfcmVhZChBVDkxX01DSV9JTVIpKTsKLQotCWlmICgoaW50X3N0YXR1cyAmIGF0OTFfbWNpX3JlYWQoQVQ5MV9NQ0lfSU1SKSkgJiAweGZmZmYwMDAwKQorCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfRVJST1JTKSB7CiAJCWNvbXBsZXRlZCA9IDE7CisJCQorCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1VOUkUpCisJCQlwcl9kZWJ1ZygiTU1DOiBVbmRlcnJ1biBlcnJvclxuIik7CisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfT1ZSRSkKKwkJCXByX2RlYnVnKCJNTUM6IE92ZXJydW4gZXJyb3JcbiIpOworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0RUT0UpCisJCQlwcl9kZWJ1ZygiTU1DOiBEYXRhIHRpbWVvdXRcbiIpOworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0RDUkNFKQorCQkJcHJfZGVidWcoIk1NQzogQ1JDIGVycm9yIGluIGRhdGFcbiIpOworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JUT0UpCisJCQlwcl9kZWJ1ZygiTU1DOiBSZXNwb25zZSB0aW1lb3V0XG4iKTsKKwkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9SRU5ERSkKKwkJCXByX2RlYnVnKCJNTUM6IFJlc3BvbnNlIGVuZCBiaXQgZXJyb3JcbiIpOworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JDUkNFKQorCQkJcHJfZGVidWcoIk1NQzogUmVzcG9uc2UgQ1JDIGVycm9yXG4iKTsKKwkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9SRElSRSkKKwkJCXByX2RlYnVnKCJNTUM6IFJlc3BvbnNlIGRpcmVjdGlvbiBlcnJvclxuIik7CisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfUklOREUpCisJCQlwcl9kZWJ1ZygiTU1DOiBSZXNwb25zZSBpbmRleCBlcnJvclxuIik7CisJfSBlbHNlIHsKKwkJLyogT25seSBjb250aW51ZSBwcm9jZXNzaW5nIGlmIG5vIGVycm9ycyAqLwogCi0JaW50X3N0YXR1cyAmPSBhdDkxX21jaV9yZWFkKEFUOTFfTUNJX0lNUik7Ci0KLQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1VOUkUpCi0JCXByX2RlYnVnKCJNTUM6IFVuZGVycnVuIGVycm9yXG4iKTsKLQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX09WUkUpCi0JCXByX2RlYnVnKCJNTUM6IE92ZXJydW4gZXJyb3JcbiIpOwotCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfRFRPRSkKLQkJcHJfZGVidWcoIk1NQzogRGF0YSB0aW1lb3V0XG4iKTsKLQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0RDUkNFKQotCQlwcl9kZWJ1ZygiTU1DOiBDUkMgZXJyb3IgaW4gZGF0YVxuIik7Ci0JaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9SVE9FKQotCQlwcl9kZWJ1ZygiTU1DOiBSZXNwb25zZSB0aW1lb3V0XG4iKTsKLQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JFTkRFKQotCQlwcl9kZWJ1ZygiTU1DOiBSZXNwb25zZSBlbmQgYml0IGVycm9yXG4iKTsKLQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JDUkNFKQotCQlwcl9kZWJ1ZygiTU1DOiBSZXNwb25zZSBDUkMgZXJyb3JcbiIpOwotCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfUkRJUkUpCi0JCXByX2RlYnVnKCJNTUM6IFJlc3BvbnNlIGRpcmVjdGlvbiBlcnJvclxuIik7Ci0JaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9SSU5ERSkKLQkJcHJfZGVidWcoIk1NQzogUmVzcG9uc2UgaW5kZXggZXJyb3JcbiIpOwotCi0JLyogT25seSBjb250aW51ZSBwcm9jZXNzaW5nIGlmIG5vIGVycm9ycyAqLwotCWlmICghY29tcGxldGVkKSB7CiAJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfVFhCVUZFKSB7CiAJCQlwcl9kZWJ1ZygiVFggYnVmZmVyIGVtcHR5XG4iKTsKIAkJCWF0OTFfbWNpX2hhbmRsZV90cmFuc21pdHRlZChob3N0KTsKQEAgLTcwNSwxMiArNzAyLDExIEBACiAKIAkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9SWEJVRkYpIHsKIAkJCXByX2RlYnVnKCJSWCBidWZmZXIgZnVsbFxuIik7Ci0JCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRVIsIEFUOTFfTUNJX0NNRFJEWSk7CisJCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9JRVIsIEFUOTFfTUNJX0NNRFJEWSk7CiAJCX0KIAotCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0VORFRYKSB7CisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfRU5EVFgpCiAJCQlwcl9kZWJ1ZygiVHJhbnNtaXQgaGFzIGVuZGVkXG4iKTsKLQkJfQogCiAJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfRU5EUlgpIHsKIAkJCXByX2RlYnVnKCJSZWNlaXZlIGhhcyBlbmRlZFxuIik7CkBAIC03MTksMzcgKzcxNSwzMyBAQAogCiAJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfTk9UQlVTWSkgewogCQkJcHJfZGVidWcoIkNhcmQgaXMgcmVhZHlcbiIpOwotCQkJYXQ5MV9tY2lfd3JpdGUoQVQ5MV9NQ0lfSUVSLCBBVDkxX01DSV9DTURSRFkpOworCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfSUVSLCBBVDkxX01DSV9DTURSRFkpOwogCQl9CiAKLQkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9EVElQKSB7CisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfRFRJUCkKIAkJCXByX2RlYnVnKCJEYXRhIHRyYW5zZmVyIGluIHByb2dyZXNzXG4iKTsKLQkJfQogCi0JCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfQkxLRSkgeworCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0JMS0UpCiAJCQlwcl9kZWJ1ZygiQmxvY2sgdHJhbnNmZXIgaGFzIGVuZGVkXG4iKTsKLQkJfQogCi0JCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfVFhSRFkpIHsKKwkJaWYgKGludF9zdGF0dXMgJiBBVDkxX01DSV9UWFJEWSkKIAkJCXByX2RlYnVnKCJSZWFkeSB0byB0cmFuc21pdFxuIik7Ci0JCX0KIAotCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX1JYUkRZKSB7CisJCWlmIChpbnRfc3RhdHVzICYgQVQ5MV9NQ0lfUlhSRFkpCiAJCQlwcl9kZWJ1ZygiUmVhZHkgdG8gcmVjZWl2ZVxuIik7Ci0JCX0KIAogCQlpZiAoaW50X3N0YXR1cyAmIEFUOTFfTUNJX0NNRFJEWSkgewogCQkJcHJfZGVidWcoIkNvbW1hbmQgcmVhZHlcbiIpOwogCQkJY29tcGxldGVkID0gMTsKIAkJfQogCX0KLQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRFIsIGludF9zdGF0dXMpOwogCiAJaWYgKGNvbXBsZXRlZCkgewogCQlwcl9kZWJ1ZygiQ29tcGxldGVkIGNvbW1hbmRcbiIpOwotCQlhdDkxX21jaV93cml0ZShBVDkxX01DSV9JRFIsIDB4ZmZmZmZmZmYpOworCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9JRFIsIDB4ZmZmZmZmZmYpOwogCQlhdDkxbWNpX2NvbXBsZXRlZF9jb21tYW5kKGhvc3QpOwotCX0KKwl9IGVsc2UKKwkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfSURSLCBpbnRfc3RhdHVzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTc2OSwxNCArNzYxLDE0IEBACiAJCQlwcmVzZW50ID8gImluc2VydCIgOiAicmVtb3ZlIik7CiAJCWlmICghcHJlc2VudCkgewogCQkJcHJfZGVidWcoIioqKioqKiBSZXNldHRpbmcgU0QtY2FyZCBidXMgd2lkdGggKioqKioqXG4iKTsKLQkJCWF0OTFfbWNpX3dyaXRlKEFUOTFfTUNJX1NEQ1IsIDApOworCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfU0RDUiwgYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9TRENSKSAmIH5BVDkxX01DSV9TRENCVVMpOwogCQl9CiAJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgbXNlY3NfdG9famlmZmllcygxMDApKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgYXQ5MV9tY2lfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQorc3RhdGljIGludCBhdDkxX21jaV9nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCiB7CiAJaW50IHJlYWRfb25seSA9IDA7CiAJc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CkBAIC04MDIsMTkgKzc5NCwyNiBAQAogLyoKICAqIFByb2JlIGZvciB0aGUgZGV2aWNlCiAgKi8KLXN0YXRpYyBpbnQgYXQ5MV9tY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfbWNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWM7CiAJc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCiAJcHJfZGVidWcoIlByb2JlIE1DSSBkZXZpY2VzXG4iKTsKLQlhdDkxX21jaV9kaXNhYmxlKCk7Ci0JYXQ5MV9tY2lfZW5hYmxlKCk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOWElPOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgRFJJVkVSX05BTUUpKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBhdDkxbWNpX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewogCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGFsbG9jYXRlIG1tYyBob3N0XG4iKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTgzMywzMCArODMyLDUxIEBACiAjaWZkZWYgU1VQUE9SVF80V0lSRQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwogI2Vsc2UKLQkJcHJpbnRrKCJNTUM6IDQgd2lyZSBidXMgbW9kZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyIC0gdXNpbmcgMSB3aXJlXG4iKTsKKwkJcHJpbnRrKCJBVDkxIE1NQzogNCB3aXJlIGJ1cyBtb2RlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgLSB1c2luZyAxIHdpcmVcbiIpOwogI2VuZGlmCiAJfQogCiAJLyoKIAkgKiBHZXQgQ2xvY2sKIAkgKi8KLQltY2lfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWNpX2NsayIpOwotCWlmIChJU19FUlIobWNpX2NsaykpIHsKKwlob3N0LT5tY2lfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWNpX2NsayIpOworCWlmIChJU19FUlIoaG9zdC0+bWNpX2NsaykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJBVDkxIE1NQzogbm8gY2xvY2sgZGVmaW5lZC5cbiIpOwogCQltbWNfZnJlZV9ob3N0KG1tYyk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWNsa19lbmFibGUobWNpX2Nsayk7CQkJLyogRW5hYmxlIHRoZSBwZXJpcGhlcmFsIGNsb2NrICovCisKKwkvKgorCSAqIE1hcCBJL08gcmVnaW9uCisJICovCisJaG9zdC0+YmFzZWFkZHIgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghaG9zdC0+YmFzZWFkZHIpIHsKKwkJY2xrX3B1dChob3N0LT5tY2lfY2xrKTsKKwkJbW1jX2ZyZWVfaG9zdChtbWMpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogUmVzZXQgaGFyZHdhcmUKKwkgKi8KKwljbGtfZW5hYmxlKGhvc3QtPm1jaV9jbGspOwkJLyogRW5hYmxlIHRoZSBwZXJpcGhlcmFsIGNsb2NrICovCisJYXQ5MV9tY2lfZGlzYWJsZShob3N0KTsKKwlhdDkxX21jaV9lbmFibGUoaG9zdCk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBNQ0kgaW50ZXJydXB0CiAJICovCi0JcmV0ID0gcmVxdWVzdF9pcnEoQVQ5MVJNOTIwMF9JRF9NQ0ksIGF0OTFfbWNpX2lycSwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBob3N0KTsKKwlob3N0LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgYXQ5MV9tY2lfaXJxLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUsIGhvc3QpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBNQ0kgaW50ZXJydXB0XG4iKTsKLQkJY2xrX2Rpc2FibGUobWNpX2Nsayk7Ci0JCWNsa19wdXQobWNpX2Nsayk7CisJCXByaW50ayhLRVJOX0VSUiAiQVQ5MSBNTUM6IEZhaWxlZCB0byByZXF1ZXN0IE1DSSBpbnRlcnJ1cHRcbiIpOworCQljbGtfZGlzYWJsZShob3N0LT5tY2lfY2xrKTsKKwkJY2xrX3B1dChob3N0LT5tY2lfY2xrKTsKIAkJbW1jX2ZyZWVfaG9zdChtbWMpOworCQlpb3VubWFwKGhvc3QtPmJhc2VhZGRyKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtODc5LDEwICs4OTksMTAgQEAKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaG9zdC0+Ym9hcmQtPmRldF9waW4sIGF0OTFfbW1jX2RldF9pcnEsCiAJCQkJMCwgRFJJVkVSX05BTUUsIGhvc3QpOwogCQlpZiAocmV0KQotCQkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZG4ndCBhbGxvY2F0ZSBNTUMgZGV0ZWN0IGlycVxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIkFUOTEgTU1DOiBDb3VsZG4ndCBhbGxvY2F0ZSBNTUMgZGV0ZWN0IGlycVxuIik7CiAJfQogCi0JcHJfZGVidWcoS0VSTl9JTkZPICJBZGRlZCBNQ0kgZHJpdmVyXG4iKTsKKwlwcl9kZWJ1ZygiQWRkZWQgTUNJIGRyaXZlclxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg5MCwxMCArOTEwLDExIEBACiAvKgogICogUmVtb3ZlIGEgZGV2aWNlCiAgKi8KLXN0YXRpYyBpbnQgYXQ5MV9tY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBhdDkxX21jaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlpZiAoIW1tYykKIAkJcmV0dXJuIC0xOwpAQCAtOTA1LDE2ICs5MjYsMTkgQEAKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmaG9zdC0+bW1jLT5kZXRlY3QpOwogCX0KIAorCWF0OTFfbWNpX2Rpc2FibGUoaG9zdCk7CiAJbW1jX3JlbW92ZV9ob3N0KG1tYyk7Ci0JYXQ5MV9tY2lfZGlzYWJsZSgpOwotCWZyZWVfaXJxKEFUOTFSTTkyMDBfSURfTUNJLCBob3N0KTsKKwlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOworCisJY2xrX2Rpc2FibGUoaG9zdC0+bWNpX2Nsayk7CQkJLyogRGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBjbG9jayAqLworCWNsa19wdXQoaG9zdC0+bWNpX2Nsayk7CisKKwlpb3VubWFwKGhvc3QtPmJhc2VhZGRyKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwogCW1tY19mcmVlX2hvc3QobW1jKTsKLQotCWNsa19kaXNhYmxlKG1jaV9jbGspOwkJCQkvKiBEaXNhYmxlIHRoZSBwZXJpcGhlcmFsIGNsb2NrICovCi0JY2xrX3B1dChtY2lfY2xrKTsKLQogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCiAJcHJfZGVidWcoIk1DSSBSZW1vdmVkXG4iKTsKIAogCXJldHVybiAwOwpAQCAtOTQ4LDggKzk3Miw3IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXQ5MV9tY2lfZHJpdmVyID0gewotCS5wcm9iZQkJPSBhdDkxX21jaV9wcm9iZSwKLQkucmVtb3ZlCQk9IGF0OTFfbWNpX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGF0OTFfbWNpX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBhdDkxX21jaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gYXQ5MV9tY2lfcmVzdW1lLAogCS5kcml2ZXIJCT0gewpAQCAtOTYwLDcgKzk4Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGF0OTFfbWNpX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdDkxX21jaV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0OTFfbWNpX2RyaXZlciwgYXQ5MV9tY2lfcHJvYmUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXQ5MV9tY2lfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvYXUxeG1tYy5jIGIvZHJpdmVycy9tbWMvYXUxeG1tYy5jCmluZGV4IDQ0N2ZiYTUuLjgwMDUyN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2F1MXhtbWMuYworKysgYi9kcml2ZXJzL21tYy9hdTF4bW1jLmMKQEAgLTg3NSw3ICs4NzUsNyBAQAogCWhvc3QtPnJ4X2NoYW4gPSByeGNoYW47CiB9CiAKLXN0cnVjdCBjb25zdCBtbWNfaG9zdF9vcHMgYXUxeG1tY19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBhdTF4bW1jX29wcyA9IHsKIAkucmVxdWVzdAk9IGF1MXhtbWNfcmVxdWVzdCwKIAkuc2V0X2lvcwk9IGF1MXhtbWNfc2V0X2lvcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9pbXhtbWMuYyBiL2RyaXZlcnMvbW1jL2lteG1tYy5jCmluZGV4IDA2ZTdmY2QuLmJmYjlmZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2lteG1tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2lteG1tYy5jCkBAIC0zNTEsOSArMzUxLDYgQEAKIAljYXNlIE1NQ19SU1BfUjM6IC8qIHNob3J0ICovCiAJCWNtZGF0IHw9IENNRF9EQVRfQ09OVF9SRVNQT05TRV9GT1JNQVRfUjM7CiAJCWJyZWFrOwotCWNhc2UgTU1DX1JTUF9SNjogLyogc2hvcnQgQ1JDICovCi0JCWNtZGF0IHw9IENNRF9EQVRfQ09OVF9SRVNQT05TRV9GT1JNQVRfUjY7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tY19xdWV1ZS5jIGIvZHJpdmVycy9tbWMvbW1jX3F1ZXVlLmMKaW5kZXggYTE3NDIzYS4uM2UzNWE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jX3F1ZXVlLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jX3F1ZXVlLmMKQEAgLTc4LDggKzc4LDEwIEBACiAJCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAogCQlpZiAoIXJlcSkgewotCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQkJCWJyZWFrOworCQkJfQogCQkJdXAoJm1xLT50aHJlYWRfc2VtKTsKIAkJCXNjaGVkdWxlKCk7CiAJCQlkb3duKCZtcS0+dGhyZWFkX3NlbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9tbWNpLmMgYi9kcml2ZXJzL21tYy9tbWNpLmMKaW5kZXggZTliODBlOS4uY2NmZTY1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL21tY2kuYwpAQCAtNDIsNiArNDIsOCBAQAogewogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSUNPTU1BTkQpOwogCisJQlVHX09OKGhvc3QtPmRhdGEpOworCiAJaG9zdC0+bXJxID0gTlVMTDsKIAlob3N0LT5jbWQgPSBOVUxMOwogCkBAIC0xOTgsNiArMjAwLDggQEAKIAl9CiAKIAlpZiAoIWNtZC0+ZGF0YSB8fCBjbWQtPmVycm9yICE9IE1NQ19FUlJfTk9ORSkgeworCQlpZiAoaG9zdC0+ZGF0YSkKKwkJCW1tY2lfc3RvcF9kYXRhKGhvc3QpOwogCQltbWNpX3JlcXVlc3RfZW5kKGhvc3QsIGNtZC0+bXJxKTsKIAl9IGVsc2UgaWYgKCEoY21kLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpKSB7CiAJCW1tY2lfc3RhcnRfZGF0YShob3N0LCBjbWQtPmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvb21hcC5jIGIvZHJpdmVycy9tbWMvb21hcC5jCmluZGV4IDQzNWQzMzEuLmQzMDU0MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL29tYXAuYworKysgYi9kcml2ZXJzL21tYy9vbWFwLmMKQEAgLTkxLDcgKzkxLDYgQEAKIAogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJtbWNpLW9tYXAiCi0jZGVmaW5lIFJTUF9UWVBFKHgpCSgoeCkgJiB+KE1NQ19SU1BfQlVTWXxNTUNfUlNQX09QQ09ERSkpCiAKIC8qIFNwZWNpZmllcyBob3cgb2Z0ZW4gaW4gbWlsbGlzZWNzIHRvIHBvbGwgZm9yIGNhcmQgc3RhdHVzIGNoYW5nZXMKICAqIHdoZW4gdGhlIGNvdmVyIHN3aXRjaCBpcyBvcGVuICovCkBAIC0yMDQsMTggKzIwMywyMiBAQAogCWNtZHR5cGUgPSAwOwogCiAJLyogT3VyIGhhcmR3YXJlIG5lZWRzIHRvIGtub3cgZXhhY3QgdHlwZSAqLwotCXN3aXRjaCAoUlNQX1RZUEUobW1jX3Jlc3BfdHlwZShjbWQpKSkgewotCWNhc2UgUlNQX1RZUEUoTU1DX1JTUF9SMSk6Ci0JCS8qIHJlc3AgMSwgcmVzcCAxYiAqLworCXN3aXRjaCAobW1jX3Jlc3BfdHlwZShjbWQpKSB7CisJY2FzZSBNTUNfUlNQX05PTkU6CisJCWJyZWFrOworCWNhc2UgTU1DX1JTUF9SMToKKwljYXNlIE1NQ19SU1BfUjFCOgorCQkvKiByZXNwIDEsIDFiLCA2LCA3ICovCiAJCXJlc3B0eXBlID0gMTsKIAkJYnJlYWs7Ci0JY2FzZSBSU1BfVFlQRShNTUNfUlNQX1IyKToKKwljYXNlIE1NQ19SU1BfUjI6CiAJCXJlc3B0eXBlID0gMjsKIAkJYnJlYWs7Ci0JY2FzZSBSU1BfVFlQRShNTUNfUlNQX1IzKToKKwljYXNlIE1NQ19SU1BfUjM6CiAJCXJlc3B0eXBlID0gMzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJJbnZhbGlkIHJlc3BvbnNlIHR5cGU6ICUwNHhcbiIsIG1tY19yZXNwX3R5cGUoY21kKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtNTgxLDkgKzU4NCw5IEBACiAJc2NoZWR1bGVfd29yaygmaG9zdC0+c3dpdGNoX3dvcmspOwogfQogCi1zdGF0aWMgdm9pZCBtbWNfb21hcF9zd2l0Y2hfaGFuZGxlcih2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgbW1jX29tYXBfc3dpdGNoX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gKHN0cnVjdCBtbWNfb21hcF9ob3N0ICopIGRhdGE7CisJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG1tY19vbWFwX2hvc3QsIHN3aXRjaF93b3JrKTsKIAlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQ7CiAJc3RhdGljIGludCBjb21wbGFpbmVkID0gMDsKIAlpbnQgY2FyZHMgPSAwLCBjb3Zlcl9vcGVuOwpAQCAtMTExNiw3ICsxMTE5LDcgQEAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKIAogCWlmIChob3N0LT5zd2l0Y2hfcGluID49IDApIHsKLQkJSU5JVF9XT1JLKCZob3N0LT5zd2l0Y2hfd29yaywgbW1jX29tYXBfc3dpdGNoX2hhbmRsZXIsIGhvc3QpOworCQlJTklUX1dPUksoJmhvc3QtPnN3aXRjaF93b3JrLCBtbWNfb21hcF9zd2l0Y2hfaGFuZGxlcik7CiAJCWluaXRfdGltZXIoJmhvc3QtPnN3aXRjaF90aW1lcik7CiAJCWhvc3QtPnN3aXRjaF90aW1lci5mdW5jdGlvbiA9IG1tY19vbWFwX3N3aXRjaF90aW1lcjsKIAkJaG9zdC0+c3dpdGNoX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgaG9zdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3B4YW1jaS5jIGIvZHJpdmVycy9tbWMvcHhhbWNpLmMKaW5kZXggNDcxZTlmNC4uNjA3M2Q5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvcHhhbWNpLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCiAjZGVmaW5lIFJTUF9UWVBFKHgpCSgoeCkgJiB+KE1NQ19SU1BfQlVTWXxNTUNfUlNQX09QQ09ERSkpCiAJc3dpdGNoIChSU1BfVFlQRShtbWNfcmVzcF90eXBlKGNtZCkpKSB7Ci0JY2FzZSBSU1BfVFlQRShNTUNfUlNQX1IxKTogLyogcjEsIHIxYiwgcjYgKi8KKwljYXNlIFJTUF9UWVBFKE1NQ19SU1BfUjEpOiAvKiByMSwgcjFiLCByNiwgcjcgKi8KIAkJY21kYXQgfD0gQ01EQVRfUkVTUF9TSE9SVDsKIAkJYnJlYWs7CiAJY2FzZSBSU1BfVFlQRShNTUNfUlNQX1IzKToKQEAgLTM1NSw3ICszNTUsNyBAQAogCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKIAlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmdldF9ybykKLQkJcmV0dXJuIGhvc3QtPnBkYXRhLT5nZXRfcm8obW1jLT5kZXYpOworCQlyZXR1cm4gaG9zdC0+cGRhdGEtPmdldF9ybyhtbWNfZGV2KG1tYykpOwogCS8qIEhvc3QgZG9lc24ndCBzdXBwb3J0IHJlYWQgb25seSBkZXRlY3Rpb24gc28gYXNzdW1lIHdyaXRlYWJsZSAqLwogCXJldHVybiAwOwogfQpAQCAtMzgzLDcgKzM4Myw3IEBACiAJCWhvc3QtPnBvd2VyX21vZGUgPSBpb3MtPnBvd2VyX21vZGU7CiAKIAkJaWYgKGhvc3QtPnBkYXRhICYmIGhvc3QtPnBkYXRhLT5zZXRwb3dlcikKLQkJCWhvc3QtPnBkYXRhLT5zZXRwb3dlcihtbWMtPmRldiwgaW9zLT52ZGQpOworCQkJaG9zdC0+cGRhdGEtPnNldHBvd2VyKG1tY19kZXYobW1jKSwgaW9zLT52ZGQpOwogCiAJCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09OKQogCQkJaG9zdC0+Y21kYXQgfD0gQ01EQVRfSU5JVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3NkaGNpLmMgYi9kcml2ZXJzL21tYy9zZGhjaS5jCmluZGV4IGNkOTgxMTcuLmMyZDEzZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3NkaGNpLmMKKysrIGIvZHJpdmVycy9tbWMvc2RoY2kuYwpAQCAtMTE3MCw4ICsxMTcwLDggQEAKIAl9CiAKIAlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBmaXJzdF9iYXIgKyBzbG90KSAhPSAweDEwMCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogSW52YWxpZCBpb21lbSBzaXplLiBBYm9ydGluZy5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IEludmFsaWQgaW9tZW0gc2l6ZS4gIgorCQkJIllvdSBtYXkgZXhwZXJpZW5jZSBwcm9ibGVtcy5cbiIpOwogCX0KIAogCWlmICgocGRldi0+Y2xhc3MgJiAweDAwMDBGRikgPT0gUENJX1NESENJX0lGVkVORE9SKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy90aWZtX3NkLmMgYi9kcml2ZXJzL21tYy90aWZtX3NkLmMKaW5kZXggZTg0NjQ5OS4uZmE0YTUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvdGlmbV9zZC5jCisrKyBiL2RyaXZlcnMvbW1jL3RpZm1fc2QuYwpAQCAtMTczLDkgKzE3Myw2IEBACiAJY2FzZSBNTUNfUlNQX1IzOgogCQlyYyB8PSBUSUZNX01NQ1NEX1JTUF9SMzsKIAkJYnJlYWs7Ci0JY2FzZSBNTUNfUlNQX1I2OgotCQlyYyB8PSBUSUZNX01NQ1NEX1JTUF9SNjsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQpAQCAtMzg3LDcgKzM4NCw3IEBACiAKIAl3cml0ZWwoVElGTV9GSUZPX0lOVF9TRVRBTEwsCiAJCXNvY2stPmFkZHIgKyBTT0NLX0RNQV9GSUZPX0lOVF9FTkFCTEVfQ0xFQVIpOwotCXdyaXRlbChsb25nX2xvZzIoY21kLT5kYXRhLT5ibGtzeikgLSAyLAorCXdyaXRlbChpbG9nMihjbWQtPmRhdGEtPmJsa3N6KSAtIDIsCiAJCQlzb2NrLT5hZGRyICsgU09DS19GSUZPX1BBR0VfU0laRSk7CiAJd3JpdGVsKFRJRk1fRklGT19FTkFCTEUsIHNvY2stPmFkZHIgKyBTT0NLX0ZJRk9fQ09OVFJPTCk7CiAJd3JpdGVsKFRJRk1fRklGT19JTlRNQVNLLCBzb2NrLT5hZGRyICsgU09DS19ETUFfRklGT19JTlRfRU5BQkxFX1NFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvS2NvbmZpZwppbmRleCBhMzA0YjM0Li4yNmY3NWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL0tjb25maWcKQEAgLTE2NCw5ICsxNjQsMTUgQEAKIAkgIG1lbW9yeSBjaGlwcywgYW5kIGFsc28gdXNlIGlvY3RsKCkgdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0CiAJICB0aGUgZGV2aWNlLCBvciB0byBlcmFzZSBwYXJ0cyBvZiBpdC4KIAorY29uZmlnIE1URF9CTEtERVZTCisJdHJpc3RhdGUgIkNvbW1vbiBpbnRlcmZhY2UgdG8gYmxvY2sgbGF5ZXIgZm9yIE1URCAndHJhbnNsYXRpb24gbGF5ZXJzJyIKKwlkZXBlbmRzIG9uIE1URCAmJiBCTE9DSworCWRlZmF1bHQgbgorCiBjb25maWcgTVREX0JMT0NLCiAJdHJpc3RhdGUgIkNhY2hpbmcgYmxvY2sgZGV2aWNlIGFjY2VzcyB0byBNVEQgZGV2aWNlcyIKIAlkZXBlbmRzIG9uIE1URCAmJiBCTE9DSworCXNlbGVjdCBNVERfQkxLREVWUwogCS0tLWhlbHAtLS0KIAkgIEFsdGhvdWdoIG1vc3QgZmxhc2ggY2hpcHMgaGF2ZSBhbiBlcmFzZSBzaXplIHRvbyBsYXJnZSB0byBiZSB1c2VmdWwKIAkgIGFzIGJsb2NrIGRldmljZXMsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBNVEQgZGV2aWNlcyB3aGljaCBhcmUgYmFzZWQKQEAgLTE4OSw2ICsxOTUsNyBAQAogY29uZmlnIE1URF9CTE9DS19STwogCXRyaXN0YXRlICJSZWFkb25seSBibG9jayBkZXZpY2UgYWNjZXNzIHRvIE1URCBkZXZpY2VzIgogCWRlcGVuZHMgb24gTVREX0JMT0NLIT15ICYmIE1URCAmJiBCTE9DSworCXNlbGVjdCBNVERfQkxLREVWUwogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCByZWFkLW9ubHkgZmlsZSBzeXN0ZW1zIChzdWNoIGFzIGNyYW1mcykKIAkgIGZyb20gYW4gTVREIGRldmljZSwgd2l0aG91dCB0aGUgb3ZlcmhlYWQgKGFuZCBkYW5nZXIpIG9mIHRoZSBjYWNoaW5nCkBAIC0yMDAsNiArMjA3LDcgQEAKIGNvbmZpZyBGVEwKIAl0cmlzdGF0ZSAiRlRMIChGbGFzaCBUcmFuc2xhdGlvbiBMYXllcikgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1URCAmJiBCTE9DSworCXNlbGVjdCBNVERfQkxLREVWUwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIG9yaWdpbmFsIEZsYXNoIFRyYW5zbGF0aW9uIExheWVyIHdoaWNoCiAJICBpcyBwYXJ0IG9mIHRoZSBQQ01DSUEgc3BlY2lmaWNhdGlvbi4gSXQgdXNlcyBhIGtpbmQgb2YgcHNldWRvLQpAQCAtMjE2LDYgKzIyNCw3IEBACiBjb25maWcgTkZUTAogCXRyaXN0YXRlICJORlRMIChOQU5EIEZsYXNoIFRyYW5zbGF0aW9uIExheWVyKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gTVREICYmIEJMT0NLCisJc2VsZWN0IE1URF9CTEtERVZTCiAJLS0taGVscC0tLQogCSAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgTkFORCBGbGFzaCBUcmFuc2xhdGlvbiBMYXllciB3aGljaCBpcwogCSAgdXNlZCBvbiBNLVN5c3RlbXMnIERpc2tPbkNoaXAgZGV2aWNlcy4gSXQgdXNlcyBhIGtpbmQgb2YgcHNldWRvLQpAQCAtMjM5LDYgKzI0OCw3IEBACiBjb25maWcgSU5GVEwKIAl0cmlzdGF0ZSAiSU5GVEwgKEludmVyc2UgTkFORCBGbGFzaCBUcmFuc2xhdGlvbiBMYXllcikgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1URCAmJiBCTE9DSworCXNlbGVjdCBNVERfQkxLREVWUwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIEludmVyc2UgTkFORCBGbGFzaCBUcmFuc2xhdGlvbgogCSAgTGF5ZXIgd2hpY2ggaXMgdXNlZCBvbiBNLVN5c3RlbXMnIG5ld2VyIERpc2tPbkNoaXAgZGV2aWNlcy4gSXQKQEAgLTI1Niw2ICsyNjYsNyBAQAogY29uZmlnIFJGRF9GVEwKICAgICAgICAgdHJpc3RhdGUgIlJlc2lkZW50IEZsYXNoIERpc2sgKEZsYXNoIFRyYW5zbGF0aW9uIExheWVyKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gTVREICYmIEJMT0NLCisJc2VsZWN0IE1URF9CTEtERVZTCiAJLS0taGVscC0tLQogCSAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgZmxhc2ggdHJhbnNsYXRpb24gbGF5ZXIga25vd24KIAkgIGFzIHRoZSBSZXNpZGVudCBGbGFzaCBEaXNrIChSRkQpLCBhcyB1c2VkIGJ5IHRoZSBFbWJlZGRlZCBCSU9TCkBAIC0yNjUsOCArMjc2LDggQEAKIAogY29uZmlnIFNTRkRDCiAJdHJpc3RhdGUgIk5BTkQgU1NGREMgKFNtYXJ0TWVkaWEpIHJlYWQgb25seSB0cmFuc2xhdGlvbiBsYXllciIKLQlkZXBlbmRzIG9uIE1URAotCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gTVREICYmIEJMT0NLCisJc2VsZWN0IE1URF9CTEtERVZTCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gU21hcnRNZWRpYSBmb3JtYXR0ZWQgTkFORAogCSAgZmxhc2guIFlvdSBjYW4gbW91bnQgaXQgd2l0aCBGQVQgZmlsZSBzeXN0ZW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL01ha2VmaWxlCmluZGV4IDFlMzZiOWEuLmMxMzBlNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL01ha2VmaWxlCkBAIC0xNSwxMyArMTUsMTQgQEAKIAogIyAnVXNlcnMnIC0gY29kZSB3aGljaCBwcmVzZW50cyBmdW5jdGlvbmFsaXR5IHRvIHVzZXJzcGFjZS4KIG9iai0kKENPTkZJR19NVERfQ0hBUikJCSs9IG10ZGNoYXIubwotb2JqLSQoQ09ORklHX01URF9CTE9DSykJCSs9IG10ZGJsb2NrLm8gbXRkX2Jsa2RldnMubwotb2JqLSQoQ09ORklHX01URF9CTE9DS19STykJKz0gbXRkYmxvY2tfcm8ubyBtdGRfYmxrZGV2cy5vCi1vYmotJChDT05GSUdfRlRMKQkJKz0gZnRsLm8gbXRkX2Jsa2RldnMubwotb2JqLSQoQ09ORklHX05GVEwpCQkrPSBuZnRsLm8gbXRkX2Jsa2RldnMubwotb2JqLSQoQ09ORklHX0lORlRMKQkJKz0gaW5mdGwubyBtdGRfYmxrZGV2cy5vCi1vYmotJChDT05GSUdfUkZEX0ZUTCkJCSs9IHJmZF9mdGwubyBtdGRfYmxrZGV2cy5vCi1vYmotJChDT05GSUdfU1NGREMpCQkrPSBzc2ZkYy5vIG10ZF9ibGtkZXZzLm8KK29iai0kKENPTkZJR19NVERfQkxLREVWUykJKz0gbXRkX2Jsa2RldnMubworb2JqLSQoQ09ORklHX01URF9CTE9DSykJCSs9IG10ZGJsb2NrLm8KK29iai0kKENPTkZJR19NVERfQkxPQ0tfUk8pCSs9IG10ZGJsb2NrX3JvLm8KK29iai0kKENPTkZJR19GVEwpCQkrPSBmdGwubworb2JqLSQoQ09ORklHX05GVEwpCQkrPSBuZnRsLm8KK29iai0kKENPTkZJR19JTkZUTCkJCSs9IGluZnRsLm8KK29iai0kKENPTkZJR19SRkRfRlRMKQkJKz0gcmZkX2Z0bC5vCitvYmotJChDT05GSUdfU1NGREMpCQkrPSBzc2ZkYy5vCiAKIG5mdGwtb2JqcwkJOj0gbmZ0bGNvcmUubyBuZnRsbW91bnQubwogaW5mdGwtb2JqcwkJOj0gaW5mdGxjb3JlLm8gaW5mdGxtb3VudC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9hZnMuYyBiL2RyaXZlcnMvbXRkL2Fmcy5jCmluZGV4IDZhNDViZTAuLjUyZDUxZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2Fmcy5jCisrKyBiL2RyaXZlcnMvbXRkL2Fmcy5jCkBAIC0yMDcsMTEgKzIwNywxMCBAQAogCWlmICghc3opCiAJCXJldHVybiByZXQ7CiAKLQlwYXJ0cyA9IGttYWxsb2Moc3osIEdGUF9LRVJORUwpOworCXBhcnRzID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYXJ0cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQocGFydHMsIDAsIHN6KTsKIAlzdHIgPSAoY2hhciAqKShwYXJ0cyArIGlkeCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvYW1kX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYwppbmRleCAxNmVhY2E2Li5lNzk5OWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYwpAQCAtNjQzLDEzICs2NDMsMTIgQEAKIAlpbnQgcmVnX2lkeDsKIAlpbnQgb2Zmc2V0OwogCi0JbXRkID0gKHN0cnVjdCBtdGRfaW5mbyopa21hbGxvYyhzaXplb2YoKm10ZCksIEdGUF9LRVJORUwpOworCW10ZCA9IGt6YWxsb2Moc2l6ZW9mKCptdGQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW10ZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXM6IGttYWxsb2MgZmFpbGVkIGZvciBpbmZvIHN0cnVjdHVyZVxuIiwgbWFwLT5uYW1lKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChtdGQsIDAsIHNpemVvZigqbXRkKSk7CiAJbXRkLT5wcml2ID0gbWFwOwogCiAJbWVtc2V0KCZ0ZW1wLCAwLCBzaXplb2YodGVtcCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwppbmRleCAyOTYxNTllLi5mNjkxODRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwpAQCAtMzM3LDEyICszMzcsMTEgQEAKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKIAlpbnQgaTsKIAotCW10ZCA9IGttYWxsb2Moc2l6ZW9mKCptdGQpLCBHRlBfS0VSTkVMKTsKKwltdGQgPSBremFsbG9jKHNpemVvZigqbXRkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdGQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChtdGQsIDAsIHNpemVvZigqbXRkKSk7CiAJbXRkLT5wcml2ID0gbWFwOwogCW10ZC0+dHlwZSA9IE1URF9OT1JGTEFTSDsKIApAQCAtMjIyNCw2ICsyMjIzLDggQEAKIAkJY2FzZSBGTF9DRklfUVVFUlk6CiAJCWNhc2UgRkxfSkVERUNfUVVFUlk6CiAJCQlpZiAoY2hpcC0+b2xkc3RhdGUgPT0gRkxfUkVBRFkpIHsKKwkJCQkvKiBwbGFjZSB0aGUgY2hpcCBpbiBhIGtub3duIHN0YXRlIGJlZm9yZSBzdXNwZW5kICovCisJCQkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4RkYpLCBjZmktPmNoaXBzW2ldLnN0YXJ0KTsKIAkJCQljaGlwLT5vbGRzdGF0ZSA9IGNoaXAtPnN0YXRlOwogCQkJCWNoaXAtPnN0YXRlID0gRkxfUE1fU1VTUEVOREVEOwogCQkJCS8qIE5vIG5lZWQgdG8gd2FrZV91cCgpIG9uIHRoaXMgc3RhdGUgY2hhbmdlIC0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKaW5kZXggNzAyYWU0Yy4uZTNhY2QzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNkZWZpbmUgTUFOVUZBQ1RVUkVSX0FUTUVMCTB4MDAxRgogI2RlZmluZSBNQU5VRkFDVFVSRVJfU1NUCTB4MDBCRgogI2RlZmluZSBTU1Q0OUxGMDA0QgkgICAgICAgIDB4MDA2MAorI2RlZmluZSBTU1Q0OUxGMDQwQgkgICAgICAgIDB4MDA1MAogI2RlZmluZSBTU1Q0OUxGMDA4QQkJMHgwMDVhCiAjZGVmaW5lIEFUNDlCVjY0MTYJCTB4MDBkNgogCkBAIC0yMzMsNiArMjM0LDcgQEAKIH07CiBzdGF0aWMgc3RydWN0IGNmaV9maXh1cCBqZWRlY19maXh1cF90YWJsZVtdID0gewogCXsgTUFOVUZBQ1RVUkVSX1NTVCwgU1NUNDlMRjAwNEIsIGZpeHVwX3VzZV9md2hfbG9jaywgTlVMTCwgfSwKKwl7IE1BTlVGQUNUVVJFUl9TU1QsIFNTVDQ5TEYwNDBCLCBmaXh1cF91c2VfZndoX2xvY2ssIE5VTEwsIH0sCiAJeyBNQU5VRkFDVFVSRVJfU1NULCBTU1Q0OUxGMDA4QSwgZml4dXBfdXNlX2Z3aF9sb2NrLCBOVUxMLCB9LAogCXsgMCwgMCwgTlVMTCwgTlVMTCB9CiB9OwpAQCAtMjU1LDEyICsyNTcsMTEgQEAKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKIAlpbnQgaTsKIAotCW10ZCA9IGttYWxsb2Moc2l6ZW9mKCptdGQpLCBHRlBfS0VSTkVMKTsKKwltdGQgPSBremFsbG9jKHNpemVvZigqbXRkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdGQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQobXRkLCAwLCBzaXplb2YoKm10ZCkpOwogCW10ZC0+cHJpdiA9IG1hcDsKIAltdGQtPnR5cGUgPSBNVERfTk9SRkxBU0g7CiAKQEAgLTUxOSwxMCArNTIwLDEyIEBACiAJCWlmIChtb2RlID09IEZMX1dSSVRJTkcpIC8qIEZJWE1FOiBFcmFzZS1zdXNwZW5kLXByb2dyYW0gYXBwZWFycyBicm9rZW4uICovCiAJCQlnb3RvIHNsZWVwOwogCi0JCWlmICghKG1vZGUgPT0gRkxfUkVBRFkgfHwgbW9kZSA9PSBGTF9QT0lOVAorCQlpZiAoISggICBtb2RlID09IEZMX1JFQURZCisJCSAgICAgIHx8IG1vZGUgPT0gRkxfUE9JTlQKIAkJICAgICAgfHwgIWNmaXAKIAkJICAgICAgfHwgKG1vZGUgPT0gRkxfV1JJVElORyAmJiAoY2ZpcC0+RXJhc2VTdXNwZW5kICYgMHgyKSkKLQkJICAgICAgfHwgKG1vZGUgPT0gRkxfV1JJVElORyAmJiAoY2ZpcC0+RXJhc2VTdXNwZW5kICYgMHgxKSkpKQorCQkgICAgICB8fCAobW9kZSA9PSBGTF9XUklUSU5HICYmIChjZmlwLT5FcmFzZVN1c3BlbmQgJiAweDEpCisJCSAgICApKSkKIAkJCWdvdG8gc2xlZXA7CiAKIAkJLyogV2UgY291bGQgY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNlY3RvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwppbmRleCBmYWU3MGE1Li5kNTY4NDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJaW50IGksajsKIAl1bnNpZ25lZCBsb25nIGRldnNpemUgPSAoMTw8Y2ZpLT5jZmlxLT5EZXZTaXplKSAqIGNmaS0+aW50ZXJsZWF2ZTsKIAotCW10ZCA9IGttYWxsb2Moc2l6ZW9mKCptdGQpLCBHRlBfS0VSTkVMKTsKKwltdGQgPSBremFsbG9jKHNpemVvZigqbXRkKSwgR0ZQX0tFUk5FTCk7CiAJLy9wcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIENGSSBjaGlwczogJWRcbiIsIGNmaS0+bnVtY2hpcHMpOwogCiAJaWYgKCFtdGQpIHsKQEAgLTE4MSw3ICsxODEsNiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltZW1zZXQobXRkLCAwLCBzaXplb2YoKm10ZCkpOwogCW10ZC0+cHJpdiA9IG1hcDsKIAltdGQtPnR5cGUgPSBNVERfTk9SRkxBU0g7CiAJbXRkLT5zaXplID0gZGV2c2l6ZSAqIGNmaS0+bnVtY2hpcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9nZW5fcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCmluZGV4IGNkYjBmNTkuLjJlYjY5NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jCkBAIC00MCw3ICs0MCw3IEBACiAJaWYgKG10ZCkgewogCQlpZiAobXRkLT5zaXplID4gbWFwLT5zaXplKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWR1Y2luZyB2aXNpYmlsaXR5IG9mICVsZEtpQiBjaGlwIHRvICVsZEtpQlxuIiwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyltdGQtPnNpemUgPj4gMTAsIAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nKW10ZC0+c2l6ZSA+PiAxMCwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyltYXAtPnNpemUgPj4gMTApOwogCQkJbXRkLT5zaXplID0gbWFwLT5zaXplOwogCQl9CkBAIC0xMTMsMTMgKzExMywxMiBAQAogCX0KIAogCW1hcHNpemUgPSAobWF4X2NoaXBzICsgQklUU19QRVJfTE9ORy0xKSAvIEJJVFNfUEVSX0xPTkc7Ci0JY2hpcF9tYXAgPSBrbWFsbG9jKG1hcHNpemUsIEdGUF9LRVJORUwpOworCWNoaXBfbWFwID0ga3phbGxvYyhtYXBzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoaXBfbWFwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBrbWFsbG9jIGZhaWxlZCBmb3IgQ0ZJIGNoaXAgbWFwXG4iLCBtYXAtPm5hbWUpOwogCQlrZnJlZShjZmkuY2ZpcSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQgKGNoaXBfbWFwLCAwLCBtYXBzaXplKTsKIAogCXNldF9iaXQoMCwgY2hpcF9tYXApOyAvKiBNYXJrIGZpcnN0IGNoaXAgdmFsaWQgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvamVkZWMuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjLmMKaW5kZXggMmMzZjAxOS4uMTRlNTdiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvamVkZWMuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9qZWRlYy5jCkBAIC0xMTYsMTEgKzExNiwxMCBAQAogICAgY2hhciBQYXJ0WzIwMF07CiAgICBtZW1zZXQoJnByaXYsMCxzaXplb2YocHJpdikpOwogCi0gICBNVEQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBqZWRlY19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisgICBNVEQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBqZWRlY19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAgICBpZiAoIU1URCkKIAkgICByZXR1cm4gTlVMTDsKIAotICAgbWVtc2V0KE1URCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IGplZGVjX3ByaXZhdGUpKTsKICAgIHByaXYgPSAoc3RydWN0IGplZGVjX3ByaXZhdGUgKikmTVREWzFdOwogCiAgICBteV9iYW5rX3NpemUgPSBtYXAtPnNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYwppbmRleCAxMTU0ZGFjLi41OGU1NjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMKQEAgLTE1NCw2ICsxNTQsNyBAQAogI2RlZmluZSBTU1QzOVNGMDEwQQkweDAwQjUKICNkZWZpbmUgU1NUMzlTRjAyMEEJMHgwMEI2CiAjZGVmaW5lIFNTVDQ5TEYwMDRCCTB4MDA2MAorI2RlZmluZSBTU1Q0OUxGMDQwQgkweDAwNTAKICNkZWZpbmUgU1NUNDlMRjAwOEEJMHgwMDVhCiAjZGVmaW5lIFNTVDQ5TEYwMzBBCTB4MDAxQwogI2RlZmluZSBTU1Q0OUxGMDQwQQkweDAwNTEKQEAgLTE0MDEsNiArMTQwMiwyMCBAQAogCQl9CiAJfSwgewogCQkubWZyX2lkCQk9IE1BTlVGQUNUVVJFUl9TU1QsCisJCS5kZXZfaWQgICAgICAgICA9IFNTVDQ5TEYwNDBCLAorCQkubmFtZSAgICAgICAgICAgPSAiU1NUIDQ5TEYwNDBCIiwKKwkJLnVhZGRyICAgICAgICAgID0geworCQkJWzBdID0gTVREX1VBRERSXzB4NTU1NV8weDJBQUEgLyogeDggKi8KKwkJfSwKKwkJLkRldlNpemUgICAgICAgID0gU0laRV81MTJLaUIsCisJCS5DbWRTZXQgICAgICAgICA9IFBfSURfQU1EX1NURCwKKwkJLk51bUVyYXNlUmVnaW9ucz0gMSwKKwkJLnJlZ2lvbnMgICAgICAgID0geworCQkJRVJBU0VJTkZPKDB4MDEwMDAsMTI4KSwKKwkJfQorCX0sIHsKKworCQkubWZyX2lkCQk9IE1BTlVGQUNUVVJFUl9TU1QsCiAJCS5kZXZfaWQJCT0gU1NUNDlMRjAwNEIsCiAJCS5uYW1lCQk9ICJTU1QgNDlMRjAwNEIiLAogIAkJLnVhZGRyCQk9IHsKQEAgLTE4NzQsNyArMTg4OSw3IEBACiAKIAogLyoKLSAqIFRoZXJlIGlzIGEgQklHIHByb2JsZW0gcHJvcGVybHkgSUQnaW5nIHRoZSBKRURFQyBkZXZpYyBhbmQgZ3VhcmFudGVlaW5nCisgKiBUaGVyZSBpcyBhIEJJRyBwcm9ibGVtIHByb3Blcmx5IElEJ2luZyB0aGUgSkVERUMgZGV2aWNlIGFuZCBndWFyYW50ZWVpbmcKICAqIHRoZSBtYXBwZWQgYWRkcmVzcywgdW5sb2NrIGFkZHJlc3NlcywgYW5kIHByb3BlciBjaGlwIElELiAgVGhpcyBmdW5jdGlvbgogICogYXR0ZW1wdHMgdG8gbWluaW1pemUgZXJyb3JzLiAgSXQgaXMgZG91YnRmdWxsIHRoYXQgdGhpcyBwcm9iZSB3aWxsIGV2ZXIKICAqIGJlIHBlcmZlY3QgLSBjb25zZXF1ZW50bHkgdGhlcmUgc2hvdWxkIGJlIHNvbWUgbW9kdWxlIHBhcmFtZXRlcnMgdGhhdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvbWFwX2Fic2VudC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX2Fic2VudC5jCmluZGV4IGFjMDFhOTQuLmZjNDc4YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9hYnNlbnQuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9tYXBfYWJzZW50LmMKQEAgLTQ3LDEzICs0NywxMSBAQAogewogCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwogCi0JbXRkID0ga21hbGxvYyhzaXplb2YoKm10ZCksIEdGUF9LRVJORUwpOworCW10ZCA9IGt6YWxsb2Moc2l6ZW9mKCptdGQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW10ZCkgewogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltZW1zZXQobXRkLCAwLCBzaXplb2YoKm10ZCkpOwotCiAJbWFwLT5mbGRydiAJPSAmbWFwX2Fic2VudF9jaGlwZHJ2OwogCW10ZC0+cHJpdiAJPSBtYXA7CiAJbXRkLT5uYW1lIAk9IG1hcC0+bmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yYW0uYyBiL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yYW0uYwppbmRleCAzYTY2NjgwLi41Y2I2ZDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcmFtLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JhbS5jCkBAIC01NSwxMiArNTUsMTAgQEAKICNlbmRpZgogCS8qIE9LLiBJdCBzZWVtcyB0byBiZSBSQU0uICovCiAKLQltdGQgPSBrbWFsbG9jKHNpemVvZigqbXRkKSwgR0ZQX0tFUk5FTCk7CisJbXRkID0ga3phbGxvYyhzaXplb2YoKm10ZCksIEdGUF9LRVJORUwpOwogCWlmICghbXRkKQogCQlyZXR1cm4gTlVMTDsKIAotCW1lbXNldChtdGQsIDAsIHNpemVvZigqbXRkKSk7Ci0KIAltYXAtPmZsZHJ2ID0gJm1hcHJhbV9jaGlwZHJ2OwogCW10ZC0+cHJpdiA9IG1hcDsKIAltdGQtPm5hbWUgPSBtYXAtPm5hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcm9tLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcm9tLmMKaW5kZXggMWIzMjhiMS4uY2IyN2Y4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JvbS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yb20uYwpAQCAtMzEsMTIgKzMxLDEwIEBACiB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQ7CiAKLQltdGQgPSBrbWFsbG9jKHNpemVvZigqbXRkKSwgR0ZQX0tFUk5FTCk7CisJbXRkID0ga3phbGxvYyhzaXplb2YoKm10ZCksIEdGUF9LRVJORUwpOwogCWlmICghbXRkKQogCQlyZXR1cm4gTlVMTDsKIAotCW1lbXNldChtdGQsIDAsIHNpemVvZigqbXRkKSk7Ci0KIAltYXAtPmZsZHJ2ID0gJm1hcHJvbV9jaGlwZHJ2OwogCW10ZC0+cHJpdiA9IG1hcDsKIAltdGQtPm5hbWUgPSBtYXAtPm5hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9zaGFycC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvc2hhcnAuYwppbmRleCA5NjdhYmJlLi5jOWNkM2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9zaGFycC5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL3NoYXJwLmMKQEAgLTExMiwxOCArMTEyLDE2IEBACiAJc3RydWN0IHNoYXJwX2luZm8gKnNoYXJwID0gTlVMTDsKIAlpbnQgd2lkdGg7CiAKLQltdGQgPSBrbWFsbG9jKHNpemVvZigqbXRkKSwgR0ZQX0tFUk5FTCk7CisJbXRkID0ga3phbGxvYyhzaXplb2YoKm10ZCksIEdGUF9LRVJORUwpOwogCWlmKCFtdGQpCiAJCXJldHVybiBOVUxMOwogCi0Jc2hhcnAgPSBrbWFsbG9jKHNpemVvZigqc2hhcnApLCBHRlBfS0VSTkVMKTsKKwlzaGFycCA9IGt6YWxsb2Moc2l6ZW9mKCpzaGFycCksIEdGUF9LRVJORUwpOwogCWlmKCFzaGFycCkgewogCQlrZnJlZShtdGQpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltZW1zZXQobXRkLCAwLCBzaXplb2YoKm10ZCkpOwotCiAJd2lkdGggPSBzaGFycF9wcm9iZV9tYXAobWFwLG10ZCk7CiAJaWYoIXdpZHRoKXsKIAkJa2ZyZWUobXRkKTsKQEAgLTE0Myw3ICsxNDEsNiBAQAogCW10ZC0+d3JpdGVzaXplID0gMTsKIAltdGQtPm5hbWUgPSBtYXAtPm5hbWU7CiAKLQltZW1zZXQoc2hhcnAsIDAsIHNpemVvZigqc2hhcnApKTsKIAlzaGFycC0+Y2hpcHNoaWZ0ID0gMjM7CiAJc2hhcnAtPm51bWNoaXBzID0gMTsKIAlzaGFycC0+Y2hpcHNbMF0uc3RhcnQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYyBiL2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMKaW5kZXggYTdhN2JmZS4uMjNmYWIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYworKysgYi9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jCkBAIC0xNjMsMTMgKzE2MywxMiBAQAogCQkqbnVtX3BhcnRzID0gdGhpc19wYXJ0ICsgMTsKIAkJYWxsb2Nfc2l6ZSA9ICpudW1fcGFydHMgKiBzaXplb2Yoc3RydWN0IG10ZF9wYXJ0aXRpb24pICsKIAkJCSAgICAgZXh0cmFfbWVtX3NpemU7Ci0JCXBhcnRzID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKKwkJcGFydHMgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXBhcnRzKQogCQl7CiAJCQlwcmludGsoS0VSTl9FUlIgRVJSUCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCQltZW1zZXQocGFydHMsIDAsIGFsbG9jX3NpemUpOwogCQlleHRyYV9tZW0gPSAodW5zaWduZWQgY2hhciAqKShwYXJ0cyArICpudW1fcGFydHMpOwogCX0KIAkvKiBlbnRlciB0aGlzIHBhcnRpdGlvbiAob2Zmc2V0IHdpbGwgYmUgY2FsY3VsYXRlZCBsYXRlciBpZiBpdCBpcyB6ZXJvIGF0IHRoaXMgcG9pbnQpICovCkBAIC0zNDYsNyArMzQ1LDcgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHZpc2libGUgZm9yIGJvb3Rsb2FkZXJzLgogICovCi1pbnQgbXRkcGFydF9zZXR1cChjaGFyICpzKQorc3RhdGljIGludCBtdGRwYXJ0X3NldHVwKGNoYXIgKnMpCiB7CiAJY21kbGluZSA9IHM7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYwppbmRleCA0MDFjNmEyLi42ZDkxN2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKQEAgLTI5NSwxMCArMjk1LDkgQEAKIAlpZiAoIWRldm5hbWUpCiAJCXJldHVybiBOVUxMOwogCi0JZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJsb2NrMm10ZF9kZXYpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmxvY2sybXRkX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOwogCiAJLyogR2V0IGEgaGFuZGxlIG9uIHRoZSBkZXZpY2UgKi8KIAliZGV2ID0gb3Blbl9iZGV2X2V4Y2woZGV2bmFtZSwgT19SRFdSLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCmluZGV4IDMzNGUwNzhmLi43OGMyNTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogCQkgKiBvciBKRURFQyBnZXQtaWQgY29tbWFuZHMuICBUcnkgdGhlbSAuLi4KIAkJICovCiAJCURFQlVHKE1URF9ERUJVR19MRVZFTDEsICIlczogbm8gY2hpcCBpZFxuIiwKLQkJCQlmbGFzaC0+c3BpLT5kZXYuYnVzX2lkKTsKKwkJCQlzcGktPmRldi5idXNfaWQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCX0KIAlpZiAoaSA9PSBBUlJBWV9TSVpFKG0yNXBfZGF0YSkpIHsKIAkJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwgIiVzOiB1bnJlY29nbml6ZWQgaWQgJXNcbiIsCi0JCQkJZmxhc2gtPnNwaS0+ZGV2LmJ1c19pZCwgZGF0YS0+dHlwZSk7CisJCQkJc3BpLT5kZXYuYnVzX2lkLCBkYXRhLT50eXBlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL21zMDItbnYuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXMwMi1udi5jCmluZGV4IDA4ZGZiODkuLjljZmYxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXMwMi1udi5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXMwMi1udi5jCkBAIC0xMzEsMTEgKzEzMSwxMCBAQAogCWludCByZXQgPSAtRU5PREVWOwogCiAJLyogVGhlIG1vZHVsZSBkZWNvZGVzIDhNaUIgb2YgYWRkcmVzcyBzcGFjZS4gKi8KLQltb2RfcmVzID0ga21hbGxvYyhzaXplb2YoKm1vZF9yZXMpLCBHRlBfS0VSTkVMKTsKKwltb2RfcmVzID0ga3phbGxvYyhzaXplb2YoKm1vZF9yZXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1vZF9yZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KG1vZF9yZXMsIDAsIHNpemVvZigqbW9kX3JlcykpOwogCW1vZF9yZXMtPm5hbWUgPSBtczAybnZfbmFtZTsKIAltb2RfcmVzLT5zdGFydCA9IGFkZHI7CiAJbW9kX3Jlcy0+ZW5kID0gYWRkciArIE1TMDJOVl9TTE9UX1NJWkUgLSAxOwpAQCAtMTUzLDI0ICsxNTIsMjEgQEAKIAl9CiAKIAlyZXQgPSAtRU5PTUVNOwotCW10ZCA9IGttYWxsb2Moc2l6ZW9mKCptdGQpLCBHRlBfS0VSTkVMKTsKKwltdGQgPSBremFsbG9jKHNpemVvZigqbXRkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdGQpCiAJCWdvdG8gZXJyX291dF9tb2RfcmVzX3JlbDsKLQltZW1zZXQobXRkLCAwLCBzaXplb2YoKm10ZCkpOwotCW1wID0ga21hbGxvYyhzaXplb2YoKm1wKSwgR0ZQX0tFUk5FTCk7CisJbXAgPSBremFsbG9jKHNpemVvZigqbXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1wKQogCQlnb3RvIGVycl9vdXRfbXRkOwotCW1lbXNldChtcCwgMCwgc2l6ZW9mKCptcCkpOwogCiAJbXRkLT5wcml2ID0gbXA7CiAJbXAtPnJlc291cmNlLm1vZHVsZSA9IG1vZF9yZXM7CiAKIAkvKiBGaXJtd2FyZSdzIGRpYWdub3N0aWMgTlZSQU0gYXJlYS4gKi8KLQlkaWFnX3JlcyA9IGttYWxsb2Moc2l6ZW9mKCpkaWFnX3JlcyksIEdGUF9LRVJORUwpOworCWRpYWdfcmVzID0ga3phbGxvYyhzaXplb2YoKmRpYWdfcmVzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkaWFnX3JlcykKIAkJZ290byBlcnJfb3V0X21wOwogCi0JbWVtc2V0KGRpYWdfcmVzLCAwLCBzaXplb2YoKmRpYWdfcmVzKSk7CiAJZGlhZ19yZXMtPm5hbWUgPSBtczAybnZfcmVzX2RpYWdfcmFtOwogCWRpYWdfcmVzLT5zdGFydCA9IGFkZHI7CiAJZGlhZ19yZXMtPmVuZCA9IGFkZHIgKyBNUzAyTlZfUkFNIC0gMTsKQEAgLTE4MCwxMSArMTc2LDEwIEBACiAJbXAtPnJlc291cmNlLmRpYWdfcmFtID0gZGlhZ19yZXM7CiAKIAkvKiBVc2VyLWF2YWlsYWJsZSBnZW5lcmFsLXB1cnBvc2UgTlZSQU0gYXJlYS4gKi8KLQl1c2VyX3JlcyA9IGttYWxsb2Moc2l6ZW9mKCp1c2VyX3JlcyksIEdGUF9LRVJORUwpOworCXVzZXJfcmVzID0ga3phbGxvYyhzaXplb2YoKnVzZXJfcmVzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1c2VyX3JlcykKIAkJZ290byBlcnJfb3V0X2RpYWdfcmVzOwogCi0JbWVtc2V0KHVzZXJfcmVzLCAwLCBzaXplb2YoKnVzZXJfcmVzKSk7CiAJdXNlcl9yZXMtPm5hbWUgPSBtczAybnZfcmVzX3VzZXJfcmFtOwogCXVzZXJfcmVzLT5zdGFydCA9IGFkZHIgKyBNUzAyTlZfUkFNOwogCXVzZXJfcmVzLT5lbmQgPSBhZGRyICsgc2l6ZSAtIDE7CkBAIC0xOTQsMTEgKzE4OSwxMCBAQAogCW1wLT5yZXNvdXJjZS51c2VyX3JhbSA9IHVzZXJfcmVzOwogCiAJLyogQ29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyLiAqLwotCWNzcl9yZXMgPSBrbWFsbG9jKHNpemVvZigqY3NyX3JlcyksIEdGUF9LRVJORUwpOworCWNzcl9yZXMgPSBremFsbG9jKHNpemVvZigqY3NyX3JlcyksIEdGUF9LRVJORUwpOwogCWlmICghY3NyX3JlcykKIAkJZ290byBlcnJfb3V0X3VzZXJfcmVzOwogCi0JbWVtc2V0KGNzcl9yZXMsIDAsIHNpemVvZigqY3NyX3JlcykpOwogCWNzcl9yZXMtPm5hbWUgPSBtczAybnZfcmVzX2NzcjsKIAljc3JfcmVzLT5zdGFydCA9IGFkZHIgKyBNUzAyTlZfQ1NSOwogCWNzcl9yZXMtPmVuZCA9IGFkZHIgKyBNUzAyTlZfQ1NSICsgMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKaW5kZXggNWRiNzE2MC4uYTk4N2U5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCXN0cnVjdCBtdGRfaW5mbwkJCSpkZXZpY2U7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXByaXYgPSAoc3RydWN0IGRhdGFmbGFzaCAqKSBremFsbG9jKHNpemVvZiAqcHJpdiwgR0ZQX0tFUk5FTCk7CisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mICpwcml2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC00ODAsNyArNDgwLDcgQEAKIAlkZXZpY2UtPndyaXRlc2l6ZSA9IHBhZ2VzaXplOwogCWRldmljZS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlkZXZpY2UtPnR5cGUgPSBNVERfREFUQUZMQVNIOwotCWRldmljZS0+ZmxhZ3MgPSBNVERfQ0FQX05PUkZMQVNIOworCWRldmljZS0+ZmxhZ3MgPSBNVERfV1JJVEVBQkxFOwogCWRldmljZS0+ZXJhc2UgPSBkYXRhZmxhc2hfZXJhc2U7CiAJZGV2aWNlLT5yZWFkID0gZGF0YWZsYXNoX3JlYWQ7CiAJZGV2aWNlLT53cml0ZSA9IGRhdGFmbGFzaF93cml0ZTsKQEAgLTUzNiw3ICs1MzYsNyBAQAogCWlmIChzdGF0dXMgPD0gMCB8fCBzdGF0dXMgPT0gMHhmZikgewogCQlERUJVRyhNVERfREVCVUdfTEVWRUwxLCAiJXM6IHN0YXR1cyBlcnJvciAlZFxuIiwKIAkJCQlzcGktPmRldi5idXNfaWQsIHN0YXR1cyk7Ci0JCWlmIChzdGF0dXMgPT0gMHhmZikKKwkJaWYgKHN0YXR1cyA9PSAwIHx8IHN0YXR1cyA9PSAweGZmKQogCQkJc3RhdHVzID0gLUVOT0RFVjsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BocmFtLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3BocmFtLmMKaW5kZXggNmM3MzM3Zi4uNTZjYzFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9waHJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcGhyYW0uYwpAQCAtMTI2LDEyICsxMjYsMTAgQEAKIAlzdHJ1Y3QgcGhyYW1fbXRkX2xpc3QgKm5ldzsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAotCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpLCBHRlBfS0VSTkVMKTsKKwluZXcgPSBremFsbG9jKHNpemVvZigqbmV3KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXcpCiAJCWdvdG8gb3V0MDsKIAotCW1lbXNldChuZXcsIDAsIHNpemVvZigqbmV3KSk7Ci0KIAlyZXQgPSAtRUlPOwogCW5ldy0+bXRkLnByaXYgPSBpb3JlbWFwKHN0YXJ0LCBsZW4pOwogCWlmICghbmV3LT5tdGQucHJpdikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jCmluZGV4IDU0MmEwYzAuLjVmNDkyNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvc2xyYW0uYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3NscmFtLmMKQEAgLTE2OCwxOSArMTY4LDE2IEBACiAJCUUoInNscmFtOiBDYW5ub3QgYWxsb2NhdGUgbmV3IE1URCBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuKC1FTk9NRU0pOwogCX0KLQkoKmN1cm10ZCktPm10ZGluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pLCBHRlBfS0VSTkVMKTsKKwkoKmN1cm10ZCktPm10ZGluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pLCBHRlBfS0VSTkVMKTsKIAkoKmN1cm10ZCktPm5leHQgPSBOVUxMOwogCiAJaWYgKCgqY3VybXRkKS0+bXRkaW5mbykJewotCQltZW1zZXQoKGNoYXIgKikoKmN1cm10ZCktPm10ZGluZm8sIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKIAkJKCpjdXJtdGQpLT5tdGRpbmZvLT5wcml2ID0KLQkJCWttYWxsb2Moc2l6ZW9mKHNscmFtX3ByaXZfdCksIEdGUF9LRVJORUwpOworCQkJa3phbGxvYyhzaXplb2Yoc2xyYW1fcHJpdl90KSwgR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKCEoKmN1cm10ZCktPm10ZGluZm8tPnByaXYpIHsKIAkJCWtmcmVlKCgqY3VybXRkKS0+bXRkaW5mbyk7CiAJCQkoKmN1cm10ZCktPm10ZGluZm8gPSBOVUxMOwotCQl9IGVsc2UgewotCQkJbWVtc2V0KCgqY3VybXRkKS0+bXRkaW5mby0+cHJpdiwwLHNpemVvZihzbHJhbV9wcml2X3QpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZnRsLmMgYi9kcml2ZXJzL210ZC9mdGwuYwppbmRleCA4YTg3OGIzLi4yNDIzNWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9mdGwuYworKysgYi9kcml2ZXJzL210ZC9mdGwuYwpAQCAtMTAzMyw3ICsxMDMzLDcgQEAKIHsKIAlwYXJ0aXRpb25fdCAqcGFydGl0aW9uOwogCi0JcGFydGl0aW9uID0ga21hbGxvYyhzaXplb2YocGFydGl0aW9uX3QpLCBHRlBfS0VSTkVMKTsKKwlwYXJ0aXRpb24gPSBremFsbG9jKHNpemVvZihwYXJ0aXRpb25fdCksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFwYXJ0aXRpb24pIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gbWVtb3J5IHRvIHNjYW4gZm9yIEZUTCBvbiAlc1xuIiwKQEAgLTEwNDEsOCArMTA0MSw2IEBACiAJCXJldHVybjsKIAl9CiAKLQltZW1zZXQocGFydGl0aW9uLCAwLCBzaXplb2YocGFydGl0aW9uX3QpKTsKLQogCXBhcnRpdGlvbi0+bWJkLm10ZCA9IG10ZDsKIAogCWlmICgoc2Nhbl9oZWFkZXIocGFydGl0aW9uKSA9PSAwKSAmJgpAQCAtMTA1NCw3ICsxMDUyLDcgQEAKIAkJICAgICAgIGxlMzJfdG9fY3B1KHBhcnRpdGlvbi0+aGVhZGVyLkZvcm1hdHRlZFNpemUpID4+IDEwKTsKICNlbmRpZgogCQlwYXJ0aXRpb24tPm1iZC5zaXplID0gbGUzMl90b19jcHUocGFydGl0aW9uLT5oZWFkZXIuRm9ybWF0dGVkU2l6ZSkgPj4gOTsKLQkJcGFydGl0aW9uLT5tYmQuYmxrc2l6ZSA9IFNFQ1RPUl9TSVpFOworCiAJCXBhcnRpdGlvbi0+bWJkLnRyID0gdHI7CiAJCXBhcnRpdGlvbi0+bWJkLmRldm51bSA9IC0xOwogCQlpZiAoIWFkZF9tdGRfYmxrdHJhbnNfZGV2KCh2b2lkICopcGFydGl0aW9uKSkKQEAgLTEwNzYsNiArMTA3NCw3IEBACiAJLm5hbWUJCT0gImZ0bCIsCiAJLm1ham9yCQk9IEZUTF9NQUpPUiwKIAkucGFydF9iaXRzCT0gUEFSVF9CSVRTLAorCS5ibGtzaXplIAk9IFNFQ1RPUl9TSVpFLAogCS5yZWFkc2VjdAk9IGZ0bF9yZWFkc2VjdCwKIAkud3JpdGVzZWN0CT0gZnRsX3dyaXRlc2VjdCwKIAkuZ2V0Z2VvCQk9IGZ0bF9nZXRnZW8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYyBiL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCmluZGV4IDQxMTY1MzUuLmIwZTM5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCisrKyBiL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCkBAIC02NywxNyArNjcsMTYgQEAKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJJTkZUTDogYWRkX210ZCBmb3IgJXNcbiIsIG10ZC0+bmFtZSk7CiAKLQlpbmZ0bCA9IGttYWxsb2Moc2l6ZW9mKCppbmZ0bCksIEdGUF9LRVJORUwpOworCWluZnRsID0ga3phbGxvYyhzaXplb2YoKmluZnRsKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWluZnRsKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIklORlRMOiBPdXQgb2YgbWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZXNcbiIpOwogCQlyZXR1cm47CiAJfQotCW1lbXNldChpbmZ0bCwgMCwgc2l6ZW9mKCppbmZ0bCkpOwogCiAJaW5mdGwtPm1iZC5tdGQgPSBtdGQ7CiAJaW5mdGwtPm1iZC5kZXZudW0gPSAtMTsKLQlpbmZ0bC0+bWJkLmJsa3NpemUgPSA1MTI7CisKIAlpbmZ0bC0+bWJkLnRyID0gdHI7CiAKIAlpZiAoSU5GVExfbW91bnQoaW5mdGwpIDwgMCkgewpAQCAtMTYzLDEwICsxNjIsOSBAQAogCW9wcy5vb2JsZW4gPSBsZW47CiAJb3BzLm9vYmJ1ZiA9IGJ1ZjsKIAlvcHMuZGF0YnVmID0gTlVMTDsKLQlvcHMubGVuID0gbGVuOwogCiAJcmVzID0gbXRkLT5yZWFkX29vYihtdGQsIG9mZnMgJiB+KG10ZC0+d3JpdGVzaXplIC0gMSksICZvcHMpOwotCSpyZXRsZW4gPSBvcHMucmV0bGVuOworCSpyZXRsZW4gPSBvcHMub29icmV0bGVuOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTE4NCwxMCArMTgyLDkgQEAKIAlvcHMub29ibGVuID0gbGVuOwogCW9wcy5vb2JidWYgPSBidWY7CiAJb3BzLmRhdGJ1ZiA9IE5VTEw7Ci0Jb3BzLmxlbiA9IGxlbjsKIAogCXJlcyA9IG10ZC0+d3JpdGVfb29iKG10ZCwgb2ZmcyAmIH4obXRkLT53cml0ZXNpemUgLSAxKSwgJm9wcyk7Ci0JKnJldGxlbiA9IG9wcy5yZXRsZW47CisJKnJldGxlbiA9IG9wcy5vb2JyZXRsZW47CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtOTQ1LDYgKzk0Miw3IEBACiAJLm5hbWUJCT0gImluZnRsIiwKIAkubWFqb3IJCT0gSU5GVExfTUFKT1IsCiAJLnBhcnRfYml0cwk9IElORlRMX1BBUlROX0JJVFMsCisJLmJsa3NpemUgCT0gNTEyLAogCS5nZXRnZW8JCT0gaW5mdGxfZ2V0Z2VvLAogCS5yZWFkc2VjdAk9IGluZnRsX3JlYWRibG9jaywKIAkud3JpdGVzZWN0CT0gaW5mdGxfd3JpdGVibG9jaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCBkMTMyZWQ1Li5mNDU3MzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC02MCw2ICs2MCwxNSBAQAogCSAgSWdub3JlIHRoaXMgb3B0aW9uIGlmIHlvdSB1c2UgcnVuLXRpbWUgcGh5c21hcCBjb25maWd1cmF0aW9uCiAJICAoaS5lLiwgcnVuLXRpbWUgY2FsbGluZyBwaHlzbWFwX2NvbmZpZ3VyZSgpKS4KIAorY29uZmlnIE1URF9QSFlTTUFQX09GCisJdHJpc3RhdGUgIkZsYXNoIGRldmljZSBpbiBwaHlzaWNhbCBtZW1vcnkgbWFwIGJhc2VkIG9uIE9GIGRlc2NpcnB0aW9uIgorCWRlcGVuZHMgb24gUFBDX09GICYmIChNVERfQ0ZJIHx8IE1URF9KRURFQ1BST0JFIHx8IE1URF9ST00pCisJaGVscAorCSAgVGhpcyBwcm92aWRlcyBhICdtYXBwaW5nJyBkcml2ZXIgd2hpY2ggYWxsb3dzIHRoZSBOT1IgRmxhc2ggYW5kCisJICBST00gZHJpdmVyIGNvZGUgdG8gY29tbXVuaWNhdGUgd2l0aCBjaGlwcyB3aGljaCBhcmUgbWFwcGVkCisJICBwaHlzaWNhbGx5IGludG8gdGhlIENQVSdzIG1lbW9yeS4gVGhlIG1hcHBpbmcgZGVzY3JpcHRpb24gaGVyZSBpcworCSAgdGFrZW4gZnJvbSBPRiBkZXZpY2UgdHJlZS4KKwogY29uZmlnIE1URF9TVU5fVUZMQVNICiAJdHJpc3RhdGUgIlN1biBNaWNyb3N5c3RlbXMgdXNlcmZsYXNoIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTUEFSQyAmJiBNVERfQ0ZJCkBAIC0xODQsNiArMTkzLDI0IEBACiAKIAkgIEJFIFZFUlkgQ0FSRUZVTC4KIAorY29uZmlnIE1URF9FU0IyUk9NCisgICAgICAgIHRyaXN0YXRlICJCSU9TIGZsYXNoIGNoaXAgb24gSW50ZWwgRVNCIENvbnRyb2xsZXIgSHViIDIiCisgICAgICAgIGRlcGVuZHMgb24gWDg2ICYmIE1URF9KRURFQ1BST0JFICYmIFBDSQorICAgICAgICBoZWxwCisgICAgICAgICAgU3VwcG9ydCBmb3IgdHJlYXRpbmcgdGhlIEJJT1MgZmxhc2ggY2hpcCBvbiBFU0IyIG1vdGhlcmJvYXJkcworICAgICAgICAgIGFzIGFuIE1URCBkZXZpY2UgLSB3aXRoIHRoaXMgeW91IGNhbiByZXByb2dyYW0geW91ciBCSU9TLgorCisgICAgICAgICAgQkUgVkVSWSBDQVJFRlVMLgorCitjb25maWcgTVREX0NLODA0WFJPTQorCXRyaXN0YXRlICJCSU9TIGZsYXNoIGNoaXAgb24gTnZpZGlhIENLODA0IgorCWRlcGVuZHMgb24gWDg2ICYmIE1URF9KRURFQ1BST0JFCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdHJlYXRpbmcgdGhlIEJJT1MgZmxhc2ggY2hpcCBvbiBudmlkaWEgbW90aGVyYm9hcmRzCisJICBhcyBhbiBNVEQgZGV2aWNlIC0gd2l0aCB0aGlzIHlvdSBjYW4gcmVwcm9ncmFtIHlvdXIgQklPUy4KKworCSAgQkUgVkVSWSBDQVJFRlVMLgorCiBjb25maWcgTVREX1NDQjJfRkxBU0gKIAl0cmlzdGF0ZSAiQklPUyBmbGFzaCBjaGlwIG9uIEludGVsIFNDQjIgYm9hcmRzIgogCWRlcGVuZHMgb24gWDg2ICYmIE1URF9KRURFQ1BST0JFCkBAIC0zNTUsNTAgKzM4Miw2IEBACiAJICBUUSBDb21wb25lbnRzIFRRTTgzNHggYm9hcmRzLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgYm9hcmRzCiAJICBhbmQgd291bGQgbGlrZSB0byB1c2UgdGhlIGZsYXNoIGNoaXBzIG9uIGl0LCBzYXkgJ1knLgogCi1jb25maWcgTVREX0NTVE1fTUlQU19JWFgKLQl0cmlzdGF0ZSAiRmxhc2ggY2hpcCBtYXBwaW5nIG9uIElURSBRRUQtNE4tUzAxQiwgR2xvYmVzcGFuIElWUiBvciBjdXN0b20gYm9hcmQiCi0JZGVwZW5kcyBvbiBNSVBTICYmIE1URF9DRkkgJiYgTVREX0pFREVDUFJPQkUgJiYgTVREX1BBUlRJVElPTlMKLQloZWxwCi0JICBUaGlzIHByb3ZpZGVzIGEgbWFwcGluZyBkcml2ZXIgZm9yIHRoZSBJbnRlZ3JhdGVkIFRlY2hub2xvZ3kKLQkgIEV4cHJlc3MsIEluYyAoSVRFKSBRRUQtNE4tUzAxQiBldmFsIGJvYXJkIGFuZCB0aGUgR2xvYmVzcGFuIElWUgotCSAgUmVmZXJlbmNlIEJvYXJkLiBJdCBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGFkZHJlc3NpbmcsIGxlbmd0aCwKLQkgIGJ1c3dpZHRoLCB2cHAgY29kZSBhbmQgYWRkaXRpb24gc2V0dXAgb2YgdGhlIGZsYXNoIGRldmljZSBmb3IKLQkgIHRoZXNlIGJvYXJkcy4gSW4gYWRkaXRpb24sIHRoaXMgbWFwcGluZyBkcml2ZXIgY2FuIGJlIHVzZWQgZm9yCi0JICBvdGhlciBib2FyZHMgdmlhIHNldHRpbmcgb2YgdGhlIENPTkZJR19NVERfQ1NUTV9NSVBTX0lYWF9TVEFSVC8KLQkgIExFTi9CVVNXSURUSCBwYXJhbWV0ZXJzLiBUaGlzIG1hcHBpbmcgd2lsbCBwcm92aWRlIG9uZSBtdGQgZGV2aWNlCi0JICB1c2luZyBvbmUgcGFydGl0aW9uLiBUaGUgc3RhcnQgYWRkcmVzcyBjYW4gYmUgb2Zmc2V0IGZyb20gdGhlCi0JICBiZWdpbm5pbmcgb2YgZmxhc2ggYW5kIHRoZSBsZW4gY2FuIGJlIGxlc3MgdGhhbiB0aGUgdG90YWwgZmxhc2gKLQkgIGRldmljZSBzaXplIHRvIGFsbG93IGEgd2luZG93IGludG8gdGhlIGZsYXNoLiBCb3RoIENGSSBhbmQgSkVERUMKLQkgIHByb2JlcyBhcmUgY2FsbGVkLgotCi1jb25maWcgTVREX0NTVE1fTUlQU19JWFhfU1RBUlQKLQloZXggIlBoeXNpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgZmxhc2ggbWFwcGluZyIKLQlkZXBlbmRzIG9uIE1URF9DU1RNX01JUFNfSVhYCi0JZGVmYXVsdCAiMHg4MDAwMDAwIgotCWhlbHAKLQkgIFRoaXMgaXMgdGhlIHBoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiB0aGF0IHRoZSBNVEQgZHJpdmVyIHdpbGwKLQkgIHVzZSBmb3IgdGhlIGZsYXNoIGNoaXBzIG9uIHlvdXIgcGFydGljdWxhciB0YXJnZXQgYm9hcmQuCi0JICBSZWZlciB0byB0aGUgbWVtb3J5IG1hcCB3aGljaCBzaG91bGQgaG9wZWZ1bGx5IGJlIGluIHRoZQotCSAgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBib2FyZC4KLQotY29uZmlnIE1URF9DU1RNX01JUFNfSVhYX0xFTgotCWhleCAiUGh5c2ljYWwgbGVuZ3RoIG9mIGZsYXNoIG1hcHBpbmciCi0JZGVwZW5kcyBvbiBNVERfQ1NUTV9NSVBTX0lYWAotCWRlZmF1bHQgIjB4NDAwMDAwMCIKLQloZWxwCi0JICBUaGlzIGlzIHRoZSB0b3RhbCBsZW5ndGggdGhhdCB0aGUgTVREIGRyaXZlciB3aWxsIHVzZSBmb3IgdGhlCi0JICBmbGFzaCBjaGlwcyBvbiB5b3VyIHBhcnRpY3VsYXIgYm9hcmQuICBSZWZlciB0byB0aGUgbWVtb3J5Ci0JICBtYXAgd2hpY2ggc2hvdWxkIGhvcGVmdWxseSBiZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91cgotCSAgYm9hcmQuCi0KLWNvbmZpZyBNVERfQ1NUTV9NSVBTX0lYWF9CVVNXSURUSAotCWludCAiQnVzIHdpZHRoIGluIG9jdGV0cyIKLQlkZXBlbmRzIG9uIE1URF9DU1RNX01JUFNfSVhYCi0JZGVmYXVsdCAiMiIKLQloZWxwCi0JICBUaGlzIGlzIHRoZSB0b3RhbCBidXMgd2lkdGggb2YgdGhlIG1hcHBpbmcgb2YgdGhlIGZsYXNoIGNoaXBzCi0JICBvbiB5b3VyIHBhcnRpY3VsYXIgYm9hcmQuCi0KIGNvbmZpZyBNVERfT0NFTE9UCiAJdHJpc3RhdGUgIk1vbWVuY28gT2NlbG90IGJvb3QgZmxhc2ggZGV2aWNlIgogCWRlcGVuZHMgb24gTUlQUyAmJiBNT01FTkNPX09DRUxPVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKaW5kZXggMTkxYzE5Mi4uMDcxZDBiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCkBAIC0xMiwxMiArMTIsMTMgQEAKIG9iai0kKENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IpKz0gaW50ZWdyYXRvci1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0JBU1QpCQkrPSBiYXN0LWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfQ0ZJX0ZMQUdBRE0pCSs9IGNmaV9mbGFnYWRtLm8KLW9iai0kKENPTkZJR19NVERfQ1NUTV9NSVBTX0lYWCkJKz0gY3N0bV9taXBzX2l4eC5vCiBvYmotJChDT05GSUdfTVREX0RDMjEyODUpCSs9IGRjMjEyODUubwogb2JqLSQoQ09ORklHX01URF9ESUxORVRQQykJKz0gZGlsbmV0cGMubwogb2JqLSQoQ09ORklHX01URF9MNDQwR1gpCSs9IGw0NDBneC5vCiBvYmotJChDT05GSUdfTVREX0FNRDc2WFJPTSkJKz0gYW1kNzZ4cm9tLm8KK29iai0kKENPTkZJR19NVERfRVNCMlJPTSkJKz0gZXNiMnJvbS5vCiBvYmotJChDT05GSUdfTVREX0lDSFhST00pCSs9IGljaHhyb20ubworb2JqLSQoQ09ORklHX01URF9DSzgwNFhST00pCSs9IGNrODA0eHJvbS5vCiBvYmotJChDT05GSUdfTVREX1RTVU5BTUkpCSs9IHRzdW5hbWlfZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9MVUJCT0NLKQkrPSBsdWJib2NrLWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfTUFJTlNUT05FKQkrPSBtYWluc3RvbmUtZmxhc2gubwpAQCAtMjUsNiArMjYsNyBAQAogb2JqLSQoQ09ORklHX01URF9DRUlWQSkJCSs9IGNlaXZhLm8KIG9iai0kKENPTkZJR19NVERfT0NUQUdPTikJKz0gb2N0YWdvbi01MDY2Lm8KIG9iai0kKENPTkZJR19NVERfUEhZU01BUCkJKz0gcGh5c21hcC5vCitvYmotJChDT05GSUdfTVREX1BIWVNNQVBfT0YpCSs9IHBoeXNtYXBfb2Yubwogb2JqLSQoQ09ORklHX01URF9QTkMyMDAwKQkrPSBwbmMyMDAwLm8KIG9iai0kKENPTkZJR19NVERfUENNQ0lBKQkrPSBwY21jaWFtdGQubwogb2JqLSQoQ09ORklHX01URF9SUFhMSVRFKQkrPSBycHhsaXRlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYW1kNzZ4cm9tLmMgYi9kcml2ZXJzL210ZC9tYXBzL2FtZDc2eHJvbS5jCmluZGV4IDc5N2NhZmYuLjc4YjY3MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvYW1kNzZ4cm9tLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9hbWQ3Nnhyb20uYwpAQCAtNyw2ICs3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTQ0LDYgKzQ1LDIzIEBACiAJY2hhciBtYXBfbmFtZVtzaXplb2YoTU9EX05BTUUpICsgMiArIEFERFJFU1NfTkFNRV9MRU5dOwogfTsKIAorLyogVGhlIDIgYml0cyBjb250cm9sbGluZyB0aGUgd2luZG93IHNpemUgYXJlIG9mdGVuIHNldCB0byBhbGxvdyByZWFkaW5nCisgKiB0aGUgQklPUywgYnV0IHRvbyBzbWFsbCB0byBhbGxvdyB3cml0aW5nLCBzaW5jZSB0aGUgbG9jayByZWdpc3RlcnMgYXJlCisgKiA0TWlCIGxvd2VyIGluIHRoZSBhZGRyZXNzIHNwYWNlIHRoYW4gdGhlIGRhdGEuCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGZsYXNoaW5nIHRoZSBiaW9zLCBwZXJoYXBzIGFjY2lkZW50YWxseS4KKyAqCisgKiBUaGlzIHBhcmFtZXRlciBhbGxvd3MgdGhlIG5vcm1hbCBkcml2ZXIgdG8gb3Zlci1yaWRlIHRoZSBCSU9TIHNldHRpbmdzLgorICoKKyAqIFRoZSBiaXRzIGFyZSA2IGFuZCA3LiAgSWYgYm90aCBiaXRzIGFyZSBzZXQsIGl0IGlzIGEgNU1pQiB3aW5kb3cuCisgKiBJZiBvbmx5IHRoZSA3IEJpdCBpcyBzZXQsIGl0IGlzIGEgNE1pQiB3aW5kb3cuICBPdGhlcndpc2UsIGEKKyAqIDY0S2lCIHdpbmRvdy4KKyAqCisgKi8KK3N0YXRpYyB1aW50IHdpbl9zaXplX2JpdHM7Cittb2R1bGVfcGFyYW0od2luX3NpemVfYml0cywgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHdpbl9zaXplX2JpdHMsICJST00gd2luZG93IHNpemUgYml0cyBvdmVycmlkZSBmb3IgMHg0MyBieXRlLCBub3JtYWxseSBzZXQgYnkgQklPUy4iKTsKKwogc3RhdGljIHN0cnVjdCBhbWQ3Nnhyb21fd2luZG93IGFtZDc2eHJvbV93aW5kb3cgPSB7CiAJLm1hcHMgPSBMSVNUX0hFQURfSU5JVChhbWQ3Nnhyb21fd2luZG93Lm1hcHMpLAogfTsKQEAgLTk1LDYgKzExMywxNiBAQAogCS8qIFJlbWVtYmVyIHRoZSBwY2kgZGV2IEkgZmluZCB0aGUgd2luZG93IGluIC0gYWxyZWFkeSBoYXZlIGEgcmVmICovCiAJd2luZG93LT5wZGV2ID0gcGRldjsKIAorCS8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgcm9tIHdpbmRvdy4gIFRoaXMgaXMgb2Z0ZW4gaW5jb3JyZWN0bHkKKwkgKiBzZXQgdXAgYnkgdGhlIEJJT1MsIGFuZCB0aGUgNE1pQiBvZmZzZXQgZm9yIHRoZSBsb2NrIHJlZ2lzdGVycworCSAqIHJlcXVpcmVzIHRoZSBmdWxsIDVNaUIgb2Ygd2luZG93IHNwYWNlLgorCSAqCisJICogVGhpcyAnd3JpdGUsIHRoZW4gcmVhZCcgYXBwcm9hY2ggbGVhdmVzIHRoZSBiaXRzIGZvcgorCSAqIG90aGVyIHVzZXMgb2YgdGhlIGhhcmR3YXJlIGluZm8uCisJICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg0MywgJmJ5dGUpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQzLCBieXRlIHwgd2luX3NpemVfYml0cyApOworCiAJLyogQXNzdW1lIHRoZSByb20gd2luZG93IGlzIHByb3Blcmx5IHNldHVwLCBhbmQgZmluZCBpdCdzIHNpemUgKi8KIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDQzLCAmYnl0ZSk7CiAJaWYgKChieXRlICYgKCgxPDw3KXwoMTw8NikpKSA9PSAoKDE8PDcpfCgxPDw2KSkpIHsKQEAgLTEyOSwxMiArMTU3LDYgQEAKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpd2luZG93LT5yc3JjLmVuZCk7CiAJfQogCi0jaWYgMAotCi0JLyogRW5hYmxlIHRoZSBzZWxlY3RlZCByb20gd2luZG93ICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg0MywgJmJ5dGUpOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQzLCBieXRlIHwgcndpbmRvdy0+c2VnZW5fYml0cyk7Ci0jZW5kaWYKIAogCS8qIEVuYWJsZSB3cml0ZXMgdGhyb3VnaCB0aGUgcm9tIHdpbmRvdyAqLwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDAsICZieXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYmFzdC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMKaW5kZXggZTA3NGJiNi4uZmMzYjI2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCiAJaW5mby0+bWFwLnBoeXMgPSByZXMtPnN0YXJ0OwogCWluZm8tPm1hcC5zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKLQlpbmZvLT5tYXAubmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CQorCWluZm8tPm1hcC5uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKIAlpbmZvLT5tYXAuYmFua3dpZHRoID0gMjsKIAogCWlmIChpbmZvLT5tYXAuc2l6ZSA+IEFSRUFfTUFYU0laRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvY2VpdmEuYyBiL2RyaXZlcnMvbXRkL21hcHMvY2VpdmEuYwppbmRleCAwNDAyYzIxLi42MjllNmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2NlaXZhLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9jZWl2YS5jCkBAIC0xMjIsMTAgKzEyMiw5IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgbWFwX2luZm8gc3RydWN0cyBpbiBvbmUgZ28uCiAJICovCi0JbWFwcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXBfaW5mbykgKiBuciwgR0ZQX0tFUk5FTCk7CisJbWFwcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXBfaW5mbykgKiBuciwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtYXBzKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQobWFwcywgMCwgc2l6ZW9mKHN0cnVjdCBtYXBfaW5mbykgKiBucik7CiAJLyoKIAkgKiBDbGFpbSBhbmQgdGhlbiBtYXAgdGhlIG1lbW9yeSByZWdpb25zLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9jazgwNHhyb20uYyBiL2RyaXZlcnMvbXRkL21hcHMvY2s4MDR4cm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4ZDQyZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvY2s4MDR4cm9tLmMKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiBjazgwNHhyb20uYworICoKKyAqIE5vcm1hbCBtYXBwaW5ncyBvZiBjaGlwcyBpbiBwaHlzaWNhbCBtZW1vcnkKKyAqCisgKiBEYXZlIE9sc2VuIDxkb2xzZW5AbG54aS5jb20+CisgKiBSeWFuIEphY2tzb24gPHJqYWNrc29uQGxueGkuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL2ZsYXNoY2hpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKworI2RlZmluZSBNT0RfTkFNRSBLQlVJTERfQkFTRU5BTUUKKworI2RlZmluZSBBRERSRVNTX05BTUVfTEVOIDE4CisKKyNkZWZpbmUgUk9NX1BST0JFX1NURVBfU0laRSAoNjQqMTAyNCkKKworc3RydWN0IGNrODA0eHJvbV93aW5kb3cgeworCXZvaWQgX19pb21lbSAqdmlydDsKKwl1bnNpZ25lZCBsb25nIHBoeXM7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBsaXN0X2hlYWQgbWFwczsKKwlzdHJ1Y3QgcmVzb3VyY2UgcnNyYzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKK307CisKK3N0cnVjdCBjazgwNHhyb21fbWFwX2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbWFwX2luZm8gbWFwOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCXN0cnVjdCByZXNvdXJjZSByc3JjOworCWNoYXIgbWFwX25hbWVbc2l6ZW9mKE1PRF9OQU1FKSArIDIgKyBBRERSRVNTX05BTUVfTEVOXTsKK307CisKKworLyogVGhlIDIgYml0cyBjb250cm9sbGluZyB0aGUgd2luZG93IHNpemUgYXJlIG9mdGVuIHNldCB0byBhbGxvdyByZWFkaW5nCisgKiB0aGUgQklPUywgYnV0IHRvbyBzbWFsbCB0byBhbGxvdyB3cml0aW5nLCBzaW5jZSB0aGUgbG9jayByZWdpc3RlcnMgYXJlCisgKiA0TWlCIGxvd2VyIGluIHRoZSBhZGRyZXNzIHNwYWNlIHRoYW4gdGhlIGRhdGEuCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGZsYXNoaW5nIHRoZSBiaW9zLCBwZXJoYXBzIGFjY2lkZW50YWxseS4KKyAqCisgKiBUaGlzIHBhcmFtZXRlciBhbGxvd3MgdGhlIG5vcm1hbCBkcml2ZXIgdG8gb3ZlcnJpZGUgdGhlIEJJT1Mgc2V0dGluZ3MuCisgKgorICogVGhlIGJpdHMgYXJlIDYgYW5kIDcuICBJZiBib3RoIGJpdHMgYXJlIHNldCwgaXQgaXMgYSA1TWlCIHdpbmRvdy4KKyAqIElmIG9ubHkgdGhlIDcgQml0IGlzIHNldCwgaXQgaXMgYSA0TWlCIHdpbmRvdy4gIE90aGVyd2lzZSwgYQorICogNjRLaUIgd2luZG93LgorICoKKyAqLworc3RhdGljIHVpbnQgd2luX3NpemVfYml0cyA9IDA7Cittb2R1bGVfcGFyYW0od2luX3NpemVfYml0cywgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHdpbl9zaXplX2JpdHMsICJST00gd2luZG93IHNpemUgYml0cyBvdmVycmlkZSBmb3IgMHg4OCBieXRlLCBub3JtYWxseSBzZXQgYnkgQklPUy4iKTsKKworc3RhdGljIHN0cnVjdCBjazgwNHhyb21fd2luZG93IGNrODA0eHJvbV93aW5kb3cgPSB7CisJLm1hcHMgPSBMSVNUX0hFQURfSU5JVChjazgwNHhyb21fd2luZG93Lm1hcHMpLAorfTsKKworc3RhdGljIHZvaWQgY2s4MDR4cm9tX2NsZWFudXAoc3RydWN0IGNrODA0eHJvbV93aW5kb3cgKndpbmRvdykKK3sKKwlzdHJ1Y3QgY2s4MDR4cm9tX21hcF9pbmZvICptYXAsICpzY3JhdGNoOworCXU4IGJ5dGU7CisKKwlpZiAod2luZG93LT5wZGV2KSB7CisJCS8qIERpc2FibGUgd3JpdGVzIHRocm91Z2ggdGhlIHJvbSB3aW5kb3cgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUod2luZG93LT5wZGV2LCAweDZkLCAmYnl0ZSk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZSh3aW5kb3ctPnBkZXYsIDB4NmQsIGJ5dGUgJiB+MSk7CisJfQorCisJLyogRnJlZSBhbGwgb2YgdGhlIG10ZCBkZXZpY2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcCwgc2NyYXRjaCwgJndpbmRvdy0+bWFwcywgbGlzdCkgeworCQlpZiAobWFwLT5yc3JjLnBhcmVudCkKKwkJCXJlbGVhc2VfcmVzb3VyY2UoJm1hcC0+cnNyYyk7CisKKwkJZGVsX210ZF9kZXZpY2UobWFwLT5tdGQpOworCQltYXBfZGVzdHJveShtYXAtPm10ZCk7CisJCWxpc3RfZGVsKCZtYXAtPmxpc3QpOworCQlrZnJlZShtYXApOworCX0KKwlpZiAod2luZG93LT5yc3JjLnBhcmVudCkKKwkJcmVsZWFzZV9yZXNvdXJjZSgmd2luZG93LT5yc3JjKTsKKworCWlmICh3aW5kb3ctPnZpcnQpIHsKKwkJaW91bm1hcCh3aW5kb3ctPnZpcnQpOworCQl3aW5kb3ctPnZpcnQgPSBOVUxMOworCQl3aW5kb3ctPnBoeXMgPSAwOworCQl3aW5kb3ctPnNpemUgPSAwOworCX0KKwlwY2lfZGV2X3B1dCh3aW5kb3ctPnBkZXYpOworfQorCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNrODA0eHJvbV9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdGF0aWMgY2hhciAqcm9tX3Byb2JlX3R5cGVzW10gPSB7ICJjZmlfcHJvYmUiLCAiamVkZWNfcHJvYmUiLCBOVUxMIH07CisJdTggYnl0ZTsKKwlzdHJ1Y3QgY2s4MDR4cm9tX3dpbmRvdyAqd2luZG93ID0gJmNrODA0eHJvbV93aW5kb3c7CisJc3RydWN0IGNrODA0eHJvbV9tYXBfaW5mbyAqbWFwID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIG1hcF90b3A7CisKKwkvKiBSZW1lbWJlciB0aGUgcGNpIGRldiBJIGZpbmQgdGhlIHdpbmRvdyBpbiAqLworCXdpbmRvdy0+cGRldiA9IHBjaV9kZXZfZ2V0KHBkZXYpOworCisJLyogRW5hYmxlIHRoZSBzZWxlY3RlZCByb20gd2luZG93LiAgVGhpcyBpcyBvZnRlbiBpbmNvcnJlY3RseQorCSAqIHNldCB1cCBieSB0aGUgQklPUywgYW5kIHRoZSA0TWlCIG9mZnNldCBmb3IgdGhlIGxvY2sgcmVnaXN0ZXJzCisJICogcmVxdWlyZXMgdGhlIGZ1bGwgNU1pQiBvZiB3aW5kb3cgc3BhY2UuCisJICoKKwkgKiBUaGlzICd3cml0ZSwgdGhlbiByZWFkJyBhcHByb2FjaCBsZWF2ZXMgdGhlIGJpdHMgZm9yCisJICogb3RoZXIgdXNlcyBvZiB0aGUgaGFyZHdhcmUgaW5mby4KKwkgKi8KKyAgICAgICAgcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg4OCwgJmJ5dGUpOworICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg4OCwgYnl0ZSB8IHdpbl9zaXplX2JpdHMgKTsKKworCisJLyogQXNzdW1lIHRoZSByb20gd2luZG93IGlzIHByb3Blcmx5IHNldHVwLCBhbmQgZmluZCBpdCdzIHNpemUgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDg4LCAmYnl0ZSk7CisKKwlpZiAoKGJ5dGUgJiAoKDE8PDcpfCgxPDw2KSkpID09ICgoMTw8Nyl8KDE8PDYpKSkKKwkJd2luZG93LT5waHlzID0gMHhmZmIwMDAwMDsgLyogNU1pQiAqLworCWVsc2UgaWYgKChieXRlICYgKDE8PDcpKSA9PSAoMTw8NykpCisJCXdpbmRvdy0+cGh5cyA9IDB4ZmZjMDAwMDA7IC8qIDRNaUIgKi8KKwllbHNlCisJCXdpbmRvdy0+cGh5cyA9IDB4ZmZmZjAwMDA7IC8qIDY0S2lCICovCisKKwl3aW5kb3ctPnNpemUgPSAweGZmZmZmZmZmVUwgLSB3aW5kb3ctPnBoeXMgKyAxVUw7CisKKwkvKgorCSAqIFRyeSB0byByZXNlcnZlIHRoZSB3aW5kb3cgbWVtIHJlZ2lvbi4gIElmIHRoaXMgZmFpbHMgdGhlbgorCSAqIGl0IGlzIGxpa2VseSBkdWUgdG8gYSBmcmFnbWVudCBvZiB0aGUgd2luZG93IGJlaW5nCisJICogInJlc2VydmVkIiBieSB0aGUgQklPUy4gIEluIHRoZSBjYXNlIHRoYXQgdGhlCisJICogcmVxdWVzdF9tZW1fcmVnaW9uKCkgZmFpbHMgdGhlbiBvbmNlIHRoZSByb20gc2l6ZSBpcworCSAqIGRpc2NvdmVyZWQgd2Ugd2lsbCB0cnkgdG8gcmVzZXJ2ZSB0aGUgdW5yZXNlcnZlZCBmcmFnbWVudC4KKwkgKi8KKwl3aW5kb3ctPnJzcmMubmFtZSA9IE1PRF9OQU1FOworCXdpbmRvdy0+cnNyYy5zdGFydCA9IHdpbmRvdy0+cGh5czsKKwl3aW5kb3ctPnJzcmMuZW5kICAgPSB3aW5kb3ctPnBoeXMgKyB3aW5kb3ctPnNpemUgLSAxOworCXdpbmRvdy0+cnNyYy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJndpbmRvdy0+cnNyYykpIHsKKwkJd2luZG93LT5yc3JjLnBhcmVudCA9IE5VTEw7CisJCXByaW50ayhLRVJOX0VSUiBNT0RfTkFNRQorCQkJIiAlcygpOiBVbmFibGUgdG8gcmVnaXN0ZXIgcmVzb3VyY2UiCisJCQkiIDB4JS4wMTZsbHgtMHglLjAxNmxseCAtIGtlcm5lbCBidWc/XG4iLAorCQkJX19mdW5jX18sCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXdpbmRvdy0+cnNyYy5zdGFydCwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpd2luZG93LT5yc3JjLmVuZCk7CisJfQorCisKKwkvKiBFbmFibGUgd3JpdGVzIHRocm91Z2ggdGhlIHJvbSB3aW5kb3cgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDZkLCAmYnl0ZSk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NmQsIGJ5dGUgfCAxKTsKKworCS8qIEZJWE1FIGhhbmRsZSByZWdpc3RlcnMgMHg4MCAtIDB4OEMgdGhlIGJpb3MgcmVnaW9uIGxvY2tzICovCisKKwkvKiBGb3Igd3JpdGUgYWNjZXNzZXMgY2FjaGVzIGFyZSB1c2VsZXNzICovCisJd2luZG93LT52aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKHdpbmRvdy0+cGh5cywgd2luZG93LT5zaXplKTsKKwlpZiAoIXdpbmRvdy0+dmlydCkgeworCQlwcmludGsoS0VSTl9FUlIgTU9EX05BTUUgIjogaW9yZW1hcCglMDhseCwgJTA4bHgpIGZhaWxlZFxuIiwKKwkJCXdpbmRvdy0+cGh5cywgd2luZG93LT5zaXplKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IHRoZSBmaXJzdCBhZGRyZXNzIHRvIGxvb2sgZm9yIGEgcm9tIGNoaXAgYXQgKi8KKwltYXBfdG9wID0gd2luZG93LT5waHlzOworI2lmIDEKKwkvKiBUaGUgcHJvYmUgc2VxdWVuY2UgcnVuIG92ZXIgdGhlIGZpcm13YXJlIGh1YiBsb2NrCisJICogcmVnaXN0ZXJzIHNldHMgdGhlbSB0byAweDcgKG5vIGFjY2VzcykuCisJICogUHJvYmUgYXQgbW9zdCB0aGUgbGFzdCA0TWlCIG9mIHRoZSBhZGRyZXNzIHNwYWNlLgorCSAqLworCWlmIChtYXBfdG9wIDwgMHhmZmMwMDAwMCkKKwkJbWFwX3RvcCA9IDB4ZmZjMDAwMDA7CisjZW5kaWYKKwkvKiBMb29wICB0aHJvdWdoIGFuZCBsb29rIGZvciByb20gY2hpcHMuICBTaW5jZSB3ZSBkb24ndCBrbm93IHRoZQorCSAqIHN0YXJ0aW5nIGFkZHJlc3MgZm9yIGVhY2ggY2hpcCwgcHJvYmUgZXZlcnkgUk9NX1BST0JFX1NURVBfU0laRQorCSAqIGJ5dGVzIGZyb20gdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIHdpbmRvdy4KKwkgKi8KKwl3aGlsZSgobWFwX3RvcCAtIDEpIDwgMHhmZmZmZmZmZlVMKSB7CisJCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpOworCQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwkJaW50IGk7CisKKwkJaWYgKCFtYXApCisJCQltYXAgPSBrbWFsbG9jKHNpemVvZigqbWFwKSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFtYXApIHsKKwkJCXByaW50ayhLRVJOX0VSUiBNT0RfTkFNRSAiOiBrbWFsbG9jIGZhaWxlZCIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJbWVtc2V0KG1hcCwgMCwgc2l6ZW9mKCptYXApKTsKKwkJSU5JVF9MSVNUX0hFQUQoJm1hcC0+bGlzdCk7CisJCW1hcC0+bWFwLm5hbWUgPSBtYXAtPm1hcF9uYW1lOworCQltYXAtPm1hcC5waHlzID0gbWFwX3RvcDsKKwkJb2Zmc2V0ID0gbWFwX3RvcCAtIHdpbmRvdy0+cGh5czsKKwkJbWFwLT5tYXAudmlydCA9ICh2b2lkIF9faW9tZW0gKikKKwkJCSgoKHVuc2lnbmVkIGxvbmcpKHdpbmRvdy0+dmlydCkpICsgb2Zmc2V0KTsKKwkJbWFwLT5tYXAuc2l6ZSA9IDB4ZmZmZmZmZmZVTCAtIG1hcF90b3AgKyAxVUw7CisJCS8qIFNldCB0aGUgbmFtZSBvZiB0aGUgbWFwIHRvIHRoZSBhZGRyZXNzIEkgYW0gdHJ5aW5nICovCisJCXNwcmludGYobWFwLT5tYXBfbmFtZSwgIiVzIEAlMDhseCIsCisJCQlNT0RfTkFNRSwgbWFwLT5tYXAucGh5cyk7CisKKwkJLyogVGhlcmUgaXMgbm8gZ2VuZXJpYyBWUFAgc3VwcG9ydCAqLworCQlmb3IobWFwLT5tYXAuYmFua3dpZHRoID0gMzI7IG1hcC0+bWFwLmJhbmt3aWR0aDsKKwkJCW1hcC0+bWFwLmJhbmt3aWR0aCA+Pj0gMSkKKwkJeworCQkJY2hhciAqKnByb2JlX3R5cGU7CisJCQkvKiBTa2lwIGJhbmt3aWR0aHMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCAqLworCQkJaWYgKCFtYXBfYmFua3dpZHRoX3N1cHBvcnRlZChtYXAtPm1hcC5iYW5rd2lkdGgpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBTZXR1cCB0aGUgbWFwIG1ldGhvZHMgKi8KKwkJCXNpbXBsZV9tYXBfaW5pdCgmbWFwLT5tYXApOworCisJCQkvKiBUcnkgYWxsIG9mIHRoZSBwcm9iZSBtZXRob2RzICovCisJCQlwcm9iZV90eXBlID0gcm9tX3Byb2JlX3R5cGVzOworCQkJZm9yKDsgKnByb2JlX3R5cGU7IHByb2JlX3R5cGUrKykgeworCQkJCW1hcC0+bXRkID0gZG9fbWFwX3Byb2JlKCpwcm9iZV90eXBlLCAmbWFwLT5tYXApOworCQkJCWlmIChtYXAtPm10ZCkKKwkJCQkJZ290byBmb3VuZDsKKwkJCX0KKwkJfQorCQltYXBfdG9wICs9IFJPTV9QUk9CRV9TVEVQX1NJWkU7CisJCWNvbnRpbnVlOworCWZvdW5kOgorCQkvKiBUcmltIHRoZSBzaXplIGlmIHdlIGFyZSBsYXJnZXIgdGhhbiB0aGUgbWFwICovCisJCWlmIChtYXAtPm10ZC0+c2l6ZSA+IG1hcC0+bWFwLnNpemUpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgTU9EX05BTUUKKwkJCQkiIHJvbSgldSkgbGFyZ2VyIHRoYW4gd2luZG93KCVsdSkuIGZpeGluZy4uLlxuIiwKKwkJCQltYXAtPm10ZC0+c2l6ZSwgbWFwLT5tYXAuc2l6ZSk7CisJCQltYXAtPm10ZC0+c2l6ZSA9IG1hcC0+bWFwLnNpemU7CisJCX0KKwkJaWYgKHdpbmRvdy0+cnNyYy5wYXJlbnQpIHsKKwkJCS8qCisJCQkgKiBSZWdpc3RlcmluZyB0aGUgTVREIGRldmljZSBpbiBpb21lbSBtYXkgbm90IGJlIHBvc3NpYmxlCisJCQkgKiBpZiB0aGVyZSBpcyBhIEJJT1MgInJlc2VydmVkIiBhbmQgQlVTWSByYW5nZS4gIElmIHRoaXMKKwkJCSAqIGZhaWxzIHRoZW4gY29udGludWUgYW55d2F5LgorCQkJICovCisJCQltYXAtPnJzcmMubmFtZSAgPSBtYXAtPm1hcF9uYW1lOworCQkJbWFwLT5yc3JjLnN0YXJ0ID0gbWFwLT5tYXAucGh5czsKKwkJCW1hcC0+cnNyYy5lbmQgICA9IG1hcC0+bWFwLnBoeXMgKyBtYXAtPm10ZC0+c2l6ZSAtIDE7CisJCQltYXAtPnJzcmMuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKKwkJCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZ3aW5kb3ctPnJzcmMsICZtYXAtPnJzcmMpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSIE1PRF9OQU1FCisJCQkJCSI6IGNhbm5vdCByZXNlcnZlIE1URCByZXNvdXJjZVxuIik7CisJCQkJbWFwLT5yc3JjLnBhcmVudCA9IE5VTEw7CisJCQl9CisJCX0KKworCQkvKiBNYWtlIHRoZSB3aG9sZSByZWdpb24gdmlzaWJsZSBpbiB0aGUgbWFwICovCisJCW1hcC0+bWFwLnZpcnQgPSB3aW5kb3ctPnZpcnQ7CisJCW1hcC0+bWFwLnBoeXMgPSB3aW5kb3ctPnBoeXM7CisJCWNmaSA9IG1hcC0+bWFwLmZsZHJ2X3ByaXY7CisJCWZvcihpID0gMDsgaSA8IGNmaS0+bnVtY2hpcHM7IGkrKykKKwkJCWNmaS0+Y2hpcHNbaV0uc3RhcnQgKz0gb2Zmc2V0OworCisJCS8qIE5vdyB0aGF0IHRoZSBtdGQgZGV2aWNlcyBpcyBjb21wbGV0ZSBjbGFpbSBhbmQgZXhwb3J0IGl0ICovCisJCW1hcC0+bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCQlpZiAoYWRkX210ZF9kZXZpY2UobWFwLT5tdGQpKSB7CisJCQltYXBfZGVzdHJveShtYXAtPm10ZCk7CisJCQltYXAtPm10ZCA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQorCisKKwkJLyogQ2FsY3VsYXRlIHRoZSBuZXcgdmFsdWUgb2YgbWFwX3RvcCAqLworCQltYXBfdG9wICs9IG1hcC0+bXRkLT5zaXplOworCisJCS8qIEZpbGUgYXdheSB0aGUgbWFwIHN0cnVjdHVyZSAqLworCQlsaXN0X2FkZCgmbWFwLT5saXN0LCAmd2luZG93LT5tYXBzKTsKKwkJbWFwID0gTlVMTDsKKwl9CisKKyBvdXQ6CisJLyogRnJlZSBhbnkgbGVmdCBvdmVyIG1hcCBzdHJ1Y3R1cmVzICovCisJaWYgKG1hcCkKKwkJa2ZyZWUobWFwKTsKKworCS8qIFNlZSBpZiBJIGhhdmUgYW55IG1hcCBzdHJ1Y3R1cmVzICovCisJaWYgKGxpc3RfZW1wdHkoJndpbmRvdy0+bWFwcykpIHsKKwkJY2s4MDR4cm9tX2NsZWFudXAod2luZG93KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjazgwNHhyb21fcmVtb3ZlX29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGNrODA0eHJvbV93aW5kb3cgKndpbmRvdyA9ICZjazgwNHhyb21fd2luZG93OworCisJY2s4MDR4cm9tX2NsZWFudXAod2luZG93KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNrODA0eHJvbV9wY2lfdGJsW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgMHgwMDUxLAorICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LCAvKiBudmlkaWEgY2s4MDQgKi8KKwl7IDAsIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjazgwNHhyb21fcGNpX3RibCk7CisKKyNpZiAwCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2s4MDR4cm9tX2RyaXZlciA9IHsKKwkubmFtZSA9CQlNT0RfTkFNRSwKKwkuaWRfdGFibGUgPQljazgwNHhyb21fcGNpX3RibCwKKwkucHJvYmUgPQljazgwNHhyb21faW5pdF9vbmUsCisJLnJlbW92ZSA9CWNrODA0eHJvbV9yZW1vdmVfb25lLAorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2NrODA0eHJvbSh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBwY2lfZGV2aWNlX2lkICppZDsKKwlpbnQgcmV0VmFsOworCXBkZXYgPSBOVUxMOworCisJZm9yKGlkID0gY2s4MDR4cm9tX3BjaV90Ymw7IGlkLT52ZW5kb3I7IGlkKyspIHsKKwkJcGRldiA9IHBjaV9maW5kX2RldmljZShpZC0+dmVuZG9yLCBpZC0+ZGV2aWNlLCBOVUxMKTsKKwkJaWYgKHBkZXYpCisJCQlicmVhazsKKwl9CisJaWYgKHBkZXYpIHsKKwkJcmV0VmFsID0gY2s4MDR4cm9tX2luaXRfb25lKHBkZXYsICZjazgwNHhyb21fcGNpX3RibFswXSk7CisJCXBjaV9kZXZfcHV0KHBkZXYpOworCQlyZXR1cm4gcmV0VmFsOworCX0KKwlyZXR1cm4gLUVOWElPOworI2lmIDAKKwlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZjazgwNHhyb21fZHJpdmVyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9jazgwNHhyb20odm9pZCkKK3sKKwljazgwNHhyb21fcmVtb3ZlX29uZShjazgwNHhyb21fd2luZG93LnBkZXYpOworfQorCittb2R1bGVfaW5pdChpbml0X2NrODA0eHJvbSk7Cittb2R1bGVfZXhpdChjbGVhbnVwX2NrODA0eHJvbSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkVyaWMgQmllZGVybWFuIDxlYmllZGVybWFuQGxueGkuY29tPiwgRGF2ZSBPbHNlbiA8ZG9sc2VuQGxueGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGRyaXZlciBmb3IgQklPUyBjaGlwcyBvbiB0aGUgTnZpZGlhIGNrODA0IHNvdXRoYnJpZGdlIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvY3N0bV9taXBzX2l4eC5jIGIvZHJpdmVycy9tdGQvbWFwcy9jc3RtX21pcHNfaXh4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMmMzOGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9jc3RtX21pcHNfaXh4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoKLSAqICRJZDogY3N0bV9taXBzX2l4eC5jLHYgMS4xNCAyMDA1LzExLzA3IDExOjE0OjI2IGdsZWl4bmVyIEV4cCAkCi0gKgotICogTWFwcGluZyBvZiBhIGN1c3RvbSBib2FyZCB3aXRoIGJvdGggQU1EIENGSSBhbmQgSkVERUMgZmxhc2ggaW4gcGFydGl0aW9ucy4KLSAqIENvbmZpZyB3aXRoIGJvdGggQ0ZJIGFuZCBKRURFQyBkZXZpY2Ugc3VwcG9ydC4KLSAqCi0gKiBCYXNpY2FsbHkgcGh5c21hcC5jIHdpdGggdGhlIGFkZGl0aW9uIG9mIHBhcnRpdGlvbnMgYW5kCi0gKiBhbiBhcnJheSBvZiBtYXBwaW5nIGluZm8gdG8gYWNjb21vZGF0ZSBtb3JlIHRoYW4gb25lIGZsYXNoIHR5cGUgcGVyIGJvYXJkLgotICoKLSAqIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0lURTgxNzIpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfSVZSKQotI2RlZmluZSBDQ19HQ1IgICAgICAgICAgICAgMHhCNDAxMzgxOAotI2RlZmluZSBDQ19HUEJDUiAgICAgICAgICAgMHhCNDAxMzgwQQotI2RlZmluZSBDQ19HUEJEUiAgICAgICAgICAgMHhCNDAxMzgwOAotI2RlZmluZSBDQ19NNjhLX0RFVklDRSAgICAgMQotI2RlZmluZSBDQ19NNjhLX0ZVTkNUSU9OICAgNgotI2RlZmluZSBDQ19DT05GQUREUiAgICAgICAgMHhCODAwNDAwMAotI2RlZmluZSBDQ19DT05GREFUQSAgICAgICAgMHhCODAwNDAwNAotI2RlZmluZSBDQ19GQ19GQ1IgICAgICAgICAgMHhCODAwMjAwNAotI2RlZmluZSBDQ19GQ19EQ1IgICAgICAgICAgMHhCODAwMjAwOAotI2RlZmluZSBDQ19HUEFDUiAgICAgICAgICAgMHhCNDAxMzgwMgotI2RlZmluZSBDQ19HUEFJQ1IgICAgICAgICAgMHhCNDAxMzgwNAotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01JUFNfSVRFODE3MikgfHwgZGVmaW5lZChDT05GSUdfTUlQU19JVlIpICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0lURTgxNzIpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfSVZSKQotdm9pZCBjc3RtX21pcHNfaXh4X3NldF92cHAoc3RydWN0IG1hcF9pbmZvICptYXAsaW50IHZwcCkKLXsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZwcF9sb2NrKTsKLQlzdGF0aWMgaW50IHZwcF9jb3VudCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHBfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHZwcCkgewotCQlpZiAoIXZwcF9jb3VudCsrKSB7Ci0JCQlfX3UxNglkYXRhOwotCQkJX191OAlkYXRhMTsKLQkJCXN0YXRpYyB1OCBmaXJzdCA9IDE7Ci0KLQkJCS8vIFNldCBHUElPIHBvcnQgQiBwaW4zIHRvIGhpZ2gKLQkJCWRhdGEgPSAqKF9fdTE2ICopKENDX0dQQkNSKTsKLQkJCWRhdGEgPSAoZGF0YSAmIDB4ZmYwZikgfCAweDAwNDA7Ci0JCQkqKF9fdTE2ICopQ0NfR1BCQ1IgPSBkYXRhOwotCQkJKihfX3U4ICopQ0NfR1BCRFIgPSAoKihfX3U4KilDQ19HUEJEUikgfCAweDA4OwotCQkJaWYgKGZpcnN0KSB7Ci0JCQkJZmlyc3QgPSAwOwotCQkJCS8qIG5lZWQgdG8gaGF2ZSB0aGlzIGRlbGF5IGZvciBmaXJzdAotCQkJCSAgIGVuYWJsaW5nIHZwcCBhZnRlciBwb3dlcnVwICovCi0JCQkJdWRlbGF5KDQwKTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWlmICghLS12cHBfY291bnQpIHsKLQkJCV9fdTE2CWRhdGE7Ci0KLQkJCS8vIFNldCBHUElPIHBvcnQgQiBwaW4zIHRvIGhpZ2gKLQkJCWRhdGEgPSAqKF9fdTE2ICopKENDX0dQQkNSKTsKLQkJCWRhdGEgPSAoZGF0YSAmIDB4ZmYzZikgfCAweDAwNDA7Ci0JCQkqKF9fdTE2ICopQ0NfR1BCQ1IgPSBkYXRhOwotCQkJKihfX3U4ICopQ0NfR1BCRFIgPSAoKihfX3U4KilDQ19HUEJEUikgJiAweGY3OwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwcF9sb2NrLCBmbGFncyk7Ci19Ci0jZW5kaWYKLQotLyogYm9hcmQgYW5kIHBhcnRpdGlvbiBkZXNjcmlwdGlvbiAqLwotCi0jZGVmaW5lIE1BWF9QSFlTTUFQX1BBUlRJVElPTlMgICAgOAotc3RydWN0IGNzdG1fbWlwc19peHhfaW5mbyB7Ci0JY2hhciAqbmFtZTsKLQl1bnNpZ25lZCBsb25nIHdpbmRvd19hZGRyOwotCXVuc2lnbmVkIGxvbmcgd2luZG93X3NpemU7Ci0JaW50IGJhbmt3aWR0aDsKLQlpbnQgbnVtX3BhcnRpdGlvbnM7Ci19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19JVEU4MTcyKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0lWUikKLSNkZWZpbmUgUEhZU01BUF9OVU1CRVIgIDEgIC8vIG51bWJlciBvZiBib2FyZCBkZXNjIHN0cnVjdHMgbmVlZGVkLCBvbmUgcGVyIGNvbnRpZ3VvdXMgZmxhc2ggdHlwZQotY29uc3Qgc3RydWN0IGNzdG1fbWlwc19peHhfaW5mbyBjc3RtX21pcHNfaXh4X2JvYXJkX2Rlc2NbUEhZU01BUF9OVU1CRVJdID0KLXsKLSAgICB7ICAgLy8gMjhGMTI4SjNBIGluIDJ4MTYgY29uZmlndXJhdGlvbgotICAgICAgICAiYmlnIGZsYXNoIiwgICAgIC8vIG5hbWUKLQkweDA4MDAwMDAwLCAgICAgIC8vIHdpbmRvd19hZGRyCi0JMHgwMjAwMDAwMCwgICAgICAvLyB3aW5kb3dfc2l6ZQotICAgICAgICA0LCAgICAgICAgICAgICAgIC8vIGJhbmt3aWR0aAotCTEsICAgICAgICAgICAgICAgLy8gbnVtX3BhcnRpdGlvbnMKLSAgICB9Ci0KLX07Ci1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY3N0bV9taXBzX2l4eF9wYXJ0aXRpb25zW1BIWVNNQVBfTlVNQkVSXVtNQVhfUEhZU01BUF9QQVJUSVRJT05TXSA9IHsKLXsgICAvLyAyOEYxMjhKM0EgaW4gMngxNiBjb25maWd1cmF0aW9uCi0JewotCQkubmFtZSA9ICJtYWluIHBhcnRpdGlvbiAiLAotCQkuc2l6ZSA9IDB4MDIwMDAwMDAsIC8vIDEyOCB4IDIgeCAxMjhrIGJ5dGUgc2VjdG9ycwotCQkub2Zmc2V0ID0gMCwKLQl9LAotfSwKLX07Ci0jZWxzZSAvKiBkZWZpbmVkKENPTkZJR19NSVBTX0lURTgxNzIpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfSVZSKSAqLwotI2RlZmluZSBQSFlTTUFQX05VTUJFUiAgMSAgLy8gbnVtYmVyIG9mIGJvYXJkIGRlc2Mgc3RydWN0cyBuZWVkZWQsIG9uZSBwZXIgY29udGlndW91cyBmbGFzaCB0eXBlCi1jb25zdCBzdHJ1Y3QgY3N0bV9taXBzX2l4eF9pbmZvIGNzdG1fbWlwc19peHhfYm9hcmRfZGVzY1tQSFlTTUFQX05VTUJFUl0gPQotewotICAgIHsKLSAgICAgICAgIk1URCBmbGFzaCIsICAgICAgICAgICAgICAgICAgIC8vIG5hbWUKLQlDT05GSUdfTVREX0NTVE1fTUlQU19JWFhfU1RBUlQsICAgICAgLy8gd2luZG93X2FkZHIKLQlDT05GSUdfTVREX0NTVE1fTUlQU19JWFhfTEVOLCAgICAgICAgLy8gd2luZG93X3NpemUKLSAgICAgICAgQ09ORklHX01URF9DU1RNX01JUFNfSVhYX0JVU1dJRFRILCAgIC8vIGJhbmt3aWR0aAotCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1fcGFydGl0aW9ucwotICAgIH0sCi0KLX07Ci1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY3N0bV9taXBzX2l4eF9wYXJ0aXRpb25zW1BIWVNNQVBfTlVNQkVSXVtNQVhfUEhZU01BUF9QQVJUSVRJT05TXSA9IHsKLXsKLQl7Ci0JCS5uYW1lID0gIm1haW4gcGFydGl0aW9uIiwKLQkJLnNpemUgPSAgQ09ORklHX01URF9DU1RNX01JUFNfSVhYX0xFTiwKLQkJLm9mZnNldCA9IDAsCi0JfSwKLX0sCi19OwotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01JUFNfSVRFODE3MikgfHwgZGVmaW5lZChDT05GSUdfTUlQU19JVlIpICovCi0KLXN0cnVjdCBtYXBfaW5mbyBjc3RtX21pcHNfaXh4X21hcFtQSFlTTUFQX05VTUJFUl07Ci0KLWludCBfX2luaXQgaW5pdF9jc3RtX21pcHNfaXh4KHZvaWQpCi17Ci0JaW50IGk7Ci0JaW50IGplZGVjOwotICAgICAgICBzdHJ1Y3QgbXRkX2luZm8gKm15bXRkOwotICAgICAgICBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7Ci0KLQkvKiBJbml0aWFsaXplIG1hcHBpbmcgKi8KLQlmb3IgKGk9MDtpPFBIWVNNQVBfTlVNQkVSO2krKykgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgImNzdG1fbWlwc19peHggZmxhc2ggZGV2aWNlOiAweCVseCBhdCAweCVseFxuIiwKLQkJICAgICAgIGNzdG1fbWlwc19peHhfYm9hcmRfZGVzY1tpXS53aW5kb3dfc2l6ZSwgY3N0bV9taXBzX2l4eF9ib2FyZF9kZXNjW2ldLndpbmRvd19hZGRyKTsKLQotCi0JCWNzdG1fbWlwc19peHhfbWFwW2ldLnBoeXMgPSBjc3RtX21pcHNfaXh4X2JvYXJkX2Rlc2NbaV0ud2luZG93X2FkZHI7Ci0JCWNzdG1fbWlwc19peHhfbWFwW2ldLnZpcnQgPSBpb3JlbWFwKGNzdG1fbWlwc19peHhfYm9hcmRfZGVzY1tpXS53aW5kb3dfYWRkciwgY3N0bV9taXBzX2l4eF9ib2FyZF9kZXNjW2ldLndpbmRvd19zaXplKTsKLQkJaWYgKCFjc3RtX21pcHNfaXh4X21hcFtpXS52aXJ0KSB7Ci0JCQlpbnQgaiA9IDA7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gaW9yZW1hcFxuIik7Ci0JCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JCQkJaWYgKGNzdG1fbWlwc19peHhfbWFwW2pdLnZpcnQpIHsKLQkJCQkJaW91bm1hcChjc3RtX21pcHNfaXh4X21hcFtqXS52aXJ0KTsKLQkJCQkJY3N0bV9taXBzX2l4eF9tYXBbal0udmlydCA9IE5VTEw7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIC1FSU87Ci0JICAgICAgICB9Ci0JCWNzdG1fbWlwc19peHhfbWFwW2ldLm5hbWUgPSBjc3RtX21pcHNfaXh4X2JvYXJkX2Rlc2NbaV0ubmFtZTsKLQkJY3N0bV9taXBzX2l4eF9tYXBbaV0uc2l6ZSA9IGNzdG1fbWlwc19peHhfYm9hcmRfZGVzY1tpXS53aW5kb3dfc2l6ZTsKLQkJY3N0bV9taXBzX2l4eF9tYXBbaV0uYmFua3dpZHRoID0gY3N0bV9taXBzX2l4eF9ib2FyZF9kZXNjW2ldLmJhbmt3aWR0aDsKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0lURTgxNzIpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfSVZSKQotICAgICAgICAgICAgICAgIGNzdG1fbWlwc19peHhfbWFwW2ldLnNldF92cHAgPSBjc3RtX21pcHNfaXh4X3NldF92cHA7Ci0jZW5kaWYKLQkJc2ltcGxlX21hcF9pbml0KCZjc3RtX21pcHNfaXh4X21hcFtpXSk7Ci0JCS8vcHJpbnRrKEtFUk5fTk9USUNFICJjc3RtX21pcHNfaXh4OiBpb3JlbWFwIGlzICV4XG4iLCh1bnNpZ25lZCBpbnQpKGNzdG1fbWlwc19peHhfbWFwW2ldLnZpcnQpKTsKLQl9Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0lURTgxNzIpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfSVZSKQotICAgICAgICBzZXR1cF9JVEVfSVZSX2ZsYXNoKCk7Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfTUlQU19JVEU4MTcyKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0lWUikgKi8KLQotCWZvciAoaT0wO2k8UEhZU01BUF9OVU1CRVI7aSsrKSB7Ci0gICAgICAgICAgICAgICAgcGFydHMgPSAmY3N0bV9taXBzX2l4eF9wYXJ0aXRpb25zW2ldWzBdOwotCQlqZWRlYyA9IDA7Ci0JCW15bXRkID0gKHN0cnVjdCBtdGRfaW5mbyAqKWRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJmNzdG1fbWlwc19peHhfbWFwW2ldKTsKLQkJLy9wcmludGsoS0VSTl9OT1RJQ0UgInBoeW1hcCAlZCBjZmlfcHJvYmU6IG15bXRkIGlzICV4XG4iLGksKHVuc2lnbmVkIGludClteW10ZCk7Ci0JCWlmICghbXltdGQpIHsKLQkJCWplZGVjID0gMTsKLQkJCW15bXRkID0gKHN0cnVjdCBtdGRfaW5mbyAqKWRvX21hcF9wcm9iZSgiamVkZWMiLCAmY3N0bV9taXBzX2l4eF9tYXBbaV0pOwotCQkgICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiY3N0bV9taXBzX2l4eCAlZCBqZWRlYzogbXltdGQgaXMgJXhcbiIsaSwodW5zaWduZWQgaW50KW15bXRkKTsKLQkJfQotCQlpZiAobXltdGQpIHsKLQkJCW15bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JICAgICAgICAgICAgICAgIGNzdG1fbWlwc19peHhfbWFwW2ldLm1hcF9wcml2XzIgPSAodW5zaWduZWQgbG9uZylteW10ZDsKLQkJICAgICAgICBhZGRfbXRkX3BhcnRpdGlvbnMobXltdGQsIHBhcnRzLCBjc3RtX21pcHNfaXh4X2JvYXJkX2Rlc2NbaV0ubnVtX3BhcnRpdGlvbnMpOwotCQl9Ci0JCWVsc2UgewotCQkJZm9yIChpID0gMDsgaSA8IFBIWVNNQVBfTlVNQkVSOyBpKyspIHsKLQkJCQlpZiAoY3N0bV9taXBzX2l4eF9tYXBbaV0udmlydCkgewotCQkJCQlpb3VubWFwKGNzdG1fbWlwc19peHhfbWFwW2ldLnZpcnQpOwotCQkJCQljc3RtX21pcHNfaXh4X21hcFtpXS52aXJ0ID0gTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gLUVOWElPOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9jc3RtX21pcHNfaXh4KHZvaWQpCi17Ci0JaW50IGk7Ci0gICAgICAgIHN0cnVjdCBtdGRfaW5mbyAqbXltdGQ7Ci0KLQlmb3IgKGk9MDtpPFBIWVNNQVBfTlVNQkVSO2krKykgewotCSAgICAgICAgbXltdGQgPSAoc3RydWN0IG10ZF9pbmZvICopY3N0bV9taXBzX2l4eF9tYXBbaV0ubWFwX3ByaXZfMjsKLQkJaWYgKG15bXRkKSB7Ci0JCQlkZWxfbXRkX3BhcnRpdGlvbnMobXltdGQpOwotCQkJbWFwX2Rlc3Ryb3kobXltdGQpOwotCQl9Ci0JCWlmIChjc3RtX21pcHNfaXh4X21hcFtpXS52aXJ0KSB7Ci0JCQlpb3VubWFwKCh2b2lkICopY3N0bV9taXBzX2l4eF9tYXBbaV0udmlydCk7Ci0JCQljc3RtX21pcHNfaXh4X21hcFtpXS52aXJ0ID0gMDsKLQkJfQotCX0KLX0KLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0lURTgxNzIpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfSVZSKQotdm9pZCBQQ0lTZXRVTG9uZ0J5T2Zmc2V0KF9fdTMyIERldk51bWJlciwgX191MzIgRnVuY051bWJlciwgX191MzIgT2Zmc2V0LCBfX3UzMiBkYXRhKQotewotCV9fdTMyCW9mZnNldDsKLQotCW9mZnNldCA9ICggdW5zaWduZWQgbG9uZyApKCAweDgwMDAwMDAwIHwgKCBEZXZOdW1iZXIgPDwgMTEgKSArICggRnVuY051bWJlciA8PCA4ICkgKyBPZmZzZXQpIDsKLQotCSooX191MzIgKilDQ19DT05GQUREUiA9IG9mZnNldDsKLQkqKF9fdTMyICopQ0NfQ09ORkRBVEEgPSBkYXRhOwotfQotdm9pZCBzZXR1cF9JVEVfSVZSX2ZsYXNoKCkKLXsKLQkJX191MzIJc2l6ZSwgYmFzZTsKLQotCQlzaXplID0gMHgwZTAwMDAwMDsJCS8vIDMyTWlCCi0JCWJhc2UgPSAoMHgwODAwMDAwMCkgPj4gOCA+PjE7IC8vIEJ1Zzogd2UgbXVzdCBzaGlmdCBvbmUgbW9yZSBiaXQKLQotCQkvKiBuZWVkIHRvIHNldCBJVEUgZmxhc2ggdG8gMzIgYml0cyBpbnN0ZWFkIG9mIGRlZmF1bHQgOCAqLwotI2lmZGVmIENPTkZJR19NSVBTX0lWUgotCQkqKF9fdTMyICopQ0NfRkNfRkNSID0gMHg1NTsKLQkJKihfX3UzMiAqKUNDX0dQQUNSID0gMHhmZmZjOwotI2Vsc2UKLQkJKihfX3UzMiAqKUNDX0ZDX0ZDUiA9IDB4Nzc7Ci0jZW5kaWYKLQkJLyogdHVybiBidXJzdGluZyBvZmYgKi8KLQkJKihfX3UzMiAqKUNDX0ZDX0RDUiA9IDB4MDsKLQotCQkvKiBzZXR1cCBmb3Igb25lIGNoaXAgNCBieXRlIFBDSSBhY2Nlc3MgKi8KLQkJUENJU2V0VUxvbmdCeU9mZnNldChDQ19NNjhLX0RFVklDRSwgQ0NfTTY4S19GVU5DVElPTiwgMHg2MCwgc2l6ZSB8IGJhc2UpOwotCQlQQ0lTZXRVTG9uZ0J5T2Zmc2V0KENDX002OEtfREVWSUNFLCBDQ19NNjhLX0ZVTkNUSU9OLCAweDY0LCAweDAyKTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19NSVBTX0lURTgxNzIpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfSVZSKSAqLwotCi1tb2R1bGVfaW5pdChpbml0X2NzdG1fbWlwc19peHgpOwotbW9kdWxlX2V4aXQoY2xlYW51cF9jc3RtX21pcHNfaXh4KTsKLQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJBbGljZSBIZW5uZXNzeSA8YWhlbm5lc3N5QG12aXN0YS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1URCBtYXAgZHJpdmVyIGZvciBJVEUgODE3MkcgYW5kIEdsb2Jlc3BhbiBJVlIgYm9hcmRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2VzYjJyb20uYyBiL2RyaXZlcnMvbXRkL21hcHMvZXNiMnJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDgwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9tYXBzL2VzYjJyb20uYwpAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqIGVzYjJyb20uYworICoKKyAqIE5vcm1hbCBtYXBwaW5ncyBvZiBmbGFzaCBjaGlwcyBpbiBwaHlzaWNhbCBtZW1vcnkKKyAqIHRocm91Z2ggdGhlIEludGVsIEVTQjIgU291dGhicmlkZ2UuCisgKgorICogVGhpcyB3YXMgZGVyaXZlZCBmcm9tIGljaHhyb20uYyBpbiBNYXkgMjAwNiBieQorICoJTGV3IEdsZW5kZW5uaW5nIDxsZ2xlbmRlbm5pbmdAbG54aS5jb20+CisgKgorICogRXJpYyBCaWVkZXJtYW4sIG9mIGNvdXJzZSwgd2FzIGEgbWFqb3IgaGVscCBpbiB0aGlzIGVmZm9ydC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL2NmaS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9mbGFzaGNoaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjZGVmaW5lIE1PRF9OQU1FIEtCVUlMRF9CQVNFTkFNRQorCisjZGVmaW5lIEFERFJFU1NfTkFNRV9MRU4gMTgKKworI2RlZmluZSBST01fUFJPQkVfU1RFUF9TSVpFICg2NCoxMDI0KSAvKiA2NEtpQiAqLworCisjZGVmaW5lIEJJT1NfQ05UTAkweERDCisjZGVmaW5lIEJJT1NfTE9DS19FTkFCTEUJMHgwMgorI2RlZmluZSBCSU9TX1dSSVRFX0VOQUJMRQkweDAxCisKKy8qIFRoaXMgYmVjYW1lIGEgMTYtYml0IHJlZ2lzdGVyLCBhbmQgRU4yIGhhcyBkaXNhcHBlYXJlZCAqLworI2RlZmluZSBGV0hfREVDX0VOMQkweEQ4CisjZGVmaW5lIEZXSF9GOF9FTgkweDgwMDAKKyNkZWZpbmUgRldIX0YwX0VOCTB4NDAwMAorI2RlZmluZSBGV0hfRThfRU4JMHgyMDAwCisjZGVmaW5lIEZXSF9FMF9FTgkweDEwMDAKKyNkZWZpbmUgRldIX0Q4X0VOCTB4MDgwMAorI2RlZmluZSBGV0hfRDBfRU4JMHgwNDAwCisjZGVmaW5lIEZXSF9DOF9FTgkweDAyMDAKKyNkZWZpbmUgRldIX0MwX0VOCTB4MDEwMAorI2RlZmluZSBGV0hfTEVHQUNZX0ZfRU4JMHgwMDgwCisjZGVmaW5lIEZXSF9MRUdBQ1lfRV9FTgkweDAwNDAKKy8qIHJlc2VydmVkICAweDAwMjAgYW5kIDB4MDAxMCAqLworI2RlZmluZSBGV0hfNzBfRU4JMHgwMDA4CisjZGVmaW5lIEZXSF82MF9FTgkweDAwMDQKKyNkZWZpbmUgRldIXzUwX0VOCTB4MDAwMgorI2RlZmluZSBGV0hfNDBfRU4JMHgwMDAxCisKKy8qIHRoZXNlIGFyZSAzMi1iaXQgdmFsdWVzICovCisjZGVmaW5lIEZXSF9TRUwxCTB4RDAKKyNkZWZpbmUgRldIX1NFTDIJMHhENAorCisjZGVmaW5lIEZXSF84TWlCCShGV0hfRjhfRU4gfCBGV0hfRjBfRU4gfCBGV0hfRThfRU4gfCBGV0hfRTBfRU4gfCBcCisJCQkgRldIX0Q4X0VOIHwgRldIX0QwX0VOIHwgRldIX0M4X0VOIHwgRldIX0MwX0VOIHwgXAorCQkJIEZXSF83MF9FTiB8IEZXSF82MF9FTiB8IEZXSF81MF9FTiB8IEZXSF80MF9FTikKKworI2RlZmluZSBGV0hfN01pQgkoRldIX0Y4X0VOIHwgRldIX0YwX0VOIHwgRldIX0U4X0VOIHwgRldIX0UwX0VOIHwgXAorCQkJIEZXSF9EOF9FTiB8IEZXSF9EMF9FTiB8IEZXSF9DOF9FTiB8IEZXSF9DMF9FTiB8IFwKKwkJCSBGV0hfNzBfRU4gfCBGV0hfNjBfRU4gfCBGV0hfNTBfRU4pCisKKyNkZWZpbmUgRldIXzZNaUIJKEZXSF9GOF9FTiB8IEZXSF9GMF9FTiB8IEZXSF9FOF9FTiB8IEZXSF9FMF9FTiB8IFwKKwkJCSBGV0hfRDhfRU4gfCBGV0hfRDBfRU4gfCBGV0hfQzhfRU4gfCBGV0hfQzBfRU4gfCBcCisJCQkgRldIXzcwX0VOIHwgRldIXzYwX0VOKQorCisjZGVmaW5lIEZXSF81TWlCCShGV0hfRjhfRU4gfCBGV0hfRjBfRU4gfCBGV0hfRThfRU4gfCBGV0hfRTBfRU4gfCBcCisJCQkgRldIX0Q4X0VOIHwgRldIX0QwX0VOIHwgRldIX0M4X0VOIHwgRldIX0MwX0VOIHwgXAorCQkJIEZXSF83MF9FTikKKworI2RlZmluZSBGV0hfNE1pQgkoRldIX0Y4X0VOIHwgRldIX0YwX0VOIHwgRldIX0U4X0VOIHwgRldIX0UwX0VOIHwgXAorCQkJIEZXSF9EOF9FTiB8IEZXSF9EMF9FTiB8IEZXSF9DOF9FTiB8IEZXSF9DMF9FTikKKworI2RlZmluZSBGV0hfM181TWlCCShGV0hfRjhfRU4gfCBGV0hfRjBfRU4gfCBGV0hfRThfRU4gfCBGV0hfRTBfRU4gfCBcCisJCQkgRldIX0Q4X0VOIHwgRldIX0QwX0VOIHwgRldIX0M4X0VOKQorCisjZGVmaW5lIEZXSF8zTWlCCShGV0hfRjhfRU4gfCBGV0hfRjBfRU4gfCBGV0hfRThfRU4gfCBGV0hfRTBfRU4gfCBcCisJCQkgRldIX0Q4X0VOIHwgRldIX0QwX0VOKQorCisjZGVmaW5lIEZXSF8yXzVNaUIJKEZXSF9GOF9FTiB8IEZXSF9GMF9FTiB8IEZXSF9FOF9FTiB8IEZXSF9FMF9FTiB8IFwKKwkJCSBGV0hfRDhfRU4pCisKKyNkZWZpbmUgRldIXzJNaUIJKEZXSF9GOF9FTiB8IEZXSF9GMF9FTiB8IEZXSF9FOF9FTiB8IEZXSF9FMF9FTikKKworI2RlZmluZSBGV0hfMV81TWlCCShGV0hfRjhfRU4gfCBGV0hfRjBfRU4gfCBGV0hfRThfRU4pCisKKyNkZWZpbmUgRldIXzFNaUIJKEZXSF9GOF9FTiB8IEZXSF9GMF9FTikKKworI2RlZmluZSBGV0hfMF81TWlCCShGV0hfRjhfRU4pCisKKworc3RydWN0IGVzYjJyb21fd2luZG93IHsKKwl2b2lkIF9faW9tZW0qIHZpcnQ7CisJdW5zaWduZWQgbG9uZyBwaHlzOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1hcHM7CisJc3RydWN0IHJlc291cmNlIHJzcmM7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7Cit9OworCitzdHJ1Y3QgZXNiMnJvbV9tYXBfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBtYXBfaW5mbyBtYXA7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc3RydWN0IHJlc291cmNlIHJzcmM7CisJY2hhciBtYXBfbmFtZVtzaXplb2YoTU9EX05BTUUpICsgMiArIEFERFJFU1NfTkFNRV9MRU5dOworfTsKKworc3RhdGljIHN0cnVjdCBlc2Iycm9tX3dpbmRvdyBlc2Iycm9tX3dpbmRvdyA9IHsKKwkubWFwcyA9IExJU1RfSEVBRF9JTklUKGVzYjJyb21fd2luZG93Lm1hcHMpLAorfTsKKworc3RhdGljIHZvaWQgZXNiMnJvbV9jbGVhbnVwKHN0cnVjdCBlc2Iycm9tX3dpbmRvdyAqd2luZG93KQoreworCXN0cnVjdCBlc2Iycm9tX21hcF9pbmZvICptYXAsICpzY3JhdGNoOworCXU4IGJ5dGU7CisKKwkvKiBEaXNhYmxlIHdyaXRlcyB0aHJvdWdoIHRoZSByb20gd2luZG93ICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUod2luZG93LT5wZGV2LCBCSU9TX0NOVEwsICZieXRlKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUod2luZG93LT5wZGV2LCBCSU9TX0NOVEwsCisJCWJ5dGUgJiB+QklPU19XUklURV9FTkFCTEUpOworCisJLyogRnJlZSBhbGwgb2YgdGhlIG10ZCBkZXZpY2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcCwgc2NyYXRjaCwgJndpbmRvdy0+bWFwcywgbGlzdCkgeworCQlpZiAobWFwLT5yc3JjLnBhcmVudCkKKwkJCXJlbGVhc2VfcmVzb3VyY2UoJm1hcC0+cnNyYyk7CisJCWRlbF9tdGRfZGV2aWNlKG1hcC0+bXRkKTsKKwkJbWFwX2Rlc3Ryb3kobWFwLT5tdGQpOworCQlsaXN0X2RlbCgmbWFwLT5saXN0KTsKKwkJa2ZyZWUobWFwKTsKKwl9CisJaWYgKHdpbmRvdy0+cnNyYy5wYXJlbnQpCisJCXJlbGVhc2VfcmVzb3VyY2UoJndpbmRvdy0+cnNyYyk7CisJaWYgKHdpbmRvdy0+dmlydCkgeworCQlpb3VubWFwKHdpbmRvdy0+dmlydCk7CisJCXdpbmRvdy0+dmlydCA9IE5VTEw7CisJCXdpbmRvdy0+cGh5cyA9IDA7CisJCXdpbmRvdy0+c2l6ZSA9IDA7CisJfQorCXBjaV9kZXZfcHV0KHdpbmRvdy0+cGRldik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVzYjJyb21faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdGF0aWMgY2hhciAqcm9tX3Byb2JlX3R5cGVzW10gPSB7ICJjZmlfcHJvYmUiLCAiamVkZWNfcHJvYmUiLCBOVUxMIH07CisJc3RydWN0IGVzYjJyb21fd2luZG93ICp3aW5kb3cgPSAmZXNiMnJvbV93aW5kb3c7CisJc3RydWN0IGVzYjJyb21fbWFwX2luZm8gKm1hcCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBtYXBfdG9wOworCXU4IGJ5dGU7CisJdTE2IHdvcmQ7CisKKwkvKiBGb3Igbm93IEkganVzdCBoYW5kbGUgdGhlIGVjYjIgYW5kIEkgYXNzdW1lIHRoZXJlCisJICogYXJlIG5vdCBhIGxvdCBvZiByZXNvdXJjZXMgdXAgYXQgdGhlIHRvcCBvZiB0aGUgYWRkcmVzcworCSAqIHNwYWNlLiAgSXQgaXMgcG9zc2libGUgdG8gaGFuZGxlIG90aGVyIGRldmljZXMgaW4gdGhlCisJICogdG9wIDE2TWlCIGJ1dCBpdCBpcyB2ZXJ5IHBhaW5mdWwuICBBbHNvIHNpbmNlCisJICogeW91IGNhbiBvbmx5IHJlYWxseSBhdHRhY2ggYSBGV0ggdG8gYW4gSUNIWCB0aGVyZQorCSAqIGEgbnVtYmVyIG9mIHNpbXBsaWZpY2F0aW9ucyB5b3UgY2FuIG1ha2UuCisJICoKKwkgKiBBbHNvIHlvdSBjYW4gcGFnZSBmaXJtd2FyZSBodWJzIGlmIGFuIDhNaUIgd2luZG93IGlzbid0IGVub3VnaAorCSAqIGJ1dCBkb24ndCBjdXJyZW50bHkgaGFuZGxlIHRoYXQgY2FzZSBlaXRoZXIuCisJICovCisJd2luZG93LT5wZGV2ID0gcGNpX2Rldl9nZXQocGRldik7CisKKwkvKiBSTEc6ICBleHBlcmltZW50IDIuICBGb3JjZSB0aGUgd2luZG93IHJlZ2lzdGVycyB0byB0aGUgd2lkZXN0IHZhbHVlcyAqLworCisvKgorCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIEZXSF9ERUNfRU4xLCAmd29yZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9yaWdpbmFsIEZXSF9ERUNfRU4xIDogJXhcbiIsIHdvcmQpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBGV0hfREVDX0VOMSwgMHhmZik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgRldIX0RFQ19FTjEsICZieXRlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiTmV3IEZXSF9ERUNfRU4xIDogJXhcbiIsIGJ5dGUpOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgRldIX0RFQ19FTjIsICZieXRlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT3JpZ2luYWwgRldIX0RFQ19FTjIgOiAleFxuIiwgYnl0ZSk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEZXSF9ERUNfRU4yLCAweDBmKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBGV0hfREVDX0VOMiwgJmJ5dGUpOworCXByaW50ayhLRVJOX0RFQlVHICJOZXcgRldIX0RFQ19FTjIgOiAleFxuIiwgYnl0ZSk7CisqLworCisJLyogRmluZCBhIHJlZ2lvbiBjb250aW51b3VzIHRvIHRoZSBlbmQgb2YgdGhlIFJPTSB3aW5kb3cgICovCisJd2luZG93LT5waHlzID0gMDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBGV0hfREVDX0VOMSwgJndvcmQpOworCXByaW50ayhLRVJOX0RFQlVHICJwY2lfcmVhZF9jb25maWdfYnl0ZSA6ICV4XG4iLCB3b3JkKTsKKworCWlmICgod29yZCAmIEZXSF84TWlCKSA9PSBGV0hfOE1pQikKKwkJd2luZG93LT5waHlzID0gMHhmZjQwMDAwMDsKKwllbHNlIGlmICgod29yZCAmIEZXSF83TWlCKSA9PSBGV0hfN01pQikKKwkJd2luZG93LT5waHlzID0gMHhmZjUwMDAwMDsKKwllbHNlIGlmICgod29yZCAmIEZXSF82TWlCKSA9PSBGV0hfNk1pQikKKwkJd2luZG93LT5waHlzID0gMHhmZjYwMDAwMDsKKwllbHNlIGlmICgod29yZCAmIEZXSF81TWlCKSA9PSBGV0hfNU1pQikKKwkJd2luZG93LT5waHlzID0gMHhGRjcwMDAwMDsKKwllbHNlIGlmICgod29yZCAmIEZXSF80TWlCKSA9PSBGV0hfNE1pQikKKwkJd2luZG93LT5waHlzID0gMHhmZmMwMDAwMDsKKwllbHNlIGlmICgod29yZCAmIEZXSF8zXzVNaUIpID09IEZXSF8zXzVNaUIpCisJCXdpbmRvdy0+cGh5cyA9IDB4ZmZjODAwMDA7CisJZWxzZSBpZiAoKHdvcmQgJiBGV0hfM01pQikgPT0gRldIXzNNaUIpCisJCXdpbmRvdy0+cGh5cyA9IDB4ZmZkMDAwMDA7CisJZWxzZSBpZiAoKHdvcmQgJiBGV0hfMl81TWlCKSA9PSBGV0hfMl81TWlCKQorCQl3aW5kb3ctPnBoeXMgPSAweGZmZDgwMDAwOworCWVsc2UgaWYgKCh3b3JkICYgRldIXzJNaUIpID09IEZXSF8yTWlCKQorCQl3aW5kb3ctPnBoeXMgPSAweGZmZTAwMDAwOworCWVsc2UgaWYgKCh3b3JkICYgRldIXzFfNU1pQikgPT0gRldIXzFfNU1pQikKKwkJd2luZG93LT5waHlzID0gMHhmZmU4MDAwMDsKKwllbHNlIGlmICgod29yZCAmIEZXSF8xTWlCKSA9PSBGV0hfMU1pQikKKwkJd2luZG93LT5waHlzID0gMHhmZmYwMDAwMDsKKwllbHNlIGlmICgod29yZCAmIEZXSF8wXzVNaUIpID09IEZXSF8wXzVNaUIpCisJCXdpbmRvdy0+cGh5cyA9IDB4ZmZmODAwMDA7CisKKwkvKiByZXNlcnZlZCAgMHgwMDIwIGFuZCAweDAwMTAgKi8KKwl3aW5kb3ctPnBoeXMgLT0gMHg0MDAwMDBVTDsKKwl3aW5kb3ctPnNpemUgPSAoMHhmZmZmZmZmZlVMIC0gd2luZG93LT5waHlzKSArIDFVTDsKKworCS8qIEVuYWJsZSB3cml0ZXMgdGhyb3VnaCB0aGUgcm9tIHdpbmRvdyAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEJJT1NfQ05UTCwgJmJ5dGUpOworCWlmICghKGJ5dGUgJiBCSU9TX1dSSVRFX0VOQUJMRSkgICYmIChieXRlICYgKEJJT1NfTE9DS19FTkFCTEUpKSkgeworCQkvKiBUaGUgQklPUyB3aWxsIGdlbmVyYXRlIGFuIGVycm9yIGlmIEkgZW5hYmxlCisJCSAqIHRoaXMgZGV2aWNlLCBzbyBkb24ndCBldmVuIHRyeS4KKwkJICovCisJCXByaW50ayhLRVJOX0VSUiBNT0RfTkFNRSAiOiBmaXJtd2FyZSBhY2Nlc3MgY29udHJvbCwgSSBjYW4ndCBlbmFibGUgd3JpdGVzXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBCSU9TX0NOVEwsIGJ5dGUgfCBCSU9TX1dSSVRFX0VOQUJMRSk7CisKKwkvKgorCSAqIFRyeSB0byByZXNlcnZlIHRoZSB3aW5kb3cgbWVtIHJlZ2lvbi4gIElmIHRoaXMgZmFpbHMgdGhlbgorCSAqIGl0IGlzIGxpa2VseSBkdWUgdG8gdGhlIHdpbmRvdyBiZWluZyAicmVzZXZlZCIgYnkgdGhlIEJJT1MuCisJICovCisJd2luZG93LT5yc3JjLm5hbWUgPSBNT0RfTkFNRTsKKwl3aW5kb3ctPnJzcmMuc3RhcnQgPSB3aW5kb3ctPnBoeXM7CisJd2luZG93LT5yc3JjLmVuZCAgID0gd2luZG93LT5waHlzICsgd2luZG93LT5zaXplIC0gMTsKKwl3aW5kb3ctPnJzcmMuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZ3aW5kb3ctPnJzcmMpKSB7CisJCXdpbmRvdy0+cnNyYy5wYXJlbnQgPSBOVUxMOworCQlwcmludGsoS0VSTl9ERUJVRyBNT0RfTkFNRQorCQkJIjogJXMoKTogVW5hYmxlIHRvIHJlZ2lzdGVyIHJlc291cmNlIgorCQkJIiAweCUuMDhsbHgtMHglLjA4bGx4IC0ga2VybmVsIGJ1Zz9cbiIsCisJCQlfX2Z1bmNfXywKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpd2luZG93LT5yc3JjLnN0YXJ0LAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl3aW5kb3ctPnJzcmMuZW5kKTsKKwl9CisKKwkvKiBNYXAgdGhlIGZpcm13YXJlIGh1YiBpbnRvIG15IGFkZHJlc3Mgc3BhY2UuICovCisJd2luZG93LT52aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKHdpbmRvdy0+cGh5cywgd2luZG93LT5zaXplKTsKKwlpZiAoIXdpbmRvdy0+dmlydCkgeworCQlwcmludGsoS0VSTl9FUlIgTU9EX05BTUUgIjogaW9yZW1hcCglMDhseCwgJTA4bHgpIGZhaWxlZFxuIiwKKwkJCXdpbmRvdy0+cGh5cywgd2luZG93LT5zaXplKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IHRoZSBmaXJzdCBhZGRyZXNzIHRvIGxvb2sgZm9yIGFuIHJvbSBjaGlwIGF0ICovCisJbWFwX3RvcCA9IHdpbmRvdy0+cGh5czsKKwlpZiAoKHdpbmRvdy0+cGh5cyAmIDB4M2ZmZmZmKSAhPSAwKSB7CisJCS8qIGlmIG5vdCBhbGlnbmVkIG9uIDRNaUIsIGxvb2sgNE1pQiBsb3dlciBpbiBhZGRyZXNzIHNwYWNlICovCisJCW1hcF90b3AgPSB3aW5kb3ctPnBoeXMgKyAweDQwMDAwMDsKKwl9CisjaWYgMQorCS8qIFRoZSBwcm9iZSBzZXF1ZW5jZSBydW4gb3ZlciB0aGUgZmlybXdhcmUgaHViIGxvY2sKKwkgKiByZWdpc3RlcnMgc2V0cyB0aGVtIHRvIDB4NyAobm8gYWNjZXNzKS4KKwkgKiAoSW5zYW5lIGhhcmR3YXJlIGRlc2lnbiwgYnV0IG1vc3QgY29waWVkIEludGVsJ3MuKQorCSAqID09PiBQcm9iZSBhdCBtb3N0IHRoZSBsYXN0IDRNIG9mIHRoZSBhZGRyZXNzIHNwYWNlLgorCSAqLworCWlmIChtYXBfdG9wIDwgMHhmZmMwMDAwMCkKKwkJbWFwX3RvcCA9IDB4ZmZjMDAwMDA7CisjZW5kaWYKKwkvKiBMb29wIHRocm91Z2ggYW5kIGxvb2sgZm9yIHJvbSBjaGlwcyAqLworCXdoaWxlICgobWFwX3RvcCAtIDEpIDwgMHhmZmZmZmZmZlVMKSB7CisJCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpOworCQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwkJaW50IGk7CisKKwkJaWYgKCFtYXApCisJCQltYXAgPSBrbWFsbG9jKHNpemVvZigqbWFwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbWFwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgTU9EX05BTUUgIjoga21hbGxvYyBmYWlsZWQiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW1lbXNldChtYXAsIDAsIHNpemVvZigqbWFwKSk7CisJCUlOSVRfTElTVF9IRUFEKCZtYXAtPmxpc3QpOworCQltYXAtPm1hcC5uYW1lID0gbWFwLT5tYXBfbmFtZTsKKwkJbWFwLT5tYXAucGh5cyA9IG1hcF90b3A7CisJCW9mZnNldCA9IG1hcF90b3AgLSB3aW5kb3ctPnBoeXM7CisJCW1hcC0+bWFwLnZpcnQgPSAodm9pZCBfX2lvbWVtICopCisJCQkoKCh1bnNpZ25lZCBsb25nKSh3aW5kb3ctPnZpcnQpKSArIG9mZnNldCk7CisJCW1hcC0+bWFwLnNpemUgPSAweGZmZmZmZmZmVUwgLSBtYXBfdG9wICsgMVVMOworCQkvKiBTZXQgdGhlIG5hbWUgb2YgdGhlIG1hcCB0byB0aGUgYWRkcmVzcyBJIGFtIHRyeWluZyAqLworCQlzcHJpbnRmKG1hcC0+bWFwX25hbWUsICIlcyBAJTA4bHgiLAorCQkJTU9EX05BTUUsIG1hcC0+bWFwLnBoeXMpOworCisJCS8qIEZpcm13YXJlIGh1YnMgb25seSB1c2UgdnBwIHdoZW4gYmVpbmcgcHJvZ3JhbW1lZAorCQkgKiBpbiBhIGZhY3Rvcnkgc2V0dGluZy4gIFNvIGluLXBsYWNlIHByb2dyYW1taW5nCisJCSAqIG5lZWRzIHRvIHVzZSBhIGRpZmZlcmVudCBtZXRob2QuCisJCSAqLworCQlmb3IobWFwLT5tYXAuYmFua3dpZHRoID0gMzI7IG1hcC0+bWFwLmJhbmt3aWR0aDsKKwkJCW1hcC0+bWFwLmJhbmt3aWR0aCA+Pj0gMSkgeworCQkJY2hhciAqKnByb2JlX3R5cGU7CisJCQkvKiBTa2lwIGJhbmt3aWR0aHMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCAqLworCQkJaWYgKCFtYXBfYmFua3dpZHRoX3N1cHBvcnRlZChtYXAtPm1hcC5iYW5rd2lkdGgpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBTZXR1cCB0aGUgbWFwIG1ldGhvZHMgKi8KKwkJCXNpbXBsZV9tYXBfaW5pdCgmbWFwLT5tYXApOworCisJCQkvKiBUcnkgYWxsIG9mIHRoZSBwcm9iZSBtZXRob2RzICovCisJCQlwcm9iZV90eXBlID0gcm9tX3Byb2JlX3R5cGVzOworCQkJZm9yKDsgKnByb2JlX3R5cGU7IHByb2JlX3R5cGUrKykgeworCQkJCW1hcC0+bXRkID0gZG9fbWFwX3Byb2JlKCpwcm9iZV90eXBlLCAmbWFwLT5tYXApOworCQkJCWlmIChtYXAtPm10ZCkKKwkJCQkJZ290byBmb3VuZDsKKwkJCX0KKwkJfQorCQltYXBfdG9wICs9IFJPTV9QUk9CRV9TVEVQX1NJWkU7CisJCWNvbnRpbnVlOworCWZvdW5kOgorCQkvKiBUcmltIHRoZSBzaXplIGlmIHdlIGFyZSBsYXJnZXIgdGhhbiB0aGUgbWFwICovCisJCWlmIChtYXAtPm10ZC0+c2l6ZSA+IG1hcC0+bWFwLnNpemUpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgTU9EX05BTUUKKwkJCQkiIHJvbSgldSkgbGFyZ2VyIHRoYW4gd2luZG93KCVsdSkuIGZpeGluZy4uLlxuIiwKKwkJCQltYXAtPm10ZC0+c2l6ZSwgbWFwLT5tYXAuc2l6ZSk7CisJCQltYXAtPm10ZC0+c2l6ZSA9IG1hcC0+bWFwLnNpemU7CisJCX0KKwkJaWYgKHdpbmRvdy0+cnNyYy5wYXJlbnQpIHsKKwkJCS8qCisJCQkgKiBSZWdpc3RlcmluZyB0aGUgTVREIGRldmljZSBpbiBpb21lbSBtYXkgbm90IGJlIHBvc3NpYmxlCisJCQkgKiBpZiB0aGVyZSBpcyBhIEJJT1MgInJlc2VydmVkIiBhbmQgQlVTWSByYW5nZS4gIElmIHRoaXMKKwkJCSAqIGZhaWxzIHRoZW4gY29udGludWUgYW55d2F5LgorCQkJICovCisJCQltYXAtPnJzcmMubmFtZSAgPSBtYXAtPm1hcF9uYW1lOworCQkJbWFwLT5yc3JjLnN0YXJ0ID0gbWFwLT5tYXAucGh5czsKKwkJCW1hcC0+cnNyYy5lbmQgICA9IG1hcC0+bWFwLnBoeXMgKyBtYXAtPm10ZC0+c2l6ZSAtIDE7CisJCQltYXAtPnJzcmMuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKKwkJCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZ3aW5kb3ctPnJzcmMsICZtYXAtPnJzcmMpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSIE1PRF9OQU1FCisJCQkJCSI6IGNhbm5vdCByZXNlcnZlIE1URCByZXNvdXJjZVxuIik7CisJCQkJbWFwLT5yc3JjLnBhcmVudCA9IE5VTEw7CisJCQl9CisJCX0KKworCQkvKiBNYWtlIHRoZSB3aG9sZSByZWdpb24gdmlzaWJsZSBpbiB0aGUgbWFwICovCisJCW1hcC0+bWFwLnZpcnQgPSB3aW5kb3ctPnZpcnQ7CisJCW1hcC0+bWFwLnBoeXMgPSB3aW5kb3ctPnBoeXM7CisJCWNmaSA9IG1hcC0+bWFwLmZsZHJ2X3ByaXY7CisJCWZvcihpID0gMDsgaSA8IGNmaS0+bnVtY2hpcHM7IGkrKykKKwkJCWNmaS0+Y2hpcHNbaV0uc3RhcnQgKz0gb2Zmc2V0OworCisJCS8qIE5vdyB0aGF0IHRoZSBtdGQgZGV2aWNlcyBpcyBjb21wbGV0ZSBjbGFpbSBhbmQgZXhwb3J0IGl0ICovCisJCW1hcC0+bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCQlpZiAoYWRkX210ZF9kZXZpY2UobWFwLT5tdGQpKSB7CisJCQltYXBfZGVzdHJveShtYXAtPm10ZCk7CisJCQltYXAtPm10ZCA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIENhbGN1bGF0ZSB0aGUgbmV3IHZhbHVlIG9mIG1hcF90b3AgKi8KKwkJbWFwX3RvcCArPSBtYXAtPm10ZC0+c2l6ZTsKKworCQkvKiBGaWxlIGF3YXkgdGhlIG1hcCBzdHJ1Y3R1cmUgKi8KKwkJbGlzdF9hZGQoJm1hcC0+bGlzdCwgJndpbmRvdy0+bWFwcyk7CisJCW1hcCA9IE5VTEw7CisJfQorCisgb3V0OgorCS8qIEZyZWUgYW55IGxlZnQgb3ZlciBtYXAgc3RydWN0dXJlcyAqLworCWtmcmVlKG1hcCk7CisKKwkvKiBTZWUgaWYgSSBoYXZlIGFueSBtYXAgc3RydWN0dXJlcyAqLworCWlmIChsaXN0X2VtcHR5KCZ3aW5kb3ctPm1hcHMpKSB7CisJCWVzYjJyb21fY2xlYW51cCh3aW5kb3cpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBlc2Iycm9tX3JlbW92ZV9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBlc2Iycm9tX3dpbmRvdyAqd2luZG93ID0gJmVzYjJyb21fd2luZG93OworCWVzYjJyb21fY2xlYW51cCh3aW5kb3cpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZXNiMnJvbV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8wLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8wLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8wLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8wLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzEsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9FU0IyXzAsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXsgMCwgfSwKK307CisKKyNpZiAwCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZXNiMnJvbV9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVzYjJyb21fZHJpdmVyID0geworCS5uYW1lID0JCU1PRF9OQU1FLAorCS5pZF90YWJsZSA9CWVzYjJyb21fcGNpX3RibCwKKwkucHJvYmUgPQllc2Iycm9tX2luaXRfb25lLAorCS5yZW1vdmUgPQllc2Iycm9tX3JlbW92ZV9vbmUsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZXNiMnJvbSh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBwY2lfZGV2aWNlX2lkICppZDsKKwlpbnQgcmV0VmFsOworCisJcGRldiA9IE5VTEw7CisJZm9yIChpZCA9IGVzYjJyb21fcGNpX3RibDsgaWQtPnZlbmRvcjsgaWQrKykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiZGV2aWNlIGlkID0gJXhcbiIsIGlkLT5kZXZpY2UpOworCQlwZGV2ID0gcGNpX2dldF9kZXZpY2UoaWQtPnZlbmRvciwgaWQtPmRldmljZSwgTlVMTCk7CisJCWlmIChwZGV2KSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAibWF0Y2hlZCBkZXZpY2UgPSAleFxuIiwgaWQtPmRldmljZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocGRldikgeworCQlwcmludGsoS0VSTl9ERUJVRyAibWF0Y2hlZCBkZXZpY2UgaWQgJXhcbiIsIGlkLT5kZXZpY2UpOworCQlyZXRWYWwgPSBlc2Iycm9tX2luaXRfb25lKHBkZXYsICZlc2Iycm9tX3BjaV90YmxbMF0pOworCQlwY2lfZGV2X3B1dChwZGV2KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJldFZhbCA9ICVkXG4iLCByZXRWYWwpOworCQlyZXR1cm4gcmV0VmFsOworCX0KKwlyZXR1cm4gLUVOWElPOworI2lmIDAKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZXNiMnJvbV9kcml2ZXIpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2VzYjJyb20odm9pZCkKK3sKKwllc2Iycm9tX3JlbW92ZV9vbmUoZXNiMnJvbV93aW5kb3cucGRldik7Cit9CisKK21vZHVsZV9pbml0KGluaXRfZXNiMnJvbSk7Cittb2R1bGVfZXhpdChjbGVhbnVwX2VzYjJyb20pOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJMZXcgR2xlbmRlbm5pbmcgPGxnbGVuZGVubmluZ0BsbnhpLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBkcml2ZXIgZm9yIEJJT1MgY2hpcHMgb24gdGhlIEVTQjIgc291dGhicmlkZ2UiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9pbnRlZ3JhdG9yLWZsYXNoLmMKaW5kZXggYzhkYjAxYi4uNjk0NmQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9pbnRlZ3JhdG9yLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9pbnRlZ3JhdG9yLWZsYXNoLmMKQEAgLTc1LDE0ICs3NSwxMiBAQAogCWludCBlcnI7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCi0JaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcm1mbGFzaF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhcm1mbGFzaF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAotCW1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGFybWZsYXNoX2luZm8pKTsKLQogCWluZm8tPnBsYXQgPSBwbGF0OwogCWlmIChwbGF0ICYmIHBsYXQtPmluaXQpIHsKIAkJZXJyID0gcGxhdC0+aW5pdCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYyBiL2RyaXZlcnMvbXRkL21hcHMvbmV0dGVsLmMKaW5kZXggZjllOGU1Yi4uOWY1M2M2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTE3OCw3ICsxNzksNyBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmd2FpdF9xKTsKIAltdGQgPSBnZXRfbXRkX2RldmljZShOVUxMLCAyKTsKLQlpZiAobXRkKSB7CisJaWYgKCFJU19FUlIobXRkKSkgewogCQluZXR0ZWxfZXJhc2UubXRkID0gbXRkOwogCQluZXR0ZWxfZXJhc2UuY2FsbGJhY2sgPSBuZXR0ZWxfZXJhc2VjYWxsYmFjazsKIAkJbmV0dGVsX2VyYXNlLmNhbGxiYWNrID0gTlVMTDsKQEAgLTQ3MSw3ICs0NzIsNyBAQAogCWlvdW5tYXAobmV0dGVsX2FtZF9tYXAudmlydCk7CiAKIAlyZXR1cm4ocmMpOwotCQkKKwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYwppbmRleCA0MThhZmZmLi5lOGQ5YWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29tYXBfbm9yLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9vbWFwX25vci5jCkBAIC03OCwxMiArNzgsMTAgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CiAKLQlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBmbGFzaF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwZmxhc2hfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBvbWFwZmxhc2hfaW5mbykpOwotCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgImZsYXNoIikpIHsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIG91dF9mcmVlX2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwppbmRleCA5OTUzNDdiLi5lYWViNTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKQEAgLTczNSwxMSArNzM1LDEwIEBACiAJc3RydWN0IHBjbWNpYW10ZF9kZXYgKmRldjsKIAogCS8qIENyZWF0ZSBuZXcgbWVtb3J5IGNhcmQgZGV2aWNlICovCi0JZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikgcmV0dXJuIC1FTk9NRU07CiAJREVCVUcoMSwgImRldj0weCVwIiwgZGV2KTsKIAotCW1lbXNldChkZXYsIDAsIHNpemVvZigqZGV2KSk7CiAJZGV2LT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwppbmRleCBkMTcxNzc2Li4yOGM1ZmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwpAQCAtODksMTUgKzg5LDE0IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAgICAgICAgCXByaW50ayhLRVJOX05PVElDRSAicGh5c21hcCBwbGF0Zm9ybSBmbGFzaCBkZXZpY2U6ICUuOGxseCBhdCAlLjhsbHhcbiIsCi0JICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5yZXNvdXJjZS0+ZW5kIC0gZGV2LT5yZXNvdXJjZS0+c3RhcnQgKyAxLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKShkZXYtPnJlc291cmNlLT5lbmQgLSBkZXYtPnJlc291cmNlLT5zdGFydCArIDEpLAogCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWRldi0+cmVzb3VyY2UtPnN0YXJ0KTsKIAotCWluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5c21hcF9mbGFzaF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dDsKIAl9Ci0JbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXBfb2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWZlNzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBOb3JtYWwgbWFwcGluZ3Mgb2YgY2hpcHMgaW4gcGh5c2ljYWwgbWVtb3J5IGZvciBPRiBkZXZpY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBWaXRhbHkgV29vbCA8dndvb2xAcnUubXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL29mX3BsYXRmb3JtLmg+CisKK3N0cnVjdCBwaHlzbWFwX2ZsYXNoX2luZm8geworCXN0cnVjdCBtdGRfaW5mbwkJKm10ZDsKKwlzdHJ1Y3QgbWFwX2luZm8JCW1hcDsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJaW50CQkJbnJfcGFydHM7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRzOworI2VuZGlmCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcm9tX3Byb2JlX3R5cGVzW10gPSB7ICJjZmlfcHJvYmUiLCAiamVkZWNfcHJvYmUiLCAibWFwX3JvbSIsIE5VTEwgfTsKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2JlX3R5cGVzW10gPSB7ICJjbWRsaW5lcGFydCIsICJSZWRCb290IiwgTlVMTCB9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK3N0YXRpYyBpbnQgcGFyc2VfZmxhc2hfcGFydGl0aW9ucyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCXN0cnVjdCBtdGRfcGFydGl0aW9uICoqcGFydHMpCit7CisJaW50IGksIHBsZW4sIHJldHZhbCA9IC1FTk9NRU07CisJY29uc3QgIHUzMiAgKnBhcnQ7CisJY29uc3QgIGNoYXIgKm5hbWU7CisKKwlwYXJ0ID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJwYXJ0aXRpb25zIiwgJnBsZW4pOworCWlmIChwYXJ0ID09IE5VTEwpCisJCWdvdG8gZXJyOworCisJcmV0dmFsID0gcGxlbiAvICgyICogc2l6ZW9mKHUzMikpOworCSpwYXJ0cyA9IGt6YWxsb2MocmV0dmFsICogc2l6ZW9mKHN0cnVjdCBtdGRfcGFydGl0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCpwYXJ0cyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgYWxsb2NhdGUgdGhlIGZsYXNoIHBhcnRpdGlvbiBkYXRhIVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCW5hbWUgPSBnZXRfcHJvcGVydHkobm9kZSwgInBhcnRpdGlvbi1uYW1lcyIsICZwbGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCByZXR2YWw7IGkrKykgeworCQkoKnBhcnRzKVtpXS5vZmZzZXQgPSAqcGFydCsrOworCQkoKnBhcnRzKVtpXS5zaXplICAgPSAqcGFydCAmIH4xOworCQlpZiAoKnBhcnQrKyAmIDEpIC8qIGJpdCAwIHNldCBzaWduaWZpZXMgcmVhZCBvbmx5IHBhcnRpdGlvbiAqLworCQkJKCpwYXJ0cylbaV0ubWFza19mbGFncyA9IE1URF9XUklURUFCTEU7CisKKwkJaWYgKG5hbWUgIT0gTlVMTCAmJiBwbGVuID4gMCkgeworCQkJaW50IGxlbiA9IHN0cmxlbihuYW1lKSArIDE7CisKKwkJCSgqcGFydHMpW2ldLm5hbWUgPSAoY2hhciAqKW5hbWU7CisJCQlwbGVuIC09IGxlbjsKKwkJCW5hbWUgKz0gbGVuOworCQl9IGVsc2UKKwkJCSgqcGFydHMpW2ldLm5hbWUgPSAidW5uYW1lZCI7CisJfQorZXJyOgorCXJldHVybiByZXR2YWw7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBvZl9waHlzbWFwX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBoeXNtYXBfZmxhc2hfaW5mbyAqaW5mbzsKKworCWluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKworCWlmIChpbmZvLT5tdGQgIT0gTlVMTCkgeworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCQlpZiAoaW5mby0+bnJfcGFydHMpIHsKKwkJCWRlbF9tdGRfcGFydGl0aW9ucyhpbmZvLT5tdGQpOworCQkJa2ZyZWUoaW5mby0+cGFydHMpOworCQl9IGVsc2UgeworCQkJZGVsX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKKwkJfQorI2Vsc2UKKwkJZGVsX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKKyNlbmRpZgorCQltYXBfZGVzdHJveShpbmZvLT5tdGQpOworCX0KKworCWlmIChpbmZvLT5tYXAudmlydCAhPSBOVUxMKQorCQlpb3VubWFwKGluZm8tPm1hcC52aXJ0KTsKKworCWlmIChpbmZvLT5yZXMgIT0gTlVMTCkgeworCQlyZWxlYXNlX3Jlc291cmNlKGluZm8tPnJlcyk7CisJCWtmcmVlKGluZm8tPnJlcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9mX3BoeXNtYXBfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gZGV2LT5ub2RlOworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJc3RydWN0IHBoeXNtYXBfZmxhc2hfaW5mbyAqaW5mbzsKKwljb25zdCBjaGFyICoqcHJvYmVfdHlwZTsKKwljb25zdCBjaGFyICpvZl9wcm9iZTsKKwljb25zdCB1MzIgKndpZHRoOworCWludCBlcnI7CisKKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRwLCAwLCAmcmVzKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNhbid0IGdldCB0aGUgZmxhc2ggbWFwcGluZyFcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisgICAgICAgCWRldl9kYmcoJmRldi0+ZGV2LCAicGh5c21hcCBmbGFzaCBkZXZpY2U6ICUuOGxseCBhdCAlLjhsbHhcbiIsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLmVuZCAtIHJlcy5zdGFydCArIDEsCisJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLnN0YXJ0KTsKKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5c21hcF9mbGFzaF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGluZm8gPT0gTlVMTCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCisJaW5mby0+cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy5zdGFydCwgcmVzLmVuZCAtIHJlcy5zdGFydCArIDEsCisJCQlkZXYtPmRldi5idXNfaWQpOworCWlmIChpbmZvLT5yZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNvdWxkIG5vdCByZXNlcnZlIG1lbW9yeSByZWdpb25cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJd2lkdGggPSBnZXRfcHJvcGVydHkoZHAsICJiYW5rLXdpZHRoIiwgTlVMTCk7CisJaWYgKHdpZHRoID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJDYW4ndCBnZXQgdGhlIGZsYXNoIGJhbmsgd2lkdGghXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWluZm8tPm1hcC5uYW1lID0gZGV2LT5kZXYuYnVzX2lkOworCWluZm8tPm1hcC5waHlzID0gcmVzLnN0YXJ0OworCWluZm8tPm1hcC5zaXplID0gcmVzLmVuZCAtIHJlcy5zdGFydCArIDE7CisJaW5mby0+bWFwLmJhbmt3aWR0aCA9ICp3aWR0aDsKKworCWluZm8tPm1hcC52aXJ0ID0gaW9yZW1hcChpbmZvLT5tYXAucGh5cywgaW5mby0+bWFwLnNpemUpOworCWlmIChpbmZvLT5tYXAudmlydCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2ggcmVnaW9uXG4iKTsKKwkJZXJyID0gRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJc2ltcGxlX21hcF9pbml0KCZpbmZvLT5tYXApOworCisJb2ZfcHJvYmUgPSBnZXRfcHJvcGVydHkoZHAsICJwcm9iZS10eXBlIiwgTlVMTCk7CisJaWYgKG9mX3Byb2JlID09IE5VTEwpIHsKKwkJcHJvYmVfdHlwZSA9IHJvbV9wcm9iZV90eXBlczsKKwkJZm9yICg7IGluZm8tPm10ZCA9PSBOVUxMICYmICpwcm9iZV90eXBlICE9IE5VTEw7IHByb2JlX3R5cGUrKykKKwkJCWluZm8tPm10ZCA9IGRvX21hcF9wcm9iZSgqcHJvYmVfdHlwZSwgJmluZm8tPm1hcCk7CisJfSBlbHNlIGlmICghc3RyY21wKG9mX3Byb2JlLCAiQ0ZJIikpCisJCWluZm8tPm10ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJmluZm8tPm1hcCk7CisJZWxzZSBpZiAoIXN0cmNtcChvZl9wcm9iZSwgIkpFREVDIikpCisJCWluZm8tPm10ZCA9IGRvX21hcF9wcm9iZSgiamVkZWNfcHJvYmUiLCAmaW5mby0+bWFwKTsKKwllbHNlIHsKKyAJCWlmIChzdHJjbXAob2ZfcHJvYmUsICJST00iKSkKKwkJCWRldl9kYmcoJmRldi0+ZGV2LCAibWFwX3Byb2JlOiBkb24ndCBrbm93IHByb2JlIHR5cGUgIgorCQkJIiclcycsIG1hcHBpbmcgYXMgcm9tXG4iKTsKKwkJaW5mby0+bXRkID0gZG9fbWFwX3Byb2JlKCJtdGRfcm9tIiwgJmluZm8tPm1hcCk7CisJfQorCWlmIChpbmZvLT5tdGQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm1hcF9wcm9iZSBmYWlsZWRcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisJaW5mby0+bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJZXJyID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBwYXJ0X3Byb2JlX3R5cGVzLCAmaW5mby0+cGFydHMsIDApOworCWlmIChlcnIgPiAwKSB7CisJCWFkZF9tdGRfcGFydGl0aW9ucyhpbmZvLT5tdGQsIGluZm8tPnBhcnRzLCBlcnIpOworCX0gZWxzZSBpZiAoKGVyciA9IHBhcnNlX2ZsYXNoX3BhcnRpdGlvbnMoZHAsICZpbmZvLT5wYXJ0cykpID4gMCkgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJVc2luZyBPRiBwYXJ0aXRpb24gaW5mb3JtYXRpb25cbiIpOworCQlhZGRfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBpbmZvLT5wYXJ0cywgZXJyKTsKKwkJaW5mby0+bnJfcGFydHMgPSBlcnI7CisJfSBlbHNlCisjZW5kaWYKKworCWFkZF9tdGRfZGV2aWNlKGluZm8tPm10ZCk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJb2ZfcGh5c21hcF9yZW1vdmUoZGV2KTsKKwlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7CisKKworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl9waHlzbWFwX21hdGNoW10gPSB7CisJeworCQkudHlwZQkJPSAicm9tIiwKKwkJLmNvbXBhdGlibGUJPSAiZGlyZWN0LW1hcHBlZCIKKwl9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3BoeXNtYXBfbWF0Y2gpOworCisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG9mX3BoeXNtYXBfZmxhc2hfZHJpdmVyID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkubWF0Y2hfdGFibGUJPSBvZl9waHlzbWFwX21hdGNoLAorCS5wcm9iZQkJPSBvZl9waHlzbWFwX3Byb2JlLAorCS5yZW1vdmUJCT0gb2ZfcGh5c21hcF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvZl9waHlzbWFwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZvZl9waHlzbWFwX2ZsYXNoX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvZl9waHlzbWFwX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmb2ZfcGh5c21hcF9mbGFzaF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChvZl9waHlzbWFwX2luaXQpOworbW9kdWxlX2V4aXQob2ZfcGh5c21hcF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiVml0YWx5IFdvb2wgPHZ3b29sQHJ1Lm12aXN0YS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbmZpZ3VyYWJsZSBNVEQgbWFwIGRyaXZlciBmb3IgT0YiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGxhdC1yYW0uYyBiL2RyaXZlcnMvbXRkL21hcHMvcGxhdC1yYW0uYwppbmRleCA1ZDNjNzU0Li4yYjY1MDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wbGF0LXJhbS5jCkBAIC0xNDcsMTQgKzE0NywxMyBAQAogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChpbmZvID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCWluZm8tPmRldiA9ICZwZGV2LT5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYwppbmRleCA5NTBiZjFjLi5mOTA0ZTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKQEAgLTI3MywxNCArMjczLDEyIEBACiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgbWFwX2luZm8gc3RydWN0cyBpbiBvbmUgZ28uCiAJICovCi0JaW5mbyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaW5mbyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAotCW1lbXNldChpbmZvLCAwLCBzaXplKTsKLQogCWlmIChwbGF0LT5pbml0KSB7CiAJCXJldCA9IHBsYXQtPmluaXQoKTsKIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvdHFtODM0eC5jIGIvZHJpdmVycy9tdGQvbWFwcy90cW04MzR4LmMKaW5kZXggNThlNTkxMi4uOWFkYzk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy90cW04MzR4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy90cW04MzR4LmMKQEAgLTEzMiwyMCArMTMyLDE2IEBACiAKIAkJcHJfZGVidWcoIiVzOiBjaGlwIHByb2JpbmcgY291bnQgJWRcbiIsIF9fRlVOQ1RJT05fXywgaWR4KTsKIAotCQltYXBfYmFua3NbaWR4XSA9Ci0JCQkoc3RydWN0IG1hcF9pbmZvICopa21hbGxvYyhzaXplb2Yoc3RydWN0IG1hcF9pbmZvKSwKLQkJCQkJCSAgIEdGUF9LRVJORUwpOworCQltYXBfYmFua3NbaWR4XSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXBfaW5mbyksIEdGUF9LRVJORUwpOwogCQlpZiAobWFwX2JhbmtzW2lkeF0gPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyb3JfbWVtOwogCQl9Ci0JCW1lbXNldCgodm9pZCAqKW1hcF9iYW5rc1tpZHhdLCAwLCBzaXplb2Yoc3RydWN0IG1hcF9pbmZvKSk7Ci0JCW1hcF9iYW5rc1tpZHhdLT5uYW1lID0gKGNoYXIgKilrbWFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKKwkJbWFwX2JhbmtzW2lkeF0tPm5hbWUgPSBremFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1hcF9iYW5rc1tpZHhdLT5uYW1lID09IE5VTEwpIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGVycm9yX21lbTsKIAkJfQotCQltZW1zZXQoKHZvaWQgKiltYXBfYmFua3NbaWR4XS0+bmFtZSwgMCwgMTYpOwogCiAJCXNwcmludGYobWFwX2JhbmtzW2lkeF0tPm5hbWUsICJUUU04MzR4LSVkIiwgaWR4KTsKIAkJbWFwX2JhbmtzW2lkeF0tPnNpemUgPSBmbGFzaF9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMgYi9kcml2ZXJzL210ZC9tYXBzL3RxbTh4eGwuYwppbmRleCAxOTU3OGJhLi4zN2U0ZGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3RxbTh4eGwuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3RxbTh4eGwuYwpAQCAtMTM0LDE0ICsxMzQsMTMgQEAKIAogCQlwcmludGsoS0VSTl9JTkZPICIlczogY2hpcCBwcm9iaW5nIGNvdW50ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlkeCk7CiAKLQkJbWFwX2JhbmtzW2lkeF0gPSAoc3RydWN0IG1hcF9pbmZvICopa21hbGxvYyhzaXplb2Yoc3RydWN0IG1hcF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJCW1hcF9iYW5rc1tpZHhdID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1hcF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJCWlmKG1hcF9iYW5rc1tpZHhdID09IE5VTEwpIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQkvKiBGSVhNRTogV2hhdCBpZiBzb21lIE1URCBkZXZpY2VzIHdlcmUgcHJvYmVkIGFscmVhZHk/ICovCiAJCQlnb3RvIGVycm9yX21lbTsKIAkJfQogCi0JCW1lbXNldCgodm9pZCAqKW1hcF9iYW5rc1tpZHhdLCAwLCBzaXplb2Yoc3RydWN0IG1hcF9pbmZvKSk7CiAJCW1hcF9iYW5rc1tpZHhdLT5uYW1lID0gKGNoYXIgKilrbWFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKIAogCQlpZiAoIW1hcF9iYW5rc1tpZHhdLT5uYW1lKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jIGIvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYwppbmRleCAxNzhiNTNiLi5iODc5YTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCisrKyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKQEAgLTQyLDE5ICs0MiwyMCBAQAogCXVuc2lnbmVkIGxvbmcgYmxvY2ssIG5zZWN0OwogCWNoYXIgKmJ1ZjsKIAotCWJsb2NrID0gcmVxLT5zZWN0b3I7Ci0JbnNlY3QgPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9yczsKKwlibG9jayA9IHJlcS0+c2VjdG9yIDw8IDkgPj4gdHItPmJsa3NoaWZ0OworCW5zZWN0ID0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnMgPDwgOSA+PiB0ci0+Ymxrc2hpZnQ7CisKIAlidWYgPSByZXEtPmJ1ZmZlcjsKIAogCWlmICghYmxrX2ZzX3JlcXVlc3QocmVxKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYmxvY2sgKyBuc2VjdCA+IGdldF9jYXBhY2l0eShyZXEtPnJxX2Rpc2spKQorCWlmIChyZXEtPnNlY3RvciArIHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzID4gZ2V0X2NhcGFjaXR5KHJlcS0+cnFfZGlzaykpCiAJCXJldHVybiAwOwogCiAJc3dpdGNoKHJxX2RhdGFfZGlyKHJlcSkpIHsKIAljYXNlIFJFQUQ6Ci0JCWZvciAoOyBuc2VjdCA+IDA7IG5zZWN0LS0sIGJsb2NrKyssIGJ1ZiArPSA1MTIpCisJCWZvciAoOyBuc2VjdCA+IDA7IG5zZWN0LS0sIGJsb2NrKyssIGJ1ZiArPSB0ci0+Ymxrc2l6ZSkKIAkJCWlmICh0ci0+cmVhZHNlY3QoZGV2LCBibG9jaywgYnVmKSkKIAkJCQlyZXR1cm4gMDsKIAkJcmV0dXJuIDE7CkBAIC02Myw3ICs2NCw3IEBACiAJCWlmICghdHItPndyaXRlc2VjdCkKIAkJCXJldHVybiAwOwogCi0JCWZvciAoOyBuc2VjdCA+IDA7IG5zZWN0LS0sIGJsb2NrKyssIGJ1ZiArPSA1MTIpCisJCWZvciAoOyBuc2VjdCA+IDA7IG5zZWN0LS0sIGJsb2NrKyssIGJ1ZiArPSB0ci0+Ymxrc2l6ZSkKIAkJCWlmICh0ci0+d3JpdGVzZWN0KGRldiwgYmxvY2ssIGJ1ZikpCiAJCQkJcmV0dXJuIDA7CiAJCXJldHVybiAxOwpAQCAtMjk3LDcgKzI5OCw3IEBACiAKIAkvKiAyLjUgaGFzIGNhcGFjaXR5IGluIHVuaXRzIG9mIDUxMiBieXRlcyB3aGlsZSBzdGlsbAogCSAgIGhhdmluZyBCTE9DS19TSVpFX0JJVFMgc2V0IHRvIDEwLiBKdXN0IHRvIGtlZXAgdXMgYW11c2VkLiAqLwotCXNldF9jYXBhY2l0eShnZCwgKG5ldy0+c2l6ZSAqIG5ldy0+Ymxrc2l6ZSkgPj4gOSk7CisJc2V0X2NhcGFjaXR5KGdkLCAobmV3LT5zaXplICogdHItPmJsa3NpemUpID4+IDkpOwogCiAJZ2QtPnByaXZhdGVfZGF0YSA9IG5ldzsKIAluZXctPmJsa2NvcmVfcHJpdiA9IGdkOwpAQCAtMzcyLDEyICszNzMsMTAgQEAKIAlpZiAoIWJsa3RyYW5zX25vdGlmaWVyLmxpc3QubmV4dCkKIAkJcmVnaXN0ZXJfbXRkX3VzZXIoJmJsa3RyYW5zX25vdGlmaWVyKTsKIAotCXRyLT5ibGtjb3JlX3ByaXYgPSBrbWFsbG9jKHNpemVvZigqdHItPmJsa2NvcmVfcHJpdiksIEdGUF9LRVJORUwpOworCXRyLT5ibGtjb3JlX3ByaXYgPSBremFsbG9jKHNpemVvZigqdHItPmJsa2NvcmVfcHJpdiksIEdGUF9LRVJORUwpOwogCWlmICghdHItPmJsa2NvcmVfcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQodHItPmJsa2NvcmVfcHJpdiwgMCwgc2l6ZW9mKCp0ci0+YmxrY29yZV9wcml2KSk7Ci0KIAltdXRleF9sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwogCiAJcmV0ID0gcmVnaXN0ZXJfYmxrZGV2KHRyLT5tYWpvciwgdHItPm5hbWUpOwpAQCAtNDAxLDYgKzQwMCw4IEBACiAJfQogCiAJdHItPmJsa2NvcmVfcHJpdi0+cnEtPnF1ZXVlZGF0YSA9IHRyOworCWJsa19xdWV1ZV9oYXJkc2VjdF9zaXplKHRyLT5ibGtjb3JlX3ByaXYtPnJxLCB0ci0+Ymxrc2l6ZSk7CisJdHItPmJsa3NoaWZ0ID0gZmZzKHRyLT5ibGtzaXplKSAtIDE7CiAKIAlyZXQgPSBrZXJuZWxfdGhyZWFkKG10ZF9ibGt0cmFuc190aHJlYWQsIHRyLCBDTE9ORV9LRVJORUwpOwogCWlmIChyZXQgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRibG9jay5jIGIvZHJpdmVycy9tdGQvbXRkYmxvY2suYwppbmRleCAwNGVkMzQ2OS4uOTUyZGEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkYmxvY2suYworKysgYi9kcml2ZXJzL210ZC9tdGRibG9jay5jCkBAIC0yNzgsMTEgKzI3OCwxMCBAQAogCX0KIAogCS8qIE9LLCBpdCdzIG5vdCBvcGVuLiBDcmVhdGUgY2FjaGUgaW5mbyBmb3IgaXQgKi8KLQltdGRibGsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkYmxrX2RldiksIEdGUF9LRVJORUwpOworCW10ZGJsayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRibGtfZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdGRibGspCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KG10ZGJsaywgMCwgc2l6ZW9mKCptdGRibGspKTsKIAltdGRibGstPmNvdW50ID0gMTsKIAltdGRibGstPm10ZCA9IG10ZDsKIApAQCAtMzM5LDE2ICszMzgsMTQgQEAKIAogc3RhdGljIHZvaWQgbXRkYmxvY2tfYWRkX210ZChzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wcyAqdHIsIHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYgPSBrbWFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghZGV2KQogCQlyZXR1cm47CiAKLQltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOwotCiAJZGV2LT5tdGQgPSBtdGQ7CiAJZGV2LT5kZXZudW0gPSBtdGQtPmluZGV4OwotCWRldi0+Ymxrc2l6ZSA9IDUxMjsKKwogCWRldi0+c2l6ZSA9IG10ZC0+c2l6ZSA+PiA5OwogCWRldi0+dHIgPSB0cjsKIApAQCAtMzY4LDYgKzM2NSw3IEBACiAJLm5hbWUJCT0gIm10ZGJsb2NrIiwKIAkubWFqb3IJCT0gMzEsCiAJLnBhcnRfYml0cwk9IDAsCisJLmJsa3NpemUgCT0gNTEyLAogCS5vcGVuCQk9IG10ZGJsb2NrX29wZW4sCiAJLmZsdXNoCQk9IG10ZGJsb2NrX2ZsdXNoLAogCS5yZWxlYXNlCT0gbXRkYmxvY2tfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGJsb2NrX3JvLmMgYi9kcml2ZXJzL210ZC9tdGRibG9ja19yby5jCmluZGV4IDI5NTYzZWQuLmY3OWRiYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGJsb2NrX3JvLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkYmxvY2tfcm8uYwpAQCAtMzMsMTYgKzMzLDE0IEBACiAKIHN0YXRpYyB2b2lkIG10ZGJsb2NrX2FkZF9tdGQoc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyLCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCXN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWRldikKIAkJcmV0dXJuOwogCi0JbWVtc2V0KGRldiwgMCwgc2l6ZW9mKCpkZXYpKTsKLQogCWRldi0+bXRkID0gbXRkOwogCWRldi0+ZGV2bnVtID0gbXRkLT5pbmRleDsKLQlkZXYtPmJsa3NpemUgPSA1MTI7CisKIAlkZXYtPnNpemUgPSBtdGQtPnNpemUgPj4gOTsKIAlkZXYtPnRyID0gdHI7CiAJZGV2LT5yZWFkb25seSA9IDE7CkBAIC02MCw2ICs1OCw3IEBACiAJLm5hbWUJCT0gIm10ZGJsb2NrIiwKIAkubWFqb3IJCT0gMzEsCiAJLnBhcnRfYml0cwk9IDAsCisJLmJsa3NpemUgCT0gNTEyLAogCS5yZWFkc2VjdAk9IG10ZGJsb2NrX3JlYWRzZWN0LAogCS53cml0ZXNlY3QJPSBtdGRibG9ja193cml0ZXNlY3QsCiAJLmFkZF9tdGQJPSBtdGRibG9ja19hZGRfbXRkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY2hhci5jIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCmluZGV4IDViNmFjZmMuLjMwMTNkMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYworKysgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKQEAgLTcsNiArNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEwMCw4ICsxMDEsOCBAQAogCiAJbXRkID0gZ2V0X210ZF9kZXZpY2UoTlVMTCwgZGV2bnVtKTsKIAotCWlmICghbXRkKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoSVNfRVJSKG10ZCkpCisJCXJldHVybiBQVFJfRVJSKG10ZCk7CiAKIAlpZiAoTVREX0FCU0VOVCA9PSBtdGQtPnR5cGUpIHsKIAkJcHV0X210ZF9kZXZpY2UobXRkKTsKQEAgLTQzMSw3ICs0MzIsNyBAQAogCQlpZighKGZpbGUtPmZfbW9kZSAmIDIpKQogCQkJcmV0dXJuIC1FUEVSTTsKIAotCQllcmFzZT1rbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXJhc2VfaW5mbyksR0ZQX0tFUk5FTCk7CisJCWVyYXNlPWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlcmFzZV9pbmZvKSxHRlBfS0VSTkVMKTsKIAkJaWYgKCFlcmFzZSkKIAkJCXJldCA9IC1FTk9NRU07CiAJCWVsc2UgewpAQCAtNDQwLDcgKzQ0MSw2IEBACiAKIAkJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndhaXRxKTsKIAotCQkJbWVtc2V0IChlcmFzZSwwLHNpemVvZihzdHJ1Y3QgZXJhc2VfaW5mbykpOwogCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZlcmFzZS0+YWRkciwgYXJncCwKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpKSkgewogCQkJCWtmcmVlKGVyYXNlKTsKQEAgLTQ5OSwxMyArNDk5LDEyIEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCW9wcy5sZW4gPSBidWYubGVuZ3RoOwogCQlvcHMub29ibGVuID0gYnVmLmxlbmd0aDsKIAkJb3BzLm9vYm9mZnMgPSBidWYuc3RhcnQgJiAobXRkLT5vb2JzaXplIC0gMSk7CiAJCW9wcy5kYXRidWYgPSBOVUxMOwogCQlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CiAKLQkJaWYgKG9wcy5vb2JvZmZzICYmIG9wcy5sZW4gPiAobXRkLT5vb2JzaXplIC0gb3BzLm9vYm9mZnMpKQorCQlpZiAob3BzLm9vYm9mZnMgJiYgb3BzLm9vYmxlbiA+IChtdGQtPm9vYnNpemUgLSBvcHMub29ib2ZmcykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlvcHMub29iYnVmID0ga21hbGxvYyhidWYubGVuZ3RoLCBHRlBfS0VSTkVMKTsKQEAgLTUyMCw3ICs1MTksNyBAQAogCQlidWYuc3RhcnQgJj0gfihtdGQtPm9vYnNpemUgLSAxKTsKIAkJcmV0ID0gbXRkLT53cml0ZV9vb2IobXRkLCBidWYuc3RhcnQsICZvcHMpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCArIHNpemVvZih1aW50MzJfdCksICZvcHMucmV0bGVuLAorCQlpZiAoY29weV90b191c2VyKGFyZ3AgKyBzaXplb2YodWludDMyX3QpLCAmb3BzLm9vYnJldGxlbiwKIAkJCQkgc2l6ZW9mKHVpbnQzMl90KSkpCiAJCQlyZXQgPSAtRUZBVUxUOwogCkBAIC01NDgsNyArNTQ3LDYgQEAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJb3BzLmxlbiA9IGJ1Zi5sZW5ndGg7CiAJCW9wcy5vb2JsZW4gPSBidWYubGVuZ3RoOwogCQlvcHMub29ib2ZmcyA9IGJ1Zi5zdGFydCAmIChtdGQtPm9vYnNpemUgLSAxKTsKIAkJb3BzLmRhdGJ1ZiA9IE5VTEw7CkBAIC01NjQsMTAgKzU2MiwxMCBAQAogCQlidWYuc3RhcnQgJj0gfihtdGQtPm9vYnNpemUgLSAxKTsKIAkJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIGJ1Zi5zdGFydCwgJm9wcyk7CiAKLQkJaWYgKHB1dF91c2VyKG9wcy5yZXRsZW4sICh1aW50MzJfdCBfX3VzZXIgKilhcmdwKSkKKwkJaWYgKHB1dF91c2VyKG9wcy5vb2JyZXRsZW4sICh1aW50MzJfdCBfX3VzZXIgKilhcmdwKSkKIAkJCXJldCA9IC1FRkFVTFQ7Ci0JCWVsc2UgaWYgKG9wcy5yZXRsZW4gJiYgY29weV90b191c2VyKGJ1Zi5wdHIsIG9wcy5vb2JidWYsCi0JCQkJCQkgICAgb3BzLnJldGxlbikpCisJCWVsc2UgaWYgKG9wcy5vb2JyZXRsZW4gJiYgY29weV90b191c2VyKGJ1Zi5wdHIsIG9wcy5vb2JidWYsCisJCQkJCQkgICAgb3BzLm9vYnJldGxlbikpCiAJCQlyZXQgPSAtRUZBVUxUOwogCiAJCWtmcmVlKG9wcy5vb2JidWYpOwpAQCAtNjE2LDYgKzYxNCw3IEBACiAJCW1lbWNweSgmb2kuZWNjcG9zLCBtdGQtPmVjY2xheW91dC0+ZWNjcG9zLCBzaXplb2Yob2kuZWNjcG9zKSk7CiAJCW1lbWNweSgmb2kub29iZnJlZSwgbXRkLT5lY2NsYXlvdXQtPm9vYmZyZWUsCiAJCSAgICAgICBzaXplb2Yob2kub29iZnJlZSkpOworCQlvaS5lY2NieXRlcyA9IG10ZC0+ZWNjbGF5b3V0LT5lY2NieXRlczsKIAogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZvaSwgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNzE1LDcgKzcxNCw3IEBACiAJCWlmICghbXRkLT5lY2NsYXlvdXQpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmbXRkLT5lY2NsYXlvdXQsCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgbXRkLT5lY2NsYXlvdXQsCiAJCQkJIHNpemVvZihzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKaW5kZXggMWZlYTYzMS4uMDY5MDI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXN0cnVjdCBtdGRfb29iX29wcyBkZXZvcHMgPSAqb3BzOwogCWludCBpLCBlcnIsIHJldCA9IDA7CiAKLQlvcHMtPnJldGxlbiA9IDA7CisJb3BzLT5yZXRsZW4gPSBvcHMtPm9vYnJldGxlbiA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uY2F0LT5udW1fc3ViZGV2OyBpKyspIHsKIAkJc3RydWN0IG10ZF9pbmZvICpzdWJkZXYgPSBjb25jYXQtPnN1YmRldltpXTsKQEAgLTI2Myw2ICsyNjMsNyBAQAogCiAJCWVyciA9IHN1YmRldi0+cmVhZF9vb2Ioc3ViZGV2LCBmcm9tLCAmZGV2b3BzKTsKIAkJb3BzLT5yZXRsZW4gKz0gZGV2b3BzLnJldGxlbjsKKwkJb3BzLT5vb2JyZXRsZW4gKz0gZGV2b3BzLm9vYnJldGxlbjsKIAogCQkvKiBTYXZlIGluZm9ybWF0aW9uIGFib3V0IGJpdGZsaXBzISAqLwogCQlpZiAodW5saWtlbHkoZXJyKSkgewpAQCAtMjc4LDE0ICsyNzksMTggQEAKIAkJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJZGV2b3BzLmxlbiA9IG9wcy0+bGVuIC0gb3BzLT5yZXRsZW47Ci0JCWlmICghZGV2b3BzLmxlbikKLQkJCXJldHVybiByZXQ7Ci0KLQkJaWYgKGRldm9wcy5kYXRidWYpCisJCWlmIChkZXZvcHMuZGF0YnVmKSB7CisJCQlkZXZvcHMubGVuID0gb3BzLT5sZW4gLSBvcHMtPnJldGxlbjsKKwkJCWlmICghZGV2b3BzLmxlbikKKwkJCQlyZXR1cm4gcmV0OwogCQkJZGV2b3BzLmRhdGJ1ZiArPSBkZXZvcHMucmV0bGVuOwotCQlpZiAoZGV2b3BzLm9vYmJ1ZikKLQkJCWRldm9wcy5vb2JidWYgKz0gZGV2b3BzLm9vYmxlbjsKKwkJfQorCQlpZiAoZGV2b3BzLm9vYmJ1ZikgeworCQkJZGV2b3BzLm9vYmxlbiA9IG9wcy0+b29ibGVuIC0gb3BzLT5vb2JyZXRsZW47CisJCQlpZiAoIWRldm9wcy5vb2JsZW4pCisJCQkJcmV0dXJuIHJldDsKKwkJCWRldm9wcy5vb2JidWYgKz0gb3BzLT5vb2JyZXRsZW47CisJCX0KIAogCQlmcm9tID0gMDsKIAl9CkBAIC0zMjEsMTQgKzMyNiwxOCBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQlkZXZvcHMubGVuID0gb3BzLT5sZW4gLSBvcHMtPnJldGxlbjsKLQkJaWYgKCFkZXZvcHMubGVuKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKGRldm9wcy5kYXRidWYpCisJCWlmIChkZXZvcHMuZGF0YnVmKSB7CisJCQlkZXZvcHMubGVuID0gb3BzLT5sZW4gLSBvcHMtPnJldGxlbjsKKwkJCWlmICghZGV2b3BzLmxlbikKKwkJCQlyZXR1cm4gMDsKIAkJCWRldm9wcy5kYXRidWYgKz0gZGV2b3BzLnJldGxlbjsKLQkJaWYgKGRldm9wcy5vb2JidWYpCi0JCQlkZXZvcHMub29iYnVmICs9IGRldm9wcy5vb2JsZW47CisJCX0KKwkJaWYgKGRldm9wcy5vb2JidWYpIHsKKwkJCWRldm9wcy5vb2JsZW4gPSBvcHMtPm9vYmxlbiAtIG9wcy0+b29icmV0bGVuOworCQkJaWYgKCFkZXZvcHMub29ibGVuKQorCQkJCXJldHVybiAwOworCQkJZGV2b3BzLm9vYmJ1ZiArPSBkZXZvcHMub29icmV0bGVuOworCQl9CiAJCXRvID0gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC02OTksMTQgKzcwOCwxMyBAQAogCiAJLyogYWxsb2NhdGUgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAlzaXplID0gU0laRU9GX1NUUlVDVF9NVERfQ09OQ0FUKG51bV9kZXZzKTsKLQljb25jYXQgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWNvbmNhdCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjb25jYXQpIHsKIAkJcHJpbnRrCiAJCSAgICAoIm1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIHdoaWxlIGNyZWF0aW5nIGNvbmNhdGVuYXRlZCBkZXZpY2UgXCIlc1wiXG4iLAogCQkgICAgIG5hbWUpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KGNvbmNhdCwgMCwgc2l6ZSk7CiAJY29uY2F0LT5zdWJkZXYgPSAoc3RydWN0IG10ZF9pbmZvICoqKSAoY29uY2F0ICsgMSk7CiAKIAkvKgpAQCAtNzY0LDYgKzc3Miw3IEBACiAJCWNvbmNhdC0+bXRkLmVjY19zdGF0cy5iYWRibG9ja3MgKz0KIAkJCXN1YmRldltpXS0+ZWNjX3N0YXRzLmJhZGJsb2NrczsKIAkJaWYgKGNvbmNhdC0+bXRkLndyaXRlc2l6ZSAgICE9ICBzdWJkZXZbaV0tPndyaXRlc2l6ZSB8fAorCQkgICAgY29uY2F0LT5tdGQuc3VicGFnZV9zZnQgIT0gc3ViZGV2W2ldLT5zdWJwYWdlX3NmdCB8fAogCQkgICAgY29uY2F0LT5tdGQub29ic2l6ZSAgICAhPSAgc3ViZGV2W2ldLT5vb2JzaXplIHx8CiAJCSAgICBjb25jYXQtPm10ZC5lY2N0eXBlICAgICE9ICBzdWJkZXZbaV0tPmVjY3R5cGUgfHwKIAkJICAgIGNvbmNhdC0+bXRkLmVjY3NpemUgICAgIT0gIHN1YmRldltpXS0+ZWNjc2l6ZSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY29yZS5jIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCmluZGV4IGM0ZDI2ZGUuLjcwNzAxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9tdGRjb3JlLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CkBAIC0xOTIsMTQgKzE5MywxNCBAQAogICoJR2l2ZW4gYSBudW1iZXIgYW5kIE5VTEwgYWRkcmVzcywgcmV0dXJuIHRoZSBudW0ndGggZW50cnkgaW4gdGhlIGRldmljZQogICoJdGFibGUsIGlmIGFueS4JR2l2ZW4gYW4gYWRkcmVzcyBhbmQgbnVtID09IC0xLCBzZWFyY2ggdGhlIGRldmljZSB0YWJsZQogICoJZm9yIGEgZGV2aWNlIHdpdGggdGhhdCBhZGRyZXNzIGFuZCByZXR1cm4gaWYgaXQncyBzdGlsbCBwcmVzZW50LiBHaXZlbgotICoJYm90aCwgcmV0dXJuIHRoZSBudW0ndGggZHJpdmVyIG9ubHkgaWYgaXRzIGFkZHJlc3MgbWF0Y2hlcy4gUmV0dXJuIE5VTEwKLSAqCWlmIG5vdC4KKyAqCWJvdGgsIHJldHVybiB0aGUgbnVtJ3RoIGRyaXZlciBvbmx5IGlmIGl0cyBhZGRyZXNzIG1hdGNoZXMuIFJldHVybgorICoJZXJyb3IgY29kZSBpZiBub3QuCiAgKi8KIAogc3RydWN0IG10ZF9pbmZvICpnZXRfbXRkX2RldmljZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG51bSkKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKnJldCA9IE5VTEw7Ci0JaW50IGk7CisJaW50IGksIGVyciA9IC1FTk9ERVY7CiAKIAltdXRleF9sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOwogCkBAIC0yMTMsMTQgKzIxNCw3MyBAQAogCQkJcmV0ID0gTlVMTDsKIAl9CiAKLQlpZiAocmV0ICYmICF0cnlfbW9kdWxlX2dldChyZXQtPm93bmVyKSkKLQkJcmV0ID0gTlVMTDsKKwlpZiAoIXJldCkKKwkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKHJldCkKLQkJcmV0LT51c2Vjb3VudCsrOworCWlmICghdHJ5X21vZHVsZV9nZXQocmV0LT5vd25lcikpCisJCWdvdG8gb3V0X3VubG9jazsKIAorCWlmIChyZXQtPmdldF9kZXZpY2UpIHsKKwkJZXJyID0gcmV0LT5nZXRfZGV2aWNlKHJldCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9wdXQ7CisJfQorCisJcmV0LT51c2Vjb3VudCsrOwogCW11dGV4X3VubG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAlyZXR1cm4gcmV0OworCitvdXRfcHV0OgorCW1vZHVsZV9wdXQocmV0LT5vd25lcik7CitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmbXRkX3RhYmxlX211dGV4KTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCisvKioKKyAqCWdldF9tdGRfZGV2aWNlX25tIC0gb2J0YWluIGEgdmFsaWRhdGVkIGhhbmRsZSBmb3IgYW4gTVREIGRldmljZSBieQorICoJZGV2aWNlIG5hbWUKKyAqCUBuYW1lOiBNVEQgZGV2aWNlIG5hbWUgdG8gb3BlbgorICoKKyAqIAlUaGlzIGZ1bmN0aW9uIHJldHVybnMgTVREIGRldmljZSBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUgaW4gY2FzZSBvZgorICogCXN1Y2Nlc3MgYW5kIGFuIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCisKK3N0cnVjdCBtdGRfaW5mbyAqZ2V0X210ZF9kZXZpY2Vfbm0oY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaSwgZXJyID0gLUVOT0RFVjsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9NVERfREVWSUNFUzsgaSsrKSB7CisJCWlmIChtdGRfdGFibGVbaV0gJiYgIXN0cmNtcChuYW1lLCBtdGRfdGFibGVbaV0tPm5hbWUpKSB7CisJCQltdGQgPSBtdGRfdGFibGVbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghbXRkKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KG10ZC0+b3duZXIpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlpZiAobXRkLT5nZXRfZGV2aWNlKSB7CisJCWVyciA9IG10ZC0+Z2V0X2RldmljZShtdGQpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcHV0OworCX0KKworCW10ZC0+dXNlY291bnQrKzsKKwltdXRleF91bmxvY2soJm10ZF90YWJsZV9tdXRleCk7CisJcmV0dXJuIG10ZDsKKworb3V0X3B1dDoKKwltb2R1bGVfcHV0KG10ZC0+b3duZXIpOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJm10ZF90YWJsZV9tdXRleCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAogdm9pZCBwdXRfbXRkX2RldmljZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKQEAgLTIyOSw2ICsyODksOCBAQAogCiAJbXV0ZXhfbG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAljID0gLS1tdGQtPnVzZWNvdW50OworCWlmIChtdGQtPnB1dF9kZXZpY2UpCisJCW10ZC0+cHV0X2RldmljZShtdGQpOwogCW11dGV4X3VubG9jaygmbXRkX3RhYmxlX211dGV4KTsKIAlCVUdfT04oYyA8IDApOwogCkBAIC0yMzYsNyArMjk4LDcgQEAKIH0KIAogLyogZGVmYXVsdF9tdGRfd3JpdGV2IC0gZGVmYXVsdCBtdGQgd3JpdGV2IG1ldGhvZCBmb3IgTVREIGRldmljZXMgdGhhdAotICoJCQlkb250IGltcGxlbWVudCB0aGVpciBvd24KKyAqCQkJZG9uJ3QgaW1wbGVtZW50IHRoZWlyIG93bgogICovCiAKIGludCBkZWZhdWx0X210ZF93cml0ZXYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLApAQCAtMjY0LDEzICszMjYsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1FWFBPUlRfU1lNQk9MKGFkZF9tdGRfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0woZGVsX210ZF9kZXZpY2UpOwotRVhQT1JUX1NZTUJPTChnZXRfbXRkX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHB1dF9tdGRfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbXRkX3VzZXIpOwotRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX210ZF91c2VyKTsKLUVYUE9SVF9TWU1CT0woZGVmYXVsdF9tdGRfd3JpdGV2KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGFkZF9tdGRfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRlbF9tdGRfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGdldF9tdGRfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGdldF9tdGRfZGV2aWNlX25tKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHB1dF9tdGRfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX210ZF91c2VyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfbXRkX3VzZXIpOworRVhQT1JUX1NZTUJPTF9HUEwoZGVmYXVsdF9tdGRfd3JpdGV2KTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwppbmRleCAwNmE5MzAzLi5iYWZkMmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCkBAIC05NCw3ICs5NCw3IEBACiAKIAlpZiAoZnJvbSA+PSBtdGQtPnNpemUpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChmcm9tICsgb3BzLT5sZW4gPiBtdGQtPnNpemUpCisJaWYgKG9wcy0+ZGF0YnVmICYmIGZyb20gKyBvcHMtPmxlbiA+IG10ZC0+c2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmVzID0gcGFydC0+bWFzdGVyLT5yZWFkX29vYihwYXJ0LT5tYXN0ZXIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsIG9wcyk7CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAJaWYgKHRvID49IG10ZC0+c2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHRvICsgb3BzLT5sZW4gPiBtdGQtPnNpemUpCisJaWYgKG9wcy0+ZGF0YnVmICYmIHRvICsgb3BzLT5sZW4gPiBtdGQtPnNpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRlX29vYihwYXJ0LT5tYXN0ZXIsIHRvICsgcGFydC0+b2Zmc2V0LCBvcHMpOwogfQpAQCAtMzIzLDE0ICszMjMsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbmJwYXJ0czsgaSsrKSB7CiAKIAkJLyogYWxsb2NhdGUgdGhlIHBhcnRpdGlvbiBzdHJ1Y3R1cmUgKi8KLQkJc2xhdmUgPSBrbWFsbG9jIChzaXplb2YoKnNsYXZlKSwgR0ZQX0tFUk5FTCk7CisJCXNsYXZlID0ga3phbGxvYyAoc2l6ZW9mKCpzbGF2ZSksIEdGUF9LRVJORUwpOwogCQlpZiAoIXNsYXZlKSB7CiAJCQlwcmludGsgKCJtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciB3aGlsZSBjcmVhdGluZyBwYXJ0aXRpb25zIGZvciBcIiVzXCJcbiIsCiAJCQkJbWFzdGVyLT5uYW1lKTsKIAkJCWRlbF9tdGRfcGFydGl0aW9ucyhtYXN0ZXIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJbWVtc2V0KHNsYXZlLCAwLCBzaXplb2YoKnNsYXZlKSk7CiAJCWxpc3RfYWRkKCZzbGF2ZS0+bGlzdCwgJm10ZF9wYXJ0aXRpb25zKTsKIAogCQkvKiBzZXQgdXAgdGhlIE1URCBvYmplY3QgZm9yIHRoaXMgcGFydGl0aW9uICovCkBAIC0zNDEsNiArMzQwLDcgQEAKIAkJc2xhdmUtPm10ZC5vb2JzaXplID0gbWFzdGVyLT5vb2JzaXplOwogCQlzbGF2ZS0+bXRkLmVjY3R5cGUgPSBtYXN0ZXItPmVjY3R5cGU7CiAJCXNsYXZlLT5tdGQuZWNjc2l6ZSA9IG1hc3Rlci0+ZWNjc2l6ZTsKKwkJc2xhdmUtPm10ZC5zdWJwYWdlX3NmdCA9IG1hc3Rlci0+c3VicGFnZV9zZnQ7CiAKIAkJc2xhdmUtPm10ZC5uYW1lID0gcGFydHNbaV0ubmFtZTsKIAkJc2xhdmUtPm10ZC5iYW5rX3NpemUgPSBtYXN0ZXItPmJhbmtfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCAxODMxMzQwLi4zNThmNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC05MCw2ICs5MCw3IEBACiAJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBTSF9TT0xVVElPTl9FTkdJTkUKIAlzZWxlY3QgUkVFRF9TT0xPTU9OCiAJc2VsZWN0IFJFRURfU09MT01PTl9ERUM4CisJc2VsZWN0IEJJVFJFVkVSU0UKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIFJlbmVzYXMgVGVjaG5vbG9neSBBRy1BTkQKIAkgIGZsYXNoIGludGVyZmFjZSBib2FyZCAoRlJPTV9CT0FSRDQpCkBAIC0xMzIsNiArMTMzLDcgQEAKIGNvbmZpZyBNVERfTkFORF9OREZDCiAJdHJpc3RhdGUgIk5ERkMgTmFuRCBGbGFzaCBDb250cm9sbGVyIgogCWRlcGVuZHMgb24gTVREX05BTkQgJiYgNDR4CisJc2VsZWN0IE1URF9OQU5EX0VDQ19TTUMKIAloZWxwCiAJIE5ERkMgTmFuZCBGbGFzaCBDb250cm9sbGVycyBhcmUgaW50ZWdyYXRlZCBpbiBFUDQ0eCBTb0NzCiAKQEAgLTIxOSw2ICsyMjEsMTMgQEAKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBvbiBTaGFycCBTTCBTZXJpZXMgKEM3eHggKyBvdGhlcnMpIgogCWRlcGVuZHMgb24gTVREX05BTkQgJiYgQVJDSF9QWEEKIAorY29uZmlnIE1URF9OQU5EX0NBRkUKKyAgICAgICB0cmlzdGF0ZSAiTkFORCBzdXBwb3J0IGZvciBPTFBDIENBRsOJIGNoaXAiCisgICAgICAgZGVwZW5kcyBvbiBQQ0kKKyAgICAgICBoZWxwCisJIFVzZSBOQU5EIGZsYXNoIGF0dGFjaGVkIHRvIHRoZSBDQUbDiSBjaGlwIGRlc2lnbmVkIGZvciB0aGUgJDEwMAorCSBsYXB0b3AuCisKIGNvbmZpZyBNVERfTkFORF9DUzU1M1gKIAl0cmlzdGF0ZSAiTkFORCBzdXBwb3J0IGZvciBDUzU1MzUvQ1M1NTM2IChBTUQgR2VvZGUgY29tcGFuaW9uIGNoaXApIgogCWRlcGVuZHMgb24gTVREX05BTkQgJiYgWDg2XzMyICYmIChYODZfUEMgfHwgWDg2X0dFTkVSSUNBUkNIKQpAQCAtMjMyLDYgKzI0MSwxMyBAQAogCiAJICBJZiB5b3Ugc2F5ICJtIiwgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAiY3M1NTN4X25hbmQua28iLgogCitjb25maWcgTVREX05BTkRfQVQ5MQorCWJvb2wgIlN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggLyBTbWFydE1lZGlhIG9uIEFUOTEiCisJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBBUkNIX0FUOTEKKwloZWxwCisJICBFbmFibGVzIHN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggLyBTbWFydCBNZWRpYSBDYXJkIGludGVyZmFjZQorCSAgb24gQXRtZWwgQVQ5MSBwcm9jZXNzb3JzLgorCiBjb25maWcgTVREX05BTkRfTkFORFNJTQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIEZsYXNoIFNpbXVsYXRvciIKIAlkZXBlbmRzIG9uIE1URF9OQU5EICYmIE1URF9QQVJUSVRJT05TCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQppbmRleCBmNzQ3NTkzLi5mN2E1M2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiBvYmotJChDT05GSUdfTVREX05BTkQpCQkJKz0gbmFuZC5vIG5hbmRfZWNjLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9JRFMpCQkrPSBuYW5kX2lkcy5vCiAKK29iai0kKENPTkZJR19NVERfTkFORF9DQUZFKQkJKz0gY2FmZV9uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9TUElBKQkJKz0gc3BpYS5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQU1TX0RFTFRBKQkrPSBhbXMtZGVsdGEubwogb2JqLSQoQ09ORklHX01URF9OQU5EX1RPVE8pCQkrPSB0b3RvLm8KQEAgLTIyLDUgKzIzLDcgQEAKIG9iai0kKENPTkZJR19NVERfTkFORF9OQU5EU0lNKQkJKz0gbmFuZHNpbS5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQ1M1NTNYKQkJKz0gY3M1NTN4X25hbmQubwogb2JqLSQoQ09ORklHX01URF9OQU5EX05ERkMpCQkrPSBuZGZjLm8KK29iai0kKENPTkZJR19NVERfTkFORF9BVDkxKQkJKz0gYXQ5MV9uYW5kLm8KIAotbmFuZC1vYmpzID0gbmFuZF9iYXNlLm8gbmFuZF9iYnQubworbmFuZC1vYmpzIDo9IG5hbmRfYmFzZS5vIG5hbmRfYmJ0Lm8KK2NhZmVfbmFuZC1vYmpzIDo9IGNhZmUubyBjYWZlX2VjYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2F0OTFfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdDkxX25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGI4MGNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hdDkxX25hbmQuYwpAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIGRyaXZlcnMvbXRkL25hbmQvYXQ5MV9uYW5kLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFJpY2sgQnJvbnNvbgorICoKKyAqICBEZXJpdmVkIGZyb20gZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jCisgKgkgQ29weXJpZ2h0IChjKSAyMDAxIFRob21hcyBHbGVpeG5lciAoZ2xlaXhuZXJAYXV0cm9uaXguZGUpCisgKgorICogIERlcml2ZWQgZnJvbSBkcml2ZXJzL210ZC9zcGlhLmMKKyAqCSBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmVuIEouIEhpbGwgKHNqaGlsbEBjb3R3LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCitzdHJ1Y3QgYXQ5MV9uYW5kX2hvc3QgeworCXN0cnVjdCBuYW5kX2NoaXAJbmFuZF9jaGlwOworCXN0cnVjdCBtdGRfaW5mbwkJbXRkOworCXZvaWQgX19pb21lbQkJKmlvX2Jhc2U7CisJc3RydWN0IGF0OTFfbmFuZF9kYXRhCSpib2FyZDsKK307CisKKy8qCisgKiBIYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcworICovCitzdGF0aWMgdm9pZCBhdDkxX25hbmRfY21kX2N0cmwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgYXQ5MV9uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKKworCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIGhvc3QtPmlvX2Jhc2UgKyAoMSA8PCBob3N0LT5ib2FyZC0+Y2xlKSk7CisJZWxzZQorCQl3cml0ZWIoY21kLCBob3N0LT5pb19iYXNlICsgKDEgPDwgaG9zdC0+Ym9hcmQtPmFsZSkpOworfQorCisvKgorICogUmVhZCB0aGUgRGV2aWNlIFJlYWR5IHBpbi4KKyAqLworc3RhdGljIGludCBhdDkxX25hbmRfZGV2aWNlX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgYXQ5MV9uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisKKwlyZXR1cm4gYXQ5MV9nZXRfZ3Bpb192YWx1ZShob3N0LT5ib2FyZC0+cmR5X3Bpbik7Cit9CisKKy8qCisgKiBFbmFibGUgTkFORC4KKyAqLworc3RhdGljIHZvaWQgYXQ5MV9uYW5kX2VuYWJsZShzdHJ1Y3QgYXQ5MV9uYW5kX2hvc3QgKmhvc3QpCit7CisJaWYgKGhvc3QtPmJvYXJkLT5lbmFibGVfcGluKQorCQlhdDkxX3NldF9ncGlvX3ZhbHVlKGhvc3QtPmJvYXJkLT5lbmFibGVfcGluLCAwKTsKK30KKworLyoKKyAqIERpc2FibGUgTkFORC4KKyAqLworc3RhdGljIHZvaWQgYXQ5MV9uYW5kX2Rpc2FibGUoc3RydWN0IGF0OTFfbmFuZF9ob3N0ICpob3N0KQoreworCWlmIChob3N0LT5ib2FyZC0+ZW5hYmxlX3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb192YWx1ZShob3N0LT5ib2FyZC0+ZW5hYmxlX3BpbiwgMSk7Cit9CisKKy8qCisgKiBQcm9iZSBmb3IgdGhlIE5BTkQgZGV2aWNlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBhdDkxX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYXQ5MV9uYW5kX2hvc3QgKmhvc3Q7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwOworCWludCByZXM7CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydGl0aW9ucyA9IE5VTEw7CisJaW50IG51bV9wYXJ0aXRpb25zID0gMDsKKyNlbmRpZgorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZGV2aWNlIHN0cnVjdHVyZSAoYW5kIHplcm8gaXQpICovCisJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdDkxX25hbmRfaG9zdCksIEdGUF9LRVJORUwpOworCWlmICghaG9zdCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0OTFfbmFuZDogZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaG9zdC0+aW9fYmFzZSA9IGlvcmVtYXAocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKKwlpZiAoaG9zdC0+aW9fYmFzZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYXQ5MV9uYW5kOiBpb3JlbWFwIGZhaWxlZFxuIik7CisJCWtmcmVlKGhvc3QpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltdGQgPSAmaG9zdC0+bXRkOworCW5hbmRfY2hpcCA9ICZob3N0LT5uYW5kX2NoaXA7CisJaG9zdC0+Ym9hcmQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCW5hbmRfY2hpcC0+cHJpdiA9IGhvc3Q7CQkvKiBsaW5rIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyAqLworCW10ZC0+cHJpdiA9IG5hbmRfY2hpcDsKKwltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkvKiBTZXQgYWRkcmVzcyBvZiBOQU5EIElPIGxpbmVzICovCisJbmFuZF9jaGlwLT5JT19BRERSX1IgPSBob3N0LT5pb19iYXNlOworCW5hbmRfY2hpcC0+SU9fQUREUl9XID0gaG9zdC0+aW9fYmFzZTsKKwluYW5kX2NoaXAtPmNtZF9jdHJsID0gYXQ5MV9uYW5kX2NtZF9jdHJsOworCW5hbmRfY2hpcC0+ZGV2X3JlYWR5ID0gYXQ5MV9uYW5kX2RldmljZV9yZWFkeTsKKwluYW5kX2NoaXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsJLyogZW5hYmxlIEVDQyAqLworCW5hbmRfY2hpcC0+Y2hpcF9kZWxheSA9IDIwOwkJLyogMjB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KKworCWlmIChob3N0LT5ib2FyZC0+YnVzX3dpZHRoXzE2KQkJLyogMTYtYml0IGJ1cyB3aWR0aCAqLworCQluYW5kX2NoaXAtPm9wdGlvbnMgfD0gTkFORF9CVVNXSURUSF8xNjsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOworCWF0OTFfbmFuZF9lbmFibGUoaG9zdCk7CisKKwlpZiAoaG9zdC0+Ym9hcmQtPmRldF9waW4pIHsKKwkJaWYgKGF0OTFfZ2V0X2dwaW9fdmFsdWUoaG9zdC0+Ym9hcmQtPmRldF9waW4pKSB7CisJCQlwcmludGsgKCJObyBTbWFydE1lZGlhIGNhcmQgaW5zZXJ0ZWQuXG4iKTsKKwkJCXJlcyA9IEVOWElPOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwlpZiAobmFuZF9zY2FuKG10ZCwgMSkpIHsKKwkJcmVzID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlpZiAoaG9zdC0+Ym9hcmQtPnBhcnRpdGlvbl9pbmZvKQorCQlwYXJ0aXRpb25zID0gaG9zdC0+Ym9hcmQtPnBhcnRpdGlvbl9pbmZvKG10ZC0+c2l6ZSwgJm51bV9wYXJ0aXRpb25zKTsKKworCWlmICgoIXBhcnRpdGlvbnMpIHx8IChudW1fcGFydGl0aW9ucyA9PSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgImF0OTFfbmFuZDogTm8gcGFyaXRpdGlvbnMgZGVmaW5lZCwgb3IgdW5zdXBwb3J0ZWQgZGV2aWNlLlxuIik7CisJCXJlcyA9IEVOWElPOworCQlnb3RvIHJlbGVhc2U7CisJfQorCisJcmVzID0gYWRkX210ZF9wYXJ0aXRpb25zKG10ZCwgcGFydGl0aW9ucywgbnVtX3BhcnRpdGlvbnMpOworI2Vsc2UKKwlyZXMgPSBhZGRfbXRkX2RldmljZShtdGQpOworI2VuZGlmCisKKwlpZiAoIXJlcykKKwkJcmV0dXJuIHJlczsKKworcmVsZWFzZToKKwluYW5kX3JlbGVhc2UobXRkKTsKK291dDoKKwlhdDkxX25hbmRfZGlzYWJsZShob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKGhvc3QtPmlvX2Jhc2UpOworCWtmcmVlKGhvc3QpOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBOQU5EIGRldmljZS4KKyAqLworc3RhdGljIGludCBfX2RldmV4aXQgYXQ5MV9uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdDkxX25hbmRfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gJmhvc3QtPm10ZDsKKworCW5hbmRfcmVsZWFzZShtdGQpOworCisJYXQ5MV9uYW5kX2Rpc2FibGUoaG9zdCk7CisKKwlpb3VubWFwKGhvc3QtPmlvX2Jhc2UpOworCWtmcmVlKGhvc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0OTFfbmFuZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGF0OTFfbmFuZF9wcm9iZSwKKwkucmVtb3ZlCQk9IGF0OTFfbmFuZF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF0OTFfbmFuZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdDkxX25hbmRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF0OTFfbmFuZF9kcml2ZXIpOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdDkxX25hbmRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdDkxX25hbmRfZHJpdmVyKTsKK30KKworCittb2R1bGVfaW5pdChhdDkxX25hbmRfaW5pdCk7Cittb2R1bGVfZXhpdChhdDkxX25hbmRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlJpY2sgQnJvbnNvbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOQU5EL1NtYXJ0TWVkaWEgZHJpdmVyIGZvciBBVDkxUk05MjAwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2NhZmUuYyBiL2RyaXZlcnMvbXRkL25hbmQvY2FmZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjliZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL2NhZmUuYwpAQCAtMCwwICsxLDc3MSBAQAorLyoKKyAqIERyaXZlciBmb3IgT25lIExhcHRvcCBQZXIgQ2hpbGQg4oCYQ0FGw4nigJkgY29udHJvbGxlciwgYWthIE1hcnZlbGwgODhBTFAwMQorICoKKyAqIENvcHlyaWdodCDCqSAyMDA2IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA2IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqLworCisjZGVmaW5lIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyN1bmRlZiBERUJVRworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBDQUZFX05BTkRfQ1RSTDEJCTB4MDAKKyNkZWZpbmUgQ0FGRV9OQU5EX0NUUkwyCQkweDA0CisjZGVmaW5lIENBRkVfTkFORF9DVFJMMwkJMHgwOAorI2RlZmluZSBDQUZFX05BTkRfU1RBVFVTCTB4MGMKKyNkZWZpbmUgQ0FGRV9OQU5EX0lSUQkJMHgxMAorI2RlZmluZSBDQUZFX05BTkRfSVJRX01BU0sJMHgxNAorI2RlZmluZSBDQUZFX05BTkRfREFUQV9MRU4JMHgxOAorI2RlZmluZSBDQUZFX05BTkRfQUREUjEJCTB4MWMKKyNkZWZpbmUgQ0FGRV9OQU5EX0FERFIyCQkweDIwCisjZGVmaW5lIENBRkVfTkFORF9USU1JTkcxCTB4MjQKKyNkZWZpbmUgQ0FGRV9OQU5EX1RJTUlORzIJMHgyOAorI2RlZmluZSBDQUZFX05BTkRfVElNSU5HMwkweDJjCisjZGVmaW5lIENBRkVfTkFORF9OT05NRU0JMHgzMAorI2RlZmluZSBDQUZFX05BTkRfRUNDX1JFU1VMVAkweDNDCisjZGVmaW5lIENBRkVfTkFORF9ETUFfQ1RSTAkweDQwCisjZGVmaW5lIENBRkVfTkFORF9ETUFfQUREUjAJMHg0NAorI2RlZmluZSBDQUZFX05BTkRfRE1BX0FERFIxCTB4NDgKKyNkZWZpbmUgQ0FGRV9OQU5EX0VDQ19TWU4wMQkweDUwCisjZGVmaW5lIENBRkVfTkFORF9FQ0NfU1lOMjMJMHg1NAorI2RlZmluZSBDQUZFX05BTkRfRUNDX1NZTjQ1CTB4NTgKKyNkZWZpbmUgQ0FGRV9OQU5EX0VDQ19TWU42NwkweDVjCisjZGVmaW5lIENBRkVfTkFORF9SRUFEX0RBVEEJMHgxMDAwCisjZGVmaW5lIENBRkVfTkFORF9XUklURV9EQVRBCTB4MjAwMAorCisjZGVmaW5lIENBRkVfR0xPQkFMX0NUUkwJMHgzMDA0CisjZGVmaW5lIENBRkVfR0xPQkFMX0lSUQkJMHgzMDA4CisjZGVmaW5lIENBRkVfR0xPQkFMX0lSUV9NQVNLCTB4MzAwYworI2RlZmluZSBDQUZFX05BTkRfUkVTRVQJCTB4MzAzNAorCitpbnQgY2FmZV9jb3JyZWN0X2VjYyh1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgdW5zaWduZWQgc2hvcnQgKmNoa19zeW5kcm9tZV9saXN0KTsKKworc3RydWN0IGNhZmVfcHJpdiB7CisJc3RydWN0IG5hbmRfY2hpcCBuYW5kOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXZvaWQgX19pb21lbSAqbW1pbzsKKwl1aW50MzJfdCBjdGwxOworCXVpbnQzMl90IGN0bDI7CisJaW50IGRhdGFsZW47CisJaW50IG5yX2RhdGE7CisJaW50IGRhdGFfcG9zOworCWludCBwYWdlX2FkZHI7CisJZG1hX2FkZHJfdCBkbWFhZGRyOworCXVuc2lnbmVkIGNoYXIgKmRtYWJ1ZjsKK307CisKK3N0YXRpYyBpbnQgdXNlZG1hID0gMTsKK21vZHVsZV9wYXJhbSh1c2VkbWEsIGludCwgMDY0NCk7CisKK3N0YXRpYyBpbnQgc2tpcGJidCA9IDA7Cittb2R1bGVfcGFyYW0oc2tpcGJidCwgaW50LCAwNjQ0KTsKKworc3RhdGljIGludCBkZWJ1ZyA9IDA7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CisKK3N0YXRpYyBpbnQgcmVnZGVidWcgPSAwOworbW9kdWxlX3BhcmFtKHJlZ2RlYnVnLCBpbnQsIDA2NDQpOworCitzdGF0aWMgaW50IGNoZWNrZWNjID0gMTsKK21vZHVsZV9wYXJhbShjaGVja2VjYywgaW50LCAwNjQ0KTsKKworc3RhdGljIGludCBzbG93dGltaW5nID0gMDsKK21vZHVsZV9wYXJhbShzbG93dGltaW5nLCBpbnQsIDA2NDQpOworCisvKiBIcm0uIFdoeSBpc24ndCB0aGlzIGFscmVhZHkgY29uZGl0aW9uYWwgb24gc29tZXRoaW5nIGluIHRoZSBzdHJ1Y3QgZGV2aWNlPyAqLworI2RlZmluZSBjYWZlX2Rldl9kYmcoZGV2LCBhcmdzLi4uKSBkbyB7IGlmIChkZWJ1ZykgZGV2X2RiZyhkZXYsICMjYXJncyk7IH0gd2hpbGUoMCkKKworLyogTWFrZSBpdCBlYXNpZXIgdG8gc3dpdGNoIHRvIFBJTyBpZiB3ZSBuZWVkIHRvICovCisjZGVmaW5lIGNhZmVfcmVhZGwoY2FmZSwgYWRkcikJCQlyZWFkbCgoY2FmZSktPm1taW8gKyBDQUZFXyMjYWRkcikKKyNkZWZpbmUgY2FmZV93cml0ZWwoY2FmZSwgZGF0dW0sIGFkZHIpCQl3cml0ZWwoZGF0dW0sIChjYWZlKS0+bW1pbyArIENBRkVfIyNhZGRyKQorCitzdGF0aWMgaW50IGNhZmVfZGV2aWNlX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBjYWZlX3ByaXYgKmNhZmUgPSBtdGQtPnByaXY7CisJaW50IHJlc3VsdCA9ICEhKGNhZmVfcmVhZGwoY2FmZSwgTkFORF9TVEFUVVMpIHwgMHg0MDAwMDAwMCk7CisJdWludDMyX3QgaXJxcyA9IGNhZmVfcmVhZGwoY2FmZSwgTkFORF9JUlEpOworCisJY2FmZV93cml0ZWwoY2FmZSwgaXJxcywgTkFORF9JUlEpOworCisJY2FmZV9kZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJOQU5EIGRldmljZSBpcyVzIHJlYWR5LCBJUlEgJXggKCV4KSAoJXgsJXgpXG4iLAorCQlyZXN1bHQ/IiI6IiBub3QiLCBpcnFzLCBjYWZlX3JlYWRsKGNhZmUsIE5BTkRfSVJRKSwKKwkJY2FmZV9yZWFkbChjYWZlLCBHTE9CQUxfSVJRKSwgY2FmZV9yZWFkbChjYWZlLCBHTE9CQUxfSVJRX01BU0spKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHZvaWQgY2FmZV93cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY2FmZV9wcml2ICpjYWZlID0gbXRkLT5wcml2OworCisJaWYgKHVzZWRtYSkKKwkJbWVtY3B5KGNhZmUtPmRtYWJ1ZiArIGNhZmUtPmRhdGFsZW4sIGJ1ZiwgbGVuKTsKKwllbHNlCisJCW1lbWNweV90b2lvKGNhZmUtPm1taW8gKyBDQUZFX05BTkRfV1JJVEVfREFUQSArIGNhZmUtPmRhdGFsZW4sIGJ1ZiwgbGVuKTsKKworCWNhZmUtPmRhdGFsZW4gKz0gbGVuOworCisJY2FmZV9kZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJDb3B5IDB4JXggYnl0ZXMgdG8gd3JpdGUgYnVmZmVyLiBkYXRhbGVuIDB4JXhcbiIsCisJCWxlbiwgY2FmZS0+ZGF0YWxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGNhZmVfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY2FmZV9wcml2ICpjYWZlID0gbXRkLT5wcml2OworCisJaWYgKHVzZWRtYSkKKwkJbWVtY3B5KGJ1ZiwgY2FmZS0+ZG1hYnVmICsgY2FmZS0+ZGF0YWxlbiwgbGVuKTsKKwllbHNlCisJCW1lbWNweV9mcm9taW8oYnVmLCBjYWZlLT5tbWlvICsgQ0FGRV9OQU5EX1JFQURfREFUQSArIGNhZmUtPmRhdGFsZW4sIGxlbik7CisKKwljYWZlX2Rldl9kYmcoJmNhZmUtPnBkZXYtPmRldiwgIkNvcHkgMHgleCBieXRlcyBmcm9tIHBvc2l0aW9uIDB4JXggaW4gcmVhZCBidWZmZXIuXG4iLAorCQkgIGxlbiwgY2FmZS0+ZGF0YWxlbik7CisJY2FmZS0+ZGF0YWxlbiArPSBsZW47Cit9CisKK3N0YXRpYyB1aW50OF90IGNhZmVfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBjYWZlX3ByaXYgKmNhZmUgPSBtdGQtPnByaXY7CisJdWludDhfdCBkOworCisJY2FmZV9yZWFkX2J1ZihtdGQsICZkLCAxKTsKKwljYWZlX2Rldl9kYmcoJmNhZmUtPnBkZXYtPmRldiwgIlJlYWQgJTAyeFxuIiwgZCk7CisKKwlyZXR1cm4gZDsKK30KKworc3RhdGljIHZvaWQgY2FmZV9uYW5kX2NtZGZ1bmMoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGNvbW1hbmQsCisJCQkgICAgICBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQoreworCXN0cnVjdCBjYWZlX3ByaXYgKmNhZmUgPSBtdGQtPnByaXY7CisJaW50IGFkcmJ5dGVzID0gMDsKKwl1aW50MzJfdCBjdGwxOworCXVpbnQzMl90IGRvbmVpbnQgPSAweDgwMDAwMDAwOworCisJY2FmZV9kZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJjbWRmdW5jICUwMngsIDB4JXgsIDB4JXhcbiIsCisJCWNvbW1hbmQsIGNvbHVtbiwgcGFnZV9hZGRyKTsKKworCWlmIChjb21tYW5kID09IE5BTkRfQ01EX0VSQVNFMiB8fCBjb21tYW5kID09IE5BTkRfQ01EX1BBR0VQUk9HKSB7CisJCS8qIFNlY29uZCBoYWxmIG9mIGEgY29tbWFuZCB3ZSBhbHJlYWR5IGNhbGN1bGF0ZWQgKi8KKwkJY2FmZV93cml0ZWwoY2FmZSwgY2FmZS0+Y3RsMiB8IDB4MTAwIHwgY29tbWFuZCwgTkFORF9DVFJMMik7CisJCWN0bDEgPSBjYWZlLT5jdGwxOworCQljYWZlLT5jdGwyICY9IH4oMTw8MzApOworCQljYWZlX2Rldl9kYmcoJmNhZmUtPnBkZXYtPmRldiwgIkNvbnRpbnVlIGNvbW1hbmQsIGN0bDEgJTA4eCwgI2RhdGEgJWRcbiIsCisJCQkgIGNhZmUtPmN0bDEsIGNhZmUtPm5yX2RhdGEpOworCQlnb3RvIGRvX2NvbW1hbmQ7CisJfQorCS8qIFJlc2V0IEVDQyBlbmdpbmUgKi8KKwljYWZlX3dyaXRlbChjYWZlLCAwLCBOQU5EX0NUUkwyKTsKKworCS8qIEVtdWxhdGUgTkFORF9DTURfUkVBRE9PQiBvbiBsYXJnZS1wYWdlIGNoaXBzICovCisJaWYgKG10ZC0+d3JpdGVzaXplID4gNTEyICYmCisJICAgIGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRE9PQikgeworCQljb2x1bW4gKz0gbXRkLT53cml0ZXNpemU7CisJCWNvbW1hbmQgPSBOQU5EX0NNRF9SRUFEMDsKKwl9CisKKwkvKiBGSVhNRTogRG8gd2UgbmVlZCB0byBzZW5kIHJlYWQgY29tbWFuZCBiZWZvcmUgc2VuZGluZyBkYXRhCisJICAgZm9yIHNtYWxsLXBhZ2UgY2hpcHMsIHRvIHBvc2l0aW9uIHRoZSBidWZmZXIgY29ycmVjdGx5PyAqLworCisJaWYgKGNvbHVtbiAhPSAtMSkgeworCQljYWZlX3dyaXRlbChjYWZlLCBjb2x1bW4sIE5BTkRfQUREUjEpOworCQlhZHJieXRlcyA9IDI7CisJCWlmIChwYWdlX2FkZHIgIT0gLTEpCisJCQlnb3RvIHdyaXRlX2FkcjI7CisJfSBlbHNlIGlmIChwYWdlX2FkZHIgIT0gLTEpIHsKKwkJY2FmZV93cml0ZWwoY2FmZSwgcGFnZV9hZGRyICYgMHhmZmZmLCBOQU5EX0FERFIxKTsKKwkJcGFnZV9hZGRyID4+PSAxNjsKKwl3cml0ZV9hZHIyOgorCQljYWZlX3dyaXRlbChjYWZlLCBwYWdlX2FkZHIsIE5BTkRfQUREUjIpOworCQlhZHJieXRlcyArPSAyOworCQlpZiAobXRkLT5zaXplID4gbXRkLT53cml0ZXNpemUgPDwgMTYpCisJCQlhZHJieXRlcysrOworCX0KKworCWNhZmUtPmRhdGFfcG9zID0gY2FmZS0+ZGF0YWxlbiA9IDA7CisKKwkvKiBTZXQgY29tbWFuZCB2YWxpZCBiaXQgKi8KKwljdGwxID0gMHg4MDAwMDAwMCB8IGNvbW1hbmQ7CisKKwkvKiBTZXQgUkQgb3IgV1IgYml0cyBhcyBhcHByb3ByaWF0ZSAqLworCWlmIChjb21tYW5kID09IE5BTkRfQ01EX1JFQURJRCB8fCBjb21tYW5kID09IE5BTkRfQ01EX1NUQVRVUykgeworCQljdGwxIHw9ICgxPDwyNik7IC8qIHJkICovCisJCS8qIEFsd2F5cyA1IGJ5dGVzLCBmb3Igbm93ICovCisJCWNhZmUtPmRhdGFsZW4gPSA0OworCQkvKiBBbmQgb25lIGFkZHJlc3MgY3ljbGUgLS0gZXZlbiBmb3IgU1RBVFVTLCBzaW5jZSB0aGUgY29udHJvbGxlciBkb2Vzbid0IHdvcmsgd2l0aG91dCAqLworCQlhZHJieXRlcyA9IDE7CisJfSBlbHNlIGlmIChjb21tYW5kID09IE5BTkRfQ01EX1JFQUQwIHx8IGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRDEgfHwKKwkJICAgY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFET09CIHx8IGNvbW1hbmQgPT0gTkFORF9DTURfUk5ET1VUKSB7CisJCWN0bDEgfD0gMTw8MjY7IC8qIHJkICovCisJCS8qIEZvciBub3csIGFzc3VtZSBqdXN0IHJlYWQgdG8gZW5kIG9mIHBhZ2UgKi8KKwkJY2FmZS0+ZGF0YWxlbiA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplIC0gY29sdW1uOworCX0gZWxzZSBpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9TRVFJTikKKwkJY3RsMSB8PSAxPDwyNTsgLyogd3IgKi8KKworCS8qIFNldCBudW1iZXIgb2YgYWRkcmVzcyBieXRlcyAqLworCWlmIChhZHJieXRlcykKKwkJY3RsMSB8PSAoKGFkcmJ5dGVzLTEpfDgpIDw8IDI3OworCisJaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfU0VRSU4gfHwgY29tbWFuZCA9PSBOQU5EX0NNRF9FUkFTRTEpIHsKKwkJLyogSWdub3JlIHRoZSBmaXJzdCBjb21tYW5kIG9mIGEgcGFpcjsgdGhlIGhhcmR3YXJlCisJCSAgIGRlYWxzIHdpdGggdGhlbSBib3RoIGF0IG9uY2UsIGxhdGVyICovCisJCWNhZmUtPmN0bDEgPSBjdGwxOworCQljYWZlX2Rldl9kYmcoJmNhZmUtPnBkZXYtPmRldiwgIlNldHVwIGZvciBkZWxheWVkIGNvbW1hbmQsIGN0bDEgJTA4eCwgZGxlbiAleFxuIiwKKwkJCSAgY2FmZS0+Y3RsMSwgY2FmZS0+ZGF0YWxlbik7CisJCXJldHVybjsKKwl9CisJLyogUk5ET1VUIGFuZCBSRUFEMCBjb21tYW5kcyBuZWVkIGEgZm9sbG93aW5nIGJ5dGUgKi8KKwlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9STkRPVVQpCisJCWNhZmVfd3JpdGVsKGNhZmUsIGNhZmUtPmN0bDIgfCAweDEwMCB8IE5BTkRfQ01EX1JORE9VVFNUQVJULCBOQU5EX0NUUkwyKTsKKwllbHNlIGlmIChjb21tYW5kID09IE5BTkRfQ01EX1JFQUQwICYmIG10ZC0+d3JpdGVzaXplID4gNTEyKQorCQljYWZlX3dyaXRlbChjYWZlLCBjYWZlLT5jdGwyIHwgMHgxMDAgfCBOQU5EX0NNRF9SRUFEU1RBUlQsIE5BTkRfQ1RSTDIpOworCisgZG9fY29tbWFuZDoKKwljYWZlX2Rldl9kYmcoJmNhZmUtPnBkZXYtPmRldiwgImRsZW4gJXgsIGN0bDEgJXgsIGN0bDIgJXhcbiIsCisJCWNhZmUtPmRhdGFsZW4sIGN0bDEsIGNhZmVfcmVhZGwoY2FmZSwgTkFORF9DVFJMMikpOworCisJLyogTkI6IFRoZSBkYXRhc2hlZXQgbGllcyAtLSB3ZSByZWFsbHkgc2hvdWxkIGJlIHN1YnRyYWN0aW5nIDEgaGVyZSAqLworCWNhZmVfd3JpdGVsKGNhZmUsIGNhZmUtPmRhdGFsZW4sIE5BTkRfREFUQV9MRU4pOworCWNhZmVfd3JpdGVsKGNhZmUsIDB4OTAwMDAwMDAsIE5BTkRfSVJRKTsKKwlpZiAodXNlZG1hICYmIChjdGwxICYgKDM8PDI1KSkpIHsKKwkJdWludDMyX3QgZG1hY3RsID0gMHhjMDAwMDAwMCArIGNhZmUtPmRhdGFsZW47CisJCS8qIElmIFdSIG9yIFJEIGJpdHMgc2V0LCBzZXQgdXAgRE1BICovCisJCWlmIChjdGwxICYgKDE8PDI2KSkgeworCQkJLyogSXQncyBhIHJlYWQgKi8KKwkJCWRtYWN0bCB8PSAoMTw8MjkpOworCQkJLyogLi4uIHNvIGl0J3MgZG9uZSB3aGVuIHRoZSBETUEgaXMgZG9uZSwgbm90IGp1c3QKKwkJCSAgIHRoZSBjb21tYW5kLiAqLworCQkJZG9uZWludCA9IDB4MTAwMDAwMDA7CisJCX0KKwkJY2FmZV93cml0ZWwoY2FmZSwgZG1hY3RsLCBOQU5EX0RNQV9DVFJMKTsKKwl9CisJY2FmZS0+ZGF0YWxlbiA9IDA7CisKKwlpZiAodW5saWtlbHkocmVnZGVidWcpKSB7CisJCWludCBpOworCQlwcmludGsoIkFib3V0IHRvIHdyaXRlIGNvbW1hbmQgJTA4eCB0byByZWdpc3RlciAwXG4iLCBjdGwxKTsKKwkJZm9yIChpPTQ7IGk8IDB4NWM7IGkrPTQpCisJCQlwcmludGsoIlJlZ2lzdGVyICV4OiAlMDh4XG4iLCBpLCByZWFkbChjYWZlLT5tbWlvICsgaSkpOworCX0KKworCWNhZmVfd3JpdGVsKGNhZmUsIGN0bDEsIE5BTkRfQ1RSTDEpOworCS8qIEFwcGx5IHRoaXMgc2hvcnQgZGVsYXkgYWx3YXlzIHRvIGVuc3VyZSB0aGF0IHdlIGRvIHdhaXQgdFdCIGluCisJICogYW55IGNhc2Ugb24gYW55IG1hY2hpbmUuICovCisJbmRlbGF5KDEwMCk7CisKKwlpZiAoMSkgeworCQlpbnQgYyA9IDUwMDAwMDsKKwkJdWludDMyX3QgaXJxczsKKworCQl3aGlsZSAoYy0tKSB7CisJCQlpcnFzID0gY2FmZV9yZWFkbChjYWZlLCBOQU5EX0lSUSk7CisJCQlpZiAoaXJxcyAmIGRvbmVpbnQpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoMSk7CisJCQlpZiAoIShjICUgMTAwMDAwKSkKKwkJCQljYWZlX2Rldl9kYmcoJmNhZmUtPnBkZXYtPmRldiwgIldhaXQgZm9yIHJlYWR5LCBJUlEgJXhcbiIsIGlycXMpOworCQkJY3B1X3JlbGF4KCk7CisJCX0KKwkJY2FmZV93cml0ZWwoY2FmZSwgZG9uZWludCwgTkFORF9JUlEpOworCQljYWZlX2Rldl9kYmcoJmNhZmUtPnBkZXYtPmRldiwgIkNvbW1hbmQgJXggY29tcGxldGVkIGFmdGVyICVkIHVzZWMsIGlycXMgJXggKCV4KVxuIiwKKwkJCSAgICAgY29tbWFuZCwgNTAwMDAwLWMsIGlycXMsIGNhZmVfcmVhZGwoY2FmZSwgTkFORF9JUlEpKTsKKwl9CisKKwlXQVJOX09OKGNhZmUtPmN0bDIgJiAoMTw8MzApKTsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCisJY2FzZSBOQU5EX0NNRF9DQUNIRURQUk9HOgorCWNhc2UgTkFORF9DTURfUEFHRVBST0c6CisJY2FzZSBOQU5EX0NNRF9FUkFTRTE6CisJY2FzZSBOQU5EX0NNRF9FUkFTRTI6CisJY2FzZSBOQU5EX0NNRF9TRVFJTjoKKwljYXNlIE5BTkRfQ01EX1JORElOOgorCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCWNhc2UgTkFORF9DTURfREVQTEVURTE6CisJY2FzZSBOQU5EX0NNRF9STkRPVVQ6CisJY2FzZSBOQU5EX0NNRF9TVEFUVVNfRVJST1I6CisJY2FzZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IwOgorCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SMToKKwljYXNlIE5BTkRfQ01EX1NUQVRVU19FUlJPUjI6CisJY2FzZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IzOgorCQljYWZlX3dyaXRlbChjYWZlLCBjYWZlLT5jdGwyLCBOQU5EX0NUUkwyKTsKKwkJcmV0dXJuOworCX0KKwluYW5kX3dhaXRfcmVhZHkobXRkKTsKKwljYWZlX3dyaXRlbChjYWZlLCBjYWZlLT5jdGwyLCBOQU5EX0NUUkwyKTsKK30KKworc3RhdGljIHZvaWQgY2FmZV9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXBucikKK3sKKwkvL3N0cnVjdCBjYWZlX3ByaXYgKmNhZmUgPSBtdGQtPnByaXY7CisJLy8JY2FmZV9kZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJzZWxlY3RfY2hpcCAlZFxuIiwgY2hpcG5yKTsKK30KKworc3RhdGljIGludCBjYWZlX25hbmRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmlkKQoreworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaWQ7CisJc3RydWN0IGNhZmVfcHJpdiAqY2FmZSA9IG10ZC0+cHJpdjsKKwl1aW50MzJfdCBpcnFzID0gY2FmZV9yZWFkbChjYWZlLCBOQU5EX0lSUSk7CisJY2FmZV93cml0ZWwoY2FmZSwgaXJxcyAmIH4weDkwMDAwMDAwLCBOQU5EX0lSUSk7CisJaWYgKCFpcnFzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwljYWZlX2Rldl9kYmcoJmNhZmUtPnBkZXYtPmRldiwgImlycSwgYml0cyAleCAoJXgpXG4iLCBpcnFzLCBjYWZlX3JlYWRsKGNhZmUsIE5BTkRfSVJRKSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBjYWZlX25hbmRfYnVnKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW50IGNhZmVfbmFuZF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkgICAgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IHBhZ2UpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU0VRSU4sIG10ZC0+d3JpdGVzaXplLCBwYWdlKTsKKwljaGlwLT53cml0ZV9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKKwlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQsIGNoaXApOworCisJcmV0dXJuIHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwgPyAtRUlPIDogMDsKK30KKworLyogRG9uJ3QgdXNlIC0tIHVzZSBuYW5kX3JlYWRfb29iX3N0ZCBmb3Igbm93ICovCitzdGF0aWMgaW50IGNhZmVfbmFuZF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCSAgICAgIGludCBwYWdlLCBpbnQgc25kY21kKQoreworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFET09CLCAwLCBwYWdlKTsKKwljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7CisJcmV0dXJuIDE7Cit9CisvKioKKyAqIGNhZmVfbmFuZF9yZWFkX3BhZ2Vfc3luZHJvbWUgLSB7UkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIHN5bmRyb20gYmFzZWQgcGFnZSByZWFkCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqCisgKiBUaGUgaHcgZ2VuZXJhdG9yIGNhbGN1bGF0ZXMgdGhlIGVycm9yIHN5bmRyb21lIGF1dG9tYXRpY2FsbHkuIFRoZXJlZm9yCisgKiB3ZSBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0IGFuZCBoYW5kbGluZy4KKyAqLworc3RhdGljIGludCBjYWZlX25hbmRfcmVhZF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJICAgICAgIHVpbnQ4X3QgKmJ1ZikKK3sKKwlzdHJ1Y3QgY2FmZV9wcml2ICpjYWZlID0gbXRkLT5wcml2OworCisJY2FmZV9kZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJFQ0MgcmVzdWx0ICUwOHggU1lOMSwyICUwOHhcbiIsCisJCSAgICAgY2FmZV9yZWFkbChjYWZlLCBOQU5EX0VDQ19SRVNVTFQpLAorCQkgICAgIGNhZmVfcmVhZGwoY2FmZSwgTkFORF9FQ0NfU1lOMDEpKTsKKworCWNoaXAtPnJlYWRfYnVmKG10ZCwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7CisJY2hpcC0+cmVhZF9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworCisJaWYgKGNoZWNrZWNjICYmIGNhZmVfcmVhZGwoY2FmZSwgTkFORF9FQ0NfUkVTVUxUKSAmICgxPDwxOCkpIHsKKwkJdW5zaWduZWQgc2hvcnQgc3luWzhdOworCQlpbnQgaTsKKworCQlmb3IgKGk9MDsgaTw4OyBpKz0yKSB7CisJCQl1aW50MzJfdCB0bXAgPSBjYWZlX3JlYWRsKGNhZmUsIE5BTkRfRUNDX1NZTjAxICsgKGkqMikpOworCQkJc3luW2ldID0gdG1wICYgMHhmZmY7CisJCQlzeW5baSsxXSA9ICh0bXAgPj4gMTYpICYgMHhmZmY7CisJCX0KKworCQlpZiAoKGkgPSBjYWZlX2NvcnJlY3RfZWNjKGJ1Ziwgc3luKSkgPCAwKSB7CisJCQlkZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gY29ycmVjdCBFQ0MgYXQgJTA4eFxuIiwKKwkJCQljYWZlX3JlYWRsKGNhZmUsIE5BTkRfQUREUjIpICogMjA0OCk7CisJCQlmb3IgKGk9MDsgaTwgMHg1YzsgaSs9NCkKKwkJCQlwcmludGsoIlJlZ2lzdGVyICV4OiAlMDh4XG4iLCBpLCByZWFkbChjYWZlLT5tbWlvICsgaSkpOworCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJDb3JyZWN0ZWQgJWQgc3ltYm9sIGVycm9yc1xuIiwgaSk7CisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gaTsKKwkJfQorCX0KKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgY2FmZV9vb2JpbmZvXzIwNDggPSB7CisJLmVjY2J5dGVzID0gMTQsCisJLmVjY3BvcyA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTN9LAorCS5vb2JmcmVlID0ge3sxNCwgNTB9fQorfTsKKworLyogSWNrLiBUaGUgQkJUIGNvZGUgcmVhbGx5IG91Z2h0IHRvIGJlIGFibGUgdG8gd29yayB0aGlzIGJpdCBvdXQKKyAgIGZvciBpdHNlbGYgZnJvbSB0aGUgYWJvdmUsIGF0IGxlYXN0IGZvciB0aGUgMktpQiBjYXNlICovCitzdGF0aWMgdWludDhfdCBjYWZlX2JidF9wYXR0ZXJuXzIwNDhbXSA9IHsgJ0InLCAnYicsICd0JywgJzAnIH07CitzdGF0aWMgdWludDhfdCBjYWZlX21pcnJvcl9wYXR0ZXJuXzIwNDhbXSA9IHsgJzEnLCAndCcsICdiJywgJ0InIH07CisKK3N0YXRpYyB1aW50OF90IGNhZmVfYmJ0X3BhdHRlcm5fNTEyW10gPSB7IDB4QkIgfTsKK3N0YXRpYyB1aW50OF90IGNhZmVfbWlycm9yX3BhdHRlcm5fNTEyW10gPSB7IDB4QkMgfTsKKworCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGNhZmVfYmJ0X21haW5fZGVzY3JfMjA0OCA9IHsKKwkub3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUX0NSRUFURSB8IE5BTkRfQkJUX1dSSVRFCisJCXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJT04gfCBOQU5EX0JCVF9QRVJDSElQLAorCS5vZmZzID0JMTQsCisJLmxlbiA9IDQsCisJLnZlcm9mZnMgPSAxOCwKKwkubWF4YmxvY2tzID0gNCwKKwkucGF0dGVybiA9IGNhZmVfYmJ0X3BhdHRlcm5fMjA0OAorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBjYWZlX2JidF9taXJyb3JfZGVzY3JfMjA0OCA9IHsKKwkub3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUX0NSRUFURSB8IE5BTkRfQkJUX1dSSVRFCisJCXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJT04gfCBOQU5EX0JCVF9QRVJDSElQLAorCS5vZmZzID0JMTQsCisJLmxlbiA9IDQsCisJLnZlcm9mZnMgPSAxOCwKKwkubWF4YmxvY2tzID0gNCwKKwkucGF0dGVybiA9IGNhZmVfbWlycm9yX3BhdHRlcm5fMjA0OAorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBjYWZlX29vYmluZm9fNTEyID0geworCS5lY2NieXRlcyA9IDE0LAorCS5lY2Nwb3MgPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzfSwKKwkub29iZnJlZSA9IHt7MTQsIDJ9fQorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBjYWZlX2JidF9tYWluX2Rlc2NyXzUxMiA9IHsKKwkub3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUX0NSRUFURSB8IE5BTkRfQkJUX1dSSVRFCisJCXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJT04gfCBOQU5EX0JCVF9QRVJDSElQLAorCS5vZmZzID0JMTQsCisJLmxlbiA9IDEsCisJLnZlcm9mZnMgPSAxNSwKKwkubWF4YmxvY2tzID0gNCwKKwkucGF0dGVybiA9IGNhZmVfYmJ0X3BhdHRlcm5fNTEyCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGNhZmVfYmJ0X21pcnJvcl9kZXNjcl81MTIgPSB7CisJLm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF9DUkVBVEUgfCBOQU5EX0JCVF9XUklURQorCQl8IE5BTkRfQkJUXzJCSVQgfCBOQU5EX0JCVF9WRVJTSU9OIHwgTkFORF9CQlRfUEVSQ0hJUCwKKwkub2ZmcyA9CTE0LAorCS5sZW4gPSAxLAorCS52ZXJvZmZzID0gMTUsCisJLm1heGJsb2NrcyA9IDQsCisJLnBhdHRlcm4gPSBjYWZlX21pcnJvcl9wYXR0ZXJuXzUxMgorfTsKKworCitzdGF0aWMgdm9pZCBjYWZlX25hbmRfd3JpdGVfcGFnZV9sb3dsZXZlbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBjb25zdCB1aW50OF90ICpidWYpCit7CisJc3RydWN0IGNhZmVfcHJpdiAqY2FmZSA9IG10ZC0+cHJpdjsKKworCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOworCWNoaXAtPndyaXRlX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7CisKKwkvKiBTZXQgdXAgRUNDIGF1dG9nZW5lcmF0aW9uICovCisJY2FmZS0+Y3RsMiB8PSAoMTw8MzApOworfQorCitzdGF0aWMgaW50IGNhZmVfbmFuZF93cml0ZV9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCWNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UsIGludCBjYWNoZWQsIGludCByYXcpCit7CisJaW50IHN0YXR1czsKKworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TRVFJTiwgMHgwMCwgcGFnZSk7CisKKwlpZiAodW5saWtlbHkocmF3KSkKKwkJY2hpcC0+ZWNjLndyaXRlX3BhZ2VfcmF3KG10ZCwgY2hpcCwgYnVmKTsKKwllbHNlCisJCWNoaXAtPmVjYy53cml0ZV9wYWdlKG10ZCwgY2hpcCwgYnVmKTsKKworCS8qCisJICogQ2FjaGVkIHByb2dhbW1pbmcgZGlzYWJsZWQgZm9yIG5vdywgTm90IHN1cmUgaWYgaXRzIHdvcnRoIHRoZQorCSAqIHRyb3VibGUuIFRoZSBzcGVlZCBnYWluIGlzIG5vdCB2ZXJ5IGltcHJlc3NpdmUuICgyLjMtPjIuNk1pYi9zKQorCSAqLworCWNhY2hlZCA9IDA7CisKKwlpZiAoIWNhY2hlZCB8fCAhKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0NBQ0hFUFJHKSkgeworCisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKKwkJc3RhdHVzID0gY2hpcC0+d2FpdGZ1bmMobXRkLCBjaGlwKTsKKwkJLyoKKwkJICogU2VlIGlmIG9wZXJhdGlvbiBmYWlsZWQgYW5kIGFkZGl0aW9uYWwgc3RhdHVzIGNoZWNrcyBhcmUKKwkJICogYXZhaWxhYmxlCisJCSAqLworCQlpZiAoKHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwpICYmIChjaGlwLT5lcnJzdGF0KSkKKwkJCXN0YXR1cyA9IGNoaXAtPmVycnN0YXQobXRkLCBjaGlwLCBGTF9XUklUSU5HLCBzdGF0dXMsCisJCQkJCSAgICAgICBwYWdlKTsKKworCQlpZiAoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkKKwkJCXJldHVybiAtRUlPOworCX0gZWxzZSB7CisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9DQUNIRURQUk9HLCAtMSwgLTEpOworCQlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQsIGNoaXApOworCX0KKworI2lmZGVmIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUKKwkvKiBTZW5kIGNvbW1hbmQgdG8gcmVhZCBiYWNrIHRoZSBkYXRhICovCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLCBwYWdlKTsKKworCWlmIChjaGlwLT52ZXJpZnlfYnVmKG10ZCwgYnVmLCBtdGQtPndyaXRlc2l6ZSkpCisJCXJldHVybiAtRUlPOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FmZV9uYW5kX2Jsb2NrX2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgaW50IGdldGNoaXApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNhZmVfbmFuZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc3RydWN0IGNhZmVfcHJpdiAqY2FmZTsKKwl1aW50MzJfdCBjdHJsOworCWludCBlcnIgPSAwOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJbXRkID0ga3phbGxvYyhzaXplb2YoKm10ZCkgKyBzaXplb2Yoc3RydWN0IGNhZmVfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghbXRkKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2MgbXRkX2luZm9cbiIpOworCQlyZXR1cm4gIC1FTk9NRU07CisJfQorCWNhZmUgPSAodm9pZCAqKSgmbXRkWzFdKTsKKworCW10ZC0+cHJpdiA9IGNhZmU7CisJbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJY2FmZS0+cGRldiA9IHBkZXY7CisJY2FmZS0+bW1pbyA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIWNhZmUtPm1taW8pIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZhaWxlZCB0byBpb21hcFxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfbXRkOworCX0KKwljYWZlLT5kbWFidWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmNhZmUtPnBkZXYtPmRldiwgMjExMiArIHNpemVvZihzdHJ1Y3QgbmFuZF9idWZmZXJzKSwKKwkJCQkJICAmY2FmZS0+ZG1hYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYWZlLT5kbWFidWYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfaW9yOworCX0KKwljYWZlLT5uYW5kLmJ1ZmZlcnMgPSAodm9pZCAqKWNhZmUtPmRtYWJ1ZiArIDIxMTI7CisKKwljYWZlLT5uYW5kLmNtZGZ1bmMgPSBjYWZlX25hbmRfY21kZnVuYzsKKwljYWZlLT5uYW5kLmRldl9yZWFkeSA9IGNhZmVfZGV2aWNlX3JlYWR5OworCWNhZmUtPm5hbmQucmVhZF9ieXRlID0gY2FmZV9yZWFkX2J5dGU7CisJY2FmZS0+bmFuZC5yZWFkX2J1ZiA9IGNhZmVfcmVhZF9idWY7CisJY2FmZS0+bmFuZC53cml0ZV9idWYgPSBjYWZlX3dyaXRlX2J1ZjsKKwljYWZlLT5uYW5kLnNlbGVjdF9jaGlwID0gY2FmZV9zZWxlY3RfY2hpcDsKKworCWNhZmUtPm5hbmQuY2hpcF9kZWxheSA9IDA7CisKKwkvKiBFbmFibGUgdGhlIGZvbGxvd2luZyBmb3IgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgKi8KKwljYWZlLT5uYW5kLm9wdGlvbnMgPSBOQU5EX1VTRV9GTEFTSF9CQlQgfCBOQU5EX05PX0FVVE9JTkNSIHwgTkFORF9PV05fQlVGRkVSUzsKKworCWlmIChza2lwYmJ0KSB7CisJCWNhZmUtPm5hbmQub3B0aW9ucyB8PSBOQU5EX1NLSVBfQkJUU0NBTjsKKwkJY2FmZS0+bmFuZC5ibG9ja19iYWQgPSBjYWZlX25hbmRfYmxvY2tfYmFkOworCX0KKworCS8qIFN0YXJ0IG9mZiBieSByZXNldHRpbmcgdGhlIE5BTkQgY29udHJvbGxlciBjb21wbGV0ZWx5ICovCisJY2FmZV93cml0ZWwoY2FmZSwgMSwgTkFORF9SRVNFVCk7CisJY2FmZV93cml0ZWwoY2FmZSwgMCwgTkFORF9SRVNFVCk7CisKKwljYWZlX3dyaXRlbChjYWZlLCAweGZmZmZmZmZmLCBOQU5EX0lSUV9NQVNLKTsKKworCS8qIFRpbWluZ3MgZnJvbSBNYXJ2ZWxsJ3MgdGVzdCBjb2RlIChub3QgdmVyaWZpZWQgb3IgY2FsY3VsYXRlZCBieSB1cykgKi8KKwlpZiAoIXNsb3d0aW1pbmcpIHsKKwkJY2FmZV93cml0ZWwoY2FmZSwgMHgwMTAxMGEwYSwgTkFORF9USU1JTkcxKTsKKwkJY2FmZV93cml0ZWwoY2FmZSwgMHgyNDEyMTIxMiwgTkFORF9USU1JTkcyKTsKKwkJY2FmZV93cml0ZWwoY2FmZSwgMHgxMTAwMDAwMCwgTkFORF9USU1JTkczKTsKKwl9IGVsc2UgeworCQljYWZlX3dyaXRlbChjYWZlLCAweGZmZmZmZmZmLCBOQU5EX1RJTUlORzEpOworCQljYWZlX3dyaXRlbChjYWZlLCAweGZmZmZmZmZmLCBOQU5EX1RJTUlORzIpOworCQljYWZlX3dyaXRlbChjYWZlLCAweGZmZmZmZmZmLCBOQU5EX1RJTUlORzMpOworCX0KKwljYWZlX3dyaXRlbChjYWZlLCAweGZmZmZmZmZmLCBOQU5EX0lSUV9NQVNLKTsKKwllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZjYWZlX25hbmRfaW50ZXJydXB0LCBTQV9TSElSUSwgIkNBRkUgTkFORCIsIG10ZCk7CisJaWYgKGVycikgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIElSUSAlZFxuIiwgcGRldi0+aXJxKTsKKworCQlnb3RvIG91dF9mcmVlX2RtYTsKKwl9CisjaWYgMQorCS8qIERpc2FibGUgbWFzdGVyIHJlc2V0LCBlbmFibGUgTkFORCBjbG9jayAqLworCWN0cmwgPSBjYWZlX3JlYWRsKGNhZmUsIEdMT0JBTF9DVFJMKTsKKwljdHJsICY9IDB4ZmZmZmVmZjA7CisJY3RybCB8PSAweDAwMDA3MDAwOworCWNhZmVfd3JpdGVsKGNhZmUsIGN0cmwgfCAweDA1LCBHTE9CQUxfQ1RSTCk7CisJY2FmZV93cml0ZWwoY2FmZSwgY3RybCB8IDB4MGEsIEdMT0JBTF9DVFJMKTsKKwljYWZlX3dyaXRlbChjYWZlLCAwLCBOQU5EX0RNQV9DVFJMKTsKKworCWNhZmVfd3JpdGVsKGNhZmUsIDB4NzAwNiwgR0xPQkFMX0NUUkwpOworCWNhZmVfd3JpdGVsKGNhZmUsIDB4NzAwYSwgR0xPQkFMX0NUUkwpOworCisJLyogU2V0IHVwIERNQSBhZGRyZXNzICovCisJY2FmZV93cml0ZWwoY2FmZSwgY2FmZS0+ZG1hYWRkciAmIDB4ZmZmZmZmZmYsIE5BTkRfRE1BX0FERFIwKTsKKwlpZiAoc2l6ZW9mKGNhZmUtPmRtYWFkZHIpID4gNCkKKwkJLyogU2hpZnQgaW4gdHdvIHBhcnRzIHRvIHNodXQgdGhlIGNvbXBpbGVyIHVwICovCisJCWNhZmVfd3JpdGVsKGNhZmUsIChjYWZlLT5kbWFhZGRyID4+IDE2KSA+PiAxNiwgTkFORF9ETUFfQUREUjEpOworCWVsc2UKKwkJY2FmZV93cml0ZWwoY2FmZSwgMCwgTkFORF9ETUFfQUREUjEpOworCisJY2FmZV9kZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJTZXQgRE1BIGFkZHJlc3MgdG8gJXggKHZpcnQgJXApXG4iLAorCQljYWZlX3JlYWRsKGNhZmUsIE5BTkRfRE1BX0FERFIwKSwgY2FmZS0+ZG1hYnVmKTsKKworCS8qIEVuYWJsZSBOQU5EIElSUSBpbiBnbG9iYWwgSVJRIG1hc2sgcmVnaXN0ZXIgKi8KKwljYWZlX3dyaXRlbChjYWZlLCAweDgwMDAwMDA3LCBHTE9CQUxfSVJRX01BU0spOworCWNhZmVfZGV2X2RiZygmY2FmZS0+cGRldi0+ZGV2LCAiQ29udHJvbCAleCwgSVJRIG1hc2sgJXhcbiIsCisJCWNhZmVfcmVhZGwoY2FmZSwgR0xPQkFMX0NUUkwpLCBjYWZlX3JlYWRsKGNhZmUsIEdMT0JBTF9JUlFfTUFTSykpOworI2VuZGlmCisjaWYgMQorCW10ZC0+d3JpdGVzaXplPTIwNDg7CisJbXRkLT5vb2JzaXplID0gMHg0MDsKKwltZW1zZXQoY2FmZS0+ZG1hYnVmLCAweDVhLCAyMTEyKTsKKwljYWZlLT5uYW5kLmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFESUQsIDAsIC0xKTsKKwljYWZlLT5uYW5kLnJlYWRfYnl0ZShtdGQpOworCWNhZmUtPm5hbmQucmVhZF9ieXRlKG10ZCk7CisJY2FmZS0+bmFuZC5yZWFkX2J5dGUobXRkKTsKKwljYWZlLT5uYW5kLnJlYWRfYnl0ZShtdGQpOworCWNhZmUtPm5hbmQucmVhZF9ieXRlKG10ZCk7CisjZW5kaWYKKyNpZiAwCisJY2FmZS0+bmFuZC5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIDAsIDApOworCS8vCW5hbmRfd2FpdF9yZWFkeShtdGQpOworCWNhZmUtPm5hbmQucmVhZF9ieXRlKG10ZCk7CisJY2FmZS0+bmFuZC5yZWFkX2J5dGUobXRkKTsKKwljYWZlLT5uYW5kLnJlYWRfYnl0ZShtdGQpOworCWNhZmUtPm5hbmQucmVhZF9ieXRlKG10ZCk7CisjZW5kaWYKKyNpZiAwCisJd3JpdGVsKDB4ODQ2MDAwNzAsIGNhZmUtPm1taW8pOworCXVkZWxheSgxMCk7CisJY2FmZV9kZXZfZGJnKCZjYWZlLT5wZGV2LT5kZXYsICJTdGF0dXMgJXhcbiIsIGNhZmVfcmVhZGwoY2FmZSwgTkFORF9OT05NRU0pKTsKKyNlbmRpZgorCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCWlmIChuYW5kX3NjYW5faWRlbnQobXRkLCAxKSkgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gb3V0X2lycTsKKwl9CisKKwljYWZlLT5jdGwyID0gMTw8Mjc7IC8qIFJlZWQtU29sb21vbiBFQ0MgKi8KKwlpZiAobXRkLT53cml0ZXNpemUgPT0gMjA0OCkKKwkJY2FmZS0+Y3RsMiB8PSAxPDwyOTsgLyogMktpQiBwYWdlIHNpemUgKi8KKworCS8qIFNldCB1cCBFQ0MgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mIGNoaXAgd2UgZm91bmQgKi8KKwlpZiAobXRkLT53cml0ZXNpemUgPT0gMjA0OCkgeworCQljYWZlLT5uYW5kLmVjYy5sYXlvdXQgPSAmY2FmZV9vb2JpbmZvXzIwNDg7CisJCWNhZmUtPm5hbmQuYmJ0X3RkID0gJmNhZmVfYmJ0X21haW5fZGVzY3JfMjA0ODsKKwkJY2FmZS0+bmFuZC5iYnRfbWQgPSAmY2FmZV9iYnRfbWlycm9yX2Rlc2NyXzIwNDg7CisJfSBlbHNlIGlmIChtdGQtPndyaXRlc2l6ZSA9PSA1MTIpIHsKKwkJY2FmZS0+bmFuZC5lY2MubGF5b3V0ID0gJmNhZmVfb29iaW5mb181MTI7CisJCWNhZmUtPm5hbmQuYmJ0X3RkID0gJmNhZmVfYmJ0X21haW5fZGVzY3JfNTEyOworCQljYWZlLT5uYW5kLmJidF9tZCA9ICZjYWZlX2JidF9taXJyb3JfZGVzY3JfNTEyOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuZXhwZWN0ZWQgTkFORCBmbGFzaCB3cml0ZXNpemUgJWQuIEFib3J0aW5nXG4iLAorCQkgICAgICAgbXRkLT53cml0ZXNpemUpOworCQlnb3RvIG91dF9pcnE7CisJfQorCWNhZmUtPm5hbmQuZWNjLm1vZGUgPSBOQU5EX0VDQ19IV19TWU5EUk9NRTsKKwljYWZlLT5uYW5kLmVjYy5zaXplID0gbXRkLT53cml0ZXNpemU7CisJY2FmZS0+bmFuZC5lY2MuYnl0ZXMgPSAxNDsKKwljYWZlLT5uYW5kLmVjYy5od2N0bCAgPSAodm9pZCAqKWNhZmVfbmFuZF9idWc7CisJY2FmZS0+bmFuZC5lY2MuY2FsY3VsYXRlID0gKHZvaWQgKiljYWZlX25hbmRfYnVnOworCWNhZmUtPm5hbmQuZWNjLmNvcnJlY3QgID0gKHZvaWQgKiljYWZlX25hbmRfYnVnOworCWNhZmUtPm5hbmQud3JpdGVfcGFnZSA9IGNhZmVfbmFuZF93cml0ZV9wYWdlOworCWNhZmUtPm5hbmQuZWNjLndyaXRlX3BhZ2UgPSBjYWZlX25hbmRfd3JpdGVfcGFnZV9sb3dsZXZlbDsKKwljYWZlLT5uYW5kLmVjYy53cml0ZV9vb2IgPSBjYWZlX25hbmRfd3JpdGVfb29iOworCWNhZmUtPm5hbmQuZWNjLnJlYWRfcGFnZSA9IGNhZmVfbmFuZF9yZWFkX3BhZ2U7CisJY2FmZS0+bmFuZC5lY2MucmVhZF9vb2IgPSBjYWZlX25hbmRfcmVhZF9vb2I7CisKKwllcnIgPSBuYW5kX3NjYW5fdGFpbChtdGQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2lycTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBtdGQpOworCWFkZF9tdGRfZGV2aWNlKG10ZCk7CisJZ290byBvdXQ7CisKKyBvdXRfaXJxOgorCS8qIERpc2FibGUgTkFORCBJUlEgaW4gZ2xvYmFsIElSUSBtYXNrIHJlZ2lzdGVyICovCisJY2FmZV93cml0ZWwoY2FmZSwgfjEgJiBjYWZlX3JlYWRsKGNhZmUsIEdMT0JBTF9JUlFfTUFTSyksIEdMT0JBTF9JUlFfTUFTSyk7CisJZnJlZV9pcnEocGRldi0+aXJxLCBtdGQpOworIG91dF9mcmVlX2RtYToKKwlkbWFfZnJlZV9jb2hlcmVudCgmY2FmZS0+cGRldi0+ZGV2LCAyMTEyLCBjYWZlLT5kbWFidWYsIGNhZmUtPmRtYWFkZHIpOworIG91dF9pb3I6CisJcGNpX2lvdW5tYXAocGRldiwgY2FmZS0+bW1pbyk7Cisgb3V0X2ZyZWVfbXRkOgorCWtmcmVlKG10ZCk7Cisgb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjYWZlX25hbmRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBjYWZlX3ByaXYgKmNhZmUgPSBtdGQtPnByaXY7CisKKwlkZWxfbXRkX2RldmljZShtdGQpOworCS8qIERpc2FibGUgTkFORCBJUlEgaW4gZ2xvYmFsIElSUSBtYXNrIHJlZ2lzdGVyICovCisJY2FmZV93cml0ZWwoY2FmZSwgfjEgJiBjYWZlX3JlYWRsKGNhZmUsIEdMT0JBTF9JUlFfTUFTSyksIEdMT0JBTF9JUlFfTUFTSyk7CisJZnJlZV9pcnEocGRldi0+aXJxLCBtdGQpOworCW5hbmRfcmVsZWFzZShtdGQpOworCXBjaV9pb3VubWFwKHBkZXYsIGNhZmUtPm1taW8pOworCWRtYV9mcmVlX2NvaGVyZW50KCZjYWZlLT5wZGV2LT5kZXYsIDIxMTIsIGNhZmUtPmRtYWJ1ZiwgY2FmZS0+ZG1hYWRkcik7CisJa2ZyZWUobXRkKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhZmVfbmFuZF90YmxbXSA9IHsKKwl7IDB4MTFhYiwgMHg0MTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfTUVNT1JZX0ZMQVNIIDw8IDgsIDB4RkZGRjAgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNhZmVfbmFuZF90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2FmZV9uYW5kX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiQ0FGw4kgTkFORCIsCisJLmlkX3RhYmxlID0gY2FmZV9uYW5kX3RibCwKKwkucHJvYmUgPSBjYWZlX25hbmRfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGNhZmVfbmFuZF9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTXgKKwkuc3VzcGVuZCA9IGNhZmVfbmFuZF9zdXNwZW5kLAorCS5yZXN1bWUgPSBjYWZlX25hbmRfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IGNhZmVfbmFuZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNhZmVfbmFuZF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgY2FmZV9uYW5kX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNhZmVfbmFuZF9wY2lfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGNhZmVfbmFuZF9pbml0KTsKK21vZHVsZV9leGl0KGNhZmVfbmFuZF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOQU5EIGZsYXNoIGRyaXZlciBmb3IgT0xQQyBDQUZFIGNoaXAiKTsKKworLyogQ29ycmVjdCBFQ0MgZm9yIDIwNDggYnl0ZXMgb2YgMHhmZjoKKyAgIDQxIGEwIDcxIDY1IDU0IDI3IGYzIDkzIGVjIGE5IGJlIGVkIDBiIGExICovCisKKy8qIGR3bXcyJ3MgQi10ZXN0IGJvYXJkLCBpbiBjYXNlIG9mIGNvbXBsZXRlbHkgc2NyZXdpbmcgaXQ6CitCYWQgZXJhc2VibG9jayAyMzk0IGF0IDB4MTJiNDAwMDAKK0JhZCBlcmFzZWJsb2NrIDI2MjcgYXQgMHgxNDg2MDAwMAorQmFkIGVyYXNlYmxvY2sgMzM0OSBhdCAweDFhMmEwMDAwCisqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9jYWZlX2VjYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9jYWZlX2VjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOWZhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL2NhZmVfZWNjLmMKQEAgLTAsMCArMSwxMzgxIEBACisvKiBFcnJvciBjb3JyZWN0aW9uIGZvciBDQUbDiSBOQU5EIGNvbnRyb2xsZXIKKyAqCisgKiDCqSAyMDA2IE1hcnZlbGwsIEluYy4KKyAqIEF1dGhvcjogVG9tIENoaW91CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZjQwOTZfbXVsKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ2Y2NF9tdWwodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZjQwOTZfaW52KHVuc2lnbmVkIHNob3J0KTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcnJfcG9zKHVuc2lnbmVkIHNob3J0KTsKK3N0YXRpYyB2b2lkIGZpbmRfNGJpdF9lcnJfY29lZnModW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwKKwkJCQl1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LAorCQkJCXVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQgKik7CitzdGF0aWMgdm9pZCB6ZXJvXzR4NV9jb2wzKHVuc2lnbmVkIHNob3J0WzRdWzVdKTsKK3N0YXRpYyB2b2lkIHplcm9fNHg1X2NvbDIodW5zaWduZWQgc2hvcnRbNF1bNV0pOworc3RhdGljIHZvaWQgemVyb180eDVfY29sMSh1bnNpZ25lZCBzaG9ydFs0XVs1XSk7CitzdGF0aWMgdm9pZCBzd2FwXzR4NV9yb3dzKHVuc2lnbmVkIHNob3J0WzRdWzVdLCBpbnQsIGludCwgaW50KTsKK3N0YXRpYyB2b2lkIHN3YXBfMngzX3Jvd3ModW5zaWduZWQgc2hvcnQgbVsyXVszXSk7CitzdGF0aWMgdm9pZCBzb2x2ZV80eDUodW5zaWduZWQgc2hvcnQgbVs0XVs1XSwgdW5zaWduZWQgc2hvcnQgKiwgaW50ICopOworc3RhdGljIHZvaWQgc29ydF9jb2VmcyhpbnQgKiwgdW5zaWduZWQgc2hvcnQgKiwgaW50KTsKK3N0YXRpYyB2b2lkIGZpbmRfNGJpdF9lcnJfcGF0cyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCAqKTsKK3N0YXRpYyB2b2lkIGZpbmRfM2JpdF9lcnJfY29lZnModW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwKKwkJCQl1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LAorCQkJCXVuc2lnbmVkIHNob3J0ICopOworc3RhdGljIHZvaWQgemVyb18zeDRfY29sMih1bnNpZ25lZCBzaG9ydFszXVs0XSk7CitzdGF0aWMgdm9pZCB6ZXJvXzN4NF9jb2wxKHVuc2lnbmVkIHNob3J0WzNdWzRdKTsKK3N0YXRpYyB2b2lkIHN3YXBfM3g0X3Jvd3ModW5zaWduZWQgc2hvcnRbM11bNF0sIGludCwgaW50LCBpbnQpOworc3RhdGljIHZvaWQgc29sdmVfM3g0KHVuc2lnbmVkIHNob3J0WzNdWzRdLCB1bnNpZ25lZCBzaG9ydCAqLCBpbnQgKik7CitzdGF0aWMgdm9pZCBmaW5kXzNiaXRfZXJyX3BhdHModW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0ICopOworCitzdGF0aWMgdm9pZCBmaW5kXzJiaXRfZXJyX3BhdHModW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQgKik7CitzdGF0aWMgdm9pZCBmaW5kXzJ4Ml9zb2xuKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsCisJCQkgIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQsCisJCQkgIHVuc2lnbmVkIHNob3J0ICopOworc3RhdGljIHZvaWQgc29sdmVfMngzKHVuc2lnbmVkIHNob3J0WzJdWzNdLCB1bnNpZ25lZCBzaG9ydCAqKTsKK3N0YXRpYyBpbnQgY2hrX25vX2Vycl9vbmx5KHVuc2lnbmVkIHNob3J0ICosIHVuc2lnbmVkIHNob3J0ICopOworc3RhdGljIGludCBjaGtfMV9lcnJfb25seSh1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBzaG9ydCAqKTsKK3N0YXRpYyBpbnQgY2hrXzJfZXJyX29ubHkodW5zaWduZWQgc2hvcnQgKiwgdW5zaWduZWQgc2hvcnQgKik7CitzdGF0aWMgaW50IGNoa18zX2Vycl9vbmx5KHVuc2lnbmVkIHNob3J0ICosIHVuc2lnbmVkIHNob3J0ICopOworc3RhdGljIGludCBjaGtfNF9lcnJfb25seSh1bnNpZ25lZCBzaG9ydCAqLCB1bnNpZ25lZCBzaG9ydCAqKTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGdmNjRfbXVsKHVuc2lnbmVkIHNob3J0IGEsIHVuc2lnbmVkIHNob3J0IGIpCit7CisJdW5zaWduZWQgc2hvcnQgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNTsKKwl1bnNpZ25lZCBzaG9ydCBjX2JpdDAsIGNfYml0MSwgY19iaXQyLCBjX2JpdDMsIGNfYml0NCwgY19iaXQ1LCBjOworCisJdG1wMSA9ICgoYSkgXiAoYSA+PiA1KSk7CisJdG1wMiA9ICgoYSA+PiA0KSBeIChhID4+IDUpKTsKKwl0bXAzID0gKChhID4+IDMpIF4gKGEgPj4gNCkpOworCXRtcDQgPSAoKGEgPj4gMikgXiAoYSA+PiAzKSk7CisJdG1wNSA9ICgoYSA+PiAxKSBeIChhID4+IDIpKTsKKworCWNfYml0MCA9ICgoYSAmIGIpIF4gKChhID4+IDUpICYgKGIgPj4gMSkpIF4gKChhID4+IDQpICYgKGIgPj4gMikpIF4KKwkJICAoKGEgPj4gMykgJiAoYiA+PiAzKSkgXiAoKGEgPj4gMikgJiAoYiA+PiA0KSkgXiAoKGEgPj4gMSkgJiAoYiA+PiA1KSkpICYgMHgxOworCisJY19iaXQxID0gKCgoYSA+PiAxKSAmIGIpIF4gKHRtcDEgJiAoYiA+PiAxKSkgXiAodG1wMiAmIChiID4+IDIpKSBeCisJCSAgKHRtcDMgJiAoYiA+PiAzKSkgXiAodG1wNCAmIChiID4+IDQpKSBeICh0bXA1ICYgKGIgPj4gNSkpKSAmIDB4MTsKKworCWNfYml0MiA9ICgoKGEgPj4gMikgJiBiKSBeICgoYSA+PiAxKSAmIChiID4+IDEpKSBeICh0bXAxICYgKGIgPj4gMikpIF4KKwkJICAodG1wMiAmIChiID4+IDMpKSBeICh0bXAzICYgKGIgPj4gNCkpIF4gKHRtcDQgJiAoYiA+PiA1KSkpICYgMHgxOworCisJY19iaXQzID0gKCgoYSA+PiAzKSAmIGIpIF4gKChhID4+IDIpICYgKGIgPj4gMSkpIF4gKChhID4+IDEpICYgKGIgPj4gMikpIF4KKwkJICAodG1wMSAmIChiID4+IDMpKSBeICh0bXAyICYgKGIgPj4gNCkpIF4gKHRtcDMgJiAoYiA+PiA1KSkpICYgMHgxOworCisJY19iaXQ0ID0gKCgoYSA+PiA0KSAmIGIpIF4gKChhID4+IDMpICYgKGIgPj4gMSkpIF4gKChhID4+IDIpICYgKGIgPj4gMikpIF4KKwkJICAoKGEgPj4gMSkgJiAoYiA+PiAzKSkgXiAodG1wMSAmIChiID4+IDQpKSBeICh0bXAyICYgKGIgPj4gNSkpKSAmIDB4MTsKKworCWNfYml0NSA9ICgoKGEgPj4gNSkgJiBiKSBeICgoYSA+PiA0KSAmIChiID4+IDEpKSBeICgoYSA+PiAzKSAmIChiID4+IDIpKSBeCisJCSAgKChhID4+IDIpICYgKGIgPj4gMykpIF4gKChhID4+IDEpICYgKGIgPj4gNCkpIF4gKHRtcDEgJiAoYiA+PiA1KSkpICYgMHgxOworCisJYyA9IGNfYml0MCB8IChjX2JpdDEgPDwgMSkgfCAoY19iaXQyIDw8IDIpIHwgKGNfYml0MyA8PCAzKSB8IChjX2JpdDQgPDwgNCkgfCAoY19iaXQ1IDw8IDUpOworCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZjQwOTZfbXVsKHVuc2lnbmVkIHNob3J0IGEsIHVuc2lnbmVkIHNob3J0IGIpCit7CisJdW5zaWduZWQgc2hvcnQgYWgsIGFsLCBiaCwgYmwsIGFseGFoLCBibHhiaCwgYWJsaCwgYWxibCwgYWhiaCwgYWhiaEIsIGM7CisKKwlhaCA9IChhID4+IDYpICYgMHgzZjsKKwlhbCA9IGEgJiAweDNmOworCWJoID0gKGIgPj4gNikgJiAweDNmOworCWJsID0gYiAmIDB4M2Y7CisJYWx4YWggPSBhbCBeIGFoOworCWJseGJoID0gYmwgXiBiaDsKKworCWFibGggPSBnZjY0X211bChhbHhhaCwgYmx4YmgpOworCWFsYmwgPSBnZjY0X211bChhbCwgYmwpOworCWFoYmggPSBnZjY0X211bChhaCwgYmgpOworCisJYWhiaEIgPSAoKGFoYmggJiAweDEpIDw8IDUpIHwKKwkgICAgKChhaGJoICYgMHgyMCkgPj4gMSkgfAorCSAgICAoKGFoYmggJiAweDEwKSA+PiAxKSB8ICgoYWhiaCAmIDB4OCkgPj4gMSkgfCAoKGFoYmggJiAweDQpID4+IDEpIHwgKCgoYWhiaCA+PiAxKSBeIGFoYmgpICYgMHgxKTsKKworCWMgPSAoKGFibGggXiBhbGJsKSA8PCA2KSB8IChhaGJoQiBeIGFsYmwpOworCXJldHVybiBjOworfQorCitzdGF0aWMgdm9pZCBmaW5kXzJiaXRfZXJyX3BhdHModW5zaWduZWQgc2hvcnQgczAsIHVuc2lnbmVkIHNob3J0IHMxLCB1bnNpZ25lZCBzaG9ydCByMCwgdW5zaWduZWQgc2hvcnQgcjEsIHVuc2lnbmVkIHNob3J0ICpwYXRzKQoreworCWZpbmRfMngyX3NvbG4oMHgxLCAweDEsIHIwLCByMSwgczAsIHMxLCBwYXRzKTsKK30KKworc3RhdGljIHZvaWQgZmluZF8zYml0X2Vycl9jb2Vmcyh1bnNpZ25lZCBzaG9ydCBzMCwgdW5zaWduZWQgc2hvcnQgczEsCisJCQkJdW5zaWduZWQgc2hvcnQgczIsIHVuc2lnbmVkIHNob3J0IHMzLCB1bnNpZ25lZCBzaG9ydCBzNCwgdW5zaWduZWQgc2hvcnQgczUsIHVuc2lnbmVkIHNob3J0ICpjb2VmcykKK3sKKwl1bnNpZ25lZCBzaG9ydCBtWzNdWzRdOworCWludCByb3dfb3JkZXJbM107CisKKwlyb3dfb3JkZXJbMF0gPSAwOworCXJvd19vcmRlclsxXSA9IDE7CisJcm93X29yZGVyWzJdID0gMjsKKwltWzBdWzBdID0gczI7CisJbVswXVsxXSA9IHMxOworCW1bMF1bMl0gPSBzMDsKKwltWzBdWzNdID0gczM7CisJbVsxXVswXSA9IHMzOworCW1bMV1bMV0gPSBzMjsKKwltWzFdWzJdID0gczE7CisJbVsxXVszXSA9IHM0OworCW1bMl1bMF0gPSBzNDsKKwltWzJdWzFdID0gczM7CisJbVsyXVsyXSA9IHMyOworCW1bMl1bM10gPSBzNTsKKworCWlmIChtWzBdWzJdICE9IDB4MCkgeworCQl6ZXJvXzN4NF9jb2wyKG0pOworCX0gZWxzZSBpZiAobVsxXVsyXSAhPSAweDApIHsKKwkJc3dhcF8zeDRfcm93cyhtLCAwLCAxLCA0KTsKKwkJemVyb18zeDRfY29sMihtKTsKKwl9IGVsc2UgaWYgKG1bMl1bMl0gIT0gMHgwKSB7CisJCXN3YXBfM3g0X3Jvd3MobSwgMCwgMiwgNCk7CisJCXplcm9fM3g0X2NvbDIobSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogZmluZF8zYml0X2Vycl9jb2VmcywgczAsczEsczIgYWxsIHplcm9zIVxuIik7CisJfQorCisJaWYgKG1bMV1bMV0gIT0gMHgwKSB7CisJCXplcm9fM3g0X2NvbDEobSk7CisJfSBlbHNlIGlmIChtWzJdWzFdICE9IDB4MCkgeworCQlzd2FwXzN4NF9yb3dzKG0sIDEsIDIsIDQpOworCQl6ZXJvXzN4NF9jb2wxKG0pOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IGZpbmRfM2JpdF9lcnJfY29lZnMsIGNhbm5vdCByZXNvbHZlIGNvbCAxIVxuIik7CisJfQorCisJLyogc29sdmUgY29lZnMgKi8KKwlzb2x2ZV8zeDQobSwgY29lZnMsIHJvd19vcmRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHplcm9fM3g0X2NvbDIodW5zaWduZWQgc2hvcnQgbVszXVs0XSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBtaW52MSwgbWludjI7CisKKwltaW52MSA9IGdmNDA5Nl9tdWwobVsxXVsyXSwgZ2Y0MDk2X2ludihtWzBdWzJdKSk7CisJbWludjIgPSBnZjQwOTZfbXVsKG1bMl1bMl0sIGdmNDA5Nl9pbnYobVswXVsyXSkpOworCW1bMV1bMF0gPSBtWzFdWzBdIF4gZ2Y0MDk2X211bChtWzBdWzBdLCBtaW52MSk7CisJbVsxXVsxXSA9IG1bMV1bMV0gXiBnZjQwOTZfbXVsKG1bMF1bMV0sIG1pbnYxKTsKKwltWzFdWzNdID0gbVsxXVszXSBeIGdmNDA5Nl9tdWwobVswXVszXSwgbWludjEpOworCW1bMl1bMF0gPSBtWzJdWzBdIF4gZ2Y0MDk2X211bChtWzBdWzBdLCBtaW52Mik7CisJbVsyXVsxXSA9IG1bMl1bMV0gXiBnZjQwOTZfbXVsKG1bMF1bMV0sIG1pbnYyKTsKKwltWzJdWzNdID0gbVsyXVszXSBeIGdmNDA5Nl9tdWwobVswXVszXSwgbWludjIpOworfQorCitzdGF0aWMgdm9pZCB6ZXJvXzN4NF9jb2wxKHVuc2lnbmVkIHNob3J0IG1bM11bNF0pCit7CisJdW5zaWduZWQgc2hvcnQgbWludjsKKwltaW52ID0gZ2Y0MDk2X211bChtWzJdWzFdLCBnZjQwOTZfaW52KG1bMV1bMV0pKTsKKwltWzJdWzBdID0gbVsyXVswXSBeIGdmNDA5Nl9tdWwobVsxXVswXSwgbWludik7CisJbVsyXVszXSA9IG1bMl1bM10gXiBnZjQwOTZfbXVsKG1bMV1bM10sIG1pbnYpOworfQorCitzdGF0aWMgdm9pZCBzd2FwXzN4NF9yb3dzKHVuc2lnbmVkIHNob3J0IG1bM11bNF0sIGludCBpLCBpbnQgaiwgaW50IGNvbF93aWR0aCkKK3sKKwl1bnNpZ25lZCBzaG9ydCB0bXAwOworCWludCBjbnQ7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBjb2xfd2lkdGg7IGNudCsrKSB7CisJCXRtcDAgPSBtW2ldW2NudF07CisJCW1baV1bY250XSA9IG1bal1bY250XTsKKwkJbVtqXVtjbnRdID0gdG1wMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNvbHZlXzN4NCh1bnNpZ25lZCBzaG9ydCBtWzNdWzRdLCB1bnNpZ25lZCBzaG9ydCAqY29lZnMsIGludCAqcm93X29yZGVyKQoreworCXVuc2lnbmVkIHNob3J0IHRtcFszXTsKKwl0bXBbMF0gPSBnZjQwOTZfbXVsKG1bMl1bM10sIGdmNDA5Nl9pbnYobVsyXVswXSkpOworCXRtcFsxXSA9IGdmNDA5Nl9tdWwoKGdmNDA5Nl9tdWwodG1wWzBdLCBtWzFdWzBdKSBeIG1bMV1bM10pLCBnZjQwOTZfaW52KG1bMV1bMV0pKTsKKwl0bXBbMl0gPSBnZjQwOTZfbXVsKChnZjQwOTZfbXVsKHRtcFswXSwgbVswXVswXSkgXiBnZjQwOTZfbXVsKHRtcFsxXSwgbVswXVsxXSkgXiBtWzBdWzNdKSwgZ2Y0MDk2X2ludihtWzBdWzJdKSk7CisJc29ydF9jb2Vmcyhyb3dfb3JkZXIsIHRtcCwgMyk7CisJY29lZnNbMF0gPSB0bXBbMF07CisJY29lZnNbMV0gPSB0bXBbMV07CisJY29lZnNbMl0gPSB0bXBbMl07Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfM2JpdF9lcnJfcGF0cyh1bnNpZ25lZCBzaG9ydCBzMCwgdW5zaWduZWQgc2hvcnQgczEsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgczIsIHVuc2lnbmVkIHNob3J0IHIwLAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IHIxLCB1bnNpZ25lZCBzaG9ydCByMiwKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCAqcGF0cykKK3sKKwlmaW5kXzJ4Ml9zb2xuKHIwIF4gcjIsIHIxIF4gcjIsCisJCSAgICAgIGdmNDA5Nl9tdWwocjAsIHIwIF4gcjIpLCBnZjQwOTZfbXVsKHIxLCByMSBeIHIyKSwKKwkJICAgICAgZ2Y0MDk2X211bChzMCwgcjIpIF4gczEsIGdmNDA5Nl9tdWwoczEsIHIyKSBeIHMyLCBwYXRzKTsKKwlwYXRzWzJdID0gczAgXiBwYXRzWzBdIF4gcGF0c1sxXTsKK30KKworc3RhdGljIHZvaWQgZmluZF80Yml0X2Vycl9jb2Vmcyh1bnNpZ25lZCBzaG9ydCBzMCwgdW5zaWduZWQgc2hvcnQgczEsCisJCQkJdW5zaWduZWQgc2hvcnQgczIsIHVuc2lnbmVkIHNob3J0IHMzLAorCQkJCXVuc2lnbmVkIHNob3J0IHM0LCB1bnNpZ25lZCBzaG9ydCBzNSwKKwkJCQl1bnNpZ25lZCBzaG9ydCBzNiwgdW5zaWduZWQgc2hvcnQgczcsCisJCQkJdW5zaWduZWQgc2hvcnQgKmNvZWZzKQoreworCXVuc2lnbmVkIHNob3J0IG1bNF1bNV07CisJaW50IHJvd19vcmRlcls0XTsKKworCXJvd19vcmRlclswXSA9IDA7CisJcm93X29yZGVyWzFdID0gMTsKKwlyb3dfb3JkZXJbMl0gPSAyOworCXJvd19vcmRlclszXSA9IDM7CisKKwltWzBdWzBdID0gczM7CisJbVswXVsxXSA9IHMyOworCW1bMF1bMl0gPSBzMTsKKwltWzBdWzNdID0gczA7CisJbVswXVs0XSA9IHM0OworCW1bMV1bMF0gPSBzNDsKKwltWzFdWzFdID0gczM7CisJbVsxXVsyXSA9IHMyOworCW1bMV1bM10gPSBzMTsKKwltWzFdWzRdID0gczU7CisJbVsyXVswXSA9IHM1OworCW1bMl1bMV0gPSBzNDsKKwltWzJdWzJdID0gczM7CisJbVsyXVszXSA9IHMyOworCW1bMl1bNF0gPSBzNjsKKwltWzNdWzBdID0gczY7CisJbVszXVsxXSA9IHM1OworCW1bM11bMl0gPSBzNDsKKwltWzNdWzNdID0gczM7CisJbVszXVs0XSA9IHM3OworCisJaWYgKG1bMF1bM10gIT0gMHgwKSB7CisJCXplcm9fNHg1X2NvbDMobSk7CisJfSBlbHNlIGlmIChtWzFdWzNdICE9IDB4MCkgeworCQlzd2FwXzR4NV9yb3dzKG0sIDAsIDEsIDUpOworCQl6ZXJvXzR4NV9jb2wzKG0pOworCX0gZWxzZSBpZiAobVsyXVszXSAhPSAweDApIHsKKwkJc3dhcF80eDVfcm93cyhtLCAwLCAyLCA1KTsKKwkJemVyb180eDVfY29sMyhtKTsKKwl9IGVsc2UgaWYgKG1bM11bM10gIT0gMHgwKSB7CisJCXN3YXBfNHg1X3Jvd3MobSwgMCwgMywgNSk7CisJCXplcm9fNHg1X2NvbDMobSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogZmluZF80Yml0X2Vycl9jb2VmcywgczAsczEsczIsczMgYWxsIHplcm9zIVxuIik7CisJfQorCisJaWYgKG1bMV1bMl0gIT0gMHgwKSB7CisJCXplcm9fNHg1X2NvbDIobSk7CisJfSBlbHNlIGlmIChtWzJdWzJdICE9IDB4MCkgeworCQlzd2FwXzR4NV9yb3dzKG0sIDEsIDIsIDUpOworCQl6ZXJvXzR4NV9jb2wyKG0pOworCX0gZWxzZSBpZiAobVszXVsyXSAhPSAweDApIHsKKwkJc3dhcF80eDVfcm93cyhtLCAxLCAzLCA1KTsKKwkJemVyb180eDVfY29sMihtKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBmaW5kXzRiaXRfZXJyX2NvZWZzLCBjYW5ub3QgcmVzb2x2ZSBjb2wgMiFcbiIpOworCX0KKworCWlmIChtWzJdWzFdICE9IDB4MCkgeworCQl6ZXJvXzR4NV9jb2wxKG0pOworCX0gZWxzZSBpZiAobVszXVsxXSAhPSAweDApIHsKKwkJc3dhcF80eDVfcm93cyhtLCAyLCAzLCA1KTsKKwkJemVyb180eDVfY29sMShtKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBmaW5kXzRiaXRfZXJyX2NvZWZzLCBjYW5ub3QgcmVzb2x2ZSBjb2wgMSFcbiIpOworCX0KKworCXNvbHZlXzR4NShtLCBjb2Vmcywgcm93X29yZGVyKTsKK30KKworc3RhdGljIHZvaWQgemVyb180eDVfY29sMyh1bnNpZ25lZCBzaG9ydCBtWzRdWzVdKQoreworCXVuc2lnbmVkIHNob3J0IG1pbnYxLCBtaW52MiwgbWludjM7CisKKwltaW52MSA9IGdmNDA5Nl9tdWwobVsxXVszXSwgZ2Y0MDk2X2ludihtWzBdWzNdKSk7CisJbWludjIgPSBnZjQwOTZfbXVsKG1bMl1bM10sIGdmNDA5Nl9pbnYobVswXVszXSkpOworCW1pbnYzID0gZ2Y0MDk2X211bChtWzNdWzNdLCBnZjQwOTZfaW52KG1bMF1bM10pKTsKKworCW1bMV1bMF0gPSBtWzFdWzBdIF4gZ2Y0MDk2X211bChtWzBdWzBdLCBtaW52MSk7CisJbVsxXVsxXSA9IG1bMV1bMV0gXiBnZjQwOTZfbXVsKG1bMF1bMV0sIG1pbnYxKTsKKwltWzFdWzJdID0gbVsxXVsyXSBeIGdmNDA5Nl9tdWwobVswXVsyXSwgbWludjEpOworCW1bMV1bNF0gPSBtWzFdWzRdIF4gZ2Y0MDk2X211bChtWzBdWzRdLCBtaW52MSk7CisJbVsyXVswXSA9IG1bMl1bMF0gXiBnZjQwOTZfbXVsKG1bMF1bMF0sIG1pbnYyKTsKKwltWzJdWzFdID0gbVsyXVsxXSBeIGdmNDA5Nl9tdWwobVswXVsxXSwgbWludjIpOworCW1bMl1bMl0gPSBtWzJdWzJdIF4gZ2Y0MDk2X211bChtWzBdWzJdLCBtaW52Mik7CisJbVsyXVs0XSA9IG1bMl1bNF0gXiBnZjQwOTZfbXVsKG1bMF1bNF0sIG1pbnYyKTsKKwltWzNdWzBdID0gbVszXVswXSBeIGdmNDA5Nl9tdWwobVswXVswXSwgbWludjMpOworCW1bM11bMV0gPSBtWzNdWzFdIF4gZ2Y0MDk2X211bChtWzBdWzFdLCBtaW52Myk7CisJbVszXVsyXSA9IG1bM11bMl0gXiBnZjQwOTZfbXVsKG1bMF1bMl0sIG1pbnYzKTsKKwltWzNdWzRdID0gbVszXVs0XSBeIGdmNDA5Nl9tdWwobVswXVs0XSwgbWludjMpOworfQorCitzdGF0aWMgdm9pZCB6ZXJvXzR4NV9jb2wyKHVuc2lnbmVkIHNob3J0IG1bNF1bNV0pCit7CisJdW5zaWduZWQgc2hvcnQgbWludjIsIG1pbnYzOworCisJbWludjIgPSBnZjQwOTZfbXVsKG1bMl1bMl0sIGdmNDA5Nl9pbnYobVsxXVsyXSkpOworCW1pbnYzID0gZ2Y0MDk2X211bChtWzNdWzJdLCBnZjQwOTZfaW52KG1bMV1bMl0pKTsKKworCW1bMl1bMF0gPSBtWzJdWzBdIF4gZ2Y0MDk2X211bChtWzFdWzBdLCBtaW52Mik7CisJbVsyXVsxXSA9IG1bMl1bMV0gXiBnZjQwOTZfbXVsKG1bMV1bMV0sIG1pbnYyKTsKKwltWzJdWzRdID0gbVsyXVs0XSBeIGdmNDA5Nl9tdWwobVsxXVs0XSwgbWludjIpOworCW1bM11bMF0gPSBtWzNdWzBdIF4gZ2Y0MDk2X211bChtWzFdWzBdLCBtaW52Myk7CisJbVszXVsxXSA9IG1bM11bMV0gXiBnZjQwOTZfbXVsKG1bMV1bMV0sIG1pbnYzKTsKKwltWzNdWzRdID0gbVszXVs0XSBeIGdmNDA5Nl9tdWwobVsxXVs0XSwgbWludjMpOworfQorCitzdGF0aWMgdm9pZCB6ZXJvXzR4NV9jb2wxKHVuc2lnbmVkIHNob3J0IG1bNF1bNV0pCit7CisJdW5zaWduZWQgc2hvcnQgbWludjsKKworCW1pbnYgPSBnZjQwOTZfbXVsKG1bM11bMV0sIGdmNDA5Nl9pbnYobVsyXVsxXSkpOworCisJbVszXVswXSA9IG1bM11bMF0gXiBnZjQwOTZfbXVsKG1bMl1bMF0sIG1pbnYpOworCW1bM11bNF0gPSBtWzNdWzRdIF4gZ2Y0MDk2X211bChtWzJdWzRdLCBtaW52KTsKK30KKworc3RhdGljIHZvaWQgc3dhcF80eDVfcm93cyh1bnNpZ25lZCBzaG9ydCBtWzRdWzVdLCBpbnQgaSwgaW50IGosIGludCBjb2xfd2lkdGgpCit7CisJdW5zaWduZWQgc2hvcnQgdG1wMDsKKwlpbnQgY250OworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBjb2xfd2lkdGg7IGNudCsrKSB7CisJCXRtcDAgPSBtW2ldW2NudF07CisJCW1baV1bY250XSA9IG1bal1bY250XTsKKwkJbVtqXVtjbnRdID0gdG1wMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNvbHZlXzR4NSh1bnNpZ25lZCBzaG9ydCBtWzRdWzVdLCB1bnNpZ25lZCBzaG9ydCAqY29lZnMsIGludCAqcm93X29yZGVyKQoreworCXVuc2lnbmVkIHNob3J0IHRtcFs0XTsKKworCXRtcFswXSA9IGdmNDA5Nl9tdWwobVszXVs0XSwgZ2Y0MDk2X2ludihtWzNdWzBdKSk7CisJdG1wWzFdID0gZ2Y0MDk2X211bCgoZ2Y0MDk2X211bCh0bXBbMF0sIG1bMl1bMF0pIF4gbVsyXVs0XSksIGdmNDA5Nl9pbnYobVsyXVsxXSkpOworCXRtcFsyXSA9IGdmNDA5Nl9tdWwoKGdmNDA5Nl9tdWwodG1wWzBdLCBtWzFdWzBdKSBeIGdmNDA5Nl9tdWwodG1wWzFdLCBtWzFdWzFdKSBeIG1bMV1bNF0pLCBnZjQwOTZfaW52KG1bMV1bMl0pKTsKKwl0bXBbM10gPSBnZjQwOTZfbXVsKChnZjQwOTZfbXVsKHRtcFswXSwgbVswXVswXSkgXgorCQkJZ2Y0MDk2X211bCh0bXBbMV0sIG1bMF1bMV0pIF4gZ2Y0MDk2X211bCh0bXBbMl0sIG1bMF1bMl0pIF4gbVswXVs0XSksIGdmNDA5Nl9pbnYobVswXVszXSkpOworCXNvcnRfY29lZnMocm93X29yZGVyLCB0bXAsIDQpOworCWNvZWZzWzBdID0gdG1wWzBdOworCWNvZWZzWzFdID0gdG1wWzFdOworCWNvZWZzWzJdID0gdG1wWzJdOworCWNvZWZzWzNdID0gdG1wWzNdOworfQorCitzdGF0aWMgdm9pZCBzb3J0X2NvZWZzKGludCAqb3JkZXIsIHVuc2lnbmVkIHNob3J0ICpzb2xuLCBpbnQgbGVuKQoreworCWludCBjbnQsIHN0YXJ0X2NudCwgbGVhc3Rfb3JkLCBsZWFzdF9jbnQ7CisJdW5zaWduZWQgc2hvcnQgdG1wMDsKKwlmb3IgKHN0YXJ0X2NudCA9IDA7IHN0YXJ0X2NudCA8IGxlbjsgc3RhcnRfY250KyspIHsKKwkJZm9yIChjbnQgPSBzdGFydF9jbnQ7IGNudCA8IGxlbjsgY250KyspIHsKKwkJCWlmIChjbnQgPT0gc3RhcnRfY250KSB7CisJCQkJbGVhc3Rfb3JkID0gb3JkZXJbY250XTsKKwkJCQlsZWFzdF9jbnQgPSBzdGFydF9jbnQ7CisJCQl9IGVsc2UgeworCQkJCWlmIChsZWFzdF9vcmQgPiBvcmRlcltjbnRdKSB7CisJCQkJCWxlYXN0X29yZCA9IG9yZGVyW2NudF07CisJCQkJCWxlYXN0X2NudCA9IGNudDsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGxlYXN0X2NudCAhPSBzdGFydF9jbnQpIHsKKwkJCXRtcDAgPSBvcmRlcltsZWFzdF9jbnRdOworCQkJb3JkZXJbbGVhc3RfY250XSA9IG9yZGVyW3N0YXJ0X2NudF07CisJCQlvcmRlcltzdGFydF9jbnRdID0gdG1wMDsKKwkJCXRtcDAgPSBzb2xuW2xlYXN0X2NudF07CisJCQlzb2xuW2xlYXN0X2NudF0gPSBzb2xuW3N0YXJ0X2NudF07CisJCQlzb2xuW3N0YXJ0X2NudF0gPSB0bXAwOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5kXzRiaXRfZXJyX3BhdHModW5zaWduZWQgc2hvcnQgczAsIHVuc2lnbmVkIHNob3J0IHMxLAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IHMyLCB1bnNpZ25lZCBzaG9ydCBzMywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCB6MSwgdW5zaWduZWQgc2hvcnQgejIsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgejMsIHVuc2lnbmVkIHNob3J0IHo0LAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0ICpwYXRzKQoreworCXVuc2lnbmVkIHNob3J0IHo0X3oxLCB6M3o0X3ozejMsIHo0X3oyLCBzMHo0X3MxLCB6MXo0X3oxejEsCisJCXo0X3ozLCB6Mno0X3oyejIsIHMxejRfczIsIHozejN6NF96M3ozejMsIHoxejF6NF96MXoxejEsIHoyejJ6NF96MnoyejIsIHMyejRfczM7CisJdW5zaWduZWQgc2hvcnQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMzsKKworCXo0X3oxID0gejQgXiB6MTsKKwl6M3o0X3ozejMgPSBnZjQwOTZfbXVsKHozLCB6NCkgXiBnZjQwOTZfbXVsKHozLCB6Myk7CisJejRfejIgPSB6NCBeIHoyOworCXMwejRfczEgPSBnZjQwOTZfbXVsKHMwLCB6NCkgXiBzMTsKKwl6MXo0X3oxejEgPSBnZjQwOTZfbXVsKHoxLCB6NCkgXiBnZjQwOTZfbXVsKHoxLCB6MSk7CisJejRfejMgPSB6NCBeIHozOworCXoyejRfejJ6MiA9IGdmNDA5Nl9tdWwoejIsIHo0KSBeIGdmNDA5Nl9tdWwoejIsIHoyKTsKKwlzMXo0X3MyID0gZ2Y0MDk2X211bChzMSwgejQpIF4gczI7CisJejN6M3o0X3ozejN6MyA9IGdmNDA5Nl9tdWwoZ2Y0MDk2X211bCh6MywgejMpLCB6NCkgXiBnZjQwOTZfbXVsKGdmNDA5Nl9tdWwoejMsIHozKSwgejMpOworCXoxejF6NF96MXoxejEgPSBnZjQwOTZfbXVsKGdmNDA5Nl9tdWwoejEsIHoxKSwgejQpIF4gZ2Y0MDk2X211bChnZjQwOTZfbXVsKHoxLCB6MSksIHoxKTsKKwl6MnoyejRfejJ6MnoyID0gZ2Y0MDk2X211bChnZjQwOTZfbXVsKHoyLCB6MiksIHo0KSBeIGdmNDA5Nl9tdWwoZ2Y0MDk2X211bCh6MiwgejIpLCB6Mik7CisJczJ6NF9zMyA9IGdmNDA5Nl9tdWwoczIsIHo0KSBeIHMzOworCisJLy9maW5kIGVyciBwYXQgMCwxCisJZmluZF8yeDJfc29sbihnZjQwOTZfbXVsKHo0X3oxLCB6M3o0X3ozejMpIF4KKwkJICAgICAgZ2Y0MDk2X211bCh6MXo0X3oxejEsIHo0X3ozKSwgZ2Y0MDk2X211bCh6NF96MiwKKwkJCQkJCQkgICAgICAgejN6NF96M3ozKSBeCisJCSAgICAgIGdmNDA5Nl9tdWwoejJ6NF96MnoyLCB6NF96MyksIGdmNDA5Nl9tdWwoejF6NF96MXoxLAorCQkJCQkJCSAgICAgICB6M3ozejRfejN6M3ozKSBeCisJCSAgICAgIGdmNDA5Nl9tdWwoejF6MXo0X3oxejF6MSwgejN6NF96M3ozKSwKKwkJICAgICAgZ2Y0MDk2X211bCh6Mno0X3oyejIsCisJCQkJIHozejN6NF96M3ozejMpIF4gZ2Y0MDk2X211bCh6MnoyejRfejJ6MnoyLAorCQkJCQkJCSAgICAgejN6NF96M3ozKSwKKwkJICAgICAgZ2Y0MDk2X211bChzMHo0X3MxLCB6M3o0X3ozejMpIF4gZ2Y0MDk2X211bChzMXo0X3MyLAorCQkJCQkJCQkgIHo0X3ozKSwKKwkJICAgICAgZ2Y0MDk2X211bChzMXo0X3MyLCB6M3ozejRfejN6M3ozKSBeIGdmNDA5Nl9tdWwoczJ6NF9zMywgejN6NF96M3ozKSwgcGF0cyk7CisJdG1wMCA9IHBhdHNbMF07CisJdG1wMSA9IHBhdHNbMV07CisJdG1wMiA9IHBhdHNbMF0gXiBwYXRzWzFdIF4gczA7CisJdG1wMyA9IGdmNDA5Nl9tdWwocGF0c1swXSwgejEpIF4gZ2Y0MDk2X211bChwYXRzWzFdLCB6MikgXiBzMTsKKworCS8vZmluZCBlcnIgcGF0IDIsMworCWZpbmRfMngyX3NvbG4oMHgxLCAweDEsIHozLCB6NCwgdG1wMiwgdG1wMywgcGF0cyk7CisJcGF0c1syXSA9IHBhdHNbMF07CisJcGF0c1szXSA9IHBhdHNbMV07CisJcGF0c1swXSA9IHRtcDA7CisJcGF0c1sxXSA9IHRtcDE7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfMngyX3NvbG4odW5zaWduZWQgc2hvcnQgYzAwLCB1bnNpZ25lZCBzaG9ydCBjMDEsCisJCQkgIHVuc2lnbmVkIHNob3J0IGMxMCwgdW5zaWduZWQgc2hvcnQgYzExLAorCQkJICB1bnNpZ25lZCBzaG9ydCBsdmFsMCwgdW5zaWduZWQgc2hvcnQgbHZhbDEsCisJCQkgIHVuc2lnbmVkIHNob3J0ICpzb2xuKQoreworCXVuc2lnbmVkIHNob3J0IG1bMl1bM107CisJbVswXVswXSA9IGMwMDsKKwltWzBdWzFdID0gYzAxOworCW1bMF1bMl0gPSBsdmFsMDsKKwltWzFdWzBdID0gYzEwOworCW1bMV1bMV0gPSBjMTE7CisJbVsxXVsyXSA9IGx2YWwxOworCisJaWYgKG1bMF1bMV0gIT0gMHgwKSB7CisJCS8qICovCisJfSBlbHNlIGlmIChtWzFdWzFdICE9IDB4MCkgeworCQlzd2FwXzJ4M19yb3dzKG0pOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiV2FybmluZzogZmluZF8yYml0X2Vycl9jb2VmcywgczAsczEgYWxsIHplcm9zIVxuIik7CisJfQorCisJc29sdmVfMngzKG0sIHNvbG4pOworfQorCitzdGF0aWMgdm9pZCBzd2FwXzJ4M19yb3dzKHVuc2lnbmVkIHNob3J0IG1bMl1bM10pCit7CisJdW5zaWduZWQgc2hvcnQgdG1wMDsKKwlpbnQgY250OworCisJZm9yIChjbnQgPSAwOyBjbnQgPCAzOyBjbnQrKykgeworCQl0bXAwID0gbVswXVtjbnRdOworCQltWzBdW2NudF0gPSBtWzFdW2NudF07CisJCW1bMV1bY250XSA9IHRtcDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBzb2x2ZV8yeDModW5zaWduZWQgc2hvcnQgbVsyXVszXSwgdW5zaWduZWQgc2hvcnQgKmNvZWZzKQoreworCXVuc2lnbmVkIHNob3J0IG1pbnY7CisKKwltaW52ID0gZ2Y0MDk2X211bChtWzFdWzFdLCBnZjQwOTZfaW52KG1bMF1bMV0pKTsKKwltWzFdWzBdID0gbVsxXVswXSBeIGdmNDA5Nl9tdWwobVswXVswXSwgbWludik7CisJbVsxXVsyXSA9IG1bMV1bMl0gXiBnZjQwOTZfbXVsKG1bMF1bMl0sIG1pbnYpOworCWNvZWZzWzBdID0gZ2Y0MDk2X211bChtWzFdWzJdLCBnZjQwOTZfaW52KG1bMV1bMF0pKTsKKwljb2Vmc1sxXSA9IGdmNDA5Nl9tdWwoKGdmNDA5Nl9tdWwoY29lZnNbMF0sIG1bMF1bMF0pIF4gbVswXVsyXSksIGdmNDA5Nl9pbnYobVswXVsxXSkpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBnZjY0X2ludls2NF0gPSB7CisJIDAsICAxLCAzMywgNjIsIDQ5LCA0MywgMzEsIDQ0LCA1NywgMzcsIDUyLCAyOCwgNDYsIDQwLCAyMiwgMjUsCisJNjEsIDU0LCA1MSwgMzksIDI2LCAzNSwgMTQsIDI0LCAyMywgMTUsIDIwLCAzNCwgMTEsIDUzLCA0NSwgIDYsCisJNjMsICAyLCAyNywgMjEsIDU2LCAgOSwgNTAsIDE5LCAxMywgNDcsIDQ4LCAgNSwgIDcsIDMwLCAxMiwgNDEsCisJNDIsICA0LCAzOCwgMTgsIDEwLCAyOSwgMTcsIDYwLCAzNiwgIDgsIDU5LCA1OCwgNTUsIDE2LCAgMywgMzIKK307CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBnZjQwOTZfaW52KHVuc2lnbmVkIHNob3J0IGRpbikKK3sKKwl1bnNpZ25lZCBzaG9ydCBhbGFoeGFsLCBhaDJCLCBkZW5vLCBpbnYsIGJsLCBiaDsKKwl1bnNpZ25lZCBzaG9ydCBhaCwgYWwsIGFoeGFsOworCXVuc2lnbmVkIHNob3J0IGRvdXQ7CisKKwlhaCA9IChkaW4gPj4gNikgJiAweDNmOworCWFsID0gZGluICYgMHgzZjsKKwlhaHhhbCA9IGFoIF4gYWw7CisJYWgyQiA9ICgoKGFoIF4gKGFoID4+IDMpKSAmIDB4MSkgPDwgNSkgfAorCQkoKGFoID4+IDEpICYgMHgxMCkgfAorCQkoKCgoYWggPj4gNSkgXiAoYWggPj4gMikpICYgMHgxKSA8PCAzKSB8CisJCSgoYWggPj4gMikgJiAweDQpIHwgKCgoKGFoID4+IDQpIF4gKGFoID4+IDEpKSAmIDB4MSkgPDwgMSkgfCAoYWggJiAweDEpOworCWFsYWh4YWwgPSBnZjY0X211bChhaHhhbCwgYWwpOworCWRlbm8gPSBhbGFoeGFsIF4gYWgyQjsKKwlpbnYgPSBnZjY0X2ludltkZW5vXTsKKwlibCA9IGdmNjRfbXVsKGludiwgYWh4YWwpOworCWJoID0gZ2Y2NF9tdWwoaW52LCBhaCk7CisJZG91dCA9ICgoYmggJiAweDNmKSA8PCA2KSB8IChibCAmIDB4M2YpOworCXJldHVybiAoKChiaCAmIDB4M2YpIDw8IDYpIHwgKGJsICYgMHgzZikpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXJyX3Bvc19sdXRbNDA5Nl0gPSB7CisJMHhmZmYsIDB4MDAwLCAweDQ1MSwgMHhmZmYsIDB4ZmZmLCAweDNjZiwgMHhmZmYsIDB4MDQxLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI4YSwgMHhmZmYsIDB4NDkyLCAweGZmZiwKKwkweDE0NSwgMHhmZmYsIDB4ZmZmLCAweDUxNCwgMHhmZmYsIDB4MDgyLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MjQ5LCAweDM4ZSwgMHg0MTAsIDB4ZmZmLCAweDEwNCwgMHgyMDgsIDB4MWM3LAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJjYiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDBjMywgMHgzNGQsIDB4NGQzLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxODYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDMwYywgMHg1NTUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE2NiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgzODUsIDB4MTRlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGUxLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDUzOCwgMHhmZmYsIDB4MTZkLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4NDViLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyOWMsIDB4MmNjLCAweDMwYiwgMHgyYjMsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwYjMsIDB4ZmZmLCAweDJmNywKKwkweGZmZiwgMHgzMmIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDBhNywgMHhmZmYsCisJMHhmZmYsIDB4MmRhLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDA3ZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTFjLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMmYsIDB4ZmZmLCAweDFmNCwgMHhmZmYsIDB4ZmZmLAorCTB4MmIwLCAweDUwNCwgMHhmZmYsIDB4MTE0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDIxZCwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwMGQsIDB4M2M0LCAweDM0MCwgMHgxMGYsCisJMHhmZmYsIDB4ZmZmLCAweDI2NiwgMHgwMmUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGY4LAorCTB4MzM3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA3YiwgMHgxNjgsIDB4ZmZmLCAweGZmZiwgMHgwZmUsCisJMHhmZmYsIDB4ZmZmLCAweDUxYSwgMHhmZmYsIDB4NDU4LCAweGZmZiwgMHgzNmQsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDczLCAweDM3ZCwgMHg0MTUsIDB4NTUwLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4MjNiLCAweDRiNCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxYTEsCisJMHhmZmYsIDB4ZmZmLCAweDNhYSwgMHhmZmYsIDB4MTE3LCAweDA0ZCwgMHgzNDEsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTE4LCAweDAzZSwgMHgwZjIsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM2MywgMHhmZmYsIDB4MGI5LCAweGZmZiwgMHhmZmYsCisJMHgyNDEsIDB4ZmZmLCAweGZmZiwgMHgwNDksIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4MTVmLCAweDUyZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyOWUsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4NGNmLCAweDBmYywgMHhmZmYsIDB4MzZmLCAweDNkMywgMHhmZmYsCisJMHgyMjgsIDB4ZmZmLCAweGZmZiwgMHg0NWUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4MjM4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0N2YsIDB4ZmZmLCAweGZmZiwKKwkweDQzYSwgMHgyNjUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzZTgsCisJMHhmZmYsIDB4ZmZmLCAweDAxYSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjFlLAorCTB4MWZjLCAweDQwYiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyZDAsIDB4MTU5LCAweGZmZiwKKwkweGZmZiwgMHgzMTMsIDB4ZmZmLCAweGZmZiwgMHgwNWMsIDB4NGNjLCAweGZmZiwgMHhmZmYsCisJMHgwZjYsIDB4M2Q1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDU0ZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDE3MiwgMHgxZTQsIDB4MDdjLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTNjLCAweDFhZCwgMHg1MzUsCisJMHgxOWIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgwOTIsIDB4ZmZmLCAweDJiZSwgMHhmZmYsIDB4ZmZmLCAweDQ4MiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MGU2LCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NzYsIDB4ZmZmLCAweDUxZCwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4MzQyLCAweDJiNSwgMHgyMmUsIDB4MDlhLCAweGZmZiwgMHgwOGQsCisJMHg0NGYsIDB4M2VkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzZDEsIDB4ZmZmLAorCTB4ZmZmLCAweDU0MywgMHhmZmYsIDB4NDhmLCAweGZmZiwgMHgzZDIsIDB4ZmZmLCAweDBkNSwKKwkweDExMywgMHgwZWMsIDB4NDI3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRjNCwgMHhmZmYsCisJMHhmZmYsIDB4NTBhLCAweGZmZiwgMHgxNDQsIDB4ZmZmLCAweDEwNSwgMHgzOWYsIDB4Mjk0LAorCTB4MTY0LCAweGZmZiwgMHgzMWEsIDB4ZmZmLCAweGZmZiwgMHg0OWEsIDB4ZmZmLCAweDEzMCwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgxYmUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHg0OWUsIDB4MzcxLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwZTgsIDB4NDljLCAweDBmNCwgMHhmZmYsCisJMHgzMzgsIDB4MWE3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDM2YywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MWFlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDMxYiwgMHhmZmYsIDB4ZmZmLCAweDJkZCwgMHg1MjIsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyZjQsCisJMHgzYzYsIDB4MzBkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzNGMsIDB4MThmLAorCTB4MzBhLCAweGZmZiwgMHgwMWYsIDB4MDc5LCAweGZmZiwgMHhmZmYsIDB4NTRkLCAweDQ2YiwKKwkweDI4YywgMHgzN2YsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM1NSwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE0ZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzU5LCAweDNmZSwgMHgzYzUsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4NDIzLCAweGZmZiwgMHhmZmYsIDB4MzRhLCAweDIyYywgMHhmZmYsCisJMHgyNWEsIDB4ZmZmLCAweGZmZiwgMHg0YWQsIDB4ZmZmLCAweDI4ZCwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTQ3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDJlMiwgMHhmZmYsIDB4ZmZmLCAweDFkNSwgMHhmZmYsIDB4MmE4LCAweGZmZiwgMHhmZmYsCisJMHgwM2YsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNlYiwgMHgwZmEsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTViLCAweGZmZiwKKwkweDA4ZSwgMHhmZmYsIDB4M2FlLCAweGZmZiwgMHgzYTQsIDB4ZmZmLCAweDI4MiwgMHgxNTgsCisJMHhmZmYsIDB4MzgyLCAweGZmZiwgMHhmZmYsIDB4NDk5LCAweGZmZiwgMHhmZmYsIDB4MDhhLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDU2LCAweDNiZSwgMHhmZmYsIDB4MWUyLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1NTksIDB4ZmZmLCAweDFhMCwgMHhmZmYsCisJMHhmZmYsIDB4MGI0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJkZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDA3ZiwgMHg0ZjUsIDB4ZmZmLCAweGZmZiwgMHgyN2MsIDB4MTMzLCAweDAxNywKKwkweGZmZiwgMHgzZmQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDRkLCAweDRjZCwgMHgxN2EsCisJMHgwZDcsIDB4NTM3LCAweGZmZiwgMHhmZmYsIDB4MzUzLCAweGZmZiwgMHhmZmYsIDB4MzUxLAorCTB4MzY2LCAweGZmZiwgMHg0NGEsIDB4ZmZmLCAweDFhNiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDI5MSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxZTMsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4Mzg5LCAweGZmZiwgMHgwN2EsIDB4ZmZmLAorCTB4MWI2LCAweDJlZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjRlLCAweDA3NCwKKwkweGZmZiwgMHhmZmYsIDB4M2RjLCAweGZmZiwgMHg0ZTMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4NGViLCAweGZmZiwgMHhmZmYsIDB4M2I4LCAweDRkZSwgMHhmZmYsIDB4MTljLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI2MiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDc2LCAweDRlOCwgMHgzZGEsCisJMHhmZmYsIDB4NTMxLCAweGZmZiwgMHhmZmYsIDB4MTRhLCAweGZmZiwgMHgwYTIsIDB4NDMzLAorCTB4M2RmLCAweDFlOSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2U3LCAweDI4NSwKKwkweDJkOCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzNDksIDB4MThkLCAweDA5OCwgMHhmZmYsCisJMHgwZGYsIDB4NGJmLCAweGZmZiwgMHhmZmYsIDB4MGIyLCAweGZmZiwgMHgzNDYsIDB4MjRkLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjRmLCAweDRmYSwgMHgyZjksIDB4ZmZmLCAweGZmZiwKKwkweDNjOSwgMHhmZmYsIDB4MmI0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MDU2LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHgxNzksIDB4ZmZmLCAweDBlOSwgMHgzZjAsIDB4MzNkLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxZmQsIDB4ZmZmLCAweGZmZiwgMHg1MjYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHg1M2QsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTcwLCAweDMzMSwKKwkweGZmZiwgMHgwNjgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2Y3LCAweGZmZiwgMHgzZDgsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDA5ZiwgMHg1NTYsIDB4ZmZmLCAweGZmZiwgMHgwMmQsIDB4ZmZmLCAweGZmZiwKKwkweDU1MywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxZjAsIDB4ZmZmLCAweGZmZiwgMHg0ZDYsCisJMHg0MWUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRkNSwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjQ4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDBhMywKKwkweGZmZiwgMHgyMTcsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGYxLCAweDIwOSwgMHhmZmYsCisJMHhmZmYsIDB4NDc1LCAweDIzNCwgMHg1MmIsIDB4Mzk4LCAweGZmZiwgMHgwOGIsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmMyLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4MjY4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4NGEzLCAweGZmZiwgMHgwYWEsIDB4ZmZmLCAweDFkOSwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgxNTUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDBiZiwKKwkweDUzOSwgMHhmZmYsIDB4ZmZmLCAweDJmMSwgMHg1NDUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyYTcsIDB4MDZmLCAweGZmZiwgMHgzNzgsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjVlLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE1ZCwgMHgwMmEsIDB4ZmZmLCAweGZmZiwgMHgwYmMsCisJMHgyMzUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4MTUwLCAweGZmZiwgMHgxYTksIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM4MSwKKwkweGZmZiwgMHgwNGUsIDB4MjcwLCAweDEzZiwgMHhmZmYsIDB4ZmZmLCAweDQwNSwgMHhmZmYsCisJMHgzY2QsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDJlZiwgMHhmZmYsIDB4MDZhLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM0ZiwKKwkweDIxMiwgMHhmZmYsIDB4ZmZmLCAweDBlMiwgMHhmZmYsIDB4MDgzLCAweDI5OCwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDBjMiwgMHhmZmYsIDB4ZmZmLCAweDUyZSwgMHhmZmYsIDB4NDg4LAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzZiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ0MiwKKwkweDA5MSwgMHhmZmYsIDB4NDFjLCAweGZmZiwgMHhmZmYsIDB4M2E1LCAweGZmZiwgMHg0ZTYsCisJMHhmZmYsIDB4ZmZmLCAweDQwZCwgMHgzMWQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGMxLAorCTB4MDUzLCAweGZmZiwgMHg0MTgsIDB4MTNjLCAweGZmZiwgMHgzNTAsIDB4ZmZmLCAweDBhZSwKKwkweGZmZiwgMHhmZmYsIDB4NDFmLCAweGZmZiwgMHg0NzAsIDB4ZmZmLCAweDRjYSwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDAyYiwgMHg0NTAsIDB4ZmZmLCAweDFmOCwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjkzLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQxMSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MGI4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4M2UxLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0M2MsIDB4ZmZmLCAweDJiMiwKKwkweDJhYiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxZWMsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzZjgsIDB4MDM0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTFhLCAweGZmZiwgMHg1NDEsIDB4NDVjLCAweDEzNCwKKwkweDFjYywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NjksIDB4ZmZmLCAweGZmZiwgMHg0NGIsCisJMHgxNjEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDU1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDMwNywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmQxLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4MTI0LCAweDM3YiwgMHgyNmIsIDB4MzM2LCAweGZmZiwgMHhmZmYsCisJMHgyZTQsIDB4M2NiLCAweGZmZiwgMHhmZmYsIDB4MGY4LCAweDNjOCwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDQ2MSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRiNSwKKwkweDJjZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMGYsIDB4ZmZmLCAweDM1YSwgMHhmZmYsCisJMHg0OTAsIDB4ZmZmLCAweDE4NSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDJlLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDU0YiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDE0NiwgMHhmZmYsIDB4NDEyLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFmZiwgMHhmZmYsCisJMHhmZmYsIDB4M2UwLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyZDUsIDB4ZmZmLAorCTB4NGRmLCAweDUwNSwgMHhmZmYsIDB4NDEzLCAweGZmZiwgMHgxYTUsIDB4ZmZmLCAweDNiMiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM1YiwgMHhmZmYsIDB4MTE2LCAweGZmZiwgMHhmZmYsCisJMHgxNzEsIDB4NGQwLCAweGZmZiwgMHgxNTQsIDB4MTJkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NjgsIDB4NGRiLCAweGZmZiwKKwkweGZmZiwgMHgxZGYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA1YSwgMHhmZmYsCisJMHgwZjEsIDB4NDAzLCAweGZmZiwgMHgyMmIsIDB4MmUwLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4MmI3LCAweDM3MywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTNlLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4MGQwLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgzMjksIDB4MWQyLCAweDNmYSwgMHgwNDcsIDB4ZmZmLCAweDJmMiwgMHhmZmYsIDB4ZmZmLAorCTB4MTQxLCAweDBhYywgMHgxZDcsIDB4ZmZmLCAweDA3ZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDFjMSwgMHhmZmYsIDB4NDg3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwNDUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4Mjg4LCAweDBjZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjI2LCAweDFkOCwKKwkweGZmZiwgMHgxNTMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0Y2IsCisJMHg1MjgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjBhLCAweDM0MywgMHgzYTEsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgyZDcsIDB4MmQzLCAweDFhYSwgMHg0YzUsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHg0MmIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2U5LCAweGZmZiwgMHgyMGIsIDB4MjYwLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzdjLCAweDJmZCwKKwkweGZmZiwgMHhmZmYsIDB4MmM4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MzFlLCAweGZmZiwgMHgzMzUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4MTM1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDM1YywgMHg0ZGQsIDB4MTI5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgxZWYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHgzNGUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQwNywgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2FkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4Mzc5LCAweGZmZiwgMHhmZmYsIDB4MWQwLCAweDM4ZCwgMHhmZmYsIDB4ZmZmLCAweDFlOCwKKwkweDE4NCwgMHgzYzEsIDB4MWM0LCAweGZmZiwgMHgxZjksIDB4ZmZmLCAweGZmZiwgMHg0MjQsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MWQzLCAweDBkNCwgMHhmZmYsIDB4NGU5LAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTMwLCAweDEwNywgMHhmZmYsIDB4MTA2LCAweDA0ZiwKKwkweGZmZiwgMHhmZmYsIDB4NGM3LCAweDUwMywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MTVjLCAweGZmZiwgMHgyM2YsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRmMywgMHhmZmYsIDB4ZmZmLCAweDNjNywKKwkweGZmZiwgMHgyNzgsIDB4ZmZmLCAweGZmZiwgMHgwYTYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgxMjIsIDB4MWNmLCAweGZmZiwgMHgzMjcsIDB4ZmZmLCAweDJlNSwgMHhmZmYsIDB4MjlkLAorCTB4ZmZmLCAweGZmZiwgMHgzZjEsIDB4ZmZmLCAweGZmZiwgMHg0OGQsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4MDU0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxNzgsCisJMHgyN2UsIDB4NGUwLCAweDM1MiwgMHgwMmYsIDB4MDljLCAweGZmZiwgMHgyYTAsIDB4ZmZmLAorCTB4ZmZmLCAweDQ2YSwgMHg0NTcsIDB4ZmZmLCAweGZmZiwgMHg1MDEsIDB4ZmZmLCAweDJiYSwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDU0ZSwgMHgyZTcsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDU1MSwgMHhmZmYsIDB4ZmZmLCAweDFkYiwgMHgyYWEsIDB4ZmZmLAorCTB4ZmZmLCAweDRiYywgMHhmZmYsIDB4ZmZmLCAweDM5NSwgMHhmZmYsIDB4MGRlLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDU1LCAweGZmZiwgMHgxN2UsCisJMHhmZmYsIDB4MjIxLCAweDRhNywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4Mzg4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDMwOCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDIwZSwgMHg0YjksIDB4ZmZmLCAweDI3MywgMHgyMGMsIDB4MDllLCAweGZmZiwgMHgwNTcsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2YyLCAweGZmZiwgMHgxYTgsIDB4M2E2LAorCTB4MTRjLCAweGZmZiwgMHhmZmYsIDB4MDcxLCAweGZmZiwgMHhmZmYsIDB4NTNhLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDEwOSwgMHhmZmYsIDB4ZmZmLCAweDM5OSwgMHhmZmYsCisJMHgwNjEsIDB4NGYwLCAweDM5ZSwgMHgyNDQsIDB4ZmZmLCAweDAzNSwgMHhmZmYsIDB4ZmZmLAorCTB4MzA1LCAweDQ3ZSwgMHgyOTcsIDB4ZmZmLCAweGZmZiwgMHgyYjgsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MWJjLCAweGZmZiwgMHgyZmMsCisJMHhmZmYsIDB4ZmZmLCAweDU1NCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2I2LAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTE1LCAweDM5NywgMHhmZmYsIDB4ZmZmLCAweDEyZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0ZTUsCisJMHhmZmYsIDB4NGZjLCAweGZmZiwgMHhmZmYsIDB4MDVlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgwYTgsIDB4M2FmLCAweDAxNSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHgxMzgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTQwLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MDI3LCAweDUyMywgMHgyZjAsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgxNmMsIDB4ZmZmLCAweDI3ZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHgwNGMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0ZGMsCisJMHhmZmYsIDB4ZmZmLCAweDA1OSwgMHgzMDEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MWEzLCAweGZmZiwgMHgxNWEsIDB4ZmZmLCAweGZmZiwKKwkweDBhNSwgMHhmZmYsIDB4NDM1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MDUxLCAweGZmZiwgMHhmZmYsIDB4MTMxLCAweGZmZiwgMHg0ZjQsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDQxLCAweGZmZiwgMHg0ZmIsIDB4ZmZmLCAweDAzYiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFlZCwgMHgyNzQsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDBkMywgMHg1NWUsIDB4MWIzLAorCTB4ZmZmLCAweDBiZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjI1LCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0YjcsIDB4ZmZmLCAweGZmZiwgMHgyZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0YzMsIDB4ZmZmLAorCTB4MzgzLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJmNiwKKwkweGZmZiwgMHhmZmYsIDB4MWVlLCAweGZmZiwgMHgwM2QsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDI2ZiwgMHgxZGMsIDB4ZmZmLCAweDBkYiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MGNlLCAweGZmZiwgMHhmZmYsIDB4MTI3LCAweDAzYSwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDMxMSwgMHhmZmYsCisJMHhmZmYsIDB4MTNkLCAweDA5ZCwgMHg0N2IsIDB4MmE2LCAweDUwZCwgMHg1MTAsIDB4MTlhLAorCTB4ZmZmLCAweDM1NCwgMHg0MTQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4NDRjLCAweDNiMCwgMHhmZmYsIDB4MjNkLCAweDQyOSwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4NGMwLCAweDQxNiwgMHhmZmYsIDB4MDViLCAweGZmZiwgMHhmZmYsIDB4MTM3LCAweGZmZiwKKwkweDI1ZiwgMHg0OWYsIDB4ZmZmLCAweDI3OSwgMHgwMTMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgyNjksIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzZDAsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwNzcsIDB4ZmZmLCAweGZmZiwgMHgzZmIsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjcxLCAweDNhMCwgMHhmZmYsIDB4ZmZmLAorCTB4NDBmLCAweGZmZiwgMHhmZmYsIDB4M2RlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFhYiwgMHgyNmEsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ4OSwgMHhmZmYsIDB4ZmZmLAorCTB4MjUyLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxYjcsIDB4NDJmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzYjcsCisJMHhmZmYsIDB4MmJiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MGY3LCAweDAxZCwgMHhmZmYsIDB4MDY3LCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRlMiwgMHhmZmYsIDB4ZmZmLCAweDRiYiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDE3YiwgMHhmZmYsIDB4MGVlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgzNmUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTMzLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4NGQ0LCAweDM1NiwgMHhmZmYsIDB4ZmZmLCAweDM3NSwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0YTQsIDB4NTEzLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0ZmYsIDB4ZmZmLCAweDJhZiwKKwkweGZmZiwgMHhmZmYsIDB4MDI2LCAweGZmZiwgMHgwYWQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MjZlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0OTMsIDB4ZmZmLAorCTB4NDYzLCAweDRkMiwgMHg0YmUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRmMiwKKwkweDBiNiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MzJkLCAweDMxNSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDEzYSwgMHg0YTEsIDB4ZmZmLCAweDI3YSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDQ3YSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgzMzQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDU0YywgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDBjOSwgMHgwMDcsIDB4ZmZmLCAweGZmZiwgMHgxMmUsIDB4ZmZmLCAweDBmZiwKKwkweGZmZiwgMHhmZmYsIDB4M2Y1LCAweDUwOSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgxYzMsIDB4MmFkLCAweGZmZiwgMHhmZmYsIDB4NDdjLCAweDI2MSwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTUyLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDMzOSwKKwkweGZmZiwgMHgyNDMsIDB4MWMwLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgwNjMsIDB4ZmZmLCAweGZmZiwgMHgyNTQsIDB4ZmZmLCAweGZmZiwgMHgxNzMsIDB4ZmZmLAorCTB4MGM3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHgzNjIsIDB4MjU5LCAweDQ4NSwgMHgzNzQsIDB4MGRjLCAweDNhYiwgMHhmZmYsCisJMHgxYzUsIDB4NTM0LCAweDU0NCwgMHhmZmYsIDB4ZmZmLCAweDUwOCwgMHhmZmYsIDB4NDAyLAorCTB4NDA4LCAweGZmZiwgMHgwZTcsIDB4ZmZmLCAweGZmZiwgMHgwMGEsIDB4MjA1LCAweGZmZiwKKwkweGZmZiwgMHgyYjksIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDY1LCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjNhLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDE0NywgMHgxOWQsIDB4MTE1LCAweDIxNCwgMHhmZmYsIDB4MDkwLCAweDM2OCwKKwkweGZmZiwgMHgyMTAsIDB4ZmZmLCAweGZmZiwgMHgyODAsIDB4NTJhLCAweDE2MywgMHgxNDgsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDMyNiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmRlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDIwNiwgMHgyYzEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgxODksIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM2NywgMHhmZmYsIDB4MWE0LAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0NDMsIDB4ZmZmLCAweDI3YiwKKwkweGZmZiwgMHhmZmYsIDB4MjUxLCAweDU0OSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDE4OCwgMHgwNGIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzFmLAorCTB4NGE2LCAweGZmZiwgMHgyNDYsIDB4MWRlLCAweDE1NiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDNhOSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyZmEsIDB4ZmZmLCAweDEyOCwgMHgwZDEsCisJMHg0NDksIDB4MjU1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyNTgsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHg1MzIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzAzLCAweDUxNywgMHhmZmYsIDB4ZmZmLAorCTB4MmE5LCAweDI0YSwgMHhmZmYsIDB4ZmZmLCAweDIzMSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4NGI2LCAweDUxNiwgMHhmZmYsIDB4ZmZmLCAweDBlNCwgMHgwZWIsCisJMHhmZmYsIDB4NGU0LCAweGZmZiwgMHgyNzUsIDB4ZmZmLCAweGZmZiwgMHgwMzEsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDAyNSwgMHgyMWEsIDB4ZmZmLCAweDBjYywKKwkweDQ1ZiwgMHgzZDksIDB4Mjg5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDIzZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0MzgsIDB4MDk3LAorCTB4NDE5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDBhOSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDM3ZSwgMHgwZTAsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0MzEsCisJMHgzNzIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MWJhLCAweDA2ZSwgMHhmZmYsIDB4MWIxLAorCTB4ZmZmLCAweGZmZiwgMHgxMmEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4MTkzLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxMGEsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwNDgsIDB4MWI0LAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI5NSwgMHgxNDAsIDB4MTA4LCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE2ZiwgMHhmZmYsIDB4MGE0LCAweDM3YSwgMHhmZmYsCisJMHgyOWEsIDB4ZmZmLCAweDI4NCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGM2LAorCTB4MmEyLCAweDNhMywgMHhmZmYsIDB4MjAxLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRiZCwKKwkweDAwNSwgMHg1NGEsIDB4M2I1LCAweDIwNCwgMHgyZWUsIDB4MTFkLCAweDQzNiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2VjLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDExZiwgMHg0OTgsIDB4MjFjLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4M2Q2LCAweGZmZiwgMHg0YWIsIDB4ZmZmLCAweDQzMiwgMHgyZWIsCisJMHg1NDIsIDB4NGZkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGNlLCAweGZmZiwgMHhmZmYsIDB4MmZiLCAweGZmZiwKKwkweGZmZiwgMHgyZTEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFiOSwgMHgwMzcsIDB4MGRkLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmJmLCAweDUyMSwgMHg0OTYsIDB4MDk1LCAweGZmZiwKKwkweGZmZiwgMHgzMjgsIDB4MDcwLCAweDFiZiwgMHhmZmYsIDB4MzkzLCAweGZmZiwgMHhmZmYsCisJMHgxMDIsIDB4ZmZmLCAweGZmZiwgMHgyMWIsIDB4ZmZmLCAweDE0MiwgMHgyNjMsIDB4NTE5LAorCTB4ZmZmLCAweDJhNSwgMHgxNzcsIDB4ZmZmLCAweDE0ZCwgMHg0NzEsIDB4NGFlLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgxZjYsIDB4ZmZmLCAweDQ4MSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxNTEsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgwODUsIDB4MzNmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA4NCwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM0NSwgMHgzYTIsIDB4ZmZmLCAweGZmZiwgMHgwYTAsCisJMHgwZGEsIDB4MDI0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDFiZCwgMHhmZmYsIDB4NTVjLAorCTB4NDY3LCAweDQ0NSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwNTIsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4NTFlLCAweGZmZiwgMHhmZmYsIDB4MzlkLCAweGZmZiwgMHgzNWYsCisJMHhmZmYsIDB4Mzc2LCAweDNlZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDQ4LAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE2YSwKKwkweGZmZiwgMHgwMzYsIDB4MzhmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjExLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjMwLCAweGZmZiwgMHhmZmYsIDB4M2JhLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4M2NlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMjksIDB4ZmZmLCAweDE3NiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MDBiLCAweGZmZiwgMHgxNjIsIDB4MDE4LCAweGZmZiwKKwkweGZmZiwgMHgyMzMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHg0MDAsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTJiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHgzZjQsIDB4ZmZmLCAweDBmMCwgMHhmZmYsIDB4MWFjLCAweGZmZiwgMHhmZmYsCisJMHgxMTksIDB4ZmZmLCAweDJjMCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0OWIsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjNjLCAweGZmZiwKKwkweDRiMywgMHgwMTAsIDB4MDY0LCAweGZmZiwgMHhmZmYsIDB4NGJhLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzYzIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwMDYsIDB4MTk2LCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTAwLCAweDE5MSwgMHhmZmYsCisJMHgxZWEsIDB4MjlmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI3NiwgMHhmZmYsIDB4ZmZmLAorCTB4MmIxLCAweDNiOSwgMHhmZmYsIDB4MDNjLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE4MCwKKwkweGZmZiwgMHgwOGYsIDB4ZmZmLCAweGZmZiwgMHgxOWUsIDB4MDE5LCAweGZmZiwgMHgwYjAsCisJMHgwZmQsIDB4MzMyLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDA2YiwgMHgyZTgsIDB4ZmZmLCAweDQ0NiwgMHhmZmYsIDB4ZmZmLCAweDAwNCwKKwkweDI0NywgMHgxOTcsIDB4ZmZmLCAweDExMiwgMHgxNjksIDB4MjkyLCAweGZmZiwgMHgzMDIsCisJMHhmZmYsIDB4ZmZmLCAweDMzYiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4Mjg3LCAweDIxZiwgMHhmZmYsIDB4M2VhLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGU3LCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzYTgsIDB4ZmZmLCAweGZmZiwgMHgyYmMsIDB4ZmZmLAorCTB4NDg0LCAweDI5NiwgMHhmZmYsIDB4MWM5LCAweDA4YywgMHgxZTUsIDB4NDhhLCAweGZmZiwKKwkweDM2MCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgxY2EsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTBkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4MDY2LCAweDJlYSwgMHgyOGIsIDB4MjViLCAweGZmZiwgMHgwNzIsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmI2LCAweGZmZiwgMHhmZmYsIDB4MjcyLAorCTB4ZmZmLCAweGZmZiwgMHg1MjUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDJjYSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyOTksIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHg1NTgsIDB4NDFhLCAweGZmZiwgMHg0ZjcsIDB4NTU3LCAweGZmZiwgMHg0YTAsIDB4MzQ0LAorCTB4MTJjLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDEyNSwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHg0MGUsIDB4ZmZmLCAweGZmZiwgMHg1MDIsIDB4ZmZmLCAweDEwMywgMHgzZTYsIDB4ZmZmLAorCTB4NTI3LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ1ZCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHg0NGUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDBkMiwgMHg0YzksIDB4MzVlLAorCTB4NDU5LCAweDJkOSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDE3ZCwKKwkweDBjNCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzYWMsIDB4MzkwLCAweDA5NCwgMHhmZmYsCisJMHg0ODMsIDB4MGFiLCAweGZmZiwgMHgyNTMsIDB4ZmZmLCAweDM5MSwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgxMjMsIDB4MGVmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDMzMCwKKwkweDM4YywgMHhmZmYsIDB4ZmZmLCAweDJhZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwNDIsCisJMHgwMTIsIDB4MDZkLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDMyYSwgMHgzZGIsIDB4MzY0LAorCTB4MmRjLCAweGZmZiwgMHgzMGYsIDB4M2Q3LCAweDRhNSwgMHgwNTAsIDB4ZmZmLCAweGZmZiwKKwkweDAyOSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MWQxLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0ODAsIDB4ZmZmLAorCTB4NGVkLCAweDA4MSwgMHgwYTEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzBlLCAweDUyZiwKKwkweDI1NywgMHhmZmYsIDB4ZmZmLCAweDQ0NywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0MDEsIDB4M2NjLCAweGZmZiwgMHhmZmYsIDB4MGZiLAorCTB4MmM5LCAweDQyYSwgMHgzMTQsIDB4MzNlLCAweDNiZCwgMHgzMTgsIDB4ZmZmLCAweDEwZSwKKwkweDJhMSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyNGMsCisJMHg1MDYsIDB4ZmZmLCAweDI2NywgMHhmZmYsIDB4ZmZmLCAweDIxOSwgMHhmZmYsIDB4MWViLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDMwOSwgMHgzZTIsIDB4NDZjLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgzODQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDUwYywgMHhmZmYsIDB4MjRiLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDAzOCwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxOTQsCisJMHgxNDMsIDB4M2UzLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRjMiwgMHhmZmYsIDB4ZmZmLAorCTB4MGUxLCAweDI1YywgMHhmZmYsIDB4MjM3LCAweGZmZiwgMHgxZmUsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHgwNjUsIDB4MmE0LCAweGZmZiwgMHgzODYsIDB4NTVhLCAweDExYiwgMHhmZmYsCisJMHhmZmYsIDB4MTkyLCAweGZmZiwgMHgxODMsIDB4MDBlLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGIyLCAweDE4ZSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHg0ODYsIDB4NGVmLCAweDBjNiwgMHgzODAsIDB4ZmZmLCAweDRhOCwgMHhmZmYsCisJMHgwYzUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA5MywgMHgxYjgsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJlNiwKKwkweGZmZiwgMHgwZjMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgyOGUsIDB4ZmZmLCAweDUzYiwgMHg0MjAsIDB4MjJhLCAweDMzYSwgMHhmZmYsIDB4Mzg3LAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyYTMsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHg0MjgsIDB4NTAwLCAweGZmZiwgMHhmZmYsIDB4MTIwLCAweDJjNiwgMHgyOTAsCisJMHgyZjUsIDB4MGUzLCAweGZmZiwgMHgwYjcsIDB4ZmZmLCAweDMxOSwgMHg0NzQsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHg1MjksIDB4MDE0LCAweGZmZiwgMHg0MWIsIDB4NDBhLCAweDE4YiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwZDksCisJMHhmZmYsIDB4MzhhLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxY2UsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNiMSwgMHhmZmYsIDB4ZmZmLCAweDA1ZCwKKwkweDJjNCwgMHhmZmYsIDB4ZmZmLCAweDRhZiwgMHhmZmYsIDB4MDMwLCAweGZmZiwgMHhmZmYsCisJMHgyMDMsIDB4ZmZmLCAweDI3NywgMHgyNTYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGY5LAorCTB4ZmZmLCAweDJjNywgMHhmZmYsIDB4NDY2LCAweDAxNiwgMHgxY2QsIDB4ZmZmLCAweDE2NywKKwkweGZmZiwgMHhmZmYsIDB4MGM4LCAweGZmZiwgMHg0M2QsIDB4ZmZmLCAweGZmZiwgMHgwMjAsCisJMHhmZmYsIDB4ZmZmLCAweDIzMiwgMHgxY2IsIDB4MWUwLCAweGZmZiwgMHhmZmYsIDB4MzQ3LAorCTB4ZmZmLCAweDQ3OCwgMHhmZmYsIDB4MzY1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDM1OCwgMHhmZmYsIDB4MTBiLCAweGZmZiwgMHgzNWQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDQ1MiwgMHgyMmQsIDB4ZmZmLCAweGZmZiwgMHg0N2QsIDB4ZmZmLAorCTB4MmYzLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDYwLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4NTBiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDJlYywgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGIxLCAweDQyMiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDJkNCwgMHhmZmYsIDB4MjM5LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQzOSwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4NDkxLCAweDA3NSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwNmMsIDB4ZmZmLAorCTB4ZmZmLCAweDBmOSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHgxMzksIDB4ZmZmLCAweDRmNiwgMHhmZmYsIDB4ZmZmLCAweDQwOSwgMHhmZmYsCisJMHhmZmYsIDB4MTViLCAweGZmZiwgMHhmZmYsIDB4MzQ4LCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDRhMiwgMHg0OWQsIDB4ZmZmLCAweDAzMywgMHgxNzUsIDB4ZmZmLCAweDAzOSwKKwkweGZmZiwgMHgzMTIsIDB4NDBjLCAweGZmZiwgMHhmZmYsIDB4MzI1LCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGFhLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTY1LCAweDNiYywgMHg0OGMsIDB4MzEwLCAweDA5NiwKKwkweGZmZiwgMHhmZmYsIDB4MjUwLCAweDFhMiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgyMGQsIDB4MmFjLCAweGZmZiwgMHhmZmYsIDB4MzliLCAweGZmZiwgMHgzNzcsIDB4ZmZmLAorCTB4NTEyLCAweDQ5NSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzNTcsIDB4NGVhLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDE5OCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0MzQsIDB4MDRhLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA2MiwgMHhmZmYsIDB4MWQ2LCAweDFjOCwKKwkweGZmZiwgMHgxZjMsIDB4MjgxLCAweGZmZiwgMHg0NjIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHg0YjAsIDB4ZmZmLCAweDIwNywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4M2RkLAorCTB4ZmZmLCAweGZmZiwgMHg1NWQsIDB4ZmZmLCAweDU1MiwgMHg0OTQsIDB4MWFmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMjcsIDB4ZmZmLCAweGZmZiwgMHgwNjksCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDNlLAorCTB4MGI1LCAweGZmZiwgMHg1MjQsIDB4MmQyLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDI4ZiwKKwkweGZmZiwgMHgwMWIsIDB4NTBlLCAweGZmZiwgMHhmZmYsIDB4MWJiLCAweGZmZiwgMHhmZmYsCisJMHg0MWQsIDB4ZmZmLCAweDMyZSwgMHg0OGUsIDB4ZmZmLCAweDFmNywgMHgyMjQsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM5NCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHg1MmMsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzkyLCAweGZmZiwgMHgxZTcsCisJMHhmZmYsIDB4ZmZmLCAweDNmOSwgMHgzYTcsIDB4ZmZmLCAweDUxZiwgMHhmZmYsIDB4MGJiLAorCTB4MTE4LCAweDNjYSwgMHhmZmYsIDB4MWRkLCAweGZmZiwgMHg0OGIsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4NTBmLCAweGZmZiwgMHgwZDYsIDB4ZmZmLCAweDFmYSwgMHhmZmYsCisJMHgxMWUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDRkNywgMHhmZmYsIDB4MDc4LAorCTB4MDA4LCAweGZmZiwgMHgyNWQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDAzMiwgMHgzM2MsIDB4ZmZmLCAweDRkOSwgMHgxNjAsIDB4ZmZmLCAweGZmZiwgMHgzMDAsCisJMHgwYjEsIDB4ZmZmLCAweDMyMiwgMHhmZmYsIDB4NGVjLCAweGZmZiwgMHhmZmYsIDB4MjAwLAorCTB4MDBjLCAweDM2OSwgMHg0NzMsIDB4ZmZmLCAweGZmZiwgMHgzMmMsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg1M2UsIDB4M2Q0LCAweDQxNywgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4MzRiLCAweDAwMSwgMHgzOWEsIDB4MDJjLCAweGZmZiwgMHhmZmYsIDB4MmNlLCAweDAwZiwKKwkweGZmZiwgMHgwYmEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA2MCwgMHhmZmYsCisJMHg0MDYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGVlLCAweDRhYywgMHhmZmYsIDB4NDNmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyOWIsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyMTYsCisJMHgxOTAsIDB4ZmZmLCAweDM5NiwgMHg0NjQsIDB4ZmZmLCAweGZmZiwgMHgzMjMsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyZTksIDB4ZmZmLCAweDI2ZCwKKwkweDJjZCwgMHgwNDAsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDM4YiwgMHgzYzAsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxZjIsIDB4ZmZmLCAweDBlYSwgMHhmZmYsIDB4ZmZmLAorCTB4NDcyLCAweGZmZiwgMHgxZmIsIDB4ZmZmLCAweGZmZiwgMHgwYWYsIDB4MjdmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4NDc5LCAweDAyMywgMHhmZmYsIDB4MGQ4LCAweDNiMywgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDEyMSwgMHhmZmYsIDB4ZmZmLCAweDNiZiwgMHhmZmYsIDB4ZmZmLAorCTB4MTZiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4NDVhLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHgwYmUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTExLCAweGZmZiwgMHgyMjAsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgwOWIsIDB4MjE4LCAweGZmZiwgMHgwMjIsIDB4MjAyLCAweGZmZiwKKwkweDRjOCwgMHhmZmYsIDB4MGVkLCAweGZmZiwgMHhmZmYsIDB4MTgyLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MTdmLCAweDIxMywgMHhmZmYsIDB4MzIxLCAweDM2YSwgMHhmZmYsIDB4MDg2LAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NDNiLCAweDA4OCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHgyNmMsIDB4ZmZmLCAweDJmOCwgMHgzYjQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgxMzIsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgzMzMsIDB4NDQ0LAorCTB4MGMxLCAweDRkOCwgMHg0NmQsIDB4MjY0LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDQyNiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmZlLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweDAxMSwgMHhmZmYsIDB4MDVmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweDEwYywgMHgxMDEsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDExMCwKKwkweGZmZiwgMHgwNDQsIDB4MzA0LCAweDM2MSwgMHg0MDQsIDB4ZmZmLCAweDUxYiwgMHgwOTksCisJMHhmZmYsIDB4NDQwLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDIyMiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgxYjUsIDB4ZmZmLCAweDEzNiwgMHg0MzAsIDB4ZmZmLCAweDFkYSwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDA0MywgMHhmZmYsIDB4MTdjLCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4MDFjLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQyNSwgMHgyMzYsIDB4ZmZmLAorCTB4MzE3LCAweGZmZiwgMHhmZmYsIDB4NDM3LCAweDNmYywgMHhmZmYsIDB4MWYxLCAweGZmZiwKKwkweDMyNCwgMHhmZmYsIDB4ZmZmLCAweDBjYSwgMHgzMDYsIDB4ZmZmLCAweDU0OCwgMHhmZmYsCisJMHg0NmUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NGI4LCAweDFjMiwgMHgyODYsIDB4ZmZmLAorCTB4ZmZmLCAweDA4NywgMHgxOGEsIDB4MTlmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDE4YywgMHhmZmYsIDB4MjE1LCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgyODMsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgxMjYsIDB4ZmZmLCAweGZmZiwgMHgzNzAsIDB4ZmZmLAorCTB4NTNmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MzFjLCAweGZmZiwKKwkweDRkMSwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwMjEsIDB4ZmZmLCAweDE1NywgMHhmZmYsCisJMHhmZmYsIDB4MDI4LCAweDE2ZSwgMHhmZmYsIDB4NDIxLCAweGZmZiwgMHgxYzYsIDB4ZmZmLAorCTB4ZmZmLCAweDUxMSwgMHhmZmYsIDB4ZmZmLCAweDM5YywgMHg0NmYsIDB4MWIyLCAweGZmZiwKKwkweGZmZiwgMHgzMTYsIDB4ZmZmLCAweGZmZiwgMHgwMDksIDB4ZmZmLCAweGZmZiwgMHgxOTUsCisJMHhmZmYsIDB4MjQwLCAweDU0NiwgMHhmZmYsIDB4ZmZmLCAweDUyMCwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDQ1NCwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDNmMywgMHhmZmYsIDB4ZmZmLCAweDE4NywgMHhmZmYsIDB4NGE5LCAweGZmZiwgMHhmZmYsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4NTFjLCAweDQ1MywgMHgxZTYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHgxYjAsIDB4ZmZmLCAweDQ3NywgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweDRmZSwgMHhmZmYsIDB4MzJmLCAweGZmZiwgMHhmZmYsIDB4MTVlLCAweDFkNCwgMHhmZmYsCisJMHgwZTUsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MjQyLCAweDE0YiwgMHgwNDYsIDB4ZmZmLAorCTB4M2Y2LCAweDNiYiwgMHgzZTQsIDB4ZmZmLCAweGZmZiwgMHgyZTMsIDB4ZmZmLCAweDI0NSwKKwkweGZmZiwgMHgxNDksIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MmRiLCAweGZmZiwgMHhmZmYsCisJMHgxODEsIDB4ZmZmLCAweDA4OSwgMHgyYzUsIDB4ZmZmLCAweDFmNSwgMHhmZmYsIDB4MmQ2LAorCTB4NTA3LCAweGZmZiwgMHg0MmQsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwKKwkweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsCisJMHgwODAsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLAorCTB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDNjMywgMHgzMjAsIDB4ZmZmLCAweDFlMSwKKwkweGZmZiwgMHgwZjUsIDB4MTNiLCAweGZmZiwgMHhmZmYsIDB4ZmZmLCAweDAwMywgMHg0ZGEsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHg0MmMsIDB4ZmZmLCAweGZmZiwgMHgwY2IsIDB4ZmZmLAorCTB4NTM2LCAweDJjMywgMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHhmZmYsIDB4MTk5LCAweGZmZiwKKwkweGZmZiwgMHgwYzAsIDB4ZmZmLCAweDAxZSwgMHg0OTcsIDB4ZmZmLCAweGZmZiwgMHgzZTUsCisJMHhmZmYsIDB4ZmZmLCAweGZmZiwgMHgwY2YsIDB4ZmZmLCAweDJiZCwgMHhmZmYsIDB4MjIzLAorCTB4ZmZmLCAweDNmZiwgMHhmZmYsIDB4MDU4LCAweDE3NCwgMHgzZWYsIDB4ZmZmLCAweDAwMgorfTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGVycl9wb3ModW5zaWduZWQgc2hvcnQgZGluKQoreworCUJVR19PTihkaW4gPiA0MDk2KTsKKwlyZXR1cm4gZXJyX3Bvc19sdXRbZGluXTsKK30KK3N0YXRpYyBpbnQgY2hrX25vX2Vycl9vbmx5KHVuc2lnbmVkIHNob3J0ICpjaGtfc3luZHJvbWVfbGlzdCwgdW5zaWduZWQgc2hvcnQgKmVycl9pbmZvKQoreworCWlmICgoY2hrX3N5bmRyb21lX2xpc3RbMF0gfCBjaGtfc3luZHJvbWVfbGlzdFsxXSB8CisJICAgICBjaGtfc3luZHJvbWVfbGlzdFsyXSB8IGNoa19zeW5kcm9tZV9saXN0WzNdIHwKKwkgICAgIGNoa19zeW5kcm9tZV9saXN0WzRdIHwgY2hrX3N5bmRyb21lX2xpc3RbNV0gfAorCSAgICAgY2hrX3N5bmRyb21lX2xpc3RbNl0gfCBjaGtfc3luZHJvbWVfbGlzdFs3XSkgIT0gMHgwKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWVycl9pbmZvWzBdID0gMHgwOworCQlyZXR1cm4gMDsKKwl9Cit9CitzdGF0aWMgaW50IGNoa18xX2Vycl9vbmx5KHVuc2lnbmVkIHNob3J0ICpjaGtfc3luZHJvbWVfbGlzdCwgdW5zaWduZWQgc2hvcnQgKmVycl9pbmZvKQoreworCXVuc2lnbmVkIHNob3J0IHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDY7CisJdG1wMCA9IGdmNDA5Nl9tdWwoY2hrX3N5bmRyb21lX2xpc3RbMV0sIGdmNDA5Nl9pbnYoY2hrX3N5bmRyb21lX2xpc3RbMF0pKTsKKwl0bXAxID0gZ2Y0MDk2X211bChjaGtfc3luZHJvbWVfbGlzdFsyXSwgZ2Y0MDk2X2ludihjaGtfc3luZHJvbWVfbGlzdFsxXSkpOworCXRtcDIgPSBnZjQwOTZfbXVsKGNoa19zeW5kcm9tZV9saXN0WzNdLCBnZjQwOTZfaW52KGNoa19zeW5kcm9tZV9saXN0WzJdKSk7CisJdG1wMyA9IGdmNDA5Nl9tdWwoY2hrX3N5bmRyb21lX2xpc3RbNF0sIGdmNDA5Nl9pbnYoY2hrX3N5bmRyb21lX2xpc3RbM10pKTsKKwl0bXA0ID0gZ2Y0MDk2X211bChjaGtfc3luZHJvbWVfbGlzdFs1XSwgZ2Y0MDk2X2ludihjaGtfc3luZHJvbWVfbGlzdFs0XSkpOworCXRtcDUgPSBnZjQwOTZfbXVsKGNoa19zeW5kcm9tZV9saXN0WzZdLCBnZjQwOTZfaW52KGNoa19zeW5kcm9tZV9saXN0WzVdKSk7CisJdG1wNiA9IGdmNDA5Nl9tdWwoY2hrX3N5bmRyb21lX2xpc3RbN10sIGdmNDA5Nl9pbnYoY2hrX3N5bmRyb21lX2xpc3RbNl0pKTsKKwlpZiAoKHRtcDAgPT0gdG1wMSkgJiAodG1wMSA9PSB0bXAyKSAmICh0bXAyID09IHRtcDMpICYgKHRtcDMgPT0gdG1wNCkgJiAodG1wNCA9PSB0bXA1KSAmICh0bXA1ID09IHRtcDYpKSB7CisJCWVycl9pbmZvWzBdID0gMHgxOwkvLyBlbmNvZGUgMS1zeW1ib2wgZXJyb3IgYXMgMHgxCisJCWVycl9pbmZvWzFdID0gZXJyX3Bvcyh0bXAwKTsKKwkJZXJyX2luZm9bMV0gPSAodW5zaWduZWQgc2hvcnQpKDB4NTVlIC0gZXJyX2luZm9bMV0pOworCQllcnJfaW5mb1s1XSA9IGNoa19zeW5kcm9tZV9saXN0WzBdOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW50IGNoa18yX2Vycl9vbmx5KHVuc2lnbmVkIHNob3J0ICpjaGtfc3luZHJvbWVfbGlzdCwgdW5zaWduZWQgc2hvcnQgKmVycl9pbmZvKQoreworCXVuc2lnbmVkIHNob3J0IHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDc7CisJdW5zaWduZWQgc2hvcnQgY29lZnNbNF07CisJdW5zaWduZWQgc2hvcnQgZXJyX3BhdHNbNF07CisJaW50IGZvdW5kX251bV9yb290ID0gMDsKKwl1bnNpZ25lZCBzaG9ydCBiaXQyX3Jvb3QwLCBiaXQyX3Jvb3QxOworCXVuc2lnbmVkIHNob3J0IGJpdDJfcm9vdDBfaW52LCBiaXQyX3Jvb3QxX2ludjsKKwl1bnNpZ25lZCBzaG9ydCBlcnJfbG9jX2VxbiwgdGVzdF9yb290OworCXVuc2lnbmVkIHNob3J0IGJpdDJfbG9jMCwgYml0Ml9sb2MxOworCXVuc2lnbmVkIHNob3J0IGJpdDJfcGF0MCwgYml0Ml9wYXQxOworCisJZmluZF8yeDJfc29sbihjaGtfc3luZHJvbWVfbGlzdFsxXSwKKwkJICAgICAgY2hrX3N5bmRyb21lX2xpc3RbMF0sCisJCSAgICAgIGNoa19zeW5kcm9tZV9saXN0WzJdLCBjaGtfc3luZHJvbWVfbGlzdFsxXSwgY2hrX3N5bmRyb21lX2xpc3RbMl0sIGNoa19zeW5kcm9tZV9saXN0WzNdLCBjb2Vmcyk7CisJZm9yICh0ZXN0X3Jvb3QgPSAweDE7IHRlc3Rfcm9vdCA8IDB4ZmZmOyB0ZXN0X3Jvb3QrKykgeworCQllcnJfbG9jX2VxbiA9CisJCSAgICBnZjQwOTZfbXVsKGNvZWZzWzFdLCBnZjQwOTZfbXVsKHRlc3Rfcm9vdCwgdGVzdF9yb290KSkgXiBnZjQwOTZfbXVsKGNvZWZzWzBdLCB0ZXN0X3Jvb3QpIF4gMHgxOworCQlpZiAoZXJyX2xvY19lcW4gPT0gMHgwKSB7CisJCQlpZiAoZm91bmRfbnVtX3Jvb3QgPT0gMCkgeworCQkJCWJpdDJfcm9vdDAgPSB0ZXN0X3Jvb3Q7CisJCQkJZm91bmRfbnVtX3Jvb3QgPSAxOworCQkJfSBlbHNlIGlmIChmb3VuZF9udW1fcm9vdCA9PSAxKSB7CisJCQkJYml0Ml9yb290MSA9IHRlc3Rfcm9vdDsKKwkJCQlmb3VuZF9udW1fcm9vdCA9IDI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKGZvdW5kX251bV9yb290ICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgeworCQliaXQyX3Jvb3QwX2ludiA9IGdmNDA5Nl9pbnYoYml0Ml9yb290MCk7CisJCWJpdDJfcm9vdDFfaW52ID0gZ2Y0MDk2X2ludihiaXQyX3Jvb3QxKTsKKwkJZmluZF8yYml0X2Vycl9wYXRzKGNoa19zeW5kcm9tZV9saXN0WzBdLAorCQkJCSAgIGNoa19zeW5kcm9tZV9saXN0WzFdLCBiaXQyX3Jvb3QwX2ludiwgYml0Ml9yb290MV9pbnYsIGVycl9wYXRzKTsKKwkJYml0Ml9wYXQwID0gZXJyX3BhdHNbMF07CisJCWJpdDJfcGF0MSA9IGVycl9wYXRzWzFdOworCQkvL2Zvcih4KzEpCisJCXRtcDAgPSBnZjQwOTZfbXVsKGdmNDA5Nl9tdWwoYml0Ml9yb290MF9pbnYsIGJpdDJfcm9vdDBfaW52KSwgZ2Y0MDk2X211bChiaXQyX3Jvb3QwX2ludiwgYml0Ml9yb290MF9pbnYpKTsJLy9yaW52MF40CisJCXRtcDEgPSBnZjQwOTZfbXVsKGJpdDJfcm9vdDBfaW52LCB0bXAwKTsJLy9yaW52MF41CisJCXRtcDIgPSBnZjQwOTZfbXVsKGJpdDJfcm9vdDBfaW52LCB0bXAxKTsJLy9yaW52MF42CisJCXRtcDMgPSBnZjQwOTZfbXVsKGJpdDJfcm9vdDBfaW52LCB0bXAyKTsJLy9yaW52MF43CisJCXRtcDQgPSBnZjQwOTZfbXVsKGdmNDA5Nl9tdWwoYml0Ml9yb290MV9pbnYsIGJpdDJfcm9vdDFfaW52KSwgZ2Y0MDk2X211bChiaXQyX3Jvb3QxX2ludiwgYml0Ml9yb290MV9pbnYpKTsJLy9yaW52MV40CisJCXRtcDUgPSBnZjQwOTZfbXVsKGJpdDJfcm9vdDFfaW52LCB0bXA0KTsJLy9yaW52MV41CisJCXRtcDYgPSBnZjQwOTZfbXVsKGJpdDJfcm9vdDFfaW52LCB0bXA1KTsJLy9yaW52MV42CisJCXRtcDcgPSBnZjQwOTZfbXVsKGJpdDJfcm9vdDFfaW52LCB0bXA2KTsJLy9yaW52MV43CisJCS8vY2hlY2sgaWYgb25seSAyLWJpdCBlcnJvcgorCQlpZiAoKGNoa19zeW5kcm9tZV9saXN0WzRdID09CisJCSAgICAgKGdmNDA5Nl9tdWwoYml0Ml9wYXQwLCB0bXAwKSBeCisJCSAgICAgIGdmNDA5Nl9tdWwoYml0Ml9wYXQxLAorCQkJCSB0bXA0KSkpICYgKGNoa19zeW5kcm9tZV9saXN0WzVdID09CisJCQkJCSAgICAoZ2Y0MDk2X211bChiaXQyX3BhdDAsIHRtcDEpIF4KKwkJCQkJICAgICBnZjQwOTZfbXVsKGJpdDJfcGF0MSwKKwkJCQkJCQl0bXA1KSkpICYKKwkJICAgIChjaGtfc3luZHJvbWVfbGlzdFs2XSA9PQorCQkgICAgIChnZjQwOTZfbXVsKGJpdDJfcGF0MCwgdG1wMikgXgorCQkgICAgICBnZjQwOTZfbXVsKGJpdDJfcGF0MSwKKwkJCQkgdG1wNikpKSAmIChjaGtfc3luZHJvbWVfbGlzdFs3XSA9PQorCQkJCQkgICAgKGdmNDA5Nl9tdWwoYml0Ml9wYXQwLCB0bXAzKSBeIGdmNDA5Nl9tdWwoYml0Ml9wYXQxLCB0bXA3KSkpKSB7CisJCQlpZiAoKGVycl9wb3MoYml0Ml9yb290MF9pbnYpID09IDB4ZmZmKSB8IChlcnJfcG9zKGJpdDJfcm9vdDFfaW52KSA9PSAweGZmZikpIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0gZWxzZSB7CisJCQkJYml0Ml9sb2MwID0gMHg1NWUgLSBlcnJfcG9zKGJpdDJfcm9vdDBfaW52KTsKKwkJCQliaXQyX2xvYzEgPSAweDU1ZSAtIGVycl9wb3MoYml0Ml9yb290MV9pbnYpOworCQkJCWVycl9pbmZvWzBdID0gMHgyOwkvLyBlbmNvZGUgMi1zeW1ib2wgZXJyb3IgYXMgMHgyCisJCQkJZXJyX2luZm9bMV0gPSBiaXQyX2xvYzA7CisJCQkJZXJyX2luZm9bMl0gPSBiaXQyX2xvYzE7CisJCQkJZXJyX2luZm9bNV0gPSBiaXQyX3BhdDA7CisJCQkJZXJyX2luZm9bNl0gPSBiaXQyX3BhdDE7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0gZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorc3RhdGljIGludCBjaGtfM19lcnJfb25seSh1bnNpZ25lZCBzaG9ydCAqY2hrX3N5bmRyb21lX2xpc3QsIHVuc2lnbmVkIHNob3J0ICplcnJfaW5mbykKK3sKKwl1bnNpZ25lZCBzaG9ydCB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1OworCXVuc2lnbmVkIHNob3J0IGNvZWZzWzRdOworCXVuc2lnbmVkIHNob3J0IGVycl9wYXRzWzRdOworCWludCBmb3VuZF9udW1fcm9vdCA9IDA7CisJdW5zaWduZWQgc2hvcnQgYml0M19yb290MCwgYml0M19yb290MSwgYml0M19yb290MjsKKwl1bnNpZ25lZCBzaG9ydCBiaXQzX3Jvb3QwX2ludiwgYml0M19yb290MV9pbnYsIGJpdDNfcm9vdDJfaW52OworCXVuc2lnbmVkIHNob3J0IGVycl9sb2NfZXFuLCB0ZXN0X3Jvb3Q7CisKKwlmaW5kXzNiaXRfZXJyX2NvZWZzKGNoa19zeW5kcm9tZV9saXN0WzBdLCBjaGtfc3luZHJvbWVfbGlzdFsxXSwKKwkJCSAgICBjaGtfc3luZHJvbWVfbGlzdFsyXSwgY2hrX3N5bmRyb21lX2xpc3RbM10sCisJCQkgICAgY2hrX3N5bmRyb21lX2xpc3RbNF0sIGNoa19zeW5kcm9tZV9saXN0WzVdLCBjb2Vmcyk7CisKKwlmb3IgKHRlc3Rfcm9vdCA9IDB4MTsgdGVzdF9yb290IDwgMHhmZmY7IHRlc3Rfcm9vdCsrKSB7CisJCWVycl9sb2NfZXFuID0gZ2Y0MDk2X211bChjb2Vmc1syXSwKKwkJCQkJIGdmNDA5Nl9tdWwoZ2Y0MDk2X211bCh0ZXN0X3Jvb3QsIHRlc3Rfcm9vdCksCisJCQkJCQkgICAgdGVzdF9yb290KSkgXiBnZjQwOTZfbXVsKGNvZWZzWzFdLCBnZjQwOTZfbXVsKHRlc3Rfcm9vdCwgdGVzdF9yb290KSkKKwkJCV4gZ2Y0MDk2X211bChjb2Vmc1swXSwgdGVzdF9yb290KSBeIDB4MTsKKworCQlpZiAoZXJyX2xvY19lcW4gPT0gMHgwKSB7CisJCQlpZiAoZm91bmRfbnVtX3Jvb3QgPT0gMCkgeworCQkJCWJpdDNfcm9vdDAgPSB0ZXN0X3Jvb3Q7CisJCQkJZm91bmRfbnVtX3Jvb3QgPSAxOworCQkJfSBlbHNlIGlmIChmb3VuZF9udW1fcm9vdCA9PSAxKSB7CisJCQkJYml0M19yb290MSA9IHRlc3Rfcm9vdDsKKwkJCQlmb3VuZF9udW1fcm9vdCA9IDI7CisJCQl9IGVsc2UgaWYgKGZvdW5kX251bV9yb290ID09IDIpIHsKKwkJCQliaXQzX3Jvb3QyID0gdGVzdF9yb290OworCQkJCWZvdW5kX251bV9yb290ID0gMzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZm91bmRfbnVtX3Jvb3QgIT0gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSB7CisJCWJpdDNfcm9vdDBfaW52ID0gZ2Y0MDk2X2ludihiaXQzX3Jvb3QwKTsKKwkJYml0M19yb290MV9pbnYgPSBnZjQwOTZfaW52KGJpdDNfcm9vdDEpOworCQliaXQzX3Jvb3QyX2ludiA9IGdmNDA5Nl9pbnYoYml0M19yb290Mik7CisKKwkJZmluZF8zYml0X2Vycl9wYXRzKGNoa19zeW5kcm9tZV9saXN0WzBdLCBjaGtfc3luZHJvbWVfbGlzdFsxXSwKKwkJCQkgICBjaGtfc3luZHJvbWVfbGlzdFsyXSwgYml0M19yb290MF9pbnYsCisJCQkJICAgYml0M19yb290MV9pbnYsIGJpdDNfcm9vdDJfaW52LCBlcnJfcGF0cyk7CisKKwkJLy9jaGVjayBpZiBvbmx5IDMtYml0IGVycm9yCisJCXRtcDAgPSBnZjQwOTZfbXVsKGJpdDNfcm9vdDBfaW52LCBiaXQzX3Jvb3QwX2ludik7CisJCXRtcDAgPSBnZjQwOTZfbXVsKHRtcDAsIHRtcDApOworCQl0bXAwID0gZ2Y0MDk2X211bCh0bXAwLCBiaXQzX3Jvb3QwX2ludik7CisJCXRtcDAgPSBnZjQwOTZfbXVsKHRtcDAsIGJpdDNfcm9vdDBfaW52KTsJLy9yaW52MF42CisJCXRtcDEgPSBnZjQwOTZfbXVsKHRtcDAsIGJpdDNfcm9vdDBfaW52KTsJLy9yaW52MF43CisJCXRtcDIgPSBnZjQwOTZfbXVsKGJpdDNfcm9vdDFfaW52LCBiaXQzX3Jvb3QxX2ludik7CisJCXRtcDIgPSBnZjQwOTZfbXVsKHRtcDIsIHRtcDIpOworCQl0bXAyID0gZ2Y0MDk2X211bCh0bXAyLCBiaXQzX3Jvb3QxX2ludik7CisJCXRtcDIgPSBnZjQwOTZfbXVsKHRtcDIsIGJpdDNfcm9vdDFfaW52KTsJLy9yaW52MV42CisJCXRtcDMgPSBnZjQwOTZfbXVsKHRtcDIsIGJpdDNfcm9vdDFfaW52KTsJLy9yaW52MV43CisJCXRtcDQgPSBnZjQwOTZfbXVsKGJpdDNfcm9vdDJfaW52LCBiaXQzX3Jvb3QyX2ludik7CisJCXRtcDQgPSBnZjQwOTZfbXVsKHRtcDQsIHRtcDQpOworCQl0bXA0ID0gZ2Y0MDk2X211bCh0bXA0LCBiaXQzX3Jvb3QyX2ludik7CisJCXRtcDQgPSBnZjQwOTZfbXVsKHRtcDQsIGJpdDNfcm9vdDJfaW52KTsJLy9yaW52Ml42CisJCXRtcDUgPSBnZjQwOTZfbXVsKHRtcDQsIGJpdDNfcm9vdDJfaW52KTsJLy9yaW52Ml43CisKKwkJLy9jaGVjayBpZiBvbmx5IDMgZXJyb3JzCisJCWlmICgoY2hrX3N5bmRyb21lX2xpc3RbNl0gPT0gKGdmNDA5Nl9tdWwoZXJyX3BhdHNbMF0sIHRtcDApIF4KKwkJCQkJICAgICAgZ2Y0MDk2X211bChlcnJfcGF0c1sxXSwgdG1wMikgXgorCQkJCQkgICAgICBnZjQwOTZfbXVsKGVycl9wYXRzWzJdLCB0bXA0KSkpICYKKwkJICAgIChjaGtfc3luZHJvbWVfbGlzdFs3XSA9PSAoZ2Y0MDk2X211bChlcnJfcGF0c1swXSwgdG1wMSkgXgorCQkJCQkgICAgICBnZjQwOTZfbXVsKGVycl9wYXRzWzFdLCB0bXAzKSBeIGdmNDA5Nl9tdWwoZXJyX3BhdHNbMl0sIHRtcDUpKSkpIHsKKwkJCWlmICgoZXJyX3BvcyhiaXQzX3Jvb3QwX2ludikgPT0gMHhmZmYpIHwKKwkJCSAgICAoZXJyX3BvcyhiaXQzX3Jvb3QxX2ludikgPT0gMHhmZmYpIHwgKGVycl9wb3MoYml0M19yb290Ml9pbnYpID09IDB4ZmZmKSkgeworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfSBlbHNlIHsKKwkJCQllcnJfaW5mb1swXSA9IDB4MzsKKwkJCQllcnJfaW5mb1sxXSA9ICgweDU1ZSAtIGVycl9wb3MoYml0M19yb290MF9pbnYpKTsKKwkJCQllcnJfaW5mb1syXSA9ICgweDU1ZSAtIGVycl9wb3MoYml0M19yb290MV9pbnYpKTsKKwkJCQllcnJfaW5mb1szXSA9ICgweDU1ZSAtIGVycl9wb3MoYml0M19yb290Ml9pbnYpKTsKKwkJCQllcnJfaW5mb1s1XSA9IGVycl9wYXRzWzBdOworCQkJCWVycl9pbmZvWzZdID0gZXJyX3BhdHNbMV07CisJCQkJZXJyX2luZm9bN10gPSBlcnJfcGF0c1syXTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CitzdGF0aWMgaW50IGNoa180X2Vycl9vbmx5KHVuc2lnbmVkIHNob3J0ICpjaGtfc3luZHJvbWVfbGlzdCwgdW5zaWduZWQgc2hvcnQgKmVycl9pbmZvKQoreworCXVuc2lnbmVkIHNob3J0IGNvZWZzWzRdOworCXVuc2lnbmVkIHNob3J0IGVycl9wYXRzWzRdOworCWludCBmb3VuZF9udW1fcm9vdCA9IDA7CisJdW5zaWduZWQgc2hvcnQgYml0NF9yb290MCwgYml0NF9yb290MSwgYml0NF9yb290MiwgYml0NF9yb290MzsKKwl1bnNpZ25lZCBzaG9ydCBiaXQ0X3Jvb3QwX2ludiwgYml0NF9yb290MV9pbnYsIGJpdDRfcm9vdDJfaW52LCBiaXQ0X3Jvb3QzX2ludjsKKwl1bnNpZ25lZCBzaG9ydCBlcnJfbG9jX2VxbiwgdGVzdF9yb290OworCisJZmluZF80Yml0X2Vycl9jb2VmcyhjaGtfc3luZHJvbWVfbGlzdFswXSwKKwkJCSAgICBjaGtfc3luZHJvbWVfbGlzdFsxXSwKKwkJCSAgICBjaGtfc3luZHJvbWVfbGlzdFsyXSwKKwkJCSAgICBjaGtfc3luZHJvbWVfbGlzdFszXSwKKwkJCSAgICBjaGtfc3luZHJvbWVfbGlzdFs0XSwKKwkJCSAgICBjaGtfc3luZHJvbWVfbGlzdFs1XSwgY2hrX3N5bmRyb21lX2xpc3RbNl0sIGNoa19zeW5kcm9tZV9saXN0WzddLCBjb2Vmcyk7CisKKwlmb3IgKHRlc3Rfcm9vdCA9IDB4MTsgdGVzdF9yb290IDwgMHhmZmY7IHRlc3Rfcm9vdCsrKSB7CisJCWVycl9sb2NfZXFuID0KKwkJICAgIGdmNDA5Nl9tdWwoY29lZnNbM10sCisJCQkgICAgICAgZ2Y0MDk2X211bChnZjQwOTZfbXVsCisJCQkJCSAgKGdmNDA5Nl9tdWwodGVzdF9yb290LCB0ZXN0X3Jvb3QpLAorCQkJCQkgICB0ZXN0X3Jvb3QpLAorCQkJCQkgIHRlc3Rfcm9vdCkpIF4gZ2Y0MDk2X211bChjb2Vmc1syXSwKKwkJCQkJCQkJICAgZ2Y0MDk2X211bAorCQkJCQkJCQkgICAoZ2Y0MDk2X211bCh0ZXN0X3Jvb3QsIHRlc3Rfcm9vdCksIHRlc3Rfcm9vdCkpCisJCSAgICBeIGdmNDA5Nl9tdWwoY29lZnNbMV0sIGdmNDA5Nl9tdWwodGVzdF9yb290LCB0ZXN0X3Jvb3QpKSBeIGdmNDA5Nl9tdWwoY29lZnNbMF0sIHRlc3Rfcm9vdCkKKwkJICAgIF4gMHgxOworCQlpZiAoZXJyX2xvY19lcW4gPT0gMHgwKSB7CisJCQlpZiAoZm91bmRfbnVtX3Jvb3QgPT0gMCkgeworCQkJCWJpdDRfcm9vdDAgPSB0ZXN0X3Jvb3Q7CisJCQkJZm91bmRfbnVtX3Jvb3QgPSAxOworCQkJfSBlbHNlIGlmIChmb3VuZF9udW1fcm9vdCA9PSAxKSB7CisJCQkJYml0NF9yb290MSA9IHRlc3Rfcm9vdDsKKwkJCQlmb3VuZF9udW1fcm9vdCA9IDI7CisJCQl9IGVsc2UgaWYgKGZvdW5kX251bV9yb290ID09IDIpIHsKKwkJCQliaXQ0X3Jvb3QyID0gdGVzdF9yb290OworCQkJCWZvdW5kX251bV9yb290ID0gMzsKKwkJCX0gZWxzZSB7CisJCQkJZm91bmRfbnVtX3Jvb3QgPSA0OworCQkJCWJpdDRfcm9vdDMgPSB0ZXN0X3Jvb3Q7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKGZvdW5kX251bV9yb290ICE9IDQpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJYml0NF9yb290MF9pbnYgPSBnZjQwOTZfaW52KGJpdDRfcm9vdDApOworCQliaXQ0X3Jvb3QxX2ludiA9IGdmNDA5Nl9pbnYoYml0NF9yb290MSk7CisJCWJpdDRfcm9vdDJfaW52ID0gZ2Y0MDk2X2ludihiaXQ0X3Jvb3QyKTsKKwkJYml0NF9yb290M19pbnYgPSBnZjQwOTZfaW52KGJpdDRfcm9vdDMpOworCQlmaW5kXzRiaXRfZXJyX3BhdHMoY2hrX3N5bmRyb21lX2xpc3RbMF0sCisJCQkJICAgY2hrX3N5bmRyb21lX2xpc3RbMV0sCisJCQkJICAgY2hrX3N5bmRyb21lX2xpc3RbMl0sCisJCQkJICAgY2hrX3N5bmRyb21lX2xpc3RbM10sCisJCQkJICAgYml0NF9yb290MF9pbnYsIGJpdDRfcm9vdDFfaW52LCBiaXQ0X3Jvb3QyX2ludiwgYml0NF9yb290M19pbnYsIGVycl9wYXRzKTsKKwkJZXJyX2luZm9bMF0gPSAweDQ7CisJCWVycl9pbmZvWzFdID0gKDB4NTVlIC0gZXJyX3BvcyhiaXQ0X3Jvb3QwX2ludikpOworCQllcnJfaW5mb1syXSA9ICgweDU1ZSAtIGVycl9wb3MoYml0NF9yb290MV9pbnYpKTsKKwkJZXJyX2luZm9bM10gPSAoMHg1NWUgLSBlcnJfcG9zKGJpdDRfcm9vdDJfaW52KSk7CisJCWVycl9pbmZvWzRdID0gKDB4NTVlIC0gZXJyX3BvcyhiaXQ0X3Jvb3QzX2ludikpOworCQllcnJfaW5mb1s1XSA9IGVycl9wYXRzWzBdOworCQllcnJfaW5mb1s2XSA9IGVycl9wYXRzWzFdOworCQllcnJfaW5mb1s3XSA9IGVycl9wYXRzWzJdOworCQllcnJfaW5mb1s4XSA9IGVycl9wYXRzWzNdOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3ZvaWQgY29ycmVjdF8xMmJpdF9zeW1ib2wodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBzaG9ydCBzeW0sCisJCQkgIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlpZiAodW5saWtlbHkoc3ltID4gMTM2NikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogc3ltYm9sICVkIG91dCBvZiByYW5nZTsgY2Fubm90IGNvcnJlY3RcbiIsIHN5bSk7CisJfSBlbHNlIGlmIChzeW0gPT0gMCkgeworCQlidWZbMF0gXj0gdmFsOworCX0gZWxzZSBpZiAoc3ltICYgMSkgeworCQlidWZbMSsoMyooc3ltLTEpKS8yXSBePSAodmFsID4+IDQpOworCQlidWZbMisoMyooc3ltLTEpKS8yXSBePSAoKHZhbCAmIDB4ZikgPDwgNCk7CisJfSBlbHNlIHsKKwkJYnVmWzIrKDMqKHN5bS0yKSkvMl0gXj0gKHZhbCA+PiA4KTsKKwkJYnVmWzMrKDMqKHN5bS0yKSkvMl0gXj0gKHZhbCAmIDB4ZmYpOworCX0KK30KKworc3RhdGljIGludCBkZWJ1Z2VjYyA9IDA7Cittb2R1bGVfcGFyYW0oZGVidWdlY2MsIGludCwgMDY0NCk7CisKK2ludCBjYWZlX2NvcnJlY3RfZWNjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJICAgICB1bnNpZ25lZCBzaG9ydCAqY2hrX3N5bmRyb21lX2xpc3QpCit7CisJdW5zaWduZWQgc2hvcnQgZXJyX2luZm9bOV07CisJaW50IGk7CisKKwlpZiAoZGVidWdlY2MpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FmZV9jb3JyZWN0X2VjYyBpbnZva2VkLiBTeW5kcm9tZXMgJXggJXggJXggJXggJXggJXggJXggJXhcbiIsCisJCSAgICAgICBjaGtfc3luZHJvbWVfbGlzdFswXSwgY2hrX3N5bmRyb21lX2xpc3RbMV0sCisJCSAgICAgICBjaGtfc3luZHJvbWVfbGlzdFsyXSwgY2hrX3N5bmRyb21lX2xpc3RbM10sCisJCSAgICAgICBjaGtfc3luZHJvbWVfbGlzdFs0XSwgY2hrX3N5bmRyb21lX2xpc3RbNV0sCisJCSAgICAgICBjaGtfc3luZHJvbWVfbGlzdFs2XSwgY2hrX3N5bmRyb21lX2xpc3RbN10pOworCQlmb3IgKGk9MDsgaSA8IDIwNDg7IGkrPTE2KSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJEICUwNHg6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkJICAgICAgIGksCisJCQkgICAgICAgYnVmW2ldLCBidWZbaSsxXSwgYnVmW2krMl0sIGJ1ZltpKzNdLAorCQkJICAgICAgIGJ1ZltpKzRdLCBidWZbaSs1XSwgYnVmW2krNl0sIGJ1ZltpKzddLAorCQkJICAgICAgIGJ1ZltpKzhdLCBidWZbaSs5XSwgYnVmW2krMTBdLCBidWZbaSsxMV0sCisJCQkgICAgICAgYnVmW2krMTJdLCBidWZbaSsxM10sIGJ1ZltpKzE0XSwgYnVmW2krMTVdKTsKKwkJfQorCQlmb3IgKCA7IGkgPCAyMTEyOyBpKz0xNikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTyAgICUwMng6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkJICAgICAgIGkgLSAyMDQ4LAorCQkJICAgICAgIGJ1ZltpXSwgYnVmW2krMV0sIGJ1ZltpKzJdLCBidWZbaSszXSwKKwkJCSAgICAgICBidWZbaSs0XSwgYnVmW2krNV0sIGJ1ZltpKzZdLCBidWZbaSs3XSwKKwkJCSAgICAgICBidWZbaSs4XSwgYnVmW2krOV0sIGJ1ZltpKzEwXSwgYnVmW2krMTFdLAorCQkJICAgICAgIGJ1ZltpKzEyXSwgYnVmW2krMTNdLCBidWZbaSsxNF0sIGJ1ZltpKzE1XSk7CisJCX0KKwl9CisKKworCisJaWYgKGNoa19ub19lcnJfb25seShjaGtfc3luZHJvbWVfbGlzdCwgZXJyX2luZm8pICYmCisJICAgIGNoa18xX2Vycl9vbmx5KGNoa19zeW5kcm9tZV9saXN0LCBlcnJfaW5mbykgJiYKKwkgICAgY2hrXzJfZXJyX29ubHkoY2hrX3N5bmRyb21lX2xpc3QsIGVycl9pbmZvKSAmJgorCSAgICBjaGtfM19lcnJfb25seShjaGtfc3luZHJvbWVfbGlzdCwgZXJyX2luZm8pICYmCisJICAgIGNoa180X2Vycl9vbmx5KGNoa19zeW5kcm9tZV9saXN0LCBlcnJfaW5mbykpIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZm9yIChpPTA7IGkgPCBlcnJfaW5mb1swXTsgaSsrKSB7CisJCWlmIChkZWJ1Z2VjYykKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNvcnJlY3Qgc3ltYm9sICVkIHdpdGggMHglMDN4XG4iLAorCQkJICAgICAgIGVycl9pbmZvWzEraV0sIGVycl9pbmZvWzUraV0pOworCisJCWNvcnJlY3RfMTJiaXRfc3ltYm9sKGJ1ZiwgZXJyX2luZm9bMStpXSwgZXJyX2luZm9bNStpXSk7CisJfQorCisJcmV0dXJuIGVycl9pbmZvWzBdOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKaW5kZXggOTQ5MjRkNS4uODI5NjMwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYwpAQCAtMTEsNyArMTEsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogIE92ZXJ2aWV3OgotICogICBUaGlzIGlzIGEgZGV2aWNlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBmb3VuZCBvbiAKKyAqICAgVGhpcyBpcyBhIGRldmljZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgZm91bmQgb24KICAqICAgdGhlIEFNRCBDUzU1MzUvQ1M1NTM2IGNvbXBhbmlvbiBjaGlwc2V0cyBmb3IgdGhlIEdlb2RlIHByb2Nlc3Nvci4KICAqCiAgKi8KQEAgLTMwMyw3ICszMDMsNyBAQAogCQkJZXJyID0gY3M1NTN4X2luaXRfb25lKGksICEhKHZhbCAmIEZMU0hfTUVNX0lPKSwgdmFsICYgMHhGRkZGRkZGRik7CiAJfQogCi0JLyogUmVnaXN0ZXIgYWxsIGRldmljZXMgdG9nZXRoZXIgaGVyZS4gVGhpcyBtZWFucyB3ZSBjYW4gZWFzaWx5IGhhY2sgaXQgdG8gCisJLyogUmVnaXN0ZXIgYWxsIGRldmljZXMgdG9nZXRoZXIgaGVyZS4gVGhpcyBtZWFucyB3ZSBjYW4gZWFzaWx5IGhhY2sgaXQgdG8KIAkgICBkbyBtdGRjb25jYXQgZXRjLiBpZiB3ZSB3YW50IHRvLiAqLwogCWZvciAoaSA9IDA7IGkgPCBOUl9DUzU1M1hfQ09OVFJPTExFUlM7IGkrKykgewogCQlpZiAoY3M1NTN4X210ZFtpXSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMgYi9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwppbmRleCA2MTA3ZjUzLi4xMjYwOGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwpAQCAtMTYzNSwxMyArMTYzNSwxMiBAQAogCiAJbGVuID0gc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKwogCSAgICBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkgKyBzaXplb2Yoc3RydWN0IGRvY19wcml2KSArICgyICogc2l6ZW9mKHN0cnVjdCBuYW5kX2JidF9kZXNjcikpOwotCW10ZCA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwltdGQgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdGQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJEaXNrT25DaGlwIGttYWxsb2MgKCVkIGJ5dGVzKSBmYWlsZWQhXG4iLCBsZW4pOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQotCW1lbXNldChtdGQsIDAsIGxlbik7CiAKIAluYW5kCQkJPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAobXRkICsgMSk7CiAJZG9jCQkJPSAoc3RydWN0IGRvY19wcml2ICopIChuYW5kICsgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCA0MWJmY2FlLi5kZmU1NmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogCQkgKiBhY2Nlc3MKIAkJICovCiAJCW9mcyArPSBtdGQtPm9vYnNpemU7Ci0JCWNoaXAtPm9wcy5sZW4gPSAyOworCQljaGlwLT5vcHMubGVuID0gY2hpcC0+b3BzLm9vYmxlbiA9IDI7CiAJCWNoaXAtPm9wcy5kYXRidWYgPSBOVUxMOwogCQljaGlwLT5vcHMub29iYnVmID0gYnVmOwogCQljaGlwLT5vcHMub29ib2ZmcyA9IGNoaXAtPmJhZGJsb2NrcG9zICYgfjB4MDE7CkBAIC03NTUsNyArNzU1LDcgQEAKIH0KIAogLyoqCi0gKiBuYW5kX3JlYWRfcGFnZV9zd2VjYyAtIHtSRVBMQUNBQkxFXSBzb2Z0d2FyZSBlY2MgYmFzZWQgcGFnZSByZWFkIGZ1bmN0aW9uCisgKiBuYW5kX3JlYWRfcGFnZV9zd2VjYyAtIFtSRVBMQUNBQkxFXSBzb2Z0d2FyZSBlY2MgYmFzZWQgcGFnZSByZWFkIGZ1bmN0aW9uCiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKQEAgLTc5NSw3ICs3OTUsNyBAQAogfQogCiAvKioKLSAqIG5hbmRfcmVhZF9wYWdlX2h3ZWNjIC0ge1JFUExBQ0FCTEVdIGhhcmR3YXJlIGVjYyBiYXNlZCBwYWdlIHJlYWQgZnVuY3Rpb24KKyAqIG5hbmRfcmVhZF9wYWdlX2h3ZWNjIC0gW1JFUExBQ0FCTEVdIGhhcmR3YXJlIGVjYyBiYXNlZCBwYWdlIHJlYWQgZnVuY3Rpb24KICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQpAQCAtODM5LDcgKzgzOSw3IEBACiB9CiAKIC8qKgotICogbmFuZF9yZWFkX3BhZ2Vfc3luZHJvbWUgLSB7UkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIHN5bmRyb20gYmFzZWQgcGFnZSByZWFkCisgKiBuYW5kX3JlYWRfcGFnZV9zeW5kcm9tZSAtIFtSRVBMQUNBQkxFXSBoYXJkd2FyZSBlY2Mgc3luZHJvbSBiYXNlZCBwYWdlIHJlYWQKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQpAQCAtODk3LDEyICs4OTcsMTEgQEAKICAqIEBjaGlwOgluYW5kIGNoaXAgc3RydWN0dXJlCiAgKiBAb29iOglvb2IgZGVzdGluYXRpb24gYWRkcmVzcwogICogQG9wczoJb29iIG9wcyBzdHJ1Y3R1cmUKKyAqIEBsZW46CXNpemUgb2Ygb29iIHRvIHRyYW5zZmVyCiAgKi8KIHN0YXRpYyB1aW50OF90ICpuYW5kX3RyYW5zZmVyX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50OF90ICpvb2IsCi0JCQkJICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKKwkJCQkgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzLCBzaXplX3QgbGVuKQogewotCXNpemVfdCBsZW4gPSBvcHMtPm9vYmxlbjsKLQogCXN3aXRjaChvcHMtPm1vZGUpIHsKIAogCWNhc2UgTVREX09PQl9QTEFDRToKQEAgLTk2MCw2ICs5NTksNyBAQAogCWludCBzbmRjbWQgPSAxOwogCWludCByZXQgPSAwOwogCXVpbnQzMl90IHJlYWRsZW4gPSBvcHMtPmxlbjsKKwl1aW50MzJfdCBvb2JyZWFkbGVuID0gb3BzLT5vb2JsZW47CiAJdWludDhfdCAqYnVmcG9pLCAqb29iLCAqYnVmOwogCiAJc3RhdHMgPSBtdGQtPmVjY19zdGF0czsKQEAgLTk3MSw3ICs5NzEsNiBAQAogCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOwogCiAJY29sID0gKGludCkoZnJvbSAmIChtdGQtPndyaXRlc2l6ZSAtIDEpKTsKLQljaGlwLT5vb2JfcG9pID0gY2hpcC0+YnVmZmVycy0+b29icmJ1ZjsKIAogCWJ1ZiA9IG9wcy0+ZGF0YnVmOwogCW9vYiA9IG9wcy0+b29iYnVmOwpAQCAtMTAwNywxMCArMTAwNiwxNyBAQAogCiAJCQlpZiAodW5saWtlbHkob29iKSkgewogCQkJCS8qIFJhdyBtb2RlIGRvZXMgZGF0YTpvb2I6ZGF0YTpvb2IgKi8KLQkJCQlpZiAob3BzLT5tb2RlICE9IE1URF9PT0JfUkFXKQotCQkJCQlvb2IgPSBuYW5kX3RyYW5zZmVyX29vYihjaGlwLCBvb2IsIG9wcyk7Ci0JCQkJZWxzZQotCQkJCQlidWYgPSBuYW5kX3RyYW5zZmVyX29vYihjaGlwLCBidWYsIG9wcyk7CisJCQkJaWYgKG9wcy0+bW9kZSAhPSBNVERfT09CX1JBVykgeworCQkJCQlpbnQgdG9yZWFkID0gbWluKG9vYnJlYWRsZW4sCisJCQkJCQljaGlwLT5lY2MubGF5b3V0LT5vb2JhdmFpbCk7CisJCQkJCWlmICh0b3JlYWQpIHsKKwkJCQkJCW9vYiA9IG5hbmRfdHJhbnNmZXJfb29iKGNoaXAsCisJCQkJCQkJb29iLCBvcHMsIHRvcmVhZCk7CisJCQkJCQlvb2JyZWFkbGVuIC09IHRvcmVhZDsKKwkJCQkJfQorCQkJCX0gZWxzZQorCQkJCQlidWYgPSBuYW5kX3RyYW5zZmVyX29vYihjaGlwLAorCQkJCQkJYnVmLCBvcHMsIG10ZC0+b29ic2l6ZSk7CiAJCQl9CiAKIAkJCWlmICghKGNoaXAtPm9wdGlvbnMgJiBOQU5EX05PX1JFQURSRFkpKSB7CkBAIC0xMDU3LDYgKzEwNjMsOCBAQAogCX0KIAogCW9wcy0+cmV0bGVuID0gb3BzLT5sZW4gLSAoc2l6ZV90KSByZWFkbGVuOworCWlmIChvb2IpCisJCW9wcy0+b29icmV0bGVuID0gb3BzLT5vb2JsZW4gLSBvb2JyZWFkbGVuOwogCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTEyNTcsMTIgKzEyNjUsMTggQEAKIAlpbnQgcGFnZSwgcmVhbHBhZ2UsIGNoaXBuciwgc25kY21kID0gMTsKIAlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCWludCBibGtjaGVjayA9ICgxIDw8IChjaGlwLT5waHlzX2VyYXNlX3NoaWZ0IC0gY2hpcC0+cGFnZV9zaGlmdCkpIC0gMTsKLQlpbnQgcmVhZGxlbiA9IG9wcy0+bGVuOworCWludCByZWFkbGVuID0gb3BzLT5vb2JsZW47CisJaW50IGxlbjsKIAl1aW50OF90ICpidWYgPSBvcHMtPm9vYmJ1ZjsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX3JlYWRfb29iOiBmcm9tID0gMHglMDhMeCwgbGVuID0gJWlcbiIsCiAJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylmcm9tLCByZWFkbGVuKTsKIAorCWlmIChvcHMtPm1vZGUgPT0gTVREX09PQl9SQVcpCisJCWxlbiA9IG10ZC0+b29ic2l6ZTsKKwllbHNlCisJCWxlbiA9IGNoaXAtPmVjYy5sYXlvdXQtPm9vYmF2YWlsOworCiAJY2hpcG5yID0gKGludCkoZnJvbSA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKIAljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAKQEAgLTEyNzAsMTEgKzEyODQsMTEgQEAKIAlyZWFscGFnZSA9IChpbnQpKGZyb20gPj4gY2hpcC0+cGFnZV9zaGlmdCk7CiAJcGFnZSA9IHJlYWxwYWdlICYgY2hpcC0+cGFnZW1hc2s7CiAKLQljaGlwLT5vb2JfcG9pID0gY2hpcC0+YnVmZmVycy0+b29icmJ1ZjsKLQogCXdoaWxlKDEpIHsKIAkJc25kY21kID0gY2hpcC0+ZWNjLnJlYWRfb29iKG10ZCwgY2hpcCwgcGFnZSwgc25kY21kKTsKLQkJYnVmID0gbmFuZF90cmFuc2Zlcl9vb2IoY2hpcCwgYnVmLCBvcHMpOworCisJCWxlbiA9IG1pbihsZW4sIHJlYWRsZW4pOworCQlidWYgPSBuYW5kX3RyYW5zZmVyX29vYihjaGlwLCBidWYsIG9wcywgbGVuKTsKIAogCQlpZiAoIShjaGlwLT5vcHRpb25zICYgTkFORF9OT19SRUFEUkRZKSkgewogCQkJLyoKQEAgLTEyODksNyArMTMwMyw3IEBACiAJCQkJbmFuZF93YWl0X3JlYWR5KG10ZCk7CiAJCX0KIAotCQlyZWFkbGVuIC09IG9wcy0+b29ibGVuOworCQlyZWFkbGVuIC09IGxlbjsKIAkJaWYgKCFyZWFkbGVuKQogCQkJYnJlYWs7CiAKQEAgLTEzMTEsNyArMTMyNSw3IEBACiAJCQlzbmRjbWQgPSAxOwogCX0KIAotCW9wcy0+cmV0bGVuID0gb3BzLT5sZW47CisJb3BzLT5vb2JyZXRsZW4gPSBvcHMtPm9vYmxlbjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMzMiw3ICsxMzQ2LDcgQEAKIAlvcHMtPnJldGxlbiA9IDA7CiAKIAkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCi0JaWYgKChmcm9tICsgb3BzLT5sZW4pID4gbXRkLT5zaXplKSB7CisJaWYgKG9wcy0+ZGF0YnVmICYmIChmcm9tICsgb3BzLT5sZW4pID4gbXRkLT5zaXplKSB7CiAJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3JlYWRfb29iOiAiCiAJCSAgICAgICJBdHRlbXB0IHJlYWQgYmV5b25kIGVuZCBvZiBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNzUsNyArMTM4OSw3IEBACiB9CiAKIC8qKgotICogbmFuZF93cml0ZV9wYWdlX3N3ZWNjIC0ge1JFUExBQ0FCTEVdIHNvZnR3YXJlIGVjYyBiYXNlZCBwYWdlIHdyaXRlIGZ1bmN0aW9uCisgKiBuYW5kX3dyaXRlX3BhZ2Vfc3dlY2MgLSBbUkVQTEFDQUJMRV0gc29mdHdhcmUgZWNjIGJhc2VkIHBhZ2Ugd3JpdGUgZnVuY3Rpb24KICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJZGF0YSBidWZmZXIKQEAgLTE0MDEsNyArMTQxNSw3IEBACiB9CiAKIC8qKgotICogbmFuZF93cml0ZV9wYWdlX2h3ZWNjIC0ge1JFUExBQ0FCTEVdIGhhcmR3YXJlIGVjYyBiYXNlZCBwYWdlIHdyaXRlIGZ1bmN0aW9uCisgKiBuYW5kX3dyaXRlX3BhZ2VfaHdlY2MgLSBbUkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIGJhc2VkIHBhZ2Ugd3JpdGUgZnVuY3Rpb24KICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJZGF0YSBidWZmZXIKQEAgLTE0MjksNyArMTQ0Myw3IEBACiB9CiAKIC8qKgotICogbmFuZF93cml0ZV9wYWdlX3N5bmRyb21lIC0ge1JFUExBQ0FCTEVdIGhhcmR3YXJlIGVjYyBzeW5kcm9tIGJhc2VkIHBhZ2Ugd3JpdGUKKyAqIG5hbmRfd3JpdGVfcGFnZV9zeW5kcm9tZSAtIFtSRVBMQUNBQkxFXSBoYXJkd2FyZSBlY2Mgc3luZHJvbSBiYXNlZCBwYWdlIHdyaXRlCiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWRhdGEgYnVmZmVyCkBAIC0xNTc3LDcgKzE1OTEsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi0jZGVmaW5lIE5PVEFMSUdORUQoeCkgKHggJiAobXRkLT53cml0ZXNpemUtMSkpICE9IDAKKyNkZWZpbmUgTk9UQUxJR05FRCh4KQkoeCAmIChjaGlwLT5zdWJwYWdlc2l6ZSAtIDEpKSAhPSAwCiAKIC8qKgogICogbmFuZF9kb193cml0ZV9vcHMgLSBbSW50ZXJuYWxdIE5BTkQgd3JpdGUgd2l0aCBFQ0MKQEAgLTE1OTAsMTUgKzE2MDQsMTYgQEAKIHN0YXRpYyBpbnQgbmFuZF9kb193cml0ZV9vcHMoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKIAkJCSAgICAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7Ci0JaW50IGNoaXBuciwgcmVhbHBhZ2UsIHBhZ2UsIGJsb2NrbWFzazsKKwlpbnQgY2hpcG5yLCByZWFscGFnZSwgcGFnZSwgYmxvY2ttYXNrLCBjb2x1bW47CiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1aW50MzJfdCB3cml0ZWxlbiA9IG9wcy0+bGVuOwogCXVpbnQ4X3QgKm9vYiA9IG9wcy0+b29iYnVmOwogCXVpbnQ4X3QgKmJ1ZiA9IG9wcy0+ZGF0YnVmOwotCWludCBieXRlcyA9IG10ZC0+d3JpdGVzaXplOwotCWludCByZXQ7CisJaW50IHJldCwgc3VicGFnZTsKIAogCW9wcy0+cmV0bGVuID0gMDsKKwlpZiAoIXdyaXRlbGVuKQorCQlyZXR1cm4gMDsKIAogCS8qIHJlamVjdCB3cml0ZXMsIHdoaWNoIGFyZSBub3QgcGFnZSBhbGlnbmVkICovCiAJaWYgKE5PVEFMSUdORUQodG8pIHx8IE5PVEFMSUdORUQob3BzLT5sZW4pKSB7CkBAIC0xNjA3LDggKzE2MjIsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCF3cml0ZWxlbikKLQkJcmV0dXJuIDA7CisJY29sdW1uID0gdG8gJiAobXRkLT53cml0ZXNpemUgLSAxKTsKKwlzdWJwYWdlID0gY29sdW1uIHx8ICh3cml0ZWxlbiAmIChtdGQtPndyaXRlc2l6ZSAtIDEpKTsKKworCWlmIChzdWJwYWdlICYmIG9vYikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAljaGlwbnIgPSAoaW50KSh0byA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKIAljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CkBAIC0xNjI2LDE1ICsxNjQ0LDI5IEBACiAJICAgIChjaGlwLT5wYWdlYnVmIDw8IGNoaXAtPnBhZ2Vfc2hpZnQpIDwgKHRvICsgb3BzLT5sZW4pKQogCQljaGlwLT5wYWdlYnVmID0gLTE7CiAKLQljaGlwLT5vb2JfcG9pID0gY2hpcC0+YnVmZmVycy0+b29id2J1ZjsKKwkvKiBJZiB3ZSdyZSBub3QgZ2l2ZW4gZXhwbGljaXQgT09CIGRhdGEsIGxldCBpdCBiZSAweEZGICovCisJaWYgKGxpa2VseSghb29iKSkKKwkJbWVtc2V0KGNoaXAtPm9vYl9wb2ksIDB4ZmYsIG10ZC0+b29ic2l6ZSk7CiAKIAl3aGlsZSgxKSB7CisJCWludCBieXRlcyA9IG10ZC0+d3JpdGVzaXplOwogCQlpbnQgY2FjaGVkID0gd3JpdGVsZW4gPiBieXRlcyAmJiBwYWdlICE9IGJsb2NrbWFzazsKKwkJdWludDhfdCAqd2J1ZiA9IGJ1ZjsKKworCQkvKiBQYXJ0aWFsIHBhZ2Ugd3JpdGUgPyAqLworCQlpZiAodW5saWtlbHkoY29sdW1uIHx8IHdyaXRlbGVuIDwgKG10ZC0+d3JpdGVzaXplIC0gMSkpKSB7CisJCQljYWNoZWQgPSAwOworCQkJYnl0ZXMgPSBtaW5fdChpbnQsIGJ5dGVzIC0gY29sdW1uLCAoaW50KSB3cml0ZWxlbik7CisJCQljaGlwLT5wYWdlYnVmID0gLTE7CisJCQltZW1zZXQoY2hpcC0+YnVmZmVycy0+ZGF0YWJ1ZiwgMHhmZiwgbXRkLT53cml0ZXNpemUpOworCQkJbWVtY3B5KCZjaGlwLT5idWZmZXJzLT5kYXRhYnVmW2NvbHVtbl0sIGJ1ZiwgYnl0ZXMpOworCQkJd2J1ZiA9IGNoaXAtPmJ1ZmZlcnMtPmRhdGFidWY7CisJCX0KIAogCQlpZiAodW5saWtlbHkob29iKSkKIAkJCW9vYiA9IG5hbmRfZmlsbF9vb2IoY2hpcCwgb29iLCBvcHMpOwogCi0JCXJldCA9IGNoaXAtPndyaXRlX3BhZ2UobXRkLCBjaGlwLCBidWYsIHBhZ2UsIGNhY2hlZCwKKwkJcmV0ID0gY2hpcC0+d3JpdGVfcGFnZShtdGQsIGNoaXAsIHdidWYsIHBhZ2UsIGNhY2hlZCwKIAkJCQkgICAgICAgKG9wcy0+bW9kZSA9PSBNVERfT09CX1JBVykpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CkBAIC0xNjQzLDYgKzE2NzUsNyBAQAogCQlpZiAoIXdyaXRlbGVuKQogCQkJYnJlYWs7CiAKKwkJY29sdW1uID0gMDsKIAkJYnVmICs9IGJ5dGVzOwogCQlyZWFscGFnZSsrOwogCkBAIC0xNjU1LDEwICsxNjg4LDkgQEAKIAkJfQogCX0KIAotCWlmICh1bmxpa2VseShvb2IpKQotCQltZW1zZXQoY2hpcC0+b29iX3BvaSwgMHhmZiwgbXRkLT5vb2JzaXplKTsKLQogCW9wcy0+cmV0bGVuID0gb3BzLT5sZW4gLSB3cml0ZWxlbjsKKwlpZiAodW5saWtlbHkob29iKSkKKwkJb3BzLT5vb2JyZXRsZW4gPSBvcHMtPm9vYmxlbjsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNzE0LDEwICsxNzQ2LDEwIEBACiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX3dyaXRlX29vYjogdG8gPSAweCUwOHgsIGxlbiA9ICVpXG4iLAotCSAgICAgICh1bnNpZ25lZCBpbnQpdG8sIChpbnQpb3BzLT5sZW4pOworCSAgICAgICh1bnNpZ25lZCBpbnQpdG8sIChpbnQpb3BzLT5vb2JsZW4pOwogCiAJLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2UgKi8KLQlpZiAoKG9wcy0+b29ib2ZmcyArIG9wcy0+bGVuKSA+IG10ZC0+b29ic2l6ZSkgeworCWlmICgob3BzLT5vb2JvZmZzICsgb3BzLT5vb2JsZW4pID4gbXRkLT5vb2JzaXplKSB7CiAJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX29vYjogIgogCQkgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzQ1LDcgKzE3NzcsNiBAQAogCWlmIChwYWdlID09IGNoaXAtPnBhZ2VidWYpCiAJCWNoaXAtPnBhZ2VidWYgPSAtMTsKIAotCWNoaXAtPm9vYl9wb2kgPSBjaGlwLT5idWZmZXJzLT5vb2J3YnVmOwogCW1lbXNldChjaGlwLT5vb2JfcG9pLCAweGZmLCBtdGQtPm9vYnNpemUpOwogCW5hbmRfZmlsbF9vb2IoY2hpcCwgb3BzLT5vb2JidWYsIG9wcyk7CiAJc3RhdHVzID0gY2hpcC0+ZWNjLndyaXRlX29vYihtdGQsIGNoaXAsIHBhZ2UgJiBjaGlwLT5wYWdlbWFzayk7CkBAIC0xNzU0LDcgKzE3ODUsNyBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKLQlvcHMtPnJldGxlbiA9IG9wcy0+bGVuOworCW9wcy0+b29icmV0bGVuID0gb3BzLT5vb2JsZW47CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3NzQsNyArMTgwNSw3IEBACiAJb3BzLT5yZXRsZW4gPSAwOwogCiAJLyogRG8gbm90IGFsbG93IHdyaXRlcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KLQlpZiAoKHRvICsgb3BzLT5sZW4pID4gbXRkLT5zaXplKSB7CisJaWYgKG9wcy0+ZGF0YnVmICYmICh0byArIG9wcy0+bGVuKSA+IG10ZC0+c2l6ZSkgewogCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX29vYjogIgogCQkgICAgICAiQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMTg4LDggKzIyMTksOCBAQAogCS8qIE5ld2VyIGRldmljZXMgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIGluIGFkZGl0aW9uYWwgaWQgYnl0ZXMgKi8KIAlpZiAoIXR5cGUtPnBhZ2VzaXplKSB7CiAJCWludCBleHRpZDsKLQkJLyogVGhlIDNyZCBpZCBieXRlIGNvbnRhaW5zIG5vbiByZWxldmFudCBkYXRhIEFUTSAqLwotCQlleHRpZCA9IGNoaXAtPnJlYWRfYnl0ZShtdGQpOworCQkvKiBUaGUgM3JkIGlkIGJ5dGUgaG9sZHMgTUxDIC8gbXVsdGljaGlwIGRhdGEgKi8KKwkJY2hpcC0+Y2VsbGluZm8gPSBjaGlwLT5yZWFkX2J5dGUobXRkKTsKIAkJLyogVGhlIDR0aCBpZCBieXRlIGlzIHRoZSBpbXBvcnRhbnQgb25lICovCiAJCWV4dGlkID0gY2hpcC0+cmVhZF9ieXRlKG10ZCk7CiAJCS8qIENhbGMgcGFnZXNpemUgKi8KQEAgLTIzNDksOCArMjM4MCw4IEBACiAJaWYgKCFjaGlwLT5idWZmZXJzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIFByZXNldCB0aGUgaW50ZXJuYWwgb29iIHdyaXRlIGJ1ZmZlciAqLwotCW1lbXNldChjaGlwLT5idWZmZXJzLT5vb2J3YnVmLCAweGZmLCBtdGQtPm9vYnNpemUpOworCS8qIFNldCB0aGUgaW50ZXJuYWwgb29iIGJ1ZmZlciBsb2NhdGlvbiwganVzdCBhZnRlciB0aGUgcGFnZSBkYXRhICovCisJY2hpcC0+b29iX3BvaSA9IGNoaXAtPmJ1ZmZlcnMtPmRhdGFidWYgKyBtdGQtPndyaXRlc2l6ZTsKIAogCS8qCiAJICogSWYgbm8gZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lIGlzIGdpdmVuLCBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgb25lCkBAIC0yNDY5LDYgKzI1MDAsMjQgQEAKIAl9CiAJY2hpcC0+ZWNjLnRvdGFsID0gY2hpcC0+ZWNjLnN0ZXBzICogY2hpcC0+ZWNjLmJ5dGVzOwogCisJLyoKKwkgKiBBbGxvdyBzdWJwYWdlIHdyaXRlcyB1cCB0byBlY2Muc3RlcHMuIE5vdCBwb3NzaWJsZSBmb3IgTUxDCisJICogRkxBU0guCisJICovCisJaWYgKCEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfTk9fU1VCUEFHRV9XUklURSkgJiYKKwkgICAgIShjaGlwLT5jZWxsaW5mbyAmIE5BTkRfQ0lfQ0VMTFRZUEVfTVNLKSkgeworCQlzd2l0Y2goY2hpcC0+ZWNjLnN0ZXBzKSB7CisJCWNhc2UgMjoKKwkJCW10ZC0+c3VicGFnZV9zZnQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJY2FzZSA4OgorCQkJbXRkLT5zdWJwYWdlX3NmdCA9IDI7CisJCQlicmVhazsKKwkJfQorCX0KKwljaGlwLT5zdWJwYWdlc2l6ZSA9IG10ZC0+d3JpdGVzaXplID4+IG10ZC0+c3VicGFnZV9zZnQ7CisKIAkvKiBJbml0aWFsaXplIHN0YXRlICovCiAJY2hpcC0+c3RhdGUgPSBGTF9SRUFEWTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jCmluZGV4IDk0MDI2NTMuLjVlMTIxY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMKQEAgLTMzMyw3ICszMzMsNiBAQAogCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CiAJaW50IGosIHJldDsKIAotCW9wcy5sZW4gPSBtdGQtPm9vYnNpemU7CiAJb3BzLm9vYmxlbiA9IG10ZC0+b29ic2l6ZTsKIAlvcHMub29iYnVmID0gYnVmOwogCW9wcy5vb2JvZmZzID0gMDsKQEAgLTY3NiwxMCArNjc1LDEwIEBACiAJCQkJICAgICAgICJiYWQgYmxvY2sgdGFibGVcbiIpOwogCQkJfQogCQkJLyogUmVhZCBvb2IgZGF0YSAqLwotCQkJb3BzLmxlbiA9IChsZW4gPj4gdGhpcy0+cGFnZV9zaGlmdCkgKiBtdGQtPm9vYnNpemU7CisJCQlvcHMub29ibGVuID0gKGxlbiA+PiB0aGlzLT5wYWdlX3NoaWZ0KSAqIG10ZC0+b29ic2l6ZTsKIAkJCW9wcy5vb2JidWYgPSAmYnVmW2xlbl07CiAJCQlyZXMgPSBtdGQtPnJlYWRfb29iKG10ZCwgdG8gKyBtdGQtPndyaXRlc2l6ZSwgJm9wcyk7Ci0JCQlpZiAocmVzIDwgMCB8fCBvcHMucmV0bGVuICE9IG9wcy5sZW4pCisJCQlpZiAocmVzIDwgMCB8fCBvcHMub29icmV0bGVuICE9IG9wcy5vb2JsZW4pCiAJCQkJZ290byBvdXRlcnI7CiAKIAkJCS8qIENhbGMgdGhlIGJ5dGUgb2Zmc2V0IGluIHRoZSBidWZmZXIgKi8KQEAgLTk2MSwxNCArOTYwLDEyIEBACiAJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCA9IHRoaXMtPmJidF9tZDsKIAogCWxlbiA9IG10ZC0+c2l6ZSA+PiAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0ICsgMik7Ci0JLyogQWxsb2NhdGUgbWVtb3J5ICgyYml0IHBlciBibG9jaykgKi8KLQl0aGlzLT5iYnQgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJLyogQWxsb2NhdGUgbWVtb3J5ICgyYml0IHBlciBibG9jaykgYW5kIGNsZWFyIHRoZSBtZW1vcnkgYmFkIGJsb2NrIHRhYmxlICovCisJdGhpcy0+YmJ0ID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmICghdGhpcy0+YmJ0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAibmFuZF9zY2FuX2JidDogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQkvKiBDbGVhciB0aGUgbWVtb3J5IGJhZCBibG9jayB0YWJsZSAqLwotCW1lbXNldCh0aGlzLT5iYnQsIDB4MDAsIGxlbik7CiAKIAkvKiBJZiBubyBwcmltYXJ5IHRhYmxlIGRlY3JpcHRvciBpcyBnaXZlbiwgc2NhbiB0aGUgZGV2aWNlCiAJICogdG8gYnVpbGQgYSBtZW1vcnkgYmFzZWQgYmFkIGJsb2NrIHRhYmxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKaW5kZXggZGQ0MzhjYS4uZmRlNTkzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAJdG1wMiB8PSAocmVnMiAmIDB4MDEpIDw8IDA7IC8qIEI3IC0+IEIwICovCiAKIAkvKiBDYWxjdWxhdGUgZmluYWwgRUNDIGNvZGUgKi8KLSNpZmRlZiBDT05GSUdfTkFORF9FQ0NfU01DCisjaWZkZWYgQ09ORklHX01URF9OQU5EX0VDQ19TTUMKIAllY2NfY29kZVswXSA9IH50bXAyOwogCWVjY19jb2RlWzFdID0gfnRtcDE7CiAjZWxzZQpAQCAtMTQ4LDcgKzE0OCw3IEBACiB7CiAJdWludDhfdCBzMCwgczEsIHMyOwogCi0jaWZkZWYgQ09ORklHX05BTkRfRUNDX1NNQworI2lmZGVmIENPTkZJR19NVERfTkFORF9FQ0NfU01DCiAJczAgPSBjYWxjX2VjY1swXSBeIHJlYWRfZWNjWzBdOwogCXMxID0gY2FsY19lY2NbMV0gXiByZWFkX2VjY1sxXTsKIAlzMiA9IGNhbGNfZWNjWzJdIF4gcmVhZF9lY2NbMl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCmluZGV4IDU0NWZmMjUuLmMzYmNhOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCkBAIC0zNywxMCArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2lmZGVmIENPTkZJR19OU19BQlNfUE9TCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jZW5kaWYKLQogCiAvKiBEZWZhdWx0IHNpbXVsYXRvciBwYXJhbWV0ZXJzIHZhbHVlcyAqLwogI2lmICFkZWZpbmVkKENPTkZJR19OQU5EU0lNX0ZJUlNUX0lEX0JZVEUpICB8fCBcCkBAIC0xNjQsNyArMTYwLDcgQEAKIC8qIEFmdGVyIGEgY29tbWFuZCBpcyBpbnB1dCwgdGhlIHNpbXVsYXRvciBnb2VzIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0YXRlcyAqLwogI2RlZmluZSBTVEFURV9DTURfUkVBRDAgICAgICAgIDB4MDAwMDAwMDEgLyogcmVhZCBkYXRhIGZyb20gdGhlIGJlZ2lubmluZyBvZiBwYWdlICovCiAjZGVmaW5lIFNUQVRFX0NNRF9SRUFEMSAgICAgICAgMHgwMDAwMDAwMiAvKiByZWFkIGRhdGEgZnJvbSB0aGUgc2Vjb25kIGhhbGYgb2YgcGFnZSAqLwotI2RlZmluZSBTVEFURV9DTURfUkVBRFNUQVJUICAgICAgMHgwMDAwMDAwMyAvKiByZWFkIGRhdGEgc2Vjb25kIGNvbW1hbmQgKGxhcmdlIHBhZ2UgZGV2aWNlcykgKi8KKyNkZWZpbmUgU1RBVEVfQ01EX1JFQURTVEFSVCAgICAweDAwMDAwMDAzIC8qIHJlYWQgZGF0YSBzZWNvbmQgY29tbWFuZCAobGFyZ2UgcGFnZSBkZXZpY2VzKSAqLwogI2RlZmluZSBTVEFURV9DTURfUEFHRVBST0cgICAgIDB4MDAwMDAwMDQgLyogc3RhcnQgcGFnZSBwcm9ncmFtbSAqLwogI2RlZmluZSBTVEFURV9DTURfUkVBRE9PQiAgICAgIDB4MDAwMDAwMDUgLyogcmVhZCBPT0IgYXJlYSAqLwogI2RlZmluZSBTVEFURV9DTURfRVJBU0UxICAgICAgIDB4MDAwMDAwMDYgLyogc2VjdG9yIGVyYXNlIGZpcnN0IGNvbW1hbmQgKi8KQEAgLTIzMSw2ICsyMjcsMTQgQEAKICNkZWZpbmUgTlNfTUFYX1BSRVZTVEFURVMgMQogCiAvKgorICogQSB1bmlvbiB0byByZXByZXNlbnQgZmxhc2ggbWVtb3J5IGNvbnRlbnRzIGFuZCBmbGFzaCBidWZmZXIuCisgKi8KK3VuaW9uIG5zX21lbSB7CisJdV9jaGFyICpieXRlOyAgICAvKiBmb3IgYnl0ZSBhY2Nlc3MgKi8KKwl1aW50MTZfdCAqd29yZDsgIC8qIGZvciAxNi1iaXQgd29yZCBhY2Nlc3MgKi8KK307CisKKy8qCiAgKiBUaGUgc3RydWN0dXJlIHdoaWNoIGRlc2NyaWJlcyBhbGwgdGhlIGludGVybmFsIHNpbXVsYXRvciBkYXRhLgogICovCiBzdHJ1Y3QgbmFuZHNpbSB7CkBAIC0yNDcsMTcgKzI1MSwxMSBAQAogCXVpbnQxNl90IG5wc3RhdGVzOyAgICAgIC8qIG51bWJlciBvZiBwcmV2aW91cyBzdGF0ZXMgc2F2ZWQgKi8KIAl1aW50MTZfdCBzdGF0ZWlkeDsgICAgICAvKiBjdXJyZW50IHN0YXRlIGluZGV4ICovCiAKLQkvKiBUaGUgc2ltdWxhdGVkIE5BTkQgZmxhc2ggaW1hZ2UgKi8KLQl1bmlvbiBmbGFzaF9tZWRpYSB7Ci0JCXVfY2hhciAqYnl0ZTsKLQkJdWludDE2X3QgICAgKndvcmQ7Ci0JfSBtZW07CisJLyogVGhlIHNpbXVsYXRlZCBOQU5EIGZsYXNoIHBhZ2VzIGFycmF5ICovCisJdW5pb24gbnNfbWVtICpwYWdlczsKIAogCS8qIEludGVybmFsIGJ1ZmZlciBvZiBwYWdlICsgT09CIHNpemUgYnl0ZXMgKi8KLQl1bmlvbiBpbnRlcm5hbF9idWZmZXIgewotCQl1X2NoYXIgKmJ5dGU7ICAgIC8qIGZvciBieXRlIGFjY2VzcyAqLwotCQl1aW50MTZfdCAqd29yZDsgIC8qIGZvciAxNi1iaXQgd29yZCBhY2Nlc3MgKi8KLQl9IGJ1ZjsKKwl1bmlvbiBuc19tZW0gYnVmOwogCiAJLyogTkFORCBmbGFzaCAiZ2VvbWV0cnkiICovCiAJc3RydWN0IG5hbmRzaW5fZ2VvbWV0cnkgewpAQCAtMzQ2LDEyICszNDQsNDkgQEAKIHN0YXRpYyB1X2NoYXIgbnNfdmVyaWZ5X2J1ZltOU19MQVJHRVNUX1BBR0VfU0laRV07CiAKIC8qCisgKiBBbGxvY2F0ZSBhcnJheSBvZiBwYWdlIHBvaW50ZXJzIGFuZCBpbml0aWFsaXplIHRoZSBhcnJheSB0byBOVUxMCisgKiBwb2ludGVycy4KKyAqCisgKiBSRVRVUk5TOiAwIGlmIHN1Y2Nlc3MsIC1FTk9NRU0gaWYgbWVtb3J5IGFsbG9jIGZhaWxzLgorICovCitzdGF0aWMgaW50IGFsbG9jX2RldmljZShzdHJ1Y3QgbmFuZHNpbSAqbnMpCit7CisJaW50IGk7CisKKwlucy0+cGFnZXMgPSB2bWFsbG9jKG5zLT5nZW9tLnBnbnVtICogc2l6ZW9mKHVuaW9uIG5zX21lbSkpOworCWlmICghbnMtPnBhZ2VzKSB7CisJCU5TX0VSUigiYWxsb2NfbWFwOiB1bmFibGUgdG8gYWxsb2NhdGUgcGFnZSBhcnJheVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnMtPmdlb20ucGdudW07IGkrKykgeworCQlucy0+cGFnZXNbaV0uYnl0ZSA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlIGFueSBhbGxvY2F0ZWQgcGFnZXMsIGFuZCBmcmVlIHRoZSBhcnJheSBvZiBwYWdlIHBvaW50ZXJzLgorICovCitzdGF0aWMgdm9pZCBmcmVlX2RldmljZShzdHJ1Y3QgbmFuZHNpbSAqbnMpCit7CisJaW50IGk7CisKKwlpZiAobnMtPnBhZ2VzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBucy0+Z2VvbS5wZ251bTsgaSsrKSB7CisJCQlpZiAobnMtPnBhZ2VzW2ldLmJ5dGUpCisJCQkJa2ZyZWUobnMtPnBhZ2VzW2ldLmJ5dGUpOworCQl9CisJCXZmcmVlKG5zLT5wYWdlcyk7CisJfQorfQorCisvKgogICogSW5pdGlhbGl6ZSB0aGUgbmFuZHNpbSBzdHJ1Y3R1cmUuCiAgKgogICogUkVUVVJOUzogMCBpZiBzdWNjZXNzLCAtRVJSTk8gaWYgZmFpbHVyZS4KICAqLwotc3RhdGljIGludAotaW5pdF9uYW5kc2ltKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorc3RhdGljIGludCBpbml0X25hbmRzaW0oc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IChzdHJ1Y3QgbmFuZF9jaGlwICopbXRkLT5wcml2OwogCXN0cnVjdCBuYW5kc2ltICAgKm5zICAgPSAoc3RydWN0IG5hbmRzaW0gKikoY2hpcC0+cHJpdik7CkBAIC00MDUsNyArNDQwLDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChucy0+Z2VvbS50b3RzeiA8PSAoMTI4IDw8IDIwKSkgewotCQkJbnMtPmdlb20ucGdhZGRyYnl0ZXMgID0gNTsKKwkJCW5zLT5nZW9tLnBnYWRkcmJ5dGVzICA9IDQ7CiAJCQlucy0+Z2VvbS5zZWNhZGRyYnl0ZXMgPSAyOwogCQl9IGVsc2UgewogCQkJbnMtPmdlb20ucGdhZGRyYnl0ZXMgID0gNTsKQEAgLTQzOSwyMyArNDc0LDggQEAKIAlwcmludGsoInNlY3RvciBhZGRyZXNzIGJ5dGVzOiAldVxuIiwgICAgbnMtPmdlb20uc2VjYWRkcmJ5dGVzKTsKIAlwcmludGsoIm9wdGlvbnM6ICUjeFxuIiwgICAgICAgICAgICAgICAgbnMtPm9wdGlvbnMpOwogCi0JLyogTWFwIC8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGZsYXNoIGltYWdlICovCi0jaWZkZWYgQ09ORklHX05TX0FCU19QT1MKLQlucy0+bWVtLmJ5dGUgPSBpb3JlbWFwKENPTkZJR19OU19BQlNfUE9TLCBucy0+Z2VvbS50b3Rzem9vYik7Ci0JaWYgKCFucy0+bWVtLmJ5dGUpIHsKLQkJTlNfRVJSKCJpbml0X25hbmRzaW06IGZhaWxlZCB0byBtYXAgdGhlIE5BTkQgZmxhc2ggaW1hZ2UgYXQgYWRkcmVzcyAlcFxuIiwKLQkJCSh2b2lkICopQ09ORklHX05TX0FCU19QT1MpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0jZWxzZQotCW5zLT5tZW0uYnl0ZSA9IHZtYWxsb2MobnMtPmdlb20udG90c3pvb2IpOwotCWlmICghbnMtPm1lbS5ieXRlKSB7Ci0JCU5TX0VSUigiaW5pdF9uYW5kc2ltOiB1bmFibGUgdG8gYWxsb2NhdGUgJXUgYnl0ZXMgZm9yIGZsYXNoIGltYWdlXG4iLAotCQkJbnMtPmdlb20udG90c3pvb2IpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JbWVtc2V0KG5zLT5tZW0uYnl0ZSwgMHhGRiwgbnMtPmdlb20udG90c3pvb2IpOwotI2VuZGlmCisJaWYgKGFsbG9jX2RldmljZShucykgIT0gMCkKKwkJZ290byBlcnJvcjsKIAogCS8qIEFsbG9jYXRlIC8gaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgYnVmZmVyICovCiAJbnMtPmJ1Zi5ieXRlID0ga21hbGxvYyhucy0+Z2VvbS5wZ3N6b29iLCBHRlBfS0VSTkVMKTsKQEAgLTQ3NCwxMSArNDk0LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0jaWZkZWYgQ09ORklHX05TX0FCU19QT1MKLQlpb3VubWFwKG5zLT5tZW0uYnl0ZSk7Ci0jZWxzZQotCXZmcmVlKG5zLT5tZW0uYnl0ZSk7Ci0jZW5kaWYKKwlmcmVlX2RldmljZShucyk7CiAKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTQ4NiwxNiArNTAyLDEwIEBACiAvKgogICogRnJlZSB0aGUgbmFuZHNpbSBzdHJ1Y3R1cmUuCiAgKi8KLXN0YXRpYyB2b2lkCi1mcmVlX25hbmRzaW0oc3RydWN0IG5hbmRzaW0gKm5zKQorc3RhdGljIHZvaWQgZnJlZV9uYW5kc2ltKHN0cnVjdCBuYW5kc2ltICpucykKIHsKIAlrZnJlZShucy0+YnVmLmJ5dGUpOwotCi0jaWZkZWYgQ09ORklHX05TX0FCU19QT1MKLQlpb3VubWFwKG5zLT5tZW0uYnl0ZSk7Ci0jZWxzZQotCXZmcmVlKG5zLT5tZW0uYnl0ZSk7Ci0jZW5kaWYKKwlmcmVlX2RldmljZShucyk7CiAKIAlyZXR1cm47CiB9CkBAIC01MDMsOCArNTEzLDcgQEAKIC8qCiAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgJ3N0YXRlJyBzdGF0ZS4KICAqLwotc3RhdGljIGNoYXIgKgotZ2V0X3N0YXRlX25hbWUodWludDMyX3Qgc3RhdGUpCitzdGF0aWMgY2hhciAqZ2V0X3N0YXRlX25hbWUodWludDMyX3Qgc3RhdGUpCiB7CiAJc3dpdGNoIChOU19TVEFURShzdGF0ZSkpIHsKIAkJY2FzZSBTVEFURV9DTURfUkVBRDA6CkBAIC01NjIsOCArNTcxLDcgQEAKICAqCiAgKiBSRVRVUk5TOiAxIGlmIHdyb25nIGNvbW1hbmQsIDAgaWYgcmlnaHQuCiAgKi8KLXN0YXRpYyBpbnQKLWNoZWNrX2NvbW1hbmQoaW50IGNtZCkKK3N0YXRpYyBpbnQgY2hlY2tfY29tbWFuZChpbnQgY21kKQogewogCXN3aXRjaCAoY21kKSB7CiAKQEAgLTU4OSw4ICs1OTcsNyBAQAogLyoKICAqIFJldHVybnMgc3RhdGUgYWZ0ZXIgY29tbWFuZCBpcyBhY2NlcHRlZCBieSBjb21tYW5kIG51bWJlci4KICAqLwotc3RhdGljIHVpbnQzMl90Ci1nZXRfc3RhdGVfYnlfY29tbWFuZCh1bnNpZ25lZCBjb21tYW5kKQorc3RhdGljIHVpbnQzMl90IGdldF9zdGF0ZV9ieV9jb21tYW5kKHVuc2lnbmVkIGNvbW1hbmQpCiB7CiAJc3dpdGNoIChjb21tYW5kKSB7CiAJCWNhc2UgTkFORF9DTURfUkVBRDA6CkBAIC02MjYsOCArNjMzLDcgQEAKIC8qCiAgKiBNb3ZlIGFuIGFkZHJlc3MgYnl0ZSB0byB0aGUgY29ycmVzcG9uZGVudCBpbnRlcm5hbCByZWdpc3Rlci4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCi1hY2NlcHRfYWRkcl9ieXRlKHN0cnVjdCBuYW5kc2ltICpucywgdV9jaGFyIGJ0KQorc3RhdGljIGlubGluZSB2b2lkIGFjY2VwdF9hZGRyX2J5dGUoc3RydWN0IG5hbmRzaW0gKm5zLCB1X2NoYXIgYnQpCiB7CiAJdWludCBieXRlID0gKHVpbnQpYnQ7CiAKQEAgLTY0NSw4ICs2NTEsNyBAQAogLyoKICAqIFN3aXRjaCB0byBTVEFURV9SRUFEWSBzdGF0ZS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCi1zd2l0Y2hfdG9fcmVhZHlfc3RhdGUoc3RydWN0IG5hbmRzaW0gKm5zLCB1X2NoYXIgc3RhdHVzKQorc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF90b19yZWFkeV9zdGF0ZShzdHJ1Y3QgbmFuZHNpbSAqbnMsIHVfY2hhciBzdGF0dXMpCiB7CiAJTlNfREJHKCJzd2l0Y2hfdG9fcmVhZHlfc3RhdGU6IHN3aXRjaCB0byAlcyBzdGF0ZVxuIiwgZ2V0X3N0YXRlX25hbWUoU1RBVEVfUkVBRFkpKTsKIApAQCAtNzA1LDggKzcxMCw3IEBACiAgKiAgICAgICAgICAtMSAtIHNldmVyYWwgbWF0Y2hlcy4KICAqICAgICAgICAgICAwIC0gb3BlcmF0aW9uIGlzIGZvdW5kLgogICovCi1zdGF0aWMgaW50Ci1maW5kX29wZXJhdGlvbihzdHJ1Y3QgbmFuZHNpbSAqbnMsIHVpbnQzMl90IGZsYWcpCitzdGF0aWMgaW50IGZpbmRfb3BlcmF0aW9uKHN0cnVjdCBuYW5kc2ltICpucywgdWludDMyX3QgZmxhZykKIHsKIAlpbnQgb3BzZm91bmQgPSAwOwogCWludCBpLCBqLCBpZHggPSAwOwpAQCAtNzkxLDE0ICs3OTUsOTMgQEAKIH0KIAogLyoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHBhZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5pb24gbnNfbWVtICpOU19HRVRfUEFHRShzdHJ1Y3QgbmFuZHNpbSAqbnMpCit7CisJcmV0dXJuICYobnMtPnBhZ2VzW25zLT5yZWdzLnJvd10pOworfQorCisvKgorICogUmV0dW5zIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBieXRlLCB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZS4KKyAqLworc3RhdGljIGlubGluZSB1X2NoYXIgKk5TX1BBR0VfQllURV9PRkYoc3RydWN0IG5hbmRzaW0gKm5zKQoreworCXJldHVybiBOU19HRVRfUEFHRShucyktPmJ5dGUgKyBucy0+cmVncy5jb2x1bW4gKyBucy0+cmVncy5vZmY7Cit9CisKKy8qCisgKiBGaWxsIHRoZSBOQU5EIGJ1ZmZlciB3aXRoIGRhdGEgcmVhZCBmcm9tIHRoZSBzcGVjaWZpZWQgcGFnZS4KKyAqLworc3RhdGljIHZvaWQgcmVhZF9wYWdlKHN0cnVjdCBuYW5kc2ltICpucywgaW50IG51bSkKK3sKKwl1bmlvbiBuc19tZW0gKm15cGFnZTsKKworCW15cGFnZSA9IE5TX0dFVF9QQUdFKG5zKTsKKwlpZiAobXlwYWdlLT5ieXRlID09IE5VTEwpIHsKKwkJTlNfREJHKCJyZWFkX3BhZ2U6IHBhZ2UgJWQgbm90IGFsbG9jYXRlZFxuIiwgbnMtPnJlZ3Mucm93KTsKKwkJbWVtc2V0KG5zLT5idWYuYnl0ZSwgMHhGRiwgbnVtKTsKKwl9IGVsc2UgeworCQlOU19EQkcoInJlYWRfcGFnZTogcGFnZSAlZCBhbGxvY2F0ZWQsIHJlYWRpbmcgZnJvbSAlZFxuIiwKKwkJCW5zLT5yZWdzLnJvdywgbnMtPnJlZ3MuY29sdW1uICsgbnMtPnJlZ3Mub2ZmKTsKKwkJbWVtY3B5KG5zLT5idWYuYnl0ZSwgTlNfUEFHRV9CWVRFX09GRihucyksIG51bSk7CisJfQorfQorCisvKgorICogRXJhc2UgYWxsIHBhZ2VzIGluIHRoZSBzcGVjaWZpZWQgc2VjdG9yLgorICovCitzdGF0aWMgdm9pZCBlcmFzZV9zZWN0b3Ioc3RydWN0IG5hbmRzaW0gKm5zKQoreworCXVuaW9uIG5zX21lbSAqbXlwYWdlOworCWludCBpOworCisJbXlwYWdlID0gTlNfR0VUX1BBR0UobnMpOworCWZvciAoaSA9IDA7IGkgPCBucy0+Z2VvbS5wZ3NlYzsgaSsrKSB7CisJCWlmIChteXBhZ2UtPmJ5dGUgIT0gTlVMTCkgeworCQkJTlNfREJHKCJlcmFzZV9zZWN0b3I6IGZyZWVpbmcgcGFnZSAlZFxuIiwgbnMtPnJlZ3Mucm93K2kpOworCQkJa2ZyZWUobXlwYWdlLT5ieXRlKTsKKwkJCW15cGFnZS0+Ynl0ZSA9IE5VTEw7CisJCX0KKwkJbXlwYWdlKys7CisJfQorfQorCisvKgorICogUHJvZ3JhbSB0aGUgc3BlY2lmaWVkIHBhZ2Ugd2l0aCB0aGUgY29udGVudHMgZnJvbSB0aGUgTkFORCBidWZmZXIuCisgKi8KK3N0YXRpYyBpbnQgcHJvZ19wYWdlKHN0cnVjdCBuYW5kc2ltICpucywgaW50IG51bSkKK3sKKwlpbnQgaTsKKwl1bmlvbiBuc19tZW0gKm15cGFnZTsKKwl1X2NoYXIgKnBnX29mZjsKKworCW15cGFnZSA9IE5TX0dFVF9QQUdFKG5zKTsKKwlpZiAobXlwYWdlLT5ieXRlID09IE5VTEwpIHsKKwkJTlNfREJHKCJwcm9nX3BhZ2U6IGFsbG9jYXRpbmcgcGFnZSAlZFxuIiwgbnMtPnJlZ3Mucm93KTsKKwkJbXlwYWdlLT5ieXRlID0ga21hbGxvYyhucy0+Z2VvbS5wZ3N6b29iLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG15cGFnZS0+Ynl0ZSA9PSBOVUxMKSB7CisJCQlOU19FUlIoInByb2dfcGFnZTogZXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIHBhZ2UgJWRcbiIsIG5zLT5yZWdzLnJvdyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJbWVtc2V0KG15cGFnZS0+Ynl0ZSwgMHhGRiwgbnMtPmdlb20ucGdzem9vYik7CisJfQorCisJcGdfb2ZmID0gTlNfUEFHRV9CWVRFX09GRihucyk7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQlwZ19vZmZbaV0gJj0gbnMtPmJ1Zi5ieXRlW2ldOworCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBJZiBzdGF0ZSBoYXMgYW55IGFjdGlvbiBiaXQsIHBlcmZvcm0gdGhpcyBhY3Rpb24uCiAgKgogICogUkVUVVJOUzogMCBpZiBzdWNjZXNzLCAtMSBpZiBlcnJvci4KICAqLwotc3RhdGljIGludAotZG9fc3RhdGVfYWN0aW9uKHN0cnVjdCBuYW5kc2ltICpucywgdWludDMyX3QgYWN0aW9uKQorc3RhdGljIGludCBkb19zdGF0ZV9hY3Rpb24oc3RydWN0IG5hbmRzaW0gKm5zLCB1aW50MzJfdCBhY3Rpb24pCiB7Ci0JaW50IGksIG51bTsKKwlpbnQgbnVtOwogCWludCBidXNkaXYgPSBucy0+YnVzdyA9PSA4ID8gMSA6IDI7CiAKIAlhY3Rpb24gJj0gQUNUSU9OX01BU0s7CkBAIC04MjIsNyArOTA1LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCW51bSA9IG5zLT5nZW9tLnBnc3pvb2IgLSBucy0+cmVncy5vZmYgLSBucy0+cmVncy5jb2x1bW47Ci0JCW1lbWNweShucy0+YnVmLmJ5dGUsIG5zLT5tZW0uYnl0ZSArIE5TX1JBV19PRkZTRVQobnMpICsgbnMtPnJlZ3Mub2ZmLCBudW0pOworCQlyZWFkX3BhZ2UobnMsIG51bSk7CiAKIAkJTlNfREJHKCJkb19zdGF0ZV9hY3Rpb246IChBQ1RJT05fQ1BZOikgY29weSAlZCBieXRlcyB0byBpbnQgYnVmLCByYXcgb2Zmc2V0ICVkXG4iLAogCQkJbnVtLCBOU19SQVdfT0ZGU0VUKG5zKSArIG5zLT5yZWdzLm9mZik7CkBAIC04NjMsNyArOTQ2LDcgQEAKIAkJCQlucy0+cmVncy5yb3csIE5TX1JBV19PRkZTRVQobnMpKTsKIAkJTlNfTE9HKCJlcmFzZSBzZWN0b3IgJWRcbiIsIG5zLT5yZWdzLnJvdyA+PiAobnMtPmdlb20uc2Vjc2hpZnQgLSBucy0+Z2VvbS5wZ3NoaWZ0KSk7CiAKLQkJbWVtc2V0KG5zLT5tZW0uYnl0ZSArIE5TX1JBV19PRkZTRVQobnMpLCAweEZGLCBucy0+Z2VvbS5zZWNzem9vYik7CisJCWVyYXNlX3NlY3Rvcihucyk7CiAKIAkJTlNfTURFTEFZKGVyYXNlX2RlbGF5KTsKIApAQCAtODg2LDggKzk2OSw4IEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCi0JCQlucy0+bWVtLmJ5dGVbTlNfUkFXX09GRlNFVChucykgKyBucy0+cmVncy5vZmYgKyBpXSAmPSBucy0+YnVmLmJ5dGVbaV07CisJCWlmIChwcm9nX3BhZ2UobnMsIG51bSkgPT0gLTEpCisJCQlyZXR1cm4gLTE7CiAKIAkJTlNfREJHKCJkb19zdGF0ZV9hY3Rpb246IGNvcHkgJWQgYnl0ZXMgZnJvbSBpbnQgYnVmIHRvICglI3gsICUjeCksIHJhdyBvZmYgPSAlZFxuIiwKIAkJCW51bSwgbnMtPnJlZ3Mucm93LCBucy0+cmVncy5jb2x1bW4sIE5TX1JBV19PRkZTRVQobnMpICsgbnMtPnJlZ3Mub2ZmKTsKQEAgLTkyOCw4ICsxMDExLDcgQEAKIC8qCiAgKiBTd2l0Y2ggc2ltdWxhdG9yJ3Mgc3RhdGUuCiAgKi8KLXN0YXRpYyB2b2lkCi1zd2l0Y2hfc3RhdGUoc3RydWN0IG5hbmRzaW0gKm5zKQorc3RhdGljIHZvaWQgc3dpdGNoX3N0YXRlKHN0cnVjdCBuYW5kc2ltICpucykKIHsKIAlpZiAobnMtPm9wKSB7CiAJCS8qCkBAIC0xMDcwLDggKzExNTIsNyBAQAogCX0KIH0KIAotc3RhdGljIHVfY2hhcgotbnNfbmFuZF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgdV9jaGFyIG5zX25hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewogICAgICAgICBzdHJ1Y3QgbmFuZHNpbSAqbnMgPSAoc3RydWN0IG5hbmRzaW0gKikoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5wcml2OwogCXVfY2hhciBvdXRiID0gMHgwMDsKQEAgLTExNDQsOCArMTIyNSw3IEBACiAJcmV0dXJuIG91dGI7CiB9CiAKLXN0YXRpYyB2b2lkCi1uc19uYW5kX3dyaXRlX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBieXRlKQorc3RhdGljIHZvaWQgbnNfbmFuZF93cml0ZV9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgYnl0ZSkKIHsKICAgICAgICAgc3RydWN0IG5hbmRzaW0gKm5zID0gKHN0cnVjdCBuYW5kc2ltICopKChzdHJ1Y3QgbmFuZF9jaGlwICopbXRkLT5wcml2KS0+cHJpdjsKIApAQCAtMTMwOCwxNSArMTM4OCwxMyBAQAogCQluc19uYW5kX3dyaXRlX2J5dGUobXRkLCBjbWQpOwogfQogCi1zdGF0aWMgaW50Ci1uc19kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgaW50IG5zX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlOU19EQkcoImRldmljZV9yZWFkeVxuIik7CiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB1aW50MTZfdAotbnNfbmFuZF9yZWFkX3dvcmQoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgdWludDE2X3QgbnNfbmFuZF9yZWFkX3dvcmQoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IChzdHJ1Y3QgbmFuZF9jaGlwICopbXRkLT5wcml2OwogCkBAIC0xMzI1LDggKzE0MDMsNyBAQAogCXJldHVybiBjaGlwLT5yZWFkX2J5dGUobXRkKSB8IChjaGlwLT5yZWFkX2J5dGUobXRkKSA8PCA4KTsKIH0KIAotc3RhdGljIHZvaWQKLW5zX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIG5zX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKICAgICAgICAgc3RydWN0IG5hbmRzaW0gKm5zID0gKHN0cnVjdCBuYW5kc2ltICopKChzdHJ1Y3QgbmFuZF9jaGlwICopbXRkLT5wcml2KS0+cHJpdjsKIApAQCAtMTM1Myw4ICsxNDMwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkCi1uc19uYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIG5zX25hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogICAgICAgICBzdHJ1Y3QgbmFuZHNpbSAqbnMgPSAoc3RydWN0IG5hbmRzaW0gKikoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5wcml2OwogCkBAIC0xNDA3LDggKzE0ODMsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludAotbnNfbmFuZF92ZXJpZnlfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyBpbnQgbnNfbmFuZF92ZXJpZnlfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAluc19uYW5kX3JlYWRfYnVmKG10ZCwgKHVfY2hhciAqKSZuc192ZXJpZnlfYnVmWzBdLCBsZW4pOwogCkBAIC0xNDM2LDE0ICsxNTExLDEyIEBACiAJfQogCiAJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgbXRkX2luZm8sIG5hbmRfY2hpcCBhbmQgbmFuZHNpbSBzdHJ1Y3R1cmVzICovCi0JbnNtdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApCisJbnNtdGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApCiAJCQkJKyBzaXplb2Yoc3RydWN0IG5hbmRzaW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5zbXRkKSB7CiAJCU5TX0VSUigidW5hYmxlIHRvIGFsbG9jYXRlIGNvcmUgc3RydWN0dXJlcy5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KG5zbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSArCi0JCQlzaXplb2Yoc3RydWN0IG5hbmRzaW0pKTsKIAljaGlwICAgICAgICA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKG5zbXRkICsgMSk7CiAgICAgICAgIG5zbXRkLT5wcml2ID0gKHZvaWQgKiljaGlwOwogCW5hbmQgICAgICAgID0gKHN0cnVjdCBuYW5kc2ltICopKGNoaXAgKyAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKaW5kZXggMDM5Yzc1OS4uZmQ3YThkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAkJY2NyIHw9IE5ERkNfQ0NSX0JTKGNoaXAgKyBwY2hpcC0+Y2hpcF9vZmZzZXQpOwogCX0gZWxzZQogCQljY3IgfD0gTkRGQ19DQ1JfUkVTRVRfQ0U7Ci0Jd3JpdGVsKGNjciwgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0NDUik7CisJX19yYXdfd3JpdGVsKGNjciwgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0NDUik7CiB9CiAKIHN0YXRpYyB2b2lkIG5kZmNfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcnRjX2Zyb200LmMgYi9kcml2ZXJzL210ZC9uYW5kL3J0Y19mcm9tNC5jCmluZGV4IGY4YzQ5NjQuLjkxODllYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcnRjX2Zyb200LmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9ydGNfZnJvbTQuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcnNsaWIuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgpAQCAtMTUyLDQ3ICsxNTMsNiBAQAogCS5vb2JmcmVlID0ge3szMiwgMzJ9fQogfTsKIAotLyogQWFyZ2guIEkgbWlzc2VkIHRoZSByZXZlcnNlZCBiaXQgb3JkZXIsIHdoZW4gSQotICogd2FzIHRhbGtpbmcgdG8gUmVuZXNhcyBhYm91dCB0aGUgRlBHQS4KLSAqCi0gKiBUaGUgdGFibGUgaXMgdXNlZCBmb3IgYml0IHJlb3JkZXJpbmcgYW5kIGludmVyc2lvbgotICogb2YgdGhlIGVjYyBieXRlIHdoaWNoIHdlIGdldCBmcm9tIHRoZSBGUEdBCi0gKi8KLXN0YXRpYyB1aW50OF90IHJldmJpdHNbMjU2XSA9IHsKLQkweDAwLCAweDgwLCAweDQwLCAweGMwLCAweDIwLCAweGEwLCAweDYwLCAweGUwLAotCTB4MTAsIDB4OTAsIDB4NTAsIDB4ZDAsIDB4MzAsIDB4YjAsIDB4NzAsIDB4ZjAsCi0JMHgwOCwgMHg4OCwgMHg0OCwgMHhjOCwgMHgyOCwgMHhhOCwgMHg2OCwgMHhlOCwKLQkweDE4LCAweDk4LCAweDU4LCAweGQ4LCAweDM4LCAweGI4LCAweDc4LCAweGY4LAotCTB4MDQsIDB4ODQsIDB4NDQsIDB4YzQsIDB4MjQsIDB4YTQsIDB4NjQsIDB4ZTQsCi0JMHgxNCwgMHg5NCwgMHg1NCwgMHhkNCwgMHgzNCwgMHhiNCwgMHg3NCwgMHhmNCwKLQkweDBjLCAweDhjLCAweDRjLCAweGNjLCAweDJjLCAweGFjLCAweDZjLCAweGVjLAotCTB4MWMsIDB4OWMsIDB4NWMsIDB4ZGMsIDB4M2MsIDB4YmMsIDB4N2MsIDB4ZmMsCi0JMHgwMiwgMHg4MiwgMHg0MiwgMHhjMiwgMHgyMiwgMHhhMiwgMHg2MiwgMHhlMiwKLQkweDEyLCAweDkyLCAweDUyLCAweGQyLCAweDMyLCAweGIyLCAweDcyLCAweGYyLAotCTB4MGEsIDB4OGEsIDB4NGEsIDB4Y2EsIDB4MmEsIDB4YWEsIDB4NmEsIDB4ZWEsCi0JMHgxYSwgMHg5YSwgMHg1YSwgMHhkYSwgMHgzYSwgMHhiYSwgMHg3YSwgMHhmYSwKLQkweDA2LCAweDg2LCAweDQ2LCAweGM2LCAweDI2LCAweGE2LCAweDY2LCAweGU2LAotCTB4MTYsIDB4OTYsIDB4NTYsIDB4ZDYsIDB4MzYsIDB4YjYsIDB4NzYsIDB4ZjYsCi0JMHgwZSwgMHg4ZSwgMHg0ZSwgMHhjZSwgMHgyZSwgMHhhZSwgMHg2ZSwgMHhlZSwKLQkweDFlLCAweDllLCAweDVlLCAweGRlLCAweDNlLCAweGJlLCAweDdlLCAweGZlLAotCTB4MDEsIDB4ODEsIDB4NDEsIDB4YzEsIDB4MjEsIDB4YTEsIDB4NjEsIDB4ZTEsCi0JMHgxMSwgMHg5MSwgMHg1MSwgMHhkMSwgMHgzMSwgMHhiMSwgMHg3MSwgMHhmMSwKLQkweDA5LCAweDg5LCAweDQ5LCAweGM5LCAweDI5LCAweGE5LCAweDY5LCAweGU5LAotCTB4MTksIDB4OTksIDB4NTksIDB4ZDksIDB4MzksIDB4YjksIDB4NzksIDB4ZjksCi0JMHgwNSwgMHg4NSwgMHg0NSwgMHhjNSwgMHgyNSwgMHhhNSwgMHg2NSwgMHhlNSwKLQkweDE1LCAweDk1LCAweDU1LCAweGQ1LCAweDM1LCAweGI1LCAweDc1LCAweGY1LAotCTB4MGQsIDB4OGQsIDB4NGQsIDB4Y2QsIDB4MmQsIDB4YWQsIDB4NmQsIDB4ZWQsCi0JMHgxZCwgMHg5ZCwgMHg1ZCwgMHhkZCwgMHgzZCwgMHhiZCwgMHg3ZCwgMHhmZCwKLQkweDAzLCAweDgzLCAweDQzLCAweGMzLCAweDIzLCAweGEzLCAweDYzLCAweGUzLAotCTB4MTMsIDB4OTMsIDB4NTMsIDB4ZDMsIDB4MzMsIDB4YjMsIDB4NzMsIDB4ZjMsCi0JMHgwYiwgMHg4YiwgMHg0YiwgMHhjYiwgMHgyYiwgMHhhYiwgMHg2YiwgMHhlYiwKLQkweDFiLCAweDliLCAweDViLCAweGRiLCAweDNiLCAweGJiLCAweDdiLCAweGZiLAotCTB4MDcsIDB4ODcsIDB4NDcsIDB4YzcsIDB4MjcsIDB4YTcsIDB4NjcsIDB4ZTcsCi0JMHgxNywgMHg5NywgMHg1NywgMHhkNywgMHgzNywgMHhiNywgMHg3NywgMHhmNywKLQkweDBmLCAweDhmLCAweDRmLCAweGNmLCAweDJmLCAweGFmLCAweDZmLCAweGVmLAotCTB4MWYsIDB4OWYsIDB4NWYsIDB4ZGYsIDB4M2YsIDB4YmYsIDB4N2YsIDB4ZmYsCi19OwotCiAjZW5kaWYKIAogLyoKQEAgLTM5Nyw3ICszNTcsNyBAQAogCS8qIFJlYWQgdGhlIHN5bmRyb20gcGF0dGVybiBmcm9tIHRoZSBGUEdBIGFuZCBjb3JyZWN0IHRoZSBiaXRvcmRlciAqLwogCXJzX2VjYyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShydGNfZnJvbTRfZmlvX2Jhc2UgKyBSVENfRlJPTTRfUlNfRUNDKTsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWVjY1tpXSA9IHJldmJpdHNbKCpyc19lY2MpICYgMHhGRl07CisJCWVjY1tpXSA9IGJpdHJldjgoKnJzX2VjYyk7CiAJCXJzX2VjYysrOwogCX0KIApAQCAtNDk2LDcgKzQ1Niw3IEBACiAJCXJ0biA9IG5hbmRfZG9fcmVhZChtdGQsIHBhZ2UsIGxlbiwgJnJldGxlbiwgYnVmKTsKIAogCQkvKiBpZiByZWFkIGZhaWxlZCBvciA+IDEtYml0IGVycm9yIGNvcnJlY3RlZCAqLwotCQlpZiAocnRuIHx8IChtdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgLSBjb3JyZWN0ZWQpID4gMSkgeworCQlpZiAocnRuIHx8IChtdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgLSBjb3JyZWN0ZWQpID4gMSkKIAkJCWVyX3N0YXQgfD0gMSA8PCAxOwogCQlrZnJlZShidWYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKaW5kZXggZmY1Y2VmMi4uOGIzMjAzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKQEAgLTI4Myw3ICsyODMsNyBAQAogCQkJCSAgIHVuc2lnbmVkIGludCBjdHJsKQogewogCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHMzYzI0MTBfbmFuZF9tdGRfdG9pbmZvKG10ZCk7Ci0JCisKIAlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYyBiL2RyaXZlcnMvbXRkL25mdGxjb3JlLmMKaW5kZXggYjVhNWY4ZC4uNGIxYmE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9uZnRsY29yZS5jCkBAIC01NywxNyArNTcsMTYgQEAKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDEsICJORlRMOiBhZGRfbXRkIGZvciAlc1xuIiwgbXRkLT5uYW1lKTsKIAotCW5mdGwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgTkZUTHJlY29yZCksIEdGUF9LRVJORUwpOworCW5mdGwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgTkZUTHJlY29yZCksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFuZnRsKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5GVEw6IG91dCBvZiBtZW1vcnkgZm9yIGRhdGEgc3RydWN0dXJlc1xuIik7CiAJCXJldHVybjsKIAl9Ci0JbWVtc2V0KG5mdGwsIDAsIHNpemVvZigqbmZ0bCkpOwogCiAJbmZ0bC0+bWJkLm10ZCA9IG10ZDsKIAluZnRsLT5tYmQuZGV2bnVtID0gLTE7Ci0JbmZ0bC0+bWJkLmJsa3NpemUgPSA1MTI7CisKIAluZnRsLT5tYmQudHIgPSB0cjsKIAogICAgICAgICBpZiAoTkZUTF9tb3VudChuZnRsKSA8IDApIHsKQEAgLTE0NywxMCArMTQ2LDkgQEAKIAlvcHMub29ibGVuID0gbGVuOwogCW9wcy5vb2JidWYgPSBidWY7CiAJb3BzLmRhdGJ1ZiA9IE5VTEw7Ci0Jb3BzLmxlbiA9IGxlbjsKIAogCXJlcyA9IG10ZC0+cmVhZF9vb2IobXRkLCBvZmZzICYgfihtdGQtPndyaXRlc2l6ZSAtIDEpLCAmb3BzKTsKLQkqcmV0bGVuID0gb3BzLnJldGxlbjsKKwkqcmV0bGVuID0gb3BzLm9vYnJldGxlbjsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xNjgsMTAgKzE2Niw5IEBACiAJb3BzLm9vYmxlbiA9IGxlbjsKIAlvcHMub29iYnVmID0gYnVmOwogCW9wcy5kYXRidWYgPSBOVUxMOwotCW9wcy5sZW4gPSBsZW47CiAKIAlyZXMgPSBtdGQtPndyaXRlX29vYihtdGQsIG9mZnMgJiB+KG10ZC0+d3JpdGVzaXplIC0gMSksICZvcHMpOwotCSpyZXRsZW4gPSBvcHMucmV0bGVuOworCSpyZXRsZW4gPSBvcHMub29icmV0bGVuOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTc5Nyw2ICs3OTQsNyBAQAogCS5uYW1lCQk9ICJuZnRsIiwKIAkubWFqb3IJCT0gTkZUTF9NQUpPUiwKIAkucGFydF9iaXRzCT0gTkZUTF9QQVJUTl9CSVRTLAorCS5ibGtzaXplIAk9IDUxMiwKIAkuZ2V0Z2VvCQk9IG5mdGxfZ2V0Z2VvLAogCS5yZWFkc2VjdAk9IG5mdGxfcmVhZGJsb2NrLAogI2lmZGVmIENPTkZJR19ORlRMX1JXCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jCmluZGV4IGFmMDZhODAuLjNkNDRkMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jCkBAIC00NSwxMiArNDUsMTAgQEAKIAl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwogCWludCBlcnI7CiAKLQlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9uZW5hbmRfaW5mbyksIEdGUF9LRVJORUwpOworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb25lbmFuZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IG9uZW5hbmRfaW5mbykpOwotCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgZGV2LT5kcml2ZXItPm5hbWUpKSB7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBvdXRfZnJlZV9pbmZvOwpAQCAtNjMsNiArNjEsNyBAQAogCX0KIAogCWluZm8tPm9uZW5hbmQubW1jb250cm9sID0gcGRhdGEtPm1tY29udHJvbDsKKwlpbmZvLT5vbmVuYW5kLmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAKIAlpbmZvLT5tdGQubmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CiAJaW5mby0+bXRkLnByaXYgPSAmaW5mby0+b25lbmFuZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCmluZGV4IDhlZDY4YjIuLjJkYTZiYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KQEAgLTE5MSw4ICsxOTIsNiBAQAogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHZhbHVlLCByZWFkY21kID0gMCwgYmxvY2tfY21kID0gMDsKIAlpbnQgYmxvY2ssIHBhZ2U7Ci0JLyogTm93IHdlIHVzZSBwYWdlIHNpemUgb3BlcmF0aW9uICovCi0JaW50IHNlY3RvcnMgPSA0LCBjb3VudCA9IDQ7CiAKIAkvKiBBZGRyZXNzIHRyYW5zbGF0aW9uICovCiAJc3dpdGNoIChjbWQpIHsKQEAgLTI0NCw2ICsyNDMsOCBAQAogCX0KIAogCWlmIChwYWdlICE9IC0xKSB7CisJCS8qIE5vdyB3ZSB1c2UgcGFnZSBzaXplIG9wZXJhdGlvbiAqLworCQlpbnQgc2VjdG9ycyA9IDQsIGNvdW50ID0gNDsKIAkJaW50IGRhdGFyYW07CiAKIAkJc3dpdGNoIChjbWQpIHsKQEAgLTI5Nyw3ICsyOTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBPTkVOQU5EX0lOVF9NQVNURVI7CiAJdW5zaWduZWQgaW50IGludGVycnVwdCA9IDA7Ci0JdW5zaWduZWQgaW50IGN0cmwsIGVjYzsKKwl1bnNpZ25lZCBpbnQgY3RybDsKIAogCS8qIFRoZSAyMCBtc2VjIGlzIGVub3VnaCAqLwogCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCk7CkBAIC0zMDksNyArMzEwLDYgQEAKIAogCQlpZiAoc3RhdGUgIT0gRkxfUkVBRElORykKIAkJCWNvbmRfcmVzY2hlZCgpOwotCQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CiAJfQogCS8qIFRvIGdldCBjb3JyZWN0IGludGVycnVwdCBzdGF0dXMgaW4gdGltZW91dCBjYXNlICovCiAJaW50ZXJydXB0ID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOwpAQCAtMzE3LDI4ICszMTcsMTI2IEBACiAJY3RybCA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfQ1RSTF9TVEFUVVMpOwogCiAJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfRVJST1IpIHsKLQkJLyogSXQgbWF5YmUgb2NjdXIgYXQgaW5pdGlhbCBiYWQgYmxvY2sgKi8KIAkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd2FpdDogY29udHJvbGxlciBlcnJvciA9IDB4JTA0eFxuIiwgY3RybCk7Ci0JCS8qIENsZWFyIG90aGVyIGludGVycnVwdCBiaXRzIGZvciBwcmV2ZW50aW5nIEVDQyBlcnJvciAqLwotCQlpbnRlcnJ1cHQgJj0gT05FTkFORF9JTlRfTUFTVEVSOwotCX0KLQotCWlmIChjdHJsICYgT05FTkFORF9DVFJMX0xPQ0spIHsKLQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd2FpdDogaXQncyBsb2NrZWQgZXJyb3IgPSAweCUwNHhcbiIsIGN0cmwpOwotCQlyZXR1cm4gLUVBQ0NFUzsKKwkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfTE9DSykKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dhaXQ6IGl0J3MgbG9ja2VkIGVycm9yLlxuIik7CisJCXJldHVybiBjdHJsOwogCX0KIAogCWlmIChpbnRlcnJ1cHQgJiBPTkVOQU5EX0lOVF9SRUFEKSB7Ci0JCWVjYyA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfRUNDX1NUQVRVUyk7Ci0JCWlmIChlY2MgJiBPTkVOQU5EX0VDQ18yQklUX0FMTCkgeworCQlpbnQgZWNjID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19FQ0NfU1RBVFVTKTsKKwkJaWYgKGVjYykgewogCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd2FpdDogRUNDIGVycm9yID0gMHglMDR4XG4iLCBlY2MpOwotCQkJcmV0dXJuIC1FQkFETVNHOworCQkJaWYgKGVjYyAmIE9ORU5BTkRfRUNDXzJCSVRfQUxMKSB7CisJCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCQkJcmV0dXJuIGVjYzsKKwkJCX0gZWxzZSBpZiAoZWNjICYgT05FTkFORF9FQ0NfMUJJVF9BTEwpCisJCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkKys7CiAJCX0KIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIG9uZW5hbmRfaW50ZXJydXB0IC0gW0RFRkFVTFRdIG9uZW5hbmQgaW50ZXJydXB0IGhhbmRsZXIKKyAqIEBwYXJhbSBpcnEJCW9uZW5hbmQgaW50ZXJydXB0IG51bWJlcgorICogQHBhcmFtIGRldl9pZAlpbnRlcnJ1cHQgZGF0YQorICoKKyAqIGNvbXBsZXRlIHRoZSB3b3JrCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBvbmVuYW5kX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG9uZW5hbmRfY2hpcCAqKSBkYXRhOworCisJLyogVG8gaGFuZGxlIHNoYXJlZCBpbnRlcnJ1cHQgKi8KKwlpZiAoIXRoaXMtPmNvbXBsZXRlLmRvbmUpCisJCWNvbXBsZXRlKCZ0aGlzLT5jb21wbGV0ZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBvbmVuYW5kX2ludGVycnVwdF93YWl0IC0gW0RFRkFVTFRdIHdhaXQgdW50aWwgdGhlIGNvbW1hbmQgaXMgZG9uZQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBzdGF0ZQkJc3RhdGUgdG8gc2VsZWN0IHRoZSBtYXguIHRpbWVvdXQgdmFsdWUKKyAqCisgKiBXYWl0IGZvciBjb21tYW5kIGRvbmUuCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9pbnRlcnJ1cHRfd2FpdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHN0YXRlKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ0aGlzLT5jb21wbGV0ZSk7CisKKwlyZXR1cm4gb25lbmFuZF93YWl0KG10ZCwgc3RhdGUpOworfQorCisvKgorICogb25lbmFuZF90cnlfaW50ZXJydXB0X3dhaXQgLSBbREVGQVVMVF0gdHJ5IGludGVycnVwdCB3YWl0CisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIHN0YXRlCQlzdGF0ZSB0byBzZWxlY3QgdGhlIG1heC4gdGltZW91dCB2YWx1ZQorICoKKyAqIFRyeSBpbnRlcnJ1cHQgYmFzZWQgd2FpdCAoSXQgaXMgdXNlZCBvbmUtdGltZSkKKyAqLworc3RhdGljIGludCBvbmVuYW5kX3RyeV9pbnRlcnJ1cHRfd2FpdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHN0YXRlKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgbG9uZyByZW1haW4sIHRpbWVvdXQ7CisKKwkvKiBXZSB1c2UgaW50ZXJydXB0IHdhaXQgZmlyc3QgKi8KKwl0aGlzLT53YWl0ID0gb25lbmFuZF9pbnRlcnJ1cHRfd2FpdDsKKworCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDEwMCk7CisJcmVtYWluID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ0aGlzLT5jb21wbGV0ZSwgdGltZW91dCk7CisJaWYgKCFyZW1haW4pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiT25lTkFORDogVGhlcmUncyBubyBpbnRlcnJ1cHQuICIKKwkJCQkiV2UgdXNlIHRoZSBub3JtYWwgd2FpdFxuIik7CisKKwkJLyogUmVsZWFzZSB0aGUgaXJxICovCisJCWZyZWVfaXJxKHRoaXMtPmlycSwgdGhpcyk7CisKKwkJdGhpcy0+d2FpdCA9IG9uZW5hbmRfd2FpdDsKKwl9CisKKwlyZXR1cm4gb25lbmFuZF93YWl0KG10ZCwgc3RhdGUpOworfQorCisvKgorICogb25lbmFuZF9zZXR1cF93YWl0IC0gW09uZU5BTkQgSW50ZXJmYWNlXSBzZXR1cCBvbmVuYW5kIHdhaXQgbWV0aG9kCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFRoZXJlJ3MgdHdvIG1ldGhvZCB0byB3YWl0IG9uZW5hbmQgd29yaworICogMS4gcG9sbGluZyAtIHJlYWQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorICogMi4gaW50ZXJydXB0IC0gdXNlIHRoZSBrZXJuZWwgaW50ZXJydXB0IG1ldGhvZAorICovCitzdGF0aWMgdm9pZCBvbmVuYW5kX3NldHVwX3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgc3lzY2ZnOworCisJaW5pdF9jb21wbGV0aW9uKCZ0aGlzLT5jb21wbGV0ZSk7CisKKwlpZiAodGhpcy0+aXJxIDw9IDApIHsKKwkJdGhpcy0+d2FpdCA9IG9uZW5hbmRfd2FpdDsKKwkJcmV0dXJuOworCX0KKworCWlmIChyZXF1ZXN0X2lycSh0aGlzLT5pcnEsICZvbmVuYW5kX2ludGVycnVwdCwKKwkJCQlJUlFGX1NIQVJFRCwgIm9uZW5hbmQiLCB0aGlzKSkgeworCQkvKiBJZiB3ZSBjYW4ndCBnZXQgaXJxLCB1c2UgdGhlIG5vcm1hbCB3YWl0ICovCisJCXRoaXMtPndhaXQgPSBvbmVuYW5kX3dhaXQ7CisJCXJldHVybjsKKwl9CisKKwkvKiBFbmFibGUgaW50ZXJydXB0ICovCisJc3lzY2ZnID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJc3lzY2ZnIHw9IE9ORU5BTkRfU1lTX0NGRzFfSU9CRTsKKwl0aGlzLT53cml0ZV93b3JkKHN5c2NmZywgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKworCXRoaXMtPndhaXQgPSBvbmVuYW5kX3RyeV9pbnRlcnJ1cHRfd2FpdDsKK30KKwogLyoqCiAgKiBvbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQgLSBbREVGQVVMVF0gQnVmZmVyUkFNIG9mZnNldAogICogQHBhcmFtIG10ZAkJTVREIGRhdGEgc3RydWN0dXJlCkBAIC02MDksOSArNzA3LDEwIEBACiAJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG10ZF9lY2Nfc3RhdHMgc3RhdHM7CiAJaW50IHJlYWQgPSAwLCBjb2x1bW47CiAJaW50IHRoaXNsZW47Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IDAsIGJvdW5kYXJ5ID0gMDsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX3JlYWQ6IGZyb20gPSAweCUwOHgsIGxlbiA9ICVpXG4iLCAodW5zaWduZWQgaW50KSBmcm9tLCAoaW50KSBsZW4pOwogCkBAIC02MjcsMzggKzcyNiw2MSBAQAogCiAJLyogVE9ETyBoYW5kbGluZyBvb2IgKi8KIAotCXdoaWxlIChyZWFkIDwgbGVuKSB7Ci0JCXRoaXNsZW4gPSBtaW5fdChpbnQsIG10ZC0+d3JpdGVzaXplLCBsZW4gLSByZWFkKTsKKwlzdGF0cyA9IG10ZC0+ZWNjX3N0YXRzOwogCi0JCWNvbHVtbiA9IGZyb20gJiAobXRkLT53cml0ZXNpemUgLSAxKTsKLQkJaWYgKGNvbHVtbiArIHRoaXNsZW4gPiBtdGQtPndyaXRlc2l6ZSkKLQkJCXRoaXNsZW4gPSBtdGQtPndyaXRlc2l6ZSAtIGNvbHVtbjsKKyAJLyogUmVhZC13aGlsZS1sb2FkIG1ldGhvZCAqLwogCi0JCWlmICghb25lbmFuZF9jaGVja19idWZmZXJyYW0obXRkLCBmcm9tKSkgewotCQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQUQsIGZyb20sIG10ZC0+d3JpdGVzaXplKTsKKyAJLyogRG8gZmlyc3QgbG9hZCB0byBidWZmZXJSQU0gKi8KKyAJaWYgKHJlYWQgPCBsZW4pIHsKKyAJCWlmICghb25lbmFuZF9jaGVja19idWZmZXJyYW0obXRkLCBmcm9tKSkgeworIAkJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRUFELCBmcm9tLCBtdGQtPndyaXRlc2l6ZSk7CisgCQkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcpOworIAkJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIGZyb20sICFyZXQpOworIAkJfQorIAl9CiAKLQkJCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9SRUFESU5HKTsKLQkJCS8qIEZpcnN0IGNvcHkgZGF0YSBhbmQgY2hlY2sgcmV0dXJuIHZhbHVlIGZvciBFQ0MgaGFuZGxpbmcgKi8KLQkJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIGZyb20sIDEpOwotCQl9CisgCXRoaXNsZW4gPSBtaW5fdChpbnQsIG10ZC0+d3JpdGVzaXplLCBsZW4gLSByZWFkKTsKKyAJY29sdW1uID0gZnJvbSAmIChtdGQtPndyaXRlc2l6ZSAtIDEpOworIAlpZiAoY29sdW1uICsgdGhpc2xlbiA+IG10ZC0+d3JpdGVzaXplKQorIAkJdGhpc2xlbiA9IG10ZC0+d3JpdGVzaXplIC0gY29sdW1uOwogCi0JCXRoaXMtPnJlYWRfYnVmZmVycmFtKG10ZCwgT05FTkFORF9EQVRBUkFNLCBidWYsIGNvbHVtbiwgdGhpc2xlbik7CisgCXdoaWxlICghcmV0KSB7CisgCQkvKiBJZiB0aGVyZSBpcyBtb3JlIHRvIGxvYWQgdGhlbiBzdGFydCBuZXh0IGxvYWQgKi8KKyAJCWZyb20gKz0gdGhpc2xlbjsKKyAJCWlmIChyZWFkICsgdGhpc2xlbiA8IGxlbikgeworIAkJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRUFELCBmcm9tLCBtdGQtPndyaXRlc2l6ZSk7CisgCQkJLyoKKyAJCQkgKiBDaGlwIGJvdW5kYXJ5IGhhbmRsaW5nIGluIEREUAorIAkJCSAqIE5vdyB3ZSBpc3N1ZWQgY2hpcCAxIHJlYWQgYW5kIHBvaW50ZWQgY2hpcCAxCisgCQkJICogYnVmZmVyYW0gc28gd2UgaGF2ZSB0byBwb2ludCBjaGlwIDAgYnVmZmVyYW0uCisgCQkJICovCisgCQkJaWYgKHRoaXMtPmRldmljZV9pZCAmIE9ORU5BTkRfREVWSUNFX0lTX0REUCAmJgorIAkJCQkJdW5saWtlbHkoZnJvbSA9PSAodGhpcy0+Y2hpcHNpemUgPj4gMSkpKSB7CisgCQkJCXRoaXMtPndyaXRlX3dvcmQoMCwgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1MyKTsKKyAJCQkJYm91bmRhcnkgPSAxOworIAkJCX0gZWxzZQorIAkJCQlib3VuZGFyeSA9IDA7CisgCQkJT05FTkFORF9TRVRfUFJFVl9CVUZGRVJSQU0odGhpcyk7CisgCQl9CisgCQkvKiBXaGlsZSBsb2FkIGlzIGdvaW5nLCByZWFkIGZyb20gbGFzdCBidWZmZXJSQU0gKi8KKyAJCXRoaXMtPnJlYWRfYnVmZmVycmFtKG10ZCwgT05FTkFORF9EQVRBUkFNLCBidWYsIGNvbHVtbiwgdGhpc2xlbik7CisgCQkvKiBTZWUgaWYgd2UgYXJlIGRvbmUgKi8KKyAJCXJlYWQgKz0gdGhpc2xlbjsKKyAJCWlmIChyZWFkID09IGxlbikKKyAJCQlicmVhazsKKyAJCS8qIFNldCB1cCBmb3IgbmV4dCByZWFkIGZyb20gYnVmZmVyUkFNICovCisgCQlpZiAodW5saWtlbHkoYm91bmRhcnkpKQorIAkJCXRoaXMtPndyaXRlX3dvcmQoMHg4MDAwLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzIpOworIAkJT05FTkFORF9TRVRfTkVYVF9CVUZGRVJSQU0odGhpcyk7CisgCQlidWYgKz0gdGhpc2xlbjsKKyAJCXRoaXNsZW4gPSBtaW5fdChpbnQsIG10ZC0+d3JpdGVzaXplLCBsZW4gLSByZWFkKTsKKyAJCWNvbHVtbiA9IDA7CisgCQljb25kX3Jlc2NoZWQoKTsKKyAJCS8qIE5vdyB3YWl0IGZvciBsb2FkICovCisgCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CisgCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCBmcm9tLCAhcmV0KTsKKyAJfQogCi0JCXJlYWQgKz0gdGhpc2xlbjsKLQotCQlpZiAocmVhZCA9PSBsZW4pCi0JCQlicmVhazsKLQotCQlpZiAocmV0KSB7Ci0JCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF9yZWFkOiByZWFkIGZhaWxlZCA9ICVkXG4iLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlmcm9tICs9IHRoaXNsZW47Ci0JCWJ1ZiArPSB0aGlzbGVuOwotCX0KLQotb3V0OgogCS8qIERlc2VsZWN0IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KIAlvbmVuYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CiAKQEAgLTY2OCw3ICs3OTAsMTQgQEAKIAkgKiByZXRsZW4gPT0gZGVzaXJlZCBsZW4gYW5kIHJlc3VsdCA9PSAtRUJBRE1TRwogCSAqLwogCSpyZXRsZW4gPSByZWFkOwotCXJldHVybiByZXQ7CisKKwlpZiAobXRkLT5lY2Nfc3RhdHMuZmFpbGVkIC0gc3RhdHMuZmFpbGVkKQorCQlyZXR1cm4gLUVCQURNU0c7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIG10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCAtIHN0YXRzLmNvcnJlY3RlZCA/IC1FVUNMRUFOIDogMDsKIH0KIAogLyoqCkBAIC03MDUsNiArODM0LDggQEAKIAljb2x1bW4gPSBmcm9tICYgKG10ZC0+b29ic2l6ZSAtIDEpOwogCiAJd2hpbGUgKHJlYWQgPCBsZW4pIHsKKwkJY29uZF9yZXNjaGVkKCk7CisKIAkJdGhpc2xlbiA9IG10ZC0+b29ic2l6ZSAtIGNvbHVtbjsKIAkJdGhpc2xlbiA9IG1pbl90KGludCwgdGhpc2xlbiwgbGVuKTsKIApAQCAtNzE3LDE2ICs4NDgsMTYgQEAKIAogCQl0aGlzLT5yZWFkX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIGJ1ZiwgY29sdW1uLCB0aGlzbGVuKTsKIAorCQlpZiAocmV0KSB7CisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF9yZWFkX29vYjogcmVhZCBmYWlsZWQgPSAweCV4XG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwogCQlyZWFkICs9IHRoaXNsZW47CiAKIAkJaWYgKHJlYWQgPT0gbGVuKQogCQkJYnJlYWs7CiAKLQkJaWYgKHJldCkgewotCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfcmVhZF9vb2I6IHJlYWQgZmFpbGVkID0gJWRcbiIsIHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCiAJCWJ1ZiArPSB0aGlzbGVuOwogCiAJCS8qIFJlYWQgbW9yZT8gKi8KQEAgLTc1Niw4ICs4ODcsOCBAQAogewogCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7CiAKLQlyZXR1cm4gb25lbmFuZF9kb19yZWFkX29vYihtdGQsIGZyb20gKyBvcHMtPm9vYm9mZnMsIG9wcy0+bGVuLAotCQkJCSAgICZvcHMtPnJldGxlbiwgb3BzLT5vb2JidWYpOworCXJldHVybiBvbmVuYW5kX2RvX3JlYWRfb29iKG10ZCwgZnJvbSArIG9wcy0+b29ib2Zmcywgb3BzLT5vb2JsZW4sCisJCQkJICAgJm9wcy0+b29icmV0bGVuLCBvcHMtPm9vYmJ1Zik7CiB9CiAKICNpZmRlZiBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFCkBAIC04MDQsNiArOTM1LDEwIEBACiAJdm9pZCBfX2lvbWVtICpkYXRhcmFtMCwgKmRhdGFyYW0xOwogCWludCByZXQgPSAwOwogCisJLyogSW4gcGFydGlhbCBwYWdlIHdyaXRlLCBqdXN0IHNraXAgaXQgKi8KKwlpZiAoKGFkZHIgJiAobXRkLT53cml0ZXNpemUgLSAxKSkgIT0gMCkKKwkJcmV0dXJuIDA7CisKIAl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVBRCwgYWRkciwgbXRkLT53cml0ZXNpemUpOwogCiAJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcpOwpAQCAtODI2LDcgKzk2MSw3IEBACiAjZGVmaW5lIG9uZW5hbmRfdmVyaWZ5X29vYiguLi4pCQkoMCkKICNlbmRpZgogCi0jZGVmaW5lIE5PVEFMSUdORUQoeCkJKCh4ICYgKG10ZC0+d3JpdGVzaXplIC0gMSkpICE9IDApCisjZGVmaW5lIE5PVEFMSUdORUQoeCkJKCh4ICYgKHRoaXMtPnN1YnBhZ2VzaXplIC0gMSkpICE9IDApCiAKIC8qKgogICogb25lbmFuZF93cml0ZSAtIFtNVEQgSW50ZXJmYWNlXSB3cml0ZSBidWZmZXIgdG8gRkxBU0gKQEAgLTg0NCw2ICs5NzksNyBAQAogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHdyaXR0ZW4gPSAwOwogCWludCByZXQgPSAwOworCWludCBjb2x1bW4sIHN1YnBhZ2U7CiAKIAlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAib25lbmFuZF93cml0ZTogdG8gPSAweCUwOHgsIGxlbiA9ICVpXG4iLCAodW5zaWduZWQgaW50KSB0bywgKGludCkgbGVuKTsKIApAQCAtODYyLDQ1ICs5OTgsNjMgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICAgICAgfQogCisJY29sdW1uID0gdG8gJiAobXRkLT53cml0ZXNpemUgLSAxKTsKKwlzdWJwYWdlID0gY29sdW1uIHx8IChsZW4gJiAobXRkLT53cml0ZXNpemUgLSAxKSk7CisKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KIAlvbmVuYW5kX2dldF9kZXZpY2UobXRkLCBGTF9XUklUSU5HKTsKIAogCS8qIExvb3AgdW50aWwgYWxsIGRhdGEgd3JpdGUgKi8KIAl3aGlsZSAod3JpdHRlbiA8IGxlbikgewotCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgbXRkLT53cml0ZXNpemUsIGxlbiAtIHdyaXR0ZW4pOworCQlpbnQgYnl0ZXMgPSBtdGQtPndyaXRlc2l6ZTsKKwkJaW50IHRoaXNsZW4gPSBtaW5fdChpbnQsIGJ5dGVzLCBsZW4gLSB3cml0dGVuKTsKKwkJdV9jaGFyICp3YnVmID0gKHVfY2hhciAqKSBidWY7CiAKLQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0JVRkZFUlJBTSwgdG8sIG10ZC0+d3JpdGVzaXplKTsKKwkJY29uZF9yZXNjaGVkKCk7CiAKLQkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9EQVRBUkFNLCBidWYsIDAsIHRoaXNsZW4pOworCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfQlVGRkVSUkFNLCB0bywgYnl0ZXMpOworCisJCS8qIFBhcnRpYWwgcGFnZSB3cml0ZSAqLworCQlpZiAoc3VicGFnZSkgeworCQkJYnl0ZXMgPSBtaW5fdChpbnQsIGJ5dGVzIC0gY29sdW1uLCAoaW50KSBsZW4pOworCQkJbWVtc2V0KHRoaXMtPnBhZ2VfYnVmLCAweGZmLCBtdGQtPndyaXRlc2l6ZSk7CisJCQltZW1jcHkodGhpcy0+cGFnZV9idWYgKyBjb2x1bW4sIGJ1ZiwgYnl0ZXMpOworCQkJd2J1ZiA9IHRoaXMtPnBhZ2VfYnVmOworCQkJLyogRXZlbiB0aG91Z2ggcGFydGlhbCB3cml0ZSwgd2UgbmVlZCBwYWdlIHNpemUgKi8KKwkJCXRoaXNsZW4gPSBtdGQtPndyaXRlc2l6ZTsKKwkJfQorCisJCXRoaXMtPndyaXRlX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfREFUQVJBTSwgd2J1ZiwgMCwgdGhpc2xlbik7CiAJCXRoaXMtPndyaXRlX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIGZmY2hhcnMsIDAsIG10ZC0+b29ic2l6ZSk7CiAKIAkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1BST0csIHRvLCBtdGQtPndyaXRlc2l6ZSk7CiAKLQkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgdG8sIDEpOworCQkvKiBJbiBwYXJ0aWFsIHBhZ2Ugd3JpdGUgd2UgZG9uJ3QgdXBkYXRlIGJ1ZmZlcnJhbSAqLworCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCB0bywgIXN1YnBhZ2UpOwogCiAJCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9XUklUSU5HKTsKIAkJaWYgKHJldCkgewogCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGU6IHdyaXRlIGZpbGFlZCAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCX0KKworCQkvKiBPbmx5IGNoZWNrIHZlcmlmeSB3cml0ZSB0dXJuIG9uICovCisJCXJldCA9IG9uZW5hbmRfdmVyaWZ5X3BhZ2UobXRkLCAodV9jaGFyICopIHdidWYsIHRvKTsKKwkJaWYgKHJldCkgeworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGU6IHZlcmlmeSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlicmVhazsKIAkJfQogCiAJCXdyaXR0ZW4gKz0gdGhpc2xlbjsKIAotCQkvKiBPbmx5IGNoZWNrIHZlcmlmeSB3cml0ZSB0dXJuIG9uICovCi0JCXJldCA9IG9uZW5hbmRfdmVyaWZ5X3BhZ2UobXRkLCAodV9jaGFyICopIGJ1ZiwgdG8pOwotCQlpZiAocmV0KSB7Ci0JCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZTogdmVyaWZ5IGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KIAkJaWYgKHdyaXR0ZW4gPT0gbGVuKQogCQkJYnJlYWs7CiAKKwkJY29sdW1uID0gMDsKIAkJdG8gKz0gdGhpc2xlbjsKIAkJYnVmICs9IHRoaXNsZW47CiAJfQogCi1vdXQ6CiAJLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLwogCW9uZW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIApAQCAtOTQ0LDYgKzEwOTgsOCBAQAogCXdoaWxlICh3cml0dGVuIDwgbGVuKSB7CiAJCWludCB0aGlzbGVuID0gbWluX3QoaW50LCBtdGQtPm9vYnNpemUsIGxlbiAtIHdyaXR0ZW4pOwogCisJCWNvbmRfcmVzY2hlZCgpOworCiAJCWNvbHVtbiA9IHRvICYgKG10ZC0+b29ic2l6ZSAtIDEpOwogCiAJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9CVUZGRVJSQU0sIHRvLCBtdGQtPm9vYnNpemUpOwpAQCAtOTk5LDggKzExNTUsOCBAQAogewogCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7CiAKLQlyZXR1cm4gb25lbmFuZF9kb193cml0ZV9vb2IobXRkLCB0byArIG9wcy0+b29ib2Zmcywgb3BzLT5sZW4sCi0JCQkJICAgICZvcHMtPnJldGxlbiwgb3BzLT5vb2JidWYpOworCXJldHVybiBvbmVuYW5kX2RvX3dyaXRlX29vYihtdGQsIHRvICsgb3BzLT5vb2JvZmZzLCBvcHMtPm9vYmxlbiwKKwkJCQkgICAgJm9wcy0+b29icmV0bGVuLCBvcHMtPm9vYmJ1Zik7CiB9CiAKIC8qKgpAQCAtMTA3MSw2ICsxMjI3LDcgQEAKIAlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0lORzsKIAogCXdoaWxlIChsZW4pIHsKKwkJY29uZF9yZXNjaGVkKCk7CiAKIAkJLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIGJhZCBibG9jaywgd2UgZG8gbm90IGVyYXNlIGJhZCBibG9ja3MgKi8KIAkJaWYgKG9uZW5hbmRfYmxvY2tfY2hlY2tiYWQobXRkLCBhZGRyLCAwLCAwKSkgewpAQCAtMTA4NCwxMCArMTI0MSw3IEBACiAJCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9FUkFTSU5HKTsKIAkJLyogQ2hlY2ssIGlmIGl0IGlzIHdyaXRlIHByb3RlY3RlZCAqLwogCQlpZiAocmV0KSB7Ci0JCQlpZiAocmV0ID09IC1FUEVSTSkKLQkJCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF9lcmFzZTogRGV2aWNlIGlzIHdyaXRlIHByb3RlY3RlZCEhIVxuIik7Ci0JCQllbHNlCi0JCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfZXJhc2U6IEZhaWxlZCBlcmFzZSwgYmxvY2sgJWRcbiIsICh1bnNpZ25lZCkgKGFkZHIgPj4gdGhpcy0+ZXJhc2Vfc2hpZnQpKTsKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX2VyYXNlOiBGYWlsZWQgZXJhc2UsIGJsb2NrICVkXG4iLCAodW5zaWduZWQpIChhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KSk7CiAJCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOwogCQkJaW5zdHItPmZhaWxfYWRkciA9IGFkZHI7CiAJCQlnb3RvIGVyYXNlX2V4aXQ7CkBAIC0xMTI5LDcgKzEyODMsNiBAQAogCW9uZW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIH0KIAotCiAvKioKICAqIG9uZW5hbmRfYmxvY2tfaXNiYWQgLSBbTVREIEludGVyZmFjZV0gQ2hlY2sgd2hldGhlciB0aGUgYmxvY2sgYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBiYWQKICAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0xMTk2LDMyICsxMzQ5LDM4IEBACiB9CiAKIC8qKgotICogb25lbmFuZF91bmxvY2sgLSBbTVREIEludGVyZmFjZV0gVW5sb2NrIGJsb2NrKHMpCisgKiBvbmVuYW5kX2RvX2xvY2tfY21kIC0gW09uZU5BTkQgSW50ZXJmYWNlXSBMb2NrIG9yIHVubG9jayBibG9jayhzKQogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSBvZnMJCW9mZnNldCByZWxhdGl2ZSB0byBtdGQgc3RhcnQKLSAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byB1bmxvY2sKKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byBsb2NrIG9yIHVubG9jawogICoKLSAqIFVubG9jayBvbmUgb3IgbW9yZSBibG9ja3MKKyAqIExvY2sgb3IgdW5sb2NrIG9uZSBvciBtb3JlIGJsb2NrcwogICovCi1zdGF0aWMgaW50IG9uZW5hbmRfdW5sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuKQorc3RhdGljIGludCBvbmVuYW5kX2RvX2xvY2tfY21kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLCBpbnQgY21kKQogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHN0YXJ0LCBlbmQsIGJsb2NrLCB2YWx1ZSwgc3RhdHVzOworCWludCB3cF9zdGF0dXNfbWFzazsKIAogCXN0YXJ0ID0gb2ZzID4+IHRoaXMtPmVyYXNlX3NoaWZ0OwogCWVuZCA9IGxlbiA+PiB0aGlzLT5lcmFzZV9zaGlmdDsKIAorCWlmIChjbWQgPT0gT05FTkFORF9DTURfTE9DSykKKwkJd3Bfc3RhdHVzX21hc2sgPSBPTkVOQU5EX1dQX0xTOworCWVsc2UKKwkJd3Bfc3RhdHVzX21hc2sgPSBPTkVOQU5EX1dQX1VTOworCiAJLyogQ29udGludW91cyBsb2NrIHNjaGVtZSAqLwogCWlmICh0aGlzLT5vcHRpb25zICYgT05FTkFORF9IQVNfQ09OVF9MT0NLKSB7CiAJCS8qIFNldCBzdGFydCBibG9jayBhZGRyZXNzICovCiAJCXRoaXMtPndyaXRlX3dvcmQoc3RhcnQsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9CTE9DS19BRERSRVNTKTsKIAkJLyogU2V0IGVuZCBibG9jayBhZGRyZXNzICovCiAJCXRoaXMtPndyaXRlX3dvcmQoc3RhcnQgKyBlbmQgLSAxLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfRU5EX0JMT0NLX0FERFJFU1MpOwotCQkvKiBXcml0ZSB1bmxvY2sgY29tbWFuZCAqLwotCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfVU5MT0NLLCAwLCAwKTsKKwkJLyogV3JpdGUgbG9jayBjb21tYW5kICovCisJCXRoaXMtPmNvbW1hbmQobXRkLCBjbWQsIDAsIDApOwogCiAJCS8qIFRoZXJlJ3Mgbm8gcmV0dXJuIHZhbHVlICovCi0JCXRoaXMtPndhaXQobXRkLCBGTF9VTkxPQ0tJTkcpOworCQl0aGlzLT53YWl0KG10ZCwgRkxfTE9DS0lORyk7CiAKIAkJLyogU2FuaXR5IGNoZWNrICovCiAJCXdoaWxlICh0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKQpAQCAtMTIzMCw3ICsxMzg5LDcgQEAKIAogCQkvKiBDaGVjayBsb2NrIHN0YXR1cyAqLwogCQlzdGF0dXMgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1dQX1NUQVRVUyk7Ci0JCWlmICghKHN0YXR1cyAmIE9ORU5BTkRfV1BfVVMpKQorCQlpZiAoIShzdGF0dXMgJiB3cF9zdGF0dXNfbWFzaykpCiAJCQlwcmludGsoS0VSTl9FUlIgIndwIHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CiAKIAkJcmV0dXJuIDA7CkBAIC0xMjQ2LDExICsxNDA1LDExIEBACiAJCXRoaXMtPndyaXRlX3dvcmQodmFsdWUsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMik7CiAJCS8qIFNldCBzdGFydCBibG9jayBhZGRyZXNzICovCiAJCXRoaXMtPndyaXRlX3dvcmQoYmxvY2ssIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9CTE9DS19BRERSRVNTKTsKLQkJLyogV3JpdGUgdW5sb2NrIGNvbW1hbmQgKi8KLQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1VOTE9DSywgMCwgMCk7CisJCS8qIFdyaXRlIGxvY2sgY29tbWFuZCAqLworCQl0aGlzLT5jb21tYW5kKG10ZCwgY21kLCAwLCAwKTsKIAogCQkvKiBUaGVyZSdzIG5vIHJldHVybiB2YWx1ZSAqLwotCQl0aGlzLT53YWl0KG10ZCwgRkxfVU5MT0NLSU5HKTsKKwkJdGhpcy0+d2FpdChtdGQsIEZMX0xPQ0tJTkcpOwogCiAJCS8qIFNhbml0eSBjaGVjayAqLwogCQl3aGlsZSAodGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUykKQEAgLTEyNTksNyArMTQxOCw3IEBACiAKIAkJLyogQ2hlY2sgbG9jayBzdGF0dXMgKi8KIAkJc3RhdHVzID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19XUF9TVEFUVVMpOwotCQlpZiAoIShzdGF0dXMgJiBPTkVOQU5EX1dQX1VTKSkKKwkJaWYgKCEoc3RhdHVzICYgd3Bfc3RhdHVzX21hc2spKQogCQkJcHJpbnRrKEtFUk5fRVJSICJibG9jayA9ICVkLCB3cCBzdGF0dXMgPSAweCV4XG4iLCBibG9jaywgc3RhdHVzKTsKIAl9CiAKQEAgLTEyNjcsNiArMTQyNiwzMiBAQAogfQogCiAvKioKKyAqIG9uZW5hbmRfbG9jayAtIFtNVEQgSW50ZXJmYWNlXSBMb2NrIGJsb2NrKHMpCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIG9mcwkJb2Zmc2V0IHJlbGF0aXZlIHRvIG10ZCBzdGFydAorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHVubG9jaworICoKKyAqIExvY2sgb25lIG9yIG1vcmUgYmxvY2tzCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuKQoreworCXJldHVybiBvbmVuYW5kX2RvX2xvY2tfY21kKG10ZCwgb2ZzLCBsZW4sIE9ORU5BTkRfQ01EX0xPQ0spOworfQorCisvKioKKyAqIG9uZW5hbmRfdW5sb2NrIC0gW01URCBJbnRlcmZhY2VdIFVubG9jayBibG9jayhzKQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBvZnMJCW9mZnNldCByZWxhdGl2ZSB0byBtdGQgc3RhcnQKKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byB1bmxvY2sKKyAqCisgKiBVbmxvY2sgb25lIG9yIG1vcmUgYmxvY2tzCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF91bmxvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIG9uZW5hbmRfZG9fbG9ja19jbWQobXRkLCBvZnMsIGxlbiwgT05FTkFORF9DTURfVU5MT0NLKTsKK30KKworLyoqCiAgKiBvbmVuYW5kX2NoZWNrX2xvY2tfc3RhdHVzIC0gW09uZU5BTkQgSW50ZXJmYWNlXSBDaGVjayBsb2NrIHN0YXR1cwogICogQHBhcmFtIHRoaXMJCW9uZW5hbmQgY2hpcCBkYXRhIHN0cnVjdHVyZQogICoKQEAgLTEzMTAsNyArMTQ5NSw3IEBACiAJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9VTkxPQ0tfQUxMLCAwLCAwKTsKIAogCQkvKiBUaGVyZSdzIG5vIHJldHVybiB2YWx1ZSAqLwotCQl0aGlzLT53YWl0KG10ZCwgRkxfVU5MT0NLSU5HKTsKKwkJdGhpcy0+d2FpdChtdGQsIEZMX0xPQ0tJTkcpOwogCiAJCS8qIFNhbml0eSBjaGVjayAqLwogCQl3aGlsZSAodGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUykKQEAgLTEzMzQsNyArMTUxOSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCW10ZC0+dW5sb2NrKG10ZCwgMHgwLCB0aGlzLT5jaGlwc2l6ZSk7CisJb25lbmFuZF91bmxvY2sobXRkLCAweDAsIHRoaXMtPmNoaXBzaXplKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc2Miw3ICsxOTQ3LDcgQEAKIAkvKiBSZWFkIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEcyBmcm9tIFJlZ2lzdGVyICovCiAJbWFmX2lkID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19NQU5VRkFDVFVSRVJfSUQpOwogCWRldl9pZCA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfREVWSUNFX0lEKTsKLQl2ZXJfaWQ9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfVkVSU0lPTl9JRCk7CisJdmVyX2lkID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19WRVJTSU9OX0lEKTsKIAogCS8qIENoZWNrIE9uZU5BTkQgZGV2aWNlICovCiAJaWYgKG1hZl9pZCAhPSBicmFtX21hZl9pZCB8fCBkZXZfaWQgIT0gYnJhbV9kZXZfaWQpCkBAIC0xODQ2LDcgKzIwMzEsNyBAQAogCWlmICghdGhpcy0+Y29tbWFuZCkKIAkJdGhpcy0+Y29tbWFuZCA9IG9uZW5hbmRfY29tbWFuZDsKIAlpZiAoIXRoaXMtPndhaXQpCi0JCXRoaXMtPndhaXQgPSBvbmVuYW5kX3dhaXQ7CisJCW9uZW5hbmRfc2V0dXBfd2FpdChtdGQpOwogCiAJaWYgKCF0aGlzLT5yZWFkX2J1ZmZlcnJhbSkKIAkJdGhpcy0+cmVhZF9idWZmZXJyYW0gPSBvbmVuYW5kX3JlYWRfYnVmZmVycmFtOwpAQCAtMTg4MywyMyArMjA2OCwzMCBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRoaXMtPndxKTsKIAlzcGluX2xvY2tfaW5pdCgmdGhpcy0+Y2hpcF9sb2NrKTsKIAorCS8qCisJICogQWxsb3cgc3VicGFnZSB3cml0ZXMgdXAgdG8gb29ic2l6ZS4KKwkgKi8KIAlzd2l0Y2ggKG10ZC0+b29ic2l6ZSkgewogCWNhc2UgNjQ6CiAJCXRoaXMtPmVjY2xheW91dCA9ICZvbmVuYW5kX29vYl82NDsKKwkJbXRkLT5zdWJwYWdlX3NmdCA9IDI7CiAJCWJyZWFrOwogCiAJY2FzZSAzMjoKIAkJdGhpcy0+ZWNjbGF5b3V0ID0gJm9uZW5hbmRfb29iXzMyOworCQltdGQtPnN1YnBhZ2Vfc2Z0ID0gMTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBPT0Igc2NoZW1lIGRlZmluZWQgZm9yIG9vYnNpemUgJWRcbiIsCiAJCQltdGQtPm9vYnNpemUpOworCQltdGQtPnN1YnBhZ2Vfc2Z0ID0gMDsKIAkJLyogVG8gcHJldmVudCBrZXJuZWwgb29wcyAqLwogCQl0aGlzLT5lY2NsYXlvdXQgPSAmb25lbmFuZF9vb2JfMzI7CiAJCWJyZWFrOwogCX0KIAorCXRoaXMtPnN1YnBhZ2VzaXplID0gbXRkLT53cml0ZXNpemUgPj4gbXRkLT5zdWJwYWdlX3NmdDsKIAltdGQtPmVjY2xheW91dCA9IHRoaXMtPmVjY2xheW91dDsKIAogCS8qIEZpbGwgaW4gcmVtYWluaW5nIE1URCBkcml2ZXIgZGF0YSAqLwpAQCAtMTkyMiw3ICsyMTE0LDcgQEAKIAltdGQtPmxvY2tfdXNlcl9wcm90X3JlZyA9IG9uZW5hbmRfbG9ja191c2VyX3Byb3RfcmVnOwogI2VuZGlmCiAJbXRkLT5zeW5jID0gb25lbmFuZF9zeW5jOwotCW10ZC0+bG9jayA9IE5VTEw7CisJbXRkLT5sb2NrID0gb25lbmFuZF9sb2NrOwogCW10ZC0+dW5sb2NrID0gb25lbmFuZF91bmxvY2s7CiAJbXRkLT5zdXNwZW5kID0gb25lbmFuZF9zdXNwZW5kOwogCW10ZC0+cmVzdW1lID0gb25lbmFuZF9yZXN1bWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmJ0LmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmJ0LmMKaW5kZXggMWIwMGRhYy4uOThmOGZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2JidC5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYwpAQCAtOTMsMTMgKzkzLDE1IEBACiAJCQlyZXQgPSBvbmVuYW5kX2RvX3JlYWRfb29iKG10ZCwgZnJvbSArIGogKiBtdGQtPndyaXRlc2l6ZSArIGJkLT5vZmZzLAogCQkJCQkJICByZWFkbGVuLCAmcmV0bGVuLCAmYnVmWzBdKTsKIAotCQkJaWYgKHJldCkKKwkJCS8qIElmIGl0IGlzIGEgaW5pdGlhbCBiYWQgYmxvY2ssIGp1c3QgaWdub3JlIGl0ICovCisJCQlpZiAocmV0ICYmICEocmV0ICYgT05FTkFORF9DVFJMX0xPQUQpKQogCQkJCXJldHVybiByZXQ7CiAKIAkJCWlmIChjaGVja19zaG9ydF9wYXR0ZXJuKCZidWZbaiAqIHNjYW5sZW5dLCBzY2FubGVuLCBtdGQtPndyaXRlc2l6ZSwgYmQpKSB7CiAJCQkJYmJtLT5iYnRbaSA+PiAzXSB8PSAweDAzIDw8IChpICYgMHg2KTsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJCYWQgZXJhc2VibG9jayAlZCBhdCAweCUwOHhcbiIsCiAJCQkJCWkgPj4gMSwgKHVuc2lnbmVkIGludCkgZnJvbSk7CisJCQkJbXRkLT5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTE3NywxNCArMTc5LDEyIEBACiAJaW50IGxlbiwgcmV0ID0gMDsKIAogCWxlbiA9IG10ZC0+c2l6ZSA+PiAodGhpcy0+ZXJhc2Vfc2hpZnQgKyAyKTsKLQkvKiBBbGxvY2F0ZSBtZW1vcnkgKDJiaXQgcGVyIGJsb2NrKSAqLwotCWJibS0+YmJ0ID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCS8qIEFsbG9jYXRlIG1lbW9yeSAoMmJpdCBwZXIgYmxvY2spIGFuZCBjbGVhciB0aGUgbWVtb3J5IGJhZCBibG9jayB0YWJsZSAqLworCWJibS0+YmJ0ID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmICghYmJtLT5iYnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3NjYW5fYmJ0OiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCS8qIENsZWFyIHRoZSBtZW1vcnkgYmFkIGJsb2NrIHRhYmxlICovCi0JbWVtc2V0KGJibS0+YmJ0LCAweDAwLCBsZW4pOwogCiAJLyogU2V0IHRoZSBiYWQgYmxvY2sgcG9zaXRpb24gKi8KIAliYm0tPmJhZGJsb2NrcG9zID0gT05FTkFORF9CQURCTE9DS19QT1M7CkBAIC0yMzAsMTQgKzIzMCwxMiBAQAogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGJibV9pbmZvICpiYm07CiAKLQl0aGlzLT5iYm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmJtX2luZm8pLCBHRlBfS0VSTkVMKTsKKwl0aGlzLT5iYm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmJtX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRoaXMtPmJibSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAliYm0gPSB0aGlzLT5iYm07CiAKLQltZW1zZXQoYmJtLCAwLCBzaXplb2Yoc3RydWN0IGJibV9pbmZvKSk7Ci0KIAkvKiAxS0IgcGFnZSBoYXMgc2FtZSBjb25maWd1cmF0aW9uIGFzIDJLQiBwYWdlICovCiAJaWYgKCFiYm0tPmJhZGJsb2NrX3BhdHRlcm4pCiAJCWJibS0+YmFkYmxvY2tfcGF0dGVybiA9ICZsYXJnZXBhZ2VfbWVtb3J5YmFzZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9yZWRib290LmMgYi9kcml2ZXJzL210ZC9yZWRib290LmMKaW5kZXggNWI1ODUyMy4uMDM1Y2Q5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvcmVkYm9vdC5jCisrKyBiL2RyaXZlcnMvbXRkL3JlZGJvb3QuYwpAQCAtOTYsNyArOTYsMTkgQEAKIAkJCSAqLwogCQkJaWYgKHN3YWIzMihidWZbaV0uc2l6ZSkgPT0gbWFzdGVyLT5lcmFzZXNpemUpIHsKIAkJCQlpbnQgajsKLQkJCQlmb3IgKGogPSAwOyBqIDwgbnVtc2xvdHMgJiYgYnVmW2pdLm5hbWVbMF0gIT0gMHhmZjsgKytqKSB7CisJCQkJZm9yIChqID0gMDsgaiA8IG51bXNsb3RzOyArK2opIHsKKworCQkJCQkvKiBBIHNpbmdsZSAweGZmIGRlbm90ZXMgYSBkZWxldGVkIGVudHJ5LgorCQkJCQkgKiBUd28gb2YgdGhlbSBpbiBhIHJvdyBpcyB0aGUgZW5kIG9mIHRoZSB0YWJsZS4KKwkJCQkJICovCisJCQkJCWlmIChidWZbal0ubmFtZVswXSA9PSAweGZmKSB7CisJCQkJICAJCWlmIChidWZbal0ubmFtZVsxXSA9PSAweGZmKSB7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisKIAkJCQkJLyogVGhlIHVuc2lnbmVkIGxvbmcgZmllbGRzIHdlcmUgd3JpdHRlbiB3aXRoIHRoZQogCQkJCQkgKiB3cm9uZyBieXRlIHNleCwgbmFtZSBhbmQgcGFkIGhhdmUgbm8gYnl0ZSBzZXguCiAJCQkJCSAqLwpAQCAtMTEwLDYgKzEyMiw5IEBACiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQkvKiByZS1jYWxjdWxhdGUgb2YgcmVhbCBudW1zbG90cyAqLworCQkJbnVtc2xvdHMgPSBidWZbaV0uc2l6ZSAvIHNpemVvZihzdHJ1Y3QgZmlzX2ltYWdlX2Rlc2MpOwogCQl9CiAJfQogCWlmIChpID09IG51bXNsb3RzKSB7CkBAIC0xMjMsOCArMTM4LDEzIEBACiAJZm9yIChpID0gMDsgaSA8IG51bXNsb3RzOyBpKyspIHsKIAkJc3RydWN0IGZpc19saXN0ICpuZXdfZmwsICoqcHJldjsKIAotCQlpZiAoYnVmW2ldLm5hbWVbMF0gPT0gMHhmZikKLQkJCWNvbnRpbnVlOworCQlpZiAoYnVmW2ldLm5hbWVbMF0gPT0gMHhmZikgeworCQkJaWYgKGJ1ZltpXS5uYW1lWzFdID09IDB4ZmYpIHsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KIAkJaWYgKCFyZWRib290X2NoZWNrc3VtKCZidWZbaV0pKQogCQkJYnJlYWs7CiAKQEAgLTE2NSwxNSArMTg1LDEzIEBACiAJCX0KIAl9CiAjZW5kaWYKLQlwYXJ0cyA9IGttYWxsb2Moc2l6ZW9mKCpwYXJ0cykqbnJwYXJ0cyArIG51bGxsZW4gKyBuYW1lbGVuLCBHRlBfS0VSTkVMKTsKKwlwYXJ0cyA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJ0cykqbnJwYXJ0cyArIG51bGxsZW4gKyBuYW1lbGVuLCBHRlBfS0VSTkVMKTsKIAogCWlmICghcGFydHMpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQogCi0JbWVtc2V0KHBhcnRzLCAwLCBzaXplb2YoKnBhcnRzKSpucnBhcnRzICsgbnVsbGxlbiArIG5hbWVsZW4pOwotCiAJbnVsbG5hbWUgPSAoY2hhciAqKSZwYXJ0c1tucnBhcnRzXTsKICNpZmRlZiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQKIAlpZiAobnVsbGxlbiA+IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3JmZF9mdGwuYyBiL2RyaXZlcnMvbXRkL3JmZF9mdGwuYwppbmRleCBmYTQzNjJmLi5kNGIxYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9yZmRfZnRsLmMKKysrIGIvZHJpdmVycy9tdGQvcmZkX2Z0bC5jCkBAIC03NjgsNyArNzY4LDcgQEAKIAlpZiAobXRkLT50eXBlICE9IE1URF9OT1JGTEFTSCkKIAkJcmV0dXJuOwogCi0JcGFydCA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwYXJ0aXRpb24pLCBHRlBfS0VSTkVMKTsKKwlwYXJ0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhcnRpdGlvbiksIEdGUF9LRVJORUwpOwogCWlmICghcGFydCkKIAkJcmV0dXJuOwogCkBAIC03ODcsNyArNzg3LDYgQEAKIAogCWlmIChzY2FuX2hlYWRlcihwYXJ0KSA9PSAwKSB7CiAJCXBhcnQtPm1iZC5zaXplID0gcGFydC0+c2VjdG9yX2NvdW50OwotCQlwYXJ0LT5tYmQuYmxrc2l6ZSA9IFNFQ1RPUl9TSVpFOwogCQlwYXJ0LT5tYmQudHIgPSB0cjsKIAkJcGFydC0+bWJkLmRldm51bSA9IC0xOwogCQlpZiAoIShtdGQtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCkBAIC04MjksNiArODI4LDggQEAKIAkubmFtZQkJPSAicmZkIiwKIAkubWFqb3IJCT0gUkZEX0ZUTF9NQUpPUiwKIAkucGFydF9iaXRzCT0gUEFSVF9CSVRTLAorCS5ibGtzaXplIAk9IFNFQ1RPUl9TSVpFLAorCiAJLnJlYWRzZWN0CT0gcmZkX2Z0bF9yZWFkc2VjdCwKIAkud3JpdGVzZWN0CT0gcmZkX2Z0bF93cml0ZXNlY3QsCiAJLmdldGdlbwkJPSByZmRfZnRsX2dldGdlbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3NzZmRjLmMgYi9kcml2ZXJzL210ZC9zc2ZkYy5jCmluZGV4IDc5ZDNiYjYuLmE1ZjNkNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3NzZmRjLmMKKysrIGIvZHJpdmVycy9tdGQvc3NmZGMuYwpAQCAtMTcyLDEzICsxNzIsMTIgQEAKIAogCW9wcy5tb2RlID0gTVREX09PQl9SQVc7CiAJb3BzLm9vYm9mZnMgPSAwOwotCW9wcy5vb2JsZW4gPSBtdGQtPm9vYnNpemU7Ci0Jb3BzLmxlbiA9IE9PQl9TSVpFOworCW9wcy5vb2JsZW4gPSBPT0JfU0laRTsKIAlvcHMub29iYnVmID0gYnVmOwogCW9wcy5kYXRidWYgPSBOVUxMOwogCiAJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIG9mZnMsICZvcHMpOwotCWlmIChyZXQgPCAwIHx8IG9wcy5yZXRsZW4gIT0gT09CX1NJWkUpCisJaWYgKHJldCA8IDAgfHwgb3BzLm9vYnJldGxlbiAhPSBPT0JfU0laRSkKIAkJcmV0dXJuIC0xOwogCiAJcmV0dXJuIDA7CkBAIC0zMTIsNyArMzExLDYgQEAKIAogCXNzZmRjLT5tYmQubXRkID0gbXRkOwogCXNzZmRjLT5tYmQuZGV2bnVtID0gLTE7Ci0Jc3NmZGMtPm1iZC5ibGtzaXplID0gU0VDVE9SX1NJWkU7CiAJc3NmZGMtPm1iZC50ciA9IHRyOwogCXNzZmRjLT5tYmQucmVhZG9ubHkgPSAxOwogCkBAIC00NDcsNiArNDQ1LDcgQEAKIAkubmFtZQkJPSAic3NmZGMiLAogCS5tYWpvcgkJPSBTU0ZEQ1JfTUFKT1IsCiAJLnBhcnRfYml0cwk9IFNTRkRDUl9QQVJUTl9CSVRTLAorCS5ibGtzaXplCT0gU0VDVE9SX1NJWkUsCiAJLmdldGdlbwkJPSBzc2ZkY3JfZ2V0Z2VvLAogCS5yZWFkc2VjdAk9IHNzZmRjcl9yZWFkc2VjdCwKIAkuYWRkX210ZAk9IHNzZmRjcl9hZGRfbXRkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvNzk5MC5jIGIvZHJpdmVycy9uZXQvNzk5MC5jCmluZGV4IDc3MzM2OTcuLjJkNWJhMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0Lzc5OTAuYworKysgYi9kcml2ZXJzL25ldC83OTkwLmMKQEAgLTUwMCw3ICs1MDAsNyBAQAogCWludCByZXM7CiAKICAgICAgICAgLyogSW5zdGFsbCB0aGUgSW50ZXJydXB0IGhhbmRsZXIuIE9yIHdlIGNvdWxkIHNodW50IHRoaXMgb3V0IHRvIHNwZWNpZmljIGRyaXZlcnM/ICovCi0gICAgICAgIGlmIChyZXF1ZXN0X2lycShscC0+aXJxLCBsYW5jZV9pbnRlcnJ1cHQsIDAsIGxwLT5uYW1lLCBkZXYpKQorICAgICAgICBpZiAocmVxdWVzdF9pcnEobHAtPmlycSwgbGFuY2VfaW50ZXJydXB0LCBTQV9TSElSUSwgbHAtPm5hbWUsIGRldikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQUdBSU47CiAKICAgICAgICAgcmVzID0gbGFuY2VfcmVzZXQoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgxMzljcC5jIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKaW5kZXggNDU4ZGQ5Zi4uNmY5M2E3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOWNwLmMKKysrIGIvZHJpdmVycy9uZXQvODEzOWNwLmMKQEAgLTYxNywxMyArNjE3LDE1IEBACiAJICogdGhpcyByb3VuZCBvZiBwb2xsaW5nCiAJICovCiAJaWYgKHJ4X3dvcmspIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCQlpZiAoY3ByMTYoSW50clN0YXR1cykgJiBjcF9yeF9pbnRyX21hc2spCiAJCQlnb3RvIHJ4X3N0YXR1c19sb29wOwogCi0JCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJY3B3MTZfZihJbnRyTWFzaywgY3BfaW50cl9tYXNrKTsKIAkJX19uZXRpZl9yeF9jb21wbGV0ZShkZXYpOwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCQlyZXR1cm4gMDsJLyogZG9uZSAqLwogCX0KQEAgLTc2MywxNyArNzY1LDE4IEBACiAJc3RydWN0IGNwX3ByaXZhdGUgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBlbnRyeTsKIAl1MzIgZW9yLCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGludHJfZmxhZ3M7CiAjaWYgQ1BfVkxBTl9UQUdfVVNFRAogCXUzMiB2bGFuX3RhZyA9IDA7CiAjZW5kaWYKIAlpbnQgbXNzID0gMDsKIAotCXNwaW5fbG9ja19pcnEoJmNwLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGludHJfZmxhZ3MpOwogCiAJLyogVGhpcyBpcyBhIGhhcmQgZXJyb3IsIGxvZyBpdC4gKi8KIAlpZiAoVFhfQlVGRlNfQVZBSUwoY3ApIDw9IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlzcGluX3VubG9ja19pcnEoJmNwLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGludHJfZmxhZ3MpOwogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwogCQlyZXR1cm4gMTsKQEAgLTkwNiw3ICs5MDksNyBAQAogCWlmIChUWF9CVUZGU19BVkFJTChjcCkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZjcC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGludHJfZmxhZ3MpOwogCiAJY3B3OChUeFBvbGwsIE5vcm1hbFR4UG9sbCk7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKaW5kZXggOTMxMDI4Zi4uMzVhZDVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODEzOXRvby5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzl0b28uYwpAQCAtMjEzMSwxNCArMjEzMSwxNSBAQAogCX0KIAogCWlmIChkb25lKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCS8qCiAJCSAqIE9yZGVyIGlzIGltcG9ydGFudCBzaW5jZSBkYXRhIGNhbiBnZXQgaW50ZXJydXB0ZWQKIAkJICogYWdhaW4gd2hlbiB3ZSB0aGluayB3ZSBhcmUgZG9uZS4KIAkJICovCi0JCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJUlRMX1cxNl9GKEludHJNYXNrLCBydGw4MTM5X2ludHJfbWFzayk7CiAJCV9fbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogCXNwaW5fdW5sb2NrKCZ0cC0+cnhfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgyNTk2LmMgYi9kcml2ZXJzL25ldC84MjU5Ni5jCmluZGV4IDgyMzZmMjYuLjY0MGQ3Y2EyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvODI1OTYuYworKysgYi9kcml2ZXJzL25ldC84MjU5Ni5jCkBAIC0xMDY2LDggKzEwNjYsOCBAQAogCXNob3J0IGxlbmd0aCA9IHNrYi0+bGVuOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JREVCKERFQl9TVEFSVFRYLHByaW50ayhLRVJOX0RFQlVHICIlczogaTU5Nl9zdGFydF94bWl0KCV4LCV4KSBjYWxsZWRcbiIsIGRldi0+bmFtZSwKLQkJCQlza2ItPmxlbiwgKHVuc2lnbmVkIGludClza2ItPmRhdGEpKTsKKwlERUIoREVCX1NUQVJUVFgscHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpNTk2X3N0YXJ0X3htaXQoJXgsJXApIGNhbGxlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIHNrYi0+bGVuLCBza2ItPmRhdGEpKTsKIAogCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCkBAIC0xMjQ2LDcgKzEyNDYsOCBAQAogCWRldi0+cHJpdiA9ICh2b2lkICopKGRldi0+bWVtX3N0YXJ0KTsKIAogCWxwID0gZGV2LT5wcml2OwotCURFQihERUJfSU5JVCxwcmludGsoS0VSTl9ERUJVRyAiJXM6IGxwIGF0IDB4JTA4bHggKCVkIGJ5dGVzKSwgbHAtPnNjYiBhdCAweCUwOGx4XG4iLAorCURFQihERUJfSU5JVCxwcmludGsoS0VSTl9ERUJVRyAiJXM6IGxwIGF0IDB4JTA4bHggKCV6ZCBieXRlcyksICIKKwkJCSJscC0+c2NiIGF0IDB4JTA4bHhcbiIsCiAJCQlkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nKWxwLAogCQkJc2l6ZW9mKHN0cnVjdCBpNTk2X3ByaXZhdGUpLCAodW5zaWduZWQgbG9uZykmbHAtPnNjYikpOwogCW1lbXNldCgodm9pZCAqKSBscCwgMCwgc2l6ZW9mKHN0cnVjdCBpNTk2X3ByaXZhdGUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGY1OWJlNWUuLjc5ZWFkZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMjM4NCw2ICsyMzg0LDE0IEBACiAgICAgICAgICAgRW5hYmxlcyBzdXBwb3J0IGZvciBDaGVsc2lvJ3MgZ2lnYWJpdCBFdGhlcm5ldCBQQ0kgY2FyZHMuICBJZiB5b3UKICAgICAgICAgICBhcmUgdXNpbmcgb25seSAxMEcgY2FyZHMgc2F5ICdOJyBoZXJlLgogCitjb25maWcgQ0hFTFNJT19UMV9OQVBJCisJYm9vbCAiVXNlIFJ4IFBvbGxpbmcgKE5BUEkpIgorCWRlcGVuZHMgb24gQ0hFTFNJT19UMQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIE5BUEkgaXMgYSBkcml2ZXIgQVBJIGRlc2lnbmVkIHRvIHJlZHVjZSBDUFUgYW5kIGludGVycnVwdCBsb2FkCisJICB3aGVuIHRoZSBkcml2ZXIgaXMgcmVjZWl2aW5nIGxvdHMgb2YgcGFja2V0cyBmcm9tIHRoZSBjYXJkLgorCiBjb25maWcgRUhFQQogCXRyaXN0YXRlICJlSEVBIEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJQk1FQlVTCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9TcGFjZS5jIGIvZHJpdmVycy9uZXQvU3BhY2UuYwppbmRleCA2MDJlZDMxLi45MzA1ZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9TcGFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L1NwYWNlLmMKQEAgLTM0OSwyMiArMzQ5LDExIEBACiAjZW5kaWYKIAogCi0vKgotICoJVGhlIGxvb3BiYWNrIGRldmljZSBpcyBnbG9iYWwgc28gaXQgY2FuIGJlIGRpcmVjdGx5IHJlZmVyZW5jZWQKLSAqCWJ5IHRoZSBuZXR3b3JrIGNvZGUuIEFsc28sIGl0IG11c3QgYmUgZmlyc3Qgb24gZGV2aWNlIGxpc3QuCi0gKi8KLWV4dGVybiBpbnQgbG9vcGJhY2tfaW5pdCh2b2lkKTsKLQogLyogIFN0YXRpY2FsbHkgY29uZmlndXJlZCBkcml2ZXJzIC0tIG9yZGVyIG1hdHRlcnMgaGVyZS4gKi8KIHN0YXRpYyBpbnQgX19pbml0IG5ldF9vbGRkZXZzX2luaXQodm9pZCkKIHsKIAlpbnQgbnVtOwogCi0JaWYgKGxvb3BiYWNrX2luaXQoKSkgewotCQlwcmludGsoS0VSTl9FUlIgIk5ldHdvcmsgbG9vcGJhY2sgZGV2aWNlIHNldHVwIGZhaWxlZFxuIik7Ci0JfQotCi0KICNpZmRlZiBDT05GSUdfU0JOSQogCWZvciAobnVtID0gMDsgbnVtIDwgODsgKytudW0pCiAJCXNibmlfcHJvYmUobnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwbmUuYyBiL2RyaXZlcnMvbmV0L2FwbmUuYwppbmRleCBkNGU0MDgxLi45NTQxOTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcG5lLmMKKysrIGIvZHJpdmVycy9uZXQvYXBuZS5jCkBAIC0zMTEsOSArMzExLDEwIEBACiAjZW5kaWYKIAogICAgIGRldi0+YmFzZV9hZGRyID0gaW9hZGRyOworICAgIGRldi0+aXJxID0gSVJRX0FNSUdBX1BPUlRTOwogCiAgICAgLyogSW5zdGFsbCB0aGUgSW50ZXJydXB0IGhhbmRsZXIgKi8KLSAgICBpID0gcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBhcG5lX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCBkZXYpOworICAgIGkgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgYXBuZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBEUlZfTkFNRSwgZGV2KTsKICAgICBpZiAoaSkgcmV0dXJuIGk7CiAKICAgICBmb3IoaSA9IDA7IGkgPCBFVEhFUl9BRERSX0xFTjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvaXBkZHAuYyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jCmluZGV4IGI5ODU5MmEuLmYyMmU0NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jCkBAIC0xODYsNyArMTg2LDcgQEAKICAqLwogc3RhdGljIGludCBpcGRkcF9jcmVhdGUoc3RydWN0IGlwZGRwX3JvdXRlICpuZXdfcnQpCiB7Ci0gICAgICAgIHN0cnVjdCBpcGRkcF9yb3V0ZSAqcnQgPShzdHJ1Y3QgaXBkZHBfcm91dGUqKSBrbWFsbG9jKHNpemVvZigqcnQpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgc3RydWN0IGlwZGRwX3JvdXRlICpydCA9IGttYWxsb2Moc2l6ZW9mKCpydCksIEdGUF9LRVJORUwpOwogCiAgICAgICAgIGlmIChydCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKaW5kZXggOGViZDY4ZS4uZGQ2OThiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCkBAIC03ODAsMTIgKzc4MCwxMCBAQAogc3RydWN0IG5ldF9kZXZpY2UgKmVwOTN4eF9kZXZfYWxsb2Moc3RydWN0IGVwOTN4eF9ldGhfZGF0YSAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXA7CiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGVwOTN4eF9wcml2KSk7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQllcCA9IG5ldGRldl9wcml2KGRldik7CiAKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgZGF0YS0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIApAQCAtODQwLDkgKzgzOCw5IEBACiAJc3RydWN0IGVwOTN4eF9wcml2ICplcDsKIAlpbnQgZXJyOwogCi0JZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmIChwZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOworCWRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWRldiA9IGVwOTN4eF9kZXZfYWxsb2MoZGF0YSk7CiAJaWYgKGRldiA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iNDQuYyBiL2RyaXZlcnMvbmV0L2I0NC5jCmluZGV4IDQ3NGE0ZTM0Li4zMDNhOGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iNDQuYworKysgYi9kcml2ZXJzL25ldC9iNDQuYwpAQCAtMTEwLDYgKzExMCwxMSBAQAogCiBzdGF0aWMgdm9pZCBiNDRfaGFsdChzdHJ1Y3QgYjQ0ICopOwogc3RhdGljIHZvaWQgYjQ0X2luaXRfcmluZ3Moc3RydWN0IGI0NCAqKTsKKworI2RlZmluZSBCNDRfRlVMTF9SRVNFVAkJMQorI2RlZmluZSBCNDRfRlVMTF9SRVNFVF9TS0lQX1BIWQkyCisjZGVmaW5lIEI0NF9QQVJUSUFMX1JFU0VUCTMKKwogc3RhdGljIHZvaWQgYjQ0X2luaXRfaHcoc3RydWN0IGI0NCAqLCBpbnQpOwogCiBzdGF0aWMgaW50IGRtYV9kZXNjX2FsaWduX21hc2s7CkBAIC03NTIsNyArNzU3LDcgQEAKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2lkeCAqIHNpemVvZihkZXN0X2Rlc2MpLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKIAotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShicC0+cGRldiwgc3JjX2Rlc2MtPmFkZHIsCisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5wZGV2LCBsZTMyX3RvX2NwdShzcmNfZGVzYy0+YWRkciksCiAJCQkJICAgICAgIFJYX1BLVF9CVUZfU1osCiAJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiB9CkBAIC04NzksMTIgKzg4NCwxNCBAQAogCX0KIAogCWlmIChicC0+aXN0YXQgJiBJU1RBVF9FUlJPUlMpIHsKLQkJc3Bpbl9sb2NrX2lycSgmYnAtPmxvY2spOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOwogCQliNDRfaGFsdChicCk7CiAJCWI0NF9pbml0X3JpbmdzKGJwKTsKLQkJYjQ0X2luaXRfaHcoYnAsIDEpOworCQliNDRfaW5pdF9odyhicCwgQjQ0X0ZVTExfUkVTRVRfU0tJUF9QSFkpOwogCQluZXRpZl93YWtlX3F1ZXVlKGJwLT5kZXYpOwotCQlzcGluX3VubG9ja19pcnEoJmJwLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAkJZG9uZSA9IDE7CiAJfQogCkBAIC05NTIsNyArOTU5LDcgQEAKIAogCWI0NF9oYWx0KGJwKTsKIAliNDRfaW5pdF9yaW5ncyhicCk7Ci0JYjQ0X2luaXRfaHcoYnAsIDEpOworCWI0NF9pbml0X2h3KGJwLCBCNDRfRlVMTF9SRVNFVCk7CiAKIAlzcGluX3VubG9ja19pcnEoJmJwLT5sb2NrKTsKIApAQCAtMTA2OSw3ICsxMDc2LDcgQEAKIAliNDRfaGFsdChicCk7CiAJZGV2LT5tdHUgPSBuZXdfbXR1OwogCWI0NF9pbml0X3JpbmdzKGJwKTsKLQliNDRfaW5pdF9odyhicCwgMSk7CisJYjQ0X2luaXRfaHcoYnAsIEI0NF9GVUxMX1JFU0VUKTsKIAlzcGluX3VubG9ja19pcnEoJmJwLT5sb2NrKTsKIAogCWI0NF9lbmFibGVfaW50cyhicCk7CkBAIC0xMzY2LDEyICsxMzczLDEyIEBACiAgKiBwYWNrZXQgcHJvY2Vzc2luZy4gIEludm9rZWQgd2l0aCBicC0+bG9jayBoZWxkLgogICovCiBzdGF0aWMgdm9pZCBfX2I0NF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyB2b2lkIGI0NF9pbml0X2h3KHN0cnVjdCBiNDQgKmJwLCBpbnQgZnVsbF9yZXNldCkKK3N0YXRpYyB2b2lkIGI0NF9pbml0X2h3KHN0cnVjdCBiNDQgKmJwLCBpbnQgcmVzZXRfa2luZCkKIHsKIAl1MzIgdmFsOwogCiAJYjQ0X2NoaXBfcmVzZXQoYnApOwotCWlmIChmdWxsX3Jlc2V0KSB7CisJaWYgKHJlc2V0X2tpbmQgPT0gQjQ0X0ZVTExfUkVTRVQpIHsKIAkJYjQ0X3BoeV9yZXNldChicCk7CiAJCWI0NF9zZXR1cF9waHkoYnApOwogCX0KQEAgLTEzODgsNyArMTM5NSwxMCBAQAogCWJ3MzIoYnAsIEI0NF9UWE1BWExFTiwgYnAtPmRldi0+bXR1ICsgRVRIX0hMRU4gKyA4ICsgUlhfSEVBREVSX0xFTik7CiAKIAlidzMyKGJwLCBCNDRfVFhfV01BUkssIDU2KTsgLyogWFhYIG1hZ2ljICovCi0JaWYgKGZ1bGxfcmVzZXQpIHsKKwlpZiAocmVzZXRfa2luZCA9PSBCNDRfUEFSVElBTF9SRVNFVCkgeworCQlidzMyKGJwLCBCNDRfRE1BUlhfQ1RSTCwgKERNQVJYX0NUUkxfRU5BQkxFIHwKKwkJCQkgICAgICAoYnAtPnJ4X29mZnNldCA8PCBETUFSWF9DVFJMX1JPU0hJRlQpKSk7CisJfSBlbHNlIHsKIAkJYnczMihicCwgQjQ0X0RNQVRYX0NUUkwsIERNQVRYX0NUUkxfRU5BQkxFKTsKIAkJYnczMihicCwgQjQ0X0RNQVRYX0FERFIsIGJwLT50eF9yaW5nX2RtYSArIGJwLT5kbWFfb2Zmc2V0KTsKIAkJYnczMihicCwgQjQ0X0RNQVJYX0NUUkwsIChETUFSWF9DVFJMX0VOQUJMRSB8CkBAIC0xMzk5LDkgKzE0MDksNiBAQAogCQlicC0+cnhfcHJvZCA9IGJwLT5yeF9wZW5kaW5nOwogCiAJCWJ3MzIoYnAsIEI0NF9NSUJfQ1RSTCwgTUlCX0NUUkxfQ0xSX09OX1JFQUQpOwotCX0gZWxzZSB7Ci0JCWJ3MzIoYnAsIEI0NF9ETUFSWF9DVFJMLCAoRE1BUlhfQ1RSTF9FTkFCTEUgfAotCQkJCSAgICAgIChicC0+cnhfb2Zmc2V0IDw8IERNQVJYX0NUUkxfUk9TSElGVCkpKTsKIAl9CiAKIAl2YWwgPSBicjMyKGJwLCBCNDRfRU5FVF9DVFJMKTsKQEAgLTE0MTgsNyArMTQyNSw3IEBACiAJCWdvdG8gb3V0OwogCiAJYjQ0X2luaXRfcmluZ3MoYnApOwotCWI0NF9pbml0X2h3KGJwLCAxKTsKKwliNDRfaW5pdF9odyhicCwgQjQ0X0ZVTExfUkVTRVQpOwogCiAJYjQ0X2NoZWNrX3BoeShicCk7CiAKQEAgLTE2MjcsNyArMTYzNCw3IEBACiAJbmV0aWZfcG9sbF9lbmFibGUoZGV2KTsKIAogCWlmIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19XT0xfRU5BQkxFKSB7Ci0JCWI0NF9pbml0X2h3KGJwLCAwKTsKKwkJYjQ0X2luaXRfaHcoYnAsIEI0NF9QQVJUSUFMX1JFU0VUKTsKIAkJYjQ0X3NldHVwX3dvbChicCk7CiAJfQogCkBAIC0xOTAzLDcgKzE5MTAsNyBAQAogCiAJYjQ0X2hhbHQoYnApOwogCWI0NF9pbml0X3JpbmdzKGJwKTsKLQliNDRfaW5pdF9odyhicCwgMSk7CisJYjQ0X2luaXRfaHcoYnAsIEI0NF9GVUxMX1JFU0VUKTsKIAluZXRpZl93YWtlX3F1ZXVlKGJwLT5kZXYpOwogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCkBAIC0xOTQ2LDcgKzE5NTMsNyBAQAogCWlmIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19QQVVTRV9BVVRPKSB7CiAJCWI0NF9oYWx0KGJwKTsKIAkJYjQ0X2luaXRfcmluZ3MoYnApOwotCQliNDRfaW5pdF9odyhicCwgMSk7CisJCWI0NF9pbml0X2h3KGJwLCBCNDRfRlVMTF9SRVNFVCk7CiAJfSBlbHNlIHsKIAkJX19iNDRfc2V0X2Zsb3dfY3RybChicCwgYnAtPmZsYWdzKTsKIAl9CkBAIC0yMzAyLDcgKzIzMDksNyBAQAogCiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAJaWYgKGJwLT5mbGFncyAmIEI0NF9GTEFHX1dPTF9FTkFCTEUpIHsKLQkJYjQ0X2luaXRfaHcoYnAsIDApOworCQliNDRfaW5pdF9odyhicCwgQjQ0X1BBUlRJQUxfUkVTRVQpOwogCQliNDRfc2V0dXBfd29sKGJwKTsKIAl9CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtMjMxMywyMSArMjMyMCwzMiBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGI0NCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByYyA9IDA7CiAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkXG4iLAorCQkJZGV2LT5uYW1lKTsKKwkJcmV0dXJuIHJjOworCX0KKwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCi0JaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBiNDRfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKQorCXJjID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGI0NF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CisJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0dXJuIHJjOworCX0KIAogCXNwaW5fbG9ja19pcnEoJmJwLT5sb2NrKTsKIAogCWI0NF9pbml0X3JpbmdzKGJwKTsKLQliNDRfaW5pdF9odyhicCwgMSk7CisJYjQ0X2luaXRfaHcoYnAsIEI0NF9GVUxMX1JFU0VUKTsKIAluZXRpZl9kZXZpY2VfYXR0YWNoKGJwLT5kZXYpOwogCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggNWJhY2I3NS4uZWU3Yjc1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNTcsOCArNTcsOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDIiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNS4xIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk5vdmVtYmVyIDE1LCAyMDA2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNS41IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYnJ1YXJ5IDEsIDIwMDciCiAKICNkZWZpbmUgUlVOX0FUKHgpIChqaWZmaWVzICsgKHgpKQogCkBAIC0yMTcsOSArMjE3LDE2IEBACiAJdTMyIGRpZmY7CiAKIAlzbXBfbWIoKTsKLQlkaWZmID0gVFhfUklOR19JRFgoYnAtPnR4X3Byb2QpIC0gVFhfUklOR19JRFgoYnAtPnR4X2NvbnMpOwotCWlmIChkaWZmID4gTUFYX1RYX0RFU0NfQ05UKQotCQlkaWZmID0gKGRpZmYgJiBNQVhfVFhfREVTQ19DTlQpIC0gMTsKKworCS8qIFRoZSByaW5nIHVzZXMgMjU2IGluZGljZXMgZm9yIDI1NSBlbnRyaWVzLCBvbmUgb2YgdGhlbQorCSAqIG5lZWRzIHRvIGJlIHNraXBwZWQuCisJICovCisJZGlmZiA9IGJwLT50eF9wcm9kIC0gYnAtPnR4X2NvbnM7CisJaWYgKHVubGlrZWx5KGRpZmYgPj0gVFhfREVTQ19DTlQpKSB7CisJCWRpZmYgJj0gMHhmZmZmOworCQlpZiAoZGlmZiA9PSBUWF9ERVNDX0NOVCkKKwkJCWRpZmYgPSBNQVhfVFhfREVTQ19DTlQ7CisJfQogCXJldHVybiAoYnAtPnR4X3Jpbmdfc2l6ZSAtIGRpZmYpOwogfQogCkBAIC0xMzM4LDggKzEzNDUsNiBAQAogewogCXUzMiB2YWw7CiAKLQlicC0+cGh5X2ZsYWdzIHw9IFBIWV9DUkNfRklYX0ZMQUc7Ci0KIAlpZiAoYnAtPnBoeV9mbGFncyAmIFBIWV9DUkNfRklYX0ZMQUcpIHsKIAkJYm54Ml93cml0ZV9waHkoYnAsIDB4MTgsIDB4MGMwMCk7CiAJCWJueDJfd3JpdGVfcGh5KGJwLCAweDE3LCAweDAwMGEpOwpAQCAtMTM1MSw2ICsxMzU2LDE0IEBACiAJCWJueDJfd3JpdGVfcGh5KGJwLCAweDE4LCAweDA0MDApOwogCX0KIAorCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX0RJU19FQVJMWV9EQUNfRkxBRykgeworCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0JOWDJfRFNQX0FERFJFU1MsCisJCQkgICAgICAgTUlJX0JOWDJfRFNQX0VYUEFORF9SRUcgfCAweDgpOworCQlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk5YMl9EU1BfUldfUE9SVCwgJnZhbCk7CisJCXZhbCAmPSB+KDEgPDwgOCk7CisJCWJueDJfd3JpdGVfcGh5KGJwLCBNSUlfQk5YMl9EU1BfUldfUE9SVCwgdmFsKTsKKwl9CisKIAlpZiAoYnAtPmRldi0+bXR1ID4gMTUwMCkgewogCQkvKiBTZXQgZXh0ZW5kZWQgcGFja2V0IGxlbmd0aCBiaXQgKi8KIAkJYm54Ml93cml0ZV9waHkoYnAsIDB4MTgsIDB4Nyk7CkBAIC0yNTEwLDcgKzI1MjMsNyBAQAogCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkgewogCQlmdyA9ICZibngyX2NwX2Z3XzA5OwogCi0JCWxvYWRfY3B1X2Z3KGJwLCAmY3B1X3JlZywgZncpOworCQlyYyA9IGxvYWRfY3B1X2Z3KGJwLCAmY3B1X3JlZywgZncpOwogCQlpZiAocmMpCiAJCQlnb3RvIGluaXRfY3B1X2VycjsKIAl9CkBAIC0zMDc4LDcgKzMwOTEsNyBAQAogCQlpbnQgYnVmX3NpemUpCiB7CiAJdTMyIHdyaXR0ZW4sIG9mZnNldDMyLCBsZW4zMjsKLQl1OCAqYnVmLCBzdGFydFs0XSwgZW5kWzRdLCAqZmxhc2hfYnVmZmVyID0gTlVMTDsKKwl1OCAqYnVmLCBzdGFydFs0XSwgZW5kWzRdLCAqYWxpZ25fYnVmID0gTlVMTCwgKmZsYXNoX2J1ZmZlciA9IE5VTEw7CiAJaW50IHJjID0gMDsKIAlpbnQgYWxpZ25fc3RhcnQsIGFsaWduX2VuZDsKIApAQCAtMzA4OSw3ICszMTAyLDcgQEAKIAogCWlmICgoYWxpZ25fc3RhcnQgPSAob2Zmc2V0MzIgJiAzKSkpIHsKIAkJb2Zmc2V0MzIgJj0gfjM7Ci0JCWxlbjMyICs9IGFsaWduX3N0YXJ0OworCQlsZW4zMiArPSAoNCAtIGFsaWduX3N0YXJ0KTsKIAkJaWYgKChyYyA9IGJueDJfbnZyYW1fcmVhZChicCwgb2Zmc2V0MzIsIHN0YXJ0LCA0KSkpCiAJCQlyZXR1cm4gcmM7CiAJfQpAQCAtMzEwNiwxNiArMzExOSwxNyBAQAogCX0KIAogCWlmIChhbGlnbl9zdGFydCB8fCBhbGlnbl9lbmQpIHsKLQkJYnVmID0ga21hbGxvYyhsZW4zMiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChidWYgPT0gMCkKKwkJYWxpZ25fYnVmID0ga21hbGxvYyhsZW4zMiwgR0ZQX0tFUk5FTCk7CisJCWlmIChhbGlnbl9idWYgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlpZiAoYWxpZ25fc3RhcnQpIHsKLQkJCW1lbWNweShidWYsIHN0YXJ0LCA0KTsKKwkJCW1lbWNweShhbGlnbl9idWYsIHN0YXJ0LCA0KTsKIAkJfQogCQlpZiAoYWxpZ25fZW5kKSB7Ci0JCQltZW1jcHkoYnVmICsgbGVuMzIgLSA0LCBlbmQsIDQpOworCQkJbWVtY3B5KGFsaWduX2J1ZiArIGxlbjMyIC0gNCwgZW5kLCA0KTsKIAkJfQotCQltZW1jcHkoYnVmICsgYWxpZ25fc3RhcnQsIGRhdGFfYnVmLCBidWZfc2l6ZSk7CisJCW1lbWNweShhbGlnbl9idWYgKyBhbGlnbl9zdGFydCwgZGF0YV9idWYsIGJ1Zl9zaXplKTsKKwkJYnVmID0gYWxpZ25fYnVmOwogCX0KIAogCWlmIChicC0+Zmxhc2hfaW5mby0+YnVmZmVyZWQgPT0gMCkgewpAQCAtMzI0OSwxMSArMzI2Myw4IEBACiAJfQogCiBudnJhbV93cml0ZV9lbmQ6Ci0JaWYgKGJwLT5mbGFzaF9pbmZvLT5idWZmZXJlZCA9PSAwKQotCQlrZnJlZShmbGFzaF9idWZmZXIpOwotCi0JaWYgKGFsaWduX3N0YXJ0IHx8IGFsaWduX2VuZCkKLQkJa2ZyZWUoYnVmKTsKKwlrZnJlZShmbGFzaF9idWZmZXIpOworCWtmcmVlKGFsaWduX2J1Zik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zOTk4LDcgKzQwMDksNyBAQAogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIAlwYWNrZXQgPSBza2JfcHV0KHNrYiwgcGt0X3NpemUpOwotCW1lbWNweShwYWNrZXQsIGJwLT5tYWNfYWRkciwgNik7CisJbWVtY3B5KHBhY2tldCwgYnAtPmRldi0+ZGV2X2FkZHIsIDYpOwogCW1lbXNldChwYWNrZXQgKyA2LCAweDAsIDgpOwogCWZvciAoaSA9IDE0OyBpIDwgcGt0X3NpemU7IGkrKykKIAkJcGFja2V0W2ldID0gKHVuc2lnbmVkIGNoYXIpIChpICYgMHhmZik7CkBAIC01NjM4LDYgKzU2NDksNDQgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBfX2RldmluaXQKK2JueDJfZ2V0XzU3MDlfbWVkaWEoc3RydWN0IGJueDIgKmJwKQoreworCXUzMiB2YWwgPSBSRUdfUkQoYnAsIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkwpOworCXUzMiBib25kX2lkID0gdmFsICYgQk5YMl9NSVNDX0RVQUxfTUVESUFfQ1RSTF9CT05EX0lEOworCXUzMiBzdHJhcDsKKworCWlmIChib25kX2lkID09IEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfQk9ORF9JRF9DKQorCQlyZXR1cm47CisJZWxzZSBpZiAoYm9uZF9pZCA9PSBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX0JPTkRfSURfUykgeworCQlicC0+cGh5X2ZsYWdzIHw9IFBIWV9TRVJERVNfRkxBRzsKKwkJcmV0dXJuOworCX0KKworCWlmICh2YWwgJiBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX1NUUkFQX09WRVJSSURFKQorCQlzdHJhcCA9ICh2YWwgJiBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX1BIWV9DVFJMKSA+PiAyMTsKKwllbHNlCisJCXN0cmFwID0gKHZhbCAmIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfUEhZX0NUUkxfU1RSQVApID4+IDg7CisKKwlpZiAoUENJX0ZVTkMoYnAtPnBkZXYtPmRldmZuKSA9PSAwKSB7CisJCXN3aXRjaCAoc3RyYXApIHsKKwkJY2FzZSAweDQ6CisJCWNhc2UgMHg1OgorCQljYXNlIDB4NjoKKwkJCWJwLT5waHlfZmxhZ3MgfD0gUEhZX1NFUkRFU19GTEFHOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChzdHJhcCkgeworCQljYXNlIDB4MToKKwkJY2FzZSAweDI6CisJCWNhc2UgMHg0OgorCQkJYnAtPnBoeV9mbGFncyB8PSBQSFlfU0VSREVTX0ZMQUc7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBibngyX2luaXRfYm9hcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC01ODA0LDkgKzU4NTMsMTEgQEAKIAlyZWcgPSBSRUdfUkRfSU5EKGJwLCBCTlgyX1NITV9IRFJfU0lHTkFUVVJFKTsKIAogCWlmICgocmVnICYgQk5YMl9TSE1fSERSX1NJR05BVFVSRV9TSUdfTUFTSykgPT0KLQkgICAgQk5YMl9TSE1fSERSX1NJR05BVFVSRV9TSUcpCi0JCWJwLT5zaG1lbV9iYXNlID0gUkVHX1JEX0lORChicCwgQk5YMl9TSE1fSERSX0FERFJfMCk7Ci0JZWxzZQorCSAgICBCTlgyX1NITV9IRFJfU0lHTkFUVVJFX1NJRykgeworCQl1MzIgb2ZmID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pIDw8IDI7CisKKwkJYnAtPnNobWVtX2Jhc2UgPSBSRUdfUkRfSU5EKGJwLCBCTlgyX1NITV9IRFJfQUREUl8wICsgb2ZmKTsKKwl9IGVsc2UKIAkJYnAtPnNobWVtX2Jhc2UgPSBIT1NUX1ZJRVdfU0hNRU1fQkFTRTsKIAogCS8qIEdldCB0aGUgcGVybWFuZW50IE1BQyBhZGRyZXNzLiAgRmlyc3Qgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlCkBAIC01ODU4LDEwICs1OTA5LDkgQEAKIAlicC0+cGh5X2FkZHIgPSAxOwogCiAJLyogRGlzYWJsZSBXT0wgc3VwcG9ydCBpZiB3ZSBhcmUgcnVubmluZyBvbiBhIFNFUkRFUyBjaGlwLiAqLwotCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkgewotCQlpZiAoQ0hJUF9CT05EX0lEKGJwKSAhPSBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX0JPTkRfSURfQykKLQkJCWJwLT5waHlfZmxhZ3MgfD0gUEhZX1NFUkRFU19GTEFHOwotCX0gZWxzZSBpZiAoQ0hJUF9CT05EX0lEKGJwKSAmIENISVBfQk9ORF9JRF9TRVJERVNfQklUKQorCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkKKwkJYm54Ml9nZXRfNTcwOV9tZWRpYShicCk7CisJZWxzZSBpZiAoQ0hJUF9CT05EX0lEKGJwKSAmIENISVBfQk9ORF9JRF9TRVJERVNfQklUKQogCQlicC0+cGh5X2ZsYWdzIHw9IFBIWV9TRVJERVNfRkxBRzsKIAogCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX1NFUkRFU19GTEFHKSB7CkBAIC01ODczLDcgKzU5MjMsMTEgQEAKIAkJCWlmIChyZWcgJiBCTlgyX1NIQVJFRF9IV19DRkdfUEhZXzJfNUcpCiAJCQkJYnAtPnBoeV9mbGFncyB8PSBQSFlfMl81R19DQVBBQkxFX0ZMQUc7CiAJCX0KLQl9CisJfSBlbHNlIGlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwNiB8fAorCQkgICBDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOCkKKwkJYnAtPnBoeV9mbGFncyB8PSBQSFlfQ1JDX0ZJWF9GTEFHOworCWVsc2UgaWYgKENISVBfSUQoYnApID09IENISVBfSURfNTcwOV9BMCkKKwkJYnAtPnBoeV9mbGFncyB8PSBQSFlfRElTX0VBUkxZX0RBQ19GTEFHOwogCiAJaWYgKChDSElQX0lEKGJwKSA9PSBDSElQX0lEXzU3MDhfQTApIHx8CiAJICAgIChDSElQX0lEKGJwKSA9PSBDSElQX0lEXzU3MDhfQjApIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggMTNiNmY5Yi4uY2NiZGY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtNjI4OCw2ICs2Mjg4LDEwIEBACiAKICNkZWZpbmUgQkNNNTcwOFNfVFhfQUNUTDMJCQkweDE3CiAKKyNkZWZpbmUgTUlJX0JOWDJfRFNQX1JXX1BPUlQJCQkweDE1CisjZGVmaW5lIE1JSV9CTlgyX0RTUF9BRERSRVNTCQkJMHgxNworI2RlZmluZSBNSUlfQk5YMl9EU1BfRVhQQU5EX1JFRwkJCSAweDBmMDAKKwogI2RlZmluZSBNSU5fRVRIRVJORVRfUEFDS0VUX1NJWkUJNjAKICNkZWZpbmUgTUFYX0VUSEVSTkVUX1BBQ0tFVF9TSVpFCTE1MTQKICNkZWZpbmUgTUFYX0VUSEVSTkVUX0pVTUJPX1BBQ0tFVF9TSVpFCTkwMTQKQEAgLTY0ODksNiArNjQ5Myw3IEBACiAjZGVmaW5lIFBIWV9JTlRfTU9ERV9NQVNLX0ZMQUcJCTB4MzAwCiAjZGVmaW5lIFBIWV9JTlRfTU9ERV9BVVRPX1BPTExJTkdfRkxBRwkweDEwMAogI2RlZmluZSBQSFlfSU5UX01PREVfTElOS19SRUFEWV9GTEFHCTB4MjAwCisjZGVmaW5lIFBIWV9ESVNfRUFSTFlfREFDX0ZMQUcJCTB4NDAwCiAKIAl1MzIJCQljaGlwX2lkOwogCS8qIGNoaXAgbnVtOjE2LTMxLCByZXY6MTItMTUsIG1ldGFsOjQtMTEsIGJvbmRfaWQ6MC0zICovCkBAIC02NTEyLDYgKzY1MTcsNyBAQAogI2RlZmluZSBDSElQX0lEXzU3MDhfQTAJCQkweDU3MDgwMDAwCiAjZGVmaW5lIENISVBfSURfNTcwOF9CMAkJCTB4NTcwODEwMDAKICNkZWZpbmUgQ0hJUF9JRF81NzA4X0IxCQkJMHg1NzA4MTAxMAorI2RlZmluZSBDSElQX0lEXzU3MDlfQTAJCQkweDU3MDkwMDAwCiAKICNkZWZpbmUgQ0hJUF9CT05EX0lEKGJwKQkJKCgoYnApLT5jaGlwX2lkKSAmIDB4ZikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAppbmRleCBkYzQzNGZiLi4wOTc4YzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaApAQCAtMTUxLDggKzE1MSw4IEBACiAJc3RydWN0IHNsYXZlICpuZXh0OwogCXN0cnVjdCBzbGF2ZSAqcHJldjsKIAlpbnQgICAgZGVsYXk7Ci0JdTMyICAgIGppZmZpZXM7Ci0JdTMyICAgIGxhc3RfYXJwX3J4OworCXVuc2lnbmVkIGxvbmcgamlmZmllczsKKwl1bnNpZ25lZCBsb25nIGxhc3RfYXJwX3J4OwogCXM4ICAgICBsaW5rOyAgICAvKiBvbmUgb2YgQk9ORF9MSU5LX1hYWFggKi8KIAlzOCAgICAgc3RhdGU7ICAgLyogb25lIG9mIEJPTkRfU1RBVEVfWFhYWCAqLwogCXUzMiAgICBvcmlnaW5hbF9mbGFnczsKQEAgLTI0Miw3ICsyNDIsOCBAQAogCXJldHVybiBib25kLT5wYXJhbXMuYXJwX3ZhbGlkYXRlICYgKDEgPDwgc2xhdmUtPnN0YXRlKTsKIH0KIAotZXh0ZXJuIGlubGluZSB1MzIgc2xhdmVfbGFzdF9yeChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSkKK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGF2ZV9sYXN0X3J4KHN0cnVjdCBib25kaW5nICpib25kLAorCQkJCQlzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewogCWlmIChzbGF2ZV9kb19hcnBfdmFsaWRhdGUoYm9uZCwgc2xhdmUpKQogCQlyZXR1cm4gc2xhdmUtPmxhc3RfYXJwX3J4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYnNkX2NvbXAuYyBiL2RyaXZlcnMvbmV0L2JzZF9jb21wLmMKaW5kZXggYmFlMWRlMS4uNzg0NWVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYnNkX2NvbXAuYworKysgYi9kcml2ZXJzL25ldC9ic2RfY29tcC5jCkBAIC0zOTUsNyArMzk1LDcgQEAKICAqIEFsbG9jYXRlIHRoZSBtYWluIGNvbnRyb2wgc3RydWN0dXJlIGZvciB0aGlzIGluc3RhbmNlLgogICovCiAgICAgbWF4bWF4Y29kZSA9IE1BWENPREUoYml0cyk7Ci0gICAgZGIgICAgICAgICA9IChzdHJ1Y3QgYnNkX2RiICopIGttYWxsb2MgKHNpemVvZiAoc3RydWN0IGJzZF9kYiksCisgICAgZGIgICAgICAgICA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgYnNkX2RiKSwKIAkJCQkJICAgIEdGUF9LRVJORUwpOwogICAgIGlmICghZGIpCiAgICAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKaW5kZXggZGU0OGVhZC4uZmQ1ZDgyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKQEAgLTIyMCw5ICsyMjAsOCBAQAogCiAJdDFfaW50ZXJydXB0c19jbGVhcihhZGFwdGVyKTsKIAotCWFkYXB0ZXItPnBhcmFtcy5oYXNfbXNpID0gIWRpc2FibGVfbXNpICYmIHBjaV9lbmFibGVfbXNpKGFkYXB0ZXItPnBkZXYpID09IDA7Ci0JZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLAotCQkJICB0MV9zZWxlY3RfaW50cl9oYW5kbGVyKGFkYXB0ZXIpLAorCWFkYXB0ZXItPnBhcmFtcy5oYXNfbXNpID0gIWRpc2FibGVfbXNpICYmICFwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKKwllcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsIHQxX2ludGVycnVwdCwKIAkJCSAgYWRhcHRlci0+cGFyYW1zLmhhc19tc2kgPyAwIDogSVJRRl9TSEFSRUQsCiAJCQkgIGFkYXB0ZXItPm5hbWUsIGFkYXB0ZXIpOwogCWlmIChlcnIpIHsKQEAgLTc2NCwxOCArNzYzLDcgQEAKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+cHJpdjsKIAotCS8qCi0JICogSWYgUlggY29hbGVzY2luZyBpcyByZXF1ZXN0ZWQgd2UgdXNlIE5BUEksIG90aGVyd2lzZSBpbnRlcnJ1cHRzLgotCSAqIFRoaXMgY2hvaWNlIGNhbiBiZSBtYWRlIG9ubHkgd2hlbiBhbGwgcG9ydHMgYW5kIHRoZSBUT0UgYXJlIG9mZi4KLQkgKi8KLQlpZiAoYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwID09IDApCi0JCWFkYXB0ZXItPnBhcmFtcy5zZ2UucG9sbGluZyA9IGMtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKLQotCWlmIChhZGFwdGVyLT5wYXJhbXMuc2dlLnBvbGxpbmcpIHsKLQkJYWRhcHRlci0+cGFyYW1zLnNnZS5yeF9jb2FsZXNjZV91c2VjcyA9IDA7Ci0JfSBlbHNlIHsKLQkJYWRhcHRlci0+cGFyYW1zLnNnZS5yeF9jb2FsZXNjZV91c2VjcyA9IGMtPnJ4X2NvYWxlc2NlX3VzZWNzOwotCX0KKwlhZGFwdGVyLT5wYXJhbXMuc2dlLnJ4X2NvYWxlc2NlX3VzZWNzID0gYy0+cnhfY29hbGVzY2VfdXNlY3M7CiAgCWFkYXB0ZXItPnBhcmFtcy5zZ2UuY29hbGVzY2VfZW5hYmxlID0gYy0+dXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlOwogCWFkYXB0ZXItPnBhcmFtcy5zZ2Uuc2FtcGxlX2ludGVydmFsX3VzZWNzID0gYy0+cmF0ZV9zYW1wbGVfaW50ZXJ2YWw7CiAJdDFfc2dlX3NldF9jb2FsZXNjZV9wYXJhbXMoYWRhcHRlci0+c2dlLCAmYWRhcHRlci0+cGFyYW1zLnNnZSk7CkBAIC05NDQsNyArOTMyLDcgQEAKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+cHJpdjsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl0MV9zZWxlY3RfaW50cl9oYW5kbGVyKGFkYXB0ZXIpKGFkYXB0ZXItPnBkZXYtPmlycSwgYWRhcHRlcik7CisJdDFfaW50ZXJydXB0KGFkYXB0ZXItPnBkZXYtPmlycSwgYWRhcHRlcik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogI2VuZGlmCkBAIC0xMTY1LDcgKzExNTMsMTAgQEAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCQluZXRkZXYtPnBvbGxfY29udHJvbGxlciA9IHQxX25ldHBvbGw7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ0hFTFNJT19UMV9OQVBJCiAJCW5ldGRldi0+d2VpZ2h0ID0gNjQ7CisJCW5ldGRldi0+cG9sbCA9IHQxX3BvbGw7CisjZW5kaWYKIAogCQlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmdDFfZXRodG9vbF9vcHMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXkzMTI2LmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL215MzEyNi5jCmluZGV4IGM3NzMxYjYuLjgyZmVkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXkzMTI2LmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9teTMxMjYuYwpAQCAtMTcwLDkgKzE3MCwxMCBAQAogewogCXN0cnVjdCBjcGh5ICpjcGh5ID0ga3phbGxvYyhzaXplb2YgKCpjcGh5KSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAoY3BoeSkKLQkJY3BoeV9pbml0KGNwaHksIGFkYXB0ZXIsIHBoeV9hZGRyLCAmbXkzMTI2X29wcywgbWRpb19vcHMpOworCWlmICghY3BoeSkKKwkJcmV0dXJuIE5VTEw7CiAKKwljcGh5X2luaXQoY3BoeSwgYWRhcHRlciwgcGh5X2FkZHIsICZteTMxMjZfb3BzLCBtZGlvX29wcyk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmNwaHktPnBoeV91cGRhdGUsIG15MzIxNl9wb2xsKTsKIAljcGh5LT5ibXNyID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKaW5kZXggMGNhOGQ4Ny4uNjU5Y2IyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCkBAIC0xNDEzLDE2ICsxNDEzLDIwIEBACiAKIAlpZiAodW5saWtlbHkoYWRhcHRlci0+dmxhbl9ncnAgJiYgcC0+dmxhbl92YWxpZCkpIHsKIAkJc3QtPnZsYW5feHRyYWN0Kys7Ci0JCWlmIChhZGFwdGVyLT5wYXJhbXMuc2dlLnBvbGxpbmcpCisjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfTkFQSQogCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxhbl9ncnAsCiAJCQkJCQkgbnRvaHMocC0+dmxhbikpOwotCQllbHNlCisjZWxzZQogCQkJdmxhbl9od2FjY2VsX3J4KHNrYiwgYWRhcHRlci0+dmxhbl9ncnAsCiAJCQkJCW50b2hzKHAtPnZsYW4pKTsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPnBhcmFtcy5zZ2UucG9sbGluZykKKyNlbmRpZgorCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfTkFQSQogCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCWVsc2UKKyNlbHNlCiAJCW5ldGlmX3J4KHNrYik7CisjZW5kaWYKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1NzIsNiArMTU3Niw3IEBACiAJcmV0dXJuIGJ1ZGdldDsKIH0KIAorI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxX05BUEkKIC8qCiAgKiBBIHNpbXBsZXIgdmVyc2lvbiBvZiBwcm9jZXNzX3Jlc3BvbnNlcygpIHRoYXQgaGFuZGxlcyBvbmx5IHB1cmUgKGkuZS4sCiAgKiBub24gZGF0YS1jYXJyeWluZykgcmVzcG9uc2VzLiAgU3VjaCByZXNwb25lcyBhcmUgdG9vIGxpZ2h0LXdlaWdodCB0byBqdXN0aWZ5CkBAIC0xNjE5LDkyICsxNjI0LDc2IEBACiAgKiBvciBwcm90ZWN0aW9uIGZyb20gaW50ZXJydXB0cyBhcyBkYXRhIGludGVycnVwdHMgYXJlIG9mZiBhdCB0aGlzIHBvaW50IGFuZAogICogb3RoZXIgYWRhcHRlciBpbnRlcnJ1cHRzIGRvIG5vdCBpbnRlcmZlcmUuCiAgKi8KLXN0YXRpYyBpbnQgdDFfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKK2ludCB0MV9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gZGV2LT5wcml2OwogCWludCBlZmZlY3RpdmVfYnVkZ2V0ID0gbWluKCpidWRnZXQsIGRldi0+cXVvdGEpOwotCiAJaW50IHdvcmtfZG9uZSA9IHByb2Nlc3NfcmVzcG9uc2VzKGFkYXB0ZXIsIGVmZmVjdGl2ZV9idWRnZXQpOworCiAJKmJ1ZGdldCAtPSB3b3JrX2RvbmU7CiAJZGV2LT5xdW90YSAtPSB3b3JrX2RvbmU7CiAKIAlpZiAod29ya19kb25lID49IGVmZmVjdGl2ZV9idWRnZXQpCiAJCXJldHVybiAxOwogCisgCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPmFzeW5jX2xvY2spOwogCV9fbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKLQotCS8qCi0JICogQmVjYXVzZSB3ZSBkb24ndCBhdG9taWNhbGx5IGZsdXNoIHRoZSBmb2xsb3dpbmcgd3JpdGUgaXQgaXMKLQkgKiBwb3NzaWJsZSB0aGF0IGluIHZlcnkgcmFyZSBjYXNlcyBpdCBjYW4gcmVhY2ggdGhlIGRldmljZSBpbiBhIHdheQotCSAqIHRoYXQgcmFjZXMgd2l0aCBhIG5ldyByZXNwb25zZSBiZWluZyB3cml0dGVuIHBsdXMgYW4gZXJyb3IgaW50ZXJydXB0Ci0JICogY2F1c2luZyB0aGUgTkFQSSBpbnRlcnJ1cHQgaGFuZGxlciBiZWxvdyB0byByZXR1cm4gdW5oYW5kbGVkIHN0YXR1cwotCSAqIHRvIHRoZSBPUy4gIFRvIHByb3RlY3QgYWdhaW5zdCB0aGlzIHdvdWxkIHJlcXVpcmUgZmx1c2hpbmcgdGhlIHdyaXRlCi0JICogYW5kIGRvaW5nIGJvdGggdGhlIHdyaXRlIGFuZCB0aGUgZmx1c2ggd2l0aCBpbnRlcnJ1cHRzIG9mZi4gIFdheSB0b28KLQkgKiBleHBlbnNpdmUgYW5kIHVuanVzdGlmaWFibGUgZ2l2ZW4gdGhlIHJhcml0eSBvZiB0aGUgcmFjZS4KLQkgKi8KIAl3cml0ZWwoYWRhcHRlci0+c2dlLT5yZXNwUS5jaWR4LCBhZGFwdGVyLT5yZWdzICsgQV9TR19TTEVFUElORyk7Ci0JcmV0dXJuIDA7Ci19CisJd3JpdGVsKGFkYXB0ZXItPnNsb3dfaW50cl9tYXNrIHwgRl9QTF9JTlRSX1NHRV9EQVRBLAorCSAgICAgICBhZGFwdGVyLT5yZWdzICsgQV9QTF9FTkFCTEUpOworIAlzcGluX3VubG9ja19pcnEoJmFkYXB0ZXItPmFzeW5jX2xvY2spOwogCi0vKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIHBvbGxpbmcuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5hcGlfaXNfc2NoZWR1bGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KF9fTElOS19TVEFURV9SWF9TQ0hFRCwgJmRldi0+c3RhdGUpOworCXJldHVybiAwOwogfQogCiAvKgogICogTkFQSSB2ZXJzaW9uIG9mIHRoZSBtYWluIGludGVycnVwdCBoYW5kbGVyLgogICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgdDFfaW50ZXJydXB0X25hcGkoaW50IGlycSwgdm9pZCAqZGF0YSkKK2lycXJldHVybl90IHQxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCWludCBoYW5kbGVkOwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gZGF0YTsKKyAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPnNnZS0+bmV0ZGV2OwogCXN0cnVjdCBzZ2UgKnNnZSA9IGFkYXB0ZXItPnNnZTsKLQlzdHJ1Y3QgcmVzcFEgKnEgPSAmYWRhcHRlci0+c2dlLT5yZXNwUTsKKyAJdTMyIGNhdXNlOworCWludCBoYW5kbGVkID0gMDsKIAotCS8qCi0JICogQ2xlYXIgdGhlIFNHRV9EQVRBIGludGVycnVwdCBmaXJzdCB0aGluZy4gIE5vcm1hbGx5IHRoZSBOQVBJCi0JICogaGFuZGxlciBoYXMgY29udHJvbCBvZiB0aGUgcmVzcG9uc2UgcXVldWUgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgotCSAqIGNhbiBsb29rIGF0IHRoZSBxdWV1ZSByZWxpYWJseSBvbmx5IG9uY2UgaXQga25vd3MgTkFQSSBpcyBvZmYuCi0JICogV2UgY2FuJ3Qgd2FpdCB0aGF0IGxvbmcgdG8gY2xlYXIgdGhlIFNHRV9EQVRBIGludGVycnVwdCBiZWNhdXNlIHdlCi0JICogY291bGQgcmFjZSB3aXRoIHQxX3BvbGwgcmVhcm1pbmcgdGhlIFNHRSBpbnRlcnJ1cHQsIHNvIHdlIG5lZWQgdG8KLQkgKiBjbGVhciB0aGUgaW50ZXJydXB0IHNwZWN1bGF0aXZlbHkgYW5kIHJlYWxseSBlYXJseSBvbi4KLQkgKi8KLQl3cml0ZWwoRl9QTF9JTlRSX1NHRV9EQVRBLCBhZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSk7CisJY2F1c2UgPSByZWFkbChhZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSk7CisJaWYgKGNhdXNlID09IDAgfHwgY2F1c2UgPT0gfjApCisJCXJldHVybiBJUlFfTk9ORTsKIAogCXNwaW5fbG9jaygmYWRhcHRlci0+YXN5bmNfbG9jayk7Ci0JaWYgKCFuYXBpX2lzX3NjaGVkdWxlZChzZ2UtPm5ldGRldikpIHsKKyAJaWYgKGNhdXNlICYgRl9QTF9JTlRSX1NHRV9EQVRBKSB7CisJCXN0cnVjdCByZXNwUSAqcSA9ICZhZGFwdGVyLT5zZ2UtPnJlc3BROwogCQlzdHJ1Y3QgcmVzcFFfZSAqZSA9ICZxLT5lbnRyaWVzW3EtPmNpZHhdOwogCi0JCWlmIChlLT5HZW5lcmF0aW9uQml0ID09IHEtPmdlbmJpdCkgewotCQkJaWYgKGUtPkRhdGFWYWxpZCB8fAotCQkJICAgIHByb2Nlc3NfcHVyZV9yZXNwb25zZXMoYWRhcHRlciwgZSkpIHsKLQkJCQlpZiAobGlrZWx5KF9fbmV0aWZfcnhfc2NoZWR1bGVfcHJlcChzZ2UtPm5ldGRldikpKQotCQkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKHNnZS0+bmV0ZGV2KTsKLQkJCQllbHNlIGlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJICAgICAgICJOQVBJIHNjaGVkdWxlIGZhaWx1cmUhXG4iKTsKLQkJCX0gZWxzZQotCQkJCXdyaXRlbChxLT5jaWR4LCBhZGFwdGVyLT5yZWdzICsgQV9TR19TTEVFUElORyk7CisgCQloYW5kbGVkID0gMTsKKyAJCXdyaXRlbChGX1BMX0lOVFJfU0dFX0RBVEEsIGFkYXB0ZXItPnJlZ3MgKyBBX1BMX0NBVVNFKTsKIAotCQkJaGFuZGxlZCA9IDE7Ci0JCQlnb3RvIHVubG9jazsKLQkJfSBlbHNlCi0JCQl3cml0ZWwocS0+Y2lkeCwgYWRhcHRlci0+cmVncyArIEFfU0dfU0xFRVBJTkcpOwotCX0gIGVsc2UgaWYgKHJlYWRsKGFkYXB0ZXItPnJlZ3MgKyBBX1BMX0NBVVNFKSAmIEZfUExfSU5UUl9TR0VfREFUQSkgewotCSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJkYXRhIGludGVycnVwdCB3aGlsZSBOQVBJIHJ1bm5pbmdcbiIpOwotCX0KLQkKLQloYW5kbGVkID0gdDFfc2xvd19pbnRyX2hhbmRsZXIoYWRhcHRlcik7CisJCWlmIChlLT5HZW5lcmF0aW9uQml0ID09IHEtPmdlbmJpdCAmJgorCQkgICAgX19uZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGRldikpIHsKKwkJCWlmIChlLT5EYXRhVmFsaWQgfHwgcHJvY2Vzc19wdXJlX3Jlc3BvbnNlcyhhZGFwdGVyLCBlKSkgeworCQkJCS8qIG1hc2sgb2ZmIGRhdGEgSVJRICovCisJCQkJd3JpdGVsKGFkYXB0ZXItPnNsb3dfaW50cl9tYXNrLAorCQkJCSAgICAgICBhZGFwdGVyLT5yZWdzICsgQV9QTF9FTkFCTEUpOworCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoc2dlLT5uZXRkZXYpOworCQkJCWdvdG8gdW5sb2NrOworCQkJfQorCQkJLyogbm8gZGF0YSwgbm8gTkFQSSBuZWVkZWQgKi8KKwkJCW5ldGlmX3BvbGxfZW5hYmxlKGRldik7CisKKwkJfQorCQl3cml0ZWwocS0+Y2lkeCwgYWRhcHRlci0+cmVncyArIEFfU0dfU0xFRVBJTkcpOworCX0gZWxzZQorCQloYW5kbGVkID0gdDFfc2xvd19pbnRyX2hhbmRsZXIoYWRhcHRlcik7CisKIAlpZiAoIWhhbmRsZWQpCiAJCXNnZS0+c3RhdHMudW5oYW5kbGVkX2lycXMrKzsKLSB1bmxvY2s6Cit1bmxvY2s6CiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPmFzeW5jX2xvY2spOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQgIT0gMCk7CiB9CiAKKyNlbHNlCiAvKgogICogTWFpbiBpbnRlcnJ1cHQgaGFuZGxlciwgb3B0aW1pemVkIGFzc3VtaW5nIHRoYXQgd2UgdG9vayBhICdEQVRBJwogICogaW50ZXJydXB0LgpAQCAtMTcyMCw3ICsxNzA5LDcgQEAKICAqIDUuIElmIHdlIHRvb2sgYW4gaW50ZXJydXB0LCBidXQgbm8gdmFsaWQgcmVzcFEgZGVzY3JpcHRvcnMgd2FzIGZvdW5kIHdlCiAgKiAgICAgIGxldCB0aGUgc2xvd19pbnRyX2hhbmRsZXIgcnVuIGFuZCBkbyBlcnJvciBoYW5kbGluZy4KICAqLwotc3RhdGljIGlycXJldHVybl90IHQxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpjb29raWUpCitpcnFyZXR1cm5fdCB0MV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY29va2llKQogewogCWludCB3b3JrX2RvbmU7CiAJc3RydWN0IHJlc3BRX2UgKmU7CkBAIC0xNzUyLDExICsxNzQxLDcgQEAKIAlzcGluX3VubG9jaygmYWRhcHRlci0+YXN5bmNfbG9jayk7CiAJcmV0dXJuIElSUV9SRVRWQUwod29ya19kb25lICE9IDApOwogfQotCi1pcnFfaGFuZGxlcl90IHQxX3NlbGVjdF9pbnRyX2hhbmRsZXIoYWRhcHRlcl90ICphZGFwdGVyKQotewotCXJldHVybiBhZGFwdGVyLT5wYXJhbXMuc2dlLnBvbGxpbmcgPyB0MV9pbnRlcnJ1cHRfbmFwaSA6IHQxX2ludGVycnVwdDsKLX0KKyNlbmRpZgogCiAvKgogICogRW5xdWV1ZXMgdGhlIHNrX2J1ZmYgb250byB0aGUgY21kUVtxaWRdIGFuZCBoYXMgaGFyZHdhcmUgZmV0Y2ggaXQuCkBAIC0yMDMzLDcgKzIwMTgsNiBAQAogICovCiBpbnQgdDFfc2dlX3NldF9jb2FsZXNjZV9wYXJhbXMoc3RydWN0IHNnZSAqc2dlLCBzdHJ1Y3Qgc2dlX3BhcmFtcyAqcCkKIHsKLQlzZ2UtPm5ldGRldi0+cG9sbCA9IHQxX3BvbGw7CiAJc2dlLT5maXhlZF9pbnRydGltZXIgPSBwLT5yeF9jb2FsZXNjZV91c2VjcyAqCiAJCWNvcmVfdGlja3NfcGVyX3VzZWMoc2dlLT5hZGFwdGVyKTsKIAl3cml0ZWwoc2dlLT5maXhlZF9pbnRydGltZXIsIHNnZS0+YWRhcHRlci0+cmVncyArIEFfU0dfSU5UUlRJTUVSKTsKQEAgLTIyMzQsNyArMjIxOCw2IEBACiAKIAlwLT5jb2FsZXNjZV9lbmFibGUgPSAwOwogCXAtPnNhbXBsZV9pbnRlcnZhbF91c2VjcyA9IDA7Ci0JcC0+cG9sbGluZyA9IDA7CiAKIAlyZXR1cm4gc2dlOwogbm9tZW1fcG9ydDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmggYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5oCmluZGV4IDdjZWIwMTEuLmQxMzJhMGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5oCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmgKQEAgLTc2LDcgKzc2LDkgQEAKIGludCB0MV9zZ2VfY29uZmlndXJlKHN0cnVjdCBzZ2UgKiwgc3RydWN0IHNnZV9wYXJhbXMgKik7CiBpbnQgdDFfc2dlX3NldF9jb2FsZXNjZV9wYXJhbXMoc3RydWN0IHNnZSAqLCBzdHJ1Y3Qgc2dlX3BhcmFtcyAqKTsKIHZvaWQgdDFfc2dlX2Rlc3Ryb3koc3RydWN0IHNnZSAqKTsKLWlycV9oYW5kbGVyX3QgdDFfc2VsZWN0X2ludHJfaGFuZGxlcihhZGFwdGVyX3QgKmFkYXB0ZXIpOworaXJxcmV0dXJuX3QgdDFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmNvb2tpZSk7CitpbnQgdDFfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQgKik7CisKIGludCB0MV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCB0MV9zZXRfdmxhbl9hY2NlbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IG9uX29mZik7CiB2b2lkIHQxX3NnZV9zdGFydChzdHJ1Y3Qgc2dlICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMC5jIGIvZHJpdmVycy9uZXQvZTEwMC5jCmluZGV4IDAzYmYxNjQuLjBjZWZlZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMTAwLmMKQEAgLTE5MzAsOSArMTkzMCw4IEBACiAJbmljLT5yeF90b191c2UgPSBuaWMtPnJ4X3RvX2NsZWFuID0gTlVMTDsKIAluaWMtPnJ1X3J1bm5pbmcgPSBSVV9VTklOSVRJQUxJWkVEOwogCi0JaWYoIShuaWMtPnJ4cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByeCkgKiBjb3VudCwgR0ZQX0FUT01JQykpKQorCWlmKCEobmljLT5yeHMgPSBrY2FsbG9jKGNvdW50LCBzaXplb2Yoc3RydWN0IHJ4KSwgR0ZQX0FUT01JQykpKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQobmljLT5yeHMsIDAsIHNpemVvZihzdHJ1Y3QgcngpICogY291bnQpOwogCiAJZm9yKHJ4ID0gbmljLT5yeHMsIGkgPSAwOyBpIDwgY291bnQ7IHJ4KyssIGkrKykgewogCQlyeC0+bmV4dCA9IChpICsgMSA8IGNvdW50KSA/IHJ4ICsgMSA6IG5pYy0+cnhzOwpAQCAtMjcxOSwxMiArMjcxOCwxMSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG5pYyAqbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotI2lmZGVmIENPTkZJR19FMTAwX05BUEkKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQluZXRpZl9wb2xsX2Rpc2FibGUobmljLT5uZXRkZXYpOwotI2VuZGlmCiAJZGVsX3RpbWVyX3N5bmMoJm5pYy0+d2F0Y2hkb2cpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5pYy0+bmV0ZGV2KTsKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIApAQCAtMjczNyw2ICsyNzM1LDcgQEAKIAl9CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBuZXRkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAogCXJldHVybiAwOwpAQCAtMjc2MCwxNiArMjc1OSwxMyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi0KIHN0YXRpYyB2b2lkIGUxMDBfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0jaWZkZWYgQ09ORklHX0UxMDBfTkFQSQogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCW5ldGlmX3BvbGxfZGlzYWJsZShuaWMtPm5ldGRldik7Ci0jZW5kaWYKIAlkZWxfdGltZXJfc3luYygmbmljLT53YXRjaGRvZyk7CiAJbmV0aWZfY2Fycmllcl9vZmYobmljLT5uZXRkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKaW5kZXggZGE0NTlmNy4uZmI5NmM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwpAQCAtMTAwLDYgKzEwMCw5IEBACiAJeyAicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIsIEUxMDAwX1NUQVQoaHdfY3N1bV9lcnIpIH0sCiAJeyAicnhfaGVhZGVyX3NwbGl0IiwgRTEwMDBfU1RBVChyeF9oZHJfc3BsaXQpIH0sCiAJeyAiYWxsb2NfcnhfYnVmZl9mYWlsZWQiLCBFMTAwMF9TVEFUKGFsbG9jX3J4X2J1ZmZfZmFpbGVkKSB9LAorCXsgInR4X3NtYnVzIiwgRTEwMDBfU1RBVChzdGF0cy5tZ3B0YykgfSwKKwl7ICJyeF9zbWJ1cyIsIEUxMDAwX1NUQVQoc3RhdHMubWdwcmMpIH0sCisJeyAiZHJvcHBlZF9zbWJ1cyIsIEUxMDAwX1NUQVQoc3RhdHMubWdwZGMpIH0sCiB9OwogCiAjZGVmaW5lIEUxMDAwX1FVRVVFX1NUQVRTX0xFTiAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwppbmRleCAzNjU1ZDkwLi45YmU0NDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKQEAgLTMwOCwxNDEgKzMwOCwxNjAgQEAKIGludDMyX3QKIGUxMDAwX3NldF9tYWNfdHlwZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotICAgIERFQlVHRlVOQygiZTEwMDBfc2V0X21hY190eXBlIik7CisJREVCVUdGVU5DKCJlMTAwMF9zZXRfbWFjX3R5cGUiKTsKIAotICAgIHN3aXRjaCAoaHctPmRldmljZV9pZCkgewotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQyOgotICAgICAgICBzd2l0Y2ggKGh3LT5yZXZpc2lvbl9pZCkgewotICAgICAgICBjYXNlIEUxMDAwXzgyNTQyXzJfMF9SRVZfSUQ6Ci0gICAgICAgICAgICBody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0Ml9yZXYyXzA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFMTAwMF84MjU0Ml8yXzFfUkVWX0lEOgotICAgICAgICAgICAgaHctPm1hY190eXBlID0gZTEwMDBfODI1NDJfcmV2Ml8xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvKiBJbnZhbGlkIDgyNTQyIHJldmlzaW9uIElEICovCi0gICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9NQUNfVFlQRTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0M0dDX0ZJQkVSOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQzR0NfQ09QUEVSOgotICAgICAgICBody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0MzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDRFSV9DT1BQRVI6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDRFSV9GSUJFUjoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0NEdDX0NPUFBFUjoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0NEdDX0xPTToKLSAgICAgICAgaHctPm1hY190eXBlID0gZTEwMDBfODI1NDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQwRU06Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDBFTV9MT006Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDBFUDoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0MEVQX0xPTToKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0MEVQX0xQOgotICAgICAgICBody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDVFTV9DT1BQRVI6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDVFTV9GSUJFUjoKLSAgICAgICAgaHctPm1hY190eXBlID0gZTEwMDBfODI1NDU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQ1R01fQ09QUEVSOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQ1R01fRklCRVI6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDVHTV9TRVJERVM6Ci0gICAgICAgIGh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQ1X3Jldl8zOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0NkVCX0NPUFBFUjoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0NkVCX0ZJQkVSOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2RUJfUVVBRF9DT1BQRVI6Ci0gICAgICAgIGh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQ2OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX0NPUFBFUjoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX0ZJQkVSOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfU0VSREVTOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfUENJRToKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX1FVQURfQ09QUEVSOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfUVVBRF9DT1BQRVJfS1NQMzoKLSAgICAgICAgaHctPm1hY190eXBlID0gZTEwMDBfODI1NDZfcmV2XzM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQxRUk6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDFFSV9NT0JJTEU6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDFFUl9MT006Ci0gICAgICAgIGh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0MUVSOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQxR0k6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDFHSV9MRjoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0MUdJX01PQklMRToKLSAgICAgICAgaHctPm1hY190eXBlID0gZTEwMDBfODI1NDFfcmV2XzI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTQ3RUk6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NDdFSV9NT0JJTEU6Ci0gICAgICAgIGh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQ3OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0N0dJOgotICAgICAgICBody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0N19yZXZfMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9DT1BQRVI6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9GSUJFUjoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX1NFUkRFUzoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX1FVQURfQ09QUEVSOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfUVVBRF9DT1BQRVJfTE9XUFJPRklMRToKLSAgICAgICAgICAgIGh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTcxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU3MkVJX0NPUFBFUjoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU3MkVJX0ZJQkVSOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTcyRUlfU0VSREVTOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTcyRUk6Ci0gICAgICAgIGh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTcyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU3M0U6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NzNFX0lBTVQ6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NzNMOgotICAgICAgICBody0+bWFjX3R5cGUgPSBlMTAwMF84MjU3MzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX1NQVDoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9TRVJERVNfU1BUOgotICAgIGNhc2UgRTEwMDBfREVWX0lEXzgwMDAzRVMyTEFOX0NPUFBFUl9EUFQ6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fU0VSREVTX0RQVDoKLSAgICAgICAgaHctPm1hY190eXBlID0gZTEwMDBfODAwMDNlczJsYW47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUdQX01fQU1UOgotICAgIGNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUdQX0FNVDoKLSAgICBjYXNlIEUxMDAwX0RFVl9JRF9JQ0g4X0lHUF9DOgotICAgIGNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUZFOgotICAgIGNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUZFX0dUOgotICAgIGNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUZFX0c6Ci0gICAgY2FzZSBFMTAwMF9ERVZfSURfSUNIOF9JR1BfTToKLSAgICAgICAgaHctPm1hY190eXBlID0gZTEwMDBfaWNoOGxhbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLyogU2hvdWxkIG5ldmVyIGhhdmUgbG9hZGVkIG9uIHRoaXMgZGV2aWNlICovCi0gICAgICAgIHJldHVybiAtRTEwMDBfRVJSX01BQ19UWVBFOwotICAgIH0KKwlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0MjoKKwkJc3dpdGNoIChody0+cmV2aXNpb25faWQpIHsKKwkJY2FzZSBFMTAwMF84MjU0Ml8yXzBfUkVWX0lEOgorCQkJaHctPm1hY190eXBlID0gZTEwMDBfODI1NDJfcmV2Ml8wOworCQkJYnJlYWs7CisJCWNhc2UgRTEwMDBfODI1NDJfMl8xX1JFVl9JRDoKKwkJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQyX3JldjJfMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogSW52YWxpZCA4MjU0MiByZXZpc2lvbiBJRCAqLworCQkJcmV0dXJuIC1FMTAwMF9FUlJfTUFDX1RZUEU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDNHQ19GSUJFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0M0dDX0NPUFBFUjoKKwkJaHctPm1hY190eXBlID0gZTEwMDBfODI1NDM7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ0RUlfQ09QUEVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ0RUlfRklCRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDRHQ19DT1BQRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDRHQ19MT006CisJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQ0OworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0MEVNOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQwRU1fTE9NOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQwRVA6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDBFUF9MT006CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDBFUF9MUDoKKwkJaHctPm1hY190eXBlID0gZTEwMDBfODI1NDA7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ1RU1fQ09QUEVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ1RU1fRklCRVI6CisJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQ1OworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NUdNX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NUdNX0ZJQkVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ1R01fU0VSREVTOgorCQlody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0NV9yZXZfMzsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZFQl9DT1BQRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZFQl9GSUJFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkVCX1FVQURfQ09QUEVSOgorCQlody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0NjsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9DT1BQRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9GSUJFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX1NFUkRFUzoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX1BDSUU6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX1FVQURfQ09QUEVSX0tTUDM6CisJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQ2X3Jldl8zOworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0MUVJOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQxRUlfTU9CSUxFOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQxRVJfTE9NOgorCQlody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0MTsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDFFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0MUdJOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQxR0lfTEY6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDFHSV9NT0JJTEU6CisJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQxX3Jldl8yOworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0N0VJOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ3RUlfTU9CSUxFOgorCQlody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0NzsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDdHSToKKwkJaHctPm1hY190eXBlID0gZTEwMDBfODI1NDdfcmV2XzI7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfQ09QUEVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfRklCRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9TRVJERVM6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9RVUFEX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX1FVQURfQ09QUEVSX0xPV1BST0ZJTEU6CisJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTcxOworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3MkVJX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3MkVJX0ZJQkVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcyRUlfU0VSREVTOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcyRUk6CisJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTcyOworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3M0U6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzNFX0lBTVQ6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzNMOgorCQlody0+bWFjX3R5cGUgPSBlMTAwMF84MjU3MzsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX1NQVDoKKwljYXNlIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9TRVJERVNfU1BUOgorCWNhc2UgRTEwMDBfREVWX0lEXzgwMDAzRVMyTEFOX0NPUFBFUl9EUFQ6CisJY2FzZSBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fU0VSREVTX0RQVDoKKwkJaHctPm1hY190eXBlID0gZTEwMDBfODAwMDNlczJsYW47CisJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUdQX01fQU1UOgorCWNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUdQX0FNVDoKKwljYXNlIEUxMDAwX0RFVl9JRF9JQ0g4X0lHUF9DOgorCWNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUZFOgorCWNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUZFX0dUOgorCWNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUZFX0c6CisJY2FzZSBFMTAwMF9ERVZfSURfSUNIOF9JR1BfTToKKwkJaHctPm1hY190eXBlID0gZTEwMDBfaWNoOGxhbjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogU2hvdWxkIG5ldmVyIGhhdmUgbG9hZGVkIG9uIHRoaXMgZGV2aWNlICovCisJCXJldHVybiAtRTEwMDBfRVJSX01BQ19UWVBFOworCX0KIAotICAgIHN3aXRjaCAoaHctPm1hY190eXBlKSB7Ci0gICAgY2FzZSBlMTAwMF9pY2g4bGFuOgotICAgICAgICBody0+c3dmd2h3X3NlbWFwaG9yZV9wcmVzZW50ID0gVFJVRTsKLSAgICAgICAgaHctPmFzZl9maXJtd2FyZV9wcmVzZW50ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKLSAgICAgICAgaHctPnN3Zndfc3luY19wcmVzZW50ID0gVFJVRTsKLSAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSBlMTAwMF84MjU3MToKLSAgICBjYXNlIGUxMDAwXzgyNTcyOgotICAgIGNhc2UgZTEwMDBfODI1NzM6Ci0gICAgICAgIGh3LT5lZXByb21fc2VtYXBob3JlX3ByZXNlbnQgPSBUUlVFOwotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBjYXNlIGUxMDAwXzgyNTQxOgotICAgIGNhc2UgZTEwMDBfODI1NDc6Ci0gICAgY2FzZSBlMTAwMF84MjU0MV9yZXZfMjoKLSAgICBjYXNlIGUxMDAwXzgyNTQ3X3Jldl8yOgotICAgICAgICBody0+YXNmX2Zpcm13YXJlX3ByZXNlbnQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisJc3dpdGNoIChody0+bWFjX3R5cGUpIHsKKwljYXNlIGUxMDAwX2ljaDhsYW46CisJCWh3LT5zd2Z3aHdfc2VtYXBob3JlX3ByZXNlbnQgPSBUUlVFOworCQlody0+YXNmX2Zpcm13YXJlX3ByZXNlbnQgPSBUUlVFOworCQlicmVhazsKKwljYXNlIGUxMDAwXzgwMDAzZXMybGFuOgorCQlody0+c3dmd19zeW5jX3ByZXNlbnQgPSBUUlVFOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIGUxMDAwXzgyNTcxOgorCWNhc2UgZTEwMDBfODI1NzI6CisJY2FzZSBlMTAwMF84MjU3MzoKKwkJaHctPmVlcHJvbV9zZW1hcGhvcmVfcHJlc2VudCA9IFRSVUU7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgZTEwMDBfODI1NDE6CisJY2FzZSBlMTAwMF84MjU0NzoKKwljYXNlIGUxMDAwXzgyNTQxX3Jldl8yOgorCWNhc2UgZTEwMDBfODI1NDdfcmV2XzI6CisJCWh3LT5hc2ZfZmlybXdhcmVfcHJlc2VudCA9IFRSVUU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAotICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOworCS8qIFRoZSA4MjU0MyBjaGlwIGRvZXMgbm90IGNvdW50IHR4X2NhcnJpZXJfZXJyb3JzIHByb3Blcmx5IGluCisJICogRkQgbW9kZQorCSAqLworCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDMpCisJCWh3LT5iYWRfdHhfY2Fycl9zdGF0c19mZCA9IFRSVUU7CisKKwkvKiBjYXBhYmxlIG9mIHJlY2VpdmluZyBtYW5hZ2VtZW50IHBhY2tldHMgdG8gdGhlIGhvc3QgKi8KKwlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTcxKQorCQlody0+aGFzX21hbmMyaCA9IFRSVUU7CisKKwkvKiBJbiByYXJlIG9jY2FzaW9ucywgRVNCMiBzeXN0ZW1zIHdvdWxkIGVuZCB1cCBzdGFydGVkIHdpdGhvdXQKKwkgKiB0aGUgUlggdW5pdCBiZWluZyB0dXJuZWQgb24uCisJICovCisJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikKKwkJaHctPnJ4X25lZWRzX2tpY2tpbmcgPSBUUlVFOworCisJaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ0KQorCQlody0+aGFzX3NtYnVzID0gVFJVRTsKKworCXJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTY1NzUsNyArNjU5NCw3IEBACiAgICAgc3dpdGNoIChody0+bWFjX3R5cGUpIHsKICAgICBjYXNlIGUxMDAwXzgyNTQyX3JldjJfMDoKICAgICBjYXNlIGUxMDAwXzgyNTQyX3JldjJfMToKLSAgICAgICAgaHctPmJ1c190eXBlID0gZTEwMDBfYnVzX3R5cGVfdW5rbm93bjsKKyAgICAgICAgaHctPmJ1c190eXBlID0gZTEwMDBfYnVzX3R5cGVfcGNpOwogICAgICAgICBody0+YnVzX3NwZWVkID0gZTEwMDBfYnVzX3NwZWVkX3Vua25vd247CiAgICAgICAgIGh3LT5idXNfd2lkdGggPSBlMTAwMF9idXNfd2lkdGhfdW5rbm93bjsKICAgICAgICAgYnJlYWs7CkBAIC03ODE3LDkgKzc4MzYsOCBAQAogICAgICAgICAgICAgZndzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBGV1NNKTsKICAgICAgICAgICAgIGZhY3RwcyA9IEUxMDAwX1JFQURfUkVHKGh3LCBGQUNUUFMpOwogCi0gICAgICAgICAgICBpZiAoKChmd3NtICYgRTEwMDBfRldTTV9NT0RFX01BU0spID09Ci0gICAgICAgICAgICAgICAgKGUxMDAwX21uZ19tb2RlX3B0IDw8IEUxMDAwX0ZXU01fTU9ERV9TSElGVCkpICYmCi0gICAgICAgICAgICAgICAgKGZhY3RwcyAmIEUxMDAwX0ZBQ1RQU19NTkdDRykpCisgICAgICAgICAgICBpZiAoKCgoZndzbSAmIEUxMDAwX0ZXU01fTU9ERV9NQVNLKSA+PiBFMTAwMF9GV1NNX01PREVfU0hJRlQpID09CisgICAgICAgICAgICAgICAgICAgZTEwMDBfbW5nX21vZGVfcHQpICYmICEoZmFjdHBzICYgRTEwMDBfRkFDVFBTX01OR0NHKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpZiAoKG1hbmMgJiBFMTAwMF9NQU5DX1NNQlVTX0VOKSAmJiAhKG1hbmMgJiBFMTAwMF9NQU5DX0FTRl9FTikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAppbmRleCAzMzIxZmIxLi5kNjcxMDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKQEAgLTEzMDEsMTY1ICsxMzAxLDE3MCBAQAogI2RlZmluZSBFMTAwMF84MjU0Ml9SU1NJUiAgICAgICBFMTAwMF9SU1NJUgogI2RlZmluZSBFMTAwMF84MjU0Ml9LVU1DVFJMU1RBIEUxMDAwX0tVTUNUUkxTVEEKICNkZWZpbmUgRTEwMDBfODI1NDJfU1dfRldfU1lOQyBFMTAwMF9TV19GV19TWU5DCisjZGVmaW5lIEUxMDAwXzgyNTQyX01BTkMySCAgICAgIEUxMDAwX01BTkMySAogCiAvKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbGxlY3RlZCBieSB0aGUgTUFDICovCiBzdHJ1Y3QgZTEwMDBfaHdfc3RhdHMgewotICAgIHVpbnQ2NF90IGNyY2VycnM7Ci0gICAgdWludDY0X3QgYWxnbmVycmM7Ci0gICAgdWludDY0X3Qgc3ltZXJyczsKLSAgICB1aW50NjRfdCByeGVycmM7Ci0gICAgdWludDY0X3QgdHhlcnJjOwotICAgIHVpbnQ2NF90IG1wYzsKLSAgICB1aW50NjRfdCBzY2M7Ci0gICAgdWludDY0X3QgZWNvbDsKLSAgICB1aW50NjRfdCBtY2M7Ci0gICAgdWludDY0X3QgbGF0ZWNvbDsKLSAgICB1aW50NjRfdCBjb2xjOwotICAgIHVpbnQ2NF90IGRjOwotICAgIHVpbnQ2NF90IHRuY3JzOwotICAgIHVpbnQ2NF90IHNlYzsKLSAgICB1aW50NjRfdCBjZXh0ZXJyOwotICAgIHVpbnQ2NF90IHJsZWM7Ci0gICAgdWludDY0X3QgeG9ucnhjOwotICAgIHVpbnQ2NF90IHhvbnR4YzsKLSAgICB1aW50NjRfdCB4b2ZmcnhjOwotICAgIHVpbnQ2NF90IHhvZmZ0eGM7Ci0gICAgdWludDY0X3QgZmNydWM7Ci0gICAgdWludDY0X3QgcHJjNjQ7Ci0gICAgdWludDY0X3QgcHJjMTI3OwotICAgIHVpbnQ2NF90IHByYzI1NTsKLSAgICB1aW50NjRfdCBwcmM1MTE7Ci0gICAgdWludDY0X3QgcHJjMTAyMzsKLSAgICB1aW50NjRfdCBwcmMxNTIyOwotICAgIHVpbnQ2NF90IGdwcmM7Ci0gICAgdWludDY0X3QgYnByYzsKLSAgICB1aW50NjRfdCBtcHJjOwotICAgIHVpbnQ2NF90IGdwdGM7Ci0gICAgdWludDY0X3QgZ29yY2w7Ci0gICAgdWludDY0X3QgZ29yY2g7Ci0gICAgdWludDY0X3QgZ290Y2w7Ci0gICAgdWludDY0X3QgZ290Y2g7Ci0gICAgdWludDY0X3Qgcm5iYzsKLSAgICB1aW50NjRfdCBydWM7Ci0gICAgdWludDY0X3QgcmZjOwotICAgIHVpbnQ2NF90IHJvYzsKLSAgICB1aW50NjRfdCBybGVycmM7Ci0gICAgdWludDY0X3QgcmpjOwotICAgIHVpbnQ2NF90IG1ncHJjOwotICAgIHVpbnQ2NF90IG1ncGRjOwotICAgIHVpbnQ2NF90IG1ncHRjOwotICAgIHVpbnQ2NF90IHRvcmw7Ci0gICAgdWludDY0X3QgdG9yaDsKLSAgICB1aW50NjRfdCB0b3RsOwotICAgIHVpbnQ2NF90IHRvdGg7Ci0gICAgdWludDY0X3QgdHByOwotICAgIHVpbnQ2NF90IHRwdDsKLSAgICB1aW50NjRfdCBwdGM2NDsKLSAgICB1aW50NjRfdCBwdGMxMjc7Ci0gICAgdWludDY0X3QgcHRjMjU1OwotICAgIHVpbnQ2NF90IHB0YzUxMTsKLSAgICB1aW50NjRfdCBwdGMxMDIzOwotICAgIHVpbnQ2NF90IHB0YzE1MjI7Ci0gICAgdWludDY0X3QgbXB0YzsKLSAgICB1aW50NjRfdCBicHRjOwotICAgIHVpbnQ2NF90IHRzY3RjOwotICAgIHVpbnQ2NF90IHRzY3RmYzsKLSAgICB1aW50NjRfdCBpYWM7Ci0gICAgdWludDY0X3QgaWNyeHB0YzsKLSAgICB1aW50NjRfdCBpY3J4YXRjOwotICAgIHVpbnQ2NF90IGljdHhwdGM7Ci0gICAgdWludDY0X3QgaWN0eGF0YzsKLSAgICB1aW50NjRfdCBpY3R4cWVjOwotICAgIHVpbnQ2NF90IGljdHhxbXRjOwotICAgIHVpbnQ2NF90IGljcnhkbXRjOwotICAgIHVpbnQ2NF90IGljcnhvYzsKKwl1aW50NjRfdAkJY3JjZXJyczsKKwl1aW50NjRfdAkJYWxnbmVycmM7CisJdWludDY0X3QJCXN5bWVycnM7CisJdWludDY0X3QJCXJ4ZXJyYzsKKwl1aW50NjRfdAkJdHhlcnJjOworCXVpbnQ2NF90CQltcGM7CisJdWludDY0X3QJCXNjYzsKKwl1aW50NjRfdAkJZWNvbDsKKwl1aW50NjRfdAkJbWNjOworCXVpbnQ2NF90CQlsYXRlY29sOworCXVpbnQ2NF90CQljb2xjOworCXVpbnQ2NF90CQlkYzsKKwl1aW50NjRfdAkJdG5jcnM7CisJdWludDY0X3QJCXNlYzsKKwl1aW50NjRfdAkJY2V4dGVycjsKKwl1aW50NjRfdAkJcmxlYzsKKwl1aW50NjRfdAkJeG9ucnhjOworCXVpbnQ2NF90CQl4b250eGM7CisJdWludDY0X3QJCXhvZmZyeGM7CisJdWludDY0X3QJCXhvZmZ0eGM7CisJdWludDY0X3QJCWZjcnVjOworCXVpbnQ2NF90CQlwcmM2NDsKKwl1aW50NjRfdAkJcHJjMTI3OworCXVpbnQ2NF90CQlwcmMyNTU7CisJdWludDY0X3QJCXByYzUxMTsKKwl1aW50NjRfdAkJcHJjMTAyMzsKKwl1aW50NjRfdAkJcHJjMTUyMjsKKwl1aW50NjRfdAkJZ3ByYzsKKwl1aW50NjRfdAkJYnByYzsKKwl1aW50NjRfdAkJbXByYzsKKwl1aW50NjRfdAkJZ3B0YzsKKwl1aW50NjRfdAkJZ29yY2w7CisJdWludDY0X3QJCWdvcmNoOworCXVpbnQ2NF90CQlnb3RjbDsKKwl1aW50NjRfdAkJZ290Y2g7CisJdWludDY0X3QJCXJuYmM7CisJdWludDY0X3QJCXJ1YzsKKwl1aW50NjRfdAkJcmZjOworCXVpbnQ2NF90CQlyb2M7CisJdWludDY0X3QJCXJsZXJyYzsKKwl1aW50NjRfdAkJcmpjOworCXVpbnQ2NF90CQltZ3ByYzsKKwl1aW50NjRfdAkJbWdwZGM7CisJdWludDY0X3QJCW1ncHRjOworCXVpbnQ2NF90CQl0b3JsOworCXVpbnQ2NF90CQl0b3JoOworCXVpbnQ2NF90CQl0b3RsOworCXVpbnQ2NF90CQl0b3RoOworCXVpbnQ2NF90CQl0cHI7CisJdWludDY0X3QJCXRwdDsKKwl1aW50NjRfdAkJcHRjNjQ7CisJdWludDY0X3QJCXB0YzEyNzsKKwl1aW50NjRfdAkJcHRjMjU1OworCXVpbnQ2NF90CQlwdGM1MTE7CisJdWludDY0X3QJCXB0YzEwMjM7CisJdWludDY0X3QJCXB0YzE1MjI7CisJdWludDY0X3QJCW1wdGM7CisJdWludDY0X3QJCWJwdGM7CisJdWludDY0X3QJCXRzY3RjOworCXVpbnQ2NF90CQl0c2N0ZmM7CisJdWludDY0X3QJCWlhYzsKKwl1aW50NjRfdAkJaWNyeHB0YzsKKwl1aW50NjRfdAkJaWNyeGF0YzsKKwl1aW50NjRfdAkJaWN0eHB0YzsKKwl1aW50NjRfdAkJaWN0eGF0YzsKKwl1aW50NjRfdAkJaWN0eHFlYzsKKwl1aW50NjRfdAkJaWN0eHFtdGM7CisJdWludDY0X3QJCWljcnhkbXRjOworCXVpbnQ2NF90CQlpY3J4b2M7CiB9OwogCiAvKiBTdHJ1Y3R1cmUgY29udGFpbmluZyB2YXJpYWJsZXMgdXNlZCBieSB0aGUgc2hhcmVkIGNvZGUgKGUxMDAwX2h3LmMpICovCiBzdHJ1Y3QgZTEwMDBfaHcgewotICAgIHVpbnQ4X3QgX19pb21lbSAqaHdfYWRkcjsKLSAgICB1aW50OF90IF9faW9tZW0gKmZsYXNoX2FkZHJlc3M7Ci0gICAgZTEwMDBfbWFjX3R5cGUgbWFjX3R5cGU7Ci0gICAgZTEwMDBfcGh5X3R5cGUgcGh5X3R5cGU7Ci0gICAgdWludDMyX3QgcGh5X2luaXRfc2NyaXB0OwotICAgIGUxMDAwX21lZGlhX3R5cGUgbWVkaWFfdHlwZTsKLSAgICB2b2lkICpiYWNrOwotICAgIHN0cnVjdCBlMTAwMF9zaGFkb3dfcmFtICplZXByb21fc2hhZG93X3JhbTsKLSAgICB1aW50MzJfdCBmbGFzaF9iYW5rX3NpemU7Ci0gICAgdWludDMyX3QgZmxhc2hfYmFzZV9hZGRyOwotICAgIGUxMDAwX2ZjX3R5cGUgZmM7Ci0gICAgZTEwMDBfYnVzX3NwZWVkIGJ1c19zcGVlZDsKLSAgICBlMTAwMF9idXNfd2lkdGggYnVzX3dpZHRoOwotICAgIGUxMDAwX2J1c190eXBlIGJ1c190eXBlOwotICAgIHN0cnVjdCBlMTAwMF9lZXByb21faW5mbyBlZXByb207Ci0gICAgZTEwMDBfbXNfdHlwZSBtYXN0ZXJfc2xhdmU7Ci0gICAgZTEwMDBfbXNfdHlwZSBvcmlnaW5hbF9tYXN0ZXJfc2xhdmU7Ci0gICAgZTEwMDBfZmZlX2NvbmZpZyBmZmVfY29uZmlnX3N0YXRlOwotICAgIHVpbnQzMl90IGFzZl9maXJtd2FyZV9wcmVzZW50OwotICAgIHVpbnQzMl90IGVlcHJvbV9zZW1hcGhvcmVfcHJlc2VudDsKLSAgICB1aW50MzJfdCBzd2Z3X3N5bmNfcHJlc2VudDsKLSAgICB1aW50MzJfdCBzd2Z3aHdfc2VtYXBob3JlX3ByZXNlbnQ7Ci0gICAgdW5zaWduZWQgbG9uZyBpb19iYXNlOwotICAgIHVpbnQzMl90IHBoeV9pZDsKLSAgICB1aW50MzJfdCBwaHlfcmV2aXNpb247Ci0gICAgdWludDMyX3QgcGh5X2FkZHI7Ci0gICAgdWludDMyX3Qgb3JpZ2luYWxfZmM7Ci0gICAgdWludDMyX3QgdHhjdzsKLSAgICB1aW50MzJfdCBhdXRvbmVnX2ZhaWxlZDsKLSAgICB1aW50MzJfdCBtYXhfZnJhbWVfc2l6ZTsKLSAgICB1aW50MzJfdCBtaW5fZnJhbWVfc2l6ZTsKLSAgICB1aW50MzJfdCBtY19maWx0ZXJfdHlwZTsKLSAgICB1aW50MzJfdCBudW1fbWNfYWRkcnM7Ci0gICAgdWludDMyX3QgY29sbGlzaW9uX2RlbHRhOwotICAgIHVpbnQzMl90IHR4X3BhY2tldF9kZWx0YTsKLSAgICB1aW50MzJfdCBsZWRjdGxfZGVmYXVsdDsKLSAgICB1aW50MzJfdCBsZWRjdGxfbW9kZTE7Ci0gICAgdWludDMyX3QgbGVkY3RsX21vZGUyOwotICAgIGJvb2xlYW5fdCB0eF9wa3RfZmlsdGVyaW5nOwotICAgIHN0cnVjdCBlMTAwMF9ob3N0X21uZ19kaGNwX2Nvb2tpZSBtbmdfY29va2llOwotICAgIHVpbnQxNl90IHBoeV9zcGRfZGVmYXVsdDsKLSAgICB1aW50MTZfdCBhdXRvbmVnX2FkdmVydGlzZWQ7Ci0gICAgdWludDE2X3QgcGNpX2NtZF93b3JkOwotICAgIHVpbnQxNl90IGZjX2hpZ2hfd2F0ZXI7Ci0gICAgdWludDE2X3QgZmNfbG93X3dhdGVyOwotICAgIHVpbnQxNl90IGZjX3BhdXNlX3RpbWU7Ci0gICAgdWludDE2X3QgY3VycmVudF9pZnNfdmFsOwotICAgIHVpbnQxNl90IGlmc19taW5fdmFsOwotICAgIHVpbnQxNl90IGlmc19tYXhfdmFsOwotICAgIHVpbnQxNl90IGlmc19zdGVwX3NpemU7Ci0gICAgdWludDE2X3QgaWZzX3JhdGlvOwotICAgIHVpbnQxNl90IGRldmljZV9pZDsKLSAgICB1aW50MTZfdCB2ZW5kb3JfaWQ7Ci0gICAgdWludDE2X3Qgc3Vic3lzdGVtX2lkOwotICAgIHVpbnQxNl90IHN1YnN5c3RlbV92ZW5kb3JfaWQ7Ci0gICAgdWludDhfdCByZXZpc2lvbl9pZDsKLSAgICB1aW50OF90IGF1dG9uZWc7Ci0gICAgdWludDhfdCBtZGl4OwotICAgIHVpbnQ4X3QgZm9yY2VkX3NwZWVkX2R1cGxleDsKLSAgICB1aW50OF90IHdhaXRfYXV0b25lZ19jb21wbGV0ZTsKLSAgICB1aW50OF90IGRtYV9mYWlybmVzczsKLSAgICB1aW50OF90IG1hY19hZGRyW05PREVfQUREUkVTU19TSVpFXTsKLSAgICB1aW50OF90IHBlcm1fbWFjX2FkZHJbTk9ERV9BRERSRVNTX1NJWkVdOwotICAgIGJvb2xlYW5fdCBkaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb247Ci0gICAgYm9vbGVhbl90IHNwZWVkX2Rvd25ncmFkZWQ7Ci0gICAgZTEwMDBfc21hcnRfc3BlZWQgc21hcnRfc3BlZWQ7Ci0gICAgZTEwMDBfZHNwX2NvbmZpZyBkc3BfY29uZmlnX3N0YXRlOwotICAgIGJvb2xlYW5fdCBnZXRfbGlua19zdGF0dXM7Ci0gICAgYm9vbGVhbl90IHNlcmRlc19saW5rX2Rvd247Ci0gICAgYm9vbGVhbl90IHRiaV9jb21wYXRpYmlsaXR5X2VuOwotICAgIGJvb2xlYW5fdCB0YmlfY29tcGF0aWJpbGl0eV9vbjsKLSAgICBib29sZWFuX3QgbGFhX2lzX3ByZXNlbnQ7Ci0gICAgYm9vbGVhbl90IHBoeV9yZXNldF9kaXNhYmxlOwotICAgIGJvb2xlYW5fdCBpbml0aWFsaXplX2h3X2JpdHNfZGlzYWJsZTsKLSAgICBib29sZWFuX3QgZmNfc2VuZF94b247Ci0gICAgYm9vbGVhbl90IGZjX3N0cmljdF9pZWVlOwotICAgIGJvb2xlYW5fdCByZXBvcnRfdHhfZWFybHk7Ci0gICAgYm9vbGVhbl90IGFkYXB0aXZlX2lmczsKLSAgICBib29sZWFuX3QgaWZzX3BhcmFtc19mb3JjZWQ7Ci0gICAgYm9vbGVhbl90IGluX2lmc19tb2RlOwotICAgIGJvb2xlYW5fdCBtbmdfcmVnX2FjY2Vzc19kaXNhYmxlZDsKLSAgICBib29sZWFuX3QgbGVhdmVfYXZfYml0X29mZjsKLSAgICBib29sZWFuX3Qga21ybl9sb2NrX2xvc3Nfd29ya2Fyb3VuZF9kaXNhYmxlZDsKKwl1aW50OF90IF9faW9tZW0JCSpod19hZGRyOworCXVpbnQ4X3QgX19pb21lbQkJKmZsYXNoX2FkZHJlc3M7CisJZTEwMDBfbWFjX3R5cGUJCW1hY190eXBlOworCWUxMDAwX3BoeV90eXBlCQlwaHlfdHlwZTsKKwl1aW50MzJfdAkJcGh5X2luaXRfc2NyaXB0OworCWUxMDAwX21lZGlhX3R5cGUJbWVkaWFfdHlwZTsKKwl2b2lkCQkJKmJhY2s7CisJc3RydWN0IGUxMDAwX3NoYWRvd19yYW0JKmVlcHJvbV9zaGFkb3dfcmFtOworCXVpbnQzMl90CQlmbGFzaF9iYW5rX3NpemU7CisJdWludDMyX3QJCWZsYXNoX2Jhc2VfYWRkcjsKKwllMTAwMF9mY190eXBlCQlmYzsKKwllMTAwMF9idXNfc3BlZWQJCWJ1c19zcGVlZDsKKwllMTAwMF9idXNfd2lkdGgJCWJ1c193aWR0aDsKKwllMTAwMF9idXNfdHlwZQkJYnVzX3R5cGU7CisJc3RydWN0IGUxMDAwX2VlcHJvbV9pbmZvIGVlcHJvbTsKKwllMTAwMF9tc190eXBlCQltYXN0ZXJfc2xhdmU7CisJZTEwMDBfbXNfdHlwZQkJb3JpZ2luYWxfbWFzdGVyX3NsYXZlOworCWUxMDAwX2ZmZV9jb25maWcJZmZlX2NvbmZpZ19zdGF0ZTsKKwl1aW50MzJfdAkJYXNmX2Zpcm13YXJlX3ByZXNlbnQ7CisJdWludDMyX3QJCWVlcHJvbV9zZW1hcGhvcmVfcHJlc2VudDsKKwl1aW50MzJfdAkJc3dmd19zeW5jX3ByZXNlbnQ7CisJdWludDMyX3QJCXN3Zndod19zZW1hcGhvcmVfcHJlc2VudDsKKwl1bnNpZ25lZCBsb25nCQlpb19iYXNlOworCXVpbnQzMl90CQlwaHlfaWQ7CisJdWludDMyX3QJCXBoeV9yZXZpc2lvbjsKKwl1aW50MzJfdAkJcGh5X2FkZHI7CisJdWludDMyX3QJCW9yaWdpbmFsX2ZjOworCXVpbnQzMl90CQl0eGN3OworCXVpbnQzMl90CQlhdXRvbmVnX2ZhaWxlZDsKKwl1aW50MzJfdAkJbWF4X2ZyYW1lX3NpemU7CisJdWludDMyX3QJCW1pbl9mcmFtZV9zaXplOworCXVpbnQzMl90CQltY19maWx0ZXJfdHlwZTsKKwl1aW50MzJfdAkJbnVtX21jX2FkZHJzOworCXVpbnQzMl90CQljb2xsaXNpb25fZGVsdGE7CisJdWludDMyX3QJCXR4X3BhY2tldF9kZWx0YTsKKwl1aW50MzJfdAkJbGVkY3RsX2RlZmF1bHQ7CisJdWludDMyX3QJCWxlZGN0bF9tb2RlMTsKKwl1aW50MzJfdAkJbGVkY3RsX21vZGUyOworCWJvb2xlYW5fdAkJdHhfcGt0X2ZpbHRlcmluZzsKKwlzdHJ1Y3QgZTEwMDBfaG9zdF9tbmdfZGhjcF9jb29raWUgbW5nX2Nvb2tpZTsKKwl1aW50MTZfdAkJcGh5X3NwZF9kZWZhdWx0OworCXVpbnQxNl90CQlhdXRvbmVnX2FkdmVydGlzZWQ7CisJdWludDE2X3QJCXBjaV9jbWRfd29yZDsKKwl1aW50MTZfdAkJZmNfaGlnaF93YXRlcjsKKwl1aW50MTZfdAkJZmNfbG93X3dhdGVyOworCXVpbnQxNl90CQlmY19wYXVzZV90aW1lOworCXVpbnQxNl90CQljdXJyZW50X2lmc192YWw7CisJdWludDE2X3QJCWlmc19taW5fdmFsOworCXVpbnQxNl90CQlpZnNfbWF4X3ZhbDsKKwl1aW50MTZfdAkJaWZzX3N0ZXBfc2l6ZTsKKwl1aW50MTZfdAkJaWZzX3JhdGlvOworCXVpbnQxNl90CQlkZXZpY2VfaWQ7CisJdWludDE2X3QJCXZlbmRvcl9pZDsKKwl1aW50MTZfdAkJc3Vic3lzdGVtX2lkOworCXVpbnQxNl90CQlzdWJzeXN0ZW1fdmVuZG9yX2lkOworCXVpbnQ4X3QJCQlyZXZpc2lvbl9pZDsKKwl1aW50OF90CQkJYXV0b25lZzsKKwl1aW50OF90CQkJbWRpeDsKKwl1aW50OF90CQkJZm9yY2VkX3NwZWVkX2R1cGxleDsKKwl1aW50OF90CQkJd2FpdF9hdXRvbmVnX2NvbXBsZXRlOworCXVpbnQ4X3QJCQlkbWFfZmFpcm5lc3M7CisJdWludDhfdAkJCW1hY19hZGRyW05PREVfQUREUkVTU19TSVpFXTsKKwl1aW50OF90CQkJcGVybV9tYWNfYWRkcltOT0RFX0FERFJFU1NfU0laRV07CisJYm9vbGVhbl90CQlkaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb247CisJYm9vbGVhbl90CQlzcGVlZF9kb3duZ3JhZGVkOworCWUxMDAwX3NtYXJ0X3NwZWVkCXNtYXJ0X3NwZWVkOworCWUxMDAwX2RzcF9jb25maWcJZHNwX2NvbmZpZ19zdGF0ZTsKKwlib29sZWFuX3QJCWdldF9saW5rX3N0YXR1czsKKwlib29sZWFuX3QJCXNlcmRlc19saW5rX2Rvd247CisJYm9vbGVhbl90CQl0YmlfY29tcGF0aWJpbGl0eV9lbjsKKwlib29sZWFuX3QJCXRiaV9jb21wYXRpYmlsaXR5X29uOworCWJvb2xlYW5fdAkJbGFhX2lzX3ByZXNlbnQ7CisJYm9vbGVhbl90CQlwaHlfcmVzZXRfZGlzYWJsZTsKKwlib29sZWFuX3QJCWluaXRpYWxpemVfaHdfYml0c19kaXNhYmxlOworCWJvb2xlYW5fdAkJZmNfc2VuZF94b247CisJYm9vbGVhbl90CQlmY19zdHJpY3RfaWVlZTsKKwlib29sZWFuX3QJCXJlcG9ydF90eF9lYXJseTsKKwlib29sZWFuX3QJCWFkYXB0aXZlX2lmczsKKwlib29sZWFuX3QJCWlmc19wYXJhbXNfZm9yY2VkOworCWJvb2xlYW5fdAkJaW5faWZzX21vZGU7CisJYm9vbGVhbl90CQltbmdfcmVnX2FjY2Vzc19kaXNhYmxlZDsKKwlib29sZWFuX3QJCWxlYXZlX2F2X2JpdF9vZmY7CisJYm9vbGVhbl90CQlrbXJuX2xvY2tfbG9zc193b3JrYXJvdW5kX2Rpc2FibGVkOworCWJvb2xlYW5fdAkJYmFkX3R4X2NhcnJfc3RhdHNfZmQ7CisJYm9vbGVhbl90CQloYXNfbWFuYzJoOworCWJvb2xlYW5fdAkJcnhfbmVlZHNfa2lja2luZzsKKwlib29sZWFuX3QJCWhhc19zbWJ1czsKIH07CiAKIApAQCAtMjQxOCw2ICsyNDIzLDcgQEAKICNkZWZpbmUgRTEwMDBfUEJBXzhLIDB4MDAwOCAgICAvKiA4S0IsIGRlZmF1bHQgUnggYWxsb2NhdGlvbiAqLwogI2RlZmluZSBFMTAwMF9QQkFfMTJLIDB4MDAwQyAgICAvKiAxMktCLCBkZWZhdWx0IFJ4IGFsbG9jYXRpb24gKi8KICNkZWZpbmUgRTEwMDBfUEJBXzE2SyAweDAwMTAgICAgLyogMTZLQiwgZGVmYXVsdCBUWCBhbGxvY2F0aW9uICovCisjZGVmaW5lIEUxMDAwX1BCQV8yMEsgMHgwMDE0CiAjZGVmaW5lIEUxMDAwX1BCQV8yMksgMHgwMDE2CiAjZGVmaW5lIEUxMDAwX1BCQV8yNEsgMHgwMDE4CiAjZGVmaW5lIEUxMDAwX1BCQV8zMEsgMHgwMDFFCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggNzNmM2E4NS4uYzYyNTljNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMjEzLDYgKzIxMywxMiBAQAogCiBleHRlcm4gdm9pZCBlMTAwMF9jaGVja19vcHRpb25zKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIAorI2RlZmluZSBDT1BZQlJFQUtfREVGQVVMVCAyNTYKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29weWJyZWFrIF9fcmVhZF9tb3N0bHkgPSBDT1BZQlJFQUtfREVGQVVMVDsKK21vZHVsZV9wYXJhbShjb3B5YnJlYWssIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjb3B5YnJlYWssCisJIk1heGltdW0gc2l6ZSBvZiBwYWNrZXQgdGhhdCBpcyBjb3BpZWQgdG8gYSBuZXcgYnVmZmVyIG9uIHJlY2VpdmUiKTsKKwogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgZTEwMDBfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAgICAgICAgICAgICAgICAgICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKTsKIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGUxMDAwX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwpAQCAtMjY0LDcgKzI3MCwxMyBAQAogCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBlMTAwMF9jb3B5cmlnaHQpOwogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZTEwMDBfZHJpdmVyKTsKLQorCWlmIChjb3B5YnJlYWsgIT0gQ09QWUJSRUFLX0RFRkFVTFQpIHsKKwkJaWYgKGNvcHlicmVhayA9PSAwKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiZTEwMDA6IGNvcHlicmVhayBkaXNhYmxlZFxuIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gImUxMDAwOiBjb3B5YnJlYWsgZW5hYmxlZCBmb3IgIgorCQkJICAgICAgICJwYWNrZXRzIDw9ICV1IGJ5dGVzXG4iLCBjb3B5YnJlYWspOworCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC00NjQsNiArNDc2LDUyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZAorZTEwMDBfaW5pdF9tYW5hZ2VhYmlsaXR5KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5lbl9tbmdfcHQpIHsKKwkJdWludDMyX3QgbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7CisKKwkJLyogZGlzYWJsZSBoYXJkd2FyZSBpbnRlcmNlcHRpb24gb2YgQVJQICovCisJCW1hbmMgJj0gfihFMTAwMF9NQU5DX0FSUF9FTik7CisKKwkJLyogZW5hYmxlIHJlY2VpdmluZyBtYW5hZ2VtZW50IHBhY2tldHMgdG8gdGhlIGhvc3QgKi8KKwkJLyogdGhpcyB3aWxsIHByb2JhYmx5IGdlbmVyYXRlIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlIG1lc3NhZ2VzCisJCSAqIGZyb20gdGhlIGhvc3QgT1MsIGJ1dCB0aGUgcGFja2V0cyB3aWxsIGJlIGhhbmRsZWQgb24gU01CVVMgKi8KKwkJaWYgKGFkYXB0ZXItPmh3Lmhhc19tYW5jMmgpIHsKKwkJCXVpbnQzMl90IG1hbmMyaCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQzJIKTsKKworCQkJbWFuYyB8PSBFMTAwMF9NQU5DX0VOX01ORzJIT1NUOworI2RlZmluZSBFMTAwMF9NTkcySE9TVF9QT1JUXzYyMyAoMSA8PCA1KQorI2RlZmluZSBFMTAwMF9NTkcySE9TVF9QT1JUXzY2NCAoMSA8PCA2KQorCQkJbWFuYzJoIHw9IEUxMDAwX01ORzJIT1NUX1BPUlRfNjIzOworCQkJbWFuYzJoIHw9IEUxMDAwX01ORzJIT1NUX1BPUlRfNjY0OworCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgTUFOQzJILCBtYW5jMmgpOworCQl9CisKKwkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgTUFOQywgbWFuYyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorZTEwMDBfcmVsZWFzZV9tYW5hZ2VhYmlsaXR5KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5lbl9tbmdfcHQpIHsKKwkJdWludDMyX3QgbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7CisKKwkJLyogcmUtZW5hYmxlIGhhcmR3YXJlIGludGVyY2VwdGlvbiBvZiBBUlAgKi8KKwkJbWFuYyB8PSBFMTAwMF9NQU5DX0FSUF9FTjsKKworCQlpZiAoYWRhcHRlci0+aHcuaGFzX21hbmMyaCkKKwkJCW1hbmMgJj0gfkUxMDAwX01BTkNfRU5fTU5HMkhPU1Q7CisKKwkJLyogZG9uJ3QgZXhwbGljaXRseSBoYXZlIHRvIG1lc3Mgd2l0aCBNQU5DMkggc2luY2UKKwkJICogTUFOQyBoYXMgYW4gZW5hYmxlIGRpc2FibGUgdGhhdCBnYXRlcyBNQU5DMkggKi8KKworCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBNQU5DLCBtYW5jKTsKKwl9Cit9CisKIGludAogZTEwMDBfdXAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC00NzUsNiArNTMzLDcgQEAKIAllMTAwMF9zZXRfbXVsdGkobmV0ZGV2KTsKIAogCWUxMDAwX3Jlc3RvcmVfdmxhbihhZGFwdGVyKTsKKwllMTAwMF9pbml0X21hbmFnZWFiaWxpdHkoYWRhcHRlcik7CiAKIAllMTAwMF9jb25maWd1cmVfdHgoYWRhcHRlcik7CiAJZTEwMDBfc2V0dXBfcmN0bChhZGFwdGVyKTsKQEAgLTQ5Nyw3ICs1NTYsOCBAQAogCiAJY2xlYXJfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKTsKIAotCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAyICogSFopOworCS8qIGZpcmUgYSBsaW5rIGNoYW5nZSBpbnRlcnJ1cHQgdG8gc3RhcnQgdGhlIHdhdGNoZG9nICovCisJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSUNTLCBFMTAwMF9JQ1NfTFNDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjE0LDE2ICs2NzQsMzQgQEAKIHZvaWQKIGUxMDAwX3Jlc2V0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewotCXVpbnQzMl90IHBiYSwgbWFuYzsKKwl1aW50MzJfdCBwYmEgPSAwLCB0eF9zcGFjZSwgbWluX3R4X3NwYWNlLCBtaW5fcnhfc3BhY2U7CiAJdWludDE2X3QgZmNfaGlnaF93YXRlcl9tYXJrID0gRTEwMDBfRkNfSElHSF9ESUZGOworCWJvb2xlYW5fdCBsZWdhY3lfcGJhX2FkanVzdCA9IEZBTFNFOwogCiAJLyogUmVwYXJ0aXRpb24gUGJhIGZvciBncmVhdGVyIHRoYW4gOWsgbXR1CiAJICogVG8gdGFrZSBlZmZlY3QgQ1RSTC5SU1QgaXMgcmVxdWlyZWQuCiAJICovCiAKIAlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CisJY2FzZSBlMTAwMF84MjU0Ml9yZXYyXzA6CisJY2FzZSBlMTAwMF84MjU0Ml9yZXYyXzE6CisJY2FzZSBlMTAwMF84MjU0MzoKKwljYXNlIGUxMDAwXzgyNTQ0OgorCWNhc2UgZTEwMDBfODI1NDA6CisJY2FzZSBlMTAwMF84MjU0MToKKwljYXNlIGUxMDAwXzgyNTQxX3Jldl8yOgorCQlsZWdhY3lfcGJhX2FkanVzdCA9IFRSVUU7CisJCXBiYSA9IEUxMDAwX1BCQV80OEs7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfODI1NDU6CisJY2FzZSBlMTAwMF84MjU0NV9yZXZfMzoKKwljYXNlIGUxMDAwXzgyNTQ2OgorCWNhc2UgZTEwMDBfODI1NDZfcmV2XzM6CisJCXBiYSA9IEUxMDAwX1BCQV80OEs7CisJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NDc6CiAJY2FzZSBlMTAwMF84MjU0N19yZXZfMjoKKwkJbGVnYWN5X3BiYV9hZGp1c3QgPSBUUlVFOwogCQlwYmEgPSBFMTAwMF9QQkFfMzBLOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTcxOgpAQCAtNjMyLDI3ICs3MTAsODAgQEAKIAkJcGJhID0gRTEwMDBfUEJBXzM4SzsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3MzoKLQkJcGJhID0gRTEwMDBfUEJBXzEySzsKKwkJcGJhID0gRTEwMDBfUEJBXzIwSzsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF9pY2g4bGFuOgogCQlwYmEgPSBFMTAwMF9QQkFfOEs7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXBiYSA9IEUxMDAwX1BCQV80OEs7CisJY2FzZSBlMTAwMF91bmRlZmluZWQ6CisJY2FzZSBlMTAwMF9udW1fbWFjczoKIAkJYnJlYWs7CiAJfQogCi0JaWYgKChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF84MjU3MykgJiYKLQkgICAoYWRhcHRlci0+bmV0ZGV2LT5tdHUgPiBFMTAwMF9SWEJVRkZFUl84MTkyKSkKLQkJcGJhIC09IDg7IC8qIGFsbG9jYXRlIG1vcmUgRklGTyBmb3IgVHggKi8KKwlpZiAobGVnYWN5X3BiYV9hZGp1c3QgPT0gVFJVRSkgeworCQlpZiAoYWRhcHRlci0+bmV0ZGV2LT5tdHUgPiBFMTAwMF9SWEJVRkZFUl84MTkyKQorCQkJcGJhIC09IDg7IC8qIGFsbG9jYXRlIG1vcmUgRklGTyBmb3IgVHggKi8KIAorCQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NDcpIHsKKwkJCWFkYXB0ZXItPnR4X2ZpZm9faGVhZCA9IDA7CisJCQlhZGFwdGVyLT50eF9oZWFkX2FkZHIgPSBwYmEgPDwgRTEwMDBfVFhfSEVBRF9BRERSX1NISUZUOworCQkJYWRhcHRlci0+dHhfZmlmb19zaXplID0KKwkJCQkoRTEwMDBfUEJBXzQwSyAtIHBiYSkgPDwgRTEwMDBfUEJBX0JZVEVTX1NISUZUOworCQkJYXRvbWljX3NldCgmYWRhcHRlci0+dHhfZmlmb19zdGFsbCwgMCk7CisJCX0KKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1heF9mcmFtZV9zaXplID4gTUFYSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFKSB7CisJCS8qIGFkanVzdCBQQkEgZm9yIGp1bWJvIGZyYW1lcyAqLworCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBQQkEsIHBiYSk7CiAKLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NDcpIHsKLQkJYWRhcHRlci0+dHhfZmlmb19oZWFkID0gMDsKLQkJYWRhcHRlci0+dHhfaGVhZF9hZGRyID0gcGJhIDw8IEUxMDAwX1RYX0hFQURfQUREUl9TSElGVDsKLQkJYWRhcHRlci0+dHhfZmlmb19zaXplID0KLQkJCShFMTAwMF9QQkFfNDBLIC0gcGJhKSA8PCBFMTAwMF9QQkFfQllURVNfU0hJRlQ7Ci0JCWF0b21pY19zZXQoJmFkYXB0ZXItPnR4X2ZpZm9fc3RhbGwsIDApOworCQkvKiBUbyBtYWludGFpbiB3aXJlIHNwZWVkIHRyYW5zbWl0cywgdGhlIFR4IEZJRk8gc2hvdWxkIGJlCisJCSAqIGxhcmdlIGVub3VnaCB0byBhY2NvbW9kYXRlIHR3byBmdWxsIHRyYW5zbWl0IHBhY2tldHMsCisJCSAqIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgMUtCIGFuZCBleHByZXNzZWQgaW4gS0IuICBMaWtld2lzZSwKKwkJICogdGhlIFJ4IEZJRk8gc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBhY2NvbW9kYXRlIGF0IGxlYXN0CisJCSAqIG9uZSBmdWxsIHJlY2VpdmUgcGFja2V0IGFuZCBpcyBzaW1pbGFybHkgcm91bmRlZCB1cCBhbmQKKwkJICogZXhwcmVzc2VkIGluIEtCLiAqLworCQlwYmEgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFBCQSk7CisJCS8qIHVwcGVyIDE2IGJpdHMgaGFzIFR4IHBhY2tldCBidWZmZXIgYWxsb2NhdGlvbiBzaXplIGluIEtCICovCisJCXR4X3NwYWNlID0gcGJhID4+IDE2OworCQkvKiBsb3dlciAxNiBiaXRzIGhhcyBSeCBwYWNrZXQgYnVmZmVyIGFsbG9jYXRpb24gc2l6ZSBpbiBLQiAqLworCQlwYmEgJj0gMHhmZmZmOworCQkvKiBkb24ndCBpbmNsdWRlIGV0aGVybmV0IEZDUyBiZWNhdXNlIGhhcmR3YXJlIGFwcGVuZHMvc3RyaXBzICovCisJCW1pbl9yeF9zcGFjZSA9IGFkYXB0ZXItPm5ldGRldi0+bXR1ICsgRU5FVF9IRUFERVJfU0laRSArCisJCSAgICAgICAgICAgICAgIFZMQU5fVEFHX1NJWkU7CisJCW1pbl90eF9zcGFjZSA9IG1pbl9yeF9zcGFjZTsKKwkJbWluX3R4X3NwYWNlICo9IDI7CisJCUUxMDAwX1JPVU5EVVAobWluX3R4X3NwYWNlLCAxMDI0KTsKKwkJbWluX3R4X3NwYWNlID4+PSAxMDsKKwkJRTEwMDBfUk9VTkRVUChtaW5fcnhfc3BhY2UsIDEwMjQpOworCQltaW5fcnhfc3BhY2UgPj49IDEwOworCisJCS8qIElmIGN1cnJlbnQgVHggYWxsb2NhdGlvbiBpcyBsZXNzIHRoYW4gdGhlIG1pbiBUeCBGSUZPIHNpemUsCisJCSAqIGFuZCB0aGUgbWluIFR4IEZJRk8gc2l6ZSBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgUnggRklGTworCQkgKiBhbGxvY2F0aW9uLCB0YWtlIHNwYWNlIGF3YXkgZnJvbSBjdXJyZW50IFJ4IGFsbG9jYXRpb24gKi8KKwkJaWYgKHR4X3NwYWNlIDwgbWluX3R4X3NwYWNlICYmCisJCSAgICAoKG1pbl90eF9zcGFjZSAtIHR4X3NwYWNlKSA8IHBiYSkpIHsKKwkJCXBiYSA9IHBiYSAtIChtaW5fdHhfc3BhY2UgLSB0eF9zcGFjZSk7CisKKwkJCS8qIFBDSS9QQ0l4IGhhcmR3YXJlIGhhcyBQQkEgYWxpZ25tZW50IGNvbnN0cmFpbnRzICovCisJCQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CisJCQljYXNlIGUxMDAwXzgyNTQ1IC4uLiBlMTAwMF84MjU0Nl9yZXZfMzoKKwkJCQlwYmEgJj0gfihFMTAwMF9QQkFfOEsgLSAxKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIGlmIHNob3J0IG9uIHJ4IHNwYWNlLCByeCB3aW5zIGFuZCBtdXN0IHRydW1wIHR4CisJCQkgKiBhZGp1c3RtZW50IG9yIHVzZSBFYXJseSBSZWNlaXZlIGlmIGF2YWlsYWJsZSAqLworCQkJaWYgKHBiYSA8IG1pbl9yeF9zcGFjZSkgeworCQkJCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjX3R5cGUpIHsKKwkJCQljYXNlIGUxMDAwXzgyNTczOgorCQkJCQkvKiBFUlQgZW5hYmxlZCBpbiBlMTAwMF9jb25maWd1cmVfcnggKi8KKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJcGJhID0gbWluX3J4X3NwYWNlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KIAl9CiAKIAlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBQQkEsIHBiYSk7CkBAIC02ODUsNiArODE2LDIwIEBACiAJaWYgKGUxMDAwX2luaXRfaHcoJmFkYXB0ZXItPmh3KSkKIAkJRFBSSU5USyhQUk9CRSwgRVJSLCAiSGFyZHdhcmUgRXJyb3JcbiIpOwogCWUxMDAwX3VwZGF0ZV9tbmdfdmxhbihhZGFwdGVyKTsKKworCS8qIGlmIChhZGFwdGVyLT5od2ZsYWdzICYgSFdGTEFHU19QSFlfUFdSX0JJVCkgeyAqLworCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0NCAmJgorCSAgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA8PSBlMTAwMF84MjU0N19yZXZfMiAmJgorCSAgICBhZGFwdGVyLT5ody5hdXRvbmVnID09IDEgJiYKKwkgICAgYWRhcHRlci0+aHcuYXV0b25lZ19hZHZlcnRpc2VkID09IEFEVkVSVElTRV8xMDAwX0ZVTEwpIHsKKwkJdWludDMyX3QgY3RybCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTCk7CisJCS8qIGNsZWFyIHBoeSBwb3dlciBtYW5hZ2VtZW50IGJpdCBpZiB3ZSBhcmUgaW4gZ2lnIG9ubHkgbW9kZSwKKwkJICogd2hpY2ggaWYgZW5hYmxlZCB3aWxsIGF0dGVtcHQgbmVnb3RpYXRpb24gdG8gMTAwTWIsIHdoaWNoCisJCSAqIGNhbiBjYXVzZSBhIGxvc3Mgb2YgbGluayBhdCBwb3dlciBvZmYgb3IgZHJpdmVyIHVubG9hZCAqLworCQljdHJsICY9IH5FMTAwMF9DVFJMX1NXRFBJTjM7CisJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwsIGN0cmwpOworCX0KKwogCS8qIEVuYWJsZSBoL3cgdG8gcmVjb2duaXplIGFuIDgwMi4xUSBWTEFOIEV0aGVybmV0IHBhY2tldCAqLwogCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFZFVCwgRVRIRVJORVRfSUVFRV9WTEFOX1RZUEUpOwogCkBAIC03MDUsMTQgKzg1MCw3IEBACiAJCSAgICAgICAgICAgICAgICAgICAgcGh5X2RhdGEpOwogCX0KIAotCWlmICgoYWRhcHRlci0+ZW5fbW5nX3B0KSAmJgotCSAgICAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDApICYmCi0JICAgIChhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxKSAmJgotCSAgICAoYWRhcHRlci0+aHcubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikpIHsKLQkJbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7Ci0JCW1hbmMgfD0gKEUxMDAwX01BTkNfQVJQX0VOIHwgRTEwMDBfTUFOQ19FTl9NTkcySE9TVCk7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIE1BTkMsIG1hbmMpOwotCX0KKwllMTAwMF9yZWxlYXNlX21hbmFnZWFiaWxpdHkoYWRhcHRlcik7CiB9CiAKIC8qKgpAQCAtMTA3OCwyMiArMTIxNiwxMyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXVpbnQzMl90IG1hbmM7CiAjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIAlpbnQgaTsKICNlbmRpZgogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCAmJgotCSAgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxICYmCi0JICAgIGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKLQkJbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7Ci0JCWlmIChtYW5jICYgRTEwMDBfTUFOQ19TTUJVU19FTikgewotCQkJbWFuYyB8PSBFMTAwMF9NQU5DX0FSUF9FTjsKLQkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIE1BTkMsIG1hbmMpOwotCQl9Ci0JfQorCWUxMDAwX3JlbGVhc2VfbWFuYWdlYWJpbGl0eShhZGFwdGVyKTsKIAogCS8qIFJlbGVhc2UgY29udHJvbCBvZiBoL3cgdG8gZi93LiAgSWYgZi93IGlzIEFNVCBlbmFibGVkLCB0aGlzCiAJICogd291bGQgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGluIGNsb3NlIGFuZCBpcyByZWR1bmRhbnQuICovCkBAIC0xNTMxLDkgKzE2NjAsOSBAQAogCX0KIAogCS8qIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBUeCBJbnRlciBQYWNrZXQgR2FwIHRpbWVyICovCi0KLQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlciB8fAotCSAgICBody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKKwlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPD0gZTEwMDBfODI1NDdfcmV2XzIgJiYKKwkgICAgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIgfHwKKwkgICAgIGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSkKIAkJdGlwZyA9IERFRkFVTFRfODI1NDNfVElQR19JUEdUX0ZJQkVSOwogCWVsc2UKIAkJdGlwZyA9IERFRkFVTFRfODI1NDNfVElQR19JUEdUX0NPUFBFUjsKQEAgLTI1MjgsNiArMjY1NywxMyBAQAogCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT5waHlfaW5mb190aW1lciwgamlmZmllcyArIDIgKiBIWik7CiAJCQlhZGFwdGVyLT5zbWFydHNwZWVkID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIG1ha2Ugc3VyZSB0aGUgcmVjZWl2ZSB1bml0IGlzIHN0YXJ0ZWQgKi8KKwkJCWlmIChhZGFwdGVyLT5ody5yeF9uZWVkc19raWNraW5nKSB7CisJCQkJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwkJCQl1aW50MzJfdCByY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJDVEwpOworCQkJCUUxMDAwX1dSSVRFX1JFRyhodywgUkNUTCwgcmN0bCB8IEUxMDAwX1JDVExfRU4pOworCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewpAQCAtMjYyOCwyOSArMjc2NCwzNCBAQAogCWlmIChwYWNrZXRzID09IDApCiAJCWdvdG8gdXBkYXRlX2l0cl9kb25lOwogCi0KIAlzd2l0Y2ggKGl0cl9zZXR0aW5nKSB7CiAJY2FzZSBsb3dlc3RfbGF0ZW5jeToKLQkJaWYgKChwYWNrZXRzIDwgNSkgJiYgKGJ5dGVzID4gNTEyKSkKKwkJLyoganVtYm8gZnJhbWVzIGdldCBidWxrIHRyZWF0bWVudCovCisJCWlmIChieXRlcy9wYWNrZXRzID4gODAwMCkKKwkJCXJldHZhbCA9IGJ1bGtfbGF0ZW5jeTsKKwkJZWxzZSBpZiAoKHBhY2tldHMgPCA1KSAmJiAoYnl0ZXMgPiA1MTIpKQogCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7CiAJCWJyZWFrOwogCWNhc2UgbG93X2xhdGVuY3k6ICAvKiA1MCB1c2VjIGFrYSAyMDAwMCBpbnRzL3MgKi8KIAkJaWYgKGJ5dGVzID4gMTAwMDApIHsKLQkJCWlmICgocGFja2V0cyA8IDEwKSB8fAotCQkJICAgICAoKGJ5dGVzL3BhY2tldHMpID4gMTIwMCkpCisJCQkvKiBqdW1ibyBmcmFtZXMgbmVlZCBidWxrIGxhdGVuY3kgc2V0dGluZyAqLworCQkJaWYgKGJ5dGVzL3BhY2tldHMgPiA4MDAwKQorCQkJCXJldHZhbCA9IGJ1bGtfbGF0ZW5jeTsKKwkJCWVsc2UgaWYgKChwYWNrZXRzIDwgMTApIHx8ICgoYnl0ZXMvcGFja2V0cykgPiAxMjAwKSkKIAkJCQlyZXR2YWwgPSBidWxrX2xhdGVuY3k7CiAJCQllbHNlIGlmICgocGFja2V0cyA+IDM1KSkKIAkJCQlyZXR2YWwgPSBsb3dlc3RfbGF0ZW5jeTsKLQkJfSBlbHNlIGlmIChwYWNrZXRzIDw9IDIgJiYgYnl0ZXMgPCA1MTIpCisJCX0gZWxzZSBpZiAoYnl0ZXMvcGFja2V0cyA+IDIwMDApCisJCQlyZXR2YWwgPSBidWxrX2xhdGVuY3k7CisJCWVsc2UgaWYgKHBhY2tldHMgPD0gMiAmJiBieXRlcyA8IDUxMikKIAkJCXJldHZhbCA9IGxvd2VzdF9sYXRlbmN5OwogCQlicmVhazsKIAljYXNlIGJ1bGtfbGF0ZW5jeTogLyogMjUwIHVzZWMgYWthIDQwMDAgaW50cy9zICovCiAJCWlmIChieXRlcyA+IDI1MDAwKSB7CiAJCQlpZiAocGFja2V0cyA+IDM1KQogCQkJCXJldHZhbCA9IGxvd19sYXRlbmN5OwotCQl9IGVsc2UgewotCQkJaWYgKGJ5dGVzIDwgNjAwMCkKLQkJCQlyZXR2YWwgPSBsb3dfbGF0ZW5jeTsKKwkJfSBlbHNlIGlmIChieXRlcyA8IDYwMDApIHsKKwkJCXJldHZhbCA9IGxvd19sYXRlbmN5OwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTI2NzksMTcgKzI4MjAsMjAgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dHhfaXRyLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT50b3RhbF90eF9ieXRlcyk7CisJLyogY29uc2VydmF0aXZlIG1vZGUgKGl0ciAzKSBlbGltaW5hdGVzIHRoZSBsb3dlc3RfbGF0ZW5jeSBzZXR0aW5nICovCisJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nID09IDMgJiYgYWRhcHRlci0+dHhfaXRyID09IGxvd2VzdF9sYXRlbmN5KQorCQlhZGFwdGVyLT50eF9pdHIgPSBsb3dfbGF0ZW5jeTsKKwogCWFkYXB0ZXItPnJ4X2l0ciA9IGUxMDAwX3VwZGF0ZV9pdHIoYWRhcHRlciwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cnhfaXRyLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyk7CisJLyogY29uc2VydmF0aXZlIG1vZGUgKGl0ciAzKSBlbGltaW5hdGVzIHRoZSBsb3dlc3RfbGF0ZW5jeSBzZXR0aW5nICovCisJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nID09IDMgJiYgYWRhcHRlci0+cnhfaXRyID09IGxvd2VzdF9sYXRlbmN5KQorCQlhZGFwdGVyLT5yeF9pdHIgPSBsb3dfbGF0ZW5jeTsKIAogCWN1cnJlbnRfaXRyID0gbWF4KGFkYXB0ZXItPnJ4X2l0ciwgYWRhcHRlci0+dHhfaXRyKTsKIAotCS8qIGNvbnNlcnZhdGl2ZSBtb2RlIGVsaW1pbmF0ZXMgdGhlIGxvd2VzdF9sYXRlbmN5IHNldHRpbmcgKi8KLQlpZiAoY3VycmVudF9pdHIgPT0gbG93ZXN0X2xhdGVuY3kgJiYgKGFkYXB0ZXItPml0cl9zZXR0aW5nID09IDMpKQotCQljdXJyZW50X2l0ciA9IGxvd19sYXRlbmN5OwotCiAJc3dpdGNoIChjdXJyZW50X2l0cikgewogCS8qIGNvdW50cyBhbmQgcGFja2V0cyBpbiB1cGRhdGVfaXRyIGFyZSBkZXBlbmRlbnQgb24gdGhlc2UgbnVtYmVycyAqLwogCWNhc2UgbG93ZXN0X2xhdGVuY3k6CkBAIC0zMTY4LDYgKzMzMTIsMTYgQEAKIAkJaWYgKHNrYi0+ZGF0YV9sZW4gJiYgKGhkcl9sZW4gPT0gKHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbikpKSB7CiAJCQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CiAJCQkJdW5zaWduZWQgaW50IHB1bGxfc2l6ZTsKKwkJCWNhc2UgZTEwMDBfODI1NDQ6CisJCQkJLyogTWFrZSBzdXJlIHdlIGhhdmUgcm9vbSB0byBjaG9wIG9mZiA0IGJ5dGVzLAorCQkJCSAqIGFuZCB0aGF0IHRoZSBlbmQgYWxpZ25tZW50IHdpbGwgd29yayBvdXQgdG8KKwkJCQkgKiB0aGlzIGhhcmR3YXJlJ3MgcmVxdWlyZW1lbnRzCisJCQkJICogTk9URTogdGhpcyBpcyBhIFRTTyBvbmx5IHdvcmthcm91bmQKKwkJCQkgKiBpZiBlbmQgYnl0ZSBhbGlnbm1lbnQgbm90IGNvcnJlY3QgbW92ZSB1cworCQkJCSAqIGludG8gdGhlIG5leHQgZHdvcmQgKi8KKwkJCQlpZiAoKHVuc2lnbmVkIGxvbmcpKHNrYi0+dGFpbCAtIDEpICYgNCkKKwkJCQkJYnJlYWs7CisJCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCQljYXNlIGUxMDAwXzgyNTcxOgogCQkJY2FzZSBlMTAwMF84MjU3MjoKIAkJCWNhc2UgZTEwMDBfODI1NzM6CkBAIC0zNDE5LDEyICszNTczLDExIEBACiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5fU0laRTsKIAogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKKwlhZGFwdGVyLT5ody5tYXhfZnJhbWVfc2l6ZSA9IG1heF9mcmFtZTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWUxMDAwX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CiAKLQlhZGFwdGVyLT5ody5tYXhfZnJhbWVfc2l6ZSA9IG1heF9mcmFtZTsKLQogCXJldHVybiAwOwogfQogCkBAIC0zNTczLDYgKzM3MjYsMTEgQEAKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPSBhZGFwdGVyLT5zdGF0cy5lY29sOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF93aW5kb3dfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMubGF0ZWNvbDsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfY2Fycmllcl9lcnJvcnMgPSBhZGFwdGVyLT5zdGF0cy50bmNyczsKKwlpZiAoYWRhcHRlci0+aHcuYmFkX3R4X2NhcnJfc3RhdHNfZmQgJiYKKwkgICAgYWRhcHRlci0+bGlua19kdXBsZXggPT0gRlVMTF9EVVBMRVgpIHsKKwkJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2NhcnJpZXJfZXJyb3JzID0gMDsKKwkJYWRhcHRlci0+c3RhdHMudG5jcnMgPSAwOworCX0KIAogCS8qIFR4IERyb3BwZWQgbmVlZHMgdG8gYmUgbWFpbnRhaW5lZCBlbHNld2hlcmUgKi8KIApAQCAtMzU5MCw2ICszNzQ4LDEzIEBACiAJCQlhZGFwdGVyLT5waHlfc3RhdHMucmVjZWl2ZV9lcnJvcnMgKz0gcGh5X3RtcDsKIAl9CiAKKwkvKiBNYW5hZ2VtZW50IFN0YXRzICovCisJaWYgKGFkYXB0ZXItPmh3Lmhhc19zbWJ1cykgeworCQlhZGFwdGVyLT5zdGF0cy5tZ3B0YyArPSBFMTAwMF9SRUFEX1JFRyhodywgTUdUUFRDKTsKKwkJYWRhcHRlci0+c3RhdHMubWdwcmMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIE1HVFBSQyk7CisJCWFkYXB0ZXItPnN0YXRzLm1ncGRjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBNR1RQREMpOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKIH0KICNpZmRlZiBDT05GSUdfUENJX01TSQpAQCAtMzg2OCwxMSArNDAzMywxMSBAQAogCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CiAKIAkJCWlmIChjbGVhbmVkKSB7Ci0JCQkJLyogdGhpcyBwYWNrZXQgY291bnQgaXMgd3JvbmcgZm9yIFRTTyBidXQgaGFzIGEKLQkJCQkgKiB0ZW5kZW5jeSB0byBtYWtlIGR5bmFtaWMgSVRSIGNoYW5nZSBtb3JlCi0JCQkJICogdG93YXJkcyBidWxrICovCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CisJCQkJdW5zaWduZWQgaW50IHNlZ3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzOworCQkJCXRvdGFsX3R4X3BhY2tldHMgKz0gc2VnczsKIAkJCQl0b3RhbF90eF9wYWNrZXRzKys7Ci0JCQkJdG90YWxfdHhfYnl0ZXMgKz0gYnVmZmVyX2luZm8tPnNrYi0+bGVuOworCQkJCXRvdGFsX3R4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJfQogCQkJZTEwMDBfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgYnVmZmVyX2luZm8pOwogCQkJdHhfZGVzYy0+dXBwZXIuZGF0YSA9IDA7CkBAIC00MDk0LDggKzQyNTksNyBAQAogCQkvKiBjb2RlIGFkZGVkIGZvciBjb3B5YnJlYWssIHRoaXMgc2hvdWxkIGltcHJvdmUKIAkJICogcGVyZm9ybWFuY2UgZm9yIHNtYWxsIHBhY2tldHMgd2l0aCBsYXJnZSBhbW91bnRzCiAJCSAqIG9mIHJlYXNzZW1ibHkgYmVpbmcgZG9uZSBpbiB0aGUgc3RhY2sgKi8KLSNkZWZpbmUgRTEwMDBfQ0JfTEVOR1RIIDI1NgotCQlpZiAobGVuZ3RoIDwgRTEwMDBfQ0JfTEVOR1RIKSB7CisJCWlmIChsZW5ndGggPCBjb3B5YnJlYWspIHsKIAkJCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0KIAkJCSAgICBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgbGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKIAkJCWlmIChuZXdfc2tiKSB7CkBAIC00MjUzLDcgKzQ0MTcsNyBAQAogCiAJCS8qIHBhZ2UgYWxsb2MvcHV0IHRha2VzIHRvbyBsb25nIGFuZCBlZmZlY3RzIHNtYWxsIHBhY2tldAogCQkgKiB0aHJvdWdocHV0LCBzbyB1bnNwbGl0IHNtYWxsIHBhY2tldHMgYW5kIHNhdmUgdGhlIGFsbG9jL3B1dCovCi0JCWlmIChsMSAmJiAoKGxlbmd0aCArIGwxKSA8PSBhZGFwdGVyLT5yeF9wc19ic2l6ZTApKSB7CisJCWlmIChsMSAmJiAobDEgPD0gY29weWJyZWFrKSAmJiAoKGxlbmd0aCArIGwxKSA8PSBhZGFwdGVyLT5yeF9wc19ic2l6ZTApKSB7CiAJCQl1OCAqdmFkZHI7CiAJCQkvKiB0aGVyZSBpcyBubyBkb2N1bWVudGF0aW9uIGFib3V0IGhvdyB0byBjYWxsCiAJCQkgKiBrbWFwX2F0b21pYywgc28gd2UgY2FuJ3QgaG9sZCB0aGUgbWFwcGluZwpAQCAtNDk5OCw3ICs1MTYyLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1aW50MzJfdCBjdHJsLCBjdHJsX2V4dCwgcmN0bCwgbWFuYywgc3RhdHVzOworCXVpbnQzMl90IGN0cmwsIGN0cmxfZXh0LCByY3RsLCBzdGF0dXM7CiAJdWludDMyX3Qgd3VmYyA9IGFkYXB0ZXItPndvbDsKICNpZmRlZiBDT05GSUdfUE0KIAlpbnQgcmV0dmFsID0gMDsKQEAgLTUwNjcsMTYgKzUyMzEsMTIgQEAKIAkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwogCX0KIAotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCAmJgotCSAgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxICYmCi0JICAgIGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKLQkJbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7Ci0JCWlmIChtYW5jICYgRTEwMDBfTUFOQ19TTUJVU19FTikgewotCQkJbWFuYyB8PSBFMTAwMF9NQU5DX0FSUF9FTjsKLQkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIE1BTkMsIG1hbmMpOwotCQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7Ci0JCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7Ci0JCX0KKwllMTAwMF9yZWxlYXNlX21hbmFnZWFiaWxpdHkoYWRhcHRlcik7CisKKwkvKiBtYWtlIHN1cmUgYWRhcHRlciBpc24ndCBhc2xlZXAgaWYgbWFuYWdlYWJpbGl0eSBpcyBlbmFibGVkICovCisJaWYgKGFkYXB0ZXItPmVuX21uZ19wdCkgeworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAxKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDEpOwogCX0KIAogCWlmIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpCkBAIC01MTAyLDcgKzUyNjIsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXVpbnQzMl90IG1hbmMsIGVycjsKKwl1aW50MzJfdCBlcnI7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJZTEwMDBfcGNpX3Jlc3RvcmVfc3RhdGUoYWRhcHRlcik7CkBAIC01MTIyLDE5ICs1MjgyLDEzIEBACiAJZTEwMDBfcmVzZXQoYWRhcHRlcik7CiAJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgV1VTLCB+MCk7CiAKKwllMTAwMF9pbml0X21hbmFnZWFiaWxpdHkoYWRhcHRlcik7CisKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQllMTAwMF91cChhZGFwdGVyKTsKIAogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIAotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCAmJgotCSAgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxICYmCi0JICAgIGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKLQkJbWFuYyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgTUFOQyk7Ci0JCW1hbmMgJj0gfihFMTAwMF9NQU5DX0FSUF9FTik7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIE1BTkMsIG1hbmMpOwotCX0KLQogCS8qIElmIHRoZSBjb250cm9sbGVyIGlzIDgyNTczIGFuZCBmL3cgaXMgQU1ULCBkbyBub3Qgc2V0CiAJICogRFJWX0xPQUQgdW50aWwgdGhlIGludGVyZmFjZSBpcyB1cC4gIEZvciBhbGwgb3RoZXIgY2FzZXMsCiAJICogbGV0IHRoZSBmL3cga25vdyB0aGF0IHRoZSBoL3cgaXMgbm93IHVuZGVyIHRoZSBjb250cm9sCkBAIC01MjM1LDcgKzUzODksOCBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXYtPnByaXY7Ci0JdWludDMyX3QgbWFuYywgc3dzbTsKKworCWUxMDAwX2luaXRfbWFuYWdlYWJpbGl0eShhZGFwdGVyKTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJaWYgKGUxMDAwX3VwKGFkYXB0ZXIpKSB7CkBAIC01MjQ2LDI2ICs1NDAxLDE0IEBACiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAKLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDAgJiYKLQkgICAgYWRhcHRlci0+aHcubWFjX3R5cGUgPCBlMTAwMF84MjU3MSAmJgotCSAgICBhZGFwdGVyLT5ody5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7Ci0JCW1hbmMgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIE1BTkMpOwotCQltYW5jICY9IH4oRTEwMDBfTUFOQ19BUlBfRU4pOwotCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBNQU5DLCBtYW5jKTsKLQl9CisJLyogSWYgdGhlIGNvbnRyb2xsZXIgaXMgODI1NzMgYW5kIGYvdyBpcyBBTVQsIGRvIG5vdCBzZXQKKwkgKiBEUlZfTE9BRCB1bnRpbCB0aGUgaW50ZXJmYWNlIGlzIHVwLiAgRm9yIGFsbCBvdGhlciBjYXNlcywKKwkgKiBsZXQgdGhlIGYvdyBrbm93IHRoYXQgdGhlIGgvdyBpcyBub3cgdW5kZXIgdGhlIGNvbnRyb2wKKwkgKiBvZiB0aGUgZHJpdmVyLiAqLworCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF84MjU3MyB8fAorCSAgICAhZTEwMDBfY2hlY2tfbW5nX21vZGUoJmFkYXB0ZXItPmh3KSkKKwkJZTEwMDBfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CiAKLQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7Ci0JY2FzZSBlMTAwMF84MjU3MzoKLQkJc3dzbSA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1dTTSk7Ci0JCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFNXU00sCi0JCQkJc3dzbSB8IEUxMDAwX1NXU01fRFJWX0xPQUQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKIH0KIAogLyogZTEwMDBfbWFpbi5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9wYXJhbS5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfcGFyYW0uYwppbmRleCBjYmZjZDdmLi5jZjJhMjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9wYXJhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMKQEAgLTQ4Nyw3ICs0ODcsOSBAQAogCQkJCWUxMDAwX3ZhbGlkYXRlX29wdGlvbigmYWRhcHRlci0+aXRyLCAmb3B0LAogCQkJCSAgICAgICAgYWRhcHRlcik7CiAJCQkJLyogc2F2ZSB0aGUgc2V0dGluZywgYmVjYXVzZSB0aGUgZHluYW1pYyBiaXRzIGNoYW5nZSBpdHIgKi8KLQkJCQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IGFkYXB0ZXItPml0cjsKKwkJCQkvKiBjbGVhciB0aGUgbG93ZXIgdHdvIGJpdHMgYmVjYXVzZSB0aGV5IGFyZQorCQkJCSAqIHVzZWQgYXMgY29udHJvbCAqLworCQkJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gYWRhcHRlci0+aXRyICYgfjM7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWEuaCBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCmluZGV4IDM5YWQ5ZjcuLjI3MmUxZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJImVoZWEiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAwNDMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAwNDUiCiAKICNkZWZpbmUgRUhFQV9NU0dfREVGQVVMVCAoTkVUSUZfTVNHX0xJTksgfCBORVRJRl9NU0dfVElNRVIgXAogCXwgTkVUSUZfTVNHX1JYX0VSUiB8IE5FVElGX01TR19UWF9FUlIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCA4M2ZhMzJmLi45ZGUyZDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTU1OCwxMiArNTU4LDEyIEBACiAJdTMyIHFwX3Rva2VuOwogCiAJZXFlID0gZWhlYV9wb2xsX2VxKHBvcnQtPnFwX2VxKTsKLQllaGVhX2RlYnVnKCJlcWU9JXAiLCBlcWUpOworCiAJd2hpbGUgKGVxZSkgewotCQllaGVhX2RlYnVnKCIqZXFlPSVseCIsICoodTY0KillcWUpOwotCQllcWUgPSBlaGVhX3BvbGxfZXEocG9ydC0+cXBfZXEpOwogCQlxcF90b2tlbiA9IEVIRUFfQk1BU0tfR0VUKEVIRUFfRVFFX1FQX1RPS0VOLCBlcWUtPmVudHJ5KTsKLQkJZWhlYV9kZWJ1ZygibmV4dCBlcWU9JXAiLCBlcWUpOworCQllaGVhX2Vycm9yKCJRUCBhZmZfZXJyOiBlbnRyeT0weCVseCwgdG9rZW49MHgleCIsCisJCQkgICBlcWUtPmVudHJ5LCBxcF90b2tlbik7CisJCWVxZSA9IGVoZWFfcG9sbF9lcShwb3J0LT5xcF9lcSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNTc1LDggKzU3NSw5IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3BvcnRzOyBpKyspCi0JCWlmIChhZGFwdGVyLT5wb3J0W2ldLT5sb2dpY2FsX3BvcnRfaWQgPT0gbG9naWNhbF9wb3J0KQotCQkJcmV0dXJuIGFkYXB0ZXItPnBvcnRbaV07CisJCWlmIChhZGFwdGVyLT5wb3J0W2ldKQorCSAgICAgICAgICAgICAgICBpZiAoYWRhcHRlci0+cG9ydFtpXS0+bG9naWNhbF9wb3J0X2lkID09IGxvZ2ljYWxfcG9ydCkKKwkJCQlyZXR1cm4gYWRhcHRlci0+cG9ydFtpXTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtNjQyLDYgKzY0Myw4IEBACiAJCWJyZWFrOwogCX0KIAorCXBvcnQtPmF1dG9uZWcgPSAxOworCiAJLyogTnVtYmVyIG9mIGRlZmF1bHQgUVBzICovCiAJcG9ydC0+bnVtX2RlZl9xcHMgPSBjYjAtPm51bV9kZWZhdWx0X3FwczsKIApAQCAtNzI4LDEwICs3MzEsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGhyZXQgPT0gSF9BVVRIT1JJVFkpIHsKLQkJCWVoZWFfaW5mbygiSHlwZXJ2aXNvciBkZW5pZWQgc2V0dGluZyBwb3J0IHNwZWVkLiBFaXRoZXIiCi0JCQkJICAiIHRoaXMgcGFydGl0aW9uIGlzIG5vdCBhdXRob3JpemVkIHRvIHNldCAiCi0JCQkJICAicG9ydCBzcGVlZCBvciBhbm90aGVyIHBhcnRpdGlvbiBoYXMgbW9kaWZpZWQiCi0JCQkJICAiIHBvcnQgc3BlZWQgZmlyc3QuIik7CisJCQllaGVhX2luZm8oIkh5cGVydmlzb3IgZGVuaWVkIHNldHRpbmcgcG9ydCBzcGVlZCIpOwogCQkJcmV0ID0gLUVQRVJNOwogCQl9IGVsc2UgewogCQkJcmV0ID0gLUVJTzsKQEAgLTk5OCw3ICs5OTgsNyBAQAogCQkgICAgIHwgRUhFQV9CTUFTS19TRVQoUFhMWV9SQ19KVU1CT19GUkFNRSwgMSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHM7IGkrKykKLQkJY2IwLT5kZWZhdWx0X3Fwbl9hcnJbaV0gPSBwb3J0LT5wb3J0X3Jlc1tpXS5xcC0+aW5pdF9hdHRyLnFwX25yOworCQljYjAtPmRlZmF1bHRfcXBuX2FycltpXSA9IHBvcnQtPnBvcnRfcmVzWzBdLnFwLT5pbml0X2F0dHIucXBfbnI7CiAKIAlpZiAobmV0aWZfbXNnX2lmdXAocG9ydCkpCiAJCWVoZWFfZHVtcChjYjAsIHNpemVvZigqY2IwKSwgImVoZWFfY29uZmlndXJlX3BvcnQiKTsKQEAgLTE0ODUsMTEgKzE0ODUsMTIgQEAKIAogc3RhdGljIHZvaWQgZWhlYV9wcm9taXNjdW91c19lcnJvcih1NjQgaHJldCwgaW50IGVuYWJsZSkKIHsKLQllaGVhX2luZm8oIkh5cGVydmlzb3IgZGVuaWVkICVzYWJsaW5nIHByb21pc2N1b3VzIG1vZGUuJXMiLAotCQkgIGVuYWJsZSA9PSAxID8gImVuIiA6ICJkaXMiLAotCQkgIGhyZXQgIT0gSF9BVVRIT1JJVFkgPyAiIiA6ICIgQW5vdGhlciBwYXJ0aXRpb24gb3duaW5nIGEgIgotCQkgICJsb2dpY2FsIHBvcnQgb24gdGhlIHNhbWUgcGh5c2ljYWwgcG9ydCBtaWdodCBoYXZlIGFsdGVyZWQgIgotCQkgICJwcm9taXNjdW91cyBtb2RlIGZpcnN0LiIpOworCWlmIChocmV0ID09IEhfQVVUSE9SSVRZKQorCQllaGVhX2luZm8oIkh5cGVydmlzb3IgZGVuaWVkICVzYWJsaW5nIHByb21pc2N1b3VzIG1vZGUiLAorCQkJICBlbmFibGUgPT0gMSA/ICJlbiIgOiAiZGlzIik7CisJZWxzZQorCQllaGVhX2Vycm9yKCJmYWlsZWQgJXNhYmxpbmcgcHJvbWlzY3VvdXMgbW9kZSIsCisJCQkgICBlbmFibGUgPT0gMSA/ICJlbiIgOiAiZGlzIik7CiB9CiAKIHN0YXRpYyB2b2lkIGVoZWFfcHJvbWlzY3VvdXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGVuYWJsZSkKQEAgLTIyNjcsNiArMjI2OCw4IEBACiBpbnQgZWhlYV9zZW5zZV9hZGFwdGVyX2F0dHIoc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgaGNwX3F1ZXJ5X2VoZWEgKmNiOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGhlYV9kbiA9IE5VTEw7CisJc3RydWN0IGRldmljZV9ub2RlICpldGhfZG4gPSBOVUxMOwogCXU2NCBocmV0OwogCWludCByZXQ7CiAKQEAgLTIyODMsNyArMjI4NiwxOCBAQAogCQlnb3RvIG91dF9oZXJyOwogCX0KIAotCWFkYXB0ZXItPm51bV9wb3J0cyA9IGNiLT5udW1fcG9ydHM7CisJLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGxvZ2ljYWwgcG9ydHMKKwkgKiBieSBjb3VudGluZyB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIGxoZWEgT0ZEVCBlbnRyeQorCSAqLworCWFkYXB0ZXItPm51bV9wb3J0cyA9IDA7CisJbGhlYV9kbiA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKGxoZWFfZG4sICJsaGVhIik7CisJZG8geworCQlldGhfZG4gPSBvZl9nZXRfbmV4dF9jaGlsZChsaGVhX2RuLCBldGhfZG4pOworCQlpZiAoZXRoX2RuKQorCQkJYWRhcHRlci0+bnVtX3BvcnRzKys7CisJfSB3aGlsZSAoIGV0aF9kbiApOworCW9mX25vZGVfcHV0KGxoZWFfZG4pOworCiAJYWRhcHRlci0+bWF4X21jX21hYyA9IGNiLT5tYXhfbWNfbWFjIC0gMTsKIAlyZXQgPSAwOwogCkBAIC0yMzAyLDYgKzIzMTYsNyBAQAogCXN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwogCXN0cnVjdCBoY3BfZWhlYV9wb3J0X2NiNCAqY2I0OwogCXUzMiAqZG5fbG9nX3BvcnRfaWQ7CisJaW50IGp1bWJvID0gMDsKIAogCXNlbWFfaW5pdCgmcG9ydC0+cG9ydF9sb2NrLCAxKTsKIAlwb3J0LT5zdGF0ZSA9IEVIRUFfUE9SVF9ET1dOOwpAQCAtMjMzNCw4ICsyMzQ5LDYgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZwb3J0LT5tY19saXN0LT5saXN0KTsKIAotCWVoZWFfc2V0X3BvcnRzcGVlZChwb3J0LCBFSEVBX1NQRUVEX0FVVE9ORUcpOwotCiAJcmV0ID0gZWhlYV9zZW5zZV9wb3J0X2F0dHIocG9ydCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CkBAIC0yMzQ1LDEzICsyMzU4LDI1IEBACiAJaWYgKCFjYjQpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjQiKTsKIAl9IGVsc2UgewotCQljYjQtPmp1bWJvX2ZyYW1lID0gMTsKLQkJaHJldCA9IGVoZWFfaF9tb2RpZnlfZWhlYV9wb3J0KGFkYXB0ZXItPmhhbmRsZSwKLQkJCQkJICAgICAgIHBvcnQtPmxvZ2ljYWxfcG9ydF9pZCwKLQkJCQkJICAgICAgIEhfUE9SVF9DQjQsIEhfUE9SVF9DQjRfSlVNQk8sCi0JCQkJCSAgICAgICBjYjQpOwotCQlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKLQkJCWVoZWFfaW5mbygiSnVtYm8gZnJhbWVzIG5vdCBhY3RpdmF0ZWQiKTsKKwkJaHJldCA9IGVoZWFfaF9xdWVyeV9laGVhX3BvcnQoYWRhcHRlci0+aGFuZGxlLAorCQkJCQkgICAgICBwb3J0LT5sb2dpY2FsX3BvcnRfaWQsCisJCQkJCSAgICAgIEhfUE9SVF9DQjQsCisJCQkJCSAgICAgIEhfUE9SVF9DQjRfSlVNQk8sIGNiNCk7CisKKwkJaWYgKGhyZXQgPT0gSF9TVUNDRVNTKSB7CisJCQlpZiAoY2I0LT5qdW1ib19mcmFtZSkKKwkJCQlqdW1ibyA9IDE7CisJCQllbHNlIHsKKwkJCQljYjQtPmp1bWJvX2ZyYW1lID0gMTsKKwkJCQlocmV0ID0gZWhlYV9oX21vZGlmeV9laGVhX3BvcnQoYWRhcHRlci0+aGFuZGxlLAorCQkJCQkJCSAgICAgICBwb3J0LT4KKwkJCQkJCQkgICAgICAgIGxvZ2ljYWxfcG9ydF9pZCwKKwkJCQkJCQkgICAgICAgSF9QT1JUX0NCNCwKKwkJCQkJCQkgICAgICAgSF9QT1JUX0NCNF9KVU1CTywKKwkJCQkJCQkgICAgICAgY2I0KTsKKwkJCQlpZiAoaHJldCA9PSBIX1NVQ0NFU1MpCisJCQkJCWp1bWJvID0gMTsKKwkJCX0KIAkJfQogCQlrZnJlZShjYjQpOwogCX0KQEAgLTIzOTAsNiArMjQxNSw5IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCisJZWhlYV9pbmZvKCIlczogSnVtYm8gZnJhbWVzIGFyZSAlc2FibGVkIiwgZGV2LT5uYW1lLAorCQkgIGp1bWJvID09IDEgPyAiZW4iIDogImRpcyIpOworCiAJcG9ydC0+bmV0ZGV2ID0gZGV2OwogCXJldCA9IDA7CiAJZ290byBvdXQ7CkBAIC0yNDcxLDE0ICsyNDk5LDE2IEBACiAKIAlhZGFwdGVyX2hhbmRsZSA9ICh1NjQqKWdldF9wcm9wZXJ0eShkZXYtPm9mZGV2Lm5vZGUsICJpYm0saGVhLWhhbmRsZSIsCiAJCQkJCSAgICBOVUxMKTsKLQlpZiAoIWFkYXB0ZXJfaGFuZGxlKSB7CisJaWYgKGFkYXB0ZXJfaGFuZGxlKQorCQlhZGFwdGVyLT5oYW5kbGUgPSAqYWRhcHRlcl9oYW5kbGU7CisKKwlpZiAoIWFkYXB0ZXItPmhhbmRsZSkgewogCQlkZXZfZXJyKCZkZXYtPm9mZGV2LmRldiwgImZhaWxlZCBnZXR0aW5nIGhhbmRsZSBmb3IgYWRhcHRlciIKIAkJCSIgJyVzJ1xuIiwgZGV2LT5vZmRldi5ub2RlLT5mdWxsX25hbWUpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF9mcmVlX2FkOwogCX0KIAotCWFkYXB0ZXItPmhhbmRsZSA9ICphZGFwdGVyX2hhbmRsZTsKIAlhZGFwdGVyLT5wZCA9IEVIRUFfUERfSUQ7CiAKIAlkZXYtPm9mZGV2LmRldi5kcml2ZXJfZGF0YSA9IGFkYXB0ZXI7CkBAIC0yNTY4LDYgKzI1OTgsNyBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKGFkYXB0ZXItPmVoZWFfd3EpOwogCiAJaWJtZWJ1c19mcmVlX2lycShOVUxMLCBhZGFwdGVyLT5uZXEtPmF0dHIuaXN0MSwgYWRhcHRlcik7CisJdGFza2xldF9raWxsKCZhZGFwdGVyLT5uZXFfdGFza2xldCk7CiAKIAllaGVhX2Rlc3Ryb3lfZXEoYWRhcHRlci0+bmVxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmMKaW5kZXggMGNmYzJiYy4uMzc3MTZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcGh5cC5jCkBAIC05NCw2ICs5NCw3IEBACiB7CiAJbG9uZyByZXQ7CiAJaW50IGksIHNsZWVwX21zZWNzOworCXU4IGNiX2NhdDsKIAogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKIAkJcmV0ID0gcGxwYXJfaGNhbGw5KG9wY29kZSwgb3V0cywKQEAgLTEwNiw3ICsxMDcsMTMgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHJldCA8IEhfU1VDQ0VTUykKKwkJY2JfY2F0ID0gRUhFQV9CTUFTS19HRVQoSF9NRUhFQVBPUlRfQ0FULCBhcmcyKTsKKworCQlpZiAoKHJldCA8IEhfU1VDQ0VTUykgJiYgISgoKHJldCA9PSBIX0FVVEhPUklUWSkKKwkJICAgICYmIChvcGNvZGUgPT0gSF9NT0RJRllfSEVBX1BPUlQpKQorCQkgICAgJiYgKCgoY2JfY2F0ID09IEhfUE9SVF9DQjQpICYmICgoYXJnMyA9PSBIX1BPUlRfQ0I0X0pVTUJPKQorCQkgICAgfHwgKGFyZzMgPT0gSF9QT1JUX0NCNF9TUEVFRCkpKSB8fCAoKGNiX2NhdCA9PSBIX1BPUlRfQ0I3KQorCQkgICAgJiYgKGFyZzMgPT0gSF9QT1JUX0NCN19EVUNRUE4pKSkpKQogCQkJZWhlYV9lcnJvcigib3Bjb2RlPSVseCByZXQ9JWx4IgogCQkJCSAgICIgYXJnMT0lbHggYXJnMj0lbHggYXJnMz0lbHggYXJnND0lbHgiCiAJCQkJICAgIiBhcmc1PSVseCBhcmc2PSVseCBhcmc3PSVseCBhcmc4PSVseCIKQEAgLTEyMCw3ICsxMjcsNiBAQAogCQkJCSAgIG91dHNbMF0sIG91dHNbMV0sIG91dHNbMl0sIG91dHNbM10sCiAJCQkJICAgb3V0c1s0XSwgb3V0c1s1XSwgb3V0c1s2XSwgb3V0c1s3XSwKIAkJCQkgICBvdXRzWzhdKTsKLQogCQlyZXR1cm4gcmV0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCA0MzlmNDEzLi45M2YyYjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtMyw4ICszLDcgQEAKICAqCiAgKiBOb3RlOiBUaGlzIGRyaXZlciBpcyBhIGNsZWFucm9vbSByZWltcGxlbWVudGF0aW9uIGJhc2VkIG9uIHJldmVyc2UKICAqICAgICAgZW5naW5lZXJlZCBkb2N1bWVudGF0aW9uIHdyaXR0ZW4gYnkgQ2FybC1EYW5pZWwgSGFpbGZpbmdlcgotICogICAgICBhbmQgQW5kcmV3IGRlIFF1aW5jZXkuIEl0J3MgbmVpdGhlciBzdXBwb3J0ZWQgbm9yIGVuZG9yc2VkCi0gKiAgICAgIGJ5IE5WSURJQSBDb3JwLiBVc2UgYXQgeW91ciBvd24gcmlzay4KKyAqICAgICAgYW5kIEFuZHJldyBkZSBRdWluY2V5LgogICoKICAqIE5WSURJQSwgbkZvcmNlIGFuZCBvdGhlciBOVklESUEgbWFya3MgYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZAogICogdHJhZGVtYXJrcyBvZiBOVklESUEgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIG90aGVyCkBAIC0xNCw3ICsxMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQW5kcmV3IGRlIFF1aW5jZXkgKHdvbCBzdXBwb3J0KQogICogQ29weXJpZ2h0IChDKSAyMDA0IENhcmwtRGFuaWVsIEhhaWxmaW5nZXIgKGludmFsaWQgTUFDIGhhbmRsaW5nLCBpbnNhbmUKICAqCQlJUlEgcmF0ZSBmaXhlcywgYmlnZW5kaWFuIGZpeGVzLCBjbGVhbnVwcywgdmVyaWZpY2F0aW9uKQotICogQ29weXJpZ2h0IChjKSAyMDA0IE5WSURJQSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA0LDUsNiBOVklESUEgQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIzNSw2ICsyMzQsNyBAQAogI2RlZmluZSBOVlJFR19YTUlUQ1RMX0hPU1RfU0VNQV9NQVNLCTB4MDAwMGYwMDAKICNkZWZpbmUgTlZSRUdfWE1JVENUTF9IT1NUX1NFTUFfQUNRCTB4MDAwMGYwMDAKICNkZWZpbmUgTlZSRUdfWE1JVENUTF9IT1NUX0xPQURFRAkweDAwMDA0MDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfVFhfUEFUSF9FTgkweDAxMDAwMDAwCiAJTnZSZWdUcmFuc21pdHRlclN0YXR1cyA9IDB4MDg4LAogI2RlZmluZSBOVlJFR19YTUlUU1RBVF9CVVNZCTB4MDEKIApAQCAtMjUwLDYgKzI1MCw3IEBACiAjZGVmaW5lIE5WUkVHX09GRkxPQURfTk9STUFMCVJYX05JQ19CVUZTSVpFCiAJTnZSZWdSZWNlaXZlckNvbnRyb2wgPSAweDA5NCwKICNkZWZpbmUgTlZSRUdfUkNWQ1RMX1NUQVJUCTB4MDEKKyNkZWZpbmUgTlZSRUdfUkNWQ1RMX1JYX1BBVEhfRU4JMHgwMTAwMDAwMAogCU52UmVnUmVjZWl2ZXJTdGF0dXMgPSAweDk4LAogI2RlZmluZSBOVlJFR19SQ1ZTVEFUX0JVU1kJMHgwMQogCkBAIC0xMTcwLDE2ICsxMTcxLDIxIEBACiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXUzMiByeF9jdHJsID0gcmVhZGwoYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKTsKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3N0YXJ0X3J4XG4iLCBkZXYtPm5hbWUpOwogCS8qIEFscmVhZHkgcnVubmluZz8gU3RvcCBpdC4gKi8KLQlpZiAocmVhZGwoYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKSAmIE5WUkVHX1JDVkNUTF9TVEFSVCkgewotCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKTsKKwlpZiAoKHJlYWRsKGJhc2UgKyBOdlJlZ1JlY2VpdmVyQ29udHJvbCkgJiBOVlJFR19SQ1ZDVExfU1RBUlQpICYmICFucC0+bWFjX2luX3VzZSkgeworCQlyeF9jdHJsICY9IH5OVlJFR19SQ1ZDVExfU1RBUlQ7CisJCXdyaXRlbChyeF9jdHJsLCBiYXNlICsgTnZSZWdSZWNlaXZlckNvbnRyb2wpOwogCQlwY2lfcHVzaChiYXNlKTsKIAl9CiAJd3JpdGVsKG5wLT5saW5rc3BlZWQsIGJhc2UgKyBOdlJlZ0xpbmtTcGVlZCk7CiAJcGNpX3B1c2goYmFzZSk7Ci0Jd3JpdGVsKE5WUkVHX1JDVkNUTF9TVEFSVCwgYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKTsKKyAgICAgICAgcnhfY3RybCB8PSBOVlJFR19SQ1ZDVExfU1RBUlQ7CisgICAgICAgIGlmIChucC0+bWFjX2luX3VzZSkKKwkJcnhfY3RybCAmPSB+TlZSRUdfUkNWQ1RMX1JYX1BBVEhfRU47CisJd3JpdGVsKHJ4X2N0cmwsIGJhc2UgKyBOdlJlZ1JlY2VpdmVyQ29udHJvbCk7CiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RhcnRfcnggdG8gZHVwbGV4ICVkLCBzcGVlZCAweCUwOHguXG4iLAogCQkJCWRldi0+bmFtZSwgbnAtPmR1cGxleCwgbnAtPmxpbmtzcGVlZCk7CiAJcGNpX3B1c2goYmFzZSk7CkBAIC0xMTg3LDM5ICsxMTkzLDU5IEBACiAKIHN0YXRpYyB2b2lkIG52X3N0b3Bfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIHJ4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdSZWNlaXZlckNvbnRyb2wpOwogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RvcF9yeFxuIiwgZGV2LT5uYW1lKTsKLQl3cml0ZWwoMCwgYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKTsKKwlpZiAoIW5wLT5tYWNfaW5fdXNlKQorCQlyeF9jdHJsICY9IH5OVlJFR19SQ1ZDVExfU1RBUlQ7CisJZWxzZQorCQlyeF9jdHJsIHw9IE5WUkVHX1JDVkNUTF9SWF9QQVRIX0VOOworCXdyaXRlbChyeF9jdHJsLCBiYXNlICsgTnZSZWdSZWNlaXZlckNvbnRyb2wpOwogCXJlZ19kZWxheShkZXYsIE52UmVnUmVjZWl2ZXJTdGF0dXMsIE5WUkVHX1JDVlNUQVRfQlVTWSwgMCwKIAkJCU5WX1JYU1RPUF9ERUxBWTEsIE5WX1JYU1RPUF9ERUxBWTFNQVgsCiAJCQlLRVJOX0lORk8gIm52X3N0b3Bfcng6IFJlY2VpdmVyU3RhdHVzIHJlbWFpbmVkIGJ1c3kiKTsKIAogCXVkZWxheShOVl9SWFNUT1BfREVMQVkyKTsKLQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTGlua1NwZWVkKTsKKwlpZiAoIW5wLT5tYWNfaW5fdXNlKQorCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTGlua1NwZWVkKTsKIH0KIAogc3RhdGljIHZvaWQgbnZfc3RhcnRfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIHR4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOwogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RhcnRfdHhcbiIsIGRldi0+bmFtZSk7Ci0Jd3JpdGVsKE5WUkVHX1hNSVRDVExfU1RBUlQsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisJdHhfY3RybCB8PSBOVlJFR19YTUlUQ1RMX1NUQVJUOworCWlmIChucC0+bWFjX2luX3VzZSkKKwkJdHhfY3RybCAmPSB+TlZSRUdfWE1JVENUTF9UWF9QQVRIX0VOOworCXdyaXRlbCh0eF9jdHJsLCBiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOwogCXBjaV9wdXNoKGJhc2UpOwogfQogCiBzdGF0aWMgdm9pZCBudl9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXUzMiB0eF9jdHJsID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3N0b3BfdHhcbiIsIGRldi0+bmFtZSk7Ci0Jd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisJaWYgKCFucC0+bWFjX2luX3VzZSkKKwkJdHhfY3RybCAmPSB+TlZSRUdfWE1JVENUTF9TVEFSVDsKKwllbHNlCisJCXR4X2N0cmwgfD0gTlZSRUdfWE1JVENUTF9UWF9QQVRIX0VOOworCXdyaXRlbCh0eF9jdHJsLCBiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOwogCXJlZ19kZWxheShkZXYsIE52UmVnVHJhbnNtaXR0ZXJTdGF0dXMsIE5WUkVHX1hNSVRTVEFUX0JVU1ksIDAsCiAJCQlOVl9UWFNUT1BfREVMQVkxLCBOVl9UWFNUT1BfREVMQVkxTUFYLAogCQkJS0VSTl9JTkZPICJudl9zdG9wX3R4OiBUcmFuc21pdHRlclN0YXR1cyByZW1haW5lZCBidXN5Iik7CiAKIAl1ZGVsYXkoTlZfVFhTVE9QX0RFTEFZMik7Ci0Jd3JpdGVsKHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0UG9sbCkgJiBOVlJFR19UUkFOU01JVFBPTExfTUFDX0FERFJfUkVWLCBiYXNlICsgTnZSZWdUcmFuc21pdFBvbGwpOworCWlmICghbnAtPm1hY19pbl91c2UpCisJCXdyaXRlbChyZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdFBvbGwpICYgTlZSRUdfVFJBTlNNSVRQT0xMX01BQ19BRERSX1JFViwKKwkJICAgICAgIGJhc2UgKyBOdlJlZ1RyYW5zbWl0UG9sbCk7CiB9CiAKIHN0YXRpYyB2b2lkIG52X3R4cnhfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI1NzYsMTQgKzI2MDIsMTUgQEAKIAlpbnQgcGt0cywgbGltaXQgPSBtaW4oKmJ1ZGdldCwgZGV2LT5xdW90YSk7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwa3RzID0gbnZfcnhfcHJvY2VzcyhkZXYsIGxpbWl0KTsKIAogCWlmIChudl9hbGxvY19yeChkZXYpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJCWlmICghbnAtPmluX3NodXRkb3duKQogCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJfQogCiAJaWYgKHBrdHMgPCBsaW1pdCkgewpAQCAtMjU5MSwxMyArMjYxOCwxNSBAQAogCQluZXRpZl9yeF9jb21wbGV0ZShkZXYpOwogCiAJCS8qIHJlLWVuYWJsZSByZWNlaXZlIGludGVycnVwdHMgKi8KLQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwogCQlucC0+aXJxbWFzayB8PSBOVlJFR19JUlFfUlhfQUxMOwogCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCiAJCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnSXJxTWFzayk7CiAJCWVsc2UKIAkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCS8qIHVzZWQgdXAgb3VyIHF1YW50dW0sIHNvIHJlc2NoZWR1bGUgKi8KQEAgLTQxNDYsMjAgKzQxNzUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBJbmRpY2F0ZSB0byBtZ210IHVuaXQgd2hldGhlciBkcml2ZXIgaXMgbG9hZGVkIG9yIG5vdCAqLwotc3RhdGljIHZvaWQgbnZfbWdtdF9kcml2ZXJfbG9hZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsb2FkZWQpCi17Ci0JdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQl1MzIgdHhfY3RybDsKLQotCXR4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOwotCWlmIChsb2FkZWQpCi0JCXR4X2N0cmwgfD0gTlZSRUdfWE1JVENUTF9IT1NUX0xPQURFRDsKLQllbHNlCi0JCXR4X2N0cmwgJj0gfk5WUkVHX1hNSVRDVExfSE9TVF9MT0FERUQ7Ci0Jd3JpdGVsKHR4X2N0cmwsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7Ci19Ci0KIHN0YXRpYyBpbnQgbnZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC00NjU3LDMzICs0NjcyLDI0IEBACiAJd3JpdGVsKE5WUkVHX01JSVNUQVRfTUFTSywgYmFzZSArIE52UmVnTUlJU3RhdHVzKTsKIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01HTVRfVU5JVCkgewotCQl3cml0ZWwoMHgxLCBiYXNlICsgMHgyMDQpOyBwY2lfcHVzaChiYXNlKTsKLQkJbXNsZWVwKDUwMCk7CiAJCS8qIG1hbmFnZW1lbnQgdW5pdCBydW5uaW5nIG9uIHRoZSBtYWM/ICovCi0JCW5wLT5tYWNfaW5fdXNlID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfTUdNVF9TVDsKLQkJaWYgKG5wLT5tYWNfaW5fdXNlKSB7Ci0JCQl1MzIgbWdtdF9zeW5jOwotCQkJLyogbWFuYWdlbWVudCB1bml0IHNldHVwIHRoZSBwaHkgYWxyZWFkeT8gKi8KLQkJCW1nbXRfc3luYyA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX1NZTkNfTUFTSzsKLQkJCWlmIChtZ210X3N5bmMgPT0gTlZSRUdfWE1JVENUTF9TWU5DX05PVF9SRUFEWSkgewotCQkJCWlmICghbnZfbWdtdF9hY3F1aXJlX3NlbWEoZGV2KSkgewotCQkJCQlmb3IgKGkgPSAwOyBpIDwgNTAwMDsgaSsrKSB7Ci0JCQkJCQltc2xlZXAoMSk7Ci0JCQkJCQltZ210X3N5bmMgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9TWU5DX01BU0s7Ci0JCQkJCQlpZiAobWdtdF9zeW5jID09IE5WUkVHX1hNSVRDVExfU1lOQ19OT1RfUkVBRFkpCi0JCQkJCQkJY29udGludWU7Ci0JCQkJCQlpZiAobWdtdF9zeW5jID09IE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5JVCkKLQkJCQkJCQlwaHlpbml0aWFsaXplZCA9IDE7Ci0JCQkJCQlicmVhazsKKwkJaWYgKHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX1NZTkNfUEhZX0lOSVQpIHsKKwkJCW5wLT5tYWNfaW5fdXNlID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfTUdNVF9TVDsKKwkJCWRwcmludGsoS0VSTl9JTkZPICIlczogbWdtdCB1bml0IGlzIHJ1bm5pbmcuIG1hYyBpbiB1c2UgJXguXG4iLCBwY2lfbmFtZShwY2lfZGV2KSwgbnAtPm1hY19pbl91c2UpOworCQkJZm9yIChpID0gMDsgaSA8IDUwMDA7IGkrKykgeworCQkJCW1zbGVlcCgxKTsKKwkJCQlpZiAobnZfbWdtdF9hY3F1aXJlX3NlbWEoZGV2KSkgeworCQkJCQkvKiBtYW5hZ2VtZW50IHVuaXQgc2V0dXAgdGhlIHBoeSBhbHJlYWR5PyAqLworCQkJCQlpZiAoKHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX1NZTkNfTUFTSykgPT0KKwkJCQkJICAgIE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5JVCkgeworCQkJCQkJLyogcGh5IGlzIGluaXRlZCBieSBtZ210IHVuaXQgKi8KKwkJCQkJCXBoeWluaXRpYWxpemVkID0gMTsKKwkJCQkJCWRwcmludGsoS0VSTl9JTkZPICIlczogUGh5IGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkgbWdtdCB1bml0LlxuIiwgcGNpX25hbWUocGNpX2RldikpOworCQkJCQl9IGVsc2UgeworCQkJCQkJLyogd2UgbmVlZCB0byBpbml0IHRoZSBwaHkgKi8KIAkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIHdlIG5lZWQgdG8gaW5pdCB0aGUgcGh5ICovCisJCQkJCWJyZWFrOwogCQkJCX0KLQkJCX0gZWxzZSBpZiAobWdtdF9zeW5jID09IE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5JVCkgewotCQkJCS8qIHBoeSBpcyBpbml0ZWQgYnkgU01VICovCi0JCQkJcGh5aW5pdGlhbGl6ZWQgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQkvKiB3ZSBuZWVkIHRvIGluaXQgdGhlIHBoeSAqLwogCQkJfQogCQl9CiAJfQpAQCAtNDcyMiwxMCArNDcyOCwxMiBAQAogCWlmICghcGh5aW5pdGlhbGl6ZWQpIHsKIAkJLyogcmVzZXQgaXQgKi8KIAkJcGh5X2luaXQoZGV2KTsKLQl9Ci0KLQlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NR01UX1VOSVQpIHsKLQkJbnZfbWdtdF9kcml2ZXJfbG9hZGVkKGRldiwgMSk7CisJfSBlbHNlIHsKKwkJLyogc2VlIGlmIGl0IGlzIGEgZ2lnYWJpdCBwaHkgKi8KKwkJdTMyIG1paV9zdGF0dXMgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNU1IsIE1JSV9SRUFEKTsKKwkJaWYgKG1paV9zdGF0dXMgJiBQSFlfR0lHQUJJVCkgeworCQkJbnAtPmdpZ2FiaXQgPSBQSFlfR0lHQUJJVDsKKwkJfQogCX0KIAogCS8qIHNldCBkZWZhdWx0IGxpbmsgc3BlZWQgc2V0dGluZ3MgKi8KQEAgLTQ3NDcsOCArNDc1NSw2IEBACiBvdXRfZXJyb3I6CiAJaWYgKHBoeXN0YXRlX29yaWcpCiAJCXdyaXRlbChwaHlzdGF0ZXxOVlJFR19BREFQVENUTF9SVU5OSU5HLCBiYXNlICsgTnZSZWdBZGFwdGVyQ29udHJvbCk7Ci0JaWYgKG5wLT5tYWNfaW5fdXNlKQotCQludl9tZ210X2RyaXZlcl9sb2FkZWQoZGV2LCAwKTsKIAlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CiBvdXRfZnJlZXJpbmc6CiAJZnJlZV9yaW5ncyhkZXYpOwpAQCAtNDc3OCw5ICs0Nzg0LDYgQEAKIAl3cml0ZWwobnAtPm9yaWdfbWFjWzBdLCBiYXNlICsgTnZSZWdNYWNBZGRyQSk7CiAJd3JpdGVsKG5wLT5vcmlnX21hY1sxXSwgYmFzZSArIE52UmVnTWFjQWRkckIpOwogCi0JaWYgKG5wLT5tYWNfaW5fdXNlKQotCQludl9tZ210X2RyaXZlcl9sb2FkZWQoZGV2LCAwKTsKLQogCS8qIGZyZWUgYWxsIHN0cnVjdHVyZXMgKi8KIAlmcmVlX3JpbmdzKGRldik7CiAJaW91bm1hcChnZXRfaHdiYXNlKGRldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwppbmRleCBjMmM1ZmQ0Li5mZjY4Mzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwpAQCAtMTA0LDkgKzEwNCw5IEBACiAJZmVwLT5pbnRlcnJ1cHQgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCJpbnRlcnJ1cHQiKTsKIAlpZiAoZmVwLT5pbnRlcnJ1cHQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkKKwogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicmVncyIpOwotCWZlcC0+ZmVjLmZlY3AgPSh2b2lkKilyLT5zdGFydDsKKwlmZXAtPmZlYy5mZWNwID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKIAogCWlmKGZlcC0+ZmVjLmZlY3AgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMTksMTEgKzMxOSwxNCBAQAogCSAqIENsZWFyIGFueSBvdXRzdGFuZGluZyBpbnRlcnJ1cHQuCiAJICovCiAJRlcoZmVjcCwgaWV2ZW50LCAweGZmYzApOworI2lmbmRlZiBDT05GSUdfUFBDX01FUkdFCiAJRlcoZmVjcCwgaXZlYywgKGZlcC0+aW50ZXJydXB0IC8gMikgPDwgMjkpOwotCQorI2Vsc2UKKwlGVyhmZWNwLCBpdmVjLCAodmlycV90b19odyhmZXAtPmludGVycnVwdCkgLyAyKSA8PCAyOSk7CisjZW5kaWYKIAogCS8qCi0JICogYWRqdXN0IHRvIHNwZWVkIChvbmx5IGZvciBEVUVUICYgUk1JSSkgCisJICogYWRqdXN0IHRvIHNwZWVkIChvbmx5IGZvciBEVUVUICYgUk1JSSkKIAkgKi8KICNpZmRlZiBDT05GSUdfRFVFVAogCWlmIChmcGktPnVzZV9ybWlpKSB7CkBAIC00MTgsNiArNDIxLDcgQEAKIAogc3RhdGljIHZvaWQgcHJlX3JlcXVlc3RfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpcnEpCiB7CisjaWZuZGVmIENPTkZJR19QUENfTUVSR0UKIAlpbW1hcF90ICppbW1hcCA9IGZzX2VuZXRfaW1tYXA7CiAJdTMyIHNpZWw7CiAKQEAgLTQzMSw2ICs0MzUsNyBAQAogCQkJc2llbCAmPSB+KDB4ODAwMDAwMDAgPj4gKGlycSAmIH4xKSk7CiAJCW91dF9iZTMyKCZpbW1hcC0+aW1fc2l1X2NvbmYuc2Nfc2llbCwgc2llbCk7CiAJfQorI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHBvc3RfZnJlZV9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlycSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKaW5kZXggOTVlYzU4Ny4uYWZkN2ZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKQEAgLTEyMSwxMyArMTIxLDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJyZWdzIik7Ci0JZmVwLT5zY2Muc2NjcCA9ICh2b2lkICopci0+c3RhcnQ7CisJZmVwLT5zY2Muc2NjcCA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CiAKIAlpZiAoZmVwLT5zY2Muc2NjcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicHJhbSIpOwotCWZlcC0+c2NjLmVwID0gKHZvaWQgKilyLT5zdGFydDsKKwlmZXAtPnNjYy5lcCA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CiAKIAlpZiAoZmVwLT5zY2MuZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTcsNiArMzk3LDcgQEAKIAogc3RhdGljIHZvaWQgcHJlX3JlcXVlc3RfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpcnEpCiB7CisjaWZuZGVmIENPTkZJR19QUENfTUVSR0UKIAlpbW1hcF90ICppbW1hcCA9IGZzX2VuZXRfaW1tYXA7CiAJdTMyIHNpZWw7CiAKQEAgLTQxMCw2ICs0MTEsNyBAQAogCQkJc2llbCAmPSB+KDB4ODAwMDAwMDAgPj4gKGlycSAmIH4xKSk7CiAJCW91dF9iZTMyKCZpbW1hcC0+aW1fc2l1X2NvbmYuc2Nfc2llbCwgc2llbCk7CiAJfQorI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHBvc3RfZnJlZV9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlycSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCmluZGV4IDkyNDIwZjAuLjc2MGQwNGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKQEAgLTMyNSwxMSArMzI1LDYgQEAKIAogc3RhdGljIHZvaWQgc3Bfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdGF0aWMgY2hhciBheDI1X2JjYXN0W0FYMjVfQUREUl9MRU5dID0KLQkJeydRJzw8MSwnUyc8PDEsJ1QnPDwxLCcgJzw8MSwnICc8PDEsJyAnPDwxLCcwJzw8MX07Ci0Jc3RhdGljIGNoYXIgYXgyNV90ZXN0W0FYMjVfQUREUl9MRU5dID0KLQkJeydMJzw8MSwnSSc8PDEsJ04nPDwxLCdVJzw8MSwnWCc8PDEsJyAnPDwxLCcxJzw8MX07Ci0KIAkvKiBGaW5pc2ggc2V0dGluZyB1cCB0aGUgREVWSUNFIGluZm8uICovCiAJZGV2LT5tdHUJCT0gU0lYUF9NVFU7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBzcF94bWl0OwpAQCAtMzQ3LDggKzM0Miw4IEBACiAJZGV2LT50eF90aW1lb3V0CQk9IE5VTEw7CiAKIAkvKiBPbmx5IGFjdGl2YXRlZCBpbiBBWC4yNSBtb2RlICovCi0JbWVtY3B5KGRldi0+YnJvYWRjYXN0LCBheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYXgyNV90ZXN0LCBBWDI1X0FERFJfTEVOKTsKKwltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgJmF4MjVfZGVmYWRkciwgQVgyNV9BRERSX0xFTik7CiAKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9LY29uZmlnCmluZGV4IDg5NmFhMDIuLmZlYjBhZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vS2NvbmZpZwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIGNvbmZpZyBCQVlDT01fU0VSX0ZEWAogCXRyaXN0YXRlICJCQVlDT00gc2VyMTIgZnVsbGR1cGxleCBkcml2ZXIgZm9yIEFYLjI1IgotCWRlcGVuZHMgb24gQVgyNQorCWRlcGVuZHMgb24gQVgyNSAmJiAhUzM5MAogCXNlbGVjdCBDUkNfQ0NJVFQKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIG9uZSBvZiB0d28gZHJpdmVycyBmb3IgQmF5Y29tIHN0eWxlIHNpbXBsZSBhbWF0ZXVyIHJhZGlvCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogY29uZmlnIEJBWUNPTV9TRVJfSERYCiAJdHJpc3RhdGUgIkJBWUNPTSBzZXIxMiBoYWxmZHVwbGV4IGRyaXZlciBmb3IgQVguMjUiCi0JZGVwZW5kcyBvbiBBWDI1CisJZGVwZW5kcyBvbiBBWDI1ICYmICFTMzkwCiAJc2VsZWN0IENSQ19DQ0lUVAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgb25lIG9mIHR3byBkcml2ZXJzIGZvciBCYXljb20gc3R5bGUgc2ltcGxlIGFtYXRldXIgcmFkaW8KQEAgLTE4MSw3ICsxODEsNyBAQAogCiBjb25maWcgWUFNCiAJdHJpc3RhdGUgIllBTSBkcml2ZXIgZm9yIEFYLjI1IgotCWRlcGVuZHMgb24gQVgyNQorCWRlcGVuZHMgb24gQVgyNSAmJiAhUzM5MAogCWhlbHAKIAkgIFRoZSBZQU0gaXMgYSBtb2RlbSBmb3IgcGFja2V0IHJhZGlvIHdoaWNoIGNvbm5lY3RzIHRvIHRoZSBzZXJpYWwKIAkgIHBvcnQgYW5kIGluY2x1ZGVzIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBvZiBhIFRlcm1pbmFsIE5vZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwppbmRleCAzYzMzZDZmLi4xNTNiNmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCkBAIC0xMTQxLDEyICsxMTQxLDYgQEAKICAqLwogc3RhdGljIHZvaWQgYmF5Y29tX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RhdGljIGNoYXIgYXgyNV9iY2FzdFtBWDI1X0FERFJfTEVOXSA9IHsKLQkJJ1EnIDw8IDEsICdTJyA8PCAxLCAnVCcgPDwgMSwgJyAnIDw8IDEsICcgJyA8PCAxLCAnICcgPDwgMSwgJzAnIDw8IDEKLQl9OwotCXN0YXRpYyBjaGFyIGF4MjVfbm9jYWxsW0FYMjVfQUREUl9MRU5dID0gewotCQknTCcgPDwgMSwgJ0knIDw8IDEsICdOJyA8PCAxLCAnVScgPDwgMSwgJ1gnIDw8IDEsICcgJyA8PCAxLCAnMScgPDwgMQotCX07CiAJY29uc3Qgc3RydWN0IGhkbGNkcnZfY2hhbm5lbF9wYXJhbXMgZGZsdF9jaF9wYXJhbXMgPSB7IAogCQkyMCwgMiwgMTAsIDQwLCAwIAogCX07CkBAIC0xMTgyLDggKzExNzYsOCBAQAogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQVgyNV9NQVhfSEVBREVSX0xFTiArIEFYMjVfQlBRX0hFQURFUl9MRU47CiAJZGV2LT5tdHUgPSBBWDI1X0RFRl9QQUNMRU47ICAgICAgICAvKiBldGhfbXR1IGlzIHRoZSBkZWZhdWx0ICovCiAJZGV2LT5hZGRyX2xlbiA9IEFYMjVfQUREUl9MRU47ICAgICAvKiBzaXplb2YgYW4gYXguMjUgYWRkcmVzcyAqLwotCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgYXgyNV9iY2FzdCwgQVgyNV9BRERSX0xFTik7Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGF4MjVfbm9jYWxsLCBBWDI1X0FERFJfTEVOKTsKKwltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgJm51bGxfYXgyNV9hZGRyZXNzLCBBWDI1X0FERFJfTEVOKTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDE2OwogCiAJLyogTmV3IHN0eWxlIGZsYWdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwppbmRleCA4ODlmMzM4Li41Yjc4OGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKQEAgLTg4LDExICs4OCw2IEBACiAKIHN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkFYLjI1OiBicHFldGhlciBkcml2ZXIgdmVyc2lvbiAwMDRcbiI7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGF4MjVfYmNhc3RbQVgyNV9BRERSX0xFTl0gPQotCXsnUScgPDwgMSwgJ1MnIDw8IDEsICdUJyA8PCAxLCAnICcgPDwgMSwgJyAnIDw8IDEsICcgJyA8PCAxLCAnMCcgPDwgMX07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBheDI1X2RlZmFkZHJbQVgyNV9BRERSX0xFTl0gPQotCXsnTCcgPDwgMSwgJ0knIDw8IDEsICdOJyA8PCAxLCAnVScgPDwgMSwgJ1gnIDw8IDEsICcgJyA8PCAxLCAnMScgPDwgMX07Ci0KIHN0YXRpYyBjaGFyIGJjYXN0X2FkZHJbNl09ezB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGfTsKIAogc3RhdGljIGNoYXIgYnBxX2V0aF9hZGRyWzZdOwpAQCAtNDg3LDggKzQ4Miw4IEBACiAJZGV2LT5kb19pb2N0bAkgICAgID0gYnBxX2lvY3RsOwogCWRldi0+ZGVzdHJ1Y3RvcgkgICAgID0gZnJlZV9uZXRkZXY7CiAKLQltZW1jcHkoZGV2LT5icm9hZGNhc3QsIGF4MjVfYmNhc3QsIEFYMjVfQUREUl9MRU4pOwotCW1lbWNweShkZXYtPmRldl9hZGRyLCAgYXgyNV9kZWZhZGRyLCBBWDI1X0FERFJfTEVOKTsKKwltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgICZheDI1X2RlZmFkZHIsIEFYMjVfQUREUl9MRU4pOwogCiAJZGV2LT5mbGFncyAgICAgID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYwppbmRleCBlNmU3MjFhLi4wZmJiNDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYwpAQCAtMjY0LDEyICsyNjQsNiBAQAogCiAvKiBCZXdhcmUhIGh3W10gaXMgYWxzbyB1c2VkIGluIGNsZWFudXBfbW9kdWxlKCkuICovCiBzdGF0aWMgc3RydWN0IHNjY19oYXJkd2FyZSBod1tOVU1fVFlQRVNdIF9faW5pdGRhdGFfb3JfbW9kdWxlID0gSEFSRFdBUkU7Ci1zdGF0aWMgY2hhciBheDI1X2Jyb2FkY2FzdFs3XSBfX2luaXRkYXRhID0KLSAgICB7ICdRJyA8PCAxLCAnUycgPDwgMSwgJ1QnIDw8IDEsICcgJyA8PCAxLCAnICcgPDwgMSwgJyAnIDw8IDEsCi0nMCcgPDwgMSB9Owotc3RhdGljIGNoYXIgYXgyNV90ZXN0WzddIF9faW5pdGRhdGEgPQotICAgIHsgJ0wnIDw8IDEsICdJJyA8PCAxLCAnTicgPDwgMSwgJ1UnIDw8IDEsICdYJyA8PCAxLCAnICcgPDwgMSwKLScxJyA8PCAxIH07CiAKIAogLyogR2xvYmFsIHZhcmlhYmxlcyAqLwpAQCAtNDQzLDggKzQzNyw4IEBACiAJZGV2LT5tdHUgPSAxNTAwOwogCWRldi0+YWRkcl9sZW4gPSBBWDI1X0FERFJfTEVOOwogCWRldi0+dHhfcXVldWVfbGVuID0gNjQ7Ci0JbWVtY3B5KGRldi0+YnJvYWRjYXN0LCBheDI1X2Jyb2FkY2FzdCwgQVgyNV9BRERSX0xFTik7Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGF4MjVfdGVzdCwgQVgyNV9BRERSX0xFTik7CisJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmYXgyNV9iY2FzdCwgQVgyNV9BRERSX0xFTik7CisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZheDI1X2RlZmFkZHIsIEFYMjVfQUREUl9MRU4pOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9hZGFwdGVyKGludCBjYXJkX2Jhc2UsIGludCB0eXBlLCBpbnQgbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwppbmRleCBkYWNjNzY4Li40NTI4NzNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCkBAIC02MywxOCArNjMsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyoKLSAqIFRoZSBuYW1lIG9mIHRoZSBjYXJkLiBJcyB1c2VkIGZvciBtZXNzYWdlcyBhbmQgaW4gdGhlIHJlcXVlc3RzIGZvcgotICogaW8gcmVnaW9ucywgaXJxcyBhbmQgZG1hIGNoYW5uZWxzCi0gKi8KLQotc3RhdGljIGNoYXIgYXgyNV9iY2FzdFtBWDI1X0FERFJfTEVOXSA9Ci17J1EnIDw8IDEsICdTJyA8PCAxLCAnVCcgPDwgMSwgJyAnIDw8IDEsICcgJyA8PCAxLCAnICcgPDwgMSwgJzAnIDw8IDF9Owotc3RhdGljIGNoYXIgYXgyNV9ub2NhbGxbQVgyNV9BRERSX0xFTl0gPQoteydMJyA8PCAxLCAnSScgPDwgMSwgJ04nIDw8IDEsICdVJyA8PCAxLCAnWCcgPDwgMSwgJyAnIDw8IDEsICcxJyA8PCAxfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KICNkZWZpbmUgS0lTU19WRVJCT1NFCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNzA5LDggKzY5Nyw4IEBACiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBBWDI1X01BWF9IRUFERVJfTEVOICsgQVgyNV9CUFFfSEVBREVSX0xFTjsKIAlkZXYtPm10dSA9IEFYMjVfREVGX1BBQ0xFTjsgICAgICAgIC8qIGV0aF9tdHUgaXMgdGhlIGRlZmF1bHQgKi8KIAlkZXYtPmFkZHJfbGVuID0gQVgyNV9BRERSX0xFTjsgICAgIC8qIHNpemVvZiBhbiBheC4yNSBhZGRyZXNzICovCi0JbWVtY3B5KGRldi0+YnJvYWRjYXN0LCBheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYXgyNV9ub2NhbGwsIEFYMjVfQUREUl9MRU4pOworCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgJmF4MjVfYmNhc3QsIEFYMjVfQUREUl9MRU4pOworCW1lbWNweShkZXYtPmRldl9hZGRyLCAmYXgyNV9kZWZhZGRyLCBBWDI1X0FERFJfTEVOKTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDE2OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwppbmRleCBkODcxNWIyLi5kMDhmYmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKQEAgLTY3MiwxMSArNjcyLDYgQEAKIAogc3RhdGljIHZvaWQgYXhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdGF0aWMgY2hhciBheDI1X2JjYXN0W0FYMjVfQUREUl9MRU5dID0KLQkJeydRJzw8MSwnUyc8PDEsJ1QnPDwxLCcgJzw8MSwnICc8PDEsJyAnPDwxLCcwJzw8MX07Ci0Jc3RhdGljIGNoYXIgYXgyNV90ZXN0W0FYMjVfQUREUl9MRU5dID0KLQkJeydMJzw8MSwnSSc8PDEsJ04nPDwxLCdVJzw8MSwnWCc8PDEsJyAnPDwxLCcxJzw8MX07Ci0KIAkvKiBGaW5pc2ggc2V0dGluZyB1cCB0aGUgREVWSUNFIGluZm8uICovCiAJZGV2LT5tdHUgICAgICAgICAgICAgPSBBWF9NVFU7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBheF94bWl0OwpAQCAtNjkxLDggKzY4Niw4IEBACiAJZGV2LT5oYXJkX2hlYWRlciAgICAgPSBheF9oZWFkZXI7CiAJZGV2LT5yZWJ1aWxkX2hlYWRlciAgPSBheF9yZWJ1aWxkX2hlYWRlcjsKIAotCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgYXgyNV9iY2FzdCwgQVgyNV9BRERSX0xFTik7Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsICBheDI1X3Rlc3QsICBBWDI1X0FERFJfTEVOKTsKKwltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgICZheDI1X2RlZmFkZHIsICBBWDI1X0FERFJfTEVOKTsKIAogCWRldi0+ZmxhZ3MgICAgICA9IElGRl9CUk9BRENBU1QgfCBJRkZfTVVMVElDQVNUOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYwppbmRleCBlYzliNmQ5Li4yY2UwNDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYwpAQCAtMTU0MCwxMSArMTU0MCw2IEBACiAvKiAqCQkJICAgIE5ldHdvcmsgZHJpdmVyIG1ldGhvZHMJCSAgICAgICogKi8KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGF4MjVfYmNhc3RbQVgyNV9BRERSX0xFTl0gPQoteydRJyA8PCAxLCAnUycgPDwgMSwgJ1QnIDw8IDEsICcgJyA8PCAxLCAnICcgPDwgMSwgJyAnIDw8IDEsICcwJyA8PCAxfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGF4MjVfbm9jYWxsW0FYMjVfQUREUl9MRU5dID0KLXsnTCcgPDwgMSwgJ0knIDw8IDEsICdOJyA8PCAxLCAnVScgPDwgMSwgJ1gnIDw8IDEsICcgJyA8PCAxLCAnMScgPDwgMX07Ci0KIC8qIC0tLS0+IEluaXRpYWxpemUgZGV2aWNlIDwtLS0tLSAqLwogCiBzdGF0aWMgdm9pZCBzY2NfbmV0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xNTYyLDggKzE1NTcsOCBAQAogCWRldi0+ZG9faW9jdGwgICAgICAgID0gc2NjX25ldF9pb2N0bDsKIAlkZXYtPnR4X3RpbWVvdXQgICAgICA9IE5VTEw7CiAKLQltZW1jcHkoZGV2LT5icm9hZGNhc3QsIGF4MjVfYmNhc3QsICBBWDI1X0FERFJfTEVOKTsKLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgIGF4MjVfbm9jYWxsLCBBWDI1X0FERFJfTEVOKTsKKwltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCAgQVgyNV9BRERSX0xFTik7CisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICAmYXgyNV9kZWZhZGRyLCBBWDI1X0FERFJfTEVOKTsKICAKIAlkZXYtPmZsYWdzICAgICAgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCmluZGV4IDNjNDQ1NWIuLjZkNzRmMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jCkBAIC0xNTYsMTEgKzE1Niw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgeWFtX21jcyAqeWFtX2RhdGE7CiAKLXN0YXRpYyBjaGFyIGF4MjVfYmNhc3RbN10gPQoteydRJyA8PCAxLCAnUycgPDwgMSwgJ1QnIDw8IDEsICcgJyA8PCAxLCAnICcgPDwgMSwgJyAnIDw8IDEsICcwJyA8PCAxfTsKLXN0YXRpYyBjaGFyIGF4MjVfdGVzdFs3XSA9Ci17J0wnIDw8IDEsICdJJyA8PCAxLCAnTicgPDwgMSwgJ1UnIDw8IDEsICdYJyA8PCAxLCAnICcgPDwgMSwgJzEnIDw8IDF9OwotCiBzdGF0aWMgREVGSU5FX1RJTUVSKHlhbV90aW1lciwgTlVMTCwgMCwgMCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTExNSw4ICsxMTEwLDggQEAKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IEFYMjVfTUFYX0hFQURFUl9MRU47CiAJZGV2LT5tdHUgPSBBWDI1X01UVTsKIAlkZXYtPmFkZHJfbGVuID0gQVgyNV9BRERSX0xFTjsKLQltZW1jcHkoZGV2LT5icm9hZGNhc3QsIGF4MjVfYmNhc3QsIEFYMjVfQUREUl9MRU4pOwotCW1lbWNweShkZXYtPmRldl9hZGRyLCBheDI1X3Rlc3QsIEFYMjVfQUREUl9MRU4pOworCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgJmF4MjVfYmNhc3QsIEFYMjVfQUREUl9MRU4pOworCW1lbWNweShkZXYtPmRldl9hZGRyLCAmYXgyNV9kZWZhZGRyLCBBWDI1X0FERFJfTEVOKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgeWFtX2luaXRfZHJpdmVyKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocGxhbmNlLmMgYi9kcml2ZXJzL25ldC9ocGxhbmNlLmMKaW5kZXggOWM2NDNmMi4uYzk5MWNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHBsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2hwbGFuY2UuYwpAQCAtNzcsNiArNzcsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IGVyciA9IC1FTk9NRU07CisJaW50IGk7CiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGhwbGFuY2VfcHJpdmF0ZSkpOwogCWlmICghZGV2KQpAQCAtOTMsNiArOTQsMTUgQEAKIAkJZ290byBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOwogCiAJZGlvX3NldF9kcnZkYXRhKGQsIGRldik7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXM7IHNlbGVjdCBjb2RlICVkLCBhZGRyICUyLjJ4IiwgZGV2LT5uYW1lLCBkLT5uYW1lLCBkLT5zY29kZSwgZGV2LT5kZXZfYWRkclswXSk7CisKKwlmb3IgKGk9MTsgaTw2OyBpKyspIHsKKwkJcHJpbnRrKCI6JTIuMngiLCBkZXYtPmRldl9hZGRyW2ldKTsKKwl9CisKKwlwcmludGsoIiwgaXJxICVkXG4iLCBkLT5pcGwpOworCiAJcmV0dXJuIDA7CiAKICBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOgpAQCAtMTE5LDggKzEyOSw2IEBACiAgICAgICAgIHN0cnVjdCBocGxhbmNlX3ByaXZhdGUgKmxwOwogICAgICAgICBpbnQgaTsKIAotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXM7IHNlbGVjdCBjb2RlICVkLCBhZGRyIiwgZGV2LT5uYW1lLCBkLT5uYW1lLCBkLT5zY29kZSk7Ci0KICAgICAgICAgLyogcmVzZXQgdGhlIGJvYXJkICovCiAgICAgICAgIG91dF84KHZhK0RJT19JRE9GRiwgMHhmZik7CiAgICAgICAgIHVkZWxheSgxMDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFyaWJhISBhcmliYSEgdWRlbGF5ISB1ZGVsYXkhICovCkBAIC0xNDMsNyArMTUxLDYgQEAKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBkZXYtPmRldl9hZGRyW2ldID0gKChpbl84KHZhICsgSFBMQU5DRV9OVlJBTU9GRiArIGkqNCArIDEpICYgMHhGKSA8PCA0KQogICAgICAgICAgICAgICAgICAgICAgICAgfCAoaW5fOCh2YSArIEhQTEFOQ0VfTlZSQU1PRkYgKyBpKjQgKyAzKSAmIDB4Rik7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCIlYyUyLjJ4IiwgaSA9PSAwID8gJyAnIDogJzonLCBkZXYtPmRldl9hZGRyW2ldKTsKICAgICAgICAgfQogCiAgICAgICAgIGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE2MCw3ICsxNjcsNiBAQAogICAgICAgICBscC0+bGFuY2UubGFuY2VfbG9nX3R4X2J1ZnMgPSBMQU5DRV9MT0dfVFhfQlVGRkVSUzsKICAgICAgICAgbHAtPmxhbmNlLnJ4X3JpbmdfbW9kX21hc2sgPSBSWF9SSU5HX01PRF9NQVNLOwogICAgICAgICBscC0+bGFuY2UudHhfcmluZ19tb2RfbWFzayA9IFRYX1JJTkdfTU9EX01BU0s7Ci0JcHJpbnRrKCIsIGlycSAlZFxuIiwgbHAtPmxhbmNlLmlycSk7CiB9CiAKIC8qIFRoaXMgaXMgZGlzZ3VzdGluZy4gV2UgaGF2ZSB0byBjaGVjayB0aGUgRElPIHN0YXR1cyByZWdpc3RlciBmb3IgYWNrIGV2ZXJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19waHkuYyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3BoeS5jCmluZGV4IDRhOTcwMjQuLjkwNzRmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3BoeS5jCkBAIC0zMDksNyArMzA5LDcgQEAKIHsKIAlzdHJ1Y3QgbWlpX3BoeV9kZWYgKmRlZjsKIAlpbnQgaTsKLQl1MzIgaWQ7CisJaW50IGlkOwogCiAJcGh5LT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCXBoeS0+YWR2ZXJ0aXNpbmcgPSAwOwpAQCAtMzI0LDYgKzMyNCw4IEBACiAKIAkvKiBSZWFkIElEIGFuZCBmaW5kIG1hdGNoaW5nIGVudHJ5ICovCiAJaWQgPSAocGh5X3JlYWQocGh5LCBNSUlfUEhZU0lEMSkgPDwgMTYpIHwgcGh5X3JlYWQocGh5LCBNSUlfUEhZU0lEMik7CisJaWYgKGlkIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAJZm9yIChpID0gMDsgKGRlZiA9IG1paV9waHlfdGFibGVbaV0pICE9IE5VTEw7IGkrKykKIAkJaWYgKChpZCAmIGRlZi0+cGh5X2lkX21hc2spID09IGRlZi0+cGh5X2lkKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZmIuYyBiL2RyaXZlcnMvbmV0L2lmYi5jCmluZGV4IGMyNmE0YjguLmNhMmIyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lmYi5jCisrKyBiL2RyaXZlcnMvbmV0L2lmYi5jCkBAIC0xNTQsOCArMTU0LDggQEAKIAlpbnQgcmV0ID0gMDsKIAl1MzIgZnJvbSA9IEdfVENfRlJPTShza2ItPnRjX3ZlcmQpOwogCi0Jc3RhdHMtPnR4X3BhY2tldHMrKzsKLQlzdGF0cy0+dHhfYnl0ZXMrPXNrYi0+bGVuOworCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJc3RhdHMtPnJ4X2J5dGVzKz1za2ItPmxlbjsKIAogCWlmICghZnJvbSB8fCAhc2tiLT5pbnB1dF9kZXYpIHsKIGRyb3BwZWQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKaW5kZXggMTY2MjBiZC4uMTFhZjBhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAKICAgaXJkYV9xb3NfYml0c190b192YWx1ZSAoJnNlbGYtPnFvcyk7CiAKICAgLyogQWxsb2NhdGUgdHdpY2UgdGhlIHNpemUgdG8gZ3VhcmFudGVlIGFsaWdubWVudCAqLwotICBzZWxmLT5yaW5nYnVmID0gKHZvaWQgKikga21hbGxvYyAoT0JPRV9SSU5HX0xFTiA8PCAxLCBHRlBfS0VSTkVMKTsKKyAgc2VsZi0+cmluZ2J1ZiA9IGttYWxsb2MoT0JPRV9SSU5HX0xFTiA8PCAxLCBHRlBfS0VSTkVMKTsKICAgaWYgKCFzZWxmLT5yaW5nYnVmKQogICAgIHsKICAgICAgIHByaW50ayAoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogY2FuJ3QgYWxsb2NhdGUgRE1BIGJ1ZmZlcnNcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCmluZGV4IDZlOTU2NDUuLjM0MGVlOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKQEAgLTQ0MSwyNSArNDQxLDEzIEBACiAJCWdvdG8gZHJvcDsKIAl9CiAKLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgcm9vbSBmb3IgSXJEQS1VU0IgaGVhZGVyLiBUaGUgYWN0dWFsCi0JICogYWxsb2NhdGlvbiB3aWxsIGJlIGRvbmUgbG93ZXIgaW4gc2tiX3B1c2goKS4KLQkgKiBBbHNvLCB3ZSBkb24ndCB1c2UgZGlyZWN0bHkgc2tiX2NvdygpLCBiZWNhdXNlIGl0IHJlcXVpcmUKLQkgKiBoZWFkcm9vbSA+PSAxNiwgd2hpY2ggZm9yY2UgdW5uZWNlc3NhcnkgY29waWVzIC0gSmVhbiBJSSAqLwotCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHNlbGYtPmhlYWRlcl9sZW5ndGgpIHsKLQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgSW5zdWZpY2llbnQgc2tiIGhlYWRyb29tLlxuIiwgX19GVU5DVElPTl9fKTsKLQkJaWYgKHNrYl9jb3coc2tiLCBzZWxmLT5oZWFkZXJfbGVuZ3RoKSkgewotCQkJSVJEQV9XQVJOSU5HKCIlcygpLCBmYWlsZWQgc2tiX2NvdygpICEhIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJCWdvdG8gZHJvcDsKLQkJfQotCX0KKwltZW1jcHkoc2VsZi0+dHhfYnVmZiArIHNlbGYtPmhlYWRlcl9sZW5ndGgsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCiAJLyogQ2hhbmdlIHNldHRpbmcgZm9yIG5leHQgZnJhbWUgKi8KLQogCWlmIChzZWxmLT5jYXBhYmlsaXR5ICYgSVVDX1NUSVI0MjFYKSB7CiAJCV9fdTggdHVybmFyb3VuZF90aW1lOwotCQlfX3U4KiBmcmFtZTsKKwkJX191OCogZnJhbWUgPSBzZWxmLT50eF9idWZmOwogCQl0dXJuYXJvdW5kX3RpbWUgPSBnZXRfdHVybmFyb3VuZF90aW1lKCBza2IgKTsKLQkJZnJhbWU9IHNrYl9wdXNoKHNrYiwgc2VsZi0+aGVhZGVyX2xlbmd0aCk7CiAJCWlyZGFfdXNiX2J1aWxkX2hlYWRlcihzZWxmLCBmcmFtZSwgMCk7CiAJCWZyYW1lWzJdID0gdHVybmFyb3VuZF90aW1lOwogCQlpZiAoKHNrYi0+bGVuICE9IDApICYmCkBAIC00NzIsMTcgKzQ2MCwxNyBAQAogCQkJZnJhbWVbMV0gPSAwOwogCQl9CiAJfSBlbHNlIHsKLQkJaXJkYV91c2JfYnVpbGRfaGVhZGVyKHNlbGYsIHNrYl9wdXNoKHNrYiwgc2VsZi0+aGVhZGVyX2xlbmd0aCksIDApOworCQlpcmRhX3VzYl9idWlsZF9oZWFkZXIoc2VsZiwgc2VsZi0+dHhfYnVmZiwgMCk7CiAJfQogCiAJLyogRklYTUU6IE1ha2UgbWFjcm8gb3V0IG9mIHRoaXMgb25lICovCiAJKChzdHJ1Y3QgaXJkYV9za2JfY2IgKilza2ItPmNiKS0+Y29udGV4dCA9IHNlbGY7CiAKLSAgICAgICAgdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZWxmLT51c2JkZXYsIAorCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VsZi0+dXNiZGV2LAogCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoc2VsZi0+dXNiZGV2LCBzZWxmLT5idWxrX291dF9lcCksCi0gICAgICAgICAgICAgICAgICAgICAgc2tiLT5kYXRhLCBJUkRBX1NLQl9NQVhfTVRVLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnR4X2J1ZmYsIHNrYi0+bGVuICsgc2VsZi0+aGVhZGVyX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9idWxrX2NhbGxiYWNrLCBza2IpOwotCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNrYi0+bGVuOworCiAJLyogVGhpcyBmbGFnIChVUkJfWkVST19QQUNLRVQpIGluZGljYXRlcyB0aGF0IHdoYXQgd2Ugc2VuZCBpcyBub3QKIAkgKiBhIGNvbnRpbnVvdXMgc3RyZWFtIG9mIGRhdGEgYnV0IHNlcGFyYXRlIHBhY2tldHMuCiAJICogSW4gdGhpcyBjYXNlLCB0aGUgVVNCIGxheWVyIHdpbGwgaW5zZXJ0IGFuIGVtcHR5IFVTQiBmcmFtZSAoVEQpCkBAIC0xNDU1LDYgKzE0NDMsOSBAQAogCS8qIFJlbW92ZSB0aGUgc3BlZWQgYnVmZmVyICovCiAJa2ZyZWUoc2VsZi0+c3BlZWRfYnVmZik7CiAJc2VsZi0+c3BlZWRfYnVmZiA9IE5VTEw7CisKKwlrZnJlZShzZWxmLT50eF9idWZmKTsKKwlzZWxmLT50eF9idWZmID0gTlVMTDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKiogVVNCIENPTkZJRyBTVUJST1VUSU5FUyAqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTUyNCw4ICsxNTE1LDYgQEAKIAogCUlSREFfREVCVUcoMCwgIiVzKCksIEFuZCBvdXIgZW5kcG9pbnRzIGFyZSA6IGluPSUwMlgsIG91dD0lMDJYICglZCksIGludD0lMDJYXG4iLAogCQlfX0ZVTkNUSU9OX18sIHNlbGYtPmJ1bGtfaW5fZXAsIHNlbGYtPmJ1bGtfb3V0X2VwLCBzZWxmLT5idWxrX291dF9tdHUsIHNlbGYtPmJ1bGtfaW50X2VwKTsKLQkvKiBTaG91bGQgYmUgOCwgMTYsIDMyIG9yIDY0IGJ5dGVzICovCi0JSVJEQV9BU1NFUlQoc2VsZi0+YnVsa19vdXRfbXR1ID09IDY0LCA7KTsKIAogCXJldHVybigoc2VsZi0+YnVsa19pbl9lcCAhPSAwKSAmJiAoc2VsZi0+YnVsa19vdXRfZXAgIT0gMCkpOwogfQpAQCAtMTc0NywxNSArMTczNiwyMCBAQAogCS8qIERvbid0IGNoYW5nZSB0aGlzIGJ1ZmZlciBzaXplIGFuZCBhbGxvY2F0aW9uIHdpdGhvdXQgZG9pbmcKIAkgKiBzb21lIGhlYXZ5IGFuZCBjb21wbGV0ZSB0ZXN0aW5nLiBEb24ndCBhc2sgd2h5IDotKAogCSAqIEplYW4gSUkgKi8KLQlzZWxmLT5zcGVlZF9idWZmID0gKGNoYXIgKikga21hbGxvYyhJUkRBX1VTQl9TUEVFRF9NVFUsIEdGUF9LRVJORUwpOworCXNlbGYtPnNwZWVkX2J1ZmYgPSBrbWFsbG9jKElSREFfVVNCX1NQRUVEX01UVSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNlbGYtPnNwZWVkX2J1ZmYgPT0gTlVMTCkgCiAJCWdvdG8gZXJyX291dF8zOwogCiAJbWVtc2V0KHNlbGYtPnNwZWVkX2J1ZmYsIDAsIElSREFfVVNCX1NQRUVEX01UVSk7CiAKKwlzZWxmLT50eF9idWZmID0ga3phbGxvYyhJUkRBX1NLQl9NQVhfTVRVICsgc2VsZi0+aGVhZGVyX2xlbmd0aCwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoc2VsZi0+dHhfYnVmZiA9PSBOVUxMKQorCQlnb3RvIGVycl9vdXRfNDsKKwogCXJldCA9IGlyZGFfdXNiX29wZW4oc2VsZik7CiAJaWYgKHJldCkgCi0JCWdvdG8gZXJyX291dF80OworCQlnb3RvIGVycl9vdXRfNTsKIAogCUlSREFfTUVTU0FHRSgiSXJEQTogUmVnaXN0ZXJlZCBkZXZpY2UgJXNcbiIsIG5ldC0+bmFtZSk7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBzZWxmKTsKQEAgLTE3NjYsMTQgKzE3NjAsMTQgQEAKIAkJc2VsZi0+bmVlZHNwYXRjaCA9IChyZXQgPCAwKTsKIAkJaWYgKHNlbGYtPm5lZWRzcGF0Y2gpIHsKIAkJCUlSREFfRVJST1IoIlNUSVI0MjFYOiBDb3VsZG4ndCB1cGxvYWQgcGF0Y2hcbiIpOwotCQkJZ290byBlcnJfb3V0XzU7CisJCQlnb3RvIGVycl9vdXRfNjsKIAkJfQogCiAJCS8qIHJlcGxhY2UgSXJEQSBjbGFzcyBkZXNjcmlwdG9yIHdpdGggd2hhdCBwYXRjaGVkIGRldmljZSBpcyBub3cgcmVwb3J0aW5nICovCiAJCWlyZGFfZGVzYyA9IGlyZGFfdXNiX2ZpbmRfY2xhc3NfZGVzYyAoc2VsZi0+dXNiaW50Zik7CiAJCWlmIChpcmRhX2Rlc2MgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWdvdG8gZXJyX291dF81OworCQkJZ290byBlcnJfb3V0XzY7CiAJCX0KIAkJaWYgKHNlbGYtPmlyZGFfZGVzYykKIAkJCWtmcmVlIChzZWxmLT5pcmRhX2Rlc2MpOwpAQCAtMTc4Miw5ICsxNzc2LDEwIEBACiAJfQogCiAJcmV0dXJuIDA7Ci0KLWVycl9vdXRfNToKK2Vycl9vdXRfNjoKIAl1bnJlZ2lzdGVyX25ldGRldihzZWxmLT5uZXRkZXYpOworZXJyX291dF81OgorCWtmcmVlKHNlbGYtPnR4X2J1ZmYpOwogZXJyX291dF80OgogCWtmcmVlKHNlbGYtPnNwZWVkX2J1ZmYpOwogZXJyX291dF8zOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oCmluZGV4IDZiMjI3MWYuLmU4NDZjMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmgKQEAgLTE1Niw2ICsxNTYsNyBAQAogCXN0cnVjdCBpcmxhcF9jYiAgICppcmxhcDsJLyogVGhlIGxpbmsgbGF5ZXIgd2UgYXJlIGJpbmRlZCB0byAqLwogCXN0cnVjdCBxb3NfaW5mbyBxb3M7CiAJY2hhciAqc3BlZWRfYnVmZjsJCS8qIEJ1ZmZlciBmb3Igc3BlZWQgY2hhbmdlcyAqLworCWNoYXIgKnR4X2J1ZmY7CiAKIAlzdHJ1Y3QgdGltZXZhbCBzdGFtcDsKIAlzdHJ1Y3QgdGltZXZhbCBub3c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lycG9ydC5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcnBvcnQuYwppbmRleCA2NTRhNjhiLi4zMDk4OTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lycG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJwb3J0LmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQogCS8qIEFsbG9jYXRlIG1lbW9yeSBpZiBuZWVkZWQgKi8KIAlpZiAoc2VsZi0+dHhfYnVmZi50cnVlc2l6ZSA+IDApIHsKLQkJc2VsZi0+dHhfYnVmZi5oZWFkID0gKF9fdTggKikga21hbGxvYyhzZWxmLT50eF9idWZmLnRydWVzaXplLCAKKwkJc2VsZi0+dHhfYnVmZi5oZWFkID0ga21hbGxvYyhzZWxmLT50eF9idWZmLnRydWVzaXplLAogCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmIChzZWxmLT50eF9idWZmLmhlYWQgPT0gTlVMTCkgewogCQkJSVJEQV9FUlJPUigiJXMoKSwgY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYwppbmRleCA2YTk4YjdhLi5hZDE4NTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJ0dHktc2lyLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogewogCXN0cnVjdCBzaXJ0dHlfY2IgKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLSAgICAgICAgc3RydWN0IHRlcm1pb3Mgb2xkX3Rlcm1pb3M7CisgICAgICAgIHN0cnVjdCBrdGVybWlvcyBvbGRfdGVybWlvczsKIAlpbnQgY2ZsYWc7CiAKIAlJUkRBX0FTU0VSVChwcml2ICE9IE5VTEwsIHJldHVybiAtMTspOwpAQCAtMzE4LDcgKzMxOCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcnR0eV9zdG9wX3JlY2VpdmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdG9wKQogewotCXN0cnVjdCB0ZXJtaW9zIG9sZF90ZXJtaW9zOworCXN0cnVjdCBrdGVybWlvcyBvbGRfdGVybWlvczsKIAlpbnQgY2ZsYWc7CiAKIAlsb2NrX2tlcm5lbCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCmluZGV4IGMxNGE3NDYuLjIwZDMwNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKQEAgLTU5LDcgKzU5LDcgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCi1NT0RVTEVfQVVUSE9SKCJTdGVwaGVuIEhlbW1pbmdlciA8c2hlbW1pbmdlckBvc2RsLm9yZz4iKTsKK01PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gSGVtbWluZ2VyIDxzaGVtbWluZ2VyQGxpbnV4LWZvdW5kYXRpb24ub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJckRBLVVTQiBEb25nbGUgRHJpdmVyIGZvciBTaWdtYVRlbCBTVElyNDIwMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCmluZGV4IDE4YzY4MTkuLmUyYjFhZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAl1bnNpZ25lZCBpOwogCiAJc2VxX3ByaW50ZihzZXEsICJcbiVzICh2aWQvZGlkOiAlMDR4LyUwNHgpXG4iLAotCQkgICBQQ0lERVZfTkFNRShwZGV2KSwgKGludClwZGV2LT52ZW5kb3IsIChpbnQpcGRldi0+ZGV2aWNlKTsKKwkJICAgcGNpX25hbWUocGRldiksIChpbnQpcGRldi0+dmVuZG9yLCAoaW50KXBkZXYtPmRldmljZSk7CiAJc2VxX3ByaW50ZihzZXEsICJwY2ktcG93ZXItc3RhdGU6ICV1XG4iLCAodW5zaWduZWQpIHBkZXYtPmN1cnJlbnRfc3RhdGUpOwogCXNlcV9wcmludGYoc2VxLCAicmVzb3VyY2VzOiBpcnE9JXUgLyBpbz0weCUwNHggLyBkbWFfbWFzaz0weCUwMTZMeFxuIiwKIAkJICAgcGRldi0+aXJxLCAodW5zaWduZWQpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCAodW5zaWduZWQgbG9uZyBsb25nKXBkZXYtPmRtYV9tYXNrKTsKQEAgLTE0MDEsNyArMTQwMSw3IEBACiAKIAlpZiAodmxzaV9zdGFydF9odyhpZGV2KSkKIAkJSVJEQV9FUlJPUigiJXM6IGZhaWxlZCB0byByZXN0YXJ0IGh3IC0gJXMoJXMpIHVudXNhYmxlIVxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgUENJREVWX05BTUUoaWRldi0+cGRldiksIG5kZXYtPm5hbWUpOworCQkJICAgX19GVU5DVElPTl9fLCBwY2lfbmFtZShpZGV2LT5wZGV2KSwgbmRldi0+bmFtZSk7CiAJZWxzZQogCQluZXRpZl9zdGFydF9xdWV1ZShuZGV2KTsKIH0KQEAgLTE2NDMsNyArMTY0Myw3IEBACiAJCXBkZXYtPmN1cnJlbnRfc3RhdGUgPSAwOyAvKiBodyBtdXN0IGJlIHJ1bm5pbmcgbm93ICovCiAKIAlJUkRBX01FU1NBR0UoIiVzOiBJckRBIFBDSSBjb250cm9sbGVyICVzIGRldGVjdGVkXG4iLAotCQkgICAgIGRyaXZlcm5hbWUsIFBDSURFVl9OQU1FKHBkZXYpKTsKKwkJICAgICBkcml2ZXJuYW1lLCBwY2lfbmFtZShwZGV2KSk7CiAKIAlpZiAoICFwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwwKQogCSAgICAgfHwgIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwwKSAmIElPUkVTT1VSQ0VfSU8pICkgewpAQCAtMTcyOCw3ICsxNzI4LDcgQEAKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAotCUlSREFfTUVTU0FHRSgiJXM6ICVzIHJlbW92ZWRcbiIsIGRyaXZlcm5hbWUsIFBDSURFVl9OQU1FKHBkZXYpKTsKKwlJUkRBX01FU1NBR0UoIiVzOiAlcyByZW1vdmVkXG4iLCBkcml2ZXJuYW1lLCBwY2lfbmFtZShwZGV2KSk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTE3NDgsNyArMTc0OCw3IEBACiAKIAlpZiAoIW5kZXYpIHsKIAkJSVJEQV9FUlJPUigiJXMgLSAlczogbm8gbmV0ZGV2aWNlIFxuIiwKLQkJCSAgIF9fRlVOQ1RJT05fXywgUENJREVWX05BTUUocGRldikpOworCQkJICAgX19GVU5DVElPTl9fLCBwY2lfbmFtZShwZGV2KSk7CiAJCXJldHVybiAwOwogCX0KIAlpZGV2ID0gbmRldi0+cHJpdjsJCkBAIC0xNzU5LDcgKzE3NTksNyBAQAogCQkJcGRldi0+Y3VycmVudF9zdGF0ZSA9IHN0YXRlLmV2ZW50OwogCQl9CiAJCWVsc2UKLQkJCUlSREFfRVJST1IoIiVzIC0gJXM6IGludmFsaWQgc3VzcGVuZCByZXF1ZXN0ICV1IC0+ICV1XG4iLCBfX0ZVTkNUSU9OX18sIFBDSURFVl9OQU1FKHBkZXYpLCBwZGV2LT5jdXJyZW50X3N0YXRlLCBzdGF0ZS5ldmVudCk7CisJCQlJUkRBX0VSUk9SKCIlcyAtICVzOiBpbnZhbGlkIHN1c3BlbmQgcmVxdWVzdCAldSAtPiAldVxuIiwgX19GVU5DVElPTl9fLCBwY2lfbmFtZShwZGV2KSwgcGRldi0+Y3VycmVudF9zdGF0ZSwgc3RhdGUuZXZlbnQpOwogCQl1cCgmaWRldi0+c2VtKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTc4Nyw3ICsxNzg3LDcgQEAKIAogCWlmICghbmRldikgewogCQlJUkRBX0VSUk9SKCIlcyAtICVzOiBubyBuZXRkZXZpY2UgXG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBQQ0lERVZfTkFNRShwZGV2KSk7CisJCQkgICBfX0ZVTkNUSU9OX18sIHBjaV9uYW1lKHBkZXYpKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlkZXYgPSBuZGV2LT5wcml2OwkKQEAgLTE3OTUsNyArMTc5NSw3IEBACiAJaWYgKHBkZXYtPmN1cnJlbnRfc3RhdGUgPT0gMCkgewogCQl1cCgmaWRldi0+c2VtKTsKIAkJSVJEQV9XQVJOSU5HKCIlcyAtICVzOiBhbHJlYWR5IHJlc3VtZWRcbiIsCi0JCQkgICAgIF9fRlVOQ1RJT05fXywgUENJREVWX05BTUUocGRldikpOworCQkJICAgICBfX0ZVTkNUSU9OX18sIHBjaV9uYW1lKHBkZXYpKTsKIAkJcmV0dXJuIDA7CiAJfQogCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmggYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuaAppbmRleCBjMzdmMGJjLi4yZDNiNzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuaApAQCAtNDEsMzkgKzQxLDYgQEAKICNkZWZpbmUgUENJX0NMQVNTX1NVQkNMQVNTX01BU0sJCTB4ZmZmZgogI2VuZGlmCiAKLS8qIGluIHJlY2VudCAyLjUgaW50ZXJydXB0IGhhbmRsZXJzIGhhdmUgbm9uLXZvaWQgcmV0dXJuIHZhbHVlICovCi0jaWZuZGVmIElSUV9SRVRWQUwKLXR5cGVkZWYgdm9pZCBpcnFyZXR1cm5fdDsKLSNkZWZpbmUgSVJRX05PTkUKLSNkZWZpbmUgSVJRX0hBTkRMRUQKLSNkZWZpbmUgSVJRX1JFVFZBTCh4KQotI2VuZGlmCi0KLS8qIHNvbWUgc3R1ZmYgbmVlZCB0byBjaGVjayBrZXJuZWx2ZXJzaW9uLiBOb3QgYWxsIDIuNSBzdHVmZiB3YXMgcHJlc2VudAotICogaW4gZWFybHkgMi41LnggLSB0aGUgdGVzdCBpcyBtZXJlbHkgdG8gc2VwYXJhdGUgMi40IGZyb20gMi41Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQotLyogUERFKCkgaW50cm9kdWNlZCBpbiAyLjUuNCAqLwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0jZGVmaW5lIFBERShpbm9kZSkgKChpbm9kZSktPmlfcHJpdmF0ZSkKLSNlbmRpZgotCi0vKiBpcmRhIGNyYzE2IGNhbGN1bGF0aW9uIGV4cG9ydGVkIGluIDIuNS40MiAqLwotI2RlZmluZSBpcmRhX2NhbGNfY3JjMTYoZmNzLGJ1ZixsZW4pCShHT09EX0ZDUykKLQotLyogd2UgdXNlIHRoaXMgZm9yIHVuaWZpZWQgcGNpIGRldmljZSBuYW1lIGFjY2VzcyAqLwotI2RlZmluZSBQQ0lERVZfTkFNRShwZGV2KQkoKHBkZXYpLT5uYW1lKQotCi0jZWxzZSAvKiAyLjUgb3IgbGF0ZXIgKi8KLQotLyogd2hhdGV2ZXIgd2UgZ2V0IGZyb20gdGhlIGFzc29jaWF0ZWQgc3RydWN0IGRldmljZSAtIGJ1czpzbG90OmRldi5mbiBpZCAqLwotI2RlZmluZSBQQ0lERVZfTkFNRShwZGV2KQkocGNpX25hbWUocGRldikpCi0KLSNlbmRpZgotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKIC8qIG5vbi1zdGFuZGFyZCBQQ0kgcmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCmluZGV4IGQ2ZjRmMTguLjIxOTRiNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCkBAIC03Myw3ICs3Myw3IEBACiAjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvbWYuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfbHBfY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9ldmVudC5oPgpAQCAtMTY2OCw3ICsxNjY4LDcgQEAKICAqIE1vZHVsZSBpbml0aWFsaXphdGlvbi9jbGVhbnVwCiAgKi8KIAotdm9pZCBfX2V4aXQgdmV0aF9tb2R1bGVfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHZldGhfbW9kdWxlX2NsZWFudXAodm9pZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgdmV0aF9scGFyX2Nvbm5lY3Rpb24gKmNueDsKQEAgLTE2OTcsMTEgKzE2OTcsMTQgQEAKIH0KIG1vZHVsZV9leGl0KHZldGhfbW9kdWxlX2NsZWFudXApOwogCi1pbnQgX19pbml0IHZldGhfbW9kdWxlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHZldGhfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIAlpbnQgcmM7CiAKKwlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCXJldHVybiAtRU5PREVWOworCiAJdGhpc19scCA9IEh2THBDb25maWdfZ2V0THBJbmRleF9vdXRsaW5lKCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSFZNQVhBUkNISVRFQ1RFRExQUzsgKytpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2IuaCBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCmluZGV4IDUwZmZlOTAuLmY0YWJhNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCkBAIC0xNzEsNiArMTcxLDcgQEAKIAogCS8qIFRYICovCiAJc3RydWN0IGl4Z2JfZGVzY19yaW5nIHR4X3JpbmcgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKwl1bnNpZ25lZCBpbnQgcmVzdGFydF9xdWV1ZTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvX3N0YXJ0OwogCXVpbnQzMl90IHR4X2NtZF90eXBlOwogCXVpbnQ2NF90IGh3X2NzdW1fdHhfZ29vZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZXRodG9vbC5jCmluZGV4IGNkMjI1MjMuLjgyYzA0NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2V0aHRvb2wuYwpAQCAtNzksNiArNzksNyBAQAogCXsidHhfd2luZG93X2Vycm9ycyIsIElYR0JfU1RBVChuZXRfc3RhdHMudHhfd2luZG93X2Vycm9ycyl9LAogCXsidHhfZGVmZXJyZWRfb2siLCBJWEdCX1NUQVQoc3RhdHMuZGMpfSwKIAl7InR4X3RpbWVvdXRfY291bnQiLCBJWEdCX1NUQVQodHhfdGltZW91dF9jb3VudCkgfSwKKwl7InR4X3Jlc3RhcnRfcXVldWUiLCBJWEdCX1NUQVQocmVzdGFydF9xdWV1ZSkgfSwKIAl7InJ4X2xvbmdfbGVuZ3RoX2Vycm9ycyIsIElYR0JfU1RBVChzdGF0cy5yb2MpfSwKIAl7InJ4X3Nob3J0X2xlbmd0aF9lcnJvcnMiLCBJWEdCX1NUQVQoc3RhdHMucnVjKX0sCiAjaWZkZWYgTkVUSUZfRl9UU08KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ody5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmMKaW5kZXggMDIwODliNi4uZWNiZjQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmMKQEAgLTM5OSw4ICszOTksOSBAQAogCS8qIFplcm8gb3V0IHRoZSBvdGhlciAxNSByZWNlaXZlIGFkZHJlc3Nlcy4gKi8KIAlERUJVR09VVCgiQ2xlYXJpbmcgUkFSWzEtMTVdXG4iKTsKIAlmb3IoaSA9IDE7IGkgPCBJWEdCX1JBUl9FTlRSSUVTOyBpKyspIHsKLQkJSVhHQl9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCAoaSA8PCAxKSwgMCk7CisJCS8qIFdyaXRlIGhpZ2ggcmVnIGZpcnN0IHRvIGRpc2FibGUgdGhlIEFWIGJpdCBmaXJzdCAqLwogCQlJWEdCX1dSSVRFX1JFR19BUlJBWShodywgUkEsICgoaSA8PCAxKSArIDEpLCAwKTsKKwkJSVhHQl9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCAoaSA8PCAxKSwgMCk7CiAJfQogCiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKaW5kZXggZTYyODEyNi4uYTA4M2E5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCkBAIC0zNiw3ICszNiw3IEBACiAjZWxzZQogI2RlZmluZSBEUklWRVJOQVBJICItTkFQSSIKICNlbmRpZgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMC4xMTctazIiRFJJVkVSTkFQSQorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMC4xMjYtazIiRFJJVkVSTkFQSQogY2hhciBpeGdiX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIHN0YXRpYyBjaGFyIGl4Z2JfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIjsKIApAQCAtMTI4Nyw2ICsxMjg3LDcgQEAKIAlzdHJ1Y3QgaXhnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCWludCBsZW4gPSBza2ItPmxlbjsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOworCXVuc2lnbmVkIGludCBtc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwogCiAJdW5zaWduZWQgaW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgZjsKQEAgLTEyOTgsNiArMTI5OSwxMSBAQAogCXdoaWxlKGxlbikgewogCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJc2l6ZSA9IG1pbihsZW4sIElYR0JfTUFYX0RBVEFfUEVSX1RYRCk7CisJCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCisJCSAqIGluIFRTTyBtb2RlLiAgQXBwZW5kIDQtYnl0ZSBzZW50aW5lbCBkZXNjICovCisJCWlmICh1bmxpa2VseShtc3MgJiYgIW5yX2ZyYWdzICYmIHNpemUgPT0gbGVuICYmIHNpemUgPiA4KSkKKwkJCXNpemUgLT0gNDsKKwogCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gc2l6ZTsKIAkJV0FSTl9PTihidWZmZXJfaW5mby0+ZG1hICE9IDApOwogCQlidWZmZXJfaW5mby0+ZG1hID0KQEAgLTEzMjQsNiArMTMzMCwxMyBAQAogCQl3aGlsZShsZW4pIHsKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJc2l6ZSA9IG1pbihsZW4sIElYR0JfTUFYX0RBVEFfUEVSX1RYRCk7CisKKwkJCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCisJCQkgKiBpbiBUU08gbW9kZS4gIEFwcGVuZCA0LWJ5dGUgc2VudGluZWwgZGVzYyAqLworCQkJaWYgKHVubGlrZWx5KG1zcyAmJiAhbnJfZnJhZ3MgJiYgc2l6ZSA9PSBsZW4KKwkJCSAgICAgICAgICAgICAmJiBzaXplID4gOCkpCisJCQkJc2l6ZSAtPSA0OworCiAJCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gc2l6ZTsKIAkJCWJ1ZmZlcl9pbmZvLT5kbWEgPQogCQkJCXBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LApAQCAtMTM5OCwxMSArMTQxMSw0MyBAQAogCUlYR0JfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVERULCBpKTsKIH0KIAorc3RhdGljIGludCBfX2l4Z2JfbWF5YmVfc3RvcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYl9kZXNjX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZzsKKworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkvKiBIZXJiZXJ0J3Mgb3JpZ2luYWwgcGF0Y2ggaGFkOgorCSAqICBzbXBfbWJfX2FmdGVyX25ldGlmX3N0b3BfcXVldWUoKTsKKwkgKiBidXQgc2luY2UgdGhhdCBkb2Vzbid0IGV4aXN0IHlldCwganVzdCBvcGVuIGNvZGUgaXQuICovCisJc21wX21iKCk7CisKKwkvKiBXZSBuZWVkIHRvIGNoZWNrIGFnYWluIGluIGEgY2FzZSBhbm90aGVyIENQVSBoYXMganVzdAorCSAqIG1hZGUgcm9vbSBhdmFpbGFibGUuICovCisJaWYgKGxpa2VseShJWEdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpIDwgc2l6ZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBBIHJlcHJpZXZlISAqLworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisJKythZGFwdGVyLT5yZXN0YXJ0X3F1ZXVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl4Z2JfbWF5YmVfc3RvcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JfZGVzY19yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKK3sKKwlpZiAobGlrZWx5KElYR0JfREVTQ19VTlVTRUQodHhfcmluZykgPj0gc2l6ZSkpCisJCXJldHVybiAwOworCXJldHVybiBfX2l4Z2JfbWF5YmVfc3RvcF90eChuZXRkZXYsIHNpemUpOworfQorCisKIC8qIFR4IERlc2NyaXB0b3JzIG5lZWRlZCwgd29yc3QgY2FzZSAqLwogI2RlZmluZSBUWERfVVNFX0NPVU5UKFMpICgoKFMpID4+IElYR0JfTUFYX1RYRF9QV1IpICsgXAogCQkJICgoKFMpICYgKElYR0JfTUFYX0RBVEFfUEVSX1RYRCAtIDEpKSA/IDEgOiAwKSkKLSNkZWZpbmUgREVTQ19ORUVERUQgVFhEX1VTRV9DT1VOVChJWEdCX01BWF9EQVRBX1BFUl9UWEQpICsgXAotCU1BWF9TS0JfRlJBR1MgKiBUWERfVVNFX0NPVU5UKFBBR0VfU0laRSkgKyAxCisjZGVmaW5lIERFU0NfTkVFREVEIFRYRF9VU0VfQ09VTlQoSVhHQl9NQVhfREFUQV9QRVJfVFhEKSAvKiBza2ItPmRhdGUgKi8gKyBcCisJTUFYX1NLQl9GUkFHUyAqIFRYRF9VU0VfQ09VTlQoUEFHRV9TSVpFKSArIDEgLyogZm9yIGNvbnRleHQgKi8gXAorCSsgMSAvKiBvbmUgbW9yZSBuZWVkZWQgZm9yIHNlbnRpbmVsIFRTTyB3b3JrYXJvdW5kICovCiAKIHN0YXRpYyBpbnQKIGl4Z2JfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMTQzMCw3ICsxNDc1LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOwogI2VuZGlmCiAKLQlpZih1bmxpa2VseShJWEdCX0RFU0NfVU5VU0VEKCZhZGFwdGVyLT50eF9yaW5nKSA8IERFU0NfTkVFREVEKSkgeworCWlmICh1bmxpa2VseShpeGdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCAmYWRhcHRlci0+dHhfcmluZywKKyAgICAgICAgICAgICAgICAgICAgIERFU0NfTkVFREVEKSkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKQEAgLTE0NjgsOCArMTUxNCw3IEBACiAKICNpZmRlZiBORVRJRl9GX0xMVFgKIAkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JaWYodW5saWtlbHkoSVhHQl9ERVNDX1VOVVNFRCgmYWRhcHRlci0+dHhfcmluZykgPCBERVNDX05FRURFRCkpCi0JCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwlpeGdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCAmYWRhcHRlci0+dHhfcmluZywgREVTQ19ORUVERUQpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dHhfbG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sb29wYmFjay5jIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwppbmRleCA4MmMxMGRlLi4yYjczOWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sb29wYmFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKQEAgLTIyOSw5ICsyMjksMTEgQEAKIH07CiAKIC8qIFNldHVwIGFuZCByZWdpc3RlciB0aGUgbG9vcGJhY2sgZGV2aWNlLiAqLwotaW50IF9faW5pdCBsb29wYmFja19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBsb29wYmFja19pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHJlZ2lzdGVyX25ldGRldigmbG9vcGJhY2tfZGV2KTsKIH07CiAKK21vZHVsZV9pbml0KGxvb3BiYWNrX2luaXQpOworCiBFWFBPUlRfU1lNQk9MKGxvb3BiYWNrX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9scDQ4NmUuYyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCmluZGV4IGI4MzMwMTYuLjE3N2M1MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCisrKyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCkBAIC04ODQsNyArODg0LDcgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JdHhfY21kID0gKHN0cnVjdCB0eF9jbWQgKikga21hbGxvYyAoKHNpemVvZiAoc3RydWN0IHR4X2NtZCkgKyBzaXplb2YgKHN0cnVjdCBpNTk2X3RiZCkpLCBHRlBfQVRPTUlDKTsKKwl0eF9jbWQgPSBrbWFsbG9jKChzaXplb2YgKHN0cnVjdCB0eF9jbWQpICsgc2l6ZW9mIChzdHJ1Y3QgaTU5Nl90YmQpKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHR4X2NtZCA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpNTk2X3htaXQgTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsIGRldi0+bmFtZSk7CiAJCWxwLT5zdGF0cy50eF9kcm9wcGVkKys7CkBAIC0xMjY2LDcgKzEyNjYsNyBAQAogCWlmIChkZXYtPm1jX2NvdW50ID4gMCkgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAkJY2hhciAqY3A7Ci0JCWNtZCA9IChzdHJ1Y3QgaTU5Nl9jbWQgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTU5Nl9jbWQpKzIrZGV2LT5tY19jb3VudCo2LCBHRlBfQVRPTUlDKTsKKwkJY21kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGk1OTZfY21kKSsyK2Rldi0+bWNfY291bnQqNiwgR0ZQX0FUT01JQyk7CiAJCWlmIChjbWQgPT0gTlVMTCkgewogCQkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IHNldF9tdWx0aWNhc3QgTWVtb3J5IHNxdWVlemUuXG4iLCBkZXYtPm5hbWUpOwogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjYi5jIGIvZHJpdmVycy9uZXQvbWFjYi5jCmluZGV4IGJkMGNlOTguLjI1YjU1OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2IuYworKysgYi9kcml2ZXJzL25ldC9tYWNiLmMKQEAgLTI2NCwxMiArMjY0LDEyIEBACiAJV0FSTl9PTigodW5zaWduZWQgbG9uZykoZW5kIC0gcCAtIDEpICE9IChNQUNCX1RQRiAtIE1BQ0JfUEZSKSAvIDQpOwogCiAJZm9yKDsgcCA8IGVuZDsgcCsrLCByZWcrKykKLQkJKnAgKz0gcmVhZGwocmVnKTsKKwkJKnAgKz0gX19yYXdfcmVhZGwocmVnKTsKIH0KIAotc3RhdGljIHZvaWQgbWFjYl9wZXJpb2RpY190YXNrKHZvaWQgKmFyZykKK3N0YXRpYyB2b2lkIG1hY2JfcGVyaW9kaWNfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IG1hY2IgKmJwID0gYXJnOworCXN0cnVjdCBtYWNiICpicCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWFjYiwgcGVyaW9kaWNfdGFzay53b3JrKTsKIAogCW1hY2JfdXBkYXRlX3N0YXRzKGJwKTsKIAltYWNiX2NoZWNrX21lZGlhKGJwLCAxLCAwKTsKQEAgLTEwODgsNyArMTA4OCw3IEBACiAKIAlkZXYtPmJhc2VfYWRkciA9IHJlZ3MtPnN0YXJ0OwogCi0JSU5JVF9XT1JLKCZicC0+cGVyaW9kaWNfdGFzaywgbWFjYl9wZXJpb2RpY190YXNrLCBicCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmJwLT5wZXJpb2RpY190YXNrLCBtYWNiX3BlcmlvZGljX3Rhc2spOwogCW11dGV4X2luaXQoJmJwLT5tZGlvX211dGV4KTsKIAlpbml0X2NvbXBsZXRpb24oJmJwLT5tZGlvX2NvbXBsZXRlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjYi5oIGIvZHJpdmVycy9uZXQvbWFjYi5oCmluZGV4IDhjMjUzZGIuLjI3YmYwYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2IuaAorKysgYi9kcml2ZXJzL25ldC9tYWNiLmgKQEAgLTI1MCw5ICsyNTAsOSBAQAogCiAvKiBSZWdpc3RlciBhY2Nlc3MgbWFjcm9zICovCiAjZGVmaW5lIG1hY2JfcmVhZGwocG9ydCxyZWcpCQkJCVwKLQlyZWFkbCgocG9ydCktPnJlZ3MgKyBNQUNCXyMjcmVnKQorCV9fcmF3X3JlYWRsKChwb3J0KS0+cmVncyArIE1BQ0JfIyNyZWcpCiAjZGVmaW5lIG1hY2Jfd3JpdGVsKHBvcnQscmVnLHZhbHVlKQkJCVwKLQl3cml0ZWwoKHZhbHVlKSwgKHBvcnQpLT5yZWdzICsgTUFDQl8jI3JlZykKKwlfX3Jhd193cml0ZWwoKHZhbHVlKSwgKHBvcnQpLT5yZWdzICsgTUFDQl8jI3JlZykKIAogc3RydWN0IGRtYV9kZXNjIHsKIAl1MzIJYWRkcjsKQEAgLTM3Nyw3ICszNzcsNyBAQAogCiAJdW5zaWduZWQgaW50CQlyeF9wZW5kaW5nLCB0eF9wZW5kaW5nOwogCi0Jc3RydWN0IHdvcmtfc3RydWN0CXBlcmlvZGljX3Rhc2s7CisJc3RydWN0IGRlbGF5ZWRfd29yawlwZXJpb2RpY190YXNrOwogCiAJc3RydWN0IG11dGV4CQltZGlvX211dGV4OwogCXN0cnVjdCBjb21wbGV0aW9uCW1kaW9fY29tcGxldGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCBjNDFhZTQyLi5iM2JmODY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKQEAgLTMxNCw2ICszMTQsMTMgQEAKIAogCXdoaWxlIChtcC0+dHhfZGVzY19jb3VudCA+IDApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm1wLT5sb2NrLCBmbGFncyk7CisKKwkJLyogdHhfZGVzY19jb3VudCBtaWdodCBoYXZlIGNoYW5nZWQgYmVmb3JlIGFjcXVpcmluZyB0aGUgbG9jayAqLworCQlpZiAobXAtPnR4X2Rlc2NfY291bnQgPD0gMCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiByZWxlYXNlZDsKKwkJfQorCiAJCXR4X2luZGV4ID0gbXAtPnR4X3VzZWRfZGVzY19xOwogCQlkZXNjID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9pbmRleF07CiAJCWNtZF9zdHMgPSBkZXNjLT5jbWRfc3RzOwpAQCAtMzMyLDEzICszMzksMTMgQEAKIAkJaWYgKHNrYikKIAkJCW1wLT50eF9za2JbdHhfaW5kZXhdID0gTlVMTDsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+bG9jaywgZmxhZ3MpOwotCiAJCWlmIChjbWRfc3RzICYgRVRIX0VSUk9SX1NVTU1BUlkpIHsKIAkJCXByaW50aygiJXM6IEVycm9yIGluIFRYXG4iLCBkZXYtPm5hbWUpOwogCQkJbXAtPnN0YXRzLnR4X2Vycm9ycysrOwogCQl9CiAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKKwogCQlpZiAoY21kX3N0cyAmIEVUSF9UWF9GSVJTVF9ERVNDKQogCQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCBhZGRyLCBjb3VudCwgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IDgxZjEyN2EuLjYxY2JkNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtNzEsNyArNzEsNyBAQAogI2luY2x1ZGUgIm15cmkxMGdlX21jcC5oIgogI2luY2x1ZGUgIm15cmkxMGdlX21jcF9nZW5faGVhZGVyLmgiCiAKLSNkZWZpbmUgTVlSSTEwR0VfVkVSU0lPTl9TVFIgIjEuMC4wIgorI2RlZmluZSBNWVJJMTBHRV9WRVJTSU9OX1NUUiAiMS4yLjAiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiTXlyaWNvbSAxMEcgZHJpdmVyICgxMEdiRSkiKTsKIE1PRFVMRV9BVVRIT1IoIk1haW50YWluZXI6IGhlbHBAbXlyaS5jb20iKTsKQEAgLTkyLDggKzkyLDEzIEBACiAjZGVmaW5lIE1ZUkkxMEdFX05PX0NPTkZJUk1fREFUQSBodG9ubCgweGZmZmZmZmZmKQogI2RlZmluZSBNWVJJMTBHRV9OT19SRVNQT05TRV9SRVNVTFQgMHhmZmZmZmZmZgogCisjZGVmaW5lIE1ZUkkxMEdFX0FMTE9DX09SREVSIDAKKyNkZWZpbmUgTVlSSTEwR0VfQUxMT0NfU0laRSAoKDEgPDwgTVlSSTEwR0VfQUxMT0NfT1JERVIpICogUEFHRV9TSVpFKQorI2RlZmluZSBNWVJJMTBHRV9NQVhfRlJBR1NfUEVSX0ZSQU1FIChNWVJJMTBHRV9NQVhfRVRIRVJfTVRVL01ZUkkxMEdFX0FMTE9DX1NJWkUgKyAxKQorCiBzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmZmVyX3N0YXRlIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBwYWdlX29mZnNldDsKIAkgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihidXMpCiAJIERFQ0xBUkVfUENJX1VOTUFQX0xFTihsZW4pCiB9OwpAQCAtMTE2LDkgKzEyMSwxNCBAQAogCXU4IF9faW9tZW0gKndjX2ZpZm87CS8qIHcvYyByeCBkbWEgYWRkciBmaWZvIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgbWNwX2tyZXFfZXRoZXJfcmVjdiAqc2hhZG93OwkvKiBob3N0IHNoYWRvdyBvZiByZWN2IHJpbmcgKi8KIAlzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmZmVyX3N0YXRlICppbmZvOworCXN0cnVjdCBwYWdlICpwYWdlOworCWRtYV9hZGRyX3QgYnVzOworCWludCBwYWdlX29mZnNldDsKIAlpbnQgY250OworCWludCBmaWxsX2NudDsKIAlpbnQgYWxsb2NfZmFpbDsKIAlpbnQgbWFzazsJCS8qIG51bWJlciBvZiByeCBzbG90cyAtMSAqLworCWludCB3YXRjaGRvZ19uZWVkZWQ7CiB9OwogCiBzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmIHsKQEAgLTE1MCw2ICsxNjAsNyBAQAogCXN0cnVjdCBteXJpMTBnZV9yeF9idWYgcnhfYmlnOwogCXN0cnVjdCBteXJpMTBnZV9yeF9kb25lIHJ4X2RvbmU7CiAJaW50IHNtYWxsX2J5dGVzOworCWludCBiaWdfYnl0ZXM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAl1OCBfX2lvbWVtICpzcmFtOwpAQCAtMTg4LDggKzE5OSw2IEBACiAJdW5zaWduZWQgbG9uZyBzZXJpYWxfbnVtYmVyOwogCWludCB2ZW5kb3Jfc3BlY2lmaWNfb2Zmc2V0OwogCWludCBmd19tdWx0aWNhc3Rfc3VwcG9ydDsKLQl1MzIgZGV2Y3RsOwotCXUxNiBtc2lfZmxhZ3M7CiAJdTMyIHJlYWRfZG1hOwogCXUzMiB3cml0ZV9kbWE7CiAJdTMyIHJlYWRfd3JpdGVfZG1hOwpAQCAtMjE3LDcgKzIyNiw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX3NtYWxsX2J5dGVzLCAiVGhyZXNob2xkIG9mIHNtYWxsIHBhY2tldHNcbiIpOwogCiBzdGF0aWMgaW50IG15cmkxMGdlX21zaSA9IDE7CS8qIGVuYWJsZSBtc2kgYnkgZGVmYXVsdCAqLwotbW9kdWxlX3BhcmFtKG15cmkxMGdlX21zaSwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShteXJpMTBnZV9tc2ksIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9tc2ksICJFbmFibGUgTWVzc2FnZSBTaWduYWxsZWQgSW50ZXJydXB0c1xuIik7CiAKIHN0YXRpYyBpbnQgbXlyaTEwZ2VfaW50cl9jb2FsX2RlbGF5ID0gMjU7CkBAIC0yMzgsMTEgKzI0Nyw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX2ZvcmNlX2Zpcm13YXJlLAogCQkgIkZvcmNlIGZpcm13YXJlIHRvIGFzc3VtZSBhbGlnbmVkIGNvbXBsZXRpb25zXG4iKTsKIAotc3RhdGljIGludCBteXJpMTBnZV9za2JfY3Jvc3NfNGsgPSAwOwotbW9kdWxlX3BhcmFtKG15cmkxMGdlX3NrYl9jcm9zc180aywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX3NrYl9jcm9zc180aywKLQkJICJDYW4gYSBzbWFsbCBza2IgY3Jvc3MgYSA0S0IgYm91bmRhcnk/XG4iKTsKLQogc3RhdGljIGludCBteXJpMTBnZV9pbml0aWFsX210dSA9IE1ZUkkxMEdFX01BWF9FVEhFUl9NVFUgLSBFVEhfSExFTjsKIG1vZHVsZV9wYXJhbShteXJpMTBnZV9pbml0aWFsX210dSwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfaW5pdGlhbF9tdHUsICJJbml0aWFsIE1UVVxuIik7CkBAIC0yNjYsNiArMjcwLDE0IEBACiBtb2R1bGVfcGFyYW0obXlyaTEwZ2VfZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX2RlYnVnLCAiRGVidWcgbGV2ZWwgKDA9bm9uZSwuLi4sMTY9YWxsKSIpOwogCitzdGF0aWMgaW50IG15cmkxMGdlX2ZpbGxfdGhyZXNoID0gMjU2OworbW9kdWxlX3BhcmFtKG15cmkxMGdlX2ZpbGxfdGhyZXNoLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfZmlsbF90aHJlc2gsICJOdW1iZXIgb2YgZW1wdHkgcnggc2xvdHMgYWxsb3dlZFxuIik7CisKK3N0YXRpYyBpbnQgbXlyaTEwZ2Vfd2NmaWZvID0gMTsKK21vZHVsZV9wYXJhbShteXJpMTBnZV93Y2ZpZm8sIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG15cmkxMGdlX3djZmlmbywgIkVuYWJsZSBXQyBGaWZvIHdoZW4gV0MgaXMgZW5hYmxlZFxuIik7CisKICNkZWZpbmUgTVlSSTEwR0VfRldfT0ZGU0VUIDEwMjQqMTAyNAogI2RlZmluZSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIoWCkgXAogKHNpemVvZiAoWCkgPT0gOCkgPyAoKHUzMikoKHU2NCkoWCkgPj4gMzIpKSA6ICgwKQpAQCAtMjczLDkgKzI4NSw5IEBACiAKICNkZWZpbmUgbXlyaTEwZ2VfcGlvX2NvcHkodG8sZnJvbSxzaXplKSBfX2lvd3JpdGU2NF9jb3B5KHRvLGZyb20sc2l6ZS84KQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0X2JlMzIoX19iZTMyIHZhbCwgX19iZTMyIF9faW9tZW0gKnApCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2JlMzIoX19iZTMyIHZhbCwgX19iZTMyIF9faW9tZW0gKiBwKQogewotCV9fcmF3X3dyaXRlbCgoX19mb3JjZSBfX3UzMil2YWwsIChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKXApOworCV9fcmF3X3dyaXRlbCgoX19mb3JjZSBfX3UzMikgdmFsLCAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilwKTsKIH0KIAogc3RhdGljIGludApAQCAtNzExLDEyICs3MjMsMTAgQEAKIAlzdGF0dXMgfD0KIAkgICAgbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9JUlFfQUNLX09GRlNFVCwgJmNtZCwgMCk7CiAJbWdwLT5pcnFfY2xhaW0gPSAoX19pb21lbSBfX2JlMzIgKikgKG1ncC0+c3JhbSArIGNtZC5kYXRhMCk7Ci0JaWYgKCFtZ3AtPm1zaV9lbmFibGVkKSB7Ci0JCXN0YXR1cyB8PSBteXJpMTBnZV9zZW5kX2NtZAotCQkgICAgKG1ncCwgTVhHRUZXX0NNRF9HRVRfSVJRX0RFQVNTRVJUX09GRlNFVCwgJmNtZCwgMCk7Ci0JCW1ncC0+aXJxX2RlYXNzZXJ0ID0gKF9faW9tZW0gX19iZTMyICopIChtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOworCXN0YXR1cyB8PSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfR0VUX0lSUV9ERUFTU0VSVF9PRkZTRVQsCisJCQkJICAgICZjbWQsIDApOworCW1ncC0+aXJxX2RlYXNzZXJ0ID0gKF9faW9tZW0gX19iZTMyICopIChtZ3AtPnNyYW0gKyBjbWQuZGF0YTApOwogCi0JfQogCXN0YXR1cyB8PSBteXJpMTBnZV9zZW5kX2NtZAogCSAgICAobWdwLCBNWEdFRldfQ01EX0dFVF9JTlRSX0NPQUxfREVMQVlfT0ZGU0VULCAmY21kLCAwKTsKIAltZ3AtPmludHJfY29hbF9kZWxheV9wdHIgPSAoX19pb21lbSBfX2JlMzIgKikgKG1ncC0+c3JhbSArIGNtZC5kYXRhMCk7CkBAIC04MDQsMTQ4ICs4MTQsNiBAQAogCW1iKCk7CiB9CiAKLS8qCi0gKiBTZXQgb2Ygcm91dGluZXMgdG8gZ2V0IGEgbmV3IHJlY2VpdmUgYnVmZmVyLiAgQW55IGJ1ZmZlciB3aGljaAotICogY3Jvc3NlcyBhIDRLQiBib3VuZGFyeSBtdXN0IHN0YXJ0IG9uIGEgNEtCIGJvdW5kYXJ5IGR1ZSB0byBQQ0llCi0gKiB3ZG1hIHJlc3RyaWN0aW9ucy4gV2UgYWxzbyB0cnkgdG8gYWxpZ24gYW55IHNtYWxsZXIgYWxsb2NhdGlvbiB0bwotICogYXQgbGVhc3QgYSAxNiBieXRlIGJvdW5kYXJ5IGZvciBlZmZpY2llbmN5LiAgV2UgYXNzdW1lIHRoZSBsaW51eAotICogbWVtb3J5IGFsbG9jYXRvciB3b3JrcyBieSBwb3dlcnMgb2YgMiwgYW5kIHdpbGwgbm90IHJldHVybiBtZW1vcnkKLSAqIHNtYWxsZXIgdGhhbiAyS0Igd2hpY2ggY3Jvc3NlcyBhIDRLQiBib3VuZGFyeS4gIElmIGl0IGRvZXMsIHdlIGZhbGwKLSAqIGJhY2sgdG8gYWxsb2NhdGluZyAyeCBhcyBtdWNoIHNwYWNlIGFzIHJlcXVpcmVkLgotICoKLSAqIFdlIGludGVuZCB0byByZXBsYWNlIGxhcmdlICg+NEtCKSBza2IgYWxsb2NhdGlvbnMgYnkgdXNpbmcKLSAqIHBhZ2VzIGRpcmVjdGx5IGFuZCBidWlsZGluZyBhIGZyYWdsaXN0IGluIHRoZSBuZWFyIGZ1dHVyZS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpteXJpMTBnZV9hbGxvY19iaWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJCSBpbnQgYnl0ZXMpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsb25nIGRhdGEsIHJvdW5kdXA7Ci0KLQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgYnl0ZXMgKyA0MDk2ICsgTVhHRUZXX1BBRCk7Ci0JaWYgKHNrYiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIENvcnJlY3Qgc2tiLT50cnVlc2l6ZSBzbyB0aGF0IHNvY2tldCBidWZmZXIKLQkgKiBhY2NvdW50aW5nIGlzIG5vdCBjb25mdXNlZCB0aGUgcm91bmRpbmcgd2UgbXVzdAotCSAqIGRvIHRvIHNhdGlzZnkgYWxpZ25tZW50IGNvbnN0cmFpbnRzLgotCSAqLwotCXNrYi0+dHJ1ZXNpemUgLT0gNDA5NjsKLQotCWRhdGEgPSAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhKTsKLQlyb3VuZHVwID0gKC1kYXRhKSAmICg0MDk1KTsKLQlza2JfcmVzZXJ2ZShza2IsIHJvdW5kdXApOwotCXJldHVybiBza2I7Ci19Ci0KLS8qIEFsbG9jYXRlIDJ4IGFzIG11Y2ggc3BhY2UgYXMgcmVxdWlyZWQgYW5kIHVzZSB3aGljaGV2ZXIgcG9ydGlvbgotICogZG9lcyBub3QgY3Jvc3MgYSA0S0IgYm91bmRhcnkgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm15cmkxMGdlX2FsbG9jX3NtYWxsX3NhZmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJCQl1bnNpZ25lZCBpbnQgYnl0ZXMpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsb25nIGRhdGEsIGJvdW5kYXJ5OwotCi0Jc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIDIgKiAoYnl0ZXMgKyBNWEdFRldfUEFEKSAtIDEpOwotCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCi0JCXJldHVybiBOVUxMOwotCi0JLyogQ29ycmVjdCBza2ItPnRydWVzaXplIHNvIHRoYXQgc29ja2V0IGJ1ZmZlcgotCSAqIGFjY291bnRpbmcgaXMgbm90IGNvbmZ1c2VkIHRoZSByb3VuZGluZyB3ZSBtdXN0Ci0JICogZG8gdG8gc2F0aXNmeSBhbGlnbm1lbnQgY29uc3RyYWludHMuCi0JICovCi0Jc2tiLT50cnVlc2l6ZSAtPSBieXRlcyArIE1YR0VGV19QQUQ7Ci0KLQlkYXRhID0gKHVuc2lnbmVkIGxvbmcpKHNrYi0+ZGF0YSk7Ci0JYm91bmRhcnkgPSAoZGF0YSArIDQwOTVVTCkgJiB+NDA5NVVMOwotCWlmICgoYm91bmRhcnkgLSBkYXRhKSA+PSAoYnl0ZXMgKyBNWEdFRldfUEFEKSkKLQkJcmV0dXJuIHNrYjsKLQotCXNrYl9yZXNlcnZlKHNrYiwgYm91bmRhcnkgLSBkYXRhKTsKLQlyZXR1cm4gc2tiOwotfQotCi0vKiBBbGxvY2F0ZSBqdXN0IGVub3VnaCBzcGFjZSwgYW5kIHZlcmlmeSB0aGF0IHRoZSBhbGxvY2F0ZWQKLSAqIHNwYWNlIGRvZXMgbm90IGNyb3NzIGEgNEtCIGJvdW5kYXJ5ICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpteXJpMTBnZV9hbGxvY19zbWFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkJICAgaW50IGJ5dGVzKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgbG9uZyByb3VuZHVwLCBkYXRhLCBlbmQ7Ci0KLQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgYnl0ZXMgKyAxNiArIE1YR0VGV19QQUQpOwotCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCi0JCXJldHVybiBOVUxMOwotCi0JLyogUm91bmQgYWxsb2NhdGVkIGJ1ZmZlciB0byAxNiBieXRlIGJvdW5kYXJ5ICovCi0JZGF0YSA9ICh1bnNpZ25lZCBsb25nKShza2ItPmRhdGEpOwotCXJvdW5kdXAgPSAoLWRhdGEpICYgMTVVTDsKLQlza2JfcmVzZXJ2ZShza2IsIHJvdW5kdXApOwotCS8qIFZlcmlmeSB0aGF0IHRoZSBkYXRhIGJ1ZmZlciBkb2VzIG5vdCBjcm9zcyBhIHBhZ2UgYm91bmRhcnkgKi8KLQlkYXRhID0gKHVuc2lnbmVkIGxvbmcpKHNrYi0+ZGF0YSk7Ci0JZW5kID0gZGF0YSArIGJ5dGVzICsgTVhHRUZXX1BBRCAtIDE7Ci0JaWYgKHVubGlrZWx5KCgoZW5kID4+IDEyKSAhPSAoZGF0YSA+PiAxMikpICYmIChkYXRhICYgNDA5NVVMKSkpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFCi0JCSAgICAgICAibXlyaTEwZ2VfYWxsb2Nfc21hbGw6IHNtYWxsIHNrYiBjcm9zc2VkIDRLQiBib3VuZGFyeVxuIik7Ci0JCW15cmkxMGdlX3NrYl9jcm9zc180ayA9IDE7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXNrYiA9IG15cmkxMGdlX2FsbG9jX3NtYWxsX3NhZmUoZGV2LCBieXRlcyk7Ci0JfQotCXJldHVybiBza2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1teXJpMTBnZV9nZXRidWYoc3RydWN0IG15cmkxMGdlX3J4X2J1ZiAqcngsIHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AsCi0JCWludCBieXRlcywgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbWdwLT5kZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtZ3AtPnBkZXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlkbWFfYWRkcl90IGJ1czsKLQlpbnQgbGVuLCByZXR2YWwgPSAwOwotCi0JYnl0ZXMgKz0gVkxBTl9ITEVOOwkvKiBhY2NvdW50IGZvciA4MDIuMXEgdmxhbiB0YWcgKi8KLQotCWlmICgoYnl0ZXMgKyBNWEdFRldfUEFEKSA+ICg0MDk2IC0gMTYpIC8qIGxpbnV4IG92ZXJoZWFkICovICkKLQkJc2tiID0gbXlyaTEwZ2VfYWxsb2NfYmlnKGRldiwgYnl0ZXMpOwotCWVsc2UgaWYgKG15cmkxMGdlX3NrYl9jcm9zc180aykKLQkJc2tiID0gbXlyaTEwZ2VfYWxsb2Nfc21hbGxfc2FmZShkZXYsIGJ5dGVzKTsKLQllbHNlCi0JCXNrYiA9IG15cmkxMGdlX2FsbG9jX3NtYWxsKGRldiwgYnl0ZXMpOwotCi0JaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgewotCQlyeC0+YWxsb2NfZmFpbCsrOwotCQlyZXR2YWwgPSAtRU5PQlVGUzsKLQkJZ290byBkb25lOwotCX0KLQotCS8qIHNldCBsZW4gc28gdGhhdCBpdCBvbmx5IGNvdmVycyB0aGUgYXJlYSB3ZQotCSAqIG5lZWQgbWFwcGVkIGZvciBETUEgKi8KLQlsZW4gPSBieXRlcyArIE1YR0VGV19QQUQ7Ci0KLQlidXMgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIGxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlyeC0+aW5mb1tpZHhdLnNrYiA9IHNrYjsKLQlwY2lfdW5tYXBfYWRkcl9zZXQoJnJ4LT5pbmZvW2lkeF0sIGJ1cywgYnVzKTsKLQlwY2lfdW5tYXBfbGVuX3NldCgmcngtPmluZm9baWR4XSwgbGVuLCBsZW4pOwotCXJ4LT5zaGFkb3dbaWR4XS5hZGRyX2xvdyA9IGh0b25sKE1ZUkkxMEdFX0xPV1BBUlRfVE9fVTMyKGJ1cykpOwotCXJ4LT5zaGFkb3dbaWR4XS5hZGRyX2hpZ2ggPSBodG9ubChNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIoYnVzKSk7Ci0KLWRvbmU6Ci0JLyogY29weSA4IGRlc2NyaXB0b3JzICg2NC1ieXRlcykgdG8gdGhlIG1jcCBhdCBhIHRpbWUgKi8KLQlpZiAoKGlkeCAmIDcpID09IDcpIHsKLQkJaWYgKHJ4LT53Y19maWZvID09IE5VTEwpCi0JCQlteXJpMTBnZV9zdWJtaXRfOHJ4KCZyeC0+bGFuYWlbaWR4IC0gN10sCi0JCQkJCSAgICAmcngtPnNoYWRvd1tpZHggLSA3XSk7Ci0JCWVsc2UgewotCQkJbWIoKTsKLQkJCW15cmkxMGdlX3Bpb19jb3B5KHJ4LT53Y19maWZvLAotCQkJCQkgICZyeC0+c2hhZG93W2lkeCAtIDddLCA2NCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIG15cmkxMGdlX3ZsYW5faXBfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3dzdW0gaHdfY3N1bSkKIHsKIAlzdHJ1Y3Qgdmxhbl9oZHIgKnZoID0gKHN0cnVjdCB2bGFuX2hkciAqKShza2ItPmRhdGEpOwpAQCAtOTU4LDQwICs4MjYsMTY3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3N0YXRpYyBpbmxpbmUgdm9pZAorbXlyaTEwZ2Vfcnhfc2tiX2J1aWxkKHN0cnVjdCBza19idWZmICpza2IsIHU4ICogdmEsCisJCSAgICAgIHN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnJ4X2ZyYWdzLCBpbnQgbGVuLCBpbnQgaGxlbikKK3sKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpza2JfZnJhZ3M7CisKKwlza2ItPmxlbiA9IHNrYi0+ZGF0YV9sZW4gPSBsZW47CisJc2tiLT50cnVlc2l6ZSA9IGxlbiArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7CisJLyogYXR0YWNoIHRoZSBwYWdlKHMpICovCisKKwlza2JfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzOworCXdoaWxlIChsZW4gPiAwKSB7CisJCW1lbWNweShza2JfZnJhZ3MsIHJ4X2ZyYWdzLCBzaXplb2YoKnNrYl9mcmFncykpOworCQlsZW4gLT0gcnhfZnJhZ3MtPnNpemU7CisJCXNrYl9mcmFncysrOworCQlyeF9mcmFncysrOworCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKys7CisJfQorCisJLyogcHNrYl9tYXlfcHVsbCBpcyBub3QgYXZhaWxhYmxlIGluIGlycSBjb250ZXh0LCBidXQKKwkgKiBza2JfcHVsbCgpIChmb3IgZXRoZXJfcGFkIGFuZCBldGhfdHlwZV90cmFucygpKSByZXF1aXJlcworCSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhY2tldCBpbiBza2JfaGVhZGxlbigpLCBtb3ZlIGl0CisJICogbWFudWFsbHkgKi8KKwltZW1jcHkoc2tiLT5kYXRhLCB2YSwgaGxlbik7CisJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArPSBobGVuOworCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSAtPSBobGVuOworCXNrYi0+ZGF0YV9sZW4gLT0gaGxlbjsKKwlza2ItPnRhaWwgKz0gaGxlbjsKKwlza2JfcHVsbChza2IsIE1YR0VGV19QQUQpOworfQorCitzdGF0aWMgdm9pZAorbXlyaTEwZ2VfYWxsb2NfcnhfcGFnZXMoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCwgc3RydWN0IG15cmkxMGdlX3J4X2J1ZiAqcngsCisJCQlpbnQgYnl0ZXMsIGludCB3YXRjaGRvZykKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgaWR4OworCisJaWYgKHVubGlrZWx5KHJ4LT53YXRjaGRvZ19uZWVkZWQgJiYgIXdhdGNoZG9nKSkKKwkJcmV0dXJuOworCisJLyogdHJ5IHRvIHJlZmlsbCBlbnRpcmUgcmluZyAqLworCXdoaWxlIChyeC0+ZmlsbF9jbnQgIT0gKHJ4LT5jbnQgKyByeC0+bWFzayArIDEpKSB7CisJCWlkeCA9IHJ4LT5maWxsX2NudCAmIHJ4LT5tYXNrOworCisJCWlmICgoYnl0ZXMgPCBNWVJJMTBHRV9BTExPQ19TSVpFIC8gMikgJiYKKwkJICAgIChyeC0+cGFnZV9vZmZzZXQgKyBieXRlcyA8PSBNWVJJMTBHRV9BTExPQ19TSVpFKSkgeworCQkJLyogd2UgY2FuIHVzZSBwYXJ0IG9mIHByZXZpb3VzIHBhZ2UgKi8KKwkJCWdldF9wYWdlKHJ4LT5wYWdlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHdlIG5lZWQgYSBuZXcgcGFnZSAqLworCQkJcGFnZSA9CisJCQkgICAgYWxsb2NfcGFnZXMoR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVAsCisJCQkJCU1ZUkkxMEdFX0FMTE9DX09SREVSKTsKKwkJCWlmICh1bmxpa2VseShwYWdlID09IE5VTEwpKSB7CisJCQkJaWYgKHJ4LT5maWxsX2NudCAtIHJ4LT5jbnQgPCAxNikKKwkJCQkJcngtPndhdGNoZG9nX25lZWRlZCA9IDE7CisJCQkJcmV0dXJuOworCQkJfQorCQkJcngtPnBhZ2UgPSBwYWdlOworCQkJcngtPnBhZ2Vfb2Zmc2V0ID0gMDsKKwkJCXJ4LT5idXMgPSBwY2lfbWFwX3BhZ2UobWdwLT5wZGV2LCBwYWdlLCAwLAorCQkJCQkgICAgICAgTVlSSTEwR0VfQUxMT0NfU0laRSwKKwkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCX0KKwkJcngtPmluZm9baWR4XS5wYWdlID0gcngtPnBhZ2U7CisJCXJ4LT5pbmZvW2lkeF0ucGFnZV9vZmZzZXQgPSByeC0+cGFnZV9vZmZzZXQ7CisJCS8qIG5vdGUgdGhhdCB0aGlzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiB0aGUKKwkJICogcGFnZSAqLworCQlwY2lfdW5tYXBfYWRkcl9zZXQoJnJ4LT5pbmZvW2lkeF0sIGJ1cywgcngtPmJ1cyk7CisJCXJ4LT5zaGFkb3dbaWR4XS5hZGRyX2xvdyA9CisJCSAgICBodG9ubChNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihyeC0+YnVzKSArIHJ4LT5wYWdlX29mZnNldCk7CisJCXJ4LT5zaGFkb3dbaWR4XS5hZGRyX2hpZ2ggPQorCQkgICAgaHRvbmwoTVlSSTEwR0VfSElHSFBBUlRfVE9fVTMyKHJ4LT5idXMpKTsKKworCQkvKiBzdGFydCBuZXh0IHBhY2tldCBvbiBhIGNhY2hlbGluZSBib3VuZGFyeSAqLworCQlyeC0+cGFnZV9vZmZzZXQgKz0gU0tCX0RBVEFfQUxJR04oYnl0ZXMpOworCQlyeC0+ZmlsbF9jbnQrKzsKKworCQkvKiBjb3B5IDggZGVzY3JpcHRvcnMgdG8gdGhlIGZpcm13YXJlIGF0IGEgdGltZSAqLworCQlpZiAoKGlkeCAmIDcpID09IDcpIHsKKwkJCWlmIChyeC0+d2NfZmlmbyA9PSBOVUxMKQorCQkJCW15cmkxMGdlX3N1Ym1pdF84cngoJnJ4LT5sYW5haVtpZHggLSA3XSwKKwkJCQkJCSAgICAmcngtPnNoYWRvd1tpZHggLSA3XSk7CisJCQllbHNlIHsKKwkJCQltYigpOworCQkJCW15cmkxMGdlX3Bpb19jb3B5KHJ4LT53Y19maWZvLAorCQkJCQkJICAmcngtPnNoYWRvd1tpZHggLSA3XSwgNjQpOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK215cmkxMGdlX3VubWFwX3J4X3BhZ2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCSAgICAgICBzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmZmVyX3N0YXRlICppbmZvLCBpbnQgYnl0ZXMpCit7CisJLyogdW5tYXAgdGhlIHJlY3ZkIHBhZ2UgaWYgd2UncmUgdGhlIG9ubHkgb3IgbGFzdCB1c2VyIG9mIGl0ICovCisJaWYgKGJ5dGVzID49IE1ZUkkxMEdFX0FMTE9DX1NJWkUgLyAyIHx8CisJICAgIChpbmZvLT5wYWdlX29mZnNldCArIDIgKiBieXRlcykgPiBNWVJJMTBHRV9BTExPQ19TSVpFKSB7CisJCXBjaV91bm1hcF9wYWdlKHBkZXYsIChwY2lfdW5tYXBfYWRkcihpbmZvLCBidXMpCisJCQkJICAgICAgJiB+KE1ZUkkxMEdFX0FMTE9DX1NJWkUgLSAxKSksCisJCQkgICAgICAgTVlSSTEwR0VfQUxMT0NfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwl9Cit9CisKKyNkZWZpbmUgTVlSSTEwR0VfSExFTiA2NAkvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgZnJvbSBhCisJCQkJICogcGFnZSBpbnRvIGFuIHNrYiAqLworCitzdGF0aWMgaW5saW5lIGludAogbXlyaTEwZ2VfcnhfZG9uZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwLCBzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmICpyeCwKIAkJIGludCBieXRlcywgaW50IGxlbiwgX193c3VtIGNzdW0pCiB7Ci0JZG1hX2FkZHJfdCBidXM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgaWR4LCB1bm1hcF9sZW47CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCByeF9mcmFnc1tNWVJJMTBHRV9NQVhfRlJBR1NfUEVSX0ZSQU1FXTsKKwlpbnQgaSwgaWR4LCBobGVuLCByZW1haW5kZXI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBtZ3AtPnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1ncC0+ZGV2OworCXU4ICp2YTsKIAorCWxlbiArPSBNWEdFRldfUEFEOwogCWlkeCA9IHJ4LT5jbnQgJiByeC0+bWFzazsKLQlyeC0+Y250Kys7CisJdmEgPSBwYWdlX2FkZHJlc3MocngtPmluZm9baWR4XS5wYWdlKSArIHJ4LT5pbmZvW2lkeF0ucGFnZV9vZmZzZXQ7CisJcHJlZmV0Y2godmEpOworCS8qIEZpbGwgc2tiX2ZyYWdfc3RydWN0KHMpIHdpdGggZGF0YSBmcm9tIG91ciByZWNlaXZlICovCisJZm9yIChpID0gMCwgcmVtYWluZGVyID0gbGVuOyByZW1haW5kZXIgPiAwOyBpKyspIHsKKwkJbXlyaTEwZ2VfdW5tYXBfcnhfcGFnZShwZGV2LCAmcngtPmluZm9baWR4XSwgYnl0ZXMpOworCQlyeF9mcmFnc1tpXS5wYWdlID0gcngtPmluZm9baWR4XS5wYWdlOworCQlyeF9mcmFnc1tpXS5wYWdlX29mZnNldCA9IHJ4LT5pbmZvW2lkeF0ucGFnZV9vZmZzZXQ7CisJCWlmIChyZW1haW5kZXIgPCBNWVJJMTBHRV9BTExPQ19TSVpFKQorCQkJcnhfZnJhZ3NbaV0uc2l6ZSA9IHJlbWFpbmRlcjsKKwkJZWxzZQorCQkJcnhfZnJhZ3NbaV0uc2l6ZSA9IE1ZUkkxMEdFX0FMTE9DX1NJWkU7CisJCXJ4LT5jbnQrKzsKKwkJaWR4ID0gcngtPmNudCAmIHJ4LT5tYXNrOworCQlyZW1haW5kZXIgLT0gTVlSSTEwR0VfQUxMT0NfU0laRTsKKwl9CiAKLQkvKiBzYXZlIGEgcG9pbnRlciB0byB0aGUgcmVjZWl2ZWQgc2tiICovCi0Jc2tiID0gcngtPmluZm9baWR4XS5za2I7Ci0JYnVzID0gcGNpX3VubWFwX2FkZHIoJnJ4LT5pbmZvW2lkeF0sIGJ1cyk7Ci0JdW5tYXBfbGVuID0gcGNpX3VubWFwX2xlbigmcngtPmluZm9baWR4XSwgbGVuKTsKKwlobGVuID0gTVlSSTEwR0VfSExFTiA+IGxlbiA/IGxlbiA6IE1ZUkkxMEdFX0hMRU47CiAKLQkvKiB0cnkgdG8gcmVwbGFjZSB0aGUgcmVjZWl2ZWQgc2tiICovCi0JaWYgKG15cmkxMGdlX2dldGJ1ZihyeCwgbWdwLCBieXRlcywgaWR4KSkgewotCQkvKiBkcm9wIHRoZSBmcmFtZSAtLSB0aGUgb2xkIHNrYnVmIGlzIHJlLWN5Y2xlZCAqLwotCQltZ3AtPnN0YXRzLnJ4X2Ryb3BwZWQgKz0gMTsKKwkvKiBhbGxvY2F0ZSBhbiBza2IgdG8gYXR0YWNoIHRoZSBwYWdlKHMpIHRvLiAqLworCisJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIE1ZUkkxMEdFX0hMRU4gKyAxNik7CisJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgeworCQltZ3AtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZG8geworCQkJaS0tOworCQkJcHV0X3BhZ2UocnhfZnJhZ3NbaV0ucGFnZSk7CisJCX0gd2hpbGUgKGkgIT0gMCk7CiAJCXJldHVybiAwOwogCX0KIAotCS8qIHVubWFwIHRoZSByZWN2ZCBza2IgKi8KLQlwY2lfdW5tYXBfc2luZ2xlKG1ncC0+cGRldiwgYnVzLCB1bm1hcF9sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJLyogQXR0YWNoIHRoZSBwYWdlcyB0byB0aGUgc2tiLCBhbmQgdHJpbSBvZmYgYW55IHBhZGRpbmcgKi8KKwlteXJpMTBnZV9yeF9za2JfYnVpbGQoc2tiLCB2YSwgcnhfZnJhZ3MsIGxlbiwgaGxlbik7CisJaWYgKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSA8PSAwKSB7CisJCXB1dF9wYWdlKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSk7CisJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPSAwOworCX0KKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCXNrYi0+ZGV2ID0gZGV2OwogCi0JLyogbWNwIGltcGxpY2l0bHkgc2tpcHMgMXN0IGJ5dGVzIHNvIHRoYXQgcGFja2V0IGlzIHByb3Blcmx5Ci0JICogYWxpZ25lZCAqLwotCXNrYl9yZXNlcnZlKHNrYiwgTVhHRUZXX1BBRCk7Ci0KLQkvKiBzZXQgdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgKi8KLQlza2JfcHV0KHNrYiwgbGVuKTsKLQotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG1ncC0+ZGV2KTsKIAlpZiAobWdwLT5jc3VtX2ZsYWcpIHsKIAkJaWYgKChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgfHwKIAkJICAgIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSkgewpAQCAtMTAwMCw5ICs5OTUsOCBAQAogCQl9IGVsc2UKIAkJCW15cmkxMGdlX3ZsYW5faXBfY3N1bShza2IsIGNzdW0pOwogCX0KLQogCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0JbWdwLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEwNzksNyArMTA3Myw3IEBACiAJCQkJCQkgbGVuZ3RoLCBjaGVja3N1bSk7CiAJCWVsc2UKIAkJCXJ4X29rID0gbXlyaTEwZ2VfcnhfZG9uZShtZ3AsICZtZ3AtPnJ4X2JpZywKLQkJCQkJCSBtZ3AtPmRldi0+bXR1ICsgRVRIX0hMRU4sCisJCQkJCQkgbWdwLT5iaWdfYnl0ZXMsCiAJCQkJCQkgbGVuZ3RoLCBjaGVja3N1bSk7CiAJCXJ4X3BhY2tldHMgKz0gcnhfb2s7CiAJCXJ4X2J5dGVzICs9IHJ4X29rICogKHVuc2lnbmVkIGxvbmcpbGVuZ3RoOwpAQCAtMTA5NCw2ICsxMDg4LDE0IEBACiAJcnhfZG9uZS0+Y250ID0gY250OwogCW1ncC0+c3RhdHMucnhfcGFja2V0cyArPSByeF9wYWNrZXRzOwogCW1ncC0+c3RhdHMucnhfYnl0ZXMgKz0gcnhfYnl0ZXM7CisKKwkvKiByZXN0b2NrIHJlY2VpdmUgcmluZ3MgaWYgbmVlZGVkICovCisJaWYgKG1ncC0+cnhfc21hbGwuZmlsbF9jbnQgLSBtZ3AtPnJ4X3NtYWxsLmNudCA8IG15cmkxMGdlX2ZpbGxfdGhyZXNoKQorCQlteXJpMTBnZV9hbGxvY19yeF9wYWdlcyhtZ3AsICZtZ3AtPnJ4X3NtYWxsLAorCQkJCQltZ3AtPnNtYWxsX2J5dGVzICsgTVhHRUZXX1BBRCwgMCk7CisJaWYgKG1ncC0+cnhfYmlnLmZpbGxfY250IC0gbWdwLT5yeF9iaWcuY250IDwgbXlyaTEwZ2VfZmlsbF90aHJlc2gpCisJCW15cmkxMGdlX2FsbG9jX3J4X3BhZ2VzKG1ncCwgJm1ncC0+cnhfYmlnLCBtZ3AtPmJpZ19ieXRlcywgMCk7CisKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG15cmkxMGdlX2NoZWNrX3N0YXRibG9jayhzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQpAQCAtMTQ4NCw1NiArMTQ4Niw0OCBAQAogCQlnb3RvIGFib3J0X3dpdGhfcnhfc21hbGxfaW5mbzsKIAogCS8qIEZpbGwgdGhlIHJlY2VpdmUgcmluZ3MgKi8KKwltZ3AtPnJ4X2JpZy5jbnQgPSAwOworCW1ncC0+cnhfc21hbGwuY250ID0gMDsKKwltZ3AtPnJ4X2JpZy5maWxsX2NudCA9IDA7CisJbWdwLT5yeF9zbWFsbC5maWxsX2NudCA9IDA7CisJbWdwLT5yeF9zbWFsbC5wYWdlX29mZnNldCA9IE1ZUkkxMEdFX0FMTE9DX1NJWkU7CisJbWdwLT5yeF9iaWcucGFnZV9vZmZzZXQgPSBNWVJJMTBHRV9BTExPQ19TSVpFOworCW1ncC0+cnhfc21hbGwud2F0Y2hkb2dfbmVlZGVkID0gMDsKKwltZ3AtPnJ4X2JpZy53YXRjaGRvZ19uZWVkZWQgPSAwOworCW15cmkxMGdlX2FsbG9jX3J4X3BhZ2VzKG1ncCwgJm1ncC0+cnhfc21hbGwsCisJCQkJbWdwLT5zbWFsbF9ieXRlcyArIE1YR0VGV19QQUQsIDApOwogCi0JZm9yIChpID0gMDsgaSA8PSBtZ3AtPnJ4X3NtYWxsLm1hc2s7IGkrKykgewotCQlzdGF0dXMgPSBteXJpMTBnZV9nZXRidWYoJm1ncC0+cnhfc21hbGwsIG1ncCwKLQkJCQkJIG1ncC0+c21hbGxfYnl0ZXMsIGkpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBhbGxvY2VkIG9ubHkgJWQgc21hbGwgYnVmc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGkpOwotCQkJZ290byBhYm9ydF93aXRoX3J4X3NtYWxsX3Jpbmc7Ci0JCX0KKwlpZiAobWdwLT5yeF9zbWFsbC5maWxsX2NudCA8IG1ncC0+cnhfc21hbGwubWFzayArIDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IGFsbG9jZWQgb25seSAlZCBzbWFsbCBidWZzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBtZ3AtPnJ4X3NtYWxsLmZpbGxfY250KTsKKwkJZ290byBhYm9ydF93aXRoX3J4X3NtYWxsX3Jpbmc7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8PSBtZ3AtPnJ4X2JpZy5tYXNrOyBpKyspIHsKLQkJc3RhdHVzID0KLQkJICAgIG15cmkxMGdlX2dldGJ1ZigmbWdwLT5yeF9iaWcsIG1ncCwgZGV2LT5tdHUgKyBFVEhfSExFTiwgaSk7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJteXJpMTBnZTogJXM6IGFsbG9jZWQgb25seSAlZCBiaWcgYnVmc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGkpOwotCQkJZ290byBhYm9ydF93aXRoX3J4X2JpZ19yaW5nOwotCQl9CisJbXlyaTEwZ2VfYWxsb2NfcnhfcGFnZXMobWdwLCAmbWdwLT5yeF9iaWcsIG1ncC0+YmlnX2J5dGVzLCAwKTsKKwlpZiAobWdwLT5yeF9iaWcuZmlsbF9jbnQgPCBtZ3AtPnJ4X2JpZy5tYXNrICsgMSkgeworCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogYWxsb2NlZCBvbmx5ICVkIGJpZyBidWZzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBtZ3AtPnJ4X2JpZy5maWxsX2NudCk7CisJCWdvdG8gYWJvcnRfd2l0aF9yeF9iaWdfcmluZzsKIAl9CiAKIAlyZXR1cm4gMDsKIAogYWJvcnRfd2l0aF9yeF9iaWdfcmluZzoKLQlmb3IgKGkgPSAwOyBpIDw9IG1ncC0+cnhfYmlnLm1hc2s7IGkrKykgewotCQlpZiAobWdwLT5yeF9iaWcuaW5mb1tpXS5za2IgIT0gTlVMTCkKLQkJCWRldl9rZnJlZV9za2JfYW55KG1ncC0+cnhfYmlnLmluZm9baV0uc2tiKTsKLQkJaWYgKHBjaV91bm1hcF9sZW4oJm1ncC0+cnhfYmlnLmluZm9baV0sIGxlbikpCi0JCQlwY2lfdW5tYXBfc2luZ2xlKG1ncC0+cGRldiwKLQkJCQkJIHBjaV91bm1hcF9hZGRyKCZtZ3AtPnJ4X2JpZy5pbmZvW2ldLAotCQkJCQkJCWJ1cyksCi0JCQkJCSBwY2lfdW5tYXBfbGVuKCZtZ3AtPnJ4X2JpZy5pbmZvW2ldLAotCQkJCQkJICAgICAgIGxlbiksCi0JCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWZvciAoaSA9IG1ncC0+cnhfYmlnLmNudDsgaSA8IG1ncC0+cnhfYmlnLmZpbGxfY250OyBpKyspIHsKKwkJaW50IGlkeCA9IGkgJiBtZ3AtPnJ4X2JpZy5tYXNrOworCQlteXJpMTBnZV91bm1hcF9yeF9wYWdlKG1ncC0+cGRldiwgJm1ncC0+cnhfYmlnLmluZm9baWR4XSwKKwkJCQkgICAgICAgbWdwLT5iaWdfYnl0ZXMpOworCQlwdXRfcGFnZShtZ3AtPnJ4X2JpZy5pbmZvW2lkeF0ucGFnZSk7CiAJfQogCiBhYm9ydF93aXRoX3J4X3NtYWxsX3Jpbmc6Ci0JZm9yIChpID0gMDsgaSA8PSBtZ3AtPnJ4X3NtYWxsLm1hc2s7IGkrKykgewotCQlpZiAobWdwLT5yeF9zbWFsbC5pbmZvW2ldLnNrYiAhPSBOVUxMKQotCQkJZGV2X2tmcmVlX3NrYl9hbnkobWdwLT5yeF9zbWFsbC5pbmZvW2ldLnNrYik7Ci0JCWlmIChwY2lfdW5tYXBfbGVuKCZtZ3AtPnJ4X3NtYWxsLmluZm9baV0sIGxlbikpCi0JCQlwY2lfdW5tYXBfc2luZ2xlKG1ncC0+cGRldiwKLQkJCQkJIHBjaV91bm1hcF9hZGRyKCZtZ3AtPnJ4X3NtYWxsLmluZm9baV0sCi0JCQkJCQkJYnVzKSwKLQkJCQkJIHBjaV91bm1hcF9sZW4oJm1ncC0+cnhfc21hbGwuaW5mb1tpXSwKLQkJCQkJCSAgICAgICBsZW4pLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlmb3IgKGkgPSBtZ3AtPnJ4X3NtYWxsLmNudDsgaSA8IG1ncC0+cnhfc21hbGwuZmlsbF9jbnQ7IGkrKykgeworCQlpbnQgaWR4ID0gaSAmIG1ncC0+cnhfc21hbGwubWFzazsKKwkJbXlyaTEwZ2VfdW5tYXBfcnhfcGFnZShtZ3AtPnBkZXYsICZtZ3AtPnJ4X3NtYWxsLmluZm9baWR4XSwKKwkJCQkgICAgICAgbWdwLT5zbWFsbF9ieXRlcyArIE1YR0VGV19QQUQpOworCQlwdXRfcGFnZShtZ3AtPnJ4X3NtYWxsLmluZm9baWR4XS5wYWdlKTsKIAl9CisKIAlrZnJlZShtZ3AtPnJ4X2JpZy5pbmZvKTsKIAogYWJvcnRfd2l0aF9yeF9zbWFsbF9pbmZvOgpAQCAtMTU2NiwzMCArMTU2MCwyNCBAQAogCiAJbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWZvciAoaSA9IDA7IGkgPD0gbWdwLT5yeF9iaWcubWFzazsgaSsrKSB7Ci0JCWlmIChtZ3AtPnJ4X2JpZy5pbmZvW2ldLnNrYiAhPSBOVUxMKQotCQkJZGV2X2tmcmVlX3NrYl9hbnkobWdwLT5yeF9iaWcuaW5mb1tpXS5za2IpOwotCQlpZiAocGNpX3VubWFwX2xlbigmbWdwLT5yeF9iaWcuaW5mb1tpXSwgbGVuKSkKLQkJCXBjaV91bm1hcF9zaW5nbGUobWdwLT5wZGV2LAotCQkJCQkgcGNpX3VubWFwX2FkZHIoJm1ncC0+cnhfYmlnLmluZm9baV0sCi0JCQkJCQkJYnVzKSwKLQkJCQkJIHBjaV91bm1hcF9sZW4oJm1ncC0+cnhfYmlnLmluZm9baV0sCi0JCQkJCQkgICAgICAgbGVuKSwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJZm9yIChpID0gbWdwLT5yeF9iaWcuY250OyBpIDwgbWdwLT5yeF9iaWcuZmlsbF9jbnQ7IGkrKykgeworCQlpZHggPSBpICYgbWdwLT5yeF9iaWcubWFzazsKKwkJaWYgKGkgPT0gbWdwLT5yeF9iaWcuZmlsbF9jbnQgLSAxKQorCQkJbWdwLT5yeF9iaWcuaW5mb1tpZHhdLnBhZ2Vfb2Zmc2V0ID0gTVlSSTEwR0VfQUxMT0NfU0laRTsKKwkJbXlyaTEwZ2VfdW5tYXBfcnhfcGFnZShtZ3AtPnBkZXYsICZtZ3AtPnJ4X2JpZy5pbmZvW2lkeF0sCisJCQkJICAgICAgIG1ncC0+YmlnX2J5dGVzKTsKKwkJcHV0X3BhZ2UobWdwLT5yeF9iaWcuaW5mb1tpZHhdLnBhZ2UpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPD0gbWdwLT5yeF9zbWFsbC5tYXNrOyBpKyspIHsKLQkJaWYgKG1ncC0+cnhfc21hbGwuaW5mb1tpXS5za2IgIT0gTlVMTCkKLQkJCWRldl9rZnJlZV9za2JfYW55KG1ncC0+cnhfc21hbGwuaW5mb1tpXS5za2IpOwotCQlpZiAocGNpX3VubWFwX2xlbigmbWdwLT5yeF9zbWFsbC5pbmZvW2ldLCBsZW4pKQotCQkJcGNpX3VubWFwX3NpbmdsZShtZ3AtPnBkZXYsCi0JCQkJCSBwY2lfdW5tYXBfYWRkcigmbWdwLT5yeF9zbWFsbC5pbmZvW2ldLAotCQkJCQkJCWJ1cyksCi0JCQkJCSBwY2lfdW5tYXBfbGVuKCZtZ3AtPnJ4X3NtYWxsLmluZm9baV0sCi0JCQkJCQkgICAgICAgbGVuKSwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJZm9yIChpID0gbWdwLT5yeF9zbWFsbC5jbnQ7IGkgPCBtZ3AtPnJ4X3NtYWxsLmZpbGxfY250OyBpKyspIHsKKwkJaWR4ID0gaSAmIG1ncC0+cnhfc21hbGwubWFzazsKKwkJaWYgKGkgPT0gbWdwLT5yeF9zbWFsbC5maWxsX2NudCAtIDEpCisJCQltZ3AtPnJ4X3NtYWxsLmluZm9baWR4XS5wYWdlX29mZnNldCA9CisJCQkgICAgTVlSSTEwR0VfQUxMT0NfU0laRTsKKwkJbXlyaTEwZ2VfdW5tYXBfcnhfcGFnZShtZ3AtPnBkZXYsICZtZ3AtPnJ4X3NtYWxsLmluZm9baWR4XSwKKwkJCQkgICAgICAgbWdwLT5zbWFsbF9ieXRlcyArIE1YR0VGV19QQUQpOworCQlwdXRfcGFnZShtZ3AtPnJ4X3NtYWxsLmluZm9baWR4XS5wYWdlKTsKIAl9Ci0KIAl0eCA9ICZtZ3AtPnR4OwogCXdoaWxlICh0eC0+ZG9uZSAhPSB0eC0+cmVxKSB7CiAJCWlkeCA9IHR4LT5kb25lICYgdHgtPm1hc2s7CkBAIC0xNjMxLDYgKzE2MTksNDEgQEAKIAltZ3AtPnR4LnJlcV9saXN0ID0gTlVMTDsKIH0KIAorc3RhdGljIGludCBteXJpMTBnZV9yZXF1ZXN0X2lycShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWdwLT5wZGV2OworCWludCBzdGF0dXM7CisKKwlpZiAobXlyaTEwZ2VfbXNpKSB7CisJCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpKHBkZXYpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkVycm9yICVkIHNldHRpbmcgdXAgTVNJOyBmYWxsaW5nIGJhY2sgdG8geFBJQ1xuIiwKKwkJCQlzdGF0dXMpOworCQllbHNlCisJCQltZ3AtPm1zaV9lbmFibGVkID0gMTsKKwl9IGVsc2UgeworCQltZ3AtPm1zaV9lbmFibGVkID0gMDsKKwl9CisJc3RhdHVzID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBteXJpMTBnZV9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJCSAgICAgbWdwLT5kZXYtPm5hbWUsIG1ncCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOworCQlpZiAobWdwLT5tc2lfZW5hYmxlZCkKKwkJCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgbXlyaTEwZ2VfZnJlZV9pcnEoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG1ncC0+cGRldjsKKworCWZyZWVfaXJxKHBkZXYtPmlycSwgbWdwKTsKKwlpZiAobWdwLT5tc2lfZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOworfQorCiBzdGF0aWMgaW50IG15cmkxMGdlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwOwpAQCAtMTY0NiwxMCArMTY2OSwxMyBAQAogCXN0YXR1cyA9IG15cmkxMGdlX3Jlc2V0KG1ncCk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBmYWlsZWQgcmVzZXRcbiIsIGRldi0+bmFtZSk7Ci0JCW1ncC0+cnVubmluZyA9IE1ZUkkxMEdFX0VUSF9TVE9QUEVEOwotCQlyZXR1cm4gLUVOWElPOworCQlnb3RvIGFib3J0X3dpdGhfbm90aGluZzsKIAl9CiAKKwlzdGF0dXMgPSBteXJpMTBnZV9yZXF1ZXN0X2lycShtZ3ApOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBhYm9ydF93aXRoX25vdGhpbmc7CisKIAkvKiBkZWNpZGUgd2hhdCBzbWFsbCBidWZmZXIgc2l6ZSB0byB1c2UuICBGb3IgZ29vZCBUQ1AgcngKIAkgKiBwZXJmb3JtYW5jZSwgaXQgaXMgaW1wb3J0YW50IHRvIG5vdCByZWNlaXZlIDE1MTQgYnl0ZQogCSAqIGZyYW1lcyBpbnRvIGp1bWJvIGJ1ZmZlcnMsIGFzIGl0IGNvbmZ1c2VzIHRoZSBzb2NrZXQgYnVmZmVyCkBAIC0xNjU3LDE5ICsxNjgzLDE4IEBACiAJICovCiAKIAlpZiAoZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKQotCQltZ3AtPnNtYWxsX2J5dGVzID0gMTI4OwkvKiBlbm91Z2ggZm9yIGEgVENQIGhlYWRlciAqLworCQkvKiBlbm91Z2ggZm9yIGEgVENQIGhlYWRlciAqLworCQltZ3AtPnNtYWxsX2J5dGVzID0gKDEyOCA+IFNNUF9DQUNIRV9CWVRFUykKKwkJICAgID8gKDEyOCAtIE1YR0VGV19QQUQpCisJCSAgICA6IChTTVBfQ0FDSEVfQllURVMgLSBNWEdFRldfUEFEKTsKIAllbHNlCi0JCW1ncC0+c21hbGxfYnl0ZXMgPSBFVEhfRlJBTUVfTEVOOwkvKiBlbm91Z2ggZm9yIGFuIEVUSF9EQVRBX0xFTiBmcmFtZSAqLworCQkvKiBlbm91Z2ggZm9yIGEgdmxhbiBlbmNhcHN1bGF0ZWQgRVRIX0RBVEFfTEVOIGZyYW1lICovCisJCW1ncC0+c21hbGxfYnl0ZXMgPSBWTEFOX0VUSF9GUkFNRV9MRU47CiAKIAkvKiBPdmVycmlkZSB0aGUgc21hbGwgYnVmZmVyIHNpemU/ICovCiAJaWYgKG15cmkxMGdlX3NtYWxsX2J5dGVzID4gMCkKIAkJbWdwLT5zbWFsbF9ieXRlcyA9IG15cmkxMGdlX3NtYWxsX2J5dGVzOwogCi0JLyogSWYgdGhlIHVzZXIgc2V0cyBhbiBvYnNjZW5lbHkgc21hbGwgTVRVLCBhZGp1c3QgdGhlIHNtYWxsCi0JICogYnl0ZXMgZG93biB0byBuZWFybHkgbm90aGluZyAqLwotCWlmIChtZ3AtPnNtYWxsX2J5dGVzID49IChkZXYtPm10dSArIEVUSF9ITEVOKSkKLQkJbWdwLT5zbWFsbF9ieXRlcyA9IDY0OwotCiAJLyogZ2V0IHRoZSBsYW5haSBwb2ludGVycyB0byB0aGUgc2VuZCBhbmQgcmVjZWl2ZSByaW5ncyAqLwogCiAJc3RhdHVzIHw9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfU0VORF9PRkZTRVQsICZjbWQsIDApOwpAQCAtMTY5MCwxMCArMTcxNSwxMCBAQAogCQkgICAgICAgIm15cmkxMGdlOiAlczogZmFpbGVkIHRvIGdldCByaW5nIHNpemVzIG9yIGxvY2F0aW9uc1xuIiwKIAkJICAgICAgIGRldi0+bmFtZSk7CiAJCW1ncC0+cnVubmluZyA9IE1ZUkkxMEdFX0VUSF9TVE9QUEVEOwotCQlyZXR1cm4gLUVOWElPOworCQlnb3RvIGFib3J0X3dpdGhfaXJxOwogCX0KIAotCWlmIChtZ3AtPm10cnIgPj0gMCkgeworCWlmIChteXJpMTBnZV93Y2ZpZm8gJiYgbWdwLT5tdHJyID49IDApIHsKIAkJbWdwLT50eC53Y19maWZvID0gKHU4IF9faW9tZW0gKikgbWdwLT5zcmFtICsgTVhHRUZXX0VUSF9TRU5EXzQ7CiAJCW1ncC0+cnhfc21hbGwud2NfZmlmbyA9CiAJCSAgICAodTggX19pb21lbSAqKSBtZ3AtPnNyYW0gKyBNWEdFRldfRVRIX1JFQ1ZfU01BTEw7CkBAIC0xNzA1LDE3ICsxNzMwLDIzIEBACiAJCW1ncC0+cnhfYmlnLndjX2ZpZm8gPSBOVUxMOwogCX0KIAotCXN0YXR1cyA9IG15cmkxMGdlX2FsbG9jYXRlX3JpbmdzKGRldik7Ci0JaWYgKHN0YXR1cyAhPSAwKQotCQlnb3RvIGFib3J0X3dpdGhfbm90aGluZzsKLQogCS8qIEZpcm13YXJlIG5lZWRzIHRoZSBiaWcgYnVmZiBzaXplIGFzIGEgcG93ZXIgb2YgMi4gIExpZSBhbmQKIAkgKiB0ZWxsIGhpbSB0aGUgYnVmZmVyIGlzIGxhcmdlciwgYmVjYXVzZSB3ZSBvbmx5IHVzZSAxCiAJICogYnVmZmVyL3BrdCwgYW5kIHRoZSBtdHUgd2lsbCBwcmV2ZW50IG92ZXJydW5zLgogCSAqLwotCWJpZ19wb3cyID0gZGV2LT5tdHUgKyBFVEhfSExFTiArIE1YR0VGV19QQUQ7Ci0Jd2hpbGUgKChiaWdfcG93MiAmIChiaWdfcG93MiAtIDEpKSAhPSAwKQotCQliaWdfcG93MisrOworCWJpZ19wb3cyID0gZGV2LT5tdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTiArIE1YR0VGV19QQUQ7CisJaWYgKGJpZ19wb3cyIDwgTVlSSTEwR0VfQUxMT0NfU0laRSAvIDIpIHsKKwkJd2hpbGUgKChiaWdfcG93MiAmIChiaWdfcG93MiAtIDEpKSAhPSAwKQorCQkJYmlnX3BvdzIrKzsKKwkJbWdwLT5iaWdfYnl0ZXMgPSBkZXYtPm10dSArIEVUSF9ITEVOICsgVkxBTl9ITEVOICsgTVhHRUZXX1BBRDsKKwl9IGVsc2UgeworCQliaWdfcG93MiA9IE1ZUkkxMEdFX0FMTE9DX1NJWkU7CisJCW1ncC0+YmlnX2J5dGVzID0gYmlnX3BvdzI7CisJfQorCisJc3RhdHVzID0gbXlyaTEwZ2VfYWxsb2NhdGVfcmluZ3MoZGV2KTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gYWJvcnRfd2l0aF9pcnE7CiAKIAkvKiBub3cgZ2l2ZSBmaXJtd2FyZSBidWZmZXJzIHNpemVzLCBhbmQgTVRVICovCiAJY21kLmRhdGEwID0gZGV2LT5tdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTjsKQEAgLTE3NzgsNiArMTgwOSw5IEBACiBhYm9ydF93aXRoX3JpbmdzOgogCW15cmkxMGdlX2ZyZWVfcmluZ3MoZGV2KTsKIAorYWJvcnRfd2l0aF9pcnE6CisJbXlyaTEwZ2VfZnJlZV9pcnEobWdwKTsKKwogYWJvcnRfd2l0aF9ub3RoaW5nOgogCW1ncC0+cnVubmluZyA9IE1ZUkkxMEdFX0VUSF9TVE9QUEVEOwogCXJldHVybiAtRU5PTUVNOwpAQCAtMTgxNCw3ICsxODQ4LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXMgbmV2ZXIgZ290IGRvd24gaXJxXG4iLCBkZXYtPm5hbWUpOwogCiAJbmV0aWZfdHhfZGlzYWJsZShkZXYpOwotCisJbXlyaTEwZ2VfZnJlZV9pcnEobWdwKTsKIAlteXJpMTBnZV9mcmVlX3JpbmdzKGRldik7CiAKIAltZ3AtPnJ1bm5pbmcgPSBNWVJJMTBHRV9FVEhfU1RPUFBFRDsKQEAgLTIyMDYsNyArMjI0MCw3IEBACiAJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CiAJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncDsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7Ci0JX19iZTMyIGRhdGFbMl0gPSB7MCwgMH07CisJX19iZTMyIGRhdGFbMl0gPSB7IDAsIDAgfTsKIAlpbnQgZXJyOwogCiAJbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTI0ODgsMzQgKzI1MjIsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbXlyaTEwZ2Vfc2F2ZV9zdGF0ZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbWdwLT5wZGV2OwotCWludCBjYXA7Ci0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQkvKiBub3cgc2F2ZSBQQ0llIGFuZCBNU0kgc3RhdGUgdGhhdCBMaW51eCB3aWxsIG5vdAotCSAqIHNhdmUgZm9yIHVzICovCi0JY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGNhcCArIFBDSV9FWFBfREVWQ1RMLCAmbWdwLT5kZXZjdGwpOwotCWNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9NU0kpOwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIGNhcCArIFBDSV9NU0lfRkxBR1MsICZtZ3AtPm1zaV9mbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG15cmkxMGdlX3Jlc3RvcmVfc3RhdGUoc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG1ncC0+cGRldjsKLQlpbnQgY2FwOwotCi0JLyogcmVzdG9yZSBQQ0llIGFuZCBNU0kgc3RhdGUgdGhhdCBsaW51eCB3aWxsIG5vdCAqLwotCWNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgY2FwICsgUENJX0NBUF9JRF9FWFAsIG1ncC0+ZGV2Y3RsKTsKLQljYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJKTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgY2FwICsgUENJX01TSV9GTEFHUywgbWdwLT5tc2lfZmxhZ3MpOwotCi0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci19Ci0KICNpZmRlZiBDT05GSUdfUE0KIAogc3RhdGljIGludCBteXJpMTBnZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC0yNTM2LDExICsyNTQyLDEwIEBACiAJCXJ0bmxfdW5sb2NrKCk7CiAJfQogCW15cmkxMGdlX2R1bW15X3JkbWEobWdwLCAwKTsKLQlmcmVlX2lycShwZGV2LT5pcnEsIG1ncCk7Ci0JbXlyaTEwZ2Vfc2F2ZV9zdGF0ZShtZ3ApOworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKIH0KIAogc3RhdGljIGludCBteXJpMTBnZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0yNTYyLDM0ICsyNTY3LDMzIEBACiAJCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CiAJCXJldHVybiAtRUlPOwogCX0KLQlteXJpMTBnZV9yZXN0b3JlX3N0YXRlKG1ncCk7CisKKwlzdGF0dXMgPSBwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOwogCiAJc3RhdHVzID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKHN0YXR1cyA8IDApIHsKKwlpZiAoc3RhdHVzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FSU87CisJCXJldHVybiBzdGF0dXM7CiAJfQogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKLQlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG15cmkxMGdlX2ludHIsIElSUUZfU0hBUkVELAotCQkJICAgICBuZXRkZXYtPm5hbWUsIG1ncCk7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOwotCQlnb3RvIGFib3J0X3dpdGhfZW5hYmxlZDsKLQl9Ci0KIAlteXJpMTBnZV9yZXNldChtZ3ApOwogCW15cmkxMGdlX2R1bW15X3JkbWEobWdwLCAxKTsKIAogCS8qIFNhdmUgY29uZmlndXJhdGlvbiBzcGFjZSB0byBiZSByZXN0b3JlZCBpZiB0aGUKIAkgKiBuaWMgcmVzZXRzIGR1ZSB0byBhIHBhcml0eSBlcnJvciAqLwotCW15cmkxMGdlX3NhdmVfc3RhdGUobWdwKTsKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJcnRubF9sb2NrKCk7Ci0JCW15cmkxMGdlX29wZW4obmV0ZGV2KTsKKwkJc3RhdHVzID0gbXlyaTEwZ2Vfb3BlbihuZXRkZXYpOwogCQlydG5sX3VubG9jaygpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGFib3J0X3dpdGhfZW5hYmxlZDsKKwogCX0KIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAKQEAgLTI2MjUsNyArMjYyOSw3IEBACiBzdGF0aWMgdm9pZCBteXJpMTBnZV93YXRjaGRvZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiwgd2F0Y2hkb2dfd29yayk7CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiwgd2F0Y2hkb2dfd29yayk7CiAJdTMyIHJlYm9vdDsKIAlpbnQgc3RhdHVzOwogCXUxNiBjbWQsIHZlbmRvcjsKQEAgLTI2NDcsNyArMjY1MSwxMSBAQAogCQkgKiB3aGVuIHRoZSBkcml2ZXIgd2FzIGxvYWRlZCwgb3IgdGhlIGxhc3QgdGltZSB0aGUKIAkJICogbmljIHdhcyByZXN1bWVkIGZyb20gcG93ZXIgc2F2aW5nIG1vZGUuCiAJCSAqLwotCQlteXJpMTBnZV9yZXN0b3JlX3N0YXRlKG1ncCk7CisJCXBjaV9yZXN0b3JlX3N0YXRlKG1ncC0+cGRldik7CisKKwkJLyogc2F2ZSBzdGF0ZSBhZ2FpbiBmb3IgYWNjb3VudGluZyByZWFzb25zICovCisJCXBjaV9zYXZlX3N0YXRlKG1ncC0+cGRldik7CisKIAl9IGVsc2UgewogCQkvKiBpZiB3ZSBnZXQgYmFjayAtMSdzIGZyb20gb3VyIHNsb3QsIHBlcmhhcHMgc29tZWJvZHkKIAkJICogcG93ZXJlZCBvZmYgb3VyIGNhcmQuICBEb24ndCB0cnkgdG8gcmVzZXQgaXQgaW4KQEAgLTI2OTgsNiArMjcwNiwyMSBAQAogCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3A7CiAKIAltZ3AgPSAoc3RydWN0IG15cmkxMGdlX3ByaXYgKilhcmc7CisKKwlpZiAobWdwLT5yeF9zbWFsbC53YXRjaGRvZ19uZWVkZWQpIHsKKwkJbXlyaTEwZ2VfYWxsb2NfcnhfcGFnZXMobWdwLCAmbWdwLT5yeF9zbWFsbCwKKwkJCQkJbWdwLT5zbWFsbF9ieXRlcyArIE1YR0VGV19QQUQsIDEpOworCQlpZiAobWdwLT5yeF9zbWFsbC5maWxsX2NudCAtIG1ncC0+cnhfc21hbGwuY250ID49CisJCSAgICBteXJpMTBnZV9maWxsX3RocmVzaCkKKwkJCW1ncC0+cnhfc21hbGwud2F0Y2hkb2dfbmVlZGVkID0gMDsKKwl9CisJaWYgKG1ncC0+cnhfYmlnLndhdGNoZG9nX25lZWRlZCkgeworCQlteXJpMTBnZV9hbGxvY19yeF9wYWdlcyhtZ3AsICZtZ3AtPnJ4X2JpZywgbWdwLT5iaWdfYnl0ZXMsIDEpOworCQlpZiAobWdwLT5yeF9iaWcuZmlsbF9jbnQgLSBtZ3AtPnJ4X2JpZy5jbnQgPj0KKwkJICAgIG15cmkxMGdlX2ZpbGxfdGhyZXNoKQorCQkJbWdwLT5yeF9iaWcud2F0Y2hkb2dfbmVlZGVkID0gMDsKKwl9CisKIAlpZiAobWdwLT50eC5yZXEgIT0gbWdwLT50eC5kb25lICYmCiAJICAgIG1ncC0+dHguZG9uZSA9PSBtZ3AtPndhdGNoZG9nX3R4X2RvbmUgJiYKIAkgICAgbWdwLT53YXRjaGRvZ190eF9yZXEgIT0gbWdwLT53YXRjaGRvZ190eF9kb25lKQpAQCAtMjg0OCwyMyArMjg3MSw2IEBACiAJCWdvdG8gYWJvcnRfd2l0aF9maXJtd2FyZTsKIAl9CiAKLQlpZiAobXlyaTEwZ2VfbXNpKSB7Ci0JCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpKHBkZXYpOwotCQlpZiAoc3RhdHVzICE9IDApCi0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJIkVycm9yICVkIHNldHRpbmcgdXAgTVNJOyBmYWxsaW5nIGJhY2sgdG8geFBJQ1xuIiwKLQkJCQlzdGF0dXMpOwotCQllbHNlCi0JCQltZ3AtPm1zaV9lbmFibGVkID0gMTsKLQl9Ci0KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG15cmkxMGdlX2ludHIsIElSUUZfU0hBUkVELAotCQkJICAgICBuZXRkZXYtPm5hbWUsIG1ncCk7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOwotCQlnb3RvIGFib3J0X3dpdGhfZmlybXdhcmU7Ci0JfQotCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG1ncCk7CiAJaWYgKChteXJpMTBnZV9pbml0aWFsX210dSArIEVUSF9ITEVOKSA+IE1ZUkkxMEdFX01BWF9FVEhFUl9NVFUpCiAJCW15cmkxMGdlX2luaXRpYWxfbXR1ID0gTVlSSTEwR0VfTUFYX0VUSEVSX01UVSAtIEVUSF9ITEVOOwpAQCAtMjg3Niw3ICsyODgyLDYgQEAKIAluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG15cmkxMGdlX3htaXQ7CiAJbmV0ZGV2LT5nZXRfc3RhdHMgPSBteXJpMTBnZV9nZXRfc3RhdHM7CiAJbmV0ZGV2LT5iYXNlX2FkZHIgPSBtZ3AtPmlvbWVtX2Jhc2U7Ci0JbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAJbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gbXlyaTEwZ2VfY2hhbmdlX210dTsKIAluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG15cmkxMGdlX3NldF9tdWx0aWNhc3RfbGlzdDsKIAluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IG15cmkxMGdlX3NldF9tYWNfYWRkcmVzczsKQEAgLTI4ODYsOSArMjg5MSwxOCBAQAogCW5ldGRldi0+cG9sbCA9IG15cmkxMGdlX3BvbGw7CiAJbmV0ZGV2LT53ZWlnaHQgPSBteXJpMTBnZV9uYXBpX3dlaWdodDsKIAorCS8qIG1ha2Ugc3VyZSB3ZSBjYW4gZ2V0IGFuIGlycSwgYW5kIHRoYXQgTVNJIGNhbiBiZQorCSAqIHNldHVwIChpZiBhdmFpbGFibGUpLiAgQWxzbyBlbnN1cmUgbmV0ZGV2LT5pcnEKKwkgKiBpcyBzZXQgdG8gY29ycmVjdCB2YWx1ZSBpZiBNU0kgaXMgZW5hYmxlZCAqLworCXN0YXR1cyA9IG15cmkxMGdlX3JlcXVlc3RfaXJxKG1ncCk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIGFib3J0X3dpdGhfZmlybXdhcmU7CisJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CisJbXlyaTEwZ2VfZnJlZV9pcnEobWdwKTsKKwogCS8qIFNhdmUgY29uZmlndXJhdGlvbiBzcGFjZSB0byBiZSByZXN0b3JlZCBpZiB0aGUKIAkgKiBuaWMgcmVzZXRzIGR1ZSB0byBhIHBhcml0eSBlcnJvciAqLwotCW15cmkxMGdlX3NhdmVfc3RhdGUobWdwKTsKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCS8qIFNldHVwIHRoZSB3YXRjaGRvZyB0aW1lciAqLwogCXNldHVwX3RpbWVyKCZtZ3AtPndhdGNoZG9nX3RpbWVyLCBteXJpMTBnZV93YXRjaGRvZ190aW1lciwKQEAgLTI4OTksMTkgKzI5MTMsMTcgQEAKIAlzdGF0dXMgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZDogJWRcbiIsIHN0YXR1cyk7Ci0JCWdvdG8gYWJvcnRfd2l0aF9pcnE7CisJCWdvdG8gYWJvcnRfd2l0aF9zdGF0ZTsKIAl9CiAJZGV2X2luZm8oZGV2LCAiJXMgSVJRICVkLCB0eCBibmRyeSAlZCwgZncgJXMsIFdDICVzXG4iLAogCQkgKG1ncC0+bXNpX2VuYWJsZWQgPyAiTVNJIiA6ICJ4UElDIiksCi0JCSBwZGV2LT5pcnEsIG1ncC0+dHguYm91bmRhcnksIG1ncC0+ZndfbmFtZSwKKwkJIG5ldGRldi0+aXJxLCBtZ3AtPnR4LmJvdW5kYXJ5LCBtZ3AtPmZ3X25hbWUsCiAJCSAobWdwLT5tdHJyID49IDAgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKSk7CiAKIAlyZXR1cm4gMDsKIAotYWJvcnRfd2l0aF9pcnE6Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBtZ3ApOwotCWlmIChtZ3AtPm1zaV9lbmFibGVkKQotCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CithYm9ydF93aXRoX3N0YXRlOgorCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCiBhYm9ydF93aXRoX2Zpcm13YXJlOgogCW15cmkxMGdlX2R1bW15X3JkbWEobWdwLCAwKTsKQEAgLTI5NjIsMTIgKzI5NzQsMTIgQEAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCW5ldGRldiA9IG1ncC0+ZGV2OwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBtZ3ApOwotCWlmIChtZ3AtPm1zaV9lbmFibGVkKQotCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CiAKIAlteXJpMTBnZV9kdW1teV9yZG1hKG1ncCwgMCk7CiAKKwkvKiBhdm9pZCBhIG1lbW9yeSBsZWFrICovCisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKIAlieXRlcyA9IG15cmkxMGdlX21heF9pbnRyX3Nsb3RzICogc2l6ZW9mKCptZ3AtPnJ4X2RvbmUuZW50cnkpOwogCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIGJ5dGVzLAogCQkJICBtZ3AtPnJ4X2RvbmUuZW50cnksIG1ncC0+cnhfZG9uZS5idXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKaW5kZXggYjU0MTBiZS4uZTg1OThiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCkBAIC02MywxMiArNjMsMTEgQEAKIAogI2luY2x1ZGUgIm5ldHhlbl9uaWNfaHcuaCIKIAotI2RlZmluZSBORVRYRU5fTklDX0JVSUxEX05PICAgICAiMSIKKyNkZWZpbmUgTkVUWEVOX05JQ19CVUlMRF9OTyAgICAgIjIiCiAjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX01BSk9SIDMKICNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfTUlOT1IgMwotI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9TVUJWRVJTSU9OIDIKLSNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICIzLjMuMiIgIi0iIE5FVFhFTl9OSUNfQlVJTERfTk8KLSNkZWZpbmUgTkVUWEVOX05JQ19GV19WRVJTSU9OSUQgIjMuMy4yIgorI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9TVUJWRVJTSU9OIDMKKyNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICIzLjMuMyIgIi0iIE5FVFhFTl9OSUNfQlVJTERfTk8KIAogI2RlZmluZSBSQ1ZfREVTQ19SSU5HU0laRQlcCiAJKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpCkBAIC0xMzcsNyArMTM2LDcgQEAKICNkZWZpbmUgVEhJUkRfUEFHRV9HUk9VUF9TSVpFICBUSElSRF9QQUdFX0dST1VQX0VORCAtIFRISVJEX1BBR0VfR1JPVVBfU1RBUlQKIAogI2RlZmluZSBNQVhfUlhfQlVGRkVSX0xFTkdUSAkJMTc2MAotI2RlZmluZSBNQVhfUlhfSlVNQk9fQlVGRkVSX0xFTkdUSCAJOTA0NgorI2RlZmluZSBNQVhfUlhfSlVNQk9fQlVGRkVSX0xFTkdUSCAJODA2MgogI2RlZmluZSBNQVhfUlhfTFJPX0JVRkZFUl9MRU5HVEgJKCg0OCoxMDI0KS01MTIpCiAjZGVmaW5lIFJYX0RNQV9NQVBfTEVOCQkJKE1BWF9SWF9CVUZGRVJfTEVOR1RIIC0gMikKICNkZWZpbmUgUlhfSlVNQk9fRE1BX01BUF9MRU4JXApAQCAtMTk5LDkgKzE5OCw5IEBACiAJCQkoUkNWX0RFU0NfTk9STUFMKSkpCiAKICNkZWZpbmUgTUFYX0NNRF9ERVNDUklQVE9SUwkJMTAyNAotI2RlZmluZSBNQVhfUkNWX0RFU0NSSVBUT1JTCQkzMjc2OAotI2RlZmluZSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTCTQwOTYKLSNkZWZpbmUgTUFYX0xST19SQ1ZfREVTQ1JJUFRPUlMJCTIwNDgKKyNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SUwkJMTYzODQKKyNkZWZpbmUgTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUwkxMDI0CisjZGVmaW5lIE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTCQk2NAogI2RlZmluZSBNQVhfUkNWU1RBVFVTX0RFU0NSSVBUT1JTCU1BWF9SQ1ZfREVTQ1JJUFRPUlMKICNkZWZpbmUgTUFYX0pVTUJPX1JDVl9ERVNDCU1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlMKICNkZWZpbmUgTUFYX1JDVl9ERVNDCQlNQVhfUkNWX0RFU0NSSVBUT1JTCkBAIC0yNDAsNDkgKzIzOSwzOSBAQAogCiB0eXBlZGVmIHUzMiBuZXR4ZW5fY3R4X21zZzsKIAotI2RlZmluZSBfbmV0eGVuX3NldF9iaXRzKGNvbmZpZ193b3JkLCBzdGFydCwgYml0cywgdmFsKQl7XAotCXVuc2lnbmVkIGxvbmcgbG9uZyBtYXNrID0gKCgoMVVMTCA8PCAoYml0cykpIC0gMSkgPDwgKHN0YXJ0KSk7CVwKLQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgPSAodmFsKTsJXAotCShjb25maWdfd29yZCkgJj0gfm1hc2s7CVwKLQkoY29uZmlnX3dvcmQpIHw9ICgoKHZhbHVlKSA8PCAoc3RhcnQpKSAmIG1hc2spOyBcCi19Ci0KICNkZWZpbmUgbmV0eGVuX3NldF9tc2dfcGVnX2lkKGNvbmZpZ193b3JkLCB2YWwpCVwKLQlfbmV0eGVuX3NldF9iaXRzKGNvbmZpZ193b3JkLCAwLCAyLCB2YWwpCisJKChjb25maWdfd29yZCkgJj0gfjMsIChjb25maWdfd29yZCkgfD0gdmFsICYgMykKICNkZWZpbmUgbmV0eGVuX3NldF9tc2dfcHJpdmlkKGNvbmZpZ193b3JkKQlcCi0Jc2V0X2JpdCgyLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMikKICNkZWZpbmUgbmV0eGVuX3NldF9tc2dfY291bnQoY29uZmlnX3dvcmQsIHZhbCkJXAotCV9uZXR4ZW5fc2V0X2JpdHMoY29uZmlnX3dvcmQsIDMsIDE1LCB2YWwpCisJKChjb25maWdfd29yZCkgJj0gfigweDdmZmY8PDMpLCAoY29uZmlnX3dvcmQpIHw9ICh2YWwgJiAweDdmZmYpIDw8IDMpCiAjZGVmaW5lIG5ldHhlbl9zZXRfbXNnX2N0eGlkKGNvbmZpZ193b3JkLCB2YWwpCVwKLQlfbmV0eGVuX3NldF9iaXRzKGNvbmZpZ193b3JkLCAxOCwgMTAsIHZhbCkKKwkoKGNvbmZpZ193b3JkKSAmPSB+KDB4M2ZmPDwxOCksIChjb25maWdfd29yZCkgfD0gKHZhbCAmIDB4M2ZmKSA8PCAxOCkKICNkZWZpbmUgbmV0eGVuX3NldF9tc2dfb3Bjb2RlKGNvbmZpZ193b3JkLCB2YWwpCVwKLQlfbmV0eGVuX3NldF9iaXRzKGNvbmZpZ193b3JkLCAyOCwgNCwgdmFsKQorCSgoY29uZmlnX3dvcmQpICY9IH4oMHhmPDwyNCksIChjb25maWdfd29yZCkgfD0gKHZhbCAmIDB4ZikgPDwgMjQpCiAKIHN0cnVjdCBuZXR4ZW5fcmN2X2NvbnRleHQgewotCXUzMiByY3ZfcmluZ19hZGRyX2xvOwotCXUzMiByY3ZfcmluZ19hZGRyX2hpOwotCXUzMiByY3ZfcmluZ19zaXplOwotCXUzMiByc3J2ZDsKKwlfX2xlNjQgcmN2X3JpbmdfYWRkcjsKKwlfX2xlMzIgcmN2X3Jpbmdfc2l6ZTsKKwlfX2xlMzIgcnNydmQ7CiB9OwogCiBzdHJ1Y3QgbmV0eGVuX3JpbmdfY3R4IHsKIAogCS8qIG9uZSBjb21tYW5kIHJpbmcgKi8KLQl1NjQgY21kX2NvbnN1bWVyX29mZnNldDsKLQl1MzIgY21kX3JpbmdfYWRkcl9sbzsKLQl1MzIgY21kX3JpbmdfYWRkcl9oaTsKLQl1MzIgY21kX3Jpbmdfc2l6ZTsKLQl1MzIgcnNydmQ7CisJX19sZTY0IGNtZF9jb25zdW1lcl9vZmZzZXQ7CisJX19sZTY0IGNtZF9yaW5nX2FkZHI7CisJX19sZTMyIGNtZF9yaW5nX3NpemU7CisJX19sZTMyIHJzcnZkOwogCiAJLyogdGhyZWUgcmVjZWl2ZSByaW5ncyAqLwogCXN0cnVjdCBuZXR4ZW5fcmN2X2NvbnRleHQgcmN2X2N0eFszXTsKIAogCS8qIG9uZSBzdGF0dXMgcmluZyAqLwotCXUzMiBzdHNfcmluZ19hZGRyX2xvOwotCXUzMiBzdHNfcmluZ19hZGRyX2hpOwotCXUzMiBzdHNfcmluZ19zaXplOworCV9fbGU2NCBzdHNfcmluZ19hZGRyOworCV9fbGUzMiBzdHNfcmluZ19zaXplOwogCi0JdTMyIGN0eF9pZDsKKwlfX2xlMzIgY3R4X2lkOwogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg2NCkpKTsKIAogLyoKQEAgLTMwNiw4MSArMjk1LDg1IEBACiAJKChjbWRfZGVzYyktPnBvcnRfY3R4aWQgfD0gKCh2YXIpICYgMHgwRikpCiAKICNkZWZpbmUgbmV0eGVuX3NldF9jbWRfZGVzY19mbGFncyhjbWRfZGVzYywgdmFsKQlcCi0JX25ldHhlbl9zZXRfYml0cygoY21kX2Rlc2MpLT5mbGFnc19vcGNvZGUsIDAsIDcsIHZhbCkKKwkoKGNtZF9kZXNjKS0+ZmxhZ3Nfb3Bjb2RlICY9IH5jcHVfdG9fbGUxNigweDdmKSwgXAorCShjbWRfZGVzYyktPmZsYWdzX29wY29kZSB8PSBjcHVfdG9fbGUxNigodmFsKSAmIDB4N2YpKQogI2RlZmluZSBuZXR4ZW5fc2V0X2NtZF9kZXNjX29wY29kZShjbWRfZGVzYywgdmFsKQlcCi0JX25ldHhlbl9zZXRfYml0cygoY21kX2Rlc2MpLT5mbGFnc19vcGNvZGUsIDcsIDYsIHZhbCkKKwkoKGNtZF9kZXNjKS0+ZmxhZ3Nfb3Bjb2RlICY9IH5jcHVfdG9fbGUxNigweDNmPDw3KSwgXAorCShjbWRfZGVzYyktPmZsYWdzX29wY29kZSB8PSBjcHVfdG9fbGUxNigodmFsKSAmICgweDNmPDw3KSkpCiAKICNkZWZpbmUgbmV0eGVuX3NldF9jbWRfZGVzY19udW1fb2ZfYnVmZihjbWRfZGVzYywgdmFsKQlcCi0JX25ldHhlbl9zZXRfYml0cygoY21kX2Rlc2MpLT5udW1fb2ZfYnVmZmVyc190b3RhbF9sZW5ndGgsIDAsIDgsIHZhbCk7CisJKChjbWRfZGVzYyktPm51bV9vZl9idWZmZXJzX3RvdGFsX2xlbmd0aCAmPSB+Y3B1X3RvX2xlMzIoMHhmZiksIFwKKwkoY21kX2Rlc2MpLT5udW1fb2ZfYnVmZmVyc190b3RhbF9sZW5ndGggfD0gY3B1X3RvX2xlMzIoKHZhbCkgJiAweGZmKSkKICNkZWZpbmUgbmV0eGVuX3NldF9jbWRfZGVzY190b3RhbGxlbmd0aChjbWRfZGVzYywgdmFsKQlcCi0JX25ldHhlbl9zZXRfYml0cygoY21kX2Rlc2MpLT5udW1fb2ZfYnVmZmVyc190b3RhbF9sZW5ndGgsIDgsIDI0LCB2YWwpOworCSgoY21kX2Rlc2MpLT5udW1fb2ZfYnVmZmVyc190b3RhbF9sZW5ndGggJj0gY3B1X3RvX2xlMzIoMHhmZiksIFwKKwkoY21kX2Rlc2MpLT5udW1fb2ZfYnVmZmVyc190b3RhbF9sZW5ndGggfD0gY3B1X3RvX2xlMzIodmFsIDw8IDI0KSkKIAogI2RlZmluZSBuZXR4ZW5fZ2V0X2NtZF9kZXNjX29wY29kZShjbWRfZGVzYykJXAotCSgoKGNtZF9kZXNjKS0+ZmxhZ3Nfb3Bjb2RlID4+IDcpICYgMHgwMDNGKQorCSgobGUxNl90b19jcHUoKGNtZF9kZXNjKS0+ZmxhZ3Nfb3Bjb2RlKSA+PiA3KSAmIDB4MDAzRikKICNkZWZpbmUgbmV0eGVuX2dldF9jbWRfZGVzY190b3RhbGxlbmd0aChjbWRfZGVzYykJXAotCSgoKGNtZF9kZXNjKS0+bnVtX29mX2J1ZmZlcnNfdG90YWxfbGVuZ3RoID4+IDgpICYgMHgwRkZGRkZGKQorCShsZTMyX3RvX2NwdSgoY21kX2Rlc2MpLT5udW1fb2ZfYnVmZmVyc190b3RhbF9sZW5ndGgpID4+IDgpCiAKIHN0cnVjdCBjbWRfZGVzY190eXBlMCB7CiAJdTggdGNwX2hkcl9vZmZzZXQ7CS8qIEZvciBMU08gb25seSAqLwogCXU4IGlwX2hkcl9vZmZzZXQ7CS8qIEZvciBMU08gb25seSAqLwogCS8qIEJpdCBwYXR0ZXJuOiAwLTYgZmxhZ3MsIDctMTIgb3Bjb2RlLCAxMy0xNSB1bnVzZWQgKi8KLQl1MTYgZmxhZ3Nfb3Bjb2RlOworCV9fbGUxNiBmbGFnc19vcGNvZGU7CiAJLyogQml0IHBhdHRlcm46IDAtNyB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMsCiAJICAgOC0zMSBUb3RhbCBzaXplIG9mIHRoZSBwYWNrZXQgKi8KLQl1MzIgbnVtX29mX2J1ZmZlcnNfdG90YWxfbGVuZ3RoOworCV9fbGUzMiBudW1fb2ZfYnVmZmVyc190b3RhbF9sZW5ndGg7CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdTMyIGFkZHJfbG93X3BhcnQyOwotCQkJdTMyIGFkZHJfaGlnaF9wYXJ0MjsKKwkJCV9fbGUzMiBhZGRyX2xvd19wYXJ0MjsKKwkJCV9fbGUzMiBhZGRyX2hpZ2hfcGFydDI7CiAJCX07Ci0JCXU2NCBhZGRyX2J1ZmZlcjI7CisJCV9fbGU2NCBhZGRyX2J1ZmZlcjI7CiAJfTsKIAotCXUxNiByZWZlcmVuY2VfaGFuZGxlOwkvKiBjaGFuZ2VkIHRvIHUxNiB0byBhZGQgbXNzICovCi0JdTE2IG1zczsJCS8qIHBhc3NlZCBieSBORElTX1BBQ0tFVCBmb3IgTFNPICovCisJX19sZTE2IHJlZmVyZW5jZV9oYW5kbGU7CS8qIGNoYW5nZWQgdG8gdTE2IHRvIGFkZCBtc3MgKi8KKwlfX2xlMTYgbXNzOwkJLyogcGFzc2VkIGJ5IE5ESVNfUEFDS0VUIGZvciBMU08gKi8KIAkvKiBCaXQgcGF0dGVybiAwLTMgcG9ydCwgMC0zIGN0eCBpZCAqLwogCXU4IHBvcnRfY3R4aWQ7CiAJdTggdG90YWxfaGRyX2xlbmd0aDsJLyogTFNPIG9ubHkgOiBNQUMrSVArVENQIEhkciBzaXplICovCi0JdTE2IGNvbm5faWQ7CQkvKiBJUFNlYyBvZmZvYWQgb25seSAqLworCV9fbGUxNiBjb25uX2lkOwkJLyogSVBTZWMgb2Zmb2FkIG9ubHkgKi8KIAogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXUzMiBhZGRyX2xvd19wYXJ0MzsKLQkJCXUzMiBhZGRyX2hpZ2hfcGFydDM7CisJCQlfX2xlMzIgYWRkcl9sb3dfcGFydDM7CisJCQlfX2xlMzIgYWRkcl9oaWdoX3BhcnQzOwogCQl9OwotCQl1NjQgYWRkcl9idWZmZXIzOworCQlfX2xlNjQgYWRkcl9idWZmZXIzOwogCX07CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdTMyIGFkZHJfbG93X3BhcnQxOwotCQkJdTMyIGFkZHJfaGlnaF9wYXJ0MTsKKwkJCV9fbGUzMiBhZGRyX2xvd19wYXJ0MTsKKwkJCV9fbGUzMiBhZGRyX2hpZ2hfcGFydDE7CiAJCX07Ci0JCXU2NCBhZGRyX2J1ZmZlcjE7CisJCV9fbGU2NCBhZGRyX2J1ZmZlcjE7CiAJfTsKIAotCXUxNiBidWZmZXIxX2xlbmd0aDsKLQl1MTYgYnVmZmVyMl9sZW5ndGg7Ci0JdTE2IGJ1ZmZlcjNfbGVuZ3RoOwotCXUxNiBidWZmZXI0X2xlbmd0aDsKKwlfX2xlMTYgYnVmZmVyMV9sZW5ndGg7CisJX19sZTE2IGJ1ZmZlcjJfbGVuZ3RoOworCV9fbGUxNiBidWZmZXIzX2xlbmd0aDsKKwlfX2xlMTYgYnVmZmVyNF9sZW5ndGg7CiAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1MzIgYWRkcl9sb3dfcGFydDQ7Ci0JCQl1MzIgYWRkcl9oaWdoX3BhcnQ0OworCQkJX19sZTMyIGFkZHJfbG93X3BhcnQ0OworCQkJX19sZTMyIGFkZHJfaGlnaF9wYXJ0NDsKIAkJfTsKLQkJdTY0IGFkZHJfYnVmZmVyNDsKKwkJX19sZTY0IGFkZHJfYnVmZmVyNDsKIAl9OwogCi0JdTY0IHVudXNlZDsKKwlfX2xlNjQgdW51c2VkOwogCiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDY0KSkpOwogCiAvKiBOb3RlOiBzaXplb2YocmN2X2Rlc2MpIHNob3VsZCBhbHdheXMgYmUgYSBtdXRsaXBsZSBvZiAyICovCiBzdHJ1Y3QgcmN2X2Rlc2MgewotCXUxNiByZWZlcmVuY2VfaGFuZGxlOwotCXUxNiByZXNlcnZlZDsKLQl1MzIgYnVmZmVyX2xlbmd0aDsJLyogYWxsb2NhdGVkIGJ1ZmZlciBsZW5ndGggKHVzdWFsbHkgMkspICovCi0JdTY0IGFkZHJfYnVmZmVyOworCV9fbGUxNiByZWZlcmVuY2VfaGFuZGxlOworCV9fbGUxNiByZXNlcnZlZDsKKwlfX2xlMzIgYnVmZmVyX2xlbmd0aDsJLyogYWxsb2NhdGVkIGJ1ZmZlciBsZW5ndGggKHVzdWFsbHkgMkspICovCisJX19sZTY0IGFkZHJfYnVmZmVyOwogfTsKIAogLyogb3Bjb2RlIGZpZWxkIGluIHN0YXR1c19kZXNjICovCkBAIC00MDYsMzYgKzM5OSwzNiBAQAogCSgoKHN0YXR1c19kZXNjKS0+bHJvICYgMHg4MCkgPj4gNykKIAogI2RlZmluZSBuZXR4ZW5fZ2V0X3N0c19wb3J0KHN0YXR1c19kZXNjKQlcCi0JKChzdGF0dXNfZGVzYyktPnN0YXR1c19kZXNjX2RhdGEgJiAweDBGKQorCShsZTY0X3RvX2NwdSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhKSAmIDB4MEYpCiAjZGVmaW5lIG5ldHhlbl9nZXRfc3RzX3N0YXR1cyhzdGF0dXNfZGVzYykJXAotCSgoKHN0YXR1c19kZXNjKS0+c3RhdHVzX2Rlc2NfZGF0YSA+PiA0KSAmIDB4MEYpCisJKChsZTY0X3RvX2NwdSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhKSA+PiA0KSAmIDB4MEYpCiAjZGVmaW5lIG5ldHhlbl9nZXRfc3RzX3R5cGUoc3RhdHVzX2Rlc2MpCVwKLQkoKChzdGF0dXNfZGVzYyktPnN0YXR1c19kZXNjX2RhdGEgPj4gOCkgJiAweDBGKQorCSgobGU2NF90b19jcHUoKHN0YXR1c19kZXNjKS0+c3RhdHVzX2Rlc2NfZGF0YSkgPj4gOCkgJiAweDBGKQogI2RlZmluZSBuZXR4ZW5fZ2V0X3N0c190b3RhbGxlbmd0aChzdGF0dXNfZGVzYykJXAotCSgoKHN0YXR1c19kZXNjKS0+c3RhdHVzX2Rlc2NfZGF0YSA+PiAxMikgJiAweEZGRkYpCisJKChsZTY0X3RvX2NwdSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhKSA+PiAxMikgJiAweEZGRkYpCiAjZGVmaW5lIG5ldHhlbl9nZXRfc3RzX3JlZmhhbmRsZShzdGF0dXNfZGVzYykJXAotCSgoKHN0YXR1c19kZXNjKS0+c3RhdHVzX2Rlc2NfZGF0YSA+PiAyOCkgJiAweEZGRkYpCisJKChsZTY0X3RvX2NwdSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhKSA+PiAyOCkgJiAweEZGRkYpCiAjZGVmaW5lIG5ldHhlbl9nZXRfc3RzX3Byb3Qoc3RhdHVzX2Rlc2MpCVwKLQkoKChzdGF0dXNfZGVzYyktPnN0YXR1c19kZXNjX2RhdGEgPj4gNDQpICYgMHgwRikKKwkoKGxlNjRfdG9fY3B1KChzdGF0dXNfZGVzYyktPnN0YXR1c19kZXNjX2RhdGEpID4+IDQ0KSAmIDB4MEYpCiAjZGVmaW5lIG5ldHhlbl9nZXRfc3RzX293bmVyKHN0YXR1c19kZXNjKQlcCi0JKCgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhID4+IDU2KSAmIDB4MDMpCisJKChsZTY0X3RvX2NwdSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhKSA+PiA1NikgJiAweDAzKQogI2RlZmluZSBuZXR4ZW5fZ2V0X3N0c19vcGNvZGUoc3RhdHVzX2Rlc2MpCVwKLQkoKChzdGF0dXNfZGVzYyktPnN0YXR1c19kZXNjX2RhdGEgPj4gNTgpICYgMHgwM0YpCisJKChsZTY0X3RvX2NwdSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhKSA+PiA1OCkgJiAweDAzRikKIAogI2RlZmluZSBuZXR4ZW5fY2xlYXJfc3RzX293bmVyKHN0YXR1c19kZXNjKQlcCiAJKChzdGF0dXNfZGVzYyktPnN0YXR1c19kZXNjX2RhdGEgJj0JXAotCX4oKCh1bnNpZ25lZCBsb25nIGxvbmcpMykgPDwgNTYgKSkKKwl+Y3B1X3RvX2xlNjQoKCh1bnNpZ25lZCBsb25nIGxvbmcpMykgPDwgNTYgKSkKICNkZWZpbmUgbmV0eGVuX3NldF9zdHNfb3duZXIoc3RhdHVzX2Rlc2MsIHZhbCkJXAogCSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhIHw9CVwKLQkoKCh1bnNpZ25lZCBsb25nIGxvbmcpKCh2YWwpICYgMHgzKSkgPDwgNTYgKSkKKwljcHVfdG9fbGU2NCgoKHVuc2lnbmVkIGxvbmcgbG9uZykoKHZhbCkgJiAweDMpKSA8PCA1NiApKQogCiBzdHJ1Y3Qgc3RhdHVzX2Rlc2MgewogCS8qIEJpdCBwYXR0ZXJuOiAwLTMgcG9ydCwgNC03IHN0YXR1cywgOC0xMSB0eXBlLCAxMi0yNyB0b3RhbF9sZW5ndGgKIAkgICAyOC00MyByZWZlcmVuY2VfaGFuZGxlLCA0NC00NyBwcm90b2NvbCwgNDgtNTIgdW51c2VkCiAJICAgNTMtNTUgZGVzY19jbnQsIDU2LTU3IG93bmVyLCA1OC02MyBvcGNvZGUKIAkgKi8KLQl1NjQgc3RhdHVzX2Rlc2NfZGF0YTsKLQl1MzIgaGFzaF92YWx1ZTsKKwlfX2xlNjQgc3RhdHVzX2Rlc2NfZGF0YTsKKwlfX2xlMzIgaGFzaF92YWx1ZTsKIAl1OCBoYXNoX3R5cGU7CiAJdTggbXNnX3R5cGU7CiAJdTggdW51c2VkOwpAQCAtODUyLDggKzg0NSw2IEBACiAJc3BpbmxvY2tfdCB0eF9sb2NrOwogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfdGltZW91dF90YXNrOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CiAKIAl1MzIgY3Vycl93aW5kb3c7CkBAIC04ODcsNyArODc4LDYgQEAKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCByZWN2X2N0eFtNQVhfUkNWX0NUWF07CiAKIAlpbnQgaXNfdXA7Ci0JaW50IG51bWJlcjsKIAlzdHJ1Y3QgbmV0eGVuX2R1bW15X2RtYSBkdW1teV9kbWE7CiAKIAkvKiBDb250ZXh0IGludGVyZmFjZSBzaGFyZWQgYmV0d2VlbiBjYXJkIGFuZCBob3N0ICovCkBAIC05NTAsNiArOTQwLDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CiAJc3RydWN0IG5ldHhlbl9wb3J0X3N0YXRzIHN0YXRzOworCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF90aW1lb3V0X3Rhc2s7CiB9OwogCiAjZGVmaW5lIFBDSV9PRkZTRVRfRklSU1RfUkFOR0UoYWRhcHRlciwgb2ZmKSAgICBcCkBAIC0xMDA4LDkgKzk5OSw5IEBACiB2b2lkIG5ldHhlbl9uaXVfZ2JlX3NldF9nbWlpX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCwKIAkJCQkgIGxvbmcgZW5hYmxlKTsKIGludCBuZXR4ZW5fbml1X2diZV9waHlfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGxvbmcgcGh5LCBsb25nIHJlZywKLQkJCSAgICBfX2xlMzIgKiByZWFkdmFsKTsKKwkJCSAgICBfX3UzMiAqIHJlYWR2YWwpOwogaW50IG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGxvbmcgcGh5LAotCQkJICAgICBsb25nIHJlZywgX19sZTMyIHZhbCk7CisJCQkgICAgIGxvbmcgcmVnLCBfX3UzMiB2YWwpOwogCiAvKiBGdW5jdGlvbnMgYXZhaWxhYmxlIGZyb20gbmV0eGVuX25pY19ody5jICovCiBpbnQgbmV0eGVuX25pY19zZXRfbXR1X3hnYihzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQsIGludCBuZXdfbXR1KTsKQEAgLTEwMjcsMTQgKzEwMTgsNiBAQAogCQkJICBpbnQgbGVuKTsKIGludCBuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwgdm9pZCAqZGF0YSwKIAkJCSAgIGludCBsZW4pOwotaW50IG5ldHhlbl9uaWNfaHdfcmVhZF9pb2N0bChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYsCi0JCQkgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pOwotaW50IG5ldHhlbl9uaWNfaHdfd3JpdGVfaW9jdGwoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLAotCQkJICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbik7Ci1pbnQgbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlX2lvY3RsKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICB1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7Ci1pbnQgbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfaW9jdGwoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpOwogdm9pZCBuZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQkJCSB1bnNpZ25lZCBsb25nIG9mZiwgaW50IGRhdGEpOwogCkBAIC0xMDY3LDkgKzEwNTAsNiBAQAogCQkgICAgICBzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IG5ldHhlbl9uaWNfaHdfcmVzb3VyY2VzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIG5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKLWludAotbmV0eGVuX25pY19kb19pb2N0bChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgKnVfZGF0YSwKLQkJICAgIHN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCk7CiBpbnQgbmV0eGVuX25pY19yeF9oYXNfd29yayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IG5ldHhlbl9uaWNfdHhfaGFzX3dvcmsoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwppbmRleCAyYWI0ODg1Li5jMzgxZDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAibmV0eGVuX25pY19ody5oIgogI2luY2x1ZGUgIm5ldHhlbl9uaWMuaCIKICNpbmNsdWRlICJuZXR4ZW5fbmljX3BoYW5fcmVnLmgiCi0jaW5jbHVkZSAibmV0eGVuX25pY19pb2N0bC5oIgogCiBzdHJ1Y3QgbmV0eGVuX25pY19zdGF0cyB7CiAJY2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOwpAQCAtNzksOCArNzgsNyBAQAogCXsidHhfYnl0ZXMiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMudHhieXRlcyl9LAogfTsKIAotI2RlZmluZSBORVRYRU5fTklDX1NUQVRTX0xFTglcCi0Jc2l6ZW9mKG5ldHhlbl9uaWNfZ3N0cmluZ3Nfc3RhdHMpIC8gc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fbmljX3N0YXRzKQorI2RlZmluZSBORVRYRU5fTklDX1NUQVRTX0xFTglBUlJBWV9TSVpFKG5ldHhlbl9uaWNfZ3N0cmluZ3Nfc3RhdHMpCiAKIHN0YXRpYyBjb25zdCBjaGFyIG5ldHhlbl9uaWNfZ3N0cmluZ3NfdGVzdFtdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CiAJIlJlZ2lzdGVyX1Rlc3Rfb2ZmbGluZSIsICJFRVBST01fVGVzdF9vZmZsaW5lIiwKQEAgLTIyMCw3ICsyMTgsNyBAQAogewogCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKLQlfX2xlMzIgc3RhdHVzOworCV9fdTMyIHN0YXR1czsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwogCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewpAQCAtMjI4LDcgKzIyNiw3IEBACiAJCWlmIChhZGFwdGVyLT5waHlfd3JpdGUKIAkJICAgICYmIGFkYXB0ZXItPnBoeV93cml0ZShhZGFwdGVyLCBwb3J0LT5wb3J0bnVtLAogCQkJCQkgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9BVVRPTkVHLAotCQkJCQkgIChfX2xlMzIpIGVjbWQtPmF1dG9uZWcpICE9IDApCisJCQkJCSAgZWNtZC0+YXV0b25lZykgIT0gMCkKIAkJCXJldHVybiAtRUlPOwogCQllbHNlCiAJCQlwb3J0LT5saW5rX2F1dG9uZWcgPSBlY21kLT5hdXRvbmVnOwpAQCAtMjgxLDcgKzI3OSw3IEBACiB9CiAKIHN0cnVjdCBuZXR4ZW5fbml1X3JlZ3MgewotCV9fbGUzMiByZWdbTkVUWEVOX05JQ19SRUdTX0NPVU5UXTsKKwlfX3UzMiByZWdbTkVUWEVOX05JQ19SRUdTX0NPVU5UXTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0eGVuX25pdV9yZWdzIG5pdV9yZWdpc3RlcnNbXSA9IHsKQEAgLTM3NCw3ICszNzIsNyBAQAogewogCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKLQlfX2xlMzIgbW9kZSwgKnJlZ3NfYnVmZiA9IHA7CisJX191MzIgbW9kZSwgKnJlZ3NfYnVmZiA9IHA7CiAJdm9pZCBfX2lvbWVtICphZGRyOwogCWludCBpLCB3aW5kb3c7CiAKQEAgLTQxNyw3ICs0MTUsNyBAQAogewogCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKLQlfX2xlMzIgc3RhdHVzOworCV9fdTMyIHN0YXR1czsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwogCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewpAQCAtNDg0LDEzICs0ODIsMTMgQEAKIHsKIAlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7Ci0JX19sZTMyIHZhbDsKKwlfX3UzMiB2YWw7CiAKIAlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJLyogZ2V0IGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLwogCQluZXR4ZW5fbmljX3JlYWRfdzAoYWRhcHRlciwKIAkJCQkgICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0LT5wb3J0bnVtKSwKLQkJCQkgICAodTMyICopICYgdmFsKTsKKwkJCQkgICAmdmFsKTsKIAkJcGF1c2UtPnJ4X3BhdXNlID0gbmV0eGVuX2diX2dldF9yeF9mbG93Y3RsKHZhbCk7CiAJCXBhdXNlLT50eF9wYXVzZSA9IG5ldHhlbl9nYl9nZXRfdHhfZmxvd2N0bCh2YWwpOwogCQkvKiBnZXQgYXV0b25lZyBzZXR0aW5ncyAqLwpAQCAtNTA0LDcgKzUwMiw3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwotCV9fbGUzMiB2YWw7CisJX191MzIgdmFsOwogCXVuc2lnbmVkIGludCBhdXRvbmVnOwogCiAJLyogcmVhZCBtb2RlICovCkBAIC01MjQsMTMgKzUyMiwxMyBAQAogCiAJCW5ldHhlbl9uaWNfd3JpdGVfdzAoYWRhcHRlciwKIAkJCQkgICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydC0+cG9ydG51bSksCi0JCQkJICAgICoodTMyICopICgmdmFsKSk7CisJCQkJICAgIComdmFsKTsKIAkJLyogc2V0IGF1dG9uZWcgKi8KIAkJYXV0b25lZyA9IHBhdXNlLT5hdXRvbmVnOwogCQlpZiAoYWRhcHRlci0+cGh5X3dyaXRlCiAJCSAgICAmJiBhZGFwdGVyLT5waHlfd3JpdGUoYWRhcHRlciwgcG9ydC0+cG9ydG51bSwKIAkJCQkJICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfQVVUT05FRywKLQkJCQkJICAoX19sZTMyKSBhdXRvbmVnKSAhPSAwKQorCQkJCQkgIGF1dG9uZWcpICE9IDApCiAJCQlyZXR1cm4gLUVJTzsKIAkJZWxzZSB7CiAJCQlwb3J0LT5saW5rX2F1dG9uZWcgPSBwYXVzZS0+YXV0b25lZzsKQEAgLTU0NSw3ICs1NDMsNyBAQAogCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKIAl1MzIgZGF0YV9yZWFkLCBkYXRhX3dyaXR0ZW4sIHNhdmU7Ci0JX19sZTMyIG1vZGU7CisJX191MzIgbW9kZTsKIAogCS8qIAogCSAqIGZpcnN0IHRlc3QgdGhlICJSZWFkIE9ubHkiIHJlZ2lzdGVycyBieSB3cml0aW5nIHdoaWNoIG1vZGUKQEAgLTcxMSw3ICs3MDksNiBAQAogCQkgICAgKG5ldHhlbl9uaWNfZ3N0cmluZ3Nfc3RhdHNbaW5kZXhdLnNpemVvZl9zdGF0ID09CiAJCSAgICAgc2l6ZW9mKHU2NCkpID8gKih1NjQgKikgcCA6ICoodTMyICopIHA7CiAJfQotCiB9CiAKIHN0cnVjdCBldGh0b29sX29wcyBuZXR4ZW5fbmljX2V0aHRvb2xfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKaW5kZXggOTE0N2I2MC4uZjI2MzIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCkBAIC05NSw3ICs5NSw3IEBACiAJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOwotCV9fbGUzMiBuZXR4ZW5fbWFjX2FkZHJfY250bF9kYXRhID0gMDsKKwlfX3UzMiBuZXR4ZW5fbWFjX2FkZHJfY250bF9kYXRhID0gMDsKIAogCW1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CkBAIC0yMzYsOCArMjM2LDkgQEAKIAl9CiAJbWVtc2V0KGFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgbmV0eGVuX3JpbmdfY3R4KSk7CiAJYWRhcHRlci0+Y3R4X2Rlc2MgPSAoc3RydWN0IG5ldHhlbl9yaW5nX2N0eCAqKWFkZHI7Ci0JYWRhcHRlci0+Y3R4X2Rlc2MtPmNtZF9jb25zdW1lcl9vZmZzZXQgPSBhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIKLQkgICAgKyBzaXplb2Yoc3RydWN0IG5ldHhlbl9yaW5nX2N0eCk7CisJYWRhcHRlci0+Y3R4X2Rlc2MtPmNtZF9jb25zdW1lcl9vZmZzZXQgPQorCSAgICBjcHVfdG9fbGU2NChhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIgKworCQkJc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpKTsKIAlhZGFwdGVyLT5jbWRfY29uc3VtZXIgPSAodWludDMyX3QgKikgKCgoY2hhciAqKWFkZHIpICsKIAkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpKTsKIApAQCAtMjUzLDExICsyNTQsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JYWRhcHRlci0+Y3R4X2Rlc2MtPmNtZF9yaW5nX2FkZHJfbG8gPQotCSAgICBody0+Y21kX2Rlc2NfcGh5c19hZGRyICYgMHhmZmZmZmZmZlVMOwotCWFkYXB0ZXItPmN0eF9kZXNjLT5jbWRfcmluZ19hZGRyX2hpID0KLQkgICAgKCh1NjQpIGh3LT5jbWRfZGVzY19waHlzX2FkZHIgPj4gMzIpOwotCWFkYXB0ZXItPmN0eF9kZXNjLT5jbWRfcmluZ19zaXplID0gYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQ7CisJYWRhcHRlci0+Y3R4X2Rlc2MtPmNtZF9yaW5nX2FkZHIgPQorCQljcHVfdG9fbGU2NChody0+Y21kX2Rlc2NfcGh5c19hZGRyKTsKKwlhZGFwdGVyLT5jdHhfZGVzYy0+Y21kX3Jpbmdfc2l6ZSA9CisJCWNwdV90b19sZTMyKGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKIAogCWh3LT5jbWRfZGVzY19oZWFkID0gKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKWFkZHI7CiAKQEAgLTI3OCwxMiArMjc4LDEwIEBACiAJCQkJcmV0dXJuIGVycjsKIAkJCX0KIAkJCXJjdl9kZXNjLT5kZXNjX2hlYWQgPSAoc3RydWN0IHJjdl9kZXNjICopYWRkcjsKLQkJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX2FkZHJfbG8gPQotCQkJICAgIHJjdl9kZXNjLT5waHlzX2FkZHIgJiAweGZmZmZmZmZmVUw7Ci0JCQlhZGFwdGVyLT5jdHhfZGVzYy0+cmN2X2N0eFtyaW5nXS5yY3ZfcmluZ19hZGRyX2hpID0KLQkJCSAgICAoKHU2NCkgcmN2X2Rlc2MtPnBoeXNfYWRkciA+PiAzMik7CisJCQlhZGFwdGVyLT5jdHhfZGVzYy0+cmN2X2N0eFtyaW5nXS5yY3ZfcmluZ19hZGRyID0KKwkJCSAgICBjcHVfdG9fbGU2NChyY3ZfZGVzYy0+cGh5c19hZGRyKTsKIAkJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX3NpemUgPQotCQkJICAgIHJjdl9kZXNjLT5tYXhfcnhfZGVzY19jb3VudDsKKwkJCSAgICBjcHVfdG9fbGUzMihyY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQpOwogCQl9CiAKIAkJYWRkciA9IG5ldHhlbl9hbGxvYyhhZGFwdGVyLT5haHcucGRldiwgU1RBVFVTX0RFU0NfUklOR1NJWkUsCkBAIC0yOTcsMTEgKzI5NSwxMCBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQgPSAoc3RydWN0IHN0YXR1c19kZXNjICopYWRkcjsKLQkJYWRhcHRlci0+Y3R4X2Rlc2MtPnN0c19yaW5nX2FkZHJfbG8gPQotCQkgICAgcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIgJiAweGZmZmZmZmZmVUw7Ci0JCWFkYXB0ZXItPmN0eF9kZXNjLT5zdHNfcmluZ19hZGRyX2hpID0KLQkJICAgICgodTY0KSByZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkciA+PiAzMik7Ci0JCWFkYXB0ZXItPmN0eF9kZXNjLT5zdHNfcmluZ19zaXplID0gYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQ7CisJCWFkYXB0ZXItPmN0eF9kZXNjLT5zdHNfcmluZ19hZGRyID0KKwkJICAgIGNwdV90b19sZTY0KHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKKwkJYWRhcHRlci0+Y3R4X2Rlc2MtPnN0c19yaW5nX3NpemUgPQorCQkgICAgY3B1X3RvX2xlMzIoYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpOwogCiAJfQogCS8qIFdpbmRvdyA9IDEgKi8KQEAgLTM3Niw3ICszNzMsNyBAQAogCQkgICAgKChza2ItPm5oLmlwaCktPmlobCAqIHNpemVvZih1MzIpKSArCiAJCSAgICAoKHNrYi0+aC50aCktPmRvZmYgKiBzaXplb2YodTMyKSk7CiAJCW5ldHhlbl9zZXRfY21kX2Rlc2Nfb3Bjb2RlKGRlc2MsIFRYX1RDUF9MU08pOwotCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpIHsKKwl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJaWYgKHNrYi0+bmguaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgewogCQkJbmV0eGVuX3NldF9jbWRfZGVzY19vcGNvZGUoZGVzYywgVFhfVENQX1BLVCk7CiAJCX0gZWxzZSBpZiAoc2tiLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQKSB7CkBAIC0zODcsMTAgKzM4NCw2IEBACiAJfQogCWFkYXB0ZXItPnN0YXRzLnhtaXRjc3VtbWVkKys7CiAJZGVzYy0+dGNwX2hkcl9vZmZzZXQgPSBza2ItPmgucmF3IC0gc2tiLT5kYXRhOwotCW5ldHhlbl9zZXRfY21kX2Rlc2NfdG90YWxsZW5ndGgoZGVzYywKLQkJCQkJY3B1X3RvX2xlMzIKLQkJCQkJKG5ldHhlbl9nZXRfY21kX2Rlc2NfdG90YWxsZW5ndGgKLQkJCQkJIChkZXNjKSkpOwogCWRlc2MtPmlwX2hkcl9vZmZzZXQgPSBza2ItPm5oLnJhdyAtIHNrYi0+ZGF0YTsKIH0KIApAQCAtODY3LDkgKzg2MCw5IEBACiB2b2lkIG5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKLQlfX2xlMzIgc3RhdHVzOwotCV9fbGUzMiBhdXRvbmVnOwotCV9fbGUzMiBtb2RlOworCV9fdTMyIHN0YXR1czsKKwlfX3UzMiBhdXRvbmVnOworCV9fdTMyIG1vZGU7CiAKIAluZXR4ZW5fbmljX3JlYWRfdzAoYWRhcHRlciwgTkVUWEVOX05JVV9NT0RFLCAmbW9kZSk7CiAJaWYgKG5ldHhlbl9nZXRfbml1X2VuYWJsZV9nZShtb2RlKSkgewkvKiBHYiAxMC8xMDAvMTAwMCBNYnBzIG1vZGUgKi8KQEAgLTk4NCw3ICs5NzcsOCBAQAogCQkgICAgICAgX05FVFhFTl9OSUNfTElOVVhfTUFKT1IsIGZ3X21ham9yKTsKIAkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKIAl9Ci0JaWYgKGZ3X21pbm9yICE9IF9ORVRYRU5fTklDX0xJTlVYX01JTk9SKSB7CisJaWYgKGZ3X21pbm9yICE9IF9ORVRYRU5fTklDX0xJTlVYX01JTk9SICYmCisJCQlmd19taW5vciAhPSAoX05FVFhFTl9OSUNfTElOVVhfTUlOT1IgKyAxKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlRoZSBtaXNtYXRjaCBpbiBkcml2ZXIgdmVyc2lvbiBhbmQgZmlybXdhcmUgIgogCQkgICAgICAgInZlcnNpb24gbWlub3IgbnVtYmVyXG4iCiAJCSAgICAgICAiRHJpdmVyIHZlcnNpb24gbWlub3IgbnVtYmVyID0gJWQgXHQiCkBAIC05OTcsMjk3ICs5OTEsMyBAQAogCQkgICAgICAgZndfbWFqb3IsIGZ3X21pbm9yKTsKIH0KIAotaW50IG5ldHhlbl9jcmJfcmVhZF92YWwoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBsb25nIG9mZikKLXsKLQlpbnQgZGF0YTsKLQluZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwgb2ZmLCAmZGF0YSwgNCk7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0KLWludCBuZXR4ZW5fbmljX2h3X3dyaXRlX2lvY3RsKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwKLQkJCSAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0Jdm9pZCAqYWRkcjsKLQl1NjQgb2Zmc2V0ID0gb2ZmOwotCXU4ICptZW1fcHRyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG1lbV9iYXNlOwotCXVuc2lnbmVkIGxvbmcgbWVtX3BhZ2U7Ci0KLQlpZiAoQUREUl9JTl9XSU5ET1cxKG9mZikpIHsKLQkJYWRkciA9IE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIG9mZik7Ci0JCWlmICghYWRkcikgewotCQkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+YWh3LnBkZXYsIDApOwotCQkJb2Zmc2V0ID0gTkVUWEVOX0NSQl9OT1JNQUwob2ZmKTsKLQkJCW1lbV9wYWdlID0gb2Zmc2V0ICYgUEFHRV9NQVNLOwotCQkJaWYgKG1lbV9wYWdlICE9ICgob2Zmc2V0ICsgbGVuIC0gMSkgJiBQQUdFX01BU0spKQotCQkJCW1lbV9wdHIgPQotCQkJCSAgICBpb3JlbWFwKG1lbV9iYXNlICsgbWVtX3BhZ2UsIFBBR0VfU0laRSAqIDIpOwotCQkJZWxzZQotCQkJCW1lbV9wdHIgPQotCQkJCSAgICBpb3JlbWFwKG1lbV9iYXNlICsgbWVtX3BhZ2UsIFBBR0VfU0laRSk7Ci0JCQlpZiAobWVtX3B0ciA9PSAwVUwpIHsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJCWFkZHIgPSBtZW1fcHRyOwotCQkJYWRkciArPSBvZmZzZXQgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JCX0KLQl9IGVsc2UgewotCQlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIG9mZik7Ci0JCWlmICghYWRkcikgewotCQkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+YWh3LnBkZXYsIDApOwotCQkJbWVtX3BhZ2UgPSBvZmYgJiBQQUdFX01BU0s7Ci0JCQlpZiAobWVtX3BhZ2UgIT0gKChvZmYgKyBsZW4gLSAxKSAmIFBBR0VfTUFTSykpCi0JCQkJbWVtX3B0ciA9Ci0JCQkJICAgIGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFICogMik7Ci0JCQllbHNlCi0JCQkJbWVtX3B0ciA9Ci0JCQkJICAgIGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFKTsKLQkJCWlmIChtZW1fcHRyID09IDBVTCkgewotCQkJCXJldHVybiAxOwotCQkJfQotCQkJYWRkciA9IG1lbV9wdHI7Ci0JCQlhZGRyICs9IG9mZiAmIChQQUdFX1NJWkUgLSAxKTsKLQkJfQotCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDApOwotCX0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJd3JpdGViKCoodTggKikgZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJd3JpdGV3KCoodTE2ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXdyaXRlbCgqKHUzMiAqKSBkYXRhLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQl3cml0ZXEoKih1NjQgKikgZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURQUklOVEsoSU5GTywKLQkJCSJ3cml0aW5nIGRhdGEgJWx4IHRvIG9mZnNldCAlbGx4LCBudW0gd29yZHM9JWRcbiIsCi0JCQkqKHVuc2lnbmVkIGxvbmcgKilkYXRhLCBvZmYsIChsZW4gPj4gMykpOwotCi0JCW5ldHhlbl9uaWNfaHdfYmxvY2tfd3JpdGU2NCgodTY0IF9faW9tZW0gKikgZGF0YSwgYWRkciwKLQkJCQkJICAgIChsZW4gPj4gMykpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoIUFERFJfSU5fV0lORE9XMShvZmYpKQotCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOwotCWlmIChtZW1fcHRyKQotCQlpb3VubWFwKG1lbV9wdHIpOwotCXJldHVybiAwOwotfQotCi1pbnQgbmV0eGVuX25pY19od19yZWFkX2lvY3RsKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwKLQkJCSAgICAgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLQl2b2lkICphZGRyOwotCXU2NCBvZmZzZXQ7Ci0JdTggKm1lbV9wdHIgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgbWVtX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBtZW1fcGFnZTsKLQotCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkgewotCQlhZGRyID0gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKTsKLQkJaWYgKCFhZGRyKSB7Ci0JCQltZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChhZGFwdGVyLT5haHcucGRldiwgMCk7Ci0JCQlvZmZzZXQgPSBORVRYRU5fQ1JCX05PUk1BTChvZmYpOwotCQkJbWVtX3BhZ2UgPSBvZmZzZXQgJiBQQUdFX01BU0s7Ci0JCQlpZiAobWVtX3BhZ2UgIT0gKChvZmZzZXQgKyBsZW4gLSAxKSAmIFBBR0VfTUFTSykpCi0JCQkJbWVtX3B0ciA9Ci0JCQkJICAgIGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFICogMik7Ci0JCQllbHNlCi0JCQkJbWVtX3B0ciA9Ci0JCQkJICAgIGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFKTsKLQkJCWlmIChtZW1fcHRyID09IDBVTCkgewotCQkJCSoodTggKikgZGF0YSA9IDA7Ci0JCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCQlhZGRyID0gbWVtX3B0cjsKLQkJCWFkZHIgKz0gb2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpOwotCQl9Ci0JfSBlbHNlIHsKLQkJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpOwotCQlpZiAoIWFkZHIpIHsKLQkJCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPmFody5wZGV2LCAwKTsKLQkJCW1lbV9wYWdlID0gb2ZmICYgUEFHRV9NQVNLOwotCQkJaWYgKG1lbV9wYWdlICE9ICgob2ZmICsgbGVuIC0gMSkgJiBQQUdFX01BU0spKQotCQkJCW1lbV9wdHIgPQotCQkJCSAgICBpb3JlbWFwKG1lbV9iYXNlICsgbWVtX3BhZ2UsIFBBR0VfU0laRSAqIDIpOwotCQkJZWxzZQotCQkJCW1lbV9wdHIgPQotCQkJCSAgICBpb3JlbWFwKG1lbV9iYXNlICsgbWVtX3BhZ2UsIFBBR0VfU0laRSk7Ci0JCQlpZiAobWVtX3B0ciA9PSAwVUwpCi0JCQkJcmV0dXJuIDE7Ci0JCQlhZGRyID0gbWVtX3B0cjsKLQkJCWFkZHIgKz0gb2ZmICYgKFBBR0VfU0laRSAtIDEpOwotCQl9Ci0JCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMCk7Ci0JfQotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCQkqKHU4ICopIGRhdGEgPSByZWFkYihhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqKHUxNiAqKSBkYXRhID0gcmVhZHcoYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJKih1MzIgKikgZGF0YSA9IHJlYWRsKGFkZHIpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCSoodTY0ICopIGRhdGEgPSByZWFkcShhZGRyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmV0eGVuX25pY19od19ibG9ja19yZWFkNjQoKHU2NCBfX2lvbWVtICopIGRhdGEsIGFkZHIsCi0JCQkJCSAgIChsZW4gPj4gMykpOwotCQlicmVhazsKLQl9Ci0JaWYgKCFBRERSX0lOX1dJTkRPVzEob2ZmKSkKLQkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAxKTsKLQlpZiAobWVtX3B0cikKLQkJaW91bm1hcChtZW1fcHRyKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV9pb2N0bChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYsCi0JCQkJICAgdm9pZCAqZGF0YSwgaW50IHNpemUpCi17Ci0Jdm9pZCAqYWRkcjsKLQlpbnQgcmV0ID0gMDsKLQl1OCAqbWVtX3B0ciA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKLQl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOwotCi0JaWYgKGRhdGEgPT0gTlVMTCB8fCBvZmYgPiAoMTI4ICogMTAyNCAqIDEwMjQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRhdGE6ICVwIG9mZjolbGx4XG4iLAotCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgZGF0YSwgb2ZmKTsKLQkJcmV0dXJuIDE7Ci0JfQotCW9mZiA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3coYWRhcHRlciwgb2ZmKTsKLQkvKiBDb3JuZXIgY2FzZSA6IE1hbGljaW91cyB1c2VyIHRyaWVkIHRvIGJyZWFrIHRoZSBkcml2ZXIgYnkgcmVhZGluZwotCSAgIGxhc3QgZmV3IGJ5dGVzIGluIHJhbmdlcyBhbmQgdHJpZXMgdG8gcmVhZCBmdXJ0aGVyIGFkZHJlc3Nlcy4KLQkgKi8KLQlpZiAoIXBjaV9iYXNlKGFkYXB0ZXIsIG9mZiArIHNpemUgLSAxKSAmJiBwY2lfYmFzZShhZGFwdGVyLCBvZmYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgYWNjZXNzIHRvIG1lbW9yeSBhZGRyZXNzIHJhbmdlIgotCQkgICAgICAgIiAweCVsbHggLSAweCVsbHhcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG9mZiwKLQkJICAgICAgIG9mZiArIHNpemUpOwotCQlyZXR1cm4gMTsKLQl9Ci0JYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpOwotCURQUklOVEsoSU5GTywgIndyaXRpbmcgZGF0YSAlbGx4IHRvIG9mZnNldCAlbGx4XG4iLAotCQkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEsIG9mZik7Ci0JaWYgKCFhZGRyKSB7Ci0JCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPmFody5wZGV2LCAwKTsKLQkJbWVtX3BhZ2UgPSBvZmYgJiBQQUdFX01BU0s7Ci0JCS8qIE1hcCB0d28gcGFnZXMgd2hlbmV2ZXIgdXNlciB0cmllcyB0byBhY2Nlc3MgYWRkcmVzc2VzIGluIHR3bwotCQkgICBjb25zZWN1dGl2ZSBwYWdlcy4KLQkJICovCi0JCWlmIChtZW1fcGFnZSAhPSAoKG9mZiArIHNpemUgLSAxKSAmIFBBR0VfTUFTSykpCi0JCQltZW1fcHRyID0gaW9yZW1hcChtZW1fYmFzZSArIG1lbV9wYWdlLCBQQUdFX1NJWkUgKiAyKTsKLQkJZWxzZQotCQkJbWVtX3B0ciA9IGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFKTsKLQkJaWYgKG1lbV9wdHIgPT0gMFVMKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlhZGRyID0gbWVtX3B0cjsKLQkJYWRkciArPSBvZmYgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JfQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJd3JpdGViKCoodTggKikgZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJd3JpdGV3KCoodTE2ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXdyaXRlbCgqKHUzMiAqKSBkYXRhLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQl3cml0ZXEoKih1NjQgKikgZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURQUklOVEsoSU5GTywKLQkJCSJ3cml0aW5nIGRhdGEgJWx4IHRvIG9mZnNldCAlbGx4LCBudW0gd29yZHM9JWRcbiIsCi0JCQkqKHVuc2lnbmVkIGxvbmcgKilkYXRhLCBvZmYsIChzaXplID4+IDMpKTsKLQotCQluZXR4ZW5fbmljX2h3X2Jsb2NrX3dyaXRlNjQoKHU2NCBfX2lvbWVtICopIGRhdGEsIGFkZHIsCi0JCQkJCSAgICAoc2l6ZSA+PiAzKSk7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChtZW1fcHRyKQotCQlpb3VubWFwKG1lbV9wdHIpOwotCURQUklOVEsoSU5GTywgIndyb3RlICVsbHhcbiIsICoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfaW9jdGwoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCi17Ci0Jdm9pZCAqYWRkcjsKLQlpbnQgcmV0ID0gMDsKLQl1OCAqbWVtX3B0ciA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKLQl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOwotCi0JaWYgKGRhdGEgPT0gTlVMTCB8fCBvZmYgPiAoMTI4ICogMTAyNCAqIDEwMjQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRhdGE6ICVwIG9mZjolbGx4XG4iLAotCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgZGF0YSwgb2ZmKTsKLQkJcmV0dXJuIDE7Ci0JfQotCW9mZiA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3coYWRhcHRlciwgb2ZmKTsKLQkvKiBDb3JuZXIgY2FzZSA6IE1hbGljaW91cyB1c2VyIHRyaWVkIHRvIGJyZWFrIHRoZSBkcml2ZXIgYnkgcmVhZGluZwotCSAgIGxhc3QgZmV3IGJ5dGVzIGluIHJhbmdlcyBhbmQgdHJpZXMgdG8gcmVhZCBmdXJ0aGVyIGFkZHJlc3Nlcy4KLQkgKi8KLQlpZiAoIXBjaV9iYXNlKGFkYXB0ZXIsIG9mZiArIHNpemUgLSAxKSAmJiBwY2lfYmFzZShhZGFwdGVyLCBvZmYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgYWNjZXNzIHRvIG1lbW9yeSBhZGRyZXNzIHJhbmdlIgotCQkgICAgICAgIiAweCVsbHggLSAweCVsbHhcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG9mZiwKLQkJICAgICAgIG9mZiArIHNpemUpOwotCQlyZXR1cm4gMTsKLQl9Ci0JYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpOwotCWlmICghYWRkcikgewotCQltZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChhZGFwdGVyLT5haHcucGRldiwgMCk7Ci0JCW1lbV9wYWdlID0gb2ZmICYgUEFHRV9NQVNLOwotCQkvKiBNYXAgdHdvIHBhZ2VzIHdoZW5ldmVyIHVzZXIgdHJpZXMgdG8gYWNjZXNzIGFkZHJlc3NlcyBpbiB0d28KLQkJICAgY29uc2VjdXRpdmUgcGFnZXMuCi0JCSAqLwotCQlpZiAobWVtX3BhZ2UgIT0gKChvZmYgKyBzaXplIC0gMSkgJiBQQUdFX01BU0spKQotCQkJbWVtX3B0ciA9IGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFICogMik7Ci0JCWVsc2UKLQkJCW1lbV9wdHIgPSBpb3JlbWFwKG1lbV9iYXNlICsgbWVtX3BhZ2UsIFBBR0VfU0laRSk7Ci0JCWlmIChtZW1fcHRyID09IDBVTCkgewotCQkJKih1OCAqKSBkYXRhID0gMDsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWFkZHIgPSBtZW1fcHRyOwotCQlhZGRyICs9IG9mZiAmIChQQUdFX1NJWkUgLSAxKTsKLQl9Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQkqKHU4ICopIGRhdGEgPSByZWFkYihhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqKHUxNiAqKSBkYXRhID0gcmVhZHcoYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJKih1MzIgKikgZGF0YSA9IHJlYWRsKGFkZHIpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCSoodTY0ICopIGRhdGEgPSByZWFkcShhZGRyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmV0eGVuX25pY19od19ibG9ja19yZWFkNjQoKHU2NCBfX2lvbWVtICopIGRhdGEsIGFkZHIsCi0JCQkJCSAgIChzaXplID4+IDMpKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKG1lbV9wdHIpCi0JCWlvdW5tYXAobWVtX3B0cik7Ci0JRFBSSU5USyhJTkZPLCAicmVhZCAlbGx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEpOwotCi0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCmluZGV4IDA2ODU2MzMuLmFiMTExMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaApAQCAtMTI0LDI4ICsxMjQsMjggQEAKICAqLwogCiAjZGVmaW5lIG5ldHhlbl9nYl9lbmFibGVfdHgoY29uZmlnX3dvcmQpCVwKLQlzZXRfYml0KDAsICh1bnNpZ25lZCBsb25nKikoJmNvbmZpZ193b3JkKSkKKwkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDApCiAjZGVmaW5lIG5ldHhlbl9nYl9lbmFibGVfcngoY29uZmlnX3dvcmQpCVwKLQlzZXRfYml0KDIsICh1bnNpZ25lZCBsb25nKikoJmNvbmZpZ193b3JkKSkKKwkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDIpCiAjZGVmaW5lIG5ldHhlbl9nYl90eF9mbG93Y3RsKGNvbmZpZ193b3JkKQlcCi0Jc2V0X2JpdCg0LCAodW5zaWduZWQgbG9uZyopKCZjb25maWdfd29yZCkpCisJKChjb25maWdfd29yZCkgfD0gMSA8PCA0KQogI2RlZmluZSBuZXR4ZW5fZ2JfcnhfZmxvd2N0bChjb25maWdfd29yZCkJXAotCXNldF9iaXQoNSwgKHVuc2lnbmVkIGxvbmcqKSgmY29uZmlnX3dvcmQpKQorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNSkKICNkZWZpbmUgbmV0eGVuX2diX3R4X3Jlc2V0X3BiKGNvbmZpZ193b3JkKQlcCi0JCXNldF9iaXQoMTYsICh1bnNpZ25lZCBsb25nKikoJmNvbmZpZ193b3JkKSkKKwkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDE2KQogI2RlZmluZSBuZXR4ZW5fZ2JfcnhfcmVzZXRfcGIoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgxNywgKHVuc2lnbmVkIGxvbmcqKSgmY29uZmlnX3dvcmQpKQorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMTcpCiAjZGVmaW5lIG5ldHhlbl9nYl90eF9yZXNldF9tYWMoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgxOCwgKHVuc2lnbmVkIGxvbmcqKSgmY29uZmlnX3dvcmQpKQorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMTgpCiAjZGVmaW5lIG5ldHhlbl9nYl9yeF9yZXNldF9tYWMoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgxOSwgKHVuc2lnbmVkIGxvbmcqKSgmY29uZmlnX3dvcmQpKQorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMTkpCiAjZGVmaW5lIG5ldHhlbl9nYl9zb2Z0X3Jlc2V0KGNvbmZpZ193b3JkKQlcCi0JCXNldF9iaXQoMzEsICh1bnNpZ25lZCBsb25nKikoJmNvbmZpZ193b3JkKSkKKwkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDMxKQogCiAjZGVmaW5lIG5ldHhlbl9nYl91bnNldF90eF9mbG93Y3RsKGNvbmZpZ193b3JkKQlcCi0JCWNsZWFyX2JpdCg0LCAodW5zaWduZWQgbG9uZyAqKSgmY29uZmlnX3dvcmQpKQorCSgoY29uZmlnX3dvcmQpICY9IH4oMSA8PCA0KSkKICNkZWZpbmUgbmV0eGVuX2diX3Vuc2V0X3J4X2Zsb3djdGwoY29uZmlnX3dvcmQpCVwKLQkJY2xlYXJfYml0KDUsICh1bnNpZ25lZCBsb25nKikoJmNvbmZpZ193b3JkKSkKKwkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgNSkpCiAKICNkZWZpbmUgbmV0eGVuX2diX2dldF90eF9zeW5jZWQoY29uZmlnX3dvcmQpCVwKIAkJX25ldHhlbl9jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCAxKQpAQCAtMTcxLDE1ICsxNzEsMTUgQEAKICAqLwogCiAjZGVmaW5lIG5ldHhlbl9nYl9zZXRfZHVwbGV4KGNvbmZpZ193b3JkKQlcCi0JCXNldF9iaXQoMCwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKwkJKChjb25maWdfd29yZCkgfD0gMSA8PCAwKQogI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X2NyY19lbmFibGUoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgxLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDEpCiAjZGVmaW5lIG5ldHhlbl9nYl9zZXRfcGFkc2hvcnQoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgyLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDIpCiAjZGVmaW5lIG5ldHhlbl9nYl9zZXRfY2hlY2tsZW5ndGgoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCg0LCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDQpCiAjZGVmaW5lIG5ldHhlbl9nYl9zZXRfaHVnZWZyYW1lcyhjb25maWdfd29yZCkJXAotCQlzZXRfYml0KDUsICh1bnNpZ25lZCBsb25nKikmY29uZmlnX3dvcmQpCisJCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNSkKICNkZWZpbmUgbmV0eGVuX2diX3NldF9wcmVhbWJsZWxlbihjb25maWdfd29yZCwgdmFsKQlcCiAJCSgoY29uZmlnX3dvcmQpIHw9ICgodmFsKSA8PCAxMikgJiAweEYwMDApCiAjZGVmaW5lIG5ldHhlbl9nYl9zZXRfaW50Zm1vZGUoY29uZmlnX3dvcmQsIHZhbCkJCVwKQEAgLTE5MCw5ICsxOTAsOSBAQAogI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X21paV9tZ210X2Nsb2Nrc2VsZWN0KGNvbmZpZ193b3JkLCB2YWwpCVwKIAkJKChjb25maWdfd29yZCkgfD0gKCh2YWwpICYgMHgwNykpCiAjZGVmaW5lIG5ldHhlbl9nYl9taWlfbWdtdF9yZXNldChjb25maWdfd29yZCkJXAotCQlzZXRfYml0KDMxLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDMxKQogI2RlZmluZSBuZXR4ZW5fZ2JfbWlpX21nbXRfdW5zZXQoY29uZmlnX3dvcmQpCVwKLQkJY2xlYXJfYml0KDMxLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMzEpKQogCiAvKgogICogTklVIEdCIE1JSSBNZ210IENvbW1hbmQgUmVnaXN0ZXIgKGFwcGxpZXMgdG8gR0IwLCBHQjEsIEdCMiwgR0IzKQpAQCAtMjAxLDcgKzIwMSw3IEBACiAgKi8KIAogI2RlZmluZSBuZXR4ZW5fZ2JfbWlpX21nbXRfc2V0X3JlYWRfY3ljbGUoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgwLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDApCiAjZGVmaW5lIG5ldHhlbl9nYl9taWlfbWdtdF9yZWdfYWRkcihjb25maWdfd29yZCwgdmFsKQlcCiAJCSgoY29uZmlnX3dvcmQpIHw9ICgodmFsKSAmIDB4MUYpKQogI2RlZmluZSBuZXR4ZW5fZ2JfbWlpX21nbXRfcGh5X2FkZHIoY29uZmlnX3dvcmQsIHZhbCkJXApAQCAtMjc0LDkgKzI3NCw5IEBACiAjZGVmaW5lIG5ldHhlbl9zZXRfcGh5X3NwZWVkKGNvbmZpZ193b3JkLCB2YWwpCVwKIAkJKChjb25maWdfd29yZCkgfD0gKCh2YWwgJiAweDAzKSA8PCAxNCkpCiAjZGVmaW5lIG5ldHhlbl9zZXRfcGh5X2R1cGxleChjb25maWdfd29yZCkJXAotCQlzZXRfYml0KDEzLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDEzKQogI2RlZmluZSBuZXR4ZW5fY2xlYXJfcGh5X2R1cGxleChjb25maWdfd29yZCkJXAotCQljbGVhcl9iaXQoMTMsICh1bnNpZ25lZCBsb25nKikmY29uZmlnX3dvcmQpCisJCSgoY29uZmlnX3dvcmQpICY9IH4oMSA8PCAxMykpCiAKICNkZWZpbmUgbmV0eGVuX2dldF9waHlfamFiYmVyKGNvbmZpZ193b3JkKQlcCiAJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDApCkBAIC0zNTAsMTEgKzM1MCwxMSBAQAogCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxNSkKIAogI2RlZmluZSBuZXR4ZW5fc2V0X3BoeV9pbnRfbGlua19zdGF0dXNfY2hhbmdlZChjb25maWdfd29yZCkJXAotCQlzZXRfYml0KDEwLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDEwKQogI2RlZmluZSBuZXR4ZW5fc2V0X3BoeV9pbnRfYXV0b25lZ19jb21wbGV0ZWQoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgxMSwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKwkJKChjb25maWdfd29yZCkgfD0gMSA8PCAxMSkKICNkZWZpbmUgbmV0eGVuX3NldF9waHlfaW50X3NwZWVkX2NoYW5nZWQoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgxNCwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKwkJKChjb25maWdfd29yZCkgfD0gMSA8PCAxNCkKIAogLyoKICAqIE5JVSBNb2RlIFJlZ2lzdGVyLgpAQCAtMzgyLDIyICszODIsMjIgQEAKICAqLwogCiAjZGVmaW5lIG5ldHhlbl9zZXRfZ2JfZHJvcF9nYjAoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgwLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDApCiAjZGVmaW5lIG5ldHhlbl9zZXRfZ2JfZHJvcF9nYjEoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgxLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDEpCiAjZGVmaW5lIG5ldHhlbl9zZXRfZ2JfZHJvcF9nYjIoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgyLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDIpCiAjZGVmaW5lIG5ldHhlbl9zZXRfZ2JfZHJvcF9nYjMoY29uZmlnX3dvcmQpCVwKLQkJc2V0X2JpdCgzLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDMpCiAKICNkZWZpbmUgbmV0eGVuX2NsZWFyX2diX2Ryb3BfZ2IwKGNvbmZpZ193b3JkKQlcCi0JCWNsZWFyX2JpdCgwLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMCkpCiAjZGVmaW5lIG5ldHhlbl9jbGVhcl9nYl9kcm9wX2diMShjb25maWdfd29yZCkJXAotCQljbGVhcl9iaXQoMSwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKwkJKChjb25maWdfd29yZCkgJj0gfigxIDw8IDEpKQogI2RlZmluZSBuZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjIoY29uZmlnX3dvcmQpCVwKLQkJY2xlYXJfYml0KDIsICh1bnNpZ25lZCBsb25nKikmY29uZmlnX3dvcmQpCisJCSgoY29uZmlnX3dvcmQpICY9IH4oMSA8PCAyKSkKICNkZWZpbmUgbmV0eGVuX2NsZWFyX2diX2Ryb3BfZ2IzKGNvbmZpZ193b3JkKQlcCi0JCWNsZWFyX2JpdCgzLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCQkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMykpCiAKIC8qCiAgKiBOSVUgWEcgTUFDIENvbmZpZyBSZWdpc3RlcgpAQCAtNDEzLDcgKzQxMyw3IEBACiAgKi8KIAogI2RlZmluZSBuZXR4ZW5feGdfc29mdF9yZXNldChjb25maWdfd29yZCkJXAotCQlzZXRfYml0KDQsICh1bnNpZ25lZCBsb25nKikmY29uZmlnX3dvcmQpCisJCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNCkKIAogLyoKICAqIE1BQyBDb250cm9sIFJlZ2lzdGVyCkBAIC00MzMsMTkgKzQzMywxOSBAQAogI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfaWRfcG9vbDAoY29uZmlnLCB2YWwpCVwKIAkJKChjb25maWcpIHw9ICgodmFsKSAmMHgwMykpCiAjZGVmaW5lIG5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfeHRuZDAoY29uZmlnKQlcCi0JCShzZXRfYml0KDMsICh1bnNpZ25lZCBsb25nICopJihjb25maWcpKSkKKwkJKChjb25maWcpIHw9IDEgPDwgMykKICNkZWZpbmUgbmV0eGVuX25pY19tY3Jfc2V0X2lkX3Bvb2wxKGNvbmZpZywgdmFsKQlcCiAJCSgoY29uZmlnKSB8PSAoKCh2YWwpICYgMHgwMykgPDwgNCkpCiAjZGVmaW5lIG5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfeHRuZDEoY29uZmlnKQlcCi0JCShzZXRfYml0KDYsICh1bnNpZ25lZCBsb25nICopJihjb25maWcpKSkKKwkJKChjb25maWcpIHw9IDEgPDwgNikKICNkZWZpbmUgbmV0eGVuX25pY19tY3Jfc2V0X2lkX3Bvb2wyKGNvbmZpZywgdmFsKQlcCiAJCSgoY29uZmlnKSB8PSAoKCh2YWwpICYgMHgwMykgPDwgOCkpCiAjZGVmaW5lIG5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfeHRuZDIoY29uZmlnKQlcCi0JCShzZXRfYml0KDEwLCAodW5zaWduZWQgbG9uZyAqKSYoY29uZmlnKSkpCisJCSgoY29uZmlnKSB8PSAxIDw8IDEwKQogI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfaWRfcG9vbDMoY29uZmlnLCB2YWwpCVwKIAkJKChjb25maWcpIHw9ICgoKHZhbCkgJiAweDAzKSA8PCAxMikpCiAjZGVmaW5lIG5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfeHRuZDMoY29uZmlnKQlcCi0JCShzZXRfYml0KDE0LCAodW5zaWduZWQgbG9uZyAqKSYoY29uZmlnKSkpCisJCSgoY29uZmlnKSB8PSAxIDw8IDE0KQogI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfbW9kZV9zZWxlY3QoY29uZmlnLCB2YWwpCVwKIAkJKChjb25maWcpIHw9ICgoKHZhbCkgJiAweDAzKSA8PCAyNCkpCiAjZGVmaW5lIG5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfcG9vbChjb25maWcsIHZhbCkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IDg2OTcyNWYuLjk3M2FmOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgIm5ldHhlbl9uaWMuaCIKICNpbmNsdWRlICJuZXR4ZW5fbmljX2h3LmgiCi0jaW5jbHVkZSAibmV0eGVuX25pY19pb2N0bC5oIgogI2luY2x1ZGUgIm5ldHhlbl9uaWNfcGhhbl9yZWcuaCIKIAogc3RydWN0IGNyYl9hZGRyX3BhaXIgewpAQCAtNjkxLDggKzY5MCw3IEBACiAJCWRlc2NfaGVhZCA9IHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZDsKIAkJZGVzYyA9ICZkZXNjX2hlYWRbY29uc3VtZXJdOwogCi0JCWlmICgoKGxlMTZfdG9fY3B1KG5ldHhlbl9nZXRfc3RzX293bmVyKGRlc2MpKSkKLQkJICAgICAmIFNUQVRVU19PV05FUl9IT1NUKSkKKwkJaWYgKG5ldHhlbl9nZXRfc3RzX293bmVyKGRlc2MpICYgU1RBVFVTX09XTkVSX0hPU1QpCiAJCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTc4OCwxMSArNzg2LDExIEBACiAJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0gYWRhcHRlci0+cG9ydFtuZXR4ZW5fZ2V0X3N0c19wb3J0KGRlc2MpXTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBvcnQtPnBkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBvcnQtPm5ldGRldjsKLQlpbnQgaW5kZXggPSBsZTE2X3RvX2NwdShuZXR4ZW5fZ2V0X3N0c19yZWZoYW5kbGUoZGVzYykpOworCWludCBpbmRleCA9IG5ldHhlbl9nZXRfc3RzX3JlZmhhbmRsZShkZXNjKTsKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmKGFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXSk7CiAJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKmJ1ZmZlcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXUzMiBsZW5ndGggPSBsZTE2X3RvX2NwdShuZXR4ZW5fZ2V0X3N0c190b3RhbGxlbmd0aChkZXNjKSk7CisJdTMyIGxlbmd0aCA9IG5ldHhlbl9nZXRfc3RzX3RvdGFsbGVuZ3RoKGRlc2MpOwogCXUzMiBkZXNjX2N0eDsKIAlzdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2N0eCAqcmN2X2Rlc2M7CiAJaW50IHJldDsKQEAgLTkxOSw5ICs5MTcsNyBAQAogCSAqLwogCXdoaWxlIChjb3VudCA8IG1heCkgewogCQlkZXNjID0gJmRlc2NfaGVhZFtjb25zdW1lcl07Ci0JCWlmICghCi0JCSAgICAobGUxNl90b19jcHUobmV0eGVuX2dldF9zdHNfb3duZXIoZGVzYykpICYKLQkJICAgICBTVEFUVVNfT1dORVJfSE9TVCkpIHsKKwkJaWYgKCEobmV0eGVuX2dldF9zdHNfb3duZXIoZGVzYykgJiBTVEFUVVNfT1dORVJfSE9TVCkpIHsKIAkJCURQUklOVEsoRVJSLCAiZGVzYyAlcCBvd25lZGJ5ICV4XG4iLCBkZXNjLAogCQkJCW5ldHhlbl9nZXRfc3RzX293bmVyKGRlc2MpKTsKIAkJCWJyZWFrOwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAKIAkJCSAgICAgJiYgbmV0aWZfY2Fycmllcl9vayhwb3J0LT5uZXRkZXYpKQogCQkgICAgJiYgKChqaWZmaWVzIC0gcG9ydC0+bmV0ZGV2LT50cmFuc19zdGFydCkgPgogCQkJcG9ydC0+bmV0ZGV2LT53YXRjaGRvZ190aW1lbykpIHsKLQkJCVNDSEVEVUxFX1dPUksoJnBvcnQtPmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzayk7CisJCQlTQ0hFRFVMRV9XT1JLKCZwb3J0LT50eF90aW1lb3V0X3Rhc2spOwogCQl9CiAKIAkJbGFzdF9jb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGxhc3RfY29uc3VtZXIsCkBAIC0xMTM4LDEzICsxMTM0LDEzIEBACiAJCSAqLwogCQlkbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIHJjdl9kZXNjLT5kbWFfc2l6ZSwKIAkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGRtYTsKKwkJcGRlc2MtPmFkZHJfYnVmZmVyID0gY3B1X3RvX2xlNjQoZG1hKTsKIAkJYnVmZmVyLT5za2IgPSBza2I7CiAJCWJ1ZmZlci0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0JVU1k7CiAJCWJ1ZmZlci0+ZG1hID0gZG1hOwogCQkvKiBtYWtlIGEgcmN2IGRlc2NyaXB0b3IgICovCi0JCXBkZXNjLT5yZWZlcmVuY2VfaGFuZGxlID0gYnVmZmVyLT5yZWZfaGFuZGxlOwotCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IHJjdl9kZXNjLT5kbWFfc2l6ZTsKKwkJcGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUgPSBjcHVfdG9fbGUxNihidWZmZXItPnJlZl9oYW5kbGUpOworCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJjdl9kZXNjLT5kbWFfc2l6ZSk7CiAJCURQUklOVEsoSU5GTywgImRvbmUgd3JpdGluZyBkZXNjcmlwdGVyXG4iKTsKIAkJcHJvZHVjZXIgPQogCQkgICAgZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHJjdl9kZXNjLT5tYXhfcnhfZGVzY19jb3VudCk7CkBAIC0xMjMyLDggKzEyMjgsOCBAQAogCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJLyogbWFrZSBhIHJjdiBkZXNjcmlwdG9yICAqLwotCQlwZGVzYy0+cmVmZXJlbmNlX2hhbmRsZSA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+cmVmX2hhbmRsZSk7Ci0JCXBkZXNjLT5idWZmZXJfbGVuZ3RoID0gbGUxNl90b19jcHUocmN2X2Rlc2MtPmRtYV9zaXplKTsKKwkJcGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUgPSBjcHVfdG9fbGUxNihidWZmZXItPnJlZl9oYW5kbGUpOworCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJjdl9kZXNjLT5kbWFfc2l6ZSk7CiAJCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGJ1ZmZlci0+ZG1hKTsKIAkJRFBSSU5USyhJTkZPLCAiZG9uZSB3cml0aW5nIGRlc2NyaXB0ZXJcbiIpOwogCQlwcm9kdWNlciA9CkBAIC0xMjczLDUyICsxMjY5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50Ci1uZXR4ZW5fbmljX2ZpbGxfc3RhdGlzdGljcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICBzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQsCi0JCQkgICBzdHJ1Y3QgbmV0eGVuX3N0YXRpc3RpY3MgKm5ldHhlbl9zdGF0cykKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHI7Ci0KLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7Ci0JCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMCk7Ci0JCU5FVFhFTl9OSUNfTE9DS0VEX1JFQURfUkVHKE5FVFhFTl9OSVVfWEdFX1RYX0JZVEVfQ05ULAotCQkJCQkgICAmKG5ldHhlbl9zdGF0cy0+dHhfYnl0ZXMpKTsKLQkJTkVUWEVOX05JQ19MT0NLRURfUkVBRF9SRUcoTkVUWEVOX05JVV9YR0VfVFhfRlJBTUVfQ05ULAotCQkJCQkgICAmKG5ldHhlbl9zdGF0cy0+dHhfcGFja2V0cykpOwotCQlORVRYRU5fTklDX0xPQ0tFRF9SRUFEX1JFRyhORVRYRU5fTklVX1hHRV9SWF9CWVRFX0NOVCwKLQkJCQkJICAgJihuZXR4ZW5fc3RhdHMtPnJ4X2J5dGVzKSk7Ci0JCU5FVFhFTl9OSUNfTE9DS0VEX1JFQURfUkVHKE5FVFhFTl9OSVVfWEdFX1JYX0ZSQU1FX0NOVCwKLQkJCQkJICAgJihuZXR4ZW5fc3RhdHMtPnJ4X3BhY2tldHMpKTsKLQkJTkVUWEVOX05JQ19MT0NLRURfUkVBRF9SRUcoTkVUWEVOX05JVV9YR0VfQUdHUl9FUlJPUl9DTlQsCi0JCQkJCSAgICYobmV0eGVuX3N0YXRzLT5yeF9lcnJvcnMpKTsKLQkJTkVUWEVOX05JQ19MT0NLRURfUkVBRF9SRUcoTkVUWEVOX05JVV9YR0VfQ1JDX0VSUk9SX0NOVCwKLQkJCQkJICAgJihuZXR4ZW5fc3RhdHMtPnJ4X2NyY19lcnJvcnMpKTsKLQkJTkVUWEVOX05JQ19MT0NLRURfUkVBRF9SRUcoTkVUWEVOX05JVV9YR0VfT1ZFUlNJWkVfRlJBTUVfRVJSLAotCQkJCQkgICAmKG5ldHhlbl9zdGF0cy0+Ci0JCQkJCSAgICAgcnhfbG9uZ19sZW5ndGhfZXJyb3IpKTsKLQkJTkVUWEVOX05JQ19MT0NLRURfUkVBRF9SRUcoTkVUWEVOX05JVV9YR0VfVU5ERVJTSVpFX0ZSQU1FX0VSUiwKLQkJCQkJICAgJihuZXR4ZW5fc3RhdHMtPgotCQkJCQkgICAgIHJ4X3Nob3J0X2xlbmd0aF9lcnJvcikpOwotCi0JCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMSk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT50eF9sb2NrKTsKLQkJbmV0eGVuX3N0YXRzLT50eF9ieXRlcyA9IHBvcnQtPnN0YXRzLnR4Ynl0ZXM7Ci0JCW5ldHhlbl9zdGF0cy0+dHhfcGFja2V0cyA9IHBvcnQtPnN0YXRzLnhtaXRlZGZyYW1lcyArCi0JCSAgICBwb3J0LT5zdGF0cy54bWl0ZmluaXNoZWQ7Ci0JCW5ldHhlbl9zdGF0cy0+cnhfYnl0ZXMgPSBwb3J0LT5zdGF0cy5yeGJ5dGVzOwotCQluZXR4ZW5fc3RhdHMtPnJ4X3BhY2tldHMgPSBwb3J0LT5zdGF0cy5ub19yY3Y7Ci0JCW5ldHhlbl9zdGF0cy0+cnhfZXJyb3JzID0gcG9ydC0+c3RhdHMucmN2ZGJhZHNrYjsKLQkJbmV0eGVuX3N0YXRzLT50eF9lcnJvcnMgPSBwb3J0LT5zdGF0cy5ub2NtZGRlc2NyaXB0b3I7Ci0JCW5ldHhlbl9zdGF0cy0+cnhfc2hvcnRfbGVuZ3RoX2Vycm9yID0gcG9ydC0+c3RhdHMudXBsY29uZzsKLQkJbmV0eGVuX3N0YXRzLT5yeF9sb25nX2xlbmd0aF9lcnJvciA9IHBvcnQtPnN0YXRzLnVwaGNvbmc7Ci0JCW5ldHhlbl9zdGF0cy0+cnhfY3JjX2Vycm9ycyA9IDA7Ci0JCW5ldHhlbl9zdGF0cy0+cnhfbWFjX2Vycm9ycyA9IDA7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT50eF9sb2NrKTsKLQl9Ci0JcmV0dXJuIDA7Ci19CiAKIHZvaWQgbmV0eGVuX25pY19jbGVhcl9zdGF0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC0xMzMyLDE5MyArMTI4MiwzIEBACiAJfQogfQogCi1pbnQKLW5ldHhlbl9uaWNfY2xlYXJfc3RhdGlzdGljcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0KQotewotCWludCBkYXRhID0gMDsKLQotCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMCk7Ci0KLQluZXR4ZW5fbmljX2xvY2tlZF93cml0ZV9yZWcoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfVFhfQllURV9DTlQsICZkYXRhKTsKLQluZXR4ZW5fbmljX2xvY2tlZF93cml0ZV9yZWcoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfVFhfRlJBTUVfQ05ULAotCQkJCSAgICAmZGF0YSk7Ci0JbmV0eGVuX25pY19sb2NrZWRfd3JpdGVfcmVnKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX1JYX0JZVEVfQ05ULCAmZGF0YSk7Ci0JbmV0eGVuX25pY19sb2NrZWRfd3JpdGVfcmVnKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX1JYX0ZSQU1FX0NOVCwKLQkJCQkgICAgJmRhdGEpOwotCW5ldHhlbl9uaWNfbG9ja2VkX3dyaXRlX3JlZyhhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9BR0dSX0VSUk9SX0NOVCwKLQkJCQkgICAgJmRhdGEpOwotCW5ldHhlbl9uaWNfbG9ja2VkX3dyaXRlX3JlZyhhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DUkNfRVJST1JfQ05ULAotCQkJCSAgICAmZGF0YSk7Ci0JbmV0eGVuX25pY19sb2NrZWRfd3JpdGVfcmVnKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX09WRVJTSVpFX0ZSQU1FX0VSUiwKLQkJCQkgICAgJmRhdGEpOwotCW5ldHhlbl9uaWNfbG9ja2VkX3dyaXRlX3JlZyhhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9VTkRFUlNJWkVfRlJBTUVfRVJSLAotCQkJCSAgICAmZGF0YSk7Ci0KLQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOwotCW5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoYWRhcHRlcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludAotbmV0eGVuX25pY19kb19pb2N0bChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgKnVfZGF0YSwKLQkJICAgIHN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCkKLXsKLQlzdHJ1Y3QgbmV0eGVuX25pY19pb2N0bF9kYXRhIGRhdGE7Ci0Jc3RydWN0IG5ldHhlbl9uaWNfaW9jdGxfZGF0YSAqdXBfZGF0YTsKLQlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgbmV0eGVuX3N0YXRpc3RpY3MgbmV0eGVuX3N0YXRzOwotCi0JdXBfZGF0YSA9ICh2b2lkICopdV9kYXRhOwotCi0JRFBSSU5USyhJTkZPLCAiZG9pbmcgaW9jdGwgZm9yICVwXG4iLCBhZGFwdGVyKTsKLQlpZiAoY29weV9mcm9tX3VzZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKXVwX2RhdGEsIHNpemVvZihkYXRhKSkpIHsKLQkJLyogZXZpbCB1c2VyIHRyaWVkIHRvIGNyYXNoIHRoZSBrZXJuZWwgKi8KLQkJRFBSSU5USyhFUlIsICJiYWQgY29weSBmcm9tIHVzZXJsYW5kOiAlZFxuIiwgKGludClzaXplb2YoZGF0YSkpOwotCQlyZXR2YWwgPSAtRUZBVUxUOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0KLQkvKiBTaG91bGRuJ3QgYWNjZXNzIGJleW9uZCBsZWdhbCBsaW1pdHMgb2YgICJjaGFyIHVbNjRdOyIgbWVtYmVyICovCi0JaWYgKCFkYXRhLnB0ciAmJiAoZGF0YS5zaXplID4gc2l6ZW9mKGRhdGEudSkpKSB7Ci0JCS8qIGV2aWwgdXNlciB0cmllZCB0byBjcmFzaCB0aGUga2VybmVsICovCi0JCURQUklOVEsoRVJSLCAiYmFkIHNpemU6ICVkXG4iLCBkYXRhLnNpemUpOwotCQlyZXR2YWwgPSAtRUZBVUxUOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0KLQlzd2l0Y2ggKGRhdGEuY21kKSB7Ci0JY2FzZSBuZXR4ZW5fbmljX2NtZF9wY2lfcmVhZDoKLQkJaWYgKChyZXR2YWwgPSBuZXR4ZW5fbmljX2h3X3JlYWRfaW9jdGwoYWRhcHRlciwgZGF0YS5vZmYsCi0JCQkJCQkgICAgICAgJihkYXRhLnUpLCBkYXRhLnNpemUpKSkKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCQlpZiAoY29weV90b191c2VyCi0JCSAgICAoKHZvaWQgX191c2VyICopJih1cF9kYXRhLT51KSwgJihkYXRhLnUpLCBkYXRhLnNpemUpKSB7Ci0JCQlEUFJJTlRLKEVSUiwgImJhZCBjb3B5IHRvIHVzZXJsYW5kOiAlZFxuIiwKLQkJCQkoaW50KXNpemVvZihkYXRhKSk7Ci0JCQlyZXR2YWwgPSAtRUZBVUxUOwotCQkJZ290byBlcnJvcl9vdXQ7Ci0JCX0KLQkJZGF0YS5ydiA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBuZXR4ZW5fbmljX2NtZF9wY2lfd3JpdGU6Ci0JCWlmICgocmV0dmFsID0gbmV0eGVuX25pY19od193cml0ZV9pb2N0bChhZGFwdGVyLCBkYXRhLm9mZiwKLQkJCQkJCQkmKGRhdGEudSksIGRhdGEuc2l6ZSkpKQotCQkJZ290byBlcnJvcl9vdXQ7Ci0JCWRhdGEucnYgPSAwOwotCQlicmVhazsKLQotCWNhc2UgbmV0eGVuX25pY19jbWRfcGNpX21lbV9yZWFkOgotCQlpZiAobmV0eGVuX25pY19wY2lfbWVtX3JlYWRfaW9jdGwoYWRhcHRlciwgZGF0YS5vZmYsICYoZGF0YS51KSwKLQkJCQkJCSAgZGF0YS5zaXplKSkgewotCQkJRFBSSU5USyhFUlIsICJGYWlsZWQgdG8gcmVhZCB0aGUgZGF0YS5cbiIpOwotCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIKLQkJICAgICgodm9pZCBfX3VzZXIgKikmKHVwX2RhdGEtPnUpLCAmKGRhdGEudSksIGRhdGEuc2l6ZSkpIHsKLQkJCURQUklOVEsoRVJSLCAiYmFkIGNvcHkgdG8gdXNlcmxhbmQ6ICVkXG4iLAotCQkJCShpbnQpc2l6ZW9mKGRhdGEpKTsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGVycm9yX291dDsKLQkJfQotCQlkYXRhLnJ2ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIG5ldHhlbl9uaWNfY21kX3BjaV9tZW1fd3JpdGU6Ci0JCWlmICgocmV0dmFsID0gbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlX2lvY3RsKGFkYXB0ZXIsIGRhdGEub2ZmLAotCQkJCQkJCSAgICAgJihkYXRhLnUpLAotCQkJCQkJCSAgICAgZGF0YS5zaXplKSkpCi0JCQlnb3RvIGVycm9yX291dDsKLQkJZGF0YS5ydiA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBuZXR4ZW5fbmljX2NtZF9wY2lfY29uZmlnX3JlYWQ6Ci0JCXN3aXRjaCAoZGF0YS5zaXplKSB7Ci0JCWNhc2UgMToKLQkJCWRhdGEucnYgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShhZGFwdGVyLT5haHcucGRldiwKLQkJCQkJCSAgICAgICBkYXRhLm9mZiwKLQkJCQkJCSAgICAgICAoY2hhciAqKSYoZGF0YS51KSk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJZGF0YS5ydiA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPmFody5wZGV2LAotCQkJCQkJICAgICAgIGRhdGEub2ZmLAotCQkJCQkJICAgICAgIChzaG9ydCAqKSYoZGF0YS51KSk7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJZGF0YS5ydiA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChhZGFwdGVyLT5haHcucGRldiwKLQkJCQkJCQlkYXRhLm9mZiwKLQkJCQkJCQkodTMyICopICYgKGRhdGEudSkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGNvcHlfdG9fdXNlcgotCQkgICAgKCh2b2lkIF9fdXNlciAqKSYodXBfZGF0YS0+dSksICYoZGF0YS51KSwgZGF0YS5zaXplKSkgewotCQkJRFBSSU5USyhFUlIsICJiYWQgY29weSB0byB1c2VybGFuZDogJWRcbiIsCi0JCQkJKGludClzaXplb2YoZGF0YSkpOwotCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBuZXR4ZW5fbmljX2NtZF9wY2lfY29uZmlnX3dyaXRlOgotCQlzd2l0Y2ggKGRhdGEuc2l6ZSkgewotCQljYXNlIDE6Ci0JCQlkYXRhLnJ2ID0gcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGFkYXB0ZXItPmFody5wZGV2LAotCQkJCQkJCWRhdGEub2ZmLAotCQkJCQkJCSooY2hhciAqKSYoZGF0YS51KSk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJZGF0YS5ydiA9IHBjaV93cml0ZV9jb25maWdfd29yZChhZGFwdGVyLT5haHcucGRldiwKLQkJCQkJCQlkYXRhLm9mZiwKLQkJCQkJCQkqKHNob3J0ICopJihkYXRhLnUpKTsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlkYXRhLnJ2ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhZGFwdGVyLT5haHcucGRldiwKLQkJCQkJCQkgZGF0YS5vZmYsCi0JCQkJCQkJICoodTMyICopICYgKGRhdGEudSkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIG5ldHhlbl9uaWNfY21kX2dldF9zdGF0czoKLQkJZGF0YS5ydiA9Ci0JCSAgICBuZXR4ZW5fbmljX2ZpbGxfc3RhdGlzdGljcyhhZGFwdGVyLCBwb3J0LCAmbmV0eGVuX3N0YXRzKTsKLQkJaWYgKGNvcHlfdG9fdXNlcgotCQkgICAgKCh2b2lkIF9fdXNlciAqKSh1cF9kYXRhLT5wdHIpLCAodm9pZCAqKSZuZXR4ZW5fc3RhdHMsCi0JCSAgICAgc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fc3RhdGlzdGljcykpKSB7Ci0JCQlEUFJJTlRLKEVSUiwgImJhZCBjb3B5IHRvIHVzZXJsYW5kOiAlZFxuIiwKLQkJCQkoaW50KXNpemVvZihuZXR4ZW5fc3RhdHMpKTsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGVycm9yX291dDsKLQkJfQotCQl1cF9kYXRhLT5ydiA9IGRhdGEucnY7Ci0JCWJyZWFrOwotCi0JY2FzZSBuZXR4ZW5fbmljX2NtZF9jbGVhcl9zdGF0czoKLQkJZGF0YS5ydiA9IG5ldHhlbl9uaWNfY2xlYXJfc3RhdGlzdGljcyhhZGFwdGVyLCBwb3J0KTsKLQkJdXBfZGF0YS0+cnYgPSBkYXRhLnJ2OwotCQlicmVhazsKLQotCWNhc2UgbmV0eGVuX25pY19jbWRfZ2V0X3ZlcnNpb246Ci0JCWlmIChjb3B5X3RvX3VzZXIKLQkJICAgICgodm9pZCBfX3VzZXIgKikmKHVwX2RhdGEtPnUpLCBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCwKLQkJICAgICBzaXplb2YoTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQpKSkgewotCQkJRFBSSU5USyhFUlIsICJiYWQgY29weSB0byB1c2VybGFuZDogJWRcbiIsCi0JCQkJKGludClzaXplb2YoZGF0YSkpOwotCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJRFBSSU5USyhJTkZPLCAiYmFkIGNvbW1hbmQgJWQgZm9yICVwXG4iLCBkYXRhLmNtZCwgYWRhcHRlcik7Ci0JCXJldHZhbCA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0JcHV0X3VzZXIoZGF0YS5ydiwgKCYodXBfZGF0YS0+cnYpKSk7Ci0JRFBSSU5USyhJTkZPLCAiZG9uZSBpb2N0bCBmb3IgJXAgd2VsbC5cbiIsIGFkYXB0ZXIpOwotCi0gICAgICBlcnJvcl9vdXQ6Ci0JcmV0dXJuIHJldHZhbDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2lvY3RsLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pb2N0bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjIxZmE1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2lvY3RsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqLwotCi0jaWZuZGVmIF9fTkVUWEVOX05JQ19JT0NUTF9IX18KLSNkZWZpbmUgX19ORVRYRU5fTklDX0lPQ1RMX0hfXwotCi0jaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgotCi0jZGVmaW5lIE5FVFhFTl9DTURfU1RBUlQJU0lPQ0RFVlBSSVZBVEUKLSNkZWZpbmUgTkVUWEVOX05JQ19DTUQJCShORVRYRU5fQ01EX1NUQVJUICsgMSkKLSNkZWZpbmUgTkVUWEVOX05JQ19OQU1FCQkoTkVUWEVOX0NNRF9TVEFSVCArIDIpCi0jZGVmaW5lIE5FVFhFTl9OSUNfTkFNRV9MRU4JMTYKLSNkZWZpbmUgTkVUWEVOX05JQ19OQU1FX1JTUAkiTkVUWEVOLVVOTSIKLQotdHlwZWRlZiBlbnVtIHsKLQluZXR4ZW5fbmljX2NtZF9ub25lID0gMCwKLQluZXR4ZW5fbmljX2NtZF9wY2lfcmVhZCwKLQluZXR4ZW5fbmljX2NtZF9wY2lfd3JpdGUsCi0JbmV0eGVuX25pY19jbWRfcGNpX21lbV9yZWFkLAotCW5ldHhlbl9uaWNfY21kX3BjaV9tZW1fd3JpdGUsCi0JbmV0eGVuX25pY19jbWRfcGNpX2NvbmZpZ19yZWFkLAotCW5ldHhlbl9uaWNfY21kX3BjaV9jb25maWdfd3JpdGUsCi0JbmV0eGVuX25pY19jbWRfZ2V0X3N0YXRzLAotCW5ldHhlbl9uaWNfY21kX2NsZWFyX3N0YXRzLAotCW5ldHhlbl9uaWNfY21kX2dldF92ZXJzaW9uCi19IG5ldHhlbl9uaWNfaW9jdGxfY21kX3Q7Ci0KLXN0cnVjdCBuZXR4ZW5fbmljX2lvY3RsX2RhdGEgewotCXUzMiBjbWQ7Ci0JdTMyIHVudXNlZDE7Ci0JdTY0IG9mZjsKLQl1MzIgc2l6ZTsKLQl1MzIgcnY7Ci0JY2hhciB1WzY0XTsKLQl2b2lkICpwdHI7Ci19OwotCi1zdHJ1Y3QgbmV0eGVuX3N0YXRpc3RpY3MgewotCXU2NCByeF9wYWNrZXRzOwotCXU2NCB0eF9wYWNrZXRzOwotCXU2NCByeF9ieXRlczsKLQl1NjQgcnhfZXJyb3JzOwotCXU2NCB0eF9ieXRlczsKLQl1NjQgdHhfZXJyb3JzOwotCXU2NCByeF9jcmNfZXJyb3JzOwotCXU2NCByeF9zaG9ydF9sZW5ndGhfZXJyb3I7Ci0JdTY0IHJ4X2xvbmdfbGVuZ3RoX2Vycm9yOwotCXU2NCByeF9tYWNfZXJyb3JzOwotfTsKLQotI2VuZGlmCQkJCS8qIF9fTkVUWEVOX05JQ19JT0NUTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaXNyLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pc3IuYwppbmRleCAxYjQ1ZjUwLi5iZTM2NmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pc3IuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pc3IuYwpAQCAtNzksNyArNzksNyBAQAogdm9pZCBuZXR4ZW5faGFuZGxlX3BvcnRfaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIHBvcnRubywKIAkJCSAgICB1MzIgZW5hYmxlKQogewotCV9fbGUzMiBpbnRfc3JjOworCV9fdTMyIGludF9zcmM7CiAJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0OwogCiAJLyogIFRoaXMgc2hvdWxkIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlICovCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkvKiB3cml0ZSBpdCBkb3duIGxhdGVyLi4gKi8KIAlpZiAoKG5ldHhlbl9nZXRfcGh5X2ludF9zcGVlZF9jaGFuZ2VkKGludF9zcmMpKQogCSAgICB8fCAobmV0eGVuX2dldF9waHlfaW50X2xpbmtfc3RhdHVzX2NoYW5nZWQoaW50X3NyYykpKSB7Ci0JCV9fbGUzMiBzdGF0dXM7CisJCV9fdTMyIHN0YXR1czsKIAogCQlEUFJJTlRLKElORk8sICJTUEVFRCBDSEFOR0VEIE9SIExJTksgU1RBVFVTIENIQU5HRUQgXG4iKTsKIApAQCAtMTU3LDcgKzE1Nyw4IEBACiAJZm9yIChwb3J0bm8gPSAwOyBwb3J0bm8gPCBORVRYRU5fTklVX01BWF9HQkVfUE9SVFM7IHBvcnRubysrKSB7CiAJCWxpbmt1cCA9IHZhbCAmIDE7CiAJCWlmIChsaW5rdXAgIT0gKHFnX2xpbmtzdXAgJiAxKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBPUlQgJWQgbGluayAlc1xuIiwKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBQT1JUICVkIGxpbmsgJXNcbiIsCisJCQkgICAgICAgYWRhcHRlci0+cG9ydFtwb3J0bm9dLT5uZXRkZXYtPm5hbWUsCiAJCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgcG9ydG5vLAogCQkJICAgICAgICgobGlua3VwID09IDApID8gImRvd24iIDogInVwIikpOwogCQkJbmV0eGVuX2luZGljYXRlX2xpbmtfc3RhdHVzKGFkYXB0ZXIsIHBvcnRubywgbGlua3VwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwppbmRleCA1NzViNzFiLi42OWMxYjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAibmV0eGVuX25pYy5oIgogI2RlZmluZSBERUZJTkVfR0xPQkFMX1JFQ1ZfQ1JCCiAjaW5jbHVkZSAibmV0eGVuX25pY19waGFuX3JlZy5oIgotI2luY2x1ZGUgIm5ldHhlbl9uaWNfaW9jdGwuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtNTMsOCArNTIsNiBAQAogc3RhdGljIGNoYXIgbmV0eGVuX25pY19kcml2ZXJfc3RyaW5nW10gPSAiTmV0WGVuIE5ldHdvcmsgRHJpdmVyIHZlcnNpb24gIgogICAgIE5FVFhFTl9OSUNfTElOVVhfVkVSU0lPTklEOwogCi1zdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmdfYWRhcHRlciA9IE5VTEw7Ci0KICNkZWZpbmUgTkVUWEVOX05FVERFVl9XRUlHSFQgMTIwCiAjZGVmaW5lIE5FVFhFTl9BREFQVEVSX1VQX01BR0lDIDc3NwogI2RlZmluZSBORVRYRU5fTklDX1BFR19UVU5FIDAKQEAgLTc1LDggKzcyLDYgQEAKIHN0YXRpYyB2b2lkIG5ldHhlbl90eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIG5ldHhlbl93YXRjaGRvZyh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyBpbnQgbmV0eGVuX2hhbmRsZV9pbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBuZXR4ZW5fbmljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkgICAgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwogc3RhdGljIGludCBuZXR4ZW5fbmljX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpOwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKQEAgLTkwLDYgKzg1LDggQEAKIAl7UENJX0RFVklDRSgweDQwNDAsIDB4MDAwMyl9LAogCXtQQ0lfREVWSUNFKDB4NDA0MCwgMHgwMDA0KX0sCiAJe1BDSV9ERVZJQ0UoMHg0MDQwLCAweDAwMDUpfSwKKwl7UENJX0RFVklDRSgweDQwNDAsIDB4MDAyNCl9LAorCXtQQ0lfREVWSUNFKDB4NDA0MCwgMHgwMDI1KX0sCiAJezAsfQogfTsKIApAQCAtMTIwLDcgKzExNyw3IEBACiAJdm9pZCBfX2lvbWVtICptZW1fcHRyMSA9IE5VTEw7CiAJdm9pZCBfX2lvbWVtICptZW1fcHRyMiA9IE5VTEw7CiAKLQl1OCAqZGJfcHRyID0gTlVMTDsKKwl1OCBfX2lvbWVtICpkYl9wdHIgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgbWVtX2Jhc2UsIG1lbV9sZW4sIGRiX2Jhc2UsIGRiX2xlbjsKIAlpbnQgcGNpX3VzaW5nX2RhYywgaSwgZXJyOwogCWludCByaW5nOwpAQCAtMTI5LDcgKzEyNiw2IEBACiAJc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyICpjbWRfYnVmX2FyciA9IE5VTEw7CiAJdTY0IG1hY19hZGRyW0ZMQVNIX05VTV9QT1JUUyArIDFdOwogCWludCB2YWxpZF9tYWMgPSAwOwotCXN0YXRpYyBpbnQgbmV0eGVuX2NhcmRzX2ZvdW5kID0gMDsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzIFxuIiwgbmV0eGVuX25pY19kcml2ZXJfc3RyaW5nKTsKIAkvKiBJbiBjdXJyZW50IHNjaGVtZSwgd2UgdXNlIG9ubHkgUENJIGZ1bmN0aW9uIDAgKi8KQEAgLTE5NSw3ICsxOTEsNyBAQAogCQlkYl9sZW4pOwogCiAJZGJfcHRyID0gaW9yZW1hcChkYl9iYXNlLCBORVRYRU5fREJfTUFQU0laRV9CWVRFUyk7Ci0JaWYgKGRiX3B0ciA9PSAwVUwpIHsKKwlpZiAoIWRiX3B0cikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgZG9vcmJlbGwgbWFwLiIsCiAJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKIAkJZXJyID0gLUVJTzsKQEAgLTIyMCw5ICsyMTYsNiBAQAogCQlnb3RvIGVycl9vdXRfZGJ1bm1hcDsKIAl9CiAKLQlpZiAobmV0eGVuX2NhcmRzX2ZvdW5kID09IDApIHsKLQkJZ19hZGFwdGVyID0gYWRhcHRlcjsKLQl9CiAJYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQgPSBNQVhfQ01EX0RFU0NSSVBUT1JTOwogCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SUzsKIAlhZGFwdGVyLT5tYXhfanVtYm9fcnhfZGVzY19jb3VudCA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlM7CkBAIC0zODMsNyArMzc2LDYgQEAKIAkJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBuZXR4ZW5fbmljX3NldF9tdWx0aTsKIAkJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBuZXR4ZW5fbmljX3NldF9tYWM7CiAJCW5ldGRldi0+Y2hhbmdlX210dSA9IG5ldHhlbl9uaWNfY2hhbmdlX210dTsKLQkJbmV0ZGV2LT5kb19pb2N0bCA9IG5ldHhlbl9uaWNfaW9jdGw7CiAJCW5ldGRldi0+dHhfdGltZW91dCA9IG5ldHhlbl90eF90aW1lb3V0OwogCQluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7CiAKQEAgLTQyOCw4ICs0MjAsNyBAQAogCQkJCQkJCSAgICAgbmV0ZGV2LT5kZXZfYWRkcik7CiAJCQl9CiAJCX0KLQkJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OwotCQlJTklUX1dPUksoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzaywgbmV0eGVuX3R4X3RpbWVvdXRfdGFzayk7CisJCUlOSVRfV09SSygmcG9ydC0+dHhfdGltZW91dF90YXNrLCBuZXR4ZW5fdHhfdGltZW91dF90YXNrKTsKIAkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCkBAIC00NDQsNiArNDM1LDExIEBACiAJCWFkYXB0ZXItPnBvcnRbaV0gPSBwb3J0OwogCX0KIAorCXdyaXRlbCgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFKSk7CisJbmV0eGVuX3Bpbml0X2Zyb21fcm9tKGFkYXB0ZXIsIDApOworCXVkZWxheSg1MDApOworCW5ldHhlbl9sb2FkX2Zpcm13YXJlKGFkYXB0ZXIpOworCW5ldHhlbl9waGFudG9tX2luaXQoYWRhcHRlciwgTkVUWEVOX05JQ19QRUdfVFVORSk7CiAJLyoKIAkgKiBkZWxheSBhIHdoaWxlIHRvIGVuc3VyZSB0aGF0IHRoZSBQZWdzIGFyZSB1cCAmIHJ1bm5pbmcuCiAJICogT3RoZXJ3aXNlLCB3ZSBtaWdodCBzZWUgc29tZSBmbGFreSBiZWhhdmlvdXIuCkBAIC00NjEsNyArNDU3LDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JYWRhcHRlci0+bnVtYmVyID0gbmV0eGVuX2NhcmRzX2ZvdW5kOwogCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDA7CiAKIAlyZXR1cm4gMDsKQEAgLTUzMSw2ICs1MjYsOCBAQAogCiAJbmV0eGVuX25pY19zdG9wX2FsbF9wb3J0cyhhZGFwdGVyKTsKIAkvKiBsZWF2ZSB0aGUgaHcgaW4gdGhlIHNhbWUgc3RhdGUgYXMgcmVib290ICovCisJbmV0eGVuX3Bpbml0X2Zyb21fcm9tKGFkYXB0ZXIsIDApOworCXdyaXRlbCgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFKSk7CiAJbmV0eGVuX2xvYWRfZmlybXdhcmUoYWRhcHRlcik7CiAJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOwogCkBAIC04MjIsNyArODE5LDcgQEAKIAlwYnVmID0gJmFkYXB0ZXItPmNtZF9idWZfYXJyW3Byb2R1Y2VyXTsKIAlpZiAoKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1RTTykgJiYgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA+IDApIHsKIAkJcGJ1Zi0+bXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKLQkJaHdkZXNjLT5tc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOworCQlod2Rlc2MtPm1zcyA9IGNwdV90b19sZTE2KHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpOwogCX0gZWxzZSB7CiAJCXBidWYtPm1zcyA9IDA7CiAJCWh3ZGVzYy0+bXNzID0gMDsKQEAgLTg4NSw3ICs4ODIsNyBAQAogCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjMgPSBjcHVfdG9fbGU2NCh0ZW1wX2RtYSk7CiAJCQlicmVhazsKIAkJY2FzZSAzOgotCQkJaHdkZXNjLT5idWZmZXI0X2xlbmd0aCA9IHRlbXBfbGVuOworCQkJaHdkZXNjLT5idWZmZXI0X2xlbmd0aCA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKIAkJCWh3ZGVzYy0+YWRkcl9idWZmZXI0ID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTk1NiwxMSArOTUzLDYgQEAKIHN0YXRpYyB2b2lkIG5ldHhlbl93YXRjaGRvZyh1bnNpZ25lZCBsb25nIHYpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqKXY7Ci0JaWYgKGFkYXB0ZXIgIT0gZ19hZGFwdGVyKSB7Ci0JCXByaW50aygiJXM6ICoqKkJVRyoqKiBhZGFwdGVyWyVwXSAhPSBnX2FkYXB0ZXJbJXBdXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBhZGFwdGVyLCBnX2FkYXB0ZXIpOwotCQlyZXR1cm47Ci0JfQogCiAJU0NIRURVTEVfV09SSygmYWRhcHRlci0+d2F0Y2hkb2dfdGFzayk7CiB9CkBAIC05NjksMjMgKzk2MSwyMyBAQAogewogCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IChzdHJ1Y3QgbmV0eGVuX3BvcnQgKiluZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JU0NIRURVTEVfV09SSygmcG9ydC0+YWRhcHRlci0+dHhfdGltZW91dF90YXNrKTsKKwlTQ0hFRFVMRV9XT1JLKCZwb3J0LT50eF90aW1lb3V0X3Rhc2spOwogfQogCiBzdGF0aWMgdm9pZCBuZXR4ZW5fdHhfdGltZW91dF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldHhlbl9hZGFwdGVyLCB0eF90aW1lb3V0X3Rhc2spOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXR4ZW5fcG9ydCwgdHhfdGltZW91dF90YXNrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcG9ydC0+bmV0ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwcmludGsoS0VSTl9FUlIgIiVzICVzOiB0cmFuc21pdCB0aW1lb3V0LCByZXNldHRpbmcuXG4iLAogCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+YWRhcHRlci0+bG9jaywgZmxhZ3MpOwogCW5ldHhlbl9uaWNfY2xvc2UobmV0ZGV2KTsKIAluZXR4ZW5fbmljX29wZW4obmV0ZGV2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+YWRhcHRlci0+bG9jaywgZmxhZ3MpOwogCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKIH0KQEAgLTExMzcsNDcgKzExMjksNiBAQAogCWVuYWJsZV9pcnEoYWRhcHRlci0+aXJxKTsKIH0KICNlbmRpZgotLyoKLSAqIG5ldHhlbl9uaWNfaW9jdGwgKCkgICAgV2UgcHJvdmlkZSB0aGUgdGNsL3BoYW5tb24gc3VwcG9ydCB0aHJvdWdoIHRoZXNlCi0gKiBpb2N0bHMuCi0gKi8KLXN0YXRpYyBpbnQKLW5ldHhlbl9uaWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCi17Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBucl9ieXRlcyA9IDA7Ci0Jc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwotCWNoYXIgZGV2X25hbWVbTkVUWEVOX05JQ19OQU1FX0xFTl07Ci0KLQlEUFJJTlRLKElORk8sICJkb2luZyBpb2N0bCBmb3IgJXNcbiIsIG5ldGRldi0+bmFtZSk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIE5FVFhFTl9OSUNfQ01EOgotCQllcnIgPSBuZXR4ZW5fbmljX2RvX2lvY3RsKGFkYXB0ZXIsICh2b2lkICopaWZyLT5pZnJfZGF0YSwgcG9ydCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRYRU5fTklDX05BTUU6Ci0JCURQUklOVEsoSU5GTywgImlvY3RsIGNtZCBmb3IgTmV0WGVuXG4iKTsKLQkJaWYgKGlmci0+aWZyX2RhdGEpIHsKLQkJCXNwcmludGYoZGV2X25hbWUsICIlcy0lZCIsIE5FVFhFTl9OSUNfTkFNRV9SU1AsCi0JCQkJcG9ydC0+cG9ydG51bSk7Ci0JCQlucl9ieXRlcyA9Ci0JCQkgICAgY29weV90b191c2VyKChjaGFyIF9fdXNlciAqKWlmci0+aWZyX2RhdGEsIGRldl9uYW1lLAotCQkJCQkgTkVUWEVOX05JQ19OQU1FX0xFTik7Ci0JCQlpZiAobnJfYnl0ZXMpCi0JCQkJZXJyID0gLUVJTzsKLQotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJRFBSSU5USyhJTkZPLCAiaW9jdGwgY21kICV4IG5vdCBzdXBwb3J0ZWRcbiIsIGNtZCk7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmV0eGVuX2RyaXZlciA9IHsKIAkubmFtZSA9IG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCkBAIC0xMTkzLDcgKzExNDQsNyBAQAogCWlmICgobmV0eGVuX3dvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm5ldHhlbiIpKSA9PSAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJm5ldHhlbl9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZuZXR4ZW5fZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQobmV0eGVuX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKaW5kZXggNDk4N2RjNy4uNDBkNzAwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKQEAgLTg5LDE1ICs4OSwxNSBAQAogICoKICAqLwogaW50IG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgbG9uZyBwaHksCi0JCQkgICAgbG9uZyByZWcsIF9fbGUzMiAqIHJlYWR2YWwpCisJCQkgICAgbG9uZyByZWcsIF9fdTMyICogcmVhZHZhbCkKIHsKIAlsb25nIHRpbWVvdXQgPSAwOwogCWxvbmcgcmVzdWx0ID0gMDsKIAlsb25nIHJlc3RvcmUgPSAwOwotCV9fbGUzMiBhZGRyZXNzOwotCV9fbGUzMiBjb21tYW5kOwotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTMyIG1hY19jZmcwOworCV9fdTMyIGFkZHJlc3M7CisJX191MzIgY29tbWFuZDsKKwlfX3UzMiBzdGF0dXM7CisJX191MzIgbWFjX2NmZzA7CiAKIAlpZiAocGh5X2xvY2soYWRhcHRlcikgIT0gMCkgewogCQlyZXR1cm4gLTE7CkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJCQkgICZtYWNfY2ZnMCwgNCkpCiAJCXJldHVybiAtRUlPOwogCWlmIChuZXR4ZW5fZ2JfZ2V0X3NvZnRfcmVzZXQobWFjX2NmZzApKSB7Ci0JCV9fbGUzMiB0ZW1wOworCQlfX3UzMiB0ZW1wOwogCQl0ZW1wID0gMDsKIAkJbmV0eGVuX2diX3R4X3Jlc2V0X3BiKHRlbXApOwogCQluZXR4ZW5fZ2JfcnhfcmVzZXRfcGIodGVtcCk7CkBAIC0xODQsMTUgKzE4NCwxNSBAQAogICoKICAqLwogaW50IG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgIGxvbmcgcGh5LCBsb25nIHJlZywgX19sZTMyIHZhbCkKKwkJCSAgICAgbG9uZyBwaHksIGxvbmcgcmVnLCBfX3UzMiB2YWwpCiB7CiAJbG9uZyB0aW1lb3V0ID0gMDsKIAlsb25nIHJlc3VsdCA9IDA7CiAJbG9uZyByZXN0b3JlID0gMDsKLQlfX2xlMzIgYWRkcmVzczsKLQlfX2xlMzIgY29tbWFuZDsKLQlfX2xlMzIgc3RhdHVzOwotCV9fbGUzMiBtYWNfY2ZnMDsKKwlfX3UzMiBhZGRyZXNzOworCV9fdTMyIGNvbW1hbmQ7CisJX191MzIgc3RhdHVzOworCV9fdTMyIG1hY19jZmcwOwogCiAJLyoKIAkgKiBNSUkgbWdtdCBhbGwgZ29lcyB0aHJvdWdoIHBvcnQgMCBNQUMgaW50ZXJmYWNlLCBzbyBpdApAQCAtMjAzLDcgKzIwMyw3IEBACiAJCQkJICAmbWFjX2NmZzAsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobmV0eGVuX2diX2dldF9zb2Z0X3Jlc2V0KG1hY19jZmcwKSkgewotCQlfX2xlMzIgdGVtcDsKKwkJX191MzIgdGVtcDsKIAkJdGVtcCA9IDA7CiAJCW5ldHhlbl9nYl90eF9yZXNldF9wYih0ZW1wKTsKIAkJbmV0eGVuX2diX3J4X3Jlc2V0X3BiKHRlbXApOwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJCQkJCSBpbnQgcG9ydCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKLQlfX2xlMzIgZW5hYmxlID0gMDsKKwlfX3UzMiBlbmFibGUgPSAwOwogCW5ldHhlbl9zZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGVuYWJsZSk7CiAJbmV0eGVuX3NldF9waHlfaW50X2F1dG9uZWdfY29tcGxldGVkKGVuYWJsZSk7CiAJbmV0eGVuX3NldF9waHlfaW50X3NwZWVkX2NoYW5nZWQoZW5hYmxlKTsKQEAgLTQwMiw3ICs0MDIsNyBAQAogaW50IG5ldHhlbl9uaXVfZ2JlX2luaXRfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0KQogewogCWludCByZXN1bHQgPSAwOwotCV9fbGUzMiBzdGF0dXM7CisJX191MzIgc3RhdHVzOwogCWlmIChhZGFwdGVyLT5kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKQogCQlhZGFwdGVyLT5kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIsIHBvcnQpOwogCW1kZWxheSgyKTsKQEAgLTQxMCw3ICs0MTAsNyBAQAogCWlmICgwID09CiAJICAgIG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkKGFkYXB0ZXIsIHBvcnQsCiAJCQkJICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLAotCQkJCSAgICAoX19sZTMyICopICYgc3RhdHVzKSkgeworCQkJCSAgICAmc3RhdHVzKSkgewogCQlpZiAobmV0eGVuX2dldF9waHlfbGluayhzdGF0dXMpKSB7CiAJCQlpZiAobmV0eGVuX2dldF9waHlfc3BlZWQoc3RhdHVzKSA9PSAyKSB7CiAJCQkJbmV0eGVuX25pdV9nYmVfc2V0X2dtaWlfbW9kZShhZGFwdGVyLCBwb3J0LCAxKTsKQEAgLTQ4OSw3ICs0ODksNyBAQAogCQkJCQlpbnQgcG9ydCwgbG9uZyBlbmFibGUpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JX19sZTMyIGludF9zcmM7CisJX191MzIgaW50X3NyYzsKIAogCXByaW50ayhLRVJOX0lORk8gUEZYICJORVRYRU46IEhhbmRsaW5nIFBIWSBpbnRlcnJ1cHQgb24gcG9ydCAlZCIKIAkgICAgICAgIiAoZGV2aWNlIGVuYWJsZSA9ICVkKVxuIiwgKGludClwb3J0LCAoaW50KWVuYWJsZSk7CkBAIC01MzAsNyArNTMwLDcgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gUEZYICJhdXRvbmVnX2Vycm9yICIpOwogCQlpZiAoKG5ldHhlbl9nZXRfcGh5X2ludF9zcGVlZF9jaGFuZ2VkKGludF9zcmMpKQogCQkgICAgfHwgKG5ldHhlbl9nZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGludF9zcmMpKSkgewotCQkJX19sZTMyIHN0YXR1czsKKwkJCV9fdTMyIHN0YXR1czsKIAogCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKIAkJCSAgICAgICAic3BlZWRfY2hhbmdlZCBvciBsaW5rIHN0YXR1cyBjaGFuZ2VkIik7CkBAIC01ODMsOSArNTgzLDkgQEAKIGludCBuZXR4ZW5fbml1X21hY2FkZHJfZ2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgIGludCBwaHksIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgKiBhZGRyKQogewotCXU2NCByZXN1bHQgPSAwOwotCV9fbGUzMiBzdGF0aW9uaGlnaDsKLQlfX2xlMzIgc3RhdGlvbmxvdzsKKwl1MzIgc3RhdGlvbmhpZ2g7CisJdTMyIHN0YXRpb25sb3c7CisJdTggdmFsWzhdOwogCiAJaWYgKGFkZHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01OTgsMTAgKzU5OCwxMCBAQAogCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMShwaHkpLAogCQkJCSAgJnN0YXRpb25sb3csIDQpKQogCQlyZXR1cm4gLUVJTzsKKwkoKF9fbGUzMiAqKXZhbClbMV0gPSBjcHVfdG9fbGUzMihzdGF0aW9uaGlnaCk7CisJKChfX2xlMzIgKil2YWwpWzBdID0gY3B1X3RvX2xlMzIoc3RhdGlvbmxvdyk7CiAKLQlyZXN1bHQgPSAodTY0KSBuZXR4ZW5fZ2JfZ2V0X3N0YXRpb25hZGRyZXNzX2xvdyhzdGF0aW9ubG93KTsKLQlyZXN1bHQgfD0gKHU2NCkgc3RhdGlvbmhpZ2ggPDwgMTY7Ci0JbWVtY3B5KCphZGRyLCAmcmVzdWx0LCBzaXplb2YobmV0eGVuX2V0aGVybmV0X21hY2FkZHJfdCkpOworCW1lbWNweShhZGRyLCB2YWwgKyAyLCA2KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjEzLDI0ICs2MTMsMjUgQEAKIGludCBuZXR4ZW5fbml1X21hY2FkZHJfc2V0KHN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCwKIAkJCSAgIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgYWRkcikKIHsKLQlfX2xlMzIgdGVtcCA9IDA7CisJdTggdGVtcFs0XTsKKwl1MzIgdmFsOwogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CiAJaW50IHBoeSA9IHBvcnQtPnBvcnRudW07CiAJdW5zaWduZWQgY2hhciBtYWNfYWRkcls2XTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCW1lbWNweSgmdGVtcCwgYWRkciwgMik7Ci0JCXRlbXAgPDw9IDE2OworCQl0ZW1wWzBdID0gdGVtcFsxXSA9IDA7CisJCW1lbWNweSh0ZW1wICsgMiwgYWRkciwgMik7CisJCXZhbCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopdGVtcCk7CiAJCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4Ci0JCSAgICAoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMShwaHkpLCAmdGVtcCwgNCkpCisJCSAgICAoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMShwaHkpLCAmdmFsLCA0KSkKIAkJCXJldHVybiAtRUlPOwogCi0JCXRlbXAgPSAwOwotCi0JCW1lbWNweSgmdGVtcCwgKCh1OCAqKSBhZGRyKSArIDIsIHNpemVvZihfX2xlMzIpKTsKKwkJbWVtY3B5KHRlbXAsICgodTggKikgYWRkcikgKyAyLCBzaXplb2YoX19sZTMyKSk7CisJCXZhbCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopdGVtcCk7CiAJCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4Ci0JCSAgICAoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMChwaHkpLCAmdGVtcCwgNCkpCisJCSAgICAoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMChwaHkpLCAmdmFsLCA0KSkKIAkJCXJldHVybiAtMjsKIAogCQluZXR4ZW5fbml1X21hY2FkZHJfZ2V0KGFkYXB0ZXIsIHBoeSwKQEAgLTY1OSw5ICs2NjAsOSBAQAogaW50IG5ldHhlbl9uaXVfZW5hYmxlX2diZV9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgICBpbnQgcG9ydCwgbmV0eGVuX25pdV9nYmVfaWZtb2RlX3QgbW9kZSkKIHsKLQlfX2xlMzIgbWFjX2NmZzA7Ci0JX19sZTMyIG1hY19jZmcxOwotCV9fbGUzMiBtaWlfY2ZnOworCV9fdTMyIG1hY19jZmcwOworCV9fdTMyIG1hY19jZmcxOworCV9fdTMyIG1paV9jZmc7CiAKIAlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzM2LDcgKzczNyw3IEBACiAvKiBEaXNhYmxlIGEgR2JFIGludGVyZmFjZSAqLwogaW50IG5ldHhlbl9uaXVfZGlzYWJsZV9nYmVfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0KQogewotCV9fbGUzMiBtYWNfY2ZnMDsKKwlfX3UzMiBtYWNfY2ZnMDsKIAogCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gTkVUWEVOX05JVV9NQVhfR0JFX1BPUlRTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NTIsNyArNzUzLDcgQEAKIC8qIERpc2FibGUgYW4gWEcgaW50ZXJmYWNlICovCiBpbnQgbmV0eGVuX25pdV9kaXNhYmxlX3hnX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCkKIHsKLQlfX2xlMzIgbWFjX2NmZzsKKwlfX3UzMiBtYWNfY2ZnOwogCiAJaWYgKHBvcnQgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NjksNyArNzcwLDcgQEAKIGludCBuZXR4ZW5fbml1X3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnQsCiAJCQkJICAgIG5ldHhlbl9uaXVfcHJvbV9tb2RlX3QgbW9kZSkKIHsKLQlfX2xlMzIgcmVnOworCV9fdTMyIHJlZzsKIAogCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gTkVUWEVOX05JVV9NQVhfR0JFX1BPUlRTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MjYsMjIgKzgyNywyMSBAQAogaW50IG5ldHhlbl9uaXVfeGdfbWFjYWRkcl9zZXQoc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0LAogCQkJICAgICAgbmV0eGVuX2V0aGVybmV0X21hY2FkZHJfdCBhZGRyKQogewotCV9fbGUzMiB0ZW1wID0gMDsKKwl1OCB0ZW1wWzRdOworCXUzMiB2YWw7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKIAotCW1lbWNweSgmdGVtcCwgYWRkciwgMik7Ci0JdGVtcCA9IGNwdV90b19sZTMyKHRlbXApOwotCXRlbXAgPDw9IDE2OworCXRlbXBbMF0gPSB0ZW1wWzFdID0gMDsKKwltZW1jcHkodGVtcCArIDIsIGFkZHIsIDIpOworCXZhbCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopdGVtcCk7CiAJaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfMSwKLQkJCQkgICAmdGVtcCwgNCkpCisJCQkJICAgJnZhbCwgNCkpCiAJCXJldHVybiAtRUlPOwogCi0JdGVtcCA9IDA7Ci0KIAltZW1jcHkoJnRlbXAsICgodTggKikgYWRkcikgKyAyLCBzaXplb2YoX19sZTMyKSk7Ci0JdGVtcCA9IGNwdV90b19sZTMyKHRlbXApOworCXZhbCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopdGVtcCk7CiAJaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfSEksCi0JCQkJICAgJnRlbXAsIDQpKQorCQkJCSAgICZ2YWwsIDQpKQogCQlyZXR1cm4gLUVJTzsKIAogCXJldHVybiAwOwpAQCAtODU0LDkgKzg1NCw5IEBACiBpbnQgbmV0eGVuX25pdV94Z19tYWNhZGRyX2dldChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwaHksCiAJCQkgICAgICBuZXR4ZW5fZXRoZXJuZXRfbWFjYWRkcl90ICogYWRkcikKIHsKLQlfX2xlMzIgc3RhdGlvbmhpZ2g7Ci0JX19sZTMyIHN0YXRpb25sb3c7Ci0JdTY0IHJlc3VsdDsKKwl1MzIgc3RhdGlvbmhpZ2g7CisJdTMyIHN0YXRpb25sb3c7CisJdTggdmFsWzhdOwogCiAJaWYgKGFkZHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04NjksMTAgKzg2OSwxMCBAQAogCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfMSwKIAkJCQkgICZzdGF0aW9ubG93LCA0KSkKIAkJcmV0dXJuIC1FSU87CisJKChfX2xlMzIgKil2YWwpWzFdID0gY3B1X3RvX2xlMzIoc3RhdGlvbmhpZ2gpOworCSgoX19sZTMyICopdmFsKVswXSA9IGNwdV90b19sZTMyKHN0YXRpb25sb3cpOwogCi0JcmVzdWx0ID0gKCh1NjQpIHN0YXRpb25sb3cpID4+IDE2OwotCXJlc3VsdCB8PSAodTY0KSBzdGF0aW9uaGlnaCA8PCAxNjsKLQltZW1jcHkoKmFkZHIsICZyZXN1bHQsIHNpemVvZihuZXR4ZW5fZXRoZXJuZXRfbWFjYWRkcl90KSk7CisJbWVtY3B5KGFkZHIsIHZhbCArIDIsIDYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODAsNyArODgwLDcgQEAKIGludCBuZXR4ZW5fbml1X3hnX3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJCQkgICAgICAgaW50IHBvcnQsIG5ldHhlbl9uaXVfcHJvbV9tb2RlX3QgbW9kZSkKIHsKLQlfX2xlMzIgcmVnOworCV9fdTMyIHJlZzsKIAogCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gTkVUWEVOX05JVV9NQVhfR0JFX1BPUlRTKSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IDc5NGNjNjEuLjQ0OGJmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC0yODEsNyArMjgxLDYgQEAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7Ci0JbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKIAkvKiBUaGUgRUwzLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZWwzX3N0YXJ0X3htaXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IDFlNzNmZjcuLjQ2MWU4MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCkBAIC0xOTUsNyArMTk1LDYgQEAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7Ci0gICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CiAKICAgICAvKiBUaGUgRUwzLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCiAgICAgU0VUX01PRFVMRV9PV05FUihkZXYpOwpAQCAtNjA3LDExICs2MDYsMTQgQEAKIHsKICAgICBraW9fYWRkcl90IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogICAgIHN0cnVjdCBlbDNfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIERFQlVHKDMsICIlczogZWwzX3N0YXJ0X3htaXQobGVuZ3RoID0gJWxkKSBjYWxsZWQsICIKIAkgICJzdGF0dXMgJTQuNHguXG4iLCBkZXYtPm5hbWUsIChsb25nKXNrYi0+bGVuLAogCSAgaW53KGlvYWRkciArIEVMM19TVEFUVVMpKTsKIAorICAgIHNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7ICAgIAorCiAgICAgcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKICAgICAvKiBQdXQgb3V0IHRoZSBkb3VibGV3b3JkIGhlYWRlci4uLiAqLwpAQCAtNjI5LDYgKzYzMSw3IEBACiAKICAgICBkZXZfa2ZyZWVfc2tiKHNrYik7CiAgICAgcG9wX3R4X3N0YXR1cyhkZXYpOworICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsgICAgCiAgICAgCiAgICAgcmV0dXJuIDA7CiB9CkBAIC03MzAsMTQgKzczMywxMyBAQAogCiAgICAgaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSBnb3RvIHJlc2NoZWR1bGU7CiAKLSAgICBFTDNXSU5ET1coMSk7CiAgICAgLyogQ2hlY2sgZm9yIHBlbmRpbmcgaW50ZXJydXB0IHdpdGggZXhwaXJlZCBsYXRlbmN5IHRpbWVyOiB3aXRoCiAgICAgICAgdGhpcywgd2UgY2FuIGxpbXAgYWxvbmcgZXZlbiBpZiB0aGUgaW50ZXJydXB0IGlzIGJsb2NrZWQgKi8KICAgICBpZiAoKGludyhpb2FkZHIgKyBFTDNfU1RBVFVTKSAmIEludExhdGNoKSAmJgogCShpbmIoaW9hZGRyICsgRUwzX1RJTUVSKSA9PSAweGZmKSkgewogCWlmICghbHAtPmZhc3RfcG9sbCkKIAkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGludGVycnVwdChzKSBkcm9wcGVkIVxuIiwgZGV2LT5uYW1lKTsKLQllbDNfaW50ZXJydXB0KGRldi0+aXJxLCBscCk7CisJZWwzX2ludGVycnVwdChkZXYtPmlycSwgZGV2KTsKIAlscC0+ZmFzdF9wb2xsID0gSFo7CiAgICAgfQogICAgIGlmIChscC0+ZmFzdF9wb2xsKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9jb20yMDAyMF9jcy5jCmluZGV4IDkxZjY1ZTkuLjBkMWM3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9jb20yMDAyMF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9jb20yMDAyMF9jcy5jCkBAIC0xNzMsNyArMTczLDYgQEAKICAgICBwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogICAgIHBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotICAgIHBfZGV2LT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAogICAgIHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBpbmZvLT5kZXYgPSBkZXY7CiAgICAgcF9kZXYtPnByaXYgPSBpbmZvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwppbmRleCAyYjEyMzhlLi5kODhlOWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwpAQCAtMTYxNyw2ICsxNjE3LDcgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAiY29yZWdhIEZhc3RFdGhlciBQQ0MtVFgiLCAweDUyNjE0NDBmLCAweDQ4NWU4NWQ5KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQ29yZWdhLEsuSy4iLCAiRXRoZXJuZXQgTEFOIENhcmQiLCAweDExMGQyNmQ5LCAweDlmZDJmMGEyKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhLEsuSy4iLCAiRXRoZXJuZXQgTEFOIENhcmQiLCAweDk3OTFhOTBlLCAweDlmZDJmMGEyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAiKENHLUxBUENDVFhEKSIsIDB4NTI2MTQ0MGYsIDB4NzNlYzBkODgpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJDb3VwbGVybGVzc1BDTUNJQSIsICIxMDBCQVNFIiwgMHhlZTVhZjBhZCwgMHg3YzJhZGQwNCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkN5USd2ZSIsICJFTEEtMDEwIiwgMHg3NzAwODk3OSwgMHg5ZDhkNDQ1ZCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkN5USd2ZSIsICJFTEEtMTEwRSAxMC8xMDBNIExBTiBDYXJkIiwgMHg3NzAwODk3OSwgMHhmZDE4NDgxNCksCkBAIC0xNjY3LDYgKzE2NjgsNyBAQAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJMb2dpdGVjIiwgIkxQTS1MTjEwMFRYIiwgMHg4OGZjZGVkYSwgMHg2ZDc3MjczNyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkxvZ2l0ZWMiLCAiTFBNLUxOMTAwVEUiLCAweDg4ZmNkZWRhLCAweDBlNzE0YmVlKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiTG9naXRlYyIsICJMUE0tTE4yMFQiLCAweDg4ZmNkZWRhLCAweDgxMDkwOTIyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiTG9naXRlYyIsICJMUE0tTE4xMFRFIiwgMHg4OGZjZGVkYSwgMHhjMWUyNTIxYyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkxPTkdTSElORSIsICJQQ01DSUEgRXRoZXJuZXQgQ2FyZCIsIDB4Zjg2NmIwYjAsIDB4NmY2NjUyZTApLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJNQUNOSUNBIiwgIk1FMS1KRUlEQSIsIDB4MjA4NDFiNjgsIDB4YWY4YTM1NzgpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJNYWNzZW5zZSIsICJNUEMtMTAiLCAweGQ4MzAyOTdmLCAweGQyNjVjMzA3KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCmluZGV4IDg0NzhkY2EuLjU4NzllN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwpAQCAtNTc2LDcgKzU3Niw2IEBACiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwotICAgIGxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwogICAgIGxpbmstPmlycS5IYW5kbGVyID0geGlyYzJwc19pbnRlcnJ1cHQ7CiAgICAgbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvZml4ZWQuYyBiL2RyaXZlcnMvbmV0L3BoeS9maXhlZC5jCmluZGV4IDA5NmQ0YTEuLjg2MTM1MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9maXhlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9maXhlZC5jCkBAIC0zNDksNyArMzQ5LDcgQEAKIAlmaXhlZF9tZGlvX3JlZ2lzdGVyX2RldmljZSgwLCAxMDAsIDEpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSVhfRklYRURfTUlJXzEwX0ZEWAorI2lmZGVmIENPTkZJR19GSVhFRF9NSUlfMTBfRkRYCiAJZml4ZWRfbWRpb19yZWdpc3Rlcl9kZXZpY2UoMCwgMTAsIDEpOwogI2VuZGlmCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKaW5kZXggZTE3NWYzOS4uOTc2NWZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwpAQCAtMjg2LDYgKzI4Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wocGh5X2V0aHRvb2xfc3NldCk7CiAKIGludCBwaHlfZXRodG9vbF9nc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewpAQCAtMzAyLDcgKzMwMyw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQorRVhQT1JUX1NZTUJPTChwaHlfZXRodG9vbF9nc2V0KTsKIAogLyogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZQogICogUEhZQ09OVFJPTCBsYXllci4gIEl0IGNoYW5nZXMgcmVnaXN0ZXJzIHdpdGhvdXQgcmVnYXJkIHRvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCBiMDFmYzcwLi5hNGQ3NTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAlzdHJ1Y3QgcGh5X2RldmljZSAqZGV2OwogCS8qIFdlIGFsbG9jYXRlIHRoZSBkZXZpY2UsIGFuZCBpbml0aWFsaXplIHRoZQogCSAqIGRlZmF1bHQgdmFsdWVzICovCi0JZGV2ID0ga2NhbGxvYygxLCBzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAogCWlmIChOVUxMID09IGRldikKIAkJcmV0dXJuIChzdHJ1Y3QgcGh5X2RldmljZSopIFBUUl9FUlIoKHZvaWQqKS1FTk9NRU0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcF9kZWZsYXRlLmMKaW5kZXggZjU0YzU1Mi4uNzJjOGQ2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2RlZmxhdGUuYworKysgYi9kcml2ZXJzL25ldC9wcHBfZGVmbGF0ZS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAlpZiAod19zaXplIDwgREVGTEFURV9NSU5fU0laRSB8fCB3X3NpemUgPiBERUZMQVRFX01BWF9TSVpFKQogCQlyZXR1cm4gTlVMTDsKIAotCXN0YXRlID0gKHN0cnVjdCBwcHBfZGVmbGF0ZV9zdGF0ZSAqKSBrbWFsbG9jKHNpemVvZigqc3RhdGUpLAorCXN0YXRlID0ga21hbGxvYyhzaXplb2YoKnN0YXRlKSwKIAkJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtMzQxLDcgKzM0MSw3IEBACiAJaWYgKHdfc2l6ZSA8IERFRkxBVEVfTUlOX1NJWkUgfHwgd19zaXplID4gREVGTEFURV9NQVhfU0laRSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzdGF0ZSA9IChzdHJ1Y3QgcHBwX2RlZmxhdGVfc3RhdGUgKikga21hbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBrbWFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9tcHBlLmMgYi9kcml2ZXJzL25ldC9wcHBfbXBwZS5jCmluZGV4IGYzNjU1ZmQuLmQ1YmRkMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9tcHBlLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX21wcGUuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJICAgIHx8IG9wdGlvbnNbMF0gIT0gQ0lfTVBQRSB8fCBvcHRpb25zWzFdICE9IENJTEVOX01QUEUpCiAJCWdvdG8gb3V0OwogCi0Jc3RhdGUgPSAoc3RydWN0IHBwcF9tcHBlX3N0YXRlICopIGttYWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCXN0YXRlID0ga21hbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGEzeHh4LmMgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKaW5kZXggZDc5ZDE0MS4uODg0NGMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsYTN4eHguYwpAQCAtMjA4LDYgKzIwOCwxNSBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIHZvaWQgcWxfd3JpdGVfbnZyYW1fcmVnKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKKwkJCQl1MzIgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUpCit7CisJd3JpdGVsKHZhbHVlLCByZWcpOworCXJlYWRsKHJlZyk7CisJdWRlbGF5KDEpOworCXJldHVybjsKK30KKwogc3RhdGljIHZvaWQgcWxfd3JpdGVfcGFnZTBfcmVnKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKIAkJCSAgICAgICB1MzIgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUpCiB7CkBAIC0zMzYsOSArMzQ1LDkgQEAKIAkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAogCXFkZXYtPmVlcHJvbV9jbWRfZGF0YSA9IEFVQlVSTl9FRVBST01fQ1NfMTsKLQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKKwlxbF93cml0ZV9udnJhbV9yZWcocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAogCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhKTsKLQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKKwlxbF93cml0ZV9udnJhbV9yZWcocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAogCQkJICAgICgoSVNQX05WUkFNX01BU0sgPDwgMTYpIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhKSk7CiB9CiAKQEAgLTM1NSwxNCArMzY0LDE0IEBACiAJICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CiAKIAkvKiBDbG9jayBpbiBhIHplcm8sIHRoZW4gZG8gdGhlIHN0YXJ0IGJpdCAqLwotCXFsX3dyaXRlX2NvbW1vbl9yZWcocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAorCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCiAJCQkgICAgSVNQX05WUkFNX01BU0sgfCBxZGV2LT5lZXByb21fY21kX2RhdGEgfAogCQkJICAgIEFVQlVSTl9FRVBST01fRE9fMSk7Ci0JcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCisJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKIAkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgogCQkJICAgIGVlcHJvbV9jbWRfZGF0YSB8IEFVQlVSTl9FRVBST01fRE9fMSB8CiAJCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfUklTRSk7Ci0JcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCisJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKIAkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgogCQkJICAgIGVlcHJvbV9jbWRfZGF0YSB8IEFVQlVSTl9FRVBST01fRE9fMSB8CiAJCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfRkFMTCk7CkBAIC0zNzgsMjAgKzM4NywyMCBAQAogCQkJICogSWYgdGhlIGJpdCBjaGFuZ2VkLCB0aGVuIGNoYW5nZSB0aGUgRE8gc3RhdGUgdG8KIAkJCSAqIG1hdGNoCiAJCQkgKi8KLQkJCXFsX3dyaXRlX2NvbW1vbl9yZWcocWRldiwKKwkJCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LAogCQkJCQkgICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy4KIAkJCQkJICAgIHNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCiAJCQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgogCQkJCQkgICAgZWVwcm9tX2NtZF9kYXRhIHwgZGF0YUJpdCk7CiAJCQlwcmV2aW91c0JpdCA9IGRhdGFCaXQ7CiAJCX0KLQkJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LAorCQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwKIAkJCQkgICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy4KIAkJCQkgICAgc2VyaWFsUG9ydEludGVyZmFjZVJlZywKIAkJCQkgICAgSVNQX05WUkFNX01BU0sgfCBxZGV2LT4KIAkJCQkgICAgZWVwcm9tX2NtZF9kYXRhIHwgZGF0YUJpdCB8CiAJCQkJICAgIEFVQlVSTl9FRVBST01fQ0xLX1JJU0UpOwotCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LAogCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgogCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAogCQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgpAQCAtNDEyLDIwICs0MjEsMjAgQEAKIAkJCSAqIElmIHRoZSBiaXQgY2hhbmdlZCwgdGhlbiBjaGFuZ2UgdGhlIERPIHN0YXRlIHRvCiAJCQkgKiBtYXRjaAogCQkJICovCi0JCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwKIAkJCQkJICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCiAJCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAogCQkJCQkgICAgSVNQX05WUkFNX01BU0sgfCBxZGV2LT4KIAkJCQkJICAgIGVlcHJvbV9jbWRfZGF0YSB8IGRhdGFCaXQpOwogCQkJcHJldmlvdXNCaXQgPSBkYXRhQml0OwogCQl9Ci0JCXFsX3dyaXRlX2NvbW1vbl9yZWcocWRldiwKKwkJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsCiAJCQkJICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCiAJCQkJICAgIHNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCiAJCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+CiAJCQkJICAgIGVlcHJvbV9jbWRfZGF0YSB8IGRhdGFCaXQgfAogCQkJCSAgICBBVUJVUk5fRUVQUk9NX0NMS19SSVNFKTsKLQkJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LAorCQlxbF93cml0ZV9udnJhbV9yZWcocWRldiwKIAkJCQkgICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy4KIAkJCQkgICAgc2VyaWFsUG9ydEludGVyZmFjZVJlZywKIAkJCQkgICAgSVNQX05WUkFNX01BU0sgfCBxZGV2LT4KQEAgLTQ0Myw3ICs0NTIsNyBAQAogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KIAkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKIAlxZGV2LT5lZXByb21fY21kX2RhdGEgPSBBVUJVUk5fRUVQUk9NX0NTXzA7Ci0JcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCisJcWxfd3JpdGVfbnZyYW1fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKIAkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPmVlcHJvbV9jbWRfZGF0YSk7CiB9CiAKQEAgLTQ2MSwxMiArNDcwLDEyIEBACiAJLyogUmVhZCB0aGUgZGF0YSBiaXRzICovCiAJLyogVGhlIGZpcnN0IGJpdCBpcyBhIGR1bW15LiAgQ2xvY2sgcmlnaHQgb3ZlciBpdC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGF0YUJpdHM7IGkrKykgewotCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LAogCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgogCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAogCQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPmVlcHJvbV9jbWRfZGF0YSB8CiAJCQkJICAgIEFVQlVSTl9FRVBST01fQ0xLX1JJU0UpOwotCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCXFsX3dyaXRlX252cmFtX3JlZyhxZGV2LAogCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgogCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAogCQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPmVlcHJvbV9jbWRfZGF0YSB8CkBAIC0zMzcwLDcgKzMzNzksNiBAQAogCVNFVF9NT0RVTEVfT1dORVIobmRldik7CiAJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CiAKLQluZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfTExUWDsKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCBmODNiNDFkLi41NzdiYWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTIyNSw3ICsyMjUsNiBAQAogCiBzdGF0aWMgaW50IHJ4X2NvcHlicmVhayA9IDIwMDsKIHN0YXRpYyBpbnQgdXNlX2RhYzsKLXN0YXRpYyBpbnQgaWdub3JlX3Bhcml0eV9lcnI7CiBzdGF0aWMgc3RydWN0IHsKIAl1MzIgbXNnX2VuYWJsZTsKIH0gZGVidWcgPSB7IC0xIH07CkBAIC00NzEsOCArNDcwLDYgQEAKIE1PRFVMRV9QQVJNX0RFU0ModXNlX2RhYywgIkVuYWJsZSBQQ0kgREFDLiBVbnNhZmUgb24gMzIgYml0IFBDSSBzbG90LiIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkZWJ1Zy5tc2dfZW5hYmxlLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIHZlcmJvc2l0eSBsZXZlbCAoMD1ub25lLCAuLi4sIDE2PWFsbCkiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChpZ25vcmVfcGFyaXR5X2VyciwgaWdub3JlX3Bhcml0eV9lcnIsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpZ25vcmVfcGFyaXR5X2VyciwgIklnbm9yZSBQQ0kgcGFyaXR5IGVycm9yIGFzIHRhcmdldC4gRGVmYXVsdDogZmFsc2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKFJUTDgxNjlfVkVSU0lPTik7CiAKQEAgLTE4ODUsNyArMTg4Miw2IEBACiAJICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMikgfHwKIAkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAzKSB8fAogCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDQpKQotCQlSVExfVzgoQ2hpcENtZCwgQ21kVHhFbmIgfCBDbWRSeEVuYik7CiAJCXJ0bDgxNjlfc2V0X3J4X3R4X2NvbmZpZ19yZWdpc3RlcnModHApOwogCiAJY21kID0gUlRMX1IxNihDUGx1c0NtZCk7CkBAIC0yMzg4LDcgKzIzODQsNyBAQAogCSAqCiAJICogRmVlbCBmcmVlIHRvIGFkanVzdCB0byB5b3VyIG5lZWRzLgogCSAqLwotCWlmIChpZ25vcmVfcGFyaXR5X2VycikKKwlpZiAocGRldi0+YnJva2VuX3Bhcml0eV9zdGF0dXMpCiAJCXBjaV9jbWQgJj0gflBDSV9DT01NQU5EX1BBUklUWTsKIAllbHNlCiAJCXBjaV9jbWQgfD0gUENJX0NPTU1BTkRfU0VSUiB8IFBDSV9DT01NQU5EX1BBUklUWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uYyBiL2RyaXZlcnMvbmV0L3MyaW8uYwppbmRleCAyNTBjZGJlLi4xZGQ2NmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmMKKysrIGIvZHJpdmVycy9uZXQvczJpby5jCkBAIC01NTYsMTAgKzU1Niw5IEBACiAJCX0KIAl9CiAKLQluaWMtPnVmb19pbl9iYW5kX3YgPSBrbWFsbG9jKChzaXplb2YodTY0KSAqIHNpemUpLCBHRlBfS0VSTkVMKTsKKwluaWMtPnVmb19pbl9iYW5kX3YgPSBrY2FsbG9jKHNpemUsIHNpemVvZih1NjQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5pYy0+dWZvX2luX2JhbmRfdikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KG5pYy0+dWZvX2luX2JhbmRfdiwgMCwgc2l6ZSk7CiAKIAkvKiBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBSWERzIGluIFJpbmdzICovCiAJc2l6ZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXMxOTAuYyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCmluZGV4IGI3MGVkNzkuLjQ1ZDkxYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczE5MC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCkBAIC0xNTYyLDcgKzE1NjIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBNQUNfQUREUl9MRU4gLyAyOyBpKyspIHsKIAkJX19sZTE2IHcgPSBzaXMxOTBfcmVhZF9lZXByb20oaW9hZGRyLCBFRVBST01NQUNBZGRyICsgaSk7CiAKLQkJKCh1MTYgKilkZXYtPmRldl9hZGRyKVswXSA9IGxlMTZfdG9fY3B1KHcpOworCQkoKHUxNiAqKWRldi0+ZGV2X2FkZHIpW2ldID0gbGUxNl90b19jcHUodyk7CiAJfQogCiAJc2lzMTkwX3NldF9yZ21paSh0cCwgc2lzMTkwX3JlYWRfZWVwcm9tKGlvYWRkciwgRUVQUk9NSW5mbykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IGI2MGYwNDUuLjQ1MjgzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTYwLDcgKzYwLDcgQEAKICNkZWZpbmUgTElOS19IWgkJCShIWi8yKQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlN5c0tvbm5lY3QgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIlN0ZXBoZW4gSGVtbWluZ2VyIDxzaGVtbWluZ2VyQG9zZGwub3JnPiIpOworTU9EVUxFX0FVVEhPUigiU3RlcGhlbiBIZW1taW5nZXIgPHNoZW1taW5nZXJAbGludXgtZm91bmRhdGlvbi5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiAKQEAgLTc0OSw3ICs3NDksNyBAQAogCXN0cnVjdCBza2dlX2VsZW1lbnQgKmU7CiAJaW50IGk7CiAKLQlyaW5nLT5zdGFydCA9IGtjYWxsb2Moc2l6ZW9mKCplKSwgcmluZy0+Y291bnQsIEdGUF9LRVJORUwpOworCXJpbmctPnN0YXJ0ID0ga2NhbGxvYyhyaW5nLT5jb3VudCwgc2l6ZW9mKCplKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyaW5nLT5zdGFydCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI5MjAsNiArMjkyMCw3IEBACiAJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CiAJc3RydWN0IHNrZ2VfcmluZyAqcmluZyA9ICZza2dlLT5yeF9yaW5nOwogCXN0cnVjdCBza2dlX2VsZW1lbnQgKmU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdG9fZG8gPSBtaW4oZGV2LT5xdW90YSwgKmJ1ZGdldCk7CiAJaW50IHdvcmtfZG9uZSA9IDA7CiAKQEAgLTI5NTcsMTIgKzI5NTgsMTIgQEAKIAlpZiAod29ya19kb25lID49ICB0b19kbykKIAkJcmV0dXJuIDE7IC8qIG5vdCBkb25lICovCiAKLQlzcGluX2xvY2tfaXJxKCZody0+aHdfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5od19sb2NrLCBmbGFncyk7CiAJX19uZXRpZl9yeF9jb21wbGV0ZShkZXYpOwogCWh3LT5pbnRyX21hc2sgfD0gaXJxbWFza1tza2dlLT5wb3J0XTsKICAgCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CiAJc2tnZV9yZWFkMzIoaHcsIEIwX0lNU0spOwotCXNwaW5fdW5sb2NrX2lycSgmaHctPmh3X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5od19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCBmYjFkMmMzLi44MjJkZDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC01NjksOCArNTY5LDggQEAKIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCAmJiBody0+Y2hpcF9yZXYgPiAxKQogCQlvbm9mZiA9ICFvbm9mZjsKIAorCXNreTJfd3JpdGU4KGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT04pOwogCXJlZzEgPSBza3kyX3BjaV9yZWFkMzIoaHcsIFBDSV9ERVZfUkVHMSk7Ci0KIAlpZiAob25vZmYpCiAJCS8qIFR1cm4gb2ZmIHBoeSBwb3dlciBzYXZpbmcgKi8KIAkJcmVnMSAmPSB+cGh5X3Bvd2VyW3BvcnRdOwpAQCAtNTc5LDYgKzU3OSw3IEBACiAKIAlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzEsIHJlZzEpOwogCXNreTJfcGNpX3JlYWQzMihodywgUENJX0RFVl9SRUcxKTsKKwlza3kyX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09GRik7CiAJdWRlbGF5KDEwMCk7CiB9CiAKQEAgLTE1MTEsNiArMTUxMiwxMyBAQAogCWltYXNrICY9IH5wb3J0aXJxX21za1twb3J0XTsKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGltYXNrKTsKIAorCS8qCisJICogQm90aCBwb3J0cyBzaGFyZSB0aGUgTkFQSSBwb2xsIG9uIHBvcnQgMCwgc28gaWYgbmVjZXNzYXJ5IHVuZG8gdGhlCisJICogdGhlIGRpc2FibGUgdGhhdCBpcyBkb25lIGluIGRldl9jbG9zZS4KKwkgKi8KKwlpZiAoc2t5Mi0+cG9ydCA9PSAwICYmIGh3LT5wb3J0cyA+IDEpCisJCW5ldGlmX3BvbGxfZW5hYmxlKGRldik7CisKIAlza3kyX2dtYWNfcmVzZXQoaHcsIHBvcnQpOwogCiAJLyogU3RvcCB0cmFuc21pdHRlciAqLwpAQCAtMzY1OCw2ICszNjY2LDYgQEAKIG1vZHVsZV9leGl0KHNreTJfY2xlYW51cF9tb2R1bGUpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1hcnZlbGwgWXVrb24gMiBHaWdhYml0IEV0aGVybmV0IGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiU3RlcGhlbiBIZW1taW5nZXIgPHNoZW1taW5nZXJAb3NkbC5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJTdGVwaGVuIEhlbW1pbmdlciA8c2hlbW1pbmdlckBsaW51eC1mb3VuZGF0aW9uLm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAuYwppbmRleCAzOWMyMTUyLi5hMDgwNmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5jCkBAIC0yMjksMTAgKzIyOSwxMCBAQAogCWlmIChsZW4gPCA1NzYgKiAyKQogCQlsZW4gPSA1NzYgKiAyOwogCi0JeGJ1ZmYgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jIChsZW4gKyA0LCBHRlBfQVRPTUlDKTsKLQlyYnVmZiA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2MgKGxlbiArIDQsIEdGUF9BVE9NSUMpOworCXhidWZmID0ga21hbGxvYyhsZW4gKyA0LCBHRlBfQVRPTUlDKTsKKwlyYnVmZiA9IGttYWxsb2MobGVuICsgNCwgR0ZQX0FUT01JQyk7CiAjaWZkZWYgU0xfSU5DTFVERV9DU0xJUAotCWNidWZmID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyAobGVuICsgNCwgR0ZQX0FUT01JQyk7CisJY2J1ZmYgPSBrbWFsbG9jKGxlbiArIDQsIEdGUF9BVE9NSUMpOwogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IDJjNDM0MzMuLjQzYWY2MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTE0OCw2ICsxNDgsOCBAQAogCWludCB0eF90aHJvdHRsZTsKIAlzcGlubG9ja190IGxvY2s7CiAKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCiAjaWZkZWYgU01DX1VTRV9ETUEKIAkvKiBETUEgbmVlZHMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGNoaXAgKi8KIAl1X2xvbmcgcGh5c2FkZHI7CkBAIC05NDgsMTAgKzk1MCwxMSBAQAogICogb2YgYXV0b25lZ290aWF0aW9uLikgIElmIHRoZSBSUEMgQU5FRyBiaXQgaXMgY2xlYXJlZCwgdGhlIHNlbGVjdGlvbgogICogaXMgY29udHJvbGxlZCBieSB0aGUgUlBDIFNQRUVEIGFuZCBSUEMgRFBMWCBiaXRzLgogICovCi1zdGF0aWMgdm9pZCBzbWM5MTF4X3BoeV9jb25maWd1cmUodm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIHNtYzkxMXhfcGh5X2NvbmZpZ3VyZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7Ci0Jc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNtYzkxMXhfbG9jYWwsCisJCQkJCQlwaHlfY29uZmlndXJlKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbHAtPm5ldGRldjsKIAl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCWludCBwaHlhZGRyID0gbHAtPm1paS5waHlfaWQ7CiAJaW50IG15X3BoeV9jYXBzOyAvKiBNeSBQSFkgY2FwYWJpbGl0aWVzICovCkBAIC05NjUsMTEgKzk2OCwxMSBAQAogCSAqIFdlIHNob3VsZCBub3QgYmUgY2FsbGVkIGlmIHBoeV90eXBlIGlzIHplcm8uCiAJICovCiAJaWYgKGxwLT5waHlfdHlwZSA9PSAwKQotCQkgZ290byBzbWM5MTF4X3BoeV9jb25maWd1cmVfZXhpdDsKKwkJIGdvdG8gc21jOTExeF9waHlfY29uZmlndXJlX2V4aXRfbm9sb2NrOwogCiAJaWYgKHNtYzkxMXhfcGh5X3Jlc2V0KGRldiwgcGh5YWRkcikpIHsKIAkJcHJpbnRrKCIlczogUEhZIHJlc2V0IHRpbWVkIG91dFxuIiwgZGV2LT5uYW1lKTsKLQkJZ290byBzbWM5MTF4X3BoeV9jb25maWd1cmVfZXhpdDsKKwkJZ290byBzbWM5MTF4X3BoeV9jb25maWd1cmVfZXhpdF9ub2xvY2s7CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMDM4LDYgKzEwNDEsNyBAQAogCiBzbWM5MTF4X3BoeV9jb25maWd1cmVfZXhpdDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworc21jOTExeF9waHlfY29uZmlndXJlX2V4aXRfbm9sb2NrOgogCWxwLT53b3JrX3BlbmRpbmcgPSAwOwogfQogCkBAIC0xMzMxLDcgKzEzMzUsNyBAQAogc3RhdGljIHZvaWQgc21jOTExeF9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkaXNhYmxlX2lycShkZXYtPmlycSk7Ci0Jc21jOTExeF9pbnRlcnJ1cHQoZGV2LT5pcnEsIGRldiwgTlVMTCk7CisJc21jOTExeF9pbnRlcnJ1cHQoZGV2LT5pcnEsIGRldik7CiAJZW5hYmxlX2lycShkZXYtPmlycSk7CiB9CiAjZW5kaWYKQEAgLTE0OTUsNiArMTQ5OSw4IEBACiBzdGF0aWMgaW50CiBzbWM5MTF4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3Qgc21jOTExeF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworCiAJREJHKFNNQ19ERUJVR19GVU5DLCAiJXM6IC0tPiAlc1xuIiwgZGV2LT5uYW1lLCBfX0ZVTkNUSU9OX18pOwogCiAJLyoKQEAgLTE1MTEsNyArMTUxNyw3IEBACiAJc21jOTExeF9yZXNldChkZXYpOwogCiAJLyogQ29uZmlndXJlIHRoZSBQSFksIGluaXRpYWxpemUgdGhlIGxpbmsgc3RhdGUgKi8KLQlzbWM5MTF4X3BoeV9jb25maWd1cmUoZGV2KTsKKwlzbWM5MTF4X3BoeV9jb25maWd1cmUoJmxwLT5waHlfY29uZmlndXJlKTsKIAogCS8qIFR1cm4gb24gVHggKyBSeCAqLwogCXNtYzkxMXhfZW5hYmxlKGRldik7CkBAIC0yMDYwLDcgKzIwNjYsNyBAQAogCWRldi0+cG9sbF9jb250cm9sbGVyID0gc21jOTExeF9wb2xsX2NvbnRyb2xsZXI7CiAjZW5kaWYKIAotCUlOSVRfV09SSygmbHAtPnBoeV9jb25maWd1cmUsIHNtYzkxMXhfcGh5X2NvbmZpZ3VyZSwgZGV2KTsKKwlJTklUX1dPUksoJmxwLT5waHlfY29uZmlndXJlLCBzbWM5MTF4X3BoeV9jb25maWd1cmUpOwogCWxwLT5taWkucGh5X2lkX21hc2sgPSAweDFmOwogCWxwLT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKIAlscC0+bWlpLmZvcmNlX21lZGlhID0gMDsKQEAgLTIxNTQsNiArMjE2MCw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwOwogCXVuc2lnbmVkIGludCAqYWRkcjsKIAlpbnQgcmV0OwogCkBAIC0yMTgzLDYgKzIxOTAsOCBAQAogCiAJbmRldi0+ZG1hID0gKHVuc2lnbmVkIGNoYXIpLTE7CiAJbmRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlscCA9IG5ldGRldl9wcml2KG5kZXYpOworCWxwLT5uZXRkZXYgPSBuZGV2OwogCiAJYWRkciA9IGlvcmVtYXAocmVzLT5zdGFydCwgU01DOTExWF9JT19FWFRFTlQpOwogCWlmICghYWRkcikgewpAQCAtMjIwNCw3ICsyMjEzLDYgQEAKIAl9CiAjaWZkZWYgU01DX1VTRV9ETUEKIAllbHNlIHsKLQkJc3RydWN0IHNtYzkxMXhfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJCWxwLT5waHlzYWRkciA9IHJlcy0+c3RhcnQ7CiAJCWxwLT5kZXYgPSAmcGRldi0+ZGV2OwogCX0KQEAgLTIyNzUsNyArMjI4Myw3IEBACiAJCQlzbWM5MTF4X3Jlc2V0KG5kZXYpOwogCQkJc21jOTExeF9lbmFibGUobmRldik7CiAJCQlpZiAobHAtPnBoeV90eXBlICE9IDApCi0JCQkJc21jOTExeF9waHlfY29uZmlndXJlKG5kZXYpOworCQkJCXNtYzkxMXhfcGh5X2NvbmZpZ3VyZSgmbHAtPnBoeV9jb25maWd1cmUpOwogCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKaW5kZXggOTM2N2M1Ny4uZDI3NjdlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKQEAgLTM2Miw5NiArMzYyLDYgQEAKIAogI2RlZmluZSBTTUNfSVJRX0ZMQUdTCQkoMCkKIAotI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9WRVJTQVRJTEUpCi0KLSNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkxCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUCTEKLSNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMQotI2RlZmluZSBTTUNfTk9XQUlUCQkxCi0KLSNkZWZpbmUgU01DX2luYihhLCByKQkJcmVhZGIoKGEpICsgKHIpKQotI2RlZmluZSBTTUNfaW53KGEsIHIpCQlyZWFkdygoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19pbmwoYSwgcikJCXJlYWRsKChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dGIodiwgYSwgcikJd3JpdGViKHYsIChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dHcodiwgYSwgcikJd3JpdGV3KHYsIChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dGwodiwgYSwgcikJd3JpdGVsKHYsIChhKSArIChyKSkKLSNkZWZpbmUgU01DX2luc2woYSwgciwgcCwgbCkJcmVhZHNsKChhKSArIChyKSwgcCwgbCkKLSNkZWZpbmUgU01DX291dHNsKGEsIHIsIHAsIGwpCXdyaXRlc2woKGEpICsgKHIpLCBwLCBsKQotCi0jZGVmaW5lIFNNQ19JUlFfRkxBR1MJCSgwKQotCi0jZWxpZglkZWZpbmVkKENPTkZJR19BUkNIX1ZFUlNBVElMRSkKLQotI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUCTEKLSNkZWZpbmUgU01DX0NBTl9VU0VfMTZCSVQJMQotI2RlZmluZSBTTUNfQ0FOX1VTRV8zMkJJVAkxCi0jZGVmaW5lIFNNQ19OT1dBSVQJCTEKLQotI2RlZmluZSBTTUNfaW5iKGEsIHIpCQlyZWFkYigoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19pbncoYSwgcikJCXJlYWR3KChhKSArIChyKSkKLSNkZWZpbmUgU01DX2lubChhLCByKQkJcmVhZGwoKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0Yih2LCBhLCByKQl3cml0ZWIodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0dyh2LCBhLCByKQl3cml0ZXcodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0bCh2LCBhLCByKQl3cml0ZWwodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfaW5zbChhLCByLCBwLCBsKQlyZWFkc2woKGEpICsgKHIpLCBwLCBsKQotI2RlZmluZSBTTUNfb3V0c2woYSwgciwgcCwgbCkJd3JpdGVzbCgoYSkgKyAociksIHAsIGwpCi0KLSNkZWZpbmUgU01DX0lSUV9GTEFHUwkJKDApCi0KLSNlbGlmCWRlZmluZWQoQ09ORklHX0FSQ0hfVkVSU0FUSUxFKQotCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMQotI2RlZmluZSBTTUNfQ0FOX1VTRV8xNkJJVAkxCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzMyQklUCTEKLSNkZWZpbmUgU01DX05PV0FJVAkJMQotCi0jZGVmaW5lIFNNQ19pbmIoYSwgcikJCXJlYWRiKChhKSArIChyKSkKLSNkZWZpbmUgU01DX2ludyhhLCByKQkJcmVhZHcoKGEpICsgKHIpKQotI2RlZmluZSBTTUNfaW5sKGEsIHIpCQlyZWFkbCgoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19vdXRiKHYsIGEsIHIpCXdyaXRlYih2LCAoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19vdXR3KHYsIGEsIHIpCXdyaXRldyh2LCAoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19vdXRsKHYsIGEsIHIpCXdyaXRlbCh2LCAoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19pbnNsKGEsIHIsIHAsIGwpCXJlYWRzbCgoYSkgKyAociksIHAsIGwpCi0jZGVmaW5lIFNNQ19vdXRzbChhLCByLCBwLCBsKQl3cml0ZXNsKChhKSArIChyKSwgcCwgbCkKLQotI2RlZmluZSBTTUNfSVJRX0ZMQUdTCQkoMCkKLQotI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9WRVJTQVRJTEUpCi0KLSNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkxCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUCTEKLSNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMQotI2RlZmluZSBTTUNfTk9XQUlUCQkxCi0KLSNkZWZpbmUgU01DX2luYihhLCByKQkJcmVhZGIoKGEpICsgKHIpKQotI2RlZmluZSBTTUNfaW53KGEsIHIpCQlyZWFkdygoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19pbmwoYSwgcikJCXJlYWRsKChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dGIodiwgYSwgcikJd3JpdGViKHYsIChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dHcodiwgYSwgcikJd3JpdGV3KHYsIChhKSArIChyKSkKLSNkZWZpbmUgU01DX291dGwodiwgYSwgcikJd3JpdGVsKHYsIChhKSArIChyKSkKLSNkZWZpbmUgU01DX2luc2woYSwgciwgcCwgbCkJcmVhZHNsKChhKSArIChyKSwgcCwgbCkKLSNkZWZpbmUgU01DX291dHNsKGEsIHIsIHAsIGwpCXdyaXRlc2woKGEpICsgKHIpLCBwLCBsKQotCi0jZGVmaW5lIFNNQ19JUlFfRkxBR1MJCSgwKQotCi0jZWxpZglkZWZpbmVkKENPTkZJR19BUkNIX1ZFUlNBVElMRSkKLQotI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUCTEKLSNkZWZpbmUgU01DX0NBTl9VU0VfMTZCSVQJMQotI2RlZmluZSBTTUNfQ0FOX1VTRV8zMkJJVAkxCi0jZGVmaW5lIFNNQ19OT1dBSVQJCTEKLQotI2RlZmluZSBTTUNfaW5iKGEsIHIpCQlyZWFkYigoYSkgKyAocikpCi0jZGVmaW5lIFNNQ19pbncoYSwgcikJCXJlYWR3KChhKSArIChyKSkKLSNkZWZpbmUgU01DX2lubChhLCByKQkJcmVhZGwoKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0Yih2LCBhLCByKQl3cml0ZWIodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0dyh2LCBhLCByKQl3cml0ZXcodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0bCh2LCBhLCByKQl3cml0ZWwodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfaW5zbChhLCByLCBwLCBsKQlyZWFkc2woKGEpICsgKHIpLCBwLCBsKQotI2RlZmluZSBTTUNfb3V0c2woYSwgciwgcCwgbCkJd3JpdGVzbCgoYSkgKyAociksIHAsIGwpCi0KLSNkZWZpbmUgU01DX0lSUV9GTEFHUwkJKDApCi0KICNlbHNlCiAKICNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggZWJiNmFhMy4uOGVhMmZjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtMTkyNSw2ICsxOTI1LDggQEAKIAkvKiByZWxlYXNlIGNoYWlucyAqLwogCXNwaWRlcl9uZXRfcmVsZWFzZV90eF9jaGFpbihjYXJkLCAxKTsKIAorCXNwaWRlcl9uZXRfZnJlZV9yeF9jaGFpbl9jb250ZW50cyhjYXJkKTsKKwogCXNwaWRlcl9uZXRfZnJlZV9jaGFpbihjYXJkLCAmY2FyZC0+dHhfY2hhaW4pOwogCXNwaWRlcl9uZXRfZnJlZV9jaGFpbihjYXJkLCAmY2FyZC0+cnhfY2hhaW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW0uYyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCmluZGV4IDc4NWU0YTUuLjYxNmJlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCkBAIC05MCw3ICs5MCw4IEBACiAKICNkZWZpbmUgQURWRVJUSVNFX01BU0sJKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwgXAogCQkJIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfCBcCi0JCQkgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKQorCQkJIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8IFwKKwkJCSBTVVBQT1JURURfUGF1c2UgfCBTVVBQT1JURURfQXV0b25lZykKIAogI2RlZmluZSBEUlZfTkFNRQkic3VuZ2VtIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMC45OCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYyBiL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYwppbmRleCA0OTgwMGIyLi5kMjE5OTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCkBAIC0zLDEwICszLDkgQEAKICAqCiAgKiBUaGlzIGZpbGUgY291bGQgYmUgc2hhcmVkIHdpdGggb3RoZXIgZHJpdmVycy4KICAqCi0gKiAoYykgMjAwMiwgQmVuamFtaW4gSGVycmVuc2NtaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpCisgKiAoYykgMjAwMi0yMDA3LCBCZW5qYW1pbiBIZXJyZW5zY21pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZykKICAqCiAgKiBUT0RPOgotICogIC0gSW1wbGVtZW50IFdPTAogICogIC0gQWRkIHN1cHBvcnQgZm9yIFBIWXMgdGhhdCBwcm92aWRlIGFuIElSUSBsaW5lCiAgKiAgLSBFdmVudHVhbGx5IG1vdmVkIHRoZSBlbnRpcmUgcG9sbGluZyBzdGF0ZSBtYWNoaW5lIGluCiAgKiAgICB0aGVyZSAob3V0IG9mIHRoZSBldGggZHJpdmVyKSwgc28gdGhhdCBpdCBjYW4gZWFzaWx5IGJlCkBAIC0xNTIsNiArMTUxLDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYmNtNTI0MV9pbml0KHN0cnVjdCBtaWlfcGh5KiBwaHkpCit7CisJdTE2IGRhdGE7CisKKwlkYXRhID0gcGh5X3JlYWQocGh5LCBNSUlfQkNNNTIyMV9URVNUKTsKKwlwaHlfd3JpdGUocGh5LCBNSUlfQkNNNTIyMV9URVNULAorCQlkYXRhIHwgTUlJX0JDTTUyMjFfVEVTVF9FTkFCTEVfU0hBRE9XUyk7CisKKwlkYXRhID0gcGh5X3JlYWQocGh5LCBNSUlfQkNNNTIyMV9TSERPV19BVVhfU1RBVDIpOworCXBoeV93cml0ZShwaHksIE1JSV9CQ001MjIxX1NIRE9XX0FVWF9TVEFUMiwKKwkJZGF0YSB8IE1JSV9CQ001MjIxX1NIRE9XX0FVWF9TVEFUMl9BUEQpOworCisJZGF0YSA9IHBoeV9yZWFkKHBoeSwgTUlJX0JDTTUyMjFfU0hET1dfQVVYX01PREU0KTsKKwlwaHlfd3JpdGUocGh5LCBNSUlfQkNNNTIyMV9TSERPV19BVVhfTU9ERTQsCisJCWRhdGEgJiB+TUlJX0JDTTUyNDFfU0hET1dfQVVYX01PREU0X1NUQU5EQllQV1IpOworCisJZGF0YSA9IHBoeV9yZWFkKHBoeSwgTUlJX0JDTTUyMjFfVEVTVCk7CisJcGh5X3dyaXRlKHBoeSwgTUlJX0JDTTUyMjFfVEVTVCwKKwkJZGF0YSAmIH5NSUlfQkNNNTIyMV9URVNUX0VOQUJMRV9TSEFET1dTKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJjbTUyNDFfc3VzcGVuZChzdHJ1Y3QgbWlpX3BoeSogcGh5KQoreworCXUxNiBkYXRhOworCisJZGF0YSA9IHBoeV9yZWFkKHBoeSwgTUlJX0JDTTUyMjFfVEVTVCk7CisJcGh5X3dyaXRlKHBoeSwgTUlJX0JDTTUyMjFfVEVTVCwKKwkJZGF0YSB8IE1JSV9CQ001MjIxX1RFU1RfRU5BQkxFX1NIQURPV1MpOworCisJZGF0YSA9IHBoeV9yZWFkKHBoeSwgTUlJX0JDTTUyMjFfU0hET1dfQVVYX01PREU0KTsKKwlwaHlfd3JpdGUocGh5LCBNSUlfQkNNNTIyMV9TSERPV19BVVhfTU9ERTQsCisJCSAgZGF0YSB8IE1JSV9CQ001MjQxX1NIRE9XX0FVWF9NT0RFNF9TVEFOREJZUFdSKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGJjbTU0MDBfaW5pdChzdHJ1Y3QgbWlpX3BoeSogcGh5KQogewogCXUxNiBkYXRhOwpAQCAtMzczLDYgKzQxMCwxMCBAQAogCQlhZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7CiAJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKIAkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOworCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEX1BhdXNlKQorCQlhZHYgfD0gQURWRVJUSVNFX1BBVVNFX0NBUDsKKwlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKQorCQlhZHYgfD0gQURWRVJUSVNFX1BBVVNFX0FTWU07CiAJcGh5X3dyaXRlKHBoeSwgTUlJX0FEVkVSVElTRSwgYWR2KTsKIAogCS8qIFNldHVwIDEwMDBCVCBhZHZlcnRpc2UgKi8KQEAgLTQzNiwxMiArNDc3LDE1IEBACiAJICAgIAl2YWwgPSBwaHlfcmVhZChwaHksIE1JSV9CQ001NDAwX0FVWFNUQVRVUyk7CiAJCWxpbmtfbW9kZSA9ICgodmFsICYgTUlJX0JDTTU0MDBfQVVYU1RBVFVTX0xJTktNT0RFX01BU0spID4+CiAJCQkgICAgIE1JSV9CQ001NDAwX0FVWFNUQVRVU19MSU5LTU9ERV9TSElGVCk7Ci0JCXBoeS0+ZHVwbGV4ID0gcGh5X0JDTTU0MDBfbGlua190YWJsZVtsaW5rX21vZGVdWzBdID8gRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKKwkJcGh5LT5kdXBsZXggPSBwaHlfQkNNNTQwMF9saW5rX3RhYmxlW2xpbmtfbW9kZV1bMF0gPworCQkJRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAkJcGh5LT5zcGVlZCA9IHBoeV9CQ001NDAwX2xpbmtfdGFibGVbbGlua19tb2RlXVsyXSA/CiAJCQkJU1BFRURfMTAwMCA6Ci0JCQkJKHBoeV9CQ001NDAwX2xpbmtfdGFibGVbbGlua19tb2RlXVsxXSA/IFNQRUVEXzEwMCA6IFNQRUVEXzEwKTsKKwkJCQkocGh5X0JDTTU0MDBfbGlua190YWJsZVtsaW5rX21vZGVdWzFdID8KKwkJCQkgU1BFRURfMTAwIDogU1BFRURfMTApOwogCQl2YWwgPSBwaHlfcmVhZChwaHksIE1JSV9MUEEpOwotCQlwaHktPnBhdXNlID0gKCh2YWwgJiBMUEFfUEFVU0UpICE9IDApOworCQlwaHktPnBhdXNlID0gKHBoeS0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSAmJgorCQkJKCh2YWwgJiBMUEFfUEFVU0UpICE9IDApOwogCX0KIAkvKiBPbiBub24tYW5lZywgd2UgYXNzdW1lIHdoYXQgd2UgcHV0IGluIEJNQ1IgaXMgdGhlIHNwZWVkLAogCSAqIHRob3VnaCBtYWdpYy1hbmVnIHNob3VsZG4ndCBwcmV2ZW50IHRoaXMgY2FzZSBmcm9tIG9jY3VycmluZwpAQCAtNDUwLDYgKzQ5NCwyOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1hcnZlbGw4OGUxMTExX2luaXQoc3RydWN0IG1paV9waHkqIHBoeSkKK3sKKwl1MTYgcmV2OworCisJLyogbWFnaWMgaW5pdCBzZXF1ZW5jZSBmb3IgcmV2IDAgKi8KKwlyZXYgPSBwaHlfcmVhZChwaHksIE1JSV9QSFlTSUQyKSAmIDB4MDAwZjsKKwlpZiAocmV2ID09IDApIHsKKwkJcGh5X3dyaXRlKHBoeSwgMHgxZCwgMHgwMDBhKTsKKwkJcGh5X3dyaXRlKHBoeSwgMHgxZSwgMHgwODIxKTsKKworCQlwaHlfd3JpdGUocGh5LCAweDFkLCAweDAwMDYpOworCQlwaHlfd3JpdGUocGh5LCAweDFlLCAweDg2MDApOworCisJCXBoeV93cml0ZShwaHksIDB4MWQsIDB4MDAwYik7CisJCXBoeV93cml0ZShwaHksIDB4MWUsIDB4MDEwMCk7CisKKwkJcGh5X3dyaXRlKHBoeSwgMHgxZCwgMHgwMDA0KTsKKwkJcGh5X3dyaXRlKHBoeSwgMHgxZSwgMHg0ODUwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbWFydmVsbF9zZXR1cF9hbmVnKHN0cnVjdCBtaWlfcGh5ICpwaHksIHUzMiBhZHZlcnRpc2UpCiB7CiAJdTE2IGN0bCwgYWR2OwpAQCAtNDcxLDYgKzUzNywxMCBAQAogCQlhZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7CiAJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKIAkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOworCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEX1BhdXNlKQorCQlhZHYgfD0gQURWRVJUSVNFX1BBVVNFX0NBUDsKKwlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKQorCQlhZHYgfD0gQURWRVJUSVNFX1BBVVNFX0FTWU07CiAJcGh5X3dyaXRlKHBoeSwgTUlJX0FEVkVSVElTRSwgYWR2KTsKIAogCS8qIFNldHVwIDEwMDBCVCBhZHZlcnRpc2UgJiBlbmFibGUgY3Jvc3NvdmVyIGRldGVjdApAQCAtNTQ5LDcgKzYxOSw3IEBACiAKIHN0YXRpYyBpbnQgbWFydmVsbF9yZWFkX2xpbmsoc3RydWN0IG1paV9waHkgKnBoeSkKIHsKLQl1MTYgc3RhdHVzOworCXUxNiBzdGF0dXMsIHBtYXNrOwogCiAJaWYgKHBoeS0+YXV0b25lZykgewogCQlzdGF0dXMgPSBwaHlfcmVhZChwaHksIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVMpOwpAQCAtNTY1LDcgKzYzNSw5IEBACiAJCQlwaHktPmR1cGxleCA9IERVUExFWF9GVUxMOwogCQllbHNlCiAJCQlwaHktPmR1cGxleCA9IERVUExFWF9IQUxGOwotCQlwaHktPnBhdXNlID0gMDsgLyogWFhYIENoZWNrIGFnYWluc3Qgc3BlYyAhICovCisJCXBtYXNrID0gTUlJX00xMDExX1BIWV9TUEVDX1NUQVRVU19UWF9QQVVTRSB8CisJCQlNSUlfTTEwMTFfUEhZX1NQRUNfU1RBVFVTX1JYX1BBVVNFOworCQlwaHktPnBhdXNlID0gKHN0YXR1cyAmIHBtYXNrKSA9PSBwbWFzazsKIAl9CiAJLyogT24gbm9uLWFuZWcsIHdlIGFzc3VtZSB3aGF0IHdlIHB1dCBpbiBCTUNSIGlzIHRoZSBzcGVlZCwKIAkgKiB0aG91Z2ggbWFnaWMtYW5lZyBzaG91bGRuJ3QgcHJldmVudCB0aGlzIGNhc2UgZnJvbSBvY2N1cnJpbmcKQEAgLTU5NSw2ICs2NjcsMTAgQEAKIAkJYWR2IHw9IEFEVkVSVElTRV8xMDBIQUxGOwogCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpCiAJCWFkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKKwlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF9QYXVzZSkKKwkJYWR2IHw9IEFEVkVSVElTRV9QQVVTRV9DQVA7CisJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfQXN5bV9QYXVzZSkKKwkJYWR2IHw9IEFEVkVSVElTRV9QQVVTRV9BU1lNOwogCXBoeV93cml0ZShwaHksIE1JSV9BRFZFUlRJU0UsIGFkdik7CiAKIAkvKiBTdGFydC9SZXN0YXJ0IGFuZWcgKi8KQEAgLTY2Niw3ICs3NDIsOCBAQAogCQkJcGh5LT5zcGVlZCA9IFNQRUVEXzEwMDsKIAkJZWxzZQogCQkJcGh5LT5zcGVlZCA9IFNQRUVEXzEwOwotCQlwaHktPnBhdXNlID0gMDsKKwkJcGh5LT5wYXVzZSA9IChwaHktPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkgJiYKKwkJCSgobHBhICYgTFBBX1BBVVNFKSAhPSAwKTsKIAl9CiAJLyogT24gbm9uLWFuZWcsIHdlIGFzc3VtZSB3aGF0IHdlIHB1dCBpbiBCTUNSIGlzIHRoZSBzcGVlZCwKIAkgKiB0aG91Z2ggbWFnaWMtYW5lZyBzaG91bGRuJ3QgcHJldmVudCB0aGlzIGNhc2UgZnJvbSBvY2N1cnJpbmcKQEAgLTY3NiwxMSArNzUzLDE5IEBACiB9CiAKIAotI2RlZmluZSBNSUlfQkFTSUNfRkVBVFVSRVMJKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwgXAotCQkJCSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwgXAotCQkJCSBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9NSUkpCi0jZGVmaW5lIE1JSV9HQklUX0ZFQVRVUkVTCShNSUlfQkFTSUNfRkVBVFVSRVMgfCBcCi0JCQkJIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCkKKyNkZWZpbmUgTUlJX0JBU0lDX0ZFQVRVUkVTIFwKKwkoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAlcCisJIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAlcCisJIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX1RQIHwgU1VQUE9SVEVEX01JSSB8CVwKKwkgU1VQUE9SVEVEX1BhdXNlKQorCisvKiBPbiBnaWdhYml0IGNhcGFibGUgUEhZcywgd2UgYWR2ZXJ0aXNlIFBhdXNlIHN1cHBvcnQgYnV0IG5vdCBhc3ltIHBhdXNlCisgKiBzdXBwb3J0IGZvciBub3cgYXMgSSdtIG5vdCBzdXJlIGl0J3Mgc3VwcG9ydGVkIGFuZCBEYXJ3aW4gZG9lc24ndCBkbworICogaXQgbmVpdGhlci4gLS1CZW5ILgorICovCisjZGVmaW5lIE1JSV9HQklUX0ZFQVRVUkVTIFwKKwkoTUlJX0JBU0lDX0ZFQVRVUkVTIHwJXAorCSBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpCiAKIC8qIEJyb2FkY29tIEJDTSA1MjAxICovCiBzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIGJjbTUyMDFfcGh5X29wcyA9IHsKQEAgLTcyMCw2ICs4MDUsMjQgQEAKIAkub3BzCQk9ICZiY201MjIxX3BoeV9vcHMKIH07CiAKKy8qIEJyb2FkY29tIEJDTSA1MjQxICovCitzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIGJjbTUyNDFfcGh5X29wcyA9IHsKKwkuc3VzcGVuZAk9IGJjbTUyNDFfc3VzcGVuZCwKKwkuaW5pdAkJPSBiY201MjQxX2luaXQsCisJLnNldHVwX2FuZWcJPSBnZW5taWlfc2V0dXBfYW5lZywKKwkuc2V0dXBfZm9yY2VkCT0gZ2VubWlpX3NldHVwX2ZvcmNlZCwKKwkucG9sbF9saW5rCT0gZ2VubWlpX3BvbGxfbGluaywKKwkucmVhZF9saW5rCT0gZ2VubWlpX3JlYWRfbGluaywKK307CitzdGF0aWMgc3RydWN0IG1paV9waHlfZGVmIGJjbTUyNDFfcGh5X2RlZiA9IHsKKwkucGh5X2lkCQk9IDB4MDE0M2JjMzAsCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiQkNNNTI0MSIsCisJLmZlYXR1cmVzCT0gTUlJX0JBU0lDX0ZFQVRVUkVTLAorCS5tYWdpY19hbmVnCT0gMSwKKwkub3BzCQk9ICZiY201MjQxX3BoeV9vcHMKK307CisKIC8qIEJyb2FkY29tIEJDTSA1NDAwICovCiBzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIGJjbTU0MDBfcGh5X29wcyA9IHsKIAkuaW5pdAkJPSBiY201NDAwX2luaXQsCkBAIC04NTQsMTEgKzk1Nyw4IEBACiAJLm9wcwkJPSAmYmNtNTQ2MlZfcGh5X29wcwogfTsKIAotLyogTWFydmVsbCA4OEUxMTAxIChBcHBsZSBzZWVtIHRvIGRlYWwgd2l0aCAyIGRpZmZlcmVudCByZXZzLAotICogSSBtYXNrZWQgb3V0IHRoZSA4IGxhc3QgYml0cyB0byBnZXQgYm90aCwgYnV0IHNvbWUgc3BlY3MKLSAqIHdvdWxkIGJlIHVzZWZ1bCBoZXJlKSAtLUJlbkguCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgbWFydmVsbF9waHlfb3BzID0geworLyogTWFydmVsbCA4OEUxMTAxIGFtZCA4OEUxMTExICovCitzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIG1hcnZlbGw4OGUxMTAxX3BoeV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBnZW5lcmljX3N1c3BlbmQsCiAJLnNldHVwX2FuZWcJPSBtYXJ2ZWxsX3NldHVwX2FuZWcsCiAJLnNldHVwX2ZvcmNlZAk9IG1hcnZlbGxfc2V0dXBfZm9yY2VkLApAQCAtODY2LDEzICs5NjYsNDEgQEAKIAkucmVhZF9saW5rCT0gbWFydmVsbF9yZWFkX2xpbmsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9kZWYgbWFydmVsbF9waHlfZGVmID0gewotCS5waHlfaWQJCT0gMHgwMTQxMGMwMCwKLQkucGh5X2lkX21hc2sJPSAweGZmZmZmZjAwLAotCS5uYW1lCQk9ICJNYXJ2ZWxsIDg4RTExMDEiLAorc3RhdGljIHN0cnVjdCBtaWlfcGh5X29wcyBtYXJ2ZWxsODhlMTExMV9waHlfb3BzID0geworCS5pbml0CQk9IG1hcnZlbGw4OGUxMTExX2luaXQsCisJLnN1c3BlbmQJPSBnZW5lcmljX3N1c3BlbmQsCisJLnNldHVwX2FuZWcJPSBtYXJ2ZWxsX3NldHVwX2FuZWcsCisJLnNldHVwX2ZvcmNlZAk9IG1hcnZlbGxfc2V0dXBfZm9yY2VkLAorCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLAorCS5yZWFkX2xpbmsJPSBtYXJ2ZWxsX3JlYWRfbGluaworfTsKKworLyogdHdvIHJldnMgaW4gZGFyd2luIGZvciB0aGUgODhlMTEwMSAuLi4gSSBjb3VsZCB1c2UgYSBkYXRhc2hlZXQKKyAqIHRvIGdldCB0aGUgcHJvcGVyIG5hbWVzLi4uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9kZWYgbWFydmVsbDg4ZTExMDF2MV9waHlfZGVmID0geworCS5waHlfaWQJCT0gMHgwMTQxMGMyMCwKKwkucGh5X2lkX21hc2sJPSAweGZmZmZmZmYwLAorCS5uYW1lCQk9ICJNYXJ2ZWxsIDg4RTExMDF2MSIsCiAJLmZlYXR1cmVzCT0gTUlJX0dCSVRfRkVBVFVSRVMsCiAJLm1hZ2ljX2FuZWcJPSAxLAotCS5vcHMJCT0gJm1hcnZlbGxfcGh5X29wcworCS5vcHMJCT0gJm1hcnZlbGw4OGUxMTAxX3BoeV9vcHMKK307CitzdGF0aWMgc3RydWN0IG1paV9waHlfZGVmIG1hcnZlbGw4OGUxMTAxdjJfcGh5X2RlZiA9IHsKKwkucGh5X2lkCQk9IDB4MDE0MTBjNjAsCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiTWFydmVsbCA4OEUxMTAxdjIiLAorCS5mZWF0dXJlcwk9IE1JSV9HQklUX0ZFQVRVUkVTLAorCS5tYWdpY19hbmVnCT0gMSwKKwkub3BzCQk9ICZtYXJ2ZWxsODhlMTEwMV9waHlfb3BzCit9Oworc3RhdGljIHN0cnVjdCBtaWlfcGh5X2RlZiBtYXJ2ZWxsODhlMTExMV9waHlfZGVmID0geworCS5waHlfaWQJCT0gMHgwMTQxMGNjMCwKKwkucGh5X2lkX21hc2sJPSAweGZmZmZmZmYwLAorCS5uYW1lCQk9ICJNYXJ2ZWxsIDg4RTExMTEiLAorCS5mZWF0dXJlcwk9IE1JSV9HQklUX0ZFQVRVUkVTLAorCS5tYWdpY19hbmVnCT0gMSwKKwkub3BzCQk9ICZtYXJ2ZWxsODhlMTExMV9waHlfb3BzCiB9OwogCiAvKiBHZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciBtb3N0IDEwLzEwMCBQSFlzICovCkBAIC04OTUsNiArMTAyMyw3IEBACiBzdGF0aWMgc3RydWN0IG1paV9waHlfZGVmKiBtaWlfcGh5X3RhYmxlW10gPSB7CiAJJmJjbTUyMDFfcGh5X2RlZiwKIAkmYmNtNTIyMV9waHlfZGVmLAorCSZiY201MjQxX3BoeV9kZWYsCiAJJmJjbTU0MDBfcGh5X2RlZiwKIAkmYmNtNTQwMV9waHlfZGVmLAogCSZiY201NDExX3BoeV9kZWYsCkBAIC05MDIsNyArMTAzMSw5IEBACiAJJmJjbTU0MjFrMl9waHlfZGVmLAogCSZiY201NDYxX3BoeV9kZWYsCiAJJmJjbTU0NjJWX3BoeV9kZWYsCi0JJm1hcnZlbGxfcGh5X2RlZiwKKwkmbWFydmVsbDg4ZTExMDF2MV9waHlfZGVmLAorCSZtYXJ2ZWxsODhlMTEwMXYyX3BoeV9kZWYsCisJJm1hcnZlbGw4OGUxMTExX3BoeV9kZWYsCiAJJmdlbm1paV9waHlfZGVmLAogCU5VTEwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmggYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmgKaW5kZXggOGVlMWNhMC4uMWQ3MGJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuaApAQCAtMzAsNyArMzAsNyBAQAogc3RydWN0IG1paV9waHkKIHsKIAlzdHJ1Y3QgbWlpX3BoeV9kZWYqCWRlZjsKLQlpbnQJCQlhZHZlcnRpc2luZzsKKwl1MzIJCQlhZHZlcnRpc2luZzsKIAlpbnQJCQltaWlfaWQ7CiAKIAkvKiAxOiBhdXRvbmVnIGVuYWJsZWQsIDA6IGRpc2FibGVkICovCkBAIC04NSw2ICs4NSw5IEBACiAjZGVmaW5lIE1JSV9CQ001MjIxX1NIRE9XX0FVWF9NT0RFNF9JRERRTU9ERQkweDAwMDEKICNkZWZpbmUgTUlJX0JDTTUyMjFfU0hET1dfQVVYX01PREU0X0NMS0xPUFdSCTB4MDAwNAogCisvKiBNSUkgQkNNNTI0MSBBZGRpdGlvbmFsIHJlZ2lzdGVycyAqLworI2RlZmluZSBNSUlfQkNNNTI0MV9TSERPV19BVVhfTU9ERTRfU1RBTkRCWVBXUgkweDAwMDgKKwogLyogTUlJIEJDTTU0MDAgMTAwMC1CQVNFVCBDb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9CQ001NDAwX0dCX0NPTlRST0wJCQkweDA5CiAjZGVmaW5lIE1JSV9CQ001NDAwX0dCX0NPTlRST0xfRlVMTERVUExFWENBUAkweDAyMDAKQEAgLTExNSw1ICsxMTgsNyBAQAogI2RlZmluZSBNSUlfTTEwMTFfUEhZX1NQRUNfU1RBVFVTX1NQRF9NQVNLCTB4YzAwMAogI2RlZmluZSBNSUlfTTEwMTFfUEhZX1NQRUNfU1RBVFVTX0ZVTExEVVBMRVgJMHgyMDAwCiAjZGVmaW5lIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVNfUkVTT0xWRUQJMHgwODAwCisjZGVmaW5lIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVNfVFhfUEFVU0UJMHgwMDA4CisjZGVmaW5lIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVNfUlhfUEFVU0UJMHgwMDA0CiAKICNlbmRpZiAvKiBfX1NVTkdFTV9QSFlfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDU3MTMyMGFlLi5mNGJmNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtNjgsOCArNjgsOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInRnMyIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy43MCIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJEZWNlbWJlciAxLCAyMDA2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNzIiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSmFudWFyeSA4LCAyMDA3IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTk1OSw2ICs5NTksMTMgQEAKIAl1MzIgcGh5X3N0YXR1czsKIAlpbnQgZXJyOwogCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CisJCXUzMiB2YWw7CisKKwkJdmFsID0gdHIzMihHUkNfTUlTQ19DRkcpOworCQl0dzMyX2YoR1JDX01JU0NfQ0ZHLCB2YWwgJiB+R1JDX01JU0NfQ0ZHX0VQSFlfSUREUSk7CisJCXVkZWxheSg0MCk7CisJfQogCWVyciAgPSB0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNU1IsICZwaHlfc3RhdHVzKTsKIAllcnIgfD0gdGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmcGh5X3N0YXR1cyk7CiAJaWYgKGVyciAhPSAwKQpAQCAtMTAwOCw3ICsxMDE1LDEyIEBACiAJZWxzZSBpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfSklUVEVSX0JVRykgewogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MGMwMCk7CiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgMHgwMDBhKTsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDAxMGIpOworCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfQURKVVNUX1RSSU0pIHsKKwkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgMHgxMTBiKTsKKwkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19URVNUMSwKKwkJCQkgICAgIE1JSV9URzNfVEVTVDFfVFJJTV9FTiB8IDB4NCk7CisJCX0gZWxzZQorCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCAweDAxMGIpOwogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MDQwMCk7CiAJfQogCS8qIFNldCBFeHRlbmRlZCBwYWNrZXQgbGVuZ3RoIGJpdCAoYml0IDE0KSBvbiBhbGwgY2hpcHMgdGhhdCAqLwpAQCAtMTE3MCw3ICsxMTgyLDE1IEBACiAJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykKIAkJcmV0dXJuOwogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81OTA2KSB7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CisJCXUzMiB2YWw7CisKKwkJdGczX2JtY3JfcmVzZXQodHApOworCQl2YWwgPSB0cjMyKEdSQ19NSVNDX0NGRyk7CisJCXR3MzJfZihHUkNfTUlTQ19DRkcsIHZhbCB8IEdSQ19NSVNDX0NGR19FUEhZX0lERFEpOworCQl1ZGVsYXkoNDApOworCQlyZXR1cm47CisJfSBlbHNlIHsKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0VYVF9DVFJMLAogCQkJICAgICBNSUlfVEczX0VYVF9DVFJMX0ZPUkNFX0xFRF9PRkYpOwogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MDFiMik7CkBAIC00NDI2LDcgKzQ0NDYsNyBAQAogICovCiBzdGF0aWMgaW50IHRnM19hbGxvY19jb25zaXN0ZW50KHN0cnVjdCB0ZzMgKnRwKQogewotCXRwLT5yeF9zdGRfYnVmZmVycyA9IGttYWxsb2MoKHNpemVvZihzdHJ1Y3QgcmluZ19pbmZvKSAqCisJdHAtPnJ4X3N0ZF9idWZmZXJzID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCByaW5nX2luZm8pICoKIAkJCQkgICAgICAoVEczX1JYX1JJTkdfU0laRSArCiAJCQkJICAgICAgIFRHM19SWF9KVU1CT19SSU5HX1NJWkUpKSArCiAJCQkJICAgICAoc2l6ZW9mKHN0cnVjdCB0eF9yaW5nX2luZm8pICoKQEAgLTQ0MzUsMTMgKzQ0NTUsNiBAQAogCWlmICghdHAtPnJ4X3N0ZF9idWZmZXJzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldCh0cC0+cnhfc3RkX2J1ZmZlcnMsIDAsCi0JICAgICAgIChzaXplb2Yoc3RydWN0IHJpbmdfaW5mbykgKgotCQkoVEczX1JYX1JJTkdfU0laRSArCi0JCSBURzNfUlhfSlVNQk9fUklOR19TSVpFKSkgKwotCSAgICAgICAoc2l6ZW9mKHN0cnVjdCB0eF9yaW5nX2luZm8pICoKLQkJVEczX1RYX1JJTkdfU0laRSkpOwotCiAJdHAtPnJ4X2p1bWJvX2J1ZmZlcnMgPSAmdHAtPnJ4X3N0ZF9idWZmZXJzW1RHM19SWF9SSU5HX1NJWkVdOwogCXRwLT50eF9idWZmZXJzID0gKHN0cnVjdCB0eF9yaW5nX2luZm8gKikKIAkJJnRwLT5yeF9qdW1ib19idWZmZXJzW1RHM19SWF9KVU1CT19SSU5HX1NJWkVdOwpAQCAtNjk4OCw2ICs3MDAxLDggQEAKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVycjsKIAorCW5ldGlmX2NhcnJpZXJfb2ZmKHRwLT5kZXYpOworCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKIAllcnIgPSB0ZzNfc2V0X3Bvd2VyX3N0YXRlKHRwLCBQQ0lfRDApOwpAQCAtNzk4MSw2ICs3OTk2LDEwIEBACiAJCXRwLT5saW5rX2NvbmZpZy5kdXBsZXggPSBjbWQtPmR1cGxleDsKICAgCX0KIAorCXRwLT5saW5rX2NvbmZpZy5vcmlnX3NwZWVkID0gdHAtPmxpbmtfY29uZmlnLnNwZWVkOworCXRwLT5saW5rX2NvbmZpZy5vcmlnX2R1cGxleCA9IHRwLT5saW5rX2NvbmZpZy5kdXBsZXg7CisJdHAtPmxpbmtfY29uZmlnLm9yaWdfYXV0b25lZyA9IHRwLT5saW5rX2NvbmZpZy5hdXRvbmVnOworCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJdGczX3NldHVwX3BoeSh0cCwgMSk7CiAKQEAgLTEwNzg5LDkgKzEwODA4LDExIEBACiAKIAlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHsKIAkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1IHx8Ci0JCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NykKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3KSB7CiAJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QSFlfSklUVEVSX0JVRzsKLQkJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU5MDYpCisJCQlpZiAodHAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU1TSkKKwkJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QSFlfQURKVVNUX1RSSU07CisJCX0gZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU5MDYpCiAJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QSFlfQkVSX0JVRzsKIAl9CiAKQEAgLTExOTIzLDYgKzExOTQ0LDggQEAKIAkgKi8KIAlwY2lfc2F2ZV9zdGF0ZSh0cC0+cGRldik7CiAKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsICIKQEAgLTExOTMwLDggKzExOTUzLDYgQEAKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJfQogCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0KIAlwcmludGsoS0VSTl9JTkZPICIlczogVGlnb24zIFtwYXJ0bm8oJXMpIHJldiAlMDR4IFBIWSglcyldICglcykgJXMgRXRoZXJuZXQgIiwKIAkgICAgICAgZGV2LT5uYW1lLAogCSAgICAgICB0cC0+Ym9hcmRfcGFydF9udW1iZXIsCkBAIC0xMTk2Miw4ICsxMTk4Myw2IEBACiAJICAgICAgIChwZGV2LT5kbWFfbWFzayA9PSBETUFfMzJCSVRfTUFTSykgPyAzMiA6CiAJICAgICAgICAoKCh1NjQpIHBkZXYtPmRtYV9tYXNrID09IERNQV80MEJJVF9NQVNLKSA/IDQwIDogNjQpKTsKIAotCW5ldGlmX2NhcnJpZXJfb2ZmKHRwLT5kZXYpOwotCiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfaW91bm1hcDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggZGZhZjRlZC4uODBmNTlhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTEzNTAsNiArMTM1MCw3IEBACiAjZGVmaW5lICBHUkNfTUlTQ19DRkdfQk9BUkRfSURfNTc4OAkweDAwMDEwMDAwCiAjZGVmaW5lICBHUkNfTUlTQ19DRkdfQk9BUkRfSURfNTc4OE0JMHgwMDAxODAwMAogI2RlZmluZSAgR1JDX01JU0NfQ0ZHX0JPQVJEX0lEX0FDOTEwMDJBMSAweDAwMDE4MDAwCisjZGVmaW5lICBHUkNfTUlTQ19DRkdfRVBIWV9JRERRCQkweDAwMjAwMDAwCiAjZGVmaW5lICBHUkNfTUlTQ19DRkdfS0VFUF9HUEhZX1BPV0VSCTB4MDQwMDAwMDAKICNkZWZpbmUgR1JDX0xPQ0FMX0NUUkwJCQkweDAwMDA2ODA4CiAjZGVmaW5lICBHUkNfTENMQ1RSTF9JTlRfQUNUSVZFCQkweDAwMDAwMDAxCkBAIC0xNjU3LDYgKzE2NTgsOSBAQAogI2RlZmluZSBNSUlfVEczX0VQSFlfVEVTVAkJMHgxZiAvKiA1OTA2IFBIWSByZWdpc3RlciAqLwogI2RlZmluZSBNSUlfVEczX0VQSFlfU0hBRE9XX0VOCQkweDgwCiAKKyNkZWZpbmUgTUlJX1RHM19URVNUMQkJCTB4MWUKKyNkZWZpbmUgTUlJX1RHM19URVNUMV9UUklNX0VOCQkweDAwMTAKKwogLyogVGhlcmUgYXJlIHR3byB3YXlzIHRvIG1hbmFnZSB0aGUgVFggZGVzY3JpcHRvcnMgb24gdGhlIHRpZ29uMy4KICAqIEVpdGhlciB0aGUgZGVzY3JpcHRvcnMgYXJlIGluIGhvc3QgRE1BJ2FibGUgbWVtb3J5LCBvciB0aGV5CiAgKiBleGlzdCBvbmx5IGluIHRoZSBjYXJkcyBvbi1jaGlwIFNSQU0uICBBbGwgMTYgc2VuZCBiZHMgYXJlIHVuZGVyCkBAIC0yMjU1LDYgKzIyNTksNyBAQAogI2RlZmluZSBURzNfRkxHMl8xU0hPVF9NU0kJCTB4MTAwMDAwMDAKICNkZWZpbmUgVEczX0ZMRzJfUEhZX0pJVFRFUl9CVUcJCTB4MjAwMDAwMDAKICNkZWZpbmUgVEczX0ZMRzJfTk9fRldBUkVfUkVQT1JURUQJMHg0MDAwMDAwMAorI2RlZmluZSBURzNfRkxHMl9QSFlfQURKVVNUX1RSSU0JMHg4MDAwMDAwMAogCiAJdTMyCQkJCXNwbGl0X21vZGVfbWF4X3JlcXM7CiAjZGVmaW5lIFNQTElUX01PREVfNTcwNF9NQVhfUkVRCQkzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCAxZjA1NTExLi43ZTRiMjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGFzbS9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xOTQsOSArMTk1LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUodWdldGhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1Z2V0aF9sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGRfdGFpbChub2RlLCBsaCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1Z2V0aF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWdldGhfbG9jaywgZmxhZ3MpOwogfQogI2VuZGlmIC8qIENPTkZJR19VR0VUSF9GSUxURVJJTkcgKi8KIApAQCAtMjA0LDE0ICsyMDUsMTQgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUodWdldGhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1Z2V0aF9sb2NrLCBmbGFncyk7CiAJaWYgKCFsaXN0X2VtcHR5KGxoKSkgewogCQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlID0gbGgtPm5leHQ7CiAJCWxpc3RfZGVsKG5vZGUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVnZXRoX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWdldGhfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gbm9kZTsKIAl9IGVsc2UgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVnZXRoX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWdldGhfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiB9CkBAIC00NzIsNyArNDczLDcgQEAKIAlrZnJlZShlbmV0X2FkZHJfY29udCk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X21hY19hZGRyKF9fYmUxNiBfX2lvbWVtICpyZWcsIHU4ICptYWMpCitzdGF0aWMgdm9pZCBzZXRfbWFjX2FkZHIoX19iZTE2IF9faW9tZW0gKnJlZywgdTggKm1hYykKIHsKIAlvdXRfYmUxNigmcmVnWzBdLCAoKHUxNiltYWNbNV0gPDwgOCkgfCBtYWNbNF0pOwogCW91dF9iZTE2KCZyZWdbMV0sICgodTE2KW1hY1szXSA8PCA4KSB8IG1hY1syXSk7CkBAIC0xODUyLDYgKzE4NTMsOCBAQAogCW1paV9pbmZvLT5tZGlvX3JlYWQgPSAmcmVhZF9waHlfcmVnOwogCW1paV9pbmZvLT5tZGlvX3dyaXRlID0gJndyaXRlX3BoeV9yZWc7CiAKKwlzcGluX2xvY2tfaW5pdCgmbWlpX2luZm8tPm1kaW9fbG9jayk7CisKIAl1Z2V0aC0+bWlpX2luZm8gPSBtaWlfaW5mbzsKIAogCXNwaW5fbG9ja19pcnEoJnVnZXRoLT5sb2NrKTsKQEAgLTM5MTgsMTAgKzM5MjEsMTEgQEAKIH0KIAogLyogU2NoZWR1bGVkIGJ5IHRoZSBwaHlfaW50ZXJydXB0L3RpbWVyIHRvIGhhbmRsZSBQSFkgY2hhbmdlcyAqLwotc3RhdGljIHZvaWQgdWdldGhfcGh5X2NoYW5nZSh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgdWdldGhfcGh5X2NoYW5nZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7Ci0Jc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVjY19nZXRoX3ByaXZhdGUsIHRxKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdWdldGgtPmRldjsKIAlzdHJ1Y3QgdWNjX2dldGggKnVnX3JlZ3M7CiAJaW50IHJlc3VsdCA9IDA7CiAKQEAgLTQwNzgsNyArNDA4Miw3IEBACiAjZW5kaWYJCQkJLyogQ09ORklHX1VHRVRIX05BUEkgKi8KIAogCS8qIFNldCB1cCB0aGUgUEhZIGNoYW5nZSB3b3JrIHF1ZXVlICovCi0JSU5JVF9XT1JLKCZ1Z2V0aC0+dHEsIHVnZXRoX3BoeV9jaGFuZ2UsIGRldik7CisJSU5JVF9XT1JLKCZ1Z2V0aC0+dHEsIHVnZXRoX3BoeV9jaGFuZ2UpOwogCiAJaW5pdF90aW1lcigmdWdldGgtPnBoeV9pbmZvX3RpbWVyKTsKIAl1Z2V0aC0+cGh5X2luZm9fdGltZXIuZnVuY3Rpb24gPSAmdWdldGhfcGh5X3N0YXJ0dXBfdGltZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9waHkuYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX3BoeS5jCmluZGV4IDUzNjBlYzAuLjNjODY1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX3BoeS5jCkBAIC02OCw4ICs2OCwzMSBAQAogc3RhdGljIGludCBnZW5taWlfY29uZmlnX2FuZWcoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbyk7CiBzdGF0aWMgaW50IGdlbm1paV91cGRhdGVfbGluayhzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKTsKIHN0YXRpYyBpbnQgZ2VubWlpX3JlYWRfc3RhdHVzKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pOwotdTE2IHBoeV9yZWFkKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8sIHUxNiByZWdudW0pOwotdm9pZCBwaHlfd3JpdGUoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbywgdTE2IHJlZ251bSwgdTE2IHZhbCk7CisKK3N0YXRpYyB1MTYgdWNjX2dldGhfcGh5X3JlYWQoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbywgdTE2IHJlZ251bSkKK3sKKwl1MTYgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1paV9pbmZvLT5tZGlvX2xvY2ssIGZsYWdzKTsKKwlyZXR2YWwgPSBtaWlfaW5mby0+bWRpb19yZWFkKG1paV9pbmZvLT5kZXYsIG1paV9pbmZvLT5taWlfaWQsIHJlZ251bSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWlpX2luZm8tPm1kaW9fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgdWNjX2dldGhfcGh5X3dyaXRlKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8sIHUxNiByZWdudW0sIHUxNiB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWlpX2luZm8tPm1kaW9fbG9jaywgZmxhZ3MpOworCW1paV9pbmZvLT5tZGlvX3dyaXRlKG1paV9pbmZvLT5kZXYsIG1paV9pbmZvLT5taWlfaWQsIHJlZ251bSwgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaWlfaW5mby0+bWRpb19sb2NrLCBmbGFncyk7Cit9CiAKIC8qIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgZm9yIHRoaXMgZGV2aWNlIHRvIHRoZSByZWdpc3RlciBhdCByZWdudW0sICovCiAvKiB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcyBkb25lIGJlZm9yZSBpdCByZXR1cm5zLiAgQWxsIFBIWSAqLwpAQCAtMTg0LDcgKzIwNyw3IEBACiAJYWR2ZXJ0aXNlID0gbWlpX2luZm8tPmFkdmVydGlzaW5nOwogCiAJLyogU2V0dXAgc3RhbmRhcmQgYWR2ZXJ0aXNlbWVudCAqLwotCWFkdiA9IHBoeV9yZWFkKG1paV9pbmZvLCBNSUlfQURWRVJUSVNFKTsKKwlhZHYgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0FEVkVSVElTRSk7CiAJYWR2ICY9IH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCk7CiAJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKQogCQlhZHYgfD0gQURWRVJUSVNFXzEwSEFMRjsKQEAgLTE5NCw3ICsyMTcsNyBAQAogCQlhZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7CiAJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKIAkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOwotCXBoeV93cml0ZShtaWlfaW5mbywgTUlJX0FEVkVSVElTRSwgYWR2KTsKKwl1Y2NfZ2V0aF9waHlfd3JpdGUobWlpX2luZm8sIE1JSV9BRFZFUlRJU0UsIGFkdik7CiB9CiAKIHN0YXRpYyB2b2lkIGdlbm1paV9zZXR1cF9mb3JjZWQoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKQEAgLTIwNCw3ICsyMjcsNyBAQAogCiAJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKIAotCWN0cmwgPSBwaHlfcmVhZChtaWlfaW5mbywgTUlJX0JNQ1IpOworCWN0cmwgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0JNQ1IpOwogCiAJY3RybCAmPQogCSAgICB+KEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwIHwgQk1DUl9TUEVFRDEwMDAgfCBCTUNSX0FORU5BQkxFKTsKQEAgLTIzNCw3ICsyNTcsNyBAQAogCQlicmVhazsKIAl9CiAKLQlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9CTUNSLCBjdHJsKTsKKwl1Y2NfZ2V0aF9waHlfd3JpdGUobWlpX2luZm8sIE1JSV9CTUNSLCBjdHJsKTsKIH0KIAogLyogRW5hYmxlIGFuZCBSZXN0YXJ0IEF1dG9uZWdvdGlhdGlvbiAqLwpAQCAtMjQ0LDkgKzI2Nyw5IEBACiAKIAl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwogCi0JY3RsID0gcGh5X3JlYWQobWlpX2luZm8sIE1JSV9CTUNSKTsKKwljdGwgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0JNQ1IpOwogCWN0bCB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKLQlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9CTUNSLCBjdGwpOworCXVjY19nZXRoX3BoeV93cml0ZShtaWlfaW5mbywgTUlJX0JNQ1IsIGN0bCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2JpdF9jb25maWdfYW5lZyhzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKQpAQCAtMjYxLDE0ICsyODQsMTQgQEAKIAkJY29uZmlnX2dlbm1paV9hZHZlcnQobWlpX2luZm8pOwogCQlhZHZlcnRpc2UgPSBtaWlfaW5mby0+YWR2ZXJ0aXNpbmc7CiAKLQkJYWR2ID0gcGh5X3JlYWQobWlpX2luZm8sIE1JSV8xMDAwQkFTRVRDT05UUk9MKTsKKwkJYWR2ID0gdWNjX2dldGhfcGh5X3JlYWQobWlpX2luZm8sIE1JSV8xMDAwQkFTRVRDT05UUk9MKTsKIAkJYWR2ICY9IH4oTUlJXzEwMDBCQVNFVENPTlRST0xfRlVMTERVUExFWENBUCB8CiAJCQkgTUlJXzEwMDBCQVNFVENPTlRST0xfSEFMRkRVUExFWENBUCk7CiAJCWlmIChhZHZlcnRpc2UgJiBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYpCiAJCQlhZHYgfD0gTUlJXzEwMDBCQVNFVENPTlRST0xfSEFMRkRVUExFWENBUDsKIAkJaWYgKGFkdmVydGlzZSAmIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCkKIAkJCWFkdiB8PSBNSUlfMTAwMEJBU0VUQ09OVFJPTF9GVUxMRFVQTEVYQ0FQOwotCQlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV8xMDAwQkFTRVRDT05UUk9MLCBhZHYpOworCQl1Y2NfZ2V0aF9waHlfd3JpdGUobWlpX2luZm8sIE1JSV8xMDAwQkFTRVRDT05UUk9MLCBhZHYpOwogCiAJCS8qIFN0YXJ0L1Jlc3RhcnQgYW5lZyAqLwogCQlnZW5taWlfcmVzdGFydF9hbmVnKG1paV9pbmZvKTsKQEAgLTI5OCwxMCArMzIxLDEwIEBACiAJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKIAogCS8qIERvIGEgZmFrZSByZWFkICovCi0JcGh5X3JlYWQobWlpX2luZm8sIE1JSV9CTVNSKTsKKwl1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0JNU1IpOwogCiAJLyogUmVhZCBsaW5rIGFuZCBhdXRvbmVnb3RpYXRpb24gc3RhdHVzICovCi0Jc3RhdHVzID0gcGh5X3JlYWQobWlpX2luZm8sIE1JSV9CTVNSKTsKKwlzdGF0dXMgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0JNU1IpOwogCWlmICgoc3RhdHVzICYgQk1TUl9MU1RBVFVTKSA9PSAwKQogCQltaWlfaW5mby0+bGluayA9IDA7CiAJZWxzZQpAQCAtMzI5LDcgKzM1Miw3IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAobWlpX2luZm8tPmF1dG9uZWcpIHsKLQkJc3RhdHVzID0gcGh5X3JlYWQobWlpX2luZm8sIE1JSV9MUEEpOworCQlzdGF0dXMgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0xQQSk7CiAKIAkJaWYgKHN0YXR1cyAmIChMUEFfMTBGVUxMIHwgTFBBXzEwMEZVTEwpKQogCQkJbWlpX2luZm8tPmR1cGxleCA9IERVUExFWF9GVUxMOwpAQCAtMzUyLDkgKzM3NSw5IEBACiB7CiAJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKIAotCXBoeV93cml0ZShtaWlfaW5mbywgMHgxNCwgMHgwY2QyKTsKLQlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9CTUNSLAotCQkgIHBoeV9yZWFkKG1paV9pbmZvLCBNSUlfQk1DUikgfCBCTUNSX1JFU0VUKTsKKwl1Y2NfZ2V0aF9waHlfd3JpdGUobWlpX2luZm8sIDB4MTQsIDB4MGNkMik7CisJdWNjX2dldGhfcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQk1DUiwKKwkJICB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0JNQ1IpIHwgQk1DUl9SRVNFVCk7CiAJbXNsZWVwKDQwMDApOwogCiAJcmV0dXJuIDA7CkBAIC0zNjcsMTMgKzM5MCwxMyBAQAogCS8qIFRoZSBNYXJ2ZWxsIFBIWSBoYXMgYW4gZXJyYXRhIHdoaWNoIHJlcXVpcmVzCiAJICogdGhhdCBjZXJ0YWluIHJlZ2lzdGVycyBnZXQgd3JpdHRlbiBpbiBvcmRlcgogCSAqIHRvIHJlc3RhcnQgYXV0b25lZ290aWF0aW9uICovCi0JcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CisJdWNjX2dldGhfcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CiAKLQlwaHlfd3JpdGUobWlpX2luZm8sIDB4MWQsIDB4MWYpOwotCXBoeV93cml0ZShtaWlfaW5mbywgMHgxZSwgMHgyMDBjKTsKLQlwaHlfd3JpdGUobWlpX2luZm8sIDB4MWQsIDB4NSk7Ci0JcGh5X3dyaXRlKG1paV9pbmZvLCAweDFlLCAwKTsKLQlwaHlfd3JpdGUobWlpX2luZm8sIDB4MWUsIDB4MTAwKTsKKwl1Y2NfZ2V0aF9waHlfd3JpdGUobWlpX2luZm8sIDB4MWQsIDB4MWYpOworCXVjY19nZXRoX3BoeV93cml0ZShtaWlfaW5mbywgMHgxZSwgMHgyMDBjKTsKKwl1Y2NfZ2V0aF9waHlfd3JpdGUobWlpX2luZm8sIDB4MWQsIDB4NSk7CisJdWNjX2dldGhfcGh5X3dyaXRlKG1paV9pbmZvLCAweDFlLCAwKTsKKwl1Y2NfZ2V0aF9waHlfd3JpdGUobWlpX2luZm8sIDB4MWUsIDB4MTAwKTsKIAogCWdiaXRfY29uZmlnX2FuZWcobWlpX2luZm8pOwogCkBAIC0zOTgsNyArNDIxLDcgQEAKIAkgKiBhcmUgYXMgc2V0ICovCiAJaWYgKG1paV9pbmZvLT5hdXRvbmVnICYmIG1paV9pbmZvLT5saW5rKSB7CiAJCWludCBzcGVlZDsKLQkJc3RhdHVzID0gcGh5X3JlYWQobWlpX2luZm8sIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVMpOworCQlzdGF0dXMgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX00xMDExX1BIWV9TUEVDX1NUQVRVUyk7CiAKIAkJLyogR2V0IHRoZSBkdXBsZXhpdHkgKi8KIAkJaWYgKHN0YXR1cyAmIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVNfRlVMTERVUExFWCkKQEAgLTQzMCw3ICs0NTMsNyBAQAogCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBDbGVhciB0aGUgaW50ZXJydXB0cyBieSByZWFkaW5nIHRoZSByZWcgKi8KLQlwaHlfcmVhZChtaWlfaW5mbywgTUlJX00xMDExX0lFVkVOVCk7CisJdWNjX2dldGhfcGh5X3JlYWQobWlpX2luZm8sIE1JSV9NMTAxMV9JRVZFTlQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDAsOSArNDYzLDkgQEAKIAl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwogCiAJaWYgKG1paV9pbmZvLT5pbnRlcnJ1cHRzID09IE1JSV9JTlRFUlJVUFRfRU5BQkxFRCkKLQkJcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfTTEwMTFfSU1BU0ssIE1JSV9NMTAxMV9JTUFTS19JTklUKTsKKwkJdWNjX2dldGhfcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfTTEwMTFfSU1BU0ssIE1JSV9NMTAxMV9JTUFTS19JTklUKTsKIAllbHNlCi0JCXBoeV93cml0ZShtaWlfaW5mbywgTUlJX00xMDExX0lNQVNLLCBNSUlfTTEwMTFfSU1BU0tfQ0xFQVIpOworCQl1Y2NfZ2V0aF9waHlfd3JpdGUobWlpX2luZm8sIE1JSV9NMTAxMV9JTUFTSywgTUlJX00xMDExX0lNQVNLX0NMRUFSKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDUxLDkgKzQ3NCw5IEBACiB7CiAJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKIAotCXBoeV93cml0ZShtaWlfaW5mbywgTUlJX0NJUzgyMDFfQVVYX0NPTlNUQVQsCisJdWNjX2dldGhfcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQ0lTODIwMV9BVVhfQ09OU1RBVCwKIAkJICBNSUlfQ0lTODIwMV9BVVhDT05TVEFUX0lOSVQpOwotCXBoeV93cml0ZShtaWlfaW5mbywgTUlJX0NJUzgyMDFfRVhUX0NPTjEsIE1JSV9DSVM4MjAxX0VYVENPTjFfSU5JVCk7CisJdWNjX2dldGhfcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQ0lTODIwMV9FWFRfQ09OMSwgTUlJX0NJUzgyMDFfRVhUQ09OMV9JTklUKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDc3LDcgKzUwMCw3IEBACiAJaWYgKG1paV9pbmZvLT5hdXRvbmVnICYmIG1paV9pbmZvLT5saW5rKSB7CiAJCWludCBzcGVlZDsKIAotCQlzdGF0dXMgPSBwaHlfcmVhZChtaWlfaW5mbywgTUlJX0NJUzgyMDFfQVVYX0NPTlNUQVQpOworCQlzdGF0dXMgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0NJUzgyMDFfQVVYX0NPTlNUQVQpOwogCQlpZiAoc3RhdHVzICYgTUlJX0NJUzgyMDFfQVVYQ09OU1RBVF9EVVBMRVgpCiAJCQltaWlfaW5mby0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCWVsc2UKQEAgLTUwNSw3ICs1MjgsNyBAQAogewogCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlwaHlfcmVhZChtaWlfaW5mbywgTUlJX0NJUzgyMDFfSVNUQVQpOworCXVjY19nZXRoX3BoeV9yZWFkKG1paV9pbmZvLCBNSUlfQ0lTODIwMV9JU1RBVCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNSw5ICs1MzgsOSBAQAogCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlpZiAobWlpX2luZm8tPmludGVycnVwdHMgPT0gTUlJX0lOVEVSUlVQVF9FTkFCTEVEKQotCQlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9DSVM4MjAxX0lNQVNLLCBNSUlfQ0lTODIwMV9JTUFTS19NQVNLKTsKKwkJdWNjX2dldGhfcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQ0lTODIwMV9JTUFTSywgTUlJX0NJUzgyMDFfSU1BU0tfTUFTSyk7CiAJZWxzZQotCQlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9DSVM4MjAxX0lNQVNLLCAwKTsKKwkJdWNjX2dldGhfcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQ0lTODIwMV9JTUFTSywgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU0MSw3ICs1NjQsNyBAQAogCS8qIElmIHdlIGFyZW4ndCBhdXRvbmVnb3RpYXRpbmcsIGFzc3VtZSBzcGVlZHMKIAkgKiBhcmUgYXMgc2V0ICovCiAJaWYgKG1paV9pbmZvLT5hdXRvbmVnICYmIG1paV9pbmZvLT5saW5rKSB7Ci0JCXN0YXR1cyA9IHBoeV9yZWFkKG1paV9pbmZvLCBNSUlfRE05MTYxX1NDU1IpOworCQlzdGF0dXMgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0RNOTE2MV9TQ1NSKTsKIAkJaWYgKHN0YXR1cyAmIChNSUlfRE05MTYxX1NDU1JfMTAwRiB8IE1JSV9ETTkxNjFfU0NTUl8xMDBIKSkKIAkJCW1paV9pbmZvLT5zcGVlZCA9IFNQRUVEXzEwMDsKIAkJZWxzZQpAQCAtNTcyLDcgKzU5NSw3IEBACiB7CiAJc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbyA9IChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKilkYXRhOwogCXN0cnVjdCBkbTkxNjFfcHJpdmF0ZSAqcHJpdiA9IG1paV9pbmZvLT5wcml2OwotCXUxNiBzdGF0dXMgPSBwaHlfcmVhZChtaWlfaW5mbywgTUlJX0JNU1IpOworCXUxNiBzdGF0dXMgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0JNU1IpOwogCiAJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKIApAQCAtNTk5LDExICs2MjIsMTEgQEAKIAkvKiBSZXNldCBpcyBub3QgZG9uZSB5ZXQgKi8KIAlwcml2LT5yZXNldGRvbmUgPSAwOwogCi0JcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQk1DUiwKLQkJICBwaHlfcmVhZChtaWlfaW5mbywgTUlJX0JNQ1IpIHwgQk1DUl9SRVNFVCk7CisJdWNjX2dldGhfcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQk1DUiwKKwkJICB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0JNQ1IpIHwgQk1DUl9SRVNFVCk7CiAKLQlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9CTUNSLAotCQkgIHBoeV9yZWFkKG1paV9pbmZvLCBNSUlfQk1DUikgJiB+Qk1DUl9JU09MQVRFKTsKKwl1Y2NfZ2V0aF9waHlfd3JpdGUobWlpX2luZm8sIE1JSV9CTUNSLAorCQkgIHVjY19nZXRoX3BoeV9yZWFkKG1paV9pbmZvLCBNSUlfQk1DUikgJiB+Qk1DUl9JU09MQVRFKTsKIAogCWNvbmZpZ19nZW5taWlfYWR2ZXJ0KG1paV9pbmZvKTsKIAkvKiBTdGFydC9SZXN0YXJ0IGFuZWcgKi8KQEAgLTYzNCw3ICs2NTcsNyBAQAogCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBDbGVhciB0aGUgaW50ZXJydXB0cyBieSByZWFkaW5nIHRoZSByZWcgKi8KLQlwaHlfcmVhZChtaWlfaW5mbywgTUlJX0RNOTE2MV9JTlRSKTsKKwl1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX0RNOTE2MV9JTlRSKTsKIAogCiAJcmV0dXJuIDA7CkBAIC02NDUsOSArNjY4LDkgQEAKIAl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwogCiAJaWYgKG1paV9pbmZvLT5pbnRlcnJ1cHRzID09IE1JSV9JTlRFUlJVUFRfRU5BQkxFRCkKLQkJcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfRE05MTYxX0lOVFIsIE1JSV9ETTkxNjFfSU5UUl9JTklUKTsKKwkJdWNjX2dldGhfcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfRE05MTYxX0lOVFIsIE1JSV9ETTkxNjFfSU5UUl9JTklUKTsKIAllbHNlCi0JCXBoeV93cml0ZShtaWlfaW5mbywgTUlJX0RNOTE2MV9JTlRSLCBNSUlfRE05MTYxX0lOVFJfU1RPUCk7CisJCXVjY19nZXRoX3BoeV93cml0ZShtaWlfaW5mbywgTUlJX0RNOTE2MV9JTlRSLCBNSUlfRE05MTYxX0lOVFJfU1RPUCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcxOCwzMSArNzQxLDYgQEAKIAlOVUxMCiB9OwogCi11MTYgcGh5X3JlYWQoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbywgdTE2IHJlZ251bSkKLXsKLQl1MTYgcmV0dmFsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1paV9pbmZvLT5tZGlvX2xvY2ssIGZsYWdzKTsKLQlyZXR2YWwgPSBtaWlfaW5mby0+bWRpb19yZWFkKG1paV9pbmZvLT5kZXYsIG1paV9pbmZvLT5taWlfaWQsIHJlZ251bSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWlpX2luZm8tPm1kaW9fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotdm9pZCBwaHlfd3JpdGUoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbywgdTE2IHJlZ251bSwgdTE2IHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtaWlfaW5mby0+bWRpb19sb2NrLCBmbGFncyk7Ci0JbWlpX2luZm8tPm1kaW9fd3JpdGUobWlpX2luZm8tPmRldiwgbWlpX2luZm8tPm1paV9pZCwgcmVnbnVtLCB2YWwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1paV9pbmZvLT5tZGlvX2xvY2ssIGZsYWdzKTsKLX0KLQogLyogVXNlIHRoZSBQSFkgSUQgcmVnaXN0ZXJzIHRvIGRldGVybWluZSB3aGF0IHR5cGUgb2YgUEhZIGlzIGF0dGFjaGVkCiAgKiB0byBkZXZpY2UgZGV2LiAgcmV0dXJuIGEgc3RydWN0IHBoeV9pbmZvIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoYXQgUEhZCiAgKi8KQEAgLTc1NywxMSArNzU1LDExIEBACiAJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKIAogCS8qIEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjEsIGFuZCBwdXQgdGhlbSBpbiB0aGUgdXBwZXIgaGFsZiAqLwotCXBoeV9yZWcgPSBwaHlfcmVhZChtaWlfaW5mbywgTUlJX1BIWVNJRDEpOworCXBoeV9yZWcgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX1BIWVNJRDEpOwogCXBoeV9JRCA9IChwaHlfcmVnICYgMHhmZmZmKSA8PCAxNjsKIAogCS8qIEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjIsIGFuZCBwdXQgdGhlbSBpbiB0aGUgbG93ZXIgaGFsZiAqLwotCXBoeV9yZWcgPSBwaHlfcmVhZChtaWlfaW5mbywgTUlJX1BIWVNJRDIpOworCXBoeV9yZWcgPSB1Y2NfZ2V0aF9waHlfcmVhZChtaWlfaW5mbywgTUlJX1BIWVNJRDIpOwogCXBoeV9JRCB8PSAocGh5X3JlZyAmIDB4ZmZmZik7CiAKIAkvKiBsb29wIHRocm91Z2ggYWxsIHRoZSBrbm93biBQSFkgdHlwZXMsIGFuZCBmaW5kIG9uZSB0aGF0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IDc0Zjg5NDcuLjhlNWQ4MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC0yNjUsMTUgKzI2NSwxOSBAQAogc3RhdGljIGludCB2ZWxvY2l0eV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogc3RhdGljIGludCB2ZWxvY2l0eV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZlbG9jaXR5X2Rldl9saXN0X2xvY2spOworc3RhdGljIExJU1RfSEVBRCh2ZWxvY2l0eV9kZXZfbGlzdCk7CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX0lORVQpCisKIHN0YXRpYyBpbnQgdmVsb2NpdHlfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbm90aWZpY2F0aW9uLCB2b2lkICpwdHIpOwogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHZlbG9jaXR5X2luZXRhZGRyX25vdGlmaWVyID0gewogICAgICAgLm5vdGlmaWVyX2NhbGwJPSB2ZWxvY2l0eV9uZXRkZXZfZXZlbnQsCiB9OwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZlbG9jaXR5X2Rldl9saXN0X2xvY2spOwotc3RhdGljIExJU1RfSEVBRCh2ZWxvY2l0eV9kZXZfbGlzdCk7Ci0KIHN0YXRpYyB2b2lkIHZlbG9jaXR5X3JlZ2lzdGVyX25vdGlmaWVyKHZvaWQpCiB7CiAJcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnZlbG9jaXR5X2luZXRhZGRyX25vdGlmaWVyKTsKQEAgLTI4NCwxMiArMjg4LDEyIEBACiAJdW5yZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmdmVsb2NpdHlfaW5ldGFkZHJfbm90aWZpZXIpOwogfQogCi0jZWxzZQkJCQkvKiBDT05GSUdfUE0gKi8KKyNlbHNlCiAKICNkZWZpbmUgdmVsb2NpdHlfcmVnaXN0ZXJfbm90aWZpZXIoKQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgdmVsb2NpdHlfdW5yZWdpc3Rlcl9ub3RpZmllcigpCWRvIHt9IHdoaWxlICgwKQogCi0jZW5kaWYJCQkJLyogIUNPTkZJR19QTSAqLworI2VuZGlmCiAKIC8qCiAgKglJbnRlcm5hbCBib2FyZCB2YXJpYW50cy4gQXQgdGhlIG1vbWVudCB3ZSBoYXZlIG9ubHkgb25lCkBAIC0zMTMyLDcgKzMxMzYsNyBAQAogCX0KIAkvKglGaW5hbGx5LCBpbnZlcnQgdGhlIHJlc3VsdCBvbmNlIHRvIGdldCB0aGUgY29ycmVjdCBkYXRhICovCiAJY3JjID0gfmNyYzsKLQlyZXR1cm4gYml0cmV2ZXJzZShjcmMpID4+IDE2OworCXJldHVybiBiaXRyZXYzMihjcmMpID4+IDE2OwogfQogCiAvKioKQEAgLTMyOTIsNiArMzI5Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5FVAorCiBzdGF0aWMgaW50IHZlbG9jaXR5X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG5vdGlmaWNhdGlvbiwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBpbl9pZmFkZHIgKmlmYSA9IChzdHJ1Y3QgaW5faWZhZGRyICopIHB0cjsKQEAgLTMzMTIsNCArMzMxOCw2IEBACiAJfQogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KKworI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKaW5kZXggZDVhYjljZi4uMjFmNzZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKQEAgLTM4Miw3ICszODIsNyBAQAogCiAjIFdhbiByb3V0ZXIgY29yZS4KIGNvbmZpZyBXQU5fUk9VVEVSX0RSSVZFUlMKLQlib29sICJXQU4gcm91dGVyIGRyaXZlcnMiCisJdHJpc3RhdGUgIldBTiByb3V0ZXIgZHJpdmVycyIKIAlkZXBlbmRzIG9uIFdBTiAmJiBXQU5fUk9VVEVSCiAJLS0taGVscC0tLQogCSAgQ29ubmVjdCBMQU4gdG8gV0FOIHZpYSBMaW51eCBib3guCkBAIC0zOTMsNyArMzkzLDggQEAKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy93YW4tcm91dGVyLnR4dD4uCiAKIAkgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gd29uJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZQotCSAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbAorCSAga2VybmVsIGV4Y2VwdCBmb3IgaG93IHN1Ym9yZGluYXRlIGRyaXZlcnMgbWF5IGJlIGJ1aWx0OgorCSAgc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwKIAkgIHRoZSBxdWVzdGlvbnMgYWJvdXQgV0FOIHJvdXRlciBkcml2ZXJzLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKaW5kZXggZTFiZjhiOS4uNmM3ZGZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYworKysgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCkBAIC05NzQsMTIgKzk3NCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG47CiAKLQlpZiAoKG49aW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKT4+Q0FSRF9NSU5PUl9CSVRTKQorCWlmICgobj1pbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk+PkNBUkRfTUlOT1JfQklUUykKIAkJPj0gbnJfY2FyZHMpCiAJCXJldHVybiAtRU5PREVWOwogCWNvc2EgPSBjb3NhX2NhcmRzK247CiAKLQlpZiAoKG49aW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKQorCWlmICgobj1pbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkKIAkJJiAoKDE8PENBUkRfTUlOT1JfQklUUyktMSkpID49IGNvc2EtPm5jaGFubmVscykKIAkJcmV0dXJuIC1FTk9ERVY7CiAJY2hhbiA9IGNvc2EtPmNoYW4gKyBuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jIGIvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCmluZGV4IGE0ZjczNTcuLmEwMmM1ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYworKysgYi9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKQEAgLTIzMSw3ICsyMzEsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAJCi0Jc3Y9KHN0cnVjdCBzdjExX2RldmljZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdjExX2RldmljZSksIEdGUF9LRVJORUwpOworCXN2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN2MTFfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYoIXN2KQogCQlnb3RvIGZhaWwzOwogCQkJCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMgYi9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKaW5kZXggMzZkMWMzZi4uNjIxODRkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYwpAQCAtMzQ1NSw3ICszNDU1LDcgQEAKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljYXJkID0gKHBjMzAwX3QgKikga21hbGxvYyhzaXplb2YocGMzMDBfdCksIEdGUF9LRVJORUwpOworCWNhcmQgPSBrbWFsbG9jKHNpemVvZihwYzMwMF90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNhcmQgPT0gTlVMTCkgewogCQlwcmludGsoIlBDMzAwIGZvdW5kIGF0IFJBTSAweCUwMTZsbHgsICIKIAkJICAgICAgICJidXQgY291bGQgbm90IGFsbG9jYXRlIGNhcmQgc3RydWN0dXJlLlxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF90dHkuYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF90dHkuYwppbmRleCBiMmEyM2FlLi41ODczYzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGMzMDBfdHR5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwX3R0eS5jCkBAIC03ODQsNyArNzg0LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9IAogCQkKLQkJbmV3ID0gKHN0X2NwY19yeF9idWYgKilrbWFsbG9jKHJ4X2xlbiArIHNpemVvZihzdF9jcGNfcnhfYnVmKSwgR0ZQX0FUT01JQyk7CisJCW5ldyA9IGttYWxsb2MocnhfbGVuICsgc2l6ZW9mKHN0X2NwY19yeF9idWYpLCBHRlBfQVRPTUlDKTsKIAkJaWYgKG5ldyA9PSAwKSB7CiAJCQljcGNfdHR5X3J4X2Rpc2NfZnJhbWUocGMzMDBjaGFuKTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYyBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKaW5kZXggOWMzY2NjNi4uMWM5ZWRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYworKysgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCkBAIC0xMjMsOCArMTIzLDggQEAKIAl1bnNpZ25lZCBjaGFyICp4YnVmZiwgKnJidWZmOwogCWludCBsZW4gPSAyKiBuZXdtdHU7CiAKLQl4YnVmZiA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2MgKGxlbiArIDQsIEdGUF9BVE9NSUMpOwotCXJidWZmID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyAobGVuICsgNCwgR0ZQX0FUT01JQyk7CisJeGJ1ZmYgPSBrbWFsbG9jKGxlbiArIDQsIEdGUF9BVE9NSUMpOworCXJidWZmID0ga21hbGxvYyhsZW4gKyA0LCBHRlBfQVRPTUlDKTsKIAogCWlmICh4YnVmZiA9PSBOVUxMIHx8IHJidWZmID09IE5VTEwpICAKIAl7CkBAIC00NjUsMTEgKzQ2NSwxMSBAQAogCiAJbGVuID0gZGV2LT5tdHUgKiAyOwogCi0Jc2wtPnJidWZmID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyhsZW4gKyA0LCBHRlBfS0VSTkVMKTsKKwlzbC0+cmJ1ZmYgPSBrbWFsbG9jKGxlbiArIDQsIEdGUF9LRVJORUwpOwogCWlmIChzbC0+cmJ1ZmYgPT0gTlVMTCkgICB7CiAJCWdvdG8gbm9yYnVmZjsKIAl9Ci0Jc2wtPnhidWZmID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyhsZW4gKyA0LCBHRlBfS0VSTkVMKTsKKwlzbC0+eGJ1ZmYgPSBrbWFsbG9jKGxlbiArIDQsIEdGUF9LRVJORUwpOwogCWlmIChzbC0+eGJ1ZmYgPT0gTlVMTCkgICB7CiAJCWdvdG8gbm94YnVmZjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYwppbmRleCAyZWMyZTVhLi45MWI3NTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKQEAgLTI3MDEsOCArMjcwMSw4IEBACiAJCXNiX2lkX2hpID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NJUl9TQl9JRF9ISSk7CiAKIAkJLyogZXh0cmFjdCBjb3JlX2lkLCBjb3JlX3JldiwgY29yZV92ZW5kb3IgKi8KLQkJY29yZV9pZCA9IChzYl9pZF9oaSAmIDB4RkZGMCkgPj4gNDsKLQkJY29yZV9yZXYgPSAoc2JfaWRfaGkgJiAweEYpOworCQljb3JlX2lkID0gKHNiX2lkX2hpICYgMHg4RkYwKSA+PiA0OworCQljb3JlX3JldiA9ICgoc2JfaWRfaGkgJiAweEYpIHwgKChzYl9pZF9oaSAmIDB4NzAwMCkgPj4gOCkpOwogCQljb3JlX3ZlbmRvciA9IChzYl9pZF9oaSAmIDB4RkZGRjAwMDApID4+IDE2OwogCiAJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiQ29yZSAlZDogSUQgMHgleCwgcmV2IDB4JXgsIHZlbmRvciAweCV4XG4iLApAQCAtMjg3Myw3ICsyODczLDEwIEBACiAJCXNiaW1jb25maWdsb3cgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCSU1DT05GSUdMT1cpOwogCQlzYmltY29uZmlnbG93ICY9IH4gQkNNNDN4eF9TQklNQ09ORklHTE9XX1JFUVVFU1RfVE9VVF9NQVNLOwogCQlzYmltY29uZmlnbG93ICY9IH4gQkNNNDN4eF9TQklNQ09ORklHTE9XX1NFUlZJQ0VfVE9VVF9NQVNLOwotCQlzYmltY29uZmlnbG93IHw9IDB4MzI7CisJCWlmIChiY20tPmJ1c3R5cGUgPT0gQkNNNDN4eF9CVVNUWVBFX1BDSSkKKwkJCXNiaW1jb25maWdsb3cgfD0gMHgzMjsKKwkJZWxzZQorCQkJc2JpbWNvbmZpZ2xvdyB8PSAweDUzOwogCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQklNQ09ORklHTE9XLCBzYmltY29uZmlnbG93KTsKIAl9CiAKQEAgLTMwNzcsNyArMzA4MCw3IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDYgfHwKKwlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDYgJiYKIAkJYmNtLT5jdXJyZW50X2NvcmUtPmlkID09IEJDTTQzeHhfQ09SRUlEX1BDSSkgewogCQl2YWx1ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JJTlRWRUMpOwogCQl2YWx1ZSB8PSAoMSA8PCBiYWNrcGxhbmVfZmxhZ19ucik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKaW5kZXggOTc0YThlNS4uZWZiOGNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwpAQCAtMTI1Myw3ICsxMjUzLDcgQEAKIAkJCXJldHVybiBOVUxMOwogCX0KIAotCXRtcGJ1ZiA9IChjaGFyICopIGttYWxsb2MoV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4sIEdGUF9BVE9NSUMpOworCXRtcGJ1ZiA9IGttYWxsb2MoV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4sIEdGUF9BVE9NSUMpOwogCWlmICh0bXBidWYgPT0gTlVMTCkgewogCQlQREVCVUcoREVCVUdfQVAsICJBUDoga21hbGxvYyBmYWlsZWQgZm9yIGNoYWxsZW5nZVxuIik7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9kb3dubG9hZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9kb3dubG9hZC5jCmluZGV4IDI0ZmMzODcuLmM3Njc4ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfZG93bmxvYWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2Rvd25sb2FkLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCQkweDdmMDAwMiAvKiBJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIgKFBDSSkgKi8sCiAJfTsKIAotCWJ1ZiA9ICh1OCAqKSBrbWFsbG9jKFBSSVNNMl9QREFfU0laRSwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYyhQUklTTTJfUERBX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChidWYgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwppbmRleCBhMzk0YTIzLi4zMDc5Mzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCkBAIC0yMjUyLDcgKzIyNTIsNyBAQAogCWlmICh0eGRlc2MtPnN3X3N1cHBvcnQpIHsKIAkJbGVuID0gbGUxNl90b19jcHUodHhkZXNjLT5kYXRhX2xlbik7CiAJCWlmIChsZW4gPCBQUklTTTJfREFUQV9NQVhMRU4pIHsKLQkJCSpwYXlsb2FkID0gKGNoYXIgKikga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOworCQkJKnBheWxvYWQgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoKnBheWxvYWQgPT0gTlVMTCB8fAogCQkJICAgIGhmYTM4NHhfZnJvbV9iYXAoZGV2LCBCQVAwLCAqcGF5bG9hZCwgbGVuKSkgewogCQkJCVBERUJVRyhERUJVR19FWFRSQSwgIiVzOiBjb3VsZCBub3QgcmVhZCBUWCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKaW5kZXggM2I3YjgwNi4uY2IwOGJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwpAQCAtMzgyOSw3ICszODI5LDcgQEAKIAkgICAgcC0+bGVuZ3RoID4gUFJJU00yX0hPU1RBUERfTUFYX0JVRl9TSVpFIHx8ICFwLT5wb2ludGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBhcmFtID0gKHN0cnVjdCBwcmlzbTJfaG9zdGFwZF9wYXJhbSAqKSBrbWFsbG9jKHAtPmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJcGFyYW0gPSBrbWFsbG9jKHAtPmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBhcmFtID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCmluZGV4IDA3OTZiZTkuLjA0YzE5Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBob3N0YXBfdHhfY2FsbGJhY2tfaW5mbyAqZW50cnk7CiAKLQllbnRyeSA9IChzdHJ1Y3QgaG9zdGFwX3R4X2NhbGxiYWNrX2luZm8gKikga21hbGxvYyhzaXplb2YoKmVudHJ5KSwKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksCiAJCQkJCQkJICAgR0ZQX0FUT01JQyk7CiAJaWYgKGVudHJ5ID09IE5VTEwpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCmluZGV4IGRkOWJhNGEuLmI4NTg1N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKQEAgLTIyNDYsNyArMjI0Niw3IEBACiAJaWYgKHByaXYtPnNuYXBzaG90WzBdKQogCQlyZXR1cm4gMTsKIAlmb3IgKGkgPSAwOyBpIDwgMHgzMDsgaSsrKSB7Ci0JCXByaXYtPnNuYXBzaG90W2ldID0gKHU4ICopIGttYWxsb2MoMHgxMDAwLCBHRlBfQVRPTUlDKTsKKwkJcHJpdi0+c25hcHNob3RbaV0gPSBrbWFsbG9jKDB4MTAwMCwgR0ZQX0FUT01JQyk7CiAJCWlmICghcHJpdi0+c25hcHNob3RbaV0pIHsKIAkJCUlQV19ERUJVR19JTkZPKCIlczogRXJyb3IgYWxsb2NhdGluZyBzbmFwc2hvdCAiCiAJCQkJICAgICAgICJidWZmZXIgJWRcbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUsIGkpOwpAQCAtMjY2NCw3ICsyNjY0LDcgQEAKIAkJCQlicmVhazsKIAkJCX0KICNlbmRpZgotCQkJaWYgKHN0YXRzLmxlbiA8IHNpemVvZih1LT5yeF9kYXRhLmhlYWRlcikpCisJCQlpZiAoc3RhdHMubGVuIDwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSkKIAkJCQlicmVhazsKIAkJCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRSh1LT5yeF9kYXRhLmhlYWRlci5mcmFtZV9jdGwpKSB7CiAJCQljYXNlIElFRUU4MDIxMV9GVFlQRV9NR01UOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCmluZGV4IDY0NGI0NzQuLmEwMDlhYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKQEAgLTQwNiw3ICs0MDYsNiBAQAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKLSAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAogICAgIC8qIE5ldHdhdmUgcHJpdmF0ZSBzdHJ1Y3QgaW5pdC4gbGluay9kZXYvbm9kZSBhbHJlYWR5IHRha2VuIGNhcmUgb2YsCiAgICAgICogb3RoZXIgc3R1ZmYgemVybydkIC0gSmVhbiBJSSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKaW5kZXggOTY2MDZlZC4uODM4ZDUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCkBAIC0yNzc1LDcgKzI3NzUsNyBAQAogICAgICAgICAgICBwLT5sZW5ndGggPiBQUklTTTJfSE9TVEFQRF9NQVhfQlVGX1NJWkUgfHwgIXAtPnBvaW50ZXIpCiAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKIAotICAgICAgIHBhcmFtID0gKHN0cnVjdCBwcmlzbTJfaG9zdGFwZF9wYXJhbSAqKSBrbWFsbG9jKHAtPmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisgICAgICAgcGFyYW0gPSBrbWFsbG9jKHAtPmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAgICAgICAgaWYgKHBhcmFtID09IE5VTEwpCiAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA4OGUxMGM5Li40N2IyY2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtMzMxLDcgKzMzMSw2IEBACiAgICAgcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgcF9kZXYtPmNvbmYuQ29uZmlnSW5kZXggPSAxOwotICAgIHBfZGV2LT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAogICAgIHBfZGV2LT5wcml2ID0gZGV2OwogICAgIHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwppbmRleCAzMzdjNjkyLi5jZTNhOGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKQEAgLTc5OCw3ICs3OTgsNyBAQAogICovCiBzdGF0aWMgdm9pZCBzZXRfYmF1ZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBpbnQgYmF1ZGNvZGUpCiB7Ci0Jc3RydWN0IHRlcm1pb3Mgb2xkX3Rlcm1pb3MgPSAqKHR0eS0+dGVybWlvcyk7CisJc3RydWN0IGt0ZXJtaW9zIG9sZF90ZXJtaW9zID0gKih0dHktPnRlcm1pb3MpOwogCXR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q0JBVUQ7CS8qIENsZWFyIHRoZSBvbGQgYmF1ZCBzZXR0aW5nICovCiAJdHR5LT50ZXJtaW9zLT5jX2NmbGFnIHw9IGJhdWRjb2RlOwkvKiBTZXQgdGhlIG5ldyBiYXVkIHNldHRpbmcgKi8KIAl0dHktPmRyaXZlci0+c2V0X3Rlcm1pb3ModHR5LCAmb2xkX3Rlcm1pb3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCmluZGV4IDIzM2Q5MDYuLjVlYjgxNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogICBpZihscC0+d2F2ZXBvaW50X3RhYmxlLm51bV93YXZlcG9pbnRzPT1NQVhfV0FWRVBPSU5UUykKICAgICByZXR1cm4gTlVMTDsKICAgCi0gIG5ld193YXZlcG9pbnQ9KHdhdmVwb2ludF9oaXN0b3J5ICopIGttYWxsb2Moc2l6ZW9mKHdhdmVwb2ludF9oaXN0b3J5KSxHRlBfQVRPTUlDKTsKKyAgbmV3X3dhdmVwb2ludCA9IGttYWxsb2Moc2l6ZW9mKHdhdmVwb2ludF9oaXN0b3J5KSxHRlBfQVRPTUlDKTsKICAgaWYobmV3X3dhdmVwb2ludD09TlVMTCkKICAgICByZXR1cm4gTlVMTDsKICAgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IDU4M2UwZDYuLmMyNTBmMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC0xOTI4LDcgKzE5MjgsNiBAQAogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMJPSBDT05GX0VOQUJMRV9JUlE7CiAJcF9kZXYtPmNvbmYuSW50VHlwZQk9IElOVF9NRU1PUllfQU5EX0lPOwogCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4CT0gMTsKLQlwX2Rldi0+Y29uZi5QcmVzZW50CT0gUFJFU0VOVF9PUFRJT047CiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHdsMzUwMV9jYXJkKSk7CiAJaWYgKCFkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKaW5kZXggNzdlMTFkZC4uNzhlYTcyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAKIAkvKiBBbGxvY2F0ZSBhIHNpbmdsZSBtZW1vcnkgYmxvY2sgZm9yIHZhbHVlcyBhbmQgYWRkcmVzc2VzLiAqLwogCWNvdW50MTYgPSAyKmNvdW50OwotCWExNiA9ICh6ZF9hZGRyX3QgKilrbWFsbG9jKGNvdW50MTYgKiAoc2l6ZW9mKHpkX2FkZHJfdCkgKyBzaXplb2YodTE2KSksCisJYTE2ID0ga21hbGxvYyhjb3VudDE2ICogKHNpemVvZih6ZF9hZGRyX3QpICsgc2l6ZW9mKHUxNikpLAogCQkgICAgICAgICAgICAgICAgICAgR0ZQX05PRlMpOwogCWlmICghYTE2KSB7CiAJCWRldl9kYmdfZih6ZF9jaGlwX2RldihjaGlwKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKaW5kZXggMDBjYTcwNC4uYTA4NTI0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKQEAgLTQxLDYgKzQxLDggQEAKIAogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9oYXNoX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAorc3RhdGljIHZvaWQgZG9fcngodW5zaWduZWQgbG9uZyBtYWNfcHRyKTsKKwogaW50IHpkX21hY19pbml0KHN0cnVjdCB6ZF9tYWMgKm1hYywKIAkgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJICAgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKQEAgLTUzLDYgKzU1LDEwIEBACiAJSU5JVF9ERUxBWUVEX1dPUksoJm1hYy0+c2V0X3J0c19jdHNfd29yaywgc2V0X3J0c19jdHNfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJm1hYy0+c2V0X2Jhc2ljX3JhdGVzX3dvcmssIHNldF9iYXNpY19yYXRlc193b3JrKTsKIAorCXNrYl9xdWV1ZV9oZWFkX2luaXQoJm1hYy0+cnhfcXVldWUpOworCXRhc2tsZXRfaW5pdCgmbWFjLT5yeF90YXNrbGV0LCBkb19yeCwgKHVuc2lnbmVkIGxvbmcpbWFjKTsKKwl0YXNrbGV0X2Rpc2FibGUoJm1hYy0+cnhfdGFza2xldCk7CisKIAlpZWVlX2luaXQoaWVlZSk7CiAJc29mdG1hY19pbml0KGllZWU4MDIxMV9wcml2KG5ldGRldikpOwogCXpkX2NoaXBfaW5pdCgmbWFjLT5jaGlwLCBuZXRkZXYsIGludGYpOwpAQCAtMTQwLDYgKzE0Niw4IEBACiB2b2lkIHpkX21hY19jbGVhcihzdHJ1Y3QgemRfbWFjICptYWMpCiB7CiAJZmx1c2hfd29ya3F1ZXVlKHpkX3dvcmtxdWV1ZSk7CisJc2tiX3F1ZXVlX3B1cmdlKCZtYWMtPnJ4X3F1ZXVlKTsKKwl0YXNrbGV0X2tpbGwoJm1hYy0+cnhfdGFza2xldCk7CiAJemRfY2hpcF9jbGVhcigmbWFjLT5jaGlwKTsKIAlaRF9BU1NFUlQoIXNwaW5faXNfbG9ja2VkKCZtYWMtPmxvY2spKTsKIAlaRF9NRU1DTEVBUihtYWMsIHNpemVvZihzdHJ1Y3QgemRfbWFjKSk7CkBAIC0xNjgsNiArMTc2LDggQEAKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9ICZtYWMtPmNoaXA7CiAJaW50IHI7CiAKKwl0YXNrbGV0X2VuYWJsZSgmbWFjLT5yeF90YXNrbGV0KTsKKwogCXIgPSB6ZF9jaGlwX2VuYWJsZV9pbnQoY2hpcCk7CiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKQEAgLTIxOCw2ICsyMjgsOCBAQAogCSAqLwogCiAJemRfY2hpcF9kaXNhYmxlX3J4KGNoaXApOworCXNrYl9xdWV1ZV9wdXJnZSgmbWFjLT5yeF9xdWV1ZSk7CisJdGFza2xldF9kaXNhYmxlKCZtYWMtPnJ4X3Rhc2tsZXQpOwogCWhvdXNla2VlcGluZ19kaXNhYmxlKG1hYyk7CiAJaWVlZTgwMjExc29mdG1hY19zdG9wKG5ldGRldik7CiAKQEAgLTQ3MCwxMyArNDgyLDEzIEBACiAKIAlpZiAoY2hhbmdlcyAmIElFRUU4MDIxMVNPRlRNQUNfQlNTSU5GT0NIR19SQVRFUykgewogCQkvKiBTZXQgUlRTIHJhdGUgdG8gaGlnaGVzdCBhdmFpbGFibGUgYmFzaWMgcmF0ZSAqLwotCQl1OCByYXRlID0gaWVlZTgwMjExc29mdG1hY19oaWdoZXN0X3N1cHBvcnRlZF9yYXRlKHNvZnRtYWMsCisJCXU4IGhpX3JhdGUgPSBpZWVlODAyMTFzb2Z0bWFjX2hpZ2hlc3Rfc3VwcG9ydGVkX3JhdGUoc29mdG1hYywKIAkJCSZic3NpbmZvLT5zdXBwb3J0ZWRfcmF0ZXMsIDEpOwotCQlyYXRlID0gcmF0ZV90b196ZF9yYXRlKHJhdGUpOworCQloaV9yYXRlID0gcmF0ZV90b196ZF9yYXRlKGhpX3JhdGUpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKHJhdGUgIT0gbWFjLT5ydHNfcmF0ZSkgewotCQkJbWFjLT5ydHNfcmF0ZSA9IHJhdGU7CisJCWlmIChoaV9yYXRlICE9IG1hYy0+cnRzX3JhdGUpIHsKKwkJCW1hYy0+cnRzX3JhdGUgPSBoaV9yYXRlOwogCQkJbmVlZF9zZXRfcnRzX2N0cyA9IDE7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CkBAIC0xMDcyLDQzICsxMDg0LDc1IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB6ZF9tYWNfcngoc3RydWN0IHpkX21hYyAqbWFjLCBjb25zdCB1OCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQorc3RhdGljIHZvaWQgemRfbWFjX3J4KHN0cnVjdCB6ZF9tYWMgKm1hYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHpkX21hY190b19pZWVlODAyMTEobWFjKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzIHN0YXRzOwogCWNvbnN0IHN0cnVjdCByeF9zdGF0dXMgKnN0YXR1czsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JaWYgKGxlbmd0aCA8IFpEX1BMQ1BfSEVBREVSX1NJWkUgKyBJRUVFODAyMTFfMUFERFJfTEVOICsKLQkgICAgICAgICAgICAgSUVFRTgwMjExX0ZDU19MRU4gKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChza2ItPmxlbiA8IFpEX1BMQ1BfSEVBREVSX1NJWkUgKyBJRUVFODAyMTFfMUFERFJfTEVOICsKKwkgICAgICAgICAgICAgICBJRUVFODAyMTFfRkNTX0xFTiArIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSkKKwl7CisJCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJQYWNrZXQgd2l0aCBsZW5ndGggJXUgdG8gc21hbGwuXG4iLAorCQkJIHNrYi0+bGVuKTsKKwkJZ290byBmcmVlX3NrYjsKKwl9CiAKLQlyID0gZmlsbF9yeF9zdGF0cygmc3RhdHMsICZzdGF0dXMsIG1hYywgYnVmZmVyLCBsZW5ndGgpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwlyID0gZmlsbF9yeF9zdGF0cygmc3RhdHMsICZzdGF0dXMsIG1hYywgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJaWYgKHIpIHsKKwkJLyogT25seSBwYWNrZXRzIHdpdGggcnggZXJyb3JzIGFyZSBpbmNsdWRlZCBoZXJlLiAqLworCQlnb3RvIGZyZWVfc2tiOworCX0KIAotCWxlbmd0aCAtPSBaRF9QTENQX0hFQURFUl9TSVpFK0lFRUU4MDIxMV9GQ1NfTEVOKwotCQkgIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKTsKLQlidWZmZXIgKz0gWkRfUExDUF9IRUFERVJfU0laRTsKKwlfX3NrYl9wdWxsKHNrYiwgWkRfUExDUF9IRUFERVJfU0laRSk7CisJX19za2JfdHJpbShza2IsIHNrYi0+bGVuIC0KKwkJICAgICAgICAoSUVFRTgwMjExX0ZDU19MRU4gKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpKTsKIAotCXVwZGF0ZV9xdWFsX3Jzc2kobWFjLCBidWZmZXIsIGxlbmd0aCwgc3RhdHMuc2lnbmFsLCBzdGF0cy5yc3NpKTsKKwl1cGRhdGVfcXVhbF9yc3NpKG1hYywgc2tiLT5kYXRhLCBza2ItPmxlbiwgc3RhdHMuc2lnbmFsLAorCQkgICAgICAgICBzdGF0dXMtPnNpZ25hbF9zdHJlbmd0aCk7CiAKLQlyID0gZmlsdGVyX3J4KGllZWUsIGJ1ZmZlciwgbGVuZ3RoLCAmc3RhdHMpOwotCWlmIChyIDw9IDApCi0JCXJldHVybiByOworCXIgPSBmaWx0ZXJfcngoaWVlZSwgc2tiLT5kYXRhLCBza2ItPmxlbiwgJnN0YXRzKTsKKwlpZiAociA8PSAwKSB7CisJCWlmIChyIDwgMCkKKwkJCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJFcnJvciBpbiBwYWNrZXQuXG4iKTsKKwkJZ290byBmcmVlX3NrYjsKKwl9CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgemRfcnRfaGRyKSArIGxlbmd0aCk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKLQkJZmlsbF9ydF9oZWFkZXIoc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgemRfcnRfaGRyKSksIG1hYywKKwkJZmlsbF9ydF9oZWFkZXIoc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IHpkX3J0X2hkcikpLCBtYWMsCiAJCQkgICAgICAgJnN0YXRzLCBzdGF0dXMpOwotCW1lbWNweShza2JfcHV0KHNrYiwgbGVuZ3RoKSwgYnVmZmVyLCBsZW5ndGgpOwogCiAJciA9IGllZWU4MDIxMV9yeChpZWVlLCBza2IsICZzdGF0cyk7Ci0JaWYgKCFyKQotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCWlmIChyKQorCQlyZXR1cm47CitmcmVlX3NrYjoKKwkvKiBXZSBhcmUgYWx3YXlzIGluIGEgc29mdCBpcnEuICovCisJZGV2X2tmcmVlX3NrYihza2IpOworfQorCitzdGF0aWMgdm9pZCBkb19yeCh1bnNpZ25lZCBsb25nIG1hY19wdHIpCit7CisJc3RydWN0IHpkX21hYyAqbWFjID0gKHN0cnVjdCB6ZF9tYWMgKiltYWNfcHRyOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZtYWMtPnJ4X3F1ZXVlKSkgIT0gTlVMTCkKKwkJemRfbWFjX3J4KG1hYywgc2tiKTsKK30KKworaW50IHpkX21hY19yeF9pcnEoc3RydWN0IHpkX21hYyAqbWFjLCBjb25zdCB1OCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgemRfcnRfaGRyKSArIGxlbmd0aCk7CisJaWYgKCFza2IpIHsKKwkJZGV2X3dhcm4oemRfbWFjX2RldihtYWMpLCAiQ291bGQgbm90IGFsbG9jYXRlIHNrYi5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBzaXplb2Yoc3RydWN0IHpkX3J0X2hkcikpOworCW1lbWNweShfX3NrYl9wdXQoc2tiLCBsZW5ndGgpLCBidWZmZXIsIGxlbmd0aCk7CisJc2tiX3F1ZXVlX3RhaWwoJm1hYy0+cnhfcXVldWUsIHNrYik7CisJdGFza2xldF9zY2hlZHVsZSgmbWFjLT5yeF90YXNrbGV0KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuaAppbmRleCBmMGNmMDVkLi5mYWY0Yzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuaApAQCAtMTM4LDYgKzEzOCw5IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBzZXRfcnRzX2N0c193b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2V0X2Jhc2ljX3JhdGVzX3dvcms7CiAKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X3F1ZXVlOworCiAJdW5zaWduZWQgaW50IHN0YXRzX2NvdW50OwogCXU4IHF1YWxfYnVmZmVyW1pEX01BQ19TVEFUU19CVUZGRVJfU0laRV07CiAJdTggcnNzaV9idWZmZXJbWkRfTUFDX1NUQVRTX0JVRkZFUl9TSVpFXTsKQEAgLTE5Myw3ICsxOTYsNyBAQAogaW50IHpkX21hY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7CiB2b2lkIHpkX21hY19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAKLWludCB6ZF9tYWNfcngoc3RydWN0IHpkX21hYyAqbWFjLCBjb25zdCB1OCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKK2ludCB6ZF9tYWNfcnhfaXJxKHN0cnVjdCB6ZF9tYWMgKm1hYywgY29uc3QgdTggKmJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbmd0aCk7CiAKIGludCB6ZF9tYWNfc2V0X3JlZ2RvbWFpbihzdHJ1Y3QgemRfbWFjICp6ZF9tYWMsIHU4IHJlZ2RvbWFpbik7CiB1OCB6ZF9tYWNfZ2V0X3JlZ2RvbWFpbihzdHJ1Y3QgemRfbWFjICp6ZF9tYWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwppbmRleCBhYTc4MmU4Li42MDVlOTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwpAQCAtNTk4LDEzICs1OTgsMTMgQEAKIAkJCW4gPSBsK2s7CiAJCQlpZiAobiA+IGxlbmd0aCkKIAkJCQlyZXR1cm47Ci0JCQl6ZF9tYWNfcngobWFjLCBidWZmZXIrbCwgayk7CisJCQl6ZF9tYWNfcnhfaXJxKG1hYywgYnVmZmVyK2wsIGspOwogCQkJaWYgKGkgPj0gMikKIAkJCQlyZXR1cm47CiAJCQlsID0gKG4rMykgJiB+MzsKIAkJfQogCX0gZWxzZSB7Ci0JCXpkX21hY19yeChtYWMsIGJ1ZmZlciwgbGVuZ3RoKTsKKwkJemRfbWFjX3J4X2lycShtYWMsIGJ1ZmZlciwgbGVuZ3RoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwppbmRleCA0M2U1MjFlLi43OGMyZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCkBAIC0yMjAsOCArMjIwLDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkpCiAJCQljb250aW51ZTsKLQkJY29va2llID0gZmFzdF9nZXRfZGNvb2tpZSh2bWEtPnZtX2ZpbGUtPmZfZGVudHJ5LAotCQkJdm1hLT52bV9maWxlLT5mX3Zmc21udCk7CisJCWNvb2tpZSA9IGZhc3RfZ2V0X2Rjb29raWUodm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LAorCQkJdm1hLT52bV9maWxlLT5mX3BhdGgubW50KTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNDYsOCArMjQ2LDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmICh2bWEtPnZtX2ZpbGUpIHsKLQkJCWNvb2tpZSA9IGZhc3RfZ2V0X2Rjb29raWUodm1hLT52bV9maWxlLT5mX2RlbnRyeSwKLQkJCQl2bWEtPnZtX2ZpbGUtPmZfdmZzbW50KTsKKwkJCWNvb2tpZSA9IGZhc3RfZ2V0X2Rjb29raWUodm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LAorCQkJCXZtYS0+dm1fZmlsZS0+Zl9wYXRoLm1udCk7CiAJCQkqb2Zmc2V0ID0gKHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCkgKyBhZGRyIC0KIAkJCQl2bWEtPnZtX3N0YXJ0OwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jIGIvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCmluZGV4IDEyYmFiNjQuLjZmYjNmNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYworKysgYi9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKQEAgLTg3NCw3ICs4NzQsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpc2kgPSAoc3RydWN0IGlvc2FwaWNfaW5mbyAqKWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpb3NhcGljX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpc2kgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW9zYXBpY19pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpc2kpIHsKIAkJQlVHKCk7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L0tjb25maWcgYi9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZwppbmRleCBjN2ZhMjhhLi4zNmM2YTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZworKysgYi9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZwpAQCAtODIsOSArODIsNiBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgbmVlZCBQQ01DSUEgc3VwcG9ydCBmb3IgeW91ciBQQy1zdHlsZSBwYXJhbGxlbAogCSAgcG9ydHMuIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBQQVJQT1JUX05PVF9QQwotCWJvb2wKLQogY29uZmlnIFBBUlBPUlRfSVAzMgogCXRyaXN0YXRlICJTR0kgSVAzMiBidWlsdGluIHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBTR0lfSVAzMiAmJiBQQVJQT1JUICYmIEVYUEVSSU1FTlRBTApAQCAtMTU4LDUgKzE1NSw4IEBACiAJICB0cmFuc2ZlciBtb2Rlcy4gQWxzbyBzYXkgWSBpZiB5b3Ugd2FudCBkZXZpY2UgSUQgaW5mb3JtYXRpb24gdG8KIAkgIGFwcGVhciBpbiAvcHJvYy9zeXMvZGV2L3BhcnBvcnQvKi9hdXRvcHJvYmUqLiBJdCBpcyBzYWZlIHRvIHNheSBOLgogCitjb25maWcgUEFSUE9SVF9OT1RfUEMKKwlib29sCisKIGVuZG1lbnUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggZjFkZDgxYS4uM2NmYjBhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnCkBAIC0xOSw3ICsxOSw3IEBACiAKIGNvbmZpZyBQQ0lfTVVMVElUSFJFQURfUFJPQkUKIAlib29sICJQQ0kgTXVsdGktdGhyZWFkZWQgcHJvYmUgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMICYmIEJST0tFTgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIFBDSSBjb3JlIHRvIHNwYXduIGEgbmV3IHRocmVhZCBmb3IKIAkgIGV2ZXJ5IFBDSSBkZXZpY2UgdGhhdCBpcyBwcm9iZWQuICBUaGlzIGNhbiBjYXVzZSBhIGh1Z2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZwppbmRleCA2ZTc4MGRiLi5hZGNlNDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnCkBAIC03Niw3ICs3Niw4IEBACiAKIGNvbmZpZyBIT1RQTFVHX1BDSV9BQ1BJCiAJdHJpc3RhdGUgIkFDUEkgUENJIEhvdHBsdWcgZHJpdmVyIgotCWRlcGVuZHMgb24gKCFBQ1BJX0RPQ0sgJiYgQUNQSSAmJiBIT1RQTFVHX1BDSSkgfHwgKEFDUElfRE9DSyAmJiBIT1RQTFVHX1BDSSkKKwlkZXBlbmRzIG9uIEhPVFBMVUdfUENJCisJZGVwZW5kcyBvbiAoIUFDUElfRE9DSyAmJiBBQ1BJKSB8fCAoQUNQSV9ET0NLKQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBzdXBwb3J0cyBQQ0kgSG90cGx1ZyB1c2luZwogCSAgQUNQSS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCmluZGV4IDBiOWQwZGIuLmJkMWZhZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwpAQCAtMTY4Miw3ICsxNjgyLDcgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIGFsbCBkYXRhIGFsbG9jYXRlZCBpbiBhY3BpcGhwX2dsdWVfaW5pdCgpCiAgKi8KLXZvaWQgX19leGl0IGFjcGlwaHBfZ2x1ZV9leGl0KHZvaWQpCit2b2lkICBhY3BpcGhwX2dsdWVfZXhpdCh2b2lkKQogewogCWFjcGlfcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3BjaV9ocF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jCmluZGV4IGJkNDBhZWUuLjdmMDM4ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMKQEAgLTMxOSwxMyArMzE5LDEyIEBACiAJaWYgKGJ1ZnAgPT0gTlVMTCkKIAkJZ290byByZWFkX3RhYmxlX2RvbmU7CiAKLQlsYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlsYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlkYmcoIiVzOiBlbGVtZW50IGNvdW50OiAlaSwgQVNMIHRhYmxlIHNpemU6ICVpLCAmdGFibGUgPSAweCVwXG4iLAogCQkJX19GVU5DVElPTl9fLCBwYWNrYWdlLT5wYWNrYWdlLmNvdW50LCBzaXplLCBsYnVmKTsKIAogCWlmIChsYnVmKSB7CiAJCSpidWZwID0gbGJ1ZjsKLQkJbWVtc2V0KGxidWYsIDAsIHNpemUpOwogCX0gZWxzZSB7CiAJCXNpemUgPSAtRU5PTUVNOwogCQlnb3RvIHJlYWRfdGFibGVfZG9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX252cmFtLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9udnJhbS5jCmluZGV4IDI5OGE2Y2YuLmFlNWU5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX252cmFtLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfbnZyYW0uYwpAQCAtNTIwLDcgKzUyMCw3IEBACiAJCQlyZXR1cm4gMjsKIAogCQl3aGlsZSAobnVtbWVtLS0pIHsKLQkJCW1lbV9ub2RlID0gKHN0cnVjdCBwY2lfcmVzb3VyY2UqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisJCQltZW1fbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKIAogCQkJaWYgKCFtZW1fbm9kZSkKIAkJCQlicmVhazsKQEAgLTU0OCw3ICs1NDgsNyBAQAogCQl9CiAKIAkJd2hpbGUgKG51bXBtZW0tLSkgewotCQkJcF9tZW1fbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOworCQkJcF9tZW1fbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKIAogCQkJaWYgKCFwX21lbV9ub2RlKQogCQkJCWJyZWFrOwpAQCAtNTc2LDcgKzU3Niw3IEBACiAJCX0KIAogCQl3aGlsZSAobnVtaW8tLSkgewotCQkJaW9fbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOworCQkJaW9fbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKIAogCQkJaWYgKCFpb19ub2RlKQogCQkJCWJyZWFrOwpAQCAtNjA0LDcgKzYwNCw3IEBACiAJCX0KIAogCQl3aGlsZSAobnVtYnVzLS0pIHsKLQkJCWJ1c19ub2RlID0gKHN0cnVjdCBwY2lfcmVzb3VyY2UqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisJCQlidXNfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKIAogCQkJaWYgKCFidXNfbm9kZSkKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKaW5kZXggNmQzZjU4MC4uMjVkM2FhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKQEAgLTEzMjAsNyArMTMyMCw3IEBACiAJREJHX0VOVEVSX1JPVVRJTkUKIAkKIAlzcGluX2xvY2tfaW5pdCgmbGlzdF9sb2NrKTsJCi0JcGhwX2N0bHIgPSAoc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHBocF9jdGxyX3N0YXRlX3MpLCBHRlBfS0VSTkVMKTsKKwlwaHBfY3RsciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXBocF9jdGxyKSB7CS8qIGFsbG9jYXRlIGNvbnRyb2xsZXIgc3RhdGUgZGF0YSAqLwogCQllcnIoIiVzOiBIUEMgY29udHJvbGxlciBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciFcbiIsIF9fRlVOQ1RJT05fXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9zbG90LmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9zbG90LmMKaW5kZXggYjc3MTE5Ni4uMzAwOTE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfc2xvdC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3Nsb3QuYwpAQCAtNDcsMjEgKzQ3LDExIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHN0cnVjdCBob3RwbHVnX3Nsb3RfYXR0cmlidXRlIGhvdHBsdWdfc2xvdF9hdHRyX2xvY2F0aW9uID0geworc3RhdGljIHN0cnVjdCBob3RwbHVnX3Nsb3RfYXR0cmlidXRlIHBocF9hdHRyX2xvY2F0aW9uID0gewogCS5hdHRyID0gey5uYW1lID0gInBoeV9sb2NhdGlvbiIsIC5tb2RlID0gU19JRlJFRyB8IFNfSVJVR099LAogCS5zaG93ID0gbG9jYXRpb25fcmVhZF9maWxlLAogfTsKIAotc3RhdGljIHZvaWQgcnBhcGhwX3N5c2ZzX2FkZF9hdHRyX2xvY2F0aW9uIChzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90KQotewotCXN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfbG9jYXRpb24uYXR0cik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJwYXBocF9zeXNmc19yZW1vdmVfYXR0cl9sb2NhdGlvbiAoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCkKLXsKLQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwgJmhvdHBsdWdfc2xvdF9hdHRyX2xvY2F0aW9uLmF0dHIpOwotfQotCiAvKiBmcmVlIHVwIHRoZSBtZW1vcnkgdXNlZCBieSBhIHNsb3QgKi8KIHN0YXRpYyB2b2lkIHJwYXBocF9yZWxlYXNlX3Nsb3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90KQogewpAQCAtMTQ1LDcgKzEzNSw3IEBACiAJbGlzdF9kZWwoJnNsb3QtPnJwYXBocF9zbG90X2xpc3QpOwogCQogCS8qIHJlbW92ZSAicGh5X2xvY2F0aW9uIiBmaWxlICovCi0JcnBhcGhwX3N5c2ZzX3JlbW92ZV9hdHRyX2xvY2F0aW9uKHBocF9zbG90KTsKKwlzeXNmc19yZW1vdmVfZmlsZSgmcGhwX3Nsb3QtPmtvYmosICZwaHBfYXR0cl9sb2NhdGlvbi5hdHRyKTsKIAogCXJldHZhbCA9IHBjaV9ocF9kZXJlZ2lzdGVyKHBocF9zbG90KTsKIAlpZiAocmV0dmFsKQpAQCAtMTYwLDM2ICsxNTAsNDUgQEAKIAogaW50IHJwYXBocF9yZWdpc3Rlcl9zbG90KHN0cnVjdCBzbG90ICpzbG90KQogeworCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnBocF9zbG90ID0gc2xvdC0+aG90cGx1Z19zbG90OwogCWludCByZXR2YWw7CiAKIAlkYmcoIiVzIHJlZ2lzdGVyaW5nIHNsb3Q6cGF0aFslc10gaW5kZXhbJXhdLCBuYW1lWyVzXSBwZG9tYWluWyV4XSB0eXBlWyVkXVxuIiwgCiAJCV9fRlVOQ1RJT05fXywgc2xvdC0+ZG4tPmZ1bGxfbmFtZSwgc2xvdC0+aW5kZXgsIHNsb3QtPm5hbWUsIAogCQlzbG90LT5wb3dlcl9kb21haW4sIHNsb3QtPnR5cGUpOworCiAJLyogc2hvdWxkIG5vdCB0cnkgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgc2xvdCB0d2ljZSAqLwotCWlmIChpc19yZWdpc3RlcmVkKHNsb3QpKSB7IC8qIHNob3VsZCd0IGJlIGhlcmUgKi8KKwlpZiAoaXNfcmVnaXN0ZXJlZChzbG90KSkgewogCQllcnIoInJwYXBocF9yZWdpc3Rlcl9zbG90OiBzbG90WyVzXSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsIHNsb3QtPm5hbWUpOwotCQlycGFwaHBfcmVsZWFzZV9zbG90KHNsb3QtPmhvdHBsdWdfc2xvdCk7Ci0JCXJldHVybiAtRUFHQUlOOworCQlyZXR2YWwgPSAtRUFHQUlOOworCQlnb3RvIHJlZ2lzdGVyX2ZhaWw7CiAJfQkKLQlyZXR2YWwgPSBwY2lfaHBfcmVnaXN0ZXIoc2xvdC0+aG90cGx1Z19zbG90KTsKKworCXJldHZhbCA9IHBjaV9ocF9yZWdpc3RlcihwaHBfc2xvdCk7CiAJaWYgKHJldHZhbCkgewogCQllcnIoInBjaV9ocF9yZWdpc3RlciBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKLQkJcnBhcGhwX3JlbGVhc2Vfc2xvdChzbG90LT5ob3RwbHVnX3Nsb3QpOwotCQlyZXR1cm4gcmV0dmFsOworCQlnb3RvIHJlZ2lzdGVyX2ZhaWw7CiAJfQotCQotCS8qIGNyZWF0ZSAicGh5X2xvY2F0b2luIiBmaWxlICovCi0JcnBhcGhwX3N5c2ZzX2FkZF9hdHRyX2xvY2F0aW9uKHNsb3QtPmhvdHBsdWdfc2xvdCk7CQorCisJLyogY3JlYXRlICJwaHlfbG9jYXRpb24iIGZpbGUgKi8KKwlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZmlsZSgmcGhwX3Nsb3QtPmtvYmosICZwaHBfYXR0cl9sb2NhdGlvbi5hdHRyKTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigic3lzZnNfY3JlYXRlX2ZpbGUgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIHJldHZhbCk7CisJCWdvdG8gc3lzZnNfZmFpbDsKKwl9CiAKIAkvKiBhZGQgc2xvdCB0byBvdXIgaW50ZXJuYWwgbGlzdCAqLwotCWRiZygiJXMgYWRkaW5nIHNsb3RbJXNdIHRvIHJwYXBocF9zbG90X2xpc3RcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgc2xvdC0+bmFtZSk7Ci0KIAlsaXN0X2FkZCgmc2xvdC0+cnBhcGhwX3Nsb3RfbGlzdCwgJnJwYXBocF9zbG90X2hlYWQpOwogCWluZm8oIlNsb3QgWyVzXShQQ0kgbG9jYXRpb249JXMpIHJlZ2lzdGVyZWRcbiIsIHNsb3QtPm5hbWUsCiAJCQlzbG90LT5sb2NhdGlvbik7CiAJbnVtX3Nsb3RzKys7CiAJcmV0dXJuIDA7CisKK3N5c2ZzX2ZhaWw6CisJcGNpX2hwX2RlcmVnaXN0ZXIocGhwX3Nsb3QpOworcmVnaXN0ZXJfZmFpbDoKKwlycGFwaHBfcmVsZWFzZV9zbG90KHBocF9zbG90KTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBpbnQgcnBhcGhwX2dldF9wb3dlcl9zdGF0dXMoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICogdmFsdWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaAppbmRleCA1MDc1NzY5Li4zY2E2YTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKQEAgLTQ3LDExICs0NywxNyBAQAogZXh0ZXJuIGludCBzaHBjaHBfZGVidWc7CiBleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNocGNocF93cTsKIAotLyojZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAoc2hwY2hwX2RlYnVnKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkqLwotI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKHNocGNocF9kZWJ1ZykgcHJpbnRrKCIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQotI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpCi0jZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZykKKyNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChzaHBjaHBfZGVidWcpCQkJCQlcCisJCQlwcmludGsoIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZyk7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAorCXByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQorI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKQkJCQkJCVwKKwlwcmludGsoS0VSTl9JTkZPICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpCisjZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZykKIAogI2RlZmluZSBTTE9UX05BTUVfU0laRSAxMAogc3RydWN0IHNsb3QgewpAQCAtODMsMzQgKzg5LDI3IEBACiBzdHJ1Y3QgY29udHJvbGxlciB7CiAJc3RydWN0IG11dGV4IGNyaXRfc2VjdDsJCS8qIGNyaXRpY2FsIHNlY3Rpb24gbXV0ZXggKi8KIAlzdHJ1Y3QgbXV0ZXggY21kX2xvY2s7CQkvKiBjb21tYW5kIGxvY2sgKi8KLQlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqaHBjX2N0bHJfaGFuZGxlOyAvKiBIUEMgY29udHJvbGxlciBoYW5kbGUgKi8KIAlpbnQgbnVtX3Nsb3RzOwkJCS8qIE51bWJlciBvZiBzbG90cyBvbiBjdGxyICovCiAJaW50IHNsb3RfbnVtX2luYzsJCS8qIDEgb3IgLTEgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsb3RfbGlzdDsKIAlzdHJ1Y3QgaHBjX29wcyAqaHBjX29wczsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsJLyogc2xlZXAgJiB3YWtlIHByb2Nlc3MgKi8KLQl1OCBidXM7Ci0JdTggZGV2aWNlOwotCXU4IGZ1bmN0aW9uOwogCXU4IHNsb3RfZGV2aWNlX29mZnNldDsKLQl1OCBhZGRfc3VwcG9ydDsKIAl1MzIgcGNpeF9taXNjMl9yZWc7CS8qIGZvciBhbWQgcG9nbyBlcnJhdGEgKi8KLQllbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQ7CiAJdTMyIGZpcnN0X3Nsb3Q7CQkvKiBGaXJzdCBwaHlzaWNhbCBzbG90IG51bWJlciAqLwotCXU4IHNsb3RfYnVzOwkJLyogQnVzIHdoZXJlIHRoZSBzbG90cyBoYW5kbGVkIGJ5IHRoaXMgY29udHJvbGxlciBzaXQgKi8KIAl1MzIgY2FwX29mZnNldDsKIAl1bnNpZ25lZCBsb25nIG1taW9fYmFzZTsKIAl1bnNpZ25lZCBsb25nIG1taW9fc2l6ZTsKKwl2b2lkIF9faW9tZW0gKmNyZWc7CisJc3RydWN0IHRpbWVyX2xpc3QgcG9sbF90aW1lcjsKIH07CiAKLQogLyogRGVmaW5lIEFNRCBTSFBDIElEICAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9HT0xBTV83NDUwCTB4NzQ1MCAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfUE9HT183NDU4CTB4NzQ1OAogCiAvKiBBTUQgUENJWCBicmlkZ2UgcmVnaXN0ZXJzICovCi0KICNkZWZpbmUgUENJWF9NRU1fQkFTRV9MSU1JVF9PRkZTRVQJMHgxQwogI2RlZmluZSBQQ0lYX01JU0NJSV9PRkZTRVQJCTB4NDgKICNkZWZpbmUgUENJWF9NSVNDX0JSSURHRV9FUlJPUlNfT0ZGU0VUCTB4ODAKQEAgLTE0NSw4ICsxNDQsNiBAQAogI2RlZmluZSBQT1dFUk9OX1NUQVRFCQkJMwogI2RlZmluZSBQT1dFUk9GRl9TVEFURQkJCTQKIAotI2RlZmluZSBQQ0lfVE9fUENJX0JSSURHRV9DTEFTUwkJMHgwMDA2MDQwMAotCiAvKiBFcnJvciBtZXNzYWdlcyAqLwogI2RlZmluZSBJTlRFUkxPQ0tfT1BFTgkJCTB4MDAwMDAwMDIKICNkZWZpbmUgQUREX05PVF9TVVBQT1JURUQJCTB4MDAwMDAwMDMKQEAgLTE1OCw1MCArMTU1LDMyIEBACiAjZGVmaW5lIFdST05HX0JVU19GUkVRVUVOQ1kJCTB4MDAwMDAwMEQKICNkZWZpbmUgUE9XRVJfRkFJTFVSRQkJCTB4MDAwMDAwMEUKIAotI2RlZmluZSBSRU1PVkVfTk9UX1NVUFBPUlRFRAkJMHgwMDAwMDAwMwotCi0jZGVmaW5lIERJU0FCTEVfQ0FSRAkJCTEKLQotLyoKLSAqIGVycm9yIE1lc3NhZ2VzCi0gKi8KLSNkZWZpbmUgbXNnX2luaXRpYWxpemF0aW9uX2VycgkiSW5pdGlhbGl6YXRpb24gZmFpbHVyZSwgZXJyb3I9JWRcbiIKLSNkZWZpbmUgbXNnX2J1dHRvbl9vbgkJIlBDSSBzbG90ICMlcyAtIHBvd2VyaW5nIG9uIGR1ZSB0byBidXR0b24gcHJlc3MuXG4iCi0jZGVmaW5lIG1zZ19idXR0b25fb2ZmCQkiUENJIHNsb3QgIyVzIC0gcG93ZXJpbmcgb2ZmIGR1ZSB0byBidXR0b24gcHJlc3MuXG4iCi0jZGVmaW5lIG1zZ19idXR0b25fY2FuY2VsCSJQQ0kgc2xvdCAjJXMgLSBhY3Rpb24gY2FuY2VsZWQgZHVlIHRvIGJ1dHRvbiBwcmVzcy5cbiIKLQotLyogc3lzZnMgZnVuY3Rpb25zIGZvciB0aGUgaG90cGx1ZyBjb250cm9sbGVyIGluZm8gKi8KIGV4dGVybiBpbnQgX19tdXN0X2NoZWNrIHNocGNocF9jcmVhdGVfY3RybF9maWxlcyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7Ci0KLWV4dGVybiBpbnQJc2hwY2hwX3N5c2ZzX2VuYWJsZV9zbG90KHN0cnVjdCBzbG90ICpzbG90KTsKLWV4dGVybiBpbnQJc2hwY2hwX3N5c2ZzX2Rpc2FibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCk7Ci0KLWV4dGVybiB1OAlzaHBjaHBfaGFuZGxlX2F0dGVudGlvbl9idXR0b24odTggaHBfc2xvdCwgdm9pZCAqaW5zdF9pZCk7Ci1leHRlcm4gdTgJc2hwY2hwX2hhbmRsZV9zd2l0Y2hfY2hhbmdlKHU4IGhwX3Nsb3QsIHZvaWQgKmluc3RfaWQpOwotZXh0ZXJuIHU4CXNocGNocF9oYW5kbGVfcHJlc2VuY2VfY2hhbmdlKHU4IGhwX3Nsb3QsIHZvaWQgKmluc3RfaWQpOwotZXh0ZXJuIHU4CXNocGNocF9oYW5kbGVfcG93ZXJfZmF1bHQodTggaHBfc2xvdCwgdm9pZCAqaW5zdF9pZCk7Ci0KLS8qIHBjaSBmdW5jdGlvbnMgKi8KLWV4dGVybiBpbnQJc2hwY2hwX3NhdmVfY29uZmlnKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBpbnQgYnVzbnVtYmVyLCBpbnQgbnVtX2N0bHJfc2xvdHMsIGludCBmaXJzdF9kZXZpY2VfbnVtKTsKLWV4dGVybiBpbnQJc2hwY2hwX2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHNsb3QgKnBfc2xvdCk7Ci1leHRlcm4gaW50CXNocGNocF91bmNvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHNsb3QgKnBfc2xvdCk7Ci1leHRlcm4gdm9pZAlzaHBjaHBfcmVtb3ZlX2N0cmxfZmlsZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwotZXh0ZXJuIHZvaWQJY2xlYW51cF9zbG90cyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7Ci1leHRlcm4gdm9pZAlxdWV1ZV9wdXNoYnV0dG9uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQorZXh0ZXJuIHZvaWQgc2hwY2hwX3JlbW92ZV9jdHJsX2ZpbGVzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKTsKK2V4dGVybiBpbnQgc2hwY2hwX3N5c2ZzX2VuYWJsZV9zbG90KHN0cnVjdCBzbG90ICpzbG90KTsKK2V4dGVybiBpbnQgc2hwY2hwX3N5c2ZzX2Rpc2FibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCk7CitleHRlcm4gdTggc2hwY2hwX2hhbmRsZV9hdHRlbnRpb25fYnV0dG9uKHU4IGhwX3Nsb3QsIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKTsKK2V4dGVybiB1OCBzaHBjaHBfaGFuZGxlX3N3aXRjaF9jaGFuZ2UodTggaHBfc2xvdCwgc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOworZXh0ZXJuIHU4IHNocGNocF9oYW5kbGVfcHJlc2VuY2VfY2hhbmdlKHU4IGhwX3Nsb3QsIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKTsKK2V4dGVybiB1OCBzaHBjaHBfaGFuZGxlX3Bvd2VyX2ZhdWx0KHU4IGhwX3Nsb3QsIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKTsKK2V4dGVybiBpbnQgc2hwY2hwX2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHNsb3QgKnBfc2xvdCk7CitleHRlcm4gaW50IHNocGNocF91bmNvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHNsb3QgKnBfc2xvdCk7CitleHRlcm4gdm9pZCBjbGVhbnVwX3Nsb3RzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKTsKK2V4dGVybiB2b2lkIHF1ZXVlX3B1c2hidXR0b25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworZXh0ZXJuIGludCBzaHBjX2luaXQoIHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAKICNpZmRlZiBDT05GSUdfQUNQSQogc3RhdGljIGlubGluZSBpbnQgZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCQlzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgKmhwcCkKKwkJCQkJICAgICAgc3RydWN0IGhvdHBsdWdfcGFyYW1zICpocHApCiB7CiAJaWYgKEFDUElfRkFJTFVSRShhY3BpX2dldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZShkZXYtPmJ1cywgaHBwKSkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gMDsKIH0KLSNkZWZpbmUgZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShwZGV2KSBcCi0JZG8geyBcCi0JCWlmIChERVZJQ0VfQUNQSV9IQU5ETEUoJihwZGV2LT5kZXYpKSkgXAotCQkJYWNwaV9ydW5fb3NocChERVZJQ0VfQUNQSV9IQU5ETEUoJihwZGV2LT5kZXYpKSk7IFwKKyNkZWZpbmUgZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShwZGV2KQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoREVWSUNFX0FDUElfSEFORExFKCYocGRldi0+ZGV2KSkpCQkJXAorCQkJYWNwaV9ydW5fb3NocChERVZJQ0VfQUNQSV9IQU5ETEUoJihwZGV2LT5kZXYpKSk7XAogCX0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBnZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoZGV2LCBocHApICgtRU5PREVWKQpAQCAtMjIyLDEwOCArMjAxLDQwIEBACiAJdm9sYXRpbGUgdTMyIHNlcnJfbG9jOwogCXZvbGF0aWxlIHUzMiBzZXJyX2ludHJfZW5hYmxlOwogCXZvbGF0aWxlIHUzMiBzbG90MTsKLQl2b2xhdGlsZSB1MzIgc2xvdDI7Ci0Jdm9sYXRpbGUgdTMyIHNsb3QzOwotCXZvbGF0aWxlIHUzMiBzbG90NDsKLQl2b2xhdGlsZSB1MzIgc2xvdDU7Ci0Jdm9sYXRpbGUgdTMyIHNsb3Q2OwotCXZvbGF0aWxlIHUzMiBzbG90NzsKLQl2b2xhdGlsZSB1MzIgc2xvdDg7Ci0Jdm9sYXRpbGUgdTMyIHNsb3Q5OwotCXZvbGF0aWxlIHUzMiBzbG90MTA7Ci0Jdm9sYXRpbGUgdTMyIHNsb3QxMTsKLQl2b2xhdGlsZSB1MzIgc2xvdDEyOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIG9mZnNldHMgdG8gdGhlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGJhc2VkIG9uIHRoZSBhYm92ZSBzdHJ1Y3R1cmUgbGF5b3V0ICovCiBlbnVtIGN0cmxfb2Zmc2V0cyB7Ci0JQkFTRV9PRkZTRVQgPQlvZmZzZXRvZihzdHJ1Y3QgY3RybF9yZWcsIGJhc2Vfb2Zmc2V0KSwKLQlTTE9UX0FWQUlMMSA9CW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgc2xvdF9hdmFpbDEpLAotCVNMT1RfQVZBSUwyCT0Jb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBzbG90X2F2YWlsMiksCi0JU0xPVF9DT05GSUcgPQlvZmZzZXRvZihzdHJ1Y3QgY3RybF9yZWcsIHNsb3RfY29uZmlnKSwKLQlTRUNfQlVTX0NPTkZJRyA9CW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgc2VjX2J1c19jb25maWcpLAotCU1TSV9DVFJMCT0Jb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBtc2lfY3RybCksCi0JUFJPR19JTlRFUkZBQ0UgPQlvZmZzZXRvZihzdHJ1Y3QgY3RybF9yZWcsIHByb2dfaW50ZXJmYWNlKSwKLQlDTUQJCT0Jb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBjbWQpLAotCUNNRF9TVEFUVVMJPQlvZmZzZXRvZihzdHJ1Y3QgY3RybF9yZWcsIGNtZF9zdGF0dXMpLAotCUlOVFJfTE9DCT0gCW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgaW50cl9sb2MpLAotCVNFUlJfTE9DCT0gCW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgc2Vycl9sb2MpLAotCVNFUlJfSU5UUl9FTkFCTEUgPQlvZmZzZXRvZihzdHJ1Y3QgY3RybF9yZWcsIHNlcnJfaW50cl9lbmFibGUpLAotCVNMT1QxID0JCW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgc2xvdDEpLAotCVNMT1QyID0JCW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgc2xvdDIpLAotCVNMT1QzID0JCW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgc2xvdDMpLAotCVNMT1Q0ID0JCW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgc2xvdDQpLAotCVNMT1Q1ID0JCW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgc2xvdDUpLAotCVNMT1Q2ID0JCW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgc2xvdDYpLAkJCi0JU0xPVDcgPQkJb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBzbG90NyksCi0JU0xPVDggPQkJb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBzbG90OCksCi0JU0xPVDkgPQkJb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBzbG90OSksCi0JU0xPVDEwID0Jb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBzbG90MTApLAotCVNMT1QxMSA9CW9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgc2xvdDExKSwKLQlTTE9UMTIgPQlvZmZzZXRvZihzdHJ1Y3QgY3RybF9yZWcsIHNsb3QxMiksCisJQkFTRV9PRkZTRVQgCSA9IG9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgYmFzZV9vZmZzZXQpLAorCVNMT1RfQVZBSUwxIAkgPSBvZmZzZXRvZihzdHJ1Y3QgY3RybF9yZWcsIHNsb3RfYXZhaWwxKSwKKwlTTE9UX0FWQUlMMgkgPSBvZmZzZXRvZihzdHJ1Y3QgY3RybF9yZWcsIHNsb3RfYXZhaWwyKSwKKwlTTE9UX0NPTkZJRyAJID0gb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBzbG90X2NvbmZpZyksCisJU0VDX0JVU19DT05GSUcJID0gb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBzZWNfYnVzX2NvbmZpZyksCisJTVNJX0NUUkwJID0gb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBtc2lfY3RybCksCisJUFJPR19JTlRFUkZBQ0UgCSA9IG9mZnNldG9mKHN0cnVjdCBjdHJsX3JlZywgcHJvZ19pbnRlcmZhY2UpLAorCUNNRAkJID0gb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBjbWQpLAorCUNNRF9TVEFUVVMJID0gb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBjbWRfc3RhdHVzKSwKKwlJTlRSX0xPQwkgPSBvZmZzZXRvZihzdHJ1Y3QgY3RybF9yZWcsIGludHJfbG9jKSwKKwlTRVJSX0xPQwkgPSBvZmZzZXRvZihzdHJ1Y3QgY3RybF9yZWcsIHNlcnJfbG9jKSwKKwlTRVJSX0lOVFJfRU5BQkxFID0gb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBzZXJyX2ludHJfZW5hYmxlKSwKKwlTTE9UMQkJID0gb2Zmc2V0b2Yoc3RydWN0IGN0cmxfcmVnLCBzbG90MSksCiB9OwotdHlwZWRlZiB1OCgqcGhwX2ludHJfY2FsbGJhY2tfdCkgKHU4IGhwX3Nsb3QsIHZvaWQgKmluc3RhbmNlX2lkKTsKLXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zIHsKLQlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqcG5leHQ7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Ci0JdW5zaWduZWQgaW50IGlycTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkvKiBzcGlubG9jaydzICovCi0JdTMyIHNsb3RfZGV2aWNlX29mZnNldDsKLQl1MzIgbnVtX3Nsb3RzOwotICAgIAlzdHJ1Y3QgdGltZXJfbGlzdAlpbnRfcG9sbF90aW1lcjsJLyogQWRkZWQgZm9yIHBvbGwgZXZlbnQgKi8KLQlwaHBfaW50cl9jYWxsYmFja190IGF0dGVudGlvbl9idXR0b25fY2FsbGJhY2s7Ci0JcGhwX2ludHJfY2FsbGJhY2tfdCBzd2l0Y2hfY2hhbmdlX2NhbGxiYWNrOwotCXBocF9pbnRyX2NhbGxiYWNrX3QgcHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrOwotCXBocF9pbnRyX2NhbGxiYWNrX3QgcG93ZXJfZmF1bHRfY2FsbGJhY2s7Ci0Jdm9pZCAqY2FsbGJhY2tfaW5zdGFuY2VfaWQ7Ci0Jdm9pZCBfX2lvbWVtICpjcmVnOwkJCS8qIFB0ciB0byBjb250cm9sbGVyIHJlZ2lzdGVyIHNwYWNlICovCi19OwotLyogSW5saW5lIGZ1bmN0aW9ucyAqLwogCi0KLS8qIElubGluZSBmdW5jdGlvbnMgdG8gY2hlY2sgdGhlIHNhbml0eSBvZiBhIHBvaW50ZXIgdGhhdCBpcyBwYXNzZWQgdG8gdXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHNsb3RfcGFyYW5vaWFfY2hlY2sgKHN0cnVjdCBzbG90ICpzbG90LCBjb25zdCBjaGFyICpmdW5jdGlvbikKLXsKLQlpZiAoIXNsb3QpIHsKLQkJZGJnKCIlcyAtIHNsb3QgPT0gTlVMTCIsIGZ1bmN0aW9uKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoIXNsb3QtPmhvdHBsdWdfc2xvdCkgewotCQlkYmcoIiVzIC0gc2xvdC0+aG90cGx1Z19zbG90ID09IE5VTEwhIiwgZnVuY3Rpb24pOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbG90ICpnZXRfc2xvdCAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBjb25zdCBjaGFyICpmdW5jdGlvbikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsb3QgKmdldF9zbG90KHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCkKIHsgCi0Jc3RydWN0IHNsb3QgKnNsb3Q7Ci0KLQlpZiAoIWhvdHBsdWdfc2xvdCkgewotCQlkYmcoIiVzIC0gaG90cGx1Z19zbG90ID09IE5VTExcbiIsIGZ1bmN0aW9uKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0Jc2xvdCA9IChzdHJ1Y3Qgc2xvdCAqKWhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQlpZiAoc2xvdF9wYXJhbm9pYV9jaGVjayAoc2xvdCwgZnVuY3Rpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCXJldHVybiBzbG90OworCXJldHVybiBob3RwbHVnX3Nsb3QtPnByaXZhdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNsb3QgKnNocGNocF9maW5kX3Nsb3QgKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1OCBkZXZpY2UpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbG90ICpzaHBjaHBfZmluZF9zbG90KHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1OCBkZXZpY2UpCiB7CiAJc3RydWN0IHNsb3QgKnNsb3Q7CiAKLQlpZiAoIWN0cmwpCi0JCXJldHVybiBOVUxMOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90LCAmY3RybC0+c2xvdF9saXN0LCBzbG90X2xpc3QpIHsKIAkJaWYgKHNsb3QtPmRldmljZSA9PSBkZXZpY2UpCiAJCQlyZXR1cm4gc2xvdDsKIAl9CiAKIAllcnIoIiVzOiBzbG90IChkZXZpY2U9MHgleCkgbm90IGZvdW5kXG4iLCBfX0ZVTkNUSU9OX18sIGRldmljZSk7Ci0KIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtNDAwLDQ0ICszMTEsMjcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBfc2xvdC0+Y3RybC0+cGNpX2RldiwgUENJWF9NSVNDSUlfT0ZGU0VULCBwY2l4X21pc2MyX3RlbXApOwogfQogCi1lbnVtIHBocF9jdGxyX3R5cGUgewotCVBDSSwKLQlJU0EsCi0JQUNQSQotfTsKLQotaW50IHNocGNfaW5pdCggc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLQotaW50IHNocGNfZ2V0X2N0bHJfc2xvdF9jb25maWcoIHN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCQlpbnQgKm51bV9jdGxyX3Nsb3RzLAotCQlpbnQgKmZpcnN0X2RldmljZV9udW0sCi0JCWludCAqcGh5c2ljYWxfc2xvdF9udW0sCi0JCWludCAqdXBkb3duLAotCQlpbnQgKmZsYWdzKTsKLQogc3RydWN0IGhwY19vcHMgewotCWludAkoKnBvd2VyX29uX3Nsb3QgKQkJKHN0cnVjdCBzbG90ICpzbG90KTsKLQlpbnQJKCpzbG90X2VuYWJsZSApCQkJKHN0cnVjdCBzbG90ICpzbG90KTsKLQlpbnQJKCpzbG90X2Rpc2FibGUgKQkJKHN0cnVjdCBzbG90ICpzbG90KTsKLQlpbnQJKCpzZXRfYnVzX3NwZWVkX21vZGUpCShzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkKTsKLQlpbnQJKCpnZXRfcG93ZXJfc3RhdHVzKQkJKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqc3RhdHVzKTsKLQlpbnQJKCpnZXRfYXR0ZW50aW9uX3N0YXR1cykJKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqc3RhdHVzKTsKLQlpbnQJKCpzZXRfYXR0ZW50aW9uX3N0YXR1cykJKHN0cnVjdCBzbG90ICpzbG90LCB1OCBzdGF0dXMpOwotCWludAkoKmdldF9sYXRjaF9zdGF0dXMpCQkoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICpzdGF0dXMpOwotCWludAkoKmdldF9hZGFwdGVyX3N0YXR1cykJKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqc3RhdHVzKTsKLQotCWludAkoKmdldF9tYXhfYnVzX3NwZWVkKQkoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqc3BlZWQpOwotCWludAkoKmdldF9jdXJfYnVzX3NwZWVkKQkoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqc3BlZWQpOwotCWludAkoKmdldF9hZGFwdGVyX3NwZWVkKQkoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqc3BlZWQpOwotCWludAkoKmdldF9tb2RlMV9FQ0NfY2FwKQkoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICptb2RlKTsKLQlpbnQJKCpnZXRfcHJvZ19pbnQpCQkJKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqcHJvZ19pbnQpOwotCi0JaW50CSgqcXVlcnlfcG93ZXJfZmF1bHQpCShzdHJ1Y3Qgc2xvdCAqc2xvdCk7Ci0Jdm9pZAkoKmdyZWVuX2xlZF9vbikJCShzdHJ1Y3Qgc2xvdCAqc2xvdCk7Ci0Jdm9pZAkoKmdyZWVuX2xlZF9vZmYpCShzdHJ1Y3Qgc2xvdCAqc2xvdCk7Ci0Jdm9pZAkoKmdyZWVuX2xlZF9ibGluaykJKHN0cnVjdCBzbG90ICpzbG90KTsKLQl2b2lkCSgqcmVsZWFzZV9jdGxyKQkJKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKTsKLQlpbnQgKCpjaGVja19jbWRfc3RhdHVzKQkJKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKTsKKwlpbnQgKCpwb3dlcl9vbl9zbG90KShzdHJ1Y3Qgc2xvdCAqc2xvdCk7CisJaW50ICgqc2xvdF9lbmFibGUpKHN0cnVjdCBzbG90ICpzbG90KTsKKwlpbnQgKCpzbG90X2Rpc2FibGUpKHN0cnVjdCBzbG90ICpzbG90KTsKKwlpbnQgKCpzZXRfYnVzX3NwZWVkX21vZGUpKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQpOworCWludCAoKmdldF9wb3dlcl9zdGF0dXMpKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqc3RhdHVzKTsKKwlpbnQgKCpnZXRfYXR0ZW50aW9uX3N0YXR1cykoc3RydWN0IHNsb3QgKnNsb3QsIHU4ICpzdGF0dXMpOworCWludCAoKnNldF9hdHRlbnRpb25fc3RhdHVzKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggc3RhdHVzKTsKKwlpbnQgKCpnZXRfbGF0Y2hfc3RhdHVzKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKnN0YXR1cyk7CisJaW50ICgqZ2V0X2FkYXB0ZXJfc3RhdHVzKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKnN0YXR1cyk7CisJaW50ICgqZ2V0X21heF9idXNfc3BlZWQpKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnNwZWVkKTsKKwlpbnQgKCpnZXRfY3VyX2J1c19zcGVlZCkoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqc3BlZWQpOworCWludCAoKmdldF9hZGFwdGVyX3NwZWVkKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICpzcGVlZCk7CisJaW50ICgqZ2V0X21vZGUxX0VDQ19jYXApKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqbW9kZSk7CisJaW50ICgqZ2V0X3Byb2dfaW50KShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKnByb2dfaW50KTsKKwlpbnQgKCpxdWVyeV9wb3dlcl9mYXVsdCkoc3RydWN0IHNsb3QgKnNsb3QpOworCXZvaWQgKCpncmVlbl9sZWRfb24pKHN0cnVjdCBzbG90ICpzbG90KTsKKwl2b2lkICgqZ3JlZW5fbGVkX29mZikoc3RydWN0IHNsb3QgKnNsb3QpOworCXZvaWQgKCpncmVlbl9sZWRfYmxpbmspKHN0cnVjdCBzbG90ICpzbG90KTsKKwl2b2lkICgqcmVsZWFzZV9jdGxyKShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7CisJaW50ICgqY2hlY2tfY21kX3N0YXR1cykoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwogfTsKIAogI2VuZGlmCQkJCS8qIF9TSFBDSFBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jCmluZGV4IDRlYWM4NWIuLjU5MGNkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKQEAgLTEwNCwyMyArMTA0LDYgQEAKIAkJIHNsb3QtPmJ1cywgc2xvdC0+bnVtYmVyKTsKIH0KIAotCi0KLQotc3RhdGljIGludAotc2hwY2hwcm1fZ2V0X3BoeXNpY2FsX3Nsb3RfbnVtYmVyKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1MzIgKnN1biwKLQkJCQl1OCBidXNudW0sIHU4IGRldm51bSkKLXsKLQlpbnQgb2Zmc2V0ID0gZGV2bnVtIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwotCi0JZGJnKCIlczogY3RybC0+c2xvdF9udW1faW5jICVkLCBvZmZzZXQgJWRcbiIsIF9fRlVOQ1RJT05fXywKLQkJCWN0cmwtPnNsb3RfbnVtX2luYywgb2Zmc2V0KTsKLQkqc3VuID0gKHU4KSAoY3RybC0+Zmlyc3Rfc2xvdCArIGN0cmwtPnNsb3RfbnVtX2luYyAqb2Zmc2V0KTsKLQlyZXR1cm4gMDsKLX0KLQotCi0KIHN0YXRpYyBpbnQgaW5pdF9zbG90cyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdDsKQEAgLTEyOCw3ICsxMTEsNiBAQAogCXN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAqaW5mbzsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAlpbnQgaTsKLQl1MzIgc3VuOwogCiAJZm9yIChpID0gMDsgaSA8IGN0cmwtPm51bV9zbG90czsgaSsrKSB7CiAJCXNsb3QgPSBremFsbG9jKHNpemVvZigqc2xvdCksIEdGUF9LRVJORUwpOwpAQCAtMTQ5LDE2ICsxMzEsMTEgQEAKIAogCQlzbG90LT5ocF9zbG90ID0gaTsKIAkJc2xvdC0+Y3RybCA9IGN0cmw7Ci0JCXNsb3QtPmJ1cyA9IGN0cmwtPnNsb3RfYnVzOworCQlzbG90LT5idXMgPSBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyOwogCQlzbG90LT5kZXZpY2UgPSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQgKyBpOwogCQlzbG90LT5ocGNfb3BzID0gY3RybC0+aHBjX29wczsKKwkJc2xvdC0+bnVtYmVyID0gY3RybC0+Zmlyc3Rfc2xvdCArIChjdHJsLT5zbG90X251bV9pbmMgKiBpKTsKIAkJbXV0ZXhfaW5pdCgmc2xvdC0+bG9jayk7Ci0KLQkJaWYgKHNocGNocHJtX2dldF9waHlzaWNhbF9zbG90X251bWJlcihjdHJsLCAmc3VuLAotCQkJCQkJICAgICAgc2xvdC0+YnVzLCBzbG90LT5kZXZpY2UpKQotCQkJZ290byBlcnJvcl9pbmZvOwotCi0JCXNsb3QtPm51bWJlciA9IHN1bjsKIAkJSU5JVF9ERUxBWUVEX1dPUksoJnNsb3QtPndvcmssIHF1ZXVlX3B1c2hidXR0b25fd29yayk7CiAKIAkJLyogcmVnaXN0ZXIgdGhpcyBzbG90IHdpdGggdGhlIGhvdHBsdWcgcGNpIGNvcmUgKi8KQEAgLTIxMSw0MiArMTg4LDEyIEBACiAJfQogfQogCi1zdGF0aWMgaW50IGdldF9jdGxyX3Nsb3RfY29uZmlnKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQotewotCWludCBudW1fY3Rscl9zbG90czsKLQlpbnQgZmlyc3RfZGV2aWNlX251bTsKLQlpbnQgcGh5c2ljYWxfc2xvdF9udW07Ci0JaW50IHVwZG93bjsKLQlpbnQgcmM7Ci0JaW50IGZsYWdzOwotCi0JcmMgPSBzaHBjX2dldF9jdGxyX3Nsb3RfY29uZmlnKGN0cmwsICZudW1fY3Rscl9zbG90cywKLQkJCQkgICAgICAgJmZpcnN0X2RldmljZV9udW0sICZwaHlzaWNhbF9zbG90X251bSwKLQkJCQkgICAgICAgJnVwZG93biwgJmZsYWdzKTsKLQlpZiAocmMpIHsKLQkJZXJyKCIlczogZ2V0X2N0bHJfc2xvdF9jb25maWcgZmFpbCBmb3IgYjpkICgleDoleClcbiIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIGN0cmwtPmJ1cywgY3RybC0+ZGV2aWNlKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWN0cmwtPm51bV9zbG90cyA9IG51bV9jdGxyX3Nsb3RzOwotCWN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCA9IGZpcnN0X2RldmljZV9udW07Ci0JY3RybC0+Zmlyc3Rfc2xvdCA9IHBoeXNpY2FsX3Nsb3RfbnVtOwotCWN0cmwtPnNsb3RfbnVtX2luYyA9IHVwZG93bjsJCS8qIGVpdGhlciAtMSBvciAxICovCi0KLQlkYmcoIiVzOiBudW1fc2xvdCgweCV4KSAxc3RfZGV2KDB4JXgpIHBzbigweCV4KSB1cGRvd24oJWQpIGZvciBiOmQgIgotCSAgICAiKCV4OiV4KVxuIiwgX19GVU5DVElPTl9fLCBudW1fY3Rscl9zbG90cywgZmlyc3RfZGV2aWNlX251bSwKLQkgICAgcGh5c2ljYWxfc2xvdF9udW0sIHVwZG93biwgY3RybC0+YnVzLCBjdHJsLT5kZXZpY2UpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBzZXRfYXR0ZW50aW9uX3N0YXR1cyAtIFR1cm5zIHRoZSBBbWJlciBMRUQgZm9yIGEgc2xvdCBvbiwgb2ZmIG9yIGJsaW5rCiAgKi8KIHN0YXRpYyBpbnQgc2V0X2F0dGVudGlvbl9zdGF0dXMgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgdTggc3RhdHVzKQogewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKIAogCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIApAQCAtMjU4LDcgKzIwNSw3IEBACiAKIHN0YXRpYyBpbnQgZW5hYmxlX3Nsb3QgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCkKIHsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCwgX19GVU5DVElPTl9fKTsKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAKIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKQEAgLTI2Nyw3ICsyMTQsNyBAQAogCiBzdGF0aWMgaW50IGRpc2FibGVfc2xvdCAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90KQogewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKIAogCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIApAQCAtMjc2LDcgKzIyMyw3IEBACiAKIHN0YXRpYyBpbnQgZ2V0X3Bvd2VyX3N0YXR1cyAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCB1OCAqdmFsdWUpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QsIF9fRlVOQ1RJT05fXyk7CisJc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QpOwogCWludCByZXR2YWw7CiAKIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CkBAIC0yOTAsNyArMjM3LDcgQEAKIAogc3RhdGljIGludCBnZXRfYXR0ZW50aW9uX3N0YXR1cyAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCB1OCAqdmFsdWUpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QsIF9fRlVOQ1RJT05fXyk7CisJc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QpOwogCWludCByZXR2YWw7CiAKIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CkBAIC0zMDQsNyArMjUxLDcgQEAKIAogc3RhdGljIGludCBnZXRfbGF0Y2hfc3RhdHVzIChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIHU4ICp2YWx1ZSkKIHsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCwgX19GVU5DVElPTl9fKTsKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAJaW50IHJldHZhbDsKIAogCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKQEAgLTMxOCw3ICsyNjUsNyBAQAogCiBzdGF0aWMgaW50IGdldF9hZGFwdGVyX3N0YXR1cyAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCB1OCAqdmFsdWUpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QsIF9fRlVOQ1RJT05fXyk7CisJc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QpOwogCWludCByZXR2YWw7CiAKIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CkBAIC0zMzIsNyArMjc5LDcgQEAKIAogc3RhdGljIGludCBnZXRfYWRkcmVzcyAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCB1MzIgKnZhbHVlKQogewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gc2xvdC0+Y3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGU7CiAKIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CkBAIC0zNDQsNyArMjkxLDcgQEAKIAogc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZCAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQogewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90KTsKIAlpbnQgcmV0dmFsOwogCiAJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwpAQCAtMzU4LDcgKzMwNSw3IEBACiAKIHN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKIHsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCwgX19GVU5DVElPTl9fKTsKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7CiAJaW50IHJldHZhbDsKIAogCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKQEAgLTM4NSw5ICszMzIsNiBAQAogewogCWludCByYzsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybDsKLQlzdHJ1Y3Qgc2xvdCAqdF9zbG90OwotCWludCBmaXJzdF9kZXZpY2VfbnVtOwkvKiBmaXJzdCBQQ0kgZGV2aWNlIG51bWJlciAqLwotCWludCBudW1fY3Rscl9zbG90czsJLyogbnVtYmVyIG9mIHNsb3RzIGltcGxlbWVudGVkICovCiAKIAlpZiAoIWlzX3NocGNfY2FwYWJsZShwZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00MDgsNDcgKzM1MiwxMyBAQAogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGN0cmwpOwogCi0JY3RybC0+YnVzID0gcGRldi0+YnVzLT5udW1iZXI7Ci0JY3RybC0+c2xvdF9idXMgPSBwZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyOwotCWN0cmwtPmRldmljZSA9IFBDSV9TTE9UKHBkZXYtPmRldmZuKTsKLQljdHJsLT5mdW5jdGlvbiA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKLQotCWRiZygiY3RybCBidXM9MHgleCwgZGV2aWNlPSV4LCBmdW5jdGlvbj0leCwgaXJxPSV4XG4iLAotCSAgICBjdHJsLT5idXMsIGN0cmwtPmRldmljZSwgY3RybC0+ZnVuY3Rpb24sIHBkZXYtPmlycSk7Ci0KLQkvKgotCSAqIFNhdmUgY29uZmlndXJhdGlvbiBoZWFkZXJzIGZvciB0aGlzIGFuZCBzdWJvcmRpbmF0ZSBQQ0kgYnVzZXMKLQkgKi8KLQlyYyA9IGdldF9jdGxyX3Nsb3RfY29uZmlnKGN0cmwpOwotCWlmIChyYykgewotCQllcnIobXNnX2luaXRpYWxpemF0aW9uX2VyciwgcmMpOwotCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9jdGxyOwotCX0KLQlmaXJzdF9kZXZpY2VfbnVtID0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwotCW51bV9jdGxyX3Nsb3RzID0gY3RybC0+bnVtX3Nsb3RzOwotCi0JY3RybC0+YWRkX3N1cHBvcnQgPSAxOwotCiAJLyogU2V0dXAgdGhlIHNsb3QgaW5mb3JtYXRpb24gc3RydWN0dXJlcyAqLwogCXJjID0gaW5pdF9zbG90cyhjdHJsKTsKIAlpZiAocmMpIHsKLQkJZXJyKG1zZ19pbml0aWFsaXphdGlvbl9lcnIsIDYpOworCQllcnIoIiVzOiBzbG90IGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgU0hQQ19NT0RVTEVfTkFNRSk7CiAJCWdvdG8gZXJyX291dF9yZWxlYXNlX2N0bHI7CiAJfQogCi0JLyogTm93IGhwY19mdW5jdGlvbnMgKHNsb3QtPmhwY19vcHMtPmZ1bmN0aW9ucykgYXJlIHJlYWR5ICAqLwotCXRfc2xvdCA9IHNocGNocF9maW5kX3Nsb3QoY3RybCwgZmlyc3RfZGV2aWNlX251bSk7Ci0KLQkvKiBDaGVjayBmb3Igb3BlcmF0aW9uIGJ1cyBzcGVlZCAqLwotCXJjID0gdF9zbG90LT5ocGNfb3BzLT5nZXRfY3VyX2J1c19zcGVlZCh0X3Nsb3QsICZjdHJsLT5zcGVlZCk7Ci0JZGJnKCIlczogdF9zbG90LT5ocF9zbG90ICV4XG4iLCBfX0ZVTkNUSU9OX18sdF9zbG90LT5ocF9zbG90KTsKLQotCWlmIChyYyB8fCBjdHJsLT5zcGVlZCA9PSBQQ0lfU1BFRURfVU5LTk9XTikgewotCQllcnIoU0hQQ19NT0RVTEVfTkFNRSAiOiBDYW4ndCBnZXQgY3VycmVudCBidXMgc3BlZWQuICIKLQkJICAgICJTZXQgdG8gMzNNSHogUENJLlxuIik7Ci0JCWN0cmwtPnNwZWVkID0gUENJX1NQRUVEXzMzTUh6OwotCX0KLQogCXJjID0gc2hwY2hwX2NyZWF0ZV9jdHJsX2ZpbGVzKGN0cmwpOwogCWlmIChyYykKIAkJZ290byBlcnJfY2xlYW51cF9zbG90czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYwppbmRleCAxNThhYzc4Li42YmI4NDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCkBAIC01Nyw5ICs1Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4IHNocGNocF9oYW5kbGVfYXR0ZW50aW9uX2J1dHRvbih1OCBocF9zbG90LCB2b2lkICppbnN0X2lkKQordTggc2hwY2hwX2hhbmRsZV9hdHRlbnRpb25fYnV0dG9uKHU4IGhwX3Nsb3QsIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogewotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gKHN0cnVjdCBjb250cm9sbGVyICopIGluc3RfaWQ7CiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKIAl1MzIgZXZlbnRfdHlwZTsKIApAQCAtODEsOSArODAsOCBAQAogCiB9CiAKLXU4IHNocGNocF9oYW5kbGVfc3dpdGNoX2NoYW5nZSh1OCBocF9zbG90LCB2b2lkICppbnN0X2lkKQordTggc2hwY2hwX2hhbmRsZV9zd2l0Y2hfY2hhbmdlKHU4IGhwX3Nsb3QsIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogewotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gKHN0cnVjdCBjb250cm9sbGVyICopIGluc3RfaWQ7CiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKIAl1OCBnZXRzdGF0dXM7CiAJdTMyIGV2ZW50X3R5cGU7CkBAIC0xMjAsOSArMTE4LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotdTggc2hwY2hwX2hhbmRsZV9wcmVzZW5jZV9jaGFuZ2UodTggaHBfc2xvdCwgdm9pZCAqaW5zdF9pZCkKK3U4IHNocGNocF9oYW5kbGVfcHJlc2VuY2VfY2hhbmdlKHU4IGhwX3Nsb3QsIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogewotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gKHN0cnVjdCBjb250cm9sbGVyICopIGluc3RfaWQ7CiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKIAl1MzIgZXZlbnRfdHlwZTsKIApAQCAtMTU0LDkgKzE1MSw4IEBACiAJcmV0dXJuIDE7CiB9CiAKLXU4IHNocGNocF9oYW5kbGVfcG93ZXJfZmF1bHQodTggaHBfc2xvdCwgdm9pZCAqaW5zdF9pZCkKK3U4IHNocGNocF9oYW5kbGVfcG93ZXJfZmF1bHQodTggaHBfc2xvdCwgc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSAoc3RydWN0IGNvbnRyb2xsZXIgKikgaW5zdF9pZDsKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwogCXUzMiBldmVudF90eXBlOwogCkBAIC00OTcsMTAgKzQ5MywxMiBAQAogCQlwX3Nsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAkJaWYgKGdldHN0YXR1cykgewogCQkJcF9zbG90LT5zdGF0ZSA9IEJMSU5LSU5HT0ZGX1NUQVRFOwotCQkJaW5mbyhtc2dfYnV0dG9uX29mZiwgcF9zbG90LT5uYW1lKTsKKwkJCWluZm8oIlBDSSBzbG90ICMlcyAtIHBvd2VyaW5nIG9mZiBkdWUgdG8gYnV0dG9uICIKKwkJCSAgICAgInByZXNzLlxuIiwgcF9zbG90LT5uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCXBfc2xvdC0+c3RhdGUgPSBCTElOS0lOR09OX1NUQVRFOwotCQkJaW5mbyhtc2dfYnV0dG9uX29uLCBwX3Nsb3QtPm5hbWUpOworCQkJaW5mbygiUENJIHNsb3QgIyVzIC0gcG93ZXJpbmcgb24gZHVlIHRvIGJ1dHRvbiAiCisJCQkgICAgICJwcmVzcy5cbiIsIHBfc2xvdC0+bmFtZSk7CiAJCX0KIAkJLyogYmxpbmsgZ3JlZW4gTEVEIGFuZCB0dXJuIG9mZiBhbWJlciAqLwogCQlwX3Nsb3QtPmhwY19vcHMtPmdyZWVuX2xlZF9ibGluayhwX3Nsb3QpOwpAQCAtNTIzLDcgKzUyMSw4IEBACiAJCWVsc2UKIAkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29mZihwX3Nsb3QpOwogCQlwX3Nsb3QtPmhwY19vcHMtPnNldF9hdHRlbnRpb25fc3RhdHVzKHBfc2xvdCwgMCk7Ci0JCWluZm8obXNnX2J1dHRvbl9jYW5jZWwsIHBfc2xvdC0+bmFtZSk7CisJCWluZm8oIlBDSSBzbG90ICMlcyAtIGFjdGlvbiBjYW5jZWxlZCBkdWUgdG8gYnV0dG9uIHByZXNzXG4iLAorCQkgICAgIHBfc2xvdC0+bmFtZSk7CiAJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJPRkZfU1RBVEU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jCmluZGV4IDgzYTUyMjYuLmI3YmVkZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jCkBAIC0yMTIsNDQgKzIxMiw0MCBAQAogI2RlZmluZSBTTE9UX1NFUlJfSU5UX01BU0sJMHgzCiAKIERFRklORV9EQkdfQlVGRkVSCQkvKiBEZWJ1ZyBzdHJpbmcgYnVmZmVyIGZvciBlbnRpcmUgSFBDIGRlZmluZWQgaGVyZSAqLwotc3RhdGljIHN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3Rscl9saXN0X2hlYWQ7CS8qIEhQQyBzdGF0ZSBsaW5rZWQgbGlzdCAqLwotc3RhdGljIGludCBjdGxyX3NlcV9udW0gPSAwOwkvKiBDb250cm9sbGVyIHNlcXVlbmMgIyAqLwotc3RhdGljIHNwaW5sb2NrX3QgbGlzdF9sb2NrOwotCiBzdGF0aWMgYXRvbWljX3Qgc2hwY2hwX251bV9jb250cm9sbGVycyA9IEFUT01JQ19JTklUKDApOwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2hwY19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyB2b2lkIHN0YXJ0X2ludF9wb2xsX3RpbWVyKHN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3RsciwgaW50IHNlYyk7CitzdGF0aWMgdm9pZCBzdGFydF9pbnRfcG9sbF90aW1lcihzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgaW50IHNlYyk7CiBzdGF0aWMgaW50IGhwY19jaGVja19jbWRfc3RhdHVzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKTsKIAogc3RhdGljIGlubGluZSB1OCBzaHBjX3JlYWRiKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBpbnQgcmVnKQogewotCXJldHVybiByZWFkYihjdHJsLT5ocGNfY3Rscl9oYW5kbGUtPmNyZWcgKyByZWcpOworCXJldHVybiByZWFkYihjdHJsLT5jcmVnICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNocGNfd3JpdGViKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBpbnQgcmVnLCB1OCB2YWwpCiB7Ci0Jd3JpdGViKHZhbCwgY3RybC0+aHBjX2N0bHJfaGFuZGxlLT5jcmVnICsgcmVnKTsKKwl3cml0ZWIodmFsLCBjdHJsLT5jcmVnICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB1MTYgc2hwY19yZWFkdyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgaW50IHJlZykKIHsKLQlyZXR1cm4gcmVhZHcoY3RybC0+aHBjX2N0bHJfaGFuZGxlLT5jcmVnICsgcmVnKTsKKwlyZXR1cm4gcmVhZHcoY3RybC0+Y3JlZyArIHJlZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHBjX3dyaXRldyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgaW50IHJlZywgdTE2IHZhbCkKIHsKLQl3cml0ZXcodmFsLCBjdHJsLT5ocGNfY3Rscl9oYW5kbGUtPmNyZWcgKyByZWcpOworCXdyaXRldyh2YWwsIGN0cmwtPmNyZWcgKyByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBzaHBjX3JlYWRsKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBpbnQgcmVnKQogewotCXJldHVybiByZWFkbChjdHJsLT5ocGNfY3Rscl9oYW5kbGUtPmNyZWcgKyByZWcpOworCXJldHVybiByZWFkbChjdHJsLT5jcmVnICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNocGNfd3JpdGVsKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBpbnQgcmVnLCB1MzIgdmFsKQogewotCXdyaXRlbCh2YWwsIGN0cmwtPmhwY19jdGxyX2hhbmRsZS0+Y3JlZyArIHJlZyk7CisJd3JpdGVsKHZhbCwgY3RybC0+Y3JlZyArIHJlZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNocGNfaW5kaXJlY3RfcmVhZChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgaW50IGluZGV4LApAQCAtMjY4LDIxICsyNjQsMjAgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBpbnRlcnJ1cHQgcG9sbGluZyB0aW1lb3V0IGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdm9pZCBpbnRfcG9sbF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgbHBocF9jdGxyKQorc3RhdGljIHZvaWQgaW50X3BvbGxfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKnBocF9jdGxyID0KLQkJKHN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICopbHBocF9jdGxyOworCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gKHN0cnVjdCBjb250cm9sbGVyICopZGF0YTsKIAogCURCR19FTlRFUl9ST1VUSU5FCiAKIAkvKiBQb2xsIGZvciBpbnRlcnJ1cHQgZXZlbnRzLiAgcmVncyA9PSBOVUxMID0+IHBvbGxpbmcgKi8KLQlzaHBjX2lzcigwLCBwaHBfY3Rsci0+Y2FsbGJhY2tfaW5zdGFuY2VfaWQpOworCXNocGNfaXNyKDAsIGN0cmwpOwogCi0JaW5pdF90aW1lcigmcGhwX2N0bHItPmludF9wb2xsX3RpbWVyKTsKKwlpbml0X3RpbWVyKCZjdHJsLT5wb2xsX3RpbWVyKTsKIAlpZiAoIXNocGNocF9wb2xsX3RpbWUpCiAJCXNocGNocF9wb2xsX3RpbWUgPSAyOyAvKiBkZWZhdWx0IHBvbGxpbmcgaW50ZXJ2YWwgaXMgMiBzZWMgKi8KIAotCXN0YXJ0X2ludF9wb2xsX3RpbWVyKHBocF9jdGxyLCBzaHBjaHBfcG9sbF90aW1lKTsKKwlzdGFydF9pbnRfcG9sbF90aW1lcihjdHJsLCBzaHBjaHBfcG9sbF90aW1lKTsKIAogCURCR19MRUFWRV9ST1VUSU5FCiB9CkBAIC0yOTAsMTYgKzI4NSwxNiBAQAogLyoKICAqIFRoaXMgZnVuY3Rpb24gc3RhcnRzIHRoZSBpbnRlcnJ1cHQgcG9sbGluZyB0aW1lci4KICAqLwotc3RhdGljIHZvaWQgc3RhcnRfaW50X3BvbGxfdGltZXIoc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKnBocF9jdGxyLCBpbnQgc2VjKQorc3RhdGljIHZvaWQgc3RhcnRfaW50X3BvbGxfdGltZXIoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIGludCBzZWMpCiB7CiAJLyogQ2xhbXAgdG8gc2FuZSB2YWx1ZSAqLwogCWlmICgoc2VjIDw9IDApIHx8IChzZWMgPiA2MCkpCiAJCXNlYyA9IDI7CiAKLQlwaHBfY3Rsci0+aW50X3BvbGxfdGltZXIuZnVuY3Rpb24gPSAmaW50X3BvbGxfdGltZW91dDsKLQlwaHBfY3Rsci0+aW50X3BvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBocF9jdGxyOwotCXBocF9jdGxyLT5pbnRfcG9sbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIHNlYyAqIEhaOwotCWFkZF90aW1lcigmcGhwX2N0bHItPmludF9wb2xsX3RpbWVyKTsKKwljdHJsLT5wb2xsX3RpbWVyLmZ1bmN0aW9uID0gJmludF9wb2xsX3RpbWVvdXQ7CisJY3RybC0+cG9sbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpY3RybDsKKwljdHJsLT5wb2xsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgc2VjICogSFo7CisJYWRkX3RpbWVyKCZjdHJsLT5wb2xsX3RpbWVyKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfY3RybF9idXN5KHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQpAQCAtNjY2LDMzICs2NjEsOCBAQAogCXNocGNfd3JpdGVfY21kKHNsb3QsIHNsb3QtPmhwX3Nsb3QsIFNFVF9QV1JfQkxJTkspOwogfQogCi1pbnQgc2hwY19nZXRfY3Rscl9zbG90X2NvbmZpZyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlpbnQgKm51bV9jdGxyX3Nsb3RzLAkvKiBudW1iZXIgb2Ygc2xvdHMgaW4gdGhpcyBIUEMJCQkqLwotCWludCAqZmlyc3RfZGV2aWNlX251bSwJLyogUENJIGRldiBudW0gb2YgdGhlIGZpcnN0IHNsb3QgaW4gdGhpcyBTSFBDCSovCi0JaW50ICpwaHlzaWNhbF9zbG90X251bSwJLyogcGh5IHNsb3QgbnVtIG9mIHRoZSBmaXJzdCBzbG90IGluIHRoaXMgU0hQQwkqLwotCWludCAqdXBkb3duLAkJLyogcGh5c2ljYWxfc2xvdF9udW0gaW5jcmVhbWVudDogMSBvciAtMQkqLwotCWludCAqZmxhZ3MpCi17Ci0JdTMyIHNsb3RfY29uZmlnOwotCi0JREJHX0VOVEVSX1JPVVRJTkUgCi0KLQlzbG90X2NvbmZpZyA9IHNocGNfcmVhZGwoY3RybCwgU0xPVF9DT05GSUcpOwotCSpmaXJzdF9kZXZpY2VfbnVtID0gKHNsb3RfY29uZmlnICYgRklSU1RfREVWX05VTSkgPj4gODsKLQkqbnVtX2N0bHJfc2xvdHMgPSBzbG90X2NvbmZpZyAmIFNMT1RfTlVNOwotCSpwaHlzaWNhbF9zbG90X251bSA9IChzbG90X2NvbmZpZyAmIFBTTikgPj4gMTY7Ci0JKnVwZG93biA9ICgoc2xvdF9jb25maWcgJiBVUERPV04pID4+IDI5KSA/IDEgOiAtMTsKLQotCWRiZygiJXM6IHBoeXNpY2FsX3Nsb3RfbnVtID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgKnBoeXNpY2FsX3Nsb3RfbnVtKTsKLQotCURCR19MRUFWRV9ST1VUSU5FIAotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBocGNfcmVsZWFzZV9jdGxyKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogewotCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3RsciA9IGN0cmwtPmhwY19jdGxyX2hhbmRsZTsKLQlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqcCwgKnBfcHJldjsKIAlpbnQgaTsKIAl1MzIgc2xvdF9yZWcsIHNlcnJfaW50OwogCkBAIC03MjIsNDAgKzY5MiwxNSBAQAogCXNlcnJfaW50ICY9IH5TRVJSX0lOVFJfUlNWRFpfTUFTSzsKIAlzaHBjX3dyaXRlbChjdHJsLCBTRVJSX0lOVFJfRU5BQkxFLCBzZXJyX2ludCk7CiAKLQlpZiAoc2hwY2hwX3BvbGxfbW9kZSkgewotCSAgICBkZWxfdGltZXIoJnBocF9jdGxyLT5pbnRfcG9sbF90aW1lcik7Ci0JfSBlbHNlIHsJCi0JCWlmIChwaHBfY3Rsci0+aXJxKSB7Ci0JCQlmcmVlX2lycShwaHBfY3Rsci0+aXJxLCBjdHJsKTsKLQkJCXBocF9jdGxyLT5pcnEgPSAwOwotCQkJcGNpX2Rpc2FibGVfbXNpKHBocF9jdGxyLT5wY2lfZGV2KTsKLQkJfQorCWlmIChzaHBjaHBfcG9sbF9tb2RlKQorCQlkZWxfdGltZXIoJmN0cmwtPnBvbGxfdGltZXIpOworCWVsc2UgeworCQlmcmVlX2lycShjdHJsLT5wY2lfZGV2LT5pcnEsIGN0cmwpOworCQlwY2lfZGlzYWJsZV9tc2koY3RybC0+cGNpX2Rldik7CiAJfQogCi0JaWYgKHBocF9jdGxyLT5wY2lfZGV2KSB7Ci0JCWlvdW5tYXAocGhwX2N0bHItPmNyZWcpOwotCQlyZWxlYXNlX21lbV9yZWdpb24oY3RybC0+bW1pb19iYXNlLCBjdHJsLT5tbWlvX3NpemUpOwotCQlwaHBfY3Rsci0+cGNpX2RldiA9IE5VTEw7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZsaXN0X2xvY2spOwotCXAgPSBwaHBfY3Rscl9saXN0X2hlYWQ7Ci0JcF9wcmV2ID0gTlVMTDsKLQl3aGlsZSAocCkgewotCQlpZiAocCA9PSBwaHBfY3RscikgewotCQkJaWYgKHBfcHJldikKLQkJCQlwX3ByZXYtPnBuZXh0ID0gcC0+cG5leHQ7Ci0JCQllbHNlCi0JCQkJcGhwX2N0bHJfbGlzdF9oZWFkID0gcC0+cG5leHQ7Ci0JCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCXBfcHJldiA9IHA7Ci0JCQlwID0gcC0+cG5leHQ7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmxpc3RfbG9jayk7Ci0KLQlrZnJlZShwaHBfY3Rscik7CisJaW91bm1hcChjdHJsLT5jcmVnKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oY3RybC0+bW1pb19iYXNlLCBjdHJsLT5tbWlvX3NpemUpOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGNvbnRyb2xsZXIgdG8gYmUgcmVsZWFzZWQsIGRlc3Ryb3kgdGhlCkBAIC03NjQsOCArNzA5LDcgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2hwY2hwX251bV9jb250cm9sbGVycykpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHNocGNocF93cSk7CiAKLURCR19MRUFWRV9ST1VUSU5FCi0JCQkgIAorCURCR19MRUFWRV9ST1VUSU5FCiB9CiAKIHN0YXRpYyBpbnQgaHBjX3Bvd2VyX29uX3Nsb3Qoc3RydWN0IHNsb3QgKiBzbG90KQpAQCAtODkxLDcgKzgzNSw2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2hwY19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gKHN0cnVjdCBjb250cm9sbGVyICopZGV2X2lkOwotCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3RsciA9IGN0cmwtPmhwY19jdGxyX2hhbmRsZTsKIAl1MzIgc2Vycl9pbnQsIHNsb3RfcmVnLCBpbnRyX2xvYywgaW50cl9sb2MyOwogCWludCBocF9zbG90OwogCkBAIC05NDIsMjAgKzg4NSwxNiBAQAogCQkgICAgX19GVU5DVElPTl9fLCBocF9zbG90LCBzbG90X3JlZyk7CiAKIAkJaWYgKHNsb3RfcmVnICYgTVJMX0NIQU5HRV9ERVRFQ1RFRCkKLQkJCXBocF9jdGxyLT5zd2l0Y2hfY2hhbmdlX2NhbGxiYWNrKAotCQkJCWhwX3Nsb3QsIHBocF9jdGxyLT5jYWxsYmFja19pbnN0YW5jZV9pZCk7CisJCQlzaHBjaHBfaGFuZGxlX3N3aXRjaF9jaGFuZ2UoaHBfc2xvdCwgY3RybCk7CiAKIAkJaWYgKHNsb3RfcmVnICYgQlVUVE9OX1BSRVNTX0RFVEVDVEVEKQotCQkJcGhwX2N0bHItPmF0dGVudGlvbl9idXR0b25fY2FsbGJhY2soCi0JCQkJaHBfc2xvdCwgcGhwX2N0bHItPmNhbGxiYWNrX2luc3RhbmNlX2lkKTsKKwkJCXNocGNocF9oYW5kbGVfYXR0ZW50aW9uX2J1dHRvbihocF9zbG90LCBjdHJsKTsKIAogCQlpZiAoc2xvdF9yZWcgJiBQUlNOVF9DSEFOR0VfREVURUNURUQpCi0JCQlwaHBfY3Rsci0+cHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrKAotCQkJCWhwX3Nsb3QgLCBwaHBfY3Rsci0+Y2FsbGJhY2tfaW5zdGFuY2VfaWQpOworCQkJc2hwY2hwX2hhbmRsZV9wcmVzZW5jZV9jaGFuZ2UoaHBfc2xvdCwgY3RybCk7CiAKIAkJaWYgKHNsb3RfcmVnICYgKElTT19QRkFVTFRfREVURUNURUQgfCBDT05fUEZBVUxUX0RFVEVDVEVEKSkKLQkJCXBocF9jdGxyLT5wb3dlcl9mYXVsdF9jYWxsYmFjaygKLQkJCQlocF9zbG90LCBwaHBfY3Rsci0+Y2FsbGJhY2tfaW5zdGFuY2VfaWQpOworCQkJc2hwY2hwX2hhbmRsZV9wb3dlcl9mYXVsdChocF9zbG90LCBjdHJsKTsKIAogCQkvKiBDbGVhciBhbGwgc2xvdCBldmVudHMgKi8KIAkJc2xvdF9yZWcgJj0gflNMT1RfUkVHX1JTVkRaX01BU0s7CkBAIC0xMTE0LDEwICsxMDUzLDggQEAKIAkucmVsZWFzZV9jdGxyCQkJPSBocGNfcmVsZWFzZV9jdGxyLAogfTsKIAotaW50IHNocGNfaW5pdChzdHJ1Y3QgY29udHJvbGxlciAqIGN0cmwsIHN0cnVjdCBwY2lfZGV2ICogcGRldikKK2ludCBzaHBjX2luaXQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3RsciwgKnA7Ci0Jdm9pZCAqaW5zdGFuY2VfaWQgPSBjdHJsOwogCWludCByYyA9IC0xLCBudW1fc2xvdHMgPSAwOwogCXU4IGhwX3Nsb3Q7CiAJdTMyIHNocGNfYmFzZV9vZmZzZXQ7CkBAIC0xMTI4LDE2ICsxMDY1LDYgQEAKIAogCWN0cmwtPnBjaV9kZXYgPSBwZGV2OyAgLyogcGNpX2RldiBvZiB0aGUgUDJQIGJyaWRnZSAqLwogCi0Jc3Bpbl9sb2NrX2luaXQoJmxpc3RfbG9jayk7Ci0JcGhwX2N0bHIgPSBremFsbG9jKHNpemVvZigqcGhwX2N0bHIpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghcGhwX2N0bHIpIHsJLyogYWxsb2NhdGUgY29udHJvbGxlciBzdGF0ZSBkYXRhICovCi0JCWVycigiJXM6IEhQQyBjb250cm9sbGVyIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJZ290byBhYm9ydDsKLQl9Ci0KLQlwaHBfY3Rsci0+cGNpX2RldiA9IHBkZXY7CS8qIHNhdmUgcGNpX2RldiBpbiBjb250ZXh0ICovCi0KIAlpZiAoKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNRCkgfHwgKHBkZXYtPmRldmljZSA9PQogCQkJCVBDSV9ERVZJQ0VfSURfQU1EX0dPTEFNXzc0NTApKSB7CiAJCS8qIGFtZCBzaHBjIGRyaXZlciBkb2Vzbid0IHVzZSBCYXNlIE9mZnNldDsgYXNzdW1lIDAgKi8KQEAgLTExNDcsMjAgKzEwNzQsMjAgQEAKIAkJY3RybC0+Y2FwX29mZnNldCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9TSFBDKTsKIAkJaWYgKCFjdHJsLT5jYXBfb2Zmc2V0KSB7CiAJCQllcnIoIiVzIDogY2FwX29mZnNldCA9PSAwXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJZ290byBhYm9ydF9mcmVlX2N0bHI7CisJCQlnb3RvIGFib3J0OwogCQl9CiAJCWRiZygiJXM6IGNhcF9vZmZzZXQgPSAleFxuIiwgX19GVU5DVElPTl9fLCBjdHJsLT5jYXBfb2Zmc2V0KTsKIAogCQlyYyA9IHNocGNfaW5kaXJlY3RfcmVhZChjdHJsLCAwLCAmc2hwY19iYXNlX29mZnNldCk7CiAJCWlmIChyYykgewogCQkJZXJyKCIlczogY2Fubm90IHJlYWQgYmFzZV9vZmZzZXRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQlnb3RvIGFib3J0X2ZyZWVfY3RscjsKKwkJCWdvdG8gYWJvcnQ7CiAJCX0KIAogCQlyYyA9IHNocGNfaW5kaXJlY3RfcmVhZChjdHJsLCAzLCAmdGVtcGR3b3JkKTsKIAkJaWYgKHJjKSB7CiAJCQllcnIoIiVzOiBjYW5ub3QgcmVhZCBzbG90IGNvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKLQkJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOworCQkJZ290byBhYm9ydDsKIAkJfQogCQludW1fc2xvdHMgPSB0ZW1wZHdvcmQgJiBTTE9UX05VTTsKIAkJZGJnKCIlczogbnVtX3Nsb3RzIChpbmRpcmVjdCkgJXhcbiIsIF9fRlVOQ1RJT05fXywgbnVtX3Nsb3RzKTsKQEAgLTExNzAsNyArMTA5Nyw3IEBACiAJCQlpZiAocmMpIHsKIAkJCQllcnIoIiVzOiBjYW5ub3QgcmVhZCBjcmVnIChpbmRleCA9ICVkKVxuIiwKIAkJCQkgICAgX19GVU5DVElPTl9fLCBpKTsKLQkJCQlnb3RvIGFib3J0X2ZyZWVfY3RscjsKKwkJCQlnb3RvIGFib3J0OwogCQkJfQogCQkJZGJnKCIlczogb2Zmc2V0ICVkOiB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLGksCiAJCQkJCXRlbXBkd29yZCk7CkBAIC0xMTg3LDI0ICsxMTE0LDI0IEBACiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpIHsKIAkJZXJyKCIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlnb3RvIGFib3J0X2ZyZWVfY3RscjsKKwkJZ290byBhYm9ydDsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihjdHJsLT5tbWlvX2Jhc2UsIGN0cmwtPm1taW9fc2l6ZSwgTVlfTkFNRSkpIHsKIAkJZXJyKCIlczogY2Fubm90IHJlc2VydmUgTU1JTyByZWdpb25cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJjID0gLTE7Ci0JCWdvdG8gYWJvcnRfZnJlZV9jdGxyOworCQlnb3RvIGFib3J0OwogCX0KIAotCXBocF9jdGxyLT5jcmVnID0gaW9yZW1hcChjdHJsLT5tbWlvX2Jhc2UsIGN0cmwtPm1taW9fc2l6ZSk7Ci0JaWYgKCFwaHBfY3Rsci0+Y3JlZykgeworCWN0cmwtPmNyZWcgPSBpb3JlbWFwKGN0cmwtPm1taW9fYmFzZSwgY3RybC0+bW1pb19zaXplKTsKKwlpZiAoIWN0cmwtPmNyZWcpIHsKIAkJZXJyKCIlczogY2Fubm90IHJlbWFwIE1NSU8gcmVnaW9uICVseCBAICVseFxuIiwgX19GVU5DVElPTl9fLAogCQkgICAgY3RybC0+bW1pb19zaXplLCBjdHJsLT5tbWlvX2Jhc2UpOwogCQlyZWxlYXNlX21lbV9yZWdpb24oY3RybC0+bW1pb19iYXNlLCBjdHJsLT5tbWlvX3NpemUpOwogCQlyYyA9IC0xOwotCQlnb3RvIGFib3J0X2ZyZWVfY3RscjsKKwkJZ290byBhYm9ydDsKIAl9Ci0JZGJnKCIlczogcGhwX2N0bHItPmNyZWcgJXBcbiIsIF9fRlVOQ1RJT05fXywgcGhwX2N0bHItPmNyZWcpOworCWRiZygiJXM6IGN0cmwtPmNyZWcgJXBcbiIsIF9fRlVOQ1RJT05fXywgY3RybC0+Y3JlZyk7CiAKIAltdXRleF9pbml0KCZjdHJsLT5jcml0X3NlY3QpOwogCW11dGV4X2luaXQoJmN0cmwtPmNtZF9sb2NrKTsKQEAgLTEyMTIsMjMgKzExMzksMTQgQEAKIAkvKiBTZXR1cCB3YWl0IHF1ZXVlICovCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3RybC0+cXVldWUpOwogCi0JLyogRmluZCB0aGUgSVJRICovCi0JcGhwX2N0bHItPmlycSA9IHBkZXYtPmlycTsKLQlwaHBfY3Rsci0+YXR0ZW50aW9uX2J1dHRvbl9jYWxsYmFjayA9IHNocGNocF9oYW5kbGVfYXR0ZW50aW9uX2J1dHRvbiwKLQlwaHBfY3Rsci0+c3dpdGNoX2NoYW5nZV9jYWxsYmFjayA9IHNocGNocF9oYW5kbGVfc3dpdGNoX2NoYW5nZTsKLQlwaHBfY3Rsci0+cHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrID0gc2hwY2hwX2hhbmRsZV9wcmVzZW5jZV9jaGFuZ2U7Ci0JcGhwX2N0bHItPnBvd2VyX2ZhdWx0X2NhbGxiYWNrID0gc2hwY2hwX2hhbmRsZV9wb3dlcl9mYXVsdDsKLQlwaHBfY3Rsci0+Y2FsbGJhY2tfaW5zdGFuY2VfaWQgPSBpbnN0YW5jZV9pZDsKLQotCWN0cmwtPmhwY19jdGxyX2hhbmRsZSA9IHBocF9jdGxyOwogCWN0cmwtPmhwY19vcHMgPSAmc2hwY2hwX2hwY19vcHM7CiAKIAkvKiBSZXR1cm4gUENJIENvbnRyb2xsZXIgSW5mbyAqLwogCXNsb3RfY29uZmlnID0gc2hwY19yZWFkbChjdHJsLCBTTE9UX0NPTkZJRyk7Ci0JcGhwX2N0bHItPnNsb3RfZGV2aWNlX29mZnNldCA9IChzbG90X2NvbmZpZyAmIEZJUlNUX0RFVl9OVU0pID4+IDg7Ci0JcGhwX2N0bHItPm51bV9zbG90cyA9IHNsb3RfY29uZmlnICYgU0xPVF9OVU07Ci0JZGJnKCIlczogc2xvdF9kZXZpY2Vfb2Zmc2V0ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHBocF9jdGxyLT5zbG90X2RldmljZV9vZmZzZXQpOwotCWRiZygiJXM6IG51bV9zbG90cyAleFxuIiwgX19GVU5DVElPTl9fLCBwaHBfY3Rsci0+bnVtX3Nsb3RzKTsKKwljdHJsLT5zbG90X2RldmljZV9vZmZzZXQgPSAoc2xvdF9jb25maWcgJiBGSVJTVF9ERVZfTlVNKSA+PiA4OworCWN0cmwtPm51bV9zbG90cyA9IHNsb3RfY29uZmlnICYgU0xPVF9OVU07CisJY3RybC0+Zmlyc3Rfc2xvdCA9IChzbG90X2NvbmZpZyAmIFBTTikgPj4gMTY7CisJY3RybC0+c2xvdF9udW1faW5jID0gKChzbG90X2NvbmZpZyAmIFVQRE9XTikgPj4gMjkpID8gMSA6IC0xOwogCiAJLyogTWFzayBHbG9iYWwgSW50ZXJydXB0IE1hc2sgJiBDb21tYW5kIENvbXBsZXRlIEludGVycnVwdCBNYXNrICovCiAJdGVtcGR3b3JkID0gc2hwY19yZWFkbChjdHJsLCBTRVJSX0lOVFJfRU5BQkxFKTsKQEAgLTEyNDMsNyArMTE2MSw3IEBACiAJLyogTWFzayB0aGUgTVJMIHNlbnNvciBTRVJSIE1hc2sgb2YgaW5kaXZpZHVhbCBzbG90IGluCiAJICogU2xvdCBTRVJSLUlOVCBNYXNrICYgY2xlYXIgYWxsIHRoZSBleGlzdGluZyBldmVudCBpZiBhbnkKIAkgKi8KLQlmb3IgKGhwX3Nsb3QgPSAwOyBocF9zbG90IDwgcGhwX2N0bHItPm51bV9zbG90czsgaHBfc2xvdCsrKSB7CisJZm9yIChocF9zbG90ID0gMDsgaHBfc2xvdCA8IGN0cmwtPm51bV9zbG90czsgaHBfc2xvdCsrKSB7CiAJCXNsb3RfcmVnID0gc2hwY19yZWFkbChjdHJsLCBTTE9UX1JFRyhocF9zbG90KSk7CiAJCWRiZygiJXM6IERlZmF1bHQgTG9naWNhbCBTbG90IFJlZ2lzdGVyICVkIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sCiAJCQlocF9zbG90LCBzbG90X3JlZyk7CkBAIC0xMjU1LDI0ICsxMTczLDI3IEBACiAJCXNocGNfd3JpdGVsKGN0cmwsIFNMT1RfUkVHKGhwX3Nsb3QpLCBzbG90X3JlZyk7CiAJfQogCQotCWlmIChzaHBjaHBfcG9sbF9tb2RlKSAgey8qIEluc3RhbGwgaW50ZXJydXB0IHBvbGxpbmcgY29kZSAqLwotCQkvKiBJbnN0YWxsIGFuZCBzdGFydCB0aGUgaW50ZXJydXB0IHBvbGxpbmcgdGltZXIgKi8KLQkJaW5pdF90aW1lcigmcGhwX2N0bHItPmludF9wb2xsX3RpbWVyKTsKLQkJc3RhcnRfaW50X3BvbGxfdGltZXIoIHBocF9jdGxyLCAxMCApOyAgIC8qIHN0YXJ0IHdpdGggMTAgc2Vjb25kIGRlbGF5ICovCisJaWYgKHNocGNocF9wb2xsX21vZGUpIHsKKwkJLyogSW5zdGFsbCBpbnRlcnJ1cHQgcG9sbGluZyB0aW1lci4gU3RhcnQgd2l0aCAxMCBzZWMgZGVsYXkgKi8KKwkJaW5pdF90aW1lcigmY3RybC0+cG9sbF90aW1lcik7CisJCXN0YXJ0X2ludF9wb2xsX3RpbWVyKGN0cmwsIDEwKTsKIAl9IGVsc2UgewogCQkvKiBJbnN0YWxscyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAkJcmMgPSBwY2lfZW5hYmxlX21zaShwZGV2KTsKIAkJaWYgKHJjKSB7CiAJCQlpbmZvKCJDYW4ndCBnZXQgbXNpIGZvciB0aGUgaG90cGx1ZyBjb250cm9sbGVyXG4iKTsKIAkJCWluZm8oIlVzZSBJTlR4IGZvciB0aGUgaG90cGx1ZyBjb250cm9sbGVyXG4iKTsKLQkJfSBlbHNlCi0JCQlwaHBfY3Rsci0+aXJxID0gcGRldi0+aXJxOworCQl9CiAJCQotCQlyYyA9IHJlcXVlc3RfaXJxKHBocF9jdGxyLT5pcnEsIHNocGNfaXNyLCBJUlFGX1NIQVJFRCwgTVlfTkFNRSwgKHZvaWQgKikgY3RybCk7Ci0JCWRiZygiJXM6IHJlcXVlc3RfaXJxICVkIGZvciBocGMlZCAocmV0dXJucyAlZClcbiIsIF9fRlVOQ1RJT05fXywgcGhwX2N0bHItPmlycSwgY3Rscl9zZXFfbnVtLCByYyk7CisJCXJjID0gcmVxdWVzdF9pcnEoY3RybC0+cGNpX2Rldi0+aXJxLCBzaHBjX2lzciwgSVJRRl9TSEFSRUQsCisJCQkJIE1ZX05BTUUsICh2b2lkICopY3RybCk7CisJCWRiZygiJXM6IHJlcXVlc3RfaXJxICVkIGZvciBocGMlZCAocmV0dXJucyAlZClcbiIsCisJCSAgICBfX0ZVTkNUSU9OX18sIGN0cmwtPnBjaV9kZXYtPmlycSwKKwkJICAgIGF0b21pY19yZWFkKCZzaHBjaHBfbnVtX2NvbnRyb2xsZXJzKSwgcmMpOwogCQlpZiAocmMpIHsKLQkJCWVycigiQ2FuJ3QgZ2V0IGlycSAlZCBmb3IgdGhlIGhvdHBsdWcgY29udHJvbGxlclxuIiwgcGhwX2N0bHItPmlycSk7Ci0JCQlnb3RvIGFib3J0X2ZyZWVfY3RscjsKKwkJCWVycigiQ2FuJ3QgZ2V0IGlycSAlZCBmb3IgdGhlIGhvdHBsdWcgY29udHJvbGxlclxuIiwKKwkJCSAgICBjdHJsLT5wY2lfZGV2LT5pcnEpOworCQkJZ290byBhYm9ydF9pb3VubWFwOwogCQl9CiAJfQogCWRiZygiJXM6IEhQQyBhdCBiOmQ6ZjppcnE9MHgleDoleDoleDoleFxuIiwgX19GVU5DVElPTl9fLApAQCAtMTI4MCwyNCArMTIwMSw2IEBACiAJCQlQQ0lfRlVOQyhwZGV2LT5kZXZmbiksIHBkZXYtPmlycSk7CiAJZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShwZGV2KTsKIAotCS8qICBBZGQgdGhpcyBIUEMgaW5zdGFuY2UgaW50byB0aGUgSFBDIGxpc3QgKi8KLQlzcGluX2xvY2soJmxpc3RfbG9jayk7Ci0JaWYgKHBocF9jdGxyX2xpc3RfaGVhZCA9PSAwKSB7Ci0JCXBocF9jdGxyX2xpc3RfaGVhZCA9IHBocF9jdGxyOwotCQlwID0gcGhwX2N0bHJfbGlzdF9oZWFkOwotCQlwLT5wbmV4dCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJcCA9IHBocF9jdGxyX2xpc3RfaGVhZDsKLQotCQl3aGlsZSAocC0+cG5leHQpCi0JCQlwID0gcC0+cG5leHQ7Ci0KLQkJcC0+cG5leHQgPSBwaHBfY3RscjsKLQl9Ci0Jc3Bpbl91bmxvY2soJmxpc3RfbG9jayk7Ci0KLQljdGxyX3NlcV9udW0rKzsKLQogCS8qCiAJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgY29udHJvbGxlciB0byBiZSBpbml0aWFsaXplZCwKIAkgKiBpbml0aWFsaXplIHRoZSBzaHBjaHBkIHdvcmsgcXVldWUKQEAgLTEzMDYsMTQgKzEyMDksMTQgQEAKIAkJc2hwY2hwX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInNocGNocGQiKTsKIAkJaWYgKCFzaHBjaHBfd3EpIHsKIAkJCXJjID0gLUVOT01FTTsKLQkJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOworCQkJZ290byBhYm9ydF9pb3VubWFwOwogCQl9CiAJfQogCiAJLyoKIAkgKiBVbm1hc2sgYWxsIGV2ZW50IGludGVycnVwdHMgb2YgYWxsIHNsb3RzCiAJICovCi0JZm9yIChocF9zbG90ID0gMDsgaHBfc2xvdCA8IHBocF9jdGxyLT5udW1fc2xvdHM7IGhwX3Nsb3QrKykgeworCWZvciAoaHBfc2xvdCA9IDA7IGhwX3Nsb3QgPCBjdHJsLT5udW1fc2xvdHM7IGhwX3Nsb3QrKykgewogCQlzbG90X3JlZyA9IHNocGNfcmVhZGwoY3RybCwgU0xPVF9SRUcoaHBfc2xvdCkpOwogCQlkYmcoIiVzOiBEZWZhdWx0IExvZ2ljYWwgU2xvdCBSZWdpc3RlciAlZCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLAogCQkJaHBfc2xvdCwgc2xvdF9yZWcpOwpAQCAtMTMzNiwxMCArMTIzOSw4IEBACiAJcmV0dXJuIDA7CiAKIAkvKiBXZSBlbmQgdXAgaGVyZSBmb3IgdGhlIG1hbnkgcG9zc2libGUgd2F5cyB0byBmYWlsIHRoaXMgQVBJLiAgKi8KLWFib3J0X2ZyZWVfY3RscjoKLQlpZiAocGhwX2N0bHItPmNyZWcpCi0JCWlvdW5tYXAocGhwX2N0bHItPmNyZWcpOwotCWtmcmVlKHBocF9jdGxyKTsKK2Fib3J0X2lvdW5tYXA6CisJaW91bm1hcChjdHJsLT5jcmVnKTsKIGFib3J0OgogCURCR19MRUFWRV9ST1VUSU5FCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaHRpcnEuYyBiL2RyaXZlcnMvcGNpL2h0aXJxLmMKaW5kZXggMGE4ZDFjYy4uMjc5Yzk0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaHRpcnEuYworKysgYi9kcml2ZXJzL3BjaS9odGlycS5jCkBAIC05OSwxNCArOTksNyBAQAogCWludCBwb3M7CiAJaW50IGlycTsKIAotCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0hUKTsKLQl3aGlsZSAocG9zKSB7Ci0JCXU4IHN1YnR5cGU7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgMywgJnN1YnR5cGUpOwotCQlpZiAoc3VidHlwZSA9PSBIVF9DQVBUWVBFX0lSUSkKLQkJCWJyZWFrOwotCQlwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkoZGV2LCBwb3MsIFBDSV9DQVBfSURfSFQpOwotCX0KKwlwb3MgPSBwY2lfZmluZF9odF9jYXBhYmlsaXR5KGRldiwgSFRfQ0FQVFlQRV9JUlEpOwogCWlmICghcG9zKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IGU1YWUzYTAuLjkyZDVlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTE1MCw4ICsxNTAsNyBAQAogfQogCiAvKioKLSAqIHBjaV9tYXRjaF9kZXZpY2UgLSBUZWxsIGlmIGEgUENJIGRldmljZSBzdHJ1Y3R1cmUgaGFzIGEgbWF0Y2hpbmcKLSAqICAgICAgICAgICAgICAgICAgICBQQ0kgZGV2aWNlIGlkIHN0cnVjdHVyZQorICogcGNpX21hdGNoX2RldmljZSAtIFRlbGwgaWYgYSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSBoYXMgYSBtYXRjaGluZyBQQ0kgZGV2aWNlIGlkIHN0cnVjdHVyZQogICogQGRydjogdGhlIFBDSSBkcml2ZXIgdG8gbWF0Y2ggYWdhaW5zdAogICogQGRldjogdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3QKICAqCkBAIC0xNjIsMTQgKzE2MSw5IEBACiBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX21hdGNoX2RldmljZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LAogCQkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkOwogCXN0cnVjdCBwY2lfZHluaWQgKmR5bmlkOwogCi0JaWQgPSBwY2lfbWF0Y2hfaWQoZHJ2LT5pZF90YWJsZSwgZGV2KTsKLQlpZiAoaWQpCi0JCXJldHVybiBpZDsKLQotCS8qIHN0YXRpYyBpZHMgZGlkbid0IG1hdGNoLCBsZXRzIGxvb2sgYXQgdGhlIGR5bmFtaWMgb25lcyAqLworCS8qIExvb2sgYXQgdGhlIGR5bmFtaWMgaWRzIGZpcnN0LCBiZWZvcmUgdGhlIHN0YXRpYyBvbmVzICovCiAJc3Bpbl9sb2NrKCZkcnYtPmR5bmlkcy5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR5bmlkLCAmZHJ2LT5keW5pZHMubGlzdCwgbm9kZSkgewogCQlpZiAocGNpX21hdGNoX29uZV9kZXZpY2UoJmR5bmlkLT5pZCwgZGV2KSkgewpAQCAtMTc4LDcgKzE3Miw4IEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmRydi0+ZHluaWRzLmxvY2spOwotCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBjaV9tYXRjaF9pZChkcnYtPmlkX3RhYmxlLCBkZXYpOwogfQogCiBzdGF0aWMgaW50IHBjaV9jYWxsX3Byb2JlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCkBAIC0zNTcsNiArMzUyLDggQEAKIAlzdHJ1Y3QgcGNpX2RldiAqIHBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHBjaV9kcml2ZXIgKiBkcnYgPSBwY2lfZGV2LT5kcml2ZXI7CiAKKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWUsIHBjaV9kZXYpOworCiAJaWYgKGRydiAmJiBkcnYtPnJlc3VtZV9lYXJseSkKIAkJZXJyb3IgPSBkcnYtPnJlc3VtZV9lYXJseShwY2lfZGV2KTsKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDVhMTRiNzMuLjIwNmM4MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC02OCwxMiArNjgsMTQgQEAKIAogI2VuZGlmICAvKiAgMCAgKi8KIAotc3RhdGljIGludCBfX3BjaV9maW5kX25leHRfY2FwKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgdTggcG9zLCBpbnQgY2FwKQorI2RlZmluZSBQQ0lfRklORF9DQVBfVFRMCTQ4CisKK3N0YXRpYyBpbnQgX19wY2lfZmluZF9uZXh0X2NhcF90dGwoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSAgIHU4IHBvcywgaW50IGNhcCwgaW50ICp0dGwpCiB7CiAJdTggaWQ7Ci0JaW50IHR0bCA9IDQ4OwogCi0Jd2hpbGUgKHR0bC0tKSB7CisJd2hpbGUgKCgqdHRsKS0tKSB7CiAJCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShidXMsIGRldmZuLCBwb3MsICZwb3MpOwogCQlpZiAocG9zIDwgMHg0MCkKIAkJCWJyZWFrOwpAQCAtODksNiArOTEsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX3BjaV9maW5kX25leHRfY2FwKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgICB1OCBwb3MsIGludCBjYXApCit7CisJaW50IHR0bCA9IFBDSV9GSU5EX0NBUF9UVEw7CisKKwlyZXR1cm4gX19wY2lfZmluZF9uZXh0X2NhcF90dGwoYnVzLCBkZXZmbiwgcG9zLCBjYXAsICZ0dGwpOworfQorCiBpbnQgcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHBvcywgaW50IGNhcCkKIHsKIAlyZXR1cm4gX19wY2lfZmluZF9uZXh0X2NhcChkZXYtPmJ1cywgZGV2LT5kZXZmbiwKQEAgLTk2LDEwICsxMDYsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9maW5kX25leHRfY2FwYWJpbGl0eSk7CiAKLXN0YXRpYyBpbnQgX19wY2lfYnVzX2ZpbmRfY2FwKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgdTggaGRyX3R5cGUsIGludCBjYXApCitzdGF0aWMgaW50IF9fcGNpX2J1c19maW5kX2NhcF9zdGFydChzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZGV2Zm4sIHU4IGhkcl90eXBlKQogewogCXUxNiBzdGF0dXM7Ci0JdTggcG9zOwogCiAJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIFBDSV9TVEFUVVMsICZzdGF0dXMpOwogCWlmICghKHN0YXR1cyAmIFBDSV9TVEFUVVNfQ0FQX0xJU1QpKQpAQCAtMTA4LDE1ICsxMTgsMTQgQEAKIAlzd2l0Y2ggKGhkcl90eXBlKSB7CiAJY2FzZSBQQ0lfSEVBREVSX1RZUEVfTk9STUFMOgogCWNhc2UgUENJX0hFQURFUl9UWVBFX0JSSURHRToKLQkJcG9zID0gUENJX0NBUEFCSUxJVFlfTElTVDsKLQkJYnJlYWs7CisJCXJldHVybiBQQ0lfQ0FQQUJJTElUWV9MSVNUOwogCWNhc2UgUENJX0hFQURFUl9UWVBFX0NBUkRCVVM6Ci0JCXBvcyA9IFBDSV9DQl9DQVBBQklMSVRZX0xJU1Q7Ci0JCWJyZWFrOworCQlyZXR1cm4gUENJX0NCX0NBUEFCSUxJVFlfTElTVDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIF9fcGNpX2ZpbmRfbmV4dF9jYXAoYnVzLCBkZXZmbiwgcG9zLCBjYXApOworCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTQwLDcgKzE0OSwxMyBAQAogICovCiBpbnQgcGNpX2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKQogewotCXJldHVybiBfX3BjaV9idXNfZmluZF9jYXAoZGV2LT5idXMsIGRldi0+ZGV2Zm4sIGRldi0+aGRyX3R5cGUsIGNhcCk7CisJaW50IHBvczsKKworCXBvcyA9IF9fcGNpX2J1c19maW5kX2NhcF9zdGFydChkZXYtPmJ1cywgZGV2LT5kZXZmbiwgZGV2LT5oZHJfdHlwZSk7CisJaWYgKHBvcykKKwkJcG9zID0gX19wY2lfZmluZF9uZXh0X2NhcChkZXYtPmJ1cywgZGV2LT5kZXZmbiwgcG9zLCBjYXApOworCisJcmV0dXJuIHBvczsKIH0KIAogLyoqCkBAIC0xNTgsMTEgKzE3MywxNiBAQAogICovCiBpbnQgcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgY2FwKQogeworCWludCBwb3M7CiAJdTggaGRyX3R5cGU7CiAKIAlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUoYnVzLCBkZXZmbiwgUENJX0hFQURFUl9UWVBFLCAmaGRyX3R5cGUpOwogCi0JcmV0dXJuIF9fcGNpX2J1c19maW5kX2NhcChidXMsIGRldmZuLCBoZHJfdHlwZSAmIDB4N2YsIGNhcCk7CisJcG9zID0gX19wY2lfYnVzX2ZpbmRfY2FwX3N0YXJ0KGJ1cywgZGV2Zm4sIGhkcl90eXBlICYgMHg3Zik7CisJaWYgKHBvcykKKwkJcG9zID0gX19wY2lfZmluZF9uZXh0X2NhcChidXMsIGRldmZuLCBwb3MsIGNhcCk7CisKKwlyZXR1cm4gcG9zOwogfQogCiAvKioKQEAgLTIxNCw2ICsyMzQsNzUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KTsKIAorc3RhdGljIGludCBfX3BjaV9maW5kX25leHRfaHRfY2FwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwb3MsIGludCBodF9jYXApCit7CisJaW50IHJjLCB0dGwgPSBQQ0lfRklORF9DQVBfVFRMOworCXU4IGNhcCwgbWFzazsKKworCWlmIChodF9jYXAgPT0gSFRfQ0FQVFlQRV9TTEFWRSB8fCBodF9jYXAgPT0gSFRfQ0FQVFlQRV9IT1NUKQorCQltYXNrID0gSFRfM0JJVF9DQVBfTUFTSzsKKwllbHNlCisJCW1hc2sgPSBIVF81QklUX0NBUF9NQVNLOworCisJcG9zID0gX19wY2lfZmluZF9uZXh0X2NhcF90dGwoZGV2LT5idXMsIGRldi0+ZGV2Zm4sIHBvcywKKwkJCQkgICAgICBQQ0lfQ0FQX0lEX0hULCAmdHRsKTsKKwl3aGlsZSAocG9zKSB7CisJCXJjID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyAzLCAmY2FwKTsKKwkJaWYgKHJjICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKKwkJCXJldHVybiAwOworCisJCWlmICgoY2FwICYgbWFzaykgPT0gaHRfY2FwKQorCQkJcmV0dXJuIHBvczsKKworCQlwb3MgPSBfX3BjaV9maW5kX25leHRfY2FwX3R0bChkZXYtPmJ1cywgZGV2LT5kZXZmbiwKKwkJCQkJICAgICAgcG9zICsgUENJX0NBUF9MSVNUX05FWFQsCisJCQkJCSAgICAgIFBDSV9DQVBfSURfSFQsICZ0dGwpOworCX0KKworCXJldHVybiAwOworfQorLyoqCisgKiBwY2lfZmluZF9uZXh0X2h0X2NhcGFiaWxpdHkgLSBxdWVyeSBhIGRldmljZSdzIEh5cGVydHJhbnNwb3J0IGNhcGFiaWxpdGllcworICogQGRldjogUENJIGRldmljZSB0byBxdWVyeQorICogQHBvczogUG9zaXRpb24gZnJvbSB3aGljaCB0byBjb250aW51ZSBzZWFyY2hpbmcKKyAqIEBodF9jYXA6IEh5cGVydHJhbnNwb3J0IGNhcGFiaWxpdHkgY29kZQorICoKKyAqIFRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwY2lfZmluZF9odF9jYXBhYmlsaXR5KCkgdG8gc2VhcmNoIGZvcgorICogYWxsIGNhcGFiaWxpdGllcyBtYXRjaGluZyBAaHRfY2FwLiBAcG9zIHNob3VsZCBhbHdheXMgYmUgYSB2YWx1ZSByZXR1cm5lZAorICogZnJvbSBwY2lfZmluZF9odF9jYXBhYmlsaXR5KCkuCisgKgorICogTkIuIFRvIGJlIDEwMCUgc2FmZSBhZ2FpbnN0IGJyb2tlbiBQQ0kgZGV2aWNlcywgdGhlIGNhbGxlciBzaG91bGQgdGFrZQorICogc3RlcHMgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcC4KKyAqLworaW50IHBjaV9maW5kX25leHRfaHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcG9zLCBpbnQgaHRfY2FwKQoreworCXJldHVybiBfX3BjaV9maW5kX25leHRfaHRfY2FwKGRldiwgcG9zICsgUENJX0NBUF9MSVNUX05FWFQsIGh0X2NhcCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZmluZF9uZXh0X2h0X2NhcGFiaWxpdHkpOworCisvKioKKyAqIHBjaV9maW5kX2h0X2NhcGFiaWxpdHkgLSBxdWVyeSBhIGRldmljZSdzIEh5cGVydHJhbnNwb3J0IGNhcGFiaWxpdGllcworICogQGRldjogUENJIGRldmljZSB0byBxdWVyeQorICogQGh0X2NhcDogSHlwZXJ0cmFuc3BvcnQgY2FwYWJpbGl0eSBjb2RlCisgKgorICogVGVsbCBpZiBhIGRldmljZSBzdXBwb3J0cyBhIGdpdmVuIEh5cGVydHJhbnNwb3J0IGNhcGFiaWxpdHkuCisgKiBSZXR1cm5zIGFuIGFkZHJlc3Mgd2l0aGluIHRoZSBkZXZpY2UncyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZQorICogb3IgMCBpbiBjYXNlIHRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWVzdCBjYXBhYmlsaXR5LgorICogVGhlIGFkZHJlc3MgcG9pbnRzIHRvIHRoZSBQQ0kgY2FwYWJpbGl0eSwgb2YgdHlwZSBQQ0lfQ0FQX0lEX0hULAorICogd2hpY2ggaGFzIGEgSHlwZXJ0cmFuc3BvcnQgY2FwYWJpbGl0eSBtYXRjaGluZyBAaHRfY2FwLgorICovCitpbnQgcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaHRfY2FwKQoreworCWludCBwb3M7CisKKwlwb3MgPSBfX3BjaV9idXNfZmluZF9jYXBfc3RhcnQoZGV2LT5idXMsIGRldi0+ZGV2Zm4sIGRldi0+aGRyX3R5cGUpOworCWlmIChwb3MpCisJCXBvcyA9IF9fcGNpX2ZpbmRfbmV4dF9odF9jYXAoZGV2LCBwb3MsIGh0X2NhcCk7CisKKwlyZXR1cm4gcG9zOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZpbmRfaHRfY2FwYWJpbGl0eSk7CisKIC8qKgogICogcGNpX2ZpbmRfcGFyZW50X3Jlc291cmNlIC0gcmV0dXJuIHJlc291cmNlIHJlZ2lvbiBvZiBwYXJlbnQgYnVzIG9mIGdpdmVuIHJlZ2lvbgogICogQGRldjogUENJIGRldmljZSBzdHJ1Y3R1cmUgY29udGFpbnMgcmVzb3VyY2VzIHRvIGJlIHNlYXJjaGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCmluZGV4IDU1ODY2YjYuLjZmNWZhYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIHsKIAlzdHJ1Y3QgYWVyX3JwYyAqcnBjOwogCi0JaWYgKCEocnBjID0gKHN0cnVjdCBhZXJfcnBjICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGFlcl9ycGMpLAorCWlmICghKHJwYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZXJfcnBjKSwKIAkJR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCmluZGV4IGI0ZGE3OTUuLmYxN2U3ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJCiAJcGNpX3NldF9tYXN0ZXIoZGV2KTsKLSAgICAgICAgaWYgKCFkZXYtPmlycSkgeworICAgICAgICBpZiAoIWRldi0+aXJxICYmIGRldi0+cGluKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCSIlcy0+RGV2WyUwNHg6JTA0eF0gaGFzIGludmFsaWQgSVJRLiBDaGVjayB2ZW5kb3IgQklPU1xuIiwgCiAJCV9fRlVOQ1RJT05fXywgZGV2LT5kZXZpY2UsIGRldi0+dmVuZG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCmluZGV4IDZhM2MxZTcuLjBlMDQwMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtNjM5LDYgKzYzOSw4IEBACiAJZGV2LT5pcnEgPSBpcnE7CiB9CiAKKyNkZWZpbmUgTEVHQUNZX0lPX1JFU09VUkNFCShJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9QQ0lfRklYRUQpCisKIC8qKgogICogcGNpX3NldHVwX2RldmljZSAtIGZpbGwgaW4gY2xhc3MgYW5kIG1hcCBpbmZvcm1hdGlvbiBvZiBhIGRldmljZQogICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUgdG8gZmlsbApAQCAtNjkyLDE4ICs2OTQsMTggQEAKIAkJCWlmICgocHJvZ2lmICYgMSkgPT0gMCkgewogCQkJCWRldi0+cmVzb3VyY2VbMF0uc3RhcnQgPSAweDFGMDsKIAkJCQlkZXYtPnJlc291cmNlWzBdLmVuZCA9IDB4MUY3OwotCQkJCWRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCQkJCWRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgPSBMRUdBQ1lfSU9fUkVTT1VSQ0U7CiAJCQkJZGV2LT5yZXNvdXJjZVsxXS5zdGFydCA9IDB4M0Y2OwogCQkJCWRldi0+cmVzb3VyY2VbMV0uZW5kID0gMHgzRjY7Ci0JCQkJZGV2LT5yZXNvdXJjZVsxXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87CisJCQkJZGV2LT5yZXNvdXJjZVsxXS5mbGFncyA9IExFR0FDWV9JT19SRVNPVVJDRTsKIAkJCX0KIAkJCWlmICgocHJvZ2lmICYgNCkgPT0gMCkgewogCQkJCWRldi0+cmVzb3VyY2VbMl0uc3RhcnQgPSAweDE3MDsKIAkJCQlkZXYtPnJlc291cmNlWzJdLmVuZCA9IDB4MTc3OwotCQkJCWRldi0+cmVzb3VyY2VbMl0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCQkJCWRldi0+cmVzb3VyY2VbMl0uZmxhZ3MgPSBMRUdBQ1lfSU9fUkVTT1VSQ0U7CiAJCQkJZGV2LT5yZXNvdXJjZVszXS5zdGFydCA9IDB4Mzc2OwogCQkJCWRldi0+cmVzb3VyY2VbM10uZW5kID0gMHgzNzY7Ci0JCQkJZGV2LT5yZXNvdXJjZVszXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87CisJCQkJZGV2LT5yZXNvdXJjZVszXS5mbGFncyA9IExFR0FDWV9JT19SRVNPVVJDRTsKIAkJCX0KIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2MuYyBiL2RyaXZlcnMvcGNpL3Byb2MuYwppbmRleCA5OWNmMzMzLi40YTY3NjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9jLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYy5jCkBAIC0yMyw3ICsyMyw3IEBACiBwcm9jX2J1c19wY2lfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmYsIGludCB3aGVuY2UpCiB7CiAJbG9mZl90IG5ldyA9IC0xOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlzd2l0Y2ggKHdoZW5jZSkgewpAQCAtNDgsNyArNDgsNyBAQAogc3RhdGljIHNzaXplX3QKIHByb2NfYnVzX3BjaV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY29uc3Qgc3RydWN0IGlub2RlICppbm8gPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwljb25zdCBzdHJ1Y3QgaW5vZGUgKmlubyA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJY29uc3Qgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShpbm8pOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkcC0+ZGF0YTsKIAl1bnNpZ25lZCBpbnQgcG9zID0gKnBwb3M7CkBAIC0xMzAsNyArMTMwLDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBwcm9jX2J1c19wY2lfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKIHsKLQljb25zdCBzdHJ1Y3QgaW5vZGUgKmlubyA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAljb25zdCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGlubyk7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRwLT5kYXRhOwogCWludCBwb3MgPSAqcHBvczsKQEAgLTI0NSw3ICsyNDUsNyBAQAogI2lmZGVmIEhBVkVfUENJX01NQVAKIHN0YXRpYyBpbnQgcHJvY19idXNfcGNpX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAljb25zdCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRwID0gUERFKGlub2RlKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZHAtPmRhdGE7CiAJc3RydWN0IHBjaV9maWxwX3ByaXZhdGUgKmZwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA5Y2E5YjliLi5jOTEzZWE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogLyogRGVhbCB3aXRoIGJyb2tlbiBCSU9TJ2VzIHRoYXQgbmVnbGVjdCB0byBlbmFibGUgcGFzc2l2ZSByZWxlYXNlLAogICAgd2hpY2ggY2FuIGNhdXNlIHByb2JsZW1zIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIDgyNDQxRlgvUFBybyBNVFJScyAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3Bhc3NpdmVfcmVsZWFzZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcXVpcmtfcGFzc2l2ZV9yZWxlYXNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmQgPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgZGxjOwpAQCAtNTMsNiArNTMsNyBAQAogCX0KIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDEsCXF1aXJrX3Bhc3NpdmVfcmVsZWFzZSApOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDEsCXF1aXJrX3Bhc3NpdmVfcmVsZWFzZSApOwogCiAvKiAgVGhlIFZJQSBWUDIvVlAzL01WUDMgc2VlbSB0byBoYXZlIHNvbWUgJ2ZlYXR1cmVzJy4gVGhlcmUgbWF5IGJlIGEgd29ya2Fyb3VuZAogICAgIGJ1dCBWSUEgZG9uJ3QgYW5zd2VyIHF1ZXJpZXMuIElmIHlvdSBoYXBwZW4gdG8gaGF2ZSBnb29kIGNvbnRhY3RzIGF0IFZJQQpAQCAtMTM0LDcgKzEzNSw3IEBACiAgKglVcGRhdGVkIGJhc2VkIG9uIGZ1cnRoZXIgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2l0ZSBhbmQgYWxzbyBvbgogICoJaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgVklBIAogICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdmlhbGF0ZW5jeShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcXVpcmtfdmlhbGF0ZW5jeShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwOwogCXU4IHJldjsKQEAgLTE4NSw2ICsxODYsMTAgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzAsCXF1aXJrX3ZpYWxhdGVuY3kgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzEsCXF1aXJrX3ZpYWxhdGVuY3kgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MzYxLAkJcXVpcmtfdmlhbGF0ZW5jeSApOworLyogTXVzdCByZXN0b3JlIHRoaXMgb24gYSByZXN1bWUgZnJvbSBSQU0gKi8KK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX1ZJQSwJUENJX0RFVklDRV9JRF9WSUFfODM2M18wLAlxdWlya192aWFsYXRlbmN5ICk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMSwJcXVpcmtfdmlhbGF0ZW5jeSApOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MzYxLAkJcXVpcmtfdmlhbGF0ZW5jeSApOwogCiAvKgogICoJVklBIEFwb2xsbyBWUDMgbmVlZHMgRVRCRiBvbiBCVDg0OC84NzgKQEAgLTUzMiw3ICs1MzcsNyBAQAogICogVE9ETzogV2hlbiB3ZSBoYXZlIGRldmljZS1zcGVjaWZpYyBpbnRlcnJ1cHQgcm91dGVycywKICAqIHRoaXMgY29kZSB3aWxsIGdvIGF3YXkgZnJvbSBxdWlya3MuCiAgKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya192aWFfaW9hcGljKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBxdWlya192aWFfaW9hcGljKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTggdG1wOwogCQpAQCAtNTQ4LDYgKzU1Myw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChkZXYsIDB4NTgsIHRtcCk7CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1ZJQSwJUENJX0RFVklDRV9JRF9WSUFfODJDNjg2LAlxdWlya192aWFfaW9hcGljICk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NiwJcXVpcmtfdmlhX2lvYXBpYyApOwogCiAvKgogICogVklBIDgyMzc6IFNvbWUgQklPU3MgZG9uJ3Qgc2V0IHRoZSAnQnlwYXNzIEFQSUMgRGUtQXNzZXJ0IE1lc3NhZ2UnIEJpdC4KQEAgLTU1NSw3ICs1NjEsNyBAQAogICogU2V0IHRoaXMgYml0IHRvIGdldCByaWQgb2YgY3ljbGUgd2FzdGFnZS4KICAqIE90aGVyd2lzZSB1bmNyaXRpY2FsLgogICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfdmlhX3Z0ODIzN19ieXBhc3NfYXBpY19kZWFzc2VydChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcXVpcmtfdmlhX3Z0ODIzN19ieXBhc3NfYXBpY19kZWFzc2VydChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IG1pc2NfY29udHJvbDI7CiAjZGVmaW5lIEJZUEFTU19BUElDX0RFQVNTRVJUIDgKQEAgLTU2Nyw2ICs1NzMsNyBAQAogCX0KIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM3LAkJcXVpcmtfdmlhX3Z0ODIzN19ieXBhc3NfYXBpY19kZWFzc2VydCk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsCQlxdWlya192aWFfdnQ4MjM3X2J5cGFzc19hcGljX2RlYXNzZXJ0KTsKIAogLyoKICAqIFRoZSBBTUQgaW8gYXBpYyBjYW4gaGFuZyB0aGUgYm94IHdoZW4gYW4gYXBpYyBpcnEgaXMgbWFza2VkLgpAQCAtNjAwLDcgKzYwNyw3IEBACiAjZGVmaW5lIEFNRDgxMzFfcmV2QjAgICAgICAgIDB4MTEKICNkZWZpbmUgQU1EODEzMV9NSVNDICAgICAgICAgMHg0MAogI2RlZmluZSBBTUQ4MTMxX05JT0FNT0RFX0JJVCAwCi1zdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfYW1kXzgxMzFfaW9hcGljKHN0cnVjdCBwY2lfZGV2ICpkZXYpIAorc3RhdGljIHZvaWQgcXVpcmtfYW1kXzgxMzFfaW9hcGljKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7IAogICAgICAgICB1bnNpZ25lZCBjaGFyIHJldmlkLCB0bXA7CiAgICAgICAgIApAQCAtNjE2LDYgKzYyMyw3IEBACiAgICAgICAgIH0KIH0gCiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfODEzMV9CUklER0UsIHF1aXJrX2FtZF84MTMxX2lvYXBpYyk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFLCBxdWlya19hbWRfODEzMV9pb2FwaWMpOwogI2VuZGlmIC8qIENPTkZJR19YODZfSU9fQVBJQyAqLwogCiAKQEAgLTY0MSw0OCArNjQ5LDY3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8zLAlxdWlya192aWFfYWNwaSApOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODZfNCwJcXVpcmtfdmlhX2FjcGkgKTsKIAorCiAvKgotICogVmlhIDY4NkEvQjogIFRoZSBQQ0lfSU5URVJSVVBUX0xJTkUgcmVnaXN0ZXIgZm9yIHRoZSBvbi1jaGlwCi0gKiBkZXZpY2VzLCBVU0IwLzEsIEFDOTcsIE1DOTcsIGFuZCBBQ1BJLCBoYXMgYW4gdW51c3VhbCBmZWF0dXJlOgotICogd2hlbiB3cml0dGVuLCBpdCBtYWtlcyBhbiBpbnRlcm5hbCBjb25uZWN0aW9uIHRvIHRoZSBQSUMuCi0gKiBGb3IgdGhlc2UgZGV2aWNlcywgdGhpcyByZWdpc3RlciBpcyBkZWZpbmVkIHRvIGJlIDQgYml0cyB3aWRlLgotICogTm9ybWFsbHkgdGhpcyBpcyBmaW5lLiAgSG93ZXZlciBmb3IgSU8tQVBJQyBtb3RoZXJib2FyZHMsIG9yCi0gKiBub24teDg2IGFyY2hpdGVjdHVyZXMgKHllcyBWaWEgZXhpc3RzIG9uIFBQQyBhbW9uZyBvdGhlciBwbGFjZXMpLAotICogd2UgbXVzdCBtYXNrIHRoZSBQQ0lfSU5URVJSVVBUX0xJTkUgdmFsdWUgdmVyc3VzIDB4ZiB0byBnZXQKLSAqIGludGVycnVwdHMgZGVsaXZlcmVkIHByb3Blcmx5LgorICoJVklBIGJyaWRnZXMgd2hpY2ggaGF2ZSBWTGluaworICovCisKK3N0YXRpYyBpbnQgdmlhX3ZsaW5rX2Rldl9sbyA9IC0xLCB2aWFfdmxpbmtfZGV2X2hpID0gMTg7CisKK3N0YXRpYyB2b2lkIHF1aXJrX3ZpYV9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwkvKiBTZWUgd2hhdCBicmlkZ2Ugd2UgaGF2ZSBhbmQgZmluZCB0aGUgZGV2aWNlIHJhbmdlcyAqLworCXN3aXRjaCAoZGV2LT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NjoKKwkJLyogVGhlIFZUODJDNjg2IGlzIHNwZWNpYWwsIGl0IGF0dGFjaGVzIHRvIFBDSSBhbmQgY2FuIGhhdmUKKwkJICAgYW55IGRldmljZSBudW1iZXIuIEFsbCBpdHMgc3ViZGV2aWNlcyBhcmUgZnVuY3Rpb25zIG9mCisJCSAgIHRoYXQgc2luZ2xlIGRldmljZS4gKi8KKwkJdmlhX3ZsaW5rX2Rldl9sbyA9IFBDSV9TTE9UKGRldi0+ZGV2Zm4pOworCQl2aWFfdmxpbmtfZGV2X2hpID0gUENJX1NMT1QoZGV2LT5kZXZmbik7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfODIzNzoKKwljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyMzdBOgorCQl2aWFfdmxpbmtfZGV2X2xvID0gMTU7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfODIzNToKKwkJdmlhX3ZsaW5rX2Rldl9sbyA9IDE2OworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyMzE6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMzXzA6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMzQToKKwljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNDXzA6CisJCXZpYV92bGlua19kZXZfbG8gPSAxNzsKKwkJYnJlYWs7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODYsCXF1aXJrX3ZpYV9icmlkZ2UpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjMxLAkJcXVpcmtfdmlhX2JyaWRnZSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzNfMCwJcXVpcmtfdmlhX2JyaWRnZSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzNBLAlxdWlya192aWFfYnJpZGdlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwJUENJX0RFVklDRV9JRF9WSUFfODIzM0NfMCwJcXVpcmtfdmlhX2JyaWRnZSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsCQlxdWlya192aWFfYnJpZGdlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwJUENJX0RFVklDRV9JRF9WSUFfODIzNywJCXF1aXJrX3ZpYV9icmlkZ2UpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM3QSwJcXVpcmtfdmlhX2JyaWRnZSk7CisKKy8qKgorICoJcXVpcmtfdmlhX3ZsaW5rCQktCVZJQSBWTGluayBJUlEgbnVtYmVyIHVwZGF0ZQorICoJQGRldjogUENJIGRldmljZQogICoKLSAqIFNvbWUgb2YgdGhlIG9uLWNoaXAgZGV2aWNlcyBhcmUgYWN0dWFsbHkgJzU4NiBkZXZpY2VzJyBzbyB0aGV5IGFyZQotICogbGlzdGVkIGhlcmUuCisgKglJZiB0aGUgZGV2aWNlIHdlIGFyZSBkZWFsaW5nIHdpdGggaXMgb24gYSBQSUMgSVJRIHdlIG5lZWQgdG8KKyAqCWVuc3VyZSB0aGF0IHRoZSBJUlEgbGluZSByZWdpc3RlciB3aGljaCB1c3VhbGx5IGlzIG5vdCByZWxldmFudAorICoJZm9yIFBDSSBjYXJkcywgaXMgYWN0dWFsbHkgd3JpdHRlbiBzbyB0aGF0IGludGVycnVwdHMgZ2V0IHNlbnQKKyAqCXRvIHRoZSByaWdodCBwbGFjZS4KKyAqCVdlIG9ubHkgZG8gdGhpcyBvbiBzeXN0ZW1zIHdoZXJlIGEgVklBIHNvdXRoIGJyaWRnZSB3YXMgZGV0ZWN0ZWQsCisgKglhbmQgb25seSBmb3IgVklBIGRldmljZXMgb24gdGhlIG1vdGhlcmJvYXJkIChzZWUgcXVpcmtfdmlhX2JyaWRnZQorICoJYWJvdmUpLgogICovCiAKLXN0YXRpYyBpbnQgdmlhX2lycV9maXh1cF9uZWVkZWQgPSAtMTsKLQotLyoKLSAqIEFzIHNvbWUgVklBIGhhcmR3YXJlIGlzIGF2YWlsYWJsZSBpbiBQQ0ktY2FyZCBmb3JtLCB3ZSBuZWVkIHRvIHJlc3RyaWN0Ci0gKiB0aGlzIHF1aXJrIHRvIFZJQSBQQ0kgaGFyZHdhcmUgYnVpbHQgb250byBWSUEtYmFzZWQgbW90aGVyYm9hcmRzIG9ubHkuCi0gKiBXZSB0cnkgdG8gbG9jYXRlIGEgVklBIHNvdXRoYnJpZGdlIGJlZm9yZSBkZWNpZGluZyB3aGV0aGVyIHRoZSBxdWlyawotICogc2hvdWxkIGJlIGFwcGxpZWQuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2aWFfaXJxX2ZpeHVwX3RibFtdID0gewotCXsKLQkJLnZlbmRvciAJPSBQQ0lfVkVORE9SX0lEX1ZJQSwKLQkJLmRldmljZQkJPSBQQ0lfQU5ZX0lELAotCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKLQkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCi0JCS5jbGFzcwkJPSBQQ0lfQ0xBU1NfQlJJREdFX0lTQSA8PCA4LAotCQkuY2xhc3NfbWFzawk9IDB4ZmZmZjAwLAotCX0sCi0JeyAwLCB9LAotfTsKLQotc3RhdGljIHZvaWQgcXVpcmtfdmlhX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcXVpcmtfdmlhX3ZsaW5rKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTggaXJxLCBuZXdfaXJxOwogCi0JaWYgKHZpYV9pcnFfZml4dXBfbmVlZGVkID09IC0xKQotCQl2aWFfaXJxX2ZpeHVwX25lZWRlZCA9IHBjaV9kZXZfcHJlc2VudCh2aWFfaXJxX2ZpeHVwX3RibCk7Ci0KLQlpZiAoIXZpYV9pcnFfZml4dXBfbmVlZGVkKQorCS8qIENoZWNrIGlmIHdlIGhhdmUgVkxpbmsgYXQgYWxsICovCisJaWYgKHZpYV92bGlua19kZXZfbG8gPT0gLTEpCiAJCXJldHVybjsKIAogCW5ld19pcnEgPSBkZXYtPmlycTsKQEAgLTY5MSwxNSArNzE4LDIzIEBACiAJaWYgKCFuZXdfaXJxIHx8IG5ld19pcnEgPiAxNSkKIAkJcmV0dXJuOwogCisJLyogSW50ZXJuYWwgZGV2aWNlID8gKi8KKwlpZiAoZGV2LT5idXMtPm51bWJlciAhPSAwIHx8IFBDSV9TTE9UKGRldi0+ZGV2Zm4pID4gdmlhX3ZsaW5rX2Rldl9oaSB8fAorCSAgICBQQ0lfU0xPVChkZXYtPmRldmZuKSA8IHZpYV92bGlua19kZXZfbG8pCisJCXJldHVybjsKKworCS8qIFRoaXMgaXMgYW4gaW50ZXJuYWwgVkxpbmsgZGV2aWNlIG9uIGEgUElDIGludGVycnVwdC4gVGhlIEJJT1MKKwkgICBvdWdodCB0byBoYXZlIHNldCB0aGlzIGJ1dCBtYXkgbm90IGhhdmUsIHNvIHdlIHJlZG8gaXQgKi8KKwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCAmaXJxKTsKIAlpZiAobmV3X2lycSAhPSBpcnEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBWSUEgSVJRIGZpeHVwIGZvciAlcywgZnJvbSAlZCB0byAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBWSUEgVkxpbmsgSVJRIGZpeHVwIGZvciAlcywgZnJvbSAlZCB0byAlZFxuIiwKIAkJCXBjaV9uYW1lKGRldiksIGlycSwgbmV3X2lycSk7CiAJCXVkZWxheSgxNSk7CS8qIHVua25vd24gaWYgZGVsYXkgcmVhbGx5IG5lZWRlZCAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIG5ld19pcnEpOwogCX0KIH0KLURFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0FOWV9JRCwgcXVpcmtfdmlhX2lycSk7CitERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9BTllfSUQsIHF1aXJrX3ZpYV92bGluayk7CiAKIC8qCiAgKiBWSUEgVlQ4MkM1OTggaGFzIGl0cyBkZXZpY2UgSUQgc2V0dGFibGUgYW5kIG1hbnkgQklPU2VzCkBAIC03MjAsMTMgKzc1NSwxNCBAQAogICogZG8gdGhpcyBldmVuIGlmIHRoZSBMaW51eCBDYXJkQnVzIGRyaXZlciBpcyBub3QgbG9hZGVkLCBiZWNhdXNlCiAgKiB0aGUgTGludXggaTgyMzY1IGRyaXZlciBkb2VzIG5vdCAoYW5kIHNob3VsZCBub3QpIGhhbmRsZSBDYXJkQnVzLgogICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfY2FyZGJ1c19sZWdhY3koc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIHF1aXJrX2NhcmRidXNfbGVnYWN5KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaWYgKChQQ0lfQ0xBU1NfQlJJREdFX0NBUkRCVVMgPDwgOCkgXiBkZXYtPmNsYXNzKQogCQlyZXR1cm47CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DQl9MRUdBQ1lfTU9ERV9CQVNFLCAwKTsKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHF1aXJrX2NhcmRidXNfbGVnYWN5KTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya19jYXJkYnVzX2xlZ2FjeSk7CiAKIC8qCiAgKiBGb2xsb3dpbmcgdGhlIFBDSSBvcmRlcmluZyBydWxlcyBpcyBvcHRpb25hbCBvbiB0aGUgQU1ENzYyLiBJJ20gbm90CkBAIC03MzUsNyArNzcxLDcgQEAKICAqIFRvIGJlIGZhaXIgdG8gQU1ELCBpdCBmb2xsb3dzIHRoZSBzcGVjIGJ5IGRlZmF1bHQsIGl0cyBCSU9TIHBlb3BsZQogICogd2hvIHR1cm4gaXQgb2ZmIQogICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfYW1kX29yZGVyaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBxdWlya19hbWRfb3JkZXJpbmcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1MzIgcGNpYzsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDRDLCAmcGNpYyk7CkBAIC03NDksNiArNzg1LDcgQEAKIAl9CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FNRCwJUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDBDLCBxdWlya19hbWRfb3JkZXJpbmcgKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX0FNRCwJUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDBDLCBxdWlya19hbWRfb3JkZXJpbmcgKTsKIAogLyoKICAqCURyZWFtV29ya3MgcHJvdmlkZWQgd29ya2Fyb3VuZCBmb3IgRHVub3JkIEktMzAwMCBwcm9ibGVtCkBAIC03ODQsNyArODIxLDcgQEAKICAqIGRhdGFzaGVldHMgZm91bmQgYXQgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vZHMvR1ggZm9yIGluZm8gb24gd2hhdAogICogdGhlc2UgYml0cyBkby4gIDxjaHJpc3RlckB3ZWluaWdlbC5zZT4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX21lZGlhZ3hfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBxdWlya19tZWRpYWd4X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IHJlZzsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NDEsICZyZWcpOwpAQCAtNzk1LDEzICs4MzIsMTQgQEAKIAl9CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0NZUklYLAlQQ0lfREVWSUNFX0lEX0NZUklYX1BDSV9NQVNURVIsIHF1aXJrX21lZGlhZ3hfbWFzdGVyICk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9DWVJJWCwJUENJX0RFVklDRV9JRF9DWVJJWF9QQ0lfTUFTVEVSLCBxdWlya19tZWRpYWd4X21hc3RlciApOwogCiAvKgogICoJRW5zdXJlIEMwIHJldiByZXN0cmVhbWluZyBpcyBvZmYuIFRoaXMgaXMgbm9ybWFsbHkgZG9uZSBieQogICoJdGhlIEJJT1MgYnV0IGluIHRoZSBvZGQgY2FzZSBpdCBpcyBub3QgdGhlIHJlc3VsdHMgYXJlIGNvcnJ1cHRpb24KICAqCWhlbmNlIHRoZSBwcmVzZW5jZSBvZiBhIExpbnV4IGNoZWNrCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBxdWlya19kaXNhYmxlX3B4YihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIHF1aXJrX2Rpc2FibGVfcHhiKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXUxNiBjb25maWc7CiAJdTggcmV2OwpAQCAtODE3LDggKzg1NSwyNiBAQAogCX0KIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTROWCwJcXVpcmtfZGlzYWJsZV9weGIgKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDU0TlgsCXF1aXJrX2Rpc2FibGVfcHhiICk7CiAKIAorc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3NiNjAwX3NhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJLyogc2V0IHNiNjAwIHNhdGEgdG8gYWhjaSBtb2RlICovCisJaWYgKChwZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUpIHsKKwkJdTggdG1wOworCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDAsICZ0bXApOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MCwgdG1wfDEpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg5LCAxKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4YSwgNik7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDQwLCB0bXApOworCisJCXBkZXYtPmNsYXNzID0gMHgwMTA2MDE7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQSwgcXVpcmtfc2I2MDBfc2F0YSk7CisKIC8qCiAgKglTZXJ2ZXJ3b3JrcyBDU0I1IElERSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IG5hdGl2ZSBtb2RlCiAgKi8KQEAgLTg3NCw3ICs5MzAsNyBAQAogICogcnVucyBldmVyeXdoZXJlIGF0IHByZXNlbnQgd2Ugc3VwcHJlc3MgdGhlIHByaW50ayBvdXRwdXQgaW4gbW9zdAogICogaXJyZWxldmFudCBjYXNlcy4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGs4dF9zb3VuZF9ob3N0YnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBrOHRfc291bmRfaG9zdGJyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGNoYXIgdmFsOwogCkBAIC04OTMsOCArOTQ5LDggQEAKIAl9CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyMzcsIGs4dF9zb3VuZF9ob3N0YnJpZGdlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODIzNywgazh0X3NvdW5kX2hvc3RicmlkZ2UpOwogCi0jaWZuZGVmIENPTkZJR19BQ1BJX1NMRUVQCiAvKgogICogT24gQVNVUyBQNEIgYm9hcmRzLCB0aGUgU01CdXMgUENJIERldmljZSB3aXRoaW4gdGhlIElDSDIvNCBzb3V0aGJyaWRnZQogICogaXMgbm90IGFjdGl2YXRlZC4gVGhlIG15dGggaXMgdGhhdCBBc3VzIHNhaWQgdGhhdCB0aGV5IGRvIG5vdCB3YW50IHRoZQpAQCAtOTA2LDEyICs5NjIsOCBAQAogICogYnJpZGdlLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGRldmljZSBoYXMgbm8gc3VidmVuZG9yL3N1YmRldmljZSBJRC4gU28gaXQgCiAgKiBiZWNvbWVzIG5lY2Vzc2FyeSB0byBkbyB0aGlzIHR3ZWFrIGluIHR3byBzdGVwcyAtLSBJJ3ZlIGNob3NlbiB0aGUgSG9zdAogICogYnJpZGdlIGFzIHRyaWdnZXIuCi0gKgotICogQWN0dWFsbHksIGxlYXZpbmcgaXQgdW5oaWRkZW4gYW5kIG5vdCByZWRvaW5nIHRoZSBxdWlyayBvdmVyIHN1c3BlbmQycmFtCi0gKiB3aWxsIGNhdXNlIHRoZXJtYWwgbWFuYWdlbWVudCB0byBicmVhayBkb3duLCBhbmQgY2F1c2luZyBtYWNoaW5lIHRvCi0gKiBvdmVyaGVhdC4KICAqLwotc3RhdGljIGludCBfX2luaXRkYXRhIGFzdXNfaGlkZXNfc21idXM7CitzdGF0aWMgaW50IGFzdXNfaGlkZXNfc21idXM7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhc3VzX2hpZGVzX3NtYnVzX2hvc3RicmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTk1OCw2ICsxMDEwLDExIEBACiAJCQljYXNlIDB4MTg2YTogLyogTTZOZSBub3RlYm9vayAqLwogCQkJCWFzdXNfaGlkZXNfc21idXMgPSAxOwogCQkJfQorCQlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjg2NV9IQikKKwkJCXN3aXRjaCAoZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKSB7CisJCQljYXNlIDB4ODBmMjogLyogUDRQODAwLVggKi8KKwkJCQlhc3VzX2hpZGVzX3NtYnVzID0gMTsKKwkJCX0KIAkJaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5MTVHTV9IQikgewogCQkJc3dpdGNoIChkZXYtPnN1YnN5c3RlbV9kZXZpY2UpIHsKIAkJCWNhc2UgMHgxODgyOiAvKiBNNlYgbm90ZWJvb2sgKi8KQEAgLTEwMTksNyArMTA3Niw3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84Mjg1NUdNX0hCLAlhc3VzX2hpZGVzX3NtYnVzX2hvc3RicmlkZ2UgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R01fSEIsIGFzdXNfaGlkZXNfc21idXNfaG9zdGJyaWRnZSApOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXN1c19oaWRlc19zbWJ1c19scGMoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIGFzdXNfaGlkZXNfc21idXNfbHBjKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTE2IHZhbDsKIAkKQEAgLTEwNDIsOCArMTA5OSwxNCBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8xMiwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTIsCWFzdXNfaGlkZXNfc21idXNfbHBjICk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzAsCWFzdXNfaGlkZXNfc21idXNfbHBjICk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzAsCWFzdXNfaGlkZXNfc21idXNfbHBjICk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzAsCWFzdXNfaGlkZXNfc21idXNfbHBjICk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzAsCWFzdXNfaGlkZXNfc21idXNfbHBjICk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzEyLAlhc3VzX2hpZGVzX3NtYnVzX2xwYyApOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMiwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMCwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKIAotc3RhdGljIHZvaWQgX19pbml0IGFzdXNfaGlkZXNfc21idXNfbHBjX2ljaDYoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIGFzdXNfaGlkZXNfc21idXNfbHBjX2ljaDYoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1MzIgdmFsLCByY2JhOwogCXZvaWQgX19pb21lbSAqYmFzZTsKQEAgLTEwNTksMTkgKzExMjIsMTkgQEAKIAlwcmludGsoS0VSTl9JTkZPICJQQ0k6IEVuYWJsZWQgSUNINi9pODAxIFNNQnVzIGRldmljZVxuIik7CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEsCWFzdXNfaGlkZXNfc21idXNfbHBjX2ljaDYgKTsKLQotI2VuZGlmCitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEsCWFzdXNfaGlkZXNfc21idXNfbHBjX2ljaDYgKTsKIAogLyoKICAqIFNpUyA5Nnggc291dGggYnJpZGdlOiBCSU9TIHR5cGljYWxseSBoaWRlcyBTTUJ1cyBkZXZpY2UuLi4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX3Npc185Nnhfc21idXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIHF1aXJrX3Npc185Nnhfc21idXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1OCB2YWwgPSAwOwotCXByaW50ayhLRVJOX0lORk8gIkVuYWJsaW5nIFNpUyA5NnggU01CdXMuXG4iKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NzcsICZ2YWwpOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NzcsIHZhbCAmIH4weDEwKTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NzcsICZ2YWwpOworCWlmICh2YWwgJiAweDEwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVuYWJsaW5nIFNpUyA5NnggU01CdXMuXG4iKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg3NywgdmFsICYgfjB4MTApOworCX0KIH0KIAogLyoKQEAgLTEwODYsNyArMTE0OSw3IEBACiAKICNkZWZpbmUgU0lTX0RFVEVDVF9SRUdJU1RFUiAweDQwCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBxdWlya19zaXNfNTAzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBxdWlya19zaXNfNTAzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTggcmVnOwogCXUxNiBkZXZpZDsKQEAgLTExMDMsMTEgKzExNjYsMTIgQEAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJVbmNvdmVyaW5nIFNJUyV4IHRoYXQgaGlkIGFzIGEgU0lTNTAzIChjb21wYXRpYmxlPSVkKVxuIiwgZGV2aWQsIHNpc185NnhfY29tcGF0aWJsZSk7CiAKIAkvKgotCSAqIE9rLCBpdCBub3cgc2hvd3MgdXAgYXMgYSA5NnguLiBUaGUgOTZ4IHF1aXJrcyBhcmUgYWZ0ZXIKLQkgKiB0aGUgNTAzIHF1aXJrIGluIHRoZSBxdWlyayB0YWJsZSwgc28gdGhleSdsbCBhdXRvbWF0aWNhbGx5Ci0JICogcnVuIGFuZCBlbmFibGUgdGhpbmdzIGxpa2UgdGhlIFNNQnVzIGRldmljZQorCSAqIE9rLCBpdCBub3cgc2hvd3MgdXAgYXMgYSA5NnguLiBydW4gdGhlIDk2eCBxdWlyayBieQorCSAqIGhhbmQgaW4gY2FzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZC4KKwkgKiAoZGVwZW5kcyBvbiBsaW5rIG9yZGVyLCB3aGljaCBpcyBhcHBhcmVudGx5IG5vdCBndWFyYW50ZWVkKQogCSAqLwogCWRldi0+ZGV2aWNlID0gZGV2aWQ7CisJcXVpcmtfc2lzXzk2eF9zbWJ1cyhkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfc2lzXzk2eF9jb21wYXRpYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0xMTIyLDEzICsxMTg2LDE0IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9TSSwJUENJX0RFVklDRV9JRF9TSV83MzUsCQlxdWlya19zaXNfOTZ4X2NvbXBhdGlibGUgKTsKIAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfU0ksCVBDSV9ERVZJQ0VfSURfU0lfNTAzLAkJcXVpcmtfc2lzXzUwMyApOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FKFBDSV9WRU5ET1JfSURfU0ksCVBDSV9ERVZJQ0VfSURfU0lfNTAzLAkJcXVpcmtfc2lzXzUwMyApOwogLyoKICAqIE9uIEFTVVMgQThWIGFuZCBBOFYgRGVsdXhlIGJvYXJkcywgdGhlIG9uYm9hcmQgQUM5NyBhdWRpbyBjb250cm9sbGVyCiAgKiBhbmQgTUM5NyBtb2RlbSBjb250cm9sbGVyIGFyZSBkaXNhYmxlZCB3aGVuIGEgc2Vjb25kIFBDSSBzb3VuZGNhcmQgaXMKICAqIHByZXNlbnQuIFRoaXMgcGF0Y2gsIHR3ZWFraW5nIHRoZSBWVDgyMzcgSVNBIGJyaWRnZSwgZW5hYmxlcyB0aGVtLgogICogLS0gYmpkCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBhc3VzX2hpZGVzX2FjOTdfbHBjKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBhc3VzX2hpZGVzX2FjOTdfbHBjKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTggdmFsOwogCWludCBhc3VzX2hpZGVzX2FjOTcgPSAwOwpAQCAtMTE1OSw2ICsxMjI0LDE0IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9TSSwJUENJX0RFVklDRV9JRF9TSV85NjMsCQlxdWlya19zaXNfOTZ4X3NtYnVzICk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9TSSwJUENJX0RFVklDRV9JRF9TSV9MUEMsCQlxdWlya19zaXNfOTZ4X3NtYnVzICk7CiAKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX1ZJQSwJUENJX0RFVklDRV9JRF9WSUFfODIzNywgYXN1c19oaWRlc19hYzk3X2xwYyApOworCisKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX1NJLAlQQ0lfREVWSUNFX0lEX1NJXzk2MSwJCXF1aXJrX3Npc185Nnhfc21idXMgKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX1NJLAlQQ0lfREVWSUNFX0lEX1NJXzk2MiwJCXF1aXJrX3Npc185Nnhfc21idXMgKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX1NJLAlQQ0lfREVWSUNFX0lEX1NJXzk2MywJCXF1aXJrX3Npc185Nnhfc21idXMgKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRShQQ0lfVkVORE9SX0lEX1NJLAlQQ0lfREVWSUNFX0lEX1NJX0xQQywJCXF1aXJrX3Npc185Nnhfc21idXMgKTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0FUQSkgfHwgZGVmaW5lZChDT05GSUdfQVRBX01PRFVMRSkKIAogLyoKQEAgLTExNjcsNyArMTI0MCw3IEBACiAgKgl0aGUgUENJIHNjYW5uaW5nLgogICovCiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19qbWljcm9uX2R1YWxmbihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB2b2lkIHF1aXJrX2ptaWNyb25fZHVhbGZuKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXUzMiBjb25mOwogCXU4IGhkcjsKQEAgLTExODksOCArMTI2Miw4IEBACiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHg0MCwgJmNvbmYpOwogCQkJLyogRW5hYmxlIGR1YWwgZnVuY3Rpb24gbW9kZSwgQUhDSSBvbiBmbiAwLCBJREUgZm4xICovCiAJCQkvKiBTZXQgdGhlIGNsYXNzIGNvZGVzIGNvcnJlY3RseSBhbmQgdGhlbiBkaXJlY3QgSURFIDAgKi8KLQkJCWNvbmYgJj0gfjB4MDAwRjAyMDA7CS8qIENsZWFyIGJpdCA5IGFuZCAxNi0xOSAqLwotCQkJY29uZiB8PSAgMHgwMEMyMDAwMjsJLyogU2V0IGJpdCAxLCAxNywgMjIsIDIzICovCisJCQljb25mICY9IH4weDAwMEZGMjAwOyAvKiBDbGVhciBiaXQgOSBhbmQgMTItMTkgKi8KKwkJCWNvbmYgfD0gIDB4MDBDMkExMDI7IC8qIFNldCAxLCA4LCAxMywgMTUsIDE3LCAyMiwgMjMgKi8KIAkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg0MCwgY29uZik7CiAKIAkJCS8qIFJlY29uZmlndXJlIHNvIHRoYXQgdGhlIFBDSSBzY2FubmVyIGRpc2NvdmVycyB0aGUKQEAgLTEyMDUsNiArMTI3OCw3IEBACiB9CiAKIERFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0FOWV9JRCwgcXVpcmtfam1pY3Jvbl9kdWFsZm4pOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FKFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0FOWV9JRCwgcXVpcmtfam1pY3Jvbl9kdWFsZm4pOwogCiAjZW5kaWYKIApAQCAtMTUzMiw2ICsxNjA2LDggQEAKIGV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfZmluYWxbXTsKIGV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fc3RhcnRfcGNpX2ZpeHVwc19lbmFibGVbXTsKIGV4dGVybiBzdHJ1Y3QgcGNpX2ZpeHVwIF9fZW5kX3BjaV9maXh1cHNfZW5hYmxlW107CitleHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX3N0YXJ0X3BjaV9maXh1cHNfcmVzdW1lW107CitleHRlcm4gc3RydWN0IHBjaV9maXh1cCBfX2VuZF9wY2lfZml4dXBzX3Jlc3VtZVtdOwogCiAKIHZvaWQgcGNpX2ZpeHVwX2RldmljZShlbnVtIHBjaV9maXh1cF9wYXNzIHBhc3MsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0xNTU5LDYgKzE2MzUsMTEgQEAKIAkJZW5kID0gX19lbmRfcGNpX2ZpeHVwc19lbmFibGU7CiAJCWJyZWFrOwogCisJY2FzZSBwY2lfZml4dXBfcmVzdW1lOgorCQlzdGFydCA9IF9fc3RhcnRfcGNpX2ZpeHVwc19yZXN1bWU7CisJCWVuZCA9IF9fZW5kX3BjaV9maXh1cHNfcmVzdW1lOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCS8qIHN0dXBpZCBjb21waWxlciB3YXJuaW5nLCB5b3Ugd291bGQgdGhpbmsgd2l0aCBhbiBlbnVtLi4uICovCiAJCXJldHVybjsKQEAgLTE1OTYsNyArMTY3Nyw3IEBACiAgKiBGb3JjZSBpdCB0byBiZSBsaW5rZWQgYnkgc2V0dGluZyB0aGUgY29ycmVzcG9uZGluZyBjb250cm9sIGJpdCBpbiB0aGUKICAqIGNvbmZpZyBzcGFjZS4KICAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX252aWRpYV9jazgwNF9wY2llX2Flcl9leHRfY2FwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBxdWlya19udmlkaWFfY2s4MDRfcGNpZV9hZXJfZXh0X2NhcChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVpbnQ4X3QgYjsKIAlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweGY0MSwgJmIpID09IDApIHsKQEAgLTE2MTAsNiArMTY5MSw4IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX05WSURJQSwgIFBDSV9ERVZJQ0VfSURfTlZJRElBX0NLODA0X1BDSUUsCiAJCQlxdWlya19udmlkaWFfY2s4MDRfcGNpZV9hZXJfZXh0X2NhcCk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUUoUENJX1ZFTkRPUl9JRF9OVklESUEsICBQQ0lfREVWSUNFX0lEX05WSURJQV9DSzgwNF9QQ0lFLAorCQkJcXVpcmtfbnZpZGlhX2NrODA0X3BjaWVfYWVyX2V4dF9jYXApOwogCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIC8qIFRvIGRpc2FibGUgTVNJIGdsb2JhbGx5ICovCkBAIC0xNjQ0LDE5ICsxNzI3LDIzIEBACiAgKiByZXR1cm4gMSBpZiBhIEhUIE1TSSBjYXBhYmlsaXR5IGlzIGZvdW5kIGFuZCBlbmFibGVkICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtc2lfaHRfY2FwX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQl1OCBwb3M7Ci0JaW50IHR0bDsKLQlmb3IgKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0hUKSwgdHRsID0gNDg7Ci0JICAgICBwb3MgJiYgdHRsOwotCSAgICAgcG9zID0gcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KGRldiwgcG9zLCBQQ0lfQ0FQX0lEX0hUKSwgdHRsLS0pIHsKLQkJdTMyIGNhcF9oZHI7Ci0JCS8qIE1TSSBtYXBwaW5nIHNlY3Rpb24gYWNjb3JkaW5nIHRvIEh5cGVydHJhbnNwb3J0IHNwZWMgKi8KLQkJaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcywgJmNhcF9oZHIpID09IDAKLQkJICAgICYmIChjYXBfaGRyICYgMHhmODAwMDAwMCkgPT0gMHhhODAwMDAwMCAvKiBNU0kgbWFwcGluZyAqLykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBGb3VuZCBIVCBNU0kgbWFwcGluZyBvbiAlcyB3aXRoIGNhcGFiaWxpdHkgJXNcbiIsCi0JCQkgICAgICAgcGNpX25hbWUoZGV2KSwgY2FwX2hkciAmIDB4MTAwMDAgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQkJCXJldHVybiAoY2FwX2hkciAmIDB4MTAwMDApICE9IDA7IC8qIE1TSSBtYXBwaW5nIGNhcCBlbmFibGVkICovCisJaW50IHBvcywgdHRsID0gNDg7CisKKwlwb3MgPSBwY2lfZmluZF9odF9jYXBhYmlsaXR5KGRldiwgSFRfQ0FQVFlQRV9NU0lfTUFQUElORyk7CisJd2hpbGUgKHBvcyAmJiB0dGwtLSkgeworCQl1OCBmbGFnczsKKworCQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyBIVF9NU0lfRkxBR1MsCisJCQkJCSAmZmxhZ3MpID09IDApCisJCXsKKwkJCXByaW50ayhLRVJOX0lORk8gIlBDSTogRm91bmQgJXMgSFQgTVNJIE1hcHBpbmcgb24gJXNcbiIsCisJCQkJZmxhZ3MgJiBIVF9NU0lfRkxBR1NfRU5BQkxFID8KKwkJCQkiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBwY2lfbmFtZShkZXYpKTsKKwkJCXJldHVybiAoZmxhZ3MgJiBIVF9NU0lfRkxBR1NfRU5BQkxFKSAhPSAwOwogCQl9CisKKwkJcG9zID0gcGNpX2ZpbmRfbmV4dF9odF9jYXBhYmlsaXR5KGRldiwgcG9zLAorCQkJCQkJICBIVF9DQVBUWVBFX01TSV9NQVBQSU5HKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjg4LDggKzE3NzUsOSBAQAogCSAqIGEgc2luZ2xlIG9uZSBoYXZpbmcgTVNJIGlzIGVub3VnaCB0byBiZSBzdXJlIHRoYXQgTVNJIGFyZSBzdXBwb3J0ZWQuCiAJICovCiAJcGRldiA9IHBjaV9nZXRfc2xvdChkZXYtPmJ1cywgMCk7Ci0JaWYgKGRldi0+c3Vib3JkaW5hdGUgJiYgIW1zaV9odF9jYXBfZW5hYmxlZChkZXYpCi0JICAgICYmICFtc2lfaHRfY2FwX2VuYWJsZWQocGRldikpIHsKKwlpZiAoIXBkZXYpCisJCXJldHVybjsKKwlpZiAoIW1zaV9odF9jYXBfZW5hYmxlZChkZXYpICYmICFtc2lfaHRfY2FwX2VuYWJsZWQocGRldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBNU0kgcXVpcmsgZGV0ZWN0ZWQuICIKIAkJICAgICAgICJNU0kgZGlzYWJsZWQgb24gY2hpcHNldCAlcy5cbiIsCiAJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKaW5kZXggMmYxM2ViYS4uYjI2NTNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2VhcmNoLmMKKysrIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKQEAgLTE5Myw2ICsxOTMsMTUgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCiAJV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7CisKKwkvKgorCSAqIHBjaV9maW5kX3N1YnN5cygpIGNhbiBiZSBjYWxsZWQgb24gdGhlIGlkZV9zZXR1cCgpIHBhdGgsIHN1cGVyLWVhcmx5CisJICogaW4gYm9vdC4gIEJ1dCB0aGUgZG93bl9yZWFkKCkgd2lsbCBlbmFibGUgbG9jYWwgaW50ZXJydXB0cywgd2hpY2gKKwkgKiBjYW4gY2F1c2Ugc29tZSBtYWNoaW5lcyB0byBjcmFzaC4gIFNvIGhlcmUgd2UgZGV0ZWN0IGFuZCBmbGFnIHRoYXQKKwkgKiBzaXR1YXRpb24gYW5kIGJhaWwgb3V0IGVhcmx5LgorCSAqLworCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZwY2lfZGV2aWNlcykpKQorCQlyZXR1cm4gTlVMTDsKIAlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKIAluID0gZnJvbSA/IGZyb20tPmdsb2JhbF9saXN0Lm5leHQgOiBwY2lfZGV2aWNlcy5uZXh0OwogCkBAIC0yNTksNiArMjY4LDE1IEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAogCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOworCisJLyoKKwkgKiBwY2lfZ2V0X3N1YnN5cygpIGNhbiBwb3RlbnRpYWxseSBiZSBjYWxsZWQgYnkgZHJpdmVycyBzdXBlci1lYXJseQorCSAqIGluIGJvb3QuICBCdXQgdGhlIGRvd25fcmVhZCgpIHdpbGwgZW5hYmxlIGxvY2FsIGludGVycnVwdHMsIHdoaWNoCisJICogY2FuIGNhdXNlIHNvbWUgbWFjaGluZXMgdG8gY3Jhc2guICBTbyBoZXJlIHdlIGRldGVjdCBhbmQgZmxhZyB0aGF0CisJICogc2l0dWF0aW9uIGFuZCBiYWlsIG91dCBlYXJseS4KKwkgKi8KKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmcGNpX2RldmljZXMpKSkKKwkJcmV0dXJuIE5VTEw7CiAJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CiAJbiA9IGZyb20gPyBmcm9tLT5nbG9iYWxfbGlzdC5uZXh0IDogcGNpX2RldmljZXMubmV4dDsKIApAQCAtNDEzLDYgKzQzMSwyNCBAQAogCXJldHVybiBkZXY7CiB9CiAKK2NvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZmluZF9wcmVzZW50KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZm91bmQgPSBOVUxMOworCisJV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7CisJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJd2hpbGUgKGlkcy0+dmVuZG9yIHx8IGlkcy0+c3VidmVuZG9yIHx8IGlkcy0+Y2xhc3NfbWFzaykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnBjaV9kZXZpY2VzLCBnbG9iYWxfbGlzdCkgeworCQkJaWYgKChmb3VuZCA9IHBjaV9tYXRjaF9vbmVfZGV2aWNlKGlkcywgZGV2KSkgIT0gTlVMTCkKKwkJCQlicmVhazsKKwkJfQorCQlpZHMrKzsKKwl9CisJdXBfcmVhZCgmcGNpX2J1c19zZW0pOworCXJldHVybiBmb3VuZDsKK30KKwogLyoqCiAgKiBwY2lfZGV2X3ByZXNlbnQgLSBSZXR1cm5zIDEgaWYgZGV2aWNlIG1hdGNoaW5nIHRoZSBkZXZpY2UgbGlzdCBpcyBwcmVzZW50LCAwIGlmIG5vdC4KICAqIEBpZHM6IEEgcG9pbnRlciB0byBhIG51bGwgdGVybWluYXRlZCBsaXN0IG9mIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0cnVjdHVyZXMKQEAgLTQyNiwyNSArNDYyLDExIEBACiAgKi8KIGludCBwY2lfZGV2X3ByZXNlbnQoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCWludCBmb3VuZCA9IDA7Ci0KLQlXQVJOX09OKGluX2ludGVycnVwdCgpKTsKLQlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKLQl3aGlsZSAoaWRzLT52ZW5kb3IgfHwgaWRzLT5zdWJ2ZW5kb3IgfHwgaWRzLT5jbGFzc19tYXNrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmcGNpX2RldmljZXMsIGdsb2JhbF9saXN0KSB7Ci0JCQlpZiAocGNpX21hdGNoX29uZV9kZXZpY2UoaWRzLCBkZXYpKSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQkJfQotCQlpZHMrKzsKLQl9Ci1leGl0OgotCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKLQlyZXR1cm4gZm91bmQ7CisJcmV0dXJuIHBjaV9maW5kX3ByZXNlbnQoaWRzKSA9PSBOVUxMID8gMCA6IDE7CiB9CisKIEVYUE9SVF9TWU1CT0wocGNpX2Rldl9wcmVzZW50KTsKK0VYUE9SVF9TWU1CT0wocGNpX2ZpbmRfcHJlc2VudCk7CiAKIEVYUE9SVF9TWU1CT0wocGNpX2ZpbmRfZGV2aWNlKTsKIEVYUE9SVF9TWU1CT0wocGNpX2ZpbmRfZGV2aWNlX3JldmVyc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCA4ZjdiY2Y1Li44OWYzMDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtNDEsNyArNDEsNyBAQAogICogaGF2ZSBhIFAyUCBicmlkZ2UgYmVsb3cgYSBjYXJkYnVzIGJyaWRnZSwgd2UgbmVlZCA0Sy4KICAqLwogI2RlZmluZSBDQVJEQlVTX0lPX1NJWkUJCSgyNTYpCi0jZGVmaW5lIENBUkRCVVNfTUVNX1NJWkUJKDMyKjEwMjQqMTAyNCkKKyNkZWZpbmUgQ0FSREJVU19NRU1fU0laRQkoNjQqMTAyNCoxMDI0KQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQKIHBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoc3RydWN0IHBjaV9idXMgKmJ1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKaW5kZXggYWI3OGU0Yi4uY2I0Y2VkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKQEAgLTMzLDExICszMywyMiBAQAogCXUzMiBuZXcsIGNoZWNrLCBtYXNrOwogCWludCByZWc7CiAKLQkvKiBJZ25vcmUgcmVzb3VyY2VzIGZvciB1bmltcGxlbWVudGVkIEJBUnMgYW5kIHVudXNlZCByZXNvdXJjZSBzbG90cwotCSAgIGZvciA2NCBiaXQgQkFScy4gKi8KKwkvKgorCSAqIElnbm9yZSByZXNvdXJjZXMgZm9yIHVuaW1wbGVtZW50ZWQgQkFScyBhbmQgdW51c2VkIHJlc291cmNlIHNsb3RzCisJICogZm9yIDY0IGJpdCBCQVJzLgorCSAqLwogCWlmICghcmVzLT5mbGFncykKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBJZ25vcmUgbm9uLW1vdmVhYmxlIHJlc291cmNlcy4gIFRoaXMgbWlnaHQgYmUgbGVnYWN5IHJlc291cmNlcyBmb3IKKwkgKiB3aGljaCBubyBmdW5jdGlvbmFsIEJBUiByZWdpc3RlciBleGlzdHMgb3IgYW5vdGhlciBpbXBvcnRhbnQKKwkgKiBzeXN0ZW0gcmVzb3VyY2Ugd2Ugc2hvdWxkIGJldHRlciBub3QgbW92ZSBhcm91bmQgaW4gc3lzdGVtIGFkZHJlc3MKKwkgKiBzcGFjZS4KKwkgKi8KKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUENJX0ZJWEVEKQorCQlyZXR1cm47CisKIAlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhkZXYsICZyZWdpb24sIHJlcyk7CiAKIAlwcl9kZWJ1ZygiICBnb3QgcmVzIFslbGx4OiVsbHhdIGJ1cyBbJWx4OiVseF0gZmxhZ3MgJWx4IGZvciAiCkBAIC0yMTIsNiArMjIzLDEwIEBACiAJCXJlc291cmNlX3NpemVfdCByX2FsaWduOwogCiAJCXIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKKworCQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BDSV9GSVhFRCkKKwkJCWNvbnRpbnVlOworCiAJCXJfYWxpZ24gPSByLT5lbmQgLSByLT5zdGFydDsKIAkJCiAJCWlmICghKHItPmZsYWdzKSB8fCByLT5wYXJlbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKaW5kZXggNTJkNGEzOC4uMzMzNGYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJaWYgKCFpbykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljZiA9IGtjYWxsb2MoMSwgc2l6ZW9mICpjZiwgR0ZQX0tFUk5FTCk7CisJY2YgPSBremFsbG9jKHNpemVvZiAqY2YsIEdGUF9LRVJORUwpOwogCWlmICghY2YpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKaW5kZXggMDZiZjdmNC4uZTY1YTZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJaWYgKGlycSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY2YgPSBrY2FsbG9jKDEsIHNpemVvZiAqY2YsIEdGUF9LRVJORUwpOworCWNmID0ga3phbGxvYyhzaXplb2YgKmNmLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNmKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpbml0X3RpbWVyKCZjZi0+dGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCBkMDc3ODcwLi4zMjczNzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAgICAgdXNlcl9pbmZvX3QgKnVzZXI7CiAgICAgaW50IHJldDsKIAotICAgIGRzX2RiZygyLCAiZHNfcmVhZChzb2NrZXQgJWQpXG4iLCBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpKTsKKyAgICBkc19kYmcoMiwgImRzX3JlYWQoc29ja2V0ICVkKVxuIiwgaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKIAogICAgIGlmIChjb3VudCA8IDQpCiAJcmV0dXJuIC1FSU5WQUw7CkBAIC01MTEsNyArNTExLDcgQEAKIHN0YXRpYyBzc2l6ZV90IGRzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0gICAgZHNfZGJnKDIsICJkc193cml0ZShzb2NrZXQgJWQpXG4iLCBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpKTsKKyAgICBkc19kYmcoMiwgImRzX3dyaXRlKHNvY2tldCAlZClcbiIsIGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7CiAKICAgICBpZiAoY291bnQgIT0gNCkKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTUyOSw3ICs1MjksNyBAQAogICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwogICAgIHVzZXJfaW5mb190ICp1c2VyOwogCi0gICAgZHNfZGJnKDIsICJkc19wb2xsKHNvY2tldCAlZClcbiIsIGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkpOworICAgIGRzX2RiZygyLCAiZHNfcG9sbChzb2NrZXQgJWQpXG4iLCBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpOwogCiAgICAgdXNlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKICAgICBpZiAoQ0hFQ0tfVVNFUih1c2VyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMgYi9kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jCmluZGV4IDNhYzViMTIuLmEwYjE1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJc3RydWN0IHBucF9pZCAqIGlkOwogCWlmICghZGV2KQogCQlyZXR1cm47Ci0JaWQgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX2lkKSwgR0ZQX0tFUk5FTCk7CisJaWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5wX2lkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpZCkKIAkJcmV0dXJuOwogCXNwcmludGYoaWQtPmlkLCAiJWMlYyVjJXgleCV4JXgiLApAQCAtNDE5LDcgKzQxOSw3IEBACiAJc3RydWN0IHBucF9kZXYgKmRldjsKIAogCWlzYXBucF9wZWVrKHRtcCwgc2l6ZSk7Ci0JZGV2ID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9kZXYpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5wX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KQogCQlyZXR1cm4gTlVMTDsKIAlkZXYtPm51bWJlciA9IG51bWJlcjsKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCXVuc2lnbmVkIGxvbmcgYml0czsKIAogCWlzYXBucF9wZWVrKHRtcCwgc2l6ZSk7Ci0JaXJxID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9pcnEpLCBHRlBfS0VSTkVMKTsKKwlpcnEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5wX2lycSksIEdGUF9LRVJORUwpOwogCWlmICghaXJxKQogCQlyZXR1cm47CiAJYml0cyA9ICh0bXBbMV0gPDwgOCkgfCB0bXBbMF07CkBAIC00NzQsNyArNDc0LDcgQEAKIAlzdHJ1Y3QgcG5wX2RtYSAqZG1hOwogCiAJaXNhcG5wX3BlZWsodG1wLCBzaXplKTsKLQlkbWEgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX2RtYSksIEdGUF9LRVJORUwpOworCWRtYSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfZG1hKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbWEpCiAJCXJldHVybjsKIAlkbWEtPm1hcCA9IHRtcFswXTsKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCXN0cnVjdCBwbnBfcG9ydCAqcG9ydDsKIAogCWlzYXBucF9wZWVrKHRtcCwgc2l6ZSk7Ci0JcG9ydCA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwbnBfcG9ydCksIEdGUF9LRVJORUwpOworCXBvcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5wX3BvcnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBvcnQpCiAJCXJldHVybjsKIAlwb3J0LT5taW4gPSAodG1wWzJdIDw8IDgpIHwgdG1wWzFdOwpAQCAtNTE3LDcgKzUxNyw3IEBACiAJc3RydWN0IHBucF9wb3J0ICpwb3J0OwogCiAJaXNhcG5wX3BlZWsodG1wLCBzaXplKTsKLQlwb3J0ID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfcG9ydCksIEdGUF9LRVJORUwpOwogCWlmICghcG9ydCkKIAkJcmV0dXJuOwogCXBvcnQtPm1pbiA9IHBvcnQtPm1heCA9ICh0bXBbMV0gPDwgOCkgfCB0bXBbMF07CkBAIC01MzksNyArNTM5LDcgQEAKIAlzdHJ1Y3QgcG5wX21lbSAqbWVtOwogCiAJaXNhcG5wX3BlZWsodG1wLCBzaXplKTsKLQltZW0gPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX21lbSksIEdGUF9LRVJORUwpOworCW1lbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfbWVtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZW0pCiAJCXJldHVybjsKIAltZW0tPm1pbiA9ICgodG1wWzJdIDw8IDgpIHwgdG1wWzFdKSA8PCA4OwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJc3RydWN0IHBucF9tZW0gKm1lbTsKIAogCWlzYXBucF9wZWVrKHRtcCwgc2l6ZSk7Ci0JbWVtID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9tZW0pLCBHRlBfS0VSTkVMKTsKKwltZW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5wX21lbSksIEdGUF9LRVJORUwpOwogCWlmICghbWVtKQogCQlyZXR1cm47CiAJbWVtLT5taW4gPSAodG1wWzRdIDw8IDI0KSB8ICh0bXBbM10gPDwgMTYpIHwgKHRtcFsyXSA8PCA4KSB8IHRtcFsxXTsKQEAgLTU4NCw3ICs1ODQsNyBAQAogCXN0cnVjdCBwbnBfbWVtICptZW07CiAKIAlpc2FwbnBfcGVlayh0bXAsIHNpemUpOwotCW1lbSA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwbnBfbWVtKSwgR0ZQX0tFUk5FTCk7CisJbWVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBucF9tZW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1lbSkKIAkJcmV0dXJuOwogCW1lbS0+bWluID0gbWVtLT5tYXggPSAodG1wWzRdIDw8IDI0KSB8ICh0bXBbM10gPDwgMTYpIHwgKHRtcFsyXSA8PCA4KSB8IHRtcFsxXTsKQEAgLTgyOSw3ICs4MjksNyBAQAogCiBzdGF0aWMgdm9pZCBpc2FwbnBfcGFyc2VfY2FyZF9pZChzdHJ1Y3QgcG5wX2NhcmQgKiBjYXJkLCB1bnNpZ25lZCBzaG9ydCB2ZW5kb3IsIHVuc2lnbmVkIHNob3J0IGRldmljZSkKIHsKLQlzdHJ1Y3QgcG5wX2lkICogaWQgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX2lkKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHBucF9pZCAqIGlkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBucF9pZCksIEdGUF9LRVJORUwpOwogCWlmICghaWQpCiAJCXJldHVybjsKIAlzcHJpbnRmKGlkLT5pZCwgIiVjJWMlYyV4JXgleCV4IiwKQEAgLTg2NSw3ICs4NjUsNyBAQAogCQkJaGVhZGVyWzRdLCBoZWFkZXJbNV0sIGhlYWRlcls2XSwgaGVhZGVyWzddLCBoZWFkZXJbOF0pOwogCQlwcmludGsoS0VSTl9ERUJVRyAiY2hlY2tzdW0gPSAweCV4XG4iLCBjaGVja3N1bSk7CiAjZW5kaWYKLQkJaWYgKChjYXJkID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9jYXJkKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCWlmICgoY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfY2FyZCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKIAkJY2FyZC0+bnVtYmVyID0gY3NuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvaXNhcG5wL3Byb2MuYyBiL2RyaXZlcnMvcG5wL2lzYXBucC9wcm9jLmMKaW5kZXggOTU4YzExYi4uZDIxZjNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvaXNhcG5wL3Byb2MuYworKysgYi9kcml2ZXJzL3BucC9pc2FwbnAvcHJvYy5jCkBAIC01Niw3ICs1Niw3IEBACiAKIHN0YXRpYyBzc2l6ZV90IGlzYXBucF9wcm9jX2J1c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGlub2RlICppbm8gPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlubyA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkcCA9IFBERShpbm8pOwogCXN0cnVjdCBwbnBfZGV2ICpkZXYgPSBkcC0+ZGF0YTsKIAlpbnQgcG9zID0gKnBwb3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCmluZGV4IDZjZjM0YTYuLjYyZWRhNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlwbnBfZGJnKCJBQ1BJIGRldmljZSA6IGhpZCAlcyIsIGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpKTsKLQlkZXYgPSAga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9kZXYpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSAga3phbGxvYyhzaXplb2Yoc3RydWN0IHBucF9kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikgewogCQlwbnBfZXJyKCJPdXQgb2YgbWVtb3J5Iik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJZGV2LT5udW1iZXIgPSBudW07CiAJCiAJLyogc2V0IHRoZSBpbml0aWFsIHZhbHVlcyBmb3IgdGhlIFBuUCBkZXZpY2UgKi8KLQlkZXZfaWQgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX2lkKSwgR0ZQX0tFUk5FTCk7CisJZGV2X2lkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBucF9pZCksIEdGUF9LRVJORUwpOwogCWlmICghZGV2X2lkKQogCQlnb3RvIGVycjsKIAlwbnBpZGFjcGlfdG9fcG5waWQoYWNwaV9kZXZpY2VfaGlkKGRldmljZSksIGRldl9pZC0+aWQpOwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewogCQkJaWYgKCFpc3BucGlkYWNwaShjaWRfbGlzdC0+aWRbaV0udmFsdWUpKQogCQkJCWNvbnRpbnVlOwotCQkJZGV2X2lkID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9pZCksIEdGUF9LRVJORUwpOworCQkJZGV2X2lkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBucF9pZCksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFkZXZfaWQpCiAJCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYwppbmRleCAzNzkwNDhmLi43YTUzNTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIAogCWlmIChwLT5jaGFubmVsX2NvdW50ID09IDApCiAJCXJldHVybjsKLQlkbWEgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX2RtYSksIEdGUF9LRVJORUwpOworCWRtYSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfZG1hKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbWEpCiAJCXJldHVybjsKIApAQCAtMzU0LDcgKzM1NCw3IEBACiAKIAlpZiAocC0+aW50ZXJydXB0X2NvdW50ID09IDApCiAJCXJldHVybjsKLQlpcnEgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX2lycSksIEdGUF9LRVJORUwpOworCWlycSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfaXJxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpcnEpCiAJCXJldHVybjsKIApAQCAtMzc1LDcgKzM3NSw3IEBACiAKIAlpZiAocC0+aW50ZXJydXB0X2NvdW50ID09IDApCiAJCXJldHVybjsKLQlpcnEgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX2lycSksIEdGUF9LRVJORUwpOworCWlycSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfaXJxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpcnEpCiAJCXJldHVybjsKIApAQCAtMzk2LDcgKzM5Niw3IEBACiAKIAlpZiAoaW8tPmFkZHJlc3NfbGVuZ3RoID09IDApCiAJCXJldHVybjsKLQlwb3J0ID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfcG9ydCksIEdGUF9LRVJORUwpOwogCWlmICghcG9ydCkKIAkJcmV0dXJuOwogCXBvcnQtPm1pbiA9IGlvLT5taW5pbXVtOwpAQCAtNDE3LDcgKzQxNyw3IEBACiAKIAlpZiAoaW8tPmFkZHJlc3NfbGVuZ3RoID09IDApCiAJCXJldHVybjsKLQlwb3J0ID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfcG9ydCksIEdGUF9LRVJORUwpOwogCWlmICghcG9ydCkKIAkJcmV0dXJuOwogCXBvcnQtPm1pbiA9IHBvcnQtPm1heCA9IGlvLT5hZGRyZXNzOwpAQCAtNDM2LDcgKzQzNiw3IEBACiAKIAlpZiAocC0+YWRkcmVzc19sZW5ndGggPT0gMCkKIAkJcmV0dXJuOwotCW1lbSA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwbnBfbWVtKSwgR0ZQX0tFUk5FTCk7CisJbWVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBucF9tZW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1lbSkKIAkJcmV0dXJuOwogCW1lbS0+bWluID0gcC0+bWluaW11bTsKQEAgLTQ1OSw3ICs0NTksNyBAQAogCiAJaWYgKHAtPmFkZHJlc3NfbGVuZ3RoID09IDApCiAJCXJldHVybjsKLQltZW0gPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX21lbSksIEdGUF9LRVJORUwpOworCW1lbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfbWVtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZW0pCiAJCXJldHVybjsKIAltZW0tPm1pbiA9IHAtPm1pbmltdW07CkBAIC00ODIsNyArNDgyLDcgQEAKIAogCWlmIChwLT5hZGRyZXNzX2xlbmd0aCA9PSAwKQogCQlyZXR1cm47Ci0JbWVtID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9tZW0pLCBHRlBfS0VSTkVMKTsKKwltZW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5wX21lbSksIEdGUF9LRVJORUwpOwogCWlmICghbWVtKQogCQlyZXR1cm47CiAJbWVtLT5taW4gPSBtZW0tPm1heCA9IHAtPmFkZHJlc3M7CkBAIC01MTQsNyArNTE0LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHAtPnJlc291cmNlX3R5cGUgPT0gQUNQSV9NRU1PUllfUkFOR0UpIHsKLQkJbWVtID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9tZW0pLCBHRlBfS0VSTkVMKTsKKwkJbWVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBucF9tZW0pLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFtZW0pCiAJCQlyZXR1cm47CiAJCW1lbS0+bWluID0gbWVtLT5tYXggPSBwLT5taW5pbXVtOwpAQCAtNTI0LDcgKzUyNCw3IEBACiAJCSAgICBBQ1BJX1JFQURfV1JJVEVfTUVNT1JZKSA/IElPUkVTT1VSQ0VfTUVNX1dSSVRFQUJMRSA6IDA7CiAJCXBucF9yZWdpc3Rlcl9tZW1fcmVzb3VyY2Uob3B0aW9uLCBtZW0pOwogCX0gZWxzZSBpZiAocC0+cmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKSB7Ci0JCXBvcnQgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX3BvcnQpLCBHRlBfS0VSTkVMKTsKKwkJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfcG9ydCksIEdGUF9LRVJORUwpOwogCQlpZiAoIXBvcnQpCiAJCQlyZXR1cm47CiAJCXBvcnQtPm1pbiA9IHBvcnQtPm1heCA9IHAtPm1pbmltdW07CkBAIC03MjEsNyArNzIxLDcgQEAKIAlpZiAoIXJlc19jbnQpCiAJCXJldHVybiAtRUlOVkFMOwogCWJ1ZmZlci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3Jlc291cmNlKSAqIChyZXNfY250ICsgMSkgKyAxOwotCWJ1ZmZlci0+cG9pbnRlciA9IGtjYWxsb2MoMSwgYnVmZmVyLT5sZW5ndGggLSAxLCBHRlBfS0VSTkVMKTsKKwlidWZmZXItPnBvaW50ZXIgPSBremFsbG9jKGJ1ZmZlci0+bGVuZ3RoIC0gMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZmZXItPnBvaW50ZXIpCiAJCXJldHVybiAtRU5PTUVNOwogCXBucF9kYmcoIlJlcyBjbnQgJWQiLCByZXNfY250KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMKaW5kZXggMzNhZGViYS4uOTU3MzhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMKQEAgLTEwOSwxMCArMTA5LDEwIEBACiAJaWYgKCFjdXJyZW50LT5mcy0+cm9vdCkgewogCQlyZXR1cm4gLUVBR0FJTjsKIAl9Ci0JaWYgKCEoZW52cCA9IChjaGFyICoqKSBrY2FsbG9jICgyMCwgc2l6ZW9mIChjaGFyICopLCBHRlBfS0VSTkVMKSkpIHsKKwlpZiAoIShlbnZwID0ga2NhbGxvYygyMCwgc2l6ZW9mIChjaGFyICopLCBHRlBfS0VSTkVMKSkpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWlmICghKGJ1ZiA9IGtjYWxsb2MgKDEsIDI1NiwgR0ZQX0tFUk5FTCkpKSB7CisJaWYgKCEoYnVmID0ga3phbGxvYygyNTYsIEdGUF9LRVJORUwpKSkgewogCQlrZnJlZSAoZW52cCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTIyMCw3ICsyMjAsNyBAQAogCWlmKCFwbnBiaW9zX2lzX2R5bmFtaWMoZGV2KSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCW5vZGUgPSBrY2FsbG9jKDEsIG5vZGVfaW5mby5tYXhfbm9kZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlub2RlID0ga3phbGxvYyhub2RlX2luZm8ubWF4X25vZGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gLTE7CiAJaWYgKHBucF9iaW9zX2dldF9kZXZfbm9kZSgmbm9kZW51bSwgKGNoYXIgKVBOUE1PREVfRFlOQU1JQywgbm9kZSkpIHsKQEAgLTI0Myw3ICsyNDMsNyBAQAogCWlmICghcG5wYmlvc19pc19keW5hbWljKGRldikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlub2RlID0ga2NhbGxvYygxLCBub2RlX2luZm8ubWF4X25vZGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJbm9kZSA9IGt6YWxsb2Mobm9kZV9pbmZvLm1heF9ub2RlX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIC0xOwogCWlmIChwbnBfYmlvc19nZXRfZGV2X25vZGUoJm5vZGVudW0sIChjaGFyIClQTlBNT0RFX0RZTkFNSUMsIG5vZGUpKSB7CkBAIC0yOTQsNyArMjk0LDcgQEAKIAlpZihkZXYtPmZsYWdzICYgUE5QQklPU19OT19ESVNBQkxFIHx8ICFwbnBiaW9zX2lzX2R5bmFtaWMoZGV2KSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCW5vZGUgPSBrY2FsbG9jKDEsIG5vZGVfaW5mby5tYXhfbm9kZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlub2RlID0ga3phbGxvYyhub2RlX2luZm8ubWF4X25vZGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMzM2LDcgKzMzNiw3IEBACiAJfQogCiAJLyogc2V0IHRoZSBpbml0aWFsIHZhbHVlcyBmb3IgdGhlIFBuUCBkZXZpY2UgKi8KLQlkZXZfaWQgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX2lkKSwgR0ZQX0tFUk5FTCk7CisJZGV2X2lkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBucF9pZCksIEdGUF9LRVJORUwpOwogCWlmICghZGV2X2lkKQogCQlyZXR1cm4gLTE7CiAJcG5waWQzMl90b19wbnBpZChub2RlLT5laXNhX2lkLGlkKTsKQEAgLTM3NCw3ICszNzQsNyBAQAogCXN0cnVjdCBwbnBfYmlvc19ub2RlICpub2RlOwogCXN0cnVjdCBwbnBfZGV2ICpkZXY7CiAKLQlub2RlID0ga2NhbGxvYygxLCBub2RlX2luZm8ubWF4X25vZGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJbm9kZSA9IGt6YWxsb2Mobm9kZV9pbmZvLm1heF9ub2RlX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuOwogCkBAIC0zOTEsNyArMzkxLDcgQEAKIAkJCQlicmVhazsKIAkJfQogCQlub2Rlc19nb3QrKzsKLQkJZGV2ID0gIGtjYWxsb2MoMSwgc2l6ZW9mIChzdHJ1Y3QgcG5wX2RldiksIEdGUF9LRVJORUwpOworCQlkZXYgPSAga3phbGxvYyhzaXplb2YgKHN0cnVjdCBwbnBfZGV2KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CiAJCWlmKGluc2VydF9kZXZpY2UoZGV2LG5vZGUpPDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBiaW9zL3Byb2MuYyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvcHJvYy5jCmluZGV4IDVhM2RmYzkuLjgwMjcwNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGJpb3MvcHJvYy5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvcHJvYy5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJCXJldHVybiAtRUZCSUc7CiAJfQogCi0JdG1wYnVmID0ga2NhbGxvYygxLCBlc2NkLmVzY2Rfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJdG1wYnVmID0ga3phbGxvYyhlc2NkLmVzY2Rfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0bXBidWYpIHJldHVybiAtRU5PTUVNOwogCiAJaWYgKHBucF9iaW9zX3JlYWRfZXNjZCh0bXBidWYsIGVzY2QubnZfc3RvcmFnZV9iYXNlKSkgewpAQCAtMTMzLDcgKzEzMyw3IEBACiAJaWYgKHBvcyA+PSAweGZmKQogCQlyZXR1cm4gMDsKIAotCW5vZGUgPSBrY2FsbG9jKDEsIG5vZGVfaW5mby5tYXhfbm9kZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlub2RlID0ga3phbGxvYyhub2RlX2luZm8ubWF4X25vZGVfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFub2RlKSByZXR1cm4gLUVOT01FTTsKIAogCWZvciAobm9kZW51bT1wb3M7IG5vZGVudW08MHhmZjsgKSB7CkBAIC0xNjgsNyArMTY4LDcgQEAKIAl1OCBub2RlbnVtID0gKGxvbmcpZGF0YTsKIAlpbnQgbGVuOwogCi0Jbm9kZSA9IGtjYWxsb2MoMSwgbm9kZV9pbmZvLm1heF9ub2RlX3NpemUsIEdGUF9LRVJORUwpOworCW5vZGUgPSBremFsbG9jKG5vZGVfaW5mby5tYXhfbm9kZV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5vZGUpIHJldHVybiAtRU5PTUVNOwogCWlmIChwbnBfYmlvc19nZXRfZGV2X25vZGUoJm5vZGVudW0sIGJvb3QsIG5vZGUpKSB7CiAJCWtmcmVlKG5vZGUpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJdTggbm9kZW51bSA9IChsb25nKWRhdGE7CiAJaW50IHJldCA9IGNvdW50OwogCi0Jbm9kZSA9IGtjYWxsb2MoMSwgbm9kZV9pbmZvLm1heF9ub2RlX3NpemUsIEdGUF9LRVJORUwpOworCW5vZGUgPSBremFsbG9jKG5vZGVfaW5mby5tYXhfbm9kZV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChwbnBfYmlvc19nZXRfZGV2X25vZGUoJm5vZGVudW0sIGJvb3QsIG5vZGUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmMgYi9kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmMKaW5kZXggZWY1MDhhNC4uOTViNzk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiBwbnBiaW9zX3BhcnNlX21lbV9vcHRpb24odW5zaWduZWQgY2hhciAqcCwgaW50IHNpemUsIHN0cnVjdCBwbnBfb3B0aW9uICpvcHRpb24pCiB7CiAJc3RydWN0IHBucF9tZW0gKiBtZW07Ci0JbWVtID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9tZW0pLCBHRlBfS0VSTkVMKTsKKwltZW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5wX21lbSksIEdGUF9LRVJORUwpOwogCWlmICghbWVtKQogCQlyZXR1cm47CiAJbWVtLT5taW4gPSAoKHBbNV0gPDwgOCkgfCBwWzRdKSA8PCA4OwpAQCAtMjY0LDcgKzI2NCw3IEBACiBwbnBiaW9zX3BhcnNlX21lbTMyX29wdGlvbih1bnNpZ25lZCBjaGFyICpwLCBpbnQgc2l6ZSwgc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbikKIHsKIAlzdHJ1Y3QgcG5wX21lbSAqIG1lbTsKLQltZW0gPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX21lbSksIEdGUF9LRVJORUwpOworCW1lbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfbWVtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZW0pCiAJCXJldHVybjsKIAltZW0tPm1pbiA9IChwWzddIDw8IDI0KSB8IChwWzZdIDw8IDE2KSB8IChwWzVdIDw8IDgpIHwgcFs0XTsKQEAgLTI4MCw3ICsyODAsNyBAQAogcG5wYmlvc19wYXJzZV9maXhlZF9tZW0zMl9vcHRpb24odW5zaWduZWQgY2hhciAqcCwgaW50IHNpemUsIHN0cnVjdCBwbnBfb3B0aW9uICpvcHRpb24pCiB7CiAJc3RydWN0IHBucF9tZW0gKiBtZW07Ci0JbWVtID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9tZW0pLCBHRlBfS0VSTkVMKTsKKwltZW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5wX21lbSksIEdGUF9LRVJORUwpOwogCWlmICghbWVtKQogCQlyZXR1cm47CiAJbWVtLT5taW4gPSBtZW0tPm1heCA9IChwWzddIDw8IDI0KSB8IChwWzZdIDw8IDE2KSB8IChwWzVdIDw8IDgpIHwgcFs0XTsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCXN0cnVjdCBwbnBfaXJxICogaXJxOwogCXVuc2lnbmVkIGxvbmcgYml0czsKIAotCWlycSA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwbnBfaXJxKSwgR0ZQX0tFUk5FTCk7CisJaXJxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBucF9pcnEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlycSkKIAkJcmV0dXJuOwogCWJpdHMgPSAocFsyXSA8PCA4KSB8IHBbMV07CkBAIC0zMTQsNyArMzE0LDcgQEAKIHBucGJpb3NfcGFyc2VfZG1hX29wdGlvbih1bnNpZ25lZCBjaGFyICpwLCBpbnQgc2l6ZSwgc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbikKIHsKIAlzdHJ1Y3QgcG5wX2RtYSAqIGRtYTsKLQlkbWEgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX2RtYSksIEdGUF9LRVJORUwpOworCWRtYSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfZG1hKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbWEpCiAJCXJldHVybjsKIAlkbWEtPm1hcCA9IHBbMV07CkBAIC0zMjcsNyArMzI3LDcgQEAKIHBucGJpb3NfcGFyc2VfcG9ydF9vcHRpb24odW5zaWduZWQgY2hhciAqcCwgaW50IHNpemUsIHN0cnVjdCBwbnBfb3B0aW9uICpvcHRpb24pCiB7CiAJc3RydWN0IHBucF9wb3J0ICogcG9ydDsKLQlwb3J0ID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBucF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbnBfcG9ydCksIEdGUF9LRVJORUwpOwogCWlmICghcG9ydCkKIAkJcmV0dXJuOwogCXBvcnQtPm1pbiA9IChwWzNdIDw8IDgpIHwgcFsyXTsKQEAgLTM0Myw3ICszNDMsNyBAQAogcG5wYmlvc19wYXJzZV9maXhlZF9wb3J0X29wdGlvbih1bnNpZ25lZCBjaGFyICpwLCBpbnQgc2l6ZSwgc3RydWN0IHBucF9vcHRpb24gKm9wdGlvbikKIHsKIAlzdHJ1Y3QgcG5wX3BvcnQgKiBwb3J0OwotCXBvcnQgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcG5wX3BvcnQpLCBHRlBfS0VSTkVMKTsKKwlwb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBucF9wb3J0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb3J0KQogCQlyZXR1cm47CiAJcG9ydC0+bWluID0gcG9ydC0+bWF4ID0gKHBbMl0gPDwgOCkgfCBwWzFdOwpAQCAtNTI3LDcgKzUyNyw3IEBACiAJCWNhc2UgU01BTExfVEFHX0NPTVBBVERFVklEOiAvKiBjb21wYXRpYmxlIElEICovCiAJCQlpZiAobGVuICE9IDQpCiAJCQkJZ290byBsZW5fZXJyOwotCQkJZGV2X2lkID0gIGtjYWxsb2MoMSwgc2l6ZW9mIChzdHJ1Y3QgcG5wX2lkKSwgR0ZQX0tFUk5FTCk7CisJCQlkZXZfaWQgPSAga3phbGxvYyhzaXplb2YgKHN0cnVjdCBwbnBfaWQpLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghZGV2X2lkKQogCQkJCXJldHVybiBOVUxMOwogCQkJbWVtc2V0KGRldl9pZCwgMCwgc2l6ZW9mKHN0cnVjdCBwbnBfaWQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL01ha2VmaWxlIGIvZHJpdmVycy9wczMvTWFrZWZpbGUKaW5kZXggYjUyZDU0Ny4uODQzM2ViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wczMvTWFrZWZpbGUKQEAgLTEgKzEsMiBAQAogb2JqLXkgKz0gc3lzdGVtLWJ1cy5vCitvYmotJChDT05GSUdfUFMzX1ZVQVJUKSArPSB2dWFydC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy92dWFydC5jIGIvZHJpdmVycy9wczMvdnVhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTc0ZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wczMvdnVhcnQuYwpAQCAtMCwwICsxLDk2NSBAQAorLyoKKyAqICBQUzMgdmlydHVhbCB1YXJ0CisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBTb255IENvbXB1dGVyIEVudGVydGFpbm1lbnQgSW5jLgorICogIENvcHlyaWdodCAyMDA2IFNvbnkgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL3BzMy5oPgorCisjaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlICJ2dWFydC5oIgorCitNT0RVTEVfQVVUSE9SKCJTb255IENvcnBvcmF0aW9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oInBzMyB2dWFydCIpOworCisvKioKKyAqIHZ1YXJ0IC0gQW4gaW50ZXItcGFydGl0aW9uIGRhdGEgbGluayBzZXJ2aWNlLgorICogIHBvcnQgMDogUFMzIEFWIFNldHRpbmdzLgorICogIHBvcnQgMjogUFMzIFN5c3RlbSBNYW5hZ2VyLgorICoKKyAqIFRoZSB2dWFydCBwcm92aWRlcyBhIGJpLWRpcmVjdGlvbmFsIGJ5dGUgc3RyZWFtIGRhdGEgbGluayBiZXR3ZWVuIGxvZ2ljYWwKKyAqIHBhcnRpdGlvbnMuICBJdHMgcHJpbWFyeSByb2xlIGlzIGFzIGEgY29tbXVuaWNhdGlvbnMgbGluayBiZXR3ZWVuIHRoZSBndWVzdAorICogT1MgYW5kIHRoZSBzeXN0ZW0gcG9saWN5IG1vZHVsZS4gIFRoZSBjdXJyZW50IEhWIGRvZXMgbm90IHN1cHBvcnQgYW55CisgKiBjb25uZWN0aW9ucyBvdGhlciB0aGFuIHRob3NlIGxpc3RlZC4KKyAqLworCitlbnVtIHtQT1JUX0NPVU5UID0gMyx9OworCitlbnVtIHZ1YXJ0X3BhcmFtIHsKKwlQQVJBTV9UWF9UUklHR0VSID0gMCwKKwlQQVJBTV9SWF9UUklHR0VSID0gMSwKKwlQQVJBTV9JTlRFUlJVUFRfTUFTSyA9IDIsCisJUEFSQU1fUlhfQlVGX1NJWkUgPSAzLCAvKiByZWFkIG9ubHkgKi8KKwlQQVJBTV9SWF9CWVRFUyA9IDQsIC8qIHJlYWQgb25seSAqLworCVBBUkFNX1RYX0JVRl9TSVpFID0gNSwgLyogcmVhZCBvbmx5ICovCisJUEFSQU1fVFhfQllURVMgPSA2LCAvKiByZWFkIG9ubHkgKi8KKwlQQVJBTV9JTlRFUlJVUFRfU1RBVFVTID0gNywgLyogcmVhZCBvbmx5ICovCit9OworCitlbnVtIHZ1YXJ0X2ludGVycnVwdF9iaXQgeworCUlOVEVSUlVQVF9CSVRfVFggPSAwLAorCUlOVEVSUlVQVF9CSVRfUlggPSAxLAorCUlOVEVSUlVQVF9CSVRfRElTQ09OTkVDVCA9IDIsCit9OworCitlbnVtIHZ1YXJ0X2ludGVycnVwdF9tYXNrIHsKKwlJTlRFUlJVUFRfTUFTS19UWCA9IDEsCisJSU5URVJSVVBUX01BU0tfUlggPSAyLAorCUlOVEVSUlVQVF9NQVNLX0RJU0NPTk5FQ1QgPSA0LAorfTsKKworLyoqCisgKiBzdHJ1Y3QgcG9ydHNfYm1wIC0gYml0bWFwIGluZGljYXRpbmcgcG9ydHMgbmVlZGluZyBzZXJ2aWNlLgorICoKKyAqIEEgMjU2IGJpdCByZWFkIG9ubHkgYml0bWFwIGluZGljYXRpbmcgcG9ydHMgbmVlZGluZyBzZXJ2aWNlLiAgRG8gbm90IHdyaXRlCisgKiB0byB0aGVzZSBiaXRzLiAgTXVzdCBub3QgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5LgorICovCisKK3N0cnVjdCBwb3J0c19ibXAgeworCXU2NCBzdGF0dXM7CisJdTY0IHVudXNlZFszXTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDMyKSkpOworCisvKiByZWRlZmluZSBkZXZfZGJnIHRvIGRvIGEgc3ludGF4IGNoZWNrICovCisKKyNpZiAhZGVmaW5lZChERUJVRykKKyN1bmRlZiBkZXZfZGJnCitzdGF0aWMgaW5saW5lIGludCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkgZGV2X2RiZygKKwljb25zdCBzdHJ1Y3QgZGV2aWNlICpfZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLikge3JldHVybiAwO30KKyNlbmRpZgorCisjZGVmaW5lIGR1bXBfcG9ydHNfYm1wKF9iKSBfZHVtcF9wb3J0c19ibXAoX2IsIF9fZnVuY19fLCBfX0xJTkVfXykKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSBfZHVtcF9wb3J0c19ibXAoCisJY29uc3Qgc3RydWN0IHBvcnRzX2JtcCogYm1wLCBjb25zdCBjaGFyKiBmdW5jLCBpbnQgbGluZSkKK3sKKwlwcl9kZWJ1ZygiJXM6JWQ6IHBvcnRzX2JtcDogJTAxNmx4aFxuIiwgZnVuYywgbGluZSwgYm1wLT5zdGF0dXMpOworfQorCitzdGF0aWMgaW50IHBzM192dWFydF9tYXRjaF9pZF90b19wb3J0KGVudW0gcHMzX21hdGNoX2lkIG1hdGNoX2lkLAorCXVuc2lnbmVkIGludCAqcG9ydF9udW1iZXIpCit7CisJc3dpdGNoKG1hdGNoX2lkKSB7CisJY2FzZSBQUzNfTUFUQ0hfSURfQVZfU0VUVElOR1M6CisJCSpwb3J0X251bWJlciA9IDA7CisJCXJldHVybiAwOworCWNhc2UgUFMzX01BVENIX0lEX1NZU1RFTV9NQU5BR0VSOgorCQkqcG9ydF9udW1iZXIgPSAyOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQkqcG9ydF9udW1iZXIgPSBVSU5UX01BWDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfTsKK30KKworI2RlZmluZSBkdW1wX3BvcnRfcGFyYW1zKF9iKSBfZHVtcF9wb3J0X3BhcmFtcyhfYiwgX19mdW5jX18sIF9fTElORV9fKQorc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpIF9kdW1wX3BvcnRfcGFyYW1zKHVuc2lnbmVkIGludCBwb3J0X251bWJlciwKKwljb25zdCBjaGFyKiBmdW5jLCBpbnQgbGluZSkKK3sKKyNpZiBkZWZpbmVkKERFQlVHKQorCXN0YXRpYyBjb25zdCBjaGFyICpzdHJpbmdzW10gPSB7CisJCSJ0eF90cmlnZ2VyICAgICAgIiwKKwkJInJ4X3RyaWdnZXIgICAgICAiLAorCQkiaW50ZXJydXB0X21hc2sgICIsCisJCSJyeF9idWZfc2l6ZSAgICAgIiwKKwkJInJ4X2J5dGVzICAgICAgICAiLAorCQkidHhfYnVmX3NpemUgICAgICIsCisJCSJ0eF9ieXRlcyAgICAgICAgIiwKKwkJImludGVycnVwdF9zdGF0dXMiLAorCX07CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1NjQgdmFsdWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdHJpbmdzKTsgaSsrKSB7CisJCXJlc3VsdCA9IGx2MV9nZXRfdmlydHVhbF91YXJ0X3BhcmFtKHBvcnRfbnVtYmVyLCBpLCAmdmFsdWUpOworCisJCWlmIChyZXN1bHQpIHsKKwkJCXByX2RlYnVnKCIlczolZDogcG9ydF8ldTogJXMgZmFpbGVkOiAlc1xuIiwgZnVuYywgbGluZSwKKwkJCQlwb3J0X251bWJlciwgc3RyaW5nc1tpXSwgcHMzX3Jlc3VsdChyZXN1bHQpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXByX2RlYnVnKCIlczolZDogcG9ydF8ldTogJXMgPSAlbHhoXG4iLAorCQkJZnVuYywgbGluZSwgcG9ydF9udW1iZXIsIHN0cmluZ3NbaV0sIHZhbHVlKTsKKwl9CisjZW5kaWYKK30KKworc3RydWN0IHZ1YXJ0X3RyaWdnZXJzIHsKKwl1bnNpZ25lZCBsb25nIHJ4OworCXVuc2lnbmVkIGxvbmcgdHg7Cit9OworCitpbnQgcHMzX3Z1YXJ0X2dldF90cmlnZ2VycyhzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsCisJc3RydWN0IHZ1YXJ0X3RyaWdnZXJzICp0cmlnKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJcmVzdWx0ID0gbHYxX2dldF92aXJ0dWFsX3VhcnRfcGFyYW0oZGV2LT5wb3J0X251bWJlciwKKwkJUEFSQU1fVFhfVFJJR0dFUiwgJnRyaWctPnR4KTsKKworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHR4X3RyaWdnZXIgZmFpbGVkOiAlc1xuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcHMzX3Jlc3VsdChyZXN1bHQpKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlyZXN1bHQgPSBsdjFfZ2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnBvcnRfbnVtYmVyLAorCQlQQVJBTV9SWF9CVUZfU0laRSwgJnNpemUpOworCisJaWYgKHJlc3VsdCkgeworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogdHhfYnVmX3NpemUgZmFpbGVkOiAlc1xuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcHMzX3Jlc3VsdChyZXN1bHQpKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlyZXN1bHQgPSBsdjFfZ2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnBvcnRfbnVtYmVyLAorCQlQQVJBTV9SWF9UUklHR0VSLCAmdmFsKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHJ4X3RyaWdnZXIgZmFpbGVkOiAlc1xuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcHMzX3Jlc3VsdChyZXN1bHQpKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwl0cmlnLT5yeCA9IHNpemUgLSB2YWw7CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogdHggJWx4aCwgcnggJWx4aFxuIiwgX19mdW5jX18sIF9fTElORV9fLAorCQl0cmlnLT50eCwgdHJpZy0+cngpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHBzM192dWFydF9zZXRfdHJpZ2dlcnMoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdHgsCisJdW5zaWduZWQgaW50IHJ4KQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJcmVzdWx0ID0gbHYxX3NldF92aXJ0dWFsX3VhcnRfcGFyYW0oZGV2LT5wb3J0X251bWJlciwKKwkJUEFSQU1fVFhfVFJJR0dFUiwgdHgpOworCisJaWYgKHJlc3VsdCkgeworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogdHhfdHJpZ2dlciBmYWlsZWQ6ICVzXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBwczNfcmVzdWx0KHJlc3VsdCkpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJlc3VsdCA9IGx2MV9nZXRfdmlydHVhbF91YXJ0X3BhcmFtKGRldi0+cG9ydF9udW1iZXIsCisJCVBBUkFNX1JYX0JVRl9TSVpFLCAmc2l6ZSk7CisKKwlpZiAocmVzdWx0KSB7CisJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiB0eF9idWZfc2l6ZSBmYWlsZWQ6ICVzXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBwczNfcmVzdWx0KHJlc3VsdCkpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJlc3VsdCA9IGx2MV9zZXRfdmlydHVhbF91YXJ0X3BhcmFtKGRldi0+cG9ydF9udW1iZXIsCisJCVBBUkFNX1JYX1RSSUdHRVIsIHNpemUgLSByeCk7CisKKwlpZiAocmVzdWx0KSB7CisJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiByeF90cmlnZ2VyIGZhaWxlZDogJXNcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIHBzM19yZXN1bHQocmVzdWx0KSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHR4ICV4aCwgcnggJXhoXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCisJCXR4LCByeCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHBzM192dWFydF9nZXRfcnhfYnl0ZXNfd2FpdGluZyhzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsCisJdW5zaWduZWQgbG9uZyAqYnl0ZXNfd2FpdGluZykKK3sKKwlpbnQgcmVzdWx0ID0gbHYxX2dldF92aXJ0dWFsX3VhcnRfcGFyYW0oZGV2LT5wb3J0X251bWJlciwKKwkJUEFSQU1fUlhfQllURVMsIGJ5dGVzX3dhaXRpbmcpOworCisJaWYgKHJlc3VsdCkKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHJ4X2J5dGVzIGZhaWxlZDogJXNcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIHBzM19yZXN1bHQocmVzdWx0KSk7CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogJWx4aFxuIiwgX19mdW5jX18sIF9fTElORV9fLAorCQkqYnl0ZXNfd2FpdGluZyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBwczNfdnVhcnRfc2V0X2ludGVycnVwdF9tYXNrKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiwKKwl1bnNpZ25lZCBsb25nIG1hc2spCit7CisJaW50IHJlc3VsdDsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiAlbHhoXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIG1hc2spOworCisJZGV2LT5pbnRlcnJ1cHRfbWFzayA9IG1hc2s7CisKKwlyZXN1bHQgPSBsdjFfc2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnBvcnRfbnVtYmVyLAorCQlQQVJBTV9JTlRFUlJVUFRfTUFTSywgZGV2LT5pbnRlcnJ1cHRfbWFzayk7CisKKwlpZiAocmVzdWx0KQorCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogaW50ZXJydXB0X21hc2sgZmFpbGVkOiAlc1xuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcHMzX3Jlc3VsdChyZXN1bHQpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgcHMzX3Z1YXJ0X2dldF9pbnRlcnJ1cHRfbWFzayhzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsCisJdW5zaWduZWQgbG9uZyAqc3RhdHVzKQoreworCWludCByZXN1bHQgPSBsdjFfZ2V0X3ZpcnR1YWxfdWFydF9wYXJhbShkZXYtPnBvcnRfbnVtYmVyLAorCQlQQVJBTV9JTlRFUlJVUFRfU1RBVFVTLCBzdGF0dXMpOworCisJaWYgKHJlc3VsdCkKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGludGVycnVwdF9zdGF0dXMgZmFpbGVkOiAlc1xuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcHMzX3Jlc3VsdChyZXN1bHQpKTsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiBtICVseGgsIHMgJWx4aCwgbSZzICVseGhcbiIsCisJCV9fZnVuY19fLCBfX0xJTkVfXywgZGV2LT5pbnRlcnJ1cHRfbWFzaywgKnN0YXR1cywKKwkJZGV2LT5pbnRlcnJ1cHRfbWFzayAmICpzdGF0dXMpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHBzM192dWFydF9lbmFibGVfaW50ZXJydXB0X3R4KHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKGRldi0+aW50ZXJydXB0X21hc2sgJiBJTlRFUlJVUFRfTUFTS19UWCkgPyAwCisJCTogcHMzX3Z1YXJ0X3NldF9pbnRlcnJ1cHRfbWFzayhkZXYsIGRldi0+aW50ZXJydXB0X21hc2sKKwkJfCBJTlRFUlJVUFRfTUFTS19UWCk7Cit9CisKK2ludCBwczNfdnVhcnRfZW5hYmxlX2ludGVycnVwdF9yeChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChkZXYtPmludGVycnVwdF9tYXNrICYgSU5URVJSVVBUX01BU0tfUlgpID8gMAorCQk6IHBzM192dWFydF9zZXRfaW50ZXJydXB0X21hc2soZGV2LCBkZXYtPmludGVycnVwdF9tYXNrCisJCXwgSU5URVJSVVBUX01BU0tfUlgpOworfQorCitpbnQgcHMzX3Z1YXJ0X2VuYWJsZV9pbnRlcnJ1cHRfZGlzY29ubmVjdChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChkZXYtPmludGVycnVwdF9tYXNrICYgSU5URVJSVVBUX01BU0tfRElTQ09OTkVDVCkgPyAwCisJCTogcHMzX3Z1YXJ0X3NldF9pbnRlcnJ1cHRfbWFzayhkZXYsIGRldi0+aW50ZXJydXB0X21hc2sKKwkJfCBJTlRFUlJVUFRfTUFTS19ESVNDT05ORUNUKTsKK30KKworaW50IHBzM192dWFydF9kaXNhYmxlX2ludGVycnVwdF90eChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChkZXYtPmludGVycnVwdF9tYXNrICYgSU5URVJSVVBUX01BU0tfVFgpCisJCT8gcHMzX3Z1YXJ0X3NldF9pbnRlcnJ1cHRfbWFzayhkZXYsIGRldi0+aW50ZXJydXB0X21hc2sKKwkJJiB+SU5URVJSVVBUX01BU0tfVFgpIDogMDsKK30KKworaW50IHBzM192dWFydF9kaXNhYmxlX2ludGVycnVwdF9yeChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChkZXYtPmludGVycnVwdF9tYXNrICYgSU5URVJSVVBUX01BU0tfUlgpCisJCT8gcHMzX3Z1YXJ0X3NldF9pbnRlcnJ1cHRfbWFzayhkZXYsIGRldi0+aW50ZXJydXB0X21hc2sKKwkJJiB+SU5URVJSVVBUX01BU0tfUlgpIDogMDsKK30KKworaW50IHBzM192dWFydF9kaXNhYmxlX2ludGVycnVwdF9kaXNjb25uZWN0KHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKGRldi0+aW50ZXJydXB0X21hc2sgJiBJTlRFUlJVUFRfTUFTS19ESVNDT05ORUNUKQorCQk/IHBzM192dWFydF9zZXRfaW50ZXJydXB0X21hc2soZGV2LCBkZXYtPmludGVycnVwdF9tYXNrCisJCSYgfklOVEVSUlVQVF9NQVNLX0RJU0NPTk5FQ1QpIDogMDsKK30KKworLyoqCisgKiBwczNfdnVhcnRfcmF3X3dyaXRlIC0gTG93IGxldmVsIHdyaXRlIGhlbHBlci4KKyAqCisgKiBEbyBub3QgY2FsbCBwczNfdnVhcnRfcmF3X3dyaXRlIGRpcmVjdGx5LCB1c2UgcHMzX3Z1YXJ0X3dyaXRlLgorICovCisKK3N0YXRpYyBpbnQgcHMzX3Z1YXJ0X3Jhd193cml0ZShzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsCisJY29uc3Qgdm9pZCogYnVmLCB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKmJ5dGVzX3dyaXR0ZW4pCit7CisJaW50IHJlc3VsdDsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiAleGhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgYnl0ZXMpOworCisJcmVzdWx0ID0gbHYxX3dyaXRlX3ZpcnR1YWxfdWFydChkZXYtPnBvcnRfbnVtYmVyLAorCQlwczNfbW1fcGh5c190b19scGFyKF9fcGEoYnVmKSksIGJ5dGVzLCBieXRlc193cml0dGVuKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGx2MV93cml0ZV92aXJ0dWFsX3VhcnQgZmFpbGVkOiAiCisJCQkiJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgcHMzX3Jlc3VsdChyZXN1bHQpKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlkZXYtPnN0YXRzLmJ5dGVzX3dyaXR0ZW4gKz0gKmJ5dGVzX3dyaXR0ZW47CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogd3JvdGUgJWx4aC8leGg9PiVseGhcbiIsIF9fZnVuY19fLAorCQlfX0xJTkVfXywgKmJ5dGVzX3dyaXR0ZW4sIGJ5dGVzLCBkZXYtPnN0YXRzLmJ5dGVzX3dyaXR0ZW4pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBwczNfdnVhcnRfcmF3X3JlYWQgLSBMb3cgbGV2ZWwgcmVhZCBoZWxwZXIuCisgKgorICogRG8gbm90IGNhbGwgcHMzX3Z1YXJ0X3Jhd19yZWFkIGRpcmVjdGx5LCB1c2UgcHMzX3Z1YXJ0X3JlYWQuCisgKi8KKworc3RhdGljIGludCBwczNfdnVhcnRfcmF3X3JlYWQoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2LCB2b2lkKiBidWYsCisJdW5zaWduZWQgaW50IGJ5dGVzLCB1bnNpZ25lZCBsb25nICpieXRlc19yZWFkKQoreworCWludCByZXN1bHQ7CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogJXhoXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGJ5dGVzKTsKKworCXJlc3VsdCA9IGx2MV9yZWFkX3ZpcnR1YWxfdWFydChkZXYtPnBvcnRfbnVtYmVyLAorCQlwczNfbW1fcGh5c190b19scGFyKF9fcGEoYnVmKSksIGJ5dGVzLCBieXRlc19yZWFkKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGx2MV9yZWFkX3ZpcnR1YWxfdWFydCBmYWlsZWQ6ICVzXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBwczNfcmVzdWx0KHJlc3VsdCkpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWRldi0+c3RhdHMuYnl0ZXNfcmVhZCArPSAqYnl0ZXNfcmVhZDsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiByZWFkICVseGgvJXhoPT4lbHhoXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCisJCSpieXRlc19yZWFkLCBieXRlcywgZGV2LT5zdGF0cy5ieXRlc19yZWFkKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogc3RydWN0IGxpc3RfYnVmZmVyIC0gQW4gZWxlbWVudCBmb3IgYSBwb3J0IGRldmljZSBmaWZvIGJ1ZmZlciBsaXN0LgorICovCisKK3N0cnVjdCBsaXN0X2J1ZmZlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqdGFpbDsKKwl1bnNpZ25lZCBsb25nIGRiZ19udW1iZXI7CisJdW5zaWduZWQgY2hhciBkYXRhW107Cit9OworCisvKioKKyAqIHBzM192dWFydF93cml0ZSAtIHRoZSBlbnRyeSBwb2ludCBmb3Igd3JpdGluZyBkYXRhIHRvIGEgcG9ydAorICoKKyAqIElmIHRoZSBwb3J0IGlzIGlkbGUgb24gZW50cnkgYXMgbXVjaCBvZiB0aGUgaW5jb21pbmcgZGF0YSBpcyB3cml0dGVuIHRvCisgKiB0aGUgcG9ydCBhcyB0aGUgcG9ydCB3aWxsIGFjY2VwdC4gIE90aGVyd2lzZSBhIGxpc3QgYnVmZmVyIGlzIGNyZWF0ZWQKKyAqIGFuZCBhbnkgcmVtYW5pbmcgaW5jb21pbmcgZGF0YSBpcyBjb3BpZWQgdG8gdGhhdCBidWZmZXIuICBUaGUgYnVmZmVyIGlzCisgKiB0aGVuIGVucXVldWVkIGZvciB0cmFuc21pc2lvbiB2aWEgdGhlIHRyYW5zbWl0IGludGVycnVwdC4KKyAqLworCitpbnQgcHMzX3Z1YXJ0X3dyaXRlKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCogYnVmLAorCXVuc2lnbmVkIGludCBieXRlcykKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBkYmdfbnVtYmVyOworCWludCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9idWZmZXIgKmxiOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6ICV1KCV4aCkgYnl0ZXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJYnl0ZXMsIGJ5dGVzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCisJaWYgKGxpc3RfZW1wdHkoJmRldi0+dHhfbGlzdC5oZWFkKSkgeworCQl1bnNpZ25lZCBsb25nIGJ5dGVzX3dyaXR0ZW47CisKKwkJcmVzdWx0ID0gcHMzX3Z1YXJ0X3Jhd193cml0ZShkZXYsIGJ1ZiwgYnl0ZXMsICZieXRlc193cml0dGVuKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCisJCWlmIChyZXN1bHQpIHsKKwkJCWRldl9kYmcoJmRldi0+Y29yZSwKKwkJCQkiJXM6JWQ6IHBzM192dWFydF9yYXdfd3JpdGUgZmFpbGVkXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisKKwkJaWYgKGJ5dGVzX3dyaXR0ZW4gPT0gYnl0ZXMpIHsKKwkJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiB3cm90ZSAleGggYnl0ZXNcbiIsCisJCQkJX19mdW5jX18sIF9fTElORV9fLCBieXRlcyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWJ5dGVzIC09IGJ5dGVzX3dyaXR0ZW47CisJCWJ1ZiArPSBieXRlc193cml0dGVuOworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCisJbGIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlzdF9idWZmZXIpICsgYnl0ZXMsIEdGUF9LRVJORUwpOworCisJaWYgKCFsYikgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkobGItPmRhdGEsIGJ1ZiwgYnl0ZXMpOworCWxiLT5oZWFkID0gbGItPmRhdGE7CisJbGItPnRhaWwgPSBsYi0+ZGF0YSArIGJ5dGVzOworCWxiLT5kYmdfbnVtYmVyID0gKytkYmdfbnVtYmVyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dHhfbGlzdC5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmbGItPmxpbmssICZkZXYtPnR4X2xpc3QuaGVhZCk7CisJcHMzX3Z1YXJ0X2VuYWJsZV9pbnRlcnJ1cHRfdHgoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnR4X2xpc3QubG9jaywgZmxhZ3MpOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHF1ZXVlZCBidWZfJWx1LCAleGggYnl0ZXNcbiIsCisJCV9fZnVuY19fLCBfX0xJTkVfXywgbGItPmRiZ19udW1iZXIsIGJ5dGVzKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBzM192dWFydF9yZWFkIC0gdGhlIGVudHJ5IHBvaW50IGZvciByZWFkaW5nIGRhdGEgZnJvbSBhIHBvcnQKKyAqCisgKiBJZiBlbm91Z2ggYnl0ZXMgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdCBhcmUgaGVsZCBpbiB0aGUgYnVmZmVyIGxpc3QgdGhvc2UKKyAqIGJ5dGVzIGFyZSBkZXF1ZXVlZCBhbmQgY29waWVkIHRvIHRoZSBjYWxsZXIncyBidWZmZXIuICBFbXB0aWVkIGxpc3QgYnVmZmVycworICogYXJlIHJldGllcmVkLiAgSWYgdGhlIHJlcXVlc3QgY2Fubm90IGJlIHN0YXRpZmllZCBieSBieXRlcyBoZWxkIGluIHRoZSBsaXN0CisgKiBidWZmZXJzIC1FQUdBSU4gaXMgcmV0dXJuZWQuCisgKi8KKworaW50IHBzM192dWFydF9yZWFkKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiwgdm9pZCogYnVmLAorCXVuc2lnbmVkIGludCBieXRlcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2J1ZmZlciAqbGIsICpuOworCXVuc2lnbmVkIGxvbmcgYnl0ZXNfcmVhZDsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiAldSgleGgpIGJ5dGVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCisJCWJ5dGVzLCBieXRlcyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yeF9saXN0LmxvY2ssIGZsYWdzKTsKKworCWlmIChkZXYtPnJ4X2xpc3QuYnl0ZXNfaGVsZCA8IGJ5dGVzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cnhfbGlzdC5sb2NrLCBmbGFncyk7CisJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiBzdGFydmVkIGZvciAlbHhoIGJ5dGVzXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCBieXRlcyAtIGRldi0+cnhfbGlzdC5ieXRlc19oZWxkKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxiLCBuLCAmZGV2LT5yeF9saXN0LmhlYWQsIGxpbmspIHsKKwkJYnl0ZXNfcmVhZCA9IG1pbigodW5zaWduZWQgaW50KShsYi0+dGFpbCAtIGxiLT5oZWFkKSwgYnl0ZXMpOworCisJCW1lbWNweShidWYsIGxiLT5oZWFkLCBieXRlc19yZWFkKTsKKwkJYnVmICs9IGJ5dGVzX3JlYWQ7CisJCWJ5dGVzIC09IGJ5dGVzX3JlYWQ7CisJCWRldi0+cnhfbGlzdC5ieXRlc19oZWxkIC09IGJ5dGVzX3JlYWQ7CisKKwkJaWYgKGJ5dGVzX3JlYWQgPCBsYi0+dGFpbCAtIGxiLT5oZWFkKSB7CisJCQlsYi0+aGVhZCArPSBieXRlc19yZWFkOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yeF9saXN0LmxvY2ssIGZsYWdzKTsKKworCQkJZGV2X2RiZygmZGV2LT5jb3JlLAorCQkJCSIlczolZDogZGVxdWV1ZWQgYnVmXyVsdSwgJWx4aCBieXRlc1xuIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIGxiLT5kYmdfbnVtYmVyLCBieXRlc19yZWFkKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQgZnJlZSBidWZfJWx1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sCisJCQlsYi0+ZGJnX251bWJlcik7CisKKwkJbGlzdF9kZWwoJmxiLT5saW5rKTsKKwkJa2ZyZWUobGIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJ4X2xpc3QubG9jaywgZmxhZ3MpOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IGRlcXVldWVkIGJ1Zl8lbHUsICV4aCBieXRlc1xuIiwKKwkJX19mdW5jX18sIF9fTElORV9fLCBsYi0+ZGJnX251bWJlciwgYnl0ZXMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHMzX3Z1YXJ0X2hhbmRsZV9pbnRlcnJ1cHRfdHggLSB0aGlyZCBzdGFnZSB0cmFuc21pdCBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqIFNlcnZpY2VzIHRoZSB0cmFuc21pdCBpbnRlcnJ1cHQgZm9yIHRoZSBwb3J0LiAgV3JpdGVzIGFzIG11Y2ggZGF0YSBmcm9tIHRoZQorICogYnVmZmVyIGxpc3QgYXMgdGhlIHBvcnQgd2lsbCBhY2NlcHQuICBSZXRpcmVzIGFueSBlbXB0aWVkIGxpc3QgYnVmZmVycyBhbmQKKyAqIGFkanVzdHMgdGhlIGZpbmFsIGxpc3QgYnVmZmVyIHN0YXRlIGZvciBhIHBhcnRpYWwgd3JpdGUuCisgKi8KKworc3RhdGljIGludCBwczNfdnVhcnRfaGFuZGxlX2ludGVycnVwdF90eChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYpCit7CisJaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9idWZmZXIgKmxiLCAqbjsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX3RvdGFsID0gMDsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dHhfbGlzdC5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGIsIG4sICZkZXYtPnR4X2xpc3QuaGVhZCwgbGluaykgeworCisJCXVuc2lnbmVkIGxvbmcgYnl0ZXNfd3JpdHRlbjsKKworCQlyZXN1bHQgPSBwczNfdnVhcnRfcmF3X3dyaXRlKGRldiwgbGItPmhlYWQsIGxiLT50YWlsIC0gbGItPmhlYWQsCisJCQkmYnl0ZXNfd3JpdHRlbik7CisKKwkJaWYgKHJlc3VsdCkgeworCQkJZGV2X2RiZygmZGV2LT5jb3JlLAorCQkJCSIlczolZDogcHMzX3Z1YXJ0X3Jhd193cml0ZSBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYnl0ZXNfdG90YWwgKz0gYnl0ZXNfd3JpdHRlbjsKKworCQlpZiAoYnl0ZXNfd3JpdHRlbiA8IGxiLT50YWlsIC0gbGItPmhlYWQpIHsKKwkJCWxiLT5oZWFkICs9IGJ5dGVzX3dyaXR0ZW47CisJCQlkZXZfZGJnKCZkZXYtPmNvcmUsCisJCQkJIiVzOiVkIGNsZWFyZWQgYnVmXyVsdSwgJWx4aCBieXRlc1xuIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIGxiLT5kYmdfbnVtYmVyLAorCQkJCWJ5dGVzX3dyaXR0ZW4pOworCQkJZ290byBwb3J0X2Z1bGw7CisJCX0KKworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZCBmcmVlIGJ1Zl8lbHVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJCWxiLT5kYmdfbnVtYmVyKTsKKworCQlsaXN0X2RlbCgmbGItPmxpbmspOworCQlrZnJlZShsYik7CisJfQorCisJcHMzX3Z1YXJ0X2Rpc2FibGVfaW50ZXJydXB0X3R4KGRldik7Citwb3J0X2Z1bGw6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT50eF9saXN0LmxvY2ssIGZsYWdzKTsKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZCB3cm90ZSAlbHhoIGJ5dGVzIHRvdGFsXG4iLAorCQlfX2Z1bmNfXywgX19MSU5FX18sIGJ5dGVzX3RvdGFsKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIHBzM192dWFydF9oYW5kbGVfaW50ZXJydXB0X3J4IC0gdGhpcmQgc3RhZ2UgcmVjZWl2ZSBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqIFNlcnZpY2VzIHRoZSByZWNlaXZlIGludGVycnVwdCBmb3IgdGhlIHBvcnQuICBDcmVhdGVzIGEgbGlzdCBidWZmZXIgYW5kCisgKiBjb3BpZXMgYWxsIHdhaXRpbmcgcG9ydCBkYXRhIHRvIHRoYXQgYnVmZmVyIGFuZCBlbnF1ZXVlcyB0aGUgYnVmZmVyIGluIHRoZQorICogYnVmZmVyIGxpc3QuICBCdWZmZXIgbGlzdCBkYXRhIGlzIGRlcXVldWVkIHZpYSBwczNfdnVhcnRfcmVhZC4KKyAqLworCitzdGF0aWMgaW50IHBzM192dWFydF9oYW5kbGVfaW50ZXJydXB0X3J4KHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldikKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBkYmdfbnVtYmVyOworCWludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfYnVmZmVyICpsYjsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlyZXN1bHQgPSBwczNfdnVhcnRfZ2V0X3J4X2J5dGVzX3dhaXRpbmcoZGV2LCAmYnl0ZXMpOworCisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIC1FSU87CisKKwlCVUdfT04oIWJ5dGVzKTsKKworCS8qIGFkZCBzb21lIGV4dHJhIHNwYWNlIGZvciByZWNlbnRseSBhcnJpdmVkIGRhdGEgKi8KKworCWJ5dGVzICs9IDEyODsKKworCWxiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RfYnVmZmVyKSArIGJ5dGVzLCBHRlBfQVRPTUlDKTsKKworCWlmICghbGIpCisJCXJldHVybiAtRU5PTUVNOworCisJcHMzX3Z1YXJ0X3Jhd19yZWFkKGRldiwgbGItPmRhdGEsIGJ5dGVzLCAmYnl0ZXMpOworCisJbGItPmhlYWQgPSBsYi0+ZGF0YTsKKwlsYi0+dGFpbCA9IGxiLT5kYXRhICsgYnl0ZXM7CisJbGItPmRiZ19udW1iZXIgPSArK2RiZ19udW1iZXI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yeF9saXN0LmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZsYi0+bGluaywgJmRldi0+cnhfbGlzdC5oZWFkKTsKKwlkZXYtPnJ4X2xpc3QuYnl0ZXNfaGVsZCArPSBieXRlczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJ4X2xpc3QubG9jaywgZmxhZ3MpOworCisJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHF1ZXVlZCBidWZfJWx1LCAlbHhoIGJ5dGVzXG4iLAorCQlfX2Z1bmNfXywgX19MSU5FX18sIGxiLT5kYmdfbnVtYmVyLCBieXRlcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwczNfdnVhcnRfaGFuZGxlX2ludGVycnVwdF9kaXNjb25uZWN0KAorCXN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldikKK3sKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlCVUdfT04oIm5vIHN1cHBvcnQiKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogcHMzX3Z1YXJ0X2hhbmRsZV9wb3J0X2ludGVycnVwdCAtIHNlY29uZCBzdGFnZSBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqIFNlcnZpY2VzIGFueSBwZW5kaW5nIGludGVycnVwdCB0eXBlcyBmb3IgdGhlIHBvcnQuICBQYXNzZXMgY29udHJvbCB0byB0aGUKKyAqIHRoaXJkIHN0YWdlIHR5cGUgc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXIuICBSZXR1cm5zIGNvbnRyb2wgdG8gdGhlIGZpcnN0CisgKiBzdGFnZSBoYW5kbGVyIGFmdGVyIG9uZSBpdGVyYXRpb24uCisgKi8KKworc3RhdGljIGludCBwczNfdnVhcnRfaGFuZGxlX3BvcnRfaW50ZXJydXB0KHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCisJcmVzdWx0ID0gcHMzX3Z1YXJ0X2dldF9pbnRlcnJ1cHRfbWFzayhkZXYsICZzdGF0dXMpOworCisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiBzdGF0dXM6ICVseGhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJc3RhdHVzKTsKKworCWlmIChzdGF0dXMgJiBJTlRFUlJVUFRfTUFTS19ESVNDT05ORUNUKSB7CisJCWRldi0+c3RhdHMuZGlzY29ubmVjdF9pbnRlcnJ1cHRzKys7CisJCXJlc3VsdCA9IHBzM192dWFydF9oYW5kbGVfaW50ZXJydXB0X2Rpc2Nvbm5lY3QoZGV2KTsKKwkJaWYgKHJlc3VsdCkKKwkJCXBzM192dWFydF9kaXNhYmxlX2ludGVycnVwdF9kaXNjb25uZWN0KGRldik7CisJfQorCisJaWYgKHN0YXR1cyAmIElOVEVSUlVQVF9NQVNLX1RYKSB7CisJCWRldi0+c3RhdHMudHhfaW50ZXJydXB0cysrOworCQlyZXN1bHQgPSBwczNfdnVhcnRfaGFuZGxlX2ludGVycnVwdF90eChkZXYpOworCQlpZiAocmVzdWx0KQorCQkJcHMzX3Z1YXJ0X2Rpc2FibGVfaW50ZXJydXB0X3R4KGRldik7CisJfQorCisJaWYgKHN0YXR1cyAmIElOVEVSUlVQVF9NQVNLX1JYKSB7CisJCWRldi0+c3RhdHMucnhfaW50ZXJydXB0cysrOworCQlyZXN1bHQgPSBwczNfdnVhcnRfaGFuZGxlX2ludGVycnVwdF9yeChkZXYpOworCQlpZiAocmVzdWx0KQorCQkJcHMzX3Z1YXJ0X2Rpc2FibGVfaW50ZXJydXB0X3J4KGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB2dWFydF9wcml2YXRlIHsKKwl1bnNpZ25lZCBpbnQgaW5fdXNlOworCXVuc2lnbmVkIGludCB2aXJxOworCXN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldmljZXNbUE9SVF9DT1VOVF07CisJY29uc3Qgc3RydWN0IHBvcnRzX2JtcCBibXA7Cit9OworCisvKioKKyAqIHBzM192dWFydF9pcnFfaGFuZGxlciAtIGZpcnN0IHN0YWdlIGludGVycnVwdCBoYW5kbGVyCisgKgorICogTG9vcHMgZmluZGluZyBhbnkgaW50ZXJydXB0aW5nIHBvcnQgYW5kIGl0cyBhc3NvY2lhdGVkIGluc3RhbmNlIGRhdGEuCisgKiBQYXNzZXMgY29udHJvbCB0byB0aGUgc2Vjb25kIHN0YWdlIHBvcnQgc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXIuICBMb29wcworICogdW50aWwgYWxsIG91dHN0YW5kaW5nIGludGVycnVwdHMgYXJlIHNlcnZpY2VkLgorICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwczNfdnVhcnRfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqX3ByaXZhdGUpCit7CisJc3RydWN0IHZ1YXJ0X3ByaXZhdGUgKnByaXZhdGU7CisKKwlCVUdfT04oIV9wcml2YXRlKTsKKwlwcml2YXRlID0gKHN0cnVjdCB2dWFydF9wcml2YXRlICopX3ByaXZhdGU7CisKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBpbnQgcG9ydDsKKworCQlkdW1wX3BvcnRzX2JtcCgmcHJpdmF0ZS0+Ym1wKTsKKworCQlwb3J0ID0gKEJJVFNfUEVSX0xPTkcgLSAxKSAtIF9faWxvZzIocHJpdmF0ZS0+Ym1wLnN0YXR1cyk7CisKKwkJaWYgKHBvcnQgPT0gQklUU19QRVJfTE9ORykKKwkJCWJyZWFrOworCisJCUJVR19PTihwb3J0ID49IFBPUlRfQ09VTlQpOworCQlCVUdfT04oIXByaXZhdGUtPmRldmljZXNbcG9ydF0pOworCisJCXBzM192dWFydF9oYW5kbGVfcG9ydF9pbnRlcnJ1cHQocHJpdmF0ZS0+ZGV2aWNlc1twb3J0XSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHBzM192dWFydF9tYXRjaChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqX2RydikKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBwczNfdnVhcnRfcG9ydF9kcml2ZXIgKmRydiA9IHRvX3BzM192dWFydF9wb3J0X2RyaXZlcihfZHJ2KTsKKwlzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYgPSB0b19wczNfdnVhcnRfcG9ydF9kZXZpY2UoX2Rldik7CisKKwlyZXN1bHQgPSBkZXYtPm1hdGNoX2lkID09IGRydi0+bWF0Y2hfaWQ7CisKKwlkZXZfaW5mbygmZGV2LT5jb3JlLCAiJXM6JWQ6IGRldj0ldSglcyksIGRydj0ldSglcyk6ICVzXG4iLCBfX2Z1bmNfXywKKwkJX19MSU5FX18sIGRldi0+bWF0Y2hfaWQsIGRldi0+Y29yZS5idXNfaWQsIGRydi0+bWF0Y2hfaWQsCisJCWRydi0+Y29yZS5uYW1lLCAocmVzdWx0ID8gIm1hdGNoIiA6ICJtaXNzIikpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB2dWFydF9wcml2YXRlIHZ1YXJ0X3ByaXZhdGU7CisKK3N0YXRpYyBpbnQgcHMzX3Z1YXJ0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwlzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYgPSB0b19wczNfdnVhcnRfcG9ydF9kZXZpY2UoX2Rldik7CisJc3RydWN0IHBzM192dWFydF9wb3J0X2RyaXZlciAqZHJ2ID0KKwkJdG9fcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyKF9kZXYtPmRyaXZlcik7CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCUJVR19PTighZHJ2KTsKKworCXJlc3VsdCA9IHBzM192dWFydF9tYXRjaF9pZF90b19wb3J0KGRldi0+bWF0Y2hfaWQsICZkZXYtPnBvcnRfbnVtYmVyKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2RiZygmZGV2LT5jb3JlLCAiJXM6JWQ6IHVua25vd24gbWF0Y2hfaWQgKCVkKVxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgZGV2LT5tYXRjaF9pZCk7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbF9tYXRjaDsKKwl9CisKKwlpZiAodnVhcnRfcHJpdmF0ZS5kZXZpY2VzW2Rldi0+cG9ydF9udW1iZXJdKSB7CisJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiBwb3J0IGJ1c3kgKCVkKVxuIiwgX19mdW5jX18sCisJCQlfX0xJTkVfXywgZGV2LT5wb3J0X251bWJlcik7CisJCXJlc3VsdCA9IC1FQlVTWTsKKwkJZ290byBmYWlsX21hdGNoOworCX0KKworCXZ1YXJ0X3ByaXZhdGUuZGV2aWNlc1tkZXYtPnBvcnRfbnVtYmVyXSA9IGRldjsKKworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnR4X2xpc3QuaGVhZCk7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+dHhfbGlzdC5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5yeF9saXN0LmhlYWQpOworCXNwaW5fbG9ja19pbml0KCZkZXYtPnJ4X2xpc3QubG9jayk7CisKKwl2dWFydF9wcml2YXRlLmluX3VzZSsrOworCWlmICh2dWFydF9wcml2YXRlLmluX3VzZSA9PSAxKSB7CisJCXJlc3VsdCA9IHBzM19hbGxvY192dWFydF9pcnEoKHZvaWQqKSZ2dWFydF9wcml2YXRlLmJtcC5zdGF0dXMsCisJCQkmdnVhcnRfcHJpdmF0ZS52aXJxKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQlkZXZfZGJnKCZkZXYtPmNvcmUsCisJCQkJIiVzOiVkOiBwczNfYWxsb2NfdnVhcnRfaXJxIGZhaWxlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmVzdWx0KTsKKwkJCXJlc3VsdCA9IC1FUEVSTTsKKwkJCWdvdG8gZmFpbF9hbGxvY19pcnE7CisJCX0KKworCQlyZXN1bHQgPSByZXF1ZXN0X2lycSh2dWFydF9wcml2YXRlLnZpcnEsIHBzM192dWFydF9pcnFfaGFuZGxlciwKKwkJCUlSUUZfRElTQUJMRUQsICJ2dWFydCIsICZ2dWFydF9wcml2YXRlKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQlkZXZfaW5mbygmZGV2LT5jb3JlLCAiJXM6JWQ6IHJlcXVlc3RfaXJxIGZhaWxlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmVzdWx0KTsKKwkJCWdvdG8gZmFpbF9yZXF1ZXN0X2lycTsKKwkJfQorCX0KKworCXBzM192dWFydF9zZXRfaW50ZXJydXB0X21hc2soZGV2LCBJTlRFUlJVUFRfTUFTS19SWCk7CisKKwkvKiBjbGVhciBzdGFsZSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwlwczNfdnVhcnRfZ2V0X2ludGVycnVwdF9tYXNrKGRldiwgJnRtcCk7CisKKwlwczNfdnVhcnRfc2V0X3RyaWdnZXJzKGRldiwgMSwgMSk7CisKKwlpZiAoZHJ2LT5wcm9iZSkKKwkJcmVzdWx0ID0gZHJ2LT5wcm9iZShkZXYpOworCWVsc2UgeworCQlyZXN1bHQgPSAwOworCQlkZXZfaW5mbygmZGV2LT5jb3JlLCAiJXM6JWQ6IG5vIHByb2JlIG1ldGhvZFxuIiwgX19mdW5jX18sCisJCQlfX0xJTkVfXyk7CisJfQorCisJaWYgKHJlc3VsdCkgeworCQlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogZHJ2LT5wcm9iZSBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQlnb3RvIGZhaWxfcHJvYmU7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKKworZmFpbF9wcm9iZToKK2ZhaWxfcmVxdWVzdF9pcnE6CisJdnVhcnRfcHJpdmF0ZS5pbl91c2UtLTsKKwlpZiAoIXZ1YXJ0X3ByaXZhdGUuaW5fdXNlKSB7CisJCXBzM19mcmVlX3Z1YXJ0X2lycSh2dWFydF9wcml2YXRlLnZpcnEpOworCQl2dWFydF9wcml2YXRlLnZpcnEgPSBOT19JUlE7CisJfQorZmFpbF9hbGxvY19pcnE6CitmYWlsX21hdGNoOgorCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkIGZhaWxlZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHBzM192dWFydF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYgPSB0b19wczNfdnVhcnRfcG9ydF9kZXZpY2UoX2Rldik7CisJc3RydWN0IHBzM192dWFydF9wb3J0X2RyaXZlciAqZHJ2ID0KKwkJdG9fcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyKF9kZXYtPmRyaXZlcik7CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZDogJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJZGV2LT5jb3JlLmJ1c19pZCk7CisKKwlCVUdfT04odnVhcnRfcHJpdmF0ZS5pbl91c2UgPCAxKTsKKworCWlmIChkcnYtPnJlbW92ZSkKKwkJZHJ2LT5yZW1vdmUoZGV2KTsKKwllbHNlCisJCWRldl9kYmcoJmRldi0+Y29yZSwgIiVzOiVkOiAlcyBubyByZW1vdmUgbWV0aG9kXG4iLCBfX2Z1bmNfXywKKwkJCV9fTElORV9fLCBkZXYtPmNvcmUuYnVzX2lkKTsKKworCXZ1YXJ0X3ByaXZhdGUuaW5fdXNlLS07CisKKwlpZiAoIXZ1YXJ0X3ByaXZhdGUuaW5fdXNlKSB7CisJCWZyZWVfaXJxKHZ1YXJ0X3ByaXZhdGUudmlycSwgJnZ1YXJ0X3ByaXZhdGUpOworCQlwczNfZnJlZV92dWFydF9pcnEodnVhcnRfcHJpdmF0ZS52aXJxKTsKKwkJdnVhcnRfcHJpdmF0ZS52aXJxID0gTk9fSVJROworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwczNfdnVhcnQgLSBUaGUgdnVhcnQgaW5zdGFuY2UuCisgKgorICogVGhlIHZ1YXJ0IGlzIG1hbmFnZWQgYXMgYSBidXMgdGhhdCBwb3J0IGRldmljZXMgY29ubmVjdCB0by4KKyAqLworCitzdHJ1Y3QgYnVzX3R5cGUgcHMzX3Z1YXJ0ID0geworICAgICAgICAubmFtZSA9ICJwczNfdnVhcnQiLAorCS5tYXRjaCA9IHBzM192dWFydF9tYXRjaCwKKwkucHJvYmUgPSBwczNfdnVhcnRfcHJvYmUsCisJLnJlbW92ZSA9IHBzM192dWFydF9yZW1vdmUsCit9OworCitpbnQgX19pbml0IHBzM192dWFydF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXByX2RlYnVnKCIlczolZDpcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmVzdWx0ID0gYnVzX3JlZ2lzdGVyKCZwczNfdnVhcnQpOworCUJVR19PTihyZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgX19leGl0IHBzM192dWFydF9leGl0KHZvaWQpCit7CisJcHJfZGVidWcoIiVzOiVkOlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlidXNfdW5yZWdpc3RlcigmcHMzX3Z1YXJ0KTsKK30KKworY29yZV9pbml0Y2FsbChwczNfdnVhcnRfaW5pdCk7Cittb2R1bGVfZXhpdChwczNfdnVhcnRfZXhpdCk7CisKKy8qKgorICogcHMzX3Z1YXJ0X3BvcnRfcmVsZWFzZV9kZXZpY2UgLSBSZW1vdmUgYSB2dWFydCBwb3J0IGRldmljZS4KKyAqLworCitzdGF0aWMgdm9pZCBwczNfdnVhcnRfcG9ydF9yZWxlYXNlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiA9IHRvX3BzM192dWFydF9wb3J0X2RldmljZShfZGV2KTsKKyNpZiBkZWZpbmVkKERFQlVHKQorCW1lbXNldChkZXYsIDB4YWQsIHNpemVvZihzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlKSk7CisjZW5kaWYKKwlrZnJlZShkZXYpOworfQorCisvKioKKyAqIHBzM192dWFydF9wb3J0X2RldmljZV9yZWdpc3RlciAtIEFkZCBhIHZ1YXJ0IHBvcnQgZGV2aWNlLgorICovCisKK2ludCBwczNfdnVhcnRfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KQoreworCWludCByZXN1bHQ7CisJc3RhdGljIHVuc2lnbmVkIGludCBkZXZfY291bnQgPSAxOworCisJZGV2LT5jb3JlLnBhcmVudCA9IE5VTEw7CisJZGV2LT5jb3JlLmJ1cyA9ICZwczNfdnVhcnQ7CisJZGV2LT5jb3JlLnJlbGVhc2UgPSBwczNfdnVhcnRfcG9ydF9yZWxlYXNlX2RldmljZTsKKworCXNucHJpbnRmKGRldi0+Y29yZS5idXNfaWQsIHNpemVvZihkZXYtPmNvcmUuYnVzX2lkKSwgInZ1YXJ0XyUwMngiLAorCQlkZXZfY291bnQrKyk7CisKKwlkZXZfZGJnKCZkZXYtPmNvcmUsICIlczolZCByZWdpc3RlclxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXJlc3VsdCA9IGRldmljZV9yZWdpc3RlcigmZGV2LT5jb3JlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBzM192dWFydF9wb3J0X2RldmljZV9yZWdpc3Rlcik7CisKKy8qKgorICogcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyX3JlZ2lzdGVyIC0gQWRkIGEgdnVhcnQgcG9ydCBkZXZpY2UgZHJpdmVyLgorICovCisKK2ludCBwczNfdnVhcnRfcG9ydF9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHBzM192dWFydF9wb3J0X2RyaXZlciAqZHJ2KQoreworCWludCByZXN1bHQ7CisKKwlwcl9kZWJ1ZygiJXM6JWQ6ICglcylcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgZHJ2LT5jb3JlLm5hbWUpOworCWRydi0+Y29yZS5idXMgPSAmcHMzX3Z1YXJ0OworCXJlc3VsdCA9IGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5jb3JlKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwczNfdnVhcnRfcG9ydF9kcml2ZXJfcmVnaXN0ZXIpOworCisvKioKKyAqIHBzM192dWFydF9wb3J0X2RyaXZlcl91bnJlZ2lzdGVyIC0gUmVtb3ZlIGEgdnVhcnQgcG9ydCBkZXZpY2UgZHJpdmVyLgorICovCisKK3ZvaWQgcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IHBzM192dWFydF9wb3J0X2RyaXZlciAqZHJ2KQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmNvcmUpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwczNfdnVhcnRfcG9ydF9kcml2ZXJfdW5yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy92dWFydC5oIGIvZHJpdmVycy9wczMvdnVhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZkODlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wczMvdnVhcnQuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogIFBTMyB2aXJ0dWFsIHVhcnQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IFNvbnkgQ29tcHV0ZXIgRW50ZXJ0YWlubWVudCBJbmMuCisgKiAgQ29weXJpZ2h0IDIwMDYgU29ueSBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZiAhZGVmaW5lZChfUFMzX1ZVQVJUX0gpCisjZGVmaW5lIF9QUzNfVlVBUlRfSAorCitzdHJ1Y3QgcHMzX3Z1YXJ0X3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX3dyaXR0ZW47CisJdW5zaWduZWQgbG9uZyBieXRlc19yZWFkOworCXVuc2lnbmVkIGxvbmcgdHhfaW50ZXJydXB0czsKKwl1bnNpZ25lZCBsb25nIHJ4X2ludGVycnVwdHM7CisJdW5zaWduZWQgbG9uZyBkaXNjb25uZWN0X2ludGVycnVwdHM7Cit9OworCisvKioKKyAqIHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgLSBhIGRldmljZSBvbiBhIHZ1YXJ0IHBvcnQKKyAqLworCitzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlIHsKKwllbnVtIHBzM19tYXRjaF9pZCBtYXRjaF9pZDsKKwlzdHJ1Y3QgZGV2aWNlIGNvcmU7CisKKwkvKiBwcml2YXRlIGRyaXZlciB2YXJpYWJsZXMgKi8KKwl1bnNpZ25lZCBpbnQgcG9ydF9udW1iZXI7CisJdW5zaWduZWQgbG9uZyBpbnRlcnJ1cHRfbWFzazsKKwlzdHJ1Y3QgeworCQlzcGlubG9ja190IGxvY2s7CisJCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKwl9IHR4X2xpc3Q7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBieXRlc19oZWxkOworCQlzcGlubG9ja190IGxvY2s7CisJCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKwl9IHJ4X2xpc3Q7CisJc3RydWN0IHBzM192dWFydF9zdGF0cyBzdGF0czsKK307CisKKy8qKgorICogc3RydWN0IHBzM192dWFydF9wb3J0X2RyaXZlciAtIGEgZHJpdmVyIGZvciBhIGRldmljZSBvbiBhIHZ1YXJ0IHBvcnQKKyAqLworCitzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyIHsKKwllbnVtIHBzM19tYXRjaF9pZCBtYXRjaF9pZDsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBjb3JlOworCWludCAoKnByb2JlKShzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICopOworCWludCAoKnJlbW92ZSkoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqKTsKKwlpbnQgKCp0eF9ldmVudCkoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KTsKKwlpbnQgKCpyeF9ldmVudCkoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2KTsKKwlpbnQgKCpkaXNjb25uZWN0X2V2ZW50KShzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYpOworCS8qIGludCAoKnN1c3BlbmQpKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKiwgcG1fbWVzc2FnZV90KTsgKi8KKwkvKiBpbnQgKCpyZXN1bWUpKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKik7ICovCit9OworCitpbnQgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldik7CitpbnQgcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kcml2ZXIgKmRydik7Cit2b2lkIHBzM192dWFydF9wb3J0X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kcml2ZXIgKmRydik7CitpbnQgcHMzX3Z1YXJ0X3dyaXRlKHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKmRldiwKKwljb25zdCB2b2lkKiBidWYsIHVuc2lnbmVkIGludCBieXRlcyk7CitpbnQgcHMzX3Z1YXJ0X3JlYWQoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2LCB2b2lkKiBidWYsCisJdW5zaWduZWQgaW50IGJ5dGVzKTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBzM192dWFydF9wb3J0X2RyaXZlciAqdG9fcHMzX3Z1YXJ0X3BvcnRfZHJpdmVyKAorCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpfZHJ2KQoreworCXJldHVybiBjb250YWluZXJfb2YoX2Rydiwgc3RydWN0IHBzM192dWFydF9wb3J0X2RyaXZlciwgY29yZSk7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwczNfdnVhcnRfcG9ydF9kZXZpY2UgKnRvX3BzM192dWFydF9wb3J0X2RldmljZSgKKwlzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoX2Rldiwgc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSwgY29yZSk7Cit9CisKK2ludCBwczNfdnVhcnRfd3JpdGUoc3RydWN0IHBzM192dWFydF9wb3J0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkKiBidWYsCisJdW5zaWduZWQgaW50IGJ5dGVzKTsKK2ludCBwczNfdnVhcnRfcmVhZChzdHJ1Y3QgcHMzX3Z1YXJ0X3BvcnRfZGV2aWNlICpkZXYsIHZvaWQqIGJ1ZiwKKwl1bnNpZ25lZCBpbnQgYnl0ZXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IDJhNjNhYjIuLjA5NjYwZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGMtcGwwMzEuCiAKLWNvbmZpZyBSVENfRFJWX0FUOTEKK2NvbmZpZyBSVENfRFJWX0FUOTFSTTkyMDAKIAl0cmlzdGF0ZSAiQVQ5MVJNOTIwMCIKIAlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBBUkNIX0FUOTFSTTkyMDAKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IGJkNGM0NWQuLmU2YmVlZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC0zNSw1ICszNSw1IEBACiBvYmotJChDT05GSUdfUlRDX0RSVl9QTDAzMSkJKz0gcnRjLXBsMDMxLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01BWDY5MDIpCSs9IHJ0Yy1tYXg2OTAyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1YzMDIwKQkrPSBydGMtdjMwMjAubwotb2JqLSQoQ09ORklHX1JUQ19EUlZfQVQ5MSkJKz0gcnRjLWF0OTEubworb2JqLSQoQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMCkrPSBydGMtYXQ5MXJtOTIwMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9TSCkJKz0gcnRjLXNoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGRyaXZlcnMvcnRjL3J0Yy1hdDkxLmMKcmVuYW1lIHRvIGRyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKaW5kZXggNWM4YWRkYy4uYTcyNGFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCkBAIC0zMyw2ICszMyw4IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKKyNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3J0Yy5oPgorCiAKICNkZWZpbmUgQVQ5MV9SVENfRlJFUQkJMQogI2RlZmluZSBBVDkxX1JUQ19FUE9DSAkJMTkwMFVMCS8qIGp1c3QgbGlrZSBhcmNoL2FybS9jb21tb24vcnRjdGltZS5jICovCkBAIC0xMzcsNiArMTM5LDkgQEAKIAl0bS0+dG1feWRheSA9IHJ0Y195ZWFyX2RheXModG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyKTsKIAl0bS0+dG1feWVhciA9IGF0OTFfYWxhcm1feWVhciAtIDE5MDA7CiAKKwlhbHJtLT5lbmFibGVkID0gKGF0OTFfc3lzX3JlYWQoQVQ5MV9SVENfSU1SKSAmIEFUOTFfUlRDX0FMQVJNKQorCQkJPyAxIDogMDsKKwogCXByX2RlYnVnKCIlcygpOiAlNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkXG4iLCBfX0ZVTkNUSU9OX18sCiAJCTE5MDAgKyB0bS0+dG1feWVhciwgdG0tPnRtX21vbiwgdG0tPnRtX21kYXksCiAJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjKTsKQEAgLTIyMyw4ICsyMjgsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgaW1yID0gYXQ5MV9zeXNfcmVhZChBVDkxX1JUQ19JTVIpOwogCi0Jc2VxX3ByaW50ZihzZXEsICJhbGFybV9JUlFcdDogJXNcbiIsCi0JCQkoaW1yICYgQVQ5MV9SVENfQUxBUk0pID8gInllcyIgOiAibm8iKTsKIAlzZXFfcHJpbnRmKHNlcSwgInVwZGF0ZV9JUlFcdDogJXNcbiIsCiAJCQkoaW1yICYgQVQ5MV9SVENfQUNLVVBEKSA/ICJ5ZXMiIDogIm5vIik7CiAJc2VxX3ByaW50ZihzZXEsICJwZXJpb2RpY19JUlFcdDogJXNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKaW5kZXggODI4YjMyOS4uOTRkM2RmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRldi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwpAQCAtNDM1LDcgKzQzNSw3IEBACiAJCWdvdG8gZXJyX2NkZXZfZGVsOwogCX0KIAotCWRldl9pbmZvKGNsYXNzX2Rldi0+ZGV2LCAicnRjIGludGY6IGRldiAoJWQ6JWQpXG4iLAorCWRldl9kYmcoY2xhc3NfZGV2LT5kZXYsICJydGMgaW50ZjogZGV2ICglZDolZClcbiIsCiAJCU1BSk9SKHJ0Yy0+cnRjX2Rldi0+ZGV2dCksCiAJCU1JTk9SKHJ0Yy0+cnRjX2Rldi0+ZGV2dCkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMKaW5kZXggZGZlZjE2My4uMjA1ZmEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE2NzIuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCi0JZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGV2X2RiZyhhZGFwdGVyLT5jbGFzc19kZXYuZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKIAkJZXJyID0gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1saWIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1saWIuYwppbmRleCBiYTc5NWE0Li43YmJjMjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbGliLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWxpYi5jCkBAIC0xMTcsNCArMTE3LDg1IEBACiB9CiBFWFBPUlRfU1lNQk9MKHJ0Y190bV90b190aW1lKTsKIAorCisvKiBNZXJnZSB0aGUgdmFsaWQgKGkuZS4gbm9uLW5lZ2F0aXZlKSBmaWVsZHMgb2YgYWxhcm0gaW50byB0aGUgY3VycmVudAorICogdGltZS4gIElmIHRoZSB2YWxpZCBhbGFybSBmaWVsZHMgYXJlIGVhcmxpZXIgdGhhbiB0aGUgZXF1aXZhbGVudAorICogZmllbGRzIGluIHRoZSB0aW1lLCBjYXJyeSBvbmUgaW50byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgaW52YWxpZAorICogZmllbGQsIHNvIHRoYXQgdGhlIGFsYXJtIGV4cGlyeSBpcyBpbiB0aGUgZnV0dXJlLiAgSXQgYXNzdW1lcyB0aGF0IHRoZQorICogbGVhc3Qgc2lnbmlmaWNhbnQgaW52YWxpZCBmaWVsZCBpcyBtb3JlIHNpZ25pZmljYW50IHRoYW4gdGhlIG1vc3QKKyAqIHNpZ25pZmljYW50IHZhbGlkIGZpZWxkLCBhbmQgdGhhdCB0aGUgc2Vjb25kcyBmaWVsZCBpcyB2YWxpZC4KKyAqCisgKiBUaGlzIGlzIHVzZWQgYnkgYWxhcm1zIHRoYXQgdGFrZSByZWxhdGl2ZSAocmF0aGVyIHRoYW4gYWJzb2x1dGUpCisgKiB0aW1lcywgYW5kL29yIGhhdmUgYSBzaW1wbGUgYmluYXJ5IHNlY29uZCBjb3VudGVyIGluc3RlYWQgb2YKKyAqIGRheS9ob3VyL21pbnV0ZS9zZWMgcmVnaXN0ZXJzLgorICovCit2b2lkIHJ0Y19tZXJnZV9hbGFybShzdHJ1Y3QgcnRjX3RpbWUgKm5vdywgc3RydWN0IHJ0Y190aW1lICphbGFybSkKK3sKKwlpbnQgKmFsYXJtcCA9ICZhbGFybS0+dG1fc2VjOworCWludCAqdGltZXAgPSAmbm93LT50bV9zZWM7CisJaW50IGNhcnJ5X2ludG8sIGk7CisKKwkvKiBJZ25vcmUgZXZlcnl0aGluZyBwYXN0IHRoZSA2dGggZWxlbWVudCAodG1feWVhcikuICovCisJZm9yIChpID0gNTsgaSA+IDA7IGktLSkgeworCQlpZiAoYWxhcm1wW2ldIDwgMCkKKwkJCWFsYXJtcFtpXSA9IHRpbWVwW2ldOworCQllbHNlCisJCQlicmVhazsKKwl9CisKKwkvKiBObyBjYXJyeSBuZWVkZWQgaWYgYWxsIGZpZWxkcyBhcmUgdmFsaWQuICovCisJaWYgKGkgPT0gNSkKKwkJcmV0dXJuOworCisJZm9yIChjYXJyeV9pbnRvID0gaSArIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChhbGFybXBbaV0gPCB0aW1lcFtpXSkKKwkJCWJyZWFrOworCisJCWlmIChhbGFybXBbaV0gPiB0aW1lcFtpXSkKKwkJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGNhcnJ5X2ludG8pIHsKKwkJY2FzZSAxOgorCQkJYWxhcm0tPnRtX21pbisrOworCisJCQlpZiAoYWxhcm0tPnRtX21pbiA8IDYwKQorCQkJCXJldHVybjsKKworCQkJYWxhcm0tPnRtX21pbiA9IDA7CisJCQkvKiBmYWxsLXRocm91Z2ggKi8KKworCQljYXNlIDI6CisJCQlhbGFybS0+dG1faG91cisrOworCisJCQlpZiAoYWxhcm0tPnRtX2hvdXIgPCA2MCkKKwkJCQlyZXR1cm47CisKKwkJCWFsYXJtLT50bV9ob3VyID0gMDsKKwkJCS8qIGZhbGwtdGhyb3VnaCAqLworCisJCWNhc2UgMzoKKwkJCWFsYXJtLT50bV9tZGF5Kys7CisKKwkJCWlmIChhbGFybS0+dG1fbWRheSA8PSBydGNfZGF5c19pbl9tb250aFthbGFybS0+dG1fbW9uXSkKKwkJCQlyZXR1cm47CisKKwkJCWFsYXJtLT50bV9tZGF5ID0gMTsKKwkJCS8qIGZhbGwtdGhyb3VnaCAqLworCisJCWNhc2UgNDoKKwkJCWFsYXJtLT50bV9tb24rKzsKKworCQkJaWYgKGFsYXJtLT50bV9tb24gPD0gMTIpCisJCQkJcmV0dXJuOworCisJCQlhbGFybS0+dG1fbW9uID0gMTsKKwkJCS8qIGZhbGwtdGhyb3VnaCAqLworCisJCWNhc2UgNToKKwkJCWFsYXJtLT50bV95ZWFyKys7CisJfQorfQorRVhQT1JUX1NZTUJPTChydGNfbWVyZ2VfYWxhcm0pOworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCBlYWM1ZmIxLi5kNTk4ODBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTI3OSw5ICsyNzksOCBAQAogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCWJjZDJ0bSgmYWxtLT50aW1lKTsKLQlhbG0tPnBlbmRpbmcgPSAhIShydGNfcmVhZChPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRykKKwlhbG0tPmVuYWJsZWQgPSAhIShydGNfcmVhZChPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRykKIAkJCSYgT01BUF9SVENfSU5URVJSVVBUU19JVF9BTEFSTSk7Ci0JYWxtLT5lbmFibGVkID0gYWxtLT5wZW5kaW5nICYmIGRldmljZV9tYXlfd2FrZXVwKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCmluZGV4IGE3NjBjZjYuLjRiNzJiOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCXhmZXIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKIAogCQlpZiAoeGZlciAhPSBBUlJBWV9TSVpFKG1zZ3MpKSB7Ci0JCQlkZXZfZXJyKCZjbGllbnQtPmFkYXB0ZXItPmRldiwKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJCSIlczogY291bGQgbm90IHJlYWQgcmVnaXN0ZXIgMHglMDJYXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgcGF0dGVybltpXS5yZWcpOwogCkBAIC0yMDMsNyArMjAzLDcgQEAKIAogCQlpZiAodmFsdWUgPiBwYXR0ZXJuW2ldLm1heCB8fAogCQkJdmFsdWUgPCBwYXR0ZXJuW2ldLm1pbikgewotCQkJZGV2X2RiZygmY2xpZW50LT5hZGFwdGVyLT5kZXYsCisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwKIAkJCQkiJXM6IHBhdHRlcm49JWQsIHJlZz0leCwgbWFzaz0weCUwMngsIG1pbj0lZCwgIgogCQkJCSJtYXg9JWQsIHZhbHVlPSVkLCByYXc9MHglMDJYXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgaSwgcGF0dGVybltpXS5yZWcsIHBhdHRlcm5baV0ubWFzaywKQEAgLTI1Myw3ICsyNTMsNyBAQAogCiAJaW50IGVyciA9IDA7CiAKLQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkZXZfZGJnKGFkYXB0ZXItPmNsYXNzX2Rldi5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewogCQllcnIgPSAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKaW5kZXggZDUxZDhmMi4uYzI3MmFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCkBAIC02NSw3ICs2NSw3IEBACiAJCQlzZXFfcHJpbnRmKHNlcSwgIiUwMmRcbiIsIGFscm0udGltZS50bV9tZGF5KTsKIAkJZWxzZQogCQkJc2VxX3ByaW50ZihzZXEsICIqKlxuIik7Ci0JCXNlcV9wcmludGYoc2VxLCAiYWxybV93YWtldXBcdDogJXNcbiIsCisJCXNlcV9wcmludGYoc2VxLCAiYWxhcm1fSVJRXHQ6ICVzXG4iLAogCQkJCWFscm0uZW5hYmxlZCA/ICJ5ZXMiIDogIm5vIik7CiAJCXNlcV9wcmludGYoc2VxLCAiYWxybV9wZW5kaW5nXHQ6ICVzXG4iLAogCQkJCWFscm0ucGVuZGluZyA/ICJ5ZXMiIDogIm5vIik7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJCWVudC0+b3duZXIgPSBydGMtPm93bmVyOwogCQkJZW50LT5kYXRhID0gY2xhc3NfZGV2OwogCi0JCQlkZXZfaW5mbyhjbGFzc19kZXYtPmRldiwgInJ0YyBpbnRmOiBwcm9jXG4iKTsKKwkJCWRldl9kYmcoY2xhc3NfZGV2LT5kZXYsICJydGMgaW50ZjogcHJvY1xuIik7CiAJCX0KIAkJZWxzZQogCQkJcnRjX2RldiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYwppbmRleCBlMmM3Njk4Li5lNzg1MWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQW4gSTJDIGRyaXZlciBmb3IgdGhlIFJpY29oIFJTNUMzNzIgUlRDCisgKiBBbiBJMkMgZHJpdmVyIGZvciBSaWNvaCBSUzVDMzcyIGFuZCBSVjVDMzhbNjddIFJUQ3MKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUGF2ZWwgTWlyb25jaGlrIDxwbWlyb25jaGlrQG9wdGlmYWNpby5uZXQ+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVG93ZXIgVGVjaG5vbG9naWVzCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuNCIKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IC8qIDB4MzIsKi8gSTJDX0NMSUVOVF9FTkQgfTsKQEAgLTIxLDYgKzIxLDEzIEBACiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKKworLyoKKyAqIFJpY29oIGhhcyBhIGZhbWlseSBvZiBJMkMgYmFzZWQgUlRDcywgd2hpY2ggZGlmZmVyIG9ubHkgc2xpZ2h0bHkgZnJvbQorICogZWFjaCBvdGhlci4gIERpZmZlcmVuY2VzIGNlbnRlciBvbiBwaW5vdXQgKGUuZy4gaG93IG1hbnkgaW50ZXJydXB0cywKKyAqIG91dHB1dCBjbG9jaywgZXRjKSBhbmQgaG93IHRoZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgdXNlZC4gIFRoZSAnMzcyCisgKiBpcyBzaWduaWZpY2FudCBvbmx5IGJlY2F1c2UgdGhhdCdzIHRoZSBvbmUgdGhpcyBkcml2ZXIgZmlyc3Qgc3VwcG9ydGVkLgorICovCiAjZGVmaW5lIFJTNUMzNzJfUkVHX1NFQ1MJMAogI2RlZmluZSBSUzVDMzcyX1JFR19NSU5TCTEKICNkZWZpbmUgUlM1QzM3Ml9SRUdfSE9VUlMJMgpAQCAtMjksNTkgKzM2LDE0MiBAQAogI2RlZmluZSBSUzVDMzcyX1JFR19NT05USAk1CiAjZGVmaW5lIFJTNUMzNzJfUkVHX1lFQVIJNgogI2RlZmluZSBSUzVDMzcyX1JFR19UUklNCTcKKyMJZGVmaW5lIFJTNUMzNzJfVFJJTV9YU0wJCTB4ODAKKyMJZGVmaW5lIFJTNUMzNzJfVFJJTV9NQVNLCTB4N0YKIAotI2RlZmluZSBSUzVDMzcyX1RSSU1fWFNMCTB4ODAKLSNkZWZpbmUgUlM1QzM3Ml9UUklNX01BU0sJMHg3RgorI2RlZmluZSBSUzVDX1JFR19BTEFSTV9BX01JTgk4CQkJLyogb3IgQUxBUk1fVyAqLworI2RlZmluZSBSUzVDX1JFR19BTEFSTV9BX0hPVVJTCTkKKyNkZWZpbmUgUlM1Q19SRUdfQUxBUk1fQV9XREFZCTEwCiAKLSNkZWZpbmUgUlM1QzM3Ml9SRUdfQkFTRQkwCisjZGVmaW5lIFJTNUNfUkVHX0FMQVJNX0JfTUlOCTExCQkJLyogb3IgQUxBUk1fRCAqLworI2RlZmluZSBSUzVDX1JFR19BTEFSTV9CX0hPVVJTCTEyCisjZGVmaW5lIFJTNUNfUkVHX0FMQVJNX0JfV0RBWQkxMwkJCS8qIChBTEFSTV9CIG9ubHkpICovCiAKLXN0YXRpYyBpbnQgcnM1YzM3Ml9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgcnM1YzM3Ml9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgaW50IHJzNWMzNzJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOworI2RlZmluZSBSUzVDX1JFR19DVFJMMQkJMTQKKyMJZGVmaW5lIFJTNUNfQ1RSTDFfQUFMRQkJKDEgPDwgNykJLyogb3IgV0FMRSAqLworIwlkZWZpbmUgUlM1Q19DVFJMMV9CQUxFCQkoMSA8PCA2KQkvKiBvciBEQUxFICovCisjCWRlZmluZSBSVjVDMzg3X0NUUkwxXzI0CQkoMSA8PCA1KQorIwlkZWZpbmUgUlM1QzM3MkFfQ1RSTDFfU0wxCSgxIDw8IDUpCisjCWRlZmluZSBSUzVDX0NUUkwxX0NUX01BU0sJKDcgPDwgMCkKKyMJZGVmaW5lIFJTNUNfQ1RSTDFfQ1QwCQkoMCA8PCAwKQkvKiBubyBwZXJpb2RpYyBpcnEgKi8KKyMJZGVmaW5lIFJTNUNfQ1RSTDFfQ1Q0CQkoNCA8PCAwKQkvKiAxIEh6IGxldmVsIGlycSAqLworI2RlZmluZSBSUzVDX1JFR19DVFJMMgkJMTUKKyMJZGVmaW5lIFJTNUMzNzJfQ1RSTDJfMjQJCSgxIDw8IDUpCisjCWRlZmluZSBSUzVDX0NUUkwyX1hTVFAJCSgxIDw8IDQpCisjCWRlZmluZSBSUzVDX0NUUkwyX0NURkcJCSgxIDw8IDIpCisjCWRlZmluZSBSUzVDX0NUUkwyX0FBRkcJCSgxIDw8IDEpCS8qIG9yIFdBRkcgKi8KKyMJZGVmaW5lIFJTNUNfQ1RSTDJfQkFGRwkJKDEgPDwgMCkJLyogb3IgREFGRyAqLwogCisKKy8qIHRvIHJlYWQgKHN0eWxlIDEpIG9yIHdyaXRlIHJlZ2lzdGVycyBzdGFydGluZyBhdCBSICovCisjZGVmaW5lIFJTNUNfQUREUihSKQkJKCgoUikgPDwgNCkgfCAwKQorCisKK2VudW0gcnRjX3R5cGUgeworCXJ0Y191bmRlZiA9IDAsCisJcnRjX3JzNWMzNzJhLAorCXJ0Y19yczVjMzcyYiwKKwlydGNfcnY1YzM4NiwKKwlydGNfcnY1YzM4N2EsCit9OworCisvKiBSRVZJU0lUOiAgdGhpcyBhc3N1bWVzIHRoYXQ6CisgKiAgLSB3ZSdyZSBpbiB0aGUgMjFzdCBjZW50dXJ5LCBzbyBpdCdzIHNhZmUgdG8gaWdub3JlIHRoZSBjZW50dXJ5CisgKiAgICBiaXQgZm9yIHJ2NWMzOFs2N10gKFJFR19NT05USCBiaXQgNyk7CisgKiAgLSB3ZSBzaG91bGQgdXNlIEFMQVJNX0Egbm90IEFMQVJNX0IgKG1heSBiZSB3cm9uZyBvbiBzb21lIGJvYXJkcykKKyAqLwogc3RydWN0IHJzNWMzNzIgewotCXU4IHJlZ19hZGRyOwotCXU4IHJlZ3NbMTddOwotCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OworCXN0cnVjdCBydGNfZGV2aWNlCSpydGM7CisJZW51bSBydGNfdHlwZQkJdHlwZTsKKwl1bnNpZ25lZAkJdGltZTI0OjE7CisJdW5zaWduZWQJCWhhc19pcnE6MTsKKwljaGFyCQkJYnVmWzE3XTsKKwljaGFyCQkJKnJlZ3M7CisKKwkvKiBvbiBjb252ZXJzaW9uIHRvIGEgIm5ldyBzdHlsZSIgaTJjIGRyaXZlciwgdGhpcyB2YW5pc2hlcyAqLworCXN0cnVjdCBpMmNfY2xpZW50CWRldjsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciByczVjMzcyX2RyaXZlciA9IHsKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSAicnM1YzM3MiIsCi0JfSwKLQkuYXR0YWNoX2FkYXB0ZXIJPSAmcnM1YzM3Ml9hdHRhY2gsCi0JLmRldGFjaF9jbGllbnQJPSAmcnM1YzM3Ml9kZXRhY2gsCi19OwotCi1zdGF0aWMgaW50IHJzNWMzNzJfZ2V0X2RhdGV0aW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBydGNfdGltZSAqdG0pCitzdGF0aWMgaW50IHJzNWNfZ2V0X3JlZ3Moc3RydWN0IHJzNWMzNzIgKnJzNWMpCiB7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudCA9IHJzNWMtPmNsaWVudDsKKwlzdHJ1Y3QgaTJjX21zZwkJbXNnc1tdID0geworCQl7IGNsaWVudC0+YWRkciwgSTJDX01fUkQsIHNpemVvZiByczVjLT5idWYsIHJzNWMtPmJ1ZiB9LAorCX07CiAKLQlzdHJ1Y3QgcnM1YzM3MiAqcnM1YzM3MiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXU4ICpidWYgPSAmKHJzNWMzNzItPnJlZ3NbMV0pOwotCi0JLyogdGhpcyBpbXBsZW1lbnRzIHRoZSAzcmQgcmVhZGluZyBtZXRob2QsIGFjY29yZGluZwotCSAqIHRvIHRoZSBkYXRhc2hlZXQuIHJzNWMzNzIgZGVmYXVsdHMgdG8gaW50ZXJuYWwKLQkgKiBhZGRyZXNzIDB4Riwgc28gMHgwIGlzIGluIHJlZ3NbMV0KKwkvKiBUaGlzIGltcGxlbWVudHMgdGhlIHRoaXJkIHJlYWRpbmcgbWV0aG9kIGZyb20gdGhlIGRhdGFzaGVldCwgdXNpbmcKKwkgKiBhbiBpbnRlcm5hbCBhZGRyZXNzIHRoYXQncyByZXNldCBhZnRlciBlYWNoIHRyYW5zYWN0aW9uIChieSBTVE9QKQorCSAqIHRvIDB4MGYgLi4uIHNvIHdlIHJlYWQgZXh0cmEgcmVnaXN0ZXJzLCBhbmQgc2tpcCB0aGUgZmlyc3Qgb25lLgorCSAqCisJICogVGhlIGZpcnN0IG1ldGhvZCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgaW9wM3h4IGFkYXB0ZXIgZHJpdmVyLCBvbiBhdAorCSAqIGxlYXN0IDgwMjE5IGNoaXBzOyB0aGlzIHdvcmtzIGFyb3VuZCB0aGF0IGJ1Zy4KIAkgKi8KLQotCWlmICgoaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgcnM1YzM3Mi0+bXNnLCAxKSkgIT0gMSkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiByZWFkIGVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmICgoaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgMSkpICE9IDEpIHsKKwkJcHJfZGVidWcoIiVzOiBjYW4ndCByZWFkIHJlZ2lzdGVyc1xuIiwgcnM1Yy0+cnRjLT5uYW1lKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oYnVmW1JTNUMzNzJfUkVHX1NFQ1NdICYgMHg3Zik7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oYnVmW1JTNUMzNzJfUkVHX01JTlNdICYgMHg3Zik7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGJ1ZltSUzVDMzcyX1JFR19IT1VSU10gJiAweDNmKTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4oYnVmW1JTNUMzNzJfUkVHX1dEQVldICYgMHgwNyk7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZltSUzVDMzcyX1JFR19EQVldICYgMHgzZik7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsCisJCSIlMDJ4ICUwMnggJTAyeCAoJTAyeCkgJTAyeCAlMDJ4ICUwMnggKCUwMngpLCAiCisJCSIlMDJ4ICUwMnggJTAyeCwgJTAyeCAlMDJ4ICUwMng7ICUwMnggJTAyeFxuIiwKKwkJcnM1Yy0+cmVnc1swXSwgIHJzNWMtPnJlZ3NbMV0sICByczVjLT5yZWdzWzJdLCAgcnM1Yy0+cmVnc1szXSwKKwkJcnM1Yy0+cmVnc1s0XSwgIHJzNWMtPnJlZ3NbNV0sICByczVjLT5yZWdzWzZdLCAgcnM1Yy0+cmVnc1s3XSwKKwkJcnM1Yy0+cmVnc1s4XSwgIHJzNWMtPnJlZ3NbOV0sICByczVjLT5yZWdzWzEwXSwgcnM1Yy0+cmVnc1sxMV0sCisJCXJzNWMtPnJlZ3NbMTJdLCByczVjLT5yZWdzWzEzXSwgcnM1Yy0+cmVnc1sxNF0sIHJzNWMtPnJlZ3NbMTVdKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgcnM1Y19yZWcyaHIoc3RydWN0IHJzNWMzNzIgKnJzNWMsIHVuc2lnbmVkIHJlZykKK3sKKwl1bnNpZ25lZAlob3VyOworCisJaWYgKHJzNWMtPnRpbWUyNCkKKwkJcmV0dXJuIEJDRDJCSU4ocmVnICYgMHgzZik7CisKKwlob3VyID0gQkNEMkJJTihyZWcgJiAweDFmKTsKKwlpZiAoaG91ciA9PSAxMikKKwkJaG91ciA9IDA7CisJaWYgKHJlZyAmIDB4MjApCisJCWhvdXIgKz0gMTI7CisJcmV0dXJuIGhvdXI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCByczVjX2hyMnJlZyhzdHJ1Y3QgcnM1YzM3MiAqcnM1YywgdW5zaWduZWQgaG91cikKK3sKKwlpZiAocnM1Yy0+dGltZTI0KQorCQlyZXR1cm4gQklOMkJDRChob3VyKTsKKworCWlmIChob3VyID4gMTIpCisJCXJldHVybiAweDIwIHwgQklOMkJDRChob3VyIC0gMTIpOworCWlmIChob3VyID09IDEyKQorCQlyZXR1cm4gMHgyMCB8IEJJTjJCQ0QoMTIpOworCWlmIChob3VyID09IDApCisJCXJldHVybiBCSU4yQkNEKDEyKTsKKwlyZXR1cm4gQklOMkJDRChob3VyKTsKK30KKworc3RhdGljIGludCByczVjMzcyX2dldF9kYXRldGltZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCByczVjMzcyCSpyczVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50CQlzdGF0dXMgPSByczVjX2dldF9yZWdzKHJzNWMpOworCisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwl0bS0+dG1fc2VjID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX1NFQ1NdICYgMHg3Zik7CisJdG0tPnRtX21pbiA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19NSU5TXSAmIDB4N2YpOworCXRtLT50bV9ob3VyID0gcnM1Y19yZWcyaHIocnM1YywgcnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19IT1VSU10pOworCisJdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfV0RBWV0gJiAweDA3KTsKKwl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19EQVldICYgMHgzZik7CiAKIAkvKiB0bS0+dG1fbW9uIGlzIHplcm8tYmFzZWQgKi8KLQl0bS0+dG1fbW9uID0gQkNEMkJJTihidWZbUlM1QzM3Ml9SRUdfTU9OVEhdICYgMHgxZikgLSAxOworCXRtLT50bV9tb24gPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfTU9OVEhdICYgMHgxZikgLSAxOwogCiAJLyogeWVhciBpcyAxOTAwICsgdG0tPnRtX3llYXIgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oYnVmW1JTNUMzNzJfUkVHX1lFQVJdKSArIDEwMDsKKwl0bS0+dG1feWVhciA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19ZRUFSXSkgKyAxMDA7CiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgIgogCQkibWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLApAQCAtODksMjIgKzE3OSwyNSBAQAogCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKIAkJdG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKLQlyZXR1cm4gMDsKKwkvKiBydGMgbWlnaHQgbmVlZCBpbml0aWFsaXphdGlvbiAqLworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOwogfQogCiBzdGF0aWMgaW50IHJzNWMzNzJfc2V0X2RhdGV0aW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7Ci0JdW5zaWduZWQgY2hhciBidWZbOF0gPSB7IFJTNUMzNzJfUkVHX0JBU0UgfTsKKwlzdHJ1Y3QgcnM1YzM3MgkqcnM1YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGNoYXIJYnVmWzhdOwogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsCi0JCSIlczogc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQgIgorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkICIKIAkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKLQkJX19GVU5DVElPTl9fLCB0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKKwkJX19GVU5DVElPTl9fLAorCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKIAkJdG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKKwlidWZbMF0gPSBSUzVDX0FERFIoUlM1QzM3Ml9SRUdfU0VDUyk7CiAJYnVmWzFdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKIAlidWZbMl0gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCWJ1ZlszXSA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOworCWJ1ZlszXSA9IHJzNWNfaHIycmVnKHJzNWMsIHRtLT50bV9ob3VyKTsKIAlidWZbNF0gPSBCSU4yQkNEKHRtLT50bV93ZGF5KTsKIAlidWZbNV0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKIAlidWZbNl0gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKQEAgLTExOCwyMSArMjExLDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9QUk9DKSB8fCBkZWZpbmVkKENPTkZJR19SVENfSU5URl9QUk9DX01PRFVMRSkKKyNkZWZpbmUJTkVFRF9UUklNCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1NZU0ZTKSB8fCBkZWZpbmVkKENPTkZJR19SVENfSU5URl9TWVNGU19NT0RVTEUpCisjZGVmaW5lCU5FRURfVFJJTQorI2VuZGlmCisKKyNpZmRlZglORUVEX1RSSU0KIHN0YXRpYyBpbnQgcnM1YzM3Ml9nZXRfdHJpbShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgKm9zYywgaW50ICp0cmltKQogewogCXN0cnVjdCByczVjMzcyICpyczVjMzcyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdTggdG1wID0gcnM1YzM3Mi0+cmVnc1tSUzVDMzcyX1JFR19UUklNICsgMV07CisJdTggdG1wID0gcnM1YzM3Mi0+cmVnc1tSUzVDMzcyX1JFR19UUklNXTsKIAogCWlmIChvc2MpCiAJCSpvc2MgPSAodG1wICYgUlM1QzM3Ml9UUklNX1hTTCkgPyAzMjAwMCA6IDMyNzY4OwogCiAJaWYgKHRyaW0pIHsKLQkJKnRyaW0gPSB0bXAgJiBSUzVDMzcyX1RSSU1fTUFTSzsKLQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogcmF3IHRyaW09JXhcbiIsIF9fRlVOQ1RJT05fXywgKnRyaW0pOworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiByYXcgdHJpbT0leFxuIiwgX19GVU5DVElPTl9fLCB0bXApOworCQl0bXAgJj0gUlM1QzM3Ml9UUklNX01BU0s7CisJCWlmICh0bXAgJiAweDNlKSB7CisJCQlpbnQgdCA9IHRtcCAmIDB4M2Y7CisKKwkJCWlmICh0bXAgJiAweDQwKQorCQkJCXQgPSAofnQgfCAoczgpMHhjMCkgKyAxOworCQkJZWxzZQorCQkJCXQgPSB0IC0gMTsKKworCQkJdG1wID0gdCAqIDI7CisJCX0gZWxzZQorCQkJdG1wID0gMDsKKwkJKnRyaW0gPSB0bXA7CiAJfQogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogc3RhdGljIGludCByczVjMzcyX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewpAQCAtMTQ0LDI1ICsyNTksMTkwIEBACiAJcmV0dXJuIHJzNWMzNzJfc2V0X2RhdGV0aW1lKHRvX2kyY19jbGllbnQoZGV2KSwgdG0pOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfREVWKSB8fCBkZWZpbmVkKENPTkZJR19SVENfSU5URl9ERVZfTU9EVUxFKQorCitzdGF0aWMgaW50CityczVjX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHJzNWMzNzIJCSpyczVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdW5zaWduZWQgY2hhcgkJYnVmWzJdOworCWludAkJCXN0YXR1czsKKworCWJ1ZlsxXSA9IHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfVUlFX09GRjoKKwljYXNlIFJUQ19VSUVfT046CisJCS8qIHNvbWUgMzI3YSBtb2RlcyB1c2UgYSBkaWZmZXJlbnQgSVJRIHBpbiBmb3IgMUh6IGlycXMgKi8KKwkJaWYgKHJzNWMtPnR5cGUgPT0gcnRjX3JzNWMzNzJhCisJCQkJJiYgKGJ1ZlsxXSAmIFJTNUMzNzJBX0NUUkwxX1NMMSkpCisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCWNhc2UgUlRDX0FJRV9PRkY6CisJY2FzZSBSVENfQUlFX09OOgorCQkvKiB0aGVzZSBpcnEgbWFuYWdlbWVudCBjYWxscyBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGNoaXBzCisJCSAqIHdoaWNoIGFyZSB3aXJlZCB1cCB0byBhbiBJUlEuCisJCSAqLworCQlpZiAoIXJzNWMtPmhhc19pcnEpCisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKworCXN0YXR1cyA9IHJzNWNfZ2V0X3JlZ3MocnM1Yyk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlidWZbMF0gPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfQUlFX09GRjoJLyogYWxhcm0gb2ZmICovCisJCWJ1ZlsxXSAmPSB+UlM1Q19DVFJMMV9BQUxFOworCQlicmVhazsKKwljYXNlIFJUQ19BSUVfT046CS8qIGFsYXJtIG9uICovCisJCWJ1ZlsxXSB8PSBSUzVDX0NUUkwxX0FBTEU7CisJCWJyZWFrOworCWNhc2UgUlRDX1VJRV9PRkY6CS8qIHVwZGF0ZSBvZmYgKi8KKwkJYnVmWzFdICY9IH5SUzVDX0NUUkwxX0NUX01BU0s7CisJCWJyZWFrOworCWNhc2UgUlRDX1VJRV9PTjoJLyogdXBkYXRlIG9uICovCisJCWJ1ZlsxXSAmPSB+UlM1Q19DVFJMMV9DVF9NQVNLOworCQlidWZbMV0gfD0gUlM1Q19DVFJMMV9DVDQ7CisJCWJyZWFrOworCX0KKwlpZiAoKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMikpICE9IDIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbid0IHVwZGF0ZSBhbGFybVxuIiwKKwkJCXJzNWMtPnJ0Yy0+bmFtZSk7CisJCXN0YXR1cyA9IC1FSU87CisJfSBlbHNlCisJCXJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmWzFdOworCXJldHVybiBzdGF0dXM7Cit9CisKKyNlbHNlCisjZGVmaW5lCXJzNWNfcnRjX2lvY3RsCU5VTEwKKyNlbmRpZgorCisKKy8qIE5PVEU6ICBTaW5jZSBSVENfV0tBTE1fe1JELFNFVH0gd2VyZSBvcmlnaW5hbGx5IGRlZmluZWQgZm9yIEVGSSwKKyAqIHdoaWNoIG9ubHkgZXhwb3NlcyBhIHBvbGxlZCBwcm9ncmFtbWluZyBpbnRlcmZhY2U7IGFuZCBzaW5jZQorICogdGhlc2UgY2FsbHMgbWFwIGRpcmVjdGx5IHRvIHRob3NlIEVGSSByZXF1ZXN0czsgd2UgZG9uJ3QgZGVtYW5kCisgKiB3ZSBoYXZlIGFuIElSUSBmb3IgdGhpcyBjaGlwIHdoZW4gd2UgZ28gdGhyb3VnaCB0aGlzIEFQSS4KKyAqCisgKiBUaGUgb2xkZXIgeDg2X3BjIGRlcml2ZWQgUlRDX0FMTV97UkVBRCxTRVR9IGNhbGxzIHJlcXVpcmUgaXJxcworICogdGhvdWdoLCBtYW5hZ2VkIHRocm91Z2ggUlRDX0FJRV97T04sT0ZGfSByZXF1ZXN0cy4KKyAqLworCitzdGF0aWMgaW50IHJzNWNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICp0KQoreworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHJzNWMzNzIJCSpyczVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50CQkJc3RhdHVzOworCisJc3RhdHVzID0gcnM1Y19nZXRfcmVncyhyczVjKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIHJlcG9ydCBhbGFybSB0aW1lICovCisJdC0+dGltZS50bV9zZWMgPSAwOworCXQtPnRpbWUudG1fbWluID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUNfUkVHX0FMQVJNX0FfTUlOXSAmIDB4N2YpOworCXQtPnRpbWUudG1faG91ciA9IHJzNWNfcmVnMmhyKHJzNWMsIHJzNWMtPnJlZ3NbUlM1Q19SRUdfQUxBUk1fQV9IT1VSU10pOworCXQtPnRpbWUudG1fbWRheSA9IC0xOworCXQtPnRpbWUudG1fbW9uID0gLTE7CisJdC0+dGltZS50bV95ZWFyID0gLTE7CisJdC0+dGltZS50bV93ZGF5ID0gLTE7CisJdC0+dGltZS50bV95ZGF5ID0gLTE7CisJdC0+dGltZS50bV9pc2RzdCA9IC0xOworCisJLyogLi4uIGFuZCBzdGF0dXMgKi8KKwl0LT5lbmFibGVkID0gISEocnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gJiBSUzVDX0NUUkwxX0FBTEUpOworCXQtPnBlbmRpbmcgPSAhIShyczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSAmIFJTNUNfQ1RSTDJfQUFGRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByczVjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICp0KQoreworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHJzNWMzNzIJCSpyczVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50CQkJc3RhdHVzOworCXVuc2lnbmVkIGNoYXIJCWJ1Zls0XTsKKworCS8qIG9ubHkgaGFuZGxlIHVwIHRvIDI0IGhvdXJzIGluIHRoZSBmdXR1cmUsIGxpa2UgUlRDX0FMTV9TRVQgKi8KKwlpZiAodC0+dGltZS50bV9tZGF5ICE9IC0xCisJCQl8fCB0LT50aW1lLnRtX21vbiAhPSAtMQorCQkJfHwgdC0+dGltZS50bV95ZWFyICE9IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFJFVklTSVQ6IHJvdW5kIHVwIHRtX3NlYyAqLworCisJLyogaWYgbmVlZGVkLCBkaXNhYmxlIGlycSAoY2xlYXJzIHBlbmRpbmcgc3RhdHVzKSAqLworCXN0YXR1cyA9IHJzNWNfZ2V0X3JlZ3MocnM1Yyk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisJaWYgKHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdICYgUlM1Q19DVFJMMV9BQUxFKSB7CisJCWJ1ZlswXSA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7CisJCWJ1ZlsxXSA9IHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdICYgflJTNUNfQ1RSTDFfQUFMRTsKKwkJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMikgIT0gMikgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBkaXNhYmxlIGFsYXJtXG4iLCByczVjLT5ydGMtPm5hbWUpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWZbMV07CisJfQorCisJLyogc2V0IGFsYXJtICovCisJYnVmWzBdID0gUlM1Q19BRERSKFJTNUNfUkVHX0FMQVJNX0FfTUlOKTsKKwlidWZbMV0gPSBCSU4yQkNEKHQtPnRpbWUudG1fbWluKTsKKwlidWZbMl0gPSByczVjX2hyMnJlZyhyczVjLCB0LT50aW1lLnRtX2hvdXIpOworCWJ1ZlszXSA9IDB4N2Y7CS8qIGFueS9hbGwgZGF5cyAqLworCWlmICgoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCA0KSkgIT0gNCkgeworCQlwcl9kZWJ1ZygiJXM6IGNhbid0IHNldCBhbGFybSB0aW1lXG4iLCByczVjLT5ydGMtPm5hbWUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiAuLi4gYW5kIG1heWJlIGVuYWJsZSBpdHMgaXJxICovCisJaWYgKHQtPmVuYWJsZWQpIHsKKwkJYnVmWzBdID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKKwkJYnVmWzFdID0gcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gfCBSUzVDX0NUUkwxX0FBTEU7CisJCWlmICgoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKSkgIT0gMikKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4ndCBlbmFibGUgYWxhcm1cbiIsCisJCQkJcnM1Yy0+cnRjLT5uYW1lKTsKKwkJcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWZbMV07CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9QUk9DKSB8fCBkZWZpbmVkKENPTkZJR19SVENfSU5URl9QUk9DX01PRFVMRSkKKwogc3RhdGljIGludCByczVjMzcyX3J0Y19wcm9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNlcV9maWxlICpzZXEpCiB7CiAJaW50IGVyciwgb3NjLCB0cmltOwogCiAJZXJyID0gcnM1YzM3Ml9nZXRfdHJpbSh0b19pMmNfY2xpZW50KGRldiksICZvc2MsICZ0cmltKTsKIAlpZiAoZXJyID09IDApIHsKLQkJc2VxX3ByaW50ZihzZXEsICIlZC4lMDNkIEtIelxuIiwgb3NjIC8gMTAwMCwgb3NjICUgMTAwMCk7Ci0JCXNlcV9wcmludGYoc2VxLCAidHJpbVx0OiAlZFxuIiwgdHJpbSk7CisJCXNlcV9wcmludGYoc2VxLCAiY3J5c3RhbFx0XHQ6ICVkLiUwM2QgS0h6XG4iLAorCQkJCW9zYyAvIDEwMDAsIG9zYyAlIDEwMDApOworCQlzZXFfcHJpbnRmKHNlcSwgInRyaW1cdFx0OiAlZFxuIiwgdHJpbSk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKKyNlbHNlCisjZGVmaW5lCXJzNWMzNzJfcnRjX3Byb2MJTlVMTAorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyByczVjMzcyX3J0Y19vcHMgPSB7CiAJLnByb2MJCT0gcnM1YzM3Ml9ydGNfcHJvYywKKwkuaW9jdGwJCT0gcnM1Y19ydGNfaW9jdGwsCiAJLnJlYWRfdGltZQk9IHJzNWMzNzJfcnRjX3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSByczVjMzcyX3J0Y19zZXRfdGltZSwKKwkucmVhZF9hbGFybQk9IHJzNWNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtCT0gcnM1Y19zZXRfYWxhcm0sCiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfU1lTRlMpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1NZU0ZTX01PRFVMRSkKKwogc3RhdGljIHNzaXplX3QgcnM1YzM3Ml9zeXNmc19zaG93X3RyaW0oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0xNzIsNyArNDUyLDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMnhcbiIsIHRyaW0pOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0cmltKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih0cmltLCBTX0lSVUdPLCByczVjMzcyX3N5c2ZzX3Nob3dfdHJpbSwgTlVMTCk7CiAKQEAgLTE4OSwxOCArNDY5LDM3IEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFIob3NjLCBTX0lSVUdPLCByczVjMzcyX3N5c2ZzX3Nob3dfb3NjLCBOVUxMKTsKIAotc3RhdGljIGludCByczVjMzcyX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHJzNWNfc3lzZnNfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgcnM1YzM3Ml9wcm9iZSk7CisJaW50IGVycjsKKworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90cmltKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9vc2MpOworCWlmIChlcnIpCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90cmltKTsKKworCXJldHVybiBlcnI7CiB9CiAKKyNlbHNlCitzdGF0aWMgaW50IHJzNWNfc3lzZnNfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorI2VuZGlmCS8qIFNZU0ZTICovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciByczVjMzcyX2RyaXZlcjsKKwogc3RhdGljIGludCByczVjMzcyX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHJzNWMzNzIgKnJzNWMzNzI7CisJc3RydWN0IHJ0Y190aW1lIHRtOwogCi0JZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGV2X2RiZyhhZGFwdGVyLT5jbGFzc19kZXYuZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKIAkJZXJyID0gLUVOT0RFVjsKQEAgLTIxMSw3ICs1MTAsMTUgQEAKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0OwogCX0KLQljbGllbnQgPSAmcnM1YzM3Mi0+Y2xpZW50OworCisJLyogd2UgcmVhZCByZWdpc3RlcnMgMHgwZiB0aGVuIDB4MDAtMHgwZjsgc2tpcCB0aGUgZmlyc3Qgb25lICovCisJcnM1YzM3Mi0+cmVncz0mcnM1YzM3Mi0+YnVmWzFdOworCisJLyogT24gY29udmVyc2lvbiB0byBhICJuZXcgc3R5bGUiIGkyYyBkcml2ZXIsIHdlJ2xsIGJlIGhhbmRlZAorCSAqIHRoZSBpMmNfY2xpZW50ICh3ZSB3b24ndCBjcmVhdGUgaXQpCisJICovCisJY2xpZW50ID0gJnJzNWMzNzItPmRldjsKKwlyczVjMzcyLT5jbGllbnQgPSBjbGllbnQ7CiAKIAkvKiBJMkMgY2xpZW50ICovCiAJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKQEAgLTIyMiwxNiArNTI5LDk5IEBACiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCByczVjMzcyKTsKIAotCXJzNWMzNzItPm1zZ1swXS5hZGRyID0gYWRkcmVzczsKLQlyczVjMzcyLT5tc2dbMF0uZmxhZ3MgPSBJMkNfTV9SRDsKLQlyczVjMzcyLT5tc2dbMF0ubGVuID0gc2l6ZW9mKHJzNWMzNzItPnJlZ3MpOwotCXJzNWMzNzItPm1zZ1swXS5idWYgPSByczVjMzcyLT5yZWdzOwotCiAJLyogSW5mb3JtIHRoZSBpMmMgbGF5ZXIgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlnb3RvIGV4aXRfa2ZyZWU7CiAKLQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJjaGlwIGZvdW5kLCBkcml2ZXIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOworCWVyciA9IHJzNWNfZ2V0X3JlZ3MocnM1YzM3Mik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXhpdF9kZXRhY2g7CisKKwkvKiBGb3IgIm5ldyBzdHlsZSIgZHJpdmVycywgaXJxIGlzIGluIGkyY19jbGllbnQgYW5kIGNoaXAgdHlwZQorCSAqIGluZm8gY29tZXMgZnJvbSBpMmNfY2xpZW50LmRldi5wbGF0Zm9ybV9kYXRhLiAgTWVhbndoaWxlOgorCSAqCisJICogU1RJQ0sgQk9BUkQtU1BFQ0lGSUMgU0VUVVAgQ09ERSBSSUdIVCBIRVJFCisJICovCisJaWYgKHJzNWMzNzItPnR5cGUgPT0gcnRjX3VuZGVmKSB7CisJCXJzNWMzNzItPnR5cGUgPSBydGNfcnM1YzM3MmI7CisJCWRldl93YXJuKCZjbGllbnQtPmRldiwgImFzc3VtaW5nIHJzNWMzNzJiXG4iKTsKKwl9CisKKwkvKiBjbG9jayBtYXkgYmUgc2V0IGZvciBhbS9wbSBvciAyNCBociB0aW1lICovCisJc3dpdGNoIChyczVjMzcyLT50eXBlKSB7CisJY2FzZSBydGNfcnM1YzM3MmE6CisJY2FzZSBydGNfcnM1YzM3MmI6CisJCS8qIGFsYXJtIHVzZXMgQUxBUk1fQTsgYW5kIG5JTlRSQSBvbiAzNzJhLCBuSU5UUiBvbiAzNzJiLgorCQkgKiBzbyBkb2VzIHBlcmlvZGljIGlycSwgZXhjZXB0IHNvbWUgMzI3YSBtb2Rlcy4KKwkJICovCisJCWlmIChyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSAmIFJTNUMzNzJfQ1RSTDJfMjQpCisJCQlyczVjMzcyLT50aW1lMjQgPSAxOworCQlicmVhazsKKwljYXNlIHJ0Y19ydjVjMzg2OgorCWNhc2UgcnRjX3J2NWMzODdhOgorCQlpZiAocnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMV0gJiBSVjVDMzg3X0NUUkwxXzI0KQorCQkJcnM1YzM3Mi0+dGltZTI0ID0gMTsKKwkJLyogYWxhcm0gdXNlcyBBTEFSTV9XOyBhbmQgbklOVFJCIGZvciBhbGFybSBhbmQgcGVyaW9kaWMKKwkJICogaXJxLCBvbiBib3RoIDM4NiBhbmQgMzg3CisJCSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInVua25vd24gUlRDIHR5cGVcbiIpOworCQlnb3RvIGV4aXRfZGV0YWNoOworCX0KKworCS8qIGlmIHRoZSBvc2NpbGxhdG9yIGxvc3QgcG93ZXIgYW5kIG5vIG90aGVyIHNvZnR3YXJlIChsaWtlCisJICogdGhlIGJvb3Rsb2FkZXIpIHNldCBpdCB1cCwgZG8gaXQgaGVyZS4KKwkgKi8KKwlpZiAocnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gJiBSUzVDX0NUUkwyX1hTVFApIHsKKwkJdW5zaWduZWQgY2hhciBidWZbM107CisKKwkJcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gJj0gflJTNUNfQ1RSTDJfWFNUUDsKKworCQlidWZbMF0gPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOworCQlidWZbMV0gPSByczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwxXTsKKwkJYnVmWzJdID0gcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl07CisKKwkJLyogdXNlIDI0aHIgbW9kZSAqLworCQlzd2l0Y2ggKHJzNWMzNzItPnR5cGUpIHsKKwkJY2FzZSBydGNfcnM1YzM3MmE6CisJCWNhc2UgcnRjX3JzNWMzNzJiOgorCQkJYnVmWzJdIHw9IFJTNUMzNzJfQ1RSTDJfMjQ7CisJCQlyczVjMzcyLT50aW1lMjQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgcnRjX3J2NWMzODY6CisJCWNhc2UgcnRjX3J2NWMzODdhOgorCQkJYnVmWzFdIHw9IFJWNUMzODdfQ1RSTDFfMjQ7CisJCQlyczVjMzcyLT50aW1lMjQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBpbXBvc3NpYmxlICovCisJCQlicmVhazsKKwkJfQorCisJCWlmICgoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAzKSkgIT0gMykgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJzZXR1cCBlcnJvclxuIik7CisJCQlnb3RvIGV4aXRfZGV0YWNoOworCQl9CisJCXJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmWzFdOworCQlyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSA9IGJ1ZlsyXTsKKwl9CisKKwlpZiAocnM1YzM3Ml9nZXRfZGF0ZXRpbWUoY2xpZW50LCAmdG0pIDwgMCkKKwkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiY2xvY2sgbmVlZHMgdG8gYmUgc2V0XG4iKTsKKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIiVzIGZvdW5kLCAlcywgZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iLAorCQkJKHsgY2hhciAqczsgc3dpdGNoIChyczVjMzcyLT50eXBlKSB7CisJCQljYXNlIHJ0Y19yczVjMzcyYToJcyA9ICJyczVjMzcyYSI7IGJyZWFrOworCQkJY2FzZSBydGNfcnM1YzM3MmI6CXMgPSAicnM1YzM3MmIiOyBicmVhazsKKwkJCWNhc2UgcnRjX3J2NWMzODY6CXMgPSAicnY1YzM4NiI7IGJyZWFrOworCQkJY2FzZSBydGNfcnY1YzM4N2E6CXMgPSAicnY1YzM4N2EiOyBicmVhazsKKwkJCWRlZmF1bHQ6CQlzID0gImNoaXAiOyBicmVhazsKKwkJCX07IHM7fSksCisJCQlyczVjMzcyLT50aW1lMjQgPyAiMjRociIgOiAiYW0vcG0iCisJCQkpOworCisJLyogRklYTUUgd2hlbiBjbGllbnQtPmlycSBleGlzdHMsIHVzZSBpdCB0byByZWdpc3RlciBhbGFybSBpcnEgKi8KIAogCXJzNWMzNzItPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocnM1YzM3Ml9kcml2ZXIuZHJpdmVyLm5hbWUsCiAJCQkJJmNsaWVudC0+ZGV2LCAmcnM1YzM3Ml9ydGNfb3BzLCBUSElTX01PRFVMRSk7CkBAIC0yNDEsMTggKzYzMSwxMiBAQAogCQlnb3RvIGV4aXRfZGV0YWNoOwogCX0KIAotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90cmltKTsKKwllcnIgPSByczVjX3N5c2ZzX3JlZ2lzdGVyKCZjbGllbnQtPmRldik7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2RldnJlZzsKLQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfb3NjKTsKLQlpZiAoZXJyKQotCQlnb3RvIGV4aXRfdHJpbTsKIAogCXJldHVybiAwOwogCi1leGl0X3RyaW06Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3RyaW0pOwotCiBleGl0X2RldnJlZzoKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnM1YzM3Mi0+cnRjKTsKIApAQCAtMjY2LDYgKzY1MCwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgcnM1YzM3Ml9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgcnM1YzM3Ml9wcm9iZSk7Cit9CisKIHN0YXRpYyBpbnQgcnM1YzM3Ml9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpbnQgZXJyOwpAQCAtMjc0LDYgKzY2Myw4IEBACiAJaWYgKHJzNWMzNzItPnJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJzNWMzNzItPnJ0Yyk7CiAKKwkvKiBSRVZJU0lUIHByb3Blcmx5IGRlc3Ryb3kgdGhlIHN5c2ZzIGZpbGVzIC4uLiAqLworCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKIApAQCAtMjgxLDYgKzY3MiwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnM1YzM3Ml9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInJ0Yy1yczVjMzcyIiwKKwl9LAorCS5hdHRhY2hfYWRhcHRlcgk9ICZyczVjMzcyX2F0dGFjaCwKKwkuZGV0YWNoX2NsaWVudAk9ICZyczVjMzcyX2RldGFjaCwKK307CisKIHN0YXRpYyBfX2luaXQgaW50IHJzNWMzNzJfaW5pdCh2b2lkKQogewogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmcnM1YzM3Ml9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jIGIvZHJpdmVycy9ydGMvcnRjLXMzYy5jCmluZGV4IGUzMDFkZWEuLmY0MDZhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKQEAgLTE5MSw2ICsxOTEsOCBAQAogCiAJYWxtX2VuID0gcmVhZGIoYmFzZSArIFMzQzI0MTBfUlRDQUxNKTsKIAorCWFscm0tPmVuYWJsZWQgPSAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fQUxNRU4pID8gMSA6IDA7CisKIAlwcl9kZWJ1ZygicmVhZCBhbGFybSAlMDJ4ICUwMnguJTAyeC4lMDJ4ICUwMngvJTAyeC8lMDJ4XG4iLAogCQkgYWxtX2VuLAogCQkgYWxtX3RtLT50bV95ZWFyLCBhbG1fdG0tPnRtX21vbiwgYWxtX3RtLT50bV9tZGF5LApAQCAtMzMxLDEyICszMzMsOCBAQAogCiBzdGF0aWMgaW50IHMzY19ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewotCXVuc2lnbmVkIGludCBydGNhbG0gPSByZWFkYihzM2NfcnRjX2Jhc2UgKyBTM0MyNDEwX1JUQ0FMTSk7CiAJdW5zaWduZWQgaW50IHRpY250ID0gcmVhZGIoczNjX3J0Y19iYXNlICsgUzNDMjQxMF9USUNOVCk7CiAKLQlzZXFfcHJpbnRmKHNlcSwgImFsYXJtX0lSUVx0OiAlc1xuIiwKLQkJICAgKHJ0Y2FsbSAmIFMzQzI0MTBfUlRDQUxNX0FMTUVOKSA/ICJ5ZXMiIDogIm5vIiApOwotCiAJc2VxX3ByaW50ZihzZXEsICJwZXJpb2RpY19JUlFcdDogJXNcbiIsCiAJCSAgICAgKHRpY250ICYgUzNDMjQxMF9USUNOVF9FTkFCTEUpID8gInllcyIgOiAibm8iICk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCBiZDRkN2QxLi45YzhlYWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0yODksOSArMjg5LDcgQEAKIAogc3RhdGljIGludCBzYTExMDBfcnRjX3Byb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKLQlzZXFfcHJpbnRmKHNlcSwgInRyaW0vZGl2aWRlclx0OiAweCUwOGx4XG4iLCBSVFRSKTsKLQlzZXFfcHJpbnRmKHNlcSwgImFsYXJtX0lSUVx0OiAlc1xuIiwKLQkJCShSVFNSICYgUlRTUl9BTEUpID8gInllcyIgOiAibm8iICk7CisJc2VxX3ByaW50ZihzZXEsICJ0cmltL2RpdmlkZXJcdDogMHglMDh4XG4iLCAodTMyKSBSVFRSKTsKIAlzZXFfcHJpbnRmKHNlcSwgInVwZGF0ZV9JUlFcdDogJXNcbiIsCiAJCQkoUlRTUiAmIFJUU1JfSFpFKSA/ICJ5ZXMiIDogIm5vIik7CiAJc2VxX3ByaW50ZihzZXEsICJwZXJpb2RpY19JUlFcdDogJXNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc2guYyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCmluZGV4IDE0MzMwMmEuLjE5OGI5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCkBAIC0yLDYgKzIsNyBAQAogICogU3VwZXJIIE9uLUNoaXAgUlRDIFN1cHBvcnQKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwNiAgSmFtaWUgTGVuZWhhbgogICoKICAqIEJhc2VkIG9uIHRoZSBvbGQgYXJjaC9zaC9rZXJuZWwvY3B1L3J0Yy5jIGJ5OgogICoKQEAgLTIxLDcgKzIyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNkZWZpbmUgRFJWX05BTUUJInNoLXJ0YyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMS4yIgogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDMKICNkZWZpbmUgcnRjX3JlZ19zaXplCQlzaXplb2YodTE2KQpAQCAtMzMsMjIgKzM3LDI2IEBACiAKICNkZWZpbmUgUlRDX1JFRyhyKQkoKHIpICogcnRjX3JlZ19zaXplKQogCi0jZGVmaW5lIFI2NENOVCAgCVJUQ19SRUcoMCkKLSNkZWZpbmUgUlNFQ0NOVCAJUlRDX1JFRygxKQotI2RlZmluZSBSTUlOQ05UIAlSVENfUkVHKDIpCi0jZGVmaW5lIFJIUkNOVCAgCVJUQ19SRUcoMykKLSNkZWZpbmUgUldLQ05UICAJUlRDX1JFRyg0KQotI2RlZmluZSBSREFZQ05UIAlSVENfUkVHKDUpCi0jZGVmaW5lIFJNT05DTlQgCVJUQ19SRUcoNikKLSNkZWZpbmUgUllSQ05UICAJUlRDX1JFRyg3KQotI2RlZmluZSBSU0VDQVIgIAlSVENfUkVHKDgpCi0jZGVmaW5lIFJNSU5BUiAgCVJUQ19SRUcoOSkKLSNkZWZpbmUgUkhSQVIgICAJUlRDX1JFRygxMCkKLSNkZWZpbmUgUldLQVIgICAJUlRDX1JFRygxMSkKLSNkZWZpbmUgUkRBWUFSICAJUlRDX1JFRygxMikKLSNkZWZpbmUgUk1PTkFSICAJUlRDX1JFRygxMykKLSNkZWZpbmUgUkNSMSAgICAJUlRDX1JFRygxNCkKLSNkZWZpbmUgUkNSMiAgICAJUlRDX1JFRygxNSkKKyNkZWZpbmUgUjY0Q05UCQlSVENfUkVHKDApCisKKyNkZWZpbmUgUlNFQ0NOVAkJUlRDX1JFRygxKQkvKiBSVEMgc2VjICovCisjZGVmaW5lIFJNSU5DTlQJCVJUQ19SRUcoMikJLyogUlRDIG1pbiAqLworI2RlZmluZSBSSFJDTlQJCVJUQ19SRUcoMykJLyogUlRDIGhvdXIgKi8KKyNkZWZpbmUgUldLQ05UCQlSVENfUkVHKDQpCS8qIFJUQyB3ZWVrICovCisjZGVmaW5lIFJEQVlDTlQJCVJUQ19SRUcoNSkJLyogUlRDIGRheSAqLworI2RlZmluZSBSTU9OQ05UCQlSVENfUkVHKDYpCS8qIFJUQyBtb250aCAqLworI2RlZmluZSBSWVJDTlQJCVJUQ19SRUcoNykJLyogUlRDIHllYXIgKi8KKyNkZWZpbmUgUlNFQ0FSCQlSVENfUkVHKDgpCS8qIEFMQVJNIHNlYyAqLworI2RlZmluZSBSTUlOQVIJCVJUQ19SRUcoOSkJLyogQUxBUk0gbWluICovCisjZGVmaW5lIFJIUkFSCQlSVENfUkVHKDEwKQkvKiBBTEFSTSBob3VyICovCisjZGVmaW5lIFJXS0FSCQlSVENfUkVHKDExKQkvKiBBTEFSTSB3ZWVrICovCisjZGVmaW5lIFJEQVlBUgkJUlRDX1JFRygxMikJLyogQUxBUk0gZGF5ICovCisjZGVmaW5lIFJNT05BUgkJUlRDX1JFRygxMykJLyogQUxBUk0gbW9udGggKi8KKyNkZWZpbmUgUkNSMQkJUlRDX1JFRygxNCkJLyogQ29udHJvbCAqLworI2RlZmluZSBSQ1IyCQlSVENfUkVHKDE1KQkvKiBDb250cm9sICovCisKKy8qIEFMQVJNIEJpdHMgLSBvciB3aXRoIEJDRCBlbmNvZGVkIHZhbHVlICovCisjZGVmaW5lIEFSX0VOQgkJMHg4MAkvKiBFbmFibGUgZm9yIGFsYXJtIGNtcCAgICovCiAKIC8qIFJDUjEgQml0cyAqLwogI2RlZmluZSBSQ1IxX0NGCQkweDgwCS8qIENhcnJ5IEZsYWcgICAgICAgICAgICAgKi8KQEAgLTcxLDIyICs3OSwyOCBAQAogCXVuc2lnbmVkIGludCBhbGFybV9pcnEsIHBlcmlvZGljX2lycSwgY2FycnlfaXJxOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2OwogCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgcmVhcm1fYWllOwogfTsKIAotc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqaWQpCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGlkOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2X2lkKTsKIAlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl1bnNpZ25lZCBpbnQgdG1wLCBldmVudHMgPSAwOwogCiAJc3Bpbl9sb2NrKCZydGMtPmxvY2spOwogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CisJdG1wICY9IH5SQ1IxX0NGOwogCi0JaWYgKHRtcCAmIFJDUjFfQUYpCi0JCWV2ZW50cyB8PSBSVENfQUYgfCBSVENfSVJRRjsKLQotCXRtcCAmPSB+KFJDUjFfQ0YgfCBSQ1IxX0FGKTsKKwlpZiAocnRjLT5yZWFybV9haWUpIHsKKwkJaWYgKHRtcCAmIFJDUjFfQUYpCisJCQl0bXAgJj0gflJDUjFfQUY7CS8qIHRyeSB0byBjbGVhciBBRiBhZ2FpbiAqLworCQllbHNlIHsKKwkJCXRtcCB8PSBSQ1IxX0FJRTsJLyogQUYgaGFzIGNsZWFyZWQsIHJlYXJtIElSUSAqLworCQkJcnRjLT5yZWFybV9haWUgPSAwOworCQl9CisJfQogCiAJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CiAKQEAgLTk3LDkgKzExMSw0NSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19wZXJpb2RpYyhpbnQgaXJxLCB2b2lkICppZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfYWxhcm0oaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShpZCk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZfaWQpOworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIGludCB0bXAsIGV2ZW50cyA9IDA7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisKKwl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKworCS8qCisJICogSWYgQUYgaXMgc2V0IHRoZW4gdGhlIGFsYXJtIGhhcyB0cmlnZ2VyZWQuIElmIHdlIGNsZWFyIEFGIHdoaWxlCisJICogdGhlIGFsYXJtIHRpbWUgc3RpbGwgbWF0Y2hlcyB0aGUgUlRDIHRpbWUgdGhlbiBBRiB3aWxsCisJICogaW1tZWRpYXRlbHkgYmUgc2V0IGFnYWluLCBhbmQgaWYgQUlFIGlzIGVuYWJsZWQgdGhlbiB0aGUgYWxhcm0KKwkgKiBpbnRlcnJ1cHQgd2lsbCBpbW1lZGlhdGVseSBiZSByZXRyaWdnZXIuIFNvIHdlIGNsZWFyIEFJRSBoZXJlCisJICogYW5kIHVzZSBydGMtPnJlYXJtX2FpZSBzbyB0aGF0IHRoZSBjYXJyeSBpbnRlcnJ1cHQgd2lsbCBrZWVwCisJICogdHJ5aW5nIHRvIGNsZWFyIEFGIGFuZCBvbmNlIGl0IHN0YXlzIGNsZWFyZWQgaXQnbGwgcmUtZW5hYmxlCisJICogQUlFLgorCSAqLworCWlmICh0bXAgJiBSQ1IxX0FGKSB7CisJCWV2ZW50cyB8PSBSVENfQUYgfCBSVENfSVJRRjsKKworCQl0bXAgJj0gfihSQ1IxX0FGfFJDUjFfQUlFKTsKKworCQl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKworCQlydGMtPnJlYXJtX2FpZSA9IDE7CisKKwkJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+cnRjX2Rldi0+Y2xhc3NfZGV2LCAxLCBldmVudHMpOworCX0KKworCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19wZXJpb2RpYyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZfaWQpOworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJc3Bpbl9sb2NrKCZydGMtPmxvY2spOwogCkBAIC0xMzksMTAgKzE4OSwxMSBAQAogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CiAKLQlpZiAoZW5hYmxlKQotCQl0bXAgfD0gUkNSMV9BSUU7Ci0JZWxzZQorCWlmICghZW5hYmxlKSB7CiAJCXRtcCAmPSB+UkNSMV9BSUU7CisJCXJ0Yy0+cmVhcm1fYWllID0gMDsKKwl9IGVsc2UgaWYgKHJ0Yy0+cmVhcm1fYWllID09IDApCisJCXRtcCB8PSBSQ1IxX0FJRTsKIAogCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwogCkBAIC0xNzcsNyArMjI4LDcgQEAKIAkJZ290byBlcnJfYmFkX2NhcnJ5OwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+YWxhcm1faXJxLCBzaF9ydGNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAorCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+YWxhcm1faXJxLCBzaF9ydGNfYWxhcm0sIElSUUZfRElTQUJMRUQsCiAJCQkgICJzaC1ydGMgYWxhcm0iLCBkZXYpOwogCWlmICh1bmxpa2VseShyZXQpKSB7CiAJCWRldl9lcnIoZGV2LCAicmVxdWVzdCBhbGFybSBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwKQEAgLTIwMCw2ICsyNTEsNyBAQAogCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc2hfcnRjX3NldHBpZShkZXYsIDApOworCXNoX3J0Y19zZXRhaWUoZGV2LCAwKTsKIAogCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBkZXYpOwogCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBkZXYpOwpAQCAtMjEyLDggKzI2NCw2IEBACiAJdW5zaWduZWQgaW50IHRtcDsKIAogCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwotCXNlcV9wcmludGYoc2VxLCAiYWxhcm1fSVJRXHQ6ICVzXG4iLAotCQkgICAodG1wICYgUkNSMV9BSUUpID8gInllcyIgOiAibm8iKTsKIAlzZXFfcHJpbnRmKHNlcSwgImNhcnJ5X0lSUVx0OiAlc1xuIiwKIAkJICAgKHRtcCAmIFJDUjFfQ0lFKSA/ICJ5ZXMiIDogIm5vIik7CiAKQEAgLTI2Nyw3ICszMTcsNyBAQAogCQl0bS0+dG1faG91cgk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUkhSQ05UKSk7CiAJCXRtLT50bV93ZGF5CT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSV0tDTlQpKTsKIAkJdG0tPnRtX21kYXkJPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJEQVlDTlQpKTsKLQkJdG0tPnRtX21vbgk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUk1PTkNOVCkpOworCQl0bS0+dG1fbW9uCT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSTU9OQ05UKSkgLSAxOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKIAkJeXIgID0gcmVhZHcocnRjLT5yZWdiYXNlICsgUllSQ05UKTsKQEAgLTI5NSw3ICszNDUsNyBAQAogCQkibWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLAogCQlfX0ZVTkNUSU9OX18sCiAJCXRtLT50bV9zZWMsIHRtLT50bV9taW4sIHRtLT50bV9ob3VyLAotCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKKwkJdG0tPnRtX21kYXksIHRtLT50bV9tb24gKyAxLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCiAJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKQogCQlkZXZfZXJyKGRldiwgImludmFsaWQgZGF0ZVxuIik7CkBAIC0zMjIsNyArMzcyLDcgQEAKIAl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIHJ0Yy0+cmVnYmFzZSArIFJIUkNOVCk7CiAJd3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpLCBydGMtPnJlZ2Jhc2UgKyBSV0tDTlQpOwogCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgcnRjLT5yZWdiYXNlICsgUkRBWUNOVCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiksICBydGMtPnJlZ2Jhc2UgKyBSTU9OQ05UKTsKKwl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIHJ0Yy0+cmVnYmFzZSArIFJNT05DTlQpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDMKIAl5ZWFyID0gdG0tPnRtX3llYXIgJSAxMDA7CkBAIC0zNDQsMTIgKzM5NCwxNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2hfcnRjX3JlYWRfYWxhcm1fdmFsdWUoc3RydWN0IHNoX3J0YyAqcnRjLCBpbnQgcmVnX29mZikKK3sKKwl1bnNpZ25lZCBpbnQgYnl0ZTsKKwlpbnQgdmFsdWUgPSAweGZmOwkvKiByZXR1cm4gMHhmZiBmb3IgaWdub3JlZCB2YWx1ZXMgKi8KKworCWJ5dGUgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyByZWdfb2ZmKTsKKwlpZiAoYnl0ZSAmIEFSX0VOQikgeworCQlieXRlICY9IH5BUl9FTkI7CS8qIHN0cmlwIHRoZSBlbmFibGUgYml0ICovCisJCXZhbHVlID0gQkNEMkJJTihieXRlKTsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgc2hfcnRjX3JlYWRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqd2thbHJtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcnRjX3RpbWUqIHRtID0gJndrYWxybS0+dGltZTsKKworCXNwaW5fbG9ja19pcnEoJnJ0Yy0+bG9jayk7CisKKwl0bS0+dG1fc2VjCT0gc2hfcnRjX3JlYWRfYWxhcm1fdmFsdWUocnRjLCBSU0VDQVIpOworCXRtLT50bV9taW4JPSBzaF9ydGNfcmVhZF9hbGFybV92YWx1ZShydGMsIFJNSU5BUik7CisJdG0tPnRtX2hvdXIJPSBzaF9ydGNfcmVhZF9hbGFybV92YWx1ZShydGMsIFJIUkFSKTsKKwl0bS0+dG1fd2RheQk9IHNoX3J0Y19yZWFkX2FsYXJtX3ZhbHVlKHJ0YywgUldLQVIpOworCXRtLT50bV9tZGF5CT0gc2hfcnRjX3JlYWRfYWxhcm1fdmFsdWUocnRjLCBSREFZQVIpOworCXRtLT50bV9tb24JPSBzaF9ydGNfcmVhZF9hbGFybV92YWx1ZShydGMsIFJNT05BUik7CisJaWYgKHRtLT50bV9tb24gPiAwKQorCQl0bS0+dG1fbW9uIC09IDE7IC8qIFJUQyBpcyAxLTEyLCB0bV9tb24gaXMgMC0xMSAqLworCXRtLT50bV95ZWFyICAgICA9IDB4ZmZmZjsKKworCXdrYWxybS0+ZW5hYmxlZCA9IChyZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKSAmIFJDUjFfQUlFKSA/IDEgOiAwOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF9ydGNfd3JpdGVfYWxhcm1fdmFsdWUoc3RydWN0IHNoX3J0YyAqcnRjLAorCQkJCQkgICAgaW50IHZhbHVlLCBpbnQgcmVnX29mZikKK3sKKwkvKiA8IDAgZm9yIGEgdmFsdWUgdGhhdCBpcyBpZ25vcmVkICovCisJaWYgKHZhbHVlIDwgMCkKKwkJd3JpdGViKDAsIHJ0Yy0+cmVnYmFzZSArIHJlZ19vZmYpOworCWVsc2UKKwkJd3JpdGViKEJJTjJCQ0QodmFsdWUpIHwgQVJfRU5CLCAgcnRjLT5yZWdiYXNlICsgcmVnX29mZik7Cit9CisKK3N0YXRpYyBpbnQgc2hfcnRjX2NoZWNrX2FsYXJtKHN0cnVjdCBydGNfdGltZSogdG0pCit7CisJLyoKKwkgKiBUaGUgb3JpZ2luYWwgcnRjIHNheXMgYW55dGhpbmcgPiAweGMwIGlzICJkb24ndCBjYXJlIiBvciAibWF0Y2gKKwkgKiBhbGwiIC0gbW9zdCB1c2VycyB1c2UgMHhmZiBidXQgcnRjLWRldiB1c2VzIC0xIGZvciB0aGUgc2FtZSB0aGluZy4KKwkgKiBUaGUgb3JpZ2luYWwgcnRjIGRvZXNuJ3Qgc3VwcG9ydCB5ZWFycyAtIHNvbWUgdGhpbmdzIHVzZSAtMSBhbmQKKwkgKiBzb21lIDB4ZmZmZi4gV2UgdXNlIC0xIHRvIG1ha2Ugb3V0IHRlc3RzIGVhc2llci4KKwkgKi8KKwlpZiAodG0tPnRtX3llYXIgPT0gMHhmZmZmKQorCQl0bS0+dG1feWVhciA9IC0xOworCWlmICh0bS0+dG1fbW9uID49IDB4ZmYpCisJCXRtLT50bV9tb24gPSAtMTsKKwlpZiAodG0tPnRtX21kYXkgPj0gMHhmZikKKwkJdG0tPnRtX21kYXkgPSAtMTsKKwlpZiAodG0tPnRtX3dkYXkgPj0gMHhmZikKKwkJdG0tPnRtX3dkYXkgPSAtMTsKKwlpZiAodG0tPnRtX2hvdXIgPj0gMHhmZikKKwkJdG0tPnRtX2hvdXIgPSAtMTsKKwlpZiAodG0tPnRtX21pbiA+PSAweGZmKQorCQl0bS0+dG1fbWluID0gLTE7CisJaWYgKHRtLT50bV9zZWMgPj0gMHhmZikKKwkJdG0tPnRtX3NlYyA9IC0xOworCisJaWYgKHRtLT50bV95ZWFyID4gOTk5OSB8fAorCQl0bS0+dG1fbW9uID49IDEyIHx8CisJCXRtLT50bV9tZGF5ID09IDAgfHwgdG0tPnRtX21kYXkgPj0gMzIgfHwKKwkJdG0tPnRtX3dkYXkgPj0gNyB8fAorCQl0bS0+dG1faG91ciA+PSAyNCB8fAorCQl0bS0+dG1fbWluID49IDYwIHx8CisJCXRtLT50bV9zZWMgPj0gNjApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICp3a2Fscm0pCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIGludCByY3IxOworCXN0cnVjdCBydGNfdGltZSAqdG0gPSAmd2thbHJtLT50aW1lOworCWludCBtb24sIGVycjsKKworCWVyciA9IHNoX3J0Y19jaGVja19hbGFybSh0bSk7CisJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQlyZXR1cm4gZXJyOworCisJc3Bpbl9sb2NrX2lycSgmcnRjLT5sb2NrKTsKKworCS8qIGRpc2FibGUgYWxhcm0gaW50ZXJydXB0IGFuZCBjbGVhciB0aGUgYWxhcm0gZmxhZyAqLworCXJjcjEgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKwlyY3IxICY9IH4oUkNSMV9BRnxSQ1IxX0FJRSk7CisJd3JpdGViKHJjcjEsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCisJcnRjLT5yZWFybV9haWUgPSAwOworCisJLyogc2V0IGFsYXJtIHRpbWUgKi8KKwlzaF9ydGNfd3JpdGVfYWxhcm1fdmFsdWUocnRjLCB0bS0+dG1fc2VjLCAgUlNFQ0FSKTsKKwlzaF9ydGNfd3JpdGVfYWxhcm1fdmFsdWUocnRjLCB0bS0+dG1fbWluLCAgUk1JTkFSKTsKKwlzaF9ydGNfd3JpdGVfYWxhcm1fdmFsdWUocnRjLCB0bS0+dG1faG91ciwgUkhSQVIpOworCXNoX3J0Y193cml0ZV9hbGFybV92YWx1ZShydGMsIHRtLT50bV93ZGF5LCBSV0tBUik7CisJc2hfcnRjX3dyaXRlX2FsYXJtX3ZhbHVlKHJ0YywgdG0tPnRtX21kYXksIFJEQVlBUik7CisJbW9uID0gdG0tPnRtX21vbjsKKwlpZiAobW9uID49IDApCisJCW1vbiArPSAxOworCXNoX3J0Y193cml0ZV9hbGFybV92YWx1ZShydGMsIG1vbiwgUk1PTkFSKTsKKworCWlmICh3a2Fscm0tPmVuYWJsZWQpIHsKKwkJcmNyMSB8PSBSQ1IxX0FJRTsKKwkJd3JpdGViKHJjcjEsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgc2hfcnRjX29wcyA9IHsKIAkub3BlbgkJPSBzaF9ydGNfb3BlbiwKIAkucmVsZWFzZQk9IHNoX3J0Y19yZWxlYXNlLAogCS5pb2N0bAkJPSBzaF9ydGNfaW9jdGwsCiAJLnJlYWRfdGltZQk9IHNoX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gc2hfcnRjX3NldF90aW1lLAorCS5yZWFkX2FsYXJtCT0gc2hfcnRjX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybQk9IHNoX3J0Y19zZXRfYWxhcm0sCiAJLnByb2MJCT0gc2hfcnRjX3Byb2MsCiB9OwogCkBAIC00NDIsNyArNjIwLDcgQEAKIH0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX3J0Y19wbGF0Zm9ybV9kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gInNoLXJ0YyIsCisJCS5uYW1lCT0gRFJWX05BTUUsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlCQk9IHNoX3J0Y19wcm9iZSwKQEAgLTQ2Myw1ICs2NDEsNiBAQAogbW9kdWxlX2V4aXQoc2hfcnRjX2V4aXQpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlN1cGVySCBvbi1jaGlwIFJUQyBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIlBhdWwgTXVuZHQgPGxldGhhbEBsaW51eC1zaC5vcmc+Iik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQVVUSE9SKCJQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPiwgSmFtaWUgTGVuZWhhbiA8bGVuZWhhbkB0d2liYmxlLm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zeXNmcy5jIGIvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKaW5kZXggNjI1NjM3Yi4uMmRkZDBjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKQEAgLTc4LDEyICs3OCwxMiBAQAogCS5hdHRycyA9IHJ0Y19hdHRycywKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHJ0Y19zeXNmc19hZGRfZGV2aWNlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwKK3N0YXRpYyBpbnQgcnRjX3N5c2ZzX2FkZF9kZXZpY2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LAogCQkJCQlzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICpjbGFzc19pbnRmKQogewogCWludCBlcnI7CiAKLQlkZXZfaW5mbyhjbGFzc19kZXYtPmRldiwgInJ0YyBpbnRmOiBzeXNmc1xuIik7CisJZGV2X2RiZyhjbGFzc19kZXYtPmRldiwgInJ0YyBpbnRmOiBzeXNmc1xuIik7CiAKIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsYXNzX2Rldi0+a29iaiwgJnJ0Y19hdHRyX2dyb3VwKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMgYi9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYwppbmRleCA5YTY3NDg3Li4wMTlhZTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYwpAQCAtMzcyLDcgKzM3Miw3IEBACiAJCX07CiAKIAkJaWYgKCh4ZmVyID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgMikpICE9IDIpIHsKLQkJCWRldl9lcnIoJmNsaWVudC0+YWRhcHRlci0+ZGV2LAorCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkJIiVzOiBjb3VsZCBub3QgcmVhZCByZWdpc3RlciAleFxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIHByb2JlX3plcm9fcGF0dGVybltpXSk7CiAKQEAgLTM4MCw3ICszODAsNyBAQAogCQl9CiAKIAkJaWYgKChidWYgJiBwcm9iZV96ZXJvX3BhdHRlcm5baSsxXSkgIT0gMCkgewotCQkJZGV2X2VycigmY2xpZW50LT5hZGFwdGVyLT5kZXYsCisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKIAkJCQkiJXM6IHJlZ2lzdGVyPSUwMngsIHplcm8gcGF0dGVybj0lZCwgdmFsdWU9JXhcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBwcm9iZV96ZXJvX3BhdHRlcm5baV0sIGksIGJ1Zik7CiAKQEAgLTQwMCw3ICs0MDAsNyBAQAogCQl9OwogCiAJCWlmICgoeGZlciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDIpKSAhPSAyKSB7Ci0JCQlkZXZfZXJyKCZjbGllbnQtPmFkYXB0ZXItPmRldiwKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJCSIlczogY291bGQgbm90IHJlYWQgcmVnaXN0ZXIgJXhcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBwcm9iZV9saW1pdHNfcGF0dGVybltpXS5yZWcpOwogCkBAIC00MTEsNyArNDExLDcgQEAKIAogCQlpZiAodmFsdWUgPiBwcm9iZV9saW1pdHNfcGF0dGVybltpXS5tYXggfHwKIAkJCXZhbHVlIDwgcHJvYmVfbGltaXRzX3BhdHRlcm5baV0ubWluKSB7Ci0JCQlkZXZfZGJnKCZjbGllbnQtPmFkYXB0ZXItPmRldiwKKwkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LAogCQkJCSIlczogcmVnaXN0ZXI9JXgsIGxpbSBwYXR0ZXJuPSVkLCB2YWx1ZT0lZFxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIHByb2JlX2xpbWl0c19wYXR0ZXJuW2ldLnJlZywKIAkJCQlpLCB2YWx1ZSk7CkBAIC01MDYsNyArNTA2LDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAKLQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkZXZfZGJnKGFkYXB0ZXItPmNsYXNzX2Rldi5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewogCQllcnIgPSAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggMmFmMmQ5Yi4uNDkyYjY4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0xMDUwLDEwICsxMDUwLDEwIEBACiAJCX0KIAl9IGVsc2UgewkJLyogZXJyb3IgKi8KIAkJbWVtY3B5KCZjcXItPmlyYiwgaXJiLCBzaXplb2YgKHN0cnVjdCBpcmIpKTsKLSNpZmRlZiBFUlBfREVCVUcKLQkJLyogZHVtcCBzZW5zZSBkYXRhICovCi0JCWRhc2RfbG9nX3NlbnNlKGNxciwgaXJiKTsKLSNlbmRpZgorCQlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9FUlBMT0cpIHsKKwkJCS8qIGR1bXAgc2Vuc2UgZGF0YSAqLworCQkJZGFzZF9sb2dfc2Vuc2UoY3FyLCBpcmIpOworCQl9CiAJCXN3aXRjaCAoZXJhKSB7CiAJCWNhc2UgZGFzZF9lcmFfZmF0YWw6CiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCmluZGV4IDY2OTgwNWQuLjRkMDEwNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwpAQCAtMjY0MSwxNCArMjY0MSwxMiBAQAogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmVycCA9IE5VTEw7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBjcXItPmRldmljZTsKIAlfX3UzMiBjcGEgPSBjcXItPmlyYi5zY3N3LmNwYTsKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxICp0ZW1wX2VycCA9IE5VTEw7CiAKLSNpZmRlZiBFUlBfREVCVUcKLQkvKiBwcmludCBjdXJyZW50IGVycF9jaGFpbiAqLwotCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsCi0JCSAgICAiRVJQIGNoYWluIGF0IEJFR0lOTklORyBvZiBFUlAtQUNUSU9OIik7Ci0JewotCQlzdHJ1Y3QgZGFzZF9jY3dfcmVxICp0ZW1wX2VycCA9IE5VTEw7Ci0KKwlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9FUlBMT0cpIHsKKwkJLyogcHJpbnQgY3VycmVudCBlcnBfY2hhaW4gKi8KKwkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwkJCSAgICAiRVJQIGNoYWluIGF0IEJFR0lOTklORyBvZiBFUlAtQUNUSU9OIik7CiAJCWZvciAodGVtcF9lcnAgPSBjcXI7CiAJCSAgICAgdGVtcF9lcnAgIT0gTlVMTDsgdGVtcF9lcnAgPSB0ZW1wX2VycC0+cmVmZXJzKSB7CiAKQEAgLTI2NTgsNyArMjY1Niw2IEBACiAJCQkJICAgIHRlbXBfZXJwLT5yZWZlcnMpOwogCQl9CiAJfQotI2VuZGlmCQkJCS8qIEVSUF9ERUJVRyAqLwogCiAJLyogZG91YmxlLWNoZWNrIGlmIGN1cnJlbnQgZXJwL2NxciB3YXMgc3VjY2Vzc2Z1bGwgKi8KIAlpZiAoKGNxci0+aXJiLnNjc3cuY3N0YXQgPT0gMHgwMCkgJiYKQEAgLTI2OTUsMTEgKzI2OTIsMTAgQEAKIAkJZXJwID0gZGFzZF8zOTkwX2VycF9oYW5kbGVfbWF0Y2hfZXJwKGNxciwgZXJwKTsKIAl9CiAKLSNpZmRlZiBFUlBfREVCVUcKLQkvKiBwcmludCBjdXJyZW50IGVycF9jaGFpbiAqLwotCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsICIlcyIsICJFUlAgY2hhaW4gYXQgRU5EIG9mIEVSUC1BQ1RJT04iKTsKLQl7Ci0JCXN0cnVjdCBkYXNkX2Njd19yZXEgKnRlbXBfZXJwID0gTlVMTDsKKwlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9FUlBMT0cpIHsKKwkJLyogcHJpbnQgY3VycmVudCBlcnBfY2hhaW4gKi8KKwkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwKKwkJCSAgICAiRVJQIGNoYWluIGF0IEVORCBvZiBFUlAtQUNUSU9OIik7CiAJCWZvciAodGVtcF9lcnAgPSBlcnA7CiAJCSAgICAgdGVtcF9lcnAgIT0gTlVMTDsgdGVtcF9lcnAgPSB0ZW1wX2VycC0+cmVmZXJzKSB7CiAKQEAgLTI3MDksNyArMjcwNSw2IEBACiAJCQkJICAgIHRlbXBfZXJwLT5yZWZlcnMpOwogCQl9CiAJfQotI2VuZGlmCQkJCS8qIEVSUF9ERUJVRyAqLwogCiAJaWYgKGVycC0+c3RhdHVzID09IERBU0RfQ1FSX0ZBSUxFRCkKIAkJZGFzZF9sb2dfY2N3KGVycCwgMSwgY3BhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKaW5kZXggY2YyOGNjYy4uNTk0MzI2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKQEAgLTIwMiw2ICsyMDIsOCBAQAogCQkJZmVhdHVyZXMgfD0gREFTRF9GRUFUVVJFX1JFQURPTkxZOwogCQllbHNlIGlmIChsZW4gPT0gNCAmJiAhc3RybmNtcChzdHIsICJkaWFnIiwgNCkpCiAJCQlmZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfVVNFRElBRzsKKwkJZWxzZSBpZiAobGVuID09IDYgJiYgIXN0cm5jbXAoc3RyLCAiZXJwbG9nIiwgNikpCisJCQlmZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfRVJQTE9HOwogCQllbHNlIHsKIAkJCU1FU1NBR0UoS0VSTl9XQVJOSU5HLAogCQkJCSJ1bnN1cHBvcnRlZCBmZWF0dXJlOiAlKnMsICIKQEAgLTcwOSw2ICs3MTEsNTIgQEAKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKHJlYWRvbmx5LCAwNjQ0LCBkYXNkX3JvX3Nob3csIGRhc2Rfcm9fc3RvcmUpOworLyoKKyAqIGVycGxvZyBjb250cm9scyB0aGUgbG9nZ2luZyBvZiBFUlAgcmVsYXRlZCBkYXRhCisgKiAoZS5nLiBmYWlsaW5nIGNoYW5uZWwgcHJvZ3JhbXMpLgorICovCitzdGF0aWMgc3NpemVfdAorZGFzZF9lcnBsb2dfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CisJaW50IGVycGxvZzsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChkZXYtPmJ1c19pZCk7CisJaWYgKCFJU19FUlIoZGV2bWFwKSkKKwkJZXJwbG9nID0gKGRldm1hcC0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRVJQTE9HKSAhPSAwOworCWVsc2UKKwkJZXJwbG9nID0gKERBU0RfRkVBVFVSRV9ERUZBVUxUICYgREFTRF9GRUFUVVJFX0VSUExPRykgIT0gMDsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsIGVycGxvZyA/ICIxXG4iIDogIjBcbiIpOworfQorCitzdGF0aWMgc3NpemVfdAorZGFzZF9lcnBsb2dfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKwlpbnQgdmFsOworCWNoYXIgKmVuZHA7CisKKwlkZXZtYXAgPSBkYXNkX2Rldm1hcF9mcm9tX2NkZXYodG9fY2N3ZGV2KGRldikpOworCWlmIChJU19FUlIoZGV2bWFwKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGV2bWFwKTsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOworCWlmICgoKGVuZHAgKyAxKSA8IChidWYgKyBjb3VudCkpIHx8ICh2YWwgPiAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCWlmICh2YWwpCisJCWRldm1hcC0+ZmVhdHVyZXMgfD0gREFTRF9GRUFUVVJFX0VSUExPRzsKKwllbHNlCisJCWRldm1hcC0+ZmVhdHVyZXMgJj0gfkRBU0RfRkVBVFVSRV9FUlBMT0c7CisJaWYgKGRldm1hcC0+ZGV2aWNlKQorCQlkZXZtYXAtPmRldmljZS0+ZmVhdHVyZXMgPSBkZXZtYXAtPmZlYXR1cmVzOworCXNwaW5fdW5sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihlcnBsb2csIDA2NDQsIGRhc2RfZXJwbG9nX3Nob3csIGRhc2RfZXJwbG9nX3N0b3JlKTsKIAogLyoKICAqIHVzZV9kaWFnIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGRyaXZlciBzaG91bGQgdXNlIGRpYWcgcmF0aGVyIHRoYW4gc3NjaApAQCAtODk2LDYgKzk0NCw3IEBACiAJJmRldl9hdHRyX3VpZC5hdHRyLAogCSZkZXZfYXR0cl91c2VfZGlhZy5hdHRyLAogCSZkZXZfYXR0cl9lZXJfZW5hYmxlZC5hdHRyLAorCSZkZXZfYXR0cl9lcnBsb2cuYXR0ciwKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCBkYzVkZDUwLi5mYjcyNWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtMTMsMTAgKzEzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotLyogZXJwIGRlYnVnZ2luZyBpbiBkYXNkLmMgYW5kIGRhc2RfMzk5MF9lcnAuYyAqLwotI2RlZmluZSBFUlBfREVCVUcKLQotCiAvKiB3ZSBrZWVwIG9sZCBkZXZpY2UgYWxsb2NhdGlvbiBzY2hlbWU7IElPVywgbWlub3JzIGFyZSBzdGlsbCBpbiAwLi4yNTUgKi8KICNkZWZpbmUgREFTRF9QRVJfTUFKT1IgKDFVIDw8IChNSU5PUkJJVFMgLSBEQVNEX1BBUlROX0JJVFMpKQogI2RlZmluZSBEQVNEX1BBUlROX01BU0sgKCgxIDw8IERBU0RfUEFSVE5fQklUUykgLSAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKaW5kZXggOGZlZDM2MC4uNzU4Y2ZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCkBAIC00MzAsNyArNDMwLDcgQEAKIAlpbnQgcnZhbDsKIAogCWxvY2tfa2VybmVsKCk7Ci0JcnZhbCA9IGRhc2RfaW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKKwlydmFsID0gZGFzZF9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxwLCBjbWQsIGFyZyk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIChydmFsID09IC1FSU5WQUwpID8gLUVOT0lPQ1RMQ01EIDogcnZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2NvbjMyMTUuYwppbmRleCBjOTMyMWI5Li4yNWI1ZDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jCkBAIC02ODgsNyArNjg4LDcgQEAKIAlyYXctPmNkZXYgPSBjZGV2OwogCXJhdy0+aW5idWYgPSAoY2hhciAqKSByYXcgKyBzaXplb2Yoc3RydWN0IHJhdzMyMTVfaW5mbyk7CiAJbWVtc2V0KHJhdywgMCwgc2l6ZW9mKHN0cnVjdCByYXczMjE1X2luZm8pKTsKLQlyYXctPmJ1ZmZlciA9IChjaGFyICopIGttYWxsb2MoUkFXMzIxNV9CVUZGRVJfU0laRSwKKwlyYXctPmJ1ZmZlciA9IGttYWxsb2MoUkFXMzIxNV9CVUZGRVJfU0laRSwKIAkJCQkgICAgICAgR0ZQX0tFUk5FTHxHRlBfRE1BKTsKIAlpZiAocmF3LT5idWZmZXIgPT0gTlVMTCkgewogCQlzcGluX2xvY2soJnJhdzMyMTVfZGV2aWNlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvY3RybGNoYXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2N0cmxjaGFyLmMKaW5kZXggNDllOTYyOC4uYzZjYmNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvY3RybGNoYXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9jdHJsY2hhci5jCkBAIC0xNiwxNCArMTYsMTUgQEAKIAogI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQogc3RhdGljIGludCBjdHJsY2hhcl9zeXNycV9rZXk7CitzdGF0aWMgc3RydWN0IHR0eV9zdHJ1Y3QgKnN5c3JxX3R0eTsKIAogc3RhdGljIHZvaWQKLWN0cmxjaGFyX2hhbmRsZV9zeXNycSh2b2lkICp0dHkpCitjdHJsY2hhcl9oYW5kbGVfc3lzcnEoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWhhbmRsZV9zeXNycShjdHJsY2hhcl9zeXNycV9rZXksIChzdHJ1Y3QgdHR5X3N0cnVjdCAqKSB0dHkpOworCWhhbmRsZV9zeXNycShjdHJsY2hhcl9zeXNycV9rZXksIHN5c3JxX3R0eSk7CiB9CiAKLXN0YXRpYyBERUNMQVJFX1dPUksoY3RybGNoYXJfd29yaywgY3RybGNoYXJfaGFuZGxlX3N5c3JxLCBOVUxMKTsKK3N0YXRpYyBERUNMQVJFX1dPUksoY3RybGNoYXJfd29yaywgY3RybGNoYXJfaGFuZGxlX3N5c3JxKTsKICNlbmRpZgogCiAKQEAgLTUzLDcgKzU0LDcgQEAKIAkvKiByYWN5ICovCiAJaWYgKGxlbiA9PSAzICYmIGJ1ZlsxXSA9PSAnLScpIHsKIAkJY3RybGNoYXJfc3lzcnFfa2V5ID0gYnVmWzJdOwotCQljdHJsY2hhcl93b3JrLmRhdGEgPSB0dHk7CisJCXN5c3JxX3R0eSA9IHR0eTsKIAkJc2NoZWR1bGVfd29yaygmY3RybGNoYXJfd29yayk7CiAJCXJldHVybiBDVFJMQ0hBUl9TWVNSUTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jCmluZGV4IDc4ZjhiZGEuLjA4OTNkMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jCkBAIC00MTksMTYgKzQxOSwyMCBAQAogCXN0cnVjdCBpZGFsX2J1ZmZlciAqaWI7CiAJaW50IG1pbm9yLCByYzsKIAotCWlmIChpbWFqb3IoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpICE9IElCTV9GUzMyNzBfTUFKT1IpCisJaWYgKGltYWpvcihmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSAhPSBJQk1fRlMzMjcwX01BSk9SKQogCQlyZXR1cm4gLUVOT0RFVjsKLQltaW5vciA9IGltaW5vcihmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJbWlub3IgPSBpbWlub3IoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJLyogQ2hlY2sgZm9yIG1pbm9yIDAgbXVsdGlwbGV4ZXIuICovCiAJaWYgKG1pbm9yID09IDApIHsKLQkJaWYgKCFjdXJyZW50LT5zaWduYWwtPnR0eSkKKwkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwkJbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKKwkJdHR5ID0gZ2V0X2N1cnJlbnRfdHR5KCk7CisJCWlmICghdHR5IHx8IHR0eS0+ZHJpdmVyLT5tYWpvciAhPSBJQk1fVFRZMzI3MF9NQUpPUikgeworCQkJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmIChjdXJyZW50LT5zaWduYWwtPnR0eS0+ZHJpdmVyLT5tYWpvciAhPSBJQk1fVFRZMzI3MF9NQUpPUikKLQkJCXJldHVybiAtRU5PREVWOwotCQltaW5vciA9IGN1cnJlbnQtPnNpZ25hbC0+dHR5LT5pbmRleCArIFJBVzMyNzBfRklSU1RNSU5PUjsKKwkJfQorCQltaW5vciA9IHR0eS0+aW5kZXggKyBSQVczMjcwX0ZJUlNUTUlOT1I7CisJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAl9CiAJLyogQ2hlY2sgaWYgc29tZSBvdGhlciBwcm9ncmFtIGlzIGFscmVhZHkgdXNpbmcgZnVsbHNjcmVlbiBtb2RlLiAqLwogCWZwID0gKHN0cnVjdCBmczMyNzAgKikgcmF3MzI3MF9maW5kX3ZpZXcoJmZzMzI3MF9mbiwgbWlub3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMKaW5kZXggZTM0OTFhNS4uM2U4NmZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5jCkBAIC0zNzcsNyArMzc3LDcgQEAKIAkJaWYgKCEoa2V5X21hcCA9IGtiZC0+a2V5X21hcHNbdG1wLmtiX3RhYmxlXSkpIHsKIAkJCWludCBqOwogCi0JCQlrZXlfbWFwID0gKHVzaG9ydCAqKSBrbWFsbG9jKHNpemVvZihwbGFpbl9tYXApLAorCQkJa2V5X21hcCA9IGttYWxsb2Moc2l6ZW9mKHBsYWluX21hcCksCiAJCQkJCQkgICAgIEdGUF9LRVJORUwpOwogCQkJaWYgKCFrZXlfbWFwKQogCQkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYwppbmRleCBiOWIwZmMzLi5jZGIyNGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9hcHBsZGF0YS5oPgogI2luY2x1ZGUgPGFzbS9tb253cml0ZXIuaD4KIAotI2RlZmluZSBNT05XUklURV9NQVhfREFUQUxFTgk0MDI0CisjZGVmaW5lIE1PTldSSVRFX01BWF9EQVRBTEVOCTQwMTAKIAogc3RhdGljIGludCBtb25fbWF4X2J1ZnMgPSAyNTU7CiBzdGF0aWMgaW50IG1vbl9idWZfY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NwaS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jcGkuYwppbmRleCA3MzJkZmJkLi40Zjg3M2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NwaS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY3BpLmMKQEAgLTQ5LDYgKzQ5LDggQEAKIAkuc2VuZF9tYXNrID0gRXZUeXBfQ3RsUHJvZ0lkZW50X01hc2sKIH07CiAKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwogTU9EVUxFX0FVVEhPUigKIAkiTWFydGluIFBlc2Noa2UsIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJIICIKIAkiPG1wZXNjaGtlQGRlLmlibS5jb20+Iik7CkBAIC0xMjcsNyArMTI5LDcgQEAKIAlzdHJ1Y3QgY3BpX3NjY2IgKnNjY2I7CiAJc3RydWN0IGNwaV9ldmJ1ZiAqZXZiOwogCi0JcmVxID0gKHN0cnVjdCBzY2xwX3JlcSAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NscF9yZXEpLCBHRlBfS0VSTkVMKTsKKwlyZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NscF9yZXEpLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVxID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCXNjY2IgPSAoc3RydWN0IGNwaV9zY2NiICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYwppbmRleCA2ZjQzZTA0ZC4uMmQxNzNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF90dHkuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3R0eS5jCkBAIC02MCw4ICs2MCw2IEBACiAKIHN0cnVjdCB0dHlfZHJpdmVyICpzY2xwX3R0eV9kcml2ZXI7CiAKLWV4dGVybiBzdHJ1Y3QgdGVybWlvcyAgdHR5X3N0ZF90ZXJtaW9zOwotCiBzdGF0aWMgc3RydWN0IHNjbHBfaW9jdGxzIHNjbHBfaW9jdGxzOwogc3RhdGljIHN0cnVjdCBzY2xwX2lvY3RscyBzY2xwX2lvY3Rsc19pbml0ID0KIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaCBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaAppbmRleCAxZjRjODk5Li5jOWYxYzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCkBAIC0xNzksNiArMTc5LDcgQEAKIC8qIEJsb2NrIEZyb250ZW5kIERhdGEgKi8KIHN0cnVjdCB0YXBlX2Jsa19kYXRhCiB7CisJc3RydWN0IHRhcGVfZGV2aWNlICoJZGV2aWNlOwogCS8qIEJsb2NrIGRldmljZSByZXF1ZXN0IHF1ZXVlLiAqLwogCXJlcXVlc3RfcXVldWVfdCAqCXJlcXVlc3RfcXVldWU7CiAJc3BpbmxvY2tfdAkJcmVxdWVzdF9xdWV1ZV9sb2NrOwpAQCAtMjQwLDcgKzI0MSw3IEBACiAjZW5kaWYKIAogCS8qIEZ1bmN0aW9uIHRvIHN0YXJ0IG9yIHN0b3AgdGhlIG5leHQgcmVxdWVzdCBsYXRlci4gKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXRhcGVfZG5yOworCXN0cnVjdCBkZWxheWVkX3dvcmsJCXRhcGVfZG5yOwogfTsKIAogLyogRXh0ZXJuYWxzIGZyb20gdGFwZV9jb3JlLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKaW5kZXggN2I5NWRhYi4uZTc2NTg3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKQEAgLTk1LDYgKzk1LDEyIEBACiAJcmV0dXJuIHJjOwogfQogCitzdHJ1Y3QgdGFwZV8zNHh4X3dvcmsgeworCXN0cnVjdCB0YXBlX2RldmljZQkqZGV2aWNlOworCWVudW0gdGFwZV9vcAkJIG9wOworCXN0cnVjdCB3b3JrX3N0cnVjdAkgd29yazsKK307CisKIC8qCiAgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGN1cnJlbnRseSB1c2VkIG9ubHkgdG8gc2NoZWR1bGUgYSBtZWRpdW1fc2Vuc2UgZm9yCiAgKiBsYXRlciBleGVjdXRpb24uIFRoaXMgaXMgYmVjYXVzZSB3ZSBnZXQgYW4gaW50ZXJydXB0IHdoZW5ldmVyIGEgbWVkaXVtCkBAIC0xMDMsMTMgKzEwOSwxMCBAQAogICogaW50ZXJydXB0IGhhbmRsZXIuCiAgKi8KIHN0YXRpYyB2b2lkCi10YXBlXzM0eHhfd29ya19oYW5kbGVyKHZvaWQgKmRhdGEpCit0YXBlXzM0eHhfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgdGFwZV9kZXZpY2UJKmRldmljZTsKLQkJZW51bSB0YXBlX29wCQkgb3A7Ci0JCXN0cnVjdCB3b3JrX3N0cnVjdAkgd29yazsKLQl9ICpwID0gZGF0YTsKKwlzdHJ1Y3QgdGFwZV8zNHh4X3dvcmsgKnAgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHRhcGVfMzR4eF93b3JrLCB3b3JrKTsKIAogCXN3aXRjaChwLT5vcCkgewogCQljYXNlIFRPX01TRU46CkBAIC0xMjYsMTcgKzEyOSwxMyBAQAogc3RhdGljIGludAogdGFwZV8zNHh4X3NjaGVkdWxlX3dvcmsoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIGVudW0gdGFwZV9vcCBvcCkKIHsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgdGFwZV9kZXZpY2UJKmRldmljZTsKLQkJZW51bSB0YXBlX29wCQkgb3A7Ci0JCXN0cnVjdCB3b3JrX3N0cnVjdAkgd29yazsKLQl9ICpwOworCXN0cnVjdCB0YXBlXzM0eHhfd29yayAqcDsKIAogCWlmICgocCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCUlOSVRfV09SSygmcC0+d29yaywgdGFwZV8zNHh4X3dvcmtfaGFuZGxlciwgcCk7CisJSU5JVF9XT1JLKCZwLT53b3JrLCB0YXBlXzM0eHhfd29ya19oYW5kbGVyKTsKIAogCXAtPmRldmljZSA9IHRhcGVfZ2V0X2RldmljZV9yZWZlcmVuY2UoZGV2aWNlKTsKIAlwLT5vcCAgICAgPSBvcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKaW5kZXggOTI4Y2JlZi4uOWRmOTEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKQEAgLTIzNiw5ICsyMzYsMTAgQEAKIH07CiAKIHN0YXRpYyB2b2lkCi10YXBlXzM1OTBfd29ya19oYW5kbGVyKHZvaWQgKmRhdGEpCit0YXBlXzM1OTBfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3Qgd29ya19oYW5kbGVyX2RhdGEgKnAgPSBkYXRhOworCXN0cnVjdCB3b3JrX2hhbmRsZXJfZGF0YSAqcCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd29ya19oYW5kbGVyX2RhdGEsIHdvcmspOwogCiAJc3dpdGNoIChwLT5vcCkgewogCWNhc2UgVE9fTVNFTjoKQEAgLTI2Myw3ICsyNjQsNyBAQAogCWlmICgocCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JSU5JVF9XT1JLKCZwLT53b3JrLCB0YXBlXzM1OTBfd29ya19oYW5kbGVyLCBwKTsKKwlJTklUX1dPUksoJnAtPndvcmssIHRhcGVfMzU5MF93b3JrX2hhbmRsZXIpOwogCiAJcC0+ZGV2aWNlID0gdGFwZV9nZXRfZGV2aWNlX3JlZmVyZW5jZShkZXZpY2UpOwogCXAtPm9wID0gb3A7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggMzIyNWZjZC4uYzhhODliMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxhc20vZGVidWcuaD4KIApAQCAtMTQzLDcgKzE0NCw4IEBACiAgKiBxdWV1ZS4KICAqLwogc3RhdGljIHZvaWQKLXRhcGVibG9ja19yZXF1ZXVlKHZvaWQgKmRhdGEpIHsKK3RhcGVibG9ja19yZXF1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykgeworCXN0cnVjdCB0YXBlX2Jsa19kYXRhICoJYmxrZGF0OwogCXN0cnVjdCB0YXBlX2RldmljZSAqCWRldmljZTsKIAlyZXF1ZXN0X3F1ZXVlX3QgKglxdWV1ZTsKIAlpbnQJCQlucl9xdWV1ZWQ7CkBAIC0xNTEsNyArMTUzLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICoJbDsKIAlpbnQJCQlyYzsKIAotCWRldmljZSA9IChzdHJ1Y3QgdGFwZV9kZXZpY2UgKikgZGF0YTsKKwlibGtkYXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHRhcGVfYmxrX2RhdGEsIHJlcXVldWVfdGFzayk7CisJZGV2aWNlID0gYmxrZGF0LT5kZXZpY2U7CiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybjsKIApAQCAtMjEyLDYgKzIxNSw3IEBACiAJaW50CQkJcmM7CiAKIAlibGtkYXQgPSAmZGV2aWNlLT5ibGtfZGF0YTsKKwlibGtkYXQtPmRldmljZSA9IGRldmljZTsKIAlzcGluX2xvY2tfaW5pdCgmYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlX2xvY2spOwogCWF0b21pY19zZXQoJmJsa2RhdC0+cmVxdWV1ZV9zY2hlZHVsZWQsIDApOwogCkBAIC0yNTUsOCArMjU5LDggQEAKIAogCWFkZF9kaXNrKGRpc2spOwogCi0JSU5JVF9XT1JLKCZibGtkYXQtPnJlcXVldWVfdGFzaywgdGFwZWJsb2NrX3JlcXVldWUsCi0JCXRhcGVfZ2V0X2RldmljZV9yZWZlcmVuY2UoZGV2aWNlKSk7CisJdGFwZV9nZXRfZGV2aWNlX3JlZmVyZW5jZShkZXZpY2UpOworCUlOSVRfV09SSygmYmxrZGF0LT5yZXF1ZXVlX3Rhc2ssIHRhcGVibG9ja19yZXF1ZXVlKTsKIAogCXJldHVybiAwOwogCkBAIC0yNzEsNyArMjc1LDcgQEAKIHRhcGVibG9ja19jbGVhbnVwX2RldmljZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCWRldmljZS0+YmxrX2RhdGEucmVxdWV1ZV90YXNrLmRhdGEgPSB0YXBlX3B1dF9kZXZpY2UoZGV2aWNlKTsKKwl0YXBlX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAogCWlmICghZGV2aWNlLT5ibGtfZGF0YS5kaXNrKSB7CiAJCVBSSU5UX0VSUigiKCVzKTogTm8gZ2VuZGlzayB0byBjbGVhbiB1cCFcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCmluZGV4IDk3Zjc1MjMuLjMxMTk4YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCkBAIC0yOTgsMTMgKzI5OCwxMyBAQAogCWludCBtaW5vciwgcmM7CiAKIAlEQkZfRVZFTlQoNiwgIlRDSEFSOm9wZW46ICVpOiVpXG4iLAotCQlpbWFqb3IoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpLAotCQlpbWlub3IoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpKTsKKwkJaW1ham9yKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLAorCQlpbWlub3IoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpOwogCi0JaWYgKGltYWpvcihmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSkgIT0gdGFwZWNoYXJfbWFqb3IpCisJaWYgKGltYWpvcihmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSAhPSB0YXBlY2hhcl9tYWpvcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQltaW5vciA9IGltaW5vcihmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJbWlub3IgPSBpbWlub3IoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJZGV2aWNlID0gdGFwZV9nZXRfZGV2aWNlKG1pbm9yIC8gVEFQRV9NSU5PUlNfUEVSX0RFVik7CiAJaWYgKElTX0VSUihkZXZpY2UpKSB7CiAJCURCRl9FVkVOVCgzLCAiVENIQVI6b3BlbjogdGFwZV9nZXRfZGV2aWNlKCkgZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKaW5kZXggMjgyNmFlZC4uYzZjMmU5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV9DT1JFOiAiCiAKIHN0YXRpYyB2b2lkIF9fdGFwZV9kb19pcnEgKHN0cnVjdCBjY3dfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBpcmIgKik7Ci1zdGF0aWMgdm9pZCB0YXBlX2RlbGF5ZWRfbmV4dF9yZXF1ZXN0KHZvaWQgKiBkYXRhKTsKK3N0YXRpYyB2b2lkIHRhcGVfZGVsYXllZF9uZXh0X3JlcXVlc3Qoc3RydWN0IHdvcmtfc3RydWN0ICopOwogCiAvKgogICogT25lIGxpc3QgdG8gY29udGFpbiBhbGwgdGFwZSBkZXZpY2VzIG9mIGFsbCBkaXNjaXBsaW5lcywgc28KQEAgLTI3Miw3ICsyNzIsNyBAQAogCQkJCXJldHVybiAwOwogCQkJY2FzZSAtRUJVU1k6CiAJCQkJcmVxdWVzdC0+c3RhdHVzCT0gVEFQRV9SRVFVRVNUX0NBTkNFTDsKLQkJCQlzY2hlZHVsZV93b3JrKCZkZXZpY2UtPnRhcGVfZG5yKTsKKwkJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+dGFwZV9kbnIsIDApOwogCQkJCXJldHVybiAwOwogCQkJY2FzZSAtRU5PREVWOgogCQkJCURCRl9FWENFUFRJT04oMiwgImRldmljZSBnb25lLCByZXRyeVxuIik7CkBAIC00NzAsNyArNDcwLDcgQEAKIAkqZGV2aWNlLT5tb2Rlc2V0X2J5dGUgPSAwOwogCWRldmljZS0+Zmlyc3RfbWlub3IgPSAtMTsKIAlhdG9taWNfc2V0KCZkZXZpY2UtPnJlZl9jb3VudCwgMSk7Ci0JSU5JVF9XT1JLKCZkZXZpY2UtPnRhcGVfZG5yLCB0YXBlX2RlbGF5ZWRfbmV4dF9yZXF1ZXN0LCBkZXZpY2UpOworCUlOSVRfREVMQVlFRF9XT1JLKCZkZXZpY2UtPnRhcGVfZG5yLCB0YXBlX2RlbGF5ZWRfbmV4dF9yZXF1ZXN0KTsKIAogCXJldHVybiBkZXZpY2U7CiB9CkBAIC03MjQsNyArNzI0LDcgQEAKIAl9IGVsc2UgaWYgKHJjID09IC1FQlVTWSkgewogCQkvKiBUaGUgY29tbW9uIEkvTyBzdWJzeXN0ZW0gaXMgY3VycmVudGx5IGJ1c3kuIFJldHJ5IGxhdGVyLiAqLwogCQlyZXF1ZXN0LT5zdGF0dXMgPSBUQVBFX1JFUVVFU1RfUVVFVUVEOwotCQlzY2hlZHVsZV93b3JrKCZkZXZpY2UtPnRhcGVfZG5yKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPnRhcGVfZG5yLCAwKTsKIAkJcmMgPSAwOwogCX0gZWxzZSB7CiAJCS8qIFN0YXJ0IGZhaWxlZC4gUmVtb3ZlIHJlcXVlc3QgYW5kIGluZGljYXRlIGZhaWx1cmUuICovCkBAIC03OTAsMTEgKzc5MCwxMSBAQAogfQogCiBzdGF0aWMgdm9pZAotdGFwZV9kZWxheWVkX25leHRfcmVxdWVzdCh2b2lkICpkYXRhKQordGFwZV9kZWxheWVkX25leHRfcmVxdWVzdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IHRhcGVfZGV2aWNlICoJZGV2aWNlOworCXN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0YXBlX2RldmljZSwgdGFwZV9kbnIud29yayk7CiAKLQlkZXZpY2UgPSAoc3RydWN0IHRhcGVfZGV2aWNlICopIGRhdGE7CiAJREJGX0xIKDYsICJ0YXBlX2RlbGF5ZWRfbmV4dF9yZXF1ZXN0KCVwKVxuIiwgZGV2aWNlKTsKIAlzcGluX2xvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKIAlfX3RhcGVfc3RhcnRfbmV4dF9yZXF1ZXN0KGRldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90dHkzMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90dHkzMjcwLmMKaW5kZXggNDcxN2MzNi4uMDk4NDQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdHR5MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3R0eTMyNzAuYwpAQCAtMTY1OSw3ICsxNjU5LDcgQEAKICAqIENoZWNrIGZvciB2aXNpYmxlL2ludmlzaWJsZSBpbnB1dCBzd2l0Y2hlcwogICovCiBzdGF0aWMgdm9pZAotdHR5MzI3MF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkKQordHR5MzI3MF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAlzdHJ1Y3QgdHR5MzI3MCAqdHA7CiAJaW50IG5ldzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYwppbmRleCAxNjc4YjZjLi5hNDIwY2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci92bWNwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWRlYnVnX3RleHRfZXZlbnQodm1jcF9kZWJ1ZywgMSwgY21kKTsKLQlzZXNzaW9uLT5yZXNwX3NpemUgPSBfX2NwY21kKGNtZCwgc2Vzc2lvbi0+cmVzcG9uc2UsCisJc2Vzc2lvbi0+cmVzcF9zaXplID0gY3BjbWQoY21kLCBzZXNzaW9uLT5yZXNwb25zZSwKIAkJCQkgICAgIHNlc3Npb24tPmJ1ZnNpemUsCiAJCQkJICAgICAmc2Vzc2lvbi0+cmVzcF9jb2RlKTsKIAl1cCgmc2Vzc2lvbi0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwppbmRleCBkYmZiNzdiLi5jYmFiOGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJcGFnZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwotCXNwaW5fbG9ja19pcnEoJnNjaC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOwogCXJldCA9IGNoc2NfZ2V0X3NjaF9kZXNjX2lycShzY2gsIHBhZ2UpOwogCWlmIChyZXQpIHsKIAkJc3RhdGljIGludCBjaW9fY2hzY19lcnJfbXNnOwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJCQljaW9fY2hzY19lcnJfbXNnID0gMTsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnEoJnNjaC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBhZ2UpOwogCWlmICghcmV0KSB7CiAJCWludCBqLCBjaHBpZCwgbWFzazsKQEAgLTIzMyw3ICsyMzMsNyBAQAogCWlmIChqID49IDgpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrX2lycSgmc2NoLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CiAKIAlzdHNjaChzY2gtPnNjaGlkLCAmc2NoaWIpOwogCWlmICghc2NoaWIucG1jdy5kbnYpCkBAIC0yNjUsMTAgKzI2NSwxMCBAQAogCWVsc2UgaWYgKHNjaC0+bHBtID09IG1hc2spCiAJCWdvdG8gb3V0X3VucmVnOwogb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnEoJnNjaC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJcmV0dXJuIDA7CiBvdXRfdW5yZWc6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZzY2gtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCXNjaC0+bHBtID0gMDsKIAlpZiAoY3NzX2VucXVldWVfc3ViY2hhbm5lbF9zbG93KHNjaC0+c2NoaWQpKSB7CiAJCWNzc19jbGVhcl9zdWJjaGFubmVsX3Nsb3dfbGlzdCgpOwpAQCAtMzc4LDEyICszNzgsMTIgQEAKIAkJLyogQ2hlY2sgaWYgYSBzdWJjaGFubmVsIGlzIG5ld2x5IGF2YWlsYWJsZS4gKi8KIAkJcmV0dXJuIHMzOTBfcHJvY2Vzc19yZXNfYWNjX25ld19zY2goc2NoaWQpOwogCi0Jc3Bpbl9sb2NrX2lycSgmc2NoLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CiAKIAljaHBfbWFzayA9IHMzOTBfcHJvY2Vzc19yZXNfYWNjX3NjaChyZXNfZGF0YSwgc2NoKTsKIAogCWlmIChjaHBfbWFzayA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2NoLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJZWxzZSBpZiAoc2NoLT5kcml2ZXIgJiYgc2NoLT5kcml2ZXItPnZlcmlmeSkKIAkJc2NoLT5kcml2ZXItPnZlcmlmeSgmc2NoLT5kZXYpOwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZzY2gtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTYzNSwyMSArNjM1LDIxIEBACiAJaWYgKCFzY2gpCiAJCS8qIENoZWNrIGlmIHRoZSBzdWJjaGFubmVsIGlzIG5vdyBhdmFpbGFibGUuICovCiAJCXJldHVybiBfX2NocF9hZGRfbmV3X3NjaChzY2hpZCk7Ci0Jc3Bpbl9sb2NrX2lycSgmc2NoLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CiAJZm9yIChpPTA7IGk8ODsgaSsrKSB7CiAJCW1hc2sgPSAweDgwID4+IGk7CiAJCWlmICgoc2NoLT5zY2hpYi5wbWN3LnBpbSAmIG1hc2spICYmCiAJCSAgICAoc2NoLT5zY2hpYi5wbWN3LmNocGlkW2ldID09IGNocC0+aWQpKSB7CiAJCQlpZiAoc3RzY2goc2NoLT5zY2hpZCwgJnNjaC0+c2NoaWIpICE9IDApIHsKIAkJCQkvKiBFbmRnYW1lLiAqLwotCQkJCXNwaW5fdW5sb2NrX2lycSgmc2NoLT5sb2NrKTsKKwkJCQlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAkJCQlyZXR1cm4gLUVOWElPOwogCQkJfQogCQkJYnJlYWs7CiAJCX0KIAl9CiAJaWYgKGk9PTgpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZzY2gtPmxvY2spOworCQlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNjaC0+bHBtID0gKChzY2gtPnNjaGliLnBtY3cucGltICYKQEAgLTY2MCw3ICs2NjAsNyBAQAogCWlmIChzY2gtPmRyaXZlciAmJiBzY2gtPmRyaXZlci0+dmVyaWZ5KQogCQlzY2gtPmRyaXZlci0+dmVyaWZ5KCZzY2gtPmRldik7CiAKLQlzcGluX3VubG9ja19pcnEoJnNjaC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJcHV0X2RldmljZSgmc2NoLT5kZXYpOwogCXJldHVybiAwOwogfQpAQCAtNzUwLDcgKzc1MCw3IEBACiAJaWYgKCFzY2gtPnNzZF9pbmZvLnZhbGlkKQogCQlyZXR1cm47CiAJCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNjaC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKHNjaC0+bG9jaywgZmxhZ3MpOwogCW9sZF9scG0gPSBzY2gtPmxwbTsKIAlmb3IgKGNocCA9IDA7IGNocCA8IDg7IGNocCsrKSB7CiAJCWlmIChzY2gtPnNzZF9pbmZvLmNocGlkW2NocF0gIT0gY2hwaWQpCkBAIC03ODUsNyArNzg1LDcgQEAKIAkJCXNjaC0+ZHJpdmVyLT52ZXJpZnkoJnNjaC0+ZGV2KTsKIAkJYnJlYWs7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NoLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCmluZGV4IDIwYWVlMjcuLmFlMWJmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwpAQCAtMiw4ICsyLDcgQEAKICAqICBkcml2ZXJzL3MzOTAvY2lvL2Npby5jCiAgKiAgIFMvMzkwIGNvbW1vbiBJL08gcm91dGluZXMgLS0gbG93IGxldmVsIGkvbyBjYWxscwogICoKLSAqICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILAotICoJCQkgICAgICBJQk0gQ29ycG9yYXRpb24KKyAqICAgIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDE5OTksMjAwNgogICogICAgQXV0aG9yKHMpOiBJbmdvIEFkbHVuZyAoYWRsdW5nQGRlLmlibS5jb20pCiAgKgkJIENvcm5lbGlhIEh1Y2sgKGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbSkKICAqCQkgQXJuZCBCZXJnbWFubiAoYXJuZGJAZGUuaWJtLmNvbSkKQEAgLTE0MywxMSArMTQyLDExIEBACiAJCXJldHVybiAxOwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlpcnFfZW50ZXIgKCk7Ci0Jc3Bpbl9sb2NrKCZzY2gtPmxvY2spOworCXNwaW5fbG9jayhzY2gtPmxvY2spOwogCW1lbWNweSAoJnNjaC0+c2NoaWIuc2NzdywgJmlyYi0+c2Nzdywgc2l6ZW9mIChzdHJ1Y3Qgc2NzdykpOwogCWlmIChzY2gtPmRyaXZlciAmJiBzY2gtPmRyaXZlci0+aXJxKQogCQlzY2gtPmRyaXZlci0+aXJxKCZzY2gtPmRldik7Ci0Jc3Bpbl91bmxvY2soJnNjaC0+bG9jayk7CisJc3Bpbl91bmxvY2soc2NoLT5sb2NrKTsKIAlpcnFfZXhpdCAoKTsKIAlfbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmV0dXJuIDE7CkBAIC00MTUsNiArNDE0LDggQEAKIAlDSU9fVFJBQ0VfRVZFTlQgKDIsICJlbnNjaCIpOwogCUNJT19UUkFDRV9FVkVOVCAoMiwgc2NoLT5kZXYuYnVzX2lkKTsKIAorCWlmIChzY2hfaXNfcHNldWRvX3NjaChzY2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAljY29kZSA9IHN0c2NoIChzY2gtPnNjaGlkLCAmc2NoLT5zY2hpYik7CiAJaWYgKGNjb2RlKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTQ2Miw2ICs0NjMsOCBAQAogCUNJT19UUkFDRV9FVkVOVCAoMiwgImRpc3NjaCIpOwogCUNJT19UUkFDRV9FVkVOVCAoMiwgc2NoLT5kZXYuYnVzX2lkKTsKIAorCWlmIChzY2hfaXNfcHNldWRvX3NjaChzY2gpKQorCQlyZXR1cm4gMDsKIAljY29kZSA9IHN0c2NoIChzY2gtPnNjaGlkLCAmc2NoLT5zY2hpYik7CiAJaWYgKGNjb2RlID09IDMpCQkvKiBOb3Qgb3BlcmF0aW9uYWwuICovCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNDk2LDYgKzQ5OSwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBjaW9fY3JlYXRlX3NjaF9sb2NrKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCit7CisJc2NoLT5sb2NrID0ga21hbGxvYyhzaXplb2Yoc3BpbmxvY2tfdCksIEdGUF9LRVJORUwpOworCWlmICghc2NoLT5sb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2tfaW5pdChzY2gtPmxvY2spOworCXJldHVybiAwOworfQorCiAvKgogICogY2lvX3ZhbGlkYXRlX3N1YmNoYW5uZWwoKQogICoKQEAgLTUxMyw2ICs1MjUsNyBAQAogewogCWNoYXIgZGJmX3R4dFsxNV07CiAJaW50IGNjb2RlOworCWludCBlcnI7CiAKIAlzcHJpbnRmIChkYmZfdHh0LCAidmFsc2NoJXgiLCBzY2hpZC5zY2hfbm8pOwogCUNJT19UUkFDRV9FVkVOVCAoNCwgZGJmX3R4dCk7CkBAIC01MjAsOSArNTMzLDE1IEBACiAJLyogTnVrZSBhbGwgZmllbGRzLiAqLwogCW1lbXNldChzY2gsIDAsIHNpemVvZihzdHJ1Y3Qgc3ViY2hhbm5lbCkpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnNjaC0+bG9jayk7CisJc2NoLT5zY2hpZCA9IHNjaGlkOworCWlmIChjaW9faXNfY29uc29sZShzY2hpZCkpIHsKKwkJc2NoLT5sb2NrID0gY2lvX2dldF9jb25zb2xlX2xvY2soKTsKKwl9IGVsc2UgeworCQllcnIgPSBjaW9fY3JlYXRlX3NjaF9sb2NrKHNjaCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CiAJbXV0ZXhfaW5pdCgmc2NoLT5yZWdfbXV0ZXgpOwotCiAJLyogU2V0IGEgbmFtZSBmb3IgdGhlIHN1YmNoYW5uZWwgKi8KIAlzbnByaW50ZiAoc2NoLT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgIjAuJXguJTA0eCIsIHNjaGlkLnNzaWQsCiAJCSAgc2NoaWQuc2NoX25vKTsKQEAgLTUzNCwxMCArNTUzLDEwIEBACiAJICogIGlzIG5vdCB2YWxpZC4KIAkgKi8KIAljY29kZSA9IHN0c2NoX2VyciAoc2NoaWQsICZzY2gtPnNjaGliKTsKLQlpZiAoY2NvZGUpCi0JCXJldHVybiAoY2NvZGUgPT0gMykgPyAtRU5YSU8gOiBjY29kZTsKLQotCXNjaC0+c2NoaWQgPSBzY2hpZDsKKwlpZiAoY2NvZGUpIHsKKwkJZXJyID0gKGNjb2RlID09IDMpID8gLUVOWElPIDogY2NvZGU7CisJCWdvdG8gb3V0OworCX0KIAkvKiBDb3B5IHN1YmNoYW5uZWwgdHlwZSBmcm9tIHBhdGggbWFuYWdlbWVudCBjb250cm9sIHdvcmQuICovCiAJc2NoLT5zdCA9IHNjaC0+c2NoaWIucG1jdy5zdDsKIApAQCAtNTUwLDE0ICs1NjksMTYgQEAKIAkJCSAgIm5vbi1JL08gc3ViY2hhbm5lbCB0eXBlICUwNFhcbiIsCiAJCQkgIHNjaC0+c2NoaWQuc3NpZCwgc2NoLT5zY2hpZC5zY2hfbm8sIHNjaC0+c3QpOwogCQkvKiBXZSBzdG9wIGhlcmUgZm9yIG5vbi1pbyBzdWJjaGFubmVscy4gKi8KLQkJcmV0dXJuIHNjaC0+c3Q7CisJCWVyciA9IHNjaC0+c3Q7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIEluaXRpYWxpemF0aW9uIGZvciBpbyBzdWJjaGFubmVscy4gKi8KLQlpZiAoIXNjaC0+c2NoaWIucG1jdy5kbnYpCisJaWYgKCFzY2gtPnNjaGliLnBtY3cuZG52KSB7CiAJCS8qIGlvIHN1YmNoYW5uZWwgYnV0IGRldmljZSBudW1iZXIgaXMgaW52YWxpZC4gKi8KLQkJcmV0dXJuIC1FTk9ERVY7Ci0KKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCS8qIERldm5vIGlzIHZhbGlkLiAqLwogCWlmIChpc19ibGFja2xpc3RlZCAoc2NoLT5zY2hpZC5zc2lkLCBzY2gtPnNjaGliLnBtY3cuZGV2KSkgewogCQkvKgpAQCAtNTY3LDcgKzU4OCw4IEBACiAJCUNJT19NU0dfRVZFTlQoMCwgIkJsYWNrbGlzdGVkIGRldmljZSBkZXRlY3RlZCAiCiAJCQkgICAgICAiYXQgZGV2bm8gJTA0WCwgc3ViY2hhbm5lbCBzZXQgJXhcbiIsCiAJCQkgICAgICBzY2gtPnNjaGliLnBtY3cuZGV2LCBzY2gtPnNjaGlkLnNzaWQpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CiAJfQogCXNjaC0+b3BtID0gMHhmZjsKIAlpZiAoIWNpb19pc19jb25zb2xlKHNjaC0+c2NoaWQpKQpAQCAtNTk1LDYgKzYxNywxMSBAQAogCWlmICgoc2NoLT5scG0gJiAoc2NoLT5scG0gLSAxKSkgIT0gMCkKIAkJc2NoLT5zY2hpYi5wbWN3Lm1wID0gMTsJLyogbXVsdGlwYXRoIG1vZGUgKi8KIAlyZXR1cm4gMDsKK291dDoKKwlpZiAoIWNpb19pc19jb25zb2xlKHNjaGlkKSkKKwkJa2ZyZWUoc2NoLT5sb2NrKTsKKwlzY2gtPmxvY2sgPSBOVUxMOworCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC02MzcsNyArNjY0LDcgQEAKIAkJfQogCQlzY2ggPSAoc3RydWN0IHN1YmNoYW5uZWwgKikodW5zaWduZWQgbG9uZyl0cGlfaW5mby0+aW50cGFybTsKIAkJaWYgKHNjaCkKLQkJCXNwaW5fbG9jaygmc2NoLT5sb2NrKTsKKwkJCXNwaW5fbG9jayhzY2gtPmxvY2spOwogCQkvKiBTdG9yZSBpbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2sgdG8gbG93Y29yZS4gKi8KIAkJaWYgKHRzY2ggKHRwaV9pbmZvLT5zY2hpZCwgaXJiKSA9PSAwICYmIHNjaCkgewogCQkJLyogS2VlcCBzdWJjaGFubmVsIGluZm9ybWF0aW9uIHdvcmQgdXAgdG8gZGF0ZS4gKi8KQEAgLTY0OCw3ICs2NzUsNyBAQAogCQkJCXNjaC0+ZHJpdmVyLT5pcnEoJnNjaC0+ZGV2KTsKIAkJfQogCQlpZiAoc2NoKQotCQkJc3Bpbl91bmxvY2soJnNjaC0+bG9jayk7CisJCQlzcGluX3VubG9jayhzY2gtPmxvY2spOwogCQkvKgogCQkgKiBBcmUgbW9yZSBpbnRlcnJ1cHRzIHBlbmRpbmc/CiAJCSAqIElmIHNvLCB0aGUgdHBpIGluc3RydWN0aW9uIHdpbGwgdXBkYXRlIHRoZSBsb3djb3JlCkBAIC02ODcsMTAgKzcxNCwxMCBAQAogCV9fY3RsX2xvYWQgKGNyNiwgNiwgNik7CiAKIAlkbyB7Ci0JCXNwaW5fdW5sb2NrKCZjb25zb2xlX3N1YmNoYW5uZWwubG9jayk7CisJCXNwaW5fdW5sb2NrKGNvbnNvbGVfc3ViY2hhbm5lbC5sb2NrKTsKIAkJaWYgKCFjaW9fdHBpKCkpCiAJCQljcHVfcmVsYXgoKTsKLQkJc3Bpbl9sb2NrKCZjb25zb2xlX3N1YmNoYW5uZWwubG9jayk7CisJCXNwaW5fbG9jayhjb25zb2xlX3N1YmNoYW5uZWwubG9jayk7CiAJfSB3aGlsZSAoY29uc29sZV9zdWJjaGFubmVsLnNjaGliLnNjc3cuYWN0bCAhPSAwKTsKIAkvKgogCSAqIHJlc3RvcmUgcHJldmlvdXMgaXNjIHZhbHVlCkBAIC04NDMsMTEgKzg3MCwzNiBAQAogCXJldHVybiAtRUJVU1k7CiB9CiAKK3N0YXRpYyBpbnQgcGdtX2NoZWNrX29jY3VyZWQ7CisKK3N0YXRpYyB2b2lkIGNpb19yZXNldF9wZ21fY2hlY2tfaGFuZGxlcih2b2lkKQoreworCXBnbV9jaGVja19vY2N1cmVkID0gMTsKK30KKworc3RhdGljIGludCBzdHNjaF9yZXNldChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgdm9sYXRpbGUgc3RydWN0IHNjaGliICphZGRyKQoreworCWludCByYzsKKworCXBnbV9jaGVja19vY2N1cmVkID0gMDsKKwlzMzkwX3Jlc2V0X3BnbV9oYW5kbGVyID0gY2lvX3Jlc2V0X3BnbV9jaGVja19oYW5kbGVyOworCXJjID0gc3RzY2goc2NoaWQsIGFkZHIpOworCXMzOTBfcmVzZXRfcGdtX2hhbmRsZXIgPSBOVUxMOworCisJLyogVGhlIHByb2dyYW0gY2hlY2sgaGFuZGxlciBjb3VsZCBoYXZlIGNoYW5nZWQgcGdtX2NoZWNrX29jY3VyZWQgKi8KKwliYXJyaWVyKCk7CisKKwlpZiAocGdtX2NoZWNrX29jY3VyZWQpCisJCXJldHVybiAtRUlPOworCWVsc2UKKwkJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW50IF9fc2h1dGRvd25fc3ViY2hhbm5lbF9lYXN5KHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBzY2hpYiBzY2hpYjsKIAotCWlmIChzdHNjaF9lcnIoc2NoaWQsICZzY2hpYikpCisJaWYgKHN0c2NoX3Jlc2V0KHNjaGlkLCAmc2NoaWIpKQogCQlyZXR1cm4gLUVOWElPOwogCWlmICghc2NoaWIucG1jdy5lbmEpCiAJCXJldHVybiAwOwpAQCAtOTQ0LDcgKzk5Niw3IEBACiAJc3RydWN0IHNjaGliIHNjaGliOwogCXN0cnVjdCBzY2hfbWF0Y2hfaWQgKm1hdGNoX2lkID0gZGF0YTsKIAotCWlmIChzdHNjaF9lcnIoc2NoaWQsICZzY2hpYikpCisJaWYgKHN0c2NoX3Jlc2V0KHNjaGlkLCAmc2NoaWIpKQogCQlyZXR1cm4gLUVOWElPOwogCWlmIChzY2hpYi5wbWN3LmRudiAmJgogCSAgICAoc2NoaWIucG1jdy5kZXYgPT0gbWF0Y2hfaWQtPmRldmlkLmRldm5vKSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmgKaW5kZXggNDU0MWMxYS4uMzUxNTRhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5oCkBAIC04Nyw3ICs4Nyw3IEBACiAvKiBzdWJjaGFubmVsIGRhdGEgc3RydWN0dXJlIHVzZWQgYnkgSS9PIHN1YnJvdXRpbmVzICovCiBzdHJ1Y3Qgc3ViY2hhbm5lbCB7CiAJc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQ7Ci0Jc3BpbmxvY2tfdCBsb2NrOwkvKiBzdWJjaGFubmVsIGxvY2sgKi8KKwlzcGlubG9ja190ICpsb2NrOwkvKiBzdWJjaGFubmVsIGxvY2sgKi8KIAlzdHJ1Y3QgbXV0ZXggcmVnX211dGV4OwogCWVudW0gewogCQlTVUJDSEFOTkVMX1RZUEVfSU8gPSAwLApAQCAtMTMxLDE1ICsxMzEsMTkgQEAKIGV4dGVybiBpbnQgY2lvX2dldF9vcHRpb25zIChzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgY2lvX21vZGlmeSAoc3RydWN0IHN1YmNoYW5uZWwgKik7CiAKK2ludCBjaW9fY3JlYXRlX3NjaF9sb2NrKHN0cnVjdCBzdWJjaGFubmVsICopOworCiAvKiBVc2Ugd2l0aCBjYXJlLiAqLwogI2lmZGVmIENPTkZJR19DQ1dfQ09OU09MRQogZXh0ZXJuIHN0cnVjdCBzdWJjaGFubmVsICpjaW9fcHJvYmVfY29uc29sZSh2b2lkKTsKIGV4dGVybiB2b2lkIGNpb19yZWxlYXNlX2NvbnNvbGUodm9pZCk7CiBleHRlcm4gaW50IGNpb19pc19jb25zb2xlKHN0cnVjdCBzdWJjaGFubmVsX2lkKTsKIGV4dGVybiBzdHJ1Y3Qgc3ViY2hhbm5lbCAqY2lvX2dldF9jb25zb2xlX3N1YmNoYW5uZWwodm9pZCk7CitleHRlcm4gc3BpbmxvY2tfdCAqIGNpb19nZXRfY29uc29sZV9sb2NrKHZvaWQpOwogI2Vsc2UKICNkZWZpbmUgY2lvX2lzX2NvbnNvbGUoc2NoaWQpIDAKICNkZWZpbmUgY2lvX2dldF9jb25zb2xlX3N1YmNoYW5uZWwoKSBOVUxMCisjZGVmaW5lIGNpb19nZXRfY29uc29sZV9sb2NrKCkgTlVMTDsKICNlbmRpZgogCiBleHRlcm4gaW50IGNpb19zaG93X21zZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDI2Y2YyZjUuLjlkNmMwMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtOTEsOSArOTEsOSBAQAogCQkvKiBSZXNldCBpbnRwYXJtIHRvIHplcm9lcy4gKi8KIAkJc2NoLT5zY2hpYi5wbWN3LmludHBhcm0gPSAwOwogCQljaW9fbW9kaWZ5KHNjaCk7CisJCWtmcmVlKHNjaC0+bG9jayk7CiAJCWtmcmVlKHNjaCk7CiAJfQotCQogfQogCiBzdGF0aWMgdm9pZApAQCAtMTAyLDggKzEwMiwxMCBAQAogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CiAKIAlzY2ggPSB0b19zdWJjaGFubmVsKGRldik7Ci0JaWYgKCFjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkKKwlpZiAoIWNpb19pc19jb25zb2xlKHNjaC0+c2NoaWQpKSB7CisJCWtmcmVlKHNjaC0+bG9jayk7CiAJCWtmcmVlKHNjaCk7CisJfQogfQogCiBleHRlcm4gaW50IGNzc19nZXRfc3NkX2luZm8oc3RydWN0IHN1YmNoYW5uZWwgKnNjaCk7CkBAIC0xMzUsMTQgKzEzNywxNyBAQAogCXNjaC0+ZGV2LnBhcmVudCA9ICZjc3NbMF0tPmRldmljZTsKIAlzY2gtPmRldi5idXMgPSAmY3NzX2J1c190eXBlOwogCXNjaC0+ZGV2LnJlbGVhc2UgPSAmY3NzX3N1YmNoYW5uZWxfcmVsZWFzZTsKLQkKKwlzY2gtPmRldi5ncm91cHMgPSBzdWJjaF9hdHRyX2dyb3VwczsKKworCWNzc19nZXRfc3NkX2luZm8oc2NoKTsKKwogCS8qIG1ha2UgaXQga25vd24gdG8gdGhlIHN5c3RlbSAqLwogCXJldCA9IGNzc19zY2hfZGV2aWNlX3JlZ2lzdGVyKHNjaCk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogY291bGQgbm90IHJlZ2lzdGVyICVzXG4iLAogCQkJX19mdW5jX18sIHNjaC0+ZGV2LmJ1c19pZCk7Ci0JZWxzZQotCQljc3NfZ2V0X3NzZF9pbmZvKHNjaCk7CisJCXJldHVybiByZXQ7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIwMSwxOCArMjA2LDE4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAllbnVtIHsgTk9ORSwgVU5SRUdJU1RFUiwgVU5SRUdJU1RFUl9QUk9CRSwgUkVQUk9CRSB9IGFjdGlvbjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzY2gtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShzY2gtPmxvY2ssIGZsYWdzKTsKIAlkaXNjID0gZGV2aWNlX2lzX2Rpc2Nvbm5lY3RlZChzY2gpOwogCWlmIChkaXNjICYmIHNsb3cpIHsKIAkJLyogRGlzY29ubmVjdGVkIGRldmljZXMgYXJlIGV2YWx1YXRlZCBkaXJlY3RseSBvbmx5LiovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaC0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNjaC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogTm8gaW50ZXJydXB0IGFmdGVyIG1hY2hpbmUgY2hlY2sgLSBraWxsIHBlbmRpbmcgdGltZXJzLiAqLwogCWRldmljZV9raWxsX3BlbmRpbmdfdGltZXIoc2NoKTsKIAlpZiAoIWRpc2MgJiYgIXNsb3cpIHsKIAkJLyogTm9uLWRpc2Nvbm5lY3RlZCBkZXZpY2VzIGFyZSBldmFsdWF0ZWQgb24gdGhlIHNsb3cgcGF0aC4gKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NoLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAlldmVudCA9IGNzc19nZXRfc3ViY2hhbm5lbF9zdGF0dXMoc2NoKTsKQEAgLTIzNyw5ICsyNDIsOSBAQAogCQkvKiBBc2sgZHJpdmVyIHdoYXQgdG8gZG8gd2l0aCBkZXZpY2UuICovCiAJCWFjdGlvbiA9IFVOUkVHSVNURVI7CiAJCWlmIChzY2gtPmRyaXZlciAmJiBzY2gtPmRyaXZlci0+bm90aWZ5KSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2gtPmxvY2ssIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NoLT5sb2NrLCBmbGFncyk7CiAJCQlyZXQgPSBzY2gtPmRyaXZlci0+bm90aWZ5KCZzY2gtPmRldiwgZXZlbnQpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaC0+bG9jaywgZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoc2NoLT5sb2NrLCBmbGFncyk7CiAJCQlpZiAocmV0KQogCQkJCWFjdGlvbiA9IE5PTkU7CiAJCX0KQEAgLTI2NCw5ICsyNjksOSBAQAogCWNhc2UgVU5SRUdJU1RFUjoKIAljYXNlIFVOUkVHSVNURVJfUFJPQkU6CiAJCS8qIFVucmVnaXN0ZXIgZGV2aWNlICh3aWxsIHVzZSBzdWJjaGFubmVsIGxvY2spLiAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2gtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzY2gtPmxvY2ssIGZsYWdzKTsKIAkJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihzY2gpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKHNjaC0+bG9jaywgZmxhZ3MpOwogCiAJCS8qIFJlc2V0IGludHBhcm0gdG8gemVyb2VzLiAqLwogCQlzY2gtPnNjaGliLnBtY3cuaW50cGFybSA9IDA7CkBAIC0yNzgsNyArMjgzLDcgQEAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzY2gtPmxvY2ssIGZsYWdzKTsKIAkvKiBQcm9iZSBpZiBuZWNlc3NhcnkuICovCiAJaWYgKGFjdGlvbiA9PSBVTlJFR0lTVEVSX1BST0JFKQogCQlyZXQgPSBjc3NfcHJvYmVfZGV2aWNlKHNjaC0+c2NoaWQpOwpAQCAtNTczLDEyICs1NzgsMjQgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGNtX2VuYWJsZSwgMDY0NCwgY3NzX2NtX2VuYWJsZV9zaG93LCBjc3NfY21fZW5hYmxlX3N0b3JlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdAotc2V0dXBfY3NzKGludCBucikKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBzZXR1cF9jc3MoaW50IG5yKQogewogCXUzMiB0b2RfaGlnaDsKKwlpbnQgcmV0OwogCiAJbWVtc2V0KGNzc1tucl0sIDAsIHNpemVvZihzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0pKTsKKwljc3NbbnJdLT5wc2V1ZG9fc3ViY2hhbm5lbCA9CisJCWt6YWxsb2Moc2l6ZW9mKCpjc3NbbnJdLT5wc2V1ZG9fc3ViY2hhbm5lbCksIEdGUF9LRVJORUwpOworCWlmICghY3NzW25yXS0+cHNldWRvX3N1YmNoYW5uZWwpCisJCXJldHVybiAtRU5PTUVNOworCWNzc1tucl0tPnBzZXVkb19zdWJjaGFubmVsLT5kZXYucGFyZW50ID0gJmNzc1tucl0tPmRldmljZTsKKwljc3NbbnJdLT5wc2V1ZG9fc3ViY2hhbm5lbC0+ZGV2LnJlbGVhc2UgPSBjc3Nfc3ViY2hhbm5lbF9yZWxlYXNlOworCXNwcmludGYoY3NzW25yXS0+cHNldWRvX3N1YmNoYW5uZWwtPmRldi5idXNfaWQsICJkZWZ1bmN0Iik7CisJcmV0ID0gY2lvX2NyZWF0ZV9zY2hfbG9jayhjc3NbbnJdLT5wc2V1ZG9fc3ViY2hhbm5lbCk7CisJaWYgKHJldCkgeworCQlrZnJlZShjc3NbbnJdLT5wc2V1ZG9fc3ViY2hhbm5lbCk7CisJCXJldHVybiByZXQ7CisJfQogCW11dGV4X2luaXQoJmNzc1tucl0tPm11dGV4KTsKIAljc3NbbnJdLT52YWxpZCA9IDE7CiAJY3NzW25yXS0+Y3NzaWQgPSBucjsKQEAgLTU4Niw2ICs2MDMsNyBAQAogCWNzc1tucl0tPmRldmljZS5yZWxlYXNlID0gY2hhbm5lbF9zdWJzeXN0ZW1fcmVsZWFzZTsKIAl0b2RfaGlnaCA9ICh1MzIpIChnZXRfY2xvY2soKSA+PiAzMik7CiAJY3NzX2dlbmVyYXRlX3BnaWQoY3NzW25yXSwgdG9kX2hpZ2gpOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNjIyLDEwICs2NDAsMTIgQEAKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIG91dF91bnJlZ2lzdGVyOwogCQl9Ci0JCXNldHVwX2NzcyhpKTsKLQkJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZjc3NbaV0tPmRldmljZSk7CisJCXJldCA9IHNldHVwX2NzcyhpKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2ZyZWU7CisJCXJldCA9IGRldmljZV9yZWdpc3RlcigmY3NzW2ldLT5kZXZpY2UpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZnJlZV9hbGw7CiAJCWlmIChjc3NfY2hhcmFjdGVyaXN0aWNzX2F2YWlsICYmCiAJCSAgICBjc3NfY2hzY19jaGFyYWN0ZXJpc3RpY3Muc2VjbSkgewogCQkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjc3NbaV0tPmRldmljZSwKQEAgLTYzMyw2ICs2NTMsOSBAQAogCQkJaWYgKHJldCkKIAkJCQlnb3RvIG91dF9kZXZpY2U7CiAJCX0KKwkJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZjc3NbaV0tPnBzZXVkb19zdWJjaGFubmVsLT5kZXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZmlsZTsKIAl9CiAJY3NzX2luaXRfZG9uZSA9IDE7CiAKQEAgLTY0MCwxMyArNjYzLDE5IEBACiAKIAlmb3JfZWFjaF9zdWJjaGFubmVsKF9faW5pdF9jaGFubmVsX3N1YnN5c3RlbSwgTlVMTCk7CiAJcmV0dXJuIDA7CitvdXRfZmlsZToKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNzc1tpXS0+ZGV2aWNlLCAmZGV2X2F0dHJfY21fZW5hYmxlKTsKIG91dF9kZXZpY2U6CiAJZGV2aWNlX3VucmVnaXN0ZXIoJmNzc1tpXS0+ZGV2aWNlKTsKK291dF9mcmVlX2FsbDoKKwlrZnJlZShjc3NbaV0tPnBzZXVkb19zdWJjaGFubmVsLT5sb2NrKTsKKwlrZnJlZShjc3NbaV0tPnBzZXVkb19zdWJjaGFubmVsKTsKIG91dF9mcmVlOgogCWtmcmVlKGNzc1tpXSk7CiBvdXRfdW5yZWdpc3RlcjoKIAl3aGlsZSAoaSA+IDApIHsKIAkJaS0tOworCQlkZXZpY2VfdW5yZWdpc3RlcigmY3NzW2ldLT5wc2V1ZG9fc3ViY2hhbm5lbC0+ZGV2KTsKIAkJaWYgKGNzc19jaGFyYWN0ZXJpc3RpY3NfYXZhaWwgJiYgY3NzX2Noc2NfY2hhcmFjdGVyaXN0aWNzLnNlY20pCiAJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNzc1tpXS0+ZGV2aWNlLAogCQkJCQkgICAmZGV2X2F0dHJfY21fZW5hYmxlKTsKQEAgLTY1OCw2ICs2ODcsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgc2NoX2lzX3BzZXVkb19zY2goc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKK3sKKwlyZXR1cm4gc2NoID09IHRvX2NzcyhzY2gtPmRldi5wYXJlbnQpLT5wc2V1ZG9fc3ViY2hhbm5lbDsKK30KKwogLyoKICAqIGZpbmQgYSBkcml2ZXIgZm9yIGEgc3ViY2hhbm5lbC4gVGhleSBpZGVudGlmeSBieSB0aGUgc3ViY2hhbm5lbAogICogdHlwZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgY29uc29sZSBzdWJjaGFubmVsIGRyaXZlciBoYXMgaXRzIG93bgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jc3MuaCBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKaW5kZXggOWZmMDY0ZS4uMzQ2NGM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jc3MuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCkBAIC03Myw2ICs3Myw4IEBACiB9ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkLGFsaWduZWQoNCkpKTsKIAogc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSB7CisJc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKIAlpbnQgc3RhdGU7CQkvKiBkZXZpY2Ugc3RhdGUgKi8KIAlhdG9taWNfdCBvbm9mZjsKIAl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyZWQ7CkBAIC0xNTgsNiArMTYwLDggQEAKIAlpbnQgY21fZW5hYmxlZDsKIAl2b2lkICpjdWJfYWRkcjE7CiAJdm9pZCAqY3ViX2FkZHIyOworCS8qIGZvciBvcnBoYW5lZCBjY3cgZGV2aWNlcyAqLworCXN0cnVjdCBzdWJjaGFubmVsICpwc2V1ZG9fc3ViY2hhbm5lbDsKIH07CiAjZGVmaW5lIHRvX2NzcyhkZXYpIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSwgZGV2aWNlKQogCkBAIC0xODUsNiArMTg5LDExIEBACiBpbnQgY3NzX3Nsb3dfc3ViY2hhbm5lbHNfZXhpc3Qodm9pZCk7CiBleHRlcm4gaW50IG5lZWRfcmVzY2FuOwogCitpbnQgc2NoX2lzX3BzZXVkb19zY2goc3RydWN0IHN1YmNoYW5uZWwgKik7CisKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2xvd19wYXRoX3dxOwogZXh0ZXJuIHN0cnVjdCB3b3JrX3N0cnVjdCBzbG93X3BhdGhfd29yazsKKworaW50IHN1YmNoYW5uZWxfYWRkX2ZpbGVzIChzdHJ1Y3QgZGV2aWNlICopOworZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnN1YmNoX2F0dHJfZ3JvdXBzW107CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IGQzZDM3MTYuLjgwMzU3OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgkJLyogSFogKi8KIAogI2luY2x1ZGUgImNpby5oIgorI2luY2x1ZGUgImNpb19kZWJ1Zy5oIgogI2luY2x1ZGUgImNzcy5oIgogI2luY2x1ZGUgImRldmljZS5oIgogI2luY2x1ZGUgImlvYXNtLmgiCkBAIC0yMzQsOSArMjM1LDExIEBACiAJc3NpemVfdCByZXQgPSAwOwogCWludCBjaHA7CiAKLQlmb3IgKGNocCA9IDA7IGNocCA8IDg7IGNocCsrKQotCQlyZXQgKz0gc3ByaW50ZiAoYnVmK3JldCwgIiUwMnggIiwgc3NkLT5jaHBpZFtjaHBdKTsKLQorCWlmIChzc2QpCisJCWZvciAoY2hwID0gMDsgY2hwIDwgODsgY2hwKyspCisJCQlyZXQgKz0gc3ByaW50ZiAoYnVmK3JldCwgIiUwMnggIiwgc3NkLT5jaHBpZFtjaHBdKTsKKwllbHNlCisJCXJldCArPSBzcHJpbnRmIChidWYsICJuL2EiKTsKIAlyZXQgKz0gc3ByaW50ZiAoYnVmK3JldCwgIlxuIik7CiAJcmV0dXJuIG1pbigoc3NpemVfdClQQUdFX1NJWkUsIHJldCk7CiB9CkBAIC0yOTQsMTQgKzI5Nyw0NCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgY2Rldi0+b25saW5lID8gIjFcbiIgOiAiMFxuIik7CiB9CiAKK2ludCBjY3dfZGV2aWNlX2lzX29ycGhhbihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3sKKwlyZXR1cm4gc2NoX2lzX3BzZXVkb19zY2godG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KSk7Cit9CisKK3N0YXRpYyB2b2lkIGNjd19kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKKworCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSwga2lja193b3JrKTsKKwljZGV2ID0gcHJpdi0+Y2RldjsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KDEsICZjZGV2LT5wcml2YXRlLT5yZWdpc3RlcmVkKSkKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmNkZXYtPmRldik7CisJcHV0X2RldmljZSgmY2Rldi0+ZGV2KTsKK30KKwogc3RhdGljIHZvaWQKIGNjd19kZXZpY2VfcmVtb3ZlX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJLyoKIAkgKiBGb3JjZWQgb2ZmbGluZSBpbiBkaXNjb25uZWN0ZWQgc3RhdGUgbWVhbnMKIAkgKiAndGhyb3cgYXdheSBkZXZpY2UnLgogCSAqLworCWlmIChjY3dfZGV2aWNlX2lzX29ycGhhbihjZGV2KSkgeworCQkvKiBEZXJlZ2lzdGVyIGNjdyBkZXZpY2UuICovCisJCXNwaW5fbG9ja19pcnFzYXZlKGNkZXYtPmNjd2xvY2ssIGZsYWdzKTsKKwkJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfTk9UX09QRVI7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOworCQlpZiAoZ2V0X2RldmljZSgmY2Rldi0+ZGV2KSkgeworCQkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCisJCQkJICAgICBjY3dfZGV2aWNlX3VucmVnaXN0ZXIpOworCQkJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOworCQl9CisJCXJldHVybiA7CisJfQogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihzY2gpOwogCS8qIFJlc2V0IGludHBhcm0gdG8gemVyb2VzLiAqLwpAQCAtNDYyLDYgKzQ5NSw4IEBACiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSB0b19jY3dkZXYoZGV2KTsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwogCisJaWYgKGNjd19kZXZpY2VfaXNfb3JwaGFuKGNkZXYpKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICJubyBkZXZpY2VcbiIpOwogCXN3aXRjaCAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUpIHsKIAljYXNlIERFVl9TVEFURV9CT1hFRDoKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiYm94ZWRcbiIpOwpAQCAtNDk4LDExICs1MzMsMTAgQEAKIAkuYXR0cnMgPSBzdWJjaF9hdHRycywKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1zdWJjaGFubmVsX2FkZF9maWxlcyAoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnN1YmNoX2F0dHJfZ3JvdXApOwotfQorc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqc3ViY2hfYXR0cl9ncm91cHNbXSA9IHsKKwkmc3ViY2hfYXR0cl9ncm91cCwKKwlOVUxMLAorfTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBjY3dkZXZfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfZGV2dHlwZS5hdHRyLApAQCAtNTYzLDExICs1OTcsMTAgQEAKIAogCWNkZXYgPSB0b19jY3dkZXYoZGV2KTsKIAlpZiAoKGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9ESVNDT05ORUNURUQpICYmCisJICAgICFjY3dfZGV2aWNlX2lzX29ycGhhbihjZGV2KSAmJgogCSAgICBjY3dfZGV2X2lkX2lzX2VxdWFsKCZjZGV2LT5wcml2YXRlLT5kZXZfaWQsICZkLT5kZXZfaWQpICYmCi0JICAgIChjZGV2ICE9IGQtPnNpYmxpbmcpKSB7Ci0JCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX05PVF9PUEVSOworCSAgICAoY2RldiAhPSBkLT5zaWJsaW5nKSkKIAkJcmV0dXJuIDE7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC01ODQsMTMgKzYxNywzNiBAQAogCXJldHVybiBkZXYgPyB0b19jY3dkZXYoZGV2KSA6IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkCi1jY3dfZGV2aWNlX2FkZF9jaGFuZ2VkKHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG1hdGNoX29ycGhhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0KKwlzdHJ1Y3QgY2N3X2Rldl9pZCAqZGV2X2lkOwogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwogCi0JY2RldiA9IGRhdGE7CisJZGV2X2lkID0gZGF0YTsKKwljZGV2ID0gdG9fY2N3ZGV2KGRldik7CisJcmV0dXJuIGNjd19kZXZfaWRfaXNfZXF1YWwoJmNkZXYtPnByaXZhdGUtPmRldl9pZCwgZGV2X2lkKTsKK30KKworc3RhdGljIHN0cnVjdCBjY3dfZGV2aWNlICoKK2dldF9vcnBoYW5lZF9jY3dkZXZfYnlfZGV2X2lkKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzLAorCQkJICAgICAgc3RydWN0IGNjd19kZXZfaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlkZXYgPSBkZXZpY2VfZmluZF9jaGlsZCgmY3NzLT5wc2V1ZG9fc3ViY2hhbm5lbC0+ZGV2LCBkZXZfaWQsCisJCQkJbWF0Y2hfb3JwaGFuKTsKKworCXJldHVybiBkZXYgPyB0b19jY3dkZXYoZGV2KSA6IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitjY3dfZGV2aWNlX2FkZF9jaGFuZ2VkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlICpwcml2OworCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OworCisJcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlLCBraWNrX3dvcmspOworCWNkZXYgPSBwcml2LT5jZGV2OwogCWlmIChkZXZpY2VfYWRkKCZjZGV2LT5kZXYpKSB7CiAJCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7CiAJCXJldHVybjsKQEAgLTYwMiw2NCArNjU4LDIxIEBACiAJfQogfQogCi1leHRlcm4gaW50IGNzc19nZXRfc3NkX2luZm8oc3RydWN0IHN1YmNoYW5uZWwgKnNjaCk7Ci0KLXZvaWQKLWNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcodm9pZCAqZGF0YSkKK3ZvaWQgY2N3X2RldmljZV9kb191bnJlZ19yZXJlZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CisJc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwotCWludCBuZWVkX3JlbmFtZTsKIAotCWNkZXYgPSBkYXRhOworCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSwga2lja193b3JrKTsKKwljZGV2ID0gcHJpdi0+Y2RldjsKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwotCWlmIChjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8gIT0gc2NoLT5zY2hpYi5wbWN3LmRldikgewotCQkvKgotCQkgKiBUaGUgZGV2aWNlIG51bWJlciBoYXMgY2hhbmdlZC4gVGhpcyBpcyB1c3VhbGx5IG9ubHkgd2hlbgotCQkgKiBhIGRldmljZSBoYXMgYmVlbiBkZXRhY2hlZCB1bmRlciBWTSBhbmQgdGhlbiByZS1hcHBlYXJlZAotCQkgKiBvbiBhbm90aGVyIHN1YmNoYW5uZWwgYmVjYXVzZSBvZiBhIGRpZmZlcmVudCBhdHRhY2htZW50Ci0JCSAqIG9yZGVyIHRoYW4gYmVmb3JlLiBJZGVhbGx5LCB3ZSBzaG91bGQgc2hvdWxkIGp1c3Qgc3dpdGNoCi0JCSAqIHN1YmNoYW5uZWxzLCBidXQgdW5mb3J0dW5hdGVseSwgdGhpcyBpcyBub3QgcG9zc2libGUgd2l0aAotCQkgKiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KLQkJICogSW5zdGVhZCwgd2Ugc2VhcmNoIGZvciB0aGUgb2xkIHN1YmNoYW5uZWwgZm9yIHRoaXMgZGV2aWNlCi0JCSAqIG51bWJlciBhbmQgZGVyZWdpc3RlciBzbyB0aGVyZSBhcmUgbm8gY29sbGlzaW9ucyB3aXRoIHRoZQotCQkgKiBuZXdseSByZWdpc3RlcmVkIGNjd19kZXZpY2UuCi0JCSAqIEZJWE1FOiBGaW5kIGFub3RoZXIgc29sdXRpb24gc28gdGhlIGJsb2NrIGxheWVyIGRvZXNuJ3QKLQkJICogICAgICAgIGdldCBwb3NzaWJseSBzaWNrLi4uCi0JCSAqLwotCQlzdHJ1Y3QgY2N3X2RldmljZSAqb3RoZXJfY2RldjsKLQkJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOwogCi0JCW5lZWRfcmVuYW1lID0gMTsKLQkJZGV2X2lkLmRldm5vID0gc2NoLT5zY2hpYi5wbWN3LmRldjsKLQkJZGV2X2lkLnNzaWQgPSBzY2gtPnNjaGlkLnNzaWQ7Ci0JCW90aGVyX2NkZXYgPSBnZXRfZGlzY19jY3dkZXZfYnlfZGV2X2lkKCZkZXZfaWQsIGNkZXYpOwotCQlpZiAob3RoZXJfY2RldikgewotCQkJc3RydWN0IHN1YmNoYW5uZWwgKm90aGVyX3NjaDsKLQotCQkJb3RoZXJfc2NoID0gdG9fc3ViY2hhbm5lbChvdGhlcl9jZGV2LT5kZXYucGFyZW50KTsKLQkJCWlmIChnZXRfZGV2aWNlKCZvdGhlcl9zY2gtPmRldikpIHsKLQkJCQlzdHNjaChvdGhlcl9zY2gtPnNjaGlkLCAmb3RoZXJfc2NoLT5zY2hpYik7Ci0JCQkJaWYgKG90aGVyX3NjaC0+c2NoaWIucG1jdy5kbnYpIHsKLQkJCQkJb3RoZXJfc2NoLT5zY2hpYi5wbWN3LmludHBhcm0gPSAwOwotCQkJCQljaW9fbW9kaWZ5KG90aGVyX3NjaCk7Ci0JCQkJfQotCQkJCWNzc19zY2hfZGV2aWNlX3VucmVnaXN0ZXIob3RoZXJfc2NoKTsKLQkJCX0KLQkJfQotCQkvKiBVcGRhdGUgc3NkIGluZm8gaGVyZS4gKi8KLQkJY3NzX2dldF9zc2RfaW5mbyhzY2gpOwotCQljZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8gPSBzY2gtPnNjaGliLnBtY3cuZGV2OwotCX0gZWxzZQotCQluZWVkX3JlbmFtZSA9IDA7CiAJZGV2aWNlX3JlbW92ZV9maWxlcygmY2Rldi0+ZGV2KTsKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KDEsICZjZGV2LT5wcml2YXRlLT5yZWdpc3RlcmVkKSkKIAkJZGV2aWNlX2RlbCgmY2Rldi0+ZGV2KTsKLQlpZiAobmVlZF9yZW5hbWUpCi0JCXNucHJpbnRmIChjZGV2LT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgIjAuJXguJTA0eCIsCi0JCQkgIHNjaC0+c2NoaWQuc3NpZCwgc2NoLT5zY2hpYi5wbWN3LmRldik7CiAJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCSAgICAgY2N3X2RldmljZV9hZGRfY2hhbmdlZCwgY2Rldik7CisJCSAgICAgY2N3X2RldmljZV9hZGRfY2hhbmdlZCk7CiAJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogfQogCkBAIC02NzMsMTggKzY4NiwxOTQgQEAKIAlrZnJlZShjZGV2KTsKIH0KIAorc3RhdGljIHN0cnVjdCBjY3dfZGV2aWNlICogaW9fc3ViY2hhbm5lbF9hbGxvY2F0ZV9kZXYoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKK3sKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKKworCWNkZXYgID0ga3phbGxvYyhzaXplb2YoKmNkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2RldikgeworCQljZGV2LT5wcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSksCisJCQkJCUdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwkJaWYgKGNkZXYtPnByaXZhdGUpCisJCQlyZXR1cm4gY2RldjsKKwl9CisJa2ZyZWUoY2Rldik7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKK3N0YXRpYyBpbnQgaW9fc3ViY2hhbm5lbF9pbml0aWFsaXplX2RldihzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLAorCQkJCQlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3sKKwljZGV2LT5wcml2YXRlLT5jZGV2ID0gY2RldjsKKwlhdG9taWNfc2V0KCZjZGV2LT5wcml2YXRlLT5vbm9mZiwgMCk7CisJY2Rldi0+ZGV2LnBhcmVudCA9ICZzY2gtPmRldjsKKwljZGV2LT5kZXYucmVsZWFzZSA9IGNjd19kZXZpY2VfcmVsZWFzZTsKKwlJTklUX0xJU1RfSEVBRCgmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLmVudHJ5KTsKKwkvKiBEbyBmaXJzdCBoYWxmIG9mIGRldmljZV9yZWdpc3Rlci4gKi8KKwlkZXZpY2VfaW5pdGlhbGl6ZSgmY2Rldi0+ZGV2KTsKKwlpZiAoIWdldF9kZXZpY2UoJnNjaC0+ZGV2KSkgeworCQlpZiAoY2Rldi0+ZGV2LnJlbGVhc2UpCisJCQljZGV2LT5kZXYucmVsZWFzZSgmY2Rldi0+ZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNjd19kZXZpY2UgKiBpb19zdWJjaGFubmVsX2NyZWF0ZV9jY3dkZXYoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKK3sKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKKwlpbnQgcmV0OworCisJY2RldiA9IGlvX3N1YmNoYW5uZWxfYWxsb2NhdGVfZGV2KHNjaCk7CisJaWYgKCFJU19FUlIoY2RldikpIHsKKwkJcmV0ID0gaW9fc3ViY2hhbm5lbF9pbml0aWFsaXplX2RldihzY2gsIGNkZXYpOworCQlpZiAocmV0KSB7CisJCQlrZnJlZShjZGV2KTsKKwkJCWNkZXYgPSBFUlJfUFRSKHJldCk7CisJCX0KKwl9CisJcmV0dXJuIGNkZXY7Cit9CisKK3N0YXRpYyBpbnQgaW9fc3ViY2hhbm5lbF9yZWNvZyhzdHJ1Y3QgY2N3X2RldmljZSAqLCBzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKKworc3RhdGljIHZvaWQgc2NoX2F0dGFjaF9kZXZpY2Uoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwKKwkJCSAgICAgIHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQoreworCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKKwlzY2gtPmRldi5kcml2ZXJfZGF0YSA9IGNkZXY7CisJY2Rldi0+cHJpdmF0ZS0+c2NoaWQgPSBzY2gtPnNjaGlkOworCWNkZXYtPmNjd2xvY2sgPSBzY2gtPmxvY2s7CisJZGV2aWNlX3RyaWdnZXJfcmVwcm9iZShzY2gpOworCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBzY2hfYXR0YWNoX2Rpc2Nvbm5lY3RlZF9kZXZpY2Uoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwKKwkJCQkJICAgc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCit7CisJc3RydWN0IHN1YmNoYW5uZWwgKm90aGVyX3NjaDsKKwlpbnQgcmV0OworCisJb3RoZXJfc2NoID0gdG9fc3ViY2hhbm5lbChnZXRfZGV2aWNlKGNkZXYtPmRldi5wYXJlbnQpKTsKKwlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYpOworCWlmIChyZXQpIHsKKwkJQ0lPX01TR19FVkVOVCgyLCAiTW92aW5nIGRpc2Nvbm5lY3RlZCBkZXZpY2UgMC4leC4lMDR4IGZhaWxlZCAiCisJCQkgICAgICAiKHJldD0lZCkhXG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKKwkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywgcmV0KTsKKwkJcHV0X2RldmljZSgmb3RoZXJfc2NoLT5kZXYpOworCQlyZXR1cm47CisJfQorCW90aGVyX3NjaC0+ZGV2LmRyaXZlcl9kYXRhID0gTlVMTDsKKwkvKiBObyBuZWVkIHRvIGtlZXAgYSBzdWJjaGFubmVsIHdpdGhvdXQgY2N3IGRldmljZSBhcm91bmQuICovCisJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihvdGhlcl9zY2gpOworCXB1dF9kZXZpY2UoJm90aGVyX3NjaC0+ZGV2KTsKKwlzY2hfYXR0YWNoX2RldmljZShzY2gsIGNkZXYpOworfQorCitzdGF0aWMgdm9pZCBzY2hfYXR0YWNoX29ycGhhbmVkX2RldmljZShzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLAorCQkJCSAgICAgICBzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3sKKwlpbnQgcmV0OworCisJLyogVHJ5IHRvIG1vdmUgdGhlIGNjdyBkZXZpY2UgdG8gaXRzIG5ldyBzdWJjaGFubmVsLiAqLworCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldik7CisJaWYgKHJldCkgeworCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGV2aWNlIDAuJXguJTA0eCBmcm9tIG9ycGhhbmFnZSAiCisJCQkgICAgICAiZmFpbGVkIChyZXQ9JWQpIVxuIiwKKwkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLAorCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLCByZXQpOworCQlyZXR1cm47CisJfQorCXNjaF9hdHRhY2hfZGV2aWNlKHNjaCwgY2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHNjaF9jcmVhdGVfYW5kX3JlY29nX25ld19kZXZpY2Uoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKK3sKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKKworCS8qIE5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgY2N3IGRldmljZS4gKi8KKwljZGV2ID0gaW9fc3ViY2hhbm5lbF9jcmVhdGVfY2N3ZGV2KHNjaCk7CisJaWYgKElTX0VSUihjZGV2KSkgeworCQkvKiBPSywgd2UgZGlkIGV2ZXJ5dGhpbmcgd2UgY291bGQuLi4gKi8KKwkJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihzY2gpOworCQlyZXR1cm47CisJfQorCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKKwlzY2gtPmRldi5kcml2ZXJfZGF0YSA9IGNkZXY7CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CisJLyogU3RhcnQgcmVjb2duaXRpb24gZm9yIHRoZSBuZXcgY2N3IGRldmljZS4gKi8KKwlpZiAoaW9fc3ViY2hhbm5lbF9yZWNvZyhjZGV2LCBzY2gpKSB7CisJCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKKwkJc2NoLT5kZXYuZHJpdmVyX2RhdGEgPSBOVUxMOworCQlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKKwkJaWYgKGNkZXYtPmRldi5yZWxlYXNlKQorCQkJY2Rldi0+ZGV2LnJlbGVhc2UoJmNkZXYtPmRldik7CisJCWNzc19zY2hfZGV2aWNlX3VucmVnaXN0ZXIoc2NoKTsKKwl9Cit9CisKKwordm9pZCBjY3dfZGV2aWNlX21vdmVfdG9fb3JwaGFuYWdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlICpwcml2OworCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OworCXN0cnVjdCBjY3dfZGV2aWNlICpyZXBsYWNpbmdfY2RldjsKKwlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOworCWludCByZXQ7CisJc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3M7CisJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOworCisJcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlLCBraWNrX3dvcmspOworCWNkZXYgPSBwcml2LT5jZGV2OworCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CisJY3NzID0gdG9fY3NzKHNjaC0+ZGV2LnBhcmVudCk7CisJZGV2X2lkLmRldm5vID0gc2NoLT5zY2hpYi5wbWN3LmRldjsKKwlkZXZfaWQuc3NpZCA9IHNjaC0+c2NoaWQuc3NpZDsKKworCS8qCisJICogTW92ZSB0aGUgb3JwaGFuZWQgY2N3IGRldmljZSB0byB0aGUgb3JwaGFuYWdlIHNvIHRoZSByZXBsYWNpbmcKKwkgKiBjY3cgZGV2aWNlIGNhbiB0YWtlIGl0cyBwbGFjZSBvbiB0aGUgc3ViY2hhbm5lbC4KKwkgKi8KKwlyZXQgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmY3NzLT5wc2V1ZG9fc3ViY2hhbm5lbC0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCUNJT19NU0dfRVZFTlQoMCwgIk1vdmluZyBkZXZpY2UgMC4leC4lMDR4IHRvIG9ycGhhbmFnZSBmYWlsZWQgIgorCQkJICAgICAgIihyZXQ9JWQpIVxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCisJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHJldCk7CisJCXJldHVybjsKKwl9CisJY2Rldi0+Y2N3bG9jayA9IGNzcy0+cHNldWRvX3N1YmNoYW5uZWwtPmxvY2s7CisJLyoKKwkgKiBTZWFyY2ggZm9yIHRoZSByZXBsYWNpbmcgY2N3IGRldmljZQorCSAqIC0gYW1vbmcgdGhlIGRpc2Nvbm5lY3RlZCBkZXZpY2VzCisJICogLSBpbiB0aGUgb3JwaGFuYWdlCisJICovCisJcmVwbGFjaW5nX2NkZXYgPSBnZXRfZGlzY19jY3dkZXZfYnlfZGV2X2lkKCZkZXZfaWQsIGNkZXYpOworCWlmIChyZXBsYWNpbmdfY2RldikgeworCQlzY2hfYXR0YWNoX2Rpc2Nvbm5lY3RlZF9kZXZpY2Uoc2NoLCByZXBsYWNpbmdfY2Rldik7CisJCXJldHVybjsKKwl9CisJcmVwbGFjaW5nX2NkZXYgPSBnZXRfb3JwaGFuZWRfY2N3ZGV2X2J5X2Rldl9pZChjc3MsICZkZXZfaWQpOworCWlmIChyZXBsYWNpbmdfY2RldikgeworCQlzY2hfYXR0YWNoX29ycGhhbmVkX2RldmljZShzY2gsIHJlcGxhY2luZ19jZGV2KTsKKwkJcmV0dXJuOworCX0KKwlzY2hfY3JlYXRlX2FuZF9yZWNvZ19uZXdfZGV2aWNlKHNjaCk7Cit9CisKIC8qCiAgKiBSZWdpc3RlciByZWNvZ25pemVkIGRldmljZS4KICAqLwogc3RhdGljIHZvaWQKLWlvX3N1YmNoYW5uZWxfcmVnaXN0ZXIodm9pZCAqZGF0YSkKK2lvX3N1YmNoYW5uZWxfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogeworCXN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQljZGV2ID0gZGF0YTsKKwlwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUsIGtpY2tfd29yayk7CisJY2RldiA9IHByaXYtPmNkZXY7CiAJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAogCS8qCkBAIC03MDksOSArODk4LDkgQEAKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiBjb3VsZCBub3QgcmVnaXN0ZXIgJXNcbiIsCiAJCQlfX2Z1bmNfXywgY2Rldi0+ZGV2LmJ1c19pZCk7CiAJCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzY2gtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2NoLT5sb2NrLCBmbGFncyk7CiAJCXNjaC0+ZGV2LmRyaXZlcl9kYXRhID0gTlVMTDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NoLT5sb2NrLCBmbGFncyk7CiAJCWtmcmVlIChjZGV2LT5wcml2YXRlKTsKIAkJa2ZyZWUgKGNkZXYpOwogCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7CkBAIC03MTksMTEgKzkwOCw2IEBACiAJCQl3YWtlX3VwKCZjY3dfZGV2aWNlX2luaXRfd3EpOwogCQlyZXR1cm47CiAJfQotCi0JcmV0ID0gc3ViY2hhbm5lbF9hZGRfZmlsZXMoY2Rldi0+ZGV2LnBhcmVudCk7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNvdWxkIG5vdCBhZGQgYXR0cmlidXRlcyB0byAlc1xuIiwKLQkJICAgICAgIF9fZnVuY19fLCBzY2gtPmRldi5idXNfaWQpOwogCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7CiBvdXQ6CiAJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVjb2dfZG9uZSA9IDE7CkBAIC03MzQsMTEgKzkxOCwxNCBAQAogfQogCiB2b2lkCi1jY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIodm9pZCAqZGF0YSkKK2Njd19kZXZpY2VfY2FsbF9zY2hfdW5yZWdpc3RlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSBkYXRhOworCXN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKIAorCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSwga2lja193b3JrKTsKKwljZGV2ID0gcHJpdi0+Y2RldjsKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCWNzc19zY2hfZGV2aWNlX3VucmVnaXN0ZXIoc2NoKTsKIAkvKiBSZXNldCBpbnRwYXJtIHRvIHplcm9lcy4gKi8KQEAgLTc2OCw3ICs5NTUsNyBAQAogCQkJYnJlYWs7CiAJCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAotCQkJICAgICBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIsIGNkZXYpOworCQkJICAgICBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIpOwogCQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiAJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjY3dfZGV2aWNlX2luaXRfY291bnQpKQogCQkJd2FrZV91cCgmY2N3X2RldmljZV9pbml0X3dxKTsKQEAgLTc4Myw3ICs5NzAsNyBAQAogCQlpZiAoIWdldF9kZXZpY2UoJmNkZXYtPmRldikpCiAJCQlicmVhazsKIAkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCQkgICAgIGlvX3N1YmNoYW5uZWxfcmVnaXN0ZXIsIGNkZXYpOworCQkJICAgICBpb19zdWJjaGFubmVsX3JlZ2lzdGVyKTsKIAkJcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogCQlicmVhazsKIAl9CkBAIC03OTcsNyArOTg0LDcgQEAKIAogCXNjaC0+ZGV2LmRyaXZlcl9kYXRhID0gY2RldjsKIAlzY2gtPmRyaXZlciA9ICZpb19zdWJjaGFubmVsX2RyaXZlcjsKLQljZGV2LT5jY3dsb2NrID0gJnNjaC0+bG9jazsKKwljZGV2LT5jY3dsb2NrID0gc2NoLT5sb2NrOwogCiAJLyogSW5pdCBwcml2YXRlIGRhdGEuICovCiAJcHJpdiA9IGNkZXYtPnByaXZhdGU7CkBAIC04MTcsOSArMTAwNCw5IEBACiAJYXRvbWljX2luYygmY2N3X2RldmljZV9pbml0X2NvdW50KTsKIAogCS8qIFN0YXJ0IGFzeW5jLiBkZXZpY2Ugc2Vuc2luZy4gKi8KLQlzcGluX2xvY2tfaXJxKCZzY2gtPmxvY2spOworCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKIAlyYyA9IGNjd19kZXZpY2VfcmVjb2duaXRpb24oY2Rldik7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZzY2gtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCWlmIChyYykgewogCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2N3X2RldmljZV9pbml0X2NvdW50KSkKIAkJCXdha2VfdXAoJmNjd19kZXZpY2VfaW5pdF93cSk7CkBAIC04MjcsMTIgKzEwMTQsNTUgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkIGNjd19kZXZpY2VfbW92ZV90b19zY2goc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXY7CisJaW50IHJjOworCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CisJc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7CisJc3RydWN0IHN1YmNoYW5uZWwgKmZvcm1lcl9wYXJlbnQ7CisKKwlwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUsIGtpY2tfd29yayk7CisJc2NoID0gcHJpdi0+c2NoOworCWNkZXYgPSBwcml2LT5jZGV2OworCWZvcm1lcl9wYXJlbnQgPSBjY3dfZGV2aWNlX2lzX29ycGhhbihjZGV2KSA/CisJCU5VTEwgOiB0b19zdWJjaGFubmVsKGdldF9kZXZpY2UoY2Rldi0+ZGV2LnBhcmVudCkpOworCW11dGV4X2xvY2soJnNjaC0+cmVnX211dGV4KTsKKwkvKiBUcnkgdG8gbW92ZSB0aGUgY2N3IGRldmljZSB0byBpdHMgbmV3IHN1YmNoYW5uZWwuICovCisJcmMgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYpOworCW11dGV4X3VubG9jaygmc2NoLT5yZWdfbXV0ZXgpOworCWlmIChyYykgeworCQlDSU9fTVNHX0VWRU5UKDIsICJNb3ZpbmcgZGV2aWNlIDAuJXguJTA0eCB0byBzdWJjaGFubmVsICIKKwkJCSAgICAgICIwLiV4LiUwNHggZmFpbGVkIChyZXQ9JWQpIVxuIiwKKwkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLAorCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLCBzY2gtPnNjaGlkLnNzaWQsCisJCQkgICAgICBzY2gtPnNjaGlkLnNjaF9ubywgcmMpOworCQljc3Nfc2NoX2RldmljZV91bnJlZ2lzdGVyKHNjaCk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoZm9ybWVyX3BhcmVudCkgeworCQlzcGluX2xvY2tfaXJxKGZvcm1lcl9wYXJlbnQtPmxvY2spOworCQlmb3JtZXJfcGFyZW50LT5kZXYuZHJpdmVyX2RhdGEgPSBOVUxMOworCQlzcGluX3VubG9ja19pcnEoZm9ybWVyX3BhcmVudC0+bG9jayk7CisJCWNzc19zY2hfZGV2aWNlX3VucmVnaXN0ZXIoZm9ybWVyX3BhcmVudCk7CisJCS8qIFJlc2V0IGludHBhcm0gdG8gemVyb2VzLiAqLworCQlmb3JtZXJfcGFyZW50LT5zY2hpYi5wbWN3LmludHBhcm0gPSAwOworCQljaW9fbW9kaWZ5KGZvcm1lcl9wYXJlbnQpOworCX0KKwlzY2hfYXR0YWNoX2RldmljZShzY2gsIGNkZXYpOworb3V0OgorCWlmIChmb3JtZXJfcGFyZW50KQorCQlwdXRfZGV2aWNlKCZmb3JtZXJfcGFyZW50LT5kZXYpOworCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7Cit9CisKIHN0YXRpYyBpbnQKIGlvX3N1YmNoYW5uZWxfcHJvYmUgKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOwogCiAJaWYgKHNjaC0+ZGV2LmRyaXZlcl9kYXRhKSB7CiAJCS8qCkBAIC04NDMsNyArMTA3Myw2IEBACiAJCWNkZXYgPSBzY2gtPmRldi5kcml2ZXJfZGF0YTsKIAkJZGV2aWNlX2luaXRpYWxpemUoJmNkZXYtPmRldik7CiAJCWNjd19kZXZpY2VfcmVnaXN0ZXIoY2Rldik7Ci0JCXN1YmNoYW5uZWxfYWRkX2ZpbGVzKCZzY2gtPmRldik7CiAJCS8qCiAJCSAqIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBvbmxpbmUuIElmIGl0IGlzCiAJCSAqIHRoZSByZWZlcmVuY2UgY291bnQgbmVlZHMgdG8gYmUgY29ycmVjdGVkCkBAIC04NTYsMzMgKzEwODUsMzcgQEAKIAkJCWdldF9kZXZpY2UoJmNkZXYtPmRldik7CiAJCXJldHVybiAwOwogCX0KLQljZGV2ID0ga3phbGxvYyAoc2l6ZW9mKCpjZGV2KSwgR0ZQX0tFUk5FTCk7CisJLyoKKwkgKiBGaXJzdCBjaGVjayBpZiBhIGZpdHRpbmcgZGV2aWNlIG1heSBiZSBmb3VuZCBhbW9uZ3N0IHRoZQorCSAqIGRpc2Nvbm5lY3RlZCBkZXZpY2VzIG9yIGluIHRoZSBvcnBoYW5hZ2UuCisJICovCisJZGV2X2lkLmRldm5vID0gc2NoLT5zY2hpYi5wbWN3LmRldjsKKwlkZXZfaWQuc3NpZCA9IHNjaC0+c2NoaWQuc3NpZDsKKwljZGV2ID0gZ2V0X2Rpc2NfY2N3ZGV2X2J5X2Rldl9pZCgmZGV2X2lkLCBOVUxMKTsKIAlpZiAoIWNkZXYpCi0JCXJldHVybiAtRU5PTUVNOwotCWNkZXYtPnByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlKSwKLQkJCQlHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JaWYgKCFjZGV2LT5wcml2YXRlKSB7Ci0JCWtmcmVlKGNkZXYpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJY2RldiA9IGdldF9vcnBoYW5lZF9jY3dkZXZfYnlfZGV2X2lkKHRvX2NzcyhzY2gtPmRldi5wYXJlbnQpLAorCQkJCQkJICAgICAmZGV2X2lkKTsKKwlpZiAoY2RldikgeworCQkvKgorCQkgKiBTY2hlZHVsZSBtb3ZpbmcgdGhlIGRldmljZSB1bnRpbCB3aGVuIHdlIGhhdmUgYSByZWdpc3RlcmVkCisJCSAqIHN1YmNoYW5uZWwgdG8gbW92ZSB0byBhbmQgc3VjY2VlZCB0aGUgcHJvYmUuIFdlIGNhbgorCQkgKiB1bnJlZ2lzdGVyIGxhdGVyIGFnYWluLCB3aGVuIHRoZSBwcm9iZSBpcyB0aHJvdWdoLgorCQkgKi8KKwkJY2Rldi0+cHJpdmF0ZS0+c2NoID0gc2NoOworCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKKwkJCSAgICAgY2N3X2RldmljZV9tb3ZlX3RvX3NjaCk7CisJCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKKwkJcmV0dXJuIDA7CiAJfQotCWF0b21pY19zZXQoJmNkZXYtPnByaXZhdGUtPm9ub2ZmLCAwKTsKLQljZGV2LT5kZXYucGFyZW50ID0gJnNjaC0+ZGV2OwotCWNkZXYtPmRldi5yZWxlYXNlID0gY2N3X2RldmljZV9yZWxlYXNlOwotCUlOSVRfTElTVF9IRUFEKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmsuZW50cnkpOwotCS8qIERvIGZpcnN0IGhhbGYgb2YgZGV2aWNlX3JlZ2lzdGVyLiAqLwotCWRldmljZV9pbml0aWFsaXplKCZjZGV2LT5kZXYpOwotCi0JaWYgKCFnZXRfZGV2aWNlKCZzY2gtPmRldikpIHsKLQkJaWYgKGNkZXYtPmRldi5yZWxlYXNlKQotCQkJY2Rldi0+ZGV2LnJlbGVhc2UoJmNkZXYtPmRldik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwljZGV2ID0gaW9fc3ViY2hhbm5lbF9jcmVhdGVfY2N3ZGV2KHNjaCk7CisJaWYgKElTX0VSUihjZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoY2Rldik7CiAKIAlyYyA9IGlvX3N1YmNoYW5uZWxfcmVjb2coY2Rldiwgc2NoKTsKIAlpZiAocmMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaC0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZShzY2gtPmxvY2ssIGZsYWdzKTsKIAkJc2NoLT5kZXYuZHJpdmVyX2RhdGEgPSBOVUxMOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2gtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzY2gtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKGNkZXYtPmRldi5yZWxlYXNlKQogCQkJY2Rldi0+ZGV2LnJlbGVhc2UoJmNkZXYtPmRldik7CiAJfQpAQCAtODkwLDE3ICsxMTIzLDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkCi1jY3dfZGV2aWNlX3VucmVnaXN0ZXIodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKLQotCWNkZXYgPSAoc3RydWN0IGNjd19kZXZpY2UgKilkYXRhOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMSwgJmNkZXYtPnByaXZhdGUtPnJlZ2lzdGVyZWQpKQotCQlkZXZpY2VfdW5yZWdpc3RlcigmY2Rldi0+ZGV2KTsKLQlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOwotfQotCiBzdGF0aWMgaW50CiBpb19zdWJjaGFubmVsX3JlbW92ZSAoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKIHsKQEAgLTkyMSw3ICsxMTQzLDcgQEAKIAkgKi8KIAlpZiAoZ2V0X2RldmljZSgmY2Rldi0+ZGV2KSkgewogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCSAgICAgY2N3X2RldmljZV91bnJlZ2lzdGVyLCBjZGV2KTsKKwkJCSAgICAgY2N3X2RldmljZV91bnJlZ2lzdGVyKTsKIAkJcXVldWVfd29yayhjY3dfZGV2aWNlX3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMDMsNiArMTIyNSwxMyBAQAogc3RhdGljIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgY29uc29sZV9wcml2YXRlOwogc3RhdGljIGludCBjb25zb2xlX2NkZXZfaW5fdXNlOwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNjd19jb25zb2xlX2xvY2spOworCitzcGlubG9ja190ICogY2lvX2dldF9jb25zb2xlX2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gJmNjd19jb25zb2xlX2xvY2s7Cit9CisKIHN0YXRpYyBpbnQKIGNjd19kZXZpY2VfY29uc29sZV9lbmFibGUgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKQogewpAQCAtMTA0OCw2ICsxMjc3LDcgQEAKIAltZW1zZXQoJmNvbnNvbGVfY2RldiwgMCwgc2l6ZW9mKHN0cnVjdCBjY3dfZGV2aWNlKSk7CiAJbWVtc2V0KCZjb25zb2xlX3ByaXZhdGUsIDAsIHNpemVvZihzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlKSk7CiAJY29uc29sZV9jZGV2LnByaXZhdGUgPSAmY29uc29sZV9wcml2YXRlOworCWNvbnNvbGVfcHJpdmF0ZS5jZGV2ID0gJmNvbnNvbGVfY2RldjsKIAlyZXQgPSBjY3dfZGV2aWNlX2NvbnNvbGVfZW5hYmxlKCZjb25zb2xlX2NkZXYsIHNjaCk7CiAJaWYgKHJldCkgewogCQljaW9fcmVsZWFzZV9jb25zb2xlKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAppbmRleCA5MjMzYjVjLi4yOWRiNjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKQEAgLTc4LDggKzc4LDEwIEBACiAKIGludCBjY3dfZGV2aWNlX2NhbmNlbF9oYWx0X2NsZWFyKHN0cnVjdCBjY3dfZGV2aWNlICopOwogCi12b2lkIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcodm9pZCAqKTsKLXZvaWQgY2N3X2RldmljZV9jYWxsX3NjaF91bnJlZ2lzdGVyKHZvaWQgKik7Cit2b2lkIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCBjY3dfZGV2aWNlX21vdmVfdG9fb3JwaGFuYWdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK2ludCBjY3dfZGV2aWNlX2lzX29ycGhhbihzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIAogaW50IGNjd19kZXZpY2VfcmVjb2duaXRpb24oc3RydWN0IGNjd19kZXZpY2UgKik7CiBpbnQgY2N3X2RldmljZV9vbmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IDA5Yzc2NzIuLmVlZDE0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC0xODYsMTUgKzE4NiwxNCBAQAogCS8qCiAJICogQ2hlY2sgaWYgY3UgdHlwZSBhbmQgZGV2aWNlIHR5cGUgc3RpbGwgbWF0Y2guIElmCiAJICogbm90LCBpdCBpcyBjZXJ0YWlubHkgYW5vdGhlciBkZXZpY2UgYW5kIHdlIGhhdmUgdG8KLQkgKiBkZS0gYW5kIHJlLXJlZ2lzdGVyLiBBbHNvIGNoZWNrIGhlcmUgZm9yIG5vbi1tYXRjaGluZyBkZXZuby4KKwkgKiBkZS0gYW5kIHJlLXJlZ2lzdGVyLgogCSAqLwogCWlmIChjZGV2LT5pZC5jdV90eXBlICE9IGNkZXYtPnByaXZhdGUtPnNlbnNlaWQuY3VfdHlwZSB8fAogCSAgICBjZGV2LT5pZC5jdV9tb2RlbCAhPSBjZGV2LT5wcml2YXRlLT5zZW5zZWlkLmN1X21vZGVsIHx8CiAJICAgIGNkZXYtPmlkLmRldl90eXBlICE9IGNkZXYtPnByaXZhdGUtPnNlbnNlaWQuZGV2X3R5cGUgfHwKLQkgICAgY2Rldi0+aWQuZGV2X21vZGVsICE9IGNkZXYtPnByaXZhdGUtPnNlbnNlaWQuZGV2X21vZGVsIHx8Ci0JICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubyAhPSBzY2gtPnNjaGliLnBtY3cuZGV2KSB7CisJICAgIGNkZXYtPmlkLmRldl9tb2RlbCAhPSBjZGV2LT5wcml2YXRlLT5zZW5zZWlkLmRldl9tb2RlbCkgewogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCSAgICAgY2N3X2RldmljZV9kb191bnJlZ19yZXJlZywgY2Rldik7CisJCQkgICAgIGNjd19kZXZpY2VfZG9fdW5yZWdfcmVyZWcpOwogCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiAJCXJldHVybiAwOwogCX0KQEAgLTMyOSwxOSArMzI4LDIxIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1jY3dfZGV2aWNlX29wZXJfbm90aWZ5KHZvaWQgKmRhdGEpCitjY3dfZGV2aWNlX29wZXJfbm90aWZ5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlICpwcml2OwogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CiAJaW50IHJldDsKIAotCWNkZXYgPSBkYXRhOworCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSwga2lja193b3JrKTsKKwljZGV2ID0gcHJpdi0+Y2RldjsKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCXJldCA9IChzY2gtPmRyaXZlciAmJiBzY2gtPmRyaXZlci0+bm90aWZ5KSA/CiAJCXNjaC0+ZHJpdmVyLT5ub3RpZnkoJnNjaC0+ZGV2LCBDSU9fT1BFUikgOiAwOwogCWlmICghcmV0KQogCQkvKiBEcml2ZXIgZG9lc24ndCB3YW50IGRldmljZSBiYWNrLiAqLwotCQljY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKGNkZXYpOworCQljY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKHdvcmspOwogCWVsc2UgewogCQkvKiBSZWVuYWJsZSBjaGFubmVsIG1lYXN1cmVtZW50cywgaWYgbmVlZGVkLiAqLwogCQljbWZfcmVlbmFibGUoY2Rldik7CkBAIC0zNzcsOCArMzc4LDcgQEAKIAogCWlmIChjZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSkgewogCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7Ci0JCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLCBjY3dfZGV2aWNlX29wZXJfbm90aWZ5LAotCQkJICAgICBjZGV2KTsKKwkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssIGNjd19kZXZpY2Vfb3Blcl9ub3RpZnkpOwogCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfbm90aWZ5X3dvcmssICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogCX0KIAl3YWtlX3VwKCZjZGV2LT5wcml2YXRlLT53YWl0X3EpOwpAQCAtNTI4LDEzICs1MjgsMTUgQEAKIAogCiBzdGF0aWMgdm9pZAotY2N3X2RldmljZV9ub3BhdGhfbm90aWZ5KHZvaWQgKmRhdGEpCitjY3dfZGV2aWNlX25vcGF0aF9ub3RpZnkoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogeworCXN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKIAlpbnQgcmV0OwogCi0JY2RldiA9IGRhdGE7CisJcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlLCBraWNrX3dvcmspOworCWNkZXYgPSBwcml2LT5jZGV2OwogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJLyogRXh0cmEgc2FuaXR5LiAqLwogCWlmIChzY2gtPmxwbSkKQEAgLTU0Nyw4ICs1NDksNyBAQAogCQkJY2lvX2Rpc2FibGVfc3ViY2hhbm5lbChzY2gpOwogCQkJaWYgKGdldF9kZXZpY2UoJmNkZXYtPmRldikpIHsKIAkJCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCQkJICAgICBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIsCi0JCQkJCSAgICAgY2Rldik7CisJCQkJCSAgICAgY2N3X2RldmljZV9jYWxsX3NjaF91bnJlZ2lzdGVyKTsKIAkJCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywKIAkJCQkJICAgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiAJCQl9IGVsc2UKQEAgLTYwNyw3ICs2MDgsNyBAQAogCQkvKiBSZXNldCBvcGVyIG5vdGlmeSBpbmRpY2F0aW9uIGFmdGVyIHZlcmlmeSBlcnJvci4gKi8KIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOwogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCSAgICAgY2N3X2RldmljZV9ub3BhdGhfbm90aWZ5LCBjZGV2KTsKKwkJCSAgICAgY2N3X2RldmljZV9ub3BhdGhfbm90aWZ5KTsKIAkJcXVldWVfd29yayhjY3dfZGV2aWNlX25vdGlmeV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKIAkJY2N3X2RldmljZV9kb25lKGNkZXYsIERFVl9TVEFURV9OT1RfT1BFUik7CiAJCWJyZWFrOwpAQCAtNjc0LDYgKzY3NSwxMCBAQAogewogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CiAKKwlpZiAoY2N3X2RldmljZV9pc19vcnBoYW4oY2RldikpIHsKKwkJY2N3X2RldmljZV9kb25lKGNkZXYsIERFVl9TVEFURV9PRkZMSU5FKTsKKwkJcmV0dXJuIDA7CisJfQogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJaWYgKHN0c2NoKHNjaC0+c2NoaWQsICZzY2gtPnNjaGliKSB8fCAhc2NoLT5zY2hpYi5wbWN3LmRudikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC03MzgsNyArNzQzLDcgQEAKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCWlmIChnZXRfZGV2aWNlKCZjZGV2LT5kZXYpKSB7CiAJCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAotCQkJICAgICBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIsIGNkZXYpOworCQkJICAgICBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIpOwogCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiAJfQogCXdha2VfdXAoJmNkZXYtPnByaXZhdGUtPndhaXRfcSk7CkBAIC03NjksNyArNzc0LDcgQEAKIAl9CiAJaWYgKGdldF9kZXZpY2UoJmNkZXYtPmRldikpIHsKIAkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCQkgICAgIGNjd19kZXZpY2VfY2FsbF9zY2hfdW5yZWdpc3RlciwgY2Rldik7CisJCQkgICAgIGNjd19kZXZpY2VfY2FsbF9zY2hfdW5yZWdpc3Rlcik7CiAJCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKIAl9CiAJd2FrZV91cCgmY2Rldi0+cHJpdmF0ZS0+d2FpdF9xKTsKQEAgLTg3NCw3ICs4NzksNyBAQAogCQlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCQlpZiAoIXNjaC0+bHBtKSB7CiAJCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCQkgICAgIGNjd19kZXZpY2Vfbm9wYXRoX25vdGlmeSwgY2Rldik7CisJCQkJICAgICBjY3dfZGV2aWNlX25vcGF0aF9ub3RpZnkpOwogCQkJcXVldWVfd29yayhjY3dfZGV2aWNlX25vdGlmeV93b3JrLAogCQkJCSAgICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogCQl9IGVsc2UKQEAgLTk2OSw3ICs5NzQsNyBAQAogCQkJICAgICAgRVJSX1BUUigtRUlPKSk7CiAJaWYgKCFzY2gtPmxwbSkgewogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCSAgICAgY2N3X2RldmljZV9ub3BhdGhfbm90aWZ5LCBjZGV2KTsKKwkJCSAgICAgY2N3X2RldmljZV9ub3BhdGhfbm90aWZ5KTsKIAkJcXVldWVfd29yayhjY3dfZGV2aWNlX25vdGlmeV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKIAl9IGVsc2UgaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLmRvdmVyaWZ5KQogCQkvKiBTdGFydCBkZWxheWVkIHBhdGggdmVyaWZpY2F0aW9uLiAqLwpAQCAtOTkyLDcgKzk5Nyw3IEBACiAJCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJCWlmICghc2NoLT5scG0pIHsKIAkJCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAotCQkJCSAgICAgY2N3X2RldmljZV9ub3BhdGhfbm90aWZ5LCBjZGV2KTsKKwkJCQkgICAgIGNjd19kZXZpY2Vfbm9wYXRoX25vdGlmeSk7CiAJCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfbm90aWZ5X3dvcmssCiAJCQkJICAgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiAJCX0gZWxzZQpAQCAtMTAyMSw3ICsxMDI2LDcgQEAKIAlpZiAocmV0ID09IC1FTk9ERVYpIHsKIAkJaWYgKCFzY2gtPmxwbSkgewogCQkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCQkJICAgICBjY3dfZGV2aWNlX25vcGF0aF9ub3RpZnksIGNkZXYpOworCQkJCSAgICAgY2N3X2RldmljZV9ub3BhdGhfbm90aWZ5KTsKIAkJCXF1ZXVlX3dvcmsoY2N3X2RldmljZV9ub3RpZnlfd29yaywKIAkJCQkgICAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKIAkJfSBlbHNlCkBAIC0xMDMzLDcgKzEwMzgsNyBAQAogCQkJICAgICAgRVJSX1BUUigtRUlPKSk7CiAJaWYgKCFzY2gtPmxwbSkgewogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCSAgICAgY2N3X2RldmljZV9ub3BhdGhfbm90aWZ5LCBjZGV2KTsKKwkJCSAgICAgY2N3X2RldmljZV9ub3BhdGhfbm90aWZ5KTsKIAkJcXVldWVfd29yayhjY3dfZGV2aWNlX25vdGlmeV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKIAl9IGVsc2UKIAkJLyogU3RhcnQgZGVsYXllZCBwYXRoIHZlcmlmaWNhdGlvbi4gKi8KQEAgLTExMDQsNyArMTEwOSw4IEBACiAJLyogVXBkYXRlIHNvbWUgdmFsdWVzLiAqLwogCWlmIChzdHNjaChzY2gtPnNjaGlkLCAmc2NoLT5zY2hpYikpCiAJCXJldHVybjsKLQorCWlmICghc2NoLT5zY2hpYi5wbWN3LmRudikKKwkJcmV0dXJuOwogCS8qCiAJICogVGhlIHBpbSwgcGFtLCBwb20gdmFsdWVzIG1heSBub3QgYmUgYWNjdXJhdGUsIGJ1dCB0aGV5IGFyZSB0aGUgYmVzdAogCSAqIHdlIGhhdmUgYmVmb3JlIHBlcmZvcm1pbmcgZGV2aWNlIHNlbGVjdGlvbiA6LwpAQCAtMTExOCw3ICsxMTI0LDEzIEBACiAJCXNjaC0+c2NoaWIucG1jdy5tcCA9IDE7CiAJc2NoLT5zY2hpYi5wbWN3LmludHBhcm0gPSAoX191MzIpKHVuc2lnbmVkIGxvbmcpc2NoOwogCS8qIFdlIHNob3VsZCBhbHNvIHVkYXRlIHNzZCBpbmZvLCBidXQgdGhpcyBoYXMgdG8gd2FpdC4gKi8KLQljY3dfZGV2aWNlX3N0YXJ0X2lkKGNkZXYsIDApOworCS8qIENoZWNrIGlmIHRoaXMgaXMgYW5vdGhlciBkZXZpY2Ugd2hpY2ggYXBwZWFyZWQgb24gdGhlIHNhbWUgc2NoLiAqLworCWlmIChzY2gtPnNjaGliLnBtY3cuZGV2ICE9IGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubykgeworCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKKwkJCSAgICAgY2N3X2RldmljZV9tb3ZlX3RvX29ycGhhbmFnZSk7CisJCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKKwl9IGVsc2UKKwkJY2N3X2RldmljZV9zdGFydF9pZChjZGV2LCAwKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKaW5kZXggYjM5YzFmYS4uZDI2OTYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKQEAgLTMxNiw5ICszMTYsOSBAQAogCQkJY2N3X2RldmljZV9zZXRfdGltZW91dChjZGV2LCAwKTsKIAkJaWYgKHJldCA9PSAtRUJVU1kpIHsKIAkJCS8qIFRyeSBhZ2FpbiBsYXRlci4gKi8KLQkJCXNwaW5fdW5sb2NrX2lycSgmc2NoLT5sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCQkJbXNsZWVwKDEwKTsKLQkJCXNwaW5fbG9ja19pcnEoJnNjaC0+bG9jayk7CisJCQlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAocmV0ICE9IDApCkBAIC0zMjYsMTIgKzMyNiwxMiBAQAogCQkJYnJlYWs7CiAJCS8qIFdhaXQgZm9yIGVuZCBvZiByZXF1ZXN0LiAqLwogCQljZGV2LT5wcml2YXRlLT5pbnRwYXJtID0gbWFnaWM7Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2NoLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJCXdhaXRfZXZlbnQoY2Rldi0+cHJpdmF0ZS0+d2FpdF9xLAogCQkJICAgKGNkZXYtPnByaXZhdGUtPmludHBhcm0gPT0gLUVJTykgfHwKIAkJCSAgIChjZGV2LT5wcml2YXRlLT5pbnRwYXJtID09IC1FQUdBSU4pIHx8CiAJCQkgICAoY2Rldi0+cHJpdmF0ZS0+aW50cGFybSA9PSAwKSk7Ci0JCXNwaW5fbG9ja19pcnEoJnNjaC0+bG9jayk7CisJCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKIAkJLyogQ2hlY2sgYXQgbGVhc3QgZm9yIGNoYW5uZWwgZW5kIC8gZGV2aWNlIGVuZCAqLwogCQlpZiAoY2Rldi0+cHJpdmF0ZS0+aW50cGFybSA9PSAtRUlPKSB7CiAJCQkvKiBOb24tcmV0cnlhYmxlIGVycm9yLiAqLwpAQCAtMzQyLDkgKzM0Miw5IEBACiAJCQkvKiBTdWNjZXNzLiAqLwogCQkJYnJlYWs7CiAJCS8qIFRyeSBhZ2FpbiBsYXRlci4gKi8KLQkJc3Bpbl91bmxvY2tfaXJxKCZzY2gtPmxvY2spOworCQlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAkJbXNsZWVwKDEwKTsKLQkJc3Bpbl9sb2NrX2lycSgmc2NoLT5sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOwogCX0gd2hpbGUgKDEpOwogCiAJcmV0dXJuIHJldDsKQEAgLTM4OSw3ICszODksNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXNwaW5fbG9ja19pcnEoJnNjaC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOwogCS8qIFNhdmUgaW50ZXJydXB0IGhhbmRsZXIuICovCiAJaGFuZGxlciA9IGNkZXYtPmhhbmRsZXI7CiAJLyogVGVtcG9yYXJpbHkgaW5zdGFsbCBvd24gaGFuZGxlci4gKi8KQEAgLTQwNiw3ICs0MDYsNyBAQAogCiAJLyogUmVzdG9yZSBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KIAljZGV2LT5oYW5kbGVyID0gaGFuZGxlcjsKLQlzcGluX3VubG9ja19pcnEoJnNjaC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAKIAljbGVhcl9ub3JtYWxpemVkX2NkYSAocmRjX2Njdyk7CiAJa2ZyZWUocmRjX2Njdyk7CkBAIC00NjMsNyArNDYzLDcgQEAKIAlyY2RfY2N3LT5jb3VudCA9IGNpdy0+Y291bnQ7CiAJcmNkX2Njdy0+ZmxhZ3MgPSBDQ1dfRkxBR19TTEk7CiAKLQlzcGluX2xvY2tfaXJxKCZzY2gtPmxvY2spOworCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKIAkvKiBTYXZlIGludGVycnVwdCBoYW5kbGVyLiAqLwogCWhhbmRsZXIgPSBjZGV2LT5oYW5kbGVyOwogCS8qIFRlbXBvcmFyaWx5IGluc3RhbGwgb3duIGhhbmRsZXIuICovCkBAIC00ODAsNyArNDgwLDcgQEAKIAogCS8qIFJlc3RvcmUgaW50ZXJydXB0IGhhbmRsZXIuICovCiAJY2Rldi0+aGFuZGxlciA9IGhhbmRsZXI7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZzY2gtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCiAgCS8qCiAgCSAqIG9uIHN1Y2Nlc3Mgd2UgdXBkYXRlIHRoZSB1c2VyIGlucHV0IHBhcm1zCkBAIC01MzcsNyArNTM3LDcgQEAKIAkJa2ZyZWUoYnVmKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXNwaW5fbG9ja19pcnFzYXZlKCZzY2gtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShzY2gtPmxvY2ssIGZsYWdzKTsKIAlyZXQgPSBjaW9fZW5hYmxlX3N1YmNoYW5uZWwoc2NoLCAzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC01NTksOSArNTU5LDkgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAljZGV2LT5wcml2YXRlLT5pcmIuc2Nzdy5hY3RsIHw9IFNDU1dfQUNUTF9TVEFSVF9QRU5EOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2NoLT5sb2NrLCBmbGFncyk7CiAJd2FpdF9ldmVudChjZGV2LT5wcml2YXRlLT53YWl0X3EsIGNkZXYtPnByaXZhdGUtPmlyYi5zY3N3LmFjdGwgPT0gMCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNjaC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKHNjaC0+bG9jaywgZmxhZ3MpOwogCWNpb19kaXNhYmxlX3N1YmNoYW5uZWwoc2NoKTsgLy9GSVhNRTogcmV0dXJuIGNvZGU/CiAJaWYgKChjZGV2LT5wcml2YXRlLT5pcmIuc2Nzdy5kc3RhdCAhPQogCSAgICAgKERFVl9TVEFUX0NITl9FTkR8REVWX1NUQVRfREVWX0VORCkpIHx8CkBAIC01NzIsNyArNTcyLDcgQEAKIG91dF91bmxvY2s6CiAJa2ZyZWUoYnVmKTsKIAlrZnJlZShidWYyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2gtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNjaC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKaW5kZXggOGQ1ZmExYi4uNmZkMTk0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZXguaD4KIAogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS9zMzkwX3JkZXYuaD4KICNpbmNsdWRlIDxhc20vcWRpby5oPgogCiAjaW5jbHVkZSAiY2lvLmgiCkBAIC02NSwxMiArNjYsMTIgQEAKIC8qKioqKioqKioqKioqKioqKioqKiBIRVJFIFdFIEdPICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiUURJTyBiYXNlIHN1cHBvcnQgdmVyc2lvbiAyIjsKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgY2N3X2J1c190eXBlOwogCi0jaWZkZWYgUURJT19QRVJGT1JNQU5DRV9TVEFUUworc3RhdGljIGludCBxZGlvX3BlcmZvcm1hbmNlX3N0YXRzID0gMDsKIHN0YXRpYyBpbnQgcHJvY19wZXJmX2ZpbGVfcmVnaXN0cmF0aW9uOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaV9wX2MsIGlfcF9uYywgb19wX2MsIG9fcF9uYywgaWlfcF9jLCBpaV9wX25jOwogc3RhdGljIHN0cnVjdCBxZGlvX3BlcmZfc3RhdHMgcGVyZl9zdGF0czsKLSNlbmRpZiAvKiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTICovCiAKIHN0YXRpYyBpbnQgaHlkcmFfdGhpbmludHM7CiBzdGF0aWMgaW50IGlzX3Bhc3N0aHJvdWdoID0gMDsKQEAgLTI3NSw5ICsyNzYsOCBAQAogCVFESU9fREJGX1RFWFQ0KDAsdHJhY2UsInNpZ2FzeW5jIik7CiAJUURJT19EQkZfSEVYNCgwLHRyYWNlLCZxLHNpemVvZih2b2lkKikpOwogCi0jaWZkZWYgUURJT19QRVJGT1JNQU5DRV9TVEFUUwotCXBlcmZfc3RhdHMuc2lnYV9zeW5jcysrOwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KKwlpZiAocWRpb19wZXJmb3JtYW5jZV9zdGF0cykKKwkJcGVyZl9zdGF0cy5zaWdhX3N5bmNzKys7CiAKIAljYyA9IGRvX3NpZ2Ffc3luYyhxLT5zY2hpZCwgZ3ByMiwgZ3ByMyk7CiAJaWYgKGNjKQpAQCAtMzIyLDkgKzMyMiw4IEBACiAJX191MzIgYnVzeV9iaXQ7CiAJX191NjQgc3RhcnRfdGltZT0wOwogCi0jaWZkZWYgUURJT19QRVJGT1JNQU5DRV9TVEFUUwotCXBlcmZfc3RhdHMuc2lnYV9vdXRzKys7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLworCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKQorCQlwZXJmX3N0YXRzLnNpZ2Ffb3V0cysrOwogCiAJUURJT19EQkZfVEVYVDQoMCx0cmFjZSwic2lnYW91dCIpOwogCVFESU9fREJGX0hFWDQoMCx0cmFjZSwmcSxzaXplb2Yodm9pZCopKTsKQEAgLTM1OCw5ICszNTcsOCBAQAogCVFESU9fREJGX1RFWFQ0KDAsdHJhY2UsInNpZ2FpbiIpOwogCVFESU9fREJGX0hFWDQoMCx0cmFjZSwmcSxzaXplb2Yodm9pZCopKTsKIAotI2lmZGVmIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMKLQlwZXJmX3N0YXRzLnNpZ2FfaW5zKys7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLworCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKQorCQlwZXJmX3N0YXRzLnNpZ2FfaW5zKys7CiAKIAljYyA9IGRvX3NpZ2FfaW5wdXQocS0+c2NoaWQsIHEtPm1hc2spOwogCQpAQCAtOTU0LDkgKzk1Miw4IEBACiAKIAlpZiAodW5saWtlbHkocWRpb19yZXNlcnZlX3EocSkpKSB7CiAJCXFkaW9fcmVsZWFzZV9xKHEpOwotI2lmZGVmIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMKLQkJb19wX2MrKzsKLSNlbmRpZiAvKiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTICovCisJCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKQorCQkJb19wX2MrKzsKIAkJLyogYXMgd2UncmUgc2lzc2llcywgd2UnbGwgY2hlY2sgbmV4dCB0aW1lICovCiAJCWlmIChsaWtlbHkoIWF0b21pY19yZWFkKCZxLT5pc19pbl9zaHV0ZG93bikpKSB7CiAJCQlxZGlvX21hcmtfcShxKTsKQEAgLTk2NCwxMCArOTYxLDEwIEBACiAJCX0KIAkJcmV0dXJuOwogCX0KLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCi0Jb19wX25jKys7Ci0JcGVyZl9zdGF0cy50bF9ydW5zKys7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLworCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKSB7CisJCW9fcF9uYysrOworCQlwZXJmX3N0YXRzLnRsX3J1bnMrKzsKKwl9CiAKIAkvKiBzZWUgY29tbWVudCBpbiBxZGlvX2tpY2tfb3V0Ym91bmRfcSAqLwogCXNpZ2FfYXR0ZW1wdHM9YXRvbWljX3JlYWQoJnEtPmJ1c3lfc2lnYV9jb3VudGVyKTsKQEAgLTk4MiwxMiArOTc5LDExIEBACiAKIAlpZiAocS0+aXNfaXFkaW9fcSkgewogCQkvKiAKLQkJICogZm9yIGFzeW5jaHJvbm91cyBxdWV1ZXMsIHdlIGJldHRlciBjaGVjaywgaWYgdGhlIGZpbGwKLQkJICogbGV2ZWwgaXMgdG9vIGhpZ2guIGZvciBzeW5jaHJvbm91cyBxdWV1ZXMsIHRoZSBmaWxsCi0JCSAqIGxldmVsIHdpbGwgbmV2ZXIgYmUgdGhhdCBoaWdoLiAKKwkJICogZm9yIGFzeW5jaHJvbm91cyBxdWV1ZXMsIHdlIGJldHRlciBjaGVjaywgaWYgdGhlIHNlbnQKKwkJICogYnVmZmVyIGlzIGFscmVhZHkgc3dpdGNoZWQgZnJvbSBQUklNRUQgdG8gRU1QVFkuCiAJCSAqLwotCQlpZiAoYXRvbWljX3JlYWQoJnEtPm51bWJlcl9vZl9idWZmZXJzX3VzZWQpPgotCQkgICAgSVFESU9fRklMTF9MRVZFTF9UT19QT0xMKQorCQlpZiAoKHEtPnF1ZXVlX3R5cGUgPT0gUURJT19JUURJT19RRk1UX0FTWU5DSCkgJiYKKwkJICAgICFxZGlvX2lzX291dGJvdW5kX3FfZG9uZShxKSkKIAkJCXFkaW9fbWFya19xKHEpOwogCiAJfSBlbHNlIGlmICghcS0+aHlkcmFfZ2l2ZXNfb3V0Ym91bmRfcGNpcykKQEAgLTExNDIsMTUgKzExMzgsMTYgQEAKIHsKIAlpbnQgaTsKIAotI2lmZGVmIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMKIAlzdGF0aWMgaW50IG9sZF9wY2lzPTA7CiAJc3RhdGljIGludCBvbGRfdGhpbmludHM9MDsKIAotCWlmICgob2xkX3BjaXM9PXBlcmZfc3RhdHMucGNpcykmJihvbGRfdGhpbmludHM9PXBlcmZfc3RhdHMudGhpbmludHMpKQotCQlwZXJmX3N0YXRzLnN0YXJ0X3RpbWVfaW5ib3VuZD1OT1c7Ci0JZWxzZQotCQlvbGRfcGNpcz1wZXJmX3N0YXRzLnBjaXM7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLworCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKSB7CisJCWlmICgob2xkX3BjaXM9PXBlcmZfc3RhdHMucGNpcykmJgorCQkgICAgKG9sZF90aGluaW50cz09cGVyZl9zdGF0cy50aGluaW50cykpCisJCQlwZXJmX3N0YXRzLnN0YXJ0X3RpbWVfaW5ib3VuZD1OT1c7CisJCWVsc2UKKwkJCW9sZF9wY2lzPXBlcmZfc3RhdHMucGNpczsKKwl9CiAKIAlpPXFkaW9fZ2V0X2luYm91bmRfYnVmZmVyX2Zyb250aWVyKHEpOwogCWlmICggKGkhPUdFVF9TQVZFRF9GUk9OVElFUihxKSkgfHwKQEAgLTEzNDAsMTAgKzEzMzcsMTAgQEAKIAlxLT5zaWdhX2Vycm9yPTA7CiAJcS0+ZXJyb3Jfc3RhdHVzX2ZsYWdzPTA7CiAKLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCi0JcGVyZl9zdGF0cy5pbmJvdW5kX3RpbWUrPU5PVy1wZXJmX3N0YXRzLnN0YXJ0X3RpbWVfaW5ib3VuZDsKLQlwZXJmX3N0YXRzLmluYm91bmRfY250Kys7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLworCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKSB7CisJCXBlcmZfc3RhdHMuaW5ib3VuZF90aW1lKz1OT1ctcGVyZl9zdGF0cy5zdGFydF90aW1lX2luYm91bmQ7CisJCXBlcmZfc3RhdHMuaW5ib3VuZF9jbnQrKzsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMTM2Myw5ICsxMzYwLDggQEAKIAkgKi8KIAlpZiAodW5saWtlbHkocWRpb19yZXNlcnZlX3EocSkpKSB7CiAJCXFkaW9fcmVsZWFzZV9xKHEpOwotI2lmZGVmIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMKLQkJaWlfcF9jKys7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLworCQlpZiAocWRpb19wZXJmb3JtYW5jZV9zdGF0cykKKwkJCWlpX3BfYysrOwogCQkvKiAKIAkJICogYXMgd2UgbWlnaHQganVzdCBiZSBhYm91dCB0byBzdG9wIHBvbGxpbmcsIHdlIG1ha2UKIAkJICogc3VyZSB0aGF0IHdlIGNoZWNrIGFnYWluIGF0IGxlYXN0IG9uY2UgbW9yZSAKQEAgLTEzNzMsOSArMTM2OSw4IEBACiAJCXRpcWRpb19zY2hlZF90bCgpOwogCQlyZXR1cm47CiAJfQotI2lmZGVmIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMKLQlpaV9wX25jKys7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLworCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKQorCQlpaV9wX25jKys7CiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZxLT5pc19pbl9zaHV0ZG93bikpKSB7CiAJCXFkaW9fdW5tYXJrX3EocSk7CiAJCWdvdG8gb3V0OwpAQCAtMTQxNiwxMSArMTQxMSwxMSBAQAogCQlpcnFfcHRyID0gKHN0cnVjdCBxZGlvX2lycSopcS0+aXJxX3B0cjsKIAkJZm9yIChpPTA7aTxpcnFfcHRyLT5ub19vdXRwdXRfcXM7aSsrKSB7CiAJCQlvcSA9IGlycV9wdHItPm91dHB1dF9xc1tpXTsKLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCi0JCQlwZXJmX3N0YXRzLnRsX3J1bnMtLTsKLSNlbmRpZiAvKiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTICovCi0JCQlpZiAoIXFkaW9faXNfb3V0Ym91bmRfcV9kb25lKG9xKSkKKwkJCWlmICghcWRpb19pc19vdXRib3VuZF9xX2RvbmUob3EpKSB7CisJCQkJaWYgKHFkaW9fcGVyZm9ybWFuY2Vfc3RhdHMpCisJCQkJCXBlcmZfc3RhdHMudGxfcnVucy0tOwogCQkJCV9fcWRpb19vdXRib3VuZF9wcm9jZXNzaW5nKG9xKTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMTQ1Nyw5ICsxNDUyLDggQEAKIAogCWlmICh1bmxpa2VseShxZGlvX3Jlc2VydmVfcShxKSkpIHsKIAkJcWRpb19yZWxlYXNlX3EocSk7Ci0jaWZkZWYgUURJT19QRVJGT1JNQU5DRV9TVEFUUwotCQlpX3BfYysrOwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KKwkJaWYgKHFkaW9fcGVyZm9ybWFuY2Vfc3RhdHMpCisJCQlpX3BfYysrOwogCQkvKiBhcyB3ZSdyZSBzaXNzaWVzLCB3ZSdsbCBjaGVjayBuZXh0IHRpbWUgKi8KIAkJaWYgKGxpa2VseSghYXRvbWljX3JlYWQoJnEtPmlzX2luX3NodXRkb3duKSkpIHsKIAkJCXFkaW9fbWFya19xKHEpOwpAQCAtMTQ2NywxMCArMTQ2MSwxMCBAQAogCQl9CiAJCXJldHVybjsKIAl9Ci0jaWZkZWYgUURJT19QRVJGT1JNQU5DRV9TVEFUUwotCWlfcF9uYysrOwotCXBlcmZfc3RhdHMudGxfcnVucysrOwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KKwlpZiAocWRpb19wZXJmb3JtYW5jZV9zdGF0cykgeworCQlpX3BfbmMrKzsKKwkJcGVyZl9zdGF0cy50bF9ydW5zKys7CisJfQogCiBhZ2FpbjoKIAlpZiAocWRpb19oYXNfaW5ib3VuZF9xX21vdmVkKHEpKSB7CkBAIC0xNTE2LDkgKzE1MTAsOCBAQAogCiAJaWYgKHVubGlrZWx5KHFkaW9fcmVzZXJ2ZV9xKHEpKSkgewogCQlxZGlvX3JlbGVhc2VfcShxKTsKLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCi0JCWlpX3BfYysrOwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KKwkJaWYgKHFkaW9fcGVyZm9ybWFuY2Vfc3RhdHMpCisJCQlpaV9wX2MrKzsKIAkJLyogCiAJCSAqIGFzIHdlIG1pZ2h0IGp1c3QgYmUgYWJvdXQgdG8gc3RvcCBwb2xsaW5nLCB3ZSBtYWtlCiAJCSAqIHN1cmUgdGhhdCB3ZSBjaGVjayBhZ2FpbiBhdCBsZWFzdCBvbmNlIG1vcmUgCkBAIC0xNjA5LDkgKzE2MDIsOCBAQAogewogCVFESU9fREJGX1RFWFQ0KDAsdHJhY2UsImlxZGlvX3RsIik7CiAKLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCi0JcGVyZl9zdGF0cy50bF9ydW5zKys7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLworCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKQorCQlwZXJmX3N0YXRzLnRsX3J1bnMrKzsKIAogCXRpcWRpb19pbmJvdW5kX2NoZWNrcygpOwogfQpAQCAtMTgzMiw2ICsxODI0LDEwIEBACiAJCQlxLT5zYmFsW2pdPSoob3V0Ym91bmRfc2JhbHNfYXJyYXkrKyk7CiAKICAgICAgICAgICAgICAgICBxLT5xdWV1ZV90eXBlPXFfZm9ybWF0OworCQlpZiAoKHEtPnF1ZXVlX3R5cGUgPT0gUURJT19JUURJT19RRk1UKSAmJgorCQkgICAgKG5vX291dHB1dF9xcyA+IDEpICYmCisJCSAgICAoaSA9PSBub19vdXRwdXRfcXMtMSkpCisJCQlxLT5xdWV1ZV90eXBlID0gUURJT19JUURJT19RRk1UX0FTWU5DSDsKIAkJcS0+aW50X3Bhcm09aW50X3Bhcm07CiAJCXEtPmlzX2lucHV0X3E9MDsKIAkJcS0+c2NoaWQgPSBpcnFfcHRyLT5zY2hpZDsKQEAgLTE5MTgsMTAgKzE5MTQsMTAgQEAKIHsKIAlRRElPX0RCRl9URVhUNCgwLHRyYWNlLCJ0aGluX2ludCIpOwogCi0jaWZkZWYgUURJT19QRVJGT1JNQU5DRV9TVEFUUwotCXBlcmZfc3RhdHMudGhpbmludHMrKzsKLQlwZXJmX3N0YXRzLnN0YXJ0X3RpbWVfaW5ib3VuZD1OT1c7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLworCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKSB7CisJCXBlcmZfc3RhdHMudGhpbmludHMrKzsKKwkJcGVyZl9zdGF0cy5zdGFydF90aW1lX2luYm91bmQ9Tk9XOworCX0KIAogCS8qIFNWUyBvbmx5IHdoZW4gbmVlZGVkOgogCSAqIGlzc3VlIFNWUyB0byBiZW5lZml0IGZyb20gaXFkaW8gaW50ZXJydXB0IGF2b2lkYW5jZQpAQCAtMTk3NiwxOCArMTk3MiwxNyBAQAogCWludCBpOwogCXN0cnVjdCBxZGlvX3EgKnE7CiAKLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCi0JcGVyZl9zdGF0cy5wY2lzKys7Ci0JcGVyZl9zdGF0cy5zdGFydF90aW1lX2luYm91bmQ9Tk9XOwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KKwlpZiAocWRpb19wZXJmb3JtYW5jZV9zdGF0cykgeworCQlwZXJmX3N0YXRzLnBjaXMrKzsKKwkJcGVyZl9zdGF0cy5zdGFydF90aW1lX2luYm91bmQ9Tk9XOworCX0KIAlmb3IgKGk9MDtpPGlycV9wdHItPm5vX2lucHV0X3FzO2krKykgewogCQlxPWlycV9wdHItPmlucHV0X3FzW2ldOwogCQlpZiAocS0+aXNfaW5wdXRfcSZRRElPX0ZMQUdfTk9fSU5QVVRfSU5URVJSVVBUX0NPTlRFWFQpCiAJCQlxZGlvX21hcmtfcShxKTsKIAkJZWxzZSB7Ci0jaWZkZWYgUURJT19QRVJGT1JNQU5DRV9TVEFUUwotCQkJcGVyZl9zdGF0cy50bF9ydW5zLS07Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLworCQkJaWYgKHFkaW9fcGVyZm9ybWFuY2Vfc3RhdHMpCisJCQkJcGVyZl9zdGF0cy50bF9ydW5zLS07CiAJCQlfX3FkaW9faW5ib3VuZF9wcm9jZXNzaW5nKHEpOwogCQl9CiAJfQpAQCAtMTk5NSwxMSArMTk5MCwxMCBAQAogCQlyZXR1cm47CiAJZm9yIChpPTA7aTxpcnFfcHRyLT5ub19vdXRwdXRfcXM7aSsrKSB7CiAJCXE9aXJxX3B0ci0+b3V0cHV0X3FzW2ldOwotI2lmZGVmIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMKLQkJcGVyZl9zdGF0cy50bF9ydW5zLS07Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLwogCQlpZiAocWRpb19pc19vdXRib3VuZF9xX2RvbmUocSkpCiAJCQljb250aW51ZTsKKwkJaWYgKHFkaW9fcGVyZm9ybWFuY2Vfc3RhdHMpCisJCQlwZXJmX3N0YXRzLnRsX3J1bnMtLTsKIAkJaWYgKCFpcnFfcHRyLT5zeW5jX2RvbmVfb25fb3V0Yl9wY2lzKQogCQkJU1lOQ19NRU1PUlk7CiAJCV9fcWRpb19vdXRib3VuZF9wcm9jZXNzaW5nKHEpOwpAQCAtMjA0NSwxMSArMjAzOSwxMyBAQAogfQogCiBzdGF0aWMgdm9pZAotcWRpb19jYWxsX3NodXRkb3duKHZvaWQgKmRhdGEpCitxZGlvX2NhbGxfc2h1dGRvd24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogeworCXN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7CiAKLQljZGV2ID0gKHN0cnVjdCBjY3dfZGV2aWNlICopZGF0YTsKKwlwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUsIGtpY2tfd29yayk7CisJY2RldiA9IHByaXYtPmNkZXY7CiAJcWRpb19zaHV0ZG93bihjZGV2LCBRRElPX0ZMQUdfQ0xFQU5VUF9VU0lOR19DTEVBUik7CiAJcHV0X2RldmljZSgmY2Rldi0+ZGV2KTsKIH0KQEAgLTIwOTEsNyArMjA4Nyw3IEBACiAJCWlmIChnZXRfZGV2aWNlKCZjZGV2LT5kZXYpKSB7CiAJCQkvKiBDYW4ndCBjYWxsIHNodXRkb3duIGZyb20gaW50ZXJydXB0IGNvbnRleHQuICovCiAJCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCQkgICAgIHFkaW9fY2FsbF9zaHV0ZG93biwgKHZvaWQgKiljZGV2KTsKKwkJCQkgICAgIHFkaW9fY2FsbF9zaHV0ZG93bik7CiAJCQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiAJCX0KIAkJYnJlYWs7CkBAIC0zNDU4LDE5ICszNDU0LDE4IEBACiAJc3RydWN0IHFkaW9faXJxICppcnEgPSAoc3RydWN0IHFkaW9faXJxICopIHEtPmlycV9wdHI7CiAKIAkvKiBUaGlzIGlzIHRoZSBvdXRib3VuZCBoYW5kbGluZyBvZiBxdWV1ZXMgKi8KLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCi0JcGVyZl9zdGF0cy5zdGFydF90aW1lX291dGJvdW5kPU5PVzsKLSNlbmRpZiAvKiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTICovCisJaWYgKHFkaW9fcGVyZm9ybWFuY2Vfc3RhdHMpCisJCXBlcmZfc3RhdHMuc3RhcnRfdGltZV9vdXRib3VuZD1OT1c7CiAKIAlxZGlvX2RvX3FkaW9fZmlsbF9vdXRwdXQocSxxaWR4LGNvdW50LGJ1ZmZlcnMpOwogCiAJdXNlZF9lbGVtZW50cz1hdG9taWNfYWRkX3JldHVybihjb3VudCwgJnEtPm51bWJlcl9vZl9idWZmZXJzX3VzZWQpIC0gY291bnQ7CiAKIAlpZiAoY2FsbGZsYWdzJlFESU9fRkxBR19ET05UX1NJR0EpIHsKLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCi0JCXBlcmZfc3RhdHMub3V0Ym91bmRfdGltZSs9Tk9XLXBlcmZfc3RhdHMuc3RhcnRfdGltZV9vdXRib3VuZDsKLQkJcGVyZl9zdGF0cy5vdXRib3VuZF9jbnQrKzsKLSNlbmRpZiAvKiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTICovCisJCWlmIChxZGlvX3BlcmZvcm1hbmNlX3N0YXRzKSB7CisJCQlwZXJmX3N0YXRzLm91dGJvdW5kX3RpbWUrPU5PVy1wZXJmX3N0YXRzLnN0YXJ0X3RpbWVfb3V0Ym91bmQ7CisJCQlwZXJmX3N0YXRzLm91dGJvdW5kX2NudCsrOworCQl9CiAJCXJldHVybjsKIAl9CiAJaWYgKHEtPmlzX2lxZGlvX3EpIHsKQEAgLTM1MDAsOSArMzQ5NSw4IEBACiAJCQkJcWRpb19raWNrX291dGJvdW5kX3EocSk7CiAJCQl9IGVsc2UgewogCQkJCVFESU9fREJGX1RFWFQzKDAsdHJhY2UsICJmYXN0LXJlcSIpOwotI2lmZGVmIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMKLQkJCQlwZXJmX3N0YXRzLmZhc3RfcmVxcysrOwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KKwkJCQlpZiAocWRpb19wZXJmb3JtYW5jZV9zdGF0cykKKwkJCQkJcGVyZl9zdGF0cy5mYXN0X3JlcXMrKzsKIAkJCX0KIAkJfQogCQkvKiAKQEAgLTM1MTMsMTAgKzM1MDcsMTAgQEAKIAkJX19xZGlvX291dGJvdW5kX3Byb2Nlc3NpbmcocSk7CiAJfQogCi0jaWZkZWYgUURJT19QRVJGT1JNQU5DRV9TVEFUUwotCXBlcmZfc3RhdHMub3V0Ym91bmRfdGltZSs9Tk9XLXBlcmZfc3RhdHMuc3RhcnRfdGltZV9vdXRib3VuZDsKLQlwZXJmX3N0YXRzLm91dGJvdW5kX2NudCsrOwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KKwlpZiAocWRpb19wZXJmb3JtYW5jZV9zdGF0cykgeworCQlwZXJmX3N0YXRzLm91dGJvdW5kX3RpbWUrPU5PVy1wZXJmX3N0YXRzLnN0YXJ0X3RpbWVfb3V0Ym91bmQ7CisJCXBlcmZfc3RhdHMub3V0Ym91bmRfY250Kys7CisJfQogfQogCiAvKiBjb3VudCBtdXN0IGJlIDEgaW4gaXFkaW8gKi8KQEAgLTM1NzQsNyArMzU2OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCiBzdGF0aWMgaW50CiBxZGlvX3BlcmZfcHJvY2ZpbGVfcmVhZChjaGFyICpidWZmZXIsIGNoYXIgKipidWZmZXJfbG9jYXRpb24sIG9mZl90IG9mZnNldCwKIAkJCWludCBidWZmZXJfbGVuZ3RoLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKQEAgLTM1OTAsMjkgKzM1ODMsMjkgQEAKIAlfT1VUUF9JVCgiaV9wX25jL2M9JWx1LyVsdVxuIixpX3BfbmMsaV9wX2MpOwogCV9PVVRQX0lUKCJpaV9wX25jL2M9JWx1LyVsdVxuIixpaV9wX25jLGlpX3BfYyk7CiAJX09VVFBfSVQoIm9fcF9uYy9jPSVsdS8lbHVcbiIsb19wX25jLG9fcF9jKTsKLQlfT1VUUF9JVCgiTnVtYmVyIG9mIHRhc2tsZXQgcnVucyAodG90YWwpICAgICAgICAgICAgICAgICAgOiAldVxuIiwKKwlfT1VUUF9JVCgiTnVtYmVyIG9mIHRhc2tsZXQgcnVucyAodG90YWwpICAgICAgICAgICAgICAgICAgOiAlbHVcbiIsCiAJCSBwZXJmX3N0YXRzLnRsX3J1bnMpOwogCV9PVVRQX0lUKCJcbiIpOwotCV9PVVRQX0lUKCJOdW1iZXIgb2YgU0lHQSBzeW5jJ3MgaXNzdWVkICAgICAgICAgICAgICAgICAgICA6ICV1XG4iLAorCV9PVVRQX0lUKCJOdW1iZXIgb2YgU0lHQSBzeW5jJ3MgaXNzdWVkICAgICAgICAgICAgICAgICAgICA6ICVsdVxuIiwKIAkJIHBlcmZfc3RhdHMuc2lnYV9zeW5jcyk7Ci0JX09VVFBfSVQoIk51bWJlciBvZiBTSUdBIGluJ3MgaXNzdWVkICAgICAgICAgICAgICAgICAgICAgIDogJXVcbiIsCisJX09VVFBfSVQoIk51bWJlciBvZiBTSUdBIGluJ3MgaXNzdWVkICAgICAgICAgICAgICAgICAgICAgIDogJWx1XG4iLAogCQkgcGVyZl9zdGF0cy5zaWdhX2lucyk7Ci0JX09VVFBfSVQoIk51bWJlciBvZiBTSUdBIG91dCdzIGlzc3VlZCAgICAgICAgICAgICAgICAgICAgIDogJXVcbiIsCisJX09VVFBfSVQoIk51bWJlciBvZiBTSUdBIG91dCdzIGlzc3VlZCAgICAgICAgICAgICAgICAgICAgIDogJWx1XG4iLAogCQkgcGVyZl9zdGF0cy5zaWdhX291dHMpOwotCV9PVVRQX0lUKCJOdW1iZXIgb2YgUENJcyBjYXVnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICV1XG4iLAorCV9PVVRQX0lUKCJOdW1iZXIgb2YgUENJcyBjYXVnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICVsdVxuIiwKIAkJIHBlcmZfc3RhdHMucGNpcyk7Ci0JX09VVFBfSVQoIk51bWJlciBvZiBhZGFwdGVyIGludGVycnVwdHMgY2F1Z2h0ICAgICAgICAgICAgIDogJXVcbiIsCisJX09VVFBfSVQoIk51bWJlciBvZiBhZGFwdGVyIGludGVycnVwdHMgY2F1Z2h0ICAgICAgICAgICAgIDogJWx1XG4iLAogCQkgcGVyZl9zdGF0cy50aGluaW50cyk7Ci0JX09VVFBfSVQoIk51bWJlciBvZiBmYXN0IHJlcXVldWVzIChvdXRnLiBTQkFMcyB3L28gU0lHQSkgIDogJXVcbiIsCisJX09VVFBfSVQoIk51bWJlciBvZiBmYXN0IHJlcXVldWVzIChvdXRnLiBTQkFMcyB3L28gU0lHQSkgIDogJWx1XG4iLAogCQkgcGVyZl9zdGF0cy5mYXN0X3JlcXMpOwogCV9PVVRQX0lUKCJcbiIpOwotCV9PVVRQX0lUKCJUb3RhbCB0aW1lIG9mIGFsbCBpbmJvdW5kIGFjdGlvbnMgKHVzKSBpbmNsLiBVTCA6ICV1XG4iLAorCV9PVVRQX0lUKCJUb3RhbCB0aW1lIG9mIGFsbCBpbmJvdW5kIGFjdGlvbnMgKHVzKSBpbmNsLiBVTCA6ICVsdVxuIiwKIAkJIHBlcmZfc3RhdHMuaW5ib3VuZF90aW1lKTsKLQlfT1VUUF9JVCgiTnVtYmVyIG9mIGluYm91bmQgdHJhbnNmZXJzICAgICAgICAgICAgICAgICAgICAgOiAldVxuIiwKKwlfT1VUUF9JVCgiTnVtYmVyIG9mIGluYm91bmQgdHJhbnNmZXJzICAgICAgICAgICAgICAgICAgICAgOiAlbHVcbiIsCiAJCSBwZXJmX3N0YXRzLmluYm91bmRfY250KTsKLQlfT1VUUF9JVCgiVG90YWwgdGltZSBvZiBhbGwgb3V0Ym91bmQgZG9fUURJT3MgKHVzKSAgICAgICAgOiAldVxuIiwKKwlfT1VUUF9JVCgiVG90YWwgdGltZSBvZiBhbGwgb3V0Ym91bmQgZG9fUURJT3MgKHVzKSAgICAgICAgOiAlbHVcbiIsCiAJCSBwZXJmX3N0YXRzLm91dGJvdW5kX3RpbWUpOwotCV9PVVRQX0lUKCJOdW1iZXIgb2YgZG9fUURJT3Mgb3V0Ym91bmQgICAgICAgICAgICAgICAgICAgICA6ICV1XG4iLAorCV9PVVRQX0lUKCJOdW1iZXIgb2YgZG9fUURJT3Mgb3V0Ym91bmQgICAgICAgICAgICAgICAgICAgICA6ICVsdVxuIiwKIAkJIHBlcmZfc3RhdHMub3V0Ym91bmRfY250KTsKIAlfT1VUUF9JVCgiXG4iKTsKIApAQCAtMzYyMCwxMiArMzYxMywxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpxZGlvX3BlcmZfcHJvY19maWxlOwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KIAogc3RhdGljIHZvaWQKIHFkaW9fYWRkX3Byb2Nmc19lbnRyeSh2b2lkKQogewotI2lmZGVmIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMKICAgICAgICAgcHJvY19wZXJmX2ZpbGVfcmVnaXN0cmF0aW9uPTA7CiAJcWRpb19wZXJmX3Byb2NfZmlsZT1jcmVhdGVfcHJvY19lbnRyeShRRElPX1BFUkYsCiAJCQkJCSAgICAgIFNfSUZSRUd8MDQ0NCwmcHJvY19yb290KTsKQEAgLTM2MzcsMjAgKzM2MjgsNTggQEAKICAgICAgICAgICAgICAgICBRRElPX1BSSU5UX1dBUk4oIndhcyBub3QgYWJsZSB0byByZWdpc3RlciBwZXJmLiAiIFwKIAkJCQkicHJvYy1maWxlICglaSkuXG4iLAogCQkJCXByb2NfcGVyZl9maWxlX3JlZ2lzdHJhdGlvbik7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLwogfQogCiBzdGF0aWMgdm9pZAogcWRpb19yZW1vdmVfcHJvY2ZzX2VudHJ5KHZvaWQpCiB7Ci0jaWZkZWYgUURJT19QRVJGT1JNQU5DRV9TVEFUUwogCXBlcmZfc3RhdHMudGxfcnVucz0wOwogCiAgICAgICAgIGlmICghcHJvY19wZXJmX2ZpbGVfcmVnaXN0cmF0aW9uKSAvKiBtZWFucyBpZiBpdCB3ZW50IG9rIGVhcmxpZXIgKi8KIAkJcmVtb3ZlX3Byb2NfZW50cnkoUURJT19QRVJGLCZwcm9jX3Jvb3QpOwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KIH0KIAorLyoqCisgKiBhdHRyaWJ1dGVzIGluIHN5c2ZzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzc2l6ZV90CitxZGlvX3BlcmZvcm1hbmNlX3N0YXRzX3Nob3coc3RydWN0IGJ1c190eXBlICpidXMsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgcWRpb19wZXJmb3JtYW5jZV9zdGF0cyA/IDEgOiAwKTsKK30KKworc3RhdGljIHNzaXplX3QKK3FkaW9fcGVyZm9ybWFuY2Vfc3RhdHNfc3RvcmUoc3RydWN0IGJ1c190eXBlICpidXMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWNoYXIgKnRtcDsKKwlpbnQgaTsKKworCWkgPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDE2KTsKKwlpZiAoKGkgPT0gMCkgfHwgKGkgPT0gMSkpIHsKKwkJaWYgKGkgPT0gcWRpb19wZXJmb3JtYW5jZV9zdGF0cykKKwkJCXJldHVybiBjb3VudDsKKwkJcWRpb19wZXJmb3JtYW5jZV9zdGF0cyA9IGk7CisJCWlmIChpPT0wKSB7CisJCQkvKiByZXNldCBwZXJmLiBzdGF0LiBpbmZvICovCisJCQlpX3BfbmMgPSAwOworCQkJaV9wX2MgPSAwOworCQkJaWlfcF9uYyA9IDA7CisJCQlpaV9wX2MgPSAwOworCQkJb19wX25jID0gMDsKKwkJCW9fcF9jID0gMDsKKwkJCW1lbXNldCgmcGVyZl9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBxZGlvX3BlcmZfc3RhdHMpKTsKKwkJfQorCX0gZWxzZSB7CisJCVFESU9fUFJJTlRfV0FSTigiUURJTyBwZXJmb3JtYW5jZV9zdGF0czogd3JpdGUgMCBvciAxIHRvIHRoaXMgZmlsZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgQlVTX0FUVFIocWRpb19wZXJmb3JtYW5jZV9zdGF0cywgMDY0NCwgcWRpb19wZXJmb3JtYW5jZV9zdGF0c19zaG93LAorCQkJcWRpb19wZXJmb3JtYW5jZV9zdGF0c19zdG9yZSk7CisKIHN0YXRpYyB2b2lkCiB0aXFkaW9fcmVnaXN0ZXJfdGhpbmludHModm9pZCkKIHsKQEAgLTM2OTUsNiArMzcyNCw3IEBACiAJa2ZyZWUoaW5kaWNhdG9ycyk7CiB9CiAKKwogc3RhdGljIHZvaWQKIHFkaW9fdW5yZWdpc3Rlcl9kYmZfdmlld3Modm9pZCkKIHsKQEAgLTM3OTYsOSArMzgyNiw3IEBACiBpbml0X1FESU8odm9pZCkKIHsKIAlpbnQgcmVzOwotI2lmZGVmIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMKIAl2b2lkICpwdHI7Ci0jZW5kaWYgLyogUURJT19QRVJGT1JNQU5DRV9TVEFUUyAqLwogCiAJcHJpbnRrKCJxZGlvOiBsb2FkaW5nICVzXG4iLHZlcnNpb24pOwogCkBAIC0zODExLDEzICszODM5LDEyIEBACiAJCXJldHVybiByZXM7CiAKIAlRRElPX0RCRl9URVhUMCgwLHNldHVwLCJpbml0UURJTyIpOworCXJlcyA9IGJ1c19jcmVhdGVfZmlsZSgmY2N3X2J1c190eXBlLCAmYnVzX2F0dHJfcWRpb19wZXJmb3JtYW5jZV9zdGF0cyk7CiAKLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCi0gICAgICAgCW1lbXNldCgodm9pZCopJnBlcmZfc3RhdHMsMCxzaXplb2YocGVyZl9zdGF0cykpOworCW1lbXNldCgodm9pZCopJnBlcmZfc3RhdHMsMCxzaXplb2YocGVyZl9zdGF0cykpOwogCVFESU9fREJGX1RFWFQwKDAsc2V0dXAsInBlcmZzdGF0Iik7CiAJcHRyPSZwZXJmX3N0YXRzOwogCVFESU9fREJGX0hFWDAoMCxzZXR1cCwmcHRyLHNpemVvZih2b2lkKikpOwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KIAogCXFkaW9fYWRkX3Byb2Nmc19lbnRyeSgpOwogCkBAIC0zODQxLDcgKzM4NjgsNyBAQAogCXFkaW9fcmVsZWFzZV9xZGlvX21lbW9yeSgpOwogCXFkaW9fdW5yZWdpc3Rlcl9kYmZfdmlld3MoKTsKIAltZW1wb29sX2Rlc3Ryb3kocWRpb19tZW1wb29sX3Njc3NjKTsKLQorCWJ1c19yZW1vdmVfZmlsZSgmY2N3X2J1c190eXBlLCAmYnVzX2F0dHJfcWRpb19wZXJmb3JtYW5jZV9zdGF0cyk7CiAgIAlwcmludGsoInFkaW86ICVzOiBtb2R1bGUgcmVtb3ZlZFxuIix2ZXJzaW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCA0MjkyN2MxLi5lYzlhZjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMTIsMTAgKzEyLDYgQEAKICNlbmRpZiAvKiBDT05GSUdfUURJT19ERUJVRyAqLwogI2RlZmluZSBRRElPX1VTRV9QUk9DRVNTSU5HX1NUQVRFCiAKLSNpZmRlZiBDT05GSUdfUURJT19QRVJGX1NUQVRTCi0jZGVmaW5lIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMKLSNlbmRpZiAvKiBDT05GSUdfUURJT19QRVJGX1NUQVRTICovCi0KICNkZWZpbmUgUURJT19NSU5JTUFMX0JIX1JFTElFRl9USU1FIDE2CiAjZGVmaW5lIFFESU9fVElNRVJfUE9MTF9WQUxVRSAxCiAjZGVmaW5lIElRRElPX1RJTUVSX1BPTExfVkFMVUUgMQpAQCAtNDA5LDI1ICs0MDUsMjMgQEAKICNkZWZpbmUgQ0hTQ19GTEFHX1NJR0FfU1lOQ19ET05FX09OX1RISU5JTlRTIDB4MDgKICNkZWZpbmUgQ0hTQ19GTEFHX1NJR0FfU1lOQ19ET05FX09OX09VVEJfUENJUyAweDA0CiAKLSNpZmRlZiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTCiBzdHJ1Y3QgcWRpb19wZXJmX3N0YXRzIHsKLQl1bnNpZ25lZCBpbnQgdGxfcnVuczsKKwl1bnNpZ25lZCBsb25nIHRsX3J1bnM7CiAKLQl1bnNpZ25lZCBpbnQgc2lnYV9vdXRzOwotCXVuc2lnbmVkIGludCBzaWdhX2luczsKLQl1bnNpZ25lZCBpbnQgc2lnYV9zeW5jczsKLQl1bnNpZ25lZCBpbnQgcGNpczsKLQl1bnNpZ25lZCBpbnQgdGhpbmludHM7Ci0JdW5zaWduZWQgaW50IGZhc3RfcmVxczsKKwl1bnNpZ25lZCBsb25nIHNpZ2Ffb3V0czsKKwl1bnNpZ25lZCBsb25nIHNpZ2FfaW5zOworCXVuc2lnbmVkIGxvbmcgc2lnYV9zeW5jczsKKwl1bnNpZ25lZCBsb25nIHBjaXM7CisJdW5zaWduZWQgbG9uZyB0aGluaW50czsKKwl1bnNpZ25lZCBsb25nIGZhc3RfcmVxczsKIAogCV9fdTY0IHN0YXJ0X3RpbWVfb3V0Ym91bmQ7Ci0JdW5zaWduZWQgaW50IG91dGJvdW5kX2NudDsKLQl1bnNpZ25lZCBpbnQgb3V0Ym91bmRfdGltZTsKKwl1bnNpZ25lZCBsb25nIG91dGJvdW5kX2NudDsKKwl1bnNpZ25lZCBsb25nIG91dGJvdW5kX3RpbWU7CiAJX191NjQgc3RhcnRfdGltZV9pbmJvdW5kOwotCXVuc2lnbmVkIGludCBpbmJvdW5kX2NudDsKLQl1bnNpZ25lZCBpbnQgaW5ib3VuZF90aW1lOworCXVuc2lnbmVkIGxvbmcgaW5ib3VuZF9jbnQ7CisJdW5zaWduZWQgbG9uZyBpbmJvdW5kX3RpbWU7CiB9OwotI2VuZGlmIC8qIFFESU9fUEVSRk9STUFOQ0VfU1RBVFMgKi8KIAogLyogdW5saWtlbHkgYXMgdGhlIGxhdGVyIHRoZSBiZXR0ZXIgKi8KICNkZWZpbmUgU1lOQ19NRU1PUlkgaWYgKHVubGlrZWx5KHEtPnNpZ2Ffc3luYykpIHFkaW9fc2lnYV9zeW5jX3EocSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCmluZGV4IGU0ZGM5NDcuLjgxYjU4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9zMzkwX3JkZXYuaD4KKyNpbmNsdWRlIDxhc20vcmVzZXQuaD4KIAogI2luY2x1ZGUgImFwX2J1cy5oIgogCkBAIC0xMTI4LDYgKzExMjksMjcgQEAKIAltdXRleF91bmxvY2soJmFwX3BvbGxfdGhyZWFkX211dGV4KTsKIH0KIAorc3RhdGljIHZvaWQgYXBfcmVzZXRfZG9tYWluKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVBfREVWSUNFUzsgaSsrKQorCQlhcF9yZXNldF9xdWV1ZShBUF9NS1FJRChpLCBhcF9kb21haW5faW5kZXgpKTsKK30KKworc3RhdGljIHZvaWQgYXBfcmVzZXRfYWxsKHZvaWQpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVBfRE9NQUlOUzsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgQVBfREVWSUNFUzsgaisrKQorCQkJYXBfcmVzZXRfcXVldWUoQVBfTUtRSUQoaiwgaSkpOworfQorCitzdGF0aWMgc3RydWN0IHJlc2V0X2NhbGwgYXBfcmVzZXRfY2FsbCA9IHsKKwkuZm4gPSBhcF9yZXNldF9hbGwsCit9OworCiAvKioKICAqIFRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gY29kZS4KICAqLwpAQCAtMTE0NCw2ICsxMTY2LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVAgaW5zdHJ1Y3Rpb25zIG5vdCBpbnN0YWxsZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCXJlZ2lzdGVyX3Jlc2V0X2NhbGwoJmFwX3Jlc2V0X2NhbGwpOwogCiAJLyogQ3JlYXRlIC9zeXMvYnVzL2FwLiAqLwogCXJjID0gYnVzX3JlZ2lzdGVyKCZhcF9idXNfdHlwZSk7CkBAIC0xMTk3LDYgKzEyMjAsNyBAQAogCQlidXNfcmVtb3ZlX2ZpbGUoJmFwX2J1c190eXBlLCBhcF9idXNfYXR0cnNbaV0pOwogCWJ1c191bnJlZ2lzdGVyKCZhcF9idXNfdHlwZSk7CiBvdXQ6CisJdW5yZWdpc3Rlcl9yZXNldF9jYWxsKCZhcF9yZXNldF9jYWxsKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEyMTMsMTAgKzEyMzcsMTIgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKKwlhcF9yZXNldF9kb21haW4oKTsKIAlhcF9wb2xsX3RocmVhZF9zdG9wKCk7CiAJZGVsX3RpbWVyX3N5bmMoJmFwX2NvbmZpZ190aW1lcik7CiAJZGVsX3RpbWVyX3N5bmMoJmFwX3BvbGxfdGltZXIpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGFwX3dvcmtfcXVldWUpOworCXRhc2tsZXRfa2lsbCgmYXBfdGFza2xldCk7CiAJczM5MF9yb290X2Rldl91bnJlZ2lzdGVyKGFwX3Jvb3RfZGV2aWNlKTsKIAl3aGlsZSAoKGRldiA9IGJ1c19maW5kX2RldmljZSgmYXBfYnVzX3R5cGUsIE5VTEwsIE5VTEwsCiAJCSAgICBfX2FwX21hdGNoX2FsbCkpKQpAQCAtMTIyNyw2ICsxMjUzLDcgQEAKIAlmb3IgKGkgPSAwOyBhcF9idXNfYXR0cnNbaV07IGkrKykKIAkJYnVzX3JlbW92ZV9maWxlKCZhcF9idXNfdHlwZSwgYXBfYnVzX2F0dHJzW2ldKTsKIAlidXNfdW5yZWdpc3RlcigmYXBfYnVzX3R5cGUpOworCXVucmVnaXN0ZXJfcmVzZXRfY2FsbCgmYXBfcmVzZXRfY2FsbCk7CiB9CiAKICNpZm5kZWYgQ09ORklHX1pDUllQVF9NT05PTElUSElDCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jZXgyYS5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfY2V4MmEuYwppbmRleCBhNjJiMDAwLi41YmIxM2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jZXgyYS5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2NleDJhLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogCXN0cnVjdCBjb21wbGV0aW9uIHdvcms7CiAJaW50IHJjOwogCi0JYXBfbXNnLm1lc3NhZ2UgPSAodm9pZCAqKSBrbWFsbG9jKENFWDJBX01BWF9NRVNTQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWFwX21zZy5tZXNzYWdlID0ga21hbGxvYyhDRVgyQV9NQVhfTUVTU0FHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFwX21zZy5tZXNzYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhcF9tc2cucHNtaWQgPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cnJlbnQtPnBpZCkgPDwgMzIpICsKQEAgLTMzNyw3ICszMzcsNyBAQAogCXN0cnVjdCBjb21wbGV0aW9uIHdvcms7CiAJaW50IHJjOwogCi0JYXBfbXNnLm1lc3NhZ2UgPSAodm9pZCAqKSBrbWFsbG9jKENFWDJBX01BWF9NRVNTQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWFwX21zZy5tZXNzYWdlID0ga21hbGxvYyhDRVgyQV9NQVhfTUVTU0FHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFwX21zZy5tZXNzYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhcF9tc2cucHNtaWQgPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cnJlbnQtPnBpZCkgPDwgMzIpICsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNhLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2ljYS5jCmluZGV4IGI2YTRlY2QuLjMyZTM3MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNhLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpY2EuYwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJc3RydWN0IGNvbXBsZXRpb24gd29yazsKIAlpbnQgcmM7CiAKLQlhcF9tc2cubWVzc2FnZSA9ICh2b2lkICopIGttYWxsb2MoUENJQ0FfTUFYX01FU1NBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJYXBfbXNnLm1lc3NhZ2UgPSBrbWFsbG9jKFBDSUNBX01BWF9NRVNTQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghYXBfbXNnLm1lc3NhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCWFwX21zZy5wc21pZCA9ICgoKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudC0+cGlkKSA8PCAzMikgKwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJc3RydWN0IGNvbXBsZXRpb24gd29yazsKIAlpbnQgcmM7CiAKLQlhcF9tc2cubWVzc2FnZSA9ICh2b2lkICopIGttYWxsb2MoUENJQ0FfTUFYX01FU1NBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJYXBfbXNnLm1lc3NhZ2UgPSBrbWFsbG9jKFBDSUNBX01BWF9NRVNTQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghYXBfbXNnLm1lc3NhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCWFwX21zZy5wc21pZCA9ICgoKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudC0+cGlkKSA8PCAzMikgKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwppbmRleCAyZGE4YjkzLi5iNzE1M2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwpAQCAtNzE3LDcgKzcxNyw3IEBACiAJfTsKIAlpbnQgcmM7CiAKLQlhcF9tc2cubWVzc2FnZSA9ICh2b2lkICopIGttYWxsb2MoUENJWENDX01BWF9YQ1JCX01FU1NBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJYXBfbXNnLm1lc3NhZ2UgPSBrbWFsbG9jKFBDSVhDQ19NQVhfWENSQl9NRVNTQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghYXBfbXNnLm1lc3NhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCWFwX21zZy5wc21pZCA9ICgoKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudC0+cGlkKSA8PCAzMikgKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9LY29uZmlnIGIvZHJpdmVycy9zMzkwL25ldC9LY29uZmlnCmluZGV4IDFhOTNmYTYuLjUyNjI1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3MzOTAvbmV0L0tjb25maWcKQEAgLTI3LDEwICsyNyw3IEBACiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpbnRlci11c2VyIGNvbW11bmljYXRpb24KIAkgIHVuZGVyIFZNIG9yIFZJRi4gSWYgdW5zdXJlLCBzYXkgIlkiIHRvIGVuYWJsZSBhIGZhc3QgY29tbXVuaWNhdGlvbgotCSAgbGluayBiZXR3ZWVuIFZNIGd1ZXN0cy4gQXQgYm9vdCB0aW1lIHRoZSB1c2VyIElEIG9mIHRoZSBndWVzdCBuZWVkcwotCSAgdG8gYmUgcGFzc2VkIHRvIHRoZSBrZXJuZWwuIE5vdGUgdGhhdCBib3RoIGtlcm5lbHMgbmVlZCB0byBiZQotCSAgY29tcGlsZWQgd2l0aCB0aGlzIG9wdGlvbiBhbmQgYm90aCBuZWVkIHRvIGJlIGJvb3RlZCB3aXRoIHRoZSB1c2VyIElECi0JICBvZiB0aGUgb3RoZXIgVk0gZ3Vlc3QuCisJICBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLgogCiBjb25maWcgTkVUSVVDVgogCXRyaXN0YXRlICJJVUNWIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQgKFZNIG9ubHkpIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYwppbmRleCAzMjU3YzIyLi4wM2NjMjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYwpAQCAtMTY0Niw3ICsxNjQ2LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAltZW1zZXQoY2gsIDAsIHNpemVvZiAoc3RydWN0IGNoYW5uZWwpKTsKLQlpZiAoKGNoLT5jY3cgPSAoc3RydWN0IGNjdzEgKikga21hbGxvYyg4KnNpemVvZihzdHJ1Y3QgY2N3MSksCisJaWYgKChjaC0+Y2N3ID0ga21hbGxvYyg4KnNpemVvZihzdHJ1Y3QgY2N3MSksCiAJCQkJCSAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSkpID09IE5VTEwpIHsKIAkJa2ZyZWUoY2gpOwogCQljdGNfcHJfd2FybigiY3RjOiBPdXQgb2YgbWVtb3J5IGluIGFkZF9jaGFubmVsXG4iKTsKQEAgLTE2OTMsNyArMTY5Myw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAJZnNtX25ld3N0YXRlKGNoLT5mc20sIENIX1NUQVRFX0lETEUpOwotCWlmICgoY2gtPmlyYiA9IChzdHJ1Y3QgaXJiICopIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgaXJiKSwKKwlpZiAoKGNoLT5pcmIgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGlyYiksCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCWN0Y19wcl93YXJuKCJjdGM6IE91dCBvZiBtZW1vcnkgaW4gYWRkX2NoYW5uZWxcbiIpOwogCQlrZnJlZV9mc20oY2gtPmZzbSk7CkBAIC0yNTM1LDcgKzI1MzUsNyBAQAogCURCRl9URVhUKHRyYWNlLCA0LCBfX0ZVTkNUSU9OX18pOwogCWlmICghcHJpdikKIAkJcmV0dXJuOwotCXNidWYgPSAoY2hhciAqKWttYWxsb2MoMjA0OCwgR0ZQX0tFUk5FTCk7CisJc2J1ZiA9IGttYWxsb2MoMjA0OCwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNidWYgPT0gTlVMTCkKIAkJcmV0dXJuOwogCXAgPSBzYnVmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9pdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYwppbmRleCAxNDc2Y2UyLi4yMjlhZWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYwpAQCAtNzcyLDcgKzc3Miw3IEBACiAJfQogCiAJLyogQWxsb2NhdGUgaGFuZGxlciBlbnRyeSAqLwotCW5ld19oYW5kbGVyID0gKGhhbmRsZXIgKilrbWFsbG9jKHNpemVvZihoYW5kbGVyKSwgR0ZQX0FUT01JQyk7CisJbmV3X2hhbmRsZXIgPSBrbWFsbG9jKHNpemVvZihoYW5kbGVyKSwgR0ZQX0FUT01JQyk7CiAJaWYgKG5ld19oYW5kbGVyID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHN0b3JhZ2UgYWxsb2NhdGlvbiBmb3IgbmV3IGhhbmRsZXIgIgogCQkgICAgICAgImZhaWxlZC5cbiIsIF9fRlVOQ1RJT05fXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGguaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCmluZGV4IDUzYzM1OGMuLmU5NWMyODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCkBAIC03MTAsNyArNzEwLDcgQEAKIAlpbnQgKCpjYWxsYmFjaykoc3RydWN0IHFldGhfY2FyZCAqLHN0cnVjdCBxZXRoX3JlcGx5ICosdW5zaWduZWQgbG9uZyk7CiAgCXUzMiBzZXFubzsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKLQlpbnQgcmVjZWl2ZWQ7CisJYXRvbWljX3QgcmVjZWl2ZWQ7CiAJaW50IHJjOwogCXZvaWQgKnBhcmFtOwogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwppbmRleCAyYmRlNGYxLi5kMmVmYTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKQEAgLTQ3MSw3ICs0NzEsNyBAQAogCSAgICBjaGFubmVsLT5zdGF0ZSA9PSBDSF9TVEFURV9VUCkKIAkJcWV0aF9pc3N1ZV9uZXh0X3JlYWQoY2FyZCk7CiAKLQl0YXNrbGV0X3NjaGVkdWxlKCZjaGFubmVsLT5pcnFfdGFza2xldCk7CisJcWV0aF9pcnFfdGFza2xldCgodW5zaWduZWQgbG9uZyljaGFubmVsKTsKIAlyZXR1cm47CiBvdXQ6CiAJd2FrZV91cCgmY2FyZC0+d2FpdF9xKTsKQEAgLTk1MSw0MCArOTUxLDYgQEAKIH0KIAogc3RhdGljIGludAotcWV0aF9yZWdpc3Rlcl9pcF9hZGRyZXNzZXModm9pZCAqcHRyKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7Ci0KLQljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgcHRyOwotCWRhZW1vbml6ZSgicWV0aF9yZWdfaXAiKTsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInJlZ2lwdGgxIik7Ci0JaWYgKCFxZXRoX2RvX3J1bl90aHJlYWQoY2FyZCwgUUVUSF9TRVRfSVBfVEhSRUFEKSkKLQkJcmV0dXJuIDA7Ci0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJyZWdpcHRoMiIpOwotCXFldGhfc2V0X2lwX2FkZHJfbGlzdChjYXJkKTsKLQlxZXRoX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChjYXJkLCBRRVRIX1NFVF9JUF9USFJFQUQpOwotCXJldHVybiAwOwotfQotCi0vKgotICogRHJpdmUgdGhlIFNFVF9QUk9NSVNDX01PREUgdGhyZWFkCi0gKi8KLXN0YXRpYyBpbnQKLXFldGhfc2V0X3Byb21pc2NfbW9kZSh2b2lkICpwdHIpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIHB0cjsKLQotCWRhZW1vbml6ZSgicWV0aF9zZXRwcm0iKTsKLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInNldHBybTEiKTsKLQlpZiAoIXFldGhfZG9fcnVuX3RocmVhZChjYXJkLCBRRVRIX1NFVF9QUk9NSVNDX01PREVfVEhSRUFEKSkKLQkJcmV0dXJuIDA7Ci0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJzZXRwcm0yIik7Ci0JcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlKGNhcmQpOwotCXFldGhfY2xlYXJfdGhyZWFkX3J1bm5pbmdfYml0KGNhcmQsIFFFVEhfU0VUX1BST01JU0NfTU9ERV9USFJFQUQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50CiBxZXRoX3JlY292ZXIodm9pZCAqcHRyKQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CkBAIC0xMDQ3LDExICsxMDEzLDYgQEAKIAlpZiAoY2FyZC0+cmVhZC5zdGF0ZSAhPSBDSF9TVEFURV9VUCAmJgogCSAgICBjYXJkLT53cml0ZS5zdGF0ZSAhPSBDSF9TVEFURV9VUCkKIAkJcmV0dXJuOwotCi0JaWYgKHFldGhfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIFFFVEhfU0VUX0lQX1RIUkVBRCkpCi0JCWtlcm5lbF90aHJlYWQocWV0aF9yZWdpc3Rlcl9pcF9hZGRyZXNzZXMsICh2b2lkICopY2FyZCxTSUdDSExEKTsKLQlpZiAocWV0aF9kb19zdGFydF90aHJlYWQoY2FyZCwgUUVUSF9TRVRfUFJPTUlTQ19NT0RFX1RIUkVBRCkpCi0JCWtlcm5lbF90aHJlYWQocWV0aF9zZXRfcHJvbWlzY19tb2RlLCAodm9pZCAqKWNhcmQsIFNJR0NITEQpOwogCWlmIChxZXRoX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSkKIAkJa2VybmVsX3RocmVhZChxZXRoX3JlY292ZXIsICh2b2lkICopIGNhcmQsIFNJR0NITEQpOwogfQpAQCAtMTA3NCw3ICsxMDM1LDcgQEAKIAkJY2FyZC0+b3B0aW9ucy5sYXllcjIgPSAxOwogCWVsc2UKIAkJY2FyZC0+b3B0aW9ucy5sYXllcjIgPSAwOwotCWNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMgPSAxOworCWNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMgPSAwOwogfQogCiAvKioKQEAgLTE2MTMsOCArMTU3NCw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlxZXRoX3NldHVwX2NjdygmY2FyZC0+cmVhZCwgaW9iLT5kYXRhLCBRRVRIX0JVRlNJWkUpOwotCXdhaXRfZXZlbnQoY2FyZC0+d2FpdF9xLAotCQkgICBhdG9taWNfY21weGNoZygmY2FyZC0+cmVhZC5pcnFfcGVuZGluZywgMCwgMSkgPT0gMCk7CiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgIm5vaXJxcG5kIik7CiAJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNhcmQtPnJlYWQuY2N3ZGV2LCAmY2FyZC0+cmVhZC5jY3csCiAJCQkgICAgICAoYWRkcl90KSBpb2IsIDAsIDApOwpAQCAtMTYzNSw2ICsxNTk0LDcgQEAKIAlyZXBseSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX3JlcGx5KSwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlcGx5KXsKIAkJYXRvbWljX3NldCgmcmVwbHktPnJlZmNudCwgMSk7CisJCWF0b21pY19zZXQoJnJlcGx5LT5yZWNlaXZlZCwgMCk7CiAJCXJlcGx5LT5jYXJkID0gY2FyZDsKIAl9OwogCXJldHVybiByZXBseTsKQEAgLTE2NTUsMzEgKzE2MTUsNiBAQAogCQlrZnJlZShyZXBseSk7CiB9CiAKLXN0YXRpYyB2b2lkCi1xZXRoX2NtZF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksICpsaXN0X3JlcGx5LCAqcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JcmVwbHkgPSAoc3RydWN0IHFldGhfcmVwbHkgKikgZGF0YTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcmVwbHktPmNhcmQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGlzdF9yZXBseSwgciwKLQkJCQkgJnJlcGx5LT5jYXJkLT5jbWRfd2FpdGVyX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHJlcGx5ID09IGxpc3RfcmVwbHkpewotCQkJcWV0aF9nZXRfcmVwbHkocmVwbHkpOwotCQkJbGlzdF9kZWxfaW5pdCgmcmVwbHktPmxpc3QpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmVwbHktPmNhcmQtPmxvY2ssIGZsYWdzKTsKLQkJCXJlcGx5LT5yYyA9IC1FVElNRTsKLQkJCXJlcGx5LT5yZWNlaXZlZCA9IDE7Ci0JCQl3YWtlX3VwKCZyZXBseS0+d2FpdF9xKTsKLQkJCXFldGhfcHV0X3JlcGx5KHJlcGx5KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZXBseS0+Y2FyZC0+bG9jaywgZmxhZ3MpOwotfQotCi0KIHN0YXRpYyBzdHJ1Y3QgcWV0aF9pcGFfY21kICoKIHFldGhfY2hlY2tfaXBhX2RhdGEoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iKQogewpAQCAtMTc0NSw3ICsxNjgwLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVwbHksIHIsICZjYXJkLT5jbWRfd2FpdGVyX2xpc3QsIGxpc3QpIHsKIAkJcWV0aF9nZXRfcmVwbHkocmVwbHkpOwogCQlyZXBseS0+cmMgPSAtRUlPOwotCQlyZXBseS0+cmVjZWl2ZWQgPSAxOworCQlhdG9taWNfaW5jKCZyZXBseS0+cmVjZWl2ZWQpOwogCQlsaXN0X2RlbF9pbml0KCZyZXBseS0+bGlzdCk7CiAJCXdha2VfdXAoJnJlcGx5LT53YWl0X3EpOwogCQlxZXRoX3B1dF9yZXBseShyZXBseSk7CkBAIC0xODE0LDcgKzE3NDksNyBAQAogCQkJCQkgICAgICAmY2FyZC0+Y21kX3dhaXRlcl9saXN0KTsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCQl9IGVsc2UgewotCQkJCXJlcGx5LT5yZWNlaXZlZCA9IDE7CisJCQkJYXRvbWljX2luYygmcmVwbHktPnJlY2VpdmVkKTsKIAkJCQl3YWtlX3VwKCZyZXBseS0+d2FpdF9xKTsKIAkJCX0KIAkJCXFldGhfcHV0X3JlcGx5KHJlcGx5KTsKQEAgLTE4NTgsNyArMTc5Myw3IEBACiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5ID0gTlVMTDsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAic2VuZGN0bCIpOwogCkBAIC0xODczLDIxICsxODA4LDIwIEBACiAJCXJlcGx5LT5zZXFubyA9IFFFVEhfSURYX0NPTU1BTkRfU0VRTk87CiAJZWxzZQogCQlyZXBseS0+c2Vxbm8gPSBjYXJkLT5zZXFuby5pcGErKzsKLQlpbml0X3RpbWVyKCZ0aW1lcik7Ci0JdGltZXIuZnVuY3Rpb24gPSBxZXRoX2NtZF90aW1lb3V0OwotCXRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcmVwbHk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcmVwbHktPndhaXRfcSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZF90YWlsKCZyZXBseS0+bGlzdCwgJmNhcmQtPmNtZF93YWl0ZXJfbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCVFFVEhfREJGX0hFWChjb250cm9sLCAyLCBpb2ItPmRhdGEsIFFFVEhfREJGX0NPTlRST0xfTEVOKTsKLQl3YWl0X2V2ZW50KGNhcmQtPndhaXRfcSwKLQkJICAgYXRvbWljX2NtcHhjaGcoJmNhcmQtPndyaXRlLmlycV9wZW5kaW5nLCAwLCAxKSA9PSAwKTsKKworCXdoaWxlIChhdG9taWNfY21weGNoZygmY2FyZC0+d3JpdGUuaXJxX3BlbmRpbmcsIDAsIDEpKSA7CiAJcWV0aF9wcmVwYXJlX2NvbnRyb2xfZGF0YShjYXJkLCBsZW4sIGlvYik7CisKIAlpZiAoSVNfSVBBKGlvYi0+ZGF0YSkpCi0JCXRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgUUVUSF9JUEFfVElNRU9VVDsKKwkJdGltZW91dCA9IGppZmZpZXMgKyBRRVRIX0lQQV9USU1FT1VUOwogCWVsc2UKLQkJdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBRRVRIX1RJTUVPVVQ7CisJCXRpbWVvdXQgPSBqaWZmaWVzICsgUUVUSF9USU1FT1VUOworCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgIm5vaXJxcG5kIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNhcmQtPndyaXRlLmNjd2RldiksIGZsYWdzKTsKIAlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2FyZC0+d3JpdGUuY2N3ZGV2LCAmY2FyZC0+d3JpdGUuY2N3LApAQCAtMTkwNiw5ICsxODQwLDE2IEBACiAJCXdha2VfdXAoJmNhcmQtPndhaXRfcSk7CiAJCXJldHVybiByYzsKIAl9Ci0JYWRkX3RpbWVyKCZ0aW1lcik7Ci0Jd2FpdF9ldmVudChyZXBseS0+d2FpdF9xLCByZXBseS0+cmVjZWl2ZWQpOwotCWRlbF90aW1lcl9zeW5jKCZ0aW1lcik7CisJd2hpbGUgKCFhdG9taWNfcmVhZCgmcmVwbHktPnJlY2VpdmVkKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJlcGx5LT5jYXJkLT5sb2NrLCBmbGFncyk7CisJCQlsaXN0X2RlbF9pbml0KCZyZXBseS0+bGlzdCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZXBseS0+Y2FyZC0+bG9jaywgZmxhZ3MpOworCQkJcmVwbHktPnJjID0gLUVUSU1FOworCQkJYXRvbWljX2luYygmcmVwbHktPnJlY2VpdmVkKTsKKwkJCXdha2VfdXAoJnJlcGx5LT53YWl0X3EpOworCQl9CisJfTsKIAlyYyA9IHJlcGx5LT5yYzsKIAlxZXRoX3B1dF9yZXBseShyZXBseSk7CiAJcmV0dXJuIHJjOwpAQCAtMjQ2NiwzMiArMjQwNywxNyBAQAogCQlxZXRoX3JlYnVpbGRfc2tiX2Zha2VfbGxfZXRoKGNhcmQsIHNrYiwgaGRyKTsKIH0KIAotc3RhdGljIGlubGluZSBfX3UxNgorc3RhdGljIGlubGluZSB2b2lkCiBxZXRoX2xheWVyMl9yZWJ1aWxkX3NrYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJc3RydWN0IHFldGhfaGRyICpoZHIpCiB7Ci0JdW5zaWduZWQgc2hvcnQgdmxhbl9pZCA9IDA7Ci0jaWZkZWYgQ09ORklHX1FFVEhfVkxBTgotCXN0cnVjdCB2bGFuX2hkciAqdmhkcjsKLSNlbmRpZgotCiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCXNrYi0+cHJvdG9jb2wgPSBxZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7CiAJaWYgKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBOT19DSEVDS1NVTU1JTkcpCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJZWxzZQogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0jaWZkZWYgQ09ORklHX1FFVEhfVkxBTgotCWlmIChoZHItPmhkci5sMi5mbGFnc1syXSAmIChRRVRIX0xBWUVSMl9GTEFHX1ZMQU4pKSB7Ci0JCXZoZHIgPSAoc3RydWN0IHZsYW5faGRyICopIHNrYi0+ZGF0YTsKLQkJc2tiLT5wcm90b2NvbCA9Ci0JCQlfX2NvbnN0YW50X2h0b25zKHZoZHItPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOwotCQl2bGFuX2lkID0gaGRyLT5oZHIubDIudmxhbl9pZDsKLQkJc2tiX3B1bGwoc2tiLCBWTEFOX0hMRU4pOwotCX0KLSNlbmRpZgogCSooKF9fdTMyICopc2tiLT5jYikgPSArK2NhcmQtPnNlcW5vLnBrdF9zZXFubzsKLQlyZXR1cm4gdmxhbl9pZDsKIH0KIAogc3RhdGljIGlubGluZSBfX3UxNgpAQCAtMjU2MCw3ICsyNDg2LDYgQEAKIAlpbnQgb2Zmc2V0OwogCWludCByeHJjOwogCV9fdTE2IHZsYW5fdGFnID0gMDsKLQlfX3UxNiAqdmxhbl9hZGRyOwogCiAJLyogZ2V0IGZpcnN0IGVsZW1lbnQgb2YgY3VycmVudCBidWZmZXIgKi8KIAllbGVtZW50ID0gKHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICopJmJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdOwpAQCAtMjU3MSw3ICsyNDk2LDcgQEAKIAkJCQkgICAgICAgJm9mZnNldCwgJmhkcikpKSB7CiAJCXNrYi0+ZGV2ID0gY2FyZC0+ZGV2OwogCQlpZiAoaGRyLT5oZHIubDIuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjIpCi0JCQl2bGFuX3RhZyA9IHFldGhfbGF5ZXIyX3JlYnVpbGRfc2tiKGNhcmQsIHNrYiwgaGRyKTsKKwkJCXFldGhfbGF5ZXIyX3JlYnVpbGRfc2tiKGNhcmQsIHNrYiwgaGRyKTsKIAkJZWxzZSBpZiAoaGRyLT5oZHIubDMuaWQgPT0gUUVUSF9IRUFERVJfVFlQRV9MQVlFUjMpCiAJCQl2bGFuX3RhZyA9IHFldGhfcmVidWlsZF9za2IoY2FyZCwgc2tiLCBoZHIpOwogCQllbHNlIHsgLyppbiBjYXNlIG9mIE9TTiovCkBAIC0zOTY4LDEzICszODkzLDIyIEBACiBxZXRoX3ByZXBhcmVfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSBzdHJ1Y3QgcWV0aF9oZHIgKipoZHIsIGludCBpcHYpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CisJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IsICpuZXdfc2tiMjsKIAkKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAicHJlcHNrYiIpOwotCi0gICAgICAgIG5ld19za2IgPSBxZXRoX3JlYWxsb2NfaGVhZHJvb20oY2FyZCwgc2tiLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7Ci0gICAgICAgCWlmIChuZXdfc2tiID09IE5VTEwpCisJbmV3X3NrYiA9IHNrYjsKKwluZXdfc2tiID0gcWV0aF9wc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIW5ld19za2IpCiAJCXJldHVybiBOVUxMOworCW5ld19za2IyID0gcWV0aF9yZWFsbG9jX2hlYWRyb29tKGNhcmQsIG5ld19za2IsCisJCQkJCSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSk7CisJaWYgKCFuZXdfc2tiMikgeworCQlfX3FldGhfZnJlZV9uZXdfc2tiKHNrYiwgbmV3X3NrYik7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAobmV3X3NrYiAhPSBza2IpCisJCV9fcWV0aF9mcmVlX25ld19za2IobmV3X3NrYjIsIG5ld19za2IpOworCW5ld19za2IgPSBuZXdfc2tiMjsKIAkqaGRyID0gX19xZXRoX3ByZXBhcmVfc2tiKGNhcmQsIG5ld19za2IsIGlwdik7CiAJaWYgKCpoZHIgPT0gTlVMTCkgewogCQlfX3FldGhfZnJlZV9uZXdfc2tiKHNrYiwgbmV3X3NrYik7CkBAIC00ODQ0LDkgKzQ3NzgsMTEgQEAKIAkJCSAgICIoMHgleC8lZClcbiIsCiAJCQkgICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBxZXRoX2FycF9nZXRfZXJyb3JfY2F1c2UoJnJjKSwKIAkJCSAgIHRtcCwgdG1wKTsKLQkJY29weV90b191c2VyKHVkYXRhLCBxaW5mby51ZGF0YSwgNCk7CisJCWlmIChjb3B5X3RvX3VzZXIodWRhdGEsIHFpbmZvLnVkYXRhLCA0KSkKKwkJCXJjID0gLUVGQVVMVDsKIAl9IGVsc2UgewotCQljb3B5X3RvX3VzZXIodWRhdGEsIHFpbmZvLnVkYXRhLCBxaW5mby51ZGF0YV9sZW4pOworCQlpZiAoY29weV90b191c2VyKHVkYXRhLCBxaW5mby51ZGF0YSwgcWluZm8udWRhdGFfbGVuKSkKKwkJCXJjID0gLUVGQVVMVDsKIAl9CiAJa2ZyZWUocWluZm8udWRhdGEpOwogCXJldHVybiByYzsKQEAgLTQ5OTIsOCArNDkyOCwxMCBAQAogCWlmIChyYykKIAkJUFJJTlRfV0FSTigiU05NUCBjb21tYW5kIGZhaWxlZCBvbiAlczogKDB4JXgpXG4iLAogCQkJICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOwotCSBlbHNlCi0JCWNvcHlfdG9fdXNlcih1ZGF0YSwgcWluZm8udWRhdGEsIHFpbmZvLnVkYXRhX2xlbik7CisJZWxzZSB7CisJCWlmIChjb3B5X3RvX3VzZXIodWRhdGEsIHFpbmZvLnVkYXRhLCBxaW5mby51ZGF0YV9sZW4pKQorCQkJcmMgPSAtRUZBVUxUOworCX0KIAogCWtmcmVlKHVyZXEpOwogCWtmcmVlKHFpbmZvLnVkYXRhKTsKQEAgLTU1NDQsMTIgKzU0ODIsMTAgQEAKIAlxZXRoX2FkZF9tdWx0aWNhc3RfaXB2NihjYXJkKTsKICNlbmRpZgogb3V0OgotIAlpZiAocWV0aF9zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLCBRRVRIX1NFVF9JUF9USFJFQUQpID09IDApCi0JCXNjaGVkdWxlX3dvcmsoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlcik7CisJcWV0aF9zZXRfaXBfYWRkcl9saXN0KGNhcmQpOwogCWlmICghcWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERSkpCiAJCXJldHVybjsKLQlpZiAocWV0aF9zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLCBRRVRIX1NFVF9QUk9NSVNDX01PREVfVEhSRUFEKT09MCkKLQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwlxZXRoX3NldGFkcF9wcm9taXNjX21vZGUoY2FyZCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTYzNTEsNiArNjI4Nyw0MiBAQAogfTsKIAogc3RhdGljIGludAorcWV0aF9oYXJkX2hlYWRlcl9wYXJzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBjaGFyICpoYWRkcikKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOworCXN0cnVjdCBldGhoZHIgKmV0aDsKKworCWNhcmQgPSBxZXRoX2dldF9jYXJkX2Zyb21fZGV2KHNrYi0+ZGV2KTsKKwlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpCisJCWdvdG8gaGF2ZWhlYWRlcjsKKyNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CisJLyogY2F1c2Ugb2YgdGhlIG1hbmlwdWxhdGVkIGFycCBjb25zdHJ1Y3RvciBhbmQgdGhlIEFSUAorCSAgIGZsYWcgZm9yIE9TQUUgZGV2aWNlcyB3ZSBoYXZlIHNvbWUgbmFzdHkgZXhjZXB0aW9ucyAqLworCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NBRSkgeworCQlpZiAoIWNhcmQtPm9wdGlvbnMuZmFrZV9sbCkgeworCQkJaWYgKChza2ItPnBrdF90eXBlPT1QQUNLRVRfT1VUR09JTkcpICYmCisJCQkgICAgKHNrYi0+cHJvdG9jb2w9PUVUSF9QX0lQVjYpKQorCQkJCWdvdG8gaGF2ZWhlYWRlcjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICgoc2tiLT5wa3RfdHlwZT09UEFDS0VUX09VVEdPSU5HKSAmJgorCQkJICAgIChza2ItPnByb3RvY29sPT1FVEhfUF9JUCkpCisJCQkJcmV0dXJuIDA7CisJCQllbHNlCisJCQkJZ290byBoYXZlaGVhZGVyOworCQl9CisJfQorI2VuZGlmCisJaWYgKCFjYXJkLT5vcHRpb25zLmZha2VfbGwpCisJCXJldHVybiAwOworaGF2ZWhlYWRlcjoKKwlldGggPSBldGhfaGRyKHNrYik7CisJbWVtY3B5KGhhZGRyLCBldGgtPmhfc291cmNlLCBFVEhfQUxFTik7CisJcmV0dXJuIEVUSF9BTEVOOworfQorCitzdGF0aWMgaW50CiBxZXRoX25ldGRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKQEAgLTYzODgsNyArNjM2MCwxMCBAQAogCWlmIChjYXJkLT5vcHRpb25zLmZha2VfbGwgJiYKIAkJKHFldGhfZ2V0X25ldGRldl9mbGFncyhjYXJkKSAmIElGRl9OT0FSUCkpCiAJCQlkZXYtPmhhcmRfaGVhZGVyID0gcWV0aF9mYWtlX2hlYWRlcjsKLQlkZXYtPmhhcmRfaGVhZGVyX3BhcnNlID0gTlVMTDsKKwlpZiAoZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyX1RSKQorCQlkZXYtPmhhcmRfaGVhZGVyX3BhcnNlID0gTlVMTDsKKwllbHNlCisJCWRldi0+aGFyZF9oZWFkZXJfcGFyc2UgPSBxZXRoX2hhcmRfaGVhZGVyX3BhcnNlOwogCWRldi0+c2V0X21hY19hZGRyZXNzID0gcWV0aF9sYXllcjJfc2V0X21hY19hZGRyZXNzOwogCWRldi0+ZmxhZ3MgfD0gcWV0aF9nZXRfbmV0ZGV2X2ZsYWdzKGNhcmQpOwogCWlmICgoY2FyZC0+b3B0aW9ucy5mYWtlX2Jyb2FkY2FzdCkgfHwKQEAgLTgyMzUsOCArODIxMCw3IEBACiAJfQogCWlmICghcWV0aF9hZGRfaXAoY2FyZCwgaXBhZGRyKSkKIAkJa2ZyZWUoaXBhZGRyKTsKLSAJaWYgKHFldGhfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwgUUVUSF9TRVRfSVBfVEhSRUFEKSA9PSAwKQotCQlzY2hlZHVsZV93b3JrKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOworCXFldGhfc2V0X2lwX2FkZHJfbGlzdChjYXJkKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTgyNjQsOCArODIzOCw3IEBACiAJCXJldHVybjsKIAlpZiAoIXFldGhfZGVsZXRlX2lwKGNhcmQsIGlwYWRkcikpCiAJCWtmcmVlKGlwYWRkcik7Ci0gCWlmIChxZXRoX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIFFFVEhfU0VUX0lQX1RIUkVBRCkgPT0gMCkKLQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwlxZXRoX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7CiB9CiAKIC8qCkBAIC04MzA4LDggKzgyODEsNyBAQAogCX0KIAlpZiAoIXFldGhfYWRkX2lwKGNhcmQsIGlwYWRkcikpCiAJCWtmcmVlKGlwYWRkcik7Ci0gCWlmIChxZXRoX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIFFFVEhfU0VUX0lQX1RIUkVBRCkgPT0gMCkKLQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwlxZXRoX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgzMzcsOCArODMwOSw3IEBACiAJCXJldHVybjsKIAlpZiAoIXFldGhfZGVsZXRlX2lwKGNhcmQsIGlwYWRkcikpCiAJCWtmcmVlKGlwYWRkcik7Ci0gCWlmIChxZXRoX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIFFFVEhfU0VUX0lQX1RIUkVBRCkgPT0gMCkKLQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwlxZXRoX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7CiB9CiAKIC8qKgpAQCAtODM4MCw4ICs4MzUxLDcgQEAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0gCWlmIChxZXRoX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIFFFVEhfU0VUX0lQX1RIUkVBRCkgPT0gMCkKLQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwlxZXRoX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7CiBvdXQ6CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQpAQCAtODQzMyw4ICs4NDAzLDcgQEAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0gCWlmIChxZXRoX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIFFFVEhfU0VUX0lQX1RIUkVBRCkgPT0gMCkKLQkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwlxZXRoX3NldF9pcF9hZGRyX2xpc3QoY2FyZCk7CiBvdXQ6CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggNWQzOWIyZC4uODUwOTNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlsZW4gPSBzdHJsZW4oZGV2c3RyKSArIDE7Ci0Jc3RyID0gKGNoYXIgKikga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCXN0ciA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXN0cikKIAkJZ290byBlcnJfb3V0OwogCW1lbWNweShzdHIsIGRldnN0ciwgbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2JwcC5jIGIvZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKaW5kZXggMzg1ZjRmNy4uYWM3ZDEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvYnBwLmMKQEAgLTYyMSw3ICs2MjEsNyBAQAogc3RhdGljIHNzaXplX3QgYnBwX3JlYWQoc3RydWN0IGZpbGUgKmYsIGNoYXIgX191c2VyICpjLCBzaXplX3QgY250LCBsb2ZmX3QgKiBwcG9zKQogewogICAgICAgbG9uZyByYzsKLSAgICAgIHVuc2lnbmVkIG1pbm9yID0gaW1pbm9yKGYtPmZfZGVudHJ5LT5kX2lub2RlKTsKKyAgICAgIHVuc2lnbmVkIG1pbm9yID0gaW1pbm9yKGYtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogICAgICAgaWYgKG1pbm9yID49IEJQUF9OTykgcmV0dXJuIC1FTk9ERVY7CiAgICAgICBpZiAoIWluc3RhbmNlc1ttaW5vcl0ucHJlc2VudCkgcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTc3NCw3ICs3NzQsNyBAQAogc3RhdGljIHNzaXplX3QgYnBwX3dyaXRlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqYywgc2l6ZV90IGNudCwgbG9mZl90ICogcHBvcykKIHsKICAgICAgIGxvbmcgZXJybm8gPSAwOwotICAgICAgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoZi0+Zl9kZW50cnktPmRfaW5vZGUpOworICAgICAgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoZi0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAgICAgICBpZiAobWlub3IgPj0gQlBQX05PKSByZXR1cm4gLUVOT0RFVjsKICAgICAgIGlmICghaW5zdGFuY2VzW21pbm9yXS5wcmVzZW50KSByZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvY3B3YXRjaGRvZy5jIGIvZHJpdmVycy9zYnVzL2NoYXIvY3B3YXRjaGRvZy5jCmluZGV4IGY1ODAzZWMuLmFkMWM3ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2Nwd2F0Y2hkb2cuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9jcHdhdGNoZG9nLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogCWNhc2UgV0lPQ1NUT1A6CiAJY2FzZSBXSU9DR1NUQVQ6CiAJCWxvY2tfa2VybmVsKCk7Ci0JCXJ2YWwgPSB3ZF9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOworCQlydmFsID0gd2RfaW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyBoYW5kbGVkIGJ5IHRoZSBnZW5lcmljIGNvbXBhdCBsYXllciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYyBiL2RyaXZlcnMvc2J1cy9jaGFyL2Rpc3BsYXk3c2VnLmMKaW5kZXggZDkyYmM4OC4uYTQ5MDllMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAlfX3U4IGlyZWcgPSAwOwogCWludCBlcnJvciA9IDA7CiAKLQlpZiAoRDdTX01JTk9SICE9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkpCisJaWYgKEQ3U19NSU5PUiAhPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJbG9ja19rZXJuZWwoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMgYi9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCmluZGV4IDgxYmEyZDcuLjRlMmEwZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwpAQCAtNjc2LDcgKzY3Niw3IEBACiAJY2FzZSBPUFJPTVNFVENVUjoKIAljYXNlIE9QUk9NUENJMk5PREU6CiAJY2FzZSBPUFJPTVBBVEgyTk9ERToKLQkJcnZhbCA9IG9wZW5wcm9tX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLCBjbWQsIGFyZyk7CisJCXJ2YWwgPSBvcGVucHJvbV9pb2N0bChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvdmZjX2Rldi5jIGIvZHJpdmVycy9zYnVzL2NoYXIvdmZjX2Rldi5jCmluZGV4IDU1YjJiMzEuLjM4NmU3ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL3ZmY19kZXYuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci92ZmNfZGV2LmMKQEAgLTYxMCw3ICs2MTAsNyBAQAogCXVuc2lnbmVkIGludCBtYXBfc2l6ZSwgcmV0LCBtYXBfb2Zmc2V0OwogCXN0cnVjdCB2ZmNfZGV2ICpkZXY7CiAJCi0JZGV2ID0gdmZjX2dldF9kZXZfcHRyKGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkpOworCWRldiA9IHZmY19nZXRfZGV2X3B0cihpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpOwogCWlmKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNjU5LDcgKzY1OSw3IEBACiAJaWYgKCFjYXJkcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQl2ZmNfZGV2X2xzdCA9IChzdHJ1Y3QgdmZjX2RldiAqKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmZjX2RldiAqKSAqCisJdmZjX2Rldl9sc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmZjX2RldiAqKSAqCiAJCQkJCQkgKGNhcmRzKzEpLAogCQkJCQkJIEdGUF9LRVJORUwpOwogCWlmICh2ZmNfZGV2X2xzdCA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LXh4eHguYyBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMKaW5kZXggOTlhMjU5Yy4uZTFiNDRkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LXh4eHguYworKysgYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5jCkBAIC02LDcgKzYsNyBAQAogICAgCQkgICAgIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgogICAgICAgICAgICAgICAgICAgICAgQnJhZCBTdHJhbmQgPGxpbnV4QDN3YXJlLmNvbT4KIAotICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDUgM3dhcmUgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDcgM3dhcmUgSW5jLgogCiAgICBLZXJuZWwgY29tcGF0aWJsaXR5IEJ5OiAJQW5kcmUgSGVkcmljayA8YW5kcmVAc3VzZS5jb20+CiAgICBOb24tQ29weXJpZ2h0IChDKSAyMDAwCUFuZHJlIEhlZHJpY2sgPGFuZHJlQHN1c2UuY29tPgpAQCAtMTkxLDYgKzE5MSw5IEBACiAgICAgICAgICAgICAgICAgIGJlZm9yZSBzaHV0dGluZyBkb3duIGNhcmQuCiAgICAgICAgICAgICAgICAgIENoYW5nZSB0byBuZXcgJ2NoYW5nZV9xdWV1ZV9kZXB0aCcgYXBpLgogICAgICAgICAgICAgICAgICBGaXggJ2hhbmRsZWQ9MScgSVNSIHVzYWdlLCByZW1vdmUgYm9ndXMgSVJRIGNoZWNrLgorICAgMS4yNi4wMi4wMDIgLSBGcmVlIGlycSBoYW5kbGVyIGluIF9fdHdfc2h1dGRvd24oKS4KKyAgICAgICAgICAgICAgICAgVHVybiBvbiBSQ0QgYml0IGZvciBjYWNoaW5nIG1vZGUgcGFnZS4KKyAgICAgICAgICAgICAgICAgU2VyaWFsaXplIHJlc2V0IGNvZGUuCiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yMTQsNyArMjE3LDcgQEAKICNpbmNsdWRlICIzdy14eHh4LmgiCiAKIC8qIEdsb2JhbHMgKi8KLSNkZWZpbmUgVFdfRFJJVkVSX1ZFUlNJT04gIjEuMjYuMDIuMDAxIgorI2RlZmluZSBUV19EUklWRVJfVkVSU0lPTiAiMS4yNi4wMi4wMDIiCiBzdGF0aWMgVFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdfZGV2aWNlX2V4dGVuc2lvbl9saXN0W1RXX01BWF9TTE9UXTsKIHN0YXRpYyBpbnQgdHdfZGV2aWNlX2V4dGVuc2lvbl9jb3VudCA9IDA7CiBzdGF0aWMgaW50IHR3ZV9tYWpvciA9IC0xOwpAQCAtMjI2LDcgKzIyOSw3IEBACiBNT0RVTEVfVkVSU0lPTihUV19EUklWRVJfVkVSU0lPTik7CiAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgdHdfcmVzZXRfZGV2aWNlX2V4dGVuc2lvbihUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYsIGludCBpb2N0bF9yZXNldCk7CitzdGF0aWMgaW50IHR3X3Jlc2V0X2RldmljZV9leHRlbnNpb24oVFdfRGV2aWNlX0V4dGVuc2lvbiAqdHdfZGV2KTsKIAogLyogRnVuY3Rpb25zICovCiAKQEAgLTk4NCwyNCArOTg3LDEyIEBACiAJCQkvKiBOb3cgd2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KIAkJCXRpbWVvdXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQodHdfZGV2LT5pb2N0bF93cXVldWUsIHR3X2Rldi0+Y2hyZGV2X3JlcXVlc3RfaWQgPT0gVFdfSU9DVExfQ0hSREVWX0ZSRUUsIHRpbWVvdXQpOwogCi0JCQkvKiBTZWUgaWYgd2UgcmVzZXQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGlvY3RsIHRvIGNvbXBsZXRlICovCi0JCQlpZiAodGVzdF9iaXQoVFdfSU5fUkVTRVQsICZ0d19kZXYtPmZsYWdzKSkgewotCQkJCWNsZWFyX2JpdChUV19JTl9SRVNFVCwgJnR3X2Rldi0+ZmxhZ3MpOwotCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLQkJCQlnb3RvIG91dDI7Ci0JCQl9Ci0KIAkJCS8qIFdlIHRpbWVkIG91dCwgYW5kIGRpZG4ndCBnZXQgYW4gaW50ZXJydXB0ICovCiAJCQlpZiAodHdfZGV2LT5jaHJkZXZfcmVxdWVzdF9pZCAhPSBUV19JT0NUTF9DSFJERVZfRlJFRSkgewogCQkJCS8qIE5vdyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBib2FyZCAqLwogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LXh4eHg6IHNjc2klZDogQ2hhcmFjdGVyIGlvY3RsICgweCV4KSB0aW1lZCBvdXQsIHJlc2V0dGluZyBjYXJkLlxuIiwgdHdfZGV2LT5ob3N0LT5ob3N0X25vLCBjbWQpOwogCQkJCXJldHZhbCA9IC1FSU87Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUodHdfZGV2LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJCQl0d19kZXYtPnN0YXRlW3JlcXVlc3RfaWRdID0gVFdfU19DT01QTEVURUQ7Ci0JCQkJdHdfc3RhdGVfcmVxdWVzdF9maW5pc2godHdfZGV2LCByZXF1ZXN0X2lkKTsKLQkJCQl0d19kZXYtPnBvc3RlZF9yZXF1ZXN0X2NvdW50LS07Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh0d19kZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQkJCWlmICh0d19yZXNldF9kZXZpY2VfZXh0ZW5zaW9uKHR3X2RldiwgMSkpIHsKKwkJCQlpZiAodHdfcmVzZXRfZGV2aWNlX2V4dGVuc2lvbih0d19kZXYpKSB7CiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LXh4eHg6IHR3X2NocmRldl9pb2N0bCgpOiBSZXNldCBmYWlsZWQgZm9yIGNhcmQgJWQuXG4iLCB0d19kZXYtPmhvc3QtPmhvc3Rfbm8pOwogCQkJCX0KIAkJCQlnb3RvIG91dDI7CkBAIC0xMzM2LDcgKzEzMjcsNyBAQAogfSAvKiBFbmQgdHdfdW5tYXBfc2NzaV9kYXRhKCkgKi8KIAogLyogVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IGEgZGV2aWNlIGV4dGVuc2lvbiAqLwotc3RhdGljIGludCB0d19yZXNldF9kZXZpY2VfZXh0ZW5zaW9uKFRXX0RldmljZV9FeHRlbnNpb24gKnR3X2RldiwgaW50IGlvY3RsX3Jlc2V0KSAKK3N0YXRpYyBpbnQgdHdfcmVzZXRfZGV2aWNlX2V4dGVuc2lvbihUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYpCiB7CiAJaW50IGkgPSAwOwogCXN0cnVjdCBzY3NpX2NtbmQgKnNyYjsKQEAgLTEzODIsMTUgKzEzNzMsMTAgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiM3cteHh4eDogc2NzaSVkOiBSZXNldCBzZXF1ZW5jZSBmYWlsZWQuXG4iLCB0d19kZXYtPmhvc3QtPmhvc3Rfbm8pOwogCQlyZXR1cm4gMTsKIAl9Ci0JVFdfRU5BQkxFX0FORF9DTEVBUl9JTlRFUlJVUFRTKHR3X2Rldik7CiAKLQkvKiBXYWtlIHVwIGFueSBpb2N0bCB0aGF0IHdhcyBwZW5kaW5nIGJlZm9yZSB0aGUgcmVzZXQgKi8KLQlpZiAoKHR3X2Rldi0+Y2hyZGV2X3JlcXVlc3RfaWQgPT0gVFdfSU9DVExfQ0hSREVWX0ZSRUUpIHx8IChpb2N0bF9yZXNldCkpIHsKLQkJY2xlYXJfYml0KFRXX0lOX1JFU0VULCAmdHdfZGV2LT5mbGFncyk7Ci0JfSBlbHNlIHsKLQkJdHdfZGV2LT5jaHJkZXZfcmVxdWVzdF9pZCA9IFRXX0lPQ1RMX0NIUkRFVl9GUkVFOwotCQl3YWtlX3VwKCZ0d19kZXYtPmlvY3RsX3dxdWV1ZSk7Ci0JfQorCVRXX0VOQUJMRV9BTkRfQ0xFQVJfSU5URVJSVVBUUyh0d19kZXYpOworCWNsZWFyX2JpdChUV19JTl9SRVNFVCwgJnR3X2Rldi0+ZmxhZ3MpOworCXR3X2Rldi0+Y2hyZGV2X3JlcXVlc3RfaWQgPSBUV19JT0NUTF9DSFJERVZfRlJFRTsKIAogCXJldHVybiAwOwogfSAvKiBFbmQgdHdfcmVzZXRfZGV2aWNlX2V4dGVuc2lvbigpICovCkBAIC0xNDM3LDE0ICsxNDIzLDE4IEBACiAJCSJXQVJOSU5HOiBDb21tYW5kICgweCV4KSB0aW1lZCBvdXQsIHJlc2V0dGluZyBjYXJkLlxuIiwKIAkJU0NwbnQtPmNtbmRbMF0pOwogCisJLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgaXNzdWluZyBhbiBpb2N0bCBvciByZXNldHRpbmcgZnJvbSBpb2N0bCAqLworCW11dGV4X2xvY2soJnR3X2Rldi0+aW9jdGxfbG9jayk7CisKIAkvKiBOb3cgcmVzZXQgdGhlIGNhcmQgYW5kIHNvbWUgb2YgdGhlIGRldmljZSBleHRlbnNpb24gZGF0YSAqLwotCWlmICh0d19yZXNldF9kZXZpY2VfZXh0ZW5zaW9uKHR3X2RldiwgMCkpIHsKKwlpZiAodHdfcmVzZXRfZGV2aWNlX2V4dGVuc2lvbih0d19kZXYpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIjN3LXh4eHg6IHNjc2klZDogUmVzZXQgZmFpbGVkLlxuIiwgdHdfZGV2LT5ob3N0LT5ob3N0X25vKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJcmV0dmFsID0gU1VDQ0VTUzsKIG91dDoKKwltdXRleF91bmxvY2soJnR3X2Rldi0+aW9jdGxfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0gLyogRW5kIHR3X3Njc2lfZWhfcmVzZXQoKSAqLwogCkBAIC0xNjYwLDkgKzE2NTAsOSBAQAogCXJlcXVlc3RfYnVmZmVyWzRdID0gMHg4OyAgICAgICAgLyogY2FjaGluZyBwYWdlICovCiAJcmVxdWVzdF9idWZmZXJbNV0gPSAweGE7ICAgICAgICAvKiBwYWdlIGxlbmd0aCAqLwogCWlmICgqZmxhZ3MgJiAweDEpCi0JCXJlcXVlc3RfYnVmZmVyWzZdID0gMHg0OyAgICAgICAgLyogV0NFIG9uICovCisJCXJlcXVlc3RfYnVmZmVyWzZdID0gMHg1OyAgICAgICAgLyogV0NFIG9uLCBSQ0Qgb24gKi8KIAllbHNlCi0JCXJlcXVlc3RfYnVmZmVyWzZdID0gMHgwOyAgICAgICAgLyogV0NFIG9mZiAqLworCQlyZXF1ZXN0X2J1ZmZlcls2XSA9IDB4MTsgICAgICAgIC8qIFdDRSBvZmYsIFJDRCBvbiAqLwogCXR3X3RyYW5zZmVyX2ludGVybmFsKHR3X2RldiwgcmVxdWVzdF9pZCwgcmVxdWVzdF9idWZmZXIsCiAJCQkgICAgIHNpemVvZihyZXF1ZXN0X2J1ZmZlcikpOwogCkBAIC0yMDEyLDYgKzIwMDIsMTAgQEAKIAlpbnQgcmV0dmFsID0gMTsKIAlUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYgPSAoVFdfRGV2aWNlX0V4dGVuc2lvbiAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCisJLyogSWYgd2UgYXJlIHJlc2V0dGluZyBkdWUgdG8gdGltZWQgb3V0IGlvY3RsLCByZXBvcnQgYXMgYnVzeSAqLworCWlmICh0ZXN0X2JpdChUV19JTl9SRVNFVCwgJnR3X2Rldi0+ZmxhZ3MpKQorCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwogCS8qIFNhdmUgZG9uZSBmdW5jdGlvbiBpbnRvIFNjc2lfQ21uZCBzdHJ1Y3QgKi8KIAlTQ3BudC0+c2NzaV9kb25lID0gZG9uZTsKIAkJIApAQCAtMjEwMCw2ICsyMDk0LDEwIEBACiAKIAloYW5kbGVkID0gMTsKIAorCS8qIElmIHdlIGFyZSByZXNldHRpbmcsIGJhaWwgKi8KKwlpZiAodGVzdF9iaXQoVFdfSU5fUkVTRVQsICZ0d19kZXYtPmZsYWdzKSkKKwkJZ290byB0d19pbnRlcnJ1cHRfYmFpbDsKKwogCS8qIENoZWNrIGNvbnRyb2xsZXIgZm9yIGVycm9ycyAqLwogCWlmICh0d19jaGVja19iaXRzKHN0YXR1c19yZWdfdmFsdWUpKSB7CiAJCWRwcmludGsoS0VSTl9XQVJOSU5HICIzdy14eHh4OiB0d19pbnRlcnJ1cHQoKTogVW5leHBlY3RlZCBiaXRzLlxuIik7CkBAIC0yMjc2LDYgKzIyNzQsOSBAQAogCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCVRXX0RJU0FCTEVfSU5URVJSVVBUUyh0d19kZXYpOwogCisJLyogRnJlZSB1cCB0aGUgSVJRICovCisJZnJlZV9pcnEodHdfZGV2LT50d19wY2lfZGV2LT5pcnEsIHR3X2Rldik7CisKIAlwcmludGsoS0VSTl9XQVJOSU5HICIzdy14eHh4OiBTaHV0dGluZyBkb3duIGhvc3QgJWQuXG4iLCB0d19kZXYtPmhvc3QtPmhvc3Rfbm8pOwogCiAJLyogVGVsbCB0aGUgY2FyZCB3ZSBhcmUgc2h1dHRpbmcgZG93biAqLwpAQCAtMjQ0NCw5ICsyNDQ1LDYgQEAKIAkJdHdlX21ham9yID0gLTE7CiAJfQogCi0JLyogRnJlZSB1cCB0aGUgSVJRICovCi0JZnJlZV9pcnEodHdfZGV2LT50d19wY2lfZGV2LT5pcnEsIHR3X2Rldik7Ci0KIAkvKiBTaHV0ZG93biB0aGUgY2FyZCAqLwogCV9fdHdfc2h1dGRvd24odHdfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LXh4eHguaCBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmgKaW5kZXggYmJkNjU0YS4uMDc0MmU2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LXh4eHguaAorKysgYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5oCkBAIC02LDcgKzYsNyBAQAogICAgCQkgICAgIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgogICAgICAgICAgICAgICAgICAgICAgQnJhZCBTdHJhbmQgPGxpbnV4QDN3YXJlLmNvbT4KIAotICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDUgM3dhcmUgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDcgM3dhcmUgSW5jLgogCiAgICBLZXJuZWwgY29tcGF0aWJsaXR5IEJ5OglBbmRyZSBIZWRyaWNrIDxhbmRyZUBzdXNlLmNvbT4KICAgIE5vbi1Db3B5cmlnaHQgKEMpIDIwMDAJQW5kcmUgSGVkcmljayA8YW5kcmVAc3VzZS5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IDY5NTY5MDkuLjc4NjljMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0xMzAzLDcgKzEzMDMsNyBAQAogCiBjb25maWcgU0NTSV9TRUFHQVRFCiAJdHJpc3RhdGUgIlNlYWdhdGUgU1QtMDIgYW5kIEZ1dHVyZSBEb21haW4gVE1DLTh4eCBTQ1NJIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBYODYgJiYgSVNBICYmIFNDU0kgJiYgQlJPS0VOCisJZGVwZW5kcyBvbiBYODYgJiYgSVNBICYmIFNDU0kKIAktLS1oZWxwLS0tCiAJICBUaGVzZSBhcmUgOC1iaXQgU0NTSSBjb250cm9sbGVyczsgdGhlIFNULTAxIGlzIGFsc28gc3VwcG9ydGVkIGJ5CiAJICB0aGlzIGRyaXZlci4gIEl0IGlzIGV4cGxhaW5lZCBpbiBzZWN0aW9uIDMuOSBvZiB0aGUgU0NTSS1IT1dUTywKQEAgLTE3MzcsNyArMTczNyw3IEBACiAKIGNvbmZpZyBTVU4zX1NDU0kKIAl0cmlzdGF0ZSAiU3VuMyBOQ1I1MzgwIFNDU0kiCi0JZGVwZW5kcyBvbiBTVU4zICYmIFNDU0kgJiYgQlJPS0VOCisJZGVwZW5kcyBvbiBTVU4zICYmIFNDU0kKIAlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAloZWxwCiAJICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgT0JJTyAob25ib2FyZCBpbykgTkNSNTM4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYwppbmRleCBhYzEwOGY5Li40MjZjZDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAKIAlpZiAobWF4aW11bV9udW1fY29udGFpbmVycyA8IE1BWElNVU1fTlVNX0NPTlRBSU5FUlMpCiAJCW1heGltdW1fbnVtX2NvbnRhaW5lcnMgPSBNQVhJTVVNX05VTV9DT05UQUlORVJTOwotCWZzYV9kZXZfcHRyID0gKHN0cnVjdCBmc2FfZGV2X2luZm8gKikga21hbGxvYygKKwlmc2FfZGV2X3B0ciA9IGttYWxsb2MoCiAJICBzaXplb2YoKmZzYV9kZXZfcHRyKSAqIG1heGltdW1fbnVtX2NvbnRhaW5lcnMsIEdGUF9LRVJORUwpOwogCWlmICghZnNhX2Rldl9wdHIpIHsKIAkJYWFjX2ZpYl9mcmVlKGZpYnB0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21taW5pdC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWluaXQuYwppbmRleCBkNWNmOGI5Li42ZDMwNWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21taW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1pbml0LmMKQEAgLTM4Niw3ICszODYsNyBAQAogCSAqCU9rIG5vdyBpbml0IHRoZSBjb21tdW5pY2F0aW9uIHN1YnN5c3RlbQogCSAqLwogCi0JZGV2LT5xdWV1ZXMgPSAoc3RydWN0IGFhY19xdWV1ZV9ibG9jayAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWFjX3F1ZXVlX2Jsb2NrKSwgR0ZQX0tFUk5FTCk7CisJZGV2LT5xdWV1ZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWFjX3F1ZXVlX2Jsb2NrKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldi0+cXVldWVzID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBjb3VsZCBub3QgYWxsb2NhdGUgY29tbSByZWdpb24uXG4iKTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYwppbmRleCAzNTllN2RkLi5kMmNmODc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKQEAgLTExNyw4ICsxMTcsOCBAQAogCXsgMHg5MDA1LCAweDAyODYsIDB4OTAwNSwgMHgwMjliLCAwLCAwLCAyMiB9LCAvKiBBQVItMjgyMFNBIChJbnRydWRlcikgKi8KIAl7IDB4OTAwNSwgMHgwMjg2LCAweDkwMDUsIDB4MDI5YywgMCwgMCwgMjMgfSwgLyogQUFSLTI2MjBTQSAoSW50cnVkZXIpICovCiAJeyAweDkwMDUsIDB4MDI4NiwgMHg5MDA1LCAweDAyOWQsIDAsIDAsIDI0IH0sIC8qIEFBUi0yNDIwU0EgKEludHJ1ZGVyKSAqLwotCXsgMHg5MDA1LCAweDAyODYsIDB4OTAwNSwgMHgwMjllLCAwLCAwLCAyNSB9LCAvKiBJQ1A5MDI0UjAgKExhbmNlcikgKi8KLQl7IDB4OTAwNSwgMHgwMjg2LCAweDkwMDUsIDB4MDI5ZiwgMCwgMCwgMjYgfSwgLyogSUNQOTAxNFIwIChMYW5jZXIpICovCisJeyAweDkwMDUsIDB4MDI4NiwgMHg5MDA1LCAweDAyOWUsIDAsIDAsIDI1IH0sIC8qIElDUDkwMjRSTyAoTGFuY2VyKSAqLworCXsgMHg5MDA1LCAweDAyODYsIDB4OTAwNSwgMHgwMjlmLCAwLCAwLCAyNiB9LCAvKiBJQ1A5MDE0Uk8gKExhbmNlcikgKi8KIAl7IDB4OTAwNSwgMHgwMjg2LCAweDkwMDUsIDB4MDJhMCwgMCwgMCwgMjcgfSwgLyogSUNQOTA0N01BIChMYW5jZXIpICovCiAJeyAweDkwMDUsIDB4MDI4NiwgMHg5MDA1LCAweDAyYTEsIDAsIDAsIDI4IH0sIC8qIElDUDkwODdNQSAoTGFuY2VyKSAqLwogCXsgMHg5MDA1LCAweDAyODYsIDB4OTAwNSwgMHgwMmEzLCAwLCAwLCAyOSB9LCAvKiBJQ1A1NDQ1QVUgKEh1cnJpY2FuZTQ0KSAqLwpAQCAtMTM3LDE1ICsxMzcsMTUgQEAKIAl7IDB4OTAwNSwgMHgwMjg1LCAweDkwMDUsIDB4MDI5NCwgMCwgMCwgNDEgfSwgLyogRVNEIFNPLURJTU0gUENJLVggU0FUQSBaQ1IgKFByb3dsZXIpICovCiAJeyAweDkwMDUsIDB4MDI4NSwgMHgxMDNDLCAweDMyMjcsIDAsIDAsIDQyIH0sIC8qIEFBUi0yNjEwU0EgUENJIFNBVEEgNmNoICovCiAJeyAweDkwMDUsIDB4MDI4NSwgMHg5MDA1LCAweDAyOTYsIDAsIDAsIDQzIH0sIC8qIEFTUi0yMjQwUyAoU2FicmVFeHByZXNzKSAqLwotCXsgMHg5MDA1LCAweDAyODUsIDB4OTAwNSwgMHgwMjk3LCAwLCAwLCA0NCB9LCAvKiBBU1ItNDAwNVNBUyAqLworCXsgMHg5MDA1LCAweDAyODUsIDB4OTAwNSwgMHgwMjk3LCAwLCAwLCA0NCB9LCAvKiBBU1ItNDAwNSAqLwogCXsgMHg5MDA1LCAweDAyODUsIDB4MTAxNCwgMHgwMkYyLCAwLCAwLCA0NSB9LCAvKiBJQk0gOGkgKEF2b25QYXJrKSAqLwogCXsgMHg5MDA1LCAweDAyODUsIDB4MTAxNCwgMHgwMzEyLCAwLCAwLCA0NSB9LCAvKiBJQk0gOGkgKEF2b25QYXJrIExpdGUpICovCiAJeyAweDkwMDUsIDB4MDI4NiwgMHgxMDE0LCAweDk1ODAsIDAsIDAsIDQ2IH0sIC8qIElCTSA4ay84ay1sOCAoQXVyb3JhKSAqLwogCXsgMHg5MDA1LCAweDAyODYsIDB4MTAxNCwgMHg5NTQwLCAwLCAwLCA0NyB9LCAvKiBJQk0gOGsvOGstbDQgKEF1cm9yYSBMaXRlKSAqLwotCXsgMHg5MDA1LCAweDAyODUsIDB4OTAwNSwgMHgwMjk4LCAwLCAwLCA0OCB9LCAvKiBBU1ItNDAwMFNBUyAoQmxhY2tCaXJkKSAqLworCXsgMHg5MDA1LCAweDAyODUsIDB4OTAwNSwgMHgwMjk4LCAwLCAwLCA0OCB9LCAvKiBBU1ItNDAwMCAoQmxhY2tCaXJkKSAqLwogCXsgMHg5MDA1LCAweDAyODUsIDB4OTAwNSwgMHgwMjk5LCAwLCAwLCA0OSB9LCAvKiBBU1ItNDgwMFNBUyAoTWFyYXVkZXItWCkgKi8KIAl7IDB4OTAwNSwgMHgwMjg1LCAweDkwMDUsIDB4MDI5YSwgMCwgMCwgNTAgfSwgLyogQVNSLTQ4MDVTQVMgKE1hcmF1ZGVyLUUpICovCi0JeyAweDkwMDUsIDB4MDI4NiwgMHg5MDA1LCAweDAyYTIsIDAsIDAsIDUxIH0sIC8qIEFTUi0zODAwU0FTIChIdXJyaWNhbmU0NCkgKi8KKwl7IDB4OTAwNSwgMHgwMjg2LCAweDkwMDUsIDB4MDJhMiwgMCwgMCwgNTEgfSwgLyogQVNSLTM4MDAgKEh1cnJpY2FuZTQ0KSAqLwogCiAJeyAweDkwMDUsIDB4MDI4NSwgMHgxMDI4LCAweDAyODcsIDAsIDAsIDUyIH0sIC8qIFBlcmMgMzIwL0RDKi8KIAl7IDB4MTAxMSwgMHgwMDQ2LCAweDkwMDUsIDB4MDM2NSwgMCwgMCwgNTMgfSwgLyogQWRhcHRlYyA1NDAwUyAoTXVzdGFuZykqLwpAQCAtMTkzLDggKzE5Myw4IEBACiAJeyBhYWNfcmt0X2luaXQsICJhYWNyYWlkIiwgICJBREFQVEVDICIsICJBQVItMjgyMFNBICAgICAgIiwgMSB9LCAvKiBBQVItMjgyMFNBIChJbnRydWRlcikgKi8KIAl7IGFhY19ya3RfaW5pdCwgImFhY3JhaWQiLCAgIkFEQVBURUMgIiwgIkFBUi0yNjIwU0EgICAgICAiLCAxIH0sIC8qIEFBUi0yNjIwU0EgKEludHJ1ZGVyKSAqLwogCXsgYWFjX3JrdF9pbml0LCAiYWFjcmFpZCIsICAiQURBUFRFQyAiLCAiQUFSLTI0MjBTQSAgICAgICIsIDEgfSwgLyogQUFSLTI0MjBTQSAoSW50cnVkZXIpICovCi0JeyBhYWNfcmt0X2luaXQsICJhYWNyYWlkIiwgICJJQ1AgICAgICIsICJJQ1A5MDI0UjAgICAgICAgIiwgMiB9LCAvKiBJQ1A5MDI0UjAgKExhbmNlcikgKi8KLQl7IGFhY19ya3RfaW5pdCwgImFhY3JhaWQiLCAgIklDUCAgICAgIiwgIklDUDkwMTRSMCAgICAgICAiLCAxIH0sIC8qIElDUDkwMTRSMCAoTGFuY2VyKSAqLworCXsgYWFjX3JrdF9pbml0LCAiYWFjcmFpZCIsICAiSUNQICAgICAiLCAiSUNQOTAyNFJPICAgICAgICIsIDIgfSwgLyogSUNQOTAyNFJPIChMYW5jZXIpICovCisJeyBhYWNfcmt0X2luaXQsICJhYWNyYWlkIiwgICJJQ1AgICAgICIsICJJQ1A5MDE0Uk8gICAgICAgIiwgMSB9LCAvKiBJQ1A5MDE0Uk8gKExhbmNlcikgKi8KIAl7IGFhY19ya3RfaW5pdCwgImFhY3JhaWQiLCAgIklDUCAgICAgIiwgIklDUDkwNDdNQSAgICAgICAiLCAxIH0sIC8qIElDUDkwNDdNQSAoTGFuY2VyKSAqLwogCXsgYWFjX3JrdF9pbml0LCAiYWFjcmFpZCIsICAiSUNQICAgICAiLCAiSUNQOTA4N01BICAgICAgICIsIDEgfSwgLyogSUNQOTA4N01BIChMYW5jZXIpICovCiAJeyBhYWNfcmt0X2luaXQsICJhYWNyYWlkIiwgICJJQ1AgICAgICIsICJJQ1A1NDQ1QVUgICAgICAgIiwgMSB9LCAvKiBJQ1A1NDQ1QVUgKEh1cnJpY2FuZTQ0KSAqLwpAQCAtMjEyLDE0ICsyMTIsMTQgQEAKIAl7IGFhY19yeF9pbml0LCAiYWFjcmFpZCIsICAiQURBUFRFQyAiLCAiQVNSLTIwMjZaQ1IgICAgICIsIDEgfSwgLyogRVNEIFNPLURJTU0gUENJLVggU0FUQSBaQ1IgKFByb3dsZXIpICovCiAJeyBhYWNfcnhfaW5pdCwgImFhY3JhaWQiLCAgIkFEQVBURUMgIiwgIkFBUi0yNjEwU0EgICAgICAiLCAxIH0sIC8qIFNBVEEgNkNoIChCZWFyY2F0KSAqLwogCXsgYWFjX3J4X2luaXQsICJhYWNyYWlkIiwgICJBREFQVEVDICIsICJBU1ItMjI0MFMgICAgICAgIiwgMSB9LCAvKiBBU1ItMjI0MFMgKFNhYnJlRXhwcmVzcykgKi8KLQl7IGFhY19yeF9pbml0LCAiYWFjcmFpZCIsICAiQURBUFRFQyAiLCAiQVNSLTQwMDVTQVMgICAgICIsIDEgfSwgLyogQVNSLTQwMDVTQVMgKi8KKwl7IGFhY19yeF9pbml0LCAiYWFjcmFpZCIsICAiQURBUFRFQyAiLCAiQVNSLTQwMDUgICAgICAgICIsIDEgfSwgLyogQVNSLTQwMDUgKi8KIAl7IGFhY19yeF9pbml0LCAiU2VydmVSQUlEIiwiSUJNICAgICAiLCAiU2VydmVSQUlEIDhpICAgICIsIDEgfSwgLyogSUJNIDhpIChBdm9uUGFyaykgKi8KIAl7IGFhY19ya3RfaW5pdCwgIlNlcnZlUkFJRCIsIklCTSAgICAgIiwgIlNlcnZlUkFJRCA4ay1sOCAiLCAxIH0sIC8qIElCTSA4ay84ay1sOCAoQXVyb3JhKSAqLwogCXsgYWFjX3JrdF9pbml0LCAiU2VydmVSQUlEIiwiSUJNICAgICAiLCAiU2VydmVSQUlEIDhrLWw0ICIsIDEgfSwgLyogSUJNIDhrLzhrLWw0IChBdXJvcmEgTGl0ZSkgKi8KLQl7IGFhY19yeF9pbml0LCAiYWFjcmFpZCIsICAiQURBUFRFQyAiLCAiQVNSLTQwMDBTQVMgICAgICIsIDEgfSwgLyogQVNSLTQwMDBTQVMgKEJsYWNrQmlyZCAmIEF2b25QYXJrKSAqLworCXsgYWFjX3J4X2luaXQsICJhYWNyYWlkIiwgICJBREFQVEVDICIsICJBU1ItNDAwMCAgICAgICAgIiwgMSB9LCAvKiBBU1ItNDAwMCAoQmxhY2tCaXJkICYgQXZvblBhcmspICovCiAJeyBhYWNfcnhfaW5pdCwgImFhY3JhaWQiLCAgIkFEQVBURUMgIiwgIkFTUi00ODAwU0FTICAgICAiLCAxIH0sIC8qIEFTUi00ODAwU0FTIChNYXJhdWRlci1YKSAqLwogCXsgYWFjX3J4X2luaXQsICJhYWNyYWlkIiwgICJBREFQVEVDICIsICJBU1ItNDgwNVNBUyAgICAgIiwgMSB9LCAvKiBBU1ItNDgwNVNBUyAoTWFyYXVkZXItRSkgKi8KLQl7IGFhY19ya3RfaW5pdCwgImFhY3JhaWQiLCAgIkFEQVBURUMgIiwgIkFTUi0zODAwU0FTICAgICAiLCAxIH0sIC8qIEFTUi0zODAwU0FTIChIdXJyaWNhbmU0NCkgKi8KKwl7IGFhY19ya3RfaW5pdCwgImFhY3JhaWQiLCAgIkFEQVBURUMgIiwgIkFTUi0zODAwICAgICAgICAiLCAxIH0sIC8qIEFTUi0zODAwIChIdXJyaWNhbmU0NCkgKi8KIAogCXsgYWFjX3J4X2luaXQsICJwZXJjcmFpZCIsICJERUxMICAgICIsICJQRVJDIDMyMC9EQyAgICAgIiwgMiwgQUFDX1FVSVJLXzMxQklUIHwgQUFDX1FVSVJLXzM0U0cgfSwgLyogUGVyYyAzMjAvREMqLwogCXsgYWFjX3NhX2luaXQsICJhYWNyYWlkIiwgICJBREFQVEVDICIsICJBZGFwdGVjIDU0MDBTICAgIiwgNCwgQUFDX1FVSVJLXzM0U0cgfSwgLyogQWRhcHRlYyA1NDAwUyAoTXVzdGFuZykqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMgYi9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYwppbmRleCAyYjM0NDM1Li4zMDZiZWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYworKysgYi9kcml2ZXJzL3Njc2kvYWR2YW5zeXMuYwpAQCAtMTgyMTUsNiArMTgyMTUsNyBAQAogfQogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogCisjaWZkZWYgQ09ORklHX1BDSQogLyogUENJIERldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWR2YW5zeXNfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0FTUCwgUENJX0RFVklDRV9JRF9BU1BfMTIwMEEsCkBAIC0xODIzMiw0ICsxODIzMyw0IEBACiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFkdmFuc3lzX3BjaV90YmwpOwotCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FoYTE1NDIuYyBiL2RyaXZlcnMvc2NzaS9haGExNTQyLmMKaW5kZXggZDdhNjFhNi4uMWQyMzlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FoYTE1NDIuYworKysgYi9kcml2ZXJzL3Njc2kvYWhhMTU0Mi5jCkBAIC02OTksNyArNjk5LDcgQEAKICNlbmRpZgogCQlpbnQgaTsKIAkJY2NiW21ib10ub3AgPSAyOwkvKiBTQ1NJIEluaXRpYXRvciBDb21tYW5kICB3L3NjYXR0ZXItZ2F0aGVyICovCi0JCVNDcG50LT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyg1MTIsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwkJU0NwbnQtPmhvc3Rfc2NyaWJibGUgPSBrbWFsbG9jKDUxMiwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCQlzZ3BudCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgU0NwbnQtPnJlcXVlc3RfYnVmZmVyOwogCQljcHRyID0gKHN0cnVjdCBjaGFpbiAqKSBTQ3BudC0+aG9zdF9zY3JpYmJsZTsKIAkJaWYgKGNwdHIgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQuYwppbmRleCA0NmVlZDEwLi43ZDFmZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQuYwpAQCAtMjU2NSw3ICsyNTY1LDcgQEAKICAgICAgIH0KICAgICB9CiAgICAgc2NiX2NvdW50ID0gbWluKCAoaS0xKSwgcC0+c2NiX2RhdGEtPm1heHNjYnMgLSBwLT5zY2JfZGF0YS0+bnVtc2Nicyk7Ci0gICAgc2NiX2FwID0gKHN0cnVjdCBhaWM3eHh4X3NjYiAqKWttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgYWljN3h4eF9zY2IpICogc2NiX2NvdW50CisgICAgc2NiX2FwID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBhaWM3eHh4X3NjYikgKiBzY2JfY291bnQKIAkJCQkJICAgKyBzaXplb2Yoc3RydWN0IGFpYzd4eHhfc2NiX2RtYSksIEdGUF9BVE9NSUMpOwogICAgIGlmIChzY2JfYXAgPT0gTlVMTCkKICAgICAgIHJldHVybigwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kYzM5NXguYyBiL2RyaXZlcnMvc2NzaS9kYzM5NXguYwppbmRleCBlOTViMzY3Li5hOTY1ZWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKKysrIGIvZHJpdmVycy9zY3NpL2RjMzk1eC5jCkBAIC00MzE5LDcgKzQzMTksNyBAQAogCiAJZHByaW50a2RiZyhEQkdfMSwgIkFsbG9jYXRlICVpIHBhZ2VzIGZvciBTRyB0YWJsZXNcbiIsIHBhZ2VzKTsKIAl3aGlsZSAocGFnZXMtLSkgewotCQlwdHIgPSAoc3RydWN0IFNHZW50cnkgKilrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJCXB0ciA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwdHIpIHsKIAkJCWFkYXB0ZXJfc2dfdGFibGVzX2ZyZWUoYWNiKTsKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKaW5kZXggNjBiMWI0My4uMzY1ZGI1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYworKysgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIAlzMzIgcmNvZGU7CiAKIAltZW1zZXQobXNnLCAwLCBzaXplb2YobXNnKSk7Ci0JYnVmID0gKHU4KilrbWFsbG9jKDgwLEdGUF9LRVJORUx8QUREUjMyKTsKKwlidWYgPSBrbWFsbG9jKDgwLEdGUF9LRVJORUx8QUREUjMyKTsKIAlpZighYnVmKXsKIAkJcHJpbnRrKEtFUk5fRVJSIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyXG4iLHBIYmEtPm5hbWUpOwogCQlyZXR1cm47CkBAIC0xMzExLDcgKzEzMTEsNyBAQAogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKIAl9IHdoaWxlIChtID09IEVNUFRZX1FVRVVFKTsKIAotCXN0YXR1cyA9ICh1OCopa21hbGxvYyg0LCBHRlBfS0VSTkVMfEFERFIzMik7CisJc3RhdHVzID0ga21hbGxvYyg0LCBHRlBfS0VSTkVMfEFERFIzMik7CiAJaWYoc3RhdHVzID09IE5VTEwpIHsKIAkJYWRwdF9zZW5kX25vcChwSGJhLCBtKTsKIAkJcHJpbnRrKEtFUk5fRVJSIklPUCByZXNldCBmYWlsZWQgLSBubyBmcmVlIG1lbW9yeS5cbiIpOwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWQgPSAoc3RydWN0IGkyb19kZXZpY2UgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJvX2RldmljZSksIEdGUF9LRVJORUwpOworCQlkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyb19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAkJaWYoZD09TlVMTCkKIAkJewogCQkJcHJpbnRrKEtFUk5fQ1JJVCIlczogT3V0IG9mIG1lbW9yeSBmb3IgSTJPIGRldmljZSBkYXRhLlxuIixwSGJhLT5uYW1lKTsKQEAgLTI0MjUsNyArMjQyNSw3IEBACiAJCQkJcERldiA9IHBEZXYtPm5leHRfbHVuOwogCQkJfQogCQkJaWYoIXBEZXYgKSB7IC8vIFNvbWV0aGluZyBuZXcgYWRkIGl0Ci0JCQkJZCA9IChzdHJ1Y3QgaTJvX2RldmljZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMm9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJCQkJZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMm9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYoZD09TlVMTCkKIAkJCQl7CiAJCQkJCXByaW50ayhLRVJOX0NSSVQgIk91dCBvZiBtZW1vcnkgZm9yIEkyTyBkZXZpY2UgZGF0YS5cbiIpOwpAQCAtMjcyOCw3ICsyNzI4LDcgQEAKIAogCWtmcmVlKHBIYmEtPnJlcGx5X3Bvb2wpOwogCi0JcEhiYS0+cmVwbHlfcG9vbCA9ICh1MzIqKWttYWxsb2MocEhiYS0+cmVwbHlfZmlmb19zaXplICogUkVQTFlfRlJBTUVfU0laRSAqIDQsIEdGUF9LRVJORUx8QUREUjMyKTsKKwlwSGJhLT5yZXBseV9wb29sID0ga21hbGxvYyhwSGJhLT5yZXBseV9maWZvX3NpemUgKiBSRVBMWV9GUkFNRV9TSVpFICogNCwgR0ZQX0tFUk5FTHxBRERSMzIpOwogCWlmKCFwSGJhLT5yZXBseV9wb29sKXsKIAkJcHJpbnRrKEtFUk5fRVJSIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgcmVwbHkgcG9vbFxuIixwSGJhLT5uYW1lKTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL01ha2VmaWxlCmluZGV4IDZhYzA2MzMuLmY2N2Q5ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvTWFrZWZpbGUKQEAgLTEsNyArMSw5IEBACiBvYmotJChDT05GSUdfU0NTSV9JQk1WU0NTSSkJKz0gaWJtdnNjc2ljLm8KIAogaWJtdnNjc2ljLXkJCQkrPSBpYm12c2NzaS5vCitpZm5kZWYgQ09ORklHX1BQQ19QU0VSSUVTCiBpYm12c2NzaWMtJChDT05GSUdfUFBDX0lTRVJJRVMpCSs9IGlzZXJpZXNfdnNjc2kubyAKK2VuZGlmCiBpYm12c2NzaWMtJChDT05GSUdfUFBDX1BTRVJJRVMpCSs9IHJwYV92c2NzaS5vIAogCiBvYmotJChDT05GSUdfU0NTSV9JQk1WU0NTSVMpCSs9IGlibXZzdGd0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbml0aW8uYyBiL2RyaXZlcnMvc2NzaS9pbml0aW8uYwppbmRleCBmMTYwMzU3Li5kNTYxNjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW5pdGlvLmMKKysrIGIvZHJpdmVycy9zY3NpL2luaXRpby5jCkBAIC0yODI4LDcgKzI4MjgsNyBAQAogCiAJZm9yICg7IHR1bF9udW1fc2NiID49IE1BWF9UQVJHRVRTICsgMzsgdHVsX251bV9zY2ItLSkgewogCQlpID0gdHVsX251bV9jaCAqIHR1bF9udW1fc2NiICogc2l6ZW9mKFNDQik7Ci0JCWlmICgodHVsX3NjYiA9IChTQ0IgKikga21hbGxvYyhpLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSkpICE9IE5VTEwpCisJCWlmICgodHVsX3NjYiA9IGttYWxsb2MoaSwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpKSAhPSBOVUxMKQogCQkJYnJlYWs7CiAJfQogCWlmICh0dWxfc2NiID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwppbmRleCBkMGIxMzljLi40Mzc2ODQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC03NDksNyArNzQ5LDcgQEAKIAkJCQlpZiAoIW9mZnNldCkKIAkJCQkJY3J5cHRvX2hhc2hfdXBkYXRlKAogCQkJCQkJCSZ0Y3BfY29ubi0+cnhfaGFzaCwKLQkJCQkJCQkmc2dbaV0sIDEpOworCQkJCQkJCSZzZ1tpXSwgc2dbaV0ubGVuZ3RoKTsKIAkJCQllbHNlCiAJCQkJCXBhcnRpYWxfc2dfZGlnZXN0X3VwZGF0ZSgKIAkJCQkJCQkmdGNwX2Nvbm4tPnJ4X2hhc2gsCkBAIC0xNzc3LDEzICsxNzc3LDEzIEBACiAJdGNwX2Nvbm4tPnR4X2hhc2gudGZtID0gY3J5cHRvX2FsbG9jX2hhc2goImNyYzMyYyIsIDAsCiAJCQkJCQkgIENSWVBUT19BTEdfQVNZTkMpOwogCXRjcF9jb25uLT50eF9oYXNoLmZsYWdzID0gMDsKLQlpZiAoIXRjcF9jb25uLT50eF9oYXNoLnRmbSkKKwlpZiAoSVNfRVJSKHRjcF9jb25uLT50eF9oYXNoLnRmbSkpCiAJCWdvdG8gZnJlZV90Y3BfY29ubjsKIAogCXRjcF9jb25uLT5yeF9oYXNoLnRmbSA9IGNyeXB0b19hbGxvY19oYXNoKCJjcmMzMmMiLCAwLAogCQkJCQkJICBDUllQVE9fQUxHX0FTWU5DKTsKIAl0Y3BfY29ubi0+cnhfaGFzaC5mbGFncyA9IDA7Ci0JaWYgKCF0Y3BfY29ubi0+cnhfaGFzaC50Zm0pCisJaWYgKElTX0VSUih0Y3BfY29ubi0+cnhfaGFzaC50Zm0pKQogCQlnb3RvIGZyZWVfdHhfdGZtOwogCiAJcmV0dXJuIGNsc19jb25uOwpAQCAtMjA0NCwxMyArMjA0NCwxMSBAQAogCQlzayA9IHRjcF9jb25uLT5zb2NrLT5zazsKIAkJaWYgKHNrLT5za19mYW1pbHkgPT0gUEZfSU5FVCkgewogCQkJaW5ldCA9IGluZXRfc2soc2spOwotCQkJbGVuID0gc3ByaW50ZihidWYsICIldS4ldS4ldS4ldVxuIiwKKwkJCWxlbiA9IHNwcmludGYoYnVmLCBOSVBRVUFEX0ZNVCAiXG4iLAogCQkJCSAgICAgIE5JUFFVQUQoaW5ldC0+ZGFkZHIpKTsKIAkJfSBlbHNlIHsKIAkJCW5wID0gaW5ldDZfc2soc2spOwotCQkJbGVuID0gc3ByaW50ZihidWYsCi0JCQkJIiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKLQkJCQlOSVA2KG5wLT5kYWRkcikpOworCQkJbGVuID0gc3ByaW50ZihidWYsIE5JUDZfRk1UICJcbiIsIE5JUDYobnAtPmRhZGRyKSk7CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZjb25uLT54bWl0bXV0ZXgpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKaW5kZXggZTExYjIzYy4uZDM3MDQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCX0KIAogCWlmIChyaGRyLT5jbWRfc3RhdHVzID09IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikgewotCQlpbnQgc2Vuc2VsZW47CisJCXVpbnQxNl90IHNlbnNlbGVuOwogCiAJCWlmIChkYXRhbGVuIDwgMikgewogaW52YWxpZF9kYXRhbGVuOgpAQCAtMjcwLDEyICsyNzAsMTIgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJc2Vuc2VsZW4gPSAoZGF0YVswXSA8PCA4KSB8IGRhdGFbMV07CisJCXNlbnNlbGVuID0gYmUxNl90b19jcHUoKih1aW50MTZfdCAqKWRhdGEpOwogCQlpZiAoZGF0YWxlbiA8IHNlbnNlbGVuKQogCQkJZ290byBpbnZhbGlkX2RhdGFsZW47CiAKIAkJbWVtY3B5KHNjLT5zZW5zZV9idWZmZXIsIGRhdGEgKyAyLAotCQkgICAgICAgbWluKHNlbnNlbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpKTsKKwkJICAgICAgIG1pbl90KHVpbnQxNl90LCBzZW5zZWxlbiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSk7CiAJCWRlYnVnX3Njc2koImNvcGllZCAlZCBieXRlcyBvZiBzZW5zZVxuIiwKIAkJCSAgIG1pbihzZW5zZWxlbiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tZW0uYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWVtLmMKaW5kZXggMDY2MjkyZC4uZWMzYmJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tZW0uYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21lbS5jCkBAIC01Niw2ICs1Niw5IEBACiAKIAlwb29sLT5lbGVtZW50cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZikgKgogCQkJCQkgTFBGQ19NQlVGX1BPT0xfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb29sLT5lbGVtZW50cykKKwkJZ290byBmYWlsX2ZyZWVfbHBmY19tYnVmX3Bvb2w7CisKIAlwb29sLT5tYXhfY291bnQgPSAwOwogCXBvb2wtPmN1cnJlbnRfY291bnQgPSAwOwogCWZvciAoIGkgPSAwOyBpIDwgTFBGQ19NQlVGX1BPT0xfU0laRTsgaSsrKSB7CkBAIC04MiwxMCArODUsMTEgQEAKICBmYWlsX2ZyZWVfbWJveF9wb29sOgogCW1lbXBvb2xfZGVzdHJveShwaGJhLT5tYm94X21lbV9wb29sKTsKICBmYWlsX2ZyZWVfbWJ1Zl9wb29sOgotCXdoaWxlICgtLWkpCisJd2hpbGUgKGktLSkKIAkJcGNpX3Bvb2xfZnJlZShwaGJhLT5scGZjX21idWZfcG9vbCwgcG9vbC0+ZWxlbWVudHNbaV0udmlydCwKIAkJCQkJCSBwb29sLT5lbGVtZW50c1tpXS5waHlzKTsKIAlrZnJlZShwb29sLT5lbGVtZW50cyk7CisgZmFpbF9mcmVlX2xwZmNfbWJ1Zl9wb29sOgogCXBjaV9wb29sX2Rlc3Ryb3kocGhiYS0+bHBmY19tYnVmX3Bvb2wpOwogIGZhaWxfZnJlZV9kbWFfYnVmX3Bvb2w6CiAJcGNpX3Bvb2xfZGVzdHJveShwaGJhLT5scGZjX3Njc2lfZG1hX2J1Zl9wb29sKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwppbmRleCAwNDYyMjNiLi5iNWJkZDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCkBAIC0xMyw4ICsxMyw4IEBACiAgKiBWZXJzaW9uCTogdjAwLjAwLjAzLjA1CiAgKgogICogQXV0aG9yczoKLSAqIAlTcmVlbml2YXMgQmFnYWxrb3RlCTxTcmVlbml2YXMuQmFnYWxrb3RlQGxzaWwuY29tPgotICogCVN1bWFudCBQYXRybwkJPFN1bWFudC5QYXRyb0Bsc2lsLmNvbT4KKyAqIAlTcmVlbml2YXMgQmFnYWxrb3RlCTxTcmVlbml2YXMuQmFnYWxrb3RlQGxzaS5jb20+CisgKiAJU3VtYW50IFBhdHJvCQk8U3VtYW50LlBhdHJvQGxzaS5jb20+CiAgKgogICogTGlzdCBvZiBzdXBwb3J0ZWQgY29udHJvbGxlcnMKICAqCkBAIC00NSw3ICs0NSw3IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKE1FR0FTQVNfVkVSU0lPTik7Ci1NT0RVTEVfQVVUSE9SKCJzcmVlbml2YXMuYmFnYWxrb3RlQGxzaWwuY29tIik7CitNT0RVTEVfQVVUSE9SKCJtZWdhcmFpZGxpbnV4QGxzaS5jb20iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTFNJIExvZ2ljIE1lZ2FSQUlEIFNBUyBEcml2ZXIiKTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc3N0LmMgYi9kcml2ZXJzL3Njc2kvb3NzdC5jCmluZGV4IDgyNGZlMDguLjdkMjMxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuYwpAQCAtNTc3Nyw3ICs1Nzc3LDcgQEAKIAlkZXZfbnVtID0gaTsKIAogCS8qIGFsbG9jYXRlIGEgc3RydWN0IG9zc3RfdGFwZSBmb3IgdGhpcyBkZXZpY2UgKi8KLQl0cG50ID0gKHN0cnVjdCBvc3N0X3RhcGUgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3NzdF90YXBlKSwgR0ZQX0FUT01JQyk7CisJdHBudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBvc3N0X3RhcGUpLCBHRlBfQVRPTUlDKTsKIAlpZiAodHBudCA9PSBOVUxMKSB7CiAJCXdyaXRlX3VubG9jaygmb3Nfc2NzaV90YXBlc19sb2NrKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJvc3N0IDpFOiBDYW4ndCBhbGxvY2F0ZSBkZXZpY2UgZGVzY3JpcHRvciwgZGV2aWNlIG5vdCBhdHRhY2hlZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKaW5kZXggZDcyZGY1ZC4uZTE2ZmUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCkBAIC0xNjI5LDcgKzE2MjksNiBAQAogCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMJID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZQkgPSBJTlRfTUVNT1JZX0FORF9JTzsKLQlsaW5rLT5jb25mLlByZXNlbnQJID0gUFJFU0VOVF9PUFRJT047CiAKIAlyZXQgPSBuc3BfY3NfY29uZmlnKGxpbmspOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYwppbmRleCBmYjdhY2VhLi41YjQ1OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKQEAgLTU0NSw4ICs1NDUsNiBAQAogCSovCiAJaWYgKHNob3N0LT5pcnEpCiAJCWZyZWVfaXJxKHNob3N0LT5pcnEsIHNob3N0KTsKLQlpZiAoc2hvc3QtPmRtYV9jaGFubmVsICE9IDB4ZmYpCi0JCWZyZWVfZG1hKHNob3N0LT5kbWFfY2hhbm5lbCk7CiAJaWYgKHNob3N0LT5pb19wb3J0ICYmIHNob3N0LT5uX2lvX3BvcnQpCiAJCXJlbGVhc2VfcmVnaW9uKHNob3N0LT5pb19wb3J0LCBzaG9zdC0+bl9pb19wb3J0KTsKIApAQCAtODk1LDcgKzg5Myw2IEBACiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKLQlsaW5rLT5jb25mLlByZXNlbnQgPSBQUkVTRU5UX09QVElPTjsKIAogCXJldHVybiBTWU01M0M1MDBfY29uZmlnKGxpbmspOwogfSAvKiBTWU01M0M1MDBfYXR0YWNoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGx1dG8uYyBiL2RyaXZlcnMvc2NzaS9wbHV0by5jCmluZGV4IGFhNjBhNWYuLjNiMmUxYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbHV0by5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbHV0by5jCkBAIC0xMTcsNyArMTE3LDcgQEAKICNlbmRpZgogCQkJcmV0dXJuIDA7CiAJfQotCWZjcyA9IChzdHJ1Y3QgY3RybF9pbnF1aXJ5ICopIGttYWxsb2MgKHNpemVvZiAoc3RydWN0IGN0cmxfaW5xdWlyeSkgKiBmY3Njb3VudCwgR0ZQX0RNQSk7CisJZmNzID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjdHJsX2lucXVpcnkpICogZmNzY291bnQsIEdGUF9ETUEpOwogCWlmICghZmNzKSB7CiAJCXByaW50ayAoIlBMVVRPOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBwcm9iZVxuIik7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggMTZhZjViNy4uMTU0OGQ0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC0xMzQxLDcgKzEzNDEsNyBAQAogCWludCBob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKIAl1aW50MTZfdCBjb21wX3N0YXR1cyA9IGxlMTZfdG9fY3B1KHN0cy0+Y29tcF9zdGF0dXMpOwogCXVpbnQxNl90IHN0YXRlX2ZsYWdzID0gbGUxNl90b19jcHUoc3RzLT5zdGF0ZV9mbGFncyk7Ci0JdWludDE2X3QgcmVzaWR1YWxfbGVuZ3RoID0gbGUzMl90b19jcHUoc3RzLT5yZXNpZHVhbF9sZW5ndGgpOworCXVpbnQzMl90IHJlc2lkdWFsX2xlbmd0aCA9IGxlMzJfdG9fY3B1KHN0cy0+cmVzaWR1YWxfbGVuZ3RoKTsKIAl1aW50MTZfdCBzY3NpX3N0YXR1cyA9IGxlMTZfdG9fY3B1KHN0cy0+c2NzaV9zdGF0dXMpOwogI2lmIERFQlVHX1FMQTEyODBfSU5UUgogCXN0YXRpYyBjaGFyICpyZWFzb25bXSA9IHsKQEAgLTE0MTMsOCArMTQxMywxMCBAQAogCQkJICAgICAgICJzY3NpOiBVbmRlcmZsb3cgZGV0ZWN0ZWQgLSByZXRyeWluZyAiCiAJCQkgICAgICAgImNvbW1hbmQuXG4iKTsKIAkJCWhvc3Rfc3RhdHVzID0gRElEX0VSUk9SOwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKKwkJCWNwLT5yZXNpZCA9IHJlc2lkdWFsX2xlbmd0aDsKIAkJCWhvc3Rfc3RhdHVzID0gRElEX09LOworCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCBjNGZjNDBmLi4yYzEwMTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC0xNjAyLDYgKzE2MDIsNyBAQAogCiAjZGVmaW5lIENUX1JFSkVDVF9SRVNQT05TRQkweDgwMDEKICNkZWZpbmUgQ1RfQUNDRVBUX1JFU1BPTlNFCTB4ODAwMgorI2RlZmluZSBDVF9SRUFTT05fSU5WQUxJRF9DT01NQU5EX0NPREUJMHgwMQogI2RlZmluZSBDVF9SRUFTT05fQ0FOTk9UX1BFUkZPUk0JMHgwOQogI2RlZmluZSBDVF9FWFBMX0FMUkVBRFlfUkVHSVNURVJFRAkweDEwCiAKQEAgLTIwNzksNiArMjA4MCw3IEBACiAJCXVpbnQzMl90CW1zaV9lbmFibGVkCQk6MTsKIAkJdWludDMyX3QJbXNpeF9lbmFibGVkCQk6MTsKIAkJdWludDMyX3QJZGlzYWJsZV9zZXJkZXMJCToxOworCQl1aW50MzJfdAlncHNjX3N1cHBvcnRlZAkJOjE7CiAJfSBmbGFnczsKIAogCWF0b21pY190CWxvb3Bfc3RhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKaW5kZXggMzJlYmVlYy4uZTRkZDEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaApAQCAtNDUsNyArNDUsNiBAQAogZXh0ZXJuIGludCBxbGEyeDAwX2Fib3J0X2lzcChzY3NpX3FsYV9ob3N0X3QgKik7CiAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfdXBkYXRlX2ZjcG9ydChzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOwotZXh0ZXJuIHZvaWQgcWxhMngwMF9yZWdfcmVtb3RlX3BvcnQoc2NzaV9xbGFfaG9zdF90ICosIGZjX3BvcnRfdCAqKTsKIAogZXh0ZXJuIHZvaWQgcWxhMngwMF9hbGxvY19md19kdW1wKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfdHJ5X3RvX3N0b3BfZmlybXdhcmUoc2NzaV9xbGFfaG9zdF90ICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dzLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYwppbmRleCA5N2ZiYzYyLi5lYzViMmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYwpAQCAtMTI3LDggKzEyNyw4IEBACiAJCSAgICBoYS0+aG9zdF9ubywgcm91dGluZSwgbXNfcGt0LT5lbnRyeV9zdGF0dXMpKTsKIAl9IGVsc2UgewogCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpCi0JCQljb21wX3N0YXR1cyA9Ci0JCQkgICAgKChzdHJ1Y3QgY3RfZW50cnlfMjR4eCAqKW1zX3BrdCktPmNvbXBfc3RhdHVzOworCQkJY29tcF9zdGF0dXMgPSBsZTE2X3RvX2NwdSgKKwkJCSAgICAoKHN0cnVjdCBjdF9lbnRyeV8yNHh4ICopbXNfcGt0KS0+Y29tcF9zdGF0dXMpOwogCQllbHNlCiAJCQljb21wX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1zX3BrdC0+c3RhdHVzKTsKIAkJc3dpdGNoIChjb21wX3N0YXR1cykgewpAQCAtMTQzLDYgKzE0Myw3IEBACiAJCQkJREVCVUcyXzMocWxhMngwMF9kdW1wX2J1ZmZlcigKIAkJCQkgICAgKHVpbnQ4X3QgKikmY3RfcnNwLT5oZWFkZXIsCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgY3RfcnNwX2hkcikpKTsKKwkJCQlydmFsID0gUUxBX0lOVkFMSURfQ09NTUFORDsKIAkJCX0gZWxzZQogCQkJCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKIAkJCWJyZWFrOwpAQCAtMTY4Myw3ICsxNjg0LDcgQEAKIAkJbWVtc2V0KGxpc3RbaV0uZmFicmljX3BvcnRfbmFtZSwgMCwgV1dOX1NJWkUpOwogCiAJCS8qIFByZXBhcmUgY29tbW9uIE1TIElPQ0IgKi8KLQkJbXNfcGt0ID0gcWxhMngwMF9wcmVwX21zX2lvY2IoaGEsIEdGUE5fSURfUkVRX1NJWkUsCisJCW1zX3BrdCA9IGhhLT5pc3Bfb3BzLnByZXBfbXNfaW9jYihoYSwgR0ZQTl9JRF9SRVFfU0laRSwKIAkJICAgIEdGUE5fSURfUlNQX1NJWkUpOwogCiAJCS8qIFByZXBhcmUgQ1QgcmVxdWVzdCAqLwpAQCAtMTc4NCw2ICsxNzg1LDggQEAKIAogCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTU0WFgoaGEpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwlpZiAoIWhhLT5mbGFncy5ncHNjX3N1cHBvcnRlZCkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKIAlydmFsID0gcWxhMngwMF9tZ210X3N2cl9sb2dpbihoYSk7CiAJaWYgKHJ2YWwpCkBAIC0xODEzLDggKzE4MTYsMTkgQEAKIAkJCS8qRU1QVFkqLwogCQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IEdQU0MgaXNzdWUgSU9DQiAiCiAJCQkgICAgImZhaWxlZCAoJWQpLlxuIiwgaGEtPmhvc3Rfbm8sIHJ2YWwpKTsKLQkJfSBlbHNlIGlmIChxbGEyeDAwX2Noa19tc19zdGF0dXMoaGEsIG1zX3BrdCwgY3RfcnNwLAotCQkgICAgIkdQU0MiKSAhPSBRTEFfU1VDQ0VTUykgeworCQl9IGVsc2UgaWYgKChydmFsID0gcWxhMngwMF9jaGtfbXNfc3RhdHVzKGhhLCBtc19wa3QsIGN0X3JzcCwKKwkJICAgICJHUFNDIikpICE9IFFMQV9TVUNDRVNTKSB7CisJCQkvKiBGTSBjb21tYW5kIHVuc3VwcG9ydGVkPyAqLworCQkJaWYgKHJ2YWwgPT0gUUxBX0lOVkFMSURfQ09NTUFORCAmJgorCQkJICAgIGN0X3JzcC0+aGVhZGVyLnJlYXNvbl9jb2RlID09CisJCQkgICAgQ1RfUkVBU09OX0lOVkFMSURfQ09NTUFORF9DT0RFKSB7CisJCQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBHUFNDIGNvbW1hbmQgIgorCQkJCSAgICAidW5zdXBwb3J0ZWQsIGRpc2FibGluZyBxdWVyeS4uLlxuIiwKKwkJCQkgICAgaGEtPmhvc3Rfbm8pKTsKKwkJCQloYS0+ZmxhZ3MuZ3BzY19zdXBwb3J0ZWQgPSAwOworCQkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOworCQkJCWJyZWFrOworCQkJfQogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCX0gZWxzZSB7CiAJCQkvKiBTYXZlIHBvcnRuYW1lICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwppbmRleCBhODIzZjBiLi5iM2RhYzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKQEAgLTIxMDMsNDAgKzIxMDMsNyBAQAogCX0KIH0KIAotLyoKLSAqIHFsYTJ4MDBfdXBkYXRlX2ZjcG9ydAotICoJVXBkYXRlcyBkZXZpY2Ugb24gbGlzdC4KLSAqCi0gKiBJbnB1dDoKLSAqCWhhID0gYWRhcHRlciBibG9jayBwb2ludGVyLgotICoJZmNwb3J0ID0gcG9ydCBzdHJ1Y3R1cmUgcG9pbnRlci4KLSAqCi0gKiBSZXR1cm46Ci0gKgkwICAtIFN1Y2Nlc3MKLSAqICBCSVRfMCAtIGVycm9yCi0gKgotICogQ29udGV4dDoKLSAqCUtlcm5lbCBjb250ZXh0LgotICovCi12b2lkCi1xbGEyeDAwX3VwZGF0ZV9mY3BvcnQoc2NzaV9xbGFfaG9zdF90ICpoYSwgZmNfcG9ydF90ICpmY3BvcnQpCi17Ci0JZmNwb3J0LT5oYSA9IGhhOwotCWZjcG9ydC0+bG9naW5fcmV0cnkgPSAwOwotCWZjcG9ydC0+cG9ydF9sb2dpbl9yZXRyeV9jb3VudCA9IGhhLT5wb3J0X2Rvd25fcmV0cnlfY291bnQgKgotCSAgICBQT1JUX1JFVFJZX1RJTUU7Ci0JYXRvbWljX3NldCgmZmNwb3J0LT5wb3J0X2Rvd25fdGltZXIsIGhhLT5wb3J0X2Rvd25fcmV0cnlfY291bnQgKgotCSAgICBQT1JUX1JFVFJZX1RJTUUpOwotCWZjcG9ydC0+ZmxhZ3MgJj0gfkZDRl9MT0dJTl9ORUVERUQ7Ci0KLQlxbGEyeDAwX2lpZG1hX2ZjcG9ydChoYSwgZmNwb3J0KTsKLQotCWF0b21pY19zZXQoJmZjcG9ydC0+c3RhdGUsIEZDU19PTkxJTkUpOwotCi0JcWxhMngwMF9yZWdfcmVtb3RlX3BvcnQoaGEsIGZjcG9ydCk7Ci19Ci0KLXZvaWQKK3N0YXRpYyB2b2lkCiBxbGEyeDAwX3JlZ19yZW1vdGVfcG9ydChzY3NpX3FsYV9ob3N0X3QgKmhhLCBmY19wb3J0X3QgKmZjcG9ydCkKIHsKIAlzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgcnBvcnRfaWRzOwpAQCAtMjE3OSw2ICsyMTQ2LDM5IEBACiB9CiAKIC8qCisgKiBxbGEyeDAwX3VwZGF0ZV9mY3BvcnQKKyAqCVVwZGF0ZXMgZGV2aWNlIG9uIGxpc3QuCisgKgorICogSW5wdXQ6CisgKgloYSA9IGFkYXB0ZXIgYmxvY2sgcG9pbnRlci4KKyAqCWZjcG9ydCA9IHBvcnQgc3RydWN0dXJlIHBvaW50ZXIuCisgKgorICogUmV0dXJuOgorICoJMCAgLSBTdWNjZXNzCisgKiAgQklUXzAgLSBlcnJvcgorICoKKyAqIENvbnRleHQ6CisgKglLZXJuZWwgY29udGV4dC4KKyAqLwordm9pZAorcWxhMngwMF91cGRhdGVfZmNwb3J0KHNjc2lfcWxhX2hvc3RfdCAqaGEsIGZjX3BvcnRfdCAqZmNwb3J0KQoreworCWZjcG9ydC0+aGEgPSBoYTsKKwlmY3BvcnQtPmxvZ2luX3JldHJ5ID0gMDsKKwlmY3BvcnQtPnBvcnRfbG9naW5fcmV0cnlfY291bnQgPSBoYS0+cG9ydF9kb3duX3JldHJ5X2NvdW50ICoKKwkgICAgUE9SVF9SRVRSWV9USU1FOworCWF0b21pY19zZXQoJmZjcG9ydC0+cG9ydF9kb3duX3RpbWVyLCBoYS0+cG9ydF9kb3duX3JldHJ5X2NvdW50ICoKKwkgICAgUE9SVF9SRVRSWV9USU1FKTsKKwlmY3BvcnQtPmZsYWdzICY9IH5GQ0ZfTE9HSU5fTkVFREVEOworCisJcWxhMngwMF9paWRtYV9mY3BvcnQoaGEsIGZjcG9ydCk7CisKKwlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfT05MSU5FKTsKKworCXFsYTJ4MDBfcmVnX3JlbW90ZV9wb3J0KGhhLCBmY3BvcnQpOworfQorCisvKgogICogcWxhMngwMF9jb25maWd1cmVfZmFicmljCiAgKiAgICAgIFNldHVwIFNOUyBkZXZpY2VzIHdpdGggbG9vcCBJRCdzLgogICoKQEAgLTM0NzYsOSArMzQ3NiwxMSBAQAogCiAJLyogU2V0IGhvc3QgYWRhcHRlciBwYXJhbWV0ZXJzLiAqLwogCWhhLT5mbGFncy5kaXNhYmxlX3Jpc2NfY29kZV9sb2FkID0gMDsKLQloYS0+ZmxhZ3MuZW5hYmxlX2xpcF9yZXNldCA9IDE7Ci0JaGEtPmZsYWdzLmVuYWJsZV9saXBfZnVsbF9sb2dpbiA9IDE7Ci0JaGEtPmZsYWdzLmVuYWJsZV90YXJnZXRfcmVzZXQgPSAxOworCWhhLT5mbGFncy5lbmFibGVfbGlwX3Jlc2V0ID0gMDsKKwloYS0+ZmxhZ3MuZW5hYmxlX2xpcF9mdWxsX2xvZ2luID0KKwkgICAgbGUzMl90b19jcHUobnYtPmhvc3RfcCkgJiBCSVRfMTAgPyAxOiAwOworCWhhLT5mbGFncy5lbmFibGVfdGFyZ2V0X3Jlc2V0ID0KKwkgICAgbGUzMl90b19jcHUobnYtPmhvc3RfcCkgJiBCSVRfMTEgPyAxOiAwOwogCWhhLT5mbGFncy5lbmFibGVfbGVkX3NjaGVtZSA9IDA7CiAJaGEtPmZsYWdzLmRpc2FibGVfc2VyZGVzID0gbGUzMl90b19jcHUobnYtPmhvc3RfcCkgJiBCSVRfNSA/IDE6IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwppbmRleCBkM2I2ZGY0Li4zOWZkMTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCkBAIC0xMzQsMTEgKzEzNCwxMSBAQAogCQlpZiAoc3RhdCAmIEhTUl9SSVNDX1BBVVNFRCkgewogCQkJaGNjciA9IFJEX1JFR19XT1JEKCZyZWctPmhjY3IpOwogCQkJaWYgKGhjY3IgJiAoQklUXzE1IHwgQklUXzEzIHwgQklUXzExIHwgQklUXzgpKQotCQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCQkgICAgIlBhcml0eSBlcnJvciAtLSBIQ0NSPSV4LlxuIiwgaGNjcik7CisJCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiUGFyaXR5IGVycm9yIC0tICIKKwkJCQkgICAgIkhDQ1I9JXgsIER1bXBpbmcgZmlybXdhcmUhXG4iLCBoY2NyKTsKIAkJCWVsc2UKLQkJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJICAgICJSSVNDIHBhdXNlZCAtLSBIQ0NSPSV4LlxuIiwgaGNjcik7CisJCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiUklTQyBwYXVzZWQgLS0gIgorCQkJCSAgICAiSENDUj0leCwgRHVtcGluZyBmaXJtd2FyZSFcbiIsIGhjY3IpOwogCiAJCQkvKgogCQkJICogSXNzdWUgYSAiSEFSRCIgcmVzZXQgaW4gb3JkZXIgZm9yIHRoZSBSSVNDCkBAIC0xNDcsNiArMTQ3LDggQEAKIAkJCSAqLwogCQkJV1JUX1JFR19XT1JEKCZyZWctPmhjY3IsIEhDQ1JfUkVTRVRfUklTQyk7CiAJCQlSRF9SRUdfV09SRCgmcmVnLT5oY2NyKTsKKworCQkJaGEtPmlzcF9vcHMuZndfZHVtcChoYSwgMSk7CiAJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKChzdGF0ICYgSFNSX1JJU0NfSU5UKSA9PSAwKQpAQCAtNDc1LDYgKzQ3Nyw4IEBACiAJCQlzZXRfYml0KFJFU0VUX01BUktFUl9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKIAkJfQogCQlzZXRfYml0KFJFR0lTVEVSX0ZDNF9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKTsKKworCQloYS0+ZmxhZ3MuZ3BzY19zdXBwb3J0ZWQgPSAxOwogCQlicmVhazsKIAogCWNhc2UgTUJBX0NIR19JTl9DT05ORUNUSU9OOgkvKiBDaGFuZ2UgaW4gY29ubmVjdGlvbiBtb2RlICovCkBAIC0xNDQwLDggKzE0NDQsNyBAQAogCiAJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJSSVNDIHBhdXNlZCAtLSBIQ0NSPSV4LCAiCiAJCQkgICAgIkR1bXBpbmcgZmlybXdhcmUhXG4iLCBoY2NyKTsKLQkJCXFsYTI0eHhfZndfZHVtcChoYSwgMSk7Ci0KKwkJCWhhLT5pc3Bfb3BzLmZ3X2R1bXAoaGEsIDEpOwogCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmaGEtPmRwY19mbGFncyk7CiAJCQlicmVhazsKIAkJfSBlbHNlIGlmICgoc3RhdCAmIEhTUlhfUklTQ19JTlQpID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggNGNkZTc2Yy4uMDc3ZTU3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtMTMzOSw5ICsxMzM5LDkgQEAKIAogCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkgewogCQltY3AtPm1iWzBdID0gTUJDX0xJUF9GVUxMX0xPR0lOOwotCQltY3AtPm1iWzFdID0gQklUXzA7Ci0JCW1jcC0+bWJbMl0gPSAweGZmOwotCQltY3AtPm1iWzNdID0gMDsKKwkJbWNwLT5tYlsxXSA9IEJJVF82OworCQltY3AtPm1iWzJdID0gMDsKKwkJbWNwLT5tYlszXSA9IGhhLT5sb29wX3Jlc2V0X2RlbGF5OwogCQltY3AtPm91dF9tYiA9IE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOwogCX0gZWxzZSB7CiAJCW1jcC0+bWJbMF0gPSBNQkNfTElQX1JFU0VUOwpAQCAtMTgyMyw4ICsxODIzLDggQEAKIAkgICAgaGEtPmhvc3Rfbm8pKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfTElQX0ZVTExfTE9HSU47Ci0JbWNwLT5tYlsxXSA9IDA7Ci0JbWNwLT5tYlsyXSA9IDB4ZmY7CisJbWNwLT5tYlsxXSA9IElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpID8gQklUXzM6IDA7CisJbWNwLT5tYlsyXSA9IDA7CiAJbWNwLT5tYlszXSA9IDA7CiAJbWNwLT5vdXRfbWIgPSBNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKIAltY3AtPmluX21iID0gTUJYXzA7CkBAIC0yNDg2LDcgKzI0ODYsNyBAQAogCQltY3AtPm1iWzRdID0gTFNXKE1TRChlZnRfZG1hKSk7CiAJCW1jcC0+bWJbNV0gPSBNU1coTVNEKGVmdF9kbWEpKTsKIAkJbWNwLT5tYls2XSA9IGJ1ZmZlcnM7Ci0JCW1jcC0+bWJbN10gPSBidWZmZXJzOworCQltY3AtPm1iWzddID0gMDsKIAkJbWNwLT5vdXRfbWIgfD0gTUJYXzd8TUJYXzZ8TUJYXzV8TUJYXzR8TUJYXzN8TUJYXzI7CiAJfQogCW1jcC0+dG92ID0gMzA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IGQwMzUyM2QuLmQ2NDQ1YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0xMDM3LDQ4ICsxMDM3LDQ5IEBACiBzdGF0aWMgaW50CiBxbGEyeDAwX2xvb3BfcmVzZXQoc2NzaV9xbGFfaG9zdF90ICpoYSkKIHsKLQlpbnQgc3RhdHVzID0gUUxBX1NVQ0NFU1M7CisJaW50IHJldDsKIAlzdHJ1Y3QgZmNfcG9ydCAqZmNwb3J0OwogCi0JaWYgKGhhLT5mbGFncy5lbmFibGVfbGlwX3Jlc2V0KSB7Ci0JCXN0YXR1cyA9IHFsYTJ4MDBfbGlwX3Jlc2V0KGhhKTsKKwlpZiAoaGEtPmZsYWdzLmVuYWJsZV9saXBfZnVsbF9sb2dpbikgeworCQlyZXQgPSBxbGEyeDAwX2Z1bGxfbG9naW5fbGlwKGhhKTsKKwkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgeworCQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBidXNfcmVzZXQgZmFpbGVkOiAiCisJCQkgICAgImZ1bGxfbG9naW5fbGlwPSVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vLAorCQkJICAgIHJldCkpOworCQl9CisJCWF0b21pY19zZXQoJmhhLT5sb29wX3N0YXRlLCBMT09QX0RPV04pOworCQlhdG9taWNfc2V0KCZoYS0+bG9vcF9kb3duX3RpbWVyLCBMT09QX0RPV05fVElNRSk7CisJCXFsYTJ4MDBfbWFya19hbGxfZGV2aWNlc19sb3N0KGhhLCAwKTsKKwkJcWxhMngwMF93YWl0X2Zvcl9sb29wX3JlYWR5KGhhKTsKIAl9CiAKLQlpZiAoc3RhdHVzID09IFFMQV9TVUNDRVNTICYmIGhhLT5mbGFncy5lbmFibGVfdGFyZ2V0X3Jlc2V0KSB7CisJaWYgKGhhLT5mbGFncy5lbmFibGVfbGlwX3Jlc2V0KSB7CisJCXJldCA9IHFsYTJ4MDBfbGlwX3Jlc2V0KGhhKTsKKwkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgeworCQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBidXNfcmVzZXQgZmFpbGVkOiAiCisJCQkgICAgImxpcF9yZXNldD0lZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywgcmV0KSk7CisJCX0KKwkJcWxhMngwMF93YWl0X2Zvcl9sb29wX3JlYWR5KGhhKTsKKwl9CisKKwlpZiAoaGEtPmZsYWdzLmVuYWJsZV90YXJnZXRfcmVzZXQpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShmY3BvcnQsICZoYS0+ZmNwb3J0cywgbGlzdCkgewogCQkJaWYgKGZjcG9ydC0+cG9ydF90eXBlICE9IEZDVF9UQVJHRVQpCiAJCQkJY29udGludWU7CiAKLQkJCXN0YXR1cyA9IHFsYTJ4MDBfZGV2aWNlX3Jlc2V0KGhhLCBmY3BvcnQpOwotCQkJaWYgKHN0YXR1cyAhPSBRTEFfU1VDQ0VTUykKLQkJCQlicmVhazsKKwkJCXJldCA9IHFsYTJ4MDBfZGV2aWNlX3Jlc2V0KGhhLCBmY3BvcnQpOworCQkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgeworCQkJCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogYnVzX3Jlc2V0IGZhaWxlZDogIgorCQkJCSAgICAidGFyZ2V0X3Jlc2V0PSVkIGRfaWQ9JXguXG4iLCBfX2Z1bmNfXywKKwkJCQkgICAgaGEtPmhvc3Rfbm8sIHJldCwgZmNwb3J0LT5kX2lkLmIyNCkpOworCQkJfQogCQl9CiAJfQogCi0JaWYgKHN0YXR1cyA9PSBRTEFfU1VDQ0VTUyAmJgotCQkoKCFoYS0+ZmxhZ3MuZW5hYmxlX3RhcmdldF9yZXNldCAmJgotCQkgICFoYS0+ZmxhZ3MuZW5hYmxlX2xpcF9yZXNldCkgfHwKLQkJaGEtPmZsYWdzLmVuYWJsZV9saXBfZnVsbF9sb2dpbikpIHsKLQotCQlzdGF0dXMgPSBxbGEyeDAwX2Z1bGxfbG9naW5fbGlwKGhhKTsKLQl9Ci0KIAkvKiBJc3N1ZSBtYXJrZXIgY29tbWFuZCBvbmx5IHdoZW4gd2UgYXJlIGdvaW5nIHRvIHN0YXJ0IHRoZSBJL08gKi8KIAloYS0+bWFya2VyX25lZWRlZCA9IDE7CiAKLQlpZiAoc3RhdHVzKSB7Ci0JCS8qIEVtcHR5ICovCi0JCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogKioqKiBGQUlMRUQgKioqKlxuIiwKLQkJCQlfX2Z1bmNfXywKLQkJCQloYS0+aG9zdF9ubykpOwotCX0gZWxzZSB7Ci0JCS8qIEVtcHR5ICovCi0JCURFQlVHMyhwcmludGsoIiVzKCVsZCk6IGV4aXRpbmcgbm9ybWFsbHkuXG4iLAotCQkJCV9fZnVuY19fLAotCQkJCWhhLT5ob3N0X25vKSk7Ci0JfQotCi0JcmV0dXJuKHN0YXR1cyk7CisJcmV0dXJuIFFMQV9TVUNDRVNTOwogfQogCiAvKgpAQCAtMTQxMyw3ICsxNDE0LDkgQEAKIAogCXNodCA9ICZxbGEyeDAwX2RyaXZlcl90ZW1wbGF0ZTsKIAlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MjIgfHwKLQkgICAgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MzIpCisJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDMyIHx8CisJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDIyIHx8CisJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDMyKQogCQlzaHQgPSAmcWxhMjR4eF9kcml2ZXJfdGVtcGxhdGU7CiAJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyhzaHQsIHNpemVvZihzY3NpX3FsYV9ob3N0X3QpKTsKIAlpZiAoaG9zdCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCAxZmEwYmNlLi40NTllMGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTcsNyArNyw3IEBACiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMS4wNy1rMyIKKyNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDEuMDctazQiCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGVmLmgKaW5kZXggNDI0OWU1Mi4uNmY0Y2YyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9kZWYuaApAQCAtNDE4LDcgKzQxOCw2IEBACiAJICogY29uY3VycmVudGx5LgogCSAqLwogCXN0cnVjdCBtdXRleCAgbWJveF9zZW07Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgbWFpbGJveF93YWl0X3F1ZXVlOwogCiAJLyogdGVtcG9yYXJ5IG1haWxib3ggc3RhdHVzIHJlZ2lzdGVycyAqLwogCXZvbGF0aWxlIHVpbnQ4X3QgbWJveF9zdGF0dXNfY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZ2xibC5oIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2dsYmwuaAppbmRleCAyMTIyOTY3Li5lMDIxZWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZ2xibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9nbGJsLmgKQEAgLTc2LDQgKzc2LDUgQEAKIGV4dGVybiBpbnQgcWw0eGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmc7CiBleHRlcm4gaW50IHFsNHhkaXNjb3Zlcnl3YWl0OwogZXh0ZXJuIGludCBxbDR4ZG9udHJlc2V0aGJhOworZXh0ZXJuIGludCBxbDRfbW9kX3VubG9hZDsKICNlbmRpZiAvKiBfUUxBNHhfR0JMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCmluZGV4IGNjMjEwZjIuLmI5MDdiMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYwpAQCAtOTU4LDI1ICs5NTgsMjUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgcWw0eHh4X2xvY2tfZHJ2cl93YWl0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICphKQoraW50IHFsNHh4eF9sb2NrX2RydnJfd2FpdChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCiB7Ci0jZGVmaW5lIFFMNF9MT0NLX0RSVlJfV0FJVAkzMDAKLSNkZWZpbmUgUUw0X0xPQ0tfRFJWUl9TTEVFUAkxMDAKKyNkZWZpbmUgUUw0X0xPQ0tfRFJWUl9XQUlUCTMwCisjZGVmaW5lIFFMNF9MT0NLX0RSVlJfU0xFRVAJMQogCiAJaW50IGRydnJfd2FpdCA9IFFMNF9MT0NLX0RSVlJfV0FJVDsKIAl3aGlsZSAoZHJ2cl93YWl0KSB7Ci0JCWlmIChxbDR4eHhfbG9ja19kcnZyKGEpID09IDApIHsKLQkJCW1zbGVlcChRTDRfTE9DS19EUlZSX1NMRUVQKTsKKwkJaWYgKHFsNHh4eF9sb2NrX2RydnIoaGEpID09IDApIHsKKwkJCXNzbGVlcChRTDRfTE9DS19EUlZSX1NMRUVQKTsKIAkJCWlmIChkcnZyX3dhaXQpIHsKIAkJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogV2FpdGluZyBmb3IgIgotCQkJCQkgICAgICAiR2xvYmFsIEluaXQgU2VtYXBob3JlLi4ubiIsCi0JCQkJCSAgICAgIGEtPmhvc3Rfbm8sCi0JCQkJCSAgICAgIF9fZnVuY19fKSk7CisJCQkJCSAgICAgICJHbG9iYWwgSW5pdCBTZW1hcGhvcmUoJWQpLi4ubiIsCisJCQkJCSAgICAgIGhhLT5ob3N0X25vLAorCQkJCQkgICAgICBfX2Z1bmNfXywgZHJ2cl93YWl0KSk7CiAJCQl9CiAJCQlkcnZyX3dhaXQgLT0gUUw0X0xPQ0tfRFJWUl9TTEVFUDsKIAkJfSBlbHNlIHsKIAkJCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBHbG9iYWwgSW5pdCBTZW1hcGhvcmUgIgotCQkJCSAgICAgICJhY3F1aXJlZC5uIiwgYS0+aG9zdF9ubywgX19mdW5jX18pKTsKKwkJCQkgICAgICAiYWNxdWlyZWQubiIsIGhhLT5ob3N0X25vLCBfX2Z1bmNfXykpOwogCQkJcmV0dXJuIFFMQV9TVUNDRVNTOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCmluZGV4IGVmOTc1ZTAuLjM1YjllMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKQEAgLTQzMyw3ICs0MzMsNiBAQAogCQkJCQlyZWFkbCgmaGEtPnJlZy0+bWFpbGJveFtpXSk7CiAKIAkJCXNldF9iaXQoQUZfTUJPWF9DT01NQU5EX0RPTkUsICZoYS0+ZmxhZ3MpOwotCQkJd2FrZV91cCgmaGEtPm1haWxib3hfd2FpdF9xdWV1ZSk7CiAJCX0KIAl9IGVsc2UgaWYgKG1ib3hfc3RhdHVzID4+IDEyID09IE1CT1hfQVNZTkNfRVZFTlRfU1RBVFVTKSB7CiAJCS8qIEltbWVkaWF0ZWx5IHByb2Nlc3MgdGhlIEFFTnMgdGhhdCBkb24ndCByZXF1aXJlIG11Y2ggd29yay4KQEAgLTY4Niw3ICs2ODUsOCBAQAogCQkJICAgICAgICZoYS0+cmVnLT5jdHJsX3N0YXR1cyk7CiAJCQlyZWFkbCgmaGEtPnJlZy0+Y3RybF9zdGF0dXMpOwogCi0JCQlzZXRfYml0KERQQ19SRVNFVF9IQV9JTlRSLCAmaGEtPmRwY19mbGFncyk7CisJCQlpZiAoIXFsNF9tb2RfdW5sb2FkKQorCQkJCXNldF9iaXQoRFBDX1JFU0VUX0hBX0lOVFIsICZoYS0+ZHBjX2ZsYWdzKTsKIAogCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoaW50cl9zdGF0dXMgJiBJTlRSX1BFTkRJTkcpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9tYnguYwppbmRleCBiNzIxZGM1Li43ZjI4NjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbWJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X21ieC5jCkBAIC0yOSwxOCArMjksMzAgQEAKIAl1X2xvbmcgd2FpdF9jb3VudDsKIAl1aW50MzJfdCBpbnRyX3N0YXR1czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQotCW11dGV4X2xvY2soJmhhLT5tYm94X3NlbSk7Ci0KLQkvKiBNYWlsYm94IGNvZGUgYWN0aXZlICovCi0Jc2V0X2JpdChBRl9NQk9YX0NPTU1BTkQsICZoYS0+ZmxhZ3MpOwogCiAJLyogTWFrZSBzdXJlIHRoYXQgcG9pbnRlcnMgYXJlIHZhbGlkICovCiAJaWYgKCFtYnhfY21kIHx8ICFtYnhfc3RzKSB7CiAJCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBJbnZhbGlkIG1ieF9jbWQgb3IgbWJ4X3N0cyAiCiAJCQkgICAgICAicG9pbnRlclxuIiwgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7Ci0JCWdvdG8gbWJveF9leGl0OworCQlyZXR1cm4gc3RhdHVzOworCX0KKwkvKiBNYWlsYm94IGNvZGUgYWN0aXZlICovCisJd2FpdF9jb3VudCA9IE1CT1hfVE9WICogMTAwOworCisJd2hpbGUgKHdhaXRfY291bnQtLSkgeworCQltdXRleF9sb2NrKCZoYS0+bWJveF9zZW0pOworCQlpZiAoIXRlc3RfYml0KEFGX01CT1hfQ09NTUFORCwgJmhhLT5mbGFncykpIHsKKwkJCXNldF9iaXQoQUZfTUJPWF9DT01NQU5ELCAmaGEtPmZsYWdzKTsKKwkJCW11dGV4X3VubG9jaygmaGEtPm1ib3hfc2VtKTsKKwkJCWJyZWFrOworCQl9CisJCW11dGV4X3VubG9jaygmaGEtPm1ib3hfc2VtKTsKKwkJaWYgKCF3YWl0X2NvdW50KSB7CisJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogbWJveF9zZW0gZmFpbGVkXG4iLAorCQkJCWhhLT5ob3N0X25vLCBfX2Z1bmNfXykpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQltc2xlZXAoMTApOwogCX0KIAogCS8qIFRvIHByZXZlbnQgb3ZlcndyaXRpbmcgbWFpbGJveCByZWdpc3RlcnMgZm9yIGEgY29tbWFuZCB0aGF0IGhhcwpAQCAtNzMsOCArODUsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKIAkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCi0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCWFkZF93YWl0X3F1ZXVlKCZoYS0+bWFpbGJveF93YWl0X3F1ZXVlLCAmd2FpdCk7CiAKIAkvKgogCSAqIElmIHdlIGRvbid0IHdhbnQgc3RhdHVzLCBkb24ndCB3YWl0IGZvciB0aGUgbWFpbGJveCBjb21tYW5kIHRvCkBAIC04Myw4ICs5Myw2IEBACiAJICovCiAJaWYgKG91dENvdW50ID09IDApIHsKIAkJc3RhdHVzID0gUUxBX1NVQ0NFU1M7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZoYS0+bWFpbGJveF93YWl0X3F1ZXVlLCAmd2FpdCk7CiAJCWdvdG8gbWJveF9leGl0OwogCX0KIAkvKiBXYWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlICovCkBAIC0xMDgsOCArMTE2LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAkJbXNsZWVwKDEwKTsKIAl9Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmaGEtPm1haWxib3hfd2FpdF9xdWV1ZSwgJndhaXQpOwogCiAJLyogQ2hlY2sgZm9yIG1haWxib3ggdGltZW91dC4gKi8KIAlpZiAoIXRlc3RfYml0KEFGX01CT1hfQ09NTUFORF9ET05FLCAmaGEtPmZsYWdzKSkgewpAQCAtMTU1LDkgKzE2MSwxMCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKIG1ib3hfZXhpdDoKKwltdXRleF9sb2NrKCZoYS0+bWJveF9zZW0pOwogCWNsZWFyX2JpdChBRl9NQk9YX0NPTU1BTkQsICZoYS0+ZmxhZ3MpOwotCWNsZWFyX2JpdChBRl9NQk9YX0NPTU1BTkRfRE9ORSwgJmhhLT5mbGFncyk7CiAJbXV0ZXhfdW5sb2NrKCZoYS0+bWJveF9zZW0pOworCWNsZWFyX2JpdChBRl9NQk9YX0NPTU1BTkRfRE9ORSwgJmhhLT5mbGFncyk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCA5ZWY2OTNjLi44MWZiN2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtNDAsNiArNDAsOCBAQAogCQkgIk9wdGlvbiB0byBlbmFibGUgZXh0ZW5kZWQgZXJyb3IgbG9nZ2luZywgIgogCQkgIkRlZmF1bHQgaXMgMCAtIG5vIGxvZ2dpbmcsIDEgLSBkZWJ1ZyBsb2dnaW5nIik7CiAKK2ludCBxbDRfbW9kX3VubG9hZCA9IDA7CisKIC8qCiAgKiBTQ1NJIGhvc3QgdGVtcGxhdGUgZW50cnkgcG9pbnRzCiAgKi8KQEAgLTQyMiw2ICs0MjQsOSBAQAogCQlnb3RvIHFjX2hvc3RfYnVzeTsKIAl9CiAKKwlpZiAodGVzdF9iaXQoRFBDX1JFU0VUX0hBX0lOVFIsICZoYS0+ZHBjX2ZsYWdzKSkKKwkJZ290byBxY19ob3N0X2J1c3k7CisKIAlzcGluX3VubG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAlzcmIgPSBxbGE0eHh4X2dldF9uZXdfc3JiKGhhLCBkZGJfZW50cnksIGNtZCwgZG9uZSk7CkBAIC03MDcsMTYgKzcxMiwxMiBAQAogCXJldHVybiBzdGF0OwogfQogCi0vKioKLSAqIHFsYTR4eHhfc29mdF9yZXNldCAtIHBlcmZvcm1zIHNvZnQgcmVzZXQuCi0gKiBAaGE6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KLSAqKi8KLWludCBxbGE0eHh4X3NvZnRfcmVzZXQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhKQorc3RhdGljIHZvaWQgcWxhNHh4eF9od19yZXNldChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCiB7Ci0JdWludDMyX3QgbWF4X3dhaXRfdGltZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQlpbnQgc3RhdHVzID0gUUxBX0VSUk9SOwogCXVpbnQzMl90IGN0cmxfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJREVCVUcyKHByaW50ayhLRVJOX0VSUiAic2NzaSVsZDogJXNcbiIsIGhhLT5ob3N0X25vLCBfX2Z1bmNfXykpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKQEAgLTczMyw2ICs3MzQsMjAgQEAKIAlyZWFkbCgmaGEtPnJlZy0+Y3RybF9zdGF0dXMpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBxbGE0eHh4X3NvZnRfcmVzZXQgLSBwZXJmb3JtcyBzb2Z0IHJlc2V0LgorICogQGhhOiBQb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKiovCitpbnQgcWxhNHh4eF9zb2Z0X3Jlc2V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSkKK3sKKwl1aW50MzJfdCBtYXhfd2FpdF90aW1lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWludCBzdGF0dXMgPSBRTEFfRVJST1I7CisJdWludDMyX3QgY3RybF9zdGF0dXM7CisKKwlxbGE0eHh4X2h3X3Jlc2V0KGhhKTsKIAogCS8qIFdhaXQgdW50aWwgdGhlIE5ldHdvcmsgUmVzZXQgSW50ciBiaXQgaXMgY2xlYXJlZCAqLwogCW1heF93YWl0X3RpbWUgPSBSRVNFVF9JTlRSX1RPVjsKQEAgLTk2NiwxMCArOTgxLDEyIEBACiAJc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzY3NpX3FsYV9ob3N0LCBkcGNfd29yayk7CiAJc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5LCAqZHRlbXA7CisJaW50IHN0YXR1cyA9IFFMQV9FUlJPUjsKIAogCURFQlVHMihwcmludGsoInNjc2klbGQ6ICVzOiBEUEMgaGFuZGxlciB3YWtpbmcgdXAuIgotCQkiZmxhZ3MgPSAweCUwOGx4LCBkcGNfZmxhZ3MgPSAweCUwOGx4XG4iLAotCQloYS0+aG9zdF9ubywgX19mdW5jX18sIGhhLT5mbGFncywgaGEtPmRwY19mbGFncykpOworCQkiZmxhZ3MgPSAweCUwOGx4LCBkcGNfZmxhZ3MgPSAweCUwOGx4IGN0cmxfc3RhdCA9IDB4JTA4eFxuIiwKKwkJaGEtPmhvc3Rfbm8sIF9fZnVuY19fLCBoYS0+ZmxhZ3MsIGhhLT5kcGNfZmxhZ3MsCisJCXJlYWR3KCZoYS0+cmVnLT5jdHJsX3N0YXR1cykpKTsKIAogCS8qIEluaXRpYWxpemF0aW9uIG5vdCB5ZXQgZmluaXNoZWQuIERvbid0IGRvIGFueXRoaW5nIHlldC4gKi8KIAlpZiAoIXRlc3RfYml0KEFGX0lOSVRfRE9ORSwgJmhhLT5mbGFncykpCkBAIC05ODMsMzEgKzEwMDAsMjggQEAKIAkJCXRlc3RfYml0KERQQ19SRVNFVF9IQSwgJmhhLT5kcGNfZmxhZ3MpKQogCQkJcWxhNHh4eF9yZWNvdmVyX2FkYXB0ZXIoaGEsIFBSRVNFUlZFX0REQl9MSVNUKTsKIAotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERQQ19SRVNFVF9IQV9JTlRSLCAmaGEtPmRwY19mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KERQQ19SRVNFVF9IQV9JTlRSLCAmaGEtPmRwY19mbGFncykpIHsKIAkJCXVpbnQ4X3Qgd2FpdF90aW1lID0gUkVTRVRfSU5UUl9UT1Y7Ci0JCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAotCQkJcWxhNHh4eF9mbHVzaF9hY3RpdmVfc3JicyhoYSk7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCQkJd2hpbGUgKChyZWFkdygmaGEtPnJlZy0+Y3RybF9zdGF0dXMpICYKIAkJCQkoQ1NSX1NPRlRfUkVTRVQgfCBDU1JfRk9SQ0VfU09GVF9SRVNFVCkpICE9IDApIHsKIAkJCQlpZiAoLS13YWl0X3RpbWUgPT0gMCkKIAkJCQkJYnJlYWs7Ci0KLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywKLQkJCQkJCSAgICAgICBmbGFncyk7Ci0KIAkJCQltc2xlZXAoMTAwMCk7Ci0KLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0KIAkJCWlmICh3YWl0X3RpbWUgPT0gMCkKIAkJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogU1J8RlNSICIKIAkJCQkJICAgICAgImJpdCBub3QgY2xlYXJlZC0tIHJlc2V0dGluZ1xuIiwKIAkJCQkJICAgICAgaGEtPmhvc3Rfbm8sIF9fZnVuY19fKSk7CisJCQlxbGE0eHh4X2ZsdXNoX2FjdGl2ZV9zcmJzKGhhKTsKKwkJCWlmIChxbDR4eHhfbG9ja19kcnZyX3dhaXQoaGEpID09IFFMQV9TVUNDRVNTKSB7CisJCQkJcWxhNHh4eF9wcm9jZXNzX2FlbihoYSwgRkxVU0hfRERCX0NIQU5HRURfQUVOUyk7CisJCQkJc3RhdHVzID0gcWxhNHh4eF9pbml0aWFsaXplX2FkYXB0ZXIoaGEsCisJCQkJCQlQUkVTRVJWRV9EREJfTElTVCk7CisJCQl9CisJCQljbGVhcl9iaXQoRFBDX1JFU0VUX0hBX0lOVFIsICZoYS0+ZHBjX2ZsYWdzKTsKKwkJCWlmIChzdGF0dXMgPT0gUUxBX1NVQ0NFU1MpCisJCQkJcWxhNHh4eF9lbmFibGVfaW50cnMoaGEpOwogCQl9CiAJfQogCkBAIC0xMDYyLDcgKzEwNzYsNyBAQAogCiAJLyogSXNzdWUgU29mdCBSZXNldCB0byBwdXQgZmlybXdhcmUgaW4gdW5rbm93biBzdGF0ZSAqLwogCWlmIChxbDR4eHhfbG9ja19kcnZyX3dhaXQoaGEpID09IFFMQV9TVUNDRVNTKQotCQlxbGE0eHh4X3NvZnRfcmVzZXQoaGEpOworCQlxbGE0eHh4X2h3X3Jlc2V0KGhhKTsKIAogCS8qIFJlbW92ZSB0aW1lciB0aHJlYWQsIGlmIHByZXNlbnQgKi8KIAlpZiAoaGEtPnRpbWVyX2FjdGl2ZSkKQEAgLTExOTgsNyArMTIxMiw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJmhhLT5mcmVlX3NyYl9xKTsKIAogCW11dGV4X2luaXQoJmhhLT5tYm94X3NlbSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmaGEtPm1haWxib3hfd2FpdF9xdWV1ZSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaGEtPmhhcmR3YXJlX2xvY2spOwogCkBAIC0xNjY1LDYgKzE2NzgsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcWxhNHh4eF9tb2R1bGVfZXhpdCh2b2lkKQogeworCXFsNF9tb2RfdW5sb2FkID0gMTsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnFsYTR4eHhfcGNpX2RyaXZlcik7CiAJaXNjc2lfdW5yZWdpc3Rlcl90cmFuc3BvcnQoJnFsYTR4eHhfaXNjc2lfdHJhbnNwb3J0KTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koc3JiX2NhY2hlcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X3ZlcnNpb24uaAppbmRleCA0NTRlMTljLi5lNTE4M2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF92ZXJzaW9uLmgKQEAgLTUsNCArNSw0IEBACiAgKiBTZWUgTElDRU5TRS5xbGE0eHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCiAKLSNkZWZpbmUgUUxBNFhYWF9EUklWRVJfVkVSU0lPTgkiNS4wMC4wNy1rIgorI2RlZmluZSBRTEE0WFhYX0RSSVZFUl9WRVJTSU9OCSI1LjAwLjA3LWsxIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCAxNzQ4ZTI3Li5mMDJmNDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtMjY1LDEzICsyNjUsMTEgQEAKIAogCWlmICghcnEtPmJpbykKIAkJYmxrX3JxX2Jpb19wcmVwKHEsIHJxLCBiaW8pOwotCWVsc2UgaWYgKCFxLT5iYWNrX21lcmdlX2ZuKHEsIHJxLCBiaW8pKQorCWVsc2UgaWYgKCFsbF9iYWNrX21lcmdlX2ZuKHEsIHJxLCBiaW8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAllbHNlIHsKIAkJcnEtPmJpb3RhaWwtPmJpX25leHQgPSBiaW87CiAJCXJxLT5iaW90YWlsID0gYmlvOwotCQlycS0+aGFyZF9ucl9zZWN0b3JzICs9IGJpb19zZWN0b3JzKGJpbyk7Ci0JCXJxLT5ucl9zZWN0b3JzID0gcnEtPmhhcmRfbnJfc2VjdG9yczsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwppbmRleCAxNGU2MzVhLi45NmI3Y2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCkBAIC0xMzMsMTIgKzEzMywxMCBAQAogLyoqCiAgKiBzY3NpX2NvbXBsZXRlX2FzeW5jX3NjYW5zIC0gV2FpdCBmb3IgYXN5bmNocm9ub3VzIHNjYW5zIHRvIGNvbXBsZXRlCiAgKgotICogQXN5bmNocm9ub3VzIHNjYW5zIGFkZCB0aGVtc2VsdmVzIHRvIHRoZSBzY2FubmluZ19ob3N0cyBsaXN0LiAgT25jZQotICogdGhhdCBsaXN0IGlzIGVtcHR5LCB3ZSBrbm93IHRoYXQgdGhlIHNjYW5zIGFyZSBjb21wbGV0ZS4gIFJhdGhlciB0aGFuCi0gKiB3YWtpbmcgdXAgcGVyaW9kaWNhbGx5IHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCwgd2UgcHJldGVuZCB0byBiZQotICogYSBzY2FubmluZyB0YXNrIGJ5IGFkZGluZyBvdXJzZWx2ZXMgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQgZ29pbmcgdG8KLSAqIHNsZWVwLiAgV2hlbiB0aGUgdGFzayBiZWZvcmUgdXMgd2FrZXMgdXMgdXAsIHdlIHRha2Ugb3Vyc2VsdmVzIG9mZiB0aGUKLSAqIGxpc3QgYW5kIHJldHVybi4KKyAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBhbnkgaG9zdCB3aGljaCBzdGFydGVkIHNjYW5uaW5nIGJlZm9yZQorICogdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpbGwgaGF2ZSBmaW5pc2hlZCBpdHMgc2Nhbi4gIEhvc3RzIHdoaWNoCisgKiBzdGFydGVkIHNjYW5uaW5nIGFmdGVyIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCBtYXkgb3IgbWF5IG5vdCBoYXZlCisgKiBmaW5pc2hlZC4KICAqLwogaW50IHNjc2lfY29tcGxldGVfYXN5bmNfc2NhbnModm9pZCkKIHsKQEAgLTE3MSw2ICsxNjksMTEgQEAKIAogCXNwaW5fbG9jaygmYXN5bmNfc2Nhbl9sb2NrKTsKIAlsaXN0X2RlbCgmZGF0YS0+bGlzdCk7CisJaWYgKCFsaXN0X2VtcHR5KCZzY2FubmluZ19ob3N0cykpIHsKKwkJc3RydWN0IGFzeW5jX3NjYW5fZGF0YSAqbmV4dCA9IGxpc3RfZW50cnkoc2Nhbm5pbmdfaG9zdHMubmV4dCwKKwkJCQlzdHJ1Y3QgYXN5bmNfc2Nhbl9kYXRhLCBsaXN0KTsKKwkJY29tcGxldGUoJm5leHQtPnByZXZfZmluaXNoZWQpOworCX0KICBkb25lOgogCXNwaW5fdW5sb2NrKCZhc3luY19zY2FuX2xvY2spOwogCkBAIC03MzksNiArNzQyLDE0IEBACiAJCXNkZXYtPm5vX3VsZF9hdHRhY2ggPSAxOwogCiAJc3dpdGNoIChzZGV2LT50eXBlID0gKGlucV9yZXN1bHRbMF0gJiAweDFmKSkgeworCWNhc2UgVFlQRV9SQkM6CisJCS8qIFJCQyBkZXZpY2VzIGNhbiByZXR1cm4gU0NTSS0zIGNvbXBsaWFuY2UgYW5kIHlldAorCQkgKiBzdGlsbCBub3Qgc3VwcG9ydCBSRVBPUlQgTFVOUywgc28gbWFrZSB0aGVtIGFjdCBhcworCQkgKiBCTElTVF9OT1JFUE9SVExVTiB1bmxlc3MgQkxJU1RfUkVQT1JUTFVOMiBpcworCQkgKiBzcGVjaWZpY2FsbHkgc2V0ICovCisJCWlmICgoKmJmbGFncyAmIEJMSVNUX1JFUE9SVExVTjIpID09IDApCisJCQkqYmZsYWdzIHw9IEJMSVNUX05PUkVQT1JUTFVOOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFRZUEVfVEFQRToKIAljYXNlIFRZUEVfRElTSzoKIAljYXNlIFRZUEVfUFJJTlRFUjoKQEAgLTc0OSwxMSArNzYwLDE3IEBACiAJY2FzZSBUWVBFX0VOQ0xPU1VSRToKIAljYXNlIFRZUEVfQ09NTToKIAljYXNlIFRZUEVfUkFJRDoKLQljYXNlIFRZUEVfUkJDOgogCQlzZGV2LT53cml0ZWFibGUgPSAxOwogCQlicmVhazsKLQljYXNlIFRZUEVfV09STToKIAljYXNlIFRZUEVfUk9NOgorCQkvKiBNTUMgZGV2aWNlcyBjYW4gcmV0dXJuIFNDU0ktMyBjb21wbGlhbmNlIGFuZCB5ZXQKKwkJICogc3RpbGwgbm90IHN1cHBvcnQgUkVQT1JUIExVTlMsIHNvIG1ha2UgdGhlbSBhY3QgYXMKKwkJICogQkxJU1RfTk9SRVBPUlRMVU4gdW5sZXNzIEJMSVNUX1JFUE9SVExVTjIgaXMKKwkJICogc3BlY2lmaWNhbGx5IHNldCAqLworCQlpZiAoKCpiZmxhZ3MgJiBCTElTVF9SRVBPUlRMVU4yKSA9PSAwKQorCQkJKmJmbGFncyB8PSBCTElTVF9OT1JFUE9SVExVTjsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBUWVBFX1dPUk06CiAJCXNkZXYtPndyaXRlYWJsZSA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNDM2LDYgKzE0NTMsMTIgQEAKIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSAmc2hvc3QtPnNob3N0X2dlbmRldjsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CiAKKwlpZiAoc3RybmNtcChzY3NpX3NjYW5fdHlwZSwgIm5vbmUiLCA0KSA9PSAwKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCWlmICghc2hvc3QtPmFzeW5jX3NjYW4pCisJCXNjc2lfY29tcGxldGVfYXN5bmNfc2NhbnMoKTsKKwogCXN0YXJnZXQgPSBzY3NpX2FsbG9jX3RhcmdldChwYXJlbnQsIGNoYW5uZWwsIGlkKTsKIAlpZiAoIXN0YXJnZXQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYwppbmRleCA5YzIyZjEzLi5jZTBkMTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYwpAQCAtMTQxNiw3ICsxNDE2LDcgQEAKIHsKIAlpbnQgZXJyOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiTG9hZGluZyBpU0NTSSB0cmFuc3BvcnQgY2xhc3MgdiVzLiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiTG9hZGluZyBpU0NTSSB0cmFuc3BvcnQgY2xhc3MgdiVzLlxuIiwKIAkJSVNDU0lfVFJBTlNQT1JUX1ZFUlNJT04pOwogCiAJZXJyID0gY2xhc3NfcmVnaXN0ZXIoJmlzY3NpX3RyYW5zcG9ydF9jbGFzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKaW5kZXggM2ZkZWQ0OC4uMDE0ZDdmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJCQlpZiAoIXNzaGRyKQogCQkJCXNzaGRyID0gJnNzaGRyX3RtcDsKIAotCQkJaWYgKHNjc2lfbm9ybWFsaXplX3NlbnNlKHNlbnNlLCBzaXplb2YoKnNlbnNlKSwKKwkJCWlmIChzY3NpX25vcm1hbGl6ZV9zZW5zZShzZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLAogCQkJCQkJIHNzaGRyKQogCQkJICAgICYmIHNzaGRyLT5zZW5zZV9rZXkgPT0gVU5JVF9BVFRFTlRJT04pCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IGY2YTQ1MjguLmI3ODFhOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC04NjMsNyArODYzLDcgQEAKICAqLwogc3RhdGljIGxvbmcgc2RfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfYmRldjsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9iZGV2OwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBzY3NpX2Rpc2soZGlzayktPmRldmljZTsKIApAQCAtMTY0NywxNiArMTY0Nyw2IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9wdXQ7CiAKLQljbGFzc19kZXZpY2VfaW5pdGlhbGl6ZSgmc2RrcC0+Y2Rldik7Ci0Jc2RrcC0+Y2Rldi5kZXYgPSAmc2RwLT5zZGV2X2dlbmRldjsKLQlzZGtwLT5jZGV2LmNsYXNzID0gJnNkX2Rpc2tfY2xhc3M7Ci0Jc3RybmNweShzZGtwLT5jZGV2LmNsYXNzX2lkLCBzZHAtPnNkZXZfZ2VuZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUpOwotCi0JaWYgKGNsYXNzX2RldmljZV9hZGQoJnNka3AtPmNkZXYpKQotCQlnb3RvIG91dF9wdXQ7Ci0KLQlnZXRfZGV2aWNlKCZzZHAtPnNkZXZfZ2VuZGV2KTsKLQogCXNka3AtPmRldmljZSA9IHNkcDsKIAlzZGtwLT5kcml2ZXIgPSAmc2RfdGVtcGxhdGU7CiAJc2RrcC0+ZGlzayA9IGdkOwpAQCAtMTY3MCw2ICsxNjYwLDE2IEBACiAJCQlzZHAtPnRpbWVvdXQgPSBTRF9NT0RfVElNRU9VVDsKIAl9CiAKKwljbGFzc19kZXZpY2VfaW5pdGlhbGl6ZSgmc2RrcC0+Y2Rldik7CisJc2RrcC0+Y2Rldi5kZXYgPSAmc2RwLT5zZGV2X2dlbmRldjsKKwlzZGtwLT5jZGV2LmNsYXNzID0gJnNkX2Rpc2tfY2xhc3M7CisJc3RybmNweShzZGtwLT5jZGV2LmNsYXNzX2lkLCBzZHAtPnNkZXZfZ2VuZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUpOworCisJaWYgKGNsYXNzX2RldmljZV9hZGQoJnNka3AtPmNkZXYpKQorCQlnb3RvIG91dF9wdXQ7CisKKwlnZXRfZGV2aWNlKCZzZHAtPnNkZXZfZ2VuZGV2KTsKKwogCWdkLT5tYWpvciA9IHNkX21ham9yKChpbmRleCAmIDB4ZjApID4+IDQpOwogCWdkLT5maXJzdF9taW5vciA9ICgoaW5kZXggJiAweGYpIDw8IDQpIHwgKGluZGV4ICYgMHhmZmYwMCk7CiAJZ2QtPm1pbm9ycyA9IDE2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NlYWdhdGUuYyBiL2RyaXZlcnMvc2NzaS9zZWFnYXRlLmMKaW5kZXggNWZmZWMyNy4uZmY2MmU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NlYWdhdGUuYworKysgYi9kcml2ZXJzL3Njc2kvc2VhZ2F0ZS5jCkBAIC0xMTQsNiArMTE0LDcgQEAKICNkZWZpbmUgRFBSSU5USyggd2hlbiwgbXNnLi4uICkgZG8geyBpZiAoIChERUJVRyAmICh3aGVuKSkgPT0gKHdoZW4pICkgcHJpbnRrKCBtc2cgKTsgfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIERQUklOVEsoIHdoZW4sIG1zZy4uLiApIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgREVCVUcgMAogI2VuZGlmCiAjZGVmaW5lIERBTlkoIG1zZy4uLiApIERQUklOVEsoIDB4ZmZmZiwgbXNnICk7CiAKQEAgLTUyMyw3ICs1MjQsNyBAQAogI2lmZGVmIEFSQklUUkFURQogCQkiIEFSQklUUkFURSIKICNlbmRpZgotI2lmZGVmIERFQlVHCisjaWYgREVCVUcKIAkJIiBERUJVRyIKICNlbmRpZgogI2lmZGVmIEZBU1QKQEAgLTczMyw3ICs3MzQsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBOVUxMOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqYnVmZmVyID0gTlVMTDsKIAlpbnQgY2xvY2ssIHRlbXAsIG5vYnVmZnMgPSAwLCBkb25lID0gMCwgbGVuID0gMDsKLSNpZmRlZiBERUJVRworI2lmIERFQlVHCiAJaW50IHRyYW5zZmVyZWQgPSAwLCBwaGFzZSA9IDAsIG5ld3BoYXNlOwogI2VuZGlmCiAJcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBzdGF0dXNfcmVhZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5jIGIvZHJpdmVycy9zY3NpL3NyLmMKaW5kZXggZmFlNmU5NS4uODllOWIzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyLmMKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCX0KIAogCXJldCA9IGNkcm9tX2lvY3RsKGZpbGUsICZjZC0+Y2RpLCBpbm9kZSwgY21kLCBhcmcpOwotCWlmIChyZXQgIT0gRU5PU1lTKQorCWlmIChyZXQgIT0gLUVOT1NZUykKIAkJcmV0dXJuIHJldDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYyBiL2RyaXZlcnMvc2NzaS9zcl9pb2N0bC5jCmluZGV4IGQxMjY4Y2IuLjA1NzhiYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zcl9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zcl9pb2N0bC5jCkBAIC01NDYsNyArNTQ2LDcgQEAKIAlpZiAoIXhhX3Rlc3QpCiAJCXJldHVybiAwOwogCi0JcmF3X3NlY3RvciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2MoMjA0OCwgR0ZQX0tFUk5FTCB8IFNSX0dGUF9ETUEoY2QpKTsKKwlyYXdfc2VjdG9yID0ga21hbGxvYygyMDQ4LCBHRlBfS0VSTkVMIHwgU1JfR0ZQX0RNQShjZCkpOwogCWlmICghcmF3X3NlY3RvcikKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKDAgPT0gc3JfcmVhZF9zZWN0b3IoY2QsIGNkLT5tc19vZmZzZXQgKyAxNiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYyBiL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYwppbmRleCBhM2U5ZDBmLi40ZWIzZGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3JfdmVuZG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyX3ZlbmRvci5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJZGVuc2l0eSA9IChibG9ja2xlbmd0aCA+IDIwNDgpID8gMHg4MSA6IDB4ODM7CiAjZW5kaWYKIAotCWJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2MoNTEyLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJYnVmZmVyID0ga21hbGxvYyg1MTIsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIWJ1ZmZlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE2NCw3ICsxNjQsNyBAQAogCWlmIChjZC0+Y2RpLm1hc2sgJiBDRENfTVVMVElfU0VTU0lPTikKIAkJcmV0dXJuIDA7CiAKLQlidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jKDUxMiwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWJ1ZmZlciA9IGttYWxsb2MoNTEyLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFidWZmZXIpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IDU4NzI3NGQuLjQ4OGVjNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC05MjIsNyArOTIyLDcgQEAKIAlzdHJ1Y3Qgc3RfbW9kZWRlZiAqU1RtOwogCXN0cnVjdCBzdF9wYXJ0c3RhdCAqU1RwczsKIAljaGFyICpuYW1lID0gdGFwZV9uYW1lKFNUcCk7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCBtb2RlID0gVEFQRV9NT0RFKGlub2RlKTsKIAogCVNUcC0+cmVhZHkgPSBTVF9SRUFEWTsKQEAgLTI4MTYsMTUgKzI4MTYsMTggQEAKIAogCQlpZiAoY21kX2luID09IE1UV0VPRiAmJgogCQkgICAgY21kc3RhdHAtPmhhdmVfc2Vuc2UgJiYKLQkJICAgIChjbWRzdGF0cC0+ZmxhZ3MgJiBTRU5TRV9FT00pICYmCi0JCSAgICAoY21kc3RhdHAtPnNlbnNlX2hkci5zZW5zZV9rZXkgPT0gTk9fU0VOU0UgfHwKLQkJICAgICBjbWRzdGF0cC0+c2Vuc2VfaGRyLnNlbnNlX2tleSA9PSBSRUNPVkVSRURfRVJST1IpICYmCi0JCSAgICB1bmRvbmUgPT0gMCkgewotCQkJaW9jdGxfcmVzdWx0ID0gMDsJLyogRU9GIHdyaXR0ZW4gc3VjY2Vzc2Z1bGx5IGF0IEVPTSAqLwotCQkJaWYgKGZpbGVubyA+PSAwKQotCQkJCWZpbGVubysrOworCQkgICAgKGNtZHN0YXRwLT5mbGFncyAmIFNFTlNFX0VPTSkpIHsKKwkJCWlmIChjbWRzdGF0cC0+c2Vuc2VfaGRyLnNlbnNlX2tleSA9PSBOT19TRU5TRSB8fAorCQkJICAgIGNtZHN0YXRwLT5zZW5zZV9oZHIuc2Vuc2Vfa2V5ID09IFJFQ09WRVJFRF9FUlJPUikgeworCQkJCWlvY3RsX3Jlc3VsdCA9IDA7CS8qIEVPRihzKSB3cml0dGVuIHN1Y2Nlc3NmdWxseSBhdCBFT00gKi8KKwkJCQlTVHBzLT5lb2YgPSBTVF9OT0VPRjsKKwkJCX0gZWxzZSB7ICAvKiBXcml0aW5nIEVPRihzKSBmYWlsZWQgKi8KKwkJCQlpZiAoZmlsZW5vID49IDApCisJCQkJCWZpbGVubyAtPSB1bmRvbmU7CisJCQkJaWYgKHVuZG9uZSA8IGFyZykKKwkJCQkJU1Rwcy0+ZW9mID0gU1RfTk9FT0Y7CisJCQl9CiAJCQlTVHBzLT5kcnZfZmlsZSA9IGZpbGVubzsKLQkJCVNUcHMtPmVvZiA9IFNUX05PRU9GOwogCQl9IGVsc2UgaWYgKChjbWRfaW4gPT0gTVRGU0YpIHx8IChjbWRfaW4gPT0gTVRGU0ZNKSkgewogCQkJaWYgKGZpbGVubyA+PSAwKQogCQkJCVNUcHMtPmRydl9maWxlID0gZmlsZW5vIC0gdW5kb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCmluZGV4IDNiM2YzMDUuLjk4ZTNmZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogCShzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKShpbiktPmhvc3RkYXRhCiAjZGVmaW5lCUhPU1REQVRBKGluKSAoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopKGluKS0+aG9zdGRhdGEpCiAKLSNkZWZpbmUJTkVYVChjbWQpCSgoc3RydWN0IHNjc2lfY21uZCAqKSgoY21kKS0+aG9zdF9zY3JpYmJsZSkpCisjZGVmaW5lCU5FWFQoY21kKQkoKihzdHJ1Y3Qgc2NzaV9jbW5kICoqKSYoKGNtZCktPmhvc3Rfc2NyaWJibGUpKQogI2RlZmluZQlORVhUQUREUihjbWQpCSgoc3RydWN0IHNjc2lfY21uZCAqKikmKChjbWQpLT5ob3N0X3NjcmliYmxlKSkKIAogI2RlZmluZQlIT1NUTk8JCWluc3RhbmNlLT5ob3N0X25vCkBAIC02NTAsNyArNjUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogc3RhdGljIHZvbGF0aWxlIGludCBtYWluX3J1bm5pbmcgPSAwOwotc3RhdGljIERFQ0xBUkVfV09SSyhOQ1I1MzgwX3RxdWV1ZSwgKHZvaWQgKCopKHZvaWQqKSlOQ1I1MzgwX21haW4sIE5VTEwpOworc3RhdGljIERFQ0xBUkVfV09SSyhOQ1I1MzgwX3RxdWV1ZSwgTkNSNTM4MF9tYWluKTsKIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBxdWV1ZV9tYWluKHZvaWQpCiB7CkBAIC0xMDMxLDcgKzEwMzEsNyBAQAogICogIHJlZW5hYmxlIHRoZW0uICBUaGlzIHByZXZlbnRzIHJlZW50cmFuY3kgYW5kIGtlcm5lbCBzdGFjayBvdmVyZmxvdy4KICAqLyAJCiAgICAgCi1zdGF0aWMgdm9pZCBOQ1I1MzgwX21haW4gKHZvaWQgKmJsKQorc3RhdGljIHZvaWQgTkNSNTM4MF9tYWluIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmJsKQogewogICAgIHN0cnVjdCBzY3NpX2NtbmQgKnRtcCwgKnByZXY7CiAgICAgc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UgPSBmaXJzdF9pbnN0YW5jZTsKQEAgLTEyNzEsNyArMTI3MSw3IEBACiAJTkNSX1BSSU5UKE5ERUJVR19JTlRSKTsKIAlpZiAoKE5DUjUzODBfcmVhZChTVEFUVVNfUkVHKSAmIChTUl9TRUx8U1JfSU8pKSA9PSAoU1JfU0VMfFNSX0lPKSkgewogCSAgICBkb25lID0gMDsKLQkgICAgRU5BQkxFX0lSUSgpOworLy8JICAgIEVOQUJMRV9JUlEoKTsKIAkgICAgSU5UX1BSSU5USygic2NzaSVkOiBTRUwgaW50ZXJydXB0XG4iLCBIT1NUTk8pOwogCSAgICBOQ1I1MzgwX3Jlc2VsZWN0KGluc3RhbmNlKTsKIAkgICAgKHZvaWQpIE5DUjUzODBfcmVhZChSRVNFVF9QQVJJVFlfSU5URVJSVVBUX1JFRyk7CkBAIC0xMzA0LDcgKzEzMDQsNyBAQAogCQlJTlRfUFJJTlRLKCJzY3NpJWQ6IFBIQVNFIE1JU00gb3IgRU9QIGludGVycnVwdFxuIiwgSE9TVE5PKTsKIAkJTkNSNTM4MF9kbWFfY29tcGxldGUoIGluc3RhbmNlICk7CiAJCWRvbmUgPSAwOwotCQlFTkFCTEVfSVJRKCk7CisvLwkJRU5BQkxFX0lSUSgpOwogCSAgICB9IGVsc2UKICNlbmRpZiAvKiBSRUFMX0RNQSAqLwogCSAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMKaW5kZXggZDU2ZDg1ZC4uNjllZTNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuYwpAQCAtNzUsOSArNzUsOSBAQAogI2RlZmluZSBSRUFMX0RNQQogCiAjaW5jbHVkZSAic2NzaS5oIgorI2luY2x1ZGUgImluaXRpby5oIgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAic3VuM19zY3NpLmgiCi0jaW5jbHVkZSAiTkNSNTM4MC5oIgogCiBzdGF0aWMgdm9pZCBOQ1I1MzgwX3ByaW50KHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5oIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5oCmluZGV4IGExMTAzYjMuLmIyOWE5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmgKQEAgLTIyMSw3ICsyMjEsNyBAQAogICoKICAqLwogCi0KKyNpbmNsdWRlICJOQ1I1MzgwLmgiCiAKICNpZiBOREVCVUcgJiBOREVCVUdfQVJCSVRSQVRJT04KICNkZWZpbmUgQVJCX1BSSU5USyhmb3JtYXQsIGFyZ3MuLi4pIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2lfdm1lLmMgYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpX3ZtZS5jCmluZGV4IDkyZGVmMzEuLmJiMGM5ZmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpX3ZtZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2lfdm1lLmMKQEAgLTQxLDkgKzQxLDkgQEAKICNkZWZpbmUgUkVBTF9ETUEKIAogI2luY2x1ZGUgInNjc2kuaCIKKyNpbmNsdWRlICJpbml0aW8uaCIKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgInN1bjNfc2NzaS5oIgotI2luY2x1ZGUgIk5DUjUzODAuaCIKIAogZXh0ZXJuIGludCBzdW4zX21hcF90ZXN0KHVuc2lnbmVkIGxvbmcsIGNoYXIgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMKaW5kZXggOTQwZmExZS4uMjFjZDRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMKQEAgLTU1NDUsNyArNTU0NSw3IEBACiAJLyoKIAkgKiAgQWxsb2NhdGUgdGhlIGFycmF5IG9mIGxpc3RzIG9mIENDQnMgaGFzaGVkIGJ5IERTQS4KIAkgKi8KLQlucC0+Y2NiaCA9IGtjYWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW1fY2NiICoqKSwgQ0NCX0hBU0hfU0laRSwgR0ZQX0tFUk5FTCk7CisJbnAtPmNjYmggPSBrY2FsbG9jKENDQl9IQVNIX1NJWkUsIHNpemVvZihzdHJ1Y3Qgc3ltX2NjYiAqKiksIEdGUF9LRVJORUwpOwogCWlmICghbnAtPmNjYmgpCiAJCWdvdG8gYXR0YWNoX2ZhaWxlZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKaW5kZXggNmExYTU2OC4uZmFjYjY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYworKysgYi9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCkBAIC0yMTQsOCArMjE0LDggQEAKIH0KIAogc3RhdGljIHZvaWQKLXNlcmlhbDIxMjg1X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLAotCQkJc3RydWN0IHRlcm1pb3MgKm9sZCkKK3NlcmlhbDIxMjg1X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJCXN0cnVjdCBrdGVybWlvcyAqb2xkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGJhdWQsIHF1b3QsIGhfbGNyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKaW5kZXggOWI4YjU4NS4uY2FkNDI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCByc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCBtNjhrX3NlcmlhbCAqaW5mbyA9IChzdHJ1Y3QgbTY4a19zZXJpYWwgKil0dHktPmRyaXZlcl9kYXRhOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC82ODM2MHNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYwppbmRleCA2MzRlY2NhLi42ODgxN2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC82ODM2MHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzY4MzYwc2VyaWFsLmMKQEAgLTE1MjMsNyArMTUyMyw3IEBACiAKIC8qIEZJWCBVUCBtb2RlbSBjb250cm9sIGhlcmUgc29tZWRheS4uLi4uLgogKi8KLXN0YXRpYyB2b2lkIHJzXzM2MF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCByc18zNjBfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzZXJfaW5mb190ICppbmZvID0gKHNlcl9pbmZvX3QgKil0dHktPmRyaXZlcl9kYXRhOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggZTM0YmQwMy4uNTI2MWYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMTc2Myw4ICsxNzYzLDggQEAKIH0KIAogc3RhdGljIHZvaWQKLXNlcmlhbDgyNTBfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCSAgICAgICBzdHJ1Y3QgdGVybWlvcyAqb2xkKQorc2VyaWFsODI1MF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCSAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CiAJdW5zaWduZWQgY2hhciBjdmFsLCBmY3IgPSAwOwpAQCAtMjI5Niw3ICsyMjk2LDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsODI1MF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKK3N0YXRpYyBpbnQgX19pbml0IHNlcmlhbDgyNTBfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAlpbnQgYmF1ZCA9IDk2MDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwppbmRleCA0ZDBmZjhmLi41MmUyZTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKQEAgLTIyMzksNiArMjIzOSwzMCBAQAogCQlwYm5fYjBfYnRfMV80NjA4MDAgfSwKIAogCS8qCisJICogS29yZW5peCBKZXRjYXJkIEYwL0YxIGNhcmRzIChKQzEyMDQsIEpDMTIwOCwgSkMxNDA0LCBKQzE0MDgpLgorCSAqIENhcmRzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZWlyIHN1YnN5c3RlbSB2ZW5kb3IgSURzLCB3aGljaAorCSAqIChpbiBoZXgpIG1hdGNoIHRoZSBtb2RlbCBudW1iZXIuCisJICoKKwkgKiBOb3RlIHRoYXQgSkMxNDB4IGFyZSBSUzQyMi80ODUgY2FyZHMgd2hpY2ggcmVxdWlyZSBveDk1MAorCSAqIEFDUiA9IDB4MTAsIGFuZCBhcyBzdWNoIGFyZSBub3QgY3VycmVudGx5IGZ1bGx5IHN1cHBvcnRlZC4KKwkgKi8KKwl7CVBDSV9WRU5ET1JfSURfS09SRU5JWCwgUENJX0RFVklDRV9JRF9LT1JFTklYX0pFVENBUkRGMCwKKwkJMHgxMjA0LCAweDAwMDQsIDAsIDAsCisJCXBibl9iMF80XzkyMTYwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9LT1JFTklYLCBQQ0lfREVWSUNFX0lEX0tPUkVOSVhfSkVUQ0FSREYwLAorCQkweDEyMDgsIDB4MDAwNCwgMCwgMCwKKwkJcGJuX2IwXzRfOTIxNjAwIH0sCisvKgl7CVBDSV9WRU5ET1JfSURfS09SRU5JWCwgUENJX0RFVklDRV9JRF9LT1JFTklYX0pFVENBUkRGMCwKKwkJMHgxNDAyLCAweDAwMDIsIDAsIDAsCisJCXBibl9iMF8yXzkyMTYwMCB9LCAqLworLyoJewlQQ0lfVkVORE9SX0lEX0tPUkVOSVgsIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjAsCisJCTB4MTQwNCwgMHgwMDA0LCAwLCAwLAorCQlwYm5fYjBfNF85MjE2MDAgfSwgKi8KKwl7CVBDSV9WRU5ET1JfSURfS09SRU5JWCwgUENJX0RFVklDRV9JRF9LT1JFTklYX0pFVENBUkRGMSwKKwkJMHgxMjA4LCAweDAwMDQsIDAsIDAsCisJCXBibl9iMF80XzkyMTYwMCB9LAorCisJLyoKIAkgKiBEZWxsIFJlbW90ZSBBY2Nlc3MgQ2FyZCA0IC0gVGltX1RfTXVycGh5QERlbGwuY29tCiAJICovCiAJewlQQ0lfVkVORE9SX0lEX0RFTEwsIFBDSV9ERVZJQ0VfSURfREVMTF9SQUM0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggZmMxMmQ1ZC4uMjk3OGMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC0xNTEsMzIgKzE1MSw2IEBACiAJICBzYXkgTiBoZXJlIHRvIHNhdmUgc29tZSBtZW1vcnkuIFlvdSBjYW4gYWxzbyBzYXkgWSBpZiB5b3UgaGF2ZSBhbgogCSAgImludGVsbGlnZW50IiBtdWx0aXBvcnQgY2FyZCBzdWNoIGFzIEN5Y2xhZGVzLCBEaWdpYm9hcmRzLCBldGMuCiAKLWNvbmZpZyBTRVJJQUxfODI1MF9TSEFSRV9JUlEKLQlib29sICJTdXBwb3J0IGZvciBzaGFyaW5nIHNlcmlhbCBpbnRlcnJ1cHRzIgotCWRlcGVuZHMgb24gU0VSSUFMXzgyNTBfRVhURU5ERUQKLQloZWxwCi0JICBTb21lIHNlcmlhbCBib2FyZHMgaGF2ZSBoYXJkd2FyZSBzdXBwb3J0IHdoaWNoIGFsbG93cyBtdWx0aXBsZSBkdW1iCi0JICBzZXJpYWwgcG9ydHMgb24gdGhlIHNhbWUgYm9hcmQgdG8gc2hhcmUgYSBzaW5nbGUgSVJRLiBUbyBlbmFibGUKLQkgIHN1cHBvcnQgZm9yIHRoaXMgaW4gdGhlIHNlcmlhbCBkcml2ZXIsIHNheSBZIGhlcmUuCi0KLWNvbmZpZyBTRVJJQUxfODI1MF9ERVRFQ1RfSVJRCi0JYm9vbCAiQXV0b2RldGVjdCBJUlEgb24gc3RhbmRhcmQgcG9ydHMgKHVuc2FmZSkiCi0JZGVwZW5kcyBvbiBTRVJJQUxfODI1MF9FWFRFTkRFRAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIGtlcm5lbCB0byB0cnkgdG8gZ3Vlc3Mgd2hpY2ggSVJRCi0JICB0byB1c2UgZm9yIHlvdXIgc2VyaWFsIHBvcnQuCi0KLQkgIFRoaXMgaXMgY29uc2lkZXJlZCB1bnNhZmU7IGl0IGlzIGZhciBiZXR0ZXIgdG8gY29uZmlndXJlIHRoZSBJUlEgaW4KLQkgIGEgYm9vdCBzY3JpcHQgdXNpbmcgdGhlIHNldHNlcmlhbCBjb21tYW5kLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgU0VSSUFMXzgyNTBfUlNBCi0JYm9vbCAiU3VwcG9ydCBSU0Egc2VyaWFsIHBvcnRzIgotCWRlcGVuZHMgb24gU0VSSUFMXzgyNTBfRVhURU5ERUQKLQloZWxwCi0JICA6OjogVG8gYmUgd3JpdHRlbiA6OjoKLQogIwogIyBNdWx0aS1wb3J0IHNlcmlhbCBjYXJkcwogIwpAQCAtMTk5LDcgKzE3Myw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCA4MjUwX2FjY2VudC4KIAotCiBjb25maWcgU0VSSUFMXzgyNTBfQk9DQQogCXRyaXN0YXRlICJTdXBwb3J0IEJvY2EgY2FyZHMiCiAJZGVwZW5kcyBvbiBTRVJJQUxfODI1MCAhPSBuICYmIElTQSAmJiBTRVJJQUxfODI1MF9NQU5ZX1BPUlRTCkBAIC0yMzAsNiArMjAzLDMyIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCA4MjUwX2h1YjYuCiAKK2NvbmZpZyBTRVJJQUxfODI1MF9TSEFSRV9JUlEKKwlib29sICJTdXBwb3J0IGZvciBzaGFyaW5nIHNlcmlhbCBpbnRlcnJ1cHRzIgorCWRlcGVuZHMgb24gU0VSSUFMXzgyNTBfRVhURU5ERUQKKwloZWxwCisJICBTb21lIHNlcmlhbCBib2FyZHMgaGF2ZSBoYXJkd2FyZSBzdXBwb3J0IHdoaWNoIGFsbG93cyBtdWx0aXBsZSBkdW1iCisJICBzZXJpYWwgcG9ydHMgb24gdGhlIHNhbWUgYm9hcmQgdG8gc2hhcmUgYSBzaW5nbGUgSVJRLiBUbyBlbmFibGUKKwkgIHN1cHBvcnQgZm9yIHRoaXMgaW4gdGhlIHNlcmlhbCBkcml2ZXIsIHNheSBZIGhlcmUuCisKK2NvbmZpZyBTRVJJQUxfODI1MF9ERVRFQ1RfSVJRCisJYm9vbCAiQXV0b2RldGVjdCBJUlEgb24gc3RhbmRhcmQgcG9ydHMgKHVuc2FmZSkiCisJZGVwZW5kcyBvbiBTRVJJQUxfODI1MF9FWFRFTkRFRAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIGtlcm5lbCB0byB0cnkgdG8gZ3Vlc3Mgd2hpY2ggSVJRCisJICB0byB1c2UgZm9yIHlvdXIgc2VyaWFsIHBvcnQuCisKKwkgIFRoaXMgaXMgY29uc2lkZXJlZCB1bnNhZmU7IGl0IGlzIGZhciBiZXR0ZXIgdG8gY29uZmlndXJlIHRoZSBJUlEgaW4KKwkgIGEgYm9vdCBzY3JpcHQgdXNpbmcgdGhlIHNldHNlcmlhbCBjb21tYW5kLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgU0VSSUFMXzgyNTBfUlNBCisJYm9vbCAiU3VwcG9ydCBSU0Egc2VyaWFsIHBvcnRzIgorCWRlcGVuZHMgb24gU0VSSUFMXzgyNTBfRVhURU5ERUQKKwloZWxwCisJICA6OjogVG8gYmUgd3JpdHRlbiA6OjoKKwogY29uZmlnIFNFUklBTF84MjUwX01DQQogCXRyaXN0YXRlICJTdXBwb3J0IDgyNTAtdHlwZSBwb3J0cyBvbiBNQ0EgYnVzZXMiCiAJZGVwZW5kcyBvbiBTRVJJQUxfODI1MCAhPSBuICYmIE1DQQpAQCAtNjY0LDcgKzY2Myw3IEBACiAKIGNvbmZpZyBWODUwRV9VQVJUQgogICAgICAgICBib29sCi0JZGVwZW5kcyBWODUwRV9VQVJUICYmIFY4NTBFX01FMgorCWRlcGVuZHMgb24gVjg1MEVfVUFSVCAmJiBWODUwRV9NRTIKIAlkZWZhdWx0IHkKIAogY29uZmlnIFY4NTBFX1VBUlRfQ09OU09MRQpAQCAtOTEwLDcgKzkwOSw3IEBACiAKIGNvbmZpZyBTRVJJQUxfVFhYOQogCWJvb2wgIlRNUFRYMzlYWC80OVhYIFNJTyBzdXBwb3J0IgotCWRlcGVuZHMgSEFTX1RYWDlfU0VSSUFMCisJZGVwZW5kcyBvbiBIQVNfVFhYOV9TRVJJQUwKIAlzZWxlY3QgU0VSSUFMX0NPUkUKIAlkZWZhdWx0IHkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCmluZGV4IDRkMzYyNmUuLmY2OWJkMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKQEAgLTM0NSw4ICszNDUsOCBAQAogfQogCiBzdGF0aWMgdm9pZAotcGwwMTBfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCSAgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3BsMDEwX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAl1bnNpZ25lZCBpbnQgbGNyX2gsIG9sZF9jcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTg5LDYgKzU4OSw4IEBACiAJICovCiAJaWYgKGNvLT5pbmRleCA+PSBVQVJUX05SKQogCQljby0+aW5kZXggPSAwOworCWlmICghYW1iYV9wb3J0c1tjby0+aW5kZXhdKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlwb3J0ID0gJmFtYmFfcG9ydHNbY28tPmluZGV4XS0+cG9ydDsKIAogCWlmIChvcHRpb25zKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IGQ1MDM2MjUuLjQ0NjM5ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTQxMiw4ICs0MTIsOCBAQAogfQogCiBzdGF0aWMgdm9pZAotcGwwMTFfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCSAgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3BsMDExX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAl1bnNpZ25lZCBpbnQgbGNyX2gsIG9sZF9jcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjYxLDYgKzY2MSw4IEBACiAJaWYgKGNvLT5pbmRleCA+PSBVQVJUX05SKQogCQljby0+aW5kZXggPSAwOwogCXVhcCA9IGFtYmFfcG9ydHNbY28tPmluZGV4XTsKKwlpZiAoIXVhcCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAl1YXAtPnBvcnQudWFydGNsayA9IGNsa19nZXRfcmF0ZSh1YXAtPmNsayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggOTIxN2VlNi4uODgxZjg4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTQ3OCw3ICs0NzgsNyBAQAogLyoKICAqIENoYW5nZSB0aGUgcG9ydCBwYXJhbWV0ZXJzCiAgKi8KLXN0YXRpYyB2b2lkIGF0bWVsX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICogdGVybWlvcywgc3RydWN0IHRlcm1pb3MgKiBvbGQpCitzdGF0aWMgdm9pZCBhdG1lbF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKiB0ZXJtaW9zLCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgbW9kZSwgaW1yLCBxdW90LCBiYXVkOwpAQCAtNjg5LDkgKzY4OSw5IEBACiAJc3RydWN0IGF0bWVsX3VhcnRfZGF0YSAqZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJcG9ydC0+aW90eXBlCT0gVVBJT19NRU07Ci0JcG9ydC0+ZmxhZ3MgICAgID0gVVBGX0JPT1RfQVVUT0NPTkY7CisJcG9ydC0+ZmxhZ3MJPSBVUEZfQk9PVF9BVVRPQ09ORjsKIAlwb3J0LT5vcHMJPSAmYXRtZWxfcG9wczsKLQlwb3J0LT5maWZvc2l6ZSAgPSAxOworCXBvcnQtPmZpZm9zaXplCT0gMTsKIAlwb3J0LT5saW5lCT0gcGRldi0+aWQ7CiAJcG9ydC0+ZGV2CT0gJnBkZXYtPmRldjsKIApAQCAtODkwLDcgKzg5MCw2IEBACiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpICYmICFhdDkxX3N1c3BlbmRfZW50ZXJpbmdfc2xvd19jbG9jaygpKQogCQllbmFibGVfaXJxX3dha2UocG9ydC0+aXJxKTsKIAllbHNlIHsKLQkJZGlzYWJsZV9pcnFfd2FrZShwb3J0LT5pcnEpOwogCQl1YXJ0X3N1c3BlbmRfcG9ydCgmYXRtZWxfdWFydCwgcG9ydCk7CiAJCWF0bWVsX3BvcnQtPnN1c3BlbmRlZCA9IDE7CiAJfQpAQCAtOTA3LDYgKzkwNiw4IEBACiAJCXVhcnRfcmVzdW1lX3BvcnQoJmF0bWVsX3VhcnQsIHBvcnQpOwogCQlhdG1lbF9wb3J0LT5zdXNwZW5kZWQgPSAwOwogCX0KKwllbHNlCisJCWRpc2FibGVfaXJxX3dha2UocG9ydC0+aXJxKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmggYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuaAppbmRleCBmZTE3NjNiLi4xMWI0NDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuaApAQCAtMTA2LDcgKzEwNiw3IEBACiAjZGVmaW5lIEFUTUVMX1VTX0NTUgkJMHgxNAkJCS8qIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lIEFUTUVMX1VTX1JIUgkJMHgxOAkJCS8qIFJlY2VpdmVyIEhvbGRpbmcgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQVRNRUxfVVNfVEhSCQkweDFjCQkJLyogVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAqLwotI2RlZmluZSAJQVRNRUxfVVNfU1lOSAkJKDEgPDwgMTUpCQkvKiBUcmFuc21pdC9SZWNlaXZlIFN5bmMgW1NBTTkgb25seV0gKi8KKyNkZWZpbmUJCUFUTUVMX1VTX1NZTkgJCSgxIDw8IDE1KQkJLyogVHJhbnNtaXQvUmVjZWl2ZSBTeW5jIFtBVDkxU0FNOTI2MSBvbmx5XSAqLwogCiAjZGVmaW5lIEFUTUVMX1VTX0JSR1IJCTB4MjAJCQkvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVE1FTF9VU19DRAkJKDB4ZmZmZiA8PCAwKQkJLyogQ2xvY2sgRGl2aWRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKaW5kZXggNTk4MDEyNy4uMjM4MjcxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCkBAIC0yODYsOCArMjg2LDggQEAKIH0KIAogc3RhdGljIHZvaWQKLWNscHM3MTF4dWFydF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJCSBzdHJ1Y3QgdGVybWlvcyAqb2xkKQorY2xwczcxMXh1YXJ0X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAl1bnNpZ25lZCBpbnQgdWJybGNyLCBiYXVkLCBxdW90OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKaW5kZXggN2EyNGU1My4uNDJiMDUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYwpAQCAtODA0LDggKzgwNCw4IEBACiAKICNkZWZpbmUgTlJfUE9SVFMgKHNpemVvZihyc190YWJsZSkvc2l6ZW9mKHN0cnVjdCBlMTAwX3NlcmlhbCkpCiAKLXN0YXRpYyBzdHJ1Y3QgdGVybWlvcyAqc2VyaWFsX3Rlcm1pb3NbTlJfUE9SVFNdOwotc3RhdGljIHN0cnVjdCB0ZXJtaW9zICpzZXJpYWxfdGVybWlvc19sb2NrZWRbTlJfUE9SVFNdOworc3RhdGljIHN0cnVjdCBrdGVybWlvcyAqc2VyaWFsX3Rlcm1pb3NbTlJfUE9SVFNdOworc3RhdGljIHN0cnVjdCBrdGVybWlvcyAqc2VyaWFsX3Rlcm1pb3NfbG9ja2VkW05SX1BPUlRTXTsKICNpZmRlZiBDT05GSUdfRVRSQVhfU0VSSUFMX0ZBU1RfVElNRVIKIHN0YXRpYyBzdHJ1Y3QgZmFzdF90aW1lciBmYXN0X3RpbWVyc1tOUl9QT1JUU107CiAjZW5kaWYKQEAgLTQyMjMsNyArNDIyMyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1yc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCityc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbyA9IChzdHJ1Y3QgZTEwMF9zZXJpYWwgKil0dHktPmRyaXZlcl9kYXRhOwogCkBAIC00ODc3LDYgKzQ4NzcsOCBAQAogCWRyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwogCWRyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPQogCQlCMTE1MjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsgLyogaXMgbm9ybWFsbHkgQjk2MDAgZGVmYXVsdC4uLiAqLworCWRyaXZlci0+aW5pdF90ZXJtaW9zLmNfaXNwZWVkID0gMTE1MjAwOworCWRyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gMTE1MjAwOwogCWRyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKIAlkcml2ZXItPnRlcm1pb3MgPSBzZXJpYWxfdGVybWlvczsKIAlkcml2ZXItPnRlcm1pb3NfbG9ja2VkID0gc2VyaWFsX3Rlcm1pb3NfbG9ja2VkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5oIGIvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5oCmluZGV4IGYzMGI5M2QuLjRhMjMzNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmgKQEAgLTkzLDggKzkzLDggQEAKIAogCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogCXN0cnVjdCBhc3luY19pY291bnQJaWNvdW50OyAgIC8qIGVycm9yLXN0YXRpc3RpY3MgZXRjLiovCi0Jc3RydWN0IHRlcm1pb3MJCW5vcm1hbF90ZXJtaW9zOwotCXN0cnVjdCB0ZXJtaW9zCQljYWxsb3V0X3Rlcm1pb3M7CisJc3RydWN0IGt0ZXJtaW9zCQlub3JtYWxfdGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3MJCWNhbGxvdXRfdGVybWlvczsKICNpZmRlZiBERUNMQVJFX1dBSVRRVUVVRQogCXdhaXRfcXVldWVfaGVhZF90CW9wZW5fd2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdAljbG9zZV93YWl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvZHouYyBiL2RyaXZlcnMvc2VyaWFsL2R6LmMKaW5kZXggYWYxNTQ0Zi4uNTg3ZDg3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvZHouYworKysgYi9kcml2ZXJzL3NlcmlhbC9kei5jCkBAIC00NjEsOCArNDYxLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBkel9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCQkgICBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBkel9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQkJICAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgZHpfcG9ydCAqZHBvcnQgPSAoc3RydWN0IGR6X3BvcnQgKil1cG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaWNvbS5jIGIvZHJpdmVycy9zZXJpYWwvaWNvbS5jCmluZGV4IDhhYTBmNjQxLi43MWU2YTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaWNvbS5jCkBAIC0xMDg3LDggKzEwODcsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBpY29tX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCi0JCQkgICAgIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLAotCQkJICAgICBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCisJCQkgICAgIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJCSAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlpbnQgYmF1ZDsKIAl1bnNpZ25lZCBjZmxhZywgaWZsYWc7CkBAIC0xNTEwLDcgKzE1MTAsNyBAQAogCX0KIAogCWlmICggKHJldHZhbCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAiaWNvbSIpKSkgewotCQkgZGV2X2VycigmZGV2LT5kZXYsICJwY2lfcmVxdWVzdF9yZWdpb24gRkFJTEVEXG4iKTsKKwkJIGRldl9lcnIoJmRldi0+ZGV2LCAicGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRURcbiIpOwogCQkgcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAJCSByZXR1cm4gcmV0dmFsOwogCSB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCmluZGV4IGVlNWM3ODIuLmUyMTZkY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lteC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCkBAIC00NTksOCArNDU5LDggQEAKIH0KIAogc3RhdGljIHZvaWQKLWlteF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK2lteF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCSAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewogCXN0cnVjdCBpbXhfcG9ydCAqc3BvcnQgPSAoc3RydWN0IGlteF9wb3J0ICopcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2lvYzNfc2VyaWFsLmMKaW5kZXggMjMwOGQyNi4uOWNjMGJlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jCkBAIC05NTAsNyArOTUwLDcgQEAKICAqLwogc3RhdGljIHZvaWQKIGlvYzNfY2hhbmdlX3NwZWVkKHN0cnVjdCB1YXJ0X3BvcnQgKnRoZV9wb3J0LAotCQkgIHN0cnVjdCB0ZXJtaW9zICpuZXdfdGVybWlvcywgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorCQkgIHN0cnVjdCBrdGVybWlvcyAqbmV3X3Rlcm1pb3MsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IGlvYzNfcG9ydCAqcG9ydCA9IGdldF9pb2MzX3BvcnQodGhlX3BvcnQpOwogCXVuc2lnbmVkIGludCBjZmxhZzsKQEAgLTE4NTMsNyArMTg1Myw3IEBACiAgKi8KIHN0YXRpYyB2b2lkCiBpYzNfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqdGhlX3BvcnQsCi0JCXN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCisJCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnRfZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCmluZGV4IDcxMWJkMTUuLmM4NjJmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYwpAQCAtMTY4MSw3ICsxNjgxLDcgQEAKICAqLwogc3RhdGljIHZvaWQKIGlvYzRfY2hhbmdlX3NwZWVkKHN0cnVjdCB1YXJ0X3BvcnQgKnRoZV9wb3J0LAotCQkgIHN0cnVjdCB0ZXJtaW9zICpuZXdfdGVybWlvcywgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorCQkgIHN0cnVjdCBrdGVybWlvcyAqbmV3X3Rlcm1pb3MsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IGlvYzRfcG9ydCAqcG9ydCA9IGdldF9pb2M0X3BvcnQodGhlX3BvcnQsIDApOwogCWludCBiYXVkLCBiaXRzOwpAQCAtMTgwMiw3ICsxODAyLDcgQEAKIAlpb2M0X3NldF9wcm90byhwb3J0LCB0aGVfcG9ydC0+bWFwYmFzZSk7CiAKIAkvKiBzZXQgdGhlIHNwZWVkIG9mIHRoZSBzZXJpYWwgcG9ydCAqLwotCWlvYzRfY2hhbmdlX3NwZWVkKHRoZV9wb3J0LCBpbmZvLT50dHktPnRlcm1pb3MsIChzdHJ1Y3QgdGVybWlvcyAqKTApOworCWlvYzRfY2hhbmdlX3NwZWVkKHRoZV9wb3J0LCBpbmZvLT50dHktPnRlcm1pb3MsIChzdHJ1Y3Qga3Rlcm1pb3MgKikwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjU3MCw3ICsyNTcwLDcgQEAKICAqLwogc3RhdGljIHZvaWQKIGljNF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICp0aGVfcG9ydCwKLQkJc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKKwkJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydF9mbGFnczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9pcDIyemlsb2cuYwppbmRleCBkY2E2YzFiLi4wNzQ2Yzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pcDIyemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9pcDIyemlsb2cuYwpAQCAtODQwLDggKzg0MCw4IEBACiAKIC8qIFRoZSBwb3J0IGxvY2sgaXMgbm90IGhlbGQuICAqLwogc3RhdGljIHZvaWQKLWlwMjJ6aWxvZ19zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJICAgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK2lwMjJ6aWxvZ19zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCSAgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewogCXN0cnVjdCB1YXJ0X2lwMjJ6aWxvZ19wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF9pcDIyemlsb2dfcG9ydCAqKSBwb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYwppbmRleCBmODI2MmU2Li43Y2YxYzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAlzdHJ1Y3QganNtX2NoYW5uZWwgKmNoYW5uZWwgPSAoc3RydWN0IGpzbV9jaGFubmVsICopcG9ydDsKLQlzdHJ1Y3QgdGVybWlvcyAqdGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgbG9ja19mbGFncyk7CiAJdGVybWlvcyA9IHBvcnQtPmluZm8tPnR0eS0+dGVybWlvczsKQEAgLTE4MCw3ICsxODAsNyBAQAogCXN0cnVjdCBqc21fYm9hcmQgKmJyZDsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBqc21fY2hhbm5lbCAqY2hhbm5lbCA9IChzdHJ1Y3QganNtX2NoYW5uZWwgKilwb3J0OwotCXN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zOworCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvczsKIAogCS8qIEdldCBib2FyZCBwb2ludGVyIGZyb20gb3VyIGFycmF5IG9mIG1ham9ycyB3ZSBoYXZlIGFsbG9jYXRlZCAqLwogCWJyZCA9IGNoYW5uZWwtPmNoX2JkOwpAQCAtMjY5LDcgKzI2OSw3IEBACiBzdGF0aWMgdm9pZCBqc21fdHR5X2Nsb3NlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGpzbV9ib2FyZCAqYmQ7Ci0Jc3RydWN0IHRlcm1pb3MgKnRzOworCXN0cnVjdCBrdGVybWlvcyAqdHM7CiAJc3RydWN0IGpzbV9jaGFubmVsICpjaGFubmVsID0gKHN0cnVjdCBqc21fY2hhbm5lbCAqKXBvcnQ7CiAKIAlqc21fcHJpbnRrKENMT1NFLCBJTkZPLCAmY2hhbm5lbC0+Y2hfYmQtPnBjaV9kZXYsICJzdGFydFxuIik7CkBAIC0zMDIsOCArMzAyLDggQEAKIH0KIAogc3RhdGljIHZvaWQganNtX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAotCQkJCSBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJCQkgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkJIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCXN0cnVjdCBqc21fY2hhbm5lbCAqY2hhbm5lbCA9IChzdHJ1Y3QganNtX2NoYW5uZWwgKilwb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYyBiL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKaW5kZXggNzY1NmEzNS4uNmUwOWM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYworKysgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCkBAIC02OTksNyArNjk5LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgbTMycl9zaW9fc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKLQlzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywgc3RydWN0IHRlcm1pb3MgKm9sZCkKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewogCXN0cnVjdCB1YXJ0X3Npb19wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqKXBvcnQ7CiAJdW5zaWduZWQgY2hhciBjdmFsID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21jZnNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMKaW5kZXggM2RiMjA2ZC4uMDg0MzA5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMKQEAgLTExMzIsNyArMTEzMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1jZnJzX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIG1jZnJzX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IG1jZl9zZXJpYWwgKmluZm8gPSAoc3RydWN0IG1jZl9zZXJpYWwgKil0dHktPmRyaXZlcl9kYXRhOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IDZkZDU3OWUuLjNjNGI2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC0yNzAsOCArMjcwLDggQEAKIH0KIAogc3RhdGljIHZvaWQKLW1wYzUyeHhfdWFydF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqbmV3LAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0ZXJtaW9zICpvbGQpCittcGM1Mnh4X3VhcnRfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpuZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJc3RydWN0IG1wYzUyeHhfcHNjIF9faW9tZW0gKnBzYyA9IFBTQyhwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzg5LDcgKzc4OSw5IEBACiBzdGF0aWMgaW50IF9faW5pdAogbXBjNTJ4eF9jb25zb2xlX2luaXQodm9pZCkKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAJbXBjNTJ4eF91YXJ0X29mX2VudW1lcmF0ZSgpOworI2VuZGlmCiAJcmVnaXN0ZXJfY29uc29sZSgmbXBjNTJ4eF9jb25zb2xlKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYyBiL2RyaXZlcnMvc2VyaWFsL21wc2MuYwppbmRleCAyOTgyM2JkLi4zZDJmY2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCkBAIC0xNDQwLDggKzE0NDAsOCBAQAogfQogCiBzdGF0aWMgdm9pZAotbXBzY19zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJIHN0cnVjdCB0ZXJtaW9zICpvbGQpCittcHNjX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewogCXN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkgPSAoc3RydWN0IG1wc2NfcG9ydF9pbmZvICopcG9ydDsKIAl1MzIgYmF1ZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL211eC5jIGIvZHJpdmVycy9zZXJpYWwvbXV4LmMKaW5kZXggZWE5Y2JkYS4uODMyMTEwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXV4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXV4LmMKQEAgLTMwNyw4ICszMDcsOCBAQAogICogVGhlIFNlcmlhbCBNdXggZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uLgogICovCiBzdGF0aWMgdm9pZAotbXV4X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLAotCSAgICAgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK211eF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJICAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbmV0eC1zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL25ldHgtc2VyaWFsLmMKaW5kZXggMDYyYmFkNC4uYjU2ZjdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbmV0eC1zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9uZXR4LXNlcmlhbC5jCkBAIC0zMzcsOCArMzM3LDggQEAKIH0KIAogc3RhdGljIHZvaWQKLW5ldHhfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCSAgIHN0cnVjdCB0ZXJtaW9zICpvbGQpCituZXR4X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJdW5zaWduZWQgaW50IGJhdWQsIHF1b3Q7CiAJdW5zaWduZWQgY2hhciBvbGRfY3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKaW5kZXggYmY5ODA5ZS4uNzUyZWYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYwpAQCAtMTI2Miw4ICsxMjYyLDggQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBfX3Btel9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJCSAgICAgIHN0cnVjdCB0ZXJtaW9zICpvbGQpCitzdGF0aWMgdm9pZCBfX3Btel9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAlzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVhcCA9IHRvX3Bteihwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGJhdWQ7CkBAIC0xMjczLDcgKzEyNzMsNyBAQAogCWlmIChaU19JU19BU0xFRVAodWFwKSkKIAkJcmV0dXJuOwogCi0JbWVtY3B5KCZ1YXAtPnRlcm1pb3NfY2FjaGUsIHRlcm1pb3MsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpOworCW1lbWNweSgmdWFwLT50ZXJtaW9zX2NhY2hlLCB0ZXJtaW9zLCBzaXplb2Yoc3RydWN0IGt0ZXJtaW9zKSk7CiAKIAkvKiBYWFggQ2hlY2sgd2hpY2ggcmV2cyBvZiBtYWNoaW5lcyBhY3R1YWxseSBhbGxvdyAxIGFuZCA0TWIgc3BlZWRzCiAJICogb24gdGhlIElSIGRvbmdsZS4gTm90ZSB0aGF0IHRoZSBJUlRUWSBkcml2ZXIgY3VycmVudGx5IGRvZXNuJ3Qga25vdwpAQCAtMTMxMyw4ICsxMzEzLDggQEAKIH0KIAogLyogVGhlIHBvcnQgbG9jayBpcyBub3QgaGVsZC4gICovCi1zdGF0aWMgdm9pZCBwbXpfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCQkgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3N0YXRpYyB2b2lkIHBtel9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJc3RydWN0IHVhcnRfcG1hY19wb3J0ICp1YXAgPSB0b19wbXoocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuaCBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuaAppbmRleCBjMDNmOWJmLi41NzBiMGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5oCkBAIC02MCw3ICs2MCw3IEBACiAJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MJX19pb21lbSAqdHhfZG1hX3JlZ3M7CiAJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MJX19pb21lbSAqcnhfZG1hX3JlZ3M7CiAKLQlzdHJ1Y3QgdGVybWlvcwkJCXRlcm1pb3NfY2FjaGU7CisJc3RydWN0IGt0ZXJtaW9zCQkJdGVybWlvc19jYWNoZTsKIH07CiAKICNkZWZpbmUgdG9fcG16KHApICgoc3RydWN0IHVhcnRfcG1hY19wb3J0ICopKHApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCA0MTVmZTk2Li5kNDAzYWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtNDMzLDggKzQzMyw4IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1zZXJpYWxfcHhhX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLAotCQkgICAgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3NlcmlhbF9weGFfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQkgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJc3RydWN0IHVhcnRfcHhhX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICopcG9ydDsKIAl1bnNpZ25lZCBjaGFyIGN2YWwsIGZjciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKaW5kZXggOGRmYzJkZC4uM2JhOTIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwpAQCAtNzM4LDggKzczOCw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHMzYzI0eHhfc2VyaWFsX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCi0JCQkJICAgICAgIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLAotCQkJCSAgICAgICBzdHJ1Y3QgdGVybWlvcyAqb2xkKQorCQkJCSAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkJICAgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewogCXN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZyA9IHMzYzI0eHhfcG9ydF90b19jZmcocG9ydCk7CiAJc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpvdXJwb3J0ID0gdG9fb3VycG9ydChwb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jIGIvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKaW5kZXggZDQwNjUyNi4uNThhODNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKQEAgLTQwOCw4ICs0MDgsOCBAQAogfQogCiBzdGF0aWMgdm9pZAotc2ExMTAwX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLAotCQkgICBzdHJ1Y3QgdGVybWlvcyAqb2xkKQorc2ExMTAwX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJc3RydWN0IHNhMTEwMF9wb3J0ICpzcG9ydCA9IChzdHJ1Y3Qgc2ExMTAwX3BvcnQgKilwb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwppbmRleCBjNjdiMDVlLi5mODQ5ODJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKQEAgLTY1LDcgKzY1LDcgQEAKICNkZWZpbmUgdWFydF9jb25zb2xlKHBvcnQpCSgwKQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHVhcnRfY2hhbmdlX3NwZWVkKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyB2b2lkIHVhcnRfY2hhbmdlX3NwZWVkKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7CiBzdGF0aWMgdm9pZCB1YXJ0X3dhaXRfdW50aWxfc2VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCk7CiBzdGF0aWMgdm9pZCB1YXJ0X2NoYW5nZV9wbShzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUsIGludCBwbV9zdGF0ZSk7CiAKQEAgLTMzOCw4ICszMzgsOCBAQAogICoJd2UncmUgYWN0dWFsbHkgZ29pbmcgdG8gYmUgdXNpbmcuCiAgKi8KIHVuc2lnbmVkIGludAotdWFydF9nZXRfYmF1ZF9yYXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLAotCQkgICBzdHJ1Y3QgdGVybWlvcyAqb2xkLCB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KQordWFydF9nZXRfYmF1ZF9yYXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJICAgc3RydWN0IGt0ZXJtaW9zICpvbGQsIHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpCiB7CiAJdW5zaWduZWQgaW50IHRyeSwgYmF1ZCwgYWx0YmF1ZCA9IDM4NDAwOwogCXVwZl90IGZsYWdzID0gcG9ydC0+ZmxhZ3MgJiBVUEZfU1BEX01BU0s7CkBAIC00MjEsMTEgKzQyMSwxMSBAQAogRVhQT1JUX1NZTUJPTCh1YXJ0X2dldF9kaXZpc29yKTsKIAogc3RhdGljIHZvaWQKLXVhcnRfY2hhbmdlX3NwZWVkKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQordWFydF9jaGFuZ2Vfc3BlZWQoc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzdGF0ZS0+aW5mby0+dHR5OwogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+cG9ydDsKLQlzdHJ1Y3QgdGVybWlvcyAqdGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3M7CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgbm8gdHR5LCB0ZXJtaW9zLCBvciB0aGUgcG9ydCBkb2VzIG5vdCBleGlzdCwKQEAgLTExMzksNyArMTEzOSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgdWFydF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCB1YXJ0X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTg2Niw3ICsxODY2LDcgQEAKIHVhcnRfc2V0X29wdGlvbnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGNvbnNvbGUgKmNvLAogCQkgaW50IGJhdWQsIGludCBwYXJpdHksIGludCBiaXRzLCBpbnQgZmxvdykKIHsKLQlzdHJ1Y3QgdGVybWlvcyB0ZXJtaW9zOworCXN0cnVjdCBrdGVybWlvcyB0ZXJtaW9zOwogCWludCBpOwogCiAJLyoKQEAgLTE4NzYsNyArMTg3Niw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwogCWxvY2tkZXBfc2V0X2NsYXNzKCZwb3J0LT5sb2NrLCAmcG9ydF9sb2NrX2tleSk7CiAKLQltZW1zZXQoJnRlcm1pb3MsIDAsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpOworCW1lbXNldCgmdGVybWlvcywgMCwgc2l6ZW9mKHN0cnVjdCBrdGVybWlvcykpOwogCiAJdGVybWlvcy5jX2NmbGFnID0gQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKIApAQCAtMTk5MSwxMiArMTk5MSwxMiBAQAogCSAqIFJlLWVuYWJsZSB0aGUgY29uc29sZSBkZXZpY2UgYWZ0ZXIgc3VzcGVuZGluZy4KIAkgKi8KIAlpZiAodWFydF9jb25zb2xlKHBvcnQpKSB7Ci0JCXN0cnVjdCB0ZXJtaW9zIHRlcm1pb3M7CisJCXN0cnVjdCBrdGVybWlvcyB0ZXJtaW9zOwogCiAJCS8qCiAJCSAqIEZpcnN0IHRyeSB0byB1c2UgdGhlIGNvbnNvbGUgY2ZsYWcgc2V0dGluZy4KIAkJICovCi0JCW1lbXNldCgmdGVybWlvcywgMCwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSk7CisJCW1lbXNldCgmdGVybWlvcywgMCwgc2l6ZW9mKHN0cnVjdCBrdGVybWlvcykpOwogCQl0ZXJtaW9zLmNfY2ZsYWcgPSBwb3J0LT5jb25zLT5jZmxhZzsKIAogCQkvKgpAQCAtMjE4OSw2ICsyMTg5LDcgQEAKIAlub3JtYWwtPnN1YnR5cGUJCT0gU0VSSUFMX1RZUEVfTk9STUFMOwogCW5vcm1hbC0+aW5pdF90ZXJtaW9zCT0gdHR5X3N0ZF90ZXJtaW9zOwogCW5vcm1hbC0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMCB8IENTOCB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CisJbm9ybWFsLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSBub3JtYWwtPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAJbm9ybWFsLT5mbGFncwkJPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVjsKIAlub3JtYWwtPmRyaXZlcl9zdGF0ZSAgICA9IGRydjsKIAl0dHlfc2V0X29wZXJhdGlvbnMobm9ybWFsLCAmdWFydF9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKaW5kZXggNWUxYWMzNS4uZWIxOGQ0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCkBAIC0zNDgsOCArMzQ4LDggQEAKIH0KIAogc3RhdGljIHZvaWQgbGg3YTQweHVhcnRfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1YXJ0X3BvcnQqIHBvcnQsCi0JCQkJICAgICBzdHJ1Y3QgdGVybWlvcyogdGVybWlvcywKLQkJCQkgICAgIHN0cnVjdCB0ZXJtaW9zKiBvbGQpCisJCQkJICAgICBzdHJ1Y3Qga3Rlcm1pb3MqIHRlcm1pb3MsCisJCQkJICAgICBzdHJ1Y3Qga3Rlcm1pb3MqIG9sZCkKIHsKIAl1bnNpZ25lZCBpbnQgY29uOwogCXVuc2lnbmVkIGludCBpbnRlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCmluZGV4IDJhNDgyODkuLjcxODZhODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwpAQCAtNTU2LDggKzU1Niw4IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1zZXJpYWxfdHh4OV9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJICAgICAgIHN0cnVjdCB0ZXJtaW9zICpvbGQpCitzZXJpYWxfdHh4OV9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCSAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CiAJdW5zaWduZWQgaW50IGN2YWwsIGZjciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDNiNWYxOWUuLmM1M2I2OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0zMTksNiArMzE5LDI4IEBACiAKIAlzY2lfb3V0KHBvcnQsIFNDRkNSLCBmY3JfdmFsKTsKIH0KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKK3N0YXRpYyB2b2lkIHNjaV9pbml0X3BpbnNfc2NpZihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCit7CisJdW5zaWduZWQgaW50IGZjcl92YWwgPSAwOworCisJaWYgKGNmbGFnICYgQ1JUU0NUUykgeworCQlmY3JfdmFsIHw9IFNDRkNSX01DRTsKKworCQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BTQ1IpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIHNob3J0IGRhdGE7CisKKwkJZGF0YSA9IGN0cmxfaW53KFBPUlRfUFNDUik7CisJCWRhdGEgJj0gMHgwMzNmOworCQlkYXRhIHw9IDB4MDQwMDsKKwkJY3RybF9vdXR3KGRhdGEsIFBPUlRfUFNDUik7CisKKwkJY3RybF9vdXR3KGN0cmxfaW53KFNDU1BUUjApICYgMHgxNywgU0NTUFRSMCk7CisJfQorCisJc2NpX291dChwb3J0LCBTQ0ZDUiwgZmNyX3ZhbCk7Cit9CiAjZWxzZQogLyogRm9yIFNINzc1MCAqLwogc3RhdGljIHZvaWQgc2NpX2luaXRfcGluc19zY2lmKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjZmxhZykKQEAgLTk0Myw4ICs5NjUsOCBAQAogCQlzLT5kaXNhYmxlKHBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCBzY2lfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCQkgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3N0YXRpYyB2b2lkIHNjaV9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJc3RydWN0IHNjaV9wb3J0ICpzID0gJnNjaV9wb3J0c1twb3J0LT5saW5lXTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzLCBiYXVkLCBzbXJfdmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCBlNDU1N2NjLi43N2Y3ZDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaApAQCAtOTAsNiArOTAsMTMgQEAKICMgZGVmaW5lIFNDU1BUUjMgMHhmZmUzMDAxMAkvKiAxNiBiaXQgU0NJRiAqLwogIyBkZWZpbmUgU0NTQ1JfSU5JVChwb3J0KSAweDMyCS8qIFRJRT0wLFJJRT0wLFRFPTEsUkU9MSxSRUlFPTAsQ0tFPTEgKi8KICMgZGVmaW5lIFNDSUZfT05MWQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQorIyBkZWZpbmUgU0NQRFIwCQkJMHhBNDA1MDEzRQkvKiAxNiBiaXQgU0NJRjAgUFNEUiAqLworIyBkZWZpbmUgU0NTUFRSMAkJU0NQRFIwCisjIGRlZmluZSBTQ0lGX09SRVIJCTB4MDAwMQkvKiBvdmVycnVuIGVycm9yIGJpdCAqLworIyBkZWZpbmUgU0NTQ1JfSU5JVChwb3J0KQkweDAwMzgJLyogVElFPTAsUklFPTAsVEU9MSxSRT0xLFJFSUU9MSAqLworIyBkZWZpbmUgU0NJRl9PTkxZCisjIGRlZmluZSBQT1JUX1BTQ1IJCTB4QTQwNTAxMUUKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIpCiAjIGRlZmluZSBTQ1NQVFIyIDB4ZmZlODAwMjAgLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDSUZfT1JFUiAweDAwMDEgICAvKiBvdmVycnVuIGVycm9yIGJpdCAqLwpAQCAtNDk1LDYgKzUwMiw3IEBACiAJCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTYyMDAwMCkKIAkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTUyMSw2ICs1MjksMTMgQEAKIAkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKK3N0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQorCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGMCAqLworCXJldHVybiAxOworfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CkBAIC01NTAsNiArNTY1LDcgQEAKIAkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmOTI1MDAwKQogCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCXJldHVybiAxOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQogc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQpAQCAtNTU4LDYgKzU3NCw3IEBACiAJCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKIAkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNikKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTU3MCw2ICs1ODcsNyBAQAogCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTk4MDApCiAJCXJldHVybiBjdHJsX2ludyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJcmV0dXJuIDE7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC01ODAsNiArNTk4LDcgQEAKIAkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGY4NDIwMDAwKQogCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCXJldHVybiAxOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYyBiL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYwppbmRleCA5NTZiMmNmLi4yNTNjZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCkBAIC0zNjEsOCArMzYxLDggQEAKICAqCiAgKi8KIHN0YXRpYyB2b2lkCi1zbnBfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCXN0cnVjdCB0ZXJtaW9zICpvbGQpCitzbnBfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3VuaHYuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMKaW5kZXggMDM5NDFkMi4uNDBkNDg1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3VuaHYuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5odi5jCkBAIC0yODEsOCArMjgxLDggQEAKIH0KIAogLyogcG9ydC0+bG9jayBpcyBub3QgaGVsZC4gICovCi1zdGF0aWMgdm9pZCBzdW5odl9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJCSAgICAgIHN0cnVjdCB0ZXJtaW9zICpvbGQpCitzdGF0aWMgdm9pZCBzdW5odl9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAl1bnNpZ25lZCBpbnQgYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIDQwMDAwMDApOwogCXVuc2lnbmVkIGludCBxdW90ID0gdWFydF9nZXRfZGl2aXNvcihwb3J0LCBiYXVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMKaW5kZXggMDhhN2NkNi4uMTQ1ZDYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMKQEAgLTc4Niw4ICs3ODYsOCBAQAogfQogCiAvKiBwb3J0LT5sb2NrIGlzIG5vdCBoZWxkLiAgKi8KLXN0YXRpYyB2b2lkIHN1bnNhYl9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJCSAgICAgICBzdHJ1Y3QgdGVybWlvcyAqb2xkKQorc3RhdGljIHZvaWQgc3Vuc2FiX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJCSAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAlzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfc3Vuc2FiX3BvcnQgKikgcG9ydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTAzNyw3ICsxMDM3LDggQEAKIAkJZXJyID0gcmVxdWVzdF9pcnEodXAtPnBvcnQuaXJxLCBzdW5zYWJfaW50ZXJydXB0LAogCQkJCSAgSVJRRl9TSEFSRUQsICJzYWIiLCB1cCk7CiAJCWlmIChlcnIpIHsKLQkJCW9mX2lvdW5tYXAodXAtPnBvcnQubWVtYmFzZSwKKwkJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwKKwkJCQkgICB1cC0+cG9ydC5tZW1iYXNlLAogCQkJCSAgIHNpemVvZih1bmlvbiBzYWI4MjUzMl9hc3luY19yZWdzKSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xMDY0LDcgKzEwNjUsOCBAQAogCQkJICAgICAgc2l6ZW9mKHVuaW9uIHNhYjgyNTMyX2FzeW5jX3JlZ3MpLAogCQkJICAgICAgKGluc3QgKiAyKSArIDEpOwogCWlmIChlcnIpIHsKLQkJb2ZfaW91bm1hcCh1cFswXS5wb3J0Lm1lbWJhc2UsCisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwKKwkJCSAgIHVwWzBdLnBvcnQubWVtYmFzZSwKIAkJCSAgIHNpemVvZih1bmlvbiBzYWI4MjUzMl9hc3luY19yZWdzKSk7CiAJCWZyZWVfaXJxKHVwWzBdLnBvcnQuaXJxLCAmdXBbMF0pOwogCQlyZXR1cm4gZXJyOwpAQCAtMTA4MiwxMCArMTA4NCwxMyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgc2FiX3JlbW92ZV9vbmUoc3RydWN0IHVhcnRfc3Vuc2FiX3BvcnQgKnVwKQogeworCXN0cnVjdCBvZl9kZXZpY2UgKm9wID0gdG9fb2ZfZGV2aWNlKHVwLT5wb3J0LmRldik7CisKIAl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc3Vuc2FiX3JlZywgJnVwLT5wb3J0KTsKIAlpZiAoISh1cC0+cG9ydC5saW5lICYgMSkpCiAJCWZyZWVfaXJxKHVwLT5wb3J0LmlycSwgdXApOwotCW9mX2lvdW5tYXAodXAtPnBvcnQubWVtYmFzZSwKKwlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sCisJCSAgIHVwLT5wb3J0Lm1lbWJhc2UsCiAJCSAgIHNpemVvZih1bmlvbiBzYWI4MjUzMl9hc3luY19yZWdzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCmluZGV4IGM1NzdmYWUuLjNlYzNkZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYwpAQCAtODkzLDggKzg5Myw4IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1zdW5zdV9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKLQkJICBzdHJ1Y3QgdGVybWlvcyAqb2xkKQorc3Vuc3Vfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQkgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewogCXVuc2lnbmVkIGludCBiYXVkLCBxdW90OwogCkBAIC0xNDgwLDEzICsxNDgwLDEzIEBACiAJcmV0dXJuIDA7CiAKIG91dF91bm1hcDoKLQlvZl9pb3VubWFwKHVwLT5wb3J0Lm1lbWJhc2UsIHVwLT5yZWdfc2l6ZSk7CisJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLCB1cC0+cG9ydC5tZW1iYXNlLCB1cC0+cmVnX3NpemUpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHN1X3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzdV9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCiB7Ci0Jc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXAgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTs7CisJc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXAgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCiAJaWYgKHVwLT5zdV90eXBlID09IFNVX1BPUlRfTVMgfHwKIAkgICAgdXAtPnN1X3R5cGUgPT0gU1VfUE9SVF9LQkQpIHsKQEAgLTE0OTksOSArMTQ5OSw5IEBACiAJfQogCiAJaWYgKHVwLT5wb3J0Lm1lbWJhc2UpCi0JCW9mX2lvdW5tYXAodXAtPnBvcnQubWVtYmFzZSwgdXAtPnJlZ19zaXplKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLCB1cC0+cG9ydC5tZW1iYXNlLCB1cC0+cmVnX3NpemUpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKaW5kZXggYjJjYzcwMy4uMjQ0Zjc5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCkBAIC05MjIsOCArOTIyLDggQEAKIAogLyogVGhlIHBvcnQgbG9jayBpcyBub3QgaGVsZC4gICovCiBzdGF0aWMgdm9pZAotc3Vuemlsb2dfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCSAgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3N1bnppbG9nX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAlzdHJ1Y3QgdWFydF9zdW56aWxvZ19wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF9zdW56aWxvZ19wb3J0ICopIHBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzNzksMTMgKzEzNzksMTUgQEAKIAlpZiAoIWtleWJvYXJkX21vdXNlKSB7CiAJCWVyciA9IHVhcnRfYWRkX29uZV9wb3J0KCZzdW56aWxvZ19yZWcsICZ1cFswXS5wb3J0KTsKIAkJaWYgKGVycikgewotCQkJb2ZfaW91bm1hcChycCwgc2l6ZW9mKHN0cnVjdCB6aWxvZ19sYXlvdXQpKTsKKwkJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwKKwkJCQkgICBycCwgc2l6ZW9mKHN0cnVjdCB6aWxvZ19sYXlvdXQpKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJZXJyID0gdWFydF9hZGRfb25lX3BvcnQoJnN1bnppbG9nX3JlZywgJnVwWzFdLnBvcnQpOwogCQlpZiAoZXJyKSB7CiAJCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc3Vuemlsb2dfcmVnLCAmdXBbMF0ucG9ydCk7Ci0JCQlvZl9pb3VubWFwKHJwLCBzaXplb2Yoc3RydWN0IHppbG9nX2xheW91dCkpOworCQkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLAorCQkJCSAgIHJwLCBzaXplb2Yoc3RydWN0IHppbG9nX2xheW91dCkpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0gZWxzZSB7CkBAIC0xNDE0LDE4ICsxNDE2LDE4IEBACiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzdW56aWxvZ19yZWcsICZ1cC0+cG9ydCk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHpzX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB6c19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCiB7Ci0Jc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqdXAgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKwlzdHJ1Y3QgdWFydF9zdW56aWxvZ19wb3J0ICp1cCA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CiAJc3RydWN0IHppbG9nX2xheW91dCBfX2lvbWVtICpyZWdzOwogCiAJenNfcmVtb3ZlX29uZSgmdXBbMF0pOwogCXpzX3JlbW92ZV9vbmUoJnVwWzFdKTsKIAogCXJlZ3MgPSBzdW56aWxvZ19jaGlwX3JlZ3NbdXBbMF0ucG9ydC5saW5lIC8gMl07Ci0Jb2ZfaW91bm1hcChyZWdzLCBzaXplb2Yoc3RydWN0IHppbG9nX2xheW91dCkpOworCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgcmVncywgc2l6ZW9mKHN0cnVjdCB6aWxvZ19sYXlvdXQpKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIE5VTEwpOworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMgYi9kcml2ZXJzL3NlcmlhbC91YXJ0bGl0ZS5jCmluZGV4IDgzNjkwNjUuLmRiODYwN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3VhcnRsaXRlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdWFydGxpdGUuYwpAQCAtMjE0LDggKzIxNCw4IEBACiAJZnJlZV9pcnEocG9ydC0+aXJxLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgdWxpdGVfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCQkgICAgICBzdHJ1Y3QgdGVybWlvcyAqb2xkKQorc3RhdGljIHZvaWQgdWxpdGVfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQkJICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgYmF1ZDsKQEAgLTI3OCw4ICsyNzgsOCBAQAogCiBzdGF0aWMgdm9pZCB1bGl0ZV9jb25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgZmxhZ3MpCiB7Ci0JdWxpdGVfcmVxdWVzdF9wb3J0KHBvcnQpOwotCXBvcnQtPnR5cGUgPSBQT1JUX1VBUlRMSVRFOworCWlmICghdWxpdGVfcmVxdWVzdF9wb3J0KHBvcnQpKQorCQlwb3J0LT50eXBlID0gUE9SVF9VQVJUTElURTsKIH0KIAogc3RhdGljIGludCB1bGl0ZV92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdjg1MGVfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvdjg1MGVfdWFydC5jCmluZGV4IDI4ZjNiYmYuLmRkOThhY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3Y4NTBlX3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC92ODUwZV91YXJ0LmMKQEAgLTQwNCw4ICs0MDQsOCBAQAogfQogCiBzdGF0aWMgdm9pZAotdjg1MGVfdWFydF9zZXRfdGVybWlvcyAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MsCi0JCSAgICAgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3Y4NTBlX3VhcnRfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJICAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAl1bnNpZ25lZCBjZmxhZ3MgPSB0ZXJtaW9zLT5jX2NmbGFnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMgYi9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKaW5kZXggZmQ1MWY4MS4uY2YwZTY2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYwpAQCAtNTYyLDggKzU2Miw4IEBACiAJZnJlZV9pcnEocG9ydC0+aXJxLCBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgc2l1X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpuZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3N0YXRpYyB2b2lkIHNpdV9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm5ldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKIAl0Y2ZsYWdfdCBjX2NmbGFnLCBjX2lmbGFnOwogCXVpbnQ4X3QgbGNyLCBmY3IsIGllcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwppbmRleCA0OTRkOWI4Li44YjQxZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCkBAIC00OSw2ICs0OSwxNCBAQAogI2RlZmluZSBSRVNFVF9ETUFfQ0hBTk5FTCAoRENTUl9OT0RFU0MgfCBETUFfSU5UX01BU0spCiAjZGVmaW5lIElTX0RNQV9BTElHTkVEKHgpICgoKHUzMikoeCkmMHgwNyk9PTApCiAKKy8qIGZvciB0ZXN0aW5nIFNTQ1IxIGNoYW5nZXMgdGhhdCByZXF1aXJlIFNTUCByZXN0YXJ0LCBiYXNpY2FsbHkKKyAqIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBzZXJ2aWNlIGFuZCBpbnRlcnJ1cHQgZW5hYmxlcyAqLworI2RlZmluZSBTU0NSMV9DSEFOR0VfTUFTSyAoU1NDUjFfVFRFTFAgfCBTU0NSMV9UVEUgfCBTU0NSMV9FQkNFSSB8IFNTQ1IxX1NDRlIgXAorCQkJCXwgU1NDUjFfRUNSQSB8IFNTQ1IxX0VDUkIgfCBTU0NSMV9TQ0xLRElSIFwKKwkJCQl8IFNTQ1IxX1JXT1QgfCBTU0NSMV9UUkFJTCB8IFNTQ1IxX1BJTlRFIFwKKwkJCQl8IFNTQ1IxX1NUUkYgfCBTU0NSMV9FRldSIHxTU0NSMV9SRlQgXAorCQkJCXwgU1NDUjFfVEZUIHwgU1NDUjFfU1BIIHwgU1NDUjFfU1BPIHwgU1NDUjFfTEJNKQorCiAjZGVmaW5lIERFRklORV9TU1BfUkVHKHJlZywgb2ZmKSBcCiBzdGF0aWMgaW5saW5lIHUzMiByZWFkXyMjcmVnKHZvaWQgKnApIHsgcmV0dXJuIF9fcmF3X3JlYWRsKHAgKyAob2ZmKSk7IH0gXAogc3RhdGljIGlubGluZSB2b2lkIHdyaXRlXyMjcmVnKHUzMiB2LCB2b2lkICpwKSB7IF9fcmF3X3dyaXRlbCh2LCBwICsgKG9mZikpOyB9CkBAIC0xMjMsOCArMTMxLDggQEAKIAl1OCBuX2J5dGVzOwogCXUzMiBkbWFfd2lkdGg7CiAJaW50IGNzX2NoYW5nZTsKLQl2b2lkICgqd3JpdGUpKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpOwotCXZvaWQgKCpyZWFkKShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKTsKKwlpbnQgKCp3cml0ZSkoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSk7CisJaW50ICgqcmVhZCkoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSk7CiAJaXJxcmV0dXJuX3QgKCp0cmFuc2Zlcl9oYW5kbGVyKShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKTsKIAl2b2lkICgqY3NfY29udHJvbCkodTMyIGNvbW1hbmQpOwogfTsKQEAgLTEzMiw3ICsxNDAsNiBAQAogc3RydWN0IGNoaXBfZGF0YSB7CiAJdTMyIGNyMDsKIAl1MzIgY3IxOwotCXUzMiB0bzsKIAl1MzIgcHNwOwogCXUzMiB0aW1lb3V0OwogCXU4IG5fYnl0ZXM7CkBAIC0xNDMsOCArMTUwLDggQEAKIAl1OCBlbmFibGVfZG1hOwogCXU4IGJpdHNfcGVyX3dvcmQ7CiAJdTMyIHNwZWVkX2h6OwotCXZvaWQgKCp3cml0ZSkoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSk7Ci0Jdm9pZCAoKnJlYWQpKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpOworCWludCAoKndyaXRlKShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKTsKKwlpbnQgKCpyZWFkKShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKTsKIAl2b2lkICgqY3NfY29udHJvbCkodTMyIGNvbW1hbmQpOwogfTsKIApAQCAtMTY2LDExNCArMTczLDExOCBAQAogCXJldHVybiBsaW1pdDsKIH0KIAotc3RhdGljIHZvaWQgcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQotewotCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7Ci0KLQkvKiBDbGVhciBzdGF0dXMgYW5kIGRpc2FibGUgY2xvY2sgKi8KLQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKLQl3cml0ZV9TU0NSMChkcnZfZGF0YS0+Y3VyX2NoaXAtPmNyMCAmIH5TU0NSMF9TU0UsIHJlZyk7Ci0KLQkvKiBMb2FkIHRoZSByZWdpc3RlcnMgKi8KLQl3cml0ZV9TU0NSMShkcnZfZGF0YS0+Y3VyX2NoaXAtPmNyMSwgcmVnKTsKLQl3cml0ZV9TU0NSMChkcnZfZGF0YS0+Y3VyX2NoaXAtPmNyMCwgcmVnKTsKLQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApIHsKLQkJd3JpdGVfU1NUTygwLCByZWcpOwotCQl3cml0ZV9TU1BTUChkcnZfZGF0YS0+Y3VyX2NoaXAtPnBzcCwgcmVnKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIG51bGxfY3NfY29udHJvbCh1MzIgY29tbWFuZCkKIHsKIH0KIAotc3RhdGljIHZvaWQgbnVsbF93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3N0YXRpYyBpbnQgbnVsbF93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKIAl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwogCXU4IG5fYnl0ZXMgPSBkcnZfZGF0YS0+bl9ieXRlczsKIAotCXdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1RORikKLQkJCSYmIChkcnZfZGF0YS0+dHggPCBkcnZfZGF0YS0+dHhfZW5kKSkgewotCQl3cml0ZV9TU0RSKDAsIHJlZyk7Ci0JCWRydl9kYXRhLT50eCArPSBuX2J5dGVzOwotCX0KKwlpZiAoKChyZWFkX1NTU1IocmVnKSAmIDB4MDAwMDBmMDApID09IDB4MDAwMDBmMDApCisJCXx8IChkcnZfZGF0YS0+dHggPT0gZHJ2X2RhdGEtPnR4X2VuZCkpCisJCXJldHVybiAwOworCisJd3JpdGVfU1NEUigwLCByZWcpOworCWRydl9kYXRhLT50eCArPSBuX2J5dGVzOworCisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIG51bGxfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCitzdGF0aWMgaW50IG51bGxfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7CiAJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKIAl1OCBuX2J5dGVzID0gZHJ2X2RhdGEtPm5fYnl0ZXM7CiAKIAl3aGlsZSAoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9STkUpCi0JCQkmJiAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkpIHsKKwkJJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKSB7CiAJCXJlYWRfU1NEUihyZWcpOwogCQlkcnZfZGF0YS0+cnggKz0gbl9ieXRlczsKIAl9CisKKwlyZXR1cm4gZHJ2X2RhdGEtPnJ4ID09IGRydl9kYXRhLT5yeF9lbmQ7CiB9CiAKLXN0YXRpYyB2b2lkIHU4X3dyaXRlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQorc3RhdGljIGludCB1OF93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKIAl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwogCi0Jd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfVE5GKQotCQkJJiYgKGRydl9kYXRhLT50eCA8IGRydl9kYXRhLT50eF9lbmQpKSB7Ci0JCXdyaXRlX1NTRFIoKih1OCAqKShkcnZfZGF0YS0+dHgpLCByZWcpOwotCQkrK2Rydl9kYXRhLT50eDsKLQl9CisJaWYgKCgocmVhZF9TU1NSKHJlZykgJiAweDAwMDAwZjAwKSA9PSAweDAwMDAwZjAwKQorCQl8fCAoZHJ2X2RhdGEtPnR4ID09IGRydl9kYXRhLT50eF9lbmQpKQorCQlyZXR1cm4gMDsKKworCXdyaXRlX1NTRFIoKih1OCAqKShkcnZfZGF0YS0+dHgpLCByZWcpOworCSsrZHJ2X2RhdGEtPnR4OworCisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIHU4X3JlYWRlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQorc3RhdGljIGludCB1OF9yZWFkZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKIAl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwogCiAJd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfUk5FKQotCQkJJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKSB7CisJCSYmIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0YS0+cnhfZW5kKSkgewogCQkqKHU4ICopKGRydl9kYXRhLT5yeCkgPSByZWFkX1NTRFIocmVnKTsKIAkJKytkcnZfZGF0YS0+cng7CiAJfQorCisJcmV0dXJuIGRydl9kYXRhLT5yeCA9PSBkcnZfZGF0YS0+cnhfZW5kOwogfQogCi1zdGF0aWMgdm9pZCB1MTZfd3JpdGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCitzdGF0aWMgaW50IHUxNl93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKIAl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwogCi0Jd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfVE5GKQotCQkJJiYgKGRydl9kYXRhLT50eCA8IGRydl9kYXRhLT50eF9lbmQpKSB7Ci0JCXdyaXRlX1NTRFIoKih1MTYgKikoZHJ2X2RhdGEtPnR4KSwgcmVnKTsKLQkJZHJ2X2RhdGEtPnR4ICs9IDI7Ci0JfQorCWlmICgoKHJlYWRfU1NTUihyZWcpICYgMHgwMDAwMGYwMCkgPT0gMHgwMDAwMGYwMCkKKwkJfHwgKGRydl9kYXRhLT50eCA9PSBkcnZfZGF0YS0+dHhfZW5kKSkKKwkJcmV0dXJuIDA7CisKKwl3cml0ZV9TU0RSKCoodTE2ICopKGRydl9kYXRhLT50eCksIHJlZyk7CisJZHJ2X2RhdGEtPnR4ICs9IDI7CisKKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgdTE2X3JlYWRlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQorc3RhdGljIGludCB1MTZfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7CiAJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKIAogCXdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1JORSkKLQkJCSYmIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0YS0+cnhfZW5kKSkgeworCQkmJiAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkpIHsKIAkJKih1MTYgKikoZHJ2X2RhdGEtPnJ4KSA9IHJlYWRfU1NEUihyZWcpOwogCQlkcnZfZGF0YS0+cnggKz0gMjsKIAl9CisKKwlyZXR1cm4gZHJ2X2RhdGEtPnJ4ID09IGRydl9kYXRhLT5yeF9lbmQ7CiB9Ci1zdGF0aWMgdm9pZCB1MzJfd3JpdGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCisKK3N0YXRpYyBpbnQgdTMyX3dyaXRlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQogewogCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CiAKLQl3aGlsZSAoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9UTkYpCi0JCQkmJiAoZHJ2X2RhdGEtPnR4IDwgZHJ2X2RhdGEtPnR4X2VuZCkpIHsKLQkJd3JpdGVfU1NEUigqKHUzMiAqKShkcnZfZGF0YS0+dHgpLCByZWcpOwotCQlkcnZfZGF0YS0+dHggKz0gNDsKLQl9CisJaWYgKCgocmVhZF9TU1NSKHJlZykgJiAweDAwMDAwZjAwKSA9PSAweDAwMDAwZjAwKQorCQl8fCAoZHJ2X2RhdGEtPnR4ID09IGRydl9kYXRhLT50eF9lbmQpKQorCQlyZXR1cm4gMDsKKworCXdyaXRlX1NTRFIoKih1MzIgKikoZHJ2X2RhdGEtPnR4KSwgcmVnKTsKKwlkcnZfZGF0YS0+dHggKz0gNDsKKworCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCB1MzJfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCitzdGF0aWMgaW50IHUzMl9yZWFkZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKIAl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwogCiAJd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfUk5FKQotCQkJJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKSB7CisJCSYmIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0YS0+cnhfZW5kKSkgewogCQkqKHUzMiAqKShkcnZfZGF0YS0+cngpID0gcmVhZF9TU0RSKHJlZyk7CiAJCWRydl9kYXRhLT5yeCArPSA0OwogCX0KKworCXJldHVybiBkcnZfZGF0YS0+cnggPT0gZHJ2X2RhdGEtPnJ4X2VuZDsKIH0KIAogc3RhdGljIHZvaWQgKm5leHRfdHJhbnNmZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKQEAgLTQwOSwxNjYgKzQyMCwxMzQgQEAKIAlyZXR1cm4gbGltaXQ7CiB9CiAKK3ZvaWQgZG1hX2Vycm9yX3N0b3Aoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSwgY29uc3QgY2hhciAqbXNnKQoreworCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CisKKwkvKiBTdG9wIGFuZCByZXNldCAqLworCURDU1IoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CisJRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKwl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKwl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmRtYV9jcjEsIHJlZyk7CisJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQorCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJZmx1c2goZHJ2X2RhdGEpOworCXdyaXRlX1NTQ1IwKHJlYWRfU1NDUjAocmVnKSAmIH5TU0NSMF9TU0UsIHJlZyk7CisKKwl1bm1hcF9kbWFfYnVmZmVycyhkcnZfZGF0YSk7CisKKwlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAiJXNcbiIsIG1zZyk7CisKKwlkcnZfZGF0YS0+Y3VyX21zZy0+c3RhdGUgPSBFUlJPUl9TVEFURTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZkcnZfZGF0YS0+cHVtcF90cmFuc2ZlcnMpOworfQorCitzdGF0aWMgdm9pZCBkbWFfdHJhbnNmZXJfY29tcGxldGUoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKK3sKKwl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7CisKKwkvKiBDbGVhciBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIFNTUCBhbmQgRE1BIGNoYW5uZWxzKi8KKwl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmRtYV9jcjEsIHJlZyk7CisJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7CisJRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKKwlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOworCisJaWYgKHdhaXRfZG1hX2NoYW5uZWxfc3RvcChkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPT0gMCkKKwkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKKwkJCSJkbWFfaGFuZGxlcjogZG1hIHJ4IGNoYW5uZWwgc3RvcCBmYWlsZWRcbiIpOworCisJaWYgKHdhaXRfc3NwX3J4X3N0YWxsKGRydl9kYXRhLT5pb2FkZHIpID09IDApCisJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCisJCQkiZG1hX3RyYW5zZmVyOiBzc3Agcnggc3RhbGwgZmFpbGVkXG4iKTsKKworCXVubWFwX2RtYV9idWZmZXJzKGRydl9kYXRhKTsKKworCS8qIHVwZGF0ZSB0aGUgYnVmZmVyIHBvaW50ZXIgZm9yIHRoZSBhbW91bnQgY29tcGxldGVkIGluIGRtYSAqLworCWRydl9kYXRhLT5yeCArPSBkcnZfZGF0YS0+bGVuIC0KKwkJCShEQ01EKGRydl9kYXRhLT5yeF9jaGFubmVsKSAmIERDTURfTEVOR1RIKTsKKworCS8qIHJlYWQgdHJhaWxpbmcgZGF0YSBmcm9tIGZpZm8sIGl0IGRvZXMgbm90IG1hdHRlciBob3cgbWFueQorCSAqIGJ5dGVzIGFyZSBpbiB0aGUgZmlmbyBqdXN0IHJlYWQgdW50aWwgYnVmZmVyIGlzIGZ1bGwKKwkgKiBvciBmaWZvIGlzIGVtcHR5LCB3aGljaCBldmVyIG9jY3VycyBmaXJzdCAqLworCWRydl9kYXRhLT5yZWFkKGRydl9kYXRhKTsKKworCS8qIHJldHVybiBjb3VudCBvZiB3aGF0IHdhcyBhY3R1YWxseSByZWFkICovCisJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IGRydl9kYXRhLT5sZW4gLQorCQkJCShkcnZfZGF0YS0+cnhfZW5kIC0gZHJ2X2RhdGEtPnJ4KTsKKworCS8qIFJlbGVhc2UgY2hpcCBzZWxlY3QgaWYgcmVxdWVzdGVkLCB0cmFuc2ZlciBkZWxheXMgYXJlCisJICogaGFuZGxlZCBpbiBwdW1wX3RyYW5zZmVycyAqLworCWlmIChkcnZfZGF0YS0+Y3NfY2hhbmdlKQorCQlkcnZfZGF0YS0+Y3NfY29udHJvbChQWEEyWFhfQ1NfREVBU1NFUlQpOworCisJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCisJbXNnLT5zdGF0ZSA9IG5leHRfdHJhbnNmZXIoZHJ2X2RhdGEpOworCisJLyogU2NoZWR1bGUgdHJhbnNmZXIgdGFza2xldCAqLworCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Cit9CisKIHN0YXRpYyB2b2lkIGRtYV9oYW5kbGVyKGludCBjaGFubmVsLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBkYXRhOwotCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7Ci0Jdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKIAl1MzIgaXJxX3N0YXR1cyA9IERDU1IoY2hhbm5lbCkgJiBETUFfSU5UX01BU0s7Ci0JdTMyIHRyYWlsaW5nX3Nzc3IgPSAwOwogCiAJaWYgKGlycV9zdGF0dXMgJiBEQ1NSX0JVU0VSUikgewogCi0JCS8qIERpc2FibGUgaW50ZXJydXB0cywgY2xlYXIgc3RhdHVzIGFuZCByZXNldCBETUEgKi8KLQkJd3JpdGVfU1NDUjAocmVhZF9TU0NSMChyZWcpICYgflNTQ1IwX1NTRSwgcmVnKTsKLQkJd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRhLT5kbWFfY3IxLCByZWcpOwotCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCi0JCQl3cml0ZV9TU1RPKDAsIHJlZyk7Ci0JCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOwotCQlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOwotCQlEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOwotCi0JCWlmIChmbHVzaChkcnZfZGF0YSkgPT0gMCkKLQkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkJCSJkbWFfaGFuZGxlcjogZmx1c2ggZmFpbFxuIik7Ci0KLQkJdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOwotCiAJCWlmIChjaGFubmVsID09IGRydl9kYXRhLT50eF9jaGFubmVsKQotCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCQkiZG1hX2hhbmRsZXI6IGJhZCBidXMgYWRkcmVzcyBvbiAiCi0JCQkJInR4IGNoYW5uZWwgJWQsIHNvdXJjZSAleCB0YXJnZXQgPSAleFxuIiwKLQkJCQljaGFubmVsLCBEU0FEUihjaGFubmVsKSwgRFRBRFIoY2hhbm5lbCkpOworCQkJZG1hX2Vycm9yX3N0b3AoZHJ2X2RhdGEsCisJCQkJCSJkbWFfaGFuZGxlcjogIgorCQkJCQkiYmFkIGJ1cyBhZGRyZXNzIG9uIHR4IGNoYW5uZWwiKTsKIAkJZWxzZQotCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCQkiZG1hX2hhbmRsZXI6IGJhZCBidXMgYWRkcmVzcyBvbiAiCi0JCQkJInJ4IGNoYW5uZWwgJWQsIHNvdXJjZSAleCB0YXJnZXQgPSAleFxuIiwKLQkJCQljaGFubmVsLCBEU0FEUihjaGFubmVsKSwgRFRBRFIoY2hhbm5lbCkpOwotCi0JCW1zZy0+c3RhdGUgPSBFUlJPUl9TVEFURTsKLQkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKKwkJCWRtYV9lcnJvcl9zdG9wKGRydl9kYXRhLAorCQkJCQkiZG1hX2hhbmRsZXI6ICIKKwkJCQkJImJhZCBidXMgYWRkcmVzcyBvbiByeCBjaGFubmVsIik7CisJCXJldHVybjsKIAl9CiAKIAkvKiBQWEEyNTV4X1NTUCBoYXMgbm8gdGltZW91dCBpbnRlcnJ1cHQsIHdhaXQgZm9yIHRhaWxpbmcgYnl0ZXMgKi8KLQlpZiAoKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBQWEEyNXhfU1NQKQotCQkmJiAoY2hhbm5lbCA9PSBkcnZfZGF0YS0+dHhfY2hhbm5lbCkKLQkJJiYgKGlycV9zdGF0dXMgJiBEQ1NSX0VORElOVFIpKSB7CisJaWYgKChjaGFubmVsID09IGRydl9kYXRhLT50eF9jaGFubmVsKQorCQkmJiAoaXJxX3N0YXR1cyAmIERDU1JfRU5ESU5UUikKKwkJJiYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBQWEEyNXhfU1NQKSkgewogCiAJCS8qIFdhaXQgZm9yIHJ4IHRvIHN0YWxsICovCiAJCWlmICh3YWl0X3NzcF9yeF9zdGFsbChkcnZfZGF0YS0+aW9hZGRyKSA9PSAwKQogCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKIAkJCQkiZG1hX2hhbmRsZXI6IHNzcCByeCBzdGFsbCBmYWlsZWRcbiIpOwogCi0JCS8qIENsZWFyIGFuZCBkaXNhYmxlIGludGVycnVwdHMgb24gU1NQIGFuZCBETUEgY2hhbm5lbHMqLwotCQl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmRtYV9jcjEsIHJlZyk7Ci0JCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOwotCQlEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOwotCQlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOwotCQlpZiAod2FpdF9kbWFfY2hhbm5lbF9zdG9wKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9PSAwKQotCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKLQkJCQkiZG1hX2hhbmRsZXI6IGRtYSByeCBjaGFubmVsIHN0b3AgZmFpbGVkXG4iKTsKLQotCQl1bm1hcF9kbWFfYnVmZmVycyhkcnZfZGF0YSk7Ci0KLQkJLyogUmVhZCB0cmFpbGluZyBieXRlcyAqLwotCQkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIHRyYWlsaW5nIGJ5dGVzLCByZWFkIHRoZW0gKi8KLQkJdHJhaWxpbmdfc3NzciA9IHJlYWRfU1NTUihyZWcpOwotCQlpZiAoKHRyYWlsaW5nX3Nzc3IgJiAweGYwMDgpICE9IDB4ZjAwMCkgewotCQkJZHJ2X2RhdGEtPnJ4ID0gZHJ2X2RhdGEtPnJ4X2VuZCAtCi0JCQkJCSgoKHRyYWlsaW5nX3Nzc3IgPj4gMTIpICYgMHgwZikgKyAxKTsKLQkJCWRydl9kYXRhLT5yZWFkKGRydl9kYXRhKTsKLQkJfQotCQltc2ctPmFjdHVhbF9sZW5ndGggKz0gZHJ2X2RhdGEtPmxlbjsKLQotCQkvKiBSZWxlYXNlIGNoaXAgc2VsZWN0IGlmIHJlcXVlc3RlZCwgdHJhbnNmZXIgZGVsYXlzIGFyZQotCQkgKiBoYW5kbGVkIGluIHB1bXBfdHJhbnNmZXJzICovCi0JCWlmIChkcnZfZGF0YS0+Y3NfY2hhbmdlKQotCQkJZHJ2X2RhdGEtPmNzX2NvbnRyb2woUFhBMlhYX0NTX0RFQVNTRVJUKTsKLQotCQkvKiBNb3ZlIHRvIG5leHQgdHJhbnNmZXIgKi8KLQkJbXNnLT5zdGF0ZSA9IG5leHRfdHJhbnNmZXIoZHJ2X2RhdGEpOwotCi0JCS8qIFNjaGVkdWxlIHRyYW5zZmVyIHRhc2tsZXQgKi8KLQkJdGFza2xldF9zY2hlZHVsZSgmZHJ2X2RhdGEtPnB1bXBfdHJhbnNmZXJzKTsKKwkJLyogZmluaXNoIHRoaXMgdHJhbnNmZXIsIHN0YXJ0IHRoZSBuZXh0ICovCisJCWRtYV90cmFuc2Zlcl9jb21wbGV0ZShkcnZfZGF0YSk7CiAJfQogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX3RyYW5zZmVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7CiAJdTMyIGlycV9zdGF0dXM7Ci0JdTMyIHRyYWlsaW5nX3Nzc3IgPSAwOwotCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnID0gZHJ2X2RhdGEtPmN1cl9tc2c7CiAJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKIAogCWlycV9zdGF0dXMgPSByZWFkX1NTU1IocmVnKSAmIGRydl9kYXRhLT5tYXNrX3NyOwogCWlmIChpcnFfc3RhdHVzICYgU1NTUl9ST1IpIHsKLQkJLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbiBTU1AgYW5kIERNQSBjaGFubmVscyovCi0JCXdyaXRlX1NTQ1IwKHJlYWRfU1NDUjAocmVnKSAmIH5TU0NSMF9TU0UsIHJlZyk7Ci0JCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+ZG1hX2NyMSwgcmVnKTsKLQkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQotCQkJd3JpdGVfU1NUTygwLCByZWcpOwotCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKLQkJRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKLQkJRENTUihkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKLQkJdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOwotCi0JCWlmIChmbHVzaChkcnZfZGF0YSkgPT0gMCkKLQkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkJCSJkbWFfdHJhbnNmZXI6IGZsdXNoIGZhaWxcbiIpOwotCi0JCWRldl93YXJuKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAiZG1hX3RyYW5zZmVyOiBmaWZvIG92ZXJ1blxuIik7Ci0KLQkJZHJ2X2RhdGEtPmN1cl9tc2ctPnN0YXRlID0gRVJST1JfU1RBVEU7Ci0JCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Ci0KKwkJZG1hX2Vycm9yX3N0b3AoZHJ2X2RhdGEsICJkbWFfdHJhbnNmZXI6IGZpZm8gb3ZlcnJ1biIpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCiAJLyogQ2hlY2sgZm9yIGZhbHNlIHBvc2l0aXZlIHRpbWVvdXQgKi8KLQlpZiAoKGlycV9zdGF0dXMgJiBTU1NSX1RJTlQpICYmIERDU1IoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpICYgRENTUl9SVU4pIHsKKwlpZiAoKGlycV9zdGF0dXMgJiBTU1NSX1RJTlQpCisJCSYmIChEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSAmIERDU1JfUlVOKSkgewogCQl3cml0ZV9TU1NSKFNTU1JfVElOVCwgcmVnKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAogCWlmIChpcnFfc3RhdHVzICYgU1NTUl9USU5UIHx8IGRydl9kYXRhLT5yeCA9PSBkcnZfZGF0YS0+cnhfZW5kKSB7CiAKLQkJLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbiBTU1AgYW5kIERNQSBjaGFubmVscyovCi0JCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+ZG1hX2NyMSwgcmVnKTsKKwkJLyogQ2xlYXIgYW5kIGRpc2FibGUgdGltZW91dCBpbnRlcnJ1cHQsIGRvIHRoZSByZXN0IGluCisJCSAqIGRtYV90cmFuc2Zlcl9jb21wbGV0ZSAqLwogCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCiAJCQl3cml0ZV9TU1RPKDAsIHJlZyk7Ci0JCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOwotCQlEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOwotCQlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOwogCi0JCWlmICh3YWl0X2RtYV9jaGFubmVsX3N0b3AoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID09IDApCi0JCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCSJkbWFfdHJhbnNmZXI6IGRtYSByeCBjaGFubmVsIHN0b3AgZmFpbGVkXG4iKTsKLQotCQlpZiAod2FpdF9zc3Bfcnhfc3RhbGwoZHJ2X2RhdGEtPmlvYWRkcikgPT0gMCkKLQkJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsCi0JCQkJImRtYV90cmFuc2Zlcjogc3NwIHJ4IHN0YWxsIGZhaWxlZFxuIik7Ci0KLQkJdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOwotCi0JCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgdHJhaWxpbmcgYnl0ZXMsIHJlYWQgdGhlbSAqLwotCQl0cmFpbGluZ19zc3NyID0gcmVhZF9TU1NSKHJlZyk7Ci0JCWlmICgodHJhaWxpbmdfc3NzciAmIDB4ZjAwOCkgIT0gMHhmMDAwKSB7Ci0JCQlkcnZfZGF0YS0+cnggPSBkcnZfZGF0YS0+cnhfZW5kIC0KLQkJCQkJKCgodHJhaWxpbmdfc3NzciA+PiAxMikgJiAweDBmKSArIDEpOwotCQkJZHJ2X2RhdGEtPnJlYWQoZHJ2X2RhdGEpOwotCQl9Ci0JCW1zZy0+YWN0dWFsX2xlbmd0aCArPSBkcnZfZGF0YS0+bGVuOwotCi0JCS8qIFJlbGVhc2UgY2hpcCBzZWxlY3QgaWYgcmVxdWVzdGVkLCB0cmFuc2ZlciBkZWxheXMgYXJlCi0JCSAqIGhhbmRsZWQgaW4gcHVtcF90cmFuc2ZlcnMgKi8KLQkJaWYgKGRydl9kYXRhLT5jc19jaGFuZ2UpCi0JCQlkcnZfZGF0YS0+Y3NfY29udHJvbChQWEEyWFhfQ1NfREVBU1NFUlQpOwotCi0JCS8qIE1vdmUgdG8gbmV4dCB0cmFuc2ZlciAqLwotCQltc2ctPnN0YXRlID0gbmV4dF90cmFuc2ZlcihkcnZfZGF0YSk7Ci0KLQkJLyogU2NoZWR1bGUgdHJhbnNmZXIgdGFza2xldCAqLwotCQl0YXNrbGV0X3NjaGVkdWxlKCZkcnZfZGF0YS0+cHVtcF90cmFuc2ZlcnMpOworCQkvKiBmaW5pc2ggdGhpcyB0cmFuc2Zlciwgc3RhcnQgdGhlIG5leHQgKi8KKwkJZG1hX3RyYW5zZmVyX2NvbXBsZXRlKGRydl9kYXRhKTsKIAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQpAQCAtNTc3LDg5ICs1NTYsMTAzIEBACiAJcmV0dXJuIElSUV9OT05FOwogfQogCitzdGF0aWMgdm9pZCBpbnRfZXJyb3Jfc3RvcChzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhLCBjb25zdCBjaGFyKiBtc2cpCit7CisJdm9pZCAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKKworCS8qIFN0b3AgYW5kIHJlc2V0IFNTUCAqLworCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOworCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50X2NyMSwgcmVnKTsKKwlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJCXdyaXRlX1NTVE8oMCwgcmVnKTsKKwlmbHVzaChkcnZfZGF0YSk7CisJd3JpdGVfU1NDUjAocmVhZF9TU0NSMChyZWcpICYgflNTQ1IwX1NTRSwgcmVnKTsKKworCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsICIlc1xuIiwgbXNnKTsKKworCWRydl9kYXRhLT5jdXJfbXNnLT5zdGF0ZSA9IEVSUk9SX1NUQVRFOworCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Cit9CisKK3N0YXRpYyB2b2lkIGludF90cmFuc2Zlcl9jb21wbGV0ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQoreworCXZvaWQgKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CisKKwkvKiBTdG9wIFNTUCAqLworCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOworCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50X2NyMSwgcmVnKTsKKwlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCisJCXdyaXRlX1NTVE8oMCwgcmVnKTsKKworCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVyZWQgcmV0dXJuIGNvdW50IGFjdHVhbCBieXRlcyByZWFkICovCisJZHJ2X2RhdGEtPmN1cl9tc2ctPmFjdHVhbF9sZW5ndGggKz0gZHJ2X2RhdGEtPmxlbiAtCisJCQkJKGRydl9kYXRhLT5yeF9lbmQgLSBkcnZfZGF0YS0+cngpOworCisJLyogUmVsZWFzZSBjaGlwIHNlbGVjdCBpZiByZXF1ZXN0ZWQsIHRyYW5zZmVyIGRlbGF5cyBhcmUKKwkgKiBoYW5kbGVkIGluIHB1bXBfdHJhbnNmZXJzICovCisJaWYgKGRydl9kYXRhLT5jc19jaGFuZ2UpCisJCWRydl9kYXRhLT5jc19jb250cm9sKFBYQTJYWF9DU19ERUFTU0VSVCk7CisKKwkvKiBNb3ZlIHRvIG5leHQgdHJhbnNmZXIgKi8KKwlkcnZfZGF0YS0+Y3VyX21zZy0+c3RhdGUgPSBuZXh0X3RyYW5zZmVyKGRydl9kYXRhKTsKKworCS8qIFNjaGVkdWxlIHRyYW5zZmVyIHRhc2tsZXQgKi8KKwl0YXNrbGV0X3NjaGVkdWxlKCZkcnZfZGF0YS0+cHVtcF90cmFuc2ZlcnMpOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3RyYW5zZmVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7Ci0Jc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkcnZfZGF0YS0+Y3VyX21zZzsKIAl2b2lkICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwotCXVuc2lnbmVkIGxvbmcgbGltaXQgPSBsb29wc19wZXJfamlmZnkgPDwgMTsKLQl1MzIgaXJxX3N0YXR1czsKKwogCXUzMiBpcnFfbWFzayA9IChyZWFkX1NTQ1IxKHJlZykgJiBTU0NSMV9USUUpID8KIAkJCWRydl9kYXRhLT5tYXNrX3NyIDogZHJ2X2RhdGEtPm1hc2tfc3IgJiB+U1NTUl9URlM7CiAKLQl3aGlsZSAoKGlycV9zdGF0dXMgPSByZWFkX1NTU1IocmVnKSAmIGlycV9tYXNrKSkgeworCXUzMiBpcnFfc3RhdHVzID0gcmVhZF9TU1NSKHJlZykgJiBpcnFfbWFzazsKIAotCQlpZiAoaXJxX3N0YXR1cyAmIFNTU1JfUk9SKSB7CisJaWYgKGlycV9zdGF0dXMgJiBTU1NSX1JPUikgeworCQlpbnRfZXJyb3Jfc3RvcChkcnZfZGF0YSwgImludGVycnVwdF90cmFuc2ZlcjogZmlmbyBvdmVycnVuIik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CiAKLQkJCS8qIENsZWFyIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KLQkJCXdyaXRlX1NTQ1IwKHJlYWRfU1NDUjAocmVnKSAmIH5TU0NSMF9TU0UsIHJlZyk7Ci0JCQl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmludF9jcjEsIHJlZyk7Ci0JCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCi0JCQkJd3JpdGVfU1NUTygwLCByZWcpOwotCQkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7Ci0KLQkJCWlmIChmbHVzaChkcnZfZGF0YSkgPT0gMCkKLQkJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCQkiaW50ZXJydXB0X3RyYW5zZmVyOiBmbHVzaCBmYWlsXG4iKTsKLQotCQkJLyogU3RvcCB0aGUgU1NQICovCi0KLQkJCWRldl93YXJuKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCQkiaW50ZXJydXB0X3RyYW5zZmVyOiBmaWZvIG92ZXJ1blxuIik7Ci0KLQkJCW1zZy0+c3RhdGUgPSBFUlJPUl9TVEFURTsKLQkJCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7Ci0KKwlpZiAoaXJxX3N0YXR1cyAmIFNTU1JfVElOVCkgeworCQl3cml0ZV9TU1NSKFNTU1JfVElOVCwgcmVnKTsKKwkJaWYgKGRydl9kYXRhLT5yZWFkKGRydl9kYXRhKSkgeworCQkJaW50X3RyYW5zZmVyX2NvbXBsZXRlKGRydl9kYXRhKTsKIAkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJfQorCX0KIAotCQkvKiBMb29rIGZvciBmYWxzZSBwb3NpdGl2ZSB0aW1lb3V0ICovCi0JCWlmICgoaXJxX3N0YXR1cyAmIFNTU1JfVElOVCkKLQkJCQkmJiAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkpCi0JCQl3cml0ZV9TU1NSKFNTU1JfVElOVCwgcmVnKTsKLQotCQkvKiBQdW1wIGRhdGEgKi8KLQkJZHJ2X2RhdGEtPnJlYWQoZHJ2X2RhdGEpOwotCQlkcnZfZGF0YS0+d3JpdGUoZHJ2X2RhdGEpOwotCi0JCWlmIChkcnZfZGF0YS0+dHggPT0gZHJ2X2RhdGEtPnR4X2VuZCkgewotCQkJLyogRGlzYWJsZSB0eCBpbnRlcnJ1cHQgKi8KLQkJCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5TU0NSMV9USUUsIHJlZyk7Ci0JCQlpcnFfbWFzayA9IGRydl9kYXRhLT5tYXNrX3NyICYgflNTU1JfVEZTOwotCi0JCQkvKiBQWEEyNXhfU1NQIGhhcyBubyB0aW1lb3V0LCByZWFkIHRyYWlsaW5nIGJ5dGVzICovCi0JCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlID09IFBYQTI1eF9TU1ApIHsKLQkJCQl3aGlsZSAoKHJlYWRfU1NTUihyZWcpICYgU1NTUl9CU1kpICYmIGxpbWl0LS0pCi0JCQkJCWRydl9kYXRhLT5yZWFkKGRydl9kYXRhKTsKLQotCQkJCWlmIChsaW1pdCA9PSAwKQotCQkJCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LAotCQkJCQkJImludGVycnVwdF90cmFuc2ZlcjogIgotCQkJCQkJInRyYWlsaW5nIGJ5dGUgcmVhZCBmYWlsZWRcbiIpOwotCQkJfQorCS8qIERyYWluIHJ4IGZpZm8sIEZpbGwgdHggZmlmbyBhbmQgcHJldmVudCBvdmVycnVucyAqLworCWRvIHsKKwkJaWYgKGRydl9kYXRhLT5yZWFkKGRydl9kYXRhKSkgeworCQkJaW50X3RyYW5zZmVyX2NvbXBsZXRlKGRydl9kYXRhKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJfQorCX0gd2hpbGUgKGRydl9kYXRhLT53cml0ZShkcnZfZGF0YSkpOwogCi0JCWlmICgoaXJxX3N0YXR1cyAmIFNTU1JfVElOVCkKLQkJCQl8fCAoZHJ2X2RhdGEtPnJ4ID09IGRydl9kYXRhLT5yeF9lbmQpKSB7CisJaWYgKGRydl9kYXRhLT5yZWFkKGRydl9kYXRhKSkgeworCQlpbnRfdHJhbnNmZXJfY29tcGxldGUoZHJ2X2RhdGEpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQogCi0JCQkvKiBDbGVhciB0aW1lb3V0ICovCi0JCQl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmludF9jcjEsIHJlZyk7Ci0JCQlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCi0JCQkJd3JpdGVfU1NUTygwLCByZWcpOwotCQkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7Ci0KLQkJCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVyZWQgKi8KLQkJCW1zZy0+YWN0dWFsX2xlbmd0aCArPSBkcnZfZGF0YS0+bGVuOwotCi0JCQkvKiBSZWxlYXNlIGNoaXAgc2VsZWN0IGlmIHJlcXVlc3RlZCwgdHJhbnNmZXIgZGVsYXlzIGFyZQotCQkJICogaGFuZGxlZCBpbiBwdW1wX3RyYW5zZmVycyAqLwotCQkJaWYgKGRydl9kYXRhLT5jc19jaGFuZ2UpCi0JCQkJZHJ2X2RhdGEtPmNzX2NvbnRyb2woUFhBMlhYX0NTX0RFQVNTRVJUKTsKLQotCQkJLyogTW92ZSB0byBuZXh0IHRyYW5zZmVyICovCi0JCQltc2ctPnN0YXRlID0gbmV4dF90cmFuc2ZlcihkcnZfZGF0YSk7Ci0KLQkJCS8qIFNjaGVkdWxlIHRyYW5zZmVyIHRhc2tsZXQgKi8KLQkJCXRhc2tsZXRfc2NoZWR1bGUoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycyk7CisJaWYgKGRydl9kYXRhLT50eCA9PSBkcnZfZGF0YS0+dHhfZW5kKSB7CisJCXdyaXRlX1NTQ1IxKHJlYWRfU1NDUjEocmVnKSAmIH5TU0NSMV9USUUsIHJlZyk7CisJCS8qIFBYQTI1eF9TU1AgaGFzIG5vIHRpbWVvdXQsIHJlYWQgdHJhaWxpbmcgYnl0ZXMgKi8KKwkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBQWEEyNXhfU1NQKSB7CisJCQlpZiAoIXdhaXRfc3NwX3J4X3N0YWxsKHJlZykpCisJCQl7CisJCQkJaW50X2Vycm9yX3N0b3AoZHJ2X2RhdGEsICJpbnRlcnJ1cHRfdHJhbnNmZXI6ICIKKwkJCQkJCSJyeCBzdGFsbCBmYWlsZWQiKTsKKwkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQl9CisJCQlpZiAoIWRydl9kYXRhLT5yZWFkKGRydl9kYXRhKSkKKwkJCXsKKwkJCQlpbnRfZXJyb3Jfc3RvcChkcnZfZGF0YSwKKwkJCQkJCSJpbnRlcnJ1cHRfdHJhbnNmZXI6ICIKKwkJCQkJCSJ0cmFpbGluZyBieXRlIHJlYWQgZmFpbGVkIik7CisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJfQorCQkJaW50X3RyYW5zZmVyX2NvbXBsZXRlKGRydl9kYXRhKTsKIAkJfQogCX0KIApAQCAtNjgxLDcgKzY3NCw3IEBACiAJCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOwogCiAJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsICJiYWQgbWVzc2FnZSBzdGF0ZSAiCi0JCQkJImluIGludGVycnVwdCBoYW5kbGVyIik7CisJCQkiaW4gaW50ZXJydXB0IGhhbmRsZXJcbiIpOwogCiAJCS8qIE5ldmVyIGZhaWwgKi8KIAkJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNjkwLDYgKzY4MywxMDIgQEAKIAlyZXR1cm4gZHJ2X2RhdGEtPnRyYW5zZmVyX2hhbmRsZXIoZHJ2X2RhdGEpOwogfQogCitpbnQgc2V0X2RtYV9idXJzdF9hbmRfdGhyZXNob2xkKHN0cnVjdCBjaGlwX2RhdGEgKmNoaXAsIHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJdTggYml0c19wZXJfd29yZCwgdTMyICpidXJzdF9jb2RlLAorCQkJCXUzMiAqdGhyZXNob2xkKQoreworCXN0cnVjdCBweGEyeHhfc3BpX2NoaXAgKmNoaXBfaW5mbyA9CisJCQkoc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCAqKXNwaS0+Y29udHJvbGxlcl9kYXRhOworCWludCBieXRlc19wZXJfd29yZDsKKwlpbnQgYnVyc3RfYnl0ZXM7CisJaW50IHRocmVzaF93b3JkczsKKwlpbnQgcmVxX2J1cnN0X3NpemU7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBTZXQgdGhlIHRocmVzaG9sZCAoaW4gcmVnaXN0ZXJzKSB0byBlcXVhbCB0aGUgc2FtZSBhbW91bnQgb2YgZGF0YQorCSAqIGFzIHJlcHJlc2VudGVkIGJ5IGJ1cnN0IHNpemUgKGluIGJ5dGVzKS4gIFRoZSBjb21wdXRhdGlvbiBiZWxvdworCSAqIGlzIChidXJzdF9zaXplIHJvdW5kZWQgdXAgdG8gbmVhcmVzdCA4IGJ5dGUsIHdvcmQgb3IgbG9uZyB3b3JkKQorCSAqIGRpdmlkZWQgYnkgKGJ5dGVzL3JlZ2lzdGVyKTsgdGhlIHR4IHRocmVzaG9sZCBpcyB0aGUgaW52ZXJzZSBvZgorCSAqIHRoZSByeCwgc28gdGhhdCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBlbm91Z2ggZGF0YSBpbiB0aGUgcnggZmlmbworCSAqIHRvIHNhdGlzZnkgYSBidXJzdCwgYW5kIHRoZXJlIHdpbGwgYWx3YXlzIGJlIGVub3VnaCBzcGFjZSBpbiB0aGUKKwkgKiB0eCBmaWZvIHRvIGFjY2VwdCBhIGJ1cnN0IChhIHR4IGJ1cnN0IHdpbGwgb3ZlcndyaXRlIHRoZSBmaWZvIGlmCisJICogdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSksIHRoZXJlIG11c3QgYWx3YXlzIHJlbWFpbiBlbm91Z2ggZW1wdHkKKwkgKiBzcGFjZSBpbiB0aGUgcnggZmlmbyBmb3IgYW55IGRhdGEgbG9hZGVkIHRvIHRoZSB0eCBmaWZvLgorCSAqIFdoZW5ldmVyIGJ1cnN0X3NpemUgKGluIGJ5dGVzKSBlcXVhbHMgYml0cy93b3JkLCB0aGUgZmlmbyB0aHJlc2hvbGQKKwkgKiB3aWxsIGJlIDgsIG9yIGhhbGYgdGhlIGZpZm87CisJICogVGhlIHRocmVzaG9sZCBjYW4gb25seSBiZSBzZXQgdG8gMiwgNCBvciA4LCBidXQgbm90IDE2LCBiZWNhdXNlCisJICogdG8gYnVyc3QgMTYgdG8gdGhlIHR4IGZpZm8sIHRoZSBmaWZvIHdvdWxkIGhhdmUgdG8gYmUgZW1wdHk7CisJICogaG93ZXZlciwgdGhlIG1pbmltdW0gZmlmbyB0cmlnZ2VyIGxldmVsIGlzIDEsIGFuZCB0aGUgdHggd2lsbAorCSAqIHJlcXVlc3Qgc2VydmljZSB3aGVuIHRoZSBmaWZvIGlzIGF0IHRoaXMgbGV2ZWwsIHdpdGggb25seSAxNSBzcGFjZXMuCisJICovCisKKwkvKiBmaW5kIGJ5dGVzL3dvcmQgKi8KKwlpZiAoYml0c19wZXJfd29yZCA8PSA4KQorCQlieXRlc19wZXJfd29yZCA9IDE7CisJZWxzZSBpZiAoYml0c19wZXJfd29yZCA8PSAxNikKKwkJYnl0ZXNfcGVyX3dvcmQgPSAyOworCWVsc2UKKwkJYnl0ZXNfcGVyX3dvcmQgPSA0OworCisJLyogdXNlIHN0cnVjdCBweGEyeHhfc3BpX2NoaXAtPmRtYV9idXJzdF9zaXplIGlmIGF2YWlsYWJsZSAqLworCWlmIChjaGlwX2luZm8pCisJCXJlcV9idXJzdF9zaXplID0gY2hpcF9pbmZvLT5kbWFfYnVyc3Rfc2l6ZTsKKwllbHNlIHsKKwkJc3dpdGNoIChjaGlwLT5kbWFfYnVyc3Rfc2l6ZSkgeworCQlkZWZhdWx0OgorCQkJLyogaWYgdGhlIGRlZmF1bHQgYnVyc3Qgc2l6ZSBpcyBub3Qgc2V0LAorCQkJICogZG8gaXQgbm93ICovCisJCQljaGlwLT5kbWFfYnVyc3Rfc2l6ZSA9IERDTURfQlVSU1Q4OworCQljYXNlIERDTURfQlVSU1Q4OgorCQkJcmVxX2J1cnN0X3NpemUgPSA4OworCQkJYnJlYWs7CisJCWNhc2UgRENNRF9CVVJTVDE2OgorCQkJcmVxX2J1cnN0X3NpemUgPSAxNjsKKwkJCWJyZWFrOworCQljYXNlIERDTURfQlVSU1QzMjoKKwkJCXJlcV9idXJzdF9zaXplID0gMzI7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocmVxX2J1cnN0X3NpemUgPD0gOCkgeworCQkqYnVyc3RfY29kZSA9IERDTURfQlVSU1Q4OworCQlidXJzdF9ieXRlcyA9IDg7CisJfSBlbHNlIGlmIChyZXFfYnVyc3Rfc2l6ZSA8PSAxNikgeworCQlpZiAoYnl0ZXNfcGVyX3dvcmQgPT0gMSkgeworCQkJLyogZG9uJ3QgYnVyc3QgbW9yZSB0aGFuIDEvMiB0aGUgZmlmbyAqLworCQkJKmJ1cnN0X2NvZGUgPSBEQ01EX0JVUlNUODsKKwkJCWJ1cnN0X2J5dGVzID0gODsKKwkJCXJldHZhbCA9IDE7CisJCX0gZWxzZSB7CisJCQkqYnVyc3RfY29kZSA9IERDTURfQlVSU1QxNjsKKwkJCWJ1cnN0X2J5dGVzID0gMTY7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYnl0ZXNfcGVyX3dvcmQgPT0gMSkgeworCQkJLyogZG9uJ3QgYnVyc3QgbW9yZSB0aGFuIDEvMiB0aGUgZmlmbyAqLworCQkJKmJ1cnN0X2NvZGUgPSBEQ01EX0JVUlNUODsKKwkJCWJ1cnN0X2J5dGVzID0gODsKKwkJCXJldHZhbCA9IDE7CisJCX0gZWxzZSBpZiAoYnl0ZXNfcGVyX3dvcmQgPT0gMikgeworCQkJLyogZG9uJ3QgYnVyc3QgbW9yZSB0aGFuIDEvMiB0aGUgZmlmbyAqLworCQkJKmJ1cnN0X2NvZGUgPSBEQ01EX0JVUlNUMTY7CisJCQlidXJzdF9ieXRlcyA9IDE2OworCQkJcmV0dmFsID0gMTsKKwkJfSBlbHNlIHsKKwkJCSpidXJzdF9jb2RlID0gRENNRF9CVVJTVDMyOworCQkJYnVyc3RfYnl0ZXMgPSAzMjsKKwkJfQorCX0KKworCXRocmVzaF93b3JkcyA9IGJ1cnN0X2J5dGVzIC8gYnl0ZXNfcGVyX3dvcmQ7CisKKwkvKiB0aHJlc2hfd29yZHMgd2lsbCBiZSBiZXR3ZWVuIDIgYW5kIDggKi8KKwkqdGhyZXNob2xkID0gKFNTQ1IxX1J4VHJlc2godGhyZXNoX3dvcmRzKSAmIFNTQ1IxX1JGVCkKKwkJCXwgKFNTQ1IxX1R4VHJlc2goMTYtdGhyZXNoX3dvcmRzKSAmIFNTQ1IxX1RGVCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCiBzdGF0aWMgdm9pZCBwdW1wX3RyYW5zZmVycyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IChzdHJ1Y3QgZHJpdmVyX2RhdGEgKilkYXRhOwpAQCAtNzAyLDYgKzc5MSw5IEBACiAJdTggYml0cyA9IDA7CiAJdTMyIHNwZWVkID0gMDsKIAl1MzIgY3IwOworCXUzMiBjcjE7CisJdTMyIGRtYV90aHJlc2ggPSBkcnZfZGF0YS0+Y3VyX2NoaXAtPmRtYV90aHJlc2hvbGQ7CisJdTMyIGRtYV9idXJzdCA9IGRydl9kYXRhLT5jdXJfY2hpcC0+ZG1hX2J1cnN0X3NpemU7CiAKIAkvKiBHZXQgY3VycmVudCBzdGF0ZSBpbmZvcm1hdGlvbiAqLwogCW1lc3NhZ2UgPSBkcnZfZGF0YS0+Y3VyX21zZzsKQEAgLTczMSw2ICs4MjMsMTYgQEAKIAkJCXVkZWxheShwcmV2aW91cy0+ZGVsYXlfdXNlY3MpOwogCX0KIAorCS8qIENoZWNrIHRyYW5zZmVyIGxlbmd0aCAqLworCWlmICh0cmFuc2Zlci0+bGVuID4gODE5MSkKKwl7CisJCWRldl93YXJuKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAicHVtcF90cmFuc2ZlcnM6IHRyYW5zZmVyICIKKwkJCQkibGVuZ3RoIGdyZWF0ZXIgdGhhbiA4MTkxXG4iKTsKKwkJbWVzc2FnZS0+c3RhdHVzID0gLUVJTlZBTDsKKwkJZ2l2ZWJhY2soZHJ2X2RhdGEpOworCQlyZXR1cm47CisJfQorCiAJLyogU2V0dXAgdGhlIHRyYW5zZmVyIHN0YXRlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRyYW5zZmVyICovCiAJaWYgKGZsdXNoKGRydl9kYXRhKSA9PSAwKSB7CiAJCWRldl9lcnIoJmRydl9kYXRhLT5wZGV2LT5kZXYsICJwdW1wX3RyYW5zZmVyczogZmx1c2ggZmFpbGVkXG4iKTsKQEAgLTc0NywxNyArODQ5LDE1IEBACiAJZHJ2X2RhdGEtPnJ4X2VuZCA9IGRydl9kYXRhLT5yeCArIHRyYW5zZmVyLT5sZW47CiAJZHJ2X2RhdGEtPnJ4X2RtYSA9IHRyYW5zZmVyLT5yeF9kbWE7CiAJZHJ2X2RhdGEtPnR4X2RtYSA9IHRyYW5zZmVyLT50eF9kbWE7Ci0JZHJ2X2RhdGEtPmxlbiA9IHRyYW5zZmVyLT5sZW47CisJZHJ2X2RhdGEtPmxlbiA9IHRyYW5zZmVyLT5sZW4gJiBEQ01EX0xFTkdUSDsKIAlkcnZfZGF0YS0+d3JpdGUgPSBkcnZfZGF0YS0+dHggPyBjaGlwLT53cml0ZSA6IG51bGxfd3JpdGVyOwogCWRydl9kYXRhLT5yZWFkID0gZHJ2X2RhdGEtPnJ4ID8gY2hpcC0+cmVhZCA6IG51bGxfcmVhZGVyOwogCWRydl9kYXRhLT5jc19jaGFuZ2UgPSB0cmFuc2Zlci0+Y3NfY2hhbmdlOwogCiAJLyogQ2hhbmdlIHNwZWVkIGFuZCBiaXQgcGVyIHdvcmQgb24gYSBwZXIgdHJhbnNmZXIgKi8KKwljcjAgPSBjaGlwLT5jcjA7CiAJaWYgKHRyYW5zZmVyLT5zcGVlZF9oeiB8fCB0cmFuc2Zlci0+Yml0c19wZXJfd29yZCkgewogCi0JCS8qIERpc2FibGUgY2xvY2sgKi8KLQkJd3JpdGVfU1NDUjAoY2hpcC0+Y3IwICYgflNTQ1IwX1NTRSwgcmVnKTsKLQkJY3IwID0gY2hpcC0+Y3IwOwogCQliaXRzID0gY2hpcC0+Yml0c19wZXJfd29yZDsKIAkJc3BlZWQgPSBjaGlwLT5zcGVlZF9oejsKIApAQCAtNzk2LDE1ICs4OTYsMjQgQEAKIAkJCWRydl9kYXRhLT53cml0ZSA9IGRydl9kYXRhLT53cml0ZSAhPSBudWxsX3dyaXRlciA/CiAJCQkJCQl1MzJfd3JpdGVyIDogbnVsbF93cml0ZXI7CiAJCX0KKwkJLyogaWYgYml0cy93b3JkIGlzIGNoYW5nZWQgaW4gZG1hIG1vZGUsIHRoZW4gbXVzdCBjaGVjayB0aGUKKwkJICogdGhyZXNob2xkcyBhbmQgYnVyc3QgYWxzbyAqLworCQlpZiAoY2hpcC0+ZW5hYmxlX2RtYSkgeworCQkJaWYgKHNldF9kbWFfYnVyc3RfYW5kX3RocmVzaG9sZChjaGlwLCBtZXNzYWdlLT5zcGksCisJCQkJCQkJYml0cywgJmRtYV9idXJzdCwKKwkJCQkJCQkmZG1hX3RocmVzaCkpCisJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJZGV2X3dhcm4oJm1lc3NhZ2UtPnNwaS0+ZGV2LAorCQkJCQkJInB1bXBfdHJhbnNmZXI6ICIKKwkJCQkJCSJETUEgYnVyc3Qgc2l6ZSByZWR1Y2VkIHRvICIKKwkJCQkJCSJtYXRjaCBiaXRzX3Blcl93b3JkXG4iKTsKKwkJfQogCiAJCWNyMCA9IGNsa19kaXYKIAkJCXwgU1NDUjBfTW90b3JvbGEKIAkJCXwgU1NDUjBfRGF0YVNpemUoYml0cyA+IDE2ID8gYml0cyAtIDE2IDogYml0cykKIAkJCXwgU1NDUjBfU1NFCiAJCQl8IChiaXRzID4gMTYgPyBTU0NSMF9FRFNTIDogMCk7Ci0KLQkJLyogU3RhcnQgaXQgYmFjayB1cCAqLwotCQl3cml0ZV9TU0NSMChjcjAsIHJlZyk7CiAJfQogCiAJbWVzc2FnZS0+c3RhdGUgPSBSVU5OSU5HX1NUQVRFOwpAQCAtODIzLDEzICs5MzIsMTMgQEAKIAkJCS8qIE5vIHRhcmdldCBhZGRyZXNzIGluY3JlbWVudCAqLwogCQkJRENNRChkcnZfZGF0YS0+cnhfY2hhbm5lbCkgPSBEQ01EX0ZMT1dTUkMKIAkJCQkJCQl8IGRydl9kYXRhLT5kbWFfd2lkdGgKLQkJCQkJCQl8IGNoaXAtPmRtYV9idXJzdF9zaXplCisJCQkJCQkJfCBkbWFfYnVyc3QKIAkJCQkJCQl8IGRydl9kYXRhLT5sZW47CiAJCWVsc2UKIAkJCURDTUQoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpID0gRENNRF9JTkNUUkdBRERSCiAJCQkJCQkJfCBEQ01EX0ZMT1dTUkMKIAkJCQkJCQl8IGRydl9kYXRhLT5kbWFfd2lkdGgKLQkJCQkJCQl8IGNoaXAtPmRtYV9idXJzdF9zaXplCisJCQkJCQkJfCBkbWFfYnVyc3QKIAkJCQkJCQl8IGRydl9kYXRhLT5sZW47CiAKIAkJLyogU2V0dXAgdHggRE1BIENoYW5uZWwgKi8KQEAgLTg0MCwxMyArOTQ5LDEzIEBACiAJCQkvKiBObyBzb3VyY2UgYWRkcmVzcyBpbmNyZW1lbnQgKi8KIAkJCURDTUQoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpID0gRENNRF9GTE9XVFJHCiAJCQkJCQkJfCBkcnZfZGF0YS0+ZG1hX3dpZHRoCi0JCQkJCQkJfCBjaGlwLT5kbWFfYnVyc3Rfc2l6ZQorCQkJCQkJCXwgZG1hX2J1cnN0CiAJCQkJCQkJfCBkcnZfZGF0YS0+bGVuOwogCQllbHNlCiAJCQlEQ01EKGRydl9kYXRhLT50eF9jaGFubmVsKSA9IERDTURfSU5DU1JDQUREUgogCQkJCQkJCXwgRENNRF9GTE9XVFJHCiAJCQkJCQkJfCBkcnZfZGF0YS0+ZG1hX3dpZHRoCi0JCQkJCQkJfCBjaGlwLT5kbWFfYnVyc3Rfc2l6ZQorCQkJCQkJCXwgZG1hX2J1cnN0CiAJCQkJCQkJfCBkcnZfZGF0YS0+bGVuOwogCiAJCS8qIEVuYWJsZSBkbWEgZW5kIGlycXMgb24gU1NQIHRvIGRldGVjdCBlbmQgb2YgdHJhbnNmZXIgKi8KQEAgLTg1NiwxNiArOTY1LDExIEBACiAJCS8qIEZpeCBtZSwgbmVlZCB0byBoYW5kbGUgY3MgcG9sYXJpdHkgKi8KIAkJZHJ2X2RhdGEtPmNzX2NvbnRyb2woUFhBMlhYX0NTX0FTU0VSVCk7CiAKLQkJLyogR28gYmFieSwgZ28gKi8KKwkJLyogQ2xlYXIgc3RhdHVzIGFuZCBzdGFydCBETUEgZW5naW5lICovCisJCWNyMSA9IGNoaXAtPmNyMSB8IGRtYV90aHJlc2ggfCBkcnZfZGF0YS0+ZG1hX2NyMTsKIAkJd3JpdGVfU1NTUihkcnZfZGF0YS0+Y2xlYXJfc3IsIHJlZyk7CiAJCURDU1IoZHJ2X2RhdGEtPnJ4X2NoYW5uZWwpIHw9IERDU1JfUlVOOwogCQlEQ1NSKGRydl9kYXRhLT50eF9jaGFubmVsKSB8PSBEQ1NSX1JVTjsKLQkJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSAhPSBQWEEyNXhfU1NQKQotCQkJd3JpdGVfU1NUTyhjaGlwLT50aW1lb3V0LCByZWcpOwotCQl3cml0ZV9TU0NSMShjaGlwLT5jcjEKLQkJCQl8IGNoaXAtPmRtYV90aHJlc2hvbGQKLQkJCQl8IGRydl9kYXRhLT5kbWFfY3IxLAotCQkJCXJlZyk7CiAJfSBlbHNlIHsKIAkJLyogRW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgaW50ZXJydXB0IGhhbmRsZXIJKi8KIAkJZHJ2X2RhdGEtPnRyYW5zZmVyX2hhbmRsZXIgPSBpbnRlcnJ1cHRfdHJhbnNmZXI7CkBAIC04NzMsMTQgKzk3NywyNSBAQAogCQkvKiBGaXggbWUsIG5lZWQgdG8gaGFuZGxlIGNzIHBvbGFyaXR5ICovCiAJCWRydl9kYXRhLT5jc19jb250cm9sKFBYQTJYWF9DU19BU1NFUlQpOwogCi0JCS8qIEdvIGJhYnksIGdvICovCisJCS8qIENsZWFyIHN0YXR1cyAgKi8KKwkJY3IxID0gY2hpcC0+Y3IxIHwgY2hpcC0+dGhyZXNob2xkIHwgZHJ2X2RhdGEtPmludF9jcjE7CiAJCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmNsZWFyX3NyLCByZWcpOworCX0KKworCS8qIHNlZSBpZiB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgY29uZmlnIHJlZ2lzdGVycyAqLworCWlmICgocmVhZF9TU0NSMChyZWcpICE9IGNyMCkKKwkJfHwgKHJlYWRfU1NDUjEocmVnKSAmIFNTQ1IxX0NIQU5HRV9NQVNLKSAhPQorCQkJKGNyMSAmIFNTQ1IxX0NIQU5HRV9NQVNLKSkgeworCisJCXdyaXRlX1NTQ1IwKGNyMCAmIH5TU0NSMF9TU0UsIHJlZyk7CiAJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKIAkJCXdyaXRlX1NTVE8oY2hpcC0+dGltZW91dCwgcmVnKTsKLQkJd3JpdGVfU1NDUjEoY2hpcC0+Y3IxCi0JCQkJfCBjaGlwLT50aHJlc2hvbGQKLQkJCQl8IGRydl9kYXRhLT5pbnRfY3IxLAotCQkJCXJlZyk7CisJCXdyaXRlX1NTQ1IxKGNyMSwgcmVnKTsKKwkJd3JpdGVfU1NDUjAoY3IwLCByZWcpOworCX0gZWxzZSB7CisJCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKKwkJCXdyaXRlX1NTVE8oY2hpcC0+dGltZW91dCwgcmVnKTsKKwkJd3JpdGVfU1NDUjEoY3IxLCByZWcpOwogCX0KIH0KIApAQCAtOTE1LDkgKzEwMzAsOSBAQAogCQkJCQkJc3RydWN0IHNwaV90cmFuc2ZlciwKIAkJCQkJCXRyYW5zZmVyX2xpc3QpOwogCi0JLyogU2V0dXAgdGhlIFNTUCB1c2luZyB0aGUgcGVyIGNoaXAgY29uZmlndXJhdGlvbiAqLworCS8qIHByZXBhcmUgdG8gc2V0dXAgdGhlIFNTUCwgaW4gcHVtcF90cmFuc2ZlcnMsIHVzaW5nIHRoZSBwZXIKKwkgKiBjaGlwIGNvbmZpZ3VyYXRpb24gKi8KIAlkcnZfZGF0YS0+Y3VyX2NoaXAgPSBzcGlfZ2V0X2N0bGRhdGEoZHJ2X2RhdGEtPmN1cl9tc2ctPnNwaSk7Ci0JcmVzdG9yZV9zdGF0ZShkcnZfZGF0YSk7CiAKIAkvKiBNYXJrIGFzIGJ1c3kgYW5kIGxhdW5jaCB0cmFuc2ZlcnMgKi8KIAl0YXNrbGV0X3NjaGVkdWxlKCZkcnZfZGF0YS0+cHVtcF90cmFuc2ZlcnMpOwpAQCAtOTYzLDYzICsxMDc4LDc3IEBACiAJCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CiAKIAlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1AKLQkJCSYmIChzcGktPmJpdHNfcGVyX3dvcmQgPCA0IHx8IHNwaS0+Yml0c19wZXJfd29yZCA+IDMyKSkKKwkJJiYgKHNwaS0+Yml0c19wZXJfd29yZCA8IDQgfHwgc3BpLT5iaXRzX3Blcl93b3JkID4gMzIpKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHNldHVwOiBzc3BfdHlwZT0lZCwgYml0cy93cmQ9JWQgIgorCQkJCSJiL3cgbm90IDQtMzIgZm9yIHR5cGUgbm9uLVBYQTI1eF9TU1BcbiIsCisJCQkJZHJ2X2RhdGEtPnNzcF90eXBlLCBzcGktPmJpdHNfcGVyX3dvcmQpOwogCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmIChzcGktPmJpdHNfcGVyX3dvcmQgPCA0IHx8IHNwaS0+Yml0c19wZXJfd29yZCA+IDE2KQorCX0KKwllbHNlIGlmIChkcnZfZGF0YS0+c3NwX3R5cGUgPT0gUFhBMjV4X1NTUAorCQkJJiYgKHNwaS0+Yml0c19wZXJfd29yZCA8IDQKKwkJCQl8fCBzcGktPmJpdHNfcGVyX3dvcmQgPiAxNikpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgc2V0dXA6IHNzcF90eXBlPSVkLCBiaXRzL3dyZD0lZCAiCisJCQkJImIvdyBub3QgNC0xNiBmb3IgdHlwZSBQWEEyNXhfU1NQXG4iLAorCQkJCWRydl9kYXRhLT5zc3BfdHlwZSwgc3BpLT5iaXRzX3Blcl93b3JkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JLyogT25seSBhbGxvYyAob3IgdXNlIGNoaXBfaW5mbykgb24gZmlyc3Qgc2V0dXAgKi8KKwkvKiBPbmx5IGFsbG9jIG9uIGZpcnN0IHNldHVwICovCiAJY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShzcGkpOwotCWlmIChjaGlwID09IE5VTEwpIHsKKwlpZiAoIWNoaXApIHsKIAkJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGlwX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjaGlwKQorCQlpZiAoIWNoaXApIHsKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LAorCQkJCSJmYWlsZWQgc2V0dXA6IGNhbid0IGFsbG9jYXRlIGNoaXAgZGF0YVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCiAJCWNoaXAtPmNzX2NvbnRyb2wgPSBudWxsX2NzX2NvbnRyb2w7CiAJCWNoaXAtPmVuYWJsZV9kbWEgPSAwOwotCQljaGlwLT50aW1lb3V0ID0gU1NQX1RJTUVPVVQoMTAwMCk7CisJCWNoaXAtPnRpbWVvdXQgPSAxMDAwOwogCQljaGlwLT50aHJlc2hvbGQgPSBTU0NSMV9SeFRyZXNoKDEpIHwgU1NDUjFfVHhUcmVzaCgxKTsKIAkJY2hpcC0+ZG1hX2J1cnN0X3NpemUgPSBkcnZfZGF0YS0+bWFzdGVyX2luZm8tPmVuYWJsZV9kbWEgPwogCQkJCQlEQ01EX0JVUlNUOCA6IDA7Ci0KLQkJY2hpcF9pbmZvID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CiAJfQogCisJLyogcHJvdG9jb2wgZHJpdmVycyBtYXkgY2hhbmdlIHRoZSBjaGlwIHNldHRpbmdzLCBzby4uLgorCSAqIGlmIGNoaXBfaW5mbyBleGlzdHMsIHVzZSBpdCAqLworCWNoaXBfaW5mbyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOworCiAJLyogY2hpcF9pbmZvIGlzbid0IGFsd2F5cyBuZWVkZWQgKi8KKwljaGlwLT5jcjEgPSAwOwogCWlmIChjaGlwX2luZm8pIHsKIAkJaWYgKGNoaXBfaW5mby0+Y3NfY29udHJvbCkKIAkJCWNoaXAtPmNzX2NvbnRyb2wgPSBjaGlwX2luZm8tPmNzX2NvbnRyb2w7CiAKLQkJY2hpcC0+dGltZW91dCA9IFNTUF9USU1FT1VUKGNoaXBfaW5mby0+dGltZW91dF9taWNyb3NlY3MpOworCQljaGlwLT50aW1lb3V0ID0gY2hpcF9pbmZvLT50aW1lb3V0OwogCi0JCWNoaXAtPnRocmVzaG9sZCA9IFNTQ1IxX1J4VHJlc2goY2hpcF9pbmZvLT5yeF90aHJlc2hvbGQpCi0JCQkJCXwgU1NDUjFfVHhUcmVzaChjaGlwX2luZm8tPnR4X3RocmVzaG9sZCk7CisJCWNoaXAtPnRocmVzaG9sZCA9IChTU0NSMV9SeFRyZXNoKGNoaXBfaW5mby0+cnhfdGhyZXNob2xkKSAmCisJCQkJCQkJCVNTQ1IxX1JGVCkgfAorCQkJCShTU0NSMV9UeFRyZXNoKGNoaXBfaW5mby0+dHhfdGhyZXNob2xkKSAmCisJCQkJCQkJCVNTQ1IxX1RGVCk7CiAKIAkJY2hpcC0+ZW5hYmxlX2RtYSA9IGNoaXBfaW5mby0+ZG1hX2J1cnN0X3NpemUgIT0gMAogCQkJCQkmJiBkcnZfZGF0YS0+bWFzdGVyX2luZm8tPmVuYWJsZV9kbWE7CiAJCWNoaXAtPmRtYV90aHJlc2hvbGQgPSAwOwogCi0JCWlmIChjaGlwLT5lbmFibGVfZG1hKSB7Ci0JCQlpZiAoY2hpcF9pbmZvLT5kbWFfYnVyc3Rfc2l6ZSA8PSA4KSB7Ci0JCQkJY2hpcC0+ZG1hX3RocmVzaG9sZCA9IFNTQ1IxX1J4VHJlc2goOCkKLQkJCQkJCQl8IFNTQ1IxX1R4VHJlc2goOCk7Ci0JCQkJY2hpcC0+ZG1hX2J1cnN0X3NpemUgPSBEQ01EX0JVUlNUODsKLQkJCX0gZWxzZSBpZiAoY2hpcF9pbmZvLT5kbWFfYnVyc3Rfc2l6ZSA8PSAxNikgewotCQkJCWNoaXAtPmRtYV90aHJlc2hvbGQgPSBTU0NSMV9SeFRyZXNoKDE2KQotCQkJCQkJCXwgU1NDUjFfVHhUcmVzaCgxNik7Ci0JCQkJY2hpcC0+ZG1hX2J1cnN0X3NpemUgPSBEQ01EX0JVUlNUMTY7Ci0JCQl9IGVsc2UgewotCQkJCWNoaXAtPmRtYV90aHJlc2hvbGQgPSBTU0NSMV9SeFRyZXNoKDMyKQotCQkJCQkJCXwgU1NDUjFfVHhUcmVzaCgzMik7Ci0JCQkJY2hpcC0+ZG1hX2J1cnN0X3NpemUgPSBEQ01EX0JVUlNUMzI7Ci0JCQl9Ci0JCX0KLQotCiAJCWlmIChjaGlwX2luZm8tPmVuYWJsZV9sb29wYmFjaykKIAkJCWNoaXAtPmNyMSA9IFNTQ1IxX0xCTTsKIAl9CiAKKwkvKiBzZXQgZG1hIGJ1cnN0IGFuZCB0aHJlc2hvbGQgb3V0c2lkZSBvZiBjaGlwX2luZm8gcGF0aCBzbyB0aGF0IGlmCisJICogY2hpcF9pbmZvIGdvZXMgYXdheSBhZnRlciBzZXR0aW5nIGNoaXAtPmVuYWJsZV9kbWEsIHRoZQorCSAqIGJ1cnN0IGFuZCB0aHJlc2hvbGQgY2FuIHN0aWxsIHJlc3BvbmQgdG8gY2hhbmdlcyBpbiBiaXRzX3Blcl93b3JkICovCisJaWYgKGNoaXAtPmVuYWJsZV9kbWEpIHsKKwkJLyogc2V0IHVwIGxlZ2FsIGJ1cnN0IGFuZCB0aHJlc2hvbGQgZm9yIGRtYSAqLworCQlpZiAoc2V0X2RtYV9idXJzdF9hbmRfdGhyZXNob2xkKGNoaXAsIHNwaSwgc3BpLT5iaXRzX3Blcl93b3JkLAorCQkJCQkJJmNoaXAtPmRtYV9idXJzdF9zaXplLAorCQkJCQkJJmNoaXAtPmRtYV90aHJlc2hvbGQpKSB7CisJCQlkZXZfd2Fybigmc3BpLT5kZXYsICJpbiBzZXR1cDogRE1BIGJ1cnN0IHNpemUgcmVkdWNlZCAiCisJCQkJCSJ0byBtYXRjaCBiaXRzX3Blcl93b3JkXG4iKTsKKwkJfQorCX0KKwogCWlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDFfVklSVCkKIAkJY2xrX2RpdiA9IFNTUDFfU2VyQ2xrRGl2KHNwaS0+bWF4X3NwZWVkX2h6KTsKIAllbHNlIGlmIChkcnZfZGF0YS0+aW9hZGRyID09IFNTUDJfVklSVCkKQEAgLTEwMjcsNyArMTE1NiwxMSBAQAogCWVsc2UgaWYgKGRydl9kYXRhLT5pb2FkZHIgPT0gU1NQM19WSVJUKQogCQljbGtfZGl2ID0gU1NQM19TZXJDbGtEaXYoc3BpLT5tYXhfc3BlZWRfaHopOwogCWVsc2UKKwl7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHNldHVwOiB1bmtub3duIElPIGFkZHJlc3M9MHglcFxuIiwKKwkJCWRydl9kYXRhLT5pb2FkZHIpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJY2hpcC0+c3BlZWRfaHogPSBzcGktPm1heF9zcGVlZF9oejsKIAogCWNoaXAtPmNyMCA9IGNsa19kaXYKQEAgLTEwMzYsOCArMTE2OSw5IEBACiAJCQkJc3BpLT5iaXRzX3Blcl93b3JkIC0gMTYgOiBzcGktPmJpdHNfcGVyX3dvcmQpCiAJCQl8IFNTQ1IwX1NTRQogCQkJfCAoc3BpLT5iaXRzX3Blcl93b3JkID4gMTYgPyBTU0NSMF9FRFNTIDogMCk7Ci0JY2hpcC0+Y3IxIHw9ICgoKHNwaS0+bW9kZSAmIFNQSV9DUEhBKSAhPSAwKSA8PCA0KQotCQkJfCAoKChzcGktPm1vZGUgJiBTUElfQ1BPTCkgIT0gMCkgPDwgMyk7CisJY2hpcC0+Y3IxICY9IH4oU1NDUjFfU1BPIHwgU1NDUjFfU1BIKTsKKwljaGlwLT5jcjEgfD0gKCgoc3BpLT5tb2RlICYgU1BJX0NQSEEpICE9IDApID8gU1NDUjFfU1BIIDogMCkKKwkJCXwgKCgoc3BpLT5tb2RlICYgU1BJX0NQT0wpICE9IDApID8gU1NDUjFfU1BPIDogMCk7CiAKIAkvKiBOT1RFOiAgUFhBMjV4X1NTUCBfY291bGRfIHVzZSBleHRlcm5hbCBjbG9ja2luZyAuLi4gKi8KIAlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCkBAIC0xMDcxLDcgKzEyMDUsNiBAQAogCQljaGlwLT53cml0ZSA9IHUzMl93cml0ZXI7CiAJfSBlbHNlIHsKIAkJZGV2X2Vycigmc3BpLT5kZXYsICJpbnZhbGlkIHdvcmRzaXplXG4iKTsKLQkJa2ZyZWUoY2hpcCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAljaGlwLT5iaXRzX3Blcl93b3JkID0gc3BpLT5iaXRzX3Blcl93b3JkOwpAQCAtMTE2Miw2ICsxMjk1LDEyIEBACiAJaW50IHN0YXR1czsKIAogCXN0YXR1cyA9IHN0b3BfcXVldWUoZHJ2X2RhdGEpOworCS8qIHdlIGFyZSB1bmxvYWRpbmcgdGhlIG1vZHVsZSBvciBmYWlsaW5nIHRvIGxvYWQgKG9ubHkgdHdvIGNhbGxzCisJICogdG8gdGhpcyByb3V0aW5lKSwgYW5kIG5laXRoZXIgY2FsbCBjYW4gaGFuZGxlIGEgcmV0dXJuIHZhbHVlLgorCSAqIEhvd2V2ZXIsIGRlc3Ryb3lfd29ya3F1ZXVlIGNhbGxzIGZsdXNoX3dvcmtxdWV1ZSwgYW5kIHRoYXQgd2lsbAorCSAqIGJsb2NrIHVudGlsIGFsbCB3b3JrIGlzIGRvbmUuICBJZiB0aGUgcmVhc29uIHRoYXQgc3RvcF9xdWV1ZQorCSAqIHRpbWVkIG91dCBpcyB0aGF0IHRoZSB3b3JrIHdpbGwgbmV2ZXIgZmluaXNoLCB0aGVuIGl0IGRvZXMgbm8KKwkgKiBnb29kIHRvIGNhbGwgZGVzdHJveV93b3JrcXVldWUsIHNvIHJldHVybiBhbnl3YXkuICovCiAJaWYgKHN0YXR1cyAhPSAwKQogCQlyZXR1cm4gc3RhdHVzOwogCkBAIC0xMzYwLDcgKzE0OTksMTYgQEAKIAkvKiBSZW1vdmUgdGhlIHF1ZXVlICovCiAJc3RhdHVzID0gZGVzdHJveV9xdWV1ZShkcnZfZGF0YSk7CiAJaWYgKHN0YXR1cyAhPSAwKQotCQlyZXR1cm4gc3RhdHVzOworCQkvKiB0aGUga2VybmVsIGRvZXMgbm90IGNoZWNrIHRoZSByZXR1cm4gc3RhdHVzIG9mIHRoaXMKKwkJICogdGhpcyByb3V0aW5lIChtb2QtPmV4aXQsIHdpdGhpbiB0aGUga2VybmVsKS4gIFRoZXJlZm9yZQorCQkgKiBub3RoaW5nIGlzIGdhaW5lZCBieSByZXR1cm5pbmcgZnJvbSBoZXJlLCB0aGUgbW9kdWxlIGlzCisJCSAqIGdvaW5nIGF3YXkgcmVnYXJkbGVzcywgYW5kIHdlIHNob3VsZCBub3QgbGVhdmUgYW55IG1vcmUKKwkJICogcmVzb3VyY2VzIGFsbG9jYXRlZCB0aGFuIG5lY2Vzc2FyeS4gIFdlIGNhbm5vdCBmcmVlIHRoZQorCQkgKiBtZXNzYWdlIG1lbW9yeSBpbiBkcnZfZGF0YS0+cXVldWUsIGJ1dCB3ZSBjYW4gcmVsZWFzZSB0aGUKKwkJICogcmVzb3VyY2VzIGJlbG93LiAgSSB0aGluayB0aGUga2VybmVsIHNob3VsZCBob25vciAtRUJVU1kKKwkJICogcmV0dXJucyBidXQuLi4gKi8KKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicHhhMnh4X3NwaV9yZW1vdmU6IHdvcmtxdWV1ZSB3aWxsIG5vdCAiCisJCQkiY29tcGxldGUsIG1lc3NhZ2UgbWVtb3J5IG5vdCBmcmVlZFxuIik7CiAKIAkvKiBEaXNhYmxlIHRoZSBTU1AgYXQgdGhlIHBlcmlwaGVyYWwgYW5kIFNPQyBsZXZlbCAqLwogCXdyaXRlX1NTQ1IwKDAsIGRydl9kYXRhLT5pb2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGkuYwppbmRleCAyNzBlNjIxLi42MzA3NDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGkuYwpAQCAtMzY2LDcgKzM2Niw2IEBACiAKIAljbGFzc19kZXZpY2VfaW5pdGlhbGl6ZSgmbWFzdGVyLT5jZGV2KTsKIAltYXN0ZXItPmNkZXYuY2xhc3MgPSAmc3BpX21hc3Rlcl9jbGFzczsKLQlrb2JqX3NldF9rc2V0X3MoJm1hc3Rlci0+Y2Rldiwgc3BpX21hc3Rlcl9jbGFzcy5zdWJzeXMpOwogCW1hc3Rlci0+Y2Rldi5kZXYgPSBnZXRfZGV2aWNlKGRldik7CiAJc3BpX21hc3Rlcl9zZXRfZGV2ZGF0YShtYXN0ZXIsICZtYXN0ZXJbMV0pOwogCkBAIC00NjYsMTQgKzQ2NSwyMCBAQAogICovCiBzdHJ1Y3Qgc3BpX21hc3RlciAqc3BpX2J1c251bV90b19tYXN0ZXIodTE2IGJ1c19udW0pCiB7Ci0JY2hhcgkJCW5hbWVbOV07Ci0Jc3RydWN0IGtvYmplY3QJCSpidXM7CisJc3RydWN0IGNsYXNzX2RldmljZQkqY2RldjsKKwlzdHJ1Y3Qgc3BpX21hc3RlcgkqbWFzdGVyID0gTlVMTDsKKwlzdHJ1Y3Qgc3BpX21hc3RlcgkqbTsKIAotCXNucHJpbnRmKG5hbWUsIHNpemVvZiBuYW1lLCAic3BpJXUiLCBidXNfbnVtKTsKLQlidXMgPSBrc2V0X2ZpbmRfb2JqKCZzcGlfbWFzdGVyX2NsYXNzLnN1YnN5cy5rc2V0LCBuYW1lKTsKLQlpZiAoYnVzKQotCQlyZXR1cm4gY29udGFpbmVyX29mKGJ1cywgc3RydWN0IHNwaV9tYXN0ZXIsIGNkZXYua29iaik7Ci0JcmV0dXJuIE5VTEw7CisJZG93bigmc3BpX21hc3Rlcl9jbGFzcy5zZW0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2RldiwgJnNwaV9tYXN0ZXJfY2xhc3MuY2hpbGRyZW4sIG5vZGUpIHsKKwkJbSA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3Qgc3BpX21hc3RlciwgY2Rldik7CisJCWlmIChtLT5idXNfbnVtID09IGJ1c19udW0pIHsKKwkJCW1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG0pOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXAoJnNwaV9tYXN0ZXJfY2xhc3Muc2VtKTsKKwlyZXR1cm4gbWFzdGVyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3BpX2J1c251bV90b19tYXN0ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwppbmRleCBmZjBiMDQ4Li5lOTc5OGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKQEAgLTExMiw2ICsxMTIsOCBAQAogewkJCQkJCQkJXAogCXUzMiBkYXRhOwkJCQkJCVwKIAljb25zdCB0eXBlICogdHggPSBtcGM4M3h4X3NwaS0+dHg7CQkJXAorCWlmICghdHgpCQkJCQkJXAorCQlyZXR1cm4gMDsJCQkJCVwKIAlkYXRhID0gKnR4Kys7CQkJCQkJXAogCW1wYzgzeHhfc3BpLT50eCA9IHR4OwkJCQkJXAogCXJldHVybiBkYXRhOwkJCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCmluZGV4IDJlYmUxZmMuLjY1MTM3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYwpAQCAtMTAsOSArMTAsNiBAQAogICoKICovCiAKLQotLy8jZGVmaW5lIERFQlVHCi0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTQ0LDYgKzQxLDkgQEAKIAlpbnQJCQkgbGVuOwogCWludAkJCSBjb3VudDsKIAorCWludAkJCSgqc2V0X2NzKShzdHJ1Y3QgczNjMjQxMF9zcGlfaW5mbyAqc3BpLAorCQkJCQkgIGludCBjcywgaW50IHBvbCk7CisKIAkvKiBkYXRhIGJ1ZmZlcnMgKi8KIAljb25zdCB1bnNpZ25lZCBjaGFyCSp0eDsKIAl1bnNpZ25lZCBjaGFyCQkqcng7CkBAIC02NCw2ICs2NCwxMSBAQAogCXJldHVybiBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNkZXYtPm1hc3Rlcik7CiB9CiAKK3N0YXRpYyB2b2lkIHMzYzI0eHhfc3BpX2dwaW9jcyhzdHJ1Y3QgczNjMjQxMF9zcGlfaW5mbyAqc3BpLCBpbnQgY3MsIGludCBwb2wpCit7CisJczNjMjQxMF9ncGlvX3NldHBpbihzcGktPnBpbl9jcywgcG9sKTsKK30KKwogc3RhdGljIHZvaWQgczNjMjR4eF9zcGlfY2hpcHNlbChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHRvX2h3KHNwaSk7CkBAIC03MiwxMCArNzcsNyBAQAogCiAJc3dpdGNoICh2YWx1ZSkgewogCWNhc2UgQklUQkFOR19DU19JTkFDVElWRToKLQkJaWYgKGh3LT5wZGF0YS0+c2V0X2NzKQotCQkJaHctPnBkYXRhLT5zZXRfY3MoaHctPnBkYXRhLCB2YWx1ZSwgY3Nwb2wpOwotCQllbHNlCi0JCQlzM2MyNDEwX2dwaW9fc2V0cGluKGh3LT5wZGF0YS0+cGluX2NzLCBjc3BvbCBeIDEpOworCQlody0+cGRhdGEtPnNldF9jcyhody0+cGRhdGEsIHNwaS0+Y2hpcF9zZWxlY3QsIGNzcG9sXjEpOwogCQlicmVhazsKIAogCWNhc2UgQklUQkFOR19DU19BQ1RJVkU6CkBAIC05NiwxNCArOTgsOSBAQAogCQkvKiB3cml0ZSBuZXcgY29uZmlncmF0aW9uICovCiAKIAkJd3JpdGViKHNwY29uLCBody0+cmVncyArIFMzQzI0MTBfU1BDT04pOwotCi0JCWlmIChody0+cGRhdGEtPnNldF9jcykKLQkJCWh3LT5wZGF0YS0+c2V0X2NzKGh3LT5wZGF0YSwgdmFsdWUsIGNzcG9sKTsKLQkJZWxzZQotCQkJczNjMjQxMF9ncGlvX3NldHBpbihody0+cGRhdGEtPnBpbl9jcywgY3Nwb2wpOworCQlody0+cGRhdGEtPnNldF9jcyhody0+cGRhdGEsIHNwaS0+Y2hpcF9zZWxlY3QsIGNzcG9sKTsKIAogCQlicmVhazsKLQogCX0KIH0KIApAQCAtMTc0LDcgKzE3MSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh3X3R4Ynl0ZShzdHJ1Y3QgczNjMjR4eF9zcGkgKmh3LCBpbnQgY291bnQpCiB7Ci0JcmV0dXJuIGh3LT50eCA/IGh3LT50eFtjb3VudF0gOiAweGZmOworCXJldHVybiBody0+dHggPyBody0+dHhbY291bnRdIDogMDsKIH0KIAogc3RhdGljIGludCBzM2MyNHh4X3NwaV90eHJ4KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCkBAIC0zMzAsOSArMzI3LDEyIEBACiAJLyogc2V0dXAgYW55IGdwaW8gd2UgY2FuICovCiAKIAlpZiAoIWh3LT5wZGF0YS0+c2V0X2NzKSB7CisJCWh3LT5zZXRfY3MgPSBzM2MyNHh4X3NwaV9ncGlvY3M7CisKIAkJczNjMjQxMF9ncGlvX3NldHBpbihody0+cGRhdGEtPnBpbl9jcywgMSk7CiAJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oaHctPnBkYXRhLT5waW5fY3MsIFMzQzI0MTBfR1BJT19PVVRQVVQpOwotCX0KKwl9IGVsc2UKKwkJaHctPnNldF9jcyA9IGh3LT5wZGF0YS0+c2V0X2NzOwogCiAJLyogcmVnaXN0ZXIgb3VyIHNwaSBjb250cm9sbGVyICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4X2dwaW8uYyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4X2dwaW8uYwppbmRleCBhNWQyY2RmLi5lZGE1M2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eF9ncGlvLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHhfZ3Bpby5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KQEAgLTIyLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3NwaS1ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAogc3RydWN0IHMzYzI0MTBfc3BpZ3BpbyB7CiAJc3RydWN0IHNwaV9iaXRiYW5nCQkgYml0YmFuZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGMvenMuYyBiL2RyaXZlcnMvdGMvenMuYwppbmRleCA3OTJiZWNkLi5mYzMxOTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RjL3pzLmMKKysrIGIvZHJpdmVycy90Yy96cy5jCkBAIC0xMjM4LDcgKzEyMzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCByc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCBkZWNfc2VyaWFsICppbmZvID0gKHN0cnVjdCBkZWNfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgd2FzX3N0b3BwZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9peGouYyBiL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCmluZGV4IDFiNjAxYjYuLmRmNGNjMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCkBAIC0yNzQ3LDcgKzI3NDcsNyBAQAogc3RhdGljIHNzaXplX3QgaXhqX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlX3AsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqIHBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBpID0gKnBwb3M7Ci0JSVhKICogaiA9IGdldF9peGooTlVNKGZpbGVfcC0+Zl9kZW50cnktPmRfaW5vZGUpKTsKKwlJWEogKiBqID0gZ2V0X2l4aihOVU0oZmlsZV9wLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7CiAKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIApAQCAtMjgwNCw3ICsyODA0LDcgQEAKIHsKIAlpbnQgcHJlX3JldHZhbDsKIAlzc2l6ZV90IHJlYWRfcmV0dmFsID0gMDsKLQlJWEogKmogPSBnZXRfaXhqKE5VTShmaWxlX3AtPmZfZGVudHJ5LT5kX2lub2RlKSk7CisJSVhKICpqID0gZ2V0X2l4aihOVU0oZmlsZV9wLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7CiAKIAlwcmVfcmV0dmFsID0gaXhqX1ByZVJlYWQoaiwgMEwpOwogCXN3aXRjaCAocHJlX3JldHZhbCkgewpAQCAtMjg4Myw3ICsyODgzLDcgQEAKIAlpbnQgcHJlX3JldHZhbDsKIAlzc2l6ZV90IHdyaXRlX3JldHZhbCA9IDA7CiAKLQlJWEogKmogPSBnZXRfaXhqKE5VTShmaWxlX3AtPmZfZGVudHJ5LT5kX2lub2RlKSk7CisJSVhKICpqID0gZ2V0X2l4aihOVU0oZmlsZV9wLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7CiAKIAlwcmVfcmV0dmFsID0gaXhqX1ByZVdyaXRlKGosIDBMKTsKIAlzd2l0Y2ggKHByZV9yZXR2YWwpIHsKQEAgLTQ1ODIsNyArNDU4Miw3IEBACiB7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCi0JSVhKICpqID0gZ2V0X2l4aihOVU0oZmlsZV9wLT5mX2RlbnRyeS0+ZF9pbm9kZSkpOworCUlYSiAqaiA9IGdldF9peGooTlVNKGZpbGVfcC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpOwogCiAJcG9sbF93YWl0KGZpbGVfcCwgJihqLT5wb2xsX3EpLCB3YWl0KTsKIAlpZiAoai0+cmVhZF9idWZmZXJfcmVhZHkgPiAwKQpAQCAtNjY1Nyw3ICs2NjU3LDcgQEAKIAogc3RhdGljIGludCBpeGpfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGVfcCwgaW50IG1vZGUpCiB7Ci0JSVhKICpqID0gZ2V0X2l4aihOVU0oZmlsZV9wLT5mX2RlbnRyeS0+ZF9pbm9kZSkpOworCUlYSiAqaiA9IGdldF9peGooTlVNKGZpbGVfcC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpOwogCiAJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGVfcCwgbW9kZSwgJmotPmFzeW5jX3F1ZXVlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCA3ZjFmYTk1Li45ODE5OTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC02NzcsMTAgKzY3NywxMCBAQAogCTUsIDYsIDcsIDgKIH07CiAKLXN0YXRpYyB2b2lkIGFjbV90dHlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKnRlcm1pb3Nfb2xkKQorc3RhdGljIHZvaWQgYWNtX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3Nfb2xkKQogewogCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHRlcm1pb3MgKnRlcm1pb3MgPSB0dHktPnRlcm1pb3M7CisJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zID0gdHR5LT50ZXJtaW9zOwogCXN0cnVjdCB1c2JfY2RjX2xpbmVfY29kaW5nIG5ld2xpbmU7CiAJaW50IG5ld2N0cmwgPSBhY20tPmN0cmxvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCmluZGV4IDYzMDM5NzAuLjYzNzdkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAKIHN0cnVjdCB1c2JscCB7CiAJc3RydWN0IHVzYl9kZXZpY2UgCSpkZXY7CQkJLyogVVNCIGRldmljZSAqLwotCXN0cnVjdCBzZW1hcGhvcmUJc2VtOwkJCS8qIGxvY2tzIHRoaXMgc3RydWN0LCBlc3BlY2lhbGx5ICJkZXYiICovCisJc3RydWN0IG11dGV4CQltdXQ7CQkJLyogbG9ja3MgdGhpcyBzdHJ1Y3QsIGVzcGVjaWFsbHkgImRldiIgKi8KIAljaGFyCQkJKndyaXRlYnVmOwkJLyogd3JpdGUgdHJhbnNmZXJfYnVmZmVyICovCiAJY2hhcgkJCSpyZWFkYnVmOwkJLyogcmVhZCB0cmFuc2Zlcl9idWZmZXIgKi8KIAljaGFyCQkJKnN0YXR1c2J1ZjsJCS8qIHN0YXR1cyB0cmFuc2Zlcl9idWZmZXIgKi8KQEAgLTIxNyw2ICsyMTcsNyBAQAogCXsgMHgwNDA5LCAweGJlZjQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTc2MCAoSFAgT0VNKSAqLwogCXsgMHgwNDA5LCAweGYwYmUsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTkyMCAoSFAgT0VNKSAqLwogCXsgMHgwNDA5LCAweGYxYmUsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTgwMCAoSFAgT0VNKSAqLworCXsgMHgwNDgyLCAweDAwMTAsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEt5b2NlcmEgTWl0YSBGUyA4MjAsIGJ5IHp1dCA8a2VybmVsQHp1dC5kZT4gKi8KIAl7IDAsIDAgfQogfTsKIApAQCAtNDY1LDcgKzQ2Niw3IEBACiAJaW50IHR3b2ludHNbMl07CiAJaW50IHJldHZhbCA9IDA7CiAKLQlkb3duICgmdXNibHAtPnNlbSk7CisJbXV0ZXhfbG9jayAoJnVzYmxwLT5tdXQpOwogCWlmICghdXNibHAtPnByZXNlbnQpIHsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBkb25lOwpAQCAtNjQ0LDE0ICs2NDUsMTQgQEAKIAkJfQogCiBkb25lOgotCXVwICgmdXNibHAtPnNlbSk7CisJbXV0ZXhfdW5sb2NrICgmdXNibHAtPm11dCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHNzaXplX3QgdXNibHBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB1c2JscCAqdXNibHAgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHRpbWVvdXQsIHJ2LCBlcnIgPSAwLCB0cmFuc2Zlcl9sZW5ndGggPSAwOworCWludCB0aW1lb3V0LCBpbnRyLCBydiwgZXJyID0gMCwgdHJhbnNmZXJfbGVuZ3RoID0gMDsKIAlzaXplX3Qgd3JpdGVjb3VudCA9IDA7CiAKIAl3aGlsZSAod3JpdGVjb3VudCA8IGNvdW50KSB7CkBAIC02NjgsMTQgKzY2OSwxNiBAQAogCQkJaWYgKHJ2IDwgMCkKIAkJCQlyZXR1cm4gd3JpdGVjb3VudCA/IHdyaXRlY291bnQgOiAtRUlOVFI7CiAJCX0KLQkJZG93biAoJnVzYmxwLT5zZW0pOworCQlpbnRyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlICgmdXNibHAtPm11dCk7CisJCWlmIChpbnRyKQorCQkJcmV0dXJuIHdyaXRlY291bnQgPyB3cml0ZWNvdW50IDogLUVJTlRSOwogCQlpZiAoIXVzYmxwLT5wcmVzZW50KSB7Ci0JCQl1cCAoJnVzYmxwLT5zZW0pOworCQkJbXV0ZXhfdW5sb2NrICgmdXNibHAtPm11dCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCiAJCWlmICh1c2JscC0+c2xlZXBpbmcpIHsKLQkJCXVwICgmdXNibHAtPnNlbSk7CisJCQltdXRleF91bmxvY2sgKCZ1c2JscC0+bXV0KTsKIAkJCXJldHVybiB3cml0ZWNvdW50ID8gd3JpdGVjb3VudCA6IC1FTk9ERVY7CiAJCX0KIApAQCAtNjg3LDEwICs2OTAsMTAgQEAKIAkJCQllcnIgPSB1c2JscC0+d3JpdGV1cmItPnN0YXR1czsKIAkJCX0gZWxzZQogCQkJCWVyciA9IHVzYmxwX2NoZWNrX3N0YXR1cyh1c2JscCwgZXJyKTsKLQkJCXVwICgmdXNibHAtPnNlbSk7CisJCQltdXRleF91bmxvY2sgKCZ1c2JscC0+bXV0KTsKIAogCQkJLyogaWYgdGhlIGZhdWx0IHdhcyBkdWUgdG8gZGlzY29ubmVjdCwgbGV0IGtodWJkJ3MKLQkJCSAqIGNhbGwgdG8gdXNibHBfZGlzY29ubmVjdCgpIGdyYWIgdXNibHAtPnNlbSAuLi4KKwkJCSAqIGNhbGwgdG8gdXNibHBfZGlzY29ubmVjdCgpIGdyYWIgdXNibHAtPm11dCAuLi4KIAkJCSAqLwogCQkJc2NoZWR1bGUgKCk7CiAJCQljb250aW51ZTsKQEAgLTcwMiw3ICs3MDUsNyBAQAogCQkgKi8KIAkJd3JpdGVjb3VudCArPSB0cmFuc2Zlcl9sZW5ndGg7CiAJCWlmICh3cml0ZWNvdW50ID09IGNvdW50KSB7Ci0JCQl1cCgmdXNibHAtPnNlbSk7CisJCQltdXRleF91bmxvY2soJnVzYmxwLT5tdXQpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNzE0LDcgKzcxNyw3IEBACiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKHVzYmxwLT53cml0ZXVyYi0+dHJhbnNmZXJfYnVmZmVyLCAKIAkJCQkgICBidWZmZXIgKyB3cml0ZWNvdW50LCB0cmFuc2Zlcl9sZW5ndGgpKSB7Ci0JCQl1cCgmdXNibHAtPnNlbSk7CisJCQltdXRleF91bmxvY2soJnVzYmxwLT5tdXQpOwogCQkJcmV0dXJuIHdyaXRlY291bnQgPyB3cml0ZWNvdW50IDogLUVGQVVMVDsKIAkJfQogCkBAIC03MjcsMTAgKzczMCwxMCBAQAogCQkJCWNvdW50ID0gLUVJTzsKIAkJCWVsc2UKIAkJCQljb3VudCA9IHdyaXRlY291bnQgPyB3cml0ZWNvdW50IDogLUVOT01FTTsKLQkJCXVwICgmdXNibHAtPnNlbSk7CisJCQltdXRleF91bmxvY2sgKCZ1c2JscC0+bXV0KTsKIAkJCWJyZWFrOwogCQl9Ci0JCXVwICgmdXNibHAtPnNlbSk7CisJCW11dGV4X3VubG9jayAoJnVzYmxwLT5tdXQpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTczOSwxMiArNzQyLDE0IEBACiBzdGF0aWMgc3NpemVfdCB1c2JscF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCBydjsKKwlpbnQgcnYsIGludHI7CiAKIAlpZiAoIXVzYmxwLT5iaWRpcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duICgmdXNibHAtPnNlbSk7CisJaW50ciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSAoJnVzYmxwLT5tdXQpOworCWlmIChpbnRyKQorCQlyZXR1cm4gLUVJTlRSOwogCWlmICghdXNibHAtPnByZXNlbnQpIHsKIAkJY291bnQgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CkBAIC03NTcsOSArNzYyLDkgQEAKIAkJCWNvdW50ID0gLUVBR0FJTjsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQl1cCgmdXNibHAtPnNlbSk7CisJCW11dGV4X3VubG9jaygmdXNibHAtPm11dCk7CiAJCXJ2ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHVzYmxwLT53YWl0LCB1c2JscC0+cmNvbXBsZXRlIHx8ICF1c2JscC0+cHJlc2VudCk7Ci0JCWRvd24oJnVzYmxwLT5zZW0pOworCQltdXRleF9sb2NrKCZ1c2JscC0+bXV0KTsKIAkJaWYgKHJ2IDwgMCkgewogCQkJY291bnQgPSAtRUlOVFI7CiAJCQlnb3RvIGRvbmU7CkBAIC04MDcsNyArODEyLDcgQEAKIAl9CiAKIGRvbmU6Ci0JdXAgKCZ1c2JscC0+c2VtKTsKKwltdXRleF91bmxvY2sgKCZ1c2JscC0+bXV0KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTg4Niw3ICs4OTEsNyBAQAogCQlnb3RvIGFib3J0OwogCX0KIAl1c2JscC0+ZGV2ID0gZGV2OwotCWluaXRfTVVURVggKCZ1c2JscC0+c2VtKTsKKwltdXRleF9pbml0ICgmdXNibHAtPm11dCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdXNibHAtPndhaXQpOwogCXVzYmxwLT5pZm51bSA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAJdXNibHAtPmludGYgPSBpbnRmOwpAQCAtMTE3OCw3ICsxMTgzLDcgQEAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2llZWUxMjg0X2lkKTsKIAogCW11dGV4X2xvY2sgKCZ1c2JscF9tdXRleCk7Ci0JZG93biAoJnVzYmxwLT5zZW0pOworCW11dGV4X2xvY2sgKCZ1c2JscC0+bXV0KTsKIAl1c2JscC0+cHJlc2VudCA9IDA7CiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CiAKQEAgLTExODcsNyArMTE5Miw3IEBACiAJCQl1c2JscC0+d3JpdGVidWYsIHVzYmxwLT53cml0ZXVyYi0+dHJhbnNmZXJfZG1hKTsKIAl1c2JfYnVmZmVyX2ZyZWUgKHVzYmxwLT5kZXYsIFVTQkxQX0JVRl9TSVpFLAogCQkJdXNibHAtPnJlYWRidWYsIHVzYmxwLT5yZWFkdXJiLT50cmFuc2Zlcl9kbWEpOwotCXVwICgmdXNibHAtPnNlbSk7CisJbXV0ZXhfdW5sb2NrICgmdXNibHAtPm11dCk7CiAKIAlpZiAoIXVzYmxwLT51c2VkKQogCQl1c2JscF9jbGVhbnVwICh1c2JscCk7CkBAIC0xMjAwLDExICsxMjA1LDExIEBACiAKIAkvKiB0aGlzIHJhY2VzIGFnYWluc3Qgbm9ybWFsIGFjY2VzcyBhbmQgb3BlbiAqLwogCW11dGV4X2xvY2sgKCZ1c2JscF9tdXRleCk7Ci0JZG93biAoJnVzYmxwLT5zZW0pOworCW11dGV4X2xvY2sgKCZ1c2JscC0+bXV0KTsKIAkvKiB3ZSB0YWtlIG5vIG1vcmUgSU8gKi8KIAl1c2JscC0+c2xlZXBpbmcgPSAxOwogCXVzYmxwX3VubGlua191cmJzKHVzYmxwKTsKLQl1cCAoJnVzYmxwLT5zZW0pOworCW11dGV4X3VubG9jayAoJnVzYmxwLT5tdXQpOwogCW11dGV4X3VubG9jayAoJnVzYmxwX211dGV4KTsKIAogCXJldHVybiAwOwpAQCAtMTIxNiwxMiArMTIyMSwxMiBAQAogCWludCByOwogCiAJbXV0ZXhfbG9jayAoJnVzYmxwX211dGV4KTsKLQlkb3duICgmdXNibHAtPnNlbSk7CisJbXV0ZXhfbG9jayAoJnVzYmxwLT5tdXQpOwogCiAJdXNibHAtPnNsZWVwaW5nID0gMDsKIAlyID0gaGFuZGxlX2JpZGlyICh1c2JscCk7CiAKLQl1cCAoJnVzYmxwLT5zZW0pOworCW11dGV4X3VubG9jayAoJnVzYmxwLT5tdXQpOwogCW11dGV4X3VubG9jayAoJnVzYmxwX211dGV4KTsKIAogCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCmluZGV4IGY4MzI0ZDguLjNlNjZiMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKQEAgLTcyLDIyICs3Miw2IEBACiAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGFib3V0IHRoaXMsIHNheSBOIGhlcmUuCiAKLWNvbmZpZyBVU0JfTVVMVElUSFJFQURfUFJPQkUKLQlib29sICJVU0IgTXVsdGktdGhyZWFkZWQgcHJvYmUgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgVVNCIGNvcmUgdG8gc3Bhd24gYSBuZXcgdGhyZWFkIGZvcgotCSAgZXZlcnkgVVNCIGRldmljZSB0aGF0IGlzIHByb2JlZC4gIFRoaXMgY2FuIGNhdXNlIGEgc21hbGwgc3BlZWR1cAotCSAgaW4gYm9vdCB0aW1lcyBvbiBzeXN0ZW1zIHdpdGggYSBsb3Qgb2YgZGlmZmVyZW50IFVTQiBkZXZpY2VzLgotCi0JICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgc2FmZSB0byBlbmFibGUsIGJ1dCBpZiBhbnkgb2RkIHByb2JpbmcKLQkgIHByb2JsZW1zIGFyZSBmb3VuZCwgcGxlYXNlIGRpc2FibGUgaXQsIG9yIGR5bmFtaWNhbGx5IHR1cm4gaXQKLQkgIG9mZiBpbiB0aGUgL3N5cy9tb2R1bGUvdXNiY29yZS9wYXJhbWV0ZXJzL211bHRpdGhyZWFkX3Byb2JlCi0JICBmaWxlCi0KLQkgIFdoZW4gaW4gZG91YnQsIHNheSBOLgotCiBjb25maWcgVVNCX09URwogCWJvb2wKIAlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCAzZWQ0Y2IyLi40YjNhNmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC05NjIsNyArOTYyLDExIEBACiAJCQlrZnJlZShkcik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQlzbm9vcCgmcHMtPmRldi0+ZGV2LCAiY29udHJvbCB1cmJcbiIpOworCQlzbm9vcCgmcHMtPmRldi0+ZGV2LCAiY29udHJvbCB1cmI6IGJSZXF1ZXN0PSUwMnggIgorCQkJImJScmVxdWVzdFR5cGU9JTAyeCB3VmFsdWU9JTA0eCAiCisJCQkid0luZGV4PSUwNHggd0xlbmd0aD0lMDR4XG4iLAorCQkJZHItPmJSZXF1ZXN0LCBkci0+YlJlcXVlc3RUeXBlLCBkci0+d1ZhbHVlLAorCQkJZHItPndJbmRleCwgZHItPndMZW5ndGgpOwogCQlicmVhazsKIAogCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfQlVMSzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwppbmRleCBjNTA1Yjc2Li41ZTYyOGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCkBAIC0yNjgsNiArMjY4LDcgQEAKIAlzdHJ1Y3QgZXBfZGV2aWNlICplcF9kZXYgPSB0b19lcF9kZXZpY2UoZGV2KTsKIAogCWRldl9kYmcoZGV2LCAiJXMgY2FsbGVkIGZvciAlc1xuIiwgX19GVU5DVElPTl9fLCBkZXYtPmJ1c19pZCk7CisJZW5kcG9pbnRfZnJlZV9taW5vcihlcF9kZXYpOwogCWtmcmVlKGVwX2Rldik7CiB9CiAKQEAgLTM0OSw3ICszNTAsNiBAQAogCQlzcHJpbnRmKG5hbWUsICJlcF8lMDJ4IiwgZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZlcF9kZXYtPmRldi5wYXJlbnQtPmtvYmosIG5hbWUpOwogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmVwX2Rldi0+ZGV2LmtvYmosICZlcF9kZXZfYXR0cl9ncnApOwotCQllbmRwb2ludF9mcmVlX21pbm9yKGVwX2Rldik7CiAJCWRldmljZV91bnJlZ2lzdGVyKCZlcF9kZXYtPmRldik7CiAJCWVuZHBvaW50LT5lcF9kZXYgPSBOVUxMOwogCQlkZXN0cm95X2VuZHBvaW50X2NsYXNzKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCAyNjUxYzJlLi4xOTg4MjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTg4LDE0ICs4OCw3IEBACiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpraHViZF90YXNrOwogCiAvKiBtdWx0aXRocmVhZGVkIHByb2JlIGxvZ2ljICovCi1zdGF0aWMgaW50IG11bHRpdGhyZWFkX3Byb2JlID0KLSNpZmRlZiBDT05GSUdfVVNCX01VTFRJVEhSRUFEX1BST0JFCi0JMTsKLSNlbHNlCi0JMDsKLSNlbmRpZgotbW9kdWxlX3BhcmFtKG11bHRpdGhyZWFkX3Byb2JlLCBib29sLCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MobXVsdGl0aHJlYWRfcHJvYmUsICJSdW4gZWFjaCBVU0IgZGV2aWNlIHByb2JlIGluIGEgbmV3IHRocmVhZCIpOworc3RhdGljIGludCBtdWx0aXRocmVhZF9wcm9iZSA9IDA7CiAKIC8qIGN5Y2xlIGxlZHMgb24gaHVicyB0aGF0IGFyZW4ndCBibGlua2luZyBmb3IgYXR0ZW50aW9uICovCiBzdGF0aWMgaW50IGJsaW5rZW5saWdodHMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IGI1ZDZhNzkuLjExZGFkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTM3OSw3ICszNzksNyBAQAogewogCWxvZmZfdCByZXR2YWwgPSAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X2xvY2soJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaChvcmlnKSB7CiAJY2FzZSAwOgogCQlpZiAob2Zmc2V0ID4gMCkgewpAQCAtMzk2LDcgKzM5Niw3IEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwppbmRleCA3MmYzZGI5Li44MTJjNzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwpAQCAtNDMsMTQgKzQzLDE2IEBACiAjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNhbTkyNjFfbWF0cml4Lmg+CiAKICNpbmNsdWRlICJhdDkxX3VkYy5oIgogCkBAIC03OCwyNyArODAsMTEgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lIFtdID0gImF0OTFfdWRjIjsKIHN0YXRpYyBjb25zdCBjaGFyIGVwMG5hbWVbXSA9ICJlcDAiOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKgotICogUmVhZCBmcm9tIGEgVURQIHJlZ2lzdGVyLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXQ5MV91ZHBfcmVhZCh1bnNpZ25lZCBpbnQgcmVnKQotewotCXZvaWQgX19pb21lbSAqdWRwX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX1VEUDsKLQotCXJldHVybiBfX3Jhd19yZWFkbCh1ZHBfYmFzZSArIHJlZyk7Ci19Ci0KLS8qCi0gKiBXcml0ZSB0byBhIFVEUCByZWdpc3Rlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0OTFfdWRwX3dyaXRlKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCi17Ci0Jdm9pZCBfX2lvbWVtICp1ZHBfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfVURQOwotCi0JX19yYXdfd3JpdGVsKHZhbHVlLCB1ZHBfYmFzZSArIHJlZyk7Ci19CisjZGVmaW5lIGF0OTFfdWRwX3JlYWQoZGV2LCByZWcpIFwKKwlfX3Jhd19yZWFkbCgoZGV2KS0+dWRwX2Jhc2VhZGRyICsgKHJlZykpCisjZGVmaW5lIGF0OTFfdWRwX3dyaXRlKGRldiwgcmVnLCB2YWwpIFwKKwlfX3Jhd193cml0ZWwoKHZhbCksIChkZXYpLT51ZHBfYmFzZWFkZHIgKyAocmVnKSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjEwLDEzICsxOTYsMTMgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JdG1wID0gYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9GUk1fTlVNKTsKKwl0bXAgPSBhdDkxX3VkcF9yZWFkKHVkYywgQVQ5MV9VRFBfRlJNX05VTSk7CiAJc2VxX3ByaW50ZihzLCAiZnJhbWUgJTA1eDolcyVzIGZyYW1lPSVkXG4iLCB0bXAsCiAJCSh0bXAgJiBBVDkxX1VEUF9GUk1fT0spID8gIiBvayIgOiAiIiwKIAkJKHRtcCAmIEFUOTFfVURQX0ZSTV9FUlIpID8gIiBlcnIiIDogIiIsCiAJCSh0bXAgJiBBVDkxX1VEUF9OVU0pKTsKIAotCXRtcCA9IGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfR0xCX1NUQVQpOworCXRtcCA9IGF0OTFfdWRwX3JlYWQodWRjLCBBVDkxX1VEUF9HTEJfU1RBVCk7CiAJc2VxX3ByaW50ZihzLCAiZ2xic3RhdGUgJTAyeDolcyIgRk9VUkJJVFMgIlxuIiwgdG1wLAogCQkodG1wICYgQVQ5MV9VRFBfUk1XVVBFKSA/ICIgcm13dXBlIiA6ICIiLAogCQkodG1wICYgQVQ5MV9VRFBfUlNNSU5QUikgPyAiIHJzbWlucHIiIDogIiIsCkBAIC0yMjQsMTMgKzIxMCwxMyBAQAogCQkodG1wICYgQVQ5MV9VRFBfQ09ORkcpID8gIiBjb25mZyIgOiAiIiwKIAkJKHRtcCAmIEFUOTFfVURQX0ZBRERFTikgPyAiIGZhZGRlbiIgOiAiIik7CiAKLQl0bXAgPSBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0ZBRERSKTsKKwl0bXAgPSBhdDkxX3VkcF9yZWFkKHVkYywgQVQ5MV9VRFBfRkFERFIpOwogCXNlcV9wcmludGYocywgImZhZGRyICAgJTAzeDolcyBmYWRkPSVkXG4iLCB0bXAsCiAJCSh0bXAgJiBBVDkxX1VEUF9GRU4pID8gIiBmZW4iIDogIiIsCiAJCSh0bXAgJiBBVDkxX1VEUF9GQUREKSk7CiAKLQlwcm9jX2lycV9zaG93KHMsICJpbXIgICAiLCBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0lNUikpOwotCXByb2NfaXJxX3Nob3cocywgImlzciAgICIsIGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfSVNSKSk7CisJcHJvY19pcnFfc2hvdyhzLCAiaW1yICAgIiwgYXQ5MV91ZHBfcmVhZCh1ZGMsIEFUOTFfVURQX0lNUikpOworCXByb2NfaXJxX3Nob3cocywgImlzciAgICIsIGF0OTFfdWRwX3JlYWQodWRjLCBBVDkxX1VEUF9JU1IpKTsKIAogCWlmICh1ZGMtPmVuYWJsZWQgJiYgdWRjLT52YnVzKSB7CiAJCXByb2NfZXBfc2hvdyhzLCAmdWRjLT5lcFswXSk7CkBAIC0yODYsNiArMjcyLDcgQEAKIHN0YXRpYyB2b2lkIGRvbmUoc3RydWN0IGF0OTFfZXAgKmVwLCBzdHJ1Y3QgYXQ5MV9yZXF1ZXN0ICpyZXEsIGludCBzdGF0dXMpCiB7CiAJdW5zaWduZWQJc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCXN0cnVjdCBhdDkxX3VkYwkqdWRjID0gZXAtPnVkYzsKIAogCWxpc3RfZGVsX2luaXQoJnJlcS0+cXVldWUpOwogCWlmIChyZXEtPnJlcS5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQpAQCAtMzAxLDcgKzI4OCw3IEBACiAKIAkvKiBlcDAgaXMgYWx3YXlzIHJlYWR5OyBvdGhlciBlbmRwb2ludHMgbmVlZCBhIG5vbi1lbXB0eSBxdWV1ZSAqLwogCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmIGVwLT5pbnRfbWFzayAhPSAoMSA8PCAwKSkKLQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfSURSLCBlcC0+aW50X21hc2spOworCQlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX0lEUiwgZXAtPmludF9tYXNrKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTU1NCw4ICs1NDEsOCBAQAogCSAqIHJlc2V0L2luaXQgZW5kcG9pbnQgZmlmby4gIE5PVEU6ICBsZWF2ZXMgZmlmb19iYW5rIGFsb25lLAogCSAqIHNpbmNlIGVuZHBvaW50IHJlc2V0cyBkb24ndCByZXNldCBodyBwaW5ncG9uZyBzdGF0ZS4KIAkgKi8KLQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9SU1RfRVAsIGVwLT5pbnRfbWFzayk7Ci0JYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfUlNUX0VQLCAwKTsKKwlhdDkxX3VkcF93cml0ZShkZXYsIEFUOTFfVURQX1JTVF9FUCwgZXAtPmludF9tYXNrKTsKKwlhdDkxX3VkcF93cml0ZShkZXYsIEFUOTFfVURQX1JTVF9FUCwgMCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CkBAIC01NjQsNiArNTUxLDcgQEAKIHN0YXRpYyBpbnQgYXQ5MV9lcF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2VwICogX2VwKQogewogCXN0cnVjdCBhdDkxX2VwCSplcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBhdDkxX2VwLCBlcCk7CisJc3RydWN0IGF0OTFfdWRjCSp1ZGMgPSBlcC0+dWRjOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKIAlpZiAoZXAgPT0gJmVwLT51ZGMtPmVwWzBdKQpAQCAtNTc5LDggKzU2Nyw4IEBACiAKIAkvKiByZXNldCBmaWZvcyBhbmQgZW5kcG9pbnQgKi8KIAlpZiAoZXAtPnVkYy0+Y2xvY2tlZCkgewotCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9SU1RfRVAsIGVwLT5pbnRfbWFzayk7Ci0JCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX1JTVF9FUCwgMCk7CisJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfUlNUX0VQLCBlcC0+aW50X21hc2spOworCQlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX1JTVF9FUCwgMCk7CiAJCV9fcmF3X3dyaXRlbCgwLCBlcC0+Y3JlZyk7CiAJfQogCkBAIC01OTgsNyArNTg2LDcgQEAKIHsKIAlzdHJ1Y3QgYXQ5MV9yZXF1ZXN0ICpyZXE7CiAKLQlyZXEgPSBrY2FsbG9jKDEsIHNpemVvZiAoc3RydWN0IGF0OTFfcmVxdWVzdCksIGdmcF9mbGFncyk7CisJcmVxID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBhdDkxX3JlcXVlc3QpLCBnZnBfZmxhZ3MpOwogCWlmICghcmVxKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNjk1LDEwICs2ODMsMTAgQEAKIAkJCSAqIHJlY29uZmlndXJlcyB0aGUgZW5kcG9pbnRzLgogCQkJICovCiAJCQlpZiAoZGV2LT53YWl0X2Zvcl9jb25maWdfYWNrKSB7Ci0JCQkJdG1wID0gYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9HTEJfU1RBVCk7CisJCQkJdG1wID0gYXQ5MV91ZHBfcmVhZChkZXYsIEFUOTFfVURQX0dMQl9TVEFUKTsKIAkJCQl0bXAgXj0gQVQ5MV9VRFBfQ09ORkc7CiAJCQkJVkRCRygidG9nZ2xlIGNvbmZpZ1xuIik7Ci0JCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfR0xCX1NUQVQsIHRtcCk7CisJCQkJYXQ5MV91ZHBfd3JpdGUoZGV2LCBBVDkxX1VEUF9HTEJfU1RBVCwgdG1wKTsKIAkJCX0KIAkJCWlmIChyZXEtPnJlcS5sZW5ndGggPT0gMCkgewogZXAwX2luX3N0YXR1czoKQEAgLTcyNyw3ICs3MTUsNyBAQAogCiAJaWYgKHJlcSAmJiAhc3RhdHVzKSB7CiAJCWxpc3RfYWRkX3RhaWwgKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKLQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfSUVSLCBlcC0+aW50X21hc2spOworCQlhdDkxX3VkcF93cml0ZShkZXYsIEFUOTFfVURQX0lFUiwgZXAtPmludF9tYXNrKTsKIAl9CiBkb25lOgogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTc1OCw2ICs3NDYsNyBAQAogc3RhdGljIGludCBhdDkxX2VwX3NldF9oYWx0KHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQogewogCXN0cnVjdCBhdDkxX2VwCSplcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBhdDkxX2VwLCBlcCk7CisJc3RydWN0IGF0OTFfdWRjCSp1ZGMgPSBlcC0+dWRjOwogCXUzMiBfX2lvbWVtCSpjcmVnOwogCXUzMgkJY3NyOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CkBAIC03ODUsOCArNzc0LDggQEAKIAkJCWNzciB8PSBBVDkxX1VEUF9GT1JDRVNUQUxMOwogCQkJVkRCRygiaGFsdCAlc1xuIiwgZXAtPmVwLm5hbWUpOwogCQl9IGVsc2UgewotCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfUlNUX0VQLCBlcC0+aW50X21hc2spOwotCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfUlNUX0VQLCAwKTsKKwkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfUlNUX0VQLCBlcC0+aW50X21hc2spOworCQkJYXQ5MV91ZHBfd3JpdGUodWRjLCBBVDkxX1VEUF9SU1RfRVAsIDApOwogCQkJY3NyICY9IH5BVDkxX1VEUF9GT1JDRVNUQUxMOwogCQl9CiAJCV9fcmF3X3dyaXRlbChjc3IsIGNyZWcpOwpAQCAtODEzLDkgKzgwMiwxMSBAQAogCiBzdGF0aWMgaW50IGF0OTFfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCiB7CisJc3RydWN0IGF0OTFfdWRjICp1ZGMgPSB0b191ZGMoZ2FkZ2V0KTsKKwogCWlmICghdG9fdWRjKGdhZGdldCktPmNsb2NrZWQpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0ZSTV9OVU0pICYgQVQ5MV9VRFBfTlVNOworCXJldHVybiBhdDkxX3VkcF9yZWFkKHVkYywgQVQ5MV9VRFBfRlJNX05VTSkgJiBBVDkxX1VEUF9OVU07CiB9CiAKIHN0YXRpYyBpbnQgYXQ5MV93YWtldXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKQEAgLTgzMywxMSArODI0LDExIEBACiAKIAkvKiBOT1RFOiAgc29tZSAiZWFybHkgdmVyc2lvbnMiIGhhbmRsZSBFU1IgZGlmZmVyZW50bHkgLi4uICovCiAKLQlnbGJzdGF0ZSA9IGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfR0xCX1NUQVQpOworCWdsYnN0YXRlID0gYXQ5MV91ZHBfcmVhZCh1ZGMsIEFUOTFfVURQX0dMQl9TVEFUKTsKIAlpZiAoIShnbGJzdGF0ZSAmIEFUOTFfVURQX0VTUikpCiAJCWdvdG8gZG9uZTsKIAlnbGJzdGF0ZSB8PSBBVDkxX1VEUF9FU1I7Ci0JYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfR0xCX1NUQVQsIGdsYnN0YXRlKTsKKwlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX0dMQl9TVEFULCBnbGJzdGF0ZSk7CiAKIGRvbmU6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtODYxLDYgKzg1Miw3IEBACiAJCWVwLT5zdG9wcGVkID0gMDsKIAkJZXAtPmZpZm9fYmFuayA9IDA7CiAJCWVwLT5lcC5tYXhwYWNrZXQgPSBlcC0+bWF4cGFja2V0OworCQllcC0+Y3JlZyA9ICh2b2lkIF9faW9tZW0gKikgdWRjLT51ZHBfYmFzZWFkZHIgKyBBVDkxX1VEUF9DU1IoaSk7CiAJCS8vIGluaXRpYWxpc2VyIHVuZSBxdWV1ZSBwYXIgZW5kcG9pbnQKIAkJSU5JVF9MSVNUX0hFQUQoJmVwLT5xdWV1ZSk7CiAJfQpAQCAtOTE1LDE0ICs5MDcsNDEgQEAKIAlpZiAoIXVkYy0+ZW5hYmxlZCB8fCAhdWRjLT52YnVzKQogCQlpc19vbiA9IDA7CiAJREJHKCIlc2FjdGl2ZVxuIiwgaXNfb24gPyAiIiA6ICJpbiIpOworCiAJaWYgKGlzX29uKSB7CiAJCWNsa19vbih1ZGMpOwotCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9UWFZDLCAwKTsKLQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZSh1ZGMtPmJvYXJkLnB1bGx1cF9waW4sIDEpOwotCX0gZWxzZSAgeworCQlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX1RYVkMsIDApOworCQlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkKKwkJCWF0OTFfc2V0X2dwaW9fdmFsdWUodWRjLT5ib2FyZC5wdWxsdXBfcGluLCAxKTsKKwkJZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYwKCkpIHsKKwkJCXUzMgl0eHZjID0gYXQ5MV91ZHBfcmVhZCh1ZGMsIEFUOTFfVURQX1RYVkMpOworCisJCQl0eHZjIHw9IEFUOTFfVURQX1RYVkNfUFVPTjsKKwkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfVFhWQywgdHh2Yyk7CisJCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYxKCkpIHsKKwkJCXUzMgl1c2JwdWNyOworCisJCQl1c2JwdWNyID0gYXQ5MV9zeXNfcmVhZChBVDkxX01BVFJJWF9VU0JQVUNSKTsKKwkJCXVzYnB1Y3IgfD0gQVQ5MV9NQVRSSVhfVVNCUFVDUl9QVU9OOworCQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9NQVRSSVhfVVNCUFVDUiwgdXNicHVjcik7CisJCX0KKwl9IGVsc2UgewogCQlzdG9wX2FjdGl2aXR5KHVkYyk7Ci0JCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX1RYVkMsIEFUOTFfVURQX1RYVkNfVFhWRElTKTsKLQkJYXQ5MV9zZXRfZ3Bpb192YWx1ZSh1ZGMtPmJvYXJkLnB1bGx1cF9waW4sIDApOworCQlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX1RYVkMsIEFUOTFfVURQX1RYVkNfVFhWRElTKTsKKwkJaWYgKGNwdV9pc19hdDkxcm05MjAwKCkpCisJCQlhdDkxX3NldF9ncGlvX3ZhbHVlKHVkYy0+Ym9hcmQucHVsbHVwX3BpbiwgMCk7CisJCWVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpKSB7CisJCQl1MzIJdHh2YyA9IGF0OTFfdWRwX3JlYWQodWRjLCBBVDkxX1VEUF9UWFZDKTsKKworCQkJdHh2YyAmPSB+QVQ5MV9VRFBfVFhWQ19QVU9OOworCQkJYXQ5MV91ZHBfd3JpdGUodWRjLCBBVDkxX1VEUF9UWFZDLCB0eHZjKTsKKwkJfSBlbHNlIGlmIChjcHVfaXNfYXQ5MXNhbTkyNjEoKSkgeworCQkJdTMyCXVzYnB1Y3I7CisKKwkJCXVzYnB1Y3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfTUFUUklYX1VTQlBVQ1IpOworCQkJdXNicHVjciAmPSB+QVQ5MV9NQVRSSVhfVVNCUFVDUl9QVU9OOworCQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9NQVRSSVhfVVNCUFVDUiwgdXNicHVjcik7CisJCX0KIAkJY2xrX29mZih1ZGMpOwogCX0KIH0KQEAgLTkzNiw3ICs5NTUsMTAgQEAKIAkvLyBWREJHKCJ2YnVzICVzXG4iLCBpc19hY3RpdmUgPyAib24iIDogIm9mZiIpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAl1ZGMtPnZidXMgPSAoaXNfYWN0aXZlICE9IDApOwotCXB1bGx1cCh1ZGMsIGlzX2FjdGl2ZSk7CisJaWYgKHVkYy0+ZHJpdmVyKQorCQlwdWxsdXAodWRjLCBpc19hY3RpdmUpOworCWVsc2UKKwkJcHVsbHVwKHVkYywgMCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtMTA4Niw3ICsxMTA4LDcgQEAKIAogCWNhc2UgKChVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfREVWSUNFKSA8PCA4KQogCQkJfCBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgotCQl0bXAgPSBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0dMQl9TVEFUKSAmIEFUOTFfVURQX0NPTkZHOworCQl0bXAgPSBhdDkxX3VkcF9yZWFkKHVkYywgQVQ5MV9VRFBfR0xCX1NUQVQpICYgQVQ5MV9VRFBfQ09ORkc7CiAJCWlmIChwa3Quci53VmFsdWUpCiAJCQl1ZGMtPndhaXRfZm9yX2NvbmZpZ19hY2sgPSAodG1wID09IDApOwogCQllbHNlCkBAIC0xMTAzLDcgKzExMjUsNyBAQAogCWNhc2UgKChVU0JfRElSX0lOfFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9ERVZJQ0UpIDw8IDgpCiAJCQl8IFVTQl9SRVFfR0VUX1NUQVRVUzoKIAkJdG1wID0gKHVkYy0+c2VsZnBvd2VyZWQgPDwgVVNCX0RFVklDRV9TRUxGX1BPV0VSRUQpOwotCQlpZiAoYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9HTEJfU1RBVCkgJiBBVDkxX1VEUF9FU1IpCisJCWlmIChhdDkxX3VkcF9yZWFkKHVkYywgQVQ5MV9VRFBfR0xCX1NUQVQpICYgQVQ5MV9VRFBfRVNSKQogCQkJdG1wIHw9ICgxIDw8IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCk7CiAJCVBBQ0tFVCgiZ2V0IGRldmljZSBzdGF0dXNcbiIpOwogCQlfX3Jhd193cml0ZWIodG1wLCBkcmVnKTsKQEAgLTExMTQsMTcgKzExMzYsMTcgQEAKIAkJCXwgVVNCX1JFUV9TRVRfRkVBVFVSRToKIAkJaWYgKHdfdmFsdWUgIT0gVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKQogCQkJZ290byBzdGFsbDsKLQkJdG1wID0gYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9HTEJfU1RBVCk7CisJCXRtcCA9IGF0OTFfdWRwX3JlYWQodWRjLCBBVDkxX1VEUF9HTEJfU1RBVCk7CiAJCXRtcCB8PSBBVDkxX1VEUF9FU1I7Ci0JCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0dMQl9TVEFULCB0bXApOworCQlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX0dMQl9TVEFULCB0bXApOwogCQlnb3RvIHN1Y2NlZWQ7CiAJY2FzZSAoKFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9ERVZJQ0UpIDw8IDgpCiAJCQl8IFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKIAkJaWYgKHdfdmFsdWUgIT0gVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKQogCQkJZ290byBzdGFsbDsKLQkJdG1wID0gYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9HTEJfU1RBVCk7CisJCXRtcCA9IGF0OTFfdWRwX3JlYWQodWRjLCBBVDkxX1VEUF9HTEJfU1RBVCk7CiAJCXRtcCAmPSB+QVQ5MV9VRFBfRVNSOwotCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9HTEJfU1RBVCwgdG1wKTsKKwkJYXQ5MV91ZHBfd3JpdGUodWRjLCBBVDkxX1VEUF9HTEJfU1RBVCwgdG1wKTsKIAkJZ290byBzdWNjZWVkOwogCiAJLyoKQEAgLTEyMDYsOCArMTIyOCw4IEBACiAJCX0gZWxzZSBpZiAoZXAtPmlzX2luKQogCQkJZ290byBzdGFsbDsKIAotCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9SU1RfRVAsIGVwLT5pbnRfbWFzayk7Ci0JCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX1JTVF9FUCwgMCk7CisJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfUlNUX0VQLCBlcC0+aW50X21hc2spOworCQlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX1JTVF9FUCwgMCk7CiAJCXRtcCA9IF9fcmF3X3JlYWRsKGVwLT5jcmVnKTsKIAkJdG1wIHw9IENMUl9GWDsKIAkJdG1wICY9IH4oU0VUX0ZYIHwgQVQ5MV9VRFBfRk9SQ0VTVEFMTCk7CkBAIC0xMjIyLDcgKzEyNDQsMTAgQEAKICN1bmRlZiB3X2xlbmd0aAogCiAJLyogcGFzcyByZXF1ZXN0IHVwIHRvIHRoZSBnYWRnZXQgZHJpdmVyICovCi0Jc3RhdHVzID0gdWRjLT5kcml2ZXItPnNldHVwKCZ1ZGMtPmdhZGdldCwgJnBrdC5yKTsKKwlpZiAodWRjLT5kcml2ZXIpCisJCXN0YXR1cyA9IHVkYy0+ZHJpdmVyLT5zZXR1cCgmdWRjLT5nYWRnZXQsICZwa3Qucik7CisJZWxzZQorCQlzdGF0dXMgPSAtRU5PREVWOwogCWlmIChzdGF0dXMgPCAwKSB7CiBzdGFsbDoKIAkJVkRCRygicmVxICUwMnguJTAyeCBwcm90b2NvbCBTVEFMTDsgc3RhdCAlZFxuIiwKQEAgLTEzMDAsMTMgKzEzMjUsMTMgQEAKIAkJCWlmICh1ZGMtPndhaXRfZm9yX2FkZHJfYWNrKSB7CiAJCQkJdTMyCXRtcDsKIAotCQkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0ZBRERSLAorCQkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfRkFERFIsCiAJCQkJCQlBVDkxX1VEUF9GRU4gfCB1ZGMtPmFkZHIpOwotCQkJCXRtcCA9IGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfR0xCX1NUQVQpOworCQkJCXRtcCA9IGF0OTFfdWRwX3JlYWQodWRjLCBBVDkxX1VEUF9HTEJfU1RBVCk7CiAJCQkJdG1wICY9IH5BVDkxX1VEUF9GQURERU47CiAJCQkJaWYgKHVkYy0+YWRkcikKIAkJCQkJdG1wIHw9IEFUOTFfVURQX0ZBRERFTjsKLQkJCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9HTEJfU1RBVCwgdG1wKTsKKwkJCQlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX0dMQl9TVEFULCB0bXApOwogCiAJCQkJdWRjLT53YWl0X2Zvcl9hZGRyX2FjayA9IDA7CiAJCQkJVkRCRygiYWRkcmVzcyAlZFxuIiwgdWRjLT5hZGRyKTsKQEAgLTEzNzQsMjggKzEzOTksMjggQEAKIAl3aGlsZSAocmVzY2Fucy0tKSB7CiAJCXUzMiBzdGF0dXM7CiAKLQkJc3RhdHVzID0gYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9JU1IpCi0JCQkmIGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfSU1SKTsKKwkJc3RhdHVzID0gYXQ5MV91ZHBfcmVhZCh1ZGMsIEFUOTFfVURQX0lTUikKKwkJCSYgYXQ5MV91ZHBfcmVhZCh1ZGMsIEFUOTFfVURQX0lNUik7CiAJCWlmICghc3RhdHVzKQogCQkJYnJlYWs7CiAKIAkJLyogVVNCIHJlc2V0IGlycTogIG5vdCBtYXNrYWJsZSAqLwogCQlpZiAoc3RhdHVzICYgQVQ5MV9VRFBfRU5EQlVTUkVTKSB7Ci0JCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JRFIsIH5NSU5JTVVTX0lOVEVSUlVQVFVTKTsKLQkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0lFUiwgTUlOSU1VU19JTlRFUlJVUFRVUyk7CisJCQlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX0lEUiwgfk1JTklNVVNfSU5URVJSVVBUVVMpOworCQkJYXQ5MV91ZHBfd3JpdGUodWRjLCBBVDkxX1VEUF9JRVIsIE1JTklNVVNfSU5URVJSVVBUVVMpOwogCQkJLyogQXRtZWwgY29kZSBjbGVhcnMgdGhpcyBpcnEgdHdpY2UgKi8KLQkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0lDUiwgQVQ5MV9VRFBfRU5EQlVTUkVTKTsKLQkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0lDUiwgQVQ5MV9VRFBfRU5EQlVTUkVTKTsKKwkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfSUNSLCBBVDkxX1VEUF9FTkRCVVNSRVMpOworCQkJYXQ5MV91ZHBfd3JpdGUodWRjLCBBVDkxX1VEUF9JQ1IsIEFUOTFfVURQX0VOREJVU1JFUyk7CiAJCQlWREJHKCJlbmQgYnVzIHJlc2V0XG4iKTsKIAkJCXVkYy0+YWRkciA9IDA7CiAJCQlzdG9wX2FjdGl2aXR5KHVkYyk7CiAKIAkJCS8qIGVuYWJsZSBlcDAgKi8KLQkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0NTUigwKSwKKwkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfQ1NSKDApLAogCQkJCQlBVDkxX1VEUF9FUEVEUyB8IEFUOTFfVURQX0VQVFlQRV9DVFJMKTsKIAkJCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CiAJCQl1ZGMtPnN1c3BlbmRlZCA9IDA7Ci0JCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JRVIsIEFUOTFfVURQX0VQKDApKTsKKwkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfSUVSLCBBVDkxX1VEUF9FUCgwKSk7CiAKIAkJCS8qCiAJCQkgKiBOT1RFOiAgdGhpcyBkcml2ZXIga2VlcHMgY2xvY2tzIG9mZiB1bmxlc3MgdGhlCkBAIC0xNDA2LDkgKzE0MzEsOSBAQAogCiAJCS8qIGhvc3QgaW5pdGlhdGVkIHN1c3BlbmQgKDMrbXMgYnVzIGlkbGUpICovCiAJCX0gZWxzZSBpZiAoc3RhdHVzICYgQVQ5MV9VRFBfUlhTVVNQKSB7Ci0JCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JRFIsIEFUOTFfVURQX1JYU1VTUCk7Ci0JCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JRVIsIEFUOTFfVURQX1JYUlNNKTsKLQkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0lDUiwgQVQ5MV9VRFBfUlhTVVNQKTsKKwkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfSURSLCBBVDkxX1VEUF9SWFNVU1ApOworCQkJYXQ5MV91ZHBfd3JpdGUodWRjLCBBVDkxX1VEUF9JRVIsIEFUOTFfVURQX1JYUlNNKTsKKwkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfSUNSLCBBVDkxX1VEUF9SWFNVU1ApOwogCQkJLy8gVkRCRygiYnVzIHN1c3BlbmRcbiIpOwogCQkJaWYgKHVkYy0+c3VzcGVuZGVkKQogCQkJCWNvbnRpbnVlOwpAQCAtMTQyNSw5ICsxNDUwLDkgQEAKIAogCQkvKiBob3N0IGluaXRpYXRlZCByZXN1bWUgKi8KIAkJfSBlbHNlIGlmIChzdGF0dXMgJiBBVDkxX1VEUF9SWFJTTSkgewotCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfSURSLCBBVDkxX1VEUF9SWFJTTSk7Ci0JCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JRVIsIEFUOTFfVURQX1JYU1VTUCk7Ci0JCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JQ1IsIEFUOTFfVURQX1JYUlNNKTsKKwkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfSURSLCBBVDkxX1VEUF9SWFJTTSk7CisJCQlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX0lFUiwgQVQ5MV9VRFBfUlhTVVNQKTsKKwkJCWF0OTFfdWRwX3dyaXRlKHVkYywgQVQ5MV9VRFBfSUNSLCBBVDkxX1VEUF9SWFJTTSk7CiAJCQkvLyBWREJHKCJidXMgcmVzdW1lXG4iKTsKIAkJCWlmICghdWRjLT5zdXNwZW5kZWQpCiAJCQkJY29udGludWU7CkBAIC0xNDg1LDggKzE1MTAsNiBAQAogCQl9LAogCQkudWRjCQk9ICZjb250cm9sbGVyLAogCQkubWF4cGFja2V0CT0gOCwKLQkJLmNyZWcJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfVURQCi0JCQkJCSsgQVQ5MV9VRFBfQ1NSKDApKSwKIAkJLmludF9tYXNrCT0gMSA8PCAwLAogCX0sCiAJLmVwWzFdID0gewpAQCAtMTQ5Nyw4ICsxNTIwLDYgQEAKIAkJLnVkYwkJPSAmY29udHJvbGxlciwKIAkJLmlzX3Bpbmdwb25nCT0gMSwKIAkJLm1heHBhY2tldAk9IDY0LAotCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAKLQkJCQkJKyBBVDkxX1VEUF9DU1IoMSkpLAogCQkuaW50X21hc2sJPSAxIDw8IDEsCiAJfSwKIAkuZXBbMl0gPSB7CkBAIC0xNTA5LDggKzE1MzAsNiBAQAogCQkudWRjCQk9ICZjb250cm9sbGVyLAogCQkuaXNfcGluZ3BvbmcJPSAxLAogCQkubWF4cGFja2V0CT0gNjQsCi0JCS5jcmVnCQk9ICh2b2lkIF9faW9tZW0gKikoQVQ5MV9WQV9CQVNFX1VEUAotCQkJCQkrIEFUOTFfVURQX0NTUigyKSksCiAJCS5pbnRfbWFzawk9IDEgPDwgMiwKIAl9LAogCS5lcFszXSA9IHsKQEAgLTE1MjEsOCArMTU0MCw2IEBACiAJCX0sCiAJCS51ZGMJCT0gJmNvbnRyb2xsZXIsCiAJCS5tYXhwYWNrZXQJPSA4LAotCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAKLQkJCQkJKyBBVDkxX1VEUF9DU1IoMykpLAogCQkuaW50X21hc2sJPSAxIDw8IDMsCiAJfSwKIAkuZXBbNF0gPSB7CkBAIC0xNTMzLDggKzE1NTAsNiBAQAogCQkudWRjCQk9ICZjb250cm9sbGVyLAogCQkuaXNfcGluZ3BvbmcJPSAxLAogCQkubWF4cGFja2V0CT0gMjU2LAotCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAKLQkJCQkJKyBBVDkxX1VEUF9DU1IoNCkpLAogCQkuaW50X21hc2sJPSAxIDw8IDQsCiAJfSwKIAkuZXBbNV0gPSB7CkBAIC0xNTQ1LDggKzE1NjAsNiBAQAogCQkudWRjCQk9ICZjb250cm9sbGVyLAogCQkuaXNfcGluZ3BvbmcJPSAxLAogCQkubWF4cGFja2V0CT0gMjU2LAotCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAKLQkJCQkJKyBBVDkxX1VEUF9DU1IoNSkpLAogCQkuaW50X21hc2sJPSAxIDw8IDUsCiAJfSwKIAkvKiBlcDYgYW5kIGVwNyBhcmUgYWxzbyByZXNlcnZlZCAoY3VzdG9tIHNpbGljb24gbWlnaHQgdXNlIHRoZW0pICovCkBAIC0xNTcyLDkgKzE1ODUsOCBAQAogCWludAkJcmV0dmFsOwogCiAJaWYgKCFkcml2ZXIKLQkJCXx8IGRyaXZlci0+c3BlZWQgIT0gVVNCX1NQRUVEX0ZVTEwKKwkJCXx8IGRyaXZlci0+c3BlZWQgPCBVU0JfU1BFRURfRlVMTAogCQkJfHwgIWRyaXZlci0+YmluZAotCQkJfHwgIWRyaXZlci0+dW5iaW5kCiAJCQl8fCAhZHJpdmVyLT5zZXR1cCkgewogCQlEQkcoImJhZCBwYXJhbWV0ZXIuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNTk1LDYgKzE2MDcsMTAgQEAKIAlpZiAocmV0dmFsKSB7CiAJCURCRygiZHJpdmVyLT5iaW5kKCkgcmV0dXJuZWQgJWRcbiIsIHJldHZhbCk7CiAJCXVkYy0+ZHJpdmVyID0gTlVMTDsKKwkJdWRjLT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXJfZGF0YSA9IE5VTEw7CisJCXVkYy0+ZW5hYmxlZCA9IDA7CisJCXVkYy0+c2VsZnBvd2VyZWQgPSAwOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtMTYxMSwxMiArMTYyNywxMiBAQAogewogCXN0cnVjdCBhdDkxX3VkYyAqdWRjID0gJmNvbnRyb2xsZXI7CiAKLQlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gdWRjLT5kcml2ZXIpCisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IHVkYy0+ZHJpdmVyIHx8ICFkcml2ZXItPnVuYmluZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXVkYy0+ZW5hYmxlZCA9IDA7Ci0JYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfSURSLCB+MCk7CisJYXQ5MV91ZHBfd3JpdGUodWRjLCBBVDkxX1VEUF9JRFIsIH4wKTsKIAlwdWxsdXAodWRjLCAwKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKQEAgLTE2NDEsNiArMTY1Nyw3IEBACiAJc3RydWN0IGRldmljZQkqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3QgYXQ5MV91ZGMJKnVkYzsKIAlpbnQJCXJldHZhbDsKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKIAogCWlmICghZGV2LT5wbGF0Zm9ybV9kYXRhKSB7CiAJCS8qIHNtYWxsIChzbyB3ZSBjb3B5IGl0KSBidXQgY3JpdGljYWwhICovCkBAIC0xNjU4LDcgKzE2NzUsMTMgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oQVQ5MVJNOTIwMF9CQVNFX1VEUCwgU1pfMTZLLCBkcml2ZXJfbmFtZSkpIHsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOWElPOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJCQlkcml2ZXJfbmFtZSkpIHsKIAkJREJHKCJzb21lb25lJ3MgdXNpbmcgVURDIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtMTY2OCwxNSArMTY5MSwyMyBAQAogCXVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBkZXY7CiAJdWRjLT5ib2FyZCA9ICooc3RydWN0IGF0OTFfdWRjX2RhdGEgKikgZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXVkYy0+cGRldiA9IHBkZXY7Ci0JdWRjX3JlaW5pdCh1ZGMpOwogCXVkYy0+ZW5hYmxlZCA9IDA7CiAKKwl1ZGMtPnVkcF9iYXNlYWRkciA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCF1ZGMtPnVkcF9iYXNlYWRkcikgeworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVkY19yZWluaXQodWRjKTsKKwogCS8qIGdldCBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uIGNsb2NrcyAqLwogCXVkYy0+aWNsayA9IGNsa19nZXQoZGV2LCAidWRjX2NsayIpOwogCXVkYy0+ZmNsayA9IGNsa19nZXQoZGV2LCAidWRwY2siKTsKIAlpZiAoSVNfRVJSKHVkYy0+aWNsaykgfHwgSVNfRVJSKHVkYy0+ZmNsaykpIHsKIAkJREJHKCJjbG9ja3MgbWlzc2luZ1xuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZhaWwwOwogCX0KIAogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmdWRjLT5nYWRnZXQuZGV2KTsKQEAgLTE2ODUsOCArMTcxNiwxMCBAQAogCiAJLyogZG9uJ3QgZG8gYW55dGhpbmcgdW50aWwgd2UgaGF2ZSBib3RoIGdhZGdldCBkcml2ZXIgYW5kIFZCVVMgKi8KIAljbGtfZW5hYmxlKHVkYy0+aWNsayk7Ci0JYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfVFhWQywgQVQ5MV9VRFBfVFhWQ19UWFZESVMpOwotCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0lEUiwgMHhmZmZmZmZmZik7CisJYXQ5MV91ZHBfd3JpdGUodWRjLCBBVDkxX1VEUF9UWFZDLCBBVDkxX1VEUF9UWFZDX1RYVkRJUyk7CisJYXQ5MV91ZHBfd3JpdGUodWRjLCBBVDkxX1VEUF9JRFIsIDB4ZmZmZmZmZmYpOworCS8qIENsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdHMgLSBVRFAgbWF5IGJlIHVzZWQgYnkgYm9vdGxvYWRlci4gKi8KKwlhdDkxX3VkcF93cml0ZSh1ZGMsIEFUOTFfVURQX0lDUiwgMHhmZmZmZmZmZik7CiAJY2xrX2Rpc2FibGUodWRjLT5pY2xrKTsKIAogCS8qIHJlcXVlc3QgVURDIGFuZCBtYXliZSBWQlVTIGlycXMgKi8KQEAgLTE2OTgsNiArMTczMSwxMSBAQAogCQlnb3RvIGZhaWwxOwogCX0KIAlpZiAodWRjLT5ib2FyZC52YnVzX3BpbiA+IDApIHsKKwkJLyoKKwkJICogR2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIFZCVVMgLSB3ZSBjYW5ub3QgZXhwZWN0CisJCSAqIGEgcGVuZGluZyBpbnRlcnJ1cHQuCisJCSAqLworCQl1ZGMtPnZidXMgPSBhdDkxX2dldF9ncGlvX3ZhbHVlKHVkYy0+Ym9hcmQudmJ1c19waW4pOwogCQlpZiAocmVxdWVzdF9pcnEodWRjLT5ib2FyZC52YnVzX3BpbiwgYXQ5MV92YnVzX2lycSwKIAkJCQlJUlFGX0RJU0FCTEVELCBkcml2ZXJfbmFtZSwgdWRjKSkgewogCQkJREJHKCJyZXF1ZXN0IHZidXMgaXJxICVkIGZhaWxlZFxuIiwKQEAgLTE3MjAsNyArMTc1OCw3IEBACiBmYWlsMToKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWRjLT5nYWRnZXQuZGV2KTsKIGZhaWwwOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihBVDkxUk05MjAwX0JBU0VfVURQLCBTWl8xNkspOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlEQkcoIiVzIHByb2JlIGZhaWxlZCwgJWRcbiIsIGRyaXZlcl9uYW1lLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xNzI4LDEzICsxNzY2LDE0IEBACiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdDkxdWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBhdDkxX3VkYyAqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlEQkcoInJlbW92ZVxuIik7CiAKLQlwdWxsdXAodWRjLCAwKTsKKwlpZiAodWRjLT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAodWRjLT5kcml2ZXIgIT0gMCkKLQkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcih1ZGMtPmRyaXZlcik7CisJcHVsbHVwKHVkYywgMCk7CiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMCk7CiAJcmVtb3ZlX2RlYnVnX2ZpbGUodWRjKTsKQEAgLTE3NDIsNyArMTc4MSwxMCBAQAogCQlmcmVlX2lycSh1ZGMtPmJvYXJkLnZidXNfcGluLCB1ZGMpOwogCWZyZWVfaXJxKHVkYy0+dWRwX2lycSwgdWRjKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWRjLT5nYWRnZXQuZGV2KTsKLQlyZWxlYXNlX21lbV9yZWdpb24oQVQ5MVJNOTIwMF9CQVNFX1VEUCwgU1pfMTZLKTsKKworCWlvdW5tYXAodWRjLT51ZHBfYmFzZWFkZHIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCiAJY2xrX3B1dCh1ZGMtPmljbGspOwogCWNsa19wdXQodWRjLT5mY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmgKaW5kZXggODgyYWY0Mi4uNjc3MDg5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmgKQEAgLTUxLDEwICs1MSwxMCBAQAogI2RlZmluZSAgICAgQVQ5MV9VRFBfRVAobikJKDEgPDwgKG4pKQkvKiBFbmRwb2ludCBJbnRlcnJ1cHQgU3RhdHVzICovCiAjZGVmaW5lICAgICBBVDkxX1VEUF9SWFNVU1AJKDEgPDwgIDgpIAkvKiBVU0IgU3VzcGVuZCBJbnRlcnJ1cHQgU3RhdHVzICovCiAjZGVmaW5lICAgICBBVDkxX1VEUF9SWFJTTQkoMSA8PCAgOSkJLyogVVNCIFJlc3VtZSBJbnRlcnJ1cHQgU3RhdHVzICovCi0jZGVmaW5lICAgICBBVDkxX1VEUF9FWFRSU00JKDEgPDwgMTApCS8qIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lICAgICBBVDkxX1VEUF9FWFRSU00JKDEgPDwgMTApCS8qIEV4dGVybmFsIFJlc3VtZSBJbnRlcnJ1cHQgU3RhdHVzIFtBVDkxUk05MjAwIG9ubHldICovCiAjZGVmaW5lICAgICBBVDkxX1VEUF9TT0ZJTlQJKDEgPDwgMTEpCS8qIFN0YXJ0IG9mIEZyYW1lIEludGVycnVwdCBTdGF0dXMgKi8KICNkZWZpbmUgICAgIEFUOTFfVURQX0VOREJVU1JFUwkoMSA8PCAxMikJLyogRW5kIG9mIEJ1cyBSZXNldCBJbnRlcnJwdCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgIEFUOTFfVURQX1dBS0VVUAkoMSA8PCAxMykJLyogVVNCIFdha2V1cCBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lICAgICBBVDkxX1VEUF9XQUtFVVAJKDEgPDwgMTMpCS8qIFVTQiBXYWtldXAgSW50ZXJydXB0IFN0YXR1cyBbQVQ5MVJNOTIwMCBvbmx5XSAqLwogCiAjZGVmaW5lIEFUOTFfVURQX0lDUgkJMHgyMAkJLyogSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICovCiAjZGVmaW5lIEFUOTFfVURQX1JTVF9FUAkJMHgyOAkJLyogUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgKi8KQEAgLTg0LDcgKzg0LDcgQEAKIAogI2RlZmluZSBBVDkxX1VEUF9UWFZDCQkweDc0CQkvKiBUcmFuc2NlaXZlciBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICBBVDkxX1VEUF9UWFZDX1RYVkRJUyAoMSA8PCA4KQkvKiBUcmFuc2NlaXZlciBEaXNhYmxlICovCi0KKyNkZWZpbmUgICAgIEFUOTFfVURQX1RYVkNfUFVPTiAgICgxIDw8IDkpCS8qIFB1bGxVcCBPbiBbQVQ5MVNBTTkyNjAgb25seV0gKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTQxLDYgKzE0MSw3IEBACiAJc3RydWN0IGNsawkJCSppY2xrLCAqZmNsazsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJCSpwZGU7CisJdm9pZCBfX2lvbWVtCQkJKnVkcF9iYXNlYWRkcjsKIAlpbnQJCQkJdWRwX2lycTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwppbmRleCBmMWYzMmQ3Li4zYzJiYzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCkBAIC03NzksNyArNzc5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGR1bS0+ZHJpdmVyKQogCQlyZXR1cm4gLUVCVVNZOwotCWlmICghZHJpdmVyLT5iaW5kIHx8ICFkcml2ZXItPnVuYmluZCB8fCAhZHJpdmVyLT5zZXR1cAorCWlmICghZHJpdmVyLT5iaW5kIHx8ICFkcml2ZXItPnNldHVwCiAJCQl8fCBkcml2ZXItPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODM3LDcgKzgzNyw4IEBACiBlcnJfYmluZF9kcml2ZXI6CiAJZHJpdmVyX3VucmVnaXN0ZXIgKCZkcml2ZXItPmRyaXZlcik7CiBlcnJfcmVnaXN0ZXI6Ci0JZHJpdmVyLT51bmJpbmQgKCZkdW0tPmdhZGdldCk7CisJaWYgKGRyaXZlci0+dW5iaW5kKQorCQlkcml2ZXItPnVuYmluZCAoJmR1bS0+Z2FkZ2V0KTsKIAlzcGluX2xvY2tfaXJxICgmZHVtLT5sb2NrKTsKIAlkdW0tPnB1bGx1cCA9IDA7CiAJc2V0X2xpbmtfc3RhdGUgKGR1bSk7CkBAIC04NTcsNyArODU4LDcgQEAKIAogCWlmICghZHVtKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gZHVtLT5kcml2ZXIpCisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGR1bS0+ZHJpdmVyIHx8ICFkcml2ZXItPnVuYmluZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZXZfZGJnICh1ZGNfZGV2KGR1bSksICJ1bnJlZ2lzdGVyIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwppbmRleCBjOTgzMTZjLi43MmYyYWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC0xOTA5LDEwICsxOTA5LDEwIEBACiAJaWYgKCFmaWxwLT5mX29wLT5mc3luYykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCWlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmMgPSBmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7Ci0JZXJyID0gZmlscC0+Zl9vcC0+ZnN5bmMoZmlscCwgZmlscC0+Zl9kZW50cnksIDEpOworCWVyciA9IGZpbHAtPmZfb3AtPmZzeW5jKGZpbHAsIGZpbHAtPmZfcGF0aC5kZW50cnksIDEpOwogCWlmICghcmMpCiAJCXJjID0gZXJyOwogCWVyciA9IGZpbGVtYXBfZmRhdGF3YWl0KGlub2RlLT5pX21hcHBpbmcpOwpAQCAtMTk1MCw3ICsxOTUwLDcgQEAKIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfc3ViKHN0cnVjdCBsdW4gKmN1cmx1bikKIHsKIAlzdHJ1Y3QgZmlsZQkqZmlscCA9IGN1cmx1bi0+ZmlscDsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJdW5zaWduZWQgbG9uZwlyYzsKIAogCXJjID0gaW52YWxpZGF0ZV9pbm9kZV9wYWdlcyhpbm9kZS0+aV9tYXBwaW5nKTsKQEAgLTM1MjYsOCArMzUyNiw4IEBACiAJaWYgKCEoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQogCQlybyA9IDE7CiAKLQlpZiAoZmlscC0+Zl9kZW50cnkpCi0JCWlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJaWYgKGZpbHAtPmZfcGF0aC5kZW50cnkpCisJCWlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpZiAoaW5vZGUgJiYgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgewogCQlpZiAoYmRldl9yZWFkX29ubHkoaW5vZGUtPmlfYmRldikpCiAJCQlybyA9IDE7CkBAIC0zNjA2LDcgKzM2MDYsNyBAQAogCiAJZG93bl9yZWFkKCZmc2ctPmZpbGVzZW0pOwogCWlmIChiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pKSB7CS8vIEdldCB0aGUgY29tcGxldGUgcGF0aG5hbWUKLQkJcCA9IGRfcGF0aChjdXJsdW4tPmZpbHAtPmZfZGVudHJ5LCBjdXJsdW4tPmZpbHAtPmZfdmZzbW50LAorCQlwID0gZF9wYXRoKGN1cmx1bi0+ZmlscC0+Zl9wYXRoLmRlbnRyeSwgY3VybHVuLT5maWxwLT5mX3BhdGgubW50LAogCQkJCWJ1ZiwgUEFHRV9TSVpFIC0gMSk7CiAJCWlmIChJU19FUlIocCkpCiAJCQlyYyA9IFBUUl9FUlIocCk7CkBAIC00MDMwLDggKzQwMzAsOCBAQAogCQlpZiAoYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKSkgewogCQkJcCA9IE5VTEw7CiAJCQlpZiAocGF0aGJ1ZikgewotCQkJCXAgPSBkX3BhdGgoY3VybHVuLT5maWxwLT5mX2RlbnRyeSwKLQkJCQkJY3VybHVuLT5maWxwLT5mX3Zmc21udCwKKwkJCQlwID0gZF9wYXRoKGN1cmx1bi0+ZmlscC0+Zl9wYXRoLmRlbnRyeSwKKwkJCQkJY3VybHVuLT5maWxwLT5mX3BhdGgubW50LAogCQkJCQlwYXRoYnVmLCBQQVRIX01BWCk7CiAJCQkJaWYgKElTX0VSUihwKSkKIAkJCQkJcCA9IE5VTEw7CkBAIC00MTAwLDcgKzQxMDAsNyBAQAogI2VuZGlmCiAJLmZ1bmN0aW9uCT0gKGNoYXIgKikgbG9uZ25hbWUsCiAJLmJpbmQJCT0gZnNnX2JpbmQsCi0JLnVuYmluZAkJPSBfX2V4aXRfcChmc2dfdW5iaW5kKSwKKwkudW5iaW5kCQk9IGZzZ191bmJpbmQsCiAJLmRpc2Nvbm5lY3QJPSBmc2dfZGlzY29ubmVjdCwKIAkuc2V0dXAJCT0gZnNnX3NldHVwLAogCS5zdXNwZW5kCT0gZnNnX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCmluZGV4IDMxMzUxODIuLmYxYTY3OTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CQkvKiBmb3IgY29udHJvbCByZXNwb25zZXMgKi8KIAl1OAkJCWNvbmZpZzsKIAlzdHJ1Y3QgdXNiX2VwCQkqaW5fZXAsICpvdXRfZXA7Ci0Jc3RydWN0IHNuZF9jYXJkIAkqY2FyZDsKKwlzdHJ1Y3Qgc25kX2NhcmQJCSpjYXJkOwogCXN0cnVjdCBzbmRfcmF3bWlkaQkqcm1pZGk7CiAJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqaW5fc3Vic3RyZWFtOwogCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKm91dF9zdWJzdHJlYW07CkBAIC00OTAsNyArNDkwLDcgQEAKIAlpbnQgc3RhdHVzID0gcmVxLT5zdGF0dXM7CiAKIAlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgMDogCQkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KKwljYXNlIDA6CQkJCS8qIG5vcm1hbCBjb21wbGV0aW9uICovCiAJCWlmIChlcCA9PSBkZXYtPm91dF9lcCkgewogCQkJLyogd2UgcmVjZWl2ZWQgc3R1ZmYuCiAJCQkgICByZXEgaXMgcXVldWVkIGFnYWluLCBiZWxvdyAqLwpAQCAtNTA1LDcgKzUwNSw3IEBACiAJCWJyZWFrOwogCiAJLyogdGhpcyBlbmRwb2ludCBpcyBub3JtYWxseSBhY3RpdmUgd2hpbGUgd2UncmUgY29uZmlndXJlZCAqLwotCWNhc2UgLUVDT05OQUJPUlRFRDogCQkvKiBoYXJkd2FyZSBmb3JjZWQgZXAgcmVzZXQgKi8KKwljYXNlIC1FQ09OTkFCT1JURUQ6CQkvKiBoYXJkd2FyZSBmb3JjZWQgZXAgcmVzZXQgKi8KIAljYXNlIC1FQ09OTlJFU0VUOgkJLyogcmVxdWVzdCBkZXF1ZXVlZCAqLwogCWNhc2UgLUVTSFVURE9XTjoJCS8qIGRpc2Nvbm5lY3QgZnJvbSBob3N0ICovCiAJCVZEQkcoZGV2LCAiJXMgZ29uZSAoJWQpLCAlZC8lZFxuIiwgZXAtPm5hbWUsIHN0YXR1cywKQEAgLTY1Niw3ICs2NTYsNyBAQAogCQljYXNlIFVTQl9TUEVFRF9MT1c6CXNwZWVkID0gImxvdyI7IGJyZWFrOwogCQljYXNlIFVTQl9TUEVFRF9GVUxMOglzcGVlZCA9ICJmdWxsIjsgYnJlYWs7CiAJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CXNwZWVkID0gImhpZ2giOyBicmVhazsKLQkJZGVmYXVsdDogCQlzcGVlZCA9ICI/IjsgYnJlYWs7CisJCWRlZmF1bHQ6CQlzcGVlZCA9ICI/IjsgYnJlYWs7CiAJCX0KIAogCQlkZXYtPmNvbmZpZyA9IG51bWJlcjsKQEAgLTEzMDgsNyArMTMwOCw3IEBACiAJLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLAogCS5mdW5jdGlvbgk9IChjaGFyICopbG9uZ25hbWUsCiAJLmJpbmQJCT0gZ21pZGlfYmluZCwKLQkudW5iaW5kCQk9IF9fZXhpdF9wKGdtaWRpX3VuYmluZCksCisJLnVuYmluZAkJPSBnbWlkaV91bmJpbmQsCiAKIAkuc2V0dXAJCT0gZ21pZGlfc2V0dXAsCiAJLmRpc2Nvbm5lY3QJPSBnbWlkaV9kaXNjb25uZWN0LApAQCAtMTMxNiw3ICsxMzE2LDcgQEAKIAkuc3VzcGVuZAk9IGdtaWRpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBnbWlkaV9yZXN1bWUsCiAKLQkuZHJpdmVyIAk9IHsKKwkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gKGNoYXIgKilzaG9ydG5hbWUsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwppbmRleCA4MDVhOTgyLi5kMGVmMWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwpAQCAtMTQzMiw3ICsxNDMyLDYgQEAKIAlpZiAoIWRyaXZlcgogCQkJfHwgZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTAogCQkJfHwgIWRyaXZlci0+YmluZAotCQkJfHwgIWRyaXZlci0+dW5iaW5kCiAJCQl8fCAhZHJpdmVyLT5kaXNjb25uZWN0CiAJCQl8fCAhZHJpdmVyLT5zZXR1cCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDk1LDcgKzE0OTQsNyBAQAogCiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwotCWlmICghZHJpdmVyIHx8IGRyaXZlciAhPSBkZXYtPmRyaXZlcikKKwlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gZGV2LT5kcml2ZXIgfHwgIWRyaXZlci0+dW5iaW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKQEAgLTE4MDgsMTMgKzE4MDcsOCBAQAogCXN0cnVjdCBnb2t1X3VkYwkJKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCURCRyhkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQkvKiBzdGFydCB3aXRoIHRoZSBkcml2ZXIgYWJvdmUgdXMgKi8KLQlpZiAoZGV2LT5kcml2ZXIpIHsKLQkJLyogc2hvdWxkIGhhdmUgYmVlbiBkb25lIGFscmVhZHkgYnkgZHJpdmVyIG1vZGVsIGNvcmUgKi8KLQkJV0FSTihkZXYsICJwY2kgcmVtb3ZlLCBkcml2ZXIgJyVzJyBpcyBzdGlsbCByZWdpc3RlcmVkXG4iLAotCQkJCWRldi0+ZHJpdmVyLT5kcml2ZXIubmFtZSk7Ci0JCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCX0KKworCUJVR19PTihkZXYtPmRyaXZlcik7CiAKICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUwogCXJlbW92ZV9wcm9jX2VudHJ5KHByb2Nfbm9kZV9uYW1lLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKaW5kZXggNGE5OTE1Ni4uYTBhNzNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKQEAgLTQyMiw5ICs0MjIsMTAgQEAKIAlERUJVRygiJXM6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCiAJaWYgKCFkcml2ZXIKLQkgICAgfHwgZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTAotCSAgICB8fCAhZHJpdmVyLT5iaW5kCi0JICAgIHx8ICFkcml2ZXItPnVuYmluZCB8fCAhZHJpdmVyLT5kaXNjb25uZWN0IHx8ICFkcml2ZXItPnNldHVwKQorCQkJfHwgZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTAorCQkJfHwgIWRyaXZlci0+YmluZAorCQkJfHwgIWRyaXZlci0+ZGlzY29ubmVjdAorCQkJfHwgIWRyaXZlci0+c2V0dXApCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTQ3MSw3ICs0NzIsNyBAQAogCiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwotCWlmICghZHJpdmVyIHx8IGRyaXZlciAhPSBkZXYtPmRyaXZlcikKKwlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gZGV2LT5kcml2ZXIgfHwgIWRyaXZlci0+dW5iaW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKQEAgLTIxMjUsOSArMjEyNiwxMSBAQAogCiAJREVCVUcoIiVzOiAlcFxuIiwgX19GVU5DVElPTl9fLCBwZGV2KTsKIAorCWlmIChkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FQlVTWTsKKwogCXVkY19kaXNhYmxlKGRldik7CiAJcmVtb3ZlX3Byb2NfZmlsZXMoKTsKLQl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAogCWZyZWVfaXJxKElSUV9VU0JJTlRSLCBkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCAzMDI0YzY3Li41NjllYjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTIwMjAsNyArMjAyMCw2IEBACiAJaWYgKCFkcml2ZXIKIAkJCXx8IGRyaXZlci0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gKIAkJCXx8ICFkcml2ZXItPmJpbmQKLQkJCXx8ICFkcml2ZXItPnVuYmluZAogCQkJfHwgIWRyaXZlci0+c2V0dXApCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghZGV2KQpAQCAtMjEwNyw3ICsyMTA2LDcgQEAKIAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gZGV2LT5kcml2ZXIpCisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGRldi0+ZHJpdmVyIHx8ICFkcml2ZXItPnVuYmluZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOwpAQCAtMjgwMywxMyArMjgwMiw3IEBACiB7CiAJc3RydWN0IG5ldDIyODAJCSpkZXYgPSBwY2lfZ2V0X2RydmRhdGEgKHBkZXYpOwogCi0JLyogc3RhcnQgd2l0aCB0aGUgZHJpdmVyIGFib3ZlIHVzICovCi0JaWYgKGRldi0+ZHJpdmVyKSB7Ci0JCS8qIHNob3VsZCBoYXZlIGJlZW4gZG9uZSBhbHJlYWR5IGJ5IGRyaXZlciBtb2RlbCBjb3JlICovCi0JCVdBUk4gKGRldiwgInBjaSByZW1vdmUsIGRyaXZlciAnJXMnIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiIsCi0JCQkJZGV2LT5kcml2ZXItPmRyaXZlci5uYW1lKTsKLQkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoZGV2LT5kcml2ZXIpOwotCX0KKwlCVUdfT04oZGV2LT5kcml2ZXIpOwogCiAJLyogdGhlbiBjbGVhbiB1cCB0aGUgcmVzb3VyY2VzIHdlIGFsbG9jYXRlZCBkdXJpbmcgcHJvYmUoKSAqLwogCW5ldDIyODBfbGVkX3NodXRkb3duIChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwppbmRleCAwMzBkODdjLi5jZGNmZDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTYwLDYgKzYxLDExIEBACiAvKiBidWxrIERNQSBzZWVtcyB0byBiZSBiZWhhdmluZyBmb3IgYm90aCBJTiBhbmQgT1VUICovCiAjZGVmaW5lCVVTRV9ETUEKIAorLyogRklYTUU6IE9NQVAyIGN1cnJlbnRseSBoYXMgc29tZSBwcm9ibGVtIGluIERNQSBtb2RlICovCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKyN1bmRlZiBVU0VfRE1BCisjZW5kaWYKKwogLyogSVNPIHRvbyAqLwogI2RlZmluZQlVU0VfSVNPCiAKQEAgLTk5LDcgKzEwNSw3IEBACiAgKiBib290IHBhcmFtZXRlciAib21hcF91ZGM6Zmlmb19tb2RlPTQyIgogICovCiBtb2R1bGVfcGFyYW0gKGZpZm9fbW9kZSwgdWludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDIChmaWZvX21vZGUsICJlbmRwb2ludCBzZXR1cCAoMCA9PSBkZWZhdWx0KSIpOworTU9EVUxFX1BBUk1fREVTQyAoZmlmb19tb2RlLCAiZW5kcG9pbnQgY29uZmlndXJhdGlvbiIpOwogCiAjaWZkZWYJVVNFX0RNQQogc3RhdGljIHVuc2lnbmVkIHVzZV9kbWEgPSAxOwpAQCAtMTIyLDcgKzEyOCw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiB0aGVyZSdzIGEgbm90aW9uIG9mICJjdXJyZW50IGVuZHBvaW50IiBmb3IgbW9kaWZ5aW5nIGVuZHBvaW50Ci0gKiBzdGF0ZSwgYW5kIFBJTyBhY2Nlc3MgdG8gaXRzIEZJRk8uICAKKyAqIHN0YXRlLCBhbmQgUElPIGFjY2VzcyB0byBpdHMgRklGTy4KICAqLwogCiBzdGF0aWMgdm9pZCB1c2VfZXAoc3RydWN0IG9tYXBfZXAgKmVwLCB1MTYgc2VsZWN0KQpAQCAtMzkxLDcgKzM5Nyw3IEBACiAjZGVmaW5lIEZJRk9fRU1QVFkJKFVEQ19OT05fSVNPX0ZJRk9fRU1QVFkgfCBVRENfSVNPX0ZJRk9fRU1QVFkpCiAjZGVmaW5lIEZJRk9fVU5SRUFEQUJMRSAoVURDX0VQX0hBTFRFRCB8IEZJRk9fRU1QVFkpCiAKLXN0YXRpYyBpbmxpbmUgaW50IAorc3RhdGljIGlubGluZSBpbnQKIHdyaXRlX3BhY2tldCh1OCAqYnVmLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSwgdW5zaWduZWQgbWF4KQogewogCXVuc2lnbmVkCWxlbjsKQEAgLTQ1Niw3ICs0NjIsNyBAQAogCXJldHVybiBpc19sYXN0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCAKK3N0YXRpYyBpbmxpbmUgaW50CiByZWFkX3BhY2tldCh1OCAqYnVmLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSwgdW5zaWduZWQgYXZhaWwpCiB7CiAJdW5zaWduZWQJbGVuOwpAQCAtNTQyLDkgKzU0OCw5IEBACiAJLyogb21hcCAzLjIvMy4zIGVycmF0dW06IHNvbWV0aW1lcyAwIGlzIHJldHVybmVkIGlmIENTQUMvQ0RBQyBpcwogCSAqIHJlYWQgYmVmb3JlIHRoZSBETUEgY29udHJvbGxlciBmaW5pc2hlZCBkaXNhYmxpbmcgdGhlIGNoYW5uZWwuCiAJICovCi0JY3NhYyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NBQyhsY2gpKTsKKwljc2FjID0gT01BUF9ETUFfQ1NBQ19SRUcobGNoKTsKIAlpZiAoY3NhYyA9PSAwKQotCQljc2FjID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0FDKGxjaCkpOworCQljc2FjID0gT01BUF9ETUFfQ1NBQ19SRUcobGNoKTsKIAlyZXR1cm4gY3NhYzsKIH0KIApAQCAtNTU1LDkgKzU2MSw5IEBACiAJLyogb21hcCAzLjIvMy4zIGVycmF0dW06IHNvbWV0aW1lcyAwIGlzIHJldHVybmVkIGlmIENTQUMvQ0RBQyBpcwogCSAqIHJlYWQgYmVmb3JlIHRoZSBETUEgY29udHJvbGxlciBmaW5pc2hlZCBkaXNhYmxpbmcgdGhlIGNoYW5uZWwuCiAJICovCi0JY2RhYyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0RBQyhsY2gpKTsKKwljZGFjID0gT01BUF9ETUFfQ0RBQ19SRUcobGNoKTsKIAlpZiAoY2RhYyA9PSAwKQotCQljZGFjID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DREFDKGxjaCkpOworCQljZGFjID0gT01BUF9ETUFfQ0RBQ19SRUcobGNoKTsKIAlyZXR1cm4gY2RhYzsKIH0KIApAQCAtNTgyLDcgKzU4OCw3IEBACiB9CiAKICNkZWZpbmUgRE1BX0RFU1RfTEFTVCh4KSAoY3B1X2lzX29tYXAxNXh4KCkgXAotCQk/IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NBQyh4KSkgLyogcmVhbGx5OiBDUEMgKi8gXAorCQk/IE9NQVBfRE1BX0NTQUNfUkVHKHgpIC8qIHJlYWxseTogQ1BDICovIFwKIAkJOiBkbWFfY2RhYyh4KSkKIAogc3RhdGljIHUxNiBkbWFfZGVzdF9sZW4oc3RydWN0IG9tYXBfZXAgKmVwLCBkbWFfYWRkcl90IHN0YXJ0KQpAQCAtNjIwLDE3ICs2MjYsMTkgQEAKIAkJCXx8IChjcHVfaXNfb21hcDE1eHgoKSAmJiBsZW5ndGggPCBlcC0+bWF4cGFja2V0KSkgewogCQl0eGRtYV9jdHJsID0gVURDX1RYTl9FT1QgfCBsZW5ndGg7CiAJCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoZXAtPmxjaCwgT01BUF9ETUFfREFUQV9UWVBFX1M4LAotCQkJCWxlbmd0aCwgMSwgc3luY19tb2RlKTsKKwkJCQlsZW5ndGgsIDEsIHN5bmNfbW9kZSwgMCwgMCk7CiAJfSBlbHNlIHsKIAkJbGVuZ3RoID0gbWluKGxlbmd0aCAvIGVwLT5tYXhwYWNrZXQsCiAJCQkJKHVuc2lnbmVkKSBVRENfVFhOX1RTQyArIDEpOwotIAkJdHhkbWFfY3RybCA9IGxlbmd0aDsKKwkJdHhkbWFfY3RybCA9IGxlbmd0aDsKIAkJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhlcC0+bGNoLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAotCQkJCWVwLT5lcC5tYXhwYWNrZXQgPj4gMSwgbGVuZ3RoLCBzeW5jX21vZGUpOworCQkJCWVwLT5lcC5tYXhwYWNrZXQgPj4gMSwgbGVuZ3RoLCBzeW5jX21vZGUsCisJCQkJMCwgMCk7CiAJCWxlbmd0aCAqPSBlcC0+bWF4cGFja2V0OwogCX0KIAlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhlcC0+bGNoLCBPTUFQX0RNQV9QT1JUX0VNSUZGLAotCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywgcmVxLT5yZXEuZG1hICsgcmVxLT5yZXEuYWN0dWFsKTsKKwkJT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsIHJlcS0+cmVxLmRtYSArIHJlcS0+cmVxLmFjdHVhbCwKKwkJMCwgMCk7CiAKIAlvbWFwX3N0YXJ0X2RtYShlcC0+bGNoKTsKIAllcC0+ZG1hX2NvdW50ZXIgPSBkbWFfY3NhYyhlcC0+bGNoKTsKQEAgLTY3NSw5ICs2ODMsMTEgQEAKIAlyZXEtPmRtYV9ieXRlcyA9IHBhY2tldHMgKiBlcC0+ZXAubWF4cGFja2V0OwogCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoZXAtPmxjaCwgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKIAkJCWVwLT5lcC5tYXhwYWNrZXQgPj4gMSwgcGFja2V0cywKLQkJCU9NQVBfRE1BX1NZTkNfRUxFTUVOVCk7CisJCQlPTUFQX0RNQV9TWU5DX0VMRU1FTlQsCisJCQkwLCAwKTsKIAlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoZXAtPmxjaCwgT01BUF9ETUFfUE9SVF9FTUlGRiwKLQkJT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsIHJlcS0+cmVxLmRtYSArIHJlcS0+cmVxLmFjdHVhbCk7CisJCU9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLCByZXEtPnJlcS5kbWEgKyByZXEtPnJlcS5hY3R1YWwsCisJCTAsIDApOwogCWVwLT5kbWFfY291bnRlciA9IERNQV9ERVNUX0xBU1QoZXAtPmxjaCk7CiAKIAlVRENfUlhETUFfUkVHKGVwLT5kbWFfY2hhbm5lbCkgPSBVRENfUlhOX1NUT1AgfCAocGFja2V0cyAtIDEpOwpAQCAtODIwLDcgKzgzMCw4IEBACiAJCQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoZXAtPmxjaCwKIAkJCQlPTUFQX0RNQV9QT1JUX1RJUEIsCiAJCQkJT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCi0JCQkJKHVuc2lnbmVkIGxvbmcpIGlvX3YycCgodTMyKSZVRENfREFUQV9ETUFfUkVHKSk7CisJCQkJKHVuc2lnbmVkIGxvbmcpIGlvX3YycCgodTMyKSZVRENfREFUQV9ETUFfUkVHKSwKKwkJCQkwLCAwKTsKIAkJfQogCX0gZWxzZSB7CiAJCXN0YXR1cyA9IG9tYXBfcmVxdWVzdF9kbWEoT01BUF9ETUFfVVNCX1cyRkNfUlgwIC0gMSArIGNoYW5uZWwsCkBAIC04MzEsNyArODQyLDggQEAKIAkJCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGVwLT5sY2gsCiAJCQkJT01BUF9ETUFfUE9SVF9USVBCLAogCQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAotCQkJCSh1bnNpZ25lZCBsb25nKSBpb192MnAoKHUzMikmVURDX0RBVEFfRE1BX1JFRykpOworCQkJCSh1bnNpZ25lZCBsb25nKSBpb192MnAoKHUzMikmVURDX0RBVEFfRE1BX1JFRyksCisJCQkJMCwgMCk7CiAJCQkvKiBFTUlGRiAqLwogCQkJb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShlcC0+bGNoLAogCQkJCQkJT01BUF9ETUFfREFUQV9CVVJTVF80KTsKQEAgLTg0Niw3ICs4NTgsNyBAQAogCiAJCS8qIGNoYW5uZWwgdHlwZSBQOiBodyBzeW5jaCAoZmlmbykgKi8KIAkJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKLQkJCW9tYXBfd3JpdGV3KDIsIE9NQVBfRE1BX0xDSF9DVFJMKGVwLT5sY2gpKTsKKwkJCU9NQVAxX0RNQV9MQ0hfQ1RSTF9SRUcoZXAtPmxjaCkgPSAyOwogCX0KIAoganVzdF9yZXN0YXJ0OgpAQCAtODkzLDcgKzkwNSw3IEBACiAJZWxzZQogCQlyZXEgPSBOVUxMOwogCi0JYWN0aXZlID0gKCgxIDw8IDcpICYgb21hcF9yZWFkbChPTUFQX0RNQV9DQ1IoZXAtPmxjaCkpKSAhPSAwOworCWFjdGl2ZSA9ICgoMSA8PCA3KSAmIE9NQVBfRE1BX0NDUl9SRUcoZXAtPmxjaCkpICE9IDA7CiAKIAlEQkcoIiVzIHJlbGVhc2UgJXMgJWN4ZG1hJWQgJXBcbiIsIGVwLT5lcC5uYW1lLAogCQkJYWN0aXZlID8gImFjdGl2ZSIgOiAiaWRsZSIsCkBAIC0xMTE3LDcgKzExMjksNyBAQAogCQkgKi8KIAkJZG1hX2NoYW5uZWxfcmVsZWFzZShlcCk7CiAJCWRtYV9jaGFubmVsX2NsYWltKGVwLCBjaGFubmVsKTsKLQl9IGVsc2UgCisJfSBlbHNlCiAJCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTExNTMsNyArMTE2NSw3IEBACiAKIAkJLyogSU4gZW5kcG9pbnRzIG11c3QgYWxyZWFkeSBiZSBpZGxlICovCiAJCWlmICgoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQotCQkJCSYmICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7IAorCQkJCSYmICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CiAJCQlzdGF0dXMgPSAtRUFHQUlOOwogCQkJZ290byBkb25lOwogCQl9CkBAIC0xMjk4LDYgKzEzMTAsMjMgQEAKIAlVRENfU1lTQ09OMV9SRUcgJj0gflVEQ19QVUxMVVBfRU47CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91ZGMgKnVkYzsKKworc3RhdGljIHZvaWQgb21hcF91ZGNfZW5hYmxlX2Nsb2NrKGludCBlbmFibGUpCit7CisJaWYgKHVkYyA9PSBOVUxMIHx8IHVkYy0+ZGNfY2xrID09IE5VTEwgfHwgdWRjLT5oaGNfY2xrID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChlbmFibGUpIHsKKwkJY2xrX2VuYWJsZSh1ZGMtPmRjX2Nsayk7CisJCWNsa19lbmFibGUodWRjLT5oaGNfY2xrKTsKKwkJdWRlbGF5KDEwMCk7CisJfSBlbHNlIHsKKwkJY2xrX2Rpc2FibGUodWRjLT5oaGNfY2xrKTsKKwkJY2xrX2Rpc2FibGUodWRjLT5kY19jbGspOworCX0KK30KKwogLyoKICAqIENhbGxlZCBieSB3aGF0ZXZlciBkZXRlY3RzIFZCVVMgc2Vzc2lvbnM6ICBleHRlcm5hbCB0cmFuc2NlaXZlcgogICogZHJpdmVyLCBvciBtYXliZSBHUElPMCBWQlVTIElSUS4gIE1heSByZXF1ZXN0IDQ4IE1IeiBjbG9jay4KQEAgLTEzMTgsMTAgKzEzNDcsMjIgQEAKIAkJZWxzZQogCQkJRlVOQ19NVVhfQ1RSTF8wX1JFRyAmPSB+VkJVU19DVFJMXzE1MTA7CiAJfQorCWlmICh1ZGMtPmRjX2NsayAhPSBOVUxMICYmIGlzX2FjdGl2ZSkgeworCQlpZiAoIXVkYy0+Y2xrX3JlcXVlc3RlZCkgeworCQkJb21hcF91ZGNfZW5hYmxlX2Nsb2NrKDEpOworCQkJdWRjLT5jbGtfcmVxdWVzdGVkID0gMTsKKwkJfQorCX0KIAlpZiAoY2FuX3B1bGx1cCh1ZGMpKQogCQlwdWxsdXBfZW5hYmxlKHVkYyk7CiAJZWxzZQogCQlwdWxsdXBfZGlzYWJsZSh1ZGMpOworCWlmICh1ZGMtPmRjX2NsayAhPSBOVUxMICYmICFpc19hY3RpdmUpIHsKKwkJaWYgKHVkYy0+Y2xrX3JlcXVlc3RlZCkgeworCQkJb21hcF91ZGNfZW5hYmxlX2Nsb2NrKDApOworCQkJdWRjLT5jbGtfcmVxdWVzdGVkID0gMDsKKwkJfQorCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NDEsNyArMTQ4Miw3IEBACiAJCX0KIAl9CiAKLQkvKiBJTi9PVVQgcGFja2V0cyBtZWFuIHdlJ3JlIGluIHRoZSBEQVRBIG9yIFNUQVRVUyBzdGFnZS4gIAorCS8qIElOL09VVCBwYWNrZXRzIG1lYW4gd2UncmUgaW4gdGhlIERBVEEgb3IgU1RBVFVTIHN0YWdlLgogCSAqIFRoaXMgZHJpdmVyIHVzZXMgb25seSB1c2VzIHByb3RvY29sIHN0YWxscyAoZXAwIG5ldmVyIGhhbHRzKSwKIAkgKiBhbmQgaWYgd2UgZ290IHRoaXMgZmFyIHRoZSBnYWRnZXQgZHJpdmVyIGFscmVhZHkgaGFkIGEKIAkgKiBjaGFuY2UgdG8gc3RhbGwuICBUcmllcyB0byBiZSBmb3JnaXZpbmcgb2YgaG9zdCBvZGRpdGllcy4KQEAgLTE1MDksNyArMTU1MCw3IEBACiAJCQkJfSBlbHNlIGlmIChzdGF0ID09IDApCiAJCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKIAkJCQlVRENfRVBfTlVNX1JFRyA9IDA7Ci0JCQkJCisKIAkJCQkvKiBhY3RpdmF0ZSBzdGF0dXMgc3RhZ2UgKi8KIAkJCQlpZiAoc3RhdCA9PSAxKSB7CiAJCQkJCWRvbmUoZXAwLCByZXEsIDApOwpAQCAtMTg2Niw3ICsxOTA3LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CiAJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmIGVwLT5hY2t3YWl0KSB7Ci0JCXVzZV9lcChlcCwgMCk7CisJCXVzZV9lcChlcCwgVURDX0VQX1NFTCk7CiAJCXN0YXRfZmxnID0gVURDX1NUQVRfRkxHX1JFRzsKIAogCQlpZiAoKHN0YXRfZmxnICYgVURDX0FDSykgJiYgKCEoc3RhdF9mbGcgJiBVRENfRklGT19FTikKQEAgLTE4NzYsMTIgKzE5MTcsMTIgQEAKIAkJCVZEQkcoIiVzOiBsb3NlLCAlMDR4XG4iLCBlcC0+ZXAubmFtZSwgc3RhdF9mbGcpOwogCQkJcmVxID0gY29udGFpbmVyX29mKGVwLT5xdWV1ZS5uZXh0LAogCQkJCQlzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKLQkJCVVEQ19FUF9OVU1fUkVHID0gZXAtPmJFbmRwb2ludEFkZHJlc3MgfCBVRENfRVBfU0VMOwogCQkJKHZvaWQpIHJlYWRfZmlmbyhlcCwgcmVxKTsKIAkJCVVEQ19FUF9OVU1fUkVHID0gZXAtPmJFbmRwb2ludEFkZHJlc3M7CiAJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CiAJCQllcC0+YWNrd2FpdCA9IDEgKyBlcC0+ZG91YmxlX2J1ZjsKLQkJfQorCQl9IGVsc2UKKwkJCWRlc2VsZWN0X2VwKCk7CiAJfQogCW1vZF90aW1lcigmZXAtPnRpbWVyLCBQSU9fT1VUX1RJTUVPVVQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKQEAgLTIwMjgsNyArMjA2OSwxNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3RydWN0IG9tYXBfdWRjICp1ZGM7CitzdGF0aWMgaW5saW5lIGludCBtYWNoaW5lX25lZWRzX3ZidXNfc2Vzc2lvbih2b2lkKQoreworCXJldHVybiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpCisJCXx8IG1hY2hpbmVfaXNfb21hcF9vc2soKQorCQl8fCBtYWNoaW5lX2lzX29tYXBfYXBvbGxvbigpCisjaWZuZGVmIENPTkZJR19NQUNIX09NQVBfSDRfT1RHCisJCXx8IG1hY2hpbmVfaXNfb21hcF9oNCgpCisjZW5kaWYKKwkJfHwgbWFjaGluZV9pc19zeDEoKQorCQkpOworfQogCiBpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQogewpAQCAtMjA0Myw3ICsyMDk0LDYgQEAKIAkJCS8vIEZJWE1FIGlmIG90ZywgY2hlY2s6ICBkcml2ZXItPmlzX290ZwogCQkJfHwgZHJpdmVyLT5zcGVlZCA8IFVTQl9TUEVFRF9GVUxMCiAJCQl8fCAhZHJpdmVyLT5iaW5kCi0JCQl8fCAhZHJpdmVyLT51bmJpbmQKIAkJCXx8ICFkcml2ZXItPnNldHVwKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjA3MSw2ICsyMTIxLDkgQEAKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOwogCisJaWYgKHVkYy0+ZGNfY2xrICE9IE5VTEwpCisJCW9tYXBfdWRjX2VuYWJsZV9jbG9jaygxKTsKKwogCXN0YXR1cyA9IGRyaXZlci0+YmluZCAoJnVkYy0+Z2FkZ2V0KTsKIAlpZiAoc3RhdHVzKSB7CiAJCURCRygiYmluZCB0byAlcyAtLT4gJWRcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUsIHN0YXR1cyk7CkBAIC0yMDg3LDkgKzIxNDAsMTEgQEAKIAkJc3RhdHVzID0gb3RnX3NldF9wZXJpcGhlcmFsKHVkYy0+dHJhbnNjZWl2ZXIsICZ1ZGMtPmdhZGdldCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlFUlIoImNhbid0IGJpbmQgdG8gdHJhbnNjZWl2ZXJcbiIpOwotCQkJZHJpdmVyLT51bmJpbmQgKCZ1ZGMtPmdhZGdldCk7Ci0JCQl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKLQkJCXVkYy0+ZHJpdmVyID0gTlVMTDsKKwkJCWlmIChkcml2ZXItPnVuYmluZCkgeworCQkJCWRyaXZlci0+dW5iaW5kICgmdWRjLT5nYWRnZXQpOworCQkJCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCQkJCXVkYy0+ZHJpdmVyID0gTlVMTDsKKwkJCX0KIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0gZWxzZSB7CkBAIC0yMTAyLDEwICsyMTU3LDEyIEBACiAJLyogYm9hcmRzIHRoYXQgZG9uJ3QgaGF2ZSBWQlVTIHNlbnNpbmcgY2FuJ3QgYXV0b2dhdGUgNDhNSHo7CiAJICogY2FuJ3QgZW50ZXIgZGVlcCBzbGVlcCB3aGlsZSBhIGdhZGdldCBkcml2ZXIgaXMgYWN0aXZlLgogCSAqLwotCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkgfHwgbWFjaGluZV9pc19vbWFwX29zaygpKQorCWlmIChtYWNoaW5lX25lZWRzX3ZidXNfc2Vzc2lvbigpKQogCQlvbWFwX3ZidXNfc2Vzc2lvbigmdWRjLT5nYWRnZXQsIDEpOwogCiBkb25lOgorCWlmICh1ZGMtPmRjX2NsayAhPSBOVUxMKQorCQlvbWFwX3VkY19lbmFibGVfY2xvY2soMCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMjExNywxMCArMjE3NCwxMyBAQAogCiAJaWYgKCF1ZGMpCiAJCXJldHVybiAtRU5PREVWOwotCWlmICghZHJpdmVyIHx8IGRyaXZlciAhPSB1ZGMtPmRyaXZlcikKKwlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gdWRjLT5kcml2ZXIgfHwgIWRyaXZlci0+dW5iaW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkgfHwgbWFjaGluZV9pc19vbWFwX29zaygpKQorCWlmICh1ZGMtPmRjX2NsayAhPSBOVUxMKQorCQlvbWFwX3VkY19lbmFibGVfY2xvY2soMSk7CisKKwlpZiAobWFjaGluZV9uZWVkc192YnVzX3Nlc3Npb24oKSkKIAkJb21hcF92YnVzX3Nlc3Npb24oJnVkYy0+Z2FkZ2V0LCAwKTsKIAogCWlmICh1ZGMtPnRyYW5zY2VpdmVyKQpAQCAtMjEzNiw2ICsyMTk2LDggQEAKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKIAl1ZGMtPmRyaXZlciA9IE5VTEw7CiAKKwlpZiAodWRjLT5kY19jbGsgIT0gTlVMTCkKKwkJb21hcF91ZGNfZW5hYmxlX2Nsb2NrKDApOwogCURCRygidW5yZWdpc3RlcmVkIGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMjIxOCw3ICsyMjgwLDcgQEAKIAljYXNlIDA6CQlyZXR1cm4gZW5hYmxlZCA/ICIqNndpcmUiIDogInVudXNlZCI7CiAJY2FzZSAxOgkJcmV0dXJuICI0d2lyZSI7CiAJY2FzZSAyOgkJcmV0dXJuICIzd2lyZSI7Ci0JY2FzZSAzOiAJcmV0dXJuICI2d2lyZSI7CisJY2FzZSAzOgkJcmV0dXJuICI2d2lyZSI7CiAJZGVmYXVsdDoJcmV0dXJuICJ1bmtub3duIjsKIAl9CiB9CkBAIC0yMjI3LDExICsyMjg5LDE4IEBACiB7CiAJdTMyCQl0bXA7CiAJdTMyCQl0cmFuczsKKwljaGFyCQkqY3RybF9uYW1lOwogCiAJdG1wID0gT1RHX1JFVl9SRUc7Ci0JdHJhbnMgPSBVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUc7Ci0Jc2VxX3ByaW50ZihzLCAiXG5PVEcgcmV2ICVkLiVkLCB0cmFuc2NlaXZlcl9jdHJsICUwNXhcbiIsCi0JCXRtcCA+PiA0LCB0bXAgJiAweGYsIHRyYW5zKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJY3RybF9uYW1lID0gImNvbnRyb2xfZGV2Y29uZiI7CisJCXRyYW5zID0gQ09OVFJPTF9ERVZDT05GX1JFRzsKKwl9IGVsc2UgeworCQljdHJsX25hbWUgPSAidHJhbmNlaXZlcl9jdHJsIjsKKwkJdHJhbnMgPSBVU0JfVFJBTlNDRUlWRVJfQ1RSTF9SRUc7CisJfQorCXNlcV9wcmludGYocywgIlxuT1RHIHJldiAlZC4lZCwgJXMgJTA1eFxuIiwKKwkJdG1wID4+IDQsIHRtcCAmIDB4ZiwgY3RybF9uYW1lLCB0cmFucyk7CiAJdG1wID0gT1RHX1NZU0NPTl8xX1JFRzsKIAlzZXFfcHJpbnRmKHMsICJvdGdfc3lzY29uMSAlMDh4IHVzYjIgJXMsIHVzYjEgJXMsIHVzYjAgJXMsIgogCQkJRk9VUkJJVFMgIlxuIiwgdG1wLApAQCAtMjMwNiw3ICsyMzc1LDcgQEAKIAkJZHJpdmVyX2Rlc2MsCiAJCXVzZV9kbWEgPyAgIiAoZG1hKSIgOiAiIik7CiAKLQl0bXAgPSBVRENfUkVWX1JFRyAmIDB4ZmY7IAorCXRtcCA9IFVEQ19SRVZfUkVHICYgMHhmZjsKIAlzZXFfcHJpbnRmKHMsCiAJCSJVREMgcmV2ICVkLiVkLCBmaWZvIG1vZGUgJWQsIGdhZGdldCAlc1xuIgogCQkiaG1jICVkLCB0cmFuc2NlaXZlciAlc1xuIiwKQEAgLTIzMTQsMTEgKzIzODMsMTYgQEAKIAkJZmlmb19tb2RlLAogCQl1ZGMtPmRyaXZlciA/IHVkYy0+ZHJpdmVyLT5kcml2ZXIubmFtZSA6ICIobm9uZSkiLAogCQlITUMsCi0JCXVkYy0+dHJhbnNjZWl2ZXIgPyB1ZGMtPnRyYW5zY2VpdmVyLT5sYWJlbCA6ICIobm9uZSkiKTsKLQlzZXFfcHJpbnRmKHMsICJVTFBEIGNvbnRyb2wgJTA0eCByZXEgJTA0eCBzdGF0dXMgJTA0eFxuIiwKLQkJX19SRUcxNihVTFBEX0NMT0NLX0NUUkwpLAotCQlfX1JFRzE2KFVMUERfU09GVF9SRVEpLAotCQlfX1JFRzE2KFVMUERfU1RBVFVTX1JFUSkpOworCQl1ZGMtPnRyYW5zY2VpdmVyCisJCQk/IHVkYy0+dHJhbnNjZWl2ZXItPmxhYmVsCisJCQk6ICgoY3B1X2lzX29tYXAxNzEwKCkgfHwgY3B1X2lzX29tYXAyNHh4KCkpCisJCQkJPyAiZXh0ZXJuYWwiIDogIihub25lKSIpKTsKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJc2VxX3ByaW50ZihzLCAiVUxQRCBjb250cm9sICUwNHggcmVxICUwNHggc3RhdHVzICUwNHhcbiIsCisJCQlfX1JFRzE2KFVMUERfQ0xPQ0tfQ1RSTCksCisJCQlfX1JFRzE2KFVMUERfU09GVF9SRVEpLAorCQkJX19SRUcxNihVTFBEX1NUQVRVU19SRVEpKTsKKwl9CiAKIAkvKiBPVEcgY29udHJvbGxlciByZWdpc3RlcnMgKi8KIAlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKQpAQCAtMjUwMyw5ICsyNTc3LDEwIEBACiAJCWRidWYgPSAxOwogCX0gZWxzZSB7CiAJCS8qIGRvdWJsZS1idWZmZXJpbmcgIm5vdCBzdXBwb3J0ZWQiIG9uIDE1eHgsCi0JCSAqIGFuZCBpZ25vcmVkIGZvciBQSU8tSU4gb24gMTZ4eAorCQkgKiBhbmQgaWdub3JlZCBmb3IgUElPLUlOIG9uIG5ld2VyIGNoaXBzCisJCSAqIChmb3IgbW9yZSByZWxpYWJsZSBiZWhhdmlvcikKIAkJICovCi0JCWlmICghdXNlX2RtYSB8fCBjcHVfaXNfb21hcDE1eHgoKSkKKwkJaWYgKCF1c2VfZG1hIHx8IGNwdV9pc19vbWFwMTV4eCgpIHx8IGNwdV9pc19vbWFwMjR4eCgpKQogCQkJZGJ1ZiA9IDA7CiAKIAkJc3dpdGNoIChtYXhwKSB7CkBAIC0yNTQ4LDcgKzI2MjMsNyBAQAogCWVwLT5iRW5kcG9pbnRBZGRyZXNzID0gYWRkcjsKIAllcC0+Ym1BdHRyaWJ1dGVzID0gdHlwZTsKIAllcC0+ZG91YmxlX2J1ZiA9IGRidWY7Ci0JZXAtPnVkYyA9IHVkYzsgCisJZXAtPnVkYyA9IHVkYzsKIAogCWVwLT5lcC5uYW1lID0gZXAtPm5hbWU7CiAJZXAtPmVwLm9wcyA9ICZvbWFwX2VwX29wczsKQEAgLTI3MDgsMTUgKzI3ODMsMzcgQEAKIAlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCSp4Y2VpdiA9IE5VTEw7CiAJY29uc3QgY2hhcgkJKnR5cGUgPSBOVUxMOwogCXN0cnVjdCBvbWFwX3VzYl9jb25maWcJKmNvbmZpZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBjbGsJCSpkY19jbGs7CisJc3RydWN0IGNsawkJKmhoY19jbGs7CiAKIAkvKiBOT1RFOiAgImtub3dzIiB0aGUgb3JkZXIgb2YgdGhlIHJlc291cmNlcyEgKi8KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCiAJCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEsCiAJCQlkcml2ZXJfbmFtZSkpIHsKIAkJREJHKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwkJZGNfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAidXNiX2RjX2NrIik7CisJCWhoY19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2JfaGhjX2NrIik7CisJCUJVR19PTihJU19FUlIoZGNfY2xrKSB8fCBJU19FUlIoaGhjX2NsaykpOworCQkvKiBjYW4ndCB1c2Ugb21hcF91ZGNfZW5hYmxlX2Nsb2NrIHlldCAqLworCQljbGtfZW5hYmxlKGRjX2Nsayk7CisJCWNsa19lbmFibGUoaGhjX2Nsayk7CisJCXVkZWxheSgxMDApOworCX0KKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlkY19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2JfZmNrIik7CisJCWhoY19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2JfbDRfaWNrIik7CisJCUJVR19PTihJU19FUlIoZGNfY2xrKSB8fCBJU19FUlIoaGhjX2NsaykpOworCQkvKiBjYW4ndCB1c2Ugb21hcF91ZGNfZW5hYmxlX2Nsb2NrIHlldCAqLworCQljbGtfZW5hYmxlKGRjX2Nsayk7CisJCWNsa19lbmFibGUoaGhjX2Nsayk7CisJCXVkZWxheSgxMDApOworCX0KKwogCUlORk8oIk9NQVAgVURDIHJldiAlZC4lZCVzXG4iLAogCQlVRENfUkVWX1JFRyA+PiA0LCBVRENfUkVWX1JFRyAmIDB4ZiwKIAkJY29uZmlnLT5vdGcgPyAiLCBNaW5pLUFCIiA6ICIiKTsKQEAgLTI3MjYsNyArMjgyMyw3IEBACiAJCWhtYyA9IEhNQ18xNTEwOwogCQl0eXBlID0gIih1bmtub3duKSI7CiAKLQkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkgeworCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpIHx8IG1hY2hpbmVfaXNfc3gxKCkpIHsKIAkJCS8qIGp1c3Qgc2V0IHVwIHNvZnR3YXJlIFZCVVMgZGV0ZWN0LCBhbmQgdGhlbgogCQkJICogbGF0ZXIgcmlnIGl0IHNvIHdlIGFsd2F5cyByZXBvcnQgVkJVUy4KIAkJCSAqIEZJWE1FIHdpdGhvdXQgcmVhbGx5IHNlbnNpbmcgVkJVUywgd2UgY2FuJ3QKQEAgLTI3NTUsNiArMjg1MiwxNSBAQAogCQl9CiAKIAkJaG1jID0gSE1DXzE2MTA7CisKKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCQkvKiB0aGlzIGNvdWxkIGJlIHRyYW5zY2VpdmVybGVzcyBpbiBvbmUgb2YgdGhlCisJCQkgKiAid2UgZG9uJ3QgbmVlZCB0byBrbm93IiBtb2Rlcy4KKwkJCSAqLworCQkJdHlwZSA9ICJleHRlcm5hbCI7CisJCQlnb3RvIGtub3duOworCQl9CisKIAkJc3dpdGNoIChobWMpIHsKIAkJY2FzZSAwOgkJCS8qIFBPV0VSVVAgREVGQVVMVCA9PSAwICovCiAJCWNhc2UgNDoKQEAgLTI3OTMsNiArMjg5OSw3IEBACiAJCQlnb3RvIGNsZWFudXAwOwogCQl9CiAJfQora25vd246CiAJSU5GTygiaG1jIG1vZGUgJWQsICVzIHRyYW5zY2VpdmVyXG4iLCBobWMsIHR5cGUpOwogCiAJLyogYSAiZ2FkZ2V0IiBhYnN0cmFjdHMvdmlydHVhbGl6ZXMgdGhlIGNvbnRyb2xsZXIgKi8KQEAgLTI4MTcsOCArMjkyNCw4IEBACiAJc3RhdHVzID0gcmVxdWVzdF9pcnEocGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIG9tYXBfdWRjX2lycSwKIAkJCUlSUUZfU0FNUExFX1JBTkRPTSwgZHJpdmVyX25hbWUsIHVkYyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCUVSUiggImNhbid0IGdldCBpcnEgJWxkLCBlcnIgJWRcbiIsCi0JCQlwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgc3RhdHVzKTsKKwkJRVJSKCJjYW4ndCBnZXQgaXJxICVkLCBlcnIgJWRcbiIsCisJCQkoaW50KSBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgc3RhdHVzKTsKIAkJZ290byBjbGVhbnVwMTsKIAl9CiAKQEAgLTI4MjYsMjQgKzI5MzMsNDEgQEAKIAlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgb21hcF91ZGNfcGlvX2lycSwKIAkJCUlSUUZfU0FNUExFX1JBTkRPTSwgIm9tYXBfdWRjIHBpbyIsIHVkYyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCUVSUiggImNhbid0IGdldCBpcnEgJWxkLCBlcnIgJWRcbiIsCi0JCQlwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgc3RhdHVzKTsKKwkJRVJSKCJjYW4ndCBnZXQgaXJxICVkLCBlcnIgJWRcbiIsCisJCQkoaW50KSBwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgc3RhdHVzKTsKIAkJZ290byBjbGVhbnVwMjsKIAl9CiAjaWZkZWYJVVNFX0lTTwogCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBkZXYtPnJlc291cmNlWzNdLnN0YXJ0LCBvbWFwX3VkY19pc29faXJxLAogCQkJSVJRRl9ESVNBQkxFRCwgIm9tYXBfdWRjIGlzbyIsIHVkYyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCUVSUigiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKLQkJCXBkZXYtPnJlc291cmNlWzNdLnN0YXJ0LCBzdGF0dXMpOworCQlFUlIoImNhbid0IGdldCBpcnEgJWQsIGVyciAlZFxuIiwKKwkJCShpbnQpIHBkZXYtPnJlc291cmNlWzNdLnN0YXJ0LCBzdGF0dXMpOwogCQlnb3RvIGNsZWFudXAzOwogCX0KICNlbmRpZgorCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQl1ZGMtPmRjX2NsayA9IGRjX2NsazsKKwkJdWRjLT5oaGNfY2xrID0gaGhjX2NsazsKKwkJY2xrX2Rpc2FibGUoaGhjX2Nsayk7CisJCWNsa19kaXNhYmxlKGRjX2Nsayk7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCXVkYy0+ZGNfY2xrID0gZGNfY2xrOworCQl1ZGMtPmhoY19jbGsgPSBoaGNfY2xrOworCQkvKiBGSVhNRSBPTUFQMiBkb24ndCByZWxlYXNlIGhoYyAmIGRjIGNsb2NrICovCisjaWYgMAorCQljbGtfZGlzYWJsZShoaGNfY2xrKTsKKwkJY2xrX2Rpc2FibGUoZGNfY2xrKTsKKyNlbmRpZgorCX0KIAogCWNyZWF0ZV9wcm9jX2ZpbGUoKTsKLQlkZXZpY2VfYWRkKCZ1ZGMtPmdhZGdldC5kZXYpOwotCXJldHVybiAwOwotCisJc3RhdHVzID0gZGV2aWNlX2FkZCgmdWRjLT5nYWRnZXQuZGV2KTsKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwkvKiBJZiBmYWlsLCBmYWxsIHRocm91Z2ggKi8KICNpZmRlZglVU0VfSVNPCiBjbGVhbnVwMzoKIAlmcmVlX2lycShwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgdWRjKTsKQEAgLTI4NTksOCArMjk4MywxNyBAQAogY2xlYW51cDA6CiAJaWYgKHhjZWl2KQogCQlwdXRfZGV2aWNlKHhjZWl2LT5kZXYpOworCisJaWYgKGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWNsa19kaXNhYmxlKGhoY19jbGspOworCQljbGtfZGlzYWJsZShkY19jbGspOworCQljbGtfcHV0KGhoY19jbGspOworCQljbGtfcHV0KGRjX2Nsayk7CisJfQorCiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAogCQkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKKwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTI4NzAsNiArMzAwMyw4IEBACiAKIAlpZiAoIXVkYykKIAkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKHVkYy0+ZHJpdmVyKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJdWRjLT5kb25lID0gJmRvbmU7CiAKQEAgLTI4ODgsNiArMzAyMywxMyBAQAogCWZyZWVfaXJxKHBkZXYtPnJlc291cmNlWzJdLnN0YXJ0LCB1ZGMpOwogCWZyZWVfaXJxKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCB1ZGMpOwogCisJaWYgKHVkYy0+ZGNfY2xrKSB7CisJCWlmICh1ZGMtPmNsa19yZXF1ZXN0ZWQpCisJCQlvbWFwX3VkY19lbmFibGVfY2xvY2soMCk7CisJCWNsa19wdXQodWRjLT5oaGNfY2xrKTsKKwkJY2xrX3B1dCh1ZGMtPmRjX2Nsayk7CisJfQorCiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAogCQkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuaAppbmRleCA2NTJlZTQ2Li4xZGMzOThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuaApAQCAtMTc1LDYgKzE3NSw5IEBACiAJdW5zaWduZWQJCQllcDBfcmVzZXRfY29uZmlnOjE7CiAJdW5zaWduZWQJCQllcDBfc2V0dXA6MTsKIAlzdHJ1Y3QgY29tcGxldGlvbgkJKmRvbmU7CisJc3RydWN0IGNsawkJCSpkY19jbGs7CisJc3RydWN0IGNsawkJCSpoaGNfY2xrOworCXVuc2lnbmVkCQkJY2xrX3JlcXVlc3RlZDoxOwogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCmluZGV4IDFlZDUwNmUuLmI3OGRlOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwpAQCAtMTYyMyw3ICsxNjIzLDYgQEAKIAlpZiAoIWRyaXZlcgogCQkJfHwgZHJpdmVyLT5zcGVlZCA8IFVTQl9TUEVFRF9GVUxMCiAJCQl8fCAhZHJpdmVyLT5iaW5kCi0JCQl8fCAhZHJpdmVyLT51bmJpbmQKIAkJCXx8ICFkcml2ZXItPmRpc2Nvbm5lY3QKIAkJCXx8ICFkcml2ZXItPnNldHVwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2OTQsNyArMTY5Myw3IEBACiAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGRldi0+ZHJpdmVyKQorCWlmICghZHJpdmVyIHx8IGRyaXZlciAhPSBkZXYtPmRyaXZlciB8fCAhZHJpdmVyLT51bmJpbmQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKQEAgLTI2MzgsOSArMjYzNywxMSBAQAogewogCXN0cnVjdCBweGEyeHhfdWRjICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCWlmIChkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FQlVTWTsKKwogCXVkY19kaXNhYmxlKGRldik7CiAJcmVtb3ZlX3Byb2NfZmlsZXMoKTsKLQl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAogCWlmIChkZXYtPmdvdF9pcnEpIHsKIAkJZnJlZV9pcnEoSVJRX1VTQiwgZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwppbmRleCAyMDhlNTVhLi5mOGEzZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIHN0YXRpYyB2b2lkIGdzX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSk7CiBzdGF0aWMgaW50ICBnc19pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1zdGF0aWMgdm9pZCBnc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkKTsKK3N0YXRpYyB2b2lkIGdzX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKIAogc3RhdGljIGludCBnc19zZW5kKHN0cnVjdCBnc19kZXYgKmRldik7CiBzdGF0aWMgaW50IGdzX3NlbmRfcGFja2V0KHN0cnVjdCBnc19kZXYgKmRldiwgY2hhciAqcGFja2V0LApAQCAtMjk2LDcgKzI5Niw3IEBACiAjZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCiAJLmZ1bmN0aW9uID0JCUdTX0xPTkdfTkFNRSwKIAkuYmluZCA9CQkJZ3NfYmluZCwKLQkudW5iaW5kID0JCV9fZXhpdF9wKGdzX3VuYmluZCksCisJLnVuYmluZCA9CQlnc191bmJpbmQsCiAJLnNldHVwID0JCWdzX3NldHVwLAogCS5kaXNjb25uZWN0ID0JCWdzX2Rpc2Nvbm5lY3QsCiAJLmRyaXZlciA9IHsKQEAgLTEwNzcsNyArMTA3Nyw3IEBACiAvKgogICogZ3Nfc2V0X3Rlcm1pb3MKICAqLwotc3RhdGljIHZvaWQgZ3Nfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3N0YXRpYyB2b2lkIGdzX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewogfQogCkBAIC0yMTk1LDcgKzIxOTUsNyBAQAogCWlmIChzaXplID09IDApCiAJCXJldHVybiBOVUxMOwogCi0JZ2IgPSAoc3RydWN0IGdzX2J1ZiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnc19idWYpLCBrbWFsbG9jX2ZsYWdzKTsKKwlnYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnc19idWYpLCBrbWFsbG9jX2ZsYWdzKTsKIAlpZiAoZ2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9oY19jcmlzdjEwLmMKaW5kZXggOTMyNWU0Ni4uMjgyZDgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9oY19jcmlzdjEwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9oY19jcmlzdjEwLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogLyogQWRkcyBhbiB1cmJfZW50cnkgbGFzdCBpbiB0aGUgbGlzdCBmb3IgdGhpcyBlcGlkLiAqLwogc3RhdGljIGlubGluZSB2b2lkIHVyYl9saXN0X2FkZChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQogewotCXVyYl9lbnRyeV90ICp1cmJfZW50cnkgPSAodXJiX2VudHJ5X3QgKilrbWFsbG9jKHNpemVvZih1cmJfZW50cnlfdCksIEtNQUxMT0NfRkxBRyk7CisJdXJiX2VudHJ5X3QgKnVyYl9lbnRyeSA9IGttYWxsb2Moc2l6ZW9mKHVyYl9lbnRyeV90KSwgS01BTExPQ19GTEFHKTsKIAlhc3NlcnQodXJiX2VudHJ5KTsKIAogCXVyYl9lbnRyeS0+dXJiID0gdXJiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKaW5kZXggYjQ2NjU4MS4uY2M0MDU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCkBAIC0xODcsNyArMTg3LDYgQEAKIHsKIAlzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEJKmJvYXJkID0gaGNkLT5zZWxmLmNvbnRyb2xsZXItPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOwotCXN0cnVjdCB1c2JfZGV2aWNlCSpyb290ID0gaGNkLT5zZWxmLnJvb3RfaHViOwogCWludAkJCXJldDsKIAogCWlmICgocmV0ID0gb2hjaV9pbml0KG9oY2kpKSA8IDApCkBAIC0yMjEsNyArMjIwLDcgQEAKIAkgKi8KIAkuc3RhcnQgPQkJb2hjaV9hdDkxX3N0YXJ0LAogCS5zdG9wID0JCQlvaGNpX3N0b3AsCi0JLnNodXRkb3duID0gCQlvaGNpX3NodXRkb3duLAorCS5zaHV0ZG93biA9CQlvaGNpX3NodXRkb3duLAogCiAJLyoKIAkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCmluZGV4IDI0ZTIzYzUuLmU3MGIyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCSAqLwogCS5zdGFydCA9CQlvaGNpX2F1MXh4eF9zdGFydCwKIAkuc3RvcCA9CQkJb2hjaV9zdG9wLAotCS5zaHV0ZG93biA9IAkJb2hjaV9zaHV0ZG93biwKKwkuc2h1dGRvd24gPQkJb2hjaV9zaHV0ZG93biwKIAogCS8qCiAJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKQEAgLTMzNiw3ICszMzYsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfYXUxeHh4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlLAotCS5zaHV0ZG93biAJPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAorCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCiAJLyouc3VzcGVuZAk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwgKi8KIAkvKi5yZXN1bWUJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwgKi8KIAkuZHJpdmVyCQk9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYwppbmRleCAwZjQ3YTU3Li4yNzNkNWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCkBAIC0xNiw3ICsxNiw3IEBACiAJY2FzZSBQSVBFX0NPTlRST0w6CXRlbXAgPSAiY3RybCI7IGJyZWFrOyBcCiAJY2FzZSBQSVBFX0JVTEs6CQl0ZW1wID0gImJ1bGsiOyBicmVhazsgXAogCWNhc2UgUElQRV9JTlRFUlJVUFQ6CXRlbXAgPSAiaW50ciI7IGJyZWFrOyBcCi0JZGVmYXVsdDogCQl0ZW1wID0gImlzb2MiOyBicmVhazsgXAorCWRlZmF1bHQ6CQl0ZW1wID0gImlzb2MiOyBicmVhazsgXAogCX07IHRlbXA7fSkKICNkZWZpbmUgcGlwZXN0cmluZyhwaXBlKSBlZHN0cmluZyh1c2JfcGlwZXR5cGUocGlwZSkpCiAKQEAgLTIwNSwxMyArMjA1LDEzIEBACiAJCSh0ZW1wICYgUkhfUFNfUFNTQykgPyAiIFBTU0MiIDogIiIsIFwKIAkJKHRlbXAgJiBSSF9QU19QRVNDKSA/ICIgUEVTQyIgOiAiIiwgXAogCQkodGVtcCAmIFJIX1BTX0NTQykgPyAiIENTQyIgOiAiIiwgXAotIAkJXAorCQlcCiAJCSh0ZW1wICYgUkhfUFNfTFNEQSkgPyAiIExTREEiIDogIiIsIFwKIAkJKHRlbXAgJiBSSF9QU19QUFMpID8gIiBQUFMiIDogIiIsIFwKIAkJKHRlbXAgJiBSSF9QU19QUlMpID8gIiBQUlMiIDogIiIsIFwKIAkJKHRlbXAgJiBSSF9QU19QT0NJKSA/ICIgUE9DSSIgOiAiIiwgXAogCQkodGVtcCAmIFJIX1BTX1BTUykgPyAiIFBTUyIgOiAiIiwgXAotIAkJXAorCQlcCiAJCSh0ZW1wICYgUkhfUFNfUEVTKSA/ICIgUEVTIiA6ICIiLCBcCiAJCSh0ZW1wICYgUkhfUFNfQ0NTKSA/ICIgQ0NTIiA6ICIiIFwKIAkJKTsKQEAgLTU2Myw3ICs1NjMsNyBAQAogCQkJCQkoaW5mbyAmIEVEX1NLSVApID8gIiBLIiA6ICIiLAogCQkJCQkoZWQtPmh3SGVhZFAgJgogCQkJCQkJY3B1X3RvX2hjMzIob2hjaSwgRURfSCkpID8KLSAJCQkJCQkJIiBIIiA6ICIiKTsKKwkJCQkJCQkiIEgiIDogIiIpOwogCQkJCXNpemUgLT0gdGVtcDsKIAkJCQluZXh0ICs9IHRlbXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYwppbmRleCAxYmY1ZTdhLi4zMzQ4YjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWVwOTN4eC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIHN0YXRpYyBpbnQgb2hjaV9oY2RfZXA5M3h4X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG9jaGlfaGNkICpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CkBAIC0yMDQsNyArMjA0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2VwOTN4eF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX2VwOTN4eF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9lcDkzeHhfZHJ2X3JlbW92ZSwKLQkuc2h1dGRvd24gCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKKwkuc2h1dGRvd24JPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gb2hjaV9oY2RfZXA5M3h4X2Rydl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gb2hjaV9oY2RfZXA5M3h4X2Rydl9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggYjI4YTliNi4uYzFjMWQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtMyw3NyArMywyMSBAQAogICoKICAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CiAgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNCBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLSAqIAorICoKICAqIFsgSW5pdGlhbGlzYXRpb24gaXMgYmFzZWQgb24gTGludXMnICBdCiAgKiBbIHVoY2kgY29kZSBhbmQgZ3JlZ3Mgb2hjaSBmcmFnbWVudHMgXQogICogWyAoQykgQ29weXJpZ2h0IDE5OTkgTGludXMgVG9ydmFsZHMgIF0KICAqIFsgKEMpIENvcHlyaWdodCAxOTk5IEdyZWdvcnkgUC4gU21pdGhdCi0gKiAKLSAqIAorICoKKyAqCiAgKiBPSENJIGlzIHRoZSBtYWluICJub24tSW50ZWwvVklBIiBzdGFuZGFyZCBmb3IgVVNCIDEuMSBob3N0IGNvbnRyb2xsZXIKICAqIGludGVyZmFjZXMgKHRob3VnaCBzb21lIG5vbi14ODYgSW50ZWwgY2hpcHMgdXNlIGl0KS4gIEl0IHN1cHBvcnRzCiAgKiBzbWFydGVyIGhhcmR3YXJlIHRoYW4gVUhDSS4gIEEgZG93bmxvYWQgbGluayBmb3IgdGhlIHNwZWMgYXZhaWxhYmxlCiAgKiB0aHJvdWdoIHRoZSBodHRwOi8vd3d3LnVzYi5vcmcgd2Vic2l0ZS4KICAqCi0gKiBIaXN0b3J5OgotICogCi0gKiAyMDA0LzAzLzI0IExIN0E0MDQgc3VwcG9ydCAoRHVyZ2VzaCBQYXR0YW1hdHRhICYgTWFyYyBTaW5nZXIpCi0gKiAyMDA0LzAyLzA0IHVzZSBnZW5lcmljIGRtYV8qIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHBjaV8qIChkc2F4ZW5hQHBsZXhpdHkubmV0KQotICogMjAwMy8wMi8yNCBzaG93IHJlZ2lzdGVycyBpbiBzeXNmcyAoS2V2aW4gQnJvc2l1cykKLSAqCi0gKiAyMDAyLzA5LzAzIGdldCByaWQgb2YgZWQgaGFzaHRhYmxlcywgcmV3b3JrIHBlcmlvZGljIHNjaGVkdWxpbmcgYW5kCi0gKiAJYmFuZHdpZHRoIGFjY291bnRpbmc7IGlmIGRlYnVnZ2luZywgc2hvdyBzY2hlZHVsZXMgaW4gZHJpdmVyZnMKLSAqIDIwMDIvMDcvMTkgZml4ZXMgdG8gbWFuYWdlbWVudCBvZiBFRCBhbmQgc2NoZWR1bGUgc3RhdGUuCi0gKiAyMDAyLzA2LzA5IFNBLTExMTEgc3VwcG9ydCAoQ2hyaXN0b3BoZXIgSG9vdmVyKQotICogMjAwMi8wNi8wMSByZW1lbWJlciBmcmFtZSB3aGVuIEhDIHdvbid0IHNlZSBFRHMgYW55IG1vcmU7IHVzZSB0aGF0IGluZm8KLSAqCXRvIGZpeCB1cmIgdW5saW5rIHJhY2VzIGNhdXNlZCBieSBpbnRlcnJ1cHQgbGF0ZW5jeSBhc3N1bXB0aW9uczsKLSAqCW1pbm9yIEVEIGZpZWxkIGFuZCBmdW5jdGlvbiBuYW1pbmcgdXBkYXRlcwotICogMjAwMi8wMS8xOCBwYWNrYWdlIGFzIGEgcGF0Y2ggZm9yIDIuNS4zOyB0aGlzIHNob3VsZCBtYXRjaCB0aGUKLSAqCTIuNC4xNyBrZXJuZWwgbW9kdWxvIHNvbWUgYnVncyBiZWluZyBmaXhlZC4KLSAqCi0gKiAyMDAxLzEwLzE4IG1lcmdlIHBtYWMgY2xlYW51cCAoQmVuamFtaW4gSGVycmVuc2NobWlkdCkgYW5kIGJ1Z2ZpeGVzCi0gKglmcm9tIHBvc3QtMi40LjUgcGF0Y2hlcy4KLSAqIDIwMDEvMDkvMjAgVVJCX1pFUk9fUEFDS0VUIHN1cHBvcnQ7IGhjY2FfZG1hIHBvcnRhYmlsaXR5LCBPUFRpIHdhcm5pbmcKLSAqIDIwMDEvMDkvMDcgbWF0Y2ggUENJIFBNIGNoYW5nZXMsIGVycm5vcyBmcm9tIExpbnVzJyB0cmVlCi0gKiAyMDAxLzA1LzA1IGZvcmsgMi40LjUgdmVyc2lvbiBpbnRvICJoY2QiIGZyYW1ld29yaywgY2xlYW51cCwgc2ltcGxpZnk7Ci0gKglwYm9vayBwY2kgcXVpcmtzIGdvbmUgKHBsZWFzZSBmaXggcGJvb2sgcGNpIHN3ISkgKGRiKQotICoKLSAqIDIwMDEvMDQvMDggSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZCAoZ2IpCi0gKiAyMDAxLzAzLzI0IHRkL2VkIGhhc2hpbmcgdG8gcmVtb3ZlIGJ1c190b192aXJ0IChTdGV2ZSBMb25nZXJiZWFtKTsKLSAJcGNpX21hcF9zaW5nbGUgKGRiKQotICogMjAwMS8wMy8yMSB0ZCBhbmQgZGV2L2VkIGFsbG9jYXRpb24gdXNlcyBuZXcgcGNpX3Bvb2wgQVBJIChkYikKLSAqIDIwMDEvMDMvMDcgaGNjYSBhbGxvY2F0aW9uIHVzZXMgcGNpX2FsbG9jX2NvbnNpc3RlbnQgKFN0ZXZlIExvbmdlcmJlYW0pCi0gKgotICogMjAwMC8wOS8yNiBmaXhlZCByYWNlcyBpbiByZW1vdmluZyB0aGUgcHJpdmF0ZSBwb3J0aW9uIG9mIHRoZSB1cmIKLSAqIDIwMDAvMDkvMDcgZGlzYWJsZSBidWxrIGFuZCBjb250cm9sIGxpc3RzIHdoZW4gdW5saW5raW5nIHRoZSBsYXN0Ci0gKgllbmRwb2ludCBkZXNjcmlwdG9yIGluIG9yZGVyIHRvIGF2b2lkIHVucmVjb3ZlcmFibGUgZXJyb3JzIG9uCi0gKgl0aGUgTHVjZW50IGNoaXBzLiAocndjQHNnaSkKLSAqIDIwMDAvMDgvMjkgdXNlIGJhbmR3aWR0aCBjbGFpbWluZyBob29rcyAodGhhbmtzIFJhbmR5ISksIGZpeCBzb21lCi0gKgl1cmIgdW5saW5rIHByb2JzLCBpbmRlbnRhdGlvbiBmaXhlcwotICogMjAwMC8wOC8xMSB2YXJpb3VzIG9vcHMgZml4ZXMgbW9zdGx5IGFmZmVjdGluZyBpc28gYW5kIGNsZWFudXAgZnJvbQotICoJZGV2aWNlIHVucGx1Z3MuCi0gKiAyMDAwLzA2LzI4IHVzZSBQQ0kgaG90cGx1ZyBmcmFtZXdvcmssIGZvciBiZXR0ZXIgcG93ZXIgbWFuYWdlbWVudAotICoJYW5kIGZvciBDYXJkYnVzIHN1cHBvcnQgKERhdmlkIEJyb3duZWxsKQotICogMjAwMC9lYXJsaWVyOiAgZml4ZXMgZm9yIE5FQy9MdWNlbnQgY2hpcHM7IHN1c3BlbmQvcmVzdW1lIGhhbmRsaW5nCi0gKgl3aGVuIHRoZSBjb250cm9sbGVyIGxvc2VzIHBvd2VyOyBoYW5kbGUgVUU7IGNsZWFudXA7IC4uLgotICoKLSAqIHY1LjIgMTk5OS8xMi8wNyBVUkIgM3JkIHByZXZpZXcsIAotICogdjUuMSAxOTk5LzExLzMwIFVSQiAybmQgcHJldmlldywgY3BpYSwgKHVzYi1zY3NpKQotICogdjUuMCAxOTk5LzExLzIyIFVSQiBUZWNobmljYWwgcHJldmlldywgUGF1bCBNYWNrZXJyYXMgcG93ZXJib29rIHN1c3AvcmVzdW1lIAotICogCWkzODY6IEhVQiwgS2V5Ym9hcmQsIE1vdXNlLCBQcmludGVyIAotICoKLSAqIHY0LjMgMTk5OS8xMC8yNyBtdWx0aXBsZSBIQ3MsIGJ1bGtfcmVxdWVzdAotICogdjQuMiAxOTk5LzA5LzA1IElTTyBBUEkgYWxwaGEsIG5ldyBkZXYgYWxsb2MsIG5lZyBFcnJvci1jb2RlcwotICogdjQuMSAxOTk5LzA4LzI3IFJhbmR5IER1bmxhcCdzIC0gSVNPIEFQSSBmaXJzdCBpbXBsLgotICogdjQuMCAxOTk5LzA4LzE4IAotICogdjMuMCAxOTk5LzA2LzI1IAotICogdjIuMSAxOTk5LzA1LzA5ICBjb2RlIGNsZWFuIHVwCi0gKiB2Mi4wIDE5OTkvMDUvMDQgCi0gKiB2MS4wIDE5OTkvMDQvMjcgaW5pdGlhbCByZWxlYXNlCi0gKgogICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCiAgKi8KLSAKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC04OSw3ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPiAKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KIApAQCAtMTgzLDExICsxMjcsMTEgQEAKIAlpbnQJCWksIHNpemUgPSAwOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJaW50CQlyZXR2YWwgPSAwOwotCQorCiAjaWZkZWYgT0hDSV9WRVJCT1NFX0RFQlVHCiAJdXJiX3ByaW50ICh1cmIsICJTVUIiLCB1c2JfcGlwZWluIChwaXBlKSk7CiAjZW5kaWYKLQkKKwogCS8qIGV2ZXJ5IGVuZHBvaW50IGhhcyBhIGVkLCBsb2NhdGUgYW5kIG1heWJlIChyZSlpbml0aWFsaXplIGl0ICovCiAJaWYgKCEgKGVkID0gZWRfZ2V0IChvaGNpLCBlcCwgdXJiLT5kZXYsIHBpcGUsIHVyYi0+aW50ZXJ2YWwpKSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMzIsNyArMTc2LDcgQEAKIAltZW1zZXQgKHVyYl9wcml2LCAwLCBzaXplb2YgKHVyYl9wcml2X3QpICsgc2l6ZSAqIHNpemVvZiAoc3RydWN0IHRkICopKTsKIAlJTklUX0xJU1RfSEVBRCAoJnVyYl9wcml2LT5wZW5kaW5nKTsKIAl1cmJfcHJpdi0+bGVuZ3RoID0gc2l6ZTsKLQl1cmJfcHJpdi0+ZWQgPSBlZDsJCisJdXJiX3ByaXYtPmVkID0gZWQ7CiAKIAkvKiBhbGxvY2F0ZSB0aGUgVERzIChkZWZlcnJpbmcgaGFzaCBjaGFpbiB1cGRhdGVzKSAqLwogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKQEAgLTI0Miw3ICsxODYsNyBAQAogCQkJdXJiX2ZyZWVfcHJpdiAob2hjaSwgdXJiX3ByaXYpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQl9CQorCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOwogCkBAIC0zMTMsMTMgKzI1NywxMyBAQAogewogCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQkKKwogI2lmZGVmIE9IQ0lfVkVSQk9TRV9ERUJVRwogCXVyYl9wcmludCAodXJiLCAiVU5MSU5LIiwgMSk7Ci0jZW5kaWYJCSAgCisjZW5kaWYKIAogCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOwotIAlpZiAoSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkgeworCWlmIChIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKSB7CiAJCXVyYl9wcml2X3QgICp1cmJfcHJpdjsKIAogCQkvKiBVbmxlc3MgYW4gSVJRIGNvbXBsZXRlZCB0aGUgdW5saW5rIHdoaWxlIGl0IHdhcyBiZWluZwpAQCAtNTEyLDExICs0NTYsMTEgQEAKIAogLyogU3RhcnQgYW4gT0hDSSBjb250cm9sbGVyLCBzZXQgdGhlIEJVUyBvcGVyYXRpb25hbAogICogcmVzZXRzIFVTQiBhbmQgY29udHJvbGxlcgotICogZW5hYmxlIGludGVycnVwdHMgCisgKiBlbmFibGUgaW50ZXJydXB0cwogICovCiBzdGF0aWMgaW50IG9oY2lfcnVuIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCiB7Ci0gIAl1MzIJCQltYXNrLCB0ZW1wOworCXUzMgkJCW1hc2ssIHRlbXA7CiAJaW50CQkJZmlyc3QgPSBvaGNpLT5mbWludGVydmFsID09IDA7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBvaGNpX3RvX2hjZChvaGNpKTsKIApAQCAtNTM0LDcgKzQ3OCw3IEBACiAJCS8qIGFsc286IHBvd2VyL292ZXJjdXJyZW50IGZsYWdzIGluIHJvb3RodWIuYSAqLwogCX0KIAotICAJLyogUmVzZXQgVVNCIG5lYXJseSAiYnkgdGhlIGJvb2siLiAgUmVtb3RlV2FrZXVwQ29ubmVjdGVkIHdhcworCS8qIFJlc2V0IFVTQiBuZWFybHkgImJ5IHRoZSBib29rIi4gIFJlbW90ZVdha2V1cENvbm5lY3RlZCB3YXMKIAkgKiBzYXZlZCBpZiBib290IGZpcm13YXJlIChCSU9TL1NNTS8uLi4pIHRvbGQgdXMgaXQncyBjb25uZWN0ZWQsCiAJICogb3IgaWYgYnVzIGdsdWUgZGlkIHRoZSBzYW1lIChlLmcuIGZvciBQQ0kgYWRkLWluIGNhcmRzIHdpdGgKIAkgKiBQQ0kgUE0gc3VwcG9ydCkuCkBAIC03NjUsOSArNzA5LDkgQEAKIAkJZGxfZG9uZV9saXN0IChvaGNpKTsKIAkJc3Bpbl91bmxvY2sgKCZvaGNpLT5sb2NrKTsKIAkJaWYgKEhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCi0JCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1dESCwgJnJlZ3MtPmludHJlbmFibGUpOyAKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfV0RILCAmcmVncy0+aW50cmVuYWJsZSk7CiAJfQotICAKKwogCS8qIGNvdWxkIHRyYWNrIElOVFJfU08gdG8gcmVkdWNlIGF2YWlsYWJsZSBQQ0kvLi4uIGJhbmR3aWR0aCAqLwogCiAJLyogaGFuZGxlIGFueSBwZW5kaW5nIFVSQi9FRCB1bmxpbmtzLCBsZWF2aW5nIElOVFJfU0YgZW5hYmxlZApAQCAtNzc4LDEyICs3MjIsMTIgQEAKIAkJZmluaXNoX3VubGlua3MgKG9oY2ksIG9oY2lfZnJhbWVfbm8ob2hjaSkpOwogCWlmICgoaW50cyAmIE9IQ0lfSU5UUl9TRikgIT0gMCAmJiAhb2hjaS0+ZWRfcm1fbGlzdAogCQkJJiYgSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkKLQkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9TRiwgJnJlZ3MtPmludHJkaXNhYmxlKTsJCisJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfU0YsICZyZWdzLT5pbnRyZGlzYWJsZSk7CiAJc3Bpbl91bmxvY2sgKCZvaGNpLT5sb2NrKTsKIAogCWlmIChIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKSB7CiAJCW9oY2lfd3JpdGVsIChvaGNpLCBpbnRzLCAmcmVncy0+aW50cnN0YXR1cyk7Ci0JCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfTUlFLCAmcmVncy0+aW50cmVuYWJsZSk7CQorCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX01JRSwgJnJlZ3MtPmludHJlbmFibGUpOwogCQkvLyBmbHVzaCB0aG9zZSB3cml0ZXMKIAkJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKIAl9CkBAIC03OTQsNyArNzM4LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkIG9oY2lfc3RvcCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKLXsJCit7CiAJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOwogCiAJb2hjaV9kYmcgKG9oY2ksICJzdG9wICVzIGNvbnRyb2xsZXIgKHN0YXRlIDB4JTAyeClcbiIsCkBAIC04MTIsOCArNzU2LDggQEAKIAlyZW1vdmVfZGVidWdfZmlsZXMgKG9oY2kpOwogCW9oY2lfbWVtX2NsZWFudXAgKG9oY2kpOwogCWlmIChvaGNpLT5oY2NhKSB7Ci0JCWRtYV9mcmVlX2NvaGVyZW50IChoY2QtPnNlbGYuY29udHJvbGxlciwgCi0JCQkJc2l6ZW9mICpvaGNpLT5oY2NhLCAKKwkJZG1hX2ZyZWVfY29oZXJlbnQgKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCXNpemVvZiAqb2hjaS0+aGNjYSwKIAkJCQlvaGNpLT5oY2NhLCBvaGNpLT5oY2NhX2RtYSk7CiAJCW9oY2ktPmhjY2EgPSBOVUxMOwogCQlvaGNpLT5oY2NhX2RtYSA9IDA7CkBAIC04MzYsNyArNzgwLDcgQEAKIAkgKiByZWN5Y2xlIGFueSAibGl2ZSIgZWRzL3RkcyAoYW5kIHVyYnMpIHJpZ2h0IGF3YXkuCiAJICogbGF0ZXIsIGtodWJkIGRpc2Nvbm5lY3QgcHJvY2Vzc2luZyB3aWxsIHJlY3ljbGUgdGhlIG90aGVyIHN0YXRlLAogCSAqIChlaXRoZXIgYXMgZGlzY29ubmVjdC9yZWNvbm5lY3QsIG9yIG1heWJlIHNvbWVkYXkgYXMgYSByZXNldCkuCi0JICovIAorCSAqLwogCXNwaW5fbG9ja19pcnEoJm9oY2ktPmxvY2spOwogCWRpc2FibGUgKG9oY2kpOwogCXVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViKTsKQEAgLTg3NSwxMSArODE5LDExIEBACiAJLyogZW1wdHkgdGhlIGludGVycnVwdCBicmFuY2hlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fSU5UUzsgaSsrKSBvaGNpLT5sb2FkIFtpXSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IE5VTV9JTlRTOyBpKyspIG9oY2ktPmhjY2EtPmludF90YWJsZSBbaV0gPSAwOwotCQorCiAJLyogbm8gRURzIHRvIHJlbW92ZSAqLwogCW9oY2ktPmVkX3JtX2xpc3QgPSBOVUxMOwogCi0JLyogZW1wdHkgY29udHJvbCBhbmQgYnVsayBsaXN0cyAqLwkgCisJLyogZW1wdHkgY29udHJvbCBhbmQgYnVsayBsaXN0cyAqLwogCW9oY2ktPmVkX2NvbnRyb2x0YWlsID0gTlVMTDsKIAlvaGNpLT5lZF9idWxrdGFpbCAgICA9IE5VTEw7CiAKQEAgLTk0MSw2ICs4ODUsMTAgQEAKICNpbmNsdWRlICJvaGNpLWF1MXh4eC5jIgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUE5YODU1MAorI2luY2x1ZGUgIm9oY2ktcG54ODU1MC5jIgorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0MKICNpbmNsdWRlICJvaGNpLXBwYy1zb2MuYyIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCmluZGV4IDI0NDE2NDIuLjIxNmM5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCi0gKiAKKyAqCiAgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgogICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDQgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0gKiAKKyAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgR1BMCiAgKi8KIApAQCAtMjMsMTMgKzIzLDEzIEBACiAJCSh0ZW1wICYgUkhfUFNfUFNTQykgPyAiIFBTU0MiIDogIiIsIFwKIAkJKHRlbXAgJiBSSF9QU19QRVNDKSA/ICIgUEVTQyIgOiAiIiwgXAogCQkodGVtcCAmIFJIX1BTX0NTQykgPyAiIENTQyIgOiAiIiwgXAotIAkJXAorCQlcCiAJCSh0ZW1wICYgUkhfUFNfTFNEQSkgPyAiIExTREEiIDogIiIsIFwKIAkJKHRlbXAgJiBSSF9QU19QUFMpID8gIiBQUFMiIDogIiIsIFwKIAkJKHRlbXAgJiBSSF9QU19QUlMpID8gIiBQUlMiIDogIiIsIFwKIAkJKHRlbXAgJiBSSF9QU19QT0NJKSA/ICIgUE9DSSIgOiAiIiwgXAogCQkodGVtcCAmIFJIX1BTX1BTUykgPyAiIFBTUyIgOiAiIiwgXAotIAkJXAorCQlcCiAJCSh0ZW1wICYgUkhfUFNfUEVTKSA/ICIgUEVTIiA6ICIiLCBcCiAJCSh0ZW1wICYgUkhfUFNfQ0NTKSA/ICIgQ0NTIiA6ICIiIFwKIAkJKTsKQEAgLTQ4NCw3ICs0ODQsNyBAQAogCXRlbXAgPSAwOwogCWlmIChyaCAmIFJIX0FfTlBTKQkJLyogbm8gcG93ZXIgc3dpdGNoaW5nPyAqLwogCSAgICB0ZW1wIHw9IDB4MDAwMjsKLQlpZiAocmggJiBSSF9BX1BTTSkgCQkvKiBwZXItcG9ydCBwb3dlciBzd2l0Y2hpbmc/ICovCisJaWYgKHJoICYgUkhfQV9QU00pCQkvKiBwZXItcG9ydCBwb3dlciBzd2l0Y2hpbmc/ICovCiAJICAgIHRlbXAgfD0gMHgwMDAxOwogCWlmIChyaCAmIFJIX0FfTk9DUCkJCS8qIG5vIG92ZXJjdXJyZW50IHJlcG9ydGluZz8gKi8KIAkgICAgdGVtcCB8PSAweDAwMTA7CkBAIC01NTUsNyArNTU1LDcgQEAKICNkZWZpbmUgdGlja19iZWZvcmUodDEsdDIpICgoczE2KSgoKHMxNikodDEpKS0oKHMxNikodDIpKSkgPCAwKQogCiAvKiBjYWxsZWQgZnJvbSBzb21lIHRhc2ssIG5vcm1hbGx5IGtodWJkICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcm9vdF9wb3J0X3Jlc2V0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHVuc2lnbmVkIHBvcnQpCitzdGF0aWMgaW5saW5lIGludCByb290X3BvcnRfcmVzZXQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgdW5zaWduZWQgcG9ydCkKIHsKIAlfX2hjMzIgX19pb21lbSAqcG9ydHN0YXQgPSAmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFtwb3J0XTsKIAl1MzIJdGVtcDsKQEAgLTU3MCwxMCArNTcwLDEzIEBACiAJCS8qIHNwaW4gdW50aWwgYW55IGN1cnJlbnQgcmVzZXQgZmluaXNoZXMgKi8KIAkJZm9yICg7OykgewogCQkJdGVtcCA9IG9oY2lfcmVhZGwgKG9oY2ksIHBvcnRzdGF0KTsKKwkJCS8qIGhhbmRsZSBlLmcuIENhcmRCdXMgZWplY3QgKi8KKwkJCWlmICh0ZW1wID09IH4odTMyKTApCisJCQkJcmV0dXJuIC1FU0hVVERPV047CiAJCQlpZiAoISh0ZW1wICYgUkhfUFNfUFJTKSkKIAkJCQlicmVhazsKIAkJCXVkZWxheSAoNTAwKTsKLQkJfSAKKwkJfQogCiAJCWlmICghKHRlbXAgJiBSSF9QU19DQ1MpKQogCQkJYnJlYWs7CkBAIC01ODYsNiArNTg5LDggQEAKIAkJbm93ID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+Zm1udW1iZXIpOwogCX0gd2hpbGUgKHRpY2tfYmVmb3JlKG5vdywgcmVzZXRfZG9uZSkpOwogCS8qIGNhbGxlciBzeW5jaHJvbml6ZXMgdXNpbmcgUFJTQyAqLworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb2hjaV9odWJfY29udHJvbCAoCkBAIC03MDIsNyArNzA3LDcgQEAKIAkJCQkmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFt3SW5kZXhdKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6Ci0JCQlyb290X3BvcnRfcmVzZXQgKG9oY2ksIHdJbmRleCk7CisJCQlyZXR2YWwgPSByb290X3BvcnRfcmVzZXQgKG9oY2ksIHdJbmRleCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYwppbmRleCBlMTIxZDk3Li5lOTgwN2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlDU0NfUFdSQ05UIHw9IENTQ19QV1JDTlRfVVNCSF9FTjsgLyogRW5hYmxlIGNsb2NrICovCiAJdWRlbGF5KDEwMDApOwogCVVTQkhfQ01EU1RBVFVTID0gT0hDSV9IQ1I7Ci0JCisKIAlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXwogCQkgICAiOiBDbG9jayB0byBVU0IgaG9zdCBoYXMgYmVlbiBlbmFibGVkIFxuIik7CiB9CkBAIC04OSw3ICs4OSw3IEBACiAJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBlcnIxOwogCX0KLQkKKwogCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIAlpZiAoIWhjZC0+cmVncykgewogCQlwcl9kZWJ1ZygiaW9yZW1hcCBmYWlsZWQiKTsKQEAgLTE3NCw3ICsxNzQsNyBAQAogCSAqLwogCS5zdGFydCA9CQlvaGNpX2xoN2E0MDRfc3RhcnQsCiAJLnN0b3AgPQkJCW9oY2lfc3RvcCwKLQkuc2h1dGRvd24gPSAJCW9oY2lfc2h1dGRvd24sCisJLnNodXRkb3duID0JCW9oY2lfc2h1dGRvd24sCiAKIAkvKgogCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCkBAIC0yNDIsNyArMjQyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3JlbW92ZSwKLQkuc2h1dGRvd24gCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKKwkuc2h1dGRvd24JPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kLCAqLwogCS8qLnJlc3VtZQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZSwgKi8KIAkuZHJpdmVyCQk9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1tZW0uYwppbmRleCBkOTc2NjE0Li4yZjIwZDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW1lbS5jCkBAIC0xLDI0ICsxLDI0IEBACiAvKgogICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCi0gKiAKKyAqCiAgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgogICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0gKiAKKyAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KICAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgotICogVGhlcmUncyBiYXNpY2FsbHkgdGhyZWUgdHlwZXMgb2YgbWVtb3J5OgorICogT0hDSSBkZWFscyB3aXRoIHRocmVlIHR5cGVzIG9mIG1lbW9yeToKICAqCS0gZGF0YSB1c2VkIG9ubHkgYnkgdGhlIEhDRCAuLi4ga21hbGxvYyBpcyBmaW5lCiAgKgktIGFzeW5jIGFuZCBwZXJpb2RpYyBzY2hlZHVsZXMsIHNoYXJlZCBieSBIQyBhbmQgSENEIC4uLiB0aGVzZQogICoJICBuZWVkIHRvIHVzZSBkbWFfcG9vbCBvciBkbWFfYWxsb2NfY29oZXJlbnQKICAqCS0gZHJpdmVyIGJ1ZmZlcnMsIHJlYWQvd3JpdHRlbiBieSBIQyAuLi4gdGhlIGhjZCBnbHVlIG9yIHRoZQogICoJICBkZXZpY2UgZHJpdmVyIHByb3ZpZGVzIHVzIHdpdGggZG1hIGFkZHJlc3NlcwogICoKLSAqIFRoZXJlJ3MgYWxzbyBQQ0kgInJlZ2lzdGVyIiBkYXRhLCB3aGljaCBpcyBtZW1vcnkgbWFwcGVkLgotICogTm8gbWVtb3J5IHNlZW4gYnkgdGhpcyBkcml2ZXIgaXMgcGFnYWJsZS4KKyAqIFRoZXJlJ3MgYWxzbyAicmVnaXN0ZXIiIGRhdGEsIHdoaWNoIGlzIG1lbW9yeSBtYXBwZWQuCisgKiBObyBtZW1vcnkgc2VlbiBieSB0aGlzIGRyaXZlciAob3IgYW55IEhDRCkgbWF5IGJlIHBhZ2VkIG91dC4KICAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKaW5kZXggOWMwMjE3Ny4uMjdiZTFmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCkBAIC00NDcsNyArNDQ3LDcgQEAKIAkucmVzZXQgPQkJb2hjaV9vbWFwX2luaXQsCiAJLnN0YXJ0ID0JCW9oY2lfb21hcF9zdGFydCwKIAkuc3RvcCA9CQkJb2hjaV9vbWFwX3N0b3AsCi0JLnNodXRkb3duID0gCQlvaGNpX3NodXRkb3duLAorCS5zaHV0ZG93biA9CQlvaGNpX3NodXRkb3duLAogCiAJLyoKIAkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcwpAQCAtNTMzLDcgKzUzMyw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9vbWFwX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2Rfb21hcF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9vbWFwX2Rydl9yZW1vdmUsCi0JLnNodXRkb3duIAk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCisJLnNodXRkb3duCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKICNpZmRlZglDT05GSUdfUE0KIAkuc3VzcGVuZAk9IG9oY2lfb21hcF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gb2hjaV9vbWFwX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwppbmRleCA4NzQ0MTg1Li41OTZlMGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCkBAIC0zLDE3ICszLDE3IEBACiAgKgogICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KICAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotICogCisgKgogICogWyBJbml0aWFsaXNhdGlvbiBpcyBiYXNlZCBvbiBMaW51cycgIF0KICAqIFsgdWhjaSBjb2RlIGFuZCBncmVncyBvaGNpIGZyYWdtZW50cyBdCiAgKiBbIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcyAgXQogICogWyAoQykgQ29weXJpZ2h0IDE5OTkgR3JlZ29yeSBQLiBTbWl0aF0KLSAqIAorICoKICAqIFBDSSBCdXMgR2x1ZQogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgogICovCi0gCisKICNpZm5kZWYgQ09ORklHX1BDSQogI2Vycm9yICJUaGlzIGZpbGUgaXMgUENJIGJ1cyBnbHVlLiAgQ09ORklHX1BDSSBtdXN0IGJlIGRlZmluZWQuIgogI2VuZGlmCkBAIC04Myw3ICs4Myw3IEBACiAJCQlwY2lfZGV2X3B1dChiKTsKIAkJfQogCi0JCS8qIENoZWNrIGZvciBDb21wYXEncyBaRk1pY3JvIGNoaXBzZXQsIHdoaWNoIG5lZWRzIHNob3J0IAorCQkvKiBDaGVjayBmb3IgQ29tcGFxJ3MgWkZNaWNybyBjaGlwc2V0LCB3aGljaCBuZWVkcyBzaG9ydAogCQkgKiBkZWxheXMgYmVmb3JlIGNvbnRyb2wgb3IgYnVsayBxdWV1ZXMgZ2V0IHJlLWFjdGl2YXRlZAogCQkgKiBpbiBmaW5pc2hfdW5saW5rcygpCiAJCSAqLwpAQCAtMjM4LDggKzIzOCw4IEBACiAJLnNodXRkb3duID0JdXNiX2hjZF9wY2lfc2h1dGRvd24sCiB9OwogCi0gCi1zdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9wY2lfaW5pdCAodm9pZCkgCisKK3N0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX3BjaV9pbml0ICh2b2lkKQogewogCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX0lORk8gIiAoUENJKVxuIiwgaGNkX25hbWUpOwogCWlmICh1c2JfZGlzYWJsZWQoKSkKQEAgLTI1Myw4ICsyNTMsOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfcGNpX2NsZWFudXAgKHZvaWQpIAotewkKK3N0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9wY2lfY2xlYW51cCAodm9pZCkKK3sKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZvaGNpX3BjaV9kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQgKG9oY2lfaGNkX3BjaV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jCmluZGV4IDdmMjZmOWIuLjNhOGNiZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYwpAQCAtNCw3ICs0LDcgQEAKICAqIGRyaXZlciBmb3IgUGhpbGlwcyBQTlg0MDA4IFVTQiBIb3N0CiAgKgogICogQXV0aG9yczogRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqIAkgICAgVml0YWx5IFdvb2wgPHZpdGFseXdvb2xAZ21haWwuY29tPgorICoJICAgIFZpdGFseSBXb29sIDx2aXRhbHl3b29sQGdtYWlsLmNvbT4KICAqCiAgKiByZWdpc3RlciBpbml0aWFsaXphdGlvbiBpcyBiYXNlZCBvbiBjb2RlIGV4YW1wbGVzIHByb3ZpZGVkIGJ5IFBoaWxpcHMKICAqIENvcHlyaWdodCAoYykgMjAwNSBLb25pbmtsaWprZSBQaGlsaXBzIEVsZWN0cm9uaWNzIE4uVi4KQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCi0jZGVmaW5lIFVTQl9DVFJMIAlJT19BRERSRVNTKFBOWDQwMDhfUFdSTUFOX0JBU0UgKyAweDY0KQorI2RlZmluZSBVU0JfQ1RSTAlJT19BRERSRVNTKFBOWDQwMDhfUFdSTUFOX0JBU0UgKyAweDY0KQogCiAvKiBVU0JfQ1RSTCBiaXQgZGVmaW5lcyAqLwogI2RlZmluZSBVU0JfU0xBVkVfSENMS19FTgkoMSA8PCAyNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng4NTUwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54ODU1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MjJiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54ODU1MC5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogKEMpIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKiAoQykgQ29weXJpZ2h0IDIwMDUgRW1iZWRkZWQgQWxsZXkgU29sdXRpb25zLCBJbmMuCisgKgorICogQnVzIEdsdWUgZm9yIFBOWDg1NTAKKyAqCisgKiBXcml0dGVuIGJ5IENocmlzdG9waGVyIEhvb3ZlciA8Y2hAaHBsLmhwLmNvbT4KKyAqIEJhc2VkIG9uIGZyYWdtZW50cyBvZiBwcmV2aW91cyBkcml2ZXIgYnkgUnVzc2VsbCBLaW5nIGV0IGFsLgorICoKKyAqIE1vZGlmaWVkIGZvciBMSDdBNDA0IGZyb20gb2hjaS1zYTExMTEuYworICogIGJ5IER1cmdlc2ggUGF0dGFtYXR0YSA8cGF0dGFtYXR0YWRAc2hhcnBzZWMuY29tPgorICoKKyAqIE1vZGlmaWVkIGZvciBQTlg4NTUwIGZyb20gb2hjaS1zYTExMTEuYyBhbmQgc2Etb21hcC5jCisgKiAgYnkgVml0YWx5IFdvb2wgPHZpdGFseXdvb2xAZ21haWwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1wbng4NTUwL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXBueDg1NTAvaW50Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcG54ODU1MC9wY2kuaD4KKworI2lmbmRlZiBDT05GSUdfUE5YODU1MAorI2Vycm9yICJUaGlzIGZpbGUgaXMgUE5YODU1MCBidXMgZ2x1ZS4gIENPTkZJR19QTlg4NTUwIG11c3QgYmUgZGVmaW5lZC4iCisjZW5kaWYKKworZXh0ZXJuIGludCB1c2JfZGlzYWJsZWQodm9pZCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHBueDg1NTBfc3RhcnRfaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCS8qCisJICogU2V0IHJlZ2lzdGVyIENMSzQ4Q1RMIHRvIGVuYWJsZSBhbmQgNDhNSHoKKwkgKi8KKwlvdXRsKDB4MDAwMDAwMDMsIFBDSV9CQVNFIHwgMHgwMDA0NzcwYyk7CisKKwkvKgorCSAqIFNldCByZWdpc3RlciBDTEsxMkNUTCB0byBlbmFibGUgYW5kIDQ4TUh6CisJICovCisJb3V0bCgweDAwMDAwMDAzLCBQQ0lfQkFTRSB8IDB4MDAwNDc3MTApOworCisJdWRlbGF5KDEwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHBueDg1NTBfc3RvcF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJdWRlbGF5KDEwKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCisvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLworCisKKy8qKgorICogdXNiX2hjZF9wbng4NTUwX3Byb2JlIC0gaW5pdGlhbGl6ZSBwbng4NTUwLWJhc2VkIEhDRHMKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIEFsbG9jYXRlcyBiYXNpYyByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCisgKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAorICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgorICoKKyAqLworaW50IHVzYl9oY2RfcG54ODU1MF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCisJaWYgKGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9NRU0gfHwKKwkJCWRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKKwkJZGV2X2VyciAoJmRldi0+ZGV2LCJpbnZhbGlkIHJlc291cmNlIHR5cGVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCAoZHJpdmVyLCAmZGV2LT5kZXYsICJwbng4NTUwIik7CisJaWYgKCFoY2QpCisJCXJldHVybiAtRU5PTUVNOworCWhjZC0+cnNyY19zdGFydCA9IGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBbMHglMDhsbHgsIDB4JTA4bGx4XSAiCisJCQkJImZhaWxlZFxuIiwgaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjE7CisJfQorCisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiaW9yZW1hcCBbWzB4JTA4bGx4LCAweCUwOGxseF0gZmFpbGVkXG4iLAorCQkJCWhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwlwbng4NTUwX3N0YXJ0X2hjKGRldik7CisKKwlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOworCisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBTQV9JTlRFUlJVUFQpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXBueDg1NTBfc3RvcF9oYyhkZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKyBlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjE6CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX3BueDg1NTBfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgcG54ODU1MC1iYXNlZCBIQ0RzCisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlbW92ZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2hjZF9wbng4NTUwX3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKi8KK3ZvaWQgdXNiX2hjZF9wbng4NTUwX3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJcG54ODU1MF9zdG9wX2hjKGRldik7CisJaW91bm1hcChoY2QtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXVzYl9wdXRfaGNkKGhjZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitvaGNpX3BueDg1NTBfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQlyZXQ7CisKKwlvaGNpX2RiZyAob2hjaSwgIm9oY2lfcG54ODU1MF9zdGFydCwgb2hjaTolcCIsIG9oY2kpOworCisJaWYgKChyZXQgPSBvaGNpX2luaXQob2hjaSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJZXJyICgiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfcG54ODU1MF9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPQkJIlBOWDg1NTAgT0hDSSIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IG9oY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJb2hjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnN0YXJ0ID0JCW9oY2lfcG54ODU1MF9zdGFydCwKKwkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9CQlvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQlvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0Jb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9CW9oY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAorCS5odWJfaXJxX2VuYWJsZSA9CW9oY2lfcmhzY19lbmFibGUsCisjaWZkZWYJQ09ORklHX1BNCisJLmJ1c19zdXNwZW5kID0JCW9oY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUgPQkJb2hjaV9idXNfcmVzdW1lLAorI2VuZGlmCisJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9oY2lfaGNkX3BueDg1NTBfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSB1c2JfaGNkX3BueDg1NTBfcHJvYmUoJm9oY2lfcG54ODU1MF9oY19kcml2ZXIsIHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcG54ODU1MF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJdXNiX2hjZF9wbng4NTUwX3JlbW92ZShoY2QsIHBkZXYpOworCXJldHVybiAwOworfQorCitNT0RVTEVfQUxJQVMoInBueDg1NTAtb2hjaSIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9wbng4NTUwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAicG54ODU1MC1vaGNpIiwKKwl9LAorCS5wcm9iZQkJPSBvaGNpX2hjZF9wbng4NTUwX2Rydl9wcm9iZSwKKwkucmVtb3ZlCQk9IG9oY2lfaGNkX3BueDg1NTBfZHJ2X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX3BueDg1NTBfaW5pdCAodm9pZCkKK3sKKwlwcl9kZWJ1ZyAoRFJJVkVSX0lORk8gIiAocG54ODU1MCkiKTsKKwlwcl9kZWJ1ZyAoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOworCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcG54ODU1MF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfcG54ODU1MF9jbGVhbnVwICh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9wbng4NTUwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0IChvaGNpX2hjZF9wbng4NTUwX2luaXQpOworbW9kdWxlX2V4aXQgKG9oY2lfaGNkX3BueDg1NTBfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYwppbmRleCBkOWQxYWUyLi5lMWE3ZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKQEAgLTUsNyArNSw3IEBACiAgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAqIChDKSBDb3B5cmlnaHQgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQogICogKEMpIENvcHlyaWdodCAyMDAzLTIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiAKKyAqCiAgKiBCdXMgR2x1ZSBmb3IgUFBDIE9uLUNoaXAgT0hDSSBkcml2ZXIKICAqIFRlc3RlZCBvbiBGcmVlc2NhbGUgTVBDNTIwMCBhbmQgSUJNIFNUQjA0eHh4CiAgKgpAQCAtODUsNyArODUsNyBAQAogIGVycjI6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAgZXJyMToKLSAJdXNiX3B1dF9oY2QoaGNkKTsKKwl1c2JfcHV0X2hjZChoY2QpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE0OCw3ICsxNDgsNyBAQAogCSAqLwogCS5zdGFydCA9CQlvaGNpX3BwY19zb2Nfc3RhcnQsCiAJLnN0b3AgPQkJCW9oY2lfc3RvcCwKLQkuc2h1dGRvd24gPSAJCW9oY2lfc2h1dGRvd24sCisJLnNodXRkb3duID0JCW9oY2lfc2h1dGRvd24sCiAKIAkvKgogCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCkBAIC0xOTcsNyArMTk3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX3BwY19zb2NfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3JlbW92ZSwKLQkuc2h1dGRvd24gCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKKwkuc2h1dGRvd24JPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogI2lmZGVmCUNPTkZJR19QTQogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9zdXNwZW5kLCovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVzdW1lLCovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKaW5kZXggZTE3NmIwNC4uM2JiZWE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtNDcsNyArNDcsNyBAQAogCXN3aXRjaCAoIG1vZGUgKSB7CiAJY2FzZSBQTU1fTlBTX01PREU6CiAJCVVIQ1JIREEgfD0gUkhfQV9OUFM7Ci0JCWJyZWFrOyAKKwkJYnJlYWs7CiAJY2FzZSBQTU1fR0xPQkFMX01PREU6CiAJCVVIQ1JIREEgJj0gfihSSF9BX05QUyAmIFJIX0FfUFNNKTsKIAkJYnJlYWs7CkBAIC02MCw3ICs2MCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayggS0VSTl9FUlIKLQkJCSJJbnZhbGlkIG1vZGUgJWQsIHNldCB0byBub24tcG93ZXIgc3dpdGNoIG1vZGUuXG4iLCAKKwkJCSJJbnZhbGlkIG1vZGUgJWQsIHNldCB0byBub24tcG93ZXIgc3dpdGNoIG1vZGUuXG4iLAogCQkJbW9kZSApOwogCiAJCVVIQ1JIREEgfD0gUkhfQV9OUFM7CkBAIC0yNzAsNyArMjcwLDcgQEAKIAkgKi8KIAkuc3RhcnQgPQkJb2hjaV9weGEyN3hfc3RhcnQsCiAJLnN0b3AgPQkJCW9oY2lfc3RvcCwKLQkuc2h1dGRvd24gPSAJCW9oY2lfc2h1dGRvd24sCisJLnNodXRkb3duID0JCW9oY2lfc2h1dGRvd24sCiAKIAkvKgogCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCkBAIC0zNTksOSArMzU5LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX3B4YTI3eF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3JlbW92ZSwKLQkuc2h1dGRvd24gCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKKwkuc2h1dGRvd24JPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kLCAKKwkuc3VzcGVuZAk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZCwKIAkucmVzdW1lCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lLAogI2VuZGlmCiAJLmRyaXZlcgkJPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYwppbmRleCBmZTFmZTJmLi44MzBhM2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCi0gKiAKKyAqCiAgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgogICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0gKiAKKyAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KICAqLwogCkBAIC04OSw3ICs4OSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIEVEIGhhbmRsaW5nIGZ1bmN0aW9ucwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogc2VhcmNoIGZvciB0aGUgcmlnaHQgc2NoZWR1bGUgYnJhbmNoIHRvIHVzZSBmb3IgYSBwZXJpb2RpYyBlZC4KICAqIGRvZXMgc29tZSBsb2FkIGJhbGFuY2luZzsgcmV0dXJucyB0aGUgYnJhbmNoLCBvciBuZWdhdGl2ZSBlcnJuby4KQEAgLTEwNyw3ICsxMDcsNiBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBpbnRlcnZhbCA7IGkrKykgewogCQlpZiAoYnJhbmNoIDwgMCB8fCBvaGNpLT5sb2FkIFticmFuY2hdID4gb2hjaS0+bG9hZCBbaV0pIHsKLSNpZiAxCS8qIENPTkZJR19VU0JfQkFORFdJRFRIICovCiAJCQlpbnQJajsKIAogCQkJLyogdXNiIDEuMSBzYXlzIDkwJSBvZiBvbmUgZnJhbWUgKi8KQEAgLTExNyw4ICsxMTYsNyBAQAogCQkJfQogCQkJaWYgKGogPCBOVU1fSU5UUykKIAkJCQljb250aW51ZTsKLSNlbmRpZgotCQkJYnJhbmNoID0gaTsgCisJCQlicmFuY2ggPSBpOwogCQl9CiAJfQogCXJldHVybiBicmFuY2g7CkBAIC0xNzEsNyArMTY5LDcgQEAKIC8qIGxpbmsgYW4gZWQgaW50byBvbmUgb2YgdGhlIEhDIGNoYWlucyAqLwogCiBzdGF0aWMgaW50IGVkX3NjaGVkdWxlIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBlZCAqZWQpCi17CSAKK3sKIAlpbnQJYnJhbmNoOwogCiAJaWYgKG9oY2lfdG9faGNkKG9oY2kpLT5zdGF0ZSA9PSBIQ19TVEFURV9RVUlFU0NJTkcpCkBAIC0yNDgsNyArMjQ2LDcgQEAKIAkJfQogCQllZC0+YnJhbmNoID0gYnJhbmNoOwogCQlwZXJpb2RpY19saW5rIChvaGNpLCBlZCk7Ci0JfQkgCQorCX0KIAogCS8qIHRoZSBIQyBtYXkgbm90IHNlZSB0aGUgc2NoZWR1bGUgdXBkYXRlcyB5ZXQsIGJ1dCBpZiBpdCBkb2VzCiAJICogdGhlbiB0aGV5J2xsIGJlIHByb3Blcmx5IG9yZGVyZWQuCkBAIC0yNzcsNyArMjc1LDcgQEAKIAkJCSpwcmV2ID0gZWQtPmVkX25leHQ7CiAJCX0KIAkJb2hjaS0+bG9hZCBbaV0gLT0gZWQtPmxvYWQ7Ci0JfQkKKwl9CiAJb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZCAtPSBlZC0+bG9hZCAvIGVkLT5pbnRlcnZhbDsKIAogCW9oY2lfdmRiZyAob2hjaSwgInVubGluayAlc2VkICVwIGJyYW5jaCAlZCBbJWR1cy5dLCBpbnRlcnZhbCAlZFxuIiwKQEAgLTI4NSw3ICsyODMsNyBAQAogCQllZCwgZWQtPmJyYW5jaCwgZWQtPmxvYWQsIGVkLT5pbnRlcnZhbCk7CiB9CiAKLS8qIHVubGluayBhbiBlZCBmcm9tIG9uZSBvZiB0aGUgSEMgY2hhaW5zLiAKKy8qIHVubGluayBhbiBlZCBmcm9tIG9uZSBvZiB0aGUgSEMgY2hhaW5zLgogICoganVzdCB0aGUgbGluayB0byB0aGUgZWQgaXMgdW5saW5rZWQuCiAgKiB0aGUgbGluayBmcm9tIHRoZSBlZCBzdGlsbCBwb2ludHMgdG8gYW5vdGhlciBvcGVyYXRpb25hbCBlZCBvciAwCiAgKiBzbyB0aGUgSEMgY2FuIGV2ZW50dWFsbHkgZmluaXNoIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSB1bmxpbmtlZCBlZApAQCAtMzA3LDcgKzMwNSw3IEBACiAgKiBXaGVuIGZpbmlzaF91bmxpbmtzKCkgcnVucyBsYXRlciwgYWZ0ZXIgU09GIGludGVycnVwdCwgaXQgd2lsbCBvZnRlbgogICogY29tcGxldGUgb25lIG9yIG1vcmUgVVJCIHVubGlua3MgYmVmb3JlIG1ha2luZyB0aGF0IHN0YXRlIGNoYW5nZS4KICAqLwotc3RhdGljIHZvaWQgZWRfZGVzY2hlZHVsZSAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgZWQgKmVkKSAKK3N0YXRpYyB2b2lkIGVkX2Rlc2NoZWR1bGUgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgc3RydWN0IGVkICplZCkKIHsKIAllZC0+aHdJTkZPIHw9IGNwdV90b19oYzMyIChvaGNpLCBFRF9TS0lQKTsKIAl3bWIgKCk7CkBAIC0zOTcsNyArMzk1LDcgQEAKIAl1bnNpZ25lZCBpbnQJCXBpcGUsCiAJaW50CQkJaW50ZXJ2YWwKICkgewotCXN0cnVjdCBlZAkJKmVkOyAKKwlzdHJ1Y3QgZWQJCSplZDsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOwpAQCAtNDEzLDkgKzQxMSw5IEBACiAJCQlnb3RvIGRvbmU7CiAJCX0KIAotICAJCS8qIGR1bW15IHRkOyBlbmQgb2YgdGQgbGlzdCBmb3IgZWQgKi8KKwkJLyogZHVtbXkgdGQ7IGVuZCBvZiB0ZCBsaXN0IGZvciBlZCAqLwogCQl0ZCA9IHRkX2FsbG9jIChvaGNpLCBHRlBfQVRPTUlDKTsKLSAJCWlmICghdGQpIHsKKwkJaWYgKCF0ZCkgewogCQkJLyogb3V0IG9mIG1lbW9yeSAqLwogCQkJZWRfZnJlZSAob2hjaSwgZWQpOwogCQkJZWQgPSBOVUxMOwpAQCAtNDYyLDcgKzQ2MCw3IEBACiAKIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZWQ7IAorCXJldHVybiBlZDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQ3NCw3ICs0NzIsNyBAQAogICogYW5kIHRoYXQgZWQtPnN0YXRlIGlzIEVEX09QRVIKICAqLwogc3RhdGljIHZvaWQgc3RhcnRfZWRfdW5saW5rIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBlZCAqZWQpCi17ICAgIAorewogCWVkLT5od0lORk8gfD0gY3B1X3RvX2hjMzIgKG9oY2ksIEVEX0RFUVVFVUUpOwogCWVkX2Rlc2NoZWR1bGUgKG9oY2ksIGVkKTsKIApAQCAtNTQxLDcgKzUzOSw3IEBACiAJdGQtPmVkID0gdXJiX3ByaXYtPmVkOwogCXRkLT5uZXh0X2RsX3RkID0gTlVMTDsKIAl0ZC0+aW5kZXggPSBpbmRleDsKLQl0ZC0+dXJiID0gdXJiOyAKKwl0ZC0+dXJiID0gdXJiOwogCXRkLT5kYXRhX2RtYSA9IGRhdGE7CiAJaWYgKCFsZW4pCiAJCWRhdGEgPSAwOwpAQCAtNTUzLDggKzU1MSw4IEBACiAJCQkJCQkoZGF0YSAmIDB4MEZGRikgfCAweEUwMDApOwogCQl0ZC0+ZWQtPmxhc3RfaXNvID0gaW5mbyAmIDB4ZmZmZjsKIAl9IGVsc2UgewotCQl0ZC0+aHdDQlAgPSBjcHVfdG9faGMzMiAob2hjaSwgZGF0YSk7IAotCX0JCQkKKwkJdGQtPmh3Q0JQID0gY3B1X3RvX2hjMzIgKG9oY2ksIGRhdGEpOworCX0KIAlpZiAoZGF0YSkKIAkJdGQtPmh3QkUgPSBjcHVfdG9faGMzMiAob2hjaSwgZGF0YSArIGxlbiAtIDEpOwogCWVsc2UKQEAgLTU5Nyw3ICs1OTUsNyBAQAogCSAqIHVzZSB0aGUgZGV2aWNlIHRvZ2dsZSBiaXRzIGZvciByZXNldHRpbmcsIGFuZCByZWx5IG9uIHRoZSBmYWN0CiAJICogdGhhdCByZXNldHRpbmcgdG9nZ2xlIGlzIG1lYW5pbmdsZXNzIGlmIHRoZSBlbmRwb2ludCBpcyBhY3RpdmUuCiAJICovCi0gIAlpZiAoIXVzYl9nZXR0b2dnbGUgKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpLCBpc19vdXQpKSB7CisJaWYgKCF1c2JfZ2V0dG9nZ2xlICh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwgaXNfb3V0KSkgewogCQl1c2Jfc2V0dG9nZ2xlICh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKIAkJCWlzX291dCwgMSk7CiAJCXVyYl9wcml2LT5lZC0+aHdIZWFkUCAmPSB+Y3B1X3RvX2hjMzIgKG9oY2ksIEVEX0MpOwpAQCAtNzIxLDE2ICs3MTksMTYgQEAKIAlsaXN0X2RlbCAoJnRkLT50ZF9saXN0KTsKIAogCS8qIElTTyAuLi4gZHJpdmVycyBzZWUgcGVyLVREIGxlbmd0aC9zdGF0dXMgKi8KLSAgCWlmICh0ZElORk8gJiBURF9JU08pIHsKLSAJCXUxNgl0ZFBTVyA9IG9oY2lfaHdQU1cgKG9oY2ksIHRkLCAwKTsKKwlpZiAodGRJTkZPICYgVERfSVNPKSB7CisJCXUxNgl0ZFBTVyA9IG9oY2lfaHdQU1cgKG9oY2ksIHRkLCAwKTsKIAkJaW50CWRsZW4gPSAwOwogCiAJCS8qIE5PVEU6ICBhc3N1bWVzIEZDIGluIHRkSU5GTyA9PSAwLCBhbmQgdGhhdAogCQkgKiBvbmx5IHRoZSBmaXJzdCBvZiAwLi5NQVhQU1cgcHN3cyBpcyB1c2VkLgogCQkgKi8KIAotIAkJY2MgPSAodGRQU1cgPj4gMTIpICYgMHhGOwotICAJCWlmICh0ZElORk8gJiBURF9DQykJLyogaGMgZGlkbid0IHRvdWNoPyAqLworCQljYyA9ICh0ZFBTVyA+PiAxMikgJiAweEY7CisJCWlmICh0ZElORk8gJiBURF9DQykJLyogaGMgZGlkbid0IHRvdWNoPyAqLwogCQkJcmV0dXJuOwogCiAJCWlmICh1c2JfcGlwZW91dCAodXJiLT5waXBlKSkKQEAgLTc1OCw3ICs3NTYsNyBAQAogCQlpbnQJdHlwZSA9IHVzYl9waXBldHlwZSAodXJiLT5waXBlKTsKIAkJdTMyCXRkQkUgPSBoYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdCRSk7CiAKLSAgCQljYyA9IFREX0NDX0dFVCAodGRJTkZPKTsKKwkJY2MgPSBURF9DQ19HRVQgKHRkSU5GTyk7CiAKIAkJLyogdXBkYXRlIHBhY2tldCBzdGF0dXMgaWYgbmVlZGVkIChzaG9ydCBpcyBub3JtYWxseSBvaykgKi8KIAkJaWYgKGNjID09IFREX0RBVEFVTkRFUlJVTgpAQCAtNzg3LDcgKzc4NSw3IEBACiAJCQkJdXJiLCB0ZCwgMSArIHRkLT5pbmRleCwgY2MsCiAJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7Ci0gIAl9CisJfQogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNzk1LDcgKzc5Myw3IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0ZCAqCiBlZF9oYWx0ZWQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgc3RydWN0IHRkICp0ZCwgaW50IGNjLCBzdHJ1Y3QgdGQgKnJldikKIHsKLSAgCXN0cnVjdCB1cmIJCSp1cmIgPSB0ZC0+dXJiOworCXN0cnVjdCB1cmIJCSp1cmIgPSB0ZC0+dXJiOwogCXN0cnVjdCBlZAkJKmVkID0gdGQtPmVkOwogCXN0cnVjdCBsaXN0X2hlYWQJKnRtcCA9IHRkLT50ZF9saXN0Lm5leHQ7CiAJX19oYzMyCQkJdG9nZ2xlID0gZWQtPmh3SGVhZFAgJiBjcHVfdG9faGMzMiAob2hjaSwgRURfQyk7CkBAIC04MDUsNyArODAzLDcgQEAKIAkgKi8KIAllZC0+aHdJTkZPIHw9IGNwdV90b19oYzMyIChvaGNpLCBFRF9TS0lQKTsKIAl3bWIgKCk7Ci0JZWQtPmh3SGVhZFAgJj0gfmNwdV90b19oYzMyIChvaGNpLCBFRF9IKTsgCisJZWQtPmh3SGVhZFAgJj0gfmNwdV90b19oYzMyIChvaGNpLCBFRF9IKTsKIAogCS8qIHB1dCBhbnkgbGF0ZXIgdGRzIGZyb20gdGhpcyB1cmIgb250byB0aGUgZG9uZWxpc3QsIGFmdGVyICd0ZCcsCiAJICogb3JkZXIgd29uJ3QgbWF0dGVyIGhlcmU6IG5vIGVycm9ycywgYW5kIG5vdGhpbmcgd2FzIHRyYW5zZmVycmVkLgpAQCAtODMzLDcgKzgzMSw3IEBACiAJCWluZm8gJj0gfmNwdV90b19oYzMyIChvaGNpLCBURF9DQyk7CiAJCW5leHQtPmh3SU5GTyA9IGluZm87CiAKLQkJbmV4dC0+bmV4dF9kbF90ZCA9IHJldjsJCisJCW5leHQtPm5leHRfZGxfdGQgPSByZXY7CiAJCXJldiA9IG5leHQ7CiAKIAkJZWQtPmh3SGVhZFAgPSBuZXh0LT5od05leHRURCB8IHRvZ2dsZTsKQEAgLTg4MSw4ICs4NzksOCBAQAogCS8qIGdldCBURCBmcm9tIGhjJ3Mgc2luZ2x5IGxpbmtlZCBsaXN0LCBhbmQKIAkgKiBwcmVwZW5kIHRvIG91cnMuICBlZC0+dGRfbGlzdCBjaGFuZ2VzIGxhdGVyLgogCSAqLwotCXdoaWxlICh0ZF9kbWEpIHsJCQotCSAgICAJaW50CQljYzsKKwl3aGlsZSAodGRfZG1hKSB7CisJCWludAkJY2M7CiAKIAkJdGQgPSBkbWFfdG9fdGQgKG9oY2ksIHRkX2RtYSk7CiAJCWlmICghdGQpIHsKQEAgLTkwMSwxMCArODk5LDEwIEBACiAJCQkJJiYgKHRkLT5lZC0+aHdIZWFkUCAmIGNwdV90b19oYzMyIChvaGNpLCBFRF9IKSkpCiAJCQl0ZF9yZXYgPSBlZF9oYWx0ZWQgKG9oY2ksIHRkLCBjYywgdGRfcmV2KTsKIAotCQl0ZC0+bmV4dF9kbF90ZCA9IHRkX3JldjsJCisJCXRkLT5uZXh0X2RsX3RkID0gdGRfcmV2OwogCQl0ZF9yZXYgPSB0ZDsKIAkJdGRfZG1hID0gaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3TmV4dFREKTsKLQl9CQorCX0KIAlyZXR1cm4gdGRfcmV2OwogfQogCkBAIC0xMDEzLDkgKzEwMTEsOSBAQAogCiAJCWlmIChtb2RpZmllZCkKIAkJCWdvdG8gcmVzY2FuX2FsbDsKLSAgIAl9CisJfQogCi0JLyogbWF5YmUgcmVlbmFibGUgY29udHJvbCBhbmQgYnVsayBsaXN0cyAqLyAKKwkvKiBtYXliZSByZWVuYWJsZSBjb250cm9sIGFuZCBidWxrIGxpc3RzICovCiAJaWYgKEhDX0lTX1JVTk5JTkcob2hjaV90b19oY2Qob2hjaSktPnN0YXRlKQogCQkJJiYgb2hjaV90b19oY2Qob2hjaSktPnN0YXRlICE9IEhDX1NUQVRFX1FVSUVTQ0lORwogCQkJJiYgIW9oY2ktPmVkX3JtX2xpc3QpIHsKQEAgLTEwNDEsMjAgKzEwMzksMjAgQEAKIAkJCQkJJm9oY2ktPnJlZ3MtPmVkX2J1bGtjdXJyZW50KTsKIAkJCX0KIAkJfQotCQkKKwogCQkvKiBDTEUvQkxFIHRvIGVuYWJsZSwgQ0xGL0JMRiB0byAobWF5YmUpIGtpY2tzdGFydCAqLwogCQlpZiAoY29udHJvbCkgewogCQkJb2hjaS0+aGNfY29udHJvbCB8PSBjb250cm9sOwogCQkJaWYgKG9oY2ktPmZsYWdzICYgT0hDSV9RVUlSS19aRk1JQ1JPKQogCQkJCW1kZWxheSgxKTsKLSAJCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwKLQkJCQkJJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOyAgIAotIAkJfQorCQkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsCisJCQkJCSZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJfQogCQlpZiAoY29tbWFuZCkgewogCQkJaWYgKG9oY2ktPmZsYWdzICYgT0hDSV9RVUlSS19aRk1JQ1JPKQogCQkJCW1kZWxheSgxKTsKLQkJCW9oY2lfd3JpdGVsIChvaGNpLCBjb21tYW5kLCAmb2hjaS0+cmVncy0+Y21kc3RhdHVzKTsgICAKLQkgCX0KKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBjb21tYW5kLCAmb2hjaS0+cmVncy0+Y21kc3RhdHVzKTsKKwkJfQogCX0KIH0KIApAQCAtMTA3NCwxOSArMTA3MiwxOSBAQAogewogCXN0cnVjdCB0ZAkqdGQgPSBkbF9yZXZlcnNlX2RvbmVfbGlzdCAob2hjaSk7CiAKLSAgCXdoaWxlICh0ZCkgeworCXdoaWxlICh0ZCkgewogCQlzdHJ1Y3QgdGQJKnRkX25leHQgPSB0ZC0+bmV4dF9kbF90ZDsKIAkJc3RydWN0IHVyYgkqdXJiID0gdGQtPnVyYjsKIAkJdXJiX3ByaXZfdAkqdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKIAkJc3RydWN0IGVkCSplZCA9IHRkLT5lZDsKIAogCQkvKiB1cGRhdGUgVVJCJ3MgbGVuZ3RoIGFuZCBzdGF0dXMgZnJvbSBURCAqLwotICAgCQl0ZF9kb25lIChvaGNpLCB1cmIsIHRkKTsKLSAgCQl1cmJfcHJpdi0+dGRfY250Kys7CisJCXRkX2RvbmUgKG9oY2ksIHVyYiwgdGQpOworCQl1cmJfcHJpdi0+dGRfY250Kys7CiAKIAkJLyogSWYgYWxsIHRoaXMgdXJiJ3MgVERzIGFyZSBkb25lLCBjYWxsIGNvbXBsZXRlKCkgKi8KLSAgCQlpZiAodXJiX3ByaXYtPnRkX2NudCA9PSB1cmJfcHJpdi0+bGVuZ3RoKQotICAJCQlmaW5pc2hfdXJiIChvaGNpLCB1cmIpOworCQlpZiAodXJiX3ByaXYtPnRkX2NudCA9PSB1cmJfcHJpdi0+bGVuZ3RoKQorCQkJZmluaXNoX3VyYiAob2hjaSwgdXJiKTsKIAogCQkvKiBjbGVhbiBzY2hlZHVsZTogIHVubGluayBFRHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGJ1c3kgKi8KIAkJaWYgKGxpc3RfZW1wdHkgKCZlZC0+dGRfbGlzdCkpIHsKQEAgLTEwOTQsMjUgKzEwOTIsMjYgQEAKIAkJCQlzdGFydF9lZF91bmxpbmsgKG9oY2ksIGVkKTsKIAogCQkvKiAuLi4gcmVlbmFibGluZyBoYWx0ZWQgRURzIG9ubHkgYWZ0ZXIgZmF1bHQgY2xlYW51cCAqLwotCQl9IGVsc2UgaWYgKChlZC0+aHdJTkZPICYgY3B1X3RvX2hjMzIgKG9oY2ksIEVEX1NLSVAgfCBFRF9ERVFVRVVFKSkKKwkJfSBlbHNlIGlmICgoZWQtPmh3SU5GTyAmIGNwdV90b19oYzMyIChvaGNpLAorCQkJCQkJRURfU0tJUCB8IEVEX0RFUVVFVUUpKQogCQkJCQk9PSBjcHVfdG9faGMzMiAob2hjaSwgRURfU0tJUCkpIHsKIAkJCXRkID0gbGlzdF9lbnRyeSAoZWQtPnRkX2xpc3QubmV4dCwgc3RydWN0IHRkLCB0ZF9saXN0KTsKLSAJCQlpZiAoISh0ZC0+aHdJTkZPICYgY3B1X3RvX2hjMzIgKG9oY2ksIFREX0RPTkUpKSkgeworCQkJaWYgKCEodGQtPmh3SU5GTyAmIGNwdV90b19oYzMyIChvaGNpLCBURF9ET05FKSkpIHsKIAkJCQllZC0+aHdJTkZPICY9IH5jcHVfdG9faGMzMiAob2hjaSwgRURfU0tJUCk7CiAJCQkJLyogLi4uIGhjIG1heSBuZWVkIHdha2luZy11cCAqLwogCQkJCXN3aXRjaCAoZWQtPnR5cGUpIHsKIAkJCQljYXNlIFBJUEVfQ09OVFJPTDoKIAkJCQkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfQ0xGLAotCQkJCQkJJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7ICAgCisJCQkJCQkmb2hjaS0+cmVncy0+Y21kc3RhdHVzKTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBQSVBFX0JVTEs6CiAJCQkJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0JMRiwKLQkJCQkJCSZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOyAgIAorCQkJCQkJJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KIAkJfQogCi0gICAgCQl0ZCA9IHRkX25leHQ7Ci0gIAl9ICAKKwkJdGQgPSB0ZF9uZXh0OworCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCmluZGV4IDU5ZTQzNjQuLmIzNTBkNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJICovCiAJLnN0YXJ0ID0JCW9oY2lfczNjMjQxMF9zdGFydCwKIAkuc3RvcCA9CQkJb2hjaV9zdG9wLAotCS5zaHV0ZG93biA9IAkJb2hjaV9zaHV0ZG93biwKKwkuc2h1dGRvd24gPQkJb2hjaV9zaHV0ZG93biwKIAogCS8qCiAJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKQEAgLTQ5Miw3ICs0OTIsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfcmVtb3ZlLAotCS5zaHV0ZG93biAJPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAorCS5zaHV0ZG93bgk9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCiAJLyouc3VzcGVuZAk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3N1c3BlbmQsICovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfcmVzdW1lLCAqLwogCS5kcml2ZXIJCT0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jCmluZGV4IDcxMzcxZGUuLmZlMDA5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc2ExMTExLmMKQEAgLTQsNyArNCw3IEBACiAgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgogICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgKiAoQykgQ29weXJpZ2h0IDIwMDIgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKLSAqIAorICoKICAqIFNBMTExMSBCdXMgR2x1ZQogICoKICAqIFdyaXR0ZW4gYnkgQ2hyaXN0b3BoZXIgSG9vdmVyIDxjaEBocGwuaHAuY29tPgpAQCAtMTIsNyArMTIsNyBAQAogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgogICovCi0gCisKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2Fzc2FiZXQuaD4KQEAgLTMxLDcgKzMxLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdXNiX3JzdCA9IDA7CiAKLQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXwogCSAgICAgICAiOiBzdGFydGluZyBTQS0xMTExIE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOwogCiAjaWZkZWYgQ09ORklHX1NBMTEwMF9CQURHRTQKQEAgLTY1LDcgKzY1LDcgQEAKIHN0YXRpYyB2b2lkIHNhMTExMV9zdG9wX2hjKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IHVzYl9yc3Q7Ci0JcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gCisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KIAkgICAgICAgIjogc3RvcHBpbmcgU0EtMTExMSBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCmluZGV4IGEyZjQyYTIuLjQwNTI1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oCkBAIC0xLDkgKzEsOSBAQAogLyoKICAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgotICogCisgKgogICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KICAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotICogCisgKgogICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCiAgKi8KIApAQCAtMTQsNyArMTQsNyBAQAogICovCiB0eXBlZGVmIF9fdTMyIF9fYml0d2lzZSBfX2hjMzI7CiB0eXBlZGVmIF9fdTE2IF9fYml0d2lzZSBfX2hjMTY7Ci0gCisKIC8qCiAgKiBPSENJIEVuZHBvaW50IERlc2NyaXB0b3IgKEVEKSAuLi4gaG9sZHMgVEQgcXVldWUKICAqIFNlZSBPSENJIHNwZWMsIHNlY3Rpb24gNC4yCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIHN0cnVjdCBlZCB7CiAJLyogZmlyc3QgZmllbGRzIGFyZSBoYXJkd2FyZS1zcGVjaWZpZWQgKi8KLQlfX2hjMzIJCQlod0lORk87ICAgICAgIAkvKiBlbmRwb2ludCBjb25maWcgYml0bWFwICovCisJX19oYzMyCQkJaHdJTkZPOyAgICAgIC8qIGVuZHBvaW50IGNvbmZpZyBiaXRtYXAgKi8KIAkvKiBpbmZvIGJpdHMgZGVmaW5lZCBieSBoY2QgKi8KICNkZWZpbmUgRURfREVRVUVVRQkoMSA8PCAyNykKIAkvKiBpbmZvIGJpdHMgZGVmaW5lZCBieSB0aGUgaGFyZHdhcmUgKi8KQEAgLTUyLDExICs1MiwxMSBAQAogCSAqIHVzdWFsbHk6ICBPUEVSIC0tPiBVTkxJTksgLS0+IChJRExFIHwgT1BFUikgLS0+IC4uLgogCSAqLwogCXU4CQkJc3RhdGU7CQkvKiBFRF97SURMRSxVTkxJTkssT1BFUn0gKi8KLSNkZWZpbmUgRURfSURMRSAJMHgwMAkJLyogTk9UIGxpbmtlZCB0byBIQyAqLwotI2RlZmluZSBFRF9VTkxJTksgCTB4MDEJCS8qIGJlaW5nIHVubGlua2VkIGZyb20gaGMgKi8KKyNkZWZpbmUgRURfSURMRQkJMHgwMAkJLyogTk9UIGxpbmtlZCB0byBIQyAqLworI2RlZmluZSBFRF9VTkxJTksJMHgwMQkJLyogYmVpbmcgdW5saW5rZWQgZnJvbSBoYyAqLwogI2RlZmluZSBFRF9PUEVSCQkweDAyCQkvKiBJUyBsaW5rZWQgdG8gaGMgKi8KIAotCXU4CQkJdHlwZTsgCQkvKiBQSVBFX3tCVUxLLC4uLn0gKi8KKwl1OAkJCXR5cGU7CQkvKiBQSVBFX3tCVUxLLC4uLn0gKi8KIAogCS8qIHBlcmlvZGljIHNjaGVkdWxpbmcgcGFyYW1zIChmb3IgaW50ciBhbmQgaXNvKSAqLwogCXU4CQkJYnJhbmNoOwpAQCAtNzAsNyArNzAsNyBAQAogCiAjZGVmaW5lIEVEX01BU0sJKCh1MzIpfjB4MGYpCQkvKiBzdHJpcCBodyBzdGF0dXMgaW4gbG93IGFkZHIgYml0cyAqLwogCi0gCisKIC8qCiAgKiBPSENJIFRyYW5zZmVyIERlc2NyaXB0b3IgKFREKSAuLi4gb25lIHBlciB0cmFuc2ZlciBzZWdtZW50CiAgKiBTZWUgT0hDSSBzcGVjLCBzZWN0aW9ucyA0LjMuMSAoZ2VuZXJhbCA9IGNvbnRyb2wvYnVsay9pbnRlcnJ1cHQpCkBAIC0xMDcsMjIgKzEwNywyMiBAQAogCiAJLyogKG5vIGh3SU5GTyAjZGVmaW5lcyB5ZXQgZm9yIGlzbyB0ZHMpICovCiAKLSAgCV9faGMzMgkJaHdDQlA7CQkvKiBDdXJyZW50IEJ1ZmZlciBQb2ludGVyIChvciAwKSAqLwotICAJX19oYzMyCQlod05leHRURDsJLyogTmV4dCBURCBQb2ludGVyICovCi0gIAlfX2hjMzIJCWh3QkU7CQkvKiBNZW1vcnkgQnVmZmVyIEVuZCBQb2ludGVyICovCisJX19oYzMyCQlod0NCUDsJCS8qIEN1cnJlbnQgQnVmZmVyIFBvaW50ZXIgKG9yIDApICovCisJX19oYzMyCQlod05leHRURDsJLyogTmV4dCBURCBQb2ludGVyICovCisJX19oYzMyCQlod0JFOwkJLyogTWVtb3J5IEJ1ZmZlciBFbmQgUG9pbnRlciAqLwogCiAJLyogUFNXIGlzIG9ubHkgZm9yIElTTy4gIE9ubHkgMSBQU1cgZW50cnkgaXMgdXNlZCwgYnV0IG9uCiAJICogYmlnLWVuZGlhbiBQUEMgaGFyZHdhcmUgdGhhdCdzIHRoZSBzZWNvbmQgZW50cnkuCiAJICovCiAjZGVmaW5lIE1BWFBTVwkyCi0gIAlfX2hjMTYJCWh3UFNXIFtNQVhQU1ddOworCV9faGMxNgkJaHdQU1cgW01BWFBTV107CiAKIAkvKiByZXN0IGFyZSBwdXJlbHkgZm9yIHRoZSBkcml2ZXIncyB1c2UgKi8KLSAgCV9fdTgJCWluZGV4OwotICAJc3RydWN0IGVkCSplZDsKLSAgCXN0cnVjdCB0ZAkqdGRfaGFzaDsJLyogZG1hLS0+dGQgaGFzaHRhYmxlICovCi0gIAlzdHJ1Y3QgdGQJKm5leHRfZGxfdGQ7Ci0gIAlzdHJ1Y3QgdXJiCSp1cmI7CisJX191OAkJaW5kZXg7CisJc3RydWN0IGVkCSplZDsKKwlzdHJ1Y3QgdGQJKnRkX2hhc2g7CS8qIGRtYS0tPnRkIGhhc2h0YWJsZSAqLworCXN0cnVjdCB0ZAkqbmV4dF9kbF90ZDsKKwlzdHJ1Y3QgdXJiCSp1cmI7CiAKIAlkbWFfYWRkcl90CXRkX2RtYTsJCS8qIGFkZHIgb2YgdGhpcyBURCAqLwogCWRtYV9hZGRyX3QJZGF0YV9kbWE7CS8qIGFkZHIgb2YgZGF0YSBpdCBwb2ludHMgdG8gKi8KQEAgLTE1Miw4ICsxNTIsOCBAQAogI2RlZmluZSBURF9OT1RBQ0NFU1NFRCAgICAgMHgwRgogCiAKLS8qIG1hcCBPSENJIFREIHN0YXR1cyBjb2RlcyAoQ0MpIHRvIGVycm5vIHZhbHVlcyAqLyAKLXN0YXRpYyBjb25zdCBpbnQgY2NfdG9fZXJyb3IgWzE2XSA9IHsgCisvKiBtYXAgT0hDSSBURCBzdGF0dXMgY29kZXMgKENDKSB0byBlcnJubyB2YWx1ZXMgKi8KK3N0YXRpYyBjb25zdCBpbnQgY2NfdG9fZXJyb3IgWzE2XSA9IHsKIAkvKiBObyAgRXJyb3IgICovICAgICAgICAgICAgICAgMCwKIAkvKiBDUkMgRXJyb3IgICovICAgICAgICAgICAgICAgLUVJTFNFUSwKIAkvKiBCaXQgU3R1ZmYgICovICAgICAgICAgICAgICAgLUVQUk9UTywKQEAgLTE2OSw3ICsxNjksNyBAQAogCS8qIEJ1ZmZlck92ZXIgKi8gICAgICAgICAgICAgICAtRUNPTU0sCiAJLyogQnVmZlVuZGVyICAqLyAgICAgICAgICAgICAgIC1FTk9TUiwKIAkvKiAoZm9yIEhDRCkgICovICAgICAgICAgICAgICAgLUVBTFJFQURZLAotCS8qIChmb3IgSENEKSAgKi8gICAgICAgICAgICAgICAtRUFMUkVBRFkgCisJLyogKGZvciBIQ0QpICAqLyAgICAgICAgICAgICAgIC1FQUxSRUFEWQogfTsKIAogCkBAIC0xODIsNyArMTgyLDcgQEAKICNkZWZpbmUgTlVNX0lOVFMgMzIKIAlfX2hjMzIJaW50X3RhYmxlIFtOVU1fSU5UU107CS8qIHBlcmlvZGljIHNjaGVkdWxlICovCiAKLQkvKiAKKwkvKgogCSAqIE9IQ0kgZGVmaW5lcyB1MTYgZnJhbWVfbm8sIGZvbGxvd2VkIGJ5IHUxNiB6ZXJvIHBhZC4KIAkgKiBTaW5jZSBzb21lIHByb2Nlc3NvcnMgY2FuJ3QgZG8gMTYgYml0IGJ1cyBhY2Nlc3NlcywKIAkgKiBwb3J0YWJsZSBhY2Nlc3MgbXVzdCBiZSBhIDMyIGJpdHMgd2lkZS4KQEAgLTI2MiwxMCArMjYyLDEwIEBACiAgKiBIY0NvbW1hbmRTdGF0dXMgKGNtZHN0YXR1cykgcmVnaXN0ZXIgbWFza3MKICAqLwogI2RlZmluZSBPSENJX0hDUgkoMSA8PCAwKQkvKiBob3N0IGNvbnRyb2xsZXIgcmVzZXQgKi8KLSNkZWZpbmUgT0hDSV9DTEYgIAkoMSA8PCAxKQkvKiBjb250cm9sIGxpc3QgZmlsbGVkICovCi0jZGVmaW5lIE9IQ0lfQkxGICAJKDEgPDwgMikJLyogYnVsayBsaXN0IGZpbGxlZCAqLwotI2RlZmluZSBPSENJX09DUiAgCSgxIDw8IDMpCS8qIG93bmVyc2hpcCBjaGFuZ2UgcmVxdWVzdCAqLwotI2RlZmluZSBPSENJX1NPQyAgCSgzIDw8IDE2KQkvKiBzY2hlZHVsaW5nIG92ZXJydW4gY291bnQgKi8KKyNkZWZpbmUgT0hDSV9DTEYJKDEgPDwgMSkJLyogY29udHJvbCBsaXN0IGZpbGxlZCAqLworI2RlZmluZSBPSENJX0JMRgkoMSA8PCAyKQkvKiBidWxrIGxpc3QgZmlsbGVkICovCisjZGVmaW5lIE9IQ0lfT0NSCSgxIDw8IDMpCS8qIG93bmVyc2hpcCBjaGFuZ2UgcmVxdWVzdCAqLworI2RlZmluZSBPSENJX1NPQwkoMyA8PCAxNikJLyogc2NoZWR1bGluZyBvdmVycnVuIGNvdW50ICovCiAKIC8qCiAgKiBtYXNrcyB1c2VkIHdpdGggaW50ZXJydXB0IHJlZ2lzdGVyczoKQEAgLTI4NSwyMCArMjg1LDIwIEBACiAKIAogLyogT0hDSSBST09UIEhVQiBSRUdJU1RFUiBNQVNLUyAqLwotIAorCiAvKiByb290aHViLnBvcnRzdGF0dXMgW2ldIGJpdHMgKi8KLSNkZWZpbmUgUkhfUFNfQ0NTICAgICAgICAgICAgMHgwMDAwMDAwMSAgIAkvKiBjdXJyZW50IGNvbm5lY3Qgc3RhdHVzICovCi0jZGVmaW5lIFJIX1BTX1BFUyAgICAgICAgICAgIDB4MDAwMDAwMDIgICAJLyogcG9ydCBlbmFibGUgc3RhdHVzKi8KLSNkZWZpbmUgUkhfUFNfUFNTICAgICAgICAgICAgMHgwMDAwMDAwNCAgIAkvKiBwb3J0IHN1c3BlbmQgc3RhdHVzICovCi0jZGVmaW5lIFJIX1BTX1BPQ0kgICAgICAgICAgIDB4MDAwMDAwMDggICAJLyogcG9ydCBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yICovCi0jZGVmaW5lIFJIX1BTX1BSUyAgICAgICAgICAgIDB4MDAwMDAwMTAgIAkvKiBwb3J0IHJlc2V0IHN0YXR1cyAqLwotI2RlZmluZSBSSF9QU19QUFMgICAgICAgICAgICAweDAwMDAwMTAwICAgCS8qIHBvcnQgcG93ZXIgc3RhdHVzICovCi0jZGVmaW5lIFJIX1BTX0xTREEgICAgICAgICAgIDB4MDAwMDAyMDAgICAgCS8qIGxvdyBzcGVlZCBkZXZpY2UgYXR0YWNoZWQgKi8KLSNkZWZpbmUgUkhfUFNfQ1NDICAgICAgICAgICAgMHgwMDAxMDAwMCAJLyogY29ubmVjdCBzdGF0dXMgY2hhbmdlICovCi0jZGVmaW5lIFJIX1BTX1BFU0MgICAgICAgICAgIDB4MDAwMjAwMDAgICAJLyogcG9ydCBlbmFibGUgc3RhdHVzIGNoYW5nZSAqLwotI2RlZmluZSBSSF9QU19QU1NDICAgICAgICAgICAweDAwMDQwMDAwICAgIAkvKiBwb3J0IHN1c3BlbmQgc3RhdHVzIGNoYW5nZSAqLwotI2RlZmluZSBSSF9QU19PQ0lDICAgICAgICAgICAweDAwMDgwMDAwICAgIAkvKiBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZSAqLwotI2RlZmluZSBSSF9QU19QUlNDICAgICAgICAgICAweDAwMTAwMDAwICAgCS8qIHBvcnQgcmVzZXQgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBSSF9QU19DQ1MgICAgICAgICAgICAweDAwMDAwMDAxCQkvKiBjdXJyZW50IGNvbm5lY3Qgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX1BFUyAgICAgICAgICAgIDB4MDAwMDAwMDIJCS8qIHBvcnQgZW5hYmxlIHN0YXR1cyovCisjZGVmaW5lIFJIX1BTX1BTUyAgICAgICAgICAgIDB4MDAwMDAwMDQJCS8qIHBvcnQgc3VzcGVuZCBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfUFNfUE9DSSAgICAgICAgICAgMHgwMDAwMDAwOAkJLyogcG9ydCBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yICovCisjZGVmaW5lIFJIX1BTX1BSUyAgICAgICAgICAgIDB4MDAwMDAwMTAJCS8qIHBvcnQgcmVzZXQgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX1BQUyAgICAgICAgICAgIDB4MDAwMDAxMDAJCS8qIHBvcnQgcG93ZXIgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX0xTREEgICAgICAgICAgIDB4MDAwMDAyMDAJCS8qIGxvdyBzcGVlZCBkZXZpY2UgYXR0YWNoZWQgKi8KKyNkZWZpbmUgUkhfUFNfQ1NDICAgICAgICAgICAgMHgwMDAxMDAwMAkJLyogY29ubmVjdCBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIFJIX1BTX1BFU0MgICAgICAgICAgIDB4MDAwMjAwMDAJCS8qIHBvcnQgZW5hYmxlIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfUFNfUFNTQyAgICAgICAgICAgMHgwMDA0MDAwMAkJLyogcG9ydCBzdXNwZW5kIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfUFNfT0NJQyAgICAgICAgICAgMHgwMDA4MDAwMAkJLyogb3ZlciBjdXJyZW50IGluZGljYXRvciBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfUFNfUFJTQyAgICAgICAgICAgMHgwMDEwMDAwMAkJLyogcG9ydCByZXNldCBzdGF0dXMgY2hhbmdlICovCiAKIC8qIHJvb3RodWIuc3RhdHVzIGJpdHMgKi8KICNkZWZpbmUgUkhfSFNfTFBTCSAgICAgMHgwMDAwMDAwMQkJLyogbG9jYWwgcG93ZXIgc3RhdHVzICovCkBAIC0zMzMsNyArMzMzLDcgQEAKIH0gdXJiX3ByaXZfdDsKIAogI2RlZmluZSBURF9IQVNIX1NJWkUgICAgNjQgICAgLyogcG93ZXInbyd0d28gKi8KLS8vIHNpemVvZiAoc3RydWN0IHRkKSB+PSA2NCA9PSAyXjYgLi4uIAorLy8gc2l6ZW9mIChzdHJ1Y3QgdGQpIH49IDY0ID09IDJeNiAuLi4KICNkZWZpbmUgVERfSEFTSF9GVU5DKHRkX2RtYSkgKCh0ZF9kbWEgXiAodGRfZG1hID4+IDYpKSAlIFREX0hBU0hfU0laRSkKIAogCkBAIC0zNjQsMTEgKzM2NCwxMSBAQAogCiAJc3RydWN0IGVkCQkqZWRfYnVsa3RhaWw7CQkvKiBsYXN0IGluIGJ1bGsgbGlzdCAqLwogCXN0cnVjdCBlZAkJKmVkX2NvbnRyb2x0YWlsOwkvKiBsYXN0IGluIGN0cmwgbGlzdCAqLwotIAlzdHJ1Y3QgZWQJCSpwZXJpb2RpYyBbTlVNX0lOVFNdOwkvKiBzaGFkb3cgaW50X3RhYmxlICovCisJc3RydWN0IGVkCQkqcGVyaW9kaWMgW05VTV9JTlRTXTsJLyogc2hhZG93IGludF90YWJsZSAqLwogCiAJLyoKIAkgKiBPVEcgY29udHJvbGxlcnMgYW5kIHRyYW5zY2VpdmVycyBuZWVkIHNvZnR3YXJlIGludGVyYWN0aW9uOwotCSAqIG90aGVyIGV4dGVybmFsIHRyYW5zY2VpdmVycyBzaG91bGQgYmUgc29mdHdhcmUtdHJhbnNwYXJlbnQgCisJICogb3RoZXIgZXh0ZXJuYWwgdHJhbnNjZWl2ZXJzIHNob3VsZCBiZSBzb2Z0d2FyZS10cmFuc3BhcmVudAogCSAqLwogCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJKnRyYW5zY2VpdmVyOwogCkBAIC0zODUsNyArMzg1LDcgQEAKIAkgKi8KIAlpbnQJCQludW1fcG9ydHM7CiAJaW50CQkJbG9hZCBbTlVNX0lOVFNdOwotCXUzMiAJCQloY19jb250cm9sOwkvKiBjb3B5IG9mIGhjIGNvbnRyb2wgcmVnICovCisJdTMyCQkJaGNfY29udHJvbDsJLyogY29weSBvZiBoYyBjb250cm9sIHJlZyAqLwogCXVuc2lnbmVkIGxvbmcJCW5leHRfc3RhdGVjaGFuZ2U7CS8qIHN1c3BlbmQvcmVzdW1lICovCiAJdTMyCQkJZm1pbnRlcnZhbDsJCS8qIHNhdmVkIHJlZ2lzdGVyICovCiAJdW5zaWduZWQJCWF1dG9zdG9wOjE7CS8qIHJoIGF1dG8gc3RvcHBpbmcvc3RvcHBlZCAqLwpAQCAtNTk4LDExICs1OTgsMTEgQEAKIH0KIAogI2RlZmluZQlGSQkJCTB4MmVkZgkJLyogMTIwMDAgYml0cyBwZXIgZnJhbWUgKC0xKSAqLwotI2RlZmluZQlGU01QKGZpKSAJCSgweDdmZmYgJiAoKDYgKiAoKGZpKSAtIDIxMCkpIC8gNykpCisjZGVmaW5lCUZTTVAoZmkpCQkoMHg3ZmZmICYgKCg2ICogKChmaSkgLSAyMTApKSAvIDcpKQogI2RlZmluZQlGSVQJCQkoMSA8PCAzMSkKICNkZWZpbmUgTFNUSFJFU0gJCTB4NjI4CQkvKiBsb3dzcGVlZCBiaXQgdGhyZXNob2xkICovCiAKLXN0YXRpYyB2b2lkIHBlcmlvZGljX3JlaW5pdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQorc3RhdGljIGlubGluZSB2b2lkIHBlcmlvZGljX3JlaW5pdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQogewogCXUzMglmaSA9IG9oY2ktPmZtaW50ZXJ2YWwgJiAweDAzZmZmOwogCXUzMglmaXQgPSBvaGNpX3JlYWRsKG9oY2ksICZvaGNpLT5yZWdzLT5mbWludGVydmFsKSAmIEZJVDsKQEAgLTYyNiwxMSArNjI2LDExIEBACiAJCQl0ZW1wID0gb2hjaV9yZWFkbCAoaGMsICZoYy0+cmVncy0+cm9vdGh1Yi5yZWdpc3Rlcik7IFwKIAl0ZW1wOyB9KQogCi1zdGF0aWMgdTMyIHJvb3RodWJfYSAoc3RydWN0IG9oY2lfaGNkICpoYykKK3N0YXRpYyBpbmxpbmUgdTMyIHJvb3RodWJfYSAoc3RydWN0IG9oY2lfaGNkICpoYykKIAl7IHJldHVybiByZWFkX3Jvb3RodWIgKGhjLCBhLCAweGZjMGZlMDAwKTsgfQogc3RhdGljIGlubGluZSB1MzIgcm9vdGh1Yl9iIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjKQogCXsgcmV0dXJuIG9oY2lfcmVhZGwgKGhjLCAmaGMtPnJlZ3MtPnJvb3RodWIuYik7IH0KIHN0YXRpYyBpbmxpbmUgdTMyIHJvb3RodWJfc3RhdHVzIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjKQogCXsgcmV0dXJuIG9oY2lfcmVhZGwgKGhjLCAmaGMtPnJlZ3MtPnJvb3RodWIuc3RhdHVzKTsgfQotc3RhdGljIHUzMiByb290aHViX3BvcnRzdGF0dXMgKHN0cnVjdCBvaGNpX2hjZCAqaGMsIGludCBpKQorc3RhdGljIGlubGluZSB1MzIgcm9vdGh1Yl9wb3J0c3RhdHVzIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjLCBpbnQgaSkKIAl7IHJldHVybiByZWFkX3Jvb3RodWIgKGhjLCBwb3J0c3RhdHVzIFtpXSwgMHhmZmUwZmNlMCk7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdTEzMi1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdTEzMi1oY2QuYwppbmRleCBhOWQ3MTE5Li5hN2ZhMGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3UxMzItaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgpAQCAtMjEwLDE1ICsyMTEsMTYgQEAKICogdGhlc2UgY2Fubm90IGJlIGlubGluZXMgYmVjYXVzZSB3ZSBuZWVkIHRoZSBzdHJ1Y3R1cmUgb2Zmc2V0ISEKICogRG9lcyBhbnlvbmUgaGF2ZSBhIGJldHRlciB3YXk/Pz8/PwogKi8KKyNkZWZpbmUgZnRkaV9yZWFkX3BjaW1lbShwZGV2LCBtZW1iZXIsIGRhdGEpIHVzYl9mdGRpX2VsYW5fcmVhZF9wY2ltZW0ocGRldiwgXAorICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgb2hjaV9yZWdzLCBtZW1iZXIpLCAwLCBkYXRhKTsKKyNkZWZpbmUgZnRkaV93cml0ZV9wY2ltZW0ocGRldiwgbWVtYmVyLCBkYXRhKSB1c2JfZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShwZGV2LCBcCisgICAgICAgIG9mZnNldG9mKHN0cnVjdCBvaGNpX3JlZ3MsIG1lbWJlciksIDAsIGRhdGEpOwogI2RlZmluZSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIG1lbWJlciwgZGF0YSkgXAogICAgICAgICB1c2JfZnRkaV9lbGFuX3JlYWRfcGNpbWVtKHUxMzItPnBsYXRmb3JtX2Rldiwgb2Zmc2V0b2Yoc3RydWN0IFwKICAgICAgICAgb2hjaV9yZWdzLCBtZW1iZXIpLCAwLCBkYXRhKTsKICNkZWZpbmUgdTEzMl93cml0ZV9wY2ltZW0odTEzMiwgbWVtYmVyLCBkYXRhKSBcCiAgICAgICAgIHVzYl9mdGRpX2VsYW5fd3JpdGVfcGNpbWVtKHUxMzItPnBsYXRmb3JtX2Rldiwgb2Zmc2V0b2Yoc3RydWN0IFwKICAgICAgICAgb2hjaV9yZWdzLCBtZW1iZXIpLCAwLCBkYXRhKTsKLSNkZWZpbmUgdTEzMl93cml0ZV9wY2ltZW1fYnl0ZSh1MTMyLCBtZW1iZXIsIGRhdGEpIFwKLSAgICAgICAgdXNiX2Z0ZGlfZWxhbl93cml0ZV9wY2ltZW0odTEzMi0+cGxhdGZvcm1fZGV2LCBvZmZzZXRvZihzdHJ1Y3QgXAotICAgICAgICBvaGNpX3JlZ3MsIG1lbWJlciksIDB4MGUsIGRhdGEpOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdTEzMiAqdWRldl90b191MTMyKHN0cnVjdCB1MTMyX3VkZXYgKnVkZXYpCiB7CiAgICAgICAgIHU4IHVkZXZfbnVtYmVyID0gdWRldi0+dWRldl9udW1iZXI7CkBAIC0xNTc0LDU5ICsxNTc2LDEyIEBACiAgICAgICAgIHJldHVybiAiPyI7CiB9CiAKLXN0YXRpYyBpbnQgdTEzMl91c2JfcmVzZXQoc3RydWN0IHUxMzIgKnUxMzIpCi17Ci0gICAgICAgIGludCByZXR2YWw7Ci0gICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgY29udHJvbCwgJnUxMzItPmhjX2NvbnRyb2wpOwotICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIHUxMzItPmhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKLSAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW0odTEzMiwgY29udHJvbCwgdTEzMi0+aGNfY29udHJvbCk7Ci0gICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdTEzMl9pbml0KHN0cnVjdCB1MTMyICp1MTMyKQogewogICAgICAgICBpbnQgcmV0dmFsOwogICAgICAgICB1MzIgY29udHJvbDsKICAgICAgICAgdTEzMl9kaXNhYmxlKHUxMzIpOwotICAgICAgICB1MTMyLT5uZXh0X3N0YXRlY2hhbmdlID0KLSAgICAgICAgICAgICAgICBqaWZmaWVzOyAvKiBTTU0gb3ducyB0aGUgSEM/IG5vdCBmb3IgbG9uZyEgKi8gIHsKLSAgICAgICAgICAgICAgICB1MzIgY29udHJvbDsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIGNvbnRyb2wsICZjb250cm9sKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICAgICAgICAgICAgICBpZiAoY29udHJvbCAmIE9IQ0lfQ1RSTF9JUikgewotICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHRlbXAgPSA1MDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHUxMzJfd3JpdGVfcGNpbWVtKHUxMzIsIGludHJlbmFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9IQ0lfSU5UUl9PQyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW1fYnl0ZSh1MTMyLCBjbWRzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9IQ0lfT0NSKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgICAgICAgICAgICAgICAgY2hlY2s6ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIGNvbnRyb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRyb2wpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbCAmIE9IQ0lfQ1RSTF9JUikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS10ZW1wID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIlVTQiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEMgdGFrZW92ZXIgZmFpbGVkIShCSU9TL1NNTSBiIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVnKSBjb250cm9sPSUwOFhcbiIsIGNvbnRyb2wpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjaGVjazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfdXNiX3Jlc2V0KHUxMzIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICB1MTMyLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKICAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW0odTEzMiwgaW50cmRpc2FibGUsIE9IQ0lfSU5UUl9NSUUpOwogICAgICAgICBpZiAocmV0dmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CkBAIC0xNzI1LDcgKzE2ODAsNyBAQAogICAgICAgcmV0cnk6cmV0dmFsID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLCBjbWRzdGF0dXMsICZzdGF0dXMpOwogICAgICAgICBpZiAocmV0dmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHZhbCA9IHUxMzJfd3JpdGVfcGNpbWVtX2J5dGUodTEzMiwgY21kc3RhdHVzLCBPSENJX0hDUik7CisgICAgICAgIHJldHZhbCA9IHUxMzJfd3JpdGVfcGNpbWVtKHUxMzIsIGNtZHN0YXR1cywgT0hDSV9IQ1IpOwogICAgICAgICBpZiAocmV0dmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CiAgICAgICBleHRyYTp7CkBAIC0xNzgyLDcgKzE3MzcsNyBAQAogICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCBjb250cm9sLCB1MTMyLT5oY19jb250cm9sKTsKICAgICAgICAgaWYgKHJldHZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbV9ieXRlKHUxMzIsIGNtZHN0YXR1cywgT0hDSV9CTEYpOworICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCBjbWRzdGF0dXMsIE9IQ0lfQkxGKTsKICAgICAgICAgaWYgKHJldHZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOwogICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIGNtZHN0YXR1cywgJmNtZHN0YXR1cyk7CkBAIC0xODM5LDggKzE3OTQsOCBAQAogewogICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CiAgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKLSAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgInUxMzIgZGV2aWNlICVwKGhjZD0lcCkgaGFzIGIiCisgICAgICAgICAgICAgICAgICAgICAgICAiZWVuIHJlbW92ZWQgJWRcbiIsIHUxMzIsIGhjZCwgdTEzMi0+Z29pbmcpOwogICAgICAgICB9IGVsc2UgaWYgKHUxMzItPmdvaW5nID4gMCkgewogICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGhjZD0lcCBpcyBiZWluZyByZW1vdiIKICAgICAgICAgICAgICAgICAgICAgICAgICJlZFxuIiwgaGNkKTsKQEAgLTI1NDUsOCArMjUwMCw5IEBACiB7CiAgICAgICAgIHN0cnVjdCB1MTMyICp1MTMyID0gaGNkX3RvX3UxMzIoaGNkKTsKICAgICAgICAgaWYgKHUxMzItPmdvaW5nID4gMikgewotICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgJWRcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICwgdTEzMi0+Z29pbmcpOworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAidTEzMiBkZXZpY2UgJXAoaGNkPSVwIGhlcD0lcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICIpIGhhcyBiZWVuIHJlbW92ZWQgJWRcbiIsIHUxMzIsIGhjZCwgaGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgdTEzMi0+Z29pbmcpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBoZXAtPmhjcHJpdjsKICAgICAgICAgICAgICAgICBpZiAoZW5kcCkKQEAgLTI3OTAsNyArMjc0Niw2IEBACiAgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CiAgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaGNkPSVwIGlzIGJlaW5nIHJlbW92IgogICAgICAgICAgICAgICAgICAgICAgICAgImVkXG4iLCBoY2QpOwotICAgICAgICAgICAgICAgIGR1bXBfc3RhY2soKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVTSFVURE9XTjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpbnQgaSwgY2hhbmdlZCA9IDAsIGxlbmd0aCA9IDE7CkBAIC0zMDM0LDEyICsyOTg5LDE1IEBACiAgICAgICAgIHN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKICAgICAgICAgaWYgKGhjZCkgewogICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyICp1MTMyID0gaGNkX3RvX3UxMzIoaGNkKTsKLSAgICAgICAgICAgICAgICBkdW1wX3N0YWNrKCk7CiAgICAgICAgICAgICAgICAgaWYgKHUxMzItPmdvaW5nKysgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImFscmVhZHkgYmVpbmcgcmVtb3ZlIgorCQkJCSJkXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmluZ3MgPSBNQVhfVTEzMl9SSU5HUzsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmRwcyA9IE1BWF9VMTMyX0VORFBTOworICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJyZW1vdmluZyBkZXZpY2UgdTEzMiIKKwkJCQkiLiVkXG4iLCB1MTMyLT5zZXF1ZW5jZV9udW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3duKCZ1MTMyLT5zd19sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfbW9uaXRvcl9jYW5jZWxfd29yayh1MTMyKTsKQEAgLTMxMjEsMTAgKzMwNzksMjQgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHUxMzJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKICAgICAgICAgc3RydWN0IHVzYl9oY2QgKmhjZDsKKyAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgdTMyIGNvbnRyb2w7CisgICAgICAgIHUzMiByaF9hID0gLTE7CisgICAgICAgIHUzMiBudW1fcG9ydHM7CiAgICAgICAgIG1zbGVlcCgxMDApOwogICAgICAgICBpZiAodTEzMl9leGl0aW5nID4gMCkgewogICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVmdXNlIHRvIGNvbmZ1c2UgdXNiY29yZSAqLworICAgICAgICB9CisgICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKHBkZXYsIGludHJkaXNhYmxlLCBPSENJX0lOVFJfTUlFKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKHBkZXYsIGNvbnRyb2wsICZjb250cm9sKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKHBkZXYsIHJvb3RodWIuYSwgJnJoX2EpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIG51bV9wb3J0cyA9IHJoX2EgJiBSSF9BX05EUDsgICAgICAgIC8qIHJlZnVzZSB0byBjb25mdXNlIHVzYmNvcmUgKi8KICAgICAgICAgaWYgKHBkZXYtPmRldi5kbWFfbWFzaykgewogICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKaW5kZXggZTg3NjkyYy4uZTBkNGMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtNjAsNiArNjAsMTEgQEAKIEFsYW4gU3Rlcm4iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgVW5pdmVyc2FsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIgogCisvKiBmb3IgZmxha2V5IGhhcmR3YXJlLCBpZ25vcmUgb3ZlcmN1cnJlbnQgaW5kaWNhdG9ycyAqLworc3RhdGljIGludCBpZ25vcmVfb2M7Cittb2R1bGVfcGFyYW0oaWdub3JlX29jLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaWdub3JlX29jLCAiaWdub3JlIGhhcmR3YXJlIG92ZXJjdXJyZW50IGluZGljYXRpb25zIik7CisKIC8qCiAgKiBkZWJ1ZyA9IDAsIG5vIGRlYnVnZ2luZyBtZXNzYWdlcwogICogZGVidWcgPSAxLCBkdW1wIGZhaWxlZCBVUkJzIGV4Y2VwdCBmb3Igc3RhbGxzCkBAIC0xNjksNiArMTc0LDExIEBACiB7CiAJaW50IHBvcnQ7CiAKKwkvKiBJZiB3ZSBoYXZlIHRvIGlnbm9yZSBvdmVyY3VycmVudCBldmVudHMgdGhlbiBhbG1vc3QgYnkgZGVmaW5pdGlvbgorCSAqIHdlIGNhbid0IGRlcGVuZCBvbiByZXN1bWUtZGV0ZWN0IGludGVycnVwdHMuICovCisJaWYgKGlnbm9yZV9vYykKKwkJcmV0dXJuIDE7CisKIAlzd2l0Y2ggKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpLT52ZW5kb3IpIHsKIAkgICAgZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xOTksMjQgKzIwOSwxNiBAQAogCiBzdGF0aWMgaW50IHJlbW90ZV93YWtldXBfaXNfYnJva2VuKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKIHsKLQlzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgYnJva2VuX3dha2V1cF90YWJsZVtdID0gewotCQl7Ci0JCQkuaWRlbnQgPSAiQXN1cyBBN1Y4WCIsCi0JCQkubWF0Y2hlcyA9IHsKLQkJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkFTVVNUZUsiKSwKLQkJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJBN1Y4WCIpLAotCQkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVSU0lPTiwgIlJFViAxLnh4IiksCi0JCQl9Ci0JCX0sCi0JCXsgfQotCX07CiAJaW50IHBvcnQ7CisJY2hhciAqc3lzX2luZm87CisJc3RhdGljIGNoYXIgYmFkX0FzdXNfYm9hcmRbXSA9ICJBN1Y4WCI7CiAKIAkvKiBPbmUgb2YgQXN1cydzIG1vdGhlcmJvYXJkcyBoYXMgYSBidWcgd2hpY2ggY2F1c2VzIGl0IHRvCiAJICogd2FrZSB1cCBpbW1lZGlhdGVseSBmcm9tIHN1c3BlbmQtdG8tUkFNIGlmIGFueSBvZiB0aGUgcG9ydHMKIAkgKiBhcmUgY29ubmVjdGVkLiAgSW4gc3VjaCBjYXNlcyB3ZSB3aWxsIG5vdCBzZXQgRUdTTS4KIAkgKi8KLQlpZiAoZG1pX2NoZWNrX3N5c3RlbShicm9rZW5fd2FrZXVwX3RhYmxlKSkgeworCXN5c19pbmZvID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSk7CisJaWYgKHN5c19pbmZvICYmICFzdHJjbXAoc3lzX2luZm8sIGJhZF9Bc3VzX2JvYXJkKSkgewogCQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgdWhjaS0+cmhfbnVtcG9ydHM7ICsrcG9ydCkgewogCQkJaWYgKGludyh1aGNpLT5pb19hZGRyICsgVVNCUE9SVFNDMSArIHBvcnQgKiAyKSAmCiAJCQkJCVVTQlBPUlRTQ19DQ1MpCkBAIC0yNTUsNyArMjU3LDkgQEAKIAlpbnRfZW5hYmxlID0gVVNCSU5UUl9SRVNVTUU7CiAJaWYgKHJlbW90ZV93YWtldXBfaXNfYnJva2VuKHVoY2kpKQogCQllZ3NtX2VuYWJsZSA9IDA7Ci0JaWYgKHJlc3VtZV9kZXRlY3RfaW50ZXJydXB0c19hcmVfYnJva2VuKHVoY2kpIHx8ICFlZ3NtX2VuYWJsZSkKKwlpZiAocmVzdW1lX2RldGVjdF9pbnRlcnJ1cHRzX2FyZV9icm9rZW4odWhjaSkgfHwgIWVnc21fZW5hYmxlIHx8CisJCQkhZGV2aWNlX21heV93YWtldXAoCisJCQkJJnVoY2lfdG9faGNkKHVoY2kpLT5zZWxmLnJvb3RfaHViLT5kZXYpKQogCQl1aGNpLT53b3JraW5nX1JEID0gaW50X2VuYWJsZSA9IDA7CiAKIAlvdXR3KGludF9lbmFibGUsIHVoY2ktPmlvX2FkZHIgKyBVU0JJTlRSKTsKQEAgLTkyMSw3ICs5MjUsOCBAQAogewogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIiVzXG4iLAorCQkJaWdub3JlX29jID8gIiwgb3ZlcmN1cnJlbnQgaWdub3JlZCIgOiAiIik7CiAKIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCmluZGV4IGY4MzQ3ZjEuLmJhY2MyNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMKQEAgLTUyLDEwICs1MiwyMCBAQAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2h1Yl9zdGF0dXNfZGF0YShzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGNoYXIgKmJ1ZikKIHsKIAlpbnQgcG9ydDsKKwlpbnQgbWFzayA9IFJXQ19CSVRTOworCisJLyogU29tZSBib2FyZHMgKGJvdGggVklBIGFuZCBJbnRlbCBhcHBhcmVudGx5KSByZXBvcnQgYm9ndXMKKwkgKiBvdmVyY3VycmVudCBpbmRpY2F0aW9ucywgY2F1c2luZyBtYXNzaXZlIGxvZyBzcGFtIHVubGVzcworCSAqIHdlIGNvbXBsZXRlbHkgaWdub3JlIHRoZW0uICBUaGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHByb2JsZW0KKwkgKiB3aXRoIHRoZSBjaGlwc2V0IHNvIG11Y2ggYXMgd2l0aCB0aGUgd2F5IGl0IGlzIGNvbm5lY3RlZCBvbgorCSAqIHRoZSBtb3RoZXJib2FyZDsgaWYgdGhlIG92ZXJjdXJyZW50IGlucHV0IGlzIGxlZnQgdG8gZmxvYXQKKwkgKiB0aGVuIGl0IG1heSBjb25zdGFudGx5IHJlZ2lzdGVyIGZhbHNlIHBvc2l0aXZlcy4gKi8KKwlpZiAoaWdub3JlX29jKQorCQltYXNrICY9IH5VU0JQT1JUU0NfT0NDOwogCiAJKmJ1ZiA9IDA7CiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IHVoY2ktPnJoX251bXBvcnRzOyArK3BvcnQpIHsKLQkJaWYgKChpbncodWhjaS0+aW9fYWRkciArIFVTQlBPUlRTQzEgKyBwb3J0ICogMikgJiBSV0NfQklUUykgfHwKKwkJaWYgKChpbncodWhjaS0+aW9fYWRkciArIFVTQlBPUlRTQzEgKyBwb3J0ICogMikgJiBtYXNrKSB8fAogCQkJCXRlc3RfYml0KHBvcnQsICZ1aGNpLT5wb3J0X2Nfc3VzcGVuZCkpCiAJCQkqYnVmIHw9ICgxIDw8IChwb3J0ICsgMSkpOwogCX0KQEAgLTI2Myw3ICsyNzMsNyBAQAogCQkJd1BvcnRDaGFuZ2UgfD0gVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT047CiAJCWlmIChzdGF0dXMgJiBVU0JQT1JUU0NfUEVDKQogCQkJd1BvcnRDaGFuZ2UgfD0gVVNCX1BPUlRfU1RBVF9DX0VOQUJMRTsKLQkJaWYgKHN0YXR1cyAmIFVTQlBPUlRTQ19PQ0MpCisJCWlmICgoc3RhdHVzICYgVVNCUE9SVFNDX09DQykgJiYgIWlnbm9yZV9vYykKIAkJCXdQb3J0Q2hhbmdlIHw9IFVTQl9QT1JUX1NUQVRfQ19PVkVSQ1VSUkVOVDsKIAogCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcKaW5kZXggNjYxYWY3YS4uYzdkODg3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCkBAIC02LDE0ICs2LDE0IEBACiAKIGNvbmZpZyBVU0JfSElECiAJdHJpc3RhdGUgIlVTQiBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlIChmdWxsIEhJRCkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCisJc2VsZWN0IEhJRAogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgZnVsbCBISUQgc3VwcG9ydCB0byBjb25uZWN0IGtleWJvYXJkcywKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgZnVsbCBISUQgc3VwcG9ydCB0byBjb25uZWN0IFVTQiBrZXlib2FyZHMsCiAJICBtaWNlLCBqb3lzdGlja3MsIGdyYXBoaWMgdGFibGV0cywgb3IgYW55IG90aGVyIEhJRCBiYXNlZCBkZXZpY2VzCi0JICB0byB5b3VyIGNvbXB1dGVyIHZpYSBVU0IuIFlvdSBhbHNvIG5lZWQgdG8gc2VsZWN0IEhJRCBJbnB1dCBsYXllcgotCSAgc3VwcG9ydCAoYmVsb3cpIGlmIHlvdSB3YW50IHRvIHVzZSBrZXlib2FyZHMsIG1pY2UsIGpveXN0aWNrcyBhbmQKLQkgIHRoZSBsaWtlIC4uLiBhcyB3ZWxsIGFzIFVuaW50ZXJydXB0aWJsZSBQb3dlciBTdXBwbHkgKFVQUykgYW5kCi0JICBtb25pdG9yIGNvbnRyb2wgZGV2aWNlcy4KKwkgIHRvIHlvdXIgY29tcHV0ZXIgdmlhIFVTQiwgYXMgd2VsbCBhcyBVbmludGVycnVwdGlibGUgUG93ZXIgU3VwcGx5CisJICAoVVBTKSBhbmQgbW9uaXRvciBjb250cm9sIGRldmljZXMuCiAKIAkgIFlvdSBjYW4ndCB1c2UgdGhpcyBkcml2ZXIgYW5kIHRoZSBISURCUCAoQm9vdCBQcm90b2NvbCkga2V5Ym9hcmQKIAkgIGFuZCBtb3VzZSBkcml2ZXJzIGF0IHRoZSBzYW1lIHRpbWUuIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlOgpAQCAtMjcsMjAgKzI3LDEwIEBACiBjb21tZW50ICJJbnB1dCBjb3JlIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgSElEIGlucHV0IGxheWVyIG9yIEhJREJQIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfSElEICYmIElOUFVUPW4KIAotY29uZmlnIFVTQl9ISURJTlBVVAotCWJvb2wgIkhJRCBpbnB1dCBsYXllciBzdXBwb3J0IgotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gSU5QVVQgJiYgVVNCX0hJRAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgVVNCIGtleWJvYXJkLCBtb3VzZSBvciBqb3lzdGljaywKLQkgIG9yIGFueSBvdGhlciBISUQgaW5wdXQgZGV2aWNlLgotCi0JICBJZiB1bnN1cmUsIHNheSBZLgotCiBjb25maWcgVVNCX0hJRElOUFVUX1BPV0VSQk9PSwogCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBpQm9vay9Qb3dlckJvb2sgc3BlY2lhbCBrZXlzIgogCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gVVNCX0hJRElOUFVUCisJZGVwZW5kcyBvbiBVU0JfSElECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgc3BlY2lhbCBrZXlzIChGbiwgTnVtbG9jaykgb24KIAkgIEFwcGxlIGlCb29rcyBhbmQgUG93ZXJCb29rcy4KQEAgLTQ5LDcgKzM5LDcgQEAKIAogY29uZmlnIEhJRF9GRgogCWJvb2wgIkZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBVU0JfSElESU5QVVQgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBVU0JfSElEICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaXMgeW91IHdhbnQgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgYSBmZXcgSElEIGRldmljZXMuCiAJICBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZGV2aWNlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlIGIvZHJpdmVycy91c2IvaW5wdXQvTWFrZWZpbGUKaW5kZXggZDk0NmQ1Mi4uMWEyNGI1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvTWFrZWZpbGUKQEAgLTExLDkgKzExLDYgQEAKIGlmZXEgKCQoQ09ORklHX1VTQl9ISURERVYpLHkpCiAJdXNiaGlkLW9ianMJKz0gaGlkZGV2Lm8KIGVuZGlmCi1pZmVxICgkKENPTkZJR19VU0JfSElESU5QVVQpLHkpCi0JdXNiaGlkLW9ianMJKz0gaGlkLWlucHV0Lm8KLWVuZGlmCiBpZmVxICgkKENPTkZJR19ISURfUElEKSx5KQogCXVzYmhpZC1vYmpzCSs9IGhpZC1waWRmZi5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvYXBwbGV0b3VjaC5jIGIvZHJpdmVycy91c2IvaW5wdXQvYXBwbGV0b3VjaC5jCmluZGV4IDRjMjEzNTEuLmM3NzI5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2FwcGxldG91Y2guYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9hcHBsZXRvdWNoLmMKQEAgLTM4LDE0ICszOCwyOSBAQAogI2RlZmluZSBBUFBMRV9WRU5ET1JfSUQJCTB4MDVBQwogCiAvKiBUaGVzZSBuYW1lcyBjb21lIGZyb20gSW5mby5wbGlzdCBpbiBBcHBsZVVTQlRyYWNrcGFkLmtleHQgKi8KLSNkZWZpbmUgR0VZU0VSX0FOU0lfUFJPRFVDVF9JRAkweDAyMTQKLSNkZWZpbmUgR0VZU0VSX0lTT19QUk9EVUNUX0lECTB4MDIxNQotI2RlZmluZSBHRVlTRVJfSklTX1BST0RVQ1RfSUQJMHgwMjE2CisjZGVmaW5lIEZPVU5UQUlOX0FOU0lfUFJPRFVDVF9JRAkweDAyMEUKKyNkZWZpbmUgRk9VTlRBSU5fSVNPX1BST0RVQ1RfSUQJCTB4MDIwRgorCisjZGVmaW5lIEZPVU5UQUlOX1RQX09OTFlfUFJPRFVDVF9JRAkweDAzMEEKKworI2RlZmluZSBHRVlTRVIxX1RQX09OTFlfUFJPRFVDVF9JRAkweDAzMEIKKworI2RlZmluZSBHRVlTRVJfQU5TSV9QUk9EVUNUX0lECQkweDAyMTQKKyNkZWZpbmUgR0VZU0VSX0lTT19QUk9EVUNUX0lECQkweDAyMTUKKyNkZWZpbmUgR0VZU0VSX0pJU19QUk9EVUNUX0lECQkweDAyMTYKIAogLyogTWFjQm9vayBkZXZpY2VzICovCi0jZGVmaW5lIEdFWVNFUjNfQU5TSV9QUk9EVUNUX0lECTB4MDIxNwotI2RlZmluZSBHRVlTRVIzX0lTT19QUk9EVUNUX0lECTB4MDIxOAotI2RlZmluZSBHRVlTRVIzX0pJU19QUk9EVUNUX0lECTB4MDIxOQorI2RlZmluZSBHRVlTRVIzX0FOU0lfUFJPRFVDVF9JRAkJMHgwMjE3CisjZGVmaW5lIEdFWVNFUjNfSVNPX1BST0RVQ1RfSUQJCTB4MDIxOAorI2RlZmluZSBHRVlTRVIzX0pJU19QUk9EVUNUX0lECQkweDAyMTkKKworLyoKKyAqIEdleXNlciBJVjogc2FtZSBhcyBHZXlzZXIgSUlJIGFjY29yZGluZyB0byBJbmZvLnBsaXN0IGluIEFwcGxlVVNCVHJhY2twYWQua2V4dAorICogLT4gc2FtZSBJT0NsYXNzIChBcHBsZVVTQkdySUlJVHJhY2twYWQpLCBzYW1lIGFjY2VsZXJhdGlvbiB0YWJsZXMKKyAqLworI2RlZmluZSBHRVlTRVI0X0FOU0lfUFJPRFVDVF9JRAkweDAyMUEKKyNkZWZpbmUgR0VZU0VSNF9JU09fUFJPRFVDVF9JRAkweDAyMUIKKyNkZWZpbmUgR0VZU0VSNF9KSVNfUFJPRFVDVF9JRAkweDAyMUMKIAogI2RlZmluZSBBVFBfREVWSUNFKHByb2QpCQkJCQlcCiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAkJXApAQCAtNTgsMjAgKzczLDI2IEBACiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhdHBfdGFibGUgW10gPSB7Ci0JeyBBVFBfREVWSUNFKDB4MDIwRSkgfSwKLQl7IEFUUF9ERVZJQ0UoMHgwMjBGKSB9LAotCXsgQVRQX0RFVklDRSgweDAzMEEpIH0sCi0JeyBBVFBfREVWSUNFKDB4MDMwQikgfSwKKwl7IEFUUF9ERVZJQ0UoRk9VTlRBSU5fQU5TSV9QUk9EVUNUX0lEKSB9LAorCXsgQVRQX0RFVklDRShGT1VOVEFJTl9JU09fUFJPRFVDVF9JRCkgfSwKKwl7IEFUUF9ERVZJQ0UoRk9VTlRBSU5fVFBfT05MWV9QUk9EVUNUX0lEKSB9LAorCXsgQVRQX0RFVklDRShHRVlTRVIxX1RQX09OTFlfUFJPRFVDVF9JRCkgfSwKIAogCS8qIFBvd2VyQm9va3MgT2N0IDIwMDUgKi8KIAl7IEFUUF9ERVZJQ0UoR0VZU0VSX0FOU0lfUFJPRFVDVF9JRCkgfSwKIAl7IEFUUF9ERVZJQ0UoR0VZU0VSX0lTT19QUk9EVUNUX0lEKSB9LAogCXsgQVRQX0RFVklDRShHRVlTRVJfSklTX1BST0RVQ1RfSUQpIH0sCiAKKwkvKiBDb3JlIER1byBNYWNCb29rICYgTWFjQm9vayBQcm8gKi8KIAl7IEFUUF9ERVZJQ0UoR0VZU0VSM19BTlNJX1BST0RVQ1RfSUQpIH0sCiAJeyBBVFBfREVWSUNFKEdFWVNFUjNfSVNPX1BST0RVQ1RfSUQpIH0sCiAJeyBBVFBfREVWSUNFKEdFWVNFUjNfSklTX1BST0RVQ1RfSUQpIH0sCiAKKwkvKiBDb3JlMiBEdW8gTWFjQm9vayAmIE1hY0Jvb2sgUHJvICovCisJeyBBVFBfREVWSUNFKEdFWVNFUjRfQU5TSV9QUk9EVUNUX0lEKSB9LAorCXsgQVRQX0RFVklDRShHRVlTRVI0X0lTT19QUk9EVUNUX0lEKSB9LAorCXsgQVRQX0RFVklDRShHRVlTRVI0X0pJU19QUk9EVUNUX0lEKSB9LAorCiAJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIAl7IH0KIH07CkBAIC0xMDgsNyArMTI5LDcgQEAKICAqLwogI2RlZmluZSBBVFBfVEhSRVNIT0xECSA1CiAKLS8qIE1hY0Jvb2sgUHJvIChHZXlzZXIgMykgaW5pdGlhbGl6YXRpb24gY29uc3RhbnRzICovCisvKiBNYWNCb29rIFBybyAoR2V5c2VyIDMgJiA0KSBpbml0aWFsaXphdGlvbiBjb25zdGFudHMgKi8KICNkZWZpbmUgQVRQX0dFWVNFUjNfTU9ERV9SRUFEX1JFUVVFU1RfSUQgMQogI2RlZmluZSBBVFBfR0VZU0VSM19NT0RFX1dSSVRFX1JFUVVFU1RfSUQgOQogI2RlZmluZSBBVFBfR0VZU0VSM19NT0RFX1JFUVVFU1RfVkFMVUUgMHgzMDAKQEAgLTE1NCw2ICsxNzUsMTMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQXBwbGUgUG93ZXJCb29rcyBVU0IgdG91Y2hwYWQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKy8qCisgKiBNYWtlIHRoZSB0aHJlc2hvbGQgYSBtb2R1bGUgcGFyYW1ldGVyCisgKi8KK3N0YXRpYyBpbnQgdGhyZXNob2xkID0gQVRQX1RIUkVTSE9MRDsKK21vZHVsZV9wYXJhbSh0aHJlc2hvbGQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHRocmVzaG9sZCwgIkRpc2NhcmRzIGFueSBjaGFuZ2UgaW4gZGF0YSBmcm9tIGEgc2Vuc29yICh0cmFja3BhZCBoYXMgaHVuZHJlZHMgb2YgdGhlc2Ugc2Vuc29ycykgbGVzcyB0aGFuIHRoaXMgdmFsdWUiKTsKKwogc3RhdGljIGludCBkZWJ1ZyA9IDE7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGUgZGVidWdnaW5nIG91dHB1dCIpOwpAQCAtMTc0LDcgKzIwMiwxMCBAQAogCiAJcmV0dXJuIChwcm9kdWN0SWQgPT0gR0VZU0VSM19BTlNJX1BST0RVQ1RfSUQpIHx8CiAJCShwcm9kdWN0SWQgPT0gR0VZU0VSM19JU09fUFJPRFVDVF9JRCkgfHwKLQkJKHByb2R1Y3RJZCA9PSBHRVlTRVIzX0pJU19QUk9EVUNUX0lEKTsKKwkJKHByb2R1Y3RJZCA9PSBHRVlTRVIzX0pJU19QUk9EVUNUX0lEKSB8fAorCQkocHJvZHVjdElkID09IEdFWVNFUjRfQU5TSV9QUk9EVUNUX0lEKSB8fAorCQkocHJvZHVjdElkID09IEdFWVNFUjRfSVNPX1BST0RVQ1RfSUQpIHx8CisJCShwcm9kdWN0SWQgPT0gR0VZU0VSNF9KSVNfUFJPRFVDVF9JRCk7CiB9CiAKIHN0YXRpYyBpbnQgYXRwX2NhbGN1bGF0ZV9hYnMoaW50ICp4eV9zZW5zb3JzLCBpbnQgbmJfc2Vuc29ycywgaW50IGZhY3QsCkBAIC0xODMsMTYgKzIxNCw0OCBAQAogCWludCBpOwogCS8qIHZhbHVlcyB0byBjYWxjdWxhdGUgbWVhbiAqLwogCWludCBwY3VtID0gMCwgcHN1bSA9IDA7CisJaW50IGlzX2luY3JlYXNpbmcgPSAwOwogCiAJKmZpbmdlcnMgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IG5iX3NlbnNvcnM7IGkrKykgewotCQlpZiAoeHlfc2Vuc29yc1tpXSA8IEFUUF9USFJFU0hPTEQpCisJCWlmICh4eV9zZW5zb3JzW2ldIDwgdGhyZXNob2xkKSB7CisJCQlpZiAoaXNfaW5jcmVhc2luZykKKwkJCQlpc19pbmNyZWFzaW5nID0gMDsKKwogCQkJY29udGludWU7Ci0JCWlmICgoaSAtIDEgPCAwKSB8fCAoeHlfc2Vuc29yc1tpIC0gMV0gPCBBVFBfVEhSRVNIT0xEKSkKKwkJfQorCisJCS8qCisJCSAqIE1ha2VzIHRoZSBmaW5nZXIgZGV0ZWN0aW9uIG1vcmUgdmVyc2F0aWxlLiAgRm9yIGV4YW1wbGUsCisJCSAqIHR3byBmaW5nZXJzIHdpdGggbm8gZ2FwIHdpbGwgYmUgZGV0ZWN0ZWQuICBBbHNvLCBteQorCQkgKiB0ZXN0cyBzaG93IGl0IGxlc3MgbGlrZWx5IHRvIGhhdmUgaW50ZXJtaXR0ZW50IGxvc3MKKwkJICogb2YgbXVsdGlwbGUgZmluZ2VyIHJlYWRpbmdzIHdoaWxlIG1vdmluZyBhcm91bmQgKHNjcm9sbGluZykuCisJCSAqCisJCSAqIENoYW5nZXMgdGhlIG11bHRpcGxlIGZpbmdlciBkZXRlY3Rpb24gdG8gY291bnRpbmcgaHVtcHMgb24KKwkJICogc2Vuc29ycyAodHJhbnNpdGlvbnMgZnJvbSBub25pbmNyZWFzaW5nIHRvIGluY3JlYXNpbmcpCisJCSAqIGluc3RlYWQgb2YgY291bnRpbmcgdHJhbnNpdGlvbnMgZnJvbSBsb3cgc2Vuc29ycyAobm8KKwkJICogZmluZ2VyIHJlYWRpbmcpIHRvIGhpZ2ggc2Vuc29ycyAoZmluZ2VyIGFib3ZlCisJCSAqIHNlbnNvcikKKwkJICoKKwkJICogLSBKYXNvbiBQYXJla2ggPGphc29ucGFyZWtoQGdtYWlsLmNvbT4KKwkJICovCisJCWlmIChpIDwgMSB8fCAoIWlzX2luY3JlYXNpbmcgJiYgeHlfc2Vuc29yc1tpIC0gMV0gPCB4eV9zZW5zb3JzW2ldKSkgewogCQkJKCpmaW5nZXJzKSsrOwotCQlwY3VtICs9IHh5X3NlbnNvcnNbaV0gKiBpOwotCQlwc3VtICs9IHh5X3NlbnNvcnNbaV07CisJCQlpc19pbmNyZWFzaW5nID0gMTsKKwkJfSBlbHNlIGlmIChpID4gMCAmJiB4eV9zZW5zb3JzW2kgLSAxXSA+PSB4eV9zZW5zb3JzW2ldKSB7CisJCQlpc19pbmNyZWFzaW5nID0gMDsKKwkJfQorCisJCS8qCisJCSAqIFN1YnRyYWN0cyB0aHJlc2hvbGQgc28gYSBoaWdoIHNlbnNvciB0aGF0IGp1c3QgcGFzc2VzIHRoZSB0aHJlc2hvbGQKKwkJICogd29uJ3Qgc2tldyB0aGUgY2FsY3VsYXRlZCBhYnNvbHV0ZSBjb29yZGluYXRlLiAgRml4ZXMgYW4gaXNzdWUKKwkJICogd2hlcmUgc2xvd2x5IG1vdmluZyB0aGUgbW91c2Ugd291bGQgb2NjYXNzaW9uYWx5IGp1bXAgYSBudW1iZXIgb2YKKwkJICogcGl4ZWxzIChsZXQgbWUgcmVzdGF0ZS0tc2xvd2x5IG1vdmluZyB0aGUgbW91c2UgbWFrZXMgdGhpcyBpc3N1ZQorCQkgKiBtb3N0IGFwcGFyZW50KS4KKwkJICovCisJCXBjdW0gKz0gKHh5X3NlbnNvcnNbaV0gLSB0aHJlc2hvbGQpICogaTsKKwkJcHN1bSArPSAoeHlfc2Vuc29yc1tpXSAtIHRocmVzaG9sZCk7CiAJfQogCiAJaWYgKHBzdW0gPiAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYwppbmRleCBmMWQwZTFkLi5jNmM5ZTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKQEAgLTQsNiArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYgSmlyaSBLb3NpbmEKICAqLwogCiAvKgpAQCAtMzIsOCArMzMsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKLSNpbmNsdWRlICJoaWQuaCIKKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWRkZXYuaD4KKyNpbmNsdWRlICJ1c2JoaWQuaCIKIAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KQEAgLTU1LDg4NyArNTcsNiBAQAogTU9EVUxFX1BBUk1fREVTQyhtb3VzZXBvbGwsICJQb2xsaW5nIGludGVydmFsIG9mIG1pY2UiKTsKIAogLyoKLSAqIFJlZ2lzdGVyIGEgbmV3IHJlcG9ydCBmb3IgYSBkZXZpY2UuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBoaWRfcmVwb3J0ICpoaWRfcmVnaXN0ZXJfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGlkKQotewotCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtID0gZGV2aWNlLT5yZXBvcnRfZW51bSArIHR5cGU7Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKLQotCWlmIChyZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbaWRdKQotCQlyZXR1cm4gcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW2lkXTsKLQotCWlmICghKHJlcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfcmVwb3J0KSwgR0ZQX0tFUk5FTCkpKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChpZCAhPSAwKQotCQlyZXBvcnRfZW51bS0+bnVtYmVyZWQgPSAxOwotCi0JcmVwb3J0LT5pZCA9IGlkOwotCXJlcG9ydC0+dHlwZSA9IHR5cGU7Ci0JcmVwb3J0LT5zaXplID0gMDsKLQlyZXBvcnQtPmRldmljZSA9IGRldmljZTsKLQlyZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbaWRdID0gcmVwb3J0OwotCi0JbGlzdF9hZGRfdGFpbCgmcmVwb3J0LT5saXN0LCAmcmVwb3J0X2VudW0tPnJlcG9ydF9saXN0KTsKLQotCXJldHVybiByZXBvcnQ7Ci19Ci0KLS8qCi0gKiBSZWdpc3RlciBhIG5ldyBmaWVsZCBmb3IgdGhpcyByZXBvcnQuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBoaWRfZmllbGQgKmhpZF9yZWdpc3Rlcl9maWVsZChzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCB1c2FnZXMsIHVuc2lnbmVkIHZhbHVlcykKLXsKLQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKLQotCWlmIChyZXBvcnQtPm1heGZpZWxkID09IEhJRF9NQVhfRklFTERTKSB7Ci0JCWRiZygidG9vIG1hbnkgZmllbGRzIGluIHJlcG9ydCIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoIShmaWVsZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZmllbGQpICsgdXNhZ2VzICogc2l6ZW9mKHN0cnVjdCBoaWRfdXNhZ2UpCi0JCSsgdmFsdWVzICogc2l6ZW9mKHVuc2lnbmVkKSwgR0ZQX0tFUk5FTCkpKSByZXR1cm4gTlVMTDsKLQotCWZpZWxkLT5pbmRleCA9IHJlcG9ydC0+bWF4ZmllbGQrKzsKLQlyZXBvcnQtPmZpZWxkW2ZpZWxkLT5pbmRleF0gPSBmaWVsZDsKLQlmaWVsZC0+dXNhZ2UgPSAoc3RydWN0IGhpZF91c2FnZSAqKShmaWVsZCArIDEpOwotCWZpZWxkLT52YWx1ZSA9ICh1bnNpZ25lZCAqKShmaWVsZC0+dXNhZ2UgKyB1c2FnZXMpOwotCWZpZWxkLT5yZXBvcnQgPSByZXBvcnQ7Ci0KLQlyZXR1cm4gZmllbGQ7Ci19Ci0KLS8qCi0gKiBPcGVuIGEgY29sbGVjdGlvbi4gVGhlIHR5cGUvdXNhZ2UgaXMgcHVzaGVkIG9uIHRoZSBzdGFjay4KLSAqLwotCi1zdGF0aWMgaW50IG9wZW5fY29sbGVjdGlvbihzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCB1bnNpZ25lZCB0eXBlKQotewotCXN0cnVjdCBoaWRfY29sbGVjdGlvbiAqY29sbGVjdGlvbjsKLQl1bnNpZ25lZCB1c2FnZTsKLQotCXVzYWdlID0gcGFyc2VyLT5sb2NhbC51c2FnZVswXTsKLQotCWlmIChwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tfcHRyID09IEhJRF9DT0xMRUNUSU9OX1NUQUNLX1NJWkUpIHsKLQkJZGJnKCJjb2xsZWN0aW9uIHN0YWNrIG92ZXJmbG93Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAocGFyc2VyLT5kZXZpY2UtPm1heGNvbGxlY3Rpb24gPT0gcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb25fc2l6ZSkgewotCQljb2xsZWN0aW9uID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9jb2xsZWN0aW9uKSAqCi0JCQkJcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb25fc2l6ZSAqIDIsIEdGUF9LRVJORUwpOwotCQlpZiAoY29sbGVjdGlvbiA9PSBOVUxMKSB7Ci0JCQlkYmcoImZhaWxlZCB0byByZWFsbG9jYXRlIGNvbGxlY3Rpb24gYXJyYXkiKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQltZW1jcHkoY29sbGVjdGlvbiwgcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb24sCi0JCQlzaXplb2Yoc3RydWN0IGhpZF9jb2xsZWN0aW9uKSAqCi0JCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplKTsKLQkJbWVtc2V0KGNvbGxlY3Rpb24gKyBwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbikgKgotCQkJcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb25fc2l6ZSk7Ci0JCWtmcmVlKHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uKTsKLQkJcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uOwotCQlwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbl9zaXplICo9IDI7Ci0JfQotCi0JcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrW3BhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIrK10gPQotCQlwYXJzZXItPmRldmljZS0+bWF4Y29sbGVjdGlvbjsKLQotCWNvbGxlY3Rpb24gPSBwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbiArCi0JCXBhcnNlci0+ZGV2aWNlLT5tYXhjb2xsZWN0aW9uKys7Ci0JY29sbGVjdGlvbi0+dHlwZSA9IHR5cGU7Ci0JY29sbGVjdGlvbi0+dXNhZ2UgPSB1c2FnZTsKLQljb2xsZWN0aW9uLT5sZXZlbCA9IHBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgLSAxOwotCi0JaWYgKHR5cGUgPT0gSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04pCi0JCXBhcnNlci0+ZGV2aWNlLT5tYXhhcHBsaWNhdGlvbisrOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDbG9zZSBhIGNvbGxlY3Rpb24uCi0gKi8KLQotc3RhdGljIGludCBjbG9zZV9jb2xsZWN0aW9uKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIpCi17Ci0JaWYgKCFwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tfcHRyKSB7Ci0JCWRiZygiY29sbGVjdGlvbiBzdGFjayB1bmRlcmZsb3ciKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tfcHRyLS07Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDbGltYiB1cCB0aGUgc3RhY2ssIHNlYXJjaCBmb3IgdGhlIHNwZWNpZmllZCBjb2xsZWN0aW9uIHR5cGUKLSAqIGFuZCByZXR1cm4gdGhlIHVzYWdlLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBoaWRfbG9va3VwX2NvbGxlY3Rpb24oc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgdW5zaWduZWQgdHlwZSkKLXsKLQlpbnQgbjsKLQlmb3IgKG4gPSBwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tfcHRyIC0gMTsgbiA+PSAwOyBuLS0pCi0JCWlmIChwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbltwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tbbl1dLnR5cGUgPT0gdHlwZSkKLQkJCXJldHVybiBwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbltwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tbbl1dLnVzYWdlOwotCXJldHVybiAwOyAvKiB3ZSBrbm93IG5vdGhpbmcgYWJvdXQgdGhpcyB1c2FnZSB0eXBlICovCi19Ci0KLS8qCi0gKiBBZGQgYSB1c2FnZSB0byB0aGUgdGVtcG9yYXJ5IHBhcnNlciB0YWJsZS4KLSAqLwotCi1zdGF0aWMgaW50IGhpZF9hZGRfdXNhZ2Uoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgdW5zaWduZWQgdXNhZ2UpCi17Ci0JaWYgKHBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXggPj0gSElEX01BWF9VU0FHRVMpIHsKLQkJZGJnKCJ1c2FnZSBpbmRleCBleGNlZWRlZCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXBhcnNlci0+bG9jYWwudXNhZ2VbcGFyc2VyLT5sb2NhbC51c2FnZV9pbmRleF0gPSB1c2FnZTsKLQlwYXJzZXItPmxvY2FsLmNvbGxlY3Rpb25faW5kZXhbcGFyc2VyLT5sb2NhbC51c2FnZV9pbmRleF0gPQotCQlwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tfcHRyID8KLQkJcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrW3BhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIgLSAxXSA6IDA7Ci0JcGFyc2VyLT5sb2NhbC51c2FnZV9pbmRleCsrOwotCXJldHVybiAwOwotfQotCi0vKgotICogUmVnaXN0ZXIgYSBuZXcgZmllbGQgZm9yIHRoaXMgcmVwb3J0LgotICovCi0KLXN0YXRpYyBpbnQgaGlkX2FkZF9maWVsZChzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCB1bnNpZ25lZCByZXBvcnRfdHlwZSwgdW5zaWduZWQgZmxhZ3MpCi17Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKLQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKLQlpbnQgdXNhZ2VzOwotCXVuc2lnbmVkIG9mZnNldDsKLQlpbnQgaTsKLQotCWlmICghKHJlcG9ydCA9IGhpZF9yZWdpc3Rlcl9yZXBvcnQocGFyc2VyLT5kZXZpY2UsIHJlcG9ydF90eXBlLCBwYXJzZXItPmdsb2JhbC5yZXBvcnRfaWQpKSkgewotCQlkYmcoImhpZF9yZWdpc3Rlcl9yZXBvcnQgZmFpbGVkIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAocGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtIDwgcGFyc2VyLT5nbG9iYWwubG9naWNhbF9taW5pbXVtKSB7Ci0JCWRiZygibG9naWNhbCByYW5nZSBpbnZhbGlkICVkICVkIiwgcGFyc2VyLT5nbG9iYWwubG9naWNhbF9taW5pbXVtLCBwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21heGltdW0pOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jb2Zmc2V0ID0gcmVwb3J0LT5zaXplOwotCXJlcG9ydC0+c2l6ZSArPSBwYXJzZXItPmdsb2JhbC5yZXBvcnRfc2l6ZSAqIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudDsKLQotCWlmICghcGFyc2VyLT5sb2NhbC51c2FnZV9pbmRleCkgLyogSWdub3JlIHBhZGRpbmcgZmllbGRzICovCi0JCXJldHVybiAwOwotCi0JdXNhZ2VzID0gbWF4X3QoaW50LCBwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4LCBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQpOwotCi0JaWYgKChmaWVsZCA9IGhpZF9yZWdpc3Rlcl9maWVsZChyZXBvcnQsIHVzYWdlcywgcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50KSkgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlmaWVsZC0+cGh5c2ljYWwgPSBoaWRfbG9va3VwX2NvbGxlY3Rpb24ocGFyc2VyLCBISURfQ09MTEVDVElPTl9QSFlTSUNBTCk7Ci0JZmllbGQtPmxvZ2ljYWwgPSBoaWRfbG9va3VwX2NvbGxlY3Rpb24ocGFyc2VyLCBISURfQ09MTEVDVElPTl9MT0dJQ0FMKTsKLQlmaWVsZC0+YXBwbGljYXRpb24gPSBoaWRfbG9va3VwX2NvbGxlY3Rpb24ocGFyc2VyLCBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdXNhZ2VzOyBpKyspIHsKLQkJaW50IGogPSBpOwotCQkvKiBEdXBsaWNhdGUgdGhlIGxhc3QgdXNhZ2Ugd2UgcGFyc2VkIGlmIHdlIGhhdmUgZXhjZXNzIHZhbHVlcyAqLwotCQlpZiAoaSA+PSBwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4KQotCQkJaiA9IHBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXggLSAxOwotCQlmaWVsZC0+dXNhZ2VbaV0uaGlkID0gcGFyc2VyLT5sb2NhbC51c2FnZVtqXTsKLQkJZmllbGQtPnVzYWdlW2ldLmNvbGxlY3Rpb25faW5kZXggPQotCQkJcGFyc2VyLT5sb2NhbC5jb2xsZWN0aW9uX2luZGV4W2pdOwotCX0KLQotCWZpZWxkLT5tYXh1c2FnZSA9IHVzYWdlczsKLQlmaWVsZC0+ZmxhZ3MgPSBmbGFnczsKLQlmaWVsZC0+cmVwb3J0X29mZnNldCA9IG9mZnNldDsKLQlmaWVsZC0+cmVwb3J0X3R5cGUgPSByZXBvcnRfdHlwZTsKLQlmaWVsZC0+cmVwb3J0X3NpemUgPSBwYXJzZXItPmdsb2JhbC5yZXBvcnRfc2l6ZTsKLQlmaWVsZC0+cmVwb3J0X2NvdW50ID0gcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50OwotCWZpZWxkLT5sb2dpY2FsX21pbmltdW0gPSBwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW07Ci0JZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9IHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWF4aW11bTsKLQlmaWVsZC0+cGh5c2ljYWxfbWluaW11bSA9IHBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21pbmltdW07Ci0JZmllbGQtPnBoeXNpY2FsX21heGltdW0gPSBwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9tYXhpbXVtOwotCWZpZWxkLT51bml0X2V4cG9uZW50ID0gcGFyc2VyLT5nbG9iYWwudW5pdF9leHBvbmVudDsKLQlmaWVsZC0+dW5pdCA9IHBhcnNlci0+Z2xvYmFsLnVuaXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlYWQgZGF0YSB2YWx1ZSBmcm9tIGl0ZW0uCi0gKi8KLQotc3RhdGljIHUzMiBpdGVtX3VkYXRhKHN0cnVjdCBoaWRfaXRlbSAqaXRlbSkKLXsKLQlzd2l0Y2ggKGl0ZW0tPnNpemUpIHsKLQkJY2FzZSAxOiByZXR1cm4gaXRlbS0+ZGF0YS51ODsKLQkJY2FzZSAyOiByZXR1cm4gaXRlbS0+ZGF0YS51MTY7Ci0JCWNhc2UgNDogcmV0dXJuIGl0ZW0tPmRhdGEudTMyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHMzMiBpdGVtX3NkYXRhKHN0cnVjdCBoaWRfaXRlbSAqaXRlbSkKLXsKLQlzd2l0Y2ggKGl0ZW0tPnNpemUpIHsKLQkJY2FzZSAxOiByZXR1cm4gaXRlbS0+ZGF0YS5zODsKLQkJY2FzZSAyOiByZXR1cm4gaXRlbS0+ZGF0YS5zMTY7Ci0JCWNhc2UgNDogcmV0dXJuIGl0ZW0tPmRhdGEuczMyOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFByb2Nlc3MgYSBnbG9iYWwgaXRlbS4KLSAqLwotCi1zdGF0aWMgaW50IGhpZF9wYXJzZXJfZ2xvYmFsKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHN0cnVjdCBoaWRfaXRlbSAqaXRlbSkKLXsKLQlzd2l0Y2ggKGl0ZW0tPnRhZykgewotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QVVNIOgotCi0JCQlpZiAocGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyID09IEhJRF9HTE9CQUxfU1RBQ0tfU0laRSkgewotCQkJCWRiZygiZ2xvYmFsIGVudmlyb21lbnQgc3RhY2sgb3ZlcmZsb3ciKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0KLQkJCW1lbWNweShwYXJzZXItPmdsb2JhbF9zdGFjayArIHBhcnNlci0+Z2xvYmFsX3N0YWNrX3B0cisrLAotCQkJCSZwYXJzZXItPmdsb2JhbCwgc2l6ZW9mKHN0cnVjdCBoaWRfZ2xvYmFsKSk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUE9QOgotCi0JCQlpZiAoIXBhcnNlci0+Z2xvYmFsX3N0YWNrX3B0cikgewotCQkJCWRiZygiZ2xvYmFsIGVudmlyb21lbnQgc3RhY2sgdW5kZXJmbG93Iik7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCi0JCQltZW1jcHkoJnBhcnNlci0+Z2xvYmFsLCBwYXJzZXItPmdsb2JhbF9zdGFjayArIC0tcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyLAotCQkJCXNpemVvZihzdHJ1Y3QgaGlkX2dsb2JhbCkpOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1VTQUdFX1BBR0U6Ci0JCQlwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlID0gaXRlbV91ZGF0YShpdGVtKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19MT0dJQ0FMX01JTklNVU06Ci0JCQlwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX0xPR0lDQUxfTUFYSU1VTToKLQkJCWlmIChwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0gPCAwKQotCQkJCXBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWF4aW11bSA9IGl0ZW1fc2RhdGEoaXRlbSk7Ci0JCQllbHNlCi0JCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtID0gaXRlbV91ZGF0YShpdGVtKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QSFlTSUNBTF9NSU5JTVVNOgotCQkJcGFyc2VyLT5nbG9iYWwucGh5c2ljYWxfbWluaW11bSA9IGl0ZW1fc2RhdGEoaXRlbSk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUEhZU0lDQUxfTUFYSU1VTToKLQkJCWlmIChwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9taW5pbXVtIDwgMCkKLQkJCQlwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9tYXhpbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKLQkJCWVsc2UKLQkJCQlwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9tYXhpbXVtID0gaXRlbV91ZGF0YShpdGVtKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19VTklUX0VYUE9ORU5UOgotCQkJcGFyc2VyLT5nbG9iYWwudW5pdF9leHBvbmVudCA9IGl0ZW1fc2RhdGEoaXRlbSk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfVU5JVDoKLQkJCXBhcnNlci0+Z2xvYmFsLnVuaXQgPSBpdGVtX3VkYXRhKGl0ZW0pOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9TSVpFOgotCQkJaWYgKChwYXJzZXItPmdsb2JhbC5yZXBvcnRfc2l6ZSA9IGl0ZW1fdWRhdGEoaXRlbSkpID4gMzIpIHsKLQkJCQlkYmcoImludmFsaWQgcmVwb3J0X3NpemUgJWQiLCBwYXJzZXItPmdsb2JhbC5yZXBvcnRfc2l6ZSk7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9DT1VOVDoKLQkJCWlmICgocGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50ID0gaXRlbV91ZGF0YShpdGVtKSkgPiBISURfTUFYX1VTQUdFUykgewotCQkJCWRiZygiaW52YWxpZCByZXBvcnRfY291bnQgJWQiLCBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19SRVBPUlRfSUQ6Ci0JCQlpZiAoKHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9pZCA9IGl0ZW1fdWRhdGEoaXRlbSkpID09IDApIHsKLQkJCQlkYmcoInJlcG9ydF9pZCAwIGlzIGludmFsaWQiKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQotCQlkZWZhdWx0OgotCQkJZGJnKCJ1bmtub3duIGdsb2JhbCB0YWcgMHgleCIsIGl0ZW0tPnRhZyk7Ci0JCQlyZXR1cm4gLTE7Ci0JfQotfQotCi0vKgotICogUHJvY2VzcyBhIGxvY2FsIGl0ZW0uCi0gKi8KLQotc3RhdGljIGludCBoaWRfcGFyc2VyX2xvY2FsKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHN0cnVjdCBoaWRfaXRlbSAqaXRlbSkKLXsKLQlfX3UzMiBkYXRhOwotCXVuc2lnbmVkIG47Ci0KLQlpZiAoaXRlbS0+c2l6ZSA9PSAwKSB7Ci0JCWRiZygiaXRlbSBkYXRhIGV4cGVjdGVkIGZvciBsb2NhbCBpdGVtIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlkYXRhID0gaXRlbV91ZGF0YShpdGVtKTsKLQotCXN3aXRjaCAoaXRlbS0+dGFnKSB7Ci0KLQkJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfREVMSU1JVEVSOgotCi0JCQlpZiAoZGF0YSkgewotCQkJCS8qCi0JCQkJICogV2UgdHJlYXQgaXRlbXMgYmVmb3JlIHRoZSBmaXJzdCBkZWxpbWl0ZXIKLQkJCQkgKiBhcyBnbG9iYWwgdG8gYWxsIHVzYWdlIHNldHMgKGJyYW5jaCAwKS4KLQkJCQkgKiBJbiB0aGUgbW9tZW50IHdlIHByb2Nlc3Mgb25seSB0aGVzZSBnbG9iYWwKLQkJCQkgKiBpdGVtcyBhbmQgdGhlIGZpcnN0IGRlbGltaXRlciBzZXQuCi0JCQkJICovCi0JCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoICE9IDApIHsKLQkJCQkJZGJnKCJuZXN0ZWQgZGVsaW1pdGVycyIpOwotCQkJCQlyZXR1cm4gLTE7Ci0JCQkJfQotCQkJCXBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoKys7Ci0JCQkJcGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoKys7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCA8IDEpIHsKLQkJCQkJZGJnKCJib2d1cyBjbG9zZSBkZWxpbWl0ZXIiKTsKLQkJCQkJcmV0dXJuIC0xOwotCQkJCX0KLQkJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aC0tOwotCQkJfQotCQkJcmV0dXJuIDE7Ci0KLQkJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0U6Ci0KLQkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2ggPiAxKSB7Ci0JCQkJZGJnKCJhbHRlcm5hdGl2ZSB1c2FnZSBpZ25vcmVkIik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0KLQkJCWlmIChpdGVtLT5zaXplIDw9IDIpCi0JCQkJZGF0YSA9IChwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlIDw8IDE2KSArIGRhdGE7Ci0KLQkJCXJldHVybiBoaWRfYWRkX3VzYWdlKHBhcnNlciwgZGF0YSk7Ci0KLQkJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0VfTUlOSU1VTToKLQotCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCA+IDEpIHsKLQkJCQlkYmcoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWQiKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQotCQkJaWYgKGl0ZW0tPnNpemUgPD0gMikKLQkJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKLQotCQkJcGFyc2VyLT5sb2NhbC51c2FnZV9taW5pbXVtID0gZGF0YTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFX01BWElNVU06Ci0KLQkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2ggPiAxKSB7Ci0JCQkJZGJnKCJhbHRlcm5hdGl2ZSB1c2FnZSBpZ25vcmVkIik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0KLQkJCWlmIChpdGVtLT5zaXplIDw9IDIpCi0JCQkJZGF0YSA9IChwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlIDw8IDE2KSArIGRhdGE7Ci0KLQkJCWZvciAobiA9IHBhcnNlci0+bG9jYWwudXNhZ2VfbWluaW11bTsgbiA8PSBkYXRhOyBuKyspCi0JCQkJaWYgKGhpZF9hZGRfdXNhZ2UocGFyc2VyLCBuKSkgewotCQkJCQlkYmcoImhpZF9hZGRfdXNhZ2UgZmFpbGVkXG4iKTsKLQkJCQkJcmV0dXJuIC0xOwotCQkJCX0KLQkJCXJldHVybiAwOwotCi0JCWRlZmF1bHQ6Ci0KLQkJCWRiZygidW5rbm93biBsb2NhbCBpdGVtIHRhZyAweCV4IiwgaXRlbS0+dGFnKTsKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFByb2Nlc3MgYSBtYWluIGl0ZW0uCi0gKi8KLQotc3RhdGljIGludCBoaWRfcGFyc2VyX21haW4oc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQotewotCV9fdTMyIGRhdGE7Ci0JaW50IHJldDsKLQotCWRhdGEgPSBpdGVtX3VkYXRhKGl0ZW0pOwotCi0Jc3dpdGNoIChpdGVtLT50YWcpIHsKLQkJY2FzZSBISURfTUFJTl9JVEVNX1RBR19CRUdJTl9DT0xMRUNUSU9OOgotCQkJcmV0ID0gb3Blbl9jb2xsZWN0aW9uKHBhcnNlciwgZGF0YSAmIDB4ZmYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfRU5EX0NPTExFQ1RJT046Ci0JCQlyZXQgPSBjbG9zZV9jb2xsZWN0aW9uKHBhcnNlcik7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfTUFJTl9JVEVNX1RBR19JTlBVVDoKLQkJCXJldCA9IGhpZF9hZGRfZmllbGQocGFyc2VyLCBISURfSU5QVVRfUkVQT1JULCBkYXRhKTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX09VVFBVVDoKLQkJCXJldCA9IGhpZF9hZGRfZmllbGQocGFyc2VyLCBISURfT1VUUFVUX1JFUE9SVCwgZGF0YSk7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfTUFJTl9JVEVNX1RBR19GRUFUVVJFOgotCQkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9GRUFUVVJFX1JFUE9SVCwgZGF0YSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRiZygidW5rbm93biBtYWluIGl0ZW0gdGFnIDB4JXgiLCBpdGVtLT50YWcpOwotCQkJcmV0ID0gMDsKLQl9Ci0KLQltZW1zZXQoJnBhcnNlci0+bG9jYWwsIDAsIHNpemVvZihwYXJzZXItPmxvY2FsKSk7CS8qIFJlc2V0IHRoZSBsb2NhbCBwYXJzZXIgZW52aXJvbm1lbnQgKi8KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBQcm9jZXNzIGEgcmVzZXJ2ZWQgaXRlbS4KLSAqLwotCi1zdGF0aWMgaW50IGhpZF9wYXJzZXJfcmVzZXJ2ZWQoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQotewotCWRiZygicmVzZXJ2ZWQgaXRlbSB0eXBlLCB0YWcgMHgleCIsIGl0ZW0tPnRhZyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBGcmVlIGEgcmVwb3J0IGFuZCBhbGwgcmVnaXN0ZXJlZCBmaWVsZHMuIFRoZSBmaWVsZC0+dXNhZ2UgYW5kCi0gKiBmaWVsZC0+dmFsdWUgdGFibGUncyBhcmUgYWxsb2NhdGVkIGJlaGluZCB0aGUgZmllbGQsIHNvIHdlIG5lZWQKLSAqIG9ubHkgdG8gZnJlZShmaWVsZCkgaXRzZWxmLgotICovCi0KLXN0YXRpYyB2b2lkIGhpZF9mcmVlX3JlcG9ydChzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0KQotewotCXVuc2lnbmVkIG47Ci0KLQlmb3IgKG4gPSAwOyBuIDwgcmVwb3J0LT5tYXhmaWVsZDsgbisrKQotCQlrZnJlZShyZXBvcnQtPmZpZWxkW25dKTsKLQlrZnJlZShyZXBvcnQpOwotfQotCi0vKgotICogRnJlZSBhIGRldmljZSBzdHJ1Y3R1cmUsIGFsbCByZXBvcnRzLCBhbmQgYWxsIGZpZWxkcy4KLSAqLwotCi1zdGF0aWMgdm9pZCBoaWRfZnJlZV9kZXZpY2Uoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSkKLXsKLQl1bnNpZ25lZCBpLGo7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKSB7Ci0JCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtID0gZGV2aWNlLT5yZXBvcnRfZW51bSArIGk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IDI1NjsgaisrKSB7Ci0JCQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0ID0gcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW2pdOwotCQkJaWYgKHJlcG9ydCkKLQkJCQloaWRfZnJlZV9yZXBvcnQocmVwb3J0KTsKLQkJfQotCX0KLQotCWtmcmVlKGRldmljZS0+cmRlc2MpOwotCWtmcmVlKGRldmljZSk7Ci19Ci0KLS8qCi0gKiBGZXRjaCBhIHJlcG9ydCBkZXNjcmlwdGlvbiBpdGVtIGZyb20gdGhlIGRhdGEgc3RyZWFtLiBXZSBzdXBwb3J0IGxvbmcKLSAqIGl0ZW1zLCB0aG91Z2ggdGhleSBhcmUgbm90IHVzZWQgeWV0LgotICovCi0KLXN0YXRpYyB1OCAqZmV0Y2hfaXRlbShfX3U4ICpzdGFydCwgX191OCAqZW5kLCBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCi17Ci0JdTggYjsKLQotCWlmICgoZW5kIC0gc3RhcnQpIDw9IDApCi0JCXJldHVybiBOVUxMOwotCi0JYiA9ICpzdGFydCsrOwotCi0JaXRlbS0+dHlwZSA9IChiID4+IDIpICYgMzsKLQlpdGVtLT50YWcgID0gKGIgPj4gNCkgJiAxNTsKLQotCWlmIChpdGVtLT50YWcgPT0gSElEX0lURU1fVEFHX0xPTkcpIHsKLQotCQlpdGVtLT5mb3JtYXQgPSBISURfSVRFTV9GT1JNQVRfTE9ORzsKLQotCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IDIpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlpdGVtLT5zaXplID0gKnN0YXJ0Kys7Ci0JCWl0ZW0tPnRhZyAgPSAqc3RhcnQrKzsKLQotCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IGl0ZW0tPnNpemUpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlpdGVtLT5kYXRhLmxvbmdkYXRhID0gc3RhcnQ7Ci0JCXN0YXJ0ICs9IGl0ZW0tPnNpemU7Ci0JCXJldHVybiBzdGFydDsKLQl9Ci0KLQlpdGVtLT5mb3JtYXQgPSBISURfSVRFTV9GT1JNQVRfU0hPUlQ7Ci0JaXRlbS0+c2l6ZSA9IGIgJiAzOwotCi0Jc3dpdGNoIChpdGVtLT5zaXplKSB7Ci0KLQkJY2FzZSAwOgotCQkJcmV0dXJuIHN0YXJ0OwotCi0JCWNhc2UgMToKLQkJCWlmICgoZW5kIC0gc3RhcnQpIDwgMSkKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCWl0ZW0tPmRhdGEudTggPSAqc3RhcnQrKzsKLQkJCXJldHVybiBzdGFydDsKLQotCQljYXNlIDI6Ci0JCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IDIpCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQlpdGVtLT5kYXRhLnUxNiA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiopc3RhcnQpKTsKLQkJCXN0YXJ0ID0gKF9fdTggKikoKF9fbGUxNiAqKXN0YXJ0ICsgMSk7Ci0JCQlyZXR1cm4gc3RhcnQ7Ci0KLQkJY2FzZSAzOgotCQkJaXRlbS0+c2l6ZSsrOwotCQkJaWYgKChlbmQgLSBzdGFydCkgPCA0KQotCQkJCXJldHVybiBOVUxMOwotCQkJaXRlbS0+ZGF0YS51MzIgPSBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMzIqKXN0YXJ0KSk7Ci0JCQlzdGFydCA9IChfX3U4ICopKChfX2xlMzIgKilzdGFydCArIDEpOwotCQkJcmV0dXJuIHN0YXJ0OwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi0vKgotICogUGFyc2UgYSByZXBvcnQgZGVzY3JpcHRpb24gaW50byBhIGhpZF9kZXZpY2Ugc3RydWN0dXJlLiBSZXBvcnRzIGFyZQotICogZW51bWVyYXRlZCwgZmllbGRzIGFyZSBhdHRhY2hlZCB0byB0aGVzZSByZXBvcnRzLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkX3BhcnNlX3JlcG9ydChfX3U4ICpzdGFydCwgdW5zaWduZWQgc2l6ZSkKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlOwotCXN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXI7Ci0Jc3RydWN0IGhpZF9pdGVtIGl0ZW07Ci0JX191OCAqZW5kOwotCXVuc2lnbmVkIGk7Ci0Jc3RhdGljIGludCAoKmRpc3BhdGNoX3R5cGVbXSkoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwKLQkJCQkgICAgICBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pID0gewotCQloaWRfcGFyc2VyX21haW4sCi0JCWhpZF9wYXJzZXJfZ2xvYmFsLAotCQloaWRfcGFyc2VyX2xvY2FsLAotCQloaWRfcGFyc2VyX3Jlc2VydmVkCi0JfTsKLQotCWlmICghKGRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghKGRldmljZS0+Y29sbGVjdGlvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbikgKgotCQkJCSAgIEhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUywgR0ZQX0tFUk5FTCkpKSB7Ci0JCWtmcmVlKGRldmljZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlkZXZpY2UtPmNvbGxlY3Rpb25fc2l6ZSA9IEhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUzsKLQotCWZvciAoaSA9IDA7IGkgPCBISURfUkVQT1JUX1RZUEVTOyBpKyspCi0JCUlOSVRfTElTVF9IRUFEKCZkZXZpY2UtPnJlcG9ydF9lbnVtW2ldLnJlcG9ydF9saXN0KTsKLQotCWlmICghKGRldmljZS0+cmRlc2MgPSAoX191OCAqKWttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7Ci0JCWtmcmVlKGRldmljZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQltZW1jcHkoZGV2aWNlLT5yZGVzYywgc3RhcnQsIHNpemUpOwotCWRldmljZS0+cnNpemUgPSBzaXplOwotCi0JaWYgKCEocGFyc2VyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9wYXJzZXIpLCBHRlBfS0VSTkVMKSkpIHsKLQkJa2ZyZWUoZGV2aWNlLT5yZGVzYyk7Ci0JCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7Ci0JCWtmcmVlKGRldmljZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlwYXJzZXItPmRldmljZSA9IGRldmljZTsKLQotCWVuZCA9IHN0YXJ0ICsgc2l6ZTsKLQl3aGlsZSAoKHN0YXJ0ID0gZmV0Y2hfaXRlbShzdGFydCwgZW5kLCAmaXRlbSkpICE9IE5VTEwpIHsKLQotCQlpZiAoaXRlbS5mb3JtYXQgIT0gSElEX0lURU1fRk9STUFUX1NIT1JUKSB7Ci0JCQlkYmcoInVuZXhwZWN0ZWQgbG9uZyBnbG9iYWwgaXRlbSIpOwotCQkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKLQkJCWhpZF9mcmVlX2RldmljZShkZXZpY2UpOwotCQkJa2ZyZWUocGFyc2VyKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0KLQkJaWYgKGRpc3BhdGNoX3R5cGVbaXRlbS50eXBlXShwYXJzZXIsICZpdGVtKSkgewotCQkJZGJnKCJpdGVtICV1ICV1ICV1ICV1IHBhcnNpbmcgZmFpbGVkXG4iLAotCQkJCWl0ZW0uZm9ybWF0LCAodW5zaWduZWQpaXRlbS5zaXplLCAodW5zaWduZWQpaXRlbS50eXBlLCAodW5zaWduZWQpaXRlbS50YWcpOwotCQkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKLQkJCWhpZF9mcmVlX2RldmljZShkZXZpY2UpOwotCQkJa2ZyZWUocGFyc2VyKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0KLQkJaWYgKHN0YXJ0ID09IGVuZCkgewotCQkJaWYgKHBhcnNlci0+Y29sbGVjdGlvbl9zdGFja19wdHIpIHsKLQkJCQlkYmcoInVuYmFsYW5jZWQgY29sbGVjdGlvbiBhdCBlbmQgb2YgcmVwb3J0IGRlc2NyaXB0aW9uIik7Ci0JCQkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKLQkJCQloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKLQkJCQlrZnJlZShwYXJzZXIpOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoKSB7Ci0JCQkJZGJnKCJ1bmJhbGFuY2VkIGRlbGltaXRlciBhdCBlbmQgb2YgcmVwb3J0IGRlc2NyaXB0aW9uIik7Ci0JCQkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKLQkJCQloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKLQkJCQlrZnJlZShwYXJzZXIpOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJa2ZyZWUocGFyc2VyKTsKLQkJCXJldHVybiBkZXZpY2U7Ci0JCX0KLQl9Ci0KLQlkYmcoIml0ZW0gZmV0Y2hpbmcgZmFpbGVkIGF0IG9mZnNldCAlZFxuIiwgKGludCkoZW5kIC0gc3RhcnQpKTsKLQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOwotCWhpZF9mcmVlX2RldmljZShkZXZpY2UpOwotCWtmcmVlKHBhcnNlcik7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBDb252ZXJ0IGEgc2lnbmVkIG4tYml0IGludGVnZXIgdG8gc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLiBDb21tb24KLSAqIGNhc2VzIGFyZSBkb25lIHRocm91Z2ggdGhlIGNvbXBpbGVyLCB0aGUgc2NyZXdlZCB0aGluZ3MgaGFzIHRvIGJlCi0gKiBkb25lIGJ5IGhhbmQuCi0gKi8KLQotc3RhdGljIHMzMiBzbnRvMzIoX191MzIgdmFsdWUsIHVuc2lnbmVkIG4pCi17Ci0Jc3dpdGNoIChuKSB7Ci0JCWNhc2UgODogIHJldHVybiAoKF9fczgpdmFsdWUpOwotCQljYXNlIDE2OiByZXR1cm4gKChfX3MxNil2YWx1ZSk7Ci0JCWNhc2UgMzI6IHJldHVybiAoKF9fczMyKXZhbHVlKTsKLQl9Ci0JcmV0dXJuIHZhbHVlICYgKDEgPDwgKG4gLSAxKSkgPyB2YWx1ZSB8ICgtMSA8PCBuKSA6IHZhbHVlOwotfQotCi0vKgotICogQ29udmVydCBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciB0byBhIHNpZ25lZCBuLWJpdCBpbnRlZ2VyLgotICovCi0KLXN0YXRpYyB1MzIgczMydG9uKF9fczMyIHZhbHVlLCB1bnNpZ25lZCBuKQotewotCXMzMiBhID0gdmFsdWUgPj4gKG4gLSAxKTsKLQlpZiAoYSAmJiBhICE9IC0xKQotCQlyZXR1cm4gdmFsdWUgPCAwID8gMSA8PCAobiAtIDEpIDogKDEgPDwgKG4gLSAxKSkgLSAxOwotCXJldHVybiB2YWx1ZSAmICgoMSA8PCBuKSAtIDEpOwotfQotCi0vKgotICogRXh0cmFjdC9pbXBsZW1lbnQgYSBkYXRhIGZpZWxkIGZyb20vdG8gYSBsaXR0bGUgZW5kaWFuIHJlcG9ydCAoYml0IGFycmF5KS4KLSAqCi0gKiBDb2RlIHNvcnQtb2YgZm9sbG93cyBISUQgc3BlYzoKLSAqICAgICBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kZXZjbGFzc19kb2NzL0hJRDFfMTEucGRmCi0gKgotICogV2hpbGUgdGhlIFVTQiBISUQgc3BlYyBhbGxvd3MgdW5saW1pdGVkIGxlbmd0aCBiaXQgZmllbGRzIGluICJyZXBvcnQKLSAqIGRlc2NyaXB0b3JzIiwgbW9zdCBkZXZpY2VzIG5ldmVyIHVzZSBtb3JlIHRoYW4gMTYgYml0cy4KLSAqIE9uZSBtb2RlbCBvZiBVUFMgaXMgY2xhaW1lZCB0byByZXBvcnQgIkxJTkVWIiBhcyBhIDMyLWJpdCBmaWVsZC4KLSAqIFNlYXJjaCBsaW51eC1rZXJuZWwgYW5kIGxpbnV4LXVzYi1kZXZlbCBhcmNoaXZlcyBmb3IgImhpZC1jb3JlIGV4dHJhY3QiLgotICovCi0KLXN0YXRpYyBfX2lubGluZV9fIF9fdTMyIGV4dHJhY3QoX191OCAqcmVwb3J0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG4pCi17Ci0JdTY0IHg7Ci0KLQlXQVJOX09OKG4gPiAzMik7Ci0KLQlyZXBvcnQgKz0gb2Zmc2V0ID4+IDM7ICAvKiBhZGp1c3QgYnl0ZSBpbmRleCAqLwotCW9mZnNldCAmPSA3OwkJLyogbm93IG9ubHkgbmVlZCBiaXQgb2Zmc2V0IGludG8gb25lIGJ5dGUgKi8KLQl4ID0gZ2V0X3VuYWxpZ25lZCgodTY0ICopIHJlcG9ydCk7Ci0JeCA9IGxlNjRfdG9fY3B1KHgpOwotCXggPSAoeCA+PiBvZmZzZXQpICYgKCgxVUxMIDw8IG4pIC0gMSk7CS8qIGV4dHJhY3QgYml0IGZpZWxkICovCi0JcmV0dXJuICh1MzIpIHg7Ci19Ci0KLS8qCi0gKiAiaW1wbGVtZW50IiA6IHNldCBiaXRzIGluIGEgbGl0dGxlIGVuZGlhbiBiaXQgc3RyZWFtLgotICogU2FtZSBjb25jZXB0cyBhcyAiZXh0cmFjdCIgKHNlZSBjb21tZW50cyBhYm92ZSkuCi0gKiBUaGUgZGF0YSBtYW5nbGVkIGluIHRoZSBiaXQgc3RyZWFtIHJlbWFpbnMgaW4gbGl0dGxlIGVuZGlhbgotICogb3JkZXIgdGhlIHdob2xlIHRpbWUuIEl0IG1ha2UgbW9yZSBzZW5zZSB0byB0YWxrIGFib3V0Ci0gKiBlbmRpYW5uZXNzIG9mIHJlZ2lzdGVyIHZhbHVlcyBieSBjb25zaWRlcmluZyBhIHJlZ2lzdGVyCi0gKiBhICJjYWNoZWQiIGNvcHkgb2YgdGhlIGxpdHRsZSBlbmRpYWQgYml0IHN0cmVhbS4KLSAqLwotc3RhdGljIF9faW5saW5lX18gdm9pZCBpbXBsZW1lbnQoX191OCAqcmVwb3J0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG4sIF9fdTMyIHZhbHVlKQotewotCXU2NCB4OwotCXU2NCBtID0gKDFVTEwgPDwgbikgLSAxOwotCi0JV0FSTl9PTihuID4gMzIpOwotCi0JV0FSTl9PTih2YWx1ZSA+IG0pOwotCXZhbHVlICY9IG07Ci0KLQlyZXBvcnQgKz0gb2Zmc2V0ID4+IDM7Ci0Jb2Zmc2V0ICY9IDc7Ci0KLQl4ID0gZ2V0X3VuYWxpZ25lZCgodTY0ICopcmVwb3J0KTsKLQl4ICY9IGNwdV90b19sZTY0KH4obSA8PCBvZmZzZXQpKTsKLQl4IHw9IGNwdV90b19sZTY0KCgodTY0KSB2YWx1ZSkgPDwgb2Zmc2V0KTsKLQlwdXRfdW5hbGlnbmVkKHgsICh1NjQgKikgcmVwb3J0KTsKLX0KLQotLyoKLSAqIFNlYXJjaCBhbiBhcnJheSBmb3IgYSB2YWx1ZS4KLSAqLwotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgc2VhcmNoKF9fczMyICphcnJheSwgX19zMzIgdmFsdWUsIHVuc2lnbmVkIG4pCi17Ci0Jd2hpbGUgKG4tLSkgewotCQlpZiAoKmFycmF5KysgPT0gdmFsdWUpCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgdm9pZCBoaWRfcHJvY2Vzc19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlLCBpbnQgaW50ZXJydXB0KQotewotCWhpZF9kdW1wX2lucHV0KHVzYWdlLCB2YWx1ZSk7Ci0JaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQotCQloaWRpbnB1dF9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKLQlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGludGVycnVwdCkKLQkJaGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOwotfQotCi0vKgotICogQW5hbHlzZSBhIHJlY2VpdmVkIGZpZWxkLCBhbmQgZmV0Y2ggdGhlIGRhdGEgZnJvbSBpdC4gVGhlIGZpZWxkCi0gKiBjb250ZW50IGlzIHN0b3JlZCBmb3IgbmV4dCByZXBvcnQgcHJvY2Vzc2luZyAod2UgZG8gZGlmZmVyZW50aWFsCi0gKiByZXBvcnRpbmcgdG8gdGhlIGxheWVyKS4KLSAqLwotCi1zdGF0aWMgdm9pZCBoaWRfaW5wdXRfZmllbGQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIF9fdTggKmRhdGEsIGludCBpbnRlcnJ1cHQpCi17Ci0JdW5zaWduZWQgbjsKLQl1bnNpZ25lZCBjb3VudCA9IGZpZWxkLT5yZXBvcnRfY291bnQ7Ci0JdW5zaWduZWQgb2Zmc2V0ID0gZmllbGQtPnJlcG9ydF9vZmZzZXQ7Ci0JdW5zaWduZWQgc2l6ZSA9IGZpZWxkLT5yZXBvcnRfc2l6ZTsKLQlfX3MzMiBtaW4gPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOwotCV9fczMyIG1heCA9IGZpZWxkLT5sb2dpY2FsX21heGltdW07Ci0JX19zMzIgKnZhbHVlOwotCi0JaWYgKCEodmFsdWUgPSBrbWFsbG9jKHNpemVvZihfX3MzMikgKiBjb3VudCwgR0ZQX0FUT01JQykpKQotCQlyZXR1cm47Ci0KLQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewotCi0JCQl2YWx1ZVtuXSA9IG1pbiA8IDAgPyBzbnRvMzIoZXh0cmFjdChkYXRhLCBvZmZzZXQgKyBuICogc2l6ZSwgc2l6ZSksIHNpemUpIDoKLQkJCQkJCSAgICBleHRyYWN0KGRhdGEsIG9mZnNldCArIG4gKiBzaXplLCBzaXplKTsKLQotCQkJaWYgKCEoZmllbGQtPmZsYWdzICYgSElEX01BSU5fSVRFTV9WQVJJQUJMRSkgLyogSWdub3JlIHJlcG9ydCBpZiBFcnJvclJvbGxPdmVyICovCi0JCQkgICAgJiYgdmFsdWVbbl0gPj0gbWluICYmIHZhbHVlW25dIDw9IG1heAotCQkJICAgICYmIGZpZWxkLT51c2FnZVt2YWx1ZVtuXSAtIG1pbl0uaGlkID09IEhJRF9VUF9LRVlCT0FSRCArIDEpCi0JCQkJZ290byBleGl0OwotCX0KLQotCWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Ci0KLQkJaWYgKEhJRF9NQUlOX0lURU1fVkFSSUFCTEUgJiBmaWVsZC0+ZmxhZ3MpIHsKLQkJCWhpZF9wcm9jZXNzX2V2ZW50KGhpZCwgZmllbGQsICZmaWVsZC0+dXNhZ2Vbbl0sIHZhbHVlW25dLCBpbnRlcnJ1cHQpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoZmllbGQtPnZhbHVlW25dID49IG1pbiAmJiBmaWVsZC0+dmFsdWVbbl0gPD0gbWF4Ci0JCQkmJiBmaWVsZC0+dXNhZ2VbZmllbGQtPnZhbHVlW25dIC0gbWluXS5oaWQKLQkJCSYmIHNlYXJjaCh2YWx1ZSwgZmllbGQtPnZhbHVlW25dLCBjb3VudCkpCi0JCQkJaGlkX3Byb2Nlc3NfZXZlbnQoaGlkLCBmaWVsZCwgJmZpZWxkLT51c2FnZVtmaWVsZC0+dmFsdWVbbl0gLSBtaW5dLCAwLCBpbnRlcnJ1cHQpOwotCi0JCWlmICh2YWx1ZVtuXSA+PSBtaW4gJiYgdmFsdWVbbl0gPD0gbWF4Ci0JCQkmJiBmaWVsZC0+dXNhZ2VbdmFsdWVbbl0gLSBtaW5dLmhpZAotCQkJJiYgc2VhcmNoKGZpZWxkLT52YWx1ZSwgdmFsdWVbbl0sIGNvdW50KSkKLQkJCQloaWRfcHJvY2Vzc19ldmVudChoaWQsIGZpZWxkLCAmZmllbGQtPnVzYWdlW3ZhbHVlW25dIC0gbWluXSwgMSwgaW50ZXJydXB0KTsKLQl9Ci0KLQltZW1jcHkoZmllbGQtPnZhbHVlLCB2YWx1ZSwgY291bnQgKiBzaXplb2YoX19zMzIpKTsKLWV4aXQ6Ci0Ja2ZyZWUodmFsdWUpOwotfQotCi1zdGF0aWMgaW50IGhpZF9pbnB1dF9yZXBvcnQoaW50IHR5cGUsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGludGVycnVwdCkKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtID0gaGlkLT5yZXBvcnRfZW51bSArIHR5cGU7Ci0JdTggKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQlpbnQgbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwotCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Ci0JaW50IG4sIHNpemU7Ci0KLQlpZiAoIWxlbikgewotCQlkYmcoImVtcHR5IHJlcG9ydCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0jaWZkZWYgREVCVUdfREFUQQotCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IHJlcG9ydCAoc2l6ZSAldSkgKCVzbnVtYmVyZWQpXG4iLCBsZW4sIHJlcG9ydF9lbnVtLT5udW1iZXJlZCA/ICIiIDogInVuIik7Ci0jZW5kaWYKLQotCW4gPSAwOwkJCQkvKiBOb3JtYWxseSByZXBvcnQgbnVtYmVyIGlzIDAgKi8KLQlpZiAocmVwb3J0X2VudW0tPm51bWJlcmVkKSB7CS8qIERldmljZSB1c2VzIG51bWJlcmVkIHJlcG9ydHMsIGRhdGFbMF0gaXMgcmVwb3J0IG51bWJlciAqLwotCQluID0gKmRhdGErKzsKLQkJbGVuLS07Ci0JfQotCi0jaWZkZWYgREVCVUdfREFUQQotCXsKLQkJaW50IGk7Ci0JCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IHJlcG9ydCAlZCAoc2l6ZSAldSkgPSAiLCBuLCBsZW4pOwotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQlwcmludGsoIiAlMDJ4IiwgZGF0YVtpXSk7Ci0JCXByaW50aygiXG4iKTsKLQl9Ci0jZW5kaWYKLQotCWlmICghKHJlcG9ydCA9IHJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtuXSkpIHsKLQkJZGJnKCJ1bmRlZmluZWQgcmVwb3J0X2lkICVkIHJlY2VpdmVkIiwgbik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlzaXplID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDE7Ci0KLQlpZiAobGVuIDwgc2l6ZSkgewotCQlkYmcoInJlcG9ydCAlZCBpcyB0b28gc2hvcnQsICglZCA8ICVkKSIsIHJlcG9ydC0+aWQsIGxlbiwgc2l6ZSk7Ci0JCW1lbXNldChkYXRhICsgbGVuLCAwLCBzaXplIC0gbGVuKTsKLQl9Ci0KLQlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKQotCQloaWRkZXZfcmVwb3J0X2V2ZW50KGhpZCwgcmVwb3J0KTsKLQotCWZvciAobiA9IDA7IG4gPCByZXBvcnQtPm1heGZpZWxkOyBuKyspCi0JCWhpZF9pbnB1dF9maWVsZChoaWQsIHJlcG9ydC0+ZmllbGRbbl0sIGRhdGEsIGludGVycnVwdCk7Ci0KLQlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCi0JCWhpZGlucHV0X3JlcG9ydF9ldmVudChoaWQsIHJlcG9ydCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIElucHV0IHN1Ym1pc3Npb24gYW5kIEkvTyBlcnJvciBoYW5kbGVyLgogICovCiAKQEAgLTk0NiwxNSArNjcsMTYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYyA9IDA7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaGlkLT5pbmxvY2ssIGZsYWdzKTsKLQlpZiAoaGlkLT5vcGVuID4gMCAmJiAhdGVzdF9iaXQoSElEX1NVU1BFTkRFRCwgJmhpZC0+aW9mbCkgJiYKLQkJCSF0ZXN0X2FuZF9zZXRfYml0KEhJRF9JTl9SVU5OSU5HLCAmaGlkLT5pb2ZsKSkgewotCQlyYyA9IHVzYl9zdWJtaXRfdXJiKGhpZC0+dXJiaW4sIEdGUF9BVE9NSUMpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JoaWQtPmlubG9jaywgZmxhZ3MpOworCWlmIChoaWQtPm9wZW4gPiAwICYmICF0ZXN0X2JpdChISURfU1VTUEVOREVELCAmdXNiaGlkLT5pb2ZsKSAmJgorCQkJIXRlc3RfYW5kX3NldF9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKSB7CisJCXJjID0gdXNiX3N1Ym1pdF91cmIodXNiaGlkLT51cmJpbiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyYyAhPSAwKQotCQkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmaGlkLT5pb2ZsKTsKKwkJCWNsZWFyX2JpdChISURfSU5fUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+aW5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5pbmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTk2Miw4ICs4NCw5IEBACiBzdGF0aWMgdm9pZCBoaWRfcmV0cnlfdGltZW91dCh1bnNpZ25lZCBsb25nIF9oaWQpCiB7CiAJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IChzdHJ1Y3QgaGlkX2RldmljZSAqKSBfaGlkOworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCi0JZGV2X2RiZygmaGlkLT5pbnRmLT5kZXYsICJyZXRyeWluZyBpbnRyIHVyYlxuIik7CisJZGV2X2RiZygmdXNiaGlkLT5pbnRmLT5kZXYsICJyZXRyeWluZyBpbnRyIHVyYlxuIik7CiAJaWYgKGhpZF9zdGFydF9pbihoaWQpKQogCQloaWRfaW9fZXJyb3IoaGlkKTsKIH0KQEAgLTk3MSwzOCArOTQsMzkgQEAKIC8qIFdvcmtxdWV1ZSByb3V0aW5lIHRvIHJlc2V0IHRoZSBkZXZpY2Ugb3IgY2xlYXIgYSBoYWx0ICovCiBzdGF0aWMgdm9pZCBoaWRfcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGhpZF9kZXZpY2UsIHJlc2V0X3dvcmspOworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYmhpZF9kZXZpY2UsIHJlc2V0X3dvcmspOworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JoaWQtPmhpZDsKIAlpbnQgcmNfbG9jaywgcmMgPSAwOwogCi0JaWYgKHRlc3RfYml0KEhJRF9DTEVBUl9IQUxULCAmaGlkLT5pb2ZsKSkgewotCQlkZXZfZGJnKCZoaWQtPmludGYtPmRldiwgImNsZWFyIGhhbHRcbiIpOwotCQlyYyA9IHVzYl9jbGVhcl9oYWx0KGhpZC0+ZGV2LCBoaWQtPnVyYmluLT5waXBlKTsKLQkJY2xlYXJfYml0KEhJRF9DTEVBUl9IQUxULCAmaGlkLT5pb2ZsKTsKKwlpZiAodGVzdF9iaXQoSElEX0NMRUFSX0hBTFQsICZ1c2JoaWQtPmlvZmwpKSB7CisJCWRldl9kYmcoJnVzYmhpZC0+aW50Zi0+ZGV2LCAiY2xlYXIgaGFsdFxuIik7CisJCXJjID0gdXNiX2NsZWFyX2hhbHQoaGlkX3RvX3VzYl9kZXYoaGlkKSwgdXNiaGlkLT51cmJpbi0+cGlwZSk7CisJCWNsZWFyX2JpdChISURfQ0xFQVJfSEFMVCwgJnVzYmhpZC0+aW9mbCk7CiAJCWhpZF9zdGFydF9pbihoaWQpOwogCX0KIAotCWVsc2UgaWYgKHRlc3RfYml0KEhJRF9SRVNFVF9QRU5ESU5HLCAmaGlkLT5pb2ZsKSkgewotCQlkZXZfZGJnKCZoaWQtPmludGYtPmRldiwgInJlc2V0dGluZyBkZXZpY2VcbiIpOwotCQlyYyA9IHJjX2xvY2sgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KGhpZC0+ZGV2LCBoaWQtPmludGYpOworCWVsc2UgaWYgKHRlc3RfYml0KEhJRF9SRVNFVF9QRU5ESU5HLCAmdXNiaGlkLT5pb2ZsKSkgeworCQlkZXZfZGJnKCZ1c2JoaWQtPmludGYtPmRldiwgInJlc2V0dGluZyBkZXZpY2VcbiIpOworCQlyYyA9IHJjX2xvY2sgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KGhpZF90b191c2JfZGV2KGhpZCksIHVzYmhpZC0+aW50Zik7CiAJCWlmIChyY19sb2NrID49IDApIHsKLQkJCXJjID0gdXNiX3Jlc2V0X2NvbXBvc2l0ZV9kZXZpY2UoaGlkLT5kZXYsIGhpZC0+aW50Zik7CisJCQlyYyA9IHVzYl9yZXNldF9jb21wb3NpdGVfZGV2aWNlKGhpZF90b191c2JfZGV2KGhpZCksIHVzYmhpZC0+aW50Zik7CiAJCQlpZiAocmNfbG9jaykKLQkJCQl1c2JfdW5sb2NrX2RldmljZShoaWQtPmRldik7CisJCQkJdXNiX3VubG9ja19kZXZpY2UoaGlkX3RvX3VzYl9kZXYoaGlkKSk7CiAJCX0KLQkJY2xlYXJfYml0KEhJRF9SRVNFVF9QRU5ESU5HLCAmaGlkLT5pb2ZsKTsKKwkJY2xlYXJfYml0KEhJRF9SRVNFVF9QRU5ESU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAl9CiAKIAlzd2l0Y2ggKHJjKSB7CiAJY2FzZSAwOgotCQlpZiAoIXRlc3RfYml0KEhJRF9JTl9SVU5OSU5HLCAmaGlkLT5pb2ZsKSkKKwkJaWYgKCF0ZXN0X2JpdChISURfSU5fUlVOTklORywgJnVzYmhpZC0+aW9mbCkpCiAJCQloaWRfaW9fZXJyb3IoaGlkKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyKCJjYW4ndCByZXNldCBkZXZpY2UsICVzLSVzL2lucHV0JWQsIHN0YXR1cyAlZCIsCi0JCQkJaGlkLT5kZXYtPmJ1cy0+YnVzX25hbWUsCi0JCQkJaGlkLT5kZXYtPmRldnBhdGgsCi0JCQkJaGlkLT5pZm51bSwgcmMpOworCQkJCWhpZF90b191c2JfZGV2KGhpZCktPmJ1cy0+YnVzX25hbWUsCisJCQkJaGlkX3RvX3VzYl9kZXYoaGlkKS0+ZGV2cGF0aCwKKwkJCQl1c2JoaWQtPmlmbnVtLCByYyk7CiAJCS8qIEZBTExUSFJPVUdIICovCiAJY2FzZSAtRUhPU1RVTlJFQUNIOgogCWNhc2UgLUVOT0RFVjoKQEAgLTEwMTUsMzMgKzEzOSwzNCBAQAogc3RhdGljIHZvaWQgaGlkX2lvX2Vycm9yKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZoaWQtPmlubG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JoaWQtPmlubG9jaywgZmxhZ3MpOwogCiAJLyogU3RvcCB3aGVuIGRpc2Nvbm5lY3RlZCAqLwotCWlmICh1c2JfZ2V0X2ludGZkYXRhKGhpZC0+aW50ZikgPT0gTlVMTCkKKwlpZiAodXNiX2dldF9pbnRmZGF0YSh1c2JoaWQtPmludGYpID09IE5VTEwpCiAJCWdvdG8gZG9uZTsKIAogCS8qIFdoZW4gYW4gZXJyb3Igb2NjdXJzLCByZXRyeSBhdCBpbmNyZWFzaW5nIGludGVydmFscyAqLwotCWlmIChoaWQtPnJldHJ5X2RlbGF5ID09IDApIHsKLQkJaGlkLT5yZXRyeV9kZWxheSA9IDEzOwkvKiBUaGVuIDI2LCA1MiwgMTA0LCAxMDQsIC4uLiAqLwotCQloaWQtPnN0b3BfcmV0cnkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKTsKLQl9IGVsc2UgaWYgKGhpZC0+cmV0cnlfZGVsYXkgPCAxMDApCi0JCWhpZC0+cmV0cnlfZGVsYXkgKj0gMjsKKwlpZiAodXNiaGlkLT5yZXRyeV9kZWxheSA9PSAwKSB7CisJCXVzYmhpZC0+cmV0cnlfZGVsYXkgPSAxMzsJLyogVGhlbiAyNiwgNTIsIDEwNCwgMTA0LCAuLi4gKi8KKwkJdXNiaGlkLT5zdG9wX3JldHJ5ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJfSBlbHNlIGlmICh1c2JoaWQtPnJldHJ5X2RlbGF5IDwgMTAwKQorCQl1c2JoaWQtPnJldHJ5X2RlbGF5ICo9IDI7CiAKLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBoaWQtPnN0b3BfcmV0cnkpKSB7CisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdXNiaGlkLT5zdG9wX3JldHJ5KSkgewogCiAJCS8qIFJldHJpZXMgZmFpbGVkLCBzbyBkbyBhIHBvcnQgcmVzZXQgKi8KLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9SRVNFVF9QRU5ESU5HLCAmaGlkLT5pb2ZsKSkgewotCQkJc2NoZWR1bGVfd29yaygmaGlkLT5yZXNldF93b3JrKTsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9SRVNFVF9QRU5ESU5HLCAmdXNiaGlkLT5pb2ZsKSkgeworCQkJc2NoZWR1bGVfd29yaygmdXNiaGlkLT5yZXNldF93b3JrKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KIAotCW1vZF90aW1lcigmaGlkLT5pb19yZXRyeSwKLQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGhpZC0+cmV0cnlfZGVsYXkpKTsKKwltb2RfdGltZXIoJnVzYmhpZC0+aW9fcmV0cnksCisJCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh1c2JoaWQtPnJldHJ5X2RlbGF5KSk7CiBkb25lOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+aW5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5pbmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTEwNTEsMjggKzE3NiwzMSBAQAogc3RhdGljIHZvaWQgaGlkX2lycV9pbihzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IGhpZF9kZXZpY2UJKmhpZCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAJKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAJaW50CQkJc3RhdHVzOwogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewogCQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwotCQkJaGlkLT5yZXRyeV9kZWxheSA9IDA7Ci0JCQloaWRfaW5wdXRfcmVwb3J0KEhJRF9JTlBVVF9SRVBPUlQsIHVyYiwgMSk7CisJCQl1c2JoaWQtPnJldHJ5X2RlbGF5ID0gMDsKKwkJCWhpZF9pbnB1dF9yZXBvcnQodXJiLT5jb250ZXh0LCBISURfSU5QVVRfUkVQT1JULAorCQkJCQkgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCSB1cmItPmFjdHVhbF9sZW5ndGgsIDEpOwogCQkJYnJlYWs7CiAJCWNhc2UgLUVQSVBFOgkJLyogc3RhbGwgKi8KLQkJCWNsZWFyX2JpdChISURfSU5fUlVOTklORywgJmhpZC0+aW9mbCk7Ci0JCQlzZXRfYml0KEhJRF9DTEVBUl9IQUxULCAmaGlkLT5pb2ZsKTsKLQkJCXNjaGVkdWxlX3dvcmsoJmhpZC0+cmVzZXRfd29yayk7CisJCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCQkJc2V0X2JpdChISURfQ0xFQVJfSEFMVCwgJnVzYmhpZC0+aW9mbCk7CisJCQlzY2hlZHVsZV93b3JrKCZ1c2JoaWQtPnJlc2V0X3dvcmspOwogCQkJcmV0dXJuOwogCQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KIAkJY2FzZSAtRU5PRU5UOgogCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLwotCQkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmaGlkLT5pb2ZsKTsKKwkJCWNsZWFyX2JpdChISURfSU5fUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CiAJCQlyZXR1cm47CiAJCWNhc2UgLUVJTFNFUToJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLwogCQljYXNlIC1FUFJPVE86CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KIAkJY2FzZSAtRVRJTUU6CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KIAkJY2FzZSAtRVRJTUVET1VUOgkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQuLi4gKi8KLQkJCWNsZWFyX2JpdChISURfSU5fUlVOTklORywgJmhpZC0+aW9mbCk7CisJCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOwogCQkJaGlkX2lvX2Vycm9yKGhpZCk7CiAJCQlyZXR1cm47CiAJCWRlZmF1bHQ6CQkvKiBlcnJvciAqLwpAQCAtMTA4MSw3OSArMjA5LDE4IEBACiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMpIHsKLQkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmaGlkLT5pb2ZsKTsKKwkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAkJaWYgKHN0YXR1cyAhPSAtRVBFUk0pIHsKIAkJCWVycigiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvaW5wdXQlZCwgc3RhdHVzICVkIiwKLQkJCQkJaGlkLT5kZXYtPmJ1cy0+YnVzX25hbWUsCi0JCQkJCWhpZC0+ZGV2LT5kZXZwYXRoLAotCQkJCQloaWQtPmlmbnVtLCBzdGF0dXMpOworCQkJCQloaWRfdG9fdXNiX2RldihoaWQpLT5idXMtPmJ1c19uYW1lLAorCQkJCQloaWRfdG9fdXNiX2RldihoaWQpLT5kZXZwYXRoLAorCQkJCQl1c2JoaWQtPmlmbnVtLCBzdGF0dXMpOwogCQkJaGlkX2lvX2Vycm9yKGhpZCk7CiAJCX0KIAl9CiB9CiAKIC8qCi0gKiBPdXRwdXQgdGhlIGZpZWxkIGludG8gdGhlIHJlcG9ydC4KLSAqLwotCi1zdGF0aWMgdm9pZCBoaWRfb3V0cHV0X2ZpZWxkKHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBfX3U4ICpkYXRhKQotewotCXVuc2lnbmVkIGNvdW50ID0gZmllbGQtPnJlcG9ydF9jb3VudDsKLQl1bnNpZ25lZCBvZmZzZXQgPSBmaWVsZC0+cmVwb3J0X29mZnNldDsKLQl1bnNpZ25lZCBzaXplID0gZmllbGQtPnJlcG9ydF9zaXplOwotCXVuc2lnbmVkIG47Ci0KLQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewotCQlpZiAoZmllbGQtPmxvZ2ljYWxfbWluaW11bSA8IDApCS8qIHNpZ25lZCB2YWx1ZXMgKi8KLQkJCWltcGxlbWVudChkYXRhLCBvZmZzZXQgKyBuICogc2l6ZSwgc2l6ZSwgczMydG9uKGZpZWxkLT52YWx1ZVtuXSwgc2l6ZSkpOwotCQllbHNlCQkJCS8qIHVuc2lnbmVkIHZhbHVlcyAqLwotCQkJaW1wbGVtZW50KGRhdGEsIG9mZnNldCArIG4gKiBzaXplLCBzaXplLCBmaWVsZC0+dmFsdWVbbl0pOwotCX0KLX0KLQotLyoKLSAqIENyZWF0ZSBhIHJlcG9ydC4KLSAqLwotCi1zdGF0aWMgdm9pZCBoaWRfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCBfX3U4ICpkYXRhKQotewotCXVuc2lnbmVkIG47Ci0KLQlpZiAocmVwb3J0LT5pZCA+IDApCi0JCSpkYXRhKysgPSByZXBvcnQtPmlkOwotCi0JZm9yIChuID0gMDsgbiA8IHJlcG9ydC0+bWF4ZmllbGQ7IG4rKykKLQkJaGlkX291dHB1dF9maWVsZChyZXBvcnQtPmZpZWxkW25dLCBkYXRhKTsKLX0KLQotLyoKLSAqIFNldCBhIGZpZWxkIHZhbHVlLiBUaGUgcmVwb3J0IHRoaXMgZmllbGQgYmVsb25ncyB0byBoYXMgdG8gYmUKLSAqIGNyZWF0ZWQgYW5kIHRyYW5zZmVycmVkIHRvIHRoZSBkZXZpY2UsIHRvIHNldCB0aGlzIHZhbHVlIGluIHRoZQotICogZGV2aWNlLgotICovCi0KLWludCBoaWRfc2V0X2ZpZWxkKHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCB1bnNpZ25lZCBvZmZzZXQsIF9fczMyIHZhbHVlKQotewotCXVuc2lnbmVkIHNpemUgPSBmaWVsZC0+cmVwb3J0X3NpemU7Ci0KLQloaWRfZHVtcF9pbnB1dChmaWVsZC0+dXNhZ2UgKyBvZmZzZXQsIHZhbHVlKTsKLQotCWlmIChvZmZzZXQgPj0gZmllbGQtPnJlcG9ydF9jb3VudCkgewotCQlkYmcoIm9mZnNldCAoJWQpIGV4Y2VlZHMgcmVwb3J0X2NvdW50ICglZCkiLCBvZmZzZXQsIGZpZWxkLT5yZXBvcnRfY291bnQpOwotCQloaWRfZHVtcF9maWVsZChmaWVsZCwgOCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKGZpZWxkLT5sb2dpY2FsX21pbmltdW0gPCAwKSB7Ci0JCWlmICh2YWx1ZSAhPSBzbnRvMzIoczMydG9uKHZhbHVlLCBzaXplKSwgc2l6ZSkpIHsKLQkJCWRiZygidmFsdWUgJWQgaXMgb3V0IG9mIHJhbmdlIiwgdmFsdWUpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCWZpZWxkLT52YWx1ZVtvZmZzZXRdID0gdmFsdWU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBGaW5kIGEgcmVwb3J0IGZpZWxkIHdpdGggYSBzcGVjaWZpZWQgSElEIHVzYWdlLgogICovCiAjaWYgMApAQCAtMTE3MywxNiArMjQwLDE3IEBACiBzdGF0aWMgaW50IGhpZF9zdWJtaXRfb3V0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAotCXJlcG9ydCA9IGhpZC0+b3V0W2hpZC0+b3V0dGFpbF07CisJcmVwb3J0ID0gdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXR0YWlsXTsKIAotCWhpZF9vdXRwdXRfcmVwb3J0KHJlcG9ydCwgaGlkLT5vdXRidWYpOwotCWhpZC0+dXJib3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOwotCWhpZC0+dXJib3V0LT5kZXYgPSBoaWQtPmRldjsKKwloaWRfb3V0cHV0X3JlcG9ydChyZXBvcnQsIHVzYmhpZC0+b3V0YnVmKTsKKwl1c2JoaWQtPnVyYm91dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9ICgocmVwb3J0LT5zaXplIC0gMSkgPj4gMykgKyAxICsgKHJlcG9ydC0+aWQgPiAwKTsKKwl1c2JoaWQtPnVyYm91dC0+ZGV2ID0gaGlkX3RvX3VzYl9kZXYoaGlkKTsKIAogCWRiZygic3VibWl0dGluZyBvdXQgdXJiIik7CiAKLQlpZiAodXNiX3N1Ym1pdF91cmIoaGlkLT51cmJvdXQsIEdGUF9BVE9NSUMpKSB7CisJaWYgKHVzYl9zdWJtaXRfdXJiKHVzYmhpZC0+dXJib3V0LCBHRlBfQVRPTUlDKSkgewogCQllcnIoInVzYl9zdWJtaXRfdXJiKG91dCkgZmFpbGVkIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMTk1LDQyICsyNjMsNDMgQEAKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwogCXVuc2lnbmVkIGNoYXIgZGlyOwogCWludCBsZW47CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKLQlyZXBvcnQgPSBoaWQtPmN0cmxbaGlkLT5jdHJsdGFpbF0ucmVwb3J0OwotCWRpciA9IGhpZC0+Y3RybFtoaWQtPmN0cmx0YWlsXS5kaXI7CisJcmVwb3J0ID0gdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybHRhaWxdLnJlcG9ydDsKKwlkaXIgPSB1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0uZGlyOwogCiAJbGVuID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOwogCWlmIChkaXIgPT0gVVNCX0RJUl9PVVQpIHsKLQkJaGlkX291dHB1dF9yZXBvcnQocmVwb3J0LCBoaWQtPmN0cmxidWYpOwotCQloaWQtPnVyYmN0cmwtPnBpcGUgPSB1c2Jfc25kY3RybHBpcGUoaGlkLT5kZXYsIDApOwotCQloaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CisJCWhpZF9vdXRwdXRfcmVwb3J0KHJlcG9ydCwgdXNiaGlkLT5jdHJsYnVmKTsKKwkJdXNiaGlkLT51cmJjdHJsLT5waXBlID0gdXNiX3NuZGN0cmxwaXBlKGhpZF90b191c2JfZGV2KGhpZCksIDApOworCQl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CiAJfSBlbHNlIHsKIAkJaW50IG1heHBhY2tldCwgcGFkbGVuOwogCi0JCWhpZC0+dXJiY3RybC0+cGlwZSA9IHVzYl9yY3ZjdHJscGlwZShoaWQtPmRldiwgMCk7Ci0JCW1heHBhY2tldCA9IHVzYl9tYXhwYWNrZXQoaGlkLT5kZXYsIGhpZC0+dXJiY3RybC0+cGlwZSwgMCk7CisJCXVzYmhpZC0+dXJiY3RybC0+cGlwZSA9IHVzYl9yY3ZjdHJscGlwZShoaWRfdG9fdXNiX2RldihoaWQpLCAwKTsKKwkJbWF4cGFja2V0ID0gdXNiX21heHBhY2tldChoaWRfdG9fdXNiX2RldihoaWQpLCB1c2JoaWQtPnVyYmN0cmwtPnBpcGUsIDApOwogCQlpZiAobWF4cGFja2V0ID4gMCkgewogCQkJcGFkbGVuID0gKGxlbiArIG1heHBhY2tldCAtIDEpIC8gbWF4cGFja2V0OwogCQkJcGFkbGVuICo9IG1heHBhY2tldDsKLQkJCWlmIChwYWRsZW4gPiBoaWQtPmJ1ZnNpemUpCi0JCQkJcGFkbGVuID0gaGlkLT5idWZzaXplOworCQkJaWYgKHBhZGxlbiA+IHVzYmhpZC0+YnVmc2l6ZSkKKwkJCQlwYWRsZW4gPSB1c2JoaWQtPmJ1ZnNpemU7CiAJCX0gZWxzZQogCQkJcGFkbGVuID0gMDsKLQkJaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gcGFkbGVuOworCQl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwYWRsZW47CiAJfQotCWhpZC0+dXJiY3RybC0+ZGV2ID0gaGlkLT5kZXY7CisJdXNiaGlkLT51cmJjdHJsLT5kZXYgPSBoaWRfdG9fdXNiX2RldihoaWQpOwogCi0JaGlkLT5jci0+YlJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgZGlyOwotCWhpZC0+Y3ItPmJSZXF1ZXN0ID0gKGRpciA9PSBVU0JfRElSX09VVCkgPyBISURfUkVRX1NFVF9SRVBPUlQgOiBISURfUkVRX0dFVF9SRVBPUlQ7Ci0JaGlkLT5jci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoKChyZXBvcnQtPnR5cGUgKyAxKSA8PCA4KSB8IHJlcG9ydC0+aWQpOwotCWhpZC0+Y3ItPndJbmRleCA9IGNwdV90b19sZTE2KGhpZC0+aWZudW0pOwotCWhpZC0+Y3ItPndMZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOworCXVzYmhpZC0+Y3ItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IGRpcjsKKwl1c2JoaWQtPmNyLT5iUmVxdWVzdCA9IChkaXIgPT0gVVNCX0RJUl9PVVQpID8gSElEX1JFUV9TRVRfUkVQT1JUIDogSElEX1JFUV9HRVRfUkVQT1JUOworCXVzYmhpZC0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCgocmVwb3J0LT50eXBlICsgMSkgPDwgOCkgfCByZXBvcnQtPmlkKTsKKwl1c2JoaWQtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNih1c2JoaWQtPmlmbnVtKTsKKwl1c2JoaWQtPmNyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKIAogCWRiZygic3VibWl0dGluZyBjdHJsIHVyYjogJXMgd1ZhbHVlPTB4JTA0eCB3SW5kZXg9MHglMDR4IHdMZW5ndGg9JXUiLAotCQloaWQtPmNyLT5iUmVxdWVzdCA9PSBISURfUkVRX1NFVF9SRVBPUlQgPyAiU2V0X1JlcG9ydCIgOiAiR2V0X1JlcG9ydCIsCi0JCWhpZC0+Y3ItPndWYWx1ZSwgaGlkLT5jci0+d0luZGV4LCBoaWQtPmNyLT53TGVuZ3RoKTsKKwkJdXNiaGlkLT5jci0+YlJlcXVlc3QgPT0gSElEX1JFUV9TRVRfUkVQT1JUID8gIlNldF9SZXBvcnQiIDogIkdldF9SZXBvcnQiLAorCQl1c2JoaWQtPmNyLT53VmFsdWUsIHVzYmhpZC0+Y3ItPndJbmRleCwgdXNiaGlkLT5jci0+d0xlbmd0aCk7CiAKLQlpZiAodXNiX3N1Ym1pdF91cmIoaGlkLT51cmJjdHJsLCBHRlBfQVRPTUlDKSkgeworCWlmICh1c2Jfc3VibWl0X3VyYih1c2JoaWQtPnVyYmN0cmwsIEdGUF9BVE9NSUMpKSB7CiAJCWVycigidXNiX3N1Ym1pdF91cmIoY3RybCkgZmFpbGVkIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMjQ1LDYgKzMxNCw3IEBACiBzdGF0aWMgdm9pZCBoaWRfaXJxX291dChzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB1bnBsdWcgPSAwOwogCkBAIC0xMjYyLDI0ICszMzIsMjQgQEAKIAkJCXdhcm4oIm91dHB1dCBpcnEgc3RhdHVzICVkIHJlY2VpdmVkIiwgdXJiLT5zdGF0dXMpOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7CiAKIAlpZiAodW5wbHVnKQotCQloaWQtPm91dHRhaWwgPSBoaWQtPm91dGhlYWQ7CisJCXVzYmhpZC0+b3V0dGFpbCA9IHVzYmhpZC0+b3V0aGVhZDsKIAllbHNlCi0JCWhpZC0+b3V0dGFpbCA9IChoaWQtPm91dHRhaWwgKyAxKSAmIChISURfT1VUUFVUX0ZJRk9fU0laRSAtIDEpOworCQl1c2JoaWQtPm91dHRhaWwgPSAodXNiaGlkLT5vdXR0YWlsICsgMSkgJiAoSElEX09VVFBVVF9GSUZPX1NJWkUgLSAxKTsKIAotCWlmIChoaWQtPm91dGhlYWQgIT0gaGlkLT5vdXR0YWlsKSB7CisJaWYgKHVzYmhpZC0+b3V0aGVhZCAhPSB1c2JoaWQtPm91dHRhaWwpIHsKIAkJaWYgKGhpZF9zdWJtaXRfb3V0KGhpZCkpIHsKLQkJCWNsZWFyX2JpdChISURfT1VUX1JVTk5JTkcsICZoaWQtPmlvZmwpOworCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CiAJCQl3YWtlX3VwKCZoaWQtPndhaXQpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+b3V0bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPm91dGxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAotCWNsZWFyX2JpdChISURfT1VUX1JVTk5JTkcsICZoaWQtPmlvZmwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+b3V0bG9jaywgZmxhZ3MpOworCWNsZWFyX2JpdChISURfT1VUX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+b3V0bG9jaywgZmxhZ3MpOwogCXdha2VfdXAoJmhpZC0+d2FpdCk7CiB9CiAKQEAgLTEyOTAsMTUgKzM2MCwxNyBAQAogc3RhdGljIHZvaWQgaGlkX2N0cmwoc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdW5wbHVnID0gMDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAkJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KLQkJCWlmIChoaWQtPmN0cmxbaGlkLT5jdHJsdGFpbF0uZGlyID09IFVTQl9ESVJfSU4pCi0JCQkJaGlkX2lucHV0X3JlcG9ydChoaWQtPmN0cmxbaGlkLT5jdHJsdGFpbF0ucmVwb3J0LT50eXBlLCB1cmIsIDApOworCQkJaWYgKHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5kaXIgPT0gVVNCX0RJUl9JTikKKwkJCQloaWRfaW5wdXRfcmVwb3J0KHVyYi0+Y29udGV4dCwgdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybHRhaWxdLnJlcG9ydC0+dHlwZSwKKwkJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgsIDApOwogCQkJYnJlYWs7CiAJCWNhc2UgLUVTSFVURE9XTjoJLyogdW5wbHVnICovCiAJCQl1bnBsdWcgPSAxOwpAQCAtMTMxMyw3NiArMzg1LDEwMiBAQAogCX0KIAogCWlmICh1bnBsdWcpCi0JCWhpZC0+Y3RybHRhaWwgPSBoaWQtPmN0cmxoZWFkOworCQl1c2JoaWQtPmN0cmx0YWlsID0gdXNiaGlkLT5jdHJsaGVhZDsKIAllbHNlCi0JCWhpZC0+Y3RybHRhaWwgPSAoaGlkLT5jdHJsdGFpbCArIDEpICYgKEhJRF9DT05UUk9MX0ZJRk9fU0laRSAtIDEpOworCQl1c2JoaWQtPmN0cmx0YWlsID0gKHVzYmhpZC0+Y3RybHRhaWwgKyAxKSAmIChISURfQ09OVFJPTF9GSUZPX1NJWkUgLSAxKTsKIAotCWlmIChoaWQtPmN0cmxoZWFkICE9IGhpZC0+Y3RybHRhaWwpIHsKKwlpZiAodXNiaGlkLT5jdHJsaGVhZCAhPSB1c2JoaWQtPmN0cmx0YWlsKSB7CiAJCWlmIChoaWRfc3VibWl0X2N0cmwoaGlkKSkgewotCQkJY2xlYXJfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZoaWQtPmlvZmwpOworCQkJY2xlYXJfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOwogCQkJd2FrZV91cCgmaGlkLT53YWl0KTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAotCWNsZWFyX2JpdChISURfQ1RSTF9SVU5OSU5HLCAmaGlkLT5pb2ZsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisJY2xlYXJfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIAl3YWtlX3VwKCZoaWQtPndhaXQpOwogfQogCi12b2lkIGhpZF9zdWJtaXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIHVuc2lnbmVkIGNoYXIgZGlyKQordm9pZCB1c2JoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcikKIHsKIAlpbnQgaGVhZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCiAJaWYgKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19OT0dFVCkgJiYgZGlyID09IFVTQl9ESVJfSU4pCiAJCXJldHVybjsKIAotCWlmIChoaWQtPnVyYm91dCAmJiBkaXIgPT0gVVNCX0RJUl9PVVQgJiYgcmVwb3J0LT50eXBlID09IEhJRF9PVVRQVVRfUkVQT1JUKSB7CisJaWYgKHVzYmhpZC0+dXJib3V0ICYmIGRpciA9PSBVU0JfRElSX09VVCAmJiByZXBvcnQtPnR5cGUgPT0gSElEX09VVFBVVF9SRVBPUlQpIHsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGlkLT5vdXRsb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JoaWQtPm91dGxvY2ssIGZsYWdzKTsKIAotCQlpZiAoKGhlYWQgPSAoaGlkLT5vdXRoZWFkICsgMSkgJiAoSElEX09VVFBVVF9GSUZPX1NJWkUgLSAxKSkgPT0gaGlkLT5vdXR0YWlsKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwkJaWYgKChoZWFkID0gKHVzYmhpZC0+b3V0aGVhZCArIDEpICYgKEhJRF9PVVRQVVRfRklGT19TSVpFIC0gMSkpID09IHVzYmhpZC0+b3V0dGFpbCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7CiAJCQl3YXJuKCJvdXRwdXQgcXVldWUgZnVsbCIpOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJaGlkLT5vdXRbaGlkLT5vdXRoZWFkXSA9IHJlcG9ydDsKLQkJaGlkLT5vdXRoZWFkID0gaGVhZDsKKwkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXSA9IHJlcG9ydDsKKwkJdXNiaGlkLT5vdXRoZWFkID0gaGVhZDsKIAotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX09VVF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSkKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpCiAJCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkKLQkJCQljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmaGlkLT5pb2ZsKTsKKwkJCQljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JoaWQtPmN0cmxsb2NrLCBmbGFncyk7CiAKLQlpZiAoKGhlYWQgPSAoaGlkLT5jdHJsaGVhZCArIDEpICYgKEhJRF9DT05UUk9MX0ZJRk9fU0laRSAtIDEpKSA9PSBoaWQtPmN0cmx0YWlsKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKKwlpZiAoKGhlYWQgPSAodXNiaGlkLT5jdHJsaGVhZCArIDEpICYgKEhJRF9DT05UUk9MX0ZJRk9fU0laRSAtIDEpKSA9PSB1c2JoaWQtPmN0cmx0YWlsKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIAkJd2FybigiY29udHJvbCBxdWV1ZSBmdWxsIik7CiAJCXJldHVybjsKIAl9CiAKLQloaWQtPmN0cmxbaGlkLT5jdHJsaGVhZF0ucmVwb3J0ID0gcmVwb3J0OwotCWhpZC0+Y3RybFtoaWQtPmN0cmxoZWFkXS5kaXIgPSBkaXI7Ci0JaGlkLT5jdHJsaGVhZCA9IGhlYWQ7CisJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJlcG9ydCA9IHJlcG9ydDsKKwl1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsaGVhZF0uZGlyID0gZGlyOworCXVzYmhpZC0+Y3RybGhlYWQgPSBoZWFkOwogCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZoaWQtPmlvZmwpKQorCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSkKIAkJaWYgKGhpZF9zdWJtaXRfY3RybChoaWQpKQotCQkJY2xlYXJfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZoaWQtPmlvZmwpOworCQkJY2xlYXJfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIH0KIAotaW50IGhpZF93YWl0X2lvKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCitzdGF0aWMgaW50IHVzYl9oaWRpbnB1dF9pbnB1dF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQogewotCWlmICghd2FpdF9ldmVudF90aW1lb3V0KGhpZC0+d2FpdCwgKCF0ZXN0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSAmJgotCQkJCQkhdGVzdF9iaXQoSElEX09VVF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSksCisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKKwlpbnQgb2Zmc2V0OworCisJaWYgKHR5cGUgPT0gRVZfRkYpCisJCXJldHVybiBpbnB1dF9mZl9ldmVudChkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKKworCWlmICh0eXBlICE9IEVWX0xFRCkKKwkJcmV0dXJuIC0xOworCisJaWYgKChvZmZzZXQgPSBoaWRpbnB1dF9maW5kX2ZpZWxkKGhpZCwgdHlwZSwgY29kZSwgJmZpZWxkKSkgPT0gLTEpIHsKKwkJd2FybigiZXZlbnQgZmllbGQgbm90IGZvdW5kIik7CisJCXJldHVybiAtMTsKKwl9CisKKwloaWRfc2V0X2ZpZWxkKGZpZWxkLCBvZmZzZXQsIHZhbHVlKTsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIGZpZWxkLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCXJldHVybiAwOworfQorCitpbnQgdXNiaGlkX3dhaXRfaW8oc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKKworCWlmICghd2FpdF9ldmVudF90aW1lb3V0KGhpZC0+d2FpdCwgKCF0ZXN0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSAmJgorCQkJCQkhdGVzdF9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSksCiAJCQkJCTEwKkhaKSkgewogCQlkYmcoInRpbWVvdXQgd2FpdGluZyBmb3IgY3RybCBvciBvdXQgcXVldWUgdG8gY2xlYXIiKTsKIAkJcmV0dXJuIC0xOwpAQCAtMTQxNCw3ICs1MTIsNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLWludCBoaWRfb3BlbihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoraW50IHVzYmhpZF9vcGVuKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7CiAJKytoaWQtPm9wZW47CiAJaWYgKGhpZF9zdGFydF9pbihoaWQpKQpAQCAtMTQyMiwxMCArNTIwLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgaGlkX2Nsb3NlKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit2b2lkIHVzYmhpZF9jbG9zZShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQogeworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOworCiAJaWYgKCEtLWhpZC0+b3BlbikKLQkJdXNiX2tpbGxfdXJiKGhpZC0+dXJiaW4pOworCQl1c2Jfa2lsbF91cmIodXNiaGlkLT51cmJpbik7Cit9CisKK3N0YXRpYyBpbnQgaGlkaW5wdXRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlyZXR1cm4gdXNiaGlkX29wZW4oaGlkKTsKK30KKworc3RhdGljIHZvaWQgaGlkaW5wdXRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJdXNiaGlkX2Nsb3NlKGhpZCk7CiB9CiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QQU5KSVQJCTB4MTM0YwpAQCAtMTQzNywyNiArNTQ5LDI3IEBACiAgKiBJbml0aWFsaXplIGFsbCByZXBvcnRzCiAgKi8KIAotdm9pZCBoaWRfaW5pdF9yZXBvcnRzKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit2b2lkIHVzYmhpZF9pbml0X3JlcG9ydHMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCWludCBlcnIsIHJldDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtISURfSU5QVVRfUkVQT1JUXS5yZXBvcnRfbGlzdCwgbGlzdCkKLQkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfSU4pOworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9JTik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJmhpZC0+cmVwb3J0X2VudW1bSElEX0ZFQVRVUkVfUkVQT1JUXS5yZXBvcnRfbGlzdCwgbGlzdCkKLQkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfSU4pOworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9JTik7CiAKIAllcnIgPSAwOwotCXJldCA9IGhpZF93YWl0X2lvKGhpZCk7CisJcmV0ID0gdXNiaGlkX3dhaXRfaW8oaGlkKTsKIAl3aGlsZSAocmV0KSB7CiAJCWVyciB8PSByZXQ7Ci0JCWlmICh0ZXN0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSkKLQkJCXVzYl9raWxsX3VyYihoaWQtPnVyYmN0cmwpOwotCQlpZiAodGVzdF9iaXQoSElEX09VVF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSkKLQkJCXVzYl9raWxsX3VyYihoaWQtPnVyYm91dCk7Ci0JCXJldCA9IGhpZF93YWl0X2lvKGhpZCk7CisJCWlmICh0ZXN0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSkKKwkJCXVzYl9raWxsX3VyYih1c2JoaWQtPnVyYmN0cmwpOworCQlpZiAodGVzdF9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSkKKwkJCXVzYl9raWxsX3VyYih1c2JoaWQtPnVyYm91dCk7CisJCXJldCA9IHVzYmhpZF93YWl0X2lvKGhpZCk7CiAJfQogCiAJaWYgKGVycikKQEAgLTE0NjQsNiArNTc3LDcgQEAKIH0KIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0dUQ08JCTB4MDc4YworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dUQ09fSVBBTkVMXzIgICAgIDB4NTU0MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fOTAJCTB4MDA5MAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwCQkweDAxMDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMQkJMHgwMTAxCkBAIC0xNTA5LDYgKzYyMyw4IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA0CQkweDEwMDQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDUJCTB4MTAwNQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNgkJMHgxMDA2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT184CQkweDAwMDgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPX2QgICAgICAgICAgICAweDAwMGQKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCQkweDA1NmEKIApAQCAtMTY3MCw2ICs3ODYsMTIgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BSVJDQUJMRQkJMHgxNkNBCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlSQ0FCTEUxCQkweDE1MDIKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0xPR0lURUNICQkweDA0NmQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9VU0JfUkVDRUlWRVIJMHhjMTAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9JTUFUSU9OCQkweDA3MTgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESVNDX1NUQUtLQQkweGQwMDAKKwogLyoKICAqIEFscGhhYmV0aWNhbGx5IHNvcnRlZCBibGFja2xpc3QgYnkgcXVpcmsgdHlwZS4KICAqLwpAQCAtMTc1NCw2ICs4NzYsOSBAQAogCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNSwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNiwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPX0lQQU5FTF8yLCBVU0JfREVWSUNFX0lEX0dUQ09fOCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPX0lQQU5FTF8yLCBVU0JfREVWSUNFX0lEX0dUQ09fZCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9JTUFUSU9OLCBVU0JfREVWSUNFX0lEX0RJU0NfU1RBS0tBLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0tCR0VBUiwgVVNCX0RFVklDRV9JRF9LQkdFQVJfSkFNU1RVRElPLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0NBU1NZLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1BPQ0tFVENBU1NZLCBISURfUVVJUktfSUdOT1JFIH0sCkBAIC0xODMwLDcgKzk1NSw3IEBACiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjNfSVNPLCBISURfUVVJUktfUE9XRVJCT09LX0hBU19GTiB8IEhJRF9RVUlSS19QT1dFUkJPT0tfSVNPX0tFWUJPQVJEfSwKIAl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSM19KSVMsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfQU5TSSwgSElEX1FVSVJLX1BPV0VSQk9PS19IQVNfRk4gfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9JU08sIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCisJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSVNPLCBISURfUVVJUktfUE9XRVJCT09LX0hBU19GTiB8IEhJRF9RVUlSS19QT1dFUkJPT0tfSVNPX0tFWUJPQVJEfSwKIAl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMsIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX1RQX09OTFksIEhJRF9RVUlSS19QT1dFUkJPT0tfSEFTX0ZOIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjFfVFBfT05MWSwgSElEX1FVSVJLX1BPV0VSQk9PS19IQVNfRk4gfSwKQEAgLTE4NDEsNyArOTY2LDkgQEAKIAl7IFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDQsIEhJRF9RVUlSS19JR05PUkUgfSwKIAogCXsgVVNCX1ZFTkRPUl9JRF9UVVJCT1gsIFVTQl9ERVZJQ0VfSURfVFVSQk9YX0tFWUJPQVJELCBISURfUVVJUktfTk9HRVQgfSwKLQkKKworCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9VU0JfUkVDRUlWRVIsIEhJRF9RVUlSS19CQURfUkVMQVRJVkVfS0VZUyB9LAorCiAJeyAwLCAwIH0KIH07CiAKQEAgLTE4NjQsMTMgKzk5MSwxNSBAQAogCiBzdGF0aWMgaW50IGhpZF9hbGxvY19idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7Ci0JaWYgKCEoaGlkLT5pbmJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBoaWQtPmJ1ZnNpemUsIEdGUF9BVE9NSUMsICZoaWQtPmluYnVmX2RtYSkpKQorCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOworCisJaWYgKCEodXNiaGlkLT5pbmJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCB1c2JoaWQtPmJ1ZnNpemUsIEdGUF9BVE9NSUMsICZ1c2JoaWQtPmluYnVmX2RtYSkpKQogCQlyZXR1cm4gLTE7Ci0JaWYgKCEoaGlkLT5vdXRidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgaGlkLT5idWZzaXplLCBHRlBfQVRPTUlDLCAmaGlkLT5vdXRidWZfZG1hKSkpCisJaWYgKCEodXNiaGlkLT5vdXRidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgdXNiaGlkLT5idWZzaXplLCBHRlBfQVRPTUlDLCAmdXNiaGlkLT5vdXRidWZfZG1hKSkpCiAJCXJldHVybiAtMTsKLQlpZiAoIShoaWQtPmNyID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIHNpemVvZigqKGhpZC0+Y3IpKSwgR0ZQX0FUT01JQywgJmhpZC0+Y3JfZG1hKSkpCisJaWYgKCEodXNiaGlkLT5jciA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBzaXplb2YoKih1c2JoaWQtPmNyKSksIEdGUF9BVE9NSUMsICZ1c2JoaWQtPmNyX2RtYSkpKQogCQlyZXR1cm4gLTE7Ci0JaWYgKCEoaGlkLT5jdHJsYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIGhpZC0+YnVmc2l6ZSwgR0ZQX0FUT01JQywgJmhpZC0+Y3RybGJ1Zl9kbWEpKSkKKwlpZiAoISh1c2JoaWQtPmN0cmxidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgdXNiaGlkLT5idWZzaXplLCBHRlBfQVRPTUlDLCAmdXNiaGlkLT5jdHJsYnVmX2RtYSkpKQogCQlyZXR1cm4gLTE7CiAKIAlyZXR1cm4gMDsKQEAgLTE4NzgsMTQgKzEwMDcsMTYgQEAKIAogc3RhdGljIHZvaWQgaGlkX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQogewotCWlmIChoaWQtPmluYnVmKQotCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBoaWQtPmJ1ZnNpemUsIGhpZC0+aW5idWYsIGhpZC0+aW5idWZfZG1hKTsKLQlpZiAoaGlkLT5vdXRidWYpCi0JCXVzYl9idWZmZXJfZnJlZShkZXYsIGhpZC0+YnVmc2l6ZSwgaGlkLT5vdXRidWYsIGhpZC0+b3V0YnVmX2RtYSk7Ci0JaWYgKGhpZC0+Y3IpCi0JCXVzYl9idWZmZXJfZnJlZShkZXYsIHNpemVvZigqKGhpZC0+Y3IpKSwgaGlkLT5jciwgaGlkLT5jcl9kbWEpOwotCWlmIChoaWQtPmN0cmxidWYpCi0JCXVzYl9idWZmZXJfZnJlZShkZXYsIGhpZC0+YnVmc2l6ZSwgaGlkLT5jdHJsYnVmLCBoaWQtPmN0cmxidWZfZG1hKTsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKKworCWlmICh1c2JoaWQtPmluYnVmKQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCB1c2JoaWQtPmJ1ZnNpemUsIHVzYmhpZC0+aW5idWYsIHVzYmhpZC0+aW5idWZfZG1hKTsKKwlpZiAodXNiaGlkLT5vdXRidWYpCisJCXVzYl9idWZmZXJfZnJlZShkZXYsIHVzYmhpZC0+YnVmc2l6ZSwgdXNiaGlkLT5vdXRidWYsIHVzYmhpZC0+b3V0YnVmX2RtYSk7CisJaWYgKHVzYmhpZC0+Y3IpCisJCXVzYl9idWZmZXJfZnJlZShkZXYsIHNpemVvZigqKHVzYmhpZC0+Y3IpKSwgdXNiaGlkLT5jciwgdXNiaGlkLT5jcl9kbWEpOworCWlmICh1c2JoaWQtPmN0cmxidWYpCisJCXVzYl9idWZmZXJfZnJlZShkZXYsIHVzYmhpZC0+YnVmc2l6ZSwgdXNiaGlkLT5jdHJsYnVmLCB1c2JoaWQtPmN0cmxidWZfZG1hKTsKIH0KIAogLyoKQEAgLTE5MTEsNiArMTA0Miw3IEBACiAJdW5zaWduZWQgcXVpcmtzID0gMCwgcnNpemUgPSAwOwogCWNoYXIgKnJkZXNjOwogCWludCBuLCBsZW4sIGluc2l6ZSA9IDA7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZDsKIAogICAgICAgICAvKiBJZ25vcmUgYWxsIFdhY29tIGRldmljZXMgKi8KICAgICAgICAgaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVVNCX1ZFTkRPUl9JRF9XQUNPTSkKQEAgLTE5ODAsMTMgKzExMTIsMTkgQEAKIAlrZnJlZShyZGVzYyk7CiAJaGlkLT5xdWlya3MgPSBxdWlya3M7CiAKLQloaWQtPmJ1ZnNpemUgPSBISURfTUlOX0JVRkZFUl9TSVpFOwotCWhpZF9maW5kX21heF9yZXBvcnQoaGlkLCBISURfSU5QVVRfUkVQT1JULCAmaGlkLT5idWZzaXplKTsKLQloaWRfZmluZF9tYXhfcmVwb3J0KGhpZCwgSElEX09VVFBVVF9SRVBPUlQsICZoaWQtPmJ1ZnNpemUpOwotCWhpZF9maW5kX21heF9yZXBvcnQoaGlkLCBISURfRkVBVFVSRV9SRVBPUlQsICZoaWQtPmJ1ZnNpemUpOworCWlmICghKHVzYmhpZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JoaWRfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQorCQlnb3RvIGZhaWw7CiAKLQlpZiAoaGlkLT5idWZzaXplID4gSElEX01BWF9CVUZGRVJfU0laRSkKLQkJaGlkLT5idWZzaXplID0gSElEX01BWF9CVUZGRVJfU0laRTsKKwloaWQtPmRyaXZlcl9kYXRhID0gdXNiaGlkOworCXVzYmhpZC0+aGlkID0gaGlkOworCisJdXNiaGlkLT5idWZzaXplID0gSElEX01JTl9CVUZGRVJfU0laRTsKKwloaWRfZmluZF9tYXhfcmVwb3J0KGhpZCwgSElEX0lOUFVUX1JFUE9SVCwgJnVzYmhpZC0+YnVmc2l6ZSk7CisJaGlkX2ZpbmRfbWF4X3JlcG9ydChoaWQsIEhJRF9PVVRQVVRfUkVQT1JULCAmdXNiaGlkLT5idWZzaXplKTsKKwloaWRfZmluZF9tYXhfcmVwb3J0KGhpZCwgSElEX0ZFQVRVUkVfUkVQT1JULCAmdXNiaGlkLT5idWZzaXplKTsKKworCWlmICh1c2JoaWQtPmJ1ZnNpemUgPiBISURfTUFYX0JVRkZFUl9TSVpFKQorCQl1c2JoaWQtPmJ1ZnNpemUgPSBISURfTUFYX0JVRkZFUl9TSVpFOwogCiAJaGlkX2ZpbmRfbWF4X3JlcG9ydChoaWQsIEhJRF9JTlBVVF9SRVBPUlQsICZpbnNpemUpOwogCkBAIC0yMDE1LDQ3ICsxMTUzLDQ3IEBACiAJCQlpbnRlcnZhbCA9IGhpZF9tb3VzZXBvbGxfaW50ZXJ2YWw7CiAKIAkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZW5kcG9pbnQpKSB7Ci0JCQlpZiAoaGlkLT51cmJpbikKKwkJCWlmICh1c2JoaWQtPnVyYmluKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKCEoaGlkLT51cmJpbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKQorCQkJaWYgKCEodXNiaGlkLT51cmJpbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKQogCQkJCWdvdG8gZmFpbDsKIAkJCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKLQkJCXVzYl9maWxsX2ludF91cmIoaGlkLT51cmJpbiwgZGV2LCBwaXBlLCBoaWQtPmluYnVmLCBpbnNpemUsCisJCQl1c2JfZmlsbF9pbnRfdXJiKHVzYmhpZC0+dXJiaW4sIGRldiwgcGlwZSwgdXNiaGlkLT5pbmJ1ZiwgaW5zaXplLAogCQkJCQkgaGlkX2lycV9pbiwgaGlkLCBpbnRlcnZhbCk7Ci0JCQloaWQtPnVyYmluLT50cmFuc2Zlcl9kbWEgPSBoaWQtPmluYnVmX2RtYTsKLQkJCWhpZC0+dXJiaW4tPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQkJdXNiaGlkLT51cmJpbi0+dHJhbnNmZXJfZG1hID0gdXNiaGlkLT5pbmJ1Zl9kbWE7CisJCQl1c2JoaWQtPnVyYmluLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKIAkJfSBlbHNlIHsKLQkJCWlmIChoaWQtPnVyYm91dCkKKwkJCWlmICh1c2JoaWQtPnVyYm91dCkKIAkJCQljb250aW51ZTsKLQkJCWlmICghKGhpZC0+dXJib3V0ID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpCisJCQlpZiAoISh1c2JoaWQtPnVyYm91dCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKQogCQkJCWdvdG8gZmFpbDsKIAkJCXBpcGUgPSB1c2Jfc25kaW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKLQkJCXVzYl9maWxsX2ludF91cmIoaGlkLT51cmJvdXQsIGRldiwgcGlwZSwgaGlkLT5vdXRidWYsIDAsCisJCQl1c2JfZmlsbF9pbnRfdXJiKHVzYmhpZC0+dXJib3V0LCBkZXYsIHBpcGUsIHVzYmhpZC0+b3V0YnVmLCAwLAogCQkJCQkgaGlkX2lycV9vdXQsIGhpZCwgaW50ZXJ2YWwpOwotCQkJaGlkLT51cmJvdXQtPnRyYW5zZmVyX2RtYSA9IGhpZC0+b3V0YnVmX2RtYTsKLQkJCWhpZC0+dXJib3V0LT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkJCXVzYmhpZC0+dXJib3V0LT50cmFuc2Zlcl9kbWEgPSB1c2JoaWQtPm91dGJ1Zl9kbWE7CisJCQl1c2JoaWQtPnVyYm91dC0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CiAJCX0KIAl9CiAKLQlpZiAoIWhpZC0+dXJiaW4pIHsKKwlpZiAoIXVzYmhpZC0+dXJiaW4pIHsKIAkJZXJyKCJjb3VsZG4ndCBmaW5kIGFuIGlucHV0IGludGVycnVwdCBlbmRwb2ludCIpOwogCQlnb3RvIGZhaWw7CiAJfQogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaGlkLT53YWl0KTsKIAotCUlOSVRfV09SSygmaGlkLT5yZXNldF93b3JrLCBoaWRfcmVzZXQpOwotCXNldHVwX3RpbWVyKCZoaWQtPmlvX3JldHJ5LCBoaWRfcmV0cnlfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpIGhpZCk7CisJSU5JVF9XT1JLKCZ1c2JoaWQtPnJlc2V0X3dvcmssIGhpZF9yZXNldCk7CisJc2V0dXBfdGltZXIoJnVzYmhpZC0+aW9fcmV0cnksIGhpZF9yZXRyeV90aW1lb3V0LCAodW5zaWduZWQgbG9uZykgaGlkKTsKIAotCXNwaW5fbG9ja19pbml0KCZoaWQtPmlubG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmhpZC0+b3V0bG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmhpZC0+Y3RybGxvY2spOworCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmlubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnVzYmhpZC0+b3V0bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnVzYmhpZC0+Y3RybGxvY2spOwogCiAJaGlkLT52ZXJzaW9uID0gbGUxNl90b19jcHUoaGRlc2MtPmJjZEhJRCk7CiAJaGlkLT5jb3VudHJ5ID0gaGRlc2MtPmJDb3VudHJ5Q29kZTsKLQloaWQtPmRldiA9IGRldjsKLQloaWQtPmludGYgPSBpbnRmOwotCWhpZC0+aWZudW0gPSBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwloaWQtPmRldiA9ICZpbnRmLT5kZXY7CisJdXNiaGlkLT5pbnRmID0gaW50ZjsKKwl1c2JoaWQtPmlmbnVtID0gaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAKIAloaWQtPm5hbWVbMF0gPSAwOwogCkBAIC0yMDczLDYgKzEyMTEsMTAgQEAKIAkJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkJIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAorCWhpZC0+YnVzID0gQlVTX1VTQjsKKwloaWQtPnZlbmRvciA9IGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcjsKKwloaWQtPnByb2R1Y3QgPSBkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0OworCiAJdXNiX21ha2VfcGF0aChkZXYsIGhpZC0+cGh5cywgc2l6ZW9mKGhpZC0+cGh5cykpOwogCXN0cmxjYXQoaGlkLT5waHlzLCAiL2lucHV0Iiwgc2l6ZW9mKGhpZC0+cGh5cykpOwogCWxlbiA9IHN0cmxlbihoaWQtPnBoeXMpOwpAQCAtMjA4MywyMiArMTIyNSwyOCBAQAogCWlmICh1c2Jfc3RyaW5nKGRldiwgZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIsIGhpZC0+dW5pcSwgNjQpIDw9IDApCiAJCWhpZC0+dW5pcVswXSA9IDA7CiAKLQloaWQtPnVyYmN0cmwgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghaGlkLT51cmJjdHJsKQorCXVzYmhpZC0+dXJiY3RybCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1c2JoaWQtPnVyYmN0cmwpCiAJCWdvdG8gZmFpbDsKIAotCXVzYl9maWxsX2NvbnRyb2xfdXJiKGhpZC0+dXJiY3RybCwgZGV2LCAwLCAodm9pZCAqKSBoaWQtPmNyLAotCQkJICAgICBoaWQtPmN0cmxidWYsIDEsIGhpZF9jdHJsLCBoaWQpOwotCWhpZC0+dXJiY3RybC0+c2V0dXBfZG1hID0gaGlkLT5jcl9kbWE7Ci0JaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9kbWEgPSBoaWQtPmN0cmxidWZfZG1hOwotCWhpZC0+dXJiY3RybC0+dHJhbnNmZXJfZmxhZ3MgfD0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHwgVVJCX05PX1NFVFVQX0RNQV9NQVApOwotCisJdXNiX2ZpbGxfY29udHJvbF91cmIodXNiaGlkLT51cmJjdHJsLCBkZXYsIDAsICh2b2lkICopIHVzYmhpZC0+Y3IsCisJCQkgICAgIHVzYmhpZC0+Y3RybGJ1ZiwgMSwgaGlkX2N0cmwsIGhpZCk7CisJdXNiaGlkLT51cmJjdHJsLT5zZXR1cF9kbWEgPSB1c2JoaWQtPmNyX2RtYTsKKwl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2RtYSA9IHVzYmhpZC0+Y3RybGJ1Zl9kbWE7CisJdXNiaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9mbGFncyB8PSAoVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgfCBVUkJfTk9fU0VUVVBfRE1BX01BUCk7CisJaGlkLT5oaWRpbnB1dF9pbnB1dF9ldmVudCA9IHVzYl9oaWRpbnB1dF9pbnB1dF9ldmVudDsKKwloaWQtPmhpZGlucHV0X29wZW4gPSBoaWRpbnB1dF9vcGVuOworCWhpZC0+aGlkaW5wdXRfY2xvc2UgPSBoaWRpbnB1dF9jbG9zZTsKKyNpZmRlZiBDT05GSUdfVVNCX0hJRERFVgorCWhpZC0+aGlkZGV2X2hpZF9ldmVudCA9IGhpZGRldl9oaWRfZXZlbnQ7CisJaGlkLT5oaWRkZXZfcmVwb3J0X2V2ZW50ID0gaGlkZGV2X3JlcG9ydF9ldmVudDsKKyNlbmRpZgogCXJldHVybiBoaWQ7CiAKIGZhaWw6Ci0JdXNiX2ZyZWVfdXJiKGhpZC0+dXJiaW4pOwotCXVzYl9mcmVlX3VyYihoaWQtPnVyYm91dCk7Ci0JdXNiX2ZyZWVfdXJiKGhpZC0+dXJiY3RybCk7CisJdXNiX2ZyZWVfdXJiKHVzYmhpZC0+dXJiaW4pOworCXVzYl9mcmVlX3VyYih1c2JoaWQtPnVyYm91dCk7CisJdXNiX2ZyZWVfdXJiKHVzYmhpZC0+dXJiY3RybCk7CiAJaGlkX2ZyZWVfYnVmZmVycyhkZXYsIGhpZCk7CiAJaGlkX2ZyZWVfZGV2aWNlKGhpZCk7CiAKQEAgLTIxMDgsMTggKzEyNTYsMjEgQEAKIHN0YXRpYyB2b2lkIGhpZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkOwogCiAJaWYgKCFoaWQpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnEoJmhpZC0+aW5sb2NrKTsJLyogU3luYyB3aXRoIGVycm9yIGhhbmRsZXIgKi8KLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotCXNwaW5fdW5sb2NrX2lycSgmaGlkLT5pbmxvY2spOwotCXVzYl9raWxsX3VyYihoaWQtPnVyYmluKTsKLQl1c2Jfa2lsbF91cmIoaGlkLT51cmJvdXQpOwotCXVzYl9raWxsX3VyYihoaWQtPnVyYmN0cmwpOworCXVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKLQlkZWxfdGltZXJfc3luYygmaGlkLT5pb19yZXRyeSk7CisJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5pbmxvY2spOwkvKiBTeW5jIHdpdGggZXJyb3IgaGFuZGxlciAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JoaWQtPmlubG9jayk7CisJdXNiX2tpbGxfdXJiKHVzYmhpZC0+dXJiaW4pOworCXVzYl9raWxsX3VyYih1c2JoaWQtPnVyYm91dCk7CisJdXNiX2tpbGxfdXJiKHVzYmhpZC0+dXJiY3RybCk7CisKKwlkZWxfdGltZXJfc3luYygmdXNiaGlkLT5pb19yZXRyeSk7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAogCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKQEAgLTIxMjcsMTEgKzEyNzgsMTEgQEAKIAlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKQogCQloaWRkZXZfZGlzY29ubmVjdChoaWQpOwogCi0JdXNiX2ZyZWVfdXJiKGhpZC0+dXJiaW4pOwotCXVzYl9mcmVlX3VyYihoaWQtPnVyYmN0cmwpOwotCXVzYl9mcmVlX3VyYihoaWQtPnVyYm91dCk7CisJdXNiX2ZyZWVfdXJiKHVzYmhpZC0+dXJiaW4pOworCXVzYl9mcmVlX3VyYih1c2JoaWQtPnVyYmN0cmwpOworCXVzYl9mcmVlX3VyYih1c2JoaWQtPnVyYm91dCk7CiAKLQloaWRfZnJlZV9idWZmZXJzKGhpZC0+ZGV2LCBoaWQpOworCWhpZF9mcmVlX2J1ZmZlcnMoaGlkX3RvX3VzYl9kZXYoaGlkKSwgaGlkKTsKIAloaWRfZnJlZV9kZXZpY2UoaGlkKTsKIH0KIApAQCAtMjE0OCw3ICsxMjk5LDcgQEAKIAlpZiAoIShoaWQgPSB1c2JfaGlkX2NvbmZpZ3VyZShpbnRmKSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaGlkX2luaXRfcmVwb3J0cyhoaWQpOworCXVzYmhpZF9pbml0X3JlcG9ydHMoaGlkKTsKIAloaWRfZHVtcF9kZXZpY2UoaGlkKTsKIAogCWlmICghaGlkaW5wdXRfY29ubmVjdChoaWQpKQpAQCAtMjE2NCw2ICsxMzE1LDEzIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCS8qIFRoaXMgb25seSBnZXRzIGNhbGxlZCB3aGVuIHdlIGFyZSBhIHNpbmdsZS1pbnB1dCAobW9zdCBvZiB0aGUKKwkgKiB0aW1lKS4gSU9XLCBub3QgYSBISURfUVVJUktfTVVMVElfSU5QVVQuIFRoZSBoaWRfZmZfaW5pdCgpIGlzCisJICogb25seSB1c2VmdWwgaW4gdGhpcyBjYXNlLCBhbmQgbm90IGZvciBtdWx0aS1pbnB1dCBxdWlya3MuICovCisJaWYgKChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgJiYKKwkJCSEoaGlkLT5xdWlya3MgJiBISURfUVVJUktfTVVMVElfSU5QVVQpKQorCQloaWRfZmZfaW5pdChoaWQpOworCiAJcHJpbnRrKEtFUk5fSU5GTyk7CiAKIAlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCkBAIC0yMTk0LDEyICsxMzUyLDEzIEBACiBzdGF0aWMgaW50IGhpZF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxKCZoaWQtPmlubG9jayk7CS8qIFN5bmMgd2l0aCBlcnJvciBoYW5kbGVyICovCi0Jc2V0X2JpdChISURfU1VTUEVOREVELCAmaGlkLT5pb2ZsKTsKLQlzcGluX3VubG9ja19pcnEoJmhpZC0+aW5sb2NrKTsKLQlkZWxfdGltZXIoJmhpZC0+aW9fcmV0cnkpOwotCXVzYl9raWxsX3VyYihoaWQtPnVyYmluKTsKKwlzcGluX2xvY2tfaXJxKCZ1c2JoaWQtPmlubG9jayk7CS8qIFN5bmMgd2l0aCBlcnJvciBoYW5kbGVyICovCisJc2V0X2JpdChISURfU1VTUEVOREVELCAmdXNiaGlkLT5pb2ZsKTsKKwlzcGluX3VubG9ja19pcnEoJnVzYmhpZC0+aW5sb2NrKTsKKwlkZWxfdGltZXIoJnVzYmhpZC0+aW9fcmV0cnkpOworCXVzYl9raWxsX3VyYih1c2JoaWQtPnVyYmluKTsKIAlkZXZfZGJnKCZpbnRmLT5kZXYsICJzdXNwZW5kXG4iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMDcsMTAgKzEzNjYsMTEgQEAKIHN0YXRpYyBpbnQgaGlkX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAJaW50IHN0YXR1czsKIAotCWNsZWFyX2JpdChISURfU1VTUEVOREVELCAmaGlkLT5pb2ZsKTsKLQloaWQtPnJldHJ5X2RlbGF5ID0gMDsKKwljbGVhcl9iaXQoSElEX1NVU1BFTkRFRCwgJnVzYmhpZC0+aW9mbCk7CisJdXNiaGlkLT5yZXRyeV9kZWxheSA9IDA7CiAJc3RhdHVzID0gaGlkX3N0YXJ0X2luKGhpZCk7CiAJZGV2X2RiZygmaW50Zi0+ZGV2LCAicmVzdW1lIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWZmLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZmYuYwppbmRleCBhOGZjNDZjLi41OWVkNjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZmYuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZmYuYwpAQCAtMzIsNyArMzIsOCBAQAogI3VuZGVmIERFQlVHCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKLSNpbmNsdWRlICJoaWQuaCIKKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlICJ1c2JoaWQuaCIKIAogLyoKICAqIFRoaXMgdGFibGUgY29udGFpbnMgcG9pbnRlcnMgdG8gaW5pdGlhbGl6ZXJzLiBUbyBhZGQgc3VwcG9ydCBmb3IgbmV3CkBAIC03MCw4ICs3MSw4IEBACiBpbnQgaGlkX2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCkKIHsKIAlzdHJ1Y3QgaGlkX2ZmX2luaXRpYWxpemVyICppbml0OwotCWludCB2ZW5kb3IgPSBsZTE2X3RvX2NwdShoaWQtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7Ci0JaW50IHByb2R1Y3QgPSBsZTE2X3RvX2NwdShoaWQtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCWludCB2ZW5kb3IgPSBsZTE2X3RvX2NwdShoaWRfdG9fdXNiX2RldihoaWQpLT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwlpbnQgcHJvZHVjdCA9IGxlMTZfdG9fY3B1KGhpZF90b191c2JfZGV2KGhpZCktPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKIAogCWZvciAoaW5pdCA9IGluaXRzOyBpbml0LT5pZFZlbmRvcjsgaW5pdCsrKQogCQlpZiAoaW5pdC0+aWRWZW5kb3IgPT0gdmVuZG9yICYmIGluaXQtPmlkUHJvZHVjdCA9PSBwcm9kdWN0KQpAQCAtNzksMyArODAsNSBAQAogCiAJcmV0dXJuIGluaXQtPmluaXQoaGlkKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGhpZF9mZl9pbml0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1sZ2ZmLmMKaW5kZXggOTNkYTIyMi4uZTQ3NDY2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWxnZmYuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtbGdmZi5jCkBAIC0yOSw3ICsyOSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgImhpZC5oIgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgInVzYmhpZC5oIgogCiBzdHJ1Y3QgZGV2aWNlX3R5cGUgewogCXUxNiBpZFZlbmRvcjsKQEAgLTc1LDcgKzc2LDcgQEAKIAkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSB4OwogCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHk7CiAJCWRiZygiKHgsIHkpPSglMDR4LCAlMDR4KSIsIHgsIHkpOwotCQloaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOwogCQlicmVhazsKIAogCWNhc2UgRkZfUlVNQkxFOgpAQCAtOTAsNyArOTEsNyBAQAogCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IGxlZnQ7CiAJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gcmlnaHQ7CiAJCWRiZygiKGxlZnQsIHJpZ2h0KT0oJTA0eCwgJTA0eCkiLCBsZWZ0LCByaWdodCk7Ci0JCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1waWRmZi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLXBpZGZmLmMKaW5kZXggNTQyMGMxMy4uY2JkMmQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLXBpZGZmLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLXBpZGZmLmMKQEAgLTI4LDcgKzI4LDkgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogCi0jaW5jbHVkZSAiaGlkLmgiCisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisKKyNpbmNsdWRlICJ1c2JoaWQuaCIKIAogI2RlZmluZQlQSURfRUZGRUNUU19NQVgJCTY0CiAKQEAgLTI2MCw3ICsyNjIsNyBAQAogCWRlYnVnKCJhdHRhY2sgJXUgPT4gJWQiLCBlbnZlbG9wZS0+YXR0YWNrX2xldmVsLAogCSAgICAgIHBpZGZmLT5zZXRfZW52ZWxvcGVbUElEX0FUVEFDS19MRVZFTF0udmFsdWVbMF0pOwogCi0JaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX1NFVF9FTlZFTE9QRV0sCisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX1NFVF9FTlZFTE9QRV0sCiAJCQkgIFVTQl9ESVJfT1VUKTsKIH0KIApAQCAtMjg3LDcgKzI4OSw3IEBACiAJcGlkZmZfc2V0X3NpZ25lZCgmcGlkZmYtPnNldF9jb25zdGFudFtQSURfTUFHTklUVURFXSwKIAkJCSBlZmZlY3QtPnUuY29uc3RhbnQubGV2ZWwpOwogCi0JaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX1NFVF9DT05TVEFOVF0sCisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX1NFVF9DT05TVEFOVF0sCiAJCQkgIFVTQl9ESVJfT1VUKTsKIH0KIApAQCAtMzIyLDcgKzMyNCw3IEBACiAJCQkJcGlkZmYtPmVmZmVjdF9kaXJlY3Rpb24pOwogCXBpZGZmLT5zZXRfZWZmZWN0W1BJRF9TVEFSVF9ERUxBWV0udmFsdWVbMF0gPSBlZmZlY3QtPnJlcGxheS5kZWxheTsKIAotCWhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9TRVRfRUZGRUNUXSwKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChwaWRmZi0+aGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfU0VUX0VGRkVDVF0sCiAJCQkgIFVTQl9ESVJfT1VUKTsKIH0KIApAQCAtMzU0LDcgKzM1Niw3IEBACiAJcGlkZmZfc2V0KCZwaWRmZi0+c2V0X3BlcmlvZGljW1BJRF9QSEFTRV0sIGVmZmVjdC0+dS5wZXJpb2RpYy5waGFzZSk7CiAJcGlkZmYtPnNldF9wZXJpb2RpY1tQSURfUEVSSU9EXS52YWx1ZVswXSA9IGVmZmVjdC0+dS5wZXJpb2RpYy5wZXJpb2Q7CiAKLQloaWRfc3VibWl0X3JlcG9ydChwaWRmZi0+aGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfU0VUX1BFUklPRElDXSwKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChwaWRmZi0+aGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfU0VUX1BFUklPRElDXSwKIAkJCSAgVVNCX0RJUl9PVVQpOwogCiB9CkBAIC0zOTYsOCArMzk4LDggQEAKIAkJCSAgZWZmZWN0LT51LmNvbmRpdGlvbltpXS5sZWZ0X3NhdHVyYXRpb24pOwogCQlwaWRmZl9zZXQoJnBpZGZmLT5zZXRfY29uZGl0aW9uW1BJRF9ERUFEX0JBTkRdLAogCQkJICBlZmZlY3QtPnUuY29uZGl0aW9uW2ldLmRlYWRiYW5kKTsKLQkJaGlkX3dhaXRfaW8ocGlkZmYtPmhpZCk7Ci0JCWhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9TRVRfQ09ORElUSU9OXSwKKwkJdXNiaGlkX3dhaXRfaW8ocGlkZmYtPmhpZCk7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9TRVRfQ09ORElUSU9OXSwKIAkJCQkgIFVTQl9ESVJfT1VUKTsKIAl9CiB9CkBAIC00MzgsNyArNDQwLDcgQEAKIAkJCSBlZmZlY3QtPnUucmFtcC5zdGFydF9sZXZlbCk7CiAJcGlkZmZfc2V0X3NpZ25lZCgmcGlkZmYtPnNldF9yYW1wW1BJRF9SQU1QX0VORF0sCiAJCQkgZWZmZWN0LT51LnJhbXAuZW5kX2xldmVsKTsKLQloaWRfc3VibWl0X3JlcG9ydChwaWRmZi0+aGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfU0VUX1JBTVBdLAorCXVzYmhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9TRVRfUkFNUF0sCiAJCQkgIFVTQl9ESVJfT1VUKTsKIH0KIApAQCAtNDYzLDE5ICs0NjUsMTkgQEAKIAlpbnQgajsKIAogCXBpZGZmLT5jcmVhdGVfbmV3X2VmZmVjdF90eXBlLT52YWx1ZVswXSA9IGVmbnVtOwotCWhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9DUkVBVEVfTkVXX0VGRkVDVF0sCisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX0NSRUFURV9ORVdfRUZGRUNUXSwKIAkJCSAgVVNCX0RJUl9PVVQpOwogCWRlYnVnKCJjcmVhdGVfbmV3X2VmZmVjdCBzZW50LCB0eXBlOiAlZCIsIGVmbnVtKTsKIAogCXBpZGZmLT5ibG9ja19sb2FkW1BJRF9FRkZFQ1RfQkxPQ0tfSU5ERVhdLnZhbHVlWzBdID0gMDsKIAlwaWRmZi0+YmxvY2tfbG9hZF9zdGF0dXMtPnZhbHVlWzBdID0gMDsKLQloaWRfd2FpdF9pbyhwaWRmZi0+aGlkKTsKKwl1c2JoaWRfd2FpdF9pbyhwaWRmZi0+aGlkKTsKIAogCWZvciAoaiA9IDA7IGogPCA2MDsgaisrKSB7CiAJCWRlYnVnKCJwaWRfYmxvY2tfbG9hZCByZXF1ZXN0ZWQiKTsKLQkJaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX0JMT0NLX0xPQURdLAorCQl1c2JoaWRfc3VibWl0X3JlcG9ydChwaWRmZi0+aGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfQkxPQ0tfTE9BRF0sCiAJCQkJICBVU0JfRElSX0lOKTsKLQkJaGlkX3dhaXRfaW8ocGlkZmYtPmhpZCk7CisJCXVzYmhpZF93YWl0X2lvKHBpZGZmLT5oaWQpOwogCQlpZiAocGlkZmYtPmJsb2NrX2xvYWRfc3RhdHVzLT52YWx1ZVswXSA9PQogCQkgICAgcGlkZmYtPnN0YXR1c19pZFtQSURfQkxPQ0tfTE9BRF9TVUNDRVNTXSkgewogCQkJZGVidWcoImRldmljZSByZXBvcnRlZCBmcmVlIG1lbW9yeTogJWQgYnl0ZXMiLApAQCAtNTExLDggKzUxMyw4IEBACiAJCXBpZGZmLT5lZmZlY3Rfb3BlcmF0aW9uW1BJRF9MT09QX0NPVU5UXS52YWx1ZVswXSA9IG47CiAJfQogCi0JaGlkX3dhaXRfaW8ocGlkZmYtPmhpZCk7Ci0JaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX0VGRkVDVF9PUEVSQVRJT05dLAorCXVzYmhpZF93YWl0X2lvKHBpZGZmLT5oaWQpOworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9FRkZFQ1RfT1BFUkFUSU9OXSwKIAkJCSAgVVNCX0RJUl9PVVQpOwogfQogCkBAIC01MzQsNyArNTM2LDcgQEAKIHN0YXRpYyB2b2lkIHBpZGZmX2VyYXNlX3BpZChzdHJ1Y3QgcGlkZmZfZGV2aWNlICpwaWRmZiwgaW50IHBpZF9pZCkKIHsKIAlwaWRmZi0+YmxvY2tfZnJlZVtQSURfRUZGRUNUX0JMT0NLX0lOREVYXS52YWx1ZVswXSA9IHBpZF9pZDsKLQloaWRfc3VibWl0X3JlcG9ydChwaWRmZi0+aGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfQkxPQ0tfRlJFRV0sCisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX0JMT0NLX0ZSRUVdLAogCQkJICBVU0JfRElSX09VVCk7CiB9CiAKQEAgLTcxNCw3ICs3MTYsNyBAQAogCXN0cnVjdCBwaWRmZl9kZXZpY2UgKnBpZGZmID0gZGV2LT5mZi0+cHJpdmF0ZTsKIAogCXBpZGZmX3NldCgmcGlkZmYtPmRldmljZV9nYWluW1BJRF9ERVZJQ0VfR0FJTl9GSUVMRF0sIGdhaW4pOwotCWhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9ERVZJQ0VfR0FJTl0sCisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQocGlkZmYtPmhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX0RFVklDRV9HQUlOXSwKIAkJCSAgVVNCX0RJUl9PVVQpOwogfQogCkBAIC03MzksNyArNzQxLDcgQEAKIAlwaWRmZl9zZXQoJnBpZGZmLT5zZXRfZWZmZWN0W1BJRF9HQUlOXSwgbWFnbml0dWRlKTsKIAlwaWRmZi0+c2V0X2VmZmVjdFtQSURfU1RBUlRfREVMQVldLnZhbHVlWzBdID0gMDsKIAotCWhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9TRVRfRUZGRUNUXSwKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChwaWRmZi0+aGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfU0VUX0VGRkVDVF0sCiAJCQkgIFVTQl9ESVJfT1VUKTsKIH0KIApAQCAtMTE2MywxOSArMTE2NSwxOSBAQAogCiAJcGlkZmYtPmRldmljZV9jb250cm9sLT52YWx1ZVswXSA9IHBpZGZmLT5jb250cm9sX2lkW1BJRF9SRVNFVF07CiAJLyogV2UgcmVzZXQgdHdpY2UgYXMgc29tZXRpbWVzIGhpZF93YWl0X2lvIGlzbid0IHdhaXRpbmcgbG9uZyBlbm91Z2ggKi8KLQloaWRfc3VibWl0X3JlcG9ydChoaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9ERVZJQ0VfQ09OVFJPTF0sIFVTQl9ESVJfT1VUKTsKLQloaWRfd2FpdF9pbyhoaWQpOwotCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX0RFVklDRV9DT05UUk9MXSwgVVNCX0RJUl9PVVQpOwotCWhpZF93YWl0X2lvKGhpZCk7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfREVWSUNFX0NPTlRST0xdLCBVU0JfRElSX09VVCk7CisJdXNiaGlkX3dhaXRfaW8oaGlkKTsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9ERVZJQ0VfQ09OVFJPTF0sIFVTQl9ESVJfT1VUKTsKKwl1c2JoaWRfd2FpdF9pbyhoaWQpOwogCiAJcGlkZmYtPmRldmljZV9jb250cm9sLT52YWx1ZVswXSA9CiAJCXBpZGZmLT5jb250cm9sX2lkW1BJRF9FTkFCTEVfQUNUVUFUT1JTXTsKLQloaWRfc3VibWl0X3JlcG9ydChoaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9ERVZJQ0VfQ09OVFJPTF0sIFVTQl9ESVJfT1VUKTsKLQloaWRfd2FpdF9pbyhoaWQpOworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX0RFVklDRV9DT05UUk9MXSwgVVNCX0RJUl9PVVQpOworCXVzYmhpZF93YWl0X2lvKGhpZCk7CiAKIAkvKiBwb29sIHJlcG9ydCBpcyBzb21ldGltZXMgbWVzc2VkIHVwLCByZWZldGNoIGl0ICovCi0JaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfUE9PTF0sIFVTQl9ESVJfSU4pOwotCWhpZF93YWl0X2lvKGhpZCk7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfUE9PTF0sIFVTQl9ESVJfSU4pOworCXVzYmhpZF93YWl0X2lvKGhpZCk7CiAKIAlpZiAocGlkZmYtPnBvb2xbUElEX1NJTVVMVEFORU9VU19NQVhdLnZhbHVlKSB7CiAJCWludCBzaW1fZWZmZWN0cyA9IHBpZGZmLT5wb29sW1BJRF9TSU1VTFRBTkVPVVNfTUFYXS52YWx1ZVswXTsKQEAgLTExODcsOSArMTE4OSw5IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlkZWJ1ZygicGlkX3Bvb2wgcmVxdWVzdGVkIGFnYWluIik7Ci0JCQloaWRfc3VibWl0X3JlcG9ydChoaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9QT09MXSwKKwkJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGlkZmYtPnJlcG9ydHNbUElEX1BPT0xdLAogCQkJCQkgIFVTQl9ESVJfSU4pOwotCQkJaGlkX3dhaXRfaW8oaGlkKTsKKwkJCXVzYmhpZF93YWl0X2lvKGhpZCk7CiAJCX0KIAl9CiB9CkBAIC0xMjc1LDcgKzEyNzcsNyBAQAogCiAJaWYgKHRlc3RfYml0KEZGX0dBSU4sIGRldi0+ZmZiaXQpKSB7CiAJCXBpZGZmX3NldCgmcGlkZmYtPmRldmljZV9nYWluW1BJRF9ERVZJQ0VfR0FJTl9GSUVMRF0sIDB4ZmZmZik7Ci0JCWhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9ERVZJQ0VfR0FJTl0sCisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9ERVZJQ0VfR0FJTl0sCiAJCQkJICBVU0JfRElSX09VVCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtdG1mZi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLXRtZmYuYwppbmRleCAyZDViZTRjLi5hYjY3MzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtdG1mZi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC10bWZmLmMKQEAgLTMyLDcgKzMyLDggQEAKICN1bmRlZiBERUJVRwogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogCi0jaW5jbHVkZSAiaGlkLmgiCisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSAidXNiaGlkLmgiCiAKIC8qIFVzYWdlcyBmb3IgdGhydXN0bWFzdGVyIGRldmljZXMgSSBrbm93IGFib3V0ICovCiAjZGVmaW5lIFRIUlVTVE1BU1RFUl9VU0FHRV9SVU1CTEVfTFIJKEhJRF9VUF9HRU5ERVNLIHwgMHhiYikKQEAgLTcwLDcgKzcxLDcgQEAKIAl0bWZmLT5ydW1ibGUtPnZhbHVlWzBdID0gbGVmdDsKIAl0bWZmLT5ydW1ibGUtPnZhbHVlWzFdID0gcmlnaHQ7CiAJZGJnKCIobGVmdCxyaWdodCk9KCUwOHgsICUwOHgpIiwgbGVmdCwgcmlnaHQpOwotCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgdG1mZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCB0bWZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLXpwZmYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC16cGZmLmMKaW5kZXggZDJjZTMyMS4uN2JkODIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLXpwZmYuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtenBmZi5jCkBAIC0yNyw3ICsyNyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgImhpZC5oIgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgInVzYmhpZC5oIgogCiBzdHJ1Y3QgenBmZl9kZXZpY2UgewogCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CkBAIC01Niw3ICs1Nyw3IEBACiAJenBmZi0+cmVwb3J0LT5maWVsZFsyXS0+dmFsdWVbMF0gPSBsZWZ0OwogCXpwZmYtPnJlcG9ydC0+ZmllbGRbM10tPnZhbHVlWzBdID0gcmlnaHQ7CiAJZGVidWcoInJ1bm5pbmcgd2l0aCAweCUwMnggMHglMDJ4IiwgbGVmdCwgcmlnaHQpOwotCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgenBmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCB6cGZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAxLDcgKzEwMiw3IEBACiAJenBmZi0+cmVwb3J0LT5maWVsZFsxXS0+dmFsdWVbMF0gPSAweDAyOwogCXpwZmYtPnJlcG9ydC0+ZmllbGRbMl0tPnZhbHVlWzBdID0gMHgwMDsKIAl6cGZmLT5yZXBvcnQtPmZpZWxkWzNdLT52YWx1ZVswXSA9IDB4MDA7Ci0JaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCB6cGZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHpwZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRm9yY2UgZmVlZGJhY2sgZm9yIFplcm9wbHVzIGJhc2VkIGRldmljZXMgYnkgIgogCSAgICAgICAiQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKaW5kZXggN2RjMTRkMC4uYThiM2Q2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKQEAgLTMyLDggKzMyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSAiaGlkLmgiCisjaW5jbHVkZSA8bGludXgvaGlkLmg+CiAjaW5jbHVkZSA8bGludXgvaGlkZGV2Lmg+CisjaW5jbHVkZSAidXNiaGlkLmgiCiAKICNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCiAjZGVmaW5lIEhJRERFVl9NSU5PUl9CQVNFCTAKQEAgLTE5Niw3ICsxOTcsNyBAQAogCiAJaGlkZGV2X3NlbmRfZXZlbnQoaGlkLCAmdXJlZik7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKGhpZGRldl9oaWRfZXZlbnQpOwogCiB2b2lkIGhpZGRldl9yZXBvcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCkKIHsKQEAgLTIxMyw2ICsyMTQsNyBAQAogCiAJaGlkZGV2X3NlbmRfZXZlbnQoaGlkLCAmdXJlZik7CiB9CisKIC8qCiAgKiBmYXN5bmMgZmlsZSBvcAogICovCkBAIC0yMzksNyArMjQxLDcgQEAKIAogCWlmICghLS1saXN0LT5oaWRkZXYtPm9wZW4pIHsKIAkJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpCi0JCQloaWRfY2xvc2UobGlzdC0+aGlkZGV2LT5oaWQpOworCQkJdXNiaGlkX2Nsb3NlKGxpc3QtPmhpZGRldi0+aGlkKTsKIAkJZWxzZQogCQkJa2ZyZWUobGlzdC0+aGlkZGV2KTsKIAl9CkBAIC0yNzAsNyArMjcyLDcgQEAKIAogCWlmICghbGlzdC0+aGlkZGV2LT5vcGVuKyspCiAJCWlmIChsaXN0LT5oaWRkZXYtPmV4aXN0KQotCQkJaGlkX29wZW4oaGlkZGV2X3RhYmxlW2ldLT5oaWQpOworCQkJdXNiaGlkX29wZW4oaGlkZGV2X3RhYmxlW2ldLT5oaWQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zODIsNyArMzg0LDcgQEAKIAlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGhpZGRldiAqaGlkZGV2ID0gbGlzdC0+aGlkZGV2OwogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBoaWRkZXYtPmhpZDsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaGlkLT5kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGhpZF90b191c2JfZGV2KGhpZCk7CiAJc3RydWN0IGhpZGRldl9jb2xsZWN0aW9uX2luZm8gY2luZm87CiAJc3RydWN0IGhpZGRldl9yZXBvcnRfaW5mbyByaW5mbzsKIAlzdHJ1Y3QgaGlkZGV2X2ZpZWxkX2luZm8gZmluZm87CkBAIC0zOTEsNiArMzkzLDcgQEAKIAlzdHJ1Y3QgaGlkZGV2X2RldmluZm8gZGluZm87CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAl2b2lkIF9fdXNlciAqdXNlcl9hcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGk7CiAKQEAgLTQyMCw3ICs0MjMsNyBAQAogCQlkaW5mby5idXN0eXBlID0gQlVTX1VTQjsKIAkJZGluZm8uYnVzbnVtID0gZGV2LT5idXMtPmJ1c251bTsKIAkJZGluZm8uZGV2bnVtID0gZGV2LT5kZXZudW07Ci0JCWRpbmZvLmlmbnVtID0gaGlkLT5pZm51bTsKKwkJZGluZm8uaWZudW0gPSB1c2JoaWQtPmlmbnVtOwogCQlkaW5mby52ZW5kb3IgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOwogCQlkaW5mby5wcm9kdWN0ID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CiAJCWRpbmZvLnZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKQEAgLTQ3OSw3ICs0ODIsNyBAQAogCQl9CiAKIAljYXNlIEhJRElPQ0lOSVRSRVBPUlQ6Ci0JCWhpZF9pbml0X3JlcG9ydHMoaGlkKTsKKwkJdXNiaGlkX2luaXRfcmVwb3J0cyhoaWQpOwogCiAJCXJldHVybiAwOwogCkBAIC00OTMsOCArNDk2LDggQEAKIAkJaWYgKChyZXBvcnQgPSBoaWRkZXZfbG9va3VwX3JlcG9ydChoaWQsICZyaW5mbykpID09IE5VTEwpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQloaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9JTik7Ci0JCWhpZF93YWl0X2lvKGhpZCk7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX0lOKTsKKwkJdXNiaGlkX3dhaXRfaW8oaGlkKTsKIAogCQlyZXR1cm4gMDsKIApAQCAtNTA4LDggKzUxMSw4IEBACiAJCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKLQkJaGlkX3dhaXRfaW8oaGlkKTsKKwkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKKwkJdXNiaGlkX3dhaXRfaW8oaGlkKTsKIAogCQlyZXR1cm4gMDsKIApAQCAtNzQ1LDYgKzc0OCw3IEBACiBpbnQgaGlkZGV2X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKIAlzdHJ1Y3QgaGlkZGV2ICpoaWRkZXY7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAJaW50IGk7CiAJaW50IHJldHZhbDsKIApAQCAtNzYwLDcgKzc2NCw3IEBACiAJaWYgKCEoaGlkZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhpZGRldiksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIC0xOwogCi0JcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihoaWQtPmludGYsICZoaWRkZXZfY2xhc3MpOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYodXNiaGlkLT5pbnRmLCAmaGlkZGV2X2NsYXNzKTsKIAlpZiAocmV0dmFsKSB7CiAJCWVycigiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOwogCQlrZnJlZShoaWRkZXYpOwpAQCAtNzcyLDEwICs3NzYsMTAgQEAKIAloaWRkZXYtPmhpZCA9IGhpZDsKIAloaWRkZXYtPmV4aXN0ID0gMTsKIAotCWhpZC0+bWlub3IgPSBoaWQtPmludGYtPm1pbm9yOworCWhpZC0+bWlub3IgPSB1c2JoaWQtPmludGYtPm1pbm9yOwogCWhpZC0+aGlkZGV2ID0gaGlkZGV2OwogCi0JaGlkZGV2X3RhYmxlW2hpZC0+aW50Zi0+bWlub3IgLSBISURERVZfTUlOT1JfQkFTRV0gPSBoaWRkZXY7CisJaGlkZGV2X3RhYmxlW3VzYmhpZC0+aW50Zi0+bWlub3IgLSBISURERVZfTUlOT1JfQkFTRV0gPSBoaWRkZXY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc4OCwxNCArNzkyLDE1IEBACiB2b2lkIGhpZGRldl9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7CiAJc3RydWN0IGhpZGRldiAqaGlkZGV2ID0gaGlkLT5oaWRkZXY7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKIAloaWRkZXYtPmV4aXN0ID0gMDsKIAogCWhpZGRldl90YWJsZVtoaWRkZXYtPmhpZC0+bWlub3IgLSBISURERVZfTUlOT1JfQkFTRV0gPSBOVUxMOwotCXVzYl9kZXJlZ2lzdGVyX2RldihoaWRkZXYtPmhpZC0+aW50ZiwgJmhpZGRldl9jbGFzcyk7CisJdXNiX2RlcmVnaXN0ZXJfZGV2KHVzYmhpZC0+aW50ZiwgJmhpZGRldl9jbGFzcyk7CiAKIAlpZiAoaGlkZGV2LT5vcGVuKSB7Ci0JCWhpZF9jbG9zZShoaWRkZXYtPmhpZCk7CisJCXVzYmhpZF9jbG9zZShoaWRkZXYtPmhpZCk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaGlkZGV2LT53YWl0KTsKIAl9IGVsc2UgewogCQlrZnJlZShoaWRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvdXNiaGlkLmggYi9kcml2ZXJzL3VzYi9pbnB1dC91c2JoaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDIzZjk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvdXNiaGlkLmgKQEAgLTAsMCArMSw4NyBAQAorI2lmbmRlZiBfX1VTQkhJRF9ICisjZGVmaW5lIF9fVVNCSElEX0gKKworLyoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpaworICogIENvcHlyaWdodCAoYykgMjAwNiBKaXJpIEtvc2luYQorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworLyogIEFQSSBwcm92aWRlZCBieSBoaWQtY29yZS5jIGZvciBVU0IgSElEIGRyaXZlcnMgKi8KK2ludCB1c2JoaWRfd2FpdF9pbyhzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKK3ZvaWQgdXNiaGlkX2Nsb3NlKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOworaW50IHVzYmhpZF9vcGVuKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwordm9pZCB1c2JoaWRfaW5pdF9yZXBvcnRzKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwordm9pZCB1c2JoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcik7CisKKy8qCisgKiBVU0Itc3BlY2lmaWMgSElEIHN0cnVjdCwgdG8gYmUgcG9pbnRlZCB0bworICogZnJvbSBzdHJ1Y3QgaGlkX2RldmljZS0+ZHJpdmVyX2RhdGEKKyAqLworCitzdHJ1Y3QgdXNiaGlkX2RldmljZSB7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZDsJCQkJCQkvKiBwb2ludGVyIHRvIGNvcnJlc3BvbmRpbmcgSElEIGRldiAqLworCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTQiBpbnRlcmZhY2UgKi8KKwlpbnQgaWZudW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNCIGludGVyZmFjZSBudW1iZXIgKi8KKworCXVuc2lnbmVkIGludCBidWZzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVUkIgYnVmZmVyIHNpemUgKi8KKworCXN0cnVjdCB1cmIgKnVyYmluOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBVUkIgKi8KKwljaGFyICppbmJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5wdXQgYnVmZmVyICovCisJZG1hX2FkZHJfdCBpbmJ1Zl9kbWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IGJ1ZmZlciBkbWEgKi8KKwlzcGlubG9ja190IGlubG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5wdXQgZmlmbyBzcGlubG9jayAqLworCisJc3RydWN0IHVyYiAqdXJiY3RybDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgVVJCICovCisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgcmVxdWVzdCBzdHJ1Y3QgKi8KKwlkbWFfYWRkcl90IGNyX2RtYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCByZXF1ZXN0IHN0cnVjdCBkbWEgKi8KKwlzdHJ1Y3QgaGlkX2NvbnRyb2xfZmlmbyBjdHJsW0hJRF9DT05UUk9MX0ZJRk9fU0laRV07ICAJCS8qIENvbnRyb2wgZmlmbyAqLworCXVuc2lnbmVkIGNoYXIgY3RybGhlYWQsIGN0cmx0YWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGZpZm8gaGVhZCAmIHRhaWwgKi8KKwljaGFyICpjdHJsYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBidWZmZXIgKi8KKwlkbWFfYWRkcl90IGN0cmxidWZfZG1hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBidWZmZXIgZG1hICovCisJc3BpbmxvY2tfdCBjdHJsbG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgZmlmbyBzcGlubG9jayAqLworCisJc3RydWN0IHVyYiAqdXJib3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBVUkIgKi8KKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqb3V0W0hJRF9DT05UUk9MX0ZJRk9fU0laRV07ICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IHBpcGUgZmlmbyAqLworCXVuc2lnbmVkIGNoYXIgb3V0aGVhZCwgb3V0dGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgcGlwZSBmaWZvIGhlYWQgJiB0YWlsICovCisJY2hhciAqb3V0YnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIgKi8KKwlkbWFfYWRkcl90IG91dGJ1Zl9kbWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZlciBkbWEgKi8KKwlzcGlubG9ja190IG91dGxvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGZpZm8gc3BpbmxvY2sgKi8KKworCXVuc2lnbmVkIGxvbmcgaW9mbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJL08gZmxhZ3MgKENUUkxfUlVOTklORywgT1VUX1JVTk5JTkcpICovCisJc3RydWN0IHRpbWVyX2xpc3QgaW9fcmV0cnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHJ5IHRpbWVyICovCisJdW5zaWduZWQgbG9uZyBzdG9wX3JldHJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgdG8gZ2l2ZSB1cCwgaW4gamlmZmllcyAqLworCXVuc2lnbmVkIGludCByZXRyeV9kZWxheTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBsZW5ndGggaW4gbXMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFzayBjb250ZXh0IGZvciByZXNldHMgKi8KKworfTsKKworI2RlZmluZQloaWRfdG9fdXNiX2RldihoaWRfZGV2KSBcCisJY29udGFpbmVyX29mKGhpZF9kZXYtPmRldi0+cGFyZW50LCBzdHJ1Y3QgdXNiX2RldmljZSwgZGV2KQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvdXNidG91Y2hzY3JlZW4uYyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYnRvdWNoc2NyZWVuLmMKaW5kZXggN2YzYzU3ZC4uODZlMzdhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvdXNidG91Y2hzY3JlZW4uYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2J0b3VjaHNjcmVlbi5jCkBAIC02Niw3ICs2Niw3IEBACiAKIAl2b2lkICgqcHJvY2Vzc19wa3QpIChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCwgdW5zaWduZWQgY2hhciAqcGt0LCBpbnQgbGVuKTsKIAlpbnQgICgqZ2V0X3BrdF9sZW4pICh1bnNpZ25lZCBjaGFyICpwa3QsIGludCBsZW4pOwotCWludCAgKCpyZWFkX2RhdGEpICAgKHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50ICp4LCBpbnQgKnksIGludCAqdG91Y2gsIGludCAqcHJlc3MpOworCWludCAgKCpyZWFkX2RhdGEpICAgKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoLCB1bnNpZ25lZCBjaGFyICpwa3QpOwogCWludCAgKCppbml0KSAgICAgICAgKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoKTsKIH07CiAKQEAgLTg1LDYgKzg1LDkgQEAKIAlzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gKnR5cGU7CiAJY2hhciBuYW1lWzEyOF07CiAJY2hhciBwaHlzWzY0XTsKKworCWludCB4LCB5OworCWludCB0b3VjaCwgcHJlc3M7CiB9OwogCiAKQEAgLTE2MSwxNCArMTY0LDE0IEBACiAjZGVmaW5lIEVHQUxBWF9QS1RfVFlQRV9SRVBUCQkweDgwCiAjZGVmaW5lIEVHQUxBWF9QS1RfVFlQRV9ESUFHCQkweDBBCiAKLXN0YXRpYyBpbnQgZWdhbGF4X3JlYWRfZGF0YSh1bnNpZ25lZCBjaGFyICpwa3QsIGludCAqeCwgaW50ICp5LCBpbnQgKnRvdWNoLCBpbnQgKnByZXNzKQorc3RhdGljIGludCBlZ2FsYXhfcmVhZF9kYXRhKHN0cnVjdCB1c2J0b3VjaF91c2IgKmRldiwgdW5zaWduZWQgY2hhciAqcGt0KQogewogCWlmICgocGt0WzBdICYgRUdBTEFYX1BLVF9UWVBFX01BU0spICE9IEVHQUxBWF9QS1RfVFlQRV9SRVBUKQogCQlyZXR1cm4gMDsKIAotCSp4ID0gKChwa3RbM10gJiAweDBGKSA8PCA3KSB8IChwa3RbNF0gJiAweDdGKTsKLQkqeSA9ICgocGt0WzFdICYgMHgwRikgPDwgNykgfCAocGt0WzJdICYgMHg3Rik7Ci0JKnRvdWNoID0gcGt0WzBdICYgMHgwMTsKKwlkZXYtPnggPSAoKHBrdFszXSAmIDB4MEYpIDw8IDcpIHwgKHBrdFs0XSAmIDB4N0YpOworCWRldi0+eSA9ICgocGt0WzFdICYgMHgwRikgPDwgNykgfCAocGt0WzJdICYgMHg3Rik7CisJZGV2LT50b3VjaCA9IHBrdFswXSAmIDB4MDE7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE5NSwxMSArMTk4LDExIEBACiAgKiBQYW5KaXQgUGFydAogICovCiAjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9QQU5KSVQKLXN0YXRpYyBpbnQgcGFuaml0X3JlYWRfZGF0YSh1bnNpZ25lZCBjaGFyICpwa3QsIGludCAqeCwgaW50ICp5LCBpbnQgKnRvdWNoLCBpbnQgKnByZXNzKQorc3RhdGljIGludCBwYW5qaXRfcmVhZF9kYXRhKHN0cnVjdCB1c2J0b3VjaF91c2IgKmRldiwgdW5zaWduZWQgY2hhciAqcGt0KQogewotCSp4ID0gKChwa3RbMl0gJiAweDBGKSA8PCA4KSB8IHBrdFsxXTsKLQkqeSA9ICgocGt0WzRdICYgMHgwRikgPDwgOCkgfCBwa3RbM107Ci0JKnRvdWNoID0gcGt0WzBdICYgMHgwMTsKKwlkZXYtPnggPSAoKHBrdFsyXSAmIDB4MEYpIDw8IDgpIHwgcGt0WzFdOworCWRldi0+eSA9ICgocGt0WzRdICYgMHgwRikgPDwgOCkgfCBwa3RbM107CisJZGV2LT50b3VjaCA9IHBrdFswXSAmIDB4MDE7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTIxNSwxMSArMjE4LDExIEBACiAjZGVmaW5lIE1UT1VDSFVTQl9SRVNFVCAgICAgICAgICAgICAgICAgNwogI2RlZmluZSBNVE9VQ0hVU0JfUkVRX0NUUkxMUl9JRCAgICAgICAgIDEwCiAKLXN0YXRpYyBpbnQgbXRvdWNoX3JlYWRfZGF0YSh1bnNpZ25lZCBjaGFyICpwa3QsIGludCAqeCwgaW50ICp5LCBpbnQgKnRvdWNoLCBpbnQgKnByZXNzKQorc3RhdGljIGludCBtdG91Y2hfcmVhZF9kYXRhKHN0cnVjdCB1c2J0b3VjaF91c2IgKmRldiwgdW5zaWduZWQgY2hhciAqcGt0KQogewotCSp4ID0gKHBrdFs4XSA8PCA4KSB8IHBrdFs3XTsKLQkqeSA9IChwa3RbMTBdIDw8IDgpIHwgcGt0WzldOwotCSp0b3VjaCA9IChwa3RbMl0gJiAweDQwKSA/IDEgOiAwOworCWRldi0+eCA9IChwa3RbOF0gPDwgOCkgfCBwa3RbN107CisJZGV2LT55ID0gKHBrdFsxMF0gPDwgOCkgfCBwa3RbOV07CisJZGV2LT50b3VjaCA9IChwa3RbMl0gJiAweDQwKSA/IDEgOiAwOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0yNjAsMTQgKzI2MywzMiBAQAogICogSVRNIFBhcnQKICAqLwogI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fSVRNCi1zdGF0aWMgaW50IGl0bV9yZWFkX2RhdGEodW5zaWduZWQgY2hhciAqcGt0LCBpbnQgKngsIGludCAqeSwgaW50ICp0b3VjaCwgaW50ICpwcmVzcykKK3N0YXRpYyBpbnQgaXRtX3JlYWRfZGF0YShzdHJ1Y3QgdXNidG91Y2hfdXNiICpkZXYsIHVuc2lnbmVkIGNoYXIgKnBrdCkKIHsKLQkqeCA9ICgocGt0WzBdICYgMHgxRikgPDwgNykgfCAocGt0WzNdICYgMHg3Rik7Ci0JKnkgPSAoKHBrdFsxXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFs0XSAmIDB4N0YpOwotCSpwcmVzcyA9ICgocGt0WzJdICYgMHgwMSkgPDwgNykgfCAocGt0WzVdICYgMHg3Rik7Ci0JKnRvdWNoID0gfnBrdFs3XSAmIDB4MjA7CisJaW50IHRvdWNoOworCS8qCisJICogSVRNIGRldmljZXMgcmVwb3J0IGludmFsaWQgeC95IGRhdGEgaWYgbm90IHRvdWNoZWQuCisJICogaWYgdGhlIHNjcmVlbiB3YXMgdG91Y2hlZCBiZWZvcmUgYnV0IGlzIG5vdCB0b3VjaGVkIGFueSBtb3JlCisJICogcmVwb3J0IHRvdWNoIGFzIDAgd2l0aCB0aGUgbGFzdCB2YWxpZCB4L3kgZGF0YSBvbmNlLiB0aGVuIHN0b3AKKwkgKiByZXBvcnRpbmcgZGF0YSB1bnRpbCB0b3VjaGVkIGFnYWluLgorCSAqLworCWRldi0+cHJlc3MgPSAoKHBrdFsyXSAmIDB4MDEpIDw8IDcpIHwgKHBrdFs1XSAmIDB4N0YpOwogCi0JcmV0dXJuICp0b3VjaDsKKwl0b3VjaCA9IH5wa3RbN10gJiAweDIwOworCWlmICghdG91Y2gpIHsKKwkJaWYgKGRldi0+dG91Y2gpIHsKKwkJCWRldi0+dG91Y2ggPSAwOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXYtPnggPSAoKHBrdFswXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFszXSAmIDB4N0YpOworCWRldi0+eSA9ICgocGt0WzFdICYgMHgxRikgPDwgNykgfCAocGt0WzRdICYgMHg3Rik7CisJZGV2LT50b3VjaCA9IHRvdWNoOworCisJcmV0dXJuIDE7CiB9CiAjZW5kaWYKIApAQCAtMjc2LDcgKzI5Nyw3IEBACiAgKiBlVHVyYm9Ub3VjaCBwYXJ0CiAgKi8KICNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0VUVVJCTwotc3RhdGljIGludCBldHVyYm9fcmVhZF9kYXRhKHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50ICp4LCBpbnQgKnksIGludCAqdG91Y2gsIGludCAqcHJlc3MpCitzdGF0aWMgaW50IGV0dXJib19yZWFkX2RhdGEoc3RydWN0IHVzYnRvdWNoX3VzYiAqZGV2LCB1bnNpZ25lZCBjaGFyICpwa3QpCiB7CiAJdW5zaWduZWQgaW50IHNoaWZ0OwogCkBAIC0yODUsOSArMzA2LDkgQEAKIAkJcmV0dXJuIDA7CiAKIAlzaGlmdCA9ICg2IC0gKHBrdFswXSAmIDB4MDMpKTsKLQkqeCA9ICgocGt0WzNdIDw8IDcpIHwgcGt0WzRdKSA+PiBzaGlmdDsKLQkqeSA9ICgocGt0WzFdIDw8IDcpIHwgcGt0WzJdKSA+PiBzaGlmdDsKLQkqdG91Y2ggPSAocGt0WzBdICYgMHgxMCkgPyAxIDogMDsKKwlkZXYtPnggPSAoKHBrdFszXSA8PCA3KSB8IHBrdFs0XSkgPj4gc2hpZnQ7CisJZGV2LT55ID0gKChwa3RbMV0gPDwgNykgfCBwa3RbMl0pID4+IHNoaWZ0OworCWRldi0+dG91Y2ggPSAocGt0WzBdICYgMHgxMCkgPyAxIDogMDsKIAogCXJldHVybiAxOwogfQpAQCAtMzA3LDE0ICszMjgsMTQgQEAKICAqIEd1bnplIHBhcnQKICAqLwogI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fR1VOWkUKLXN0YXRpYyBpbnQgZ3VuemVfcmVhZF9kYXRhKHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50ICp4LCBpbnQgKnksIGludCAqdG91Y2gsIGludCAqcHJlc3MpCitzdGF0aWMgaW50IGd1bnplX3JlYWRfZGF0YShzdHJ1Y3QgdXNidG91Y2hfdXNiICpkZXYsIHVuc2lnbmVkIGNoYXIgKnBrdCkKIHsKIAlpZiAoIShwa3RbMF0gJiAweDgwKSB8fCAoKHBrdFsxXSB8IHBrdFsyXSB8IHBrdFszXSkgJiAweDgwKSkKIAkJcmV0dXJuIDA7CiAKLQkqeCA9ICgocGt0WzBdICYgMHgxRikgPDwgNykgfCAocGt0WzJdICYgMHg3Rik7Ci0JKnkgPSAoKHBrdFsxXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFszXSAmIDB4N0YpOwotCSp0b3VjaCA9IHBrdFswXSAmIDB4MjA7CisJZGV2LT54ID0gKChwa3RbMF0gJiAweDFGKSA8PCA3KSB8IChwa3RbMl0gJiAweDdGKTsKKwlkZXYtPnkgPSAoKHBrdFsxXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFszXSAmIDB4N0YpOworCWRldi0+dG91Y2ggPSBwa3RbMF0gJiAweDIwOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0zODMsMTEgKzQwNCwxMSBAQAogfQogCiAKLXN0YXRpYyBpbnQgZG1jX3RzYzEwX3JlYWRfZGF0YSh1bnNpZ25lZCBjaGFyICpwa3QsIGludCAqeCwgaW50ICp5LCBpbnQgKnRvdWNoLCBpbnQgKnByZXNzKQorc3RhdGljIGludCBkbWNfdHNjMTBfcmVhZF9kYXRhKHN0cnVjdCB1c2J0b3VjaF91c2IgKmRldiwgdW5zaWduZWQgY2hhciAqcGt0KQogewotCSp4ID0gKChwa3RbMl0gJiAweDAzKSA8PCA4KSB8IHBrdFsxXTsKLQkqeSA9ICgocGt0WzRdICYgMHgwMykgPDwgOCkgfCBwa3RbM107Ci0JKnRvdWNoID0gcGt0WzBdICYgMHgwMTsKKwlkZXYtPnggPSAoKHBrdFsyXSAmIDB4MDMpIDw8IDgpIHwgcGt0WzFdOworCWRldi0+eSA9ICgocGt0WzRdICYgMHgwMykgPDwgOCkgfCBwa3RbM107CisJZGV2LT50b3VjaCA9IHBrdFswXSAmIDB4MDE7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTQ5MiwyMyArNTEzLDIyIEBACiBzdGF0aWMgdm9pZCB1c2J0b3VjaF9wcm9jZXNzX3BrdChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50IGxlbikKIHsKLQlpbnQgeCwgeSwgdG91Y2gsIHByZXNzOwogCXN0cnVjdCB1c2J0b3VjaF9kZXZpY2VfaW5mbyAqdHlwZSA9IHVzYnRvdWNoLT50eXBlOwogCi0JaWYgKCF0eXBlLT5yZWFkX2RhdGEocGt0LCAmeCwgJnksICZ0b3VjaCwgJnByZXNzKSkKKwlpZiAoIXR5cGUtPnJlYWRfZGF0YSh1c2J0b3VjaCwgcGt0KSkKIAkJCXJldHVybjsKIAotCWlucHV0X3JlcG9ydF9rZXkodXNidG91Y2gtPmlucHV0LCBCVE5fVE9VQ0gsIHRvdWNoKTsKKwlpbnB1dF9yZXBvcnRfa2V5KHVzYnRvdWNoLT5pbnB1dCwgQlROX1RPVUNILCB1c2J0b3VjaC0+dG91Y2gpOwogCiAJaWYgKHN3YXBfeHkpIHsKLQkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19YLCB5KTsKLQkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19ZLCB4KTsKKwkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19YLCB1c2J0b3VjaC0+eSk7CisJCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LCBBQlNfWSwgdXNidG91Y2gtPngpOwogCX0gZWxzZSB7Ci0JCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LCBBQlNfWCwgeCk7Ci0JCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LCBBQlNfWSwgeSk7CisJCWlucHV0X3JlcG9ydF9hYnModXNidG91Y2gtPmlucHV0LCBBQlNfWCwgdXNidG91Y2gtPngpOworCQlpbnB1dF9yZXBvcnRfYWJzKHVzYnRvdWNoLT5pbnB1dCwgQUJTX1ksIHVzYnRvdWNoLT55KTsKIAl9CiAJaWYgKHR5cGUtPm1heF9wcmVzcykKLQkJaW5wdXRfcmVwb3J0X2Ficyh1c2J0b3VjaC0+aW5wdXQsIEFCU19QUkVTU1VSRSwgcHJlc3MpOworCQlpbnB1dF9yZXBvcnRfYWJzKHVzYnRvdWNoLT5pbnB1dCwgQUJTX1BSRVNTVVJFLCB1c2J0b3VjaC0+cHJlc3MpOwogCWlucHV0X3N5bmModXNidG91Y2gtPmlucHV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvd2Fjb21fc3lzLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbV9zeXMuYwppbmRleCBlN2NjMjBhLi4xMmI0Mjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbV9zeXMuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbV9zeXMuYwpAQCAtMTU5LDEzICsxNTksMTMgQEAKIHsKIAlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX0ZJTkdFUik7CiAJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fMCkgfCBCSVQoQlROXzEpIHwgQklUKEJUTl8yKSB8IEJJVChCVE5fMyk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlgsIDAsIDQwOTcsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JYLCAwLCA0MDk2LCAwLCAwKTsKIH0KIAogdm9pZCBpbnB1dF9kZXZfaTMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCiB7CiAJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fNCkgfCBCSVQoQlROXzUpIHwgQklUKEJUTl82KSB8IEJJVChCVE5fNyk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlksIDAsIDQwOTcsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JZLCAwLCA0MDk2LCAwLCAwKTsKIH0KIAogdm9pZCBpbnB1dF9kZXZfaShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tX3dhYy5jIGIvZHJpdmVycy91c2IvaW5wdXQvd2Fjb21fd2FjLmMKaW5kZXggOTI3MjZmZS4uNDE0MmUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvd2Fjb21fd2FjLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvd2Fjb21fd2FjLmMKQEAgLTIwOSwxMyArMjA5LDE1IEBACiAJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1NUWUxVUywgZGF0YVsxXSAmIDB4MDIpOwogCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9TVFlMVVMyLCBkYXRhWzFdICYgMHgwNCk7CiAJCX0KLQl9Ci0KLQlpZiAoZGF0YVsxXSAmIDB4MTApCiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgaWQpOyAvKiByZXBvcnQgdG9vbCBpZCAqLworCX0KIAllbHNlCiAJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgMCk7IC8qIHJlc2V0IHRvb2wgaWQgKi8KLQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbMF0sIGRhdGFbMV0gJiAweDEwKTsKKworCWlmIChkYXRhWzFdICYgMHgxMCkgIC8qIG9ubHkgcmVwb3J0IHByb3gtaW4gd2hlbiBpbiBhcmVhICovCisJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCB3YWNvbS0+dG9vbFswXSwgMSk7CisJaWYgKCEoZGF0YVsxXSAmIDB4OTApKSAgLyogcmVwb3J0IHByb3gtb3V0IHdoZW4gcGh5c2ljYWxseSBvdXQgKi8KKwkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sWzBdLCAwKTsKIAl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7CiAKIAkvKiBzZW5kIHBhZCBkYXRhICovCkBAIC00MDUsNyArNDA3LDcgQEAKIAlpZiAoKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBDSU5USVEpICYmICEoZGF0YVsxXSAmIDB4NDApKQogICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TMykgeworCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TM1MpIHsKIAkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19YLCAoZGF0YVsyXSA8PCA5KSB8IChkYXRhWzNdIDw8IDEpIHwgKChkYXRhWzldID4+IDEpICYgMSkpOwogCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1ksIChkYXRhWzRdIDw8IDkpIHwgKGRhdGFbNV0gPDwgMSkgfCAoZGF0YVs5XSAmIDEpKTsKIAkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ESVNUQU5DRSwgKChkYXRhWzldID4+IDIpICYgMHgzZikpOwpAQCAtNDIzLDcgKzQyNSw3IEBACiAKIAkJaWYgKGRhdGFbMV0gJiAweDAyKSB7CiAJCQkvKiBSb3RhdGlvbiBwYWNrZXQgKi8KLQkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TMykgeworCQkJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1MzUykgewogCQkJCS8qIEkzIG1hcmtlciBwZW4gcm90YXRpb24gcmVwb3J0ZWQgYXMgd2hlZWwKIAkJCQkgKiBkdWUgdG8gdmFsdWF0b3IgbGltaXRhdGlvbgogCQkJCSAqLwpAQCAtNTQ3LDExICs1NDksMTEgQEAKIAl7ICJXYWNvbSBHcmFwaGlyZTMgNng4IiwgOCwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgNjMsIEdSQVBISVJFIH0sCiAJeyAiV2Fjb20gR3JhcGhpcmU0IDR4NSIsIDgsICAxMDIwOCwgIDc0MjQsICA1MTEsIDYzLCBXQUNPTV9HNCB9LAogCXsgIldhY29tIEdyYXBoaXJlNCA2eDgiLCA4LCAgMTY3MDQsIDEyMDY0LCAgNTExLCA2MywgV0FDT01fRzQgfSwKLQl7ICJXYWNvbSBWb2xpdG8iLCAgICAgICAgOCwgICA1MTA0LCAgMzcxMiwgIDUxMSwgIDAsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gUGVuU3RhdGlvbjIiLCAgIDgsICAgMzI1MCwgIDIzMjAsICAyNTUsICAwLCBHUkFQSElSRSB9LAotCXsgIldhY29tIFZvbGl0bzIgNHg1IiwgICA4LCAgIDUxMDQsICAzNzEyLCAgNTExLCAgMCwgR1JBUEhJUkUgfSwKLQl7ICJXYWNvbSBWb2xpdG8yIDJ4MyIsICAgOCwgICAzMjQ4LCAgMjMyMCwgIDUxMSwgIDAsIEdSQVBISVJFIH0sCi0JeyAiV2Fjb20gUGVuUGFydG5lcjIiLCAgIDgsICAgMzI1MCwgIDIzMjAsICAyNTUsICAwLCBHUkFQSElSRSB9LAorCXsgIldhY29tIFZvbGl0byIsICAgICAgICA4LCAgIDUxMDQsICAzNzEyLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKKwl7ICJXYWNvbSBQZW5TdGF0aW9uMiIsICAgOCwgICAzMjUwLCAgMjMyMCwgIDI1NSwgNjMsIEdSQVBISVJFIH0sCisJeyAiV2Fjb20gVm9saXRvMiA0eDUiLCAgIDgsICAgNTEwNCwgIDM3MTIsICA1MTEsIDYzLCBHUkFQSElSRSB9LAorCXsgIldhY29tIFZvbGl0bzIgMngzIiwgICA4LCAgIDMyNDgsICAyMzIwLCAgNTExLCA2MywgR1JBUEhJUkUgfSwKKwl7ICJXYWNvbSBQZW5QYXJ0bmVyMiIsICAgOCwgICAzMjUwLCAgMjMyMCwgIDI1NSwgNjMsIEdSQVBISVJFIH0sCiAJeyAiV2Fjb20gSW50dW9zIDR4NSIsICAgMTAsICAxMjcwMCwgMTA2MDAsIDEwMjMsIDYzLCBJTlRVT1MgfSwKIAl7ICJXYWNvbSBJbnR1b3MgNng4IiwgICAxMCwgIDIwMzIwLCAxNjI0MCwgMTAyMywgNjMsIElOVFVPUyB9LAogCXsgIldhY29tIEludHVvcyA5eDEyIiwgIDEwLCAgMzA0ODAsIDI0MDYwLCAxMDIzLCA2MywgSU5UVU9TIH0sCkBAIC01ODAsNyArNTgyLDcgQEAKIAl7ICJXYWNvbSBJbnR1b3MzIDEyeDEyIiwgMTAsIDYwOTYwLCA2MDk2MCwgMTAyMywgNjMsIElOVFVPUzNMIH0sCiAJeyAiV2Fjb20gSW50dW9zMyAxMngxOSIsIDEwLCA5NzUzNiwgNjA5NjAsIDEwMjMsIDYzLCBJTlRVT1MzTCB9LAogCXsgIldhY29tIEludHVvczMgNngxMSIsICAxMCwgNTQyMDQsIDMxNzUwLCAxMDIzLCA2MywgSU5UVU9TMyB9LAotCXsgIldhY29tIEludHVvczMgNHg2IiwgICAxMCwgMzE0OTYsIDE5Njg1LCAxMDIzLCAxNSwgSU5UVU9TM1MgfSwKKwl7ICJXYWNvbSBJbnR1b3MzIDR4NiIsICAgMTAsIDMxNDk2LCAxOTY4NSwgMTAyMywgNjMsIElOVFVPUzNTIH0sCiAJeyAiV2Fjb20gQ2ludGlxIDIxVVgiLCAgIDEwLCA4NzIwMCwgNjU2MDAsIDEwMjMsIDYzLCBDSU5USVEgfSwKIAl7ICJXYWNvbSBJbnR1b3MyIDZ4OCIsICAgMTAsIDIwMzIwLCAxNjI0MCwgMTAyMywgNjMsIElOVFVPUyB9LAogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYyBiL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKaW5kZXggMDJjYmI3Zi4uYTc5MzJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCkBAIC0yODEsNyArMjgxLDcgQEAKIAkvKiBSZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlICovCiAJc25wcmludGYoYmxfbmFtZSwgc2l6ZW9mKGJsX25hbWUpLCAiYXBwbGVkaXNwbGF5JWQiLAogCQlhdG9taWNfaW5jX3JldHVybigmY291bnRfZGlzcGxheXMpIC0gMSk7Ci0JcGRhdGEtPmJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihibF9uYW1lLCBwZGF0YSwKKwlwZGF0YS0+YmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGJsX25hbWUsIE5VTEwsIE5VTEwsCiAJCQkJCQkmYXBwbGVkaXNwbGF5X2JsX2RhdGEpOwogCWlmIChJU19FUlIocGRhdGEtPmJkKSkgewogCQllcnIoImFwcGxlZGlzcGxheTogQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMgYi9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jCmluZGV4IGM3MDNmNzMuLmI1MzMyZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwpAQCAtNzY2LDcgKzc2Niw3IEBACiAgICAgICAgICAgICAgICAgYmVwLT5idWZwID0ga21hbGxvYyAoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgICAgICAgICAgaWYgKCFiZXAtPmJ1ZnApCiAJCQlnb3RvIGJsX2ZhaWw7Ci0gICAgICAgICAgICAgICAgYmVwLT5kciA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9LRVJORUwpOworICAgICAgICAgICAgICAgIGJlcC0+ZHIgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9LRVJORUwpOwogICAgICAgICAgICAgICAgIGlmICghYmVwLT5kcikKIAkJCWdvdG8gYmxfZmFpbDsKICAgICAgICAgICAgICAgICBiZXAtPnVyYnAgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKTsKQEAgLTEzNzYsNyArMTM3Niw3IEBACiAJfQogCiAJLyogd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIGRldmljZS4gTm93IGxldHMgYWxsb2NhdGUgbWVtb3J5ICovCi0JY2NwID0gKHBhdWVyY2hhcl90KSBrbWFsbG9jKHNpemVvZihhdWVyY2hhcl90KSwgR0ZQX0tFUk5FTCk7CisJY2NwID0ga3phbGxvYyhzaXplb2YoYXVlcmNoYXJfdCksIEdGUF9LRVJORUwpOwogCWlmIChjY3AgPT0gTlVMTCkgewogCQllcnIgKCJvdXQgb2YgbWVtb3J5Iik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xMzg0LDcgKzEzODQsNiBAQAogCX0KIAogCS8qIEluaXRpYWxpemUgZGV2aWNlIGRlc2NyaXB0b3IgKi8KLQltZW1zZXQoIGNjcCwgMCwgc2l6ZW9mKGF1ZXJjaGFyX3QpKTsKIAlpbml0X01VVEVYKCAmY2NwLT5tdXRleCk7CiAJaW5pdF9NVVRFWCggJmNjcC0+cmVhZG11dGV4KTsKICAgICAgICAgYXVlcmJ1Zl9pbml0ICgmY2NwLT5idWZjdGwpOwpAQCAtMTkxMiwxNCArMTkxMSwxMyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLwotCWNwID0ga21hbGxvYyAoc2l6ZW9mKGF1ZXJzd2FsZF90KSwgR0ZQX0tFUk5FTCk7CisJY3AgPSBremFsbG9jIChzaXplb2YoYXVlcnN3YWxkX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY3AgPT0gTlVMTCkgewogCQllcnIgKCJvdXQgb2YgbWVtb3J5Iik7CiAJCWdvdG8gcGZhaWw7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSBkZXZpY2UgZGVzY3JpcHRvciAqLwotCW1lbXNldCAoY3AsIDAsIHNpemVvZihhdWVyc3dhbGRfdCkpOwogCWluaXRfTVVURVggKCZjcC0+bXV0ZXgpOwogCWNwLT51c2JkZXYgPSB1c2JkZXY7CiAJYXVlcmNoYWluX2luaXQgKCZjcC0+Y29udHJvbGNoYWluKTsKQEAgLTE5NjksNyArMTk2Nyw3IEBACiAJaW5mbygiZGV2aWNlIGlzIGEgJXMiLCBjcC0+ZGV2X2Rlc2MpOwogCiAgICAgICAgIC8qIGdldCB0aGUgbWF4aW11bSBhbGxvd2VkIGNvbnRyb2wgdHJhbnNmZXIgbGVuZ3RoICovCi0gICAgICAgIHBidWYgPSAoX19sZTE2ICopIGttYWxsb2MgKDIsIEdGUF9LRVJORUwpOyAgICAvKiB1c2UgYW4gYWxsb2NhdGVkIGJ1ZmZlciBiZWNhdXNlIG9mIHVyYiB0YXJnZXQgKi8KKyAgICAgICAgcGJ1ZiA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7ICAgIC8qIHVzZSBhbiBhbGxvY2F0ZWQgYnVmZmVyIGJlY2F1c2Ugb2YgdXJiIHRhcmdldCAqLwogICAgICAgICBpZiAoIXBidWYpIHsKIAkJZXJyKCAib3V0IG9mIG1lbW9yeSIpOwogCQlnb3RvIHBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKaW5kZXggMThiMTkyNS4uNDFjMDE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgpAQCAtNTEsNiArNTIsMTAgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRlRESSBFTEFOIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogI2RlZmluZSBJTlRfTU9EVUxFX1BBUk0obiwgdikgc3RhdGljIGludCBuID0gdjttb2R1bGVfcGFyYW0obiwgaW50LCAwNDQ0KQorc3RhdGljIGludCBkaXN0cnVzdF9maXJtd2FyZSA9IDE7Cittb2R1bGVfcGFyYW0oZGlzdHJ1c3RfZmlybXdhcmUsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhkaXN0cnVzdF9maXJtd2FyZSwgInRydWUgdG8gZGlzdHJ1c3QgZmlybXdhcmUgcG93ZXIvb3ZlcmN1cnJlbiIKKyAgICAgICAgInQgc2V0dXAiKTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHUxMzJfcGxhdGZvcm1fZHJpdmVyOwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzdGF0dXNfcXVldWU7CiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNvbW1hbmRfcXVldWU7CkBAIC02Niw3ICs3MSw5IEBACiAqIGVuZCBvZiB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBwcm90ZWN0ZWQgYnkgZnRkaV9tb2R1bGVfbG9jawogKi8KICNpbmNsdWRlICJ1c2JfdTEzMi5oIgotI2RlZmluZSBURF9ERVZOT1RSRVNQIDUKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgorI2luY2x1ZGUgIi4uL2hvc3Qvb2hjaS5oIgogLyogRGVmaW5lIHRoZXNlIHZhbHVlcyB0byBtYXRjaCB5b3VyIGRldmljZXMqLwogI2RlZmluZSBVU0JfRlRESV9FTEFOX1ZFTkRPUl9JRCAweDA0MDMKICNkZWZpbmUgVVNCX0ZURElfRUxBTl9QUk9EVUNUX0lEIDB4ZDZlYQpAQCAtNTUxLDcgKzU1OCw3IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImluaXRpYWxpemVkIGZhaWxlZCAtIHRyeWluZyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZ2FpbiBpbiAxMCBzZWNvbmRzXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtfZGVsYXlfaW5fbXNlYyA9IDEwICoxMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMSAqMTAwMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoZnRkaS0+cmVnaXN0ZXJlZCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMTA7CkBAIC0yMjg4LDgyICsyMjk1LDIyOSBAQAogICAgICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgZnRkaV9lbGFuX2VudW1lcmF0ZVBDSShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCisKKyNkZWZpbmUgZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBtZW1iZXIsIGRhdGEpIGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCBcCisgICAgICAgIG9mZnNldG9mKHN0cnVjdCBvaGNpX3JlZ3MsIG1lbWJlciksIDAsIGRhdGEpOworI2RlZmluZSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBtZW1iZXIsIGRhdGEpIGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgXAorICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgb2hjaV9yZWdzLCBtZW1iZXIpLCAwLCBkYXRhKTsKKyNkZWZpbmUgT0hDSV9RVUlSS19BTUQ3NTYgMHgwMQorI2RlZmluZSBPSENJX1FVSVJLX1NVUEVSSU8gMHgwMgorI2RlZmluZSBPSENJX1FVSVJLX0lOSVRSRVNFVCAweDA0CisjZGVmaW5lIE9IQ0lfQklHX0VORElBTiAweDA4CisjZGVmaW5lIE9IQ0lfUVVJUktfWkZNSUNSTyAweDEwCisjZGVmaW5lIE9IQ0lfQ09OVFJPTF9JTklUIE9IQ0lfQ1RSTF9DQlNSCisjZGVmaW5lIE9IQ0lfSU5UUl9JTklUIChPSENJX0lOVFJfTUlFIHwgT0hDSV9JTlRSX1VFIHwgT0hDSV9JTlRSX1JEIHwgXAorICAgICAgICBPSENJX0lOVFJfV0RIKQorc3RhdGljIGludCBmdGRpX2VsYW5fY2hlY2tfY29udHJvbGxlcihzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIGludCBxdWlyaykKK3sKKyAgICAgICAgaW50IGRldmljZXMgPSAwOworICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICB1MzIgaGNfY29udHJvbDsKKyAgICAgICAgaW50IG51bV9wb3J0czsKKyAgICAgICAgdTMyIGNvbnRyb2w7CisgICAgICAgIHUzMiByaF9hID0gLTE7CisgICAgICAgIHUzMiBzdGF0dXM7CisgICAgICAgIHUzMiBmbWludGVydmFsOworICAgICAgICB1MzIgaGNfZm1pbnRlcnZhbDsKKyAgICAgICAgdTMyIHBlcmlvZGljc3RhcnQ7CisgICAgICAgIHUzMiBjbWRzdGF0dXM7CisgICAgICAgIHUzMiByb290aHViX2E7CisgICAgICAgIGludCBtYXNrID0gT0hDSV9JTlRSX0lOSVQ7CisgICAgICAgIGludCBzbGVlcF90aW1lID0gMDsKKyAgICAgICAgaW50IHJlc2V0X3RpbWVvdXQgPSAzMDsgICAgICAgIC8qIC4uLiBhbGxvdyBleHRyYSB0aW1lICovCisgICAgICAgIGludCB0ZW1wOworICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBpbnRyZGlzYWJsZSwgT0hDSV9JTlRSX01JRSk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjb250cm9sLCAmY29udHJvbCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCByb290aHViLmEsICZyaF9hKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICBudW1fcG9ydHMgPSByaF9hICYgUkhfQV9ORFA7CisgICAgICAgIHJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgZm1pbnRlcnZhbCwgJmhjX2ZtaW50ZXJ2YWwpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIGhjX2ZtaW50ZXJ2YWwgJj0gMHgzZmZmOworICAgICAgICBpZiAoaGNfZm1pbnRlcnZhbCAhPSBGSSkgeworICAgICAgICB9CisgICAgICAgIGhjX2ZtaW50ZXJ2YWwgfD0gRlNNUChoY19mbWludGVydmFsKSA8PCAxNjsKKyAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjb250cm9sLCAmaGNfY29udHJvbCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgc3dpdGNoIChoY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpIHsKKyAgICAgICAgY2FzZSBPSENJX1VTQl9PUEVSOgorICAgICAgICAgICAgICAgIHNsZWVwX3RpbWUgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9IQ0lfVVNCX1NVU1BFTkQ6CisgICAgICAgIGNhc2UgT0hDSV9VU0JfUkVTVU1FOgorICAgICAgICAgICAgICAgIGhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKKyAgICAgICAgICAgICAgICBoY19jb250cm9sIHw9IE9IQ0lfVVNCX1JFU1VNRTsKKyAgICAgICAgICAgICAgICBzbGVlcF90aW1lID0gMTA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaGNfY29udHJvbCAmPSBPSENJX0NUUkxfUldDOworICAgICAgICAgICAgICAgIGhjX2NvbnRyb2wgfD0gT0hDSV9VU0JfUkVTRVQ7CisgICAgICAgICAgICAgICAgc2xlZXBfdGltZSA9IDUwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGNvbnRyb2wsIGhjX2NvbnRyb2wpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgY29udHJvbCwgJmNvbnRyb2wpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIG1zbGVlcChzbGVlcF90aW1lKTsKKyAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCByb290aHViLmEsICZyb290aHViX2EpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIGlmICghKHJvb3RodWJfYSAmIFJIX0FfTlBTKSkgeyAgICAgICAgLyogcG93ZXIgZG93biBlYWNoIHBvcnQgKi8KKyAgICAgICAgICAgICAgICBmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgbnVtX3BvcnRzOyB0ZW1wKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RodWIucG9ydHN0YXR1c1t0ZW1wXSwgUkhfUFNfTFNEQSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIGNvbnRyb2wsICZjb250cm9sKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgcmV0cnk6cmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjbWRzdGF0dXMsICZzdGF0dXMpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGNtZHN0YXR1cywgT0hDSV9IQ1IpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICBleHRyYTp7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjbWRzdGF0dXMsICZzdGF0dXMpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgIGlmICgwICE9IChzdGF0dXMgJiBPSENJX0hDUikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLXJlc2V0X3RpbWVvdXQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJVU0IgSEMgcmVzZXQgdGltZWQgbyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXQhXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoNSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXh0cmE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChxdWlyayAmIE9IQ0lfUVVJUktfSU5JVFJFU0VUKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgY29udHJvbCwgaGNfY29udHJvbCk7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjb250cm9sLCAmY29udHJvbCk7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgZWRfY29udHJvbGhlYWQsIDB4MDAwMDAwMDApOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIGVkX2J1bGtoZWFkLCAweDExMDAwMDAwKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBoY2NhLCAweDAwMDAwMDAwKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIGZtaW50ZXJ2YWwsICZmbWludGVydmFsKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBmbWludGVydmFsLAorICAgICAgICAgICAgICAgICgoZm1pbnRlcnZhbCAmIEZJVCkgXiBGSVQpIHwgaGNfZm1pbnRlcnZhbCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgcGVyaW9kaWNzdGFydCwKKyAgICAgICAgICAgICAgICAoKDkgKmhjX2ZtaW50ZXJ2YWwpIC8gMTApICYgMHgzZmZmKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIGZtaW50ZXJ2YWwsICZmbWludGVydmFsKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIHBlcmlvZGljc3RhcnQsICZwZXJpb2RpY3N0YXJ0KTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICBpZiAoMCA9PSAoZm1pbnRlcnZhbCAmIDB4M2ZmZjAwMDApIHx8IDAgPT0gcGVyaW9kaWNzdGFydCkgeworICAgICAgICAgICAgICAgIGlmICghKHF1aXJrICYgT0hDSV9RVUlSS19JTklUUkVTRVQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWlyayB8PSBPSENJX1FVSVJLX0lOSVRSRVNFVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmV0cnk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJpbml0IGVyciglMDh4ICUwNHgpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbWludGVydmFsLCBwZXJpb2RpY3N0YXJ0KTsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IGNvbnRyb2xsZXIgb3BlcmF0aW9ucyAqLworICAgICAgICBoY19jb250cm9sICY9IE9IQ0lfQ1RSTF9SV0M7CisgICAgICAgIGhjX2NvbnRyb2wgfD0gT0hDSV9DT05UUk9MX0lOSVQgfCBPSENJX0NUUkxfQkxFIHwgT0hDSV9VU0JfT1BFUjsKKyAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgY29udHJvbCwgaGNfY29udHJvbCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgY21kc3RhdHVzLCBPSENJX0JMRik7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjbWRzdGF0dXMsICZjbWRzdGF0dXMpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgY29udHJvbCwgJmNvbnRyb2wpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIHJvb3RodWIuc3RhdHVzLCBSSF9IU19EUldFKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBpbnRyc3RhdHVzLCBtYXNrKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCBpbnRyZGlzYWJsZSwKKyAgICAgICAgICAgICAgICBPSENJX0lOVFJfTUlFIHwgT0hDSV9JTlRSX09DIHwgT0hDSV9JTlRSX1JIU0MgfCBPSENJX0lOVFJfRk5PIHwKKyAgICAgICAgICAgICAgICBPSENJX0lOVFJfVUUgfCBPSENJX0lOVFJfUkQgfCBPSENJX0lOVFJfU0YgfCBPSENJX0lOVFJfV0RIIHwKKyAgICAgICAgICAgICAgICBPSENJX0lOVFJfU08pOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7ICAgICAgICAvKiBoYW5kbGUgcm9vdCBodWIgaW5pdCBxdWlya3MgLi4uICovCisgICAgICAgIHJldHZhbCA9IGZ0ZGlfcmVhZF9wY2ltZW0oZnRkaSwgcm9vdGh1Yi5hLCAmcm9vdGh1Yl9hKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByb290aHViX2EgJj0gfihSSF9BX1BTTSB8IFJIX0FfT0NQTSk7CisgICAgICAgIGlmIChxdWlyayAmIE9IQ0lfUVVJUktfU1VQRVJJTykgeworICAgICAgICAgICAgICAgIHJvb3RodWJfYSB8PSBSSF9BX05PQ1A7CisgICAgICAgICAgICAgICAgcm9vdGh1Yl9hICY9IH4oUkhfQV9QT1RQR1QgfCBSSF9BX05QUyk7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgcm9vdGh1Yi5hLCByb290aHViX2EpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICB9IGVsc2UgaWYgKChxdWlyayAmIE9IQ0lfUVVJUktfQU1ENzU2KSB8fCBkaXN0cnVzdF9maXJtd2FyZSkgeworICAgICAgICAgICAgICAgIHJvb3RodWJfYSB8PSBSSF9BX05QUzsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBmdGRpX3dyaXRlX3BjaW1lbShmdGRpLCByb290aHViLmEsIHJvb3RodWJfYSk7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dmFsID0gZnRkaV93cml0ZV9wY2ltZW0oZnRkaSwgcm9vdGh1Yi5zdGF0dXMsIFJIX0hTX0xQU0MpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IGZ0ZGlfd3JpdGVfcGNpbWVtKGZ0ZGksIHJvb3RodWIuYiwKKyAgICAgICAgICAgICAgICAocm9vdGh1Yl9hICYgUkhfQV9OUFMpID8gMCA6IFJIX0JfUFBDTSk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gZnRkaV9yZWFkX3BjaW1lbShmdGRpLCBjb250cm9sLCAmY29udHJvbCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgbWRlbGF5KChyb290aHViX2EgPj4gMjMpICYgMHgxZmUpOworICAgICAgICBmb3IgKHRlbXAgPSAwOyB0ZW1wIDwgbnVtX3BvcnRzOyB0ZW1wKyspIHsKKyAgICAgICAgICAgICAgICB1MzIgcG9ydHN0YXR1czsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBmdGRpX3JlYWRfcGNpbWVtKGZ0ZGksIHJvb3RodWIucG9ydHN0YXR1c1t0ZW1wXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZwb3J0c3RhdHVzKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICBpZiAoMSAmIHBvcnRzdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRldmljZXM7Cit9CisKK3N0YXRpYyBpbnQgZnRkaV9lbGFuX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IHVzYl9mdGRpICpmdGRpLCBpbnQgZm4pCiB7CiAgICAgICAgIHUzMiBsYXRlbmNlX3RpbWVyOwotICAgICAgICB1MzIgY29udHJvbHJlZzsKICAgICAgICAgaW50IFV4eHhTdGF0dXM7CiAgICAgICAgIHUzMiBwY2lkYXRhOwogICAgICAgICBpbnQgcmVnID0gMDsKLSAgICAgICAgaW50IGZvdW5kT0hDSSA9IDA7Ci0gICAgICAgIHU4IGZuOwotICAgICAgICBpbnQgYWN0aXZlUENJZm4gPSAwOwotICAgICAgICB1MzIgcGNpVklEID0gMDsKLSAgICAgICAgdTMyIHBjaVBJRCA9IDA7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9yZWcoZnRkaSwgJmNvbnRyb2xyZWcpOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9yZWcoZnRkaSwgMHgwMDAwMDAwMEwpOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgbXNsZWVwKDc1MCk7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyMDBMIHwgMHgxMDApOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9yZWcoZnRkaSwgMHgwMDAwMDIwMEwgfCAweDUwMCk7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcmVnKGZ0ZGksICZjb250cm9scmVnKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyMENMIHwgMHgwMDApOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9yZWcoZnRkaSwgMHgwMDAwMDIwREwgfCAweDAwMCk7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICBtc2xlZXAoMjUwKTsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9yZWcoZnRkaSwgMHgwMDAwMDIwRkwgfCAweDAwMCk7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcmVnKGZ0ZGksICZjb250cm9scmVnKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyNUZMIHwgMHg4MDApOwotICAgICAgICBpZiAoVXh4eFN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKLSAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmY29udHJvbHJlZyk7Ci0gICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwotICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcmVnKGZ0ZGksICZjb250cm9scmVnKTsKLSAgICAgICAgaWYgKFV4eHhTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgIG1zbGVlcCgxMDAwKTsKLSAgICAgICAgZm9yIChmbiA9IDA7IChmbiA8IDQpICYmICghZm91bmRPSENJKTsgZm4rKykgewotICAgICAgICAgICAgICAgIGFjdGl2ZVBDSWZuID0gZm4gPDwgODsKLSAgICAgICAgICAgICAgICBmdGRpLT5mdW5jdGlvbiA9IGZuICsgMTsKLSAgICAgICAgICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgJnBjaWRhdGEpOwotICAgICAgICAgICAgICAgIGlmIChVeHh4U3RhdHVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7Ci0gICAgICAgICAgICAgICAgcGNpVklEID0gcGNpZGF0YSAmIDB4RkZGRjsKLSAgICAgICAgICAgICAgICBwY2lQSUQgPSAocGNpZGF0YSA+PiAxNikgJiAweEZGRkY7Ci0gICAgICAgICAgICAgICAgaWYgKChwY2lWSUQgPT0gMHgxMDQ1KSAmJiAocGNpUElEID09IDB4Yzg2MSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kT0hDSSA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocGNpVklEID09IDB4MTAzMykgJiYgKHBjaVBJRCA9PSAweDAwMzUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE9IQ0kgPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHBjaVZJRCA9PSAweDEwYjkpICYmIChwY2lQSUQgPT0gMHg1MjM3KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRPSENJID0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChwY2lWSUQgPT0gMHgxMWMxKSAmJiAocGNpUElEID09IDB4NTgwMikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kT0hDSSA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocGNpVklEID09IDB4MTFBQikgJiYgKHBjaVBJRCA9PSAweDFGQTYpKSB7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmb3VuZE9IQ0kgPT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5YSU87Ci0gICAgICAgIH0KLSAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGF0YS52ZW5kb3IgPSBwY2lWSUQ7Ci0gICAgICAgIGZ0ZGktPnBsYXRmb3JtX2RhdGEuZGV2aWNlID0gcGNpUElEOworICAgICAgICBpbnQgYWN0aXZlUENJZm4gPSBmbiA8PCA4OwogICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjVGTCB8IDB4MjgwMCk7CiAgICAgICAgIGlmIChVeHh4U3RhdHVzKQogICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOwpAQCAtMjQwOCwxNjIgKzI1NjIsMjAxIEBACiAgICAgICAgICAgICAgICAgJnBjaWRhdGEpOwogICAgICAgICBpZiAoVXh4eFN0YXR1cykKICAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgZm9yIChyZWcgPSAwOyByZWcgPD0gMHg1NDsgcmVnICs9IDQpIHsKKyAgICAgICAgICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOworICAgICAgICAgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZnRkaV9lbGFuX2Nsb3NlX2NvbnRyb2xsZXIoc3RydWN0IHVzYl9mdGRpICpmdGRpLCBpbnQgZm4pCit7CisgICAgICAgIHUzMiBsYXRlbmNlX3RpbWVyOworICAgICAgICBpbnQgVXh4eFN0YXR1czsKKyAgICAgICAgdTMyIHBjaWRhdGE7CisgICAgICAgIGludCByZWcgPSAwOworICAgICAgICBpbnQgYWN0aXZlUENJZm4gPSBmbiA8PCA4OworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjVGTCB8IDB4MjgwMCk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICByZWcgPSAxNjsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisgICAgICAgICAgICAgICAgMHhGRkZGRkZGRik7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorICAgICAgICAgICAgICAgICZwY2lkYXRhKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorICAgICAgICAgICAgICAgIDB4MDAwMDAwMDApOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKKyAgICAgICAgICAgICAgICAmcGNpZGF0YSk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICByZWcgPSAxMjsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKKyAgICAgICAgICAgICAgICAmbGF0ZW5jZV90aW1lcik7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBsYXRlbmNlX3RpbWVyICY9IDB4RkZGRjAwRkY7CisgICAgICAgIGxhdGVuY2VfdGltZXIgfD0gMHgwMDAwMTYwMDsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDB4MDAsCisgICAgICAgICAgICAgICAgbGF0ZW5jZV90aW1lcik7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorICAgICAgICAgICAgICAgICZwY2lkYXRhKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIHJlZyA9IDQ7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAweDAwLAorICAgICAgICAgICAgICAgIDB4MDApOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKKyAgICAgICAgICAgICAgICAmcGNpZGF0YSk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmdGRpX2VsYW5fZm91bmRfY29udHJvbGxlcihzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIGludCBmbiwgaW50IHF1aXJrKQoreworICAgICAgICBpbnQgcmVzdWx0OworICAgICAgICBpbnQgVXh4eFN0YXR1czsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9zZXR1cF9jb250cm9sbGVyKGZ0ZGksIGZuKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIHJlc3VsdCA9IGZ0ZGlfZWxhbl9jaGVja19jb250cm9sbGVyKGZ0ZGksIHF1aXJrKTsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9jbG9zZV9jb250cm9sbGVyKGZ0ZGksIGZuKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZnRkaV9lbGFuX2VudW1lcmF0ZVBDSShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCit7CisgICAgICAgIHUzMiBjb250cm9scmVnOworICAgICAgICB1OCBzZW5zZWJpdHM7CisgICAgICAgIGludCBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcmVnKGZ0ZGksICZjb250cm9scmVnKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAwMDBMKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIG1zbGVlcCg3NTApOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjAwTCB8IDB4MTAwKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyMDBMIHwgMHg1MDApOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmY29udHJvbHJlZyk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjBDTCB8IDB4MDAwKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyMERMIHwgMHgwMDApOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgbXNsZWVwKDI1MCk7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyMEZMIHwgMHgwMDApOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmY29udHJvbHJlZyk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjVGTCB8IDB4ODAwKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9yZWcoZnRkaSwgJmNvbnRyb2xyZWcpOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmY29udHJvbHJlZyk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBtc2xlZXAoMTAwMCk7CisgICAgICAgIHNlbnNlYml0cyA9IChjb250cm9scmVnID4+IDE2KSAmIDB4MDAwRjsKKyAgICAgICAgaWYgKDB4MEQgPT0gc2Vuc2ViaXRzKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlCisJCXJldHVybiAtIEVOWElPOworfQorCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9zZXR1cE9IQ0koc3RydWN0IHVzYl9mdGRpICpmdGRpKQogeworICAgICAgICBpbnQgVXh4eFN0YXR1czsKICAgICAgICAgdTMyIHBjaWRhdGE7Ci0gICAgICAgIGludCBVMTMyU3RhdHVzOwotICAgICAgICBpbnQgcmVnOwotICAgICAgICBpbnQgcmVzZXRfcmVwZWF0ID0gMDsKLSAgICAgIGRvX3Jlc2V0OnJlZyA9IDg7Ci0gICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcGNpbWVtKGZ0ZGksIHJlZywgMHgwZSwgMHgwMSk7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgcmVzZXRfY2hlY2s6ewotICAgICAgICAgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKLSAgICAgICAgICAgICAgICBpZiAocGNpZGF0YSAmIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCg1MDApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2V0X3JlcGVhdCsrID4gMTAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X3JlcGVhdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9fcmVzZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZXNldF9jaGVjazsKKyAgICAgICAgaW50IHJlZyA9IDA7CisgICAgICAgIHU4IGZuOworICAgICAgICBpbnQgYWN0aXZlUENJZm4gPSAwOworICAgICAgICBpbnQgbWF4X2RldmljZXMgPSAwOworICAgICAgICBpbnQgY29udHJvbGxlcnMgPSAwOworICAgICAgICBpbnQgdW5yZWNvZ25pemVkID0gMDsKKyAgICAgICAgZnRkaS0+ZnVuY3Rpb24gPSAwOworICAgICAgICBmb3IgKGZuID0gMDsgKGZuIDwgNCk7IGZuKyspIHsKKyAgICAgICAgICAgICAgICB1MzIgcGNpVklEID0gMDsKKyAgICAgICAgICAgICAgICB1MzIgcGNpUElEID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgZGV2aWNlcyA9IDA7CisgICAgICAgICAgICAgICAgYWN0aXZlUENJZm4gPSBmbiA8PCA4OworICAgICAgICAgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAmcGNpZGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgICAgICAgICBwY2lWSUQgPSBwY2lkYXRhICYgMHhGRkZGOworICAgICAgICAgICAgICAgIHBjaVBJRCA9IChwY2lkYXRhID4+IDE2KSAmIDB4RkZGRjsKKyAgICAgICAgICAgICAgICBpZiAoKHBjaVZJRCA9PSBQQ0lfVkVORE9SX0lEX09QVEkpICYmIChwY2lQSUQgPT0gMHhjODYxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlcyA9IGZ0ZGlfZWxhbl9mb3VuZF9jb250cm9sbGVyKGZ0ZGksIGZuLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzICs9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocGNpVklEID09IFBDSV9WRU5ET1JfSURfTkVDKSAmJiAocGNpUElEID09IDB4MDAzNSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzID0gZnRkaV9lbGFuX2ZvdW5kX2NvbnRyb2xsZXIoZnRkaSwgZm4sIDApOworICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcnMgKz0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChwY2lWSUQgPT0gUENJX1ZFTkRPUl9JRF9BTCkgJiYgKHBjaVBJRCA9PSAweDUyMzcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzID0gZnRkaV9lbGFuX2ZvdW5kX2NvbnRyb2xsZXIoZnRkaSwgZm4sIDApOworICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcnMgKz0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChwY2lWSUQgPT0gUENJX1ZFTkRPUl9JRF9BVFQpICYmIChwY2lQSUQgPT0gMHg1ODAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMgPSBmdGRpX2VsYW5fZm91bmRfY29udHJvbGxlcihmdGRpLCBmbiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVycyArPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGNpVklEID09IFBDSV9WRU5ET1JfSURfQU1EICYmIHBjaVBJRCA9PSAweDc0MGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMgPSBmdGRpX2VsYW5fZm91bmRfY29udHJvbGxlcihmdGRpLCBmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0hDSV9RVUlSS19BTUQ3NTYpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcnMgKz0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBjaVZJRCA9PSBQQ0lfVkVORE9SX0lEX0NPTVBBUSAmJiBwY2lQSUQgPT0gMHhhMGY4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzID0gZnRkaV9lbGFuX2ZvdW5kX2NvbnRyb2xsZXIoZnRkaSwgZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9IQ0lfUVVJUktfWkZNSUNSTyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVycyArPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBwY2lkYXRhKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB1bnJlY29nbml6ZWQgKz0gMTsKKyAgICAgICAgICAgICAgICBpZiAoZGV2aWNlcyA+IG1heF9kZXZpY2VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZGV2aWNlcyA9IGRldmljZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5mdW5jdGlvbiA9IGZuICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2RhdGEudmVuZG9yID0gcGNpVklEOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGF0YS5kZXZpY2UgPSBwY2lQSUQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGdvdG8gZHVtcF9yZWdzOwotICAgICAgICBtc2xlZXAoNTAwKTsKLSAgICAgICAgcmVnID0gMHgyODsKLSAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgcmVnLCAweDAwLCAweDExMDAwMDAwKTsKLSAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgICByZWcgPSAweDQwOwotICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShmdGRpLCByZWcsIDB4MDAsIDB4MmVkZik7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOwotICAgICAgICBpZiAoVTEzMlN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKLSAgICAgICAgcmVnID0gMHgzNDsKLSAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgcmVnLCAweDAwLCAweDJlZGYyZWRmKTsKLSAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgICByZWcgPSA0OwotICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShmdGRpLCByZWcsIDB4MDAsIDB4QTApOwotICAgICAgICBpZiAoVTEzMlN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKLSAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKLSAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIG1zbGVlcCgyNTApOwotICAgICAgICByZWcgPSA4OwotICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShmdGRpLCByZWcsIDB4MGUsIDB4MDQpOwotICAgICAgICBpZiAoVTEzMlN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKLSAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKLSAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIHJlZyA9IDB4Mjg7Ci0gICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgICByZWcgPSA4OwotICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOwotICAgICAgICBpZiAoVTEzMlN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKLSAgICAgICAgcmVnID0gMHg0ODsKLSAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgcmVnLCAweDAwLCAweDAwMDAxMjAwKTsKLSAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgICByZWcgPSAweDU0OwotICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOwotICAgICAgICBpZiAoVTEzMlN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKLSAgICAgICAgcmVnID0gMHg1ODsKLSAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKLSAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIHJlZyA9IDB4MzQ7Ci0gICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcGNpbWVtKGZ0ZGksIHJlZywgMHgwMCwgMHgyODAwMmVkZik7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOwotICAgICAgICBpZiAoVTEzMlN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKLSAgICAgICAgbXNsZWVwKDEwMCk7Ci0gICAgICAgIHJlZyA9IDB4NTA7Ci0gICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcGNpbWVtKGZ0ZGksIHJlZywgMHgwMCwgMHgxMDAwMCk7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgICByZWcgPSAweDU0OwotICAgICAgcG93ZXJfY2hlY2s6VTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKLSAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIGlmICghKHBjaWRhdGEgJiAxKSkgewotICAgICAgICAgICAgICAgIG1zbGVlcCg1MDApOwotICAgICAgICAgICAgICAgIGdvdG8gcG93ZXJfY2hlY2s7CisgICAgICAgIGlmIChmdGRpLT5mdW5jdGlvbiA+IDApIHsKKyAgICAgICAgICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3NldHVwX2NvbnRyb2xsZXIoZnRkaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmZ1bmN0aW9uIC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmIChjb250cm9sbGVycyA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOworICAgICAgICB9IGVsc2UgaWYgKHVucmVjb2duaXplZCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZ0ZGktPmVudW1lcmF0ZWQgPSAwOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5YSU87CiAgICAgICAgIH0KLSAgICAgICAgbXNsZWVwKDMwMDApOwotICAgICAgICByZWcgPSAweDU0OwotICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOwotICAgICAgICBpZiAoVTEzMlN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKLSAgICAgICAgcmVnID0gMHg1ODsKLSAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKLSAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIHJlZyA9IDB4NTQ7Ci0gICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcGNpbWVtKGZ0ZGksIHJlZywgMHgwMCwgMHgwMik7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOwotICAgICAgICBpZiAoVTEzMlN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKLSAgICAgICAgcmVnID0gMHg1NDsKLSAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgcmVnLCAweDAwLCAweDEwKTsKLSAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgICBtc2xlZXAoNzUwKTsKLSAgICAgICAgcmVnID0gMHg1NDsKLSAgICAgICAgaWYgKDApIHsKLSAgICAgICAgICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShmdGRpLCByZWcsIDB4MDAsIDB4MDIpOwotICAgICAgICAgICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKDApIHsKLSAgICAgICAgICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOwotICAgICAgICAgICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgICAgcmVnID0gMHg1NDsKLSAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKLSAgICAgICAgaWYgKFUxMzJTdGF0dXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7Ci0gICAgICAgIHJlZyA9IDB4NTg7Ci0gICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7Ci0gICAgICAgIGlmIChVMTMyU3RhdHVzKQotICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgZHVtcF9yZWdzOmZvciAocmVnID0gMDsgcmVnIDw9IDB4NTQ7IHJlZyArPSA0KSB7Ci0gICAgICAgICAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoVTEzMlN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwogfQogCiAKQEAgLTI2ODgsNiArMjg4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZnRkaS0+cGxhdGZvcm1fZGV2KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnN5bmNocm9uaXplZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5lbnVtZXJhdGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmluaXRpYWxpemVkID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlZ2lzdGVyZWQgPSAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmbHVzaF93b3JrcXVldWUoc3RhdHVzX3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCmluZGV4IDcxNjNmMDUuLjBkOWRlMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYwpAQCAtMjgyLDYgKzI4Miw3IEBACiAJCWRldi0+ZGV2ID0gTlVMTDsKIAkJZ290byBvdXQ7CiAJfQorCWRldl9zZXRfZHJ2ZGF0YShkZXYtPmRldiwgZGV2KTsKIAogCXNlcnZvX2NvdW50ID0gZGV2LT50eXBlICYgU0VSVk9fQ09VTlRfUVVBRCA/IDQgOiAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCmluZGV4IGI5OWNhOWMuLjAzOTg5MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCkBAIC0zMTY4LDcgKzMxNjgsNyBAQAogCQljYXNlIFNJU1VTQl9HRVRfQ09ORklHOgogCQljYXNlIFNJU1VTQl9DT01NQU5EOgogCQkJbG9ja19rZXJuZWwoKTsKLQkJCXJldHZhbCA9IHNpc3VzYl9pb2N0bChmLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZiwgY21kLCBhcmcpOworCQkJcmV0dmFsID0gc2lzdXNiX2lvY3RsKGYtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGYsIGNtZCwgYXJnKTsKIAkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9jb24uYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9jb24uYwppbmRleCBiZjI2YzNjLi45MTQ4Njk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfY29uLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2Nvbi5jCkBAIC00MDMsNyArNDAzLDcgQEAKIAogCiAJc2lzdXNiX2NvcHlfbWVtb3J5KHNpc3VzYiwgKGNoYXIgKilTSVNVU0JfVkFERFIoeCwgeSksCi0JCQkJKHUzMilTSVNVU0JfSEFERFIoeCwgeSksIDIsICZ3cml0dGVuKTsKKwkJCQkobG9uZylTSVNVU0JfSEFERFIoeCwgeSksIDIsICZ3cml0dGVuKTsKIAogCW11dGV4X3VubG9jaygmc2lzdXNiLT5sb2NrKTsKIH0KQEAgLTQzOCw3ICs0MzgsNyBAQAogCX0KIAogCXNpc3VzYl9jb3B5X21lbW9yeShzaXN1c2IsIChjaGFyICopU0lTVVNCX1ZBRERSKHgsIHkpLAotCQkJCSh1MzIpU0lTVVNCX0hBRERSKHgsIHkpLCBjb3VudCAqIDIsICZ3cml0dGVuKTsKKwkJCQkobG9uZylTSVNVU0JfSEFERFIoeCwgeSksIGNvdW50ICogMiwgJndyaXR0ZW4pOwogCiAJbXV0ZXhfdW5sb2NrKCZzaXN1c2ItPmxvY2spOwogfQpAQCAtNDkyLDcgKzQ5Miw3IEBACiAKIAogCXNpc3VzYl9jb3B5X21lbW9yeShzaXN1c2IsICh1bnNpZ25lZCBjaGFyICopU0lTVVNCX1ZBRERSKHgsIHkpLAotCQkJCSh1MzIpU0lTVVNCX0hBRERSKHgsIHkpLCBsZW5ndGgsICZ3cml0dGVuKTsKKwkJCQkobG9uZylTSVNVU0JfSEFERFIoeCwgeSksIGxlbmd0aCwgJndyaXR0ZW4pOwogCiAJbXV0ZXhfdW5sb2NrKCZzaXN1c2ItPmxvY2spOwogfQpAQCAtNTY0LDcgKzU2NCw3IEBACiAKIAogCXNpc3VzYl9jb3B5X21lbW9yeShzaXN1c2IsICh1bnNpZ25lZCBjaGFyICopU0lTVVNCX1ZBRERSKGR4LCBkeSksCi0JCQkJKHUzMilTSVNVU0JfSEFERFIoZHgsIGR5KSwgbGVuZ3RoLCAmd3JpdHRlbik7CisJCQkJKGxvbmcpU0lTVVNCX0hBRERSKGR4LCBkeSksIGxlbmd0aCwgJndyaXR0ZW4pOwogCiAJbXV0ZXhfdW5sb2NrKCZzaXN1c2ItPmxvY2spOwogfQpAQCAtNjEyLDcgKzYxMiw3IEBACiAJCQkJCQkJCWxlbmd0aCk7CiAKIAlzaXN1c2JfY29weV9tZW1vcnkoc2lzdXNiLCAodW5zaWduZWQgY2hhciAqKWMtPnZjX29yaWdpbiwKLQkJCQkodTMyKVNJU1VTQl9IQUREUigwLCAwKSwKKwkJCQkobG9uZylTSVNVU0JfSEFERFIoMCwgMCksCiAJCQkJbGVuZ3RoLCAmd3JpdHRlbik7CiAKIAltdXRleF91bmxvY2soJnNpc3VzYi0+bG9jayk7CkBAIC05MzksNyArOTM5LDcgQEAKIAl9CiAKIAlzaXN1c2JfY29weV9tZW1vcnkoc2lzdXNiLCAoY2hhciAqKVNJU1VTQl9WQUREUigwLCB0KSwKLQkJCQkodTMyKVNJU1VTQl9IQUREUigwLCB0KSwgbGVuZ3RoLCAmd3JpdHRlbik7CisJCQkJKGxvbmcpU0lTVVNCX0hBRERSKDAsIHQpLCBsZW5ndGgsICZ3cml0dGVuKTsKIAogCW11dGV4X3VubG9jaygmc2lzdXNiLT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jIGIvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jCmluZGV4IDMzY2Q5MWQuLjY3ZTJmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMKQEAgLTEyMCw4ICsxMjAsOCBAQAogCXN0cnVjdCB0cmFuY2V2aWJyYXRvciAqZGV2OwogCiAJZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50ZXJmYWNlKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NwZWVkKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKIAlrZnJlZShkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKaW5kZXggN2U4YTBhYy4uNzAyNTAyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCkBAIC03MDUsNyArNzA1LDcgQEAKIAkvKgogCSAqIEFsbG9jYXRlIHBhcnBvcnQgaW50ZXJmYWNlIAogCSAqLwotCWlmICghKHByaXYgPSBrY2FsbG9jKHNpemVvZihzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSksIDEsIEdGUF9LRVJORUwpKSkgeworCWlmICghKHByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSksIEdGUF9LRVJORUwpKSkgewogCQl1c2JfcHV0X2Rldih1c2JkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvYXNpeC5jIGIvZHJpdmVycy91c2IvbmV0L2FzaXguYwppbmRleCA5NWU2ODJlLi44OTY0NDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvYXNpeC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKQEAgLTg5OCw3ICs4OTgsNyBAQAogCiBzdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCWludCByZXQ7CisJaW50IHJldCwgZW1iZF9waHk7CiAJdm9pZCAqYnVmOwogCXUxNiByeF9jdGw7CiAJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKQEAgLTkxOSwxMyArOTE5LDE1IEBACiAJCQlBWF9HUElPX1JTRSB8IEFYX0dQSU9fR1BPXzIgfCBBWF9HUElPX0dQTzJFTiwgNSkpIDwgMCkKIAkJZ290byBvdXQyOwogCisJLyogMHgxMCBpcyB0aGUgcGh5IGlkIG9mIHRoZSBlbWJlZGRlZCAxMC8xMDAgZXRoZXJuZXQgcGh5ICovCisJZW1iZF9waHkgPSAoKGFzaXhfZ2V0X3BoeV9hZGRyKGRldikgJiAweDFmKSA9PSAweDEwID8gMSA6IDApOwogCWlmICgocmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUEhZX1NFTEVDVCwKLQkJCQkweDAwMDAsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQkJCWVtYmRfcGh5LCAwLCAwLCBidWYpKSA8IDApIHsKIAkJZGJnKCJTZWxlY3QgUEhZICMxIGZhaWxlZDogJWQiLCByZXQpOwogCQlnb3RvIG91dDI7CiAJfQogCi0JaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFBEKSkgPCAwKQorCWlmICgocmV0ID0gYXNpeF9zd19yZXNldChkZXYsIEFYX1NXUkVTRVRfSVBQRCB8IEFYX1NXUkVTRVRfUFJMKSkgPCAwKQogCQlnb3RvIG91dDI7CiAKIAltc2xlZXAoMTUwKTsKQEAgLTkzMyw4ICs5MzUsMTQgQEAKIAkJZ290byBvdXQyOwogCiAJbXNsZWVwKDE1MCk7Ci0JaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFJMIHwgQVhfU1dSRVNFVF9QUkwpKSA8IDApCi0JCWdvdG8gb3V0MjsKKwlpZiAoZW1iZF9waHkpIHsKKwkJaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFJMKSkgPCAwKQorCQkJZ290byBvdXQyOworCX0KKwllbHNlIHsKKwkJaWYgKChyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9QUlRFKSkgPCAwKQorCQkJZ290byBvdXQyOworCX0KIAogCW1zbGVlcCgxNTApOwogCXJ4X2N0bCA9IGFzaXhfcmVhZF9yeF9jdGwoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9nbDYyMGEuYyBiL2RyaXZlcnMvdXNiL25ldC9nbDYyMGEuYwppbmRleCBhMzI0MmJlLi5hNmYwZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvZ2w2MjBhLmMKKysrIGIvZHJpdmVycy91c2IvbmV0L2dsNjIwYS5jCkBAIC03OSwxNjAgKzc5LDYgQEAKIAlzdHJ1Y3QgZ2xfcGFja2V0CXBhY2tldHM7CiB9OwogCi0jaWZkZWYJR0VORUxJTktfQUNLCi0KLS8vIEZJWE1FOiAgdGhpcyBjb2RlIGlzIGluY29tcGxldGUsIG5vdCBkZWJ1Z2dlZDsgaXQgZG9lc24ndAotLy8gaGFuZGxlIGludGVycnVwdHMgY29ycmVjdGx5OyBpdCBzaG91bGQgdXNlIHRoZSBnZW5lcmljCi0vLyBzdGF0dXMgSVJRIGNvZGUgKHdoaWNoIGRpZG4ndCBleGlzdCBiYWNrIGluIDIwMDEpLgotCi1zdHJ1Y3QgZ2xfcHJpdiB7Ci0Jc3RydWN0IHVyYgkqaXJxX3VyYjsKLQljaGFyCQlpcnFfYnVmIFtJTlRFUlJVUFRfQlVGU0laRV07Ci19OwotCi1zdGF0aWMgaW5saW5lIGludCBnbF9jb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlKQotewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAotCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKLQkJICAgICAgcmVxdWVzdCwKLQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCi0JCSAgICAgIHZhbHVlLAotCQkgICAgICAwLAkJCS8vIGluZGV4Ci0JCSAgICAgIDAsCQkJLy8gZGF0YSBidWZmZXIKLQkJICAgICAgMCwJCQkvLyBzaXplCi0JCSAgICAgIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBnbF9pbnRlcnJ1cHRfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQotewotCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSAwOgotCQkvKiBzdWNjZXNzICovCi0JCWJyZWFrOwotCWNhc2UgLUVDT05OUkVTRVQ6Ci0JY2FzZSAtRU5PRU5UOgotCWNhc2UgLUVTSFVURE9XTjoKLQkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCi0JCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAotCQkJCV9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwotCX0KLQotCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHN0YXR1cykKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOwotfQotCi1zdGF0aWMgaW50IGdsX2ludGVycnVwdF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldikKLXsKLQlzdHJ1Y3QgZ2xfcHJpdgkqcHJpdiA9IGRldi0+cHJpdl9kYXRhOwotCWludAkJcmV0dmFsOwotCi0JLy8gaXNzdWUgdXNiIGludGVycnVwdCByZWFkCi0JaWYgKHByaXYgJiYgcHJpdi0+aXJxX3VyYikgewotCQkvLyBzdWJtaXQgdXJiCi0JCWlmICgocmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+aXJxX3VyYiwgR0ZQX0tFUk5FTCkpICE9IDApCi0JCQlkYmcoImdsX2ludGVycnVwdF9yZWFkOiBzdWJtaXQgZmFpbCAtICVYLi4uIiwgcmV0dmFsKTsKLQkJZWxzZQotCQkJZGJnKCJnbF9pbnRlcnJ1cHRfcmVhZDogc3VibWl0IHN1Y2Nlc3MuLi4iKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLy8gY2hlY2sgd2hldGhlciBhbm90aGVyIHNpZGUgaXMgY29ubmVjdGVkCi1zdGF0aWMgaW50IGdlbmVsaW5rX2NoZWNrX2Nvbm5lY3Qoc3RydWN0IHVzYm5ldCAqZGV2KQotewotCWludAkJCXJldHZhbDsKLQotCWRiZygiZ2VuZWxpbmtfY2hlY2tfY29ubmVjdC4uLiIpOwotCi0JLy8gZGV0ZWN0IHdoZXRoZXIgYW5vdGhlciBzaWRlIGlzIGNvbm5lY3RlZAotCWlmICgocmV0dmFsID0gZ2xfY29udHJvbF93cml0ZShkZXYsIEdFTkVMSU5LX0NPTk5FQ1RfV1JJVEUsIDApKSAhPSAwKSB7Ci0JCWRiZygiJXM6IGdlbmVsaW5rX2NoZWNrX2Nvbm5lY3Qgd3JpdGUgZmFpbCAtICVYIiwKLQkJCWRldi0+bmV0LT5uYW1lLCByZXR2YWwpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCS8vIHVzYiBpbnRlcnJ1cHQgcmVhZCB0byBhY2sgYW5vdGhlciBzaWRlCi0JaWYgKChyZXR2YWwgPSBnbF9pbnRlcnJ1cHRfcmVhZChkZXYpKSAhPSAwKSB7Ci0JCWRiZygiJXM6IGdlbmVsaW5rX2NoZWNrX2Nvbm5lY3QgcmVhZCBmYWlsIC0gJVgiLAotCQkJZGV2LT5uZXQtPm5hbWUsIHJldHZhbCk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JZGJnKCIlczogZ2VuZWxpbmtfY2hlY2tfY29ubmVjdCByZWFkIHN1Y2Nlc3MiLCBkZXYtPm5ldC0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8vIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBwcml2YXRlIGRhdGEgZm9yIGdlbmVsaW5rCi1zdGF0aWMgaW50IGdlbmVsaW5rX2luaXQoc3RydWN0IHVzYm5ldCAqZGV2KQotewotCXN0cnVjdCBnbF9wcml2ICpwcml2OwotCi0JLy8gYWxsb2NhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKLQlpZiAoKHByaXYgPSBrbWFsbG9jKHNpemVvZiAqcHJpdiwgR0ZQX0tFUk5FTCkpID09IDApIHsKLQkJZGJnKCIlczogY2Fubm90IGFsbG9jYXRlIHByaXZhdGUgZGF0YSBwZXIgZGV2aWNlIiwKLQkJCWRldi0+bmV0LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLy8gYWxsb2NhdGUgaXJxIHVyYgotCWlmICgocHJpdi0+aXJxX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpID09IDApIHsKLQkJZGJnKCIlczogY2Fubm90IGFsbG9jYXRlIHByaXZhdGUgaXJxIHVyYiBwZXIgZGV2aWNlIiwKLQkJCWRldi0+bmV0LT5uYW1lKTsKLQkJa2ZyZWUocHJpdik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8vIGZpbGwgaXJxIHVyYgotCXVzYl9maWxsX2ludF91cmIocHJpdi0+aXJxX3VyYiwgZGV2LT51ZGV2LAotCQl1c2JfcmN2aW50cGlwZShkZXYtPnVkZXYsIEdFTkVMSU5LX0lOVEVSUlVQVF9QSVBFKSwKLQkJcHJpdi0+aXJxX2J1ZiwgSU5URVJSVVBUX0JVRlNJWkUsCi0JCWdsX2ludGVycnVwdF9jb21wbGV0ZSwgMCwKLQkJR0VORUxJTktfSU5URVJSVVBUX0lOVEVSVkFMKTsKLQotCS8vIHNldCBwcml2YXRlIGRhdGEgcG9pbnRlcgotCWRldi0+cHJpdl9kYXRhID0gcHJpdjsKLQotCXJldHVybiAwOwotfQotCi0vLyByZWxlYXNlIHRoZSBwcml2YXRlIGRhdGEKLXN0YXRpYyBpbnQgZ2VuZWxpbmtfZnJlZShzdHJ1Y3QgdXNibmV0ICpkZXYpCi17Ci0Jc3RydWN0IGdsX3ByaXYJKnByaXYgPSBkZXYtPnByaXZfZGF0YTsKLQotCWlmICghcHJpdikKLQkJcmV0dXJuIDA7Ci0KLS8vIEZJWE1FOiAgY2FuJ3QgY2FuY2VsIGhlcmU7IGl0J3Mgc3luY2hyb25vdXMsIGFuZAotLy8gc2hvdWxkIGhhdmUgaGFwcGVuZWQgZWFybGllciBpbiBhbnkgY2FzZSAoaW50ZXJydXB0Ci0vLyBoYW5kbGluZyBuZWVkcyB0byBiZSBnZW5lcmljKQotCi0JLy8gY2FuY2VsIGlycSB1cmIgZmlyc3QKLQl1c2Jfa2lsbF91cmIocHJpdi0+aXJxX3VyYik7Ci0KLQkvLyBmcmVlIGlycSB1cmIKLQl1c2JfZnJlZV91cmIocHJpdi0+aXJxX3VyYik7Ci0KLQkvLyBmcmVlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlCi0Ja2ZyZWUocHJpdik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgZ2VuZWxpbmtfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBnbF9oZWFkZXIJKmhlYWRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL3VzYi9uZXQvcm5kaXNfaG9zdC5jCmluZGV4IDk5ZjI2YjMuLmEzMjJhMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy91c2IvbmV0L3JuZGlzX2hvc3QuYwpAQCAtMzc5LDYgKzM3OSw3IEBACiB7CiAJaW50CQkJcmV0dmFsOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQgPSBkZXYtPm5ldDsKKwlzdHJ1Y3QgY2RjX3N0YXRlCSppbmZvID0gKHZvaWQgKikgJmRldi0+ZGF0YTsKIAl1bmlvbiB7CiAJCXZvaWQJCQkqYnVmOwogCQlzdHJ1Y3Qgcm5kaXNfbXNnX2hkcgkqaGVhZGVyOwpAQCAtMzk3LDcgKzM5OCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXJldHZhbCA9IHVzYm5ldF9nZW5lcmljX2NkY19iaW5kKGRldiwgaW50Zik7CiAJaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gZG9uZTsKKwkJZ290byBmYWlsOwogCiAJbmV0LT5oYXJkX2hlYWRlcl9sZW4gKz0gc2l6ZW9mIChzdHJ1Y3Qgcm5kaXNfZGF0YV9oZHIpOwogCkBAIC00MTIsMTAgKzQxMyw3IEBACiAJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKSB7CiAJCS8qIGl0IG1pZ2h0IG5vdCBldmVuIGJlIGFuIFJORElTIGRldmljZSEhICovCiAJCWRldl9lcnIoJmludGYtPmRldiwgIlJORElTIGluaXQgZmFpbGVkLCAlZFxuIiwgcmV0dmFsKTsKLWZhaWw6Ci0JCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoZHJpdmVyX29mKGludGYpLAotCQkJKChzdHJ1Y3QgY2RjX3N0YXRlICopJihkZXYtPmRhdGEpKS0+ZGF0YSk7Ci0JCWdvdG8gZG9uZTsKKwkJZ290byBmYWlsX2FuZF9yZWxlYXNlOwogCX0KIAlkZXYtPmhhcmRfbXR1ID0gbGUzMl90b19jcHUodS5pbml0X2MtPm1heF90cmFuc2Zlcl9zaXplKTsKIAkvKiBSRVZJU0lUOiAgcGVyaXBoZXJhbCAiYWxpZ25tZW50IiByZXF1ZXN0IGlzIGlnbm9yZWQgLi4uICovCkBAIC00MzEsNyArNDI5LDcgQEAKIAlyZXR2YWwgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIpOwogCWlmICh1bmxpa2VseShyZXR2YWwgPCAwKSkgewogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJybmRpcyBnZXQgZXRoYWRkciwgJWRcbiIsIHJldHZhbCk7Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX2FuZF9yZWxlYXNlOwogCX0KIAl0bXAgPSBsZTMyX3RvX2NwdSh1LmdldF9jLT5vZmZzZXQpOwogCWlmICh1bmxpa2VseSgodG1wICsgOCkgPiAoMTAyNCAtIEVUSF9BTEVOKQpAQCAtNDM5LDcgKzQzNyw3IEBACiAJCWRldl9lcnIoJmludGYtPmRldiwgInJuZGlzIGV0aGFkZHIgb2ZmICVkIGxlbiAlZCA/XG4iLAogCQkJdG1wLCBsZTMyX3RvX2NwdSh1LmdldF9jLT5sZW4pKTsKIAkJcmV0dmFsID0gLUVET007Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX2FuZF9yZWxlYXNlOwogCX0KIAltZW1jcHkobmV0LT5kZXZfYWRkciwgdG1wICsgKGNoYXIgKikmdS5nZXRfYy0+cmVxdWVzdF9pZCwgRVRIX0FMRU4pOwogCkBAIC00NTUsMTEgKzQ1MywxOCBAQAogCXJldHZhbCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlcik7CiAJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgInJuZGlzIHNldCBwYWNrZXQgZmlsdGVyLCAlZFxuIiwgcmV0dmFsKTsKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWxfYW5kX3JlbGVhc2U7CiAJfQogCiAJcmV0dmFsID0gMDsKLWRvbmU6CisKKwlrZnJlZSh1LmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKKworZmFpbF9hbmRfcmVsZWFzZToKKwl1c2Jfc2V0X2ludGZkYXRhKGluZm8tPmRhdGEsIE5VTEwpOworCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoZHJpdmVyX29mKGludGYpLCBpbmZvLT5kYXRhKTsKK2ZhaWw6CiAJa2ZyZWUodS5idWYpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC00NjksNyArNDc0LDcgQEAKIAlzdHJ1Y3Qgcm5kaXNfaGFsdAkqaGFsdDsKIAogCS8qIHRyeSB0byBjbGVhciBhbnkgcm5kaXMgc3RhdGUvYWN0aXZpdHkgKG5vIGkvbyBmcm9tIHN0YWNrISkgKi8KLQloYWx0ID0ga2NhbGxvYygxLCBzaXplb2YgKmhhbHQsIEdGUF9LRVJORUwpOworCWhhbHQgPSBremFsbG9jKHNpemVvZiAqaGFsdCwgR0ZQX0tFUk5FTCk7CiAJaWYgKGhhbHQpIHsKIAkJaGFsdC0+bXNnX3R5cGUgPSBSTkRJU19NU0dfSEFMVDsKIAkJaGFsdC0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqaGFsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jIGIvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYwppbmRleCBjNTQyMzVmLi42NzAyNjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMKQEAgLTEyNCwxMCArMTI0LDExIEBACiAjZGVmaW5lCVJYX1VSQl9GQUlMCQkzCiAKIC8qIERlZmluZSB0aGVzZSB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBkZXZpY2UgKi8KLSNkZWZpbmUgVkVORE9SX0lEX1JFQUxURUsJCTB4MGJkYQorI2RlZmluZQlWRU5ET1JfSURfUkVBTFRFSwkJMHgwYmRhCiAjZGVmaW5lCVZFTkRPUl9JRF9NRUxDTwkJCTB4MDQxMQotI2RlZmluZSBWRU5ET1JfSURfTUlDUk9ORVQJCTB4Mzk4MAorI2RlZmluZQlWRU5ET1JfSURfTUlDUk9ORVQJCTB4Mzk4MAogI2RlZmluZQlWRU5ET1JfSURfTE9OR1NISU5FCQkweDA3YjgKKyNkZWZpbmUJVkVORE9SX0lEX09RTwkJCTB4MTU1NwogI2RlZmluZQlWRU5ET1JfSURfWllYRUwJCQkweDA1ODYKIAogI2RlZmluZSBQUk9EVUNUX0lEX1JUTDgxNTAJCTB4ODE1MApAQCAtMTQ0LDYgKzE0NSw3IEBACiAJe1VTQl9ERVZJQ0UoVkVORE9SX0lEX01FTENPLCBQUk9EVUNUX0lEX0xVQUtUWCl9LAogCXtVU0JfREVWSUNFKFZFTkRPUl9JRF9NSUNST05FVCwgUFJPRFVDVF9JRF9TUDEyOEFSKX0sCiAJe1VTQl9ERVZJQ0UoVkVORE9SX0lEX0xPTkdTSElORSwgUFJPRFVDVF9JRF9MQ1M4MTM4VFgpfSwKKwl7VVNCX0RFVklDRShWRU5ET1JfSURfT1FPLCBQUk9EVUNUX0lEX1JUTDgxNTApfSwKIAl7VVNCX0RFVklDRShWRU5ET1JfSURfWllYRUwsIFBST0RVQ1RfSURfUFJFU1RJR0UpfSwKIAl7fQogfTsKQEAgLTI4Miw3ICsyODQsOCBAQAogCXU4IGRhdGFbM10sIHRtcDsKIAogCWRhdGFbMF0gPSBwaHk7Ci0JKihkYXRhICsgMSkgPSBjcHVfdG9fbGUxNnAoJnJlZyk7CisJZGF0YVsxXSA9IHJlZyAmIDB4ZmY7CisJZGF0YVsyXSA9IChyZWcgPj4gOCkgJiAweGZmOwogCXRtcCA9IGluZHggfCBQSFlfV1JJVEUgfCBQSFlfR087CiAJaSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKaW5kZXggOTZjNzM3Mi4uZjJjYTc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKQEAgLTE5LDggKzE5LDExIEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MGM4OCwgMHgxN2RhKSB9LCAvKiBLeW9jZXJhIFdpcmVsZXNzIEtQQzY1MC9QYXNzcG9ydCAqLwogCXsgVVNCX0RFVklDRSgweDE0MTAsIDB4MTExMCkgfSwgLyogTm92YXRlbCBXaXJlbGVzcyBNZXJsaW4gQ0RNQSAqLworCXsgVVNCX0RFVklDRSgweDE0MTAsIDB4MTEzMCkgfSwgLyogTm92YXRlbCBXaXJlbGVzcyBTNzIwIENETUEvRVYtRE8gKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNDEwLCAweDIxMTApIH0sIC8qIE5vdmF0ZWwgV2lyZWxlc3MgVTcyMCBDRE1BL0VWLURPICovCiAJeyBVU0JfREVWSUNFKDB4MTQxMCwgMHgxNDMwKSB9LAkvKiBOb3ZhdGVsIE1lcmxpbiBYVTg3MCBIU0RQQS8zRyAqLwogCXsgVVNCX0RFVklDRSgweDE0MTAsIDB4MTEwMCkgfSwgLyogRXhwcmVzc0NhcmQzNCBRdWFsY29tbSAzRyBDRE1BICovCisJeyBVU0JfREVWSUNFKDB4NDEzYywgMHg4MTE1KSB9LCAvKiBEZWxsIFdpcmVsZXNzIEhTRFBBIDU1MDAgKi8KIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jCmluZGV4IDg2Mzk2NmMuLjUyNjFjZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGFyazMxMTZfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCisJCQkJc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBhcmszMTE2X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC0zMjYsNyArMzI2LDcgQEAKIAogc3RhdGljIGludCBhcmszMTE2X29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IHRlcm1pb3MgdG1wX3Rlcm1pb3M7CisJc3RydWN0IGt0ZXJtaW9zIHRtcF90ZXJtaW9zOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJY2hhciAqYnVmOwogCWludCByZXN1bHQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCmluZGV4IDg4MzViYjUuLjM4YjRkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKQEAgLTkyLDcgKzkyLDcgQEAKIHN0YXRpYyBpbnQgIGJlbGtpbl9zYV9vcGVuCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIHZvaWQgYmVsa2luX3NhX2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwogc3RhdGljIHZvaWQgYmVsa2luX3NhX3JlYWRfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgYmVsa2luX3NhX3NldF90ZXJtaW9zCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CitzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2V0X3Rlcm1pb3MJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqIG9sZCk7CiBzdGF0aWMgaW50ICBiZWxraW5fc2FfaW9jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIGJlbGtpbl9zYV9icmVha19jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKTsKIHN0YXRpYyBpbnQgIGJlbGtpbl9zYV90aW9jbWdldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKQEAgLTMzMyw3ICszMzMsNyBAQAogCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKIH0KIAotc3RhdGljIHZvaWQgYmVsa2luX3NhX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgYmVsa2luX3NhX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwppbmRleCA3MTY3NzI4Li45Mzg2ZTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCWludCByZXR2YWwgPSAwOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0Jc3RydWN0IHRlcm1pb3MgKnRlcm1pb3M7CisJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zOwogCiAJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKaW5kZXggZjk1ZDQyYy4uN2ViYWZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwpAQCAtNDEsNyArNDEsNyBAQAogc3RhdGljIHZvaWQgY3AyMTAxX2NsZWFudXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCopOwogc3RhdGljIHZvaWQgY3AyMTAxX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqLCBzdHJ1Y3QgZmlsZSopOwogc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqKTsKLXN0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0Kiwgc3RydWN0IHRlcm1pb3MqKTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0Kiwgc3RydWN0IGt0ZXJtaW9zKik7CiBzdGF0aWMgaW50IGNwMjEwMV90aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICosIHN0cnVjdCBmaWxlICosCiAJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKQEAgLTY5LDYgKzY5LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyMTgpIH0sIC8qIExpcG93c2t5IEluZHVzdHJpZSBFbGVrdHJvbmlrIEdtYkgsIEhBUlAtMSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MCkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MSkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLworCXsgVVNCX0RFVklDRSgweDEzQUQsIDB4OTk5OSkgfSwgLyogQmFsdGVjaCBjYXJkIHJlYWRlciAqLwogCXsgVVNCX0RFVklDRSgweDE2RDYsIDB4MDAwMSkgfSwgLyogSmFibG90cm9uIHNlcmlhbCBpbnRlcmZhY2UgKi8KIAl7IH0gLyogVGVybWluYXRpbmcgRW50cnkgKi8KIH07CkBAIC01MDYsNyArNTA3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCisJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJdW5zaWduZWQgaW50IGNmbGFnLCBvbGRfY2ZsYWc9MDsKIAlpbnQgYmF1ZD0wLCBiaXRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggMDkzZjMwMy4uNmJjMWY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsgIC8qIHVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KIAljaGFyIHByZXZfc3RhdHVzLCBkaWZmX3N0YXR1czsJICAgLyogdXNlZCBmb3IgVElPQ01JV0FJVCAqLwogCS8qIHdlIHBhc3MgYSBwb2ludGVyIHRvIHRoaXMgYXMgdGhlIGFyZ3VlbWVudCBzZW50IHRvIGN5cHJlc3Nfc2V0X3Rlcm1pb3Mgb2xkX3Rlcm1pb3MgKi8KLQlzdHJ1Y3QgdGVybWlvcyB0bXBfdGVybWlvczsgCSAgIC8qIHN0b3JlcyB0aGUgb2xkIHRlcm1pb3Mgc2V0dGluZ3MgKi8KKwlzdHJ1Y3Qga3Rlcm1pb3MgdG1wX3Rlcm1pb3M7IAkgICAvKiBzdG9yZXMgdGhlIG9sZCB0ZXJtaW9zIHNldHRpbmdzICovCiB9OwogCiAvKiB3cml0ZSBidWZmZXIgc3RydWN0dXJlICovCkBAIC0xNjUsNyArMTY1LDcgQEAKIHN0YXRpYyB2b2lkIGN5cHJlc3Nfc2VuZAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIGludCAgY3lwcmVzc193cml0ZV9yb29tCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW50ICBjeXByZXNzX2lvY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1zdGF0aWMgdm9pZCBjeXByZXNzX3NldF90ZXJtaW9zCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworc3RhdGljIHZvaWQgY3lwcmVzc19zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqIG9sZCk7CiBzdGF0aWMgaW50ICBjeXByZXNzX3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIGludCAgY3lwcmVzc190aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwogc3RhdGljIGludCAgY3lwcmVzc19jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwpAQCAtOTQ5LDI4ICs5NDksMTMgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgVElPQ0dTRVJJQUw6Ci0JCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgcG9ydC0+dHR5LT50ZXJtaW9zLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkgeworCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIHBvcnQtPnR0eS0+dGVybWlvcywgc2l6ZW9mKHN0cnVjdCBrdGVybWlvcykpKSB7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAJCQlyZXR1cm4gKDApOwogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ1NTRVJJQUw6Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIocG9ydC0+dHR5LT50ZXJtaW9zLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpKSB7Ci0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCQkvKiBoZXJlIHdlIG5lZWQgdG8gY2FsbCBjeXByZXNzX3NldF90ZXJtaW9zIHRvIGludm9rZSB0aGUgbmV3IHNldHRpbmdzICovCi0JCQljeXByZXNzX3NldF90ZXJtaW9zKHBvcnQsICZwcml2LT50bXBfdGVybWlvcyk7Ci0JCQlyZXR1cm4gKDApOwotCQkJYnJlYWs7Ci0JCS8qIHRoZXNlIGFyZSBjYWxsZWQgd2hlbiBzZXR0aW5nIGJhdWQgcmF0ZSBmcm9tIGdwc2QgKi8KLQkJY2FzZSBUQ0dFVFM6Ci0JCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgcG9ydC0+dHR5LT50ZXJtaW9zLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkgewotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQkJcmV0dXJuICgwKTsKLQkJCWJyZWFrOwotCQljYXNlIFRDU0VUUzoKLQkJCWlmIChjb3B5X2Zyb21fdXNlcihwb3J0LT50dHktPnRlcm1pb3MsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihwb3J0LT50dHktPnRlcm1pb3MsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHN0cnVjdCBrdGVybWlvcykpKSB7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAJCQkvKiBoZXJlIHdlIG5lZWQgdG8gY2FsbCBjeXByZXNzX3NldF90ZXJtaW9zIHRvIGludm9rZSB0aGUgbmV3IHNldHRpbmdzICovCkBAIC0xMDE5LDcgKzEwMDQsNyBAQAogCiAKIHN0YXRpYyB2b2lkIGN5cHJlc3Nfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKKwkJc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CkBAIC0xNDkzLDcgKzE0NzgsNyBAQAogCWlmIChzaXplID09IDApCiAJCXJldHVybiBOVUxMOwogCi0JY2IgPSAoc3RydWN0IGN5cHJlc3NfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGN5cHJlc3NfYnVmKSwgR0ZQX0tFUk5FTCk7CisJY2IgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3lwcmVzc19idWYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwppbmRleCA4M2QwZTIxLi5lZmQ5Y2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCkBAIC00NDksNyArNDQ5LDcgQEAKIHN0YXRpYyB2b2lkIGRpZ2lfcnhfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZGlnaV9yeF91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGRpZ2lfc2V0X3Rlcm1pb3MoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAotCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyApOworCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MgKTsKIHN0YXRpYyB2b2lkIGRpZ2lfYnJlYWtfY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKTsKIHN0YXRpYyBpbnQgZGlnaV9pb2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKTsKQEAgLTk3Niw3ICs5NzYsNyBAQAogCiAKIHN0YXRpYyB2b2lkIGRpZ2lfc2V0X3Rlcm1pb3MoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAotCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyApCisJc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyApCiB7CiAKIAlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtMTQ2Myw3ICsxNDYzLDcgQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKIAlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXN0cnVjdCB0ZXJtaW9zIG5vdF90ZXJtaW9zOworCXN0cnVjdCBrdGVybWlvcyBub3RfdGVybWlvczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAogCkBAIC0xNjgxLDcgKzE2ODEsNyBAQAogCWZvciggaT0wOyBpPHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzKzE7IGkrKyApIHsKIAogCQkvKiBhbGxvY2F0ZSBwb3J0IHByaXZhdGUgc3RydWN0dXJlICovCi0JCXByaXYgPSAoc3RydWN0IGRpZ2lfcG9ydCAqKWttYWxsb2MoIHNpemVvZihzdHJ1Y3QgZGlnaV9wb3J0KSwKKwkJcHJpdiA9IGttYWxsb2MoIHNpemVvZihzdHJ1Y3QgZGlnaV9wb3J0KSwKIAkJCUdGUF9LRVJORUwgKTsKIAkJaWYoIHByaXYgPT0gKHN0cnVjdCBkaWdpX3BvcnQgKikwICkgewogCQkJd2hpbGUoIC0taSA+PSAwICkKQEAgLTE3MTQsNyArMTcxNCw3IEBACiAJfQogCiAJLyogYWxsb2NhdGUgc2VyaWFsIHByaXZhdGUgc3RydWN0dXJlICovCi0Jc2VyaWFsX3ByaXYgPSAoc3RydWN0IGRpZ2lfc2VyaWFsICopa21hbGxvYyggc2l6ZW9mKHN0cnVjdCBkaWdpX3NlcmlhbCksCisJc2VyaWFsX3ByaXYgPSBrbWFsbG9jKCBzaXplb2Yoc3RydWN0IGRpZ2lfc2VyaWFsKSwKIAkJR0ZQX0tFUk5FTCApOwogCWlmKCBzZXJpYWxfcHJpdiA9PSAoc3RydWN0IGRpZ2lfc2VyaWFsICopMCApIHsKIAkJZm9yKCBpPTA7IGk8c2VyaWFsLT50eXBlLT5udW1fcG9ydHMrMTsgaSsrICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKaW5kZXggNGNlMTBhOC4uOTJiZWViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAkJCQkJc3RydWN0IGZpbGUgKiBmaWxlLAogCQkJCQl1bnNpZ25lZCBpbnQgY21kLAogCQkJCQl1bnNpZ25lZCBsb25nIGFyZyk7Ci1zdGF0aWMgdm9pZCBlbXBlZ19zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgdm9pZCBlbXBlZ19zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOwogc3RhdGljIHZvaWQgZW1wZWdfd3JpdGVfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIGVtcGVnX3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiKTsKIApAQCAtNDQyLDcgKzQ0Miw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgZW1wZWdfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIGVtcGVnX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IDcyZTRkNDguLjY5ODZlNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC00NTIsNiArNDUyLDcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIExJTlhfRlVUVVJFXzJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQ1NJQ0RVMjBfMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0NDU0lDRFU0MF8xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQ0NTTUFDSFhfMl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBJTlNJREVfQUNDRVNTTykgfSwKIAl7IFVTQl9ERVZJQ0UoSU5UUkVQSURfVklELCBJTlRSRVBJRF9WQUxVRUNBTl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKElOVFJFUElEX1ZJRCwgSU5UUkVQSURfTkVPVklfUElEKSB9LApAQCAtNTk1LDcgKzU5Niw3IEBACiBzdGF0aWMgdm9pZCBmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCBmdGRpX3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIGZ0ZGlfcHJvY2Vzc19yZWFkCQkoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyB2b2lkIGZ0ZGlfc2V0X3Rlcm1pb3MJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CitzdGF0aWMgdm9pZCBmdGRpX3NldF90ZXJtaW9zCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICogb2xkKTsKIHN0YXRpYyBpbnQgIGZ0ZGlfdGlvY21nZXQgICAgICAgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIGludCAgZnRkaV90aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKIHN0YXRpYyBpbnQgIGZ0ZGlfaW9jdGwJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CkBAIC0xODgwLDcgKzE4ODEsNyBAQAogICogV0FSTklORzogc2V0X3Rlcm1pb3MgY2FsbHMgdGhpcyB3aXRoIG9sZF90ZXJtaW9zIGluIGtlcm5lbCBzcGFjZQogICovCiAKLXN0YXRpYyB2b2lkIGZ0ZGlfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIGZ0ZGlfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7IC8qIGZ0ZGlfdGVybWlvcyAqLwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAl1bnNpZ25lZCBpbnQgY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IGJhZTExN2QuLjQwZGQzOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC0zMTIsOCArMzEyLDkgQEAKIAogLyogQ0NTIEluYy4gSUNEVS9JQ0RVNDAgcHJvZHVjdCBJRCAtIHRoZSBGVDIzMkJNIGlzIHVzZWQgaW4gYW4gaW4tY2lyY3VpdC1kZWJ1Z2dlciAqLwogLyogdW5pdCBmb3IgUElDMTYncy9QSUMxOCdzICovCi0jZGVmaW5lIEZURElfQ0NTSUNEVTIwXzBfUElEICAgIDB4RjlEMCAgICAgCi0jZGVmaW5lIEZURElfQ0NTSUNEVTQwXzFfUElEICAgIDB4RjlEMSAgICAgCisjZGVmaW5lIEZURElfQ0NTSUNEVTIwXzBfUElEICAgIDB4RjlEMAorI2RlZmluZSBGVERJX0NDU0lDRFU0MF8xX1BJRCAgICAweEY5RDEKKyNkZWZpbmUgRlRESV9DQ1NNQUNIWF8yX1BJRCAgICAgMHhGOUQyCiAKIC8qIEluc2lkZSBBY2Nlc3NvIGNvbnRhY3RsZXNzIHJlYWRlciAoaHR0cDovL3d3dy5pbnNpZGVmci5jb20pICovCiAjZGVmaW5lIElOU0lERV9BQ0NFU1NPCQkweEZBRDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnVuc29mdC5jCmluZGV4IDc3Yjk3NzIuLjJiZWJkNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z1bnNvZnQuYwpAQCAtMTQsNiArMTQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCitzdGF0aWMgaW50IGRlYnVnOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MTQwNCwgMHhjZGRjKSB9LApAQCAtMjEsNiArMjQsMjYgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwogCitzdGF0aWMgaW50IGZ1bnNvZnRfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGt0ZXJtaW9zIHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgY21kIDB4JTA0eCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJaWYgKGNtZCA9PSBUQ1NFVFNGKSB7CisJCWlmICh1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoJnQsIChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJZGJnKCIlcyAtIGlmbGFnOiV4IG9mbGFnOiV4IGNmbGFnOiV4IGxmbGFnOiV4IiwgX19GVU5DVElPTl9fLAorCQkgICAgdC5jX2lmbGFnLCB0LmNfb2ZsYWcsIHQuY19jZmxhZywgdC5jX2xmbGFnKTsKKworCQlpZiAoISh0LmNfbGZsYWcgJiBJQ0FOT04pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBmdW5zb2Z0X2RyaXZlciA9IHsKIAkubmFtZSA9CQkiZnVuc29mdCIsCiAJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKQEAgLTM5LDYgKzYyLDcgQEAKIAkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKIAkubnVtX2J1bGtfb3V0ID0JCU5VTV9ET05UX0NBUkUsCiAJLm51bV9wb3J0cyA9CQkxLAorCS5pb2N0bCA9CQlmdW5zb2Z0X2lvY3RsLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZnVuc29mdF9pbml0KHZvaWQpCkBAIC02MywzICs4Nyw2IEBACiBtb2R1bGVfaW5pdChmdW5zb2Z0X2luaXQpOwogbW9kdWxlX2V4aXQoZnVuc29mdF9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggZDA2NTQ3YS4uZjYyM2Q1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTIyOSw3ICsyMjksNyBAQAogc3RhdGljIGludCAgZWRnZV9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZWRnZV90aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZWRnZV91bnRocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9pZCBlZGdlX3NldF90ZXJtaW9zCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyB2b2lkIGVkZ2Vfc2V0X3Rlcm1pb3MJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKTsKIHN0YXRpYyBpbnQgIGVkZ2VfaW9jdGwJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIGVkZ2VfYnJlYWsJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKTsKIHN0YXRpYyBpbnQgIGVkZ2VfdGlvY21nZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CkBAIC0yNTcsNyArMjU3LDcgQEAKIHN0YXRpYyBpbnQgIHNlbmRfaW9zcF9leHRfY21kCQkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBjb21tYW5kLCBfX3U4IHBhcmFtKTsKIHN0YXRpYyBpbnQgIGNhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IJKGludCBiYXVkX3JhdGUsIGludCAqZGl2aXNvcik7CiBzdGF0aWMgaW50ICBzZW5kX2NtZF93cml0ZV9iYXVkX3JhdGUJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIGludCBiYXVkUmF0ZSk7Ci1zdGF0aWMgdm9pZCBjaGFuZ2VfcG9ydF9zZXR0aW5ncwkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyB2b2lkIGNoYW5nZV9wb3J0X3NldHRpbmdzCShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKTsKIHN0YXRpYyBpbnQgIHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggcmVnTnVtLCBfX3U4IHJlZ1ZhbHVlKTsKIHN0YXRpYyBpbnQgIHdyaXRlX2NtZF91c2IJCShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCB3cml0ZUxlbmd0aCk7CiBzdGF0aWMgdm9pZCBzZW5kX21vcmVfcG9ydF9kYXRhCQkoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsIHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpOwpAQCAtMTQzMSw3ICsxNDMxLDcgQEAKICAqIFNlcmlhbFNldFRlcm1pb3MKICAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8gY2hhbmdlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CkBAIC0yNDEyLDcgKzI0MTIsNyBAQAogI2lmbmRlZiBDTVNQQVIKICNkZWZpbmUgQ01TUEFSIDAKICNlbmRpZgotc3RhdGljIHZvaWQgY2hhbmdlX3BvcnRfc2V0dGluZ3MgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3N0YXRpYyB2b2lkIGNoYW5nZV9wb3J0X3NldHRpbmdzIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJaW50IGJhdWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCmluZGV4IGVlMGM5MjEuLjk4MDI4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCkBAIC0yMzgsNyArMjM4LDcgQEAKIHN0YXRpYyB2b2lkIHN0b3BfcmVhZChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0KTsKIHN0YXRpYyBpbnQgcmVzdGFydF9yZWFkKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpOwogCi1zdGF0aWMgdm9pZCBlZGdlX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7CiBzdGF0aWMgdm9pZCBlZGdlX3NlbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiAKIC8qIGNpcmN1bGFyIGJ1ZmZlciAqLwpAQCAtMjM2MSw3ICsyMzYxLDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgdm9pZCBjaGFuZ2VfcG9ydF9zZXR0aW5ncyAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgY2hhbmdlX3BvcnRfc2V0dGluZ3MgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IHVtcF91YXJ0X2NvbmZpZyAqY29uZmlnOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CkBAIC0yNTEyLDcgKzI1MTIsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CkBAIC0yODExLDcgKzI4MTEsNyBAQAogCWlmIChzaXplID09IDApCiAJCXJldHVybiBOVUxMOwogCi0JZWIgPSAoc3RydWN0IGVkZ2VfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGVkZ2VfYnVmKSwgR0ZQX0tFUk5FTCk7CisJZWIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZWRnZV9idWYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZWIgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IGQ3MmNmOGIuLjQyZjc1N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiAKIAlieXRlc19pbiA9IDA7CiAJYnl0ZXNfb3V0ID0gMDsKLQlwcml2ID0gKHN0cnVjdCBpcGFxX3ByaXZhdGUgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBhcV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGFxX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdiA9PSBOVUxMKSB7CiAJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKaW5kZXggMzMxYmY4MS4uOGZkZjQ4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiBzdGF0aWMgaW50ICBpcl93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogc3RhdGljIHZvaWQgaXJfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIGlyX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkIGlyX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIHZvaWQgaXJfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOwogCiBzdGF0aWMgdTggaXJfYmF1ZCA9IDA7CiBzdGF0aWMgdTggaXJfeGJvZiA9IDA7CkBAIC00OTcsNyArNDk3LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGlyX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBpcl9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CiAJdW5zaWduZWQgaW50IGNmbGFnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKaW5kZXggNzYzOTY1Mi4uOWQyZmRmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAogCiBzdGF0aWMgdm9pZCBrZXlzcGFuX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKLQkJCQkgICAgIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKKwkJCQkgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJaW50CQkJCWJhdWRfcmF0ZSwgZGV2aWNlX3BvcnQ7CiAJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKaW5kZXggNzQ3MmVkNi4uNjQxM2Q3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCkBAIC01OSw3ICs1OSw3IEBACiAJCQkJCSB1bnNpZ25lZCBpbnQgY21kLAogCQkJCQkgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQga2V5c3Bhbl9zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJCSBzdHJ1Y3QgdGVybWlvcyAqb2xkKTsKKwkJCQkJIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKIHN0YXRpYyB2b2lkIGtleXNwYW5fYnJlYWtfY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQkJIGludCBicmVha19zdGF0ZSk7CiBzdGF0aWMgaW50ICBrZXlzcGFuX3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKaW5kZXggZTA5YTBiZi4uMTI2Yjk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCiAKIHN0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKLQkJCQkgICAgIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKKwkJCQkgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAl1bnNpZ25lZCBpbnQgY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwppbmRleCAxN2UyMDU2Li41YzRiMDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKQEAgLTg2LDExICs4Niw3IEBACiAKIHN0YXRpYyB2b2lkIGtsc2lfMTA1X3JlYWRfYnVsa19jYWxsYmFjayAgKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCBrbHNpXzEwNV9zZXRfdGVybWlvcyAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkgIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKLXN0YXRpYyBpbnQgIGtsc2lfMTA1X2lvY3RsCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkgIHN0cnVjdCBmaWxlICogZmlsZSwKLQkJCQkJICB1bnNpZ25lZCBpbnQgY21kLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwkJCQkJICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CiBzdGF0aWMgdm9pZCBrbHNpXzEwNV90aHJvdHRsZQkJIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGtsc2lfMTA1X3VudGhyb3R0bGUJCSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiAvKgpAQCAtMTQwLDcgKzEzNiw2IEBACiAJLmNoYXJzX2luX2J1ZmZlciA9ICAga2xzaV8xMDVfY2hhcnNfaW5fYnVmZmVyLAogCS53cml0ZV9yb29tID0gICAgICAgIGtsc2lfMTA1X3dyaXRlX3Jvb20sCiAJLnJlYWRfYnVsa19jYWxsYmFjayA9a2xzaV8xMDVfcmVhZF9idWxrX2NhbGxiYWNrLAotCS5pb2N0bCA9CSAgICAga2xzaV8xMDVfaW9jdGwsCiAJLnNldF90ZXJtaW9zID0JICAgICBrbHNpXzEwNV9zZXRfdGVybWlvcywKIAkvKi5icmVha19jdGwgPQkgICAgIGtsc2lfMTA1X2JyZWFrX2N0bCwqLwogCS50aW9jbWdldCA9ICAgICAgICAgIGtsc2lfMTA1X3Rpb2NtZ2V0LApAQCAtMTY0LDcgKzE1OSw3IEBACiAjZGVmaW5lIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRQk2NAogc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgewogCXN0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzCWNmZzsKLQlzdHJ1Y3QgdGVybWlvcwkJCXRlcm1pb3M7CisJc3RydWN0IGt0ZXJtaW9zCQkJdGVybWlvczsKIAl1bnNpZ25lZCBsb25nCQkJbGluZV9zdGF0ZTsgLyogbW9kZW0gbGluZSBzZXR0aW5ncyAqLwogCS8qIHdyaXRlIHBvb2wgKi8KIAlzdHJ1Y3QgdXJiICoJCQl3cml0ZV91cmJfcG9vbFtOVU1fVVJCU107CkBAIC02ODgsNyArNjgzLDcgQEAKIAogCiBzdGF0aWMgdm9pZCBrbHNpXzEwNV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQkgIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKKwkJCQkgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgaW50IGlmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOwpAQCAtODk5LDY5ICs4OTQsNiBAQAogKi8KIAlyZXR1cm4gcmV0dmFsOwogfQotCQkJCQkKLXN0YXRpYyBpbnQga2xzaV8xMDVfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwKLQkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXZvaWQgX191c2VyICp1c2VyX2FyZyA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQkKLQlkYmcoIiVzY21kPTB4JXgiLCBfX0ZVTkNUSU9OX18sIGNtZCk7Ci0KLQkvKiBCYXNlZCBvbiBjb2RlIGZyb20gYWNtLmMgYW5kIG90aGVycyAqLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBUSU9DTUlXQUlUOgotCQkvKiB3YWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykqLwotCQkvKiBUT0RPICovCi0JCWRiZygiJXMgLSBUSU9DTUlXQUlUIG5vdCBoYW5kbGVkIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQljYXNlIFRJT0NHSUNPVU5UOgotCQkvKiByZXR1cm4gY291bnQgb2YgbW9kZW1saW5lIHRyYW5zaXRpb25zICovCi0JCS8qIFRPRE8gKi8KLQkJZGJnKCIlcyAtIFRJT0NHSUNPVU5UIG5vdCBoYW5kbGVkIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQljYXNlIFRDR0VUUzoKLQkJLyogcmV0dXJuIGN1cnJlbnQgaW5mbyB0byBjYWxsZXIgKi8KLQkJZGJnKCIlcyAtIFRDR0VUUyBkYXRhIGZha2VkL2luY29tcGxldGUiLCBfX0ZVTkNUSU9OX18pOwotCi0JCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXNlcl9hcmcsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJaWYgKGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcygoc3RydWN0IHRlcm1pb3MgX191c2VyICopYXJnLAotCQkJCQkJICAgJnByaXYtPnRlcm1pb3MpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCWNhc2UgVENTRVRTOgotCQkvKiBzZXQgcG9ydCB0ZXJtaW9zIHRvIHRoZSBvbmUgZ2l2ZW4gYnkgdGhlIHVzZXIgKi8KLQkJZGJnKCIlcyAtIFRDU0VUUyBub3QgaGFuZGxlZCIsIF9fRlVOQ1RJT05fXyk7Ci0KLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzZXJfYXJnLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWlmICh1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoJnByaXYtPnRlcm1pb3MsCi0JCQkJCQkgICAoc3RydWN0IHRlcm1pb3MgX191c2VyICopYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlrbHNpXzEwNV9zZXRfdGVybWlvcyhwb3J0LCAmcHJpdi0+dGVybWlvcyk7Ci0JCXJldHVybiAwOwotCWNhc2UgVENTRVRTVzogewotCQkvKiBzZXQgcG9ydCB0ZXJtaW9zIGFuZCB0cnkgdG8gd2FpdCBmb3IgY29tcGxldGlvbiBvZiBsYXN0Ci0JCSAqIHdyaXRlIG9wZXJhdGlvbiAqLwotCQkvKiBXZSBndWVzcyBoZXJlLiBJZiB0aGVyZSBhcmUgbm90IHRvbyBtYW55IHdyaXRlIHVyYnMKLQkJICogb3V0c3RhbmRpbmcsIHdlIGxpZS4gKi8KLQkJLyogd2hhdCBpcyB0aGUgcmlnaHQgd2F5IHRvIHdhaXQgaGVyZT8gc2NoZWR1bGUoKSA/ICovCi0JICAgICAgICAvKgotCQl3aGlsZSAoa2xzaV8xMDVfY2hhcnNfaW5fYnVmZmVyKHBvcnQpID4gKE5VTV9VUkJTIC8gNCApICogVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFKQotCQkJICAgIHNjaGVkdWxlKCk7Ci0JCSAqLwotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCQkgICAgICB9Ci0JZGVmYXVsdDoKLQkJZGJnKCIlczogYXJnIG5vdCBzdXBwb3J0ZWQgLSAweCUwNHgiLCBfX0ZVTkNUSU9OX18sY21kKTsKLQkJcmV0dXJuKC1FTk9JT0NUTENNRCk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0gLyoga2xzaV8xMDVfaW9jdGwgKi8KIAogc3RhdGljIHZvaWQga2xzaV8xMDVfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKaW5kZXggMjM3Mjg5OS4uNjJiZWEwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJaW50IGN1cl9wb3M7IC8vIGluZGV4IG9mIHRoZSBuZXh0IGNoYXIgdG8gc2VuZCBpbiBidWYKIAlfX3UxNiBkZXZpY2VfdHlwZTsKIAlpbnQgbGluZV9zdGF0ZTsKLQlzdHJ1Y3QgdGVybWlvcyBpbnRlcm5hbF90ZXJtaW9zOworCXN0cnVjdCBrdGVybWlvcyBpbnRlcm5hbF90ZXJtaW9zOwogfTsKIAogCkBAIC0yNjksNyArMjY5LDcgQEAKIAl9CiAKIAkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHdyaXRlX3VyYiB0cmFuc2ZlciBidWZmZXIKLQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2Mod3JpdGVfdXJiX3RyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIEdGUF9LRVJORUwpOworCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyh3cml0ZV91cmJfdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKIAkJa2ZyZWUodHJhbnNmZXJfYnVmZmVyKTsKIAkJdXNiX2ZyZWVfdXJiKHBvcnQtPndyaXRlX3VyYik7CkBAIC02MjQsMTEgKzYyNCwxMSBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFRDR0VUUzogICAvLyAweDU0MDEKLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1c2VyX2FyZywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpIHsKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1c2VyX2FyZywgc2l6ZW9mKHN0cnVjdCBrdGVybWlvcykpKSB7CiAJCQlkYmcoIiVzIC0gcG9ydCAlZCBFcnJvciBpbiBhY2Nlc3Nfb2siLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQlpZiAoa2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcsCisJCWlmIChrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3MoKHN0cnVjdCBrdGVybWlvcyBfX3VzZXIgKilhcmcsCiAJCQkJCQkgICAmcHJpdi0+aW50ZXJuYWxfdGVybWlvcykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7CkBAIC02MzgsMTIgKzYzOCwxMiBAQAogCQkJZGJnKCIlcyAtIHBvcnQgJWQgRXJyb3I6IHBvcnQtPnR0eS0+dGVybWlvcyBpcyBOVUxMIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCQkJcmV0dXJuIC1FTk9UVFk7CiAJCX0KLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzZXJfYXJnLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkgeworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXNlcl9hcmcsIHNpemVvZihzdHJ1Y3Qga3Rlcm1pb3MpKSkgewogCQkJZGJnKCIlcyAtIHBvcnQgJWQgRXJyb3IgaW4gYWNjZXNzX29rIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJaWYgKHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcygmcHJpdi0+aW50ZXJuYWxfdGVybWlvcywKLQkJCQkJCSAgIChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcpKQorCQkJCQkJICAgKHN0cnVjdCBrdGVybWlvcyBfX3VzZXIgKilhcmcpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQogCQlzZXR0aW5ncyA9IGt6YWxsb2MoNTAsIEdGUF9LRVJORUwpOwpAQCAtNjk2LDcgKzY5Niw3IEBACiAJCXJldHVybiAwOwogCiAJY2FzZSBUQ0ZMU0g6ICAgLy8gMHg1NDBCCi0JCXRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2ModHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCXRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2ModHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghIHRyYW5zZmVyX2J1ZmZlcikgewogCQkgCXJldHVybiAtRU5PQlVGUzsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwppbmRleCBhOTA2ZTUwLi4zOGIxZDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpAQCAtOTgsNyArOTgsNyBAQAogCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyB2b2lkIG1jdF91MjMyX3JlYWRfaW50X2NhbGxiYWNrICAgKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCBtY3RfdTIzMl9zZXRfdGVybWlvcyAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCQkgIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKKwkJCQkJICBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpOwogc3RhdGljIGludCAgbWN0X3UyMzJfaW9jdGwJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJCSAgc3RydWN0IGZpbGUgKiBmaWxlLAogCQkJCQkgIHVuc2lnbmVkIGludCBjbWQsCkBAIC01NTYsNyArNTU2LDcgQEAKIH0gLyogbWN0X3UyMzJfcmVhZF9pbnRfY2FsbGJhY2sgKi8KIAogc3RhdGljIHZvaWQgbWN0X3UyMzJfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJICBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCisJCQkJICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYwppbmRleCA3MGY5M2IxLi5lNTVmNGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKQEAgLTEwMTQsNyArMTAxNCw3IEBACiAgKiAgICAgIHRoZSBzcGVjaWZpZWQgbmV3IHNldHRpbmdzLgogICovCiBzdGF0aWMgdm9pZCBjaGFuZ2VfcG9ydF9zZXR0aW5ncyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQsCi0JCQkJIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKKwkJCQkgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CkBAIC0xMjAzLDcgKzEyMDMsNyBAQAogICoJdGVybWlvcyBzdHJ1Y3R1cmUuCiAgKi8KIHN0YXRpYyB2b2lkIG1vczc3MjBfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCQlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCisJCQkJc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGludCBjZmxhZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCmluZGV4IDU0MzJjNjMuLjgzZjY2MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwpAQCAtMTkzMSw3ICsxOTMxLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQgbW9zNzg0MF9jaGFuZ2VfcG9ydF9zZXR0aW5ncyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQsCi0JCQkJCSBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCisJCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJaW50IGJhdWQ7CkBAIC0yMTE4LDcgKzIxMTgsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZCBtb3M3ODQwX3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorCQkJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgY2ZsYWc7CkBAIC0yNDYwLDEyICsyNDYwLDYgQEAKIAkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAkJcmV0dXJuIDA7CiAKLQljYXNlIFRDR0VUUzoKLQkJaWYgKGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcwotCQkgICAgKChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmdwLCB0dHktPnRlcm1pb3MpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCiAJY2FzZSBUSU9DU0VSR0VUTFNSOgogCQlkYmcoIiVzICglZCkgVElPQ1NFUkdFVExTUiIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKIAkJcmV0dXJuIG1vczc4NDBfZ2V0X2xzcl9pbmZvKG1vczc4NDBfcG9ydCwgYXJncCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggMTMwYWZiYi4uMGZlZDQzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtNTksNyArNTksNyBAQAogc3RhdGljIGludCAgb3B0aW9uX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgb3B0aW9uX3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJc3RydWN0IHRlcm1pb3MgKm9sZCk7CisJCQkJc3RydWN0IGt0ZXJtaW9zICpvbGQpOwogc3RhdGljIHZvaWQgb3B0aW9uX2JyZWFrX2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpOwogc3RhdGljIGludCAgb3B0aW9uX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyBpbnQgIG9wdGlvbl90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKQEAgLTc4LDcgKzc4LDkgQEAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVTSU9OMiAgICAgICAgICAweDYzMDAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfQ09CUkEgICAgICAgICAgICAweDY1MDAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfQ09CUkEyICAgICAgICAgICAweDY2MDAKKyNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfR1RNQVgzNiAgICAgICAgICAweDY3MDEKICNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRTYwMCAgICAgICAgICAgICAweDEwMDEKKyNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRTIyMCAgICAgICAgICAgICAweDEwMDMKICNkZWZpbmUgQVVESU9WT1hfUFJPRFVDVF9BSVJDQVJEICAgICAgICAweDAxMTIKICNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVTc0MCAgICAweDE0MDAKICNkZWZpbmUgQU5ZREFUQV9QUk9EVUNUX0lEICAgICAgICAgICAgICAweDY1MDEKQEAgLTg5LDcgKzkxLDkgQEAKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVTSU9OMikgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09CUkEpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPQlJBMikgfSwKKwl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfR1RNQVgzNikgfSwKIAl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTYwMCkgfSwKKwl7IFVTQl9ERVZJQ0UoSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTIyMCkgfSwKIAl7IFVTQl9ERVZJQ0UoQVVESU9WT1hfVkVORE9SX0lELCBBVURJT1ZPWF9QUk9EVUNUX0FJUkNBUkQpIH0sCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVTc0MCkgfSwKIAl7IFVTQl9ERVZJQ0UoQU5ZREFUQV9WRU5ET1JfSUQsIEFOWURBVEFfUFJPRFVDVF9JRCkgfSwKQEAgLTEwMiw3ICsxMDYsOSBAQAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9GVVNJT04yKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9DT0JSQSkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09CUkEyKSB9LAorCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9HVE1BWDM2KSB9LAogCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FNjAwKSB9LAorCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMjIwKSB9LAogCXsgVVNCX0RFVklDRShBVURJT1ZPWF9WRU5ET1JfSUQsIEFVRElPVk9YX1BST0RVQ1RfQUlSQ0FSRCkgfSwKIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCxOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNzQwKSB9LAogCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0lEKSB9LApAQCAtMjMwLDcgKzIzNiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIG9wdGlvbl9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorCQkJc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKIApAQCAtNjIyLDYgKzYyOCw5IEBACiAKIAlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKIAorCWlmIChwb3J0LT5udW1iZXIgIT0gMCkKKwkJcmV0dXJuIDA7CisKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCWlmIChwb3J0LT50dHkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCBiYzgwMGM4Li41ZGMyYWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1cm4gTlVMTDsKIAotCXBiID0gKHN0cnVjdCBwbDIzMDNfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHBsMjMwM19idWYpLCBHRlBfS0VSTkVMKTsKKwlwYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbDIzMDNfYnVmKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBiID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC00NTUsNyArNDU1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcGwyMzAzX3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkgICAgICAgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorCQkJICAgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC02ODcsNyArNjg3LDcgQEAKIAogc3RhdGljIGludCBwbDIzMDNfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdHJ1Y3QgdGVybWlvcyB0bXBfdGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3MgdG1wX3Rlcm1pb3M7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgY2hhciAqYnVmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCmluZGV4IDRiNTA5N2YuLjZkOGU5MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBzaWVycmFfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQkJCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKKwkJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCmluZGV4IGFlOThkOGMuLjgzMTg5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiBzdGF0aWMgdm9pZCB0aV91bnRocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIGludCB0aV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgdGlfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKLQlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOwogc3RhdGljIGludCB0aV90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50IHRpX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAogCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CkBAIC04ODEsNyArODgxLDcgQEAKIAogCiBzdGF0aWMgdm9pZCB0aV9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKKwlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OwpAQCAtMTcxMCw3ICsxNzEwLDcgQEAKIHsKIAlzdHJ1Y3QgY2lyY19idWYgKmNiOwogCi0JY2IgPSAoc3RydWN0IGNpcmNfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGNpcmNfYnVmKSwgR0ZQX0tFUk5FTCk7CisJY2IgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2lyY19idWYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IDNkNTA3MmYuLjcxNmY2ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHZvaWQgc2VyaWFsX3NldF90ZXJtaW9zIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCkKK3N0YXRpYyB2b2lkIHNlcmlhbF9zZXRfdGVybWlvcyAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IGVlZjVlYWEuLmIwOWYwNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC00Niw3ICs0Niw3IEBACiBzdGF0aWMgaW50ICB2aXNvcl9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyB2b2lkIHZpc29yX3NodXRkb3duCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgIHZpc29yX2lvY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci1zdGF0aWMgdm9pZCB2aXNvcl9zZXRfdGVybWlvcwkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyB2b2lkIHZpc29yX3NldF90ZXJtaW9zCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKTsKIHN0YXRpYyB2b2lkIHZpc29yX3dyaXRlX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCB2aXNvcl9yZWFkX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCB2aXNvcl9yZWFkX2ludF9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiKTsKQEAgLTkxNiw3ICs5MTYsNyBAQAogCiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgYWxsIG5pY2UgYW5kIGdvb2QsIGJ1dCB3ZSBkb24ndCBjaGFuZ2UgYW55dGhpbmcgYmFzZWQgb24gaXQgOikgKi8KLXN0YXRpYyB2b2lkIHZpc29yX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCB2aXNvcl9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAl1bnNpZ25lZCBpbnQgY2ZsYWc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwppbmRleCAxNTRjN2QyLi41NDgzZDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIHN0YXRpYyBpbnQgIHdoaXRlaGVhdF93cml0ZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKIHN0YXRpYyBpbnQgIHdoaXRlaGVhdF93cml0ZV9yb29tCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyBpbnQgIHdoaXRlaGVhdF9pb2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIHZvaWQgd2hpdGVoZWF0X3NldF90ZXJtaW9zCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfc2V0X3Rlcm1pb3MJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqIG9sZCk7CiBzdGF0aWMgaW50ICB3aGl0ZWhlYXRfdGlvY21nZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50ICB3aGl0ZWhlYXRfdGlvY21zZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKIHN0YXRpYyB2b2lkIHdoaXRlaGVhdF9icmVha19jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpOwpAQCAtNDE2LDcgKzQxNiw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAotCQlpbmZvID0gKHN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCQlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChpbmZvID09IE5VTEwpIHsKIAkJCWVycigiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CiAJCQlnb3RvIG5vX3ByaXZhdGU7CkBAIC00ODcsNyArNDg3LDcgQEAKIAkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIGluZm8pOwogCX0KIAotCWNvbW1hbmRfaW5mbyA9IChzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJY29tbWFuZF9pbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29tbWFuZF9pbmZvID09IE5VTEwpIHsKIAkJZXJyKCIlczogT3V0IG9mIG1lbW9yeSBmb3IgcG9ydCBzdHJ1Y3R1cmVzXG4iLCBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKIAkJZ290byBub19jb21tYW5kX3ByaXZhdGU7CkBAIC01OTcsNyArNTk3LDcgQEAKIHN0YXRpYyBpbnQgd2hpdGVoZWF0X29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludAkJcmV0dmFsID0gMDsKLQlzdHJ1Y3QgdGVybWlvcwlvbGRfdGVybTsKKwlzdHJ1Y3Qga3Rlcm1pb3MJb2xkX3Rlcm07CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKIApAQCAtODcwLDcgKzg3MCw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgd2hpdGVoZWF0X3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJZGJnKCIlcyAtcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjA5LmMKaW5kZXggZmI4YmFjYS4uZTM1MjhlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jCkBAIC02NDYsNyArNjQ2LDcgQEAKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKLQlidWYgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jKGJ1bGtsZW4sIEdGUF9OT0lPKTsKKwlidWYgPSBrbWFsbG9jKGJ1bGtsZW4sIEdGUF9OT0lPKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGRiOGIyNjAuLmI0OWYyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTUzLDYgKzE1MywxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgfCBVU19GTF9GSVhfQ0FQQUNJVFkgKSwKIAorLyogUmVwb3J0ZWQgYnkgPGhvbmtraXNAZ21haWwuY29tPiAqLworVU5VU1VBTF9ERVYoICAweDA0MjEsIDB4MDQzMywgMHgwMTAwLCAweDAxMDAsCisJCSJOb2tpYSIsCisJCSJFNzAiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgfCBVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKwogLyogUmVwb3J0ZWQgYnkgSm9uIEhhcnQgPEpvbi5IYXJ0QHdlYi5kZT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNDIxLCAweDA0MzQsIDB4MDEwMCwgMHgwMTAwLAogCQkiTm9raWEiLApAQCAtMTkwLDYgKzE5NywxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTUFYX1NFQ1RPUlNfNjQgKSwKIAorLyogUmVwb3J0ZWQgYnkgTWFudWVsIE9zZG9iYSA8bWFudWVsLm9zZG9iYUB0dS1pbG1lbmF1LmRlPiAqLworVU5VU1VBTF9ERVYoIDB4MDQyMSwgMHgwNDkyLCAweDA0NTIsIDB4MDQ1MiwKKwkJIk5va2lhIiwKKwkJIk5va2lhIDYyMzMiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfTUFYX1NFQ1RPUlNfNjQgKSwKKwogLyogUmVwb3J0ZWQgYnkgQWxleCBDb3Jjb2xlcyA8YWxleEBjb3Jjb2xlcy5uZXQ+ICovCiBVTlVTVUFMX0RFViggIDB4MDQyMSwgMHgwNDk1LCAweDAzNzAsIDB4MDM3MCwKIAkJIk5va2lhIiwKQEAgLTI0Nyw2ICsyNjEsMTggQEAKIAkJVVNfU0NfU0NTSSwgVVNfUFJfS0FSTUEsIHJpb19rYXJtYV9pbml0LCAwKSwKICNlbmRpZgogCisvKgorICogVGhpcyB2aXJ0dWFsIGZsb3BweSBpcyBmb3VuZCBpbiBTdW4gZXF1aXBtZW50ICh4NDYwMCwgeDQyMDBtMiwgZXRjLikKKyAqIFJlcG9ydGVkIGJ5IFBldGUgWmFpdGNldiA8emFpdGNldkByZWRoYXQuY29tPgorICogVGhpcyBkZXZpY2UgY2hva2VzIG9uIGJvdGggdmVyc2lvbiBvZiBNT0RFIFNFTlNFIHdoaWNoIHdlIGhhdmUsIHNvCisgKiB1c2VfMTBfZm9yX21zIGlzIG5vdCBlZmZlY3RpdmUsIGFuZCB3ZSB1c2UgVVNfRkxfTk9fV1BfREVURUNULgorICovCitVTlVTVUFMX0RFViggIDB4MDQ2YiwgMHhmZjQwLCAweDAxMDAsIDB4MDEwMCwKKwkJIkFNSSIsCisJCSJWaXJ0dWFsIEZsb3BweSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9OT19XUF9ERVRFQ1QpLAorCiAvKiBQYXRjaCBzdWJtaXR0ZWQgYnkgUGhpbGlwcCBGcmllZHJpY2ggPHBoaWxpcHBAdm9pZC5hdD4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNDgyLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLAogCQkiS3lvY2VyYSIsCkBAIC03MjEsNyArNzQ3LDcgQEAKIAkJIkFwcGxlIiwKIAkJImlQb2QiLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJVVNfRkxfRklYX0NBUEFDSVRZICksCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSB8IFVTX0ZMX05PVF9MT0NLQUJMRSApLAogCiBVTlVTVUFMX0RFViggMHgwNWFjLCAweDEyMDUsIDB4MDAwMCwgMHg5OTk5LAogCQkiQXBwbGUiLApAQCAtMTMyOCw2ICsxMzU0LDE1IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAogCisvKiBUaGlzIHByZXZlbnRzIHRoZSBrZXJuZWwgZnJvbSBkZXRlY3RpbmcgdGhlIHZpcnR1YWwgY2QtZHJpdmUgd2l0aCB0aGUKKyAqIFdpbmRvd3MgZHJpdmVycy4gIDxqb2hhbm4ud2lsaGVsbUBzdHVkZW50LnR1Z3Jhei5hdD4KKyovCitVTlVTVUFMX0RFViggMHgxMmQxLCAweDEwMDMsIDB4MDAwMCwgMHhmZmZmLAorCQkiSFVBV0VJIiwKKwkJIkUyMjAgVVNCLVVNVFMgSW5zdGFsbCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfREVWSUNFKSwKKwogLyogUmVwb3J0ZWQgYnkgVmlsaXVzIEJpbGlua2V2aWNpdXMgPHZpbGlzYXMgQVQgeHh4IERPVCBsdCkgKi8KIFVOVVNVQUxfREVWKCAgMHgxMzJiLCAweDAwMGIsIDB4MDAwMSwgMHgwMDAxLAogCQkiTWlub2x0YSIsCkBAIC0xMzQyLDYgKzEzNzcsMjEgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCiAKKy8qIFJlcG9ydGVkIGJ5IEZyYW5jZXNjbyBGb3Jlc3RpIDxmcmFmb3JlQHRpc2NhbGkuaXQ+ICovCitVTlVTVUFMX0RFViggIDB4MTRjZCwgMHg2NjAwLCAweDAyMDEsIDB4MDIwMSwKKwkJIlN1cGVyIFRvcCIsCisJCSJJREUgREVWSUNFIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKKy8qIFJlcG9ydGVkIGJ5IFJvYmVydCBTY2hlZGVsIDxyLnNjaGVkZWxAeWFob28uZGU+CisgKiBOb3RlOiB0aGlzIGlzIGEgJ3N1cGVyIHRvcCcgZGV2aWNlIGxpa2UgdGhlIGFib3ZlIDE0Y2QvNjYwMCBkZXZpY2UgKi8KK1VOVVNVQUxfREVWKCAgMHgxNjUyLCAweDY2MDAsIDB4MDIwMSwgMHgwMjAxLAorCQkiVGVhYyIsCisJCSJIRC0zNVBVSy1CIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKIC8qIHBhdGNoIHN1Ym1pdHRlZCBieSBEYXZpZGUgUGVyaW5pIDxwZXJpbmkuZGF2aWRlQGRwc29mdHdhcmUub3JnPgogICogYW5kIFJlbmF0byBQZXJpbmkgPHJwZXJpbmlAZW1haWwuaXQ+CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCA3YTQzMDIwLi40ZTgzZjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC01NDEsNiArNTQxLDcgQEAKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJc2VsZWN0IEJJVFJFVkVSU0UKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgZ2VuZXJpYyBUR0EgZ3JhcGhpYwogCSAgY2FyZHMuIFNheSBZIGlmIHlvdSBoYXZlIG9uZSBvZiB0aG9zZS4KQEAgLTU1MSw2ICs1NTIsNyBAQAogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgVklERU9fU0VMRUNUCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIGdlbmVyaWMgVkVTQSAyLjAKIAkgIGNvbXBsaWFudCBncmFwaGljIGNhcmRzLiBUaGUgb2xkZXIgVkVTQSAxLjIgY2FyZHMgYXJlIG5vdCBzdXBwb3J0ZWQuCkBAIC03MDUsNiArNzA3LDcgQEAKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJc2VsZWN0IEJJVFJFVkVSU0UKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBncmFwaGljcyBib2FyZHMgd2l0aCB0aGUgblZpZGlhIGNoaXBzLCBUTlQKIAkgIGFuZCBuZXdlci4gRm9yIHZlcnkgb2xkIGNoaXBzZXRzLCBzdWNoIGFzIHRoZSBSSVZBMTI4LCB0aGVuIHVzZQpAQCAtNzQ0LDYgKzc0Nyw3IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgZ3JhcGhpY3MgYm9hcmRzIHdpdGggdGhlIG5WaWRpYSBSaXZhL0dlZm9yY2UKIAkgIGNoaXBzLgpAQCAtMTYxMSw2ICsxNjE1LDE2IEBACiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgUE5YNDAwOCBSR0IgRnJhbWVidWZmZXIKIAorY29uZmlnIEZCX0lCTV9HWFQ0NTAwCisJdHJpc3RhdGUgIkZyYW1lYnVmZmVyIHN1cHBvcnQgZm9yIElCTSBHWFQ0NTAwUCBhZGFwdG9yIgorCWRlcGVuZHMgb24gUFBDCisJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKwlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBJQk0gR1hUNDUwMFAgZGlzcGxheQorCSAgYWRhcHRvciwgZm91bmQgb24gc29tZSBJQk0gU3lzdGVtIFAgKHBTZXJpZXMpIG1hY2hpbmVzLgorCiBjb25maWcgRkJfVklSVFVBTAogCXRyaXN0YXRlICJWaXJ0dWFsIEZyYW1lIEJ1ZmZlciBzdXBwb3J0IChPTkxZIEZPUiBURVNUSU5HISkiCiAJZGVwZW5kcyBvbiBGQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggYTY5ODBlOS4uMzA5YTI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC05OSw2ICs5OSw3IEBACiBvYmotJChDT05GSUdfRkJfUzNDMjQxMCkJICArPSBzM2MyNDEwZmIubwogb2JqLSQoQ09ORklHX0ZCX1BOWDQwMDhfRFVNKQkgICs9IHBueDQwMDgvCiBvYmotJChDT05GSUdfRkJfUE5YNDAwOF9EVU1fUkdCKSAgKz0gcG54NDAwOC8KK29iai0kKENPTkZJR19GQl9JQk1fR1hUNDUwMCkJICArPSBneHQ0NTAwLm8KIAogIyBQbGF0Zm9ybSBvciBmYWxsYmFjayBkcml2ZXJzIGdvIGhlcmUKIG9iai0kKENPTkZJR19GQl9WRVNBKSAgICAgICAgICAgICArPSB2ZXNhZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9TM3RyaW9mYi5jIGIvZHJpdmVycy92aWRlby9TM3RyaW9mYi5jCmluZGV4IDM5NzAwNWUuLmIzNzE3YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vUzN0cmlvZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL1MzdHJpb2ZiLmMKQEAgLTUzNSw4ICs1MzUsMTEgQEAKICNlbmRpZgogCiAgICAgZmJfaW5mby5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7Ci0gICAgaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYl9pbmZvKSA8IDApCi0JcmV0dXJuOworICAgIGlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbykgPCAwKSB7CisJCWlvdW5tYXAoZmJfaW5mby5zY3JlZW5fYmFzZSk7CisJCWZiX2luZm8uc2NyZWVuX2Jhc2UgPSBOVUxMOworCQlyZXR1cm47CisgICAgfQogCiAgICAgcHJpbnRrKCJmYiVkOiBTMyBUcmlvIGZyYW1lIGJ1ZmZlciBkZXZpY2Ugb24gJXNcbiIsCiAJICAgZmJfaW5mby5ub2RlLCBkcC0+ZnVsbF9uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jCmluZGV4IDY3NjFiNjguLjZjOWRjMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9hbWJhLWNsY2QuYwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWZiID0gKHN0cnVjdCBjbGNkX2ZiICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGNkX2ZiKSwgR0ZQX0tFUk5FTCk7CisJZmIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2xjZF9mYiksIEdGUF9LRVJORUwpOwogCWlmICghZmIpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQ0xDRDogY291bGQgbm90IGFsbG9jYXRlIG5ldyBjbGNkX2ZiIHN0cnVjdFxuIik7CiAJCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2FtaWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2FtaWZiLmMKaW5kZXggYTRlM2ZjYS4uMWE4NDliOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hbWlmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYW1pZmIuYwpAQCAtMjQwNywxMCArMjQwNywxMCBAQAogCQkJCQkJICAgZmJfaW5mby5maXguc21lbV9sZW4pOwogCWlmICghdmlkZW9tZW1vcnkpIHsKIAkJcHJpbnRrKCJhbWlmYjogV0FSTklORyEgdW5hYmxlIHRvIG1hcCB2aWRlb21lbSBjYWNoZWQgd3JpdGV0aHJvdWdoXG4iKTsKLQkJdmlkZW9tZW1vcnkgPSBaVFdPX1ZBRERSKGZiX2luZm8uZml4LnNtZW1fc3RhcnQpOwotCX0KKwkJZmJfaW5mby5zY3JlZW5fYmFzZSA9IChjaGFyICopWlRXT19WQUREUihmYl9pbmZvLmZpeC5zbWVtX3N0YXJ0KTsKKwl9IGVsc2UKKwkJZmJfaW5mby5zY3JlZW5fYmFzZSA9IChjaGFyICopdmlkZW9tZW1vcnk7CiAKLQlmYl9pbmZvLnNjcmVlbl9iYXNlID0gKGNoYXIgKil2aWRlb21lbW9yeTsKIAltZW1zZXQoZHVtbXlzcHJpdGUsIDAsIERVTU1ZU1BSSVRFTUVNU0laRSk7CiAKIAkvKgpAQCAtMjQ1Myw2ICsyNDUzLDggQEAKIHsKIAlmYl9kZWFsbG9jX2NtYXAoJmZiX2luZm8uY21hcCk7CiAJY2hpcGZyZWUoKTsKKwlpZiAodmlkZW9tZW1vcnkpCisJCWlvdW5tYXAoKHZvaWQqKXZpZGVvbWVtb3J5KTsKIAlyZWxlYXNlX21lbV9yZWdpb24oQ1VTVE9NX1BIWVNBRERSKzB4ZTAsIDB4MTIwKTsKIAljdXN0b20uZG1hY29uID0gRE1BRl9BTEwgfCBETUFGX01BU1RFUjsKIH0KQEAgLTI5MDQsMTQgKzI5MDYsNiBAQAogCXBhci0+Y3Jzci5zcG90X3ggPSBwYXItPmNyc3Iuc3BvdF95ID0gMDsKIAlwYXItPmNyc3IuaGVpZ2h0ID0gcGFyLT5jcnNyLndpZHRoID0gMDsKIAotI2lmIDAJLyogZmJtb24gbm90IGRvbmUuICB1bmNvbW1lbnQgZm9yIDIuNS54IC1icmFkICovCi0JaWYgKCFmYm1vbl92YWxpZF90aW1pbmdzKHBpeGNsb2NrW2Nsa19zaGlmdF0sIGh0b3RhbCwgdnRvdGFsLAotCQkJCSAmZmJfaW5mbykpIHsKLQkJRFBSSU5USygibW9kZSBkb2Vzbid0IGZpdCBmb3IgbW9uaXRvclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwppbmRleCBhYjM0Yjk2Li4zMGE4MzY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hcmNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJdW5zaWduZWQgaW50IHhyZXM7CiAKIAlwID0gKnBwb3M7Ci0JaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJZmJpZHggPSBpbWlub3IoaW5vZGUpOwogCWluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdGFmYi5jIGIvZHJpdmVycy92aWRlby9hdGFmYi5jCmluZGV4IDAyYzQxYTYuLjYwMmRiNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKQEAgLTI4MDQsOCArMjgwNCwxOSBAQAogCWF0YWZiX3NldF9kaXNwKC0xLCAmZmJfaW5mbyk7CiAJZG9faW5zdGFsbF9jbWFwKDAsICZmYl9pbmZvKTsKIAotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbykgPCAwKQorCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbykgPCAwKSB7CisjaWZkZWYgQVRBRkJfRVhUCisJCWlmIChleHRlcm5hbF9hZGRyKSB7CisJCQlpb3VubWFwKGV4dGVybmFsX2FkZHIpOworCQkJZXh0ZXJuYWxfYWRkciA9IE5VTEw7CisJCX0KKwkJaWYgKGV4dGVybmFsX3ZnYWlvYmFzZSkgeworCQkJaW91bm1hcCgodm9pZCopZXh0ZXJuYWxfdmdhaW9iYXNlKTsKKwkJCWV4dGVybmFsX3ZnYWlvYmFzZSA9IDA7CisJCX0KKyNlbmRpZgogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlwcmludGsoIkRldGVybWluZWQgJWR4JWQsIGRlcHRoICVkXG4iLAogCSAgICAgICBkaXNwLnZhci54cmVzLCBkaXNwLnZhci55cmVzLCBkaXNwLnZhci5iaXRzX3Blcl9waXhlbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwppbmRleCAyNzZhMjE1Li4yZTk3NmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKQEAgLTEzMzMsNiArMTMzMyw4IEBACiAJaWYgKHZjbGsgKiAxMiA8IGMucHBsbF9taW4pCiAJCXZjbGsgPSBjLnBwbGxfbWluLzEyOwogCisJcGxsLT5wb3N0X2RpdmlkZXIgPSAtMTsKKwogCS8qIG5vdywgZmluZCBhbiBhY2NlcHRhYmxlIGRpdmlkZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHBvc3RfZGl2aWRlcnMpOyBpKyspIHsKIAkJb3V0cHV0X2ZyZXEgPSBwb3N0X2RpdmlkZXJzW2ldICogdmNsazsKQEAgLTEzNDIsNiArMTM0NCw5IEBACiAJCX0KIAl9CiAKKwlpZiAocGxsLT5wb3N0X2RpdmlkZXIgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIGNhbGN1bGF0ZSBmZWVkYmFjayBkaXZpZGVyICovCiAJbiA9IGMucmVmX2RpdmlkZXIgKiBvdXRwdXRfZnJlcTsKIAlkID0gYy5yZWZfY2xrOwpAQCAtMTgyOSw3ICsxODM0LDcgQEAKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImF0eTEyOGJsJWQiLCBpbmZvLT5ub2RlKTsKIAotCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBwYXIsICZhdHkxMjhfYmxfZGF0YSk7CisJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsIGluZm8tPmRldiwgcGFyLCAmYXR5MTI4X2JsX2RhdGEpOwogCWlmIChJU19FUlIoYmQpKSB7CiAJCWluZm8tPmJsX2RldiA9IE5VTEw7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0eTEyODogQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmIuaCBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiLmgKaW5kZXggYjA0ZjQ5Zi4uZjcyZmFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYi5oCkBAIC0xMjYsNyArMTI2LDYgQEAKICAgICAgKi8KIAogc3RydWN0IGF0eWZiX3BhciB7Ci0Jc3RydWN0IGF0eV9jbWFwX3JlZ3MgX19pb21lbSAqYXR5X2NtYXBfcmVnczsKIAlzdHJ1Y3QgeyB1OCByZWQsIGdyZWVuLCBibHVlOyB9IHBhbGV0dGVbMjU2XTsKIAljb25zdCBzdHJ1Y3QgYXR5X2RhY19vcHMgKmRhY19vcHM7CiAJY29uc3Qgc3RydWN0IGF0eV9wbGxfb3BzICpwbGxfb3BzOwpAQCAtMTg2LDYgKzE4NSw3IEBACiAJaW50IG10cnJfYXBlcjsKIAlpbnQgbXRycl9yZWc7CiAjZW5kaWYKKwl1MzIgbWVtX2NudGw7CiB9OwogCiAgICAgLyoKQEAgLTIyNyw3ICsyMjcsNyBAQAogCQlyZWdpbmRleCAtPSAweDgwMDsKIAogI2lmZGVmIENPTkZJR19BVEFSSQotCXJldHVybiBpbl9sZTMyKCh2b2xhdGlsZSB1MzIgKikocGFyLT5hdGlfcmVnYmFzZSArIHJlZ2luZGV4KSk7CisJcmV0dXJuIGluX2xlMzIocGFyLT5hdGlfcmVnYmFzZSArIHJlZ2luZGV4KTsKICNlbHNlCiAJcmV0dXJuIHJlYWRsKHBhci0+YXRpX3JlZ2Jhc2UgKyByZWdpbmRleCk7CiAjZW5kaWYKQEAgLTI0MCw3ICsyNDAsNyBAQAogCQlyZWdpbmRleCAtPSAweDgwMDsKIAogI2lmZGVmIENPTkZJR19BVEFSSQotCW91dF9sZTMyKCh2b2xhdGlsZSB1MzIgKikocGFyLT5hdGlfcmVnYmFzZSArIHJlZ2luZGV4KSwgdmFsKTsKKwlvdXRfbGUzMihwYXItPmF0aV9yZWdiYXNlICsgcmVnaW5kZXgsIHZhbCk7CiAjZWxzZQogCXdyaXRlbCh2YWwsIHBhci0+YXRpX3JlZ2Jhc2UgKyByZWdpbmRleCk7CiAjZW5kaWYKQEAgLTI1Myw3ICsyNTMsNyBAQAogCWlmIChyZWdpbmRleCA+PSAweDQwMCkKIAkJcmVnaW5kZXggLT0gMHg4MDA7CiAjaWZkZWYgQ09ORklHX0FUQVJJCi0Jb3V0X2xlMTYoKHZvbGF0aWxlIHUxNiAqKShwYXItPmF0aV9yZWdiYXNlICsgcmVnaW5kZXgpLCB2YWwpOworCW91dF9sZTE2KHBhci0+YXRpX3JlZ2Jhc2UgKyByZWdpbmRleCwgdmFsKTsKICNlbHNlCiAJd3JpdGVsKHZhbCwgcGFyLT5hdGlfcmVnYmFzZSArIHJlZ2luZGV4KTsKICNlbmRpZgpAQCAtMzE1LDYgKzMxNSw3IEBACiAJdm9pZCAoKnNldF9wbGwpICAgKGNvbnN0IHN0cnVjdCBmYl9pbmZvICogaW5mbywgY29uc3QgdW5pb24gYXR5X3BsbCAqIHBsbCk7CiAJdm9pZCAoKmdldF9wbGwpICAgKGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bmlvbiBhdHlfcGxsICogcGxsKTsKIAlpbnQgKCppbml0X3BsbCkgICAoY29uc3Qgc3RydWN0IGZiX2luZm8gKiBpbmZvLCB1bmlvbiBhdHlfcGxsICogcGxsKTsKKwl2b2lkICgqcmVzdW1lX3BsbCkoY29uc3Qgc3RydWN0IGZiX2luZm8gKmluZm8sIHVuaW9uIGF0eV9wbGwgKnBsbCk7CiB9OwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGF0eV9wbGxfb3BzIGF0eV9wbGxfYXRpMTg4MThfMTsgLyogQVRJIDE4ODE4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKaW5kZXggZTgxNWIzNS4uZjJlYmRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwpAQCAtMjAzLDE0ICsyMDMsNiBAQAogICAgICAqICBUaGUgSGFyZHdhcmUgcGFyYW1ldGVycyBmb3IgZWFjaCBjYXJkCiAgICAgICovCiAKLXN0cnVjdCBhdHlfY21hcF9yZWdzIHsKLQl1OCB3aW5kZXg7Ci0JdTggbHV0OwotCXU4IG1hc2s7Ci0JdTggcmluZGV4OwotCXU4IGNudGw7Ci19OwotCiBzdHJ1Y3QgcGNpX21tYXBfbWFwIHsKIAl1bnNpZ25lZCBsb25nIHZvZmY7CiAJdW5zaWduZWQgbG9uZyBwb2ZmOwpAQCAtMjQ5LDcgKzI0MSw4IEBACiAgICAgICogIEludGVybmFsIHJvdXRpbmVzCiAgICAgICovCiAKLXN0YXRpYyBpbnQgYXR5X2luaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKm5hbWUpOworc3RhdGljIGludCBhdHlfaW5pdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CitzdGF0aWMgdm9pZCBhdHlfcmVzdW1lX2NoaXAoc3RydWN0IGZiX2luZm8gKmluZm8pOwogI2lmZGVmIENPTkZJR19BVEFSSQogc3RhdGljIGludCBzdG9yZV92aWRlb19wYXIoY2hhciAqdmlkZW9wYXIsIHVuc2lnbmVkIGNoYXIgbTY0X251bSk7CiAjZW5kaWYKQEAgLTE0OTUsMTAgKzE0ODgsNiBAQAogCWVsc2UKIAkJaW5mby0+dmFyLmFjY2VsX2ZsYWdzID0gMDsKIAotI2lmIDAgLyogZmJtb24gaXMgbm90IGRvbmUuIHVuY29tbWVudCBmb3IgMi41LnggLWJyYWQgKi8KLQlpZiAoIWZibW9uX3ZhbGlkX3RpbWluZ3MocGl4Y2xvY2ssIGh0b3RhbCwgdnRvdGFsLCBpbmZvKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKIAlhdHlfY3J0Y190b192YXIoJmNydGMsIHZhcik7CiAJdmFyLT5waXhjbG9jayA9IHBhci0+cGxsX29wcy0+cGxsX3RvX3ZhcihpbmZvLCAmcGxsKTsKIAlyZXR1cm4gMDsKQEAgLTE5MzcsMTcgKzE5MjYsMTQgQEAKIAkJYXR5X3N0XzgoREFDX0NOVEwsIHRtcCwgcGFyKTsKIAkJYXR5X3N0XzgoREFDX01BU0ssIDB4ZmYsIHBhcik7CiAKLQkJd3JpdGViKGksICZwYXItPmF0eV9jbWFwX3JlZ3MtPnJpbmRleCk7Ci0JCWF0eWZiX3NhdmUucltlbnRlcl1baV0gPSByZWFkYigmcGFyLT5hdHlfY21hcF9yZWdzLT5sdXQpOwotCQlhdHlmYl9zYXZlLmdbZW50ZXJdW2ldID0gcmVhZGIoJnBhci0+YXR5X2NtYXBfcmVncy0+bHV0KTsKLQkJYXR5ZmJfc2F2ZS5iW2VudGVyXVtpXSA9IHJlYWRiKCZwYXItPmF0eV9jbWFwX3JlZ3MtPmx1dCk7Ci0JCXdyaXRlYihpLCAmcGFyLT5hdHlfY21hcF9yZWdzLT53aW5kZXgpOwotCQl3cml0ZWIoYXR5ZmJfc2F2ZS5yWzEgLSBlbnRlcl1baV0sCi0JCSAgICAgICAmcGFyLT5hdHlfY21hcF9yZWdzLT5sdXQpOwotCQl3cml0ZWIoYXR5ZmJfc2F2ZS5nWzEgLSBlbnRlcl1baV0sCi0JCSAgICAgICAmcGFyLT5hdHlfY21hcF9yZWdzLT5sdXQpOwotCQl3cml0ZWIoYXR5ZmJfc2F2ZS5iWzEgLSBlbnRlcl1baV0sCi0JCSAgICAgICAmcGFyLT5hdHlfY21hcF9yZWdzLT5sdXQpOworCQlhdHlfc3RfOChEQUNfUl9JTkRFWCwgaSwgcGFyKTsKKwkJYXR5ZmJfc2F2ZS5yW2VudGVyXVtpXSA9IGF0eV9sZF84KERBQ19EQVRBLCBwYXIpOworCQlhdHlmYl9zYXZlLmdbZW50ZXJdW2ldID0gYXR5X2xkXzgoREFDX0RBVEEsIHBhcik7CisJCWF0eWZiX3NhdmUuYltlbnRlcl1baV0gPSBhdHlfbGRfOChEQUNfREFUQSwgcGFyKTsKKwkJYXR5X3N0XzgoREFDX1dfSU5ERVgsIGksIHBhcik7CisJCWF0eV9zdF84KERBQ19EQVRBLCBhdHlmYl9zYXZlLnJbMSAtIGVudGVyXVtpXSwgcGFyKTsKKwkJYXR5X3N0XzgoREFDX0RBVEEsIGF0eWZiX3NhdmUuZ1sxIC0gZW50ZXJdW2ldLCBwYXIpOworCQlhdHlfc3RfOChEQUNfREFUQSwgYXR5ZmJfc2F2ZS5iWzEgLSBlbnRlcl1baV0sIHBhcik7CiAJfQogfQogCkBAIC0xOTgyLDYgKzE5NjgsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX1BDSSkKIAorI2lmZGVmIENPTkZJR19QUENfUE1BQwogLyogUG93ZXIgbWFuYWdlbWVudCByb3V0aW5lcy4gVGhvc2UgYXJlIHVzZWQgZm9yIFBvd2VyQm9vayBzbGVlcC4KICAqLwogc3RhdGljIGludCBhdHlfcG93ZXJfbWdtdChpbnQgc2xlZXAsIHN0cnVjdCBhdHlmYl9wYXIgKnBhcikKQEAgLTIwMzgsMjEgKzIwMjUsMTMgQEAKIAogCXJldHVybiB0aW1lb3V0ID8gMCA6IC1FSU87CiB9CisjZW5kaWYKIAogc3RhdGljIGludCBhdHlmYl9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IChzdHJ1Y3QgYXR5ZmJfcGFyICopIGluZm8tPnBhcjsKIAotI2lmbmRlZiBDT05GSUdfUFBDX1BNQUMKLQkvKiBIQUNLIEFMRVJUICEgT25jZSBJIGZpbmQgYSBwcm9wZXIgd2F5IHRvIHNheSB0byBlYWNoIGRyaXZlcgotCSAqIGluZGl2aWR1YWxseSB3aGF0IHdpbGwgaGFwcGVuIHdpdGggaXQncyBQQ0kgc2xvdCwgSSdsbCBjaGFuZ2UKLQkgKiB0aGF0LiBPbiBsYXB0b3BzLCB0aGUgQUdQIHNsb3QgaXMganVzdCB1bmNsb2NrZWQsIHNvIEQyIGlzCi0JICogZXhwZWN0ZWQsIHdoaWxlIG9uIGRlc2t0b3BzLCB0aGUgY2FyZCBpcyBwb3dlcmVkIG9mZgotCSAqLwotCXJldHVybiAwOwotI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwotCiAJaWYgKHN0YXRlLmV2ZW50ID09IHBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCkKIAkJcmV0dXJuIDA7CiAKQEAgLTIwNzAsNiArMjA0OSw3IEBACiAJcGFyLT5hc2xlZXAgPSAxOwogCXBhci0+bG9ja19ibGFuayA9IDE7CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAkvKiBTZXQgY2hpcCB0byAic3VzcGVuZCIgbW9kZSAqLwogCWlmIChhdHlfcG93ZXJfbWdtdCgxLCBwYXIpKSB7CiAJCXBhci0+YXNsZWVwID0gMDsKQEAgLTIwNzksNiArMjA1OSw5IEBACiAJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAkJcmV0dXJuIC1FSU87CiAJfQorI2Vsc2UKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKyNlbmRpZgogCiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCkBAIC0yMDk3LDggKzIwODAsMTUgQEAKIAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAorI2lmZGVmIENPTkZJR19QUENfUE1BQwogCWlmIChwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gMikKIAkJYXR5X3Bvd2VyX21nbXQoMCwgcGFyKTsKKyNlbHNlCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworI2VuZGlmCisKKwlhdHlfcmVzdW1lX2NoaXAoaW5mbyk7CisKIAlwYXItPmFzbGVlcCA9IDA7CiAKIAkvKiBSZXN0b3JlIGRpc3BsYXkgKi8KQEAgLTIyMjEsNyArMjIxMSw3IEBACiAKIAlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdHlibCVkIiwgaW5mby0+bm9kZSk7CiAKLQliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgcGFyLCAmYXR5X2JsX2RhdGEpOworCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBpbmZvLT5kZXYsIHBhciwgJmF0eV9ibF9kYXRhKTsKIAlpZiAoSVNfRVJSKGJkKSkgewogCQlpbmZvLT5ibF9kZXYgPSBOVUxMOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdHk6IEJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKQEAgLTIzNDQsMjQgKzIzMzQsMTYgQEAKIH0KICNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSAmJiBkZWZpbmVkKENPTkZJR19GQl9BVFlfR0VORVJJQ19MQ0QpICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGF0eV9pbml0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIGludCBfX2RldmluaXQgYXR5X2luaXQoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGF0eWZiX3BhciAqcGFyID0gKHN0cnVjdCBhdHlmYl9wYXIgKikgaW5mby0+cGFyOwogCWNvbnN0IGNoYXIgKnJhbW5hbWUgPSBOVUxMLCAqeHRhbDsKIAlpbnQgZ3RiX21lbXNpemUsIGhhc192YXIgPSAwOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7Ci0JdTggcGxsX3JlZl9kaXY7Ci0JdTMyIGk7Ci0jaWYgZGVmaW5lZChDT05GSUdfUFBDKQotCWludCBzZW5zZTsKLSNlbmRpZgogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcGFyLT52Ymxhbmsud2FpdCk7CiAJc3Bpbl9sb2NrX2luaXQoJnBhci0+aW50X2xvY2spOwogCi0JcGFyLT5hdHlfY21hcF9yZWdzID0KLQkgICAgKHN0cnVjdCBhdHlfY21hcF9yZWdzIF9faW9tZW0gKikgKHBhci0+YXRpX3JlZ2Jhc2UgKyAweGMwKTsKLQogI2lmZGVmIENPTkZJR19QUENfUE1BQwogCS8qIFRoZSBBcHBsZSBpQm9vazEgdXNlcyBub24tc3RhbmRhcmQgbWVtb3J5IGZyZXF1ZW5jaWVzLiBXZSBkZXRlY3QgaXQKIAkgKiBhbmQgc2V0IHRoZSBmcmVxdWVuY3kgbWFudWFsbHkuICovCkBAIC0yNDY0LDE4ICsyNDQ2LDIxIEBACiAJCQlwYXItPnBsbF9saW1pdHMubWNsayA9IDYzOwogCX0KIAotCWlmIChNNjRfSEFTKEdUQl9EU1ApCi0JICAgICYmIChwbGxfcmVmX2RpdiA9IGF0eV9sZF9wbGxfY3QoUExMX1JFRl9ESVYsIHBhcikpKSB7Ci0JCWludCBkaWZmMSwgZGlmZjI7Ci0JCWRpZmYxID0gNTEwICogMTQgLyBwbGxfcmVmX2RpdiAtIHBhci0+cGxsX2xpbWl0cy5wbGxfbWF4OwotCQlkaWZmMiA9IDUxMCAqIDI5IC8gcGxsX3JlZl9kaXYgLSBwYXItPnBsbF9saW1pdHMucGxsX21heDsKLQkJaWYgKGRpZmYxIDwgMCkKLQkJCWRpZmYxID0gLWRpZmYxOwotCQlpZiAoZGlmZjIgPCAwKQotCQkJZGlmZjIgPSAtZGlmZjI7Ci0JCWlmIChkaWZmMiA8IGRpZmYxKSB7Ci0JCQlwYXItPnJlZl9jbGtfcGVyID0gMTAwMDAwMDAwMDAwMFVMTCAvIDI5NDk4OTI4OwotCQkJeHRhbCA9ICIyOS40OTg5MjgiOworCWlmIChNNjRfSEFTKEdUQl9EU1ApKSB7CisJCXU4IHBsbF9yZWZfZGl2ID0gYXR5X2xkX3BsbF9jdChQTExfUkVGX0RJViwgcGFyKTsKKworCQlpZiAocGxsX3JlZl9kaXYpIHsKKwkJCWludCBkaWZmMSwgZGlmZjI7CisJCQlkaWZmMSA9IDUxMCAqIDE0IC8gcGxsX3JlZl9kaXYgLSBwYXItPnBsbF9saW1pdHMucGxsX21heDsKKwkJCWRpZmYyID0gNTEwICogMjkgLyBwbGxfcmVmX2RpdiAtIHBhci0+cGxsX2xpbWl0cy5wbGxfbWF4OworCQkJaWYgKGRpZmYxIDwgMCkKKwkJCQlkaWZmMSA9IC1kaWZmMTsKKwkJCWlmIChkaWZmMiA8IDApCisJCQkJZGlmZjIgPSAtZGlmZjI7CisJCQlpZiAoZGlmZjIgPCBkaWZmMSkgeworCQkJCXBhci0+cmVmX2Nsa19wZXIgPSAxMDAwMDAwMDAwMDAwVUxMIC8gMjk0OTg5Mjg7CisJCQkJeHRhbCA9ICIyOS40OTg5MjgiOworCQkJfQogCQl9CiAJfQogI2VuZGlmIC8qIENPTkZJR19GQl9BVFlfQ1QgKi8KQEAgLTI0ODUsMTAgKzI0NzAsMTAgQEAKIAlpZihwYXItPnBsbF9vcHMtPmdldF9wbGwpCiAJCXBhci0+cGxsX29wcy0+Z2V0X3BsbChpbmZvLCAmc2F2ZWRfcGxsKTsKIAotCWkgPSBhdHlfbGRfbGUzMihNRU1fQ05UTCwgcGFyKTsKKwlwYXItPm1lbV9jbnRsID0gYXR5X2xkX2xlMzIoTUVNX0NOVEwsIHBhcik7CiAJZ3RiX21lbXNpemUgPSBNNjRfSEFTKEdUQl9EU1ApOwogCWlmIChndGJfbWVtc2l6ZSkKLQkJc3dpdGNoIChpICYgMHhGKSB7CS8qIDB4RiB1c2VkIGluc3RlYWQgb2YgTUVNX1NJWkVfQUxJQVMgKi8KKwkJc3dpdGNoIChwYXItPm1lbV9jbnRsICYgMHhGKSB7CS8qIDB4RiB1c2VkIGluc3RlYWQgb2YgTUVNX1NJWkVfQUxJQVMgKi8KIAkJY2FzZSBNRU1fU0laRV81MTJLOgogCQkJaW5mby0+Zml4LnNtZW1fbGVuID0gMHg4MDAwMDsKIAkJCWJyZWFrOwpAQCAtMjUxMCw3ICsyNDk1LDcgQEAKIAkJZGVmYXVsdDoKIAkJCWluZm8tPmZpeC5zbWVtX2xlbiA9IDB4ODAwMDA7CiAJfSBlbHNlCi0JCXN3aXRjaCAoaSAmIE1FTV9TSVpFX0FMSUFTKSB7CisJCXN3aXRjaCAocGFyLT5tZW1fY250bCAmIE1FTV9TSVpFX0FMSUFTKSB7CiAJCWNhc2UgTUVNX1NJWkVfNTEySzoKIAkJCWluZm8tPmZpeC5zbWVtX2xlbiA9IDB4ODAwMDA7CiAJCQlicmVhazsKQEAgLTI1NDAsMjAgKzI1MjUsMjAgQEAKIAogCWlmICh2cmFtKSB7CiAJCWluZm8tPmZpeC5zbWVtX2xlbiA9IHZyYW0gKiAxMDI0OwotCQlpID0gaSAmIH4oZ3RiX21lbXNpemUgPyAweEYgOiBNRU1fU0laRV9BTElBUyk7CisJCXBhci0+bWVtX2NudGwgJj0gfihndGJfbWVtc2l6ZSA/IDB4RiA6IE1FTV9TSVpFX0FMSUFTKTsKIAkJaWYgKGluZm8tPmZpeC5zbWVtX2xlbiA8PSAweDgwMDAwKQotCQkJaSB8PSBNRU1fU0laRV81MTJLOworCQkJcGFyLT5tZW1fY250bCB8PSBNRU1fU0laRV81MTJLOwogCQllbHNlIGlmIChpbmZvLT5maXguc21lbV9sZW4gPD0gMHgxMDAwMDApCi0JCQlpIHw9IE1FTV9TSVpFXzFNOworCQkJcGFyLT5tZW1fY250bCB8PSBNRU1fU0laRV8xTTsKIAkJZWxzZSBpZiAoaW5mby0+Zml4LnNtZW1fbGVuIDw9IDB4MjAwMDAwKQotCQkJaSB8PSBndGJfbWVtc2l6ZSA/IE1FTV9TSVpFXzJNX0dUQiA6IE1FTV9TSVpFXzJNOworCQkJcGFyLT5tZW1fY250bCB8PSBndGJfbWVtc2l6ZSA/IE1FTV9TSVpFXzJNX0dUQiA6IE1FTV9TSVpFXzJNOwogCQllbHNlIGlmIChpbmZvLT5maXguc21lbV9sZW4gPD0gMHg0MDAwMDApCi0JCQlpIHw9IGd0Yl9tZW1zaXplID8gTUVNX1NJWkVfNE1fR1RCIDogTUVNX1NJWkVfNE07CisJCQlwYXItPm1lbV9jbnRsIHw9IGd0Yl9tZW1zaXplID8gTUVNX1NJWkVfNE1fR1RCIDogTUVNX1NJWkVfNE07CiAJCWVsc2UgaWYgKGluZm8tPmZpeC5zbWVtX2xlbiA8PSAweDYwMDAwMCkKLQkJCWkgfD0gZ3RiX21lbXNpemUgPyBNRU1fU0laRV82TV9HVEIgOiBNRU1fU0laRV82TTsKKwkJCXBhci0+bWVtX2NudGwgfD0gZ3RiX21lbXNpemUgPyBNRU1fU0laRV82TV9HVEIgOiBNRU1fU0laRV82TTsKIAkJZWxzZQotCQkJaSB8PSBndGJfbWVtc2l6ZSA/IE1FTV9TSVpFXzhNX0dUQiA6IE1FTV9TSVpFXzhNOwotCQlhdHlfc3RfbGUzMihNRU1fQ05UTCwgaSwgcGFyKTsKKwkJCXBhci0+bWVtX2NudGwgfD0gZ3RiX21lbXNpemUgPyBNRU1fU0laRV84TV9HVEIgOiBNRU1fU0laRV84TTsKKwkJYXR5X3N0X2xlMzIoTUVNX0NOVEwsIHBhci0+bWVtX2NudGwsIHBhcik7CiAJfQogCiAJLyoKQEAgLTI1OTksMTEgKzI1ODQsMTIgQEAKICNlbmRpZgogCWlmKHBhci0+cGxsX29wcy0+aW5pdF9wbGwpCiAJCXBhci0+cGxsX29wcy0+aW5pdF9wbGwoaW5mbywgJnBhci0+cGxsKTsKKwlpZiAocGFyLT5wbGxfb3BzLT5yZXN1bWVfcGxsKQorCQlwYXItPnBsbF9vcHMtPnJlc3VtZV9wbGwoaW5mbywgJnBhci0+cGxsKTsKIAogCS8qCi0JICogIExhc3QgcGFnZSBvZiA4IE1CICg0IE1CIG9uIElTQSkgYXBlcnR1cmUgaXMgTU1JTwotCSAqICBGSVhNRTogd2Ugc2hvdWxkIHVzZSB0aGUgYXV4aWxpYXJ5IGFwZXJ0dXJlIGluc3RlYWQgc28gd2UgY2FuIGFjY2VzcwotCSAqICB0aGUgZnVsbCA4IE1CIG9mIHZpZGVvIFJBTSBvbiA4IE1CIGJvYXJkcworCSAqICBMYXN0IHBhZ2Ugb2YgOCBNQiAoNCBNQiBvbiBJU0EpIGFwZXJ0dXJlIGlzIE1NSU8sCisJICogIHVubGVzcyB0aGUgYXV4aWxpYXJ5IHJlZ2lzdGVyIGFwZXJ0dXJlIGlzIHVzZWQuCiAJICovCiAKIAlpZiAoIXBhci0+YXV4X3N0YXJ0ICYmCkBAIC0yNjY5LDYgKzI2NTUsNyBAQAogCQkJCWhhc192YXIgPSAxOwogCQl9IGVsc2UgewogCQkJaWYgKGRlZmF1bHRfdm1vZGUgPT0gVk1PREVfQ0hPT1NFKSB7CisJCQkJaW50IHNlbnNlOwogCQkJCWlmIChNNjRfSEFTKEczX1BCXzEwMjR4NzY4KSkKIAkJCQkJLyogRzMgUG93ZXJCb29rIHdpdGggMTAyNHg3NjggTENEICovCiAJCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV8xMDI0Xzc2OF82MDsKQEAgLTI3NDksNyArMjczNiw3IEBACiAJZmJfbGlzdCA9IGluZm87CiAKIAlQUklOVEtJKCJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlIG9uICVzXG4iLAotCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIG5hbWUpOworCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIHBhci0+YnVzX3R5cGUgPT0gSVNBID8gIklTQSIgOiAiUENJIik7CiAJcmV0dXJuIDA7CiAKIGF0eV9pbml0X2V4aXQ6CkBAIC0yNzcwLDYgKzI3NTcsMTkgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyB2b2lkIGF0eV9yZXN1bWVfY2hpcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgYXR5ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlhdHlfc3RfbGUzMihNRU1fQ05UTCwgcGFyLT5tZW1fY250bCwgcGFyKTsKKworCWlmIChwYXItPnBsbF9vcHMtPnJlc3VtZV9wbGwpCisJCXBhci0+cGxsX29wcy0+cmVzdW1lX3BsbChpbmZvLCAmcGFyLT5wbGwpOworCisJaWYgKHBhci0+YXV4X3N0YXJ0KQorCQlhdHlfc3RfbGUzMihCVVNfQ05UTCwgYXR5X2xkX2xlMzIoQlVTX0NOVEwsIHBhcikgfCBCVVNfQVBFUl9SRUdfRElTLCBwYXIpOworfQorCiAjaWZkZWYgQ09ORklHX0FUQVJJCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzdG9yZV92aWRlb19wYXIoY2hhciAqdmlkZW9fc3RyLCB1bnNpZ25lZCBjaGFyIG02NF9udW0pCiB7CkBAIC0yODI2LDkgKzI4MjYsOSBAQAogI2VuZGlmCiAKIAlnZW5fY250bCA9IGF0eV9sZF9sZTMyKENSVENfR0VOX0NOVEwsIHBhcik7CisJZ2VuX2NudGwgJj0gfjB4NDAwMDA0YzsKIAlzd2l0Y2ggKGJsYW5rKSB7Ci0gICAgICAgIAljYXNlIEZCX0JMQU5LX1VOQkxBTks6Ci0JCQlnZW5fY250bCAmPSB+MHg0MDAwMDRjOworCQljYXNlIEZCX0JMQU5LX1VOQkxBTks6CiAJCQlicmVhazsKIAkJY2FzZSBGQl9CTEFOS19OT1JNQUw6CiAJCQlnZW5fY250bCB8PSAweDQwMDAwNDA7CkBAIC0yODYzLDE3ICsyODYzLDEwIEBACiBzdGF0aWMgdm9pZCBhdHlfc3RfcGFsKHVfaW50IHJlZ25vLCB1X2ludCByZWQsIHVfaW50IGdyZWVuLCB1X2ludCBibHVlLAogCQkgICAgICAgY29uc3Qgc3RydWN0IGF0eWZiX3BhciAqcGFyKQogewotI2lmZGVmIENPTkZJR19BVEFSSQotCW91dF84KCZwYXItPmF0eV9jbWFwX3JlZ3MtPndpbmRleCwgcmVnbm8pOwotCW91dF84KCZwYXItPmF0eV9jbWFwX3JlZ3MtPmx1dCwgcmVkKTsKLQlvdXRfOCgmcGFyLT5hdHlfY21hcF9yZWdzLT5sdXQsIGdyZWVuKTsKLQlvdXRfOCgmcGFyLT5hdHlfY21hcF9yZWdzLT5sdXQsIGJsdWUpOwotI2Vsc2UKLQl3cml0ZWIocmVnbm8sICZwYXItPmF0eV9jbWFwX3JlZ3MtPndpbmRleCk7Ci0Jd3JpdGViKHJlZCwgJnBhci0+YXR5X2NtYXBfcmVncy0+bHV0KTsKLQl3cml0ZWIoZ3JlZW4sICZwYXItPmF0eV9jbWFwX3JlZ3MtPmx1dCk7Ci0Jd3JpdGViKGJsdWUsICZwYXItPmF0eV9jbWFwX3JlZ3MtPmx1dCk7Ci0jZW5kaWYKKwlhdHlfc3RfOChEQUNfV19JTkRFWCwgcmVnbm8sIHBhcik7CisJYXR5X3N0XzgoREFDX0RBVEEsIHJlZCwgcGFyKTsKKwlhdHlfc3RfOChEQUNfREFUQSwgZ3JlZW4sIHBhcik7CisJYXR5X3N0XzgoREFDX0RBVEEsIGJsdWUsIHBhcik7CiB9CiAKICAgICAvKgpAQCAtMzE4Miw3ICszMTc1LDcgQEAKIAogI2lmZGVmIF9faTM4Nl9fCiAjaWZkZWYgQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRAotc3RhdGljIHZvaWQgYXR5X2luaXRfbGNkKHN0cnVjdCBhdHlmYl9wYXIgKnBhciwgdTMyIGJpb3NfYmFzZSkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBhdHlfaW5pdF9sY2Qoc3RydWN0IGF0eWZiX3BhciAqcGFyLCB1MzIgYmlvc19iYXNlKQogewogCXUzMiBkcml2X2luZl90YWIsIHNpZzsKIAl1MTYgbGNkX29mczsKQEAgLTM1MjcsNiArMzUyMCwxMCBAQAogYXR5ZmJfc2V0dXBfZ2VuZXJpY19mYWlsOgogCWlvdW5tYXAocGFyLT5hdGlfcmVnYmFzZSk7CiAJcGFyLT5hdGlfcmVnYmFzZSA9IE5VTEw7CisJaWYgKGluZm8tPnNjcmVlbl9iYXNlKSB7CisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOworCQlpbmZvLT5zY3JlZW5fYmFzZSA9IE5VTEw7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM1OTQsNyArMzU5MSw3IEBACiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCiAJLyogSW5pdCBjaGlwICYgcmVnaXN0ZXIgZnJhbWVidWZmZXIgKi8KLQlpZiAoYXR5X2luaXQoaW5mbywgIlBDSSIpKQorCWlmIChhdHlfaW5pdChpbmZvKSkKIAkJZ290byBlcnJfcmVsZWFzZV9pbzsKIAogI2lmZGVmIF9fc3BhcmNfXwpAQCAtMzY0MSwxMiArMzYzOCwxMyBAQAogCiAjaWZkZWYgQ09ORklHX0FUQVJJCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGF0eWZiX2F0YXJpX3Byb2JlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhdHlmYl9hdGFyaV9wcm9iZSh2b2lkKQogewogCXN0cnVjdCBhdHlmYl9wYXIgKnBhcjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlpbnQgbTY0X251bTsKIAl1MzIgY2xvY2tfcjsKKwlpbnQgbnVtX2ZvdW5kID0gMDsKIAogCWZvciAobTY0X251bSA9IDA7IG02NF9udW0gPCBtYWNoNjRfY291bnQ7IG02NF9udW0rKykgewogCQlpZiAoIXBoeXNfdm1lbWJhc2VbbTY0X251bV0gfHwgIXBoeXNfc2l6ZVttNjRfbnVtXSB8fApAQCAtMzY5NCwxNiArMzY5MiwzNCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoYXR5X2luaXQoaW5mbywgIklTQSBidXMiKSkgeworCQkvKiBGYWtlIHBjaV9pZCBmb3IgY29ycmVjdF9jaGlwc2V0KCkgKi8KKwkJc3dpdGNoIChhdHlfbGRfbGUzMihDT05GSUdfQ0hJUF9JRCwgcGFyKSAmIENGR19DSElQX1RZUEUpIHsKKwkJY2FzZSAweDAwZDc6CisJCQlwYXItPnBjaV9pZCA9IFBDSV9DSElQX01BQ0g2NEdYOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMDU3OgorCQkJcGFyLT5wY2lfaWQgPSBQQ0lfQ0hJUF9NQUNINjRDWDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoY29ycmVjdF9jaGlwc2V0KHBhcikgfHwgYXR5X2luaXQoaW5mbykpIHsKKwkJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOworCQkJaW91bm1hcChwYXItPmF0aV9yZWdiYXNlKTsKIAkJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7Ci0JCQkvKiBUaGlzIGlzIGluc3VmZmljaWVudCEga2VybmVsX21hcCBoYXMgYWRkZWQgdHdvIGxhcmdlIGNodW5rcyEhICovCi0JCQlyZXR1cm4gLUVOWElPOworCQl9IGVsc2UgeworCQkJbnVtX2ZvdW5kKys7CiAJCX0KIAl9CisKKwlyZXR1cm4gbnVtX2ZvdW5kID8gMCA6IC1FTlhJTzsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19BVEFSSSAqLwogCisjaWZkZWYgQ09ORklHX1BDSQorCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgYXR5ZmJfcmVtb3ZlKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IChzdHJ1Y3QgYXR5ZmJfcGFyICopIGluZm8tPnBhcjsKQEAgLTM3NTEsNyArMzc2Nyw2IEBACiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIH0KIAotI2lmZGVmIENPTkZJR19QQ0kKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGF0eWZiX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0zNzg2LDcgKzM4MDEsNyBAQAogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAogI2lmbmRlZiBNT0RVTEUKLXN0YXRpYyBpbnQgX19kZXZpbml0IGF0eWZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCitzdGF0aWMgaW50IF9faW5pdCBhdHlmYl9zZXR1cChjaGFyICpvcHRpb25zKQogewogCWNoYXIgKnRoaXNfb3B0OwogCkBAIC0zODU4LDcgKzM4NzMsNyBAQAogfQogI2VuZGlmICAvKiAgTU9EVUxFICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhdHlmYl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhdHlmYl9pbml0KHZvaWQpCiB7CiAgICAgaW50IGVycjEgPSAxLCBlcnIyID0gMTsKICNpZm5kZWYgTU9EVUxFCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3QuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdC5jCmluZGV4IDUwODA4MTYuLmYzYjQ4N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdC5jCkBAIC0zNzAsOCArMzcwLDggQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYXR5X2dldF9wbGxfY3QoY29uc3Qgc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkJICB1bmlvbiBhdHlfcGxsICpwbGwpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYXR5X2dldF9wbGxfY3QoY29uc3Qgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgICB1bmlvbiBhdHlfcGxsICpwbGwpCiB7CiAJc3RydWN0IGF0eWZiX3BhciAqcGFyID0gKHN0cnVjdCBhdHlmYl9wYXIgKikgaW5mby0+cGFyOwogCXU4IHRtcCwgY2xvY2s7CkBAIC0zOTQsMTIgKzM5NCwxMiBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgYXR5X2luaXRfcGxsX2N0KGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJCSB1bmlvbiBhdHlfcGxsICpwbGwpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdHlfaW5pdF9wbGxfY3QoY29uc3Qgc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgICB1bmlvbiBhdHlfcGxsICpwbGwpCiB7CiAJc3RydWN0IGF0eWZiX3BhciAqcGFyID0gKHN0cnVjdCBhdHlmYl9wYXIgKikgaW5mby0+cGFyOwotCXU4IG1wb3N0X2RpdiwgeHBvc3RfZGl2LCBzY2xrX3Bvc3RfZGl2X3JlYWwsIHNjbGtfZmJfZGl2LCBzcGxsX2NudGwyOwotCXUzMiBxLCBpLCBtZW1jbnRsLCB0cnA7CisJdTggbXBvc3RfZGl2LCB4cG9zdF9kaXYsIHNjbGtfcG9zdF9kaXZfcmVhbDsKKwl1MzIgcSwgbWVtY250bCwgdHJwOwogCXUzMiBkc3BfY29uZmlnLCBkc3Bfb25fb2ZmLCB2Z2FfZHNwX2NvbmZpZywgdmdhX2RzcF9vbl9vZmY7CiAjaWZkZWYgREVCVUcKIAlpbnQgcGxsbWNsaywgcGxsc2NsazsKQEAgLTU3NSwxNCArNTc1LDMwIEBACiAJCQltcG9zdF9kaXYgKz0gKHEgPCAgMzIqOCk7CiAJCX0KIAkJc2Nsa19wb3N0X2Rpdl9yZWFsID0gcG9zdGRpdmlkZXJzW21wb3N0X2Rpdl07Ci0JCXNjbGtfZmJfZGl2ID0gcSAqIHNjbGtfcG9zdF9kaXZfcmVhbCAvIDg7Ci0JCXNwbGxfY250bDIgPSBtcG9zdF9kaXYgPDwgNDsKKwkJcGxsLT5jdC5zY2xrX2ZiX2RpdiA9IHEgKiBzY2xrX3Bvc3RfZGl2X3JlYWwgLyA4OworCQlwbGwtPmN0LnNwbGxfY250bDIgPSBtcG9zdF9kaXYgPDwgNDsKICNpZmRlZiBERUJVRwotCQlwbGxzY2xrID0gKDEwMDAwMDAgKiAyICogc2Nsa19mYl9kaXYpIC8KKwkJcGxsc2NsayA9ICgxMDAwMDAwICogMiAqIHBsbC0+Y3Quc2Nsa19mYl9kaXYpIC8KIAkJCShwYXItPnJlZl9jbGtfcGVyICogcGxsLT5jdC5wbGxfcmVmX2Rpdik7CiAJCXByaW50aygiYXR5ZmIoJXMpOiB1c2Ugc2NsaywgcGxsc2Nsaz0lZCBNSHosIHNjbGs9bWNsaz0lZCBNSHpcbiIsCiAJCQlfX0ZVTkNUSU9OX18sIHBsbHNjbGssIHBsbHNjbGsgLyBzY2xrX3Bvc3RfZGl2X3JlYWwpOwogI2VuZGlmCisJfQorCisJLyogRGlzYWJsZSB0aGUgZXh0cmEgcHJlY2lzaW9uIHBpeGVsIGNsb2NrIGNvbnRyb2xzIHNpbmNlIHdlIGRvIG5vdCB1c2UgdGhlbS4gKi8KKwlwbGwtPmN0LmV4dF92cGxsX2NudGwgPSBhdHlfbGRfcGxsX2N0KEVYVF9WUExMX0NOVEwsIHBhcik7CisJcGxsLT5jdC5leHRfdnBsbF9jbnRsICY9IH4oRVhUX1ZQTExfRU4gfCBFWFRfVlBMTF9WR0FfRU4gfCBFWFRfVlBMTF9JTlNZTkMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0eV9yZXN1bWVfcGxsX2N0KGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJICAgICAgdW5pb24gYXR5X3BsbCAqcGxsKQoreworCXN0cnVjdCBhdHlmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCWlmIChwYXItPm1jbGtfcGVyICE9IHBhci0+eGNsa19wZXIpIHsKKwkJaW50IGk7CiAJCS8qCiAJCSogVGhpcyBkaXNhYmxlcyB0aGUgc2NsaywgY3Jhc2hlcyB0aGUgY29tcHV0ZXIgYXMgcmVwb3J0ZWQ6CiAJCSogYXR5X3N0X3BsbF9jdChTUExMX0NOVEwyLCAzLCBpbmZvKTsKQEAgLTU5MCw4ICs2MDYsOCBAQAogCQkqIFNvIGl0IHNlZW1zIHRoZSBzY2xrIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgaXQgaXMgdXNlZDsKIAkJKiBzbyBQTExfR0VOX0NOVEwgbXVzdCBiZSBwcm9ncmFtbWVkICphZnRlciogdGhlIHNjbGsuCiAJCSovCi0JCWF0eV9zdF9wbGxfY3QoU0NMS19GQl9ESVYsIHNjbGtfZmJfZGl2LCBwYXIpOwotCQlhdHlfc3RfcGxsX2N0KFNQTExfQ05UTDIsIHNwbGxfY250bDIsIHBhcik7CisJCWF0eV9zdF9wbGxfY3QoU0NMS19GQl9ESVYsIHBsbC0+Y3Quc2Nsa19mYl9kaXYsIHBhcik7CisJCWF0eV9zdF9wbGxfY3QoU1BMTF9DTlRMMiwgcGxsLT5jdC5zcGxsX2NudGwyLCBwYXIpOwogCQkvKgogCQkgKiBUaGUgc2NsayBoYXMgYmVlbiBzdGFydGVkLiBIb3dldmVyLCBJIGJlbGlldmUgdGhlIGZpcnN0IGNsb2NrCiAJCSAqIHRpY2tzIGl0IGdlbmVyYXRlcyBhcmUgbm90IHZlcnkgc3RhYmxlLiBIb3BlIHRoaXMgcHJpbWl0aXZlIGxvb3AKQEAgLTYwNSwxMSArNjIxLDcgQEAKIAlhdHlfc3RfcGxsX2N0KFBMTF9HRU5fQ05UTCwgcGxsLT5jdC5wbGxfZ2VuX2NudGwsIHBhcik7CiAJYXR5X3N0X3BsbF9jdChNQ0xLX0ZCX0RJViwgcGxsLT5jdC5tY2xrX2ZiX2RpdiwgcGFyKTsKIAlhdHlfc3RfcGxsX2N0KFBMTF9FWFRfQ05UTCwgcGxsLT5jdC5wbGxfZXh0X2NudGwsIHBhcik7Ci0JLyogRGlzYWJsZSB0aGUgZXh0cmEgcHJlY2lzaW9uIHBpeGVsIGNsb2NrIGNvbnRyb2xzIHNpbmNlIHdlIGRvIG5vdCB1c2UgdGhlbS4gKi8KLQlhdHlfc3RfcGxsX2N0KEVYVF9WUExMX0NOVEwsIGF0eV9sZF9wbGxfY3QoRVhUX1ZQTExfQ05UTCwgcGFyKSAmCi0JCX4oRVhUX1ZQTExfRU4gfCBFWFRfVlBMTF9WR0FfRU4gfCBFWFRfVlBMTF9JTlNZTkMpLCBwYXIpOwotCi0JcmV0dXJuIDA7CisJYXR5X3N0X3BsbF9jdChFWFRfVlBMTF9DTlRMLCBwbGwtPmN0LmV4dF92cGxsX2NudGwsIHBhcik7CiB9CiAKIHN0YXRpYyBpbnQgZHVtbXkodm9pZCkKQEAgLTYyNiw1ICs2MzgsNiBAQAogCS5wbGxfdG9fdmFyCT0gYXR5X3BsbF90b192YXJfY3QsCiAJLnNldF9wbGwJPSBhdHlfc2V0X3BsbF9jdCwKIAkuZ2V0X3BsbAk9IGF0eV9nZXRfcGxsX2N0LAotCS5pbml0X3BsbCAgICAgICA9IGF0eV9pbml0X3BsbF9jdAorCS5pbml0X3BsbAk9IGF0eV9pbml0X3BsbF9jdCwKKwkucmVzdW1lX3BsbAk9IGF0eV9yZXN1bWVfcGxsX2N0LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYwppbmRleCA1ODVlYjdiLi4zYWJmZDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInJhZGVvbmJsJWQiLCByaW5mby0+aW5mby0+bm9kZSk7CiAKLQliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgcGRhdGEsICZyYWRlb25fYmxfZGF0YSk7CisJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsIHJpbmZvLT5pbmZvLT5kZXYsIHBkYXRhLCAmcmFkZW9uX2JsX2RhdGEpOwogCWlmIChJU19FUlIoYmQpKSB7CiAJCXJpbmZvLT5pbmZvLT5ibF9kZXYgPSBOVUxMOwogCQlwcmludGsoInJhZGVvbmZiOiBCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25faTJjLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25faTJjLmMKaW5kZXggODY5NzI1YS4uZTdjNWIyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2kyYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9pMmMuYwpAQCAtMTIwLDE5ICsxMjAsMTkgQEAKIHZvaWQgcmFkZW9uX2RlbGV0ZV9pMmNfYnVzc2VzKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKIHsKIAlpZiAocmluZm8tPmkyY1swXS5yaW5mbykKLQkJaTJjX2JpdF9kZWxfYnVzKCZyaW5mby0+aTJjWzBdLmFkYXB0ZXIpOworCQlpMmNfZGVsX2FkYXB0ZXIoJnJpbmZvLT5pMmNbMF0uYWRhcHRlcik7CiAJcmluZm8tPmkyY1swXS5yaW5mbyA9IE5VTEw7CiAKIAlpZiAocmluZm8tPmkyY1sxXS5yaW5mbykKLQkJaTJjX2JpdF9kZWxfYnVzKCZyaW5mby0+aTJjWzFdLmFkYXB0ZXIpOworCQlpMmNfZGVsX2FkYXB0ZXIoJnJpbmZvLT5pMmNbMV0uYWRhcHRlcik7CiAJcmluZm8tPmkyY1sxXS5yaW5mbyA9IE5VTEw7CiAKIAlpZiAocmluZm8tPmkyY1syXS5yaW5mbykKLQkJaTJjX2JpdF9kZWxfYnVzKCZyaW5mby0+aTJjWzJdLmFkYXB0ZXIpOworCQlpMmNfZGVsX2FkYXB0ZXIoJnJpbmZvLT5pMmNbMl0uYWRhcHRlcik7CiAJcmluZm8tPmkyY1syXS5yaW5mbyA9IE5VTEw7CiAKIAlpZiAocmluZm8tPmkyY1szXS5yaW5mbykKLQkJaTJjX2JpdF9kZWxfYnVzKCZyaW5mby0+aTJjWzNdLmFkYXB0ZXIpOworCQlpMmNfZGVsX2FkYXB0ZXIoJnJpbmZvLT5pMmNbM10uYWRhcHRlcik7CiAJcmluZm8tPmkyY1szXS5yaW5mbyA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9tb25pdG9yLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fbW9uaXRvci5jCmluZGV4IGVhNTMxYTYuLjM4YzdkYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9tb25pdG9yLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX21vbml0b3IuYwpAQCAtMTA0LDEwICsxMDQsOSBAQAogCWlmIChwZWRpZCA9PSBOVUxMKQogCQlyZXR1cm4gbXQ7CiAKLQl0bXAgPSAodTggKilrbWFsbG9jKEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwl0bXAgPSBrbWVtZHVwKHBlZGlkLCBFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0bXApCiAJCXJldHVybiBtdDsKLQltZW1jcHkodG1wLCBwZWRpZCwgRURJRF9MRU5HVEgpOwogCSpvdXRfRURJRCA9IHRtcDsKIAlyZXR1cm4gbXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmggYi9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmgKaW5kZXggMjg1NTUzNC4uMTY0ZmUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuaApAQCAtMjc0LDcgKzI3NCw3IEBACiAJCS5icHAgPSAxNiwKIAkJLmNvbnRyb2xfYmFzZSA9CTB4MDAwNDg4NkEgfAogCQkJTENEX0NPTlRST0xfREVGQVVMVF9QTyB8IExDRF9DT05UUk9MX0RFRkFVTFRfU0JQUEYgfAotCQkJTENEX0NPTlRST0xfQlBQXzE2LAorCQkJTENEX0NPTlRST0xfQlBQXzE2IHwgTENEX0NPTlRST0xfU0JCXzQsCiAJCS5jbGtjb250cm9sX2Jhc2UgPSAweDAwMDIwMDAwLAogCQkuaG9yenRpbWluZyA9IDB4MDA1YWZmMWYsCiAJCS52ZXJ0dGltaW5nID0gMHgxNjAwMGU1NywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKaW5kZXggMjc1OTdjNS4uOTYwMWJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKQEAgLTE0LDYgKzE0LDU5IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KIAorCisjaWYgZGVmaW5lZChDT05GSUdfRkIpIHx8IChkZWZpbmVkKENPTkZJR19GQl9NT0RVTEUpICYmIFwKKwkJCSAgIGRlZmluZWQoQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0VfTU9EVUxFKSkKKy8qIFRoaXMgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgd2hlbiBzb21ldGhpbmcgaW1wb3J0YW50IGhhcHBlbnMgaW5zaWRlIGEKKyAqIGZyYW1lYnVmZmVyIGRyaXZlci4gV2UncmUgbG9va2luZyBpZiB0aGF0IGltcG9ydGFudCBldmVudCBpcyBibGFua2luZywKKyAqIGFuZCBpZiBpdCBpcywgd2UncmUgc3dpdGNoaW5nIGJhY2tsaWdodCBwb3dlciBhcyB3ZWxsIC4uLgorICovCitzdGF0aWMgaW50IGZiX25vdGlmaWVyX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQl1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKKwlzdHJ1Y3QgZmJfZXZlbnQgKmV2ZGF0YSA9IGRhdGE7CisKKwkvKiBJZiB3ZSBhcmVuJ3QgaW50ZXJlc3RlZCBpbiB0aGlzIGV2ZW50LCBza2lwIGl0IGltbWVkaWF0ZWx5IC4uLiAqLworCWlmIChldmVudCAhPSBGQl9FVkVOVF9CTEFOSykKKwkJcmV0dXJuIDA7CisKKwliZCA9IGNvbnRhaW5lcl9vZihzZWxmLCBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSwgZmJfbm90aWYpOworCWRvd24oJmJkLT5zZW0pOworCWlmIChiZC0+cHJvcHMpCisJCWlmICghYmQtPnByb3BzLT5jaGVja19mYiB8fAorCQkgICAgYmQtPnByb3BzLT5jaGVja19mYihldmRhdGEtPmluZm8pKSB7CisJCQliZC0+cHJvcHMtPmZiX2JsYW5rID0gKihpbnQgKilldmRhdGEtPmRhdGE7CisJCQlpZiAobGlrZWx5KGJkLT5wcm9wcyAmJiBiZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMpKQorCQkJCWJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cyhiZCk7CisJCX0KKwl1cCgmYmQtPnNlbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmFja2xpZ2h0X3JlZ2lzdGVyX2ZiKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwltZW1zZXQoJmJkLT5mYl9ub3RpZiwgMCwgc2l6ZW9mKGJkLT5mYl9ub3RpZikpOworCWJkLT5mYl9ub3RpZi5ub3RpZmllcl9jYWxsID0gZmJfbm90aWZpZXJfY2FsbGJhY2s7CisKKwlyZXR1cm4gZmJfcmVnaXN0ZXJfY2xpZW50KCZiZC0+ZmJfbm90aWYpOworfQorCitzdGF0aWMgdm9pZCBiYWNrbGlnaHRfdW5yZWdpc3Rlcl9mYihzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJZmJfdW5yZWdpc3Rlcl9jbGllbnQoJmJkLT5mYl9ub3RpZik7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYmFja2xpZ2h0X3JlZ2lzdGVyX2ZiKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJhY2tsaWdodF91bnJlZ2lzdGVyX2ZiKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfRkIgKi8KKwogc3RhdGljIHNzaXplX3QgYmFja2xpZ2h0X3Nob3dfcG93ZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQogewogCWludCByYyA9IC1FTlhJTzsKQEAgLTE0Miw3ICsxOTUsNyBAQAogCS5zdG9yZQk9IF9zdG9yZSwJCQkJCVwKIH0KIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGJsX2NsYXNzX2RldmljZV9hdHRyaWJ1dGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYmxfY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZXNbXSA9IHsKIAlERUNMQVJFX0FUVFIocG93ZXIsIDA2NDQsIGJhY2tsaWdodF9zaG93X3Bvd2VyLCBiYWNrbGlnaHRfc3RvcmVfcG93ZXIpLAogCURFQ0xBUkVfQVRUUihicmlnaHRuZXNzLCAwNjQ0LCBiYWNrbGlnaHRfc2hvd19icmlnaHRuZXNzLAogCQkgICAgIGJhY2tsaWdodF9zdG9yZV9icmlnaHRuZXNzKSwKQEAgLTE1MSwzMyArMjA0LDYgQEAKIAlERUNMQVJFX0FUVFIobWF4X2JyaWdodG5lc3MsIDA0NDQsIGJhY2tsaWdodF9zaG93X21heF9icmlnaHRuZXNzLCBOVUxMKSwKIH07CiAKLS8qIFRoaXMgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgd2hlbiBzb21ldGhpbmcgaW1wb3J0YW50IGhhcHBlbnMgaW5zaWRlIGEKLSAqIGZyYW1lYnVmZmVyIGRyaXZlci4gV2UncmUgbG9va2luZyBpZiB0aGF0IGltcG9ydGFudCBldmVudCBpcyBibGFua2luZywKLSAqIGFuZCBpZiBpdCBpcywgd2UncmUgc3dpdGNoaW5nIGJhY2tsaWdodCBwb3dlciBhcyB3ZWxsIC4uLgotICovCi1zdGF0aWMgaW50IGZiX25vdGlmaWVyX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCQl1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKLQlzdHJ1Y3QgZmJfZXZlbnQgKmV2ZGF0YSA9KHN0cnVjdCBmYl9ldmVudCAqKWRhdGE7Ci0KLQkvKiBJZiB3ZSBhcmVuJ3QgaW50ZXJlc3RlZCBpbiB0aGlzIGV2ZW50LCBza2lwIGl0IGltbWVkaWF0ZWx5IC4uLiAqLwotCWlmIChldmVudCAhPSBGQl9FVkVOVF9CTEFOSykKLQkJcmV0dXJuIDA7Ci0KLQliZCA9IGNvbnRhaW5lcl9vZihzZWxmLCBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSwgZmJfbm90aWYpOwotCWRvd24oJmJkLT5zZW0pOwotCWlmIChiZC0+cHJvcHMpCi0JCWlmICghYmQtPnByb3BzLT5jaGVja19mYiB8fAotCQkgICAgYmQtPnByb3BzLT5jaGVja19mYihldmRhdGEtPmluZm8pKSB7Ci0JCQliZC0+cHJvcHMtPmZiX2JsYW5rID0gKihpbnQgKilldmRhdGEtPmRhdGE7Ci0JCQlpZiAobGlrZWx5KGJkLT5wcm9wcyAmJiBiZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMpKQotCQkJCWJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cyhiZCk7Ci0JCX0KLQl1cCgmYmQtPnNlbSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlciAtIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgYSBuZXcgb2JqZWN0IG9mCiAgKiAgIGJhY2tsaWdodF9kZXZpY2UgY2xhc3MuCkBAIC0xOTAsOCArMjE2LDEwIEBACiAgKiBDcmVhdGVzIGFuZCByZWdpc3RlcnMgbmV3IGJhY2tsaWdodCBjbGFzc19kZXZpY2UuIFJldHVybnMgZWl0aGVyIGFuCiAgKiBFUlJfUFRSKCkgb3IgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgZGV2aWNlLgogICovCi1zdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkZXZkYXRhLAotCQkJCQkJICAgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzICpicCkKK3N0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCisJc3RydWN0IGRldmljZSAqZGV2LAorCXZvaWQgKmRldmRhdGEsCisJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzICpicCkKIHsKIAlpbnQgaSwgcmM7CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKm5ld19iZDsKQEAgLTIwNiw2ICsyMzQsNyBAQAogCW5ld19iZC0+cHJvcHMgPSBicDsKIAltZW1zZXQoJm5ld19iZC0+Y2xhc3NfZGV2LCAwLCBzaXplb2YobmV3X2JkLT5jbGFzc19kZXYpKTsKIAluZXdfYmQtPmNsYXNzX2Rldi5jbGFzcyA9ICZiYWNrbGlnaHRfY2xhc3M7CisJbmV3X2JkLT5jbGFzc19kZXYuZGV2ID0gZGV2OwogCXN0cmxjcHkobmV3X2JkLT5jbGFzc19kZXYuY2xhc3NfaWQsIG5hbWUsIEtPQkpfTkFNRV9MRU4pOwogCWNsYXNzX3NldF9kZXZkYXRhKCZuZXdfYmQtPmNsYXNzX2RldiwgZGV2ZGF0YSk7CiAKQEAgLTIxNSwxMCArMjQ0LDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIocmMpOwogCX0KIAotCW1lbXNldCgmbmV3X2JkLT5mYl9ub3RpZiwgMCwgc2l6ZW9mKG5ld19iZC0+ZmJfbm90aWYpKTsKLQluZXdfYmQtPmZiX25vdGlmLm5vdGlmaWVyX2NhbGwgPSBmYl9ub3RpZmllcl9jYWxsYmFjazsKLQotCXJjID0gZmJfcmVnaXN0ZXJfY2xpZW50KCZuZXdfYmQtPmZiX25vdGlmKTsKKwlyYyA9IGJhY2tsaWdodF9yZWdpc3Rlcl9mYihuZXdfYmQpOwogCWlmICh1bmxpa2VseShyYykpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTI1OSwxNiArMjg1LDEwIEBACiAJCQkJCSAmYmxfY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZXNbaV0pOwogCiAJZG93bigmYmQtPnNlbSk7Ci0JaWYgKGxpa2VseShiZC0+cHJvcHMgJiYgYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKSkgewotCQliZC0+cHJvcHMtPmJyaWdodG5lc3MgPSAwOwotCQliZC0+cHJvcHMtPnBvd2VyID0gMDsKLQkJYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKGJkKTsKLQl9Ci0KIAliZC0+cHJvcHMgPSBOVUxMOwogCXVwKCZiZC0+c2VtKTsKIAotCWZiX3VucmVnaXN0ZXJfY2xpZW50KCZiZC0+ZmJfbm90aWYpOworCWJhY2tsaWdodF91bnJlZ2lzdGVyX2ZiKGJkKTsKIAogCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZiZC0+Y2xhc3NfZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jCmluZGV4IGQwN2VjYjUuLmZkZTFkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJCW1hY2hpbmZvLT5saW1pdF9tYXNrID0gLTE7CiAKIAljb3JnaV9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlciAoImNvcmdpLWJsIiwKLQkJTlVMTCwgJmNvcmdpYmxfZGF0YSk7CisJCSZwZGV2LT5kZXYsIE5VTEwsICZjb3JnaWJsX2RhdGEpOwogCWlmIChJU19FUlIgKGNvcmdpX2JhY2tsaWdodF9kZXZpY2UpKQogCQlyZXR1cm4gUFRSX0VSUiAoY29yZ2lfYmFja2xpZ2h0X2RldmljZSk7CiAKQEAgLTEzNSw2ICsxMzUsMTAgQEAKIAogc3RhdGljIGludCBjb3JnaWJsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJY29yZ2libF9kYXRhLnBvd2VyID0gMDsKKwljb3JnaWJsX2RhdGEuYnJpZ2h0bmVzcyA9IDA7CisJY29yZ2libF9zZW5kX2ludGVuc2l0eShjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKTsKKwogCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcihjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKTsKIAogCXByaW50aygiQ29yZ2kgQmFja2xpZ2h0IERyaXZlciBVbmxvYWRlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwppbmRleCBlMzk5MzIxLi5jMDdkODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogc3RhdGljIGludCBfX2luaXQgaHA2ODBibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaHA2ODBfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIgKCJocDY4MC1ibCIsCi0JCU5VTEwsICZocDY4MGJsX2RhdGEpOworCQkmZGV2LT5kZXYsIE5VTEwsICZocDY4MGJsX2RhdGEpOwogCWlmIChJU19FUlIgKGhwNjgwX2JhY2tsaWdodF9kZXZpY2UpKQogCQlyZXR1cm4gUFRSX0VSUiAoaHA2ODBfYmFja2xpZ2h0X2RldmljZSk7CiAKQEAgLTExNyw2ICsxMTcsMTAgQEAKIAogc3RhdGljIGludCBocDY4MGJsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJaHA2ODBibF9kYXRhLmJyaWdodG5lc3MgPSAwOworCWhwNjgwYmxfZGF0YS5wb3dlciA9IDA7CisJaHA2ODBibF9zZW5kX2ludGVuc2l0eShocDY4MF9iYWNrbGlnaHRfZGV2aWNlKTsKKwogCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihocDY4MF9iYWNrbGlnaHRfZGV2aWNlKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwppbmRleCBiYzhhYjAwLi5mNmUwNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwpAQCAtMTQsNiArMTQsNTMgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfRkIpIHx8IChkZWZpbmVkKENPTkZJR19GQl9NT0RVTEUpICYmIFwKKwkJCSAgIGRlZmluZWQoQ09ORklHX0xDRF9DTEFTU19ERVZJQ0VfTU9EVUxFKSkKKy8qIFRoaXMgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgd2hlbiBzb21ldGhpbmcgaW1wb3J0YW50IGhhcHBlbnMgaW5zaWRlIGEKKyAqIGZyYW1lYnVmZmVyIGRyaXZlci4gV2UncmUgbG9va2luZyBpZiB0aGF0IGltcG9ydGFudCBldmVudCBpcyBibGFua2luZywKKyAqIGFuZCBpZiBpdCBpcywgd2UncmUgc3dpdGNoaW5nIGxjZCBwb3dlciBhcyB3ZWxsIC4uLgorICovCitzdGF0aWMgaW50IGZiX25vdGlmaWVyX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbGNkX2RldmljZSAqbGQ7CisJc3RydWN0IGZiX2V2ZW50ICpldmRhdGEgPSBkYXRhOworCisJLyogSWYgd2UgYXJlbid0IGludGVyZXN0ZWQgaW4gdGhpcyBldmVudCwgc2tpcCBpdCBpbW1lZGlhdGVseSAuLi4gKi8KKwlpZiAoZXZlbnQgIT0gRkJfRVZFTlRfQkxBTkspCisJCXJldHVybiAwOworCisJbGQgPSBjb250YWluZXJfb2Yoc2VsZiwgc3RydWN0IGxjZF9kZXZpY2UsIGZiX25vdGlmKTsKKwlkb3duKCZsZC0+c2VtKTsKKwlpZiAobGQtPnByb3BzKQorCQlpZiAoIWxkLT5wcm9wcy0+Y2hlY2tfZmIgfHwgbGQtPnByb3BzLT5jaGVja19mYihldmRhdGEtPmluZm8pKQorCQkJbGQtPnByb3BzLT5zZXRfcG93ZXIobGQsICooaW50ICopZXZkYXRhLT5kYXRhKTsKKwl1cCgmbGQtPnNlbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGNkX3JlZ2lzdGVyX2ZiKHN0cnVjdCBsY2RfZGV2aWNlICpsZCkKK3sKKwltZW1zZXQoJmxkLT5mYl9ub3RpZiwgMCwgc2l6ZW9mKCZsZC0+ZmJfbm90aWYpKTsKKwlsZC0+ZmJfbm90aWYubm90aWZpZXJfY2FsbCA9IGZiX25vdGlmaWVyX2NhbGxiYWNrOworCXJldHVybiBmYl9yZWdpc3Rlcl9jbGllbnQoJmxkLT5mYl9ub3RpZik7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF91bnJlZ2lzdGVyX2ZiKHN0cnVjdCBsY2RfZGV2aWNlICpsZCkKK3sKKwlmYl91bnJlZ2lzdGVyX2NsaWVudCgmbGQtPmZiX25vdGlmKTsKK30KKyNlbHNlCitzdGF0aWMgaW50IGxjZF9yZWdpc3Rlcl9mYihzdHJ1Y3QgbGNkX2RldmljZSAqbGQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsY2RfdW5yZWdpc3Rlcl9mYihzdHJ1Y3QgbGNkX2RldmljZSAqbGQpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0ZCICovCisKIHN0YXRpYyBzc2l6ZV90IGxjZF9zaG93X3Bvd2VyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKIAlpbnQgcmM7CkBAIC0xMjEsMzUgKzE2OCwxMiBAQAogCS5zdG9yZQk9IF9zdG9yZSwJCQkJCVwKIH0KIAotc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGxjZF9jbGFzc19kZXZpY2VfYXR0cmlidXRlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGxjZF9jbGFzc19kZXZpY2VfYXR0cmlidXRlc1tdID0gewogCURFQ0xBUkVfQVRUUihwb3dlciwgMDY0NCwgbGNkX3Nob3dfcG93ZXIsIGxjZF9zdG9yZV9wb3dlciksCiAJREVDTEFSRV9BVFRSKGNvbnRyYXN0LCAwNjQ0LCBsY2Rfc2hvd19jb250cmFzdCwgbGNkX3N0b3JlX2NvbnRyYXN0KSwKIAlERUNMQVJFX0FUVFIobWF4X2NvbnRyYXN0LCAwNDQ0LCBsY2Rfc2hvd19tYXhfY29udHJhc3QsIE5VTEwpLAogfTsKIAotLyogVGhpcyBjYWxsYmFjayBnZXRzIGNhbGxlZCB3aGVuIHNvbWV0aGluZyBpbXBvcnRhbnQgaGFwcGVucyBpbnNpZGUgYQotICogZnJhbWVidWZmZXIgZHJpdmVyLiBXZSdyZSBsb29raW5nIGlmIHRoYXQgaW1wb3J0YW50IGV2ZW50IGlzIGJsYW5raW5nLAotICogYW5kIGlmIGl0IGlzLCB3ZSdyZSBzd2l0Y2hpbmcgbGNkIHBvd2VyIGFzIHdlbGwgLi4uCi0gKi8KLXN0YXRpYyBpbnQgZmJfbm90aWZpZXJfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAotCQkJCSB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBsY2RfZGV2aWNlICpsZDsKLQlzdHJ1Y3QgZmJfZXZlbnQgKmV2ZGF0YSA9KHN0cnVjdCBmYl9ldmVudCAqKWRhdGE7Ci0KLQkvKiBJZiB3ZSBhcmVuJ3QgaW50ZXJlc3RlZCBpbiB0aGlzIGV2ZW50LCBza2lwIGl0IGltbWVkaWF0ZWx5IC4uLiAqLwotCWlmIChldmVudCAhPSBGQl9FVkVOVF9CTEFOSykKLQkJcmV0dXJuIDA7Ci0KLQlsZCA9IGNvbnRhaW5lcl9vZihzZWxmLCBzdHJ1Y3QgbGNkX2RldmljZSwgZmJfbm90aWYpOwotCWRvd24oJmxkLT5zZW0pOwotCWlmIChsZC0+cHJvcHMpCi0JCWlmICghbGQtPnByb3BzLT5jaGVja19mYiB8fCBsZC0+cHJvcHMtPmNoZWNrX2ZiKGV2ZGF0YS0+aW5mbykpCi0JCQlsZC0+cHJvcHMtPnNldF9wb3dlcihsZCwgKihpbnQgKilldmRhdGEtPmRhdGEpOwotCXVwKCZsZC0+c2VtKTsKLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBsY2RfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBuZXcgb2JqZWN0IG9mIGxjZF9kZXZpY2UgY2xhc3MuCiAgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIG5ldyBvYmplY3QobXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUKQEAgLTE4NiwxMCArMjEwLDggQEAKIAkJcmV0dXJuIEVSUl9QVFIocmMpOwogCX0KIAotCW1lbXNldCgmbmV3X2xkLT5mYl9ub3RpZiwgMCwgc2l6ZW9mKG5ld19sZC0+ZmJfbm90aWYpKTsKLQluZXdfbGQtPmZiX25vdGlmLm5vdGlmaWVyX2NhbGwgPSBmYl9ub3RpZmllcl9jYWxsYmFjazsKKwlyYyA9IGxjZF9yZWdpc3Rlcl9mYihuZXdfbGQpOwogCi0JcmMgPSBmYl9yZWdpc3Rlcl9jbGllbnQoJm5ld19sZC0+ZmJfbm90aWYpOwogCWlmICh1bmxpa2VseShyYykpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTIzMiw5ICsyNTQsNyBAQAogCWRvd24oJmxkLT5zZW0pOwogCWxkLT5wcm9wcyA9IE5VTEw7CiAJdXAoJmxkLT5zZW0pOwotCi0JZmJfdW5yZWdpc3Rlcl9jbGllbnQoJmxkLT5mYl9ub3RpZik7Ci0KKwlsY2RfdW5yZWdpc3Rlcl9mYihsZCk7CiAJY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoJmxkLT5jbGFzc19kZXYpOwogfQogRVhQT1JUX1NZTUJPTChsY2RfZGV2aWNlX3VucmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYwppbmRleCA2Mjg1NzFjLi5mYzgxMmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlsb2NvbW9sY2RfYmxfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigibG9jb21vLWJsIiwgTlVMTCwgJmxvY29tb2JsX2RhdGEpOworCWxvY29tb2xjZF9ibF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJsb2NvbW8tYmwiLCAmbGRldi0+ZGV2LCBOVUxMLCAmbG9jb21vYmxfZGF0YSk7CiAKIAlpZiAoSVNfRVJSIChsb2NvbW9sY2RfYmxfZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIgKGxvY29tb2xjZF9ibF9kZXZpY2UpOwpAQCAtMjAwLDYgKzIwMCwxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlsb2NvbW9ibF9kYXRhLmJyaWdodG5lc3MgPSAwOworCWxvY29tb2JsX2RhdGEucG93ZXIgPSAwOworCWxvY29tb2xjZF9zZXRfaW50ZW5zaXR5KGxvY29tb2xjZF9ibF9kZXZpY2UpOworCiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGxvY29tb2xjZF9ibF9kZXZpY2UpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlsb2NvbW9sY2RfZGV2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYncyLmMgYi9kcml2ZXJzL3ZpZGVvL2J3Mi5jCmluZGV4IGM2NmUzZDUuLjliYjYyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYncyLmMKKysrIGIvZHJpdmVycy92aWRlby9idzIuYwpAQCAtMzIwLDcgKzMyMCw3IEBACiAJYWxsLT5pbmZvLmZib3BzID0gJmJ3Ml9vcHM7CiAKIAlhbGwtPmluZm8uc2NyZWVuX2Jhc2UgPQotCQlzYnVzX2lvcmVtYXAoJm9wLT5yZXNvdXJjZVswXSwgMCwgYWxsLT5wYXIuZmJzaXplLCAiYncyIHJhbSIpOworCQlvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMF0sIDAsIGFsbC0+cGFyLmZic2l6ZSwgImJ3MiByYW0iKTsKIAlhbGwtPmluZm8ucGFyID0gJmFsbC0+cGFyOwogCiAJYncyX2JsYW5rKDAsICZhbGwtPmluZm8pOwpAQCAtMzI5LDggKzMyOSwxMCBAQAogCiAJZXJyPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKIAlpZiAoZXJyIDwgMCkgewotCQlvZl9pb3VubWFwKGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgYncyX3JlZ3MpKTsKLQkJb2ZfaW91bm1hcChhbGwtPmluZm8uc2NyZWVuX2Jhc2UsIGFsbC0+cGFyLmZic2l6ZSk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwKKwkJCSAgIGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgYncyX3JlZ3MpKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLAorCQkJICAgYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOwogCQlrZnJlZShhbGwpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTM1MSwxOCArMzUzLDE4IEBACiAJcmV0dXJuIGJ3Ml9pbml0X29uZShvcCk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGJ3Ml9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgYncyX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKLQlzdHJ1Y3QgYWxsX2luZm8gKmFsbCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKIAogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CiAKLQlvZl9pb3VubWFwKGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgYncyX3JlZ3MpKTsKLQlvZl9pb3VubWFwKGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKKwlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sIGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgYncyX3JlZ3MpKTsKKwlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sIGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKIAogCWtmcmVlKGFsbCk7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NmYmltZ2JsdC5jIGIvZHJpdmVycy92aWRlby9jZmJpbWdibHQuYwppbmRleCA1MWQzNTM4Li4yNjEwMDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NmYmltZ2JsdC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2ZiaW1nYmx0LmMKQEAgLTQyLDcgKzQyLDcgQEAKICNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAotc3RhdGljIHUzMiBjZmJfdGFiOFtdID0geworc3RhdGljIGNvbnN0IHUzMiBjZmJfdGFiOFtdID0gewogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQogICAgIDB4MDAwMDAwMDAsMHgwMDAwMDBmZiwweDAwMDBmZjAwLDB4MDAwMGZmZmYsCiAgICAgMHgwMGZmMDAwMCwweDAwZmYwMGZmLDB4MDBmZmZmMDAsMHgwMGZmZmZmZiwKQEAgLTU4LDcgKzU4LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHUzMiBjZmJfdGFiMTZbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgY2ZiX3RhYjE2W10gPSB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAgICAgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHhmZmZmMDAwMCwgMHhmZmZmZmZmZgogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCkBAIC02OCw3ICs2OCw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyB1MzIgY2ZiX3RhYjMyW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGNmYl90YWIzMltdID0gewogCTB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYKIH07CiAKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXUzMiBiaXRfbWFzaywgZW5kX21hc2ssIGVvcngsIHNoaWZ0OwogCWNvbnN0IGNoYXIgKnMgPSBpbWFnZS0+ZGF0YSwgKnNyYzsKIAl1MzIgX19pb21lbSAqZHN0OwotCXUzMiAqdGFiID0gTlVMTDsKKwljb25zdCB1MzIgKnRhYiA9IE5VTEw7CiAJaW50IGksIGosIGs7CiAJCQogCXN3aXRjaCAoYnBwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NnMTQuYyBiL2RyaXZlcnMvdmlkZW8vY2cxNC5jCmluZGV4IDdmOTI2YzYuLmVjNmE1MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2cxNC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2cxNC5jCkBAIC00NTIsMTYgKzQ1MiwyMCBAQAogCXN0cnVjdCBjZzE0X3BhciBwYXI7CiB9OwogCi1zdGF0aWMgdm9pZCBjZzE0X3VubWFwX3JlZ3Moc3RydWN0IGFsbF9pbmZvICphbGwpCitzdGF0aWMgdm9pZCBjZzE0X3VubWFwX3JlZ3Moc3RydWN0IG9mX2RldmljZSAqb3AsIHN0cnVjdCBhbGxfaW5mbyAqYWxsKQogewogCWlmIChhbGwtPnBhci5yZWdzKQotCQlvZl9pb3VubWFwKGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgY2cxNF9yZWdzKSk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwKKwkJCSAgIGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgY2cxNF9yZWdzKSk7CiAJaWYgKGFsbC0+cGFyLmNsdXQpCi0JCW9mX2lvdW5tYXAoYWxsLT5wYXIuY2x1dCwgc2l6ZW9mKHN0cnVjdCBjZzE0X2NsdXQpKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLAorCQkJICAgYWxsLT5wYXIuY2x1dCwgc2l6ZW9mKHN0cnVjdCBjZzE0X2NsdXQpKTsKIAlpZiAoYWxsLT5wYXIuY3Vyc29yKQotCQlvZl9pb3VubWFwKGFsbC0+cGFyLmN1cnNvciwgc2l6ZW9mKHN0cnVjdCBjZzE0X2N1cnNvcikpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sCisJCQkgICBhbGwtPnBhci5jdXJzb3IsIHNpemVvZihzdHJ1Y3QgY2cxNF9jdXJzb3IpKTsKIAlpZiAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlKQotCQlvZl9pb3VubWFwKGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzFdLAorCQkJICAgYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjZzE0X2luaXRfb25lKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQpAQCAtNTA2LDcgKzUxMCw3IEBACiAKIAlpZiAoIWFsbC0+cGFyLnJlZ3MgfHwgIWFsbC0+cGFyLmNsdXQgfHwgIWFsbC0+cGFyLmN1cnNvciB8fAogCSAgICAhYWxsLT5pbmZvLnNjcmVlbl9iYXNlKQotCQljZzE0X3VubWFwX3JlZ3MoYWxsKTsKKwkJY2cxNF91bm1hcF9yZWdzKG9wLCBhbGwpOwogCiAJaXNfOG1iID0gKCgob3AtPnJlc291cmNlWzFdLmVuZCAtIG9wLT5yZXNvdXJjZVsxXS5zdGFydCkgKyAxKSA9PQogCQkgICg4ICogMTAyNCAqIDEwMjQpKTsKQEAgLTU0MSw3ICs1NDUsNyBAQAogCV9fY2cxNF9yZXNldCgmYWxsLT5wYXIpOwogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwLCAyNTYsIDApKSB7Ci0JCWNnMTRfdW5tYXBfcmVncyhhbGwpOworCQljZzE0X3VubWFwX3JlZ3Mob3AsIGFsbCk7CiAJCWtmcmVlKGFsbCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTU1Miw3ICs1NTYsNyBAQAogCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOwogCWlmIChlcnIgPCAwKSB7CiAJCWZiX2RlYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXApOwotCQljZzE0X3VubWFwX3JlZ3MoYWxsKTsKKwkJY2cxNF91bm1hcF9yZWdzKG9wLCBhbGwpOwogCQlrZnJlZShhbGwpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTU3NCwxOCArNTc4LDE4IEBACiAJcmV0dXJuIGNnMTRfaW5pdF9vbmUob3ApOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBjZzE0X3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBjZzE0X3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKLQlzdHJ1Y3QgYWxsX2luZm8gKmFsbCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKIAogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CiAJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7CiAKLQljZzE0X3VubWFwX3JlZ3MoYWxsKTsKKwljZzE0X3VubWFwX3JlZ3Mob3AsIGFsbCk7CiAKIAlrZnJlZShhbGwpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jZzMuYyBiL2RyaXZlcnMvdmlkZW8vY2czLmMKaW5kZXggOWM4Yzc1My4uYWRhNmY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jZzMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NnMy5jCkBAIC00MDMsOCArNDAzLDEwIEBACiAJCWNnM19kb19kZWZhdWx0X21vZGUoJmFsbC0+cGFyKTsKIAogCWlmIChmYl9hbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCwgMjU2LCAwKSkgewotCQlvZl9pb3VubWFwKGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgY2czX3JlZ3MpKTsKLQkJb2ZfaW91bm1hcChhbGwtPmluZm8uc2NyZWVuX2Jhc2UsIGFsbC0+cGFyLmZic2l6ZSk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwKKwkJCSAgIGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgY2czX3JlZ3MpKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLAorCQkJICAgYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOwogCQlrZnJlZShhbGwpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC00MTUsOCArNDE3LDEwIEBACiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7Ci0JCW9mX2lvdW5tYXAoYWxsLT5wYXIucmVncywgc2l6ZW9mKHN0cnVjdCBjZzNfcmVncykpOwotCQlvZl9pb3VubWFwKGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLAorCQkJICAgYWxsLT5wYXIucmVncywgc2l6ZW9mKHN0cnVjdCBjZzNfcmVncykpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sCisJCQkgICBhbGwtPmluZm8uc2NyZWVuX2Jhc2UsIGFsbC0+cGFyLmZic2l6ZSk7CiAJCWtmcmVlKGFsbCk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtNDM2LDE5ICs0NDAsMTkgQEAKIAlyZXR1cm4gY2czX2luaXRfb25lKG9wKTsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgY2czX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBjZzNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQogewotCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisJc3RydWN0IGFsbF9pbmZvICphbGwgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKIAlmYl9kZWFsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwKTsKIAotCW9mX2lvdW5tYXAoYWxsLT5wYXIucmVncywgc2l6ZW9mKHN0cnVjdCBjZzNfcmVncykpOwotCW9mX2lvdW5tYXAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOworCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgYWxsLT5wYXIucmVncywgc2l6ZW9mKHN0cnVjdCBjZzNfcmVncykpOworCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOwogCiAJa2ZyZWUoYWxsKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIE5VTEwpOworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2c2LmMgYi9kcml2ZXJzL3ZpZGVvL2NnNi5jCmluZGV4IDY0MTQ2YmUuLjRkYWQyM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2c2LmMKKysrIGIvZHJpdmVycy92aWRlby9jZzYuYwpAQCAtNjU4LDIxICs2NTgsMjYgQEAKIAlzdHJ1Y3QgY2c2X3BhciBwYXI7CiB9OwogCi1zdGF0aWMgdm9pZCBjZzZfdW5tYXBfcmVncyhzdHJ1Y3QgYWxsX2luZm8gKmFsbCkKK3N0YXRpYyB2b2lkIGNnNl91bm1hcF9yZWdzKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBzdHJ1Y3QgYWxsX2luZm8gKmFsbCkKIHsKIAlpZiAoYWxsLT5wYXIuZmJjKQotCQlvZl9pb3VubWFwKGFsbC0+cGFyLmZiYywgNDA5Nik7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgYWxsLT5wYXIuZmJjLCA0MDk2KTsKIAlpZiAoYWxsLT5wYXIudGVjKQotCQlvZl9pb3VubWFwKGFsbC0+cGFyLnRlYywgc2l6ZW9mKHN0cnVjdCBjZzZfdGVjKSk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwKKwkJCSAgIGFsbC0+cGFyLnRlYywgc2l6ZW9mKHN0cnVjdCBjZzZfdGVjKSk7CiAJaWYgKGFsbC0+cGFyLnRoYykKLQkJb2ZfaW91bm1hcChhbGwtPnBhci50aGMsIHNpemVvZihzdHJ1Y3QgY2c2X3RoYykpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sCisJCQkgICBhbGwtPnBhci50aGMsIHNpemVvZihzdHJ1Y3QgY2c2X3RoYykpOwogCWlmIChhbGwtPnBhci5idCkKLQkJb2ZfaW91bm1hcChhbGwtPnBhci5idCwgc2l6ZW9mKHN0cnVjdCBidF9yZWdzKSk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwKKwkJCSAgIGFsbC0+cGFyLmJ0LCBzaXplb2Yoc3RydWN0IGJ0X3JlZ3MpKTsKIAlpZiAoYWxsLT5wYXIuZmhjKQotCQlvZl9pb3VubWFwKGFsbC0+cGFyLmZoYywgc2l6ZW9mKHUzMikpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sCisJCQkgICBhbGwtPnBhci5maGMsIHNpemVvZih1MzIpKTsKIAogCWlmIChhbGwtPmluZm8uc2NyZWVuX2Jhc2UpCi0JCW9mX2lvdW5tYXAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sCisJCQkgICBhbGwtPmluZm8uc2NyZWVuX2Jhc2UsIGFsbC0+cGFyLmZic2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNnNl9pbml0X29uZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKQEAgLTcyMCw3ICs3MjUsNyBAQAogCQkJCQkgICAgYWxsLT5wYXIuZmJzaXplLCAiY2dzaXggcmFtIik7CiAJaWYgKCFhbGwtPnBhci5mYmMgfHwgIWFsbC0+cGFyLnRlYyB8fCAhYWxsLT5wYXIudGhjIHx8CiAJICAgICFhbGwtPnBhci5idCB8fCAhYWxsLT5wYXIuZmhjIHx8ICFhbGwtPmluZm8uc2NyZWVuX2Jhc2UpIHsKLQkJY2c2X3VubWFwX3JlZ3MoYWxsKTsKKwkJY2c2X3VubWFwX3JlZ3Mob3AsIGFsbCk7CiAJCWtmcmVlKGFsbCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTczNCw3ICs3MzksNyBAQAogCWNnNl9ibGFuaygwLCAmYWxsLT5pbmZvKTsKIAogCWlmIChmYl9hbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCwgMjU2LCAwKSkgewotCQljZzZfdW5tYXBfcmVncyhhbGwpOworCQljZzZfdW5tYXBfcmVncyhvcCwgYWxsKTsKIAkJa2ZyZWUoYWxsKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNzQ0LDcgKzc0OSw3IEBACiAKIAllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKIAlpZiAoZXJyIDwgMCkgewotCQljZzZfdW5tYXBfcmVncyhhbGwpOworCQljZzZfdW5tYXBfcmVncyhvcCwgYWxsKTsKIAkJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7CiAJCWtmcmVlKGFsbCk7CiAJCXJldHVybiBlcnI7CkBAIC03NjcsMTggKzc3MiwxOCBAQAogCXJldHVybiBjZzZfaW5pdF9vbmUob3ApOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBjZzZfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGNnNl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCiB7Ci0Jc3RydWN0IGFsbF9pbmZvICphbGwgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKwlzdHJ1Y3QgYWxsX2luZm8gKmFsbCA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CiAKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZhbGwtPmluZm8pOwogCWZiX2RlYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXApOwogCi0JY2c2X3VubWFwX3JlZ3MoYWxsKTsKKwljZzZfdW5tYXBfcmVncyhvcCwgYWxsKTsKIAogCWtmcmVlKGFsbCk7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMKaW5kZXggZGFmNDNmNS4uMmM0YmM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jaXJydXNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYwpAQCAtMjQ0Miw3ICsyNDQyLDEwIEBACiAJcHJpbnRrICgiQ2lycnVzIExvZ2ljIGNoaXBzZXQgb24gUENJIGJ1c1xuIik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCi0JcmV0dXJuIGNpcnJ1c2ZiX3JlZ2lzdGVyKGNpbmZvKTsKKwlyZXQgPSBjaXJydXNmYl9yZWdpc3RlcihjaW5mbyk7CisJaWYgKHJldCkKKwkJaW91bm1hcChjaW5mby0+ZmJtZW0pOworCXJldHVybiByZXQ7CiAKIGVycl9yZWxlYXNlX2xlZ2FjeToKIAlpZiAocmVsZWFzZV9pb19wb3J0cykKQEAgLTI1NzQsNyArMjU3NywxNSBAQAogCXByaW50ayAoS0VSTl9JTkZPICJDaXJydXMgTG9naWMgY2hpcHNldCBvbiBab3JybyBidXNcbiIpOwogCXpvcnJvX3NldF9kcnZkYXRhKHosIGluZm8pOwogCi0JcmV0dXJuIGNpcnJ1c2ZiX3JlZ2lzdGVyKGNpbmZvKTsKKwlyZXQgPSBjaXJydXNmYl9yZWdpc3RlcihjaW5mbyk7CisJaWYgKHJldCkgeworCQlpZiAoYnR5cGUgPT0gQlRfUElDQVNTTzQpIHsKKwkJCWlvdW5tYXAoY2luZm8tPmZibWVtKTsKKwkJCWlvdW5tYXAoY2luZm8tPnJlZ2Jhc2UgLSAweDYwMDAwMCk7CisJCX0gZWxzZSBpZiAoYm9hcmRfYWRkciA+IDB4MDEwMDAwMDApCisJCQlpb3VubWFwKGNpbmZvLT5mYm1lbSk7CisJfQorCXJldHVybiByZXQ7CiAKIGVycl91bm1hcF9yZWdiYXNlOgogCS8qIFBhcmVudGFsIGFkdmlzb3J5OiBleHBsaWNpdCBoYWNrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc29mdGN1cnNvci5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3NvZnRjdXJzb3IuYwppbmRleCA3ZDA3ZDgzLi5mNTc3YmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc29mdGN1cnNvci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zb2Z0Y3Vyc29yLmMKQEAgLTEsMTEgKzEsMTMgQEAKIC8qCi0gKiBsaW51eC9kcml2ZXJzL3ZpZGVvL3NvZnRjdXJzb3IuYyAtLSBHZW5lcmljIHNvZnR3YXJlIGN1cnNvciBmb3IgZnJhbWUgYnVmZmVyIGRldmljZXMKKyAqIGxpbnV4L2RyaXZlcnMvdmlkZW8vc29mdGN1cnNvci5jCisgKgorICogR2VuZXJpYyBzb2Z0d2FyZSBjdXJzb3IgZm9yIGZyYW1lIGJ1ZmZlciBkZXZpY2VzCiAgKgogICogIENyZWF0ZWQgMTQgTm92IDIwMDIgYnkgSmFtZXMgU2ltbW9ucwogICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yNSw3ICsyNyw3IEBACiAJdW5zaWduZWQgaW50IGJ1Zl9hbGlnbiA9IGluZm8tPnBpeG1hcC5idWZfYWxpZ24gLSAxOwogCXVuc2lnbmVkIGludCBpLCBzaXplLCBkc2l6ZSwgc19waXRjaCwgZF9waXRjaDsKIAlzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlOwotCXU4ICpkc3Q7CisJdTggKnNyYywgKmRzdDsKIAogCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKIAkJcmV0dXJuIDA7CkBAIC00NSw3ICs0Nyw4IEBACiAJCX0KIAl9CiAKLQlpbWFnZSA9IChzdHJ1Y3QgZmJfaW1hZ2UgKikgKG9wcy0+Y3Vyc29yX3NyYyArIGRzaXplKTsKKwlzcmMgPSBvcHMtPmN1cnNvcl9zcmMgKyBzaXplb2Yoc3RydWN0IGZiX2ltYWdlKTsKKwlpbWFnZSA9IChzdHJ1Y3QgZmJfaW1hZ2UgKilvcHMtPmN1cnNvcl9zcmM7CiAJKmltYWdlID0gY3Vyc29yLT5pbWFnZTsKIAlkX3BpdGNoID0gKHNfcGl0Y2ggKyBzY2FuX2FsaWduKSAmIH5zY2FuX2FsaWduOwogCkBAIC01NywyMSArNjAsMTggQEAKIAkJc3dpdGNoIChjdXJzb3ItPnJvcCkgewogCQljYXNlIFJPUF9YT1I6CiAJCQlmb3IgKGkgPSAwOyBpIDwgZHNpemU7IGkrKykKLQkJCQlvcHMtPmN1cnNvcl9zcmNbaV0gPSBpbWFnZS0+ZGF0YVtpXSBeCi0JCQkJCWN1cnNvci0+bWFza1tpXTsKKwkJCQlzcmNbaV0gPSBpbWFnZS0+ZGF0YVtpXSBeIGN1cnNvci0+bWFza1tpXTsKIAkJCWJyZWFrOwogCQljYXNlIFJPUF9DT1BZOgogCQlkZWZhdWx0OgogCQkJZm9yIChpID0gMDsgaSA8IGRzaXplOyBpKyspCi0JCQkJb3BzLT5jdXJzb3Jfc3JjW2ldID0gaW1hZ2UtPmRhdGFbaV0gJgotCQkJCQljdXJzb3ItPm1hc2tbaV07CisJCQkJc3JjW2ldID0gaW1hZ2UtPmRhdGFbaV0gJiBjdXJzb3ItPm1hc2tbaV07CiAJCQlicmVhazsKIAkJfQogCX0gZWxzZQotCQltZW1jcHkob3BzLT5jdXJzb3Jfc3JjLCBpbWFnZS0+ZGF0YSwgZHNpemUpOworCQltZW1jcHkoc3JjLCBpbWFnZS0+ZGF0YSwgZHNpemUpOwogCi0JZmJfcGFkX2FsaWduZWRfYnVmZmVyKGRzdCwgZF9waXRjaCwgb3BzLT5jdXJzb3Jfc3JjLCBzX3BpdGNoLAotCQkJICAgICAgaW1hZ2UtPmhlaWdodCk7CisJZmJfcGFkX2FsaWduZWRfYnVmZmVyKGRzdCwgZF9waXRjaCwgc3JjLCBzX3BpdGNoLCBpbWFnZS0+aGVpZ2h0KTsKIAlpbWFnZS0+ZGF0YSA9IGRzdDsKIAlpbmZvLT5mYm9wcy0+ZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb24uYwppbmRleCA0NTU4NmFhLi41N2IyMWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc3RpY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNvbi5jCkBAIC0zNDUsNyArMzQ1LDcgQEAKIHsKIH0KIAotc3RhdGljIHN0cnVjdCBjb25zdyBzdGlfY29uID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdyBzdGlfY29uID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmNvbl9zdGFydHVwCQk9IHN0aWNvbl9zdGFydHVwLAogCS5jb25faW5pdAkJPSBzdGljb25faW5pdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwppbmRleCAwYTJjMTBhLi40YTliZGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCkBAIC05MywyNyArOTMsMjcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZnYWNvbl91bmlfcGFnZWRpclsyXTsKIAogLyogRGVzY3JpcHRpb24gb2YgdGhlIGhhcmR3YXJlIHNpdHVhdGlvbiAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcJdmdhX3ZyYW1fYmFzZTsJCS8qIEJhc2Ugb2YgdmlkZW8gbWVtb3J5ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZwl2Z2FfdnJhbV9lbmQ7CQkvKiBFbmQgb2YgdmlkZW8gbWVtb3J5ICovCi1zdGF0aWMgaW50CQl2Z2FfdnJhbV9zaXplOwkJLyogU2l6ZSBvZiB2aWRlbyBtZW1vcnkgKi8KLXN0YXRpYyB1MTYJCXZnYV92aWRlb19wb3J0X3JlZzsJLyogVmlkZW8gcmVnaXN0ZXIgc2VsZWN0IHBvcnQgKi8KLXN0YXRpYyB1MTYJCXZnYV92aWRlb19wb3J0X3ZhbDsJLyogVmlkZW8gcmVnaXN0ZXIgdmFsdWUgcG9ydCAqLwotc3RhdGljIHVuc2lnbmVkIGludAl2Z2FfdmlkZW9fbnVtX2NvbHVtbnM7CS8qIE51bWJlciBvZiB0ZXh0IGNvbHVtbnMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQJdmdhX3ZpZGVvX251bV9saW5lczsJLyogTnVtYmVyIG9mIHRleHQgbGluZXMgKi8KLXN0YXRpYyBpbnQJCXZnYV9jYW5fZG9fY29sb3IgPSAwOwkvKiBEbyB3ZSBzdXBwb3J0IGNvbG9ycz8gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQJdmdhX2RlZmF1bHRfZm9udF9oZWlnaHQ7LyogSGVpZ2h0IG9mIGRlZmF1bHQgc2NyZWVuIGZvbnQgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyCXZnYV92aWRlb190eXBlOwkJLyogQ2FyZCB0eXBlICovCi1zdGF0aWMgdW5zaWduZWQgY2hhcgl2Z2FfaGFyZHNjcm9sbF9lbmFibGVkOwotc3RhdGljIHVuc2lnbmVkIGNoYXIJdmdhX2hhcmRzY3JvbGxfdXNlcl9lbmFibGUgPSAxOworc3RhdGljIGludAkJdmdhX2luaXRfZG9uZQkJX19yZWFkX21vc3RseTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nCXZnYV92cmFtX2Jhc2UJCV9fcmVhZF9tb3N0bHk7CS8qIEJhc2Ugb2YgdmlkZW8gbWVtb3J5ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZwl2Z2FfdnJhbV9lbmQJCV9fcmVhZF9tb3N0bHk7CS8qIEVuZCBvZiB2aWRlbyBtZW1vcnkgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQJdmdhX3ZyYW1fc2l6ZQkJX19yZWFkX21vc3RseTsJLyogU2l6ZSBvZiB2aWRlbyBtZW1vcnkgKi8KK3N0YXRpYyB1MTYJCXZnYV92aWRlb19wb3J0X3JlZwlfX3JlYWRfbW9zdGx5OwkvKiBWaWRlbyByZWdpc3RlciBzZWxlY3QgcG9ydCAqLworc3RhdGljIHUxNgkJdmdhX3ZpZGVvX3BvcnRfdmFsCV9fcmVhZF9tb3N0bHk7CS8qIFZpZGVvIHJlZ2lzdGVyIHZhbHVlIHBvcnQgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQJdmdhX3ZpZGVvX251bV9jb2x1bW5zOwkJCS8qIE51bWJlciBvZiB0ZXh0IGNvbHVtbnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQJdmdhX3ZpZGVvX251bV9saW5lczsJCQkvKiBOdW1iZXIgb2YgdGV4dCBsaW5lcyAqLworc3RhdGljIGludAkJdmdhX2Nhbl9kb19jb2xvcglfX3JlYWRfbW9zdGx5OwkvKiBEbyB3ZSBzdXBwb3J0IGNvbG9ycz8gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQJdmdhX2RlZmF1bHRfZm9udF9oZWlnaHQgX19yZWFkX21vc3RseTsJLyogSGVpZ2h0IG9mIGRlZmF1bHQgc2NyZWVuIGZvbnQgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyCXZnYV92aWRlb190eXBlCQlfX3JlYWRfbW9zdGx5OwkvKiBDYXJkIHR5cGUgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyCXZnYV9oYXJkc2Nyb2xsX2VuYWJsZWQJX19yZWFkX21vc3RseTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCXZnYV9oYXJkc2Nyb2xsX3VzZXJfZW5hYmxlIF9fcmVhZF9tb3N0bHkgPSAxOwogc3RhdGljIHVuc2lnbmVkIGNoYXIJdmdhX2ZvbnRfaXNfZGVmYXVsdCA9IDE7CiBzdGF0aWMgaW50CQl2Z2FfdmVzYV9ibGFua2VkOwogc3RhdGljIGludCAJCXZnYV9wYWxldHRlX2JsYW5rZWQ7CiBzdGF0aWMgaW50IAkJdmdhX2lzX2dmeDsKIHN0YXRpYyBpbnQgCQl2Z2FfNTEyX2NoYXJzOwogc3RhdGljIGludCAJCXZnYV92aWRlb19mb250X2hlaWdodDsKLXN0YXRpYyBpbnQgCQl2Z2Ffc2Nhbl9saW5lczsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgCXZnYV9yb2xsZWRfb3ZlciA9IDA7Ci1zdGF0aWMgaW50ICAgICAgICAgICAgICB2Z2FfaW5pdF9kb25lOworc3RhdGljIGludCAJCXZnYV9zY2FuX2xpbmVzCQlfX3JlYWRfbW9zdGx5Oworc3RhdGljIHVuc2lnbmVkIGludCAJdmdhX3JvbGxlZF9vdmVyOwogCiBzdGF0aWMgaW50IF9faW5pdCBub19zY3JvbGwoY2hhciAqc3RyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jeWJlcmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyZmIuYwppbmRleCBjNDBlNzJkLi4wYjhkNWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2N5YmVyZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyZmIuYwpAQCAtMTA5LDggKzEwOSw2IEBACiAjZGVmaW5lIHdiXzY0KHJlZ3MscmVnLGRhdCkgKCooKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcmVncykgKyByZWcpID0gZGF0KQogI2RlZmluZSByYl82NChyZWdzLCByZWcpICgqKCgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXJlZ3MpICsgcmVnKSkKIAotI2RlZmluZSB3d182NChyZWdzLHJlZyxkYXQpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShyZWdzICsgcmVnKSA9IGRhdCkKLQogc3RydWN0IGN5YmVyZmJfcGFyIHsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOwogCV9fdTMyIHR5cGU7CkBAIC0xMDU1LDYgKzEwNTMsOCBAQAogCiAJICAgIGlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbykgPCAwKSB7CiAJCSAgICBEUFJJTlRLKCJFWElUIC0gcmVnaXN0ZXJfZnJhbWVidWZmZXIgZmFpbGVkXG4iKTsKKwkJCWlmIChDeWJlckJhc2UpCisJCQkJaW91bm1hcChDeWJlckJhc2UpOwogCQkgICAgcmVsZWFzZV9tZW1fcmVnaW9uKEN5YmVyTWVtX3BoeXMsIDB4NDAwMDAwKTsKIAkJICAgIHJlbGVhc2VfbWVtX3JlZ2lvbihDeWJlclJlZ3NfcGh5cywgMHgxMDAwMCk7CiAJCSAgICByZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYyBiL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYwppbmRleCA3MzcyNTdkLi4yOWUwN2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Vwc29uMTM1NWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lcHNvbjEzNTVmYi5jCkBAIC00MDUsNyArNDA1LDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBlcHNvbjEzNTVmYl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOwogCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOwpAQCAtNDM3LDcgKzQzNyw3IEBACiBlcHNvbjEzNTVmYl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAogCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOwogCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmNtYXAuYyBiL2RyaXZlcnMvdmlkZW8vZmJjbWFwLmMKaW5kZXggZThiMTM1Zi4uMTQ4MTA4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmNtYXAuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiY21hcC5jCkBAIC0xOCw2MyArMTgsNjQgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLXN0YXRpYyB1MTYgcmVkMltdID0geworc3RhdGljIHUxNiByZWQyW10gX19yZWFkX21vc3RseSA9IHsKICAgICAweDAwMDAsIDB4YWFhYQogfTsKLXN0YXRpYyB1MTYgZ3JlZW4yW10gPSB7CitzdGF0aWMgdTE2IGdyZWVuMltdIF9fcmVhZF9tb3N0bHkgPSB7CiAgICAgMHgwMDAwLCAweGFhYWEKIH07Ci1zdGF0aWMgdTE2IGJsdWUyW10gPSB7CitzdGF0aWMgdTE2IGJsdWUyW10gX19yZWFkX21vc3RseSA9IHsKICAgICAweDAwMDAsIDB4YWFhYQogfTsKIAotc3RhdGljIHUxNiByZWQ0W10gPSB7CitzdGF0aWMgdTE2IHJlZDRbXSBfX3JlYWRfbW9zdGx5ID0gewogICAgIDB4MDAwMCwgMHhhYWFhLCAweDU1NTUsIDB4ZmZmZgogfTsKLXN0YXRpYyB1MTYgZ3JlZW40W10gPSB7CitzdGF0aWMgdTE2IGdyZWVuNFtdIF9fcmVhZF9tb3N0bHkgPSB7CiAgICAgMHgwMDAwLCAweGFhYWEsIDB4NTU1NSwgMHhmZmZmCiB9Owotc3RhdGljIHUxNiBibHVlNFtdID0geworc3RhdGljIHUxNiBibHVlNFtdIF9fcmVhZF9tb3N0bHkgPSB7CiAgICAgMHgwMDAwLCAweGFhYWEsIDB4NTU1NSwgMHhmZmZmCiB9OwogCi1zdGF0aWMgdTE2IHJlZDhbXSA9IHsKK3N0YXRpYyB1MTYgcmVkOFtdIF9fcmVhZF9tb3N0bHkgPSB7CiAgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweGFhYWEsIDB4YWFhYSwgMHhhYWFhLCAweGFhYWEKIH07Ci1zdGF0aWMgdTE2IGdyZWVuOFtdID0geworc3RhdGljIHUxNiBncmVlbjhbXSBfX3JlYWRfbW9zdGx5ID0gewogICAgIDB4MDAwMCwgMHgwMDAwLCAweGFhYWEsIDB4YWFhYSwgMHgwMDAwLCAweDAwMDAsIDB4NTU1NSwgMHhhYWFhCiB9Owotc3RhdGljIHUxNiBibHVlOFtdID0geworc3RhdGljIHUxNiBibHVlOFtdIF9fcmVhZF9tb3N0bHkgPSB7CiAgICAgMHgwMDAwLCAweGFhYWEsIDB4MDAwMCwgMHhhYWFhLCAweDAwMDAsIDB4YWFhYSwgMHgwMDAwLCAweGFhYWEKIH07CiAKLXN0YXRpYyB1MTYgcmVkMTZbXSA9IHsKK3N0YXRpYyB1MTYgcmVkMTZbXSBfX3JlYWRfbW9zdGx5ID0gewogICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHhhYWFhLCAweGFhYWEsIDB4YWFhYSwgMHhhYWFhLAogICAgIDB4NTU1NSwgMHg1NTU1LCAweDU1NTUsIDB4NTU1NSwgMHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmCiB9Owotc3RhdGljIHUxNiBncmVlbjE2W10gPSB7CitzdGF0aWMgdTE2IGdyZWVuMTZbXSBfX3JlYWRfbW9zdGx5ID0gewogICAgIDB4MDAwMCwgMHgwMDAwLCAweGFhYWEsIDB4YWFhYSwgMHgwMDAwLCAweDAwMDAsIDB4NTU1NSwgMHhhYWFhLAogICAgIDB4NTU1NSwgMHg1NTU1LCAweGZmZmYsIDB4ZmZmZiwgMHg1NTU1LCAweDU1NTUsIDB4ZmZmZiwgMHhmZmZmCiB9Owotc3RhdGljIHUxNiBibHVlMTZbXSA9IHsKK3N0YXRpYyB1MTYgYmx1ZTE2W10gX19yZWFkX21vc3RseSA9IHsKICAgICAweDAwMDAsIDB4YWFhYSwgMHgwMDAwLCAweGFhYWEsIDB4MDAwMCwgMHhhYWFhLCAweDAwMDAsIDB4YWFhYSwKICAgICAweDU1NTUsIDB4ZmZmZiwgMHg1NTU1LCAweGZmZmYsIDB4NTU1NSwgMHhmZmZmLCAweDU1NTUsIDB4ZmZmZgogfTsKIAotc3RhdGljIHN0cnVjdCBmYl9jbWFwIGRlZmF1bHRfMl9jb2xvcnMgPSB7Ci0gICAgMCwgMiwgcmVkMiwgZ3JlZW4yLCBibHVlMiwgTlVMTAorc3RhdGljIGNvbnN0IHN0cnVjdCBmYl9jbWFwIGRlZmF1bHRfMl9jb2xvcnMgPSB7CisgICAgLmxlbj0yLCAucmVkPXJlZDIsIC5ncmVlbj1ncmVlbjIsIC5ibHVlPWJsdWUyCiB9Owotc3RhdGljIHN0cnVjdCBmYl9jbWFwIGRlZmF1bHRfOF9jb2xvcnMgPSB7Ci0gICAgMCwgOCwgcmVkOCwgZ3JlZW44LCBibHVlOCwgTlVMTAorc3RhdGljIGNvbnN0IHN0cnVjdCBmYl9jbWFwIGRlZmF1bHRfOF9jb2xvcnMgPSB7CisgICAgLmxlbj04LCAucmVkPXJlZDgsIC5ncmVlbj1ncmVlbjgsIC5ibHVlPWJsdWU4CiB9Owotc3RhdGljIHN0cnVjdCBmYl9jbWFwIGRlZmF1bHRfNF9jb2xvcnMgPSB7Ci0gICAgMCwgNCwgcmVkNCwgZ3JlZW40LCBibHVlNCwgTlVMTAorc3RhdGljIGNvbnN0IHN0cnVjdCBmYl9jbWFwIGRlZmF1bHRfNF9jb2xvcnMgPSB7CisgICAgLmxlbj00LCAucmVkPXJlZDQsIC5ncmVlbj1ncmVlbjQsIC5ibHVlPWJsdWU0CiB9Owotc3RhdGljIHN0cnVjdCBmYl9jbWFwIGRlZmF1bHRfMTZfY29sb3JzID0gewotICAgIDAsIDE2LCByZWQxNiwgZ3JlZW4xNiwgYmx1ZTE2LCBOVUxMCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX2NtYXAgZGVmYXVsdF8xNl9jb2xvcnMgPSB7CisgICAgLmxlbj0xNiwgLnJlZD1yZWQxNiwgLmdyZWVuPWdyZWVuMTYsIC5ibHVlPWJsdWUxNgogfTsKIAogCisKIC8qKgogICoJZmJfYWxsb2NfY21hcCAtIGFsbG9jYXRlIGEgY29sb3JtYXAKICAqCUBjbWFwOiBmcmFtZSBidWZmZXIgY29sb3JtYXAgc3RydWN0dXJlCkBAIC0xNDYsNyArMTQ3LDcgQEAKICAqCUNvcHkgY29udGVudHMgb2YgY29sb3JtYXAgZnJvbSBAZnJvbSB0byBAdG8uCiAgKi8KIAotaW50IGZiX2NvcHlfY21hcChzdHJ1Y3QgZmJfY21hcCAqZnJvbSwgc3RydWN0IGZiX2NtYXAgKnRvKQoraW50IGZiX2NvcHlfY21hcChjb25zdCBzdHJ1Y3QgZmJfY21hcCAqZnJvbSwgc3RydWN0IGZiX2NtYXAgKnRvKQogewogCWludCB0b29mZiA9IDAsIGZyb21vZmYgPSAwOwogCWludCBzaXplOwpAQCAtMTcwLDcgKzE3MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBmYl9jbWFwX3RvX3VzZXIoc3RydWN0IGZiX2NtYXAgKmZyb20sIHN0cnVjdCBmYl9jbWFwX3VzZXIgKnRvKQoraW50IGZiX2NtYXBfdG9fdXNlcihjb25zdCBzdHJ1Y3QgZmJfY21hcCAqZnJvbSwgc3RydWN0IGZiX2NtYXBfdXNlciAqdG8pCiB7CiAJaW50IHRvb2ZmID0gMCwgZnJvbW9mZiA9IDA7CiAJaW50IHNpemU7CkBAIC0yODIsNyArMjgzLDcgQEAKICAqCiAgKi8KIAotc3RydWN0IGZiX2NtYXAgKmZiX2RlZmF1bHRfY21hcChpbnQgbGVuKQorY29uc3Qgc3RydWN0IGZiX2NtYXAgKmZiX2RlZmF1bHRfY21hcChpbnQgbGVuKQogewogICAgIGlmIChsZW4gPD0gMikKIAlyZXR1cm4gJmRlZmF1bHRfMl9jb2xvcnM7CkBAIC0zMDUsMjIgKzMwNiwyMiBAQAogewogICAgIHVfaW50IGk7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVkMik7IGkrKykgewogCXJlZDJbaV0gPSB+cmVkMltpXTsKIAlncmVlbjJbaV0gPSB+Z3JlZW4yW2ldOwogCWJsdWUyW2ldID0gfmJsdWUyW2ldOwogICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVkNCk7IGkrKykgewogCXJlZDRbaV0gPSB+cmVkNFtpXTsKIAlncmVlbjRbaV0gPSB+Z3JlZW40W2ldOwogCWJsdWU0W2ldID0gfmJsdWU0W2ldOwogICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVkOCk7IGkrKykgewogCXJlZDhbaV0gPSB+cmVkOFtpXTsKIAlncmVlbjhbaV0gPSB+Z3JlZW44W2ldOwogCWJsdWU4W2ldID0gfmJsdWU4W2ldOwogICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZDE2KTsgaSsrKSB7CiAJcmVkMTZbaV0gPSB+cmVkMTZbaV07CiAJZ3JlZW4xNltpXSA9IH5ncmVlbjE2W2ldOwogCWJsdWUxNltpXSA9IH5ibHVlMTZbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiY3Z0LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiY3Z0LmMKaW5kZXggYjU0OTg5OS4uMDg0N2M1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmN2dC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJjdnQuYwpAQCAtNTcsNyArNTcsNyBAQAogCXUzMiBzdGF0dXM7CiB9OwogCi1zdGF0aWMgaW50IGZiX2N2dF92YmlfdGFiW10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmYl9jdnRfdmJpX3RhYltdID0gewogCTQsICAgICAgICAvKiA0OjMgICAgICAqLwogCTUsICAgICAgICAvKiAxNjo5ICAgICAqLwogCTYsICAgICAgICAvKiAxNjoxMCAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1lbS5jIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCmluZGV4IGU5NzNhODcuLjNjZmVhMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKQEAgLTUyLDggKzUyLDggQEAKIAogI2RlZmluZSBGQlBJWE1BUFNJWkUJKDEwMjQgKiA4KQogCi1zdHJ1Y3QgZmJfaW5mbyAqcmVnaXN0ZXJlZF9mYltGQl9NQVhdOwotaW50IG51bV9yZWdpc3RlcmVkX2ZiOworc3RydWN0IGZiX2luZm8gKnJlZ2lzdGVyZWRfZmJbRkJfTUFYXSBfX3JlYWRfbW9zdGx5OworaW50IG51bV9yZWdpc3RlcmVkX2ZiIF9fcmVhZF9tb3N0bHk7CiAKIC8qCiAgKiBIZWxwZXJzCkBAIC0yMDIsNyArMjAyLDcgQEAKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBsaW51eF9sb2dvICpsb2dvLAogCQkJCQkgICAgdTMyICpwYWxldHRlKQogewotCXVuc2lnbmVkIGNoYXIgbWFza1s5XSA9IHsgMCwweDgwLDB4YzAsMHhlMCwweGYwLDB4ZjgsMHhmYywweGZlLDB4ZmYgfTsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtYXNrW10gPSB7IDAsMHg4MCwweGMwLDB4ZTAsMHhmMCwweGY4LDB4ZmMsMHhmZSwweGZmIH07CiAJdW5zaWduZWQgY2hhciByZWRtYXNrLCBncmVlbm1hc2ssIGJsdWVtYXNrOwogCWludCByZWRzaGlmdCwgZ3JlZW5zaGlmdCwgYmx1ZXNoaWZ0OwogCWludCBpOwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJaW50IG5lZWRzX3RydWVwYWxldHRlOwogCWludCBuZWVkc19jbWFwcmVzZXQ7CiAJY29uc3Qgc3RydWN0IGxpbnV4X2xvZ28gKmxvZ287Ci19IGZiX2xvZ287Cit9IGZiX2xvZ28gX19yZWFkX21vc3RseTsKIAogc3RhdGljIHZvaWQgZmJfcm90YXRlX2xvZ29fdWQoY29uc3QgdTggKmluLCB1OCAqb3V0LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCiB7CkBAIC01NzIsNyArNTcyLDcgQEAKIGZiX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CiAJdTMyICpidWZmZXIsICpkc3Q7CkBAIC02NDcsNyArNjQ3LDcgQEAKIGZiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOwogCXUzMiAqYnVmZmVyLCAqc3JjOwpAQCAtMTA4MSw3ICsxMDgxLDcgQEAKIHN0YXRpYyBsb25nCiBmYl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CiAJc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKQEAgLTExMjEsNyArMTEyMSw3IEBACiBzdGF0aWMgaW50IAogZmJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKQogewotCWludCBmYmlkeCA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJaW50IGZiaWR4ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CiAJc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKIAl1bnNpZ25lZCBsb25nIG9mZjsKQEAgLTEyNTMsNyArMTI1Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZiX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYl9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWFkID0JCWZiX3JlYWQsCiAJLndyaXRlID0JZmJfd3JpdGUsCkBAIC0xNDU5LDggKzE0NTksOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBjaGFyICp2aWRlb19vcHRpb25zW0ZCX01BWF07Ci1zdGF0aWMgaW50IG9mb25seTsKK3N0YXRpYyBjaGFyICp2aWRlb19vcHRpb25zW0ZCX01BWF0gX19yZWFkX21vc3RseTsKK3N0YXRpYyBpbnQgb2Zvbmx5IF9fcmVhZF9tb3N0bHk7CiAKIGV4dGVybiBjb25zdCBjaGFyICpnbG9iYWxfbW9kZV9vcHRpb247CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtb24uYyBiL2RyaXZlcnMvdmlkZW8vZmJtb24uYwppbmRleCBkZTkzMTM5Li42YjM4NWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibW9uLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1vbi5jCkBAIC01OCw3ICs1OCw3IEBACiAJdTMyIGZpeDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYnJva2VuX2VkaWQgYnJva2VuZGJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnJva2VuX2VkaWQgYnJva2VuZGJbXSA9IHsKIAkvKiBERUMgRlItUENYQVYtWVogKi8KIAl7CiAJCS5tYW51ZmFjdHVyZXIgPSAiREVDIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZmYi5jCmluZGV4IDJhMGU4MjEuLjE1ODU0YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mZmIuYwpAQCAtOTEwLDcgKzkxMCw4IEBACiAJYWxsLT5wYXIuZGFjID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzFdLCAwLAogCQkJCSAgc2l6ZW9mKHN0cnVjdCBmZmJfZGFjKSwgImZmYiBkYWMiKTsKIAlpZiAoIWFsbC0+cGFyLmRhYykgewotCQlvZl9pb3VubWFwKGFsbC0+cGFyLmZiYywgc2l6ZW9mKHN0cnVjdCBmZmJfZmJjKSk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVsyXSwKKwkJCSAgIGFsbC0+cGFyLmZiYywgc2l6ZW9mKHN0cnVjdCBmZmJfZmJjKSk7CiAJCWtmcmVlKGFsbCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTk2OCw2ICs5NjksMTAgQEAKIAogCWlmIChmYl9hbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCwgMjU2LCAwKSkgewogCQlwcmludGsoS0VSTl9FUlIgImZmYjogQ291bGQgbm90IGFsbG9jYXRlIGNvbG9yIG1hcC5cbiIpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMl0sCisJCQkgICBhbGwtPnBhci5mYmMsIHNpemVvZihzdHJ1Y3QgZmZiX2ZiYykpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMV0sCisJCQkgICBhbGwtPnBhci5kYWMsIHNpemVvZihzdHJ1Y3QgZmZiX2RhYykpOwogCQlrZnJlZShhbGwpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC05NzgsNiArOTgzLDEwIEBACiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmZmI6IENvdWxkIG5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlci5cbiIpOwogCQlmYl9kZWFsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzJdLAorCQkJICAgYWxsLT5wYXIuZmJjLCBzaXplb2Yoc3RydWN0IGZmYl9mYmMpKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzFdLAorCQkJICAgYWxsLT5wYXIuZGFjLCBzaXplb2Yoc3RydWN0IGZmYl9kYWMpKTsKIAkJa2ZyZWUoYWxsKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC05OTksMTkgKzEwMDgsMTkgQEAKIAlyZXR1cm4gZmZiX2luaXRfb25lKG9wKTsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgZmZiX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBmZmJfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQogewotCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisJc3RydWN0IGFsbF9pbmZvICphbGwgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKIAlmYl9kZWFsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwKTsKIAotCW9mX2lvdW5tYXAoYWxsLT5wYXIuZmJjLCBzaXplb2Yoc3RydWN0IGZmYl9mYmMpKTsKLQlvZl9pb3VubWFwKGFsbC0+cGFyLmRhYywgc2l6ZW9mKHN0cnVjdCBmZmJfZGFjKSk7CisJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzJdLCBhbGwtPnBhci5mYmMsIHNpemVvZihzdHJ1Y3QgZmZiX2ZiYykpOworCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVsxXSwgYWxsLT5wYXIuZGFjLCBzaXplb2Yoc3RydWN0IGZmYl9kYWMpKTsKIAogCWtmcmVlKGFsbCk7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZtMmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZtMmZiLmMKaW5kZXggOTk4Mzc0Yy4uNzBmZjU1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mbTJmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZm0yZmIuYwpAQCAtMjgzLDYgKzI4Myw3IEBACiAKIAlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKSB7CiAJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCQl6b3Jyb19yZWxlYXNlX2RldmljZSh6KTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL0tjb25maWcKaW5kZXggNGUxNzNlZi4uYTgxNGI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nZW9kZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvS2NvbmZpZwpAQCAtMjMsNiArMjMsMjYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEZCX0dFT0RFX0dYX1NFVF9GQlNJWkUKKwlib29sICJNYW51YWxseSBzcGVjaWZ5IHRoZSBHZW9kZSBHWCBmcmFtZWJ1ZmZlciBzaXplIgorCWRlcGVuZHMgb24gRkJfR0VPREVfR1gKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugd2FudCB0byBtYW51YWxseSBzcGVjaWZ5IHRoZSBzaXplIG9mIHlvdXIgR1ggZnJhbWVidWZmZXIsCisJICBzYXkgWSBoZXJlLCBvdGhlcndpc2Ugc2F5IE4gdG8gZHluYW1pY2FsbHkgcHJvYmUgaXQuCisKKwkgIFNheSBOIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKK2NvbmZpZyBGQl9HRU9ERV9HWF9GQlNJWkUKKwloZXggIlNpemUgb2YgdGhlIEdYIGZyYW1lYnVmZmVyLCBpbiBieXRlcyIKKwlkZXBlbmRzIG9uIEZCX0dFT0RFX0dYX1NFVF9GQlNJWkUKKwlkZWZhdWx0ICIweDE2MDAwMDAiCisJLS0taGVscC0tLQorCSAgU3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgR1ggZnJhbWVidWZmZXIuICBOb3JtYWxseSwgeW91IHdpbGwKKwkgIHdhbnQgdGhpcyB0byBiZSBNQiBhbGlnbmVkLiAgQ29tbW9uIHZhbHVlcyBhcmUgMHg4MDAwMCAoOE1CKQorCSAgYW5kIDB4MTYwMDAwMCAoMTZNQikuICBEb24ndCBjaGFuZ2UgdGhpcyB1bmxlc3MgeW91IGtub3cgd2hhdAorCSAgeW91IGFyZSBkb2luZworCiBjb25maWcgRkJfR0VPREVfR1gxCiAJdHJpc3RhdGUgIkFNRCBHZW9kZSBHWDEgZnJhbWVidWZmZXIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEZCICYmIEZCX0dFT0RFICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS9kaXNwbGF5X2d4LmMgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2Rpc3BsYXlfZ3guYwppbmRleCA4MjVjMzQwLi4wZjE2ZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2Rpc3BsYXlfZ3guYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2Rpc3BsYXlfZ3guYwpAQCAtMjEsMTEgKzIxLDI3IEBACiAjaW5jbHVkZSAiZ2VvZGVmYi5oIgogI2luY2x1ZGUgImRpc3BsYXlfZ3guaCIKIAotaW50IGd4X2ZyYW1lX2J1ZmZlcl9zaXplKHZvaWQpCisjaWZkZWYgQ09ORklHX0ZCX0dFT0RFX0dYX1NFVF9GQlNJWkUKK3Vuc2lnbmVkIGludCBneF9mcmFtZV9idWZmZXJfc2l6ZSh2b2lkKQogewotCS8qIEFzc3VtaW5nIDE2IE1pQi4gKi8KLQlyZXR1cm4gMTYqMTAyNCoxMDI0OworCXJldHVybiBDT05GSUdfRkJfR0VPREVfR1hfRkJTSVpFOwogfQorI2Vsc2UKK3Vuc2lnbmVkIGludCBneF9mcmFtZV9idWZmZXJfc2l6ZSh2b2lkKQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwkvKiBGQiBzaXplIGlzIHJlcG9ydGVkIGJ5IGEgdmlydHVhbCByZWdpc3RlciAqLworCS8qIFZpcnR1YWwgcmVnaXN0ZXIgY2xhc3MgPSAweDAyICovCisJLyogVkdfTUVNX1NJWkUoNTEyS2IgdW5pdHMpID0gMHgwMCAqLworCisJb3V0dygweEZDNTMsIDB4QUMxQyk7CisJb3V0dygweDAyMDAsIDB4QUMxQyk7CisKKwl2YWwgPSAodW5zaWduZWQgaW50KShpbncoMHhBQzFFKSkgJiAweEZGbDsKKwlyZXR1cm4gKHZhbCA8PCAxOSk7Cit9CisjZW5kaWYKIAogaW50IGd4X2xpbmVfZGVsdGEoaW50IHhyZXMsIGludCBicHApCiB7CkBAIC04MSw2ICs5Nyw3IEBACiAJd3JpdGVsKCgoaW5mby0+dmFyLnhyZXMgKiBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwvOCkgPj4gMykgKyAyLAogCSAgICAgICBwYXItPmRjX3JlZ3MgKyBEQ19MSU5FX1NJWkUpOwogCisKIAkvKiBFbmFibGUgZ3JhcGhpY3MgYW5kIHZpZGVvIGRhdGEgYW5kIHVubWFzayBhZGRyZXNzIGxpbmVzLiAqLwogCWRjZmcgfD0gRENfRENGR19HREVOIHwgRENfRENGR19WREVOIHwgRENfRENGR19BMjBNIHwgRENfRENGR19BMThNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2Rpc3BsYXlfZ3guaCBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZGlzcGxheV9neC5oCmluZGV4IDg2YzYyMzMuLjBhZjMzZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZGlzcGxheV9neC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZGlzcGxheV9neC5oCkBAIC0xMSwxMSArMTEsMTUgQEAKICNpZm5kZWYgX19ESVNQTEFZX0dYX0hfXwogI2RlZmluZSBfX0RJU1BMQVlfR1hfSF9fCiAKLWludCBneF9mcmFtZV9idWZmZXJfc2l6ZSh2b2lkKTsKK3Vuc2lnbmVkIGludCBneF9mcmFtZV9idWZmZXJfc2l6ZSh2b2lkKTsKIGludCBneF9saW5lX2RlbHRhKGludCB4cmVzLCBpbnQgYnBwKTsKIAogZXh0ZXJuIHN0cnVjdCBnZW9kZV9kY19vcHMgZ3hfZGNfb3BzOwogCisvKiBNU1IgdGhhdCB0ZWxscyB1cyBpZiBhIFRGVCBvciBDUlQgaXMgYXR0YWNoZWQgKi8KKyNkZWZpbmUgR0xEX01TUl9DT05GSUcgICAweEMwMDAyMDAxCisjZGVmaW5lIEdMRF9NU1JfQ09ORklHX0RNX0ZQIDB4NDAKKwogLyogRGlzcGxheSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLwogCiAjZGVmaW5lIERDX1VOTE9DSyAweDAwCkBAIC05Myw0ICs5Nyw1IEBACiAjZGVmaW5lIERDX1BBTF9BRERSRVNTIDB4NzAKICNkZWZpbmUgRENfUEFMX0RBVEEgICAgMHg3NAogCisjZGVmaW5lIERDX0dMSVUwX01FTV9PRkZTRVQgMHg4NAogI2VuZGlmIC8qICFfX0RJU1BMQVlfR1gxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS9neGZiX2NvcmUuYyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZ3hmYl9jb3JlLmMKaW5kZXggYTQ1NGRjYi4uY2Y4NDFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nZW9kZS9neGZiX2NvcmUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2d4ZmJfY29yZS5jCkBAIC0zNSwxMCArMzUsMTAgQEAKICNpbmNsdWRlICJkaXNwbGF5X2d4LmgiCiAjaW5jbHVkZSAidmlkZW9fZ3guaCIKIAotc3RhdGljIGNoYXIgbW9kZV9vcHRpb25bMzJdID0gIjY0MHg0ODAtMTZANjAiOworc3RhdGljIGNoYXIgKm1vZGVfb3B0aW9uOwogCiAvKiBNb2RlcyByZWxldmFudCB0byB0aGUgR1ggKHRha2VuIGZyb20gbW9kZWRiLmMpICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBfX2luaXRkYXRhIGd4X21vZGVkYltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgZ3hfbW9kZWRiW10gX19pbml0ZGF0YSA9IHsKIAkvKiA2NDB4NDgwLTYwIFZFU0EgKi8KIAl7IE5VTEwsIDYwLCA2NDAsIDQ4MCwgMzk2ODIsICA0OCwgMTYsIDMzLCAxMCwgOTYsIDIsCiAJICAwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELCBGQl9NT0RFX0lTX1ZFU0EgfSwKQEAgLTI0MCw2ICsyNDAsMTIgQEAKIAlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCS8qIFNldCB0aGUgMTZNQiBhbGlnbmVkIGJhc2UgYWRkcmVzcyBvZiB0aGUgZ3JhcGhpY3MgbWVtb3J5IHJlZ2lvbgorCSAqIGluIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXIgKi8KKworCXdyaXRlbChpbmZvLT5maXguc21lbV9zdGFydCAmIDB4RkYwMDAwMDAsCisJCQlwYXItPmRjX3JlZ3MgKyBEQ19HTElVMF9NRU1fT0ZGU0VUKTsKKwogCWRldl9pbmZvKCZkZXYtPmRldiwgIiVkIEtpYnl0ZSBvZiB2aWRlbyBtZW1vcnkgYXQgMHglbHhcbiIsCiAJCSBpbmZvLT5maXguc21lbV9sZW4gLyAxMDI0LCBpbmZvLT5maXguc21lbV9zdGFydCk7CiAKQEAgLTMwMiw2ICszMDgsNyBAQAogCXN0cnVjdCBnZW9kZWZiX3BhciAqcGFyOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAlpbmZvID0gZ3hmYl9pbml0X2ZiaW5mbygmcGRldi0+ZGV2KTsKIAlpZiAoIWluZm8pCkBAIC0zMTcsNiArMzI0LDE1IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCS8qIEZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhIFRGVCBvciBDUlQgcGFydCAqLworCisJcmRtc3JsKEdMRF9NU1JfQ09ORklHLCB2YWwpOworCisJaWYgKCh2YWwgJiBHTERfTVNSX0NPTkZJR19ETV9GUCkgPT0gR0xEX01TUl9DT05GSUdfRE1fRlApCisJCXBhci0+ZW5hYmxlX2NydCA9IDA7CisJZWxzZQorCQlwYXItPmVuYWJsZV9jcnQgPSAxOworCiAJcmV0ID0gZmJfZmluZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sIG1vZGVfb3B0aW9uLAogCQkJICAgZ3hfbW9kZWRiLCBBUlJBWV9TSVpFKGd4X21vZGVkYiksIE5VTEwsIDE2KTsKIAlpZiAocmV0ID09IDAgfHwgcmV0ID09IDQpIHsKQEAgLTMyNSw3ICszNDEsOCBAQAogCQlnb3RvIGVycjsKIAl9CiAKLSAgICAgICAgLyogQ2xlYXIgdGhlIGZyYW1lIGJ1ZmZlciBvZiBnYXJiYWdlLiAqLworCisJLyogQ2xlYXIgdGhlIGZyYW1lIGJ1ZmZlciBvZiBnYXJiYWdlLiAqLwogICAgICAgICBtZW1zZXRfaW8oaW5mby0+c2NyZWVuX2Jhc2UsIDAsIGluZm8tPmZpeC5zbWVtX2xlbik7CiAKIAlneGZiX2NoZWNrX3ZhcigmaW5mby0+dmFyLCBpbmZvKTsKQEAgLTM5NSwxMSArNDEyLDM1IEBACiAJLnJlbW92ZQkJPSBneGZiX3JlbW92ZSwKIH07CiAKKyNpZm5kZWYgTU9EVUxFCitzdGF0aWMgaW50IF9faW5pdCBneGZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCit7CisKKwljaGFyICpvcHQ7CisKKwlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgob3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CisJCWlmICghKm9wdCkKKwkJCWNvbnRpbnVlOworCisJCW1vZGVfb3B0aW9uID0gb3B0OworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IGd4ZmJfaW5pdCh2b2lkKQogewogI2lmbmRlZiBNT0RVTEUKLQlpZiAoZmJfZ2V0X29wdGlvbnMoImd4ZmIiLCBOVUxMKSkKKwljaGFyICpvcHRpb24gPSBOVUxMOworCisJaWYgKGZiX2dldF9vcHRpb25zKCJneGZiIiwgJm9wdGlvbikpCiAJCXJldHVybiAtRU5PREVWOworCisJZ3hmYl9zZXR1cChvcHRpb24pOwogI2VuZGlmCiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmd4ZmJfZHJpdmVyKTsKIH0KQEAgLTQxMiw4ICs0NTMsOCBAQAogbW9kdWxlX2luaXQoZ3hmYl9pbml0KTsKIG1vZHVsZV9leGl0KGd4ZmJfY2xlYW51cCk7CiAKLW1vZHVsZV9wYXJhbV9zdHJpbmcobW9kZSwgbW9kZV9vcHRpb24sIHNpemVvZihtb2RlX29wdGlvbiksIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhtb2RlLCAidmlkZW8gbW9kZSAoPHg+eDx5PlstPGJwcD5dW0A8cmVmcj5dKSIpOworbW9kdWxlX3BhcmFtKG1vZGVfb3B0aW9uLCBjaGFycCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1vZGVfb3B0aW9uLCAidmlkZW8gbW9kZSAoPHg+eDx5PlstPGJwcD5dW0A8cmVmcj5dKSIpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkZyYW1lYnVmZmVyIGRyaXZlciBmb3IgdGhlIEFNRCBHZW9kZSBHWCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS92aWRlb19neC5jIGIvZHJpdmVycy92aWRlby9nZW9kZS92aWRlb19neC5jCmluZGV4IDJiMmE3ODguLjdmM2YxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvdmlkZW9fZ3guYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL3ZpZGVvX2d4LmMKQEAgLTE3NSwxMyArMTc1LDg4IEBACiAJfSB3aGlsZSAodGltZW91dC0tICYmICEoZG90cGxsICYgTVNSX0dMQ1BfRE9UUExMX0xPQ0spKTsKIH0KIAorc3RhdGljIHZvaWQKK2d4X2NvbmZpZ3VyZV90ZnQoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGdlb2RlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBmcDsKKworCS8qIFNldCB1cCB0aGUgREYgcGFkIHNlbGVjdCBNU1IgKi8KKworCXJkbXNybChHWF9WUF9NU1JfUEFEX1NFTEVDVCwgdmFsKTsKKwl2YWwgJj0gfkdYX1ZQX1BBRF9TRUxFQ1RfTUFTSzsKKwl2YWwgfD0gR1hfVlBfUEFEX1NFTEVDVF9URlQ7CisJd3Jtc3JsKEdYX1ZQX01TUl9QQURfU0VMRUNULCB2YWwpOworCisJLyogVHVybiBvZmYgdGhlIHBhbmVsICovCisKKwlmcCA9IHJlYWRsKHBhci0+dmlkX3JlZ3MgKyBHWF9GUF9QTSk7CisJZnAgJj0gfkdYX0ZQX1BNX1A7CisJd3JpdGVsKGZwLCBwYXItPnZpZF9yZWdzICsgR1hfRlBfUE0pOworCisJLyogU2V0IHRpbWluZyAxICovCisKKwlmcCA9IHJlYWRsKHBhci0+dmlkX3JlZ3MgKyBHWF9GUF9QVDEpOworCWZwICY9IEdYX0ZQX1BUMV9WU0laRV9NQVNLOworCWZwIHw9IGluZm8tPnZhci55cmVzIDw8IEdYX0ZQX1BUMV9WU0laRV9TSElGVDsKKwl3cml0ZWwoZnAsIHBhci0+dmlkX3JlZ3MgKyBHWF9GUF9QVDEpOworCisJLyogVGltaW5nIDIgKi8KKwkvKiBTZXQgYml0cyB0aGF0IGFyZSBhbHdheXMgb24gZm9yIFRGVCAqLworCisJZnAgPSAweDBGMTAwMDAwOworCisJLyogQWRkIHN5bmMgcG9sYXJpdHkgKi8KKworCWlmICghKGluZm8tPnZhci5zeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUKSkKKwkJZnAgfD0gR1hfRlBfUFQyX1ZTUDsKKworCWlmICghKGluZm8tPnZhci5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpKQorCQlmcCB8PSBHWF9GUF9QVDJfSFNQOworCisJd3JpdGVsKGZwLCBwYXItPnZpZF9yZWdzICsgR1hfRlBfUFQyKTsKKworCS8qICBTZXQgdGhlIGRpdGhlciBjb250cm9sICovCisJd3JpdGVsKDB4NzAsIHBhci0+dmlkX3JlZ3MgKyBHWF9GUF9ERkMpOworCisJLyogRW5hYmxlIHRoZSBGUCBkYXRhIGFuZCBwb3dlciAoaW4gY2FzZSB0aGUgQklPUyBkaWRuJ3QpICovCisKKwlmcCA9IHJlYWRsKHBhci0+dmlkX3JlZ3MgKyBHWF9EQ0ZHKTsKKwlmcCB8PSBHWF9EQ0ZHX0ZQX1BXUl9FTiB8IEdYX0RDRkdfRlBfREFUQV9FTjsKKwl3cml0ZWwoZnAsIHBhci0+dmlkX3JlZ3MgKyBHWF9EQ0ZHKTsKKworCS8qIFVuYmxhbmsgdGhlIHBhbmVsICovCisKKwlmcCA9IHJlYWRsKHBhci0+dmlkX3JlZ3MgKyBHWF9GUF9QTSk7CisJZnAgfD0gR1hfRlBfUE1fUDsKKwl3cml0ZWwoZnAsIHBhci0+dmlkX3JlZ3MgKyBHWF9GUF9QTSk7Cit9CisKIHN0YXRpYyB2b2lkIGd4X2NvbmZpZ3VyZV9kaXNwbGF5KHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBnZW9kZWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCXUzMiBkY2ZnLCBmcF9wbTsKKwl1MzIgZGNmZywgbWlzYzsKIAorCS8qIFNldCB1cCB0aGUgTUlTQyByZWdpc3RlciAqLworCisJbWlzYyA9IHJlYWRsKHBhci0+dmlkX3JlZ3MgKyBHWF9NSVNDKTsKKworCS8qIFBvd2VyIHVwIHRoZSBEQUMgKi8KKwltaXNjICY9IH4oR1hfTUlTQ19BX1BXUkROIHwgR1hfTUlTQ19EQUNfUFdSRE4pOworCisJLyogRGlzYWJsZSBnYW1tYSBjb3JyZWN0aW9uICovCisJbWlzYyB8PSBHWF9NSVNDX0dBTV9FTjsKKworCXdyaXRlbChtaXNjLCBwYXItPnZpZF9yZWdzICsgR1hfTUlTQyk7CisKKwkvKiBXcml0ZSB0aGUgZGlzcGxheSBjb25maWd1cmF0aW9uICovCiAJZGNmZyA9IHJlYWRsKHBhci0+dmlkX3JlZ3MgKyBHWF9EQ0ZHKTsKIAorCS8qIERpc2FibGUgaHN5bmMgYW5kIHZzeW5jICovCisJZGNmZyAmPSB+KEdYX0RDRkdfVlNZTkNfRU4gfCBHWF9EQ0ZHX0hTWU5DX0VOKTsKKwl3cml0ZWwoZGNmZywgcGFyLT52aWRfcmVncyArIEdYX0RDRkcpOworCiAJLyogQ2xlYXIgYml0cyBmcm9tIGV4aXN0aW5nIG1vZGUuICovCiAJZGNmZyAmPSB+KEdYX0RDRkdfQ1JUX1NZTkNfU0tXX01BU0sKIAkJICB8IEdYX0RDRkdfQ1JUX0hTWU5DX1BPTCAgIHwgR1hfRENGR19DUlRfVlNZTkNfUE9MCkBAIC0xOTksMTIgKzI3NCwxOSBAQAogCWlmIChpbmZvLT52YXIuc3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkKIAkJZGNmZyB8PSBHWF9EQ0ZHX0NSVF9WU1lOQ19QT0w7CiAKKwkvKiBFbmFibGUgdGhlIGRpc3BsYXkgbG9naWMgKi8KKwkvKiBTZXQgdXAgdGhlIERBQ1MgdG8gYmxhbmsgbm9ybWFsbHkgKi8KKworCWRjZmcgfD0gR1hfRENGR19DUlRfRU4gfCBHWF9EQ0ZHX0RBQ19CTF9FTjsKKworCS8qIEVuYWJsZSB0aGUgZXh0ZXJuYWwgREFDIFZSRUY/ICovCisKIAl3cml0ZWwoZGNmZywgcGFyLT52aWRfcmVncyArIEdYX0RDRkcpOwogCi0JLyogUG93ZXIgb24gZmxhdCBwYW5lbC4gKi8KLQlmcF9wbSA9IHJlYWRsKHBhci0+dmlkX3JlZ3MgKyBHWF9GUF9QTSk7Ci0JZnBfcG0gfD0gR1hfRlBfUE1fUDsKLQl3cml0ZWwoZnBfcG0sIHBhci0+dmlkX3JlZ3MgKyBHWF9GUF9QTSk7CisJLyogU2V0IHVwIHRoZSBmbGF0IHBhbmVsIChpZiBpdCBpcyBlbmFibGVkKSAqLworCisJaWYgKHBhci0+ZW5hYmxlX2NydCA9PSAwKQorCQlneF9jb25maWd1cmVfdGZ0KGluZm8pOwogfQogCiBzdGF0aWMgaW50IGd4X2JsYW5rX2Rpc3BsYXkoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBibGFua19tb2RlKQpAQCAtMjQ1LDEyICszMjcsMTUgQEAKIAl3cml0ZWwoZGNmZywgcGFyLT52aWRfcmVncyArIEdYX0RDRkcpOwogCiAJLyogUG93ZXIgb24vb2ZmIGZsYXQgcGFuZWwuICovCi0JZnBfcG0gPSByZWFkbChwYXItPnZpZF9yZWdzICsgR1hfRlBfUE0pOwotCWlmIChibGFua19tb2RlID09IEZCX0JMQU5LX1BPV0VSRE9XTikKLQkJZnBfcG0gJj0gfkdYX0ZQX1BNX1A7Ci0JZWxzZQotCQlmcF9wbSB8PSBHWF9GUF9QTV9QOwotCXdyaXRlbChmcF9wbSwgcGFyLT52aWRfcmVncyArIEdYX0ZQX1BNKTsKKworCWlmIChwYXItPmVuYWJsZV9jcnQgPT0gMCkgeworCQlmcF9wbSA9IHJlYWRsKHBhci0+dmlkX3JlZ3MgKyBHWF9GUF9QTSk7CisJCWlmIChibGFua19tb2RlID09IEZCX0JMQU5LX1BPV0VSRE9XTikKKwkJCWZwX3BtICY9IH5HWF9GUF9QTV9QOworCQllbHNlCisJCQlmcF9wbSB8PSBHWF9GUF9QTV9QOworCQl3cml0ZWwoZnBfcG0sIHBhci0+dmlkX3JlZ3MgKyBHWF9GUF9QTSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL3ZpZGVvX2d4LmggYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL3ZpZGVvX2d4LmgKaW5kZXggMmQ5MjExZi4uY2UyOGQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nZW9kZS92aWRlb19neC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvdmlkZW9fZ3guaApAQCAtMTMsNiArMTMsMTEgQEAKIAogZXh0ZXJuIHN0cnVjdCBnZW9kZV92aWRfb3BzIGd4X3ZpZF9vcHM7CiAKKy8qIEdYIEZsYXRwYW5lbCBjb250cm9sIE1TUiAqLworI2RlZmluZSBHWF9WUF9NU1JfUEFEX1NFTEVDVCAgICAgICAgICAgMHhDMDAwMjAxMQorI2RlZmluZSBHWF9WUF9QQURfU0VMRUNUX01BU0sgICAgICAgICAgMHgzRkZGRkZGRgorI2RlZmluZSBHWF9WUF9QQURfU0VMRUNUX1RGVCAgICAgICAgICAgMHgxRkZGRkZGRgorCiAvKiBHZW9kZSBHWCB2aWRlbyBwcm9jZXNzb3IgcmVnaXN0ZXJzICovCiAKICNkZWZpbmUgR1hfRENGRwkJMHgwMDA4CkBAIC0yMCw2ICsyNSw4IEBACiAjICBkZWZpbmUgR1hfRENGR19IU1lOQ19FTgkJMHgwMDAwMDAwMgogIyAgZGVmaW5lIEdYX0RDRkdfVlNZTkNfRU4JCTB4MDAwMDAwMDQKICMgIGRlZmluZSBHWF9EQ0ZHX0RBQ19CTF9FTgkJMHgwMDAwMDAwOAorIyAgZGVmaW5lIEdYX0RDRkdfRlBfUFdSX0VOCQkweDAwMDAwMDQwCisjICBkZWZpbmUgR1hfRENGR19GUF9EQVRBX0VOCQkweDAwMDAwMDgwCiAjICBkZWZpbmUgR1hfRENGR19DUlRfSFNZTkNfUE9MCQkweDAwMDAwMTAwCiAjICBkZWZpbmUgR1hfRENGR19DUlRfVlNZTkNfUE9MCQkweDAwMDAwMjAwCiAjICBkZWZpbmUgR1hfRENGR19DUlRfU1lOQ19TS1dfTUFTSwkweDAwMDFDMDAwCkBAIC0yOCwxMCArMzUsMjggQEAKICMgIGRlZmluZSBHWF9EQ0ZHX0dWX0dBTQkJMHgwMDIwMDAwMAogIyAgZGVmaW5lIEdYX0RDRkdfREFDX1ZSRUYJCTB4MDQwMDAwMDAKIAorLyogR2VvZGUgR1ggTUlTQyB2aWRlbyBjb25maWd1cmF0aW9uICovCisKKyNkZWZpbmUgR1hfTUlTQyAweDUwCisjZGVmaW5lIEdYX01JU0NfR0FNX0VOICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdYX01JU0NfREFDX1BXUkROICAweDAwMDAwNDAwCisjZGVmaW5lIEdYX01JU0NfQV9QV1JETiAgICAweDAwMDAwODAwCisKIC8qIEdlb2RlIEdYIGZsYXQgcGFuZWwgZGlzcGxheSBjb250cm9sIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIEdYX0ZQX1BUMSAweDA0MDAKKyNkZWZpbmUgR1hfRlBfUFQxX1ZTSVpFX01BU0sgMHg3RkYwMDAwCisjZGVmaW5lIEdYX0ZQX1BUMV9WU0laRV9TSElGVCAxNgorCisjZGVmaW5lIEdYX0ZQX1BUMiAweDQwOAorI2RlZmluZSBHWF9GUF9QVDJfVlNQICgxIDw8IDIzKQorI2RlZmluZSBHWF9GUF9QVDJfSFNQICgxIDw8IDIyKQorCiAjZGVmaW5lIEdYX0ZQX1BNIDB4NDEwCiAjICBkZWZpbmUgR1hfRlBfUE1fUCAweDAxMDAwMDAwCiAKKyNkZWZpbmUgR1hfRlBfREZDIDB4NDE4CisKIC8qIEdlb2RlIEdYIGNsb2NrIGNvbnRyb2wgTVNScyAqLwogCiAjZGVmaW5lIE1TUl9HTENQX1NZU19SU1RQTEwJMHg0YzAwMDAxNApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9neHQ0NTAwLmMgYi9kcml2ZXJzL3ZpZGVvL2d4dDQ1MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E2YmNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9neHQ0NTAwLmMKQEAgLTAsMCArMSw3NzQgQEAKKy8qCisgKiBGcmFtZSBidWZmZXIgZGV2aWNlIGZvciBJQk0gR1hUNDUwMFAgYW5kIEdYVDYwMDBQIGRpc3BsYXkgYWRhcHRvcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUGF1bCBNYWNrZXJyYXMsIElCTSBDb3JwLiA8cGF1bHVzQHNhbWJhLm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fR1hUNDUwMFAJMHgyMWMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fR1hUNjAwMFAJMHgxNzAKKworLyogR1hUNDUwMFAgcmVnaXN0ZXJzICovCisKKy8qIFJlZ2lzdGVycyBpbiBQQ0kgY29uZmlnIHNwYWNlICovCisjZGVmaW5lIENGR19FTkRJQU4wCQkweDQwCisKKy8qIE1pc2MgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNUQVRVUwkJCTB4MTAwMAorI2RlZmluZSBDVFJMX1JFRzAJCTB4MTAwNAorI2RlZmluZSAgIENSMF9IQUxUX0RNQQkJCTB4NAorI2RlZmluZSAgIENSMF9SQVNURVJfUkVTRVQJCTB4OAorI2RlZmluZSAgIENSMF9HRU9NX1JFU0VUCQkweDEwCisjZGVmaW5lICAgQ1IwX01FTV9DVFJMRVJfUkVTRVQJCTB4MjAKKworLyogRnJhbWVidWZmZXIgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRkJfQUJfQ1RSTAkJMHgxMTAwCisjZGVmaW5lIEZCX0NEX0NUUkwJCTB4MTEwNAorI2RlZmluZSBGQl9XSURfQ1RSTAkJMHgxMTA4CisjZGVmaW5lIEZCX1pfQ1RSTAkJMHgxMTBjCisjZGVmaW5lIEZCX1ZHQV9DVFJMCQkweDExMTAKKyNkZWZpbmUgUkVGUkVTSF9BQl9DVFJMCQkweDExMTQKKyNkZWZpbmUgUkVGUkVTSF9DRF9DVFJMCQkweDExMTgKKyNkZWZpbmUgRkJfT1ZMX0NUUkwJCTB4MTExYworI2RlZmluZSAgIEZCX0NUUkxfVFlQRQkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgICBGQl9DVFJMX1dJRFRIX01BU0sJCTB4MDA3ZjAwMDAKKyNkZWZpbmUgICBGQl9DVFJMX1dJRFRIX1NISUZUCQkxNgorI2RlZmluZSAgIEZCX0NUUkxfU1RBUlRfU0VHX01BU0sJMHgwMDAwM2ZmZgorCisjZGVmaW5lIFJFRlJFU0hfU1RBUlQJCTB4MTA5OAorI2RlZmluZSBSRUZSRVNIX1NJWkUJCTB4MTA5YworCisvKiAiRGlyZWN0IiBmcmFtZWJ1ZmZlciBhY2Nlc3MgcmVnaXN0ZXJzICovCisjZGVmaW5lIERGQV9GQl9BCQkweDExZTAKKyNkZWZpbmUgREZBX0ZCX0IJCTB4MTFlNAorI2RlZmluZSBERkFfRkJfQwkJMHgxMWU4CisjZGVmaW5lIERGQV9GQl9ECQkweDExZWMKKyNkZWZpbmUgICBERkFfRkJfRU5BQkxFCQkJMHg4MDAwMDAwMAorI2RlZmluZSAgIERGQV9GQl9CQVNFX01BU0sJCTB4MDNmMDAwMDAKKyNkZWZpbmUgICBERkFfRkJfU1RSSURFXzFrCQkweDAwMDAwMDAwCisjZGVmaW5lICAgREZBX0ZCX1NUUklERV8yawkJMHgwMDAwMDAxMAorI2RlZmluZSAgIERGQV9GQl9TVFJJREVfNGsJCTB4MDAwMDAwMjAKKyNkZWZpbmUgICBERkFfUElYXzhCSVQJCQkweDAwMDAwMDAwCisjZGVmaW5lICAgREZBX1BJWF8xNkJJVF81NjUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgICBERkFfUElYXzE2QklUXzE1NTUJCTB4MDAwMDAwMDIKKyNkZWZpbmUgICBERkFfUElYXzI0QklUCQkJMHgwMDAwMDAwNAorI2RlZmluZSAgIERGQV9QSVhfMzJCSVQJCQkweDAwMDAwMDA1CisKKy8qIG1hcHMgREZBX1BJWF8qIHRvIHBpeGVsIHNpemUgaW4gYnl0ZXMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBpeHNpemVbXSA9IHsKKwkxLCAyLCAyLCAyLCA0LCA0Cit9OworCisvKiBEaXNwbGF5IHRpbWluZyBnZW5lcmF0b3IgcmVnaXN0ZXJzICovCisjZGVmaW5lIERUR19DT05UUk9MCQkweDE5MDAKKyNkZWZpbmUgICBEVEdfQ1RMX1NDUkVFTl9SRUZSRVNICTIKKyNkZWZpbmUgICBEVEdfQ1RMX0VOQUJMRQkJMQorI2RlZmluZSBEVEdfSE9SSVpfRVhURU5UCTB4MTkwNAorI2RlZmluZSBEVEdfSE9SSVpfRElTUExBWQkweDE5MDgKKyNkZWZpbmUgRFRHX0hTWU5DX1NUQVJUCQkweDE5MGMKKyNkZWZpbmUgRFRHX0hTWU5DX0VORAkJMHgxOTEwCisjZGVmaW5lIERUR19IU1lOQ19FTkRfQ09NUAkweDE5MTQKKyNkZWZpbmUgRFRHX1ZFUlRfRVhURU5UCQkweDE5MTgKKyNkZWZpbmUgRFRHX1ZFUlRfRElTUExBWQkweDE5MWMKKyNkZWZpbmUgRFRHX1ZTWU5DX1NUQVJUCQkweDE5MjAKKyNkZWZpbmUgRFRHX1ZTWU5DX0VORAkJMHgxOTI0CisjZGVmaW5lIERUR19WRVJUX1NIT1JUCQkweDE5MjgKKworLyogUExML1JBTURBQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRElTUF9DVEwJCTB4NDAyYworI2RlZmluZSAgIERJU1BfQ1RMX09GRgkJCTIKKyNkZWZpbmUgU1lOQ19DVEwJCTB4NDAzNAorI2RlZmluZSAgIFNZTkNfQ1RMX1NZTkNfT05fUkdCCQkxCisjZGVmaW5lICAgU1lOQ19DVExfU1lOQ19PRkYJCTIKKyNkZWZpbmUgICBTWU5DX0NUTF9IU1lOQ19JTlYJCTgKKyNkZWZpbmUgICBTWU5DX0NUTF9WU1lOQ19JTlYJCTB4MTAKKyNkZWZpbmUgICBTWU5DX0NUTF9IU1lOQ19PRkYJCTB4MjAKKyNkZWZpbmUgICBTWU5DX0NUTF9WU1lOQ19PRkYJCTB4NDAKKworI2RlZmluZSBQTExfTQkJCTB4NDA0MAorI2RlZmluZSBQTExfTgkJCTB4NDA0NAorI2RlZmluZSBQTExfUE9TVERJVgkJMHg0MDQ4CisjZGVmaW5lIFBMTF9DCQkJMHg0MDRjCisKKy8qIEhhcmR3YXJlIGN1cnNvciAqLworI2RlZmluZSBDVVJTT1JfWAkJMHg0MDc4CisjZGVmaW5lIENVUlNPUl9ZCQkweDQwN2MKKyNkZWZpbmUgQ1VSU09SX0hPVFNQT1QJCTB4NDA4MAorI2RlZmluZSBDVVJTT1JfTU9ERQkJMHg0MDg0CisjZGVmaW5lICAgQ1VSU09SX01PREVfT0ZGCQkwCisjZGVmaW5lICAgQ1VSU09SX01PREVfNEJQUAkJMQorI2RlZmluZSBDVVJTT1JfUElYTUFQCQkweDUwMDAKKyNkZWZpbmUgQ1VSU09SX0NNQVAJCTB4NzQwMAorCisvKiBXaW5kb3cgYXR0cmlidXRlIHRhYmxlICovCisjZGVmaW5lIFdBVF9GTVQJCQkweDQxMDAKKyNkZWZpbmUgICBXQVRfRk1UXzI0QklUCQkJMAorI2RlZmluZSAgIFdBVF9GTVRfMTZCSVRfNTY1CQkxCisjZGVmaW5lICAgV0FUX0ZNVF8xNkJJVF8xNTU1CQkyCisjZGVmaW5lICAgV0FUX0ZNVF8zMkJJVAkJCTMJLyogMCB2cy4gMyBpcyBhIGd1ZXNzICovCisjZGVmaW5lICAgV0FUX0ZNVF84QklUXzMzMgkJOQorI2RlZmluZSAgIFdBVF9GTVRfOEJJVAkJCTB4YQorI2RlZmluZSAgIFdBVF9GTVRfTk9fQ01BUAkJNAkvKiBPUmQgaW4gdG8gb3RoZXIgdmFsdWVzICovCisjZGVmaW5lIFdBVF9DTUFQX09GRlNFVAkJMHg0MTA0CQkvKiA0LWJpdCB2YWx1ZSBnZXRzIDw8IDYgKi8KKyNkZWZpbmUgV0FUX0NUUkwJCTB4NDEwOAorI2RlZmluZSAgIFdBVF9DVFJMX1NFTF9CCQkxCS8qIHNlbGVjdCBCIGJ1ZmZlciBpZiAxICovCisjZGVmaW5lICAgV0FUX0NUUkxfTk9fSU5DCQkyCisjZGVmaW5lIFdBVF9HQU1NQV9DVFJMCQkweDQxMGMKKyNkZWZpbmUgICBXQVRfR0FNTUFfRElTQUJMRQkJMQkvKiBkaXNhYmxlcyBnYW1tYSBjbWFwICovCisjZGVmaW5lIFdBVF9PVkxfQ1RSTAkJMHg0MzBjCQkvKiBjb250cm9scyBvdmVybGF5ICovCisKKy8qIEluZGV4ZWQgYnkgREZBX1BJWF8qIHZhbHVlcyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgd2F0Zm10W10gPSB7CisJV0FUX0ZNVF84QklULCBXQVRfRk1UXzE2QklUXzU2NSwgV0FUX0ZNVF8xNkJJVF8xNTU1LCAwLAorCVdBVF9GTVRfMjRCSVQsIFdBVF9GTVRfMzJCSVQKK307CisKKy8qIENvbG9ybWFwIGFycmF5OyAxayBlbnRyaWVzIG9mIDQgYnl0ZXMgZWFjaCAqLworI2RlZmluZSBDTUFQCQkJMHg2MDAwCisKKyNkZWZpbmUgcmVhZHJlZyhwYXIsIHJlZykJcmVhZGwoKHBhciktPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgd3JpdGVyZWcocGFyLCByZWcsIHZhbCkJd3JpdGVsKCh2YWwpLCAocGFyKS0+cmVncyArIChyZWcpKQorCitzdHJ1Y3QgZ3h0NDUwMF9wYXIgeworCXZvaWQgX19pb21lbSAqcmVnczsKKworCWludCBwaXhmbXQ7CQkvKiBwaXhlbCBmb3JtYXQsIHNlZSBERkFfUElYXyogdmFsdWVzICovCisKKwkvKiBQTEwgcGFyYW1ldGVycyAqLworCWludCByZWZjbGtfcHM7CQkvKiByZWYgY2xvY2sgcGVyaW9kIGluIHBpY29zZWNvbmRzICovCisJaW50IHBsbF9tOwkJLyogcmVmIGNsb2NrIGRpdmlzb3IgKi8KKwlpbnQgcGxsX247CQkvKiBWQ08gZGl2aXNvciAqLworCWludCBwbGxfcGQxOwkJLyogZmlyc3QgcG9zdC1kaXZpc29yICovCisJaW50IHBsbF9wZDI7CQkvKiBzZWNvbmQgcG9zdC1kaXZpc29yICovCisKKwl1MzIgcHNldWRvX3BhbGV0dGVbMTZdOwkvKiB1c2VkIGluIGNvbG9yIGJsaXRzICovCit9OworCisvKiBtb2RlIHJlcXVlc3RlZCBieSB1c2VyICovCitzdGF0aWMgY2hhciAqbW9kZV9vcHRpb247CisKKy8qIGRlZmF1bHQgbW9kZTogMTI4MHgxMDI0IEAgNjAgSHosIDggYnBwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBkZWZhdWx0bW9kZSBfX2RldmluaXRkYXRhID0geworCS5yZWZyZXNoID0gNjAsCisJLnhyZXMgPSAxMjgwLAorCS55cmVzID0gMTAyNCwKKwkucGl4Y2xvY2sgPSA5Mjk1LAorCS5sZWZ0X21hcmdpbiA9IDI0OCwKKwkucmlnaHRfbWFyZ2luID0gNDgsCisJLnVwcGVyX21hcmdpbiA9IDM4LAorCS5sb3dlcl9tYXJnaW4gPSAxLAorCS5oc3luY19sZW4gPSAxMTIsCisJLnZzeW5jX2xlbiA9IDMsCisJLnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRAorfTsKKworLyogTGlzdCBvZiBzdXBwb3J0ZWQgY2FyZHMgKi8KK2VudW0gZ3h0X2NhcmRzIHsKKwlHWFQ0NTAwUCwKKwlHWFQ2MDAwUAorfTsKKworLyogQ2FyZC1zcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjYXJkaW5mbyB7CisJaW50CXJlZmNsa19wczsJLyogcGVyaW9kIG9mIFBMTCByZWZlcmVuY2UgY2xvY2sgaW4gcHMgKi8KKwljb25zdCBjaGFyICpjYXJkbmFtZTsKK30gY2FyZGluZm9bXSA9IHsKKwlbR1hUNDUwMFBdID0geyAucmVmY2xrX3BzID0gOTI1OSwgLmNhcmRuYW1lID0gIklCTSBHWFQ0NTAwUCIgfSwKKwlbR1hUNjAwMFBdID0geyAucmVmY2xrX3BzID0gNDAwMDAsIC5jYXJkbmFtZSA9ICJJQk0gR1hUNjAwMFAiIH0sCit9OworCisvKgorICogVGhlIHJlZmNsayBhbmQgVkNPIGRpdmlkZXJzIGFwcGVhciB0byB1c2UgYSBsaW5lYXIgZmVlZGJhY2sgc2hpZnQKKyAqIHJlZ2lzdGVyLCB3aGljaCBnZXRzIHJlbG9hZGVkIHdoZW4gaXQgcmVhY2hlcyBhIHRlcm1pbmFsIHZhbHVlLCBhdAorICogd2hpY2ggcG9pbnQgdGhlIGRpdmlkZXIgb3V0cHV0IGlzIHRvZ2dsZWQuICBUaHVzIG9uZSBjYW4gb2J0YWluCisgKiB3aGF0ZXZlciBkaXZpc29yIGlzIHJlcXVpcmVkIGJ5IHB1dHRpbmcgdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGludG8KKyAqIHRoZSByZWxvYWQgcmVnaXN0ZXIuICBGb3IgYSBkaXZpc29yIG9mIE4sIG9uZSBwdXRzIHRoZSB2YWx1ZSBmcm9tCisgKiB0aGUgTEZTUiBzZXF1ZW5jZSB0aGF0IGNvbWVzIE4tMSBwbGFjZXMgYmVmb3JlIHRoZSB0ZXJtaW5hbCB2YWx1ZQorICogaW50byB0aGUgcmVsb2FkIHJlZ2lzdGVyLgorICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1kaXZ0YWJbXSA9IHsKKy8qIDEgKi8JCSAgICAgIDB4M2YsIDB4MDAsIDB4MjAsIDB4MTAsIDB4MjgsIDB4MTQsIDB4MmEsIDB4MTUsIDB4MGEsCisvKiAxMCAqLwkweDI1LCAweDMyLCAweDE5LCAweDBjLCAweDI2LCAweDEzLCAweDA5LCAweDA0LCAweDIyLCAweDExLAorLyogMjAgKi8JMHgwOCwgMHgyNCwgMHgxMiwgMHgyOSwgMHgzNCwgMHgxYSwgMHgyZCwgMHgzNiwgMHgxYiwgMHgwZCwKKy8qIDMwICovCTB4MDYsIDB4MjMsIDB4MzEsIDB4MzgsIDB4MWMsIDB4MmUsIDB4MTcsIDB4MGIsIDB4MDUsIDB4MDIsCisvKiA0MCAqLwkweDIxLCAweDMwLCAweDE4LCAweDJjLCAweDE2LCAweDJiLCAweDM1LCAweDNhLCAweDFkLCAweDBlLAorLyogNTAgKi8JMHgyNywgMHgzMywgMHgzOSwgMHgzYywgMHgxZSwgMHgyZiwgMHgzNywgMHgzYiwgMHgzZCwgMHgzZSwKKy8qIDYwICovCTB4MWYsIDB4MGYsIDB4MDcsIDB4MDMsIDB4MDEsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBuZGl2dGFiW10gPSB7CisvKiAyICovCQkgICAgICAgICAgICAweDAwLCAweDgwLCAweGMwLCAweGUwLCAweGYwLCAweDc4LCAweGJjLCAweDVlLAorLyogMTAgKi8JMHgyZiwgMHgxNywgMHgwYiwgMHg4NSwgMHhjMiwgMHhlMSwgMHg3MCwgMHgzOCwgMHg5YywgMHg0ZSwKKy8qIDIwICovCTB4YTcsIDB4ZDMsIDB4ZTksIDB4ZjQsIDB4ZmEsIDB4ZmQsIDB4ZmUsIDB4N2YsIDB4YmYsIDB4ZGYsCisvKiAzMCAqLwkweGVmLCAweDc3LCAweDNiLCAweDFkLCAweDhlLCAweGM3LCAweGUzLCAweDcxLCAweGI4LCAweGRjLAorLyogNDAgKi8JMHg2ZSwgMHhiNywgMHg1YiwgMHgyZCwgMHgxNiwgMHg4YiwgMHhjNSwgMHhlMiwgMHhmMSwgMHhmOCwKKy8qIDUwICovCTB4ZmMsIDB4N2UsIDB4M2YsIDB4OWYsIDB4Y2YsIDB4NjcsIDB4YjMsIDB4ZDksIDB4NmMsIDB4YjYsCisvKiA2MCAqLwkweGRiLCAweDZkLCAweDM2LCAweDliLCAweDRkLCAweDI2LCAweDEzLCAweDg5LCAweGM0LCAweDYyLAorLyogNzAgKi8JMHhiMSwgMHhkOCwgMHhlYywgMHhmNiwgMHhmYiwgMHg3ZCwgMHhiZSwgMHg1ZiwgMHhhZiwgMHg1NywKKy8qIDgwICovCTB4MmIsIDB4OTUsIDB4NGEsIDB4MjUsIDB4OTIsIDB4NDksIDB4YTQsIDB4NTIsIDB4MjksIDB4OTQsCisvKiA5MCAqLwkweGNhLCAweDY1LCAweGIyLCAweDU5LCAweDJjLCAweDk2LCAweGNiLCAweGU1LCAweGYyLCAweDc5LAorLyogMTAwICovCTB4M2MsIDB4MWUsIDB4MGYsIDB4MDcsIDB4ODMsIDB4NDEsIDB4MjAsIDB4OTAsIDB4NDgsIDB4MjQsCisvKiAxMTAgKi8JMHgxMiwgMHgwOSwgMHg4NCwgMHg0MiwgMHhhMSwgMHg1MCwgMHgyOCwgMHgxNCwgMHg4YSwgMHg0NSwKKy8qIDEyMCAqLwkweGEyLCAweGQxLCAweGU4LCAweDc0LCAweGJhLCAweGRkLCAweGVlLCAweGY3LCAweDdiLCAweDNkLAorLyogMTMwICovCTB4OWUsIDB4NGYsIDB4MjcsIDB4OTMsIDB4YzksIDB4ZTQsIDB4NzIsIDB4MzksIDB4MWMsIDB4MGUsCisvKiAxNDAgKi8JMHg4NywgMHhjMywgMHg2MSwgMHgzMCwgMHgxOCwgMHg4YywgMHhjNiwgMHg2MywgMHgzMSwgMHg5OCwKKy8qIDE1MCAqLwkweGNjLCAweGU2LCAweDczLCAweGI5LCAweDVjLCAweDJlLCAweDk3LCAweDRiLCAweGE1LCAweGQyLAorLyogMTYwICovCTB4NjksCit9OworCitzdGF0aWMgaW50IGNhbGNfcGxsKGludCBwZXJpb2RfcHMsIHN0cnVjdCBneHQ0NTAwX3BhciAqcGFyKQoreworCWludCBtLCBuLCBwZGl2MSwgcGRpdjIsIHBvc3RkaXY7CisJaW50IHBsbF9wZXJpb2QsIGJlc3RfZXJyb3IsIHQsIGludGY7CisKKwkvKiBvbmx5IGRlYWwgd2l0aCByYW5nZSA1TUh6IC0gMzAwTUh6ICovCisJaWYgKHBlcmlvZF9wcyA8IDMzMzMgfHwgcGVyaW9kX3BzID4gMjAwMDAwKQorCQlyZXR1cm4gLTE7CisKKwliZXN0X2Vycm9yID0gMTAwMDAwMDsKKwlmb3IgKHBkaXYxID0gMTsgcGRpdjEgPD0gODsgKytwZGl2MSkgeworCQlmb3IgKHBkaXYyID0gMTsgcGRpdjIgPD0gcGRpdjE7ICsrcGRpdjIpIHsKKwkJCXBvc3RkaXYgPSBwZGl2MSAqIHBkaXYyOworCQkJcGxsX3BlcmlvZCA9IChwZXJpb2RfcHMgKyBwb3N0ZGl2IC0gMSkgLyBwb3N0ZGl2OworCQkJLyoga2VlcCBwbGwgaW4gcmFuZ2UgMzUwLi42MDAgTUh6ICovCisJCQlpZiAocGxsX3BlcmlvZCA8IDE2NjYgfHwgcGxsX3BlcmlvZCA+IDI4NTcpCisJCQkJY29udGludWU7CisJCQlmb3IgKG0gPSAxOyBtIDw9IDY0OyArK20pIHsKKwkJCQlpbnRmID0gbSAqIHBhci0+cmVmY2xrX3BzOworCQkJCWlmIChpbnRmID4gNTAwMDAwKQorCQkJCQlicmVhazsKKwkJCQluID0gaW50ZiAqIHBvc3RkaXYgLyBwZXJpb2RfcHM7CisJCQkJaWYgKG4gPCAzIHx8IG4gPiAxNjApCisJCQkJCWNvbnRpbnVlOworCQkJCXQgPSBwYXItPnJlZmNsa19wcyAqIG0gKiBwb3N0ZGl2IC8gbjsKKwkJCQl0IC09IHBlcmlvZF9wczsKKwkJCQlpZiAodCA+PSAwICYmIHQgPCBiZXN0X2Vycm9yKSB7CisJCQkJCXBhci0+cGxsX20gPSBtOworCQkJCQlwYXItPnBsbF9uID0gbjsKKwkJCQkJcGFyLT5wbGxfcGQxID0gcGRpdjE7CisJCQkJCXBhci0+cGxsX3BkMiA9IHBkaXYyOworCQkJCQliZXN0X2Vycm9yID0gdDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJaWYgKGJlc3RfZXJyb3IgPT0gMTAwMDAwMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhbGNfcGl4Y2xvY2soc3RydWN0IGd4dDQ1MDBfcGFyICpwYXIpCit7CisJcmV0dXJuIHBhci0+cmVmY2xrX3BzICogcGFyLT5wbGxfbSAqIHBhci0+cGxsX3BkMSAqIHBhci0+cGxsX3BkMgorCQkvIHBhci0+cGxsX247Cit9CisKK3N0YXRpYyBpbnQgZ3h0NDUwMF92YXJfdG9fcGFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgICAgc3RydWN0IGd4dDQ1MDBfcGFyICpwYXIpCit7CisJaWYgKHZhci0+eHJlcyArIHZhci0+eG9mZnNldCA+IHZhci0+eHJlc192aXJ0dWFsIHx8CisJICAgIHZhci0+eXJlcyArIHZhci0+eW9mZnNldCA+IHZhci0+eXJlc192aXJ0dWFsIHx8CisJICAgIHZhci0+eHJlc192aXJ0dWFsID4gNDA5NikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCh2YXItPnZtb2RlICYgRkJfVk1PREVfTUFTSykgIT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2FsY19wbGwodmFyLT5waXhjbG9jaywgcGFyKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSAzMjoKKwkJaWYgKHZhci0+dHJhbnNwLmxlbmd0aCkKKwkJCXBhci0+cGl4Zm10ID0gREZBX1BJWF8zMkJJVDsKKwkJZWxzZQorCQkJcGFyLT5waXhmbXQgPSBERkFfUElYXzI0QklUOworCQlicmVhazsKKwljYXNlIDI0OgorCQlwYXItPnBpeGZtdCA9IERGQV9QSVhfMjRCSVQ7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCWlmICh2YXItPmdyZWVuLmxlbmd0aCA9PSA1KQorCQkJcGFyLT5waXhmbXQgPSBERkFfUElYXzE2QklUXzE1NTU7CisJCWVsc2UKKwkJCXBhci0+cGl4Zm10ID0gREZBX1BJWF8xNkJJVF81NjU7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcGFyLT5waXhmbXQgPSBERkFfUElYXzhCSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX2JpdGZpZWxkIGVpZ2h0Yml0cyA9IHswLCA4fTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfYml0ZmllbGQgbm9iaXRzID0gezAsIDB9OworCitzdGF0aWMgdm9pZCBneHQ0NTAwX3VucGFja19waXhmbXQoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkJICBpbnQgcGl4Zm10KQoreworCXZhci0+Yml0c19wZXJfcGl4ZWwgPSBwaXhzaXplW3BpeGZtdF0gKiA4OworCXZhci0+cmVkID0gZWlnaHRiaXRzOworCXZhci0+Z3JlZW4gPSBlaWdodGJpdHM7CisJdmFyLT5ibHVlID0gZWlnaHRiaXRzOworCXZhci0+dHJhbnNwID0gbm9iaXRzOworCisJc3dpdGNoIChwaXhmbXQpIHsKKwljYXNlIERGQV9QSVhfMTZCSVRfNTY1OgorCQl2YXItPnJlZC5sZW5ndGggPSA1OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCQlicmVhazsKKwljYXNlIERGQV9QSVhfMTZCSVRfMTU1NToKKwkJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA1OworCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMTsKKwkJYnJlYWs7CisJY2FzZSBERkFfUElYXzMyQklUOgorCQl2YXItPnRyYW5zcC5sZW5ndGggPSA4OworCQlicmVhazsKKwl9CisJaWYgKHBpeGZtdCAhPSBERkFfUElYXzhCSVQpIHsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSB2YXItPnJlZC5sZW5ndGg7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSB2YXItPmdyZWVuLm9mZnNldCArIHZhci0+Z3JlZW4ubGVuZ3RoOworCQlpZiAodmFyLT50cmFuc3AubGVuZ3RoKQorCQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0KKwkJCQl2YXItPmJsdWUub2Zmc2V0ICsgdmFyLT5ibHVlLmxlbmd0aDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3h0NDUwMF9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBneHQ0NTAwX3BhciBwYXI7CisJaW50IGVycjsKKworCXBhciA9ICooc3RydWN0IGd4dDQ1MDBfcGFyICopaW5mby0+cGFyOworCWVyciA9IGd4dDQ1MDBfdmFyX3RvX3Bhcih2YXIsICZwYXIpOworCWlmICghZXJyKSB7CisJCXZhci0+cGl4Y2xvY2sgPSBjYWxjX3BpeGNsb2NrKCZwYXIpOworCQlneHQ0NTAwX3VucGFja19waXhmbXQodmFyLCBwYXIucGl4Zm10KTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBneHQ0NTAwX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGd4dDQ1MDBfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOworCWludCBlcnI7CisJdTMyIGN0cmxyZWcsIHRtcDsKKwl1bnNpZ25lZCBpbnQgZGZhX2N0bCwgcGl4Zm10LCBzdHJpZGU7CisJdW5zaWduZWQgaW50IHdpZF90aWxlcywgaTsKKwl1bnNpZ25lZCBpbnQgcHJlZmV0Y2hfcGl4LCBodG90OworCXN0cnVjdCBneHQ0NTAwX3BhciBzYXZlX3BhcjsKKworCXNhdmVfcGFyID0gKnBhcjsKKwllcnIgPSBneHQ0NTAwX3Zhcl90b19wYXIodmFyLCBwYXIpOworCWlmIChlcnIpIHsKKwkJKnBhciA9IHNhdmVfcGFyOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIHR1cm4gb2ZmIERURyBmb3Igbm93ICovCisJY3RybHJlZyA9IHJlYWRyZWcocGFyLCBEVEdfQ09OVFJPTCk7CisJY3RybHJlZyAmPSB+KERUR19DVExfRU5BQkxFIHwgRFRHX0NUTF9TQ1JFRU5fUkVGUkVTSCk7CisJd3JpdGVyZWcocGFyLCBEVEdfQ09OVFJPTCwgY3RybHJlZyk7CisKKwkvKiBzZXQgUExMIHJlZ2lzdGVycyAqLworCXRtcCA9IHJlYWRyZWcocGFyLCBQTExfQykgJiB+MHg3ZjsKKwlpZiAocGFyLT5wbGxfbiA8IDM4KQorCQl0bXAgfD0gMHgyOTsKKwlpZiAocGFyLT5wbGxfbiA8IDY5KQorCQl0bXAgfD0gMHgzNTsKKwllbHNlIGlmIChwYXItPnBsbF9uIDwgMTAwKQorCQl0bXAgfD0gMHg3NjsKKwllbHNlCisJCXRtcCB8PSAweDdlOworCXdyaXRlcmVnKHBhciwgUExMX0MsIHRtcCk7CisJd3JpdGVyZWcocGFyLCBQTExfTSwgbWRpdnRhYltwYXItPnBsbF9tIC0gMV0pOworCXdyaXRlcmVnKHBhciwgUExMX04sIG5kaXZ0YWJbcGFyLT5wbGxfbiAtIDJdKTsKKwl0bXAgPSAoKDggLSBwYXItPnBsbF9wZDIpIDw8IDMpIHwgKDggLSBwYXItPnBsbF9wZDEpOworCWlmIChwYXItPnBsbF9wZDEgPT0gOCB8fCBwYXItPnBsbF9wZDIgPT0gOCkgeworCQkvKiB3b3JrIGFyb3VuZCBlcnJhdHVtICovCisJCXdyaXRlcmVnKHBhciwgUExMX1BPU1RESVYsIHRtcCB8IDB4OSk7CisJCXVkZWxheSgxKTsKKwl9CisJd3JpdGVyZWcocGFyLCBQTExfUE9TVERJViwgdG1wKTsKKwltc2xlZXAoMjApOworCisJLyogdHVybiBvZmYgaGFyZHdhcmUgY3Vyc29yICovCisJd3JpdGVyZWcocGFyLCBDVVJTT1JfTU9ERSwgQ1VSU09SX01PREVfT0ZGKTsKKworCS8qIHJlc2V0IHJhc3RlciBlbmdpbmUgKi8KKwl3cml0ZXJlZyhwYXIsIENUUkxfUkVHMCwgQ1IwX1JBU1RFUl9SRVNFVCB8IChDUjBfUkFTVEVSX1JFU0VUIDw8IDE2KSk7CisJdWRlbGF5KDEwKTsKKwl3cml0ZXJlZyhwYXIsIENUUkxfUkVHMCwgQ1IwX1JBU1RFUl9SRVNFVCA8PCAxNik7CisKKwkvKiBzZXQgZGlzcGxheSB0aW1pbmcgZ2VuZXJhdG9yIHJlZ2lzdGVycyAqLworCWh0b3QgPSB2YXItPnhyZXMgKyB2YXItPmxlZnRfbWFyZ2luICsgdmFyLT5yaWdodF9tYXJnaW4gKworCQl2YXItPmhzeW5jX2xlbjsKKwl3cml0ZXJlZyhwYXIsIERUR19IT1JJWl9FWFRFTlQsIGh0b3QgLSAxKTsKKwl3cml0ZXJlZyhwYXIsIERUR19IT1JJWl9ESVNQTEFZLCB2YXItPnhyZXMgLSAxKTsKKwl3cml0ZXJlZyhwYXIsIERUR19IU1lOQ19TVEFSVCwgdmFyLT54cmVzICsgdmFyLT5yaWdodF9tYXJnaW4gLSAxKTsKKwl3cml0ZXJlZyhwYXIsIERUR19IU1lOQ19FTkQsCisJCSB2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuIC0gMSk7CisJd3JpdGVyZWcocGFyLCBEVEdfSFNZTkNfRU5EX0NPTVAsCisJCSB2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuIC0gMSk7CisJd3JpdGVyZWcocGFyLCBEVEdfVkVSVF9FWFRFTlQsCisJCSB2YXItPnlyZXMgKyB2YXItPnVwcGVyX21hcmdpbiArIHZhci0+bG93ZXJfbWFyZ2luICsKKwkJIHZhci0+dnN5bmNfbGVuIC0gMSk7CisJd3JpdGVyZWcocGFyLCBEVEdfVkVSVF9ESVNQTEFZLCB2YXItPnlyZXMgLSAxKTsKKwl3cml0ZXJlZyhwYXIsIERUR19WU1lOQ19TVEFSVCwgdmFyLT55cmVzICsgdmFyLT5sb3dlcl9tYXJnaW4gLSAxKTsKKwl3cml0ZXJlZyhwYXIsIERUR19WU1lOQ19FTkQsCisJCSB2YXItPnlyZXMgKyB2YXItPmxvd2VyX21hcmdpbiArIHZhci0+dnN5bmNfbGVuIC0gMSk7CisJcHJlZmV0Y2hfcGl4ID0gMzMwMDAwMCAvIHZhci0+cGl4Y2xvY2s7CisJaWYgKHByZWZldGNoX3BpeCA+PSBodG90KQorCQlwcmVmZXRjaF9waXggPSBodG90IC0gMTsKKwl3cml0ZXJlZyhwYXIsIERUR19WRVJUX1NIT1JULCBodG90IC0gcHJlZmV0Y2hfcGl4IC0gMSk7CisJY3RybHJlZyB8PSBEVEdfQ1RMX0VOQUJMRSB8IERUR19DVExfU0NSRUVOX1JFRlJFU0g7CisJd3JpdGVyZWcocGFyLCBEVEdfQ09OVFJPTCwgY3RybHJlZyk7CisKKwkvKiBjYWxjdWxhdGUgc3RyaWRlIGluIERGQSBhcGVydHVyZSAqLworCWlmICh2YXItPnhyZXNfdmlydHVhbCA+IDIwNDgpIHsKKwkJc3RyaWRlID0gNDA5NjsKKwkJZGZhX2N0bCA9IERGQV9GQl9TVFJJREVfNGs7CisJfSBlbHNlIGlmICh2YXItPnhyZXNfdmlydHVhbCA+IDEwMjQpIHsKKwkJc3RyaWRlID0gMjA0ODsKKwkJZGZhX2N0bCA9IERGQV9GQl9TVFJJREVfMms7CisJfSBlbHNlIHsKKwkJc3RyaWRlID0gMTAyNDsKKwkJZGZhX2N0bCA9IERGQV9GQl9TVFJJREVfMWs7CisJfQorCisJLyogU2V0IHVwIGZyYW1lYnVmZmVyIGRlZmluaXRpb24gKi8KKwl3aWRfdGlsZXMgPSAodmFyLT54cmVzX3ZpcnR1YWwgKyA2MykgPj4gNjsKKworCS8qIFhYWCBhZGQgcHJvcGVyIEZCIGFsbG9jYXRpb24gaGVyZSBzb21lZGF5ICovCisJd3JpdGVyZWcocGFyLCBGQl9BQl9DVFJMLCBGQl9DVFJMX1RZUEUgfCAod2lkX3RpbGVzIDw8IDE2KSB8IDApOworCXdyaXRlcmVnKHBhciwgUkVGUkVTSF9BQl9DVFJMLCBGQl9DVFJMX1RZUEUgfCAod2lkX3RpbGVzIDw8IDE2KSB8IDApOworCXdyaXRlcmVnKHBhciwgRkJfQ0RfQ1RSTCwgRkJfQ1RSTF9UWVBFIHwgKHdpZF90aWxlcyA8PCAxNikgfCAwKTsKKwl3cml0ZXJlZyhwYXIsIFJFRlJFU0hfQ0RfQ1RSTCwgRkJfQ1RSTF9UWVBFIHwgKHdpZF90aWxlcyA8PCAxNikgfCAwKTsKKwl3cml0ZXJlZyhwYXIsIFJFRlJFU0hfU1RBUlQsICh2YXItPnhvZmZzZXQgPDwgMTYpIHwgdmFyLT55b2Zmc2V0KTsKKwl3cml0ZXJlZyhwYXIsIFJFRlJFU0hfU0laRSwgKHZhci0+eHJlcyA8PCAxNikgfCB2YXItPnlyZXMpOworCisJLyogU2V0IHVwIGZyYW1lYnVmZmVyIGFjY2VzcyBieSBDUFUgKi8KKworCXBpeGZtdCA9IHBhci0+cGl4Zm10OworCWRmYV9jdGwgfD0gREZBX0ZCX0VOQUJMRSB8IHBpeGZtdDsKKwl3cml0ZXJlZyhwYXIsIERGQV9GQl9BLCBkZmFfY3RsKTsKKworCS8qCisJICogU2V0IHVwIHdpbmRvdyBhdHRyaWJ1dGUgdGFibGUuCisJICogV2Ugc2V0IGFsbCBXQVQgZW50cmllcyB0aGUgc2FtZSBzbyBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZQorCSAqIHdpbmRvdyBJRCAoV0lEKSBwbGFuZSBjb250YWlucy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkgeworCQl3cml0ZXJlZyhwYXIsIFdBVF9GTVQgKyAoaSA8PCA0KSwgd2F0Zm10W3BpeGZtdF0pOworCQl3cml0ZXJlZyhwYXIsIFdBVF9DTUFQX09GRlNFVCArIChpIDw8IDQpLCAwKTsKKwkJd3JpdGVyZWcocGFyLCBXQVRfQ1RSTCArIChpIDw8IDQpLCAwKTsKKwkJd3JpdGVyZWcocGFyLCBXQVRfR0FNTUFfQ1RSTCArIChpIDw8IDQpLCBXQVRfR0FNTUFfRElTQUJMRSk7CisJfQorCisJLyogU2V0IHN5bmMgcG9sYXJpdHkgZXRjLiAqLworCWN0cmxyZWcgPSByZWFkcmVnKHBhciwgU1lOQ19DVEwpICYKKwkJfihTWU5DX0NUTF9TWU5DX09OX1JHQiB8IFNZTkNfQ1RMX0hTWU5DX0lOViB8CisJCSAgU1lOQ19DVExfVlNZTkNfSU5WKTsKKwlpZiAodmFyLT5zeW5jICYgRkJfU1lOQ19PTl9HUkVFTikKKwkJY3RybHJlZyB8PSBTWU5DX0NUTF9TWU5DX09OX1JHQjsKKwlpZiAoISh2YXItPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkpCisJCWN0cmxyZWcgfD0gU1lOQ19DVExfSFNZTkNfSU5WOworCWlmICghKHZhci0+c3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkpCisJCWN0cmxyZWcgfD0gU1lOQ19DVExfVlNZTkNfSU5WOworCXdyaXRlcmVnKHBhciwgU1lOQ19DVEwsIGN0cmxyZWcpOworCisJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gc3RyaWRlICogcGl4c2l6ZVtwaXhmbXRdOworCWluZm8tPmZpeC52aXN1YWwgPSAocGl4Zm10ID09IERGQV9QSVhfOEJJVCk/IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKKwkJRkJfVklTVUFMX0RJUkVDVENPTE9SOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3h0NDUwMF9zZXRjb2xyZWcodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHJlZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJdTMyIGNtYXBfZW50cnk7CisJc3RydWN0IGd4dDQ1MDBfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlpZiAocmVnID4gMTAyMykKKwkJcmV0dXJuIDE7CisJY21hcF9lbnRyeSA9ICgodHJhbnNwICYgMHhmZjAwKSA8PCAxNikgfCAoKHJlZCAmIDB4ZmYwMCkgPDwgOCkgfAorCQkoZ3JlZW4gJiAweGZmMDApIHwgKGJsdWUgPj4gOCk7CisJd3JpdGVyZWcocGFyLCBDTUFQICsgcmVnICogNCwgY21hcF9lbnRyeSk7CisKKwlpZiAocmVnIDwgMTYgJiYgcGFyLT5waXhmbXQgIT0gREZBX1BJWF84QklUKSB7CisJCXUzMiAqcGFsID0gaW5mby0+cHNldWRvX3BhbGV0dGU7CisJCXUzMiB2YWwgPSByZWc7CisJCXN3aXRjaCAocGFyLT5waXhmbXQpIHsKKwkJY2FzZSBERkFfUElYXzE2QklUXzU2NToKKwkJCXZhbCB8PSAocmVnIDw8IDExKSB8IChyZWcgPDwgNik7CisJCQlicmVhazsKKwkJY2FzZSBERkFfUElYXzE2QklUXzE1NTU6CisJCQl2YWwgfD0gKHJlZyA8PCAxMCkgfCAocmVnIDw8IDUpOworCQkJYnJlYWs7CisJCWNhc2UgREZBX1BJWF8zMkJJVDoKKwkJCXZhbCB8PSAocmVnIDw8IDI0KTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIERGQV9QSVhfMjRCSVQ6CisJCQl2YWwgfD0gKHJlZyA8PCAxNikgfCAocmVnIDw8IDgpOworCQkJYnJlYWs7CisJCX0KKwkJcGFsW3JlZ10gPSB2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3h0NDUwMF9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZ3h0NDUwMF9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCWlmICh2YXItPnhvZmZzZXQgJiA3KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodmFyLT54b2Zmc2V0ICsgdmFyLT54cmVzID4gdmFyLT54cmVzX3ZpcnR1YWwgfHwKKwkgICAgdmFyLT55b2Zmc2V0ICsgdmFyLT55cmVzID4gdmFyLT55cmVzX3ZpcnR1YWwpCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVyZWcocGFyLCBSRUZSRVNIX1NUQVJULCAodmFyLT54b2Zmc2V0IDw8IDE2KSB8IHZhci0+eW9mZnNldCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3h0NDUwMF9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBneHQ0NTAwX3BhciAqcGFyID0gaW5mby0+cGFyOworCWludCBjdHJsLCBkY3RsOworCisJY3RybCA9IHJlYWRyZWcocGFyLCBTWU5DX0NUTCk7CisJY3RybCAmPSB+KFNZTkNfQ1RMX1NZTkNfT0ZGIHwgU1lOQ19DVExfSFNZTkNfT0ZGIHwgU1lOQ19DVExfVlNZTkNfT0ZGKTsKKwlkY3RsID0gcmVhZHJlZyhwYXIsIERJU1BfQ1RMKTsKKwlkY3RsIHw9IERJU1BfQ1RMX09GRjsKKwlzd2l0Y2ggKGJsYW5rKSB7CisJY2FzZSBGQl9CTEFOS19VTkJMQU5LOgorCQlkY3RsICY9IH5ESVNQX0NUTF9PRkY7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgorCQljdHJsIHw9IFNZTkNfQ1RMX1NZTkNfT0ZGOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJCWN0cmwgfD0gU1lOQ19DVExfSFNZTkNfT0ZGOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CisJCWN0cmwgfD0gU1lOQ19DVExfVlNZTkNfT0ZGOworCQlicmVhazsKKwlkZWZhdWx0OiA7CisJfQorCXdyaXRlcmVnKHBhciwgU1lOQ19DVEwsIGN0cmwpOworCXdyaXRlcmVnKHBhciwgRElTUF9DVEwsIGRjdGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZ3h0NDUwMF9maXggX19kZXZpbml0ZGF0YSA9IHsKKwkuaWQgPSAiSUJNIEdYVDQ1MDBQIiwKKwkudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUywKKwkudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SLAorCS54cGFuc3RlcCA9IDgsCisJLnlwYW5zdGVwID0gMSwKKwkubW1pb19sZW4gPSAweDIwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9vcHMgZ3h0NDUwMF9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmZiX2NoZWNrX3ZhciA9IGd4dDQ1MDBfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyID0gZ3h0NDUwMF9zZXRfcGFyLAorCS5mYl9zZXRjb2xyZWcgPSBneHQ0NTAwX3NldGNvbHJlZywKKwkuZmJfcGFuX2Rpc3BsYXkgPSBneHQ0NTAwX3Bhbl9kaXNwbGF5LAorCS5mYl9ibGFuayA9IGd4dDQ1MDBfYmxhbmssCisJLmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYSA9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKK307CisKKy8qIFBDSSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGd4dDQ1MDBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgcmVnX3BoeXMsIGZiX3BoeXM7CisJc3RydWN0IGd4dDQ1MDBfcGFyICpwYXI7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsKKwllbnVtIGd4dF9jYXJkcyBjYXJkdHlwZTsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ3h0NDUwMDogY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlOiAlZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmVnX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVnX3BoeXMsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCksCisJCQkJImd4dDQ1MDAgcmVncyIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImd4dDQ1MDA6IGNhbm5vdCBnZXQgcmVnaXN0ZXJzXG4iKTsKKwkJZ290byBlcnJfbm9kZXY7CisJfQorCisJZmJfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihmYl9waHlzLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLAorCQkJCSJneHQ0NTAwIEZCIikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ3h0NDUwMDogY2Fubm90IGdldCBmcmFtZWJ1ZmZlclxuIik7CisJCWdvdG8gZXJyX2ZyZWVfcmVnczsKKwl9CisKKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBneHQ0NTAwX3BhciksICZwZGV2LT5kZXYpOworCWlmICghaW5mbykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJneHQ0NTAwOiBjYW5ub3QgYWxsb2MgRkIgaW5mbyByZWNvcmQiKTsKKwkJZ290byBlcnJfZnJlZV9mYjsKKwl9CisJcGFyID0gaW5mby0+cGFyOworCWNhcmR0eXBlID0gZW50LT5kcml2ZXJfZGF0YTsKKwlwYXItPnJlZmNsa19wcyA9IGNhcmRpbmZvW2NhcmR0eXBlXS5yZWZjbGtfcHM7CisJaW5mby0+Zml4ID0gZ3h0NDUwMF9maXg7CisJc3RybGNweShpbmZvLT5maXguaWQsIGNhcmRpbmZvW2NhcmR0eXBlXS5jYXJkbmFtZSwKKwkJc2l6ZW9mKGluZm8tPmZpeC5pZCkpOworCWluZm8tPnBzZXVkb19wYWxldHRlID0gcGFyLT5wc2V1ZG9fcGFsZXR0ZTsKKworCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gcmVnX3BoeXM7CisJcGFyLT5yZWdzID0gaW9yZW1hcChyZWdfcGh5cywgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJaWYgKCFwYXItPnJlZ3MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ3h0NDUwMDogY2Fubm90IG1hcCByZWdpc3RlcnNcbiIpOworCQlnb3RvIGVycl9mcmVlX2FsbDsKKwl9CisKKwlpbmZvLT5maXguc21lbV9zdGFydCA9IGZiX3BoeXM7CisJaW5mby0+Zml4LnNtZW1fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoZmJfcGh5cywgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7CisJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJneHQ0NTAwOiBjYW5ub3QgbWFwIGZyYW1lYnVmZmVyXG4iKTsKKwkJZ290byBlcnJfdW5tYXBfcmVnczsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CisKKwkvKiBTZXQgYnl0ZS1zd2FwcGluZyBmb3IgREZBIGFwZXJ0dXJlIGZvciBhbGwgcGl4ZWwgc2l6ZXMgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIENGR19FTkRJQU4wLCAweDMzMzMwMCk7CisKKwlpbmZvLT5mYm9wcyA9ICZneHQ0NTAwX29wczsKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisKKwllcnIgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ3h0NDUwMDogY2Fubm90IGFsbG9jYXRlIGNtYXBcbiIpOworCQlnb3RvIGVycl91bm1hcF9hbGw7CisJfQorCisJZ3h0NDUwMF9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBpbmZvKTsKKworCWlmICghZmJfZmluZF9tb2RlKCZ2YXIsIGluZm8sIG1vZGVfb3B0aW9uLCBOVUxMLCAwLCAmZGVmYXVsdG1vZGUsIDgpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImd4dDQ1MDA6IGNhbm5vdCBmaW5kIHZhbGlkIHZpZGVvIG1vZGVcbiIpOworCQlnb3RvIGVycl9mcmVlX2NtYXA7CisJfQorCWluZm8tPnZhciA9IHZhcjsKKwlpZiAoZ3h0NDUwMF9zZXRfcGFyKGluZm8pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3h0NDUwMDogY2Fubm90IHNldCB2aWRlbyBtb2RlXG4iKTsKKwkJZ290byBlcnJfZnJlZV9jbWFwOworCX0KKworCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ3h0NDUwMDogY2Fubm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKKwkJZ290byBlcnJfZnJlZV9jbWFwOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAorCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOworCisJcmV0dXJuIDA7CisKKyBlcnJfZnJlZV9jbWFwOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisgZXJyX3VubWFwX2FsbDoKKwlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKKyBlcnJfdW5tYXBfcmVnczoKKwlpb3VubWFwKHBhci0+cmVncyk7CisgZXJyX2ZyZWVfYWxsOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisgZXJyX2ZyZWVfZmI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGZiX3BoeXMsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpOworIGVycl9mcmVlX3JlZ3M6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlZ19waHlzLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKyBlcnJfbm9kZXY6CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBneHQ0NTAwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZ3h0NDUwMF9wYXIgKnBhcjsKKworCWlmICghaW5mbykKKwkJcmV0dXJuOworCXBhciA9IGluZm8tPnBhcjsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisJaW91bm1hcChwYXItPnJlZ3MpOworCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJCQkgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpLAorCQkJICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7CisJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKK30KKworLyogc3VwcG9ydGVkIGNoaXBzZXRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZ3h0NDUwMF9wY2lfdGJsW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9HWFQ0NTAwUCksCisJICAuZHJpdmVyX2RhdGEgPSBHWFQ0NTAwUCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lCTSwgUENJX0RFVklDRV9JRF9JQk1fR1hUNjAwMFApLAorCSAgLmRyaXZlcl9kYXRhID0gR1hUNjAwMFAgfSwKKwl7IDAgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGd4dDQ1MDBfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBneHQ0NTAwX2RyaXZlciA9IHsKKwkubmFtZSA9ICJneHQ0NTAwIiwKKwkuaWRfdGFibGUgPSBneHQ0NTAwX3BjaV90YmwsCisJLnByb2JlID0gZ3h0NDUwMF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZ3h0NDUwMF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZ3h0NDUwMF9pbml0KHZvaWQpCit7CisjaWZuZGVmIE1PRFVMRQorCWlmIChmYl9nZXRfb3B0aW9ucygiZ3h0NDUwMCIsICZtb2RlX29wdGlvbikpCisJCXJldHVybiAtRU5PREVWOworI2VuZGlmCisKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZ3h0NDUwMF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoZ3h0NDUwMF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGd4dDQ1MDBfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZ3h0NDUwMF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoZ3h0NDUwMF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZCRGV2IGRyaXZlciBmb3IgSUJNIEdYVDQ1MDBQLzYwMDBQIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfcGFyYW0obW9kZV9vcHRpb24sIGNoYXJwLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobW9kZV9vcHRpb24sICJTcGVjaWZ5IHJlc29sdXRpb24gYXMgXCI8eHJlcz54PHlyZXM+Wy08YnBwPl1bQDxyZWZyZXNoPl1cIiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9ocGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2hwZmIuYwppbmRleCA5MWNmM2I1Li45YWI5YjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2hwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2hwZmIuYwpAQCAtMjk1LDYgKzI5NSw4IEBACiAKIAlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiX2luZm8pIDwgMCkgewogCQlmYl9kZWFsbG9jX2NtYXAoJmZiX2luZm8uY21hcCk7CisJCWlvdW5tYXAoZmJfaW5mby5zY3JlZW5fYmFzZSk7CisJCWZiX2luZm8uc2NyZWVuX2Jhc2UgPSBOVUxMOwogCQlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwLWkyYy5jIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTAtaTJjLmMKaW5kZXggYjM4ZDgwNS4uOTYxZjRkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pODEwL2k4MTAtaTJjLmMKKysrIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTAtaTJjLmMKQEAgLTEzNywxNSArMTM3LDE1IEBACiB2b2lkIGk4MTBfZGVsZXRlX2kyY19idXNzZXMoc3RydWN0IGk4MTBmYl9wYXIgKnBhcikKIHsKICAgICAgICAgaWYgKHBhci0+Y2hhblswXS5wYXIpCi0gICAgICAgICAgICAgICAgaTJjX2JpdF9kZWxfYnVzKCZwYXItPmNoYW5bMF0uYWRhcHRlcik7CisJCWkyY19kZWxfYWRhcHRlcigmcGFyLT5jaGFuWzBdLmFkYXB0ZXIpOwogICAgICAgICBwYXItPmNoYW5bMF0ucGFyID0gTlVMTDsKIAogCWlmIChwYXItPmNoYW5bMV0ucGFyKQotCQlpMmNfYml0X2RlbF9idXMoJnBhci0+Y2hhblsxXS5hZGFwdGVyKTsKKwkJaTJjX2RlbF9hZGFwdGVyKCZwYXItPmNoYW5bMV0uYWRhcHRlcik7CiAJcGFyLT5jaGFuWzFdLnBhciA9IE5VTEw7CiAKIAlpZiAocGFyLT5jaGFuWzJdLnBhcikKLQkJaTJjX2JpdF9kZWxfYnVzKCZwYXItPmNoYW5bMl0uYWRhcHRlcik7CisJCWkyY19kZWxfYWRhcHRlcigmcGFyLT5jaGFuWzJdLmFkYXB0ZXIpOwogCXBhci0+Y2hhblsyXS5wYXIgPSBOVUxMOwogfQogCkBAIC0xNjIsOSArMTYyLDcgQEAKIAogCQlpZiAoZSAhPSBOVUxMKSB7CiAJCQlEUFJJTlRLKCJpODEwLWkyYzogR2V0dGluZyBFRElEIGZyb20gQklPU1xuIik7Ci0JCQllZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoZWRpZCkKLQkJCQltZW1jcHkoZWRpZCwgZSwgRURJRF9MRU5HVEgpOworCQkJZWRpZCA9IGttZW1kdXAoZSwgRURJRF9MRU5HVEgsIEdGUF9LRVJORUwpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lnYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2lnYWZiLmMKaW5kZXggZTZkZjQ5MmMuLjY1NWFlMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaWdhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lnYWZiLmMKQEAgLTM4NCwxOSArMzg0LDIxIEBACiAgICAgICAgIGlmICghY29uX2lzX3ByZXNlbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOwogCi0gICAgICAgIHBkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFUkcsIAorICAgICAgICBwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFUkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RFVklDRV9JRF9JTlRFUkdfMTY4MiwgMCk7CiAJaWYgKHBkZXYgPT0gTlVMTCkgewogCQkvKgogCQkgKiBYWFggV2UgdHJpZWQgdG8gdXNlIGN5YmVyMjAwMGZiLmMgZm9yIElHUyAyMDAwLgogCQkgKiBCdXQgaXQgZG9lcyBub3QgaW5pdGlhbGl6ZSB0aGUgY2hpcCBpbiBKYXZhU3RhdGlvbi1FLCBhbGFzLgogCQkgKi8KLSAgICAgICAgCXBkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFUkcsIDB4MjAwMCwgMCk7CisgICAgICAgIAlwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFUkcsIDB4MjAwMCwgMCk7CiAgICAgICAgIAlpZihwZGV2ID09IE5VTEwpIHsKICAgICAgICAgCSAgICAgICAgcmV0dXJuIC1FTlhJTzsKIAkJfQogCQlpZ2EyMDAwID0gMTsKIAl9CisJLyogV2UgbGVhayBhIHJlZmVyZW5jZSBoZXJlIGJ1dCBhcyBpdCBjYW5ub3QgYmUgdW5sb2FkZWQgdGhpcyBpcworCSAgIGZpbmUuIElmIHlvdSB3cml0ZSB1bmxvYWQgY29kZSByZW1lbWJlciB0byBmcmVlIGl0IGluIHVubG9hZCAqLwogCQogCXNpemUgPSBzaXplb2Yoc3RydWN0IGZiX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBpZ2FfcGFyKSArIHNpemVvZih1MzIpKjE2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYl9pMmMuYyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiX2kyYy5jCmluZGV4IDU2ODZlMjEuLjMzYmM0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiX2kyYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiX2kyYy5jCkBAIC0xODgsMTEgKzE4OCwxMSBAQAogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9PVVRQVVRTOyBpKyspIHsKIAkJaWYgKGRpbmZvLT5vdXRwdXRbaV0uaTJjX2J1cy5kaW5mbykgewotCQkJaTJjX2JpdF9kZWxfYnVzKCZkaW5mby0+b3V0cHV0W2ldLmkyY19idXMuYWRhcHRlcik7CisJCQlpMmNfZGVsX2FkYXB0ZXIoJmRpbmZvLT5vdXRwdXRbaV0uaTJjX2J1cy5hZGFwdGVyKTsKIAkJCWRpbmZvLT5vdXRwdXRbaV0uaTJjX2J1cy5kaW5mbyA9IE5VTEw7CiAJCX0KIAkJaWYgKGRpbmZvLT5vdXRwdXRbaV0uZGRjX2J1cy5kaW5mbykgewotCQkJaTJjX2JpdF9kZWxfYnVzKCZkaW5mby0+b3V0cHV0W2ldLmRkY19idXMuYWRhcHRlcik7CisJCQlpMmNfZGVsX2FkYXB0ZXIoJmRpbmZvLT5vdXRwdXRbaV0uZGRjX2J1cy5hZGFwdGVyKTsKIAkJCWRpbmZvLT5vdXRwdXRbaV0uZGRjX2J1cy5kaW5mbyA9IE5VTEw7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwppbmRleCA2ZjlkZTA0Li42NjRmYzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKQEAgLTEwNTgsMTAgKzEwNTgsOSBAQAogCQl1OCAqZWRpZF9kID0gTlVMTDsKIAogCQlpZiAoZWRpZF9zKSB7Ci0JCQllZGlkX2QgPSBrbWFsbG9jKEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwkJCWVkaWRfZCA9IGttZW1kdXAoZWRpZF9zLCBFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CiAKIAkJCWlmIChlZGlkX2QpIHsKLQkJCQltZW1jcHkoZWRpZF9kLCBlZGlkX3MsIEVESURfTEVOR1RIKTsKIAkJCQlmYl9lZGlkX3RvX21vbnNwZWNzKGVkaWRfZCwKIAkJCQkJCSAgICAmZGluZm8tPmluZm8tPm1vbnNwZWNzKTsKIAkJCQlrZnJlZShlZGlkX2QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9sZW8uYyBiL2RyaXZlcnMvdmlkZW8vbGVvLmMKaW5kZXggZjNhMjQzMy4uYTAzOGFhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9sZW8uYworKysgYi9kcml2ZXJzL3ZpZGVvL2xlby5jCkBAIC01MzAsMjAgKzUzMCwyMSBAQAogCXN0cnVjdCBsZW9fcGFyIHBhcjsKIH07CiAKLXN0YXRpYyB2b2lkIGxlb191bm1hcF9yZWdzKHN0cnVjdCBhbGxfaW5mbyAqYWxsKQorc3RhdGljIHZvaWQgbGVvX3VubWFwX3JlZ3Moc3RydWN0IG9mX2RldmljZSAqb3AsIHN0cnVjdCBhbGxfaW5mbyAqYWxsKQogewogCWlmIChhbGwtPnBhci5sY19zczBfdXNyKQotCQlvZl9pb3VubWFwKGFsbC0+cGFyLmxjX3NzMF91c3IsIDB4MTAwMCk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgYWxsLT5wYXIubGNfc3MwX3VzciwgMHgxMDAwKTsKIAlpZiAoYWxsLT5wYXIubGRfc3MwKQotCQlvZl9pb3VubWFwKGFsbC0+cGFyLmxkX3NzMCwgMHgxMDAwKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLCBhbGwtPnBhci5sZF9zczAsIDB4MTAwMCk7CiAJaWYgKGFsbC0+cGFyLmxkX3NzMSkKLQkJb2ZfaW91bm1hcChhbGwtPnBhci5sZF9zczEsIDB4MTAwMCk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgYWxsLT5wYXIubGRfc3MxLCAweDEwMDApOwogCWlmIChhbGwtPnBhci5seF9rcm4pCi0JCW9mX2lvdW5tYXAoYWxsLT5wYXIubHhfa3JuLCAweDEwMDApOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sIGFsbC0+cGFyLmx4X2tybiwgMHgxMDAwKTsKIAlpZiAoYWxsLT5wYXIuY3Vyc29yKQotCQlvZl9pb3VubWFwKGFsbC0+cGFyLmN1cnNvciwgc2l6ZW9mKHN0cnVjdCBsZW9fY3Vyc29yKSk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwKKwkJCSAgIGFsbC0+cGFyLmN1cnNvciwgc2l6ZW9mKHN0cnVjdCBsZW9fY3Vyc29yKSk7CiAJaWYgKGFsbC0+aW5mby5zY3JlZW5fYmFzZSkKLQkJb2ZfaW91bm1hcChhbGwtPmluZm8uc2NyZWVuX2Jhc2UsIDB4ODAwMDAwKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLCBhbGwtPmluZm8uc2NyZWVuX2Jhc2UsIDB4ODAwMDAwKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgbGVvX2luaXRfb25lKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQpAQCAtNTkyLDcgKzU5Myw3IEBACiAJICAgICFhbGwtPnBhci5seF9rcm4gfHwKIAkgICAgIWFsbC0+cGFyLmN1cnNvciB8fAogCSAgICAhYWxsLT5pbmZvLnNjcmVlbl9iYXNlKSB7Ci0JCWxlb191bm1hcF9yZWdzKGFsbCk7CisJCWxlb191bm1hcF9yZWdzKG9wLCBhbGwpOwogCQlrZnJlZShhbGwpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC02MDcsNyArNjA4LDcgQEAKIAlsZW9fYmxhbmsoMCwgJmFsbC0+aW5mbyk7CiAKIAlpZiAoZmJfYWxsb2NfY21hcCgmYWxsLT5pbmZvLmNtYXAsIDI1NiwgMCkpIHsKLQkJbGVvX3VubWFwX3JlZ3MoYWxsKTsKKwkJbGVvX3VubWFwX3JlZ3Mob3AsIGFsbCk7CiAJCWtmcmVlKGFsbCk7CiAJCXJldHVybiAtRU5PTUVNOzsKIAl9CkBAIC02MTcsNyArNjE4LDcgQEAKIAllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKIAlpZiAoZXJyIDwgMCkgewogCQlmYl9kZWFsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwKTsKLQkJbGVvX3VubWFwX3JlZ3MoYWxsKTsKKwkJbGVvX3VubWFwX3JlZ3Mob3AsIGFsbCk7CiAJCWtmcmVlKGFsbCk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtNjM4LDE4ICs2MzksMTggQEAKIAlyZXR1cm4gbGVvX2luaXRfb25lKG9wKTsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgbGVvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsZW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQogewotCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisJc3RydWN0IGFsbF9pbmZvICphbGwgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYWxsLT5pbmZvKTsKIAlmYl9kZWFsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwKTsKIAotCWxlb191bm1hcF9yZWdzKGFsbCk7CisJbGVvX3VubWFwX3JlZ3Mob3AsIGFsbCk7CiAKIAlrZnJlZShhbGwpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYWNmYi5jIGIvZHJpdmVycy92aWRlby9tYWNmYi5jCmluZGV4IDgwYTA0MzguLjE4MGQ5NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWFjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hY2ZiLmMKQEAgLTYwOCw2ICs2MDgsMjIgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBpb3VubWFwX21hY2ZiKHZvaWQpCit7CisJaWYgKHZhbGt5cmllX2NtYXBfcmVncykKKwkJaW91bm1hcCh2YWxreXJpZV9jbWFwX3JlZ3MpOworCWlmIChkYWZiX2NtYXBfcmVncykKKwkJaW91bm1hcChkYWZiX2NtYXBfcmVncyk7CisJaWYgKHY4X2JyYXppbF9jbWFwX3JlZ3MpCisJCWlvdW5tYXAodjhfYnJhemlsX2NtYXBfcmVncyk7CisJaWYgKHJidl9jbWFwX3JlZ3MpCisJCWlvdW5tYXAocmJ2X2NtYXBfcmVncyk7CisJaWYgKGNpdmljX2NtYXBfcmVncykKKwkJaW91bm1hcChjaXZpY19jbWFwX3JlZ3MpOworCWlmIChjc2NfY21hcF9yZWdzKQorCQlpb3VubWFwKGNzY19jbWFwX3JlZ3MpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBtYWNmYl9pbml0KHZvaWQpCiB7CiAJaW50IHZpZGVvX2NtYXBfbGVuLCB2aWRlb19pc19udWJ1cyA9IDA7CkBAIC05NjIsNiArOTc4LDEwIEBACiAJaWYgKCFlcnIpCiAJCXByaW50aygiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKIAkJICAgICAgIGZiX2luZm8ubm9kZSwgZmJfaW5mby5maXguaWQpOworCWVsc2UgeworCQlpb3VubWFwKGZiX2luZm8uc2NyZWVuX2Jhc2UpOworCQlpb3VubWFwX21hY2ZiKCk7CisJfQogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L2kyYy1tYXRyb3hmYi5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvaTJjLW1hdHJveGZiLmMKaW5kZXggNzk1YzFhOS4uZmUyODg0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvaTJjLW1hdHJveGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvaTJjLW1hdHJveGZiLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiBzdGF0aWMgdm9pZCBpMmNfYml0X2J1c19kZWwoc3RydWN0IGkyY19iaXRfYWRhcHRlciogYikgewogCWlmIChiLT5pbml0aWFsaXplZCkgewotCQlpMmNfYml0X2RlbF9idXMoJmItPmFkYXB0ZXIpOworCQlpMmNfZGVsX2FkYXB0ZXIoJmItPmFkYXB0ZXIpOwogCQliLT5pbml0aWFsaXplZCA9IDA7CiAJfQogfQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWF0cm94ZmJfZGhfbWF2ZW5faW5mbyogbTJpbmZvOwogCi0JbTJpbmZvID0gKHN0cnVjdCBtYXRyb3hmYl9kaF9tYXZlbl9pbmZvKilrbWFsbG9jKHNpemVvZigqbTJpbmZvKSwgR0ZQX0tFUk5FTCk7CisJbTJpbmZvID0ga21hbGxvYyhzaXplb2YoKm0yaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghbTJpbmZvKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCmluZGV4IGU5YjQxMTUuLmNiMmFhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKQEAgLTIwMjgsNyArMjAyOCw3IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQKLQltaW5mbyA9IChzdHJ1Y3QgbWF0cm94X2ZiX2luZm8qKWttYWxsb2Moc2l6ZW9mKCptaW5mbyksIEdGUF9LRVJORUwpOworCW1pbmZvID0ga21hbGxvYyhzaXplb2YoKm1pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtaW5mbykKIAkJcmV0dXJuIC0xOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2NydGMyLmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9jcnRjMi5jCmluZGV4IDI3ZWI0YmIuLjJjOTgwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2NydGMyLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfY3J0YzIuYwpAQCAtNjk0LDcgKzY5NCw3IEBACiAJLyogaGFyZHdhcmUgaXMgQ1JUQzIgaW5jYXBhYmxlLi4uICovCiAJaWYgKCFBQ0NFU1NfRkJJTkZPKGRldmZsYWdzLmNydGMyKSkKIAkJcmV0dXJuIE5VTEw7Ci0JbTJpbmZvID0gKHN0cnVjdCBtYXRyb3hmYl9kaF9mYl9pbmZvKilrbWFsbG9jKHNpemVvZigqbTJpbmZvKSwgR0ZQX0tFUk5FTCk7CisJbTJpbmZvID0ga21hbGxvYyhzaXplb2YoKm0yaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghbTJpbmZvKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWF0cm94ZmJfY3J0YzI6IE5vdCBlbm91Z2ggbWVtb3J5IGZvciBDUlRDMiBjb250cm9sIHN0cnVjdHNcbiIpOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWJ4L21ieGRlYnVnZnMuYyBiL2RyaXZlcnMvdmlkZW8vbWJ4L21ieGRlYnVnZnMuYwppbmRleCA4NGFhYjNhLi40NzJhM2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21ieC9tYnhkZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy92aWRlby9tYngvbWJ4ZGVidWdmcy5jCkBAIC0xMCw2ICsxMCw4IEBACiAJc3RydWN0IGRlbnRyeSAqY2xvY2s7CiAJc3RydWN0IGRlbnRyeSAqZGlzcGxheTsKIAlzdHJ1Y3QgZGVudHJ5ICpnc2N0bDsKKwlzdHJ1Y3QgZGVudHJ5ICpzZHJhbTsKKwlzdHJ1Y3QgZGVudHJ5ICptaXNjOwogfTsKIAogc3RhdGljIGludCBvcGVuX2ZpbGVfZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTI5LDExICszMSwxMSBAQAogewogCWNoYXIgKiBzID0gYmlnX2J1ZmZlcjsKIAotCXMgKz0gc3ByaW50ZihzLCAiU1lTQ0ZHID0gJTA4bHhcbiIsIFNZU0NGRyk7Ci0JcyArPSBzcHJpbnRmKHMsICJQRkJBU0UgPSAlMDhseFxuIiwgUEZCQVNFKTsKLQlzICs9IHNwcmludGYocywgIlBGQ0VJTCA9ICUwOGx4XG4iLCBQRkNFSUwpOwotCXMgKz0gc3ByaW50ZihzLCAiUE9MTEZMQUcgPSAlMDhseFxuIiwgUE9MTEZMQUcpOwotCXMgKz0gc3ByaW50ZihzLCAiU1lTUlNUID0gJTA4bHhcbiIsIFNZU1JTVCk7CisJcyArPSBzcHJpbnRmKHMsICJTWVNDRkcgPSAlMDh4XG4iLCByZWFkbChTWVNDRkcpKTsKKwlzICs9IHNwcmludGYocywgIlBGQkFTRSA9ICUwOHhcbiIsIHJlYWRsKFBGQkFTRSkpOworCXMgKz0gc3ByaW50ZihzLCAiUEZDRUlMID0gJTA4eFxuIiwgcmVhZGwoUEZDRUlMKSk7CisJcyArPSBzcHJpbnRmKHMsICJQT0xMRkxBRyA9ICUwOHhcbiIsIHJlYWRsKFBPTExGTEFHKSk7CisJcyArPSBzcHJpbnRmKHMsICJTWVNSU1QgPSAlMDh4XG4iLCByZWFkbChTWVNSU1QpKTsKIAogCXJldHVybiAgc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsCiAJCQkJCWJpZ19idWZmZXIsIHMtYmlnX2J1ZmZlcik7CkBAIC00NSwyNCArNDcsMjQgQEAKIHsKIAljaGFyICogcyA9IGJpZ19idWZmZXI7CiAKLQlzICs9IHNwcmludGYocywgIkdTQ1RSTCA9ICUwOGx4XG4iLCBHU0NUUkwpOwotCXMgKz0gc3ByaW50ZihzLCAiVlNDVFJMID0gJTA4bHhcbiIsIFZTQ1RSTCk7Ci0JcyArPSBzcHJpbnRmKHMsICJHQkJBU0UgPSAlMDhseFxuIiwgR0JCQVNFKTsKLQlzICs9IHNwcmludGYocywgIlZCQkFTRSA9ICUwOGx4XG4iLCBWQkJBU0UpOwotCXMgKz0gc3ByaW50ZihzLCAiR0RSQ1RSTCA9ICUwOGx4XG4iLCBHRFJDVFJMKTsKLQlzICs9IHNwcmludGYocywgIlZDTVNLID0gJTA4bHhcbiIsIFZDTVNLKTsKLQlzICs9IHNwcmludGYocywgIkdTQ0FEUiA9ICUwOGx4XG4iLCBHU0NBRFIpOwotCXMgKz0gc3ByaW50ZihzLCAiVlNDQURSID0gJTA4bHhcbiIsIFZTQ0FEUik7Ci0JcyArPSBzcHJpbnRmKHMsICJWVUJBU0UgPSAlMDhseFxuIiwgVlVCQVNFKTsKLQlzICs9IHNwcmludGYocywgIlZWQkFTRSA9ICUwOGx4XG4iLCBWVkJBU0UpOwotCXMgKz0gc3ByaW50ZihzLCAiR1NBRFIgPSAlMDhseFxuIiwgR1NBRFIpOwotCXMgKz0gc3ByaW50ZihzLCAiVlNBRFIgPSAlMDhseFxuIiwgVlNBRFIpOwotCXMgKz0gc3ByaW50ZihzLCAiSENDVFJMID0gJTA4bHhcbiIsIEhDQ1RSTCk7Ci0JcyArPSBzcHJpbnRmKHMsICJIQ1NJWkUgPSAlMDhseFxuIiwgSENTSVpFKTsKLQlzICs9IHNwcmludGYocywgIkhDUE9TID0gJTA4bHhcbiIsIEhDUE9TKTsKLQlzICs9IHNwcmludGYocywgIkhDQkFEUiA9ICUwOGx4XG4iLCBIQ0JBRFIpOwotCXMgKz0gc3ByaW50ZihzLCAiSENDS01TSyA9ICUwOGx4XG4iLCBIQ0NLTVNLKTsKLQlzICs9IHNwcmludGYocywgIkdQTFVUID0gJTA4bHhcbiIsIEdQTFVUKTsKKwlzICs9IHNwcmludGYocywgIkdTQ1RSTCA9ICUwOHhcbiIsIHJlYWRsKEdTQ1RSTCkpOworCXMgKz0gc3ByaW50ZihzLCAiVlNDVFJMID0gJTA4eFxuIiwgcmVhZGwoVlNDVFJMKSk7CisJcyArPSBzcHJpbnRmKHMsICJHQkJBU0UgPSAlMDh4XG4iLCByZWFkbChHQkJBU0UpKTsKKwlzICs9IHNwcmludGYocywgIlZCQkFTRSA9ICUwOHhcbiIsIHJlYWRsKFZCQkFTRSkpOworCXMgKz0gc3ByaW50ZihzLCAiR0RSQ1RSTCA9ICUwOHhcbiIsIHJlYWRsKEdEUkNUUkwpKTsKKwlzICs9IHNwcmludGYocywgIlZDTVNLID0gJTA4eFxuIiwgcmVhZGwoVkNNU0spKTsKKwlzICs9IHNwcmludGYocywgIkdTQ0FEUiA9ICUwOHhcbiIsIHJlYWRsKEdTQ0FEUikpOworCXMgKz0gc3ByaW50ZihzLCAiVlNDQURSID0gJTA4eFxuIiwgcmVhZGwoVlNDQURSKSk7CisJcyArPSBzcHJpbnRmKHMsICJWVUJBU0UgPSAlMDh4XG4iLCByZWFkbChWVUJBU0UpKTsKKwlzICs9IHNwcmludGYocywgIlZWQkFTRSA9ICUwOHhcbiIsIHJlYWRsKFZWQkFTRSkpOworCXMgKz0gc3ByaW50ZihzLCAiR1NBRFIgPSAlMDh4XG4iLCByZWFkbChHU0FEUikpOworCXMgKz0gc3ByaW50ZihzLCAiVlNBRFIgPSAlMDh4XG4iLCByZWFkbChWU0FEUikpOworCXMgKz0gc3ByaW50ZihzLCAiSENDVFJMID0gJTA4eFxuIiwgcmVhZGwoSENDVFJMKSk7CisJcyArPSBzcHJpbnRmKHMsICJIQ1NJWkUgPSAlMDh4XG4iLCByZWFkbChIQ1NJWkUpKTsKKwlzICs9IHNwcmludGYocywgIkhDUE9TID0gJTA4eFxuIiwgcmVhZGwoSENQT1MpKTsKKwlzICs9IHNwcmludGYocywgIkhDQkFEUiA9ICUwOHhcbiIsIHJlYWRsKEhDQkFEUikpOworCXMgKz0gc3ByaW50ZihzLCAiSENDS01TSyA9ICUwOHhcbiIsIHJlYWRsKEhDQ0tNU0spKTsKKwlzICs9IHNwcmludGYocywgIkdQTFVUID0gJTA4eFxuIiwgcmVhZGwoR1BMVVQpKTsKIAogCXJldHVybiAgc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsCiAJCQkJCWJpZ19idWZmZXIsIHMtYmlnX2J1ZmZlcik7CkBAIC03MywzNiArNzUsMzYgQEAKIHsKIAljaGFyICogcyA9IGJpZ19idWZmZXI7CiAKLQlzICs9IHNwcmludGYocywgIkRTQ1RSTCA9ICUwOGx4XG4iLCBEU0NUUkwpOwotCXMgKz0gc3ByaW50ZihzLCAiREhUMDEgPSAlMDhseFxuIiwgREhUMDEpOwotCXMgKz0gc3ByaW50ZihzLCAiREhUMDIgPSAlMDhseFxuIiwgREhUMDIpOwotCXMgKz0gc3ByaW50ZihzLCAiREhUMDMgPSAlMDhseFxuIiwgREhUMDMpOwotCXMgKz0gc3ByaW50ZihzLCAiRFZUMDEgPSAlMDhseFxuIiwgRFZUMDEpOwotCXMgKz0gc3ByaW50ZihzLCAiRFZUMDIgPSAlMDhseFxuIiwgRFZUMDIpOwotCXMgKz0gc3ByaW50ZihzLCAiRFZUMDMgPSAlMDhseFxuIiwgRFZUMDMpOwotCXMgKz0gc3ByaW50ZihzLCAiREJDT0wgPSAlMDhseFxuIiwgREJDT0wpOwotCXMgKz0gc3ByaW50ZihzLCAiQkdDT0xPUiA9ICUwOGx4XG4iLCBCR0NPTE9SKTsKLQlzICs9IHNwcmludGYocywgIkRJTlRSUyA9ICUwOGx4XG4iLCBESU5UUlMpOwotCXMgKz0gc3ByaW50ZihzLCAiRElOVFJFID0gJTA4bHhcbiIsIERJTlRSRSk7Ci0JcyArPSBzcHJpbnRmKHMsICJESU5UUkNOVCA9ICUwOGx4XG4iLCBESU5UUkNOVCk7Ci0JcyArPSBzcHJpbnRmKHMsICJEU0lHID0gJTA4bHhcbiIsIERTSUcpOwotCXMgKz0gc3ByaW50ZihzLCAiRE1DVFJMID0gJTA4bHhcbiIsIERNQ1RSTCk7Ci0JcyArPSBzcHJpbnRmKHMsICJDTElQQ1RSTCA9ICUwOGx4XG4iLCBDTElQQ1RSTCk7Ci0JcyArPSBzcHJpbnRmKHMsICJTUE9DVFJMID0gJTA4bHhcbiIsIFNQT0NUUkwpOwotCXMgKz0gc3ByaW50ZihzLCAiU1ZDVFJMID0gJTA4bHhcbiIsIFNWQ1RSTCk7Ci0JcyArPSBzcHJpbnRmKHMsICJETFNUUyA9ICUwOGx4XG4iLCBETFNUUyk7Ci0JcyArPSBzcHJpbnRmKHMsICJETExDVFJMID0gJTA4bHhcbiIsIERMTENUUkwpOwotCXMgKz0gc3ByaW50ZihzLCAiRFZMTlVNID0gJTA4bHhcbiIsIERWTE5VTSk7Ci0JcyArPSBzcHJpbnRmKHMsICJEVUNUUkwgPSAlMDhseFxuIiwgRFVDVFJMKTsKLQlzICs9IHNwcmludGYocywgIkRWRUNUUkwgPSAlMDhseFxuIiwgRFZFQ1RSTCk7Ci0JcyArPSBzcHJpbnRmKHMsICJESERFVCA9ICUwOGx4XG4iLCBESERFVCk7Ci0JcyArPSBzcHJpbnRmKHMsICJEVkRFVCA9ICUwOGx4XG4iLCBEVkRFVCk7Ci0JcyArPSBzcHJpbnRmKHMsICJET0RNU0sgPSAlMDhseFxuIiwgRE9ETVNLKTsKLQlzICs9IHNwcmludGYocywgIkNTQzAxID0gJTA4bHhcbiIsIENTQzAxKTsKLQlzICs9IHNwcmludGYocywgIkNTQzAyID0gJTA4bHhcbiIsIENTQzAyKTsKLQlzICs9IHNwcmludGYocywgIkNTQzAzID0gJTA4bHhcbiIsIENTQzAzKTsKLQlzICs9IHNwcmludGYocywgIkNTQzA0ID0gJTA4bHhcbiIsIENTQzA0KTsKLQlzICs9IHNwcmludGYocywgIkNTQzA1ID0gJTA4bHhcbiIsIENTQzA1KTsKKwlzICs9IHNwcmludGYocywgIkRTQ1RSTCA9ICUwOHhcbiIsIHJlYWRsKERTQ1RSTCkpOworCXMgKz0gc3ByaW50ZihzLCAiREhUMDEgPSAlMDh4XG4iLCByZWFkbChESFQwMSkpOworCXMgKz0gc3ByaW50ZihzLCAiREhUMDIgPSAlMDh4XG4iLCByZWFkbChESFQwMikpOworCXMgKz0gc3ByaW50ZihzLCAiREhUMDMgPSAlMDh4XG4iLCByZWFkbChESFQwMykpOworCXMgKz0gc3ByaW50ZihzLCAiRFZUMDEgPSAlMDh4XG4iLCByZWFkbChEVlQwMSkpOworCXMgKz0gc3ByaW50ZihzLCAiRFZUMDIgPSAlMDh4XG4iLCByZWFkbChEVlQwMikpOworCXMgKz0gc3ByaW50ZihzLCAiRFZUMDMgPSAlMDh4XG4iLCByZWFkbChEVlQwMykpOworCXMgKz0gc3ByaW50ZihzLCAiREJDT0wgPSAlMDh4XG4iLCByZWFkbChEQkNPTCkpOworCXMgKz0gc3ByaW50ZihzLCAiQkdDT0xPUiA9ICUwOHhcbiIsIHJlYWRsKEJHQ09MT1IpKTsKKwlzICs9IHNwcmludGYocywgIkRJTlRSUyA9ICUwOHhcbiIsIHJlYWRsKERJTlRSUykpOworCXMgKz0gc3ByaW50ZihzLCAiRElOVFJFID0gJTA4eFxuIiwgcmVhZGwoRElOVFJFKSk7CisJcyArPSBzcHJpbnRmKHMsICJESU5UUkNOVCA9ICUwOHhcbiIsIHJlYWRsKERJTlRSQ05UKSk7CisJcyArPSBzcHJpbnRmKHMsICJEU0lHID0gJTA4eFxuIiwgcmVhZGwoRFNJRykpOworCXMgKz0gc3ByaW50ZihzLCAiRE1DVFJMID0gJTA4eFxuIiwgcmVhZGwoRE1DVFJMKSk7CisJcyArPSBzcHJpbnRmKHMsICJDTElQQ1RSTCA9ICUwOHhcbiIsIHJlYWRsKENMSVBDVFJMKSk7CisJcyArPSBzcHJpbnRmKHMsICJTUE9DVFJMID0gJTA4eFxuIiwgcmVhZGwoU1BPQ1RSTCkpOworCXMgKz0gc3ByaW50ZihzLCAiU1ZDVFJMID0gJTA4eFxuIiwgcmVhZGwoU1ZDVFJMKSk7CisJcyArPSBzcHJpbnRmKHMsICJETFNUUyA9ICUwOHhcbiIsIHJlYWRsKERMU1RTKSk7CisJcyArPSBzcHJpbnRmKHMsICJETExDVFJMID0gJTA4eFxuIiwgcmVhZGwoRExMQ1RSTCkpOworCXMgKz0gc3ByaW50ZihzLCAiRFZMTlVNID0gJTA4eFxuIiwgcmVhZGwoRFZMTlVNKSk7CisJcyArPSBzcHJpbnRmKHMsICJEVUNUUkwgPSAlMDh4XG4iLCByZWFkbChEVUNUUkwpKTsKKwlzICs9IHNwcmludGYocywgIkRWRUNUUkwgPSAlMDh4XG4iLCByZWFkbChEVkVDVFJMKSk7CisJcyArPSBzcHJpbnRmKHMsICJESERFVCA9ICUwOHhcbiIsIHJlYWRsKERIREVUKSk7CisJcyArPSBzcHJpbnRmKHMsICJEVkRFVCA9ICUwOHhcbiIsIHJlYWRsKERWREVUKSk7CisJcyArPSBzcHJpbnRmKHMsICJET0RNU0sgPSAlMDh4XG4iLCByZWFkbChET0RNU0spKTsKKwlzICs9IHNwcmludGYocywgIkNTQzAxID0gJTA4eFxuIiwgcmVhZGwoQ1NDMDEpKTsKKwlzICs9IHNwcmludGYocywgIkNTQzAyID0gJTA4eFxuIiwgcmVhZGwoQ1NDMDIpKTsKKwlzICs9IHNwcmludGYocywgIkNTQzAzID0gJTA4eFxuIiwgcmVhZGwoQ1NDMDMpKTsKKwlzICs9IHNwcmludGYocywgIkNTQzA0ID0gJTA4eFxuIiwgcmVhZGwoQ1NDMDQpKTsKKwlzICs9IHNwcmludGYocywgIkNTQzA1ID0gJTA4eFxuIiwgcmVhZGwoQ1NDMDUpKTsKIAogCXJldHVybiAgc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsCiAJCQkJCWJpZ19idWZmZXIsIHMtYmlnX2J1ZmZlcik7CkBAIC0xMTMsMjQgKzExNSw2MSBAQAogewogCWNoYXIgKiBzID0gYmlnX2J1ZmZlcjsKIAotCXMgKz0gc3ByaW50ZihzLCAiU1lTQ0xLU1JDID0gJTA4bHhcbiIsIFNZU0NMS1NSQyk7Ci0JcyArPSBzcHJpbnRmKHMsICJQSVhDTEtTUkMgPSAlMDhseFxuIiwgUElYQ0xLU1JDKTsKLQlzICs9IHNwcmludGYocywgIkNMS1NMRUVQID0gJTA4bHhcbiIsIENMS1NMRUVQKTsKLQlzICs9IHNwcmludGYocywgIkNPUkVQTEwgPSAlMDhseFxuIiwgQ09SRVBMTCk7Ci0JcyArPSBzcHJpbnRmKHMsICJESVNQUExMID0gJTA4bHhcbiIsIERJU1BQTEwpOwotCXMgKz0gc3ByaW50ZihzLCAiUExMU1RBVCA9ICUwOGx4XG4iLCBQTExTVEFUKTsKLQlzICs9IHNwcmludGYocywgIlZPVlJDTEsgPSAlMDhseFxuIiwgVk9WUkNMSyk7Ci0JcyArPSBzcHJpbnRmKHMsICJQSVhDTEsgPSAlMDhseFxuIiwgUElYQ0xLKTsKLQlzICs9IHNwcmludGYocywgIk1FTUNMSyA9ICUwOGx4XG4iLCBNRU1DTEspOwotCXMgKz0gc3ByaW50ZihzLCAiTTI0Q0xLID0gJTA4bHhcbiIsIE0yNENMSyk7Ci0JcyArPSBzcHJpbnRmKHMsICJNQlhDTEsgPSAlMDhseFxuIiwgTUJYQ0xLKTsKLQlzICs9IHNwcmludGYocywgIlNEQ0xLID0gJTA4bHhcbiIsIFNEQ0xLKTsKLQlzICs9IHNwcmludGYocywgIlBJWENMS0RJViA9ICUwOGx4XG4iLCBQSVhDTEtESVYpOworCXMgKz0gc3ByaW50ZihzLCAiU1lTQ0xLU1JDID0gJTA4eFxuIiwgcmVhZGwoU1lTQ0xLU1JDKSk7CisJcyArPSBzcHJpbnRmKHMsICJQSVhDTEtTUkMgPSAlMDh4XG4iLCByZWFkbChQSVhDTEtTUkMpKTsKKwlzICs9IHNwcmludGYocywgIkNMS1NMRUVQID0gJTA4eFxuIiwgcmVhZGwoQ0xLU0xFRVApKTsKKwlzICs9IHNwcmludGYocywgIkNPUkVQTEwgPSAlMDh4XG4iLCByZWFkbChDT1JFUExMKSk7CisJcyArPSBzcHJpbnRmKHMsICJESVNQUExMID0gJTA4eFxuIiwgcmVhZGwoRElTUFBMTCkpOworCXMgKz0gc3ByaW50ZihzLCAiUExMU1RBVCA9ICUwOHhcbiIsIHJlYWRsKFBMTFNUQVQpKTsKKwlzICs9IHNwcmludGYocywgIlZPVlJDTEsgPSAlMDh4XG4iLCByZWFkbChWT1ZSQ0xLKSk7CisJcyArPSBzcHJpbnRmKHMsICJQSVhDTEsgPSAlMDh4XG4iLCByZWFkbChQSVhDTEspKTsKKwlzICs9IHNwcmludGYocywgIk1FTUNMSyA9ICUwOHhcbiIsIHJlYWRsKE1FTUNMSykpOworCXMgKz0gc3ByaW50ZihzLCAiTTI0Q0xLID0gJTA4eFxuIiwgcmVhZGwoTTI0Q0xLKSk7CisJcyArPSBzcHJpbnRmKHMsICJNQlhDTEsgPSAlMDh4XG4iLCByZWFkbChNQlhDTEspKTsKKwlzICs9IHNwcmludGYocywgIlNEQ0xLID0gJTA4eFxuIiwgcmVhZGwoU0RDTEspKTsKKwlzICs9IHNwcmludGYocywgIlBJWENMS0RJViA9ICUwOHhcbiIsIHJlYWRsKFBJWENMS0RJVikpOwogCiAJcmV0dXJuICBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywKIAkJCQkJYmlnX2J1ZmZlciwgcy1iaWdfYnVmZmVyKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2RyYW1fcmVhZF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyICogcyA9IGJpZ19idWZmZXI7CisKKwlzICs9IHNwcmludGYocywgIkxNUlNUID0gJTA4eFxuIiwgcmVhZGwoTE1SU1QpKTsKKwlzICs9IHNwcmludGYocywgIkxNQ0ZHID0gJTA4eFxuIiwgcmVhZGwoTE1DRkcpKTsKKwlzICs9IHNwcmludGYocywgIkxNUFdSID0gJTA4eFxuIiwgcmVhZGwoTE1QV1IpKTsKKwlzICs9IHNwcmludGYocywgIkxNUFdSU1RBVCA9ICUwOHhcbiIsIHJlYWRsKExNUFdSU1RBVCkpOworCXMgKz0gc3ByaW50ZihzLCAiTE1DRU1SID0gJTA4eFxuIiwgcmVhZGwoTE1DRU1SKSk7CisJcyArPSBzcHJpbnRmKHMsICJMTVRZUEUgPSAlMDh4XG4iLCByZWFkbChMTVRZUEUpKTsKKwlzICs9IHNwcmludGYocywgIkxNVElNID0gJTA4eFxuIiwgcmVhZGwoTE1USU0pKTsKKwlzICs9IHNwcmludGYocywgIkxNUkVGUkVTSCA9ICUwOHhcbiIsIHJlYWRsKExNUkVGUkVTSCkpOworCXMgKz0gc3ByaW50ZihzLCAiTE1QUk9UTUlOID0gJTA4eFxuIiwgcmVhZGwoTE1QUk9UTUlOKSk7CisJcyArPSBzcHJpbnRmKHMsICJMTVBST1RNQVggPSAlMDh4XG4iLCByZWFkbChMTVBST1RNQVgpKTsKKwlzICs9IHNwcmludGYocywgIkxNUFJPVENGRyA9ICUwOHhcbiIsIHJlYWRsKExNUFJPVENGRykpOworCXMgKz0gc3ByaW50ZihzLCAiTE1QUk9URVJSID0gJTA4eFxuIiwgcmVhZGwoTE1QUk9URVJSKSk7CisKKwlyZXR1cm4gIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLAorCQkJCQliaWdfYnVmZmVyLCBzLWJpZ19idWZmZXIpOworfQorCitzdGF0aWMgc3NpemVfdCBtaXNjX3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciAqIHMgPSBiaWdfYnVmZmVyOworCisJcyArPSBzcHJpbnRmKHMsICJMQ0RfQ09ORklHID0gJTA4eFxuIiwgcmVhZGwoTENEX0NPTkZJRykpOworCXMgKz0gc3ByaW50ZihzLCAiT0RGQlBXUiA9ICUwOHhcbiIsIHJlYWRsKE9ERkJQV1IpKTsKKwlzICs9IHNwcmludGYocywgIk9ERkJTVEFUID0gJTA4eFxuIiwgcmVhZGwoT0RGQlNUQVQpKTsKKwlzICs9IHNwcmludGYocywgIklEID0gJTA4eFxuIiwgcmVhZGwoSUQpKTsKKworCXJldHVybiAgc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsCisJCQkJCWJpZ19idWZmZXIsIHMtYmlnX2J1ZmZlcik7Cit9CisKKwogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3lzY29uZl9mb3BzID0gewogCS5yZWFkID0gc3lzY29uZl9yZWFkX2ZpbGUsCiAJLndyaXRlID0gd3JpdGVfZmlsZV9kdW1teSwKQEAgLTE1NSw2ICsxOTQsMTcgQEAKIAkub3BlbiA9IG9wZW5fZmlsZV9nZW5lcmljLAogfTsKIAorc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2RyYW1fZm9wcyA9IHsKKwkucmVhZCA9IHNkcmFtX3JlYWRfZmlsZSwKKwkud3JpdGUgPSB3cml0ZV9maWxlX2R1bW15LAorCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaXNjX2ZvcHMgPSB7CisJLnJlYWQgPSBtaXNjX3JlYWRfZmlsZSwKKwkud3JpdGUgPSB3cml0ZV9maWxlX2R1bW15LAorCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCit9OwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgbWJ4ZmJfZGVidWdmc19pbml0KHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7CkBAIC0xNzMsNiArMjIzLDEwIEBACiAJCQkJICAgICAgZmJpLCAmZGlzcGxheV9mb3BzKTsKIAlkYmctPmdzY3RsID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZ3NjdGwiLCAwNDQ0LCBkYmctPmRpciwKIAkJCQkgICAgZmJpLCAmZ3NjdGxfZm9wcyk7CisJZGJnLT5zZHJhbSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInNkcmFtIiwgMDQ0NCwgZGJnLT5kaXIsCisJCQkJCWZiaSwgJnNkcmFtX2ZvcHMpOworCWRiZy0+bWlzYyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1pc2MiLCAwNDQ0LCBkYmctPmRpciwKKwkJCQkJZmJpLCAmbWlzY19mb3BzKTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IG1ieGZiX2RlYnVnZnNfcmVtb3ZlKHN0cnVjdCBmYl9pbmZvICpmYmkpCkBAIC0xODAsNiArMjM0LDggQEAKIAlzdHJ1Y3QgbWJ4ZmJfaW5mbyAqbWZiaSA9IGZiaS0+cGFyOwogCXN0cnVjdCBtYnhmYl9kZWJ1Z2ZzX2RhdGEgKmRiZyA9IG1mYmktPmRlYnVnZnNfZGF0YTsKIAorCWRlYnVnZnNfcmVtb3ZlKGRiZy0+bWlzYyk7CisJZGVidWdmc19yZW1vdmUoZGJnLT5zZHJhbSk7CiAJZGVidWdmc19yZW1vdmUoZGJnLT5nc2N0bCk7CiAJZGVidWdmc19yZW1vdmUoZGJnLT5kaXNwbGF5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShkYmctPmNsb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWJ4L21ieGZiLmMgYi9kcml2ZXJzL3ZpZGVvL21ieC9tYnhmYi5jCmluZGV4IGEzMmQxYWYuLjk4MGQ1ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWJ4L21ieGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tYngvbWJ4ZmIuYwpAQCAtMSw4ICsxLDE0IEBACiAvKgogICogIGxpbnV4L2RyaXZlcnMvdmlkZW8vbWJ4L21ieGZiLmMKICAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IDhEIFRlY2hub2xvZ2llcyBpbmMKKyAqICBSYXBoYWVsIEFzc2VuYXQgPHJhcGhAOGQuY29tPgorICogIAktIEFkZGVkIHZpZGVvIG92ZXJsYXkgc3VwcG9ydAorICogIAktIFZhcmlvdXMgaW1wcm92ZW1lbnRzCisgKgogICogIENvcHlyaWdodCAoQykgMjAwNiBDb21wdWxhYiwgTHRkLgogICogIE1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+CisgKiAgCS0gQ3JlYXRpb24gb2YgZHJpdmVyCiAgKgogICogICBCYXNlZCBvbiBweGFmYi5jCiAgKgpAQCAtMTksNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtMjksNiArMzYsMTQgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdmlydF9iYXNlXzI3MDA7CiAKKyNkZWZpbmUgd3JpdGVfcmVnKHZhbCwgcmVnKSBkbyB7IHdyaXRlbCgodmFsKSwgKHJlZykpOyB9IHdoaWxlKDApCisKKy8qIFdpdGhvdXQgdGhpcyBkZWxheSwgdGhlIGdyYXBoaWNzIGFwcGVhcnMgc29tZWhvdyBzY2FsZWQgYW5kCisgKiB0aGVyZSBpcyBhIGxvdCBvZiBqaXR0ZXIgaW4gc2NhbmxpbmVzLiBUaGlzIGRlbGF5IGlzIHByb2JhYmx5CisgKiBuZWVkZWQgb25seSBhZnRlciBzZXR0aW5nIHNvbWUgc3BlY2lmaWMgcmVnaXN0ZXIocykgc29tZXdoZXJlLAorICogbm90IGFsbCBvdmVyIHRoZSBwbGFjZS4uLiAqLworI2RlZmluZSB3cml0ZV9yZWdfZGx5KHZhbCwgcmVnKSBkbyB7IHdyaXRlbCgodmFsKSwgcmVnKTsgdWRlbGF5KDEwMDApOyB9IHdoaWxlKDApCisKICNkZWZpbmUgTUlOX1hSRVMJMTYKICNkZWZpbmUgTUlOX1lSRVMJMTYKICNkZWZpbmUgTUFYX1hSRVMJMjA0OApAQCAtMjU3LDE5ICsyNzIsMTcgQEAKIAlnc2N0cmwgJj0gfihGTXNrKEdTQ1RSTF9HU1dJRFRIKSB8IEZNc2soR1NDVFJMX0dTSEVJR0hUKSk7CiAJZ3NjdHJsIHw9IEdzY3RybF9XaWR0aChpbmZvLT52YXIueHJlcykgfAogCQlHc2N0cmxfSGVpZ2h0KGluZm8tPnZhci55cmVzKTsKLQl3cml0ZWwoZ3NjdHJsLCBHU0NUUkwpOwotCXVkZWxheSgxMDAwKTsKKwl3cml0ZV9yZWdfZGx5KGdzY3RybCwgR1NDVFJMKTsKIAogCWdzYWRyICY9IH4oRk1zayhHU0FEUl9TUkNTVFJJREUpKTsKIAlnc2FkciB8PSBHc2Fkcl9TcmNzdHJpZGUoaW5mby0+dmFyLnhyZXMgKiBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgLwogCQkJCSAoOCAqIDE2KSAtIDEpOwotCXdyaXRlbChnc2FkciwgR1NBRFIpOwotCXVkZWxheSgxMDAwKTsKKwl3cml0ZV9yZWdfZGx5KGdzYWRyLCBHU0FEUik7CiAKIAkvKiBzZXR1cCB0aW1pbmdzICovCiAJdmFyLT5waXhjbG9jayA9IG1ieGZiX2dldF9waXhjbG9jayhpbmZvLT52YXIucGl4Y2xvY2ssICZkaXYpOwogCi0Jd3JpdGVsKChEaXNwX1BsbF9NKGRpdi5tKSB8IERpc3BfUGxsX04oZGl2Lm4pIHwKKwl3cml0ZV9yZWdfZGx5KChEaXNwX1BsbF9NKGRpdi5tKSB8IERpc3BfUGxsX04oZGl2Lm4pIHwKIAkJRGlzcF9QbGxfUChkaXYucCkgfCBESVNQX1BMTF9FTiksIERJU1BQTEwpOwogCiAJaGJwcyA9IHZhci0+aHN5bmNfbGVuOwpAQCAtMjgyLDE4ICsyOTUsMjAgQEAKIAl2ZnBzID0gdmFzICsgdmFyLT55cmVzOwogCXZ0ID0gdmZwcyArIHZhci0+bG93ZXJfbWFyZ2luOwogCi0Jd3JpdGVsKChEaHQwMV9IYnBzKGhicHMpIHwgRGh0MDFfSHQoaHQpKSwgREhUMDEpOwotCXdyaXRlbCgoRGh0MDJfSGxicyhoYXMpIHwgRGh0MDJfSGFzKGhhcykpLCBESFQwMik7Ci0Jd3JpdGVsKChEaHQwM19IZnBzKGhmcHMpIHwgRGh0MDNfSHJicyhoZnBzKSksIERIVDAzKTsKLQl3cml0ZWwoKERoZGV0X0hkZXMoaGFzKSB8IERoZGV0X0hkZWYoaGZwcykpLCBESERFVCk7CisJd3JpdGVfcmVnX2RseSgoRGh0MDFfSGJwcyhoYnBzKSB8IERodDAxX0h0KGh0KSksIERIVDAxKTsKKwl3cml0ZV9yZWdfZGx5KChEaHQwMl9IbGJzKGhhcykgfCBEaHQwMl9IYXMoaGFzKSksIERIVDAyKTsKKwl3cml0ZV9yZWdfZGx5KChEaHQwM19IZnBzKGhmcHMpIHwgRGh0MDNfSHJicyhoZnBzKSksIERIVDAzKTsKKwl3cml0ZV9yZWdfZGx5KChEaGRldF9IZGVzKGhhcykgfCBEaGRldF9IZGVmKGhmcHMpKSwgREhERVQpOwogCi0Jd3JpdGVsKChEdnQwMV9WYnBzKHZicHMpIHwgRHZ0MDFfVnQodnQpKSwgRFZUMDEpOwotCXdyaXRlbCgoRHZ0MDJfVnRicyh2YXMpIHwgRHZ0MDJfVmFzKHZhcykpLCBEVlQwMik7Ci0Jd3JpdGVsKChEdnQwM19WZnBzKHZmcHMpIHwgRHZ0MDNfVmJicyh2ZnBzKSksIERWVDAzKTsKLQl3cml0ZWwoKER2ZGV0X1ZkZXModmFzKSB8IER2ZGV0X1ZkZWYodmZwcykpLCBEVkRFVCk7Ci0Jd3JpdGVsKChEdmVjdHJsX1ZldmVudCh2ZnBzKSB8IER2ZWN0cmxfVmZldGNoKHZicHMpKSwgRFZFQ1RSTCk7CisJd3JpdGVfcmVnX2RseSgoRHZ0MDFfVmJwcyh2YnBzKSB8IER2dDAxX1Z0KHZ0KSksIERWVDAxKTsKKwl3cml0ZV9yZWdfZGx5KChEdnQwMl9WdGJzKHZhcykgfCBEdnQwMl9WYXModmFzKSksIERWVDAyKTsKKwl3cml0ZV9yZWdfZGx5KChEdnQwM19WZnBzKHZmcHMpIHwgRHZ0MDNfVmJicyh2ZnBzKSksIERWVDAzKTsKKwl3cml0ZV9yZWdfZGx5KChEdmRldF9WZGVzKHZhcykgfCBEdmRldF9WZGVmKHZmcHMpKSwgRFZERVQpOworCXdyaXRlX3JlZ19kbHkoKER2ZWN0cmxfVmV2ZW50KHZmcHMpIHwgRHZlY3RybF9WZmV0Y2godmJwcykpLCBEVkVDVFJMKTsKIAotCXdyaXRlbCgocmVhZGwoRFNDVFJMKSB8IERTQ1RSTF9TWU5DR0VOX0VOKSwgRFNDVFJMKTsKKwl3cml0ZV9yZWdfZGx5KChyZWFkbChEU0NUUkwpIHwgRFNDVFJMX1NZTkNHRU5fRU4pLCBEU0NUUkwpOworCisJd3JpdGVfcmVnX2RseShESU5UUkVfVkVWRU5UMF9FTiwgRElOVFJFKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzA1LDIzICszMjAsMjAzIEBACiAJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgogCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKIAljYXNlIEZCX0JMQU5LX05PUk1BTDoKLQkJd3JpdGVsKChyZWFkbChEU0NUUkwpICYgfkRTQ1RSTF9TWU5DR0VOX0VOKSwgRFNDVFJMKTsKLQkJdWRlbGF5KDEwMDApOwotCQl3cml0ZWwoKHJlYWRsKFBJWENMSykgJiB+UElYQ0xLX0VOKSwgUElYQ0xLKTsKLQkJdWRlbGF5KDEwMDApOwotCQl3cml0ZWwoKHJlYWRsKFZPVlJDTEspICYgflZPVlJDTEtfRU4pLCBWT1ZSQ0xLKTsKLQkJdWRlbGF5KDEwMDApOworCQl3cml0ZV9yZWdfZGx5KChyZWFkbChEU0NUUkwpICYgfkRTQ1RSTF9TWU5DR0VOX0VOKSwgRFNDVFJMKTsKKwkJd3JpdGVfcmVnX2RseSgocmVhZGwoUElYQ0xLKSAmIH5QSVhDTEtfRU4pLCBQSVhDTEspOworCQl3cml0ZV9yZWdfZGx5KChyZWFkbChWT1ZSQ0xLKSAmIH5WT1ZSQ0xLX0VOKSwgVk9WUkNMSyk7CiAJCWJyZWFrOwogCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKLQkJd3JpdGVsKChyZWFkbChEU0NUUkwpIHwgRFNDVFJMX1NZTkNHRU5fRU4pLCBEU0NUUkwpOwotCQl1ZGVsYXkoMTAwMCk7Ci0JCXdyaXRlbCgocmVhZGwoUElYQ0xLKSB8IFBJWENMS19FTiksIFBJWENMSyk7Ci0JCXVkZWxheSgxMDAwKTsKKwkJd3JpdGVfcmVnX2RseSgocmVhZGwoRFNDVFJMKSB8IERTQ1RSTF9TWU5DR0VOX0VOKSwgRFNDVFJMKTsKKwkJd3JpdGVfcmVnX2RseSgocmVhZGwoUElYQ0xLKSB8IFBJWENMS19FTiksIFBJWENMSyk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtYnhmYl9zZXR1cE92ZXJsYXkoc3RydWN0IG1ieGZiX292ZXJsYXlTZXR1cCAqc2V0KQoreworCXUzMiB2c2N0cmwsIHZiYmFzZSwgdnNjYWRyLCB2c2FkcjsKKwl1MzIgc3NzaXplLCBzcG9jdHJsLCBzdmN0cmwsIHNoY3RybDsKKwl1MzIgdnViYXNlLCB2dmJhc2U7CisJdTMyIHZvdnJjbGs7CisKKwlpZiAoc2V0LT5zY2FsZWRfd2lkdGg9PTAgfHwgc2V0LT5zY2FsZWRfaGVpZ2h0PT0wKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHJlYWQgcmVnaXN0ZXJzIHdoaWNoIGhhdmUgcmVzZXJ2ZWQgYml0cworCSAqIHNvIHdlIGNhbiB3cml0ZSB0aGVtIGJhY2sgYXMtaXMuICovCisJdm92cmNsayA9IHJlYWRsKFZPVlJDTEspOworCXZzY3RybCA9IHJlYWRsKFZTQ1RSTCk7CisJdnNjYWRyID0gcmVhZGwoVlNDQURSKTsKKwl2dWJhc2UgPSByZWFkbChWVUJBU0UpOworCXZ2YmFzZSA9IHJlYWRsKFZWQkFTRSk7CisKKwlzcG9jdHJsID0gcmVhZGwoU1BPQ1RSTCk7CisJc3NzaXplID0gcmVhZGwoU1NTSVpFKTsKKworCisJdmJiYXNlID0gVmJiYXNlX0dsYWxwaGEoc2V0LT5hbHBoYSk7CisKKwl2c2N0cmwgJj0gfigJRk1zayhWU0NUUkxfVlNXSURUSCkgfAorCQkJCQlGTXNrKFZTQ1RSTF9WU0hFSUdIVCkgfAorCQkJCQlGTXNrKFZTQ1RSTF9WUElYRk1UKSB8CisJCQkJCVZTQ1RSTF9HQU1NQV9FTiB8IFZTQ1RSTF9DU0NfRU4gfAorCQkJCQlWU0NUUkxfQ09TSVRFRCApOworCXZzY3RybCB8PSBWc2N0cmxfV2lkdGgoc2V0LT53aWR0aCkgfCBWc2N0cmxfSGVpZ2h0KHNldC0+aGVpZ2h0KSB8CisJCQkJVlNDVFJMX0NTQ19FTjsKKworCXZzY2FkciAmPSB+KFZTQ0FEUl9TVFJfRU4gfCBWU0NBRFJfQ09MS0VZX0VOIHwgVlNDQURSX0NPTEtFWVNSQyB8CisJCQkJRk1zayhWU0NBRFJfQkxFTkRfTSkgfCBGTXNrKFZTQ0FEUl9CTEVORF9QT1MpIHwKKwkJCQlGTXNrKFZTQ0FEUl9WQkFTRV9BRFIpICk7CisJdnViYXNlICY9IH4oVlVCQVNFX1VWSEFMRlNUUiB8IEZNc2soVlVCQVNFX1VCQVNFX0FEUikpOworCXZ2YmFzZSAmPSB+KEZNc2soVlZCQVNFX1ZCQVNFX0FEUikpOworCisJc3dpdGNoIChzZXQtPmZtdCkKKwl7CisJCWNhc2UgTUJYRkJfRk1UX1lVVjEyOgorCQkJdnNjdHJsIHw9IFZTQ1RSTF9WUElYRk1UX1lVVjEyOworCisJCQlzZXQtPllfc3RyaWRlID0gKChzZXQtPndpZHRoKSArIDB4ZiApICYgfjB4ZjsKKworCQkJYnJlYWs7CisJCWNhc2UgTUJYRkJfRk1UX1VZMFZZMToKKwkJCXZzY3RybCB8PSBWU0NUUkxfVlBJWEZNVF9VWTBWWTE7CisJCQlzZXQtPllfc3RyaWRlID0gKHNldC0+d2lkdGgqMiArIDB4ZiApICYgfjB4ZjsKKwkJCWJyZWFrOworCQljYXNlIE1CWEZCX0ZNVF9WWTBVWTE6CisJCQl2c2N0cmwgfD0gVlNDVFJMX1ZQSVhGTVRfVlkwVVkxOworCQkJc2V0LT5ZX3N0cmlkZSA9IChzZXQtPndpZHRoKjIgKyAweGYgKSAmIH4weGY7CisJCQlicmVhazsKKwkJY2FzZSBNQlhGQl9GTVRfWTBVWTFWOgorCQkJdnNjdHJsIHw9IFZTQ1RSTF9WUElYRk1UX1kwVVkxVjsKKwkJCXNldC0+WV9zdHJpZGUgPSAoc2V0LT53aWR0aCoyICsgMHhmICkgJiB+MHhmOworCQkJYnJlYWs7CisJCWNhc2UgTUJYRkJfRk1UX1kwVlkxVToKKwkJCXZzY3RybCB8PSBWU0NUUkxfVlBJWEZNVF9ZMFZZMVU7CisJCQlzZXQtPllfc3RyaWRlID0gKHNldC0+d2lkdGgqMiArIDB4ZiApICYgfjB4ZjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVlNDVFJMIGhhcyB0aGUgYml0cyB3aGljaCBzZXRzIHRoZSBWaWRlbyBQaXhlbCBGb3JtYXQuCisJICogV2hlbiBwYXNzaW5nIGZyb20gYSBwYWNrZWQgdG8gcGxhbmFyIGZvcm1hdCwKKwkgKiBpZiB3ZSB3cml0ZSBWU0NUUkwgZmlyc3QsIFZWQkFTRSBhbmQgVlVCQVNFIHdvdWxkCisJICogYmUgemVybyBpZiB3ZSB3b3VsZCBub3Qgc2V0IHRoZW0gaGVyZS4gKEFuZCB0aGVuLAorCSAqIHRoZSBjaGlwcyBoYW5ncyBhbmQgb25seSBhIHJlc2V0IHNlZW1zIHRvIGZpeCBpdCkuCisJICoKKwkgKiBJZiBjb3Vyc2UsIHRoZSB2YWx1ZXMgY2FsY3VsYXRlZCBoZXJlIGhhdmUgbm8gbWVhbmluZworCSAqIGZvciBwYWNrZWQgZm9ybWF0cy4KKwkgKi8KKwlzZXQtPlVWX3N0cmlkZSA9ICgoc2V0LT53aWR0aC8yKSArIDB4NyApICYgfjB4NzsKKwkJc2V0LT5VX29mZnNldCA9IHNldC0+aGVpZ2h0ICogc2V0LT5ZX3N0cmlkZTsKKwkJc2V0LT5WX29mZnNldCA9IHNldC0+VV9vZmZzZXQgKworCQkJCQkJc2V0LT5oZWlnaHQgKiBzZXQtPlVWX3N0cmlkZTsKKwl2dWJhc2UgfD0gVnViYXNlX1ViYXNlX0FkcigKKwkJCSgweDYwMDAwICsgc2V0LT5tZW1fb2Zmc2V0ICsgc2V0LT5VX29mZnNldCk+PjMpOworCXZ2YmFzZSB8PSBWdmJhc2VfVmJhc2VfQWRyKAorCQkJKDB4NjAwMDAgKyBzZXQtPm1lbV9vZmZzZXQgKyBzZXQtPlZfb2Zmc2V0KT4+Myk7CisKKworCXZzY2FkciB8PSBWU0NBRFJfQkxFTkRfVklEIHwgVlNDQURSX0JMRU5EX0dMT0IgfAorCQlWc2NhZHJfVmJhc2VfQWRyKCgweDYwMDAwICsgc2V0LT5tZW1fb2Zmc2V0KT4+NCk7CisKKwlpZiAoc2V0LT5lbmFibGUpCisJCXZzY2FkciB8PSBWU0NBRFJfU1RSX0VOOworCisKKwl2c2FkciA9IFZzYWRyX1NyY3N0cmlkZSgoc2V0LT5ZX3N0cmlkZSkvMTYtMSkgfAorCQlWc2Fkcl9Yc3RhcnQoc2V0LT54KSB8IFZzYWRyX1lzdGFydChzZXQtPnkpOworCisJc3NzaXplICY9IH4oRk1zayhTU1NJWkVfU0NfV0lEVEgpIHwgRk1zayhTU1NJWkVfU0NfSEVJR0hUKSk7CisJc3NzaXplID0gU3NzaXplX1NjX1dpZHRoKHNldC0+c2NhbGVkX3dpZHRoLTEpIHwKKwkJCVNzc2l6ZV9TY19IZWlnaHQoc2V0LT5zY2FsZWRfaGVpZ2h0LTEpOworCisJc3BvY3RybCAmPSB+KFNQT0NUUkxfSF9TQ19CUCB8IFNQT0NUUkxfVl9TQ19CUCB8CisJCQlTUE9DVFJMX0hWX1NDX09SIHwgU1BPQ1RSTF9WU19VUl9DIHwKKwkJCUZNc2soU1BPQ1RSTF9WT1JERVIpIHwgRk1zayhTUE9DVFJMX1ZQSVRDSCkpOworCXNwb2N0cmwgPSBTcG9jdHJsX1ZwaXRjaCgoc2V0LT5oZWlnaHQ8PDExKS9zZXQtPnNjYWxlZF9oZWlnaHQpCisJCQkJCQkJfCBTUE9DVFJMX1ZPUkRFUl8yVEFQOworCisJLyogQnlwYXNzIGhvcml6L3ZlcnQgc2NhbGVyIHdoZW4gc2FtZSBzaXplICovCisJaWYgKHNldC0+c2NhbGVkX3dpZHRoID09IHNldC0+d2lkdGgpCisJCXNwb2N0cmwgfD0gU1BPQ1RSTF9IX1NDX0JQOworCWlmIChzZXQtPnNjYWxlZF9oZWlnaHQgPT0gc2V0LT5oZWlnaHQpCisJCXNwb2N0cmwgfD0gU1BPQ1RSTF9WX1NDX0JQOworCisJc3ZjdHJsID0gU3ZjdHJsX0luaXRpYWwxKDE8PDEwKSB8IFN2Y3RybF9Jbml0aWFsMigxPDwxMCk7CisKKwlzaGN0cmwgPSBTaGN0cmxfSGluaXRpYWwoNDw8MTEpCisJCQl8IFNoY3RybF9IcGl0Y2goKHNldC0+d2lkdGg8PDExKS9zZXQtPnNjYWxlZF93aWR0aCk7CisKKwkvKiBWaWRlbyBwbGFuZSByZWdpc3RlcnMgKi8KKwl3cml0ZV9yZWcodnNjdHJsLCBWU0NUUkwpOworCXdyaXRlX3JlZyh2YmJhc2UsIFZCQkFTRSk7CisJd3JpdGVfcmVnKHZzY2FkciwgVlNDQURSKTsKKwl3cml0ZV9yZWcodnViYXNlLCBWVUJBU0UpOworCXdyaXRlX3JlZyh2dmJhc2UsIFZWQkFTRSk7CisJd3JpdGVfcmVnKHZzYWRyLCBWU0FEUik7CisKKwkvKiBWaWRlbyBzY2FsZXIgcmVnaXN0ZXJzICovCisJd3JpdGVfcmVnKHNzc2l6ZSwgU1NTSVpFKTsKKwl3cml0ZV9yZWcoc3BvY3RybCwgU1BPQ1RSTCk7CisJd3JpdGVfcmVnKHN2Y3RybCwgU1ZDVFJMKTsKKwl3cml0ZV9yZWcoc2hjdHJsLCBTSENUUkwpOworCisJLyogUkFQSDogVXNpbmcgdGhvc2UgY29lZmZpY2llbnRzLCB0aGUgc2NhbGVkCisJICogaW1hZ2UgaXMgcXVpdGUgYmx1cnJ5LiBJIGRvbnQga25vdyBob3cKKwkgKiB0byBpbXByb3ZlIHRoZW0gOyBUaGUgY2hpcCBkb2N1bWVudGF0aW9uCisJICogd2FzIG5vdCBoZWxwZnVsLi4gKi8KKwl3cml0ZV9yZWcoMHgyMTIxMjEyMSwgVlNDT0VGRjApOworCXdyaXRlX3JlZygweDIxMjEyMTIxLCBWU0NPRUZGMSk7CisJd3JpdGVfcmVnKDB4MjEyMTIxMjEsIFZTQ09FRkYyKTsKKwl3cml0ZV9yZWcoMHgyMTIxMjEyMSwgVlNDT0VGRjMpOworCXdyaXRlX3JlZygweDIxMjEyMTIxLCBWU0NPRUZGNCk7CisJd3JpdGVfcmVnKDB4MDAwMDAwMDAsIEhTQ09FRkYwKTsKKwl3cml0ZV9yZWcoMHgwMDAwMDAwMCwgSFNDT0VGRjEpOworCXdyaXRlX3JlZygweDAwMDAwMDAwLCBIU0NPRUZGMik7CisJd3JpdGVfcmVnKDB4MDMwMjAyMDEsIEhTQ09FRkYzKTsKKwl3cml0ZV9yZWcoMHgwOTA3MDYwNCwgSFNDT0VGRjQpOworCXdyaXRlX3JlZygweDBmMGUwYzBhLCBIU0NPRUZGNSk7CisJd3JpdGVfcmVnKDB4MTUxNDEyMTEsIEhTQ09FRkY2KTsKKwl3cml0ZV9yZWcoMHgxOTE4MTcxNiwgSFNDT0VGRjcpOworCXdyaXRlX3JlZygweDAwMDAwMDE5LCBIU0NPRUZGOCk7CisKKwkvKiBDbG9jayAqLworCWlmIChzZXQtPmVuYWJsZSkKKwkJdm92cmNsayB8PSAxOworCWVsc2UKKwkJdm92cmNsayAmPSB+MTsKKworCXdyaXRlX3JlZyh2b3ZyY2xrLCBWT1ZSQ0xLKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1ieGZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBtYnhmYl9vdmVybGF5U2V0dXAgc2V0dXA7CisJaW50IHJlczsKKworCWlmIChjbWQgPT0gTUJYRkJfSU9DWF9PVkVSTEFZKQorCXsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzZXR1cCwgKHZvaWQgX191c2VyKilhcmcsCisJCQkJCXNpemVvZihzdHJ1Y3QgbWJ4ZmJfb3ZlcmxheVNldHVwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXMgPSBtYnhmYl9zZXR1cE92ZXJsYXkoJnNldHVwKTsKKwkJaWYgKHJlcykKKwkJCXJldHVybiByZXM7CisKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIqKWFyZywgJnNldHVwLAorCQkJCQlzaXplb2Yoc3RydWN0IG1ieGZiX292ZXJsYXlTZXR1cCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCiBzdGF0aWMgc3RydWN0IGZiX29wcyBtYnhmYl9vcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmZiX2NoZWNrX3ZhciA9IG1ieGZiX2NoZWNrX3ZhciwKQEAgLTMzMSw2ICs1MjYsNyBAQAogCS5mYl9jb3B5YXJlYSA9IGNmYl9jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKIAkuZmJfYmxhbmsgPSBtYnhmYl9ibGFuaywKKwkuZmJfaW9jdGwgPSBtYnhmYl9pb2N0bCwKIH07CiAKIC8qCkBAIC0zMzksMzYgKzUzNSwyOSBAQAogKi8KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzZXR1cF9tZW1jKHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0Jc3RydWN0IG1ieGZiX2luZm8gKm1mYmkgPSBmYmktPnBhcjsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgaTsKIAogCS8qIEZJWE1FOiB1c2UgcGxhdGZyb20gc3BlY2lmaWMgcGFyYW1ldGVycyAqLwogCS8qIHNldHVwIFNEUkFNIGNvbnRyb2xsZXIgKi8KLQl3cml0ZWwoKExNQ0ZHX0xNQ19EUyB8IExNQ0ZHX0xNQ19UUyB8IExNQ0ZHX0xNRF9UUyB8CisJd3JpdGVfcmVnX2RseSgoTE1DRkdfTE1DX0RTIHwgTE1DRkdfTE1DX1RTIHwgTE1DRkdfTE1EX1RTIHwKIAkJTE1DRkdfTE1BX1RTKSwKIAkgICAgICAgTE1DRkcpOwotCXVkZWxheSgxMDAwKTsKIAotCXdyaXRlbChMTVBXUl9NQ19QV1JfQUNULCBMTVBXUik7Ci0JdWRlbGF5KDEwMDApOworCXdyaXRlX3JlZ19kbHkoTE1QV1JfTUNfUFdSX0FDVCwgTE1QV1IpOwogCiAJLyogc2V0dXAgU0RSQU0gdGltaW5ncyAqLwotCXdyaXRlbCgoTG10aW1fVHJhcyg3KSB8IExtdGltX1RycCgzKSB8IExtdGltX1RyY2QoMykgfAorCXdyaXRlX3JlZ19kbHkoKExtdGltX1RyYXMoNykgfCBMbXRpbV9UcnAoMykgfCBMbXRpbV9UcmNkKDMpIHwKIAkJTG10aW1fVHJjKDkpIHwgTG10aW1fVGRwbCgyKSksCiAJICAgICAgIExNVElNKTsKLQl1ZGVsYXkoMTAwMCk7CiAJLyogc2V0dXAgU0RSQU0gcmVmcmVzaCByYXRlICovCi0Jd3JpdGVsKDB4YzJiLCBMTVJFRlJFU0gpOwotCXVkZWxheSgxMDAwKTsKKwl3cml0ZV9yZWdfZGx5KDB4YzJiLCBMTVJFRlJFU0gpOwogCS8qIHNldHVwIFNEUkFNIHR5cGUgcGFyYW1ldGVycyAqLwotCXdyaXRlbCgoTE1UWVBFX0NBU0xBVF8zIHwgTE1UWVBFX0JLU1pfMiB8IExNVFlQRV9ST1dTWl8xMSB8CisJd3JpdGVfcmVnX2RseSgoTE1UWVBFX0NBU0xBVF8zIHwgTE1UWVBFX0JLU1pfMiB8IExNVFlQRV9ST1dTWl8xMSB8CiAJCUxNVFlQRV9DT0xTWl84KSwKIAkgICAgICAgTE1UWVBFKTsKLQl1ZGVsYXkoMTAwMCk7CiAJLyogZW5hYmxlIG1lbW9yeSBjb250cm9sbGVyICovCi0Jd3JpdGVsKExNUFdSX01DX1BXUl9BQ1QsIExNUFdSKTsKLQl1ZGVsYXkoMTAwMCk7CisJd3JpdGVfcmVnX2RseShMTVBXUl9NQ19QV1JfQUNULCBMTVBXUik7CiAKIAkvKiBwZXJmb3JtIGR1bW15IHJlYWRzICovCiAJZm9yICggaSA9IDA7IGkgPCAxNjsgaSsrICkgewpAQCAtMzc5LDM0ICs1NjgsMzAgQEAKIHN0YXRpYyB2b2lkIGVuYWJsZV9jbG9ja3Moc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKIAkvKiBlbmFibGUgY2xvY2tzICovCi0Jd3JpdGVsKFNZU0NMS1NSQ19QTExfMiwgU1lTQ0xLU1JDKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKFBJWENMS1NSQ19QTExfMSwgUElYQ0xLU1JDKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKDB4MDAwMDAwMDAsIENMS1NMRUVQKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKChDb3JlX1BsbF9NKDB4MTcpIHwgQ29yZV9QbGxfTigweDMpIHwgQ29yZV9QbGxfUCgweDApIHwKKwl3cml0ZV9yZWdfZGx5KFNZU0NMS1NSQ19QTExfMiwgU1lTQ0xLU1JDKTsKKwl3cml0ZV9yZWdfZGx5KFBJWENMS1NSQ19QTExfMSwgUElYQ0xLU1JDKTsKKwl3cml0ZV9yZWdfZGx5KDB4MDAwMDAwMDAsIENMS1NMRUVQKTsKKworCS8qIFBMTCBvdXRwdXQgPSAoRnJlZmNsayAqIE0pIC8gKE4gKiAyXlAgKQorCSAqCisJICogTTogMHgxNywgTjogMHgzLCBQOiAweDAgPT0gMTAwIE1oeiEKKwkgKiBNOiAweGIsIE46IDB4MSwgUDogMHgxID09IDcxIE1oegorCSAqICovCisJd3JpdGVfcmVnX2RseSgoQ29yZV9QbGxfTSgweGIpIHwgQ29yZV9QbGxfTigweDEpIHwgQ29yZV9QbGxfUCgweDEpIHwKIAkJQ09SRV9QTExfRU4pLAogCSAgICAgICBDT1JFUExMKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKChEaXNwX1BsbF9NKDB4MWIpIHwgRGlzcF9QbGxfTigweDcpIHwgRGlzcF9QbGxfUCgweDEpIHwKKworCXdyaXRlX3JlZ19kbHkoKERpc3BfUGxsX00oMHgxYikgfCBEaXNwX1BsbF9OKDB4NykgfCBEaXNwX1BsbF9QKDB4MSkgfAogCQlESVNQX1BMTF9FTiksCiAJICAgICAgIERJU1BQTEwpOwogCi0Jd3JpdGVsKDB4MDAwMDAwMDAsIFZPVlJDTEspOwotCXVkZWxheSgxMDAwKTsKLQl3cml0ZWwoUElYQ0xLX0VOLCBQSVhDTEspOwotCXVkZWxheSgxMDAwKTsKLQl3cml0ZWwoTUVNQ0xLX0VOLCBNRU1DTEspOwotCXVkZWxheSgxMDAwKTsKLQl3cml0ZWwoMHgwMDAwMDAwNiwgTTI0Q0xLKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKDB4MDAwMDAwMDYsIE1CWENMSyk7Ci0JdWRlbGF5KDEwMDApOwotCXdyaXRlbChTRENMS19FTiwgU0RDTEspOwotCXVkZWxheSgxMDAwKTsKLQl3cml0ZWwoMHgwMDAwMDAwMSwgUElYQ0xLRElWKTsKLQl1ZGVsYXkoMTAwMCk7CisJd3JpdGVfcmVnX2RseSgweDAwMDAwMDAwLCBWT1ZSQ0xLKTsKKwl3cml0ZV9yZWdfZGx5KFBJWENMS19FTiwgUElYQ0xLKTsKKwl3cml0ZV9yZWdfZGx5KE1FTUNMS19FTiwgTUVNQ0xLKTsKKwl3cml0ZV9yZWdfZGx5KDB4MDAwMDAwMDYsIE0yNENMSyk7CisJd3JpdGVfcmVnX2RseSgweDAwMDAwMDA2LCBNQlhDTEspOworCXdyaXRlX3JlZ19kbHkoU0RDTEtfRU4sIFNEQ0xLKTsKKwl3cml0ZV9yZWdfZGx5KDB4MDAwMDAwMDEsIFBJWENMS0RJVik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzZXR1cF9ncmFwaGljcyhzdHJ1Y3QgZmJfaW5mbyAqZmJpKQpAQCAtNDMwLDE2ICs2MTUsMTEgQEAKIAkJYnJlYWs7CiAJfQogCi0Jd3JpdGVsKGdzY3RybCwgR1NDVFJMKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKDB4MDAwMDAwMDAsIEdCQkFTRSk7Ci0JdWRlbGF5KDEwMDApOwotCXdyaXRlbCgweDAwZmZmZmZmLCBHRFJDVFJMKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKChHU0NBRFJfU1RSX0VOIHwgR3NjYWRyX0diYXNlX0FkcigweDYwMDApKSwgR1NDQURSKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKDB4MDAwMDAwMDAsIEdQTFVUKTsKLQl1ZGVsYXkoMTAwMCk7CisJd3JpdGVfcmVnX2RseShnc2N0cmwsIEdTQ1RSTCk7CisJd3JpdGVfcmVnX2RseSgweDAwMDAwMDAwLCBHQkJBU0UpOworCXdyaXRlX3JlZ19kbHkoMHgwMGZmZmZmZiwgR0RSQ1RSTCk7CisJd3JpdGVfcmVnX2RseSgoR1NDQURSX1NUUl9FTiB8IEdzY2Fkcl9HYmFzZV9BZHIoMHg2MDAwKSksIEdTQ0FEUik7CisJd3JpdGVfcmVnX2RseSgweDAwMDAwMDAwLCBHUExVVCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzZXR1cF9kaXNwbGF5KHN0cnVjdCBmYl9pbmZvICpmYmkpCkBAIC00NTEsMTcgKzYzMSwxNCBAQAogCQlkc2N0cmwgfD0gRFNDVFJMX0hTX1BPTDsKIAlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkKIAkJZHNjdHJsIHw9IERTQ1RSTF9WU19QT0w7Ci0Jd3JpdGVsKGRzY3RybCwgRFNDVFJMKTsKLQl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGVsKDB4ZDAzMDMwMTAsIERNQ1RSTCk7Ci0JdWRlbGF5KDEwMDApOwotCXdyaXRlbCgocmVhZGwoRFNDVFJMKSB8IERTQ1RSTF9TWU5DR0VOX0VOKSwgRFNDVFJMKTsKKwl3cml0ZV9yZWdfZGx5KGRzY3RybCwgRFNDVFJMKTsKKwl3cml0ZV9yZWdfZGx5KDB4ZDAzMDMwMTAsIERNQ1RSTCk7CisJd3JpdGVfcmVnX2RseSgocmVhZGwoRFNDVFJMKSB8IERTQ1RSTF9TWU5DR0VOX0VOKSwgRFNDVFJMKTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGVuYWJsZV9jb250cm9sbGVyKHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0Jd3JpdGVsKFNZU1JTVF9SU1QsIFNZU1JTVCk7Ci0JdWRlbGF5KDEwMDApOworCXdyaXRlX3JlZ19kbHkoU1lTUlNUX1JTVCwgU1lTUlNUKTsKIAogCiAJZW5hYmxlX2Nsb2NrcyhmYmkpOwpAQCAtNDc4LDEyICs2NTUsMTIgQEAKIHN0YXRpYyBpbnQgbWJ4ZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAkvKiBtYWtlIGZyYW1lIGJ1ZmZlciBtZW1vcnkgZW50ZXIgc2VsZi1yZWZyZXNoIG1vZGUgKi8KLQl3cml0ZWwoTE1QV1JfTUNfUFdSX1NSTSwgTE1QV1IpOworCXdyaXRlX3JlZ19kbHkoTE1QV1JfTUNfUFdSX1NSTSwgTE1QV1IpOwogCXdoaWxlIChMTVBXUlNUQVQgIT0gTE1QV1JTVEFUX01DX1BXUl9TUk0pCiAJCTsgLyogZW1wdHkgc3RhdGVtZW50ICovCiAKIAkvKiByZXNldCB0aGUgZGV2aWNlLCBzaW5jZSBpdCdzIGluaXRpYWwgc3RhdGUgaXMgJ21vc3RseSBzbGVlcGluZycgKi8KLQl3cml0ZWwoU1lTUlNUX1JTVCwgU1lTUlNUKTsKKwl3cml0ZV9yZWdfZGx5KFNZU1JTVF9SU1QsIFNZU1JTVCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5NSw3ICs2NzIsNyBAQAogLyogCXNldHVwX2dyYXBoaWNzKGZiaSk7ICovCiAvKiAJc2V0dXBfZGlzcGxheShmYmkpOyAqLwogCi0Jd3JpdGVsKChyZWFkbChEU0NUUkwpIHwgRFNDVFJMX1NZTkNHRU5fRU4pLCBEU0NUUkwpOworCXdyaXRlX3JlZ19kbHkoKHJlYWRsKERTQ1RSTCkgfCBEU0NUUkxfU1lOQ0dFTl9FTiksIERTQ1RSTCk7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpAQCAtNTIwLDYgKzY5NywxMiBAQAogCiAJZGV2X2RiZyhkZXYsICJtYnhmYl9wcm9iZVxuIik7CiAKKwlwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInBsYXRmb3JtIGRhdGEgaXMgcmVxdWlyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlmYmkgPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IG1ieGZiX2luZm8pLCAmZGV2LT5kZXYpOwogCWlmIChmYmkgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImZyYW1lYnVmZmVyX2FsbG9jIGZhaWxlZFxuIik7CkBAIC01MjgsNyArNzExLDggQEAKIAogCW1mYmkgPSBmYmktPnBhcjsKIAlmYmktPnBzZXVkb19wYWxldHRlID0gbWZiaS0+cHNldWRvX3BhbGV0dGU7Ci0JcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisKIAlpZiAocGRhdGEtPnByb2JlKQogCQltZmJpLT5wbGF0Zm9ybV9wcm9iZSA9IHBkYXRhLT5wcm9iZTsKIAlpZiAocGRhdGEtPnJlbW92ZSkKQEAgLTU3OCwxNiArNzYyLDE2IEBACiAJCWdvdG8gZXJyNDsKIAl9CiAKLQkvKiBGSVhNRTogZ2V0IGZyb20gcGxhdGZvcm0gKi8KIAlmYmktPnNjcmVlbl9iYXNlID0gKGNoYXIgX19pb21lbSAqKShtZmJpLT5mYl92aXJ0X2FkZHIgKyAweDYwMDAwKTsKLQlmYmktPnNjcmVlbl9zaXplID0gOCAqIDEwMjQgKiAxMDI0OwkvKiA4IE1lZ3MgKi8KKwlmYmktPnNjcmVlbl9zaXplID0gcGRhdGEtPm1lbXNpemU7CiAJZmJpLT5mYm9wcyA9ICZtYnhmYl9vcHM7CiAKIAlmYmktPnZhciA9IG1ieGZiX2RlZmF1bHQ7CiAJZmJpLT5maXggPSBtYnhmYl9maXg7CiAJZmJpLT5maXguc21lbV9zdGFydCA9IG1mYmktPmZiX3BoeXNfYWRkciArIDB4NjAwMDA7Ci0JZmJpLT5maXguc21lbV9sZW4gPSA4ICogMTAyNCAqIDEwMjQ7Ci0JZmJpLT5maXgubGluZV9sZW5ndGggPSA2NDAgKiAyOworCWZiaS0+Zml4LnNtZW1fbGVuID0gcGRhdGEtPm1lbXNpemU7CisJZmJpLT5maXgubGluZV9sZW5ndGggPSBtYnhmYl9kZWZhdWx0LnhyZXNfdmlydHVhbCAqCisJCQkJCW1ieGZiX2RlZmF1bHQuYml0c19wZXJfcGl4ZWwgLyA4OwogCiAJcmV0ID0gZmJfYWxsb2NfY21hcCgmZmJpLT5jbWFwLCAyNTYsIDApOwogCWlmIChyZXQgPCAwKSB7CkBAIC02MzYsOCArODIwLDcgQEAKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCXdyaXRlbChTWVNSU1RfUlNULCBTWVNSU1QpOwotCXVkZWxheSgxMDAwKTsKKwl3cml0ZV9yZWdfZGx5KFNZU1JTVF9SU1QsIFNZU1JTVCk7CiAKIAltYnhmYl9kZWJ1Z2ZzX3JlbW92ZShmYmkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21ieC9yZWdfYml0cy5oIGIvZHJpdmVycy92aWRlby9tYngvcmVnX2JpdHMuaAppbmRleCBjMjI2YThlLi45YTI0ZmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21ieC9yZWdfYml0cy5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbWJ4L3JlZ19iaXRzLmgKQEAgLTI0Miw2ICsyNDIsNjcgQEAKICNkZWZpbmUgR1BMVVRfTFVUREFUQQlGbGQoMjQsMCkKICNkZWZpbmUgR3BsdXRfTHV0ZGF0YSh4KQkoKHgpIDw8IEZTaGZ0KEdQTFVUX0xVVERBVEEpKQogCisvKiBWU0NUUkwgLSBWaWRlbyBTdXJmYWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVlNDVFJMX1ZQSVhGTVQJCUZsZCg0LDI3KQorI2RlZmluZSBWU0NUUkxfVlBJWEZNVF9ZVVYxMgkoKDB4OSkgPDwgRlNoZnQoVlNDVFJMX1ZQSVhGTVQpKQorI2RlZmluZSBWU0NUUkxfVlBJWEZNVF9VWTBWWTEJKCgweGMpIDw8IEZTaGZ0KFZTQ1RSTF9WUElYRk1UKSkKKyNkZWZpbmUgVlNDVFJMX1ZQSVhGTVRfVlkwVVkxCSgoMHhkKSA8PCBGU2hmdChWU0NUUkxfVlBJWEZNVCkpCisjZGVmaW5lIFZTQ1RSTF9WUElYRk1UX1kwVVkxVgkoKDB4ZSkgPDwgRlNoZnQoVlNDVFJMX1ZQSVhGTVQpKQorI2RlZmluZSBWU0NUUkxfVlBJWEZNVF9ZMFZZMVUJKCgweGYpIDw8IEZTaGZ0KFZTQ1RSTF9WUElYRk1UKSkKKyNkZWZpbmUgVlNDVFJMX0dBTU1BX0VOCQkoMSA8PCAyNikKKyNkZWZpbmUgVlNDVFJMX0NTQ19FTgkJKDEgPDwgMjUpCisjZGVmaW5lIFZTQ1RSTF9DT1NJVEVECQkoMSA8PCAyMikKKyNkZWZpbmUgVlNDVFJMX1ZTV0lEVEgJCUZsZCgxMSwxMSkKKyNkZWZpbmUgVnNjdHJsX1dpZHRoKFBpeGVscykgLyogVmlkZW8gV2lkdGggWzEtMjA0OF0gKi8gXAorCQkJKCgoUGl4ZWxzKSAtIDEpIDw8IEZTaGZ0KFZTQ1RSTF9WU1dJRFRIKSkKKyNkZWZpbmUgVlNDVFJMX1ZTSEVJR0hUCQlGbGQoMTEsMCkKKyNkZWZpbmUgVnNjdHJsX0hlaWdodChQaXhlbHMpIC8qIFZpZGVvIEhlaWdodCBbMS0yMDQ4XSAqLyBcCisJCQkoKChQaXhlbHMpIC0gMSkgPDwgRlNoZnQoVlNDVFJMX1ZTSEVJR0hUKSkKKworLyogVkJCQVNFIC0gVmlkZW8gQmxlbmRpbmcgQmFzZSBSZWdpc3RlciAqLworI2RlZmluZSBWQkJBU0VfR0xBTFBIQQkJRmxkKDgsMjQpCisjZGVmaW5lIFZiYmFzZV9HbGFscGhhKHgpCSgoeCkgPDwgRlNoZnQoVkJCQVNFX0dMQUxQSEEpKQorCisjZGVmaW5lIFZCQkFTRV9DT0xLRVkJCUZsZCgyNCwwKQorI2RlZmluZSBWYmJhc2VfQ29sa2V5KHgpCSgoeCkgPDwgRlNoZnQoVkJCQVNFX0NPTEtFWSkpCisKKy8qIFZDTVNLIC0gVmlkZW8gQ29sb3IgS2V5IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVkNNU0tfQ09MS0VZX00JCUZsZCgyNCwwKQorI2RlZmluZSBWY21za19jb2xrZXlfbSh4KQkoKHgpIDw8IEZTaGZ0KFZDTVNLX0NPTEtFWV9NKSkKKworLyogVlNDQURSIC0gVmlkZW8gU3RyZWFtIENvbnRyb2wgUmRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBWU0NBRFJfU1RSX0VOCQkoMSA8PCAzMSkKKyNkZWZpbmUgVlNDQURSX0NPTEtFWV9FTgkoMSA8PCAzMCkKKyNkZWZpbmUgVlNDQURSX0NPTEtFWVNSQwkoMSA8PCAyOSkKKyNkZWZpbmUgVlNDQURSX0JMRU5EX00JCUZsZCgyLDI3KQorI2RlZmluZSBWU0NBRFJfQkxFTkRfTk9ORQkoKDB4MCkgPDwgRlNoZnQoVlNDQURSX0JMRU5EX00pKQorI2RlZmluZSBWU0NBRFJfQkxFTkRfSU5WCSgoMHgxKSA8PCBGU2hmdChWU0NBRFJfQkxFTkRfTSkpCisjZGVmaW5lIFZTQ0FEUl9CTEVORF9HTE9CCSgoMHgyKSA8PCBGU2hmdChWU0NBRFJfQkxFTkRfTSkpCisjZGVmaW5lIFZTQ0FEUl9CTEVORF9QSVgJKCgweDMpIDw8IEZTaGZ0KFZTQ0FEUl9CTEVORF9NKSkKKyNkZWZpbmUgVlNDQURSX0JMRU5EX1BPUwlGbGQoMiwyNCkKKyNkZWZpbmUgVlNDQURSX0JMRU5EX0dGWAkoKDB4MCkgPDwgRlNoZnQoVlNDQURSX0JMRU5EX1BPUykpCisjZGVmaW5lIFZTQ0FEUl9CTEVORF9WSUQJKCgweDEpIDw8IEZTaGZ0KFZTQ0FEUl9CTEVORF9QT1MpKQorI2RlZmluZSBWU0NBRFJfQkxFTkRfQ1VSCSgoMHgyKSA8PCBGU2hmdChWU0NBRFJfQkxFTkRfUE9TKSkKKyNkZWZpbmUgVlNDQURSX1ZCQVNFX0FEUglGbGQoMjMsMCkKKyNkZWZpbmUgVnNjYWRyX1ZiYXNlX0Fkcih4KQkoKHgpIDw8IEZTaGZ0KFZTQ0FEUl9WQkFTRV9BRFIpKQorCisvKiBWVUJBU0UgLSBWaWRlbyBVIEJhc2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVlVCQVNFX1VWSEFMRlNUUgkoMSA8PCAzMSkKKyNkZWZpbmUgVlVCQVNFX1VCQVNFX0FEUglGbGQoMjQsMCkKKyNkZWZpbmUgVnViYXNlX1ViYXNlX0Fkcih4KQkoKHgpIDw8IEZTaGZ0KFZVQkFTRV9VQkFTRV9BRFIpKQorCisvKiBWVkJBU0UgLSBWaWRlbyBWIEJhc2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVlZCQVNFX1ZCQVNFX0FEUglGbGQoMjQsMCkKKyNkZWZpbmUgVnZiYXNlX1ZiYXNlX0Fkcih4KQkoKHgpIDw8IEZTaGZ0KFZWQkFTRV9WQkFTRV9BRFIpKQorCisvKiBWU0FEUiAtIFZpZGVvIFN0cmlkZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIFZTQURSX1NSQ1NUUklERQkJRmxkKDEwLDIyKQorI2RlZmluZSBWc2Fkcl9TcmNzdHJpZGUoeCkJKCh4KSA8PCBGU2hmdChWU0FEUl9TUkNTVFJJREUpKQorI2RlZmluZSBWU0FEUl9YU1RBUlQJCUZsZCgxMSwxMSkKKyNkZWZpbmUgVnNhZHJfWHN0YXJ0KHgpCQkoKHgpIDw8IEZTaGZ0KFZTQURSX1hTVEFSVCkpCisjZGVmaW5lIFZTQURSX1lTVEFSVAkJRmxkKDExLDApCisjZGVmaW5lIFZzYWRyX1lzdGFydCh4KQkJKCh4KSA8PCBGU2hmdChWU0FEUl9ZU1RBUlQpKQorCiAvKiBIQ0NUUkwgLSBIYXJkd2FyZSBDdXJzb3IgUmVnaXN0ZXIgZmllbGRzICovCiAjZGVmaW5lIEhDQ1RSTF9DVVJfRU4JKDEgPDwgMzEpCiAjZGVmaW5lIEhDQ1RSTF9DT0xLRVlfRU4JKDEgPDwgMjkpCkBAIC0zOTQsNiArNDU1LDMwIEBACiAjZGVmaW5lIERNQ1RSTF9CVVJTVExFTglGbGQoNiwwKQogI2RlZmluZSBEbWN0cmxfQnVyc3RsZW4oeCkJKCh4KSA8PCBGU2hmdChETUNUUkxfQlVSU1RMRU4pKQogCisvKiBESU5UUlMgLSBEaXNwbGF5IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElOVFJTX0NVUl9PUl9TCQkoMSA8PCAxOCkKKyNkZWZpbmUgRElOVFJTX1NUUjJfT1JfUwkoMSA8PCAxNykKKyNkZWZpbmUgRElOVFJTX1NUUjFfT1JfUwkoMSA8PCAxNikKKyNkZWZpbmUgRElOVFJTX0NVUl9VUl9TCQkoMSA8PCA2KQorI2RlZmluZSBESU5UUlNfU1RSMl9VUl9TCSgxIDw8IDUpCisjZGVmaW5lIERJTlRSU19TVFIxX1VSX1MJKDEgPDwgNCkKKyNkZWZpbmUgRElOVFJTX1ZFVkVOVDFfUwkoMSA8PCAzKQorI2RlZmluZSBESU5UUlNfVkVWRU5UMF9TCSgxIDw8IDIpCisjZGVmaW5lIERJTlRSU19IQkxOSzFfUwkJKDEgPDwgMSkKKyNkZWZpbmUgRElOVFJTX0hCTE5LMF9TCQkoMSA8PCAwKQorCisvKiBESU5UUkUgLSBEaXNwbGF5IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElOVFJFX0NVUl9PUl9FTgkoMSA8PCAxOCkKKyNkZWZpbmUgRElOVFJFX1NUUjJfT1JfRU4JKDEgPDwgMTcpCisjZGVmaW5lIERJTlRSRV9TVFIxX09SX0VOCSgxIDw8IDE2KQorI2RlZmluZSBESU5UUkVfQ1VSX1VSX0VOCSgxIDw8IDYpCisjZGVmaW5lIERJTlRSRV9TVFIyX1VSX0VOCSgxIDw8IDUpCisjZGVmaW5lIERJTlRSRV9TVFIxX1VSX0VOCSgxIDw8IDQpCisjZGVmaW5lIERJTlRSRV9WRVZFTlQxX0VOCSgxIDw8IDMpCisjZGVmaW5lIERJTlRSRV9WRVZFTlQwX0VOCSgxIDw8IDIpCisjZGVmaW5lIERJTlRSRV9IQkxOSzFfRU4JKDEgPDwgMSkKKyNkZWZpbmUgRElOVFJFX0hCTE5LMF9FTgkoMSA8PCAwKQorCiAKIC8qIERMU1RTIC0gZGlzcGxheSBsb2FkIHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSBETFNUU19STERfQURPTkUJKDEgPDwgMjMpCkBAIC00MDMsMTYgKzQ4OCw0MSBAQAogI2RlZmluZSBETExDVFJMX1JMRF9BRFJMTglGbGQoOCwyNCkKICNkZWZpbmUgRGxsY3RybF9SbGRfQWRybG4oeCkJKCh4KSA8PCBGU2hmdChETExDVFJMX1JMRF9BRFJMTikpCiAKKy8qIENMSVBDVFJMIC0gQ2xpcHBpbmcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBDTElQQ1RSTF9IU0tJUAkJRmxkKDExLDE2KQorI2RlZmluZSBDbGlwY3RybF9Ic2tpcAkJKCh4KSA8PCBGU2hmdChDTElQQ1RSTF9IU0tJUCkpCisjZGVmaW5lIENMSVBDVFJMX1ZTS0lQCQlGbGQoMTEsMCkKKyNkZWZpbmUgQ2xpcGN0cmxfVnNraXAJCSgoeCkgPDwgRlNoZnQoQ0xJUENUUkxfVlNLSVApKQorCiAvKiBTUE9DVFJMIC0gU2NhbGUgUGl0Y2gvT3JkZXIgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBTUE9DVFJMX0hfU0NfQlAJCSgxIDw8IDMxKQogI2RlZmluZSBTUE9DVFJMX1ZfU0NfQlAJCSgxIDw8IDMwKQogI2RlZmluZSBTUE9DVFJMX0hWX1NDX09SCSgxIDw8IDI5KQogI2RlZmluZSBTUE9DVFJMX1ZTX1VSX0MJCSgxIDw8IDI3KQotI2RlZmluZSBTUE9DVFJMX1ZPUkRFUglGbGQoMiwxNikKKyNkZWZpbmUgU1BPQ1RSTF9WT1JERVIJCUZsZCgyLDE2KQogI2RlZmluZSBTUE9DVFJMX1ZPUkRFUl8xVEFQCSgoMHgwKSA8PCBGU2hmdChTUE9DVFJMX1ZPUkRFUikpCiAjZGVmaW5lIFNQT0NUUkxfVk9SREVSXzJUQVAJKCgweDEpIDw8IEZTaGZ0KFNQT0NUUkxfVk9SREVSKSkKICNkZWZpbmUgU1BPQ1RSTF9WT1JERVJfNFRBUAkoKDB4MykgPDwgRlNoZnQoU1BPQ1RSTF9WT1JERVIpKQotI2RlZmluZSBTUE9DVFJMX1ZQSVRDSAlGbGQoMTYsMCkKKyNkZWZpbmUgU1BPQ1RSTF9WUElUQ0gJCUZsZCgxNiwwKQogI2RlZmluZSBTcG9jdHJsX1ZwaXRjaCh4KQkoKHgpIDw8IEZTaGZ0KFNQT0NUUkxfVlBJVENIKSkKIAorLyogU1ZDVFJMIC0gU2NhbGUgVmVydGljYWwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTVkNUUkxfSU5JVElBTDEJCUZsZCgxNiwxNikKKyNkZWZpbmUgU3ZjdHJsX0luaXRpYWwxKHgpCSgoeCkgPDwgRlNoZnQoU1ZDVFJMX0lOSVRJQUwxKSkKKyNkZWZpbmUgU1ZDVFJMX0lOSVRJQUwyCQlGbGQoMTYsMCkKKyNkZWZpbmUgU3ZjdHJsX0luaXRpYWwyKHgpCSgoeCkgPDwgRlNoZnQoU1ZDVFJMX0lOSVRJQUwyKSkKKworLyogU0hDVFJMIC0gU2NhbGUgSG9yaXpvbnRhbCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNIQ1RSTF9ISU5JVElBTAkJRmxkKDE2LDE2KQorI2RlZmluZSBTaGN0cmxfSGluaXRpYWwoeCkJKCh4KSA8PCBGU2hmdChTSENUUkxfSElOSVRJQUwpKQorI2RlZmluZSBTSENUUkxfSERFQ0lNCQkoMSA8PCAxNSkKKyNkZWZpbmUgU0hDVFJMX0hQSVRDSAkJRmxkKDE1LDApCisjZGVmaW5lIFNoY3RybF9IcGl0Y2goeCkJKCh4KSA8PCBGU2hmdChTSENUUkxfSFBJVENIKSkKKworLyogU1NTSVpFIC0gU2NhbGUgU3VyZmFjZSBTaXplIFJlZ2lzdGVyICovCisjZGVmaW5lIFNTU0laRV9TQ19XSURUSAkJRmxkKDExLDE2KQorI2RlZmluZSBTc3NpemVfU2NfV2lkdGgoeCkJKCh4KSA8PCBGU2hmdChTU1NJWkVfU0NfV0lEVEgpKQorI2RlZmluZSBTU1NJWkVfU0NfSEVJR0hUCUZsZCgxMSwwKQorI2RlZmluZSBTc3NpemVfU2NfSGVpZ2h0KHgpCSgoeCkgPDwgRlNoZnQoU1NTSVpFX1NDX0hFSUdIVCkpCisKICNlbmRpZiAvKiBfX1JFR19CSVRTXzI3MDBHXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYngvcmVncy5oIGIvZHJpdmVycy92aWRlby9tYngvcmVncy5oCmluZGV4IGFkMjBiZTAuLmE3YzYzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWJ4L3JlZ3MuaAorKysgYi9kcml2ZXJzL3ZpZGVvL21ieC9yZWdzLmgKQEAgLTEyNyw3ICsxMjcsNyBAQAogI2RlZmluZSBIU0NPRUZGMAlfX1JFR18yNzAwRygweDAwMDAyMWI0KQogI2RlZmluZSBIU0NPRUZGMQlfX1JFR18yNzAwRygweDAwMDAyMWI4KQogI2RlZmluZSBIU0NPRUZGMglfX1JFR18yNzAwRygweDAwMDAyMWJjKQotI2RlZmluZSBIU0NPRUZGMwlfX1JFR18yNzAwRygweDAwMDAyMWIwKQorI2RlZmluZSBIU0NPRUZGMwlfX1JFR18yNzAwRygweDAwMDAyMWMwKQogI2RlZmluZSBIU0NPRUZGNAlfX1JFR18yNzAwRygweDAwMDAyMWM0KQogI2RlZmluZSBIU0NPRUZGNQlfX1JFR18yNzAwRygweDAwMDAyMWM4KQogI2RlZmluZSBIU0NPRUZGNglfX1JFR18yNzAwRygweDAwMDAyMWNjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tb2RlZGIuYyBiL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKaW5kZXggZDEyNjc5MC4uNWRmNDFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tb2RlZGIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCkBAIC0zNCw4ICszNCw2IEBACiAgICAgICogIFN0YW5kYXJkIHZpZGVvIG1vZGUgZGVmaW5pdGlvbnMgKHRha2VuIGZyb20gWEZyZWU4NikKICAgICAgKi8KIAotI2RlZmluZSBERUZBVUxUX01PREVEQl9JTkRFWAkwCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1vZGVkYltdID0gewogICAgIHsKIAkvKiA2NDB4NDAwIEAgNzAgSHosIDMxLjUga0h6IGhzeW5jICovCkBAIC01MDUsOCArNTAzLDEwIEBACiAJZGIgPSBtb2RlZGI7CiAJZGJzaXplID0gQVJSQVlfU0laRShtb2RlZGIpOwogICAgIH0KKwogICAgIGlmICghZGVmYXVsdF9tb2RlKQotCWRlZmF1bHRfbW9kZSA9ICZtb2RlZGJbREVGQVVMVF9NT0RFREJfSU5ERVhdOworCWRlZmF1bHRfbW9kZSA9ICZkYlswXTsKKwogICAgIGlmICghZGVmYXVsdF9icHApCiAJZGVmYXVsdF9icHAgPSA4OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL25lb2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL25lb2ZiLmMKaW5kZXggNTlhNmY1Zi4uZGVhZjgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9uZW9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbmVvZmIuYwpAQCAtMTkzMiw3ICsxOTMyLDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiLS0tIE5lbyBleHRlbmRlZCByZWdpc3RlciBkdW1wIC0tLVxuIik7CiAJZm9yIChpbnQgdyA9IDA7IHcgPCAweDg1OyB3KyspCiAJCXByaW50ayhLRVJOX0RFQlVHICJDUiAlcDogJXBcbiIsICh2b2lkICopIHcsCi0JCSAgICAgICAodm9pZCAqKSB2Z2FfcmNydChOVUxMLCB3KTsKKwkJICAgICAgICh2b2lkICopIHZnYV9yY3J0KE5VTEwsIHcpKTsKIAlmb3IgKGludCB3ID0gMDsgdyA8IDB4Qzc7IHcrKykKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkdSICVwOiAlcFxuIiwgKHZvaWQgKikgdywKIAkJICAgICAgICh2b2lkICopIHZnYV9yZ2Z4KE5VTEwsIHcpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2FjY2VsLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9hY2NlbC5jCmluZGV4IDRhZWZiOGYuLjllZmI4YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2FjY2VsLmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYWNjZWwuYwpAQCAtMjYxLDQxICsyNjEsNiBAQAogCU5WRG1hS2lja29mZihwYXIpOwogfQogCi11OCBieXRlX3JldlsyNTZdID0gewotCTB4MDAsIDB4ODAsIDB4NDAsIDB4YzAsIDB4MjAsIDB4YTAsIDB4NjAsIDB4ZTAsCi0JMHgxMCwgMHg5MCwgMHg1MCwgMHhkMCwgMHgzMCwgMHhiMCwgMHg3MCwgMHhmMCwKLQkweDA4LCAweDg4LCAweDQ4LCAweGM4LCAweDI4LCAweGE4LCAweDY4LCAweGU4LAotCTB4MTgsIDB4OTgsIDB4NTgsIDB4ZDgsIDB4MzgsIDB4YjgsIDB4NzgsIDB4ZjgsCi0JMHgwNCwgMHg4NCwgMHg0NCwgMHhjNCwgMHgyNCwgMHhhNCwgMHg2NCwgMHhlNCwKLQkweDE0LCAweDk0LCAweDU0LCAweGQ0LCAweDM0LCAweGI0LCAweDc0LCAweGY0LAotCTB4MGMsIDB4OGMsIDB4NGMsIDB4Y2MsIDB4MmMsIDB4YWMsIDB4NmMsIDB4ZWMsCi0JMHgxYywgMHg5YywgMHg1YywgMHhkYywgMHgzYywgMHhiYywgMHg3YywgMHhmYywKLQkweDAyLCAweDgyLCAweDQyLCAweGMyLCAweDIyLCAweGEyLCAweDYyLCAweGUyLAotCTB4MTIsIDB4OTIsIDB4NTIsIDB4ZDIsIDB4MzIsIDB4YjIsIDB4NzIsIDB4ZjIsCi0JMHgwYSwgMHg4YSwgMHg0YSwgMHhjYSwgMHgyYSwgMHhhYSwgMHg2YSwgMHhlYSwKLQkweDFhLCAweDlhLCAweDVhLCAweGRhLCAweDNhLCAweGJhLCAweDdhLCAweGZhLAotCTB4MDYsIDB4ODYsIDB4NDYsIDB4YzYsIDB4MjYsIDB4YTYsIDB4NjYsIDB4ZTYsCi0JMHgxNiwgMHg5NiwgMHg1NiwgMHhkNiwgMHgzNiwgMHhiNiwgMHg3NiwgMHhmNiwKLQkweDBlLCAweDhlLCAweDRlLCAweGNlLCAweDJlLCAweGFlLCAweDZlLCAweGVlLAotCTB4MWUsIDB4OWUsIDB4NWUsIDB4ZGUsIDB4M2UsIDB4YmUsIDB4N2UsIDB4ZmUsCi0JMHgwMSwgMHg4MSwgMHg0MSwgMHhjMSwgMHgyMSwgMHhhMSwgMHg2MSwgMHhlMSwKLQkweDExLCAweDkxLCAweDUxLCAweGQxLCAweDMxLCAweGIxLCAweDcxLCAweGYxLAotCTB4MDksIDB4ODksIDB4NDksIDB4YzksIDB4MjksIDB4YTksIDB4NjksIDB4ZTksCi0JMHgxOSwgMHg5OSwgMHg1OSwgMHhkOSwgMHgzOSwgMHhiOSwgMHg3OSwgMHhmOSwKLQkweDA1LCAweDg1LCAweDQ1LCAweGM1LCAweDI1LCAweGE1LCAweDY1LCAweGU1LAotCTB4MTUsIDB4OTUsIDB4NTUsIDB4ZDUsIDB4MzUsIDB4YjUsIDB4NzUsIDB4ZjUsCi0JMHgwZCwgMHg4ZCwgMHg0ZCwgMHhjZCwgMHgyZCwgMHhhZCwgMHg2ZCwgMHhlZCwKLQkweDFkLCAweDlkLCAweDVkLCAweGRkLCAweDNkLCAweGJkLCAweDdkLCAweGZkLAotCTB4MDMsIDB4ODMsIDB4NDMsIDB4YzMsIDB4MjMsIDB4YTMsIDB4NjMsIDB4ZTMsCi0JMHgxMywgMHg5MywgMHg1MywgMHhkMywgMHgzMywgMHhiMywgMHg3MywgMHhmMywKLQkweDBiLCAweDhiLCAweDRiLCAweGNiLCAweDJiLCAweGFiLCAweDZiLCAweGViLAotCTB4MWIsIDB4OWIsIDB4NWIsIDB4ZGIsIDB4M2IsIDB4YmIsIDB4N2IsIDB4ZmIsCi0JMHgwNywgMHg4NywgMHg0NywgMHhjNywgMHgyNywgMHhhNywgMHg2NywgMHhlNywKLQkweDE3LCAweDk3LCAweDU3LCAweGQ3LCAweDM3LCAweGI3LCAweDc3LCAweGY3LAotCTB4MGYsIDB4OGYsIDB4NGYsIDB4Y2YsIDB4MmYsIDB4YWYsIDB4NmYsIDB4ZWYsCi0JMHgxZiwgMHg5ZiwgMHg1ZiwgMHhkZiwgMHgzZiwgMHhiZiwgMHg3ZiwgMHhmZiwKLX07Ci0KIGludCBudmlkaWFmYl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBudmlkaWFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2JhY2tsaWdodC5jCmluZGV4IDViNzVhZTQuLmRmOTM0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2JhY2tsaWdodC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIm52aWRpYWJsJWQiLCBpbmZvLT5ub2RlKTsKIAotCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBwYXIsICZudmlkaWFfYmxfZGF0YSk7CisJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsIGluZm8tPmRldiwgcGFyLCAmbnZpZGlhX2JsX2RhdGEpOwogCWlmIChJU19FUlIoYmQpKSB7CiAJCWluZm8tPmJsX2RldiA9IE5VTEw7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIm52aWRpYTogQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9pMmMuYwppbmRleCAxOWVlZjNhLi44NDU0YWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9pMmMuYwpAQCAtMTQ3LDE1ICsxNDcsMTUgQEAKIHZvaWQgbnZpZGlhX2RlbGV0ZV9pMmNfYnVzc2VzKHN0cnVjdCBudmlkaWFfcGFyICpwYXIpCiB7CiAJaWYgKHBhci0+Y2hhblswXS5wYXIpCi0JCWkyY19iaXRfZGVsX2J1cygmcGFyLT5jaGFuWzBdLmFkYXB0ZXIpOworCQlpMmNfZGVsX2FkYXB0ZXIoJnBhci0+Y2hhblswXS5hZGFwdGVyKTsKIAlwYXItPmNoYW5bMF0ucGFyID0gTlVMTDsKIAogCWlmIChwYXItPmNoYW5bMV0ucGFyKQotCQlpMmNfYml0X2RlbF9idXMoJnBhci0+Y2hhblsxXS5hZGFwdGVyKTsKKwkJaTJjX2RlbF9hZGFwdGVyKCZwYXItPmNoYW5bMV0uYWRhcHRlcik7CiAJcGFyLT5jaGFuWzFdLnBhciA9IE5VTEw7CiAKIAlpZiAocGFyLT5jaGFuWzJdLnBhcikKLQkJaTJjX2JpdF9kZWxfYnVzKCZwYXItPmNoYW5bMl0uYWRhcHRlcik7CisJCWkyY19kZWxfYWRhcHRlcigmcGFyLT5jaGFuWzJdLmFkYXB0ZXIpOwogCXBhci0+Y2hhblsyXS5wYXIgPSBOVUxMOwogCiB9CkBAIC0yMTAsMTEgKzIxMCw4IEBACiAJCS8qIHRyeSB0byBnZXQgZnJvbSBmaXJtd2FyZSAqLwogCQljb25zdCB1OCAqZSA9IGZiX2Zpcm13YXJlX2VkaWQoaW5mby0+ZGV2aWNlKTsKIAotCQlpZiAoZSAhPSBOVUxMKSB7Ci0JCQllZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoZWRpZCkKLQkJCQltZW1jcHkoZWRpZCwgZSwgRURJRF9MRU5HVEgpOwotCQl9CisJCWlmIChlICE9IE5VTEwpCisJCQllZGlkID0ga21lbWR1cChlLCBFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CiAJfQogCiAJKm91dF9lZGlkID0gZWRpZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2xvY2FsLmggYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9sb2NhbC5oCmluZGV4IDQyNDNkN2YuLmUwMDlkMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2xvY2FsLmgKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfbG9jYWwuaApAQCAtOTYsMTMgKzk2LDE2IEBACiAjZGVmaW5lIFJFQURfR0VUKHBhcikgKE5WX1JEMzIoJihwYXIpLT5GSUZPWzB4MDAxMV0sIDApID4+IDIpCiAKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKworI2luY2x1ZGUgPGxpbnV4L2JpdHJldi5oPgorCiAjZGVmaW5lIHJldmVyc2Vfb3JkZXIobCkgICAgICAgIFwKIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXU4ICphID0gKHU4ICopKGwpOyAgICAgIFwKLQkqYSA9IGJ5dGVfcmV2WyphXSwgYSsrOyBcCi0JKmEgPSBieXRlX3JldlsqYV0sIGErKzsgXAotCSphID0gYnl0ZV9yZXZbKmFdLCBhKys7IFwKLQkqYSA9IGJ5dGVfcmV2WyphXTsgICAgICBcCisJYVswXSA9IGJpdHJldjgoYVswXSk7ICAgXAorCWFbMV0gPSBiaXRyZXY4KGFbMV0pOyAgIFwKKwlhWzJdID0gYml0cmV2OChhWzJdKTsgICBcCisJYVszXSA9IGJpdHJldjgoYVszXSk7ICAgXAogfSB3aGlsZSgwKQogI2Vsc2UKICNkZWZpbmUgcmV2ZXJzZV9vcmRlcihsKSBkbyB7IH0gd2hpbGUoMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X29mLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9vZi5jCmluZGV4IGQ5YWY4OGMuLjE4MTg3NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X29mLmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfb2YuYwpAQCAtNzIsMTAgKzcyLDkgQEAKIAkJfQogCX0KIAlpZiAocGVkaWQpIHsKLQkJKm91dF9lZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CisJCSpvdXRfZWRpZCA9IGttZW1kdXAocGVkaWQsIEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKIAkJaWYgKCpvdXRfZWRpZCA9PSBOVUxMKQogCQkJcmV0dXJuIC0xOwotCQltZW1jcHkoKm91dF9lZGlkLCBwZWRpZCwgRURJRF9MRU5HVEgpOwogCQlwcmludGsoS0VSTl9ERUJVRyAibnZpZGlhZmI6IEZvdW5kIE9GIEVESUQgZm9yIGhlYWQgJWRcbiIsIGNvbm4pOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9wcm90by5oIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfcHJvdG8uaAppbmRleCA4NjEyNzEwLi40MzA1OGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9wcm90by5oCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3Byb3RvLmgKQEAgLTYyLDcgKzYyLDYgQEAKIGV4dGVybiB2b2lkIG52aWRpYWZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKTsKIGV4dGVybiBpbnQgbnZpZGlhZmJfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1leHRlcm4gdTggYnl0ZV9yZXZbMjU2XTsKIAogLyogaW4gbnZfYmFja2xpZ2h0LmggKi8KICNpZmRlZiBDT05GSUdfRkJfTlZJRElBX0JBQ0tMSUdIVApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vZmZiLmMgYi9kcml2ZXJzL3ZpZGVvL29mZmIuYwppbmRleCA5YTQwYmJlLi45NTc2YTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29mZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL29mZmIuYwpAQCAtNDAyLDYgKzQwMiw5IEBACiAJZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKIAogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApIHsKKwkJaW91bm1hcChwYXItPmNtYXBfYWRyKTsKKwkJcGFyLT5jbWFwX2FkciA9IE5VTEw7CisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogCQlrZnJlZShpbmZvKTsKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlc19zdGFydCwgcmVzX3NpemUpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3A5MTAwLmMgYi9kcml2ZXJzL3ZpZGVvL3A5MTAwLmMKaW5kZXggNTZhYzUxZC4uNjM3Yjc4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wOTEwMC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcDkxMDAuYwpAQCAtMjk3LDcgKzI5Nyw4IEBACiAJYWxsLT5pbmZvLnNjcmVlbl9iYXNlID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzJdLCAwLAogCQkJCQkgICBhbGwtPnBhci5mYnNpemUsICJwOTEwMCByYW0iKTsKIAlpZiAoIWFsbC0+aW5mby5zY3JlZW5fYmFzZSkgewotCQlvZl9pb3VubWFwKGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgcDkxMDBfcmVncykpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sCisJCQkgICBhbGwtPnBhci5yZWdzLCBzaXplb2Yoc3RydWN0IHA5MTAwX3JlZ3MpKTsKIAkJa2ZyZWUoYWxsKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMzA2LDggKzMwNywxMCBAQAogCXA5MTAwX2JsYW5rKDAsICZhbGwtPmluZm8pOwogCiAJaWYgKGZiX2FsbG9jX2NtYXAoJmFsbC0+aW5mby5jbWFwLCAyNTYsIDApKSB7Ci0JCW9mX2lvdW5tYXAoYWxsLT5wYXIucmVncywgc2l6ZW9mKHN0cnVjdCBwOTEwMF9yZWdzKSk7Ci0JCW9mX2lvdW5tYXAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sCisJCQkgICBhbGwtPnBhci5yZWdzLCBzaXplb2Yoc3RydWN0IHA5MTAwX3JlZ3MpKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzJdLAorCQkJICAgYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOwogCQlrZnJlZShhbGwpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0zMTcsOCArMzIwLDEwIEBACiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7Ci0JCW9mX2lvdW5tYXAoYWxsLT5wYXIucmVncywgc2l6ZW9mKHN0cnVjdCBwOTEwMF9yZWdzKSk7Ci0JCW9mX2lvdW5tYXAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sCisJCQkgICBhbGwtPnBhci5yZWdzLCBzaXplb2Yoc3RydWN0IHA5MTAwX3JlZ3MpKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzJdLAorCQkJICAgYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOwogCQlrZnJlZShhbGwpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTM0MCwxOSArMzQ1LDE5IEBACiAJcmV0dXJuIHA5MTAwX2luaXRfb25lKG9wKTsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgcDkxMDBfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHA5MTAwX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKLQlzdHJ1Y3QgYWxsX2luZm8gKmFsbCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKIAogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CiAJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7CiAKLQlvZl9pb3VubWFwKGFsbC0+cGFyLnJlZ3MsIHNpemVvZihzdHJ1Y3QgcDkxMDBfcmVncykpOwotCW9mX2lvdW5tYXAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOworCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVswXSwgYWxsLT5wYXIucmVncywgc2l6ZW9mKHN0cnVjdCBwOTEwMF9yZWdzKSk7CisJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzJdLCBhbGwtPmluZm8uc2NyZWVuX2Jhc2UsIGFsbC0+cGFyLmZic2l6ZSk7CiAKIAlrZnJlZShhbGwpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbGF0aW51bWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYwppbmRleCBjYjI2YzZkLi4yMzM4NzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BsYXRpbnVtZmIuYwpAQCAtNjI3LDYgKzYyNyw5IEBACiAJCiAJcmMgPSBwbGF0aW51bV9pbml0X2ZiKGluZm8pOwogCWlmIChyYyAhPSAwKSB7CisJCWlvdW5tYXAocGluZm8tPmZyYW1lX2J1ZmZlcik7CisJCWlvdW5tYXAocGluZm8tPnBsYXRpbnVtX3JlZ3MpOworCQlpb3VubWFwKHBpbmZvLT5jbWFwX3JlZ3MpOwogCQlkZXZfc2V0X2RydmRhdGEoJm9kZXYtPmRldiwgTlVMTCk7CiAJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wbWFnYi1iLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYwppbmRleCA3M2UyZDdkLi5hMDZhMDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcG1hZ2JiZmJfb3NjX3NldHVwKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0YXRpYyB1bnNpZ25lZCBpbnQgcG1hZ2JiZmJfZnJlcXNbXSBfX2luaXRkYXRhID0gewotCQkxMzA4MDgsIDExOTg0MywgMTA0MDAwLCA5Mjk4MCwgNzQzNjcsIDcyODAwLAorCQkxMzA4MDgsIDExOTg0MywgMTA0MDAwLCA5Mjk4MCwgNzQzNzAsIDcyODAwLAogCQk2OTE5NywgNjYwMDAsIDY1MDAwLCA1MDM1MCwgMzYwMDAsIDMyMDAwLCAyNTE3NQogCX07CiAJc3RydWN0IHBtYWdiYmZiX3BhciAqcGFyID0gaW5mby0+cGFyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wdnIyZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKaW5kZXggYzdiYzgwOS4uYTkzNjE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wdnIyZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCkBAIC05MDUsNiArOTA1LDE1IEBACiAKIHN0YXRpYyB2b2lkIHB2cjJmYl9kY19leGl0KHZvaWQpCiB7CisJaWYgKGZiX2luZm8tPnNjcmVlbl9iYXNlKSB7CisJCWlvdW5tYXAoZmJfaW5mby0+c2NyZWVuX2Jhc2UpOworCQlmYl9pbmZvLT5zY3JlZW5fYmFzZSA9IE5VTEw7CisJfQorCWlmIChjdXJyZW50cGFyLT5tbWlvX2Jhc2UpIHsKKwkJaW91bm1hcCgodm9pZCAqKWN1cnJlbnRwYXItPm1taW9fYmFzZSk7CisJCWN1cnJlbnRwYXItPm1taW9fYmFzZSA9IDA7CisJfQorCiAJZnJlZV9pcnEoSFdfRVZFTlRfVlNZTkMsIDApOwogI2lmZGVmIENPTkZJR19TSF9ETUEKIAlmcmVlX2RtYShwdnIyZG1hKTsKQEAgLTk0Niw2ICs5NTUsMTUgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHB2cjJmYl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeworCWlmIChmYl9pbmZvLT5zY3JlZW5fYmFzZSkgeworCQlpb3VubWFwKGZiX2luZm8tPnNjcmVlbl9iYXNlKTsKKwkJZmJfaW5mby0+c2NyZWVuX2Jhc2UgPSBOVUxMOworCX0KKwlpZiAoY3VycmVudHBhci0+bW1pb19iYXNlKSB7CisJCWlvdW5tYXAoKHZvaWQgKiljdXJyZW50cGFyLT5tbWlvX2Jhc2UpOworCQljdXJyZW50cGFyLT5tbWlvX2Jhc2UgPSAwOworCX0KKwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwppbmRleCAzOGViMGI2Li5iNDk0N2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5jCkBAIC0xMjE2LDcgKzEyMTYsNyBAQAogCQlkb25lOgogCQkJaWYgKHJlc19zcGVjaWZpZWQpIHsKIAkJCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkaW5nIHJlc29sdXRpb246ICVkeCVkXG4iLCB4cmVzLCB5cmVzKTsKLQkJCQlpbmYtPnhyZXMgPSB4cmVzOyBpbmYtPnlyZXMgPSB5cmVzOworCQkJCWluZi0+bW9kZXNbMF0ueHJlcyA9IHhyZXM7IGluZi0+bW9kZXNbMF0ueXJlcyA9IHlyZXM7CiAJCQl9CiAJCQlpZiAoYnBwX3NwZWNpZmllZCkKIAkJCQlzd2l0Y2ggKGJwcCkgewpAQCAtMTIyNSw0OCArMTIyNSw0OCBAQAogCQkJCWNhc2UgNDoKIAkJCQljYXNlIDg6CiAJCQkJY2FzZSAxNjoKLQkJCQkJaW5mLT5icHAgPSBicHA7CisJCQkJCWluZi0+bW9kZXNbMF0uYnBwID0gYnBwOwogCQkJCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkaW5nIGJpdCBkZXB0aDogJWRcbiIsIGJwcCk7CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6CiAJCQkJCWRldl9lcnIoZGV2LCAiRGVwdGggJWQgaXMgbm90IHZhbGlkXG4iLCBicHApOwogCQkJCX0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAicGl4Y2xvY2s6IiwgOSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+cGl4Y2xvY2sgPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs5LCBOVUxMLCAwKTsKLQkJCWRldl9pbmZvKGRldiwgIm92ZXJyaWRlIHBpeGNsb2NrOiAlbGRcbiIsIGluZi0+cGl4Y2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgaW5mLT5tb2Rlc1swXS5waXhjbG9jayA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzksIE5VTEwsIDApOworCQkJZGV2X2luZm8oZGV2LCAib3ZlcnJpZGUgcGl4Y2xvY2s6ICVsZFxuIiwgaW5mLT5tb2Rlc1swXS5waXhjbG9jayk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgImxlZnQ6IiwgNSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bGVmdF9tYXJnaW4gPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs1LCBOVUxMLCAwKTsKLQkJCWRldl9pbmZvKGRldiwgIm92ZXJyaWRlIGxlZnQ6ICV1XG4iLCBpbmYtPmxlZnRfbWFyZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bW9kZXNbMF0ubGVmdF9tYXJnaW4gPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs1LCBOVUxMLCAwKTsKKwkJCWRldl9pbmZvKGRldiwgIm92ZXJyaWRlIGxlZnQ6ICV1XG4iLCBpbmYtPm1vZGVzWzBdLmxlZnRfbWFyZ2luKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAicmlnaHQ6IiwgNikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+cmlnaHRfbWFyZ2luID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrNiwgTlVMTCwgMCk7Ci0JCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSByaWdodDogJXVcbiIsIGluZi0+cmlnaHRfbWFyZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bW9kZXNbMF0ucmlnaHRfbWFyZ2luID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrNiwgTlVMTCwgMCk7CisJCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSByaWdodDogJXVcbiIsIGluZi0+bW9kZXNbMF0ucmlnaHRfbWFyZ2luKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidXBwZXI6IiwgNikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+dXBwZXJfbWFyZ2luID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrNiwgTlVMTCwgMCk7Ci0JCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSB1cHBlcjogJXVcbiIsIGluZi0+dXBwZXJfbWFyZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bW9kZXNbMF0udXBwZXJfbWFyZ2luID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrNiwgTlVMTCwgMCk7CisJCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSB1cHBlcjogJXVcbiIsIGluZi0+bW9kZXNbMF0udXBwZXJfbWFyZ2luKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAibG93ZXI6IiwgNikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bG93ZXJfbWFyZ2luID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrNiwgTlVMTCwgMCk7Ci0JCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSBsb3dlcjogJXVcbiIsIGluZi0+bG93ZXJfbWFyZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bW9kZXNbMF0ubG93ZXJfbWFyZ2luID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrNiwgTlVMTCwgMCk7CisJCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSBsb3dlcjogJXVcbiIsIGluZi0+bW9kZXNbMF0ubG93ZXJfbWFyZ2luKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAiaHN5bmNsZW46IiwgOSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+aHN5bmNfbGVuID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrOSwgTlVMTCwgMCk7Ci0JCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSBoc3luY2xlbjogJXVcbiIsIGluZi0+aHN5bmNfbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bW9kZXNbMF0uaHN5bmNfbGVuID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrOSwgTlVMTCwgMCk7CisJCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSBoc3luY2xlbjogJXVcbiIsIGluZi0+bW9kZXNbMF0uaHN5bmNfbGVuKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidnN5bmNsZW46IiwgOSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+dnN5bmNfbGVuID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrOSwgTlVMTCwgMCk7Ci0JCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSB2c3luY2xlbjogJXVcbiIsIGluZi0+dnN5bmNfbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZi0+bW9kZXNbMF0udnN5bmNfbGVuID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrOSwgTlVMTCwgMCk7CisJCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSB2c3luY2xlbjogJXVcbiIsIGluZi0+bW9kZXNbMF0udnN5bmNfbGVuKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAiaHN5bmM6IiwgNikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaW1wbGVfc3RydG91bCh0aGlzX29wdCs2LCBOVUxMLCAwKSA9PSAwKSB7CiAJCQkJZGV2X2luZm8oZGV2LCAib3ZlcnJpZGUgaHN5bmM6IEFjdGl2ZSBMb3dcbiIpOwotCQkJCWluZi0+c3luYyAmPSB+RkJfU1lOQ19IT1JfSElHSF9BQ1Q7CisJCQkJaW5mLT5tb2Rlc1swXS5zeW5jICY9IH5GQl9TWU5DX0hPUl9ISUdIX0FDVDsKIAkJCX0gZWxzZSB7CiAJCQkJZGV2X2luZm8oZGV2LCAib3ZlcnJpZGUgaHN5bmM6IEFjdGl2ZSBIaWdoXG4iKTsKLQkJCQlpbmYtPnN5bmMgfD0gRkJfU1lOQ19IT1JfSElHSF9BQ1Q7CisJCQkJaW5mLT5tb2Rlc1swXS5zeW5jIHw9IEZCX1NZTkNfSE9SX0hJR0hfQUNUOwogCQkJfQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2c3luYzoiLCA2KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzYsIE5VTEwsIDApID09IDApIHsKIAkJCQlkZXZfaW5mbyhkZXYsICJvdmVycmlkZSB2c3luYzogQWN0aXZlIExvd1xuIik7Ci0JCQkJaW5mLT5zeW5jICY9IH5GQl9TWU5DX1ZFUlRfSElHSF9BQ1Q7CisJCQkJaW5mLT5tb2Rlc1swXS5zeW5jICY9IH5GQl9TWU5DX1ZFUlRfSElHSF9BQ1Q7CiAJCQl9IGVsc2UgewogCQkJCWRldl9pbmZvKGRldiwgIm92ZXJyaWRlIHZzeW5jOiBBY3RpdmUgSGlnaFxuIik7Ci0JCQkJaW5mLT5zeW5jIHw9IEZCX1NZTkNfVkVSVF9ISUdIX0FDVDsKKwkJCQlpbmYtPm1vZGVzWzBdLnN5bmMgfD0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUOwogCQkJfQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJkcGM6IiwgNCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaW1wbGVfc3RydG91bCh0aGlzX29wdCs0LCBOVUxMLCAwKSA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3JldHozZmIuYyBiL2RyaXZlcnMvdmlkZW8vcmV0ejNmYi5jCmluZGV4IGNmNDFmZjEuLmJjN2ZmYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcmV0ejNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcmV0ejNmYi5jCkBAIC0xNDIzLDggKzE0MjMsMTAgQEAKIAogCQlkb19pbnN0YWxsX2NtYXAoMCwgZmJfaW5mbyk7CiAKLQkJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiX2luZm8pIDwgMCkKKwkJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiX2luZm8pIDwgMCkgeworCQkJaW91bm1hcCh6aW5mby0+YmFzZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCiAJCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2UsIHVzaW5nICVsZEsgb2YgIgogCQkgICAgICAgInZpZGVvIG1lbW9yeVxuIiwgZmJfaW5mby0+bm9kZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jIGIvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKaW5kZXggYTQzM2NjNy4uMWExMzk2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKKysrIGIvZHJpdmVycy92aWRlby9yaXZhL2ZiZGV2LmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CiAjaWZkZWYgQ09ORklHX01UUlIKICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2VuZGlmCkBAIC0zODMsNyArMzg0LDcgQEAKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInJpdmFibCVkIiwgaW5mby0+bm9kZSk7CiAKLQliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgcGFyLCAmcml2YV9ibF9kYXRhKTsKKwliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgaW5mby0+ZGV2LCBwYXIsICZyaXZhX2JsX2RhdGEpOwogCWlmIChJU19FUlIoYmQpKSB7CiAJCWluZm8tPmJsX2RldiA9IE5VTEw7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJpdmE6IEJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKQEAgLTUyMSw0OCArNTIyLDEzIEBACiAJcmV0dXJuIChWR0FfUkQwOChwYXItPnJpdmEuUFZJTywgMHgzY2MpKTsKIH0KIAotc3RhdGljIHU4IGJ5dGVfcmV2WzI1Nl0gPSB7Ci0JMHgwMCwgMHg4MCwgMHg0MCwgMHhjMCwgMHgyMCwgMHhhMCwgMHg2MCwgMHhlMCwKLQkweDEwLCAweDkwLCAweDUwLCAweGQwLCAweDMwLCAweGIwLCAweDcwLCAweGYwLAotCTB4MDgsIDB4ODgsIDB4NDgsIDB4YzgsIDB4MjgsIDB4YTgsIDB4NjgsIDB4ZTgsCi0JMHgxOCwgMHg5OCwgMHg1OCwgMHhkOCwgMHgzOCwgMHhiOCwgMHg3OCwgMHhmOCwKLQkweDA0LCAweDg0LCAweDQ0LCAweGM0LCAweDI0LCAweGE0LCAweDY0LCAweGU0LAotCTB4MTQsIDB4OTQsIDB4NTQsIDB4ZDQsIDB4MzQsIDB4YjQsIDB4NzQsIDB4ZjQsCi0JMHgwYywgMHg4YywgMHg0YywgMHhjYywgMHgyYywgMHhhYywgMHg2YywgMHhlYywKLQkweDFjLCAweDljLCAweDVjLCAweGRjLCAweDNjLCAweGJjLCAweDdjLCAweGZjLAotCTB4MDIsIDB4ODIsIDB4NDIsIDB4YzIsIDB4MjIsIDB4YTIsIDB4NjIsIDB4ZTIsCi0JMHgxMiwgMHg5MiwgMHg1MiwgMHhkMiwgMHgzMiwgMHhiMiwgMHg3MiwgMHhmMiwKLQkweDBhLCAweDhhLCAweDRhLCAweGNhLCAweDJhLCAweGFhLCAweDZhLCAweGVhLAotCTB4MWEsIDB4OWEsIDB4NWEsIDB4ZGEsIDB4M2EsIDB4YmEsIDB4N2EsIDB4ZmEsCi0JMHgwNiwgMHg4NiwgMHg0NiwgMHhjNiwgMHgyNiwgMHhhNiwgMHg2NiwgMHhlNiwKLQkweDE2LCAweDk2LCAweDU2LCAweGQ2LCAweDM2LCAweGI2LCAweDc2LCAweGY2LAotCTB4MGUsIDB4OGUsIDB4NGUsIDB4Y2UsIDB4MmUsIDB4YWUsIDB4NmUsIDB4ZWUsCi0JMHgxZSwgMHg5ZSwgMHg1ZSwgMHhkZSwgMHgzZSwgMHhiZSwgMHg3ZSwgMHhmZSwKLQkweDAxLCAweDgxLCAweDQxLCAweGMxLCAweDIxLCAweGExLCAweDYxLCAweGUxLAotCTB4MTEsIDB4OTEsIDB4NTEsIDB4ZDEsIDB4MzEsIDB4YjEsIDB4NzEsIDB4ZjEsCi0JMHgwOSwgMHg4OSwgMHg0OSwgMHhjOSwgMHgyOSwgMHhhOSwgMHg2OSwgMHhlOSwKLQkweDE5LCAweDk5LCAweDU5LCAweGQ5LCAweDM5LCAweGI5LCAweDc5LCAweGY5LAotCTB4MDUsIDB4ODUsIDB4NDUsIDB4YzUsIDB4MjUsIDB4YTUsIDB4NjUsIDB4ZTUsCi0JMHgxNSwgMHg5NSwgMHg1NSwgMHhkNSwgMHgzNSwgMHhiNSwgMHg3NSwgMHhmNSwKLQkweDBkLCAweDhkLCAweDRkLCAweGNkLCAweDJkLCAweGFkLCAweDZkLCAweGVkLAotCTB4MWQsIDB4OWQsIDB4NWQsIDB4ZGQsIDB4M2QsIDB4YmQsIDB4N2QsIDB4ZmQsCi0JMHgwMywgMHg4MywgMHg0MywgMHhjMywgMHgyMywgMHhhMywgMHg2MywgMHhlMywKLQkweDEzLCAweDkzLCAweDUzLCAweGQzLCAweDMzLCAweGIzLCAweDczLCAweGYzLAotCTB4MGIsIDB4OGIsIDB4NGIsIDB4Y2IsIDB4MmIsIDB4YWIsIDB4NmIsIDB4ZWIsCi0JMHgxYiwgMHg5YiwgMHg1YiwgMHhkYiwgMHgzYiwgMHhiYiwgMHg3YiwgMHhmYiwKLQkweDA3LCAweDg3LCAweDQ3LCAweGM3LCAweDI3LCAweGE3LCAweDY3LCAweGU3LAotCTB4MTcsIDB4OTcsIDB4NTcsIDB4ZDcsIDB4MzcsIDB4YjcsIDB4NzcsIDB4ZjcsCi0JMHgwZiwgMHg4ZiwgMHg0ZiwgMHhjZiwgMHgyZiwgMHhhZiwgMHg2ZiwgMHhlZiwKLQkweDFmLCAweDlmLCAweDVmLCAweGRmLCAweDNmLCAweGJmLCAweDdmLCAweGZmLAotfTsKLQogc3RhdGljIGlubGluZSB2b2lkIHJldmVyc2Vfb3JkZXIodTMyICpsKQogewogCXU4ICphID0gKHU4ICopbDsKLQkqYSA9IGJ5dGVfcmV2WyphXSwgYSsrOwotCSphID0gYnl0ZV9yZXZbKmFdLCBhKys7Ci0JKmEgPSBieXRlX3JldlsqYV0sIGErKzsKLQkqYSA9IGJ5dGVfcmV2WyphXTsKKwlhWzBdID0gYml0cmV2OChhWzBdKTsKKwlhWzFdID0gYml0cmV2OChhWzFdKTsKKwlhWzJdID0gYml0cmV2OChhWzJdKTsKKwlhWzNdID0gYml0cmV2OChhWzNdKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCkBAIC03NzQsMTEgKzc0MCwxMiBAQAogICogQ0FMTEVEIEZST006CiAgKiByaXZhZmJfc2V0X3BhcigpCiAgKi8KLXN0YXRpYyB2b2lkIHJpdmFfbG9hZF92aWRlb19tb2RlKHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIGludCByaXZhX2xvYWRfdmlkZW9fbW9kZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlpbnQgYnBwLCB3aWR0aCwgaERpc3BsYXlTaXplLCBoRGlzcGxheSwgaFN0YXJ0LAogCSAgICBoRW5kLCBoVG90YWwsIGhlaWdodCwgdkRpc3BsYXksIHZTdGFydCwgdkVuZCwgdlRvdGFsLCBkb3RDbG9jazsKIAlpbnQgaEJsYW5rU3RhcnQsIGhCbGFua0VuZCwgdkJsYW5rU3RhcnQsIHZCbGFua0VuZDsKKwlpbnQgcmM7CiAJc3RydWN0IHJpdmFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJc3RydWN0IHJpdmFfcmVncyBuZXdtb2RlOwogCQpAQCAtODg0LDggKzg1MSwxMCBAQAogCWVsc2UKIAkJbmV3bW9kZS5taXNjX291dHB1dCB8PSAweDgwOwkKIAotCXBhci0+cml2YS5DYWxjU3RhdGVFeHQoJnBhci0+cml2YSwgJm5ld21vZGUuZXh0LCBicHAsIHdpZHRoLAotCQkJCSAgaERpc3BsYXlTaXplLCBoZWlnaHQsIGRvdENsb2NrKTsKKwlyYyA9IENhbGNTdGF0ZUV4dCgmcGFyLT5yaXZhLCAmbmV3bW9kZS5leHQsIGJwcCwgd2lkdGgsCisJCQkgIGhEaXNwbGF5U2l6ZSwgaGVpZ2h0LCBkb3RDbG9jayk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKIAogCW5ld21vZGUuZXh0LnNjYWxlID0gTlZfUkQzMihwYXItPnJpdmEuUFJBTURBQywgMHgwMDAwMDg0OCkgJgogCQkweGZmZjAwMGZmOwpAQCAtOTE3LDggKzg4NiwxMiBAQAogCXBhci0+Y3VycmVudF9zdGF0ZSA9IG5ld21vZGU7CiAJcml2YV9sb2FkX3N0YXRlKHBhciwgJnBhci0+Y3VycmVudF9zdGF0ZSk7CiAJcGFyLT5yaXZhLkxvY2tVbmxvY2soJnBhci0+cml2YSwgMCk7IC8qIGltcG9ydGFudCBmb3IgSFcgY3Vyc29yICovCisKK291dDoKIAlyaXZhZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgaW5mbyk7CiAJTlZUUkFDRV9MRUFWRSgpOworCisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCByaXZhX3VwZGF0ZV92YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGVkYikKQEAgLTEyODYsMTIgKzEyNTksMTUgQEAKIHN0YXRpYyBpbnQgcml2YWZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHJpdmFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJaW50IHJjID0gMDsKIAogCU5WVFJBQ0VfRU5URVIoKTsKIAkvKiB2Z2FIV3VubG9jaygpICsgcml2YSB1bmxvY2sgKDB4N0YpICovCiAJQ1JUQ291dChwYXIsIDB4MTEsIDB4RkYpOwogCXBhci0+cml2YS5Mb2NrVW5sb2NrKCZwYXItPnJpdmEsIDApOwotCXJpdmFfbG9hZF92aWRlb19tb2RlKGluZm8pOworCXJjID0gcml2YV9sb2FkX3ZpZGVvX21vZGUoaW5mbyk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKIAlpZighKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpKQogCQlyaXZhX3NldHVwX2FjY2VsKGluZm8pOwogCQpAQCAtMTMwNCw4ICsxMjgwLDEwIEBACiAJCWluZm8tPnBpeG1hcC5zY2FuX2FsaWduID0gMTsKIAllbHNlCiAJCWluZm8tPnBpeG1hcC5zY2FuX2FsaWduID0gNDsKKworb3V0OgogCU5WVFJBQ0VfTEVBVkUoKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9yaXZhL3JpdmFfaHcuYyBiL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhX2h3LmMKaW5kZXggYjZmODY5MC4uZTBiOGM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9yaXZhL3JpdmFfaHcuYworKysgYi9kcml2ZXJzL3ZpZGVvL3JpdmEvcml2YV9ody5jCkBAIC0xMjI3LDcgKzEyMjcsNyBAQAogICogQ2FsY3VsYXRlIGV4dGVuZGVkIG1vZGUgcGFyYW1ldGVycyAoU1ZHQSkgYW5kIHNhdmUgaW4gYSAKICAqIG1vZGUgc3RhdGUgc3RydWN0dXJlLgogICovCi1zdGF0aWMgdm9pZCBDYWxjU3RhdGVFeHQKK2ludCBDYWxjU3RhdGVFeHQKICgKICAgICBSSVZBX0hXX0lOU1QgICpjaGlwLAogICAgIFJJVkFfSFdfU1RBVEUgKnN0YXRlLApAQCAtMTI0OSw3ICsxMjQ5LDggQEAKICAgICAgKiBFeHRlbmRlZCBSSVZBIHJlZ2lzdGVycy4KICAgICAgKi8KICAgICBwaXhlbERlcHRoID0gKGJwcCArIDEpLzg7Ci0gICAgQ2FsY1ZDbG9jayhkb3RDbG9jaywgJlZDbGssICZtLCAmbiwgJnAsIGNoaXApOworICAgIGlmICghQ2FsY1ZDbG9jayhkb3RDbG9jaywgJlZDbGssICZtLCAmbiwgJnAsIGNoaXApKQorICAgIAlyZXR1cm4gLUVJTlZBTDsKIAogICAgIHN3aXRjaCAoY2hpcC0+QXJjaGl0ZWN0dXJlKQogICAgIHsKQEAgLTEzMjcsNiArMTMyOCw4IEBACiAgICAgc3RhdGUtPnBpdGNoMSAgID0KICAgICBzdGF0ZS0+cGl0Y2gyICAgPQogICAgIHN0YXRlLT5waXRjaDMgICA9IHBpeGVsRGVwdGggKiB3aWR0aDsKKworICAgIHJldHVybiAwOwogfQogLyoKICAqIExvYWQgZml4ZWQgZnVuY3Rpb24gc3RhdGUgYW5kIHByZS1jYWxjdWxhdGVkL3N0b3JlZCBzdGF0ZS4KQEAgLTIwMjYsNyArMjAyOSw2IEBACiAgICAgICovCiAgICAgY2hpcC0+QnVzeSAgICAgICAgICAgID0gbnYzQnVzeTsKICAgICBjaGlwLT5TaG93SGlkZUN1cnNvciAgPSBTaG93SGlkZUN1cnNvcjsKLSAgICBjaGlwLT5DYWxjU3RhdGVFeHQgICAgPSBDYWxjU3RhdGVFeHQ7CiAgICAgY2hpcC0+TG9hZFN0YXRlRXh0ICAgID0gTG9hZFN0YXRlRXh0OwogICAgIGNoaXAtPlVubG9hZFN0YXRlRXh0ICA9IFVubG9hZFN0YXRlRXh0OwogICAgIGNoaXAtPlNldFN0YXJ0QWRkcmVzcyA9IFNldFN0YXJ0QWRkcmVzczM7CkBAIC0yMDg0LDcgKzIwODYsNiBAQAogICAgICAqLwogICAgIGNoaXAtPkJ1c3kgICAgICAgICAgICA9IG52NEJ1c3k7CiAgICAgY2hpcC0+U2hvd0hpZGVDdXJzb3IgID0gU2hvd0hpZGVDdXJzb3I7Ci0gICAgY2hpcC0+Q2FsY1N0YXRlRXh0ICAgID0gQ2FsY1N0YXRlRXh0OwogICAgIGNoaXAtPkxvYWRTdGF0ZUV4dCAgICA9IExvYWRTdGF0ZUV4dDsKICAgICBjaGlwLT5VbmxvYWRTdGF0ZUV4dCAgPSBVbmxvYWRTdGF0ZUV4dDsKICAgICBjaGlwLT5TZXRTdGFydEFkZHJlc3MgPSBTZXRTdGFydEFkZHJlc3M7CkBAIC0yMTg2LDcgKzIxODcsNiBAQAogICAgICAqLwogICAgIGNoaXAtPkJ1c3kgICAgICAgICAgICA9IG52MTBCdXN5OwogICAgIGNoaXAtPlNob3dIaWRlQ3Vyc29yICA9IFNob3dIaWRlQ3Vyc29yOwotICAgIGNoaXAtPkNhbGNTdGF0ZUV4dCAgICA9IENhbGNTdGF0ZUV4dDsKICAgICBjaGlwLT5Mb2FkU3RhdGVFeHQgICAgPSBMb2FkU3RhdGVFeHQ7CiAgICAgY2hpcC0+VW5sb2FkU3RhdGVFeHQgID0gVW5sb2FkU3RhdGVFeHQ7CiAgICAgY2hpcC0+U2V0U3RhcnRBZGRyZXNzID0gU2V0U3RhcnRBZGRyZXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9yaXZhL3JpdmFfaHcuaCBiL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhX2h3LmgKaW5kZXggYTFlNzFhNi4uYzI3NjlmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9yaXZhL3JpdmFfaHcuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3JpdmEvcml2YV9ody5oCkBAIC00NjMsNyArNDYzLDYgQEAKICAgICAgKiBDb21tb24gY2hpcCBmdW5jdGlvbnMuCiAgICAgICovCiAgICAgaW50ICAoKkJ1c3kpKHN0cnVjdCBfcml2YV9od19pbnN0ICopOwotICAgIHZvaWQgKCpDYWxjU3RhdGVFeHQpKHN0cnVjdCBfcml2YV9od19pbnN0ICosc3RydWN0IF9yaXZhX2h3X3N0YXRlICosaW50LGludCxpbnQsaW50LGludCk7CiAgICAgdm9pZCAoKkxvYWRTdGF0ZUV4dCkoc3RydWN0IF9yaXZhX2h3X2luc3QgKixzdHJ1Y3QgX3JpdmFfaHdfc3RhdGUgKik7CiAgICAgdm9pZCAoKlVubG9hZFN0YXRlRXh0KShzdHJ1Y3QgX3JpdmFfaHdfaW5zdCAqLHN0cnVjdCBfcml2YV9od19zdGF0ZSAqKTsKICAgICB2b2lkICgqU2V0U3RhcnRBZGRyZXNzKShzdHJ1Y3QgX3JpdmFfaHdfaW5zdCAqLFUwMzIpOwpAQCAtNTI4LDYgKzUyNywyMiBAQAogICAgIFUwMzIgcGl0Y2gyOwogICAgIFUwMzIgcGl0Y2gzOwogfSBSSVZBX0hXX1NUQVRFOworCisvKgorICogZnVuY3Rpb24gcHJvdG90eXBlcworICovCisKK2V4dGVybiBpbnQgQ2FsY1N0YXRlRXh0CisoCisgICAgUklWQV9IV19JTlNUICAqY2hpcCwKKyAgICBSSVZBX0hXX1NUQVRFICpzdGF0ZSwKKyAgICBpbnQgICAgICAgICAgICBicHAsCisgICAgaW50ICAgICAgICAgICAgd2lkdGgsCisgICAgaW50ICAgICAgICAgICAgaERpc3BsYXlTaXplLAorICAgIGludCAgICAgICAgICAgIGhlaWdodCwKKyAgICBpbnQgICAgICAgICAgICBkb3RDbG9jaworKTsKKwogLyoKICAqIEV4dGVybmFsIHJvdXRpbmVzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3JpdmEvcml2YWZiLWkyYy5jIGIvZHJpdmVycy92aWRlby9yaXZhL3JpdmFmYi1pMmMuYwppbmRleCBjMTViMjU5Li4wMWI4NWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3JpdmEvcml2YWZiLWkyYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcml2YS9yaXZhZmItaTJjLmMKQEAgLTE0NCwxNSArMTQ0LDE1IEBACiB2b2lkIHJpdmFfZGVsZXRlX2kyY19idXNzZXMoc3RydWN0IHJpdmFfcGFyICpwYXIpCiB7CiAJaWYgKHBhci0+Y2hhblswXS5wYXIpCi0JCWkyY19iaXRfZGVsX2J1cygmcGFyLT5jaGFuWzBdLmFkYXB0ZXIpOworCQlpMmNfZGVsX2FkYXB0ZXIoJnBhci0+Y2hhblswXS5hZGFwdGVyKTsKIAlwYXItPmNoYW5bMF0ucGFyID0gTlVMTDsKIAogCWlmIChwYXItPmNoYW5bMV0ucGFyKQotCQlpMmNfYml0X2RlbF9idXMoJnBhci0+Y2hhblsxXS5hZGFwdGVyKTsKKwkJaTJjX2RlbF9hZGFwdGVyKCZwYXItPmNoYW5bMV0uYWRhcHRlcik7CiAJcGFyLT5jaGFuWzFdLnBhciA9IE5VTEw7CiAKIAlpZiAocGFyLT5jaGFuWzJdLnBhcikKLQkJaTJjX2JpdF9kZWxfYnVzKCZwYXItPmNoYW5bMl0uYWRhcHRlcik7CisJCWkyY19kZWxfYWRhcHRlcigmcGFyLT5jaGFuWzJdLmFkYXB0ZXIpOwogCXBhci0+Y2hhblsyXS5wYXIgPSBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwppbmRleCA1OTQwNzM0Li5jY2VmNTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCXNhZGRyMiArPSAodmFyLT54cmVzICogdmFyLT55cmVzICogdmFyLT5iaXRzX3Blcl9waXhlbCkvODsKIAlzYWRkcjI+Pj0gMTsKIAotCXNhZGRyMyA9ICBTM0MyNDEwX09GRlNJWkUoMCkgfCBTM0MyNDEwX1BBR0VXSURUSCh2YXItPnhyZXMpOworCXNhZGRyMyA9ICBTM0MyNDEwX09GRlNJWkUoMCkgfCBTM0MyNDEwX1BBR0VXSURUSCgodmFyLT54cmVzICogdmFyLT5iaXRzX3Blcl9waXhlbCAvIDE2KSAmIDB4M2ZmKTsKIAogCWRwcmludGsoIkxDRFNBRERSMSA9IDB4JTA4bHhcbiIsIHNhZGRyMSk7CiAJZHByaW50aygiTENEU0FERFIyID0gMHglMDhseFxuIiwgc2FkZHIyKTsKQEAgLTE5OSwyOCArMTk5LDg2IEBACiAJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSBmYmktPm1hY2hfaW5mby0+YnBwLm1pbjsKIAogCS8qIHNldCByL2cvYiBwb3NpdGlvbnMgKi8KKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwkJY2FzZSAxOgorCQljYXNlIDI6CisJCWNhc2UgNDoKKwkJCXZhci0+cmVkLm9mZnNldCAgICAJPSAwOworCQkJdmFyLT5yZWQubGVuZ3RoICAgIAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCQl2YXItPmdyZWVuICAgICAgICAgCT0gdmFyLT5yZWQ7CisJCQl2YXItPmJsdWUgICAgICAgICAgCT0gdmFyLT5yZWQ7CisJCQl2YXItPnRyYW5zcC5vZmZzZXQgCT0gMDsKKwkJCXZhci0+dHJhbnNwLmxlbmd0aCAJPSAwOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCWlmICggZmJpLT5tYWNoX2luZm8tPnR5cGUgIT0gUzNDMjQxMF9MQ0RDT04xX1RGVCApIHsKKwkJCQkvKiA4IGJwcCAzMzIgKi8KKwkJCQl2YXItPnJlZC5sZW5ndGgJCT0gMzsKKwkJCQl2YXItPnJlZC5vZmZzZXQJCT0gNTsKKwkJCQl2YXItPmdyZWVuLmxlbmd0aAk9IDM7CisJCQkJdmFyLT5ncmVlbi5vZmZzZXQJPSAyOworCQkJCXZhci0+Ymx1ZS5sZW5ndGgJPSAyOworCQkJCXZhci0+Ymx1ZS5vZmZzZXQJPSAwOworCQkJCXZhci0+dHJhbnNwLmxlbmd0aAk9IDA7CisJCQl9IGVsc2UgeworCQkJCXZhci0+cmVkLm9mZnNldCAgICAJPSAwOworCQkJCXZhci0+cmVkLmxlbmd0aCAgICAJPSB2YXItPmJpdHNfcGVyX3BpeGVsOworCQkJCXZhci0+Z3JlZW4gICAgICAgICAJPSB2YXItPnJlZDsKKwkJCQl2YXItPmJsdWUgICAgICAgICAgCT0gdmFyLT5yZWQ7CisJCQkJdmFyLT50cmFuc3Aub2Zmc2V0IAk9IDA7CisJCQkJdmFyLT50cmFuc3AubGVuZ3RoIAk9IDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAxMjoKKwkJCS8qIDEyIGJwcCA0NDQgKi8KKwkJCXZhci0+cmVkLmxlbmd0aAkJPSA0OworCQkJdmFyLT5yZWQub2Zmc2V0CQk9IDg7CisJCQl2YXItPmdyZWVuLmxlbmd0aAk9IDQ7CisJCQl2YXItPmdyZWVuLm9mZnNldAk9IDQ7CisJCQl2YXItPmJsdWUubGVuZ3RoCT0gNDsKKwkJCXZhci0+Ymx1ZS5vZmZzZXQJPSAwOworCQkJdmFyLT50cmFuc3AubGVuZ3RoCT0gMDsKKwkJCWJyZWFrOwogCi0JaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTYpIHsKLQkJdmFyLT5yZWQub2Zmc2V0CQk9IDExOwotCQl2YXItPmdyZWVuLm9mZnNldAk9IDU7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQJPSAwOwotCQl2YXItPnJlZC5sZW5ndGgJCT0gNTsKLQkJdmFyLT5ncmVlbi5sZW5ndGgJPSA2OwotCQl2YXItPmJsdWUubGVuZ3RoCT0gNTsKLQkJdmFyLT50cmFuc3AubGVuZ3RoCT0gMDsKLQl9IGVsc2UgewotCQl2YXItPnJlZC5sZW5ndGgJCT0gdmFyLT5iaXRzX3Blcl9waXhlbDsKLQkJdmFyLT5yZWQub2Zmc2V0CQk9IDA7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoCT0gdmFyLT5iaXRzX3Blcl9waXhlbDsKLQkJdmFyLT5ncmVlbi5vZmZzZXQJPSAwOwotCQl2YXItPmJsdWUubGVuZ3RoCT0gdmFyLT5iaXRzX3Blcl9waXhlbDsKLQkJdmFyLT5ibHVlLm9mZnNldAk9IDA7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aAk9IDA7CisJCWRlZmF1bHQ6CisJCWNhc2UgMTY6CisJCQlpZiAoZmJpLT5yZWdzLmxjZGNvbjUgJiBTM0MyNDEwX0xDRENPTjVfRlJNNTY1ICkgeworCQkJCS8qIDE2IGJwcCwgNTY1IGZvcm1hdCAqLworCQkJCXZhci0+cmVkLm9mZnNldAkJPSAxMTsKKwkJCQl2YXItPmdyZWVuLm9mZnNldAk9IDU7CisJCQkJdmFyLT5ibHVlLm9mZnNldAk9IDA7CisJCQkJdmFyLT5yZWQubGVuZ3RoCQk9IDU7CisJCQkJdmFyLT5ncmVlbi5sZW5ndGgJPSA2OworCQkJCXZhci0+Ymx1ZS5sZW5ndGgJPSA1OworCQkJCXZhci0+dHJhbnNwLmxlbmd0aAk9IDA7CisJCQl9IGVsc2UgeworCQkJCS8qIDE2IGJwcCwgNTU1MSBmb3JtYXQgKi8KKwkJCQl2YXItPnJlZC5vZmZzZXQJCT0gMTE7CisJCQkJdmFyLT5ncmVlbi5vZmZzZXQJPSA2OworCQkJCXZhci0+Ymx1ZS5vZmZzZXQJPSAxOworCQkJCXZhci0+cmVkLmxlbmd0aAkJPSA1OworCQkJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gNTsKKwkJCQl2YXItPmJsdWUubGVuZ3RoCT0gNTsKKwkJCQl2YXItPnRyYW5zcC5sZW5ndGgJPSAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMjQ6CisJCQkvKiAyNCBicHAgODg4ICovCisJCQl2YXItPnJlZC5sZW5ndGgJCT0gODsKKwkJCXZhci0+cmVkLm9mZnNldAkJPSAxNjsKKwkJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gODsKKwkJCXZhci0+Z3JlZW4ub2Zmc2V0CT0gODsKKwkJCXZhci0+Ymx1ZS5sZW5ndGgJPSA4OworCQkJdmFyLT5ibHVlLm9mZnNldAk9IDA7CisJCQl2YXItPnRyYW5zcC5sZW5ndGgJPSAwOworCQkJYnJlYWs7CisKKwogCX0KLQogCXJldHVybiAwOwogfQogCisKIC8qIHMzYzI0MTBmYl9hY3RpdmF0ZV92YXIKICAqCiAgKiBhY3RpdmF0ZSAoc2V0KSB0aGUgY29udHJvbGxlciBmcm9tIHRoZSBnaXZlbiBmcmFtZWJ1ZmZlcgpAQCAtMjMwLDI5ICsyODgsNjEgQEAKIHN0YXRpYyB2b2lkIHMzYzI0MTBmYl9hY3RpdmF0ZV92YXIoc3RydWN0IHMzYzI0MTBmYl9pbmZvICpmYmksCiAJCQkJICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCiB7CisJaW50IGhzOworCiAJZmJpLT5yZWdzLmxjZGNvbjEgJj0gflMzQzI0MTBfTENEQ09OMV9NT0RFTUFTSzsKKwlmYmktPnJlZ3MubGNkY29uMSAmPSB+UzNDMjQxMF9MQ0RDT04xX1RGVDsKIAogCWRwcmludGsoIiVzOiB2YXItPnhyZXMgID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgdmFyLT54cmVzKTsKIAlkcHJpbnRrKCIlczogdmFyLT55cmVzICA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHZhci0+eXJlcyk7CiAJZHByaW50aygiJXM6IHZhci0+YnBwICAgPSAlZFxuIiwgX19GVU5DVElPTl9fLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKIAotCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewotCWNhc2UgMToKLQkJZmJpLT5yZWdzLmxjZGNvbjEgfD0gUzNDMjQxMF9MQ0RDT04xX1RGVDFCUFA7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJZmJpLT5yZWdzLmxjZGNvbjEgfD0gUzNDMjQxMF9MQ0RDT04xX1RGVDJCUFA7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJZmJpLT5yZWdzLmxjZGNvbjEgfD0gUzNDMjQxMF9MQ0RDT04xX1RGVDRCUFA7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJZmJpLT5yZWdzLmxjZGNvbjEgfD0gUzNDMjQxMF9MQ0RDT04xX1RGVDhCUFA7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWZiaS0+cmVncy5sY2Rjb24xIHw9IFMzQzI0MTBfTENEQ09OMV9URlQxNkJQUDsKLQkJYnJlYWs7Ci0JfQorCWZiaS0+cmVncy5sY2Rjb24xIHw9IGZiaS0+bWFjaF9pbmZvLT50eXBlOworCisJaWYgKGZiaS0+bWFjaF9pbmZvLT50eXBlID09IFMzQzI0MTBfTENEQ09OMV9URlQpCisJCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCQljYXNlIDE6CisJCQlmYmktPnJlZ3MubGNkY29uMSB8PSBTM0MyNDEwX0xDRENPTjFfVEZUMUJQUDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlmYmktPnJlZ3MubGNkY29uMSB8PSBTM0MyNDEwX0xDRENPTjFfVEZUMkJQUDsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlmYmktPnJlZ3MubGNkY29uMSB8PSBTM0MyNDEwX0xDRENPTjFfVEZUNEJQUDsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQlmYmktPnJlZ3MubGNkY29uMSB8PSBTM0MyNDEwX0xDRENPTjFfVEZUOEJQUDsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJZmJpLT5yZWdzLmxjZGNvbjEgfD0gUzNDMjQxMF9MQ0RDT04xX1RGVDE2QlBQOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIGludmFsaWQgcGl4ZWwgZGVwdGggKi8KKwkJCWRldl9lcnIoZmJpLT5kZXYsICJpbnZhbGlkIGJwcCAlZFxuIiwgdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJCX0KKwllbHNlCisJCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCQljYXNlIDE6CisJCQlmYmktPnJlZ3MubGNkY29uMSB8PSBTM0MyNDEwX0xDRENPTjFfU1ROMUJQUDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlmYmktPnJlZ3MubGNkY29uMSB8PSBTM0MyNDEwX0xDRENPTjFfU1ROMkdSRVk7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJZmJpLT5yZWdzLmxjZGNvbjEgfD0gUzNDMjQxMF9MQ0RDT04xX1NUTjRHUkVZOworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCWZiaS0+cmVncy5sY2Rjb24xIHw9IFMzQzI0MTBfTENEQ09OMV9TVE44QlBQOworCQkJYnJlYWs7CisJCWNhc2UgMTI6CisJCQlmYmktPnJlZ3MubGNkY29uMSB8PSBTM0MyNDEwX0xDRENPTjFfU1ROMTJCUFA7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogaW52YWxpZCBwaXhlbCBkZXB0aCAqLworCQkJZGV2X2VycihmYmktPmRldiwgImludmFsaWQgYnBwICVkXG4iLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKKwkJfQogCiAJLyogY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gdXBkYXRlIHN5bmMvYm9yZGVycyAqLwogCkBAIC0yODMsMTUgKzM3Myw0NCBAQAogCWZiaS0+cmVncy5sY2Rjb24yICY9IH5TM0MyNDEwX0xDRENPTjJfTElORVZBTCgweDNmZik7CiAJZmJpLT5yZWdzLmxjZGNvbjIgfD0gIFMzQzI0MTBfTENEQ09OMl9MSU5FVkFMKHZhci0+eXJlcyAtIDEpOwogCisJc3dpdGNoKGZiaS0+bWFjaF9pbmZvLT50eXBlKSB7CisJCWNhc2UgUzNDMjQxMF9MQ0RDT04xX0RTQ0FONDoKKwkJY2FzZSBTM0MyNDEwX0xDRENPTjFfU1ROODoKKwkJCWhzID0gdmFyLT54cmVzIC8gODsKKwkJCWJyZWFrOworCQljYXNlIFMzQzI0MTBfTENEQ09OMV9TVE40OgorCQkJaHMgPSB2YXItPnhyZXMgLyA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgUzNDMjQxMF9MQ0RDT04xX1RGVDoKKwkJCWhzID0gdmFyLT54cmVzOworCQkJYnJlYWs7CisKKwl9CisKKwkvKiBTcGVjaWFsIGNhc2VzIDogU1ROIGNvbG9yIGRpc3BsYXlzICovCisJaWYgKCAoKGZiaS0+cmVncy5sY2Rjb24xICYgUzNDMjQxMF9MQ0RDT04xX01PREVNQVNLKSA9PSBTM0MyNDEwX0xDRENPTjFfU1ROOEJQUCkgXAorCSAgfHwgKChmYmktPnJlZ3MubGNkY29uMSAmIFMzQzI0MTBfTENEQ09OMV9NT0RFTUFTSykgPT0gUzNDMjQxMF9MQ0RDT04xX1NUTjEyQlBQKSApIHsKKwkJaHMgPSBocyAqIDM7CisJfQorCisKIAlmYmktPnJlZ3MubGNkY29uMyAmPSB+UzNDMjQxMF9MQ0RDT04zX0hPWlZBTCgweDdmZik7Ci0JZmJpLT5yZWdzLmxjZGNvbjMgfD0gIFMzQzI0MTBfTENEQ09OM19IT1pWQUwodmFyLT54cmVzIC0gMSk7CisJZmJpLT5yZWdzLmxjZGNvbjMgfD0gIFMzQzI0MTBfTENEQ09OM19IT1pWQUwoaHMgLSAxKTsKIAogCWlmICh2YXItPnBpeGNsb2NrID4gMCkgewogCQlpbnQgY2xrZGl2ID0gczNjMjQxMGZiX2NhbGNfcGl4Y2xrKGZiaSwgdmFyLT5waXhjbG9jayk7CiAKLQkJY2xrZGl2ID0gKGNsa2RpdiAvIDIpIC0xOwotCQlpZiAoY2xrZGl2IDwgMCkKLQkJCWNsa2RpdiA9IDA7CisJCWlmIChmYmktPm1hY2hfaW5mby0+dHlwZSA9PSBTM0MyNDEwX0xDRENPTjFfVEZUKSB7CisJCQljbGtkaXYgPSAoY2xrZGl2IC8gMikgLTE7CisJCQlpZiAoY2xrZGl2IDwgMCkKKwkJCQljbGtkaXYgPSAwOworCQl9CisJCWVsc2UgeworCQkJY2xrZGl2ID0gKGNsa2RpdiAvIDIpOworCQkJaWYgKGNsa2RpdiA8IDIpCisJCQkJY2xrZGl2ID0gMjsKKwkJfQogCiAJCWZiaS0+cmVncy5sY2Rjb24xICY9IH5TM0MyNDEwX0xDRENPTjFfQ0xLVkFMKDB4M2ZmKTsKIAkJZmJpLT5yZWdzLmxjZGNvbjEgfD0gIFMzQzI0MTBfTENEQ09OMV9DTEtWQUwoY2xrZGl2KTsKQEAgLTMyOSwxMCArNDQ4LDE4IEBACiAJc3RydWN0IHMzYzI0MTBmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOwogCi0JaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTYpCi0JCWZiaS0+ZmItPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwotCWVsc2UKLQkJZmJpLT5mYi0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpCisJeworCQljYXNlIDE2OgorCQkJZmJpLT5mYi0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJIGZiaS0+ZmItPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfTU9OTzAxOworCQkJIGJyZWFrOworCQlkZWZhdWx0OgorCQkJIGZiaS0+ZmItPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7CisJCQkgYnJlYWs7CisJfQogCiAJZmJpLT5mYi0+Zml4LmxpbmVfbGVuZ3RoICAgICA9ICh2YXItPndpZHRoKnZhci0+Yml0c19wZXJfcGl4ZWwpLzg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYwppbmRleCBjZDEwYjE4Li41ZDJhNGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCkBAIC0xMjAwLDkgKzEyMDAsOSBAQAogICogT3VyIExDRCBjb250cm9sbGVyIHRhc2sgKHdoaWNoIGlzIGNhbGxlZCB3aGVuIHdlIGJsYW5rIG9yIHVuYmxhbmspCiAgKiB2aWEga2V2ZW50ZC4KICAqLwotc3RhdGljIHZvaWQgc2ExMTAwZmJfdGFzayh2b2lkICpkdW1teSkKK3N0YXRpYyB2b2lkIHNhMTEwMGZiX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3KQogewotCXN0cnVjdCBzYTExMDBmYl9pbmZvICpmYmkgPSBkdW1teTsKKwlzdHJ1Y3Qgc2ExMTAwZmJfaW5mbyAqZmJpID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBzYTExMDBmYl9pbmZvLCB0YXNrKTsKIAl1X2ludCBzdGF0ZSA9IHhjaGcoJmZiaS0+dGFza19zdGF0ZSwgLTEpOwogCiAJc2V0X2N0cmxyX3N0YXRlKGZiaSwgc3RhdGUpOwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAKIAkJCQkJICBmYmktPm1heF9icHAgLyA4OwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZmJpLT5jdHJscl93YWl0KTsKLQlJTklUX1dPUksoJmZiaS0+dGFzaywgc2ExMTAwZmJfdGFzaywgZmJpKTsKKwlJTklUX1dPUksoJmZiaS0+dGFzaywgc2ExMTAwZmJfdGFzayk7CiAJaW5pdF9NVVRFWCgmZmJpLT5jdHJscl9zZW0pOwogCiAJcmV0dXJuIGZiaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLWkyYy5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMKaW5kZXggM2Y5NDIyMy4uMTQxMWYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAogCWlmIChwYXItPmNoYW4ucGFyKQotCQlpMmNfYml0X2RlbF9idXMoJnBhci0+Y2hhbi5hZGFwdGVyKTsKKwkJaTJjX2RlbF9hZGFwdGVyKCZwYXItPmNoYW4uYWRhcHRlcik7CiAKIAlwYXItPmNoYW4ucGFyID0gTlVMTDsKIH0KQEAgLTIyNywxMSArMjI3LDggQEAKIAkJLyogdHJ5IHRvIGdldCBmcm9tIGZpcm13YXJlICovCiAJCWNvbnN0IHU4ICplID0gZmJfZmlybXdhcmVfZWRpZChpbmZvLT5kZXZpY2UpOwogCi0JCWlmIChlKSB7Ci0JCQllZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoZWRpZCkKLQkJCQltZW1jcHkoZWRpZCwgZSwgRURJRF9MRU5HVEgpOwotCQl9CisJCWlmIChlKQorCQkJZWRpZCA9IGttZW1kdXAoZSwgRURJRF9MRU5HVEgsIEdGUF9LRVJORUwpOwogCX0KIAogCSpvdXRfZWRpZCA9IGVkaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0MzAxLmMgYi9kcml2ZXJzL3ZpZGVvL3Npcy9pbml0MzAxLmMKaW5kZXggZjEzZmFkZC4uNDdlMTg5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaXMvaW5pdDMwMS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL2luaXQzMDEuYwpAQCAtNDQ1LDExICs0NDUsOCBAQAogdm9pZAogU2lTX0REQzJEZWxheShzdHJ1Y3QgU2lTX1ByaXZhdGUgKlNpU19QciwgdW5zaWduZWQgaW50IGRlbGF5dGltZSkKIHsKLSAgIHVuc2lnbmVkIGludCBpLCBqOwotCi0gICBmb3IoaSA9IDA7IGkgPCBkZWxheXRpbWU7IGkrKykgewotICAgICAgaiArPSBTaVNfR2V0UmVnKFNpU19Qci0+U2lTX1AzYzQsMHgwNSk7Ci0gICB9CisgICB3aGlsZSAoZGVsYXl0aW1lLS0gPiAwKQorICAgICAgU2lTX0dldFJlZyhTaVNfUHItPlNpU19QM2M0LCAweDA1KTsKIH0KIAogI2lmIGRlZmluZWQoU0lTMzAwKSB8fCBkZWZpbmVkKFNJUzMxNUgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMKaW5kZXggNzExY2IxMS4uNTljZDFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zc3RmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYwpAQCAtMjEsNiArMjEsMTEgQEAKICAqCVJlbW92ZSBuZXZlciBmaW5pc2hlZCBhbmQgYm9ndXMgMjQvMzJiaXQgc3VwcG9ydAogICoJQ2xlYW4gdXAgbWFjcm8gYWJ1c2UKICAqCU1pbm9yIHRpZHlpbmcgZm9yIGZvcm1hdC4KKyAqIDEyLzIwMDYgSGVsZ2UgRGVsbGVyICAgIDxkZWxsZXJAZ214LmRlPgorICoJYWRkIC9zeXMvY2xhc3MvZ3JhcGhpY3MvZmJYL3ZnYXBhc3Mgc3lzZnMtaW50ZXJmYWNlCisgKglhZGQgbW9kdWxlIG9wdGlvbiAibW9kZV9vcHRpb24iIHRvIHNldCBpbml0aWFsIHNjcmVlbiBtb2RlCisgKgl1c2UgZmJkZXYgZGVmYXVsdCB2aWRlb21vZGUgZGF0YWJhc2UKKyAqCXJlbW92ZSBkZWJ1ZyBmdW5jdGlvbnMgZnJvbSBpb2N0bAogICovCiAKIC8qCkBAIC02NSwxOSArNzAsMTAgQEAKICAqCiAgKiBzc3RmYiBzcGVjaWZpYyBpb2N0bHM6CiAgKiAgIAkJdG9nZ2xlIHZnYSAoMHg0NmRiKSA6IHRvZ2dsZSB2Z2FfcGFzc190aHJvdWdoCi0gKiAgIAkJZmlsbCBmYiAgICAoMHg0NmRjKSA6IGZpbGxzIGZiCi0gKiAgIAkJdGVzdCBkaXNwICAoMHg0NmRlKSA6IGRyYXdzIGEgdGVzdCBpbWFnZQogICovCiAKICN1bmRlZiBTU1RfREVCVUcKIAotLyoKLSAgRGVmYXVsdCB2aWRlbyBtb2RlIC4KLSAgMCA4MDB4NjAwQDYwICB0b29rIGZyb20gZ2xpZGUKLSAgMSA2NDB4NDgwQDc1ICB0b29rIGZyb20gZ2xpZGUKLSAgMiAxMDI0eDc2OEA3NiBzdGQgZmIubW9kZQotICAzIDY0MHg0ODBANjAgIGdsaWRlIGRlZmF1bHQgKi8KLSNkZWZpbmUgREVGQVVMVF9NT0RFIDMgCiAKIC8qCiAgKiBJbmNsdWRlcwpAQCAtOTIsMjAgKzg4LDI0IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPHZpZGVvL3NzdGZiLmg+CiAKIAogLyogaW5pdGlhbGl6ZWQgYnkgc2V0dXAgKi8KIAotc3RhdGljIGludCB2Z2FwYXNzOwkJLyogZW5hYmxlIFZnYSBwYXNzdGhyb3VnaCBjYWJsZSAqLworc3RhdGljIGludCB2Z2FwYXNzOwkJLyogZW5hYmxlIFZHQSBwYXNzdGhyb3VnaCBjYWJsZSAqLwogc3RhdGljIGludCBtZW07CQkJLyogbWVtIHNpemUgaW4gTUIsIDAgPSBhdXRvZGV0ZWN0ICovCiBzdGF0aWMgaW50IGNsaXBwaW5nID0gMTsJLyogdXNlIGNsaXBwaW5nIChzbG93ZXIsIHNhZmVyKSAqLwogc3RhdGljIGludCBnZnhjbGs7CQkvKiBmb3JjZSBGQkkgZnJlcSBpbiBNaHogLiBEYW5nZXJvdXMgKi8KIHN0YXRpYyBpbnQgc2xvd3BjaTsJCS8qIHNsb3cgUENJIHNldHRpbmdzICovCiAKLXN0YXRpYyBjaGFyICptb2RlX29wdGlvbiBfX2RldmluaXRkYXRhOworLyoKKyAgUG9zc2libGUgZGVmYXVsdCB2aWRlbyBtb2RlczogODAweDYwMEA2MCwgNjQweDQ4MEA3NSwgMTAyNHg3NjhANzYsIDY0MHg0ODBANjAKKyovCisjZGVmaW5lIERFRkFVTFRfVklERU9fTU9ERSAiNjQweDQ4MEA2MCIKKworc3RhdGljIGNoYXIgKm1vZGVfb3B0aW9uIF9fZGV2aW5pdGRhdGEgPSBERUZBVUxUX1ZJREVPX01PREU7CiAKIGVudW0gewogCUlEX1ZPT0RPTzEgPSAwLApAQCAtMTE5LDQ4ICsxMTksMTEgQEAKICB7IC5uYW1lID0gIlZvb2RvbzIiLAkgICAgICAuZGVmYXVsdF9nZnhfY2xvY2sgPSA3NTAwMCwgLm1heF9nZnhjbGsgPSA4NSB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbwlzc3RmYl9kZWZhdWx0ID0KLSNpZiAoIERFRkFVTFRfTU9ERSA9PSAwICkKLSAgICB7IC8qIDgwMHg2MDBANjAsIDE2IGJwcCAuYm9yb3dlZCBmcm9tIGdsaWRlL3NzdDEvaW5jbHVkZS9zc3QxaW5pdC5oICovCi0gICAgODAwLCA2MDAsIDgwMCwgNjAwLCAwLCAwLCAxNiwgMCwKLSAgICB7MTEsIDUsIDB9LCB7NSwgNiwgMH0sIHswLCA1LCAwfSwgezAsIDAsIDB9LAotICAgIDAsIDAsIC0xLCAtMSwgMCwKLSAgICAyNTAwMCwgODYsIDQxLCAyMywgMSwgMTI3LCA0LAotICAgIDAsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQgfTsKLSNlbGlmICggREVGQVVMVF9NT0RFID09IDEgKQotICAgIHsvKiA2NDB4NDgwQDc1LCAxNiBicHAgLmJvcm93ZWQgZnJvbSBnbGlkZS9zc3QxL2luY2x1ZGUvc3N0MWluaXQuaCAqLwotICAgIDY0MCwgNDgwLCA2NDAsIDQ4MCwgMCwgMCwgMTYsIDAsCi0gICAgezExLCA1LCAwfSwgezUsIDYsIDB9LCB7MCwgNSwgMH0sIHswLCAwLCAwfSwKLSAgICAwLCAwLCAtMSwgLTEsIDAsCi0gICAgMzE3NDYsIDExOCwgMTcsIDE2LCAxLCA2MywgMywKLSAgICAwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEIH07Ci0jZWxpZiAoIERFRkFVTFRfTU9ERSA9PSAyICkKLSAgICB7IC8qIDEwMjR4NzY4QDc2IHRvb2sgZnJvbSBteSAvZXRjL2ZiLm1vZGVzICovCi0gICAgMTAyNCwgNzY4LCAxMDI0LCA3NjgsMCwgMCwgMTYsMCwKLSAgICB7MTEsIDUsIDB9LCB7NSwgNiwgMH0sIHswLCA1LCAwfSwgezAsIDAsIDB9LAotICAgIDAsIDAsIC0xLCAtMSwgMCwKLSAgICAxMTc2NCwgMjA4LCA4LCAzNiwgMTYsIDEyMCwgMyAsCi0gICAgMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRCB9OwotI2VsaWYgKCBERUZBVUxUX01PREUgPT0gMyApCi0gICAgeyAvKiA2NDB4NDgwQDYwICwgMTZicHAgZ2xpZGUgZGVmYXVsdCA/Ki8KLSAgICA2NDAsIDQ4MCwgNjQwLCA0ODAsIDAsIDAsIDE2LCAwLAotICAgIHsxMSwgNSwgMH0sIHs1LCA2LCAwfSwgezAsIDUsIDB9LCB7MCwgMCwgMH0sCi0gICAgMCwgMCwgLTEsIC0xLCAwLAotICAgIDM5NzIxICwgIDM4LCAyNiAsICAyNSAsMTggICwgOTYgLDIsCi0gICAgMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRCB9OwotI2VsaWYKLSAgICAjZXJyb3IgIkludmFsaWQgREVGQVVMVF9NT0RFIHZhbHVlICEiCi0jZW5kaWYKLQogCiAvKgogICogZGVidWcgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIHZvaWQgc3N0ZmJfZHJhd2RlYnVnaW1hZ2Uoc3RydWN0IGZiX2luZm8gKmluZm8pOwotc3RhdGljIGludCBzc3RmYl9kdW1wX3JlZ3Moc3RydWN0IGZiX2luZm8gKmluZm8pOwotCi0KICNpZiAoU1NUX0RFQlVHX1JFRyA+IDApCiBzdGF0aWMgdm9pZCBzc3RfZGJnX3ByaW50X3JlYWRfcmVnKHUzMiByZWcsIHUzMiB2YWwpIHsKIAljb25zdCBjaGFyICpyZWduYW1lOwpAQCAtNzI2LDUxICs2ODksNzcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzc3RmYl9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdV9pbnQgY21kLCB1X2xvbmcgYXJnKQorc3RhdGljIHZvaWQgc3N0ZmJfc2V0dmdhcGFzcyggc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBlbmFibGUgKQogewogCXN0cnVjdCBzc3RmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgcGNpX2RldiAqc3N0X2RldiA9IHBhci0+ZGV2OwotCXUzMiBmYmlpbml0MCwgdG1wLCB2YWw7Ci0JdV9sb25nIHA7CisJdTMyIGZiaWluaXQwLCB0bXA7CisKKwllbmFibGUgPSBlbmFibGUgPyAxOjA7CisJaWYgKHBhci0+dmdhcGFzcyA9PSBlbmFibGUpCisJCXJldHVybjsKKwlwYXItPnZnYXBhc3MgPSBlbmFibGU7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoc3N0X2RldiwgUENJX0lOSVRfRU5BQkxFLCAmdG1wKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNzdF9kZXYsIFBDSV9JTklUX0VOQUJMRSwKKwkJCSAgICAgICB0bXAgfCBQQ0lfRU5fSU5JVF9XUiApOworCWZiaWluaXQwID0gc3N0X3JlYWQgKEZCSUlOSVQwKTsKKwlpZiAocGFyLT52Z2FwYXNzKSB7CisJCXNzdF93cml0ZShGQklJTklUMCwgZmJpaW5pdDAgJiB+RElTX1ZHQV9QQVNTVEhST1VHSCk7CisJCXByaW50ayhLRVJOX0lORk8gImZiJWQ6IEVuYWJsaW5nIFZHQSBwYXNzLXRocm91Z2hcbiIsIGluZm8tPm5vZGUgKTsKKwl9IGVsc2UgeworCQlzc3Rfd3JpdGUoRkJJSU5JVDAsIGZiaWluaXQwIHwgRElTX1ZHQV9QQVNTVEhST1VHSCk7CisJCXByaW50ayhLRVJOX0lORk8gImZiJWQ6IERpc2FibGluZyBWR0EgcGFzcy10aHJvdWdoXG4iLCBpbmZvLT5ub2RlICk7CisJfQorCXBjaV93cml0ZV9jb25maWdfZHdvcmQoc3N0X2RldiwgUENJX0lOSVRfRU5BQkxFLCB0bXApOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV92Z2FwYXNzKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCWNoYXIgKiogbGFzdCA9IE5VTEw7CisJaW50IHZhbDsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgbGFzdCwgMCk7CisJc3N0ZmJfc2V0dmdhcGFzcyhpbmZvLCB2YWwpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3ZnYXBhc3Moc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBzc3RmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgcGFyLT52Z2FwYXNzKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldmljZV9hdHRyc1tdID0geworCV9fQVRUUih2Z2FwYXNzLCBTX0lSVUdPfFNfSVdVU1IsIHNob3dfdmdhcGFzcywgc3RvcmVfdmdhcGFzcykKKwl9OworCitzdGF0aWMgaW50IHNzdGZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNzdGZiX3BhciAqcGFyOworCXUzMiB2YWw7CiAKIAlzd2l0Y2ggKGNtZCkgewotCQkKLQkvKiBkdW1wIGN1cnJlbnQgRkJJSU5JVCB2YWx1ZXMgdG8gc3lzdGVtIGxvZyAqLwotCWNhc2UgX0lPKCdGJywgMHhkYik6ICAgICAgICAgICAgLyogMHg0NmRiICovCi0JCXJldHVybiBzc3RmYl9kdW1wX3JlZ3MoaW5mbyk7Ci0JCQotCS8qIGZpbGxzIGxmYiB3aXRoICNhcmcgcGl4ZWxzICovCi0JY2FzZSBfSU9XKCdGJywgMHhkYywgdTMyKToJLyogMHg0NmRjICovCisJLyogc2V0L2dldCBWR0EgcGFzc190aHJvdWdoIG1vZGUgKi8KKwljYXNlIFNTVEZCX1NFVF9WR0FQQVNTOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbCwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodmFsKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZhbCA+IGluZm8tPmZpeC5zbWVtX2xlbikKLQkJCXZhbCA9IGluZm8tPmZpeC5zbWVtX2xlbjsKLQkJZm9yIChwID0gMCA7IHAgPCB2YWw7IHAgKz0gMikKLQkJCXdyaXRldyhwID4+IDYsIGluZm8tPnNjcmVlbl9iYXNlICsgcCk7CisJCXNzdGZiX3NldHZnYXBhc3MoaW5mbywgdmFsKTsKIAkJcmV0dXJuIDA7Ci0JCQotCS8qIGNoYW5nZSBWR0EgcGFzc190aHJvdWdoIG1vZGUgKi8KLQljYXNlIF9JT1coJ0YnLCAweGRkLCB1MzIpOgkvKiAweDQ2ZGQgKi8KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YWwsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHZhbCkpKQorCWNhc2UgU1NURkJfR0VUX1ZHQVBBU1M6CisJCXBhciA9IGluZm8tPnBhcjsKKwkJdmFsID0gcGFyLT52Z2FwYXNzOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnZhbCwgc2l6ZW9mKHZhbCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChzc3RfZGV2LCBQQ0lfSU5JVF9FTkFCTEUsICZ0bXApOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNzdF9kZXYsIFBDSV9JTklUX0VOQUJMRSwKLQkJCQkgICAgICAgdG1wIHwgUENJX0VOX0lOSVRfV1IgKTsKLQkJZmJpaW5pdDAgPSBzc3RfcmVhZCAoRkJJSU5JVDApOwotCQlpZiAodmFsKQotCQkJc3N0X3dyaXRlKEZCSUlOSVQwLCBmYmlpbml0MCAmIH5FTl9WR0FfUEFTU1RIUk9VR0gpOwotCQllbHNlCi0JCQlzc3Rfd3JpdGUoRkJJSU5JVDAsIGZiaWluaXQwIHwgRU5fVkdBX1BBU1NUSFJPVUdIKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzc3RfZGV2LCBQQ0lfSU5JVF9FTkFCTEUsIHRtcCk7Ci0JCXJldHVybiAwOwotCQkKLQkvKiBkcmF3IHRlc3QgaW1hZ2UgICovCi0JY2FzZSBfSU8oJ0YnLCAweGRlKToJCS8qIDB4NDZkZSAqLwotCQlmX2RwcmludGsoInRlc3QgY29sb3IgZGlzcGxheSBhdCAlZCBicHBcbiIsCi0JCQkJCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCk7Ci0JCXNzdGZiX2RyYXdkZWJ1Z2ltYWdlKGluZm8pOwogCQlyZXR1cm4gMDsKIAl9CisKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtODA0LDYgKzc5Myw3IEBACiAvKgogICogRmlsbFJlY3QgMkQgY29tbWFuZCAoc29saWRmaWxsIG9yIGludmVydCAodmlhIFJPUF9YT1IpKSAtIFZvb2RvbzIgb25seQogICovCisjaWYgMAogc3RhdGljIHZvaWQgc3N0ZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkgCiB7CiAJc3RydWN0IHNzdGZiX3BhciAqcGFyID0gaW5mby0+cGFyOwpAQCAtODI1LDYgKzgxNSw3IEBACiAJCSB8IChCTFRfMTZCUFBfRk1UIDw8IDMpIC8qIHwgQklUKDE0KSAqLyB8IEJJVCgxNSkgfCBCSVQoMTYpICk7CiAJc3N0X3dhaXRfaWRsZSgpOwogfQorI2VuZGlmCiAKIAogCkBAIC0xMTU2LDYgKzExNDcsNyBAQAogCXN0cnVjdCBwbGxfdGltaW5nIGdmeF90aW1pbmdzOwogCXN0cnVjdCBzc3Rfc3BlYyAqc3BlYzsKIAlpbnQgRm91dDsKKwlpbnQgZ2Z4X2Nsb2NrOwogCiAJc3BlYyA9ICZ2b29kb29fc3BlY1twYXItPnR5cGVdOwogCWZfZGRwcmludGsoIiBmYmlpbml0MCAgIGZiaWluaXQxICAgZmJpaW5pdDIgICBmYmlpbml0MyAgIGZiaWluaXQ0ICAiCkBAIC0xMTk2LDE1ICsxMTg4LDE1IEBACiAJfQogCiAJLyogc2V0IGdyYXBoaWMgY2xvY2sgKi8KLQlwYXItPmdmeF9jbG9jayA9IHNwZWMtPmRlZmF1bHRfZ2Z4X2Nsb2NrOworCWdmeF9jbG9jayA9IHNwZWMtPmRlZmF1bHRfZ2Z4X2Nsb2NrOwogCWlmICgoZ2Z4Y2xrID4xMCApICYmIChnZnhjbGsgPCBzcGVjLT5tYXhfZ2Z4Y2xrKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJzc3RmYjogVXNpbmcgc3VwcGxpZWQgZ3JhcGhpYyBmcmVxIDogJWRNSHpcbiIsIGdmeGNsayk7Ci0JCSBwYXItPmdmeF9jbG9jayA9IGdmeGNsayAqMTAwMDsKKwkJIGdmeF9jbG9jayA9IGdmeGNsayAqMTAwMDsKIAl9IGVsc2UgaWYgKGdmeGNsaykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzc3RmYjogJWRNaHogaXMgd2F5IG91dCBvZiBzcGVjISBVc2luZyBkZWZhdWx0XG4iLCBnZnhjbGspOwogCX0KIAotCXNzdF9jYWxjX3BsbChwYXItPmdmeF9jbG9jaywgJkZvdXQsICZnZnhfdGltaW5ncyk7CisJc3N0X2NhbGNfcGxsKGdmeF9jbG9jaywgJkZvdXQsICZnZnhfdGltaW5ncyk7CiAJcGFyLT5kYWNfc3cuc2V0X3BsbChpbmZvLCAmZ2Z4X3RpbWluZ3MsIEdGWF9DTE9DSyk7CiAKIAkvKiBkaXNhYmxlIGZiaWluaXQgcmVtYXAgKi8KQEAgLTEyMTUsMTAgKzEyMDcsMTEgQEAKIAlmYmlpbml0MCA9IEZCSUlOSVQwX0RFRkFVTFQ7CiAJZmJpaW5pdDEgPSBGQklJTklUMV9ERUZBVUxUOwogCWZiaWluaXQ0ID0gRkJJSU5JVDRfREVGQVVMVDsKLQlpZiAodmdhcGFzcykKLQkJZmJpaW5pdDAgJj0gfkVOX1ZHQV9QQVNTVEhST1VHSDsKKwlwYXItPnZnYXBhc3MgPSB2Z2FwYXNzOworCWlmIChwYXItPnZnYXBhc3MpCisJCWZiaWluaXQwICY9IH5ESVNfVkdBX1BBU1NUSFJPVUdIOwogCWVsc2UKLQkJZmJpaW5pdDAgfD0gRU5fVkdBX1BBU1NUSFJPVUdIOworCQlmYmlpbml0MCB8PSBESVNfVkdBX1BBU1NUSFJPVUdIOwogCWlmIChzbG93cGNpKSB7CiAJCWZiaWluaXQxIHw9IFNMT1dfUENJX1dSSVRFUzsKIAkJZmJpaW5pdDQgfD0gU0xPV19QQ0lfUkVBRFM7CkBAIC0xMjY3LDcgKzEyNjAsNyBAQAogCS8qIFRPRE8gbWF5YmUgc2h1dGRvd24gdGhlIGRhYywgdnJlZnJlc2ggYW5kIHNvIG9uLi4uICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9JTklUX0VOQUJMRSwKIAkgICAgICAgICAgICAgICAgICAgICAgIFBDSV9FTl9JTklUX1dSKTsKLQlzc3RfdW5zZXRfYml0cyhGQklJTklUMCwgRkJJX1JFU0VUIHwgRklGT19SRVNFVCB8IEVOX1ZHQV9QQVNTVEhST1VHSCk7CisJc3N0X3Vuc2V0X2JpdHMoRkJJSU5JVDAsIEZCSV9SRVNFVCB8IEZJRk9fUkVTRVQgfCBESVNfVkdBX1BBU1NUSFJPVUdIKTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1ZDTEtfRElTQUJMRSwwKTsKIAkvKiBtYXliZSBrZWVwIGZiaWluaXQqIGFuZCBQQ0lfSU5JVF9lbmFibGUgaW4gdGhlIGZiX2luZm8gc3RydWN0CiAJICogZnJvbSBzdGFydCA/ICovCkBAIC0xMjc4LDggKzEyNzEsNyBAQAogLyoKICAqIEludGVyZmFjZSB0byB0aGUgd29ybGQKICAqLwotI2lmbmRlZiBNT0RVTEUKLXN0YXRpYyBpbnQgIF9faW5pdCBzc3RmYl9zZXR1cChjaGFyICpvcHRpb25zKQorc3RhdGljIGludCAgX19kZXZpbml0IHNzdGZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCiB7CiAJY2hhciAqdGhpc19vcHQ7CiAKQEAgLTEzMTIsNyArMTMwNCw3IEBACiAJfQogCXJldHVybiAwOwogfQotI2VuZGlmCisKIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgc3N0ZmJfb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTE0MTYsMTUgKzE0MDgsMTAgQEAKIAkgKi8KIAlmaXgtPmxpbmVfbGVuZ3RoID0gMjA0ODsgLyogZGVmYXVsdCB2YWx1ZSwgZm9yIDI0IG9yIDMyYml0OiA0MDk2ICovCiAJCi0JaWYgKCBtb2RlX29wdGlvbiAmJgotCSAgICAgZmJfZmluZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sIG1vZGVfb3B0aW9uLCBOVUxMLCAwLCBOVUxMLCAxNikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzc3RmYjogY2FuJ3Qgc2V0IHN1cHBsaWVkIHZpZGVvIG1vZGUuIFVzaW5nIGRlZmF1bHRcbiIpOwotCQlpbmZvLT52YXIgPSBzc3RmYl9kZWZhdWx0OwotCX0gZWxzZQotCQlpbmZvLT52YXIgPSBzc3RmYl9kZWZhdWx0OworCWZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBtb2RlX29wdGlvbiwgTlVMTCwgMCwgTlVMTCwgMTYpOwogCiAJaWYgKHNzdGZiX2NoZWNrX3ZhcigmaW5mby0+dmFyLCBpbmZvKSkgewotCQlwcmludGsoS0VSTl9FUlIgInNzdGZiOiBpbnZhbGlkIGRlZmF1bHQgdmlkZW8gbW9kZS5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgInNzdGZiOiBpbnZhbGlkIHZpZGVvIG1vZGUuXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIApAQCAtMTQ0MiwxMCArMTQyOSwxMSBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JaWYgKDEpIC8qIHNldCB0byAwIHRvIHNlZSBhbiBpbml0aWFsIGJpdG1hcCBpbnN0ZWFkICovCi0JCXNzdGZiX2NsZWFyX3NjcmVlbihpbmZvKTsKLQllbHNlCi0JCXNzdGZiX2RyYXdkZWJ1Z2ltYWdlKGluZm8pOworCXNzdGZiX2NsZWFyX3NjcmVlbihpbmZvKTsKKworCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoaW5mby0+ZGV2LCAmZGV2aWNlX2F0dHJzWzBdKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic3N0ZmI6IGNhbid0IGNyZWF0ZSBzeXNmcyBlbnRyeS5cbiIpOworCiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlIGF0IDB4JXBcbiIsCiAJICAgICAgIGluZm8tPm5vZGUsIGZpeC0+aWQsIGluZm8tPnNjcmVlbl9iYXNlKTsKQEAgLTE0NTMsNiArMTQ0MSw3IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6CisJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKIGZhaWxfZmJfcmVtYXA6CiAJaW91bm1hcChwYXItPm1taW9fdmJhc2UpOwpAQCAtMTQ3MywyMSArMTQ2MiwyMyBAQAogCWluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJcGFyID0gaW5mby0+cGFyOwogCQorCWRldmljZV9yZW1vdmVfZmlsZShpbmZvLT5kZXYsICZkZXZpY2VfYXR0cnNbMF0pOwogCXNzdF9zaHV0ZG93bihpbmZvKTsKLQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogCWlvdW5tYXAocGFyLT5tbWlvX3ZiYXNlKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+Zml4LnNtZW1fc3RhcnQsIDB4NDAwMDAwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CisJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiB9CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNzdGZiX2lkX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF8zREZYLCBQQ0lfREVWSUNFX0lEXzNERlhfVk9PRE9PLAotCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSURfVk9PRE9PMSB9LAotCXsgUENJX1ZFTkRPUl9JRF8zREZYLCBQQ0lfREVWSUNFX0lEXzNERlhfVk9PRE9PMiwKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElEX1ZPT0RPTzIgfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzc3RmYl9pZF90YmxbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF8zREZYLCBQQ0lfREVWSUNFX0lEXzNERlhfVk9PRE9PICksCisJCS5kcml2ZXJfZGF0YSA9IElEX1ZPT0RPTzEsIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfM0RGWCwgUENJX0RFVklDRV9JRF8zREZYX1ZPT0RPTzIpLAorCQkuZHJpdmVyX2RhdGEgPSBJRF9WT09ET08yLCB9LAogCXsgMCB9LAogfTsKIApAQCAtMTUwMSwxNDIgKzE0OTIsMjMgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgc3N0ZmJfaW5pdCh2b2lkKQogewotI2lmbmRlZiBNT0RVTEUKIAljaGFyICpvcHRpb24gPSBOVUxMOwogCiAJaWYgKGZiX2dldF9vcHRpb25zKCJzc3RmYiIsICZvcHRpb24pKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlzc3RmYl9zZXR1cChvcHRpb24pOwotI2VuZGlmCisKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc3N0ZmJfZHJpdmVyKTsKIH0KIAotI2lmZGVmIE1PRFVMRQogc3RhdGljIHZvaWQgX19kZXZleGl0IHNzdGZiX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNzdGZiX2RyaXZlcik7CiB9Ci0jZW5kaWYKIAogCi0vKgotICogdGVzdGluZyBhbmQgZGVidWdnaW5nIGZ1bmN0aW9ucwotICovCi0KLXN0YXRpYyBpbnQgc3N0ZmJfZHVtcF9yZWdzKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotI2lmZGVmIFNTVF9ERUJVRwotCXN0YXRpYyBzdHJ1Y3QgeyB1MzIgcmVnIDsgY29uc3QgY2hhciAqcmVnX25hbWU7fSAgcGNpX3JlZ3NbXSA9IHsKLQkJeyBQQ0lfSU5JVF9FTkFCTEUsICJpbml0ZW5hYmxlIn0sCi0JCXsgUENJX1ZDTEtfRU5BQkxFLCAiZW5hYmxlIHZjbGsifSwKLQkJeyBQQ0lfVkNMS19ESVNBQkxFLCAiZGlzYWJsZSB2Y2xrIn0sCi0JfTsKLQotCXN0YXRpYyBzdHJ1Y3QgeyB1MzIgcmVnIDsgY29uc3QgY2hhciAqcmVnX25hbWU7fSAgc3N0X3JlZ3NbXSA9IHsKLQkJe0ZCSUlOSVQwLCJmYmlpbml0MCJ9LAotCQl7RkJJSU5JVDEsImZiaWluaXQxIn0sCi0JCXtGQklJTklUMiwiZmJpaW5pdDIifSwKLQkJe0ZCSUlOSVQzLCJmYmlpbml0MyJ9LAotCQl7RkJJSU5JVDQsImZiaWluaXQ0In0sCi0JCXtGQklJTklUNSwiZmJpaW5pdDUifSwKLQkJe0ZCSUlOSVQ2LCJmYmlpbml0NiJ9LAotCQl7RkJJSU5JVDcsImZiaWluaXQ3In0sCi0JCXtMRkJNT0RFLCJsZmJtb2RlIn0sCi0JCXtGQlpNT0RFLCJmYnptb2RlIn0sCi0JfTsKLQotCWNvbnN0IGludCBwY2lfcyA9IEFSUkFZX1NJWkUocGNpX3JlZ3MpOwotCWNvbnN0IGludCBzc3RfcyA9IEFSUkFZX1NJWkUoc3N0X3JlZ3MpOwotCXN0cnVjdCBzc3RmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcGFyLT5kZXY7Ci0JdTMyIHBjaV9yZXNbcGNpX3NdOwotCXUzMiBzc3RfcmVzW3NzdF9zXTsKLQlpbnQgaTsKLQotCWZvciAoaT0wOyBpPHBjaV9zOyBpKyspIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcGNpX3JlZ3NbaV0ucmVnLCAmcGNpX3Jlc1tpXSk7Ci0JfQotCWZvciAoaT0wOyBpPHNzdF9zOyBpKyspIHsKLQkJc3N0X3Jlc1tpXSA9IHNzdF9yZWFkKHNzdF9yZWdzW2ldLnJlZyk7Ci0JfQotCi0JZHByaW50aygiaGFyZHdhcmUgcmVnaXN0ZXIgZHVtcDpcbiIpOwotCWZvciAoaT0wOyBpPHBjaV9zOyBpKyspIHsKLQkJZHByaW50aygiJXMgJTAjMTB4XG4iLCBwY2lfcmVnc1tpXS5yZWdfbmFtZSwgcGNpX3Jlc1tpXSk7Ci0JfQotCWZvciAoaT0wOyBpPHNzdF9zOyBpKyspIHsKLQkJZHByaW50aygiJXMgJTAjMTB4XG4iLCBzc3RfcmVnc1tpXS5yZWdfbmFtZSwgc3N0X3Jlc1tpXSk7Ci0JfQotCXJldHVybiAwOwotI2Vsc2UKLQlyZXR1cm4gLUVJTlZBTDsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBzc3RmYl9maWxscmVjdF9zb2Z0dyggc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKLXsKLQl1OCBfX2lvbWVtICpmYmJhc2VfdmlydCA9IGluZm8tPnNjcmVlbl9iYXNlOwotCWludCB4LCB5LCB3ID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDE2ID8gMiA6IDQ7Ci0JdTMyIGNvbG9yID0gcmVjdC0+Y29sb3IsIGhlaWdodCA9IHJlY3QtPmhlaWdodDsKLQl1OCBfX2lvbWVtICpwOwotCQotCWlmICh3PT0yKSBjb2xvciB8PSBjb2xvcjw8MTY7Ci0JZm9yICh5PXJlY3QtPmR5OyBoZWlnaHQ7IHkrKywgaGVpZ2h0LS0pIHsKLQkJcCA9IGZiYmFzZV92aXJ0ICsgeSppbmZvLT5maXgubGluZV9sZW5ndGggKyByZWN0LT5keCp3OwotCQl4ID0gcmVjdC0+d2lkdGg7Ci0JCWlmICh3PT0yKSB4Pj49MTsKLQkJd2hpbGUgKHgpIHsKLQkJCXdyaXRlbChjb2xvciwgcCk7Ci0JCQlwICs9IDQ7Ci0JCQl4LS07Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNzdGZiX2RyYXdyZWN0X1hZKCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHgsIGludCB5LAotCQlpbnQgdywgaW50IGgsIGludCBjb2xvciwgaW50IGh3ZnVuYykKLXsKLQlzdHJ1Y3QgZmJfZmlsbHJlY3QgcmVjdDsKLQlyZWN0LmR4ID0geDsKLQlyZWN0LmR5ID0geTsKLQlyZWN0LmhlaWdodCA9IGg7Ci0JcmVjdC53aWR0aCA9IHc7Ci0JcmVjdC5jb2xvciA9IGNvbG9yOwotCXJlY3Qucm9wID0gUk9QX0NPUFk7Ci0JaWYgKGh3ZnVuYykKLQkJc3N0ZmJfZmlsbHJlY3QoaW5mbywgJnJlY3QpOwotCWVsc2UKLQkJc3N0ZmJfZmlsbHJlY3Rfc29mdHcoaW5mbywgJnJlY3QpOwotfQotCi0vKiBwcmludCBzb21lIHNxdWFyZXMgb24gdGhlIGZiICovCi1zdGF0aWMgdm9pZCBzc3RmYl9kcmF3ZGVidWdpbWFnZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdGF0aWMgaW50IGlkeDsKLQotCS8qIGNsZWFyIHNjcmVlbiAqLwotCXNzdGZiX2NsZWFyX3NjcmVlbihpbmZvKTsKLQkKLSAgIAlpZHggPSAoaWR4KzEpICYgMTsKLQotCS8qIHdoaXRlIHJlY3QgKi8KLQlzc3RmYl9kcmF3cmVjdF9YWShpbmZvLCAwLCAwLCA1MCwgNTAsIDB4ZmZmZiwgaWR4KTsKLQkKLQkvKiBibHVlIHJlY3QgKi8KLQlzc3RmYl9kcmF3cmVjdF9YWShpbmZvLCA1MCwgNTAsIDUwLCA1MCwgMHgwMDFmLCBpZHgpOwotCi0JLyogZ3JlZW4gcmVjdCAqLwotCXNzdGZiX2RyYXdyZWN0X1hZKGluZm8sIDEwMCwgMTAwLCA4MCwgODAsIDB4MDdlMCwgaWR4KTsKLQkKLQkvKiByZWQgcmVjdCAqLwotCXNzdGZiX2RyYXdyZWN0X1hZKGluZm8sIDI1MCwgMjUwLCAxMjAsIDEwMCwgMHhmODAwLCBpZHgpOwotfQotCiBtb2R1bGVfaW5pdChzc3RmYl9pbml0KTsKLQotI2lmZGVmIE1PRFVMRQogbW9kdWxlX2V4aXQoc3N0ZmJfZXhpdCk7Ci0jZW5kaWYKIAogTU9EVUxFX0FVVEhPUigiKGMpIDIwMDAsMjAwMiBHaG96bGFuZSBUb3VtaSA8Z3RvdW1pQGxhcG9zdGUubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJGQkRldiBkcml2ZXIgZm9yIDNkZnggVm9vZG9vIEdyYXBoaWNzIGFuZCBWb29kb28yIGJhc2VkIHZpZGVvIGJvYXJkcyIpOwpAQCAtMTY1MiwzICsxNTI0LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZ2Z4Y2xrLCAiRm9yY2UgZ3JhcGhpYyBjaGlwIGZyZXF1ZW5jeSBpbiBNSHouIERBTkdFUk9VUy4gKGRlZmF1bHQ9YXV0bykiKTsKIG1vZHVsZV9wYXJhbShzbG93cGNpLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2xvd3BjaSwgIlVzZXMgc2xvdyBQQ0kgc2V0dGluZ3MgKDAgb3IgMSkgKGRlZmF1bHQ9MCkiKTsKK21vZHVsZV9wYXJhbShtb2RlX29wdGlvbiwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyhtb2RlX29wdGlvbiwgIkluaXRpYWwgdmlkZW8gbW9kZSAoZGVmYXVsdD0iIERFRkFVTFRfVklERU9fTU9ERSAiKSIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3N0aWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3N0aWZiLmMKaW5kZXggM2UxNmUyZC4uNjlmM2IyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zdGlmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc3RpZmIuYwpAQCAtMTI5MSw2ICsxMjkxLDcgQEAKIG91dF9lcnIyOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihmaXgtPnNtZW1fc3RhcnQsIGZpeC0+c21lbV9sZW4pOwogb3V0X2VycjE6CisJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIG91dF9lcnIwOgogCWtmcmVlKGZiKTsKQEAgLTEzNjQsNiArMTM2NSw4IEBACiAJCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0aS0+aW5mbyk7CiAJCQlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CiAJCSAgICAgICAgcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5maXguc21lbV9sZW4pOworCQkJCWlmIChpbmZvLT5zY3JlZW5fYmFzZSkKKwkJCQkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAJCSAgICAgICAgZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIAkJICAgICAgICBrZnJlZShpbmZvKTsgCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdGN4LmMgYi9kcml2ZXJzL3ZpZGVvL3RjeC5jCmluZGV4IDY5OTBhYjEuLjVhOTk2NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdGN4LmMKKysrIGIvZHJpdmVycy92aWRlby90Y3guYwpAQCAtMzUwLDE4ICszNTAsMjMgQEAKIAlzdHJ1Y3QgdGN4X3BhciBwYXI7CiB9OwogCi1zdGF0aWMgdm9pZCB0Y3hfdW5tYXBfcmVncyhzdHJ1Y3QgYWxsX2luZm8gKmFsbCkKK3N0YXRpYyB2b2lkIHRjeF91bm1hcF9yZWdzKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBzdHJ1Y3QgYWxsX2luZm8gKmFsbCkKIHsKIAlpZiAoYWxsLT5wYXIudGVjKQotCQlvZl9pb3VubWFwKGFsbC0+cGFyLnRlYywgc2l6ZW9mKHN0cnVjdCB0Y3hfdGVjKSk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVs3XSwKKwkJCSAgIGFsbC0+cGFyLnRlYywgc2l6ZW9mKHN0cnVjdCB0Y3hfdGVjKSk7CiAJaWYgKGFsbC0+cGFyLnRoYykKLQkJb2ZfaW91bm1hcChhbGwtPnBhci50aGMsIHNpemVvZihzdHJ1Y3QgdGN4X3RoYykpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbOV0sCisJCQkgICBhbGwtPnBhci50aGMsIHNpemVvZihzdHJ1Y3QgdGN4X3RoYykpOwogCWlmIChhbGwtPnBhci5idCkKLQkJb2ZfaW91bm1hcChhbGwtPnBhci5idCwgc2l6ZW9mKHN0cnVjdCBidF9yZWdzKSk7CisJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVs4XSwKKwkJCSAgIGFsbC0+cGFyLmJ0LCBzaXplb2Yoc3RydWN0IGJ0X3JlZ3MpKTsKIAlpZiAoYWxsLT5wYXIuY3BsYW5lKQotCQlvZl9pb3VubWFwKGFsbC0+cGFyLmNwbGFuZSwgYWxsLT5wYXIuZmJzaXplICogc2l6ZW9mKHUzMikpOworCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbNF0sCisJCQkgICBhbGwtPnBhci5jcGxhbmUsIGFsbC0+cGFyLmZic2l6ZSAqIHNpemVvZih1MzIpKTsKIAlpZiAoYWxsLT5pbmZvLnNjcmVlbl9iYXNlKQotCQlvZl9pb3VubWFwKGFsbC0+aW5mby5zY3JlZW5fYmFzZSwgYWxsLT5wYXIuZmJzaXplKTsKKwkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLAorCQkJICAgYWxsLT5pbmZvLnNjcmVlbl9iYXNlLCBhbGwtPnBhci5mYnNpemUpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0Y3hfaW5pdF9vbmUoc3RydWN0IG9mX2RldmljZSAqb3ApCkBAIC0zOTgsNyArNDAzLDcgQEAKIAkJCQkJICAgYWxsLT5wYXIuZmJzaXplLCAidGN4IHJhbSIpOwogCWlmICghYWxsLT5wYXIudGVjIHx8ICFhbGwtPnBhci50aGMgfHwKIAkgICAgIWFsbC0+cGFyLmJ0IHx8ICFhbGwtPmluZm8uc2NyZWVuX2Jhc2UpIHsKLQkJdGN4X3VubWFwX3JlZ3MoYWxsKTsKKwkJdGN4X3VubWFwX3JlZ3Mob3AsIGFsbCk7CiAJCWtmcmVlKGFsbCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTQwOSw3ICs0MTQsNyBAQAogCQkJCQkgICAgIGFsbC0+cGFyLmZic2l6ZSAqIHNpemVvZih1MzIpLAogCQkJCQkgICAgICJ0Y3ggY3BsYW5lIik7CiAJCWlmICghYWxsLT5wYXIuY3BsYW5lKSB7Ci0JCQl0Y3hfdW5tYXBfcmVncyhhbGwpOworCQkJdGN4X3VubWFwX3JlZ3Mob3AsIGFsbCk7CiAJCQlrZnJlZShhbGwpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTQ2MSw3ICs0NjYsNyBAQAogCXRjeF9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCAmYWxsLT5pbmZvKTsKIAogCWlmIChmYl9hbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCwgMjU2LCAwKSkgewotCQl0Y3hfdW5tYXBfcmVncyhhbGwpOworCQl0Y3hfdW5tYXBfcmVncyhvcCwgYWxsKTsKIAkJa2ZyZWUoYWxsKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNDcyLDcgKzQ3Nyw3IEBACiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7Ci0JCXRjeF91bm1hcF9yZWdzKGFsbCk7CisJCXRjeF91bm1hcF9yZWdzKG9wLCBhbGwpOwogCQlrZnJlZShhbGwpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTQ5NSwxOCArNTAwLDE4IEBACiAJcmV0dXJuIHRjeF9pbml0X29uZShvcCk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHRjeF9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgdGN4X3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKLQlzdHJ1Y3QgYWxsX2luZm8gKmFsbCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBhbGxfaW5mbyAqYWxsID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKIAogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmFsbC0+aW5mbyk7CiAJZmJfZGVhbGxvY19jbWFwKCZhbGwtPmluZm8uY21hcCk7CiAKLQl0Y3hfdW5tYXBfcmVncyhhbGwpOworCXRjeF91bm1hcF9yZWdzKG9wLCBhbGwpOwogCiAJa2ZyZWUoYWxsKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIE5VTEwpOworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdGdhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdGdhZmIuYwppbmRleCA5NGZkZTYyLi40Yjg4ZmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RnYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby90Z2FmYi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zZWxlY3Rpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDx2aWRlby90Z2FmYi5oPgogCkBAIC01MTcsNDEgKzUxOCw2IEBACiBzdGF0aWMgdm9pZAogdGdhZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQogewotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IGJpdHJldlsyNTZdID0gewotCQkweDAwLCAweDgwLCAweDQwLCAweGMwLCAweDIwLCAweGEwLCAweDYwLCAweGUwLAotCQkweDEwLCAweDkwLCAweDUwLCAweGQwLCAweDMwLCAweGIwLCAweDcwLCAweGYwLAotCQkweDA4LCAweDg4LCAweDQ4LCAweGM4LCAweDI4LCAweGE4LCAweDY4LCAweGU4LAotCQkweDE4LCAweDk4LCAweDU4LCAweGQ4LCAweDM4LCAweGI4LCAweDc4LCAweGY4LAotCQkweDA0LCAweDg0LCAweDQ0LCAweGM0LCAweDI0LCAweGE0LCAweDY0LCAweGU0LAotCQkweDE0LCAweDk0LCAweDU0LCAweGQ0LCAweDM0LCAweGI0LCAweDc0LCAweGY0LAotCQkweDBjLCAweDhjLCAweDRjLCAweGNjLCAweDJjLCAweGFjLCAweDZjLCAweGVjLAotCQkweDFjLCAweDljLCAweDVjLCAweGRjLCAweDNjLCAweGJjLCAweDdjLCAweGZjLAotCQkweDAyLCAweDgyLCAweDQyLCAweGMyLCAweDIyLCAweGEyLCAweDYyLCAweGUyLAotCQkweDEyLCAweDkyLCAweDUyLCAweGQyLCAweDMyLCAweGIyLCAweDcyLCAweGYyLAotCQkweDBhLCAweDhhLCAweDRhLCAweGNhLCAweDJhLCAweGFhLCAweDZhLCAweGVhLAotCQkweDFhLCAweDlhLCAweDVhLCAweGRhLCAweDNhLCAweGJhLCAweDdhLCAweGZhLAotCQkweDA2LCAweDg2LCAweDQ2LCAweGM2LCAweDI2LCAweGE2LCAweDY2LCAweGU2LAotCQkweDE2LCAweDk2LCAweDU2LCAweGQ2LCAweDM2LCAweGI2LCAweDc2LCAweGY2LAotCQkweDBlLCAweDhlLCAweDRlLCAweGNlLCAweDJlLCAweGFlLCAweDZlLCAweGVlLAotCQkweDFlLCAweDllLCAweDVlLCAweGRlLCAweDNlLCAweGJlLCAweDdlLCAweGZlLAotCQkweDAxLCAweDgxLCAweDQxLCAweGMxLCAweDIxLCAweGExLCAweDYxLCAweGUxLAotCQkweDExLCAweDkxLCAweDUxLCAweGQxLCAweDMxLCAweGIxLCAweDcxLCAweGYxLAotCQkweDA5LCAweDg5LCAweDQ5LCAweGM5LCAweDI5LCAweGE5LCAweDY5LCAweGU5LAotCQkweDE5LCAweDk5LCAweDU5LCAweGQ5LCAweDM5LCAweGI5LCAweDc5LCAweGY5LAotCQkweDA1LCAweDg1LCAweDQ1LCAweGM1LCAweDI1LCAweGE1LCAweDY1LCAweGU1LAotCQkweDE1LCAweDk1LCAweDU1LCAweGQ1LCAweDM1LCAweGI1LCAweDc1LCAweGY1LAotCQkweDBkLCAweDhkLCAweDRkLCAweGNkLCAweDJkLCAweGFkLCAweDZkLCAweGVkLAotCQkweDFkLCAweDlkLCAweDVkLCAweGRkLCAweDNkLCAweGJkLCAweDdkLCAweGZkLAotCQkweDAzLCAweDgzLCAweDQzLCAweGMzLCAweDIzLCAweGEzLCAweDYzLCAweGUzLAotCQkweDEzLCAweDkzLCAweDUzLCAweGQzLCAweDMzLCAweGIzLCAweDczLCAweGYzLAotCQkweDBiLCAweDhiLCAweDRiLCAweGNiLCAweDJiLCAweGFiLCAweDZiLCAweGViLAotCQkweDFiLCAweDliLCAweDViLCAweGRiLCAweDNiLCAweGJiLCAweDdiLCAweGZiLAotCQkweDA3LCAweDg3LCAweDQ3LCAweGM3LCAweDI3LCAweGE3LCAweDY3LCAweGU3LAotCQkweDE3LCAweDk3LCAweDU3LCAweGQ3LCAweDM3LCAweGI3LCAweDc3LCAweGY3LAotCQkweDBmLCAweDhmLCAweDRmLCAweGNmLCAweDJmLCAweGFmLCAweDZmLCAweGVmLAotCQkweDFmLCAweDlmLCAweDVmLCAweGRmLCAweDNmLCAweGJmLCAweDdmLCAweGZmCi0JfTsKLQogCXN0cnVjdCB0Z2FfcGFyICpwYXIgPSAoc3RydWN0IHRnYV9wYXIgKikgaW5mby0+cGFyOwogCXUzMiBmZ2NvbG9yLCBiZ2NvbG9yLCBkeCwgZHksIHdpZHRoLCBoZWlnaHQsIHZ4cmVzLCB2eXJlcywgcGl4ZWxtYXNrOwogCXVuc2lnbmVkIGxvbmcgcmluY3IsIGxpbmVfbGVuZ3RoLCBzaGlmdCwgcG9zLCBpczhicHA7CkBAIC02NDksNyArNjE1LDcgQEAKIAkJCS8qIFRoZSBpbWFnZSBkYXRhIGlzIGJpdCBiaWcgZW5kaWFuOyB3ZSBuZWVkCiAJCQkgICBsaXR0bGUgZW5kaWFuLiAgKi8KIAkJCWZvciAoaiA9IDA7IGogPCBid2lkdGg7ICsraikKLQkJCQltYXNrIHw9IGJpdHJldltkYXRhW2pdXSA8PCAoaiAqIDgpOworCQkJCW1hc2sgfD0gYml0cmV2OChkYXRhW2pdKSA8PCAoaiAqIDgpOwogCiAJCQlfX3Jhd193cml0ZWwobWFzayA8PCBzaGlmdCwgZmJfYmFzZSArIHBvcyk7CiAKQEAgLTY3NiwxMCArNjQyLDEwIEBACiAJCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7ICsraSkgewogCQkJZm9yIChqID0gMDsgaiA8IGJ3aWR0aDsgaiArPSA0KSB7CiAJCQkJdTMyIG1hc2sgPSAwOwotCQkJCW1hc2sgfD0gYml0cmV2W2RhdGFbaiswXV0gPDwgKDAgKiA4KTsKLQkJCQltYXNrIHw9IGJpdHJldltkYXRhW2orMV1dIDw8ICgxICogOCk7Ci0JCQkJbWFzayB8PSBiaXRyZXZbZGF0YVtqKzJdXSA8PCAoMiAqIDgpOwotCQkJCW1hc2sgfD0gYml0cmV2W2RhdGFbaiszXV0gPDwgKDMgKiA4KTsKKwkJCQltYXNrIHw9IGJpdHJldjgoZGF0YVtqKzBdKSA8PCAoMCAqIDgpOworCQkJCW1hc2sgfD0gYml0cmV2OChkYXRhW2orMV0pIDw8ICgxICogOCk7CisJCQkJbWFzayB8PSBiaXRyZXY4KGRhdGFbaisyXSkgPDwgKDIgKiA4KTsKKwkJCQltYXNrIHw9IGJpdHJldjgoZGF0YVtqKzNdKSA8PCAoMyAqIDgpOwogCQkJCV9fcmF3X3dyaXRlbChtYXNrLCBmYl9iYXNlICsgcG9zICsgaipiaW5jcik7CiAJCQl9CiAJCQlwb3MgKz0gbGluZV9sZW5ndGg7CkBAIC02OTksNyArNjY1LDcgQEAKIAkJCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7ICsraSkgewogCQkJCXUzMiBtYXNrID0gMDsKIAkJCQlmb3IgKGogPSAwOyBqIDwgYndpZHRoOyArK2opCi0JCQkJCW1hc2sgfD0gYml0cmV2W2RhdGFbal1dIDw8IChqICogOCk7CisJCQkJCW1hc2sgfD0gYml0cmV2OChkYXRhW2pdKSA8PCAoaiAqIDgpOwogCQkJCV9fcmF3X3dyaXRlbChtYXNrLCBmYl9iYXNlICsgcG9zKTsKIAkJCQlwb3MgKz0gbGluZV9sZW5ndGg7CiAJCQkJZGF0YSArPSByaW5jcjsKQEAgLTcyNiw4ICs2OTIsOCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyArK2kpIHsKIAkJCWZvciAoaiA9IDA7IGogPCBid2lkdGg7IGogKz0gMikgewogCQkJCXUzMiBtYXNrID0gMDsKLQkJCQltYXNrIHw9IGJpdHJldltkYXRhW2orMF1dIDw8ICgwICogOCk7Ci0JCQkJbWFzayB8PSBiaXRyZXZbZGF0YVtqKzFdXSA8PCAoMSAqIDgpOworCQkJCW1hc2sgfD0gYml0cmV2OChkYXRhW2orMF0pIDw8ICgwICogOCk7CisJCQkJbWFzayB8PSBiaXRyZXY4KGRhdGFbaisxXSkgPDwgKDEgKiA4KTsKIAkJCQltYXNrIDw8PSBzaGlmdDsKIAkJCQlfX3Jhd193cml0ZWwobWFzaywgZmJfYmFzZSArIHBvcyArIGoqYmluY3IpOwogCQkJfQpAQCAtNzQ2LDkgKzcxMiw5IEBACiAJCQlid2lkdGggPSAod2lkdGggJiAxNSkgPiA4OwogCiAJCQlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyArK2kpIHsKLQkJCQl1MzIgbWFzayA9IGJpdHJldltkYXRhWzBdXTsKKwkJCQl1MzIgbWFzayA9IGJpdHJldjgoZGF0YVswXSk7CiAJCQkJaWYgKGJ3aWR0aCkKLQkJCQkJbWFzayB8PSBiaXRyZXZbZGF0YVsxXV0gPDwgODsKKwkJCQkJbWFzayB8PSBiaXRyZXY4KGRhdGFbMV0pIDw8IDg7CiAJCQkJbWFzayA8PD0gc2hpZnQ7CiAJCQkJX19yYXdfd3JpdGVsKG1hc2ssIGZiX2Jhc2UgKyBwb3MpOwogCQkJCXBvcyArPSBsaW5lX2xlbmd0aDsKQEAgLTE0NzMsNiArMTQzOSw4IEBACiAJcmV0dXJuIDA7CiAKICBlcnIxOgorCWlmIChtZW1fYmFzZSkKKwkJaW91bm1hcChtZW1fYmFzZSk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGJhcjBfc3RhcnQsIGJhcjBfbGVuKTsKICBlcnIwOgogCWtmcmVlKGFsbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RyaWRlbnRmYi5jIGIvZHJpdmVycy92aWRlby90cmlkZW50ZmIuYwppbmRleCAxNDE3NWNkYi4uNTVlOGFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90cmlkZW50ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RyaWRlbnRmYi5jCkBAIC0xMTMwLDcgKzExMzAsOCBAQAogCQogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHRyaWRlbnRmYl9maXguc21lbV9zdGFydCwgdHJpZGVudGZiX2ZpeC5zbWVtX2xlbiwgInRyaWRlbnRmYiIpKSB7CiAJCWRlYnVnKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkIVxuIik7Ci0JCXJldHVybiAtMTsKKwkJZXJyID0gLTE7CisJCWdvdG8gb3V0X3VubWFwOwogCX0KIAogCWZiX2luZm8uc2NyZWVuX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUodHJpZGVudGZiX2ZpeC5zbWVtX3N0YXJ0LApAQCAtMTEzOSw3ICsxMTQwLDggQEAKIAlpZiAoIWZiX2luZm8uc2NyZWVuX2Jhc2UpIHsKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKHRyaWRlbnRmYl9maXguc21lbV9zdGFydCwgdHJpZGVudGZiX2ZpeC5zbWVtX2xlbik7CiAJCWRlYnVnKCJpb3JlbWFwIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtMTsKKwkJZXJyID0gLTE7CisJCWdvdG8gb3V0X3VubWFwOwogCX0KIAogCW91dHB1dCgiJXMgYm9hcmQgZm91bmRcbiIsIHBjaV9uYW1lKGRldikpOwpAQCAtMTE2Miw4ICsxMTY0LDEwIEBACiAjZW5kaWYKIAlmYl9pbmZvLnBzZXVkb19wYWxldHRlID0gcHNldWRvX3BhbDsKIAotCWlmICghZmJfZmluZF9tb2RlKCZkZWZhdWx0X3ZhciwmZmJfaW5mbyxtb2RlLE5VTEwsMCxOVUxMLGJwcCkpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghZmJfZmluZF9tb2RlKCZkZWZhdWx0X3ZhciwmZmJfaW5mbyxtb2RlLE5VTEwsMCxOVUxMLGJwcCkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfdW5tYXA7CisJfQogCWZiX2FsbG9jX2NtYXAoJmZiX2luZm8uY21hcCwyNTYsMCk7CiAJaWYgKGRlZmF1bHRhY2NlbCAmJiBhY2MpCiAJCWRlZmF1bHRfdmFyLmFjY2VsX2ZsYWdzIHw9IEZCX0FDQ0VMRl9URVhUOwpAQCAtMTE3NCwxMiArMTE3OCwyMCBAQAogCWZiX2luZm8uZGV2aWNlID0gJmRldi0+ZGV2OwogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbykgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidHJpZGVudGZiOiBjb3VsZCBub3QgcmVnaXN0ZXIgVHJpZGVudCBmcmFtZWJ1ZmZlclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF91bm1hcDsKIAl9CiAJb3V0cHV0KCJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlICVkeCVkLSVkYnBwXG4iLAogCSAgIGZiX2luZm8ubm9kZSwgZmJfaW5mby5maXguaWQsZGVmYXVsdF92YXIueHJlcywKIAkgICBkZWZhdWx0X3Zhci55cmVzLGRlZmF1bHRfdmFyLmJpdHNfcGVyX3BpeGVsKTsKIAlyZXR1cm4gMDsKKworb3V0X3VubWFwOgorCWlmIChkZWZhdWx0X3Bhci5pb192aXJ0KQorCQlpb3VubWFwKGRlZmF1bHRfcGFyLmlvX3ZpcnQpOworCWlmIChmYl9pbmZvLnNjcmVlbl9iYXNlKQorCQlpb3VubWFwKGZiX2luZm8uc2NyZWVuX2Jhc2UpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB0cmlkZW50X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKiBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jIGIvZHJpdmVycy92aWRlby92ZXNhZmIuYwppbmRleCAyMTk2NDQ4Li5lMTYzMjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKQEAgLTQ3LDE3ICs0NywxNiBAQAogCS5hY2NlbAk9IEZCX0FDQ0VMX05PTkUsCiB9OwogCi1zdGF0aWMgaW50ICAgICAgICAgICAgIGludmVyc2UgICA9IDA7Ci1zdGF0aWMgaW50ICAgICAgICAgICAgIG10cnIgICAgICA9IDA7IC8qIGRpc2FibGUgbXRyciAqLwotc3RhdGljIGludAkgICAgICAgdnJhbV9yZW1hcCBfX2luaXRkYXRhID0gMDsgLyogU2V0IGFtb3VudCBvZiBtZW1vcnkgdG8gYmUgdXNlZCAqLwotc3RhdGljIGludAkgICAgICAgdnJhbV90b3RhbCBfX2luaXRkYXRhID0gMDsgLyogU2V0IHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgKi8KLXN0YXRpYyBpbnQgICAgICAgICAgICAgcG1pX3NldHBhbCA9IDE7CS8qIHBtaSBmb3IgcGFsZXR0ZSBjaGFuZ2VzID8/PyAqLwotc3RhdGljIGludCAgICAgICAgICAgICB5cGFuICAgICAgID0gMDsgIC8qIDAuLm5vdGhpbmcsIDEuLnlwYW4sIDIuLnl3cmFwICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgICpwbWlfYmFzZSAgPSBOVUxMOwotc3RhdGljIHZvaWQgICAgICAgICAgICAoKnBtaV9zdGFydCkodm9pZCk7Ci1zdGF0aWMgdm9pZCAgICAgICAgICAgICgqcG1pX3BhbCkodm9pZCk7Ci1zdGF0aWMgaW50ICAgICAgICAgICAgIGRlcHRoOwotc3RhdGljIGludCAgICAgICAgICAgICB2Z2FfY29tcGF0Oworc3RhdGljIGludCAgIGludmVyc2UgICAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBpbnQgICBtdHJyICAgICAgIF9fcmVhZF9tb3N0bHk7CQkvKiBkaXNhYmxlIG10cnIgKi8KK3N0YXRpYyBpbnQgICB2cmFtX3JlbWFwIF9faW5pdGRhdGE7CQkvKiBTZXQgYW1vdW50IG9mIG1lbW9yeSB0byBiZSB1c2VkICovCitzdGF0aWMgaW50ICAgdnJhbV90b3RhbCBfX2luaXRkYXRhOwkJLyogU2V0IHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgKi8KK3N0YXRpYyBpbnQgICBwbWlfc2V0cGFsIF9fcmVhZF9tb3N0bHkgPSAxOwkvKiBwbWkgZm9yIHBhbGV0dGUgY2hhbmdlcyA/Pz8gKi8KK3N0YXRpYyBpbnQgICB5cGFuICAgICAgIF9fcmVhZF9tb3N0bHk7CQkvKiAwLi5ub3RoaW5nLCAxLi55cGFuLCAyLi55d3JhcCAqLworc3RhdGljIHZvaWQgICgqcG1pX3N0YXJ0KSh2b2lkKSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHZvaWQgICgqcG1pX3BhbCkgICh2b2lkKSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGludCAgIGRlcHRoICAgICAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBpbnQgICB2Z2FfY29tcGF0IF9fcmVhZF9tb3N0bHk7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCB2ZXNhZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCkBAIC0zMTIsNiArMzExLDcgQEAKIAkJeXBhbiA9IHBtaV9zZXRwYWwgPSAwOyAvKiBub3QgYXZhaWxhYmxlIG9yIHNvbWUgRE9TIFRTUiAuLi4gKi8KIAogCWlmICh5cGFuIHx8IHBtaV9zZXRwYWwpIHsKKwkJdW5zaWduZWQgc2hvcnQgKnBtaV9iYXNlOwogCQlwbWlfYmFzZSAgPSAodW5zaWduZWQgc2hvcnQqKXBoeXNfdG9fdmlydCgoKHVuc2lnbmVkIGxvbmcpc2NyZWVuX2luZm8udmVzYXBtX3NlZyA8PCA0KSArIHNjcmVlbl9pbmZvLnZlc2FwbV9vZmYpOwogCQlwbWlfc3RhcnQgPSAodm9pZCopKChjaGFyKilwbWlfYmFzZSArIHBtaV9iYXNlWzFdKTsKIAkJcG1pX3BhbCAgID0gKHZvaWQqKSgoY2hhciopcG1pX2Jhc2UgKyBwbWlfYmFzZVsyXSk7CkBAIC00NTYsNiArNDU2LDggQEAKIAkgICAgICAgaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkKTsKIAlyZXR1cm4gMDsKIGVycjoKKwlpZiAoaW5mby0+c2NyZWVuX2Jhc2UpCisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHZlc2FmYl9maXguc21lbV9zdGFydCwgc2l6ZV90b3RhbCk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jIGIvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKaW5kZXggNDNkNWE2ZC4uNmFmZjYzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKKysrIGIvZHJpdmVycy92aWRlby92Z2ExNmZiLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvLAogCQkJICAgICAgIGludCBtdWwsIGludCBkaXYpCiB7Ci0Jc3RhdGljIHN0cnVjdCB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJCXUzMiBwaXhjbG9jazsKIAkJdTggIG1pc2M7CiAJCXU4ICBzZXFfY2xvY2tfbW9kZTsKQEAgLTY1Miw3ICs2NTIsNyBAQAogCiBzdGF0aWMgdm9pZCBlZ2ExNl9zZXRwYWxldHRlKGludCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwgdW5zaWduZWQgYmx1ZSkKIHsKLQlzdGF0aWMgdW5zaWduZWQgY2hhciBtYXBbXSA9IHsgMDAwLCAwMDEsIDAxMCwgMDExIH07CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWFwW10gPSB7IDAwMCwgMDAxLCAwMTAsIDAxMSB9OwogCWludCB2YWw7CiAJCiAJaWYgKHJlZ25vID49IDE2KQpAQCAtMTEzOSwyMyArMTEzOSwxOSBAQAogCX0KIH0KIAotI2lmZGVmIF9fTElUVExFX0VORElBTgotc3RhdGljIHVuc2lnbmVkIGludCB0cmFuc2xfbFtdID0KLXsweDAsMHg4LDB4NCwweEMsMHgyLDB4QSwweDYsMHhFLDB4MSwweDksMHg1LDB4RCwweDMsMHhCLDB4NywweEZ9Owotc3RhdGljIHVuc2lnbmVkIGludCB0cmFuc2xfaFtdID0KLXsweDAwMCwgMHg4MDAsIDB4NDAwLCAweEMwMCwgMHgyMDAsIDB4QTAwLCAweDYwMCwgMHhFMDAsCi0gMHgxMDAsIDB4OTAwLCAweDUwMCwgMHhEMDAsIDB4MzAwLCAweEIwMCwgMHg3MDAsIDB4RjAwfTsKLSNlbHNlCi0jaWZkZWYgX19CSUdfRU5ESUFOCi1zdGF0aWMgdW5zaWduZWQgaW50IHRyYW5zbF9oW10gPQotezB4MCwweDgsMHg0LDB4QywweDIsMHhBLDB4NiwweEUsMHgxLDB4OSwweDUsMHhELDB4MywweEIsMHg3LDB4Rn07Ci1zdGF0aWMgdW5zaWduZWQgaW50IHRyYW5zbF9sW10gPQotezB4MDAwLCAweDgwMCwgMHg0MDAsIDB4QzAwLCAweDIwMCwgMHhBMDAsIDB4NjAwLCAweEUwMCwKLSAweDEwMCwgMHg5MDAsIDB4NTAwLCAweEQwMCwgMHgzMDAsIDB4QjAwLCAweDcwMCwgMHhGMDB9OworI2RlZmluZSBUUkFOU19NQVNLX0xPVyAgezB4MCwweDgsMHg0LDB4QywweDIsMHhBLDB4NiwweEUsMHgxLDB4OSwweDUsMHhELDB4MywweEIsMHg3LDB4Rn0KKyNkZWZpbmUgVFJBTlNfTUFTS19ISUdIIHsweDAwMCwgMHg4MDAsIDB4NDAwLCAweEMwMCwgMHgyMDAsIDB4QTAwLCAweDYwMCwgMHhFMDAsIFwKKwkJCSAweDEwMCwgMHg5MDAsIDB4NTAwLCAweEQwMCwgMHgzMDAsIDB4QjAwLCAweDcwMCwgMHhGMDB9CisKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKK3N0YXRpYyBjb25zdCB1MTYgdHJhbnNsX2xbXSA9IFRSQU5TX01BU0tfTE9XOworc3RhdGljIGNvbnN0IHUxNiB0cmFuc2xfaFtdID0gVFJBTlNfTUFTS19ISUdIOworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCitzdGF0aWMgY29uc3QgdTE2IHRyYW5zbF9sW10gPSBUUkFOU19NQVNLX0hJR0g7CitzdGF0aWMgY29uc3QgdTE2IHRyYW5zbF9oW10gPSBUUkFOU19NQVNLX0xPVzsKICNlbHNlCiAjZXJyb3IgIk9ubHkgX19CSUdfRU5ESUFOIGFuZCBfX0xJVFRMRV9FTkRJQU4gYXJlIHN1cHBvcnRlZCBpbiB2Z2EtcGxhbmVzIgogI2VuZGlmCi0jZW5kaWYKIAogc3RhdGljIHZvaWQgdmdhXzhwbGFuZXNfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aXJnZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpcmdlZmIuYwppbmRleCA2NDM3ODk1Li5iOWZiNmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpcmdlZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpcmdlZmIuYwpAQCAtMTc5OSw3ICsxNzk5LDcgQEAKIAkJI3dhcm5pbmcgcmVsZWFzZSByZXNvdXJjZXMKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aXJnZWZiLmM6IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyIGZhaWxlZFxuIik7CiAJCURQUklOVEsoIkVYSVRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXRfdW5tYXA7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZSwgdXNpbmcgJWxkSyBvZiB2aWRlbyBtZW1vcnlcbiIsCkBAIC0xODA5LDYgKzE4MDksMjEgQEAKIAogCURQUklOVEsoIkVYSVRcbiIpOwogCXJldHVybiAwOworCitvdXRfdW5tYXA6CisJaWYgKGJvYXJkX2FkZHIgPj0gMHgwMTAwMDAwMCkgeworCQlpZiAodl9yYW0pCisJCQlpb3VubWFwKCh2b2lkKil2X3JhbSk7CisJCWlmICh2Z2Fpb19yZWdzKQorCQkJaW91bm1hcCh2Z2Fpb19yZWdzKTsKKwkJaWYgKG1taW9fcmVncykKKwkJCWlvdW5tYXAobW1pb19yZWdzKTsKKwkJaWYgKHZjb2RlX3N3aXRjaF9iYXNlKQorCQkJaW91bm1hcCgodm9pZCopdmNvZGVfc3dpdGNoX2Jhc2UpOworCQl2X3JhbSA9IHZjb2RlX3N3aXRjaF9iYXNlID0gMDsKKwkJdmdhaW9fcmVncyA9IG1taW9fcmVncyA9IE5VTEw7CisJfQorCXJldHVybiAtRUlOVkFMOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL0tjb25maWcgYi9kcml2ZXJzL3cxL3NsYXZlcy9LY29uZmlnCmluZGV4IGQxOGQ2NDIuLjkwNGU1YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvc2xhdmVzL0tjb25maWcKKysrIGIvZHJpdmVycy93MS9zbGF2ZXMvS2NvbmZpZwpAQCAtOSw3ICs5LDcgQEAKIAl0cmlzdGF0ZSAiVGhlcm1hbCBmYW1pbHkgaW1wbGVtZW50YXRpb24iCiAJZGVwZW5kcyBvbiBXMQogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCAxLXdpcmUgdGhlcm1hbCBzZW5zb3JzIHRvIHlvdQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IDEtd2lyZSB0aGVybWFsIHNlbnNvcnMgdG8geW91cgogCSAgd2lyZS4KIAogY29uZmlnIFcxX1NMQVZFX1NNRU0KQEAgLTE3LDcgKzE3LDcgQEAKIAlkZXBlbmRzIG9uIFcxCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IDEtd2lyZQotCSAgc2ltcGxlIDY0Yml0IG1lbW9yeSByb20oZHMyNDAxL2RzMjQxMS9kczE5OTAqKSB0byB5b3Ugd2lyZS4KKwkgIHNpbXBsZSA2NGJpdCBtZW1vcnkgcm9tKGRzMjQwMS9kczI0MTEvZHMxOTkwKikgdG8geW91ciB3aXJlLgogCiBjb25maWcgVzFfU0xBVkVfRFMyNDMzCiAJdHJpc3RhdGUgIjRrYiBFRVBST00gZmFtaWx5IHN1cHBvcnQgKERTMjQzMykiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3pvcnJvL3Byb2MuYyBiL2RyaXZlcnMvem9ycm8vcHJvYy5jCmluZGV4IDdhYTJkM2QuLjYwYjA1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvem9ycm8vcHJvYy5jCisrKyBiL2RyaXZlcnMvem9ycm8vcHJvYy5jCkBAIC00Nyw3ICs0Nyw3IEBACiBzdGF0aWMgc3NpemVfdAogcHJvY19idXNfem9ycm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpbm9kZSAqaW5vID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm8gPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoaW5vKTsKIAlzdHJ1Y3Qgem9ycm9fZGV2ICp6ID0gZHAtPmRhdGE7CiAJc3RydWN0IENvbmZpZ0RldiBjZDsKZGlmZiAtLWdpdCBhL2ZzLzlwL2Vycm9yLmMgYi9mcy85cC9lcnJvci5jCmluZGV4IGFlOTE1NTUuLjBkN2ZhNGUgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2Vycm9yLmMKKysrIGIvZnMvOXAvZXJyb3IuYwpAQCAtODMsNiArODMsNyBAQAogCiAJaWYgKGVycm5vID09IDApIHsKIAkJLyogVE9ETzogaWYgZXJyb3IgaXNuJ3QgZm91bmQsIGFkZCBpdCBkeW5hbWljYWxseSAqLworCQllcnJzdHJbbGVuXSA9IDA7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycnN0ciA6JXM6IG5vdCBmb3VuZFxuIiwgX19GVU5DVElPTl9fLAogCQkgICAgICAgZXJyc3RyKTsKIAkJZXJybm8gPSAxOwpkaWZmIC0tZ2l0IGEvZnMvOXAvZmlkLmMgYi9mcy85cC9maWQuYwppbmRleCAyNzUwNzIwLi5hOWI2MzAxIDEwMDY0NAotLS0gYS9mcy85cC9maWQuYworKysgYi9mcy85cC9maWQuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInY5ZnMuaCIKQEAgLTg0LDYgKzg1LDcgQEAKIAluZXctPmlvdW5pdCA9IDA7CiAJbmV3LT5yZGlyX3BvcyA9IDA7CiAJbmV3LT5yZGlyX2ZjYWxsID0gTlVMTDsKKwlpbml0X01VVEVYKCZuZXctPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZuZXctPmxpc3QpOwogCiAJcmV0dXJuIG5ldzsKQEAgLTEwMiwxMSArMTA0LDExIEBACiB9CiAKIC8qKgotICogdjlmc19maWRfbG9va3VwIC0gcmV0cmlldmUgdGhlIHJpZ2h0IGZpZCBmcm9tIGEgIHBhcnRpY3VsYXIgZGVudHJ5CisgKiB2OWZzX2ZpZF9sb29rdXAgLSByZXR1cm4gYSBsb2NrZWQgZmlkIGZyb20gYSBkZW50cnkKICAqIEBkZW50cnk6IGRlbnRyeSB0byBsb29rIGZvciBmaWQgaW4KLSAqIEB0eXBlOiBpbnRlbnQgb2YgbG9va3VwIChvcGVyYXRpb24gb3IgdHJhdmVyc2FsKQogICoKLSAqIGZpbmQgYSBmaWQgaW4gdGhlIGRlbnRyeQorICogZmluZCBhIGZpZCBpbiB0aGUgZGVudHJ5LCBvYnRhaW4gaXRzIHNlbWFwaG9yZSBhbmQgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIGl0LgorICogY29kZSBjYWxsaW5nIGxvb2t1cCBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIGxvY2sKICAqCiAgKiBUT0RPOiBvbmx5IG1hdGNoIGZpZHMgdGhhdCBoYXZlIHRoZSBzYW1lIHVpZCBhcyBjdXJyZW50IHVzZXIKICAqCkBAIC0xMjQsNyArMTI2LDY4IEBACiAKIAlpZiAoIXJldHVybl9maWQpIHsKIAkJZHByaW50ayhERUJVR19FUlJPUiwgIkNvdWxkbid0IGZpbmQgYSBmaWQgaW4gZGVudHJ5XG4iKTsKKwkJcmV0dXJuX2ZpZCA9IEVSUl9QVFIoLUVCQURGKTsKIAl9CiAKKwlpZihkb3duX2ludGVycnVwdGlibGUoJnJldHVybl9maWQtPmxvY2spKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOworCiAJcmV0dXJuIHJldHVybl9maWQ7CiB9CisKKy8qKgorICogdjlmc19maWRfY2xvbmUgLSBsb29rdXAgdGhlIGZpZCBmb3IgYSBkZW50cnksIGNsb25lIGEgcHJpdmF0ZSBjb3B5IGFuZCByZWxlYXNlIGl0CisgKiBAZGVudHJ5OiBkZW50cnkgdG8gbG9vayBmb3IgZmlkIGluCisgKgorICogZmluZCBhIGZpZCBpbiB0aGUgZGVudHJ5IGFuZCB0aGVuIGNsb25lIHRvIGEgbmV3IHByaXZhdGUgZmlkCisgKgorICogVE9ETzogb25seSBtYXRjaCBmaWRzIHRoYXQgaGF2ZSB0aGUgc2FtZSB1aWQgYXMgY3VycmVudCB1c2VyCisgKgorICovCisKK3N0cnVjdCB2OWZzX2ZpZCAqdjlmc19maWRfY2xvbmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHY5ZnNfZmlkICpiYXNlX2ZpZCwgKm5ld19maWQgPSBFUlJfUFRSKC1FQkFERik7CisJc3RydWN0IHY5ZnNfZmNhbGwgKmZjYWxsID0gTlVMTDsKKwlpbnQgZmlkLCBlcnI7CisKKwliYXNlX2ZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnkpOworCisJaWYoSVNfRVJSKGJhc2VfZmlkKSkKKwkJcmV0dXJuIGJhc2VfZmlkOworCisJaWYoYmFzZV9maWQpIHsgIC8qIGNsb25lIGZpZCAqLworCQlmaWQgPSB2OWZzX2dldF9pZHBvb2woJnY5c2VzLT5maWRwb29sKTsKKwkJaWYgKGZpZCA8IDApIHsKKwkJCWVwcmludGsoS0VSTl9XQVJOSU5HLCAibmV3ZmlkIGZhaWxzIVxuIik7CisJCQluZXdfZmlkID0gRVJSX1BUUigtRU5PU1BDKTsKKwkJCWdvdG8gUmVsZWFzZV9GaWQ7CisJCX0KKworCQllcnIgPSB2OWZzX3Rfd2Fsayh2OXNlcywgYmFzZV9maWQtPmZpZCwgZmlkLCBOVUxMLCAmZmNhbGwpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZHByaW50ayhERUJVR19FUlJPUiwgImNsb25lIHdhbGsgZGlkbid0IHdvcmtcbiIpOworCQkJdjlmc19wdXRfaWRwb29sKGZpZCwgJnY5c2VzLT5maWRwb29sKTsKKwkJCW5ld19maWQgPSBFUlJfUFRSKGVycik7CisJCQlnb3RvIEZyZWVfRmNhbGw7CisJCX0KKwkJbmV3X2ZpZCA9IHY5ZnNfZmlkX2NyZWF0ZSh2OXNlcywgZmlkKTsKKwkJaWYgKG5ld19maWQgPT0gTlVMTCkgeworCQkJZHByaW50ayhERUJVR19FUlJPUiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQkJbmV3X2ZpZCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCX0KK0ZyZWVfRmNhbGw6CisJCWtmcmVlKGZjYWxsKTsKKwl9CisKK1JlbGVhc2VfRmlkOgorCXVwKCZiYXNlX2ZpZC0+bG9jayk7CisJcmV0dXJuIG5ld19maWQ7Cit9CisKK3ZvaWQgdjlmc19maWRfY2x1bmsoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IHY5ZnNfZmlkICpmaWQpCit7CisJdjlmc190X2NsdW5rKHY5c2VzLCBmaWQtPmZpZCk7CisJdjlmc19maWRfZGVzdHJveShmaWQpOworfQpkaWZmIC0tZ2l0IGEvZnMvOXAvZmlkLmggYi9mcy85cC9maWQuaAppbmRleCBhYTk3NGQ2Li40OGZjMTcwIDEwMDY0NAotLS0gYS9mcy85cC9maWQuaAorKysgYi9mcy85cC9maWQuaApAQCAtMzAsNiArMzAsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJIC8qIGxpc3Qgb2YgZmlkcyBhc3NvY2lhdGVkIHdpdGggYSBkZW50cnkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZTsgLyogWFhYIC0gZGVidWcgKi8KIAorCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwogCXUzMiBmaWQ7CiAJdW5zaWduZWQgY2hhciBmaWRvcGVuOwkgIC8qIHNldCB3aGVuIGZpZCBpcyBvcGVuZWQgKi8KIAl1bnNpZ25lZCBjaGFyIGZpZGNsdW5rZWQ7IC8qIHNldCB3aGVuIGZpZCBoYXMgYWxyZWFkeSBiZWVuIGNsdW5rZWQgKi8KQEAgLTU1LDMgKzU3LDYgQEAKIHZvaWQgdjlmc19maWRfZGVzdHJveShzdHJ1Y3Qgdjlmc19maWQgKmZpZCk7CiBzdHJ1Y3Qgdjlmc19maWQgKnY5ZnNfZmlkX2NyZWF0ZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKiwgaW50IGZpZCk7CiBpbnQgdjlmc19maWRfaW5zZXJ0KHN0cnVjdCB2OWZzX2ZpZCAqZmlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworc3RydWN0IHY5ZnNfZmlkICp2OWZzX2ZpZF9jbG9uZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwordm9pZCB2OWZzX2ZpZF9jbHVuayhzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBzdHJ1Y3Qgdjlmc19maWQgKmZpZCk7CisKZGlmZiAtLWdpdCBhL2ZzLzlwL211eC5jIGIvZnMvOXAvbXV4LmMKaW5kZXggOTQ0MjczYy4uMTQ3Y2VlZiAxMDA2NDQKLS0tIGEvZnMvOXAvbXV4LmMKKysrIGIvZnMvOXAvbXV4LmMKQEAgLTEzMiw4ICsxMzIsMTAgQEAKIAkJdjlmc19tdXhfcG9sbF90YXNrc1tpXS50YXNrID0gTlVMTDsKIAogCXY5ZnNfbXV4X3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgidjlmcyIpOwotCWlmICghdjlmc19tdXhfd3EpCisJaWYgKCF2OWZzX211eF93cSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2OWZzOiBtdXg6IGNyZWF0aW5nIHdvcmtxdWV1ZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuYyBiL2ZzLzlwL3Y5ZnMuYwppbmRleCAwYjk2ZmFlLi5kOWI1NjFiIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmMKKysrIGIvZnMvOXAvdjlmcy5jCkBAIC00NTcsMTQgKzQ1NywxOSBAQAogCiAJdjlmc19lcnJvcl9pbml0KCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJJbnN0YWxsaW5nIHY5ZnMgOVAyMDAwIGZpbGUgc3lzdGVtIHN1cHBvcnRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIkluc3RhbGxpbmcgdjlmcyA5cDIwMDAgZmlsZSBzeXN0ZW0gc3VwcG9ydFxuIik7CiAKIAlyZXQgPSB2OWZzX211eF9nbG9iYWxfaW5pdCgpOwotCWlmICghcmV0KQorCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidjlmczogc3RhcnRpbmcgbXV4IGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CisJfQogCXJldCA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnY5ZnNfZnNfdHlwZSk7Ci0JaWYgKCFyZXQpCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2OWZzOiByZWdpc3RlcmluZyBmaWxlIHN5c3RlbSBmYWlsZWRcbiIpOwogCQl2OWZzX211eF9nbG9iYWxfZXhpdCgpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19hZGRyLmMgYi9mcy85cC92ZnNfYWRkci5jCmluZGV4IDlkZmQyNTkuLmNjMjRhYmYgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19hZGRyLmMKKysrIGIvZnMvOXAvdmZzX2FkZHIuYwpAQCAtNTQsNyArNTQsNyBAQAogCWludCByZXR2YWwgPSAtRUlPOwogCWxvZmZfdCBvZmZzZXQgPSBwYWdlX29mZnNldChwYWdlKTsKIAlpbnQgY291bnQgPSBQQUdFX0NBQ0hFX1NJWkU7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGlub2RlKTsKIAlpbnQgcnNpemUgPSB2OXNlcy0+bWF4ZGF0YSAtIFY5RlNfSU9IRFJTWjsKIAlzdHJ1Y3Qgdjlmc19maWQgKnY5ZiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kaXIuYyBiL2ZzLzlwL3Zmc19kaXIuYwppbmRleCA5MDVjODgyLi4zMTI5Njg4IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGlyLmMKKysrIGIvZnMvOXAvdmZzX2Rpci5jCkBAIC03MSw3ICs3MSw3IEBACiBzdGF0aWMgaW50IHY5ZnNfZGlyX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7CiAJc3RydWN0IHY5ZnNfZmNhbGwgKmZjYWxsID0gTlVMTDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoaW5vZGUpOwogCXN0cnVjdCB2OWZzX2ZpZCAqZmlsZSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgaSwgbiwgczsKQEAgLTgwLDcgKzgwLDcgQEAKIAlzdHJ1Y3Qgdjlmc19zdGF0IHN0YXQ7CiAJaW50IG92ZXIgPSAwOwogCi0JZHByaW50ayhERUJVR19WRlMsICJuYW1lICVzXG4iLCBmaWxwLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCWRwcmludGsoREVCVUdfVkZTLCAibmFtZSAlc1xuIiwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCiAJZmlkID0gZmlsZS0+ZmlkOwogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZmlsZS5jIGIvZnMvOXAvdmZzX2ZpbGUuYwppbmRleCA3OWU2ZjljLi45ZjE3YjBjIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTU1LDUzICs1NSwyMiBAQAogCXN0cnVjdCB2OWZzX2ZpZCAqdmZpZDsKIAlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmNhbGwgPSBOVUxMOwogCWludCBvbW9kZTsKLQlpbnQgZmlkID0gVjlGU19OT0ZJRDsKIAlpbnQgZXJyOwogCiAJZHByaW50ayhERUJVR19WRlMsICJpbm9kZTogJXAgZmlsZTogJXAgXG4iLCBpbm9kZSwgZmlsZSk7CiAKLQl2ZmlkID0gdjlmc19maWRfbG9va3VwKGZpbGUtPmZfZGVudHJ5KTsKLQlpZiAoIXZmaWQpIHsKLQkJZHByaW50ayhERUJVR19FUlJPUiwgIkNvdWxkbid0IHJlc29sdmUgZmlkIGZyb20gZGVudHJ5XG4iKTsKLQkJcmV0dXJuIC1FQkFERjsKLQl9CisJdmZpZCA9IHY5ZnNfZmlkX2Nsb25lKGZpbGUtPmZfcGF0aC5kZW50cnkpOworCWlmIChJU19FUlIodmZpZCkpCisJCXJldHVybiBQVFJfRVJSKHZmaWQpOwogCi0JZmlkID0gdjlmc19nZXRfaWRwb29sKCZ2OXNlcy0+ZmlkcG9vbCk7Ci0JaWYgKGZpZCA8IDApIHsKLQkJZXByaW50ayhLRVJOX1dBUk5JTkcsICJuZXdmaWQgZmFpbHMhXG4iKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0JZXJyID0gdjlmc190X3dhbGsodjlzZXMsIHZmaWQtPmZpZCwgZmlkLCBOVUxMLCAmZmNhbGwpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRwcmludGsoREVCVUdfRVJST1IsICJyZXdhbGsgZGlkbid0IHdvcmtcbiIpOwotCQlpZiAoZmNhbGwgJiYgZmNhbGwtPmlkID09IFJXQUxLKQotCQkJZ290byBjbHVua19maWQ7Ci0JCWVsc2UgewotCQkJdjlmc19wdXRfaWRwb29sKGZpZCwgJnY5c2VzLT5maWRwb29sKTsKLQkJCWdvdG8gZnJlZV9mY2FsbDsKLQkJfQotCX0KLQlrZnJlZShmY2FsbCk7Ci0KLQkvKiBUT0RPOiBkbyBzcGVjaWFsIHRoaW5ncyBmb3IgT19FWENMLCBPX05PRk9MTE9XLCBPX1NZTkMgKi8KLQkvKiB0cmFuc2xhdGUgb3BlbiBtb2RlIGFwcHJvcHJpYXRlbHkgKi8KIAlvbW9kZSA9IHY5ZnNfdWZsYWdzMm9tb2RlKGZpbGUtPmZfZmxhZ3MpOwotCWVyciA9IHY5ZnNfdF9vcGVuKHY5c2VzLCBmaWQsIG9tb2RlLCAmZmNhbGwpOworCWVyciA9IHY5ZnNfdF9vcGVuKHY5c2VzLCB2ZmlkLT5maWQsIG9tb2RlLCAmZmNhbGwpOwogCWlmIChlcnIgPCAwKSB7CiAJCVBSSU5UX0ZDQUxMX0VSUk9SKCJvcGVuIGZhaWxlZCIsIGZjYWxsKTsKLQkJZ290byBjbHVua19maWQ7Ci0JfQotCi0JdmZpZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2OWZzX2ZpZCksIEdGUF9LRVJORUwpOwotCWlmICh2ZmlkID09IE5VTEwpIHsKLQkJZHByaW50ayhERUJVR19FUlJPUiwgIm91dCBvZiBtZW1vcnlcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGNsdW5rX2ZpZDsKKwkJZ290byBDbHVua19GaWQ7CiAJfQogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdmZpZDsKLQl2ZmlkLT5maWQgPSBmaWQ7CiAJdmZpZC0+Zmlkb3BlbiA9IDE7CiAJdmZpZC0+ZmlkY2x1bmtlZCA9IDA7CiAJdmZpZC0+aW91bml0ID0gZmNhbGwtPnBhcmFtcy5yb3Blbi5pb3VuaXQ7CkBAIC0xMTIsMTAgKzgxLDggQEAKIAogCXJldHVybiAwOwogCi1jbHVua19maWQ6Ci0Jdjlmc190X2NsdW5rKHY5c2VzLCBmaWQpOwotCi1mcmVlX2ZjYWxsOgorQ2x1bmtfRmlkOgorCXY5ZnNfZmlkX2NsdW5rKHY5c2VzLCB2ZmlkKTsKIAlrZnJlZShmY2FsbCk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTMzLDcgKzEwMCw3IEBACiBzdGF0aWMgaW50IHY5ZnNfZmlsZV9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKIHsKIAlpbnQgcmVzID0gMDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAlkcHJpbnRrKERFQlVHX1ZGUywgImZpbHA6ICVwIGxvY2s6ICVwXG4iLCBmaWxwLCBmbCk7CiAKQEAgLTE2MSw3ICsxMjgsNyBAQAogdjlmc19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICogZGF0YSwgc2l6ZV90IGNvdW50LAogCSAgICAgICBsb2ZmX3QgKiBvZmZzZXQpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGlub2RlKTsKIAlzdHJ1Y3Qgdjlmc19maWQgKnY5ZiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmNhbGwgPSBOVUxMOwpAQCAtMjI1LDcgKzE5Miw3IEBACiB2OWZzX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICogZGF0YSwKIAkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGlub2RlKTsKIAlzdHJ1Y3Qgdjlmc19maWQgKnY5ZmlkID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB2OWZzX2ZjYWxsICpmY2FsbDsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggMThmMjZjZC4uOTEwOWJhMSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTQxNiwxMiArNDE2LDggQEAKIAlzYiA9IGZpbGVfaW5vZGUtPmlfc2I7CiAJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGZpbGVfaW5vZGUpOwogCXY5ZmlkID0gdjlmc19maWRfbG9va3VwKGZpbGUpOwotCi0JaWYgKCF2OWZpZCkgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLAotCQkJIm5vIHY5ZnNfZmlkXG4iKTsKLQkJcmV0dXJuIC1FQkFERjsKLQl9CisJaWYoSVNfRVJSKHY5ZmlkKSkKKwkJcmV0dXJuIFBUUl9FUlIodjlmaWQpOwogCiAJZmlkID0gdjlmaWQtPmZpZDsKIAlpZiAoZmlkIDwgMCkgewpAQCAtNDMzLDExICs0MjksMTMgQEAKIAlyZXN1bHQgPSB2OWZzX3RfcmVtb3ZlKHY5c2VzLCBmaWQsICZmY2FsbCk7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJUFJJTlRfRkNBTExfRVJST1IoInJlbW92ZSBmYWlscyIsIGZjYWxsKTsKKwkJZ290byBFcnJvcjsKIAl9CiAKIAl2OWZzX3B1dF9pZHBvb2woZmlkLCAmdjlzZXMtPmZpZHBvb2wpOwogCXY5ZnNfZmlkX2Rlc3Ryb3kodjlmaWQpOwogCitFcnJvcjoKIAlrZnJlZShmY2FsbCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ3Myw5ICs0NzEsMTMgQEAKIAlpbm9kZSA9IE5VTEw7CiAJdmZpZCA9IE5VTEw7CiAJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7Ci0JZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnktPmRfcGFyZW50KTsKLQlwZXJtID0gdW5peG1vZGUycDltb2RlKHY5c2VzLCBtb2RlKTsKKwlkZmlkID0gdjlmc19maWRfY2xvbmUoZGVudHJ5LT5kX3BhcmVudCk7CisJaWYoSVNfRVJSKGRmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoZGZpZCk7CisJCWdvdG8gZXJyb3I7CisJfQogCisJcGVybSA9IHVuaXhtb2RlMnA5bW9kZSh2OXNlcywgbW9kZSk7CiAJaWYgKG5kICYmIG5kLT5mbGFncyAmIExPT0tVUF9PUEVOKQogCQlmbGFncyA9IG5kLT5pbnRlbnQub3Blbi5mbGFncyAtIDE7CiAJZWxzZQpAQCAtNDg1LDkgKzQ4NywxMCBAQAogCQlwZXJtLCB2OWZzX3VmbGFnczJvbW9kZShmbGFncyksIE5VTEwsICZmaWQsICZxaWQsICZpb3VuaXQpOwogCiAJaWYgKGVycikKLQkJZ290byBlcnJvcjsKKwkJZ290byBjbHVua19kZmlkOwogCiAJdmZpZCA9IHY5ZnNfY2xvbmVfd2Fsayh2OXNlcywgZGZpZC0+ZmlkLCBkZW50cnkpOworCXY5ZnNfZmlkX2NsdW5rKHY5c2VzLCBkZmlkKTsKIAlpZiAoSVNfRVJSKHZmaWQpKSB7CiAJCWVyciA9IFBUUl9FUlIodmZpZCk7CiAJCXZmaWQgPSBOVUxMOwpAQCAtNTI1LDYgKzUyOCw5IEBACiAKIAlyZXR1cm4gMDsKIAorY2x1bmtfZGZpZDoKKwl2OWZzX2ZpZF9jbHVuayh2OXNlcywgZGZpZCk7CisKIGVycm9yOgogCWlmICh2ZmlkKQogCQl2OWZzX2ZpZF9kZXN0cm95KHZmaWQpOwpAQCAtNTUxLDcgKzU1NywxMiBAQAogCWlub2RlID0gTlVMTDsKIAl2ZmlkID0gTlVMTDsKIAl2OXNlcyA9IHY5ZnNfaW5vZGUydjlzZXMoZGlyKTsKLQlkZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQpOworCWRmaWQgPSB2OWZzX2ZpZF9jbG9uZShkZW50cnktPmRfcGFyZW50KTsKKwlpZihJU19FUlIoZGZpZCkpIHsKKwkJZXJyID0gUFRSX0VSUihkZmlkKTsKKwkJZ290byBlcnJvcjsKKwl9CisKIAlwZXJtID0gdW5peG1vZGUycDltb2RlKHY5c2VzLCBtb2RlIHwgU19JRkRJUik7CiAKIAllcnIgPSB2OWZzX2NyZWF0ZSh2OXNlcywgZGZpZC0+ZmlkLCAoY2hhciAqKSBkZW50cnktPmRfbmFtZS5uYW1lLApAQCAtNTU5LDM3ICs1NzAsMzYgQEAKIAogCWlmIChlcnIpIHsKIAkJZHByaW50ayhERUJVR19FUlJPUiwgImNyZWF0ZSBlcnJvciAlZFxuIiwgZXJyKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQllcnIgPSB2OWZzX3RfY2x1bmsodjlzZXMsIGZpZCk7Ci0JaWYgKGVycikgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY2x1bmsgZXJyb3IgJWRcbiIsIGVycik7Ci0JCWdvdG8gZXJyb3I7CisJCWdvdG8gY2xlYW5fdXBfZGZpZDsKIAl9CiAKIAl2ZmlkID0gdjlmc19jbG9uZV93YWxrKHY5c2VzLCBkZmlkLT5maWQsIGRlbnRyeSk7CiAJaWYgKElTX0VSUih2ZmlkKSkgewogCQllcnIgPSBQVFJfRVJSKHZmaWQpOwogCQl2ZmlkID0gTlVMTDsKLQkJZ290byBlcnJvcjsKKwkJZ290byBjbGVhbl91cF9kZmlkOwogCX0KIAorCXY5ZnNfZmlkX2NsdW5rKHY5c2VzLCBkZmlkKTsKIAlpbm9kZSA9IHY5ZnNfaW5vZGVfZnJvbV9maWQodjlzZXMsIHZmaWQtPmZpZCwgZGlyLT5pX3NiKTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJaW5vZGUgPSBOVUxMOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGNsZWFuX3VwX2ZpZHM7CiAJfQogCiAJZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlyZXR1cm4gMDsKIAotZXJyb3I6CitjbGVhbl91cF9maWRzOgogCWlmICh2ZmlkKQogCQl2OWZzX2ZpZF9kZXN0cm95KHZmaWQpOwogCitjbGVhbl91cF9kZmlkOgorCXY5ZnNfZmlkX2NsdW5rKHY5c2VzLCBkZmlkKTsKKworZXJyb3I6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjIyLDI4ICs2MzIsMjMgQEAKIAlkZW50cnktPmRfb3AgPSAmdjlmc19kZW50cnlfb3BlcmF0aW9uczsKIAlkaXJmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCk7CiAKLQlpZiAoIWRpcmZpZCkgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAibm8gZGlyZmlkXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQorCWlmKElTX0VSUihkaXJmaWQpKQorCQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKGRpcmZpZCkpOwogCiAJZGlyZmlkbnVtID0gZGlyZmlkLT5maWQ7CiAKLQlpZiAoZGlyZmlkbnVtIDwgMCkgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAibm8gZGlyZmlkIGZvciBpbm9kZSAlcCwgIyVsdVxuIiwKLQkJCWRpciwgZGlyLT5pX2lubyk7Ci0JCXJldHVybiBFUlJfUFRSKC1FQkFERik7Ci0JfQotCiAJbmV3ZmlkID0gdjlmc19nZXRfaWRwb29sKCZ2OXNlcy0+ZmlkcG9vbCk7CiAJaWYgKG5ld2ZpZCA8IDApIHsKIAkJZXByaW50ayhLRVJOX1dBUk5JTkcsICJuZXdmaWQgZmFpbHMhXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CisJCXJlc3VsdCA9IC1FTk9TUEM7CisJCWdvdG8gUmVsZWFzZV9EaXJmaWQ7CiAJfQogCiAJcmVzdWx0ID0gdjlmc190X3dhbGsodjlzZXMsIGRpcmZpZG51bSwgbmV3ZmlkLAogCQkoY2hhciAqKWRlbnRyeS0+ZF9uYW1lLm5hbWUsICZmY2FsbCk7CiAKKwl1cCgmZGlyZmlkLT5sb2NrKTsKKwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCWlmIChmY2FsbCAmJiBmY2FsbC0+aWQgPT0gUldBTEspCiAJCQl2OWZzX3RfY2x1bmsodjlzZXMsIG5ld2ZpZCk7CkBAIC03MDEsOCArNzA2LDEyIEBACiAKIAlyZXR1cm4gTlVMTDsKIAotICAgICAgRnJlZUZjYWxsOgorUmVsZWFzZV9EaXJmaWQ6CisJdXAoJmRpcmZpZC0+bG9jayk7CisKK0ZyZWVGY2FsbDoKIAlrZnJlZShmY2FsbCk7CisKIAlyZXR1cm4gRVJSX1BUUihyZXN1bHQpOwogfQogCkBAIC03NDYsMTAgKzc1NSw4IEBACiAJc3RydWN0IGlub2RlICpvbGRfaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKG9sZF9pbm9kZSk7CiAJc3RydWN0IHY5ZnNfZmlkICpvbGRmaWQgPSB2OWZzX2ZpZF9sb29rdXAob2xkX2RlbnRyeSk7Ci0Jc3RydWN0IHY5ZnNfZmlkICpvbGRkaXJmaWQgPQotCSAgICB2OWZzX2ZpZF9sb29rdXAob2xkX2RlbnRyeS0+ZF9wYXJlbnQpOwotCXN0cnVjdCB2OWZzX2ZpZCAqbmV3ZGlyZmlkID0KLQkgICAgdjlmc19maWRfbG9va3VwKG5ld19kZW50cnktPmRfcGFyZW50KTsKKwlzdHJ1Y3Qgdjlmc19maWQgKm9sZGRpcmZpZDsKKwlzdHJ1Y3Qgdjlmc19maWQgKm5ld2RpcmZpZDsKIAlzdHJ1Y3Qgdjlmc193c3RhdCB3c3RhdDsKIAlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmNhbGwgPSBOVUxMOwogCWludCBmaWQgPSAtMTsKQEAgLTc1OSwxNiArNzY2LDI2IEBACiAKIAlkcHJpbnRrKERFQlVHX1ZGUywgIlxuIik7CiAKLQlpZiAoKCFvbGRmaWQpIHx8ICghb2xkZGlyZmlkKSB8fCAoIW5ld2RpcmZpZCkpIHsKLQkJZHByaW50ayhERUJVR19FUlJPUiwgInByb2JsZW0gd2l0aCBhcmd1bWVudHNcbiIpOwotCQlyZXR1cm4gLUVCQURGOworCWlmKElTX0VSUihvbGRmaWQpKQorCQlyZXR1cm4gUFRSX0VSUihvbGRmaWQpOworCisJb2xkZGlyZmlkID0gdjlmc19maWRfY2xvbmUob2xkX2RlbnRyeS0+ZF9wYXJlbnQpOworCWlmKElTX0VSUihvbGRkaXJmaWQpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIob2xkZGlyZmlkKTsKKwkJZ290byBSZWxlYXNlX2xvY2s7CisJfQorCisJbmV3ZGlyZmlkID0gdjlmc19maWRfY2xvbmUobmV3X2RlbnRyeS0+ZF9wYXJlbnQpOworCWlmKElTX0VSUihuZXdkaXJmaWQpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIobmV3ZGlyZmlkKTsKKwkJZ290byBDbHVua19vbGRkaXI7CiAJfQogCiAJLyogOVAgY2FuIG9ubHkgaGFuZGxlIGZpbGUgcmVuYW1lIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAqLwogCWlmIChtZW1jbXAoJm9sZGRpcmZpZC0+cWlkLCAmbmV3ZGlyZmlkLT5xaWQsIHNpemVvZihuZXdkaXJmaWQtPnFpZCkpKSB7CiAJCWRwcmludGsoREVCVUdfRVJST1IsICJvbGQgZGlyIGFuZCBuZXcgZGlyIGFyZSBkaWZmZXJlbnRcbiIpOwotCQlyZXR2YWwgPSAtRVBFUk07Ci0JCWdvdG8gRnJlZUZjYWxsbkJhaWw7CisJCXJldHZhbCA9IC1FWERFVjsKKwkJZ290byBDbHVua19uZXdkaXI7CiAJfQogCiAJZmlkID0gb2xkZmlkLT5maWQ7CkBAIC03NzksNyArNzk2LDcgQEAKIAkJZHByaW50ayhERUJVR19FUlJPUiwgIm5vIGZpZCBmb3Igb2xkIGZpbGUgIyVsdVxuIiwKIAkJCW9sZF9pbm9kZS0+aV9pbm8pOwogCQlyZXR2YWwgPSAtRUJBREY7Ci0JCWdvdG8gRnJlZUZjYWxsbkJhaWw7CisJCWdvdG8gQ2x1bmtfbmV3ZGlyOwogCX0KIAogCXY5ZnNfYmxhbmtfd3N0YXQoJndzdGF0KTsKQEAgLTc4OCwxMSArODA1LDIwIEBACiAKIAlyZXR2YWwgPSB2OWZzX3Rfd3N0YXQodjlzZXMsIGZpZCwgJndzdGF0LCAmZmNhbGwpOwogCi0gICAgICBGcmVlRmNhbGxuQmFpbDoKIAlpZiAocmV0dmFsIDwgMCkKIAkJUFJJTlRfRkNBTExfRVJST1IoIndzdGF0IGVycm9yIiwgZmNhbGwpOwogCiAJa2ZyZWUoZmNhbGwpOworCitDbHVua19uZXdkaXI6CisJdjlmc19maWRfY2x1bmsodjlzZXMsIG5ld2RpcmZpZCk7CisKK0NsdW5rX29sZGRpcjoKKwl2OWZzX2ZpZF9jbHVuayh2OXNlcywgb2xkZGlyZmlkKTsKKworUmVsZWFzZV9sb2NrOgorCXVwKCZvbGRmaWQtPmxvY2spOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtODEwLDE1ICs4MzYsMTIgQEAKIHsKIAlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmNhbGwgPSBOVUxMOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRlbnRyeS0+ZF9pbm9kZSk7Ci0Jc3RydWN0IHY5ZnNfZmlkICpmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKKwlzdHJ1Y3Qgdjlmc19maWQgKmZpZCA9IHY5ZnNfZmlkX2Nsb25lKGRlbnRyeSk7CiAJaW50IGVyciA9IC1FUEVSTTsKIAogCWRwcmludGsoREVCVUdfVkZTLCAiZGVudHJ5OiAlcFxuIiwgZGVudHJ5KTsKLQlpZiAoIWZpZCkgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLAotCQkJImNvdWxkbid0IGZpbmQgZmlkIGFzc29jaWF0ZWQgd2l0aCBkZW50cnlcbiIpOwotCQlyZXR1cm4gLUVCQURGOwotCX0KKwlpZihJU19FUlIoZmlkKSkKKwkJcmV0dXJuIFBUUl9FUlIoZmlkKTsKIAogCWVyciA9IHY5ZnNfdF9zdGF0KHY5c2VzLCBmaWQtPmZpZCwgJmZjYWxsKTsKIApAQCAtODMxLDYgKzg1NCw3IEBACiAJfQogCiAJa2ZyZWUoZmNhbGwpOworCXY5ZnNfZmlkX2NsdW5rKHY5c2VzLCBmaWQpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg0NCwxOCArODY4LDE0IEBACiBzdGF0aWMgaW50IHY5ZnNfdmZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQogewogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRlbnRyeS0+ZF9pbm9kZSk7Ci0Jc3RydWN0IHY5ZnNfZmlkICpmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5KTsKKwlzdHJ1Y3Qgdjlmc19maWQgKmZpZCA9IHY5ZnNfZmlkX2Nsb25lKGRlbnRyeSk7CiAJc3RydWN0IHY5ZnNfZmNhbGwgKmZjYWxsID0gTlVMTDsKIAlzdHJ1Y3Qgdjlmc193c3RhdCB3c3RhdDsKIAlpbnQgcmVzID0gLUVQRVJNOwogCiAJZHByaW50ayhERUJVR19WRlMsICJcbiIpOwotCi0JaWYgKCFmaWQpIHsKLQkJZHByaW50ayhERUJVR19FUlJPUiwKLQkJCSJDb3VsZG4ndCBmaW5kIGZpZCBhc3NvY2lhdGVkIHdpdGggZGVudHJ5XG4iKTsKLQkJcmV0dXJuIC1FQkFERjsKLQl9CisJaWYoSVNfRVJSKGZpZCkpCisJCXJldHVybiBQVFJfRVJSKGZpZCk7CiAKIAl2OWZzX2JsYW5rX3dzdGF0KCZ3c3RhdCk7CiAJaWYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkKQEAgLTg4Nyw2ICs5MDcsNyBAQAogCWlmIChyZXMgPj0gMCkKIAkJcmVzID0gaW5vZGVfc2V0YXR0cihkZW50cnktPmRfaW5vZGUsIGlhdHRyKTsKIAorCXY5ZnNfZmlkX2NsdW5rKHY5c2VzLCBmaWQpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTk4NywxOCArMTAwOCwxNSBAQAogCiAJc3RydWN0IHY5ZnNfZmNhbGwgKmZjYWxsID0gTlVMTDsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkZW50cnktPmRfaW5vZGUpOwotCXN0cnVjdCB2OWZzX2ZpZCAqZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeSk7CisJc3RydWN0IHY5ZnNfZmlkICpmaWQgPSB2OWZzX2ZpZF9jbG9uZShkZW50cnkpOwogCi0JaWYgKCFmaWQpIHsKLQkJZHByaW50ayhERUJVR19FUlJPUiwgImNvdWxkIG5vdCByZXNvbHZlIGZpZCBmcm9tIGRlbnRyeVxuIik7Ci0JCXJldHZhbCA9IC1FQkFERjsKLQkJZ290byBGcmVlRmNhbGw7Ci0JfQorCWlmKElTX0VSUihmaWQpKQorCQlyZXR1cm4gUFRSX0VSUihmaWQpOwogCiAJaWYgKCF2OXNlcy0+ZXh0ZW5kZWQpIHsKIAkJcmV0dmFsID0gLUVCQURGOwogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAibm90IGV4dGVuZGVkXG4iKTsKLQkJZ290byBGcmVlRmNhbGw7CisJCWdvdG8gQ2x1bmtGaWQ7CiAJfQogCiAJZHByaW50ayhERUJVR19WRlMsICIgJXNcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwpAQCAtMTAwOSw4ICsxMDI3LDEwIEBACiAJCWdvdG8gRnJlZUZjYWxsOwogCX0KIAotCWlmICghZmNhbGwpCi0JCXJldHVybiAtRUlPOworCWlmICghZmNhbGwpIHsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBDbHVua0ZpZDsKKwl9CiAKIAlpZiAoIShmY2FsbC0+cGFyYW1zLnJzdGF0LnN0YXQubW9kZSAmIFY5RlNfRE1TWU1MSU5LKSkgewogCQlyZXR2YWwgPSAtRUlOVkFMOwpAQCAtMTAyOCw5ICsxMDQ4LDEyIEBACiAJCWZjYWxsLT5wYXJhbXMucnN0YXQuc3RhdC5leHRlbnNpb24uc3RyLCBidWZmZXIpOwogCXJldHZhbCA9IGJ1ZmxlbjsKIAotICAgICAgRnJlZUZjYWxsOgorRnJlZUZjYWxsOgogCWtmcmVlKGZjYWxsKTsKIAorQ2x1bmtGaWQ6CisJdjlmc19maWRfY2x1bmsodjlzZXMsIGZpZCk7CisKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMTIzLDUyICsxMTQ2LDU4IEBACiAJaW50IGVycjsKIAl1MzIgZmlkLCBwZXJtOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7Ci0Jc3RydWN0IHY5ZnNfZmlkICpkZmlkLCAqdmZpZDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCB2OWZzX2ZpZCAqZGZpZCwgKnZmaWQgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCi0JaW5vZGUgPSBOVUxMOwotCXZmaWQgPSBOVUxMOwogCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpOwotCWRmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCk7Ci0JcGVybSA9IHVuaXhtb2RlMnA5bW9kZSh2OXNlcywgbW9kZSk7Ci0KIAlpZiAoIXY5c2VzLT5leHRlbmRlZCkgewogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAibm90IGV4dGVuZGVkXG4iKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKKwlkZmlkID0gdjlmc19maWRfY2xvbmUoZGVudHJ5LT5kX3BhcmVudCk7CisJaWYoSVNfRVJSKGRmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoZGZpZCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcGVybSA9IHVuaXhtb2RlMnA5bW9kZSh2OXNlcywgbW9kZSk7CisKIAllcnIgPSB2OWZzX2NyZWF0ZSh2OXNlcywgZGZpZC0+ZmlkLCAoY2hhciAqKSBkZW50cnktPmRfbmFtZS5uYW1lLAogCQlwZXJtLCBWOUZTX09SRUFELCAoY2hhciAqKSBleHRlbnNpb24sICZmaWQsIE5VTEwsIE5VTEwpOwogCiAJaWYgKGVycikKLQkJZ290byBlcnJvcjsKKwkJZ290byBjbHVua19kZmlkOwogCiAJZXJyID0gdjlmc190X2NsdW5rKHY5c2VzLCBmaWQpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyb3I7CisJCWdvdG8gY2x1bmtfZGZpZDsKIAogCXZmaWQgPSB2OWZzX2Nsb25lX3dhbGsodjlzZXMsIGRmaWQtPmZpZCwgZGVudHJ5KTsKIAlpZiAoSVNfRVJSKHZmaWQpKSB7CiAJCWVyciA9IFBUUl9FUlIodmZpZCk7CiAJCXZmaWQgPSBOVUxMOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGNsdW5rX2RmaWQ7CiAJfQogCiAJaW5vZGUgPSB2OWZzX2lub2RlX2Zyb21fZmlkKHY5c2VzLCB2ZmlkLT5maWQsIGRpci0+aV9zYik7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJZXJyID0gUFRSX0VSUihpbm9kZSk7CiAJCWlub2RlID0gTlVMTDsKLQkJZ290byBlcnJvcjsKKwkJZ290byBmcmVlX3ZmaWQ7CiAJfQogCiAJZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlyZXR1cm4gMDsKIAotZXJyb3I6Ci0JaWYgKHZmaWQpCi0JCXY5ZnNfZmlkX2Rlc3Ryb3kodmZpZCk7CitmcmVlX3ZmaWQ6CisJdjlmc19maWRfZGVzdHJveSh2ZmlkKTsKIAorY2x1bmtfZGZpZDoKKwl2OWZzX2ZpZF9jbHVuayh2OXNlcywgZGZpZCk7CisKK2Vycm9yOgogCXJldHVybiBlcnI7CiAKIH0KQEAgLTEyMDksMjYgKzEyMzgsMjkgQEAKIAkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJaW50IHJldHZhbDsKKwlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpOwogCXN0cnVjdCB2OWZzX2ZpZCAqb2xkZmlkOwogCWNoYXIgKm5hbWU7CiAKIAlkcHJpbnRrKERFQlVHX1ZGUywgIiAlbHUsJXMsJXNcbiIsIGRpci0+aV9pbm8sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCW9sZF9kZW50cnktPmRfbmFtZS5uYW1lKTsKIAotCW9sZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChvbGRfZGVudHJ5KTsKLQlpZiAoIW9sZGZpZCkgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY2FuJ3QgZmluZCBvbGRmaWRcbiIpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KKwlvbGRmaWQgPSB2OWZzX2ZpZF9jbG9uZShvbGRfZGVudHJ5KTsKKwlpZihJU19FUlIob2xkZmlkKSkKKwkJcmV0dXJuIFBUUl9FUlIob2xkZmlkKTsKIAogCW5hbWUgPSBfX2dldG5hbWUoKTsKLQlpZiAodW5saWtlbHkoIW5hbWUpKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAodW5saWtlbHkoIW5hbWUpKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gY2x1bmtfZmlkOworCX0KIAogCXNwcmludGYobmFtZSwgIiVkXG4iLCBvbGRmaWQtPmZpZCk7CiAJcmV0dmFsID0gdjlmc192ZnNfbWtzcGVjaWFsKGRpciwgZGVudHJ5LCBWOUZTX0RNTElOSywgbmFtZSk7CiAJX19wdXRuYW1lKG5hbWUpOwogCitjbHVua19maWQ6CisJdjlmc19maWRfY2x1bmsodjlzZXMsIG9sZGZpZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggYjNiNWFhMC4uOGNkMjQxNyAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC0xMiw5ICsxMiw3IEBACiAJICBFeHQyIGlzIGEgc3RhbmRhcmQgTGludXggZmlsZSBzeXN0ZW0gZm9yIGhhcmQgZGlza3MuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQyLiAgQmUgYXdhcmUgaG93ZXZlciB0aGF0IHRoZSBmaWxlIHN5c3RlbQotCSAgb2YgeW91ciByb290IHBhcnRpdGlvbiAodGhlIG9uZSBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkgLykgY2Fubm90Ci0JICBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgYW5kIHNvIHRoaXMgY291bGQgYmUgZGFuZ2Vyb3VzLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDIuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKQEAgLTk4LDkgKzk2LDcgQEAKIAkgIChhdmFpbGFibGUgYXQgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTJmc3Byb2dzLz4pLgogCiAJICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0My4gIEJlIGF3YXJlIGhvd2V2ZXIgdGhhdCB0aGUgZmlsZSBzeXN0ZW0KLQkgIG9mIHlvdXIgcm9vdCBwYXJ0aXRpb24gKHRoZSBvbmUgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGNhbm5vdAotCSAgYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGFuZCBzbyB0aGlzIG1heSBiZSBkYW5nZXJvdXMuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0My4KIAogY29uZmlnIEVYVDNfRlNfWEFUVFIKIAlib29sICJFeHQzIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCkBAIC0xNjMsOSArMTU5LDcgQEAKIAkgIGZlYXR1cmVzIHdpbGwgYmUgYWRkZWQgdG8gZXh0NGRldiBncmFkdWFsbHkuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0ZGV2LiAgQmUgYXdhcmUsIGhvd2V2ZXIsIHRoYXQgdGhlIGZpbGVzeXN0ZW0KLQkgIG9mIHlvdXIgcm9vdCBwYXJ0aXRpb24gKHRoZSBvbmUgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGNhbm5vdAotCSAgYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGFuZCBzbyB0aGlzIGNvdWxkIGJlIGRhbmdlcm91cy4KKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0ZGV2LgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC0xMDA4LDcgKzEwMDIsNyBAQAogCiBjb25maWcgSFVHRVRMQkZTCiAJYm9vbCAiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgWDg2IHx8IElBNjQgfHwgUFBDNjQgfHwgU1BBUkM2NCB8fCBTVVBFUkggfHwgQlJPS0VOCisJZGVwZW5kcyBvbiBYODYgfHwgSUE2NCB8fCBQUEM2NCB8fCBTUEFSQzY0IHx8IFNVUEVSSCB8fCBCUk9LRU4KIAloZWxwCiAJICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uCiAJICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkCkBAIC0xMjA0LDEzICsxMTk4LDE2IEBACiAKIGNvbmZpZyBKRkZTX0ZTCiAJdHJpc3RhdGUgIkpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtIChKRkZTKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTVREICYmIEJMT0NLCisJZGVwZW5kcyBvbiBNVEQgJiYgQkxPQ0sgJiYgQlJPS0VOCiAJaGVscAogCSAgSkZGUyBpcyB0aGUgSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0gZGV2ZWxvcGVkIGJ5IEF4aXMKIAkgIENvbW11bmljYXRpb25zIGluIFN3ZWRlbiwgYWltZWQgYXQgcHJvdmlkaW5nIGEgY3Jhc2gvcG93ZXJkb3duLXNhZmUKIAkgIGZpbGUgc3lzdGVtIGZvciBkaXNrLWxlc3MgZW1iZWRkZWQgZGV2aWNlcy4gRnVydGhlciBpbmZvcm1hdGlvbiBpcwogCSAgYXZhaWxhYmxlIGF0ICg8aHR0cDovL2RldmVsb3Blci5heGlzLmNvbS9zb2Z0d2FyZS9qZmZzLz4pLgogCisJICBOT1RFOiBUaGlzIGZpbGVzeXN0ZW0gaXMgZGVwcmVjYXRlZCBhbmQgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsIGluCisJICAyLjYuMjEuICBTZWUgRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisKIGNvbmZpZyBKRkZTX0ZTX1ZFUkJPU0UKIAlpbnQgIkpGRlMgZGVidWdnaW5nIHZlcmJvc2l0eSAoMCA9IHF1aWV0LCAzID0gbm9pc3kpIgogCWRlcGVuZHMgb24gSkZGU19GUwpkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZQppbmRleCA5YTVjZTkzLi5iOWZmYTYzZiAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDggQEAKIAkJaW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZmlmby5vIGxvY2tzLm8gZGNhY2hlLm8gaW5vZGUubyBcCiAJCWF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBhaW8ubyBcCiAJCXNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIGZzLXdyaXRlYmFjay5vIFwKLQkJcG5vZGUubyBkcm9wX2NhY2hlcy5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubworCQlwbm9kZS5vIGRyb3BfY2FjaGVzLm8gc3BsaWNlLm8gc3luYy5vIHV0aW1lcy5vIFwKKwkJc3RhY2subwogCiBpZmVxICgkKENPTkZJR19CTE9DSykseSkKIG9iai15ICs9CWJ1ZmZlci5vIGJpby5vIGJsb2NrX2Rldi5vIGRpcmVjdC1pby5vIG1wYWdlLm8gaW9wcmlvLm8KZGlmZiAtLWdpdCBhL2ZzL2FkZnMvZGlyLmMgYi9mcy9hZGZzL2Rpci5jCmluZGV4IGQzYzc5MDUuLjJiODkwMzggMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvZGlyLmMKKysrIGIvZnMvYWRmcy9kaXIuYwpAQCAtMjgsNyArMjgsNyBAQAogc3RhdGljIGludAogYWRmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IGFkZnNfZGlyX29wcyAqb3BzID0gQURGU19TQihzYiktPnNfZGlyOwogCXN0cnVjdCBvYmplY3RfaW5mbyBvYmo7CmRpZmYgLS1naXQgYS9mcy9hZGZzL2Rpcl9mLmMgYi9mcy9hZGZzL2Rpcl9mLmMKaW5kZXggYmJmYzg2Mi4uYjliMmIyNyAxMDA2NDQKLS0tIGEvZnMvYWRmcy9kaXJfZi5jCisrKyBiL2ZzL2FkZnMvZGlyX2YuYwpAQCAtNTMsNyArNTMsNyBAQAogewogCWNoYXIgKm9sZF9idWYgPSBidWY7CiAKLQl3aGlsZSAoKnB0ciA+PSAnICcgJiYgbWF4bGVuLS0pIHsKKwl3aGlsZSAoKHVuc2lnbmVkIGNoYXIpKnB0ciA+PSAnICcgJiYgbWF4bGVuLS0pIHsKIAkJaWYgKCpwdHIgPT0gJy8nKQogCQkJKmJ1ZisrID0gJy4nOwogCQllbHNlCmRpZmYgLS1naXQgYS9mcy9hZmZzL2Rpci5jIGIvZnMvYWZmcy9kaXIuYwppbmRleCA1ZDk2NDlmLi5jYWQzZWUzIDEwMDY0NAotLS0gYS9mcy9hZmZzL2Rpci5jCisrKyBiL2ZzL2FmZnMvZGlyLmMKQEAgLTQxLDcgKzQxLDcgQEAKIHN0YXRpYyBpbnQKIGFmZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkCSpkaXJfYmg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkCSpmaF9iaDsKQEAgLTcxLDcgKzcxLDcgQEAKIAkJc3RvcmVkKys7CiAJfQogCWlmIChmX3BvcyA9PSAxKSB7Ci0JCWlmIChmaWxsZGlyKGRpcmVudCwgIi4uIiwgMiwgZl9wb3MsIHBhcmVudF9pbm8oZmlscC0+Zl9kZW50cnkpLCBEVF9ESVIpIDwgMCkKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLi4iLCAyLCBmX3BvcywgcGFyZW50X2lubyhmaWxwLT5mX3BhdGguZGVudHJ5KSwgRFRfRElSKSA8IDApCiAJCQlyZXR1cm4gc3RvcmVkOwogCQlmaWxwLT5mX3BvcyA9IGZfcG9zID0gMjsKIAkJc3RvcmVkKys7CmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmMKaW5kZXggYTZlYzc1Yy4uNGFjZDA0MSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpci5jCisrKyBiL2ZzL2Fmcy9kaXIuYwpAQCAtMzkyLDEwICszOTIsMTAgQEAKIAl1bnNpZ25lZCBmcG9zOwogCWludCByZXQ7CiAKLQlfZW50ZXIoInslTGQseyVsdX19IiwgZmlsZS0+Zl9wb3MsIGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CisJX2VudGVyKCJ7JUxkLHslbHV9fSIsIGZpbGUtPmZfcG9zLCBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CiAKIAlmcG9zID0gZmlsZS0+Zl9wb3M7Ci0JcmV0ID0gYWZzX2Rpcl9pdGVyYXRlKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCAmZnBvcywgY29va2llLCBmaWxsZGlyKTsKKwlyZXQgPSBhZnNfZGlyX2l0ZXJhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgJmZwb3MsIGNvb2tpZSwgZmlsbGRpcik7CiAJZmlsZS0+Zl9wb3MgPSBmcG9zOwogCiAJX2xlYXZlKCIgPSAlZCIsIHJldCk7CmRpZmYgLS1naXQgYS9mcy9hZnMvbW50cHQuYyBiL2ZzL2Fmcy9tbnRwdC5jCmluZGV4IDk5Nzg1YTcuLjhmNzRlODQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9tbnRwdC5jCisrKyBiL2ZzL2Fmcy9tbnRwdC5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbnRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSAic3VwZXIuaCIKICNpbmNsdWRlICJjZWxsLmgiCiAjaW5jbHVkZSAidm9sdW1lLmgiCkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogewogCWtlbnRlcigiJXAsJXB7JXB7JXN9LCVzfSIsCiAJICAgICAgIGlub2RlLCBmaWxlLAotCSAgICAgICBmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQsCi0JICAgICAgIGZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudCA/Ci0JICAgICAgIGZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUgOgorCSAgICAgICBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudCwKKwkgICAgICAgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQgPworCSAgICAgICBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUgOgogCSAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSAiIiwKLQkgICAgICAgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lKTsKKwkgICAgICAgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCiAJcmV0dXJuIC1FUkVNT1RFOwogfSAvKiBlbmQgYWZzX21udHB0X29wZW4oKSAqLwpkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCBkM2E2ZWMyLi41NTk5MWU0IDEwMDY0NAotLS0gYS9mcy9haW8uYworKysgYi9mcy9haW8uYwpAQCAtMjk4LDE3ICsyOTgsMjMgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgdHNrKTsKIAorCXNwaW5fbG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOwogCWlmICghY3R4LT5yZXFzX2FjdGl2ZSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAogCWFkZF93YWl0X3F1ZXVlKCZjdHgtPndhaXQsICZ3YWl0KTsKIAlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAl3aGlsZSAoY3R4LT5yZXFzX2FjdGl2ZSkgeworCQlzcGluX3VubG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOwogCQlzY2hlZHVsZSgpOwogCQlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc3Bpbl9sb2NrX2lycSgmY3R4LT5jdHhfbG9jayk7CiAJfQogCV9fc2V0X3Rhc2tfc3RhdGUodHNrLCBUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZjdHgtPndhaXQsICZ3YWl0KTsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5jdHhfbG9jayk7CiB9CiAKIC8qIHdhaXRfb25fc3luY19raW9jYjoKQEAgLTQyNCw3ICs0MzAsNiBAQAogCXJpbmcgPSBrbWFwX2F0b21pYyhjdHgtPnJpbmdfaW5mby5yaW5nX3BhZ2VzWzBdLCBLTV9VU0VSMCk7CiAJaWYgKGN0eC0+cmVxc19hY3RpdmUgPCBhaW9fcmluZ19hdmFpbCgmY3R4LT5yaW5nX2luZm8sIHJpbmcpKSB7CiAJCWxpc3RfYWRkKCZyZXEtPmtpX2xpc3QsICZjdHgtPmFjdGl2ZV9yZXFzKTsKLQkJZ2V0X2lvY3R4KGN0eCk7CiAJCWN0eC0+cmVxc19hY3RpdmUrKzsKIAkJb2theSA9IDE7CiAJfQpAQCAtNTM2LDggKzU0MSw2IEBACiAJc3Bpbl9sb2NrX2lycSgmY3R4LT5jdHhfbG9jayk7CiAJcmV0ID0gX19haW9fcHV0X3JlcShjdHgsIHJlcSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmN0eF9sb2NrKTsKLQlpZiAocmV0KQotCQlwdXRfaW9jdHgoY3R4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01ODYsNyArNTg5LDcgQEAKIAkgKiBOb3RlIHRoYXQgb24gVU1MIHRoaXMgKnJlcXVpcmVzKiBQRl9CT1JST1dFRF9NTSB0byBiZSBzZXQsIG90aGVyd2lzZQogCSAqIGl0IHdvbid0IHdvcmsuIFVwZGF0ZSBpdCBhY2NvcmRpbmdseSBpZiB5b3UgY2hhbmdlIGl0IGhlcmUKIAkgKi8KLQlhY3RpdmF0ZV9tbShhY3RpdmVfbW0sIG1tKTsKKwlzd2l0Y2hfbW0oYWN0aXZlX21tLCBtbSwgdHNrKTsKIAl0YXNrX3VubG9jayh0c2spOwogCiAJbW1kcm9wKGFjdGl2ZV9tbSk7CkBAIC01OTksOSArNjAyLDYgQEAKICAqCWJ5IHRoZSBjYWxsaW5nIGtlcm5lbCB0aHJlYWQKICAqCShOb3RlOiB0aGlzIHJvdXRpbmUgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIG9ubHkKICAqCWZyb20gYSBrZXJuZWwgdGhyZWFkIGNvbnRleHQpCi0gKgotICogQ29tbWVudHM6IENhbGxlZCB3aXRoIGN0eC0+Y3R4X2xvY2sgaGVsZC4gVGhpcyBuZXN0cwotICogdGFza19sb2NrIGluc3RlYWQgY3R4X2xvY2suCiAgKi8KIHN0YXRpYyB2b2lkIHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewpAQCAtNzgyLDggKzc4Miw3IEBACiAJCSAqLwogCQlpb2NiLT5raV91c2VycysrOyAgICAgICAvKiBncmFiIGV4dHJhIHJlZmVyZW5jZSAqLwogCQlhaW9fcnVuX2lvY2IoaW9jYik7Ci0JCWlmIChfX2Fpb19wdXRfcmVxKGN0eCwgaW9jYikpICAvKiBkcm9wIGV4dHJhIHJlZiAqLwotCQkJcHV0X2lvY3R4KGN0eCk7CisJCV9fYWlvX3B1dF9yZXEoY3R4LCBpb2NiKTsKICAJfQogCWlmICghbGlzdF9lbXB0eSgmY3R4LT5ydW5fbGlzdCkpCiAJCXJldHVybiAxOwpAQCAtODUwLDE0ICs4NDksMTYgQEAKIHsKIAlzdHJ1Y3Qga2lvY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGtpb2N0eCwgd3Eud29yayk7CiAJbW1fc2VnbWVudF90IG9sZGZzID0gZ2V0X2ZzKCk7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJaW50IHJlcXVldWU7CiAKIAlzZXRfZnMoVVNFUl9EUyk7CiAJdXNlX21tKGN0eC0+bW0pOwogCXNwaW5fbG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOwogCXJlcXVldWUgPV9fYWlvX3J1bl9pb2NicyhjdHgpOwotIAl1bnVzZV9tbShjdHgtPm1tKTsKKwltbSA9IGN0eC0+bW07CiAJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmN0eF9sb2NrKTsKKyAJdW51c2VfbW0obW0pOwogCXNldF9mcyhvbGRmcyk7CiAJLyoKIAkgKiB3ZSdyZSBpbiBhIHdvcmtlciB0aHJlYWQgYWxyZWFkeSwgZG9uJ3QgdXNlIHF1ZXVlX2RlbGF5ZWRfd29yaywKQEAgLTk5OCwxNCArOTk5LDEwIEBACiAJLyogZXZlcnl0aGluZyB0dXJuZWQgb3V0IHdlbGwsIGRpc3Bvc2Ugb2YgdGhlIGFpb2NiLiAqLwogCXJldCA9IF9fYWlvX3B1dF9yZXEoY3R4LCBpb2NiKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+Y3R4X2xvY2ssIGZsYWdzKTsKLQogCWlmICh3YWl0cXVldWVfYWN0aXZlKCZjdHgtPndhaXQpKQogCQl3YWtlX3VwKCZjdHgtPndhaXQpOwogCi0JaWYgKHJldCkKLQkJcHV0X2lvY3R4KGN0eCk7Ci0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmN0eF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzL3Jvb3QuYyBiL2ZzL2F1dG9mcy9yb290LmMKaW5kZXggMzY4YTFjMy4uZTY5OGM1MSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzL3Jvb3QuYworKysgYi9mcy9hdXRvZnMvcm9vdC5jCkBAIC00NSw3ICs0NSw3IEBACiAJc3RydWN0IGF1dG9mc19kaXJfZW50ICplbnQgPSBOVUxMOwogCXN0cnVjdCBhdXRvZnNfZGlyaGFzaCAqZGlyaGFzaDsKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaTsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlvZmZfdCBvbnIsIG5yOwogCiAJbG9ja19rZXJuZWwoKTsKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCWNhc2UgQVVUT0ZTX0lPQ19TRVRUSU1FT1VUOgogCQlyZXR1cm4gYXV0b2ZzX2dldF9zZXRfdGltZW91dChzYmksIGFyZ3ApOwogCWNhc2UgQVVUT0ZTX0lPQ19FWFBJUkU6Ci0JCXJldHVybiBhdXRvZnNfZXhwaXJlX3J1bihpbm9kZS0+aV9zYiwgc2JpLCBmaWxwLT5mX3Zmc21udCwKKwkJcmV0dXJuIGF1dG9mc19leHBpcmVfcnVuKGlub2RlLT5pX3NiLCBzYmksIGZpbHAtPmZfcGF0aC5tbnQsCiAJCQkJCSBhcmdwKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1NZUzsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaCBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAppbmRleCBiMTNmMzJjLi4yMTZiMWEzIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2F1dG9mc19pLmgKKysrIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCkBAIC0xNTAsNyArMTUwLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGF1dG9mczRfY29weV9hdGltZShzdHJ1Y3QgZmlsZSAqc3JjLCBzdHJ1Y3QgZmlsZSAqZHN0KQogewotCWRzdC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfYXRpbWUgPSBzcmMtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2F0aW1lOworCWRzdC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9hdGltZSA9CisJCXNyYy0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9hdGltZTsKIAlyZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvaW5vZGUuYyBiL2ZzL2F1dG9mczQvaW5vZGUuYwppbmRleCA5YzQ4MjUwLi5lOGY2YzVhIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2lub2RlLmMKKysrIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCkBAIC0zMTMsNyArMzEzLDcgQEAKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaTsKIAlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubzsKIAotCXNiaSA9IChzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKikga21hbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOworCXNiaSA9IGttYWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoICFzYmkgKQogCQlnb3RvIGZhaWxfdW5sb2NrOwogCURQUklOVEsoInN0YXJ0aW5nIHVwLCBzYmkgPSAlcCIsc2JpKTsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggYzE0OTM1Mi4uOGQwNWI5ZiAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9yb290LmMKKysrIGIvZnMvYXV0b2ZzNC9yb290LmMKQEAgLTc0LDcgKzc0LDcgQEAKIHN0YXRpYyBpbnQgYXV0b2ZzNF9yb290X3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmRpcmVudCwKIAkJCQlmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mczRfc2JpKGZpbGUtPmZfZGVudHJ5LT5kX3NiKTsKKwlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mczRfc2JpKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOwogCWludCBvel9tb2RlID0gYXV0b2ZzNF9vel9tb2RlKHNiaSk7CiAKIAlEUFJJTlRLKCJjYWxsZWQsIGZpbHAtPmZfcG9zID0gJWxsZCIsIGZpbGUtPmZfcG9zKTsKQEAgLTk1LDggKzk1LDggQEAKIAogc3RhdGljIGludCBhdXRvZnM0X2Rpcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OwotCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gZmlsZS0+Zl92ZnNtbnQ7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKKwlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IGZpbGUtPmZfcGF0aC5tbnQ7CiAJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShkZW50cnktPmRfc2IpOwogCXN0cnVjdCBkZW50cnkgKmN1cnNvcjsKIAlpbnQgc3RhdHVzOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIHN0YXRpYyBpbnQgYXV0b2ZzNF9kaXJfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mczRfc2JpKGRlbnRyeS0+ZF9zYik7CiAJc3RydWN0IGRlbnRyeSAqY3Vyc29yID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBzdGF0dXMgPSAwOwpAQCAtMjA0LDcgKzIwNCw3IEBACiAKIHN0YXRpYyBpbnQgYXV0b2ZzNF9kaXJfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpID0gYXV0b2ZzNF9zYmkoZGVudHJ5LT5kX3NiKTsKIAlzdHJ1Y3QgZGVudHJ5ICpjdXJzb3IgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHN0YXR1czsKQEAgLTg1OCwxNCArODU4LDE0IEBACiAJCXJldHVybiBhdXRvZnM0X2Fza19yZWdob3N0KHNiaSwgcCk7CiAKIAljYXNlIEFVVE9GU19JT0NfQVNLVU1PVU5UOgotCQlyZXR1cm4gYXV0b2ZzNF9hc2tfdW1vdW50KGZpbHAtPmZfdmZzbW50LCBwKTsKKwkJcmV0dXJuIGF1dG9mczRfYXNrX3Vtb3VudChmaWxwLT5mX3BhdGgubW50LCBwKTsKIAogCS8qIHJldHVybiBhIHNpbmdsZSB0aGluZyB0byBleHBpcmUgKi8KIAljYXNlIEFVVE9GU19JT0NfRVhQSVJFOgotCQlyZXR1cm4gYXV0b2ZzNF9leHBpcmVfcnVuKGlub2RlLT5pX3NiLGZpbHAtPmZfdmZzbW50LHNiaSwgcCk7CisJCXJldHVybiBhdXRvZnM0X2V4cGlyZV9ydW4oaW5vZGUtPmlfc2IsZmlscC0+Zl9wYXRoLm1udCxzYmksIHApOwogCS8qIHNhbWUgYXMgYWJvdmUsIGJ1dCBjYW4gc2VuZCBtdWx0aXBsZSBleHBpcmVzIHRocm91Z2ggcGlwZSAqLwogCWNhc2UgQVVUT0ZTX0lPQ19FWFBJUkVfTVVMVEk6Ci0JCXJldHVybiBhdXRvZnM0X2V4cGlyZV9tdWx0aShpbm9kZS0+aV9zYixmaWxwLT5mX3Zmc21udCxzYmksIHApOworCQlyZXR1cm4gYXV0b2ZzNF9leHBpcmVfbXVsdGkoaW5vZGUtPmlfc2IsZmlscC0+Zl9wYXRoLm1udCxzYmksIHApOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9TWVM7CmRpZmYgLS1naXQgYS9mcy9iYWRfaW5vZGUuYyBiL2ZzL2JhZF9pbm9kZS5jCmluZGV4IDM0ZTZkN2IuLjg2OWY1MTkgMTAwNjQ0Ci0tLSBhL2ZzL2JhZF9pbm9kZS5jCisrKyBiL2ZzL2JhZF9pbm9kZS5jCkBAIC0xNCw1OSArMTQsMzA3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAKLXN0YXRpYyBpbnQgcmV0dXJuX0VJTyh2b2lkKQorCitzdGF0aWMgbG9mZl90IGJhZF9maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKIHsKIAlyZXR1cm4gLUVJTzsKIH0KIAotI2RlZmluZSBFSU9fRVJST1IgKCh2b2lkICopIChyZXR1cm5fRUlPKSkKK3N0YXRpYyBzc2l6ZV90IGJhZF9maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3Qgc2l6ZSwgbG9mZl90ICpwcG9zKQoreworICAgICAgICByZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHNzaXplX3QgYmFkX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3Qgc2l6LCBsb2ZmX3QgKnBwb3MpCit7CisgICAgICAgIHJldHVybiAtRUlPOworfQorCitzdGF0aWMgc3NpemVfdCBiYWRfZmlsZV9haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQoreworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgc3NpemVfdCBiYWRfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfZmlsZV9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQoreworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGJhZF9maWxlX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCit7CisJcmV0dXJuIFBPTExFUlI7Cit9CisKK3N0YXRpYyBpbnQgYmFkX2ZpbGVfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBsb25nIGJhZF9maWxlX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsCisJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGxvbmcgYmFkX2ZpbGVfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYmFkX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYmFkX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfZmlsZV9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCBpZCkKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGJhZF9maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQlpbnQgZGF0YXN5bmMpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYmFkX2ZpbGVfYWlvX2ZzeW5jKHN0cnVjdCBraW9jYiAqaW9jYiwgaW50IGRhdGFzeW5jKQoreworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGJhZF9maWxlX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgb24pCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYmFkX2ZpbGVfbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJhZF9maWxlX3NlbmRmaWxlKHN0cnVjdCBmaWxlICppbl9maWxlLCBsb2ZmX3QgKnBwb3MsCisJCQlzaXplX3QgY291bnQsIHJlYWRfYWN0b3JfdCBhY3Rvciwgdm9pZCAqdGFyZ2V0KQoreworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgc3NpemVfdCBiYWRfZmlsZV9zZW5kcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQlpbnQgb2ZmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcywgaW50IG1vcmUpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhZF9maWxlX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfZmlsZV9jaGVja19mbGFncyhpbnQgZmxhZ3MpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYmFkX2ZpbGVfZGlyX25vdGlmeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYmFkX2ZpbGVfZmxvY2soc3RydWN0IGZpbGUgKmZpbHAsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgc3NpemVfdCBiYWRfZmlsZV9zcGxpY2Vfd3JpdGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCXN0cnVjdCBmaWxlICpvdXQsIGxvZmZfdCAqcHBvcywgc2l6ZV90IGxlbiwKKwkJCXVuc2lnbmVkIGludCBmbGFncykKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHNzaXplX3QgYmFkX2ZpbGVfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsCisJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLAorCQkJdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJldHVybiAtRUlPOworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiYWRfZmlsZV9vcHMgPQogewotCS5sbHNlZWsJCT0gRUlPX0VSUk9SLAotCS5haW9fcmVhZAk9IEVJT19FUlJPUiwKLQkucmVhZAkJPSBFSU9fRVJST1IsCi0JLndyaXRlCQk9IEVJT19FUlJPUiwKLQkuYWlvX3dyaXRlCT0gRUlPX0VSUk9SLAotCS5yZWFkZGlyCT0gRUlPX0VSUk9SLAotCS5wb2xsCQk9IEVJT19FUlJPUiwKLQkuaW9jdGwJCT0gRUlPX0VSUk9SLAotCS5tbWFwCQk9IEVJT19FUlJPUiwKLQkub3BlbgkJPSBFSU9fRVJST1IsCi0JLmZsdXNoCQk9IEVJT19FUlJPUiwKLQkucmVsZWFzZQk9IEVJT19FUlJPUiwKLQkuZnN5bmMJCT0gRUlPX0VSUk9SLAotCS5haW9fZnN5bmMJPSBFSU9fRVJST1IsCi0JLmZhc3luYwkJPSBFSU9fRVJST1IsCi0JLmxvY2sJCT0gRUlPX0VSUk9SLAotCS5zZW5kZmlsZQk9IEVJT19FUlJPUiwKLQkuc2VuZHBhZ2UJPSBFSU9fRVJST1IsCi0JLmdldF91bm1hcHBlZF9hcmVhID0gRUlPX0VSUk9SLAorCS5sbHNlZWsJCT0gYmFkX2ZpbGVfbGxzZWVrLAorCS5yZWFkCQk9IGJhZF9maWxlX3JlYWQsCisJLndyaXRlCQk9IGJhZF9maWxlX3dyaXRlLAorCS5haW9fcmVhZAk9IGJhZF9maWxlX2Fpb19yZWFkLAorCS5haW9fd3JpdGUJPSBiYWRfZmlsZV9haW9fd3JpdGUsCisJLnJlYWRkaXIJPSBiYWRfZmlsZV9yZWFkZGlyLAorCS5wb2xsCQk9IGJhZF9maWxlX3BvbGwsCisJLmlvY3RsCQk9IGJhZF9maWxlX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IGJhZF9maWxlX3VubG9ja2VkX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSBiYWRfZmlsZV9jb21wYXRfaW9jdGwsCisJLm1tYXAJCT0gYmFkX2ZpbGVfbW1hcCwKKwkub3BlbgkJPSBiYWRfZmlsZV9vcGVuLAorCS5mbHVzaAkJPSBiYWRfZmlsZV9mbHVzaCwKKwkucmVsZWFzZQk9IGJhZF9maWxlX3JlbGVhc2UsCisJLmZzeW5jCQk9IGJhZF9maWxlX2ZzeW5jLAorCS5haW9fZnN5bmMJPSBiYWRfZmlsZV9haW9fZnN5bmMsCisJLmZhc3luYwkJPSBiYWRfZmlsZV9mYXN5bmMsCisJLmxvY2sJCT0gYmFkX2ZpbGVfbG9jaywKKwkuc2VuZGZpbGUJPSBiYWRfZmlsZV9zZW5kZmlsZSwKKwkuc2VuZHBhZ2UJPSBiYWRfZmlsZV9zZW5kcGFnZSwKKwkuZ2V0X3VubWFwcGVkX2FyZWEgPSBiYWRfZmlsZV9nZXRfdW5tYXBwZWRfYXJlYSwKKwkuY2hlY2tfZmxhZ3MJPSBiYWRfZmlsZV9jaGVja19mbGFncywKKwkuZGlyX25vdGlmeQk9IGJhZF9maWxlX2Rpcl9ub3RpZnksCisJLmZsb2NrCQk9IGJhZF9maWxlX2Zsb2NrLAorCS5zcGxpY2Vfd3JpdGUJPSBiYWRfZmlsZV9zcGxpY2Vfd3JpdGUsCisJLnNwbGljZV9yZWFkCT0gYmFkX2ZpbGVfc3BsaWNlX3JlYWQsCiB9OwogCitzdGF0aWMgaW50IGJhZF9pbm9kZV9jcmVhdGUgKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCWludCBtb2RlLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmJhZF9pbm9kZV9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsCisJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXJldHVybiBFUlJfUFRSKC1FSU8pOworfQorCitzdGF0aWMgaW50IGJhZF9pbm9kZV9saW5rIChzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGJhZF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfaW5vZGVfc3ltbGluayAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJY29uc3QgY2hhciAqc3ltbmFtZSkKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCWludCBtb2RlKQoreworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGJhZF9pbm9kZV9ybWRpciAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfaW5vZGVfbWtub2QgKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQlpbnQgbW9kZSwgZGV2X3QgcmRldikKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfaW5vZGVfcmVuYW1lIChzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCXN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQlpbnQgYnVmbGVuKQoreworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGJhZF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLAorCQkJc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYmFkX2lub2RlX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCXN0cnVjdCBrc3RhdCAqc3RhdCkKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwgc3RydWN0IGlhdHRyICphdHRycykKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBiYWRfaW5vZGVfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHNzaXplX3QgYmFkX2lub2RlX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCXZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJhZF9pbm9kZV9saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsCisJCQlzaXplX3QgYnVmZmVyX3NpemUpCit7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgYmFkX2lub2RlX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gLUVJTzsKK30KKwogc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGJhZF9pbm9kZV9vcHMgPQogewotCS5jcmVhdGUJCT0gRUlPX0VSUk9SLAotCS5sb29rdXAJCT0gRUlPX0VSUk9SLAotCS5saW5rCQk9IEVJT19FUlJPUiwKLQkudW5saW5rCQk9IEVJT19FUlJPUiwKLQkuc3ltbGluawk9IEVJT19FUlJPUiwKLQkubWtkaXIJCT0gRUlPX0VSUk9SLAotCS5ybWRpcgkJPSBFSU9fRVJST1IsCi0JLm1rbm9kCQk9IEVJT19FUlJPUiwKLQkucmVuYW1lCQk9IEVJT19FUlJPUiwKLQkucmVhZGxpbmsJPSBFSU9fRVJST1IsCisJLmNyZWF0ZQkJPSBiYWRfaW5vZGVfY3JlYXRlLAorCS5sb29rdXAJCT0gYmFkX2lub2RlX2xvb2t1cCwKKwkubGluawkJPSBiYWRfaW5vZGVfbGluaywKKwkudW5saW5rCQk9IGJhZF9pbm9kZV91bmxpbmssCisJLnN5bWxpbmsJPSBiYWRfaW5vZGVfc3ltbGluaywKKwkubWtkaXIJCT0gYmFkX2lub2RlX21rZGlyLAorCS5ybWRpcgkJPSBiYWRfaW5vZGVfcm1kaXIsCisJLm1rbm9kCQk9IGJhZF9pbm9kZV9ta25vZCwKKwkucmVuYW1lCQk9IGJhZF9pbm9kZV9yZW5hbWUsCisJLnJlYWRsaW5rCT0gYmFkX2lub2RlX3JlYWRsaW5rLAogCS8qIGZvbGxvd19saW5rIG11c3QgYmUgbm8tb3AsIG90aGVyd2lzZSB1bm1vdW50aW5nIHRoaXMgaW5vZGUKIAkgICB3b24ndCB3b3JrICovCi0JLnRydW5jYXRlCT0gRUlPX0VSUk9SLAotCS5wZXJtaXNzaW9uCT0gRUlPX0VSUk9SLAotCS5nZXRhdHRyCT0gRUlPX0VSUk9SLAotCS5zZXRhdHRyCT0gRUlPX0VSUk9SLAotCS5zZXR4YXR0cgk9IEVJT19FUlJPUiwKLQkuZ2V0eGF0dHIJPSBFSU9fRVJST1IsCi0JLmxpc3R4YXR0cgk9IEVJT19FUlJPUiwKLQkucmVtb3ZleGF0dHIJPSBFSU9fRVJST1IsCisJLyogcHV0X2xpbmsgcmV0dXJucyB2b2lkICovCisJLyogdHJ1bmNhdGUgcmV0dXJucyB2b2lkICovCisJLnBlcm1pc3Npb24JPSBiYWRfaW5vZGVfcGVybWlzc2lvbiwKKwkuZ2V0YXR0cgk9IGJhZF9pbm9kZV9nZXRhdHRyLAorCS5zZXRhdHRyCT0gYmFkX2lub2RlX3NldGF0dHIsCisJLnNldHhhdHRyCT0gYmFkX2lub2RlX3NldHhhdHRyLAorCS5nZXR4YXR0cgk9IGJhZF9pbm9kZV9nZXR4YXR0ciwKKwkubGlzdHhhdHRyCT0gYmFkX2lub2RlX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIJPSBiYWRfaW5vZGVfcmVtb3ZleGF0dHIsCisJLyogdHJ1bmNhdGVfcmFuZ2UgcmV0dXJucyB2b2lkICovCiB9OwogCiAKQEAgLTg4LDcgKzMzNiw3IEBACiAgKglvbiBpdCB0byBmYWlsIGZyb20gdGhpcyBwb2ludCBvbi4KICAqLwogIAotdm9pZCBtYWtlX2JhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkgCit2b2lkIG1ha2VfYmFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJcmVtb3ZlX2lub2RlX2hhc2goaW5vZGUpOwogCkBAIC0xMTMsNyArMzYxLDcgQEAKICAqCVJldHVybnMgdHJ1ZSBpZiB0aGUgaW5vZGUgaW4gcXVlc3Rpb24gaGFzIGJlZW4gbWFya2VkIGFzIGJhZC4KICAqLwogIAotaW50IGlzX2JhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkgCitpbnQgaXNfYmFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJcmV0dXJuIChpbm9kZS0+aV9vcCA9PSAmYmFkX2lub2RlX29wcyk7CQogfQpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9idHJlZS5jIGIvZnMvYmVmcy9idHJlZS5jCmluZGV4IDgxYjA0MmUuLmFmNWJiOTMgMTAwNjQ0Ci0tLSBhL2ZzL2JlZnMvYnRyZWUuYworKysgYi9mcy9iZWZzL2J0cmVlLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCXRoaXNfbm9kZSA9IChiZWZzX2J0cmVlX25vZGUgKikga21hbGxvYyhzaXplb2YgKGJlZnNfYnRyZWVfbm9kZSksCisJdGhpc19ub2RlID0ga21hbGxvYyhzaXplb2YgKGJlZnNfYnRyZWVfbm9kZSksCiAJCQkJCQlHRlBfTk9GUyk7CiAJaWYgKCF0aGlzX25vZGUpIHsKIAkJYmVmc19lcnJvcihzYiwgImJlZnNfYnRyZWVfZmluZCgpIGZhaWxlZCB0byBhbGxvY2F0ZSAldSAiCmRpZmYgLS1naXQgYS9mcy9iZWZzL2RlYnVnLmMgYi9mcy9iZWZzL2RlYnVnLmMKaW5kZXggZTgzMWE4Zi4uYjhlMzA0YSAxMDA2NDQKLS0tIGEvZnMvYmVmcy9kZWJ1Zy5jCisrKyBiL2ZzL2JlZnMvZGVidWcuYwpAQCAtMjgsNyArMjgsNyBAQAogYmVmc19lcnJvcihjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7Ci0JY2hhciAqZXJyX2J1ZiA9IChjaGFyICopIGttYWxsb2MoRVJSQlVGU0laRSwgR0ZQX0tFUk5FTCk7CisJY2hhciAqZXJyX2J1ZiA9IGttYWxsb2MoRVJSQlVGU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVycl9idWYgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImNvdWxkIG5vdCBhbGxvY2F0ZSAlZCBieXRlc1xuIiwgRVJSQlVGU0laRSk7CiAJCXJldHVybjsKQEAgLTQ2LDcgKzQ2LDcgQEAKIGJlZnNfd2FybmluZyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7Ci0JY2hhciAqZXJyX2J1ZiA9IChjaGFyICopIGttYWxsb2MoRVJSQlVGU0laRSwgR0ZQX0tFUk5FTCk7CisJY2hhciAqZXJyX2J1ZiA9IGttYWxsb2MoRVJSQlVGU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVycl9idWYgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImNvdWxkIG5vdCBhbGxvY2F0ZSAlZCBieXRlc1xuIiwgRVJSQlVGU0laRSk7CiAJCXJldHVybjsKQEAgLTcwLDcgKzcwLDcgQEAKIAljaGFyICplcnJfYnVmID0gTlVMTDsKIAogCWlmIChCRUZTX1NCKHNiKS0+bW91bnRfb3B0cy5kZWJ1ZykgewotCQllcnJfYnVmID0gKGNoYXIgKikga21hbGxvYyhFUlJCVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwkJZXJyX2J1ZiA9IGttYWxsb2MoRVJSQlVGU0laRSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChlcnJfYnVmID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IGFsbG9jYXRlICVkIGJ5dGVzXG4iLAogCQkJCUVSUkJVRlNJWkUpOwpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9saW51eHZmcy5jIGIvZnMvYmVmcy9saW51eHZmcy5jCmluZGV4IGJjZTQwMmUuLjQ4MWU1OWIgMTAwNjQ0Ci0tLSBhL2ZzL2JlZnMvbGludXh2ZnMuYworKysgYi9mcy9iZWZzL2xpbnV4dmZzLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogc3RhdGljIGludAogYmVmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJYmVmc19kYXRhX3N0cmVhbSAqZHMgPSAmQkVGU19JKGlub2RlKS0+aV9kYXRhLmRzOwogCWJlZnNfb2ZmX3QgdmFsdWU7CkBAIC0yMjIsNyArMjIyLDcgQEAKIAljaGFyIGtleWJ1ZltCRUZTX05BTUVfTEVOICsgMV07CiAJY2hhciAqbmxzbmFtZTsKIAlpbnQgbmxzbmFtZWxlbjsKLQljb25zdCBjaGFyICpkaXJuYW1lID0gZmlscC0+Zl9kZW50cnktPmRfbmFtZS5uYW1lOworCWNvbnN0IGNoYXIgKmRpcm5hbWUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZTsKIAogCWJlZnNfZGVidWcoc2IsICItLS0+IGJlZnNfcmVhZGRpcigpICIKIAkJICAgIm5hbWUgJXMsIGlub2RlICVsZCwgZmlscC0+Zl9wb3MgJUxkIiwKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuYwppbmRleCBhNjUwZjFkLi4yYTc0NmU2IDEwMDY0NAotLS0gYS9mcy9iZnMvZGlyLmMKKysrIGIvZnMvYmZzL2Rpci5jCkBAIC0yNyw3ICsyNyw3IEBACiAKIHN0YXRpYyBpbnQgYmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiBmLCB2b2lkICogZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgaW5vZGUgKiBkaXIgPSBmLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKiBkaXIgPSBmLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoOwogCXN0cnVjdCBiZnNfZGlyZW50ICogZGU7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmMKaW5kZXggZWFjMTc1ZS4uMTM0Yzk5OSAxMDA2NDQKLS0tIGEvZnMvYmZzL2lub2RlLmMKKysrIGIvZnMvYmZzL2lub2RlLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJZnMvYmZzL2lub2RlLmMKICAqCUJGUyBzdXBlcmJsb2NrIGFuZCBpbm9kZSBvcGVyYXRpb25zLgotICoJQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgVGlncmFuIEFpdmF6aWFuIDx0aWdyYW5AdmVyaXRhcy5jb20+CisgKglDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiBUaWdyYW4gQWl2YXppYW4gPHRpZ3JhbkBhaXZhemlhbi5mc25ldC5jby51az4KICAqCUZyb20gZnMvbWluaXgsIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiBMaW51cyBUb3J2YWxkcy4KICAqCiAgKiAgICAgIE1hZGUgZW5kaWFubmVzcy1jbGVhbiBieSBBbmRyZXcgU3RyaWJibGVoaWxsIDxhZHNAd29tcG9tLm9yZz4sIDIwMDUuCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJiZnMuaCIKIAotTU9EVUxFX0FVVEhPUigiVGlncmFuIEEuIEFpdmF6aWFuIDx0aWdyYW5AdmVyaXRhcy5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJUaWdyYW4gQWl2YXppYW4gPHRpZ3JhbkBhaXZhemlhbi5mc25ldC5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU0NPIFVuaXhXYXJlIEJGUyBmaWxlc3lzdGVtIGZvciBMaW51eCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfYW91dC5jIGIvZnMvYmluZm10X2FvdXQuYwppbmRleCA1MTdlMTExLi44MTNhODg3IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfYW91dC5jCisrKyBiL2ZzL2JpbmZtdF9hb3V0LmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogCWlmICgoTl9NQUdJQyhleCkgIT0gWk1BR0lDICYmIE5fTUFHSUMoZXgpICE9IE9NQUdJQyAmJgogCSAgICAgTl9NQUdJQyhleCkgIT0gUU1BR0lDICYmIE5fTUFHSUMoZXgpICE9IE5NQUdJQykgfHwKIAkgICAgTl9UUlNJWkUoZXgpIHx8IE5fRFJTSVpFKGV4KSB8fAotCSAgICBpX3NpemVfcmVhZChicHJtLT5maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkgPCBleC5hX3RleHQrZXguYV9kYXRhK05fU1lNU0laRShleCkrTl9UWFRPRkYoZXgpKSB7CisJICAgIGlfc2l6ZV9yZWFkKGJwcm0tPmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpIDwgZXguYV90ZXh0K2V4LmFfZGF0YStOX1NZTVNJWkUoZXgpK05fVFhUT0ZGKGV4KSkgewogCQlyZXR1cm4gLUVOT0VYRUM7CiAJfQogCkBAIC0zODksNyArMzg5LDcgQEAKIAkJewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJCSAgICAgICAiZmRfb2Zmc2V0IGlzIG5vdCBwYWdlIGFsaWduZWQuIFBsZWFzZSBjb252ZXJ0IHByb2dyYW06ICVzXG4iLAotCQkJICAgICAgIGJwcm0tPmZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCQkgICAgICAgYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCQkJZXJyb3JfdGltZSA9IGppZmZpZXM7CiAJCX0KIApAQCAtNDY5LDcgKzQ2OSw3IEBACiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgZXhlYyBleDsKIAotCWlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJcmV0dmFsID0gLUVOT0VYRUM7CiAJZXJyb3IgPSBrZXJuZWxfcmVhZChmaWxlLCAwLCAoY2hhciAqKSAmZXgsIHNpemVvZihleCkpOwpAQCAtNTA2LDcgKzUwNiw3IEBACiAJCXsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgCiAJCQkgICAgICAgIk5fVFhUT0ZGIGlzIG5vdCBwYWdlIGFsaWduZWQuIFBsZWFzZSBjb252ZXJ0IGxpYnJhcnk6ICVzXG4iLAotCQkJICAgICAgIGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCQkgICAgICAgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCQkJZXJyb3JfdGltZSA9IGppZmZpZXM7CiAJCX0KIAkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCBiZTU4NjlkLi42NjlkYmU1IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC02ODIsNiArNjgyLDE1IEBACiAJCQlyZXR2YWwgPSBQVFJfRVJSKGludGVycHJldGVyKTsKIAkJCWlmIChJU19FUlIoaW50ZXJwcmV0ZXIpKQogCQkJCWdvdG8gb3V0X2ZyZWVfaW50ZXJwOworCisJCQkvKgorCQkJICogSWYgdGhlIGJpbmFyeSBpcyBub3QgcmVhZGFibGUgdGhlbiBlbmZvcmNlCisJCQkgKiBtbS0+ZHVtcGFibGUgPSAwIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVycHJldGVyJ3MKKwkJCSAqIHBlcm1pc3Npb25zLgorCQkJICovCisJCQlpZiAoZmlsZV9wZXJtaXNzaW9uKGludGVycHJldGVyLCBNQVlfUkVBRCkgPCAwKQorCQkJCWJwcm0tPmludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfRU5GT1JDRV9OT05EVU1QOworCiAJCQlyZXR2YWwgPSBrZXJuZWxfcmVhZChpbnRlcnByZXRlciwgMCwgYnBybS0+YnVmLAogCQkJCQkgICAgIEJJTlBSTV9CVUZfU0laRSk7CiAJCQlpZiAocmV0dmFsICE9IEJJTlBSTV9CVUZfU0laRSkgewpAQCAtODU0LDEzICs4NjMsNyBAQAogCQkJICogZGVmYXVsdCBtbWFwIGJhc2UsIGFzIHdlbGwgYXMgd2hhdGV2ZXIgcHJvZ3JhbSB0aGV5CiAJCQkgKiBtaWdodCB0cnkgdG8gZXhlYy4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgYnJrIHdpbGwKIAkJCSAqIGZvbGxvdyB0aGUgbG9hZGVyLCBhbmQgaXMgbm90IG1vdmFibGUuICAqLwotCQkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfUkFORE9NSVpFKQotCQkJCWxvYWRfYmlhcyA9IHJhbmRvbWl6ZV9yYW5nZSgweDEwMDAwLAotCQkJCQkJCSAgICBFTEZfRVRfRFlOX0JBU0UsCi0JCQkJCQkJICAgIDApOwotCQkJZWxzZQotCQkJCWxvYWRfYmlhcyA9IEVMRl9FVF9EWU5fQkFTRTsKLQkJCWxvYWRfYmlhcyA9IEVMRl9QQUdFU1RBUlQobG9hZF9iaWFzIC0gdmFkZHIpOworCQkJbG9hZF9iaWFzID0gRUxGX1BBR0VTVEFSVChFTEZfRVRfRFlOX0JBU0UgLSB2YWRkcik7CiAJCX0KIAogCQllcnJvciA9IGVsZl9tYXAoYnBybS0+ZmlsZSwgbG9hZF9iaWFzICsgdmFkZHIsIGVsZl9wcG50LApAQCAtMTE4NCwxMyArMTE4NywxNyBAQAogICovCiBzdGF0aWMgaW50IG1heWR1bXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CisJLyogVGhlIHZtYSBjYW4gYmUgc2V0IHVwIHRvIHRlbGwgdXMgdGhlIGFuc3dlciBkaXJlY3RseS4gICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9BTFdBWVNEVU1QKQorCQlyZXR1cm4gMTsKKwogCS8qIERvIG5vdCBkdW1wIEkvTyBtYXBwZWQgZGV2aWNlcyBvciBzcGVjaWFsIG1hcHBpbmdzICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9SRVNFUlZFRCkpCiAJCXJldHVybiAwOwogCiAJLyogRHVtcCBzaGFyZWQgbWVtb3J5IG9ubHkgaWYgbWFwcGVkIGZyb20gYW4gYW5vbnltb3VzIGZpbGUuICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpCi0JCXJldHVybiB2bWEtPnZtX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX25saW5rID09IDA7CisJCXJldHVybiB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPT0gMDsKIAogCS8qIElmIGl0IGhhc24ndCBiZWVuIHdyaXR0ZW4gdG8sIGRvbid0IHdyaXRlIGl0IG91dCAqLwogCWlmICghdm1hLT5hbm9uX3ZtYSkKQEAgLTEzMTcsNyArMTMyNCw3IEBACiAJcHJzdGF0dXMtPnByX3BpZCA9IHAtPnBpZDsKIAlwcnN0YXR1cy0+cHJfcHBpZCA9IHAtPnBhcmVudC0+cGlkOwogCXByc3RhdHVzLT5wcl9wZ3JwID0gcHJvY2Vzc19ncm91cChwKTsKLQlwcnN0YXR1cy0+cHJfc2lkID0gcC0+c2lnbmFsLT5zZXNzaW9uOworCXByc3RhdHVzLT5wcl9zaWQgPSBwcm9jZXNzX3Nlc3Npb24ocCk7CiAJaWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpIHsKIAkJLyoKIAkJICogVGhpcyBpcyB0aGUgcmVjb3JkIGZvciB0aGUgZ3JvdXAgbGVhZGVyLiAgQWRkIGluIHRoZQpAQCAtMTM2Myw3ICsxMzcwLDcgQEAKIAlwc2luZm8tPnByX3BpZCA9IHAtPnBpZDsKIAlwc2luZm8tPnByX3BwaWQgPSBwLT5wYXJlbnQtPnBpZDsKIAlwc2luZm8tPnByX3BncnAgPSBwcm9jZXNzX2dyb3VwKHApOwotCXBzaW5mby0+cHJfc2lkID0gcC0+c2lnbmFsLT5zZXNzaW9uOworCXBzaW5mby0+cHJfc2lkID0gcHJvY2Vzc19zZXNzaW9uKHApOwogCiAJaSA9IHAtPnN0YXRlID8gZmZ6KH5wLT5zdGF0ZSkgKyAxIDogMDsKIAlwc2luZm8tPnByX3N0YXRlID0gaTsKQEAgLTE0MzAsNiArMTQzNywzMiBAQAogCXJldHVybiBzejsKIH0KIAorc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmlyc3Rfdm1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdhdGVfdm1hKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcmV0ID0gdHNrLT5tbS0+bW1hcDsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGdhdGVfdm1hOworfQorLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIGFjcm9zcyBhIHZtYSBsaXN0LiAgSXQgZW5zdXJlcyB0aGF0IHRoZSBjYWxsZXIKKyAqIHdpbGwgdmlzaXQgYGdhdGVfdm1hJyBwcmlvciB0byB0ZXJtaW5hdGluZyB0aGUgc2VhcmNoLgorICovCitzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnRoaXNfdm1hLAorCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdhdGVfdm1hKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcmV0OworCisJcmV0ID0gdGhpc192bWEtPnZtX25leHQ7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlpZiAodGhpc192bWEgPT0gZ2F0ZV92bWEpCisJCXJldHVybiBOVUxMOworCXJldHVybiBnYXRlX3ZtYTsKK30KKwogLyoKICAqIEFjdHVhbCBkdW1wZXIKICAqCkBAIC0xNDQ1LDcgKzE0NzgsNyBAQAogCWludCBzZWdzOwogCXNpemVfdCBzaXplID0gMDsKIAlpbnQgaTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKmdhdGVfdm1hOwogCXN0cnVjdCBlbGZoZHIgKmVsZiA9IE5VTEw7CiAJbG9mZl90IG9mZnNldCA9IDAsIGRhdGFvZmYsIGZvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBsaW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQ09SRV0ucmxpbV9jdXI7CkBAIC0xNTMxLDYgKzE1NjQsMTAgQEAKIAlzZWdzICs9IEVMRl9DT1JFX0VYVFJBX1BIRFJTOwogI2VuZGlmCiAKKwlnYXRlX3ZtYSA9IGdldF9nYXRlX3ZtYShjdXJyZW50KTsKKwlpZiAoZ2F0ZV92bWEgIT0gTlVMTCkKKwkJc2VncysrOworCiAJLyogU2V0IHVwIGhlYWRlciAqLwogCWZpbGxfZWxmX2hlYWRlcihlbGYsIHNlZ3MgKyAxKTsJLyogaW5jbHVkaW5nIG5vdGVzIHNlY3Rpb24gKi8KIApAQCAtMTU5OCw3ICsxNjM1LDggQEAKIAlkYXRhb2ZmID0gb2Zmc2V0ID0gcm91bmR1cChvZmZzZXQsIEVMRl9FWEVDX1BBR0VTSVpFKTsKIAogCS8qIFdyaXRlIHByb2dyYW0gaGVhZGVycyBmb3Igc2VnbWVudHMgZHVtcCAqLwotCWZvciAodm1hID0gY3VycmVudC0+bW0tPm1tYXA7IHZtYSAhPSBOVUxMOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKKwlmb3IgKHZtYSA9IGZpcnN0X3ZtYShjdXJyZW50LCBnYXRlX3ZtYSk7IHZtYSAhPSBOVUxMOworCQkJdm1hID0gbmV4dF92bWEodm1hLCBnYXRlX3ZtYSkpIHsKIAkJc3RydWN0IGVsZl9waGRyIHBoZHI7CiAJCXNpemVfdCBzejsKIApAQCAtMTY0Nyw3ICsxNjg1LDggQEAKIAkvKiBBbGlnbiB0byBwYWdlICovCiAJRFVNUF9TRUVLKGRhdGFvZmYgLSBmb2Zmc2V0KTsKIAotCWZvciAodm1hID0gY3VycmVudC0+bW0tPm1tYXA7IHZtYSAhPSBOVUxMOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKKwlmb3IgKHZtYSA9IGZpcnN0X3ZtYShjdXJyZW50LCBnYXRlX3ZtYSk7IHZtYSAhPSBOVUxMOworCQkJdm1hID0gbmV4dF92bWEodm1hLCBnYXRlX3ZtYSkpIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyOwogCiAJCWlmICghbWF5ZHVtcCh2bWEpKQpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZl9mZHBpYy5jIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCmluZGV4IGVkOWE2MWMuLmE0ZDkzM2EgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYworKysgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKQEAgLTIzNCw2ICsyMzQsMTQgQEAKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCisJCQkvKgorCQkJICogSWYgdGhlIGJpbmFyeSBpcyBub3QgcmVhZGFibGUgdGhlbiBlbmZvcmNlCisJCQkgKiBtbS0+ZHVtcGFibGUgPSAwIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVycHJldGVyJ3MKKwkJCSAqIHBlcm1pc3Npb25zLgorCQkJICovCisJCQlpZiAoZmlsZV9wZXJtaXNzaW9uKGludGVycHJldGVyLCBNQVlfUkVBRCkgPCAwKQorCQkJCWJwcm0tPmludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfRU5GT1JDRV9OT05EVU1QOworCiAJCQlyZXR2YWwgPSBrZXJuZWxfcmVhZChpbnRlcnByZXRlciwgMCwgYnBybS0+YnVmLAogCQkJCQkgICAgIEJJTlBSTV9CVUZfU0laRSk7CiAJCQlpZiAocmV0dmFsIDwgMCkKQEAgLTcwNiwxMiArNzE0LDExIEBACiAJCXJldHVybiAtRUxJQkJBRDsKIAogCXNpemUgPSBzaXplb2YoKmxvYWRtYXApICsgbmxvYWRzICogc2l6ZW9mKCpzZWcpOwotCWxvYWRtYXAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWxvYWRtYXAgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghbG9hZG1hcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwYXJhbXMtPmxvYWRtYXAgPSBsb2FkbWFwOwotCW1lbXNldChsb2FkbWFwLCAwLCBzaXplKTsKIAogCWxvYWRtYXAtPnZlcnNpb24gPSBFTEYzMl9GRFBJQ19MT0FETUFQX1ZFUlNJT047CiAJbG9hZG1hcC0+bnNlZ3MgPSBubG9hZHM7CkBAIC04NTUsNyArODYyLDcgQEAKIAogZHluYW1pY19lcnJvcjoKIAlwcmludGsoIkVMRiBGRFBJQyAlcyB3aXRoIGludmFsaWQgRFlOQU1JQyBzZWN0aW9uIChpbm9kZT0lbHUpXG4iLAotCSAgICAgICB3aGF0LCBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm8pOworCSAgICAgICB3aGF0LCBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CiAJcmV0dXJuIC1FTElCQkFEOwogfQogCkBAIC0xMTg2LDcgKzExOTMsNyBAQAogCiAJLyogRHVtcCBzaGFyZWQgbWVtb3J5IG9ubHkgaWYgbWFwcGVkIGZyb20gYW4gYW5vbnltb3VzIGZpbGUuICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpIHsKLQkJaWYgKHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPT0gMCkgeworCQlpZiAodm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX25saW5rID09IDApIHsKIAkJCWtkY29yZSgiJTA4bHg6ICUwOGx4OiBubyAoc2hhcmUpIiwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9mbGFncyk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtMTMyMiw3ICsxMzI5LDcgQEAKIAlwcnN0YXR1cy0+cHJfcGlkID0gcC0+cGlkOwogCXByc3RhdHVzLT5wcl9wcGlkID0gcC0+cGFyZW50LT5waWQ7CiAJcHJzdGF0dXMtPnByX3BncnAgPSBwcm9jZXNzX2dyb3VwKHApOwotCXByc3RhdHVzLT5wcl9zaWQgPSBwLT5zaWduYWwtPnNlc3Npb247CisJcHJzdGF0dXMtPnByX3NpZCA9IHByb2Nlc3Nfc2Vzc2lvbihwKTsKIAlpZiAodGhyZWFkX2dyb3VwX2xlYWRlcihwKSkgewogCQkvKgogCQkgKiBUaGlzIGlzIHRoZSByZWNvcmQgZm9yIHRoZSBncm91cCBsZWFkZXIuICBBZGQgaW4gdGhlCkBAIC0xMzcxLDcgKzEzNzgsNyBAQAogCXBzaW5mby0+cHJfcGlkID0gcC0+cGlkOwogCXBzaW5mby0+cHJfcHBpZCA9IHAtPnBhcmVudC0+cGlkOwogCXBzaW5mby0+cHJfcGdycCA9IHByb2Nlc3NfZ3JvdXAocCk7Ci0JcHNpbmZvLT5wcl9zaWQgPSBwLT5zaWduYWwtPnNlc3Npb247CisJcHNpbmZvLT5wcl9zaWQgPSBwcm9jZXNzX3Nlc3Npb24ocCk7CiAKIAlpID0gcC0+c3RhdGUgPyBmZnoofnAtPnN0YXRlKSArIDEgOiAwOwogCXBzaW5mby0+cHJfc3RhdGUgPSBpOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2ZsYXQuYyBiL2ZzL2JpbmZtdF9mbGF0LmMKaW5kZXggYTYyZmQ0MC4uYWU4NTk1ZCAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2ZsYXQuYworKysgYi9mcy9iaW5mbXRfZmxhdC5jCkBAIC00MjksNyArNDI5LDcgQEAKIAlpbnQgcmV0OwogCiAJaGRyID0gKChzdHJ1Y3QgZmxhdF9oZHIgKikgYnBybS0+YnVmKTsJCS8qIGV4ZWMtaGVhZGVyICovCi0JaW5vZGUgPSBicHJtLT5maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGJwcm0tPmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAl0ZXh0X2xlbiAgPSBudG9obChoZHItPmRhdGFfc3RhcnQpOwogCWRhdGFfbGVuICA9IG50b2hsKGhkci0+ZGF0YV9lbmQpIC0gbnRvaGwoaGRyLT5kYXRhX3N0YXJ0KTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jCmluZGV4IDE3MTNjNDguLmMyZTA4MjUgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjLmMKKysrIGIvZnMvYmluZm10X21pc2MuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAKIAllcnIgPSAtRU5PTUVNOwogCW1lbXNpemUgPSBzaXplb2YoTm9kZSkgKyBjb3VudCArIDg7Ci0JZSA9IChOb2RlICopIGttYWxsb2MobWVtc2l6ZSwgR0ZQX1VTRVIpOworCWUgPSBrbWFsbG9jKG1lbXNpemUsIEdGUF9VU0VSKTsKIAlpZiAoIWUpCiAJCWdvdG8gb3V0OwogCkBAIC01NDIsNyArNTQyLDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBibV9lbnRyeV9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKIHsKLQlOb2RlICplID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKKwlOb2RlICplID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCWxvZmZfdCBwb3MgPSAqcHBvczsKIAlzc2l6ZV90IHJlczsKIAljaGFyICpwYWdlOwpAQCAtNTc2LDcgKzU3Niw3IEBACiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGRlbnRyeSAqcm9vdDsKLQlOb2RlICplID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKKwlOb2RlICplID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCWludCByZXMgPSBwYXJzZV9jb21tYW5kKGJ1ZmZlciwgY291bnQpOwogCiAJc3dpdGNoIChyZXMpIHsKQEAgLTU4NCw3ICs1ODQsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgMjogc2V0X2JpdChFbmFibGVkLCAmZS0+ZmxhZ3MpOwogCQkJYnJlYWs7Ci0JCWNhc2UgMzogcm9vdCA9IGRnZXQoZmlsZS0+Zl92ZnNtbnQtPm1udF9zYi0+c19yb290KTsKKwkJY2FzZSAzOiByb290ID0gZGdldChmaWxlLT5mX3BhdGgubW50LT5tbnRfc2ItPnNfcm9vdCk7CiAJCQltdXRleF9sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKIAogCQkJa2lsbF9ub2RlKGUpOwpAQCAtNjEwLDcgKzYxMCw3IEBACiAJTm9kZSAqZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBkZW50cnkgKnJvb3QsICpkZW50cnk7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGUtPmZfdmZzbW50LT5tbnRfc2I7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGUtPmZfcGF0aC5tbnQtPm1udF9zYjsKIAlpbnQgZXJyID0gMDsKIAogCWUgPSBjcmVhdGVfZW50cnkoYnVmZmVyLCBjb3VudCk7CkBAIC02OTksNyArNjk5LDcgQEAKIAlzd2l0Y2ggKHJlcykgewogCQljYXNlIDE6IGVuYWJsZWQgPSAwOyBicmVhazsKIAkJY2FzZSAyOiBlbmFibGVkID0gMTsgYnJlYWs7Ci0JCWNhc2UgMzogcm9vdCA9IGRnZXQoZmlsZS0+Zl92ZnNtbnQtPm1udF9zYi0+c19yb290KTsKKwkJY2FzZSAzOiByb290ID0gZGdldChmaWxlLT5mX3BhdGgubW50LT5tbnRfc2ItPnNfcm9vdCk7CiAJCQltdXRleF9sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKIAogCQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZlbnRyaWVzKSkKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggN2VjNzM3ZS4uNzYxOGJjYiAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTkxNiw3ICs5MTYsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvKQordm9pZCBiaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IGJpb192ZWMgKmJ2ZWMgPSBiaW8tPmJpX2lvX3ZlYzsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggMTM4MTZiNGQuLmZjNzAyOGI2IDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMTY4LDYgKzE2OCwyMDMgQEAKIAkJCQlpb3YsIG9mZnNldCwgbnJfc2VncywgYmxrZGV2X2dldF9ibG9ja3MsIE5VTEwpOwogfQogCisjaWYgMAorc3RhdGljIGludCBibGtfZW5kX2FpbyhzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBieXRlc19kb25lLCBpbnQgZXJyb3IpCit7CisJc3RydWN0IGtpb2NiICppb2NiID0gYmlvLT5iaV9wcml2YXRlOworCWF0b21pY190ICpiaW9fY291bnQgPSAmaW9jYi0+a2lfYmlvX2NvdW50OworCisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpCisJCWJpb19jaGVja19wYWdlc19kaXJ0eShiaW8pOworCWVsc2UgeworCQliaW9fcmVsZWFzZV9wYWdlcyhiaW8pOworCQliaW9fcHV0KGJpbyk7CisJfQorCisJLyogaW9jYi0+a2lfbmJ5dGVzIHN0b3JlcyBlcnJvciBjb2RlIGZyb20gTExERCAqLworCWlmIChlcnJvcikKKwkJaW9jYi0+a2lfbmJ5dGVzID0gLUVJTzsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KGJpb19jb3VudCkpIHsKKwkJaWYgKChsb25nKWlvY2ItPmtpX25ieXRlcyA8IDApCisJCQlhaW9fY29tcGxldGUoaW9jYiwgaW9jYi0+a2lfbmJ5dGVzLCAwKTsKKwkJZWxzZQorCQkJYWlvX2NvbXBsZXRlKGlvY2IsIGlvY2ItPmtpX2xlZnQsIDApOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFZFQ19TSVpFCTE2CitzdHJ1Y3QgcHZlYyB7CisJdW5zaWduZWQgc2hvcnQgbnI7CisJdW5zaWduZWQgc2hvcnQgaWR4OworCXN0cnVjdCBwYWdlICpwYWdlW1ZFQ19TSVpFXTsKK307CisKKyNkZWZpbmUgUEFHRVNfU1BBTk5FRChhZGRyLCBsZW4pCVwKKwkoRElWX1JPVU5EX1VQKChhZGRyKSArIChsZW4pLCBQQUdFX1NJWkUpIC0gKGFkZHIpIC8gUEFHRV9TSVpFKTsKKworLyoKKyAqIGdldCBwYWdlIHBvaW50ZXIgZm9yIHVzZXIgYWRkciwgd2UgaW50ZXJuYWxseSBjYWNoZSBzdHJ1Y3QgcGFnZSBhcnJheSBmb3IKKyAqIChhZGRyLCBjb3VudCkgcmFuZ2UgaW4gcHZlYyB0byBhdm9pZCBmcmVxdWVudCBjYWxsIHRvIGdldF91c2VyX3BhZ2VzLiAgSWYKKyAqIGludGVybmFsIHBhZ2UgbGlzdCBpcyBleGhhdXN0ZWQsIGEgYmF0Y2ggY291bnQgb2YgdXAgdG8gVkVDX1NJWkUgaXMgdXNlZAorICogdG8gZ2V0IG5leHQgc2V0IG9mIHBhZ2Ugc3RydWN0LgorICovCitzdGF0aWMgc3RydWN0IHBhZ2UgKmJsa19nZXRfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBjb3VudCwgaW50IHJ3LAorCQkJCSBzdHJ1Y3QgcHZlYyAqcHZlYykKK3sKKwlpbnQgcmV0LCBucl9wYWdlczsKKwlpZiAocHZlYy0+aWR4ID09IHB2ZWMtPm5yKSB7CisJCW5yX3BhZ2VzID0gUEFHRVNfU1BBTk5FRChhZGRyLCBjb3VudCk7CisJCW5yX3BhZ2VzID0gbWluKG5yX3BhZ2VzLCBWRUNfU0laRSk7CisJCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsIG5yX3BhZ2VzLAorCQkJCSAgICAgcncgPT0gUkVBRCwgMCwgcHZlYy0+cGFnZSwgTlVMTCk7CisJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwkJcHZlYy0+bnIgPSByZXQ7CisJCXB2ZWMtPmlkeCA9IDA7CisJfQorCXJldHVybiBwdmVjLT5wYWdlW3B2ZWMtPmlkeCsrXTsKK30KKworLyogcmV0dXJuIGEgcGFnZSBiYWNrIHRvIHB2ZWMgYXJyYXkgKi8KK3N0YXRpYyB2b2lkIGJsa191bmdldF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcHZlYyAqcHZlYykKK3sKKwlwdmVjLT5wYWdlWy0tcHZlYy0+aWR4XSA9IHBhZ2U7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitibGtkZXZfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9tYXBwaW5nLT5ob3N0OworCXVuc2lnbmVkIGJsa2JpdHMgPSBibGtzaXplX2JpdHMoYmRldl9oYXJkc2VjdF9zaXplKElfQkRFVihpbm9kZSkpKTsKKwl1bnNpZ25lZCBibG9ja3NpemVfbWFzayA9ICgxIDw8IGJsa2JpdHMpIC0gMTsKKwl1bnNpZ25lZCBsb25nIHNlZyA9IDA7CS8qIGlvdiBzZWdtZW50IGl0ZXJhdG9yICovCisJdW5zaWduZWQgbG9uZyBudmVjOwkvKiBudW1iZXIgb2YgYmlvIHZlYyBuZWVkZWQgKi8KKwl1bnNpZ25lZCBsb25nIGN1cl9vZmY7CS8qIG9mZnNldCBpbnRvIGN1cnJlbnQgcGFnZSAqLworCXVuc2lnbmVkIGxvbmcgY3VyX2xlbjsJLyogSS9PIGxlbiBvZiBjdXJyZW50IHBhZ2UsIHVwIHRvIFBBR0VfU0laRSAqLworCisJdW5zaWduZWQgbG9uZyBhZGRyOwkvKiB1c2VyIGlvdmVjIGFkZHJlc3MgKi8KKwlzaXplX3QgY291bnQ7CQkvKiB1c2VyIGlvdmVjIGxlbiAqLworCXNpemVfdCBuYnl0ZXMgPSBpb2NiLT5raV9uYnl0ZXMgPSBpb2NiLT5raV9sZWZ0OyAvKiB0b3RhbCB4ZmVyIHNpemUgKi8KKwlsb2ZmX3Qgc2l6ZTsJCS8qIHNpemUgb2YgYmxvY2sgZGV2aWNlICovCisJc3RydWN0IGJpbyAqYmlvOworCWF0b21pY190ICpiaW9fY291bnQgPSAmaW9jYi0+a2lfYmlvX2NvdW50OworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBwdmVjIHB2ZWM7CisKKwlwdmVjLm5yID0gMDsKKwlwdmVjLmlkeCA9IDA7CisKKwlpZiAocG9zICYgYmxvY2tzaXplX21hc2spCisJCXJldHVybiAtRUlOVkFMOworCisJc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlpZiAocG9zICsgbmJ5dGVzID4gc2l6ZSkgeworCQluYnl0ZXMgPSBzaXplIC0gcG9zOworCQlpb2NiLT5raV9sZWZ0ID0gbmJ5dGVzOworCX0KKworCS8qCisJICogY2hlY2sgZmlyc3Qgbm9uLXplcm8gaW92IGFsaWdubWVudCwgdGhlIHJlbWFpbmluZworCSAqIGlvdiBhbGlnbm1lbnQgaXMgY2hlY2tlZCBpbnNpZGUgYmlvIGxvb3AgYmVsb3cuCisJICovCisJZG8geworCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGlvdltzZWddLmlvdl9iYXNlOworCQljb3VudCA9IG1pbihpb3Zbc2VnXS5pb3ZfbGVuLCBuYnl0ZXMpOworCQlpZiAoYWRkciAmIGJsb2Nrc2l6ZV9tYXNrIHx8IGNvdW50ICYgYmxvY2tzaXplX21hc2spCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IHdoaWxlICghY291bnQgJiYgKytzZWcgPCBucl9zZWdzKTsKKwlhdG9taWNfc2V0KGJpb19jb3VudCwgMSk7CisKKwl3aGlsZSAobmJ5dGVzKSB7CisJCS8qIHJvdWdobHkgZXN0aW1hdGUgbnVtYmVyIG9mIGJpbyB2ZWMgbmVlZGVkICovCisJCW52ZWMgPSAobmJ5dGVzICsgUEFHRV9TSVpFIC0gMSkgLyBQQUdFX1NJWkU7CisJCW52ZWMgPSBtYXgobnZlYywgbnJfc2VncyAtIHNlZyk7CisJCW52ZWMgPSBtaW4obnZlYywgKHVuc2lnbmVkIGxvbmcpIEJJT19NQVhfUEFHRVMpOworCisJCS8qIGJpb19hbGxvYyBzaG91bGQgbm90IGZhaWwgd2l0aCBHRlBfS0VSTkVMIGZsYWcgKi8KKwkJYmlvID0gYmlvX2FsbG9jKEdGUF9LRVJORUwsIG52ZWMpOworCQliaW8tPmJpX2JkZXYgPSBJX0JERVYoaW5vZGUpOworCQliaW8tPmJpX2VuZF9pbyA9IGJsa19lbmRfYWlvOworCQliaW8tPmJpX3ByaXZhdGUgPSBpb2NiOworCQliaW8tPmJpX3NlY3RvciA9IHBvcyA+PiBibGtiaXRzOworc2FtZV9iaW86CisJCWN1cl9vZmYgPSBhZGRyICYgflBBR0VfTUFTSzsKKwkJY3VyX2xlbiA9IFBBR0VfU0laRSAtIGN1cl9vZmY7CisJCWlmIChjb3VudCA8IGN1cl9sZW4pCisJCQljdXJfbGVuID0gY291bnQ7CisKKwkJcGFnZSA9IGJsa19nZXRfcGFnZShhZGRyLCBjb3VudCwgcncsICZwdmVjKTsKKwkJaWYgKHVubGlrZWx5KElTX0VSUihwYWdlKSkpCisJCQlnb3RvIGJhY2tvdXQ7CisKKwkJaWYgKGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIGN1cl9sZW4sIGN1cl9vZmYpKSB7CisJCQlwb3MgKz0gY3VyX2xlbjsKKwkJCWFkZHIgKz0gY3VyX2xlbjsKKwkJCWNvdW50IC09IGN1cl9sZW47CisJCQluYnl0ZXMgLT0gY3VyX2xlbjsKKworCQkJaWYgKGNvdW50KQorCQkJCWdvdG8gc2FtZV9iaW87CisJCQl3aGlsZSAoKytzZWcgPCBucl9zZWdzKSB7CisJCQkJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpb3Zbc2VnXS5pb3ZfYmFzZTsKKwkJCQljb3VudCA9IGlvdltzZWddLmlvdl9sZW47CisJCQkJaWYgKCFjb3VudCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHVubGlrZWx5KGFkZHIgJiBibG9ja3NpemVfbWFzayB8fAorCQkJCQkgICAgIGNvdW50ICYgYmxvY2tzaXplX21hc2spKSB7CisJCQkJCXBhZ2UgPSBFUlJfUFRSKC1FSU5WQUwpOworCQkJCQlnb3RvIGJhY2tvdXQ7CisJCQkJfQorCQkJCWNvdW50ID0gbWluKGNvdW50LCBuYnl0ZXMpOworCQkJCWdvdG8gc2FtZV9iaW87CisJCQl9CisJCX0gZWxzZSB7CisJCQlibGtfdW5nZXRfcGFnZShwYWdlLCAmcHZlYyk7CisJCX0KKworCQkvKiBiaW8gaXMgcmVhZHksIHN1Ym1pdCBpdCAqLworCQlpZiAocncgPT0gUkVBRCkKKwkJCWJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTsKKwkJYXRvbWljX2luYyhiaW9fY291bnQpOworCQlzdWJtaXRfYmlvKHJ3LCBiaW8pOworCX0KKworY29tcGxldGlvbjoKKwlpb2NiLT5raV9sZWZ0IC09IG5ieXRlczsKKwluYnl0ZXMgPSBpb2NiLT5raV9sZWZ0OworCWlvY2ItPmtpX3BvcyArPSBuYnl0ZXM7CisKKwlibGtfcnVuX2FkZHJlc3Nfc3BhY2UoaW5vZGUtPmlfbWFwcGluZyk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoYmlvX2NvdW50KSkKKwkJYWlvX2NvbXBsZXRlKGlvY2IsIG5ieXRlcywgMCk7CisKKwlyZXR1cm4gLUVJT0NCUVVFVUVEOworCitiYWNrb3V0OgorCS8qCisJICogYmFjayBvdXQgbmJ5dGVzIGNvdW50IGNvbnN0cnVjdGVkIHNvIGZhciBmb3IgdGhpcyBiaW8sCisJICogd2Ugd2lsbCB0aHJvdyBhd2F5IGN1cnJlbnQgYmlvLgorCSAqLworCW5ieXRlcyArPSBiaW8tPmJpX3NpemU7CisJYmlvX3JlbGVhc2VfcGFnZXMoYmlvKTsKKwliaW9fcHV0KGJpbyk7CisKKwkvKgorCSAqIGlmIG5vIGJpbyB3YXMgc3VibW1pdHRlZCwgcmV0dXJuIHRoZSBlcnJvciBjb2RlLgorCSAqIG90aGVyd2lzZSwgcHJvY2VlZCB3aXRoIHBlbmRpbmcgSS9PIGNvbXBsZXRpb24uCisJICovCisJaWYgKGF0b21pY19yZWFkKGJpb19jb3VudCkgPT0gMSkKKwkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisJZ290byBjb21wbGV0aW9uOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgYmxrZGV2X3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJcmV0dXJuIGJsb2NrX3dyaXRlX2Z1bGxfcGFnZShwYWdlLCBibGtkZXZfZ2V0X2Jsb2NrLCB3YmMpOwpAQCAtMTkwLDcgKzM4Nyw3IEBACiAKIC8qCiAgKiBwcml2YXRlIGxsc2VlazoKLSAqIGZvciBhIGJsb2NrIHNwZWNpYWwgZmlsZSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zaXplIGlzIHplcm8KKyAqIGZvciBhIGJsb2NrIHNwZWNpYWwgZmlsZSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NpemUgaXMgemVybwogICogc28gd2UgY29tcHV0ZSB0aGUgc2l6ZSBieSBoYW5kIChqdXN0IGFzIGluIGJsb2NrX3JlYWQvd3JpdGUgYWJvdmUpCiAgKi8KIHN0YXRpYyBsb2ZmX3QgYmxvY2tfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQpAQCAtMjYzLDcgKzQ2MCw3IEBACiAJewogCQltZW1zZXQoYmRldiwgMCwgc2l6ZW9mKCpiZGV2KSk7CiAJCW11dGV4X2luaXQoJmJkZXYtPmJkX211dGV4KTsKLQkJbXV0ZXhfaW5pdCgmYmRldi0+YmRfbW91bnRfbXV0ZXgpOworCQlzZW1hX2luaXQoJmJkZXYtPmJkX21vdW50X3NlbSwgMSk7CiAJCUlOSVRfTElTVF9IRUFEKCZiZGV2LT5iZF9pbm9kZXMpOwogCQlJTklUX0xJU1RfSEVBRCgmYmRldi0+YmRfbGlzdCk7CiAjaWZkZWYgQ09ORklHX1NZU0ZTCkBAIC03NjIsNyArOTU5LDcgQEAKIAlpZiAoIWJvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9tdXRleCwgQkRfTVVURVhfUEFSVElUSU9OKTsKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CiAJcmVzID0gYmRfY2xhaW0oYmRldiwgaG9sZGVyKTsKIAlpZiAocmVzID09IDApIHsKIAkJZm91bmQgPSBmaW5kX2JkX2hvbGRlcihiZGV2LCBibyk7CkBAIC03OTYsNyArOTkzLDcgQEAKIAlpZiAoIWtvYmopCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9tdXRleCwgQkRfTVVURVhfUEFSVElUSU9OKTsKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CiAJYmRfcmVsZWFzZShiZGV2KTsKIAlpZiAoKGJvID0gZGVsX2JkX2hvbGRlcihiZGV2LCBrb2JqKSkpCiAJCWZyZWVfYmRfaG9sZGVyKGJvKTsKQEAgLTg1NCwyMiArMTA1MSw2IEBACiAKIEVYUE9SVF9TWU1CT0wob3Blbl9ieV9kZXZudW0pOwogCi1zdGF0aWMgaW50Ci1ibGtkZXZfZ2V0X3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBtb2RlX3QgbW9kZSwgdW5zaWduZWQgZmxhZ3MpOwotCi1zdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX3BhcnRpdGlvbl9ieV9kZXZudW0oZGV2X3QgZGV2LCB1bnNpZ25lZCBtb2RlKQotewotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBiZGdldChkZXYpOwotCWludCBlcnIgPSAtRU5PTUVNOwotCWludCBmbGFncyA9IG1vZGUgJiBGTU9ERV9XUklURSA/IE9fUkRXUiA6IE9fUkRPTkxZOwotCWlmIChiZGV2KQotCQllcnIgPSBibGtkZXZfZ2V0X3BhcnRpdGlvbihiZGV2LCBtb2RlLCBmbGFncyk7Ci0JcmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IGJkZXY7Ci19Ci0KLUVYUE9SVF9TWU1CT0wob3Blbl9wYXJ0aXRpb25fYnlfZGV2bnVtKTsKLQotCiAvKgogICogVGhpcyByb3V0aW5lIGNoZWNrcyB3aGV0aGVyIGEgcmVtb3ZhYmxlIG1lZGlhIGhhcyBiZWVuIGNoYW5nZWQsCiAgKiBhbmQgaW52YWxpZGF0ZXMgYWxsIGJ1ZmZlci1jYWNoZS1lbnRyaWVzIGluIHRoYXQgY2FzZS4gVGhpcwpAQCAtOTE2LDY2ICsxMDk3LDExIEBACiB9CiBFWFBPUlRfU1lNQk9MKGJkX3NldF9zaXplKTsKIAotc3RhdGljIGludCBfX2Jsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IHN1YmNsYXNzKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBpbm9kZSAqYmRfaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CitzdGF0aWMgaW50IF9fYmxrZGV2X2dldChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBtb2RlX3QgbW9kZSwgdW5zaWduZWQgZmxhZ3MsCisJCQlpbnQgZm9yX3BhcnQpOworc3RhdGljIGludCBfX2Jsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IGZvcl9wYXJ0KTsKIAotCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9tdXRleCwgc3ViY2xhc3MpOwotCWxvY2tfa2VybmVsKCk7Ci0JaWYgKCEtLWJkZXYtPmJkX29wZW5lcnMpIHsKLQkJc3luY19ibG9ja2RldihiZGV2KTsKLQkJa2lsbF9iZGV2KGJkZXYpOwotCX0KLQlpZiAoYmRldi0+YmRfY29udGFpbnMgPT0gYmRldikgewotCQlpZiAoZGlzay0+Zm9wcy0+cmVsZWFzZSkKLQkJCXJldCA9IGRpc2stPmZvcHMtPnJlbGVhc2UoYmRfaW5vZGUsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9jb250YWlucy0+YmRfbXV0ZXgsCi0JCQkJICBzdWJjbGFzcyArIDEpOwotCQliZGV2LT5iZF9jb250YWlucy0+YmRfcGFydF9jb3VudC0tOwotCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9tdXRleCk7Ci0JfQotCWlmICghYmRldi0+YmRfb3BlbmVycykgewotCQlzdHJ1Y3QgbW9kdWxlICpvd25lciA9IGRpc2stPmZvcHMtPm93bmVyOwotCi0JCXB1dF9kaXNrKGRpc2spOwotCQltb2R1bGVfcHV0KG93bmVyKTsKLQotCQlpZiAoYmRldi0+YmRfY29udGFpbnMgIT0gYmRldikgewotCQkJa29iamVjdF9wdXQoJmJkZXYtPmJkX3BhcnQtPmtvYmopOwotCQkJYmRldi0+YmRfcGFydCA9IE5VTEw7Ci0JCX0KLQkJYmRldi0+YmRfZGlzayA9IE5VTEw7Ci0JCWJkZXYtPmJkX2lub2RlLT5pX2RhdGEuYmFja2luZ19kZXZfaW5mbyA9ICZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm87Ci0JCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKQotCQkJX19ibGtkZXZfcHV0KGJkZXYtPmJkX2NvbnRhaW5zLCBzdWJjbGFzcyArIDEpOwotCQliZGV2LT5iZF9jb250YWlucyA9IE5VTEw7Ci0JfQotCXVubG9ja19rZXJuZWwoKTsKLQltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKLQliZHB1dChiZGV2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQotewotCXJldHVybiBfX2Jsa2Rldl9wdXQoYmRldiwgQkRfTVVURVhfTk9STUFMKTsKLX0KLUVYUE9SVF9TWU1CT0woYmxrZGV2X3B1dCk7Ci0KLWludCBibGtkZXZfcHV0X3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQotewotCXJldHVybiBfX2Jsa2Rldl9wdXQoYmRldiwgQkRfTVVURVhfUEFSVElUSU9OKTsKLX0KLUVYUE9SVF9TWU1CT0woYmxrZGV2X3B1dF9wYXJ0aXRpb24pOwotCi1zdGF0aWMgaW50Ci1ibGtkZXZfZ2V0X3dob2xlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIG1vZGVfdCBtb2RlLCB1bnNpZ25lZCBmbGFncyk7Ci0KLXN0YXRpYyBpbnQKLWRvX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzdWJjbGFzcykKK3N0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGZvcl9wYXJ0KQogewogCXN0cnVjdCBtb2R1bGUgKm93bmVyID0gTlVMTDsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKQEAgLTk5Miw4ICsxMTE4LDcgQEAKIAl9CiAJb3duZXIgPSBkaXNrLT5mb3BzLT5vd25lcjsKIAotCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9tdXRleCwgc3ViY2xhc3MpOwotCisJbXV0ZXhfbG9ja19uZXN0ZWQoJmJkZXYtPmJkX211dGV4LCBmb3JfcGFydCk7CiAJaWYgKCFiZGV2LT5iZF9vcGVuZXJzKSB7CiAJCWJkZXYtPmJkX2Rpc2sgPSBkaXNrOwogCQliZGV2LT5iZF9jb250YWlucyA9IGJkZXY7CkBAIC0xMDIwLDI1ICsxMTQ1LDIxIEBACiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJaWYgKCF3aG9sZSkKIAkJCQlnb3RvIG91dF9maXJzdDsKLQkJCXJldCA9IGJsa2Rldl9nZXRfd2hvbGUod2hvbGUsIGZpbGUtPmZfbW9kZSwgZmlsZS0+Zl9mbGFncyk7CisJCQlCVUdfT04oZm9yX3BhcnQpOworCQkJcmV0ID0gX19ibGtkZXZfZ2V0KHdob2xlLCBmaWxlLT5mX21vZGUsIGZpbGUtPmZfZmxhZ3MsIDEpOwogCQkJaWYgKHJldCkKIAkJCQlnb3RvIG91dF9maXJzdDsKIAkJCWJkZXYtPmJkX2NvbnRhaW5zID0gd2hvbGU7Ci0JCQltdXRleF9sb2NrX25lc3RlZCgmd2hvbGUtPmJkX211dGV4LCBCRF9NVVRFWF9XSE9MRSk7Ci0JCQl3aG9sZS0+YmRfcGFydF9jb3VudCsrOwogCQkJcCA9IGRpc2stPnBhcnRbcGFydCAtIDFdOwogCQkJYmRldi0+YmRfaW5vZGUtPmlfZGF0YS5iYWNraW5nX2Rldl9pbmZvID0KIAkJCSAgIHdob2xlLT5iZF9pbm9kZS0+aV9kYXRhLmJhY2tpbmdfZGV2X2luZm87CiAJCQlpZiAoIShkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX1VQKSB8fCAhcCB8fCAhcC0+bnJfc2VjdHMpIHsKLQkJCQl3aG9sZS0+YmRfcGFydF9jb3VudC0tOwotCQkJCW11dGV4X3VubG9jaygmd2hvbGUtPmJkX211dGV4KTsKIAkJCQlyZXQgPSAtRU5YSU87CiAJCQkJZ290byBvdXRfZmlyc3Q7CiAJCQl9CiAJCQlrb2JqZWN0X2dldCgmcC0+a29iaik7CiAJCQliZGV2LT5iZF9wYXJ0ID0gcDsKIAkJCWJkX3NldF9zaXplKGJkZXYsIChsb2ZmX3QpIHAtPm5yX3NlY3RzIDw8IDkpOwotCQkJbXV0ZXhfdW5sb2NrKCZ3aG9sZS0+YmRfbXV0ZXgpOwogCQl9CiAJfSBlbHNlIHsKIAkJcHV0X2Rpc2soZGlzayk7CkBAIC0xMDUxLDE0ICsxMTcyLDExIEBACiAJCQl9CiAJCQlpZiAoYmRldi0+YmRfaW52YWxpZGF0ZWQpCiAJCQkJcmVzY2FuX3BhcnRpdGlvbnMoYmRldi0+YmRfZGlzaywgYmRldik7Ci0JCX0gZWxzZSB7Ci0JCQltdXRleF9sb2NrX25lc3RlZCgmYmRldi0+YmRfY29udGFpbnMtPmJkX211dGV4LAotCQkJCQkgIEJEX01VVEVYX1dIT0xFKTsKLQkJCWJkZXYtPmJkX2NvbnRhaW5zLT5iZF9wYXJ0X2NvdW50Kys7Ci0JCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9tdXRleCk7CiAJCX0KIAl9CiAJYmRldi0+YmRfb3BlbmVycysrOworCWlmIChmb3JfcGFydCkKKwkJYmRldi0+YmRfcGFydF9jb3VudCsrOwogCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKQEAgLTEwNjcsNyArMTE4NSw3IEBACiAJYmRldi0+YmRfZGlzayA9IE5VTEw7CiAJYmRldi0+YmRfaW5vZGUtPmlfZGF0YS5iYWNraW5nX2Rldl9pbmZvID0gJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbzsKIAlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykKLQkJX19ibGtkZXZfcHV0KGJkZXYtPmJkX2NvbnRhaW5zLCBCRF9NVVRFWF9XSE9MRSk7CisJCV9fYmxrZGV2X3B1dChiZGV2LT5iZF9jb250YWlucywgMSk7CiAJYmRldi0+YmRfY29udGFpbnMgPSBOVUxMOwogCXB1dF9kaXNrKGRpc2spOwogCW1vZHVsZV9wdXQob3duZXIpOwpAQCAtMTA3OSw2NCArMTE5NywzMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgX19ibGtkZXZfZ2V0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIG1vZGVfdCBtb2RlLCB1bnNpZ25lZCBmbGFncywKKwkJCWludCBmb3JfcGFydCkKK3sKKwkvKgorCSAqIFRoaXMgY3JvY2tsb2FkIGlzIGR1ZSB0byBiYWQgY2hvaWNlIG9mIC0+b3BlbigpIHR5cGUuCisJICogSXQgd2lsbCBnbyBhd2F5LgorCSAqIEZvciBub3csIGJsb2NrIGRldmljZSAtPm9wZW4oKSByb3V0aW5lIG11c3QgX25vdF8KKwkgKiBleGFtaW5lIGFueXRoaW5nIGluICdpbm9kZScgYXJndW1lbnQgZXhjZXB0IC0+aV9yZGV2LgorCSAqLworCXN0cnVjdCBmaWxlIGZha2VfZmlsZSA9IHt9OworCXN0cnVjdCBkZW50cnkgZmFrZV9kZW50cnkgPSB7fTsKKwlmYWtlX2ZpbGUuZl9tb2RlID0gbW9kZTsKKwlmYWtlX2ZpbGUuZl9mbGFncyA9IGZsYWdzOworCWZha2VfZmlsZS5mX3BhdGguZGVudHJ5ID0gJmZha2VfZGVudHJ5OworCWZha2VfZGVudHJ5LmRfaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKKworCXJldHVybiBkb19vcGVuKGJkZXYsICZmYWtlX2ZpbGUsIGZvcl9wYXJ0KTsKK30KKwogaW50IGJsa2Rldl9nZXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGZsYWdzKQogewotCS8qCi0JICogVGhpcyBjcm9ja2xvYWQgaXMgZHVlIHRvIGJhZCBjaG9pY2Ugb2YgLT5vcGVuKCkgdHlwZS4KLQkgKiBJdCB3aWxsIGdvIGF3YXkuCi0JICogRm9yIG5vdywgYmxvY2sgZGV2aWNlIC0+b3BlbigpIHJvdXRpbmUgbXVzdCBfbm90XwotCSAqIGV4YW1pbmUgYW55dGhpbmcgaW4gJ2lub2RlJyBhcmd1bWVudCBleGNlcHQgLT5pX3JkZXYuCi0JICovCi0Jc3RydWN0IGZpbGUgZmFrZV9maWxlID0ge307Ci0Jc3RydWN0IGRlbnRyeSBmYWtlX2RlbnRyeSA9IHt9OwotCWZha2VfZmlsZS5mX21vZGUgPSBtb2RlOwotCWZha2VfZmlsZS5mX2ZsYWdzID0gZmxhZ3M7Ci0JZmFrZV9maWxlLmZfZGVudHJ5ID0gJmZha2VfZGVudHJ5OwotCWZha2VfZGVudHJ5LmRfaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQotCXJldHVybiBkb19vcGVuKGJkZXYsICZmYWtlX2ZpbGUsIEJEX01VVEVYX05PUk1BTCk7CisJcmV0dXJuIF9fYmxrZGV2X2dldChiZGV2LCBtb2RlLCBmbGFncywgMCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woYmxrZGV2X2dldCk7CiAKLXN0YXRpYyBpbnQKLWJsa2Rldl9nZXRfd2hvbGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGZsYWdzKQotewotCS8qCi0JICogVGhpcyBjcm9ja2xvYWQgaXMgZHVlIHRvIGJhZCBjaG9pY2Ugb2YgLT5vcGVuKCkgdHlwZS4KLQkgKiBJdCB3aWxsIGdvIGF3YXkuCi0JICogRm9yIG5vdywgYmxvY2sgZGV2aWNlIC0+b3BlbigpIHJvdXRpbmUgbXVzdCBfbm90XwotCSAqIGV4YW1pbmUgYW55dGhpbmcgaW4gJ2lub2RlJyBhcmd1bWVudCBleGNlcHQgLT5pX3JkZXYuCi0JICovCi0Jc3RydWN0IGZpbGUgZmFrZV9maWxlID0ge307Ci0Jc3RydWN0IGRlbnRyeSBmYWtlX2RlbnRyeSA9IHt9OwotCWZha2VfZmlsZS5mX21vZGUgPSBtb2RlOwotCWZha2VfZmlsZS5mX2ZsYWdzID0gZmxhZ3M7Ci0JZmFrZV9maWxlLmZfZGVudHJ5ID0gJmZha2VfZGVudHJ5OwotCWZha2VfZGVudHJ5LmRfaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQotCXJldHVybiBkb19vcGVuKGJkZXYsICZmYWtlX2ZpbGUsIEJEX01VVEVYX1dIT0xFKTsKLX0KLQotc3RhdGljIGludAotYmxrZGV2X2dldF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbW9kZV90IG1vZGUsIHVuc2lnbmVkIGZsYWdzKQotewotCS8qCi0JICogVGhpcyBjcm9ja2xvYWQgaXMgZHVlIHRvIGJhZCBjaG9pY2Ugb2YgLT5vcGVuKCkgdHlwZS4KLQkgKiBJdCB3aWxsIGdvIGF3YXkuCi0JICogRm9yIG5vdywgYmxvY2sgZGV2aWNlIC0+b3BlbigpIHJvdXRpbmUgbXVzdCBfbm90XwotCSAqIGV4YW1pbmUgYW55dGhpbmcgaW4gJ2lub2RlJyBhcmd1bWVudCBleGNlcHQgLT5pX3JkZXYuCi0JICovCi0Jc3RydWN0IGZpbGUgZmFrZV9maWxlID0ge307Ci0Jc3RydWN0IGRlbnRyeSBmYWtlX2RlbnRyeSA9IHt9OwotCWZha2VfZmlsZS5mX21vZGUgPSBtb2RlOwotCWZha2VfZmlsZS5mX2ZsYWdzID0gZmxhZ3M7Ci0JZmFrZV9maWxlLmZfZGVudHJ5ID0gJmZha2VfZGVudHJ5OwotCWZha2VfZGVudHJ5LmRfaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQotCXJldHVybiBkb19vcGVuKGJkZXYsICZmYWtlX2ZpbGUsIEJEX01VVEVYX1BBUlRJVElPTik7Ci19Ci0KIHN0YXRpYyBpbnQgYmxrZGV2X29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwpAQCAtMTE1NCw3ICsxMjM5LDcgQEAKIAlpZiAoYmRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJlcyA9IGRvX29wZW4oYmRldiwgZmlscCwgQkRfTVVURVhfTk9STUFMKTsKKwlyZXMgPSBkb19vcGVuKGJkZXYsIGZpbHAsIDApOwogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKQEAgLTExNjgsNiArMTI1Myw1NiBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyBpbnQgX19ibGtkZXZfcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBmb3JfcGFydCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaW5vZGUgKmJkX2lub2RlID0gYmRldi0+YmRfaW5vZGU7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOworCXN0cnVjdCBibG9ja19kZXZpY2UgKnZpY3RpbSA9IE5VTEw7CisKKwltdXRleF9sb2NrX25lc3RlZCgmYmRldi0+YmRfbXV0ZXgsIGZvcl9wYXJ0KTsKKwlsb2NrX2tlcm5lbCgpOworCWlmIChmb3JfcGFydCkKKwkJYmRldi0+YmRfcGFydF9jb3VudC0tOworCisJaWYgKCEtLWJkZXYtPmJkX29wZW5lcnMpIHsKKwkJc3luY19ibG9ja2RldihiZGV2KTsKKwkJa2lsbF9iZGV2KGJkZXYpOworCX0KKwlpZiAoYmRldi0+YmRfY29udGFpbnMgPT0gYmRldikgeworCQlpZiAoZGlzay0+Zm9wcy0+cmVsZWFzZSkKKwkJCXJldCA9IGRpc2stPmZvcHMtPnJlbGVhc2UoYmRfaW5vZGUsIE5VTEwpOworCX0KKwlpZiAoIWJkZXYtPmJkX29wZW5lcnMpIHsKKwkJc3RydWN0IG1vZHVsZSAqb3duZXIgPSBkaXNrLT5mb3BzLT5vd25lcjsKKworCQlwdXRfZGlzayhkaXNrKTsKKwkJbW9kdWxlX3B1dChvd25lcik7CisKKwkJaWYgKGJkZXYtPmJkX2NvbnRhaW5zICE9IGJkZXYpIHsKKwkJCWtvYmplY3RfcHV0KCZiZGV2LT5iZF9wYXJ0LT5rb2JqKTsKKwkJCWJkZXYtPmJkX3BhcnQgPSBOVUxMOworCQl9CisJCWJkZXYtPmJkX2Rpc2sgPSBOVUxMOworCQliZGV2LT5iZF9pbm9kZS0+aV9kYXRhLmJhY2tpbmdfZGV2X2luZm8gPSAmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvOworCQlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykKKwkJCXZpY3RpbSA9IGJkZXYtPmJkX2NvbnRhaW5zOworCQliZGV2LT5iZF9jb250YWlucyA9IE5VTEw7CisJfQorCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKKwliZHB1dChiZGV2KTsKKwlpZiAodmljdGltKQorCQlfX2Jsa2Rldl9wdXQodmljdGltLCAxKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCXJldHVybiBfX2Jsa2Rldl9wdXQoYmRldiwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKGJsa2Rldl9wdXQpOworCiBzdGF0aWMgaW50IGJsa2Rldl9jbG9zZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBJX0JERVYoZmlscC0+Zl9tYXBwaW5nLT5ob3N0KTsKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggNTE3ODYwZi4uMWFkNjc0ZiAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CkBAIC0xNzksNyArMTgwLDcgQEAKICAqIGZyZWV6ZV9iZGV2ICAtLSAgbG9jayBhIGZpbGVzeXN0ZW0gYW5kIGZvcmNlIGl0IGludG8gYSBjb25zaXN0ZW50IHN0YXRlCiAgKiBAYmRldjoJYmxvY2tkZXZpY2UgdG8gbG9jawogICoKLSAqIFRoaXMgdGFrZXMgdGhlIGJsb2NrIGRldmljZSBiZF9tb3VudF9tdXRleCB0byBtYWtlIHN1cmUgbm8gbmV3IG1vdW50cworICogVGhpcyB0YWtlcyB0aGUgYmxvY2sgZGV2aWNlIGJkX21vdW50X3NlbSB0byBtYWtlIHN1cmUgbm8gbmV3IG1vdW50cwogICogaGFwcGVuIG9uIGJkZXYgdW50aWwgdGhhd19iZGV2KCkgaXMgY2FsbGVkLgogICogSWYgYSBzdXBlcmJsb2NrIGlzIGZvdW5kIG9uIHRoaXMgZGV2aWNlLCB3ZSB0YWtlIHRoZSBzX3Vtb3VudCBzZW1hcGhvcmUKICAqIG9uIGl0IHRvIG1ha2Ugc3VyZSBub2JvZHkgdW5tb3VudHMgdW50aWwgdGhlIHNuYXBzaG90IGNyZWF0aW9uIGlzIGRvbmUuCkBAIC0xODgsNyArMTg5LDcgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCi0JbXV0ZXhfbG9jaygmYmRldi0+YmRfbW91bnRfbXV0ZXgpOworCWRvd24oJmJkZXYtPmJkX21vdW50X3NlbSk7CiAJc2IgPSBnZXRfc3VwZXIoYmRldik7CiAJaWYgKHNiICYmICEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9XUklURTsKQEAgLTIzMCw3ICsyMzEsNyBAQAogCQlkcm9wX3N1cGVyKHNiKTsKIAl9CiAKLQltdXRleF91bmxvY2soJmJkZXYtPmJkX21vdW50X211dGV4KTsKKwl1cCgmYmRldi0+YmRfbW91bnRfc2VtKTsKIH0KIEVYUE9SVF9TWU1CT0wodGhhd19iZGV2KTsKIApAQCAtNzI0LDIwICs3MjUsMjEgQEAKIAl9CiAJc3Bpbl91bmxvY2soJm1hcHBpbmctPnByaXZhdGVfbG9jayk7CiAKLQlpZiAoIVRlc3RTZXRQYWdlRGlydHkocGFnZSkpIHsKLQkJd3JpdGVfbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JCWlmIChwYWdlLT5tYXBwaW5nKSB7CS8qIFJhY2Ugd2l0aCB0cnVuY2F0ZT8gKi8KLQkJCWlmIChtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKQotCQkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX0RJUlRZKTsKLQkJCXJhZGl4X3RyZWVfdGFnX3NldCgmbWFwcGluZy0+cGFnZV90cmVlLAotCQkJCQkJcGFnZV9pbmRleChwYWdlKSwKLQkJCQkJCVBBR0VDQUNIRV9UQUdfRElSVFkpOworCWlmIChUZXN0U2V0UGFnZURpcnR5KHBhZ2UpKQorCQlyZXR1cm4gMDsKKworCXdyaXRlX2xvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOworCWlmIChwYWdlLT5tYXBwaW5nKSB7CS8qIFJhY2Ugd2l0aCB0cnVuY2F0ZT8gKi8KKwkJaWYgKG1hcHBpbmdfY2FwX2FjY291bnRfZGlydHkobWFwcGluZykpIHsKKwkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX0RJUlRZKTsKKwkJCXRhc2tfaW9fYWNjb3VudF93cml0ZShQQUdFX0NBQ0hFX1NJWkUpOwogCQl9Ci0JCXdyaXRlX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JCV9fbWFya19pbm9kZV9kaXJ0eShtYXBwaW5nLT5ob3N0LCBJX0RJUlRZX1BBR0VTKTsKLQkJcmV0dXJuIDE7CisJCXJhZGl4X3RyZWVfdGFnX3NldCgmbWFwcGluZy0+cGFnZV90cmVlLAorCQkJCXBhZ2VfaW5kZXgocGFnZSksIFBBR0VDQUNIRV9UQUdfRElSVFkpOwogCX0KLQlyZXR1cm4gMDsKKwl3cml0ZV91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOworCV9fbWFya19pbm9kZV9kaXJ0eShtYXBwaW5nLT5ob3N0LCBJX0RJUlRZX1BBR0VTKTsKKwlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0woX19zZXRfcGFnZV9kaXJ0eV9idWZmZXJzKTsKIApAQCAtMjg0MiwxOCArMjg0NCwyNCBAQAogCiAJc3Bpbl9sb2NrKCZtYXBwaW5nLT5wcml2YXRlX2xvY2spOwogCXJldCA9IGRyb3BfYnVmZmVycyhwYWdlLCAmYnVmZmVyc190b19mcmVlKTsKKworCS8qCisJICogSWYgdGhlIGZpbGVzeXN0ZW0gd3JpdGVzIGl0cyBidWZmZXJzIGJ5IGhhbmQgKGVnIGV4dDMpCisJICogdGhlbiB3ZSBjYW4gaGF2ZSBjbGVhbiBidWZmZXJzIGFnYWluc3QgYSBkaXJ0eSBwYWdlLiAgV2UKKwkgKiBjbGVhbiB0aGUgcGFnZSBoZXJlOyBvdGhlcndpc2UgdGhlIFZNIHdpbGwgbmV2ZXIgbm90aWNlCisJICogdGhhdCB0aGUgZmlsZXN5c3RlbSBkaWQgYW55IElPIGF0IGFsbC4KKwkgKgorCSAqIEFsc28sIGR1cmluZyB0cnVuY2F0ZSwgZGlzY2FyZF9idWZmZXIgd2lsbCBoYXZlIG1hcmtlZCBhbGwKKwkgKiB0aGUgcGFnZSdzIGJ1ZmZlcnMgY2xlYW4uICBXZSBkaXNjb3ZlciB0aGF0IGhlcmUgYW5kIGNsZWFuCisJICogdGhlIHBhZ2UgYWxzby4KKwkgKgorCSAqIHByaXZhdGVfbG9jayBtdXN0IGJlIGhlbGQgb3ZlciB0aGlzIGVudGlyZSBvcGVyYXRpb24gaW4gb3JkZXIKKwkgKiB0byBzeW5jaHJvbmlzZSBhZ2FpbnN0IF9fc2V0X3BhZ2VfZGlydHlfYnVmZmVycyBhbmQgcHJldmVudCB0aGUKKwkgKiBkaXJ0eSBiaXQgZnJvbSBiZWluZyBsb3N0LgorCSAqLworCWlmIChyZXQpCisJCWNhbmNlbF9kaXJ0eV9wYWdlKHBhZ2UsIFBBR0VfQ0FDSEVfU0laRSk7CiAJc3Bpbl91bmxvY2soJm1hcHBpbmctPnByaXZhdGVfbG9jayk7Ci0JaWYgKHJldCkgewotCQkvKgotCQkgKiBJZiB0aGUgZmlsZXN5c3RlbSB3cml0ZXMgaXRzIGJ1ZmZlcnMgYnkgaGFuZCAoZWcgZXh0MykKLQkJICogdGhlbiB3ZSBjYW4gaGF2ZSBjbGVhbiBidWZmZXJzIGFnYWluc3QgYSBkaXJ0eSBwYWdlLiAgV2UKLQkJICogY2xlYW4gdGhlIHBhZ2UgaGVyZTsgb3RoZXJ3aXNlIGxhdGVyIHJlYXR0YWNobWVudCBvZiBidWZmZXJzCi0JCSAqIGNvdWxkIGVuY291bnRlciBhIG5vbi11cHRvZGF0ZSBwYWdlLCB3aGljaCBpcyB1bnJlc29sdmFibGUuCi0JCSAqIFRoaXMgb25seSBhcHBsaWVzIGluIHRoZSByYXJlIGNhc2Ugd2hlcmUgdHJ5X3RvX2ZyZWVfYnVmZmVycwotCQkgKiBzdWNjZWVkcyBidXQgdGhlIHBhZ2UgaXMgbm90IGZyZWVkLgotCQkgKi8KLQkJY2xlYXJfcGFnZV9kaXJ0eShwYWdlKTsKLQl9CiBvdXQ6CiAJaWYgKGJ1ZmZlcnNfdG9fZnJlZSkgewogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gYnVmZmVyc190b19mcmVlOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9DSEFOR0VTIGIvZnMvY2lmcy9DSEFOR0VTCmluZGV4IDBiM2MzN2UuLmQwNGQyZjcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvQ0hBTkdFUworKysgYi9mcy9jaWZzL0NIQU5HRVMKQEAgLTEsMyArMSw3IEBACitWZXJzaW9uIDEuNDcKKy0tLS0tLS0tLS0tLQorRml4IG9vcHMgaW4gbGlzdF9kZWwgZHVyaW5nIG1vdW50IGNhdXNlZCBieSB1bmFsaWduZWQgc3RyaW5nLgorCiBWZXJzaW9uIDEuNDYKIC0tLS0tLS0tLS0tLQogU3VwcG9ydCBkZWVwIHRyZWUgbW91bnRzLiAgQmV0dGVyIHN1cHBvcnQgT1MvMiwgV2luOXggKERPUykgdGltZSBzdGFtcHMuCkBAIC01LDcgKzksOCBAQAogRUlOVkFMIG9uIHJlYWRkaXIgd2hlbiBmaWxsZGlyIGZhaWxzIGR1ZSB0byBvdmVyd3JpdHRlbiBibG9ja3NpemUKIChmaXhlcyBGQyBwcm9ibGVtKS4gIFJldHVybiBlcnJvciBpbiByZW5hbWUgMm5kIGF0dGVtcHQgcmV0cnkgKGllIHJlcG9ydAogaWYgcmVuYW1lIGJ5IGhhbmRsZSBhbHNvIGZhaWxzLCBhZnRlciByZW5hbWUgYnkgcGF0aCBmYWlscywgd2Ugd2VyZQotbm90IHJlcG9ydGluZyB3aGV0aGVyIHRoZSByZXRyeSB3b3JrZWQgb3Igbm90KS4KK25vdCByZXBvcnRpbmcgd2hldGhlciB0aGUgcmV0cnkgd29ya2VkIG9yIG5vdCkuIEZpeCBOVExNdjIgdG8KK3dvcmsgdG8gV2luZG93cyBzZXJ2ZXJzIChtb3VudCB3aXRoIG9wdGlvbiAic2VjPW50bG12MiIpLgogCiBWZXJzaW9uIDEuNDUKIC0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwppbmRleCA5NmFiZWI3Li42MDE3YzQ2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGVidWcuYworKysgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwpAQCAtMTQzLDggKzE0Myw4IEBACiAJCXNlcyA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY2lmc1Nlc0luZm8sIGNpZnNTZXNzaW9uTGlzdCk7CiAJCWlmKChzZXMtPnNlcnZlckRvbWFpbiA9PSBOVUxMKSB8fCAoc2VzLT5zZXJ2ZXJPUyA9PSBOVUxMKSB8fAogCQkgICAoc2VzLT5zZXJ2ZXJOT1MgPT0gTlVMTCkpIHsKLQkJCWJ1ZiArPSBzcHJpbnRmKCJcbmVudHJ5IGZvciAlcyBub3QgZnVsbHkgZGlzcGxheWVkXG5cdCIsCi0JCQkJCXNlcy0+c2VydmVyTmFtZSk7CisJCQlidWYgKz0gc3ByaW50ZihidWYsICJcbmVudHJ5IGZvciAlcyBub3QgZnVsbHkgIgorCQkJCQkiZGlzcGxheWVkXG5cdCIsIHNlcy0+c2VydmVyTmFtZSk7CiAJCQkKIAkJfSBlbHNlIHsKIAkJCWxlbmd0aCA9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKaW5kZXggNGJjMjUwYi4uZmRlZGE1MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwpAQCAtMzcyLDggKzM3MiwxMCBAQAogCWJ1Zi0+dGltZSA9IGNwdV90b19sZTY0KGNpZnNfVW5peFRpbWVUb05UKENVUlJFTlRfVElNRSkpOwogCWdldF9yYW5kb21fYnl0ZXMoJmJ1Zi0+Y2xpZW50X2NoYWwsIHNpemVvZihidWYtPmNsaWVudF9jaGFsKSk7CiAJYnVmLT5yZXNlcnZlZDIgPSAwOwotCWJ1Zi0+bmFtZXNbMF0udHlwZSA9IDA7CisJYnVmLT5uYW1lc1swXS50eXBlID0gY3B1X3RvX2xlMTYoTlRMTVNTUF9ET01BSU5fVFlQRSk7CiAJYnVmLT5uYW1lc1swXS5sZW5ndGggPSAwOworCWJ1Zi0+bmFtZXNbMV0udHlwZSA9IDA7CisJYnVmLT5uYW1lc1sxXS5sZW5ndGggPSAwOwogCiAJLyogY2FsY3VsYXRlIGJ1Zi0+bnRsbXYyX2hhc2ggKi8KIAlyYyA9IGNhbGNfbnRsbXYyX2hhc2goc2VzLCBubHNfY3ApOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggNzFiYzg3YS4uMTBjOTAyOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC00OTgsNyArNDk4LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGNpZnNfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXNzaXplX3Qgd3JpdHRlbjsKIAogCXdyaXR0ZW4gPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKQEAgLTUxMSw3ICs1MTEsNyBAQAogewogCS8qIG9yaWdpbiA9PSBTRUVLX0VORCA9PiB3ZSBtdXN0IHJldmFsaWRhdGUgdGhlIGNhY2hlZCBmaWxlIGxlbmd0aCAqLwogCWlmIChvcmlnaW4gPT0gU0VFS19FTkQpIHsKLQkJaW50IHJldHZhbCA9IGNpZnNfcmV2YWxpZGF0ZShmaWxlLT5mX2RlbnRyeSk7CisJCWludCByZXR2YWwgPSBjaWZzX3JldmFsaWRhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJcmV0dXJuIChsb2ZmX3QpcmV0dmFsOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IGEyNDNmNzc5Li44YWE2NmRjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5oCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmgKQEAgLTEwMCw1ICsxMDAsNSBAQAogZXh0ZXJuIHNzaXplX3QJY2lmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7CiBleHRlcm4gaW50IGNpZnNfaW9jdGwgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGVwLAogCQkgICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNDYiCisjZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjQ3IgogI2VuZGlmCQkJCS8qIF9DSUZTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcGR1LmggYi9mcy9jaWZzL2NpZnNwZHUuaAppbmRleCA2ZGY5ZGFkLi4wNjhlZjUxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwZHUuaAorKysgYi9mcy9jaWZzL2NpZnNwZHUuaApAQCAtNTgwLDYgKzU4MCwxMiBAQAogCiAvKiBmb3JtYXQgb2YgTkxUTXYyIFJlc3BvbnNlIGllICJjYXNlIHNlbnNpdGl2ZSBwYXNzd29yZCIgaGFzaCB3aGVuIE5UTE12MiAqLwogCisjZGVmaW5lIE5UTE1TU1BfU0VSVkVSX1RZUEUJMQorI2RlZmluZSBOVExNU1NQX0RPTUFJTl9UWVBFCTIKKyNkZWZpbmUgTlRMTVNTUF9GUV9ET01BSU5fVFlQRQkzCisjZGVmaW5lIE5UTE1TU1BfRE5TX0RPTUFJTl9UWVBFCTQKKyNkZWZpbmUgTlRMTVNTUF9ETlNfUEFSRU5UX1RZUEUJNQorCiBzdHJ1Y3QgbnRsbXNzcDJfbmFtZSB7CiAJX19sZTE2IHR5cGU7CiAJX19sZTE2IGxlbmd0aDsKQEAgLTU5Myw3ICs1OTksNyBAQAogCV9fbGU2NCAgdGltZTsKIAlfX3U2NCAgY2xpZW50X2NoYWw7IC8qIHJhbmRvbSAqLwogCV9fdTMyICByZXNlcnZlZDI7Ci0Jc3RydWN0IG50bG1zc3AyX25hbWUgbmFtZXNbMV07CisJc3RydWN0IG50bG1zc3AyX25hbWUgbmFtZXNbMl07CiAJLyogYXJyYXkgb2YgbmFtZSBlbnRyaWVzIGNvdWxkIGZvbGxvdyBlbmRpbmcgaW4gbWluaW11bSA0IGJ5dGUgc3RydWN0ICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDA5ODc5MGUuLjQ3MmUzM2UgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC00ODc2LDcgKzQ4NzYsNyBAQAogCX0gZWxzZSB7CiAJCS8qIEFkZCBmaWxlIHRvIG91dHN0YW5kaW5nIHJlcXVlc3RzICovCiAJCS8qIEJCIGNoYW5nZSB0byBrbWVtIGNhY2hlIGFsbG9jICovCQotCQlkbm90aWZ5X3JlcSA9IChzdHJ1Y3QgZGlyX25vdGlmeV9yZXEgKikga21hbGxvYygKKwkJZG5vdGlmeV9yZXEgPSBrbWFsbG9jKAogCQkJCQkJc2l6ZW9mKHN0cnVjdCBkaXJfbm90aWZ5X3JlcSksCiAJCQkJCQkgR0ZQX0tFUk5FTCk7CiAJCWlmKGRub3RpZnlfcmVxKSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZjbnRsLmMgYi9mcy9jaWZzL2ZjbnRsLmMKaW5kZXggZDkxYTNkNC4uZGExMmI0OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9mY250bC5jCisrKyBiL2ZzL2NpZnMvZmNudGwuYwpAQCAtODMsMTAgKzgzLDEwIEBACiAJCXJldHVybiAwOwogCiAJeGlkID0gR2V0WGlkKCk7Ci0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9kZW50cnktPmRfc2IpOworCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9kZW50cnkpOworCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkgewogCQlyYyA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IDI0MzZlZDguLjhhNDliMmUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSAiY2lmc2ZzLmgiCkBAIC0xMjIsMzQgKzEyMywzNCBAQAogCS8qIGlmIG5vdCBvcGxvY2tlZCwgaW52YWxpZGF0ZSBpbm9kZSBwYWdlcyBpZiBtdGltZSBvciBmaWxlCiAJICAgc2l6ZSBjaGFuZ2VkICovCiAJdGVtcCA9IGNpZnNfTlR0aW1lVG9Vbml4KGxlNjRfdG9fY3B1KGJ1Zi0+TGFzdFdyaXRlVGltZSkpOwotCWlmICh0aW1lc3BlY19lcXVhbCgmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXRpbWUsICZ0ZW1wKSAmJiAKLQkJCSAgIChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zaXplID09IAorCWlmICh0aW1lc3BlY19lcXVhbCgmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdGltZSwgJnRlbXApICYmCisJCQkgICAoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplID09CiAJCQkgICAgKGxvZmZfdClsZTY0X3RvX2NwdShidWYtPkVuZE9mRmlsZSkpKSB7CiAJCWNGWUkoMSwgKCJpbm9kZSB1bmNoYW5nZWQgb24gc2VydmVyIikpOwogCX0gZWxzZSB7Ci0JCWlmIChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nKSB7CisJCWlmIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmcpIHsKIAkJLyogQkIgbm8gbmVlZCB0byBsb2NrIGlub2RlIHVudGlsIGFmdGVyIGludmFsaWRhdGUKIAkJICAgc2luY2UgbmFtZWkgY29kZSBzaG91bGQgYWxyZWFkeSBoYXZlIGl0IGxvY2tlZD8gKi8KLQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZyk7CisJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZyk7CiAJCX0KIAkJY0ZZSSgxLCAoImludmFsaWRhdGluZyByZW1vdGUgaW5vZGUgc2luY2Ugb3BlbiBkZXRlY3RlZCBpdCAiCiAJCQkgImNoYW5nZWQiKSk7Ci0JCWludmFsaWRhdGVfcmVtb3RlX2lub2RlKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJfQogCiBjbGllbnRfY2FuX2NhY2hlOgogCWlmIChwVGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkKLQkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvX3VuaXgoJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLAorCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm9fdW5peCgmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKIAkJCWZ1bGxfcGF0aCwgaW5vZGUtPmlfc2IsIHhpZCk7CiAJZWxzZQotCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLAorCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm8oJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsCiAJCQlmdWxsX3BhdGgsIGJ1ZiwgaW5vZGUtPmlfc2IsIHhpZCk7CiAKIAlpZiAoKCpvcGxvY2sgJiAweEYpID09IE9QTE9DS19FWENMVVNJVkUpIHsKIAkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPSBUUlVFOwogCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSBUUlVFOwogCQljRllJKDEsICgiRXhjbHVzaXZlIE9wbG9jayBncmFudGVkIG9uIGlub2RlICVwIiwKLQkJCSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkpOworCQkJIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKIAl9IGVsc2UgaWYgKCgqb3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfUkVBRCkKIAkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gVFJVRTsKIApAQCAtMTc4LDcgKzE3OSw3IEBACiAKIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fQ1JFQVQpIHsKIAkJLyogc2VhcmNoIGlub2RlIGZvciB0aGlzIGZpbGUgYW5kIGZpbGwgaW4gZmlsZS0+cHJpdmF0ZV9kYXRhICovCi0JCXBDaWZzSW5vZGUgPSBDSUZTX0koZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCQlwQ2lmc0lub2RlID0gQ0lGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCQlyZWFkX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoKHRtcCwgJnBDaWZzSW5vZGUtPm9wZW5GaWxlTGlzdCkgewogCQkJcENpZnNGaWxlID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzRmlsZUluZm8sCkBAIC0yMDYsNyArMjA3LDcgQEAKIAkJfQogCX0KIAotCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9kZW50cnkpOworCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yOTEsNyArMjkyLDcgQEAKIAl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJnBUY29uLT5vcGVuRmlsZUxpc3QpOwogCi0JcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAocENpZnNJbm9kZSkgewogCQlyYyA9IGNpZnNfb3Blbl9pbm9kZV9oZWxwZXIoaW5vZGUsIGZpbGUsIHBDaWZzSW5vZGUsCiAJCQkJCSAgICBwQ2lmc0ZpbGUsIHBUY29uLApAQCAtMzY2LDcgKzM2Nyw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChmaWxlLT5mX2RlbnRyeSA9PSBOVUxMKSB7CisJaWYgKGZpbGUtPmZfcGF0aC5kZW50cnkgPT0gTlVMTCkgewogCQl1cCgmcENpZnNGaWxlLT5maF9zZW0pOwogCQljRllJKDEsICgiZmFpbGVkIGZpbGUgcmVvcGVuLCBubyB2YWxpZCBuYW1lIGlmIGRlbnRyeSBmcmVlZCIpKTsKIAkJRnJlZVhpZCh4aWQpOwpAQCAtMzc4LDcgKzM3OSw3IEBACiAgICB0aG9zZSB0aGF0IGFscmVhZHkgaGF2ZSB0aGUgcmVuYW1lIHNlbSBjYW4gZW5kIHVwIGNhdXNpbmcgd3JpdGVwYWdlCiAgICB0byBnZXQgY2FsbGVkIGFuZCBpZiB0aGUgc2VydmVyIHdhcyBkb3duIHRoYXQgbWVhbnMgd2UgZW5kIHVwIGhlcmUsCiAgICBhbmQgd2UgY2FuIG5ldmVyIHRlbGwgaWYgdGhlIGNhbGxlciBhbHJlYWR5IGhhcyB0aGUgcmVuYW1lX3NlbSAqLwotCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9kZW50cnkpOworCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCXVwKCZwQ2lmc0ZpbGUtPmZoX3NlbSk7CiAJCUZyZWVYaWQoeGlkKTsKQEAgLTQ0NCw3ICs0NDUsNyBAQAogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gVFJVRTsKIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSBUUlVFOwogCQkJCWNGWUkoMSwgKCJFeGNsdXNpdmUgT3Bsb2NrIGdyYW50ZWQgb24gaW5vZGUgJXAiLAotCQkJCQkgZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpKTsKKwkJCQkJIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKIAkJCX0gZWxzZSBpZiAoKG9wbG9jayAmIDB4RikgPT0gT1BMT0NLX1JFQUQpIHsKIAkJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSBUUlVFOwogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gRkFMU0U7CkBAIC01NTEsNyArNTUyLDcgQEAKIAogCWlmIChwQ0ZpbGVTdHJ1Y3QpIHsKIAkJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247Ci0JCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfZGVudHJ5LT5kX3NiKTsKKwkJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CiAKIAkJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCkBAIC02NjQsNyArNjY1LDcgQEAKIAl9IGVsc2UKIAkJY0ZZSSgxLCAoIlVua25vd24gdHlwZSBvZiBsb2NrIikpOwogCi0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9kZW50cnktPmRfc2IpOworCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAogCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkgewpAQCAtNzkxLDEwICs3OTIsMTAgQEAKIAlpbnQgeGlkLCBsb25nX29wOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKm9wZW5fZmlsZTsKIAotCWlmIChmaWxlLT5mX2RlbnRyeSA9PSBOVUxMKQorCWlmIChmaWxlLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpCiAJCXJldHVybiAtRUJBREY7CiAKLQljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX2RlbnRyeS0+ZF9zYik7CisJY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CiAJaWYgKGNpZnNfc2IgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQkFERjsKIApAQCAtODAyLDcgKzgwMyw3IEBACiAKIAkvKiBjRllJKDEsCiAJICAgKCIgd3JpdGUgJWQgYnl0ZXMgdG8gb2Zmc2V0ICVsbGQgb2YgJXMiLCB3cml0ZV9zaXplLAotCSAgICpwb2Zmc2V0LCBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUpKTsgKi8KKwkgICAqcG9mZnNldCwgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpKTsgKi8KIAogCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQkFERjsKQEAgLTgxMCwxMiArODExLDEyIEBACiAJCW9wZW5fZmlsZSA9IChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopIGZpbGUtPnByaXZhdGVfZGF0YTsKIAkKIAl4aWQgPSBHZXRYaWQoKTsKLQlpZiAoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUgPT0gTlVMTCkgeworCWlmIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVCQURGOwogCX0KIAotCWlmICgqcG9mZnNldCA+IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NpemUpCisJaWYgKCpwb2Zmc2V0ID4gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplKQogCQlsb25nX29wID0gMjsgLyogd3JpdGVzIHBhc3QgZW5kIG9mIGZpbGUgY2FuIHRha2UgYSBsb25nIHRpbWUgKi8KIAllbHNlCiAJCWxvbmdfb3AgPSAxOwpAQCAtODQwLDggKzg0MSw4IEBACiAJCQkJCXJldHVybiAtRUJBREY7CiAJCQl9CiAJCQlpZiAob3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlKSB7Ci0JCQkJaWYgKChmaWxlLT5mX2RlbnRyeSA9PSBOVUxMKSB8fAotCQkJCSAgICAoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUgPT0gTlVMTCkpIHsKKwkJCQlpZiAoKGZpbGUtPmZfcGF0aC5kZW50cnkgPT0gTlVMTCkgfHwKKwkJCQkgICAgKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUgPT0gTlVMTCkpIHsKIAkJCQkJRnJlZVhpZCh4aWQpOwogCQkJCQlyZXR1cm4gdG90YWxfd3JpdHRlbjsKIAkJCQl9CkBAIC04NDksNyArODUwLDcgQEAKIAkJCQkgICBmaWxlbWFwX2ZkYXRhd2FpdCBmcm9tIGhlcmUgc28gdGVsbAogCQkJCSAgIHJlb3Blbl9maWxlIG5vdCB0byBmbHVzaCBkYXRhIHRvIHNlcnZlcgogCQkJCSAgIG5vdyAqLwotCQkJCXJjID0gY2lmc19yZW9wZW5fZmlsZShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwKKwkJCQlyYyA9IGNpZnNfcmVvcGVuX2ZpbGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKIAkJCQkJZmlsZSwgRkFMU0UpOwogCQkJCWlmIChyYyAhPSAwKQogCQkJCQlicmVhazsKQEAgLTg3OCwxNyArODc5LDE3IEBACiAJY2lmc19zdGF0c19ieXRlc193cml0dGVuKHBUY29uLCB0b3RhbF93cml0dGVuKTsKIAogCS8qIHNpbmNlIHRoZSB3cml0ZSBtYXkgaGF2ZSBibG9ja2VkIGNoZWNrIHRoZXNlIHBvaW50ZXJzIGFnYWluICovCi0JaWYgKGZpbGUtPmZfZGVudHJ5KSB7Ci0JCWlmIChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkgewotCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWlmIChmaWxlLT5mX3BhdGguZGVudHJ5KSB7CisJCWlmIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSB7CisJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJCWlub2RlLT5pX2N0aW1lID0gaW5vZGUtPmlfbXRpbWUgPQogCQkJCWN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7CiAJCQlpZiAodG90YWxfd3JpdHRlbiA+IDApIHsKLQkJCQlpZiAoKnBvZmZzZXQgPiBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zaXplKQotCQkJCQlpX3NpemVfd3JpdGUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsCisJCQkJaWYgKCpwb2Zmc2V0ID4gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplKQorCQkJCQlpX3NpemVfd3JpdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKIAkJCQkJKnBvZmZzZXQpOwogCQkJfQotCQkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwkJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAkJfQogCX0KIAlGcmVlWGlkKHhpZCk7CkBAIC05MDYsMTcgKzkwNywxNyBAQAogCWludCB4aWQsIGxvbmdfb3A7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqb3Blbl9maWxlOwogCi0JaWYgKGZpbGUtPmZfZGVudHJ5ID09IE5VTEwpCisJaWYgKGZpbGUtPmZfcGF0aC5kZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQkFERjsKIAotCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfZGVudHJ5LT5kX3NiKTsKKwljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKIAlpZiAoY2lmc19zYiA9PSBOVUxMKQogCQlyZXR1cm4gLUVCQURGOwogCiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCiAJY0ZZSSgxLCgid3JpdGUgJXpkIGJ5dGVzIHRvIG9mZnNldCAlbGxkIG9mICVzIiwgd3JpdGVfc2l6ZSwKLQkgICAqcG9mZnNldCwgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lKSk7CisJICAgKnBvZmZzZXQsIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKSk7CiAKIAlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpCiAJCXJldHVybiAtRUJBREY7CkBAIC05MjQsMTIgKzkyNSwxMiBAQAogCQlvcGVuX2ZpbGUgPSAoc3RydWN0IGNpZnNGaWxlSW5mbyAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAkKIAl4aWQgPSBHZXRYaWQoKTsKLQlpZiAoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUgPT0gTlVMTCkgeworCWlmIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVCQURGOwogCX0KIAotCWlmICgqcG9mZnNldCA+IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NpemUpCisJaWYgKCpwb2Zmc2V0ID4gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplKQogCQlsb25nX29wID0gMjsgLyogd3JpdGVzIHBhc3QgZW5kIG9mIGZpbGUgY2FuIHRha2UgYSBsb25nIHRpbWUgKi8KIAllbHNlCiAJCWxvbmdfb3AgPSAxOwpAQCAtOTU1LDggKzk1Niw4IEBACiAJCQkJCXJldHVybiAtRUJBREY7CiAJCQl9CiAJCQlpZiAob3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlKSB7Ci0JCQkJaWYgKChmaWxlLT5mX2RlbnRyeSA9PSBOVUxMKSB8fAotCQkJCSAgIChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSA9PSBOVUxMKSkgeworCQkJCWlmICgoZmlsZS0+Zl9wYXRoLmRlbnRyeSA9PSBOVUxMKSB8fAorCQkJCSAgIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlID09IE5VTEwpKSB7CiAJCQkJCUZyZWVYaWQoeGlkKTsKIAkJCQkJcmV0dXJuIHRvdGFsX3dyaXR0ZW47CiAJCQkJfQpAQCAtOTY0LDcgKzk2NSw3IEBACiAJCQkJICAgZmlsZW1hcF9mZGF0YXdhaXQgZnJvbSBoZXJlIHNvIHRlbGwKIAkJCQkgICByZW9wZW5fZmlsZSBub3QgdG8gZmx1c2ggZGF0YSB0byAKIAkJCQkgICBzZXJ2ZXIgbm93ICovCi0JCQkJcmMgPSBjaWZzX3Jlb3Blbl9maWxlKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLAorCQkJCXJjID0gY2lmc19yZW9wZW5fZmlsZShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLAogCQkJCQlmaWxlLCBGQUxTRSk7CiAJCQkJaWYgKHJjICE9IDApCiAJCQkJCWJyZWFrOwpAQCAtMTAxMSwxNiArMTAxMiwxNiBAQAogCWNpZnNfc3RhdHNfYnl0ZXNfd3JpdHRlbihwVGNvbiwgdG90YWxfd3JpdHRlbik7CiAKIAkvKiBzaW5jZSB0aGUgd3JpdGUgbWF5IGhhdmUgYmxvY2tlZCBjaGVjayB0aGVzZSBwb2ludGVycyBhZ2FpbiAqLwotCWlmIChmaWxlLT5mX2RlbnRyeSkgewotCQlpZiAoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpIHsKLQkJCWZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2N0aW1lID0gCi0JCQlmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKwlpZiAoZmlsZS0+Zl9wYXRoLmRlbnRyeSkgeworCQlpZiAoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkgeworCQkJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9jdGltZSA9CisJCQlmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOwogCQkJaWYgKHRvdGFsX3dyaXR0ZW4gPiAwKSB7Ci0JCQkJaWYgKCpwb2Zmc2V0ID4gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSkKLQkJCQkJaV9zaXplX3dyaXRlKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCAKKwkJCQlpZiAoKnBvZmZzZXQgPiBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NpemUpCisJCQkJCWlfc2l6ZV93cml0ZShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLAogCQkJCQkJICAgICAqcG9mZnNldCk7CiAJCQl9Ci0JCQltYXJrX2lub2RlX2RpcnR5X3N5bmMoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCQkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCQl9CiAJfQogCUZyZWVYaWQoeGlkKTsKQEAgLTEyNDQsMTQgKzEyNDUsMjEgQEAKIAkJCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCiAJCQlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSB8fAotCQkJCQkhdGVzdF9jbGVhcl9wYWdlX2RpcnR5KHBhZ2UpKSB7CisJCQkJCSFjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlKSkgewogCQkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQkJCWJyZWFrOwogCQkJfQogCisJCQkvKgorCQkJICogVGhpcyBhY3R1YWxseSBjbGVhcnMgdGhlIGRpcnR5IGJpdCBpbiB0aGUgcmFkaXggdHJlZS4KKwkJCSAqIFNlZSBjaWZzX3dyaXRlcGFnZSgpIGZvciBtb3JlIGNvbW1lbnRhcnkuCisJCQkgKi8KKwkJCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwogCQkJaWYgKHBhZ2Vfb2Zmc2V0KHBhZ2UpID49IG1hcHBpbmctPmhvc3QtPmlfc2l6ZSkgewogCQkJCWRvbmUgPSAxOwogCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtMTMxNSw2ICsxMzIzLDcgQEAKIAkJCQkJU2V0UGFnZUVycm9yKHBhZ2UpOwogCQkJCWt1bm1hcChwYWdlKTsKIAkJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCQllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CiAJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQkJfQogCQkJaWYgKCh3YmMtPm5yX3RvX3dyaXRlIC09IG5faW92KSA8PSAwKQpAQCAtMTM1MSwxMSArMTM2MCwyMyBAQAogICAgICAgICBpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewogCQljRllJKDEsICgicHB3IC0gcGFnZSBub3QgdXAgdG8gZGF0ZSIpKTsKIAl9Ci0JCisKKwkvKgorCSAqIFNldCB0aGUgIndyaXRlYmFjayIgZmxhZywgYW5kIGNsZWFyICJkaXJ0eSIgaW4gdGhlIHJhZGl4IHRyZWUuCisJICoKKwkgKiBBIHdyaXRlcGFnZSgpIGltcGxlbWVudGF0aW9uIGFsd2F5cyBuZWVkcyB0byBkbyBlaXRoZXIgdGhpcywKKwkgKiBvciByZS1kaXJ0eSB0aGUgcGFnZSB3aXRoICJyZWRpcnR5X3BhZ2VfZm9yX3dyaXRlcGFnZSgpIiBpbgorCSAqIHRoZSBjYXNlIG9mIGEgZmFpbHVyZS4KKwkgKgorCSAqIEp1c3QgdW5sb2NraW5nIHRoZSBwYWdlIHdpbGwgY2F1c2UgdGhlIHJhZGl4IHRyZWUgdGFnLWJpdHMKKwkgKiB0byBmYWlsIHRvIHVwZGF0ZSB3aXRoIHRoZSBzdGF0ZSBvZiB0aGUgcGFnZSBjb3JyZWN0bHkuCisJICovCisJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwkJCiAJcmMgPSBjaWZzX3BhcnRpYWxwYWdld3JpdGUocGFnZSwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKIAlTZXRQYWdlVXB0b2RhdGUocGFnZSk7IC8qIEJCIGFkZCBjaGVjayBmb3IgZXJyb3IgYW5kIENsZWFydXB0b2RhdGU/ICovCiAJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwkKKwllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xMzg0LDcgKzE0MDUsNyBAQAogCQkJCWlmICgob3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlKSAmJiAKIAkJCQkgICAgKCFvcGVuX2ZpbGUtPmNsb3NlUGVuZCkpIHsKIAkJCQkJcmMgPSBjaWZzX3Jlb3Blbl9maWxlKAotCQkJCQkJZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbGUpOworCQkJCQkJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSk7CiAJCQkJCWlmIChyYyAhPSAwKQogCQkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtMTQzNCw3ICsxNDU1LDcgQEAKIHsKIAlpbnQgeGlkOwogCWludCByYyA9IDA7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJeGlkID0gR2V0WGlkKCk7CiAKQEAgLTE0ODIsNyArMTUwMyw3IEBACiAgKi8KIGludCBjaWZzX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBmbF9vd25lcl90IGlkKQogewotCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCByYyA9IDA7CiAKIAkvKiBSYXRoZXIgdGhhbiBkbyB0aGUgc3RlcHMgbWFudWFsbHk6CkBAIC0xNTE5LDcgKzE1NDAsNyBAQAogCXN0cnVjdCBzbWJfY29tX3JlYWRfcnNwICpwU01CcjsKIAogCXhpZCA9IEdldFhpZCgpOwotCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfZGVudHJ5LT5kX3NiKTsKKwljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKIAlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpIHsKQEAgLTE1NDIsNyArMTU2Myw3IEBACiAJCQlpbnQgYnVmX3R5cGUgPSBDSUZTX05PX0JVRkZFUjsKIAkJCWlmICgob3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlKSAmJiAKIAkJCSAgICAoIW9wZW5fZmlsZS0+Y2xvc2VQZW5kKSkgewotCQkJCXJjID0gY2lmc19yZW9wZW5fZmlsZShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwKKwkJCQlyYyA9IGNpZnNfcmVvcGVuX2ZpbGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKIAkJCQkJZmlsZSwgVFJVRSk7CiAJCQkJaWYgKHJjICE9IDApCiAJCQkJCWJyZWFrOwpAQCAtMTYwMSw3ICsxNjIyLDcgQEAKIAlpbnQgYnVmX3R5cGUgPSBDSUZTX05PX0JVRkZFUjsKIAogCXhpZCA9IEdldFhpZCgpOwotCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfZGVudHJ5LT5kX3NiKTsKKwljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKIAlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhID09IE5VTEwpIHsKQEAgLTE2MjksNyArMTY1MCw3IEBACiAJCXdoaWxlIChyYyA9PSAtRUFHQUlOKSB7CiAJCQlpZiAoKG9wZW5fZmlsZS0+aW52YWxpZEhhbmRsZSkgJiYgCiAJCQkgICAgKCFvcGVuX2ZpbGUtPmNsb3NlUGVuZCkpIHsKLQkJCQlyYyA9IGNpZnNfcmVvcGVuX2ZpbGUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsCisJCQkJcmMgPSBjaWZzX3Jlb3Blbl9maWxlKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsCiAJCQkJCWZpbGUsIFRSVUUpOwogCQkJCWlmIChyYyAhPSAwKQogCQkJCQlicmVhazsKQEAgLTE2NTgsNyArMTY3OSw3IEBACiAKIGludCBjaWZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlpbnQgcmMsIHhpZDsKIAogCXhpZCA9IEdldFhpZCgpOwpAQCAtMTc0NCw3ICsxNzY1LDcgQEAKIAkJcmV0dXJuIC1FQkFERjsKIAl9CiAJb3Blbl9maWxlID0gKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9kZW50cnktPmRfc2IpOworCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAogCXBhZ2V2ZWNfaW5pdCgmbHJ1X3B2ZWMsIDApOwpAQCAtMTc4Niw3ICsxODA3LDcgQEAKIAkJd2hpbGUgKHJjID09IC1FQUdBSU4pIHsKIAkJCWlmICgob3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlKSAmJiAKIAkJCSAgICAoIW9wZW5fZmlsZS0+Y2xvc2VQZW5kKSkgewotCQkJCXJjID0gY2lmc19yZW9wZW5fZmlsZShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwKKwkJCQlyYyA9IGNpZnNfcmVvcGVuX2ZpbGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKIAkJCQkJZmlsZSwgVFJVRSk7CiAJCQkJaWYgKHJjICE9IDApCiAJCQkJCWJyZWFrOwpAQCAtMTgxMiw2ICsxODMzLDcgQEAKIAkJCWNGWUkoMSwgKCJSZWFkIGVycm9yIGluIHJlYWRwYWdlczogJWQiLCByYykpOwogCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoYnl0ZXNfcmVhZCA+IDApIHsKKwkJCXRhc2tfaW9fYWNjb3VudF9yZWFkKGJ5dGVzX3JlYWQpOwogCQkJcFNNQnIgPSAoc3RydWN0IHNtYl9jb21fcmVhZF9yc3AgKilzbWJfcmVhZF9kYXRhOwogCQkJY2lmc19jb3B5X2NhY2hlX3BhZ2VzKG1hcHBpbmcsIHBhZ2VfbGlzdCwgYnl0ZXNfcmVhZCwKIAkJCQlzbWJfcmVhZF9kYXRhICsgNCAvKiBSRkMxMDAxIGhkciAqLyArCkBAIC0xODgwLDggKzE5MDIsOCBAQAogCWVsc2UKIAkJY0ZZSSgxLCAoIkJ5dGVzIHJlYWQgJWQiLHJjKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQlmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9hdGltZSA9Ci0JCWN1cnJlbnRfZnNfdGltZShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zYik7CisJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9hdGltZSA9CisJCWN1cnJlbnRfZnNfdGltZShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogCWlmIChQQUdFX0NBQ0hFX1NJWkUgPiByYykKIAkJbWVtc2V0KHJlYWRfZGF0YSArIHJjLCAwLCBQQUdFX0NBQ0hFX1NJWkUgLSByYyk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL21pc2MuYyBiL2ZzL2NpZnMvbWlzYy5jCmluZGV4IGFlZGY2ODMuLjE5Y2MyOTQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbWlzYy5jCisrKyBiL2ZzL2NpZnMvbWlzYy5jCkBAIC03MSw5ICs3MSw3IEBACiB7CiAJc3RydWN0IGNpZnNTZXNJbmZvICpyZXRfYnVmOwogCi0JcmV0X2J1ZiA9Ci0JICAgIChzdHJ1Y3QgY2lmc1Nlc0luZm8gKikga3phbGxvYyhzaXplb2YgKHN0cnVjdCBjaWZzU2VzSW5mbyksCi0JCQkJCSAgIEdGUF9LRVJORUwpOworCXJldF9idWYgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGNpZnNTZXNJbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldF9idWYpIHsKIAkJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCWF0b21pY19pbmMoJnNlc0luZm9BbGxvY0NvdW50KTsKQEAgLTEwOSw5ICsxMDcsNyBAQAogdGNvbkluZm9BbGxvYyh2b2lkKQogewogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnJldF9idWY7Ci0JcmV0X2J1ZiA9Ci0JICAgIChzdHJ1Y3QgY2lmc1Rjb25JbmZvICopIGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2lmc1Rjb25JbmZvKSwKLQkJCQkJICAgIEdGUF9LRVJORUwpOworCXJldF9idWYgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGNpZnNUY29uSW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChyZXRfYnVmKSB7CiAJCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCQlhdG9taWNfaW5jKCZ0Y29uSW5mb0FsbG9jQ291bnQpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCBlZDE4YzM5Li45OWRmYjUzIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtNjgsMzAgKzY4LDMwIEBACiAJaW50IHJjID0gMDsKIAogCWNGWUkoMSwgKCJGb3IgJXMiLCBxc3RyaW5nLT5uYW1lKSk7Ci0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9kZW50cnktPmRfc2IpOworCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAogCXFzdHJpbmctPmhhc2ggPSBmdWxsX25hbWVfaGFzaChxc3RyaW5nLT5uYW1lLCBxc3RyaW5nLT5sZW4pOwotCXRtcF9kZW50cnkgPSBkX2xvb2t1cChmaWxlLT5mX2RlbnRyeSwgcXN0cmluZyk7CisJdG1wX2RlbnRyeSA9IGRfbG9va3VwKGZpbGUtPmZfcGF0aC5kZW50cnksIHFzdHJpbmcpOwogCWlmICh0bXBfZGVudHJ5KSB7CiAJCWNGWUkoMCwgKCJleGlzdGluZyBkZW50cnkgd2l0aCBpbm9kZSAweCVwIiwgdG1wX2RlbnRyeS0+ZF9pbm9kZSkpOwogCQkqcHRtcF9pbm9kZSA9IHRtcF9kZW50cnktPmRfaW5vZGU7CiAvKiBCQiBvdmVyd3JpdGUgb2xkIG5hbWU/IGkuZS4gdG1wX2RlbnRyeS0+ZF9uYW1lIGFuZCB0bXBfZGVudHJ5LT5kX25hbWUubGVuPz8qLwogCQlpZigqcHRtcF9pbm9kZSA9PSBOVUxMKSB7Ci0JCQkqcHRtcF9pbm9kZSA9IG5ld19pbm9kZShmaWxlLT5mX2RlbnRyeS0+ZF9zYik7CisJCQkqcHRtcF9pbm9kZSA9IG5ld19pbm9kZShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKIAkJCWlmKCpwdG1wX2lub2RlID09IE5VTEwpCiAJCQkJcmV0dXJuIHJjOwogCQkJcmMgPSAxOwogCQl9CiAJfSBlbHNlIHsKLQkJdG1wX2RlbnRyeSA9IGRfYWxsb2MoZmlsZS0+Zl9kZW50cnksIHFzdHJpbmcpOworCQl0bXBfZGVudHJ5ID0gZF9hbGxvYyhmaWxlLT5mX3BhdGguZGVudHJ5LCBxc3RyaW5nKTsKIAkJaWYodG1wX2RlbnRyeSA9PSBOVUxMKSB7CiAJCQljRVJST1IoMSwoIkZhaWxlZCBhbGxvY2F0aW5nIGRlbnRyeSIpKTsKIAkJCSpwdG1wX2lub2RlID0gTlVMTDsKIAkJCXJldHVybiByYzsKIAkJfQogCi0JCSpwdG1wX2lub2RlID0gbmV3X2lub2RlKGZpbGUtPmZfZGVudHJ5LT5kX3NiKTsKKwkJKnB0bXBfaW5vZGUgPSBuZXdfaW5vZGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CiAJCWlmIChwVGNvbi0+bm9jYXNlKQogCQkJdG1wX2RlbnRyeS0+ZF9vcCA9ICZjaWZzX2NpX2RlbnRyeV9vcHM7CiAJCWVsc2UKQEAgLTQzMiwxMCArNDMyLDEwIEBACiAJY2lmc0ZpbGUtPmludmFsaWRIYW5kbGUgPSBUUlVFOwogCWNpZnNGaWxlLT5zcmNoX2luZi5lbmRPZlNlYXJjaCA9IEZBTFNFOwogCi0JaWYoZmlsZS0+Zl9kZW50cnkgPT0gTlVMTCkKKwlpZihmaWxlLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9kZW50cnktPmRfc2IpOworCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOwogCWlmKGNpZnNfc2IgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCWlmKHBUY29uID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShmaWxlLT5mX2RlbnRyeSk7CisJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAogCWlmKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjA5LDEwICs2MDksMTAgQEAKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc0luZm87CiAKLQlpZihmaWxlLT5mX2RlbnRyeSA9PSBOVUxMKQorCWlmKGZpbGUtPmZfcGF0aC5kZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCWlmKGlub2RlID09IE5VTEwpCiAJCXJldHVybiAwOwpAQCAtODM5LDcgKzgzOSw3IEBACiAJaWYoKHNjcmF0Y2hfYnVmID09IE5VTEwpIHx8IChwZmluZEVudHJ5ID09IE5VTEwpIHx8IChwQ2lmc0YgPT0gTlVMTCkpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JaWYoZmlsZS0+Zl9kZW50cnkgPT0gTlVMTCkKKwlpZihmaWxlLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJcmMgPSBjaWZzX2VudHJ5X2lzX2RvdChwZmluZEVudHJ5LHBDaWZzRik7CkBAIC04NDcsNyArODQ3LDcgQEAKIAlpZihyYyAhPSAwKSAKIAkJcmV0dXJuIDA7CiAKLQljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX2RlbnRyeS0+ZF9zYik7CisJY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CiAKIAlxc3RyaW5nLm5hbWUgPSBzY3JhdGNoX2J1ZjsKIAlyYyA9IGNpZnNfZ2V0X25hbWVfZnJvbV9zZWFyY2hfYnVmKCZxc3RyaW5nLHBmaW5kRW50cnksCkBAIC05ODUsMTIgKzk4NSwxMiBAQAogCiAJeGlkID0gR2V0WGlkKCk7CiAKLQlpZihmaWxlLT5mX2RlbnRyeSA9PSBOVUxMKSB7CisJaWYoZmlsZS0+Zl9wYXRoLmRlbnRyeSA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9kZW50cnktPmRfc2IpOworCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAlpZihwVGNvbiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk5OCw3ICs5OTgsNyBAQAogCXN3aXRjaCAoKGludCkgZmlsZS0+Zl9wb3MpIHsKIAljYXNlIDA6CiAJCWlmIChmaWxsZGlyKGRpcmVudHJ5LCAiLiIsIDEsIGZpbGUtPmZfcG9zLAotCQkgICAgIGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubywgRFRfRElSKSA8IDApIHsKKwkJICAgICBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubywgRFRfRElSKSA8IDApIHsKIAkJCWNFUlJPUigxLCAoIkZpbGxkaXIgZm9yIGN1cnJlbnQgZGlyIGZhaWxlZCIpKTsKIAkJCXJjID0gLUVOT01FTTsKIAkJCWJyZWFrOwpAQCAtMTAwNiw3ICsxMDA2LDcgQEAKIAkJZmlsZS0+Zl9wb3MrKzsKIAljYXNlIDE6CiAJCWlmIChmaWxsZGlyKGRpcmVudHJ5LCAiLi4iLCAyLCBmaWxlLT5mX3BvcywKLQkJICAgICBmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfaW5vLCBEVF9ESVIpIDwgMCkgeworCQkgICAgIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX2lubywgRFRfRElSKSA8IDApIHsKIAkJCWNFUlJPUigxLCAoIkZpbGxkaXIgZm9yIHBhcmVudCBkaXIgZmFpbGVkIikpOwogCQkJcmMgPSAtRU5PTUVNOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3Nlc3MuYyBiL2ZzL2NpZnMvc2Vzcy5jCmluZGV4IGJiZGRhOTkuLjc1ODQ2NDYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc2Vzcy5jCisrKyBiL2ZzL2NpZnMvc2Vzcy5jCkBAIC0xODIsMTEgKzE4MiwxNCBAQAogCWNGWUkoMSwoImJsZWZ0ICVkIixibGVmdCkpOwogCiAKLQkvKiB3b3JkIGFsaWduLCBpZiBieXRlcyByZW1haW5pbmcgaXMgbm90IGV2ZW4gKi8KLQlpZihibGVmdCAlIDIpIHsKLQkJYmxlZnQtLTsKLQkJZGF0YSsrOwotCX0KKwkvKiBTTUIgaGVhZGVyIGlzIHVuYWxpZ25lZCwgc28gY2lmcyBzZXJ2ZXJzIHdvcmQgYWxpZ24gc3RhcnQgb2YKKwkgICBVbmljb2RlIHN0cmluZ3MgKi8KKwlkYXRhKys7CisJYmxlZnQtLTsgLyogV2luZG93cyBzZXJ2ZXJzIGRvIG5vdCBhbHdheXMgZG91YmxlIG51bGwgdGVybWluYXRlCisJCSAgICB0aGVpciBmaW5hbCBVbmljb2RlIHN0cmluZyAtIGluIHdoaWNoIGNhc2Ugd2UKKwkJICAgIG5vdyB3aWxsIG5vdCBhdHRlbXB0IHRvIGRlY29kZSB0aGUgYnl0ZSBvZiBqdW5rCisJCSAgICB3aGljaCBmb2xsb3dzIGl0ICovCisJCSAgICAKIAl3b3Jkc19sZWZ0ID0gYmxlZnQgLyAyOwogCiAJLyogc2F2ZSBvZmYgc2VydmVyIG9wZXJhdGluZyBzeXN0ZW0gKi8KZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jCmluZGV4IDAxMDJiMjguLjBjNmY3ZjMgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvZGlyLmMKKysrIGIvZnMvY29kYS9kaXIuYwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAvKiBmaWxlIG9wZXJhdGlvbnMgZm9yIGRpcmVjdG9yaWVzICovCiBpbnQgY29kYV9yZWFkZGlyKHN0cnVjdCBmaWxlICpjb2RhX2ZpbGUsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqY29kYV9kZW50cnkgPSBjb2RhX2ZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmNvZGFfZGVudHJ5ID0gY29kYV9maWxlLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBjb2RhX2ZpbGVfaW5mbyAqY2ZpOwogCXN0cnVjdCBmaWxlICpob3N0X2ZpbGU7CiAJc3RydWN0IGlub2RlICpob3N0X2lub2RlOwpAQCAtNDUzLDcgKzQ1Myw3IEBACiAKIAljb2RhX3Zmc19zdGF0LnJlYWRkaXIrKzsKIAotCWhvc3RfaW5vZGUgPSBob3N0X2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWhvc3RfaW5vZGUgPSBob3N0X2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJbXV0ZXhfbG9jaygmaG9zdF9pbm9kZS0+aV9tdXRleCk7CiAJaG9zdF9maWxlLT5mX3BvcyA9IGNvZGFfZmlsZS0+Zl9wb3M7CiAKQEAgLTU0NCwxNCArNTQ0LDE0IEBACiAJCS8qIGNhdGNoIHRydW5jYXRlZCByZWFkcyAqLwogCQlpZiAocmV0IDwgdmRpcl9zaXplIHx8IHJldCA8IHZkaXJfc2l6ZSArIHZkaXItPmRfbmFtbGVuKSB7CiAJCQlwcmludGsoImNvZGFfdmVudXNfcmVhZGRpcjogc2hvcnQgcmVhZDogJWxkXG4iLAotCQkJICAgICAgIGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CisJCQkgICAgICAgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8pOwogCQkJcmV0ID0gLUVCQURGOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogdmFsaWRhdGUgd2hldGhlciB0aGUgZGlyZWN0b3J5IGZpbGUgYWN0dWFsbHkgbWFrZXMgc2Vuc2UgKi8KIAkJaWYgKHZkaXItPmRfcmVjbGVuIDwgdmRpcl9zaXplICsgdmRpci0+ZF9uYW1sZW4pIHsKIAkJCXByaW50aygiY29kYV92ZW51c19yZWFkZGlyOiBJbnZhbGlkIGRpcjogJWxkXG4iLAotCQkJICAgICAgIGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CisJCQkgICAgICAgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8pOwogCQkJcmV0ID0gLUVCQURGOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZmlsZS5jIGIvZnMvY29kYS9maWxlLmMKaW5kZXggZGJmYmNmYS4uNWVmMmI2MCAxMDA2NDQKLS0tIGEvZnMvY29kYS9maWxlLmMKKysrIGIvZnMvY29kYS9maWxlLmMKQEAgLTY2LDcgKzY2LDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBjb2RhX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmNvZGFfZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGlub2RlICpob3N0X2lub2RlLCAqY29kYV9pbm9kZSA9IGNvZGFfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICpob3N0X2lub2RlLCAqY29kYV9pbm9kZSA9IGNvZGFfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgY29kYV9maWxlX2luZm8gKmNmaTsKIAlzdHJ1Y3QgZmlsZSAqaG9zdF9maWxlOwogCXNzaXplX3QgcmV0OwpAQCAtNzgsNyArNzgsNyBAQAogCWlmICghaG9zdF9maWxlLT5mX29wIHx8ICFob3N0X2ZpbGUtPmZfb3AtPndyaXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWhvc3RfaW5vZGUgPSBob3N0X2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWhvc3RfaW5vZGUgPSBob3N0X2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJbXV0ZXhfbG9jaygmY29kYV9pbm9kZS0+aV9tdXRleCk7CiAKIAlyZXQgPSBob3N0X2ZpbGUtPmZfb3AtPndyaXRlKGhvc3RfZmlsZSwgYnVmLCBjb3VudCwgcHBvcyk7CkBAIC0xMDYsOCArMTA2LDggQEAKIAlpZiAoIWhvc3RfZmlsZS0+Zl9vcCB8fCAhaG9zdF9maWxlLT5mX29wLT5tbWFwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNvZGFfaW5vZGUgPSBjb2RhX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCWhvc3RfaW5vZGUgPSBob3N0X2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWNvZGFfaW5vZGUgPSBjb2RhX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJaG9zdF9pbm9kZSA9IGhvc3RfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAljb2RhX2ZpbGUtPmZfbWFwcGluZyA9IGhvc3RfZmlsZS0+Zl9tYXBwaW5nOwogCWlmIChjb2RhX2lub2RlLT5pX21hcHBpbmcgPT0gJmNvZGFfaW5vZGUtPmlfZGF0YSkKIAkJY29kYV9pbm9kZS0+aV9tYXBwaW5nID0gaG9zdF9pbm9kZS0+aV9tYXBwaW5nOwpAQCAtMTkwLDcgKzE5MCw3IEBACiAJY2ZpID0gQ09EQV9GVE9DKGNvZGFfZmlsZSk7CiAJQlVHX09OKCFjZmkgfHwgY2ZpLT5jZmlfbWFnaWMgIT0gQ09EQV9NQUdJQyk7CiAKLQljb2RhX2lub2RlID0gY29kYV9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwljb2RhX2lub2RlID0gY29kYV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJZXJyID0gdmVudXNfc3RvcmUoY29kYV9pbm9kZS0+aV9zYiwgY29kYV9pMmYoY29kYV9pbm9kZSksIGNvZGFfZmxhZ3MsCiAJCQkgIGNvZGFfZmlsZS0+Zl91aWQpOwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJCWVyciA9IHZlbnVzX2Nsb3NlKGNvZGFfaW5vZGUtPmlfc2IsIGNvZGFfaTJmKGNvZGFfaW5vZGUpLAogCQkJCSAgY29kYV9mbGFncywgY29kYV9maWxlLT5mX3VpZCk7CiAKLQlob3N0X2lub2RlID0gY2ZpLT5jZmlfY29udGFpbmVyLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlob3N0X2lub2RlID0gY2ZpLT5jZmlfY29udGFpbmVyLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWNpaSA9IElUT0MoY29kYV9pbm9kZSk7CiAKIAkvKiBkaWQgd2UgbW1hcCB0aGlzIGZpbGU/ICovCkBAIC0yNzAsNyArMjcwLDcgQEAKIAljb2RhX3Zmc19zdGF0LmZzeW5jKys7CiAKIAlpZiAoaG9zdF9maWxlLT5mX29wICYmIGhvc3RfZmlsZS0+Zl9vcC0+ZnN5bmMpIHsKLQkJaG9zdF9kZW50cnkgPSBob3N0X2ZpbGUtPmZfZGVudHJ5OworCQlob3N0X2RlbnRyeSA9IGhvc3RfZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAkJaG9zdF9pbm9kZSA9IGhvc3RfZGVudHJ5LT5kX2lub2RlOwogCQltdXRleF9sb2NrKCZob3N0X2lub2RlLT5pX211dGV4KTsKIAkJZXJyID0gaG9zdF9maWxlLT5mX29wLT5mc3luYyhob3N0X2ZpbGUsIGhvc3RfZGVudHJ5LCBkYXRhc3luYyk7CmRpZmYgLS1naXQgYS9mcy9jb2RhL2lub2RlLmMgYi9mcy9jb2RhL2lub2RlLmMKaW5kZXggYjY0NjU5Zi4uMDEzOTVkZSAxMDA2NDQKLS0tIGEvZnMvY29kYS9pbm9kZS5jCisrKyBiL2ZzL2NvZGEvaW5vZGUuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJZmlsZSA9IGZnZXQoZGF0YS0+ZmQpOwogCWlub2RlID0gTlVMTDsKIAlpZihmaWxlKQotCQlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJCiAJaWYoIWlub2RlIHx8ICFTX0lTQ0hSKGlub2RlLT5pX21vZGUpIHx8CiAJICAgaW1ham9yKGlub2RlKSAhPSBDT0RBX1BTREVWX01BSk9SKSB7CmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IGE3ZTNmMTYuLjBlYzcwZTMgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIAlmaWxlID0gZmdldChmZCk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dDsKLQllcnJvciA9IHZmc19zdGF0ZnMoZmlsZS0+Zl9kZW50cnksICZ0bXApOworCWVycm9yID0gdmZzX3N0YXRmcyhmaWxlLT5mX3BhdGguZGVudHJ5LCAmdG1wKTsKIAlpZiAoIWVycm9yKQogCQllcnJvciA9IHB1dF9jb21wYXRfc3RhdGZzKGJ1ZiwgJnRtcCk7CiAJZnB1dChmaWxlKTsKQEAgLTMwMyw3ICszMDMsNyBAQAogCWZpbGUgPSBmZ2V0KGZkKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0OwotCWVycm9yID0gdmZzX3N0YXRmcyhmaWxlLT5mX2RlbnRyeSwgJnRtcCk7CisJZXJyb3IgPSB2ZnNfc3RhdGZzKGZpbGUtPmZfcGF0aC5kZW50cnksICZ0bXApOwogCWlmICghZXJyb3IpCiAJCWVycm9yID0gcHV0X2NvbXBhdF9zdGF0ZnM2NChidWYsICZ0bXApOwogCWZwdXQoZmlsZSk7CkBAIC0zNjUsNyArMzY1LDcgQEAKIAkvKiBmaW5kIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2UuICovCiAJcGF0aCA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCWlmIChwYXRoKSB7Ci0JCWZuID0gZF9wYXRoKGZpbHAtPmZfZGVudHJ5LCBmaWxwLT5mX3Zmc21udCwgcGF0aCwgUEFHRV9TSVpFKTsKKwkJZm4gPSBkX3BhdGgoZmlscC0+Zl9wYXRoLmRlbnRyeSwgZmlscC0+Zl9wYXRoLm1udCwgcGF0aCwgUEFHRV9TSVpFKTsKIAkJaWYgKElTX0VSUihmbikpCiAJCQlmbiA9ICI/IjsKIAl9CkBAIC00MTYsNyArNDE2LDcgQEAKIAljYXNlIEZJQk1BUDoKIAljYXNlIEZJR0VUQlNaOgogCWNhc2UgRklPTlJFQUQ6Ci0JCWlmIChTX0lTUkVHKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQlpZiAoU19JU1JFRyhmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQogCQkJYnJlYWs7CiAJCS8qRkFMTCBUSFJPVUdIKi8KIApAQCAtNDM4LDcgKzQzOCw3IEBACiAJCQlnb3RvIGZvdW5kX2hhbmRsZXI7CiAJfQogCi0JaWYgKFNfSVNTT0NLKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmCisJaWYgKFNfSVNTT0NLKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgJiYKIAkgICAgY21kID49IFNJT0NERVZQUklWQVRFICYmIGNtZCA8PSAoU0lPQ0RFVlBSSVZBVEUgKyAxNSkpIHsKIAkJZXJyb3IgPSBzaW9jZGV2cHJpdmF0ZV9pb2N0bChmZCwgY21kLCBhcmcpOwogCX0gZWxzZSB7CkBAIC0xMjU5LDcgKzEyNTksNyBAQAogCWlmIChpb3YgIT0gaW92c3RhY2spCiAJCWtmcmVlKGlvdik7CiAJaWYgKChyZXQgKyAodHlwZSA9PSBSRUFEKSkgPiAwKSB7Ci0JCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCQlpZiAodHlwZSA9PSBSRUFEKQogCQkJZnNub3RpZnlfYWNjZXNzKGRlbnRyeSk7CiAJCWVsc2UKQEAgLTE2NzksMTkgKzE2NzksMTkgQEAKIHsKIAlmZF9zZXRfYml0cyBmZHM7CiAJY2hhciAqYml0czsKLQlpbnQgc2l6ZSwgbWF4X2Zkc2V0LCByZXQgPSAtRUlOVkFMOworCWludCBzaXplLCBtYXhfZmRzLCByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCBmZHRhYmxlICpmZHQ7CiAKIAlpZiAobiA8IDApCiAJCWdvdG8gb3V0X25vZmRzOwogCi0JLyogbWF4X2Zkc2V0IGNhbiBpbmNyZWFzZSwgc28gZ3JhYiBpdCBvbmNlIHRvIGF2b2lkIHJhY2UgKi8KKwkvKiBtYXhfZmRzIGNhbiBpbmNyZWFzZSwgc28gZ3JhYiBpdCBvbmNlIHRvIGF2b2lkIHJhY2UgKi8KIAlyY3VfcmVhZF9sb2NrKCk7CiAJZmR0ID0gZmlsZXNfZmR0YWJsZShjdXJyZW50LT5maWxlcyk7Ci0JbWF4X2Zkc2V0ID0gZmR0LT5tYXhfZmRzZXQ7CisJbWF4X2ZkcyA9IGZkdC0+bWF4X2ZkczsKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlpZiAobiA+IG1heF9mZHNldCkKLQkJbiA9IG1heF9mZHNldDsKKwlpZiAobiA+IG1heF9mZHMpCisJCW4gPSBtYXhfZmRzOwogCiAJLyoKIAkgKiBXZSBuZWVkIDYgYml0bWFwcyAoaW4vb3V0L2V4IGZvciBib3RoIGluY29taW5nIGFuZCBvdXRnb2luZyksCmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IGJjYzNjYWYuLmM4MWM5NTggMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0xMTc3LDcgKzExNzcsNyBAQAogc3RhdGljIGludCB2dF9jaGVjayhzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkKIAlpZiAoZmlsZS0+Zl9vcC0+aW9jdGwgIT0gdHR5X2lvY3RsKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2Rpci5jIGIvZnMvY29uZmlnZnMvZGlyLmMKaW5kZXggYzM5ODg2MS4uMTgxNGJhNDQ2IDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9kaXIuYworKysgYi9mcy9jb25maWdmcy9kaXIuYwpAQCAtOTgwLDcgKzk4MCw3IEBACiAKIHN0YXRpYyBpbnQgY29uZmlnZnNfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKiBwYXJlbnRfc2QgPSBkZW50cnktPmRfZnNkYXRhOwogCiAJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKQEAgLTk5Myw3ICs5OTMsNyBAQAogCiBzdGF0aWMgaW50IGNvbmZpZ2ZzX2Rpcl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqIGN1cnNvciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogCiBzdGF0aWMgaW50IGNvbmZpZ2ZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKiBwYXJlbnRfc2QgPSBkZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKmN1cnNvciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcSA9ICZjdXJzb3ItPnNfc2libGluZzsKQEAgLTEwNzAsNyArMTA3MCw3IEBACiAKIHN0YXRpYyBsb2ZmX3QgY29uZmlnZnNfZGlyX2xzZWVrKHN0cnVjdCBmaWxlICogZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKIHsKLQlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAKIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaCAob3JpZ2luKSB7CkBAIC0xMDgwLDcgKzEwODAsNyBAQAogCQkJaWYgKG9mZnNldCA+PSAwKQogCQkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJbXV0ZXhfdW5sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCQltdXRleF91bmxvY2soJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChvZmZzZXQgIT0gZmlsZS0+Zl9wb3MpIHsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2ZpbGUuYyBiL2ZzL2NvbmZpZ2ZzL2ZpbGUuYwppbmRleCBjZjMzZmFjLi4yYTdjYjA4IDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9maWxlLmMKKysrIGIvZnMvY29uZmlnZnMvZmlsZS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAogCWRvd24oJmJ1ZmZlci0+c2VtKTsKIAlpZiAoYnVmZmVyLT5uZWVkc19yZWFkX2ZpbGwpIHsKLQkJaWYgKChyZXR2YWwgPSBmaWxsX3JlYWRfYnVmZmVyKGZpbGUtPmZfZGVudHJ5LGJ1ZmZlcikpKQorCQlpZiAoKHJldHZhbCA9IGZpbGxfcmVhZF9idWZmZXIoZmlsZS0+Zl9wYXRoLmRlbnRyeSxidWZmZXIpKSkKIAkJCWdvdG8gb3V0OwogCX0KIAlwcl9kZWJ1ZygiJXM6IGNvdW50ID0gJXpkLCBwcG9zID0gJWxsZCwgYnVmID0gJXNcbiIsCkBAIC0yMjIsNyArMjIyLDcgQEAKIAlkb3duKCZidWZmZXItPnNlbSk7CiAJbGVuID0gZmlsbF93cml0ZV9idWZmZXIoYnVmZmVyLCBidWYsIGNvdW50KTsKIAlpZiAobGVuID4gMCkKLQkJbGVuID0gZmx1c2hfd3JpdGVfYnVmZmVyKGZpbGUtPmZfZGVudHJ5LCBidWZmZXIsIGNvdW50KTsKKwkJbGVuID0gZmx1c2hfd3JpdGVfYnVmZmVyKGZpbGUtPmZfcGF0aC5kZW50cnksIGJ1ZmZlciwgY291bnQpOwogCWlmIChsZW4gPiAwKQogCQkqcHBvcyArPSBsZW47CiAJdXAoJmJ1ZmZlci0+c2VtKTsKQEAgLTIzMSw4ICsyMzEsOCBAQAogCiBzdGF0aWMgaW50IGNoZWNrX3Blcm0oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKIHsKLQlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50KTsKLQlzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICogYXR0ciA9IHRvX2F0dHIoZmlsZS0+Zl9kZW50cnkpOworCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudCk7CisJc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqIGF0dHIgPSB0b19hdHRyKGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCXN0cnVjdCBjb25maWdmc19idWZmZXIgKiBidWZmZXI7CiAJc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyAqIG9wcyA9IE5VTEw7CiAJaW50IGVycm9yID0gMDsKQEAgLTMwNSw4ICszMDUsOCBAQAogCiBzdGF0aWMgaW50IGNvbmZpZ2ZzX3JlbGVhc2Uoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKIHsKLQlzdHJ1Y3QgY29uZmlnX2l0ZW0gKiBpdGVtID0gdG9faXRlbShmaWxwLT5mX2RlbnRyeS0+ZF9wYXJlbnQpOwotCXN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKiBhdHRyID0gdG9fYXR0cihmaWxwLT5mX2RlbnRyeSk7CisJc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSA9IHRvX2l0ZW0oZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQpOworCXN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKiBhdHRyID0gdG9fYXR0cihmaWxwLT5mX3BhdGguZGVudHJ5KTsKIAlzdHJ1Y3QgbW9kdWxlICogb3duZXIgPSBhdHRyLT5jYV9vd25lcjsKIAlzdHJ1Y3QgY29uZmlnZnNfYnVmZmVyICogYnVmZmVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCmRpZmYgLS1naXQgYS9mcy9jcmFtZnMvaW5vZGUuYyBiL2ZzL2NyYW1mcy9pbm9kZS5jCmluZGV4IDA1MDljZWQuLjZkYjAzZmIgMTAwNjQ0Ci0tLSBhL2ZzL2NyYW1mcy9pbm9kZS5jCisrKyBiL2ZzL2NyYW1mcy9pbm9kZS5jCkBAIC0zMzgsNyArMzM4LDcgQEAKICAqLwogc3RhdGljIGludCBjcmFtZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCWNoYXIgKmJ1ZjsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvZnMvZGVidWdmcy9pbm9kZS5jIGIvZnMvZGVidWdmcy9pbm9kZS5jCmluZGV4IDEzN2Q3NmMuLmM2OTI0ODcgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvaW5vZGUuYworKysgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KIAogI2RlZmluZSBERUJVR0ZTX01BR0lDCTB4NjQ2MjY3MjAKIApAQCAtNTQsNyArNTUsOCBAQAogCQkJaW5vZGUtPmlfb3AgPSAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCQkJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKIAotCQkJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAiLiIgZW50cnkpICovCisJCQkvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMgorCQkJICogKGZvciAiLiIgZW50cnkpICovCiAJCQlpbmNfbmxpbmsoaW5vZGUpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTg3LDE1ICs4OSwyMiBAQAogCiAJbW9kZSA9IChtb2RlICYgKFNfSVJXWFVHTyB8IFNfSVNWVFgpKSB8IFNfSUZESVI7CiAJcmVzID0gZGVidWdmc19ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7Ci0JaWYgKCFyZXMpCisJaWYgKCFyZXMpIHsKIAkJaW5jX25saW5rKGRpcik7CisJCWZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTsKKwl9CiAJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIGludCBkZWJ1Z2ZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKIHsKKwlpbnQgcmVzOworCiAJbW9kZSA9IChtb2RlICYgU19JQUxMVUdPKSB8IFNfSUZSRUc7Ci0JcmV0dXJuIGRlYnVnZnNfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOworCXJlcyA9IGRlYnVnZnNfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOworCWlmICghcmVzKQorCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOworCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRlYnVnZnNfcG9zaXRpdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQpAQCAtMTM1LDcgKzE0NCw3IEBACiAJICogYmxvY2suIEEgcG9pbnRlciB0byB0aGF0IGlzIGluIHRoZSBzdHJ1Y3QgdmZzbW91bnQgdGhhdCB3ZQogCSAqIGhhdmUgYXJvdW5kLgogCSAqLwotCWlmICghcGFyZW50ICkgeworCWlmICghcGFyZW50KSB7CiAJCWlmIChkZWJ1Z2ZzX21vdW50ICYmIGRlYnVnZnNfbW91bnQtPm1udF9zYikgewogCQkJcGFyZW50ID0gZGVidWdmc19tb3VudC0+bW50X3NiLT5zX3Jvb3Q7CiAJCX0KQEAgLTE1Myw2ICsxNjIsNyBAQAogCQkJZXJyb3IgPSBkZWJ1Z2ZzX21rZGlyKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CiAJCWVsc2UgCiAJCQllcnJvciA9IGRlYnVnZnNfY3JlYXRlKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CisJCWRwdXQoKmRlbnRyeSk7CiAJfSBlbHNlCiAJCWVycm9yID0gUFRSX0VSUigqZGVudHJ5KTsKIAltdXRleF91bmxvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CkBAIC0xOTcsMTMgKzIwNywxNSBAQAogCiAJcHJfZGVidWcoImRlYnVnZnM6IGNyZWF0aW5nIGZpbGUgJyVzJ1xuIixuYW1lKTsKIAotCWVycm9yID0gc2ltcGxlX3Bpbl9mcygmZGVidWdfZnNfdHlwZSwgJmRlYnVnZnNfbW91bnQsICZkZWJ1Z2ZzX21vdW50X2NvdW50KTsKKwllcnJvciA9IHNpbXBsZV9waW5fZnMoJmRlYnVnX2ZzX3R5cGUsICZkZWJ1Z2ZzX21vdW50LAorCQkJICAgICAgJmRlYnVnZnNfbW91bnRfY291bnQpOwogCWlmIChlcnJvcikKIAkJZ290byBleGl0OwogCiAJZXJyb3IgPSBkZWJ1Z2ZzX2NyZWF0ZV9ieV9uYW1lKG5hbWUsIG1vZGUsIHBhcmVudCwgJmRlbnRyeSk7CiAJaWYgKGVycm9yKSB7CiAJCWRlbnRyeSA9IE5VTEw7CisJCXNpbXBsZV9yZWxlYXNlX2ZzKCZkZWJ1Z2ZzX21vdW50LCAmZGVidWdmc19tb3VudF9jb3VudCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTI2Miw2ICsyNzQsNyBAQAogdm9pZCBkZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IGRlbnRyeSAqcGFyZW50OworCWludCByZXQgPSAwOwogCQogCWlmICghZGVudHJ5KQogCQlyZXR1cm47CkBAIC0yNzMsMTEgKzI4NiwxOSBAQAogCW11dGV4X2xvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJaWYgKGRlYnVnZnNfcG9zaXRpdmUoZGVudHJ5KSkgewogCQlpZiAoZGVudHJ5LT5kX2lub2RlKSB7Ci0JCQlpZiAoU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCi0JCQkJc2ltcGxlX3JtZGlyKHBhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsKLQkJCWVsc2UKKwkJCWRnZXQoZGVudHJ5KTsKKwkJCWlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkgeworCQkJCXJldCA9IHNpbXBsZV9ybWRpcihwYXJlbnQtPmRfaW5vZGUsIGRlbnRyeSk7CisJCQkJaWYgKHJldCkKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkiRGVidWdGUyBybWRpciBvbiAlcyBmYWlsZWQgOiAiCisJCQkJCQkiZGlyZWN0b3J5IG5vdCBlbXB0eS5cbiIsCisJCQkJCQlkZW50cnktPmRfbmFtZS5uYW1lKTsKKwkJCX0gZWxzZQogCQkJCXNpbXBsZV91bmxpbmsocGFyZW50LT5kX2lub2RlLCBkZW50cnkpOwotCQlkcHV0KGRlbnRyeSk7CisJCQlpZiAoIXJldCkKKwkJCQlkX2RlbGV0ZShkZW50cnkpOworCQkJZHB1dChkZW50cnkpOwogCQl9CiAJfQogCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKZGlmZiAtLWdpdCBhL2ZzL2RpcmVjdC1pby5jIGIvZnMvZGlyZWN0LWlvLmMKaW5kZXggNTk4MWUxN2YuLmQ5ZDA4MzMgMTAwNjQ0Ci0tLSBhL2ZzL2RpcmVjdC1pby5jCisrKyBiL2ZzL2RpcmVjdC1pby5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTEyMSw4ICsxMjIsNyBAQAogCiAJLyogQklPIGNvbXBsZXRpb24gc3RhdGUgKi8KIAlzcGlubG9ja190IGJpb19sb2NrOwkJLyogcHJvdGVjdHMgQklPIGZpZWxkcyBiZWxvdyAqLwotCWludCBiaW9fY291bnQ7CQkJLyogbnIgYmlvcyB0byBiZSBjb21wbGV0ZWQgKi8KLQlpbnQgYmlvc19pbl9mbGlnaHQ7CQkvKiBuciBiaW9zIGluIGZsaWdodCAqLworCXVuc2lnbmVkIGxvbmcgcmVmY291bnQ7CQkvKiBkaXJlY3RfaW9fd29ya2VyKCkgYW5kIGJpb3MgKi8KIAlzdHJ1Y3QgYmlvICpiaW9fbGlzdDsJCS8qIHNpbmdseSBsaW5rZWQgdmlhIGJpX3ByaXZhdGUgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKndhaXRlcjsJLyogd2FpdGluZyB0YXNrIChOVUxMIGlmIG5vbmUpICovCiAKQEAgLTIwOSw3NiArMjA5LDU1IEBACiAJcmV0dXJuIGRpby0+cGFnZXNbZGlvLT5oZWFkKytdOwogfQogCi0vKgotICogQ2FsbGVkIHdoZW4gYWxsIERJTyBCSU8gSS9PIGhhcyBiZWVuIGNvbXBsZXRlZCAtIGxldCB0aGUgZmlsZXN5c3RlbQotICoga25vdywgaWYgaXQgcmVnaXN0ZXJlZCBhbiBpbnRlcmVzdCBlYXJsaWVyIHZpYSBnZXRfYmxvY2suICBQYXNzIHRoZQotICogcHJpdmF0ZSBmaWVsZCBvZiB0aGUgbWFwIGJ1ZmZlcl9oZWFkIHNvIHRoYXQgZmlsZXN5c3RlbXMgY2FuIHVzZSBpdAotICogdG8gaG9sZCBhZGRpdGlvbmFsIHN0YXRlIGJldHdlZW4gZ2V0X2Jsb2NrIGNhbGxzIGFuZCBkaW9fY29tcGxldGUuCisvKioKKyAqIGRpb19jb21wbGV0ZSgpIC0gY2FsbGVkIHdoZW4gYWxsIERJTyBCSU8gSS9PIGhhcyBiZWVuIGNvbXBsZXRlZAorICogQG9mZnNldDogdGhlIGJ5dGUgb2Zmc2V0IGluIHRoZSBmaWxlIG9mIHRoZSBjb21wbGV0ZWQgb3BlcmF0aW9uCisgKgorICogVGhpcyByZWxlYXNlcyBsb2NrcyBhcyBkaWN0YXRlZCBieSB0aGUgbG9ja2luZyB0eXBlLCBsZXRzIGludGVyZXN0ZWQgcGFydGllcworICoga25vdyB0aGF0IGEgRElPIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLCBhbmQgY2FsY3VsYXRlcyB0aGUgcmVzdWx0aW5nIHJldHVybgorICogY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBJdCBsZXRzIHRoZSBmaWxlc3lzdGVtIGtub3cgaWYgaXQgcmVnaXN0ZXJlZCBhbiBpbnRlcmVzdCBlYXJsaWVyIHZpYQorICogZ2V0X2Jsb2NrLiAgUGFzcyB0aGUgcHJpdmF0ZSBmaWVsZCBvZiB0aGUgbWFwIGJ1ZmZlcl9oZWFkIHNvIHRoYXQKKyAqIGZpbGVzeXN0ZW1zIGNhbiB1c2UgaXQgdG8gaG9sZCBhZGRpdGlvbmFsIHN0YXRlIGJldHdlZW4gZ2V0X2Jsb2NrIGNhbGxzIGFuZAorICogZGlvX2NvbXBsZXRlLgogICovCi1zdGF0aWMgdm9pZCBkaW9fY29tcGxldGUoc3RydWN0IGRpbyAqZGlvLCBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGJ5dGVzKQorc3RhdGljIGludCBkaW9fY29tcGxldGUoc3RydWN0IGRpbyAqZGlvLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgcmV0KQogeworCXNzaXplX3QgdHJhbnNmZXJyZWQgPSAwOworCisJLyoKKwkgKiBBSU8gc3VibWlzc2lvbiBjYW4gcmFjZSB3aXRoIGJpbyBjb21wbGV0aW9uIHRvIGdldCBoZXJlIHdoaWxlCisJICogZXhwZWN0aW5nIHRvIGhhdmUgdGhlIGxhc3QgaW8gY29tcGxldGVkIGJ5IGJpbyBjb21wbGV0aW9uLgorCSAqIEluIHRoYXQgY2FzZSAtRUlPQ0JRVUVVRUQgaXMgaW4gZmFjdCBub3QgYW4gZXJyb3Igd2Ugd2FudAorCSAqIHRvIHByZXNlcnZlIHRocm91Z2ggdGhpcyBjYWxsLgorCSAqLworCWlmIChyZXQgPT0gLUVJT0NCUVVFVUVEKQorCQlyZXQgPSAwOworCisJaWYgKGRpby0+cmVzdWx0KSB7CisJCXRyYW5zZmVycmVkID0gZGlvLT5yZXN1bHQ7CisKKwkJLyogQ2hlY2sgZm9yIHNob3J0IHJlYWQgY2FzZSAqLworCQlpZiAoKGRpby0+cncgPT0gUkVBRCkgJiYgKChvZmZzZXQgKyB0cmFuc2ZlcnJlZCkgPiBkaW8tPmlfc2l6ZSkpCisJCQl0cmFuc2ZlcnJlZCA9IGRpby0+aV9zaXplIC0gb2Zmc2V0OworCX0KKwogCWlmIChkaW8tPmVuZF9pbyAmJiBkaW8tPnJlc3VsdCkKLQkJZGlvLT5lbmRfaW8oZGlvLT5pb2NiLCBvZmZzZXQsIGJ5dGVzLCBkaW8tPm1hcF9iaC5iX3ByaXZhdGUpOworCQlkaW8tPmVuZF9pbyhkaW8tPmlvY2IsIG9mZnNldCwgdHJhbnNmZXJyZWQsCisJCQkgICAgZGlvLT5tYXBfYmguYl9wcml2YXRlKTsKIAlpZiAoZGlvLT5sb2NrX3R5cGUgPT0gRElPX0xPQ0tJTkcpCiAJCS8qIGxvY2tkZXA6IG5vbi1vd25lciByZWxlYXNlICovCiAJCXVwX3JlYWRfbm9uX293bmVyKCZkaW8tPmlub2RlLT5pX2FsbG9jX3NlbSk7Ci19CiAKLS8qCi0gKiBDYWxsZWQgd2hlbiBhIEJJTyBoYXMgYmVlbiBwcm9jZXNzZWQuICBJZiB0aGUgY291bnQgZ29lcyB0byB6ZXJvIHRoZW4gSU8gaXMKLSAqIGNvbXBsZXRlIGFuZCB3ZSBjYW4gc2lnbmFsIHRoaXMgdG8gdGhlIEFJTyBsYXllci4KLSAqLwotc3RhdGljIHZvaWQgZmluaXNoZWRfb25lX2JpbyhzdHJ1Y3QgZGlvICpkaW8pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IGRpby0+cGFnZV9lcnJvcnM7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBkaW8tPmlvX2Vycm9yOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gdHJhbnNmZXJyZWQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGlvLT5iaW9fbG9jaywgZmxhZ3MpOwotCWlmIChkaW8tPmJpb19jb3VudCA9PSAxKSB7Ci0JCWlmIChkaW8tPmlzX2FzeW5jKSB7Ci0JCQlzc2l6ZV90IHRyYW5zZmVycmVkOwotCQkJbG9mZl90IG9mZnNldDsKLQotCQkJLyoKLQkJCSAqIExhc3QgcmVmZXJlbmNlIHRvIHRoZSBkaW8gaXMgZ29pbmcgYXdheS4KLQkJCSAqIERyb3Agc3BpbmxvY2sgYW5kIGNvbXBsZXRlIHRoZSBESU8uCi0JCQkgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpby0+YmlvX2xvY2ssIGZsYWdzKTsKLQotCQkJLyogQ2hlY2sgZm9yIHNob3J0IHJlYWQgY2FzZSAqLwotCQkJdHJhbnNmZXJyZWQgPSBkaW8tPnJlc3VsdDsKLQkJCW9mZnNldCA9IGRpby0+aW9jYi0+a2lfcG9zOwotCi0JCQlpZiAoKGRpby0+cncgPT0gUkVBRCkgJiYKLQkJCSAgICAoKG9mZnNldCArIHRyYW5zZmVycmVkKSA+IGRpby0+aV9zaXplKSkKLQkJCQl0cmFuc2ZlcnJlZCA9IGRpby0+aV9zaXplIC0gb2Zmc2V0OwotCi0JCQkvKiBjaGVjayBmb3IgZXJyb3IgaW4gY29tcGxldGlvbiBwYXRoICovCi0JCQlpZiAoZGlvLT5pb19lcnJvcikKLQkJCQl0cmFuc2ZlcnJlZCA9IGRpby0+aW9fZXJyb3I7Ci0KLQkJCWRpb19jb21wbGV0ZShkaW8sIG9mZnNldCwgdHJhbnNmZXJyZWQpOwotCi0JCQkvKiBDb21wbGV0ZSBBSU8gbGF0ZXIgaWYgZmFsbGluZyBiYWNrIHRvIGJ1ZmZlcmVkIGkvbyAqLwotCQkJaWYgKGRpby0+cmVzdWx0ID09IGRpby0+c2l6ZSB8fAotCQkJCSgoZGlvLT5ydyA9PSBSRUFEKSAmJiBkaW8tPnJlc3VsdCkpIHsKLQkJCQlhaW9fY29tcGxldGUoZGlvLT5pb2NiLCB0cmFuc2ZlcnJlZCwgMCk7Ci0JCQkJa2ZyZWUoZGlvKTsKLQkJCQlyZXR1cm47Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogRmFsbGluZyBiYWNrIHRvIGJ1ZmZlcmVkCi0JCQkJICovCi0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRpby0+YmlvX2xvY2ssIGZsYWdzKTsKLQkJCQlkaW8tPmJpb19jb3VudC0tOwotCQkJCWlmIChkaW8tPndhaXRlcikKLQkJCQkJd2FrZV91cF9wcm9jZXNzKGRpby0+d2FpdGVyKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCWRpby0+YmlvX2NvdW50LS07Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGlvLT5iaW9fbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGlvX2Jpb19jb21wbGV0ZShzdHJ1Y3QgZGlvICpkaW8sIHN0cnVjdCBiaW8gKmJpbyk7CkBAIC0yODgsMTIgKzI2NywyNyBAQAogc3RhdGljIGludCBkaW9fYmlvX2VuZF9haW8oc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycm9yKQogewogCXN0cnVjdCBkaW8gKmRpbyA9IGJpby0+YmlfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHJlbWFpbmluZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGJpby0+Ymlfc2l6ZSkKIAkJcmV0dXJuIDE7CiAKIAkvKiBjbGVhbnVwIHRoZSBiaW8gKi8KIAlkaW9fYmlvX2NvbXBsZXRlKGRpbywgYmlvKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7CisJcmVtYWluaW5nID0gLS1kaW8tPnJlZmNvdW50OworCWlmIChyZW1haW5pbmcgPT0gMSAmJiBkaW8tPndhaXRlcikKKwkJd2FrZV91cF9wcm9jZXNzKGRpby0+d2FpdGVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7CisKKwlpZiAocmVtYWluaW5nID09IDApIHsKKwkJaW50IHJldCA9IGRpb19jb21wbGV0ZShkaW8sIGRpby0+aW9jYi0+a2lfcG9zLCAwKTsKKwkJYWlvX2NvbXBsZXRlKGRpby0+aW9jYiwgcmV0LCAwKTsKKwkJa2ZyZWUoZGlvKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzE1LDggKzMwOSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRpby0+YmlvX2xvY2ssIGZsYWdzKTsKIAliaW8tPmJpX3ByaXZhdGUgPSBkaW8tPmJpb19saXN0OwogCWRpby0+YmlvX2xpc3QgPSBiaW87Ci0JZGlvLT5iaW9zX2luX2ZsaWdodC0tOwotCWlmIChkaW8tPndhaXRlciAmJiBkaW8tPmJpb3NfaW5fZmxpZ2h0ID09IDApCisJaWYgKC0tZGlvLT5yZWZjb3VudCA9PSAxICYmIGRpby0+d2FpdGVyKQogCQl3YWtlX3VwX3Byb2Nlc3MoZGlvLT53YWl0ZXIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpby0+YmlvX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTM0Nyw2ICszNDAsOCBAQAogICogSW4gdGhlIEFJTyByZWFkIGNhc2Ugd2Ugc3BlY3VsYXRpdmVseSBkaXJ0eSB0aGUgcGFnZXMgYmVmb3JlIHN0YXJ0aW5nIElPLgogICogRHVyaW5nIElPIGNvbXBsZXRpb24sIGFueSBvZiB0aGVzZSBwYWdlcyB3aGljaCBoYXBwZW4gdG8gaGF2ZSBiZWVuIHdyaXR0ZW4KICAqIGJhY2sgd2lsbCBiZSByZWRpcnRpZWQgYnkgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KCkuCisgKgorICogYmlvcyBob2xkIGEgZGlvIHJlZmVyZW5jZSBiZXR3ZWVuIHN1Ym1pdF9iaW8gYW5kIC0+ZW5kX2lvLgogICovCiBzdGF0aWMgdm9pZCBkaW9fYmlvX3N1Ym1pdChzdHJ1Y3QgZGlvICpkaW8pCiB7CkBAIC0zNTQsMTIgKzM0OSwxNCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAliaW8tPmJpX3ByaXZhdGUgPSBkaW87CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGlvLT5iaW9fbG9jaywgZmxhZ3MpOwotCWRpby0+YmlvX2NvdW50Kys7Ci0JZGlvLT5iaW9zX2luX2ZsaWdodCsrOworCWRpby0+cmVmY291bnQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7CisKIAlpZiAoZGlvLT5pc19hc3luYyAmJiBkaW8tPnJ3ID09IFJFQUQpCiAJCWJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTsKKwogCXN1Ym1pdF9iaW8oZGlvLT5ydywgYmlvKTsKIAogCWRpby0+YmlvID0gTlVMTDsKQEAgLTM3NiwyOCArMzczLDM3IEBACiB9CiAKIC8qCi0gKiBXYWl0IGZvciB0aGUgbmV4dCBCSU8gdG8gY29tcGxldGUuICBSZW1vdmUgaXQgYW5kIHJldHVybiBpdC4KKyAqIFdhaXQgZm9yIHRoZSBuZXh0IEJJTyB0byBjb21wbGV0ZS4gIFJlbW92ZSBpdCBhbmQgcmV0dXJuIGl0LiAgTlVMTCBpcworICogcmV0dXJuZWQgb25jZSBhbGwgQklPcyBoYXZlIGJlZW4gY29tcGxldGVkLiAgVGhpcyBtdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UKKyAqIGFsbCBiaW9zIGhhdmUgYmVlbiBpc3N1ZWQgc28gdGhhdCBkaW8tPnJlZmNvdW50IGNhbiBvbmx5IGRlY3JlYXNlLiAgVGhpcworICogcmVxdWlyZXMgdGhhdCB0aGF0IHRoZSBjYWxsZXIgaG9sZCBhIHJlZmVyZW5jZSBvbiB0aGUgZGlvLgogICovCiBzdGF0aWMgc3RydWN0IGJpbyAqZGlvX2F3YWl0X29uZShzdHJ1Y3QgZGlvICpkaW8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYmlvICpiaW87CisJc3RydWN0IGJpbyAqYmlvID0gTlVMTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7Ci0Jd2hpbGUgKGRpby0+YmlvX2xpc3QgPT0gTlVMTCkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCWlmIChkaW8tPmJpb19saXN0ID09IE5VTEwpIHsKLQkJCWRpby0+d2FpdGVyID0gY3VycmVudDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpby0+YmlvX2xvY2ssIGZsYWdzKTsKLQkJCWJsa19ydW5fYWRkcmVzc19zcGFjZShkaW8tPmlub2RlLT5pX21hcHBpbmcpOwotCQkJaW9fc2NoZWR1bGUoKTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7Ci0JCQlkaW8tPndhaXRlciA9IE5VTEw7Ci0JCX0KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCS8qCisJICogV2FpdCBhcyBsb25nIGFzIHRoZSBsaXN0IGlzIGVtcHR5IGFuZCB0aGVyZSBhcmUgYmlvcyBpbiBmbGlnaHQuICBiaW8KKwkgKiBjb21wbGV0aW9uIGRyb3BzIHRoZSBjb3VudCwgbWF5YmUgYWRkcyB0byB0aGUgbGlzdCwgYW5kIHdha2VzIHdoaWxlCisJICogaG9sZGluZyB0aGUgYmlvX2xvY2sgc28gd2UgZG9uJ3QgbmVlZCBzZXRfY3VycmVudF9zdGF0ZSgpJ3MgYmFycmllcgorCSAqIGFuZCBjYW4gY2FsbCBpdCBhZnRlciB0ZXN0aW5nIG91ciBjb25kaXRpb24uCisJICovCisJd2hpbGUgKGRpby0+cmVmY291bnQgPiAxICYmIGRpby0+YmlvX2xpc3QgPT0gTlVMTCkgeworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJZGlvLT53YWl0ZXIgPSBjdXJyZW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7CisJCWlvX3NjaGVkdWxlKCk7CisJCS8qIHdha2UgdXAgc2V0cyB1cyBUQVNLX1JVTk5JTkcgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRpby0+YmlvX2xvY2ssIGZsYWdzKTsKKwkJZGlvLT53YWl0ZXIgPSBOVUxMOwogCX0KLQliaW8gPSBkaW8tPmJpb19saXN0OwotCWRpby0+YmlvX2xpc3QgPSBiaW8tPmJpX3ByaXZhdGU7CisJaWYgKGRpby0+YmlvX2xpc3QpIHsKKwkJYmlvID0gZGlvLT5iaW9fbGlzdDsKKwkJZGlvLT5iaW9fbGlzdCA9IGJpby0+YmlfcHJpdmF0ZTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGlvLT5iaW9fbG9jaywgZmxhZ3MpOwogCXJldHVybiBiaW87CiB9CkBAIC00MjYsMzQgKzQzMiwyNCBAQAogCQl9CiAJCWJpb19wdXQoYmlvKTsKIAl9Ci0JZmluaXNoZWRfb25lX2JpbyhkaW8pOwogCXJldHVybiB1cHRvZGF0ZSA/IDAgOiAtRUlPOwogfQogCiAvKgotICogV2FpdCBvbiBhbmQgcHJvY2VzcyBhbGwgaW4tZmxpZ2h0IEJJT3MuCisgKiBXYWl0IG9uIGFuZCBwcm9jZXNzIGFsbCBpbi1mbGlnaHQgQklPcy4gIFRoaXMgbXVzdCBvbmx5IGJlIGNhbGxlZCBvbmNlCisgKiBhbGwgYmlvcyBoYXZlIGJlZW4gaXNzdWVkIHNvIHRoYXQgdGhlIHJlZmNvdW50IGNhbiBvbmx5IGRlY3JlYXNlLgorICogVGhpcyBqdXN0IHdhaXRzIGZvciBhbGwgYmlvcyB0byBtYWtlIGl0IHRocm91Z2ggZGlvX2Jpb19jb21wbGV0ZS4gIElPCisgKiBlcnJvcnMgYXJlIHByb3BvZ2F0ZWQgdGhyb3VnaCBkaW8tPmlvX2Vycm9yIGFuZCBzaG91bGQgYmUgcHJvcG9nYXRlZCB2aWEKKyAqIGRpb19jb21wbGV0ZSgpLgogICovCi1zdGF0aWMgaW50IGRpb19hd2FpdF9jb21wbGV0aW9uKHN0cnVjdCBkaW8gKmRpbykKK3N0YXRpYyB2b2lkIGRpb19hd2FpdF9jb21wbGV0aW9uKHN0cnVjdCBkaW8gKmRpbykKIHsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChkaW8tPmJpbykKLQkJZGlvX2Jpb19zdWJtaXQoZGlvKTsKLQotCS8qCi0JICogVGhlIGJpb19sb2NrIGlzIG5vdCBoZWxkIGZvciB0aGUgcmVhZCBvZiBiaW9fY291bnQuCi0JICogVGhpcyBpcyBvayBzaW5jZSBpdCBpcyB0aGUgZGlvX2Jpb19jb21wbGV0ZSgpIHRoYXQgY2hhbmdlcwotCSAqIGJpb19jb3VudC4KLQkgKi8KLQl3aGlsZSAoZGlvLT5iaW9fY291bnQpIHsKLQkJc3RydWN0IGJpbyAqYmlvID0gZGlvX2F3YWl0X29uZShkaW8pOwotCQlpbnQgcmV0MjsKLQotCQlyZXQyID0gZGlvX2Jpb19jb21wbGV0ZShkaW8sIGJpbyk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IHJldDI7Ci0JfQotCXJldHVybiByZXQ7CisJc3RydWN0IGJpbyAqYmlvOworCWRvIHsKKwkJYmlvID0gZGlvX2F3YWl0X29uZShkaW8pOworCQlpZiAoYmlvKQorCQkJZGlvX2Jpb19jb21wbGV0ZShkaW8sIGJpbyk7CisJfSB3aGlsZSAoYmlvKTsKIH0KIAogLyoKQEAgLTY3NSw2ICs2NzEsMTMgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChkaW8tPnJ3ICYgV1JJVEUpIHsKKwkJLyoKKwkJICogUmVhZCBhY2NvdW50aW5nIGlzIHBlcmZvcm1lZCBpbiBzdWJtaXRfYmlvKCkKKwkJICovCisJCXRhc2tfaW9fYWNjb3VudF93cml0ZShsZW4pOworCX0KKwogCS8qCiAJICogQ2FuIHdlIGp1c3QgZ3JvdyB0aGUgY3VycmVudCBwYWdlJ3MgcHJlc2VuY2UgaW4gdGhlIGRpbz8KIAkgKi8KQEAgLTk1Myw2ICs5NTYsNyBAQAogCXN0cnVjdCBkaW8gKmRpbykKIHsKIAl1bnNpZ25lZCBsb25nIHVzZXJfYWRkcjsgCisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc2VnOwogCXNzaXplX3QgcmV0ID0gMDsKIAlzc2l6ZV90IHJldDI7CkBAIC05ODMsMTcgKzk4Nyw4IEBACiAJZGlvLT5pb2NiID0gaW9jYjsKIAlkaW8tPmlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAotCS8qCi0JICogQklPIGNvbXBsZXRpb24gc3RhdGUuCi0JICoKLQkgKiAtPmJpb19jb3VudCBzdGFydHMgb3V0IGF0IG9uZSwgYW5kIHdlIGRlY3JlbWVudCBpdCB0byB6ZXJvIGFmdGVyIGFsbAotCSAqIEJJT3MgYXJlIHN1Ym1pdHRlZC4gIFRoaXMgdG8gYXZvaWQgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHJlYWxseSBmYXN0Ci0JICogKG9yIHN5bmNocm9ub3VzKSBkZXZpY2UgY291bGQgdGFrZSB0aGUgY291bnQgdG8gemVybyB3aGlsZSB3ZSdyZQotCSAqIHN0aWxsIHN1Ym1pdHRpbmcgQklPcy4KLQkgKi8KLQlkaW8tPmJpb19jb3VudCA9IDE7Ci0JZGlvLT5iaW9zX2luX2ZsaWdodCA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJmRpby0+YmlvX2xvY2spOworCWRpby0+cmVmY291bnQgPSAxOwogCWRpby0+YmlvX2xpc3QgPSBOVUxMOwogCWRpby0+d2FpdGVyID0gTlVMTDsKIApAQCAtMTA2OSw2ICsxMDY0LDkgQEAKIAlpZiAoZGlvLT5iaW8pCiAJCWRpb19iaW9fc3VibWl0KGRpbyk7CiAKKwkvKiBBbGwgSU8gaXMgbm93IGlzc3VlZCwgc2VuZCBpdCBvbiBpdHMgd2F5ICovCisJYmxrX3J1bl9hZGRyZXNzX3NwYWNlKGlub2RlLT5pX21hcHBpbmcpOworCiAJLyoKIAkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0LCB3ZSByZXR1cm4gc2hvcnQgSU8gZHVlIHRvIGVuZCBvZiBmaWxlLgogCSAqIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byByZWxlYXNlIGFsbCB0aGUgcGFnZXMgd2UgZ290IGhvbGQgb24uCkBAIC0xMDg0LDc0ICsxMDgyLDQxIEBACiAJCW11dGV4X3VubG9jaygmZGlvLT5pbm9kZS0+aV9tdXRleCk7CiAKIAkvKgotCSAqIE9LLCBhbGwgQklPcyBhcmUgc3VibWl0dGVkLCBzbyB3ZSBjYW4gZGVjcmVtZW50IGJpb19jb3VudCB0byB0cnVseQotCSAqIHJlZmxlY3QgdGhlIG51bWJlciBvZiB0by1iZS1wcm9jZXNzZWQgQklPcy4KKwkgKiBUaGUgb25seSB0aW1lIHdlIHdhbnQgdG8gbGVhdmUgYmlvcyBpbiBmbGlnaHQgaXMgd2hlbiBhIHN1Y2Nlc3NmdWwKKwkgKiBwYXJ0aWFsIGFpbyByZWFkIG9yIGZ1bGwgYWlvIHdyaXRlIGhhdmUgYmVlbiBzZXR1cC4gIEluIHRoYXQgY2FzZQorCSAqIGJpbyBjb21wbGV0aW9uIHdpbGwgY2FsbCBhaW9fY29tcGxldGUuICBUaGUgb25seSB0aW1lIGl0J3Mgc2FmZSB0bworCSAqIGNhbGwgYWlvX2NvbXBsZXRlIGlzIHdoZW4gd2UgcmV0dXJuIC1FSU9DQlFVRVVFRCwgc28gd2Uga2V5IG9uIHRoYXQuCisJICogVGhpcyBoYWQgKmJldHRlciogYmUgdGhlIG9ubHkgcGxhY2UgdGhhdCByYWlzZXMgLUVJT0NCUVVFVUVELgogCSAqLwotCWlmIChkaW8tPmlzX2FzeW5jKSB7Ci0JCWludCBzaG91bGRfd2FpdCA9IDA7CisJQlVHX09OKHJldCA9PSAtRUlPQ0JRVUVVRUQpOworCWlmIChkaW8tPmlzX2FzeW5jICYmIHJldCA9PSAwICYmIGRpby0+cmVzdWx0ICYmCisJICAgICgocncgJiBSRUFEKSB8fCAoZGlvLT5yZXN1bHQgPT0gZGlvLT5zaXplKSkpCisJCXJldCA9IC1FSU9DQlFVRVVFRDsKIAotCQlpZiAoZGlvLT5yZXN1bHQgPCBkaW8tPnNpemUgJiYgKHJ3ICYgV1JJVEUpKSB7Ci0JCQlkaW8tPndhaXRlciA9IGN1cnJlbnQ7Ci0JCQlzaG91bGRfd2FpdCA9IDE7Ci0JCX0KLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gZGlvLT5yZXN1bHQ7Ci0JCWZpbmlzaGVkX29uZV9iaW8oZGlvKTsJCS8qIFRoaXMgY2FuIGZyZWUgdGhlIGRpbyAqLwotCQlibGtfcnVuX2FkZHJlc3Nfc3BhY2UoaW5vZGUtPmlfbWFwcGluZyk7Ci0JCWlmIChzaG91bGRfd2FpdCkgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJCS8qCi0JCQkgKiBXYWl0IGZvciBhbHJlYWR5IGlzc3VlZCBJL08gdG8gZHJhaW4gb3V0IGFuZAotCQkJICogcmVsZWFzZSBpdHMgcmVmZXJlbmNlcyB0byB1c2VyLXNwYWNlIHBhZ2VzCi0JCQkgKiBiZWZvcmUgcmV0dXJuaW5nIHRvIGZhbGxiYWNrIG9uIGJ1ZmZlcmVkIEkvTwotCQkJICovCisJaWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpCisJCWRpb19hd2FpdF9jb21wbGV0aW9uKGRpbyk7CiAKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQl3aGlsZSAoZGlvLT5iaW9fY291bnQpIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7Ci0JCQkJaW9fc2NoZWR1bGUoKTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGlvLT5iaW9fbG9jaywgZmxhZ3MpOwotCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpby0+YmlvX2xvY2ssIGZsYWdzKTsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCQlrZnJlZShkaW8pOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3NpemVfdCB0cmFuc2ZlcnJlZCA9IDA7Ci0KLQkJZmluaXNoZWRfb25lX2JpbyhkaW8pOwotCQlyZXQyID0gZGlvX2F3YWl0X2NvbXBsZXRpb24oZGlvKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gcmV0MjsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gZGlvLT5wYWdlX2Vycm9yczsKLQkJaWYgKGRpby0+cmVzdWx0KSB7Ci0JCQlsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCQl0cmFuc2ZlcnJlZCA9IGRpby0+cmVzdWx0OwotCQkJLyoKLQkJCSAqIEFkanVzdCB0aGUgcmV0dXJuIHZhbHVlIGlmIHRoZSByZWFkIGNyb3NzZWQgYQotCQkJICogbm9uLWJsb2NrLWFsaWduZWQgRU9GLgotCQkJICovCi0JCQlpZiAocncgPT0gUkVBRCAmJiAob2Zmc2V0ICsgdHJhbnNmZXJyZWQgPiBpX3NpemUpKQotCQkJCXRyYW5zZmVycmVkID0gaV9zaXplIC0gb2Zmc2V0OwotCQl9Ci0JCWRpb19jb21wbGV0ZShkaW8sIG9mZnNldCwgdHJhbnNmZXJyZWQpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXQgPSB0cmFuc2ZlcnJlZDsKLQotCQkvKiBXZSBjb3VsZCBoYXZlIGFsc28gY29tZSBoZXJlIG9uIGFuIEFJTyBmaWxlIGV4dGVuZCAqLwotCQlpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikgJiYgKHJ3ICYgV1JJVEUpICYmCi0JCSAgICByZXQgPj0gMCAmJiBkaW8tPnJlc3VsdCA9PSBkaW8tPnNpemUpCi0JCQkvKgotCQkJICogRm9yIEFJTyB3cml0ZXMgd2hlcmUgd2UgaGF2ZSBjb21wbGV0ZWQgdGhlCi0JCQkgKiBpL28sIHdlIGhhdmUgdG8gbWFyayB0aGUgdGhlIGFpbyBjb21wbGV0ZS4KLQkJCSAqLwotCQkJYWlvX2NvbXBsZXRlKGlvY2IsIHJldCwgMCk7CisJLyoKKwkgKiBTeW5jIHdpbGwgYWx3YXlzIGJlIGRyb3BwaW5nIHRoZSBmaW5hbCByZWYgYW5kIGNvbXBsZXRpbmcgdGhlCisJICogb3BlcmF0aW9uLiAgQUlPIGNhbiBpZiBpdCB3YXMgYSBicm9rZW4gb3BlcmF0aW9uIGRlc2NyaWJlZCBhYm92ZSBvcgorCSAqIGluIGZhY3QgaWYgYWxsIHRoZSBiaW9zIHJhY2UgdG8gY29tcGxldGUgYmVmb3JlIHdlIGdldCBoZXJlLiAgSW4KKwkgKiB0aGF0IGNhc2UgZGlvX2NvbXBsZXRlKCkgdHJhbnNsYXRlcyB0aGUgRUlPQ0JRVUVVRUQgaW50byB0aGUgcHJvcGVyCisJICogcmV0dXJuIGNvZGUgdGhhdCB0aGUgY2FsbGVyIHdpbGwgaGFuZCB0byBhaW9fY29tcGxldGUoKS4KKwkgKgorCSAqIFRoaXMgaXMgbWFuYWdlZCBieSB0aGUgYmlvX2xvY2sgaW5zdGVhZCBvZiBiZWluZyBhbiBhdG9taWNfdCBzbyB0aGF0CisJICogY29tcGxldGlvbiBwYXRocyBjYW4gZHJvcCB0aGVpciByZWYgYW5kIHVzZSB0aGUgcmVtYWluaW5nIGNvdW50IHRvCisJICogZGVjaWRlIHRvIHdha2UgdGhlIHN1Ym1pc3Npb24gcGF0aCBhdG9taWNhbGx5LgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7CisJcmV0MiA9IC0tZGlvLT5yZWZjb3VudDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaW8tPmJpb19sb2NrLCBmbGFncyk7CisJQlVHX09OKCFkaW8tPmlzX2FzeW5jICYmIHJldDIgIT0gMCk7CisJaWYgKHJldDIgPT0gMCkgeworCQlyZXQgPSBkaW9fY29tcGxldGUoZGlvLCBvZmZzZXQsIHJldCk7CiAJCWtmcmVlKGRpbyk7Ci0JfQorCX0gZWxzZQorCQlCVUdfT04ocmV0ICE9IC1FSU9DQlFVRVVFRCk7CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9kbG0vbG93Y29tbXMtdGNwLmMgYi9mcy9kbG0vbG93Y29tbXMtdGNwLmMKaW5kZXggOGYyNzkxZi4uOWJlM2E0NCAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLXRjcC5jCisrKyBiL2ZzL2RsbS9sb3djb21tcy10Y3AuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAvKiBBbiBhcnJheSBvZiBwb2ludGVycyB0byBjb25uZWN0aW9ucywgaW5kZXhlZCBieSBOT0RFSUQgKi8KIHN0YXRpYyBzdHJ1Y3QgY29ubmVjdGlvbiAqKmNvbm5lY3Rpb25zOwogc3RhdGljIERFQ0xBUkVfTVVURVgoY29ubmVjdGlvbnNfbG9jayk7Ci1zdGF0aWMga21lbV9jYWNoZV90ICpjb25fY2FjaGU7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmNvbl9jYWNoZTsKIHN0YXRpYyBpbnQgY29ubl9hcnJheV9zaXplOwogCiAvKiBMaXN0IG9mIHNvY2tldHMgdGhhdCBoYXZlIHJlYWRzIHBlbmRpbmcgKi8KZGlmZiAtLWdpdCBhL2ZzL2Rub3RpZnkuYyBiL2ZzL2Rub3RpZnkuYwppbmRleCAxZjI2YTJiLi45MzY0MDlmIDEwMDY0NAotLS0gYS9mcy9kbm90aWZ5LmMKKysrIGIvZnMvZG5vdGlmeS5jCkBAIC00Miw3ICs0Miw3IEBACiAJc3RydWN0IGRub3RpZnlfc3RydWN0ICoqcHJldjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCi0JaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQlyZXR1cm47CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKQEAgLTc0LDcgKzc0LDcgQEAKIAl9CiAJaWYgKCFkaXJfbm90aWZ5X2VuYWJsZSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQlyZXR1cm4gLUVOT1RESVI7CiAJZG4gPSBrbWVtX2NhY2hlX2FsbG9jKGRuX2NhY2hlLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2ZzL2RxdW90LmMgYi9mcy9kcXVvdC5jCmluZGV4IGY5Y2Q1ZTIuLjA5NTJjYzQgMTAwNjQ0Ci0tLSBhL2ZzL2RxdW90LmMKKysrIGIvZnMvZHF1b3QuYwpAQCAtNjk0LDkgKzY5NCw5IEBACiAJZmlsZV9saXN0X2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoKHAsICZzYi0+c19maWxlcykgewogCQlzdHJ1Y3QgZmlsZSAqZmlscCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGZpbGUsIGZfdS5mdV9saXN0KTsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICYmIGRxaW5pdF9uZWVkZWQoaW5vZGUsIHR5cGUpKSB7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBkZ2V0KGZpbHAtPmZfZGVudHJ5KTsKKwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGRnZXQoZmlscC0+Zl9wYXRoLmRlbnRyeSk7CiAJCQlmaWxlX2xpc3RfdW5sb2NrKCk7CiAJCQlzYi0+ZHFfb3AtPmluaXRpYWxpemUoaW5vZGUsIHR5cGUpOwogCQkJZHB1dChkZW50cnkpOwpAQCAtODI4LDYgKzgyOCw3IEBACiBzdGF0aWMgdm9pZCBwcmludF93YXJuaW5nKHN0cnVjdCBkcXVvdCAqZHF1b3QsIGNvbnN0IGNoYXIgd2FybnR5cGUpCiB7CiAJY2hhciAqbXNnID0gTlVMTDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBmbGFnID0gKHdhcm50eXBlID09IEJIQVJEV0FSTiB8fCB3YXJudHlwZSA9PSBCU09GVExPTkdXQVJOKSA/IERRX0JMS1NfQiA6CiAJICAoKHdhcm50eXBlID09IElIQVJEV0FSTiB8fCB3YXJudHlwZSA9PSBJU09GVExPTkdXQVJOKSA/IERRX0lOT0RFU19CIDogMCk7CiAKQEAgLTgzNSwxNCArODM2LDE1IEBACiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJnR0eV9tdXRleCk7Ci0JaWYgKCFjdXJyZW50LT5zaWduYWwtPnR0eSkKKwl0dHkgPSBnZXRfY3VycmVudF90dHkoKTsKKwlpZiAoIXR0eSkKIAkJZ290byBvdXRfbG9jazsKLQl0dHlfd3JpdGVfbWVzc2FnZShjdXJyZW50LT5zaWduYWwtPnR0eSwgZHF1b3QtPmRxX3NiLT5zX2lkKTsKKwl0dHlfd3JpdGVfbWVzc2FnZSh0dHksIGRxdW90LT5kcV9zYi0+c19pZCk7CiAJaWYgKHdhcm50eXBlID09IElTT0ZUV0FSTiB8fCB3YXJudHlwZSA9PSBCU09GVFdBUk4pCi0JCXR0eV93cml0ZV9tZXNzYWdlKGN1cnJlbnQtPnNpZ25hbC0+dHR5LCAiOiB3YXJuaW5nLCAiKTsKKwkJdHR5X3dyaXRlX21lc3NhZ2UodHR5LCAiOiB3YXJuaW5nLCAiKTsKIAllbHNlCi0JCXR0eV93cml0ZV9tZXNzYWdlKGN1cnJlbnQtPnNpZ25hbC0+dHR5LCAiOiB3cml0ZSBmYWlsZWQsICIpOwotCXR0eV93cml0ZV9tZXNzYWdlKGN1cnJlbnQtPnNpZ25hbC0+dHR5LCBxdW90YXR5cGVzW2RxdW90LT5kcV90eXBlXSk7CisJCXR0eV93cml0ZV9tZXNzYWdlKHR0eSwgIjogd3JpdGUgZmFpbGVkLCAiKTsKKwl0dHlfd3JpdGVfbWVzc2FnZSh0dHksIHF1b3RhdHlwZXNbZHF1b3QtPmRxX3R5cGVdKTsKIAlzd2l0Y2ggKHdhcm50eXBlKSB7CiAJCWNhc2UgSUhBUkRXQVJOOgogCQkJbXNnID0gIiBmaWxlIGxpbWl0IHJlYWNoZWQuXHJcbiI7CkBAIC04NjMsNyArODY1LDcgQEAKIAkJCW1zZyA9ICIgYmxvY2sgcXVvdGEgZXhjZWVkZWQuXHJcbiI7CiAJCQlicmVhazsKIAl9Ci0JdHR5X3dyaXRlX21lc3NhZ2UoY3VycmVudC0+c2lnbmFsLT50dHksIG1zZyk7CisJdHR5X3dyaXRlX21lc3NhZ2UodHR5LCBtc2cpOwogb3V0X2xvY2s6CiAJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZGVudHJ5LmMgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwppbmRleCA1MmQxZTM2Li4zMjllZmNkIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9kZW50cnkuYworKysgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdGFjay5oPgogI2luY2x1ZGUgImVjcnlwdGZzX2tlcm5lbC5oIgogCiAvKioKQEAgLTYxLDcgKzYyLDcgQEAKIAkJc3RydWN0IGlub2RlICpsb3dlcl9pbm9kZSA9CiAJCQllY3J5cHRmc19pbm9kZV90b19sb3dlcihkZW50cnktPmRfaW5vZGUpOwogCi0JCWVjcnlwdGZzX2NvcHlfYXR0cl9hbGwoZGVudHJ5LT5kX2lub2RlLCBsb3dlcl9pbm9kZSk7CisJCWZzc3RhY2tfY29weV9hdHRyX2FsbChkZW50cnktPmRfaW5vZGUsIGxvd2VyX2lub2RlLCBOVUxMKTsKIAl9CiBvdXQ6CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmggYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAppbmRleCBmOTkyNTMzLi5hZmI2NGJkIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAorKysgYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaApAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVkZSA8a2V5cy91c2VyLXR5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0YWNrLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCiAvKiBWZXJzaW9uIHZlcmlmaWNhdGlvbiBmb3Igc2hhcmVkIGRhdGEgc3RydWN0dXJlcyB3LyB1c2Vyc3BhY2UgKi8KQEAgLTIyNyw4ICsyMjksNyBAQAogLyogZGVudHJ5IHByaXZhdGUgZGF0YS4gRWFjaCBkZW50cnkgbXVzdCBrZWVwIHRyYWNrIG9mIGEgbG93ZXIKICAqIHZmc21vdW50IHRvby4gKi8KIHN0cnVjdCBlY3J5cHRmc19kZW50cnlfaW5mbyB7Ci0Jc3RydWN0IGRlbnRyeSAqd2RpX2RlbnRyeTsKLQlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udDsKKwlzdHJ1Y3QgcGF0aCBsb3dlcl9wYXRoOwogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0OwogfTsKIApAQCAtMzU1LDI2ICszNTYsMjYgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqCiBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCXJldHVybiAoKHN0cnVjdCBlY3J5cHRmc19kZW50cnlfaW5mbyAqKWRlbnRyeS0+ZF9mc2RhdGEpLT53ZGlfZGVudHJ5OworCXJldHVybiAoKHN0cnVjdCBlY3J5cHRmc19kZW50cnlfaW5mbyAqKWRlbnRyeS0+ZF9mc2RhdGEpLT5sb3dlcl9wYXRoLmRlbnRyeTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBlY3J5cHRmc19zZXRfZGVudHJ5X2xvd2VyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5KQogewotCSgoc3RydWN0IGVjcnlwdGZzX2RlbnRyeV9pbmZvICopZGVudHJ5LT5kX2ZzZGF0YSktPndkaV9kZW50cnkgPQorCSgoc3RydWN0IGVjcnlwdGZzX2RlbnRyeV9pbmZvICopZGVudHJ5LT5kX2ZzZGF0YSktPmxvd2VyX3BhdGguZGVudHJ5ID0KIAkJbG93ZXJfZGVudHJ5OwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2ZnNtb3VudCAqCiBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlyZXR1cm4gKChzdHJ1Y3QgZWNyeXB0ZnNfZGVudHJ5X2luZm8gKilkZW50cnktPmRfZnNkYXRhKS0+bG93ZXJfbW50OworCXJldHVybiAoKHN0cnVjdCBlY3J5cHRmc19kZW50cnlfaW5mbyAqKWRlbnRyeS0+ZF9mc2RhdGEpLT5sb3dlcl9wYXRoLm1udDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBlY3J5cHRmc19zZXRfZGVudHJ5X2xvd2VyX21udChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50KQogewotCSgoc3RydWN0IGVjcnlwdGZzX2RlbnRyeV9pbmZvICopZGVudHJ5LT5kX2ZzZGF0YSktPmxvd2VyX21udCA9CisJKChzdHJ1Y3QgZWNyeXB0ZnNfZGVudHJ5X2luZm8gKilkZW50cnktPmRfZnNkYXRhKS0+bG93ZXJfcGF0aC5tbnQgPQogCQlsb3dlcl9tbnQ7CiB9CiAKQEAgLTQxMyw5ICs0MTQsNiBAQAogCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuZ3RoLAogCQkJICAgICBjaGFyICoqZW5jb2RlZF9uYW1lKTsKIHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2xvd2VyX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICp0aGlzX2RlbnRyeSk7Ci12b2lkIGVjcnlwdGZzX2NvcHlfYXR0cl9hdGltZShzdHJ1Y3QgaW5vZGUgKmRlc3QsIGNvbnN0IHN0cnVjdCBpbm9kZSAqc3JjKTsKLXZvaWQgZWNyeXB0ZnNfY29weV9hdHRyX2FsbChzdHJ1Y3QgaW5vZGUgKmRlc3QsIGNvbnN0IHN0cnVjdCBpbm9kZSAqc3JjKTsKLXZvaWQgZWNyeXB0ZnNfY29weV9pbm9kZV9zaXplKHN0cnVjdCBpbm9kZSAqZHN0LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKnNyYyk7CiB2b2lkIGVjcnlwdGZzX2R1bXBfaGV4KGNoYXIgKmRhdGEsIGludCBieXRlcyk7CiBpbnQgdmlydF90b19zY2F0dGVybGlzdChjb25zdCB2b2lkICphZGRyLCBpbnQgc2l6ZSwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKIAkJCWludCBzZ19zaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2ZpbGUuYyBiL2ZzL2VjcnlwdGZzL2ZpbGUuYwppbmRleCA0MjA5OWU3Li5jNWEyZTUyIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9maWxlLmMKKysrIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0YWNrLmg+CiAjaW5jbHVkZSAiZWNyeXB0ZnNfa2VybmVsLmgiCiAKIC8qKgpAQCAtNzUsNyArNzYsNyBAQAogCX0KIAllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIm5ld19lbmRfcG9zID0gWzB4JS4xNnhdXG4iLCBuZXdfZW5kX3Bvcyk7CiAJaWYgKGV4cGFuZGluZ19maWxlKSB7Ci0JCXJjID0gZWNyeXB0ZnNfdHJ1bmNhdGUoZmlsZS0+Zl9kZW50cnksIG5ld19lbmRfcG9zKTsKKwkJcmMgPSBlY3J5cHRmc190cnVuY2F0ZShmaWxlLT5mX3BhdGguZGVudHJ5LCBuZXdfZW5kX3Bvcyk7CiAJCWlmIChyYykgewogCQkJcnYgPSByYzsKIAkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIG9uIGF0dGVtcHQgdG8gIgpAQCAtMTE2LDggKzExNyw4IEBACiAJaWYgKC1FSU9DQlFVRVVFRCA9PSByYykKIAkJcmMgPSB3YWl0X29uX3N5bmNfa2lvY2IoaW9jYik7CiAJaWYgKHJjID49IDApIHsKLQkJbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGZpbGUtPmZfZGVudHJ5KTsKLQkJbG93ZXJfdmZzbW91bnQgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KGZpbGUtPmZfZGVudHJ5KTsKKwkJbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGZpbGUtPmZfcGF0aC5kZW50cnkpOworCQlsb3dlcl92ZnNtb3VudCA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCXRvdWNoX2F0aW1lKGxvd2VyX3Zmc21vdW50LCBsb3dlcl9kZW50cnkpOwogCX0KIAlyZXR1cm4gcmM7CkBAIC0xNzYsMTAgKzE3NywxMCBAQAogCiAJbG93ZXJfZmlsZSA9IGVjcnlwdGZzX2ZpbGVfdG9fbG93ZXIoZmlsZSk7CiAJbG93ZXJfZmlsZS0+Zl9wb3MgPSBmaWxlLT5mX3BvczsKLQlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAltZW1zZXQoJmJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogCWJ1Zi5kaXJlbnQgPSBkaXJlbnQ7Ci0JYnVmLmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCWJ1Zi5kZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCWJ1Zi5maWxsZGlyID0gZmlsbGRpcjsKIHJldHJ5OgogCWJ1Zi5maWxsZGlyX2NhbGxlZCA9IDA7CkBAIC0xOTIsNyArMTkzLDcgQEAKIAkJZ290byByZXRyeTsKIAlmaWxlLT5mX3BvcyA9IGxvd2VyX2ZpbGUtPmZfcG9zOwogCWlmIChyYyA+PSAwKQotCQllY3J5cHRmc19jb3B5X2F0dHJfYXRpbWUoaW5vZGUsIGxvd2VyX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwkJZnNzdGFja19jb3B5X2F0dHJfYXRpbWUoaW5vZGUsIGxvd2VyX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjM5LDcgKzI0MCw3IEBACiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCA9IE5VTEw7CiAJc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQ7Ci0Jc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAkvKiBQcml2YXRlIHZhbHVlIG9mIGVjcnlwdGZzX2RlbnRyeSBhbGxvY2F0ZWQgaW4KIAkgKiBlY3J5cHRmc19sb29rdXAoKSAqLwogCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeSA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihlY3J5cHRmc19kZW50cnkpOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggOGExOTQ1YS4uMTFmNWU1MCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuYworKysgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0YWNrLmg+CiAjaW5jbHVkZSAiZWNyeXB0ZnNfa2VybmVsLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb2NrX3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCkBAIC01Myw0OCArNTQsNiBAQAogCWRwdXQoZGlyKTsKIH0KIAotdm9pZCBlY3J5cHRmc19jb3B5X2lub2RlX3NpemUoc3RydWN0IGlub2RlICpkc3QsIGNvbnN0IHN0cnVjdCBpbm9kZSAqc3JjKQotewotCWlfc2l6ZV93cml0ZShkc3QsIGlfc2l6ZV9yZWFkKChzdHJ1Y3QgaW5vZGUgKilzcmMpKTsKLQlkc3QtPmlfYmxvY2tzID0gc3JjLT5pX2Jsb2NrczsKLX0KLQotdm9pZCBlY3J5cHRmc19jb3B5X2F0dHJfYXRpbWUoc3RydWN0IGlub2RlICpkZXN0LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKnNyYykKLXsKLQlkZXN0LT5pX2F0aW1lID0gc3JjLT5pX2F0aW1lOwotfQotCi1zdGF0aWMgdm9pZCBlY3J5cHRmc19jb3B5X2F0dHJfdGltZXMoc3RydWN0IGlub2RlICpkZXN0LAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGlub2RlICpzcmMpCi17Ci0JZGVzdC0+aV9hdGltZSA9IHNyYy0+aV9hdGltZTsKLQlkZXN0LT5pX210aW1lID0gc3JjLT5pX210aW1lOwotCWRlc3QtPmlfY3RpbWUgPSBzcmMtPmlfY3RpbWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGVjcnlwdGZzX2NvcHlfYXR0cl90aW1lc2l6ZXMoc3RydWN0IGlub2RlICpkZXN0LAotCQkJCQkgY29uc3Qgc3RydWN0IGlub2RlICpzcmMpCi17Ci0JZGVzdC0+aV9hdGltZSA9IHNyYy0+aV9hdGltZTsKLQlkZXN0LT5pX210aW1lID0gc3JjLT5pX210aW1lOwotCWRlc3QtPmlfY3RpbWUgPSBzcmMtPmlfY3RpbWU7Ci0JZWNyeXB0ZnNfY29weV9pbm9kZV9zaXplKGRlc3QsIHNyYyk7Ci19Ci0KLXZvaWQgZWNyeXB0ZnNfY29weV9hdHRyX2FsbChzdHJ1Y3QgaW5vZGUgKmRlc3QsIGNvbnN0IHN0cnVjdCBpbm9kZSAqc3JjKQotewotCWRlc3QtPmlfbW9kZSA9IHNyYy0+aV9tb2RlOwotCWRlc3QtPmlfbmxpbmsgPSBzcmMtPmlfbmxpbms7Ci0JZGVzdC0+aV91aWQgPSBzcmMtPmlfdWlkOwotCWRlc3QtPmlfZ2lkID0gc3JjLT5pX2dpZDsKLQlkZXN0LT5pX3JkZXYgPSBzcmMtPmlfcmRldjsKLQlkZXN0LT5pX2F0aW1lID0gc3JjLT5pX2F0aW1lOwotCWRlc3QtPmlfbXRpbWUgPSBzcmMtPmlfbXRpbWU7Ci0JZGVzdC0+aV9jdGltZSA9IHNyYy0+aV9jdGltZTsKLQlkZXN0LT5pX2Jsa2JpdHMgPSBzcmMtPmlfYmxrYml0czsKLQlkZXN0LT5pX2ZsYWdzID0gc3JjLT5pX2ZsYWdzOwotfQotCiAvKioKICAqIGVjcnlwdGZzX2NyZWF0ZV91bmRlcmx5aW5nX2ZpbGUKICAqIEBsb3dlcl9kaXJfaW5vZGU6IGlub2RlIG9mIHRoZSBwYXJlbnQgaW4gdGhlIGxvd2VyIGZzIG9mIHRoZSBuZXcgZmlsZQpAQCAtMTcxLDggKzEzMCw4IEBACiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkZhaWx1cmUgaW4gZWNyeXB0ZnNfaW50ZXJwb3NlXG4iKTsKIAkJZ290byBvdXRfbG9jazsKIAl9Ci0JZWNyeXB0ZnNfY29weV9hdHRyX3RpbWVzaXplcyhkaXJlY3RvcnlfaW5vZGUsCi0JCQkJICAgICBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlKTsKKwlmc3N0YWNrX2NvcHlfYXR0cl90aW1lcyhkaXJlY3RvcnlfaW5vZGUsIGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUpOworCWZzc3RhY2tfY29weV9pbm9kZV9zaXplKGRpcmVjdG9yeV9pbm9kZSwgbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CiBvdXRfbG9jazoKIAl1bmxvY2tfZGlyKGxvd2VyX2Rpcl9kZW50cnkpOwogb3V0OgpAQCAtMTk2LDcgKzE1NSw3IEBACiAJc3RydWN0IGVjcnlwdGZzX2ZpbGVfaW5mbyB0bXBfZmlsZV9pbmZvOwogCiAJbWVtc2V0KCZmYWtlX2ZpbGUsIDAsIHNpemVvZihmYWtlX2ZpbGUpKTsKLQlmYWtlX2ZpbGUuZl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnk7CisJZmFrZV9maWxlLmZfcGF0aC5kZW50cnkgPSBlY3J5cHRmc19kZW50cnk7CiAJbWVtc2V0KCZ0bXBfZmlsZV9pbmZvLCAwLCBzaXplb2YodG1wX2ZpbGVfaW5mbykpOwogCWVjcnlwdGZzX3NldF9maWxlX3ByaXZhdGUoJmZha2VfZmlsZSwgJnRtcF9maWxlX2luZm8pOwogCWVjcnlwdGZzX3NldF9maWxlX2xvd2VyKCZmYWtlX2ZpbGUsIGxvd2VyX2ZpbGUpOwpAQCAtMzY1LDcgKzMyNCw3IEBACiAgICAgICAgCQkiZF9uYW1lLm5hbWUgPSBbJXNdXG4iLCBsb3dlcl9kZW50cnksCiAJCWxvd2VyX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCWxvd2VyX2lub2RlID0gbG93ZXJfZGVudHJ5LT5kX2lub2RlOwotCWVjcnlwdGZzX2NvcHlfYXR0cl9hdGltZShkaXIsIGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUpOworCWZzc3RhY2tfY29weV9hdHRyX2F0aW1lKGRpciwgbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CiAJQlVHX09OKCFhdG9taWNfcmVhZCgmbG93ZXJfZGVudHJ5LT5kX2NvdW50KSk7CiAJZWNyeXB0ZnNfc2V0X2RlbnRyeV9wcml2YXRlKGRlbnRyeSwKIAkJCQkgICAga21lbV9jYWNoZV9hbGxvYyhlY3J5cHRmc19kZW50cnlfaW5mb19jYWNoZSwKQEAgLTQ2Miw3ICs0MjEsOCBAQAogCXJjID0gZWNyeXB0ZnNfaW50ZXJwb3NlKGxvd2VyX25ld19kZW50cnksIG5ld19kZW50cnksIGRpci0+aV9zYiwgMCk7CiAJaWYgKHJjKQogCQlnb3RvIG91dF9sb2NrOwotCWVjcnlwdGZzX2NvcHlfYXR0cl90aW1lc2l6ZXMoZGlyLCBsb3dlcl9uZXdfZGVudHJ5LT5kX2lub2RlKTsKKwlmc3N0YWNrX2NvcHlfYXR0cl90aW1lcyhkaXIsIGxvd2VyX25ld19kZW50cnktPmRfaW5vZGUpOworCWZzc3RhY2tfY29weV9pbm9kZV9zaXplKGRpciwgbG93ZXJfbmV3X2RlbnRyeS0+ZF9pbm9kZSk7CiAJb2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9ubGluayA9CiAJCWVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKG9sZF9kZW50cnktPmRfaW5vZGUpLT5pX25saW5rOwogCWlfc2l6ZV93cml0ZShuZXdfZGVudHJ5LT5kX2lub2RlLCBmaWxlX3NpemVfc2F2ZSk7CkBAIC00ODgsNyArNDQ4LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiB2ZnNfdW5saW5rOyByYyA9IFslZF1cbiIsIHJjKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQllY3J5cHRmc19jb3B5X2F0dHJfdGltZXMoZGlyLCBsb3dlcl9kaXJfaW5vZGUpOworCWZzc3RhY2tfY29weV9hdHRyX3RpbWVzKGRpciwgbG93ZXJfZGlyX2lub2RlKTsKIAlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPQogCQllY3J5cHRmc19pbm9kZV90b19sb3dlcihkZW50cnktPmRfaW5vZGUpLT5pX25saW5rOwogCWRlbnRyeS0+ZF9pbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZTsKQEAgLTUyNyw3ICs0ODcsOCBAQAogCXJjID0gZWNyeXB0ZnNfaW50ZXJwb3NlKGxvd2VyX2RlbnRyeSwgZGVudHJ5LCBkaXItPmlfc2IsIDApOwogCWlmIChyYykKIAkJZ290byBvdXRfbG9jazsKLQllY3J5cHRmc19jb3B5X2F0dHJfdGltZXNpemVzKGRpciwgbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CisJZnNzdGFja19jb3B5X2F0dHJfdGltZXMoZGlyLCBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlKTsKKwlmc3N0YWNrX2NvcHlfaW5vZGVfc2l6ZShkaXIsIGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUpOwogb3V0X2xvY2s6CiAJdW5sb2NrX2Rpcihsb3dlcl9kaXJfZGVudHJ5KTsKIAlkcHV0KGxvd2VyX2RlbnRyeSk7CkBAIC01NTAsNyArNTExLDggQEAKIAlyYyA9IGVjcnlwdGZzX2ludGVycG9zZShsb3dlcl9kZW50cnksIGRlbnRyeSwgZGlyLT5pX3NiLCAwKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwotCWVjcnlwdGZzX2NvcHlfYXR0cl90aW1lc2l6ZXMoZGlyLCBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlKTsKKwlmc3N0YWNrX2NvcHlfYXR0cl90aW1lcyhkaXIsIGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUpOworCWZzc3RhY2tfY29weV9pbm9kZV9zaXplKGRpciwgbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CiAJZGlyLT5pX25saW5rID0gbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZS0+aV9ubGluazsKIG91dDoKIAl1bmxvY2tfZGlyKGxvd2VyX2Rpcl9kZW50cnkpOwpAQCAtNTczLDcgKzUzNSw3IEBACiAJZHB1dChsb3dlcl9kZW50cnkpOwogCWlmICghcmMpCiAJCWRfZGVsZXRlKGxvd2VyX2RlbnRyeSk7Ci0JZWNyeXB0ZnNfY29weV9hdHRyX3RpbWVzKGRpciwgbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CisJZnNzdGFja19jb3B5X2F0dHJfdGltZXMoZGlyLCBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlKTsKIAlkaXItPmlfbmxpbmsgPSBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLT5pX25saW5rOwogCXVubG9ja19kaXIobG93ZXJfZGlyX2RlbnRyeSk7CiAJaWYgKCFyYykKQEAgLTU5Nyw3ICs1NTksOCBAQAogCXJjID0gZWNyeXB0ZnNfaW50ZXJwb3NlKGxvd2VyX2RlbnRyeSwgZGVudHJ5LCBkaXItPmlfc2IsIDApOwogCWlmIChyYykKIAkJZ290byBvdXQ7Ci0JZWNyeXB0ZnNfY29weV9hdHRyX3RpbWVzaXplcyhkaXIsIGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUpOworCWZzc3RhY2tfY29weV9hdHRyX3RpbWVzKGRpciwgbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CisJZnNzdGFja19jb3B5X2lub2RlX3NpemUoZGlyLCBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlKTsKIG91dDoKIAl1bmxvY2tfZGlyKGxvd2VyX2Rpcl9kZW50cnkpOwogCWlmICghZGVudHJ5LT5kX2lub2RlKQpAQCAtNjI2LDkgKzU4OSw5IEBACiAJCQlsb3dlcl9uZXdfZGlyX2RlbnRyeS0+ZF9pbm9kZSwgbG93ZXJfbmV3X2RlbnRyeSk7CiAJaWYgKHJjKQogCQlnb3RvIG91dF9sb2NrOwotCWVjcnlwdGZzX2NvcHlfYXR0cl9hbGwobmV3X2RpciwgbG93ZXJfbmV3X2Rpcl9kZW50cnktPmRfaW5vZGUpOworCWZzc3RhY2tfY29weV9hdHRyX2FsbChuZXdfZGlyLCBsb3dlcl9uZXdfZGlyX2RlbnRyeS0+ZF9pbm9kZSwgTlVMTCk7CiAJaWYgKG5ld19kaXIgIT0gb2xkX2RpcikKLQkJZWNyeXB0ZnNfY29weV9hdHRyX2FsbChvbGRfZGlyLCBsb3dlcl9vbGRfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CisJCWZzc3RhY2tfY29weV9hdHRyX2FsbChvbGRfZGlyLCBsb3dlcl9vbGRfZGlyX2RlbnRyeS0+ZF9pbm9kZSwgTlVMTCk7CiBvdXRfbG9jazoKIAl1bmxvY2tfcmVuYW1lKGxvd2VyX29sZF9kaXJfZGVudHJ5LCBsb3dlcl9uZXdfZGlyX2RlbnRyeSk7CiAJZHB1dChsb3dlcl9uZXdfZGVudHJ5LT5kX3BhcmVudCk7CkBAIC02ODQsOCArNjQ3LDggQEAKIAkJCQlyYyA9IC1FRkFVTFQ7CiAJCX0KIAkJa2ZyZWUoZGVjb2RlZF9uYW1lKTsKLQkJZWNyeXB0ZnNfY29weV9hdHRyX2F0aW1lKGRlbnRyeS0+ZF9pbm9kZSwKLQkJCQkJIGxvd2VyX2RlbnRyeS0+ZF9pbm9kZSk7CisJCWZzc3RhY2tfY29weV9hdHRyX2F0aW1lKGRlbnRyeS0+ZF9pbm9kZSwKKwkJCQkJbG93ZXJfZGVudHJ5LT5kX2lub2RlKTsKIAl9CiBvdXRfZnJlZV9sb3dlcl9idWY6CiAJa2ZyZWUobG93ZXJfYnVmKTsKQEAgLTc5MSw3ICs3NTQsNyBAQAogCSAqIHRoZSBmaWxlIGluIHRoZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc28gdGhhdCB0aGUKIAkgKiB0cnVuY2F0aW9uIGhhcyBhbiBlZmZlY3QgdGhlcmUgYXMgd2VsbC4gKi8KIAltZW1zZXQoJmZha2VfZWNyeXB0ZnNfZmlsZSwgMCwgc2l6ZW9mKGZha2VfZWNyeXB0ZnNfZmlsZSkpOwotCWZha2VfZWNyeXB0ZnNfZmlsZS5mX2RlbnRyeSA9IGRlbnRyeTsKKwlmYWtlX2VjcnlwdGZzX2ZpbGUuZl9wYXRoLmRlbnRyeSA9IGRlbnRyeTsKIAkvKiBSZWxlYXNlZCBhdCBvdXRfZnJlZTogbGFiZWwgKi8KIAllY3J5cHRmc19zZXRfZmlsZV9wcml2YXRlKCZmYWtlX2VjcnlwdGZzX2ZpbGUsCiAJCQkJICBrbWVtX2NhY2hlX2FsbG9jKGVjcnlwdGZzX2ZpbGVfaW5mb19jYWNoZSwKQEAgLTkxNSw3ICs4NzgsNyBAQAogCX0KIAlyYyA9IG5vdGlmeV9jaGFuZ2UobG93ZXJfZGVudHJ5LCBpYSk7CiBvdXQ6Ci0JZWNyeXB0ZnNfY29weV9hdHRyX2FsbChpbm9kZSwgbG93ZXJfaW5vZGUpOworCWZzc3RhY2tfY29weV9hdHRyX2FsbChpbm9kZSwgbG93ZXJfaW5vZGUsIE5VTEwpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbWFpbi5jIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCmluZGV4IDNlZGUxMmIuLmQwNTQxYWUgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21haW4uYworKysgYi9mcy9lY3J5cHRmcy9tYWluLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgva2V5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RhY2suaD4KICNpbmNsdWRlICJlY3J5cHRmc19rZXJuZWwuaCIKIAogLyoqCkBAIC0xMTIsMTAgKzExMywxMCBAQAogCQlkX2FkZChkZW50cnksIGlub2RlKTsKIAllbHNlCiAJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JZWNyeXB0ZnNfY29weV9hdHRyX2FsbChpbm9kZSwgbG93ZXJfaW5vZGUpOworCWZzc3RhY2tfY29weV9hdHRyX2FsbChpbm9kZSwgbG93ZXJfaW5vZGUsIE5VTEwpOwogCS8qIFRoaXMgc2l6ZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGZvciByZWFsIGZpbGVzIHcvIGhlYWRlcnMgYW5kCiAJICogb3RoZXIgbWV0YWRhdGEgKi8KLQllY3J5cHRmc19jb3B5X2lub2RlX3NpemUoaW5vZGUsIGxvd2VyX2lub2RlKTsKKwlmc3N0YWNrX2NvcHlfaW5vZGVfc2l6ZShpbm9kZSwgbG93ZXJfaW5vZGUpOwogb3V0OgogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21tYXAuYyBiL2ZzL2VjcnlwdGZzL21tYXAuYwppbmRleCA5MjRkZDkwLi4wNjg0M2QyIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBAIC01MSw3ICs1MSw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAotCWRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCWRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CiAJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCBpbmRleCwKQEAgLTg0LDcgKzg0LDcgQEAKIGludCBlY3J5cHRmc19maWxsX3plcm9zKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgbmV3X2xlbmd0aCkKIHsKIAlpbnQgcmMgPSAwOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlwZ29mZl90IG9sZF9lbmRfcGFnZV9pbmRleCA9IDA7CiAJcGdvZmZfdCBpbmRleCA9IG9sZF9lbmRfcGFnZV9pbmRleDsKQEAgLTIxOCw3ICsyMTgsNyBAQAogCWNoYXIgKmxvd2VyX3BhZ2VfZGF0YTsKIAljb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICpsb3dlcl9hX29wczsKIAotCWRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCWRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJbG93ZXJfZmlsZSA9IGVjcnlwdGZzX2ZpbGVfdG9fbG93ZXIoZmlsZSk7CiAJbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGRlbnRyeSk7CiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CkBAIC0yNzUsOSArMjc1LDkgQEAKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0OwogCi0JQlVHX09OKCEoZmlsZSAmJiBmaWxlLT5mX2RlbnRyeSAmJiBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkpOwotCWNyeXB0X3N0YXQgPQotCQkmZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSktPmNyeXB0X3N0YXQ7CisJQlVHX09OKCEoZmlsZSAmJiBmaWxlLT5mX3BhdGguZGVudHJ5ICYmIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKKwljcnlwdF9zdGF0ID0gJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkKKwkJCS0+Y3J5cHRfc3RhdDsKIAlpZiAoIWNyeXB0X3N0YXQKIAkgICAgfHwgIUVDUllQVEZTX0NIRUNLX0ZMQUcoY3J5cHRfc3RhdC0+ZmxhZ3MsIEVDUllQVEZTX0VOQ1JZUFRFRCkKIAkgICAgfHwgRUNSWVBURlNfQ0hFQ0tfRkxBRyhjcnlwdF9zdGF0LT5mbGFncywgRUNSWVBURlNfTkVXX0ZJTEUpKSB7CkBAIC02MzgsOCArNjM4LDggQEAKIAlsb3dlcl9pbm9kZSA9IGVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKGlub2RlKTsKIAlsb3dlcl9maWxlID0gZWNyeXB0ZnNfZmlsZV90b19sb3dlcihmaWxlKTsKIAltdXRleF9sb2NrKCZsb3dlcl9pbm9kZS0+aV9tdXRleCk7Ci0JY3J5cHRfc3RhdCA9Ci0JCSZlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKS0+Y3J5cHRfc3RhdDsKKwljcnlwdF9zdGF0ID0gJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkKKwkJCQktPmNyeXB0X3N0YXQ7CiAJaWYgKEVDUllQVEZTX0NIRUNLX0ZMQUcoY3J5cHRfc3RhdC0+ZmxhZ3MsIEVDUllQVEZTX05FV19GSUxFKSkgewogCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIkVDUllQVEZTX05FV19GSUxFIGZsYWcgc2V0IGluICIKIAkJCSJjcnlwdF9zdGF0IGF0IG1lbW9yeSBsb2NhdGlvbiBbJXBdXG4iLCBjcnlwdF9zdGF0KTsKZGlmZiAtLWdpdCBhL2ZzL2Vmcy9kaXIuYyBiL2ZzL2Vmcy9kaXIuYwppbmRleCAxN2Y1YjJkLi5iNDZjNDg4IDEwMDY0NAotLS0gYS9mcy9lZnMvZGlyLmMKKysrIGIvZnMvZWZzL2Rpci5jCkBAIC0yMCw3ICsyMCw3IEBACiB9OwogCiBzdGF0aWMgaW50IGVmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKSB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAKIAlzdHJ1Y3QgZWZzX2RpcgkJKmRpcmJsb2NrOwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCA4OGE2ZjhkLi4zYWU2NDRlIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtNzk1LDggKzc5NSw4IEBACiAJCWdvdG8gZWV4aXRfNDsKIAlkZW50cnktPmRfb3AgPSAmZXZlbnRwb2xsZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7Ci0JZmlsZS0+Zl92ZnNtbnQgPSBtbnRnZXQoZXZlbnRwb2xsX21udCk7Ci0JZmlsZS0+Zl9kZW50cnkgPSBkZW50cnk7CisJZmlsZS0+Zl9wYXRoLm1udCA9IG1udGdldChldmVudHBvbGxfbW50KTsKKwlmaWxlLT5mX3BhdGguZGVudHJ5ID0gZGVudHJ5OwogCWZpbGUtPmZfbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CiAKIAlmaWxlLT5mX3BvcyA9IDA7CmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggYWRkMGUwMy4uMTFmZTkzZiAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KQEAgLTYyMCw4ICs2MjEsOCBAQAogCSAqIFJlcGFyZW50aW5nIG5lZWRzIHdyaXRlX2xvY2sgb24gdGFza2xpc3RfbG9jaywKIAkgKiBzbyBpdCBpcyBzYWZlIHRvIGRvIGl0IHVuZGVyIHJlYWRfbG9jay4KIAkgKi8KLQlpZiAodW5saWtlbHkodHNrLT5ncm91cF9sZWFkZXIgPT0gY2hpbGRfcmVhcGVyKSkKLQkJY2hpbGRfcmVhcGVyID0gdHNrOworCWlmICh1bmxpa2VseSh0c2stPmdyb3VwX2xlYWRlciA9PSBjaGlsZF9yZWFwZXIodHNrKSkpCisJCXRzay0+bnNwcm94eS0+cGlkX25zLT5jaGlsZF9yZWFwZXIgPSB0c2s7CiAKIAl6YXBfb3RoZXJfdGhyZWFkcyh0c2spOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKQEAgLTc4Miw3ICs3ODMsNyBAQAogCQlqKys7CiAJCWkgPSBqICogX19ORkRCSVRTOwogCQlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKLQkJaWYgKGkgPj0gZmR0LT5tYXhfZmRzIHx8IGkgPj0gZmR0LT5tYXhfZmRzZXQpCisJCWlmIChpID49IGZkdC0+bWF4X2ZkcykKIAkJCWJyZWFrOwogCQlzZXQgPSBmZHQtPmNsb3NlX29uX2V4ZWMtPmZkc19iaXRzW2pdOwogCQlpZiAoIXNldCkKQEAgLTkxMiw3ICs5MTMsNyBAQAogaW50IHByZXBhcmVfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7CiAJaW50IG1vZGU7Ci0Jc3RydWN0IGlub2RlICogaW5vZGUgPSBicHJtLT5maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGJwcm0tPmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldHZhbDsKIAogCW1vZGUgPSBpbm9kZS0+aV9tb2RlOwpAQCAtOTIyLDcgKzkyMyw3IEBACiAJYnBybS0+ZV91aWQgPSBjdXJyZW50LT5ldWlkOwogCWJwcm0tPmVfZ2lkID0gY3VycmVudC0+ZWdpZDsKIAotCWlmKCEoYnBybS0+ZmlsZS0+Zl92ZnNtbnQtPm1udF9mbGFncyAmIE1OVF9OT1NVSUQpKSB7CisJaWYoIShicHJtLT5maWxlLT5mX3BhdGgubW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9TVUlEKSkgewogCQkvKiBTZXQtdWlkPyAqLwogCQlpZiAobW9kZSAmIFNfSVNVSUQpIHsKIAkJCWN1cnJlbnQtPnBlcnNvbmFsaXR5ICY9IH5QRVJfQ0xFQVJfT05fU0VUSUQ7CkBAIC0xNTE5LDEwICsxNTIwLDEwIEBACiAJCQkJIDA2MDApOwogCWlmIChJU19FUlIoZmlsZSkpCiAJCWdvdG8gZmFpbF91bmxvY2s7Ci0JaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKGlub2RlLT5pX25saW5rID4gMSkKIAkJZ290byBjbG9zZV9mYWlsOwkvKiBtdWx0aXBsZSBsaW5rcyAtIGRvbid0IGR1bXAgKi8KLQlpZiAoIWlzcGlwZSAmJiBkX3VuaGFzaGVkKGZpbGUtPmZfZGVudHJ5KSkKKwlpZiAoIWlzcGlwZSAmJiBkX3VuaGFzaGVkKGZpbGUtPmZfcGF0aC5kZW50cnkpKQogCQlnb3RvIGNsb3NlX2ZhaWw7CiAKIAkvKiBBSzogYWN0dWFsbHkgaSBzZWUgbm8gcmVhc29uIHRvIG5vdCBhbGxvdyB0aGlzIGZvciBuYW1lZCBwaXBlcyBldGMuLApAQCAtMTUzMyw3ICsxNTM0LDcgQEAKIAkJZ290byBjbG9zZV9mYWlsOwogCWlmICghZmlsZS0+Zl9vcC0+d3JpdGUpCiAJCWdvdG8gY2xvc2VfZmFpbDsKLQlpZiAoIWlzcGlwZSAmJiBkb190cnVuY2F0ZShmaWxlLT5mX2RlbnRyeSwgMCwgMCwgZmlsZSkgIT0gMCkKKwlpZiAoIWlzcGlwZSAmJiBkb190cnVuY2F0ZShmaWxlLT5mX3BhdGguZGVudHJ5LCAwLCAwLCBmaWxlKSAhPSAwKQogCQlnb3RvIGNsb3NlX2ZhaWw7CiAKIAlyZXR2YWwgPSBiaW5mbXQtPmNvcmVfZHVtcChzaWduciwgcmVncywgZmlsZSk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2Rpci5jIGIvZnMvZXh0Mi9kaXIuYwppbmRleCAzZTdhODRhLi4wYjAyYmE5IDEwMDY0NAotLS0gYS9mcy9leHQyL2Rpci5jCisrKyBiL2ZzL2V4dDIvZGlyLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogZXh0Ml9yZWFkZGlyIChzdHJ1Y3QgZmlsZSAqIGZpbHAsIHZvaWQgKiBkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewogCWxvZmZfdCBwb3MgPSBmaWxwLT5mX3BvczsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBwb3MgJiB+UEFHRV9DQUNIRV9NQVNLOwogCXVuc2lnbmVkIGxvbmcgbiA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pb2N0bC5jIGIvZnMvZXh0Mi9pb2N0bC5jCmluZGV4IGUzY2Y4YzguLjRiMDk5ZDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaW9jdGwuYworKysgYi9mcy9leHQyL2lvY3RsLmMKQEAgLTkwLDcgKzkwLDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBsb25nIGV4dDJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldDsKIAogCS8qIFRoZXNlIGFyZSBqdXN0IG1pc25hbWVkLCB0aGV5IGFjdHVhbGx5IGdldC9wdXQgZnJvbS90byB1c2VyIGFuIGludCAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IDI1NWNlZjUuLjYzNDdjMmQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYworKysgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTU5Nyw4ICs1OTcsNiBAQAogCXJldHVybiAxOwogfQogCi0jZGVmaW5lIGxvZzIobikgZmZ6KH4obikpCi0gCiAvKgogICogTWF4aW1hbCBmaWxlIHNpemUuICBUaGVyZSBpcyBhIGRpcmVjdCwgYW5kIHssZG91YmxlLSx0cmlwbGUtfWluZGlyZWN0CiAgKiBibG9jayBsaW1pdCwgYW5kIGFsc28gYSBsaW1pdCBvZiAoMl4zMiAtIDEpIDUxMi1ieXRlIHNlY3RvcnMgaW4gaV9ibG9ja3MuCkBAIC04MzQsOSArODMyLDkgQEAKIAlzYmktPnNfc2JoID0gYmg7CiAJc2JpLT5zX21vdW50X3N0YXRlID0gbGUxNl90b19jcHUoZXMtPnNfc3RhdGUpOwogCXNiaS0+c19hZGRyX3Blcl9ibG9ja19iaXRzID0KLQkJbG9nMiAoRVhUMl9BRERSX1BFUl9CTE9DSyhzYikpOworCQlpbG9nMiAoRVhUMl9BRERSX1BFUl9CTE9DSyhzYikpOwogCXNiaS0+c19kZXNjX3Blcl9ibG9ja19iaXRzID0KLQkJbG9nMiAoRVhUMl9ERVNDX1BFUl9CTE9DSyhzYikpOworCQlpbG9nMiAoRVhUMl9ERVNDX1BFUl9CTE9DSyhzYikpOwogCiAJaWYgKHNiLT5zX21hZ2ljICE9IEVYVDJfU1VQRVJfTUFHSUMpCiAJCWdvdG8gY2FudGZpbmRfZXh0MjsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvZGlyLmMgYi9mcy9leHQzL2Rpci5jCmluZGV4IDVhOTMxM2UuLjY2NWFkZWUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZGlyLmMKKysrIGIvZnMvZXh0My9kaXIuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmRlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJaW50IGVycjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldCA9IDA7CiAKIAlzYiA9IGlub2RlLT5pX3NiOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJCSAqIFdlIGRvbid0IHNldCB0aGUgaW5vZGUgZGlydHkgZmxhZyBzaW5jZSBpdCdzIG5vdAogCQkgKiBjcml0aWNhbCB0aGF0IGl0IGdldCBmbHVzaGVkIGJhY2sgdG8gdGhlIGRpc2suCiAJCSAqLwotCQlFWFQzX0koZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpLT5pX2ZsYWdzICY9IH5FWFQzX0lOREVYX0ZMOworCQlFWFQzX0koZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmlfZmxhZ3MgJj0gfkVYVDNfSU5ERVhfRkw7CiAJfQogI2VuZGlmCiAJc3RvcmVkID0gMDsKQEAgLTQwMiw3ICs0MDIsNyBAQAogewogCXN0cnVjdCBkaXJfcHJpdmF0ZV9pbmZvICppbmZvID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWxvZmZfdAljdXJyX3BvczsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICogc2I7CiAJaW50IGVycm9yOwogCkBAIC00MzIsNyArNDMyLDcgQEAKIAkJCSB2b2lkICogZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKIAlzdHJ1Y3QgZGlyX3ByaXZhdGVfaW5mbyAqaW5mbyA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZuYW1lICpmbmFtZTsKIAlpbnQJcmV0OwogCmRpZmYgLS1naXQgYS9mcy9leHQzL2ZpbGUuYyBiL2ZzL2V4dDMvZmlsZS5jCmluZGV4IGU5NmMzODguLjg4MWY2MzYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZmlsZS5jCisrKyBiL2ZzL2V4dDMvZmlsZS5jCkBAIC01Miw3ICs1Miw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXNzaXplX3QgcmV0OwogCWludCBlcnI7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW9jdGwuYyBiL2ZzL2V4dDMvaW9jdGwuYwppbmRleCAxMmRhYTY4Li45YjgwOTBkIDEwMDY0NAotLS0gYS9mcy9leHQzL2lvY3RsLmMKKysrIGIvZnMvZXh0My9pb2N0bC5jCkBAIC0yNTcsNyArMjU3LDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBsb25nIGV4dDNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldDsKIAogCS8qIFRoZXNlIGFyZSBqdXN0IG1pc25hbWVkLCB0aGV5IGFjdHVhbGx5IGdldC9wdXQgZnJvbS90byB1c2VyIGFuIGludCAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9uYW1laS5jIGIvZnMvZXh0My9uYW1laS5jCmluZGV4IDYwZDJmOWQuLjRkZjM5YzQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvbmFtZWkuYworKysgYi9mcy9leHQzL25hbWVpLmMKQEAgLTYwMiw3ICs2MDIsNyBAQAogCiAJZHh0cmFjZShwcmludGsoIkluIGh0cmVlX2ZpbGxfdHJlZSwgc3RhcnQgaGFzaDogJXg6JXhcbiIsIHN0YXJ0X2hhc2gsCiAJCSAgICAgICBzdGFydF9taW5vcl9oYXNoKSk7Ci0JZGlyID0gZGlyX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWRpciA9IGRpcl9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWlmICghKEVYVDNfSShkaXIpLT5pX2ZsYWdzICYgRVhUM19JTkRFWF9GTCkpIHsKIAkJaGluZm8uaGFzaF92ZXJzaW9uID0gRVhUM19TQihkaXItPmlfc2IpLT5zX2RlZl9oYXNoX3ZlcnNpb247CiAJCWhpbmZvLnNlZWQgPSBFWFQzX1NCKGRpci0+aV9zYiktPnNfaGFzaF9zZWVkOwpAQCAtNjEzLDcgKzYxMyw3IEBACiAJfQogCWhpbmZvLmhhc2ggPSBzdGFydF9oYXNoOwogCWhpbmZvLm1pbm9yX2hhc2ggPSAwOwotCWZyYW1lID0gZHhfcHJvYmUoTlVMTCwgZGlyX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCAmaGluZm8sIGZyYW1lcywgJmVycik7CisJZnJhbWUgPSBkeF9wcm9iZShOVUxMLCBkaXJfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgJmhpbmZvLCBmcmFtZXMsICZlcnIpOwogCWlmICghZnJhbWUpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCA1ODBiOGE2Li5iMzQ4ODY3IDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC0xMzQ3LDggKzEzNDcsNiBAQAogCXNiLT5zX2ZsYWdzID0gc19mbGFnczsgLyogUmVzdG9yZSBNU19SRE9OTFkgc3RhdHVzICovCiB9CiAKLSNkZWZpbmUgbG9nMihuKSBmZnoofihuKSkKLQogLyoKICAqIE1heGltYWwgZmlsZSBzaXplLiAgVGhlcmUgaXMgYSBkaXJlY3QsIGFuZCB7LGRvdWJsZS0sdHJpcGxlLX1pbmRpcmVjdAogICogYmxvY2sgbGltaXQsIGFuZCBhbHNvIGEgbGltaXQgb2YgKDJeMzIgLSAxKSA1MTItYnl0ZSBzZWN0b3JzIGluIGlfYmxvY2tzLgpAQCAtMTU5Nyw4ICsxNTk1LDggQEAKIAlzYmktPnNfZGVzY19wZXJfYmxvY2sgPSBibG9ja3NpemUgLyBzaXplb2Yoc3RydWN0IGV4dDNfZ3JvdXBfZGVzYyk7CiAJc2JpLT5zX3NiaCA9IGJoOwogCXNiaS0+c19tb3VudF9zdGF0ZSA9IGxlMTZfdG9fY3B1KGVzLT5zX3N0YXRlKTsKLQlzYmktPnNfYWRkcl9wZXJfYmxvY2tfYml0cyA9IGxvZzIoRVhUM19BRERSX1BFUl9CTE9DSyhzYikpOwotCXNiaS0+c19kZXNjX3Blcl9ibG9ja19iaXRzID0gbG9nMihFWFQzX0RFU0NfUEVSX0JMT0NLKHNiKSk7CisJc2JpLT5zX2FkZHJfcGVyX2Jsb2NrX2JpdHMgPSBpbG9nMihFWFQzX0FERFJfUEVSX0JMT0NLKHNiKSk7CisJc2JpLT5zX2Rlc2NfcGVyX2Jsb2NrX2JpdHMgPSBpbG9nMihFWFQzX0RFU0NfUEVSX0JMT0NLKHNiKSk7CiAJZm9yIChpPTA7IGkgPCA0OyBpKyspCiAJCXNiaS0+c19oYXNoX3NlZWRbaV0gPSBsZTMyX3RvX2NwdShlcy0+c19oYXNoX3NlZWRbaV0pOwogCXNiaS0+c19kZWZfaGFzaF92ZXJzaW9uID0gZXMtPnNfZGVmX2hhc2hfdmVyc2lvbjsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZGlyLmMgYi9mcy9leHQ0L2Rpci5jCmluZGV4IGYyZWQzZTcuLmRhODAzNjggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZGlyLmMKKysrIGIvZnMvZXh0NC9kaXIuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJaW50IGVycjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldCA9IDA7CiAKIAlzYiA9IGlub2RlLT5pX3NiOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJCSAqIFdlIGRvbid0IHNldCB0aGUgaW5vZGUgZGlydHkgZmxhZyBzaW5jZSBpdCdzIG5vdAogCQkgKiBjcml0aWNhbCB0aGF0IGl0IGdldCBmbHVzaGVkIGJhY2sgdG8gdGhlIGRpc2suCiAJCSAqLwotCQlFWFQ0X0koZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpLT5pX2ZsYWdzICY9IH5FWFQ0X0lOREVYX0ZMOworCQlFWFQ0X0koZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmlfZmxhZ3MgJj0gfkVYVDRfSU5ERVhfRkw7CiAJfQogI2VuZGlmCiAJc3RvcmVkID0gMDsKQEAgLTQwMiw3ICs0MDIsNyBAQAogewogCXN0cnVjdCBkaXJfcHJpdmF0ZV9pbmZvICppbmZvID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWxvZmZfdAljdXJyX3BvczsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICogc2I7CiAJaW50IGVycm9yOwogCkBAIC00MzIsNyArNDMyLDcgQEAKIAkJCSB2b2lkICogZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKIAlzdHJ1Y3QgZGlyX3ByaXZhdGVfaW5mbyAqaW5mbyA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZuYW1lICpmbmFtZTsKIAlpbnQJcmV0OwogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZpbGUuYyBiL2ZzL2V4dDQvZmlsZS5jCmluZGV4IDBiNjIyYzAuLjNiYmMyNGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZmlsZS5jCisrKyBiL2ZzL2V4dDQvZmlsZS5jCkBAIC01Miw3ICs1Miw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXNzaXplX3QgcmV0OwogCWludCBlcnI7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCAxZDg1ZDRlLi5hMTI3Y2MwIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0xMjMyLDcgKzEyMzIsNyBAQAogCQkJCWZyb20sIHRvLCBOVUxMLCBkb19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MpOwogCQlpZiAocmV0KQogCQkJLyogZmF0YWwgZXJyb3IsIGp1c3QgcHV0IHRoZSBoYW5kbGUgYW5kIHJldHVybiAqLwotCQkJam91cm5hbF9zdG9wKGhhbmRsZSk7CisJCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCX0KIAlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lvY3RsLmMgYi9mcy9leHQ0L2lvY3RsLmMKaW5kZXggMjJhNzM3Yy4uNTAwNTY3ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pb2N0bC5jCisrKyBiL2ZzL2V4dDQvaW9jdGwuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogbG9uZyBleHQ0X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCByZXQ7CiAKIAkvKiBUaGVzZSBhcmUganVzdCBtaXNuYW1lZCwgdGhleSBhY3R1YWxseSBnZXQvcHV0IGZyb20vdG8gdXNlciBhbiBpbnQgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuYwppbmRleCA4NTk5OTBlLi5lNWE3NGE1IDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKKysrIGIvZnMvZXh0NC9uYW1laS5jCkBAIC02MDIsNyArNjAyLDcgQEAKIAogCWR4dHJhY2UocHJpbnRrKCJJbiBodHJlZV9maWxsX3RyZWUsIHN0YXJ0IGhhc2g6ICV4OiV4XG4iLCBzdGFydF9oYXNoLAogCQkgICAgICAgc3RhcnRfbWlub3JfaGFzaCkpOwotCWRpciA9IGRpcl9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlkaXIgPSBkaXJfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpZiAoIShFWFQ0X0koZGlyKS0+aV9mbGFncyAmIEVYVDRfSU5ERVhfRkwpKSB7CiAJCWhpbmZvLmhhc2hfdmVyc2lvbiA9IEVYVDRfU0IoZGlyLT5pX3NiKS0+c19kZWZfaGFzaF92ZXJzaW9uOwogCQloaW5mby5zZWVkID0gRVhUNF9TQihkaXItPmlfc2IpLT5zX2hhc2hfc2VlZDsKQEAgLTYxMyw3ICs2MTMsNyBAQAogCX0KIAloaW5mby5oYXNoID0gc3RhcnRfaGFzaDsKIAloaW5mby5taW5vcl9oYXNoID0gMDsKLQlmcmFtZSA9IGR4X3Byb2JlKE5VTEwsIGRpcl9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgJmhpbmZvLCBmcmFtZXMsICZlcnIpOworCWZyYW1lID0gZHhfcHJvYmUoTlVMTCwgZGlyX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsICZoaW5mbywgZnJhbWVzLCAmZXJyKTsKIAlpZiAoIWZyYW1lKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmMKaW5kZXggNjljNDM5Zi4uYzE2YWYyNCAxMDA2NDQKLS0tIGEvZnMvZmF0L2Rpci5jCisrKyBiL2ZzL2ZhdC9kaXIuYwpAQCAtNTc5LDcgKzU3OSw3IEBACiAJaWYgKCFtZW1jbXAoZGUtPm5hbWUsIE1TRE9TX0RPVCwgTVNET1NfTkFNRSkpCiAJCWludW0gPSBpbm9kZS0+aV9pbm87CiAJZWxzZSBpZiAoIW1lbWNtcChkZS0+bmFtZSwgTVNET1NfRE9URE9ULCBNU0RPU19OQU1FKSkgewotCQlpbnVtID0gcGFyZW50X2lubyhmaWxwLT5mX2RlbnRyeSk7CisJCWludW0gPSBwYXJlbnRfaW5vKGZpbHAtPmZfcGF0aC5kZW50cnkpOwogCX0gZWxzZSB7CiAJCWxvZmZfdCBpX3BvcyA9IGZhdF9tYWtlX2lfcG9zKHNiLCBiaCwgZGUpOwogCQlzdHJ1Y3QgaW5vZGUgKnRtcCA9IGZhdF9pZ2V0KHNiLCBpX3Bvcyk7CkBAIC02NDMsNyArNjQzLDcgQEAKIAogc3RhdGljIGludCBmYXRfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJcmV0dXJuIF9fZmF0X3JlYWRkaXIoaW5vZGUsIGZpbHAsIGRpcmVudCwgZmlsbGRpciwgMCwgMCk7CiB9CiAKQEAgLTc4Miw3ICs3ODIsNyBAQAogCiAJc2V0X2ZzKEtFUk5FTF9EUyk7CiAJbG9ja19rZXJuZWwoKTsKLQlyZXQgPSBmYXRfZGlyX2lvY3RsKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBmaWxlLAorCXJldCA9IGZhdF9kaXJfaW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKIAkJCSAgICBjbWQsICh1bnNpZ25lZCBsb25nKSAmZCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXNldF9mcyhvbGRmcyk7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCAwYWE4MTNkLi5jMTIzN2I3IDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCisrKyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAkJfQogCiAJCS8qIFRoaXMgTVVTVCBiZSBkb25lIGJlZm9yZSBkb2luZyBhbnl0aGluZyBpcnJldmVyc2libGUuLi4gKi8KLQkJZXJyID0gbm90aWZ5X2NoYW5nZShmaWxwLT5mX2RlbnRyeSwgJmlhKTsKKwkJZXJyID0gbm90aWZ5X2NoYW5nZShmaWxwLT5mX3BhdGguZGVudHJ5LCAmaWEpOwogCQlpZiAoZXJyKQogCQkJZ290byB1cDsKIApkaWZmIC0tZ2l0IGEvZnMvZmNudGwuYyBiL2ZzL2ZjbnRsLmMKaW5kZXggNDc0MGQzNS4uOGUzODJhNSAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC03NywxMCArNzcsOSBAQAogCQlzdGFydCA9IGZpbGVzLT5uZXh0X2ZkOwogCiAJbmV3ZmQgPSBzdGFydDsKLQlpZiAoc3RhcnQgPCBmZHQtPm1heF9mZHNldCkgeworCWlmIChzdGFydCA8IGZkdC0+bWF4X2ZkcykKIAkJbmV3ZmQgPSBmaW5kX25leHRfemVyb19iaXQoZmR0LT5vcGVuX2Zkcy0+ZmRzX2JpdHMsCi0JCQlmZHQtPm1heF9mZHNldCwgc3RhcnQpOwotCX0KKwkJCQkJICAgZmR0LT5tYXhfZmRzLCBzdGFydCk7CiAJCiAJZXJyb3IgPSAtRU1GSUxFOwogCWlmIChuZXdmZCA+PSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX05PRklMRV0ucmxpbV9jdXIpCkBAIC0yMDQsNyArMjAzLDcgQEAKIAogc3RhdGljIGludCBzZXRmbChpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IGVycm9yID0gMDsKIAogCS8qCmRpZmYgLS1naXQgYS9mcy9maWxlLmMgYi9mcy9maWxlLmMKaW5kZXggNTFhZWY2Ny4uYzU1NzVkZSAxMDA2NDQKLS0tIGEvZnMvZmlsZS5jCisrKyBiL2ZzL2ZpbGUuYwpAQCAtMzIsNDYgKzMyLDI4IEBACiAgKi8KIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZmR0YWJsZV9kZWZlciwgZmR0YWJsZV9kZWZlcl9saXN0KTsKIAotCi0vKgotICogQWxsb2NhdGUgYW4gZmQgYXJyYXksIHVzaW5nIGttYWxsb2Mgb3Igdm1hbGxvYy4KLSAqIE5vdGU6IHRoZSBhcnJheSBpc24ndCBjbGVhcmVkIGF0IGFsbG9jYXRpb24gdGltZS4KLSAqLwotc3RydWN0IGZpbGUgKiogYWxsb2NfZmRfYXJyYXkoaW50IG51bSkKK3N0YXRpYyBpbmxpbmUgdm9pZCAqIGFsbG9jX2ZkbWVtKHVuc2lnbmVkIGludCBzaXplKQogewotCXN0cnVjdCBmaWxlICoqbmV3X2ZkczsKLQlpbnQgc2l6ZSA9IG51bSAqIHNpemVvZihzdHJ1Y3QgZmlsZSAqKTsKLQogCWlmIChzaXplIDw9IFBBR0VfU0laRSkKLQkJbmV3X2ZkcyA9IChzdHJ1Y3QgZmlsZSAqKikga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQllbHNlIAotCQluZXdfZmRzID0gKHN0cnVjdCBmaWxlICoqKSB2bWFsbG9jKHNpemUpOwotCXJldHVybiBuZXdfZmRzOwotfQotCi12b2lkIGZyZWVfZmRfYXJyYXkoc3RydWN0IGZpbGUgKiphcnJheSwgaW50IG51bSkKLXsKLQlpbnQgc2l6ZSA9IG51bSAqIHNpemVvZihzdHJ1Y3QgZmlsZSAqKTsKLQotCWlmICghYXJyYXkpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAiZnJlZV9mZF9hcnJheTogYXJyYXkgPSAwIChudW0gPSAlZClcbiIsIG51bSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobnVtIDw9IE5SX09QRU5fREVGQVVMVCkgLyogRG9uJ3QgZnJlZSB0aGUgZW1iZWRkZWQgZmQgYXJyYXkhICovCi0JCXJldHVybjsKLQllbHNlIGlmIChzaXplIDw9IFBBR0VfU0laRSkKLQkJa2ZyZWUoYXJyYXkpOworCQlyZXR1cm4ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAllbHNlCi0JCXZmcmVlKGFycmF5KTsKKwkJcmV0dXJuIHZtYWxsb2Moc2l6ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZnJlZV9mZHRhYmxlKHN0cnVjdCBmZHRhYmxlICpmZHQpCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9mZGFycihzdHJ1Y3QgZmR0YWJsZSAqZmR0KQogewotCWZyZWVfZmRzZXQoZmR0LT5vcGVuX2ZkcywgZmR0LT5tYXhfZmRzZXQpOwotCWZyZWVfZmRzZXQoZmR0LT5jbG9zZV9vbl9leGVjLCBmZHQtPm1heF9mZHNldCk7Ci0JZnJlZV9mZF9hcnJheShmZHQtPmZkLCBmZHQtPm1heF9mZHMpOwotCWtmcmVlKGZkdCk7CisJaWYgKGZkdC0+bWF4X2ZkcyA8PSAoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBmaWxlICopKSkKKwkJa2ZyZWUoZmR0LT5mZCk7CisJZWxzZQorCQl2ZnJlZShmZHQtPmZkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZmRzZXQoc3RydWN0IGZkdGFibGUgKmZkdCkKK3sKKwlpZiAoZmR0LT5tYXhfZmRzIDw9IChQQUdFX1NJWkUgKiBCSVRTX1BFUl9CWVRFIC8gMikpCisJCWtmcmVlKGZkdC0+b3Blbl9mZHMpOworCWVsc2UKKwkJdmZyZWUoZmR0LT5vcGVuX2Zkcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfZmR0YWJsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTg2LDQxICs2OCwzMiBAQAogCXNwaW5fdW5sb2NrX2JoKCZmLT5sb2NrKTsKIAl3aGlsZShmZHQpIHsKIAkJc3RydWN0IGZkdGFibGUgKm5leHQgPSBmZHQtPm5leHQ7Ci0JCV9fZnJlZV9mZHRhYmxlKGZkdCk7CisJCXZmcmVlKGZkdC0+ZmQpOworCQlmcmVlX2Zkc2V0KGZkdCk7CisJCWtmcmVlKGZkdCk7CiAJCWZkdCA9IG5leHQ7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2ZkdGFibGVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQordm9pZCBmcmVlX2ZkdGFibGVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQogewogCXN0cnVjdCBmZHRhYmxlICpmZHQgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgZmR0YWJsZSwgcmN1KTsKLQlpbnQgZmRzZXRfc2l6ZSwgZmRhcnJheV9zaXplOwogCXN0cnVjdCBmZHRhYmxlX2RlZmVyICpmZGRlZjsKIAogCUJVR19PTighZmR0KTsKLQlmZHNldF9zaXplID0gZmR0LT5tYXhfZmRzZXQgLyA4OwotCWZkYXJyYXlfc2l6ZSA9IGZkdC0+bWF4X2ZkcyAqIHNpemVvZihzdHJ1Y3QgZmlsZSAqKTsKIAotCWlmIChmZHQtPmZyZWVfZmlsZXMpIHsKKwlpZiAoZmR0LT5tYXhfZmRzIDw9IE5SX09QRU5fREVGQVVMVCkgewogCQkvKgotCQkgKiBUaGUgdGhpcyBmZHRhYmxlIHdhcyBlbWJlZGRlZCBpbiB0aGUgZmlsZXMgc3RydWN0dXJlCi0JCSAqIGFuZCB0aGUgZmlsZXMgc3RydWN0dXJlIGl0c2VsZiB3YXMgZ2V0dGluZyBkZXN0cm95ZWQuCi0JCSAqIEl0IGlzIG5vdyBzYWZlIHRvIGZyZWUgdGhlIGZpbGVzIHN0cnVjdHVyZS4KKwkJICogVGhpcyBmZHRhYmxlIGlzIGVtYmVkZGVkIGluIHRoZSBmaWxlcyBzdHJ1Y3R1cmUgYW5kIHRoYXQKKwkJICogc3RydWN0dXJlIGl0c2VsZiBpcyBnZXR0aW5nIGRlc3Ryb3llZC4KIAkJICovCi0JCWttZW1fY2FjaGVfZnJlZShmaWxlc19jYWNoZXAsIGZkdC0+ZnJlZV9maWxlcyk7CisJCWttZW1fY2FjaGVfZnJlZShmaWxlc19jYWNoZXAsCisJCQkJY29udGFpbmVyX29mKGZkdCwgc3RydWN0IGZpbGVzX3N0cnVjdCwgZmR0YWIpKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoZmR0LT5tYXhfZmRzZXQgPD0gRU1CRURERURfRkRfU0VUX1NJWkUgJiYKLQkJZmR0LT5tYXhfZmRzIDw9IE5SX09QRU5fREVGQVVMVCkgewotCQkvKgotCQkgKiBUaGUgZmR0YWJsZSB3YXMgZW1iZWRkZWQKLQkJICovCi0JCXJldHVybjsKLQl9Ci0JaWYgKGZkc2V0X3NpemUgPD0gUEFHRV9TSVpFICYmIGZkYXJyYXlfc2l6ZSA8PSBQQUdFX1NJWkUpIHsKLQkJa2ZyZWUoZmR0LT5vcGVuX2Zkcyk7Ci0JCWtmcmVlKGZkdC0+Y2xvc2Vfb25fZXhlYyk7CisJaWYgKGZkdC0+bWF4X2ZkcyA8PSAoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBmaWxlICopKSkgewogCQlrZnJlZShmZHQtPmZkKTsKKwkJa2ZyZWUoZmR0LT5vcGVuX2Zkcyk7CiAJCWtmcmVlKGZkdCk7CiAJfSBlbHNlIHsKIAkJZmRkZWYgPSAmZ2V0X2NwdV92YXIoZmR0YWJsZV9kZWZlcl9saXN0KTsKQEAgLTEzNCwxMzYgKzEwNyw3NCBAQAogCX0KIH0KIAotdm9pZCBmcmVlX2ZkdGFibGUoc3RydWN0IGZkdGFibGUgKmZkdCkKLXsKLQlpZiAoZmR0LT5mcmVlX2ZpbGVzIHx8Ci0JCWZkdC0+bWF4X2Zkc2V0ID4gRU1CRURERURfRkRfU0VUX1NJWkUgfHwKLQkJZmR0LT5tYXhfZmRzID4gTlJfT1BFTl9ERUZBVUxUKQotCQljYWxsX3JjdSgmZmR0LT5yY3UsIGZyZWVfZmR0YWJsZV9yY3UpOwotfQotCiAvKgogICogRXhwYW5kIHRoZSBmZHNldCBpbiB0aGUgZmlsZXNfc3RydWN0LiAgQ2FsbGVkIHdpdGggdGhlIGZpbGVzIHNwaW5sb2NrCiAgKiBoZWxkIGZvciB3cml0ZS4KICAqLwotc3RhdGljIHZvaWQgY29weV9mZHRhYmxlKHN0cnVjdCBmZHRhYmxlICpuZmR0LCBzdHJ1Y3QgZmR0YWJsZSAqZmR0KQorc3RhdGljIHZvaWQgY29weV9mZHRhYmxlKHN0cnVjdCBmZHRhYmxlICpuZmR0LCBzdHJ1Y3QgZmR0YWJsZSAqb2ZkdCkKIHsKLQlpbnQgaTsKLQlpbnQgY291bnQ7CisJdW5zaWduZWQgaW50IGNweSwgc2V0OwogCi0JQlVHX09OKG5mZHQtPm1heF9mZHNldCA8IGZkdC0+bWF4X2Zkc2V0KTsKLQlCVUdfT04obmZkdC0+bWF4X2ZkcyA8IGZkdC0+bWF4X2Zkcyk7Ci0JLyogQ29weSB0aGUgZXhpc3RpbmcgdGFibGVzIGFuZCBpbnN0YWxsIHRoZSBuZXcgcG9pbnRlcnMgKi8KLQotCWkgPSBmZHQtPm1heF9mZHNldCAvIChzaXplb2YodW5zaWduZWQgbG9uZykgKiA4KTsKLQljb3VudCA9IChuZmR0LT5tYXhfZmRzZXQgLSBmZHQtPm1heF9mZHNldCkgLyA4OwotCi0JLyoKLQkgKiBEb24ndCBjb3B5IHRoZSBlbnRpcmUgYXJyYXkgaWYgdGhlIGN1cnJlbnQgZmRzZXQgaXMKLQkgKiBub3QgeWV0IGluaXRpYWxpc2VkLgotCSAqLwotCWlmIChpKSB7Ci0JCW1lbWNweSAobmZkdC0+b3Blbl9mZHMsIGZkdC0+b3Blbl9mZHMsCi0JCQkJCQlmZHQtPm1heF9mZHNldC84KTsKLQkJbWVtY3B5IChuZmR0LT5jbG9zZV9vbl9leGVjLCBmZHQtPmNsb3NlX29uX2V4ZWMsCi0JCQkJCQlmZHQtPm1heF9mZHNldC84KTsKLQkJbWVtc2V0ICgmbmZkdC0+b3Blbl9mZHMtPmZkc19iaXRzW2ldLCAwLCBjb3VudCk7Ci0JCW1lbXNldCAoJm5mZHQtPmNsb3NlX29uX2V4ZWMtPmZkc19iaXRzW2ldLCAwLCBjb3VudCk7Ci0JfQotCi0JLyogRG9uJ3QgY29weS9jbGVhciB0aGUgYXJyYXkgaWYgd2UgYXJlIGNyZWF0aW5nIGEgbmV3Ci0JICAgZmQgYXJyYXkgZm9yIGZvcmsoKSAqLwotCWlmIChmZHQtPm1heF9mZHMpIHsKLQkJbWVtY3B5KG5mZHQtPmZkLCBmZHQtPmZkLAotCQkJZmR0LT5tYXhfZmRzICogc2l6ZW9mKHN0cnVjdCBmaWxlICopKTsKLQkJLyogY2xlYXIgdGhlIHJlbWFpbmRlciBvZiB0aGUgYXJyYXkgKi8KLQkJbWVtc2V0KCZuZmR0LT5mZFtmZHQtPm1heF9mZHNdLCAwLAotCQkgICAgICAgKG5mZHQtPm1heF9mZHMgLSBmZHQtPm1heF9mZHMpICoKLQkJCQkJc2l6ZW9mKHN0cnVjdCBmaWxlICopKTsKLQl9Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhbiBmZHNldCBhcnJheSwgdXNpbmcga21hbGxvYyBvciB2bWFsbG9jLgotICogTm90ZTogdGhlIGFycmF5IGlzbid0IGNsZWFyZWQgYXQgYWxsb2NhdGlvbiB0aW1lLgotICovCi1mZF9zZXQgKiBhbGxvY19mZHNldChpbnQgbnVtKQotewotCWZkX3NldCAqbmV3X2Zkc2V0OwotCWludCBzaXplID0gbnVtIC8gODsKLQotCWlmIChzaXplIDw9IFBBR0VfU0laRSkKLQkJbmV3X2Zkc2V0ID0gKGZkX3NldCAqKSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWVsc2UKLQkJbmV3X2Zkc2V0ID0gKGZkX3NldCAqKSB2bWFsbG9jKHNpemUpOwotCXJldHVybiBuZXdfZmRzZXQ7Ci19Ci0KLXZvaWQgZnJlZV9mZHNldChmZF9zZXQgKmFycmF5LCBpbnQgbnVtKQotewotCWlmIChudW0gPD0gRU1CRURERURfRkRfU0VUX1NJWkUpIC8qIERvbid0IGZyZWUgYW4gZW1iZWRkZWQgZmRzZXQgKi8KKwlCVUdfT04obmZkdC0+bWF4X2ZkcyA8IG9mZHQtPm1heF9mZHMpOworCWlmIChvZmR0LT5tYXhfZmRzID09IDApCiAJCXJldHVybjsKLQllbHNlIGlmIChudW0gPD0gOCAqIFBBR0VfU0laRSkKLQkJa2ZyZWUoYXJyYXkpOwotCWVsc2UKLQkJdmZyZWUoYXJyYXkpOworCisJY3B5ID0gb2ZkdC0+bWF4X2ZkcyAqIHNpemVvZihzdHJ1Y3QgZmlsZSAqKTsKKwlzZXQgPSAobmZkdC0+bWF4X2ZkcyAtIG9mZHQtPm1heF9mZHMpICogc2l6ZW9mKHN0cnVjdCBmaWxlICopOworCW1lbWNweShuZmR0LT5mZCwgb2ZkdC0+ZmQsIGNweSk7CisJbWVtc2V0KChjaGFyICopKG5mZHQtPmZkKSArIGNweSwgMCwgc2V0KTsKKworCWNweSA9IG9mZHQtPm1heF9mZHMgLyBCSVRTX1BFUl9CWVRFOworCXNldCA9IChuZmR0LT5tYXhfZmRzIC0gb2ZkdC0+bWF4X2ZkcykgLyBCSVRTX1BFUl9CWVRFOworCW1lbWNweShuZmR0LT5vcGVuX2Zkcywgb2ZkdC0+b3Blbl9mZHMsIGNweSk7CisJbWVtc2V0KChjaGFyICopKG5mZHQtPm9wZW5fZmRzKSArIGNweSwgMCwgc2V0KTsKKwltZW1jcHkobmZkdC0+Y2xvc2Vfb25fZXhlYywgb2ZkdC0+Y2xvc2Vfb25fZXhlYywgY3B5KTsKKwltZW1zZXQoKGNoYXIgKikobmZkdC0+Y2xvc2Vfb25fZXhlYykgKyBjcHksIDAsIHNldCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmR0YWJsZSAqYWxsb2NfZmR0YWJsZShpbnQgbnIpCitzdGF0aWMgc3RydWN0IGZkdGFibGUgKiBhbGxvY19mZHRhYmxlKHVuc2lnbmVkIGludCBucikKIHsKLQlzdHJ1Y3QgZmR0YWJsZSAqZmR0ID0gTlVMTDsKLQlpbnQgbmZkcyA9IDA7Ci0gIAlmZF9zZXQgKm5ld19vcGVuc2V0ID0gTlVMTCwgKm5ld19leGVjc2V0ID0gTlVMTDsKLQlzdHJ1Y3QgZmlsZSAqKm5ld19mZHM7CisJc3RydWN0IGZkdGFibGUgKmZkdDsKKwljaGFyICpkYXRhOwogCi0JZmR0ID0ga3phbGxvYyhzaXplb2YoKmZkdCksIEdGUF9LRVJORUwpOwotCWlmICghZmR0KQotICAJCWdvdG8gb3V0OwotCi0JbmZkcyA9IG1heF90KGludCwgOCAqIEwxX0NBQ0hFX0JZVEVTLCByb3VuZHVwX3Bvd19vZl90d28obnIgKyAxKSk7Ci0JaWYgKG5mZHMgPiBOUl9PUEVOKQotCQluZmRzID0gTlJfT1BFTjsKLQotICAJbmV3X29wZW5zZXQgPSBhbGxvY19mZHNldChuZmRzKTsKLSAgCW5ld19leGVjc2V0ID0gYWxsb2NfZmRzZXQobmZkcyk7Ci0gIAlpZiAoIW5ld19vcGVuc2V0IHx8ICFuZXdfZXhlY3NldCkKLSAgCQlnb3RvIG91dDsKLQlmZHQtPm9wZW5fZmRzID0gbmV3X29wZW5zZXQ7Ci0JZmR0LT5jbG9zZV9vbl9leGVjID0gbmV3X2V4ZWNzZXQ7Ci0JZmR0LT5tYXhfZmRzZXQgPSBuZmRzOwotCi0JbmZkcyA9IE5SX09QRU5fREVGQVVMVDsKIAkvKgotCSAqIEV4cGFuZCB0byB0aGUgbWF4IGluIGVhc3kgc3RlcHMsIGFuZCBrZWVwIGV4cGFuZGluZyBpdCB1bnRpbAotCSAqIHdlIGhhdmUgZW5vdWdoIGZvciB0aGUgcmVxdWVzdGVkIGZkIGFycmF5IHNpemUuCisJICogRmlndXJlIG91dCBob3cgbWFueSBmZHMgd2UgYWN0dWFsbHkgd2FudCB0byBzdXBwb3J0IGluIHRoaXMgZmR0YWJsZS4KKwkgKiBBbGxvY2F0aW9uIHN0ZXBzIGFyZSBrZXllZCB0byB0aGUgc2l6ZSBvZiB0aGUgZmRhcnJheSwgc2luY2UgaXQKKwkgKiBncm93cyBmYXIgZmFzdGVyIHRoYW4gYW55IG9mIHRoZSBvdGhlciBkeW5hbWljIGRhdGEuIFdlIHRyeSB0byBmaXQKKwkgKiB0aGUgZmRhcnJheSBpbnRvIGNvbWZvcnRhYmxlIHBhZ2UtdHVuZWQgY2h1bmtzOiBzdGFydGluZyBhdCAxMDI0QgorCSAqIGFuZCBncm93aW5nIGluIHBvd2VycyBvZiB0d28gZnJvbSB0aGVyZSBvbi4KIAkgKi8KLQlkbyB7Ci0jaWYgTlJfT1BFTl9ERUZBVUxUIDwgMjU2Ci0JCWlmIChuZmRzIDwgMjU2KQotCQkJbmZkcyA9IDI1NjsKLQkJZWxzZQotI2VuZGlmCi0JCWlmIChuZmRzIDwgKFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgZmlsZSAqKSkpCi0JCQluZmRzID0gUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBmaWxlICopOwotCQllbHNlIHsKLQkJCW5mZHMgPSBuZmRzICogMjsKLQkJCWlmIChuZmRzID4gTlJfT1BFTikKLQkJCQluZmRzID0gTlJfT1BFTjsKLSAgCQl9Ci0JfSB3aGlsZSAobmZkcyA8PSBucik7Ci0JbmV3X2ZkcyA9IGFsbG9jX2ZkX2FycmF5KG5mZHMpOwotCWlmICghbmV3X2ZkcykKLQkJZ290byBvdXQyOwotCWZkdC0+ZmQgPSBuZXdfZmRzOwotCWZkdC0+bWF4X2ZkcyA9IG5mZHM7Ci0JZmR0LT5mcmVlX2ZpbGVzID0gTlVMTDsKKwluciAvPSAoMTAyNCAvIHNpemVvZihzdHJ1Y3QgZmlsZSAqKSk7CisJbnIgPSByb3VuZHVwX3Bvd19vZl90d28obnIgKyAxKTsKKwluciAqPSAoMTAyNCAvIHNpemVvZihzdHJ1Y3QgZmlsZSAqKSk7CisJaWYgKG5yID4gTlJfT1BFTikKKwkJbnIgPSBOUl9PUEVOOworCisJZmR0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZkdGFibGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZkdCkKKwkJZ290byBvdXQ7CisJZmR0LT5tYXhfZmRzID0gbnI7CisJZGF0YSA9IGFsbG9jX2ZkbWVtKG5yICogc2l6ZW9mKHN0cnVjdCBmaWxlICopKTsKKwlpZiAoIWRhdGEpCisJCWdvdG8gb3V0X2ZkdDsKKwlmZHQtPmZkID0gKHN0cnVjdCBmaWxlICoqKWRhdGE7CisJZGF0YSA9IGFsbG9jX2ZkbWVtKG1heF90KHVuc2lnbmVkIGludCwKKwkJCQkgMiAqIG5yIC8gQklUU19QRVJfQllURSwgTDFfQ0FDSEVfQllURVMpKTsKKwlpZiAoIWRhdGEpCisJCWdvdG8gb3V0X2FycjsKKwlmZHQtPm9wZW5fZmRzID0gKGZkX3NldCAqKWRhdGE7CisJZGF0YSArPSBuciAvIEJJVFNfUEVSX0JZVEU7CisJZmR0LT5jbG9zZV9vbl9leGVjID0gKGZkX3NldCAqKWRhdGE7CisJSU5JVF9SQ1VfSEVBRCgmZmR0LT5yY3UpOworCWZkdC0+bmV4dCA9IE5VTEw7CisKIAlyZXR1cm4gZmR0Owotb3V0MjoKLQluZmRzID0gZmR0LT5tYXhfZmRzZXQ7Ci1vdXQ6Ci0JZnJlZV9mZHNldChuZXdfb3BlbnNldCwgbmZkcyk7Ci0JZnJlZV9mZHNldChuZXdfZXhlY3NldCwgbmZkcyk7CisKK291dF9hcnI6CisJZnJlZV9mZGFycihmZHQpOworb3V0X2ZkdDoKIAlrZnJlZShmZHQpOworb3V0OgogCXJldHVybiBOVUxMOwogfQogCkBAIC0yOTAsMTQgKzIwMSwxNyBAQAogCSAqIHdlIGRyb3BwZWQgdGhlIGxvY2sKIAkgKi8KIAljdXJfZmR0ID0gZmlsZXNfZmR0YWJsZShmaWxlcyk7Ci0JaWYgKG5yID49IGN1cl9mZHQtPm1heF9mZHMgfHwgbnIgPj0gY3VyX2ZkdC0+bWF4X2Zkc2V0KSB7CisJaWYgKG5yID49IGN1cl9mZHQtPm1heF9mZHMpIHsKIAkJLyogQ29udGludWUgYXMgcGxhbm5lZCAqLwogCQljb3B5X2ZkdGFibGUobmV3X2ZkdCwgY3VyX2ZkdCk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihmaWxlcy0+ZmR0LCBuZXdfZmR0KTsKLQkJZnJlZV9mZHRhYmxlKGN1cl9mZHQpOworCQlpZiAoY3VyX2ZkdC0+bWF4X2ZkcyA+IE5SX09QRU5fREVGQVVMVCkKKwkJCWZyZWVfZmR0YWJsZShjdXJfZmR0KTsKIAl9IGVsc2UgewogCQkvKiBTb21lYm9keSBlbHNlIGV4cGFuZGVkLCBzbyB1bmRvIG91ciBhdHRlbXB0ICovCi0JCV9fZnJlZV9mZHRhYmxlKG5ld19mZHQpOworCQlmcmVlX2ZkYXJyKG5ld19mZHQpOworCQlmcmVlX2Zkc2V0KG5ld19mZHQpOworCQlrZnJlZShuZXdfZmR0KTsKIAl9CiAJcmV0dXJuIDE7CiB9CkBAIC0zMTYsMTEgKzIzMCwxMCBAQAogCiAJZmR0ID0gZmlsZXNfZmR0YWJsZShmaWxlcyk7CiAJLyogRG8gd2UgbmVlZCB0byBleHBhbmQ/ICovCi0JaWYgKG5yIDwgZmR0LT5tYXhfZmRzZXQgJiYgbnIgPCBmZHQtPm1heF9mZHMpCisJaWYgKG5yIDwgZmR0LT5tYXhfZmRzKQogCQlyZXR1cm4gMDsKIAkvKiBDYW4gd2UgZXhwYW5kPyAqLwotCWlmIChmZHQtPm1heF9mZHNldCA+PSBOUl9PUEVOIHx8IGZkdC0+bWF4X2ZkcyA+PSBOUl9PUEVOIHx8Ci0JICAgIG5yID49IE5SX09QRU4pCisJaWYgKG5yID49IE5SX09QRU4pCiAJCXJldHVybiAtRU1GSUxFOwogCiAJLyogQWxsIGdvb2QsIHNvIHdlIHRyeSAqLwpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IDI0ZjI1YTAuLjRjMTdhMTggMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTE1Miw4ICsxNTIsOCBAQAogICovCiB2b2lkIGZhc3RjYWxsIF9fZnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKLQlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IGZpbGUtPmZfdmZzbW50OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CisJc3RydWN0IHZmc21vdW50ICptbnQgPSBmaWxlLT5mX3BhdGgubW50OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKIAltaWdodF9zbGVlcCgpOwpAQCAtMTc2LDggKzE3Niw4IEBACiAJCXB1dF93cml0ZV9hY2Nlc3MoaW5vZGUpOwogCXB1dF9waWQoZmlsZS0+Zl9vd25lci5waWQpOwogCWZpbGVfa2lsbChmaWxlKTsKLQlmaWxlLT5mX2RlbnRyeSA9IE5VTEw7Ci0JZmlsZS0+Zl92ZnNtbnQgPSBOVUxMOworCWZpbGUtPmZfcGF0aC5kZW50cnkgPSBOVUxMOworCWZpbGUtPmZfcGF0aC5tbnQgPSBOVUxMOwogCWZpbGVfZnJlZShmaWxlKTsKIAlkcHV0KGRlbnRyeSk7CiAJbW50cHV0KG1udCk7CkBAIC0yNzEsNyArMjcxLDcgQEAKIAlmaWxlX2xpc3RfbG9jaygpOwogCWxpc3RfZm9yX2VhY2gocCwgJnNiLT5zX2ZpbGVzKSB7CiAJCXN0cnVjdCBmaWxlICpmaWxlID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgZmlsZSwgZl91LmZ1X2xpc3QpOwotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJCS8qIEZpbGUgd2l0aCBwZW5kaW5nIGRlbGV0ZT8gKi8KIAkJaWYgKGlub2RlLT5pX25saW5rID09IDApCmRpZmYgLS1naXQgYS9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jIGIvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYwppbmRleCA0Mzg4NmZhLi4zOTk1ZDdmIDEwMDY0NAotLS0gYS9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogc3RhdGljIGludAogdnhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmcCwgdm9pZCAqcmV0cCwgZmlsbGRpcl90IGZpbGxlcikKIHsKLQlzdHJ1Y3QgaW5vZGUJCSppcCA9IGZwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUJCSppcCA9IGZwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2JwID0gaXAtPmlfc2I7CiAJdV9sb25nCQkJYnNpemUgPSBzYnAtPnNfYmxvY2tzaXplOwogCXVfbG9uZwkJCXBhZ2UsIG5wYWdlcywgYmxvY2ssIHBibG9ja3MsIG5ibG9ja3MsIG9mZnNldDsKZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggYzQwM2I2Ni4uYTRiMTQyYSAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTI1MSw4ICsyNTEsMTkgQEAKIAkJV0FSTl9PTihpbm9kZS0+aV9zdGF0ZSAmIElfV0lMTF9GUkVFKTsKIAogCWlmICgod2JjLT5zeW5jX21vZGUgIT0gV0JfU1lOQ19BTEwpICYmIChpbm9kZS0+aV9zdGF0ZSAmIElfTE9DSykpIHsKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOworCQlpbnQgcmV0OworCiAJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJmlub2RlLT5pX3NiLT5zX2RpcnR5KTsKLQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogRXZlbiBpZiB3ZSBkb24ndCBhY3R1YWxseSB3cml0ZSB0aGUgaW5vZGUgaXRzZWxmIGhlcmUsCisJCSAqIHdlIGNhbiBhdCBsZWFzdCBzdGFydCBzb21lIG9mIHRoZSBkYXRhIHdyaXRlb3V0Li4KKwkJICovCisJCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKKwkJcmV0ID0gZG9fd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMpOworCQlzcGluX2xvY2soJmlub2RlX2xvY2spOworCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9mcy9mdXNlL2NvbnRyb2wuYyBiL2ZzL2Z1c2UvY29udHJvbC5jCmluZGV4IDE2YjM5YzAuLjE3OTQzMDUgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvY29udHJvbC5jCisrKyBiL2ZzL2Z1c2UvY29udHJvbC5jCkBAIC0yMyw3ICsyMyw3IEBACiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmM7CiAJbXV0ZXhfbG9jaygmZnVzZV9tdXRleCk7Ci0JZmMgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOworCWZjID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCWlmIChmYykKIAkJZmMgPSBmdXNlX2Nvbm5fZ2V0KGZjKTsKIAltdXRleF91bmxvY2soJmZ1c2VfbXV0ZXgpOwpAQCAtMTkzLDggKzE5MywxMiBAQAogCiBzdGF0aWMgdm9pZCBmdXNlX2N0bF9raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CisJc3RydWN0IGZ1c2VfY29ubiAqZmM7CisKIAltdXRleF9sb2NrKCZmdXNlX211dGV4KTsKIAlmdXNlX2NvbnRyb2xfc2IgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZmMsICZmdXNlX2Nvbm5fbGlzdCwgZW50cnkpCisJCWZjLT5jdGxfbmRlbnRzID0gMDsKIAltdXRleF91bmxvY2soJmZ1c2VfbXV0ZXgpOwogCiAJa2lsbF9saXR0ZXJfc3VwZXIoc2IpOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggMWNhYmRiMi4uNDAwODA0NyAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC04NTYsNyArODU2LDcgQEAKIAlpbnQgZXJyOwogCXNpemVfdCBuYnl0ZXM7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggMTI4Zjc5Yy4uZjYzZWZlMSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTE0MSw4ICsxNDEsOCBAQAogCQkJCQlpc2RpciA/IEZVU0VfUkVMRUFTRURJUiA6IEZVU0VfUkVMRUFTRSk7CiAKIAkJLyogSG9sZCB2ZnNtb3VudCBhbmQgZGVudHJ5IHVudGlsIHJlbGVhc2UgaXMgZmluaXNoZWQgKi8KLQkJcmVxLT52ZnNtb3VudCA9IG1udGdldChmaWxlLT5mX3Zmc21udCk7Ci0JCXJlcS0+ZGVudHJ5ID0gZGdldChmaWxlLT5mX2RlbnRyeSk7CisJCXJlcS0+dmZzbW91bnQgPSBtbnRnZXQoZmlsZS0+Zl9wYXRoLm1udCk7CisJCXJlcS0+ZGVudHJ5ID0gZGdldChmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAkJcmVxdWVzdF9zZW5kX2JhY2tncm91bmQoZmMsIHJlcSk7CiAJfQogCkBAIC0xODQsNyArMTg0LDcgQEAKIAogc3RhdGljIGludCBmdXNlX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBmbF9vd25lcl90IGlkKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwogCXN0cnVjdCBmdXNlX2ZpbGUgKmZmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBmdXNlX3JlcSAqcmVxOwpAQCAtNDgzLDEwICs0ODMsOCBAQAogCQkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MpOwogCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCi0JCWlmIChvZmZzZXQgPT0gMCAmJiB0byA9PSBQQUdFX0NBQ0hFX1NJWkUpIHsKLQkJCWNsZWFyX3BhZ2VfZGlydHkocGFnZSk7CisJCWlmIChvZmZzZXQgPT0gMCAmJiB0byA9PSBQQUdFX0NBQ0hFX1NJWkUpCiAJCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCX0KIAl9CiAJZnVzZV9pbnZhbGlkYXRlX2F0dHIoaW5vZGUpOwogCXJldHVybiBlcnI7CkBAIC01MzMsNyArNTMxLDcgQEAKIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X2lvKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKIAlzaXplX3Qgbm1heCA9IHdyaXRlID8gZmMtPm1heF93cml0ZSA6IGZjLT5tYXhfcmVhZDsKIAlsb2ZmX3QgcG9zID0gKnBwb3M7CkBAIC02MDcsNyArNjA1LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGZ1c2VfZGlyZWN0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3NpemVfdCByZXM7CiAJLyogRG9uJ3QgYWxsb3cgcGFyYWxsZWwgd3JpdGVzIHRvIHRoZSBzYW1lIGZpbGUgKi8KIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CkBAIC02NjIsNyArNjYwLDcgQEAKIHN0YXRpYyB2b2lkIGZ1c2VfbGtfZmlsbChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgY29uc3Qgc3RydWN0IGZpbGVfbG9jayAqZmwsIGludCBvcGNvZGUsIHBpZF90IHBpZCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKIAlzdHJ1Y3QgZnVzZV9maWxlICpmZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZnVzZV9sa19pbiAqYXJnID0gJnJlcS0+bWlzYy5sa19pbjsKQEAgLTY4Miw3ICs2ODAsNyBAQAogCiBzdGF0aWMgaW50IGZ1c2VfZ2V0bGsoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwogCXN0cnVjdCBmdXNlX3JlcSAqcmVxOwogCXN0cnVjdCBmdXNlX2xrX291dCBvdXRhcmc7CkBAIC03MDcsNyArNzA1LDcgQEAKIAogc3RhdGljIGludCBmdXNlX3NldGxrKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKIAlpbnQgb3Bjb2RlID0gKGZsLT5mbF9mbGFncyAmIEZMX1NMRUVQKSA/IEZVU0VfU0VUTEtXIDogRlVTRV9TRVRMSzsKQEAgLTczNCw3ICs3MzIsNyBAQAogCiBzdGF0aWMgaW50IGZ1c2VfZmlsZV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKIAlpbnQgZXJyOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL0tjb25maWcgYi9mcy9nZnMyL0tjb25maWcKaW5kZXggYzA3OTFjYi4uNmEyZmZhMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9LY29uZmlnCisrKyBiL2ZzL2dmczIvS2NvbmZpZwpAQCAtMzQsNyArMzQsOSBAQAogCiBjb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTQogCXRyaXN0YXRlICJHRlMyIERMTSBsb2NraW5nIG1vZHVsZSIKLQlkZXBlbmRzIG9uIEdGUzJfRlMKKwlkZXBlbmRzIG9uIEdGUzJfRlMgJiYgTkVUICYmIElORVQgJiYgKElQVjYgfHwgSVBWNj1uKQorCXNlbGVjdCBJUF9TQ1RQIGlmIERMTV9TQ1RQCisJc2VsZWN0IENPTkZJR0ZTX0ZTCiAJc2VsZWN0IERMTQogCWhlbHAKIAlNdWx0aXBsZSBub2RlIGxvY2tpbmcgbW9kdWxlIGZvciBHRlMyCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19maWxlLmMgYi9mcy9nZnMyL29wc19maWxlLmMKaW5kZXggYjNmMWUwMy4uZmFhMDdlNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZmlsZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZpbGUuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAKIHN0YXRpYyBpbnQgZ2ZzMl9nZXRfZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHUzMiBfX3VzZXIgKnB0cikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CiAJaW50IGVycm9yOwpAQCAtMzA1LDcgKzMwNSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZG9fZ2ZzMl9zZXRfZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHUzMiByZXFmbGFncywgdTMyIG1hc2spCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGlub2RlKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtNTg4LDcgKzU4OCw3IEBACiB7CiAJc3RydWN0IGdmczJfZmlsZSAqZnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGdmczJfaG9sZGVyICpmbF9naCA9ICZmcC0+Zl9mbF9naDsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2w7CiAJdW5zaWduZWQgaW50IHN0YXRlOwogCWludCBmbGFnczsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggZDE0ZTEzOS4uZWU4MGI4YSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTg2Nyw5ICs4NjcsOSBAQAogCQllcnJvciA9IC1FQlVTWTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JbXV0ZXhfbG9jaygmc2ItPnNfYmRldi0+YmRfbW91bnRfbXV0ZXgpOworCWRvd24oJnNiLT5zX2JkZXYtPmJkX21vdW50X3NlbSk7CiAJbmV3ID0gc2dldChmc190eXBlLCB0ZXN0X2JkZXZfc3VwZXIsIHNldF9iZGV2X3N1cGVyLCBzYi0+c19iZGV2KTsKLQltdXRleF91bmxvY2soJnNiLT5zX2JkZXYtPmJkX21vdW50X211dGV4KTsKKwl1cCgmc2ItPnNfYmRldi0+YmRfbW91bnRfc2VtKTsKIAlpZiAoSVNfRVJSKG5ldykpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKG5ldyk7CiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9mcy9oZnMvZGlyLmMgYi9mcy9oZnMvZGlyLmMKaW5kZXggMzdkNjgxYi4uZTJlMDM1OCAxMDA2NDQKLS0tIGEvZnMvaGZzL2Rpci5jCisrKyBiL2ZzL2hmcy9kaXIuYwpAQCAtNTMsNyArNTMsNyBAQAogICovCiBzdGF0aWMgaW50IGhmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJaW50IGxlbiwgZXJyOwogCWNoYXIgc3RyYnVmW0hGU19NQVhfTkFNRUxFTl07CmRpZmYgLS1naXQgYS9mcy9oZnMvaW5vZGUuYyBiL2ZzL2hmcy9pbm9kZS5jCmluZGV4IDAyZjU1NzMuLjVjYjdmOGYgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9pbm9kZS5jCisrKyBiL2ZzL2hmcy9pbm9kZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmctPmhvc3Q7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZy0+aG9zdDsKIAogCXJldHVybiBibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBpbm9kZS0+aV9zYi0+c19iZGV2LCBpb3YsCiAJCQkJICBvZmZzZXQsIG5yX3NlZ3MsIGhmc19nZXRfYmxvY2ssIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9kaXIuYyBiL2ZzL2hmc3BsdXMvZGlyLmMKaW5kZXggN2UzMDk3NS4uZTg4NmFjOCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9kaXIuYworKysgYi9mcy9oZnNwbHVzL2Rpci5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAogc3RhdGljIGludCBoZnNwbHVzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlpbnQgbGVuLCBlcnI7CiAJY2hhciBzdHJidWZbSEZTUExVU19NQVhfU1RSTEVOICsgMV07CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmMKaW5kZXggOWUzNjc1Mi4uNzVlOGM0ZCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jCisrKyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwpAQCAtOTcsNyArOTcsNyBAQAogCQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBucl9zZWdzKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nLT5ob3N0OwogCiAJcmV0dXJuIGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKIAkJCQkgIG9mZnNldCwgbnJfc2VncywgaGZzcGx1c19nZXRfYmxvY2ssIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmcy5oIGIvZnMvaG9zdGZzL2hvc3Rmcy5oCmluZGV4IGNjYTNmYjYuLjcwNTQzYjEgMTAwNjQ0Ci0tLSBhL2ZzL2hvc3Rmcy9ob3N0ZnMuaAorKysgYi9mcy9ob3N0ZnMvaG9zdGZzLmgKQEAgLTc2LDcgKzc2LDcgQEAKIGV4dGVybiBpbnQgdW5saW5rX2ZpbGUoY29uc3QgY2hhciAqZmlsZSk7CiBleHRlcm4gaW50IGRvX21rZGlyKGNvbnN0IGNoYXIgKmZpbGUsIGludCBtb2RlKTsKIGV4dGVybiBpbnQgZG9fcm1kaXIoY29uc3QgY2hhciAqZmlsZSk7Ci1leHRlcm4gaW50IGRvX21rbm9kKGNvbnN0IGNoYXIgKmZpbGUsIGludCBtb2RlLCBpbnQgZGV2KTsKK2V4dGVybiBpbnQgZG9fbWtub2QoY29uc3QgY2hhciAqZmlsZSwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBtYWpvciwgdW5zaWduZWQgaW50IG1pbm9yKTsKIGV4dGVybiBpbnQgbGlua19maWxlKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKTsKIGV4dGVybiBpbnQgZG9fcmVhZGxpbmsoY2hhciAqZmlsZSwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7CiBleHRlcm4gaW50IHJlbmFtZV9maWxlKGNoYXIgKmZyb20sIGNoYXIgKnRvKTsKZGlmZiAtLWdpdCBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKaW5kZXggYjZiZDMzYy4uNjlhMzc2ZiAxMDA2NDQKLS0tIGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKKysrIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlyZXR1cm4obGlzdF9lbnRyeShpbm9kZSwgc3RydWN0IGhvc3Rmc19pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpKTsKIH0KIAotI2RlZmluZSBGSUxFX0hPU1RGU19JKGZpbGUpIEhPU1RGU19JKChmaWxlKS0+Zl9kZW50cnktPmRfaW5vZGUpCisjZGVmaW5lIEZJTEVfSE9TVEZTX0koZmlsZSkgSE9TVEZTX0koKGZpbGUpLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKQogCiBpbnQgaG9zdGZzX2RfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKQEAgLTMyNSw3ICszMjUsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXh0LCBpbm87CiAJaW50IGVycm9yLCBsZW47CiAKLQluYW1lID0gZGVudHJ5X25hbWUoZmlsZS0+Zl9kZW50cnksIDApOworCW5hbWUgPSBkZW50cnlfbmFtZShmaWxlLT5mX3BhdGguZGVudHJ5LCAwKTsKIAlpZihuYW1lID09IE5VTEwpIHJldHVybigtRU5PTUVNKTsKIAlkaXIgPSBvcGVuX2RpcihuYW1lLCAmZXJyb3IpOwogCWtmcmVlKG5hbWUpOwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJaWYodykKIAkJciA9IDE7CiAKLQluYW1lID0gZGVudHJ5X25hbWUoZmlsZS0+Zl9kZW50cnksIDApOworCW5hbWUgPSBkZW50cnlfbmFtZShmaWxlLT5mX3BhdGguZGVudHJ5LCAwKTsKIAlpZihuYW1lID09IE5VTEwpCiAJCXJldHVybigtRU5PTUVNKTsKIApAQCAtNzU1LDcgKzc1NSw3IEBACiAJCWdvdG8gb3V0X3B1dDsKIAogCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTsKLQllcnIgPSBkb19ta25vZChuYW1lLCBtb2RlLCBkZXYpOworCWVyciA9IGRvX21rbm9kKG5hbWUsIG1vZGUsIE1BSk9SKGRldiksIE1JTk9SKGRldikpOwogCWlmKGVycikKIAkJZ290byBvdXRfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmc191c2VyLmMgYi9mcy9ob3N0ZnMvaG9zdGZzX3VzZXIuYwppbmRleCAyM2I3Y2VlLi4xZWQ1ZWEzIDEwMDY0NAotLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX3VzZXIuYworKysgYi9mcy9ob3N0ZnMvaG9zdGZzX3VzZXIuYwpAQCAtMjk1LDExICsyOTUsMTEgQEAKIAlyZXR1cm4oMCk7CiB9CiAKLWludCBkb19ta25vZChjb25zdCBjaGFyICpmaWxlLCBpbnQgbW9kZSwgaW50IGRldikKK2ludCBkb19ta25vZChjb25zdCBjaGFyICpmaWxlLCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IG1ham9yLCB1bnNpZ25lZCBpbnQgbWlub3IpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IG1rbm9kKGZpbGUsIG1vZGUsIGRldik7CisJZXJyID0gbWtub2QoZmlsZSwgbW9kZSwgbWFrZWRldihtYWpvciwgbWlub3IpKTsKIAlpZihlcnIpIHJldHVybigtZXJybm8pOwogCXJldHVybigwKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZGlyLmMgYi9mcy9ocGZzL2Rpci5jCmluZGV4IDU5NGY5YzQuLjY5MTZjNDEgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZGlyLmMKKysrIGIvZnMvaHBmcy9kaXIuYwpAQCAtMjQsNyArMjQsNyBAQAogCWxvZmZfdCBuZXdfb2ZmID0gb2ZmICsgKHdoZW5jZSA9PSAxID8gZmlscC0+Zl9wb3MgOiAwKTsKIAlsb2ZmX3QgcG9zOwogCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKLQlzdHJ1Y3QgaW5vZGUgKmkgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmkgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBocGZzX2lub2RlX2luZm8gKmhwZnNfaW5vZGUgPSBocGZzX2koaSk7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gaS0+aV9zYjsKIApAQCAtNTIsNyArNTIsNyBAQAogCiBzdGF0aWMgaW50IGhwZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqaHBmc19pbm9kZSA9IGhwZnNfaShpbm9kZSk7CiAJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoOwogCXN0cnVjdCBocGZzX2RpcmVudCAqZGU7CmRpZmYgLS1naXQgYS9mcy9ocGZzL2ZpbGUuYyBiL2ZzL2hwZnMvZmlsZS5jCmluZGV4IDhiOTRkMjQuLmZiNGM4OTEgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZmlsZS5jCisrKyBiL2ZzL2hwZnMvZmlsZS5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAogCXJldHZhbCA9IGRvX3N5bmNfd3JpdGUoZmlsZSwgYnVmLCBjb3VudCwgcHBvcyk7CiAJaWYgKHJldHZhbCA+IDApCi0JCWhwZnNfaShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSktPmlfZGlydHkgPSAxOworCQlocGZzX2koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmlfZGlydHkgPSAxOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2hwcGZzL2hwcGZzX2tlcm4uYyBiL2ZzL2hwcGZzL2hwcGZzX2tlcm4uYwppbmRleCA2NDI2NzVmLi5hZmQzNDBhIDEwMDY0NAotLS0gYS9mcy9ocHBmcy9ocHBmc19rZXJuLmMKKysrIGIvZnMvaHBwZnMvaHBwZnNfa2Vybi5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAlzc2l6ZV90ICgqcmVhZCkoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiAJc3NpemVfdCBuOwogCi0JcmVhZCA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2ZvcC0+cmVhZDsKKwlyZWFkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9mb3AtPnJlYWQ7CiAKIAlpZighaXNfdXNlcikKIAkJc2V0X2ZzKEtFUk5FTF9EUyk7CkBAIC0zMjAsNyArMzIwLDcgQEAKIAlzc2l6ZV90ICgqd3JpdGUpKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwogCWludCBlcnI7CiAKLQl3cml0ZSA9IHByb2NfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfZm9wLT53cml0ZTsKKwl3cml0ZSA9IHByb2NfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9mb3AtPndyaXRlOwogCiAJcHJvY19maWxlLT5mX3BvcyA9IGZpbGUtPmZfcG9zOwogCWVyciA9ICgqd3JpdGUpKHByb2NfZmlsZSwgYnVmLCBsZW4sICZwcm9jX2ZpbGUtPmZfcG9zKTsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCWlmKGRhdGEgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKLQlob3N0X2ZpbGUgPSBkZW50cnlfbmFtZShmaWxlLT5mX2RlbnRyeSwgc3RybGVuKCIvcnciKSk7CisJaG9zdF9maWxlID0gZGVudHJ5X25hbWUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgc3RybGVuKCIvcnciKSk7CiAJaWYoaG9zdF9maWxlID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWUyOwogCkBAIC01NDcsNyArNTQ3LDcgQEAKIAlsb2ZmX3QgKCpsbHNlZWspKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKIAlsb2ZmX3QgcmV0OwogCi0JbGxzZWVrID0gcHJvY19maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9mb3AtPmxsc2VlazsKKwlsbHNlZWsgPSBwcm9jX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfZm9wLT5sbHNlZWs7CiAJaWYobGxzZWVrICE9IE5VTEwpewogCQlyZXQgPSAoKmxsc2VlaykocHJvY19maWxlLCBvZmYsIHdoZXJlKTsKIAkJaWYocmV0IDwgMCkKQEAgLTU5MSwxMCArNTkxLDEwIEBACiAJc3RydWN0IGhwcGZzX2RpcmVudCBkaXJlbnQgPSAoKHN0cnVjdCBocHBmc19kaXJlbnQpCiAJCSAgICAgICAgICAgICAgICAgICAgICB7IC52ZnNfZGlyZW50ICAJPSBlbnQsCiAJCQkJCS5maWxsZGlyIAk9IGZpbGxkaXIsCi0JCQkJCS5kZW50cnkgIAk9IGZpbGUtPmZfZGVudHJ5IH0gKTsKKwkJCQkJLmRlbnRyeSAgCT0gZmlsZS0+Zl9wYXRoLmRlbnRyeSB9ICk7CiAJaW50IGVycjsKIAotCXJlYWRkaXIgPSBwcm9jX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2ZvcC0+cmVhZGRpcjsKKwlyZWFkZGlyID0gcHJvY19maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2ZvcC0+cmVhZGRpcjsKIAogCXByb2NfZmlsZS0+Zl9wb3MgPSBmaWxlLT5mX3BvczsKIAllcnIgPSAoKnJlYWRkaXIpKHByb2NfZmlsZSwgJmRpcmVudCwgaHBwZnNfZmlsbGRpcik7CmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IDA3MDZmNWEuLjRmNGNkMTMgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC01OCw3ICs1OCw3IEBACiAKIHN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWxvZmZfdCBsZW4sIHZtYV9sZW47CiAJaW50IHJldDsKIApAQCAtMTc2LDcgKzE3Niw3IEBACiAKIHN0YXRpYyB2b2lkIHRydW5jYXRlX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQljbGVhcl9wYWdlX2RpcnR5KHBhZ2UpOworCWNhbmNlbF9kaXJ0eV9wYWdlKHBhZ2UsIC8qIE5vIElPIGFjY291bnRpbmcgZm9yIGh1Z2UgcGFnZXM/ICovMCk7CiAJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CiAJcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZShwYWdlKTsKIAlwdXRfcGFnZShwYWdlKTsKQEAgLTc3NCw4ICs3NzQsOCBAQAogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJaW5vZGUtPmlfc2l6ZSA9IHNpemU7CiAJaW5vZGUtPmlfbmxpbmsgPSAwOwotCWZpbGUtPmZfdmZzbW50ID0gbW50Z2V0KGh1Z2V0bGJmc192ZnNtb3VudCk7Ci0JZmlsZS0+Zl9kZW50cnkgPSBkZW50cnk7CisJZmlsZS0+Zl9wYXRoLm1udCA9IG1udGdldChodWdldGxiZnNfdmZzbW91bnQpOworCWZpbGUtPmZfcGF0aC5kZW50cnkgPSBkZW50cnk7CiAJZmlsZS0+Zl9tYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAlmaWxlLT5mX29wID0gJmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CiAJZmlsZS0+Zl9tb2RlID0gRk1PREVfV1JJVEUgfCBGTU9ERV9SRUFEOwpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggOWVjY2NhYi4uYmYyMWRjNiAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0xMTQ0LDcgKzExNDQsNiBAQAogCQlyZXMgPSBpbm9kZS0+aV9tYXBwaW5nLT5hX29wcy0+Ym1hcChpbm9kZS0+aV9tYXBwaW5nLCBibG9jayk7CiAJcmV0dXJuIHJlczsKIH0KLQogRVhQT1JUX1NZTUJPTChibWFwKTsKIAogLyoqCkBAIC0xMTYzLDI3ICsxMTYyLDQzIEBACiAKIAlpZiAoSVNfUkRPTkxZKGlub2RlKSkKIAkJcmV0dXJuOwotCi0JaWYgKChpbm9kZS0+aV9mbGFncyAmIFNfTk9BVElNRSkgfHwKLQkgICAgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfTk9BVElNRSkgfHwKLQkgICAgKChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX05PRElSQVRJTUUpICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpKQorCWlmIChpbm9kZS0+aV9mbGFncyAmIFNfTk9BVElNRSkKKwkJcmV0dXJuOworCWlmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX05PQVRJTUUpCisJCXJldHVybjsKKwlpZiAoKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfTk9ESVJBVElNRSkgJiYgU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJcmV0dXJuOwogCiAJLyoKIAkgKiBXZSBtYXkgaGF2ZSBhIE5VTEwgdmZzbW91bnQgd2hlbiBjb21pbmcgZnJvbSBORlNECiAJICovCi0JaWYgKG1udCAmJgotCSAgICAoKG1udC0+bW50X2ZsYWdzICYgTU5UX05PQVRJTUUpIHx8Ci0JICAgICAoKG1udC0+bW50X2ZsYWdzICYgTU5UX05PRElSQVRJTUUpICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpKSkKLQkJcmV0dXJuOworCWlmIChtbnQpIHsKKwkJaWYgKG1udC0+bW50X2ZsYWdzICYgTU5UX05PQVRJTUUpCisJCQlyZXR1cm47CisJCWlmICgobW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9ESVJBVElNRSkgJiYgU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCXJldHVybjsKKworCQlpZiAobW50LT5tbnRfZmxhZ3MgJiBNTlRfUkVMQVRJTUUpIHsKKwkJCS8qCisJCQkgKiBXaXRoIHJlbGF0aXZlIGF0aW1lLCBvbmx5IHVwZGF0ZSBhdGltZSBpZiB0aGUKKwkJCSAqIHByZXZpb3VzIGF0aW1lIGlzIGVhcmxpZXIgdGhhbiBlaXRoZXIgdGhlIGN0aW1lIG9yCisJCQkgKiBtdGltZS4KKwkJCSAqLworCQkJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX210aW1lLAorCQkJCQkJJmlub2RlLT5pX2F0aW1lKSA8IDAgJiYKKwkJCSAgICB0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9jdGltZSwKKwkJCQkJCSZpbm9kZS0+aV9hdGltZSkgPCAwKQorCQkJCXJldHVybjsKKwkJfQorCX0KIAogCW5vdyA9IGN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7Ci0JaWYgKCF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfYXRpbWUsICZub3cpKSB7Ci0JCWlub2RlLT5pX2F0aW1lID0gbm93OwotCQltYXJrX2lub2RlX2RpcnR5X3N5bmMoaW5vZGUpOwotCX0KLX0KKwlpZiAodGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2F0aW1lLCAmbm93KSkKKwkJcmV0dXJuOwogCisJaW5vZGUtPmlfYXRpbWUgPSBub3c7CisJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKK30KIEVYUE9SVF9TWU1CT0wodG91Y2hfYXRpbWUpOwogCiAvKioKQEAgLTEyMDAsNyArMTIxNSw3IEBACiAKIHZvaWQgZmlsZV91cGRhdGVfdGltZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHRpbWVzcGVjIG5vdzsKIAlpbnQgc3luY19pdCA9IDA7CiAKZGlmZiAtLWdpdCBhL2ZzL2lub3RpZnlfdXNlci5jIGIvZnMvaW5vdGlmeV91c2VyLmMKaW5kZXggZTE5NTZlNi4uNTVmNmRhNSAxMDA2NDQKLS0tIGEvZnMvaW5vdGlmeV91c2VyLmMKKysrIGIvZnMvaW5vdGlmeV91c2VyLmMKQEAgLTU3MCw5ICs1NzAsOSBAQAogCWRldi0+aWggPSBpaDsKIAogCWZpbHAtPmZfb3AgPSAmaW5vdGlmeV9mb3BzOwotCWZpbHAtPmZfdmZzbW50ID0gbW50Z2V0KGlub3RpZnlfbW50KTsKLQlmaWxwLT5mX2RlbnRyeSA9IGRnZXQoaW5vdGlmeV9tbnQtPm1udF9yb290KTsKLQlmaWxwLT5mX21hcHBpbmcgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nOworCWZpbHAtPmZfcGF0aC5tbnQgPSBtbnRnZXQoaW5vdGlmeV9tbnQpOworCWZpbHAtPmZfcGF0aC5kZW50cnkgPSBkZ2V0KGlub3RpZnlfbW50LT5tbnRfcm9vdCk7CisJZmlscC0+Zl9tYXBwaW5nID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nOwogCWZpbHAtPmZfbW9kZSA9IEZNT0RFX1JFQUQ7CiAJZmlscC0+Zl9mbGFncyA9IE9fUkRPTkxZOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGRldjsKZGlmZiAtLWdpdCBhL2ZzL2lvY3RsLmMgYi9mcy9pb2N0bC5jCmluZGV4IDRiNzY2MGIuLmZmNjE3NzIgMTAwNjQ0Ci0tLSBhL2ZzL2lvY3RsLmMKKysrIGIvZnMvaW9jdGwuYwpAQCAtMzEsNyArMzEsNyBAQAogCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKGZpbHAtPmZfb3AtPmlvY3RsKSB7CiAJCWxvY2tfa2VybmVsKCk7Ci0JCWVycm9yID0gZmlscC0+Zl9vcC0+aW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsCisJCWVycm9yID0gZmlscC0+Zl9vcC0+aW9jdGwoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKIAkJCQkJICBmaWxwLCBjbWQsIGFyZyk7CiAJCXVubG9ja19rZXJuZWwoKTsKIAl9CkBAIC00NSw3ICs0NSw3IEBACiB7CiAJaW50IGVycm9yOwogCWludCBibG9jazsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgX191c2VyICpwID0gKGludCBfX3VzZXIgKilhcmc7CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMTM3LDE3ICsxMzcsMTcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgRklPUVNJWkU6Ci0JCQlpZiAoU19JU0RJUihmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSB8fAotCQkJICAgIFNfSVNSRUcoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgfHwKLQkJCSAgICBTX0lTTE5LKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7Ci0JCQkJbG9mZl90IHJlcyA9IGlub2RlX2dldF9ieXRlcyhmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCQlpZiAoU19JU0RJUihmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpIHx8CisJCQkgICAgU19JU1JFRyhmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpIHx8CisJCQkgICAgU19JU0xOSyhmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7CisJCQkJbG9mZl90IHJlcyA9IGlub2RlX2dldF9ieXRlcyhmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAkJCQllcnJvciA9IGNvcHlfdG9fdXNlcigobG9mZl90IF9fdXNlciAqKWFyZywgJnJlcywgc2l6ZW9mKHJlcykpID8gLUVGQVVMVCA6IDA7CiAJCQl9CiAJCQllbHNlCiAJCQkJZXJyb3IgPSAtRU5PVFRZOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpZiAoU19JU1JFRyhmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKKwkJCWlmIChTX0lTUkVHKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCiAJCQkJZXJyb3IgPSBmaWxlX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKIAkJCWVsc2UKIAkJCQllcnJvciA9IGRvX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2NvbXByZXNzLmMgYi9mcy9pc29mcy9jb21wcmVzcy5jCmluZGV4IDczMTgxNjMuLjZiYmJkYjUgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2NvbXByZXNzLmMKKysrIGIvZnMvaXNvZnMvY29tcHJlc3MuYwpAQCAtNDIsNyArNDIsNyBAQAogICovCiBzdGF0aWMgaW50IHppc29mc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAl1bnNpZ25lZCBpbnQgbWF4cGFnZSwgeHBhZ2UsIGZwYWdlLCBibG9ja2luZGV4OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvZGlyLmMgYi9mcy9pc29mcy9kaXIuYwppbmRleCAyN2UyNzY5Li40YWYyNTQ4IDEwMDY0NAotLS0gYS9mcy9pc29mcy9kaXIuYworKysgYi9mcy9pc29mcy9kaXIuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAKIAkJLyogSGFuZGxlIHRoZSBjYXNlIG9mIHRoZSAnLi4nIGRpcmVjdG9yeSAqLwogCQlpZiAoZGUtPm5hbWVfbGVuWzBdID09IDEgJiYgZGUtPm5hbWVbMF0gPT0gMSkgewotCQkJaW5vZGVfbnVtYmVyID0gcGFyZW50X2lubyhmaWxwLT5mX2RlbnRyeSk7CisJCQlpbm9kZV9udW1iZXIgPSBwYXJlbnRfaW5vKGZpbHAtPmZfcGF0aC5kZW50cnkpOwogCQkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLi4iLCAyLCBmaWxwLT5mX3BvcywgaW5vZGVfbnVtYmVyLCBEVF9ESVIpIDwgMCkKIAkJCQlicmVhazsKIAkJCWZpbHAtPmZfcG9zICs9IGRlX2xlbjsKQEAgLTI1NSw4ICsyNTUsNyBAQAogCWludCByZXN1bHQ7CiAJY2hhciAqIHRtcG5hbWU7CiAJc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICogdG1wZGU7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwotCisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAl0bXBuYW1lID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKHRtcG5hbWUgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2ZzL2piZC9jb21taXQuYyBiL2ZzL2piZC9jb21taXQuYwppbmRleCAxMGJlNTEyLi5iZTQ2NDhiIDEwMDY0NAotLS0gYS9mcy9qYmQvY29tbWl0LmMKKysrIGIvZnMvamJkL2NvbW1pdC5jCkBAIC0yNDgsOCArMjQ4LDEyIEBACiAJCQkJYnVmcyA9IDA7CiAJCQkJZ290byB3cml0ZV9vdXRfZGF0YTsKIAkJCX0KLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIGlmICghbG9ja2VkICYmIGJ1ZmZlcl9sb2NrZWQoYmgpKSB7CisJCQlfX2pvdXJuYWxfZmlsZV9idWZmZXIoamgsIGNvbW1pdF90cmFuc2FjdGlvbiwKKwkJCQkJCUJKX0xvY2tlZCk7CisJCQlqYmRfdW5sb2NrX2JoX3N0YXRlKGJoKTsKKwkJCXB1dF9iaChiaCk7CisJCX0gZWxzZSB7CiAJCQlCVUZGRVJfVFJBQ0UoYmgsICJ3cml0ZW91dCBjb21wbGV0ZTogdW5maWxlIik7CiAJCQlfX2pvdXJuYWxfdW5maWxlX2J1ZmZlcihqaCk7CiAJCQlqYmRfdW5sb2NrX2JoX3N0YXRlKGJoKTsKZGlmZiAtLWdpdCBhL2ZzL2piZC90cmFuc2FjdGlvbi5jIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKaW5kZXggZDM4ZTBkNS4uY2NlYWY1NyAxMDA2NDQKLS0tIGEvZnMvamJkL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCiAJLyogU2V0IHVwIHRoZSBjb21taXQgdGltZXIgZm9yIHRoZSBuZXcgdHJhbnNhY3Rpb24uICovCi0Jam91cm5hbC0+al9jb21taXRfdGltZXIuZXhwaXJlcyA9IHRyYW5zYWN0aW9uLT50X2V4cGlyZXM7CisJam91cm5hbC0+al9jb21taXRfdGltZXIuZXhwaXJlcyA9IHJvdW5kX2ppZmZpZXModHJhbnNhY3Rpb24tPnRfZXhwaXJlcyk7CiAJYWRkX3RpbWVyKCZqb3VybmFsLT5qX2NvbW1pdF90aW1lcik7CiAKIAlKX0FTU0VSVChqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24gPT0gTlVMTCk7CmRpZmYgLS1naXQgYS9mcy9qZmZzL2lub2RlLXYyMy5jIGIvZnMvamZmcy9pbm9kZS12MjMuYwppbmRleCA5ZjE1YmNlLi40M2JhYTFhIDEwMDY0NAotLS0gYS9mcy9qZmZzL2lub2RlLXYyMy5jCisrKyBiL2ZzL2pmZnMvaW5vZGUtdjIzLmMKQEAgLTU2Niw3ICs1NjYsNyBAQAogamZmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewogCXN0cnVjdCBqZmZzX2ZpbGUgKmY7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBqZmZzX2NvbnRyb2wgKmMgPSAoc3RydWN0IGpmZnNfY29udHJvbCAqKWlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJaW50IGo7CkBAIC04MTgsNyArODE4LDcgQEAKIAogCUQxKHsKIAkgICAgICAgIGludCBsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47Ci0JCWNoYXIgKl9uYW1lID0gKGNoYXIgKikga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJY2hhciAqX25hbWUgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCQltZW1jcHkoX25hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGxlbik7CiAJCV9uYW1lW2xlbl0gPSAnXDAnOwogCQlwcmludGsoIioqKmpmZnNfbWtkaXIoKTogZGlyID0gMHglcCwgbmFtZSA9IFwiJXNcIiwgIgpAQCAtOTY0LDcgKzk2NCw3IEBACiAJRDEoewogCQlpbnQgbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOwogCQljb25zdCBjaGFyICpuYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKLQkJY2hhciAqX25hbWUgPSAoY2hhciAqKSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCQljaGFyICpfbmFtZSA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJCW1lbWNweShfbmFtZSwgbmFtZSwgbGVuKTsKIAkJX25hbWVbbGVuXSA9ICdcMCc7CiAJCXByaW50aygiKioqamZmc19yZW1vdmUoKTogZmlsZSA9IFwiJXNcIiwgaW5vID0gJWxkXG4iLCBfbmFtZSwgZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CkBAIC0xMzcyLDcgKzEzNzIsNyBAQAogCXN0cnVjdCBqZmZzX2NvbnRyb2wgKmM7CiAJc3RydWN0IGpmZnNfZmlsZSAqZjsKIAlzdHJ1Y3QgamZmc19ub2RlICpub2RlOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmVjb3ZlcmFibGUgPSAwOwogCXNpemVfdCB3cml0dGVuID0gMDsKQEAgLTEzODAsNyArMTM4MCw3IEBACiAJbG9mZl90IHBvcyA9ICpwcG9zOwogCWludCBlcnI7CiAKLQlpbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCWlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCUQyKHByaW50aygiKioqamZmc19maWxlX3dyaXRlKCk6IGlub2RlOiAweCVwIChpbm86ICVsdSksICIKIAkJICAiZmlscDogMHglcCwgYnVmOiAweCVwLCBjb3VudDogJWRcbiIsCmRpZmYgLS1naXQgYS9mcy9qZmZzL2ludHJlcC5jIGIvZnMvamZmcy9pbnRyZXAuYwppbmRleCBkMGU3ODNmLi42ZGQxODkxIDEwMDY0NAotLS0gYS9mcy9qZmZzL2ludHJlcC5jCisrKyBiL2ZzL2pmZnMvaW50cmVwLmMKQEAgLTQzNiw3ICs0MzYsNyBAQAogCWludCBpLCBsZW5ndGg7CiAKIAkvKiBBbGxvY2F0ZSByZWFkIGJ1ZmZlciAqLwotCXJlYWRfYnVmID0gKF9fdTggKikga21hbGxvYyAoc2l6ZW9mKF9fdTgpICogNDA5NiwgR0ZQX0tFUk5FTCk7CisJcmVhZF9idWYgPSBrbWFsbG9jKHNpemVvZihfX3U4KSAqIDQwOTYsIEdGUF9LRVJORUwpOwogCWlmICghcmVhZF9idWYpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJrbWFsbG9jIGZhaWxlZCBpbiBqZmZzX2NoZWNrc3VtX2ZsYXNoKClcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTc0NCwxMSArNzQ0LDExIEBACiAKIAogCS8qIEFsbG9jYXRlIHJlYWQgYnVmZmVycyAqLwotCXJlYWRfYnVmMSA9IChfX3U4ICopIGttYWxsb2MgKHNpemVvZihfX3U4KSAqIFJFQURfQUhFQURfQllURVMsIEdGUF9LRVJORUwpOworCXJlYWRfYnVmMSA9IGttYWxsb2Moc2l6ZW9mKF9fdTgpICogUkVBRF9BSEVBRF9CWVRFUywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZWFkX2J1ZjEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmVhZF9idWYyID0gKF9fdTggKikga21hbGxvYyAoc2l6ZW9mKF9fdTgpICogUkVBRF9BSEVBRF9CWVRFUywgR0ZQX0tFUk5FTCk7CisJcmVhZF9idWYyID0ga21hbGxvYyhzaXplb2YoX191OCkgKiBSRUFEX0FIRUFEX0JZVEVTLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJlYWRfYnVmMikgewogCQlrZnJlZShyZWFkX2J1ZjEpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTg3Niw3ICs4NzYsNyBAQAogCX0KIAogCS8qIEFsbG9jYXRlIHJlYWQgYnVmZmVyICovCi0JcmVhZF9idWYgPSAoX191OCAqKSBrbWFsbG9jIChzaXplb2YoX191OCkgKiA0MDk2LCBHRlBfS0VSTkVMKTsKKwlyZWFkX2J1ZiA9IGttYWxsb2Moc2l6ZW9mKF9fdTgpICogNDA5NiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZWFkX2J1ZikgewogCQlmbGFzaF9zYWZlX3JlbGVhc2UoZm1jLT5tdGQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE0NjMsNyArMTQ2Myw3IEBACiAJCQlrZnJlZShmLT5uYW1lKTsKIAkJCURKTShub19uYW1lLS0pOwogCQl9Ci0JCWlmICghKGYtPm5hbWUgPSAoY2hhciAqKSBrbWFsbG9jKHJhd19pbm9kZS0+bnNpemUgKyAxLAorCQlpZiAoIShmLT5uYW1lID0ga21hbGxvYyhyYXdfaW5vZGUtPm5zaXplICsgMSwKIAkJCQkJCSBHRlBfS0VSTkVMKSkpIHsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC0xNzM3LDcgKzE3MzcsNyBAQAogCQlwcmludGsoImpmZnNfZmluZF9jaGlsZCgpOiBGb3VuZCBcIiVzXCIuXG4iLCBmLT5uYW1lKTsKIAl9CiAJZWxzZSB7Ci0JCWNoYXIgKmNvcHkgPSAoY2hhciAqKSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCQljaGFyICpjb3B5ID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGNvcHkpIHsKIAkJCW1lbWNweShjb3B5LCBuYW1lLCBsZW4pOwogCQkJY29weVtsZW5dID0gJ1wwJzsKQEAgLTI2MjcsNyArMjYyNyw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIShzcGFjZSA9IChjaGFyICopIGttYWxsb2MoaW5kZW50ICsgMSwgR0ZQX0tFUk5FTCkpKSB7CisJaWYgKCEoc3BhY2UgPSBrbWFsbG9jKGluZGVudCArIDEsIEdGUF9LRVJORUwpKSkgewogCQlwcmludGsoImpmZnNfcHJpbnRfdHJlZSgpOiBPdXQgb2YgbWVtb3J5IVxuIik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9mcy9qZmZzL2pmZnNfZm0uYyBiL2ZzL2pmZnMvamZmc19mbS5jCmluZGV4IDA3NzI1OGIuLjVhOTVmYmQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMvamZmc19mbS5jCisrKyBiL2ZzL2pmZnMvamZmc19mbS5jCkBAIC0xNyw2ICsxNyw3IEBACiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2pmZnMuaD4KICNpbmNsdWRlICJqZmZzX2ZtLmgiCkBAIC0xMDQsNyArMTA1LDcgQEAKIAogCW10ZCA9IGdldF9tdGRfZGV2aWNlKE5VTEwsIHVuaXQpOwogCi0JaWYgKCFtdGQpIHsKKwlpZiAoSVNfRVJSKG10ZCkpIHsKIAkJa2ZyZWUoZm1jKTsKIAkJREpNKG5vX2pmZnNfZm1jb250cm9sLS0pOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2RlYnVnLmMgYi9mcy9qZmZzMi9kZWJ1Zy5jCmluZGV4IDcyYjRmYzEuLjQxODllNGEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2RlYnVnLmMKKysrIGIvZnMvamZmczIvZGVidWcuYwpAQCAtMTc4LDggKzE3OCw4IEBACiAJd2hpbGUgKHJlZjIpIHsKIAkJdWludDMyX3QgdG90bGVuID0gcmVmX3RvdGxlbihjLCBqZWIsIHJlZjIpOwogCi0JCWlmIChyZWYyLT5mbGFzaF9vZmZzZXQgPCBqZWItPm9mZnNldCB8fAotCQkJCXJlZjItPmZsYXNoX29mZnNldCA+IGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUpIHsKKwkJaWYgKHJlZl9vZmZzZXQocmVmMikgPCBqZWItPm9mZnNldCB8fAorCQkJCXJlZl9vZmZzZXQocmVmMikgPiBqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplKSB7CiAJCQlKRkZTMl9FUlJPUigibm9kZV9yZWYgJSMwOHggc2hvdWxkbid0IGJlIGluIGJsb2NrIGF0ICUjMDh4LlxuIiwKIAkJCQlyZWZfb2Zmc2V0KHJlZjIpLCBqZWItPm9mZnNldCk7CiAJCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZGVidWcuaCBiL2ZzL2pmZnMyL2RlYnVnLmgKaW5kZXggM2RhZjNiYy4uZjg5Yzg1ZCAxMDA2NDQKLS0tIGEvZnMvamZmczIvZGVidWcuaAorKysgYi9mcy9qZmZzMi9kZWJ1Zy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaWZuZGVmIF9KRkZTMl9ERUJVR19IXwogI2RlZmluZSBfSkZGUzJfREVCVUdfSF8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpZm5kZWYgQ09ORklHX0pGRlMyX0ZTX0RFQlVHCiAjZGVmaW5lIENPTkZJR19KRkZTMl9GU19ERUJVRyAwCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9kaXIuYyBiL2ZzL2pmZnMyL2Rpci5jCmluZGV4IDlkZWY2YWQuLmRhNjAzNGQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2Rpci5jCisrKyBiL2ZzL2pmZnMyL2Rpci5jCkBAIC0xMjMsMTEgKzEyMywxMSBAQAogewogCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmOwogCXN0cnVjdCBqZmZzMl9zYl9pbmZvICpjOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmZkOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjdXJvZnM7CiAKLQlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfcmVhZGRpcigpIGZvciBkaXJfaSAjJWx1XG4iLCBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm8pKTsKKwlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfcmVhZGRpcigpIGZvciBkaXJfaSAjJWx1XG4iLCBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubykpOwogCiAJZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOwogCWMgPSBKRkZTMl9TQl9JTkZPKGlub2RlLT5pX3NiKTsKQEAgLTE0MSw3ICsxNDEsNyBAQAogCQlvZmZzZXQrKzsKIAl9CiAJaWYgKG9mZnNldCA9PSAxKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcGlubyA9IHBhcmVudF9pbm8oZmlscC0+Zl9kZW50cnkpOworCQl1bnNpZ25lZCBsb25nIHBpbm8gPSBwYXJlbnRfaW5vKGZpbHAtPmZfcGF0aC5kZW50cnkpOwogCQlEMShwcmludGsoS0VSTl9ERUJVRyAiRGlyZW50IDE6IFwiLi5cIiwgaW5vICMlbHVcbiIsIHBpbm8pKTsKIAkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLi4iLCAyLCAxLCBwaW5vLCBEVF9ESVIpIDwgMCkKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZnMuYyBiL2ZzL2pmZnMyL2ZzLmMKaW5kZXggN2JjMWE0Mi4uYWJiOTBjMCAxMDA2NDQKLS0tIGEvZnMvamZmczIvZnMuYworKysgYi9mcy9qZmZzMi9mcy5jCkBAIC01MDIsMTIgKzUwMiwxMSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQljLT5pbm9jYWNoZV9saXN0ID0ga21hbGxvYyhJTk9DQUNIRV9IQVNIU0laRSAqIHNpemVvZihzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKiksIEdGUF9LRVJORUwpOworCWMtPmlub2NhY2hlX2xpc3QgPSBrY2FsbG9jKElOT0NBQ0hFX0hBU0hTSVpFLCBzaXplb2Yoc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWMtPmlub2NhY2hlX2xpc3QpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfd2J1ZjsKIAl9Ci0JbWVtc2V0KGMtPmlub2NhY2hlX2xpc3QsIDAsIElOT0NBQ0hFX0hBU0hTSVpFICogc2l6ZW9mKHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqKSk7CiAKIAlqZmZzMl9pbml0X3hhdHRyX3N1YnN5c3RlbShjKTsKIApkaWZmIC0tZ2l0IGEvZnMvamZmczIvZ2MuYyBiL2ZzL2pmZnMyL2djLmMKaW5kZXggZGFmZjMzNC4uM2EzY2YyMiAxMDA2NDQKLS0tIGEvZnMvamZmczIvZ2MuYworKysgYi9mcy9qZmZzMi9nYy5jCkBAIC04MzgsNiArODM4LDggQEAKIAogCQlmb3IgKHJhdyA9IGYtPmlub2NhY2hlLT5ub2RlczsgcmF3ICE9ICh2b2lkICopZi0+aW5vY2FjaGU7IHJhdyA9IHJhdy0+bmV4dF9pbl9pbm8pIHsKIAorCQkJY29uZF9yZXNjaGVkKCk7CisKIAkJCS8qIFdlIG9ubHkgY2FyZSBhYm91dCBvYnNvbGV0ZSBvbmVzICovCiAJCQlpZiAoIShyZWZfb2Jzb2xldGUocmF3KSkpCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9ub2RlbGlzdC5oIGIvZnMvamZmczIvbm9kZWxpc3QuaAppbmRleCAwZGRmZDcwLi40MTc4YjRiNSAxMDA2NDQKLS0tIGEvZnMvamZmczIvbm9kZWxpc3QuaAorKysgYi9mcy9qZmZzMi9ub2RlbGlzdC5oCkBAIC0yOTQsMjMgKzI5NCwyMSBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKmZyYWdfZmlyc3Qoc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKm5vZGUgPSByb290LT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpub2RlID0gcmJfZmlyc3Qocm9vdCk7CiAKIAlpZiAoIW5vZGUpCiAJCXJldHVybiBOVUxMOwotCXdoaWxlKG5vZGUtPnJiX2xlZnQpCi0JCW5vZGUgPSBub2RlLT5yYl9sZWZ0OworCiAJcmV0dXJuIHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcsIHJiKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgamZmczJfbm9kZV9mcmFnICpmcmFnX2xhc3Qoc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKm5vZGUgPSByb290LT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpub2RlID0gcmJfbGFzdChyb290KTsKIAogCWlmICghbm9kZSkKIAkJcmV0dXJuIE5VTEw7Ci0Jd2hpbGUobm9kZS0+cmJfcmlnaHQpCi0JCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKKwogCXJldHVybiByYl9lbnRyeShub2RlLCBzdHJ1Y3QgamZmczJfbm9kZV9mcmFnLCByYik7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3JlYWRpbm9kZS5jIGIvZnMvamZmczIvcmVhZGlub2RlLmMKaW5kZXggMjY2NDIzYi4uNThhMGI5MSAxMDA2NDQKLS0tIGEvZnMvamZmczIvcmVhZGlub2RlLmMKKysrIGIvZnMvamZmczIvcmVhZGlub2RlLmMKQEAgLTk0NCwxMyArOTQ0LDEyIEBACiBpbnQgamZmczJfZG9fY3JjY2hlY2tfaW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMpCiB7CiAJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSBuOwotCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0ga21hbGxvYyhzaXplb2YoKmYpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiA9IGt6YWxsb2Moc2l6ZW9mKCpmKSwgR0ZQX0tFUk5FTCk7CiAJaW50IHJldDsKIAogCWlmICghZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7CiAJaW5pdF9NVVRFWF9MT0NLRUQoJmYtPnNlbSk7CiAJZi0+aW5vY2FjaGUgPSBpYzsKIApkaWZmIC0tZ2l0IGEvZnMvamZmczIvc2Nhbi5jIGIvZnMvamZmczIvc2Nhbi5jCmluZGV4IGUyNDEzNDYuLjNhZjc0NmUgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3NjYW4uYworKysgYi9mcy9qZmZzMi9zY2FuLmMKQEAgLTEyOCwxNyArMTI4LDE5IEBACiAJfQogCiAJaWYgKGpmZnMyX3N1bV9hY3RpdmUoKSkgewotCQlzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGpmZnMyX3N1bW1hcnkpLCBHRlBfS0VSTkVMKTsKKwkJcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1tYXJ5KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcykgeworCQkJa2ZyZWUoZmxhc2hidWYpOwogCQkJSkZGUzJfV0FSTklORygiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzdW1tYXJ5XG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCW1lbXNldChzLCAwLCBzaXplb2Yoc3RydWN0IGpmZnMyX3N1bW1hcnkpKTsKIAl9CiAKIAlmb3IgKGk9MDsgaTxjLT5ucl9ibG9ja3M7IGkrKykgewogCQlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViID0gJmMtPmJsb2Nrc1tpXTsKIAorCQljb25kX3Jlc2NoZWQoKTsKKwogCQkvKiByZXNldCBzdW1tYXJ5IGluZm8gZm9yIG5leHQgZXJhc2VibG9jayBzY2FuICovCiAJCWpmZnMyX3N1bV9yZXNldF9jb2xsZWN0ZWQocyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3N1bW1hcnkuYyBiL2ZzL2pmZnMyL3N1bW1hcnkuYwppbmRleCBlNTJjZWY1Li4yNTI2NTk2IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9zdW1tYXJ5LmMKKysrIGIvZnMvamZmczIvc3VtbWFyeS5jCkBAIC0yNiwxNSArMjYsMTMgQEAKIAogaW50IGpmZnMyX3N1bV9pbml0KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQogewotCWMtPnN1bW1hcnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtbWFyeSksIEdGUF9LRVJORUwpOworCWMtPnN1bW1hcnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtbWFyeSksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFjLT5zdW1tYXJ5KSB7CiAJCUpGRlMyX1dBUk5JTkcoIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3Igc3VtbWFyeSBpbmZvcm1hdGlvbiFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQltZW1zZXQoYy0+c3VtbWFyeSwgMCwgc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1tYXJ5KSk7Ci0KIAljLT5zdW1tYXJ5LT5zdW1fYnVmID0gdm1hbGxvYyhjLT5zZWN0b3Jfc2l6ZSk7CiAKIAlpZiAoIWMtPnN1bW1hcnktPnN1bV9idWYpIHsKQEAgLTM5OCw2ICszOTYsOCBAQAogCWZvciAoaT0wOyBpPGplMzJfdG9fY3B1KHN1bW1hcnktPnN1bV9udW0pOyBpKyspIHsKIAkJZGJnX3N1bW1hcnkoInByb2Nlc3Npbmcgc3VtbWFyeSBpbmRleCAlZFxuIiwgaSk7CiAKKwkJY29uZF9yZXNjaGVkKCk7CisKIAkJLyogTWFrZSBzdXJlIHRoZXJlJ3MgYSBzcGFyZSByZWYgZm9yIGRpcnR5IHNwYWNlICovCiAJCWVyciA9IGpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoYywgamViLCAyKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3N1cGVyLmMgYi9mcy9qZmZzMi9zdXBlci5jCmluZGV4IDdkZWI3ODIuLjA4YTBlNmMgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3N1cGVyLmMKKysrIGIvZnMvamZmczIvc3VwZXIuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgpAQCAtMTg0LDkgKzE4NSw5IEBACiAJc3RydWN0IG10ZF9pbmZvICptdGQ7CiAKIAltdGQgPSBnZXRfbXRkX2RldmljZShOVUxMLCBtdGRucik7Ci0JaWYgKCFtdGQpIHsKKwlpZiAoSVNfRVJSKG10ZCkpIHsKIAkJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyOiBNVEQgZGV2aWNlICMldSBkb2Vzbid0IGFwcGVhciB0byBleGlzdFxuIiwgbXRkbnIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBQVFJfRVJSKG10ZCk7CiAJfQogCiAJcmV0dXJuIGpmZnMyX2dldF9zYl9tdGQoZnNfdHlwZSwgZmxhZ3MsIGRldl9uYW1lLCBkYXRhLCBtdGQsIG1udCk7CkBAIC0yMjEsNyArMjIyLDcgQEAKIAkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9nZXRfc2IoKTogbXRkOiUlcywgbmFtZSBcIiVzXCJcbiIsIGRldl9uYW1lKzQpKTsKIAkJCWZvciAobXRkbnIgPSAwOyBtdGRuciA8IE1BWF9NVERfREVWSUNFUzsgbXRkbnIrKykgewogCQkJCW10ZCA9IGdldF9tdGRfZGV2aWNlKE5VTEwsIG10ZG5yKTsKLQkJCQlpZiAobXRkKSB7CisJCQkJaWYgKCFJU19FUlIobXRkKSkgewogCQkJCQlpZiAoIXN0cmNtcChtdGQtPm5hbWUsIGRldl9uYW1lKzQpKQogCQkJCQkJcmV0dXJuIGpmZnMyX2dldF9zYl9tdGQoZnNfdHlwZSwgZmxhZ3MsIGRldl9uYW1lLCBkYXRhLCBtdGQsIG1udCk7CiAJCQkJCXB1dF9tdGRfZGV2aWNlKG10ZCk7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zeW1saW5rLmMgYi9mcy9qZmZzMi9zeW1saW5rLmMKaW5kZXggZmMyMTFiNi4uYjkwZDVhYSAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3ltbGluay5jCisrKyBiL2ZzL2pmZnMyL3N5bWxpbmsuYwpAQCAtNTEsNyArNTEsNyBAQAogCSAqLwogCiAJaWYgKCFwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiamZmczJfZm9sbG93X2xpbmsoKTogY2FuJ3QgZmluZCBzeW1saW5rIHRhZXJnZXRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImpmZnMyX2ZvbGxvd19saW5rKCk6IGNhbid0IGZpbmQgc3ltbGluayB0YXJnZXRcbiIpOwogCQlwID0gRVJSX1BUUigtRUlPKTsKIAl9CiAJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2ZvbGxvd19saW5rKCk6IHRhcmdldCBwYXRoIGlzICclcydcbiIsIChjaGFyICopIGYtPnRhcmdldCkpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvd2J1Zi5jIGIvZnMvamZmczIvd2J1Zi5jCmluZGV4IDcwNzA3MzAuLjljOTk4NTkgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3didWYuYworKysgYi9mcy9qZmZzMi93YnVmLmMKQEAgLTk2OSw4ICs5NjksNyBAQAogCWludCBvb2JzaXplID0gYy0+bXRkLT5vb2JzaXplOwogCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CiAKLQlvcHMubGVuID0gTlJfT09CX1NDQU5fUEFHRVMgKiBvb2JzaXplOwotCW9wcy5vb2JsZW4gPSBvb2JzaXplOworCW9wcy5vb2JsZW4gPSBOUl9PT0JfU0NBTl9QQUdFUyAqIG9vYnNpemU7CiAJb3BzLm9vYmJ1ZiA9IGMtPm9vYmJ1ZjsKIAlvcHMub29ib2ZmcyA9IDA7CiAJb3BzLmRhdGJ1ZiA9IE5VTEw7CkBAIC05ODMsMTAgKzk4MiwxMCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChvcHMucmV0bGVuIDwgb3BzLmxlbikgeworCWlmIChvcHMub29icmV0bGVuIDwgb3BzLm9vYmxlbikgewogCQlEMShwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19vb2JfZW1wdHkoKTogUmVhZCBPT0IgIgogCQkJICAicmV0dXJuZWQgc2hvcnQgcmVhZCAoJXpkIGJ5dGVzIG5vdCAlZCkgZm9yIGJsb2NrICIKLQkJCSAgImF0ICUwOHhcbiIsIG9wcy5yZXRsZW4sIG9wcy5sZW4sIGplYi0+b2Zmc2V0KSk7CisJCQkgICJhdCAlMDh4XG4iLCBvcHMub29icmV0bGVuLCBvcHMub29ibGVuLCBqZWItPm9mZnNldCkpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTEwMDUsNyArMTAwNCw3IEBACiAJfQogCiAJLyogd2Uga25vdywgd2UgYXJlIGFsaWduZWQgOikgKi8KLQlmb3IgKHBhZ2UgPSBvb2JzaXplOyBwYWdlIDwgb3BzLmxlbjsgcGFnZSArPSBzaXplb2YobG9uZykpIHsKKwlmb3IgKHBhZ2UgPSBvb2JzaXplOyBwYWdlIDwgb3BzLm9vYmxlbjsgcGFnZSArPSBzaXplb2YobG9uZykpIHsKIAkJbG9uZyBkYXQgPSAqKGxvbmcgKikoJm9wcy5vb2JidWZbcGFnZV0pOwogCQlpZihkYXQgIT0gLTEpCiAJCQlyZXR1cm4gMTsKQEAgLTEwMzMsNyArMTAzMiw2IEBACiAJCXJldHVybiAyOwogCX0KIAotCW9wcy5sZW4gPSBvb2JzaXplOwogCW9wcy5vb2JsZW4gPSBvb2JzaXplOwogCW9wcy5vb2JidWYgPSBjLT5vb2JidWY7CiAJb3BzLm9vYm9mZnMgPSAwOwpAQCAtMTA0OCwxMCArMTA0NiwxMCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChvcHMucmV0bGVuIDwgb3BzLmxlbikgeworCWlmIChvcHMub29icmV0bGVuIDwgb3BzLm9vYmxlbikgewogCQlEMSAocHJpbnRrIChLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKTogIgogCQkJICAgICJSZWFkIE9PQiByZXR1cm4gc2hvcnQgcmVhZCAoJXpkIGJ5dGVzIG5vdCAlZCkgIgotCQkJICAgICJmb3IgYmxvY2sgYXQgJTA4eFxuIiwgb3BzLnJldGxlbiwgb3BzLmxlbiwKKwkJCSAgICAiZm9yIGJsb2NrIGF0ICUwOHhcbiIsIG9wcy5vb2JyZXRsZW4sIG9wcy5vb2JsZW4sCiAJCQkgICAgamViLT5vZmZzZXQpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMTA5MCw4ICsxMDg4LDcgQEAKIAluLm5vZGV0eXBlID0gY3B1X3RvX2plMTYoSkZGUzJfTk9ERVRZUEVfQ0xFQU5NQVJLRVIpOwogCW4udG90bGVuID0gY3B1X3RvX2plMzIoOCk7CiAKLQlvcHMubGVuID0gYy0+ZnNkYXRhX2xlbjsKLQlvcHMub29ibGVuID0gYy0+ZnNkYXRhX2xlbjs7CisJb3BzLm9vYmxlbiA9IGMtPmZzZGF0YV9sZW47CiAJb3BzLm9vYmJ1ZiA9ICh1aW50OF90ICopJm47CiAJb3BzLm9vYm9mZnMgPSBjLT5mc2RhdGFfcG9zOwogCW9wcy5kYXRidWYgPSBOVUxMOwpAQCAtMTEwNSwxMCArMTEwMiwxMCBAQAogCQkJICBqZWItPm9mZnNldCwgcmV0KSk7CiAJCXJldHVybiByZXQ7CiAJfQotCWlmIChvcHMucmV0bGVuICE9IG9wcy5sZW4pIHsKKwlpZiAob3BzLm9vYnJldGxlbiAhPSBvcHMub29ibGVuKSB7CiAJCUQxKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX3dyaXRlX25hbmRfY2xlYW5tYXJrZXIoKTogIgogCQkJICAiU2hvcnQgd3JpdGUgZm9yIGJsb2NrIGF0ICUwOHg6ICV6ZCBub3QgJWRcbiIsCi0JCQkgIGplYi0+b2Zmc2V0LCBvcHMucmV0bGVuLCBvcHMubGVuKSk7CisJCQkgIGplYi0+b2Zmc2V0LCBvcHMub29icmV0bGVuLCBvcHMub29ibGVuKSk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyLmMgYi9mcy9qZmZzMi94YXR0ci5jCmluZGV4IDRkYTA5Y2UuLjRiYjNmMTggMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3hhdHRyLmMKKysrIGIvZnMvamZmczIveGF0dHIuYwpAQCAtMzk5LDggKzM5OSw2IEBACiB7CiAJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCiAJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJnhkLT5yZWZjbnQsICZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spKSB7Ci0JCXVpbnQzMl90IHhpZCA9IHhkLT54aWQsIHZlcnNpb24gPSB4ZC0+dmVyc2lvbjsKLQogCQl1bmxvYWRfeGF0dHJfZGF0dW0oYywgeGQpOwogCQl4ZC0+ZmxhZ3MgfD0gSkZGUzJfWEZMQUdTX0RFQUQ7CiAJCWlmICh4ZC0+bm9kZSA9PSAodm9pZCAqKXhkKSB7CkBAIC00MTEsNyArNDA5LDggQEAKIAkJfQogCQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAotCQlkYmdfeGF0dHIoInhkYXR1bSh4aWQ9JXUsIHZlcnNpb249JXUpIHdhcyByZW1vdmVkLlxuIiwgeGlkLCB2ZXJzaW9uKTsKKwkJZGJnX3hhdHRyKCJ4ZGF0dW0oeGlkPSV1LCB2ZXJzaW9uPSV1KSB3YXMgcmVtb3ZlZC5cbiIsCisJCQkgIHhkLT54aWQsIHhkLT52ZXJzaW9uKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZHRyZWUuYyBiL2ZzL2pmcy9qZnNfZHRyZWUuYwppbmRleCBlY2IyMjE2Li42ZDYyZjMyIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2R0cmVlLmMKKysrIGIvZnMvamZzL2pmc19kdHJlZS5jCkBAIC0zMDA5LDcgKzMwMDksNyBAQAogICovCiBpbnQgamZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7Ci0Jc3RydWN0IGlub2RlICppcCA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaXAgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBubHNfdGFibGUgKmNvZGVwYWdlID0gSkZTX1NCSShpcC0+aV9zYiktPm5sc190YWI7CiAJaW50IHJjID0gMDsKIAlsb2ZmX3QgZHRwb3M7CS8qIGxlZ2FjeSBPUy8yIHN0eWxlIHBvc2l0aW9uICovCkBAIC0zNzc3LDEyICszNzc3LDEyIEBACiAJc3RydWN0IGNvbXBvbmVudF9uYW1lIGxrZXk7CiAJc3RydWN0IGNvbXBvbmVudF9uYW1lIHJrZXk7CiAKLQlsa2V5Lm5hbWUgPSAod2NoYXJfdCAqKSBrbWFsbG9jKChKRlNfTkFNRV9NQVggKyAxKSAqIHNpemVvZih3Y2hhcl90KSwKKwlsa2V5Lm5hbWUgPSBrbWFsbG9jKChKRlNfTkFNRV9NQVggKyAxKSAqIHNpemVvZih3Y2hhcl90KSwKIAkJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKGxrZXkubmFtZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJrZXkubmFtZSA9ICh3Y2hhcl90ICopIGttYWxsb2MoKEpGU19OQU1FX01BWCArIDEpICogc2l6ZW9mKHdjaGFyX3QpLAorCXJrZXkubmFtZSA9IGttYWxsb2MoKEpGU19OQU1FX01BWCArIDEpICogc2l6ZW9mKHdjaGFyX3QpLAogCQkJCQlHRlBfS0VSTkVMKTsKIAlpZiAocmtleS5uYW1lID09IE5VTEwpIHsKIAkJa2ZyZWUobGtleS5uYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZmlsc3lzLmggYi9mcy9qZnMvamZzX2ZpbHN5cy5oCmluZGV4IGViNTUwYjMuLjM4ZjcwYWMgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZmlsc3lzLmgKKysrIGIvZnMvamZzL2pmc19maWxzeXMuaApAQCAtMjksMzEgKzI5LDIxIEBACiAvKgogICoJIGZpbGUgc3lzdGVtIG9wdGlvbiAoc3VwZXJibG9jayBmbGFnKQogICovCi0vKiBtb3VudCB0aW1lIGZsYWcgdG8gZGlzYWJsZSBqb3VybmFsaW5nIHRvIGRpc2sgKi8KLSNkZWZpbmUgSkZTX05PSU5URUdSSVRZIDB4MDAwMDAwMTAKKworLyogZGlyZWN0b3J5IG9wdGlvbiAqLworI2RlZmluZSBKRlNfVU5JQ09ERQkweDAwMDAwMDAxCS8qIHVuaWNvZGUgbmFtZSAqLwogCiAvKiBtb3VudCB0aW1lIGZsYWdzIGZvciBlcnJvciBoYW5kbGluZyAqLwogI2RlZmluZSBKRlNfRVJSX1JFTU9VTlRfUk8gMHgwMDAwMDAwMiAgIC8qIHJlbW91bnQgcmVhZC1vbmx5ICovCiAjZGVmaW5lIEpGU19FUlJfQ09OVElOVUUgICAweDAwMDAwMDA0ICAgLyogY29udGludWUgKi8KICNkZWZpbmUgSkZTX0VSUl9QQU5JQyAgICAgIDB4MDAwMDAwMDggICAvKiBwYW5pYyAqLwogCisvKiBRdW90YSBzdXBwb3J0ICovCiAjZGVmaW5lCUpGU19VU1JRVU9UQQkweDAwMDAwMDEwCiAjZGVmaW5lCUpGU19HUlBRVU9UQQkweDAwMDAwMDIwCiAKLS8qIHBsYXRmb3JtIG9wdGlvbiAoY29uZGl0aW9uYWwgY29tcGlsYXRpb24pICovCi0jZGVmaW5lIEpGU19BSVgJCTB4ODAwMDAwMDAJLyogQUlYIHN1cHBvcnQgKi8KLS8qCVBPU0lYIG5hbWUvZGlyZWN0b3J5ICBzdXBwb3J0ICovCi0KLSNkZWZpbmUgSkZTX09TMgkJMHg0MDAwMDAwMAkvKiBPUy8yIHN1cHBvcnQgKi8KLS8qCWNhc2UtaW5zZW5zaXRpdmUgbmFtZS9kaXJlY3Rvcnkgc3VwcG9ydCAqLwotCi0jZGVmaW5lIEpGU19ERlMJCTB4MjAwMDAwMDAJLyogRENFIERGUyBMRlMgc3VwcG9ydCAqLwotCi0jZGVmaW5lIEpGU19MSU5VWAkweDEwMDAwMDAwCS8qIExpbnV4IHN1cHBvcnQgKi8KLS8qCWNhc2Utc2Vuc2l0aXZlIG5hbWUvZGlyZWN0b3J5IHN1cHBvcnQgKi8KLQotLyogZGlyZWN0b3J5IG9wdGlvbiAqLwotI2RlZmluZSBKRlNfVU5JQ09ERQkweDAwMDAwMDAxCS8qIHVuaWNvZGUgbmFtZSAqLworLyogbW91bnQgdGltZSBmbGFnIHRvIGRpc2FibGUgam91cm5hbGluZyB0byBkaXNrICovCisjZGVmaW5lIEpGU19OT0lOVEVHUklUWSAweDAwMDAwMDQwCiAKIC8qIGNvbW1pdCBvcHRpb24gKi8KICNkZWZpbmUJSkZTX0NPTU1JVAkweDAwMDAwZjAwCS8qIGNvbW1pdCBvcHRpb24gbWFzayAqLwpAQCAtNjEsNiArNTEsNyBAQAogI2RlZmluZQlKRlNfTEFaWUNPTU1JVAkweDAwMDAwMjAwCS8qIGxhenkgY29tbWl0ICovCiAjZGVmaW5lCUpGU19UTVBGUwkweDAwMDAwNDAwCS8qIHRlbXBvcmFyeSBmaWxlIHN5c3RlbSAtCiAJCQkJCSAqIGRvIG5vdCBsb2cvY29tbWl0OgorCQkJCQkgKiBOZXZlciBpbXBsZW1lbnRlZAogCQkJCQkgKi8KIAogLyogbG9nIGxvZ2ljYWwgdm9sdW1lIG9wdGlvbiAqLwpAQCAtNzQsMTYgKzY1LDI1IEBACiAjZGVmaW5lIEpGU19TUEFSU0UJMHgwMDAyMDAwMAkvKiBzcGFyc2UgcmVndWxhciBmaWxlICovCiAKIC8qIERBU0QgTGltaXRzCQlGMjI2OTQxICovCi0jZGVmaW5lIEpGU19EQVNEX0VOQUJMRUQJMHgwMDA0MDAwMAkvKiBEQVNEIGxpbWl0cyBlbmFibGVkICovCi0jZGVmaW5lCUpGU19EQVNEX1BSSU1FCQkweDAwMDgwMDAwCS8qIFByaW1lIERBU0QgdXNhZ2Ugb24gYm9vdCAqLworI2RlZmluZSBKRlNfREFTRF9FTkFCTEVEIDB4MDAwNDAwMDAJLyogREFTRCBsaW1pdHMgZW5hYmxlZCAqLworI2RlZmluZQlKRlNfREFTRF9QUklNRQkweDAwMDgwMDAwCS8qIFByaW1lIERBU0QgdXNhZ2Ugb24gYm9vdCAqLwogCiAvKiBiaWcgZW5kaWFuIGZsYWcgKi8KLSNkZWZpbmUJSkZTX1NXQVBfQllURVMJCTB4MDAxMDAwMDAJLyogcnVubmluZyBvbiBiaWcgZW5kaWFuIGNvbXB1dGVyICovCisjZGVmaW5lCUpGU19TV0FQX0JZVEVTCTB4MDAxMDAwMDAJLyogcnVubmluZyBvbiBiaWcgZW5kaWFuIGNvbXB1dGVyICovCiAKIC8qIERpcmVjdG9yeSBpbmRleCAqLwotI2RlZmluZSBKRlNfRElSX0lOREVYCQkweDAwMjAwMDAwCS8qIFBlcnNpc3RlbnQgaW5kZXggZm9yICovCi0JCQkJCQkvKiBkaXJlY3RvcnkgZW50cmllcyAgICAqLworI2RlZmluZSBKRlNfRElSX0lOREVYCTB4MDAyMDAwMDAJLyogUGVyc2lzdGVudCBpbmRleCBmb3IgKi8KIAorLyogcGxhdGZvcm0gb3B0aW9ucyAqLworI2RlZmluZSBKRlNfTElOVVgJMHgxMDAwMDAwMAkvKiBMaW51eCBzdXBwb3J0ICovCisjZGVmaW5lIEpGU19ERlMJCTB4MjAwMDAwMDAJLyogRENFIERGUyBMRlMgc3VwcG9ydCAqLworLyoJTmV2ZXIgaW1wbGVtZW50ZWQgKi8KKworI2RlZmluZSBKRlNfT1MyCQkweDQwMDAwMDAwCS8qIE9TLzIgc3VwcG9ydCAqLworLyoJY2FzZS1pbnNlbnNpdGl2ZSBuYW1lL2RpcmVjdG9yeSBzdXBwb3J0ICovCisKKyNkZWZpbmUgSkZTX0FJWAkJMHg4MDAwMDAwMAkvKiBBSVggc3VwcG9ydCAqLworLyoJUE9TSVggbmFtZS9kaXJlY3RvcnkgIHN1cHBvcnQgLSBOZXZlciBpbXBsZW1lbnRlZCovCiAKIC8qCiAgKglidWZmZXIgY2FjaGUgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbWFwLmMgYi9mcy9qZnMvamZzX2ltYXAuYwppbmRleCBlZTliNDczLi41M2Y2M2I0IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2ltYXAuYworKysgYi9mcy9qZnMvamZzX2ltYXAuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJICogYWxsb2NhdGUvaW5pdGlhbGl6ZSB0aGUgaW4tbWVtb3J5IGlub2RlIG1hcCBjb250cm9sIHN0cnVjdHVyZQogCSAqLwogCS8qIGFsbG9jYXRlIHRoZSBpbi1tZW1vcnkgaW5vZGUgbWFwIGNvbnRyb2wgc3RydWN0dXJlLiAqLwotCWltYXAgPSAoc3RydWN0IGlub21hcCAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5vbWFwKSwgR0ZQX0tFUk5FTCk7CisJaW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbm9tYXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW1hcCA9PSBOVUxMKSB7CiAJCWpmc19lcnIoImRpTW91bnQ6IGttYWxsb2MgcmV0dXJuZWQgTlVMTCEiKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmMgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKaW5kZXggYjFhMWM3Mi4uY2VhZjAzYiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19tZXRhcGFnZS5jCisrKyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwpAQCAtNzY0LDIyICs3NjQsOSBAQAogCX0gZWxzZSBpZiAobXAtPmxzbikJLyogZGlzY2FyZF9tZXRhcGFnZSBkb2Vzbid0IHJlbW92ZSBpdCAqLwogCQlyZW1vdmVfZnJvbV9sb2dzeW5jKG1wKTsKIAotI2lmIE1QU19QRVJfUEFHRSA9PSAxCi0JLyoKLQkgKiBJZiB3ZSBrbm93IHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgaW4gdGhlIHBhZ2UsIHdlIGNhbiB0aHJvdwotCSAqIHRoZSBwYWdlIG91dCBvZiB0aGUgcGFnZSBjYWNoZS4gIElmIHBhZ2VzIGFyZSBsYXJnZXIsIHdlCi0JICogZG9uJ3Qgd2FudCB0byBkbyB0aGlzLgotCSAqLwotCi0JLyogUmV0ZXN0IG1wLT5jb3VudCBzaW5jZSB3ZSBtYXkgaGF2ZSByZWxlYXNlZCBwYWdlIGxvY2sgKi8KLQlpZiAodGVzdF9iaXQoTUVUQV9kaXNjYXJkLCAmbXAtPmZsYWcpICYmICFtcC0+Y291bnQpIHsKLQkJY2xlYXJfcGFnZV9kaXJ0eShwYWdlKTsKLQkJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7Ci0JfQotI2Vsc2UKIAkvKiBUcnkgdG8ga2VlcCBtZXRhcGFnZXMgZnJvbSB1c2luZyB1cCB0b28gbXVjaCBtZW1vcnkgKi8KIAlkcm9wX21ldGFwYWdlKHBhZ2UsIG1wKTsKLSNlbmRpZgorCiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogfQpkaWZmIC0tZ2l0IGEvZnMvbGliZnMuYyBiL2ZzL2xpYmZzLmMKaW5kZXggYmQwOGUwZS4uNTAzODk4ZCAxMDA2NDQKLS0tIGEvZnMvbGliZnMuYworKysgYi9mcy9saWJmcy5jCkBAIC02Myw3ICs2Myw3IEBACiB7CiAJc3RhdGljIHN0cnVjdCBxc3RyIGN1cnNvcl9uYW1lID0gey5sZW4gPSAxLCAubmFtZSA9ICIuIn07CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBkX2FsbG9jKGZpbGUtPmZfZGVudHJ5LCAmY3Vyc29yX25hbWUpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRfYWxsb2MoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgJmN1cnNvcl9uYW1lKTsKIAogCXJldHVybiBmaWxlLT5wcml2YXRlX2RhdGEgPyAwIDogLUVOT01FTTsKIH0KQEAgLTc2LDcgKzc2LDcgQEAKIAogbG9mZl90IGRjYWNoZV9kaXJfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCiB7Ci0JbXV0ZXhfbG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X2xvY2soJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaCAob3JpZ2luKSB7CiAJCWNhc2UgMToKIAkJCW9mZnNldCArPSBmaWxlLT5mX3BvczsKQEAgLTg0LDcgKzg0LDcgQEAKIAkJCWlmIChvZmZzZXQgPj0gMCkKIAkJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAob2Zmc2V0ICE9IGZpbGUtPmZfcG9zKSB7CkBAIC05Niw4ICs5Niw4IEBACiAKIAkJCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogCQkJbGlzdF9kZWwoJmN1cnNvci0+ZF91LmRfY2hpbGQpOwotCQkJcCA9IGZpbGUtPmZfZGVudHJ5LT5kX3N1YmRpcnMubmV4dDsKLQkJCXdoaWxlIChuICYmIHAgIT0gJmZpbGUtPmZfZGVudHJ5LT5kX3N1YmRpcnMpIHsKKwkJCXAgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3N1YmRpcnMubmV4dDsKKwkJCXdoaWxlIChuICYmIHAgIT0gJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfc3ViZGlycykgewogCQkJCXN0cnVjdCBkZW50cnkgKm5leHQ7CiAJCQkJbmV4dCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGRlbnRyeSwgZF91LmRfY2hpbGQpOwogCQkJCWlmICghZF91bmhhc2hlZChuZXh0KSAmJiBuZXh0LT5kX2lub2RlKQpAQCAtMTA4LDcgKzEwOCw3IEBACiAJCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCQl9CiAJfQotCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIG9mZnNldDsKIH0KIApAQCAtMTI2LDcgKzEyNiw3IEBACiAKIGludCBkY2FjaGVfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqIGZpbHAsIHZvaWQgKiBkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGRlbnRyeSAqY3Vyc29yID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpxID0gJmN1cnNvci0+ZF91LmRfY2hpbGQ7CiAJaW5vX3QgaW5vOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvY2xudGxvY2suYyBiL2ZzL2xvY2tkL2NsbnRsb2NrLmMKaW5kZXggYjg1YTBhZC4uZjRkNDVkNCAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvY2xudGxvY2suYworKysgYi9mcy9sb2NrZC9jbG50bG9jay5jCkBAIC0zNiw3ICszNiw3IEBACiAJc3RydWN0IG5sbV9ob3N0ICoJYl9ob3N0OwogCXN0cnVjdCBmaWxlX2xvY2sgKgliX2xvY2s7CQkvKiBsb2NhbCBmaWxlIGxvY2sgKi8KIAl1bnNpZ25lZCBzaG9ydAkJYl9yZWNsYWltOwkvKiBnb3QgdG8gcmVjbGFpbSBsb2NrICovCi0JdTMyCQkJYl9zdGF0dXM7CS8qIGdyYW50IGNhbGxiYWNrIHN0YXR1cyAqLworCV9fYmUzMgkJCWJfc3RhdHVzOwkvKiBncmFudCBjYWxsYmFjayBzdGF0dXMgKi8KIH07CiAKIHN0YXRpYyBMSVNUX0hFQUQobmxtX2Jsb2NrZWQpOwpAQCAtNTMsNyArNTMsNyBAQAogCQlibG9jay0+Yl9ob3N0ID0gaG9zdDsKIAkJYmxvY2stPmJfbG9jayA9IGZsOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZibG9jay0+Yl93YWl0KTsKLQkJYmxvY2stPmJfc3RhdHVzID0gTkxNX0xDS19CTE9DS0VEOworCQlibG9jay0+Yl9zdGF0dXMgPSBubG1fbGNrX2Jsb2NrZWQ7CiAJCWxpc3RfYWRkKCZibG9jay0+Yl9saXN0LCAmbmxtX2Jsb2NrZWQpOwogCX0KIAlyZXR1cm4gYmxvY2s7CkBAIC04OSw3ICs4OSw3IEBACiAJICogbmxtY2xudF9sb2NrIGZvciBhbiBleHBsYW5hdGlvbi4KIAkgKi8KIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChibG9jay0+Yl93YWl0LAotCQkJYmxvY2stPmJfc3RhdHVzICE9IE5MTV9MQ0tfQkxPQ0tFRCwKKwkJCWJsb2NrLT5iX3N0YXR1cyAhPSBubG1fbGNrX2Jsb2NrZWQsCiAJCQl0aW1lb3V0KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKQEAgLTEyNiwxMiArMTI2LDEyIEBACiAJCQljb250aW51ZTsKIAkJaWYgKCFubG1fY21wX2FkZHIoJmJsb2NrLT5iX2hvc3QtPmhfYWRkciwgYWRkcikpCiAJCQljb250aW51ZTsKLQkJaWYgKG5mc19jb21wYXJlX2ZoKE5GU19GSChmbF9ibG9ja2VkLT5mbF9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSkgLGZoKSAhPSAwKQorCQlpZiAobmZzX2NvbXBhcmVfZmgoTkZTX0ZIKGZsX2Jsb2NrZWQtPmZsX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpICxmaCkgIT0gMCkKIAkJCWNvbnRpbnVlOwogCQkvKiBBbHJpZ2h0LCB3ZSBmb3VuZCBhIGxvY2suIFNldCB0aGUgcmV0dXJuIHN0YXR1cwogCQkgKiBhbmQgd2FrZSB1cCB0aGUgY2FsbGVyCiAJCSAqLwotCQlibG9jay0+Yl9zdGF0dXMgPSBOTE1fTENLX0dSQU5URUQ7CisJCWJsb2NrLT5iX3N0YXR1cyA9IG5sbV9ncmFudGVkOwogCQl3YWtlX3VwKCZibG9jay0+Yl93YWl0KTsKIAkJcmVzID0gbmxtX2dyYW50ZWQ7CiAJfQpAQCAtMTc2LDcgKzE3Niw3IEBACiAJbG9ja19rZXJuZWwoKTsKIAlsb2NrZF91cCgwKTsgLyogbm90ZTogdGhpcyBjYW5ub3QgZmFpbCBhcyBsb2NrZCBpcyBhbHJlYWR5IHJ1bm5pbmcgKi8KIAotCWRwcmludGsoImxvY2tkOiByZWNsYWltaW5nIGxvY2tzIGZvciBob3N0ICVzIiwgaG9zdC0+aF9uYW1lKTsKKwlkcHJpbnRrKCJsb2NrZDogcmVjbGFpbWluZyBsb2NrcyBmb3IgaG9zdCAlc1xuIiwgaG9zdC0+aF9uYW1lKTsKIAogcmVzdGFydDoKIAluc21zdGF0ZSA9IGhvc3QtPmhfbnNtc3RhdGU7CkBAIC0yMDYsMTIgKzIwNiwxMiBAQAogCiAJaG9zdC0+aF9yZWNsYWltaW5nID0gMDsKIAl1cF93cml0ZSgmaG9zdC0+aF9yd3NlbSk7Ci0JZHByaW50aygiTkxNOiBkb25lIHJlY2xhaW1pbmcgbG9ja3MgZm9yIGhvc3QgJXMiLCBob3N0LT5oX25hbWUpOworCWRwcmludGsoIk5MTTogZG9uZSByZWNsYWltaW5nIGxvY2tzIGZvciBob3N0ICVzXG4iLCBob3N0LT5oX25hbWUpOwogCiAJLyogTm93LCB3YWtlIHVwIGFsbCBwcm9jZXNzZXMgdGhhdCBzbGVlcCBvbiBhIGJsb2NrZWQgbG9jayAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxvY2ssICZubG1fYmxvY2tlZCwgYl9saXN0KSB7CiAJCWlmIChibG9jay0+Yl9ob3N0ID09IGhvc3QpIHsKLQkJCWJsb2NrLT5iX3N0YXR1cyA9IE5MTV9MQ0tfREVOSUVEX0dSQUNFX1BFUklPRDsKKwkJCWJsb2NrLT5iX3N0YXR1cyA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKIAkJCXdha2VfdXAoJmJsb2NrLT5iX3dhaXQpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvY2xudHByb2MuYyBiL2ZzL2xvY2tkL2NsbnRwcm9jLmMKaW5kZXggNDk3YzNjZDUuLjBiNGFjYzEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2NsbnRwcm9jLmMKKysrIGIvZnMvbG9ja2QvY2xudHByb2MuYwpAQCAtMjcsNyArMjcsNyBAQAogc3RhdGljIGludAlubG1jbG50X3Rlc3Qoc3RydWN0IG5sbV9ycXN0ICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CiBzdGF0aWMgaW50CW5sbWNsbnRfbG9jayhzdHJ1Y3QgbmxtX3Jxc3QgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKIHN0YXRpYyBpbnQJbmxtY2xudF91bmxvY2soc3RydWN0IG5sbV9ycXN0ICosIHN0cnVjdCBmaWxlX2xvY2sgKik7Ci1zdGF0aWMgaW50CW5sbV9zdGF0X3RvX2Vycm5vKHUzMiBzdGF0KTsKK3N0YXRpYyBpbnQJbmxtX3N0YXRfdG9fZXJybm8oX19iZTMyIHN0YXQpOwogc3RhdGljIHZvaWQJbmxtY2xudF9sb2Nrc19pbml0X3ByaXZhdGUoc3RydWN0IGZpbGVfbG9jayAqZmwsIHN0cnVjdCBubG1faG9zdCAqaG9zdCk7CiBzdGF0aWMgaW50CW5sbWNsbnRfY2FuY2VsKHN0cnVjdCBubG1faG9zdCAqLCBpbnQgLCBzdHJ1Y3QgZmlsZV9sb2NrICopOwogCkBAIC0xMjksNyArMTI5LDcgQEAKIAogCW5sbWNsbnRfbmV4dF9jb29raWUoJmFyZ3AtPmNvb2tpZSk7CiAJYXJncC0+c3RhdGUgICA9IG5zbV9sb2NhbF9zdGF0ZTsKLQltZW1jcHkoJmxvY2stPmZoLCBORlNfRkgoZmwtPmZsX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSwgc2l6ZW9mKHN0cnVjdCBuZnNfZmgpKTsKKwltZW1jcHkoJmxvY2stPmZoLCBORlNfRkgoZmwtPmZsX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLCBzaXplb2Yoc3RydWN0IG5mc19maCkpOwogCWxvY2stPmNhbGxlciAgPSB1dHNuYW1lKCktPm5vZGVuYW1lOwogCWxvY2stPm9oLmRhdGEgPSByZXEtPmFfb3duZXI7CiAJbG9jay0+b2gubGVuICA9IHNucHJpbnRmKHJlcS0+YV9vd25lciwgc2l6ZW9mKHJlcS0+YV9vd25lciksICIldUAlcyIsCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQl9IGVsc2UKLQkJaWYgKHJlc3AtPnN0YXR1cyA9PSBOTE1fTENLX0RFTklFRF9HUkFDRV9QRVJJT0QpIHsKKwkJaWYgKHJlc3AtPnN0YXR1cyA9PSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2QpIHsKIAkJCWRwcmludGsoImxvY2tkOiBzZXJ2ZXIgaW4gZ3JhY2UgcGVyaW9kXG4iKTsKIAkJCWlmIChhcmdwLT5yZWNsYWltKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtNDExLDEwICs0MTEsMTAgQEAKIAkJZ290byBvdXQ7CiAKIAlzd2l0Y2ggKHJlcS0+YV9yZXMuc3RhdHVzKSB7Ci0JCWNhc2UgTkxNX0xDS19HUkFOVEVEOgorCQljYXNlIG5sbV9ncmFudGVkOgogCQkJZmwtPmZsX3R5cGUgPSBGX1VOTENLOwogCQkJYnJlYWs7Ci0JCWNhc2UgTkxNX0xDS19ERU5JRUQ6CisJCWNhc2UgbmxtX2xja19kZW5pZWQ6CiAJCQkvKgogCQkJICogUmVwb3J0IHRoZSBjb25mbGljdGluZyBsb2NrIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uLgogCQkJICovCkBAIC01MjQsOSArNTI0LDkgQEAKIAkJaWYgKCFyZXEtPmFfYXJncy5ibG9jaykKIAkJCWJyZWFrOwogCQkvKiBEaWQgYSByZWNsYWltZXIgdGhyZWFkIG5vdGlmeSB1cyBvZiBhIHNlcnZlciByZWJvb3Q/ICovCi0JCWlmIChyZXNwLT5zdGF0dXMgPT0gIE5MTV9MQ0tfREVOSUVEX0dSQUNFX1BFUklPRCkKKwkJaWYgKHJlc3AtPnN0YXR1cyA9PSAgbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kKQogCQkJY29udGludWU7Ci0JCWlmIChyZXNwLT5zdGF0dXMgIT0gTkxNX0xDS19CTE9DS0VEKQorCQlpZiAocmVzcC0+c3RhdHVzICE9IG5sbV9sY2tfYmxvY2tlZCkKIAkJCWJyZWFrOwogCQkvKiBXYWl0IG9uIGFuIE5MTSBibG9ja2luZyBsb2NrICovCiAJCXN0YXR1cyA9IG5sbWNsbnRfYmxvY2soYmxvY2ssIHJlcSwgTkxNQ0xOVF9QT0xMX1RJTUVPVVQpOwpAQCAtNTM1LDExICs1MzUsMTEgQEAKIAkJICovCiAJCWlmIChzdGF0dXMgPCAwKQogCQkJZ290byBvdXRfdW5ibG9jazsKLQkJaWYgKHJlc3AtPnN0YXR1cyAhPSBOTE1fTENLX0JMT0NLRUQpCisJCWlmIChyZXNwLT5zdGF0dXMgIT0gbmxtX2xja19ibG9ja2VkKQogCQkJYnJlYWs7CiAJfQogCi0JaWYgKHJlc3AtPnN0YXR1cyA9PSBOTE1fTENLX0dSQU5URUQpIHsKKwlpZiAocmVzcC0+c3RhdHVzID09IG5sbV9ncmFudGVkKSB7CiAJCWRvd25fcmVhZCgmaG9zdC0+aF9yd3NlbSk7CiAJCS8qIENoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBzZXJ2ZXIgaGFzIHJlYm9vdGVkICovCiAJCWlmIChmbC0+ZmxfdS5uZnNfZmwuc3RhdGUgIT0gaG9zdC0+aF9zdGF0ZSkgewpAQCAtNTU2LDcgKzU1Niw3IEBACiBvdXRfdW5ibG9jazoKIAlubG1jbG50X2ZpbmlzaF9ibG9jayhibG9jayk7CiAJLyogQ2FuY2VsIHRoZSBibG9ja2VkIHJlcXVlc3QgaWYgaXQgaXMgc3RpbGwgcGVuZGluZyAqLwotCWlmIChyZXNwLT5zdGF0dXMgPT0gTkxNX0xDS19CTE9DS0VEKQorCWlmIChyZXNwLT5zdGF0dXMgPT0gbmxtX2xja19ibG9ja2VkKQogCQlubG1jbG50X2NhbmNlbChob3N0LCByZXEtPmFfYXJncy5ibG9jaywgZmwpOwogb3V0OgogCW5sbV9yZWxlYXNlX2NhbGwocmVxKTsKQEAgLTU4NSwxMiArNTg1LDEyIEBACiAJcmVxLT5hX2FyZ3MucmVjbGFpbSA9IDE7CiAKIAlpZiAoKHN0YXR1cyA9IG5sbWNsbnRfY2FsbChyZXEsIE5MTVBST0NfTE9DSykpID49IDAKLQkgJiYgcmVxLT5hX3Jlcy5zdGF0dXMgPT0gTkxNX0xDS19HUkFOVEVEKQorCSAmJiByZXEtPmFfcmVzLnN0YXR1cyA9PSBubG1fZ3JhbnRlZCkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJsb2NrZDogZmFpbGVkIHRvIHJlY2xhaW0gbG9jayBmb3IgcGlkICVkICIKIAkJCQkiKGVycm5vICVkLCBzdGF0dXMgJWQpXG4iLCBmbC0+ZmxfcGlkLAotCQkJCXN0YXR1cywgcmVxLT5hX3Jlcy5zdGF0dXMpOworCQkJCXN0YXR1cywgbnRvaGwocmVxLT5hX3Jlcy5zdGF0dXMpKTsKIAogCS8qCiAJICogRklYTUU6IFRoaXMgaXMgYSBzZXJpb3VzIGZhaWx1cmUuIFdlIGNhbgpAQCAtNjM3LDEwICs2MzcsMTAgQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAocmVzcC0+c3RhdHVzID09IE5MTV9MQ0tfR1JBTlRFRCkKKwlpZiAocmVzcC0+c3RhdHVzID09IG5sbV9ncmFudGVkKQogCQlnb3RvIG91dDsKIAotCWlmIChyZXNwLT5zdGF0dXMgIT0gTkxNX0xDS19ERU5JRURfTk9MT0NLUykKKwlpZiAocmVzcC0+c3RhdHVzICE9IG5sbV9sY2tfZGVuaWVkX25vbG9ja3MpCiAJCXByaW50aygibG9ja2Q6IHVuZXhwZWN0ZWQgdW5sb2NrIHN0YXR1czogJWRcbiIsIHJlc3AtPnN0YXR1cyk7CiAJLyogV2hhdCB0byBkbyBub3c/IEknbSBvdXQgb2YgbXkgZGVwdGguLi4gKi8KIAlzdGF0dXMgPSAtRU5PTENLOwpAQCAtNjUyLDcgKzY1Miw3IEBACiBzdGF0aWMgdm9pZCBubG1jbG50X3VubG9ja19jYWxsYmFjayhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5sbV9ycXN0CSpyZXEgPSBkYXRhOwotCWludAkJc3RhdHVzID0gcmVxLT5hX3Jlcy5zdGF0dXM7CisJdTMyIHN0YXR1cyA9IG50b2hsKHJlcS0+YV9yZXMuc3RhdHVzKTsKIAogCWlmIChSUENfQVNTQVNTSU5BVEVEKHRhc2spKQogCQlnb3RvIGRpZTsKQEAgLTcyMCw2ICs3MjAsNyBAQAogc3RhdGljIHZvaWQgbmxtY2xudF9jYW5jZWxfY2FsbGJhY2soc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBubG1fcnFzdAkqcmVxID0gZGF0YTsKKwl1MzIgc3RhdHVzID0gbnRvaGwocmVxLT5hX3Jlcy5zdGF0dXMpOwogCiAJaWYgKFJQQ19BU1NBU1NJTkFURUQodGFzaykpCiAJCWdvdG8gZGllOwpAQCAtNzMxLDkgKzczMiw5IEBACiAJfQogCiAJZHByaW50aygibG9ja2Q6IGNhbmNlbCBzdGF0dXMgJXUgKHRhc2sgJXUpXG4iLAotCQkJcmVxLT5hX3Jlcy5zdGF0dXMsIHRhc2stPnRrX3BpZCk7CisJCQlzdGF0dXMsIHRhc2stPnRrX3BpZCk7CiAKLQlzd2l0Y2ggKHJlcS0+YV9yZXMuc3RhdHVzKSB7CisJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIE5MTV9MQ0tfR1JBTlRFRDoKIAljYXNlIE5MTV9MQ0tfREVOSUVEX0dSQUNFX1BFUklPRDoKIAljYXNlIE5MTV9MQ0tfREVOSUVEOgpAQCAtNzQ0LDcgKzc0NSw3IEBACiAJCWdvdG8gcmV0cnlfY2FuY2VsOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX05PVElDRSAibG9ja2Q6IHdlaXJkIHJldHVybiAlZCBmb3IgQ0FOQ0VMIGNhbGxcbiIsCi0JCQlyZXEtPmFfcmVzLnN0YXR1cyk7CisJCQlzdGF0dXMpOwogCX0KIAogZGllOgpAQCAtNzY4LDkgKzc2OSw5IEBACiAgKiBDb252ZXJ0IGFuIE5MTSBzdGF0dXMgY29kZSB0byBhIGdlbmVyaWMga2VybmVsIGVycm5vCiAgKi8KIHN0YXRpYyBpbnQKLW5sbV9zdGF0X3RvX2Vycm5vKHUzMiBzdGF0dXMpCitubG1fc3RhdF90b19lcnJubyhfX2JlMzIgc3RhdHVzKQogewotCXN3aXRjaChzdGF0dXMpIHsKKwlzd2l0Y2gobnRvaGwoc3RhdHVzKSkgewogCWNhc2UgTkxNX0xDS19HUkFOVEVEOgogCQlyZXR1cm4gMDsKIAljYXNlIE5MTV9MQ0tfREVOSUVEOgpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjbG9jay5jIGIvZnMvbG9ja2Qvc3ZjbG9jay5jCmluZGV4IDdlMjE5YjkuLmM3ZGIwYTUgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y2xvY2suYworKysgYi9mcy9sb2NrZC9zdmNsb2NrLmMKQEAgLTM0Myw4ICszNDMsOCBAQAogCV9fYmUzMgkJCXJldDsKIAogCWRwcmludGsoImxvY2tkOiBubG1zdmNfbG9jayglcy8lbGQsIHR5PSVkLCBwaT0lZCwgJUxkLSVMZCwgYmw9JWQpXG4iLAotCQkJCWZpbGUtPmZfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfaWQsCi0JCQkJZmlsZS0+Zl9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCisJCQkJZmlsZS0+Zl9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NiLT5zX2lkLAorCQkJCWZpbGUtPmZfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCiAJCQkJbG9jay0+ZmwuZmxfdHlwZSwgbG9jay0+ZmwuZmxfcGlkLAogCQkJCShsb25nIGxvbmcpbG9jay0+ZmwuZmxfc3RhcnQsCiAJCQkJKGxvbmcgbG9uZylsb2NrLT5mbC5mbF9lbmQsCkBAIC00MjAsOCArNDIwLDggQEAKIAkJCQkgICAgICAgc3RydWN0IG5sbV9sb2NrICpjb25mbG9jaykKIHsKIAlkcHJpbnRrKCJsb2NrZDogbmxtc3ZjX3Rlc3Rsb2NrKCVzLyVsZCwgdHk9JWQsICVMZC0lTGQpXG4iLAotCQkJCWZpbGUtPmZfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfaWQsCi0JCQkJZmlsZS0+Zl9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCisJCQkJZmlsZS0+Zl9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NiLT5zX2lkLAorCQkJCWZpbGUtPmZfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCiAJCQkJbG9jay0+ZmwuZmxfdHlwZSwKIAkJCQkobG9uZyBsb25nKWxvY2stPmZsLmZsX3N0YXJ0LAogCQkJCShsb25nIGxvbmcpbG9jay0+ZmwuZmxfZW5kKTsKQEAgLTQ1NCw4ICs0NTQsOCBAQAogCWludAllcnJvcjsKIAogCWRwcmludGsoImxvY2tkOiBubG1zdmNfdW5sb2NrKCVzLyVsZCwgcGk9JWQsICVMZC0lTGQpXG4iLAotCQkJCWZpbGUtPmZfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfaWQsCi0JCQkJZmlsZS0+Zl9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCisJCQkJZmlsZS0+Zl9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NiLT5zX2lkLAorCQkJCWZpbGUtPmZfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCiAJCQkJbG9jay0+ZmwuZmxfcGlkLAogCQkJCShsb25nIGxvbmcpbG9jay0+ZmwuZmxfc3RhcnQsCiAJCQkJKGxvbmcgbG9uZylsb2NrLT5mbC5mbF9lbmQpOwpAQCAtNDgzLDggKzQ4Myw4IEBACiAJaW50IHN0YXR1cyA9IDA7CiAKIAlkcHJpbnRrKCJsb2NrZDogbmxtc3ZjX2NhbmNlbCglcy8lbGQsIHBpPSVkLCAlTGQtJUxkKVxuIiwKLQkJCQlmaWxlLT5mX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NiLT5zX2lkLAotCQkJCWZpbGUtPmZfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfaW5vLAorCQkJCWZpbGUtPmZfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19pZCwKKwkJCQlmaWxlLT5mX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfaW5vLAogCQkJCWxvY2stPmZsLmZsX3BpZCwKIAkJCQkobG9uZyBsb25nKWxvY2stPmZsLmZsX3N0YXJ0LAogCQkJCShsb25nIGxvbmcpbG9jay0+ZmwuZmxfZW5kKTsKQEAgLTY0NSw3ICs2NDUsNyBAQAogICogYmxvY2suCiAgKi8KIHZvaWQKLW5sbXN2Y19ncmFudF9yZXBseShzdHJ1Y3QgbmxtX2Nvb2tpZSAqY29va2llLCB1MzIgc3RhdHVzKQorbmxtc3ZjX2dyYW50X3JlcGx5KHN0cnVjdCBubG1fY29va2llICpjb29raWUsIF9fYmUzMiBzdGF0dXMpCiB7CiAJc3RydWN0IG5sbV9ibG9jawkqYmxvY2s7CiAKQEAgLTY1NSw3ICs2NTUsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAoYmxvY2spIHsKLQkJaWYgKHN0YXR1cyA9PSBOTE1fTENLX0RFTklFRF9HUkFDRV9QRVJJT0QpIHsKKwkJaWYgKHN0YXR1cyA9PSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2QpIHsKIAkJCS8qIFRyeSBhZ2FpbiBpbiBhIGNvdXBsZSBvZiBzZWNvbmRzICovCiAJCQlubG1zdmNfaW5zZXJ0X2Jsb2NrKGJsb2NrLCAxMCAqIEhaKTsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y3NoYXJlLmMgYi9mcy9sb2NrZC9zdmNzaGFyZS5jCmluZGV4IDYyMjBkYzIuLjA2ODg4NmQgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y3NoYXJlLmMKKysrIGIvZnMvbG9ja2Qvc3Zjc2hhcmUuYwpAQCAtMzksNyArMzksNyBAQAogCQkJcmV0dXJuIG5sbV9sY2tfZGVuaWVkOwogCX0KIAotCXNoYXJlID0gKHN0cnVjdCBubG1fc2hhcmUgKikga21hbGxvYyhzaXplb2YoKnNoYXJlKSArIG9oLT5sZW4sCisJc2hhcmUgPSBrbWFsbG9jKHNpemVvZigqc2hhcmUpICsgb2gtPmxlbiwKIAkJCQkJCUdGUF9LRVJORUwpOwogCWlmIChzaGFyZSA9PSBOVUxMKQogCQlyZXR1cm4gbmxtX2xja19kZW5pZWRfbm9sb2NrczsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y3N1YnMuYyBiL2ZzL2xvY2tkL3N2Y3N1YnMuYwppbmRleCBlODMwMjRlLi5jMGRmMDBjIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmNzdWJzLmMKKysrIGIvZnMvbG9ja2Qvc3Zjc3Vicy5jCkBAIC00Myw3ICs0Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBubG1fZGVidWdfcHJpbnRfZmlsZShjaGFyICptc2csIHN0cnVjdCBubG1fZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJZHByaW50aygibG9ja2Q6ICVzICVzLyVsZFxuIiwKIAkJbXNnLCBpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vKTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3hkci5jIGIvZnMvbG9ja2QveGRyLmMKaW5kZXggYjdjOTQ5Mi4uMzRkYWU1ZCAxMDA2NDQKLS0tIGEvZnMvbG9ja2QveGRyLmMKKysrIGIvZnMvbG9ja2QveGRyLmMKQEAgLTM2MSw3ICszNjEsNyBAQAogewogCWlmICghKHAgPSBubG1fZGVjb2RlX2Nvb2tpZShwLCAmcmVzcC0+Y29va2llKSkpCiAJCXJldHVybiAwOwotCXJlc3AtPnN0YXR1cyA9IG50b2hsKCpwKyspOworCXJlc3AtPnN0YXR1cyA9ICpwKys7CiAJcmV0dXJuIHhkcl9hcmdzaXplX2NoZWNrKHJxc3RwLCBwKTsKIH0KIApAQCAtNDA3LDggKzQwNyw4IEBACiB7CiAJaWYgKCEocCA9IG5sbV9kZWNvZGVfY29va2llKHAsICZyZXNwLT5jb29raWUpKSkKIAkJcmV0dXJuIC1FSU87Ci0JcmVzcC0+c3RhdHVzID0gbnRvaGwoKnArKyk7Ci0JaWYgKHJlc3AtPnN0YXR1cyA9PSBOTE1fTENLX0RFTklFRCkgeworCXJlc3AtPnN0YXR1cyA9ICpwKys7CisJaWYgKHJlc3AtPnN0YXR1cyA9PSBubG1fbGNrX2RlbmllZCkgewogCQlzdHJ1Y3QgZmlsZV9sb2NrCSpmbCA9ICZyZXNwLT5sb2NrLmZsOwogCQl1MzIJCQlleGNsOwogCQlzMzIJCQlzdGFydCwgbGVuLCBlbmQ7CkBAIC01MDYsNyArNTA2LDcgQEAKIHsKIAlpZiAoIShwID0gbmxtX2RlY29kZV9jb29raWUocCwgJnJlc3AtPmNvb2tpZSkpKQogCQlyZXR1cm4gLUVJTzsKLQlyZXNwLT5zdGF0dXMgPSBudG9obCgqcCsrKTsKKwlyZXNwLT5zdGF0dXMgPSAqcCsrOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9sb2NrZC94ZHI0LmMgYi9mcy9sb2NrZC94ZHI0LmMKaW5kZXggZjRjMGIyYi4uYTc4MjQwNSAxMDA2NDQKLS0tIGEvZnMvbG9ja2QveGRyNC5jCisrKyBiL2ZzL2xvY2tkL3hkcjQuYwpAQCAtMzY3LDcgKzM2Nyw3IEBACiB7CiAJaWYgKCEocCA9IG5sbTRfZGVjb2RlX2Nvb2tpZShwLCAmcmVzcC0+Y29va2llKSkpCiAJCXJldHVybiAwOwotCXJlc3AtPnN0YXR1cyA9IG50b2hsKCpwKyspOworCXJlc3AtPnN0YXR1cyA9ICpwKys7CiAJcmV0dXJuIHhkcl9hcmdzaXplX2NoZWNrKHJxc3RwLCBwKTsKIH0KIApAQCAtNDEzLDggKzQxMyw4IEBACiB7CiAJaWYgKCEocCA9IG5sbTRfZGVjb2RlX2Nvb2tpZShwLCAmcmVzcC0+Y29va2llKSkpCiAJCXJldHVybiAtRUlPOwotCXJlc3AtPnN0YXR1cyA9IG50b2hsKCpwKyspOwotCWlmIChyZXNwLT5zdGF0dXMgPT0gTkxNX0xDS19ERU5JRUQpIHsKKwlyZXNwLT5zdGF0dXMgPSAqcCsrOworCWlmIChyZXNwLT5zdGF0dXMgPT0gbmxtX2xja19kZW5pZWQpIHsKIAkJc3RydWN0IGZpbGVfbG9jawkqZmwgPSAmcmVzcC0+bG9jay5mbDsKIAkJdTMyCQkJZXhjbDsKIAkJczY0CQkJc3RhcnQsIGVuZCwgbGVuOwpAQCAtNTEyLDcgKzUxMiw3IEBACiB7CiAJaWYgKCEocCA9IG5sbTRfZGVjb2RlX2Nvb2tpZShwLCAmcmVzcC0+Y29va2llKSkpCiAJCXJldHVybiAtRUlPOwotCXJlc3AtPnN0YXR1cyA9IG50b2hsKCpwKyspOworCXJlc3AtPnN0YXR1cyA9ICpwKys7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IDFjYjBjNTcuLjUyYTgxMDAgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKKysrIGIvZnMvbG9ja3MuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJCXN0YXJ0ID0gZmlscC0+Zl9wb3M7CiAJCWJyZWFrOwogCWNhc2UgU0VFS19FTkQ6Ci0JCXN0YXJ0ID0gaV9zaXplX3JlYWQoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpOworCQlzdGFydCA9IGlfc2l6ZV9yZWFkKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM3MSw3ICszNzEsNyBAQAogCQlzdGFydCA9IGZpbHAtPmZfcG9zOwogCQlicmVhazsKIAljYXNlIFNFRUtfRU5EOgotCQlzdGFydCA9IGlfc2l6ZV9yZWFkKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwkJc3RhcnQgPSBpX3NpemVfcmVhZChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02NzIsNyArNjcyLDcgQEAKIAlzdHJ1Y3QgZmlsZV9sb2NrICpjZmw7CiAKIAlsb2NrX2tlcm5lbCgpOwotCWZvciAoY2ZsID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfZmxvY2s7IGNmbDsgY2ZsID0gY2ZsLT5mbF9uZXh0KSB7CisJZm9yIChjZmwgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2Zsb2NrOyBjZmw7IGNmbCA9IGNmbC0+ZmxfbmV4dCkgewogCQlpZiAoIUlTX1BPU0lYKGNmbCkpCiAJCQljb250aW51ZTsKIAkJaWYgKHBvc2l4X2xvY2tzX2NvbmZsaWN0KGNmbCwgZmwpKQpAQCAtNzM0LDcgKzczNCw3IEBACiB7CiAJc3RydWN0IGZpbGVfbG9jayAqbmV3X2ZsID0gTlVMTDsKIAlzdHJ1Y3QgZmlsZV9sb2NrICoqYmVmb3JlOwotCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnJvciA9IDA7CiAJaW50IGZvdW5kID0gMDsKIApAQCAtMTAxOCw3ICsxMDE4LDcgQEAKICAqLwogaW50IHBvc2l4X2xvY2tfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCiB7Ci0JcmV0dXJuIF9fcG9zaXhfbG9ja19maWxlX2NvbmYoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZsLCBOVUxMKTsKKwlyZXR1cm4gX19wb3NpeF9sb2NrX2ZpbGVfY29uZihmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBmbCwgTlVMTCk7CiB9CiBFWFBPUlRfU1lNQk9MKHBvc2l4X2xvY2tfZmlsZSk7CiAKQEAgLTEwMzMsNyArMTAzMyw3IEBACiBpbnQgcG9zaXhfbG9ja19maWxlX2NvbmYoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlX2xvY2sgKmZsLAogCQkJc3RydWN0IGZpbGVfbG9jayAqY29uZmxvY2spCiB7Ci0JcmV0dXJuIF9fcG9zaXhfbG9ja19maWxlX2NvbmYoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZsLCBjb25mbG9jayk7CisJcmV0dXJuIF9fcG9zaXhfbG9ja19maWxlX2NvbmYoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmwsIGNvbmZsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0wocG9zaXhfbG9ja19maWxlX2NvbmYpOwogCkBAIC0xMzMzLDggKzEzMzMsOCBAQAogCWludCB0eXBlID0gRl9VTkxDSzsKIAogCWxvY2tfa2VybmVsKCk7Ci0JdGltZV9vdXRfbGVhc2VzKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKLQlmb3IgKGZsID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfZmxvY2s7IGZsICYmIElTX0xFQVNFKGZsKTsKKwl0aW1lX291dF9sZWFzZXMoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJZm9yIChmbCA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfZmxvY2s7IGZsICYmIElTX0xFQVNFKGZsKTsKIAkJCWZsID0gZmwtPmZsX25leHQpIHsKIAkJaWYgKGZsLT5mbF9maWxlID09IGZpbHApIHsKIAkJCXR5cGUgPSBmbC0+ZmxfdHlwZSAmIH5GX0lOUFJPR1JFU1M7CkBAIC0xMzU5LDcgKzEzNTksNyBAQAogc3RhdGljIGludCBfX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBsb25nIGFyZywgc3RydWN0IGZpbGVfbG9jayAqKmZscCkKIHsKIAlzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgKipiZWZvcmUsICoqbXlfYmVmb3JlID0gTlVMTCwgKmxlYXNlOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZXJyb3IsIHJkbGVhc2VfY291bnQgPSAwLCB3cmxlYXNlX2NvdW50ID0gMDsKIApAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAKIAogaW50IHNldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBsb25nIGFyZywgc3RydWN0IGZpbGVfbG9jayAqKmxlYXNlKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZXJyb3I7CiAKQEAgLTE0ODIsNyArMTQ4Miw3IEBACiBpbnQgZmNudGxfc2V0bGVhc2UodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGZpbGVfbG9jayBmbCwgKmZscCA9ICZmbDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJaW50IGVycm9yOwogCkBAIC0xNjkyLDcgKzE2OTIsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmZmxvY2ssIGwsIHNpemVvZihmbG9jaykpKQogCQlnb3RvIG91dDsKIAotCWlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJLyogRG9uJ3QgYWxsb3cgbWFuZGF0b3J5IGxvY2tzIG9uIGZpbGVzIHRoYXQgbWF5IGJlIG1lbW9yeSBtYXBwZWQKIAkgKiBhbmQgc2hhcmVkLgpAQCAtMTgzNSw3ICsxODM1LDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZsb2NrLCBsLCBzaXplb2YoZmxvY2spKSkKIAkJZ290byBvdXQ7CiAKLQlpbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCWlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCS8qIERvbid0IGFsbG93IG1hbmRhdG9yeSBsb2NrcyBvbiBmaWxlcyB0aGF0IG1heSBiZSBtZW1vcnkgbWFwcGVkCiAJICogYW5kIHNoYXJlZC4KQEAgLTE5MjIsNyArMTkyMiw3IEBACiAJICogcG9zaXhfbG9ja19maWxlKCkuICBBbm90aGVyIHByb2Nlc3MgY291bGQgYmUgc2V0dGluZyBhIGxvY2sgb24gdGhpcwogCSAqIGZpbGUgYXQgdGhlIHNhbWUgdGltZSwgYnV0IHdlIHdvdWxkbid0IHJlbW92ZSB0aGF0IGxvY2sgYW55d2F5LgogCSAqLwotCWlmICghZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfZmxvY2spCisJaWYgKCFmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2Zsb2NrKQogCQlyZXR1cm47CiAKIAlsb2NrLmZsX3R5cGUgPSBGX1VOTENLOwpAQCAtMTk1MSw3ICsxOTUxLDcgQEAKICAqLwogdm9pZCBsb2Nrc19yZW1vdmVfZmxvY2soc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsgCisJc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCXN0cnVjdCBmaWxlX2xvY2sgKipiZWZvcmU7CiAKQEAgLTIwMjAsNyArMjAyMCw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAKIAlpZiAoZmwtPmZsX2ZpbGUgIT0gTlVMTCkKLQkJaW5vZGUgPSBmbC0+ZmxfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJCWlub2RlID0gZmwtPmZsX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAlvdXQgKz0gc3ByaW50ZihvdXQsICIlZDolcyAiLCBpZCwgcGZ4KTsKIAlpZiAoSVNfUE9TSVgoZmwpKSB7CmRpZmYgLS1naXQgYS9mcy9taW5peC9kaXIuYyBiL2ZzL21pbml4L2Rpci5jCmluZGV4IDJiMGEzODkuLmFiNzgyYzQgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2Rpci5jCisrKyBiL2ZzL21pbml4L2Rpci5jCkBAIC04Miw3ICs4Miw3IEBACiBzdGF0aWMgaW50IG1pbml4X3JlYWRkaXIoc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKIAl1bnNpZ25lZCBsb25nIHBvcyA9IGZpbHAtPmZfcG9zOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJdW5zaWduZWQgb2Zmc2V0ID0gcG9zICYgflBBR0VfQ0FDSEVfTUFTSzsKIAl1bnNpZ25lZCBsb25nIG4gPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IGRiMWJjYTIuLmU0ZjEwOGYgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAgKi8KIGludCBmaWxlX3Blcm1pc3Npb24oc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQogewotCXJldHVybiBwZXJtaXNzaW9uKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLCBtYXNrLCBOVUxMKTsKKwlyZXR1cm4gcGVybWlzc2lvbihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBtYXNrLCBOVUxMKTsKIH0KIAogLyoKQEAgLTMzMyw3ICszMzMsNyBAQAogCiBpbnQgZGVueV93cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKiBmaWxlKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSA+IDApIHsKQEAgLTM2OCw3ICszNjgsNyBAQAogICovCiB2b2lkIHJlbGVhc2Vfb3Blbl9pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaWYgKG5kLT5pbnRlbnQub3Blbi5maWxlLT5mX2RlbnRyeSA9PSBOVUxMKQorCWlmIChuZC0+aW50ZW50Lm9wZW4uZmlsZS0+Zl9wYXRoLmRlbnRyeSA9PSBOVUxMKQogCQlwdXRfZmlscChuZC0+aW50ZW50Lm9wZW4uZmlsZSk7CiAJZWxzZQogCQlmcHV0KG5kLT5pbnRlbnQub3Blbi5maWxlKTsKQEAgLTU3MiwxMSArNTcyLDYgQEAKIAlyZXR1cm4gUFRSX0VSUihsaW5rKTsKIH0KIAotc3RydWN0IHBhdGggewotCXN0cnVjdCB2ZnNtb3VudCAqbW50OwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKLX07Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkcHV0X3BhdGgoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCWRwdXQocGF0aC0+ZGVudHJ5KTsKQEAgLTExNDMsNyArMTEzOCw3IEBACiAJCWlmICghZmlsZSkKIAkJCWdvdG8gb3V0X2ZhaWw7CiAKLQkJZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJCWRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAKIAkJcmV0dmFsID0gLUVOT1RESVI7CiAJCWlmICghU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCkBAIC0xMTUzLDcgKzExNDgsNyBAQAogCQlpZiAocmV0dmFsKQogCQkJZ290byBmcHV0X2ZhaWw7CiAKLQkJbmQtPm1udCA9IG1udGdldChmaWxlLT5mX3Zmc21udCk7CisJCW5kLT5tbnQgPSBtbnRnZXQoZmlsZS0+Zl9wYXRoLm1udCk7CiAJCW5kLT5kZW50cnkgPSBkZ2V0KGRlbnRyeSk7CiAKIAkJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CmRpZmYgLS1naXQgYS9mcy9uYW1lc3BhY2UuYyBiL2ZzL25hbWVzcGFjZS5jCmluZGV4IGIwMGFjODQuLjVlZjMzNmMgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVzcGFjZS5jCisrKyBiL2ZzL25hbWVzcGFjZS5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21udF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KQEAgLTEzMywxMCArMTMzLDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKLQlyZXR1cm4gbW50LT5tbnRfbmFtZXNwYWNlID09IGN1cnJlbnQtPm5zcHJveHktPm5hbWVzcGFjZTsKKwlyZXR1cm4gbW50LT5tbnRfbnMgPT0gY3VycmVudC0+bnNwcm94eS0+bW50X25zOwogfQogCi1zdGF0aWMgdm9pZCB0b3VjaF9uYW1lc3BhY2Uoc3RydWN0IG5hbWVzcGFjZSAqbnMpCitzdGF0aWMgdm9pZCB0b3VjaF9tbnRfbmFtZXNwYWNlKHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucykKIHsKIAlpZiAobnMpIHsKIAkJbnMtPmV2ZW50ID0gKytldmVudDsKQEAgLTE0NCw3ICsxNDQsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX190b3VjaF9uYW1lc3BhY2Uoc3RydWN0IG5hbWVzcGFjZSAqbnMpCitzdGF0aWMgdm9pZCBfX3RvdWNoX21udF9uYW1lc3BhY2Uoc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zKQogewogCWlmIChucyAmJiBucy0+ZXZlbnQgIT0gZXZlbnQpIHsKIAkJbnMtPmV2ZW50ID0gZXZlbnQ7CkBAIC0xODcsMTkgKzE4NywxOSBAQAogCXN0cnVjdCB2ZnNtb3VudCAqcGFyZW50ID0gbW50LT5tbnRfcGFyZW50OwogCXN0cnVjdCB2ZnNtb3VudCAqbTsKIAlMSVNUX0hFQUQoaGVhZCk7Ci0Jc3RydWN0IG5hbWVzcGFjZSAqbiA9IHBhcmVudC0+bW50X25hbWVzcGFjZTsKKwlzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbiA9IHBhcmVudC0+bW50X25zOwogCiAJQlVHX09OKHBhcmVudCA9PSBtbnQpOwogCiAJbGlzdF9hZGRfdGFpbCgmaGVhZCwgJm1udC0+bW50X2xpc3QpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJmhlYWQsIG1udF9saXN0KQotCQltLT5tbnRfbmFtZXNwYWNlID0gbjsKKwkJbS0+bW50X25zID0gbjsKIAlsaXN0X3NwbGljZSgmaGVhZCwgbi0+bGlzdC5wcmV2KTsKIAogCWxpc3RfYWRkX3RhaWwoJm1udC0+bW50X2hhc2gsIG1vdW50X2hhc2h0YWJsZSArCiAJCQkJaGFzaChwYXJlbnQsIG1udC0+bW50X21vdW50cG9pbnQpKTsKIAlsaXN0X2FkZF90YWlsKCZtbnQtPm1udF9jaGlsZCwgJnBhcmVudC0+bW50X21vdW50cyk7Ci0JdG91Y2hfbmFtZXNwYWNlKG4pOworCXRvdWNoX21udF9uYW1lc3BhY2Uobik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKm5leHRfbW50KHN0cnVjdCB2ZnNtb3VudCAqcCwgc3RydWN0IHZmc21vdW50ICpyb290KQpAQCAtMzIwLDcgKzMyMCw3IEBACiAvKiBpdGVyYXRvciAqLwogc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgbmFtZXNwYWNlICpuID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbiA9IG0tPnByaXZhdGU7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAlsb2ZmX3QgbCA9ICpwb3M7CiAKQEAgLTMzMyw3ICszMzMsNyBAQAogCiBzdGF0aWMgdm9pZCAqbV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IG5hbWVzcGFjZSAqbiA9IG0tPnByaXZhdGU7CisJc3RydWN0IG1udF9uYW1lc3BhY2UgKm4gPSBtLT5wcml2YXRlOwogCXN0cnVjdCBsaXN0X2hlYWQgKnAgPSAoKHN0cnVjdCB2ZnNtb3VudCAqKXYpLT5tbnRfbGlzdC5uZXh0OwogCSgqcG9zKSsrOwogCXJldHVybiBwID09ICZuLT5saXN0ID8gTlVMTCA6IGxpc3RfZW50cnkocCwgc3RydWN0IHZmc21vdW50LCBtbnRfbGlzdCk7CkBAIC0zNjgsNiArMzY4LDcgQEAKIAkJeyBNTlRfTk9FWEVDLCAiLG5vZXhlYyIgfSwKIAkJeyBNTlRfTk9BVElNRSwgIixub2F0aW1lIiB9LAogCQl7IE1OVF9OT0RJUkFUSU1FLCAiLG5vZGlyYXRpbWUiIH0sCisJCXsgTU5UX1JFTEFUSU1FLCAiLHJlbGF0aW1lIiB9LAogCQl7IDAsIE5VTEwgfQogCX07CiAJc3RydWN0IHByb2NfZnNfaW5mbyAqZnNfaW5mb3A7CkBAIC01MjYsOCArNTI3LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGtpbGwsIG1udF9oYXNoKSB7CiAJCWxpc3RfZGVsX2luaXQoJnAtPm1udF9leHBpcmUpOwogCQlsaXN0X2RlbF9pbml0KCZwLT5tbnRfbGlzdCk7Ci0JCV9fdG91Y2hfbmFtZXNwYWNlKHAtPm1udF9uYW1lc3BhY2UpOwotCQlwLT5tbnRfbmFtZXNwYWNlID0gTlVMTDsKKwkJX190b3VjaF9tbnRfbmFtZXNwYWNlKHAtPm1udF9ucyk7CisJCXAtPm1udF9ucyA9IE5VTEw7CiAJCWxpc3RfZGVsX2luaXQoJnAtPm1udF9jaGlsZCk7CiAJCWlmIChwLT5tbnRfcGFyZW50ICE9IHApCiAJCQlwLT5tbnRfbW91bnRwb2ludC0+ZF9tb3VudGVkLS07CkBAIC04MzAsNyArODMxLDcgQEAKIAlpZiAocGFyZW50X25kKSB7CiAJCWRldGFjaF9tbnQoc291cmNlX21udCwgcGFyZW50X25kKTsKIAkJYXR0YWNoX21udChzb3VyY2VfbW50LCBuZCk7Ci0JCXRvdWNoX25hbWVzcGFjZShjdXJyZW50LT5uc3Byb3h5LT5uYW1lc3BhY2UpOworCQl0b3VjaF9tbnRfbmFtZXNwYWNlKGN1cnJlbnQtPm5zcHJveHktPm1udF9ucyk7CiAJfSBlbHNlIHsKIAkJbW50X3NldF9tb3VudHBvaW50KGRlc3RfbW50LCBkZXN0X2RlbnRyeSwgc291cmNlX21udCk7CiAJCWNvbW1pdF90cmVlKHNvdXJjZV9tbnQpOwpAQCAtMTE0NSw5ICsxMTQ2LDkgQEAKIAkgKi8KIAlpZiAoIXByb3BhZ2F0ZV9tb3VudF9idXN5KG1udCwgMikpIHsKIAkJLyogZGVsZXRlIGZyb20gdGhlIG5hbWVzcGFjZSAqLwotCQl0b3VjaF9uYW1lc3BhY2UobW50LT5tbnRfbmFtZXNwYWNlKTsKKwkJdG91Y2hfbW50X25hbWVzcGFjZShtbnQtPm1udF9ucyk7CiAJCWxpc3RfZGVsX2luaXQoJm1udC0+bW50X2xpc3QpOwotCQltbnQtPm1udF9uYW1lc3BhY2UgPSBOVUxMOworCQltbnQtPm1udF9ucyA9IE5VTEw7CiAJCXVtb3VudF90cmVlKG1udCwgMSwgdW1vdW50cyk7CiAJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAl9IGVsc2UgewpAQCAtMTE2OCw3ICsxMTY5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZXhwaXJlX21vdW50X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZ3JhdmV5YXJkLCBzdHJ1Y3QgbGlzdF9oZWFkICptb3VudHMpCiB7Ci0Jc3RydWN0IG5hbWVzcGFjZSAqbmFtZXNwYWNlOworCXN0cnVjdCBtbnRfbmFtZXNwYWNlICpuczsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKIAogCXdoaWxlICghbGlzdF9lbXB0eShncmF2ZXlhcmQpKSB7CkBAIC0xMTc4LDEwICsxMTc5LDEwIEBACiAKIAkJLyogZG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIG5hbWVzcGFjZSBpcyBkZWFkIC0gYWxsIHRoZQogCQkgKiB2ZnNtb3VudHMgZnJvbSBpdCBhcmUgZ29pbmcgYXdheSBhbnl3YXkgKi8KLQkJbmFtZXNwYWNlID0gbW50LT5tbnRfbmFtZXNwYWNlOwotCQlpZiAoIW5hbWVzcGFjZSB8fCAhbmFtZXNwYWNlLT5yb290KQorCQlucyA9IG1udC0+bW50X25zOworCQlpZiAoIW5zIHx8ICFucy0+cm9vdCkKIAkJCWNvbnRpbnVlOwotCQlnZXRfbmFtZXNwYWNlKG5hbWVzcGFjZSk7CisJCWdldF9tbnRfbnMobnMpOwogCiAJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAkJZG93bl93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CkBAIC0xMTg5LDcgKzExOTAsNyBAQAogCQl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CiAJCXJlbGVhc2VfbW91bnRzKCZ1bW91bnRzKTsKIAkJbW50cHV0KG1udCk7Ci0JCXB1dF9uYW1lc3BhY2UobmFtZXNwYWNlKTsKKwkJcHV0X21udF9ucyhucyk7CiAJCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7CiAJfQogfQpAQCAtMTQwNSw5ICsxNDA2LDExIEBACiAJCW1udF9mbGFncyB8PSBNTlRfTk9BVElNRTsKIAlpZiAoZmxhZ3MgJiBNU19OT0RJUkFUSU1FKQogCQltbnRfZmxhZ3MgfD0gTU5UX05PRElSQVRJTUU7CisJaWYgKGZsYWdzICYgTVNfUkVMQVRJTUUpCisJCW1udF9mbGFncyB8PSBNTlRfUkVMQVRJTUU7CiAKIAlmbGFncyAmPSB+KE1TX05PU1VJRCB8IE1TX05PRVhFQyB8IE1TX05PREVWIHwgTVNfQUNUSVZFIHwKLQkJICAgTVNfTk9BVElNRSB8IE1TX05PRElSQVRJTUUpOworCQkgICBNU19OT0FUSU1FIHwgTVNfTk9ESVJBVElNRSB8IE1TX1JFTEFUSU1FKTsKIAogCS8qIC4uLiBhbmQgZ2V0IHRoZSBtb3VudHBvaW50ICovCiAJcmV0dmFsID0gcGF0aF9sb29rdXAoZGlyX25hbWUsIExPT0tVUF9GT0xMT1csICZuZCk7CkBAIC0xNDM5LDE0ICsxNDQyLDE1IEBACiAgKiBBbGxvY2F0ZSBhIG5ldyBuYW1lc3BhY2Ugc3RydWN0dXJlIGFuZCBwb3B1bGF0ZSBpdCB3aXRoIGNvbnRlbnRzCiAgKiBjb3BpZWQgZnJvbSB0aGUgbmFtZXNwYWNlIG9mIHRoZSBwYXNzZWQgaW4gdGFzayBzdHJ1Y3R1cmUuCiAgKi8KLXN0cnVjdCBuYW1lc3BhY2UgKmR1cF9uYW1lc3BhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBmc19zdHJ1Y3QgKmZzKQorc3RydWN0IG1udF9uYW1lc3BhY2UgKmR1cF9tbnRfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCXN0cnVjdCBmc19zdHJ1Y3QgKmZzKQogewotCXN0cnVjdCBuYW1lc3BhY2UgKm5hbWVzcGFjZSA9IHRzay0+bnNwcm94eS0+bmFtZXNwYWNlOwotCXN0cnVjdCBuYW1lc3BhY2UgKm5ld19uczsKKwlzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbW50X25zID0gdHNrLT5uc3Byb3h5LT5tbnRfbnM7CisJc3RydWN0IG1udF9uYW1lc3BhY2UgKm5ld19uczsKIAlzdHJ1Y3QgdmZzbW91bnQgKnJvb3RtbnQgPSBOVUxMLCAqcHdkbW50ID0gTlVMTCwgKmFsdHJvb3RtbnQgPSBOVUxMOwogCXN0cnVjdCB2ZnNtb3VudCAqcCwgKnE7CiAKLQluZXdfbnMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmFtZXNwYWNlKSwgR0ZQX0tFUk5FTCk7CisJbmV3X25zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1udF9uYW1lc3BhY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19ucykKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTE0NTcsNyArMTQ2MSw3IEBACiAKIAlkb3duX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKIAkvKiBGaXJzdCBwYXNzOiBjb3B5IHRoZSB0cmVlIHRvcG9sb2d5ICovCi0JbmV3X25zLT5yb290ID0gY29weV90cmVlKG5hbWVzcGFjZS0+cm9vdCwgbmFtZXNwYWNlLT5yb290LT5tbnRfcm9vdCwKKwluZXdfbnMtPnJvb3QgPSBjb3B5X3RyZWUobW50X25zLT5yb290LCBtbnRfbnMtPnJvb3QtPm1udF9yb290LAogCQkJCQlDTF9DT1BZX0FMTCB8IENMX0VYUElSRSk7CiAJaWYgKCFuZXdfbnMtPnJvb3QpIHsKIAkJdXBfd3JpdGUoJm5hbWVzcGFjZV9zZW0pOwpAQCAtMTQ3MywxMCArMTQ3NywxMCBAQAogCSAqIGFzIGJlbG9uZ2luZyB0byBuZXcgbmFtZXNwYWNlLiAgV2UgaGF2ZSBhbHJlYWR5IGFjcXVpcmVkIGEgcHJpdmF0ZQogCSAqIGZzX3N0cnVjdCwgc28gdHNrLT5mcy0+bG9jayBpcyBub3QgbmVlZGVkLgogCSAqLwotCXAgPSBuYW1lc3BhY2UtPnJvb3Q7CisJcCA9IG1udF9ucy0+cm9vdDsKIAlxID0gbmV3X25zLT5yb290OwogCXdoaWxlIChwKSB7Ci0JCXEtPm1udF9uYW1lc3BhY2UgPSBuZXdfbnM7CisJCXEtPm1udF9ucyA9IG5ld19uczsKIAkJaWYgKGZzKSB7CiAJCQlpZiAocCA9PSBmcy0+cm9vdG1udCkgewogCQkJCXJvb3RtbnQgPSBwOwpAQCAtMTQ5MSw3ICsxNDk1LDcgQEAKIAkJCQlmcy0+YWx0cm9vdG1udCA9IG1udGdldChxKTsKIAkJCX0KIAkJfQotCQlwID0gbmV4dF9tbnQocCwgbmFtZXNwYWNlLT5yb290KTsKKwkJcCA9IG5leHRfbW50KHAsIG1udF9ucy0+cm9vdCk7CiAJCXEgPSBuZXh0X21udChxLCBuZXdfbnMtPnJvb3QpOwogCX0KIAl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CkBAIC0xNTA2LDE2ICsxNTEwLDE2IEBACiAJcmV0dXJuIG5ld19uczsKIH0KIAotaW50IGNvcHlfbmFtZXNwYWNlKGludCBmbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitpbnQgY29weV9tbnRfbnMoaW50IGZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQlzdHJ1Y3QgbmFtZXNwYWNlICpuYW1lc3BhY2UgPSB0c2stPm5zcHJveHktPm5hbWVzcGFjZTsKLQlzdHJ1Y3QgbmFtZXNwYWNlICpuZXdfbnM7CisJc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zID0gdHNrLT5uc3Byb3h5LT5tbnRfbnM7CisJc3RydWN0IG1udF9uYW1lc3BhY2UgKm5ld19uczsKIAlpbnQgZXJyID0gMDsKIAotCWlmICghbmFtZXNwYWNlKQorCWlmICghbnMpCiAJCXJldHVybiAwOwogCi0JZ2V0X25hbWVzcGFjZShuYW1lc3BhY2UpOworCWdldF9tbnRfbnMobnMpOwogCiAJaWYgKCEoZmxhZ3MgJiBDTE9ORV9ORVdOUykpCiAJCXJldHVybiAwOwpAQCAtMTUyNSwxNiArMTUyOSwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQluZXdfbnMgPSBkdXBfbmFtZXNwYWNlKHRzaywgdHNrLT5mcyk7CisJbmV3X25zID0gZHVwX21udF9ucyh0c2ssIHRzay0+ZnMpOwogCWlmICghbmV3X25zKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAotCXRzay0+bnNwcm94eS0+bmFtZXNwYWNlID0gbmV3X25zOworCXRzay0+bnNwcm94eS0+bW50X25zID0gbmV3X25zOwogCiBvdXQ6Ci0JcHV0X25hbWVzcGFjZShuYW1lc3BhY2UpOworCXB1dF9tbnRfbnMobnMpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE3NTQsNyArMTc1OCw3IEBACiAJZGV0YWNoX21udCh1c2VyX25kLm1udCwgJnJvb3RfcGFyZW50KTsKIAlhdHRhY2hfbW50KHVzZXJfbmQubW50LCAmb2xkX25kKTsgICAgIC8qIG1vdW50IG9sZCByb290IG9uIHB1dF9vbGQgKi8KIAlhdHRhY2hfbW50KG5ld19uZC5tbnQsICZyb290X3BhcmVudCk7IC8qIG1vdW50IG5ld19yb290IG9uIC8gKi8KLQl0b3VjaF9uYW1lc3BhY2UoY3VycmVudC0+bnNwcm94eS0+bmFtZXNwYWNlKTsKKwl0b3VjaF9tbnRfbmFtZXNwYWNlKGN1cnJlbnQtPm5zcHJveHktPm1udF9ucyk7CiAJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwogCWNocm9vdF9mc19yZWZzKCZ1c2VyX25kLCAmbmV3X25kKTsKIAlzZWN1cml0eV9zYl9wb3N0X3Bpdm90cm9vdCgmdXNlcl9uZCwgJm5ld19uZCk7CkBAIC0xNzc5LDI3ICsxNzgzLDI3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9tb3VudF90cmVlKHZvaWQpCiB7CiAJc3RydWN0IHZmc21vdW50ICptbnQ7Ci0Jc3RydWN0IG5hbWVzcGFjZSAqbmFtZXNwYWNlOworCXN0cnVjdCBtbnRfbmFtZXNwYWNlICpuczsKIAogCW1udCA9IGRvX2tlcm5fbW91bnQoInJvb3RmcyIsIDAsICJyb290ZnMiLCBOVUxMKTsKIAlpZiAoSVNfRVJSKG1udCkpCiAJCXBhbmljKCJDYW4ndCBjcmVhdGUgcm9vdGZzIik7Ci0JbmFtZXNwYWNlID0ga21hbGxvYyhzaXplb2YoKm5hbWVzcGFjZSksIEdGUF9LRVJORUwpOwotCWlmICghbmFtZXNwYWNlKQorCW5zID0ga21hbGxvYyhzaXplb2YoKm5zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFucykKIAkJcGFuaWMoIkNhbid0IGFsbG9jYXRlIGluaXRpYWwgbmFtZXNwYWNlIik7Ci0JYXRvbWljX3NldCgmbmFtZXNwYWNlLT5jb3VudCwgMSk7Ci0JSU5JVF9MSVNUX0hFQUQoJm5hbWVzcGFjZS0+bGlzdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmbmFtZXNwYWNlLT5wb2xsKTsKLQluYW1lc3BhY2UtPmV2ZW50ID0gMDsKLQlsaXN0X2FkZCgmbW50LT5tbnRfbGlzdCwgJm5hbWVzcGFjZS0+bGlzdCk7Ci0JbmFtZXNwYWNlLT5yb290ID0gbW50OwotCW1udC0+bW50X25hbWVzcGFjZSA9IG5hbWVzcGFjZTsKKwlhdG9taWNfc2V0KCZucy0+Y291bnQsIDEpOworCUlOSVRfTElTVF9IRUFEKCZucy0+bGlzdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbnMtPnBvbGwpOworCW5zLT5ldmVudCA9IDA7CisJbGlzdF9hZGQoJm1udC0+bW50X2xpc3QsICZucy0+bGlzdCk7CisJbnMtPnJvb3QgPSBtbnQ7CisJbW50LT5tbnRfbnMgPSBuczsKIAotCWluaXRfdGFzay5uc3Byb3h5LT5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7Ci0JZ2V0X25hbWVzcGFjZShuYW1lc3BhY2UpOworCWluaXRfdGFzay5uc3Byb3h5LT5tbnRfbnMgPSBuczsKKwlnZXRfbW50X25zKG5zKTsKIAotCXNldF9mc19wd2QoY3VycmVudC0+ZnMsIG5hbWVzcGFjZS0+cm9vdCwgbmFtZXNwYWNlLT5yb290LT5tbnRfcm9vdCk7Ci0Jc2V0X2ZzX3Jvb3QoY3VycmVudC0+ZnMsIG5hbWVzcGFjZS0+cm9vdCwgbmFtZXNwYWNlLT5yb290LT5tbnRfcm9vdCk7CisJc2V0X2ZzX3B3ZChjdXJyZW50LT5mcywgbnMtPnJvb3QsIG5zLT5yb290LT5tbnRfcm9vdCk7CisJc2V0X2ZzX3Jvb3QoY3VycmVudC0+ZnMsIG5zLT5yb290LCBucy0+cm9vdC0+bW50X3Jvb3QpOwogfQogCiB2b2lkIF9faW5pdCBtbnRfaW5pdCh1bnNpZ25lZCBsb25nIG1lbXBhZ2VzKQpAQCAtMTg2MCwxMSArMTg2NCwxMSBAQAogCWluaXRfbW91bnRfdHJlZSgpOwogfQogCi12b2lkIF9fcHV0X25hbWVzcGFjZShzdHJ1Y3QgbmFtZXNwYWNlICpuYW1lc3BhY2UpCit2b2lkIF9fcHV0X21udF9ucyhzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpCiB7Ci0Jc3RydWN0IHZmc21vdW50ICpyb290ID0gbmFtZXNwYWNlLT5yb290OworCXN0cnVjdCB2ZnNtb3VudCAqcm9vdCA9IG5zLT5yb290OwogCUxJU1RfSEVBRCh1bW91bnRfbGlzdCk7Ci0JbmFtZXNwYWNlLT5yb290ID0gTlVMTDsKKwlucy0+cm9vdCA9IE5VTEw7CiAJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwogCWRvd25fd3JpdGUoJm5hbWVzcGFjZV9zZW0pOwogCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7CkBAIC0xODcyLDUgKzE4NzYsNSBAQAogCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAl1cF93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CiAJcmVsZWFzZV9tb3VudHMoJnVtb3VudF9saXN0KTsKLQlrZnJlZShuYW1lc3BhY2UpOworCWtmcmVlKG5zKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2Rpci5jIGIvZnMvbmNwZnMvZGlyLmMKaW5kZXggNDU4YjNiNy4uNzM3NDc3NyAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvZGlyLmMKKysrIGIvZnMvbmNwZnMvZGlyLmMKQEAgLTQwMiw3ICs0MDIsNyBAQAogCiBzdGF0aWMgaW50IG5jcF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJc3RydWN0IG5jcF9zZXJ2ZXIgKnNlcnZlciA9IE5DUF9TRVJWRVIoaW5vZGUpOwpAQCAtNTU0LDcgKzU1NCw3IEBACiBuY3BfZmlsbF9jYWNoZShzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpciwKIAkJc3RydWN0IG5jcF9jYWNoZV9jb250cm9sICpjdHJsLCBzdHJ1Y3QgbmNwX2VudHJ5X2luZm8gKmVudHJ5KQogewotCXN0cnVjdCBkZW50cnkgKm5ld2RlbnQsICpkZW50cnkgPSBmaWxwLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpuZXdkZW50LCAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKm5ld2lubywgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBuY3BfY2FjaGVfY29udHJvbCBjdGwgPSAqY3RybDsKIAlzdHJ1Y3QgcXN0ciBxbmFtZTsKQEAgLTY0OSw3ICs2NDksNyBAQAogbmNwX3JlYWRfdm9sdW1lX2xpc3Qoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIsCiAJCQlzdHJ1Y3QgbmNwX2NhY2hlX2NvbnRyb2wgKmN0bCkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IG5jcF9zZXJ2ZXIgKnNlcnZlciA9IE5DUF9TRVJWRVIoaW5vZGUpOwogCXN0cnVjdCBuY3Bfdm9sdW1lX2luZm8gaW5mbzsKQEAgLTY4NSw3ICs2ODUsNyBAQAogbmNwX2RvX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIsCiAJCQkJCQlzdHJ1Y3QgbmNwX2NhY2hlX2NvbnRyb2wgKmN0bCkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqZGlyID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIgPSBOQ1BfU0VSVkVSKGRpcik7CiAJc3RydWN0IG53X3NlYXJjaF9zZXF1ZW5jZSBzZXE7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9maWxlLmMgYi9mcy9uY3Bmcy9maWxlLmMKaW5kZXggZGYzNzUyNC4uYjkxZmVhMCAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvZmlsZS5jCisrKyBiL2ZzL25jcGZzL2ZpbGUuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiBzdGF0aWMgc3NpemVfdAogbmNwX2ZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXNpemVfdCBhbHJlYWR5X3JlYWQgPSAwOwogCW9mZl90IHBvczsKQEAgLTE4Miw3ICsxODIsNyBAQAogc3RhdGljIHNzaXplX3QKIG5jcF9maWxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc2l6ZV90IGFscmVhZHlfd3JpdHRlbiA9IDA7CiAJb2ZmX3QgcG9zOwpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvaW5vZGUuYyBiL2ZzL25jcGZzL2lub2RlLmMKaW5kZXggZmFlNTMyNC4uNjdhOTBiZiAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvaW5vZGUuYworKysgYi9mcy9uY3Bmcy9pbm9kZS5jCkBAIC0zMjcsMTEgKzMyNywxMiBAQAogCWNoYXIgKm9wdGFyZzsKIAl1bnNpZ25lZCBsb25nIG9wdGludDsKIAlpbnQgdmVyc2lvbiA9IDA7CisJaW50IHJldDsKIAogCWRhdGEtPmZsYWdzID0gMDsKIAlkYXRhLT5pbnRfZmxhZ3MgPSAwOwogCWRhdGEtPm1vdW50ZWRfdWlkID0gMDsKLQlkYXRhLT53ZG9nX3BpZCA9IC0xOworCWRhdGEtPndkb2dfcGlkID0gTlVMTDsKIAlkYXRhLT5uY3BfZmQgPSB+MDsKIAlkYXRhLT50aW1lX291dCA9IDEwOwogCWRhdGEtPnJldHJ5X2NvdW50ID0gMjA7CkBAIC0zNDMsOCArMzQ0LDkgQEAKIAlkYXRhLT5tb3VudGVkX3ZvbFswXSA9IDA7CiAJCiAJd2hpbGUgKChvcHR2YWwgPSBuY3BfZ2V0b3B0KCJuY3BmcyIsICZvcHRpb25zLCBuY3Bfb3B0cywgTlVMTCwgJm9wdGFyZywgJm9wdGludCkpICE9IDApIHsKLQkJaWYgKG9wdHZhbCA8IDApCi0JCQlyZXR1cm4gb3B0dmFsOworCQlyZXQgPSBvcHR2YWw7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnI7CiAJCXN3aXRjaCAob3B0dmFsKSB7CiAJCQljYXNlICd1JzoKIAkJCQlkYXRhLT51aWQgPSBvcHRpbnQ7CkBAIC0zNzEsNyArMzczLDcgQEAKIAkJCQlkYXRhLT5mbGFncyA9IG9wdGludDsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ3cnOgotCQkJCWRhdGEtPndkb2dfcGlkID0gb3B0aW50OworCQkJCWRhdGEtPndkb2dfcGlkID0gZmluZF9nZXRfcGlkKG9wdGludCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlICduJzoKIAkJCQlkYXRhLT5uY3BfZmQgPSBvcHRpbnQ7CkBAIC0zODAsMTggKzM4MiwyMSBAQAogCQkJCWRhdGEtPmluZm9fZmQgPSBvcHRpbnQ7CiAJCQkJYnJlYWs7CiAJCQljYXNlICd2JzoKLQkJCQlpZiAob3B0aW50IDwgTkNQX01PVU5UX1ZFUlNJT05fVjQpIHsKLQkJCQkJcmV0dXJuIC1FQ0hSTkc7Ci0JCQkJfQotCQkJCWlmIChvcHRpbnQgPiBOQ1BfTU9VTlRfVkVSU0lPTl9WNSkgewotCQkJCQlyZXR1cm4gLUVDSFJORzsKLQkJCQl9CisJCQkJcmV0ID0gLUVDSFJORzsKKwkJCQlpZiAob3B0aW50IDwgTkNQX01PVU5UX1ZFUlNJT05fVjQpCisJCQkJCWdvdG8gZXJyOworCQkJCWlmIChvcHRpbnQgPiBOQ1BfTU9VTlRfVkVSU0lPTl9WNSkKKwkJCQkJZ290byBlcnI7CiAJCQkJdmVyc2lvbiA9IG9wdGludDsKIAkJCQlicmVhazsKIAkJCQogCQl9CiAJfQogCXJldHVybiAwOworZXJyOgorCXB1dF9waWQoZGF0YS0+d2RvZ19waWQpOworCWRhdGEtPndkb2dfcGlkID0gTlVMTDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG5jcF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKnJhd19kYXRhLCBpbnQgc2lsZW50KQpAQCAtNDA5LDYgKzQxNCw3IEBACiAjZW5kaWYKIAlzdHJ1Y3QgbmNwX2VudHJ5X2luZm8gZmluZm87CiAKKwlkYXRhLndkb2dfcGlkID0gTlVMTDsKIAlzZXJ2ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmNwX3NlcnZlciksIEdGUF9LRVJORUwpOwogCWlmICghc2VydmVyKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQyNSw3ICs0MzEsNyBAQAogCQkJCWRhdGEuZmxhZ3MgPSBtZC0+ZmxhZ3M7CiAJCQkJZGF0YS5pbnRfZmxhZ3MgPSBOQ1BfSU1PVU5UX0xPR0dFRElOX1BPU1NJQkxFOwogCQkJCWRhdGEubW91bnRlZF91aWQgPSBtZC0+bW91bnRlZF91aWQ7Ci0JCQkJZGF0YS53ZG9nX3BpZCA9IG1kLT53ZG9nX3BpZDsKKwkJCQlkYXRhLndkb2dfcGlkID0gZmluZF9nZXRfcGlkKG1kLT53ZG9nX3BpZCk7CiAJCQkJZGF0YS5uY3BfZmQgPSBtZC0+bmNwX2ZkOwogCQkJCWRhdGEudGltZV9vdXQgPSBtZC0+dGltZV9vdXQ7CiAJCQkJZGF0YS5yZXRyeV9jb3VudCA9IG1kLT5yZXRyeV9jb3VudDsKQEAgLTQ0NSw3ICs0NTEsNyBAQAogCQkJCWRhdGEuZmxhZ3MgPSBtZC0+ZmxhZ3M7CiAJCQkJZGF0YS5pbnRfZmxhZ3MgPSAwOwogCQkJCWRhdGEubW91bnRlZF91aWQgPSBtZC0+bW91bnRlZF91aWQ7Ci0JCQkJZGF0YS53ZG9nX3BpZCA9IG1kLT53ZG9nX3BpZDsKKwkJCQlkYXRhLndkb2dfcGlkID0gZmluZF9nZXRfcGlkKG1kLT53ZG9nX3BpZCk7CiAJCQkJZGF0YS5uY3BfZmQgPSBtZC0+bmNwX2ZkOwogCQkJCWRhdGEudGltZV9vdXQgPSBtZC0+dGltZV9vdXQ7CiAJCQkJZGF0YS5yZXRyeV9jb3VudCA9IG1kLT5yZXRyeV9jb3VudDsKQEAgLTQ3MSw3ICs0NzcsNyBAQAogCWlmICghbmNwX2ZpbHApCiAJCWdvdG8gb3V0OwogCWVycm9yID0gLUVOT1RTT0NLOwotCXNvY2tfaW5vZGUgPSBuY3BfZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc29ja19pbm9kZSA9IG5jcF9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWlmICghU19JU1NPQ0soc29ja19pbm9kZS0+aV9tb2RlKSkKIAkJZ290byBvdXRfZnB1dDsKIAlzb2NrID0gU09DS0VUX0koc29ja19pbm9kZSk7CkBAIC01MDQsNyArNTEwLDcgQEAKIAkJaWYgKCFzZXJ2ZXItPmluZm9fZmlscCkKIAkJCWdvdG8gb3V0X2ZwdXQ7CiAJCWVycm9yID0gLUVOT1RTT0NLOwotCQlzb2NrX2lub2RlID0gc2VydmVyLT5pbmZvX2ZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCQlzb2NrX2lub2RlID0gc2VydmVyLT5pbmZvX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJCWlmICghU19JU1NPQ0soc29ja19pbm9kZS0+aV9tb2RlKSkKIAkJCWdvdG8gb3V0X2ZwdXQyOwogCQlpbmZvX3NvY2sgPSBTT0NLRVRfSShzb2NrX2lub2RlKTsKQEAgLTY3OSw2ICs2ODUsNyBAQAogCSAqLwogCWZwdXQobmNwX2ZpbHApOwogb3V0OgorCXB1dF9waWQoZGF0YS53ZG9nX3BpZCk7CiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CiAJa2ZyZWUoc2VydmVyKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC03MTEsNyArNzE4LDggQEAKIAlpZiAoc2VydmVyLT5pbmZvX2ZpbHApCiAJCWZwdXQoc2VydmVyLT5pbmZvX2ZpbHApOwogCWZwdXQoc2VydmVyLT5uY3BfZmlscCk7Ci0Ja2lsbF9wcm9jKHNlcnZlci0+bS53ZG9nX3BpZCwgU0lHVEVSTSwgMSk7CisJa2lsbF9waWQoc2VydmVyLT5tLndkb2dfcGlkLCBTSUdURVJNLCAxKTsKKwlwdXRfcGlkKHNlcnZlci0+bS53ZG9nX3BpZCk7CiAKIAlrZnJlZShzZXJ2ZXItPnByaXYuZGF0YSk7CiAJa2ZyZWUoc2VydmVyLT5hdXRoLm9iamVjdF9uYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2lvY3RsLmMgYi9mcy9uY3Bmcy9pb2N0bC5jCmluZGV4IDU4OWQxZWEuLjg4NDNhODMgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2lvY3RsLmMKKysrIGIvZnMvbmNwZnMvaW9jdGwuYwpAQCAtMzUsNyArMzUsNyBAQAogbmNwX2dldF9mc19pbmZvKHN0cnVjdCBuY3Bfc2VydmVyICogc2VydmVyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJc3RydWN0IG5jcF9mc19pbmZvIF9fdXNlciAqYXJnKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgbmNwX2ZzX2luZm8gaW5mbzsKIAogCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbGUsIE1BWV9XUklURSkgIT0gMCkKQEAgLTY1LDcgKzY1LDcgQEAKIG5jcF9nZXRfZnNfaW5mb192MihzdHJ1Y3QgbmNwX3NlcnZlciAqIHNlcnZlciwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgIHN0cnVjdCBuY3BfZnNfaW5mb192MiBfX3VzZXIgKiBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBuY3BfZnNfaW5mb192MiBpbmZvMjsKIAogCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbGUsIE1BWV9XUklURSkgIT0gMCkKQEAgLTEzNiw3ICsxMzYsNyBAQAogbmNwX2dldF9jb21wYXRfZnNfaW5mb192MihzdHJ1Y3QgbmNwX3NlcnZlciAqIHNlcnZlciwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgIHN0cnVjdCBjb21wYXRfbmNwX2ZzX2luZm9fdjIgX191c2VyICogYXJnKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgY29tcGF0X25jcF9mc19pbmZvX3YyIGluZm8yOwogCiAJaWYgKChmaWxlX3Blcm1pc3Npb24oZmlsZSwgTUFZX1dSSVRFKSAhPSAwKQpAQCAtODI0LDcgKzgyNCw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogbG9uZyBuY3BfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldDsKIAogCWxvY2tfa2VybmVsKCk7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9tbWFwLmMgYi9mcy9uY3Bmcy9tbWFwLmMKaW5kZXggZTdkNWEzMC4uNzBhNjkxMSAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvbW1hcC5jCisrKyBiL2ZzL25jcGZzL21tYXAuYwpAQCAtMjksNyArMjksNyBAQAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgKnR5cGUpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBhcmVhLT52bV9maWxlOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcGFnZSogcGFnZTsKIAljaGFyICpwZ19hZGRyOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAvKiBUaGlzIGlzIHVzZWQgZm9yIGEgZ2VuZXJhbCBtbWFwIG9mIGEgbmNwIGZpbGUgKi8KIGludCBuY3BfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCQogCURQUklOVEsoIm5jcF9tbWFwOiBjYWxsZWRcbiIpOwogCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggYjM0Y2QxNi4uZDliYThjYiAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiBpbnQgbmZzX3JlYWRkaXJfZmlsbGVyKG5mc19yZWFkZGlyX2Rlc2NyaXB0b3JfdCAqZGVzYywgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IGZpbGUJKmZpbGUgPSBkZXNjLT5maWxlOwotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcnBjX2NyZWQJKmNyZWQgPSBuZnNfZmlsZV9jcmVkKGZpbGUpOwogCXVuc2lnbmVkIGxvbmcJdGltZXN0YW1wOwogCWludAkJZXJyb3I7CkBAIC0xODMsNyArMTgzLDcgQEAKIAogIGFnYWluOgogCXRpbWVzdGFtcCA9IGppZmZpZXM7Ci0JZXJyb3IgPSBORlNfUFJPVE8oaW5vZGUpLT5yZWFkZGlyKGZpbGUtPmZfZGVudHJ5LCBjcmVkLCBkZXNjLT5lbnRyeS0+Y29va2llLCBwYWdlLAorCWVycm9yID0gTkZTX1BST1RPKGlub2RlKS0+cmVhZGRpcihmaWxlLT5mX3BhdGguZGVudHJ5LCBjcmVkLCBkZXNjLT5lbnRyeS0+Y29va2llLCBwYWdlLAogCQkJCQkgIE5GU19TRVJWRVIoaW5vZGUpLT5kdHNpemUsIGRlc2MtPnBsdXMpOwogCWlmIChlcnJvciA8IDApIHsKIAkJLyogV2UgcmVxdWVzdGVkIFJFQURESVJQTFVTLCBidXQgdGhlIHNlcnZlciBkb2Vzbid0IGdyb2sgaXQgKi8KQEAgLTMwOCw3ICszMDgsNyBAQAogc3RhdGljIGlubGluZQogaW50IGZpbmRfZGlyZW50X3BhZ2UobmZzX3JlYWRkaXJfZGVzY3JpcHRvcl90ICpkZXNjKQogewotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBkZXNjLT5maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZGVzYy0+ZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcGFnZQkqcGFnZTsKIAlpbnQJCXN0YXR1czsKIApAQCAtNDY0LDcgKzQ2NCw3IEBACiAJCSAgICAgZmlsbGRpcl90IGZpbGxkaXIpCiB7CiAJc3RydWN0IGZpbGUJKmZpbGUgPSBkZXNjLT5maWxlOwotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcnBjX2NyZWQJKmNyZWQgPSBuZnNfZmlsZV9jcmVkKGZpbGUpOwogCXN0cnVjdCBwYWdlCSpwYWdlID0gTlVMTDsKIAlpbnQJCXN0YXR1czsKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCQlzdGF0dXMgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0JZGVzYy0+ZXJyb3IgPSBORlNfUFJPVE8oaW5vZGUpLT5yZWFkZGlyKGZpbGUtPmZfZGVudHJ5LCBjcmVkLCAqZGVzYy0+ZGlyX2Nvb2tpZSwKKwlkZXNjLT5lcnJvciA9IE5GU19QUk9UTyhpbm9kZSktPnJlYWRkaXIoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgY3JlZCwgKmRlc2MtPmRpcl9jb29raWUsCiAJCQkJCQlwYWdlLAogCQkJCQkJTkZTX1NFUlZFUihpbm9kZSktPmR0c2l6ZSwKIAkJCQkJCWRlc2MtPnBsdXMpOwpAQCAtNTE2LDcgKzUxNiw3IEBACiAgKi8KIHN0YXRpYyBpbnQgbmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7Ci0Jc3RydWN0IGRlbnRyeQkqZGVudHJ5ID0gZmlscC0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeQkqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCW5mc19yZWFkZGlyX2Rlc2NyaXB0b3JfdCBteV9kZXNjLAogCQkJKmRlc2MgPSAmbXlfZGVzYzsKQEAgLTUzMiw3ICs1MzIsNyBAQAogCiAJbG9ja19rZXJuZWwoKTsKIAotCXJlcyA9IG5mc19yZXZhbGlkYXRlX21hcHBpbmcoaW5vZGUsIGZpbHAtPmZfbWFwcGluZyk7CisJcmVzID0gbmZzX3JldmFsaWRhdGVfbWFwcGluZ19ub2xvY2soaW5vZGUsIGZpbHAtPmZfbWFwcGluZyk7CiAJaWYgKHJlcyA8IDApIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gcmVzOwpAQCAtNTk5LDcgKzU5OSw3IEBACiAKIGxvZmZfdCBuZnNfbGxzZWVrX2RpcihzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKIHsKLQltdXRleF9sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9jaygmZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKIAkJY2FzZSAxOgogCQkJb2Zmc2V0ICs9IGZpbHAtPmZfcG9zOwpAQCAtNjE1LDcgKzYxNSw3IEBACiAJCSgoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKilmaWxwLT5wcml2YXRlX2RhdGEpLT5kaXJfY29va2llID0gMDsKIAl9CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gb2Zmc2V0OwogfQogCkBAIC0xMTAyLDcgKzExMDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmZzX3JlYWRkaXJfbG9va3VwKG5mc19yZWFkZGlyX2Rlc2NyaXB0b3JfdCAqZGVzYykKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZXNjLT5maWxlLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZXNjLT5maWxlLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqZGlyID0gcGFyZW50LT5kX2lub2RlOwogCXN0cnVjdCBuZnNfZW50cnkgKmVudHJ5ID0gZGVzYy0+ZW50cnk7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqYWxpYXM7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyZWN0LmMgYi9mcy9uZnMvZGlyZWN0LmMKaW5kZXggZjlkNjc4Zi4uYmQyMWQ3ZiAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtMTE2LDcgKzExNiw3IEBACiBzc2l6ZV90IG5mc19kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCiB7CiAJZHByaW50aygiTkZTOiBuZnNfZGlyZWN0X0lPICglcykgb2ZmL25vKCVMZC8lbHUpIEVJTlZBTFxuIiwKLQkJCWlvY2ItPmtpX2ZpbHAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCWlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lLAogCQkJKGxvbmcgbG9uZykgcG9zLCBucl9zZWdzKTsKIAogCXJldHVybiAtRUlOVkFMOwpAQCAtNzM0LDggKzczNCw4IEBACiAJc2l6ZV90IGNvdW50ID0gaW92WzBdLmlvdl9sZW47CiAKIAlkcHJpbnRrKCJuZnM6IGRpcmVjdCByZWFkKCVzLyVzLCAlbHVAJUxkKVxuIiwKLQkJZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwKLQkJZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAorCQlmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsCisJCWZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lLAogCQkodW5zaWduZWQgbG9uZykgY291bnQsIChsb25nIGxvbmcpIHBvcyk7CiAKIAlpZiAobnJfc2VncyAhPSAxKQpAQCAtNzk4LDggKzc5OCw4IEBACiAJc2l6ZV90IGNvdW50ID0gaW92WzBdLmlvdl9sZW47CiAKIAlkZnByaW50ayhWRlMsICJuZnM6IGRpcmVjdCB3cml0ZSglcy8lcywgJWx1QCVMZClcbiIsCi0JCWZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsCi0JCWZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLAorCQlmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJKHVuc2lnbmVkIGxvbmcpIGNvdW50LCAobG9uZyBsb25nKSBwb3MpOwogCiAJaWYgKG5yX3NlZ3MgIT0gMSkKZGlmZiAtLWdpdCBhL2ZzL25mcy9maWxlLmMgYi9mcy9uZnMvZmlsZS5jCmluZGV4IDhlMjhiZmYuLjllNGEyYjcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlLmMKKysrIGIvZnMvbmZzL2ZpbGUuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiBuZnNfZmlsZV9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCBpZCkKIHsKIAlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4ID0gKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQJCXN0YXR1czsKIAogCWRmcHJpbnRrKFZGUywgIm5mczogZmx1c2goJXMvJWxkKVxuIiwgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CkBAIC0yMDEsNyArMjAxLDcgQEAKIG5mc19maWxlX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewotCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBpb2NiLT5raV9maWxwLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gaW9jYi0+a2lfZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzc2l6ZV90IHJlc3VsdDsKIAlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CkBAIC0yMjYsNyArMjI2LDcgQEAKIG5mc19maWxlX3NlbmRmaWxlKHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3QgKnBwb3MsIHNpemVfdCBjb3VudCwKIAkJcmVhZF9hY3Rvcl90IGFjdG9yLCB2b2lkICp0YXJnZXQpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXNzaXplX3QgcmVzOwogCkBAIC0yNDMsNyArMjQzLDcgQEAKIHN0YXRpYyBpbnQKIG5mc19maWxlX21tYXAoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludAlzdGF0dXM7CiAKQEAgLTMxNSwxNCArMzE1LDEzIEBACiAKIHN0YXRpYyBpbnQgbmZzX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwKQogewotCS8qCi0JICogQXZvaWQgZGVhZGxvY2sgb24gbmZzX3dhaXRfb25fcmVxdWVzdCgpLgotCSAqLwotCWlmICghKGdmcCAmIF9fR0ZQX0ZTKSkKLQkJcmV0dXJuIDA7Ci0JLyogSGFjay4uLiBGb3JjZSBuZnNfd2JfcGFnZSgpIHRvIHdyaXRlIG91dCB0aGUgcGFnZSAqLwotCVNldFBhZ2VEaXJ0eShwYWdlKTsKLQlyZXR1cm4gIW5mc193Yl9wYWdlKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UpOworCS8qIElmIFBhZ2VQcml2YXRlKCkgaXMgc2V0LCB0aGVuIHRoZSBwYWdlIGlzIG5vdCBmcmVlYWJsZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5mc19sYXVuZGVyX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIG5mc193Yl9wYWdlKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UpOwogfQogCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5mc19maWxlX2FvcHMgPSB7CkBAIC0zMzgsMTIgKzMzNywxMyBAQAogI2lmZGVmIENPTkZJR19ORlNfRElSRUNUSU8KIAkuZGlyZWN0X0lPID0gbmZzX2RpcmVjdF9JTywKICNlbmRpZgorCS5sYXVuZGVyX3BhZ2UgPSBuZnNfbGF1bmRlcl9wYWdlLAogfTsKIAogc3RhdGljIHNzaXplX3QgbmZzX2ZpbGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IGlvY2ItPmtpX2ZpbHAtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXNzaXplX3QgcmVzdWx0OwogCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKQEAgLTQzNCw4ICs0MzQsOSBAQAogCQkJQlVHKCk7CiAJfQogCWlmIChyZXMgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVkZTIGlzIG91dCBvZiBzeW5jIHdpdGggbG9jayBtYW5hZ2VyIVxuIiwKLQkJCQlfX0ZVTkNUSU9OX18pOworCQlkcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFZGUyBpcyBvdXQgb2Ygc3luYyB3aXRoIGxvY2sgbWFuYWdlciIKKwkJCSIgLSBlcnJvciAlZCFcbiIsCisJCQkJX19GVU5DVElPTl9fLCByZXMpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTUzNSw4ICs1MzYsOCBAQAogc3RhdGljIGludCBuZnNfZmxvY2soc3RydWN0IGZpbGUgKmZpbHAsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQogewogCWRwcmludGsoIk5GUzogbmZzX2Zsb2NrKGY9JXMvJWxkLCB0PSV4LCBmbD0leClcbiIsCi0JCQlmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19pZCwKLQkJCWZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubywKKwkJCWZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfaWQsCisJCQlmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubywKIAkJCWZsLT5mbF90eXBlLCBmbC0+ZmxfZmxhZ3MpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9nZXRyb290LmMgYi9mcy9uZnMvZ2V0cm9vdC5jCmluZGV4IDIwYzZmMzkuLjgzOTFiZDcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9nZXRyb290LmMKKysrIGIvZnMvbmZzL2dldHJvb3QuYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25mc19pZG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+Ci0jaW5jbHVkZSA8bGludXgvbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9mcy9uZnMvaWRtYXAuYyBiL2ZzL25mcy9pZG1hcC5jCmluZGV4IDgyYWQ3MTEuLjlkNGE2YjIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pZG1hcC5jCisrKyBiL2ZzL25mcy9pZG1hcC5jCkBAIC0zNzcsNyArMzc3LDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBpZG1hcF9waXBlX2Rvd25jYWxsKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBzaXplX3QgbWxlbikKIHsKLSAgICAgICAgc3RydWN0IHJwY19pbm9kZSAqcnBjaSA9IFJQQ19JKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKyAgICAgICAgc3RydWN0IHJwY19pbm9kZSAqcnBjaSA9IFJQQ19JKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBpZG1hcCAqaWRtYXAgPSAoc3RydWN0IGlkbWFwICopcnBjaS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgaWRtYXBfbXNnIGltX2luLCAqaW0gPSAmaWRtYXAtPmlkbWFwX2ltOwogCXN0cnVjdCBpZG1hcF9oYXNodGFibGUgKmg7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IDM2NjgwZDEuLmQ4MzQ5ODIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC00OTYsNyArNDk2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgbmZzX2ZpbGVfc2V0X29wZW5fY29udGV4dChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKIAogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGdldF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7CkBAIC01MjgsNyArNTI4LDcgQEAKIAogc3RhdGljIHZvaWQgbmZzX2ZpbGVfY2xlYXJfb3Blbl9jb250ZXh0KHN0cnVjdCBmaWxlICpmaWxwKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4ID0gKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICopZmlscC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGN0eCkgewpAQCAtNTUxLDcgKzU1MSw3IEBACiAJY3JlZCA9IHJwY2F1dGhfbG9va3VwY3JlZChORlNfQ0xJRU5UKGlub2RlKS0+Y2xfYXV0aCwgMCk7CiAJaWYgKElTX0VSUihjcmVkKSkKIAkJcmV0dXJuIFBUUl9FUlIoY3JlZCk7Ci0JY3R4ID0gYWxsb2NfbmZzX29wZW5fY29udGV4dChmaWxwLT5mX3Zmc21udCwgZmlscC0+Zl9kZW50cnksIGNyZWQpOworCWN0eCA9IGFsbG9jX25mc19vcGVuX2NvbnRleHQoZmlscC0+Zl9wYXRoLm1udCwgZmlscC0+Zl9wYXRoLmRlbnRyeSwgY3JlZCk7CiAJcHV0X3JwY2NyZWQoY3JlZCk7CiAJaWYgKGN0eCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY2NSw0OSArNjY1LDg2IEBACiAJcmV0dXJuIF9fbmZzX3JldmFsaWRhdGVfaW5vZGUoc2VydmVyLCBpbm9kZSk7CiB9CiAKK3N0YXRpYyBpbnQgbmZzX2ludmFsaWRhdGVfbWFwcGluZ19ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKwkKKwlpZiAobWFwcGluZy0+bnJwYWdlcyAhPSAwKSB7CisJCWludCByZXQgPSBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMihtYXBwaW5nKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCW5mc2ktPmNhY2hlX3ZhbGlkaXR5ICY9IH5ORlNfSU5PX0lOVkFMSURfREFUQTsKKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQltZW1zZXQobmZzaS0+Y29va2lldmVyZiwgMCwgc2l6ZW9mKG5mc2ktPmNvb2tpZXZlcmYpKTsKKwkJLyogVGhpcyBlbnN1cmVzIHdlIHJldmFsaWRhdGUgY2hpbGQgZGVudHJpZXMgKi8KKwkJbmZzaS0+Y2FjaGVfY2hhbmdlX2F0dHJpYnV0ZSA9IGppZmZpZXM7CisJfQorCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfREFUQUlOVkFMSURBVEUpOworCWRmcHJpbnRrKFBBR0VDQUNIRSwgIk5GUzogKCVzLyVMZCkgZGF0YSBjYWNoZSBpbnZhbGlkYXRlZFxuIiwKKwkJCWlub2RlLT5pX3NiLT5zX2lkLCAobG9uZyBsb25nKU5GU19GSUxFSUQoaW5vZGUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZnNfaW52YWxpZGF0ZV9tYXBwaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCWlmIChORlNfSShpbm9kZSktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19JTlZBTElEX0RBVEEpIHsKKwkJcmV0ID0gbmZzX3N5bmNfbWFwcGluZyhtYXBwaW5nKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gbmZzX2ludmFsaWRhdGVfbWFwcGluZ19ub2xvY2soaW5vZGUsIG1hcHBpbmcpOworCX0KKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG5mc19yZXZhbGlkYXRlX21hcHBpbmdfbm9sb2NrIC0gUmV2YWxpZGF0ZSB0aGUgcGFnZWNhY2hlCisgKiBAaW5vZGUgLSBwb2ludGVyIHRvIGhvc3QgaW5vZGUKKyAqIEBtYXBwaW5nIC0gcG9pbnRlciB0byBtYXBwaW5nCisgKi8KK2ludCBuZnNfcmV2YWxpZGF0ZV9tYXBwaW5nX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCWludCByZXQgPSAwOworCisJaWYgKChuZnNpLT5jYWNoZV92YWxpZGl0eSAmIE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFKQorCQkJfHwgbmZzX2F0dHJpYnV0ZV90aW1lb3V0KGlub2RlKSB8fCBORlNfU1RBTEUoaW5vZGUpKSB7CisJCXJldCA9IF9fbmZzX3JldmFsaWRhdGVfaW5vZGUoTkZTX1NFUlZFUihpbm9kZSksIGlub2RlKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisJaWYgKG5mc2ktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19JTlZBTElEX0RBVEEpCisJCXJldCA9IG5mc19pbnZhbGlkYXRlX21hcHBpbmdfbm9sb2NrKGlub2RlLCBtYXBwaW5nKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiAvKioKICAqIG5mc19yZXZhbGlkYXRlX21hcHBpbmcgLSBSZXZhbGlkYXRlIHRoZSBwYWdlY2FjaGUKICAqIEBpbm9kZSAtIHBvaW50ZXIgdG8gaG9zdCBpbm9kZQogICogQG1hcHBpbmcgLSBwb2ludGVyIHRvIG1hcHBpbmcKKyAqCisgKiBUaGlzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIHdpbGwgdGFrZSB0aGUgaW5vZGUtPmlfbXV0ZXggYW5kIGF0dGVtcHQgdG8KKyAqIGZsdXNoIG91dCBhbGwgZGlydHkgZGF0YSBpZiBpdCBuZWVkcyB0byBpbnZhbGlkYXRlIHRoZSBwYWdlIGNhY2hlLgogICovCiBpbnQgbmZzX3JldmFsaWRhdGVfbWFwcGluZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOwogCWludCByZXQgPSAwOwogCi0JaWYgKE5GU19TVEFMRShpbm9kZSkpCi0JCXJldCA9IC1FU1RBTEU7CiAJaWYgKChuZnNpLT5jYWNoZV92YWxpZGl0eSAmIE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFKQotCQkJfHwgbmZzX2F0dHJpYnV0ZV90aW1lb3V0KGlub2RlKSkKKwkJCXx8IG5mc19hdHRyaWJ1dGVfdGltZW91dChpbm9kZSkgfHwgTkZTX1NUQUxFKGlub2RlKSkgewogCQlyZXQgPSBfX25mc19yZXZhbGlkYXRlX2lub2RlKE5GU19TRVJWRVIoaW5vZGUpLCBpbm9kZSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKG5mc2ktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19JTlZBTElEX0RBVEEpIHsKLQkJaWYgKG1hcHBpbmctPm5ycGFnZXMgIT0gMCkgewotCQkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCQlyZXQgPSBuZnNfc3luY19tYXBwaW5nKG1hcHBpbmcpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXJldCA9IGludmFsaWRhdGVfaW5vZGVfcGFnZXMyKG1hcHBpbmcpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgJj0gfk5GU19JTk9fSU5WQUxJRF9EQVRBOwotCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQkJbWVtc2V0KG5mc2ktPmNvb2tpZXZlcmYsIDAsIHNpemVvZihuZnNpLT5jb29raWV2ZXJmKSk7Ci0JCQkvKiBUaGlzIGVuc3VyZXMgd2UgcmV2YWxpZGF0ZSBjaGlsZCBkZW50cmllcyAqLwotCQkJbmZzaS0+Y2FjaGVfY2hhbmdlX2F0dHJpYnV0ZSA9IGppZmZpZXM7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCi0JCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19EQVRBSU5WQUxJREFURSk7Ci0JCWRmcHJpbnRrKFBBR0VDQUNIRSwgIk5GUzogKCVzLyVMZCkgZGF0YSBjYWNoZSBpbnZhbGlkYXRlZFxuIiwKLQkJCQlpbm9kZS0+aV9zYi0+c19pZCwKLQkJCQkobG9uZyBsb25nKU5GU19GSUxFSUQoaW5vZGUpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKIAl9CisJaWYgKG5mc2ktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19JTlZBTElEX0RBVEEpCisJCXJldCA9IG5mc19pbnZhbGlkYXRlX21hcHBpbmcoaW5vZGUsIG1hcHBpbmcpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3Byb2MuYyBiL2ZzL25mcy9uZnMzcHJvYy5jCmluZGV4IDUxMGFlNTIuLmFjZDhmZTkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzcHJvYy5jCisrKyBiL2ZzL25mcy9uZnMzcHJvYy5jCkBAIC04NDEsNyArODQxLDcgQEAKIHN0YXRpYyBpbnQKIG5mczNfcHJvY19sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKIHsKLQlyZXR1cm4gbmxtY2xudF9wcm9jKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLCBjbWQsIGZsKTsKKwlyZXR1cm4gbmxtY2xudF9wcm9jKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGNtZCwgZmwpOwogfQogCiBjb25zdCBzdHJ1Y3QgbmZzX3JwY19vcHMgbmZzX3YzX2NsaWVudG9wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggZWU0NThhZS4uYjNmZDI5YiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTE4NzcsNyArMTg3Nyw3IEBACiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoZGlyLT5kX2lub2RlKTsKIAlzdHJ1Y3QgdW5saW5rX2Rlc2MgKnVwOwogCi0JdXAgPSAoc3RydWN0IHVubGlua19kZXNjICopIGttYWxsb2Moc2l6ZW9mKCp1cCksIEdGUF9LRVJORUwpOworCXVwID0ga21hbGxvYyhzaXplb2YoKnVwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1cCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJCmRpZmYgLS1naXQgYS9mcy9uZnMvcHJvYy5jIGIvZnMvbmZzL3Byb2MuYwppbmRleCAxMGY1ZTgwLi41NjA1MzZhIDEwMDY0NAotLS0gYS9mcy9uZnMvcHJvYy5jCisrKyBiL2ZzL25mcy9wcm9jLmMKQEAgLTY1MSw3ICs2NTEsNyBAQAogc3RhdGljIGludAogbmZzX3Byb2NfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCiB7Ci0JcmV0dXJuIG5sbWNsbnRfcHJvYyhmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSwgY21kLCBmbCk7CisJcmV0dXJuIG5sbWNsbnRfcHJvYyhmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCBjbWQsIGZsKTsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy9uZnMvc3ltbGluay5jIGIvZnMvbmZzL3N5bWxpbmsuYwppbmRleCA2YzY4NjExLi41MjVjMTM2IDEwMDY0NAotLS0gYS9mcy9uZnMvc3ltbGluay5jCisrKyBiL2ZzL25mcy9zeW1saW5rLmMKQEAgLTUwLDcgKzUwLDkgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXZvaWQgKmVyciA9IEVSUl9QVFIobmZzX3JldmFsaWRhdGVfbWFwcGluZyhpbm9kZSwgaW5vZGUtPmlfbWFwcGluZykpOworCXZvaWQgKmVycjsKKworCWVyciA9IEVSUl9QVFIobmZzX3JldmFsaWRhdGVfbWFwcGluZ19ub2xvY2soaW5vZGUsIGlub2RlLT5pX21hcHBpbmcpKTsKIAlpZiAoZXJyKQogCQlnb3RvIHJlYWRfZmFpbGVkOwogCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UoJmlub2RlLT5pX2RhdGEsIDAsCmRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93cml0ZS5jCmluZGV4IDU5NGViMTYuLjM0NTQ5MmUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy93cml0ZS5jCisrKyBiL2ZzL25mcy93cml0ZS5jCkBAIC03NTQsOCArNzU0LDggQEAKIAluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfVkZTVVBEQVRFUEFHRSk7CiAKIAlkcHJpbnRrKCJORlM6ICAgICAgbmZzX3VwZGF0ZXBhZ2UoJXMvJXMgJWRAJUxkKVxuIiwKLQkJZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwKLQkJZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLCBjb3VudCwKKwkJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLAorCQlmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSwgY291bnQsCiAJCShsb25nIGxvbmcpKHBhZ2Vfb2Zmc2V0KHBhZ2UpICtvZmZzZXQpKTsKIAogCS8qIElmIHdlJ3JlIG5vdCB1c2luZyBieXRlIHJhbmdlIGxvY2tzLCBhbmQgd2Uga25vdyB0aGUgcGFnZQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9leHBvcnQuYyBiL2ZzL25mc2QvZXhwb3J0LmMKaW5kZXggZjM3ZGY0Ni4uNDljMzEwYiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9leHBvcnQuYworKysgYi9mcy9uZnNkL2V4cG9ydC5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbG9ja2QvYmluZC5oPgogCiAjZGVmaW5lIE5GU0REQkdfRkFDSUxJVFkJTkZTRERCR19FWFBPUlQKLSNkZWZpbmUgTkZTRF9QQVJBTk9JQSAxCiAKIHR5cGVkZWYgc3RydWN0IGF1dGhfZG9tYWluCXN2Y19jbGllbnQ7CiB0eXBlZGVmIHN0cnVjdCBzdmNfZXhwb3J0CXN2Y19leHBvcnQ7CkBAIC03ODcsMTUgKzc4NiwyMCBAQAogCWtleS5leF9kZW50cnkgPSBkZW50cnk7CiAKIAlleHAgPSBzdmNfZXhwb3J0X2xvb2t1cCgma2V5KTsKLQlpZiAoZXhwICE9IE5VTEwpIAotCQlzd2l0Y2ggKGNhY2hlX2NoZWNrKCZzdmNfZXhwb3J0X2NhY2hlLCAmZXhwLT5oLCByZXFwKSkgeworCWlmIChleHAgIT0gTlVMTCkgIHsKKwkJaW50IGVycjsKKworCQllcnIgPSBjYWNoZV9jaGVjaygmc3ZjX2V4cG9ydF9jYWNoZSwgJmV4cC0+aCwgcmVxcCk7CisJCXN3aXRjaCAoZXJyKSB7CiAJCWNhc2UgMDogYnJlYWs7CiAJCWNhc2UgLUVBR0FJTjoKLQkJCWV4cCA9IEVSUl9QVFIoLUVBR0FJTik7CisJCWNhc2UgLUVUSU1FRE9VVDoKKwkJCWV4cCA9IEVSUl9QVFIoZXJyKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXhwID0gTlVMTDsKIAkJfQorCX0KIAogCXJldHVybiBleHA7CiB9CkBAIC05NTAsNiArOTU0LDggQEAKIAogCWV4cCA9IGV4cF9nZXRfYnlfbmFtZShjbHAsIG5kLm1udCwgbmQuZGVudHJ5LCBOVUxMKTsKIAorCW1lbXNldCgmbmV3LCAwLCBzaXplb2YobmV3KSk7CisKIAkvKiBtdXN0IG1ha2Ugc3VyZSB0aGVyZSB3b24ndCBiZSBhbiBleF9mc2lkIGNsYXNoICovCiAJaWYgKChueHAtPmV4X2ZsYWdzICYgTkZTRVhQX0ZTSUQpICYmCiAJICAgIChmc2lkX2tleSA9IGV4cF9nZXRfZnNpZF9rZXkoY2xwLCBueHAtPmV4X2RldikpICYmCkBAIC05ODAsNiArOTg2LDkgQEAKIAogCW5ldy5oLmV4cGlyeV90aW1lID0gTkVWRVI7CiAJbmV3LmguZmxhZ3MgPSAwOworCW5ldy5leF9wYXRoID0ga3N0cmR1cChueHAtPmV4X3BhdGgsIEdGUF9LRVJORUwpOworCWlmICghbmV3LmV4X3BhdGgpCisJCWdvdG8gZmluaXNoOwogCW5ldy5leF9jbGllbnQgPSBjbHA7CiAJbmV3LmV4X21udCA9IG5kLm1udDsKIAluZXcuZXhfZGVudHJ5ID0gbmQuZGVudHJ5OwpAQCAtMTAwMCwxMCArMTAwOSwxMSBAQAogCQkvKiBmYWlsZWQgdG8gY3JlYXRlIGF0IGxlYXN0IG9uZSBpbmRleCAqLwogCQlleHBfZG9fdW5leHBvcnQoZXhwKTsKIAkJY2FjaGVfZmx1c2goKTsKLQkJZXJyID0gLUVOT01FTTsKLQl9Ci0KKwl9IGVsc2UKKwkJZXJyID0gMDsKIGZpbmlzaDoKKwlpZiAobmV3LmV4X3BhdGgpCisJCWtmcmVlKG5ldy5leF9wYXRoKTsKIAlpZiAoZXhwKQogCQlleHBfcHV0KGV4cCk7CiAJaWYgKGZzaWRfa2V5ICYmICFJU19FUlIoZnNpZF9rZXkpKQpAQCAtMTEwNCw2ICsxMTE0LDEwIEBACiAJCSBwYXRoLCBuZC5kZW50cnksIGNscC0+bmFtZSwKIAkJIGlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8pOwogCWV4cCA9IGV4cF9wYXJlbnQoY2xwLCBuZC5tbnQsIG5kLmRlbnRyeSwgTlVMTCk7CisJaWYgKElTX0VSUihleHApKSB7CisJCWVyciA9IFBUUl9FUlIoZXhwKTsKKwkJZ290byBvdXQ7CisJfQogCWlmICghZXhwKSB7CiAJCWRwcmludGsoIm5mc2Q6IGV4cF9yb290ZmggZXhwb3J0IG5vdCBmb3VuZC5cbiIpOwogCQlnb3RvIG91dDsKQEAgLTExNTksMTIgKzExNzMsMTAgQEAKIAlta19mc2lkX3YxKGZzaWR2LCAwKTsKIAogCWV4cCA9IGV4cF9maW5kKGNscCwgMSwgZnNpZHYsIGNyZXEpOwotCWlmIChJU19FUlIoZXhwKSAmJiBQVFJfRVJSKGV4cCkgPT0gLUVBR0FJTikKLQkJcmV0dXJuIG5mc2Vycl9kcm9waXQ7CisJaWYgKElTX0VSUihleHApKQorCQlyZXR1cm4gbmZzZXJybm8oUFRSX0VSUihleHApKTsKIAlpZiAoZXhwID09IE5VTEwpCiAJCXJldHVybiBuZnNlcnJfcGVybTsKLQllbHNlIGlmIChJU19FUlIoZXhwKSkKLQkJcmV0dXJuIG5mc2Vycm5vKFBUUl9FUlIoZXhwKSk7CiAJcnYgPSBmaF9jb21wb3NlKGZocCwgZXhwLCBleHAtPmV4X2RlbnRyeSwgTlVMTCk7CiAJZXhwX3B1dChleHApOwogCXJldHVybiBydjsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbG9ja2QuYyBiL2ZzL25mc2QvbG9ja2QuYwppbmRleCAxMWZkYWY3Li4yMjFhY2QxIDEwMDY0NAotLS0gYS9mcy9uZnNkL2xvY2tkLmMKKysrIGIvZnMvbmZzZC9sb2NrZC5jCkBAIC0yMiw3ICsyMiw3IEBACiAvKgogICogTm90ZTogd2UgaG9sZCB0aGUgZGVudHJ5IHVzZSBjb3VudCB3aGlsZSB0aGUgZmlsZSBpcyBvcGVuLgogICovCi1zdGF0aWMgdTMyCitzdGF0aWMgX19iZTMyCiBubG1fZm9wZW4oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc19maCAqZiwgc3RydWN0IGZpbGUgKipmaWxwKQogewogCV9fYmUzMgkJbmZzZXJyOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnMyYWNsLmMgYi9mcy9uZnNkL25mczJhY2wuYwppbmRleCBlM2VjYTA4Li5lZGRlNWRjIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczJhY2wuYworKysgYi9mcy9uZnNkL25mczJhY2wuYwpAQCAtMjIyLDEyICsyMjIsMTAgQEAKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSByZXNwLT5maC5maF9kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgdyA9IG5mc2FjbF9zaXplKAotCQkocmVzcC0+bWFzayAmIE5GU19BQ0wpICAgPyByZXNwLT5hY2xfYWNjZXNzICA6IE5VTEwsCi0JCShyZXNwLT5tYXNrICYgTkZTX0RGQUNMKSA/IHJlc3AtPmFjbF9kZWZhdWx0IDogTlVMTCk7CiAJc3RydWN0IGt2ZWMgKmhlYWQgPSBycXN0cC0+cnFfcmVzLmhlYWQ7CiAJdW5zaWduZWQgaW50IGJhc2U7CiAJaW50IG47CisJaW50IHc7CiAKIAlpZiAoZGVudHJ5ID09IE5VTEwgfHwgZGVudHJ5LT5kX2lub2RlID09IE5VTEwpCiAJCXJldHVybiAwOwpAQCAtMjM5LDcgKzIzNyw5IEBACiAJCXJldHVybiAwOwogCWJhc2UgPSAoY2hhciAqKXAgLSAoY2hhciAqKWhlYWQtPmlvdl9iYXNlOwogCi0JcnFzdHAtPnJxX3Jlcy5wYWdlX2xlbiA9IHc7CisJcnFzdHAtPnJxX3Jlcy5wYWdlX2xlbiA9IHcgPSBuZnNhY2xfc2l6ZSgKKwkJKHJlc3AtPm1hc2sgJiBORlNfQUNMKSAgID8gcmVzcC0+YWNsX2FjY2VzcyAgOiBOVUxMLAorCQkocmVzcC0+bWFzayAmIE5GU19ERkFDTCkgPyByZXNwLT5hY2xfZGVmYXVsdCA6IE5VTEwpOwogCXdoaWxlICh3ID4gMCkgewogCQlpZiAoIXJxc3RwLT5ycV9yZXNwYWdlc1tycXN0cC0+cnFfcmVzdXNlZCsrXSkKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnMzYWNsLmMgYi9mcy9uZnNkL25mczNhY2wuYwppbmRleCBmY2FkMjg5Li4zZTNmMmRlIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczNhY2wuYworKysgYi9mcy9uZnNkL25mczNhY2wuYwpAQCAtMTcxLDE5ICsxNzEsMTkgQEAKIAlwID0gbmZzM3N2Y19lbmNvZGVfcG9zdF9vcF9hdHRyKHJxc3RwLCBwLCAmcmVzcC0+ZmgpOwogCWlmIChyZXNwLT5zdGF0dXMgPT0gMCAmJiBkZW50cnkgJiYgZGVudHJ5LT5kX2lub2RlKSB7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JCWludCB3ID0gbmZzYWNsX3NpemUoCi0JCQkocmVzcC0+bWFzayAmIE5GU19BQ0wpICAgPyByZXNwLT5hY2xfYWNjZXNzICA6IE5VTEwsCi0JCQkocmVzcC0+bWFzayAmIE5GU19ERkFDTCkgPyByZXNwLT5hY2xfZGVmYXVsdCA6IE5VTEwpOwogCQlzdHJ1Y3Qga3ZlYyAqaGVhZCA9IHJxc3RwLT5ycV9yZXMuaGVhZDsKIAkJdW5zaWduZWQgaW50IGJhc2U7CiAJCWludCBuOworCQlpbnQgdzsKIAogCQkqcCsrID0gaHRvbmwocmVzcC0+bWFzayk7CiAJCWlmICgheGRyX3Jlc3NpemVfY2hlY2socnFzdHAsIHApKQogCQkJcmV0dXJuIDA7CiAJCWJhc2UgPSAoY2hhciAqKXAgLSAoY2hhciAqKWhlYWQtPmlvdl9iYXNlOwogCi0JCXJxc3RwLT5ycV9yZXMucGFnZV9sZW4gPSB3OworCQlycXN0cC0+cnFfcmVzLnBhZ2VfbGVuID0gdyA9IG5mc2FjbF9zaXplKAorCQkJKHJlc3AtPm1hc2sgJiBORlNfQUNMKSAgID8gcmVzcC0+YWNsX2FjY2VzcyAgOiBOVUxMLAorCQkJKHJlc3AtPm1hc2sgJiBORlNfREZBQ0wpID8gcmVzcC0+YWNsX2RlZmF1bHQgOiBOVUxMKTsKIAkJd2hpbGUgKHcgPiAwKSB7CiAJCQlpZiAoIXJxc3RwLT5ycV9yZXNwYWdlc1tycXN0cC0+cnFfcmVzdXNlZCsrXSkKIAkJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzM3hkci5jIGIvZnMvbmZzZC9uZnMzeGRyLmMKaW5kZXggMjc3ZGY0MC4uZTY5NTY2MCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnMzeGRyLmMKKysrIGIvZnMvbmZzZC9uZnMzeGRyLmMKQEAgLTk5MCwxNSArOTkwLDE2IEBACiB9CiAKIGludAotbmZzM3N2Y19lbmNvZGVfZW50cnkoc3RydWN0IHJlYWRkaXJfY2QgKmNkLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgIGludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIGlub190IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKK25mczNzdmNfZW5jb2RlX2VudHJ5KHZvaWQgKmNkLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgIGludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCiB7CiAJcmV0dXJuIGVuY29kZV9lbnRyeShjZCwgbmFtZSwgbmFtbGVuLCBvZmZzZXQsIGlubywgZF90eXBlLCAwKTsKIH0KIAogaW50Ci1uZnMzc3ZjX2VuY29kZV9lbnRyeV9wbHVzKHN0cnVjdCByZWFkZGlyX2NkICpjZCwgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgaW50IG5hbWxlbiwgbG9mZl90IG9mZnNldCwgaW5vX3QgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQorbmZzM3N2Y19lbmNvZGVfZW50cnlfcGx1cyh2b2lkICpjZCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgaW50IG5hbWxlbiwgbG9mZl90IG9mZnNldCwgdTY0IGlubywKKwkJCSAgdW5zaWduZWQgaW50IGRfdHlwZSkKIHsKIAlyZXR1cm4gZW5jb2RlX2VudHJ5KGNkLCBuYW1lLCBuYW1sZW4sIG9mZnNldCwgaW5vLCBkX3R5cGUsIDEpOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0cHJvYy5jIGIvZnMvbmZzZC9uZnM0cHJvYy5jCmluZGV4IDUwYmM5NDIuLjg1MjI3MjkgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHByb2MuYworKysgYi9mcy9uZnNkL25mczRwcm9jLmMKQEAgLTMzLDEzICszMyw2IEBACiAgKiAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKICAqICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICAqICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBOb3RlOiBzb21lIHJvdXRpbmVzIGluIHRoaXMgZmlsZSBhcmUganVzdCB0cml2aWFsIHdyYXBwZXJzCi0gKiAoZS5nLiBuZnNkNF9sb29rdXAoKSkgZGVmaW5lZCBzb2xlbHkgZm9yIHRoZSBzYWtlIG9mIGNvbnNpc3RlbnQKLSAqIG5hbWluZy4gIFNpbmNlIGFsbCBzdWNoIHJvdXRpbmVzIGhhdmUgYmVlbiBkZWNsYXJlZCAiaW5saW5lIiwKLSAqIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgYXNzb2NpYXRlZCBvdmVyaGVhZC4gIEF0IHNvbWUgcG9pbnQgaW4KLSAqIHRoZSBmdXR1cmUsIEkgbWlnaHQgaW5saW5lIHRoZXNlICJieSBoYW5kIiB0byBjbGVhbiB1cCBhCi0gKiBsaXR0bGUuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CkBAIC0xNjEsOCArMTU0LDkgQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIF9fYmUzMgotbmZzZDRfb3BlbihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfb3BlbiAqb3Blbiwgc3RydWN0IG5mczRfc3RhdGVvd25lciAqKnJlcGxheV9vd25lcikKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X29wZW4oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pCiB7CiAJX19iZTMyIHN0YXR1czsKIAlkcHJpbnRrKCJORlNEOiBuZnNkNF9vcGVuIGZpbGVuYW1lICUuKnMgb3Bfc3RhdGVvd25lciAlcFxuIiwKQEAgLTE3OSwxMSArMTczLDExIEBACiAJc3RhdHVzID0gbmZzZDRfcHJvY2Vzc19vcGVuMShvcGVuKTsKIAlpZiAoc3RhdHVzID09IG5mc2Vycl9yZXBsYXlfbWUpIHsKIAkJc3RydWN0IG5mczRfcmVwbGF5ICpycCA9ICZvcGVuLT5vcF9zdGF0ZW93bmVyLT5zb19yZXBsYXk7Ci0JCWZoX3B1dChjdXJyZW50X2ZoKTsKLQkJY3VycmVudF9maC0+ZmhfaGFuZGxlLmZoX3NpemUgPSBycC0+cnBfb3BlbmZoX2xlbjsKLQkJbWVtY3B5KCZjdXJyZW50X2ZoLT5maF9oYW5kbGUuZmhfYmFzZSwgcnAtPnJwX29wZW5maCwKKwkJZmhfcHV0KCZjc3RhdGUtPmN1cnJlbnRfZmgpOworCQljc3RhdGUtPmN1cnJlbnRfZmguZmhfaGFuZGxlLmZoX3NpemUgPSBycC0+cnBfb3BlbmZoX2xlbjsKKwkJbWVtY3B5KCZjc3RhdGUtPmN1cnJlbnRfZmguZmhfaGFuZGxlLmZoX2Jhc2UsIHJwLT5ycF9vcGVuZmgsCiAJCQkJcnAtPnJwX29wZW5maF9sZW4pOwotCQlzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsIGN1cnJlbnRfZmgsIDAsIE1BWV9OT1ApOworCQlzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsIDAsIE1BWV9OT1ApOwogCQlpZiAoc3RhdHVzKQogCQkJZHByaW50aygibmZzZDRfb3BlbjogcmVwbGF5IGZhaWxlZCIKIAkJCQkiIHJlc3RvcmluZyBwcmV2aW91cyBmaWxlaGFuZGxlXG4iKTsKQEAgLTIxNSw3ICsyMDksOCBAQAogCQkJICogKDMpIHNldCBvcGVuLT5vcF90cnVuY2F0ZSBpZiB0aGUgZmlsZSBpcyB0byBiZQogCQkJICogdHJ1bmNhdGVkIGFmdGVyIG9wZW5pbmcsICg0KSBkbyBwZXJtaXNzaW9uIGNoZWNraW5nLgogCQkJICovCi0JCQlzdGF0dXMgPSBkb19vcGVuX2xvb2t1cChycXN0cCwgY3VycmVudF9maCwgb3Blbik7CisJCQlzdGF0dXMgPSBkb19vcGVuX2xvb2t1cChycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwKKwkJCQkJCW9wZW4pOwogCQkJaWYgKHN0YXR1cykKIAkJCQlnb3RvIG91dDsKIAkJCWJyZWFrOwpAQCAtMjI3LDcgKzIyMiw4IEBACiAJCQkgKiBvcGVuLT5vcF90cnVuY2F0ZSBpZiB0aGUgZmlsZSBpcyB0byBiZSB0cnVuY2F0ZWQKIAkJCSAqIGFmdGVyIG9wZW5pbmcsICgzKSBkbyBwZXJtaXNzaW9uIGNoZWNraW5nLgogCQkJKi8KLQkJCXN0YXR1cyA9IGRvX29wZW5fZmhhbmRsZShycXN0cCwgY3VycmVudF9maCwgb3Blbik7CisJCQlzdGF0dXMgPSBkb19vcGVuX2ZoYW5kbGUocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsCisJCQkJCQkgb3Blbik7CiAJCQlpZiAoc3RhdHVzKQogCQkJCWdvdG8gb3V0OwogCQkJYnJlYWs7CkBAIC0yNDgsMTEgKzI0NCwxMSBAQAogCSAqIHN1Y2Nlc3NmdWwsIGl0ICgxKSB0cnVuY2F0ZXMgdGhlIGZpbGUgaWYgb3Blbi0+b3BfdHJ1bmNhdGUgd2FzCiAJICogc2V0LCAoMikgc2V0cyBvcGVuLT5vcF9zdGF0ZWlkLCAoMykgc2V0cyBvcGVuLT5vcF9kZWxlZ2F0aW9uLgogCSAqLwotCXN0YXR1cyA9IG5mc2Q0X3Byb2Nlc3Nfb3BlbjIocnFzdHAsIGN1cnJlbnRfZmgsIG9wZW4pOworCXN0YXR1cyA9IG5mc2Q0X3Byb2Nlc3Nfb3BlbjIocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsIG9wZW4pOwogb3V0OgogCWlmIChvcGVuLT5vcF9zdGF0ZW93bmVyKSB7CiAJCW5mczRfZ2V0X3N0YXRlb3duZXIob3Blbi0+b3Bfc3RhdGVvd25lcik7Ci0JCSpyZXBsYXlfb3duZXIgPSBvcGVuLT5vcF9zdGF0ZW93bmVyOworCQljc3RhdGUtPnJlcGxheV9vd25lciA9IG9wZW4tPm9wX3N0YXRlb3duZXI7CiAJfQogCW5mczRfdW5sb2NrX3N0YXRlKCk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTI2MSw3MSArMjU3LDgwIEBACiAvKgogICogZmlsZWhhbmRsZS1tYW5pcHVsYXRpbmcgb3BzLgogICovCi1zdGF0aWMgaW5saW5lIF9fYmUzMgotbmZzZDRfZ2V0Zmgoc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IHN2Y19maCAqKmdldGZoKQorc3RhdGljIF9fYmUzMgorbmZzZDRfZ2V0Zmgoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgIHN0cnVjdCBzdmNfZmggKipnZXRmaCkKIHsKLQlpZiAoIWN1cnJlbnRfZmgtPmZoX2RlbnRyeSkKKwlpZiAoIWNzdGF0ZS0+Y3VycmVudF9maC5maF9kZW50cnkpCiAJCXJldHVybiBuZnNlcnJfbm9maWxlaGFuZGxlOwogCi0JKmdldGZoID0gY3VycmVudF9maDsKKwkqZ2V0ZmggPSAmY3N0YXRlLT5jdXJyZW50X2ZoOwogCXJldHVybiBuZnNfb2s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyCi1uZnNkNF9wdXRmaChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfcHV0ZmggKnB1dGZoKQorc3RhdGljIF9fYmUzMgorbmZzZDRfcHV0Zmgoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgIHN0cnVjdCBuZnNkNF9wdXRmaCAqcHV0ZmgpCiB7Ci0JZmhfcHV0KGN1cnJlbnRfZmgpOwotCWN1cnJlbnRfZmgtPmZoX2hhbmRsZS5maF9zaXplID0gcHV0ZmgtPnBmX2ZobGVuOwotCW1lbWNweSgmY3VycmVudF9maC0+ZmhfaGFuZGxlLmZoX2Jhc2UsIHB1dGZoLT5wZl9maHZhbCwgcHV0ZmgtPnBmX2ZobGVuKTsKLQlyZXR1cm4gZmhfdmVyaWZ5KHJxc3RwLCBjdXJyZW50X2ZoLCAwLCBNQVlfTk9QKTsKKwlmaF9wdXQoJmNzdGF0ZS0+Y3VycmVudF9maCk7CisJY3N0YXRlLT5jdXJyZW50X2ZoLmZoX2hhbmRsZS5maF9zaXplID0gcHV0ZmgtPnBmX2ZobGVuOworCW1lbWNweSgmY3N0YXRlLT5jdXJyZW50X2ZoLmZoX2hhbmRsZS5maF9iYXNlLCBwdXRmaC0+cGZfZmh2YWwsCisJICAgICAgIHB1dGZoLT5wZl9maGxlbik7CisJcmV0dXJuIGZoX3ZlcmlmeShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgMCwgTUFZX05PUCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyCi1uZnNkNF9wdXRyb290Zmgoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCkKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X3B1dHJvb3RmaChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSwKKwkJdm9pZCAqYXJnKQogewogCV9fYmUzMiBzdGF0dXM7CiAKLQlmaF9wdXQoY3VycmVudF9maCk7Ci0Jc3RhdHVzID0gZXhwX3BzZXVkb3Jvb3QocnFzdHAtPnJxX2NsaWVudCwgY3VycmVudF9maCwKKwlmaF9wdXQoJmNzdGF0ZS0+Y3VycmVudF9maCk7CisJc3RhdHVzID0gZXhwX3BzZXVkb3Jvb3QocnFzdHAtPnJxX2NsaWVudCwgJmNzdGF0ZS0+Y3VycmVudF9maCwKIAkJCSAgICAgICZycXN0cC0+cnFfY2hhbmRsZSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIKLW5mc2Q0X3Jlc3RvcmVmaChzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3Qgc3ZjX2ZoICpzYXZlX2ZoKQorc3RhdGljIF9fYmUzMgorbmZzZDRfcmVzdG9yZWZoKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAorCQl2b2lkICphcmcpCiB7Ci0JaWYgKCFzYXZlX2ZoLT5maF9kZW50cnkpCisJaWYgKCFjc3RhdGUtPnNhdmVfZmguZmhfZGVudHJ5KQogCQlyZXR1cm4gbmZzZXJyX3Jlc3RvcmVmaDsKIAotCWZoX2R1cDIoY3VycmVudF9maCwgc2F2ZV9maCk7CisJZmhfZHVwMigmY3N0YXRlLT5jdXJyZW50X2ZoLCAmY3N0YXRlLT5zYXZlX2ZoKTsKIAlyZXR1cm4gbmZzX29rOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMgotbmZzZDRfc2F2ZWZoKHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBzdmNfZmggKnNhdmVfZmgpCitzdGF0aWMgX19iZTMyCituZnNkNF9zYXZlZmgoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgICB2b2lkICphcmcpCiB7Ci0JaWYgKCFjdXJyZW50X2ZoLT5maF9kZW50cnkpCisJaWYgKCFjc3RhdGUtPmN1cnJlbnRfZmguZmhfZGVudHJ5KQogCQlyZXR1cm4gbmZzZXJyX25vZmlsZWhhbmRsZTsKIAotCWZoX2R1cDIoc2F2ZV9maCwgY3VycmVudF9maCk7CisJZmhfZHVwMigmY3N0YXRlLT5zYXZlX2ZoLCAmY3N0YXRlLT5jdXJyZW50X2ZoKTsKIAlyZXR1cm4gbmZzX29rOwogfQogCiAvKgogICogbWlzYyBuZnN2NCBvcHMKICAqLwotc3RhdGljIGlubGluZSBfX2JlMzIKLW5mc2Q0X2FjY2VzcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfYWNjZXNzICphY2Nlc3MpCitzdGF0aWMgX19iZTMyCituZnNkNF9hY2Nlc3Moc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgICBzdHJ1Y3QgbmZzZDRfYWNjZXNzICphY2Nlc3MpCiB7CiAJaWYgKGFjY2Vzcy0+YWNfcmVxX2FjY2VzcyAmIH5ORlMzX0FDQ0VTU19GVUxMKQogCQlyZXR1cm4gbmZzZXJyX2ludmFsOwogCiAJYWNjZXNzLT5hY19yZXNwX2FjY2VzcyA9IGFjY2Vzcy0+YWNfcmVxX2FjY2VzczsKLQlyZXR1cm4gbmZzZF9hY2Nlc3MocnFzdHAsIGN1cnJlbnRfZmgsICZhY2Nlc3MtPmFjX3Jlc3BfYWNjZXNzLCAmYWNjZXNzLT5hY19zdXBwb3J0ZWQpOworCXJldHVybiBuZnNkX2FjY2VzcyhycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgJmFjY2Vzcy0+YWNfcmVzcF9hY2Nlc3MsCisJCQkgICAmYWNjZXNzLT5hY19zdXBwb3J0ZWQpOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMgotbmZzZDRfY29tbWl0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9jb21taXQgKmNvbW1pdCkKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X2NvbW1pdChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSwKKwkgICAgIHN0cnVjdCBuZnNkNF9jb21taXQgKmNvbW1pdCkKIHsKIAlfX2JlMzIgc3RhdHVzOwogCkBAIC0zMzMsMTQgKzMzOCwxNiBAQAogCSpwKysgPSBuZnNzdmNfYm9vdC50dl9zZWM7CiAJKnArKyA9IG5mc3N2Y19ib290LnR2X3VzZWM7CiAKLQlzdGF0dXMgPSBuZnNkX2NvbW1pdChycXN0cCwgY3VycmVudF9maCwgY29tbWl0LT5jb19vZmZzZXQsIGNvbW1pdC0+Y29fY291bnQpOworCXN0YXR1cyA9IG5mc2RfY29tbWl0KHJxc3RwLCAmY3N0YXRlLT5jdXJyZW50X2ZoLCBjb21taXQtPmNvX29mZnNldCwKKwkJCSAgICAgY29tbWl0LT5jb19jb3VudCk7CiAJaWYgKHN0YXR1cyA9PSBuZnNlcnJfc3ltbGluaykKIAkJc3RhdHVzID0gbmZzZXJyX2ludmFsOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBfX2JlMzIKLW5mc2Q0X2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfY3JlYXRlICpjcmVhdGUpCituZnNkNF9jcmVhdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgICBzdHJ1Y3QgbmZzZDRfY3JlYXRlICpjcmVhdGUpCiB7CiAJc3RydWN0IHN2Y19maCByZXNmaDsKIAlfX2JlMzIgc3RhdHVzOwpAQCAtMzQ4LDcgKzM1NSw3IEBACiAKIAlmaF9pbml0KCZyZXNmaCwgTkZTNF9GSFNJWkUpOwogCi0Jc3RhdHVzID0gZmhfdmVyaWZ5KHJxc3RwLCBjdXJyZW50X2ZoLCBTX0lGRElSLCBNQVlfQ1JFQVRFKTsKKwlzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsIFNfSUZESVIsIE1BWV9DUkVBVEUpOwogCWlmIChzdGF0dXMgPT0gbmZzZXJyX3N5bWxpbmspCiAJCXN0YXR1cyA9IG5mc2Vycl9ub3RkaXI7CiAJaWYgKHN0YXR1cykKQEAgLTM2NSw5ICszNzIsMTAgQEAKIAkJICovCiAJCWNyZWF0ZS0+Y3JfbGlua25hbWVbY3JlYXRlLT5jcl9saW5rbGVuXSA9IDA7CiAKLQkJc3RhdHVzID0gbmZzZF9zeW1saW5rKHJxc3RwLCBjdXJyZW50X2ZoLCBjcmVhdGUtPmNyX25hbWUsCi0JCQkJICAgICAgY3JlYXRlLT5jcl9uYW1lbGVuLCBjcmVhdGUtPmNyX2xpbmtuYW1lLAotCQkJCSAgICAgIGNyZWF0ZS0+Y3JfbGlua2xlbiwgJnJlc2ZoLCAmY3JlYXRlLT5jcl9pYXR0cik7CisJCXN0YXR1cyA9IG5mc2Rfc3ltbGluayhycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwKKwkJCQkgICAgICBjcmVhdGUtPmNyX25hbWUsIGNyZWF0ZS0+Y3JfbmFtZWxlbiwKKwkJCQkgICAgICBjcmVhdGUtPmNyX2xpbmtuYW1lLCBjcmVhdGUtPmNyX2xpbmtsZW4sCisJCQkJICAgICAgJnJlc2ZoLCAmY3JlYXRlLT5jcl9pYXR0cik7CiAJCWJyZWFrOwogCiAJY2FzZSBORjRCTEs6CkBAIC0zNzUsOSArMzgzLDkgQEAKIAkJaWYgKE1BSk9SKHJkZXYpICE9IGNyZWF0ZS0+Y3Jfc3BlY2RhdGExIHx8CiAJCSAgICBNSU5PUihyZGV2KSAhPSBjcmVhdGUtPmNyX3NwZWNkYXRhMikKIAkJCXJldHVybiBuZnNlcnJfaW52YWw7Ci0JCXN0YXR1cyA9IG5mc2RfY3JlYXRlKHJxc3RwLCBjdXJyZW50X2ZoLCBjcmVhdGUtPmNyX25hbWUsCi0JCQkJICAgICBjcmVhdGUtPmNyX25hbWVsZW4sICZjcmVhdGUtPmNyX2lhdHRyLAotCQkJCSAgICAgU19JRkJMSywgcmRldiwgJnJlc2ZoKTsKKwkJc3RhdHVzID0gbmZzZF9jcmVhdGUocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsCisJCQkJICAgICBjcmVhdGUtPmNyX25hbWUsIGNyZWF0ZS0+Y3JfbmFtZWxlbiwKKwkJCQkgICAgICZjcmVhdGUtPmNyX2lhdHRyLCBTX0lGQkxLLCByZGV2LCAmcmVzZmgpOwogCQlicmVhazsKIAogCWNhc2UgTkY0Q0hSOgpAQCAtMzg1LDI4ICszOTMsMjggQEAKIAkJaWYgKE1BSk9SKHJkZXYpICE9IGNyZWF0ZS0+Y3Jfc3BlY2RhdGExIHx8CiAJCSAgICBNSU5PUihyZGV2KSAhPSBjcmVhdGUtPmNyX3NwZWNkYXRhMikKIAkJCXJldHVybiBuZnNlcnJfaW52YWw7Ci0JCXN0YXR1cyA9IG5mc2RfY3JlYXRlKHJxc3RwLCBjdXJyZW50X2ZoLCBjcmVhdGUtPmNyX25hbWUsCi0JCQkJICAgICBjcmVhdGUtPmNyX25hbWVsZW4sICZjcmVhdGUtPmNyX2lhdHRyLAotCQkJCSAgICAgU19JRkNIUiwgcmRldiwgJnJlc2ZoKTsKKwkJc3RhdHVzID0gbmZzZF9jcmVhdGUocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsCisJCQkJICAgICBjcmVhdGUtPmNyX25hbWUsIGNyZWF0ZS0+Y3JfbmFtZWxlbiwKKwkJCQkgICAgICZjcmVhdGUtPmNyX2lhdHRyLFNfSUZDSFIsIHJkZXYsICZyZXNmaCk7CiAJCWJyZWFrOwogCiAJY2FzZSBORjRTT0NLOgotCQlzdGF0dXMgPSBuZnNkX2NyZWF0ZShycXN0cCwgY3VycmVudF9maCwgY3JlYXRlLT5jcl9uYW1lLAotCQkJCSAgICAgY3JlYXRlLT5jcl9uYW1lbGVuLCAmY3JlYXRlLT5jcl9pYXR0ciwKLQkJCQkgICAgIFNfSUZTT0NLLCAwLCAmcmVzZmgpOworCQlzdGF0dXMgPSBuZnNkX2NyZWF0ZShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwKKwkJCQkgICAgIGNyZWF0ZS0+Y3JfbmFtZSwgY3JlYXRlLT5jcl9uYW1lbGVuLAorCQkJCSAgICAgJmNyZWF0ZS0+Y3JfaWF0dHIsIFNfSUZTT0NLLCAwLCAmcmVzZmgpOwogCQlicmVhazsKIAogCWNhc2UgTkY0RklGTzoKLQkJc3RhdHVzID0gbmZzZF9jcmVhdGUocnFzdHAsIGN1cnJlbnRfZmgsIGNyZWF0ZS0+Y3JfbmFtZSwKLQkJCQkgICAgIGNyZWF0ZS0+Y3JfbmFtZWxlbiwgJmNyZWF0ZS0+Y3JfaWF0dHIsCi0JCQkJICAgICBTX0lGSUZPLCAwLCAmcmVzZmgpOworCQlzdGF0dXMgPSBuZnNkX2NyZWF0ZShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwKKwkJCQkgICAgIGNyZWF0ZS0+Y3JfbmFtZSwgY3JlYXRlLT5jcl9uYW1lbGVuLAorCQkJCSAgICAgJmNyZWF0ZS0+Y3JfaWF0dHIsIFNfSUZJRk8sIDAsICZyZXNmaCk7CiAJCWJyZWFrOwogCiAJY2FzZSBORjRESVI6CiAJCWNyZWF0ZS0+Y3JfaWF0dHIuaWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKLQkJc3RhdHVzID0gbmZzZF9jcmVhdGUocnFzdHAsIGN1cnJlbnRfZmgsIGNyZWF0ZS0+Y3JfbmFtZSwKLQkJCQkgICAgIGNyZWF0ZS0+Y3JfbmFtZWxlbiwgJmNyZWF0ZS0+Y3JfaWF0dHIsCi0JCQkJICAgICBTX0lGRElSLCAwLCAmcmVzZmgpOworCQlzdGF0dXMgPSBuZnNkX2NyZWF0ZShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwKKwkJCQkgICAgIGNyZWF0ZS0+Y3JfbmFtZSwgY3JlYXRlLT5jcl9uYW1lbGVuLAorCQkJCSAgICAgJmNyZWF0ZS0+Y3JfaWF0dHIsIFNfSUZESVIsIDAsICZyZXNmaCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTQxNCwyMSArNDIyLDIyIEBACiAJfQogCiAJaWYgKCFzdGF0dXMpIHsKLQkJZmhfdW5sb2NrKGN1cnJlbnRfZmgpOwotCQlzZXRfY2hhbmdlX2luZm8oJmNyZWF0ZS0+Y3JfY2luZm8sIGN1cnJlbnRfZmgpOwotCQlmaF9kdXAyKGN1cnJlbnRfZmgsICZyZXNmaCk7CisJCWZoX3VubG9jaygmY3N0YXRlLT5jdXJyZW50X2ZoKTsKKwkJc2V0X2NoYW5nZV9pbmZvKCZjcmVhdGUtPmNyX2NpbmZvLCAmY3N0YXRlLT5jdXJyZW50X2ZoKTsKKwkJZmhfZHVwMigmY3N0YXRlLT5jdXJyZW50X2ZoLCAmcmVzZmgpOwogCX0KIAogCWZoX3B1dCgmcmVzZmgpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyCi1uZnNkNF9nZXRhdHRyKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9nZXRhdHRyICpnZXRhdHRyKQorc3RhdGljIF9fYmUzMgorbmZzZDRfZ2V0YXR0cihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSwKKwkgICAgICBzdHJ1Y3QgbmZzZDRfZ2V0YXR0ciAqZ2V0YXR0cikKIHsKIAlfX2JlMzIgc3RhdHVzOwogCi0Jc3RhdHVzID0gZmhfdmVyaWZ5KHJxc3RwLCBjdXJyZW50X2ZoLCAwLCBNQVlfTk9QKTsKKwlzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsIDAsIE1BWV9OT1ApOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKQEAgLTQzOCwyNiArNDQ3LDI4IEBACiAJZ2V0YXR0ci0+Z2FfYm12YWxbMF0gJj0gTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDA7CiAJZ2V0YXR0ci0+Z2FfYm12YWxbMV0gJj0gTkZTRF9TVVBQT1JURURfQVRUUlNfV09SRDE7CiAKLQlnZXRhdHRyLT5nYV9maHAgPSBjdXJyZW50X2ZoOworCWdldGF0dHItPmdhX2ZocCA9ICZjc3RhdGUtPmN1cnJlbnRfZmg7CiAJcmV0dXJuIG5mc19vazsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIKLW5mc2Q0X2xpbmsoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwKLQkgICBzdHJ1Y3Qgc3ZjX2ZoICpzYXZlX2ZoLCBzdHJ1Y3QgbmZzZDRfbGluayAqbGluaykKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X2xpbmsoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgc3RydWN0IG5mc2Q0X2xpbmsgKmxpbmspCiB7CiAJX19iZTMyIHN0YXR1cyA9IG5mc2Vycl9ub2ZpbGVoYW5kbGU7CiAKLQlpZiAoIXNhdmVfZmgtPmZoX2RlbnRyeSkKKwlpZiAoIWNzdGF0ZS0+c2F2ZV9maC5maF9kZW50cnkpCiAJCXJldHVybiBzdGF0dXM7Ci0Jc3RhdHVzID0gbmZzZF9saW5rKHJxc3RwLCBjdXJyZW50X2ZoLCBsaW5rLT5saV9uYW1lLCBsaW5rLT5saV9uYW1lbGVuLCBzYXZlX2ZoKTsKKwlzdGF0dXMgPSBuZnNkX2xpbmsocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsCisJCQkgICBsaW5rLT5saV9uYW1lLCBsaW5rLT5saV9uYW1lbGVuLCAmY3N0YXRlLT5zYXZlX2ZoKTsKIAlpZiAoIXN0YXR1cykKLQkJc2V0X2NoYW5nZV9pbmZvKCZsaW5rLT5saV9jaW5mbywgY3VycmVudF9maCk7CisJCXNldF9jaGFuZ2VfaW5mbygmbGluay0+bGlfY2luZm8sICZjc3RhdGUtPmN1cnJlbnRfZmgpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBfX2JlMzIKLW5mc2Q0X2xvb2t1cHAoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCkKK25mc2Q0X2xvb2t1cHAoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgICAgdm9pZCAqYXJnKQogewogCXN0cnVjdCBzdmNfZmggdG1wX2ZoOwogCV9fYmUzMiByZXQ7CkBAIC00NjYsMjIgKzQ3NywyNyBAQAogCWlmKChyZXQgPSBleHBfcHNldWRvcm9vdChycXN0cC0+cnFfY2xpZW50LCAmdG1wX2ZoLAogCQkJICAgICAgJnJxc3RwLT5ycV9jaGFuZGxlKSkgIT0gMCkKIAkJcmV0dXJuIHJldDsKLQlpZiAodG1wX2ZoLmZoX2RlbnRyeSA9PSBjdXJyZW50X2ZoLT5maF9kZW50cnkpIHsKKwlpZiAodG1wX2ZoLmZoX2RlbnRyeSA9PSBjc3RhdGUtPmN1cnJlbnRfZmguZmhfZGVudHJ5KSB7CiAJCWZoX3B1dCgmdG1wX2ZoKTsKIAkJcmV0dXJuIG5mc2Vycl9ub2VudDsKIAl9CiAJZmhfcHV0KCZ0bXBfZmgpOwotCXJldHVybiBuZnNkX2xvb2t1cChycXN0cCwgY3VycmVudF9maCwgIi4uIiwgMiwgY3VycmVudF9maCk7CisJcmV0dXJuIG5mc2RfbG9va3VwKHJxc3RwLCAmY3N0YXRlLT5jdXJyZW50X2ZoLAorCQkJICAgIi4uIiwgMiwgJmNzdGF0ZS0+Y3VycmVudF9maCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyCi1uZnNkNF9sb29rdXAoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X2xvb2t1cCAqbG9va3VwKQorc3RhdGljIF9fYmUzMgorbmZzZDRfbG9va3VwKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAorCSAgICAgc3RydWN0IG5mc2Q0X2xvb2t1cCAqbG9va3VwKQogewotCXJldHVybiBuZnNkX2xvb2t1cChycXN0cCwgY3VycmVudF9maCwgbG9va3VwLT5sb19uYW1lLCBsb29rdXAtPmxvX2xlbiwgY3VycmVudF9maCk7CisJcmV0dXJuIG5mc2RfbG9va3VwKHJxc3RwLCAmY3N0YXRlLT5jdXJyZW50X2ZoLAorCQkJICAgbG9va3VwLT5sb19uYW1lLCBsb29rdXAtPmxvX2xlbiwKKwkJCSAgICZjc3RhdGUtPmN1cnJlbnRfZmgpOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMgotbmZzZDRfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfcmVhZCAqcmVhZCkKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgc3RydWN0IG5mc2Q0X3JlYWQgKnJlYWQpCiB7CiAJX19iZTMyIHN0YXR1czsKIApAQCAtNDkzLDcgKzUwOSw4IEBACiAKIAluZnM0X2xvY2tfc3RhdGUoKTsKIAkvKiBjaGVjayBzdGF0ZWlkICovCi0JaWYgKChzdGF0dXMgPSBuZnM0X3ByZXByb2Nlc3Nfc3RhdGVpZF9vcChjdXJyZW50X2ZoLCAmcmVhZC0+cmRfc3RhdGVpZCwKKwlpZiAoKHN0YXR1cyA9IG5mczRfcHJlcHJvY2Vzc19zdGF0ZWlkX29wKCZjc3RhdGUtPmN1cnJlbnRfZmgsCisJCQkJJnJlYWQtPnJkX3N0YXRlaWQsCiAJCQkJQ0hFQ0tfRkggfCBSRF9TVEFURSwgJnJlYWQtPnJkX2ZpbHApKSkgewogCQlkcHJpbnRrKCJORlNEOiBuZnNkNF9yZWFkOiBjb3VsZG4ndCBwcm9jZXNzIHN0YXRlaWQhXG4iKTsKIAkJZ290byBvdXQ7CkBAIC01MDQsMTIgKzUyMSwxMyBAQAogb3V0OgogCW5mczRfdW5sb2NrX3N0YXRlKCk7CiAJcmVhZC0+cmRfcnFzdHAgPSBycXN0cDsKLQlyZWFkLT5yZF9maHAgPSBjdXJyZW50X2ZoOworCXJlYWQtPnJkX2ZocCA9ICZjc3RhdGUtPmN1cnJlbnRfZmg7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIKLW5mc2Q0X3JlYWRkaXIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X3JlYWRkaXIgKnJlYWRkaXIpCitzdGF0aWMgX19iZTMyCituZnNkNF9yZWFkZGlyKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAorCSAgICAgIHN0cnVjdCBuZnNkNF9yZWFkZGlyICpyZWFkZGlyKQogewogCXU2NCBjb29raWUgPSByZWFkZGlyLT5yZF9jb29raWU7CiAJc3RhdGljIGNvbnN0IG5mczRfdmVyaWZpZXIgemVyb3ZlcmY7CkBAIC01MjcsNDggKzU0NSw1MSBAQAogCQlyZXR1cm4gbmZzZXJyX2JhZF9jb29raWU7CiAKIAlyZWFkZGlyLT5yZF9ycXN0cCA9IHJxc3RwOwotCXJlYWRkaXItPnJkX2ZocCA9IGN1cnJlbnRfZmg7CisJcmVhZGRpci0+cmRfZmhwID0gJmNzdGF0ZS0+Y3VycmVudF9maDsKIAlyZXR1cm4gbmZzX29rOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMgotbmZzZDRfcmVhZGxpbmsoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X3JlYWRsaW5rICpyZWFkbGluaykKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X3JlYWRsaW5rKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAorCSAgICAgICBzdHJ1Y3QgbmZzZDRfcmVhZGxpbmsgKnJlYWRsaW5rKQogewogCXJlYWRsaW5rLT5ybF9ycXN0cCA9IHJxc3RwOwotCXJlYWRsaW5rLT5ybF9maHAgPSBjdXJyZW50X2ZoOworCXJlYWRsaW5rLT5ybF9maHAgPSAmY3N0YXRlLT5jdXJyZW50X2ZoOwogCXJldHVybiBuZnNfb2s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyCi1uZnNkNF9yZW1vdmUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X3JlbW92ZSAqcmVtb3ZlKQorc3RhdGljIF9fYmUzMgorbmZzZDRfcmVtb3ZlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAorCSAgICAgc3RydWN0IG5mc2Q0X3JlbW92ZSAqcmVtb3ZlKQogewogCV9fYmUzMiBzdGF0dXM7CiAKIAlpZiAobmZzNF9pbl9ncmFjZSgpKQogCQlyZXR1cm4gbmZzZXJyX2dyYWNlOwotCXN0YXR1cyA9IG5mc2RfdW5saW5rKHJxc3RwLCBjdXJyZW50X2ZoLCAwLCByZW1vdmUtPnJtX25hbWUsIHJlbW92ZS0+cm1fbmFtZWxlbik7CisJc3RhdHVzID0gbmZzZF91bmxpbmsocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsIDAsCisJCQkgICAgIHJlbW92ZS0+cm1fbmFtZSwgcmVtb3ZlLT5ybV9uYW1lbGVuKTsKIAlpZiAoc3RhdHVzID09IG5mc2Vycl9zeW1saW5rKQogCQlyZXR1cm4gbmZzZXJyX25vdGRpcjsKIAlpZiAoIXN0YXR1cykgewotCQlmaF91bmxvY2soY3VycmVudF9maCk7Ci0JCXNldF9jaGFuZ2VfaW5mbygmcmVtb3ZlLT5ybV9jaW5mbywgY3VycmVudF9maCk7CisJCWZoX3VubG9jaygmY3N0YXRlLT5jdXJyZW50X2ZoKTsKKwkJc2V0X2NoYW5nZV9pbmZvKCZyZW1vdmUtPnJtX2NpbmZvLCAmY3N0YXRlLT5jdXJyZW50X2ZoKTsKIAl9CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIKLW5mc2Q0X3JlbmFtZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLAotCSAgICAgc3RydWN0IHN2Y19maCAqc2F2ZV9maCwgc3RydWN0IG5mc2Q0X3JlbmFtZSAqcmVuYW1lKQorc3RhdGljIF9fYmUzMgorbmZzZDRfcmVuYW1lKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAorCSAgICAgc3RydWN0IG5mc2Q0X3JlbmFtZSAqcmVuYW1lKQogewogCV9fYmUzMiBzdGF0dXMgPSBuZnNlcnJfbm9maWxlaGFuZGxlOwogCi0JaWYgKCFzYXZlX2ZoLT5maF9kZW50cnkpCisJaWYgKCFjc3RhdGUtPnNhdmVfZmguZmhfZGVudHJ5KQogCQlyZXR1cm4gc3RhdHVzOwotCWlmIChuZnM0X2luX2dyYWNlKCkgJiYgIShzYXZlX2ZoLT5maF9leHBvcnQtPmV4X2ZsYWdzCisJaWYgKG5mczRfaW5fZ3JhY2UoKSAmJiAhKGNzdGF0ZS0+c2F2ZV9maC5maF9leHBvcnQtPmV4X2ZsYWdzCiAJCQkJCSYgTkZTRVhQX05PU1VCVFJFRUNIRUNLKSkKIAkJcmV0dXJuIG5mc2Vycl9ncmFjZTsKLQlzdGF0dXMgPSBuZnNkX3JlbmFtZShycXN0cCwgc2F2ZV9maCwgcmVuYW1lLT5ybl9zbmFtZSwKLQkJCSAgICAgcmVuYW1lLT5ybl9zbmFtZWxlbiwgY3VycmVudF9maCwKKwlzdGF0dXMgPSBuZnNkX3JlbmFtZShycXN0cCwgJmNzdGF0ZS0+c2F2ZV9maCwgcmVuYW1lLT5ybl9zbmFtZSwKKwkJCSAgICAgcmVuYW1lLT5ybl9zbmFtZWxlbiwgJmNzdGF0ZS0+Y3VycmVudF9maCwKIAkJCSAgICAgcmVuYW1lLT5ybl90bmFtZSwgcmVuYW1lLT5ybl90bmFtZWxlbik7CiAKIAkvKiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtIHJldHVybnMgZGlmZmVyZW50IGVycm9yJ3MgdGhhbiByZXF1aXJlZApAQCAtNTc2LDI3ICs1OTcsMjggQEAKIAlpZiAoc3RhdHVzID09IG5mc2Vycl9pc2RpcikKIAkJc3RhdHVzID0gbmZzZXJyX2V4aXN0OwogCWVsc2UgaWYgKChzdGF0dXMgPT0gbmZzZXJyX25vdGRpcikgJiYKLSAgICAgICAgICAgICAgICAgIChTX0lTRElSKHNhdmVfZmgtPmZoX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSAmJgotICAgICAgICAgICAgICAgICAgIFNfSVNESVIoY3VycmVudF9maC0+ZmhfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSkKKyAgICAgICAgICAgICAgICAgIChTX0lTRElSKGNzdGF0ZS0+c2F2ZV9maC5maF9kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgJiYKKyAgICAgICAgICAgICAgICAgICBTX0lTRElSKGNzdGF0ZS0+Y3VycmVudF9maC5maF9kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpKQogCQlzdGF0dXMgPSBuZnNlcnJfZXhpc3Q7CiAJZWxzZSBpZiAoc3RhdHVzID09IG5mc2Vycl9zeW1saW5rKQogCQlzdGF0dXMgPSBuZnNlcnJfbm90ZGlyOwogCiAJaWYgKCFzdGF0dXMpIHsKLQkJc2V0X2NoYW5nZV9pbmZvKCZyZW5hbWUtPnJuX3NpbmZvLCBjdXJyZW50X2ZoKTsKLQkJc2V0X2NoYW5nZV9pbmZvKCZyZW5hbWUtPnJuX3RpbmZvLCBzYXZlX2ZoKTsKKwkJc2V0X2NoYW5nZV9pbmZvKCZyZW5hbWUtPnJuX3NpbmZvLCAmY3N0YXRlLT5jdXJyZW50X2ZoKTsKKwkJc2V0X2NoYW5nZV9pbmZvKCZyZW5hbWUtPnJuX3RpbmZvLCAmY3N0YXRlLT5zYXZlX2ZoKTsKIAl9CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIKLW5mc2Q0X3NldGF0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X3NldGF0dHIgKnNldGF0dHIpCitzdGF0aWMgX19iZTMyCituZnNkNF9zZXRhdHRyKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAorCSAgICAgIHN0cnVjdCBuZnNkNF9zZXRhdHRyICpzZXRhdHRyKQogewogCV9fYmUzMiBzdGF0dXMgPSBuZnNfb2s7CiAKIAlpZiAoc2V0YXR0ci0+c2FfaWF0dHIuaWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKIAkJbmZzNF9sb2NrX3N0YXRlKCk7Ci0JCXN0YXR1cyA9IG5mczRfcHJlcHJvY2Vzc19zdGF0ZWlkX29wKGN1cnJlbnRfZmgsCisJCXN0YXR1cyA9IG5mczRfcHJlcHJvY2Vzc19zdGF0ZWlkX29wKCZjc3RhdGUtPmN1cnJlbnRfZmgsCiAJCQkmc2V0YXR0ci0+c2Ffc3RhdGVpZCwgQ0hFQ0tfRkggfCBXUl9TVEFURSwgTlVMTCk7CiAJCW5mczRfdW5sb2NrX3N0YXRlKCk7CiAJCWlmIChzdGF0dXMpIHsKQEAgLTYwNiwxNiArNjI4LDE4IEBACiAJfQogCXN0YXR1cyA9IG5mc19vazsKIAlpZiAoc2V0YXR0ci0+c2FfYWNsICE9IE5VTEwpCi0JCXN0YXR1cyA9IG5mc2Q0X3NldF9uZnM0X2FjbChycXN0cCwgY3VycmVudF9maCwgc2V0YXR0ci0+c2FfYWNsKTsKKwkJc3RhdHVzID0gbmZzZDRfc2V0X25mczRfYWNsKHJxc3RwLCAmY3N0YXRlLT5jdXJyZW50X2ZoLAorCQkJCQkgICAgc2V0YXR0ci0+c2FfYWNsKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwotCXN0YXR1cyA9IG5mc2Rfc2V0YXR0cihycXN0cCwgY3VycmVudF9maCwgJnNldGF0dHItPnNhX2lhdHRyLAorCXN0YXR1cyA9IG5mc2Rfc2V0YXR0cihycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgJnNldGF0dHItPnNhX2lhdHRyLAogCQkJCTAsICh0aW1lX3QpMCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIKLW5mc2Q0X3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF93cml0ZSAqd3JpdGUpCitzdGF0aWMgX19iZTMyCituZnNkNF93cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSwKKwkgICAgc3RydWN0IG5mc2Q0X3dyaXRlICp3cml0ZSkKIHsKIAlzdGF0ZWlkX3QgKnN0YXRlaWQgPSAmd3JpdGUtPndyX3N0YXRlaWQ7CiAJc3RydWN0IGZpbGUgKmZpbHAgPSBOVUxMOwpAQCAtNjI4LDcgKzY1Miw3IEBACiAJCXJldHVybiBuZnNlcnJfaW52YWw7CiAKIAluZnM0X2xvY2tfc3RhdGUoKTsKLQlzdGF0dXMgPSBuZnM0X3ByZXByb2Nlc3Nfc3RhdGVpZF9vcChjdXJyZW50X2ZoLCBzdGF0ZWlkLAorCXN0YXR1cyA9IG5mczRfcHJlcHJvY2Vzc19zdGF0ZWlkX29wKCZjc3RhdGUtPmN1cnJlbnRfZmgsIHN0YXRlaWQsCiAJCQkJCUNIRUNLX0ZIIHwgV1JfU1RBVEUsICZmaWxwKTsKIAlpZiAoZmlscCkKIAkJZ2V0X2ZpbGUoZmlscCk7CkBAIC02NDUsOSArNjY5LDkgQEAKIAkqcCsrID0gbmZzc3ZjX2Jvb3QudHZfc2VjOwogCSpwKysgPSBuZnNzdmNfYm9vdC50dl91c2VjOwogCi0Jc3RhdHVzID0gIG5mc2Rfd3JpdGUocnFzdHAsIGN1cnJlbnRfZmgsIGZpbHAsIHdyaXRlLT53cl9vZmZzZXQsCi0JCQlycXN0cC0+cnFfdmVjLCB3cml0ZS0+d3Jfdmxlbiwgd3JpdGUtPndyX2J1ZmxlbiwKLQkJCSZ3cml0ZS0+d3JfaG93X3dyaXR0ZW4pOworCXN0YXR1cyA9ICBuZnNkX3dyaXRlKHJxc3RwLCAmY3N0YXRlLT5jdXJyZW50X2ZoLCBmaWxwLAorCQkJICAgICB3cml0ZS0+d3Jfb2Zmc2V0LCBycXN0cC0+cnFfdmVjLCB3cml0ZS0+d3JfdmxlbiwKKwkJCSAgICAgd3JpdGUtPndyX2J1ZmxlbiwgJndyaXRlLT53cl9ob3dfd3JpdHRlbik7CiAJaWYgKGZpbHApCiAJCWZwdXQoZmlscCk7CiAKQEAgLTY2MiwxMyArNjg2LDE0IEBACiAgKiB0byBORlNfT0sgYWZ0ZXIgdGhlIGNhbGw7IE5WRVJJRlkgYnkgbWFwcGluZyBORlNFUlJfTk9UX1NBTUUgdG8gTkZTX09LLgogICovCiBzdGF0aWMgX19iZTMyCi1uZnNkNF92ZXJpZnkoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X3ZlcmlmeSAqdmVyaWZ5KQorX25mc2Q0X3ZlcmlmeShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSwKKwkgICAgIHN0cnVjdCBuZnNkNF92ZXJpZnkgKnZlcmlmeSkKIHsKIAlfX2JlMzIgKmJ1ZiwgKnA7CiAJaW50IGNvdW50OwogCV9fYmUzMiBzdGF0dXM7CiAKLQlzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsIGN1cnJlbnRfZmgsIDAsIE1BWV9OT1ApOworCXN0YXR1cyA9IGZoX3ZlcmlmeShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgMCwgTUFZX05PUCk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIApAQCAtNjg5LDggKzcxNCw5IEBACiAJaWYgKCFidWYpCiAJCXJldHVybiBuZnNlcnJfcmVzb3VyY2U7CiAKLQlzdGF0dXMgPSBuZnNkNF9lbmNvZGVfZmF0dHIoY3VycmVudF9maCwgY3VycmVudF9maC0+ZmhfZXhwb3J0LAotCQkJCSAgICBjdXJyZW50X2ZoLT5maF9kZW50cnksIGJ1ZiwKKwlzdGF0dXMgPSBuZnNkNF9lbmNvZGVfZmF0dHIoJmNzdGF0ZS0+Y3VycmVudF9maCwKKwkJCQkgICAgY3N0YXRlLT5jdXJyZW50X2ZoLmZoX2V4cG9ydCwKKwkJCQkgICAgY3N0YXRlLT5jdXJyZW50X2ZoLmZoX2RlbnRyeSwgYnVmLAogCQkJCSAgICAmY291bnQsIHZlcmlmeS0+dmVfYm12YWwsCiAJCQkJICAgIHJxc3RwKTsKIApAQCAtNzEyLDYgKzczOCwyNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X252ZXJpZnkoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgICAgc3RydWN0IG5mc2Q0X3ZlcmlmeSAqdmVyaWZ5KQoreworCV9fYmUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBfbmZzZDRfdmVyaWZ5KHJxc3RwLCBjc3RhdGUsIHZlcmlmeSk7CisJcmV0dXJuIHN0YXR1cyA9PSBuZnNlcnJfbm90X3NhbWUgPyBuZnNfb2sgOiBzdGF0dXM7Cit9CisKK3N0YXRpYyBfX2JlMzIKK25mc2Q0X3ZlcmlmeShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSwKKwkgICAgIHN0cnVjdCBuZnNkNF92ZXJpZnkgKnZlcmlmeSkKK3sKKwlfX2JlMzIgc3RhdHVzOworCisJc3RhdHVzID0gX25mc2Q0X3ZlcmlmeShycXN0cCwgY3N0YXRlLCB2ZXJpZnkpOworCXJldHVybiBzdGF0dXMgPT0gbmZzZXJyX3NhbWUgPyBuZnNfb2sgOiBzdGF0dXM7Cit9CisKIC8qCiAgKiBOVUxMIGNhbGwuCiAgKi8KQEAgLTcyNyw2ICs3NzMsNDIgQEAKIAkJbmZzZHN0YXRzLm5mczRfb3Bjb3VudFtvcG51bV0rKzsKIH0KIAorc3RhdGljIHZvaWQgY3N0YXRlX2ZyZWUoc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUpCit7CisJaWYgKGNzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm47CisJZmhfcHV0KCZjc3RhdGUtPmN1cnJlbnRfZmgpOworCWZoX3B1dCgmY3N0YXRlLT5zYXZlX2ZoKTsKKwlCVUdfT04oY3N0YXRlLT5yZXBsYXlfb3duZXIpOworCWtmcmVlKGNzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZV9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlOworCisJY3N0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNzdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlmaF9pbml0KCZjc3RhdGUtPmN1cnJlbnRfZmgsIE5GUzRfRkhTSVpFKTsKKwlmaF9pbml0KCZjc3RhdGUtPnNhdmVfZmgsIE5GUzRfRkhTSVpFKTsKKwljc3RhdGUtPnJlcGxheV9vd25lciA9IE5VTEw7CisJcmV0dXJuIGNzdGF0ZTsKK30KKwordHlwZWRlZiBfX2JlMzIoKm5mc2Q0b3BfZnVuYykoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAorCQkJICAgICAgdm9pZCAqKTsKKworc3RydWN0IG5mc2Q0X29wZXJhdGlvbiB7CisJbmZzZDRvcF9mdW5jIG9wX2Z1bmM7CisJdTMyIG9wX2ZsYWdzOworLyogTW9zdCBvcHMgcmVxdWlyZSBhIHZhbGlkIGN1cnJlbnQgZmlsZWhhbmRsZTsgYSBmZXcgZG9uJ3Q6ICovCisjZGVmaW5lIEFMTE9XRURfV0lUSE9VVF9GSCAxCisvKiBHRVRBVFRSIGFuZCBvcHMgbm90IGxpc3RlZCBhcyByZXR1cm5pbmcgTkZTNEVSUl9NT1ZFRDogKi8KKyNkZWZpbmUgQUxMT1dFRF9PTl9BQlNFTlRfRlMgMgorfTsKKworc3RhdGljIHN0cnVjdCBuZnNkNF9vcGVyYXRpb24gbmZzZDRfb3BzW107CiAKIC8qCiAgKiBDT01QT1VORCBjYWxsLgpAQCAtNzM3LDIxICs4MTksMTUgQEAKIAkJICAgIHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCkKIHsKIAlzdHJ1Y3QgbmZzZDRfb3AJKm9wOwotCXN0cnVjdCBzdmNfZmgJKmN1cnJlbnRfZmggPSBOVUxMOwotCXN0cnVjdCBzdmNfZmgJKnNhdmVfZmggPSBOVUxMOwotCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKnJlcGxheV9vd25lciA9IE5VTEw7Ci0JaW50CQlzbGFja19zcGFjZTsgICAgLyogaW4gd29yZHMsIG5vdCBieXRlcyEgKi8KKwlzdHJ1Y3QgbmZzZDRfb3BlcmF0aW9uICpvcGRlc2M7CisJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUgPSBOVUxMOworCWludAkJc2xhY2tfYnl0ZXM7CiAJX19iZTMyCQlzdGF0dXM7CiAKIAlzdGF0dXMgPSBuZnNlcnJfcmVzb3VyY2U7Ci0JY3VycmVudF9maCA9IGttYWxsb2Moc2l6ZW9mKCpjdXJyZW50X2ZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGN1cnJlbnRfZmggPT0gTlVMTCkKKwljc3RhdGUgPSBjc3RhdGVfYWxsb2MoKTsKKwlpZiAoY3N0YXRlID09IE5VTEwpCiAJCWdvdG8gb3V0OwotCWZoX2luaXQoY3VycmVudF9maCwgTkZTNF9GSFNJWkUpOwotCXNhdmVfZmggPSBrbWFsbG9jKHNpemVvZigqc2F2ZV9maCksIEdGUF9LRVJORUwpOwotCWlmIChzYXZlX2ZoID09IE5VTEwpCi0JCWdvdG8gb3V0OwotCWZoX2luaXQoc2F2ZV9maCwgTkZTNF9GSFNJWkUpOwogCiAJcmVzcC0+eGJ1ZiA9ICZycXN0cC0+cnFfcmVzOwogCXJlc3AtPnAgPSBycXN0cC0+cnFfcmVzLmhlYWRbMF0uaW92X2Jhc2UgKyBycXN0cC0+cnFfcmVzLmhlYWRbMF0uaW92X2xlbjsKQEAgLTc5MCwxNjQgKzg2Niw0NCBAQAogCQkgKiBmYWlsZWQgcmVzcG9uc2UgdG8gdGhlIG5leHQgb3BlcmF0aW9uLiAgSWYgd2UgZG9uJ3QKIAkJICogaGF2ZSBlbm91Z2ggcm9vbSwgZmFpbCB3aXRoIEVSUl9SRVNPVVJDRS4KIAkJICovCi0vKiBGSVhNRSAtIGlzIHNsYWNrX3NwYWNlICpyZWFsbHkqIHdvcmRzLCBvciBieXRlcz8/PyAtIG5laWxiICovCi0JCXNsYWNrX3NwYWNlID0gKGNoYXIgKilyZXNwLT5lbmQgLSAoY2hhciAqKXJlc3AtPnA7Ci0JCWlmIChzbGFja19zcGFjZSA8IENPTVBPVU5EX1NMQUNLX1NQQUNFICsgQ09NUE9VTkRfRVJSX1NMQUNLX1NQQUNFKSB7Ci0JCQlCVUdfT04oc2xhY2tfc3BhY2UgPCBDT01QT1VORF9FUlJfU0xBQ0tfU1BBQ0UpOworCQlzbGFja19ieXRlcyA9IChjaGFyICopcmVzcC0+ZW5kIC0gKGNoYXIgKilyZXNwLT5wOworCQlpZiAoc2xhY2tfYnl0ZXMgPCBDT01QT1VORF9TTEFDS19TUEFDRQorCQkJCSsgQ09NUE9VTkRfRVJSX1NMQUNLX1NQQUNFKSB7CisJCQlCVUdfT04oc2xhY2tfYnl0ZXMgPCBDT01QT1VORF9FUlJfU0xBQ0tfU1BBQ0UpOwogCQkJb3AtPnN0YXR1cyA9IG5mc2Vycl9yZXNvdXJjZTsKIAkJCWdvdG8gZW5jb2RlX29wOwogCQl9CiAKLQkJLyogQWxsIG9wZXJhdGlvbnMgZXhjZXB0IFJFTkVXLCBTRVRDTElFTlRJRCwgUkVTVE9SRUZICi0JCSogU0VUQ0xJRU5USURfQ09ORklSTSwgUFVURkggYW5kIFBVVFJPT1RGSAotCQkqIHJlcXVpcmUgYSB2YWxpZCBjdXJyZW50IGZpbGVoYW5kbGUKLQkJKi8KLQkJaWYgKCFjdXJyZW50X2ZoLT5maF9kZW50cnkpIHsKLQkJCWlmICghKChvcC0+b3BudW0gPT0gT1BfUFVURkgpIHx8Ci0JCQkgICAgICAob3AtPm9wbnVtID09IE9QX1BVVFJPT1RGSCkgfHwKLQkJCSAgICAgIChvcC0+b3BudW0gPT0gT1BfU0VUQ0xJRU5USUQpIHx8Ci0JCQkgICAgICAob3AtPm9wbnVtID09IE9QX1NFVENMSUVOVElEX0NPTkZJUk0pIHx8Ci0JCQkgICAgICAob3AtPm9wbnVtID09IE9QX1JFTkVXKSB8fAotCQkJICAgICAgKG9wLT5vcG51bSA9PSBPUF9SRVNUT1JFRkgpIHx8Ci0JCQkgICAgICAob3AtPm9wbnVtID09IE9QX1JFTEVBU0VfTE9DS09XTkVSKSkpIHsKKwkJb3BkZXNjID0gJm5mc2Q0X29wc1tvcC0+b3BudW1dOworCisJCWlmICghY3N0YXRlLT5jdXJyZW50X2ZoLmZoX2RlbnRyeSkgeworCQkJaWYgKCEob3BkZXNjLT5vcF9mbGFncyAmIEFMTE9XRURfV0lUSE9VVF9GSCkpIHsKIAkJCQlvcC0+c3RhdHVzID0gbmZzZXJyX25vZmlsZWhhbmRsZTsKIAkJCQlnb3RvIGVuY29kZV9vcDsKIAkJCX0KLQkJfQotCQkvKiBDaGVjayBtdXN0IGJlIGRvbmUgYXQgc3RhcnQgb2YgZWFjaCBvcGVyYXRpb24sIGV4Y2VwdAotCQkgKiBmb3IgR0VUQVRUUiBhbmQgb3BzIG5vdCBsaXN0ZWQgYXMgcmV0dXJuaW5nIE5GUzRFUlJfTU9WRUQKLQkJICovCi0JCWVsc2UgaWYgKGN1cnJlbnRfZmgtPmZoX2V4cG9ydC0+ZXhfZnNsb2NzLm1pZ3JhdGVkICYmCi0JCQkgISgob3AtPm9wbnVtID09IE9QX0dFVEFUVFIpIHx8Ci0JCQkgICAob3AtPm9wbnVtID09IE9QX1BVVFJPT1RGSCkgfHwKLQkJCSAgIChvcC0+b3BudW0gPT0gT1BfUFVUUFVCRkgpIHx8Ci0JCQkgICAob3AtPm9wbnVtID09IE9QX1JFTkVXKSB8fAotCQkJICAgKG9wLT5vcG51bSA9PSBPUF9TRVRDTElFTlRJRCkgfHwKLQkJCSAgIChvcC0+b3BudW0gPT0gT1BfUkVMRUFTRV9MT0NLT1dORVIpKSkgeworCQl9IGVsc2UgaWYgKGNzdGF0ZS0+Y3VycmVudF9maC5maF9leHBvcnQtPmV4X2ZzbG9jcy5taWdyYXRlZCAmJgorCQkJICAhKG9wZGVzYy0+b3BfZmxhZ3MgJiBBTExPV0VEX09OX0FCU0VOVF9GUykpIHsKIAkJCW9wLT5zdGF0dXMgPSBuZnNlcnJfbW92ZWQ7CiAJCQlnb3RvIGVuY29kZV9vcDsKIAkJfQotCQlzd2l0Y2ggKG9wLT5vcG51bSkgewotCQljYXNlIE9QX0FDQ0VTUzoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9hY2Nlc3MocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5hY2Nlc3MpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfQ0xPU0U6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfY2xvc2UocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5jbG9zZSwgJnJlcGxheV9vd25lcik7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9DT01NSVQ6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfY29tbWl0KHJxc3RwLCBjdXJyZW50X2ZoLCAmb3AtPnUuY29tbWl0KTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX0NSRUFURToKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9jcmVhdGUocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5jcmVhdGUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfREVMRUdSRVRVUk46Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfZGVsZWdyZXR1cm4ocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5kZWxlZ3JldHVybik7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9HRVRBVFRSOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2dldGF0dHIocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5nZXRhdHRyKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX0dFVEZIOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2dldGZoKGN1cnJlbnRfZmgsICZvcC0+dS5nZXRmaCk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9MSU5LOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X2xpbmsocnFzdHAsIGN1cnJlbnRfZmgsIHNhdmVfZmgsICZvcC0+dS5saW5rKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX0xPQ0s6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfbG9jayhycXN0cCwgY3VycmVudF9maCwgJm9wLT51LmxvY2ssICZyZXBsYXlfb3duZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfTE9DS1Q6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfbG9ja3QocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5sb2NrdCk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9MT0NLVToKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9sb2NrdShycXN0cCwgY3VycmVudF9maCwgJm9wLT51LmxvY2t1LCAmcmVwbGF5X293bmVyKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX0xPT0tVUDoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9sb29rdXAocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5sb29rdXApOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfTE9PS1VQUDoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9sb29rdXBwKHJxc3RwLCBjdXJyZW50X2ZoKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX05WRVJJRlk6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfdmVyaWZ5KHJxc3RwLCBjdXJyZW50X2ZoLCAmb3AtPnUubnZlcmlmeSk7Ci0JCQlpZiAob3AtPnN0YXR1cyA9PSBuZnNlcnJfbm90X3NhbWUpCi0JCQkJb3AtPnN0YXR1cyA9IG5mc19vazsKLQkJCWJyZWFrOwotCQljYXNlIE9QX09QRU46Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfb3BlbihycXN0cCwgY3VycmVudF9maCwgJm9wLT51Lm9wZW4sICZyZXBsYXlfb3duZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfT1BFTl9DT05GSVJNOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X29wZW5fY29uZmlybShycXN0cCwgY3VycmVudF9maCwgJm9wLT51Lm9wZW5fY29uZmlybSwgJnJlcGxheV9vd25lcik7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9PUEVOX0RPV05HUkFERToKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9vcGVuX2Rvd25ncmFkZShycXN0cCwgY3VycmVudF9maCwgJm9wLT51Lm9wZW5fZG93bmdyYWRlLCAmcmVwbGF5X293bmVyKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX1BVVEZIOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X3B1dGZoKHJxc3RwLCBjdXJyZW50X2ZoLCAmb3AtPnUucHV0ZmgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfUFVUUk9PVEZIOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X3B1dHJvb3RmaChycXN0cCwgY3VycmVudF9maCk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9SRUFEOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X3JlYWQocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5yZWFkKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX1JFQURESVI6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfcmVhZGRpcihycXN0cCwgY3VycmVudF9maCwgJm9wLT51LnJlYWRkaXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfUkVBRExJTks6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfcmVhZGxpbmsocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS5yZWFkbGluayk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9SRU1PVkU6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfcmVtb3ZlKHJxc3RwLCBjdXJyZW50X2ZoLCAmb3AtPnUucmVtb3ZlKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX1JFTkFNRToKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9yZW5hbWUocnFzdHAsIGN1cnJlbnRfZmgsIHNhdmVfZmgsICZvcC0+dS5yZW5hbWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfUkVORVc6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfcmVuZXcoJm9wLT51LnJlbmV3KTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX1JFU1RPUkVGSDoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9yZXN0b3JlZmgoY3VycmVudF9maCwgc2F2ZV9maCk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9TQVZFRkg6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfc2F2ZWZoKGN1cnJlbnRfZmgsIHNhdmVfZmgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfU0VUQVRUUjoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9zZXRhdHRyKHJxc3RwLCBjdXJyZW50X2ZoLCAmb3AtPnUuc2V0YXR0cik7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9TRVRDTElFTlRJRDoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9zZXRjbGllbnRpZChycXN0cCwgJm9wLT51LnNldGNsaWVudGlkKTsKLQkJCWJyZWFrOwotCQljYXNlIE9QX1NFVENMSUVOVElEX0NPTkZJUk06Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfc2V0Y2xpZW50aWRfY29uZmlybShycXN0cCwgJm9wLT51LnNldGNsaWVudGlkX2NvbmZpcm0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfVkVSSUZZOgotCQkJb3AtPnN0YXR1cyA9IG5mc2Q0X3ZlcmlmeShycXN0cCwgY3VycmVudF9maCwgJm9wLT51LnZlcmlmeSk7Ci0JCQlpZiAob3AtPnN0YXR1cyA9PSBuZnNlcnJfc2FtZSkKLQkJCQlvcC0+c3RhdHVzID0gbmZzX29rOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfV1JJVEU6Ci0JCQlvcC0+c3RhdHVzID0gbmZzZDRfd3JpdGUocnFzdHAsIGN1cnJlbnRfZmgsICZvcC0+dS53cml0ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUF9SRUxFQVNFX0xPQ0tPV05FUjoKLQkJCW9wLT5zdGF0dXMgPSBuZnNkNF9yZWxlYXNlX2xvY2tvd25lcihycXN0cCwgJm9wLT51LnJlbGVhc2VfbG9ja293bmVyKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgorCisJCWlmIChvcGRlc2MtPm9wX2Z1bmMpCisJCQlvcC0+c3RhdHVzID0gb3BkZXNjLT5vcF9mdW5jKHJxc3RwLCBjc3RhdGUsICZvcC0+dSk7CisJCWVsc2UKIAkJCUJVR19PTihvcC0+c3RhdHVzID09IG5mc19vayk7Ci0JCQlicmVhazsKLQkJfQogCiBlbmNvZGVfb3A6CiAJCWlmIChvcC0+c3RhdHVzID09IG5mc2Vycl9yZXBsYXlfbWUpIHsKLQkJCW9wLT5yZXBsYXkgPSAmcmVwbGF5X293bmVyLT5zb19yZXBsYXk7CisJCQlvcC0+cmVwbGF5ID0gJmNzdGF0ZS0+cmVwbGF5X293bmVyLT5zb19yZXBsYXk7CiAJCQluZnNkNF9lbmNvZGVfcmVwbGF5KHJlc3AsIG9wKTsKIAkJCXN0YXR1cyA9IG9wLT5zdGF0dXMgPSBvcC0+cmVwbGF5LT5ycF9zdGF0dXM7CiAJCX0gZWxzZSB7CiAJCQluZnNkNF9lbmNvZGVfb3BlcmF0aW9uKHJlc3AsIG9wKTsKIAkJCXN0YXR1cyA9IG9wLT5zdGF0dXM7CiAJCX0KLQkJaWYgKHJlcGxheV9vd25lciAmJiAocmVwbGF5X293bmVyICE9ICh2b2lkICopKC0xKSkpIHsKLQkJCW5mczRfcHV0X3N0YXRlb3duZXIocmVwbGF5X293bmVyKTsKLQkJCXJlcGxheV9vd25lciA9IE5VTEw7CisJCWlmIChjc3RhdGUtPnJlcGxheV9vd25lcikgeworCQkJbmZzNF9wdXRfc3RhdGVvd25lcihjc3RhdGUtPnJlcGxheV9vd25lcik7CisJCQljc3RhdGUtPnJlcGxheV9vd25lciA9IE5VTEw7CiAJCX0KIAkJLyogWFhYIFVnaCwgd2UgbmVlZCB0byBnZXQgcmlkIG9mIHRoaXMga2luZCBvZiBzcGVjaWFsIGNhc2U6ICovCiAJCWlmIChvcC0+b3BudW0gPT0gT1BfUkVBRCAmJiBvcC0+dS5yZWFkLnJkX2ZpbHApCkBAIC05NTgsMTUgKzkxNCwxMjQgQEAKIAogb3V0OgogCW5mc2Q0X3JlbGVhc2VfY29tcG91bmRhcmdzKGFyZ3MpOwotCWlmIChjdXJyZW50X2ZoKQotCQlmaF9wdXQoY3VycmVudF9maCk7Ci0Ja2ZyZWUoY3VycmVudF9maCk7Ci0JaWYgKHNhdmVfZmgpCi0JCWZoX3B1dChzYXZlX2ZoKTsKLQlrZnJlZShzYXZlX2ZoKTsKKwljc3RhdGVfZnJlZShjc3RhdGUpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmZzZDRfb3BlcmF0aW9uIG5mc2Q0X29wc1tPUF9SRUxFQVNFX0xPQ0tPV05FUisxXSA9IHsKKwlbT1BfQUNDRVNTXSA9IHsKKwkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X2FjY2VzcywKKwl9LAorCVtPUF9DTE9TRV0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9jbG9zZSwKKwl9LAorCVtPUF9DT01NSVRdID0geworCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfY29tbWl0LAorCX0sCisJW09QX0NSRUFURV0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9jcmVhdGUsCisJfSwKKwlbT1BfREVMRUdSRVRVUk5dID0geworCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfZGVsZWdyZXR1cm4sCisJfSwKKwlbT1BfR0VUQVRUUl0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9nZXRhdHRyLAorCQkub3BfZmxhZ3MgPSBBTExPV0VEX09OX0FCU0VOVF9GUywKKwl9LAorCVtPUF9HRVRGSF0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9nZXRmaCwKKwl9LAorCVtPUF9MSU5LXSA9IHsKKwkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X2xpbmssCisJfSwKKwlbT1BfTE9DS10gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9sb2NrLAorCX0sCisJW09QX0xPQ0tUXSA9IHsKKwkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X2xvY2t0LAorCX0sCisJW09QX0xPQ0tVXSA9IHsKKwkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X2xvY2t1LAorCX0sCisJW09QX0xPT0tVUF0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9sb29rdXAsCisJfSwKKwlbT1BfTE9PS1VQUF0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9sb29rdXBwLAorCX0sCisJW09QX05WRVJJRlldID0geworCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfbnZlcmlmeSwKKwl9LAorCVtPUF9PUEVOXSA9IHsKKwkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X29wZW4sCisJfSwKKwlbT1BfT1BFTl9DT05GSVJNXSA9IHsKKwkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X29wZW5fY29uZmlybSwKKwl9LAorCVtPUF9PUEVOX0RPV05HUkFERV0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9vcGVuX2Rvd25ncmFkZSwKKwl9LAorCVtPUF9QVVRGSF0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9wdXRmaCwKKwkJLm9wX2ZsYWdzID0gQUxMT1dFRF9XSVRIT1VUX0ZIIHwgQUxMT1dFRF9PTl9BQlNFTlRfRlMsCisJfSwKKwlbT1BfUFVUUFVCRkhdID0geworCQkvKiB1bnN1cHBvcnRlZDsganVzdCBmb3IgZnV0dXJlIHJlZmVyZW5jZTogKi8KKwkJLm9wX2ZsYWdzID0gQUxMT1dFRF9XSVRIT1VUX0ZIIHwgQUxMT1dFRF9PTl9BQlNFTlRfRlMsCisJfSwKKwlbT1BfUFVUUk9PVEZIXSA9IHsKKwkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X3B1dHJvb3RmaCwKKwkJLm9wX2ZsYWdzID0gQUxMT1dFRF9XSVRIT1VUX0ZIIHwgQUxMT1dFRF9PTl9BQlNFTlRfRlMsCisJfSwKKwlbT1BfUkVBRF0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9yZWFkLAorCX0sCisJW09QX1JFQURESVJdID0geworCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfcmVhZGRpciwKKwl9LAorCVtPUF9SRUFETElOS10gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9yZWFkbGluaywKKwl9LAorCVtPUF9SRU1PVkVdID0geworCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfcmVtb3ZlLAorCX0sCisJW09QX1JFTkFNRV0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9yZW5hbWUsCisJfSwKKwlbT1BfUkVORVddID0geworCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfcmVuZXcsCisJCS5vcF9mbGFncyA9IEFMTE9XRURfV0lUSE9VVF9GSCB8IEFMTE9XRURfT05fQUJTRU5UX0ZTLAorCX0sCisJW09QX1JFU1RPUkVGSF0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9yZXN0b3JlZmgsCisJCS5vcF9mbGFncyA9IEFMTE9XRURfV0lUSE9VVF9GSCB8IEFMTE9XRURfT05fQUJTRU5UX0ZTLAorCX0sCisJW09QX1NBVkVGSF0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9zYXZlZmgsCisJfSwKKwlbT1BfU0VUQVRUUl0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF9zZXRhdHRyLAorCX0sCisJW09QX1NFVENMSUVOVElEXSA9IHsKKwkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X3NldGNsaWVudGlkLAorCQkub3BfZmxhZ3MgPSBBTExPV0VEX1dJVEhPVVRfRkggfCBBTExPV0VEX09OX0FCU0VOVF9GUywKKwl9LAorCVtPUF9TRVRDTElFTlRJRF9DT05GSVJNXSA9IHsKKwkJLm9wX2Z1bmMgPSAobmZzZDRvcF9mdW5jKW5mc2Q0X3NldGNsaWVudGlkX2NvbmZpcm0sCisJCS5vcF9mbGFncyA9IEFMTE9XRURfV0lUSE9VVF9GSCB8IEFMTE9XRURfT05fQUJTRU5UX0ZTLAorCX0sCisJW09QX1ZFUklGWV0gPSB7CisJCS5vcF9mdW5jID0gKG5mc2Q0b3BfZnVuYyluZnNkNF92ZXJpZnksCisJfSwKKwlbT1BfV1JJVEVdID0geworCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfd3JpdGUsCisJfSwKKwlbT1BfUkVMRUFTRV9MT0NLT1dORVJdID0geworCQkub3BfZnVuYyA9IChuZnNkNG9wX2Z1bmMpbmZzZDRfcmVsZWFzZV9sb2Nrb3duZXIsCisJCS5vcF9mbGFncyA9IEFMTE9XRURfV0lUSE9VVF9GSCB8IEFMTE9XRURfT05fQUJTRU5UX0ZTLAorCX0sCit9OworCiAjZGVmaW5lIG5mczRzdmNfZGVjb2RlX3ZvaWRhcmdzCQlOVUxMCiAjZGVmaW5lIG5mczRzdmNfcmVsZWFzZV92b2lkCQlOVUxMCiAjZGVmaW5lIG5mc2Q0X3ZvaWRyZXMJCQluZnNkNF92b2lkYXJncwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0cmVjb3Zlci5jIGIvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCmluZGV4IDgxYjg1NjUuLmM3Nzc0ZTMgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHJlY292ZXIuYworKysgYi9mcy9uZnNkL25mczRyZWNvdmVyLmMKQEAgLTI1OSw3ICsyNTksNyBAQAogCQlwcmludGsoIm5mc2Q0OiBub24tZmlsZSBmb3VuZCBpbiBjbGllbnQgcmVjb3ZlcnkgZGlyZWN0b3J5XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwogCXN0YXR1cyA9IHZmc191bmxpbmsoZGlyLT5kX2lub2RlLCBkZW50cnkpOwogCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0c3RhdGUuYyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKaW5kZXggNjQwYzkyYi4uOWRlODlkZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0c3RhdGUuYworKysgYi9mcy9uZnNkL25mczRzdGF0ZS5jCkBAIC03MTEsNyArNzExLDggQEAKICAqCiAgKi8KIF9fYmUzMgotbmZzZDRfc2V0Y2xpZW50aWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkICpzZXRjbGlkKQorbmZzZDRfc2V0Y2xpZW50aWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJCSAgc3RydWN0IG5mc2Q0X3NldGNsaWVudGlkICpzZXRjbGlkKQogewogCV9fYmUzMiAJCQlpcF9hZGRyID0gcnFzdHAtPnJxX2FkZHIuc2luX2FkZHIuc19hZGRyOwogCXN0cnVjdCB4ZHJfbmV0b2JqIAljbG5hbWUgPSB7IApAQCAtODc2LDcgKzg3Nyw5IEBACiAgKiBOT1RFOiBjYWxsYmFjayBpbmZvcm1hdGlvbiB3aWxsIGJlIHByb2Nlc3NlZCBoZXJlIGluIGEgZnV0dXJlIHBhdGNoCiAgKi8KIF9fYmUzMgotbmZzZDRfc2V0Y2xpZW50aWRfY29uZmlybShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWRfY29uZmlybSAqc2V0Y2xpZW50aWRfY29uZmlybSkKK25mc2Q0X3NldGNsaWVudGlkX2NvbmZpcm0oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJCSBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSwKKwkJCSBzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWRfY29uZmlybSAqc2V0Y2xpZW50aWRfY29uZmlybSkKIHsKIAlfX2JlMzIgaXBfYWRkciA9IHJxc3RwLT5ycV9hZGRyLnNpbl9hZGRyLnNfYWRkcjsKIAlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNvbmYsICp1bmNvbmY7CkBAIC0xMzEwLDcgKzEzMTMsNyBAQAogbmZzNF9maWxlX2Rvd25ncmFkZShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IHNoYXJlX2FjY2VzcykKIHsKIAlpZiAoc2hhcmVfYWNjZXNzICYgTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEUpIHsKLQkJcHV0X3dyaXRlX2FjY2VzcyhmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCXB1dF93cml0ZV9hY2Nlc3MoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJCWZpbHAtPmZfbW9kZSA9IChmaWxwLT5mX21vZGUgfCBGTU9ERV9SRUFEKSAmIH5GTU9ERV9XUklURTsKIAl9CiB9CkBAIC0xNjIzLDcgKzE2MjYsNyBAQAogbmZzNF91cGdyYWRlX29wZW4oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VyX2ZoLCBzdHJ1Y3QgbmZzNF9zdGF0ZWlkICpzdHAsIHN0cnVjdCBuZnNkNF9vcGVuICpvcGVuKQogewogCXN0cnVjdCBmaWxlICpmaWxwID0gc3RwLT5zdF92ZnNfZmlsZTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJdW5zaWduZWQgaW50IHNoYXJlX2FjY2VzcywgbmV3X3dyaXRlcjsKIAlfX2JlMzIgc3RhdHVzOwogCkBAIC0xODMzLDcgKzE4MzYsOCBAQAogc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGxhdW5kcm9tYXRfd29yaywgbGF1bmRyb21hdF9tYWluKTsKIAogX19iZTMyCi1uZnNkNF9yZW5ldyhjbGllbnRpZF90ICpjbGlkKQorbmZzZDRfcmVuZXcoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgIGNsaWVudGlkX3QgKmNsaWQpCiB7CiAJc3RydWN0IG5mczRfY2xpZW50ICpjbHA7CiAJX19iZTMyIHN0YXR1czsKQEAgLTE5NjUsNyArMTk2OSw3IEBACiBzdGF0aWMgaW5saW5lIGludAogbmZzNF9jaGVja19maChzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHN0cnVjdCBuZnM0X3N0YXRlaWQgKnN0cCkKIHsKLQlyZXR1cm4gZmhwLT5maF9kZW50cnktPmRfaW5vZGUgIT0gc3RwLT5zdF92ZnNfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJcmV0dXJuIGZocC0+ZmhfZGVudHJ5LT5kX2lub2RlICE9IHN0cC0+c3RfdmZzX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTIyNDEsMjQgKzIyNDUsMjUgQEAKIH0KIAogX19iZTMyCi1uZnNkNF9vcGVuX2NvbmZpcm0oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X29wZW5fY29uZmlybSAqb2MsIHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKipyZXBsYXlfb3duZXIpCituZnNkNF9vcGVuX2NvbmZpcm0oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJCSAgIHN0cnVjdCBuZnNkNF9vcGVuX2NvbmZpcm0gKm9jKQogewogCV9fYmUzMiBzdGF0dXM7CiAJc3RydWN0IG5mczRfc3RhdGVvd25lciAqc29wOwogCXN0cnVjdCBuZnM0X3N0YXRlaWQgKnN0cDsKIAogCWRwcmludGsoIk5GU0Q6IG5mc2Q0X29wZW5fY29uZmlybSBvbiBmaWxlICUuKnNcbiIsCi0JCQkoaW50KWN1cnJlbnRfZmgtPmZoX2RlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJCWN1cnJlbnRfZmgtPmZoX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkJKGludCljc3RhdGUtPmN1cnJlbnRfZmguZmhfZGVudHJ5LT5kX25hbWUubGVuLAorCQkJY3N0YXRlLT5jdXJyZW50X2ZoLmZoX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCi0Jc3RhdHVzID0gZmhfdmVyaWZ5KHJxc3RwLCBjdXJyZW50X2ZoLCBTX0lGUkVHLCAwKTsKKwlzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsIFNfSUZSRUcsIDApOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKIAluZnM0X2xvY2tfc3RhdGUoKTsKIAotCWlmICgoc3RhdHVzID0gbmZzNF9wcmVwcm9jZXNzX3NlcWlkX29wKGN1cnJlbnRfZmgsIG9jLT5vY19zZXFpZCwKLQkJCQkJJm9jLT5vY19yZXFfc3RhdGVpZCwKKwlpZiAoKHN0YXR1cyA9IG5mczRfcHJlcHJvY2Vzc19zZXFpZF9vcCgmY3N0YXRlLT5jdXJyZW50X2ZoLAorCQkJCQlvYy0+b2Nfc2VxaWQsICZvYy0+b2NfcmVxX3N0YXRlaWQsCiAJCQkJCUNIRUNLX0ZIIHwgQ09ORklSTSB8IE9QRU5fU1RBVEUsCiAJCQkJCSZvYy0+b2Nfc3RhdGVvd25lciwgJnN0cCwgTlVMTCkpKQogCQlnb3RvIG91dDsgCkBAIC0yMjc4LDcgKzIyODMsNyBAQAogb3V0OgogCWlmIChvYy0+b2Nfc3RhdGVvd25lcikgewogCQluZnM0X2dldF9zdGF0ZW93bmVyKG9jLT5vY19zdGF0ZW93bmVyKTsKLQkJKnJlcGxheV9vd25lciA9IG9jLT5vY19zdGF0ZW93bmVyOworCQljc3RhdGUtPnJlcGxheV9vd25lciA9IG9jLT5vY19zdGF0ZW93bmVyOwogCX0KIAluZnM0X3VubG9ja19zdGF0ZSgpOwogCXJldHVybiBzdGF0dXM7CkBAIC0yMzEwLDIyICsyMzE1LDI1IEBACiB9CiAKIF9fYmUzMgotbmZzZDRfb3Blbl9kb3duZ3JhZGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X29wZW5fZG93bmdyYWRlICpvZCwgc3RydWN0IG5mczRfc3RhdGVvd25lciAqKnJlcGxheV9vd25lcikKK25mc2Q0X29wZW5fZG93bmdyYWRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCSAgICAgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJCSAgICAgc3RydWN0IG5mc2Q0X29wZW5fZG93bmdyYWRlICpvZCkKIHsKIAlfX2JlMzIgc3RhdHVzOwogCXN0cnVjdCBuZnM0X3N0YXRlaWQgKnN0cDsKIAl1bnNpZ25lZCBpbnQgc2hhcmVfYWNjZXNzOwogCiAJZHByaW50aygiTkZTRDogbmZzZDRfb3Blbl9kb3duZ3JhZGUgb24gZmlsZSAlLipzXG4iLCAKLQkJCShpbnQpY3VycmVudF9maC0+ZmhfZGVudHJ5LT5kX25hbWUubGVuLAotCQkJY3VycmVudF9maC0+ZmhfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCQkoaW50KWNzdGF0ZS0+Y3VycmVudF9maC5maF9kZW50cnktPmRfbmFtZS5sZW4sCisJCQljc3RhdGUtPmN1cnJlbnRfZmguZmhfZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAlpZiAoIWFjY2Vzc192YWxpZChvZC0+b2Rfc2hhcmVfYWNjZXNzKQogCQkJfHwgIWRlbnlfdmFsaWQob2QtPm9kX3NoYXJlX2RlbnkpKQogCQlyZXR1cm4gbmZzZXJyX2ludmFsOwogCiAJbmZzNF9sb2NrX3N0YXRlKCk7Ci0JaWYgKChzdGF0dXMgPSBuZnM0X3ByZXByb2Nlc3Nfc2VxaWRfb3AoY3VycmVudF9maCwgb2QtPm9kX3NlcWlkLCAKKwlpZiAoKHN0YXR1cyA9IG5mczRfcHJlcHJvY2Vzc19zZXFpZF9vcCgmY3N0YXRlLT5jdXJyZW50X2ZoLAorCQkJCQlvZC0+b2Rfc2VxaWQsCiAJCQkJCSZvZC0+b2Rfc3RhdGVpZCwgCiAJCQkJCUNIRUNLX0ZIIHwgT1BFTl9TVEFURSwgCiAJCQkJCSZvZC0+b2Rfc3RhdGVvd25lciwgJnN0cCwgTlVMTCkpKQpAQCAtMjM1NSw3ICsyMzYzLDcgQEAKIG91dDoKIAlpZiAob2QtPm9kX3N0YXRlb3duZXIpIHsKIAkJbmZzNF9nZXRfc3RhdGVvd25lcihvZC0+b2Rfc3RhdGVvd25lcik7Ci0JCSpyZXBsYXlfb3duZXIgPSBvZC0+b2Rfc3RhdGVvd25lcjsKKwkJY3N0YXRlLT5yZXBsYXlfb3duZXIgPSBvZC0+b2Rfc3RhdGVvd25lcjsKIAl9CiAJbmZzNF91bmxvY2tfc3RhdGUoKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMjM2NSwxOCArMjM3MywyMCBAQAogICogbmZzNF91bmxvY2tfc3RhdGUoKSBjYWxsZWQgYWZ0ZXIgZW5jb2RlCiAgKi8KIF9fYmUzMgotbmZzZDRfY2xvc2Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X2Nsb3NlICpjbG9zZSwgc3RydWN0IG5mczRfc3RhdGVvd25lciAqKnJlcGxheV9vd25lcikKK25mc2Q0X2Nsb3NlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqY3N0YXRlLAorCSAgICBzdHJ1Y3QgbmZzZDRfY2xvc2UgKmNsb3NlKQogewogCV9fYmUzMiBzdGF0dXM7CiAJc3RydWN0IG5mczRfc3RhdGVpZCAqc3RwOwogCiAJZHByaW50aygiTkZTRDogbmZzZDRfY2xvc2Ugb24gZmlsZSAlLipzXG4iLCAKLQkJCShpbnQpY3VycmVudF9maC0+ZmhfZGVudHJ5LT5kX25hbWUubGVuLAotCQkJY3VycmVudF9maC0+ZmhfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCQkoaW50KWNzdGF0ZS0+Y3VycmVudF9maC5maF9kZW50cnktPmRfbmFtZS5sZW4sCisJCQljc3RhdGUtPmN1cnJlbnRfZmguZmhfZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAluZnM0X2xvY2tfc3RhdGUoKTsKIAkvKiBjaGVjayBjbG9zZV9scnUgZm9yIHJlcGxheSAqLwotCWlmICgoc3RhdHVzID0gbmZzNF9wcmVwcm9jZXNzX3NlcWlkX29wKGN1cnJlbnRfZmgsIGNsb3NlLT5jbF9zZXFpZCwgCisJaWYgKChzdGF0dXMgPSBuZnM0X3ByZXByb2Nlc3Nfc2VxaWRfb3AoJmNzdGF0ZS0+Y3VycmVudF9maCwKKwkJCQkJY2xvc2UtPmNsX3NlcWlkLAogCQkJCQkmY2xvc2UtPmNsX3N0YXRlaWQsIAogCQkJCQlDSEVDS19GSCB8IE9QRU5fU1RBVEUgfCBDTE9TRV9TVEFURSwKIAkJCQkJJmNsb3NlLT5jbF9zdGF0ZW93bmVyLCAmc3RwLCBOVUxMKSkpCkBAIC0yMzk3LDIyICsyNDA3LDI0IEBACiBvdXQ6CiAJaWYgKGNsb3NlLT5jbF9zdGF0ZW93bmVyKSB7CiAJCW5mczRfZ2V0X3N0YXRlb3duZXIoY2xvc2UtPmNsX3N0YXRlb3duZXIpOwotCQkqcmVwbGF5X293bmVyID0gY2xvc2UtPmNsX3N0YXRlb3duZXI7CisJCWNzdGF0ZS0+cmVwbGF5X293bmVyID0gY2xvc2UtPmNsX3N0YXRlb3duZXI7CiAJfQogCW5mczRfdW5sb2NrX3N0YXRlKCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogX19iZTMyCi1uZnNkNF9kZWxlZ3JldHVybihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfZGVsZWdyZXR1cm4gKmRyKQorbmZzZDRfZGVsZWdyZXR1cm4oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJCSAgc3RydWN0IG5mc2Q0X2RlbGVncmV0dXJuICpkcikKIHsKIAlfX2JlMzIgc3RhdHVzOwogCi0JaWYgKChzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsIGN1cnJlbnRfZmgsIFNfSUZSRUcsIDApKSkKKwlpZiAoKHN0YXR1cyA9IGZoX3ZlcmlmeShycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgU19JRlJFRywgMCkpKQogCQlnb3RvIG91dDsKIAogCW5mczRfbG9ja19zdGF0ZSgpOwotCXN0YXR1cyA9IG5mczRfcHJlcHJvY2Vzc19zdGF0ZWlkX29wKGN1cnJlbnRfZmgsICZkci0+ZHJfc3RhdGVpZCwgREVMRUdfUkVULCBOVUxMKTsKKwlzdGF0dXMgPSBuZnM0X3ByZXByb2Nlc3Nfc3RhdGVpZF9vcCgmY3N0YXRlLT5jdXJyZW50X2ZoLAorCQkJCQkgICAgJmRyLT5kcl9zdGF0ZWlkLCBERUxFR19SRVQsIE5VTEwpOwogCW5mczRfdW5sb2NrX3N0YXRlKCk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKQEAgLTI2MzUsNyArMjY0Nyw4IEBACiAgKiAgTE9DSyBvcGVyYXRpb24gCiAgKi8KIF9fYmUzMgotbmZzZDRfbG9jayhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfbG9jayAqbG9jaywgc3RydWN0IG5mczRfc3RhdGVvd25lciAqKnJlcGxheV9vd25lcikKK25mc2Q0X2xvY2soc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgc3RydWN0IG5mc2Q0X2xvY2sgKmxvY2spCiB7CiAJc3RydWN0IG5mczRfc3RhdGVvd25lciAqb3Blbl9zb3AgPSBOVUxMOwogCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKmxvY2tfc29wID0gTlVMTDsKQEAgLTI2NTQsNyArMjY2Nyw4IEBACiAJaWYgKGNoZWNrX2xvY2tfbGVuZ3RoKGxvY2stPmxrX29mZnNldCwgbG9jay0+bGtfbGVuZ3RoKSkKIAkJIHJldHVybiBuZnNlcnJfaW52YWw7CiAKLQlpZiAoKHN0YXR1cyA9IGZoX3ZlcmlmeShycXN0cCwgY3VycmVudF9maCwgU19JRlJFRywgTUFZX0xPQ0spKSkgeworCWlmICgoc3RhdHVzID0gZmhfdmVyaWZ5KHJxc3RwLCAmY3N0YXRlLT5jdXJyZW50X2ZoLAorCQkJCVNfSUZSRUcsIE1BWV9MT0NLKSkpIHsKIAkJZHByaW50aygiTkZTRDogbmZzZDRfbG9jazogcGVybWlzc2lvbiBkZW5pZWQhXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CkBAIC0yNjc1LDcgKzI2ODksNyBAQAogCQkJZ290byBvdXQ7CiAKIAkJLyogdmFsaWRhdGUgYW5kIHVwZGF0ZSBvcGVuIHN0YXRlaWQgYW5kIG9wZW4gc2VxaWQgKi8KLQkJc3RhdHVzID0gbmZzNF9wcmVwcm9jZXNzX3NlcWlkX29wKGN1cnJlbnRfZmgsIAorCQlzdGF0dXMgPSBuZnM0X3ByZXByb2Nlc3Nfc2VxaWRfb3AoJmNzdGF0ZS0+Y3VycmVudF9maCwKIAkJCQkgICAgICAgIGxvY2stPmxrX25ld19vcGVuX3NlcWlkLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAmbG9jay0+bGtfbmV3X29wZW5fc3RhdGVpZCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRkggfCBPUEVOX1NUQVRFLApAQCAtMjcwMiw3ICsyNzE2LDcgQEAKIAkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCS8qIGxvY2sgKGxvY2sgb3duZXIgKyBsb2NrIHN0YXRlaWQpIGFscmVhZHkgZXhpc3RzICovCi0JCXN0YXR1cyA9IG5mczRfcHJlcHJvY2Vzc19zZXFpZF9vcChjdXJyZW50X2ZoLAorCQlzdGF0dXMgPSBuZnM0X3ByZXByb2Nlc3Nfc2VxaWRfb3AoJmNzdGF0ZS0+Y3VycmVudF9maCwKIAkJCQkgICAgICAgbG9jay0+bGtfb2xkX2xvY2tfc2VxaWQsIAogCQkJCSAgICAgICAmbG9jay0+bGtfb2xkX2xvY2tfc3RhdGVpZCwgCiAJCQkJICAgICAgIENIRUNLX0ZIIHwgTE9DS19TVEFURSwgCkBAIC0yNzU5LDcgKzI3NzMsNiBAQAogCWNvbmZsb2NrLmZsX29wcyA9IE5VTEw7CiAJY29uZmxvY2suZmxfbG1vcHMgPSBOVUxMOwogCWVyciA9IHBvc2l4X2xvY2tfZmlsZV9jb25mKGZpbHAsICZmaWxlX2xvY2ssICZjb25mbG9jayk7Ci0JZHByaW50aygiTkZTRDogbmZzZDRfbG9jazogcG9zaXhfbG9ja19maWxlX2NvbmYgc3RhdHVzICVkXG4iLHN0YXR1cyk7CiAJc3dpdGNoICgtZXJyKSB7CiAJY2FzZSAwOiAvKiBzdWNjZXNzISAqLwogCQl1cGRhdGVfc3RhdGVpZCgmbG9ja19zdHAtPnN0X3N0YXRlaWQpOwpAQCAtMjc4NSw3ICsyNzk4LDcgQEAKIAkJcmVsZWFzZV9zdGF0ZW93bmVyKGxvY2tfc29wKTsKIAlpZiAobG9jay0+bGtfcmVwbGF5X293bmVyKSB7CiAJCW5mczRfZ2V0X3N0YXRlb3duZXIobG9jay0+bGtfcmVwbGF5X293bmVyKTsKLQkJKnJlcGxheV9vd25lciA9IGxvY2stPmxrX3JlcGxheV9vd25lcjsKKwkJY3N0YXRlLT5yZXBsYXlfb3duZXIgPSBsb2NrLT5sa19yZXBsYXlfb3duZXI7CiAJfQogCW5mczRfdW5sb2NrX3N0YXRlKCk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTI3OTUsNyArMjgwOCw4IEBACiAgKiBMT0NLVCBvcGVyYXRpb24KICAqLwogX19iZTMyCi1uZnNkNF9sb2NrdChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfbG9ja3QgKmxvY2t0KQorbmZzZDRfbG9ja3Qoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgIHN0cnVjdCBuZnNkNF9sb2NrdCAqbG9ja3QpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgZmlsZSBmaWxlOwpAQCAtMjgxNiwxNCArMjgzMCwxNCBAQAogCWlmIChTVEFMRV9DTElFTlRJRCgmbG9ja3QtPmx0X2NsaWVudGlkKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoKHN0YXR1cyA9IGZoX3ZlcmlmeShycXN0cCwgY3VycmVudF9maCwgU19JRlJFRywgMCkpKSB7CisJaWYgKChzdGF0dXMgPSBmaF92ZXJpZnkocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsIFNfSUZSRUcsIDApKSkgewogCQlkcHJpbnRrKCJORlNEOiBuZnNkNF9sb2NrdDogZmhfdmVyaWZ5KCkgZmFpbGVkIVxuIik7CiAJCWlmIChzdGF0dXMgPT0gbmZzZXJyX3N5bWxpbmspCiAJCQlzdGF0dXMgPSBuZnNlcnJfaW52YWw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlub2RlID0gY3VycmVudF9maC0+ZmhfZGVudHJ5LT5kX2lub2RlOworCWlub2RlID0gY3N0YXRlLT5jdXJyZW50X2ZoLmZoX2RlbnRyeS0+ZF9pbm9kZTsKIAlsb2Nrc19pbml0X2xvY2soJmZpbGVfbG9jayk7CiAJc3dpdGNoIChsb2NrdC0+bHRfdHlwZSkgewogCQljYXNlIE5GUzRfUkVBRF9MVDoKQEAgLTI4NjIsNyArMjg3Niw3IEBACiAJICogb25seSB0aGUgZGVudHJ5Omlub2RlIHNldC4KIAkgKi8KIAltZW1zZXQoJmZpbGUsIDAsIHNpemVvZiAoc3RydWN0IGZpbGUpKTsKLQlmaWxlLmZfZGVudHJ5ID0gY3VycmVudF9maC0+ZmhfZGVudHJ5OworCWZpbGUuZl9wYXRoLmRlbnRyeSA9IGNzdGF0ZS0+Y3VycmVudF9maC5maF9kZW50cnk7CiAKIAlzdGF0dXMgPSBuZnNfb2s7CiAJaWYgKHBvc2l4X3Rlc3RfbG9jaygmZmlsZSwgJmZpbGVfbG9jaywgJmNvbmZsb2NrKSkgewpAQCAtMjg3NSw3ICsyODg5LDggQEAKIH0KIAogX19iZTMyCi1uZnNkNF9sb2NrdShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfbG9ja3UgKmxvY2t1LCBzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICoqcmVwbGF5X293bmVyKQorbmZzZDRfbG9ja3Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJICAgIHN0cnVjdCBuZnNkNF9sb2NrdSAqbG9ja3UpCiB7CiAJc3RydWN0IG5mczRfc3RhdGVpZCAqc3RwOwogCXN0cnVjdCBmaWxlICpmaWxwID0gTlVMTDsKQEAgLTI4OTIsNyArMjkwNyw3IEBACiAKIAluZnM0X2xvY2tfc3RhdGUoKTsKIAkJCQkJCQkJCSAgICAgICAgCi0JaWYgKChzdGF0dXMgPSBuZnM0X3ByZXByb2Nlc3Nfc2VxaWRfb3AoY3VycmVudF9maCwgCisJaWYgKChzdGF0dXMgPSBuZnM0X3ByZXByb2Nlc3Nfc2VxaWRfb3AoJmNzdGF0ZS0+Y3VycmVudF9maCwKIAkJCQkJbG9ja3UtPmx1X3NlcWlkLCAKIAkJCQkJJmxvY2t1LT5sdV9zdGF0ZWlkLCAKIAkJCQkJQ0hFQ0tfRkggfCBMT0NLX1NUQVRFLCAKQEAgLTI5MzMsNyArMjk0OCw3IEBACiBvdXQ6CiAJaWYgKGxvY2t1LT5sdV9zdGF0ZW93bmVyKSB7CiAJCW5mczRfZ2V0X3N0YXRlb3duZXIobG9ja3UtPmx1X3N0YXRlb3duZXIpOwotCQkqcmVwbGF5X293bmVyID0gbG9ja3UtPmx1X3N0YXRlb3duZXI7CisJCWNzdGF0ZS0+cmVwbGF5X293bmVyID0gbG9ja3UtPmx1X3N0YXRlb3duZXI7CiAJfQogCW5mczRfdW5sb2NrX3N0YXRlKCk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTI5NTIsNyArMjk2Nyw3IEBACiBjaGVja19mb3JfbG9ja3Moc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKmxvd25lcikKIHsKIAlzdHJ1Y3QgZmlsZV9sb2NrICoqZmxwcDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHN0YXR1cyA9IDA7CiAKIAlsb2NrX2tlcm5lbCgpOwpAQCAtMjk2OCw3ICsyOTgzLDkgQEAKIH0KIAogX19iZTMyCi1uZnNkNF9yZWxlYXNlX2xvY2tvd25lcihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfcmVsZWFzZV9sb2Nrb3duZXIgKnJsb2Nrb3duZXIpCituZnNkNF9yZWxlYXNlX2xvY2tvd25lcihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAorCQkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsCisJCQlzdHJ1Y3QgbmZzZDRfcmVsZWFzZV9sb2Nrb3duZXIgKnJsb2Nrb3duZXIpCiB7CiAJY2xpZW50aWRfdCAqY2xpZCA9ICZybG9ja293bmVyLT5ybF9jbGllbnRpZDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3A7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IGYzZjIzOWQuLjE4YWE5NDQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC0xODQ1LDE1ICsxODQ1LDExIEBACiAKIAlleHBfZ2V0KGV4cCk7CiAJaWYgKGRfbW91bnRwb2ludChkZW50cnkpKSB7Ci0JCWlmIChuZnNkX2Nyb3NzX21udChjZC0+cmRfcnFzdHAsICZkZW50cnksICZleHApKSB7Ci0JCS8qCi0JCSAqIC1FQUdBSU4gaXMgdGhlIG9ubHkgZXJyb3IgcmV0dXJuZWQgZnJvbQotCQkgKiBuZnNkX2Nyb3NzX21udCgpIGFuZCBpdCBpbmRpY2F0ZXMgdGhhdCBhbgotCQkgKiB1cC1jYWxsIGhhcyAgYmVlbiBpbml0aWF0ZWQgdG8gZmlsbCBpbiB0aGUgZXhwb3J0Ci0JCSAqIG9wdGlvbnMgb24gZXhwLiAgV2hlbiB0aGUgYW5zd2VyIGNvbWVzIGJhY2ssCi0JCSAqIHRoaXMgY2FsbCB3aWxsIGJlIHJldHJpZWQuCi0JCSAqLwotCQkJbmZzZXJyID0gbmZzZXJyX2Ryb3BpdDsKKwkJaW50IGVycjsKKworCQllcnIgPSBuZnNkX2Nyb3NzX21udChjZC0+cmRfcnFzdHAsICZkZW50cnksICZleHApOworCQlpZiAoZXJyKSB7CisJCQluZnNlcnIgPSBuZnNlcnJubyhlcnIpOwogCQkJZ290byBvdXRfcHV0OwogCQl9CiAKQEAgLTE4ODQsOSArMTg4MCwxMCBAQAogfQogCiBzdGF0aWMgaW50Ci1uZnNkNF9lbmNvZGVfZGlyZW50KHN0cnVjdCByZWFkZGlyX2NkICpjY2QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1sZW4sCi0JCSAgICBsb2ZmX3Qgb2Zmc2V0LCBpbm9fdCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCituZnNkNF9lbmNvZGVfZGlyZW50KHZvaWQgKmNjZHYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1sZW4sCisJCSAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQogeworCXN0cnVjdCByZWFkZGlyX2NkICpjY2QgPSBjY2R2OwogCXN0cnVjdCBuZnNkNF9yZWFkZGlyICpjZCA9IGNvbnRhaW5lcl9vZihjY2QsIHN0cnVjdCBuZnNkNF9yZWFkZGlyLCBjb21tb24pOwogCWludCBidWZsZW47CiAJX19iZTMyICpwID0gY2QtPmJ1ZmZlcjsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzY2FjaGUuYyBiL2ZzL25mc2QvbmZzY2FjaGUuYwppbmRleCA2MTAwYmJlLi5mOTBkNzA0IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2NhY2hlLmMKKysrIGIvZnMvbmZzZC9uZnNjYWNoZS5jCkBAIC02NiwxNCArNjYsMTMgQEAKIAkJcHJpbnRrIChLRVJOX0VSUiAibmZzZDogY2Fubm90IGFsbG9jYXRlIGFsbCAlZCBjYWNoZSBlbnRyaWVzLCBvbmx5IGdvdCAlZFxuIiwKIAkJCUNBQ0hFU0laRSwgQ0FDSEVTSVpFLWkpOwogCi0JaGFzaF9saXN0ID0ga21hbGxvYyAoSEFTSFNJWkUgKiBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpLCBHRlBfS0VSTkVMKTsKKwloYXNoX2xpc3QgPSBrY2FsbG9jIChIQVNIU0laRSwgc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoYXNoX2xpc3QpIHsKIAkJbmZzZF9jYWNoZV9zaHV0ZG93bigpOwogCQlwcmludGsgKEtFUk5fRVJSICJuZnNkOiBjYW5ub3QgYWxsb2NhdGUgJVpkIGJ5dGVzIGZvciBoYXNoIGxpc3RcbiIsCiAJCQlIQVNIU0laRSAqIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkpOwogCQlyZXR1cm47CiAJfQotCW1lbXNldChoYXNoX2xpc3QsIDAsIEhBU0hTSVpFICogc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSk7CiAKIAljYWNoZV9kaXNhYmxlZCA9IDA7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMvbmZzZC9uZnNjdGwuYwppbmRleCAzOWFlZDkwLi5lZWRmMmUzIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2N0bC5jCisrKyBiL2ZzL25mc2QvbmZzY3RsLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCiBzdGF0aWMgc3NpemVfdCBuZnNjdGxfdHJhbnNhY3Rpb25fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcykKIHsKLQlpbm9fdCBpbm8gPSAgZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfaW5vOworCWlub190IGlubyA9ICBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubzsKIAljaGFyICpkYXRhOwogCXNzaXplX3QgcnY7CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzZmguYyBiL2ZzL25mc2QvbmZzZmguYwppbmRleCA3MjdhYjNiLi5jNTlkNmZiIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2ZoLmMKKysrIGIvZnMvbmZzZC9uZnNmaC5jCkBAIC0yNCw4ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbmZzZC9uZnNkLmg+CiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWQkJTkZTRERCR19GSAotI2RlZmluZSBORlNEX1BBUkFOT0lBIDEKLS8qICNkZWZpbmUgTkZTRF9ERUJVR19WRVJCT1NFIDEgKi8KIAogCiBzdGF0aWMgaW50IG5mc2RfbnJfdmVyaWZpZWQ7CkBAIC0xNjksOSArMTY3LDExIEBACiAJCQlleHAgPSBleHBfZmluZChycXN0cC0+cnFfY2xpZW50LCAwLCB0ZmgsICZycXN0cC0+cnFfY2hhbmRsZSk7CiAJCX0KIAotCQllcnJvciA9IG5mc2Vycl9kcm9waXQ7Ci0JCWlmIChJU19FUlIoZXhwKSAmJiBQVFJfRVJSKGV4cCkgPT0gLUVBR0FJTikKKwkJaWYgKElTX0VSUihleHApICYmIChQVFJfRVJSKGV4cCkgPT0gLUVBR0FJTgorCQkJCXx8IFBUUl9FUlIoZXhwKSA9PSAtRVRJTUVET1VUKSkgeworCQkJZXJyb3IgPSBuZnNlcnJubyhQVFJfRVJSKGV4cCkpOwogCQkJZ290byBvdXQ7CisJCX0KIAogCQllcnJvciA9IG5mc2Vycl9zdGFsZTsgCiAJCWlmICghZXhwIHx8IElTX0VSUihleHApKQpAQCAtMjI4LDEzICsyMjgsMTIgQEAKIAkJCQllcnJvciA9IG5mc2Vycm5vKFBUUl9FUlIoZGVudHJ5KSk7CiAJCQlnb3RvIG91dDsKIAkJfQotI2lmZGVmIE5GU0RfUEFSQU5PSUEKKwogCQlpZiAoU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgJiYKIAkJICAgIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfRElTQ09OTkVDVEVEKSkgewogCQkJcHJpbnRrKCJuZnNkOiBmaW5kX2ZoX2RlbnRyeSByZXR1cm5lZCBhIERJU0NPTk5FQ1RFRCBkaXJlY3Rvcnk6ICVzLyVzXG4iLAogCQkJICAgICAgIGRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAkJfQotI2VuZGlmCiAKIAkJZmhwLT5maF9kZW50cnkgPSBkZW50cnk7CiAJCWZocC0+ZmhfZXhwb3J0ID0gZXhwOwpAQCAtMjY1LDEyICsyNjQsMTMgQEAKIAkvKiBGaW5hbGx5LCBjaGVjayBhY2Nlc3MgcGVybWlzc2lvbnMuICovCiAJZXJyb3IgPSBuZnNkX3Blcm1pc3Npb24oZXhwLCBkZW50cnksIGFjY2Vzcyk7CiAKLSNpZmRlZiBORlNEX1BBUkFOT0lBX0VYVFJFTUUKIAlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKCJmaF92ZXJpZnk6ICVzLyVzIHBlcm1pc3Npb24gZmFpbHVyZSwgYWNjPSV4LCBlcnJvcj0lZFxuIiwKLQkJICAgICAgIGRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lLCBhY2Nlc3MsIChlcnJvciA+PiAyNCkpOworCQlkcHJpbnRrKCJmaF92ZXJpZnk6ICVzLyVzIHBlcm1pc3Npb24gZmFpbHVyZSwgIgorCQkJImFjYz0leCwgZXJyb3I9JWRcbiIsCisJCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwKKwkJCWRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQlhY2Nlc3MsIG50b2hsKGVycm9yKSk7CiAJfQotI2VuZGlmCiBvdXQ6CiAJaWYgKGV4cCAmJiAhSVNfRVJSKGV4cCkpCiAJCWV4cF9wdXQoZXhwKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzc3ZjLmMgYi9mcy9uZnNkL25mc3N2Yy5jCmluZGV4IDBhYWNjYjAuLmZiZjVkNTEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzc3ZjLmMKKysrIGIvZnMvbmZzZC9uZnNzdmMuYwpAQCAtNzIsNyArNzIsNyBAQAogCS5wZ19wcm9nCQk9IE5GU19BQ0xfUFJPR1JBTSwKIAkucGdfbnZlcnMJCT0gTkZTRF9BQ0xfTlJWRVJTLAogCS5wZ192ZXJzCQk9IG5mc2RfYWNsX3ZlcnNpb25zLAotCS5wZ19uYW1lCQk9ICJuZnNkIiwKKwkucGdfbmFtZQkJPSAibmZzYWNsIiwKIAkucGdfY2xhc3MJCT0gIm5mc2QiLAogCS5wZ19zdGF0cwkJPSAmbmZzZF9hY2xfc3Zjc3RhdHMsCiAJLnBnX2F1dGhlbnRpY2F0ZQk9ICZzdmNfc2V0X2NsaWVudCwKQEAgLTExOCwxNiArMTE4LDE2IEBACiAJc3dpdGNoKGNoYW5nZSkgewogCWNhc2UgTkZTRF9TRVQ6CiAJCW5mc2RfdmVyc2lvbnNbdmVyc10gPSBuZnNkX3ZlcnNpb25bdmVyc107Ci0JCWJyZWFrOwogI2lmIGRlZmluZWQoQ09ORklHX05GU0RfVjJfQUNMKSB8fCBkZWZpbmVkKENPTkZJR19ORlNEX1YzX0FDTCkKIAkJaWYgKHZlcnMgPCBORlNEX0FDTF9OUlZFUlMpCi0JCQluZnNkX2FjbF92ZXJzaW9uW3ZlcnNdID0gbmZzZF9hY2xfdmVyc2lvblt2ZXJzXTsKKwkJCW5mc2RfYWNsX3ZlcnNpb25zW3ZlcnNdID0gbmZzZF9hY2xfdmVyc2lvblt2ZXJzXTsKICNlbmRpZgorCQlicmVhazsKIAljYXNlIE5GU0RfQ0xFQVI6CiAJCW5mc2RfdmVyc2lvbnNbdmVyc10gPSBOVUxMOwogI2lmIGRlZmluZWQoQ09ORklHX05GU0RfVjJfQUNMKSB8fCBkZWZpbmVkKENPTkZJR19ORlNEX1YzX0FDTCkKIAkJaWYgKHZlcnMgPCBORlNEX0FDTF9OUlZFUlMpCi0JCQluZnNkX2FjbF92ZXJzaW9uW3ZlcnNdID0gTlVMTDsKKwkJCW5mc2RfYWNsX3ZlcnNpb25zW3ZlcnNdID0gTlVMTDsKICNlbmRpZgogCQlicmVhazsKIAljYXNlIE5GU0RfVEVTVDoKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzeGRyLmMgYi9mcy9uZnNkL25mc3hkci5jCmluZGV4IGY1MjQzZjkuLjY1NTVjNTAgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzeGRyLmMKKysrIGIvZnMvbmZzZC9uZnN4ZHIuYwpAQCAtNDYyLDkgKzQ2MiwxMCBAQAogfQogCiBpbnQKLW5mc3N2Y19lbmNvZGVfZW50cnkoc3RydWN0IHJlYWRkaXJfY2QgKmNjZCwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgIGludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIGlub190IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKK25mc3N2Y19lbmNvZGVfZW50cnkodm9pZCAqY2NkdiwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgIGludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCiB7CisJc3RydWN0IHJlYWRkaXJfY2QgKmNjZCA9IGNjZHY7CiAJc3RydWN0IG5mc2RfcmVhZGRpcnJlcyAqY2QgPSBjb250YWluZXJfb2YoY2NkLCBzdHJ1Y3QgbmZzZF9yZWFkZGlycmVzLCBjb21tb24pOwogCV9fYmUzMgkqcCA9IGNkLT5idWZmZXI7CiAJaW50CWJ1Zmxlbiwgc2xlbjsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IGJiNGQ5MjYuLjgyODMyMzYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtNTksNyArNTksNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgTkZTRERCR19GQUNJTElUWQkJTkZTRERCR19GSUxFT1AKLSNkZWZpbmUgTkZTRF9QQVJBTk9JQQogCiAKIC8qIFdlIG11c3QgaWdub3JlIGZpbGVzIChidXQgb25seSBmaWxlcykgd2hpY2ggbWlnaHQgaGF2ZSBtYW5kYXRvcnkKQEAgLTk5LDcgKzk4LDcgQEAKIC8qIAogICogQ2FsbGVkIGZyb20gbmZzZF9sb29rdXAgYW5kIGVuY29kZV9kaXJlbnQuIENoZWNrIGlmIHdlIGhhdmUgY3Jvc3NlZCAKICAqIGEgbW91bnQgcG9pbnQuCi0gKiBSZXR1cm5zIC1FQUdBSU4gbGVhdmluZyAqZHBwIGFuZCAqZXhwcCB1bmNoYW5nZWQsIAorICogUmV0dXJucyAtRUFHQUlOIG9yIC1FVElNRURPVVQgbGVhdmluZyAqZHBwIGFuZCAqZXhwcCB1bmNoYW5nZWQsCiAgKiAgb3IgbmZzX29rIGhhdmluZyBwb3NzaWJseSBjaGFuZ2VkICpkcHAgYW5kICpleHBwCiAgKi8KIGludApAQCAtNzM2LDEwICs3MzUsMTAgQEAKIG5mc2Rfc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKICAgICAgICAgaW50IGVycjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0JZHByaW50aygibmZzZDogc3luYyBmaWxlICVzXG4iLCBmaWxwLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCWRwcmludGsoIm5mc2Q6IHN5bmMgZmlsZSAlc1xuIiwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQllcnI9bmZzZF9kb3N5bmMoZmlscCwgZmlscC0+Zl9kZW50cnksIGZpbHAtPmZfb3ApOworCWVycj1uZnNkX2Rvc3luYyhmaWxwLCBmaWxwLT5mX3BhdGguZGVudHJ5LCBmaWxwLT5mX29wKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCXJldHVybiBlcnI7CkBAIC04MjIsNyArODIxLDggQEAKIAkJcnFzdHAtPnJxX3Jlcy5wYWdlX2xlbiA9IHNpemU7CiAJfSBlbHNlIGlmIChwYWdlICE9IHBwWy0xXSkgewogCQlnZXRfcGFnZShwYWdlKTsKLQkJcHV0X3BhZ2UoKnBwKTsKKwkJaWYgKCpwcCkKKwkJCXB1dF9wYWdlKCpwcCk7CiAJCSpwcCA9IHBhZ2U7CiAJCXJxc3RwLT5ycV9yZXN1c2VkKys7CiAJCXJxc3RwLT5ycV9yZXMucGFnZV9sZW4gKz0gc2l6ZTsKQEAgLTg0NSw3ICs4NDUsNyBAQAogCWludAkJaG9zdF9lcnI7CiAKIAllcnIgPSBuZnNlcnJfcGVybTsKLQlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKICNpZmRlZiBNU05GUwogCWlmICgoZmhwLT5maF9leHBvcnQtPmV4X2ZsYWdzICYgTkZTRVhQX01TTkZTKSAmJgogCQkoIWxvY2tfbWF5X3JlYWQoaW5vZGUsIG9mZnNldCwgKmNvdW50KSkpCkBAIC04ODMsNyArODgzLDcgQEAKIAkJbmZzZHN0YXRzLmlvX3JlYWQgKz0gaG9zdF9lcnI7CiAJCSpjb3VudCA9IGhvc3RfZXJyOwogCQllcnIgPSAwOwotCQlmc25vdGlmeV9hY2Nlc3MoZmlsZS0+Zl9kZW50cnkpOworCQlmc25vdGlmeV9hY2Nlc3MoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJfSBlbHNlIAogCQllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CiBvdXQ6CkBAIC05MTcsMTEgKzkxNywxMSBAQAogCWVyciA9IG5mc2Vycl9wZXJtOwogCiAJaWYgKChmaHAtPmZoX2V4cG9ydC0+ZXhfZmxhZ3MgJiBORlNFWFBfTVNORlMpICYmCi0JCSghbG9ja19tYXlfd3JpdGUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsIG9mZnNldCwgY250KSkpCisJCSghbG9ja19tYXlfd3JpdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgb2Zmc2V0LCBjbnQpKSkKIAkJZ290byBvdXQ7CiAjZW5kaWYKIAotCWRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCWRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJZXhwICAgPSBmaHAtPmZoX2V4cG9ydDsKIApAQCAtOTUwLDcgKzk1MCw3IEBACiAJc2V0X2ZzKG9sZGZzKTsKIAlpZiAoaG9zdF9lcnIgPj0gMCkgewogCQluZnNkc3RhdHMuaW9fd3JpdGUgKz0gY250OwotCQlmc25vdGlmeV9tb2RpZnkoZmlsZS0+Zl9kZW50cnkpOworCQlmc25vdGlmeV9tb2RpZnkoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJfQogCiAJLyogY2xlYXIgc2V0dWlkL3NldGdpZCBmbGFnIGFmdGVyIHdyaXRlICovCkBAIC0xMjQ0LDcgKzEyNDQsNiBAQAogCV9fYmUzMgkJZXJyOwogCWludAkJaG9zdF9lcnI7CiAJX191MzIJCXZfbXRpbWU9MCwgdl9hdGltZT0wOwotCWludAkJdl9tb2RlPTA7CiAKIAllcnIgPSBuZnNlcnJfcGVybTsKIAlpZiAoIWZsZW4pCkBAIC0xMjgxLDE2ICsxMjgwLDExIEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKGNyZWF0ZW1vZGUgPT0gTkZTM19DUkVBVEVfRVhDTFVTSVZFKSB7Ci0JCS8qIHdoaWxlIHRoZSB2ZXJpZmllciB3b3VsZCBmaXQgaW4gbXRpbWUrYXRpbWUsCi0JCSAqIHNvbGFyaXM3IGdldHMgY29uZnVzZWQgKGJ1Z2lkIDQyMTg1MDgpIGlmIHRoZXNlIGhhdmUKLQkJICogdGhlIGhpZ2ggYml0IHNldCwgc28gd2UgdXNlIHRoZSBtb2RlIGFzIHdlbGwKKwkJLyogc29sYXJpczcgZ2V0cyBjb25mdXNlZCAoYnVnaWQgNDIxODUwOCkgaWYgdGhlc2UgaGF2ZQorCQkgKiB0aGUgaGlnaCBiaXQgc2V0LCBzbyBqdXN0IGNsZWFyIHRoZSBoaWdoIGJpdHMuCiAJCSAqLwogCQl2X210aW1lID0gdmVyaWZpZXJbMF0mMHg3ZmZmZmZmZjsKIAkJdl9hdGltZSA9IHZlcmlmaWVyWzFdJjB4N2ZmZmZmZmY7Ci0JCXZfbW9kZSAgPSBTX0lGUkVHCi0JCQl8ICgodmVyaWZpZXJbMF0mMHg4MDAwMDAwMCkgPj4gKDMyLTcpKSAvKiB1K3ggKi8KLQkJCXwgKCh2ZXJpZmllclsxXSYweDgwMDAwMDAwKSA+PiAoMzItOSkpIC8qIHUrciAqLwotCQkJOwogCX0KIAkKIAlpZiAoZGNoaWxkLT5kX2lub2RlKSB7CkBAIC0xMzE4LDcgKzEzMTIsNiBAQAogCQljYXNlIE5GUzNfQ1JFQVRFX0VYQ0xVU0lWRToKIAkJCWlmICggICBkY2hpbGQtPmRfaW5vZGUtPmlfbXRpbWUudHZfc2VjID09IHZfbXRpbWUKIAkJCSAgICAmJiBkY2hpbGQtPmRfaW5vZGUtPmlfYXRpbWUudHZfc2VjID09IHZfYXRpbWUKLQkJCSAgICAmJiBkY2hpbGQtPmRfaW5vZGUtPmlfbW9kZSAgPT0gdl9tb2RlCiAJCQkgICAgJiYgZGNoaWxkLT5kX2lub2RlLT5pX3NpemUgID09IDAgKQogCQkJCWJyZWFrOwogCQkJIC8qIGZhbGx0aHJ1ICovCkBAIC0xMzQwLDI2ICsxMzMzLDIyIEBACiAJfQogCiAJaWYgKGNyZWF0ZW1vZGUgPT0gTkZTM19DUkVBVEVfRVhDTFVTSVZFKSB7Ci0JCS8qIENyYW0gdGhlIHZlcmlmaWVyIGludG8gYXRpbWUvbXRpbWUvbW9kZSAqLworCQkvKiBDcmFtIHRoZSB2ZXJpZmllciBpbnRvIGF0aW1lL210aW1lICovCiAJCWlhcC0+aWFfdmFsaWQgPSBBVFRSX01USU1FfEFUVFJfQVRJTUUKLQkJCXwgQVRUUl9NVElNRV9TRVR8QVRUUl9BVElNRV9TRVQKLQkJCXwgQVRUUl9NT0RFOworCQkJfCBBVFRSX01USU1FX1NFVHxBVFRSX0FUSU1FX1NFVDsKIAkJLyogWFhYIHNvbWVvbmUgd2hvIGtub3dzIHRoaXMgYmV0dGVyIHBsZWFzZSBmaXggaXQgZm9yIG5zZWMgKi8gCiAJCWlhcC0+aWFfbXRpbWUudHZfc2VjID0gdl9tdGltZTsKIAkJaWFwLT5pYV9hdGltZS50dl9zZWMgPSB2X2F0aW1lOwogCQlpYXAtPmlhX210aW1lLnR2X25zZWMgPSAwOwogCQlpYXAtPmlhX2F0aW1lLnR2X25zZWMgPSAwOwotCQlpYXAtPmlhX21vZGUgID0gdl9tb2RlOwogCX0KIAogCS8qIFNldCBmaWxlIGF0dHJpYnV0ZXMuCi0JICogTW9kZSBoYXMgYWxyZWFkeSBiZWVuIHNldCBidXQgd2UgbWlnaHQgbmVlZCB0byByZXNldCBpdAotCSAqIGZvciBDUkVBVEVfRVhDTFVTSVZFCiAJICogSXJpeCBhcHBlYXJzIHRvIHNlbmQgYWxvbmcgdGhlIGdpZCB3aGVuIGl0IHRyaWVzIHRvCiAJICogaW1wbGVtZW50IHNldGdpZCBkaXJlY3RvcmllcyB2aWEgTkZTLiBDbGVhciBvdXQgYWxsIHRoYXQgY3J1ZnQuCiAJICovCiAgc2V0X2F0dHI6Ci0JaWYgKChpYXAtPmlhX3ZhbGlkICY9IH4oQVRUUl9VSUR8QVRUUl9HSUQpKSAhPSAwKSB7CisJaWYgKChpYXAtPmlhX3ZhbGlkICY9IH4oQVRUUl9VSUR8QVRUUl9HSUR8QVRUUl9NT0RFKSkgIT0gMCkgewogIAkJX19iZTMyIGVycjIgPSBuZnNkX3NldGF0dHIocnFzdHAsIHJlc2ZocCwgaWFwLCAwLCAodGltZV90KTApOwogCQlpZiAoZXJyMikKIAkJCWVyciA9IGVycjI7CkBAIC0xNzI2LDcgKzE3MTUsNyBAQAogICovCiBfX2JlMzIKIG5mc2RfcmVhZGRpcihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIGxvZmZfdCAqb2Zmc2V0cCwgCi0JICAgICBzdHJ1Y3QgcmVhZGRpcl9jZCAqY2RwLCBlbmNvZGVfZGVudF9mbiBmdW5jKQorCSAgICAgc3RydWN0IHJlYWRkaXJfY2QgKmNkcCwgZmlsbGRpcl90IGZ1bmMpCiB7CiAJX19iZTMyCQllcnI7CiAJaW50IAkJaG9zdF9lcnI7CkBAIC0xNzUxLDcgKzE3NDAsNyBAQAogCiAJZG8gewogCQljZHAtPmVyciA9IG5mc2Vycl9lb2Y7IC8qIHdpbGwgYmUgY2xlYXJlZCBvbiBzdWNjZXNzZnVsIHJlYWQgKi8KLQkJaG9zdF9lcnIgPSB2ZnNfcmVhZGRpcihmaWxlLCAoZmlsbGRpcl90KSBmdW5jLCBjZHApOworCQlob3N0X2VyciA9IHZmc19yZWFkZGlyKGZpbGUsIGZ1bmMsIGNkcCk7CiAJfSB3aGlsZSAoaG9zdF9lcnIgPj0wICYmIGNkcC0+ZXJyID09IG5mc19vayk7CiAJaWYgKGhvc3RfZXJyKQogCQllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CkBAIC0xODg1LDI4ICsxODc0LDI3IEBACiAJCXJldHVybiAwOwogCWlmIChjYWNoZV9zaXplIDwgMipSQVBBUk1fSEFTSF9TSVpFKQogCQljYWNoZV9zaXplID0gMipSQVBBUk1fSEFTSF9TSVpFOwotCXJhcGFybWwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmFwYXJtcykgKiBjYWNoZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlyYXBhcm1sID0ga2NhbGxvYyhjYWNoZV9zaXplLCBzaXplb2Yoc3RydWN0IHJhcGFybXMpLCBHRlBfS0VSTkVMKTsKIAotCWlmIChyYXBhcm1sICE9IE5VTEwpIHsKLQkJZHByaW50aygibmZzZDogYWxsb2NhdGluZyAlZCByZWFkYWhlYWQgYnVmZmVycy5cbiIsCi0JCQljYWNoZV9zaXplKTsKLQkJZm9yIChpID0gMCA7IGkgPCBSQVBBUk1fSEFTSF9TSVpFIDsgaSsrKSB7Ci0JCQlyYXBhcm1faGFzaFtpXS5wYl9oZWFkID0gTlVMTDsKLQkJCXNwaW5fbG9ja19pbml0KCZyYXBhcm1faGFzaFtpXS5wYl9sb2NrKTsKLQkJfQotCQlucGVyYnVja2V0ID0gY2FjaGVfc2l6ZSA+PiBSQVBBUk1fSEFTSF9CSVRTOwotCQltZW1zZXQocmFwYXJtbCwgMCwgc2l6ZW9mKHN0cnVjdCByYXBhcm1zKSAqIGNhY2hlX3NpemUpOwotCQlmb3IgKGkgPSAwOyBpIDwgY2FjaGVfc2l6ZSAtIDE7IGkrKykgewotCQkJaWYgKGkgJSBucGVyYnVja2V0ID09IDApCi0JCQkJcmFwYXJtX2hhc2hbaisrXS5wYl9oZWFkID0gcmFwYXJtbCArIGk7Ci0JCQlpZiAoaSAlIG5wZXJidWNrZXQgPCBucGVyYnVja2V0LTEpCi0JCQkJcmFwYXJtbFtpXS5wX25leHQgPSByYXBhcm1sICsgaSArIDE7Ci0JCX0KLQl9IGVsc2UgeworCWlmICghcmFwYXJtbCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAibmZzZDogQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSByZWFkLWFoZWFkIGNhY2hlLlxuIik7CisJCQkibmZzZDogQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSByZWFkLWFoZWFkIGNhY2hlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKworCWRwcmludGsoIm5mc2Q6IGFsbG9jYXRpbmcgJWQgcmVhZGFoZWFkIGJ1ZmZlcnMuXG4iLCBjYWNoZV9zaXplKTsKKwlmb3IgKGkgPSAwIDsgaSA8IFJBUEFSTV9IQVNIX1NJWkUgOyBpKyspIHsKKwkJcmFwYXJtX2hhc2hbaV0ucGJfaGVhZCA9IE5VTEw7CisJCXNwaW5fbG9ja19pbml0KCZyYXBhcm1faGFzaFtpXS5wYl9sb2NrKTsKKwl9CisJbnBlcmJ1Y2tldCA9IGNhY2hlX3NpemUgPj4gUkFQQVJNX0hBU0hfQklUUzsKKwlmb3IgKGkgPSAwOyBpIDwgY2FjaGVfc2l6ZSAtIDE7IGkrKykgeworCQlpZiAoaSAlIG5wZXJidWNrZXQgPT0gMCkKKwkJCXJhcGFybV9oYXNoW2orK10ucGJfaGVhZCA9IHJhcGFybWwgKyBpOworCQlpZiAoaSAlIG5wZXJidWNrZXQgPCBucGVyYnVja2V0LTEpCisJCQlyYXBhcm1sW2ldLnBfbmV4dCA9IHJhcGFybWwgKyBpICsgMTsKKwl9CisKIAluZnNkc3RhdHMucmFfc2l6ZSA9IGNhY2hlX3NpemU7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9udGZzL0NoYW5nZUxvZyBiL2ZzL250ZnMvQ2hhbmdlTG9nCmluZGV4IDM1Y2M0YjEuLmFmNGVmODAgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvQ2hhbmdlTG9nCisrKyBiL2ZzL250ZnMvQ2hhbmdlTG9nCkBAIC0xNyw2ICsxNywxMyBAQAogCSAgaGFwcGVuIGlzIHVuY2xlYXIgaG93ZXZlciBzbyBpdCBpcyB3b3J0aCB3YWl0aW5nIHVudGlsIHNvbWVvbmUgaGl0cwogCSAgdGhlIHByb2JsZW0uCiAKKzIuMS4yOCAtIEZpeCBhIGRlYWRsb2NrLgorCisJLSBGaXggZGVhZGxvY2sgaW4gZnMvbnRmcy9pbm9kZS5jOjpudGZzX3B1dF9pbm9kZSgpLiAgVGhhbmtzIHRvIFNlcmdleQorCSAgVmxhc292IGZvciB0aGUgcmVwb3J0IGFuZCBkZXRhaWxlZCBhbmFseXNpcyBvZiB0aGUgZGVhZGxvY2suICBUaGUgZml4CisJICBpbnZvbHZlZCBnZXR0aW5nIHJpZCBvZiBudGZzX3B1dF9pbm9kZSgpIGFsdG9nZXRoZXIgYW5kIGhlbmNlIE5URlMgbm8KKwkgIGxvbmdlciBoYXMgYSAtPnB1dF9pbm9kZSBzdXBlciBvcGVyYXRpb24uCisKIDIuMS4yNyAtIFZhcmlvdXMgYnVnIGZpeGVzIGFuZCBjbGVhbnVwcy4KIAogCS0gRml4IHR3byBjb21waWxlciB3YXJuaW5ncyBvbiBBbHBoYS4gIFRoYW5rcyB0byBBbmRyZXcgTW9ydG9uIGZvcgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9NYWtlZmlsZSBiL2ZzL250ZnMvTWFrZWZpbGUKaW5kZXggZTI3YjRlYS4uODI1NTA4MyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9NYWtlZmlsZQorKysgYi9mcy9udGZzL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCSAgICAgaW5kZXgubyBpbm9kZS5vIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gc3lzY3RsLm8gXAogCSAgICAgdW5pc3RyLm8gdXBjYXNlLm8KIAotRVhUUkFfQ0ZMQUdTID0gLUROVEZTX1ZFUlNJT049XCIyLjEuMjdcIgorRVhUUkFfQ0ZMQUdTID0gLUROVEZTX1ZFUlNJT049XCIyLjEuMjhcIgogCiBpZmVxICgkKENPTkZJR19OVEZTX0RFQlVHKSx5KQogRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2ZzL250ZnMvYW9wcy5jIGIvZnMvbnRmcy9hb3BzLmMKaW5kZXggN2IyYzhmNC4uNjI5ZTdhYiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9hb3BzLmMKKysrIGIvZnMvbnRmcy9hb3BzLmMKQEAgLTkyLDEwICs5MiwxMiBAQAogCQkJb2ZzID0gMDsKIAkJCWlmIChmaWxlX29mcyA8IGluaXRfc2l6ZSkKIAkJCQlvZnMgPSBpbml0X3NpemUgLSBmaWxlX29mczsKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fQklPX1NSQ19JUlEpOwogCQkJbWVtc2V0KGthZGRyICsgYmhfb2Zmc2V0KGJoKSArIG9mcywgMCwKIAkJCQkJYmgtPmJfc2l6ZSAtIG9mcyk7CiAJCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9CSU9fU1JDX0lSUSk7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAkJfQogCX0gZWxzZSB7CkBAIC0xNDMsMTEgKzE0NSwxMyBAQAogCQlyZWNzID0gUEFHRV9DQUNIRV9TSVpFIC8gcmVjX3NpemU7CiAJCS8qIFNob3VsZCBoYXZlIGJlZW4gdmVyaWZpZWQgYmVmb3JlIHdlIGdvdCBoZXJlLi4uICovCiAJCUJVR19PTighcmVjcyk7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9CSU9fU1JDX0lSUSk7CiAJCWZvciAoaSA9IDA7IGkgPCByZWNzOyBpKyspCiAJCQlwb3N0X3JlYWRfbXN0X2ZpeHVwKChOVEZTX1JFQ09SRCopKGthZGRyICsKIAkJCQkJaSAqIHJlY19zaXplKSwgcmVjX3NpemUpOwogCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9CSU9fU1JDX0lSUSk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJCWlmIChsaWtlbHkocGFnZV91cHRvZGF0ZSAmJiAhUGFnZUVycm9yKHBhZ2UpKSkKIAkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZGlyLmMgYi9mcy9udGZzL2Rpci5jCmluZGV4IDg1YzM2YjguLjc0Zjk5YTYgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvZGlyLmMKKysrIGIvZnMvbnRmcy9kaXIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogZGlyLmMgLSBOVEZTIGtlcm5lbCBkaXJlY3Rvcnkgb3BlcmF0aW9ucy4gUGFydCBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1IEFudG9uIEFsdGFwYXJtYWtvdgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcgQW50b24gQWx0YXBhcm1ha292CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgUmljaGFyZCBSdXNzb24KICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTEwMSw3ICsxMTAxLDcgQEAKIHsKIAlzNjQgaWFfcG9zLCBpYV9zdGFydCwgcHJldl9pYV9wb3MsIGJtcF9wb3M7CiAJbG9mZl90IGZwb3MsIGlfc2l6ZTsKLQlzdHJ1Y3QgaW5vZGUgKmJtcF92aSwgKnZkaXIgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmJtcF92aSwgKnZkaXIgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB2ZGlyLT5pX3NiOwogCW50ZnNfaW5vZGUgKm5kaXIgPSBOVEZTX0kodmRpcik7CiAJbnRmc192b2x1bWUgKnZvbCA9IE5URlNfU0Ioc2IpOwpAQCAtMTEzNiw5ICsxMTM2LDkgQEAKIAlpZiAoZnBvcyA9PSAxKSB7CiAJCW50ZnNfZGVidWcoIkNhbGxpbmcgZmlsbGRpciBmb3IgLi4gd2l0aCBsZW4gMiwgZnBvcyAweDEsICIKIAkJCQkiaW5vZGUgMHglbHgsIERUX0RJUi4iLAotCQkJCSh1bnNpZ25lZCBsb25nKXBhcmVudF9pbm8oZmlscC0+Zl9kZW50cnkpKTsKKwkJCQkodW5zaWduZWQgbG9uZylwYXJlbnRfaW5vKGZpbHAtPmZfcGF0aC5kZW50cnkpKTsKIAkJcmMgPSBmaWxsZGlyKGRpcmVudCwgIi4uIiwgMiwgZnBvcywKLQkJCQlwYXJlbnRfaW5vKGZpbHAtPmZfZGVudHJ5KSwgRFRfRElSKTsKKwkJCQlwYXJlbnRfaW5vKGZpbHAtPmZfcGF0aC5kZW50cnkpLCBEVF9ESVIpOwogCQlpZiAocmMpCiAJCQlnb3RvIGRvbmU7CiAJCWZwb3MrKzsKQEAgLTEyNDksMTYgKzEyNDksMTIgQEAKIAkvKiBHZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBpbmRleCBhbGxvY2F0aW9uIGF0dHJpYnV0ZS4gKi8KIAlpYV9wb3MgPSAoczY0KWZwb3MgLSB2b2wtPm1mdF9yZWNvcmRfc2l6ZTsKIAlpYV9tYXBwaW5nID0gdmRpci0+aV9tYXBwaW5nOwotCWJtcF92aSA9IG5kaXItPml0eXBlLmluZGV4LmJtcF9pbm87Ci0JaWYgKHVubGlrZWx5KCFibXBfdmkpKSB7Ci0JCW50ZnNfZGVidWcoIklub2RlIDB4JWx4LCByZWdldHRpbmcgaW5kZXggYml0bWFwLiIsIHZkaXItPmlfaW5vKTsKLQkJYm1wX3ZpID0gbnRmc19hdHRyX2lnZXQodmRpciwgQVRfQklUTUFQLCBJMzAsIDQpOwotCQlpZiAoSVNfRVJSKGJtcF92aSkpIHsKLQkJCW50ZnNfZXJyb3Ioc2IsICJGYWlsZWQgdG8gZ2V0IGJpdG1hcCBhdHRyaWJ1dGUuIik7Ci0JCQllcnIgPSBQVFJfRVJSKGJtcF92aSk7Ci0JCQlnb3RvIGVycl9vdXQ7Ci0JCX0KLQkJbmRpci0+aXR5cGUuaW5kZXguYm1wX2lubyA9IGJtcF92aTsKKwludGZzX2RlYnVnKCJJbm9kZSAweCVseCwgZ2V0dGluZyBpbmRleCBiaXRtYXAuIiwgdmRpci0+aV9pbm8pOworCWJtcF92aSA9IG50ZnNfYXR0cl9pZ2V0KHZkaXIsIEFUX0JJVE1BUCwgSTMwLCA0KTsKKwlpZiAoSVNfRVJSKGJtcF92aSkpIHsKKwkJbnRmc19lcnJvcihzYiwgIkZhaWxlZCB0byBnZXQgYml0bWFwIGF0dHJpYnV0ZS4iKTsKKwkJZXJyID0gUFRSX0VSUihibXBfdmkpOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCWJtcF9tYXBwaW5nID0gYm1wX3ZpLT5pX21hcHBpbmc7CiAJLyogR2V0IHRoZSBzdGFydGluZyBiaXRtYXAgYml0IHBvc2l0aW9uIGFuZCBzYW5pdHkgY2hlY2sgaXQuICovCkBAIC0xMjY2LDcgKzEyNjIsNyBAQAogCWlmICh1bmxpa2VseShibXBfcG9zID4+IDMgPj0gaV9zaXplX3JlYWQoYm1wX3ZpKSkpIHsKIAkJbnRmc19lcnJvcihzYiwgIkN1cnJlbnQgaW5kZXggYWxsb2NhdGlvbiBwb3NpdGlvbiBleGNlZWRzICIKIAkJCQkiaW5kZXggYml0bWFwIHNpemUuIik7Ci0JCWdvdG8gZXJyX291dDsKKwkJZ290byBpcHV0X2Vycl9vdXQ7CiAJfQogCS8qIEdldCB0aGUgc3RhcnRpbmcgYml0IHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IGJpdG1hcCBwYWdlLiAqLwogCWN1cl9ibXBfcG9zID0gYm1wX3BvcyAmICgoUEFHRV9DQUNIRV9TSVpFICogOCkgLSAxKTsKQEAgLTEyODIsNyArMTI3OCw3IEBACiAJCW50ZnNfZXJyb3Ioc2IsICJSZWFkaW5nIGluZGV4IGJpdG1hcCBmYWlsZWQuIik7CiAJCWVyciA9IFBUUl9FUlIoYm1wX3BhZ2UpOwogCQlibXBfcGFnZSA9IE5VTEw7Ci0JCWdvdG8gZXJyX291dDsKKwkJZ290byBpcHV0X2Vycl9vdXQ7CiAJfQogCWJtcCA9ICh1OCopcGFnZV9hZGRyZXNzKGJtcF9wYWdlKTsKIAkvKiBGaW5kIG5leHQgaW5kZXggYmxvY2sgaW4gdXNlLiAqLwpAQCAtMTQyOSw2ICsxNDI1LDcgQEAKIAkJCS8qIEBpYV9wYWdlIGlzIGFscmVhZHkgdW5sb2NrZWQgaW4gdGhpcyBjYXNlLiAqLwogCQkJbnRmc191bm1hcF9wYWdlKGlhX3BhZ2UpOwogCQkJbnRmc191bm1hcF9wYWdlKGJtcF9wYWdlKTsKKwkJCWlwdXQoYm1wX3ZpKTsKIAkJCWdvdG8gYWJvcnQ7CiAJCX0KIAl9CkBAIC0xNDM5LDYgKzE0MzYsNyBAQAogCQludGZzX3VubWFwX3BhZ2UoaWFfcGFnZSk7CiAJfQogCW50ZnNfdW5tYXBfcGFnZShibXBfcGFnZSk7CisJaXB1dChibXBfdmkpOwogRU9EOgogCS8qIFdlIGFyZSBmaW5pc2hlZCwgc2V0IGZwb3MgdG8gRU9ELiAqLwogCWZwb3MgPSBpX3NpemUgKyB2b2wtPm1mdF9yZWNvcmRfc2l6ZTsKQEAgLTE0NTUsOCArMTQ1MywxMSBAQAogCWZpbHAtPmZfcG9zID0gZnBvczsKIAlyZXR1cm4gMDsKIGVycl9vdXQ6Ci0JaWYgKGJtcF9wYWdlKQorCWlmIChibXBfcGFnZSkgewogCQludGZzX3VubWFwX3BhZ2UoYm1wX3BhZ2UpOworaXB1dF9lcnJfb3V0OgorCQlpcHV0KGJtcF92aSk7CisJfQogCWlmIChpYV9wYWdlKSB7CiAJCXVubG9ja19wYWdlKGlhX3BhZ2UpOwogCQludGZzX3VubWFwX3BhZ2UoaWFfcGFnZSk7CkBAIC0xNTI5LDE0ICsxNTMwLDIyIEBACiBzdGF0aWMgaW50IG50ZnNfZGlyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCWludCBkYXRhc3luYykKIHsKLQlzdHJ1Y3QgaW5vZGUgKnZpID0gZGVudHJ5LT5kX2lub2RlOwotCW50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTsKKwlzdHJ1Y3QgaW5vZGUgKmJtcF92aSwgKnZpID0gZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnIsIHJldDsKKwludGZzX2F0dHIgbmE7CiAKIAludGZzX2RlYnVnKCJFbnRlcmluZyBmb3IgaW5vZGUgMHglbHguIiwgdmktPmlfaW5vKTsKIAlCVUdfT04oIVNfSVNESVIodmktPmlfbW9kZSkpOwotCWlmIChOSW5vSW5kZXhBbGxvY1ByZXNlbnQobmkpICYmIG5pLT5pdHlwZS5pbmRleC5ibXBfaW5vKQotCQl3cml0ZV9pbm9kZV9ub3cobmktPml0eXBlLmluZGV4LmJtcF9pbm8sICFkYXRhc3luYyk7CisJLyogSWYgdGhlIGJpdG1hcCBhdHRyaWJ1dGUgaW5vZGUgaXMgaW4gbWVtb3J5IHN5bmMgaXQsIHRvby4gKi8KKwluYS5tZnRfbm8gPSB2aS0+aV9pbm87CisJbmEudHlwZSA9IEFUX0JJVE1BUDsKKwluYS5uYW1lID0gSTMwOworCW5hLm5hbWVfbGVuID0gNDsKKwlibXBfdmkgPSBpbG9va3VwNSh2aS0+aV9zYiwgdmktPmlfaW5vLCAodGVzdF90KW50ZnNfdGVzdF9pbm9kZSwgJm5hKTsKKwlpZiAoYm1wX3ZpKSB7CisgCQl3cml0ZV9pbm9kZV9ub3coYm1wX3ZpLCAhZGF0YXN5bmMpOworCQlpcHV0KGJtcF92aSk7CisJfQogCXJldCA9IG50ZnNfd3JpdGVfaW5vZGUodmksIDEpOwogCXdyaXRlX2lub2RlX25vdyh2aSwgIWRhdGFzeW5jKTsKIAllcnIgPSBzeW5jX2Jsb2NrZGV2KHZpLT5pX3NiLT5zX2JkZXYpOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuYwppbmRleCBhZTJmZTAwLi4wNzZjOTQyIDEwMDY0NAotLS0gYS9mcy9udGZzL2ZpbGUuYworKysgYi9mcy9udGZzL2ZpbGUuYwpAQCAtMjE2Miw3ICsyMTYyLDcgQEAKIAkJZ290byBvdXQ7CiAJaWYgKCFjb3VudCkKIAkJZ290byBvdXQ7Ci0JZXJyID0gcmVtb3ZlX3N1aWQoZmlsZS0+Zl9kZW50cnkpOworCWVyciA9IHJlbW92ZV9zdWlkKGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCWZpbGVfdXBkYXRlX3RpbWUoZmlsZSk7CmRpZmYgLS1naXQgYS9mcy9udGZzL2lub2RlLmMgYi9mcy9udGZzL2lub2RlLmMKaW5kZXggMjQ3OTg5OC4uZjhiZjhkYSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9pbm9kZS5jCisrKyBiL2ZzL250ZnMvaW5vZGUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogaW5vZGUuYyAtIE5URlMga2VybmVsIGlub2RlIGhhbmRsaW5nLiBQYXJ0IG9mIHRoZSBMaW51eC1OVEZTIHByb2plY3QuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgQW50b24gQWx0YXBhcm1ha292CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNyBBbnRvbiBBbHRhcGFybWFrb3YKICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCkBAIC05NSw3ICs5NSw3IEBACiAgKiBJZiBpbml0aWFsaXppbmcgdGhlIG5vcm1hbCBmaWxlL2RpcmVjdG9yeSBpbm9kZSwgc2V0IEBuYS0+dHlwZSB0byBBVF9VTlVTRUQuCiAgKiBJbiB0aGF0IGNhc2UsIEBuYS0+bmFtZSBhbmQgQG5hLT5uYW1lX2xlbiBzaG91bGQgYmUgc2V0IHRvIE5VTEwgYW5kIDAsCiAgKiByZXNwZWN0aXZlbHkuIEFsdGhvdWdoIHRoYXQgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBhcwotICogbnRmc19yZWFkX2lub2RlX2xvY2tlZCgpIHdpbGwgZmlsbCB0aGVtIGluIGxhdGVyLgorICogbnRmc19yZWFkX2xvY2tlZF9pbm9kZSgpIHdpbGwgZmlsbCB0aGVtIGluIGxhdGVyLgogICoKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC1lcnJubyBvbiBlcnJvci4KICAqCkBAIC0xNzEsOCArMTcxLDggQEAKIHN0cnVjdCBpbm9kZSAqbnRmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbWZ0X25vKQogewogCXN0cnVjdCBpbm9kZSAqdmk7Ci0JbnRmc19hdHRyIG5hOwogCWludCBlcnI7CisJbnRmc19hdHRyIG5hOwogCiAJbmEubWZ0X25vID0gbWZ0X25vOwogCW5hLnR5cGUgPSBBVF9VTlVTRUQ7CkBAIC0yMjksOCArMjI5LDggQEAKIAkJbnRmc2NoYXIgKm5hbWUsIHUzMiBuYW1lX2xlbikKIHsKIAlzdHJ1Y3QgaW5vZGUgKnZpOwotCW50ZnNfYXR0ciBuYTsKIAlpbnQgZXJyOworCW50ZnNfYXR0ciBuYTsKIAogCS8qIE1ha2Ugc3VyZSBubyBvbmUgY2FsbHMgbnRmc19hdHRyX2lnZXQoKSBmb3IgaW5kaWNlcy4gKi8KIAlCVUdfT04odHlwZSA9PSBBVF9JTkRFWF9BTExPQ0FUSU9OKTsKQEAgLTI4Nyw4ICsyODcsOCBAQAogCQl1MzIgbmFtZV9sZW4pCiB7CiAJc3RydWN0IGlub2RlICp2aTsKLQludGZzX2F0dHIgbmE7CiAJaW50IGVycjsKKwludGZzX2F0dHIgbmE7CiAKIAluYS5tZnRfbm8gPSBiYXNlX3ZpLT5pX2lubzsKIAluYS50eXBlID0gQVRfSU5ERVhfQUxMT0NBVElPTjsKQEAgLTQwMiw3ICs0MDIsNiBAQAogCW50ZnNfaW5pdF9ydW5saXN0KCZuaS0+YXR0cl9saXN0X3JsKTsKIAlsb2NrZGVwX3NldF9jbGFzcygmbmktPmF0dHJfbGlzdF9ybC5sb2NrLAogCQkJCSZhdHRyX2xpc3RfcmxfbG9ja19jbGFzcyk7Ci0JbmktPml0eXBlLmluZGV4LmJtcF9pbm8gPSBOVUxMOwogCW5pLT5pdHlwZS5pbmRleC5ibG9ja19zaXplID0gMDsKIAluaS0+aXR5cGUuaW5kZXgudmNuX3NpemUgPSAwOwogCW5pLT5pdHlwZS5pbmRleC5jb2xsYXRpb25fcnVsZSA9IDA7CkBAIC01NDYsNiArNTQ1LDcgQEAKIHsKIAludGZzX3ZvbHVtZSAqdm9sID0gTlRGU19TQih2aS0+aV9zYik7CiAJbnRmc19pbm9kZSAqbmk7CisJc3RydWN0IGlub2RlICpidmk7CiAJTUZUX1JFQ09SRCAqbTsKIAlBVFRSX1JFQ09SRCAqYTsKIAlTVEFOREFSRF9JTkZPUk1BVElPTiAqc2k7CkBAIC03ODAsNyArNzgwLDYgQEAKIAkgKi8KIAlpZiAoU19JU0RJUih2aS0+aV9tb2RlKSkgewogCQlsb2ZmX3QgYnZpX3NpemU7Ci0JCXN0cnVjdCBpbm9kZSAqYnZpOwogCQludGZzX2lub2RlICpibmk7CiAJCUlOREVYX1JPT1QgKmlyOwogCQl1OCAqaXJfZW5kLCAqaW5kZXhfZW5kOwpAQCAtOTg1LDEzICs5ODQsMTIgQEAKIAkJCWVyciA9IFBUUl9FUlIoYnZpKTsKIAkJCWdvdG8gdW5tX2Vycl9vdXQ7CiAJCX0KLQkJbmktPml0eXBlLmluZGV4LmJtcF9pbm8gPSBidmk7CiAJCWJuaSA9IE5URlNfSShidmkpOwogCQlpZiAoTklub0NvbXByZXNzZWQoYm5pKSB8fCBOSW5vRW5jcnlwdGVkKGJuaSkgfHwKIAkJCQlOSW5vU3BhcnNlKGJuaSkpIHsKIAkJCW50ZnNfZXJyb3IodmktPmlfc2IsICIkQklUTUFQIGF0dHJpYnV0ZSBpcyBjb21wcmVzc2VkICIKIAkJCQkJImFuZC9vciBlbmNyeXB0ZWQgYW5kL29yIHNwYXJzZS4iKTsKLQkJCWdvdG8gdW5tX2Vycl9vdXQ7CisJCQlnb3RvIGlwdXRfdW5tX2Vycl9vdXQ7CiAJCX0KIAkJLyogQ29uc2lzdGVuY3kgY2hlY2sgYml0bWFwIHNpemUgdnMuIGluZGV4IGFsbG9jYXRpb24gc2l6ZS4gKi8KIAkJYnZpX3NpemUgPSBpX3NpemVfcmVhZChidmkpOwpAQCAtMTAwMCw4ICs5OTgsMTAgQEAKIAkJCW50ZnNfZXJyb3IodmktPmlfc2IsICJJbmRleCBiaXRtYXAgdG9vIHNtYWxsICgweCVsbHgpICIKIAkJCQkJImZvciBpbmRleCBhbGxvY2F0aW9uICgweCVsbHgpLiIsCiAJCQkJCWJ2aV9zaXplIDw8IDMsIHZpLT5pX3NpemUpOwotCQkJZ290byB1bm1fZXJyX291dDsKKwkJCWdvdG8gaXB1dF91bm1fZXJyX291dDsKIAkJfQorCQkvKiBObyBsb25nZXIgbmVlZCB0aGUgYml0bWFwIGF0dHJpYnV0ZSBpbm9kZS4gKi8KKwkJaXB1dChidmkpOwogc2tpcF9sYXJnZV9kaXJfc3R1ZmY6CiAJCS8qIFNldHVwIHRoZSBvcGVyYXRpb25zIGZvciB0aGlzIGlub2RlLiAqLwogCQl2aS0+aV9vcCA9ICZudGZzX2Rpcl9pbm9kZV9vcHM7CkBAIC0xMTc2LDcgKzExNzYsOCBAQAogCQl2aS0+aV9ibG9ja3MgPSBuaS0+YWxsb2NhdGVkX3NpemUgPj4gOTsKIAludGZzX2RlYnVnKCJEb25lLiIpOwogCXJldHVybiAwOwotCitpcHV0X3VubV9lcnJfb3V0OgorCWlwdXQoYnZpKTsKIHVubV9lcnJfb3V0OgogCWlmICghZXJyKQogCQllcnIgPSAtRUlPOwpAQCAtMTY5Nyw3ICsxNjk4LDcgQEAKIAkJCQl2aS0+aV9zaXplKTsKIAkJZ290byBpcHV0X3VubV9lcnJfb3V0OwogCX0KLQluaS0+aXR5cGUuaW5kZXguYm1wX2lubyA9IGJ2aTsKKwlpcHV0KGJ2aSk7CiBza2lwX2xhcmdlX2luZGV4X3N0dWZmOgogCS8qIFNldHVwIHRoZSBvcGVyYXRpb25zIGZvciB0aGlzIGluZGV4IGlub2RlLiAqLwogCXZpLT5pX29wID0gTlVMTDsKQEAgLTE3MTQsNyArMTcxNSw2IEBACiAKIAludGZzX2RlYnVnKCJEb25lLiIpOwogCXJldHVybiAwOwotCiBpcHV0X3VubV9lcnJfb3V0OgogCWlwdXQoYnZpKTsKIHVubV9lcnJfb3V0OgpAQCAtMjE5MSwzNyArMjE5MSw2IEBACiAJcmV0dXJuIC0xOwogfQogCi0vKioKLSAqIG50ZnNfcHV0X2lub2RlIC0gaGFuZGxlciBmb3Igd2hlbiB0aGUgaW5vZGUgcmVmZXJlbmNlIGNvdW50IGlzIGRlY3JlbWVudGVkCi0gKiBAdmk6CQl2ZnMgaW5vZGUKLSAqCi0gKiBUaGUgVkZTIGNhbGxzIG50ZnNfcHV0X2lub2RlKCkgZXZlcnkgdGltZSB0aGUgaW5vZGUgcmVmZXJlbmNlIGNvdW50IChpX2NvdW50KQotICogaXMgYWJvdXQgdG8gYmUgZGVjcmVtZW50ZWQgKGJ1dCBiZWZvcmUgdGhlIGRlY3JlbWVudCBpdHNlbGYuCi0gKgotICogSWYgdGhlIGlub2RlIEB2aSBpcyBhIGRpcmVjdG9yeSB3aXRoIHR3byByZWZlcmVuY2VzLCBvbmUgb2Ygd2hpY2ggaXMgYmVpbmcKLSAqIGRyb3BwZWQsIHdlIG5lZWQgdG8gcHV0IHRoZSBhdHRyaWJ1dGUgaW5vZGUgZm9yIHRoZSBkaXJlY3RvcnkgaW5kZXggYml0bWFwLAotICogaWYgaXQgaXMgcHJlc2VudCwgb3RoZXJ3aXNlIHRoZSBkaXJlY3RvcnkgaW5vZGUgd291bGQgcmVtYWluIHBpbm5lZCBmb3IKLSAqIGV2ZXIuCi0gKi8KLXZvaWQgbnRmc19wdXRfaW5vZGUoc3RydWN0IGlub2RlICp2aSkKLXsKLQlpZiAoU19JU0RJUih2aS0+aV9tb2RlKSAmJiBhdG9taWNfcmVhZCgmdmktPmlfY291bnQpID09IDIpIHsKLQkJbnRmc19pbm9kZSAqbmkgPSBOVEZTX0kodmkpOwotCQlpZiAoTklub0luZGV4QWxsb2NQcmVzZW50KG5pKSkgewotCQkJc3RydWN0IGlub2RlICpidmkgPSBOVUxMOwotCQkJbXV0ZXhfbG9jaygmdmktPmlfbXV0ZXgpOwotCQkJaWYgKGF0b21pY19yZWFkKCZ2aS0+aV9jb3VudCkgPT0gMikgewotCQkJCWJ2aSA9IG5pLT5pdHlwZS5pbmRleC5ibXBfaW5vOwotCQkJCWlmIChidmkpCi0JCQkJCW5pLT5pdHlwZS5pbmRleC5ibXBfaW5vID0gTlVMTDsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmdmktPmlfbXV0ZXgpOwotCQkJaWYgKGJ2aSkKLQkJCQlpcHV0KGJ2aSk7Ci0JCX0KLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIF9fbnRmc19jbGVhcl9pbm9kZShudGZzX2lub2RlICpuaSkKIHsKIAkvKiBGcmVlIGFsbCBhbG9jYXRlZCBtZW1vcnkuICovCkBAIC0yMjg3LDE4ICsyMjU2LDYgQEAKIHsKIAludGZzX2lub2RlICpuaSA9IE5URlNfSSh2aSk7CiAKLQkvKgotCSAqIElmIHRoZSBpbm9kZSBAdmkgaXMgYW4gaW5kZXggaW5vZGUgd2UgbmVlZCB0byBwdXQgdGhlIGF0dHJpYnV0ZQotCSAqIGlub2RlIGZvciB0aGUgaW5kZXggYml0bWFwLCBpZiBpdCBpcyBwcmVzZW50LCBvdGhlcndpc2UgdGhlIGluZGV4Ci0JICogaW5vZGUgd291bGQgZGlzYXBwZWFyIGFuZCB0aGUgYXR0cmlidXRlIGlub2RlIGZvciB0aGUgaW5kZXggYml0bWFwCi0JICogd291bGQgbm8gbG9uZ2VyIGJlIHJlZmVyZW5jZWQgZnJvbSBhbnl3aGVyZSBhbmQgdGh1cyBpdCB3b3VsZCByZW1haW4KLQkgKiBwaW5uZWQgZm9yIGV2ZXIuCi0JICovCi0JaWYgKE5Jbm9BdHRyKG5pKSAmJiAobmktPnR5cGUgPT0gQVRfSU5ERVhfQUxMT0NBVElPTikgJiYKLQkJCU5Jbm9JbmRleEFsbG9jUHJlc2VudChuaSkgJiYgbmktPml0eXBlLmluZGV4LmJtcF9pbm8pIHsKLQkJaXB1dChuaS0+aXR5cGUuaW5kZXguYm1wX2lubyk7Ci0JCW5pLT5pdHlwZS5pbmRleC5ibXBfaW5vID0gTlVMTDsKLQl9CiAjaWZkZWYgTlRGU19SVwogCWlmIChOSW5vRGlydHkobmkpKSB7CiAJCWJvb2wgd2FzX2JhZCA9IChpc19iYWRfaW5vZGUodmkpKTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuaCBiL2ZzL250ZnMvaW5vZGUuaAppbmRleCBmMDg4MjkxLi4xMTdlYWY4IDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmgKKysrIGIvZnMvbnRmcy9pbm9kZS5oCkBAIC0yLDcgKzIsNyBAQAogICogaW5vZGUuaCAtIERlZmluZXMgZm9yIGlub2RlIHN0cnVjdHVyZXMgTlRGUyBMaW51eCBrZXJuZWwgZHJpdmVyLiBQYXJ0IG9mCiAgKgkgICAgIHRoZSBMaW51eC1OVEZTIHByb2plY3QuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgQW50b24gQWx0YXBhcm1ha292CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNyBBbnRvbiBBbHRhcGFybWFrb3YKICAqIENvcHlyaWdodCAoYykgMjAwMiBSaWNoYXJkIFJ1c3NvbgogICoKICAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMDEsOCArMTAxLDYgQEAKIAlydW5saXN0IGF0dHJfbGlzdF9ybDsJLyogUnVuIGxpc3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCB2YWx1ZS4gKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7IC8qIEl0IGlzIGEgZGlyZWN0b3J5LCAkTUZULCBvciBhbiBpbmRleCBpbm9kZS4gKi8KLQkJCXN0cnVjdCBpbm9kZSAqYm1wX2lubzsJLyogQXR0cmlidXRlIGlub2RlIGZvciB0aGUKLQkJCQkJCSAgIGluZGV4ICRCSVRNQVAuICovCiAJCQl1MzIgYmxvY2tfc2l6ZTsJCS8qIFNpemUgb2YgYW4gaW5kZXggYmxvY2suICovCiAJCQl1MzIgdmNuX3NpemU7CQkvKiBTaXplIG9mIGEgdmNuIGluIHRoaXMKIAkJCQkJCSAgIGluZGV4LiAqLwpAQCAtMzAwLDggKzI5OCw2IEBACiAKIGV4dGVybiBpbnQgbnRmc19yZWFkX2lub2RlX21vdW50KHN0cnVjdCBpbm9kZSAqdmkpOwogCi1leHRlcm4gdm9pZCBudGZzX3B1dF9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKTsKLQogZXh0ZXJuIGludCBudGZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiAKICNpZmRlZiBOVEZTX1JXCmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggMDNhMzkxYS4uYmFiZjk0ZCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCisrKyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBzdXBlci5jIC0gTlRGUyBrZXJuZWwgc3VwZXIgYmxvY2sgaGFuZGxpbmcuIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3IEFudG9uIEFsdGFwYXJtYWtvdgogICogQ29weXJpZ2h0IChjKSAyMDAxLDIwMDIgUmljaGFyZCBSdXNzb24KICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjcwMiw5ICsyNzAyLDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBudGZzX3NvcHMgPSB7CiAJLmFsbG9jX2lub2RlCT0gbnRmc19hbGxvY19iaWdfaW5vZGUsCSAgLyogVkZTOiBBbGxvY2F0ZSBuZXcgaW5vZGUuICovCiAJLmRlc3Ryb3lfaW5vZGUJPSBudGZzX2Rlc3Ryb3lfYmlnX2lub2RlLCAvKiBWRlM6IERlYWxsb2NhdGUgaW5vZGUuICovCi0JLnB1dF9pbm9kZQk9IG50ZnNfcHV0X2lub2RlLAkgIC8qIFZGUzogQ2FsbGVkIGp1c3QgYmVmb3JlCi0JCQkJCQkgICAgIHRoZSBpbm9kZSByZWZlcmVuY2UgY291bnQKLQkJCQkJCSAgICAgaXMgZGVjcmVhc2VkLiAqLwogI2lmZGVmIE5URlNfUlcKIAkvLy5kaXJ0eV9pbm9kZQk9IE5VTEwsCQkJLyogVkZTOiBDYWxsZWQgZnJvbQogCS8vCQkJCQkgICBfX21hcmtfaW5vZGVfZGlydHkoKS4gKi8KQEAgLTMyNjEsNyArMzI1OCw3IEBACiB9CiAKIE1PRFVMRV9BVVRIT1IoIkFudG9uIEFsdGFwYXJtYWtvdiA8YWlhMjFAY2FudGFiLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTlRGUyAxLjIvMy54IGRyaXZlciAtIENvcHlyaWdodCAoYykgMjAwMS0yMDA2IEFudG9uIEFsdGFwYXJtYWtvdiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOVEZTIDEuMi8zLnggZHJpdmVyIC0gQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcgQW50b24gQWx0YXBhcm1ha292Iik7CiBNT0RVTEVfVkVSU0lPTihOVEZTX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogI2lmZGVmIERFQlVHCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5jIGIvZnMvb2NmczIvYWxsb2MuYwppbmRleCBlZGM5MWNhLi5mMjdlNTM3OCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuYworKysgYi9mcy9vY2ZzMi9hbGxvYy5jCkBAIC0xOTU5LDcgKzE5NTksNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JKnRjID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IG9jZnMyX3RydW5jYXRlX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwkqdGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfdHJ1bmNhdGVfY29udGV4dCksIEdGUF9LRVJORUwpOwogCWlmICghKCp0YykpIHsKIAkJc3RhdHVzID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYW9wcy5jIGIvZnMvb2NmczIvYW9wcy5jCmluZGV4IDJmNzI2OGUuLjkzNjI4YjAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FvcHMuYworKysgYi9mcy9vY2ZzMi9hb3BzLmMKQEAgLTU0MCw4ICs1NDAsNyBAQAogCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCiB7CiAJaW50IHJldDsKLQl1NjQgdmJvX21heDsgLyogZmlsZSBvZmZzZXQsIG1heF9ibG9ja3MgZnJvbSBpYmxvY2sgKi8KLQl1NjQgcF9ibGtubzsKKwl1NjQgcF9ibGtubywgaW5vZGVfYmxvY2tzOwogCWludCBjb250aWdfYmxvY2tzOwogCXVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKIAl1bnNpZ25lZCBsb25nIG1heF9ibG9ja3MgPSBiaF9yZXN1bHQtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOwpAQCAtNTUwLDEyICs1NDksMjMgQEAKIAkgKiBuaWNlbHkgYWxpZ25lZCBhbmQgb2YgdGhlIHJpZ2h0IHNpemUsIHNvIHRoZXJlJ3Mgbm8gbmVlZAogCSAqIGZvciB1cyB0byBjaGVjayBhbnkgb2YgdGhhdC4gKi8KIAotCXZib19tYXggPSAoKHU2NClpYmxvY2sgKyBtYXhfYmxvY2tzKSA8PCBibG9ja3NpemVfYml0czsKLQogCXNwaW5fbG9jaygmT0NGUzJfSShpbm9kZSktPmlwX2xvY2spOwotCWlmICgoaWJsb2NrICsgbWF4X2Jsb2NrcykgPgotCSAgICBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsCi0JCQkJICAgICBPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMpKSB7CisJaW5vZGVfYmxvY2tzID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLAorCQkJCQkJT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzKTsKKworCS8qCisJICogRm9yIGEgcmVhZCB3aGljaCBiZWdpbnMgcGFzdCB0aGUgZW5kIG9mIGZpbGUsIHdlIHJldHVybiBhIGhvbGUuCisJICovCisJaWYgKCFjcmVhdGUgJiYgKGlibG9jayA+PSBpbm9kZV9ibG9ja3MpKSB7CisJCXNwaW5fdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKgorCSAqIEFueSB3cml0ZSBwYXN0IEVPRiBpcyBub3QgYWxsb3dlZCBiZWNhdXNlIHdlJ2QgYmUgZXh0ZW5kaW5nLgorCSAqLworCWlmIChjcmVhdGUgJiYgKGlibG9jayArIG1heF9ibG9ja3MpID4gaW5vZGVfYmxvY2tzKSB7CiAJCXNwaW5fdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gYmFpbDsKQEAgLTU5NSw3ICs2MDUsNyBAQAogCQkJICAgICBzc2l6ZV90IGJ5dGVzLAogCQkJICAgICB2b2lkICpwcml2YXRlKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCS8qIHRoaXMgaW8ncyBzdWJtaXR0ZXIgc2hvdWxkIG5vdCBoYXZlIHVubG9ja2VkIHRoaXMgYmVmb3JlIHdlIGNvdWxkICovCiAJQlVHX09OKCFvY2ZzMl9pb2NiX2lzX3J3X2xvY2tlZChpb2NiKSk7CkBAIC02MTEsNyArNjIxLDcgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nLT5ob3N0OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmctPmhvc3Q7CiAJaW50IHJldDsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggNGNkOWE5NS4uMjc3Y2E2NyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC0xNDQ3LDYgKzE0NDcsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBvMmhiX3JlZ2lvbl9waWRfcmVhZChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcGFnZSkKK3sKKwlpZiAoIXJlZy0+aHJfdGFzaykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXVcbiIsIHJlZy0+aHJfdGFzay0+cGlkKTsKK30KKwogc3RydWN0IG8yaGJfcmVnaW9uX2F0dHJpYnV0ZSB7CiAJc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSBhdHRyOwogCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgbzJoYl9yZWdpb24gKiwgY2hhciAqKTsKQEAgLTE0ODUsMTEgKzE0OTQsMTkgQEAKIAkuc3RvcmUJPSBvMmhiX3JlZ2lvbl9kZXZfd3JpdGUsCiB9OwogCitzdGF0aWMgc3RydWN0IG8yaGJfcmVnaW9uX2F0dHJpYnV0ZSBvMmhiX3JlZ2lvbl9hdHRyX3BpZCA9IHsKKyAgICAgICAuYXR0ciAgID0geyAuY2Ffb3duZXIgPSBUSElTX01PRFVMRSwKKyAgICAgICAgICAgICAgICAgICAuY2FfbmFtZSA9ICJwaWQiLAorICAgICAgICAgICAgICAgICAgIC5jYV9tb2RlID0gU19JUlVHTyB8IFNfSVJVU1IgfSwKKyAgICAgICAuc2hvdyAgID0gbzJoYl9yZWdpb25fcGlkX3JlYWQsCit9OworCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqbzJoYl9yZWdpb25fYXR0cnNbXSA9IHsKIAkmbzJoYl9yZWdpb25fYXR0cl9ibG9ja19ieXRlcy5hdHRyLAogCSZvMmhiX3JlZ2lvbl9hdHRyX3N0YXJ0X2Jsb2NrLmF0dHIsCiAJJm8yaGJfcmVnaW9uX2F0dHJfYmxvY2tzLmF0dHIsCiAJJm8yaGJfcmVnaW9uX2F0dHJfZGV2LmF0dHIsCisJJm8yaGJfcmVnaW9uX2F0dHJfcGlkLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTE1NTMsNyArMTU3MCw3IEBACiAJc3RydWN0IG8yaGJfcmVnaW9uICpyZWcgPSBOVUxMOwogCXN0cnVjdCBjb25maWdfaXRlbSAqcmV0ID0gTlVMTDsKIAotCXJlZyA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvMmhiX3JlZ2lvbiksIEdGUF9LRVJORUwpOworCXJlZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvMmhiX3JlZ2lvbiksIEdGUF9LRVJORUwpOwogCWlmIChyZWcgPT0gTlVMTCkKIAkJZ290byBvdXQ7IC8qIEVOT01FTSAqLwogCkBAIC0xNjc5LDcgKzE2OTYsNyBAQAogCXN0cnVjdCBvMmhiX2hlYXJ0YmVhdF9ncm91cCAqaHMgPSBOVUxMOwogCXN0cnVjdCBjb25maWdfZ3JvdXAgKnJldCA9IE5VTEw7CiAKLQlocyA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvMmhiX2hlYXJ0YmVhdF9ncm91cCksIEdGUF9LRVJORUwpOworCWhzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG8yaGJfaGVhcnRiZWF0X2dyb3VwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGhzID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKaW5kZXggZDExNzUzYy4uYjE3MzMzYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYwpAQCAtMzUsNyArMzUsNyBAQAogLyogZm9yIG5vdyB3ZSBvcGVyYXRlIHVuZGVyIHRoZSBhc3NlcnRpb24gdGhhdCB0aGVyZSBjYW4gYmUgb25seSBvbmUKICAqIGNsdXN0ZXIgYWN0aXZlIGF0IGEgdGltZS4gIENoYW5naW5nIHRoaXMgd2lsbCByZXF1aXJlIHRyaWNrbGluZwogICogY2x1c3RlciByZWZlcmVuY2VzIHRocm91Z2hvdXQgd2hlcmUgbm9kZXMgYXJlIGxvb2tlZCB1cCAqLwotc3RhdGljIHN0cnVjdCBvMm5tX2NsdXN0ZXIgKm8ybm1fc2luZ2xlX2NsdXN0ZXIgPSBOVUxMOworc3RydWN0IG8ybm1fY2x1c3RlciAqbzJubV9zaW5nbGVfY2x1c3RlciA9IE5VTEw7CiAKICNkZWZpbmUgT0NGUzJfTUFYX0hCX0NUTF9QQVRIIDI1Ngogc3RhdGljIGNoYXIgb2NmczJfaGJfY3RsX3BhdGhbT0NGUzJfTUFYX0hCX0NUTF9QQVRIXSA9ICIvc2Jpbi9vY2ZzMl9oYl9jdGwiOwpAQCAtOTcsMTcgKzk3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG8ybm1fZ2V0X2hiX2N0bF9wYXRoKTsKIAotc3RydWN0IG8ybm1fY2x1c3RlciB7Ci0Jc3RydWN0IGNvbmZpZ19ncm91cAljbF9ncm91cDsKLQl1bnNpZ25lZAkJY2xfaGFzX2xvY2FsOjE7Ci0JdTgJCQljbF9sb2NhbF9ub2RlOwotCXJ3bG9ja190CQljbF9ub2Rlc19sb2NrOwotCXN0cnVjdCBvMm5tX25vZGUgIAkqY2xfbm9kZXNbTzJOTV9NQVhfTk9ERVNdOwotCXN0cnVjdCByYl9yb290CQljbF9ub2RlX2lwX3RyZWU7Ci0JLyogdGhpcyBiaXRtYXAgaXMgcGFydCBvZiBhIGhhY2sgZm9yIGRpc2sgYml0bWFwLi4gd2lsbCBnbyBldmVudHVhbGx5LiAtIHphYiAqLwotCXVuc2lnbmVkIGxvbmcJY2xfbm9kZXNfYml0bWFwW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKLX07Ci0KIHN0cnVjdCBvMm5tX25vZGUgKm8ybm1fZ2V0X25vZGVfYnlfbnVtKHU4IG5vZGVfbnVtKQogewogCXN0cnVjdCBvMm5tX25vZGUgKm5vZGUgPSBOVUxMOwpAQCAtNTQzLDYgKzUzMiwxNzkgQEAKIH0KICNlbmRpZgogCitzdHJ1Y3QgbzJubV9jbHVzdGVyX2F0dHJpYnV0ZSB7CisJc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgbzJubV9jbHVzdGVyICosIGNoYXIgKik7CisJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbzJubV9jbHVzdGVyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKK3N0YXRpYyBzc2l6ZV90IG8ybm1fY2x1c3Rlcl9hdHRyX3dyaXRlKGNvbnN0IGNoYXIgKnBhZ2UsIHNzaXplX3QgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwljaGFyICpwID0gKGNoYXIgKilwYWdlOworCisJdG1wID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDApOworCWlmICghcCB8fCAoKnAgJiYgKCpwICE9ICdcbicpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodG1wID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmICh0bXAgPj0gKHUzMiktMSkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwkqdmFsID0gdG1wOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBvMm5tX2NsdXN0ZXJfYXR0cl9pZGxlX3RpbWVvdXRfbXNfcmVhZCgKKwlzdHJ1Y3QgbzJubV9jbHVzdGVyICpjbHVzdGVyLCBjaGFyICpwYWdlKQoreworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIldVxuIiwgY2x1c3Rlci0+Y2xfaWRsZV90aW1lb3V0X21zKTsKK30KKworc3RhdGljIHNzaXplX3QgbzJubV9jbHVzdGVyX2F0dHJfaWRsZV90aW1lb3V0X21zX3dyaXRlKAorCXN0cnVjdCBvMm5tX2NsdXN0ZXIgKmNsdXN0ZXIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkKK3sKKwlzc2l6ZV90IHJldDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJcmV0ID0gIG8ybm1fY2x1c3Rlcl9hdHRyX3dyaXRlKHBhZ2UsIGNvdW50LCAmdmFsKTsKKworCWlmIChyZXQgPiAwKSB7CisJCWlmIChjbHVzdGVyLT5jbF9pZGxlX3RpbWVvdXRfbXMgIT0gdmFsCisJCQkmJiBvMm5ldF9udW1fY29ubmVjdGVkX3BlZXJzKCkpIHsKKwkJCW1sb2coTUxfTk9USUNFLAorCQkJICAgICAibzJuZXQ6IGNhbm5vdCBjaGFuZ2UgaWRsZSB0aW1lb3V0IGFmdGVyICIKKwkJCSAgICAgInRoZSBmaXJzdCBwZWVyIGhhcyBhZ3JlZWQgdG8gaXQuIgorCQkJICAgICAiICAlZCBjb25uZWN0ZWQgcGVlcnNcbiIsCisJCQkgICAgIG8ybmV0X251bV9jb25uZWN0ZWRfcGVlcnMoKSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9IGVsc2UgaWYgKHZhbCA8PSBjbHVzdGVyLT5jbF9rZWVwYWxpdmVfZGVsYXlfbXMpIHsKKwkJCW1sb2coTUxfTk9USUNFLCAibzJuZXQ6IGlkbGUgdGltZW91dCBtdXN0IGJlIGxhcmdlciAiCisJCQkgICAgICJ0aGFuIGtlZXBhbGl2ZSBkZWxheVxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJY2x1c3Rlci0+Y2xfaWRsZV90aW1lb3V0X21zID0gdmFsOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgbzJubV9jbHVzdGVyX2F0dHJfa2VlcGFsaXZlX2RlbGF5X21zX3JlYWQoCisJc3RydWN0IG8ybm1fY2x1c3RlciAqY2x1c3RlciwgY2hhciAqcGFnZSkKK3sKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXVcbiIsIGNsdXN0ZXItPmNsX2tlZXBhbGl2ZV9kZWxheV9tcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG8ybm1fY2x1c3Rlcl9hdHRyX2tlZXBhbGl2ZV9kZWxheV9tc193cml0ZSgKKwlzdHJ1Y3QgbzJubV9jbHVzdGVyICpjbHVzdGVyLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpCit7CisJc3NpemVfdCByZXQ7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXJldCA9ICBvMm5tX2NsdXN0ZXJfYXR0cl93cml0ZShwYWdlLCBjb3VudCwgJnZhbCk7CisKKwlpZiAocmV0ID4gMCkgeworCQlpZiAoY2x1c3Rlci0+Y2xfa2VlcGFsaXZlX2RlbGF5X21zICE9IHZhbAorCQkgICAgJiYgbzJuZXRfbnVtX2Nvbm5lY3RlZF9wZWVycygpKSB7CisJCQltbG9nKE1MX05PVElDRSwKKwkJCSAgICAgIm8ybmV0OiBjYW5ub3QgY2hhbmdlIGtlZXBhbGl2ZSBkZWxheSBhZnRlciIKKwkJCSAgICAgIiB0aGUgZmlyc3QgcGVlciBoYXMgYWdyZWVkIHRvIGl0LiIKKwkJCSAgICAgIiAgJWQgY29ubmVjdGVkIHBlZXJzXG4iLAorCQkJICAgICBvMm5ldF9udW1fY29ubmVjdGVkX3BlZXJzKCkpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJfSBlbHNlIGlmICh2YWwgPj0gY2x1c3Rlci0+Y2xfaWRsZV90aW1lb3V0X21zKSB7CisJCQltbG9nKE1MX05PVElDRSwgIm8ybmV0OiBrZWVwYWxpdmUgZGVsYXkgbXVzdCBiZSAiCisJCQkgICAgICJzbWFsbGVyIHRoYW4gaWRsZSB0aW1lb3V0XG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQljbHVzdGVyLT5jbF9rZWVwYWxpdmVfZGVsYXlfbXMgPSB2YWw7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBvMm5tX2NsdXN0ZXJfYXR0cl9yZWNvbm5lY3RfZGVsYXlfbXNfcmVhZCgKKwlzdHJ1Y3QgbzJubV9jbHVzdGVyICpjbHVzdGVyLCBjaGFyICpwYWdlKQoreworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIldVxuIiwgY2x1c3Rlci0+Y2xfcmVjb25uZWN0X2RlbGF5X21zKTsKK30KKworc3RhdGljIHNzaXplX3QgbzJubV9jbHVzdGVyX2F0dHJfcmVjb25uZWN0X2RlbGF5X21zX3dyaXRlKAorCXN0cnVjdCBvMm5tX2NsdXN0ZXIgKmNsdXN0ZXIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gbzJubV9jbHVzdGVyX2F0dHJfd3JpdGUocGFnZSwgY291bnQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbHVzdGVyLT5jbF9yZWNvbm5lY3RfZGVsYXlfbXMpOworfQorc3RhdGljIHN0cnVjdCBvMm5tX2NsdXN0ZXJfYXR0cmlidXRlIG8ybm1fY2x1c3Rlcl9hdHRyX2lkbGVfdGltZW91dF9tcyA9IHsKKwkuYXR0cgk9IHsgLmNhX293bmVyID0gVEhJU19NT0RVTEUsCisJCSAgICAuY2FfbmFtZSA9ICJpZGxlX3RpbWVvdXRfbXMiLAorCQkgICAgLmNhX21vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAorCS5zaG93CT0gbzJubV9jbHVzdGVyX2F0dHJfaWRsZV90aW1lb3V0X21zX3JlYWQsCisJLnN0b3JlCT0gbzJubV9jbHVzdGVyX2F0dHJfaWRsZV90aW1lb3V0X21zX3dyaXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBvMm5tX2NsdXN0ZXJfYXR0cmlidXRlIG8ybm1fY2x1c3Rlcl9hdHRyX2tlZXBhbGl2ZV9kZWxheV9tcyA9IHsKKwkuYXR0cgk9IHsgLmNhX293bmVyID0gVEhJU19NT0RVTEUsCisJCSAgICAuY2FfbmFtZSA9ICJrZWVwYWxpdmVfZGVsYXlfbXMiLAorCQkgICAgLmNhX21vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAorCS5zaG93CT0gbzJubV9jbHVzdGVyX2F0dHJfa2VlcGFsaXZlX2RlbGF5X21zX3JlYWQsCisJLnN0b3JlCT0gbzJubV9jbHVzdGVyX2F0dHJfa2VlcGFsaXZlX2RlbGF5X21zX3dyaXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBvMm5tX2NsdXN0ZXJfYXR0cmlidXRlIG8ybm1fY2x1c3Rlcl9hdHRyX3JlY29ubmVjdF9kZWxheV9tcyA9IHsKKwkuYXR0cgk9IHsgLmNhX293bmVyID0gVEhJU19NT0RVTEUsCisJCSAgICAuY2FfbmFtZSA9ICJyZWNvbm5lY3RfZGVsYXlfbXMiLAorCQkgICAgLmNhX21vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAorCS5zaG93CT0gbzJubV9jbHVzdGVyX2F0dHJfcmVjb25uZWN0X2RlbGF5X21zX3JlYWQsCisJLnN0b3JlCT0gbzJubV9jbHVzdGVyX2F0dHJfcmVjb25uZWN0X2RlbGF5X21zX3dyaXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm8ybm1fY2x1c3Rlcl9hdHRyc1tdID0geworCSZvMm5tX2NsdXN0ZXJfYXR0cl9pZGxlX3RpbWVvdXRfbXMuYXR0ciwKKwkmbzJubV9jbHVzdGVyX2F0dHJfa2VlcGFsaXZlX2RlbGF5X21zLmF0dHIsCisJJm8ybm1fY2x1c3Rlcl9hdHRyX3JlY29ubmVjdF9kZWxheV9tcy5hdHRyLAorCU5VTEwsCit9Oworc3RhdGljIHNzaXplX3QgbzJubV9jbHVzdGVyX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IG8ybm1fY2x1c3RlciAqY2x1c3RlciA9IHRvX28ybm1fY2x1c3RlcihpdGVtKTsKKwlzdHJ1Y3QgbzJubV9jbHVzdGVyX2F0dHJpYnV0ZSAqbzJubV9jbHVzdGVyX2F0dHIgPQorCQljb250YWluZXJfb2YoYXR0ciwgc3RydWN0IG8ybm1fY2x1c3Rlcl9hdHRyaWJ1dGUsIGF0dHIpOworCXNzaXplX3QgcmV0ID0gMDsKKworCWlmIChvMm5tX2NsdXN0ZXJfYXR0ci0+c2hvdykKKwkJcmV0ID0gbzJubV9jbHVzdGVyX2F0dHItPnNob3coY2x1c3RlciwgcGFnZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgbzJubV9jbHVzdGVyX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbzJubV9jbHVzdGVyICpjbHVzdGVyID0gdG9fbzJubV9jbHVzdGVyKGl0ZW0pOworCXN0cnVjdCBvMm5tX2NsdXN0ZXJfYXR0cmlidXRlICpvMm5tX2NsdXN0ZXJfYXR0ciA9CisJCWNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgbzJubV9jbHVzdGVyX2F0dHJpYnV0ZSwgYXR0cik7CisJc3NpemVfdCByZXQ7CisKKwlpZiAobzJubV9jbHVzdGVyX2F0dHItPnN0b3JlID09IE5VTEwpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gbzJubV9jbHVzdGVyX2F0dHItPnN0b3JlKGNsdXN0ZXIsIHBhZ2UsIGNvdW50KTsKKwlpZiAocmV0IDwgY291bnQpCisJCWdvdG8gb3V0Oworb3V0OgorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKm8ybm1fbm9kZV9ncm91cF9tYWtlX2l0ZW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCiAJCQkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC01NTIsNyArNzE0LDcgQEAKIAlpZiAoc3RybGVuKG5hbWUpID4gTzJOTV9NQVhfTkFNRV9MRU4pCiAJCWdvdG8gb3V0OyAvKiBFTkFNRVRPT0xPTkcgKi8KIAotCW5vZGUgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbzJubV9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvMm5tX25vZGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAobm9kZSA9PSBOVUxMKQogCQlnb3RvIG91dDsgLyogRU5PTUVNICovCiAKQEAgLTYyNCwxMCArNzg2LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIG8ybm1fY2x1c3Rlcl9pdGVtX29wcyA9IHsKIAkucmVsZWFzZQk9IG8ybm1fY2x1c3Rlcl9yZWxlYXNlLAorCS5zaG93X2F0dHJpYnV0ZQkJPSBvMm5tX2NsdXN0ZXJfc2hvdywKKwkuc3RvcmVfYXR0cmlidXRlCT0gbzJubV9jbHVzdGVyX3N0b3JlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG8ybm1fY2x1c3Rlcl90eXBlID0gewogCS5jdF9pdGVtX29wcwk9ICZvMm5tX2NsdXN0ZXJfaXRlbV9vcHMsCisJLmN0X2F0dHJzCT0gbzJubV9jbHVzdGVyX2F0dHJzLAogCS5jdF9vd25lcgk9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtNjYwLDggKzgyNSw4IEBACiAJaWYgKG8ybm1fc2luZ2xlX2NsdXN0ZXIpCiAJCWdvdG8gb3V0OyAvKiBFTk9TUEMgKi8KIAotCWNsdXN0ZXIgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbzJubV9jbHVzdGVyKSwgR0ZQX0tFUk5FTCk7Ci0JbnMgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbzJubV9ub2RlX2dyb3VwKSwgR0ZQX0tFUk5FTCk7CisJY2x1c3RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvMm5tX2NsdXN0ZXIpLCBHRlBfS0VSTkVMKTsKKwlucyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvMm5tX25vZGVfZ3JvdXApLCBHRlBfS0VSTkVMKTsKIAlkZWZzID0ga2NhbGxvYygzLCBzaXplb2Yoc3RydWN0IGNvbmZpZ19ncm91cCAqKSwgR0ZQX0tFUk5FTCk7CiAJbzJoYl9ncm91cCA9IG8yaGJfYWxsb2NfaGJfc2V0KCk7CiAJaWYgKGNsdXN0ZXIgPT0gTlVMTCB8fCBucyA9PSBOVUxMIHx8IG8yaGJfZ3JvdXAgPT0gTlVMTCB8fCBkZWZzID09IE5VTEwpCkBAIC02NzgsNiArODQzLDkgQEAKIAljbHVzdGVyLT5jbF9ncm91cC5kZWZhdWx0X2dyb3Vwc1syXSA9IE5VTEw7CiAJcndsb2NrX2luaXQoJmNsdXN0ZXItPmNsX25vZGVzX2xvY2spOwogCWNsdXN0ZXItPmNsX25vZGVfaXBfdHJlZSA9IFJCX1JPT1Q7CisJY2x1c3Rlci0+Y2xfcmVjb25uZWN0X2RlbGF5X21zID0gTzJORVRfUkVDT05ORUNUX0RFTEFZX01TX0RFRkFVTFQ7CisJY2x1c3Rlci0+Y2xfaWRsZV90aW1lb3V0X21zICAgID0gTzJORVRfSURMRV9USU1FT1VUX01TX0RFRkFVTFQ7CisJY2x1c3Rlci0+Y2xfa2VlcGFsaXZlX2RlbGF5X21zID0gTzJORVRfS0VFUEFMSVZFX0RFTEFZX01TX0RFRkFVTFQ7CiAKIAlyZXQgPSAmY2x1c3Rlci0+Y2xfZ3JvdXA7CiAJbzJubV9zaW5nbGVfY2x1c3RlciA9IGNsdXN0ZXI7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmggYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmgKaW5kZXggZmNlODAzMy4uOGZiMjNjYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5oCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuaApAQCAtNTMsNiArNTMsMjMgQEAKIAl1bnNpZ25lZCBsb25nCQluZF9zZXRfYXR0cmlidXRlczsKIH07CiAKK3N0cnVjdCBvMm5tX2NsdXN0ZXIgeworCXN0cnVjdCBjb25maWdfZ3JvdXAJY2xfZ3JvdXA7CisJdW5zaWduZWQJCWNsX2hhc19sb2NhbDoxOworCXU4CQkJY2xfbG9jYWxfbm9kZTsKKwlyd2xvY2tfdAkJY2xfbm9kZXNfbG9jazsKKwlzdHJ1Y3QgbzJubV9ub2RlICAJKmNsX25vZGVzW08yTk1fTUFYX05PREVTXTsKKwlzdHJ1Y3QgcmJfcm9vdAkJY2xfbm9kZV9pcF90cmVlOworCXVuc2lnbmVkIGludAkJY2xfaWRsZV90aW1lb3V0X21zOworCXVuc2lnbmVkIGludAkJY2xfa2VlcGFsaXZlX2RlbGF5X21zOworCXVuc2lnbmVkIGludAkJY2xfcmVjb25uZWN0X2RlbGF5X21zOworCisJLyogdGhpcyBiaXRtYXAgaXMgcGFydCBvZiBhIGhhY2sgZm9yIGRpc2sgYml0bWFwLi4gd2lsbCBnbyBldmVudHVhbGx5LiAtIHphYiAqLworCXVuc2lnbmVkIGxvbmcJY2xfbm9kZXNfYml0bWFwW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKK307CisKK2V4dGVybiBzdHJ1Y3QgbzJubV9jbHVzdGVyICpvMm5tX3NpbmdsZV9jbHVzdGVyOworCiB1OCBvMm5tX3RoaXNfbm9kZSh2b2lkKTsKIAogaW50IG8ybm1fY29uZmlndXJlZF9ub2RlX21hcCh1bnNpZ25lZCBsb25nICptYXAsIHVuc2lnbmVkIGJ5dGVzKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCmluZGV4IDliMzIwOWQuLmFlNGZmNGEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuYwpAQCAtMTQ3LDYgKzE0NywyOCBAQAogc3RhdGljIHZvaWQgbzJuZXRfc2Nfc2VuZF9rZWVwX3JlcShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgbzJuZXRfaWRsZV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgbzJuZXRfc2NfcG9zdHBvbmVfaWRsZShzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjKTsKK3N0YXRpYyB2b2lkIG8ybmV0X3NjX3Jlc2V0X2lkbGVfdGltZXIoc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYyk7CisKKy8qCisgKiBGSVhNRTogVGhlc2Ugc2hvdWxkIHVzZSB0b19vMm5tX2NsdXN0ZXJfZnJvbV9ub2RlKCksIGJ1dCB3ZSBlbmQgdXAKKyAqIGxvc2luZyBvdXIgcGFyZW50IGxpbmsgdG8gdGhlIGNsdXN0ZXIgZHVyaW5nIHNodXRkb3duLiBUaGlzIGNhbiBiZQorICogc29sdmVkIGJ5IGFkZGluZyBhIHByZS1yZW1vdmFsIGNhbGxiYWNrIHRvIGNvbmZpZ2ZzLCBvciBwYXNzaW5nCisgKiBhcm91bmQgdGhlIGNsdXN0ZXIgd2l0aCB0aGUgbm9kZS4gLWplZmZtCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG8ybmV0X3JlY29ubmVjdF9kZWxheShzdHJ1Y3QgbzJubV9ub2RlICpub2RlKQoreworCXJldHVybiBvMm5tX3NpbmdsZV9jbHVzdGVyLT5jbF9yZWNvbm5lY3RfZGVsYXlfbXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG8ybmV0X2tlZXBhbGl2ZV9kZWxheShzdHJ1Y3QgbzJubV9ub2RlICpub2RlKQoreworCXJldHVybiBvMm5tX3NpbmdsZV9jbHVzdGVyLT5jbF9rZWVwYWxpdmVfZGVsYXlfbXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG8ybmV0X2lkbGVfdGltZW91dChzdHJ1Y3QgbzJubV9ub2RlICpub2RlKQoreworCXJldHVybiBvMm5tX3NpbmdsZV9jbHVzdGVyLT5jbF9pZGxlX3RpbWVvdXRfbXM7Cit9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG8ybmV0X3N5c19lcnJfdG9fZXJybm8oZW51bSBvMm5ldF9zeXN0ZW1fZXJyb3IgZXJyKQogewpAQCAtMjcxLDYgKzI5Myw4IEBACiB7CiAJc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYyA9IGNvbnRhaW5lcl9vZihrcmVmLAogCQkJCQlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIsIHNjX2tyZWYpOworCUJVR19PTih0aW1lcl9wZW5kaW5nKCZzYy0+c2NfaWRsZV90aW1lb3V0KSk7CisKIAlzY2xvZyhzYywgInJlbGVhc2luZ1xuIik7CiAKIAlpZiAoc2MtPnNjX3NvY2spIHsKQEAgLTMwMCw3ICszMjQsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0ZTKTsKLQlzYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpzYyksIEdGUF9OT0ZTKTsKKwlzYyA9IGt6YWxsb2Moc2l6ZW9mKCpzYyksIEdGUF9OT0ZTKTsKIAlpZiAoc2MgPT0gTlVMTCB8fCBwYWdlID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCkBAIC0zNTYsNiArMzgwLDEzIEBACiAJCXNjX3B1dChzYyk7CiB9CiAKK3N0YXRpYyBhdG9taWNfdCBvMm5ldF9jb25uZWN0ZWRfcGVlcnMgPSBBVE9NSUNfSU5JVCgwKTsKKworaW50IG8ybmV0X251bV9jb25uZWN0ZWRfcGVlcnModm9pZCkKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJm8ybmV0X2Nvbm5lY3RlZF9wZWVycyk7Cit9CisKIHN0YXRpYyB2b2lkIG8ybmV0X3NldF9ubl9zdGF0ZShzdHJ1Y3QgbzJuZXRfbm9kZSAqbm4sCiAJCQkgICAgICAgc3RydWN0IG8ybmV0X3NvY2tfY29udGFpbmVyICpzYywKIAkJCSAgICAgICB1bnNpZ25lZCB2YWxpZCwgaW50IGVycikKQEAgLTM2Niw2ICszOTcsMTEgQEAKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmbm4tPm5uX2xvY2spOwogCisJaWYgKG9sZF9zYyAmJiAhc2MpCisJCWF0b21pY19kZWMoJm8ybmV0X2Nvbm5lY3RlZF9wZWVycyk7CisJZWxzZSBpZiAoIW9sZF9zYyAmJiBzYykKKwkJYXRvbWljX2luYygmbzJuZXRfY29ubmVjdGVkX3BlZXJzKTsKKwogCS8qIHRoZSBub2RlIG51bSBjb21wYXJpc29uIGFuZCBzaW5nbGUgY29ubmVjdC9hY2NlcHQgcGF0aCBzaG91bGQgc3RvcAogCSAqIGFuIG5vbi1udWxsIHNjIGZyb20gYmVpbmcgb3ZlcndyaXR0ZW4gd2l0aCBhbm90aGVyICovCiAJQlVHX09OKHNjICYmIG5uLT5ubl9zYyAmJiBubi0+bm5fc2MgIT0gc2MpOwpAQCAtNDI0LDkgKzQ2MCw5IEBACiAJCS8qIGRlbGF5IGlmIHdlJ3JlIHdpdGhpbmcgYSBSRUNPTk5FQ1RfREVMQVkgb2YgdGhlCiAJCSAqIGxhc3QgYXR0ZW1wdCAqLwogCQlkZWxheSA9IChubi0+bm5fbGFzdF9jb25uZWN0X2F0dGVtcHQgKwotCQkJIG1zZWNzX3RvX2ppZmZpZXMoTzJORVRfUkVDT05ORUNUX0RFTEFZX01TKSkKKwkJCSBtc2Vjc190b19qaWZmaWVzKG8ybmV0X3JlY29ubmVjdF9kZWxheShzYy0+c2Nfbm9kZSkpKQogCQkJLSBqaWZmaWVzOwotCQlpZiAoZGVsYXkgPiBtc2Vjc190b19qaWZmaWVzKE8yTkVUX1JFQ09OTkVDVF9ERUxBWV9NUykpCisJCWlmIChkZWxheSA+IG1zZWNzX3RvX2ppZmZpZXMobzJuZXRfcmVjb25uZWN0X2RlbGF5KHNjLT5zY19ub2RlKSkpCiAJCQlkZWxheSA9IDA7CiAJCW1sb2coTUxfQ09OTiwgInF1ZXVlaW5nIGNvbm4gYXR0ZW1wdCBpbiAlbHUgamlmZmllc1xuIiwgZGVsYXkpOwogCQlxdWV1ZV9kZWxheWVkX3dvcmsobzJuZXRfd3EsICZubi0+bm5fY29ubmVjdF93b3JrLCBkZWxheSk7CkBAIC02NzgsNyArNzE0LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0gICAgICAgCW5taCA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvMm5ldF9tc2dfaGFuZGxlciksIEdGUF9OT0ZTKTsKKyAgICAgICAJbm1oID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG8ybmV0X21zZ19oYW5kbGVyKSwgR0ZQX05PRlMpOwogCWlmIChubWggPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTEwOTksMTMgKzExMzUsNTEgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCS8qCisJICogRW5zdXJlIHRpbWVvdXRzIGFyZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgbm9kZXMsIG90aGVyd2lzZQorCSAqIHdlIGNhbiBlbmQgdXAgd2l0aCBvbmUgbm9kZSB0aGlua2luZyB0aGF0IHRoZSBvdGhlciBtdXN0IGJlIGRvd24sCisJICogYnV0IGlzbid0LiBUaGlzIGNhbiB1bHRpbWF0ZWx5IGNhdXNlIGNvcnJ1cHRpb24uCisJICovCisJaWYgKGJlMzJfdG9fY3B1KGhhbmQtPm8ybmV0X2lkbGVfdGltZW91dF9tcykgIT0KKwkJCQlvMm5ldF9pZGxlX3RpbWVvdXQoc2MtPnNjX25vZGUpKSB7CisJCW1sb2coTUxfTk9USUNFLCBTQ19OT0RFRl9GTVQgIiB1c2VzIGEgbmV0d29yayBpZGxlIHRpbWVvdXQgb2YgIgorCQkgICAgICIldSBtcywgYnV0IHdlIHVzZSAldSBtcyBsb2NhbGx5LiAgZGlzY29ubmVjdGluZ1xuIiwKKwkJICAgICBTQ19OT0RFRl9BUkdTKHNjKSwKKwkJICAgICBiZTMyX3RvX2NwdShoYW5kLT5vMm5ldF9pZGxlX3RpbWVvdXRfbXMpLAorCQkgICAgIG8ybmV0X2lkbGVfdGltZW91dChzYy0+c2Nfbm9kZSkpOworCQlvMm5ldF9lbnN1cmVfc2h1dGRvd24obm4sIHNjLCAtRU5PVENPTk4pOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGJlMzJfdG9fY3B1KGhhbmQtPm8ybmV0X2tlZXBhbGl2ZV9kZWxheV9tcykgIT0KKwkJCW8ybmV0X2tlZXBhbGl2ZV9kZWxheShzYy0+c2Nfbm9kZSkpIHsKKwkJbWxvZyhNTF9OT1RJQ0UsIFNDX05PREVGX0ZNVCAiIHVzZXMgYSBrZWVwYWxpdmUgZGVsYXkgb2YgIgorCQkgICAgICIldSBtcywgYnV0IHdlIHVzZSAldSBtcyBsb2NhbGx5LiAgZGlzY29ubmVjdGluZ1xuIiwKKwkJICAgICBTQ19OT0RFRl9BUkdTKHNjKSwKKwkJICAgICBiZTMyX3RvX2NwdShoYW5kLT5vMm5ldF9rZWVwYWxpdmVfZGVsYXlfbXMpLAorCQkgICAgIG8ybmV0X2tlZXBhbGl2ZV9kZWxheShzYy0+c2Nfbm9kZSkpOworCQlvMm5ldF9lbnN1cmVfc2h1dGRvd24obm4sIHNjLCAtRU5PVENPTk4pOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGJlMzJfdG9fY3B1KGhhbmQtPm8yaGJfaGVhcnRiZWF0X3RpbWVvdXRfbXMpICE9CisJCQlPMkhCX01BWF9XUklURV9USU1FT1VUX01TKSB7CisJCW1sb2coTUxfTk9USUNFLCBTQ19OT0RFRl9GTVQgIiB1c2VzIGEgaGVhcnRiZWF0IHRpbWVvdXQgb2YgIgorCQkgICAgICIldSBtcywgYnV0IHdlIHVzZSAldSBtcyBsb2NhbGx5LiAgZGlzY29ubmVjdGluZ1xuIiwKKwkJICAgICBTQ19OT0RFRl9BUkdTKHNjKSwKKwkJICAgICBiZTMyX3RvX2NwdShoYW5kLT5vMmhiX2hlYXJ0YmVhdF90aW1lb3V0X21zKSwKKwkJICAgICBPMkhCX01BWF9XUklURV9USU1FT1VUX01TKTsKKwkJbzJuZXRfZW5zdXJlX3NodXRkb3duKG5uLCBzYywgLUVOT1RDT05OKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCXNjLT5zY19oYW5kc2hha2Vfb2sgPSAxOwogCiAJc3Bpbl9sb2NrKCZubi0+bm5fbG9jayk7CiAJLyogc2V0IHZhbGlkIGFuZCBxdWV1ZSB0aGUgaWRsZSB0aW1lcnMgb25seSBpZiBpdCBoYXNuJ3QgYmVlbgogCSAqIHNodXQgZG93biBhbHJlYWR5ICovCiAJaWYgKG5uLT5ubl9zYyA9PSBzYykgewotCQlvMm5ldF9zY19wb3N0cG9uZV9pZGxlKHNjKTsKKwkJbzJuZXRfc2NfcmVzZXRfaWRsZV90aW1lcihzYyk7CiAJCW8ybmV0X3NldF9ubl9zdGF0ZShubiwgc2MsIDEsIDApOwogCX0KIAlzcGluX3VubG9jaygmbm4tPm5uX2xvY2spOwpAQCAtMTEzMSw2ICsxMjA1LDIzIEBACiAJc2Nsb2coc2MsICJyZWNlaXZpbmdcbiIpOwogCWRvX2dldHRpbWVvZmRheSgmc2MtPnNjX3R2X2FkdmFuY2Vfc3RhcnQpOwogCisJaWYgKHVubGlrZWx5KHNjLT5zY19oYW5kc2hha2Vfb2sgPT0gMCkpIHsKKwkJaWYoc2MtPnNjX3BhZ2Vfb2ZmIDwgc2l6ZW9mKHN0cnVjdCBvMm5ldF9oYW5kc2hha2UpKSB7CisJCQlkYXRhID0gcGFnZV9hZGRyZXNzKHNjLT5zY19wYWdlKSArIHNjLT5zY19wYWdlX29mZjsKKwkJCWRhdGFsZW4gPSBzaXplb2Yoc3RydWN0IG8ybmV0X2hhbmRzaGFrZSkgLSBzYy0+c2NfcGFnZV9vZmY7CisJCQlyZXQgPSBvMm5ldF9yZWN2X3RjcF9tc2coc2MtPnNjX3NvY2ssIGRhdGEsIGRhdGFsZW4pOworCQkJaWYgKHJldCA+IDApCisJCQkJc2MtPnNjX3BhZ2Vfb2ZmICs9IHJldDsKKwkJfQorCisJCWlmIChzYy0+c2NfcGFnZV9vZmYgPT0gc2l6ZW9mKHN0cnVjdCBvMm5ldF9oYW5kc2hha2UpKSB7CisJCQlvMm5ldF9jaGVja19oYW5kc2hha2Uoc2MpOworCQkJaWYgKHVubGlrZWx5KHNjLT5zY19oYW5kc2hha2Vfb2sgPT0gMCkpCisJCQkJcmV0ID0gLUVQUk9UTzsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKIAkvKiBkbyB3ZSBuZWVkIG1vcmUgaGVhZGVyPyAqLwogCWlmIChzYy0+c2NfcGFnZV9vZmYgPCBzaXplb2Yoc3RydWN0IG8ybmV0X21zZykpIHsKIAkJZGF0YSA9IHBhZ2VfYWRkcmVzcyhzYy0+c2NfcGFnZSkgKyBzYy0+c2NfcGFnZV9vZmY7CkBAIC0xMTM4LDE1ICsxMjI5LDYgQEAKIAkJcmV0ID0gbzJuZXRfcmVjdl90Y3BfbXNnKHNjLT5zY19zb2NrLCBkYXRhLCBkYXRhbGVuKTsKIAkJaWYgKHJldCA+IDApIHsKIAkJCXNjLT5zY19wYWdlX29mZiArPSByZXQ7Ci0KLQkJCS8qIHRoaXMgd29ya2luZyByZWxpZXMgb24gdGhlIGhhbmRzaGFrZSBiZWluZwotCQkJICogc21hbGxlciB0aGFuIHRoZSBub3JtYWwgbWVzc2FnZSBoZWFkZXIgKi8KLQkJCWlmIChzYy0+c2NfcGFnZV9vZmYgPj0gc2l6ZW9mKHN0cnVjdCBvMm5ldF9oYW5kc2hha2UpJiYKLQkJCSAgICAhc2MtPnNjX2hhbmRzaGFrZV9vayAmJiBvMm5ldF9jaGVja19oYW5kc2hha2Uoc2MpKSB7Ci0JCQkJcmV0ID0gLUVQUk9UTzsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQogCQkJLyogb25seSBzd2FiIGluY29taW5nIGhlcmUuLiB3ZSBjYW4KIAkJCSAqIG9ubHkgZ2V0IGhlcmUgb25jZSBhcyB3ZSBjcm9zcyBmcm9tCiAJCQkgKiBiZWluZyB1bmRlciB0byBvdmVyICovCkBAIC0xMjQ4LDYgKzEzMzAsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBvMm5ldF9pbml0aWFsaXplX2hhbmRzaGFrZSh2b2lkKQoreworCW8ybmV0X2hhbmQtPm8yaGJfaGVhcnRiZWF0X3RpbWVvdXRfbXMgPSBjcHVfdG9fYmUzMigKKwkJTzJIQl9NQVhfV1JJVEVfVElNRU9VVF9NUyk7CisJbzJuZXRfaGFuZC0+bzJuZXRfaWRsZV90aW1lb3V0X21zID0gY3B1X3RvX2JlMzIoCisJCW8ybmV0X2lkbGVfdGltZW91dChOVUxMKSk7CisJbzJuZXRfaGFuZC0+bzJuZXRfa2VlcGFsaXZlX2RlbGF5X21zID0gY3B1X3RvX2JlMzIoCisJCW8ybmV0X2tlZXBhbGl2ZV9kZWxheShOVUxMKSk7CisJbzJuZXRfaGFuZC0+bzJuZXRfcmVjb25uZWN0X2RlbGF5X21zID0gY3B1X3RvX2JlMzIoCisJCW8ybmV0X3JlY29ubmVjdF9kZWxheShOVUxMKSk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBjYWxsZWQgd2hlbiBhIGNvbm5lY3QgY29tcGxldGVzIGFuZCBhZnRlciBhIHNvY2sgaXMgYWNjZXB0ZWQuICB0aGUKQEAgLTEyNjIsNiArMTM1Niw3IEBACiAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpTzJORVRfUFJPVE9DT0xfVkVSU0lPTiwKIAkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KG8ybmV0X2hhbmQtPmNvbm5lY3Rvcl9pZCkpOwogCisJbzJuZXRfaW5pdGlhbGl6ZV9oYW5kc2hha2UoKTsKIAlvMm5ldF9zZW5kcGFnZShzYywgbzJuZXRfaGFuZCwgc2l6ZW9mKCpvMm5ldF9oYW5kKSk7CiAJc2NfcHV0KHNjKTsKIH0KQEAgLTEyODcsOCArMTM4MiwxMCBAQAogCiAJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAibzJuZXQ6IGNvbm5lY3Rpb24gdG8gIiBTQ19OT0RFRl9GTVQgIiBoYXMgYmVlbiBpZGxlIGZvciAxMCAiCi0JICAgICAic2Vjb25kcywgc2h1dHRpbmcgaXQgZG93bi5cbiIsIFNDX05PREVGX0FSR1Moc2MpKTsKKwlwcmludGsoS0VSTl9JTkZPICJvMm5ldDogY29ubmVjdGlvbiB0byAiIFNDX05PREVGX0ZNVCAiIGhhcyBiZWVuIGlkbGUgZm9yICV1LiV1ICIKKwkgICAgICJzZWNvbmRzLCBzaHV0dGluZyBpdCBkb3duLlxuIiwgU0NfTk9ERUZfQVJHUyhzYyksCisJCSAgICAgbzJuZXRfaWRsZV90aW1lb3V0KHNjLT5zY19ub2RlKSAvIDEwMDAsCisJCSAgICAgbzJuZXRfaWRsZV90aW1lb3V0KHNjLT5zY19ub2RlKSAlIDEwMDApOwogCW1sb2coTUxfTk9USUNFLCAiaGVyZSBhcmUgc29tZSB0aW1lcyB0aGF0IG1pZ2h0IGhlbHAgZGVidWcgdGhlICIKIAkgICAgICJzaXR1YXRpb246ICh0bXIgJWxkLiVsZCBub3cgJWxkLiVsZCBkciAlbGQuJWxkIGFkdiAiCiAJICAgICAiJWxkLiVsZDolbGQuJWxkIGZ1bmMgKCUwOHg6JXUpICVsZC4lbGQ6JWxkLiVsZClcbiIsCkBAIC0xMzA2LDE0ICsxNDAzLDIxIEBACiAJbzJuZXRfc2NfcXVldWVfd29yayhzYywgJnNjLT5zY19zaHV0ZG93bl93b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgbzJuZXRfc2NfcG9zdHBvbmVfaWRsZShzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjKQorc3RhdGljIHZvaWQgbzJuZXRfc2NfcmVzZXRfaWRsZV90aW1lcihzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjKQogewogCW8ybmV0X3NjX2NhbmNlbF9kZWxheWVkX3dvcmsoc2MsICZzYy0+c2Nfa2VlcGFsaXZlX3dvcmspOwogCW8ybmV0X3NjX3F1ZXVlX2RlbGF5ZWRfd29yayhzYywgJnNjLT5zY19rZWVwYWxpdmVfd29yaywKLQkJCQkgICAgTzJORVRfS0VFUEFMSVZFX0RFTEFZX1NFQ1MgKiBIWik7CisJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMobzJuZXRfa2VlcGFsaXZlX2RlbGF5KHNjLT5zY19ub2RlKSkpOwogCWRvX2dldHRpbWVvZmRheSgmc2MtPnNjX3R2X3RpbWVyKTsKIAltb2RfdGltZXIoJnNjLT5zY19pZGxlX3RpbWVvdXQsCi0JCSAgamlmZmllcyArIChPMk5FVF9JRExFX1RJTUVPVVRfU0VDUyAqIEhaKSk7CisJICAgICAgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG8ybmV0X2lkbGVfdGltZW91dChzYy0+c2Nfbm9kZSkpKTsKK30KKworc3RhdGljIHZvaWQgbzJuZXRfc2NfcG9zdHBvbmVfaWRsZShzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjKQoreworCS8qIE9ubHkgcHVzaCBvdXQgYW4gZXhpc3RpbmcgdGltZXIgKi8KKwlpZiAodGltZXJfcGVuZGluZygmc2MtPnNjX2lkbGVfdGltZW91dCkpCisJCW8ybmV0X3NjX3Jlc2V0X2lkbGVfdGltZXIoc2MpOwogfQogCiAvKiB0aGlzIHdvcmsgZnVuYyBpcyBraWNrZWQgd2hlbmV2ZXIgYSBwYXRoIHNldHMgdGhlIG5uIHN0YXRlIHdoaWNoIGRvZXNuJ3QKQEAgLTE0MzUsOSArMTUzOSwxMiBAQAogCiAJc3Bpbl9sb2NrKCZubi0+bm5fbG9jayk7CiAJaWYgKCFubi0+bm5fc2NfdmFsaWQpIHsKKwkJc3RydWN0IG8ybm1fbm9kZSAqbm9kZSA9IG5uLT5ubl9zYy0+c2Nfbm9kZTsKIAkJbWxvZyhNTF9FUlJPUiwgIm5vIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgd2l0aCBub2RlICV1IGFmdGVyICIKLQkJICAgICAiJXUgc2Vjb25kcywgZ2l2aW5nIHVwIGFuZCByZXR1cm5pbmcgZXJyb3JzLlxuIiwKLQkJICAgICBvMm5ldF9udW1fZnJvbV9ubihubiksIE8yTkVUX0lETEVfVElNRU9VVF9TRUNTKTsKKwkJICAgICAiJXUuJXUgc2Vjb25kcywgZ2l2aW5nIHVwIGFuZCByZXR1cm5pbmcgZXJyb3JzLlxuIiwKKwkJICAgICBvMm5ldF9udW1fZnJvbV9ubihubiksCisJCSAgICAgbzJuZXRfaWRsZV90aW1lb3V0KG5vZGUpIC8gMTAwMCwKKwkJICAgICBvMm5ldF9pZGxlX3RpbWVvdXQobm9kZSkgJSAxMDAwKTsKIAogCQlvMm5ldF9zZXRfbm5fc3RhdGUobm4sIE5VTEwsIDAsIC1FTk9UQ09OTik7CiAJfQpAQCAtMTQ3OCw2ICsxNTg1LDggQEAKIAogCWlmIChub2RlX251bSAhPSBvMm5tX3RoaXNfbm9kZSgpKQogCQlvMm5ldF9kaXNjb25uZWN0X25vZGUobm9kZSk7CisKKwlCVUdfT04oYXRvbWljX3JlYWQoJm8ybmV0X2Nvbm5lY3RlZF9wZWVycykgPCAwKTsKIH0KIAogc3RhdGljIHZvaWQgbzJuZXRfaGJfbm9kZV91cF9jYihzdHJ1Y3QgbzJubV9ub2RlICpub2RlLCBpbnQgbm9kZV9udW0sCkBAIC0xNDg5LDE0ICsxNTk4LDE0IEBACiAKIAkvKiBlbnN1cmUgYW4gaW1tZWRpYXRlIGNvbm5lY3QgYXR0ZW1wdCAqLwogCW5uLT5ubl9sYXN0X2Nvbm5lY3RfYXR0ZW1wdCA9IGppZmZpZXMgLQotCQkobXNlY3NfdG9famlmZmllcyhPMk5FVF9SRUNPTk5FQ1RfREVMQVlfTVMpICsgMSk7CisJCShtc2Vjc190b19qaWZmaWVzKG8ybmV0X3JlY29ubmVjdF9kZWxheShub2RlKSkgKyAxKTsKIAogCWlmIChub2RlX251bSAhPSBvMm5tX3RoaXNfbm9kZSgpKSB7CiAJCS8qIGhlYXJ0YmVhdCBkb2Vzbid0IHdvcmsgdW5sZXNzIGEgbG9jYWwgbm9kZSBudW1iZXIgaXMKIAkJICogY29uZmlndXJlZCBhbmQgZG9pbmcgc28gYnJpbmdzIHVwIHRoZSBvMm5ldF93cSwgc28gd2UgY2FuCiAJCSAqIHVzZSBpdC4uICovCiAJCXF1ZXVlX2RlbGF5ZWRfd29yayhvMm5ldF93cSwgJm5uLT5ubl9jb25uZWN0X2V4cGlyZWQsCi0JCQkJICAgTzJORVRfSURMRV9USU1FT1VUX1NFQ1MgKiBIWik7CisJCSAgICAgICAgICAgICAgICAgICBtc2Vjc190b19qaWZmaWVzKG8ybmV0X2lkbGVfdGltZW91dChub2RlKSkpOwogCiAJCS8qIGJlbGlldmUgaXQgb3Igbm90LCBhY2NlcHQgYW5kIG5vZGUgaGVhcmJlYXRpbmcgdGVzdGluZwogCQkgKiBjYW4gc3VjY2VlZCBmb3IgdGhpcyBub2RlIGJlZm9yZSB3ZSBnb3QgaGVyZS4uIHNvCkBAIC0xNjQxLDYgKzE3NTAsNyBAQAogCW8ybmV0X3JlZ2lzdGVyX2NhbGxiYWNrcyhzYy0+c2Nfc29jay0+c2ssIHNjKTsKIAlvMm5ldF9zY19xdWV1ZV93b3JrKHNjLCAmc2MtPnNjX3J4X3dvcmspOwogCisJbzJuZXRfaW5pdGlhbGl6ZV9oYW5kc2hha2UoKTsKIAlvMm5ldF9zZW5kcGFnZShzYywgbzJuZXRfaGFuZCwgc2l6ZW9mKCpvMm5ldF9oYW5kKSk7CiAKIG91dDoKQEAgLTE4MDgsOSArMTkxOCw5IEBACiAKIAlvMnF1b19pbml0KCk7CiAKLQlvMm5ldF9oYW5kID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IG8ybmV0X2hhbmRzaGFrZSksIEdGUF9LRVJORUwpOwotCW8ybmV0X2tlZXBfcmVxID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IG8ybmV0X21zZyksIEdGUF9LRVJORUwpOwotCW8ybmV0X2tlZXBfcmVzcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvMm5ldF9tc2cpLCBHRlBfS0VSTkVMKTsKKwlvMm5ldF9oYW5kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG8ybmV0X2hhbmRzaGFrZSksIEdGUF9LRVJORUwpOworCW8ybmV0X2tlZXBfcmVxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG8ybmV0X21zZyksIEdGUF9LRVJORUwpOworCW8ybmV0X2tlZXBfcmVzcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvMm5ldF9tc2cpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW8ybmV0X2hhbmQgfHwgIW8ybmV0X2tlZXBfcmVxIHx8ICFvMm5ldF9rZWVwX3Jlc3ApIHsKIAkJa2ZyZWUobzJuZXRfaGFuZCk7CiAJCWtmcmVlKG8ybmV0X2tlZXBfcmVxKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmggYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5oCmluZGV4IDYxNmZmMmIuLjIxYTRlNDMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmgKKysrIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuaApAQCAtNTQsNiArNTQsMTMgQEAKIAogI2RlZmluZSBPMk5FVF9NQVhfUEFZTE9BRF9CWVRFUyAgKDQwOTYgLSBzaXplb2Yoc3RydWN0IG8ybmV0X21zZykpCiAKKy8qIHNhbWUgYXMgaGIgZGVsYXksIHdlJ3JlIHdhaXRpbmcgZm9yIGFub3RoZXIgbm9kZSB0byByZWNvZ25pemUgb3VyIGhiICovCisjZGVmaW5lIE8yTkVUX1JFQ09OTkVDVF9ERUxBWV9NU19ERUZBVUxUCTIwMDAKKworI2RlZmluZSBPMk5FVF9LRUVQQUxJVkVfREVMQVlfTVNfREVGQVVMVAk1MDAwCisjZGVmaW5lIE8yTkVUX0lETEVfVElNRU9VVF9NU19ERUZBVUxUCQkxMDAwMAorCisKIC8qIFRPRE86IGZpZ3VyZSB0aGlzIG91dC4uLi4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IG8ybmV0X2xpbmtfZG93bihpbnQgZXJyLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewpAQCAtMTAxLDYgKzEwOCw3IEBACiBpbnQgbzJuZXRfc3RhcnRfbGlzdGVuaW5nKHN0cnVjdCBvMm5tX25vZGUgKm5vZGUpOwogdm9pZCBvMm5ldF9zdG9wX2xpc3RlbmluZyhzdHJ1Y3QgbzJubV9ub2RlICpub2RlKTsKIHZvaWQgbzJuZXRfZGlzY29ubmVjdF9ub2RlKHN0cnVjdCBvMm5tX25vZGUgKm5vZGUpOworaW50IG8ybmV0X251bV9jb25uZWN0ZWRfcGVlcnModm9pZCk7CiAKIGludCBvMm5ldF9pbml0KHZvaWQpOwogdm9pZCBvMm5ldF9leGl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci90Y3BfaW50ZXJuYWwuaCBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwX2ludGVybmFsLmgKaW5kZXggZGFlYmJkMy4uYjcwMGRjOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci90Y3BfaW50ZXJuYWwuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcF9pbnRlcm5hbC5oCkBAIC0yNywyMyArMjcsMjAgQEAKICNkZWZpbmUgTzJORVRfTVNHX0tFRVBfUkVRX01BR0lDICAoKHUxNikweGZhNTcpCiAjZGVmaW5lIE8yTkVUX01TR19LRUVQX1JFU1BfTUFHSUMgKCh1MTYpMHhmYTU4KQogCi0vKiBzYW1lIGFzIGhiIGRlbGF5LCB3ZSdyZSB3YWl0aW5nIGZvciBhbm90aGVyIG5vZGUgdG8gcmVjb2duaXplIG91ciBoYiAqLwotI2RlZmluZSBPMk5FVF9SRUNPTk5FQ1RfREVMQVlfTVMJTzJIQl9SRUdJT05fVElNRU9VVF9NUwotCiAvKiB3ZSdyZSBkZWxheWluZyBvdXIgcXVvcnVtIGRlY2lzaW9uIHNvIHRoYXQgaGVhcnRiZWF0IHdpbGwgaGF2ZSB0aW1lZAogICogb3V0IHRydWx5IGRlYWQgbm9kZXMgYnkgdGhlIHRpbWUgd2UgY29tZSBhcm91bmQgdG8gbWFraW5nIGRlY2lzaW9ucwogICogb24gdGhlaXIgbnVtYmVyICovCiAjZGVmaW5lIE8yTkVUX1FVT1JVTV9ERUxBWV9NUwkoKG8yaGJfZGVhZF90aHJlc2hvbGQgKyAyKSAqIE8ySEJfUkVHSU9OX1RJTUVPVVRfTVMpCiAKLSNkZWZpbmUgTzJORVRfS0VFUEFMSVZFX0RFTEFZX1NFQ1MJNQotI2RlZmluZSBPMk5FVF9JRExFX1RJTUVPVVRfU0VDUwkJMTAKLQogLyogCiAgKiBUaGlzIHZlcnNpb24gbnVtYmVyIHJlcHJlc2VudHMgcXVpdGUgYSBsb3QsIHVuZm9ydHVuYXRlbHkuICBJdCBub3QKICAqIG9ubHkgcmVwcmVzZW50cyB0aGUgcmF3IG5ldHdvcmsgbWVzc2FnZSBwcm90b2NvbCBvbiB0aGUgd2lyZSBidXQgYWxzbwogICogbG9ja2luZyBzZW1hbnRpY3Mgb2YgdGhlIGZpbGUgc3lzdGVtIHVzaW5nIHRoZSBwcm90b2NvbC4gIEl0IHNob3VsZCAKICAqIGJlIHNvbWV3aGVyZSBlbHNlLCBJJ20gc3VyZSwgYnV0IHJpZ2h0IG5vdyBpdCBpc24ndC4KICAqCisgKiBOZXcgaW4gdmVyc2lvbiA1OgorICogCS0gTmV0d29yayB0aW1lb3V0IGNoZWNraW5nIHByb3RvY29sCisgKgogICogTmV3IGluIHZlcnNpb24gNDoKICAqIAktIFJlbW92ZSBpX2dlbmVyYXRpb24gZnJvbSBsb2NrIG5hbWVzIGZvciBiZXR0ZXIgc3RhdCBwZXJmb3JtYW5jZS4KICAqCkBAIC01NCwxMCArNTEsMTQgQEAKICAqIAktIGZ1bGwgNjQgYml0IGlfc2l6ZSBpbiB0aGUgbWV0YWRhdGEgbG9jayBsdmJzCiAgKiAJLSBpbnRyb2R1Y3Rpb24gb2YgInJ3IiBsb2NrIGFuZCBwdXNoaW5nIG1ldGEvZGF0YSBsb2NraW5nIGRvd24KICAqLwotI2RlZmluZSBPMk5FVF9QUk9UT0NPTF9WRVJTSU9OIDRVTEwKKyNkZWZpbmUgTzJORVRfUFJPVE9DT0xfVkVSU0lPTiA1VUxMCiBzdHJ1Y3QgbzJuZXRfaGFuZHNoYWtlIHsKIAlfX2JlNjQJcHJvdG9jb2xfdmVyc2lvbjsKIAlfX2JlNjQJY29ubmVjdG9yX2lkOworCV9fYmUzMiAgbzJoYl9oZWFydGJlYXRfdGltZW91dF9tczsKKwlfX2JlMzIgIG8ybmV0X2lkbGVfdGltZW91dF9tczsKKwlfX2JlMzIgIG8ybmV0X2tlZXBhbGl2ZV9kZWxheV9tczsKKwlfX2JlMzIgIG8ybmV0X3JlY29ubmVjdF9kZWxheV9tczsKIH07CiAKIHN0cnVjdCBvMm5ldF9ub2RlIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2Rpci5jIGIvZnMvb2NmczIvZGlyLmMKaW5kZXggYmFhZDJhYS4uNjY4MjFlMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGlyLmMKKysrIGIvZnMvb2NmczIvZGlyLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCwgKiB0bXA7CiAJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqIGRlOwogCWludCBlcnI7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqIHNiID0gaW5vZGUtPmlfc2I7CiAJdW5zaWduZWQgaW50IHJhX3NlY3RvcnMgPSAxNjsKIAlpbnQgbG9ja19sZXZlbCA9IDA7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKaW5kZXggNDIwYTM3NS4uZjBiMjVmMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwpAQCAtOTIwLDcgKzkyMCw3IEBACiAKIAltbG9nX2VudHJ5KCIlcCIsIGRsbSk7CiAKLQljdHh0ID0ga2NhbGxvYygxLCBzaXplb2YoKmN0eHQpLCBHRlBfS0VSTkVMKTsKKwljdHh0ID0ga3phbGxvYyhzaXplb2YoKmN0eHQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWN0eHQpIHsKIAkJc3RhdHVzID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgZGxtX2N0eHQgKmRsbSA9IE5VTEw7CiAKLQlkbG0gPSBrY2FsbG9jKDEsIHNpemVvZigqZGxtKSwgR0ZQX0tFUk5FTCk7CisJZGxtID0ga3phbGxvYyhzaXplb2YoKmRsbSksIEdGUF9LRVJORUwpOwogCWlmICghZGxtKSB7CiAJCW1sb2dfZXJybm8oLUVOT01FTSk7CiAJCWdvdG8gbGVhdmU7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZnMuYyBiL2ZzL29jZnMyL2RsbS9kbG1mcy5jCmluZGV4IDk0MWFjZjEuLmI3ZjBiYTkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1mcy5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1mcy5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAlpbnQgYnl0ZXNfbGVmdDsKIAlzc2l6ZV90IHJlYWRsZW47CiAJY2hhciAqbHZiX2J1ZjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAltbG9nKDAsICJpbm9kZSAlbHUsIGNvdW50ID0gJXp1LCAqcHBvcyA9ICVsbHVcbiIsCiAJCWlub2RlLT5pX2lubywgY291bnQsICpwcG9zKTsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCWludCBieXRlc19sZWZ0OwogCXNzaXplX3Qgd3JpdGVsZW47CiAJY2hhciAqbHZiX2J1ZjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAltbG9nKDAsICJpbm9kZSAlbHUsIGNvdW50ID0gJXp1LCAqcHBvcyA9ICVsbHVcbiIsCiAJCWlub2RlLT5pX2lubywgY291bnQsICpwcG9zKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1sb2NrLmMgYi9mcy9vY2ZzMi9kbG0vZGxtbG9jay5jCmluZGV4IDQyYTFiOTEuLmU1Y2EzZGIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1sb2NrLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWxvY2suYwpAQCAtNDA4LDEzICs0MDgsMTMgQEAKIAlzdHJ1Y3QgZGxtX2xvY2sgKmxvY2s7CiAJaW50IGtlcm5lbF9hbGxvY2F0ZWQgPSAwOwogCi0JbG9jayA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpsb2NrKSwgR0ZQX05PRlMpOworCWxvY2sgPSBremFsbG9jKHNpemVvZigqbG9jayksIEdGUF9OT0ZTKTsKIAlpZiAoIWxvY2spCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKCFsa3NiKSB7CiAJCS8qIHplcm8gbWVtb3J5IG9ubHkgaWYga2VybmVsLWFsbG9jYXRlZCAqLwotCQlsa3NiID0ga2NhbGxvYygxLCBzaXplb2YoKmxrc2IpLCBHRlBfTk9GUyk7CisJCWxrc2IgPSBremFsbG9jKHNpemVvZigqbGtzYiksIEdGUF9OT0ZTKTsKIAkJaWYgKCFsa3NiKSB7CiAJCQlrZnJlZShsb2NrKTsKIAkJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCmluZGV4IDg1NjAxMmIuLjBhZDg3MjAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKQEAgLTE5MzksNyArMTkzOSw3IEBACiAJCQkgICAgICAgaW50IGlnbm9yZV9oaWdoZXIsIHU4IHJlcXVlc3RfZnJvbSwgdTMyIGZsYWdzKQogewogCXN0cnVjdCBkbG1fd29ya19pdGVtICppdGVtOwotCWl0ZW0gPSBrY2FsbG9jKDEsIHNpemVvZigqaXRlbSksIEdGUF9OT0ZTKTsKKwlpdGVtID0ga3phbGxvYyhzaXplb2YoKml0ZW0pLCBHRlBfTk9GUyk7CiAJaWYgKCFpdGVtKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwppbmRleCBmYjNlMmIwLi4zNjdhMTFlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwpAQCAtNzU3LDcgKzc1Nyw3IEBACiAJCX0KIAkJQlVHX09OKG51bSA9PSBkZWFkX25vZGUpOwogCi0JCW5kYXRhID0ga2NhbGxvYygxLCBzaXplb2YoKm5kYXRhKSwgR0ZQX05PRlMpOworCQluZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpuZGF0YSksIEdGUF9OT0ZTKTsKIAkJaWYgKCFuZGF0YSkgewogCQkJZGxtX2Rlc3Ryb3lfcmVjb3ZlcnlfYXJlYShkbG0sIGRlYWRfbm9kZSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTg0Miw3ICs4NDIsNyBAQAogCX0KIAlCVUdfT04obHItPmRlYWRfbm9kZSAhPSBkbG0tPnJlY28uZGVhZF9ub2RlKTsKIAotCWl0ZW0gPSBrY2FsbG9jKDEsIHNpemVvZigqaXRlbSksIEdGUF9OT0ZTKTsKKwlpdGVtID0ga3phbGxvYyhzaXplb2YoKml0ZW0pLCBHRlBfTk9GUyk7CiAJaWYgKCFpdGVtKSB7CiAJCWRsbV9wdXQoZGxtKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMzIzLDcgKzEzMjMsNyBAQAogCiAJcmV0ID0gLUVOT01FTTsKIAlidWYgPSBrbWFsbG9jKGJlMTZfdG9fY3B1KG1zZy0+ZGF0YV9sZW4pLCBHRlBfTk9GUyk7Ci0JaXRlbSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCppdGVtKSwgR0ZQX05PRlMpOworCWl0ZW0gPSBremFsbG9jKHNpemVvZigqaXRlbSksIEdGUF9OT0ZTKTsKIAlpZiAoIWJ1ZiB8fCAhaXRlbSkKIAkJZ290byBsZWF2ZTsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZ2x1ZS5jIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCmluZGV4IDY5ZmJhMTYuLmUzMzU1NDEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWdsdWUuYworKysgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKQEAgLTc3MCw3ICs3NzAsNyBAQAogCQkJICAgICBpbnQgZGxtX2ZsYWdzKQogewogCWludCByZXQgPSAwOwotCWVudW0gZGxtX3N0YXR1cyBzdGF0dXM7CisJZW51bSBkbG1fc3RhdHVzIHN0YXR1cyA9IERMTV9OT1JNQUw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwpAQCAtMTEzOCw2ICsxMTM4LDcgQEAKIHsKIAlpbnQgc3RhdHVzLCBsZXZlbDsKIAlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXM7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAKIAlCVUdfT04oIWlub2RlKTsKIApAQCAtMTE0Nyw2ICsxMTQ4LDkgQEAKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAogCSAgICAgd3JpdGUgPyAiRVhNT0RFIiA6ICJQUk1PREUiKTsKIAorCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlyZXR1cm4gMDsKKwogCWxvY2tyZXMgPSAmT0NGUzJfSShpbm9kZSktPmlwX3J3X2xvY2tyZXM7CiAKIAlsZXZlbCA9IHdyaXRlID8gTEtNX0VYTU9ERSA6IExLTV9QUk1PREU7CkBAIC0xMTY0LDYgKzExNjgsNyBAQAogewogCWludCBsZXZlbCA9IHdyaXRlID8gTEtNX0VYTU9ERSA6IExLTV9QUk1PREU7CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJk9DRlMyX0koaW5vZGUpLT5pcF9yd19sb2NrcmVzOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKQEAgLTExNzEsNyArMTE3Niw4IEBACiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKIAkgICAgIHdyaXRlID8gIkVYTU9ERSIgOiAiUFJNT0RFIik7CiAKLQlvY2ZzMl9jbHVzdGVyX3VubG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGxvY2tyZXMsIGxldmVsKTsKKwlpZiAoIW9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCW9jZnMyX2NsdXN0ZXJfdW5sb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgbG9ja3JlcywgbGV2ZWwpOwogCiAJbWxvZ19leGl0X3ZvaWQoKTsKIH0KQEAgLTExODIsNiArMTE4OCw3IEBACiB7CiAJaW50IHN0YXR1cyA9IDAsIGxldmVsOwogCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlczsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKIAogCUJVR19PTighaW5vZGUpOwogCkBAIC0xMjAxLDYgKzEyMDgsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAob2NmczJfbW91bnRfbG9jYWwob3NiKSkKKwkJZ290byBvdXQ7CisKIAlsb2NrcmVzID0gJk9DRlMyX0koaW5vZGUpLT5pcF9kYXRhX2xvY2tyZXM7CiAKIAlsZXZlbCA9IHdyaXRlID8gTEtNX0VYTU9ERSA6IExLTV9QUk1PREU7CkBAIC0xMjY5LDYgKzEyNzksNyBAQAogewogCWludCBsZXZlbCA9IHdyaXRlID8gTEtNX0VYTU9ERSA6IExLTV9QUk1PREU7CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJk9DRlMyX0koaW5vZGUpLT5pcF9kYXRhX2xvY2tyZXM7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIApAQCAtMTI3Niw3ICsxMjg3LDggQEAKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAogCSAgICAgd3JpdGUgPyAiRVhNT0RFIiA6ICJQUk1PREUiKTsKIAotCWlmICghb2NmczJfaXNfaGFyZF9yZWFkb25seShPQ0ZTMl9TQihpbm9kZS0+aV9zYikpKQorCWlmICghb2NmczJfaXNfaGFyZF9yZWFkb25seShPQ0ZTMl9TQihpbm9kZS0+aV9zYikpICYmCisJICAgICFvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQogCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGxvY2tyZXMsIGxldmVsKTsKIAogCW1sb2dfZXhpdF92b2lkKCk7CkBAIC0xNDY3LDggKzE0NzksOSBAQAogewogCWludCBzdGF0dXMgPSAwOwogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOwotCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlczsKKwlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKQEAgLTE0ODMsMTAgKzE0OTYsMTIgQEAKIAl9CiAJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKIAotCWxvY2tyZXMgPSAmb2ktPmlwX21ldGFfbG9ja3JlczsKKwlpZiAoIW9jZnMyX21vdW50X2xvY2FsKG9zYikpIHsKKwkJbG9ja3JlcyA9ICZvaS0+aXBfbWV0YV9sb2NrcmVzOwogCi0JaWYgKCFvY2ZzMl9zaG91bGRfcmVmcmVzaF9sb2NrX3Jlcyhsb2NrcmVzKSkKLQkJZ290byBiYWlsOworCQlpZiAoIW9jZnMyX3Nob3VsZF9yZWZyZXNoX2xvY2tfcmVzKGxvY2tyZXMpKQorCQkJZ290byBiYWlsOworCX0KIAogCS8qIFRoaXMgd2lsbCBkaXNjYXJkIGFueSBjYWNoaW5nIGluZm9ybWF0aW9uIHdlIG1pZ2h0IGhhdmUgaGFkCiAJICogZm9yIHRoZSBpbm9kZSBtZXRhZGF0YS4gKi8KQEAgLTE0OTYsNyArMTUxMSw3IEBACiAJICogbWFwIChkaXJlY3RvcmllcywgYml0bWFwIGZpbGVzLCBldGMpICovCiAJb2NmczJfZXh0ZW50X21hcF90cnVuYyhpbm9kZSwgMCk7CiAKLQlpZiAob2NmczJfbWV0YV9sdmJfaXNfdHJ1c3RhYmxlKGlub2RlLCBsb2NrcmVzKSkgeworCWlmIChsb2NrcmVzICYmIG9jZnMyX21ldGFfbHZiX2lzX3RydXN0YWJsZShpbm9kZSwgbG9ja3JlcykpIHsKIAkJbWxvZygwLCAiVHJ1c3RpbmcgTFZCIG9uIGlub2RlICVsbHVcbiIsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8pOwogCQlvY2ZzMl9yZWZyZXNoX2lub2RlX2Zyb21fbHZiKGlub2RlKTsKQEAgLTE1NDMsNyArMTU1OCw4IEBACiAKIAlzdGF0dXMgPSAwOwogYmFpbF9yZWZyZXNoOgotCW9jZnMyX2NvbXBsZXRlX2xvY2tfcmVzX3JlZnJlc2gobG9ja3Jlcywgc3RhdHVzKTsKKwlpZiAobG9ja3JlcykKKwkJb2NmczJfY29tcGxldGVfbG9ja19yZXNfcmVmcmVzaChsb2NrcmVzLCBzdGF0dXMpOwogYmFpbDoKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTU4NSw3ICsxNjAxLDcgQEAKIAkJCSBpbnQgYXJnX2ZsYWdzKQogewogCWludCBzdGF0dXMsIGxldmVsLCBkbG1fZmxhZ3MsIGFjcXVpcmVkOwotCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlczsKKwlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqbG9jYWxfYmggPSBOVUxMOwogCkBAIC0xNjA3LDYgKzE2MjMsOSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCWdvdG8gbG9jYWw7CisKIAlpZiAoIShhcmdfZmxhZ3MgJiBPQ0ZTMl9NRVRBX0xPQ0tfUkVDT1ZFUlkpKQogCQl3YWl0X2V2ZW50KG9zYi0+cmVjb3ZlcnlfZXZlbnQsCiAJCQkgICBvY2ZzMl9ub2RlX21hcF9pc19lbXB0eShvc2IsICZvc2ItPnJlY292ZXJ5X21hcCkpOwpAQCAtMTYzNiw2ICsxNjU1LDcgQEAKIAkJd2FpdF9ldmVudChvc2ItPnJlY292ZXJ5X2V2ZW50LAogCQkJICAgb2NmczJfbm9kZV9tYXBfaXNfZW1wdHkob3NiLCAmb3NiLT5yZWNvdmVyeV9tYXApKTsKIAorbG9jYWw6CiAJLyoKIAkgKiBXZSBvbmx5IHNlZSB0aGlzIGZsYWcgaWYgd2UncmUgYmVpbmcgY2FsbGVkIGZyb20KIAkgKiBvY2ZzMl9yZWFkX2xvY2tlZF9pbm9kZSgpLiBJdCBtZWFucyB3ZSdyZSBsb2NraW5nIGFuIGlub2RlCkBAIC0xNjQ0LDcgKzE2NjQsOCBAQAogCSAqLwogCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSB7CiAJCXN0YXR1cyA9IDA7Ci0JCW9jZnMyX2NvbXBsZXRlX2xvY2tfcmVzX3JlZnJlc2gobG9ja3JlcywgMCk7CisJCWlmIChsb2NrcmVzKQorCQkJb2NmczJfY29tcGxldGVfbG9ja19yZXNfcmVmcmVzaChsb2NrcmVzLCAwKTsKIAkJZ290byBiYWlsOwogCX0KIApAQCAtMTc2Nyw2ICsxNzg4LDcgQEAKIHsKIAlpbnQgbGV2ZWwgPSBleCA/IExLTV9FWE1PREUgOiBMS01fUFJNT0RFOwogCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9ICZPQ0ZTMl9JKGlub2RlKS0+aXBfbWV0YV9sb2NrcmVzOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKQEAgLTE3NzQsNyArMTc5Niw4IEBACiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKIAkgICAgIGV4ID8gIkVYTU9ERSIgOiAiUFJNT0RFIik7CiAKLQlpZiAoIW9jZnMyX2lzX2hhcmRfcmVhZG9ubHkoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSkKKwlpZiAoIW9jZnMyX2lzX2hhcmRfcmVhZG9ubHkoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSAmJgorCSAgICAhb2NmczJfbW91bnRfbG9jYWwob3NiKSkKIAkJb2NmczJfY2x1c3Rlcl91bmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBsb2NrcmVzLCBsZXZlbCk7CiAKIAltbG9nX2V4aXRfdm9pZCgpOwpAQCAtMTc4Myw3ICsxODA2LDcgQEAKIGludCBvY2ZzMl9zdXBlcl9sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkgICAgIGludCBleCkKIHsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMgPSAwOwogCWludCBsZXZlbCA9IGV4ID8gTEtNX0VYTU9ERSA6IExLTV9QUk1PREU7CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJm9zYi0+b3NiX3N1cGVyX2xvY2tyZXM7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKQEAgLTE3OTQsNiArMTgxNyw5IEBACiAJaWYgKG9jZnMyX2lzX2hhcmRfcmVhZG9ubHkob3NiKSkKIAkJcmV0dXJuIC1FUk9GUzsKIAorCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlnb3RvIGJhaWw7CisKIAlzdGF0dXMgPSBvY2ZzMl9jbHVzdGVyX2xvY2sob3NiLCBsb2NrcmVzLCBsZXZlbCwgMCwgMCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTgzMiw3ICsxODU4LDggQEAKIAlpbnQgbGV2ZWwgPSBleCA/IExLTV9FWE1PREUgOiBMS01fUFJNT0RFOwogCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9ICZvc2ItPm9zYl9zdXBlcl9sb2NrcmVzOwogCi0Jb2NmczJfY2x1c3Rlcl91bmxvY2sob3NiLCBsb2NrcmVzLCBsZXZlbCk7CisJaWYgKCFvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhvc2IsIGxvY2tyZXMsIGxldmVsKTsKIH0KIAogaW50IG9jZnMyX3JlbmFtZV9sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQpAQCAtMTg0Myw2ICsxODcwLDkgQEAKIAlpZiAob2NmczJfaXNfaGFyZF9yZWFkb25seShvc2IpKQogCQlyZXR1cm4gLUVST0ZTOwogCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCXJldHVybiAwOworCiAJc3RhdHVzID0gb2NmczJfY2x1c3Rlcl9sb2NrKG9zYiwgbG9ja3JlcywgTEtNX0VYTU9ERSwgMCwgMCk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTE4NTQsNyArMTg4NCw4IEBACiB7CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJm9zYi0+b3NiX3JlbmFtZV9sb2NrcmVzOwogCi0Jb2NmczJfY2x1c3Rlcl91bmxvY2sob3NiLCBsb2NrcmVzLCBMS01fRVhNT0RFKTsKKwlpZiAoIW9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCW9jZnMyX2NsdXN0ZXJfdW5sb2NrKG9zYiwgbG9ja3JlcywgTEtNX0VYTU9ERSk7CiB9CiAKIGludCBvY2ZzMl9kZW50cnlfbG9jayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBleCkKQEAgLTE4NjksNiArMTkwMCw5IEBACiAJaWYgKG9jZnMyX2lzX2hhcmRfcmVhZG9ubHkob3NiKSkKIAkJcmV0dXJuIC1FUk9GUzsKIAorCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlyZXR1cm4gMDsKKwogCXJldCA9IG9jZnMyX2NsdXN0ZXJfbG9jayhvc2IsICZkbC0+ZGxfbG9ja3JlcywgbGV2ZWwsIDAsIDApOwogCWlmIChyZXQgPCAwKQogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xODgyLDcgKzE5MTYsOCBAQAogCXN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBkZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGVudHJ5LT5kX3NiKTsKIAotCW9jZnMyX2NsdXN0ZXJfdW5sb2NrKG9zYiwgJmRsLT5kbF9sb2NrcmVzLCBsZXZlbCk7CisJaWYgKCFvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhvc2IsICZkbC0+ZGxfbG9ja3JlcywgbGV2ZWwpOwogfQogCiAvKiBSZWZlcmVuY2UgY291bnRpbmcgb2YgdGhlIGRsbSBkZWJ1ZyBzdHJ1Y3R1cmUuIFdlIHdhbnQgdGhpcyBiZWNhdXNlCkBAIC0yMTQ1LDEyICsyMTgwLDE1IEBACiAKIGludCBvY2ZzMl9kbG1faW5pdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKIHsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMgPSAwOwogCXUzMiBkbG1fa2V5OwotCXN0cnVjdCBkbG1fY3R4dCAqZGxtOworCXN0cnVjdCBkbG1fY3R4dCAqZGxtID0gTlVMTDsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCWdvdG8gbG9jYWw7CisKIAlzdGF0dXMgPSBvY2ZzMl9kbG1faW5pdF9kZWJ1Zyhvc2IpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTIxNzgsMTEgKzIyMTYsMTIgQEAKIAkJZ290byBiYWlsOwogCX0KIAorCWRsbV9yZWdpc3Rlcl9ldmljdGlvbl9jYihkbG0sICZvc2ItPm9zYl9ldmljdGlvbl9jYik7CisKK2xvY2FsOgogCW9jZnMyX3N1cGVyX2xvY2tfcmVzX2luaXQoJm9zYi0+b3NiX3N1cGVyX2xvY2tyZXMsIG9zYik7CiAJb2NmczJfcmVuYW1lX2xvY2tfcmVzX2luaXQoJm9zYi0+b3NiX3JlbmFtZV9sb2NrcmVzLCBvc2IpOwogCi0JZGxtX3JlZ2lzdGVyX2V2aWN0aW9uX2NiKGRsbSwgJm9zYi0+b3NiX2V2aWN0aW9uX2NiKTsKLQogCW9zYi0+ZGxtID0gZGxtOwogCiAJc3RhdHVzID0gMDsKQEAgLTI2NzksNiArMjcxOCwxNSBAQAogICAgICAgIAlpbm9kZSA9IG9jZnMyX2xvY2tfcmVzX2lub2RlKGxvY2tyZXMpOwogCW1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCisJLyoKKwkgKiBXZSBuZWVkIHRoaXMgYmVmb3JlIHRoZSBmaWxlbWFwX2ZkYXRhd3JpdGUoKSBzbyB0aGF0IGl0IGNhbgorCSAqIHRyYW5zZmVyIHRoZSBkaXJ0eSBiaXQgZnJvbSB0aGUgUFRFIHRvIHRoZQorCSAqIHBhZ2UuIFVuZm9ydHVuYXRlbHkgdGhpcyBtZWFucyB0aGF0IGV2ZW4gZm9yIEVYLT5QUgorCSAqIGRvd25jb252ZXJ0cywgd2UnbGwgbG9zZSBvdXIgbWFwcGluZ3MgYW5kIGhhdmUgdG8gYnVpbGQKKwkgKiB0aGVtIHVwIGFnYWluLgorCSAqLworCXVubWFwX21hcHBpbmdfcmFuZ2UobWFwcGluZywgMCwgMCwgMCk7CisKIAlpZiAoZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpKSB7CiAJCW1sb2coTUxfRVJST1IsICJDb3VsZCBub3Qgc3luYyBpbm9kZSAlbGx1IGZvciBkb3duY29udmVydCEiLAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKQEAgLTI2ODYsNyArMjczNCw2IEBACiAJc3luY19tYXBwaW5nX2J1ZmZlcnMobWFwcGluZyk7CiAJaWYgKGJsb2NraW5nID09IExLTV9FWE1PREUpIHsKIAkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMobWFwcGluZywgMCk7Ci0JCXVubWFwX21hcHBpbmdfcmFuZ2UobWFwcGluZywgMCwgMCwgMCk7CiAJfSBlbHNlIHsKIAkJLyogV2Ugb25seSBuZWVkIHRvIHdhaXQgb24gdGhlIEkvTyBpZiB3ZSdyZSBub3QgYWxzbwogCQkgKiB0cnVuY2F0aW5nIHBhZ2VzIGJlY2F1c2UgdHJ1bmNhdGVfaW5vZGVfcGFnZXMgd2FpdHMKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2V4cG9ydC5jIGIvZnMvb2NmczIvZXhwb3J0LmMKaW5kZXggMDZiZTZlNy4uNTZlMWZlZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZXhwb3J0LmMKKysrIGIvZnMvb2NmczIvZXhwb3J0LmMKQEAgLTYwLDE0ICs2MCwxMSBAQAogCiAJaW5vZGUgPSBvY2ZzMl9pZ2V0KE9DRlMyX1NCKHNiKSwgaGFuZGxlLT5paF9ibGtubywgMCk7CiAKLQlpZiAoSVNfRVJSKGlub2RlKSkgewotCQltbG9nX2Vycm5vKFBUUl9FUlIoaW5vZGUpKTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKIAkJcmV0dXJuICh2b2lkICopaW5vZGU7Ci0JfQogCiAJaWYgKGhhbmRsZS0+aWhfZ2VuZXJhdGlvbiAhPSBpbm9kZS0+aV9nZW5lcmF0aW9uKSB7CiAJCWlwdXQoaW5vZGUpOwotCQltbG9nX2Vycm5vKC1FU1RBTEUpOwogCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCA4Nzg2YjNjLi4xMDk1M2E1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC02OCw3ICs2OCw3IEBACiAJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJyUuKnMnKVxuIiwgaW5vZGUsIGZpbGUsCi0JCSAgIGZpbGUtPmZfZGVudHJ5LT5kX25hbWUubGVuLCBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkgICBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubGVuLCBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKIApAQCAtOTgsOCArOTgsOCBAQAogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOwogCiAJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICclLipzJylcbiIsIGlub2RlLCBmaWxlLAotCQkgICAgICAgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5sZW4sCi0JCSAgICAgICBmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkgICAgICAgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLmxlbiwKKwkJICAgICAgIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKIAogCXNwaW5fbG9jaygmb2ktPmlwX2xvY2spOwogCWlmICghLS1vaS0+aXBfb3Blbl9jb3VudCkKQEAgLTE0OSwxMCArMTQ5LDI5IEBACiAJICAgICgoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19OT0RJUkFUSU1FKSAmJiBTX0lTRElSKGlub2RlLT5pX21vZGUpKSkKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAqIFdlIGNhbiBiZSBjYWxsZWQgd2l0aCBubyB2ZnNtbnQgc3RydWN0dXJlIC0gTkZTRCB3aWxsCisJICogc29tZXRpbWVzIGRvIHRoaXMuCisJICoKKwkgKiBOb3RlIHRoYXQgb3VyIGFjdGlvbiBoZXJlIGlzIGRpZmZlcmVudCB0aGFuIHRvdWNoX2F0aW1lKCkgLQorCSAqIGlmIHdlIGNhbid0IHRlbGwgd2hldGhlciB0aGlzIGlzIGEgbm9hdGltZSBtb3VudCwgdGhlbiB3ZQorCSAqIGRvbid0IGtub3cgd2hldGhlciB0byB0cnVzdCB0aGUgdmFsdWUgb2Ygc19hdGltZV9xdWFudHVtLgorCSAqLworCWlmICh2ZnNtbnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKIAlpZiAoKHZmc21udC0+bW50X2ZsYWdzICYgTU5UX05PQVRJTUUpIHx8CiAJICAgICgodmZzbW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9ESVJBVElNRSkgJiYgU19JU0RJUihpbm9kZS0+aV9tb2RlKSkpCiAJCXJldHVybiAwOwogCisJaWYgKHZmc21udC0+bW50X2ZsYWdzICYgTU5UX1JFTEFUSU1FKSB7CisJCWlmICgodGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfYXRpbWUsICZpbm9kZS0+aV9tdGltZSkgPD0gMCkgfHwKKwkJICAgICh0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9hdGltZSwgJmlub2RlLT5pX2N0aW1lKSA8PSAwKSkKKwkJCXJldHVybiAxOworCisJCXJldHVybiAwOworCX0KKwogCW5vdyA9IENVUlJFTlRfVElNRTsKIAlpZiAoKG5vdy50dl9zZWMgLSBpbm9kZS0+aV9hdGltZS50dl9zZWMgPD0gb3NiLT5zX2F0aW1lX3F1YW50dW0pKQogCQlyZXR1cm4gMDsKQEAgLTk1OCw4ICs5NzcsNiBAQAogCX0KIAogCXJldCA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgTlVMTCk7Ci0JaWYgKHJldCkKLQkJbWxvZ19lcnJubyhyZXQpOwogCiAJb2NmczJfbWV0YV91bmxvY2soaW5vZGUsIDApOwogb3V0OgpAQCAtMTEzMSwxMyArMTE0OCwxMyBAQAogewogCWludCByZXQsIHJ3X2xldmVsLCBoYXZlX2FsbG9jX3NlbSA9IDA7CiAJc3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgYXBwZW5kaW5nID0gZmlscC0+Zl9mbGFncyAmIE9fQVBQRU5EID8gMSA6IDA7CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgJXUsICclLipzJylcbiIsIGZpbHAsCiAJCSAgICh1bnNpZ25lZCBpbnQpbnJfc2VncywKLQkJICAgZmlscC0+Zl9kZW50cnktPmRfbmFtZS5sZW4sCi0JCSAgIGZpbHAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCSAgIGZpbHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5sZW4sCisJCSAgIGZpbHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKIAogCS8qIGhhcHB5IHdyaXRlIG9mIHplcm8gYnl0ZXMgKi8KIAlpZiAoaW9jYi0+a2lfbGVmdCA9PSAwKQpAQCAtMTE1OSw3ICsxMTc2LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfcHJlcGFyZV9pbm9kZV9mb3Jfd3JpdGUoZmlscC0+Zl9kZW50cnksICZpb2NiLT5raV9wb3MsCisJcmV0ID0gb2NmczJfcHJlcGFyZV9pbm9kZV9mb3Jfd3JpdGUoZmlscC0+Zl9wYXRoLmRlbnRyeSwgJmlvY2ItPmtpX3BvcywKIAkJCQkJICAgIGlvY2ItPmtpX2xlZnQsIGFwcGVuZGluZyk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMTIwNywxMiArMTIyNCwxMiBAQAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb3V0LT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb3V0LT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICV1LCAnJS4qcycpXG4iLCBvdXQsIHBpcGUsCiAJCSAgICh1bnNpZ25lZCBpbnQpbGVuLAotCQkgICBvdXQtPmZfZGVudHJ5LT5kX25hbWUubGVuLAotCQkgICBvdXQtPmZfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCSAgIG91dC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLmxlbiwKKwkJICAgb3V0LT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAlpbm9kZV9kb3VibGVfbG9jayhpbm9kZSwgcGlwZS0+aW5vZGUpOwogCkBAIC0xMjIyLDcgKzEyMzksNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9wcmVwYXJlX2lub2RlX2Zvcl93cml0ZShvdXQtPmZfZGVudHJ5LCBwcG9zLCBsZW4sIDApOworCXJldCA9IG9jZnMyX3ByZXBhcmVfaW5vZGVfZm9yX3dyaXRlKG91dC0+Zl9wYXRoLmRlbnRyeSwgcHBvcywgbGVuLCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTEyNDcsMTIgKzEyNjQsMTIgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGluLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW4tPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJXUsICclLipzJylcbiIsIGluLCBwaXBlLAogCQkgICAodW5zaWduZWQgaW50KWxlbiwKLQkJICAgaW4tPmZfZGVudHJ5LT5kX25hbWUubGVuLAotCQkgICBpbi0+Zl9kZW50cnktPmRfbmFtZS5uYW1lKTsKKwkJICAgaW4tPmZfcGF0aC5kZW50cnktPmRfbmFtZS5sZW4sCisJCSAgIGluLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBpbiBvY2ZzMl9maWxlX2Fpb19yZWFkKCkKQEAgLTEyNzgsMTIgKzEyOTUsMTIgQEAKIHsKIAlpbnQgcmV0ID0gMCwgcndfbGV2ZWwgPSAtMSwgaGF2ZV9hbGxvY19zZW0gPSAwLCBsb2NrX2xldmVsID0gMDsKIAlzdHJ1Y3QgZmlsZSAqZmlscCA9IGlvY2ItPmtpX2ZpbHA7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJbWxvZ19lbnRyeSgiKDB4JXAsICV1LCAnJS4qcycpXG4iLCBmaWxwLAogCQkgICAodW5zaWduZWQgaW50KW5yX3NlZ3MsCi0JCSAgIGZpbHAtPmZfZGVudHJ5LT5kX25hbWUubGVuLAotCQkgICBmaWxwLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQkgICBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubGVuLAorCQkgICBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAlpZiAoIWlub2RlKSB7CiAJCXJldCA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2hlYXJ0YmVhdC5jCmluZGV4IGNiZmQ0NWEuLjhmYzUyZDYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2hlYXJ0YmVhdC5jCisrKyBiL2ZzL29jZnMyL2hlYXJ0YmVhdC5jCkBAIC0xNTQsNiArMTU0LDkgQEAKIHsKIAlpbnQgc3RhdHVzOwogCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCXJldHVybiAwOworCiAJc3RhdHVzID0gbzJoYl9yZWdpc3Rlcl9jYWxsYmFjaygmb3NiLT5vc2JfaGJfZG93bik7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTcyLDYgKzE3NSw5IEBACiB7CiAJaW50IHN0YXR1czsKIAorCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlyZXR1cm47CisKIAlzdGF0dXMgPSBvMmhiX3VucmVnaXN0ZXJfY2FsbGJhY2soJm9zYi0+b3NiX2hiX2Rvd24pOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xODYsNiArMTkyLDkgQEAKIAlpbnQgcmV0OwogCWNoYXIgKmFyZ3ZbNV0sICplbnZwWzNdOwogCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCXJldHVybjsKKwogCWlmICghb3NiLT51dWlkX3N0cikgewogCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgZG9uJ3QgZ2V0IGZhciBlbm91Z2ggaW4gbW91bnQuLi4gKi8KIAkJbWxvZygwLCAiTm8gVVVJRCB3aXRoIHdoaWNoIHRvIHN0b3AgaGVhcnRiZWF0IVxuXG4iKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IDQyZTM2MWYuLjI4YWI1NmYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtMTQ2LDcgKzE0Niw2IEBACiAJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpIHsKIAkJaXB1dChpbm9kZSk7CiAJCWlub2RlID0gRVJSX1BUUigtRVNUQUxFKTsKLQkJbWxvZ19lcnJubyhQVFJfRVJSKGlub2RlKSk7CiAJCWdvdG8gYmFpbDsKIAl9CiAKQEAgLTE1NSw4ICsxNTQsNyBAQAogCQltbG9nKDAsICJyZXR1cm5pbmcgaW5vZGUgd2l0aCBudW1iZXIgJWxsdVxuIiwKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CiAJCW1sb2dfZXhpdF9wdHIoaW5vZGUpOwotCX0gZWxzZQotCQltbG9nX2Vycm5vKFBUUl9FUlIoaW5vZGUpKTsKKwl9CiAKIAlyZXR1cm4gaW5vZGU7CiB9CkBAIC0yNDcsNyArMjQ1LDcgQEAKIAkgKiB0b2RheS4gIGNoYW5nZSBpZiBuZWVkZWQuICovCiAJaWYgKCFPQ0ZTMl9JU19WQUxJRF9ESU5PREUoZmUpIHx8CiAJICAgICEoZmUtPmlfZmxhZ3MgJiBjcHVfdG9fbGUzMihPQ0ZTMl9WQUxJRF9GTCkpKSB7Ci0JCW1sb2coTUxfRVJST1IsICJJbnZhbGlkIGRpbm9kZTogaV9pbm89JWx1LCBpX2Jsa25vPSVsbHUsICIKKwkJbWxvZygwLCAiSW52YWxpZCBkaW5vZGU6IGlfaW5vPSVsdSwgaV9ibGtubz0lbGx1LCAiCiAJCSAgICAgInNpZ25hdHVyZSA9ICUuKnMsIGZsYWdzID0gMHgleFxuIiwKIAkJICAgICBpbm9kZS0+aV9pbm8sCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShmZS0+aV9ibGtubyksIDcsCkBAIC00MjMsNyArNDIxLDggQEAKIAkgKiBjbHVzdGVyIGxvY2sgYmVmb3JlIHRydXN0aW5nIGFueXRoaW5nIGFueXdheS4KIAkgKi8KIAljYW5fbG9jayA9ICEoYXJncy0+ZmlfZmxhZ3MgJiBPQ0ZTMl9GSV9GTEFHX1NZU0ZJTEUpCi0JCSYmICEoYXJncy0+ZmlfZmxhZ3MgJiBPQ0ZTMl9GSV9GTEFHX05PTE9DSyk7CisJCSYmICEoYXJncy0+ZmlfZmxhZ3MgJiBPQ0ZTMl9GSV9GTEFHX05PTE9DSykKKwkJJiYgIW9jZnMyX21vdW50X2xvY2FsKG9zYik7CiAKIAkvKgogCSAqIFRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgb2YKQEAgLTQ3NywxMSArNDc2LDggQEAKIAkgICAgU19JU0JMSyhsZTE2X3RvX2NwdShmZS0+aV9tb2RlKSkpCiAgICAgCQlpbm9kZS0+aV9yZGV2ID0gaHVnZV9kZWNvZGVfZGV2KGxlNjRfdG9fY3B1KGZlLT5pZDEuZGV2MS5pX3JkZXYpKTsKIAotCWlmIChvY2ZzMl9wb3B1bGF0ZV9pbm9kZShpbm9kZSwgZmUsIDApIDwgMCkgewotCQltbG9nKE1MX0VSUk9SLCAicG9wdWxhdGUgZmFpbGVkISBpX2Jsa25vPSVsbHUsIGlfaW5vPSVsdVxuIiwKLQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZlLT5pX2Jsa25vLCBpbm9kZS0+aV9pbm8pOworCWlmIChvY2ZzMl9wb3B1bGF0ZV9pbm9kZShpbm9kZSwgZmUsIDApIDwgMCkKIAkJZ290byBiYWlsOwotCX0KIAogCUJVR19PTihhcmdzLT5maV9ibGtubyAhPSBsZTY0X3RvX2NwdShmZS0+aV9ibGtubykpOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmMgYi9mcy9vY2ZzMi9qb3VybmFsLmMKaW5kZXggMWQ3ZjRhYi4uODI1Y2IwYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtMTQ0LDggKzE0NCwxMCBAQAogCQkJb2NmczJfYWJvcnQob3NiLT5zYiwgIkRldGVjdGVkIGFib3J0ZWQgam91cm5hbCIpOwogCQkJaGFuZGxlID0gRVJSX1BUUigtRVJPRlMpOwogCQl9Ci0JfSBlbHNlCi0JCWF0b21pY19pbmMoJihvc2ItPmpvdXJuYWwtPmpfbnVtX3RyYW5zKSk7CisJfSBlbHNlIHsKKwkJaWYgKCFvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQkJYXRvbWljX2luYygmKG9zYi0+am91cm5hbC0+al9udW1fdHJhbnMpKTsKKwl9CiAKIAlyZXR1cm4gaGFuZGxlOwogfQpAQCAtNTA3LDkgKzUwOSwyMyBAQAogCiAJQlVHX09OKGF0b21pY19yZWFkKCYob3NiLT5qb3VybmFsLT5qX251bV90cmFucykpICE9IDApOwogCi0Jc3RhdHVzID0gb2NmczJfam91cm5hbF90b2dnbGVfZGlydHkob3NiLCAwKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJbWxvZ19lcnJubyhzdGF0dXMpOworCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKSB7CisJCWpvdXJuYWxfbG9ja191cGRhdGVzKGpvdXJuYWwtPmpfam91cm5hbCk7CisJCXN0YXR1cyA9IGpvdXJuYWxfZmx1c2goam91cm5hbC0+al9qb3VybmFsKTsKKwkJam91cm5hbF91bmxvY2tfdXBkYXRlcyhqb3VybmFsLT5qX2pvdXJuYWwpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwl9CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJLyoKKwkJICogRG8gbm90IHRvZ2dsZSBpZiBmbHVzaCB3YXMgdW5zdWNjZXNzZnVsIG90aGVyd2lzZQorCQkgKiB3aWxsIGxlYXZlIGRpcnR5IG1ldGFkYXRhIGluIGEgImNsZWFuIiBqb3VybmFsCisJCSAqLworCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX3RvZ2dsZV9kaXJ0eShvc2IsIDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwl9CiAKIAkvKiBTaHV0ZG93biB0aGUga2VybmVsIGpvdXJuYWwgc3lzdGVtICovCiAJam91cm5hbF9kZXN0cm95KGpvdXJuYWwtPmpfam91cm5hbCk7CkBAIC01NDksNyArNTY1LDcgQEAKIAl9CiB9CiAKLWludCBvY2ZzMl9qb3VybmFsX2xvYWQoc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwpCitpbnQgb2NmczJfam91cm5hbF9sb2FkKHN0cnVjdCBvY2ZzMl9qb3VybmFsICpqb3VybmFsLCBpbnQgbG9jYWwpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2I7CkBAIC01NzYsMTQgKzU5MiwxOCBAQAogCX0KIAogCS8qIExhdW5jaCB0aGUgY29tbWl0IHRocmVhZCAqLwotCW9zYi0+Y29tbWl0X3Rhc2sgPSBrdGhyZWFkX3J1bihvY2ZzMl9jb21taXRfdGhyZWFkLCBvc2IsICJvY2ZzMmNtdCIpOwotCWlmIChJU19FUlIob3NiLT5jb21taXRfdGFzaykpIHsKLQkJc3RhdHVzID0gUFRSX0VSUihvc2ItPmNvbW1pdF90YXNrKTsKKwlpZiAoIWxvY2FsKSB7CisJCW9zYi0+Y29tbWl0X3Rhc2sgPSBrdGhyZWFkX3J1bihvY2ZzMl9jb21taXRfdGhyZWFkLCBvc2IsCisJCQkJCSAgICAgICAib2NmczJjbXQiKTsKKwkJaWYgKElTX0VSUihvc2ItPmNvbW1pdF90YXNrKSkgeworCQkJc3RhdHVzID0gUFRSX0VSUihvc2ItPmNvbW1pdF90YXNrKTsKKwkJCW9zYi0+Y29tbWl0X3Rhc2sgPSBOVUxMOworCQkJbWxvZyhNTF9FUlJPUiwgInVuYWJsZSB0byBsYXVuY2ggb2NmczJjb21taXQgdGhyZWFkLCAiCisJCQkgICAgICJlcnJvcj0lZCIsIHN0YXR1cyk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9IGVsc2UKIAkJb3NiLT5jb21taXRfdGFzayA9IE5VTEw7Ci0JCW1sb2coTUxfRVJST1IsICJ1bmFibGUgdG8gbGF1bmNoIG9jZnMyY29tbWl0IHRocmVhZCwgZXJyb3I9JWQiLAotCQkgICAgIHN0YXR1cyk7Ci0JCWdvdG8gZG9uZTsKLQl9CiAKIGRvbmU6CiAJbWxvZ19leGl0KHN0YXR1cyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmggYi9mcy9vY2ZzMi9qb3VybmFsLmgKaW5kZXggODk5MTEyYS4uZTEyMTYzNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5oCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuaApAQCAtMTU3LDcgKzE1Nyw3IEBACiB2b2lkICAgb2NmczJfam91cm5hbF9zaHV0ZG93bihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CiBpbnQgICAgb2NmczJfam91cm5hbF93aXBlKHN0cnVjdCBvY2ZzMl9qb3VybmFsICpqb3VybmFsLAogCQkJICBpbnQgZnVsbCk7Ci1pbnQgICAgb2NmczJfam91cm5hbF9sb2FkKHN0cnVjdCBvY2ZzMl9qb3VybmFsICpqb3VybmFsKTsKK2ludCAgICBvY2ZzMl9qb3VybmFsX2xvYWQoc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwsIGludCBsb2NhbCk7CiBpbnQgICAgb2NmczJfY2hlY2tfam91cm5hbHNfbm9sb2NrcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CiB2b2lkICAgb2NmczJfcmVjb3ZlcnlfdGhyZWFkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgICBpbnQgbm9kZV9udW0pOwpAQCAtMTc0LDYgKzE3NCw5IEBACiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAKKwlpZiAob2NmczJfbW91bnRfbG9jYWwob3NiKSkKKwkJcmV0dXJuOworCiAJaWYgKCFvY2ZzMl9pbm9kZV9mdWxseV9jaGVja3BvaW50ZWQoaW5vZGUpKSB7CiAJCS8qIFdBUk5JTkc6IFRoaXMgb25seSBraWNrcyBvZmYgYSBzaW5nbGUKIAkJICogY2hlY2twb2ludC4gSWYgc29tZW9uZSByYWNlcyB5b3UgYW5kIGFkZHMgbW9yZQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCmluZGV4IDY5OGQ3OWEuLjRkZWRkOTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuYworKysgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKQEAgLTc3Niw3ICs3NzYsNyBAQAogewogCWludCBzdGF0dXM7CiAKLQkqYWMgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCksIEdGUF9LRVJORUwpOworCSphYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEoKmFjKSkgewogCQlzdGF0dXMgPSAtRU5PTUVNOwogCQltbG9nX2Vycm5vKHN0YXR1cyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9tbWFwLmMgYi9mcy9vY2ZzMi9tbWFwLmMKaW5kZXggNjlmODVhZS4uNTFiMDIwNCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbW1hcC5jCisrKyBiL2ZzL29jZnMyL21tYXAuYwpAQCAtODMsMTAgKzgzLDEyIEBACiBpbnQgb2NmczJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaW50IHJldCA9IDAsIGxvY2tfbGV2ZWwgPSAwOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2IpOwogCiAJLyogV2UgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IHNoYXJlZCB3cml0YWJsZSBtYXBwaW5ncyB5ZXQuICovCi0JaWYgKCgodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkgfHwgKHZtYS0+dm1fZmxhZ3MgJiBWTV9NQVlTSEFSRSkpCi0JICAgICYmICgodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB8fCAodm1hLT52bV9mbGFncyAmIFZNX01BWVdSSVRFKSkpIHsKKwlpZiAoIW9jZnMyX21vdW50X2xvY2FsKG9zYikgJiYKKwkgICAgKCh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSB8fCAodm1hLT52bV9mbGFncyAmIFZNX01BWVNIQVJFKSkgJiYKKwkgICAgKCh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHx8ICh2bWEtPnZtX2ZsYWdzICYgVk1fTUFZV1JJVEUpKSkgewogCQltbG9nKDAsICJkaXNhbGxvdyBzaGFyZWQgd3JpdGFibGUgbW1hcHMgJWx4XG4iLCB2bWEtPnZtX2ZsYWdzKTsKIAkJLyogVGhpcyBpcyAtRUlOVkFMIGJlY2F1c2UgZ2VuZXJpY19maWxlX3JlYWRvbmx5X21tYXAKIAkJICogcmV0dXJucyBpdCBpbiBhIHNpbWlsYXIgc2l0dWF0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmMKaW5kZXggMjFkYjQ1ZC4uZjNkNzgwMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC01ODcsOSArNTg3LDExIEBACiAJfQogCiAJb2NmczJfaW5vZGVfc2V0X25ldyhvc2IsIGlub2RlKTsKLQlzdGF0dXMgPSBvY2ZzMl9jcmVhdGVfbmV3X2lub2RlX2xvY2tzKGlub2RlKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJbWxvZ19lcnJubyhzdGF0dXMpOworCWlmICghb2NmczJfbW91bnRfbG9jYWwob3NiKSkgeworCQlzdGF0dXMgPSBvY2ZzMl9jcmVhdGVfbmV3X2lub2RlX2xvY2tzKGlub2RlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJfQogCiAJc3RhdHVzID0gMDsgLyogZXJyb3IgaW4gb2NmczJfY3JlYXRlX25ld19pbm9kZV9sb2NrcyBpcyBub3QKIAkJICAgICAqIGNyaXRpY2FsICovCkBAIC05MzAsMTQgKzkzMiwxNSBAQAogCQlnb3RvIGxlYXZlOwogCX0KIAotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQlkcm9wX25saW5rKGRpcik7Ci0JCXN0YXR1cyA9IG9jZnMyX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBkaXIsCi0JCQkJCQlwYXJlbnRfbm9kZV9iaCk7Ci0JCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQltbG9nX2Vycm5vKHN0YXR1cyk7CisKKwlzdGF0dXMgPSBvY2ZzMl9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgZGlyLCBwYXJlbnRfbm9kZV9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJCWluY19ubGluayhkaXIpOwotCQl9CiAJfQogCiBsZWF2ZToKQEAgLTEwNjYsNiArMTA2OSw3IEBACiAJY2hhciBvcnBoYW5fbmFtZVtPQ0ZTMl9PUlBIQU5fTkFNRUxFTiArIDFdOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqb3JwaGFuX2VudHJ5X2JoID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld2ZlX2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9pbm9kZV9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICppbnNlcnRfZW50cnlfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gTlVMTDsKIAl1NjQgbmV3ZmVfYmxrbm87CkBAIC0xMDc3LDcgKzEwODEsNyBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2RlX2JoID0gTlVMTCwgKm9sZF9kZV9iaCA9IE5VTEw7IC8vIGJocyBmb3IgYWJvdmUKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9pbm9kZV9kZV9iaCA9IE5VTEw7IC8vIGlmIG9sZF9kZW50cnkgaXMgYSBkaXIsCiAJCQkJCQkgICAgLy8gdGhpcyBpcyB0aGUgMXN0IGRpcmVudCBiaAotCW5saW5rX3Qgb2xkX2Rpcl9ubGluayA9IG9sZF9kaXItPmlfbmxpbmssIG5ld19kaXJfbmxpbmsgPSBuZXdfZGlyLT5pX25saW5rOworCW5saW5rX3Qgb2xkX2Rpcl9ubGluayA9IG9sZF9kaXItPmlfbmxpbms7CiAKIAkvKiBBdCBzb21lIHBvaW50IGl0IG1pZ2h0IGJlIG5pY2UgdG8gYnJlYWsgdGhpcyBmdW5jdGlvbiB1cCBhCiAJICogYml0LiAqLwpAQCAtMTEzNywxMiArMTE0MSwxMSBAQAogCX0KIAogCS8qCi0JICogVGhvdWdoIHdlIGRvbid0IHJlcXVpcmUgYW4gaW5vZGUgbWV0YSBkYXRhIHVwZGF0ZSBpZgotCSAqIG9sZF9pbm9kZSBpcyBub3QgYSBkaXJlY3RvcnksIHdlIGxvY2sgYW55d2F5IGhlcmUgdG8gZW5zdXJlCi0JICogdGhlIHZvdGUgdGhyZWFkIG9uIG90aGVyIG5vZGVzIHdvbid0IGhhdmUgdG8gY29uY3VycmVudGx5Ci0JICogZG93bmNvbnZlcnQgdGhlIGlub2RlIGFuZCB0aGUgZGVudHJ5IGxvY2tzLgorCSAqIEFzaWRlIGZyb20gYWxsb3dpbmcgYSBtZXRhIGRhdGEgdXBkYXRlLCB0aGUgbG9ja2luZyBoZXJlCisJICogYWxzbyBlbnN1cmVzIHRoYXQgdGhlIHZvdGUgdGhyZWFkIG9uIG90aGVyIG5vZGVzIHdvbid0IGhhdmUKKwkgKiB0byBjb25jdXJyZW50bHkgZG93bmNvbnZlcnQgdGhlIGlub2RlIGFuZCB0aGUgZGVudHJ5IGxvY2tzLgogCSAqLwotCXN0YXR1cyA9IG9jZnMyX21ldGFfbG9jayhvbGRfaW5vZGUsIE5VTEwsIDEpOworCXN0YXR1cyA9IG9jZnMyX21ldGFfbG9jayhvbGRfaW5vZGUsICZvbGRfaW5vZGVfYmgsIDEpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT0VOVCkKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTEzNTMsNiArMTM1Niw3IEBACiAKIAlvbGRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOworCW9jZnMyX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBvbGRfaW5vZGUsIG9sZF9pbm9kZV9iaCk7CiAKIAkvKiBub3cgdGhhdCB0aGUgbmFtZSBoYXMgYmVlbiBhZGRlZCB0byBuZXdfZGlyLCByZW1vdmUgdGhlIG9sZCBuYW1lICovCiAJc3RhdHVzID0gb2NmczJfZGVsZXRlX2VudHJ5KGhhbmRsZSwgb2xkX2Rpciwgb2xkX2RlLCBvbGRfZGVfYmgpOwpAQCAtMTM4MiwyNyArMTM4NiwyMiBAQAogCQl9CiAJfQogCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7Ci0JaWYgKG5ld19pbm9kZSkKKwlvY2ZzMl9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgb2xkX2Rpciwgb2xkX2Rpcl9iaCk7CisJaWYgKG5ld19pbm9kZSkgewogCQltYXJrX2lub2RlX2RpcnR5KG5ld19pbm9kZSk7CisJCW9jZnMyX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBuZXdfaW5vZGUsIG5ld2ZlX2JoKTsKKwl9CiAKLQlpZiAob2xkX2RpciAhPSBuZXdfZGlyKQotCQlpZiAobmV3X2Rpcl9ubGluayAhPSBuZXdfZGlyLT5pX25saW5rKSB7Ci0JCQlpZiAoIW5ld19kaXJfYmgpIHsKLQkJCQltbG9nKE1MX0VSUk9SLCAibmVlZCB0byBjaGFuZ2UgbmxpbmsgZm9yIG5ldyAiCi0JCQkJICAgICAiZGlyICVsbHUgZnJvbSAlZCB0byAlZCBidXQgYmggaXMgTlVMTFxuIiwKLQkJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShuZXdfZGlyKS0+aXBfYmxrbm8sCi0JCQkJICAgICAoaW50KW5ld19kaXJfbmxpbmssIG5ld19kaXItPmlfbmxpbmspOwotCQkJfSBlbHNlIHsKLQkJCQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZTsKLQkJCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsCi0JCQkJCQkJICAgICAgbmV3X2RpciwKLQkJCQkJCQkgICAgICBuZXdfZGlyX2JoLAotCQkJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKLQkJCQlmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIG5ld19kaXJfYmgtPmJfZGF0YTsKLQkJCQlmZS0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KG5ld19kaXItPmlfbmxpbmspOwotCQkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBuZXdfZGlyX2JoKTsKLQkJCX0KLQkJfQorCWlmIChvbGRfZGlyICE9IG5ld19kaXIpIHsKKwkJLyogS2VlcCB0aGUgc2FtZSB0aW1lcyBvbiBib3RoIGRpcmVjdG9yaWVzLiovCisJCW5ld19kaXItPmlfY3RpbWUgPSBuZXdfZGlyLT5pX210aW1lID0gb2xkX2Rpci0+aV9jdGltZTsKKworCQkvKgorCQkgKiBUaGlzIHdpbGwgYWxzbyBwaWNrIHVwIHRoZSBpX25saW5rIGNoYW5nZSBmcm9tIHRoZQorCQkgKiBibG9jayBhYm92ZS4KKwkJICovCisJCW9jZnMyX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBuZXdfZGlyLCBuZXdfZGlyX2JoKTsKKwl9CiAKIAlpZiAob2xkX2Rpcl9ubGluayAhPSBvbGRfZGlyLT5pX25saW5rKSB7CiAJCWlmICghb2xkX2Rpcl9iaCkgewpAQCAtMTQ1Myw2ICsxNDUyLDggQEAKIAkJaXB1dChuZXdfaW5vZGUpOwogCWlmIChuZXdmZV9iaCkKIAkJYnJlbHNlKG5ld2ZlX2JoKTsKKwlpZiAob2xkX2lub2RlX2JoKQorCQlicmVsc2Uob2xkX2lub2RlX2JoKTsKIAlpZiAob2xkX2Rpcl9iaCkKIAkJYnJlbHNlKG9sZF9kaXJfYmgpOwogCWlmIChuZXdfZGlyX2JoKQpAQCAtMTgyNCw2ICsxODI1LDEzIEBACiAJCSAgICAgKGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKSA+PSByZWNfbGVuKSkgfHwKIAkJICAgIChsZTE2X3RvX2NwdShkZS0+cmVjX2xlbikgPj0KIAkJICAgICAoT0NGUzJfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKSArIHJlY19sZW4pKSkgeworCQkJZGlyLT5pX210aW1lID0gZGlyLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCQkJcmV0dmFsID0gb2NmczJfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGRpciwgcGFyZW50X2ZlX2JoKTsKKwkJCWlmIChyZXR2YWwgPCAwKSB7CisJCQkJbWxvZ19lcnJubyhyZXR2YWwpOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwogCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBkaXIsIGluc2VydF9iaCwKIAkJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJCS8qIEJ5IG5vdyB0aGUgYnVmZmVyIGlzIG1hcmtlZCBmb3Igam91cm5hbGluZyAqLwpAQCAtMTg0Niw3ICsxODU0LDYgQEAKIAkJCWRlLT5uYW1lX2xlbiA9IG5hbWVsZW47CiAJCQltZW1jcHkoZGUtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwogCi0JCQlkaXItPmlfbXRpbWUgPSBkaXItPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJCQlkaXItPmlfdmVyc2lvbisrOwogCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGluc2VydF9iaCk7CiAJCQlyZXR2YWwgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggYjc2N2ZkNy4uZGI4ZTc3YyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC0zNDksNiArMzQ5LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgb2NmczJfbW91bnRfbG9jYWwoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJcmV0dXJuIChvc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfTE9DQUxfTU9VTlQpOworfQorCiAjZGVmaW5lIE9DRlMyX0lTX1ZBTElEX0RJTk9ERShwdHIpCQkJCQlcCiAJKCFzdHJjbXAoKHB0ciktPmlfc2lnbmF0dXJlLCBPQ0ZTMl9JTk9ERV9TSUdOQVRVUkUpKQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oIGIvZnMvb2NmczIvb2NmczJfZnMuaAppbmRleCAzMzMwYTVkLi5lNjFlMjE4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oCisrKyBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKQEAgLTg1LDggKzg1LDggQEAKICNkZWZpbmUgT0NGUzJfQ0xFQVJfSU5DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKIAlPQ0ZTMl9TQihzYiktPnNfZmVhdHVyZV9pbmNvbXBhdCAmPSB+KG1hc2spCiAKLSNkZWZpbmUgT0NGUzJfRkVBVFVSRV9DT01QQVRfU1VQUAkwCi0jZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfU1VQUAkwCisjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfQ09NUEFUX1NVUFAJT0NGUzJfRkVBVFVSRV9DT01QQVRfQkFDS1VQX1NCCisjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfU1VQUAlPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0xPQ0FMX01PVU5UCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAJMAogCiAvKgpAQCAtOTYsNiArOTYsMzIgQEAKICAqLwogI2RlZmluZSBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0hFQVJUQkVBVF9ERVYJMHgwMDAyCiAKKy8qCisgKiB0dW5lZnMgc2V0cyB0aGlzIGluY29tcGF0IGZsYWcgYmVmb3JlIHN0YXJ0aW5nIHRoZSByZXNpemUgYW5kIGNsZWFycyBpdAorICogYXQgdGhlIGVuZC4gVGhpcyBmbGFnIHByb3RlY3RzIHVzZXJzIGZyb20gaW5hZHZlcnRlbnRseSBtb3VudGluZyB0aGUgZnMKKyAqIGFmdGVyIGFuIGFib3J0ZWQgcnVuIHdpdGhvdXQgZnNjay1pbmcuCisgKi8KKyNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9SRVNJWkVfSU5QUk9HICAgIDB4MDAwNAorCisvKiBVc2VkIHRvIGRlbm90ZSBhIG5vbi1jbHVzdGVyZWQgdm9sdW1lICovCisjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfTE9DQUxfTU9VTlQJMHgwMDA4CisKKy8qIFN1cHBvcnQgZm9yIHNwYXJzZSBhbGxvY2F0aW9uIGluIGItdHJlZXMgKi8KKyNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9TUEFSU0VfQUxMT0MJMHgwMDEwCisKKy8qCisgKiBiYWNrdXAgc3VwZXJibG9jayBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHZvbHVtZQorICogaGFzIGJhY2t1cCBzdXBlcmJsb2Nrcy4KKyAqLworI2RlZmluZSBPQ0ZTMl9GRUFUVVJFX0NPTVBBVF9CQUNLVVBfU0IJCTB4MDAwMQorCisvKiBUaGUgYnl0ZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGJhY2t1cCBibG9jayB3aWxsIGJlIDFHLgorICogVGhlIGZvbGxvd2luZyB3aWxsIGJlIDRHLCAxNkcsIDY0RywgMjU2RyBhbmQgMVQuCisgKi8KKyNkZWZpbmUgT0NGUzJfQkFDS1VQX1NCX1NUQVJUCQkJMSA8PCAzMAorCisvKiB0aGUgbWF4IGJhY2t1cCBzdXBlcmJsb2NrIG51bXMgKi8KKyNkZWZpbmUgT0NGUzJfTUFYX0JBQ0tVUF9TVVBFUkJMT0NLUwk2CiAKIC8qCiAgKiBGbGFncyBvbiBvY2ZzMl9kaW5vZGUuaV9mbGFncwpAQCAtNTU0LDYgKzU4MCwyMCBAQAogCiAJcmV0dXJuIHNpemUgLyBzaXplb2Yoc3RydWN0IG9jZnMyX3RydW5jYXRlX3JlYyk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdTY0IG9jZnMyX2JhY2t1cF9zdXBlcl9ibGtubyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5kZXgpCit7CisJdTY0IG9mZnNldCA9IE9DRlMyX0JBQ0tVUF9TQl9TVEFSVDsKKworCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgT0NGUzJfTUFYX0JBQ0tVUF9TVVBFUkJMT0NLUykgeworCQlvZmZzZXQgPDw9ICgyICogaW5kZXgpOworCQlvZmZzZXQgPj49IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCQlyZXR1cm4gb2Zmc2V0OworCX0KKworCXJldHVybiAwOworCit9CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgb2NmczJfZmFzdF9zeW1saW5rX2NoYXJzKGludCBibG9ja3NpemUpCiB7CkBAIC02MTksNiArNjU5LDE5IEBACiAKIAlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfdHJ1bmNhdGVfcmVjKTsKIH0KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBvY2ZzMl9iYWNrdXBfc3VwZXJfYmxrbm8oaW50IGJsb2Nrc2l6ZSwgaW50IGluZGV4KQoreworCXVpbnQ2NF90IG9mZnNldCA9IE9DRlMyX0JBQ0tVUF9TQl9TVEFSVDsKKworCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgT0NGUzJfTUFYX0JBQ0tVUF9TVVBFUkJMT0NLUykgeworCQlvZmZzZXQgPDw9ICgyICogaW5kZXgpOworCQlvZmZzZXQgLz0gYmxvY2tzaXplOworCQlyZXR1cm4gb2Zmc2V0OworCX0KKworCXJldHVybiAwOworfQogI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCiAKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc2xvdF9tYXAuYyBiL2ZzL29jZnMyL3Nsb3RfbWFwLmMKaW5kZXggYWE2ZjVhYS4uMmQzYWMzMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc2xvdF9tYXAuYworKysgYi9mcy9vY2ZzMi9zbG90X21hcC5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvICpzaTsKIAotCXNpID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyksIEdGUF9LRVJORUwpOworCXNpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX3Nsb3RfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghc2kpIHsKIAkJc3RhdHVzID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuYyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKaW5kZXggMDAwZDcxYy4uNmRiYjExNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuYworKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCkBAIC00ODgsNyArNDg4LDcgQEAKIAlpbnQgc3RhdHVzOwogCXUzMiBzbG90OwogCi0JKmFjID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwkqYWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCksIEdGUF9LRVJORUwpOwogCWlmICghKCphYykpIHsKIAkJc3RhdHVzID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNTMwLDcgKzUzMCw3IEBACiB7CiAJaW50IHN0YXR1czsKIAotCSphYyA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0KSwgR0ZQX0tFUk5FTCk7CisJKmFjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISgqYWMpKSB7CiAJCXN0YXR1cyA9IC1FTk9NRU07CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTU5NSw3ICs1OTUsNyBAQAogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKLQkqYWMgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCksIEdGUF9LRVJORUwpOworCSphYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEoKmFjKSkgewogCQlzdGF0dXMgPSAtRU5PTUVNOwogCQltbG9nX2Vycm5vKHN0YXR1cyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCA0YmYzOTU0Li42ZTMwMGE4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTUwOCw2ICs1MDgsMjcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IG9jZnMyX3ZlcmlmeV9oZWFydGJlYXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpIHsKKwkJaWYgKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9IQl9MT0NBTCkgeworCQkJbWxvZyhNTF9FUlJPUiwgIkNhbm5vdCBoZWFydGJlYXQgb24gYSBsb2NhbGx5ICIKKwkJCSAgICAgIm1vdW50ZWQgZGV2aWNlLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlmICghKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9IQl9MT0NBTCkpIHsKKwkJaWYgKCFvY2ZzMl9tb3VudF9sb2NhbChvc2IpICYmICFvY2ZzMl9pc19oYXJkX3JlYWRvbmx5KG9zYikpIHsKKwkJCW1sb2coTUxfRVJST1IsICJIZWFydGJlYXQgaGFzIHRvIGJlIHN0YXJ0ZWQgdG8gbW91bnQgIgorCQkJICAgICAiYSByZWFkLXdyaXRlIGNsdXN0ZXJlZCBkZXZpY2UuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgb2NmczJfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogewogCXN0cnVjdCBkZW50cnkgKnJvb3Q7CkBAIC01MTYsMTYgKzUzNywyNCBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwljaGFyIG5vZGVzdHJbOF07CiAKIAltbG9nX2VudHJ5KCIlcCwgJXAsICVpIiwgc2IsIGRhdGEsIHNpbGVudCk7CiAKLQkvKiBmb3Igbm93IHdlIG9ubHkgaGF2ZSBvbmUgY2x1c3Rlci9ub2RlLCBtYWtlIHN1cmUgd2Ugc2VlIGl0Ci0JICogaW4gdGhlIGhlYXJ0YmVhdCB1bml2ZXJzZSAqLwotCWlmICghbzJoYl9jaGVja19sb2NhbF9ub2RlX2hlYXJ0YmVhdGluZygpKSB7CisJaWYgKCFvY2ZzMl9wYXJzZV9vcHRpb25zKHNiLCBkYXRhLCAmcGFyc2VkX29wdCwgMCkpIHsKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAkJZ290byByZWFkX3N1cGVyX2Vycm9yOwogCX0KIAorCS8qIGZvciBub3cgd2Ugb25seSBoYXZlIG9uZSBjbHVzdGVyL25vZGUsIG1ha2Ugc3VyZSB3ZSBzZWUgaXQKKwkgKiBpbiB0aGUgaGVhcnRiZWF0IHVuaXZlcnNlICovCisJaWYgKHBhcnNlZF9vcHQgJiBPQ0ZTMl9NT1VOVF9IQl9MT0NBTCkgeworCQlpZiAoIW8yaGJfY2hlY2tfbG9jYWxfbm9kZV9oZWFydGJlYXRpbmcoKSkgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKKwkJfQorCX0KKwogCS8qIHByb2JlIGZvciBzdXBlcmJsb2NrICovCiAJc3RhdHVzID0gb2NmczJfc2JfcHJvYmUoc2IsICZiaCwgJnNlY3Rvcl9zaXplKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtNTQxLDExICs1NzAsNiBAQAogCX0KIAlicmVsc2UoYmgpOwogCWJoID0gTlVMTDsKLQotCWlmICghb2NmczJfcGFyc2Vfb3B0aW9ucyhzYiwgZGF0YSwgJnBhcnNlZF9vcHQsIDApKSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKLQl9CiAJb3NiLT5zX21vdW50X29wdCA9IHBhcnNlZF9vcHQ7CiAKIAlzYi0+c19tYWdpYyA9IE9DRlMyX1NVUEVSX01BR0lDOwpAQCAtNTg4LDIxICs2MTIsMTYgQEAKIAl9CiAKIAlpZiAoIW9jZnMyX2lzX2hhcmRfcmVhZG9ubHkob3NiKSkgewotCQkvKiBJZiB0aGlzIGlzbid0IGEgaGFyZCByZWFkb25seSBtb3VudCwgdGhlbiB3ZSBuZWVkCi0JCSAqIHRvIG1ha2Ugc3VyZSB0aGF0IGhlYXJ0YmVhdCBpcyBpbiBhIHZhbGlkIHN0YXRlLAotCQkgKiBhbmQgdGhhdCB3ZSBtYXJrIG91cnNlbHZlcyBzb2Z0IHJlYWRvbmx5IGlzIC1vcm8KLQkJICogd2FzIHNwZWNpZmllZC4gKi8KLQkJaWYgKCEob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX0hCX0xPQ0FMKSkgewotCQkJbWxvZyhNTF9FUlJPUiwgIk5vIGhlYXJ0YmVhdCBmb3IgZGV2aWNlICglcylcbiIsCi0JCQkgICAgIHNiLT5zX2lkKTsKLQkJCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHJlYWRfc3VwZXJfZXJyb3I7Ci0JCX0KLQogCQlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCQlvY2ZzMl9zZXRfcm9fZmxhZyhvc2IsIDApOwogCX0KIAorCXN0YXR1cyA9IG9jZnMyX3ZlcmlmeV9oZWFydGJlYXQob3NiKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKKwl9CisKIAlvc2ItPm9zYl9kZWJ1Z19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKG9zYi0+dXVpZF9zdHIsCiAJCQkJCQkgb2NmczJfZGVidWdmc19yb290KTsKIAlpZiAoIW9zYi0+b3NiX2RlYnVnX3Jvb3QpIHsKQEAgLTYzNSw5ICs2NTQsMTQgQEAKIAogCW9jZnMyX2NvbXBsZXRlX21vdW50X3JlY292ZXJ5KG9zYik7CiAKLQlwcmludGsoS0VSTl9JTkZPICJvY2ZzMjogTW91bnRpbmcgZGV2aWNlICglcykgb24gKG5vZGUgJWQsIHNsb3QgJWQpICIKKwlpZiAob2NmczJfbW91bnRfbG9jYWwob3NiKSkKKwkJc25wcmludGYobm9kZXN0ciwgc2l6ZW9mKG5vZGVzdHIpLCAibG9jYWwiKTsKKwllbHNlCisJCXNucHJpbnRmKG5vZGVzdHIsIHNpemVvZihub2Rlc3RyKSwgIiVkIiwgb3NiLT5ub2RlX251bSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJvY2ZzMjogTW91bnRpbmcgZGV2aWNlICglcykgb24gKG5vZGUgJXMsIHNsb3QgJWQpICIKIAkgICAgICAgIndpdGggJXMgZGF0YSBtb2RlLlxuIiwKLQkgICAgICAgb3NiLT5kZXZfc3RyLCBvc2ItPm5vZGVfbnVtLCBvc2ItPnNsb3RfbnVtLAorCSAgICAgICBvc2ItPmRldl9zdHIsIG5vZGVzdHIsIG9zYi0+c2xvdF9udW0sCiAJICAgICAgIG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9EQVRBX1dSSVRFQkFDSyA/ICJ3cml0ZWJhY2siIDoKIAkgICAgICAgIm9yZGVyZWQiKTsKIApAQCAtOTk5LDcgKzEwMjMsMTEgQEAKIAogCS8qIFhYWCBob2xkIGEgcmVmIG9uIHRoZSBub2RlIHdoaWxlIG1vdW50ZT8gIGVhc3kgZW5vdWdoLCBpZgogCSAqIGRlc2lyYWJsZS4gKi8KLQlvc2ItPm5vZGVfbnVtID0gbzJubV90aGlzX25vZGUoKTsKKwlpZiAob2NmczJfbW91bnRfbG9jYWwob3NiKSkKKwkJb3NiLT5ub2RlX251bSA9IDA7CisJZWxzZQorCQlvc2ItPm5vZGVfbnVtID0gbzJubV90aGlzX25vZGUoKTsKKwogCWlmIChvc2ItPm5vZGVfbnVtID09IE8yTk1fTUFYX05PREVTKSB7CiAJCW1sb2coTUxfRVJST1IsICJjb3VsZCBub3QgZmluZCB0aGlzIGhvc3QncyBub2RlIG51bWJlclxuIik7CiAJCXN0YXR1cyA9IC1FTk9FTlQ7CkBAIC0xMDg0LDYgKzExMTIsOSBAQAogCQlnb3RvIGxlYXZlOwogCX0KIAorCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlnb3RvIGxlYXZlOworCiAJLyogVGhpcyBzaG91bGQgYmUgc2VudCAqYWZ0ZXIqIHdlIHJlY292ZXJlZCBvdXIgam91cm5hbCBhcyBpdAogCSAqIHdpbGwgY2F1c2Ugb3RoZXIgbm9kZXMgdG8gdW5tYXJrIHVzIGFzIG5lZWRpbmcKIAkgKiByZWNvdmVyeS4gSG93ZXZlciwgd2UgbmVlZCB0byBzZW5kIGl0ICpiZWZvcmUqIGRyb3BwaW5nIHRoZQpAQCAtMTExNCw2ICsxMTQ1LDcgQEAKIHsKIAlpbnQgdG1wOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gTlVMTDsKKwljaGFyIG5vZGVzdHJbOF07CiAKIAltbG9nX2VudHJ5KCIoMHglcClcbiIsIHNiKTsKIApAQCAtMTE3Nyw4ICsxMjA5LDEzIEBACiAKIAlhdG9taWNfc2V0KCZvc2ItPnZvbF9zdGF0ZSwgVk9MVU1FX0RJU01PVU5URUQpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAib2NmczI6IFVubW91bnRpbmcgZGV2aWNlICglcykgb24gKG5vZGUgJWQpXG4iLAotCSAgICAgICBvc2ItPmRldl9zdHIsIG9zYi0+bm9kZV9udW0pOworCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlzbnByaW50Zihub2Rlc3RyLCBzaXplb2Yobm9kZXN0ciksICJsb2NhbCIpOworCWVsc2UKKwkJc25wcmludGYobm9kZXN0ciwgc2l6ZW9mKG5vZGVzdHIpLCAiJWQiLCBvc2ItPm5vZGVfbnVtKTsKKworCXByaW50ayhLRVJOX0lORk8gIm9jZnMyOiBVbm1vdW50aW5nIGRldmljZSAoJXMpIG9uIChub2RlICVzKVxuIiwKKwkgICAgICAgb3NiLT5kZXZfc3RyLCBub2Rlc3RyKTsKIAogCW9jZnMyX2RlbGV0ZV9vc2Iob3NiKTsKIAlrZnJlZShvc2IpOwpAQCAtMTE5NCw3ICsxMjMxLDcgQEAKIAogCUJVR19PTih1dWlkX2J5dGVzICE9IE9DRlMyX1ZPTF9VVUlEX0xFTik7CiAKLQlvc2ItPnV1aWRfc3RyID0ga2NhbGxvYygxLCBPQ0ZTMl9WT0xfVVVJRF9MRU4gKiAyICsgMSwgR0ZQX0tFUk5FTCk7CisJb3NiLT51dWlkX3N0ciA9IGt6YWxsb2MoT0NGUzJfVk9MX1VVSURfTEVOICogMiArIDEsIEdGUF9LRVJORUwpOwogCWlmIChvc2ItPnV1aWRfc3RyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMjI1LDcgKzEyNjIsNyBAQAogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKLQlvc2IgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgb2NmczJfc3VwZXIpLCBHRlBfS0VSTkVMKTsKKwlvc2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfc3VwZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9zYikgewogCQlzdGF0dXMgPSAtRU5PTUVNOwogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xMzUwLDcgKzEzODcsNyBAQAogCSAqLwogCS8qIGluaXRpYWxpemUgb3VyIGpvdXJuYWwgc3RydWN0dXJlICovCiAKLQlqb3VybmFsID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IG9jZnMyX2pvdXJuYWwpLCBHRlBfS0VSTkVMKTsKKwlqb3VybmFsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2pvdXJuYWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWpvdXJuYWwpIHsKIAkJbWxvZyhNTF9FUlJPUiwgInVuYWJsZSB0byBhbGxvYyBqb3VybmFsXG4iKTsKIAkJc3RhdHVzID0gLUVOT01FTTsKQEAgLTE1MzYsNiArMTU3Myw3IEBACiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJaW50IGRpcnR5OworCWludCBsb2NhbDsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpsb2NhbF9hbGxvYyA9IE5VTEw7IC8qIG9ubHkgdXNlZCBpZiB3ZQogCQkJCQkJICAqIHJlY292ZXIKIAkJCQkJCSAgKiBvdXJzZWx2ZXMuICovCkBAIC0xNTYzLDggKzE2MDEsMTAgQEAKIAkJICAgICAicmVjb3ZlcmluZyB2b2x1bWUuXG4iKTsKIAl9CiAKKwlsb2NhbCA9IG9jZnMyX21vdW50X2xvY2FsKG9zYik7CisKIAkvKiB3aWxsIHBsYXkgYmFjayBhbnl0aGluZyBsZWZ0IGluIHRoZSBqb3VybmFsLiAqLwotCW9jZnMyX2pvdXJuYWxfbG9hZChvc2ItPmpvdXJuYWwpOworCW9jZnMyX2pvdXJuYWxfbG9hZChvc2ItPmpvdXJuYWwsIGxvY2FsKTsKIAogCWlmIChkaXJ0eSkgewogCQkvKiByZWNvdmVyIG15IGxvY2FsIGFsbG9jIGlmIHdlIGRpZG4ndCB1bm1vdW50IGNsZWFubHkuICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zeW1saW5rLmMgYi9mcy9vY2ZzMi9zeW1saW5rLmMKaW5kZXggOTU3ZDY4Ny4uMDNiMDE5MSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ltbGluay5jCisrKyBiL2ZzL29jZnMyL3N5bWxpbmsuYwpAQCAtMTU4LDggKzE1OCw3IEBACiAJfQogCiAJc3RhdHVzID0gdmZzX2ZvbGxvd19saW5rKG5kLCBsaW5rKTsKLQlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRU5PRU5UKQotCQltbG9nX2Vycm5vKHN0YXR1cyk7CisKIGJhaWw6CiAJaWYgKHBhZ2UpIHsKIAkJa3VubWFwKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvdm90ZS5jIGIvZnMvb2NmczIvdm90ZS5jCmluZGV4IDViNGRjYTcuLjBhZmQ4YjkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3ZvdGUuYworKysgYi9mcy9vY2ZzMi92b3RlLmMKQEAgLTQ3OSw3ICs0NzksNyBAQAogewogCXN0cnVjdCBvY2ZzMl9uZXRfd2FpdF9jdHh0ICp3OwogCi0JdyA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp3KSwgR0ZQX05PRlMpOworCXcgPSBremFsbG9jKHNpemVvZigqdyksIEdGUF9OT0ZTKTsKIAlpZiAoIXcpIHsKIAkJbWxvZ19lcnJubygtRU5PTUVNKTsKIAkJZ290byBiYWlsOwpAQCAtNjQyLDcgKzY0Miw3IEBACiAKIAlCVUdfT04oIW9jZnMyX2lzX3ZhbGlkX3ZvdGVfcmVxdWVzdCh0eXBlKSk7CiAKLQlyZXF1ZXN0ID0ga2NhbGxvYygxLCBzaXplb2YoKnJlcXVlc3QpLCBHRlBfTk9GUyk7CisJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSwgR0ZQX05PRlMpOwogCWlmICghcmVxdWVzdCkgewogCQltbG9nX2Vycm5vKC1FTk9NRU0pOwogCX0gZWxzZSB7CkBAIC0xMDAwLDYgKzEwMDAsOSBAQAogewogCWludCBzdGF0dXMgPSAwOwogCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCXJldHVybiAwOworCiAJc3RhdHVzID0gbzJuZXRfcmVnaXN0ZXJfaGFuZGxlcihPQ0ZTMl9NRVNTQUdFX1RZUEVfUkVTUE9OU0UsCiAJCQkJCW9zYi0+bmV0X2tleSwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZXNwb25zZV9tc2cpLApkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDg5ZTBjMjMuLmM5ODlmYjQgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCWZpbGUgPSBmZ2V0KGZkKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0OwotCWVycm9yID0gdmZzX3N0YXRmc19uYXRpdmUoZmlsZS0+Zl9kZW50cnksICZ0bXApOworCWVycm9yID0gdmZzX3N0YXRmc19uYXRpdmUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgJnRtcCk7CiAJaWYgKCFlcnJvciAmJiBjb3B5X3RvX3VzZXIoYnVmLCAmdG1wLCBzaXplb2YodG1wKSkpCiAJCWVycm9yID0gLUVGQVVMVDsKIAlmcHV0KGZpbGUpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJZmlsZSA9IGZnZXQoZmQpOwogCWlmICghZmlsZSkKIAkJZ290byBvdXQ7Ci0JZXJyb3IgPSB2ZnNfc3RhdGZzNjQoZmlsZS0+Zl9kZW50cnksICZ0bXApOworCWVycm9yID0gdmZzX3N0YXRmczY0KGZpbGUtPmZfcGF0aC5kZW50cnksICZ0bXApOwogCWlmICghZXJyb3IgJiYgY29weV90b191c2VyKGJ1ZiwgJnRtcCwgc2l6ZW9mKHRtcCkpKQogCQllcnJvciA9IC1FRkFVTFQ7CiAJZnB1dChmaWxlKTsKQEAgLTMwMiw3ICszMDIsNyBAQAogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19MQVJHRUZJTEUpCiAJCXNtYWxsID0gMDsKIAotCWRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCWRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJZXJyb3IgPSAtRUlOVkFMOwogCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSB8fCAhKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKQEAgLTQ0OCw4ICs0NDgsOCBAQAogCWlmICghZmlsZSkKIAkJZ290byBvdXQ7CiAKLQlkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKLQltbnQgPSBmaWxlLT5mX3Zmc21udDsKKwlkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OworCW1udCA9IGZpbGUtPmZfcGF0aC5tbnQ7CiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKIAllcnJvciA9IC1FTk9URElSOwpAQCAtNTAzLDcgKzUwMyw3IEBACiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dDsKIAotCWRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCWRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKIAlhdWRpdF9pbm9kZShOVUxMLCBpbm9kZSk7CkBAIC02NjIsNyArNjYyLDcgQEAKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0OwogCi0JZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnktPmRfaW5vZGUpOwogCWVycm9yID0gY2hvd25fY29tbW9uKGRlbnRyeSwgdXNlciwgZ3JvdXApOwogCWZwdXQoZmlsZSk7CkBAIC02ODgsOCArNjg4LDggQEAKIAl9CiAKIAlmLT5mX21hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwotCWYtPmZfZGVudHJ5ID0gZGVudHJ5OwotCWYtPmZfdmZzbW50ID0gbW50OworCWYtPmZfcGF0aC5kZW50cnkgPSBkZW50cnk7CisJZi0+Zl9wYXRoLm1udCA9IG1udDsKIAlmLT5mX3BvcyA9IDA7CiAJZi0+Zl9vcCA9IGZvcHNfZ2V0KGlub2RlLT5pX2ZvcCk7CiAJZmlsZV9tb3ZlKGYsICZpbm9kZS0+aV9zYi0+c19maWxlcyk7CkBAIC03MjMsOCArNzIzLDggQEAKIAlpZiAoZi0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCiAJCXB1dF93cml0ZV9hY2Nlc3MoaW5vZGUpOwogCWZpbGVfa2lsbChmKTsKLQlmLT5mX2RlbnRyeSA9IE5VTEw7Ci0JZi0+Zl92ZnNtbnQgPSBOVUxMOworCWYtPmZfcGF0aC5kZW50cnkgPSBOVUxMOworCWYtPmZfcGF0aC5tbnQgPSBOVUxMOwogY2xlYW51cF9maWxlOgogCXB1dF9maWxwKGYpOwogCWRwdXQoZGVudHJ5KTsKQEAgLTgyMiw3ICs4MjIsNyBAQAogCS8qIFBpY2sgdXAgdGhlIGZpbHAgZnJvbSB0aGUgb3BlbiBpbnRlbnQgKi8KIAlmaWxwID0gbmQtPmludGVudC5vcGVuLmZpbGU7CiAJLyogSGFzIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpc2VkIHRoZSBmaWxlIGZvciB1cz8gKi8KLQlpZiAoZmlscC0+Zl9kZW50cnkgPT0gTlVMTCkKKwlpZiAoZmlscC0+Zl9wYXRoLmRlbnRyeSA9PSBOVUxMKQogCQlmaWxwID0gX19kZW50cnlfb3BlbihuZC0+ZGVudHJ5LCBuZC0+bW50LCBmbGFncywgZmlscCwgTlVMTCk7CiAJZWxzZQogCQlwYXRoX3JlbGVhc2UobmQpOwpAQCAtODY0LDggKzg2NCw3IEBACiAKIHJlcGVhdDoKIAlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKLSAJZmQgPSBmaW5kX25leHRfemVyb19iaXQoZmR0LT5vcGVuX2Zkcy0+ZmRzX2JpdHMsCi0JCQkJZmR0LT5tYXhfZmRzZXQsCisJZmQgPSBmaW5kX25leHRfemVyb19iaXQoZmR0LT5vcGVuX2Zkcy0+ZmRzX2JpdHMsIGZkdC0+bWF4X2ZkcywKIAkJCQlmaWxlcy0+bmV4dF9mZCk7CiAKIAkvKgpAQCAtOTY1LDcgKzk2NCw3IEBACiAJCQkJcHV0X3VudXNlZF9mZChmZCk7CiAJCQkJZmQgPSBQVFJfRVJSKGYpOwogCQkJfSBlbHNlIHsKLQkJCQlmc25vdGlmeV9vcGVuKGYtPmZfZGVudHJ5KTsKKwkJCQlmc25vdGlmeV9vcGVuKGYtPmZfcGF0aC5kZW50cnkpOwogCQkJCWZkX2luc3RhbGwoZmQsIGYpOwogCQkJfQogCQl9CkBAIC0xMDg3LDYgKzEwODYsNyBAQAogYXNtbGlua2FnZSBsb25nIHN5c192aGFuZ3VwKHZvaWQpCiB7CiAJaWYgKGNhcGFibGUoQ0FQX1NZU19UVFlfQ09ORklHKSkgeworCQkvKiBYWFg6IHRoaXMgbmVlZHMgbG9ja2luZyAqLwogCQl0dHlfdmhhbmd1cChjdXJyZW50LT5zaWduYWwtPnR0eSk7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2ZzL29wZW5wcm9tZnMvaW5vZGUuYyBiL2ZzL29wZW5wcm9tZnMvaW5vZGUuYwppbmRleCAyNmY0NGUwLi45OWMwYmMzIDEwMDY0NAotLS0gYS9mcy9vcGVucHJvbWZzL2lub2RlLmMKKysrIGIvZnMvb3BlbnByb21mcy9pbm9kZS5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAogc3RhdGljIGludCBvcGVucHJvbWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IG9wX2lub2RlX2luZm8gKm9pID0gT1BfSShpbm9kZSk7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9pLT51Lm5vZGU7CiAJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvS2NvbmZpZyBiL2ZzL3BhcnRpdGlvbnMvS2NvbmZpZwppbmRleCBlNDc4ZjE5Li43NDU1MmM2IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL0tjb25maWcKKysrIGIvZnMvcGFydGl0aW9ucy9LY29uZmlnCkBAIC0xOTQsNyArMTk0LDcgQEAKIAogY29uZmlnIFNHSV9QQVJUSVRJT04KIAlib29sICJTR0kgcGFydGl0aW9uIHN1cHBvcnQiIGlmIFBBUlRJVElPTl9BRFZBTkNFRAotCWRlZmF1bHQgeSBpZiAoU0dJX0lQMjIgfHwgU0dJX0lQMjcgfHwgKChNQUNIX0pBWlogfHwgU05JX1JNMjAwX1BDSSkgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSkKKwlkZWZhdWx0IHkgaWYgKFNHSV9JUDIyIHx8IFNHSV9JUDI3IHx8ICgoTUFDSF9KQVpaIHx8IFNOSV9STSkgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGJlIGFibGUgdG8gcmVhZCB0aGUgaGFyZCBkaXNrCiAJICBwYXJ0aXRpb24gdGFibGUgZm9ybWF0IHVzZWQgYnkgU0dJIG1hY2hpbmVzLgpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDE5MDExMzcuLjNkNzNkOTQgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTI3NiwxMiArMjc2LDM5IEBACiAJLnNob3cJPSBwYXJ0X3N0YXRfcmVhZAogfTsKIAorI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAorCitzdGF0aWMgc3NpemVfdCBwYXJ0X2ZhaWxfc3RvcmUoc3RydWN0IGhkX3N0cnVjdCAqIHAsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IGk7CisKKwlpZiAoY291bnQgPiAwICYmIHNzY2FuZihidWYsICIlZCIsICZpKSA+IDApCisJCXAtPm1ha2VfaXRfZmFpbCA9IChpID09IDApID8gMCA6IDE7CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgc3NpemVfdCBwYXJ0X2ZhaWxfcmVhZChzdHJ1Y3QgaGRfc3RydWN0ICogcCwgY2hhciAqcGFnZSkKK3sKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWRcbiIsIHAtPm1ha2VfaXRfZmFpbCk7Cit9CitzdGF0aWMgc3RydWN0IHBhcnRfYXR0cmlidXRlIHBhcnRfYXR0cl9mYWlsID0geworCS5hdHRyID0gey5uYW1lID0gIm1ha2UtaXQtZmFpbCIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKKwkuc3RvcmUJPSBwYXJ0X2ZhaWxfc3RvcmUsCisJLnNob3cJPSBwYXJ0X2ZhaWxfcmVhZAorfTsKKworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogZGVmYXVsdF9hdHRyc1tdID0gewogCSZwYXJ0X2F0dHJfdWV2ZW50LmF0dHIsCiAJJnBhcnRfYXR0cl9kZXYuYXR0ciwKIAkmcGFydF9hdHRyX3N0YXJ0LmF0dHIsCiAJJnBhcnRfYXR0cl9zaXplLmF0dHIsCiAJJnBhcnRfYXR0cl9zdGF0LmF0dHIsCisjaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUCisJJnBhcnRfYXR0cl9mYWlsLmF0dHIsCisjZW5kaWYKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IGFlMzZiODkuLjY4MDkwZTggMTAwNjQ0Ci0tLSBhL2ZzL3BpcGUuYworKysgYi9mcy9waXBlLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgYW5vbl9waXBlX2J1Zl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgYW5vbl9waXBlX2J1Zl9vcHMgPSB7CiAJLmNhbl9tZXJnZSA9IDEsCiAJLm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAogCS51bm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCkBAIC0yMjIsNyArMjIyLDcgQEAKIAkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCWludCBkb193YWtldXA7CiAJc3NpemVfdCByZXQ7CkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJaWYgKGJ1ZnMpIHsKIAkJCWludCBjdXJidWYgPSBwaXBlLT5jdXJidWY7CiAJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBjdXJidWY7Ci0JCQlzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyAqb3BzID0gYnVmLT5vcHM7CisJCQljb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyAqb3BzID0gYnVmLT5vcHM7CiAJCQl2b2lkICphZGRyOwogCQkJc2l6ZV90IGNoYXJzID0gYnVmLT5sZW47CiAJCQlpbnQgZXJyb3IsIGF0b21pYzsKQEAgLTMzNSw3ICszMzUsNyBAQAogCSAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwcG9zKQogewogCXN0cnVjdCBmaWxlICpmaWxwID0gaW9jYi0+a2lfZmlscDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAlzc2l6ZV90IHJldDsKIAlpbnQgZG9fd2FrZXVwOwpAQCAtMzY1LDcgKzM2NSw3IEBACiAJCWludCBsYXN0YnVmID0gKHBpcGUtPmN1cmJ1ZiArIHBpcGUtPm5yYnVmcyAtIDEpICYKIAkJCQkJCQkoUElQRV9CVUZGRVJTLTEpOwogCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZiA9IHBpcGUtPmJ1ZnMgKyBsYXN0YnVmOwotCQlzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyAqb3BzID0gYnVmLT5vcHM7CisJCWNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHMgPSBidWYtPm9wczsKIAkJaW50IG9mZnNldCA9IGJ1Zi0+b2Zmc2V0ICsgYnVmLT5sZW47CiAKIAkJaWYgKG9wcy0+Y2FuX21lcmdlICYmIG9mZnNldCArIGNoYXJzIDw9IFBBR0VfU0laRSkgewpAQCAtNTIwLDcgKzUyMCw3IEBACiBwaXBlX2lvY3RsKHN0cnVjdCBpbm9kZSAqcGlubywgc3RydWN0IGZpbGUgKmZpbHAsCiAJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CiAJaW50IGNvdW50LCBidWYsIG5yYnVmczsKIApAQCAtNTQ4LDcgKzU0OCw3IEBACiBwaXBlX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJdW5zaWduZWQgaW50IG1hc2s7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUgPSBpbm9kZS0+aV9waXBlOwogCWludCBucmJ1ZnM7CiAKQEAgLTYwMSw3ICs2MDEsNyBAQAogc3RhdGljIGludAogcGlwZV9yZWFkX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgb24pCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCByZXR2YWw7CiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CkBAIC02MTgsNyArNjE4LDcgQEAKIHN0YXRpYyBpbnQKIHBpcGVfd3JpdGVfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHJldHZhbDsKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKQEAgLTYzNSw3ICs2MzUsNyBAQAogc3RhdGljIGludAogcGlwZV9yZHdyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgb24pCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUgPSBpbm9kZS0+aV9waXBlOwogCWludCByZXR2YWw7CiAKQEAgLTc1Niw3ICs3NTYsNyBAQAogCS5mYXN5bmMJCT0gcGlwZV9yZHdyX2Zhc3luYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRfcGlwZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVhZF9waXBlX2ZvcHMgPSB7CiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS5haW9fcmVhZAk9IHBpcGVfcmVhZCwKQEAgLTc2OCw3ICs3NjgsNyBAQAogCS5mYXN5bmMJCT0gcGlwZV9yZWFkX2Zhc3luYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdyaXRlX3BpcGVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdyaXRlX3BpcGVfZm9wcyA9IHsKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkucmVhZAkJPSBiYWRfcGlwZV9yLAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLApAQCAtNzgwLDcgKzc4MCw3IEBACiAJLmZhc3luYwkJPSBwaXBlX3dyaXRlX2Zhc3luYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfcGlwZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmR3cl9waXBlX2ZvcHMgPSB7CiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS5haW9fcmVhZAk9IHBpcGVfcmVhZCwKQEAgLTkxNCw4ICs5MTQsOCBAQAogCSAqLwogCWRlbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JZi0+Zl92ZnNtbnQgPSBtbnRnZXQocGlwZV9tbnQpOwotCWYtPmZfZGVudHJ5ID0gZGVudHJ5OworCWYtPmZfcGF0aC5tbnQgPSBtbnRnZXQocGlwZV9tbnQpOworCWYtPmZfcGF0aC5kZW50cnkgPSBkZW50cnk7CiAJZi0+Zl9tYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAogCWYtPmZfZmxhZ3MgPSBPX1dST05MWTsKQEAgLTkzNSw4ICs5MzUsOSBAQAogCiB2b2lkIGZyZWVfd3JpdGVfcGlwZShzdHJ1Y3QgZmlsZSAqZikKIHsKLQltbnRwdXQoZi0+Zl92ZnNtbnQpOwotCWRwdXQoZi0+Zl9kZW50cnkpOworCWZyZWVfcGlwZV9pbmZvKGYtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlkcHV0KGYtPmZfcGF0aC5kZW50cnkpOworCW1udHB1dChmLT5mX3BhdGgubW50KTsKIAlwdXRfZmlscChmKTsKIH0KIApAQCAtOTQ3LDkgKzk0OCw5IEBACiAJCXJldHVybiBFUlJfUFRSKC1FTkZJTEUpOwogCiAJLyogR3JhYiBwaXBlIGZyb20gdGhlIHdyaXRlciAqLwotCWYtPmZfdmZzbW50ID0gbW50Z2V0KHdyZi0+Zl92ZnNtbnQpOwotCWYtPmZfZGVudHJ5ID0gZGdldCh3cmYtPmZfZGVudHJ5KTsKLQlmLT5mX21hcHBpbmcgPSB3cmYtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CisJZi0+Zl9wYXRoLm1udCA9IG1udGdldCh3cmYtPmZfcGF0aC5tbnQpOworCWYtPmZfcGF0aC5kZW50cnkgPSBkZ2V0KHdyZi0+Zl9wYXRoLmRlbnRyeSk7CisJZi0+Zl9tYXBwaW5nID0gd3JmLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CiAKIAlmLT5mX3BvcyA9IDA7CiAJZi0+Zl9mbGFncyA9IE9fUkRPTkxZOwpAQCAtOTk0LDYgKzk5NSw4IEBACiAgZXJyX2ZkcjoKIAlwdXRfdW51c2VkX2ZkKGZkcik7CiAgZXJyX3JlYWRfcGlwZToKKwlkcHV0KGZyLT5mX2RlbnRyeSk7CisJbW50cHV0KGZyLT5mX3Zmc21udCk7CiAJcHV0X2ZpbHAoZnIpOwogIGVycl93cml0ZV9waXBlOgogCWZyZWVfd3JpdGVfcGlwZShmdyk7CmRpZmYgLS1naXQgYS9mcy9wbm9kZS5jIGIvZnMvcG5vZGUuYwppbmRleCBkYTQyZWU2Li41NmFhY2VhIDEwMDY0NAotLS0gYS9mcy9wbm9kZS5jCisrKyBiL2ZzL3Bub2RlLmMKQEAgLTYsNyArNiw3IEBACiAgKglBdXRob3IgOiBSYW0gUGFpIChsaW51eHJhbUB1cy5pYm0uY29tKQogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21udF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSAicG5vZGUuaCIKZGlmZiAtLWdpdCBhL2ZzL3Bub2RlLmggYi9mcy9wbm9kZS5oCmluZGV4IDAyMGUxYmIuLmQ0NWJkOGUgMTAwNjQ0Ci0tLSBhL2ZzL3Bub2RlLmgKKysrIGIvZnMvcG5vZGUuaApAQCAtMTMsNyArMTMsNyBAQAogCiAjZGVmaW5lIElTX01OVF9TSEFSRUQobW50KSAobW50LT5tbnRfZmxhZ3MgJiBNTlRfU0hBUkVEKQogI2RlZmluZSBJU19NTlRfU0xBVkUobW50KSAobW50LT5tbnRfbWFzdGVyKQotI2RlZmluZSBJU19NTlRfTkVXKG1udCkgICghbW50LT5tbnRfbmFtZXNwYWNlKQorI2RlZmluZSBJU19NTlRfTkVXKG1udCkgICghbW50LT5tbnRfbnMpCiAjZGVmaW5lIENMRUFSX01OVF9TSEFSRUQobW50KSAobW50LT5tbnRfZmxhZ3MgJj0gfk1OVF9TSEFSRUQpCiAjZGVmaW5lIElTX01OVF9VTkJJTkRBQkxFKG1udCkgKG1udC0+bW50X2ZsYWdzICYgTU5UX1VOQklOREFCTEUpCiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCAyNWU5MTdmLi43MGU0ZmFiIDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC0zNDYsMjAgKzM0NiwxMyBAQAogCXNpZ2VtcHR5c2V0KCZzaWdjYXRjaCk7CiAJY3V0aW1lID0gY3N0aW1lID0gdXRpbWUgPSBzdGltZSA9IGNwdXRpbWVfemVybzsKIAotCW11dGV4X2xvY2soJnR0eV9tdXRleCk7CiAJcmN1X3JlYWRfbG9jaygpOwogCWlmIChsb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCAmZmxhZ3MpKSB7CiAJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0YXNrLT5zaWduYWw7Ci0JCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzaWctPnR0eTsKIAotCQlpZiAodHR5KSB7Ci0JCQkvKgotCQkJICogc2lnLT50dHkgaXMgbm90IHN0YWJsZSwgYnV0IHR0eV9tdXRleAotCQkJICogcHJvdGVjdHMgdXMgZnJvbSByZWxlYXNlX2Rldih0dHkpCi0JCQkgKi8KLQkJCWJhcnJpZXIoKTsKLQkJCXR0eV9wZ3JwID0gdHR5LT5wZ3JwOwotCQkJdHR5X25yID0gbmV3X2VuY29kZV9kZXYodHR5X2Rldm51bSh0dHkpKTsKKwkJaWYgKHNpZy0+dHR5KSB7CisJCQl0dHlfcGdycCA9IHNpZy0+dHR5LT5wZ3JwOworCQkJdHR5X25yID0gbmV3X2VuY29kZV9kZXYodHR5X2Rldm51bShzaWctPnR0eSkpOwogCQl9CiAKIAkJbnVtX3RocmVhZHMgPSBhdG9taWNfcmVhZCgmc2lnLT5jb3VudCk7CkBAIC0zODgsMTQgKzM4MSwxMyBAQAogCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgc2lnLT5zdGltZSk7CiAJCX0KIAotCQlzaWQgPSBzaWctPnNlc3Npb247CisJCXNpZCA9IHNpZ25hbF9zZXNzaW9uKHNpZyk7CiAJCXBnaWQgPSBwcm9jZXNzX2dyb3VwKHRhc2spOwogCQlwcGlkID0gcmN1X2RlcmVmZXJlbmNlKHRhc2stPnJlYWxfcGFyZW50KS0+dGdpZDsKIAogCQl1bmxvY2tfdGFza19zaWdoYW5kKHRhc2ssICZmbGFncyk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwotCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAogCWlmICghd2hvbGUgfHwgbnVtX3RocmVhZHM8MikKIAkJd2NoYW4gPSBnZXRfd2NoYW4odGFzayk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IGI4NTlmYzcuLjFhOTc5ZWEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC01OSw3ICs1OSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21udF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KQEAgLTM2NSwzMyArMzY1LDM1IEBACiBzdGF0aWMgaW50IG1vdW50c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOwotCXN0cnVjdCBuYW1lc3BhY2UgKm5hbWVzcGFjZSA9IE5VTEw7CisJc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zID0gTlVMTDsKIAlzdHJ1Y3QgcHJvY19tb3VudHMgKnA7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAodGFzaykgewogCQl0YXNrX2xvY2sodGFzayk7Ci0JCW5hbWVzcGFjZSA9IHRhc2stPm5zcHJveHktPm5hbWVzcGFjZTsKLQkJaWYgKG5hbWVzcGFjZSkKLQkJCWdldF9uYW1lc3BhY2UobmFtZXNwYWNlKTsKKwkJaWYgKHRhc2stPm5zcHJveHkpIHsKKwkJCW5zID0gdGFzay0+bnNwcm94eS0+bW50X25zOworCQkJaWYgKG5zKQorCQkJCWdldF9tbnRfbnMobnMpOworCQl9CiAJCXRhc2tfdW5sb2NrKHRhc2spOwogCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAJfQogCi0JaWYgKG5hbWVzcGFjZSkgeworCWlmIChucykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHByb2NfbW91bnRzKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChwKSB7CiAJCQlmaWxlLT5wcml2YXRlX2RhdGEgPSAmcC0+bTsKIAkJCXJldCA9IHNlcV9vcGVuKGZpbGUsICZtb3VudHNfb3ApOwogCQkJaWYgKCFyZXQpIHsKLQkJCQlwLT5tLnByaXZhdGUgPSBuYW1lc3BhY2U7Ci0JCQkJcC0+ZXZlbnQgPSBuYW1lc3BhY2UtPmV2ZW50OworCQkJCXAtPm0ucHJpdmF0ZSA9IG5zOworCQkJCXAtPmV2ZW50ID0gbnMtPmV2ZW50OwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJa2ZyZWUocCk7CiAJCX0KLQkJcHV0X25hbWVzcGFjZShuYW1lc3BhY2UpOworCQlwdXRfbW50X25zKG5zKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM5OSwxNSArNDAxLDE1IEBACiBzdGF0aWMgaW50IG1vdW50c19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgbmFtZXNwYWNlICpuYW1lc3BhY2UgPSBtLT5wcml2YXRlOwotCXB1dF9uYW1lc3BhY2UobmFtZXNwYWNlKTsKKwlzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMgPSBtLT5wcml2YXRlOworCXB1dF9tbnRfbnMobnMpOwogCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBtb3VudHNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgcHJvY19tb3VudHMgKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IG5hbWVzcGFjZSAqbnMgPSBwLT5tLnByaXZhdGU7CisJc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zID0gcC0+bS5wcml2YXRlOwogCXVuc2lnbmVkIHJlcyA9IDA7CiAKIAlwb2xsX3dhaXQoZmlsZSwgJm5zLT5wb2xsLCB3YWl0KTsKQEAgLTQzNywyMSArNDM5LDIxIEBACiAKIAlpZiAoIXJldCkgewogCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCXN0cnVjdCBuYW1lc3BhY2UgKm5hbWVzcGFjZSA9IE5VTEw7CisJCXN0cnVjdCBtbnRfbmFtZXNwYWNlICptbnRfbnMgPSBOVUxMOwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKIAogCQlpZiAodGFzaykgewogCQkJdGFza19sb2NrKHRhc2spOwogCQkJaWYgKHRhc2stPm5zcHJveHkpCi0JCQkJbmFtZXNwYWNlID0gdGFzay0+bnNwcm94eS0+bmFtZXNwYWNlOwotCQkJaWYgKG5hbWVzcGFjZSkKLQkJCQlnZXRfbmFtZXNwYWNlKG5hbWVzcGFjZSk7CisJCQkJbW50X25zID0gdGFzay0+bnNwcm94eS0+bW50X25zOworCQkJaWYgKG1udF9ucykKKwkJCQlnZXRfbW50X25zKG1udF9ucyk7CiAJCQl0YXNrX3VubG9jayh0YXNrKTsKIAkJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIAkJfQogCi0JCWlmIChuYW1lc3BhY2UpCi0JCQltLT5wcml2YXRlID0gbmFtZXNwYWNlOworCQlpZiAobW50X25zKQorCQkJbS0+cHJpdmF0ZSA9IG1udF9uczsKIAkJZWxzZSB7CiAJCQlzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiAJCQlyZXQgPSAtRUlOVkFMOwpAQCAtNDcyLDcgKzQ3NCw3IEBACiBzdGF0aWMgc3NpemVfdCBwcm9jX2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmLAogCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAl1bnNpZ25lZCBsb25nIHBhZ2U7CiAJc3NpemVfdCBsZW5ndGg7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CkBAIC01MTIsNyArNTE0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IG1lbV9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCiAJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWNoYXIgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBzcmMgPSAqcHBvczsKIAlpbnQgcmV0ID0gLUVTUkNIOwpAQCAtNTg0LDcgKzU4Niw3IEBACiB7CiAJaW50IGNvcGllZDsKIAljaGFyICpwYWdlOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJdW5zaWduZWQgbG9uZyBkc3QgPSAqcHBvczsKIAogCWNvcGllZCA9IC1FU1JDSDsKQEAgLTY1NCw3ICs2NTYsNyBAQAogc3RhdGljIHNzaXplX3Qgb29tX2FkanVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJY2hhciBidWZmZXJbUFJPQ19OVU1CVUZdOwogCXNpemVfdCBsZW47CiAJaW50IG9vbV9hZGp1c3Q7CkBAIC02OTQsNyArNjk2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCplbmQgPT0gJ1xuJykKIAkJZW5kKys7Ci0JdGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWlmICghdGFzaykKIAkJcmV0dXJuIC1FU1JDSDsKIAlpZiAob29tX2FkanVzdCA8IHRhc2stPm9vbWtpbGxhZGogJiYgIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpIHsKQEAgLTcxOCw3ICs3MjAsNyBAQAogc3RhdGljIHNzaXplX3QgcHJvY19sb2dpbnVpZF9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCiAJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKIAlzc2l6ZV90IGxlbmd0aDsKIAljaGFyIHRtcGJ1ZltUTVBCVUZMRU5dOwpAQCAtNzM0LDcgKzczNiw3IEBACiBzdGF0aWMgc3NpemVfdCBwcm9jX2xvZ2ludWlkX3dyaXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCiAJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJY2hhciAqcGFnZSwgKnRtcDsKIAlzc2l6ZV90IGxlbmd0aDsKIAl1aWRfdCBsb2dpbnVpZDsKQEAgLTg1Myw2ICs4NTUsNjUgQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1NFQ0NPTVAgKi8KIAorI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT04KK3N0YXRpYyBzc2l6ZV90IHByb2NfZmF1bHRfaW5qZWN0X3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZiwKKwkJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwljaGFyIGJ1ZmZlcltQUk9DX05VTUJVRl07CisJc2l6ZV90IGxlbjsKKwlpbnQgbWFrZV9pdF9mYWlsOworCWxvZmZfdCBfX3Bwb3MgPSAqcHBvczsKKworCWlmICghdGFzaykKKwkJcmV0dXJuIC1FU1JDSDsKKwltYWtlX2l0X2ZhaWwgPSB0YXNrLT5tYWtlX2l0X2ZhaWw7CisJcHV0X3Rhc2tfc3RydWN0KHRhc2spOworCisJbGVuID0gc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVpXG4iLCBtYWtlX2l0X2ZhaWwpOworCWlmIChfX3Bwb3MgPj0gbGVuKQorCQlyZXR1cm4gMDsKKwlpZiAoY291bnQgPiBsZW4tX19wcG9zKQorCQljb3VudCA9IGxlbi1fX3Bwb3M7CisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGJ1ZmZlciArIF9fcHBvcywgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkqcHBvcyA9IF9fcHBvcyArIGNvdW50OworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcHJvY19mYXVsdF9pbmplY3Rfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLAorCQkJY29uc3QgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwljaGFyIGJ1ZmZlcltQUk9DX05VTUJVRl0sICplbmQ7CisJaW50IG1ha2VfaXRfZmFpbDsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGNvdW50ID4gc2l6ZW9mKGJ1ZmZlcikgLSAxKQorCQljb3VudCA9IHNpemVvZihidWZmZXIpIC0gMTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJbWFrZV9pdF9mYWlsID0gc2ltcGxlX3N0cnRvbChidWZmZXIsICZlbmQsIDApOworCWlmICgqZW5kID09ICdcbicpCisJCWVuZCsrOworCXRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAoIXRhc2spCisJCXJldHVybiAtRVNSQ0g7CisJdGFzay0+bWFrZV9pdF9mYWlsID0gbWFrZV9pdF9mYWlsOworCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKKwlpZiAoZW5kIC0gYnVmZmVyID09IDApCisJCXJldHVybiAtRUlPOworCXJldHVybiBlbmQgLSBidWZmZXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZmF1bHRfaW5qZWN0X29wZXJhdGlvbnMgPSB7CisJLnJlYWQJCT0gcHJvY19mYXVsdF9pbmplY3RfcmVhZCwKKwkud3JpdGUJCT0gcHJvY19mYXVsdF9pbmplY3Rfd3JpdGUsCit9OworI2VuZGlmCisKIHN0YXRpYyB2b2lkICpwcm9jX3BpZF9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CkBAIC0xMDc4LDcgKzExMzksNyBAQAogCWNoYXIgKm5hbWUsIGludCBsZW4sCiAJaW5zdGFudGlhdGVfdCBpbnN0YW50aWF0ZSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB2b2lkICpwdHIpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqY2hpbGQsICpkaXIgPSBmaWxwLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpjaGlsZCwgKmRpciA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgcXN0ciBxbmFtZTsKIAlpbm9fdCBpbm8gPSAwOwpAQCAtMTE1Nyw4ICsxMjE4LDggQEAKIAkJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAkJZmlsZSA9IGZjaGVja19maWxlcyhmaWxlcywgZmQpOwogCQlpZiAoZmlsZSkgewotCQkJKm1udCA9IG1udGdldChmaWxlLT5mX3Zmc21udCk7Ci0JCQkqZGVudHJ5ID0gZGdldChmaWxlLT5mX2RlbnRyeSk7CisJCQkqbW50ID0gbW50Z2V0KGZpbGUtPmZfcGF0aC5tbnQpOworCQkJKmRlbnRyeSA9IGRnZXQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCQlzcGluX3VubG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJCQlwdXRfZmlsZXNfc3RydWN0KGZpbGVzKTsKIAkJCXJldHVybiAwOwpAQCAtMTI5Myw3ICsxMzU0LDcgQEAKIAogc3RhdGljIGludCBwcm9jX3JlYWRmZChzdHJ1Y3QgZmlsZSAqIGZpbHAsIHZvaWQgKiBkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKIAl1bnNpZ25lZCBpbnQgZmQsIHRpZCwgaW5vOwpAQCAtMTQ0MCw3ICsxNTAxLDcgQEAKIHsKIAlpbnQgaTsKIAlpbnQgcGlkOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKIAlzdHJ1Y3QgcGlkX2VudHJ5ICpwLCAqbGFzdDsKQEAgLTE0OTYsNyArMTU1Nyw3IEBACiBzdGF0aWMgc3NpemVfdCBwcm9jX3BpZF9hdHRyX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZiwKIAkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAlzc2l6ZV90IGxlbmd0aDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKQEAgLTE1MTIsNyArMTU3Myw3IEBACiAJCWdvdG8gb3V0OwogCiAJbGVuZ3RoID0gc2VjdXJpdHlfZ2V0cHJvY2F0dHIodGFzaywKLQkJCQkgICAgICAoY2hhciopZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCSAgICAgIChjaGFyKilmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQkgICAgICAodm9pZCopcGFnZSwgY291bnQpOwogCWlmIChsZW5ndGggPj0gMCkKIAkJbGVuZ3RoID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgKGNoYXIgKilwYWdlLCBsZW5ndGgpOwpAQCAtMTUyNiw3ICsxNTg3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHByb2NfcGlkX2F0dHJfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKIAkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAljaGFyICpwYWdlOwogCXNzaXplX3QgbGVuZ3RoOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOwpAQCAtMTU1Miw3ICsxNjEzLDcgQEAKIAkJZ290byBvdXRfZnJlZTsKIAogCWxlbmd0aCA9IHNlY3VyaXR5X3NldHByb2NhdHRyKHRhc2ssCi0JCQkJICAgICAgKGNoYXIqKWZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkgICAgICAoY2hhciopZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJICAgICAgKHZvaWQqKXBhZ2UsIGNvdW50KTsKIG91dF9mcmVlOgogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZSk7CkBAIC0xNzQ1LDYgKzE4MDYsMjcgQEAKIAkJCQlwcm9jX2Jhc2VfaW5zdGFudGlhdGUsIHRhc2ssIHApOwogfQogCisjaWZkZWYgQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORworc3RhdGljIGludCBwcm9jX3BpZF9pb19hY2NvdW50aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqYnVmZmVyKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwKKwkJCSJyY2hhcjogJWxsdVxuIgorCQkJIndjaGFyOiAlbGx1XG4iCisJCQkic3lzY3I6ICVsbHVcbiIKKwkJCSJzeXNjdzogJWxsdVxuIgorCQkJInJlYWRfYnl0ZXM6ICVsbHVcbiIKKwkJCSJ3cml0ZV9ieXRlczogJWxsdVxuIgorCQkJImNhbmNlbGxlZF93cml0ZV9ieXRlczogJWxsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdGFzay0+cmNoYXIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXRhc2stPndjaGFyLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0YXNrLT5zeXNjciwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdGFzay0+c3lzY3csCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXRhc2stPmlvYWMucmVhZF9ieXRlcywKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdGFzay0+aW9hYy53cml0ZV9ieXRlcywKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdGFzay0+aW9hYy5jYW5jZWxsZWRfd3JpdGVfYnl0ZXMpOworfQorI2VuZGlmCisKIC8qCiAgKiBUaHJlYWQgZ3JvdXBzCiAgKi8KQEAgLTE3OTMsNiArMTg3NSwxMiBAQAogI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKIAlSRUcoImxvZ2ludWlkIiwgICBTX0lXVVNSfFNfSVJVR08sIGxvZ2ludWlkKSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT04KKwlSRUcoIm1ha2UtaXQtZmFpbCIsIFNfSVJVR098U19JV1VTUiwgZmF1bHRfaW5qZWN0KSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkcKKwlJTkYoImlvIiwJU19JUlVHTywgcGlkX2lvX2FjY291bnRpbmcpLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IHByb2NfdGdpZF9iYXNlX3JlYWRkaXIoc3RydWN0IGZpbGUgKiBmaWxwLApAQCAtMTk5NCw3ICsyMDgyLDcgQEAKIGludCBwcm9jX3BpZF9yZWFkZGlyKHN0cnVjdCBmaWxlICogZmlscCwgdm9pZCAqIGRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7CiAJdW5zaWduZWQgaW50IG5yID0gZmlscC0+Zl9wb3MgLSBGSVJTVF9QUk9DRVNTX0VOVFJZOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVhcGVyID0gZ2V0X3Byb2NfdGFzayhmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHRhc2tfc3RydWN0ICpyZWFwZXIgPSBnZXRfcHJvY190YXNrKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAlpbnQgdGdpZDsKIApAQCAtMjA2OCw2ICsyMTU2LDkgQEAKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAJUkVHKCJsb2dpbnVpZCIsICBTX0lXVVNSfFNfSVJVR08sIGxvZ2ludWlkKSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT04KKwlSRUcoIm1ha2UtaXQtZmFpbCIsIFNfSVJVR098U19JV1VTUiwgZmF1bHRfaW5qZWN0KSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBwcm9jX3RpZF9iYXNlX3JlYWRkaXIoc3RydWN0IGZpbGUgKiBmaWxwLApAQCAtMjIzNSwxNSArMjMyNiwyNSBAQAogLyogZm9yIHRoZSAvcHJvYy9UR0lEL3Rhc2svIGRpcmVjdG9yaWVzICovCiBzdGF0aWMgaW50IHByb2NfdGFza19yZWFkZGlyKHN0cnVjdCBmaWxlICogZmlscCwgdm9pZCAqIGRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CisJc3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXIgPSBOVUxMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAlpbnQgcmV0dmFsID0gLUVOT0VOVDsKIAlpbm9fdCBpbm87CiAJaW50IHRpZDsKIAl1bnNpZ25lZCBsb25nIHBvcyA9IGZpbHAtPmZfcG9zOyAgLyogYXZvaWRpbmcgImxvbmcgbG9uZyIgZmlscC0+Zl9wb3MgKi8KIAorCXRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKKwlpZiAoIXRhc2spCisJCWdvdG8gb3V0X25vX3Rhc2s7CisJcmN1X3JlYWRfbG9jaygpOworCWlmIChwaWRfYWxpdmUodGFzaykpIHsKKwkJbGVhZGVyID0gdGFzay0+Z3JvdXBfbGVhZGVyOworCQlnZXRfdGFza19zdHJ1Y3QobGVhZGVyKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCWlmICghbGVhZGVyKQogCQlnb3RvIG91dF9ub190YXNrOwogCXJldHZhbCA9IDA7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2dlbmVyaWMuYyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCmluZGV4IDRiYTAzMDAuLjg1M2NiODcgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvZ2VuZXJpYy5jCisrKyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCkBAIC01Miw3ICs1Miw3IEBACiBwcm9jX2ZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKIAkgICAgICAgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWNoYXIgCSpwYWdlOwogCXNzaXplX3QJcmV0dmFsPTA7CiAJaW50CWVvZj0wOwpAQCAtMjAzLDcgKzIwMyw3IEBACiBwcm9jX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiBkcDsKIAkKIAlkcCA9IFBERShpbm9kZSk7CkBAIC00MzIsNyArNDMyLDcgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiBkZTsKIAl1bnNpZ25lZCBpbnQgaW5vOwogCWludCBpOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmV0ID0gMDsKIAogCWxvY2tfa2VybmVsKCk7CkBAIC00NTMsNyArNDUzLDcgQEAKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIDE6CiAJCQlpZiAoZmlsbGRpcihkaXJlbnQsICIuLiIsIDIsIGksCi0JCQkJICAgIHBhcmVudF9pbm8oZmlscC0+Zl9kZW50cnkpLAorCQkJCSAgICBwYXJlbnRfaW5vKGZpbHAtPmZfcGF0aC5kZW50cnkpLAogCQkJCSAgICBEVF9ESVIpIDwgMCkKIAkJCQlnb3RvIG91dDsKIAkJCWkrKzsKQEAgLTU1OCw3ICs1NTgsNyBAQAogCWZpbGVfbGlzdF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaChwLCAmc2ItPnNfZmlsZXMpIHsKIAkJc3RydWN0IGZpbGUgKiBmaWxwID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgZmlsZSwgZl91LmZ1X2xpc3QpOwotCQlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gZmlscC0+Zl9kZW50cnk7CisJCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwogCQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKIAkJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9ub21tdS5jIGIvZnMvcHJvYy9ub21tdS5jCmluZGV4IGQ3ZGJkZjkuLjVlYzY3MjUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvbm9tbXUuYworKysgYi9mcy9wcm9jL25vbW11LmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAlmaWxlID0gdm1hLT52bV9maWxlOwogCiAJaWYgKGZpbGUpIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJCWRldiA9IGlub2RlLT5pX3NiLT5zX2RldjsKIAkJaW5vID0gaW5vZGUtPmlfaW5vOwogCX0KQEAgLTY3LDcgKzY3LDcgQEAKIAkJaWYgKGxlbiA8IDEpCiAJCQlsZW4gPSAxOwogCQlzZXFfcHJpbnRmKG0sICIlKmMiLCBsZW4sICcgJyk7Ci0JCXNlcV9wYXRoKG0sIGZpbGUtPmZfdmZzbW50LCBmaWxlLT5mX2RlbnRyeSwgIiIpOworCQlzZXFfcGF0aChtLCBmaWxlLT5mX3BhdGgubW50LCBmaWxlLT5mX3BhdGguZGVudHJ5LCAiIik7CiAJfQogCiAJc2VxX3B1dGMobSwgJ1xuJyk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfbWlzYy5jIGIvZnMvcHJvYy9wcm9jX21pc2MuYwppbmRleCA1MTgxNWNlLi5iMzdjZTMzIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2NfbWlzYy5jCisrKyBiL2ZzL3Byb2MvcHJvY19taXNjLmMKQEAgLTM5LDEzICszOSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3BzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC05Miw3ICs5Myw3IEBACiAJCUxPQURfSU5UKGEpLCBMT0FEX0ZSQUMoYSksCiAJCUxPQURfSU5UKGIpLCBMT0FEX0ZSQUMoYiksCiAJCUxPQURfSU5UKGMpLCBMT0FEX0ZSQUMoYyksCi0JCW5yX3J1bm5pbmcoKSwgbnJfdGhyZWFkcywgaW5pdF9wc3BhY2UubGFzdF9waWQpOworCQlucl9ydW5uaW5nKCksIG5yX3RocmVhZHMsIGN1cnJlbnQtPm5zcHJveHktPnBpZF9ucy0+bGFzdF9waWQpOwogCXJldHVybiBwcm9jX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOwogfQogCkBAIC0yNTIsOCArMjUzLDEwIEBACiB7CiAJaW50IGxlbjsKIAotCXN0cmNweShwYWdlLCBsaW51eF9iYW5uZXIpOwotCWxlbiA9IHN0cmxlbihwYWdlKTsKKwlsZW4gPSBzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsIGxpbnV4X3Byb2NfYmFubmVyLAorCQl1dHNuYW1lKCktPnN5c25hbWUsCisJCXV0c25hbWUoKS0+cmVsZWFzZSwKKwkJdXRzbmFtZSgpLT52ZXJzaW9uKTsKIAlyZXR1cm4gcHJvY19jYWxjX21ldHJpY3MocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDZiNzY5YWYuLjU1YWRlMGQgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTk0LDggKzk0LDggQEAKIAl9CiAKIAlpZiAodm1hKSB7Ci0JCSptbnQgPSBtbnRnZXQodm1hLT52bV9maWxlLT5mX3Zmc21udCk7Ci0JCSpkZW50cnkgPSBkZ2V0KHZtYS0+dm1fZmlsZS0+Zl9kZW50cnkpOworCQkqbW50ID0gbW50Z2V0KHZtYS0+dm1fZmlsZS0+Zl9wYXRoLm1udCk7CisJCSpkZW50cnkgPSBkZ2V0KHZtYS0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCXJlc3VsdCA9IDA7CiAJfQogCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlpbnQgbGVuOwogCiAJaWYgKGZpbGUpIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJCWRldiA9IGlub2RlLT5pX3NiLT5zX2RldjsKIAkJaW5vID0gaW5vZGUtPmlfaW5vOwogCX0KQEAgLTE1Niw3ICsxNTYsNyBAQAogCSAqLwogCWlmIChmaWxlKSB7CiAJCXBhZF9sZW5fc3BhY2VzKG0sIGxlbik7Ci0JCXNlcV9wYXRoKG0sIGZpbGUtPmZfdmZzbW50LCBmaWxlLT5mX2RlbnRyeSwgIlxuIik7CisJCXNlcV9wYXRoKG0sIGZpbGUtPmZfcGF0aC5tbnQsIGZpbGUtPmZfcGF0aC5kZW50cnksICJcbiIpOwogCX0gZWxzZSB7CiAJCWNvbnN0IGNoYXIgKm5hbWUgPSBhcmNoX3ZtYV9uYW1lKHZtYSk7CiAJCWlmICghbmFtZSkgewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX25vbW11LmMgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwppbmRleCAwOTFhYThlLi5mY2M1Y2FmIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbm9tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwpAQCAtMTI2LDggKzEyNiw4IEBACiAJfQogCiAJaWYgKHZtYSkgewotCQkqbW50ID0gbW50Z2V0KHZtYS0+dm1fZmlsZS0+Zl92ZnNtbnQpOwotCQkqZGVudHJ5ID0gZGdldCh2bWEtPnZtX2ZpbGUtPmZfZGVudHJ5KTsKKwkJKm1udCA9IG1udGdldCh2bWEtPnZtX2ZpbGUtPmZfcGF0aC5tbnQpOworCQkqZGVudHJ5ID0gZGdldCh2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnkpOwogCQlyZXN1bHQgPSAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvcW54NC9kaXIuYyBiL2ZzL3FueDQvZGlyLmMKaW5kZXggMGQ3MTAzZi4uYzk0ZGIxZCAxMDA2NDQKLS0tIGEvZnMvcW54NC9kaXIuYworKysgYi9mcy9xbng0L2Rpci5jCkBAIC0yMiw3ICsyMiw3IEBACiAKIHN0YXRpYyBpbnQgcW54NF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IHFueDRfaW5vZGVfZW50cnkgKmRlOwpkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvZmlsZS1tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbW11LmMKaW5kZXggMDk0N2ZiNS4uNTRlYmJjOCAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1tbXUuYworKysgYi9mcy9yYW1mcy9maWxlLW1tdS5jCkBAIC0yNSwxMSArMjUsMTMgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHJhbWZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gc2ltcGxlX3JlYWRwYWdlLAogCS5wcmVwYXJlX3dyaXRlCT0gc2ltcGxlX3ByZXBhcmVfd3JpdGUsCi0JLmNvbW1pdF93cml0ZQk9IHNpbXBsZV9jb21taXRfd3JpdGUKKwkuY29tbWl0X3dyaXRlCT0gc2ltcGxlX2NvbW1pdF93cml0ZSwKKwkuc2V0X3BhZ2VfZGlydHkgPSBfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycywKIH07CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmFtZnNfZmlsZV9vcGVyYXRpb25zID0gewpkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCmluZGV4IGJmZTVkYmYuLmU5ZDZjNDcgMTAwNjQ0Ci0tLSBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYworKysgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKQEAgLTExLDYgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTMwLDcgKzMxLDggQEAKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcmFtZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UJCT0gc2ltcGxlX3JlYWRwYWdlLAogCS5wcmVwYXJlX3dyaXRlCQk9IHNpbXBsZV9wcmVwYXJlX3dyaXRlLAotCS5jb21taXRfd3JpdGUJCT0gc2ltcGxlX2NvbW1pdF93cml0ZQorCS5jb21taXRfd3JpdGUJCT0gc2ltcGxlX2NvbW1pdF93cml0ZSwKKwkuc2V0X3BhZ2VfZGlydHkgPSBfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycywKIH07CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmFtZnNfZmlsZV9vcGVyYXRpb25zID0gewpAQCAtMjMyLDcgKzIzNCw3IEBACiAJCQkJCSAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXVuc2lnbmVkIGxvbmcgbWF4cGFnZXMsIGxwYWdlcywgbnIsIGxvb3AsIHJldDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEwsICoqcHRyLCAqcGFnZTsKIAlsb2ZmX3QgaXNpemU7CiAKZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuYyBiL2ZzL3JlYWRfd3JpdGUuYwppbmRleCBmNzkyMDAwLi43MDdhYzIxIDEwMDY0NAotLS0gYS9mcy9yZWFkX3dyaXRlLmMKKysrIGIvZnMvcmVhZF93cml0ZS5jCkBAIC02NCwxMyArNjQsMTMgQEAKIAlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAob3JpZ2luKSB7CiAJCWNhc2UgMjoKLQkJCW9mZnNldCArPSBpX3NpemVfcmVhZChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCQlvZmZzZXQgKz0gaV9zaXplX3JlYWQoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJb2Zmc2V0ICs9IGZpbGUtPmZfcG9zOwogCX0KIAlyZXR2YWwgPSAtRUlOVkFMOwotCWlmIChvZmZzZXQ+PTAgJiYgb2Zmc2V0PD1maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19tYXhieXRlcykgeworCWlmIChvZmZzZXQ+PTAgJiYgb2Zmc2V0PD1maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NiLT5zX21heGJ5dGVzKSB7CiAJCWlmIChvZmZzZXQgIT0gZmlsZS0+Zl9wb3MpIHsKIAkJCWZpbGUtPmZfcG9zID0gb2Zmc2V0OwogCQkJZmlsZS0+Zl92ZXJzaW9uID0gMDsKQEAgLTk1LDcgKzk1LDcgQEAKIAlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAob3JpZ2luKSB7CiAJCWNhc2UgMjoKLQkJCW9mZnNldCArPSBpX3NpemVfcmVhZChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCQlvZmZzZXQgKz0gaV9zaXplX3JlYWQoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJb2Zmc2V0ICs9IGZpbGUtPmZfcG9zOwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJaWYgKHVubGlrZWx5KChwb3MgPCAwKSB8fCAobG9mZl90KSAocG9zICsgY291bnQpIDwgMCkpCiAJCWdvdG8gRWludmFsOwogCi0JaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKHVubGlrZWx5KGlub2RlLT5pX2Zsb2NrICYmIE1BTkRBVE9SWV9MT0NLKGlub2RlKSkpIHsKIAkJaW50IHJldHZhbCA9IGxvY2tzX21hbmRhdG9yeV9hcmVhKAogCQkJcmVhZF93cml0ZSA9PSBSRUFEID8gRkxPQ0tfVkVSSUZZX1JFQUQgOiBGTE9DS19WRVJJRllfV1JJVEUsCkBAIC0yNzMsNyArMjczLDcgQEAKIAkJCWVsc2UKIAkJCQlyZXQgPSBkb19zeW5jX3JlYWQoZmlsZSwgYnVmLCBjb3VudCwgcG9zKTsKIAkJCWlmIChyZXQgPiAwKSB7Ci0JCQkJZnNub3RpZnlfYWNjZXNzKGZpbGUtPmZfZGVudHJ5KTsKKwkJCQlmc25vdGlmeV9hY2Nlc3MoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCQkJY3VycmVudC0+cmNoYXIgKz0gcmV0OwogCQkJfQogCQkJY3VycmVudC0+c3lzY3IrKzsKQEAgLTMzMSw3ICszMzEsNyBAQAogCQkJZWxzZQogCQkJCXJldCA9IGRvX3N5bmNfd3JpdGUoZmlsZSwgYnVmLCBjb3VudCwgcG9zKTsKIAkJCWlmIChyZXQgPiAwKSB7Ci0JCQkJZnNub3RpZnlfbW9kaWZ5KGZpbGUtPmZfZGVudHJ5KTsKKwkJCQlmc25vdGlmeV9tb2RpZnkoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCQkJY3VycmVudC0+d2NoYXIgKz0gcmV0OwogCQkJfQogCQkJY3VycmVudC0+c3lzY3crKzsKQEAgLTQ1MCw4ICs0NTAsNiBAQAogCXJldHVybiBzZWc7CiB9CiAKLUVYUE9SVF9VTlVTRURfU1lNQk9MKGlvdl9zaG9ydGVuKTsgIC8qICBKdW5lIDIwMDYgICovCi0KIHNzaXplX3QgZG9fc3luY19yZWFkdl93cml0ZXYoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcywgaW92X2ZuX3QgZm4pCiB7CkBAIC02MjgsOSArNjI2LDkgQEAKIAkJa2ZyZWUoaW92KTsKIAlpZiAoKHJldCArICh0eXBlID09IFJFQUQpKSA+IDApIHsKIAkJaWYgKHR5cGUgPT0gUkVBRCkKLQkJCWZzbm90aWZ5X2FjY2VzcyhmaWxlLT5mX2RlbnRyeSk7CisJCQlmc25vdGlmeV9hY2Nlc3MoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCWVsc2UKLQkJCWZzbm90aWZ5X21vZGlmeShmaWxlLT5mX2RlbnRyeSk7CisJCQlmc25vdGlmeV9tb2RpZnkoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC03MjIsNyArNzIwLDcgQEAKIAlpZiAoIShpbl9maWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKIAkJZ290byBmcHV0X2luOwogCXJldHZhbCA9IC1FSU5WQUw7Ci0JaW5faW5vZGUgPSBpbl9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbl9pbm9kZSA9IGluX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKCFpbl9pbm9kZSkKIAkJZ290byBmcHV0X2luOwogCWlmICghaW5fZmlsZS0+Zl9vcCB8fCAhaW5fZmlsZS0+Zl9vcC0+c2VuZGZpbGUpCkBAIC03NTQsNyArNzUyLDcgQEAKIAlyZXR2YWwgPSAtRUlOVkFMOwogCWlmICghb3V0X2ZpbGUtPmZfb3AgfHwgIW91dF9maWxlLT5mX29wLT5zZW5kcGFnZSkKIAkJZ290byBmcHV0X291dDsKLQlvdXRfaW5vZGUgPSBvdXRfZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJb3V0X2lub2RlID0gb3V0X2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJcmV0dmFsID0gcndfdmVyaWZ5X2FyZWEoV1JJVEUsIG91dF9maWxlLCAmb3V0X2ZpbGUtPmZfcG9zLCBjb3VudCk7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gZnB1dF9vdXQ7CmRpZmYgLS1naXQgYS9mcy9yZWFkZGlyLmMgYi9mcy9yZWFkZGlyLmMKaW5kZXggYmZmM2VlNS4uZjM5ZjViMyAxMDA2NDQKLS0tIGEvZnMvcmVhZGRpci5jCisrKyBiL2ZzL3JlYWRkaXIuYwpAQCAtMjEsNyArMjEsNyBAQAogCiBpbnQgdmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIGZpbGxkaXJfdCBmaWxsZXIsIHZvaWQgKmJ1ZikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IHJlcyA9IC1FTk9URElSOwogCWlmICghZmlsZS0+Zl9vcCB8fCAhZmlsZS0+Zl9vcC0+cmVhZGRpcikKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9iaXRtYXAuYyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCmluZGV4IGUzZDQ2NmEuLmIyODZjY2IgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCisrKyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCkBAIC03MDgsNyArNzA4LDcgQEAKICAqLwogc3RhdGljIGludCBnZXRfbGVmdF9uZWlnaGJvcihyZWlzZXJmc19ibG9ja25yX2hpbnRfdCAqIGhpbnQpCiB7Ci0Jc3RydWN0IHBhdGggKnBhdGg7CisJc3RydWN0IHRyZWVwYXRoICpwYXRoOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGl0ZW1faGVhZCAqaWg7CiAJaW50IHBvc19pbl9pdGVtOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZGlyLmMgYi9mcy9yZWlzZXJmcy9kaXIuYwppbmRleCA2NTcwNTBhLi45NmEyZjg4IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9kaXIuYworKysgYi9mcy9yZWlzZXJmcy9kaXIuYwpAQCAtNDUsNyArNDUsNyBAQAogLy8KIHN0YXRpYyBpbnQgcmVpc2VyZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGNwdV9rZXkgcG9zX2tleTsJLyoga2V5IG9mIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGRpcmVjdG9yeSAoa2V5IG9mIGRpcmVjdG9yeSBlbnRyeSkgKi8KIAlJTklUSUFMSVpFX1BBVEgocGF0aF90b19lbnRyeSk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKQEAgLTEzNSw3ICsxMzUsNyBAQAogCQkJCS8qIElnbm9yZSB0aGUgLnJlaXNlcmZzX3ByaXYgZW50cnkgKi8KIAkJCQlpZiAocmVpc2VyZnNfeGF0dHJzKGlub2RlLT5pX3NiKSAmJgogCQkJCSAgICAhb2xkX2Zvcm1hdF9vbmx5KGlub2RlLT5pX3NiKSAmJgotCQkJCSAgICBmaWxwLT5mX2RlbnRyeSA9PSBpbm9kZS0+aV9zYi0+c19yb290ICYmCisJCQkJICAgIGZpbHAtPmZfcGF0aC5kZW50cnkgPT0gaW5vZGUtPmlfc2ItPnNfcm9vdCAmJgogCQkJCSAgICBSRUlTRVJGU19TQihpbm9kZS0+aV9zYiktPnByaXZfcm9vdCAmJgogCQkJCSAgICBSRUlTRVJGU19TQihpbm9kZS0+aV9zYiktPnByaXZfcm9vdC0+ZF9pbm9kZQogCQkJCSAgICAmJiBkZWhfb2JqZWN0aWQoZGVoKSA9PQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZmlsZS5jIGIvZnMvcmVpc2VyZnMvZmlsZS5jCmluZGV4IDM3M2Q4NjIuLjUxMDlmMWQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2ZpbGUuYworKysgYi9mcy9yZWlzZXJmcy9maWxlLmMKQEAgLTQ4LDYgKzQ4LDExIEBACiAJfQogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCisJbXV0ZXhfbG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT5pX21tYXApKTsKKwlpZiAoUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgJiBpX2V2ZXJfbWFwcGVkKQorCQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmPSB+aV9wYWNrX29uX2Nsb3NlX21hc2s7CisKIAlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKIAkvKiBmcmVlaW5nIHByZWFsbG9jYXRpb24gb25seSBpbnZvbHZlcyByZWxvZ2dpbmcgYmxvY2tzIHRoYXQKIAkgKiBhcmUgYWxyZWFkeSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gIHByZWFsbG9jYXRpb24gZ2V0cwpAQCAtMTAwLDExICsxMDUsMjQgQEAKIAkJZXJyID0gcmVpc2VyZnNfdHJ1bmNhdGVfZmlsZShpbm9kZSwgMCk7CiAJfQogICAgICAgb3V0OgorCW11dGV4X3VubG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT5pX21tYXApKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgcmVpc2VyZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCW11dGV4X2xvY2soJihSRUlTRVJGU19JKGlub2RlKS0+aV9tbWFwKSk7CisJUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0gaV9ldmVyX21hcHBlZDsKKwltdXRleF91bmxvY2soJihSRUlTRVJGU19JKGlub2RlKS0+aV9tbWFwKSk7CisKKwlyZXR1cm4gZ2VuZXJpY19maWxlX21tYXAoZmlsZSwgdm1hKTsKK30KKwogc3RhdGljIHZvaWQgcmVpc2VyZnNfdmZzX3RydW5jYXRlX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZWlzZXJmc190cnVuY2F0ZV9maWxlKGlub2RlLCAxKTsKQEAgLTEyODgsNyArMTMwNiw3IEBACiAJbG9mZl90IHBvczsJCS8vIEN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGZpbGUuCiAJc3NpemVfdCByZXM7CQkvLyByZXR1cm4gdmFsdWUgb2YgdmFyaW91cyBmdW5jdGlvbnMgdGhhdCB3ZSBjYWxsLgogCWludCBlcnIgPSAwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsJLy8gSW5vZGUgb2YgdGhlIGZpbGUgdGhhdCB3ZSBhcmUgd3JpdGluZyB0by4KKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsJLy8gSW5vZGUgb2YgdGhlIGZpbGUgdGhhdCB3ZSBhcmUgd3JpdGluZyB0by4KIAkvKiBUbyBzaW1wbGlmeSBjb2RpbmcgYXQgdGhpcyB0aW1lLCB3ZSBzdG9yZQogCSAgIGxvY2tlZCBwYWdlcyBpbiBhcnJheSBmb3Igbm93ICovCiAJc3RydWN0IHBhZ2UgKnByZXBhcmVkX3BhZ2VzW1JFSVNFUkZTX1dSSVRFX1BBR0VTX0FUX0FfVElNRV07CkBAIC0xMzM1LDcgKzEzNTMsNyBAQAogCWlmIChjb3VudCA9PSAwKQogCQlnb3RvIG91dDsKIAotCXJlcyA9IHJlbW92ZV9zdWlkKGZpbGUtPmZfZGVudHJ5KTsKKwlyZXMgPSByZW1vdmVfc3VpZChmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAlpZiAocmVzKQogCQlnb3RvIG91dDsKIApAQCAtMTUyNyw3ICsxNTQ1LDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCA9IHJlaXNlcmZzX2NvbXBhdF9pb2N0bCwKICNlbmRpZgotCS5tbWFwID0gZ2VuZXJpY19maWxlX21tYXAsCisJLm1tYXAgPSByZWlzZXJmc19maWxlX21tYXAsCiAJLm9wZW4gPSBnZW5lcmljX2ZpbGVfb3BlbiwKIAkucmVsZWFzZSA9IHJlaXNlcmZzX2ZpbGVfcmVsZWFzZSwKIAkuZnN5bmMgPSByZWlzZXJmc19zeW5jX2ZpbGUsCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maXhfbm9kZS5jIGIvZnMvcmVpc2VyZnMvZml4X25vZGUuYwppbmRleCA2ZDBlNTU0Li4wZWUzNWM2IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9maXhfbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpeF9ub2RlLmMKQEAgLTk1Nyw3ICs5NTcsNyBAQAogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX3BhcmVudDsKIAlJTklUSUFMSVpFX1BBVEgoc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlcik7Ci0Jc3RydWN0IHBhdGggKnBfc19wYXRoID0gcF9zX3RiLT50Yl9wYXRoOworCXN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGggPSBwX3NfdGItPnRiX3BhdGg7CiAJc3RydWN0IGNwdV9rZXkgc19scl9mYXRoZXJfa2V5OwogCWludCBuX2NvdW50ZXIsCiAJICAgIG5fcG9zaXRpb24gPSBJTlRfTUFYLApAQCAtMTA3NCw3ICsxMDc0LDcgQEAKICAqLwogc3RhdGljIGludCBnZXRfcGFyZW50cyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsIGludCBuX2gpCiB7Ci0Jc3RydWN0IHBhdGggKnBfc19wYXRoID0gcF9zX3RiLT50Yl9wYXRoOworCXN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGggPSBwX3NfdGItPnRiX3BhdGg7CiAJaW50IG5fcG9zaXRpb24sCiAJICAgIG5fcmV0X3ZhbHVlLAogCSAgICBuX3BhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHBfc190Yi0+dGJfcGF0aCwgbl9oKTsKQEAgLTE4ODUsNyArMTg4NSw3IEBACiBzdGF0aWMgaW50IGdldF9kaXJlY3RfcGFyZW50KHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwgaW50IG5faCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaDsKLQlzdHJ1Y3QgcGF0aCAqcF9zX3BhdGggPSBwX3NfdGItPnRiX3BhdGg7CisJc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCA9IHBfc190Yi0+dGJfcGF0aDsKIAlpbnQgbl9wb3NpdGlvbiwKIAkgICAgbl9wYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVChwX3NfdGItPnRiX3BhdGgsIG5faCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lub2RlLmMgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCmluZGV4IDI1NDIzOWUuLjlmY2JmZTMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lub2RlLmMKKysrIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwpAQCAtMjA3LDcgKzIwNyw3IEBACiB9CiAKIC8qc3RhdGljKi8gaW50IHJlc3RhcnRfdHJhbnNhY3Rpb24oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhdGggKnBhdGgpCisJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHRyZWVwYXRoICpwYXRoKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IHRoLT50X3N1cGVyOwogCWludCBsZW4gPSB0aC0+dF9ibG9ja3NfYWxsb2NhdGVkOwpAQCAtNTcwLDcgKzU3MCw3IEBACiAJCQkJICBsb25nIGJsb2NrLAogCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgIGJfYmxvY2tucl90ICogYWxsb2NhdGVkX2Jsb2NrX25yLAotCQkJCSAgc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncykKKwkJCQkgIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwgaW50IGZsYWdzKQogewogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCkBAIC0xMTA3LDcgKzExMDcsNyBAQAogLy8KIAogLy8gY2FsbGVkIGJ5IHJlYWRfbG9ja2VkX2lub2RlCi1zdGF0aWMgdm9pZCBpbml0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYXRoICpwYXRoKQorc3RhdGljIHZvaWQgaW5pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgaXRlbV9oZWFkICppaDsKQEAgLTExMjUsNiArMTEyNSw3IEBACiAJUkVJU0VSRlNfSShpbm9kZSktPmlfcHJlYWxsb2NfY291bnQgPSAwOwogCVJFSVNFUkZTX0koaW5vZGUpLT5pX3RyYW5zX2lkID0gMDsKIAlSRUlTRVJGU19JKGlub2RlKS0+aV9qbCA9IE5VTEw7CisJbXV0ZXhfaW5pdCgmKFJFSVNFUkZTX0koaW5vZGUpLT5pX21tYXApKTsKIAlyZWlzZXJmc19pbml0X2FjbF9hY2Nlc3MoaW5vZGUpOwogCXJlaXNlcmZzX2luaXRfYWNsX2RlZmF1bHQoaW5vZGUpOwogCXJlaXNlcmZzX2luaXRfeGF0dHJfcndzZW0oaW5vZGUpOwpAQCAtMTI4NCw3ICsxMjg1LDcgQEAKIC8qIE5PVEUsIHlvdSBtdXN0IHByZXBhcmUgdGhlIGJ1ZmZlciBoZWFkIGJlZm9yZSBzZW5kaW5nIGl0IGhlcmUsCiAqKiBhbmQgdGhlbiBsb2cgaXQgYWZ0ZXIgdGhlIGNhbGwKICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfc3RhdF9kYXRhKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRfZGF0YShzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgIGxvZmZfdCBzaXplKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CkBAIC0xNjUzLDcgKzE2NTQsNyBAQAogICAgY29udGFpbmluZyAiLiIgYW5kICIuLiIgZW50cmllcyAqLwogc3RhdGljIGludCByZWlzZXJmc19uZXdfZGlyZWN0b3J5KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgIHN0cnVjdCBpdGVtX2hlYWQgKmloLCBzdHJ1Y3QgcGF0aCAqcGF0aCwKKwkJCQkgIHN0cnVjdCBpdGVtX2hlYWQgKmloLCBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCiAJCQkJICBzdHJ1Y3QgaW5vZGUgKmRpcikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gdGgtPnRfc3VwZXI7CkBAIC0xNzEyLDcgKzE3MTMsNyBAQAogICAgY29udGFpbmluZyB0aGUgYm9keSBvZiBzeW1saW5rICovCiBzdGF0aWMgaW50IHJlaXNlcmZzX25ld19zeW1saW5rKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAkvKiBJbm9kZSBvZiBzeW1saW5rICovCiAJCQkJc3RydWN0IGl0ZW1faGVhZCAqaWgsCi0JCQkJc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IGNoYXIgKnN5bW5hbWUsCisJCQkJc3RydWN0IHRyZWVwYXRoICpwYXRoLCBjb25zdCBjaGFyICpzeW1uYW1lLAogCQkJCWludCBpdGVtX2xlbikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gdGgtPnRfc3VwZXI7CkBAIC0xODMyLDYgKzE4MzMsNyBAQAogCVJFSVNFUkZTX0koaW5vZGUpLT5pX2F0dHJzID0KIAkgICAgUkVJU0VSRlNfSShkaXIpLT5pX2F0dHJzICYgUkVJU0VSRlNfSU5IRVJJVF9NQVNLOwogCXNkX2F0dHJzX3RvX2lfYXR0cnMoUkVJU0VSRlNfSShpbm9kZSktPmlfYXR0cnMsIGlub2RlKTsKKwltdXRleF9pbml0KCYoUkVJU0VSRlNfSShpbm9kZSktPmlfbW1hcCkpOwogCXJlaXNlcmZzX2luaXRfYWNsX2FjY2Vzcyhpbm9kZSk7CiAJcmVpc2VyZnNfaW5pdF9hY2xfZGVmYXVsdChpbm9kZSk7CiAJcmVpc2VyZnNfaW5pdF94YXR0cl9yd3NlbShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pb2N0bC5jIGIvZnMvcmVpc2VyZnMvaW9jdGwuYwppbmRleCA5YzU3NTc4Li5iNDg0ZDI5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pb2N0bC5jCisrKyBiL2ZzL3JlaXNlcmZzL2lvY3RsLmMKQEAgLTk5LDcgKzk5LDcgQEAKIGxvbmcgcmVpc2VyZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmV0OwogCiAJLyogVGhlc2UgYXJlIGp1c3QgbWlzbmFtZWQsIHRoZXkgYWN0dWFsbHkgZ2V0L3B1dCBmcm9tL3RvIHVzZXIgYW4gaW50ICovCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCBhYmRlMWVkLi4yM2Y1Y2Q1IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogLy8gY29tbWVudD8gIG1heWJlIHNvbWV0aGluZyBsaWtlIHNldCBkZSB0byBwb2ludCB0byB3aGF0IHRoZSBwYXRoIHBvaW50cyB0bz8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVfaXRlbV9sb2NhdGlvbihzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5ICpkZSwKLQkJCQkJc3RydWN0IHBhdGggKnBhdGgpCisJCQkJCXN0cnVjdCB0cmVlcGF0aCAqcGF0aCkKIHsKIAlkZS0+ZGVfYmggPSBnZXRfbGFzdF9iaChwYXRoKTsKIAlkZS0+ZGVfaWggPSBnZXRfaWgocGF0aCk7CkBAIC0xMTMsNyArMTEzLDcgQEAKIAogLyogVGhlIGZ1bmN0aW9uIGlzIE5PVCBTQ0hFRFVMRS1TQUZFISAqLwogaW50IHNlYXJjaF9ieV9lbnRyeV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwKLQkJCXN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5ICpkZSkKKwkJCXN0cnVjdCB0cmVlcGF0aCAqcGF0aCwgc3RydWN0IHJlaXNlcmZzX2Rpcl9lbnRyeSAqZGUpCiB7CiAJaW50IHJldHZhbDsKIApAQCAtMjgyLDcgKzI4Miw3IEBACiAvLyBtYXkgcmV0dXJuIE5BTUVfRk9VTkQsIE5BTUVfRk9VTkRfSU5WSVNJQkxFLCBOQU1FX05PVF9GT1VORAogLy8gRklYTUU6IHNob3VsZCBhZGQgc29tZXRoaW5nIGxpa2UgSU9FUlJPUgogc3RhdGljIGludCByZWlzZXJmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJCSAgICAgICBzdHJ1Y3QgcGF0aCAqcGF0aF90b19lbnRyeSwKKwkJCSAgICAgICBzdHJ1Y3QgdHJlZXBhdGggKnBhdGhfdG9fZW50cnksCiAJCQkgICAgICAgc3RydWN0IHJlaXNlcmZzX2Rpcl9lbnRyeSAqZGUpCiB7CiAJc3RydWN0IGNwdV9rZXkga2V5X3RvX3NlYXJjaDsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKaW5kZXggYzUzM2VjMS4uZWNjOTk0MyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogCX0KICNpZiBkZWZpbmVkKCBSRUlTRVJGU19VU0VfT0lETUFQRiApCiAJaWYgKHNiX2luZm8tPm9pZG1hcC51c2VfZmlsZSAmJiAoc2JfaW5mby0+b2lkbWFwLm1hcGYgIT0gTlVMTCkpIHsKLQkJbG9mZl90IHNpemUgPSBzYl9pbmZvLT5vaWRtYXAubWFwZi0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2l6ZTsKKwkJbG9mZl90IHNpemUgPSBzYl9pbmZvLT5vaWRtYXAubWFwZi0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplOwogCQl0b3RhbF91c2VkICs9IHNpemUgLyBzaXplb2YocmVpc2VyZnNfb2lkaW50ZXJ2YWxfZF90KTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMgYi9mcy9yZWlzZXJmcy9zdHJlZS5jCmluZGV4IDUyNDBhYmUuLmFmYjIxZWEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMKKysrIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgICBvZiB0aGUgcGF0aCwgYW5kIGdvaW5nIHVwd2FyZHMuICBXZSBtdXN0IGNoZWNrIHRoZSBwYXRoJ3MgdmFsaWRpdHkgYXQgZWFjaCBzdGVwLiAgSWYgdGhlIGtleSBpcyBub3QgaW4KICAgIHRoZSBwYXRoLCB0aGVyZSBpcyBubyBkZWxpbWl0aW5nIGtleSBpbiB0aGUgdHJlZSAoYnVmZmVyIGlzIGZpcnN0IG9yIGxhc3QgYnVmZmVyIGluIHRyZWUpLCBhbmQgaW4gdGhpcwogICAgY2FzZSB3ZSByZXR1cm4gYSBzcGVjaWFsIGtleSwgZWl0aGVyIE1JTl9LRVkgb3IgTUFYX0tFWS4gKi8KLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X2xrZXkoY29uc3Qgc3RydWN0IHBhdGgKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X2xrZXkoY29uc3Qgc3RydWN0IHRyZWVwYXRoCiAJCQkJCQkgICpwX3NfY2hrX3BhdGgsCiAJCQkJCQkgIGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jawogCQkJCQkJICAqcF9zX3NiKQpAQCAtMjkwLDcgKzI5MCw3IEBACiB9CiAKIC8qIEdldCBkZWxpbWl0aW5nIGtleSBvZiB0aGUgYnVmZmVyIGF0IHRoZSBwYXRoIGFuZCBpdHMgcmlnaHQgbmVpZ2hib3IuICovCi1pbmxpbmUgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X3JrZXkoY29uc3Qgc3RydWN0IHBhdGggKnBfc19jaGtfcGF0aCwKK2lubGluZSBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfcmtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19jaGtfcGF0aCwKIAkJCQkJICAgY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCiB7CiAJaW50IG5fcG9zaXRpb24sIG5fcGF0aF9vZmZzZXQgPSBwX3NfY2hrX3BhdGgtPnBhdGhfbGVuZ3RoOwpAQCAtMzM3LDcgKzMzNyw3IEBACiAgICB0aGUgcGF0aC4gIFRoZXNlIGRlbGltaXRpbmcga2V5cyBhcmUgc3RvcmVkIGF0IGxlYXN0IG9uZSBsZXZlbCBhYm92ZSB0aGF0IGJ1ZmZlciBpbiB0aGUgdHJlZS4gSWYgdGhlCiAgICBidWZmZXIgaXMgdGhlIGZpcnN0IG9yIGxhc3Qgbm9kZSBpbiB0aGUgdHJlZSBvcmRlciB0aGVuIG9uZSBvZiB0aGUgZGVsaW1pdGluZyBrZXlzIG1heSBiZSBhYnNlbnQsIGFuZCBpbgogICAgdGhpcyBjYXNlIGdldF9sa2V5IGFuZCBnZXRfcmtleSByZXR1cm4gYSBzcGVjaWFsIGtleSB3aGljaCBpcyBNSU5fS0VZIG9yIE1BWF9LRVkuICovCi1zdGF0aWMgaW5saW5lIGludCBrZXlfaW5fYnVmZmVyKHN0cnVjdCBwYXRoICpwX3NfY2hrX3BhdGgsCS8qIFBhdGggd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQuICAqLworc3RhdGljIGlubGluZSBpbnQga2V5X2luX2J1ZmZlcihzdHJ1Y3QgdHJlZXBhdGggKnBfc19jaGtfcGF0aCwJLyogUGF0aCB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4gICovCiAJCQkJY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19rZXksCS8qIEtleSB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4gICAqLwogCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiCS8qIFN1cGVyIGJsb2NrIHBvaW50ZXIuICAgICAgICAgICAqLwogICAgICkKQEAgLTM3NCw3ICszNzQsNyBAQAogfQogCiAvKiBEZWNyZW1lbnQgYl9jb3VudCBmaWVsZCBvZiB0aGUgYWxsIGJ1ZmZlcnMgaW4gdGhlIHBhdGguICovCi12b2lkIGRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKHN0cnVjdCBwYXRoICpwX3Nfc2VhcmNoX3BhdGgpCit2b2lkIGRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKHN0cnVjdCB0cmVlcGF0aCAqcF9zX3NlYXJjaF9wYXRoKQogewogCWludCBuX3BhdGhfb2Zmc2V0ID0gcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aDsKIApAQCAtMzkxLDcgKzM5MSw3IEBACiAJcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aCA9IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVDsKIH0KIAotaW50IHJlaXNlcmZzX2NoZWNrX3BhdGgoc3RydWN0IHBhdGggKnApCitpbnQgcmVpc2VyZnNfY2hlY2tfcGF0aChzdHJ1Y3QgdHJlZXBhdGggKnApCiB7CiAJUkZBTFNFKHAtPnBhdGhfbGVuZ3RoICE9IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCwKIAkgICAgICAgInBhdGggbm90IHByb3Blcmx5IHJlbHNlZCIpOwpAQCAtNDAzLDcgKzQwMyw3IEBACiAqKgogKiogb25seSBjYWxsZWQgZnJvbSBmaXhfbm9kZXMoKQogKi8KLXZvaWQgcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IHBhdGggKnBfc19zZWFyY2hfcGF0aCkKK3ZvaWQgcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpCiB7CiAJaW50IG5fcGF0aF9vZmZzZXQgPSBwX3Nfc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoOwogCkBAIC00MjEsNyArNDIxLDcgQEAKIH0KIAogLyogUmVsZWFzZSBhbGwgYnVmZmVycyBpbiB0aGUgcGF0aC4gKi8KLXZvaWQgcGF0aHJlbHNlKHN0cnVjdCBwYXRoICpwX3Nfc2VhcmNoX3BhdGgpCit2b2lkIHBhdGhyZWxzZShzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCkKIHsKIAlpbnQgbl9wYXRoX29mZnNldCA9IHBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGg7CiAKQEAgLTYwMiw3ICs2MDIsNyBAQAogICAgY29ycmVjdG5lc3Mgb2YgdGhlIGJvdHRvbSBvZiB0aGUgcGF0aCAqLwogLyogVGhlIGZ1bmN0aW9uIGlzIE5PVCBTQ0hFRFVMRS1TQUZFISAqLwogaW50IHNlYXJjaF9ieV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3Nfa2V5LAkvKiBLZXkgdG8gc2VhcmNoLiAqLwotCQkgIHN0cnVjdCBwYXRoICpwX3Nfc2VhcmNoX3BhdGgsCS8qIFRoaXMgc3RydWN0dXJlIHdhcworCQkgIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3NlYXJjaF9wYXRoLC8qIFRoaXMgc3RydWN0dXJlIHdhcwogCQkJCQkJICAgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZAogCQkJCQkJICAgYnkgdGhlIGNhbGxpbmcKIAkJCQkJCSAgIGZ1bmN0aW9uLiBJdCBpcyBmaWxsZWQgdXAKQEAgLTgxMyw3ICs4MTMsNyBAQAogLyogVGhlIGZ1bmN0aW9uIGlzIE5PVCBTQ0hFRFVMRS1TQUZFISAqLwogaW50IHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAkvKiBQb2ludGVyIHRvIHRoZSBzdXBlciBibG9jay4gICAgICAgICAgKi8KIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9jcHVfa2V5LAkvKiBLZXkgdG8gc2VhcmNoIChjcHUgdmFyaWFibGUpICAgICAgICAgKi8KLQkJCSAgICAgICBzdHJ1Y3QgcGF0aCAqcF9zX3NlYXJjaF9wYXRoCS8qIEZpbGxlZCB1cCBieSB0aGlzIGZ1bmN0aW9uLiAgICAgICAgICAqLworCQkJICAgICAgIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3NlYXJjaF9wYXRoCS8qIEZpbGxlZCB1cCBieSB0aGlzIGZ1bmN0aW9uLiAgICAgICAgICAqLwogICAgICkKIHsKIAlzdHJ1Y3QgaXRlbV9oZWFkICpwX2xlX2loOwkvKiBwb2ludGVyIHRvIG9uLWRpc2sgc3RydWN0dXJlICovCkBAIC04ODQsNyArODg0LDcgQEAKIH0KIAogLyogQ29tcGFyZSBnaXZlbiBpdGVtIGFuZCBpdGVtIHBvaW50ZWQgdG8gYnkgdGhlIHBhdGguICovCi1pbnQgY29tcF9pdGVtcyhjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpzdG9yZWRfaWgsIGNvbnN0IHN0cnVjdCBwYXRoICpwX3NfcGF0aCkKK2ludCBjb21wX2l0ZW1zKGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKnN0b3JlZF9paCwgY29uc3Qgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaDsKIAlzdHJ1Y3QgaXRlbV9oZWFkICppaDsKQEAgLTkxMSw3ICs5MTEsNyBAQAogI2RlZmluZSBibG9ja19pbl91c2UoYmgpIChidWZmZXJfbG9ja2VkKGJoKSB8fCAoaGVsZF9ieV9vdGhlcnMoYmgpKSkKIAogLy8gcHJlcGFyZSBmb3IgZGVsZXRlIG9yIGN1dCBvZiBkaXJlY3QgaXRlbQotc3RhdGljIGlubGluZSBpbnQgcHJlcGFyZV9mb3JfZGlyZWN0X2l0ZW0oc3RydWN0IHBhdGggKnBhdGgsCitzdGF0aWMgaW5saW5lIGludCBwcmVwYXJlX2Zvcl9kaXJlY3RfaXRlbShzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCiAJCQkJCSAgc3RydWN0IGl0ZW1faGVhZCAqbGVfaWgsCiAJCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICBsb2ZmX3QgbmV3X2ZpbGVfbGVuZ3RoLCBpbnQgKmN1dF9zaXplKQpAQCAtOTUyLDcgKzk1Miw3IEBACiAJcmV0dXJuIE1fQ1VUOwkJLyogQ3V0IGZyb20gdGhpcyBpdGVtLiAqLwogfQogCi1zdGF0aWMgaW5saW5lIGludCBwcmVwYXJlX2Zvcl9kaXJlbnRyeV9pdGVtKHN0cnVjdCBwYXRoICpwYXRoLAorc3RhdGljIGlubGluZSBpbnQgcHJlcGFyZV9mb3JfZGlyZW50cnlfaXRlbShzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCiAJCQkJCSAgICBzdHJ1Y3QgaXRlbV9oZWFkICpsZV9paCwKIAkJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCSAgICBsb2ZmX3QgbmV3X2ZpbGVfbGVuZ3RoLApAQCAtOTg3LDcgKzk4Nyw3IEBACiAgICAgSW4gY2FzZSBvZiBmaWxlIHRydW5jYXRlIGNhbGN1bGF0ZSB3aGV0aGVyIHRoaXMgaXRlbSBtdXN0IGJlIGRlbGV0ZWQvdHJ1bmNhdGVkIG9yIGxhc3QKICAgICB1bmZvcm1hdHRlZCBub2RlIG9mIHRoaXMgaXRlbSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIGRpcmVjdCBpdGVtLgogICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGRldGVybWluYXRpb24gb2Ygd2hhdCBiYWxhbmNlIG1vZGUgdGhlIGNhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGVtcGxveS4gKi8KLXN0YXRpYyBjaGFyIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYXRoICpwX3NfcGF0aCwgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19pdGVtX2tleSwgaW50ICpwX25fcmVtb3ZlZCwJLyogTnVtYmVyIG9mIHVuZm9ybWF0dGVkIG5vZGVzIHdoaWNoIHdlcmUgcmVtb3ZlZAorc3RhdGljIGNoYXIgcHJlcGFyZV9mb3JfZGVsZXRlX29yX2N1dChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19pdGVtX2tleSwgaW50ICpwX25fcmVtb3ZlZCwJLyogTnVtYmVyIG9mIHVuZm9ybWF0dGVkIG5vZGVzIHdoaWNoIHdlcmUgcmVtb3ZlZAogCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSAgIGZyb20gZW5kIG9mIHRoZSBmaWxlLiAqLwogCQkJCSAgICAgIGludCAqcF9uX2N1dF9zaXplLCB1bnNpZ25lZCBsb25nIGxvbmcgbl9uZXdfZmlsZV9sZW5ndGgJLyogTUFYX0tFWV9PRkZTRVQgaW4gY2FzZSBvZiBkZWxldGUuICovCiAgICAgKQpAQCAtMTEyNSw3ICsxMTI1LDcgQEAKIHN0YXRpYyB2b2lkIGluaXRfdGJfc3RydWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkJICAgc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLAogCQkJICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCi0JCQkgICBzdHJ1Y3QgcGF0aCAqcF9zX3BhdGgsIGludCBuX3NpemUpCisJCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLCBpbnQgbl9zaXplKQogewogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CkBAIC0xMTc2LDcgKzExNzYsNyBAQAogI2VuZGlmCiAKIC8qIERlbGV0ZSBvYmplY3QgaXRlbS4gKi8KLWludCByZWlzZXJmc19kZWxldGVfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IHBhdGggKnBfc19wYXRoLAkvKiBQYXRoIHRvIHRoZSBkZWxldGVkIGl0ZW0uICovCitpbnQgcmVpc2VyZnNfZGVsZXRlX2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsCS8qIFBhdGggdG8gdGhlIGRlbGV0ZWQgaXRlbS4gKi8KIAkJCSBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2l0ZW1fa2V5LAkvKiBLZXkgdG8gc2VhcmNoIGZvciB0aGUgZGVsZXRlZCBpdGVtLiAgKi8KIAkJCSBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwJLyogaW5vZGUgaXMgaGVyZSBqdXN0IHRvIHVwZGF0ZSBpX2Jsb2NrcyBhbmQgcXVvdGFzICovCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfdW5fYmgpCkBAIC0xNDU5LDcgKzE0NTksNyBAQAogCQkJCWJoID0gbmV4dDsKIAkJCX0gd2hpbGUgKGJoICE9IGhlYWQpOwogCQkJaWYgKFBBR0VfU0laRSA9PSBiaC0+Yl9zaXplKSB7Ci0JCQkJY2xlYXJfcGFnZV9kaXJ0eShwYWdlKTsKKwkJCQljYW5jZWxfZGlydHlfcGFnZShwYWdlLCBQQUdFX0NBQ0hFX1NJWkUpOwogCQkJfQogCQl9CiAJfQpAQCAtMTQ2OCw3ICsxNDY4LDcgQEAKIHN0YXRpYyBpbnQgbWF5YmVfaW5kaXJlY3RfdG9fZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwKIAkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICAgIHN0cnVjdCBwYXRoICpwX3NfcGF0aCwKKwkJCQkgICAgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwKIAkJCQkgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19pdGVtX2tleSwKIAkJCQkgICAgbG9mZl90IG5fbmV3X2ZpbGVfc2l6ZSwgY2hhciAqcF9jX21vZGUpCiB7CkBAIC0xNTAzLDcgKzE1MDMsNyBAQAogICAgcG9pbnRlciBiZWluZyBjb252ZXJ0ZWQuIFRoZXJlZm9yZSB3ZSBoYXZlIHRvIGRlbGV0ZSBpbnNlcnRlZAogICAgZGlyZWN0IGl0ZW0ocykgKi8KIHN0YXRpYyB2b2lkIGluZGlyZWN0X3RvX2RpcmVjdF9yb2xsX2JhY2soc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKKwkJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCkKIHsKIAlzdHJ1Y3QgY3B1X2tleSB0YWlsX2tleTsKIAlpbnQgdGFpbF9sZW47CkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogCiAvKiAoVHJ1bmNhdGUgb3IgY3V0IGVudHJ5KSBvciBkZWxldGUgb2JqZWN0IGl0ZW0uIFJldHVybnMgPCAwIG9uIGZhaWx1cmUgKi8KIGludCByZWlzZXJmc19jdXRfZnJvbV9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgc3RydWN0IHBhdGggKnBfc19wYXRoLAorCQkJICAgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwKIAkJCSAgIHN0cnVjdCBjcHVfa2V5ICpwX3NfaXRlbV9rZXksCiAJCQkgICBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwKIAkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCBsb2ZmX3Qgbl9uZXdfZmlsZV9zaXplKQpAQCAtMTkyMCw3ICsxOTIwLDcgQEAKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogLy8gdGhpcyBtYWtlcyBzdXJlLCB0aGF0IHdlIF9fYXBwZW5kX18sIG5vdCBvdmVyd3JpdGUgb3IgYWRkIGhvbGVzCi1zdGF0aWMgdm9pZCBjaGVja19yZXNlYXJjaF9mb3JfcGFzdGUoc3RydWN0IHBhdGggKnBhdGgsCitzdGF0aWMgdm9pZCBjaGVja19yZXNlYXJjaF9mb3JfcGFzdGUoc3RydWN0IHRyZWVwYXRoICpwYXRoLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19rZXkpCiB7CiAJc3RydWN0IGl0ZW1faGVhZCAqZm91bmRfaWggPSBnZXRfaWgocGF0aCk7CkBAIC0xOTU0LDcgKzE5NTQsNyBAQAogI2VuZGlmCQkJCS8qIGNvbmZpZyByZWlzZXJmcyBjaGVjayAqLwogCiAvKiBQYXN0ZSBieXRlcyB0byB0aGUgZXhpc3RpbmcgaXRlbS4gUmV0dXJucyBieXRlcyBudW1iZXIgcGFzdGVkIGludG8gdGhlIGl0ZW0uICovCi1pbnQgcmVpc2VyZnNfcGFzdGVfaW50b19pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgcGF0aCAqcF9zX3NlYXJjaF9wYXRoLAkvKiBQYXRoIHRvIHRoZSBwYXN0ZWQgaXRlbS4gICAgICAgICAgKi8KK2ludCByZWlzZXJmc19wYXN0ZV9pbnRvX2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3NlYXJjaF9wYXRoLAkvKiBQYXRoIHRvIHRoZSBwYXN0ZWQgaXRlbS4gICAgICAgICAgKi8KIAkJCSAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19rZXksCS8qIEtleSB0byBzZWFyY2ggZm9yIHRoZSBuZWVkZWQgaXRlbS4gKi8KIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwJLyogSW5vZGUgaXRlbSBiZWxvbmdzIHRvICovCiAJCQkgICAgIGNvbnN0IGNoYXIgKnBfY19ib2R5LAkvKiBQb2ludGVyIHRvIHRoZSBieXRlcyB0byBwYXN0ZS4gICAgKi8KQEAgLTIwMzYsNyArMjAzNiw3IEBACiB9CiAKIC8qIEluc2VydCBuZXcgaXRlbSBpbnRvIHRoZSBidWZmZXIgYXQgdGhlIHBhdGguICovCi1pbnQgcmVpc2VyZnNfaW5zZXJ0X2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCBwYXRoICpwX3NfcGF0aCwJLyogUGF0aCB0byB0aGUgaW5zZXJ0ZWRlZCBpdGVtLiAgICAgICAgICovCitpbnQgcmVpc2VyZnNfaW5zZXJ0X2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsCS8qIFBhdGggdG8gdGhlIGluc2VydGVkZWQgaXRlbS4gICAgICAgICAqLwogCQkJIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICprZXksIHN0cnVjdCBpdGVtX2hlYWQgKnBfc19paCwJLyogUG9pbnRlciB0byB0aGUgaXRlbSBoZWFkZXIgdG8gaW5zZXJ0LiAqLwogCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnBfY19ib2R5KQogewkJCQkvKiBQb2ludGVyIHRvIHRoZSBieXRlcyB0byBpbnNlcnQuICAgICAgKi8KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IDdmYjVmYjAuLjU4YWQ0NTUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMgYi9mcy9yZWlzZXJmcy90YWlsX2NvbnZlcnNpb24uYwppbmRleCAzNmYxMDhmLi5mODEyMWExIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy90YWlsX2NvbnZlcnNpb24uYworKysgYi9mcy9yZWlzZXJmcy90YWlsX2NvbnZlcnNpb24uYwpAQCAtMTUsNyArMTUsNyBAQAogLyogcGF0aCBwb2ludHMgdG8gZmlyc3QgZGlyZWN0IGl0ZW0gb2YgdGhlIGZpbGUgcmVnYXJsZXNzIG9mIGhvdyBtYW55IG9mCiAgICB0aGVtIGFyZSB0aGVyZSAqLwogaW50IGRpcmVjdDJpbmRpcmVjdChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJICAgIHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVuYmgsCisJCSAgICBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIHN0cnVjdCBidWZmZXJfaGVhZCAqdW5iaCwKIAkJICAgIGxvZmZfdCB0YWlsX29mZnNldCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CkBAIC0xNzEsNyArMTcxLDcgQEAKICAgIHdoYXQgd2UgZXhwZWN0IGZyb20gaXQgKG51bWJlciBvZiBjdXQgYnl0ZXMpLiBCdXQgd2hlbiB0YWlsIHJlbWFpbnMKICAgIGluIHRoZSB1bmZvcm1hdHRlZCBub2RlLCB3ZSBzZXQgbW9kZSB0byBTS0lQX0JBTEFOQ0lORyBhbmQgdW5sb2NrCiAgICBpbm9kZSAqLwotaW50IGluZGlyZWN0MmRpcmVjdChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IGlub2RlICpwX3NfaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgcGF0aCAqcF9zX3BhdGgsCS8qIHBhdGggdG8gdGhlIGluZGlyZWN0IGl0ZW0uICovCitpbnQgaW5kaXJlY3QyZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsCS8qIHBhdGggdG8gdGhlIGluZGlyZWN0IGl0ZW0uICovCiAJCSAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2l0ZW1fa2V5LAkvKiBLZXkgdG8gbG9vayBmb3IgdW5mb3JtYXR0ZWQgbm9kZSBwb2ludGVyIHRvIGJlIGN1dC4gKi8KIAkJICAgIGxvZmZfdCBuX25ld19maWxlX3NpemUsCS8qIE5ldyBmaWxlIHNpemUuICovCiAJCSAgICBjaGFyICpwX2NfbW9kZSkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IDFlNGQ2ODUuLmYwMTM4OWYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX194YXR0cl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgY3B1X2tleSBwb3Nfa2V5OwkvKiBrZXkgb2YgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZGlyZWN0b3J5IChrZXkgb2YgZGlyZWN0b3J5IGVudHJ5KSAqLwogCUlOSVRJQUxJWkVfUEFUSChwYXRoX3RvX2VudHJ5KTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtNDIwLDcgKzQyMCw3IEBACiBzdGF0aWMKIGludCB4YXR0cl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBmaWxsZGlyX3QgZmlsbGVyLCB2b2lkICpidWYpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCByZXMgPSAtRU5PVERJUjsKIAlpZiAoIWZpbGUtPmZfb3AgfHwgIWZpbGUtPmZfb3AtPnJlYWRkaXIpCiAJCWdvdG8gb3V0OwpAQCAtNTA4LDcgKzUwOCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXhpbm9kZSA9IGZwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwl4aW5vZGUgPSBmcC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyB8PSBpX2hhc194YXR0cl9kaXI7CiAKIAkvKiB3ZSBuZWVkIHRvIGNvcHkgaXQgb2ZmLi4gKi8KQEAgLTUyNyw3ICs1MjcsNyBAQAogCW5ld2F0dHJzLmlhX3NpemUgPSBidWZmZXJfc2l6ZTsKIAluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfU0laRSB8IEFUVFJfQ1RJTUU7CiAJbXV0ZXhfbG9jaygmeGlub2RlLT5pX211dGV4KTsKLQllcnIgPSBub3RpZnlfY2hhbmdlKGZwLT5mX2RlbnRyeSwgJm5ld2F0dHJzKTsKKwllcnIgPSBub3RpZnlfY2hhbmdlKGZwLT5mX3BhdGguZGVudHJ5LCAmbmV3YXR0cnMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZpbHA7CiAKQEAgLTYyNiw3ICs2MjYsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl4aW5vZGUgPSBmcC0+Zl9kZW50cnktPmRfaW5vZGU7CisJeGlub2RlID0gZnAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaXNpemUgPSB4aW5vZGUtPmlfc2l6ZTsKIAlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyB8PSBpX2hhc194YXR0cl9kaXI7CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKaW5kZXggOTdhZTFiOS4uNTI5NmEyOSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCWludCBuOwogCiAJKnNpemUgPSByZWlzZXJmc19hY2xfc2l6ZShhY2wtPmFfY291bnQpOwotCWV4dF9hY2wgPSAocmVpc2VyZnNfYWNsX2hlYWRlciAqKSBrbWFsbG9jKHNpemVvZihyZWlzZXJmc19hY2xfaGVhZGVyKSArCisJZXh0X2FjbCA9IGttYWxsb2Moc2l6ZW9mKHJlaXNlcmZzX2FjbF9oZWFkZXIpICsKIAkJCQkJCSAgYWNsLT5hX2NvdW50ICoKIAkJCQkJCSAgc2l6ZW9mKHJlaXNlcmZzX2FjbF9lbnRyeSksCiAJCQkJCQkgIEdGUF9OT0ZTKTsKZGlmZiAtLWdpdCBhL2ZzL3JvbWZzL2lub2RlLmMgYi9mcy9yb21mcy9pbm9kZS5jCmluZGV4IGM1YWYwODguLmQzZTI0M2EgMTAwNjQ0Ci0tLSBhL2ZzL3JvbWZzL2lub2RlLmMKKysrIGIvZnMvcm9tZnMvaW5vZGUuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiBzdGF0aWMgaW50CiByb21mc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBpbm9kZSAqaSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHJvbWZzX2lub2RlIHJpOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBtYXhvZmY7CiAJaW50IGosIGlubywgbmV4dGZoOwpkaWZmIC0tZ2l0IGEvZnMvc2VsZWN0LmMgYi9mcy9zZWxlY3QuYwppbmRleCBkY2JjMTExLi5mZTA4OTNhIDEwMDY0NAotLS0gYS9mcy9zZWxlY3QuYworKysgYi9mcy9zZWxlY3QuYwpAQCAtMzExLDcgKzMxMSw3IEBACiB7CiAJZmRfc2V0X2JpdHMgZmRzOwogCXZvaWQgKmJpdHM7Ci0JaW50IHJldCwgbWF4X2Zkc2V0OworCWludCByZXQsIG1heF9mZHM7CiAJdW5zaWduZWQgaW50IHNpemU7CiAJc3RydWN0IGZkdGFibGUgKmZkdDsKIAkvKiBBbGxvY2F0ZSBzbWFsbCBhcmd1bWVudHMgb24gdGhlIHN0YWNrIHRvIHNhdmUgbWVtb3J5IGFuZCBiZSBmYXN0ZXIgKi8KQEAgLTMyMSwxMyArMzIxLDEzIEBACiAJaWYgKG4gPCAwKQogCQlnb3RvIG91dF9ub2ZkczsKIAotCS8qIG1heF9mZHNldCBjYW4gaW5jcmVhc2UsIHNvIGdyYWIgaXQgb25jZSB0byBhdm9pZCByYWNlICovCisJLyogbWF4X2ZkcyBjYW4gaW5jcmVhc2UsIHNvIGdyYWIgaXQgb25jZSB0byBhdm9pZCByYWNlICovCiAJcmN1X3JlYWRfbG9jaygpOwogCWZkdCA9IGZpbGVzX2ZkdGFibGUoY3VycmVudC0+ZmlsZXMpOwotCW1heF9mZHNldCA9IGZkdC0+bWF4X2Zkc2V0OworCW1heF9mZHMgPSBmZHQtPm1heF9mZHM7CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JaWYgKG4gPiBtYXhfZmRzZXQpCi0JCW4gPSBtYXhfZmRzZXQ7CisJaWYgKG4gPiBtYXhfZmRzKQorCQluID0gbWF4X2ZkczsKIAogCS8qCiAJICogV2UgbmVlZCA2IGJpdG1hcHMgKGluL291dC9leCBmb3IgYm90aCBpbmNvbWluZyBhbmQgb3V0Z29pbmcpLApkaWZmIC0tZ2l0IGEvZnMvc2VxX2ZpbGUuYyBiL2ZzL3NlcV9maWxlLmMKaW5kZXggMTA2OTBhYS4uMGFjMjJhZiAxMDA2NDQKLS0tIGEvZnMvc2VxX2ZpbGUuYworKysgYi9mcy9zZXFfZmlsZS5jCkBAIC0yNjksNyArMjY5LDcgQEAKIC8qKgogICoJc2VxX3JlbGVhc2UgLQlmcmVlIHRoZSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBzZXF1ZW50aWFsIGZpbGUuCiAgKglAZmlsZTogZmlsZSBpbiBxdWVzdGlvbgotICoJQGlub2RlOiBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZQorICoJQGlub2RlOiBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlCiAgKgogICoJRnJlZXMgdGhlIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHNlcXVlbnRpYWwgZmlsZTsgY2FuIGJlIHVzZWQKICAqCWFzIC0+Zl9vcC0+cmVsZWFzZSgpIGlmIHlvdSBkb24ndCBoYXZlIHByaXZhdGUgZGF0YSB0byBkZXN0cm95LgpkaWZmIC0tZ2l0IGEvZnMvc21iZnMvY2FjaGUuYyBiL2ZzL3NtYmZzL2NhY2hlLmMKaW5kZXggNzRiODZkOS4uODE4MmYwNSAxMDA2NDQKLS0tIGEvZnMvc21iZnMvY2FjaGUuYworKysgYi9mcy9zbWJmcy9jYWNoZS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkgICAgICAgc3RydWN0IHNtYl9jYWNoZV9jb250cm9sICpjdHJsLCBzdHJ1Y3QgcXN0ciAqcW5hbWUsCiAJICAgICAgIHN0cnVjdCBzbWJfZmF0dHIgKmVudHJ5KQogewotCXN0cnVjdCBkZW50cnkgKm5ld2RlbnQsICpkZW50cnkgPSBmaWxwLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpuZXdkZW50LCAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKm5ld2lubywgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBzbWJfY2FjaGVfY29udHJvbCBjdGwgPSAqY3RybDsKIAlpbnQgdmFsaWQgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvc21iZnMvZGlyLmMgYi9mcy9zbWJmcy9kaXIuYwppbmRleCA3MGQ5YzVhLi5iMWU1OGQxIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9kaXIuYworKysgYi9mcy9zbWJmcy9kaXIuYwpAQCAtNzgsNyArNzgsNyBAQAogc3RhdGljIGludCAKIHNtYl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICpkaXIgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHNtYl9zYl9pbmZvICpzZXJ2ZXIgPSBzZXJ2ZXJfZnJvbV9kZW50cnkoZGVudHJ5KTsKIAl1bmlvbiAgc21iX2Rpcl9jYWNoZSAqY2FjaGUgPSBOVUxMOwpAQCAtMjM4LDEyICsyMzgsMTIgQEAKIHN0YXRpYyBpbnQKIHNtYl9kaXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3Qgc21iX3NiX2luZm8gKnNlcnZlcjsKIAlpbnQgZXJyb3IgPSAwOwogCiAJVkVSQk9TRSgiKCVzLyVzKVxuIiwgZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsCi0JCWZpbGUtPmZfZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCWZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKIAogCS8qCiAJICogRGlyZWN0b3J5IHRpbWVzdGFtcHMgaW4gdGhlIGNvcmUgcHJvdG9jb2wgYXJlbid0IHVwZGF0ZWQKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL2ZpbGUuYyBiL2ZzL3NtYmZzL2ZpbGUuYwppbmRleCA1MDc4NGQxLi5lNTA1MzNhIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9maWxlLmMKKysrIGIvZnMvc21iZnMvZmlsZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIHNtYl9yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJaW50CQllcnJvcjsKLQlzdHJ1Y3QgZGVudHJ5ICAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAKIAlwYWdlX2NhY2hlX2dldChwYWdlKTsKIAllcnJvciA9IHNtYl9yZWFkcGFnZV9zeW5jKGRlbnRyeSwgcGFnZSk7CkBAIC0yMDUsNyArMjA1LDcgQEAKIHNtYl91cGRhdGVwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCiAJREVCVUcxKCIoJXMvJXMgJWRAJWxsZClcbiIsIERFTlRSWV9QQVRIKGRlbnRyeSksIGNvdW50LAogCQkoKHVuc2lnbmVkIGxvbmcgbG9uZylwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSArIG9mZnNldCk7CkBAIC0yMTgsNyArMjE4LDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzc2l6ZV90CXN0YXR1czsKIAogCVZFUkJPU0UoImZpbGUgJXMvJXMsIGNvdW50PSVsdUAlbHVcbiIsIERFTlRSWV9QQVRIKGRlbnRyeSksCkBAIC0yNDMsNyArMjQzLDcgQEAKIHN0YXRpYyBpbnQKIHNtYl9maWxlX21tYXAoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCWludAlzdGF0dXM7CiAKIAlWRVJCT1NFKCJmaWxlICVzLyVzLCBhZGRyZXNzICVsdSAtICVsdVxuIiwKQEAgLTI2NCw3ICsyNjQsNyBAQAogc21iX2ZpbGVfc2VuZGZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCAqcHBvcywKIAkJICBzaXplX3QgY291bnQsIHJlYWRfYWN0b3JfdCBhY3Rvciwgdm9pZCAqdGFyZ2V0KQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJc3NpemVfdCBzdGF0dXM7CiAKIAlWRVJCT1NFKCJmaWxlICVzLyVzLCBwb3M9JUxkLCBjb3VudD0lZFxuIiwKQEAgLTMyMyw3ICszMjMsNyBAQAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzc2l6ZV90CXJlc3VsdDsKIAogCVZFUkJPU0UoImZpbGUgJXMvJXMsIGNvdW50PSVsdUAlbHVcbiIsCkBAIC0zNTUsNyArMzU1LDcgQEAKIHNtYl9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogewogCWludCByZXN1bHQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlpbnQgc21iX21vZGUgPSAoZmlsZS0+Zl9tb2RlICYgT19BQ0NNT0RFKSAtIDE7CiAKIAlsb2NrX2tlcm5lbCgpOwpkaWZmIC0tZ2l0IGEvZnMvc21iZnMvaW5vZGUuYyBiL2ZzL3NtYmZzL2lub2RlLmMKaW5kZXggNGFmNGNkNy4uODRkZmUzZiAxMDA2NDQKLS0tIGEvZnMvc21iZnMvaW5vZGUuYworKysgYi9mcy9zbWJmcy9pbm9kZS5jCkBAIC00ODIsMTIgKzQ4MiwxMyBAQAogCXNtYl9jbG9zZV9zb2NrZXQoc2VydmVyKTsKIAogCWlmIChzZXJ2ZXItPmNvbm5fcGlkKQotCQlraWxsX3Byb2Moc2VydmVyLT5jb25uX3BpZCwgU0lHVEVSTSwgMSk7CisJCWtpbGxfcGlkKHNlcnZlci0+Y29ubl9waWQsIFNJR1RFUk0sIDEpOwogCiAJa2ZyZWUoc2VydmVyLT5vcHMpOwogCXNtYl91bmxvYWRfbmxzKHNlcnZlcik7CiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CiAJc21iX3VubG9ja19zZXJ2ZXIoc2VydmVyKTsKKwlwdXRfcGlkKHNlcnZlci0+Y29ubl9waWQpOwogCWtmcmVlKHNlcnZlcik7CiB9CiAKQEAgLTUzMCw3ICs1MzEsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZzZXJ2ZXItPnhtaXRxKTsKIAlJTklUX0xJU1RfSEVBRCgmc2VydmVyLT5yZWN2cSk7CiAJc2VydmVyLT5jb25uX2Vycm9yID0gMDsKLQlzZXJ2ZXItPmNvbm5fcGlkID0gMDsKKwlzZXJ2ZXItPmNvbm5fcGlkID0gTlVMTDsKIAlzZXJ2ZXItPnN0YXRlID0gQ09OTl9JTlZBTElEOyAvKiBubyBjb25uZWN0aW9uIHlldCAqLwogCXNlcnZlci0+Z2VuZXJhdGlvbiA9IDA7CiAKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL3Byb2MuYyBiL2ZzL3NtYmZzL3Byb2MuYwppbmRleCA0MGUxNzRkLi5mZWFjNDYwIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9wcm9jLmMKKysrIGIvZnMvc21iZnMvcHJvYy5jCkBAIC04NzMsMTEgKzg3MywxMSBAQAogCWZpbHAgPSBmZ2V0KG9wdC0+ZmQpOwogCWlmICghZmlscCkKIAkJZ290byBvdXQ7Ci0JaWYgKCFzbWJfdmFsaWRfc29ja2V0KGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKSkKKwlpZiAoIXNtYl92YWxpZF9zb2NrZXQoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpCiAJCWdvdG8gb3V0X3B1dGY7CiAKIAlzZXJ2ZXItPnNvY2tfZmlsZSA9IGZpbHA7Ci0Jc2VydmVyLT5jb25uX3BpZCA9IGN1cnJlbnQtPnBpZDsKKwlzZXJ2ZXItPmNvbm5fcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChjdXJyZW50KSk7CiAJc2VydmVyLT5vcHQgPSAqb3B0OwogCXNlcnZlci0+Z2VuZXJhdGlvbiArPSAxOwogCXNlcnZlci0+c3RhdGUgPSBDT05OX1ZBTElEOwpAQCAtODk4LDcgKzg5OCw3IEBACiAJLyoKIAkgKiBTdG9yZSB0aGUgc2VydmVyIGluIHNvY2sgdXNlcl9kYXRhIChPbmx5IHVzZWQgYnkgc3VucnBjKQogCSAqLwotCXNrID0gU09DS0VUX0koZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpLT5zazsKKwlzayA9IFNPQ0tFVF9JKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5zazsKIAlzay0+c2tfdXNlcl9kYXRhID0gc2VydmVyOwogCiAJLyogY2hhaW4gaW50byB0aGUgZGF0YV9yZWFkeSBjYWxsYmFjayAqLwpAQCAtOTcxLDggKzk3MSw4IEBACiAJfQogCiAJVkVSQk9TRSgicHJvdG9jb2w9JWQsIG1heF94bWl0PSVkLCBwaWQ9JWQgY2FwYWJpbGl0aWVzPTB4JXhcbiIsCi0JCXNlcnZlci0+b3B0LnByb3RvY29sLCBzZXJ2ZXItPm9wdC5tYXhfeG1pdCwgc2VydmVyLT5jb25uX3BpZCwKLQkJc2VydmVyLT5vcHQuY2FwYWJpbGl0aWVzKTsKKwkJc2VydmVyLT5vcHQucHJvdG9jb2wsIHNlcnZlci0+b3B0Lm1heF94bWl0LAorCQlwaWRfbnIoc2VydmVyLT5jb25uX3BpZCksIHNlcnZlci0+b3B0LmNhcGFiaWxpdGllcyk7CiAKIAkvKiBGSVhNRTogdGhpcyByZWFsbHkgc2hvdWxkIGJlIGRvbmUgYnkgc21ibW91bnQuICovCiAJaWYgKHNlcnZlci0+b3B0Lm1heF94bWl0ID4gU01CX01BWF9QQUNLRVRfU0laRSkgewpAQCAtMTkzOSw3ICsxOTM5LDcgQEAKIHNtYl9wcm9jX3JlYWRkaXJfc2hvcnQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIsCiAJCSAgICAgICBzdHJ1Y3Qgc21iX2NhY2hlX2NvbnRyb2wgKmN0bCkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBmaWxwLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBzbWJfc2JfaW5mbyAqc2VydmVyID0gc2VydmVyX2Zyb21fZGVudHJ5KGRpcik7CiAJc3RydWN0IHFzdHIgcW5hbWU7CiAJc3RydWN0IHNtYl9mYXR0ciBmYXR0cjsKQEAgLTIyOTEsNyArMjI5MSw3IEBACiBzbWJfcHJvY19yZWFkZGlyX2xvbmcoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIsCiAJCSAgICAgIHN0cnVjdCBzbWJfY2FjaGVfY29udHJvbCAqY3RsKQogewotCXN0cnVjdCBkZW50cnkgKmRpciA9IGZpbHAtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRpciA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IHNtYl9zYl9pbmZvICpzZXJ2ZXIgPSBzZXJ2ZXJfZnJvbV9kZW50cnkoZGlyKTsKIAlzdHJ1Y3QgcXN0ciBxbmFtZTsKIAlzdHJ1Y3Qgc21iX2ZhdHRyIGZhdHRyOwpAQCAtMjg1OSw3ICsyODU5LDcgQEAKIHNtYl9wcm9jX3JlYWRkaXJfbnVsbChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpciwKIAkJICAgICAgc3RydWN0IHNtYl9jYWNoZV9jb250cm9sICpjdGwpCiB7Ci0Jc3RydWN0IHNtYl9zYl9pbmZvICpzZXJ2ZXIgPSBzZXJ2ZXJfZnJvbV9kZW50cnkoZmlscC0+Zl9kZW50cnkpOworCXN0cnVjdCBzbWJfc2JfaW5mbyAqc2VydmVyID0gc2VydmVyX2Zyb21fZGVudHJ5KGZpbHAtPmZfcGF0aC5kZW50cnkpOwogCiAJaWYgKHNtYl9wcm9jX29wc193YWl0KHNlcnZlcikgPCAwKQogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL3NtYmlvZC5jIGIvZnMvc21iZnMvc21iaW9kLmMKaW5kZXggZTY3NTQwNC4uODllYWYzMSAxMDA2NDQKLS0tIGEvZnMvc21iZnMvc21iaW9kLmMKKysrIGIvZnMvc21iZnMvc21iaW9kLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IHNtYl9yZXF1ZXN0ICpyZXE7Ci0JcGlkX3QgcGlkID0gc2VydmVyLT5jb25uX3BpZDsKKwlzdHJ1Y3QgcGlkICpwaWQgPSBnZXRfcGlkKHNlcnZlci0+Y29ubl9waWQpOwogCWludCByZXN1bHQgPSAwOwogCiAJVkVSQk9TRSgic3RhdGU6ICVkXG4iLCBzZXJ2ZXItPnN0YXRlKTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCS8qCiAJICogTm90ZTogdXNlIHRoZSAicHJpdiIgZmxhZywgYXMgYSB1c2VyIHByb2Nlc3MgbWF5IG5lZWQgdG8gcmVjb25uZWN0LgogCSAqLwotCXJlc3VsdCA9IGtpbGxfcHJvYyhwaWQsIFNJR1VTUjEsIDEpOworCXJlc3VsdCA9IGtpbGxfcGlkKHBpZCwgU0lHVVNSMSwgMSk7CiAJaWYgKHJlc3VsdCkgewogCQkvKiBGSVhNRTogdGhpcyBpcyBtb3N0IGxpa2VseSBmYXRhbCwgdW1vdW50PyAqLwogCQlwcmludGsoS0VSTl9FUlIgInNtYl9yZXRyeTogc2lnbmFsIGZhaWxlZCBbJWRdXG4iLCByZXN1bHQpOwpAQCAtMjMzLDYgKzIzMyw3IEBACiAJLyogRklYTUU6IFRoZSByZXRyaWVkIHJlcXVlc3RzIHNob3VsZCBwZXJoYXBzIGdldCBhICJ0aW1lIGJvb3N0Ii4gKi8KIAogb3V0OgorCXB1dF9waWQocGlkKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9mcy9zbWJmcy9zb2NrLmMgYi9mcy9zbWJmcy9zb2NrLmMKaW5kZXggNjgxNWIxYi4uOTJlYTZiMiAxMDA2NDQKLS0tIGEvZnMvc21iZnMvc29jay5jCisrKyBiL2ZzL3NtYmZzL3NvY2suYwpAQCAtODIsMTAgKzgyLDEwIEBACiAJaWYgKHNlcnZlciAmJiAoZmlsZSA9IHNlcnZlci0+c29ja19maWxlKSkKIAl7CiAjaWZkZWYgU01CRlNfUEFSQU5PSUEKLQkJaWYgKCFzbWJfdmFsaWRfc29ja2V0KGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSkKKwkJaWYgKCFzbWJfdmFsaWRfc29ja2V0KGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKQogCQkJUEFSQU5PSUEoImJhZCBzb2NrZXQhXG4iKTsKICNlbmRpZgotCQlyZXR1cm4gU09DS0VUX0koZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCQlyZXR1cm4gU09DS0VUX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJfQogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCBkYTc0NTgzLi4yZmNhNmViIDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtNDIsNyArNDIsNyBAQAogCXN0cnVjdCBwYXJ0aWFsX3BhZ2UgKnBhcnRpYWw7CS8qIHBhZ2VzW10gbWF5IG5vdCBiZSBjb250aWcgKi8KIAlpbnQgbnJfcGFnZXM7CQkJLyogbnVtYmVyIG9mIHBhZ2VzIGluIG1hcCAqLwogCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIHNwbGljZSBmbGFncyAqLwotCXN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHM7Lyogb3BzIGFzc29jaWF0ZWQgd2l0aCBvdXRwdXQgcGlwZSAqLworCWNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHM7Lyogb3BzIGFzc29jaWF0ZWQgd2l0aCBvdXRwdXQgcGlwZSAqLwogfTsKIAogLyoKQEAgLTEzOSw3ICsxMzksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBwYWdlX2NhY2hlX3BpcGVfYnVmX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyBwYWdlX2NhY2hlX3BpcGVfYnVmX29wcyA9IHsKIAkuY2FuX21lcmdlID0gMCwKIAkubWFwID0gZ2VuZXJpY19waXBlX2J1Zl9tYXAsCiAJLnVubWFwID0gZ2VuZXJpY19waXBlX2J1Zl91bm1hcCwKQEAgLTE1OSw3ICsxNTksNyBAQAogCXJldHVybiBnZW5lcmljX3BpcGVfYnVmX3N0ZWFsKHBpcGUsIGJ1Zik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB1c2VyX3BhZ2VfcGlwZV9idWZfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zIHVzZXJfcGFnZV9waXBlX2J1Zl9vcHMgPSB7CiAJLmNhbl9tZXJnZSA9IDAsCiAJLm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfbWFwLAogCS51bm1hcCA9IGdlbmVyaWNfcGlwZV9idWZfdW5tYXAsCkBAIC03MjQsNyArNzI0LDcgQEAKIAlmb3IgKDs7KSB7CiAJCWlmIChwaXBlLT5ucmJ1ZnMpIHsKIAkJCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmID0gcGlwZS0+YnVmcyArIHBpcGUtPmN1cmJ1ZjsKLQkJCXN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHMgPSBidWYtPm9wczsKKwkJCWNvbnN0IHN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHMgPSBidWYtPm9wczsKIAogCQkJc2QubGVuID0gYnVmLT5sZW47CiAJCQlpZiAoc2QubGVuID4gc2QudG90YWxfbGVuKQpAQCAtODQ0LDcgKzg0NCw3IEBACiAJc3NpemVfdCByZXQ7CiAJaW50IGVycjsKIAotCWVyciA9IHJlbW92ZV9zdWlkKG91dC0+Zl9kZW50cnkpOworCWVyciA9IHJlbW92ZV9zdWlkKG91dC0+Zl9wYXRoLmRlbnRyeSk7CiAJaWYgKHVubGlrZWx5KGVycikpCiAJCXJldHVybiBlcnI7CiAKQEAgLTg5MCwxMCArODkwLDEwIEBACiAJc3NpemVfdCByZXQ7CiAJaW50IGVycjsKIAotCWVyciA9IHNob3VsZF9yZW1vdmVfc3VpZChvdXQtPmZfZGVudHJ5KTsKKwllcnIgPSBzaG91bGRfcmVtb3ZlX3N1aWQob3V0LT5mX3BhdGguZGVudHJ5KTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCWVyciA9IF9fcmVtb3ZlX3N1aWQob3V0LT5mX2RlbnRyeSwgZXJyKTsKKwkJZXJyID0gX19yZW1vdmVfc3VpZChvdXQtPmZfcGF0aC5kZW50cnksIGVycik7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTEwMDgsNyArMTAwOCw3IEBACiAJICogcmFuZG9tbHkgZHJvcCBkYXRhIGZvciBlZyBzb2NrZXQgLT4gc29ja2V0IHNwbGljaW5nLiBVc2UgdGhlCiAJICogcGlwZWQgc3BsaWNpbmcgZm9yIHRoYXQhCiAJICovCi0JaV9tb2RlID0gaW4tPmZfZGVudHJ5LT5kX2lub2RlLT5pX21vZGU7CisJaV9tb2RlID0gaW4tPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZTsKIAlpZiAodW5saWtlbHkoIVNfSVNSRUcoaV9tb2RlKSAmJiAhU19JU0JMSyhpX21vZGUpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTExMzIsNyArMTEzMiw3IEBACiAJbG9mZl90IG9mZnNldCwgKm9mZjsKIAlsb25nIHJldDsKIAotCXBpcGUgPSBwaXBlX2luZm8oaW4tPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlwaXBlID0gcGlwZV9pbmZvKGluLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAocGlwZSkgewogCQlpZiAob2ZmX2luKQogCQkJcmV0dXJuIC1FU1BJUEU7CkBAIC0xMTUzLDcgKzExNTMsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXBpcGUgPSBwaXBlX2luZm8ob3V0LT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJcGlwZSA9IHBpcGVfaW5mbyhvdXQtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWlmIChwaXBlKSB7CiAJCWlmIChvZmZfb3V0KQogCQkJcmV0dXJuIC1FU1BJUEU7CkBAIC0xMzIxLDcgKzEzMjEsNyBAQAogCQkub3BzID0gJnVzZXJfcGFnZV9waXBlX2J1Zl9vcHMsCiAJfTsKIAotCXBpcGUgPSBwaXBlX2luZm8oZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXBpcGUgPSBwaXBlX2luZm8oZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKCFwaXBlKQogCQlyZXR1cm4gLUVCQURGOwogCWlmICh1bmxpa2VseShucl9zZWdzID4gVUlPX01BWElPVikpCkBAIC0xNTQ5LDggKzE1NDksOCBAQAogc3RhdGljIGxvbmcgZG9fdGVlKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IGZpbGUgKm91dCwgc2l6ZV90IGxlbiwKIAkJICAgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKmlwaXBlID0gcGlwZV9pbmZvKGluLT5mX2RlbnRyeS0+ZF9pbm9kZSk7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqb3BpcGUgPSBwaXBlX2luZm8ob3V0LT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaXBpcGUgPSBwaXBlX2luZm8oaW4tPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKm9waXBlID0gcGlwZV9pbmZvKG91dC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvc3RhY2suYyBiL2ZzL3N0YWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmYjg4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9zdGFjay5jCkBAIC0wLDAgKzEsMzggQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0YWNrLmg+CisKKy8qIGRvZXMgX05PVF8gcmVxdWlyZSBpX211dGV4IHRvIGJlIGhlbGQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW5ub3QgYmUgaW5saW5lZCBzaW5jZSBpX3NpemVfe3JlYWQsd3JpdGV9IGlzIHJhdGhlcgorICogaGVhdnktd2VpZ2h0IG9uIDMyLWJpdCBzeXN0ZW1zCisgKi8KK3ZvaWQgZnNzdGFja19jb3B5X2lub2RlX3NpemUoc3RydWN0IGlub2RlICpkc3QsIGNvbnN0IHN0cnVjdCBpbm9kZSAqc3JjKQoreworCWlfc2l6ZV93cml0ZShkc3QsIGlfc2l6ZV9yZWFkKChzdHJ1Y3QgaW5vZGUgKilzcmMpKTsKKwlkc3QtPmlfYmxvY2tzID0gc3JjLT5pX2Jsb2NrczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZzc3RhY2tfY29weV9pbm9kZV9zaXplKTsKKworLyogY29weSBhbGwgYXR0cmlidXRlczsgZ2V0X25saW5rcyBpcyBvcHRpb25hbCB3YXkgdG8gb3ZlcnJpZGUgdGhlIGlfbmxpbmsKKyAqIGNvcHlpbmcKKyAqLwordm9pZCBmc3N0YWNrX2NvcHlfYXR0cl9hbGwoc3RydWN0IGlub2RlICpkZXN0LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKnNyYywKKwkJCQlpbnQgKCpnZXRfbmxpbmtzKShzdHJ1Y3QgaW5vZGUgKikpCit7CisJaWYgKCFnZXRfbmxpbmtzKQorCQlkZXN0LT5pX25saW5rID0gc3JjLT5pX25saW5rOworCWVsc2UKKwkJZGVzdC0+aV9ubGluayA9ICgqZ2V0X25saW5rcykoZGVzdCk7CisKKwlkZXN0LT5pX21vZGUgPSBzcmMtPmlfbW9kZTsKKwlkZXN0LT5pX3VpZCA9IHNyYy0+aV91aWQ7CisJZGVzdC0+aV9naWQgPSBzcmMtPmlfZ2lkOworCWRlc3QtPmlfcmRldiA9IHNyYy0+aV9yZGV2OworCWRlc3QtPmlfYXRpbWUgPSBzcmMtPmlfYXRpbWU7CisJZGVzdC0+aV9tdGltZSA9IHNyYy0+aV9tdGltZTsKKwlkZXN0LT5pX2N0aW1lID0gc3JjLT5pX2N0aW1lOworCWRlc3QtPmlfYmxrYml0cyA9IHNyYy0+aV9ibGtiaXRzOworCWRlc3QtPmlfZmxhZ3MgPSBzcmMtPmlfZmxhZ3M7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmc3N0YWNrX2NvcHlfYXR0cl9hbGwpOwpkaWZmIC0tZ2l0IGEvZnMvc3RhdC5jIGIvZnMvc3RhdC5jCmluZGV4IGEwZWJmYzcuLjM4YThjYjIgMTAwNjQ0Ci0tLSBhL2ZzL3N0YXQuYworKysgYi9mcy9zdGF0LmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCWludCBlcnJvciA9IC1FQkFERjsKIAogCWlmIChmKSB7Ci0JCWVycm9yID0gdmZzX2dldGF0dHIoZi0+Zl92ZnNtbnQsIGYtPmZfZGVudHJ5LCBzdGF0KTsKKwkJZXJyb3IgPSB2ZnNfZ2V0YXR0cihmLT5mX3BhdGgubW50LCBmLT5mX3BhdGguZGVudHJ5LCBzdGF0KTsKIAkJZnB1dChmKTsKIAl9CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggODRjMzIwZi4uM2U3NDU4YyAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC01NzAsNyArNTcwLDcgQEAKIAogCWZpbGVfbGlzdF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmLCAmc2ItPnNfZmlsZXMsIGZfdS5mdV9saXN0KSB7Ci0JCWlmIChTX0lTUkVHKGYtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmIGZpbGVfY291bnQoZikpCisJCWlmIChTX0lTUkVHKGYtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgJiYgZmlsZV9jb3VudChmKSkKIAkJCWYtPmZfbW9kZSAmPSB+Rk1PREVfV1JJVEU7CiAJfQogCWZpbGVfbGlzdF91bmxvY2soKTsKQEAgLTc1Myw5ICs3NTMsOSBAQAogCSAqIHdpbGwgcHJvdGVjdCB0aGUgbG9ja2ZzIGNvZGUgZnJvbSB0cnlpbmcgdG8gc3RhcnQgYSBzbmFwc2hvdAogCSAqIHdoaWxlIHdlIGFyZSBtb3VudGluZwogCSAqLwotCW11dGV4X2xvY2soJmJkZXYtPmJkX21vdW50X211dGV4KTsKKwlkb3duKCZiZGV2LT5iZF9tb3VudF9zZW0pOwogCXMgPSBzZ2V0KGZzX3R5cGUsIHRlc3RfYmRldl9zdXBlciwgc2V0X2JkZXZfc3VwZXIsIGJkZXYpOwotCW11dGV4X3VubG9jaygmYmRldi0+YmRfbW91bnRfbXV0ZXgpOworCXVwKCZiZGV2LT5iZF9tb3VudF9zZW0pOwogCWlmIChJU19FUlIocykpCiAJCWdvdG8gZXJyb3JfczsKIApkaWZmIC0tZ2l0IGEvZnMvc3luYy5jIGIvZnMvc3luYy5jCmluZGV4IDg2NWYzMmJlLi5kMGZlZmY2IDEwMDY0NAotLS0gYS9mcy9zeW5jLmMKKysrIGIvZnMvc3luYy5jCkBAIC05NCw3ICs5NCw3IEBACiAJICogbGl2ZWxvY2tzIGluIGZzeW5jX2J1ZmZlcnNfbGlzdCgpLgogCSAqLwogCW11dGV4X2xvY2soJm1hcHBpbmctPmhvc3QtPmlfbXV0ZXgpOwotCWVyciA9IGZpbGUtPmZfb3AtPmZzeW5jKGZpbGUsIGZpbGUtPmZfZGVudHJ5LCBkYXRhc3luYyk7CisJZXJyID0gZmlsZS0+Zl9vcC0+ZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwgZGF0YXN5bmMpOwogCWlmICghcmV0KQogCQlyZXQgPSBlcnI7CiAJbXV0ZXhfdW5sb2NrKCZtYXBwaW5nLT5ob3N0LT5pX211dGV4KTsKQEAgLTIyMyw3ICsyMjMsNyBAQAogCWlmICghZmlsZSkKIAkJZ290byBvdXQ7CiAKLQlpX21vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlOworCWlfbW9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZTsKIAlyZXQgPSAtRVNQSVBFOwogCWlmICghU19JU1JFRyhpX21vZGUpICYmICFTX0lTQkxLKGlfbW9kZSkgJiYgIVNfSVNESVIoaV9tb2RlKSAmJgogCQkJIVNfSVNMTksoaV9tb2RlKSkKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Jpbi5jIGIvZnMvc3lzZnMvYmluLmMKaW5kZXggOTgwMjJlNC4uZThmNTQwZCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvYmluLmMKKysrIGIvZnMvc3lzZnMvYmluLmMKQEAgLTM1LDcgKzM1LDcgQEAKIHJlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIHVzZXJidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2ZmKQogewogCWNoYXIgKmJ1ZmZlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCWludCBzaXplID0gZGVudHJ5LT5kX2lub2RlLT5pX3NpemU7CiAJbG9mZl90IG9mZnMgPSAqb2ZmOwogCWludCByZXQ7CkBAIC04MSw3ICs4MSw3IEBACiAJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmYpCiB7CiAJY2hhciAqYnVmZmVyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJaW50IHNpemUgPSBkZW50cnktPmRfaW5vZGUtPmlfc2l6ZTsKIAlsb2ZmX3Qgb2ZmcyA9ICpvZmY7CiAKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiBzdGF0aWMgaW50IG1tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIgPSB0b19iaW5fYXR0cihkZW50cnkpOwogCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gdG9fa29iaihkZW50cnktPmRfcGFyZW50KTsKIApAQCAtMTE3LDggKzExNyw4IEBACiAKIHN0YXRpYyBpbnQgb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogewotCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gc3lzZnNfZ2V0X2tvYmplY3QoZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50KTsKLQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqIGF0dHIgPSB0b19iaW5fYXR0cihmaWxlLT5mX2RlbnRyeSk7CisJc3RydWN0IGtvYmplY3QgKmtvYmogPSBzeXNmc19nZXRfa29iamVjdChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudCk7CisJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKiBhdHRyID0gdG9fYmluX2F0dHIoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJaW50IGVycm9yID0gLUVJTlZBTDsKIAogCWlmICgha29iaiB8fCAhYXR0cikKQEAgLTE1Myw4ICsxNTMsOCBAQAogCiBzdGF0aWMgaW50IHJlbGVhc2Uoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKIHsKLQlzdHJ1Y3Qga29iamVjdCAqIGtvYmogPSB0b19rb2JqKGZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudCk7Ci0Jc3RydWN0IGJpbl9hdHRyaWJ1dGUgKiBhdHRyID0gdG9fYmluX2F0dHIoZmlsZS0+Zl9kZW50cnkpOworCXN0cnVjdCBrb2JqZWN0ICoga29iaiA9IHRvX2tvYmooZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQpOworCXN0cnVjdCBiaW5fYXR0cmlidXRlICogYXR0ciA9IHRvX2Jpbl9hdHRyKGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCXU4ICogYnVmZmVyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGtvYmopIApkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZGlyLmMgYi9mcy9zeXNmcy9kaXIuYwppbmRleCBhNTc4MmU4Li41MTFlZGVmIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9kaXIuYworKysgYi9mcy9zeXNmcy9kaXIuYwpAQCAtNDE5LDcgKzQxOSw3IEBACiAKIHN0YXRpYyBpbnQgc3lzZnNfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBzeXNmc19kaXJlbnQgKiBwYXJlbnRfc2QgPSBkZW50cnktPmRfZnNkYXRhOwogCiAJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKQEAgLTQzMiw3ICs0MzIsNyBAQAogCiBzdGF0aWMgaW50IHN5c2ZzX2Rpcl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IHN5c2ZzX2RpcmVudCAqIGN1cnNvciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CkBAIC00NTIsNyArNDUyLDcgQEAKIAogc3RhdGljIGludCBzeXNmc19yZWFkZGlyKHN0cnVjdCBmaWxlICogZmlscCwgdm9pZCAqIGRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogcGFyZW50X3NkID0gZGVudHJ5LT5kX2ZzZGF0YTsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpjdXJzb3IgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnEgPSAmY3Vyc29yLT5zX3NpYmxpbmc7CkBAIC01MDksNyArNTA5LDcgQEAKIAogc3RhdGljIGxvZmZfdCBzeXNmc19kaXJfbHNlZWsoc3RydWN0IGZpbGUgKiBmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQogewotCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAogCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKQEAgLTUxOSw3ICs1MTksNyBAQAogCQkJaWYgKG9mZnNldCA+PSAwKQogCQkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJbXV0ZXhfdW5sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCQltdXRleF91bmxvY2soJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChvZmZzZXQgIT0gZmlsZS0+Zl9wb3MpIHsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCA5NWMxNjUxLi45Y2ZlNTNlIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIAogCWRvd24oJmJ1ZmZlci0+c2VtKTsKIAlpZiAoYnVmZmVyLT5uZWVkc19yZWFkX2ZpbGwpIHsKLQkJaWYgKChyZXR2YWwgPSBmaWxsX3JlYWRfYnVmZmVyKGZpbGUtPmZfZGVudHJ5LGJ1ZmZlcikpKQorCQlpZiAoKHJldHZhbCA9IGZpbGxfcmVhZF9idWZmZXIoZmlsZS0+Zl9wYXRoLmRlbnRyeSxidWZmZXIpKSkKIAkJCWdvdG8gb3V0OwogCX0KIAlwcl9kZWJ1ZygiJXM6IGNvdW50ID0gJXpkLCBwcG9zID0gJWxsZCwgYnVmID0gJXNcbiIsCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlkb3duKCZidWZmZXItPnNlbSk7CiAJbGVuID0gZmlsbF93cml0ZV9idWZmZXIoYnVmZmVyLCBidWYsIGNvdW50KTsKIAlpZiAobGVuID4gMCkKLQkJbGVuID0gZmx1c2hfd3JpdGVfYnVmZmVyKGZpbGUtPmZfZGVudHJ5LCBidWZmZXIsIGxlbik7CisJCWxlbiA9IGZsdXNoX3dyaXRlX2J1ZmZlcihmaWxlLT5mX3BhdGguZGVudHJ5LCBidWZmZXIsIGxlbik7CiAJaWYgKGxlbiA+IDApCiAJCSpwcG9zICs9IGxlbjsKIAl1cCgmYnVmZmVyLT5zZW0pOwpAQCAtMjU0LDggKzI1NCw4IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tfcGVybShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogewotCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gc3lzZnNfZ2V0X2tvYmplY3QoZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50KTsKLQlzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciA9IHRvX2F0dHIoZmlsZS0+Zl9kZW50cnkpOworCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gc3lzZnNfZ2V0X2tvYmplY3QoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQpOworCXN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyID0gdG9fYXR0cihmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAlzdHJ1Y3Qgc3lzZnNfYnVmZmVyICogYnVmZmVyOwogCXN0cnVjdCBzeXNmc19vcHMgKiBvcHMgPSBOVUxMOwogCWludCBlcnJvciA9IDA7CkBAIC0zMzcsOCArMzM3LDggQEAKIAogc3RhdGljIGludCBzeXNmc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCiB7Ci0Jc3RydWN0IGtvYmplY3QgKiBrb2JqID0gdG9fa29iaihmaWxwLT5mX2RlbnRyeS0+ZF9wYXJlbnQpOwotCXN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyID0gdG9fYXR0cihmaWxwLT5mX2RlbnRyeSk7CisJc3RydWN0IGtvYmplY3QgKiBrb2JqID0gdG9fa29iaihmaWxwLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudCk7CisJc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIgPSB0b19hdHRyKGZpbHAtPmZfcGF0aC5kZW50cnkpOwogCXN0cnVjdCBtb2R1bGUgKiBvd25lciA9IGF0dHItPm93bmVyOwogCXN0cnVjdCBzeXNmc19idWZmZXIgKiBidWZmZXIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKQEAgLTM3Miw4ICszNzIsOCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzeXNmc19wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQogewogCXN0cnVjdCBzeXNmc19idWZmZXIgKiBidWZmZXIgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGtvYmplY3QgKiBrb2JqID0gdG9fa29iaihmaWxwLT5mX2RlbnRyeS0+ZF9wYXJlbnQpOwotCXN0cnVjdCBzeXNmc19kaXJlbnQgKiBzZCA9IGZpbHAtPmZfZGVudHJ5LT5kX2ZzZGF0YTsKKwlzdHJ1Y3Qga29iamVjdCAqIGtvYmogPSB0b19rb2JqKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfcGFyZW50KTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogc2QgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKIAlpbnQgcmVzID0gMDsKIAogCXBvbGxfd2FpdChmaWxwLCAma29iai0+cG9sbCwgd2FpdCk7CmRpZmYgLS1naXQgYS9mcy9zeXN2L2Rpci5jIGIvZnMvc3lzdi9kaXIuYwppbmRleCBmMmJlZjk2Li5lYmY3MDA3IDEwMDY0NAotLS0gYS9mcy9zeXN2L2Rpci5jCisrKyBiL2ZzL3N5c3YvZGlyLmMKQEAgLTcwLDcgKzcwLDcgQEAKIHN0YXRpYyBpbnQgc3lzdl9yZWFkZGlyKHN0cnVjdCBmaWxlICogZmlscCwgdm9pZCAqIGRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3MgPSBmaWxwLT5mX3BvczsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCXVuc2lnbmVkIG9mZnNldCA9IHBvcyAmIH5QQUdFX0NBQ0hFX01BU0s7CiAJdW5zaWduZWQgbG9uZyBuID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CmRpZmYgLS1naXQgYS9mcy9zeXN2L3N1cGVyLmMgYi9mcy9zeXN2L3N1cGVyLmMKaW5kZXggZGM5ZTdkYy4uNmY5NzA3YSAxMDA2NDQKLS0tIGEvZnMvc3lzdi9zdXBlci5jCisrKyBiL2ZzL3N5c3Yvc3VwZXIuYwpAQCAtNTI4LDkgKzUyOCw2IEBACiAJLmZzX2ZsYWdzCT0gRlNfUkVRVUlSRVNfREVWLAogfTsKIAotZXh0ZXJuIGludCBzeXN2X2luaXRfaWNhY2hlKHZvaWQpIF9faW5pdDsKLWV4dGVybiB2b2lkIHN5c3ZfZGVzdHJveV9pY2FjaGUodm9pZCk7Ci0KIHN0YXRpYyBpbnQgX19pbml0IGluaXRfc3lzdl9mcyh2b2lkKQogewogCWludCBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL3N5c3Yvc3lzdi5oIGIvZnMvc3lzdi9zeXN2LmgKaW5kZXggOWRjYzgyMS4uZGNiMThiMiAxMDA2NDQKLS0tIGEvZnMvc3lzdi9zeXN2LmgKKysrIGIvZnMvc3lzdi9zeXN2LmgKQEAgLTE0Myw2ICsxNDMsOSBAQAogZXh0ZXJuIGludCBzeXN2X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiBleHRlcm4gdm9pZCBzeXN2X3NldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgZGV2X3QpOwogZXh0ZXJuIGludCBzeXN2X2dldGF0dHIoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ICopOworZXh0ZXJuIGludCBzeXN2X2luaXRfaWNhY2hlKHZvaWQpOworZXh0ZXJuIHZvaWQgc3lzdl9kZXN0cm95X2ljYWNoZSh2b2lkKTsKKwogCiAvKiBkaXIuYyAqLwogZXh0ZXJuIHN0cnVjdCBzeXN2X2Rpcl9lbnRyeSAqc3lzdl9maW5kX2VudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHBhZ2UgKiopOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jCmluZGV4IDhjMjhlZmEuLjIzOTFjOTEgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9kaXIuYworKysgYi9mcy91ZGYvZGlyLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAogaW50IHVkZl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXN0cnVjdCBpbm9kZSAqZGlyID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICpkaXIgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCByZXN1bHQ7CiAKIAlsb2NrX2tlcm5lbCgpOwpAQCAtMjI1LDcgKzIyNSw3IEBACiAKIAkJaWYgKCBjZmkuZmlsZUNoYXJhY3RlcmlzdGljcyAmIEZJRF9GSUxFX0NIQVJfUEFSRU5UICkKIAkJewotCQkJaWJsb2NrID0gcGFyZW50X2lubyhmaWxwLT5mX2RlbnRyeSk7CisJCQlpYmxvY2sgPSBwYXJlbnRfaW5vKGZpbHAtPmZfcGF0aC5kZW50cnkpOwogCQkJZmxlbiA9IDI7CiAJCQltZW1jcHkoZm5hbWUsICIuLiIsIGZsZW4pOwogCQkJZHRfdHlwZSA9IERUX0RJUjsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jCmluZGV4IDdhZWRkNTUuLmQ4MWYyZGIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9maWxlLmMKKysrIGIvZnMvdWRmL2ZpbGUuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiB7CiAJc3NpemVfdCByZXR2YWw7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZXJyLCBwb3M7CiAJc2l6ZV90IGNvdW50ID0gaW9jYi0+a2lfbGVmdDsKIApkaWZmIC0tZ2l0IGEvZnMvdWZzL2JhbGxvYy5jIGIvZnMvdWZzL2JhbGxvYy5jCmluZGV4IGI4MjM4MTQuLjYzOGY0YzUgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9iYWxsb2MuYworKysgYi9mcy91ZnMvYmFsbG9jLmMKQEAgLTIyNywyNCArMjI3LDI3IEBACiAgKiBXZSBjYW4gY29tZSBoZXJlIGZyb20gdWZzX3dyaXRlcGFnZSBvciB1ZnNfcHJlcGFyZV93cml0ZSwKICAqIGxvY2tlZF9wYWdlIGlzIGFyZ3VtZW50IG9mIHRoZXNlIGZ1bmN0aW9ucywgc28gd2UgYWxyZWFkeSBsb2NrIGl0LgogICovCi1zdGF0aWMgdm9pZCB1ZnNfY2hhbmdlX2Jsb2NrbnIoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGJhc2VibGssCitzdGF0aWMgdm9pZCB1ZnNfY2hhbmdlX2Jsb2NrbnIoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGJlZywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBvbGRiLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBuZXdiLCBzdHJ1Y3QgcGFnZSAqbG9ja2VkX3BhZ2UpCiB7Ci0JdW5zaWduZWQgaW50IGJsa19wZXJfcGFnZSA9IDEgPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSBpbm9kZS0+aV9ibGtiaXRzKTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7Ci0JcGdvZmZfdCBpbmRleCwgY3VyX2luZGV4ID0gbG9ja2VkX3BhZ2UtPmluZGV4OwotCXVuc2lnbmVkIGludCBpLCBqOworCWNvbnN0IHVuc2lnbmVkIG1hc2sgPSAoMSA8PCAoUEFHRV9DQUNIRV9TSElGVCAtIGlub2RlLT5pX2Jsa2JpdHMpKSAtIDE7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiBjb25zdCBtYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwlwZ29mZl90IGluZGV4LCBjdXJfaW5kZXg7CisJdW5zaWduZWQgZW5kLCBwb3MsIGo7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkLCAqYmg7CiAKIAlVRlNEKCJFTlRFUiwgaW5vICVsdSwgY291bnQgJXUsIG9sZGIgJXUsIG5ld2IgJXVcbiIsCiAJICAgICAgaW5vZGUtPmlfaW5vLCBjb3VudCwgb2xkYiwgbmV3Yik7CiAKKwlCVUdfT04oIWxvY2tlZF9wYWdlKTsKIAlCVUdfT04oIVBhZ2VMb2NrZWQobG9ja2VkX3BhZ2UpKTsKIAotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSArPSBibGtfcGVyX3BhZ2UpIHsKLQkJaW5kZXggPSAoYmFzZWJsaytpKSA+PiAoUEFHRV9DQUNIRV9TSElGVCAtIGlub2RlLT5pX2Jsa2JpdHMpOworCWN1cl9pbmRleCA9IGxvY2tlZF9wYWdlLT5pbmRleDsKKworCWZvciAoZW5kID0gY291bnQgKyBiZWc7IGJlZyA8IGVuZDsgYmVnID0gKGJlZyB8IG1hc2spICsgMSkgeworCQlpbmRleCA9IGJlZyA+PiAoUEFHRV9DQUNIRV9TSElGVCAtIGlub2RlLT5pX2Jsa2JpdHMpOwogCiAJCWlmIChsaWtlbHkoY3VyX2luZGV4ICE9IGluZGV4KSkgewogCQkJcGFnZSA9IHVmc19nZXRfbG9ja2VkX3BhZ2UobWFwcGluZywgaW5kZXgpOwpAQCAtMjUzLDIxICsyNTYsMzIgQEAKIAkJfSBlbHNlCiAJCQlwYWdlID0gbG9ja2VkX3BhZ2U7CiAKLQkJaiA9IGk7CiAJCWhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CiAJCWJoID0gaGVhZDsKKwkJcG9zID0gYmVnICYgbWFzazsKKwkJZm9yIChqID0gMDsgaiA8IHBvczsgKytqKQorCQkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7CisJCWogPSAwOwogCQlkbyB7Ci0JCQlpZiAobGlrZWx5KGJoLT5iX2Jsb2NrbnIgPT0gaiArIG9sZGIgJiYgaiA8IGNvdW50KSkgewotCQkJCXVubWFwX3VuZGVybHlpbmdfbWV0YWRhdGEoYmgtPmJfYmRldiwKLQkJCQkJCQkgIGJoLT5iX2Jsb2NrbnIpOwotCQkJCWJoLT5iX2Jsb2NrbnIgPSBuZXdiICsgaisrOwotCQkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwkJCWlmIChidWZmZXJfbWFwcGVkKGJoKSkgeworCQkJCXBvcyA9IGJoLT5iX2Jsb2NrbnIgLSBvbGRiOworCQkJCWlmIChwb3MgPCBjb3VudCkgeworCQkJCQlVRlNEKCIgY2hhbmdlIGZyb20gJWxsdSB0byAlbGx1XG4iLAorCQkJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcG9zICsgb2xkYiwKKwkJCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBvcyArIG5ld2IpOworCQkJCQliaC0+Yl9ibG9ja25yID0gbmV3YiArIHBvczsKKwkJCQkJdW5tYXBfdW5kZXJseWluZ19tZXRhZGF0YShiaC0+Yl9iZGV2LAorCQkJCQkJCQkgIGJoLT5iX2Jsb2NrbnIpOworCQkJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJCQkJCSsrajsKKwkJCQl9CiAJCQl9CiAKIAkJCWJoID0gYmgtPmJfdGhpc19wYWdlOwogCQl9IHdoaWxlIChiaCAhPSBoZWFkKTsKIAotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKwkJaWYgKGopCisJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAogCQlpZiAobGlrZWx5KGN1cl9pbmRleCAhPSBpbmRleCkpCiAJCQl1ZnNfcHV0X2xvY2tlZF9wYWdlKHBhZ2UpOwpAQCAtMjc1LDYgKzI4OSwyNSBAQAogCVVGU0QoIkVYSVRcbiIpOwogfQogCitzdGF0aWMgdm9pZCB1ZnNfY2xlYXJfZnJhZ3Moc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmVnLCB1bnNpZ25lZCBpbnQgbiwKKwkJCSAgICBpbnQgc3luYykKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXNlY3Rvcl90IGVuZCA9IGJlZyArIG47CisKKwlmb3IgKDsgYmVnIDwgZW5kOyArK2JlZykgeworCQliaCA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgYmVnKTsKKwkJbG9ja19idWZmZXIoYmgpOworCQltZW1zZXQoYmgtPmJfZGF0YSwgMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKKwkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwkJdW5sb2NrX2J1ZmZlcihiaCk7CisJCWlmIChJU19TWU5DKGlub2RlKSB8fCBzeW5jKQorCQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOworCQlicmVsc2UoYmgpOworCX0KK30KKwogdW5zaWduZWQgdWZzX25ld19mcmFnbWVudHMoc3RydWN0IGlub2RlICogaW5vZGUsIF9fZnMzMiAqIHAsIHVuc2lnbmVkIGZyYWdtZW50LAogCQkJICAgdW5zaWduZWQgZ29hbCwgdW5zaWduZWQgY291bnQsIGludCAqIGVyciwgc3RydWN0IHBhZ2UgKmxvY2tlZF9wYWdlKQogewpAQCAtMzUwLDYgKzM4Myw4IEBACiAJCQkqcCA9IGNwdV90b19mczMyKHNiLCByZXN1bHQpOwogCQkJKmVyciA9IDA7CiAJCQlVRlNfSShpbm9kZSktPmlfbGFzdGZyYWcgPSBtYXhfdCh1MzIsIFVGU19JKGlub2RlKS0+aV9sYXN0ZnJhZywgZnJhZ21lbnQgKyBjb3VudCk7CisJCQl1ZnNfY2xlYXJfZnJhZ3MoaW5vZGUsIHJlc3VsdCArIG9sZGNvdW50LCBuZXdjb3VudCAtIG9sZGNvdW50LAorCQkJCQlsb2NrZWRfcGFnZSAhPSBOVUxMKTsKIAkJfQogCQl1bmxvY2tfc3VwZXIoc2IpOwogCQlVRlNEKCJFWElULCByZXN1bHQgJXVcbiIsIHJlc3VsdCk7CkBAIC0zNjMsNiArMzk4LDggQEAKIAlpZiAocmVzdWx0KSB7CiAJCSplcnIgPSAwOwogCQlVRlNfSShpbm9kZSktPmlfbGFzdGZyYWcgPSBtYXhfdCh1MzIsIFVGU19JKGlub2RlKS0+aV9sYXN0ZnJhZywgZnJhZ21lbnQgKyBjb3VudCk7CisJCXVmc19jbGVhcl9mcmFncyhpbm9kZSwgcmVzdWx0ICsgb2xkY291bnQsIG5ld2NvdW50IC0gb2xkY291bnQsCisJCQkJbG9ja2VkX3BhZ2UgIT0gTlVMTCk7CiAJCXVubG9ja19zdXBlcihzYik7CiAJCVVGU0QoIkVYSVQsIHJlc3VsdCAldVxuIiwgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTM5Miw2ICs0MjksOCBAQAogCX0KIAlyZXN1bHQgPSB1ZnNfYWxsb2NfZnJhZ21lbnRzIChpbm9kZSwgY2dubywgZ29hbCwgcmVxdWVzdCwgZXJyKTsKIAlpZiAocmVzdWx0KSB7CisJCXVmc19jbGVhcl9mcmFncyhpbm9kZSwgcmVzdWx0ICsgb2xkY291bnQsIG5ld2NvdW50IC0gb2xkY291bnQsCisJCQkJbG9ja2VkX3BhZ2UgIT0gTlVMTCk7CiAJCXVmc19jaGFuZ2VfYmxvY2tucihpbm9kZSwgZnJhZ21lbnQgLSBvbGRjb3VudCwgb2xkY291bnQsIHRtcCwKIAkJCQkgICByZXN1bHQsIGxvY2tlZF9wYWdlKTsKIApkaWZmIC0tZ2l0IGEvZnMvdWZzL2Rpci5jIGIvZnMvdWZzL2Rpci5jCmluZGV4IDdmMGEwYWEuLjQzM2I2ZjYgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9kaXIuYworKysgYi9mcy91ZnMvZGlyLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogdWZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7CiAJbG9mZl90IHBvcyA9IGZpbHAtPmZfcG9zOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IHBvcyAmIH5QQUdFX0NBQ0hFX01BU0s7CiAJdW5zaWduZWQgbG9uZyBuID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CmRpZmYgLS1naXQgYS9mcy91ZnMvaW5vZGUuYyBiL2ZzL3Vmcy9pbm9kZS5jCmluZGV4IGVlMWVhYTYuLjQyOTVjYTkgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9pbm9kZS5jCisrKyBiL2ZzL3Vmcy9pbm9kZS5jCkBAIC0xNTYsMzYgKzE1Niw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgdWZzX2NsZWFyX2ZyYWcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKLXsKLQlsb2NrX2J1ZmZlcihiaCk7Ci0JbWVtc2V0KGJoLT5iX2RhdGEsIDAsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7Ci0Jc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7Ci0JbWFya19idWZmZXJfZGlydHkoYmgpOwotCXVubG9ja19idWZmZXIoYmgpOwotCWlmIChJU19TWU5DKGlub2RlKSkKLQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotfQotCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICoKLXVmc19jbGVhcl9mcmFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBiZWcsCi0JCXVuc2lnbmVkIGludCBuLCBzZWN0b3JfdCB3YW50KQotewotCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVzID0gTlVMTCwgKmJoOwotCXNlY3Rvcl90IGVuZCA9IGJlZyArIG47Ci0KLQlmb3IgKDsgYmVnIDwgZW5kOyArK2JlZykgewotCQliaCA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgYmVnKTsKLQkJdWZzX2NsZWFyX2ZyYWcoaW5vZGUsIGJoKTsKLQkJaWYgKHdhbnQgIT0gYmVnKQotCQkJYnJlbHNlKGJoKTsKLQkJZWxzZQotCQkJcmVzID0gYmg7Ci0JfQotCUJVR19PTighcmVzKTsKLQlyZXR1cm4gcmVzOwotfQotCiAvKioKICAqIHVmc19pbm9kZV9nZXRmcmFnKCkgLSBhbGxvY2F0ZSBuZXcgZnJhZ21lbnQocykKICAqIEBpbm9kZSAtIHBvaW50ZXIgdG8gaW5vZGUKQEAgLTI3Miw3ICsyNDIsOCBAQAogCQkJZ29hbCA9IHRtcCArIHVzcGktPnNfZnBiOwogCQl0bXAgPSB1ZnNfbmV3X2ZyYWdtZW50cyAoaW5vZGUsIHAsIGZyYWdtZW50IC0gYmxvY2tvZmYsIAogCQkJCQkgZ29hbCwgcmVxdWlyZWQgKyBibG9ja29mZiwKLQkJCQkJIGVyciwgbG9ja2VkX3BhZ2UpOworCQkJCQkgZXJyLAorCQkJCQkgcGh5cyAhPSBOVUxMID8gbG9ja2VkX3BhZ2UgOiBOVUxMKTsKIAl9CiAJLyoKIAkgKiBXZSB3aWxsIGV4dGVuZCBsYXN0IGFsbG9jYXRlZCBibG9jawpAQCAtMjgwLDcgKzI1MSw3IEBACiAJZWxzZSBpZiAobGFzdGJsb2NrID09IGJsb2NrKSB7CiAJCXRtcCA9IHVmc19uZXdfZnJhZ21lbnRzKGlub2RlLCBwLCBmcmFnbWVudCAtIChibG9ja29mZiAtIGxhc3RibG9ja29mZiksCiAJCQkJCWZzMzJfdG9fY3B1KHNiLCAqcCksIHJlcXVpcmVkICsgIChibG9ja29mZiAtIGxhc3RibG9ja29mZiksCi0JCQkJCWVyciwgbG9ja2VkX3BhZ2UpOworCQkJCQllcnIsIHBoeXMgIT0gTlVMTCA/IGxvY2tlZF9wYWdlIDogTlVMTCk7CiAJfSBlbHNlIC8qIChsYXN0YmxvY2sgPiBibG9jaykgKi8gewogCS8qCiAJICogV2Ugd2lsbCBhbGxvY2F0ZSBuZXcgYmxvY2sgYmVmb3JlIGxhc3QgYWxsb2NhdGVkIGJsb2NrCkBAIC0yOTEsNyArMjYyLDggQEAKIAkJCQlnb2FsID0gdG1wICsgdXNwaS0+c19mcGI7CiAJCX0KIAkJdG1wID0gdWZzX25ld19mcmFnbWVudHMoaW5vZGUsIHAsIGZyYWdtZW50IC0gYmxvY2tvZmYsCi0JCQkJCWdvYWwsIHVzcGktPnNfZnBiLCBlcnIsIGxvY2tlZF9wYWdlKTsKKwkJCQkJZ29hbCwgdXNwaS0+c19mcGIsIGVyciwKKwkJCQkJcGh5cyAhPSBOVUxMID8gbG9ja2VkX3BhZ2UgOiBOVUxMKTsKIAl9CiAJaWYgKCF0bXApIHsKIAkJaWYgKCghYmxvY2tvZmYgJiYgKnApIHx8IApAQCAtMzAyLDcgKzI3NCw3IEBACiAJfQogCiAJaWYgKCFwaHlzKSB7Ci0JCXJlc3VsdCA9IHVmc19jbGVhcl9mcmFncyhpbm9kZSwgdG1wLCByZXF1aXJlZCwgdG1wICsgYmxvY2tvZmYpOworCQlyZXN1bHQgPSBzYl9nZXRibGsoc2IsIHRtcCArIGJsb2Nrb2ZmKTsKIAl9IGVsc2UgewogCQkqcGh5cyA9IHRtcCArIGJsb2Nrb2ZmOwogCQlyZXN1bHQgPSBOVUxMOwpAQCAtNDAzLDggKzM3NSw3IEBACiAKIAogCWlmICghcGh5cykgewotCQlyZXN1bHQgPSB1ZnNfY2xlYXJfZnJhZ3MoaW5vZGUsIHRtcCwgdXNwaS0+c19mcGIsCi0JCQkJCSB0bXAgKyBibG9ja29mZik7CisJCXJlc3VsdCA9IHNiX2dldGJsayhzYiwgdG1wICsgYmxvY2tvZmYpOwogCX0gZWxzZSB7CiAJCSpwaHlzID0gdG1wICsgYmxvY2tvZmY7CiAJCSpuZXcgPSAxOwpAQCAtNDY5LDE1ICs0NDAsMTcgQEAKIAkgKiBpdCBtdWNoIG1vcmUgcmVhZGFibGU6CiAJICovCiAjZGVmaW5lIEdFVF9JTk9ERV9EQVRBQkxPQ0soeCkgXAotCXVmc19pbm9kZV9nZXRmcmFnKGlub2RlLCB4LCBmcmFnbWVudCwgMSwgJmVyciwgJnBoeXMsICZuZXcsIGJoX3Jlc3VsdC0+Yl9wYWdlKQorCXVmc19pbm9kZV9nZXRmcmFnKGlub2RlLCB4LCBmcmFnbWVudCwgMSwgJmVyciwgJnBoeXMsICZuZXcsXAorCQkJICBiaF9yZXN1bHQtPmJfcGFnZSkKICNkZWZpbmUgR0VUX0lOT0RFX1BUUih4KSBcCi0JdWZzX2lub2RlX2dldGZyYWcoaW5vZGUsIHgsIGZyYWdtZW50LCB1c3BpLT5zX2ZwYiwgJmVyciwgTlVMTCwgTlVMTCwgYmhfcmVzdWx0LT5iX3BhZ2UpCisJdWZzX2lub2RlX2dldGZyYWcoaW5vZGUsIHgsIGZyYWdtZW50LCB1c3BpLT5zX2ZwYiwgJmVyciwgTlVMTCwgTlVMTCxcCisJCQkgIGJoX3Jlc3VsdC0+Yl9wYWdlKQogI2RlZmluZSBHRVRfSU5ESVJFQ1RfREFUQUJMT0NLKHgpIFwKIAl1ZnNfaW5vZGVfZ2V0YmxvY2soaW5vZGUsIGJoLCB4LCBmcmFnbWVudCwJXAotCQkJICAmZXJyLCAmcGh5cywgJm5ldywgYmhfcmVzdWx0LT5iX3BhZ2UpOworCQkJICAmZXJyLCAmcGh5cywgJm5ldywgYmhfcmVzdWx0LT5iX3BhZ2UpCiAjZGVmaW5lIEdFVF9JTkRJUkVDVF9QVFIoeCkgXAogCXVmc19pbm9kZV9nZXRibG9jayhpbm9kZSwgYmgsIHgsIGZyYWdtZW50LAlcCi0JCQkgICZlcnIsIE5VTEwsIE5VTEwsIGJoX3Jlc3VsdC0+Yl9wYWdlKTsKKwkJCSAgJmVyciwgTlVMTCwgTlVMTCwgTlVMTCkKIAogCWlmIChwdHIgPCBVRlNfTkRJUl9GUkFHTUVOVCkgewogCQliaCA9IEdFVF9JTk9ERV9EQVRBQkxPQ0socHRyKTsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy90cnVuY2F0ZS5jIGIvZnMvdWZzL3RydW5jYXRlLmMKaW5kZXggZWExMWQwNC4uMDQzN2IwYSAxMDA2NDQKLS0tIGEvZnMvdWZzL3RydW5jYXRlLmMKKysrIGIvZnMvdWZzL3RydW5jYXRlLmMKQEAgLTEwOSwxMCArMTA5LDEwIEBACiAJdG1wID0gZnMzMl90b19jcHUoc2IsICpwKTsKIAlpZiAoIXRtcCApCiAJCXVmc19wYW5pYyAoc2IsICJ1ZnNfdHJ1bmNfZGlyZWN0IiwgImludGVybmFsIGVycm9yIik7CisJZnJhZzIgLT0gZnJhZzE7CiAJZnJhZzEgPSB1ZnNfZnJhZ251bSAoZnJhZzEpOwotCWZyYWcyID0gdWZzX2ZyYWdudW0gKGZyYWcyKTsKIAotCXVmc19mcmVlX2ZyYWdtZW50cyAoaW5vZGUsIHRtcCArIGZyYWcxLCBmcmFnMiAtIGZyYWcxKTsKKwl1ZnNfZnJlZV9mcmFnbWVudHMoaW5vZGUsIHRtcCArIGZyYWcxLCBmcmFnMik7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJZnJhZ190b19mcmVlID0gdG1wICsgZnJhZzE7CiAKZGlmZiAtLWdpdCBhL2ZzL3hhdHRyLmMgYi9mcy94YXR0ci5jCmluZGV4IDA5MDFiZGMuLjM4NjQ2MTMgMTAwNjQ0Ci0tLSBhL2ZzL3hhdHRyLmMKKysrIGIvZnMveGF0dHIuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJZiA9IGZnZXQoZmQpOwogCWlmICghZikKIAkJcmV0dXJuIGVycm9yOwotCWRlbnRyeSA9IGYtPmZfZGVudHJ5OworCWRlbnRyeSA9IGYtPmZfcGF0aC5kZW50cnk7CiAJYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5LT5kX2lub2RlKTsKIAllcnJvciA9IHNldHhhdHRyKGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIAlmcHV0KGYpOwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJZiA9IGZnZXQoZmQpOwogCWlmICghZikKIAkJcmV0dXJuIGVycm9yOwotCWVycm9yID0gZ2V0eGF0dHIoZi0+Zl9kZW50cnksIG5hbWUsIHZhbHVlLCBzaXplKTsKKwllcnJvciA9IGdldHhhdHRyKGYtPmZfcGF0aC5kZW50cnksIG5hbWUsIHZhbHVlLCBzaXplKTsKIAlmcHV0KGYpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTQyMyw3ICs0MjMsNyBAQAogCWYgPSBmZ2V0KGZkKTsKIAlpZiAoIWYpCiAJCXJldHVybiBlcnJvcjsKLQllcnJvciA9IGxpc3R4YXR0cihmLT5mX2RlbnRyeSwgbGlzdCwgc2l6ZSk7CisJZXJyb3IgPSBsaXN0eGF0dHIoZi0+Zl9wYXRoLmRlbnRyeSwgbGlzdCwgc2l6ZSk7CiAJZnB1dChmKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC00ODQsNyArNDg0LDcgQEAKIAlmID0gZmdldChmZCk7CiAJaWYgKCFmKQogCQlyZXR1cm4gZXJyb3I7Ci0JZGVudHJ5ID0gZi0+Zl9kZW50cnk7CisJZGVudHJ5ID0gZi0+Zl9wYXRoLmRlbnRyeTsKIAlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnktPmRfaW5vZGUpOwogCWVycm9yID0gcmVtb3ZleGF0dHIoZGVudHJ5LCBuYW1lKTsKIAlmcHV0KGYpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCmluZGV4IDhlNmI1NmYuLjdiNTQ0NjEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKQEAgLTM0MSw5ICszNDEsOSBAQAogewogCUFTU0VSVChQYWdlTG9ja2VkKHBhZ2UpKTsKIAlBU1NFUlQoIVBhZ2VXcml0ZWJhY2socGFnZSkpOwotCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAlpZiAoY2xlYXJfZGlydHkpCi0JCWNsZWFyX3BhZ2VfZGlydHkocGFnZSk7CisJCWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpOworCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlpZiAoIWJ1ZmZlcnMpIHsKIAkJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwpAQCAtMTQwNiw3ICsxNDA2LDcgQEAKIAkJCXhmc19lbmRfaW9fZGlyZWN0KTsKIAl9CiAKLQlpZiAodW5saWtlbHkocmV0IDw9IDAgJiYgaW9jYi0+cHJpdmF0ZSkpCisJaWYgKHVubGlrZWx5KHJldCAhPSAtRUlPQ0JRVUVVRUQgJiYgaW9jYi0+cHJpdmF0ZSkpCiAJCXhmc19kZXN0cm95X2lvZW5kKGlvY2ItPnByaXZhdGUpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKaW5kZXggZDkzZDhkZC4uZDI2ZjVjZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwpAQCAtNTUsNyArNTUsNyBAQAogCWxvZmZfdAkJCXBvcykKIHsKIAlzdHJ1Y3QgZmlsZQkJKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCWJodl92bm9kZV90CQkqdnAgPSB2bl9mcm9tX2lub2RlKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwliaHZfdm5vZGVfdAkJKnZwID0gdm5fZnJvbV9pbm9kZShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAogCUJVR19PTihpb2NiLT5raV9wb3MgIT0gcG9zKTsKIAlpZiAodW5saWtlbHkoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSkKQEAgLTEzMSw3ICsxMzEsNyBAQAogCXJlYWRfYWN0b3JfdAkJYWN0b3IsCiAJdm9pZAkJCSp0YXJnZXQpCiB7Ci0JcmV0dXJuIGJodl92b3Bfc2VuZGZpbGUodm5fZnJvbV9pbm9kZShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSksCisJcmV0dXJuIGJodl92b3Bfc2VuZGZpbGUodm5fZnJvbV9pbm9kZShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSwKIAkJCQlmaWxwLCBwb3MsIDAsIGNvdW50LCBhY3RvciwgdGFyZ2V0LCBOVUxMKTsKIH0KIApAQCAtMTQzLDcgKzE0Myw3IEBACiAJcmVhZF9hY3Rvcl90CQlhY3RvciwKIAl2b2lkCQkJKnRhcmdldCkKIHsKLQlyZXR1cm4gYmh2X3ZvcF9zZW5kZmlsZSh2bl9mcm9tX2lub2RlKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKSwKKwlyZXR1cm4gYmh2X3ZvcF9zZW5kZmlsZSh2bl9mcm9tX2lub2RlKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLAogCQkJCWZpbHAsIHBvcywgSU9fSU5WSVMsIGNvdW50LCBhY3RvciwgdGFyZ2V0LCBOVUxMKTsKIH0KIApAQCAtMTU1LDcgKzE1NSw3IEBACiAJc2l6ZV90CQkJbGVuLAogCXVuc2lnbmVkIGludAkJZmxhZ3MpCiB7Ci0JcmV0dXJuIGJodl92b3Bfc3BsaWNlX3JlYWQodm5fZnJvbV9pbm9kZShpbmZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKSwKKwlyZXR1cm4gYmh2X3ZvcF9zcGxpY2VfcmVhZCh2bl9mcm9tX2lub2RlKGluZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSksCiAJCQkJICAgaW5maWxwLCBwcG9zLCBwaXBlLCBsZW4sIGZsYWdzLCAwLCBOVUxMKTsKIH0KIApAQCAtMTY3LDcgKzE2Nyw3IEBACiAJc2l6ZV90CQkJbGVuLAogCXVuc2lnbmVkIGludAkJZmxhZ3MpCiB7Ci0JcmV0dXJuIGJodl92b3Bfc3BsaWNlX3JlYWQodm5fZnJvbV9pbm9kZShpbmZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKSwKKwlyZXR1cm4gYmh2X3ZvcF9zcGxpY2VfcmVhZCh2bl9mcm9tX2lub2RlKGluZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSksCiAJCQkJICAgaW5maWxwLCBwcG9zLCBwaXBlLCBsZW4sIGZsYWdzLCBJT19JTlZJUywKIAkJCQkgICBOVUxMKTsKIH0KQEAgLTE4MCw3ICsxODAsNyBAQAogCXNpemVfdAkJCWxlbiwKIAl1bnNpZ25lZCBpbnQJCWZsYWdzKQogewotCXJldHVybiBiaHZfdm9wX3NwbGljZV93cml0ZSh2bl9mcm9tX2lub2RlKG91dGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKSwKKwlyZXR1cm4gYmh2X3ZvcF9zcGxpY2Vfd3JpdGUodm5fZnJvbV9pbm9kZShvdXRmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSwKIAkJCQkgICAgcGlwZSwgb3V0ZmlscCwgcHBvcywgbGVuLCBmbGFncywgMCwgTlVMTCk7CiB9CiAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXNpemVfdAkJCWxlbiwKIAl1bnNpZ25lZCBpbnQJCWZsYWdzKQogewotCXJldHVybiBiaHZfdm9wX3NwbGljZV93cml0ZSh2bl9mcm9tX2lub2RlKG91dGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKSwKKwlyZXR1cm4gYmh2X3ZvcF9zcGxpY2Vfd3JpdGUodm5fZnJvbV9pbm9kZShvdXRmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSwKIAkJCQkgICAgcGlwZSwgb3V0ZmlscCwgcHBvcywgbGVuLCBmbGFncywgSU9fSU5WSVMsCiAJCQkJICAgIE5VTEwpOwogfQpAQCAtMjEyLDcgKzIxMiw3IEBACiAJc3RydWN0IGZpbGUJKmZpbHAsCiAJZmxfb3duZXJfdAlpZCkKIHsKLQlyZXR1cm4gLWJodl92b3BfY2xvc2Uodm5fZnJvbV9pbm9kZShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSksIDAsCisJcmV0dXJuIC1iaHZfdm9wX2Nsb3NlKHZuX2Zyb21faW5vZGUoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSksIDAsCiAJCQkJZmlsZV9jb3VudChmaWxwKSA+IDEgPyBMX0ZBTFNFIDogTF9UUlVFLCBOVUxMKTsKIH0KIApAQCAtMjUxLDcgKzI1MSw3IEBACiAJdW5zaWduZWQgbG9uZwkJYWRkcmVzcywKIAlpbnQJCQkqdHlwZSkKIHsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gYXJlYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IGFyZWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJYmh2X3Zub2RlX3QJKnZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7CiAKIAlBU1NFUlRfQUxXQVlTKHZwLT52X3Zmc3AtPnZmc19mbGFnICYgVkZTX0RNSSk7CkBAIC0yNjgsNyArMjY4LDcgQEAKIAlmaWxsZGlyX3QJZmlsbGRpcikKIHsKIAlpbnQJCWVycm9yID0gMDsKLQliaHZfdm5vZGVfdAkqdnAgPSB2bl9mcm9tX2lub2RlKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwliaHZfdm5vZGVfdAkqdnAgPSB2bl9mcm9tX2lub2RlKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXVpb190CQl1aW87CiAJaW92ZWNfdAkJaW92OwogCWludAkJZW9mID0gMDsKQEAgLTM0NSw3ICszNDUsNyBAQAogCXZtYS0+dm1fb3BzID0gJnhmc19maWxlX3ZtX29wczsKIAogI2lmZGVmIENPTkZJR19YRlNfRE1BUEkKLQlpZiAodm5fZnJvbV9pbm9kZShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSktPnZfdmZzcC0+dmZzX2ZsYWcgJiBWRlNfRE1JKQorCWlmICh2bl9mcm9tX2lub2RlKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT52X3Zmc3AtPnZmc19mbGFnICYgVkZTX0RNSSkKIAkJdm1hLT52bV9vcHMgPSAmeGZzX2RtYXBpX2ZpbGVfdm1fb3BzOwogI2VuZGlmIC8qIENPTkZJR19YRlNfRE1BUEkgKi8KIApAQCAtMzYwLDcgKzM2MCw3IEBACiAJdW5zaWduZWQgbG9uZwlwKQogewogCWludAkJZXJyb3I7Ci0Jc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWJodl92bm9kZV90CSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOwogCiAJZXJyb3IgPSBiaHZfdm9wX2lvY3RsKHZwLCBpbm9kZSwgZmlscCwgMCwgY21kLCAodm9pZCBfX3VzZXIgKilwKTsKQEAgLTM4Miw3ICszODIsNyBAQAogCXVuc2lnbmVkIGxvbmcJcCkKIHsKIAlpbnQJCWVycm9yOwotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAliaHZfdm5vZGVfdAkqdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKIAogCWVycm9yID0gYmh2X3ZvcF9pb2N0bCh2cCwgaW5vZGUsIGZpbHAsIElPX0lOVklTLCBjbWQsICh2b2lkIF9fdXNlciAqKXApOwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJdW5zaWduZWQgaW50CW5ld2ZsYWdzKQogewotCWJodl92bm9kZV90CSp2cCA9IHZuX2Zyb21faW5vZGUodm1hLT52bV9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJYmh2X3Zub2RlX3QJKnZwID0gdm5fZnJvbV9pbm9kZSh2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWludAkJZXJyb3IgPSAwOwogCiAJaWYgKHZwLT52X3Zmc3AtPnZmc19mbGFnICYgVkZTX0RNSSkgewpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKaW5kZXggNzRkMDk0ODIuLmYwMTFjOWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtMTA3LDkgKzEwNyw5IEBACiAJCWlmICghZmlsZSkKIAkJICAgIHJldHVybiAtRUJBREY7CiAKLQkJQVNTRVJUKGZpbGUtPmZfZGVudHJ5KTsKLQkJQVNTRVJUKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKLQkJaW5vZGUgPSBpZ3JhYihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCUFTU0VSVChmaWxlLT5mX3BhdGguZGVudHJ5KTsKKwkJQVNTRVJUKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCQlpbm9kZSA9IGlncmFiKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCQlmcHV0KGZpbGUpOwogCQlicmVhazsKIAl9CkBAIC0zMzMsMTAgKzMzMywxMCBAQAogCX0KIAogCS8qIEVuc3VyZSB1bW91bnQgcmV0dXJucyBFQlVTWSBvbiB1bW91bnRzIHdoaWxlIHRoaXMgZmlsZSBpcyBvcGVuLiAqLwotCW1udGdldChwYXJmaWxwLT5mX3Zmc21udCk7CisJbW50Z2V0KHBhcmZpbHAtPmZfcGF0aC5tbnQpOwogCiAJLyogQ3JlYXRlIGZpbGUgcG9pbnRlci4gKi8KLQlmaWxwID0gZGVudHJ5X29wZW4oZGVudHJ5LCBwYXJmaWxwLT5mX3Zmc21udCwgaHJlcS5vZmxhZ3MpOworCWZpbHAgPSBkZW50cnlfb3BlbihkZW50cnksIHBhcmZpbHAtPmZfcGF0aC5tbnQsIGhyZXEub2ZsYWdzKTsKIAlpZiAoSVNfRVJSKGZpbHApKSB7CiAJCXB1dF91bnVzZWRfZmQobmV3X2ZkKTsKIAkJcmV0dXJuIC1YRlNfRVJST1IoLVBUUl9FUlIoZmlscCkpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jCmluZGV4IDI3MGRiMGYuLmI4M2NlYmMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCXVuc2lnbmVkCWNtZCwKIAl1bnNpZ25lZCBsb25nCWFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJYmh2X3Zub2RlX3QJKnZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7CiAJaW50CQllcnJvcjsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuYwppbmRleCBmYTg0MmYxLi42NWU3OWI0IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuYwpAQCAtODA1LDcgKzgwNSw3IEBACiAJICAgICAhY2FwYWJsZShDQVBfRlNFVElEKSkgewogCQllcnJvciA9IHhmc193cml0ZV9jbGVhcl9zZXR1aWQoeGlwKTsKIAkJaWYgKGxpa2VseSghZXJyb3IpKQotCQkJZXJyb3IgPSAtcmVtb3ZlX3N1aWQoZmlsZS0+Zl9kZW50cnkpOworCQkJZXJyb3IgPSAtcmVtb3ZlX3N1aWQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJCWlmICh1bmxpa2VseShlcnJvcikpIHsKIAkJCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKIAkJCWdvdG8gb3V0X3VubG9ja19tdXRleDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCA4MDU2MmI2Li41MGQwZmFlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC03MSw3ICs3MSw3IEBACiAKIAkvKiBQdWxsIGluZm9ybWF0aW9uIGZvciB0aGUgdGFyZ2V0IGZkICovCiAJaWYgKCgoZnAgPSBmZ2V0KChpbnQpc3hwLT5zeF9mZHRhcmdldCkpID09IE5VTEwpIHx8Ci0JICAgICgodnAgPSB2bl9mcm9tX2lub2RlKGZwLT5mX2RlbnRyeS0+ZF9pbm9kZSkpID09IE5VTEwpKSAgeworCSAgICAoKHZwID0gdm5fZnJvbV9pbm9kZShmcC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpID09IE5VTEwpKSAgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwogCQlnb3RvIGVycm9yMDsKIAl9CkBAIC04Myw3ICs4Myw3IEBACiAJfQogCiAJaWYgKCgodGZwID0gZmdldCgoaW50KXN4cC0+c3hfZmR0bXApKSA9PSBOVUxMKSB8fAotCSAgICAoKHR2cCA9IHZuX2Zyb21faW5vZGUodGZwLT5mX2RlbnRyeS0+ZF9pbm9kZSkpID09IE5VTEwpKSB7CisJICAgICgodHZwID0gdm5fZnJvbV9pbm9kZSh0ZnAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKSA9PSBOVUxMKSkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwogCQlnb3RvIGVycm9yMDsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNjb25maWcuaCBiL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oCmluZGV4IDllNmMyM2MuLmViYzFmNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2NvbmZpZy5oCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogLyogTWF4aW11bSBvYmplY3QgcmVmZXJlbmNlIGNvdW50IChkZXRlY3RzIG9iamVjdCBkZWxldGlvbiBpc3N1ZXMpICovCiAKLSNkZWZpbmUgQUNQSV9NQVhfUkVGRVJFTkNFX0NPVU5UICAgICAgICAweDgwMAorI2RlZmluZSBBQ1BJX01BWF9SRUZFUkVOQ0VfQ09VTlQgICAgICAgIDB4MTAwMAogCiAvKiBTaXplIG9mIGNhY2hlZCBtZW1vcnkgbWFwcGluZyBmb3Igc3lzdGVtIG1lbW9yeSBvcGVyYXRpb24gcmVnaW9uICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAppbmRleCAwNDllOWFhLi44MTQ1ODc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCkBAIC05NywxMSArOTcsMTIgQEAKIAogYWNwaV9zdGF0dXMgYWNwaV9sb2FkX3RhYmxlcyh2b2lkKTsKIAotI2lmZGVmIEFDUElfRlVUVVJFX1VTQUdFCiBhY3BpX3N0YXR1cyBhY3BpX2xvYWRfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZV9wdHIpOwogCi1hY3BpX3N0YXR1cyBhY3BpX3VubG9hZF90YWJsZShhY3BpX3RhYmxlX3R5cGUgdGFibGVfdHlwZSk7CithY3BpX3N0YXR1cyBhY3BpX3VubG9hZF90YWJsZV9pZChhY3BpX3RhYmxlX3R5cGUgdGFibGVfdHlwZSwgYWNwaV9vd25lcl9pZCBpZCk7CiAKKyNpZmRlZiBBQ1BJX0ZVVFVSRV9VU0FHRQorYWNwaV9zdGF0dXMgYWNwaV91bmxvYWRfdGFibGUoYWNwaV90YWJsZV90eXBlIHRhYmxlX3R5cGUpOwogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X3RhYmxlX2hlYWRlcihhY3BpX3RhYmxlX3R5cGUgdGFibGVfdHlwZSwKIAkJICAgICAgdTMyIGluc3RhbmNlLCBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKm91dF90YWJsZV9oZWFkZXIpOwpAQCAtMTgwLDYgKzE4MSw4IEBACiAKIGFjcGlfc3RhdHVzIGFjcGlfZ2V0X3R5cGUoYWNwaV9oYW5kbGUgb2JqZWN0LCBhY3BpX29iamVjdF90eXBlICogb3V0X3R5cGUpOwogCithY3BpX3N0YXR1cyBhY3BpX2dldF9pZChhY3BpX2hhbmRsZSBvYmplY3QsIGFjcGlfb3duZXJfaWQgKiBvdXRfdHlwZSk7CisKIGFjcGlfc3RhdHVzIGFjcGlfZ2V0X3BhcmVudChhY3BpX2hhbmRsZSBvYmplY3QsIGFjcGlfaGFuZGxlICogb3V0X2hhbmRsZSk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZWZsdXNoLmgKaW5kZXggODA1NjQwYi4uYjY4NmNjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlZmx1c2guaApAQCAtNiw2ICs2LDcgQEAKIC8qIENhY2hlcyBhcmVuJ3QgYnJhaW4tZGVhZCBvbiB0aGUgQWxwaGEuICovCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZG1hLW1hcHBpbmcuaAppbmRleCA1N2UwOWY1Li43NWExYWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2RtYS1tYXBwaW5nLmgKQEAgLTQxLDkgKzQxLDkgQEAKICNkZWZpbmUgZG1hX21hcF9zaW5nbGUoZGV2LCB2YSwgc2l6ZSwgZGlyKQl2aXJ0X3RvX3BoeXModmEpCiAjZGVmaW5lIGRtYV9tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZiwgc2l6ZSwgZGlyKQkocGFnZV90b19wYShwYWdlKSArIG9mZikKIAotI2RlZmluZSBkbWFfdW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGRtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGRtYV91bm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRtYV91bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXIpCSgodm9pZCkwKQorI2RlZmluZSBkbWFfdW5tYXBfcGFnZShkZXYsIGFkZHIsIHNpemUsIGRpcikJKCh2b2lkKTApCisjZGVmaW5lIGRtYV91bm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyKQkoKHZvaWQpMCkKIAogI2RlZmluZSBkbWFfbWFwcGluZ19lcnJvcihhZGRyKSAgKDApCiAKQEAgLTU1LDEyICs1NSwxNCBAQAogCiBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spOwogCi0jZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgYWRkciwgc2l6ZSwgZGlyKQkgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBhZGRyLCBzaXplLCBkaXIpICBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9yYW5nZShkZXYsIGFkZHIsIG9mZiwgc2l6ZSwgZGlyKSAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBkbWFfc3luY19zZ19mb3JfY3B1KGRldiwgc2csIG5lbnRzLCBkaXIpCSAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBkbWFfc3luY19zZ19mb3JfZGV2aWNlKGRldiwgc2csIG5lbnRzLCBkaXIpCSAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBkbWFfY2FjaGVfc3luYyhkZXYsIHZhLCBzaXplLCBkaXIpCQkgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBhZGRyLCBzaXplLCBkaXIpCSAgKCh2b2lkKTApCisjZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgYWRkciwgc2l6ZSwgZGlyKSAgKCh2b2lkKTApCisjZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9yYW5nZShkZXYsIGFkZHIsIG9mZiwgc2l6ZSwgZGlyKSAgKCh2b2lkKTApCisjZGVmaW5lIGRtYV9zeW5jX3NnX2Zvcl9jcHUoZGV2LCBzZywgbmVudHMsIGRpcikJICAoKHZvaWQpMCkKKyNkZWZpbmUgZG1hX3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnLCBuZW50cywgZGlyKQkgICgodm9pZCkwKQorI2RlZmluZSBkbWFfY2FjaGVfc3luYyhkZXYsIHZhLCBzaXplLCBkaXIpCQkgICgodm9pZCkwKQorI2RlZmluZSBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShkZXYsIGFkZHIsIG9mZnNldCwgc2l6ZSwgZGlyKQkoKHZvaWQpMCkKKyNkZWZpbmUgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoZGV2LCBhZGRyLCBvZmZzZXQsIHNpemUsIGRpcikJKCh2b2lkKTApCiAKICNkZWZpbmUgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKQkJCSAgTDFfQ0FDSEVfQllURVMKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3Bvc2l4X3R5cGVzLmgKaW5kZXggYzc4YzA0YS4uZGIxNjc0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvcG9zaXhfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9wb3NpeF90eXBlcy5oCkBAIC00OSw3ICs0OSw3IEBACiAjZGVmaW5lCV9fRkRfQ0xSKGQsIHNldCkJKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSAmPSB+X19GRE1BU0soZCkpCiAjZGVmaW5lCV9fRkRfSVNTRVQoZCwgc2V0KQkoKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSAmIF9fRkRNQVNLKGQpKSAhPSAwKQogI2RlZmluZQlfX0ZEX1pFUk8oc2V0KQlcCi0gICgodm9pZCkgbWVtc2V0ICgoX19wdHJfdCkgKHNldCksIDAsIHNpemVvZiAoX19rZXJuZWxfZmRfc2V0KSkpCisgICgodm9pZCkgbWVtc2V0ICgodm9pZCAqKSAoc2V0KSwgMCwgc2l6ZW9mIChfX2tlcm5lbF9mZF9zZXQpKSkKIAogI2Vsc2UgLyogX19HTlVDX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3Rlcm1iaXRzLmgKaW5kZXggNTU0MTEwMS4uYWQ4NTRhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS90ZXJtYml0cy5oCkBAIC0yNSw2ICsyNSwxOSBAQAogCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KIH07CiAKKy8qIEFscGhhIGhhcyBtYXRjaGluZyB0ZXJtaW9zIGFuZCBrdGVybWlvcyAqLworCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICg9PSBjX2NjWzE5XSkgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCiAvKiBjX2NjIGNoYXJhY3RlcnMgKi8KICNkZWZpbmUgVkVPRiAwCiAjZGVmaW5lIFZFT0wgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaAppbmRleCA4NDMxM2QxLi5lNThhNDI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaApAQCAtMzQyLDkgKzM0MiwxNCBAQAogI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCTQwMgogI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAJCQk0MDUKICNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZQkJNDA2Ci0jZGVmaW5lIF9fTlJfc3lzX2Vwb2xsX2NyZWF0ZQkJNDA3Ci0jZGVmaW5lIF9fTlJfc3lzX2Vwb2xsX2N0bAkJNDA4Ci0jZGVmaW5lIF9fTlJfc3lzX2Vwb2xsX3dhaXQJCTQwOQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZQkJNDA3CisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsCQkJNDA4CisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJCTQwOQorLyogRmViIDIwMDc6IFRoZXNlIHRocmVlIHN5c19lcG9sbCBkZWZpbmVzIHNob3VsZG4ndCBiZSBoZXJlIGJ1dCBjdWxsaW5nCisgKiB0aGVtIHdvdWxkIGJyZWFrIHVzZXJzcGFjZSBhcHBzIC4uLiB3ZSdsbCBraWxsIHRoZW0gb2ZmIGluIDIwMTAgOikgKi8KKyNkZWZpbmUgX19OUl9zeXNfZXBvbGxfY3JlYXRlCQlfX05SX2Vwb2xsX2NyZWF0ZQorI2RlZmluZSBfX05SX3N5c19lcG9sbF9jdGwJCV9fTlJfZXBvbGxfY3RsCisjZGVmaW5lIF9fTlJfc3lzX2Vwb2xsX3dhaXQJCV9fTlJfZXBvbGxfd2FpdAogI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJCTQxMAogI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcwkJNDExCiAjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsCQk0MTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9lY2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9lY2MuaAppbmRleCBmZGRmMjU2Li41YzU2NGVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfZWNjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX2VjYy5oCkBAIC0xNCw3ICsxNCw3IEBACiAjZGVmaW5lIEFUOTFfRUNDX0gKIAogI2RlZmluZSBBVDkxX0VDQ19DUgkJKEFUOTFfRUNDICsgMHgwMCkJLyogQ29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9FQ0NfUlNUCQkoMSA8PCAwKSAJCS8qIFJlc2V0IHBhcml0eSAqLworI2RlZmluZQkJQVQ5MV9FQ0NfUlNUCQkoMSA8PCAwKQkJLyogUmVzZXQgcGFyaXR5ICovCiAKICNkZWZpbmUgQVQ5MV9FQ0NfTVIJCShBVDkxX0VDQyArIDB4MDQpCS8qIE1vZGUgcmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfRUNDX1BBR0VTSVpFCSgzIDw8IDApCQkvKiBQYWdlIFNpemUgKi8KQEAgLTIzLDE2ICsyMywxNiBAQAogI2RlZmluZQkJCUFUOTFfRUNDX1BBR0VTSVpFXzIxMTIJCSgyKQogI2RlZmluZQkJCUFUOTFfRUNDX1BBR0VTSVpFXzQyMjQJCSgzKQogCi0jZGVmaW5lIEFUOTFfRUNDX1NSCQkoQVQ5MV9FQ0MgKyAweDA4KSAJLyogU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfRUNDX1NSCQkoQVQ5MV9FQ0MgKyAweDA4KQkvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfRUNDX1JFQ0VSUgkJKDEgPDwgMCkJCS8qIFJlY292ZXJhYmxlIEVycm9yICovCiAjZGVmaW5lCQlBVDkxX0VDQ19FQ0NFUlIJCSgxIDw8IDEpCQkvKiBFQ0MgU2luZ2xlIEJpdCBFcnJvciAqLwogI2RlZmluZQkJQVQ5MV9FQ0NfTVVMRVJSCQkoMSA8PCAyKQkJLyogTXVsdGlwbGUgRXJyb3JzICovCiAKLSNkZWZpbmUgQVQ5MV9FQ0NfUFIJCShBVDkxX0VDQyArIDB4MGMpIAkvKiBQYXJpdHkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVQ5MV9FQ0NfUFIJCShBVDkxX0VDQyArIDB4MGMpCS8qIFBhcml0eSByZWdpc3RlciAqLwogI2RlZmluZQkJQVQ5MV9FQ0NfQklUQUREUgkoMHhmIDw8IDApCQkvKiBCaXQgRXJyb3IgQWRkcmVzcyAqLwogI2RlZmluZQkJQVQ5MV9FQ0NfV09SREFERFIJKDB4ZmZmIDw8IDQpCQkvKiBXb3JkIEVycm9yIEFkZHJlc3MgKi8KIAotI2RlZmluZSBBVDkxX0VDQ19OUFIJCShBVDkxX0VDQyArIDB4MTApIAkvKiBOUGFyaXR5IHJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfRUNDX05QUgkJKEFUOTFfRUNDICsgMHgxMCkJLyogTlBhcml0eSByZWdpc3RlciAqLwogI2RlZmluZQkJQVQ5MV9FQ0NfTlBBUklUWQkoMHhmZmZmIDw8IDApCQkvKiBOUGFyaXR5ICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3BtYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3BtYy5oCmluZGV4IGRlOGMzZGEuLmMzYjQ4OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9wbWMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcG1jLmgKQEAgLTYxLDcgKzYxLDcgQEAKICNkZWZpbmUJCQlBVDkxX1BNQ19DU1NfUExMQQkJKDIgPDwgMCkKICNkZWZpbmUJCQlBVDkxX1BNQ19DU1NfUExMQgkJKDMgPDwgMCkKICNkZWZpbmUJCUFUOTFfUE1DX1BSRVMJCSg3IDw8ICAyKQkJLyogTWFzdGVyIENsb2NrIFByZXNjYWxlciAqLwotI2RlZmluZSAJCUFUOTFfUE1DX1BSRVNfMQkJCSgwIDw8IDIpCisjZGVmaW5lCQkJQVQ5MV9QTUNfUFJFU18xCQkJKDAgPDwgMikKICNkZWZpbmUJCQlBVDkxX1BNQ19QUkVTXzIJCQkoMSA8PCAyKQogI2RlZmluZQkJCUFUOTFfUE1DX1BSRVNfNAkJCSgyIDw8IDIpCiAjZGVmaW5lCQkJQVQ5MV9QTUNfUFJFU184CQkJKDMgPDwgMikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9yc3RjLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcnN0Yy5oCmluZGV4IGNjZGM1MmQuLjIzN2QzYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9yc3RjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3JzdGMuaApAQCAtMTcsNyArMTcsNyBAQAogI2RlZmluZQkJQVQ5MV9SU1RDX1BST0NSU1QJKDEgPDwgMCkJCS8qIFByb2Nlc3NvciBSZXNldCAqLwogI2RlZmluZQkJQVQ5MV9SU1RDX1BFUlJTVAkoMSA8PCAyKQkJLyogUGVyaXBoZXJhbCBSZXNldCAqLwogI2RlZmluZQkJQVQ5MV9SU1RDX0VYVFJTVAkoMSA8PCAzKQkJLyogRXh0ZXJuYWwgUmVzZXQgKi8KLSNkZWZpbmUJCUFUMDFfUlNUQ19LRVkJCSgweGZmIDw8IDI0KQkJLyogS0VZIFBhc3N3b3JkICovCisjZGVmaW5lCQlBVDkxX1JTVENfS0VZCQkoMHhmZiA8PCAyNCkJCS8qIEtFWSBQYXNzd29yZCAqLwogCiAjZGVmaW5lIEFUOTFfUlNUQ19TUgkJKEFUOTFfUlNUQyArIDB4MDQpCS8qIFJlc2V0IENvbnRyb2xsZXIgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX1JTVENfVVJTVFMJCSgxIDw8IDApCQkvKiBVc2VyIFJlc2V0IFN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3J0Yy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxX3J0Yy5oCmluZGV4IDZlNTA2NWQuLjA5NWZlMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MV9ydGMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFfcnRjLmgKQEAgLTIxLDIxICsyMSwyMSBAQAogI2RlZmluZQkJQVQ5MV9SVENfVVBEQ0FMCQkoMSA8PCAgMSkJCS8qIFVwZGF0ZSBSZXF1ZXN0IENhbGVuZGFyIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX1JUQ19USU1FVlNFTAkoMyA8PCAgOCkJCS8qIFRpbWUgRXZlbnQgU2VsZWN0aW9uICovCiAjZGVmaW5lCQkJQVQ5MV9SVENfVElNRVZTRUxfTUlOVVRFCSgwIDw8IDgpCi0jZGVmaW5lIAkJQVQ5MV9SVENfVElNRVZTRUxfSE9VUgkJKDEgPDwgOCkKLSNkZWZpbmUgCQlBVDkxX1JUQ19USU1FVlNFTF9EQVkyNAkJKDIgPDwgOCkKLSNkZWZpbmUgCQlBVDkxX1JUQ19USU1FVlNFTF9EQVkxMgkJKDMgPDwgOCkKKyNkZWZpbmUJCQlBVDkxX1JUQ19USU1FVlNFTF9IT1VSCQkoMSA8PCA4KQorI2RlZmluZQkJCUFUOTFfUlRDX1RJTUVWU0VMX0RBWTI0CQkoMiA8PCA4KQorI2RlZmluZQkJCUFUOTFfUlRDX1RJTUVWU0VMX0RBWTEyCQkoMyA8PCA4KQogI2RlZmluZQkJQVQ5MV9SVENfQ0FMRVZTRUwJKDMgPDwgMTYpCQkvKiBDYWxlbmRhciBFdmVudCBTZWxlY3Rpb24gKi8KLSNkZWZpbmUgCQlBVDkxX1JUQ19DQUxFVlNFTF9XRUVLCQkoMCA8PCAxNikKLSNkZWZpbmUgCQlBVDkxX1JUQ19DQUxFVlNFTF9NT05USAkJKDEgPDwgMTYpCi0jZGVmaW5lIAkJQVQ5MV9SVENfQ0FMRVZTRUxfWUVBUgkJKDIgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9SVENfQ0FMRVZTRUxfV0VFSwkJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9SVENfQ0FMRVZTRUxfTU9OVEgJCSgxIDw8IDE2KQorI2RlZmluZQkJCUFUOTFfUlRDX0NBTEVWU0VMX1lFQVIJCSgyIDw8IDE2KQogCiAjZGVmaW5lCUFUOTFfUlRDX01SCQkoQVQ5MV9SVEMgKyAweDA0KQkvKiBNb2RlIFJlZ2lzdGVyICovCi0jZGVmaW5lIAlBVDkxX1JUQ19IUk1PRAkJKDEgPDwgIDApCQkvKiAxMi8yNCBIb3VyIE1vZGUgKi8KKyNkZWZpbmUJCQlBVDkxX1JUQ19IUk1PRAkJKDEgPDwgIDApCQkvKiAxMi8yNCBIb3VyIE1vZGUgKi8KIAogI2RlZmluZQlBVDkxX1JUQ19USU1SCQkoQVQ5MV9SVEMgKyAweDA4KQkvKiBUaW1lIFJlZ2lzdGVyICovCiAjZGVmaW5lCQlBVDkxX1JUQ19TRUMJCSgweDdmIDw8ICAwKQkJLyogQ3VycmVudCBTZWNvbmQgKi8KICNkZWZpbmUJCUFUOTFfUlRDX01JTgkJKDB4N2YgPDwgIDgpCQkvKiBDdXJyZW50IE1pbnV0ZSAqLwotI2RlZmluZQkJQVQ5MV9SVENfSE9VUiAJCSgweDNmIDw8IDE2KQkJLyogQ3VycmVudCBIb3VyICovCisjZGVmaW5lCQlBVDkxX1JUQ19IT1VSCQkoMHgzZiA8PCAxNikJCS8qIEN1cnJlbnQgSG91ciAqLwogI2RlZmluZQkJQVQ5MV9SVENfQU1QTQkJKDEgICAgPDwgMjIpCQkvKiBBbnRlIE1lcmlkaWVtIFBvc3QgTWVyaWRpZW0gSW5kaWNhdG9yICovCiAKICNkZWZpbmUJQVQ5MV9SVENfQ0FMUgkJKEFUOTFfUlRDICsgMHgwYykJLyogQ2FsZW5kYXIgUmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmgKaW5kZXggNGQ1MTE3Ny4uYzU2OWI2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmgKQEAgLTI3NCw3ICsyNzQsNyBAQAogI2RlZmluZSBBVDkxX1BEMTlfVFBLNwkJKDEgPDwgMTkpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCA3ICovCiAjZGVmaW5lIEFUOTFfUEQyMF9OUENTMwkJKDEgPDwgMjApCS8qIEE6IFNQSSBQZXJpcGhlcmFsIENoaXAgU2VsZWN0IDMgKi8KICNkZWZpbmUgQVQ5MV9QRDIwX1RQSzgJCSgxIDw8IDIwKQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgOCAqLwotI2RlZmluZSBBVDkxX1BEMjFfUlRTMAkJKDEgPDwgMjEpICAJLyogQTogVVNBUlQgUmVhZHkgVG8gU2VuZCAwICovCisjZGVmaW5lIEFUOTFfUEQyMV9SVFMwCQkoMSA8PCAyMSkJLyogQTogVVNBUlQgUmVhZHkgVG8gU2VuZCAwICovCiAjZGVmaW5lIEFUOTFfUEQyMV9UUEs5CQkoMSA8PCAyMSkJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDkgKi8KICNkZWZpbmUgQVQ5MV9QRDIyX1JUUzEJCSgxIDw8IDIyKQkvKiBBOiBVU0FSVCBSZWFkeSBUbyBTZW5kIDEgKi8KICNkZWZpbmUgQVQ5MV9QRDIyX1RQSzEwCQkoMSA8PCAyMikJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDEwICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwX21hdHJpeC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MF9tYXRyaXguaAppbmRleCA3NDZkOTczNy4uNzhmNmI0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MF9tYXRyaXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYwX21hdHJpeC5oCkBAIC01OCw3ICs1OCw3IEBACiAjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0IxCQkoMSA8PCAxKQkvKiBSZW1hcCBDb21tYW5kIGZvciBBSEIgTWFzdGVyIDEgKEFSTTkyNkVKLVMgRGF0YSBNYXN0ZXIpICovCiAKICNkZWZpbmUgQVQ5MV9NQVRSSVhfRUJJQ1NBCShBVDkxX01BVFJJWCArIDB4MTFDKQkvKiBFQkkgQ2hpcCBTZWxlY3QgQXNzaWdubWVudCBSZWdpc3RlciAqLwotI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1MxQQkJKDEgPDwgMSkJIC8qIENoaXAgU2VsZWN0IDEgQXNzaWdubWVudCAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1MxQQkJKDEgPDwgMSkJLyogQ2hpcCBTZWxlY3QgMSBBc3NpZ25tZW50ICovCiAjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MxQV9TTUMJCSgwIDw8IDEpCiAjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MxQV9TRFJBTUMJCSgxIDw8IDEpCiAjZGVmaW5lCQlBVDkxX01BVFJJWF9DUzNBCQkoMSA8PCAzKQkvKiBDaGlwIFNlbGVjdCAzIEFzc2lnbm1lbnQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjFfbWF0cml4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjYxX21hdHJpeC5oCmluZGV4IDI3MGE1ZGMuLmVjODhlZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNjFfbWF0cml4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2MV9tYXRyaXguaApAQCAtMTUsNyArMTUsNyBAQAogCiAjZGVmaW5lIEFUOTFfTUFUUklYX01DRkcJKEFUOTFfTUFUUklYICsgMHgwMCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KICNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjAJKDEgPDwgMCkJCS8qIFJlbWFwIENvbW1hbmQgZm9yIEFIQiBNYXN0ZXIgMCAoQVJNOTI2RUotUyBJbnN0cnVjdGlvbiBNYXN0ZXIpICovCi0jZGVmaW5lCQlBVDAxX01BVFJJWF9SQ0IxCSgxIDw8IDEpCQkvKiBSZW1hcCBDb21tYW5kIGZvciBBSEIgTWFzdGVyIDEgKEFSTTkyNkVKLVMgRGF0YSBNYXN0ZXIpICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0IxCSgxIDw8IDEpCQkvKiBSZW1hcCBDb21tYW5kIGZvciBBSEIgTWFzdGVyIDEgKEFSTTkyNkVKLVMgRGF0YSBNYXN0ZXIpICovCiAKICNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzAJKEFUOTFfTUFUUklYICsgMHgwNCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCiAjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcxCShBVDkxX01BVFJJWCArIDB4MDgpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwpAQCAtNDMsOCArNDMsOCBAQAogCiAjZGVmaW5lIEFUOTFfTUFUUklYX0VCSUNTQQkoQVQ5MV9NQVRSSVggKyAweDMwKQkvKiBFQkkgQ2hpcCBTZWxlY3QgQXNzaWdubWVudCBSZWdpc3RlciAqLwogI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1MxQQkJKDEgPDwgMSkJLyogQ2hpcCBTZWxlY3QgMSBBc3NpZ25tZW50ICovCi0jZGVmaW5lIAkJQVQ5MV9NQVRSSVhfQ1MxQV9TTUMJCSgwIDw8IDEpCi0jZGVmaW5lIAkJQVQ5MV9NQVRSSVhfQ1MxQV9TRFJBTUMJCSgxIDw8IDEpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MxQV9TTUMJCSgwIDw8IDEpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MxQV9TRFJBTUMJCSgxIDw8IDEpCiAjZGVmaW5lCQlBVDkxX01BVFJJWF9DUzNBCQkoMSA8PCAzKQkvKiBDaGlwIFNlbGVjdCAzIEFzc2lnbm1lbnQgKi8KICNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzNBX1NNQwkJKDAgPDwgMykKICNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBCSgxIDw8IDMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjZ4X21jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFzYW05MjZ4X21jLmgKaW5kZXggN2Q5NDk2OC4uOTcyZTc1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxc2FtOTI2eF9tYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXNhbTkyNnhfbWMuaApAQCAtMzMsMTQgKzMzLDE0IEBACiAjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTkNfOQkoMSA8PCAwKQogI2RlZmluZQkJCUFUOTFfU0RSQU1DX05DXzEwCSgyIDw8IDApCiAjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTkNfMTEJKDMgPDwgMCkKLSNkZWZpbmUgCUFUOTFfU0RSQU1DX05SCQkoMyA8PCAyKQkJLyogTnVtYmVyIG9mIFJvdyBCaXRzICovCisjZGVmaW5lCQlBVDkxX1NEUkFNQ19OUgkJKDMgPDwgMikJCS8qIE51bWJlciBvZiBSb3cgQml0cyAqLwogI2RlZmluZQkJCUFUOTFfU0RSQU1DX05SXzExCSgwIDw8IDIpCiAjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTlJfMTIJKDEgPDwgMikKICNkZWZpbmUJCQlBVDkxX1NEUkFNQ19OUl8xMwkoMiA8PCAyKQotI2RlZmluZSAJQVQ5MV9TRFJBTUNfTkIJCSgxIDw8IDQpCQkvKiBOdW1iZXIgb2YgQmFua3MgKi8KKyNkZWZpbmUJCUFUOTFfU0RSQU1DX05CCQkoMSA8PCA0KQkJLyogTnVtYmVyIG9mIEJhbmtzICovCiAjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTkJfMgkoMCA8PCA0KQotI2RlZmluZSAJCUFUOTFfU0RSQU1DX05CXzQJKDEgPDwgNCkKLSNkZWZpbmUgCUFUOTFfU0RSQU1DX0NBUwkJKDMgPDwgNSkJCS8qIENBUyBMYXRlbmN5ICovCisjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfTkJfNAkoMSA8PCA0KQorI2RlZmluZQkJQVQ5MV9TRFJBTUNfQ0FTCQkoMyA8PCA1KQkJLyogQ0FTIExhdGVuY3kgKi8KICNkZWZpbmUJCQlBVDkxX1NEUkFNQ19DQVNfMQkoMSA8PCA1KQogI2RlZmluZQkJCUFUOTFfU0RSQU1DX0NBU18yCSgyIDw8IDUpCiAjZGVmaW5lCQkJQVQ5MV9TRFJBTUNfQ0FTXzMJKDMgPDwgNSkKQEAgLTExMCwxMCArMTEwLDEwIEBACiAjZGVmaW5lIEFUOTFfU01DX01PREUobikJKEFUOTFfU01DICsgMHgwYyArICgobikqMHgxMCkpCS8qIE1vZGUgUmVnaXN0ZXIgZm9yIENTIG4gKi8KICNkZWZpbmUJCUFUOTFfU01DX1JFQURNT0RFCSgxIDw8ICAwKQkJCS8qIFJlYWQgTW9kZSAqLwogI2RlZmluZQkJQVQ5MV9TTUNfV1JJVEVNT0RFCSgxIDw8ICAxKQkJCS8qIFdyaXRlIE1vZGUgKi8KLSNkZWZpbmUJCUFUOTFfU01DX0VYTldNT0RFCSgzIDw8ICA1KQkJCS8qIE5XQUlUIE1vZGUgKi8KLSNkZWZpbmUJCQlBVDkxX1NNQ19FWE5XTU9ERV9ESVNBQkxFCSgwIDw8IDUpCi0jZGVmaW5lCQkJQVQ5MV9TTUNfRVhOV01PREVfRlJPWkVOCSgyIDw8IDUpCi0jZGVmaW5lCQkJQVQ5MV9TTUNfRVhOV01PREVfUkVBRFkJCSgzIDw8IDUpCisjZGVmaW5lCQlBVDkxX1NNQ19FWE5XTU9ERQkoMyA8PCAgNCkJCQkvKiBOV0FJVCBNb2RlICovCisjZGVmaW5lCQkJQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRQkoMCA8PCA0KQorI2RlZmluZQkJCUFUOTFfU01DX0VYTldNT0RFX0ZST1pFTgkoMiA8PCA0KQorI2RlZmluZQkJCUFUOTFfU01DX0VYTldNT0RFX1JFQURZCQkoMyA8PCA0KQogI2RlZmluZQkJQVQ5MV9TTUNfQkFUCQkoMSA8PCAgOCkJCQkvKiBCeXRlIEFjY2VzcyBUeXBlICovCiAjZGVmaW5lCQkJQVQ5MV9TTUNfQkFUX1NFTEVDVAkJKDAgPDwgOCkKICNkZWZpbmUJCQlBVDkxX1NNQ19CQVRfV1JJVEUJCSgxIDw8IDgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2lycXMuaAppbmRleCA5YTQyZjVkLi5hZTUzMmUzMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2lycXMuaApAQCAtMjIsOSArMjIsOSBAQAogI2RlZmluZSBJUlFfRVA5M1hYX0RNQU0yUDkJCTE2CiAjZGVmaW5lIElSUV9FUDkzWFhfRE1BTTJNMAkJMTcKICNkZWZpbmUgSVJRX0VQOTNYWF9ETUFNMk0xCQkxOAotI2RlZmluZSBJUlFfRVA5M1hYX0dQSU8wTVVYCQkyMAotI2RlZmluZSBJUlFfRVA5M1hYX0dQSU8xTVVYCQkyMQotI2RlZmluZSBJUlFfRVA5M1hYX0dQSU8yTVVYCQkyMgorI2RlZmluZSBJUlFfRVA5M1hYX0dQSU8wTVVYCQkxOQorI2RlZmluZSBJUlFfRVA5M1hYX0dQSU8xTVVYCQkyMAorI2RlZmluZSBJUlFfRVA5M1hYX0dQSU8yTVVYCQkyMQogI2RlZmluZSBJUlFfRVA5M1hYX0dQSU8zTVVYCQkyMgogI2RlZmluZSBJUlFfRVA5M1hYX1VBUlQxUlgJCTIzCiAjZGVmaW5lIElSUV9FUDkzWFhfVUFSVDFUWAkJMjQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pbXgtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1yZWdzLmgKaW5kZXggYTY5MTJiMy4uZTU2YTRlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L2lteC1yZWdzLmgKQEAgLTQxLDcgKzQxLDEzIEBACiAKIC8qIFBMTCByZWdpc3RlcnMgKi8KICNkZWZpbmUgQ1NDUiAgIF9fUkVHKElNWF9QTExfQkFTRSkgICAgICAgIC8qIENsb2NrIFNvdXJjZSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIENTQ1JfU1lTVEVNX1NFTCAoMTw8MTYpCisjZGVmaW5lIENTQ1JfU1BMTF9SRVNUQVJUCSgxPDwyMikKKyNkZWZpbmUgQ1NDUl9NUExMX1JFU1RBUlQJKDE8PDIxKQorI2RlZmluZSBDU0NSX1NZU1RFTV9TRUwJCSgxPDwxNikKKyNkZWZpbmUgQ1NDUl9CQ0xLX0RJVgkJKDB4Zjw8MTApCisjZGVmaW5lIENTQ1JfTVBVX1BSRVNDCQkoMTw8MTUpCisjZGVmaW5lIENTQ1JfU1BFTgkJKDE8PDEpCisjZGVmaW5lIENTQ1JfTVBFTgkJKDE8PDApCiAKICNkZWZpbmUgTVBDVEwwIF9fUkVHKElNWF9QTExfQkFTRSArIDB4NCkgIC8qIE1DVSBQTEwgQ29udHJvbCBSZWdpc3RlciAwICovCiAjZGVmaW5lIE1QQ1RMMSBfX1JFRyhJTVhfUExMX0JBU0UgKyAweDgpICAvKiBNQ1UgUExMIGFuZCBTeXN0ZW0gQ2xvY2sgUmVnaXN0ZXIgMSAqLwpAQCAtNDksOCArNTUsNiBAQAogI2RlZmluZSBTUENUTDEgX19SRUcoSU1YX1BMTF9CQVNFICsgMHgxMCkgLyogU3lzdGVtIFBMTCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KICNkZWZpbmUgUENEUiAgIF9fUkVHKElNWF9QTExfQkFTRSArIDB4MjApIC8qIFBlcmlwaGVyYWwgQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAqLwogCi0jZGVmaW5lIENTQ1JfTVBMTF9SRVNUQVJUICgxPDwyMSkKLQogLyoKICAqICBHUElPIE1vZHVsZSBhbmQgSS9PIE11bHRpcGxleGVyCiAgKiAgeCA9IDAuLjMgZm9yIHJlZ19BLCByZWdfQiwgcmVnX0MsIHJlZ19ECmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2lvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AxM3h4L2lvLmgKaW5kZXggZGI2ZGUyNC4uNWE3YmRiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvaW8uaApAQCAtMjEsMTAgKzIxLDExIEBACiAKICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgogCi0jZGVmaW5lIF9faW8oYSkgICAgICAoYSkKKyNkZWZpbmUgX19pbyhhKSBfX2lvcDEzeHhfaW8oYSkKICNkZWZpbmUgX19tZW1fcGNpKGEpIChhKQogI2RlZmluZSBfX21lbV9pc2EoYSkgKGEpCiAKK2V4dGVybiB2b2lkIF9faW9tZW0gKiBfX2lvcDEzeHhfaW8odW5zaWduZWQgbG9uZyBpb19hZGRyKTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKiBfX2lvcmVtYXAodW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKl9faW9wMTN4eF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgY29va2llLCBzaXplX3Qgc2l6ZSwKIAl1bnNpZ25lZCBsb25nIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDEzeHgvaXE4MTM0MC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9pcTgxMzQwLmgKaW5kZXggYjk4ZjhmMS4uYmEyY2Y5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9pcTgxMzQwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMTN4eC9pcTgxMzQwLmgKQEAgLTI0LDggKzI0LDUgQEAKICNkZWZpbmUgUEJJX0NGX0lERV9CQVNFICAgICAoSVE4MTM0MF9DTVBfRkxTSCkKICNkZWZpbmUgUEJJX0NGX0JBUl9BRERSICAgICAoSU9QMTNYWF9QQklfQkFSMSkKIAotLyogVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdXNlZCBpbiB0aGUgTWFjaGluZSBkZXNjcmlwdGlvbiAqLwotI2RlZmluZSBQSFlTX0lPICAgICAgICAgMHhmZWZmZmYwMAotI2RlZmluZSBJT19QR19PRkZTRVQgICAgMHhmZmZmZmYwMAotI2RlZmluZSBCT09UX1BBUkFNX09GRlNFVCAgMHgwMDAwMDEwMAorCiAjZW5kaWYJLyogX0lRODEzNDBfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9pb3AzMnguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9pb3AzMnguaAppbmRleCA0YmJkODVmLi4yZTk0NjkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaW9wMzJ4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lvcDMyeC5oCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBQZXJpcGhlcmFscyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUgaW9wMzJ4IGFuZCBpb3AzM3ggYnV0CiAgKiBsb2NhdGVkIGF0IGRpZmZlcmVudCBhZGRyZXNzZXMuCiAgKi8KLSNkZWZpbmUgSU9QM1hYX0dQSU9fUkVHKHJlZykJKElPUDNYWF9QRVJJUEhFUkFMX1ZJUlRfQkFTRSArIDB4MDdjMCArIChyZWcpKQorI2RlZmluZSBJT1AzWFhfR1BJT19SRUcocmVnKQkoSU9QM1hYX1BFUklQSEVSQUxfVklSVF9CQVNFICsgMHgwN2M0ICsgKHJlZykpCiAjZGVmaW5lIElPUDNYWF9USU1FUl9SRUcocmVnKQkoSU9QM1hYX1BFUklQSEVSQUxfVklSVF9CQVNFICsgMHgwN2UwICsgKHJlZykpCiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9wM3h4Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjN4eC9tZW1vcnkuaAppbmRleCBjODVmYzA2Li42ZDg1OWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyM3h4L21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIzeHgvbWVtb3J5LmgKQEAgLTQxLDIxICs0MSw3IEBACiAJZGF0YSA9ICooKHZvbGF0aWxlIGludCAqKUlYUDIzWFhfUENJX1NEUkFNX0JBUik7CQlcCiAJIF9fcGh5c190b192aXJ0KCgoKGIgLSAoZGF0YSAmIDB4ZmZmZmZmZjApKSArIDB4MDAwMDAwMDApKSk7IH0pCiAKLS8qCi0gKiBDb2hlcmVuY3kgc3VwcG9ydC4gIE9ubHkgc3VwcG9ydGVkIG9uIEEyIENQVXMgb3Igb24gQTEKLSAqIHN5c3RlbXMgdGhhdCBoYXZlIHRoZSBjYWNoZSBjb2hlcmVuY3kgd29ya2Fyb3VuZC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgX19peHAyM3h4X2FyY2hfaXNfY29oZXJlbnQodm9pZCkKLXsKLQlleHRlcm4gdW5zaWduZWQgaW50IHByb2Nlc3Nvcl9pZDsKLQotCWlmICgoKHByb2Nlc3Nvcl9pZCAmIDE1KSA+PSA0KSB8fCBtYWNoaW5lX2lzX3JvYWRydW5uZXIoKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBhcmNoX2lzX2NvaGVyZW50KCkJX19peHAyM3h4X2FyY2hfaXNfY29oZXJlbnQoKQorI2RlZmluZSBhcmNoX2lzX2NvaGVyZW50KCkJMQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9pMmMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlOGQ2NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaTJjLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIFBOWDQwMDgtc3BlY2lmaWMgdHdlYWtzIGZvciBJMkMgSVAzMjA0IGJsb2NrCisgKgorICogQXV0aG9yOiBWaXRhbHkgV29vbCA8dndvb2xAcnUubXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9JMkNfSF9fCisjZGVmaW5lIF9fQVNNX0FSQ0hfSTJDX0hfXworCisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworZW51bSB7CisJbXN0YXR1c190ZGkgPSAweDAwMDAwMDAxLAorCW1zdGF0dXNfYWZpID0gMHgwMDAwMDAwMiwKKwltc3RhdHVzX25haSA9IDB4MDAwMDAwMDQsCisJbXN0YXR1c19kcm1pID0gMHgwMDAwMDAwOCwKKwltc3RhdHVzX2FjdGl2ZSA9IDB4MDAwMDAwMjAsCisJbXN0YXR1c19zY2wgPSAweDAwMDAwMDQwLAorCW1zdGF0dXNfc2RhID0gMHgwMDAwMDA4MCwKKwltc3RhdHVzX3JmZiA9IDB4MDAwMDAxMDAsCisJbXN0YXR1c19yZmUgPSAweDAwMDAwMjAwLAorCW1zdGF0dXNfdGZmID0gMHgwMDAwMDQwMCwKKwltc3RhdHVzX3RmZSA9IDB4MDAwMDA4MDAsCit9OworCitlbnVtIHsKKwltY250cmxfdGRpZSA9IDB4MDAwMDAwMDEsCisJbWNudHJsX2FmaWUgPSAweDAwMDAwMDAyLAorCW1jbnRybF9uYWllID0gMHgwMDAwMDAwNCwKKwltY250cmxfZHJtaWUgPSAweDAwMDAwMDA4LAorCW1jbnRybF9kYWllID0gMHgwMDAwMDAyMCwKKwltY250cmxfcmZmaWUgPSAweDAwMDAwMDQwLAorCW1jbnRybF90ZmZpZSA9IDB4MDAwMDAwODAsCisJbWNudHJsX3Jlc2V0ID0gMHgwMDAwMDEwMCwKKwltY250cmxfY2RibW9kZSA9IDB4MDAwMDA0MDAsCit9OworCitlbnVtIHsKKwlyd19iaXQgPSAxIDw8IDAsCisJc3RhcnRfYml0ID0gMSA8PCA4LAorCXN0b3BfYml0ID0gMSA8PCA5LAorfTsKKworI2RlZmluZSBJMkNfUkVHX1JYKGEpCSgoYSktPmlvYWRkcikJCS8qIFJ4IEZJRk8gcmVnIChSTykgKi8KKyNkZWZpbmUgSTJDX1JFR19UWChhKQkoKGEpLT5pb2FkZHIpCQkvKiBUeCBGSUZPIHJlZyAoV08pICovCisjZGVmaW5lIEkyQ19SRUdfU1RTKGEpCSgoYSktPmlvYWRkciArIDB4MDQpCS8qIFN0YXR1cyByZWcgKFJPKSAqLworI2RlZmluZSBJMkNfUkVHX0NUTChhKQkoKGEpLT5pb2FkZHIgKyAweDA4KQkvKiBDdGwgcmVnICovCisjZGVmaW5lIEkyQ19SRUdfQ0tMKGEpCSgoYSktPmlvYWRkciArIDB4MGMpCS8qIENsb2NrIGRpdmlkZXIgbG93ICovCisjZGVmaW5lIEkyQ19SRUdfQ0tIKGEpCSgoYSktPmlvYWRkciArIDB4MTApCS8qIENsb2NrIGRpdmlkZXIgaGlnaCAqLworI2RlZmluZSBJMkNfUkVHX0FEUihhKQkoKGEpLT5pb2FkZHIgKyAweDE0KQkvKiBJMkMgYWRkcmVzcyAqLworI2RlZmluZSBJMkNfUkVHX1JGTChhKQkoKGEpLT5pb2FkZHIgKyAweDE4KQkvKiBSeCBGSUZPIGxldmVsIChSTykgKi8KKyNkZWZpbmUgSTJDX1JFR19URkwoYSkJKChhKS0+aW9hZGRyICsgMHgxYykJLyogVHggRklGTyBsZXZlbCAoUk8pICovCisjZGVmaW5lIEkyQ19SRUdfUlhCKGEpCSgoYSktPmlvYWRkciArIDB4MjApCS8qIE51bSBvZiBieXRlcyBSeC1lZCAoUk8pICovCisjZGVmaW5lIEkyQ19SRUdfVFhCKGEpCSgoYSktPmlvYWRkciArIDB4MjQpCS8qIE51bSBvZiBieXRlcyBUeC1lZCAoUk8pICovCisjZGVmaW5lIEkyQ19SRUdfVFhTKGEpCSgoYSktPmlvYWRkciArIDB4MjgpCS8qIFR4IHNsYXZlIEZJRk8gKFJPKSAqLworI2RlZmluZSBJMkNfUkVHX1NURkwoYSkJKChhKS0+aW9hZGRyICsgMHgyYykJLyogVHggc2xhdmUgRklGTyBsZXZlbCAoUk8pICovCisKKyNkZWZpbmUgSENMS19NSFoJCTEzCisjZGVmaW5lIEkyQ19DSElQX05BTUUJCSJQTlg0MDA4LUkyQyIKKworI2VuZGlmCQkJCS8qIF9fQVNNX0FSQ0hfSTJDX0hfX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKaW5kZXggMDgzZTAzYy4uZTI0ZjZiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKQEAgLTE2MjYsNyArMTYyNiw3IEBACiAjZGVmaW5lIFNTQ1IwX1JJTQkoMSA8PCAyMikJLyogUmVjZWl2ZSBGSUZPIG92ZXJycnVuIGludGVycnVwdCBtYXNrICovCiAjZGVmaW5lIFNTQ1IwX1RVTQkoMSA8PCAyMykJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLwogI2RlZmluZSBTU0NSMF9GUkRDCSgweDA3MDAwMDAwKQkvKiBGcmFtZSByYXRlIGRpdmlkZXIgY29udHJvbCAobWFzaykgKi8KLSNkZWZpbmUgU1NDUjBfU2xvdHNQZXJGcm0oeCkgKCh4KSAtIDEpCS8qIFRpbWUgc2xvdHMgcGVyIGZyYW1lIFsxLi44XSAqLworI2RlZmluZSBTU0NSMF9TbG90c1BlckZybSh4KSAoKCh4KSAtIDEpIDw8IDI0KQkvKiBUaW1lIHNsb3RzIHBlciBmcmFtZSBbMS4uOF0gKi8KICNkZWZpbmUgU1NDUjBfQURDCSgxIDw8IDMwKQkvKiBBdWRpbyBjbG9jayBzZWxlY3QgKi8KICNkZWZpbmUgU1NDUjBfTU9ECSgxIDw8IDMxKQkvKiBNb2RlIChub3JtYWwgb3IgbmV0d29yaykgKi8KICNlbmRpZgpAQCAtMTY1NSw2ICsxNjU1LDcgQEAKICNkZWZpbmUgU1NDUjBfRURTUwkJKDEgPDwgMjApCS8qIEV4dGVuZGVkIERhdGEgU2l6ZSBTZWxlY3QgKi8KIAogLyogZXh0cmEgYml0cyBpbiBQWEEyNTUsIFBYQTI2eCBhbmQgUFhBMjd4IFNTUCBwb3J0cyAqLworI2RlZmluZSBTU0NSMF9USVNTUAkJKDEgPDwgNCkJLyogVEkgU3luYyBTZXJpYWwgUHJvdG9jb2wgKi8KICNkZWZpbmUgU1NDUjBfUFNQCQkoMyA8PCA0KQkvKiBQU1AgLSBQcm9ncmFtbWFibGUgU2VyaWFsIFByb3RvY29sICovCiAjZGVmaW5lIFNTQ1IxX1RURUxQCQkoMSA8PCAzMSkJLyogVFhEIFRyaXN0YXRlIEVuYWJsZSBMYXN0IFBoYXNlICovCiAjZGVmaW5lIFNTQ1IxX1RURQkJKDEgPDwgMzApCS8qIFRYRCBUcmlzdGF0ZSBFbmFibGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyeHhfc3BpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhMnh4X3NwaS5oCmluZGV4IDkxNTU5MGMzLi5hY2M3ZWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhMnh4X3NwaS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEyeHhfc3BpLmgKQEAgLTI3LDE2ICsyNywxMyBAQAogI2RlZmluZSBTU1AxX1NlckNsa0Rpdih4KSAoKChDTE9DS19TUEVFRF9IWi8yLyh4KzEpKTw8OCkmMHgwMDAwZmYwMCkKICNkZWZpbmUgU1NQMl9TZXJDbGtEaXYoeCkgKCgoQ0xPQ0tfU1BFRURfSFovKHgrMSkpPDw4KSYweDAwMGZmZjAwKQogI2RlZmluZSBTU1AzX1NlckNsa0Rpdih4KSAoKChDTE9DS19TUEVFRF9IWi8oeCsxKSk8PDgpJjB4MDAwZmZmMDApCi0jZGVmaW5lIFNTUF9USU1FT1VUX1NDQUxFICgyNzEyKQogI2VsaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KQogI2RlZmluZSBDTE9DS19TUEVFRF9IWiAxMzAwMDAwMAogI2RlZmluZSBTU1AxX1NlckNsa0Rpdih4KSAoKChDTE9DS19TUEVFRF9IWi8oeCsxKSk8PDgpJjB4MDAwZmZmMDApCiAjZGVmaW5lIFNTUDJfU2VyQ2xrRGl2KHgpICgoKENMT0NLX1NQRUVEX0haLyh4KzEpKTw8OCkmMHgwMDBmZmYwMCkKICNkZWZpbmUgU1NQM19TZXJDbGtEaXYoeCkgKCgoQ0xPQ0tfU1BFRURfSFovKHgrMSkpPDw4KSYweDAwMGZmZjAwKQotI2RlZmluZSBTU1BfVElNRU9VVF9TQ0FMRSAoNzY5KQogI2VuZGlmCiAKLSNkZWZpbmUgU1NQX1RJTUVPVVQoeCkgKCh4KjEwMDAwKS9TU1BfVElNRU9VVF9TQ0FMRSkKICNkZWZpbmUgU1NQMV9WSVJUICgodm9pZCAqKShpb19wMnYoX19QUkVHKFNTQ1IwX1AoMSkpKSkpCiAjZGVmaW5lIFNTUDJfVklSVCAoKHZvaWQgKikoaW9fcDJ2KF9fUFJFRyhTU0NSMF9QKDIpKSkpKQogI2RlZmluZSBTU1AzX1ZJUlQgKCh2b2lkICopKGlvX3AydihfX1BSRUcoU1NDUjBfUCgzKSkpKSkKQEAgLTYzLDcgKzYwLDcgQEAKIAl1OCB0eF90aHJlc2hvbGQ7CiAJdTggcnhfdGhyZXNob2xkOwogCXU4IGRtYV9idXJzdF9zaXplOwotCXUzMiB0aW1lb3V0X21pY3Jvc2VjczsKKwl1MzIgdGltZW91dDsKIAl1OCBlbmFibGVfbG9vcGJhY2s7CiAJdm9pZCAoKmNzX2NvbnRyb2wpKHUzMiBjb21tYW5kKTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1jcGxkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1jcGxkLmgKaW5kZXggNDBlOGUyNy4uZGNlYmY2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hbnViaXMtY3BsZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLWNwbGQuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLWNwbGQuaAogICoKLSAqIChjKSAyMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDA1IFNpbXRlYyBFbGVjdHJvbmljcwogICoJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hbnViaXMtaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1pcnEuaAppbmRleCA0YjVmNDIzLi5jZDc3YTcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1pcnEuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLWlycS5oCiAgKgotICogKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy8KICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLW1hcC5oCmluZGV4IDA1OGEyMTAuLmFiMDc2ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLW1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLW1hcC5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hbnViaXMtbWFwLmgKICAqCi0gKiAoYykgMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoYykgMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCWh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzLwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYXVkaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYXVkaW8uaAppbmRleCA3ZTAyMjIyLi42NWUwYWNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2F1ZGlvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hdWRpby5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hdWRpby5oCiAgKgotICogKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwogICoJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvU1dMSU5VWC8KICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtY3BsZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWNwbGQuaAppbmRleCA4OTY5Y2ZmLi4wMzRkMmM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtY3BsZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1jcGxkLmgKQEAgLTEsNyArMSw3IEBACiAvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtY3BsZC5oCiAgKgotICogKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBCQVNUIC0gQ1BMRCBjb250cm9sIGNvbnN0YW50cwogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1pcnEuaAppbmRleCAxNWZmYTY2Li43MjZjMDQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWlycS5oCkBAIC0xLDcgKzEsNyBAQAogLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWlycS5oCiAgKgotICogKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBNYWNoaW5lIEJBU1QgLSBJUlEgTnVtYmVyIGRlZmluaXRpb25zCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LW1hcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LW1hcC5oCmluZGV4IDcyN2NlZjguLjg2YWMxYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1tYXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtbWFwLmgKQEAgLTEsNyArMSw3IEBACiAvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtbWFwLmgKICAqCi0gKiAoYykgMjAwMywyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwotICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoYykgMjAwMywyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIE1hY2hpbmUgQkFTVCAtIE1lbW9yeSBtYXAgZGVmaW5pdGlvbnMKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtcG11LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtcG11LmgKaW5kZXggODI4MzYwMi4uMzdhMTFmZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1wbXUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtcG11LmgKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtcG11LmgKICAqCi0gKiAoYykgMjAwMywyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQHNpbXRlYy5jby51az4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kbWEuaAppbmRleCA3YWMyMjQ4Li41OGZmYTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSCBfX0ZJTEVfXwogCiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSAiaGFyZHdhcmUuaCIKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAogLyoKICAqIFRoaXMgaXMgdGhlIG1heGltdW0gRE1BIGFkZHJlc3MocGh5c2ljYWwgYWRkcmVzcykgdGhhdCBjYW4gYmUgRE1BZCB0by4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZW50cnktbWFjcm8uUwppbmRleCBlMDlhNmI4Li4xZWI0ZTZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9lbnRyeS1tYWNyby5TCkBAIC0yMCw3ICsyMCw3IEBACiAjZGVmaW5lIElOVE9GRlNFVAkoMHgxNCkKIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAKIAkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZmIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZmIuaAppbmRleCA5MDg5NDIxLi45M2E1OGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2ZiLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9mYi5oCkBAIC0zMSw2ICszMSw5IEBACiBzdHJ1Y3QgczNjMjQxMGZiX21hY2hfaW5mbyB7CiAJdW5zaWduZWQgY2hhcglmaXhlZF9zeW5jczsJLyogZG8gbm90IHVwZGF0ZSBzeW5jL2JvcmRlciAqLwogCisJLyogTENEIHR5cGVzICovCisJaW50CQl0eXBlOworCiAJLyogU2NyZWVuIHNpemUgKi8KIAlpbnQJCXdpZHRoOwogCWludAkJaGVpZ2h0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9oMTk0MC1sYXRjaC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9oMTk0MC1sYXRjaC5oCmluZGV4IGM1ODAyNDEuLmMzZGU1YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaDE5NDAtbGF0Y2guaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2gxOTQwLWxhdGNoLmgKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2gxOTQwLWxhdGNoLmgKICAqCi0gKiAoYykgMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoYykgMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgpAQCAtMTYsNyArMTYsNyBAQAogCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIEgxOTQwX0xBVENICQkoKHZvaWQgX19pb21lbSAqKTB4RjgwMDAwMDApCisjZGVmaW5lIEgxOTQwX0xBVENICQkoKHZvaWQgX19mb3JjZSBfX2lvbWVtICopMHhGODAwMDAwMCkKICNlbHNlCiAjZGVmaW5lIEgxOTQwX0xBVENICQkweEY4MDAwMDAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaGFyZHdhcmUuaAppbmRleCA4NzFmOGFmLi42ZGFkZjU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9oYXJkd2FyZS5oCkBAIC0xLDcgKzEsNyBAQAogLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9oYXJkd2FyZS5oCiAgKgotICogKGMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogQ29weXJpZ2h0IChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFMzQzI0MTAgLSBoYXJkd2FyZQogICoKQEAgLTEzLDYgKzEzLDEwIEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAorI2lmbmRlZiBfX0FTTV9IQVJEV0FSRV9ICisjZXJyb3IgIkRvIG5vdCBpbmNsdWRlIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPiIKKyNlbmRpZgorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKiBleHRlcm5hbCBmdW5jdGlvbnMgZm9yIEdQSU8gc3VwcG9ydApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9paWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaWljLmgKaW5kZXggZWQzZDZjNy4uNzEyMTFjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9paWMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lpYy5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9paWMuaAogICoKLSAqIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFMzQzI0MTAgLSBJMkMgQ29udHJvbGxlciBwbGF0ZnJvbV9kZXZpY2UgaW5mbwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaAppbmRleCAzOWE2OTgyLi40YjdjZmY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaApAQCAtMTIsNiArMTIsOSBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSAogI2RlZmluZSBfX0FTTV9BUkNIX0lSUVNfSCBfX0ZJTEVfXwogCisjaWZuZGVmIF9fQVNNX0FSTV9JUlFfSAorI2Vycm9yICJEbyBub3QgaW5jbHVkZSB0aGlzIGRpcmVjdGx5LCBpbnN0ZWFkICNpbmNsdWRlIDxhc20vaXJxLmg+IgorI2VuZGlmCiAKIC8qIHdlIGtlZXAgdGhlIGZpcnN0IHNldCBvZiBDUFUgSVJRcyBvdXQgb2YgdGhlIHJhbmdlIG9mCiAgKiB0aGUgSVNBIHNwYWNlLCBzbyB0aGF0IHRoZSBQQzEwNCBoYXMgdGhlbSB0byBpdHNlbGYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbGVkcy1ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2xlZHMtZ3Bpby5oCmluZGV4IGYwN2VkMDQuLjgwMDg0NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbGVkcy1ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9sZWRzLWdwaW8uaApAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbGVkcy1ncGlvLmgKICAqCi0gKiAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWFwLmgKaW5kZXggNzg5NTA0Mi4uNDUwNWFlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oCkBAIC0xLDcgKzEsNyBAQAogLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaAogICoKLSAqIChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcwotICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBTM0MyNDEwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucwogICoKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBTM0MyNDEwX0FERFIoeCkJICAoKHZvaWQgX19pb21lbSAqKTB4RjAwMDAwMDAgKyAoeCkpCisjZGVmaW5lIFMzQzI0MTBfQUREUih4KQkgICgodm9pZCBfX2lvbWVtIF9fZm9yY2UgKikweEYwMDAwMDAwICsgKHgpKQogI2Vsc2UKICNkZWZpbmUgUzNDMjQxMF9BRERSKHgpCSAgKDB4RjAwMDAwMDAgKyAoeCkpCiAjZW5kaWYKQEAgLTQ3LDczICs0Nyw2NSBAQAogI2RlZmluZSBTM0MyNFhYX1NaX01FTUNUUkwgU1pfMU0KIAogLyogVVNCIGhvc3QgY29udHJvbGxlciAqLwotI2RlZmluZSBTM0MyNFhYX1ZBX1VTQkhPU1QgUzNDMjQxMF9BRERSKDB4MDAyMDAwMDApCiAjZGVmaW5lIFMzQzI0MDBfUEFfVVNCSE9TVCAoMHgxNDIwMDAwMCkKICNkZWZpbmUgUzNDMjQxMF9QQV9VU0JIT1NUICgweDQ5MDAwMDAwKQogI2RlZmluZSBTM0MyNFhYX1NaX1VTQkhPU1QgU1pfMU0KIAogLyogRE1BIGNvbnRyb2xsZXIgKi8KLSNkZWZpbmUgUzNDMjRYWF9WQV9ETUEJICAgUzNDMjQxMF9BRERSKDB4MDAzMDAwMDApCiAjZGVmaW5lIFMzQzI0MDBfUEFfRE1BCSAgICgweDE0NjAwMDAwKQogI2RlZmluZSBTM0MyNDEwX1BBX0RNQQkgICAoMHg0QjAwMDAwMCkKICNkZWZpbmUgUzNDMjRYWF9TWl9ETUEJICAgU1pfMU0KIAogLyogQ2xvY2sgYW5kIFBvd2VyIG1hbmFnZW1lbnQgKi8KLSNkZWZpbmUgUzNDMjRYWF9WQV9DTEtQV1IgIFMzQzI0MTBfQUREUigweDAwNDAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1ZBX0NMS1BXUiAgUzNDMjQxMF9BRERSKDB4MDAyMDAwMDApCiAjZGVmaW5lIFMzQzI0MDBfUEFfQ0xLUFdSICAoMHgxNDgwMDAwMCkKICNkZWZpbmUgUzNDMjQxMF9QQV9DTEtQV1IgICgweDRDMDAwMDAwKQogI2RlZmluZSBTM0MyNFhYX1NaX0NMS1BXUiAgU1pfMU0KIAogLyogTENEIGNvbnRyb2xsZXIgKi8KLSNkZWZpbmUgUzNDMjRYWF9WQV9MQ0QJICAgUzNDMjQxMF9BRERSKDB4MDA2MDAwMDApCisjZGVmaW5lIFMzQzI0WFhfVkFfTENECSAgIFMzQzI0MTBfQUREUigweDAwMzAwMDAwKQogI2RlZmluZSBTM0MyNDAwX1BBX0xDRAkgICAoMHgxNEEwMDAwMCkKICNkZWZpbmUgUzNDMjQxMF9QQV9MQ0QJICAgKDB4NEQwMDAwMDApCiAjZGVmaW5lIFMzQzI0WFhfU1pfTENECSAgIFNaXzFNCiAKIC8qIE5BTkQgZmxhc2ggY29udHJvbGxlciAqLwotI2RlZmluZSBTM0MyNFhYX1ZBX05BTkQJICAgUzNDMjQxMF9BRERSKDB4MDA3MDAwMDApCiAjZGVmaW5lIFMzQzI0MTBfUEFfTkFORAkgICAoMHg0RTAwMDAwMCkKICNkZWZpbmUgUzNDMjRYWF9TWl9OQU5ECSAgIFNaXzFNCiAKIC8qIE1NQyBjb250cm9sbGVyIC0gYXZhaWxhYmxlIG9uIHRoZSBTM0MyNDAwICovCi0jZGVmaW5lIFMzQzI0MDBfVkFfTU1DIAkgICBTM0MyNDAwX0FERFIoMHgwMDcwMDAwMCkKICNkZWZpbmUgUzNDMjQwMF9QQV9NTUMgCSAgICgweDE1QTAwMDAwKQogI2RlZmluZSBTM0MyNDAwX1NaX01NQyAJICAgU1pfMU0KIAogLyogVUFSVHMgKi8KLSNkZWZpbmUgUzNDMjRYWF9WQV9VQVJUCSAgIFMzQzI0MTBfQUREUigweDAwODAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1ZBX1VBUlQJICAgUzNDMjQxMF9BRERSKDB4MDA0MDAwMDApCiAjZGVmaW5lIFMzQzI0MDBfUEFfVUFSVAkgICAoMHgxNTAwMDAwMCkKICNkZWZpbmUgUzNDMjQxMF9QQV9VQVJUCSAgICgweDUwMDAwMDAwKQogI2RlZmluZSBTM0MyNFhYX1NaX1VBUlQJICAgU1pfMU0KIAogLyogVGltZXJzICovCi0jZGVmaW5lIFMzQzI0WFhfVkFfVElNRVIgICBTM0MyNDEwX0FERFIoMHgwMDkwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9WQV9USU1FUiAgIFMzQzI0MTBfQUREUigweDAwNTAwMDAwKQogI2RlZmluZSBTM0MyNDAwX1BBX1RJTUVSICAgKDB4MTUxMDAwMDApCiAjZGVmaW5lIFMzQzI0MTBfUEFfVElNRVIgICAoMHg1MTAwMDAwMCkKICNkZWZpbmUgUzNDMjRYWF9TWl9USU1FUiAgIFNaXzFNCiAKIC8qIFVTQiBEZXZpY2UgcG9ydCAqLwotI2RlZmluZSBTM0MyNFhYX1ZBX1VTQkRFViAgUzNDMjQxMF9BRERSKDB4MDBBMDAwMDApCisjZGVmaW5lIFMzQzI0WFhfVkFfVVNCREVWICBTM0MyNDEwX0FERFIoMHgwMDYwMDAwMCkKICNkZWZpbmUgUzNDMjQwMF9QQV9VU0JERVYgICgweDE1MjAwMTQwKQogI2RlZmluZSBTM0MyNDEwX1BBX1VTQkRFViAgKDB4NTIwMDAwMDApCiAjZGVmaW5lIFMzQzI0WFhfU1pfVVNCREVWICBTWl8xTQogCiAvKiBXYXRjaGRvZyAqLwotI2RlZmluZSBTM0MyNFhYX1ZBX1dBVENIRE9HIFMzQzI0MTBfQUREUigweDAwQjAwMDAwKQorI2RlZmluZSBTM0MyNFhYX1ZBX1dBVENIRE9HIFMzQzI0MTBfQUREUigweDAwNzAwMDAwKQogI2RlZmluZSBTM0MyNDAwX1BBX1dBVENIRE9HICgweDE1MzAwMDAwKQogI2RlZmluZSBTM0MyNDEwX1BBX1dBVENIRE9HICgweDUzMDAwMDAwKQogI2RlZmluZSBTM0MyNFhYX1NaX1dBVENIRE9HIFNaXzFNCiAKIC8qIElJQyBoYXJkd2FyZSBjb250cm9sbGVyICovCi0jZGVmaW5lIFMzQzI0WFhfVkFfSUlDCSAgIFMzQzI0MTBfQUREUigweDAwQzAwMDAwKQogI2RlZmluZSBTM0MyNDAwX1BBX0lJQwkgICAoMHgxNTQwMDAwMCkKICNkZWZpbmUgUzNDMjQxMF9QQV9JSUMJICAgKDB4NTQwMDAwMDApCiAjZGVmaW5lIFMzQzI0WFhfU1pfSUlDCSAgIFNaXzFNCiAKLSNkZWZpbmUgVkFfSUlDX0JBU0UJICAgKFMzQzI0WFhfVkFfSUlDKQotCiAvKiBJSVMgY29udHJvbGxlciAqLwotI2RlZmluZSBTM0MyNFhYX1ZBX0lJUwkgICBTM0MyNDEwX0FERFIoMHgwMEQwMDAwMCkKICNkZWZpbmUgUzNDMjQwMF9QQV9JSVMJICAgKDB4MTU1MDgwMDApCiAjZGVmaW5lIFMzQzI0MTBfUEFfSUlTCSAgICgweDU1MDAwMDAwKQogI2RlZmluZSBTM0MyNFhYX1NaX0lJUwkgICBTWl8xTQpAQCAtMTM0LDI1ICsxMjYsMjEgQEAKICNkZWZpbmUgUzNDMjRYWF9TWl9HUElPCSAgIFNaXzFNCiAKIC8qIFJUQyAqLwotI2RlZmluZSBTM0MyNFhYX1ZBX1JUQwkgICBTM0MyNDEwX0FERFIoMHgwMEYwMDAwMCkKICNkZWZpbmUgUzNDMjQwMF9QQV9SVEMJICAgKDB4MTU3MDAwNDApCiAjZGVmaW5lIFMzQzI0MTBfUEFfUlRDCSAgICgweDU3MDAwMDAwKQogI2RlZmluZSBTM0MyNFhYX1NaX1JUQwkgICBTWl8xTQogCiAvKiBBREMgKi8KLSNkZWZpbmUgUzNDMjRYWF9WQV9BREMJICAgUzNDMjQxMF9BRERSKDB4MDEwMDAwMDApCiAjZGVmaW5lIFMzQzI0MDBfUEFfQURDCSAgICgweDE1ODAwMDAwKQogI2RlZmluZSBTM0MyNDEwX1BBX0FEQwkgICAoMHg1ODAwMDAwMCkKICNkZWZpbmUgUzNDMjRYWF9TWl9BREMJICAgU1pfMU0KIAogLyogU1BJICovCi0jZGVmaW5lIFMzQzI0WFhfVkFfU1BJCSAgIFMzQzI0MTBfQUREUigweDAxMTAwMDAwKQogI2RlZmluZSBTM0MyNDAwX1BBX1NQSQkgICAoMHgxNTkwMDAwMCkKICNkZWZpbmUgUzNDMjQxMF9QQV9TUEkJICAgKDB4NTkwMDAwMDApCiAjZGVmaW5lIFMzQzI0WFhfU1pfU1BJCSAgIFNaXzFNCiAKIC8qIFNESSAqLwotI2RlZmluZSBTM0MyNFhYX1ZBX1NESQkgICBTM0MyNDEwX0FERFIoMHgwMTIwMDAwMCkKICNkZWZpbmUgUzNDMjQxMF9QQV9TREkJICAgKDB4NUEwMDAwMDApCiAjZGVmaW5lIFMzQzI0WFhfU1pfU0RJCSAgIFNaXzFNCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbmFuZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9uYW5kLmgKaW5kZXggZTM1MGFlMi4uODgxNmY3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9uYW5kLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9uYW5kLmgKQEAgLTEsNyArMSw3IEBACiAvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL25hbmQuaAogICoKLSAqIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwotICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBTM0MyNDEwIC0gTkFORCBkZXZpY2UgY29udHJvbGxlciBwbGF0ZnJvbV9kZXZpY2UgaW5mbwogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvb3NpcmlzLWNwbGQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvb3NpcmlzLWNwbGQuaAppbmRleCBlOWQxYWUxLi4zYjY0OTg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL29zaXJpcy1jcGxkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9vc2lyaXMtY3BsZC5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9vc2lyaXMtY3BsZC5oCiAgKgotICogKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy8KICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaAppbmRleCBiMjg5M2UzLi5lYWU5MTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmgKQEAgLTUyLDEwICs1MiwxMCBAQAogLyogZ2VuZXJhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KIAogI2RlZmluZSBTM0MyNDEwX0dQSU9fTEVBVkUgICAoMHhGRkZGRkZGRikKLSNkZWZpbmUgUzNDMjQxMF9HUElPX0lOUFVUICAgKDB4RkZGRkZGRjApCisjZGVmaW5lIFMzQzI0MTBfR1BJT19JTlBVVCAgICgweEZGRkZGRkYwKQkvKiBub3QgYXZhaWxhYmxlIG9uIEEgKi8KICNkZWZpbmUgUzNDMjQxMF9HUElPX09VVFBVVCAgKDB4RkZGRkZGRjEpCiAjZGVmaW5lIFMzQzI0MTBfR1BJT19JUlEgICAgICgweEZGRkZGRkYyKQkvKiBub3QgYXZhaWxhYmxlIGZvciBhbGwgKi8KLSNkZWZpbmUgUzNDMjQxMF9HUElPX1NGTjIgICAgKDB4RkZGRkZGRjIpCS8qIG5vdCBhdmFpbGFibGUgb24gQSAqLworI2RlZmluZSBTM0MyNDEwX0dQSU9fU0ZOMiAgICAoMHhGRkZGRkZGMikJLyogYmFuayBBID0+IGFkZHIvY3MvbmFuZCAqLwogI2RlZmluZSBTM0MyNDEwX0dQSU9fU0ZOMyAgICAoMHhGRkZGRkZGMykJLyogbm90IGF2YWlsYWJsZSBvbiBBICovCiAKIC8qIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoZSBHUElPIHJlZ2lzdGVycy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1tZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1tZW0uaAppbmRleCAzNzVkY2E1Li5lNGQ4MjM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtbWVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLW1lbS5oCkBAIC0xMzMsMTAgKzEzMywxMCBAQAogI2RlZmluZSBTM0MyNDEwX0JBTktDT05fU0RSQU0JCSgweDMgPDwgMTUpCiAKIC8qIG5leHQgYml0cyBvbmx5IGZvciBFRE8gRFJBTSBpbiA2LDcgKi8KLSNkZWZpbmUgUzNDMjQwMF9CQU5LQ09OX0VET19UcmRjMSAgICAgICgweDAwIDw8IDQpCi0jZGVmaW5lIFMzQzI0MDBfQkFOS0NPTl9FRE9fVHJkYzIgICAgICAoMHgwMSA8PCA0KQotI2RlZmluZSBTM0MyNDAwX0JBTktDT05fRURPX1RyZGMzICAgICAgKDB4MDIgPDwgNCkKLSNkZWZpbmUgUzNDMjQwMF9CQU5LQ09OX0VET19UcmRjNCAgICAgICgweDAzIDw8IDQpCisjZGVmaW5lIFMzQzI0MDBfQkFOS0NPTl9FRE9fVHJjZDEgICAgICAoMHgwMCA8PCA0KQorI2RlZmluZSBTM0MyNDAwX0JBTktDT05fRURPX1RyY2QyICAgICAgKDB4MDEgPDwgNCkKKyNkZWZpbmUgUzNDMjQwMF9CQU5LQ09OX0VET19UcmNkMyAgICAgICgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzI0MDBfQkFOS0NPTl9FRE9fVHJjZDQgICAgICAoMHgwMyA8PCA0KQogCiAvKiBDQVMgcHVsc2Ugd2lkdGggKi8KICNkZWZpbmUgUzNDMjQwMF9CQU5LQ09OX0VET19QVUxTRTEgICAgICgweDAwIDw8IDMpCkBAIC0xNTMsOSArMTUzLDkgQEAKICNkZWZpbmUgUzNDMjQwMF9CQU5LQ09OX0VET19TQ0FOYjExICAgICgweDAzIDw8IDApCiAKIC8qIG5leHQgYml0cyBvbmx5IGZvciBTRFJBTSBpbiA2LDcgKi8KLSNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1RyZGMyCQkoMHgwMCA8PCAyKQotI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVHJkYzMJCSgweDAxIDw8IDIpCi0jZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UcmRjNAkJKDB4MDIgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1RyY2QyCQkoMHgwMCA8PCAyKQorI2RlZmluZSBTM0MyNDEwX0JBTktDT05fVHJjZDMJCSgweDAxIDw8IDIpCisjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UcmNkNAkJKDB4MDIgPDwgMikKIAogLyogY29udHJvbCBjb2x1bW4gYWRkcmVzcyBzZWxlY3QgKi8KICNkZWZpbmUgUzNDMjQxMF9CQU5LQ09OX1NDQU5iOAkJKDB4MDAgPDwgMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zZXJpYWwuaAppbmRleCAxOWM3N2RhLi40NmY1MjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNlcmlhbC5oCkBAIC0xOTcsNyArMTk3LDcgQEAKIAl1bnNpZ25lZCBjaGFyCSAgIGh3cG9ydDsJIC8qIGhhcmR3YXJlIHBvcnQgbnVtYmVyICovCiAJdW5zaWduZWQgY2hhcgkgICB1bnVzZWQ7CiAJdW5zaWduZWQgc2hvcnQJICAgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZwkgICB1YXJ0X2ZsYWdzOwkgLyogZGVmYXVsdCB1YXJ0IGZsYWdzICovCisJdXBmX3QJCSAgIHVhcnRfZmxhZ3M7CSAvKiBkZWZhdWx0IHVhcnQgZmxhZ3MgKi8KIAogCXVuc2lnbmVkIGxvbmcJICAgdWNvbjsJIC8qIHZhbHVlIG9mIHVjb24gZm9yIHBvcnQgKi8KIAl1bnNpZ25lZCBsb25nCSAgIHVsY29uOwkgLyogdmFsdWUgb2YgdWxjb24gZm9yIHBvcnQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy11ZGMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy11ZGMuaAppbmRleCA0ODc4NjFkLi4zYzgzNTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtdWRjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXVkYy5oCkBAIC0xMSw4ICsxMSw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19VRENfSAogI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfVURDX0gKIAotCi0jZGVmaW5lIFMzQzI0MTBfVVNCRFJFRyh4KSAoKHgpICsgUzNDMjRYWF9WQV9VU0JERVYpCisjZGVmaW5lIFMzQzI0MTBfVVNCRFJFRyh4KSAoeCkKIAogI2RlZmluZSBTM0MyNDEwX1VEQ19GVU5DX0FERFJfUkVHCVMzQzI0MTBfVVNCRFJFRygweDAxNDApCiAjZGVmaW5lIFMzQzI0MTBfVURDX1BXUl9SRUcJCVMzQzI0MTBfVVNCRFJFRygweDAxNDQpCkBAIC0xMzYsOCArMTM1LDggQEAKICNkZWZpbmUgUzNDMjQxMF9VRENfT0NTUjJfSVNPCQkoMTw8NikgLy8gUi9XCiAjZGVmaW5lIFMzQzI0MTBfVURDX09DU1IyX0RNQUlFTgkoMTw8NSkgLy8gUi9XCiAKLSNkZWZpbmUgUzNDMjQxMF9VRENfU0VUSVgoeCkJICAgIFwKLQlfX3Jhd193cml0ZWwoUzNDMjQxMF9VRENfSU5ERVhfICMjIHgsIFMzQzI0MTBfVURDX0lOREVYX1JFRyk7CisjZGVmaW5lIFMzQzI0MTBfVURDX1NFVElYKGJhc2UseCkJICAgIFwKKwl3cml0ZWwoUzNDMjQxMF9VRENfSU5ERVhfICMjIHgsIGJhc2UrUzNDMjQxMF9VRENfSU5ERVhfUkVHKTsKIAogCiAjZGVmaW5lIFMzQzI0MTBfVURDX0VQMF9DU1JfT1BLUkRZCSgxPDwwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvc3lzdGVtLmgKaW5kZXggNGY3MmE4NS4uZWNmMjUwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3N5c3RlbS5oCkBAIC0xLDcgKzEsNyBAQAogLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0uaAogICoKLSAqIChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcwotICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBTM0MyNDEwIC0gU3lzdGVtIGZ1bmN0aW9uIGRlZmluZXMgYW5kIGluY2x1ZGVzCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC90aW1leC5oCmluZGV4IDcwM2MzMzcuLmMxNmE5OWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3RpbWV4LmgKQEAgLTEsNyArMSw3IEBACiAvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3RpbWV4LmgKICAqCi0gKiAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwotICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFMzQzI0MTAgLSB0aW1lIHBhcmFtZXRlcnMKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCmluZGV4IDgxYjNlOTEuLmRjYjJjZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCkBAIC0xLDcgKzEsNyBAQAogLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91bmNvbXByZXNzLmgKICAqCi0gKiAoYykgMjAwMyBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBTM0MyNDEwIC0gdW5jb21wcmVzcyBjb2RlCiAgKgpAQCAtMTMsNiArMTMsNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSAogI2RlZmluZSBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSAogCit0eXBlZGVmIHVuc2lnbmVkIGludCB1cGZfdDsJLyogY2Fubm90IGluY2x1ZGUgbGludXgvc2VyaWFsX2NvcmUuaCAqLwogCiAvKiBkZWZpbmVzIGZvciBVQVJUIHJlZ2lzdGVycyAqLwogI2luY2x1ZGUgImFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VzYi1jb250cm9sLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VzYi1jb250cm9sLmgKaW5kZXggMzU3MjM1Ni4uNWJmYTM3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91c2ItY29udHJvbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdXNiLWNvbnRyb2wuaApAQCAtMSw3ICsxLDcgQEAKIC8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdXNiLWNvbnRyb2wuaAogICoKLSAqIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwotICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBTM0MyNDEwIC0gdXNiIHBvcnQgaW5mb3JtYXRpb24KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1jcGxkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1jcGxkLmgKaW5kZXggYTM0MWIxZS4uMDU1N2IwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92cjEwMDAtY3BsZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLWNwbGQuaApAQCAtMSw3ICsxLDcgQEAKIC8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLWNwbGQuaAogICoKLSAqIChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcwotICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBWUjEwMDAgLSBDUExEIGNvbnRyb2wgY29uc3RhbnRzCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92cjEwMDAtaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1pcnEuaAppbmRleCBjMzlhMGZmLi44OTA5MzcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1pcnEuaApAQCAtMSw3ICsxLDcgQEAKIC8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLWlycS5oCiAgKgotICogKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBNYWNoaW5lIFZSMTAwMCAtIElSUSBOdW1iZXIgZGVmaW5pdGlvbnMKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLW1hcC5oCmluZGV4IDFmZTRkYjMuLjkyYTU2YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLW1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLW1hcC5oCkBAIC0xLDcgKzEsNyBAQAogLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92cjEwMDAtbWFwLmgKICAqCi0gKiAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwotICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIE1hY2hpbmUgVlIxMDAwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucwogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1hcm0vY2FjaGVmbHVzaC5oCmluZGV4IGYwODQ1NjQuLjVmNTMxZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaApAQCAtMzE5LDYgKzMxOSw4IEBACiAJCQkJdW5zaWduZWQgbG9uZyBsZW4sIGludCB3cml0ZSk7CiAjZW5kaWYKIAorI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pIGZsdXNoX2NhY2hlX21tKG1tKQorCiAvKgogICogZmx1c2hfY2FjaGVfdXNlcl9yYW5nZSBpcyB1c2VkIHdoZW4gd2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUKICAqIEhhcnZhcmQgY2FjaGVzIGFyZSBzeW5jaHJvbmlzZWQgZm9yIHRoZSB1c2VyIHNwYWNlIGFkZHJlc3MgcmFuZ2UuCkBAIC0zNTMsNiArMzU1LDE4IEBACiAgKi8KIGV4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICopOwogCitleHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKyNkZWZpbmUgQVJDSF9IQVNfRkxVU0hfQU5PTl9QQUdFCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZtYWRkcikKK3sKKwlleHRlcm4gdm9pZCBfX2ZsdXNoX2Fub25fcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQlzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nKTsKKwlpZiAoUGFnZUFub24ocGFnZSkpCisJCV9fZmx1c2hfYW5vbl9wYWdlKHZtYSwgcGFnZSwgdm1hZGRyKTsKK30KKwogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpIFwKIAl3cml0ZV9sb2NrX2lycSgmKG1hcHBpbmcpLT50cmVlX2xvY2spCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vY3B1LW11bHRpMzIuaCBiL2luY2x1ZGUvYXNtLWFybS9jcHUtbXVsdGkzMi5oCmluZGV4IDQ2NzlmNjMuLjcxNWUxOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9jcHUtbXVsdGkzMi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jcHUtbXVsdGkzMi5oCkBAIC01MCw5ICs1MCwxMCBAQAogCSAqLwogCXZvaWQgKCpzd2l0Y2hfbW0pKHVuc2lnbmVkIGxvbmcgcGdkX3BoeXMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIAkvKgotCSAqIFNldCBhIFBURQorCSAqIFNldCBhIHBvc3NpYmx5IGV4dGVuZGVkIFBURS4gIE5vbi1leHRlbmRlZCBQVEVzIHNob3VsZAorCSAqIGlnbm9yZSAnZXh0Jy4KIAkgKi8KLQl2b2lkICgqc2V0X3B0ZSkocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CisJdm9pZCAoKnNldF9wdGVfZXh0KShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgZXh0KTsKIH0gcHJvY2Vzc29yOwogCiAjZGVmaW5lIGNwdV9wcm9jX2luaXQoKQkJCXByb2Nlc3Nvci5fcHJvY19pbml0KCkKQEAgLTYwLDUgKzYxLDUgQEAKICNkZWZpbmUgY3B1X3Jlc2V0KGFkZHIpCQkJcHJvY2Vzc29yLnJlc2V0KGFkZHIpCiAjZGVmaW5lIGNwdV9kb19pZGxlKCkJCQlwcm9jZXNzb3IuX2RvX2lkbGUoKQogI2RlZmluZSBjcHVfZGNhY2hlX2NsZWFuX2FyZWEoYWRkcixzeikJcHJvY2Vzc29yLmRjYWNoZV9jbGVhbl9hcmVhKGFkZHIsc3opCi0jZGVmaW5lIGNwdV9zZXRfcHRlKHB0ZXAsIHB0ZSkJCXByb2Nlc3Nvci5zZXRfcHRlKHB0ZXAsIHB0ZSkKKyNkZWZpbmUgY3B1X3NldF9wdGVfZXh0KHB0ZXAscHRlLGV4dCkJcHJvY2Vzc29yLnNldF9wdGVfZXh0KHB0ZXAscHRlLGV4dCkKICNkZWZpbmUgY3B1X2RvX3N3aXRjaF9tbShwZ2QsbW0pCXByb2Nlc3Nvci5zd2l0Y2hfbW0ocGdkLG1tKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2NwdS1zaW5nbGUuaCBiL2luY2x1ZGUvYXNtLWFybS9jcHUtc2luZ2xlLmgKaW5kZXggNjcyM2U2Ny4uMGIxMjBlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2NwdS1zaW5nbGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vY3B1LXNpbmdsZS5oCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIGNwdV9kb19pZGxlCQkJX19jcHVfZm4oQ1BVX05BTUUsX2RvX2lkbGUpCiAjZGVmaW5lIGNwdV9kY2FjaGVfY2xlYW5fYXJlYQkJX19jcHVfZm4oQ1BVX05BTUUsX2RjYWNoZV9jbGVhbl9hcmVhKQogI2RlZmluZSBjcHVfZG9fc3dpdGNoX21tCQlfX2NwdV9mbihDUFVfTkFNRSxfc3dpdGNoX21tKQotI2RlZmluZSBjcHVfc2V0X3B0ZQkJCV9fY3B1X2ZuKENQVV9OQU1FLF9zZXRfcHRlKQorI2RlZmluZSBjcHVfc2V0X3B0ZV9leHQJCQlfX2NwdV9mbihDUFVfTkFNRSxfc2V0X3B0ZV9leHQpCiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCkBAIC00MCw1ICs0MCw1IEBACiBleHRlcm4gaW50IGNwdV9kb19pZGxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgY3B1X2RjYWNoZV9jbGVhbl9hcmVhKHZvaWQgKiwgaW50KTsKIGV4dGVybiB2b2lkIGNwdV9kb19zd2l0Y2hfbW0odW5zaWduZWQgbG9uZyBwZ2RfcGh5cywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotZXh0ZXJuIHZvaWQgY3B1X3NldF9wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CitleHRlcm4gdm9pZCBjcHVfc2V0X3B0ZV9leHQocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IGV4dCk7CiBleHRlcm4gdm9pZCBjcHVfcmVzZXQodW5zaWduZWQgbG9uZyBhZGRyKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2VsZi5oIGIvaW5jbHVkZS9hc20tYXJtL2VsZi5oCmluZGV4IDY0MjM4MmQuLjM2NzlhOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZWxmLmgKQEAgLTUyLDYgKzUyLDcgQEAKICNkZWZpbmUgSFdDQVBfRURTUAkxMjgKICNkZWZpbmUgSFdDQVBfSkFWQQkyNTYKICNkZWZpbmUgSFdDQVBfSVdNTVhUCTUxMgorI2RlZmluZSBIV0NBUF9DUlVOQ0gJMTAyNAogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9mbGF0LmggYi9pbmNsdWRlL2FzbS1hcm0vZmxhdC5oCmluZGV4IDk2Njk0NjQuLjE2ZjUzNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9mbGF0LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2ZsYXQuaApAQCAtNSw3ICs1LDkgQEAKICNpZm5kZWYgX19BUk1fRkxBVF9IX18KICNkZWZpbmUgX19BUk1fRkxBVF9IX18KIAotI2RlZmluZQlmbGF0X3N0YWNrX2FsaWduKHNwKQkJCS8qIG5vdGhpbmcgbmVlZGVkICovCisvKiBBbiBvZGQgbnVtYmVyIG9mIHdvcmRzIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgYWxpZ25tZW50LCBzbworICAgZGVsaWJlcmF0ZWx5IG1pc2FsaWduIHRoZSB2YWx1ZS4gICovCisjZGVmaW5lCWZsYXRfc3RhY2tfYWxpZ24oc3ApCXNwID0gKHZvaWQgKikoKCh1bnNpZ25lZCBsb25nKShzcCkgLSA0KSB8IDQpCiAjZGVmaW5lCWZsYXRfYXJndnBfZW52cF9vbl9zdGFjaygpCQkxCiAjZGVmaW5lCWZsYXRfb2xkX3JhbV9mbGFnKGZsYWdzKQkJKGZsYWdzKQogI2RlZmluZQlmbGF0X3JlbG9jX3ZhbGlkKHJlbG9jLCBzaXplKQkJKChyZWxvYykgPD0gKHNpemUpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaCBiL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKaW5kZXggNmFmNGU2Yi4uZjMxY2RhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oCkBAIC0zNSw2ICszNSw5IEBACiAJICovCiAJX191MzIgZnBpbnN0OwogCV9fdTMyIGZwaW5zdDI7CisjaWZkZWYgQ09ORklHX1NNUAorCV9fdTMyIGNwdTsKKyNlbmRpZgogfTsKIAogdW5pb24gdmZwX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb3AzeHguaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb3AzeHguaAppbmRleCAxMDE4YTc0Li4xM2FjOGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9wM3h4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcDN4eC5oCkBAIC0xNjgsOSArMTY4LDkgQEAKICNkZWZpbmUgSU9QM1hYX1BFUkNSMAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDA3MTApCiAKIC8qIEdlbmVyYWwgUHVycG9zZSBJL08gICovCi0jZGVmaW5lIElPUDNYWF9HUE9FCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX0dQSU9fUkVHKDB4MDAwNCkKLSNkZWZpbmUgSU9QM1hYX0dQSUQJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfR1BJT19SRUcoMHgwMDA4KQotI2RlZmluZSBJT1AzWFhfR1BPRAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9HUElPX1JFRygweDAwMGMpCisjZGVmaW5lIElPUDNYWF9HUE9FCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX0dQSU9fUkVHKDB4MDAwMCkKKyNkZWZpbmUgSU9QM1hYX0dQSUQJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfR1BJT19SRUcoMHgwMDA0KQorI2RlZmluZSBJT1AzWFhfR1BPRAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9HUElPX1JFRygweDAwMDgpCiAKIC8qIFRpbWVycyAgKi8KICNkZWZpbmUgSU9QM1hYX1RVX1RNUjAJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfVElNRVJfUkVHKDB4MDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9pcnEuaAppbmRleCAyODNhZjUwLi4xYjg4MmEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2lycS5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIE5PX0lSUQkoKHVuc2lnbmVkIGludCkoLTEpKQogI2VuZGlmCiAKLXN0cnVjdCBpcnFhY3Rpb247CiAKIC8qCiAgKiBNaWdyYXRpb24gaGVscGVycwpAQCAtMzcsNiArMzYsMTAgQEAKICNkZWZpbmUgSVJRVF9ISUdICShfX0lSUVRfSElHSExWTCkKICNkZWZpbmUgSVJRVF9QUk9CRQlJUlFfVFlQRV9QUk9CRQogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IGlycWFjdGlvbjsKIGV4dGVybiB2b2lkIG1pZ3JhdGVfaXJxcyh2b2lkKTsKICNlbmRpZgogCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmgKaW5kZXggODhjZDVjNy4uYjhjZjJkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWh3ZGVmLmg+CiAKIC8qCiAgKiBKdXN0IGFueSBhcmJpdHJhcnkgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgdm1hbGxvYyBWTSBhcmVhOiB0aGUKQEAgLTE3MCw3ICsxNzEsNiBAQAogI2RlZmluZSBMX1BURV9FWEVDCQkoMSA8PCA2KQogI2RlZmluZSBMX1BURV9ESVJUWQkJKDEgPDwgNykKICNkZWZpbmUgTF9QVEVfU0hBUkVECQkoMSA8PCAxMCkJLyogc2hhcmVkKHY2KSwgY29oZXJlbnQoeHNjMykgKi8KLSNkZWZpbmUgTF9QVEVfQVNJRAkJKDEgPDwgMTEpCS8qIG5vbi1nbG9iYWwgKHVzZSBBU0lELCB2NikgKi8KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMjI4LDcgKzIyOCw3IEBACiAjZGVmaW5lIHBmbl9wdGUocGZuLHByb3QpCShfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKSkKIAogI2RlZmluZSBwdGVfbm9uZShwdGUpCQkoIXB0ZV92YWwocHRlKSkKLSNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcCkJc2V0X3B0ZV9hdCgobW0pLChhZGRyKSwocHRlcCksIF9fcHRlKDApKQorI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQlzZXRfcHRlX2V4dChwdGVwLCBfX3B0ZSgwKSwgMCkKICNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJKHBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkpCiAjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpcixhZGRyKQkocG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArIF9fcHRlX2luZGV4KGFkZHIpKQogI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsYWRkcikJKHBtZF9wYWdlX3ZhZGRyKCooZGlyKSkgKyBfX3B0ZV9pbmRleChhZGRyKSkKQEAgLTIzNiw4ICsyMzYsMTEgQEAKICNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpCWRvIHsgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBzZXRfcHRlKHB0ZXAsIHB0ZSkJY3B1X3NldF9wdGUocHRlcCxwdGUpCi0jZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKKyNkZWZpbmUgc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KSBjcHVfc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KQorCisjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgZG8geyBcCisJc2V0X3B0ZV9leHQocHRlcCwgcHRldmFsLCAoYWRkcikgPj0gUEFHRV9PRkZTRVQgPyAwIDogUFRFX0VYVF9ORyk7IFwKKyB9IHdoaWxlICgwKQogCiAvKgogICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tYXJtL3Byb2Nlc3Nvci5oCmluZGV4IGI0NDJlOGUuLjFiYmYxNjE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Byb2Nlc3Nvci5oCkBAIC0xMDMsMTQgKzEwMywxNCBAQAogI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1CiAKICNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKLSNkZWZpbmUgcHJlZmV0Y2gocHRyKQkJCQlcCi0JKHsJCQkJCVwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQlcCi0JCSJwbGRcdCUwIgkJCVwKLQkJOgkJCQlcCi0JCTogIm8iICgqKGNoYXIgKikocHRyKSkJCVwKLQkJOiAiY2MiKTsJCQlcCi0JfSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaChjb25zdCB2b2lkICpwdHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJwbGRcdCUwIgorCQk6CisJCTogIm8iICgqKGNoYXIgKilwdHIpCisJCTogImNjIik7Cit9CiAKICNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXCiAjZGVmaW5lIHByZWZldGNodyhwdHIpCXByZWZldGNoKHB0cikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaAppbmRleCBmMDVmYmUzLi5hYTIyM2ZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCkBAIC03Myw2ICs3Myw3IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAKIHN0cnVjdCB0aHJlYWRfaW5mbzsKIHN0cnVjdCB0YXNrX3N0cnVjdDsKQEAgLTEzOSwyMyArMTQwLDQ0IEBACiAjZGVmaW5lCWNwdV9pc194c2NhbGUoKQkxCiAjZW5kaWYKIAotI2RlZmluZSBzZXRfY3IoeCkJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAotCSJtY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAwCUAgc2V0IENSIglcCi0JOiA6ICJyIiAoeCkgOiAiY2MiKQotCi0jZGVmaW5lIGdldF9jcigpCQkJCQlcCi0JKHsJCQkJCQlcCi0JdW5zaWduZWQgaW50IF9fdmFsOwkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCVwKLQkibXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMAlAIGdldCBDUiIJXAotCTogIj1yIiAoX192YWwpIDogOiAiY2MiKTsJCQlcCi0JX192YWw7CQkJCQkJXAotCX0pCi0KIGV4dGVybiB1bnNpZ25lZCBsb25nIGNyX25vX2FsaWdubWVudDsJLyogZGVmaW5lZCBpbiBlbnRyeS1hcm12LlMgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIGNyX2FsaWdubWVudDsJLyogZGVmaW5lZCBpbiBlbnRyeS1hcm12LlMgKi8KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2NyKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlhc20oIm1yYyBwMTUsIDAsICUwLCBjMSwgYzAsIDAJQCBnZXQgQ1IiIDogIj1yIiAodmFsKSA6IDogImNjIik7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9jcih1bnNpZ25lZCBpbnQgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGMxLCBjMCwgMAlAIHNldCBDUiIKKwkgIDogOiAiciIgKHZhbCkgOiAiY2MiKTsKK30KKworI2lmbmRlZiBDT05GSUdfU01QCitleHRlcm4gdm9pZCBhZGp1c3RfY3IodW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIHNldCk7CisjZW5kaWYKKworI2RlZmluZSBDUEFDQ19GVUxMKG4pCQkoMyA8PCAobiAqIDIpKQorI2RlZmluZSBDUEFDQ19TVkMobikJCSgxIDw8IChuICogMikpCisjZGVmaW5lIENQQUNDX0RJU0FCTEUobikJKDAgPDwgKG4gKiAyKSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2NvcHJvX2FjY2Vzcyh2b2lkKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJYXNtKCJtcmMgcDE1LCAwLCAlMCwgYzEsIGMwLCAyIEAgZ2V0IGNvcHJvIGFjY2VzcyIKKwkgIDogIj1yIiAodmFsKSA6IDogImNjIik7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9jb3Byb19hY2Nlc3ModW5zaWduZWQgaW50IHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjMSwgYzAsIDIgQCBzZXQgY29wcm8gYWNjZXNzIgorCSAgOiA6ICJyIiAodmFsKSA6ICJjYyIpOworfQorCiAjZGVmaW5lIFVEQkdfVU5ERUZJTkVECSgxIDw8IDApCiAjZGVmaW5lIFVEQkdfU1lTQ0FMTAkoMSA8PCAxKQogI2RlZmluZSBVREJHX0JBREFCT1JUCSgxIDw8IDIpCkBAIC0yMTEsOCArMjMzLDYgQEAKIHsKIH0KIAotI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+Ci0KICNpZmRlZiBDT05GSUdfU01QCiAKICNkZWZpbmUgc21wX21iKCkJCW1iKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tYXJtL3Rlcm1iaXRzLmgKaW5kZXggYmJjNmUxZC4uYTNmNGZlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3Rlcm1iaXRzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Rlcm1iaXRzLmgKQEAgLTE1LDYgKzE1LDE4IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKworCiAvKiBjX2NjIGNoYXJhY3RlcnMgKi8KICNkZWZpbmUgVklOVFIgMAogI2RlZmluZSBWUVVJVCAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCmluZGV4IGQ5YjhiZGQuLjUwMTQ3OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS90aHJlYWRfaW5mby5oCkBAIC0xNDcsNiArMTQ3LDcgQEAKICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CiAjZGVmaW5lIFRJRl9VU0lOR19JV01NWFQJMTcKICNkZWZpbmUgVElGX01FTURJRQkJMTgKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTkKIAogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDEgPDwgVElGX05PVElGWV9SRVNVTUUpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCkBAIC0xNTQsNiArMTU1LDcgQEAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxIDw8IFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9VU0lOR19JV01NWFQJKDEgPDwgVElGX1VTSU5HX0lXTU1YVCkKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAKIC8qCiAgKiBDaGFuZ2UgdGhlc2UgYW5kIHlvdSBicmVhayBBU00gY29kZSBpbiBlbnRyeS1jb21tb24uUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCmluZGV4IGQ0NGM2MjkuLjk3ZTcwNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKQEAgLTM0Nyw2ICszNDcsMzEgQEAKICNkZWZpbmUgX19OUl9tYmluZAkJCShfX05SX1NZU0NBTExfQkFTRSszMTkpCiAjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMyMCkKICNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5CQkoX19OUl9TWVNDQUxMX0JBU0UrMzIxKQorI2RlZmluZSBfX05SX29wZW5hdAkJCShfX05SX1NZU0NBTExfQkFTRSszMjIpCisjZGVmaW5lIF9fTlJfbWtkaXJhdAkJCShfX05SX1NZU0NBTExfQkFTRSszMjMpCisjZGVmaW5lIF9fTlJfbWtub2RhdAkJCShfX05SX1NZU0NBTExfQkFTRSszMjQpCisjZGVmaW5lIF9fTlJfZmNob3duYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzI1KQorI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJCShfX05SX1NZU0NBTExfQkFTRSszMjYpCisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMyNykKKyNkZWZpbmUgX19OUl91bmxpbmthdAkJCShfX05SX1NZU0NBTExfQkFTRSszMjgpCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzI5KQorI2RlZmluZSBfX05SX2xpbmthdAkJCShfX05SX1NZU0NBTExfQkFTRSszMzApCisjZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzMSkKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzMikKKyNkZWZpbmUgX19OUl9mY2htb2RhdAkJCShfX05SX1NZU0NBTExfQkFTRSszMzMpCisjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzNCkKKwkJCQkJLyogMzM1IGZvciBwc2VsZWN0NiAqLworCQkJCQkvKiAzMzYgZm9yIHBwb2xsICovCisjZGVmaW5lIF9fTlJfdW5zaGFyZQkJCShfX05SX1NZU0NBTExfQkFTRSszMzcpCisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CQkoX19OUl9TWVNDQUxMX0JBU0UrMzM4KQorI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzOSkKKyNkZWZpbmUgX19OUl9zcGxpY2UJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzQwKQorI2RlZmluZSBfX05SX2FybV9zeW5jX2ZpbGVfcmFuZ2UJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0MSkKKyNkZWZpbmUgX19OUl90ZWUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzQyKQorI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0MykKKyNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0NCkKKyNkZWZpbmUgX19OUl9nZXRjcHUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzQ1KQorCQkJCQkvKiAzNDYgZm9yIGVwb2xsX3B3YWl0ICovCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIFNXSXMgYXJlIEFSTSBwcml2YXRlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvY2FjaGVmbHVzaC5oCmluZGV4IDljMWI5YzcuLjE0YWUxNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9jYWNoZWZsdXNoLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKSAgICAgICAgICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkgICAgICAgICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pICAgICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsc3RhcnQsZW5kKSAgICAgICAgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSx2bWFkZHIscGZuKSAgICAgICAgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tYXJtMjYvdGVybWJpdHMuaAppbmRleCBiYmM2ZTFkLi5hM2Y0ZmUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3Rlcm1iaXRzLmgKQEAgLTE1LDYgKzE1LDE4IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKworCiAvKiBjX2NjIGNoYXJhY3RlcnMgKi8KICNkZWZpbmUgVklOVFIgMAogI2RlZmluZSBWUVVJVCAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9hdDMyYXA3MDAwLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9hdDMyYXA3MDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE4NWUwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwL2F0MzJhcDcwMDAuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogUGluIGRlZmluaXRpb25zIGZvciBBVDMyQVA3MDAwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9BVDMyQVA3MDAwX0hfXworI2RlZmluZSBfX0FTTV9BUkNIX0FUMzJBUDcwMDBfSF9fCisKKyNkZWZpbmUgR1BJT19QRVJJUEhfQQkwCisjZGVmaW5lIEdQSU9fUEVSSVBIX0IJMQorCisjZGVmaW5lIE5SX0dQSU9fQ09OVFJPTExFUlMJNAorCisvKgorICogUGluIG51bWJlcnMgaWRlbnRpZnlpbmcgc3BlY2lmaWMgR1BJTyBwaW5zIG9uIHRoZSBjaGlwLiBUaGV5IGNhbgorICogYWxzbyBiZSBjb252ZXJ0ZWQgdG8gSVJRIG51bWJlcnMgYnkgcGFzc2luZyB0aGVtIHRocm91Z2gKKyAqIGdwaW9fdG9faXJxKCkuCisgKi8KKyNkZWZpbmUgR1BJT19QSU9BX0JBU0UJKDApCisjZGVmaW5lIEdQSU9fUElPQl9CQVNFCShHUElPX1BJT0FfQkFTRSArIDMyKQorI2RlZmluZSBHUElPX1BJT0NfQkFTRQkoR1BJT19QSU9CX0JBU0UgKyAzMikKKyNkZWZpbmUgR1BJT19QSU9EX0JBU0UJKEdQSU9fUElPQ19CQVNFICsgMzIpCisKKyNkZWZpbmUgR1BJT19QSU5fUEEoTikJKEdQSU9fUElPQV9CQVNFICsgKE4pKQorI2RlZmluZSBHUElPX1BJTl9QQihOKQkoR1BJT19QSU9CX0JBU0UgKyAoTikpCisjZGVmaW5lIEdQSU9fUElOX1BDKE4pCShHUElPX1BJT0NfQkFTRSArIChOKSkKKyNkZWZpbmUgR1BJT19QSU5fUEQoTikJKEdQSU9fUElPRF9CQVNFICsgKE4pKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9BVDMyQVA3MDAwX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvYm9hcmQuaCBiL2luY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwL2JvYXJkLmgKaW5kZXggYTM5YjNlOS4uYjEyMGVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9ib2FyZC5oCkBAIC0yMSwxMCArMjEsNyBAQAogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KHVuc2lnbmVkIGludCBpZCk7CiAKIHN0cnVjdCBldGhfcGxhdGZvcm1fZGF0YSB7Ci0JdTgJdmFsaWQ7Ci0JdTgJbWlpX3BoeV9hZGRyOwogCXU4CWlzX3JtaWk7Ci0JdTgJaHdfYWRkcls2XTsKIH07CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKIGF0MzJfYWRkX2RldmljZV9ldGgodW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvcG9ydG11eC5oIGIvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXAvcG9ydG11eC5oCmluZGV4IDRkNTA0MjEuLjgzYzY5MDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwL3BvcnRtdXguaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcC9wb3J0bXV4LmgKQEAgLTcsMTAgKzcsMjAgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2lmbmRlZiBfX0FTTV9BVlIzMl9BVDMyX1BPUlRNVVhfSF9fCi0jZGVmaW5lIF9fQVNNX0FWUjMyX0FUMzJfUE9SVE1VWF9IX18KKyNpZm5kZWYgX19BU01fQVJDSF9QT1JUTVVYX0hfXworI2RlZmluZSBfX0FTTV9BUkNIX1BPUlRNVVhfSF9fCiAKLXZvaWQgcG9ydG11eF9zZXRfZnVuYyh1bnNpZ25lZCBpbnQgcG9ydG11eF9pZCwgdW5zaWduZWQgaW50IHBpbl9pZCwKLQkJICAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uX2lkKTsKKy8qCisgKiBTZXQgdXAgcGluIG11bHRpcGxleGluZywgY2FsbGVkIGZyb20gYm9hcmQgaW5pdCBvbmx5LgorICoKKyAqIFRoZSBmb2xsb3dpbmcgZmxhZ3MgZGV0ZXJtaW5lIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBwaW4uCisgKi8KKyNkZWZpbmUgQVQzMl9HUElPRl9QVUxMVVAJMHgwMDAwMDAwMQkvKiBFbmFibGUgcHVsbC11cCAqLworI2RlZmluZSBBVDMyX0dQSU9GX09VVFBVVAkweDAwMDAwMDAyCS8qIEVuYWJsZSBvdXRwdXQgZHJpdmVyICovCisjZGVmaW5lIEFUMzJfR1BJT0ZfSElHSAkJMHgwMDAwMDAwNAkvKiBTZXQgb3V0cHV0IGhpZ2ggKi8KIAotI2VuZGlmIC8qIF9fQVNNX0FWUjMyX0FUMzJfUE9SVE1VWF9IX18gKi8KK3ZvaWQgYXQzMl9zZWxlY3RfcGVyaXBoKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBwZXJpcGgsCisJCQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKK3ZvaWQgYXQzMl9zZWxlY3RfZ3Bpbyh1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUE9SVE1VWF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLWF2cjMyL2NhY2hlZmx1c2guaAppbmRleCBmMWJmMTcwLi5kZmFhYTg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIvY2FjaGVmbHVzaC5oCkBAIC04Nyw2ICs4Nyw3IEBACiAgKi8KICNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tYXZyMzIvZG1hLW1hcHBpbmcuaAppbmRleCAwNTgwYjVkLi41YzAxZTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL2RtYS1tYXBwaW5nLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsCiAJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlkbWFfY2FjaGVfc3luYyhjcHVfYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlkbWFfY2FjaGVfc3luYyhkZXYsIGNwdV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pOwogCXJldHVybiB2aXJ0X3RvX2J1cyhjcHVfYWRkcik7CiB9CiAKQEAgLTIxMSw3ICsyMTEsNyBAQAogCiAJCXNnW2ldLmRtYV9hZGRyZXNzID0gcGFnZV90b19idXMoc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQ7CiAJCXZpcnQgPSBwYWdlX2FkZHJlc3Moc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQ7Ci0JCWRtYV9jYWNoZV9zeW5jKHZpcnQsIHNnW2ldLmxlbmd0aCwgZGlyZWN0aW9uKTsKKwkJZG1hX2NhY2hlX3N5bmMoZGV2LCB2aXJ0LCBzZ1tpXS5sZW5ndGgsIGRpcmVjdGlvbik7CiAJfQogCiAJcmV0dXJuIG5lbnRzOwpAQCAtMjU2LDE0ICsyNTYsMTQgQEAKIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAogCQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlkbWFfY2FjaGVfc3luYyhidXNfdG9fdmlydChkbWFfaGFuZGxlKSwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlkbWFfY2FjaGVfc3luYyhkZXYsIGJ1c190b192aXJ0KGRtYV9oYW5kbGUpLCBzaXplLCBkaXJlY3Rpb24pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAogCQkJICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlkbWFfY2FjaGVfc3luYyhidXNfdG9fdmlydChkbWFfaGFuZGxlKSwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlkbWFfY2FjaGVfc3luYyhkZXYsIGJ1c190b192aXJ0KGRtYV9oYW5kbGUpLCBzaXplLCBkaXJlY3Rpb24pOwogfQogCiAvKioKQEAgLTI4Niw3ICsyODYsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKyspIHsKLQkJZG1hX2NhY2hlX3N5bmMocGFnZV9hZGRyZXNzKHNnW2ldLnBhZ2UpICsgc2dbaV0ub2Zmc2V0LAorCQlkbWFfY2FjaGVfc3luYyhkZXYsIHBhZ2VfYWRkcmVzcyhzZ1tpXS5wYWdlKSArIHNnW2ldLm9mZnNldCwKIAkJCSAgICAgICBzZ1tpXS5sZW5ndGgsIGRpcmVjdGlvbik7CiAJfQogfQpAQCAtMjk4LDcgKzI5OCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKykgewotCQlkbWFfY2FjaGVfc3luYyhwYWdlX2FkZHJlc3Moc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQsCisJCWRtYV9jYWNoZV9zeW5jKGRldiwgcGFnZV9hZGRyZXNzKHNnW2ldLnBhZ2UpICsgc2dbaV0ub2Zmc2V0LAogCQkJICAgICAgIHNnW2ldLmxlbmd0aCwgZGlyZWN0aW9uKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9wZ2FsbG9jLmgKaW5kZXggNzQ5MmNmYi4uYmI4MmU3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL3BnYWxsb2MuaApAQCAtMjgsNyArMjgsNyBAQAogc3RhdGljIF9faW5saW5lX18gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAl1bnNpZ25lZCBpbnQgcGdkX3NpemUgPSAoVVNFUl9QVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKTsKLQlwZ2RfdCAqcGdkID0gKHBnZF90ICopa21hbGxvYyhwZ2Rfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJcGdkX3QgKnBnZCA9IGttYWxsb2MocGdkX3NpemUsIEdGUF9LRVJORUwpOwogCiAJaWYgKHBnZCkKIAkJbWVtc2V0KHBnZCwgMCwgcGdkX3NpemUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWF2cjMyL3Rlcm1iaXRzLmgKaW5kZXggOWRjNmVhYy4uYzIxNWZhZmRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL3Rlcm1iaXRzLmgKQEAgLTE3LDYgKzE3LDE3IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKwogLyogY19jYyBjaGFyYWN0ZXJzICovCiAjZGVmaW5lIFZJTlRSIDAKICNkZWZpbmUgVlFVSVQgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1jcmlzL2NhY2hlZmx1c2guaAppbmRleCA3MmNjNzFkLi4wMWFmMmRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2NhY2hlZmx1c2guaApAQCAtOSw2ICs5LDcgQEAKICAqLwogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tY3Jpcy90ZXJtYml0cy5oCmluZGV4IGJlMDgzNmQuLjhkOGNlYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3Rlcm1iaXRzLmgKQEAgLTE5LDYgKzE5LDE3IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKwogLyogY19jYyBjaGFyYWN0ZXJzICovCiAjZGVmaW5lIFZJTlRSIDAKICNkZWZpbmUgVlFVSVQgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L0tidWlsZCBiL2luY2x1ZGUvYXNtLWZydi9LYnVpbGQKaW5kZXggYzY4ZTE2OC4uOTY2YTk4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L0tidWlsZAorKysgYi9pbmNsdWRlL2FzbS1mcnYvS2J1aWxkCkBAIC0xICsxLDcgQEAKIGluY2x1ZGUgaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCisKK2hlYWRlci15ICs9IHJlZ2lzdGVycy5oCisKK3VuaWZkZWYteSArPSB0ZXJtaW9zLmgKK3VuaWZkZWYteSArPSBwdHJhY2UuaAordW5pZmRlZi15ICs9IHBhZ2UuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tZnJ2L2JpdG9wcy5oCmluZGV4IDFmNzBkNDcuLmY4NTYwZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvYml0b3BzLmgKQEAgLTI1Niw2ICsyNTYsNTAgQEAKIAlyZXR1cm4gMzEgLSBiaXQ7CiB9CiAKKy8qCisgKiBzcGVjaWFsIHNsaW1saW5lIHZlcnNpb24gb2YgZmxzKCkgZm9yIGNhbGN1bGF0aW5nIGlsb2cyX3UzMigpCisgKiAtIG5vdGU6IG5vIHByb3RlY3Rpb24gYWdhaW5zdCBuID09IDAKKyAqLworI2RlZmluZSBBUkNIX0hBU19JTE9HMl9VMzIKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoY29uc3QpKQoraW50IF9faWxvZzJfdTMyKHUzMiBuKQoreworCWludCBiaXQ7CisJYXNtKCJzY2FuICUxLGdyMCwlMCIgOiAiPXIiKGJpdCkgOiAiciIobikpOworCXJldHVybiAzMSAtIGJpdDsKK30KKworLyoKKyAqIHNwZWNpYWwgc2xpbWxpbmUgdmVyc2lvbiBvZiBmbHM2NCgpIGZvciBjYWxjdWxhdGluZyBpbG9nMl91NjQoKQorICogLSBub3RlOiBubyBwcm90ZWN0aW9uIGFnYWluc3QgbiA9PSAwCisgKi8KKyNkZWZpbmUgQVJDSF9IQVNfSUxPRzJfVTY0CitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGNvbnN0KSkKK2ludCBfX2lsb2cyX3U2NCh1NjQgbikKK3sKKwl1bmlvbiB7CisJCXU2NCBsbDsKKwkJc3RydWN0IHsgdTMyIGgsIGw7IH07CisJfSBfOworCWludCBiaXQsIHgsIHk7CisKKwlfLmxsID0gbjsKKworCWFzbSgiCXN1YmNjCQklMyxncjAsZ3IwLGljYzAJCVxuIgorCSAgICAiCWNrZXEJCWljYzAsY2M0CQlcbiIKKwkgICAgIgljc2Nhbi5wCQklMyxncjAsJTAJLGNjNCwwCVxuIgorCSAgICAiICAgc2V0bG9zCQkjNjMsJTEJCQlcbiIKKwkgICAgIgljc2Nhbi5wCQklNCxncjAsJTAJLGNjNCwxCVxuIgorCSAgICAiICAgc2V0bG9zCQkjMzEsJTIJCQlcbiIKKwkgICAgIgljc3ViLnAJCSUxLCUwLCUwCSxjYzQsMAlcbiIKKwkgICAgIgljc3ViCQklMiwlMCwlMAksY2M0LDEJXG4iCisJICAgIDogIj0mciIoYml0KSwgIj1yIih4KSwgIj1yIih5KQorCSAgICA6ICIwciIoXy5oKSwgInIiKF8ubCkKKwkgICAgOiAiaWNjMCIsICJjYzQiCisJICAgICk7CisJcmV0dXJuIGJpdDsKK30KKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1mcnYvY2FjaGVmbHVzaC5oCmluZGV4IGVhYTU4MjYuLjAyNTAwNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2NhY2hlZmx1c2guaApAQCAtMjAsNiArMjAsNyBAQAogICovCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8ge30gd2hpbGUoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKQkJCWRvIHt9IHdoaWxlKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKG1tLCBzdGFydCwgZW5kKQlkbyB7fSB3aGlsZSgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHt9IHdoaWxlKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHt9IHdoaWxlKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcGFnZS5oIGIvaW5jbHVkZS9hc20tZnJ2L3BhZ2UuaAppbmRleCAxMzRjYzBjLi4yMTNkOTJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wYWdlLmgKQEAgLTc2LDggKzc2LDYgQEAKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjaWZkZWYgQ09ORklHX0NPTlRJR1VPVVNfUEFHRV9BTExPQwogI2RlZmluZSBXQU5UX1BBR0VfVklSVFVBTAkxCiAjZW5kaWYKQEAgLTg1LDQgKzgzLDYgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYWdlLmg+CiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNlbmRpZiAvKiBfQVNNX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tZnJ2L3B0cmFjZS5oCmluZGV4IDlhMjI0MWIuLmNmNjkzNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcHRyYWNlLmgKQEAgLTEyLDkgKzEyLDExIEBACiAjZGVmaW5lIF9BU01fUFRSQUNFX0gKIAogI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KKyNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAKICNkZWZpbmUgaW5fc3lzY2FsbChyZWdzKSAoKChyZWdzKS0+dGJyICYgVEJSX1RUKSA9PSBUQlJfVFRfVFJBUDApCisjZW5kaWYKIAogCiAjZGVmaW5lIFBUX1BTUgkJMApAQCAtNjAsNiArNjIsNyBAQAogI2RlZmluZSBQVFJBQ0VfR0VURkRQSUNfRVhFQwkwCS8qIFthZGRyXSByZXF1ZXN0IHRoZSBleGVjdXRhYmxlIGxvYWRtYXAgKi8KICNkZWZpbmUgUFRSQUNFX0dFVEZEUElDX0lOVEVSUAkxCS8qIFthZGRyXSByZXF1ZXN0IHRoZSBpbnRlcnByZXRlciBsb2FkbWFwICovCiAKKyNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKgpAQCAtNzQsNiArNzcsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdXNlcl9zdGFjayhjb25zdCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKICNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSAoKHJlZ3MpLT5wYykKKyNlbmRpZgogCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9BU01fUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tZnJ2L3Rlcm1iaXRzLmgKaW5kZXggNzRmMjBkNi4uMmQ2ZDM4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3Rlcm1iaXRzLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3Rlcm1iaXRzLmgKQEAgLTE3LDYgKzE3LDE3IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKwogLyogY19jYyBjaGFyYWN0ZXJzICovCiAjZGVmaW5lIFZJTlRSIDAKICNkZWZpbmUgVlFVSVQgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3Rlcm1pb3MuaCBiL2luY2x1ZGUvYXNtLWZydi90ZXJtaW9zLmgKaW5kZXggYjRhNjY0ZS4uODg0MGNmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3Rlcm1pb3MuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdGVybWlvcy5oCkBAIC02OSw2ICs2OSw4IEBACiAjZGVmaW5lIE5fU1lOQ19QUFAJMTQKICNkZWZpbmUgTl9IQ0kJCTE1ICAvKiBCbHVldG9vdGggSENJIFVBUlQgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90ZXJtaW9zLmg+CisjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fVEVSTUlPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWZydi90aHJlYWRfaW5mby5oCmluZGV4IGQ2NmM0OGUuLmQ4ODFmNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi90aHJlYWRfaW5mby5oCkBAIC0xMTYsNiArMTE2LDcgQEAKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk2CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTE3CS8qIE9PTSBraWxsZXIga2lsbGVkIHByb2Nlc3MgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTgJLyogZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKQEAgLTEyNSw2ICsxMjYsNyBAQAogI2RlZmluZSBfVElGX0lSRVQJCSgxIDw8IFRJRl9JUkVUKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMSA8PCBUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxIDw8IFRJRl9QT0xMSU5HX05SRkxBRykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMEZGRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSwkweDAwMDBGRkZGCS8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1LXNwYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaAppbmRleCBjOTJhZTBmLi4xNGZhZTFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTQsNiArNCwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCisKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19CVUcKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgYnVnX2VudHJ5IHsKKwl1bnNpZ25lZCBsb25nCWJ1Z19hZGRyOworI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCisJY29uc3QgY2hhcgkqZmlsZTsKKwl1bnNpZ25lZCBzaG9ydAlsaW5lOworI2VuZGlmCisJdW5zaWduZWQgc2hvcnQJZmxhZ3M7Cit9OworI2VuZGlmCQkvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBCVUdGTEFHX1dBUk5JTkcJKDE8PDApCisjZW5kaWYJLyogQ09ORklHX0dFTkVSSUNfQlVHICovCisKICNpZm5kZWYgSEFWRV9BUkNIX0JVRwogI2RlZmluZSBCVUcoKSBkbyB7IFwKIAlwcmludGsoIkJVRzogZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOyBcCkBAIC0xOSw3ICszNSw3IEBACiAjZGVmaW5lIFdBUk5fT04oY29uZGl0aW9uKSAoewkJCQkJCVwKIAl0eXBlb2YoY29uZGl0aW9uKSBfX3JldF93YXJuX29uID0gKGNvbmRpdGlvbik7CQkJXAogCWlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkgewkJCQkJXAotCQlwcmludGsoIkJVRzogd2FybmluZyBhdCAlczolZC8lcygpXG4iLCBfX0ZJTEVfXywJXAorCQlwcmludGsoIkJVRzogYXQgJXM6JWQgJXMoKVxuIiwgX19GSUxFX18sCQlcCiAJCQlfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJCQlcCiAJCWR1bXBfc3RhY2soKTsJCQkJCQlcCiAJfQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9saWJhdGEtcG9ydG1hcC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9saWJhdGEtcG9ydG1hcC5oCmluZGV4IDkyMDJmZDAuLjYyZmIzNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbGliYXRhLXBvcnRtYXAuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2xpYmF0YS1wb3J0bWFwLmgKQEAgLTMsMTAgKzMsMTAgQEAKIAogI2RlZmluZSBBVEFfUFJJTUFSWV9DTUQJCTB4MUYwCiAjZGVmaW5lIEFUQV9QUklNQVJZX0NUTAkJMHgzRjYKLSNkZWZpbmUgQVRBX1BSSU1BUllfSVJRCQkxNAorI2RlZmluZSBBVEFfUFJJTUFSWV9JUlEoZGV2KQkxNAogCiAjZGVmaW5lIEFUQV9TRUNPTkRBUllfQ01ECTB4MTcwCiAjZGVmaW5lIEFUQV9TRUNPTkRBUllfQ1RMCTB4Mzc2Ci0jZGVmaW5lIEFUQV9TRUNPTkRBUllfSVJRCTE1CisjZGVmaW5lIEFUQV9TRUNPTkRBUllfSVJRKGRldikJMTUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGFnZS5oCmluZGV4IGE5NmI1ZDkuLmI1NTA1MmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGFnZS5oCkBAIC00LDIxICs0LDUxIEBACiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCi0vKiBQdXJlIDJebiB2ZXJzaW9uIG9mIGdldF9vcmRlciAqLwotc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKKy8qCisgKiBub24tY29uc3QgcHVyZSAyXm4gdmVyc2lvbiBvZiBnZXRfb3JkZXIKKyAqIC0gdGhlIGFyY2ggbWF5IG92ZXJyaWRlIHRoZXNlIGluIGFzbS9iaXRvcHMuaCBpZiB0aGV5IGNhbiBiZSBpbXBsZW1lbnRlZAorICogICBtb3JlIGVmZmljaWVudGx5IHRoYW4gdXNpbmcgdGhlIGFyY2ggbG9nMiByb3V0aW5lcworICogLSB3ZSB1c2UgdGhlIG5vbi1jb25zdCBsb2cyKCkgaW5zdGVhZCBpZiB0aGUgYXJjaCBoYXMgZGVmaW5lZCBvbmUgc3VpdGFibGUKKyAqLworI2lmbmRlZiBBUkNIX0hBU19HRVRfT1JERVIKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoY29uc3QpKQoraW50IF9fZ2V0X29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IHBhZ2Vfc2hpZnQpCiB7CisjaWYgQklUU19QRVJfTE9ORyA9PSAzMiAmJiBkZWZpbmVkKEFSQ0hfSEFTX0lMT0cyX1UzMikKKwlpbnQgb3JkZXIgPSBfX2lsb2cyX3UzMihzaXplKSAtIHBhZ2Vfc2hpZnQ7CisJcmV0dXJuIG9yZGVyID49IDAgPyBvcmRlciA6IDA7CisjZWxpZiBCSVRTX1BFUl9MT05HID09IDY0ICYmIGRlZmluZWQoQVJDSF9IQVNfSUxPRzJfVTY0KQorCWludCBvcmRlciA9IF9faWxvZzJfdTY0KHNpemUpIC0gcGFnZV9zaGlmdDsKKwlyZXR1cm4gb3JkZXIgPj0gMCA/IG9yZGVyIDogMDsKKyNlbHNlCiAJaW50IG9yZGVyOwogCi0Jc2l6ZSA9IChzaXplIC0gMSkgPj4gKFBBR0VfU0hJRlQgLSAxKTsKKwlzaXplID0gKHNpemUgLSAxKSA+PiAocGFnZV9zaGlmdCAtIDEpOwogCW9yZGVyID0gLTE7CiAJZG8gewogCQlzaXplID4+PSAxOwogCQlvcmRlcisrOwogCX0gd2hpbGUgKHNpemUpOwogCXJldHVybiBvcmRlcjsKKyNlbmRpZgogfQorI2VuZGlmCisKKy8qKgorICogZ2V0X29yZGVyIC0gY2FsY3VsYXRlIGxvZzIocGFnZXMpIHRvIGhvbGQgYSBibG9jayBvZiB0aGUgc3BlY2lmaWVkIHNpemUKKyAqIEBuIC0gc2l6ZQorICoKKyAqIGNhbGN1bGF0ZSBhbGxvY2F0aW9uIG9yZGVyIGJhc2VkIG9uIHRoZSBjdXJyZW50IHBhZ2Ugc2l6ZQorICogLSB0aGlzIGNhbiBiZSB1c2VkIHRvIGluaXRpYWxpc2UgZ2xvYmFsIHZhcmlhYmxlcyBmcm9tIGNvbnN0YW50IGRhdGEKKyAqLworI2RlZmluZSBnZXRfb3JkZXIobikJCQkJCQkJXAorKAkJCQkJCQkJCVwKKwlfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/CQkJCQlcCisJKChuIDwgKDFVTCA8PCBQQUdFX1NISUZUKSkgPyAwIDogaWxvZzIobikgLSBQQUdFX1NISUZUKSA6CVwKKwlfX2dldF9vcmRlcihuLCBQQUdFX1NISUZUKQkJCQkJXAorICkKIAogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90ZXJtaW9zLmgKaW5kZXggMWU1OGNhMy4uMzc2OWU2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90ZXJtaW9zLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90ZXJtaW9zLmgKQEAgLTExLDcgKzExLDcgQEAKIC8qCiAgKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgogICovCi1zdGF0aWMgaW5saW5lIGludCB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyhzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywKK3N0YXRpYyBpbmxpbmUgaW50IHVzZXJfdGVybWlvX3RvX2tlcm5lbF90ZXJtaW9zKHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKIAkJCQkJCXN0cnVjdCB0ZXJtaW8gX191c2VyICp0ZXJtaW8pCiB7CiAJdW5zaWduZWQgc2hvcnQgdG1wOwpAQCAtNDgsNyArNDgsNyBAQAogICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KICAqLwogc3RhdGljIGlubGluZSBpbnQga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8oc3RydWN0IHRlcm1pbyBfX3VzZXIgKnRlcm1pbywKLQkJCQkJCXN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zKQorCQkJCQkJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zKQogewogCWlmIChwdXRfdXNlcih0ZXJtaW9zLT5jX2lmbGFnLCAmdGVybWlvLT5jX2lmbGFnKSA8IDAgfHwKIAkgICAgcHV0X3VzZXIodGVybWlvcy0+Y19vZmxhZywgJnRlcm1pby0+Y19vZmxhZykgPCAwIHx8CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggNGQ0YzYyZC4uOWZjYzhkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtMzUsNiArMzUsOSBAQAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3BjaV9maXh1cHNfZW5hYmxlKSA9IC47CQlcCiAJCSooLnBjaV9maXh1cF9lbmFibGUpCQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fZW5kX3BjaV9maXh1cHNfZW5hYmxlKSA9IC47CQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfcGNpX2ZpeHVwc19yZXN1bWUpID0gLjsJCVwKKwkJKigucGNpX2ZpeHVwX3Jlc3VtZSkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19lbmRfcGNpX2ZpeHVwc19yZXN1bWUpID0gLjsJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJLyogUmFwaWRJTyByb3V0ZSBvcHMgKi8JCQkJCQlcCkBAIC0xMTksOCArMTIyLDYgQEAKIAkJKihfX2tzeW10YWJfc3RyaW5ncykJCQkJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCi0JRUhfRlJBTUUJCQkJCQkJXAotCQkJCQkJCQkJXAogCS8qIEJ1aWx0LWluIG1vZHVsZSBwYXJhbWV0ZXJzLiAqLwkJCQlcCiAJX19wYXJhbSA6IEFUKEFERFIoX19wYXJhbSkgLSBMT0FEX09GRlNFVCkgewkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3BhcmFtKSA9IC47CQkJXApAQCAtMTYwLDI2ICsxNjEsNiBAQAogCQkqKC5rcHJvYmVzLnRleHQpCQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fa3Byb2Jlc190ZXh0X2VuZCkgPSAuOwogCi0jaWZkZWYgQ09ORklHX1NUQUNLX1VOV0lORAotI2RlZmluZSBFSF9GUkFNRQkJCQkJCQlcCi0JCS8qIFVud2luZCBkYXRhIGJpbmFyeSBzZWFyY2ggdGFibGUgKi8JCQlcCi0JCS4gPSBBTElHTig4KTsJCQkJCQlcCi0gICAgICAgIAkuZWhfZnJhbWVfaGRyIDogQVQoQUREUiguZWhfZnJhbWVfaGRyKSAtIExPQURfT0ZGU0VUKSB7CVwKLQkJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfdW53aW5kX2hkcikgPSAuOwkJXAotCQkJKiguZWhfZnJhbWVfaGRyKQkJCQlcCi0JCQlWTUxJTlVYX1NZTUJPTChfX2VuZF91bndpbmRfaGRyKSA9IC47CQlcCi0JCX0JCQkJCQkJXAotCQkvKiBVbndpbmQgZGF0YSAqLwkJCQkJXAotCQkuID0gQUxJR04oOCk7CQkJCQkJXAotCQkuZWhfZnJhbWUgOiBBVChBRERSKC5laF9mcmFtZSkgLSBMT0FEX09GRlNFVCkgewkJXAotCQkJVk1MSU5VWF9TWU1CT0woX19zdGFydF91bndpbmQpID0gLjsJCVwKLQkJICAJKiguZWhfZnJhbWUpCQkJCQlcCi0JCQlWTUxJTlVYX1NZTUJPTChfX2VuZF91bndpbmQpID0gLjsJCVwKLQkJfQotI2Vsc2UKLSNkZWZpbmUgRUhfRlJBTUUKLSNlbmRpZgotCiAJCS8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgogCQlTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvCiAJCXRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KQEAgLTIxOCw2ICsxOTksMTQgQEAKIAkJLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQkJXAogCQkuY29tbWVudCAwIDogeyAqKC5jb21tZW50KSB9CiAKKyNkZWZpbmUgQlVHX1RBQkxFCQkJCQkJCVwKKwkuID0gQUxJR04oOCk7CQkJCQkJCVwKKwlfX2J1Z190YWJsZSA6IEFUKEFERFIoX19idWdfdGFibGUpIC0gTE9BRF9PRkZTRVQpIHsJCVwKKwkJX19zdGFydF9fX2J1Z190YWJsZSA9IC47CQkJCVwKKwkJKihfX2J1Z190YWJsZSkJCQkJCQlcCisJCV9fc3RvcF9fX2J1Z190YWJsZSA9IC47CQkJCQlcCisJfQorCiAjZGVmaW5lIE5PVEVTCQkJCQkJCQlcCiAJCS5ub3RlcyA6IHsgKigubm90ZS4qKSB9IDpub3RlCiAKQEAgLTIzNCw2ICsyMjMsNyBAQAogICAJKiguaW5pdGNhbGw0cy5pbml0KQkJCQkJCVwKICAgCSooLmluaXRjYWxsNS5pbml0KQkJCQkJCVwKICAgCSooLmluaXRjYWxsNXMuaW5pdCkJCQkJCQlcCisJKiguaW5pdGNhbGxyb290ZnMuaW5pdCkJCQkJCQlcCiAgIAkqKC5pbml0Y2FsbDYuaW5pdCkJCQkJCQlcCiAgIAkqKC5pbml0Y2FsbDZzLmluaXQpCQkJCQkJXAogICAJKiguaW5pdGNhbGw3LmluaXQpCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20taDgzMDAvY2FjaGVmbHVzaC5oCmluZGV4IDFlNGQ5NWIuLjcxMjEwZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9jYWNoZWZsdXNoLmgKQEAgLTEyLDYgKzEyLDcgQEAKIAogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQogI2RlZmluZQlmbHVzaF9jYWNoZV9tbShtbSkKKyNkZWZpbmUJZmx1c2hfY2FjaGVfZHVwX21tKG1tKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZQlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsYSxiKQogI2RlZmluZQlmbHVzaF9jYWNoZV9wYWdlKHZtYSxwLHBmbikKICNkZWZpbmUJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1oODMwMC90ZXJtYml0cy5oCmluZGV4IGZhNjlhZTAuLjZhMWY0ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3Rlcm1iaXRzLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdGVybWJpdHMuaApAQCAtMTcsNiArMTcsMTcgQEAKIAljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KIH07CiAKK3N0cnVjdCBrdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCiAvKiBjX2NjIGNoYXJhY3RlcnMgKi8KICNkZWZpbmUgVklOVFIgMAogI2RlZmluZSBWUVVJVCAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2FjcGkuaCBiL2luY2x1ZGUvYXNtLWkzODYvYWNwaS5oCmluZGV4IGM4MGIzYTkuLjdjZmFkOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYWNwaS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYWNwaS5oCkBAIC01NiwzMCArNTYsOCBAQAogI2RlZmluZSBBQ1BJX0VOQUJMRV9JUlFTKCkgIGxvY2FsX2lycV9lbmFibGUoKQogI2RlZmluZSBBQ1BJX0ZMVVNIX0NQVV9DQUNIRSgpCXdiaW52ZCgpCiAKLQotc3RhdGljIGlubGluZSBpbnQKLV9fYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrICh1bnNpZ25lZCBpbnQgKmxvY2spCi17Ci0JdW5zaWduZWQgaW50IG9sZCwgbmV3LCB2YWw7Ci0JZG8gewotCQlvbGQgPSAqbG9jazsKLQkJbmV3ID0gKCgob2xkICYgfjB4MykgKyAyKSArICgob2xkID4+IDEpICYgMHgxKSk7Ci0JCXZhbCA9IGNtcHhjaGcobG9jaywgb2xkLCBuZXcpOwotCX0gd2hpbGUgKHVubGlrZWx5ICh2YWwgIT0gb2xkKSk7Ci0JcmV0dXJuIChuZXcgPCAzKSA/IC0xIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLV9fYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2NrICh1bnNpZ25lZCBpbnQgKmxvY2spCi17Ci0JdW5zaWduZWQgaW50IG9sZCwgbmV3LCB2YWw7Ci0JZG8gewotCQlvbGQgPSAqbG9jazsKLQkJbmV3ID0gb2xkICYgfjB4MzsKLQkJdmFsID0gY21weGNoZyhsb2NrLCBvbGQsIG5ldyk7Ci0JfSB3aGlsZSAodW5saWtlbHkgKHZhbCAhPSBvbGQpKTsKLQlyZXR1cm4gb2xkICYgMHgxOwotfQoraW50IF9fYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKHVuc2lnbmVkIGludCAqbG9jayk7CitpbnQgX19hY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2sodW5zaWduZWQgaW50ICpsb2NrKTsKIAogI2RlZmluZSBBQ1BJX0FDUVVJUkVfR0xPQkFMX0xPQ0soR0xwdHIsIEFjcSkgXAogCSgoQWNxKSA9IF9fYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKCh1bnNpZ25lZCBpbnQgKikgR0xwdHIpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9ib290LmggYi9pbmNsdWRlL2FzbS1pMzg2L2Jvb3QuaAppbmRleCA4Y2U3OWE2Li5lNzY4NmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2Jvb3QuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2Jvb3QuaApAQCAtMTMsNyArMTMsOCBAQAogI2RlZmluZSBBU0tfVkdBCQkweGZmZmQJCS8qIGFzayBmb3IgaXQgYXQgYm9vdHVwICovCiAKIC8qIFBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUga2VucmVsIHNob3VsZCBiZSBsb2FkZWQuICovCi0jZGVmaW5lIExPQURfUEhZU0lDQUxfQUREUiAoKDB4MTAwMDAwICsgQ09ORklHX1BIWVNJQ0FMX0FMSUdOIC0gMSkgXAorI2RlZmluZSBMT0FEX1BIWVNJQ0FMX0FERFIgKChDT05GSUdfUEhZU0lDQUxfU1RBUlQgXAorCQkJCSsgKENPTkZJR19QSFlTSUNBTF9BTElHTiAtIDEpKSBcCiAJCQkJJiB+KENPTkZJR19QSFlTSUNBTF9BTElHTiAtIDEpKQogCiAjZW5kaWYgLyogX0xJTlVYX0JPT1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9idWcuaCBiL2luY2x1ZGUvYXNtLWkzODYvYnVnLmgKaW5kZXggODA2MmNkYi4uYjBmZDc4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2J1Zy5oCkBAIC00LDIwICs0LDMyIEBACiAKIC8qCiAgKiBUZWxsIHRoZSB1c2VyIHRoZXJlIGlzIHNvbWUgcHJvYmxlbS4KLSAqIFRoZSBvZmZlbmRpbmcgZmlsZSBhbmQgbGluZSBhcmUgZW5jb2RlZCBhZnRlciB0aGUgIm9mZmljaWFsbHkKLSAqIHVuZGVmaW5lZCIgb3Bjb2RlIGZvciBwYXJzaW5nIGluIHRoZSB0cmFwIGhhbmRsZXIuCisgKiBUaGUgb2ZmZW5kaW5nIGZpbGUgYW5kIGxpbmUgYXJlIGVuY29kZWQgZW5jb2RlZCBpbiB0aGUgX19idWdfdGFibGUgc2VjdGlvbi4KICAqLwogCiAjaWZkZWYgQ09ORklHX0JVRwogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisKICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQotI2RlZmluZSBCVUcoKQkJCQlcCi0gX19hc21fXyBfX3ZvbGF0aWxlX18oCSJ1ZDJcbiIJCVwKLQkJCSJcdC53b3JkICVjMFxuIglcCi0JCQkiXHQubG9uZyAlYzFcbiIJXAotCQkJIDogOiAiaSIgKF9fTElORV9fKSwgImkiIChfX0ZJTEVfXykpCisjZGVmaW5lIEJVRygpCQkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUoIjE6XHR1ZDJcbiIJCQkJXAorCQkJICAgICAiLnB1c2hzZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQlcCisJCQkgICAgICIyOlx0LmxvbmcgMWIsICVjMFxuIgkJCVwKKwkJCSAgICAgIlx0LndvcmQgJWMxLCAwXG4iCQkJCVwKKwkJCSAgICAgIlx0Lm9yZyAyYislYzJcbiIJCQkJXAorCQkJICAgICAiLnBvcHNlY3Rpb24iCQkJCVwKKwkJCSAgICAgOiA6ICJpIiAoX19GSUxFX18pLCAiaSIgKF9fTElORV9fKSwJXAorCQkJICAgICAiaSIgKHNpemVvZihzdHJ1Y3QgYnVnX2VudHJ5KSkpOwkJXAorCQlmb3IoOzspIDsJCQkJCQlcCisJfSB3aGlsZSgwKQorCiAjZWxzZQotI2RlZmluZSBCVUcoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygidWQyXG4iKQorI2RlZmluZSBCVUcoKQkJCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKCJ1ZDIiKTsJCQkJCVwKKwkJZm9yKDs7KSA7CQkJCQkJXAorCX0gd2hpbGUoMCkKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20taTM4Ni9jYWNoZWZsdXNoLmgKaW5kZXggNzE5OWY3Yi4uNzRlMDNjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jYWNoZWZsdXNoLmgKQEAgLTcsNiArNyw3IEBACiAvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIGludGVsLiAqLwogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9lODIwLmggYi9pbmNsdWRlL2FzbS1pMzg2L2U4MjAuaAppbmRleCAzOTUwNzdhLi5jNWI4ZmM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2U4MjAuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2U4MjAuaApAQCAtNDAsNyArNDAsNyBAQAogCQkJICAgdW5zaWduZWQgdHlwZSk7CiBleHRlcm4gdm9pZCBmaW5kX21heF9wZm4odm9pZCk7CiBleHRlcm4gdm9pZCByZWdpc3Rlcl9ib290bWVtX2xvd19wYWdlcyh1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuKTsKLWV4dGVybiB2b2lkIHJlZ2lzdGVyX21lbW9yeSh2b2lkKTsKK2V4dGVybiB2b2lkIGU4MjBfcmVnaXN0ZXJfbWVtb3J5KHZvaWQpOwogZXh0ZXJuIHZvaWQgbGltaXRfcmVnaW9ucyh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCBwcmludF9tZW1vcnlfbWFwKGNoYXIgKndobyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvZWxmLmggYi9pbmNsdWRlL2FzbS1pMzg2L2VsZi5oCmluZGV4IDQ1ZDIxYTAuLjM2OTAzNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9lbGYuaApAQCAtMTQzLDExICsxNDMsOCBAQAogIyBkZWZpbmUgVkRTT19QUkVMSU5LCQkwCiAjZW5kaWYKIAotI2RlZmluZSBWRFNPX0NPTVBBVF9TWU0oeCkgXAotCQkoVkRTT19DT01QQVRfQkFTRSArICh1bnNpZ25lZCBsb25nKSh4KSAtIFZEU09fUFJFTElOSykKLQogI2RlZmluZSBWRFNPX1NZTSh4KSBcCi0JCShWRFNPX0JBU0UgKyAodW5zaWduZWQgbG9uZykoeCkgLSBWRFNPX1BSRUxJTkspCisJCShWRFNPX0NPTVBBVF9CQVNFICsgKHVuc2lnbmVkIGxvbmcpKHgpIC0gVkRTT19QUkVMSU5LKQogCiAjZGVmaW5lIFZEU09fSElHSF9FSERSCQkoKGNvbnN0IHN0cnVjdCBlbGZoZHIgKikgVkRTT19ISUdIX0JBU0UpCiAjZGVmaW5lIFZEU09fRUhEUgkJKChjb25zdCBzdHJ1Y3QgZWxmaGRyICopIFZEU09fQ09NUEFUX0JBU0UpCkBAIC0xNTYsMTAgKzE1MywxMiBAQAogCiAjZGVmaW5lIFZEU09fRU5UUlkJCVZEU09fU1lNKCZfX2tlcm5lbF92c3lzY2FsbCkKIAorI2lmbmRlZiBDT05GSUdfQ09NUEFUX1ZEU08KICNkZWZpbmUgQVJDSF9IQVNfU0VUVVBfQURESVRJT05BTF9QQUdFUwogc3RydWN0IGxpbnV4X2JpbnBybTsKIGV4dGVybiBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhlY3V0YWJsZV9zdGFjayk7CisjZW5kaWYKIAogZXh0ZXJuIHVuc2lnbmVkIGludCB2ZHNvX2VuYWJsZWQ7CiAKQEAgLTE2OSw1MCArMTY4LDYgQEAKIAkJTkVXX0FVWF9FTlQoQVRfU1lTSU5GT19FSERSLCBWRFNPX0NPTVBBVF9CQVNFKTsJXAogfSB3aGlsZSAoMCkKIAotLyoKLSAqIFRoZXNlIG1hY3JvcyBwYXJhbWV0ZXJpemUgZWxmX2NvcmVfZHVtcCBpbiBmcy9iaW5mbXRfZWxmLmMgdG8gd3JpdGUgb3V0Ci0gKiBleHRyYSBzZWdtZW50cyBjb250YWluaW5nIHRoZSB2c3lzY2FsbCBEU08gY29udGVudHMuICBEdW1waW5nIGl0cwotICogY29udGVudHMgbWFrZXMgcG9zdC1tb3J0ZW0gZnVsbHkgaW50ZXJwcmV0YWJsZSBsYXRlciB3aXRob3V0IG1hdGNoaW5nIHVwCi0gKiB0aGUgc2FtZSBrZXJuZWwgYW5kIGhhcmR3YXJlIGNvbmZpZyB0byBzZWUgd2hhdCBQQyB2YWx1ZXMgbWVhbnQuCi0gKiBEdW1waW5nIGl0cyBleHRyYSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGluY2x1ZGVzIGFsbCB0aGUgb3RoZXIgaW5mb3JtYXRpb24KLSAqIGEgZGVidWdnZXIgbmVlZHMgdG8gZWFzaWx5IGZpbmQgaG93IHRoZSB2c3lzY2FsbCBEU08gd2FzIGJlaW5nIHVzZWQuCi0gKi8KLSNkZWZpbmUgRUxGX0NPUkVfRVhUUkFfUEhEUlMJCShWRFNPX0hJR0hfRUhEUi0+ZV9waG51bSkKLSNkZWZpbmUgRUxGX0NPUkVfV1JJVEVfRVhUUkFfUEhEUlMJCQkJCSAgICAgIFwKLWRvIHsJCQkJCQkJCQkgICAgICBcCi0JY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCB2c3lzY2FsbF9waGRycyA9CQkJICAgICAgXAotCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopIChWRFNPX0hJR0hfQkFTRQkJICAgICAgXAotCQkJCQkgICArIFZEU09fSElHSF9FSERSLT5lX3Bob2ZmKTsgICAgXAotCWludCBpOwkJCQkJCQkJICAgICAgXAotCUVsZjMyX09mZiBvZnMgPSAwOwkJCQkJCSAgICAgIFwKLQlmb3IgKGkgPSAwOyBpIDwgVkRTT19ISUdIX0VIRFItPmVfcGhudW07ICsraSkgewkJICAgICAgXAotCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkciA9IHZzeXNjYWxsX3BoZHJzW2ldOwkJICAgICAgXAotCQlpZiAocGhkci5wX3R5cGUgPT0gUFRfTE9BRCkgewkJCQkgICAgICBcCi0JCQlCVUdfT04ob2ZzICE9IDApOwkJCQkgICAgICBcCi0JCQlvZnMgPSBwaGRyLnBfb2Zmc2V0ID0gb2Zmc2V0OwkJCSAgICAgIFwKLQkJCXBoZHIucF9tZW1zeiA9IFBBR0VfQUxJR04ocGhkci5wX21lbXN6KTsJICAgICAgXAotCQkJcGhkci5wX2ZpbGVzeiA9IHBoZHIucF9tZW1zejsJCQkgICAgICBcCi0JCQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsJCQkgICAgICBcCi0JCX0JCQkJCQkJICAgICAgXAotCQllbHNlCQkJCQkJCSAgICAgIFwKLQkJCXBoZHIucF9vZmZzZXQgKz0gb2ZzOwkJCQkgICAgICBcCi0JCXBoZHIucF9wYWRkciA9IDA7IC8qIG1hdGNoIG90aGVyIGNvcmUgcGhkcnMgKi8JCSAgICAgIFwKLQkJRFVNUF9XUklURSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsJCQkgICAgICBcCi0JfQkJCQkJCQkJICAgICAgXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgRUxGX0NPUkVfV1JJVEVfRVhUUkFfREFUQQkJCQkJICAgICAgXAotZG8gewkJCQkJCQkJCSAgICAgIFwKLQljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IHZzeXNjYWxsX3BoZHJzID0JCQkgICAgICBcCi0JCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKFZEU09fSElHSF9CQVNFCQkgICAgICBcCi0JCQkJCSAgICsgVkRTT19ISUdIX0VIRFItPmVfcGhvZmYpOyAgICBcCi0JaW50IGk7CQkJCQkJCQkgICAgICBcCi0JZm9yIChpID0gMDsgaSA8IFZEU09fSElHSF9FSERSLT5lX3BobnVtOyArK2kpIHsJCSAgICAgIFwKLQkJaWYgKHZzeXNjYWxsX3BoZHJzW2ldLnBfdHlwZSA9PSBQVF9MT0FEKQkJICAgICAgXAotCQkJRFVNUF9XUklURSgodm9pZCAqKSB2c3lzY2FsbF9waGRyc1tpXS5wX3ZhZGRyLAkgICAgICBcCi0JCQkJICAgUEFHRV9BTElHTih2c3lzY2FsbF9waGRyc1tpXS5wX21lbXN6KSk7ICAgIFwKLQl9CQkJCQkJCQkgICAgICBcCi19IHdoaWxlICgwKQotCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20taTM4Ni9maXhtYXAuaAppbmRleCAwMjQyOGNiLi4zZTlmNjEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2ZpeG1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZml4bWFwLmgKQEAgLTIzLDYgKzIzLDggQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fRklYQUREUl9UT1A7CiAjZWxzZQogI2RlZmluZSBfX0ZJWEFERFJfVE9QICAweGZmZmZmMDAwCisjZGVmaW5lIEZJWEFERFJfVVNFUl9TVEFSVAlfX2ZpeF90b192aXJ0KEZJWF9WRFNPKQorI2RlZmluZSBGSVhBRERSX1VTRVJfRU5ECV9fZml4X3RvX3ZpcnQoRklYX1ZEU08gLSAxKQogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2lkZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9pZGUuaAppbmRleCA3MzQ2NWQyLi4wZmMyNDBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaWRlLmgKQEAgLTQwLDEzICs0MCwxNCBAQAogCiBzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGlkZV9kZWZhdWx0X2lvX2Jhc2UoaW50IGluZGV4KQogeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCS8qCiAJICoJSWYgUENJIGlzIHByZXNlbnQgdGhlbiBpdCBpcyBub3Qgc2FmZSB0byBwb2tlIGFyb3VuZAogCSAqCXRoZSBvdGhlciBsZWdhY3kgSURFIHBvcnRzLiBPbmx5IDB4MWYwIGFuZCAweDE3MCBhcmUKIAkgKglkZWZpbmVkIGNvbXBhdGliaWxpdHkgbW9kZSBwb3J0cyBmb3IgUENJLiBBIHVzZXIgY2FuIAogCSAqCW92ZXJyaWRlIHRoaXMgdXNpbmcgaWRlPSBidXQgd2UgbXVzdCBkZWZhdWx0IHNhZmUuCiAJICovCi0JaWYgKHBjaV9maW5kX2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKSA9PSBOVUxMKSB7CisJaWYgKChwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCkpID09IE5VTEwpIHsKIAkJc3dpdGNoKGluZGV4KSB7CiAJCQljYXNlIDI6IHJldHVybiAweDFlODsKIAkJCWNhc2UgMzogcmV0dXJuIDB4MTY4OwpAQCAtNTQsNiArNTUsNyBAQAogCQkJY2FzZSA1OiByZXR1cm4gMHgxNjA7CiAJCX0KIAl9CisJcGNpX2Rldl9wdXQocGRldik7CiAJc3dpdGNoIChpbmRleCkgewogCQljYXNlIDA6CXJldHVybiAweDFmMDsKIAkJY2FzZSAxOglyZXR1cm4gMHgxNzA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21zci5oIGIvaW5jbHVkZS9hc20taTM4Ni9tc3IuaAppbmRleCA1Njc5ZDQ5Li42MDlhMzg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21zci5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbXNyLmgKQEAgLTEwMCw2ICsxMDAsOCBAQAogCiAjZGVmaW5lIE1TUl9QNl9QRVJGQ1RSMAkJMHhjMQogI2RlZmluZSBNU1JfUDZfUEVSRkNUUjEJCTB4YzIKKyNkZWZpbmUgTVNSX0ZTQl9GUkVRCQkweGNkCisKIAogI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1JfQ1RMCQkweDExOQogCkBAIC0xMzAsNiArMTMyLDkgQEAKICNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJCTB4MTk4CiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZfQ1RMCQkweDE5OQogCisjZGVmaW5lIE1TUl9JQTMyX01QRVJGCQkJMHhFNworI2RlZmluZSBNU1JfSUEzMl9BUEVSRgkJCTB4RTgKKwogI2RlZmluZSBNU1JfSUEzMl9USEVSTV9DT05UUk9MCQkweDE5YQogI2RlZmluZSBNU1JfSUEzMl9USEVSTV9JTlRFUlJVUFQJMHgxOWIKICNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fU1RBVFVTCQkweDE5YwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wYWdlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaAppbmRleCBmZDNmNjRhLi43YjE5ZjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BhZ2UuaApAQCAtMTQzLDcgKzE0Myw5IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgogCisjaWZuZGVmIENPTkZJR19DT01QQVRfVkRTTwogI2RlZmluZSBfX0hBVkVfQVJDSF9HQVRFX0FSRUEgMQorI2VuZGlmCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX0kzODZfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaAppbmRleCBhNTJkNjU0Li4zNTlmMTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcHJvY2Vzc29yLmgKQEAgLTc0Myw2ICs3NDMsNyBAQAogZXh0ZXJuIGludCBzeXNlbnRlcl9zZXR1cCh2b2lkKTsKIAogZXh0ZXJuIGludCBpbml0X2dkdChpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpOworZXh0ZXJuIHZvaWQgY3B1X3NldF9nZHQoaW50KTsKIGV4dGVybiB2b2lkIHNlY29uZGFyeV9jcHVfaW5pdCh2b2lkKTsKIAogI2VuZGlmIC8qIF9fQVNNX0kzODZfUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLWkzODYvdGVybWJpdHMuaAppbmRleCA3MmMxMGUzLi4xMmJhZjFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3Rlcm1iaXRzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90ZXJtYml0cy5oCkBAIC0xNyw2ICsxNywxNyBAQAogCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLwogfTsKIAorc3RydWN0IGt0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KK307CisKIC8qIGNfY2MgY2hhcmFjdGVycyAqLwogI2RlZmluZSBWSU5UUiAwCiAjZGVmaW5lIFZRVUlUIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLWkzODYvdGhyZWFkX2luZm8uaAppbmRleCA0NmQzMmFkLi40YjE4N2JiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90aHJlYWRfaW5mby5oCkBAIC0xMzQsNiArMTM0LDcgQEAKICNkZWZpbmUgVElGX01FTURJRQkJMTYKICNkZWZpbmUgVElGX0RFQlVHCQkxNwkvKiB1c2VzIGRlYnVnIHJlZ2lzdGVycyAqLwogI2RlZmluZSBUSUZfSU9fQklUTUFQCQkxOAkvKiB1c2VzIEkvTyBiaXRtYXAgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTkJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQpAQCAtMTQ3LDYgKzE0OCw3IEBACiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX0RFQlVHCQkoMTw8VElGX0RFQlVHKQogI2RlZmluZSBfVElGX0lPX0JJVE1BUAkJKDE8PFRJRl9JT19CSVRNQVApCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX1dPUktfTUFTSyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1pMzg2L3RvcG9sb2d5LmgKaW5kZXggOTc4ZDA5NS4uYWM1ODU4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdG9wb2xvZ3kuaApAQCAtODksNiArODksNyBAQAogCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKIAkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCiAJCQkJfCBTRF9CQUxBTkNFX0ZPUksJXAorCQkJCXwgU0RfU0VSSUFMSVpFCQlcCiAJCQkJfCBTRF9XQUtFX0JBTEFOQ0UsCVwKIAkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCiAJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdW53aW5kLmggYi9pbmNsdWRlL2FzbS1pMzg2L3Vud2luZC5oCmluZGV4IGFhMmM5MzEuLjQzYzcwYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdW53aW5kLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni91bndpbmQuaApAQCAtMSw5NSArMSw2IEBACiAjaWZuZGVmIF9BU01fSTM4Nl9VTldJTkRfSAogI2RlZmluZSBfQVNNX0kzODZfVU5XSU5EX0gKIAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IE5vdmVsbCwgSW5jLgotICoJSmFuIEJldWxpY2ggPGpiZXVsaWNoQG5vdmVsbC5jb20+Ci0gKiBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR1BMLgotICovCi0KLSNpZmRlZiBDT05GSUdfU1RBQ0tfVU5XSU5ECi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotc3RydWN0IHVud2luZF9mcmFtZV9pbmZvCi17Ci0Jc3RydWN0IHB0X3JlZ3MgcmVnczsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0JdW5zaWduZWQgY2FsbF9mcmFtZToxOwotfTsKLQotI2RlZmluZSBVTldfUEMoZnJhbWUpICAgICAgICAoZnJhbWUpLT5yZWdzLmVpcAotI2RlZmluZSBVTldfU1AoZnJhbWUpICAgICAgICAoZnJhbWUpLT5yZWdzLmVzcAotI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCi0jZGVmaW5lIFVOV19GUChmcmFtZSkgICAgICAgIChmcmFtZSktPnJlZ3MuZWJwCi0jZGVmaW5lIEZSQU1FX1JFVEFERFJfT0ZGU0VUIDQKLSNkZWZpbmUgRlJBTUVfTElOS19PRkZTRVQgICAgMAotI2RlZmluZSBTVEFDS19CT1RUT00odHNrKSAgICBTVEFDS19MSU1JVCgodHNrKS0+dGhyZWFkLmVzcDApCi0jZGVmaW5lIFNUQUNLX1RPUCh0c2spICAgICAgICgodHNrKS0+dGhyZWFkLmVzcDApCi0jZWxzZQotI2RlZmluZSBVTldfRlAoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwKQotI2VuZGlmCi0jZGVmaW5lIFNUQUNLX0xJTUlUKHB0cikgICAgICgoKHB0cikgLSAxKSAmIH4oVEhSRUFEX1NJWkUgLSAxKSkKLQotI2RlZmluZSBVTldfUkVHSVNURVJfSU5GTyBcCi0JUFRSRUdTX0lORk8oZWF4KSwgXAotCVBUUkVHU19JTkZPKGVjeCksIFwKLQlQVFJFR1NfSU5GTyhlZHgpLCBcCi0JUFRSRUdTX0lORk8oZWJ4KSwgXAotCVBUUkVHU19JTkZPKGVzcCksIFwKLQlQVFJFR1NfSU5GTyhlYnApLCBcCi0JUFRSRUdTX0lORk8oZXNpKSwgXAotCVBUUkVHU19JTkZPKGVkaSksIFwKLQlQVFJFR1NfSU5GTyhlaXApCi0KLSNkZWZpbmUgVU5XX0RFRkFVTFRfUkEocmFJdGVtLCBkYXRhQWxpZ24pIFwKLQkoKHJhSXRlbSkud2hlcmUgPT0gTWVtb3J5ICYmIFwKLQkgISgocmFJdGVtKS52YWx1ZSAqIChkYXRhQWxpZ24pICsgNCkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Vud19pbml0X2ZyYW1lX2luZm8oc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmNvbnN0Ki8gc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaWYgKHVzZXJfbW9kZV92bShyZWdzKSkKLQkJaW5mby0+cmVncyA9ICpyZWdzOwotCWVsc2UgewotCQltZW1jcHkoJmluZm8tPnJlZ3MsIHJlZ3MsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBlc3ApKTsKLQkJaW5mby0+cmVncy5lc3AgPSAodW5zaWduZWQgbG9uZykmcmVncy0+ZXNwOwotCQlpbmZvLT5yZWdzLnhzcyA9IF9fS0VSTkVMX0RTOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfdW53X2luaXRfYmxvY2tlZChzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8pCi17Ci0JbWVtc2V0KCZpbmZvLT5yZWdzLCAwLCBzaXplb2YoaW5mby0+cmVncykpOwotCWluZm8tPnJlZ3MuZWlwID0gaW5mby0+dGFzay0+dGhyZWFkLmVpcDsKLQlpbmZvLT5yZWdzLnhjcyA9IF9fS0VSTkVMX0NTOwotCV9fZ2V0X3VzZXIoaW5mby0+cmVncy5lYnAsIChsb25nICopaW5mby0+dGFzay0+dGhyZWFkLmVzcCk7Ci0JaW5mby0+cmVncy5lc3AgPSBpbmZvLT50YXNrLT50aHJlYWQuZXNwOwotCWluZm8tPnJlZ3MueHNzID0gX19LRVJORUxfRFM7Ci0JaW5mby0+cmVncy54ZHMgPSBfX1VTRVJfRFM7Ci0JaW5mby0+cmVncy54ZXMgPSBfX1VTRVJfRFM7Ci0JaW5mby0+cmVncy54Z3MgPSBfX0tFUk5FTF9QREE7Ci19Ci0KLWV4dGVybiBhc21saW5rYWdlIGludCBhcmNoX3Vud2luZF9pbml0X3J1bm5pbmcoc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbWxpbmthZ2UgaW50ICgqY2FsbGJhY2spKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpOwotCi1zdGF0aWMgaW5saW5lIGludCBhcmNoX3Vud191c2VyX21vZGUoLypjb25zdCovIHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbykKLXsKLQlyZXR1cm4gdXNlcl9tb2RlX3ZtKCZpbmZvLT5yZWdzKQotCSAgICAgICB8fCBpbmZvLT5yZWdzLmVpcCA8IFBBR0VfT0ZGU0VUCi0JICAgICAgIHx8IChpbmZvLT5yZWdzLmVpcCA+PSBfX2ZpeF90b192aXJ0KEZJWF9WRFNPKQotCSAgICAgICAgICAgJiYgaW5mby0+cmVncy5laXAgPCBfX2ZpeF90b192aXJ0KEZJWF9WRFNPKSArIFBBR0VfU0laRSkKLQkgICAgICAgfHwgaW5mby0+cmVncy5lc3AgPCBQQUdFX09GRlNFVDsKLX0KLQotI2Vsc2UKLQogI2RlZmluZSBVTldfUEMoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwKQogI2RlZmluZSBVTldfU1AoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwKQogI2RlZmluZSBVTldfRlAoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwKQpAQCAtOTksNiArMTAsNCBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYKLQogI2VuZGlmIC8qIF9BU01fSTM4Nl9VTldJTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9icmVhay5oIGIvaW5jbHVkZS9hc20taWE2NC9icmVhay5oCmluZGV4IDgxNjc4MjguLmYwMzQwMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvYnJlYWsuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2JyZWFrLmgKQEAgLTEyLDggKzEyLDggQEAKICAqIE9TLXNwZWNpZmljIGRlYnVnIGJyZWFrIG51bWJlcnM6CiAgKi8KICNkZWZpbmUgX19JQTY0X0JSRUFLX0tEQgkJMHg4MDEwMAotI2RlZmluZSBfX0lBNjRfQlJFQUtfS1BST0JFCQkweDgwMjAwCi0jZGVmaW5lIF9fSUE2NF9CUkVBS19KUFJPQkUJCTB4ODAzMDAKKyNkZWZpbmUgX19JQTY0X0JSRUFLX0tQUk9CRQkJMHg4MTAwMCAvKiAuLiAweDgxZmZmICovCisjZGVmaW5lIF9fSUE2NF9CUkVBS19KUFJPQkUJCTB4ODIwMDAKIAogLyoKICAqIE9TLXNwZWNpZmljIGJyZWFrIG51bWJlcnM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGVmbHVzaC5oCmluZGV4IGYyZGFjYjQuLjQ5MDY5MTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGVmbHVzaC5oCkBAIC0xOCw2ICsxOCw3IEBACiAKICNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGFnZSkJCWRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWlhNjQvY2hlY2tzdW0uaAppbmRleCAyYjc4NTgyLi45N2FmMTU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9jaGVja3N1bS5oCkBAIC03Miw4ICs3Miw4IEBACiAKICNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0JMQogc3RydWN0IGluNl9hZGRyOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQlzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCXVuc2lnbmVkIGludCBjc3VtKTsKK2V4dGVybiBfX3N1bTE2IGNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIF9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJX193c3VtIGNzdW0pOwogCiAjZW5kaWYgLyogX0FTTV9JQTY0X0NIRUNLU1VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQva3Byb2Jlcy5oIGIvaW5jbHVkZS9hc20taWE2NC9rcHJvYmVzLmgKaW5kZXggMWI0NWI3MS4uODI4YWUwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9rcHJvYmVzLmgKQEAgLTExNSw2ICsxMTUsNyBAQAogICNkZWZpbmUgSU5TVF9GTEFHX0JSRUFLX0lOU1QJCQk0CiAgCXVuc2lnbmVkIGxvbmcgaW5zdF9mbGFnOwogIAl1bnNpZ25lZCBzaG9ydCB0YXJnZXRfYnJfcmVnOworCXVuc2lnbmVkIHNob3J0IHNsb3Q7CiB9OwogCiBleHRlcm4gaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BjaS5oIGIvaW5jbHVkZS9hc20taWE2NC9wY2kuaAppbmRleCA4MjVlYjdkLi41MTYwMjMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGNpLmgKQEAgLTc4LDkgKzc4LDYgQEAKICNkZWZpbmUgcGNpX2RhY19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsZG1hX2FkZHIsbGVuLGRpcikJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBwY2lfZGFjX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldixkbWFfYWRkcixsZW4sZGlyKQlkbyB7IG1iKCk7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5kbWFfbGVuZ3RoKQotI2RlZmluZSBzZ19kbWFfYWRkcmVzcyhzZykJKChzZyktPmRtYV9hZGRyZXNzKQotCiAjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfYnVyc3RfYWR2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQllbnVtIHBjaV9kbWFfYnVyc3Rfc3RyYXRlZ3kgKnN0cmF0LApAQCAtMTcwLDQgKzE2NywxMCBAQAogCiAjZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKIAorI2RlZmluZSBIQVZFX0FSQ0hfUENJX0dFVF9MRUdBQ1lfSURFX0lSUQorc3RhdGljIGlubGluZSBpbnQgcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCA/IDE1IDogMTQ7Cit9CisKICNlbmRpZiAvKiBfQVNNX0lBNjRfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcG9zaXhfdHlwZXMuaAppbmRleCBhZGI2MjI3Li4xNzg4NTU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3Bvc2l4X3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wb3NpeF90eXBlcy5oCkBAIC01NCw3ICs1NCw3IEBACiAjZGVmaW5lCV9fRkRfQ0xSKGQsIHNldCkJKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSAmPSB+X19GRE1BU0soZCkpCiAjZGVmaW5lCV9fRkRfSVNTRVQoZCwgc2V0KQkoKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSAmIF9fRkRNQVNLKGQpKSAhPSAwKQogI2RlZmluZQlfX0ZEX1pFUk8oc2V0KQlcCi0gICgodm9pZCkgbWVtc2V0ICgoX19wdHJfdCkgKHNldCksIDAsIHNpemVvZiAoX19rZXJuZWxfZmRfc2V0KSkpCisgICgodm9pZCkgbWVtc2V0ICgodm9pZCAqKSAoc2V0KSwgMCwgc2l6ZW9mIChfX2tlcm5lbF9mZF9zZXQpKSkKIAogIyAgZWxzZSAvKiAhX19HTlVDX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zY2F0dGVybGlzdC5oIGIvaW5jbHVkZS9hc20taWE2NC9zY2F0dGVybGlzdC5oCmluZGV4IDgzNGExODkuLjlkYmVhODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc2NhdHRlcmxpc3QuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NjYXR0ZXJsaXN0LmgKQEAgLTI1LDQgKzI1LDcgQEAKICAqLwogI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkweGZmZmZmZmZmCiAKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5kbWFfbGVuZ3RoKQorI2RlZmluZSBzZ19kbWFfYWRkcmVzcyhzZykJKChzZyktPmRtYV9hZGRyZXNzKQorCiAjZW5kaWYgLyogX0FTTV9JQTY0X1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24veHBjLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwYy5oCmluZGV4IDFkNDVlMTUuLmU1MmI4NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24veHBjLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi94cGMuaApAQCAtNjczLDcgKzY3Myw3IEBACiBleHRlcm4gdm9pZCB4cGNfZHJvcHBlZF9JUElfY2hlY2soc3RydWN0IHhwY19wYXJ0aXRpb24gKik7CiBleHRlcm4gdm9pZCB4cGNfYWN0aXZhdGVfcGFydGl0aW9uKHN0cnVjdCB4cGNfcGFydGl0aW9uICopOwogZXh0ZXJuIHZvaWQgeHBjX2FjdGl2YXRlX2t0aHJlYWRzKHN0cnVjdCB4cGNfY2hhbm5lbCAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgeHBjX2NyZWF0ZV9rdGhyZWFkcyhzdHJ1Y3QgeHBjX2NoYW5uZWwgKiwgaW50KTsKK2V4dGVybiB2b2lkIHhwY19jcmVhdGVfa3RocmVhZHMoc3RydWN0IHhwY19jaGFubmVsICosIGludCwgaW50KTsKIGV4dGVybiB2b2lkIHhwY19kaXNjb25uZWN0X3dhaXQoaW50KTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1pYTY0L3Rlcm1iaXRzLmgKaW5kZXggYjllODQzZi4uNDUzMWE1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGVybWJpdHMuaApAQCAtMjYsNiArMjYsMTcgQEAKIAljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KIH07CiAKK3N0cnVjdCBrdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCiAvKiBjX2NjIGNoYXJhY3RlcnMgKi8KICNkZWZpbmUgVklOVFIgMAogI2RlZmluZSBWUVVJVCAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmgKaW5kZXggOGFkY2RlMC4uOWI1MDViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGhyZWFkX2luZm8uaApAQCAtODgsNiArODgsNyBAQAogI2RlZmluZSBUSUZfTUVNRElFCQkxNwogI2RlZmluZSBUSUZfTUNBX0lOSVQJCTE4CS8qIHRoaXMgdGFzayBpcyBwcm9jZXNzaW5nIE1DQSBvciBJTklUICovCiAjZGVmaW5lIFRJRl9EQl9ESVNBQkxFRAkJMTkJLyogZGVidWcgdHJhcCBkaXNhYmxlZCBmb3IgZnN5c2NhbGwgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMjAJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMSA8PCBUSUZfU1lTQ0FMTF9BVURJVCkKQEAgLTk4LDYgKzk5LDcgQEAKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfTUNBX0lOSVQJCSgxIDw8IFRJRl9NQ0FfSU5JVCkKICNkZWZpbmUgX1RJRl9EQl9ESVNBQkxFRAkoMSA8PCBUSUZfREJfRElTQUJMRUQpCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMSA8PCBUSUZfRlJFRVpFKQogCiAvKiAid29yayB0byBkbyBvbiB1c2VyLXJldHVybiIgYml0cyAqLwogI2RlZmluZSBUSUZfQUxMV09SS19NQVNLCShfVElGX05PVElGWV9SRVNVTUV8X1RJRl9TSUdQRU5ESU5HfF9USUZfTkVFRF9SRVNDSEVEfF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1pYTY0L3RvcG9sb2d5LmgKaW5kZXggYTZlMzg1Ni4uMjJlZDY3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdG9wb2xvZ3kuaApAQCAtMTAxLDYgKzEwMSw3IEBACiAJLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAogCQkJCXwgU0RfQkFMQU5DRV9FWEVDCVwKIAkJCQl8IFNEX0JBTEFOQ0VfRk9SSwlcCisJCQkJfCBTRF9TRVJJQUxJWkUJCVwKIAkJCQl8IFNEX1dBS0VfQkFMQU5DRSwJXAogCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKIAkuYmFsYW5jZV9pbnRlcnZhbAk9IDY0LAkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tbTMyci9jYWNoZWZsdXNoLmgKaW5kZXggOGIyNjFiNC4uNTY5NjFhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9jYWNoZWZsdXNoLmgKQEAgLTksNiArOSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQ0hJUF9NMzI3MDApIHx8IGRlZmluZWQoQ09ORklHX0NISVBfT1BTUCkgfHwgZGVmaW5lZChDT05GSUdfQ0hJUF9NMzIxMDQpCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCkBAIC0yOSw2ICszMCw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19DSElQX00zMjEwMikKICNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkKQEAgLTQxLDYgKzQzLDcgQEAKICNlbHNlCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2lkZS5oIGIvaW5jbHVkZS9hc20tbTMyci9pZGUuaAppbmRleCAyMTlhMGY3Li5jODJlYmU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvaWRlLmgKQEAgLTMyLDcgKzMyLDggQEAKIHN0YXRpYyBfX2lubGluZV9fIGludCBpZGVfZGVmYXVsdF9pcnEodW5zaWduZWQgbG9uZyBiYXNlKQogewogCXN3aXRjaCAoYmFzZSkgewotI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVQpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkyKQorI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVQpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkyKSBcCisJfHwgZGVmaW5lZChDT05GSUdfUExBVF9PUFNQVVQpCiAJCWNhc2UgMHgxZjA6IHJldHVybiBQTERfSVJRX0NGSVJFUTsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tMzIxMDIuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTAyLmgKaW5kZXggYTFmMGQxZi4uNTI4MDdmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9tMzIxMDIuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL20zMjEwMi5oCkBAIC0xMDQsNyArMTA0LDggQEAKICNkZWZpbmUgTTMyUl9NRlQ1UkxEX1BPUlRMICAgICAoMHgwQytNMzJSX01GVDVfT0ZGU0VUKSAgLyogTUZUNCByZWxvYWQgKi8KICNkZWZpbmUgTTMyUl9NRlQ1Q01QUkxEX1BPUlRMICAoMHgxMCtNMzJSX01GVDVfT0ZGU0VUKSAgLyogTUZUNCBjb21wYXJlIHJlbG9hZCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ0hJUF9NMzI3MDApIHx8IGRlZmluZWQoQ09ORklHX0NISVBfTTMyMTA0KQorI2lmIChkZWZpbmVkKENPTkZJR19DSElQX00zMjcwMCkgJiYgIWRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkyKSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0NISVBfTTMyMTA0KQogI2RlZmluZSBNMzJSX01GVENSX01GVDBNU0sgICgxVUw8PDMxKSAgLyogYjAgKi8KICNkZWZpbmUgTTMyUl9NRlRDUl9NRlQxTVNLICAoMVVMPDwzMCkgIC8qIGIxICovCiAjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUMk1TSyAgKDFVTDw8MjkpICAvKiBiMiAqLwpAQCAtMTE3LDcgKzExOCw3IEBACiAjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUM0VOICAgKDFVTDw8MjApICAvKiBiMTEgKi8KICNkZWZpbmUgTTMyUl9NRlRDUl9NRlQ0RU4gICAoMVVMPDwxOSkgIC8qIGIxMiAqLwogI2RlZmluZSBNMzJSX01GVENSX01GVDVFTiAgICgxVUw8PDE4KSAgLyogYjEzICovCi0jZWxzZQkvKiBub3QgQ09ORklHX0NISVBfTTMyNzAwICYmIG5vdCBDT05GSUdfQ0hJUF9NMzIxMDQgKi8KKyNlbHNlCiAjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUME1TSyAgKDFVTDw8MTUpICAvKiBiMTYgKi8KICNkZWZpbmUgTTMyUl9NRlRDUl9NRlQxTVNLICAoMVVMPDwxNCkgIC8qIGIxNyAqLwogI2RlZmluZSBNMzJSX01GVENSX01GVDJNU0sgICgxVUw8PDEzKSAgLyogYjE4ICovCkBAIC0xMzAsNyArMTMxLDcgQEAKICNkZWZpbmUgTTMyUl9NRlRDUl9NRlQzRU4gICAoMVVMPDw0KSAgIC8qIGIyNyAqLwogI2RlZmluZSBNMzJSX01GVENSX01GVDRFTiAgICgxVUw8PDMpICAgLyogYjI4ICovCiAjZGVmaW5lIE0zMlJfTUZUQ1JfTUZUNUVOICAgKDFVTDw8MikgICAvKiBiMjkgKi8KLSNlbmRpZgkvKiBub3QgQ09ORklHX0NISVBfTTMyNzAwICYmIG5vdCBDT05GSUdfQ0hJUF9NMzIxMDQgKi8KKyNlbmRpZgogCiAjZGVmaW5lIE0zMlJfTUZUTU9EX0NDX01BU0sgICAgKDFVTDw8MTUpICAvKiBiMTYgKi8KICNkZWZpbmUgTTMyUl9NRlRNT0RfVENDUiAgICAgICAoMVVMPDwxMykgIC8qIGIxOCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmgKaW5kZXggMmQyYTZjOS4uNjMyYjRjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3B0cmFjZS5oCkBAIC0zMywyMSArMzMsMTAgQEAKICNkZWZpbmUgUFRfUjE1CQlQVF9TUAogCiAvKiBwcm9jZXNzb3Igc3RhdHVzIGFuZCBtaXNjZWxsYW5lb3VzIGNvbnRleHQgcmVnaXN0ZXJzLiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpICYmIGRlZmluZWQoQ09ORklHX0lTQV9EU1BfTEVWRUwyKQogI2RlZmluZSBQVF9BQ0MwSAkxNQogI2RlZmluZSBQVF9BQ0MwTAkxNgotI2RlZmluZSBQVF9BQ0MxSAkxNwotI2RlZmluZSBQVF9BQ0MxTAkxOAotI2RlZmluZSBQVF9BQ0NICQlQVF9BQ0MwSAotI2RlZmluZSBQVF9BQ0NMCQlQVF9BQ0MwTAotI2VsaWYgZGVmaW5lZChDT05GSUdfSVNBX00zMlIyKSB8fCBkZWZpbmVkKENPTkZJR19JU0FfTTMyUikKLSNkZWZpbmUgUFRfQUNDSAkJMTUKLSNkZWZpbmUgUFRfQUNDTAkJMTYKLSNkZWZpbmUgUFRfRFVNTVlfQUNDMUgJMTcKLSNkZWZpbmUgUFRfRFVNTVlfQUNDMUwJMTgKLSNlbHNlCi0jZXJyb3IgdW5rbm93biBpc2EgY29uaWZpZ3VyYXRpb24KLSNlbmRpZgorI2RlZmluZSBQVF9BQ0MxSAkxNwkvKiBJU0FfRFNQX0xFVkVMMiBvbmx5ICovCisjZGVmaW5lIFBUX0FDQzFMCTE4CS8qIElTQV9EU1BfTEVWRUwyIG9ubHkgKi8KICNkZWZpbmUgUFRfUFNXCQkxOQogI2RlZmluZSBQVF9CUEMJCTIwCiAjZGVmaW5lIFBUX0JCUFNXCTIxCkBAIC0xMDMsMTkgKzkyLDEwIEBACiAJbG9uZyBzeXNjYWxsX25yOwogCiAJLyogU2F2ZWQgbWFpbiBwcm9jZXNzb3Igc3RhdHVzIGFuZCBtaXNjZWxsYW5lb3VzIGNvbnRleHQgcmVnaXN0ZXJzLiAqLwotI2lmIGRlZmluZWQoQ09ORklHX0lTQV9NMzJSMikgJiYgZGVmaW5lZChDT05GSUdfSVNBX0RTUF9MRVZFTDIpCiAJdW5zaWduZWQgbG9uZyBhY2MwaDsKIAl1bnNpZ25lZCBsb25nIGFjYzBsOwotCXVuc2lnbmVkIGxvbmcgYWNjMWg7Ci0JdW5zaWduZWQgbG9uZyBhY2MxbDsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0lTQV9NMzJSMikgfHwgZGVmaW5lZChDT05GSUdfSVNBX00zMlIpCi0JdW5zaWduZWQgbG9uZyBhY2NoOwotCXVuc2lnbmVkIGxvbmcgYWNjbDsKLQl1bnNpZ25lZCBsb25nIGR1bW15X2FjYzFoOwotCXVuc2lnbmVkIGxvbmcgZHVtbXlfYWNjMWw7Ci0jZWxzZQotI2Vycm9yIHVua25vd24gaXNhIGNvbmZpZ3VyYXRpb24KLSNlbmRpZgorCXVuc2lnbmVkIGxvbmcgYWNjMWg7CS8qIElTQV9EU1BfTEVWRUwyIG9ubHkgKi8KKwl1bnNpZ25lZCBsb25nIGFjYzFsOwkvKiBJU0FfRFNQX0xFVkVMMiBvbmx5ICovCiAJdW5zaWduZWQgbG9uZyBwc3c7CiAJdW5zaWduZWQgbG9uZyBicGM7CQkvKiBzYXZlZCBQQyBmb3IgVFJBUCBzeXNjYWxscyAqLwogCXVuc2lnbmVkIGxvbmcgYmJwc3c7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc2lnY29udGV4dC5oCmluZGV4IDczMDI1YzAuLjYyNTM3ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc2lnY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2lnY29udGV4dC5oCkBAIC0yMywxOSArMjMsMTAgQEAKIAl1bnNpZ25lZCBsb25nIHNjX3IxMjsKIAogCS8qIFNhdmVkIG1haW4gcHJvY2Vzc29yIHN0YXR1cyBhbmQgbWlzY2VsbGFuZW91cyBjb250ZXh0IHJlZ2lzdGVycy4gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpICYmIGRlZmluZWQoQ09ORklHX0lTQV9EU1BfTEVWRUwyKQogCXVuc2lnbmVkIGxvbmcgc2NfYWNjMGg7CiAJdW5zaWduZWQgbG9uZyBzY19hY2MwbDsKLQl1bnNpZ25lZCBsb25nIHNjX2FjYzFoOwotCXVuc2lnbmVkIGxvbmcgc2NfYWNjMWw7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19JU0FfTTMyUjIpIHx8IGRlZmluZWQoQ09ORklHX0lTQV9NMzJSKQotCXVuc2lnbmVkIGxvbmcgc2NfYWNjaDsKLQl1bnNpZ25lZCBsb25nIHNjX2FjY2w7Ci0JdW5zaWduZWQgbG9uZyBzY19kdW1teV9hY2MxaDsKLQl1bnNpZ25lZCBsb25nIHNjX2R1bW15X2FjYzFsOwotI2Vsc2UKLSNlcnJvciB1bmtub3duIGlzYSBjb25maWd1cmF0aW9uCi0jZW5kaWYKKwl1bnNpZ25lZCBsb25nIHNjX2FjYzFoOwkvKiBJU0FfRFNQX0xFVkVMMiBvbmx5ICovCisJdW5zaWduZWQgbG9uZyBzY19hY2MxbDsJLyogSVNBX0RTUF9MRVZFTDIgb25seSAqLwogCXVuc2lnbmVkIGxvbmcgc2NfcHN3OwogCXVuc2lnbmVkIGxvbmcgc2NfYnBjOwkJLyogc2F2ZWQgUEMgZm9yIFRSQVAgc3lzY2FsbHMgKi8KIAl1bnNpZ25lZCBsb25nIHNjX2JicHN3OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tbTMyci90ZXJtYml0cy5oCmluZGV4IDVhY2UzNzAuLmZhZjJiZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3Rlcm1iaXRzLmgKQEAgLTE5LDYgKzE5LDE3IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKwogLyogY19jYyBjaGFyYWN0ZXJzICovCiAjZGVmaW5lIFZJTlRSIDAKICNkZWZpbmUgVlFVSVQgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlZmx1c2guaAppbmRleCAyNGQzZmY0Li4xNmJmMzc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2NhY2hlZmx1c2guaApAQCAtODksNiArODksOCBAQAogCQlfX2ZsdXNoX2NhY2hlXzAzMCgpOwogfQogCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlmbHVzaF9jYWNoZV9tbShtbSkKKwogLyogZmx1c2hfY2FjaGVfcmFuZ2UvZmx1c2hfY2FjaGVfcGFnZSBtdXN0IGJlIG1hY3JvcyB0byBhdm9pZAogICAgYSBkZXBlbmRlbmN5IG9uIGxpbnV4L21tLmgsIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlsZS4uLiAqLwogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zLWhlYWQuaCBiL2luY2x1ZGUvYXNtLW02OGsvc3VuMy1oZWFkLmgKaW5kZXggZjc5OWQ5NS4uZTc0ZjM4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zLWhlYWQuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjMtaGVhZC5oCkBAIC00LDcgKzQsNiBAQAogCiAjZGVmaW5lIEtFUk5CQVNFICAgICAgICAweEUwMDAwMDAgIC8qIEZpcnN0IGFkZHJlc3MgdGhlIGtlcm5lbCB3aWxsIGV2ZW50dWFsbHkgYmUgKi8KICNkZWZpbmUgTE9BRF9BRERSICAgICAgIDB4NDAwMCAgICAgIC8qIHByb20ganVtcHMgdG8gdXMgaGVyZSB1bmxlc3MgdGhpcyBpcyBlbGYgL2Jvb3QgKi8KLSNkZWZpbmUgQklfU1RBUlQgKEtFUk5CQVNFICsgMHgzMDAwKSAvKiBiZWdpbm5pbmcgb2YgdGhlIGJvb3RpbmZvIHJlY29yZHMgKi8KICNkZWZpbmUgRkNfQ09OVFJPTCAgMwogI2RlZmluZSBGQ19TVVBFUkQgICAgNQogI2RlZmluZSBGQ19DUFUgICAgICA3CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N1bjNpbnRzLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N1bjNpbnRzLmgKaW5kZXggZGU5MWZhMC4uMzA5ZDZlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zdW4zaW50cy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3VuM2ludHMuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9pbnRlcnNpbC5oPgogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2RlZmluZSBTVU4zX0lOVF9WRUNTIDE5MgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N3aW1faW9wLmggYi9pbmNsdWRlL2FzbS1tNjhrL3N3aW1faW9wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOWI2NzguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zd2ltX2lvcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qCi0gKiBTV0lNIGFjY2VzcyB0aHJvdWdoIHRoZSBJT1AKLSAqIFdyaXR0ZW4gYnkgSm9zaHVhIE0uIFRob21wc29uCi0gKi8KLQotLyogSU9QIG51bWJlciBhbmQgY2hhbm5lbCBudW1iZXIgZm9yIHRoZSBTV0lNICovCi0KLSNkZWZpbmUgU1dJTV9JT1AJSU9QX05VTV9JU00KLSNkZWZpbmUgU1dJTV9DSEFOCTEKLQotLyogQ29tbWFuZCBjb2RlOiAqLwotCi0jZGVmaW5lIENNRF9JTklUCQkweDAxCS8qIEluaXRpYWxpemUgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDTURfU0hVVERPV04JCTB4MDIJLyogU2h1dGRvd24gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENNRF9TVEFSVF9QT0xMCQkweDAzCS8qIFN0YXJ0IGluc2VydC9lamVjdCBwb2xsaW5nICAqLwotI2RlZmluZSBDTURfU1RPUF9QT0xMCQkweDA0CS8qIFN0b3AgaW5zZXJ0L2VqZWN0IHBvbGxpbmcgICAqLwotI2RlZmluZSBDTURfU0VUSEZTVEFHCQkweDA1CS8qIFNldCBIRlMgdGFnIGJ1ZmZlciBhZGRyZXNzICAqLwotI2RlZmluZSBDTURfU1RBVFVTCQkweDA2CS8qIFN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBDTURfRUpFQ1QJCTB4MDcJLyogRWplY3QgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENNRF9GT1JNQVQJCTB4MDgJLyogRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENNRF9GT1JNQVRfVkVSSUZZCTB4MDkJLyogRm9ybWF0IGFuZCBWZXJpZnkgICAgICAgICAgICovCi0jZGVmaW5lIENNRF9XUklURQkJMHgwQQkvKiBXcml0ZSAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ01EX1JFQUQJCTB4MEIJLyogUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENNRF9SRUFEX1ZFUklGWQkJMHgwQwkvKiBSZWFkIGFuZCBWZXJpZnkgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQ01EX0NBQ0hFX0NUUkwJCTB4MEQJLyogQ2FjaGUgY29udHJvbCAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENNRF9UQUdCVUZGX0NUUkwJMHgwRQkvKiBUYWcgYnVmZmVyIGNvbnRyb2wgICAgICAgICAgKi8KLSNkZWZpbmUgQ01EX0dFVF9JQ09OCQkweDBGCS8qIEdldCBJY29uICAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBEcml2ZSB0eXBlczogKi8KLQotLyogbm90ZTogYXBwbGUgc2V6IERSVl9GREhEIGlzIDQsIGJ1dCBJIGdldCBiYWNrIGEgdHlwZSAqLwotLyogICAgICAgb2YgNSB3aGVuIEkgZG8gYSBkcml2ZSBzdGF0dXMgY2hlY2sgb24gbXkgRkRIRCAqLwotCi0jZGVmaW5lCURSVl9OT05FCTAJLyogTm8gZHJpdmUgICAgICAgICAgICAgKi8KLSNkZWZpbmUJRFJWX1VOS05PV04JMQkvKiBVbnNwZWNpZmllZCBkcml2ZSAgICAqLwotI2RlZmluZQlEUlZfNDAwSwkyCS8qIDQwMEsgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCURSVl84MDBLCTMJLyogNDAwSy84MDBLICAgICAgICAgICAgKi8KLSNkZWZpbmUJRFJWX0ZESEQJNQkvKiA0MDBLLzgwMEsvNzIwSy8xNDQwSyAqLwotI2RlZmluZQlEUlZfSEQyMAk3CS8qIEFwcGxlIEhEMjAgICAgICAgICAgICovCi0KLS8qIEZvcm1hdCB0eXBlczogKi8KLQotI2RlZmluZQlGTVRfSEQyMAkweDAwMDEJLyogIEFwcGxlIEhEMjAgKi8KLSNkZWZpbmUJRk1UXzQwMEsJMHgwMDAyCS8qICA0MDBLIChHQ1IpICovCi0jZGVmaW5lCUZNVF84MDBLCTB4MDAwNAkvKiAgODAwSyAoR0NSKSAqLwotI2RlZmluZQlGTVRfNzIwSwkweDAwMDgJLyogIDcyMEsgKE1GTSkgKi8KLSNkZWZpbmUJRk1UXzE0NDBLCTB4MDAxMAkvKiAxLjQ0TSAoTUZNKSAqLwotCi0jZGVmaW5lCUZNRF9LSU5EXzQwMEsJMQotI2RlZmluZQlGTURfS0lORF84MDBLCTIKLSNkZWZpbmUJRk1EX0tJTkRfNzIwSwkzCi0jZGVmaW5lCUZNRF9LSU5EXzE0NDBLCTEKLQotLyogSWNvbiBGbGFnczogKi8KLQotI2RlZmluZQlJQ09OX01FRElBCTB4MDEJLyogSGF2ZSBJT1Agc3VwcGx5IG1lZGlhIGljb24gKi8KLSNkZWZpbmUJSUNPTl9EUklWRQkweDAxCS8qIEhhdmUgSU9QIHN1cHBseSBkcml2ZSBpY29uICovCi0KLS8qIEVycm9yIGNvZGVzOiAqLwotCi0jZGVmaW5lCWdjck9uTUZNRXJyCS00MDAJLyogR0NSICg0MDAvODAwSykgb24gSEQgbWVkaWEgKi8KLSNkZWZpbmUJdmVyRXJyCQktODQJLyogdmVyaWZ5IGZhaWxlZCAqLwotI2RlZmluZQlmbXQyRXJyCQktODMJLyogY2FuJ3QgZ2V0IGVub3VnaCBzeW5jIGR1cmluZyBmb3JtYXQgKi8KLSNkZWZpbmUJZm10MUVycgkJLTgyCS8qIGNhbid0IGZpbmQgc2VjdG9yIDAgYWZ0ZXIgdHJhY2sgZm9ybWF0ICovCi0jZGVmaW5lCXNlY3RORkVycgktODEJLyogY2FuJ3QgZmluZCBzZWN0b3IgKi8KLSNkZWZpbmUJc2Vla0VycgkJLTgwCS8qIGRyaXZlIGVycm9yIGR1cmluZyBzZWVrICovCi0jZGVmaW5lCXNwZEFkakVycgktNzkJLyogY2FuJ3Qgc2V0IGRyaXZlIHNwZWVkICovCi0jZGVmaW5lCXR3b1NpZGVFcnIJLTc4CS8qIGRyaXZlIGlzIHNpbmdsZS1zaWRlZCAqLwotI2RlZmluZQlpbml0SVdNRXJyCS03NwkvKiBlcnJvciBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKi8KLSNkZWZpbmUJdGswYmFkRXJyCS03NgkvKiB0cmFjayB6ZXJvIGlzIGJhZCAqLwotI2RlZmluZQljYW50U3RlcEVycgktNzUJLyogZHJpdmUgZXJyb3IgZHVyaW5nIHN0ZXAgKi8KLSNkZWZpbmUJd3JVbmRlcnJ1bgktNzQJLyogd3JpdGUgdW5kZXJydW4gb2NjdXJyZWQgKi8KLSNkZWZpbmUJYmFkREJ0U2xwCS03MwkvKiBiYWQgZGF0YSBiaXRzbGlwIG1hcmtzICovCi0jZGVmaW5lCWJhZERDa3N1bQktNzIJLyogYmFkIGRhdGEgY2hlY2tzdW0gKi8KLSNkZWZpbmUJbm9EdGFNa0VycgktNzEJLyogY2FuJ3QgZmluZCBkYXRhIG1hcmsgKi8KLSNkZWZpbmUJYmFkQnRTbHBFcnIJLTcwCS8qIGJhZCBhZGRyZXNzIGJpdHNsaXAgbWFya3MgKi8KLSNkZWZpbmUJYmFkQ2tzbUVycgktNjkJLyogYmFkIGFkZHJlc3MtbWFyayBjaGVja3N1bSAqLwotI2RlZmluZQlkYXRhVmVyRXJyCS02OAkvKiByZWFkLXZlcmlmeSBmYWlsZWQgKi8KLSNkZWZpbmUJbm9BZHJNa0VycgktNjcJLyogY2FuJ3QgZmluZCBhbiBhZGRyZXNzIG1hcmsgKi8KLSNkZWZpbmUJbm9OeWJFcnIJLTY2CS8qIG5vIG55YmJsZXM/IGRpc2sgaXMgcHJvYmFibHkgZGVnYXVzc2VkICovCi0jZGVmaW5lCW9mZkxpbkVycgktNjUJLyogbm8gZGlzayBpbiBkcml2ZSAqLwotI2RlZmluZQlub0RyaXZlRXJyCS02NAkvKiBkcml2ZSBpc24ndCBjb25uZWN0ZWQgKi8KLSNkZWZpbmUJbnNEcnZFcnIJLTU2CS8qIG5vIHN1Y2ggZHJpdmUgKi8KLSNkZWZpbmUJcGFyYW1FcnIJLTUwCS8qIGJhZCBwb3NpdGlvbmluZyBpbmZvcm1hdGlvbiAqLwotI2RlZmluZQl3UHJFcnIJCS00NAkvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KLSNkZWZpbmUJb3BlbkVycgkJLTIzCS8qIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RydWN0IHN3aW1fZHJ2c3RhdHVzIHsKLQlfX3UxNgljdXJyX3RyYWNrOwkvKiBDdXJyZW50IHRyYWNrIG51bWJlciAgICAgICAgICAgICAgICAgICAqLwotCV9fdTgJd3JpdGVfcHJvdDsJLyogMHg4MCBpZiBkaXNrIGlzIHdyaXRlIHByb3RlY3RlZCAgICAgICAgKi8KLQlfX3U4CWRpc2tfaW5fZHJpdmU7CS8qIDB4MDEgb3IgMHgwMiBpZiBhIGRpc2sgaXMgaW4gdGhlIGRyaXZlICovCi0JX191OAlpbnN0YWxsZWQ7CS8qIDB4MDEgaWYgZHJpdmUgaW5zdGFsbGVkLCAweEZGIGlmIG5vdCAgICovCi0JX191OAludW1fc2lkZXM7CS8qIDB4ODAgaWYgdHdvLXNpZGVkIGZvcm1hdCBzdXBwb3J0ZWQgICAgICovCi0JX191OAl0d29fc2lkZWQ7CS8qIDB4ZmYgaWYgdHdvLXNpZGVkIGZvcm1hdCBkaXNrZXR0ZSAgICAgICovCi0JX191OAluZXdfaW50ZXJmYWNlOwkvKiAweDAwIGlmIG9sZCA0MDBLIGRyaXZlLCAweEZGIGlmIG5ld2VyICAqLwotCV9fdTE2CWVycm9yczsJCS8qIERpc2sgZXJyb3IgY291bnQgICAgICAgICAgICAgICAgICAgICAgICovCi0Jc3RydWN0IHsJCS8qIDMyIGJpdHMgKi8KLQkJX191MTYJcmVzZXJ2ZWQ7Ci0JCV9fdTE2CTo0OwotCQlfX3UxNglleHRlcm5hbDoxOwkvKiBEcml2ZSBpcyBleHRlcm5hbCAgICAgICAgKi8KLQkJX191MTYJc2NzaToxOwkJLyogRHJpdmUgaXMgYSBTQ1NJIGRyaXZlICAgICovCi0JCV9fdTE2CWZpeGVkOjE7CS8qIERyaXZlIGhhcyBmaXhlZCBtZWRpYSAgICAqLwotCQlfX3UxNglzZWNvbmRhcnk6MTsJLyogRHJpdmUgaXMgc2Vjb25kYXJ5IGRyaXZlICovCi0JCV9fdTgJdHlwZTsJCS8qIERyaXZlIHR5cGUgICAgICAgICAgICAgICAqLwotCX0gaW5mbzsKLQlfX3U4CW1mbV9kcml2ZTsJLyogMHhGRiBpZiB0aGlzIGlzIGFuIEZESEQgZHJpdmUgICAgKi8KLQlfX3U4CW1mbV9kaXNrOwkvKiAweEZGIGlmIDcyMEsvMTQ0MEsgKE1GTSkgZGlzayAgICAqLwotCV9fdTgJbWZtX2Zvcm1hdDsJLyogMHgwMCBpZiA3MjBLLCAweEZGIGlmIDE0NDBLICAgICAgKi8KLQlfX3U4CWN0bHJfdHlwZTsJLyogMHgwMCBpZiBJV00sIDB4RkYgaWYgU1dJTSAgICAgICAgKi8KLQlfX3UxNgljdXJyX2Zvcm1hdDsJLyogQ3VycmVudCBmb3JtYXQgdHlwZSAgICAgICAgICAgICAgKi8KLQlfX3UxNglhbGxvd2VkX2ZtdDsJLyogQWxsb3dlZCBmb3JtYXQgdHlwZXMgICAgICAgICAgICAgKi8KLQlfX3UzMgludW1fYmxvY2tzOwkvKiBOdW1iZXIgb2YgYmxvY2tzIG9uIGRpc2sgICAgICAgICAqLwotCV9fdTgJaWNvbl9mbGFnczsJLyogSWNvbiBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlfX3U4CXVudXN1ZWQ7Ci19OwotCi0vKiBDb21tYW5kcyBpc3N1ZWQgZnJvbSB0aGUgaG9zdCB0byB0aGUgSU9QOiAqLwotCi1zdHJ1Y3Qgc3dpbWNtZF9pbml0IHsKLQlfX3U4CWNvZGU7CQkvKiBDTURfSU5JVCAqLwotCV9fdTgJdW51c3VlZDsKLQlfX3UxNgllcnJvcjsKLQlfX3U4CWRyaXZlc1syOF07CS8qIGRyaXZlIHR5cGUgbGlzdCAqLwotfTsKLQotc3RydWN0IHN3aW1jbWRfc3RhcnRwb2xsIHsKLQlfX3U4CWNvZGU7CQkvKiBDTURfU1RBUlRfUE9MTCAqLwotCV9fdTgJdW51c3VlZDsKLQlfX3UxNgllcnJvcjsKLX07Ci0KLXN0cnVjdCBzd2ltY21kX3NldGhmc3RhZyB7Ci0JX191OAljb2RlOwkJLyogQ01EX1NFVEhGU1RBRyAqLwotCV9fdTgJdW51c3VlZDsKLQlfX3UxNgllcnJvcjsKLQljYWRkcl90CXRhZ2J1ZjsJCS8qIEhGUyB0YWcgYnVmZmVyIGFkZHJlc3MgKi8KLX07Ci0KLXN0cnVjdCBzd2ltY21kX3N0YXR1cyB7Ci0JX191OAljb2RlOwkJLyogQ01EX1NUQVRVUyAqLwotCV9fdTgJZHJpdmVfbnVtOwotCV9fdTE2CWVycm9yOwotCXN0cnVjdCBzd2ltX2RydnN0YXR1cyBzdGF0dXM7Ci19OwotCi1zdHJ1Y3Qgc3dpbWNtZF9lamVjdCB7Ci0JX191OAljb2RlOwkJLyogQ01EX0VKRUNUICovCi0JX191OAlkcml2ZV9udW07Ci0JX191MTYJZXJyb3I7Ci0Jc3RydWN0IHN3aW1fZHJ2c3RhdHVzIHN0YXR1czsKLX07Ci0KLXN0cnVjdCBzd2ltY21kX2Zvcm1hdCB7Ci0JX191OAljb2RlOwkJLyogQ01EX0ZPUk1BVCAqLwotCV9fdTgJZHJpdmVfbnVtOwotCV9fdTE2CWVycm9yOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCV9fdTE2IGZtdDsJICAgLyogZm9ybWF0IGtpbmQgICAgICAgICAgICAgICAgICAqLwotCQkJX191OCAgaGRyYnl0ZTsJICAgLyogZm10IGJ5dGUgZm9yIGhkciAoMD1kZWZhdWx0KSAqLwotCQkJX191OCAgaW50ZXJsZWF2ZTsgIC8qIGludGVybGVhdmUgKDAgPSBkZWZhdWx0KSAgICAgKi8KLQkJCWNhZGRyX3QJZGF0YWJ1ZjsgICAvKiBzZWN0b3IgZGF0YSBidWZmICgwPWRlZmF1bHQgICovCi0JCQljYWRkcl90CXRhZ2J1ZjsJICAgLyogdGFnIGRhdGEgYnVmZmVyICgwPWRlZmF1bHQpICAqLwotCQl9IGY7Ci0JCXN0cnVjdCBzd2ltX2RydnN0YXR1cyBzdGF0dXM7Ci0JfSBwOwotfTsKLQotc3RydWN0IHN3aW1jbWRfZm10dmVyaWZ5IHsKLQlfX3U4CWNvZGU7CQkvKiBDTURfRk9STUFUX1ZFUklGWSAqLwotCV9fdTgJZHJpdmVfbnVtOwotCV9fdTE2CWVycm9yOwotfTsKLQotc3RydWN0IHN3aW1jbWRfcncgewotCV9fdTgJY29kZTsJCS8qIENNRF9SRUFELCBDTURfV1JJVEUgb3IgQ01EX1JFQURfVkVSSUZZICovCi0JX191OAlkcml2ZV9udW07Ci0JX191MTYJZXJyb3I7Ci0JY2FkZHJfdAlidWZmZXI7CQkvKiBSL1cgYnVmZmVyIGFkZHJlc3MgKi8KLQlfX3UzMglmaXJzdF9ibG9jazsJLyogU3RhcnRpbmcgYmxvY2sgICAgICovCi0JX191MzIJbnVtX2Jsb2NrczsJLyogTnVtYmVyIG9mIGJsb2NrcyAgICovCi0JX191OAl0YWdbMTJdOwkvKiB0YWcgZGF0YSAgICAgICAgICAgKi8KLX07Ci0KLXN0cnVjdCBzd2ltY21kX2NhY2hlY3RsIHsKLQlfX3U4CWNvZGU7CQkvKiBDTURfQ0FDSEVfQ1RSTCAqLwotCV9fdTgJdW51c2VkOwotCV9fdTE2CWVycm9yOwotCV9fdTgJZW5hYmxlOwkJLyogTm9uemVybyB0byBlbmFibGUgY2FjaGUgICAgICAgICAgICAgICAgKi8KLQlfX3U4CWluc3RhbGw7CS8qICsxID0gaW5zdGFsbCwgLTEgPSByZW1vdmUsIDAgPSBuZWl0aGVyICovCi19OwotCi1zdHJ1Y3Qgc3dpbWNtZF90YWdidWZjdGwgewotCV9fdTgJY29kZTsJCS8qIENNRF9UQUdCVUZGX0NUUkwgKi8KLQlfX3U4CXVudXNlZDsKLQlfX3UxNgllcnJvcjsKLQljYWRkcl90CWJ1ZjsJCS8qIGJ1ZmZlciBhZGRyZXNzIG9yIDAgdG8gZGlzYWJsZSAqLwotfTsKLQotc3RydWN0IHN3aW1jbWRfZ2V0aWNvbiB7Ci0JX191OAljb2RlOwkJLyogQ01EX0dFVF9JQ09OICovCi0JX191OAlkcml2ZV9udW07Ci0JX191MTYJZXJyb3I7Ci0JY2FkZHJfdAlidWZmZXI7CQkvKiBOdWZmZXIgYWRkcmVzcyAqLwotCV9fdTE2CWtpbmQ7CQkvKiAwID0gbWVkaWEgaWNvbiwgMSA9IGRyaXZlIGljb24gKi8KLQlfX3UxNgl1bnVzZWQ7Ci0JX191MTYJbWF4X2J5dGVzOwkvKiBtYXhpbXVtICBieXRlIGNvdW50ICovCi19OwotCi0vKiBNZXNzYWdlcyBmcm9tIHRoZSBTV0lNIElPUCB0byB0aGUgaG9zdCBDUFU6ICovCi0KLXN0cnVjdCBzd2ltbXNnX3N0YXR1cyB7Ci0JX191OAljb2RlOwkJLyogMSA9IGluc2VydCwgMiA9IGVqZWN0LCAzID0gc3RhdHVzIGNoYW5nZWQgKi8KLQlfX3U4CWRyaXZlX251bTsKLQlfX3UxNgllcnJvcjsKLQlzdHJ1Y3Qgc3dpbV9kcnZzdGF0dXMgc3RhdHVzOwotfTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tbTY4ay90ZXJtYml0cy5oCmluZGV4IGU5ZWVjM2UuLmExOTQwOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3Rlcm1iaXRzLmgKQEAgLTE3LDYgKzE3LDE3IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKwogLyogY19jYyBjaGFyYWN0ZXJzICovCiAjZGVmaW5lIFZJTlRSIDAKICNkZWZpbmUgVlFVSVQgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1tNjhrL3VhY2Nlc3MuaAppbmRleCBlNGM5ZjA4Li42YTRjZjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3VhY2Nlc3MuaApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAKICNkZWZpbmUgVkVSSUZZX1JFQUQJMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9jYWNoZWZsdXNoLmgKaW5kZXggYzNhYWRmMy4uMTYzZGNiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY2FjaGVmbHVzaC5oCkBAIC04LDYgKzgsNyBAQAogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJX19mbHVzaF9jYWNoZV9hbGwoKQogI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJX19mbHVzaF9jYWNoZV9hbGwoKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfcmFuZ2Uoc3RhcnQsbGVuKQkJX19mbHVzaF9jYWNoZV9hbGwoKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oIGIvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oCmluZGV4IDFlNWNjZGEuLjhlMzIxZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYm9vdGluZm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2Jvb3RpbmZvLmgKQEAgLTEzMSw2ICsxMzEsNyBAQAogI2RlZmluZSAgTUFDSF9QSElMSVBTX05JTk8JMAkvKiBOaW5vICovCiAjZGVmaW5lICBNQUNIX1BISUxJUFNfVkVMTwkxCS8qIFZlbG8gKi8KICNkZWZpbmUgIE1BQ0hfUEhJTElQU19KQlMJMgkvKiBKQlMgKi8KKyNkZWZpbmUgIE1BQ0hfUEhJTElQU19TVEI4MTAJMwkvKiBTVEI4MTAgKi8KIAogLyoKICAqIFZhbGlkIG1hY2h0eXBlIGZvciBncm91cCBTSUJZVEUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKaW5kZXggZTNjOTkyNS4uMGRkYWRhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKQEAgLTE3LDYgKzE3LDcgQEAKICAqCiAgKiAgLSBmbHVzaF9jYWNoZV9hbGwoKSBmbHVzaGVzIGVudGlyZSBjYWNoZQogICogIC0gZmx1c2hfY2FjaGVfbW0obW0pIGZsdXNoZXMgdGhlIHNwZWNpZmllZCBtbSBjb250ZXh0J3MgY2FjaGUgbGluZXMKKyAqICAtIGZsdXNoX2NhY2hlX2R1cCBtbShtbSkgaGFuZGxlcyBjYWNoZSBmbHVzaGluZyB3aGVuIGZvcmtpbmcKICAqICAtIGZsdXNoX2NhY2hlX3BhZ2UobW0sIHZtYWRkciwgcGZuKSBmbHVzaGVzIGEgc2luZ2xlIHBhZ2UKICAqICAtIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCiAgKiAgLSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2ggYSByYW5nZSBvZiBpbnN0cnVjdGlvbnMKQEAgLTMxLDYgKzMyLDcgQEAKIGV4dGVybiB2b2lkICgqZmx1c2hfY2FjaGVfYWxsKSh2b2lkKTsKIGV4dGVybiB2b2lkICgqX19mbHVzaF9jYWNoZV9hbGwpKHZvaWQpOwogZXh0ZXJuIHZvaWQgKCpmbHVzaF9jYWNoZV9tbSkoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pCWRvIHsgKHZvaWQpIChtbSk7IH0gd2hpbGUgKDApCiBleHRlcm4gdm9pZCAoKmZsdXNoX2NhY2hlX3JhbmdlKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gdm9pZCAoKmZsdXNoX2NhY2hlX3BhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvY2hlY2tzdW0uaAppbmRleCA5Yjc2OGMzLi4yMGE4MWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jaGVja3N1bS5oCkBAIC0yOSwzMSArMjksMzggQEAKICAqLwogX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAorX193c3VtIF9fY3N1bV9wYXJ0aWFsX2NvcHlfdXNlcihjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwKKwkJCQlpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpOworCiAvKgogICogdGhpcyBpcyBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBhYm92ZSB0aGF0IHJlY29yZHMgZXJyb3JzIGl0IGZpbmRzIGluICplcnJwLAogICogYnV0IGNvbnRpbnVlcyBhbmQgemVyb3MgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlci4KICAqLwotX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLAotCQkJCQkgdm9pZCAqZHN0LCBpbnQgbGVuLAotCQkJCQkgX193c3VtIHN1bSwgaW50ICplcnJwKTsKK3N0YXRpYyBpbmxpbmUKK19fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LCBpbnQgbGVuLAorCQkJCSAgIF9fd3N1bSBzdW0sIGludCAqZXJyX3B0cikKK3sKKwltaWdodF9zbGVlcCgpOworCXJldHVybiBfX2NzdW1fcGFydGlhbF9jb3B5X3VzZXIoKF9fZm9yY2Ugdm9pZCAqKXNyYywgZHN0LAorCQkJCQlsZW4sIHN1bSwgZXJyX3B0cik7Cit9CiAKIC8qCiAgKiBDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCiAgKi8KICNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgotc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV9hbmRfY29weV90b191c2VyIChjb25zdCB2b2lkICpzcmMsIHZvaWQgX191c2VyICpkc3QsCi0JCQkJCQkgIGludCBsZW4sIF9fd3N1bSBzdW0sCi0JCQkJCQkgIGludCAqZXJyX3B0cikKK3N0YXRpYyBpbmxpbmUKK19fd3N1bSBjc3VtX2FuZF9jb3B5X3RvX3VzZXIoY29uc3Qgdm9pZCAqc3JjLCB2b2lkIF9fdXNlciAqZHN0LCBpbnQgbGVuLAorCQkJICAgICBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7CiAJbWlnaHRfc2xlZXAoKTsKLQlzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBsZW4sIHN1bSk7Ci0KLQlpZiAoY29weV90b191c2VyKGRzdCwgc3JjLCBsZW4pKSB7CisJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGRzdCwgbGVuKSkKKwkJcmV0dXJuIF9fY3N1bV9wYXJ0aWFsX2NvcHlfdXNlcihzcmMsIChfX2ZvcmNlIHZvaWQgKilkc3QsCisJCQkJCQlsZW4sIHN1bSwgZXJyX3B0cik7CisJaWYgKGxlbikKIAkJKmVycl9wdHIgPSAtRUZBVUxUOwotCQlyZXR1cm4gKF9fZm9yY2UgX193c3VtKS0xOwotCX0KIAotCXJldHVybiBzdW07CisJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSktMTsgLyogaW52YWxpZCBjaGVja3N1bSAqLwogfQogCiAvKgpAQCAtMTUyLDcgKzE1OSw4IEBACiAjZW5kaWYKIAkiCS5zZXQJcG9wIgogCTogIj1yIiAoc3VtKQotCTogIjAiIChkYWRkciksICJyIihzYWRkciksCisJOiAiMCIgKChfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpZGFkZHIpLAorCSAgInIiICgoX19mb3JjZSB1bnNpZ25lZCBsb25nKXNhZGRyKSwKICNpZmRlZiBfX01JUFNFTF9fCiAJICAiciIgKChwcm90byArIGxlbikgPDwgOCksCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jb21wYXQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvY29tcGF0LmgKaW5kZXggNTVhMDE1Mi4uNDMyNjUzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jb21wYXQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NvbXBhdC5oCkBAIC01LDYgKzUsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogI2RlZmluZSBDT01QQVRfVVNFUl9IWgkxMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmggYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaAppbmRleCAwZmUwMjk0Li41MDA3MzE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaApAQCAtMTU3LDcgKzE1Nyw3IEBACiAgKiBwcm9jZXNzb3JzLgogICovCiBBU01NQUNSTyhtdGMwX3RsYndfaGF6YXJkLAotCW5vcAorCW5vcDsgbm9wCiAJKQogQVNNTUFDUk8odGxid191c2VfaGF6YXJkLAogCW5vcDsgbm9wOyBub3AKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL2lycS5oCmluZGV4IDY3NjU3MDguLjM4NmRhODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcnEuaApAQCAtMzEsMTQgKzMxLDE0IEBACiAgKiBmdW5jdGlvbnMgd2lsbCB0YWtlIG92ZXIgcmUtZW5hYmxpbmcgdGhlIGxvdy1sZXZlbCBtYXNrLgogICogT3RoZXJ3aXNlIGl0IHdpbGwgYmUgZG9uZSBvbiByZXR1cm4gZnJvbSBleGNlcHRpb24uCiAgKi8KLSNkZWZpbmUgX19ET19JUlFfU01UQ19IT09LKCkJCQkJCQlcCisjZGVmaW5lIF9fRE9fSVJRX1NNVENfSE9PSyhpcnEpCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAlpZiAoaXJxX2h3bWFza1tpcnFdICYgMHgwMDAwZmYwMCkJCQkJXAogCQl3cml0ZV9jMF90Y2NvbnRleHQocmVhZF9jMF90Y2NvbnRleHQoKSAmCQlcCiAJCSAgICAgICAgICAgICAgICAgICB+KGlycV9od21hc2tbaXJxXSAmIDB4MDAwMGZmMDApKTsJXAogfSB3aGlsZSAoMCkKICNlbHNlCi0jZGVmaW5lIF9fRE9fSVJRX1NNVENfSE9PSygpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19ET19JUlFfU01UQ19IT09LKGlycSkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qCkBAIC01Miw3ICs1Miw3IEBACiAjZGVmaW5lIGRvX0lSUShpcnEpCQkJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCiAJaXJxX2VudGVyKCk7CQkJCQkJCVwKLQlfX0RPX0lSUV9TTVRDX0hPT0soKTsJCQkJCQlcCisJX19ET19JUlFfU01UQ19IT09LKGlycSk7CQkJCQlcCiAJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CQkJCQlcCiAJaXJxX2V4aXQoKTsJCQkJCQkJXAogfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxZmxhZ3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXJxZmxhZ3MuaAppbmRleCA0NmJmNWRlLi5hZjNiMDdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2lycWZsYWdzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcnFmbGFncy5oCkBAIC0xNSw2ICsxNSwyNyBAQAogCiAjaW5jbHVkZSA8YXNtL2hhemFyZHMuaD4KIAorLyoKKyAqIENPTkZJR19NSVBTX01UX1NNVENfSU5TVEFOVF9SRVBMQVkgZG9lcyBwcm9tcHQgcmVwbGF5IG9mIGRlZmVycmVkIElQSXMsCisgKiBhdCB0aGUgY29zdCBvZiBicmFuY2ggYW5kIGNhbGwgb3ZlcmhlYWQgb24gZWFjaCBsb2NhbF9pcnFfcmVzdG9yZSgpCisgKi8KKworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVENfSU5TVEFOVF9SRVBMQVkKKworZXh0ZXJuIHZvaWQgc210Y19pcGlfcmVwbGF5KHZvaWQpOworCisjZGVmaW5lIGlycV9yZXN0b3JlX2VwaWxvZyhmbGFncykJCQkJXAorZG8gewkJCQkJCQkJXAorCWlmICghKGZsYWdzICYgMHgwNDAwKSkJCQkJCVwKKwkJc210Y19pcGlfcmVwbGF5KCk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNlbHNlCisKKyNkZWZpbmUgaXJxX3Jlc3RvcmVfZXBpbG9nKGlnbm9yZSkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQ19JTlNUQU5UX1JFUExBWSAqLworCiBfX2FzbV9fICgKIAkiCS5tYWNybwlyYXdfbG9jYWxfaXJxX2VuYWJsZQkJCQlcbiIKIAkiCS5zZXQJcHVzaAkJCQkJCVxuIgpAQCAtMTkzLDYgKzIxNCw3IEBACiAJCTogIj1yIiAoX190bXAxKQkJCQkJCVwKIAkJOiAiMCIgKGZsYWdzKQkJCQkJCVwKIAkJOiAibWVtb3J5Iik7CQkJCQkJXAorCWlycV9yZXN0b3JlX2VwaWxvZyhmbGFncyk7CQkJCQlcCiB9IHdoaWxlKDApCiAKIHN0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9pcnEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2lycS5oCmluZGV4IDgwNjIxM2MuLjI1ZjBjM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2lycS5oCkBAIC0xMCw4ICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfSVAyN19JUlFfSAogI2RlZmluZSBfX0FTTV9NQUNIX0lQMjdfSVJRX0gKIAotI2luY2x1ZGUgPGFzbS9zbi9hcmNoLmg+Ci0KIC8qCiAgKiBBIGhhcmR3aXJlZCBpbnRlcnJ1cHQgbnVtYmVyIGlzIGNvbXBsZXRseSBzdHVwaWQgZm9yIHRoaXMgc3lzdGVtIC0gYQogICogbGFyZ2UgY29uZmlndXJhdGlvbiBtaWdodCBoYXZlIHRob3VzYW5kcyBpZiBub3QgdGVudGhvdXNhbmRzIG9mCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvdG9wb2xvZ3kuaAppbmRleCBhMTNiNzE1Li40NDc5MGZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L3RvcG9sb2d5LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTUFDSF9UT1BPTE9HWV9ICiAjZGVmaW5lIF9BU01fTUFDSF9UT1BPTE9HWV9ICTEKIAotI2luY2x1ZGUgPGFzbS9zbi9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2h1Yi5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtMjAwL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1taXBzL21hY2gtcm0yMDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLW1pcHMvbWFjaC1ybS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtMjAwL21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtcm0vbWMxNDY4MThydGMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtMjAwL21jMTQ2ODE4cnRjLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLW1pcHMvbWFjaC1ybS9tYzE0NjgxOHJ0Yy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcm0yMDAvdGltZXguaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1ybS90aW1leC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1taXBzL21hY2gtcm0yMDAvdGltZXguaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tbWlwcy9tYWNoLXJtL3RpbWV4LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGFnZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKaW5kZXggMGRjMWE0NS4uMmY5ZTFhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKQEAgLTM1LDcgKzM1LDYgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KLSNpbmNsdWRlIDxhc20vY3B1LWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIGV4dGVybiB2b2lkIGNsZWFyX3BhZ2Uodm9pZCAqIHBhZ2UpOwpAQCAtNjEsMTYgKzYwLDEzIEBACiAJCWZsdXNoX2RhdGFfY2FjaGVfcGFnZSgodW5zaWduZWQgbG9uZylhZGRyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnZ0bywgdm9pZCAqdmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0Jc3RydWN0IHBhZ2UgKnRvKQotewotCWV4dGVybiB2b2lkICgqZmx1c2hfZGF0YV9jYWNoZV9wYWdlKSh1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdnRvLCB2b2lkICp2ZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwKKwlzdHJ1Y3QgcGFnZSAqdG8pOworc3RydWN0IHZtX2FyZWFfc3RydWN0OworZXh0ZXJuIHZvaWQgY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCisJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCi0JY29weV9wYWdlKHZ0bywgdmZyb20pOwotCWlmICghY3B1X2hhc19pY19maWxsc19mX2RjIHx8Ci0JICAgIHBhZ2VzX2RvX2FsaWFzKCh1bnNpZ25lZCBsb25nKXZ0bywgdmFkZHIgJiBQQUdFX01BU0spKQotCQlmbHVzaF9kYXRhX2NhY2hlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdnRvKTsKLX0KKyNkZWZpbmUgX19IQVZFX0FSQ0hfQ09QWV9VU0VSX0hJR0hQQUdFCiAKIC8qCiAgKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHVzZSBvZiBDIHR5cGUtY2hlY2tpbmcuLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wY2kuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGNpLmgKaW5kZXggYzRkNjhiZS4uN2YwZjEyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BjaS5oCkBAIC0xODcsNCArMTg3LDEwIEBACiAvKiBEbyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYXQgcGNpX2VuYWJsZV9kZXZpY2UoKSB0aW1lICovCiBleHRlcm4gaW50IHBjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAorLyogQ2hhbmNlcyBhcmUgdGhpcyBpbnRlcnJ1cHQgaXMgd2lyZWQgUEMtc3R5bGUgLi4uICAqLworc3RhdGljIGlubGluZSBpbnQgcGNpX2dldF9sZWdhY3lfaWRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCA/IDE1IDogMTQ7Cit9CisKICNlbmRpZiAvKiBfQVNNX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oCmluZGV4IGYyZTEzMjUuLjNmY2ZkNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS5oCkBAIC02OSwxNiArNjksNiBAQAogI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpIFwKIAkodmlydF90b19wYWdlKCh2b2lkICopKGVtcHR5X3plcm9fcGFnZSArICgoKHVuc2lnbmVkIGxvbmcpKHZhZGRyKSkgJiB6ZXJvX3BhZ2VfbWFzaykpKSkKIAotI2RlZmluZSBfX0hBVkVfQVJDSF9NT1ZFX1BURQotI2RlZmluZSBtb3ZlX3B0ZShwdGUsIHByb3QsIG9sZF9hZGRyLCBuZXdfYWRkcikJCQkJXAotKHsJCQkJCQkJCQlcCi0gCXB0ZV90IG5ld3B0ZSA9IChwdGUpOwkJCQkJCVwKLQlpZiAocHRlX3ByZXNlbnQocHRlKSAmJiBwZm5fdmFsaWQocHRlX3BmbihwdGUpKSAmJgkJXAotCQkJcHRlX3BhZ2UocHRlKSA9PSBaRVJPX1BBR0Uob2xkX2FkZHIpKQkJXAotCQluZXdwdGUgPSBta19wdGUoWkVST19QQUdFKG5ld19hZGRyKSwgKHByb3QpKTsJCVwKLQluZXdwdGU7CQkJCQkJCQlcCi19KQotCiBleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCmluZGV4IDMwYmY1NTUuLjhhMWYyYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaApAQCAtODIsNiArODIsMTQgQEAKIAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZW50cnlleGl0KTsKIAorZXh0ZXJuIE5PUkVUX1RZUEUgdm9pZCBkaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRpZV9pZl9rZXJuZWwoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAodW5saWtlbHkoIXVzZXJfbW9kZShyZWdzKSkpCisJCWRpZShzdHIsIHJlZ3MpOworfQorCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vYXJjaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hcmNoLmgKaW5kZXggNTExNzRhZi4uZGE1MjNkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9hcmNoLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hcmNoLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNlbmRpZgogCiB0eXBlZGVmIHU2NAlodWJyZWdfdDsKLXR5cGVkZWYgdTY0CW5pY190OwogCiAjZGVmaW5lIGNwdXRvbmFzaWQoY3B1KQkJCShjcHVfZGF0YVsoY3B1KV0ucF9uYXNpZCkKICNkZWZpbmUgY3B1dG9zbGljZShjcHUpCQkJKGNwdV9kYXRhWyhjcHUpXS5wX3NsaWNlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oCmluZGV4IDE1ZDcwY2EuLjgyYWViOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2tsY29uZmlnLmgKQEAgLTYxLDYgKzYxLDggQEAKICNlbmRpZiAvKiBDT05GSUdfU0dJX0lQMzUgKi8KICNlbmRpZiAvKiBDT05GSUdfU0dJX0lQMjcgfHwgQ09ORklHX1NHSV9JUDM1ICovCiAKK3R5cGVkZWYgdTY0ICBuaWNfdDsKKwogI2RlZmluZSBLTENGR0lORk9fTUFHSUMJMHhiZWVkYmFiZQogCiB0eXBlZGVmIHMzMiBrbGNvbmZfb2ZmX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaAppbmRleCA5NDI4MDU3Li41ZTEyODljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxhc20vYmFycmllci5oPgogI2luY2x1ZGUgPGFzbS9jcHUtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxhc20vZHNwLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS93YXIuaD4KIAogCkBAIC0zMzYsMTQgKzMzNSw2IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBlYmFzZTsKIGV4dGVybiB2b2lkIHBlcl9jcHVfdHJhcF9pbml0KHZvaWQpOwogCi1leHRlcm4gTk9SRVRfVFlQRSB2b2lkIGRpZShjb25zdCBjaGFyICosIHN0cnVjdCBwdF9yZWdzICopOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGllX2lmX2tlcm5lbChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWlmICh1bmxpa2VseSghdXNlcl9tb2RlKHJlZ3MpKSkKLQkJZGllKHN0ciwgcmVncyk7Ci19Ci0KIGV4dGVybiBpbnQgc3RvcF9hX2VuYWJsZWQ7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1taXBzL3Rlcm1iaXRzLmgKaW5kZXggYjYyZWM3Yy4uMGJiZTA3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdGVybWJpdHMuaApAQCAtMzAsNiArMzAsMTcgQEAKIAljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KIH07CiAKK3N0cnVjdCBrdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCiAvKiBjX2NjIGNoYXJhY3RlcnMgKi8KICNkZWZpbmUgVklOVFIJCSAwCQkvKiBJbnRlcnJ1cHQgY2hhcmFjdGVyIFtJU0lHXS4gICovCiAjZGVmaW5lIFZRVUlUCQkgMQkJLyogUXVpdCBjaGFyYWN0ZXIgW0lTSUddLiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvdGhyZWFkX2luZm8uaAppbmRleCBlNDc1YzQ1Li5mYmNkYTgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy90aHJlYWRfaW5mby5oCkBAIC0xMTgsNiArMTE4LDcgQEAKICNkZWZpbmUgVElGX1VTRURGUFUJCTE2CS8qIEZQVSB3YXMgdXNlZCBieSB0aGlzIHRhc2sgdGhpcyBxdWFudHVtIChTTVApICovCiAjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNwkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcgVElGX05FRURfUkVTQ0hFRCAqLwogI2RlZmluZSBUSUZfTUVNRElFCQkxOAorI2RlZmluZSBUSUZfRlJFRVpFCQkxOQogI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkzMQkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCkBAIC0xMjksNiArMTMwLDcgQEAKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCiAjZGVmaW5lIF9USUZfVVNFREZQVQkJKDE8PFRJRl9VU0VERlBVKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJKDB4MDAwMGZmZWYgJiB+X1RJRl9TRUNDT01QKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy93YXIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvd2FyLmgKaW5kZXggM2FjMTQ2Yy4uMTNhMzUwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy93YXIuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3dhci5oCkBAIC03Niw3ICs3Niw3IEBACiAvKgogICogQnV0IHRoZSBSTTIwMEMgc2VlbXMgdG8gaGF2ZSBiZWVuIHNoaXBwZWQgb25seSB3aXRoIFYyLjAgUjQ2MDBzCiAgKi8KLSNpZmRlZiBDT05GSUdfU05JX1JNMjAwX1BDSQorI2lmZGVmIENPTkZJR19TTklfUk0KIAogI2RlZmluZSBSNDYwMF9WMl9ISVRfQ0FDSEVPUF9XQVIJMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlZmx1c2guaAppbmRleCAyYmM0MWYyLi5hNzk5ZGQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZWZsdXNoLmgKQEAgLTE1LDYgKzE1LDggQEAKICNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pIGZsdXNoX2NhY2hlX2FsbF9sb2NhbCgpCiAjZW5kaWYKIAorI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pIGZsdXNoX2NhY2hlX21tKG1tKQorCiAjZGVmaW5lIGZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2Uoc3RhcnQsc2l6ZSkgXAogCWZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2VfYXNtKChzdGFydCksIChzdGFydCkrKHNpemUpKTsKIApAQCAtMTg0LDcgKzE4Niw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZtYWRkcikKK2ZsdXNoX2Fub25fcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQogewogCWlmIChQYWdlQW5vbihwYWdlKSkKIAkJZmx1c2hfdXNlcl9kY2FjaGVfcGFnZSh2bWFkZHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvdGVybWJpdHMuaAppbmRleCAzNzJiNjM0Li5hNDZlMjk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvdGVybWJpdHMuaApAQCAtMTcsNiArMTcsMTcgQEAKIAljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KIH07CiAKK3N0cnVjdCBrdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCiAvKiBjX2NjIGNoYXJhY3RlcnMgKi8KICNkZWZpbmUgVklOVFIgMAogI2RlZmluZSBWUVVJVCAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL0tidWlsZCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvS2J1aWxkCmluZGV4IDFlNjM3MzguLjcwMzk3MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvS2J1aWxkCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvS2J1aWxkCkBAIC0xNyw3ICsxNyw2IEBACiBoZWFkZXIteSArPSBwb2xsLmgKIGhlYWRlci15ICs9IHNobXBhcmFtLmgKIGhlYWRlci15ICs9IHNvY2tpb3MuaAotaGVhZGVyLXkgKz0gc3B1X2luZm8uaAogaGVhZGVyLXkgKz0gdWNvbnRleHQuaAogaGVhZGVyLXkgKz0gaW9jdGwuaAogaGVhZGVyLXkgKz0gbGlua2FnZS5oCkBAIC0zNyw2ICszNiw3IEBACiB1bmlmZGVmLXkgKz0gcHRyYWNlLmgKIHVuaWZkZWYteSArPSBzZWNjb21wLmgKIHVuaWZkZWYteSArPSBzaWduYWwuaAordW5pZmRlZi15ICs9IHNwdV9pbmZvLmgKIHVuaWZkZWYteSArPSB0ZXJtaW9zLmgKIHVuaWZkZWYteSArPSB0eXBlcy5oCiB1bmlmZGVmLXkgKz0gdW5pc3RkLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oCmluZGV4IDUzMjgzZTIuLmYwMzhlMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaApAQCAtMjA3LDcgKzIwNyw4IEBACiAKIC8qCiAgKiBBdG9taWNhbGx5IHRlc3QgKnYgYW5kIGRlY3JlbWVudCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMC4KLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvbGQgdmFsdWUgb2YgKnYgbWludXMgMS4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvbGQgdmFsdWUgb2YgKnYgbWludXMgMSwgZXZlbiBpZgorICogdGhlIGF0b21pYyB2YXJpYWJsZSwgdiwgd2FzIG5vdCBkZWNyZW1lbnRlZC4KICAqLwogc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19kZWNfaWZfcG9zaXRpdmUoYXRvbWljX3QgKnYpCiB7CkBAIC0yMTYsMTQgKzIxNywxNSBAQAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCUxXU1lOQ19PTl9TTVAKICIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19kZWNfaWZfcG9zaXRpdmVcblwKLQlhZGRpYy4JJTAsJTAsLTFcblwKKwljbXB3aQklMCwxXG5cCisJYWRkaQklMCwlMCwtMVxuXAogCWJsdC0JMmZcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCSUwLDAsJTFcblwKIAlibmUtCTFiIgogCUlTWU5DX09OX1NNUAogCSJcblwKLTI6Igk6ICI9JnIiICh0KQorMjoiCTogIj0mYiIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9iaXRvcHMuaAppbmRleCBjMzQxMDYzLi44Zjc1N2Y2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmgKQEAgLTE5MCw3ICsxOTAsOCBAQAogICogUmV0dXJuIHRoZSB6ZXJvLWJhc2VkIGJpdCBwb3NpdGlvbiAoTEUsIG5vdCBJQk0gYml0IG51bWJlcmluZykgb2YKICAqIHRoZSBtb3N0IHNpZ25pZmljYW50IDEtYml0IGluIGEgZG91YmxlIHdvcmQuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBfX2lsb2cyKHVuc2lnbmVkIGxvbmcgeCkKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGNvbnN0KSkKK2ludCBfX2lsb2cyKHVuc2lnbmVkIGxvbmcgeCkKIHsKIAlpbnQgbHo7CiAKQEAgLTE5OCw2ICsxOTksMjQgQEAKIAlyZXR1cm4gQklUU19QRVJfTE9ORyAtIDEgLSBsejsKIH0KIAorc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpCitpbnQgX19pbG9nMl91MzIodTMyIG4pCit7CisJaW50IGJpdDsKKwlhc20gKCJjbnRsencgJTAsJTEiIDogIj1yIiAoYml0KSA6ICJyIiAobikpOworCXJldHVybiAzMSAtIGJpdDsKK30KKworI2lmZGVmIF9fcG93ZXJwYzY0X18KK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoY29uc3QpKQoraW50IF9faWxvZzJfdTY0KHU2NCBuKQoreworCWludCBiaXQ7CisJYXNtICgiY250bHpkICUwLCUxIiA6ICI9ciIgKGJpdCkgOiAiciIgKG4pKTsKKwlyZXR1cm4gNjMgLSBiaXQ7Cit9CisjZW5kaWYKKwogLyoKICAqIERldGVybWluZXMgdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgMCBiaXQgaW4gdGhlCiAgKiBzcGVjaWZpZWQgZG91YmxlIHdvcmQuIFRoZSByZXR1cm5lZCBiaXQgcG9zaXRpb24gd2lsbCBiZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9idWcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYnVnLmgKaW5kZXggOTc4YjJjNy4uZjZmYTM5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2J1Zy5oCkBAIC0xMSwzOCArMTEsNjIgQEAKICNkZWZpbmUgQlVHX09QQ09ERSAubG9uZyAweDAwYjAwYjAwICAvKiBGb3IgYXNtICovCiAjZGVmaW5lIEJVR19JTExFR0FMX0lOU1RSICIweDAwYjAwYjAwIiAvKiBGb3IgQlVHIG1hY3JvICovCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXN0cnVjdCBidWdfZW50cnkgewotCXVuc2lnbmVkIGxvbmcJYnVnX2FkZHI7Ci0JbG9uZwkJbGluZTsKLQljb25zdCBjaGFyCSpmaWxlOwotCWNvbnN0IGNoYXIJKmZ1bmN0aW9uOwotfTsKLQotc3RydWN0IGJ1Z19lbnRyeSAqZmluZF9idWcodW5zaWduZWQgbG9uZyBidWdhZGRyKTsKLQotLyoKLSAqIElmIHRoaXMgYml0IGlzIHNldCBpbiB0aGUgbGluZSBudW1iZXIgaXQgbWVhbnMgdGhhdCB0aGUgdHJhcAotICogaXMgZm9yIFdBUk5fT04gcmF0aGVyIHRoYW4gQlVHIG9yIEJVR19PTi4KLSAqLwotI2RlZmluZSBCVUdfV0FSTklOR19UUkFQCTB4MTAwMDAwMAotCiAjaWZkZWYgQ09ORklHX0JVRwogCisjaWZkZWYgX19BU1NFTUJMWV9fCisjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKKy5tYWNybyBFTUlUX0JVR19FTlRSWSBhZGRyLGZpbGUsbGluZSxmbGFncworCSAuc2VjdGlvbiBfX2J1Z190YWJsZSwiYSIKKzUwMDE6CSBQUENfTE9ORyBcYWRkciwgNTAwMmYKKwkgLnNob3J0IFxsaW5lLCBcZmxhZ3MKKwkgLm9yZyA1MDAxYitCVUdfRU5UUllfU0laRQorCSAucHJldmlvdXMKKwkgLnNlY3Rpb24gLnJvZGF0YSwiYSIKKzUwMDI6CSAuYXNjaXogIlxmaWxlIgorCSAucHJldmlvdXMKKy5lbmRtCisjZWxzZQorIC5tYWNybyBFTUlUX0JVR19FTlRSWSBhZGRyLGZpbGUsbGluZSxmbGFncworCSAuc2VjdGlvbiBfX2J1Z190YWJsZSwiYSIKKzUwMDE6CSBQUENfTE9ORyBcYWRkcgorCSAuc2hvcnQgXGZsYWdzCisJIC5vcmcgNTAwMWIrQlVHX0VOVFJZX1NJWkUKKwkgLnByZXZpb3VzCisuZW5kbQorI2VuZGlmIC8qIHZlcmJvc2UgKi8KKworI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLworLyogX0VNSVRfQlVHX0VOVFJZIGV4cGVjdHMgYXJncyAlMCwlMSwlMiwlMyB0byBiZSBGSUxFLCBMSU5FLCBmbGFncyBhbmQKKyAgIHNpemVvZihzdHJ1Y3QgYnVnX2VudHJ5KSwgcmVzcGVjdGl2ZWx5ICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKKyNkZWZpbmUgX0VNSVRfQlVHX0VOVFJZCQkJCVwKKwkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcbiIJCVwKKwkiMjpcdCIgUFBDX0xPTkcgIjFiLCAlMFxuIgkJXAorCSJcdC5zaG9ydCAlMSwgJTJcbiIJCQlcCisJIi5vcmcgMmIrJTNcbiIJCQkJXAorCSIucHJldmlvdXNcbiIKKyNlbHNlCisjZGVmaW5lIF9FTUlUX0JVR19FTlRSWQkJCQlcCisJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQlcCisJIjI6XHQiIFBQQ19MT05HICIxYlxuIgkJCVwKKwkiXHQuc2hvcnQgJTJcbiIJCQkJXAorCSIub3JnIDJiKyUzXG4iCQkJCVwKKwkiLnByZXZpb3VzXG4iCisjZW5kaWYKKwogLyoKICAqIEJVR19PTigpIGFuZCBXQVJOX09OKCkgZG8gdGhlaXIgYmVzdCB0byBjb29wZXJhdGUgd2l0aCBjb21waWxlLXRpbWUKICAqIG9wdGltaXNhdGlvbnMuIEhvd2V2ZXIgZGVwZW5kaW5nIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBjb25kaXRpb24KICAqIHNvbWUgY29tcGlsZXIgdmVyc2lvbnMgbWF5IG5vdCBwcm9kdWNlIG9wdGltYWwgcmVzdWx0cy4KICAqLwogCi0jZGVmaW5lIEJVRygpIGRvIHsJCQkJCQkJIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkgXAotCQkiMToJdHdpIDMxLDAsMFxuIgkJCQkJIFwKLQkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJCSBcCi0JCSJcdCJQUENfTE9ORyIJMWIsJTAsJTEsJTJcbiIJCQkJIFwKLQkJIi5wcmV2aW91cyIJCQkJCQkgXAotCQk6IDogImkiIChfX0xJTkVfXyksICJpIiAoX19GSUxFX18pLCAiaSIgKF9fRlVOQ1RJT05fXykpOyBcCisjZGVmaW5lIEJVRygpIGRvIHsJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCSIxOgl0d2kgMzEsMCwwXG4iCQkJCVwKKwkJX0VNSVRfQlVHX0VOVFJZCQkJCQlcCisJCTogOiAiaSIgKF9fRklMRV9fKSwgImkiIChfX0xJTkVfXyksCQlcCisJCSAgICAiaSIgKDApLCAiaSIgIChzaXplb2Yoc3RydWN0IGJ1Z19lbnRyeSkpKTsJXAorCWZvcig7OykgOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQlVHX09OKHgpIGRvIHsJCQkJCQlcCkBAIC01MSwyMyArNzUsMjEgQEAKIAkJCUJVRygpOwkJCQkJXAogCX0gZWxzZSB7CQkJCQkJXAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAotCQkiMToJIlBQQ19UTE5FSSIJJTAsMFxuIgkJCVwKLQkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiXHQiUFBDX0xPTkciCTFiLCUxLCUyLCUzXG4iCQkJXAotCQkiLnByZXZpb3VzIgkJCQkJXAotCQk6IDogInIiICgobG9uZykoeCkpLCAiaSIgKF9fTElORV9fKSwJCVwKLQkJICAgICJpIiAoX19GSUxFX18pLCAiaSIgKF9fRlVOQ1RJT05fXykpOwlcCisJCSIxOgkiUFBDX1RMTkVJIgklNCwwXG4iCQkJXAorCQlfRU1JVF9CVUdfRU5UUlkJCQkJCVwKKwkJOiA6ICJpIiAoX19GSUxFX18pLCAiaSIgKF9fTElORV9fKSwgImkiICgwKSwJXAorCQkgICJpIiAoc2l6ZW9mKHN0cnVjdCBidWdfZW50cnkpKSwJCVwKKwkJICAiciIgKChsb25nKSh4KSkpOwkJCQlcCiAJfQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIF9fV0FSTigpIGRvIHsJCQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCiAJCSIxOgl0d2kgMzEsMCwwXG4iCQkJCVwKLQkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiXHQiUFBDX0xPTkciCTFiLCUwLCUxLCUyXG4iCQkJXAotCQkiLnByZXZpb3VzIgkJCQkJXAotCQk6IDogImkiIChfX0xJTkVfXyArIEJVR19XQVJOSU5HX1RSQVApLAkJXAotCQkgICAgImkiIChfX0ZJTEVfXyksICJpIiAoX19GVU5DVElPTl9fKSk7CVwKKwkJX0VNSVRfQlVHX0VOVFJZCQkJCQlcCisJCTogOiAiaSIgKF9fRklMRV9fKSwgImkiIChfX0xJTkVfXyksCQlcCisJCSAgImkiIChCVUdGTEFHX1dBUk5JTkcpLAkJCVwKKwkJICAiaSIgKHNpemVvZihzdHJ1Y3QgYnVnX2VudHJ5KSkpOwkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBXQVJOX09OKHgpICh7CQkJCQkJXApAQCAtNzcsMTMgKzk5LDEyIEBACiAJCQlfX1dBUk4oKTsJCQkJXAogCX0gZWxzZSB7CQkJCQkJXAogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAotCQkiMToJIlBQQ19UTE5FSSIJJTAsMFxuIgkJCVwKLQkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiXHQiUFBDX0xPTkciCTFiLCUxLCUyLCUzXG4iCQkJXAotCQkiLnByZXZpb3VzIgkJCQkJXAotCQk6IDogInIiIChfX3JldF93YXJuX29uKSwJCQlcCi0JCSAgICAiaSIgKF9fTElORV9fICsgQlVHX1dBUk5JTkdfVFJBUCksCQlcCi0JCSAgICAiaSIgKF9fRklMRV9fKSwgImkiIChfX0ZVTkNUSU9OX18pKTsJXAorCQkiMToJIlBQQ19UTE5FSSIJJTQsMFxuIgkJCVwKKwkJX0VNSVRfQlVHX0VOVFJZCQkJCQlcCisJCTogOiAiaSIgKF9fRklMRV9fKSwgImkiIChfX0xJTkVfXyksCQlcCisJCSAgImkiIChCVUdGTEFHX1dBUk5JTkcpLAkJCVwKKwkJICAiaSIgKHNpemVvZihzdHJ1Y3QgYnVnX2VudHJ5KSksCQlcCisJCSAgInIiIChfX3JldF93YXJuX29uKSk7CQkJCVwKIAl9CQkJCQkJCVwKIAl1bmxpa2VseShfX3JldF93YXJuX29uKTsJCQkJXAogfSkKQEAgLTkxLDggKzExMiw4IEBACiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKICNkZWZpbmUgSEFWRV9BUkNIX0JVR19PTgogI2RlZmluZSBIQVZFX0FSQ0hfV0FSTl9PTgotI2VuZGlmIC8qIENPTkZJR19CVUcgKi8KICNlbmRpZiAvKiBfX0FTU0VNQkxZIF9fICovCisjZW5kaWYgLyogQ09ORklHX0JVRyAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZWZsdXNoLmgKaW5kZXggOGE3NDBjOC4uMDhlOTNlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZWZsdXNoLmgKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGFnZSkJCWRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaAppbmRleCA2ZmU1YzlkLi43Mzg0YjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCkBAIC0xMjYsNiArMTI2LDcgQEAKICNkZWZpbmUgQ1BVX0ZUUl9OT0RTSVNSQUxJR04JCUFTTV9DT05TVCgweDAwMDAwMDAwMDAxMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfUFBDX0xFCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDIwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9SRUFMX0xFCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDQwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9GUFVfVU5BVkFJTEFCTEUJCUFTTV9DT05TVCgweDAwMDAwMDAwMDA4MDAwMDApCiAKIC8qCiAgKiBBZGQgdGhlIDY0LWJpdCBwcm9jZXNzb3IgdW5pcXVlIGZlYXR1cmVzIGluIHRoZSB0b3AgaGFsZiBvZiB0aGUgd29yZDsKQEAgLTE1Miw2ICsxNTMsNyBAQAogI2RlZmluZSBDUFVfRlRSX1BVUlIJCQlMT05HX0FTTV9DT05TVCgweDAwMDA0MDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfQ0VMTF9UQl9CVUcJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDgwMDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9TUFVSUgkJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMTAwMDAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9EU0NSCQkJTE9OR19BU01fQ09OU1QoMHgwMDAyMDAwMDAwMDAwMDAwKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC0yOTUsNiArMjk3LDkgQEAKICNkZWZpbmUgQ1BVX0ZUUlNfRTMwMAkoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfTUFZQkVfQ0FOX0RPWkUgfCBcCiAJICAgIENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9NQVlCRV9DQU5fTkFQIHwgQ1BVX0ZUUl9IQVNfSElHSF9CQVRTIHwgXAogCSAgICBDUFVfRlRSX0NPTU1PTikKKyNkZWZpbmUgQ1BVX0ZUUlNfRTMwMEMyCShDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9NQVlCRV9DQU5fRE9aRSB8IFwKKwkgICAgQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX01BWUJFX0NBTl9OQVAgfCBDUFVfRlRSX0hBU19ISUdIX0JBVFMgfCBcCisJICAgIENQVV9GVFJfQ09NTU9OIHwgQ1BVX0ZUUl9GUFVfVU5BVkFJTEFCTEUpCiAjZGVmaW5lIENQVV9GVFJTX0NMQVNTSUMzMgkoQ1BVX0ZUUl9DT01NT04gfCBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgXAogCSAgICBDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfSFBURV9UQUJMRSkKICNkZWZpbmUgQ1BVX0ZUUlNfOFhYCShDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIpCkBAIC0zMzAsMTMgKzMzNSwxNCBAQAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCiAJICAgIENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8IFwKIAkgICAgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUgfCBDUFVfRlRSX0xPQ0tMRVNTX1RMQklFIHwgXAotCSAgICBDUFVfRlRSX1BVUlIgfCBDUFVfRlRSX1NQVVJSIHwgQ1BVX0ZUUl9SRUFMX0xFKQorCSAgICBDUFVfRlRSX1BVUlIgfCBDUFVfRlRSX1NQVVJSIHwgQ1BVX0ZUUl9SRUFMX0xFIHwgXAorCSAgICBDUFVfRlRSX0RTQ1IpCiAjZGVmaW5lIENQVV9GVFJTX1BPV0VSNlggKENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBDUFVfRlRSX1VTRV9UQiB8IFwKIAkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCiAJICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8IFwKIAkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFIHwgXAotCSAgICBDUFVfRlRSX1NQVVJSIHwgQ1BVX0ZUUl9SRUFMX0xFKQorCSAgICBDUFVfRlRSX1NQVVJSIHwgQ1BVX0ZUUl9SRUFMX0xFIHwgQ1BVX0ZUUl9EU0NSKQogI2RlZmluZSBDUFVfRlRSU19DRUxMCShDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCiAJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfQ1RSTCB8IFwKIAkgICAgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfCBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCkBAIC0zNjQsNyArMzcwLDggQEAKIAkgICAgQ1BVX0ZUUlNfNzQ1MF8yMSB8IENQVV9GVFJTXzc0NTBfMjMgfCBDUFVfRlRSU183NDU1XzEgfAogCSAgICBDUFVfRlRSU183NDU1XzIwIHwgQ1BVX0ZUUlNfNzQ1NSB8IENQVV9GVFJTXzc0NDdfMTAgfAogCSAgICBDUFVfRlRSU183NDQ3IHwgQ1BVX0ZUUlNfNzQ0N0EgfCBDUFVfRlRSU184MlhYIHwKLQkgICAgQ1BVX0ZUUlNfRzJfTEUgfCBDUFVfRlRSU19FMzAwIHwgQ1BVX0ZUUlNfQ0xBU1NJQzMyIHwKKwkgICAgQ1BVX0ZUUlNfRzJfTEUgfCBDUFVfRlRSU19FMzAwIHwgQ1BVX0ZUUlNfRTMwMEMyIHwKKwkgICAgQ1BVX0ZUUlNfQ0xBU1NJQzMyIHwKICNlbHNlCiAJICAgIENQVV9GVFJTX0dFTkVSSUNfMzIgfAogI2VuZGlmCkBAIC00MDMsNyArNDEwLDggQEAKIAkgICAgQ1BVX0ZUUlNfNzQ1MF8yMSAmIENQVV9GVFJTXzc0NTBfMjMgJiBDUFVfRlRSU183NDU1XzEgJgogCSAgICBDUFVfRlRSU183NDU1XzIwICYgQ1BVX0ZUUlNfNzQ1NSAmIENQVV9GVFJTXzc0NDdfMTAgJgogCSAgICBDUFVfRlRSU183NDQ3ICYgQ1BVX0ZUUlNfNzQ0N0EgJiBDUFVfRlRSU184MlhYICYKLQkgICAgQ1BVX0ZUUlNfRzJfTEUgJiBDUFVfRlRSU19FMzAwICYgQ1BVX0ZUUlNfQ0xBU1NJQzMyICYKKwkgICAgQ1BVX0ZUUlNfRzJfTEUgJiBDUFVfRlRSU19FMzAwICYgQ1BVX0ZUUlNfRTMwMEMyICYKKwkgICAgQ1BVX0ZUUlNfQ0xBU1NJQzMyICYKICNlbHNlCiAJICAgIENQVV9GVFJTX0dFTkVSSUNfMzIgJgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Rjci1uYXRpdmUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZGNyLW5hdGl2ZS5oCmluZGV4IGZkNGE1ZjUuLmQ3YTFiYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZGNyLW5hdGl2ZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZGNyLW5hdGl2ZS5oCkBAIC0yMCw4ICsyMCw3IEBACiAjaWZuZGVmIF9BU01fUE9XRVJQQ19EQ1JfTkFUSVZFX0gKICNkZWZpbmUgX0FTTV9QT1dFUlBDX0RDUl9OQVRJVkVfSAogI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIHR5cGVkZWYgc3RydWN0IHt9IGRjcl9ob3N0X3Q7CiAKQEAgLTMyLDcgKzMxLDQxIEBACiAjZGVmaW5lIGRjcl9yZWFkKGhvc3QsIGRjcl9uKQkJbWZkY3IoZGNyX24pCiAjZGVmaW5lIGRjcl93cml0ZShob3N0LCBkY3JfbiwgdmFsdWUpCW10ZGNyKGRjcl9uLCB2YWx1ZSkKIAorLyogRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXJzICovCit2b2lkIF9fbXRkY3IoaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCk7Cit1bnNpZ25lZCBpbnQgX19tZmRjcihpbnQgcmVnKTsKKyNkZWZpbmUgbWZkY3Iocm4pCQkJCQkJXAorCSh7dW5zaWduZWQgaW50IHJ2YWw7CQkJCQlcCisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHJuKSkJCQkJXAorCQlhc20gdm9sYXRpbGUoIm1mZGNyICUwLCIgX19zdHJpbmdpZnkocm4pCVwKKwkJICAgICAgICAgICAgICA6ICI9ciIgKHJ2YWwpKTsJCQlcCisJZWxzZQkJCQkJCQlcCisJCXJ2YWwgPSBfX21mZGNyKHJuKTsJCQkJXAorCXJ2YWw7fSkKIAorI2RlZmluZSBtdGRjcihybiwgdikJCQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHJuKSkJCQkJXAorCQlhc20gdm9sYXRpbGUoIm10ZGNyICIgX19zdHJpbmdpZnkocm4pICIsJTAiCVwKKwkJCSAgICAgIDogOiAiciIgKHYpKTsgCQkJXAorCWVsc2UJCQkJCQkJXAorCQlfX210ZGNyKHJuLCB2KTsJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIFIvVyBvZiBpbmRpcmVjdCBEQ1JzIG1ha2UgdXNlIG9mIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9ucyBmb3IgRENScyAqLworI2RlZmluZSBtZmRjcmkoYmFzZSwgcmVnKQkJCVwKKyh7CQkJCQkJXAorCW10ZGNyKGJhc2UgIyMgX0NGR0FERFIsIGJhc2UgIyMgXyAjIyByZWcpOwlcCisJbWZkY3IoYmFzZSAjIyBfQ0ZHREFUQSk7CQkJXAorfSkKKworI2RlZmluZSBtdGRjcmkoYmFzZSwgcmVnLCBkYXRhKQkJCVwKK2RvIHsJCQkJCQlcCisJbXRkY3IoYmFzZSAjIyBfQ0ZHQUREUiwgYmFzZSAjIyBfICMjIHJlZyk7CVwKKwltdGRjcihiYXNlICMjIF9DRkdEQVRBLCBkYXRhKTsJCVwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0RDUl9OQVRJVkVfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Rjci5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9kY3IuaAppbmRleCA0NzNmMmM3Li5iNjZjNWU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Rjci5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZGNyLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX0RDUl9ICiAjZGVmaW5lIF9BU01fUE9XRVJQQ19EQ1JfSAogI2lmZGVmIF9fS0VSTkVMX18KKyNpZmRlZiBDT05GSUdfUFBDX0RDUgogCiAjaWZkZWYgQ09ORklHX1BQQ19EQ1JfTkFUSVZFCiAjaW5jbHVkZSA8YXNtL2Rjci1uYXRpdmUuaD4KQEAgLTM4LDUgKzM5LDYgQEAKIAkJCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCk7CiAjZW5kaWYgLyogQ09ORklHX1BQQ19NRVJHRSAqLwogCisjZW5kaWYgLyogQ09ORklHX1BQQ19EQ1IgKi8KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0RDUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2RtYS1tYXBwaW5nLmgKaW5kZXggN2M3ZGU4Ny4uYTE5YTZmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZG1hLW1hcHBpbmcuaApAQCAtMzcsOSArMzcsOSBAQAogICovCiAKICNkZWZpbmUgX19kbWFfYWxsb2NfY29oZXJlbnQoZ2ZwLCBzaXplLCBoYW5kbGUpCU5VTEwKLSNkZWZpbmUgX19kbWFfZnJlZV9jb2hlcmVudChzaXplLCBhZGRyKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBfX2RtYV9zeW5jKGFkZHIsIHNpemUsIHJ3KQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBfX2RtYV9zeW5jX3BhZ2UocGcsIG9mZiwgc3osIHJ3KQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fZG1hX2ZyZWVfY29oZXJlbnQoc2l6ZSwgYWRkcikJCSgodm9pZCkwKQorI2RlZmluZSBfX2RtYV9zeW5jKGFkZHIsIHNpemUsIHJ3KQkJKCh2b2lkKTApCisjZGVmaW5lIF9fZG1hX3N5bmNfcGFnZShwZywgb2ZmLCBzeiwgcncpCSgodm9pZCkwKQogCiAjZW5kaWYgLyogISBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFICovCiAKQEAgLTI1MSw3ICsyNTEsNyBAQAogfQogCiAvKiBXZSBkbyBub3RoaW5nLiAqLwotI2RlZmluZSBkbWFfdW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRtYV91bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXIpCSgodm9pZCkwKQogCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKIGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLApAQCAtMjY2LDcgKzI2Niw3IEBACiB9CiAKIC8qIFdlIGRvIG5vdGhpbmcuICovCi0jZGVmaW5lIGRtYV91bm1hcF9wYWdlKGRldiwgaGFuZGxlLCBzaXplLCBkaXIpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX3VubWFwX3BhZ2UoZGV2LCBoYW5kbGUsIHNpemUsIGRpcikJKCh2b2lkKTApCiAKIHN0YXRpYyBpbmxpbmUgaW50CiBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLApAQCAtMjg2LDcgKzI4Niw3IEBACiB9CiAKIC8qIFdlIGRvbid0IGRvIGFueXRoaW5nIGhlcmUuICovCi0jZGVmaW5lIGRtYV91bm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRtYV91bm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyKQkoKHZvaWQpMCkKIAogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h2Y2FsbC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9odmNhbGwuaAppbmRleCAyNTdkMWNlLi43YTUwMDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h2Y2FsbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHZjYWxsLmgKQEAgLTI1Miw4ICsyNTIsNiBAQAogCXVuc2lnbmVkIGxvbmcJdGJfdG90YWw7CS8qIHRvdGFsIHdhbGwgdGltZSAobWZ0Yikgb2YgY2FsbHMuICovCiAJdW5zaWduZWQgbG9uZwlwdXJyX3RvdGFsOwkvKiB0b3RhbCBjcHUgdGltZSAoUFVSUikgb2YgY2FsbHMuICovCiB9Owotdm9pZCB1cGRhdGVfaGNhbGxfc3RhdHModW5zaWduZWQgbG9uZyBvcGNvZGUsIHVuc2lnbmVkIGxvbmcgdGJfZGVsdGEsCi0JCQl1bnNpZ25lZCBsb25nIHB1cnJfZGVsdGEpOwogI2RlZmluZSBIQ0FMTF9TVEFUX0FSUkFZX1NJWkUJKChNQVhfSENBTExfT1BDT0RFID4+IDIpICsgMSkKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKaW5kZXggZDYwNDg2My4uOWU0ZGQ5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCkBAIC0xMDcsMjUgKzEwNyw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAotI2RlZmluZSBtYXNrX2lycShpcnEpCQkJCQkJXAotCSh7CQkJCQkJCVwKLQkgCWlycV9kZXNjX3QgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsJCVwKLQkJaWYgKGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+ZGlzYWJsZSkJXAotCQkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOwkJXAotCX0pCi0jZGVmaW5lIHVubWFza19pcnEoaXJxKQkJCQkJCVwKLQkoewkJCQkJCQlcCi0JIAlpcnFfZGVzY190ICpkZXNjID0gZ2V0X2lycV9kZXNjKGlycSk7CQlcCi0JCWlmIChkZXNjLT5jaGlwICYmIGRlc2MtPmNoaXAtPmVuYWJsZSkJXAotCQkJZGVzYy0+Y2hpcC0+ZW5hYmxlKGlycSk7CQlcCi0JfSkKLSNkZWZpbmUgYWNrX2lycShpcnEpCQkJCQkJXAotCSh7CQkJCQkJCVwKLQkgCWlycV9kZXNjX3QgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsJCVwKLQkJaWYgKGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+YWNrKQlcCi0JCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsJCVwKLQl9KQotCiAvKgogICogaW50ZXJydXB0LXJldHJpZ2dlcjogc2hvdWxkIHdlIGhhbmRsZSB0aGlzIHZpYSBsb3N0IGludGVycnVwdHMgYW5kIElQSXMKICAqIG9yIHNob3VsZCB3ZSBub3QgY2FyZSBsaWtlIHdlIGRvIG5vdyA/IC0tQmVuSC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbGliYXRhLXBvcnRtYXAuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbGliYXRhLXBvcnRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDg1MTgwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9saWJhdGEtcG9ydG1hcC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19BU01fUE9XRVJQQ19MSUJBVEFfUE9SVE1BUF9ICisjZGVmaW5lIF9fQVNNX1BPV0VSUENfTElCQVRBX1BPUlRNQVBfSAorCisjZGVmaW5lIEFUQV9QUklNQVJZX0NNRAkweDFGMAorI2RlZmluZSBBVEFfUFJJTUFSWV9DVEwJMHgzRjYKKyNkZWZpbmUgQVRBX1BSSU1BUllfSVJRKGRldikJcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIDApCisKKyNkZWZpbmUgQVRBX1NFQ09OREFSWV9DTUQJMHgxNzAKKyNkZWZpbmUgQVRBX1NFQ09OREFSWV9DVEwJMHgzNzYKKyNkZWZpbmUgQVRBX1NFQ09OREFSWV9JUlEoZGV2KQlwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGRldiwgMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21vZHVsZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tb2R1bGUuaAppbmRleCA1ODRmYWJmLi5lNWYxNGIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21vZHVsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW9kdWxlLmgKQEAgLTQ2LDggKzQ2LDYgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX2J1Z3M7CiB9OwogCi1leHRlcm4gc3RydWN0IGJ1Z19lbnRyeSAqbW9kdWxlX2ZpbmRfYnVnKHVuc2lnbmVkIGxvbmcgYnVnYWRkcik7Ci0KIC8qCiAgKiBTZWxlY3QgRUxGIGhlYWRlcnMuCiAgKiBNYWtlIGVtcHR5IHNlY3Rpb24gZm9yIG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMgdG8gZXhwYW5kLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tcGM1Mnh4LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21wYzUyeHguaAppbmRleCA0YTI4YTg1Li40NTYwZDcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21wYzUyeHguaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21wYzUyeHguaApAQCAtMjQ0LDYgKzI0NCw3IEBACiBleHRlcm4gdm9pZCBfX2lvbWVtICogbXBjNTJ4eF9maW5kX2FuZF9tYXAoY29uc3QgY2hhciAqKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgbXBjNTJ4eF9maW5kX2lwYl9mcmVxKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CiBleHRlcm4gdm9pZCBtcGM1Mnh4X3NldHVwX2NwdSh2b2lkKTsKK2V4dGVybiB2b2lkIG1wYzUyeHhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpOwogCiBleHRlcm4gdm9pZCBtcGM1Mnh4X2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBtcGM1Mnh4X2dldF9pcnEodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhZ2VfMzIuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZV8zMi5oCmluZGV4IDI2NzdiYWQuLjA3ZjZkM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZV8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZV8zMi5oCkBAIC0yNiwxNSArMjYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2Uodm9pZCAqcGFnZSkgeyBjbGVhcl9wYWdlcyhwYWdlLCAwKTsgfQogZXh0ZXJuIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKTsKIAotLyogUHVyZSAyXm4gdmVyc2lvbiBvZiBnZXRfb3JkZXIgKi8KLWV4dGVybiBfX2lubGluZV9fIGludCBnZXRfb3JkZXIodW5zaWduZWQgbG9uZyBzaXplKQotewotCWludCBsejsKLQotCXNpemUgPSAoc2l6ZS0xKSA+PiBQQUdFX1NISUZUOwotCWFzbSAoImNudGx6dyAlMCwlMSIgOiAiPXIiIChseikgOiAiciIgKHNpemUpKTsKLQlyZXR1cm4gMzIgLSBsejsKLX0KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYWdlLmg+CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wY2ktYnJpZGdlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BjaS1icmlkZ2UuaAppbmRleCA3YmI3ZjkwLi5jYjAyYzlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BjaS1icmlkZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BjaS1icmlkZ2UuaApAQCAtMzEsMTIgKzMxLDEyIEBACiAJaW50IGxhc3RfYnVzbm87CiAKIAl2b2lkIF9faW9tZW0gKmlvX2Jhc2VfdmlydDsKLQl1bnNpZ25lZCBsb25nIGlvX2Jhc2VfcGh5czsKKwlyZXNvdXJjZV9zaXplX3QgaW9fYmFzZV9waHlzOwogCiAJLyogU29tZSBtYWNoaW5lcyBoYXZlIGEgbm9uIDE6MSBtYXBwaW5nIG9mCiAJICogdGhlIFBDSSBtZW1vcnkgc3BhY2UgaW4gdGhlIENQVSBidXMgc3BhY2UKIAkgKi8KLQl1bnNpZ25lZCBsb25nIHBjaV9tZW1fb2Zmc2V0OworCXJlc291cmNlX3NpemVfdCBwY2lfbWVtX29mZnNldDsKIAl1bnNpZ25lZCBsb25nIHBjaV9pb19zaXplOwogCiAJc3RydWN0IHBjaV9vcHMgKm9wczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGNpLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BjaS5oCmluZGV4IDE2ZjEzMzEuLmFjNjU2ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wY2kuaApAQCAtMTQzLDggKzE0MywxMyBAQAogLyogVGVsbCBkcml2ZXJzL3BjaS9wcm9jLmMgdGhhdCB3ZSBoYXZlIHBjaV9tbWFwX3BhZ2VfcmFuZ2UoKSAqLwogI2RlZmluZSBIQVZFX1BDSV9NTUFQCTEKIAotI2lmZGVmIENPTkZJR19QUEM2NAotLyogcGNpX3VubWFwX3tzaW5nbGUscGFnZX0gaXMgbm90IGEgbm9wLCB0aHVzLi4uICovCisjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpIHx8IGRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkKKy8qCisgKiBGb3IgNjQtYml0IGtlcm5lbHMsIHBjaV91bm1hcF97c2luZ2xlLHBhZ2V9IGlzIG5vdCBhIG5vcC4KKyAqIEZvciAzMi1iaXQgbm9uLWNvaGVyZW50IGtlcm5lbHMsIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSgpIGFuZAorICogc28gb24gYXJlIG5vdCBub3BzLgorICogYW5kIHRodXMuLi4KKyAqLwogI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJXAogCWRtYV9hZGRyX3QgQUREUl9OQU1FOwogI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCQlcCkBAIC0xNTgsNiArMTYzLDIwIEBACiAjZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJCVwKIAkoKChQVFIpLT5MRU5fTkFNRSkgPSAoVkFMKSkKIAorI2Vsc2UgLyogMzItYml0ICYmIGNvaGVyZW50ICovCisKKy8qIHBjaV91bm1hcF97cGFnZSxzaW5nbGV9IGlzIGEgbm9wIHNvLi4uICovCisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQorI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJKDApCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCSgwKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFICovCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwogLyogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgbm90IGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcwogICogc3BhY2UgKHdlIGhhdmUgYW4gSU9NTVUpLiAgVGhlIElERSBhbmQgU0NTSSBkZXZpY2UgbGF5ZXJzIHVzZQogICogdGhpcyBib29sZWFuIGZvciBib3VuY2UgYnVmZmVyIGRlY2lzaW9ucy4KQEAgLTE3MiwxNiArMTkxLDggQEAKICAqLwogI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTICAgICAoMSkKIAotLyogcGNpX3VubWFwX3twYWdlLHNpbmdsZX0gaXMgYSBub3Agc28uLi4gKi8KLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJKDApCi0jZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJZG8geyB9IHdoaWxlICgwKQotCiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCi0JCisKIGV4dGVybiB2b2lkIHBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKIAkJCXN0cnVjdCByZXNvdXJjZSAqcmVzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcG9zaXhfdHlwZXMuaAppbmRleCBjNjM5MTA3Li4yZjIyODhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Bvc2l4X3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wb3NpeF90eXBlcy5oCkBAIC02MCw3ICs2MCw3IEBACiAjZGVmaW5lCV9fRkRfQ0xSKGQsIHNldCkJKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSAmPSB+X19GRE1BU0soZCkpCiAjZGVmaW5lCV9fRkRfSVNTRVQoZCwgc2V0KQkoKChzZXQpLT5mZHNfYml0c1tfX0ZERUxUKGQpXSAmIF9fRkRNQVNLKGQpKSAhPSAwKQogI2RlZmluZQlfX0ZEX1pFUk8oc2V0KQlcCi0gICgodm9pZCkgbWVtc2V0ICgoX19wdHJfdCkgKHNldCksIDAsIHNpemVvZiAoX19rZXJuZWxfZmRfc2V0KSkpCisgICgodm9pZCkgbWVtc2V0ICgodm9pZCAqKSAoc2V0KSwgMCwgc2l6ZW9mIChfX2tlcm5lbF9mZF9zZXQpKSkKIAogI2Vsc2UgLyogX19HTlVDX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmgKaW5kZXggNmZhYWU3Yi4uYTM2MzFiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oCkBAIC0xNDMsNiArMTQzLDcgQEAKIAogLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVycyAoU1BSTnMpKi8KICNkZWZpbmUgU1BSTl9DVFIJMHgwMDkJLyogQ291bnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9EU0NSCTB4MTEKICNkZWZpbmUgU1BSTl9DVFJMRgkweDA4OAogI2RlZmluZSBTUFJOX0NUUkxUCTB4MDk4CiAjZGVmaW5lICAgQ1RSTF9DVAkweGMwMDAwMDAwCS8qIGN1cnJlbnQgdGhyZWFkICovCkBAIC0xNjMsNiArMTY0LDcgQEAKICNkZWZpbmUgU1BSTl9UQlJVCTB4MTBECS8qIFRpbWUgQmFzZSBSZWFkIFVwcGVyIFJlZ2lzdGVyICh1c2VyLCBSL08pICovCiAjZGVmaW5lIFNQUk5fVEJXTAkweDExQwkvKiBUaW1lIEJhc2UgTG93ZXIgUmVnaXN0ZXIgKHN1cGVyLCBSL1cpICovCiAjZGVmaW5lIFNQUk5fVEJXVQkweDExRAkvKiBUaW1lIEJhc2UgVXBwZXIgUmVnaXN0ZXIgKHN1cGVyLCBSL1cpICovCisjZGVmaW5lIFNQUk5fU1BVUlIJMHgxMzQJLyogU2NhbGVkIFBVUlIgKi8KICNkZWZpbmUgU1BSTl9ISU9SCTB4MTM3CS8qIDk3MCBIeXBlcnZpc29yIGludGVycnVwdCBvZmZzZXQgKi8KICNkZWZpbmUgU1BSTl9EQkFUMEwJMHgyMTkJLyogRGF0YSBCQVQgMCBMb3dlciBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX0RCQVQwVQkweDIxOAkvKiBEYXRhIEJBVCAwIFVwcGVyIFJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3J0YXMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcnRhcy5oCmluZGV4IDVhMGMxMzYuLjhlYWE3YjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcnRhcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcnRhcy5oCkBAIC0xNTksNiArMTU5LDcgQEAKIAogZXh0ZXJuIHZvaWQgZW50ZXJfcnRhcyh1bnNpZ25lZCBsb25nKTsKIGV4dGVybiBpbnQgcnRhc190b2tlbihjb25zdCBjaGFyICpzZXJ2aWNlKTsKK2V4dGVybiBpbnQgcnRhc19zZXJ2aWNlX3ByZXNlbnQoY29uc3QgY2hhciAqc2VydmljZSk7CiBleHRlcm4gaW50IHJ0YXNfY2FsbChpbnQgdG9rZW4sIGludCwgaW50LCBpbnQgKiwgLi4uKTsKIGV4dGVybiB2b2lkIHJ0YXNfcmVzdGFydChjaGFyICpjbWQpOwogZXh0ZXJuIHZvaWQgcnRhc19wb3dlcl9vZmYodm9pZCk7CkBAIC0yMjEsOCArMjIyLDYgQEAKIGV4dGVybiBzcGlubG9ja190IHJ0YXNfZGF0YV9idWZfbG9jazsKIGV4dGVybiBjaGFyIHJ0YXNfZGF0YV9idWZbUlRBU19EQVRBX0JVRl9TSVpFXTsKIAotZXh0ZXJuIHZvaWQgcnRhc19zdG9wX3NlbGYodm9pZCk7Ci0KIC8qIFJNTyBidWZmZXIgcmVzZXJ2ZWQgZm9yIHVzZXItc3BhY2UgUlRBUyB1c2UgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHJ0YXNfcm1vX2J1ZjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmgKaW5kZXggZmRhZDQyNi4uM2Q5MDI2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oCkBAIC0xNjEsNiArMTYxLDcgQEAKIGV4dGVybiBsb25nIHNwdV9zeXNfY2FsbGJhY2soc3RydWN0IHNwdV9zeXNjYWxsX2Jsb2NrICpzKTsKIAogLyogc3lzY2FsbHMgaW1wbGVtZW50ZWQgaW4gc3B1ZnMgKi8KK3N0cnVjdCBmaWxlOwogZXh0ZXJuIHN0cnVjdCBzcHVmc19jYWxscyB7CiAJYXNtbGlua2FnZSBsb25nICgqY3JlYXRlX3RocmVhZCkoY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsCiAJCQkJCXVuc2lnbmVkIGludCBmbGFncywgbW9kZV90IG1vZGUpOwpAQCAtMjMyLDYgKzIzMyw3IEBACiAgKiB0byBvYmplY3QtaWQgc3B1ZnMgZmlsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIHRoZSBub3RpZmVyCiAgKiBmdW5jdGlvbiBjYW4gYXNzdW1lIHRoYXQgc3B1LT5jdHggaXMgdmFsaWQuCiAgKi8KK3N0cnVjdCBub3RpZmllcl9ibG9jazsKIGludCBzcHVfc3dpdGNoX2V2ZW50X3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG4pOwogaW50IHNwdV9zd2l0Y2hfZXZlbnRfdW5yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90ZXJtYml0cy5oCmluZGV4IDZkNTMzYjAuLjVlNzkxOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Rlcm1iaXRzLmgKQEAgLTMwLDYgKzMwLDE5IEBACiAJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLwogfTsKIAorLyogRm9yIFBvd2VyUEMgdGhlIHRlcm1pb3MgYW5kIGt0ZXJtaW9zIGFyZSB0aGUgc2FtZSAqLworCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICg9PSBjX2NjWzE5XSkgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCiAvKiBjX2NjIGNoYXJhY3RlcnMgKi8KICNkZWZpbmUgVklOVFIgCSAgICAgICAgIDAKICNkZWZpbmUgVlFVSVQgCSAgICAgICAgIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaAppbmRleCBkMzM5ZTJlLi4zZjMyY2E4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90aHJlYWRfaW5mby5oCkBAIC0xMjIsNiArMTIyLDcgQEAKICNkZWZpbmUgVElGX1JFU1RPUkVBTEwJCTEyCS8qIFJlc3RvcmUgYWxsIHJlZ3MgKGltcGxpZXMgTk9FUlJPUikgKi8KICNkZWZpbmUgVElGX05PRVJST1IJCTE0CS8qIEZvcmNlIHN1Y2Nlc3NmdWwgc3lzY2FsbCByZXR1cm4gKi8KICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwkxNQkvKiBSZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCAqLworI2RlZmluZSBUSUZfRlJFRVpFCQkxNgkvKiBGcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAvKiBhcyBhYm92ZSwgYnV0IGFzIGJpdCB2YWx1ZXMgKi8KICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKQEAgLTEzOCw2ICsxMzksNyBAQAogI2RlZmluZSBfVElGX1JFU1RPUkVBTEwJCSgxPDxUSUZfUkVTVE9SRUFMTCkKICNkZWZpbmUgX1RJRl9OT0VSUk9SCQkoMTw8VElGX05PRVJST1IpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UX09SX0EJKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TRUNDT01QKQogCiAjZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sJKF9USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfU0lHUEVORElORyB8IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaAppbmRleCA1MGMwMTQwLi42NjEwNDk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCkBAIC02Niw2ICs2Niw3IEBACiAJCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAogCQkJCXwgU0RfQkFMQU5DRV9ORVdJRExFCVwKIAkJCQl8IFNEX1dBS0VfSURMRQkJXAorCQkJCXwgU0RfU0VSSUFMSVpFCQlcCiAJCQkJfCBTRF9XQUtFX0JBTEFOQ0UsCVwKIAkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCiAJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wY2ktYnJpZGdlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGNpLWJyaWRnZS5oCmluZGV4IDZjOTU1ZDAuLjRkMzViODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wY2ktYnJpZGdlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BjaS1icmlkZ2UuaApAQCAtMjAsOCArMjAsOCBAQAogZXh0ZXJuIHN0cnVjdCBwY2lfY29udHJvbGxlciogcGNpYmlvc19hbGxvY19jb250cm9sbGVyKHZvaWQpOwogCiAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHNldHRpbmcgdXAgcmVzb3VyY2VzICovCi1leHRlcm4gdm9pZCBwY2lfaW5pdF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmxhZ3MsIGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgcGNpX2luaXRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzdGFydCwKKwkJCSAgICAgIHJlc291cmNlX3NpemVfdCBlbmQsIGludCBmbGFncywgY2hhciAqbmFtZSk7CiAKIC8qIEdldCB0aGUgUENJIGhvc3QgY29udHJvbGxlciBmb3IgYSBidXMgKi8KIGV4dGVybiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIqIHBjaV9idXNfdG9faG9zZShpbnQgYnVzKTsKQEAgLTUwLDEyICs1MCwxMiBAQAogCWludCBidXNfb2Zmc2V0OwogCiAJdm9pZCBfX2lvbWVtICppb19iYXNlX3ZpcnQ7Ci0JdW5zaWduZWQgbG9uZyBpb19iYXNlX3BoeXM7CisJcmVzb3VyY2Vfc2l6ZV90IGlvX2Jhc2VfcGh5czsKIAogCS8qIFNvbWUgbWFjaGluZXMgKFBSZVApIGhhdmUgYSBub24gMToxIG1hcHBpbmcgb2YKIAkgKiB0aGUgUENJIG1lbW9yeSBzcGFjZSBpbiB0aGUgQ1BVIGJ1cyBzcGFjZQogCSAqLwotCXVuc2lnbmVkIGxvbmcgcGNpX21lbV9vZmZzZXQ7CisJcmVzb3VyY2Vfc2l6ZV90IHBjaV9tZW1fb2Zmc2V0OwogCiAJc3RydWN0IHBjaV9vcHMgKm9wczsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19pb21lbSAqY2ZnX2FkZHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGNpLmggYi9pbmNsdWRlL2FzbS1wcGMvcGNpLmgKaW5kZXggMTFmZmFhYS4uOWQxNjIwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wY2kuaApAQCAtNjEsNiArNjEsMjcgQEAKICAqLwogI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTICAgICAoMSkKIAorI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKKy8qCisgKiBwY2lfdW5tYXBfe3BhZ2Usc2luZ2xlfSBhcmUgTk9QcyBidXQgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCkKKyAqIGFuZCBzbyBvbiBhcmUgbm90LCBzby4uLgorICovCisKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKKwlkbWFfYWRkcl90IEFERFJfTkFNRTsKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAorCV9fdTMyIExFTl9OQU1FOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCisJKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAorCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKKwkoKFBUUiktPkxFTl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCisJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKKyNlbHNlIC8qIGNvaGVyZW50ICovCisKIC8qIHBjaV91bm1hcF97cGFnZSxzaW5nbGV9IGlzIGEgbm9wIHNvLi4uICovCiAjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQogI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCkBAIC02OSw2ICs5MCw4IEBACiAjZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCSgwKQogI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKIAorI2VuZGlmIC8qIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUgKi8KKwogI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX2J1cnN0X2FkdmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJZW51bSBwY2lfZG1hX2J1cnN0X3N0cmF0ZWd5ICpzdHJhdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaCBiL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaAppbmRleCA2MDJmYmFkLi5hMjYzZmMxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3JlZ19ib29rZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaApAQCAtOSw0MSArOSw5IEBACiAjaWZuZGVmIF9fQVNNX1BQQ19SRUdfQk9PS0VfSF9fCiAjZGVmaW5lIF9fQVNNX1BQQ19SRUdfQk9PS0VfSF9fCiAKKyNpbmNsdWRlIDxhc20vZGNyLmg+CisKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBEZXZpY2UgQ29udHJvbCBSZWdpc3RlcnMgKi8KLXZvaWQgX19tdGRjcihpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKTsKLXVuc2lnbmVkIGludCBfX21mZGNyKGludCByZWcpOwotI2RlZmluZSBtZmRjcihybikJCQkJCQlcCi0JKHt1bnNpZ25lZCBpbnQgcnZhbDsJCQkJCVwKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aocm4pKQkJCQlcCi0JCWFzbSB2b2xhdGlsZSgibWZkY3IgJTAsIiBfX3N0cmluZ2lmeShybikJXAotCQkgICAgICAgICAgICAgIDogIj1yIiAocnZhbCkpOwkJCVwKLQllbHNlCQkJCQkJCVwKLQkJcnZhbCA9IF9fbWZkY3Iocm4pOwkJCQlcCi0JcnZhbDt9KQotCi0jZGVmaW5lIG10ZGNyKHJuLCB2KQkJCQkJCVwKLWRvIHsJCQkJCQkJCVwKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aocm4pKQkJCQlcCi0JCWFzbSB2b2xhdGlsZSgibXRkY3IgIiBfX3N0cmluZ2lmeShybikgIiwlMCIJXAotCQkJICAgICAgOiA6ICJyIiAodikpOyAJCQlcCi0JZWxzZQkJCQkJCQlcCi0JCV9fbXRkY3Iocm4sIHYpOwkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyogUi9XIG9mIGluZGlyZWN0IERDUnMgbWFrZSB1c2Ugb2Ygc3RhbmRhcmQgbmFtaW5nIGNvbnZlbnRpb25zIGZvciBEQ1JzICovCi0jZGVmaW5lIG1mZGNyaShiYXNlLCByZWcpCQkJXAotKHsJCQkJCQlcCi0JbXRkY3IoYmFzZSAjIyBfQ0ZHQUREUiwgYmFzZSAjIyBfICMjIHJlZyk7CVwKLQltZmRjcihiYXNlICMjIF9DRkdEQVRBKTsJCQlcCi19KQotCi0jZGVmaW5lIG10ZGNyaShiYXNlLCByZWcsIGRhdGEpCQkJXAotZG8gewkJCQkJCVwKLQltdGRjcihiYXNlICMjIF9DRkdBRERSLCBiYXNlICMjIF8gIyMgcmVnKTsJXAotCW10ZGNyKGJhc2UgIyMgX0NGR0RBVEEsIGRhdGEpOwkJXAotfSB3aGlsZSAoMCkKLQogLyogUGVyZm9ybWFuY2UgTW9uaXRvciBSZWdpc3RlcnMgKi8KICNkZWZpbmUgbWZwbXIocm4pCSh7dW5zaWduZWQgaW50IHJ2YWw7IFwKIAkJCWFzbSB2b2xhdGlsZSgibWZwbXIgJTAsIiBfX3N0cmluZ2lmeShybikgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1zMzkwL2NhY2hlZmx1c2guaAppbmRleCBlMzk5YThiLi5mN2NhZGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2NhY2hlZmx1c2guaApAQCAtNyw2ICs3LDcgQEAKIC8qIENhY2hlcyBhcmVuJ3QgYnJhaW4tZGVhZCBvbiB0aGUgczM5MC4gKi8KICNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZGFzZC5oIGIvaW5jbHVkZS9hc20tczM5MC9kYXNkLmgKaW5kZXggYzA0MmY5NS4uNjA0ZjY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9kYXNkLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9kYXNkLmgKQEAgLTY5LDExICs2OSwxMyBAQAogICogMHgwMTogcmVhZG9ubHkgKHJvKQogICogMHgwMjogdXNlIGRpYWcgZGlzY2lwbGluZSAoZGlhZykKICAqIDB4MDQ6IHNldCB0aGUgZGV2aWNlIGluaXRpYWxseSBvbmxpbmUgKGludGVybmFsIHVzZSBvbmx5KQorICogMHgwODogZW5hYmxlIEVSUCByZWxhdGVkIGxvZ2dpbmcKICAqLwogI2RlZmluZSBEQVNEX0ZFQVRVUkVfREVGQVVMVAkgICAgIDB4MDAKICNkZWZpbmUgREFTRF9GRUFUVVJFX1JFQURPTkxZCSAgICAgMHgwMQogI2RlZmluZSBEQVNEX0ZFQVRVUkVfVVNFRElBRwkgICAgIDB4MDIKICNkZWZpbmUgREFTRF9GRUFUVVJFX0lOSVRJQUxfT05MSU5FICAweDA0CisjZGVmaW5lIERBU0RfRkVBVFVSRV9FUlBMT0cJICAgICAweDA4CiAKICNkZWZpbmUgREFTRF9QQVJUTl9CSVRTIDIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oIGIvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oCmluZGV4IDVlMjYxZTEuLjVjNWQwMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2Z1dGV4LmgKQEAgLTQsOCArNCw4IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfYXRvbWljX29wX2ludXNlciAoaW50IGVuY29kZWRfb3AsIGludCBfX3VzZXIgKnVhZGRyKQogewpAQCAtMjEsNyArMjEsOSBAQAogCWlmICghIGFjY2Vzc19vayAoVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CiAJcmV0ID0gdWFjY2Vzcy5mdXRleF9hdG9taWNfb3Aob3AsIHVhZGRyLCBvcGFyZywgJm9sZHZhbCk7CisJcGFnZWZhdWx0X2VuYWJsZSgpOwogCiAJaWYgKCFyZXQpIHsKIAkJc3dpdGNoIChjbXApIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcGFnZS5oIGIvaW5jbHVkZS9hc20tczM5MC9wYWdlLmgKaW5kZXggMzYzZWE3Ni4uMDVlYTZmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wYWdlLmgKQEAgLTEyNyw2ICsxMjcsMjYgQEAKIAlyZXR1cm4gc2tleTsKIH0KIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjsKKworc3RhdGljIGlubGluZSBpbnQgcGZuX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisJaW50IGNjb2RlOworCisJaWYgKHBmbiA+PSBtYXhfcGZuKQorCQlyZXR1cm4gMDsKKworCWFzbSB2b2xhdGlsZSgKKwkJIglscmEJJTAsMCglMilcbiIKKwkJIglpcG0JJTFcbiIKKwkJIglzcmwJJTEsMjhcbiIKKwkJOiAiPWQiIChkdW1teSksICI9ZCIgKGNjb2RlKQorCQk6ICJhIiAocGZuIDw8IFBBR0VfU0hJRlQpCisJCTogImNjIik7CisJcmV0dXJuICFjY29kZTsKK30KKwogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogLyogdG8gYWxpZ24gdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5ICovCkBAIC0xMzgsOCArMTU4LDYgQEAKICNkZWZpbmUgX192YSh4KSAgICAgICAgICAgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoeCkKICNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCi0KLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA8IG1heF9tYXBucikKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKIAogI2RlZmluZSBWTV9EQVRBX0RFRkFVTFRfRkxBR1MJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oCmluZGV4IDI4NjE5ZGUuLjA3MDdhN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oCkBAIC0yNSw4ICsyNSwxMSBAQAogICogUGFnZSBhbGxvY2F0aW9uIG9yZGVycy4KICAqLwogI2lmbmRlZiBfX3MzOTB4X18KKyMgZGVmaW5lIFBURV9BTExPQ19PUkRFUgkwCisjIGRlZmluZSBQTURfQUxMT0NfT1JERVIJMAogIyBkZWZpbmUgUEdEX0FMTE9DX09SREVSCTEKICNlbHNlIC8qIF9fczM5MHhfXyAqLworIyBkZWZpbmUgUFRFX0FMTE9DX09SREVSCTAKICMgZGVmaW5lIFBNRF9BTExPQ19PUkRFUgkyCiAjIGRlZmluZSBQR0RfQUxMT0NfT1JERVIJMgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaAppbmRleCAyZDk2OGE2Li5hZTYxYWNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaApAQCAtMTA3LDIzICsxMDcsMjUgQEAKICAqIFRoZSB2bWFsbG9jKCkgcm91dGluZXMgbGVhdmVzIGEgaG9sZSBvZiA0a0IgYmV0d2VlbiBlYWNoIHZtYWxsb2NlZAogICogYXJlYSBmb3IgdGhlIHNhbWUgcmVhc29uLiA7KQogICovCitleHRlcm4gdW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZDsKICNkZWZpbmUgVk1BTExPQ19PRkZTRVQgICg4KjEwMjQqMTAyNCkKICNkZWZpbmUgVk1BTExPQ19TVEFSVCAgICgoKHVuc2lnbmVkIGxvbmcpIGhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpIFwKIAkJCSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCisjZGVmaW5lIFZNQUxMT0NfRU5ECXZtYWxsb2NfZW5kCiAKIC8qCiAgKiBXZSBuZWVkIHNvbWUgZnJlZSB2aXJ0dWFsIHNwYWNlIHRvIGJlIGFibGUgdG8gZG8gdm1hbGxvYy4KICAqIFZNQUxMT0NfTUlOX1NJWkUgZGVmaW5lcyB0aGUgbWluaW11bSBzaXplIG9mIHRoZSB2bWFsbG9jCiAgKiBhcmVhLiBPbiBhIG1hY2hpbmUgd2l0aCAyR0IgbWVtb3J5IHdlIG1ha2Ugc3VyZSB0aGF0IHdlCiAgKiBoYXZlIGF0IGxlYXN0IDEyOE1CIGZyZWUgc3BhY2UgZm9yIHZtYWxsb2MuIE9uIGEgbWFjaGluZQotICogd2l0aCA0VEIgd2UgbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgMUdCLgorICogd2l0aCA0VEIgd2UgbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgMTI4R0IuCiAgKi8KICNpZm5kZWYgX19zMzkweF9fCiAjZGVmaW5lIFZNQUxMT0NfTUlOX1NJWkUJMHg4MDAwMDAwVUwKLSNkZWZpbmUgVk1BTExPQ19FTkQJCTB4ODAwMDAwMDBVTAorI2RlZmluZSBWTUFMTE9DX0VORF9JTklUCTB4ODAwMDAwMDBVTAogI2Vsc2UgLyogX19zMzkweF9fICovCi0jZGVmaW5lIFZNQUxMT0NfTUlOX1NJWkUJMHg0MDAwMDAwMFVMCi0jZGVmaW5lIFZNQUxMT0NfRU5ECQkweDQwMDAwMDAwMDAwVUwKKyNkZWZpbmUgVk1BTExPQ19NSU5fU0laRQkweDIwMDAwMDAwMDBVTAorI2RlZmluZSBWTUFMTE9DX0VORF9JTklUCTB4NDAwMDAwMDAwMDBVTAogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAvKgpAQCAtODE1LDExICs4MTcsMTcgQEAKIAogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikgICAoMSkKIAorZXh0ZXJuIGludCBhZGRfc2hhcmVkX21lbW9yeSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIGludCByZW1vdmVfc2hhcmVkX21lbW9yeSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworCiAvKgogICogTm8gcGFnZSB0YWJsZSBjYWNoZXMgdG8gaW5pdGlhbGlzZQogICovCiAjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKIAorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NQVBfSU5JVAorZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXQodW5zaWduZWQgbG9uZywgaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKwogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0VTVEFCTElTSAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9BQ0NFU1NfRkxBR1MKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VORwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wb3NpeF90eXBlcy5oIGIvaW5jbHVkZS9hc20tczM5MC9wb3NpeF90eXBlcy5oCmluZGV4IGI5NGM5ODguLjM5N2Q5M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcG9zaXhfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Bvc2l4X3R5cGVzLmgKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiAjdW5kZWYgIF9fRkRfWkVSTwogI2RlZmluZSBfX0ZEX1pFUk8oZmRzZXRwKSBcCi0JKCh2b2lkKSBtZW1zZXQgKChfX3B0cl90KSAoZmRzZXRwKSwgMCwgc2l6ZW9mIChfX2tlcm5lbF9mZF9zZXQpKSkKKwkoKHZvaWQpIG1lbXNldCAoKHZvaWQgKikgKGZkc2V0cCksIDAsIHNpemVvZiAoX19rZXJuZWxfZmRfc2V0KSkpCiAKICNlbmRpZiAgICAgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3FkaW8uaCBiL2luY2x1ZGUvYXNtLXMzOTAvcWRpby5oCmluZGV4IDcxODljNzkuLjEyN2Y3MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcWRpby5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcWRpby5oCkBAIC0zNCw2ICszNCw3IEBACiAjZGVmaW5lIFFESU9fUUVUSF9RRk1UIDAKICNkZWZpbmUgUURJT19aRkNQX1FGTVQgMQogI2RlZmluZSBRRElPX0lRRElPX1FGTVQgMgorI2RlZmluZSBRRElPX0lRRElPX1FGTVRfQVNZTkNIIDMKIAogc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnR7CiAJdW5zaWduZWQgaW50IGZsYWdzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9yZXNldC5oIGIvaW5jbHVkZS9hc20tczM5MC9yZXNldC5oCmluZGV4IDliNDM5Y2YuLjUzMmU2NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcmVzZXQuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Jlc2V0LmgKQEAgLTE5LDUgKzE5LDYgQEAKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfcmVzZXRfY2FsbChzdHJ1Y3QgcmVzZXRfY2FsbCAqcmVzZXQpOwogZXh0ZXJuIHZvaWQgczM5MF9yZXNldF9zeXN0ZW0odm9pZCk7CiBleHRlcm4gdm9pZCAoKnMzOTBfcmVzZXRfbWNja19oYW5kbGVyKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqczM5MF9yZXNldF9wZ21faGFuZGxlcikodm9pZCk7CiAKICNlbmRpZiAvKiBfQVNNX1MzOTBfUkVTRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tczM5MC90ZXJtYml0cy5oCmluZGV4IGViM2Y4YmYuLjU4NWM3OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Rlcm1iaXRzLmgKQEAgLTI1LDYgKzI1LDE3IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKwogLyogY19jYyBjaGFyYWN0ZXJzICovCiAjZGVmaW5lIFZJTlRSIDAKICNkZWZpbmUgVlFVSVQgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYXRvbWljLWlycS5oIGIvaW5jbHVkZS9hc20tc2gvYXRvbWljLWlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Zjc5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9hdG9taWMtaXJxLmgKQEAgLTAsMCArMSw3MSBAQAorI2lmbmRlZiBfX0FTTV9TSF9BVE9NSUNfSVJRX0gKKyNkZWZpbmUgX19BU01fU0hfQVRPTUlDX0lSUV9ICisKKy8qCisgKiBUbyBnZXQgcHJvcGVyIGJyYW5jaCBwcmVkaWN0aW9uIGZvciB0aGUgbWFpbiBsaW5lLCB3ZSBtdXN0IGJyYW5jaAorICogZm9yd2FyZCB0byBjb2RlIGF0IHRoZSBlbmQgb2YgdGhpcyBvYmplY3QncyAudGV4dCBzZWN0aW9uLCB0aGVuCisgKiBicmFuY2ggYmFjayB0byByZXN0YXJ0IHRoZSBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSoobG9uZyAqKXYgKz0gaTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSoobG9uZyAqKXYgLT0gaTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXAsIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXRlbXAgPSAqKGxvbmcgKil2OworCXRlbXAgKz0gaTsKKwkqKGxvbmcgKil2ID0gdGVtcDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gdGVtcDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcCwgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdGVtcCA9ICoobG9uZyAqKXY7CisJdGVtcCAtPSBpOworCSoobG9uZyAqKXYgPSB0ZW1wOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiB0ZW1wOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2NsZWFyX21hc2sodW5zaWduZWQgaW50IG1hc2ssIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKihsb25nICopdiAmPSB+bWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0X21hc2sodW5zaWduZWQgaW50IG1hc2ssIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKihsb25nICopdiB8PSBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0FUT01JQ19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYXRvbWljLWxsc2MuaCBiL2luY2x1ZGUvYXNtLXNoL2F0b21pYy1sbHNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwMGI3OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2F0b21pYy1sbHNjLmgKQEAgLTAsMCArMSwxMDcgQEAKKyNpZm5kZWYgX19BU01fU0hfQVRPTUlDX0xMU0NfSAorI2RlZmluZSBfX0FTTV9TSF9BVE9NSUNfTExTQ19ICisKKy8qCisgKiBUbyBnZXQgcHJvcGVyIGJyYW5jaCBwcmVkaWN0aW9uIGZvciB0aGUgbWFpbiBsaW5lLCB3ZSBtdXN0IGJyYW5jaAorICogZm9yd2FyZCB0byBjb2RlIGF0IHRoZSBlbmQgb2YgdGhpcyBvYmplY3QncyAudGV4dCBzZWN0aW9uLCB0aGVuCisgKiBicmFuY2ggYmFjayB0byByZXN0YXJ0IHRoZSBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyIxOgltb3ZsaS5sIEAlMiwgJTAJCSEgYXRvbWljX2FkZAlcbiIKKyIJYWRkCSUxLCAlMAkJCQlcbiIKKyIJbW92Y28ubAklMCwgQCUyCQkJCVxuIgorIgliZgkxYgkJCQlcbiIKKwk6ICI9JnoiICh0bXApCisJOiAiciIgKGkpLCAiciIgKCZ2LT5jb3VudGVyKQorCTogInQiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorIjE6CW1vdmxpLmwgQCUyLCAlMAkJISBhdG9taWNfc3ViCVxuIgorIglzdWIJJTEsICUwCQkJCVxuIgorIgltb3Zjby5sCSUwLCBAJTIJCQkJXG4iCisiCWJmCTFiCQkJCVxuIgorCTogIj0meiIgKHRtcCkKKwk6ICJyIiAoaSksICJyIiAoJnYtPmNvdW50ZXIpCisJOiAidCIpOworfQorCisvKgorICogU0gtNEEgbm90ZToKKyAqCisgKiBXZSBiYXNpY2FsbHkgZ2V0IGF0b21pY194eHhfcmV0dXJuKCkgZm9yIGZyZWUgY29tcGFyZWQgd2l0aAorICogYXRvbWljX3h4eCgpLiBtb3ZsaS5sL21vdmNvLmwgcmVxdWlyZSByMCBkdWUgdG8gdGhlIGluc3RydWN0aW9uCisgKiBlbmNvZGluZywgc28gdGhlIHJldHZhbCBpcyBhdXRvbWF0aWNhbGx5IHNldCB3aXRob3V0IGhhdmluZyB0bworICogZG8gYW55IHNwZWNpYWwgd29yay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyIxOgltb3ZsaS5sIEAlMiwgJTAJCSEgYXRvbWljX2FkZF9yZXR1cm4JXG4iCisiCWFkZAklMSwgJTAJCQkJCVxuIgorIgltb3Zjby5sCSUwLCBAJTIJCQkJCVxuIgorIgliZgkxYgkJCQkJXG4iCisiCXN5bmNvCQkJCQkJXG4iCisJOiAiPSZ6IiAodGVtcCkKKwk6ICJyIiAoaSksICJyIiAoJnYtPmNvdW50ZXIpCisJOiAidCIpOworCisJcmV0dXJuIHRlbXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisiMToJbW92bGkubCBAJTIsICUwCQkhIGF0b21pY19zdWJfcmV0dXJuCVxuIgorIglzdWIJJTEsICUwCQkJCQlcbiIKKyIJbW92Y28ubAklMCwgQCUyCQkJCQlcbiIKKyIJYmYJMWIJCQkJCVxuIgorIglzeW5jbwkJCQkJCVxuIgorCTogIj0meiIgKHRlbXApCisJOiAiciIgKGkpLCAiciIgKCZ2LT5jb3VudGVyKQorCTogInQiKTsKKworCXJldHVybiB0ZW1wOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2NsZWFyX21hc2sodW5zaWduZWQgaW50IG1hc2ssIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorIjE6CW1vdmxpLmwgQCUyLCAlMAkJISBhdG9taWNfY2xlYXJfbWFzawlcbiIKKyIJYW5kCSUxLCAlMAkJCQkJXG4iCisiCW1vdmNvLmwJJTAsIEAlMgkJCQkJXG4iCisiCWJmCTFiCQkJCQlcbiIKKwk6ICI9JnoiICh0bXApCisJOiAiciIgKH5tYXNrKSwgInIiICgmdi0+Y291bnRlcikKKwk6ICJ0Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0X21hc2sodW5zaWduZWQgaW50IG1hc2ssIGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorIjE6CW1vdmxpLmwgQCUyLCAlMAkJISBhdG9taWNfc2V0X21hc2sJXG4iCisiCW9yCSUxLCAlMAkJCQkJXG4iCisiCW1vdmNvLmwJJTAsIEAlMgkJCQkJXG4iCisiCWJmCTFiCQkJCQlcbiIKKwk6ICI9JnoiICh0bXApCisJOiAiciIgKG1hc2spLCAiciIgKCZ2LT5jb3VudGVyKQorCTogInQiKTsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0FUT01JQ19MTFNDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc2gvYXRvbWljLmgKaW5kZXggMjgzMDVjMy4uZTEyNTcwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvYXRvbWljLmgKQEAgLTE3LDExOSArMTcsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotLyoKLSAqIFRvIGdldCBwcm9wZXIgYnJhbmNoIHByZWRpY3Rpb24gZm9yIHRoZSBtYWluIGxpbmUsIHdlIG11c3QgYnJhbmNoCi0gKiBmb3J3YXJkIHRvIGNvZGUgYXQgdGhlIGVuZCBvZiB0aGlzIG9iamVjdCdzIC50ZXh0IHNlY3Rpb24sIHRoZW4KLSAqIGJyYW5jaCBiYWNrIHRvIHJlc3RhcnQgdGhlIG9wZXJhdGlvbi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQotewogI2lmZGVmIENPTkZJR19DUFVfU0g0QQotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotIjE6CW1vdmxpLmwgQCUyLCAlMAkJISBhdG9taWNfYWRkCVxuIgotIglhZGQJJTEsICUwCQkJCVxuIgotIgltb3Zjby5sCSUwLCBAJTIJCQkJXG4iCi0iCWJmCTFiCQkJCVxuIgotCTogIj0meiIgKHRtcCkKLQk6ICJyIiAoaSksICJyIiAoJnYtPmNvdW50ZXIpCi0JOiAidCIpOworI2luY2x1ZGUgPGFzbS9hdG9taWMtbGxzYy5oPgogI2Vsc2UKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSoobG9uZyAqKXYgKz0gaTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisjaW5jbHVkZSA8YXNtL2F0b21pYy1pcnEuaD4KICNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0jaWZkZWYgQ09ORklHX0NQVV9TSDRBCi0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0iMToJbW92bGkubCBAJTIsICUwCQkhIGF0b21pY19zdWIJXG4iCi0iCXN1YgklMSwgJTAJCQkJXG4iCi0iCW1vdmNvLmwJJTAsIEAlMgkJCQlcbiIKLSIJYmYJMWIJCQkJXG4iCi0JOiAiPSZ6IiAodG1wKQotCTogInIiIChpKSwgInIiICgmdi0+Y291bnRlcikKLQk6ICJ0Iik7Ci0jZWxzZQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JKihsb25nICopdiAtPSBpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSNlbmRpZgotfQotCi0vKgotICogU0gtNEEgbm90ZToKLSAqCi0gKiBXZSBiYXNpY2FsbHkgZ2V0IGF0b21pY194eHhfcmV0dXJuKCkgZm9yIGZyZWUgY29tcGFyZWQgd2l0aAotICogYXRvbWljX3h4eCgpLiBtb3ZsaS5sL21vdmNvLmwgcmVxdWlyZSByMCBkdWUgdG8gdGhlIGluc3RydWN0aW9uCi0gKiBlbmNvZGluZywgc28gdGhlIHJldHZhbCBpcyBhdXRvbWF0aWNhbGx5IHNldCB3aXRob3V0IGhhdmluZyB0bwotICogZG8gYW55IHNwZWNpYWwgd29yay4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGxvbmcgdGVtcDsKLQotI2lmZGVmIENPTkZJR19DUFVfU0g0QQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLSIxOgltb3ZsaS5sIEAlMiwgJTAJCSEgYXRvbWljX2FkZF9yZXR1cm4JXG4iCi0iCWFkZAklMSwgJTAJCQkJCVxuIgotIgltb3Zjby5sCSUwLCBAJTIJCQkJCVxuIgotIgliZgkxYgkJCQkJXG4iCi0iCXN5bmNvCQkJCQkJXG4iCi0JOiAiPSZ6IiAodGVtcCkKLQk6ICJyIiAoaSksICJyIiAoJnYtPmNvdW50ZXIpCi0JOiAidCIpOwotI2Vsc2UKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXRlbXAgPSAqKGxvbmcgKil2OwotCXRlbXAgKz0gaTsKLQkqKGxvbmcgKil2ID0gdGVtcDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKLQotCXJldHVybiB0ZW1wOwotfQogCiAjZGVmaW5lIGF0b21pY19hZGRfbmVnYXRpdmUoYSwgdikJKGF0b21pY19hZGRfcmV0dXJuKChhKSwgKHYpKSA8IDApCiAKLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBsb25nIHRlbXA7Ci0KLSNpZmRlZiBDT05GSUdfQ1BVX1NINEEKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0iMToJbW92bGkubCBAJTIsICUwCQkhIGF0b21pY19zdWJfcmV0dXJuCVxuIgotIglzdWIJJTEsICUwCQkJCQlcbiIKLSIJbW92Y28ubAklMCwgQCUyCQkJCQlcbiIKLSIJYmYJMWIJCQkJCVxuIgotIglzeW5jbwkJCQkJCVxuIgotCTogIj0meiIgKHRlbXApCi0JOiAiciIgKGkpLCAiciIgKCZ2LT5jb3VudGVyKQotCTogInQiKTsKLSNlbHNlCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl0ZW1wID0gKihsb25nICopdjsKLQl0ZW1wIC09IGk7Ci0JKihsb25nICopdiA9IHRlbXA7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotI2VuZGlmCi0KLQlyZXR1cm4gdGVtcDsKLX0KLQogI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSBhdG9taWNfc3ViX3JldHVybigxLCh2KSkKICNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgYXRvbWljX2FkZF9yZXR1cm4oMSwodikpCiAKQEAgLTE4MCw1MCArNzUsNiBAQAogfQogI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKIAotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGludCBtYXNrLCBhdG9taWNfdCAqdikKLXsKLSNpZmRlZiBDT05GSUdfQ1BVX1NINEEKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLSIxOgltb3ZsaS5sIEAlMiwgJTAJCSEgYXRvbWljX2NsZWFyX21hc2sJXG4iCi0iCWFuZAklMSwgJTAJCQkJCVxuIgotIgltb3Zjby5sCSUwLCBAJTIJCQkJCVxuIgotIgliZgkxYgkJCQkJXG4iCi0JOiAiPSZ6IiAodG1wKQotCTogInIiICh+bWFzayksICJyIiAoJnYtPmNvdW50ZXIpCi0JOiAidCIpOwotI2Vsc2UKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCSoobG9uZyAqKXYgJj0gfm1hc2s7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0X21hc2sodW5zaWduZWQgaW50IG1hc2ssIGF0b21pY190ICp2KQotewotI2lmZGVmIENPTkZJR19DUFVfU0g0QQotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotIjE6CW1vdmxpLmwgQCUyLCAlMAkJISBhdG9taWNfc2V0X21hc2sJXG4iCi0iCW9yCSUxLCAlMAkJCQkJXG4iCi0iCW1vdmNvLmwJJTAsIEAlMgkJCQkJXG4iCi0iCWJmCTFiCQkJCQlcbiIKLQk6ICI9JnoiICh0bXApCi0JOiAiciIgKG1hc2spLCAiciIgKCZ2LT5jb3VudGVyKQotCTogInQiKTsKLSNlbHNlCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqKGxvbmcgKil2IHw9IG1hc2s7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotI2VuZGlmCi19Ci0KIC8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIFNIICovCiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKICNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9idWcuaCBiL2luY2x1ZGUvYXNtLXNoL2J1Zy5oCmluZGV4IDFiNGZjNTIuLjJmODlkZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J1Zy5oCkBAIC0xLDE5ICsxLDU0IEBACiAjaWZuZGVmIF9fQVNNX1NIX0JVR19ICiAjZGVmaW5lIF9fQVNNX1NIX0JVR19ICiAKLQogI2lmZGVmIENPTkZJR19CVUcKLS8qCi0gKiBUZWxsIHRoZSB1c2VyIHRoZXJlIGlzIHNvbWUgcHJvYmxlbS4KLSAqLwotI2RlZmluZSBCVUcoKSBkbyB7IFwKLQlwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCi0JKih2b2xhdGlsZSBpbnQgKikwID0gMDsgXAorCitzdHJ1Y3QgYnVnX2ZyYW1lIHsKKwl1bnNpZ25lZCBzaG9ydAlvcGNvZGU7CisJdW5zaWduZWQgc2hvcnQJbGluZTsKKwljb25zdCBjaGFyCSpmaWxlOworCWNvbnN0IGNoYXIJKmZ1bmM7Cit9OworCitzdHJ1Y3QgcHRfcmVnczsKKworZXh0ZXJuIHZvaWQgaGFuZGxlX0JVRyhzdHJ1Y3QgcHRfcmVncyAqKTsKKworI2RlZmluZSBUUkFQQV9CVUdfT1BDT0RFCTB4YzMzZQkvKiB0cmFwYSAjMHgzZSAqLworCisjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKKworI2RlZmluZSBCVUcoKQkJCQkJCVwKK2RvIHsJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJXAorCQkiLmFsaWduCTJcblx0IgkJCQlcCisJCSIuc2hvcnQJJU8wXG5cdCIJCQlcCisJCSIuc2hvcnQJJU8xXG5cdCIJCQlcCisJCSIubG9uZwklTzJcblx0IgkJCVwKKwkJIi5sb25nCSVPM1xuXHQiCQkJXAorCQk6CQkJCQlcCisJCTogIm4iIChUUkFQQV9CVUdfT1BDT0RFKSwJCVwKKwkJICAiaSIgKF9fTElORV9fKSwgIlgiIChfX0ZJTEVfXyksCVwKKwkJICAiWCIgKF9fRlVOQ1RJT05fXykpOwkJCVwKIH0gd2hpbGUgKDApCiAKKyNlbHNlCisKKyNkZWZpbmUgQlVHKCkJCQkJCVwKK2RvIHsJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCVwKKwkJIi5hbGlnbgkyXG5cdCIJCQlcCisJCSIuc2hvcnQJJU8wXG5cdCIJCVwKKwkJOgkJCQlcCisJCTogIm4iIChUUkFQQV9CVUdfT1BDT0RFKSk7CVwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSAqLworCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKLSNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX0JVRyAqLwogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9fQVNNX1NIX0JVR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9idWdzLmggYi9pbmNsdWRlL2FzbS1zaC9idWdzLmgKaW5kZXggNzk1MDQ3ZC4uYTI5NDk5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvYnVncy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J1Z3MuaApAQCAtMTYsOSArMTYsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfYnVncyh2b2lkKQogewotCWV4dGVybiBjaGFyICpnZXRfY3B1X3N1YnR5cGUodm9pZCk7CiAJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OwotCWNoYXIgKnA9ICZpbml0X3V0c25hbWUoKS0+bWFjaGluZVsyXTsgLyogInNoIiAqLworCWNoYXIgKnAgPSAmaW5pdF91dHNuYW1lKCktPm1hY2hpbmVbMl07IC8qICJzaCIgKi8KIAogCWNwdV9kYXRhLT5sb29wc19wZXJfamlmZnkgPSBsb29wc19wZXJfamlmZnk7CiAKQEAgLTQwLDYgKzM5LDE1IEBACiAJCSpwKysgPSAnNCc7CiAJCSpwKysgPSAnYSc7CiAJCWJyZWFrOworCWNhc2UgQ1BVX1NINzMxODAgLi4uIENQVV9TSDc3MjI6CisJCSpwKysgPSAnNCc7CisJCSpwKysgPSAnYSc7CisJCSpwKysgPSAnbCc7CisJCSpwKysgPSAnLSc7CisJCSpwKysgPSAnZCc7CisJCSpwKysgPSAncyc7CisJCSpwKysgPSAncCc7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCSpwKysgPSAnPyc7CiAJCSpwKysgPSAnISc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaAppbmRleCBkNDQzNDRjLi40YmM4MzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NoZWNrc3VtLmgKQEAgLTM0LDI1ICszNCwyNiBAQAogICovCiAKIGFzbWxpbmthZ2UgX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCi0JCQkJCSAgaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICpzcmNfZXJyX3B0ciwgaW50ICpkc3RfZXJyX3B0cik7CisJCQkJCSAgICBpbnQgbGVuLCBfX3dzdW0gc3VtLAorCQkJCQkgICAgaW50ICpzcmNfZXJyX3B0ciwgaW50ICpkc3RfZXJyX3B0cik7CiAKIC8qCiAgKglOb3RlOiB3aGVuIHlvdSBnZXQgYSBOVUxMIHBvaW50ZXIgZXhjZXB0aW9uIGhlcmUgdGhpcyBtZWFucyBzb21lb25lCi0gKglwYXNzZWQgaW4gYW4gaW5jb3JyZWN0IGtlcm5lbCBhZGRyZXNzIHRvIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMuIAotICoJCi0gKglJZiB5b3UgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBwbGVhc2UgZG9uJ3QgZm9yZ2V0IHRoZSAKKyAqCXBhc3NlZCBpbiBhbiBpbmNvcnJlY3Qga2VybmVsIGFkZHJlc3MgdG8gb25lIG9mIHRoZXNlIGZ1bmN0aW9ucy4KKyAqCisgKglJZiB5b3UgdXNlIHRoZXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBwbGVhc2UgZG9uJ3QgZm9yZ2V0IHRoZQogICoJYWNjZXNzX29rKCkuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fCitzdGF0aWMgaW5saW5lCiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwKLQkJCQkJaW50IGxlbiwgX193c3VtIHN1bSkKKwkJCQkgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKLQlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyAoIHNyYywgZHN0LCBsZW4sIHN1bSwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLCBkc3QsIGxlbiwgc3VtLCBOVUxMLCBOVUxMKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18KK3N0YXRpYyBpbmxpbmUKIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LAotCQkJCQkJaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICplcnJfcHRyKQorCQkJCSAgIGludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqZXJyX3B0cikKIHsKIAlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYygoX19mb3JjZSBjb25zdCB2b2lkICopc3JjLCBkc3QsCiAJCQkJCWxlbiwgc3VtLCBlcnJfcHRyLCBOVUxMKTsKQEAgLTYyLDcgKzYzLDcgQEAKICAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBpbnQgX19kdW1teTsKIAlfX2FzbV9fKCJzd2FwLncgJTAsICUxXG5cdCIKQEAgLTg1LDcgKzg2LDcgQEAKICAqICAgICAgaTM4NiB2ZXJzaW9uIGJ5IEpvcmdlIEN3aWsgPGpvcmdlQGxhc2VyLnNhdGxpbmsubmV0PiwgYWRhcHRlZAogICogICAgICBmb3IgbGludXggYnkgKiBBcm50IEd1bGJyYW5kc2VuLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKIHsKIAl1bnNpZ25lZCBpbnQgc3VtLCBfX2R1bW15MCwgX19kdW1teTE7CiAKQEAgLTExMywxMCArMTE0LDEwIEBACiAJcmV0dXJuCWNzdW1fZm9sZChzdW0pOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAotCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgICBfX3dzdW0gc3VtKQorc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCQl1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQlfX3dzdW0gc3VtKQogewogI2lmZGVmIF9fTElUVExFX0VORElBTl9fCiAJdW5zaWduZWQgbG9uZyBsZW5fcHJvdG8gPSAocHJvdG8gKyBsZW4pIDw8IDg7CkBAIC0xMzIsNiArMTMzLDcgQEAKIAkJOiAiPXIiIChzdW0pLCAiPXIiIChsZW5fcHJvdG8pCiAJCTogInIiIChkYWRkciksICJyIiAoc2FkZHIpLCAiMSIgKGxlbl9wcm90byksICIwIiAoc3VtKQogCQk6ICJ0Iik7CisKIAlyZXR1cm4gc3VtOwogfQogCkBAIC0xMzksMzAgKzE0MSwyOCBAQAogICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKICAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgICAgIF9fd3N1bSBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKKwkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCV9fd3N1bSBzdW0pCiB7Ci0JcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtKSk7CiB9CiAKIC8qCiAgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CiAgKiBpbiBpY21wLmMKICAqLwotCi1zdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewotICAgIHJldHVybiBjc3VtX2ZvbGQgKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKKyAgICByZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKIH0KIAogI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQotI2lmZGVmIENPTkZJR19JUFY2Ci1zdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkJCSAgX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJICBfX3dzdW0gc3VtKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJICAgICAgX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkgICAgICBfX3dzdW0gc3VtKQogewogCXVuc2lnbmVkIGludCBfX2R1bW15OwogCV9fYXNtX18oImNscnRcblx0IgpAQCAtMTg3LDIyICsxODcsMjEgQEAKIAkJIm1vdnQJJTFcblx0IgogCQkiYWRkCSUxLCAlMFxuIgogCQk6ICI9ciIgKHN1bSksICI9JnIiIChfX2R1bW15KQotCQk6ICJyIiAoc2FkZHIpLCAiciIgKGRhZGRyKSwgCisJCTogInIiIChzYWRkciksICJyIiAoZGFkZHIpLAogCQkgICJyIiAoaHRvbmwobGVuKSksICJyIiAoaHRvbmwocHJvdG8pKSwgIjAiIChzdW0pCiAJCTogInQiKTsKIAogCXJldHVybiBjc3VtX2ZvbGQoc3VtKTsKIH0KLSNlbmRpZgogCi0vKiAKKy8qCiAgKglDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCiAgKi8KICNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgotc3RhdGljIF9faW5saW5lX18gX193c3VtIGNzdW1fYW5kX2NvcHlfdG9fdXNlciAoY29uc3Qgdm9pZCAqc3JjLAotCQkJCQkJICAgICAgdm9pZCBfX3VzZXIgKmRzdCwKLQkJCQkJCSAgICAgIGludCBsZW4sIF9fd3N1bSBzdW0sCi0JCQkJCQkgICAgICBpbnQgKmVycl9wdHIpCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX2FuZF9jb3B5X3RvX3VzZXIoY29uc3Qgdm9pZCAqc3JjLAorCQkJCQkgICB2b2lkIF9fdXNlciAqZHN0LAorCQkJCQkgICBpbnQgbGVuLCBfX3dzdW0gc3VtLAorCQkJCQkgICBpbnQgKmVycl9wdHIpCiB7CiAJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGRzdCwgbGVuKSkKIAkJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoKF9fZm9yY2UgY29uc3Qgdm9pZCAqKXNyYywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDIvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9jYWNoZWZsdXNoLmgKaW5kZXggZjU1NmZhOC4uMjk3OWVmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9jYWNoZWZsdXNoLmgKQEAgLTE1LDYgKzE1LDcgQEAKICAqCiAgKiAgLSBmbHVzaF9jYWNoZV9hbGwoKSBmbHVzaGVzIGVudGlyZSBjYWNoZQogICogIC0gZmx1c2hfY2FjaGVfbW0obW0pIGZsdXNoZXMgdGhlIHNwZWNpZmllZCBtbSBjb250ZXh0J3MgY2FjaGUgbGluZXMKKyAqICAtIGZsdXNoX2NhY2hlX2R1cCBtbShtbSkgaGFuZGxlcyBjYWNoZSBmbHVzaGluZyB3aGVuIGZvcmtpbmcKICAqICAtIGZsdXNoX2NhY2hlX3BhZ2UobW0sIHZtYWRkciwgcGZuKSBmbHVzaGVzIGEgc2luZ2xlIHBhZ2UKICAqICAtIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCiAgKgpAQCAtMjcsNiArMjgsNyBAQAogICovCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGVmbHVzaC5oCmluZGV4IDAzZmRlOTcuLmY3MGQ4ZWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2NhY2hlZmx1c2guaApAQCAtMTUsNiArMTUsNyBAQAogICoKICAqICAtIGZsdXNoX2NhY2hlX2FsbCgpIGZsdXNoZXMgZW50aXJlIGNhY2hlCiAgKiAgLSBmbHVzaF9jYWNoZV9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQncyBjYWNoZSBsaW5lcworICogIC0gZmx1c2hfY2FjaGVfZHVwIG1tKG1tKSBoYW5kbGVzIGNhY2hlIGZsdXNoaW5nIHdoZW4gZm9ya2luZwogICogIC0gZmx1c2hfY2FjaGVfcGFnZShtbSwgdm1hZGRyLCBwZm4pIGZsdXNoZXMgYSBzaW5nbGUgcGFnZQogICogIC0gZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKICAqCkBAIC0zOSw2ICs0MCw3IEBACiAKIHZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpOwogdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkgZmx1c2hfY2FjaGVfbW0obW0pCiB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlbmQpOwogdm9pZCBmbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKTsKQEAgLTQ4LDYgKzUwLDcgQEAKICNlbHNlCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2NhY2hlLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2NhY2hlLmgKaW5kZXggNmU5YzdlNi4uZjkyYjIwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvY2FjaGUuaApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBDQ1JfQ0FDSEVfSUNFCTB4MDEwMAkvKiBJbnN0cnVjdGlvbiBDYWNoZSBFbmFibGUgKi8KICNkZWZpbmUgQ0NSX0NBQ0hFX0lDSQkweDA4MDAJLyogSUMgSW52YWxpZGF0ZSAqLwogI2RlZmluZSBDQ1JfQ0FDSEVfSUlYCTB4ODAwMAkvKiBJQyBJbmRleCBFbmFibGUgKi8KLSNpZm5kZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MAorI2lmbmRlZiBDT05GSUdfQ1BVX1NINEEKICNkZWZpbmUgQ0NSX0NBQ0hFX0VNT0RFCTB4ODAwMDAwMDAJLyogRU1PREUgRW5hYmxlICovCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2NhY2hlZmx1c2guaAppbmRleCA1MTVmZDU3Li5iMDFhMTBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2NhY2hlZmx1c2guaApAQCAtMTgsNiArMTgsNyBAQAogICovCiB2b2lkIGZsdXNoX2NhY2hlX2FsbCh2b2lkKTsKIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pIGZsdXNoX2NhY2hlX21tKG1tKQogdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKIHZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9mcmVxLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2ZyZXEuaAppbmRleCBlZjJiOWIxLi42MDJkMDYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2ZyZXEuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2ZyZXEuaApAQCAtMTAsNyArMTAsNyBAQAogI2lmbmRlZiBfX0FTTV9DUFVfU0g0X0ZSRVFfSAogI2RlZmluZSBfX0FTTV9DUFVfU0g0X0ZSRVFfSAogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCiAjZGVmaW5lIEZSUUNSCQkgICAgICAgIDB4YTQxNTAwMDAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKICNkZWZpbmUJRlJRQ1IJCQkweGZmYzgwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaAppbmRleCAzN2FiMGMxLi44ZDA4NjdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmgKQEAgLTY3LDcgKzY3LDcgQEAKIAlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKIAkJcmV0dXJuIHZpcnRfdG9fYnVzKHB0cik7CiAjZW5kaWYKLQlkbWFfY2FjaGVfc3luYyhwdHIsIHNpemUsIGRpcik7CisJZG1hX2NhY2hlX3N5bmMoZGV2LCBwdHIsIHNpemUsIGRpcik7CiAKIAlyZXR1cm4gdmlydF90b19idXMocHRyKTsKIH0KQEAgLTgxLDcgKzgxLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7CiAjaWYgIWRlZmluZWQoQ09ORklHX1BDSSkgfHwgZGVmaW5lZChDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UKQotCQlkbWFfY2FjaGVfc3luYyhwYWdlX2FkZHJlc3Moc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQsCisJCWRtYV9jYWNoZV9zeW5jKGRldiwgcGFnZV9hZGRyZXNzKHNnW2ldLnBhZ2UpICsgc2dbaV0ub2Zmc2V0LAogCQkJICAgICAgIHNnW2ldLmxlbmd0aCwgZGlyKTsKICNlbmRpZgogCQlzZ1tpXS5kbWFfYWRkcmVzcyA9IHBhZ2VfdG9fcGh5cyhzZ1tpXS5wYWdlKSArIHNnW2ldLm9mZnNldDsKQEAgLTExMiw3ICsxMTIsNyBAQAogCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQogCQlyZXR1cm47CiAjZW5kaWYKLQlkbWFfY2FjaGVfc3luYyhidXNfdG9fdmlydChkbWFfaGFuZGxlKSwgc2l6ZSwgZGlyKTsKKwlkbWFfY2FjaGVfc3luYyhkZXYsIGJ1c190b192aXJ0KGRtYV9oYW5kbGUpLCBzaXplLCBkaXIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTEyNCw3ICsxMjQsNyBAQAogCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQogCQlyZXR1cm47CiAjZW5kaWYKLQlkbWFfY2FjaGVfc3luYyhidXNfdG9fdmlydChkbWFfaGFuZGxlKSArIG9mZnNldCwgc2l6ZSwgZGlyKTsKKwlkbWFfY2FjaGVfc3luYyhkZXYsIGJ1c190b192aXJ0KGRtYV9oYW5kbGUpICsgb2Zmc2V0LCBzaXplLCBkaXIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLApAQCAtMTM0LDcgKzEzNCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspIHsKICNpZiAhZGVmaW5lZChDT05GSUdfUENJKSB8fCBkZWZpbmVkKENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQpCi0JCWRtYV9jYWNoZV9zeW5jKHBhZ2VfYWRkcmVzcyhzZ1tpXS5wYWdlKSArIHNnW2ldLm9mZnNldCwKKwkJZG1hX2NhY2hlX3N5bmMoZGV2LCBwYWdlX2FkZHJlc3Moc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQsCiAJCQkgICAgICAgc2dbaV0ubGVuZ3RoLCBkaXIpOwogI2VuZGlmCiAJCXNnW2ldLmRtYV9hZGRyZXNzID0gcGFnZV90b19waHlzKHNnW2ldLnBhZ2UpICsgc2dbaV0ub2Zmc2V0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaXJxLmggYi9pbmNsdWRlL2FzbS1zaC9pcnEuaAppbmRleCBmZDU3NjA4Li5iZmY5NjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9pcnEuaApAQCAtMzcsNyArMzcsOCBAQAogIyBkZWZpbmUgT05DSElQX05SX0lSUVMgMTQ0CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODApIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQogIyBkZWZpbmUgT05DSElQX05SX0lSUVMgMTA5CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCiAjIGRlZmluZSBPTkNISVBfTlJfSVJRUyAxMTEKQEAgLTc5LDYgKzgwLDggQEAKICMgZGVmaW5lIE9GRkNISVBfTlJfSVJRUyAxNgogI2VsaWYgZGVmaW5lZChDT05GSUdfU0hfNzM0M19TT0xVVElPTl9FTkdJTkUpCiAjIGRlZmluZSBPRkZDSElQX05SX0lSUVMgMTIKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NIXzc3MjJfU09MVVRJT05fRU5HSU5FKQorIyBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDE0CiAjZWxpZiBkZWZpbmVkKENPTkZJR19TSF9VTktOT1dOKQogIyBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDE2CS8qIE11c3QgYWxzbyBiZSBsYXN0ICovCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oCmluZGV4IGM4NDkwMWQuLjAzNmNhMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmgKQEAgLTUwOCwxNiArNTA4LDUwIEBACiBleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOwogCi0vKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCiAvKgorICogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeQorICoKKyAqIENvbnN0cmFpbnRzOgorICoJX1BBR0VfRklMRSBhdCBiaXQgMAorICoJX1BBR0VfUFJFU0VOVCBhdCBiaXQgOAorICoJX1BBR0VfUFJPVE5PTkUgYXQgYml0IDkKKyAqCisgKiBGb3IgdGhlIG5vcm1hbCBjYXNlLCB3ZSBlbmNvZGUgdGhlIHN3YXAgdHlwZSBpbnRvIGJpdHMgMDo3IGFuZCB0aGUKKyAqIHN3YXAgb2Zmc2V0IGludG8gYml0cyAxMDozMC4gRm9yIHRoZSA2NC1iaXQgUFRFIGNhc2UsIHdlIGtlZXAgdGhlCisgKiBwcmVzZXJ2ZWQgYml0cyBpbiB0aGUgbG93IDMyLWJpdHMgYW5kIHVzZSB0aGUgdXBwZXIgMzIgYXMgdGhlIHN3YXAKKyAqIG9mZnNldCAoYWxvbmcgd2l0aCBhIDUtYml0IHR5cGUpLCBmb2xsb3dpbmcgdGhlIHNhbWUgYXBwcm9hY2ggYXMgeDg2CisgKiBQQUUuIFRoaXMga2VlcHMgdGhlIGxvZ2ljIHF1aXRlIHNpbXBsZSwgYW5kIGFsbG93cyBmb3IgYSBmdWxsIDMyCisgKiBQVEVfRklMRV9NQVhfQklUUywgYXMgb3Bwb3NlZCB0byB0aGUgMjktYml0cyB3ZSdyZSBjb25zdHJhaW5lZCB3aXRoCisgKiBpbiB0aGUgcHRlX2xvdyBjYXNlLgorICoKKyAqIEFzIGlzIGV2aWRlbnQgYnkgdGhlIEFscGhhIGNvZGUsIGlmIHdlIGV2ZXIgZ2V0IGEgNjQtYml0IHVuc2lnbmVkCisgKiBsb25nIChzd3BfZW50cnlfdCkgdG8gbWF0Y2ggdXAgd2l0aCB0aGUgNjQtYml0IFBURXMsIHRoaXMgYWxsIGJlY29tZXMKKyAqIG11Y2ggY2xlYW5lci4uCisgKgogICogTk9URTogV2Ugc2hvdWxkIHNldCBaRVJPcyBhdCB0aGUgcG9zaXRpb24gb2YgX1BBR0VfUFJFU0VOVAogICogICAgICAgYW5kIF9QQUdFX1BST1ROT05FIGJpdHMKICAqLwotI2RlZmluZSBfX3N3cF90eXBlKHgpCQkoKHgpLnZhbCAmIDB4ZmYpCi0jZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJKCh4KS52YWwgPj4gMTApCi0jZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkgKChzd3BfZW50cnlfdCkgeyAodHlwZSkgfCAoKG9mZnNldCkgPDwgMTApIH0pCi0jZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpID4+IDEgfSkKLSNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCA8PCAxIH0pCisjaWZkZWYgQ09ORklHX1gyVExCCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKHgpLnZhbCAmIDB4MWYpCisjZGVmaW5lIF9fc3dwX29mZnNldCh4KQkJCSgoeCkudmFsID4+IDUpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkJKChzd3BfZW50cnlfdCl7ICh0eXBlKSB8IChvZmZzZXQpIDw8IDV9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCl7IChwdGUpLnB0ZV9oaWdoIH0pCisjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCl7IDAsICh4KS52YWwgfSkKKworLyoKKyAqIEVuY29kZSBhbmQgZGVjb2RlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZyBlbnRyeQorICovCisjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCQkoKHB0ZSkucHRlX2hpZ2gpCisjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCQkoKHB0ZV90KSB7IF9QQUdFX0ZJTEUsIChvZmYpIH0pCisKKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJCTMyCisjZWxzZQorI2RlZmluZSBfX3N3cF90eXBlKHgpCQkJKCh4KS52YWwgJiAweGZmKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCQkoKHgpLnZhbCA+PiAxMCkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KQkoKHN3cF9lbnRyeV90KXsodHlwZSkgfCAob2Zmc2V0KSA8PDEwfSkKKworI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgPj4gMSB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgKHgpLnZhbCA8PCAxIH0pCiAKIC8qCiAgKiBFbmNvZGUgYW5kIGRlY29kZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgZW50cnkKQEAgLTUyNSw2ICs1NTksNyBAQAogI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyOQogI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkocHRlX3ZhbChwdGUpID4+IDEpCiAjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCSgocHRlX3QpIHsgKChvZmYpIDw8IDEpIHwgX1BBR0VfRklMRSB9KQorI2VuZGlmCiAKIHR5cGVkZWYgcHRlX3QgKnB0ZV9hZGRyX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yLmgKaW5kZXggNmYxZGQ3Yy4uZTI5ZjJhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yLmgKQEAgLTI3LDYgKzI3LDggQEAKICNkZWZpbmUgQ0NOX0NWUgkJMHhmZjAwMDA0MAogI2RlZmluZSBDQ05fUFJSCQkweGZmMDAwMDQ0CiAKK2NvbnN0IGNoYXIgKmdldF9jcHVfc3VidHlwZSh2b2lkKTsKKwogLyoKICAqICBDUFUgdHlwZSBhbmQgaGFyZHdhcmUgYnVnIGZsYWdzLiBLZXB0IHNlcGFyYXRlbHkgZm9yIGVhY2ggQ1BVLgogICoKQEAgLTUyLDggKzU0LDEwIEBACiAJQ1BVX1NINzc2MCwgQ1BVX1NUNDBSQSwgQ1BVX1NUNDBHWDEsIENQVV9TSDRfMjAyLCBDUFVfU0g0XzUwMSwKIAogCS8qIFNILTRBIHR5cGVzICovCi0JQ1BVX1NINzMxODAsIENQVV9TSDczNDMsIENQVV9TSDc3NzAsIENQVV9TSDc3ODAsIENQVV9TSDc3ODEsCi0JQ1BVX1NINzc4NSwKKwlDUFVfU0g3NzcwLCBDUFVfU0g3NzgwLCBDUFVfU0g3NzgxLCBDUFVfU0g3Nzg1LAorCisJLyogU0g0QUwtRFNQIHR5cGVzICovCisJQ1BVX1NINzMxODAsIENQVV9TSDczNDMsIENQVV9TSDc3MjIsCiAKIAkvKiBVbmtub3duIHN1YnR5cGUgKi8KIAlDUFVfU0hfTk9ORQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcHVzaC1zd2l0Y2guaCBiL2luY2x1ZGUvYXNtLXNoL3B1c2gtc3dpdGNoLmgKaW5kZXggZGZjNmJhZC4uNDkwM2Y5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcHVzaC1zd2l0Y2guaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wdXNoLXN3aXRjaC5oCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKIHN0cnVjdCBwdXNoX3N3aXRjaCB7CiAJLyogc3dpdGNoIHN0YXRlICovCkBAIC0xMiw2ICsxMyw4IEBACiAJc3RydWN0IHRpbWVyX2xpc3QJZGVib3VuY2U7CiAJLyogd29ya3F1ZXVlICovCiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJLyogcGxhdGZvcm0gZGV2aWNlLCBmb3Igd29ya3F1ZXVlIGhhbmRsZXIgKi8KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OwogfTsKIAogc3RydWN0IHB1c2hfc3dpdGNoX3BsYXRmb3JtX2luZm8gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLXNoL3Rlcm1iaXRzLmgKaW5kZXggNGY5ODIyYS4uZjFiN2I0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC90ZXJtYml0cy5oCkBAIC0xNyw2ICsxNywxNyBAQAogCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLwogfTsKIAorc3RydWN0IGt0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KK307CisKIC8qIGNfY2MgY2hhcmFjdGVycyAqLwogI2RlZmluZSBWSU5UUiAwCiAjZGVmaW5lIFZRVUlUIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1zaC90aHJlYWRfaW5mby5oCmluZGV4IDBjMDFkYzUuLjg3OWY3NDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvdGhyZWFkX2luZm8uaApAQCAtMTA2LDYgKzEwNiw3IEBACiAjZGVmaW5lIFRJRl9VU0VERlBVCQkxNgkvKiBGUFUgd2FzIHVzZWQgYnkgdGhpcyB0YXNrIHRoaXMgcXVhbnR1bSAoU01QKSAqLwogI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTcJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIFRJRl9ORUVEX1JFU0NIRUQgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTgKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTkKIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQpAQCAtMTE0LDYgKzExNSw3IEBACiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX1VTRURGUFUJCSgxPDxUSUZfVVNFREZQVSkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMDAwRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSwkweDAwMDAwMEZGCS8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1LXNwYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNoNjQvY2FjaGVmbHVzaC5oCmluZGV4IDU1ZjcxYWEuLjFlNTNhNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvY2FjaGVmbHVzaC5oCkBAIC0yMSw2ICsyMSw4IEBACiAJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICAgIGludCBsZW4pOwogCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJZmx1c2hfY2FjaGVfbW0obW0pCisKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXNoNjQvcGdhbGxvYy5oCmluZGV4IGIyOWRkNDYuLmNiODAzZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvcGdhbGxvYy5oCkBAIC00MSw3ICs0MSw3IEBACiBzdGF0aWMgaW5saW5lIHBnZF90ICpnZXRfcGdkX3Nsb3codm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcGdkX3NpemUgPSAoVVNFUl9QVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKTsKLQlwZ2RfdCAqcmV0ID0gKHBnZF90ICopa21hbGxvYyhwZ2Rfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJcGdkX3QgKnJldCA9IGttYWxsb2MocGdkX3NpemUsIEdGUF9LRVJORUwpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYml0b3BzLmgKaW5kZXggMDRhYTMzMS4uMzI5ZTY5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYml0b3BzLmgKQEAgLTE0LDYgKzE0LDEwIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fX3NldF9iaXQodW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBtYXNrKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIG1hc2spOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19fY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIG1hc2spOworCiAvKgogICogU2V0IGJpdCAnbnInIGluIDMyLWJpdCBxdWFudGl0eSBhdCBhZGRyZXNzICdhZGRyJyB3aGVyZSBiaXQgJzAnCiAgKiBpcyBpbiB0aGUgaGlnaGVzdCBvZiB0aGUgZm91ciBieXRlcyBhbmQgYml0ICczMScgaXMgdGhlIGhpZ2ggYml0CkBAIC0yMiwxMzQgKzI2LDYyIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIG1hc2sgYXNtKCJnMiIpOwotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgKkFERFIgYXNtKCJnMSIpOwotCXJlZ2lzdGVyIGludCB0bXAxIGFzbSgiZzMiKTsKLQlyZWdpc3RlciBpbnQgdG1wMiBhc20oImc0Iik7Ci0JcmVnaXN0ZXIgaW50IHRtcDMgYXNtKCJnNSIpOwotCXJlZ2lzdGVyIGludCB0bXA0IGFzbSgiZzciKTsKKwl1bnNpZ25lZCBsb25nICpBRERSLCBtYXNrOwogCiAJQUREUiA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiA1KTsKIAltYXNrID0gMSA8PCAobnIgJiAzMSk7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkibW92CSUlbzcsICUlZzRcblx0IgotCSJjYWxsCV9fX3NldF9iaXRcblx0IgotCSIgYWRkCSUlbzcsIDgsICUlbzdcbiIKLQk6ICI9JnIiIChtYXNrKSwgIj1yIiAodG1wMSksICI9ciIgKHRtcDIpLCAiPXIiICh0bXAzKSwgIj1yIiAodG1wNCkKLQk6ICIwIiAobWFzayksICJyIiAoQUREUikKLQk6ICJtZW1vcnkiLCAiY2MiKTsKLQotCXJldHVybiBtYXNrICE9IDA7CisJcmV0dXJuIF9fX3NldF9iaXQoQUREUiwgbWFzaykgIT0gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQodW5zaWduZWQgbG9uZyBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIG1hc2sgYXNtKCJnMiIpOwotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgKkFERFIgYXNtKCJnMSIpOwotCXJlZ2lzdGVyIGludCB0bXAxIGFzbSgiZzMiKTsKLQlyZWdpc3RlciBpbnQgdG1wMiBhc20oImc0Iik7Ci0JcmVnaXN0ZXIgaW50IHRtcDMgYXNtKCJnNSIpOwotCXJlZ2lzdGVyIGludCB0bXA0IGFzbSgiZzciKTsKKwl1bnNpZ25lZCBsb25nICpBRERSLCBtYXNrOwogCiAJQUREUiA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiA1KTsKIAltYXNrID0gMSA8PCAobnIgJiAzMSk7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkibW92CSUlbzcsICUlZzRcblx0IgotCSJjYWxsCV9fX3NldF9iaXRcblx0IgotCSIgYWRkCSUlbzcsIDgsICUlbzdcbiIKLQk6ICI9JnIiIChtYXNrKSwgIj1yIiAodG1wMSksICI9ciIgKHRtcDIpLCAiPXIiICh0bXAzKSwgIj1yIiAodG1wNCkKLQk6ICIwIiAobWFzayksICJyIiAoQUREUikKLQk6ICJtZW1vcnkiLCAiY2MiKTsKKwkodm9pZCkgX19fc2V0X2JpdChBRERSLCBtYXNrKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBtYXNrIGFzbSgiZzIiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nICpBRERSIGFzbSgiZzEiKTsKLQlyZWdpc3RlciBpbnQgdG1wMSBhc20oImczIik7Ci0JcmVnaXN0ZXIgaW50IHRtcDIgYXNtKCJnNCIpOwotCXJlZ2lzdGVyIGludCB0bXAzIGFzbSgiZzUiKTsKLQlyZWdpc3RlciBpbnQgdG1wNCBhc20oImc3Iik7CisJdW5zaWduZWQgbG9uZyAqQUREUiwgbWFzazsKIAogCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7CiAJbWFzayA9IDEgPDwgKG5yICYgMzEpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIm1vdgklJW83LCAlJWc0XG5cdCIKLQkiY2FsbAlfX19jbGVhcl9iaXRcblx0IgotCSIgYWRkCSUlbzcsIDgsICUlbzdcbiIKLQk6ICI9JnIiIChtYXNrKSwgIj1yIiAodG1wMSksICI9ciIgKHRtcDIpLCAiPXIiICh0bXAzKSwgIj1yIiAodG1wNCkKLQk6ICIwIiAobWFzayksICJyIiAoQUREUikKLQk6ICJtZW1vcnkiLCAiY2MiKTsKLQotCXJldHVybiBtYXNrICE9IDA7CisJcmV0dXJuIF9fX2NsZWFyX2JpdChBRERSLCBtYXNrKSAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBtYXNrIGFzbSgiZzIiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nICpBRERSIGFzbSgiZzEiKTsKLQlyZWdpc3RlciBpbnQgdG1wMSBhc20oImczIik7Ci0JcmVnaXN0ZXIgaW50IHRtcDIgYXNtKCJnNCIpOwotCXJlZ2lzdGVyIGludCB0bXAzIGFzbSgiZzUiKTsKLQlyZWdpc3RlciBpbnQgdG1wNCBhc20oImc3Iik7CisJdW5zaWduZWQgbG9uZyAqQUREUiwgbWFzazsKIAogCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7CiAJbWFzayA9IDEgPDwgKG5yICYgMzEpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIm1vdgklJW83LCAlJWc0XG5cdCIKLQkiY2FsbAlfX19jbGVhcl9iaXRcblx0IgotCSIgYWRkCSUlbzcsIDgsICUlbzdcbiIKLQk6ICI9JnIiIChtYXNrKSwgIj1yIiAodG1wMSksICI9ciIgKHRtcDIpLCAiPXIiICh0bXAzKSwgIj1yIiAodG1wNCkKLQk6ICIwIiAobWFzayksICJyIiAoQUREUikKLQk6ICJtZW1vcnkiLCAiY2MiKTsKKwkodm9pZCkgX19fY2xlYXJfYml0KEFERFIsIG1hc2spOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBtYXNrIGFzbSgiZzIiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nICpBRERSIGFzbSgiZzEiKTsKLQlyZWdpc3RlciBpbnQgdG1wMSBhc20oImczIik7Ci0JcmVnaXN0ZXIgaW50IHRtcDIgYXNtKCJnNCIpOwotCXJlZ2lzdGVyIGludCB0bXAzIGFzbSgiZzUiKTsKLQlyZWdpc3RlciBpbnQgdG1wNCBhc20oImc3Iik7CisJdW5zaWduZWQgbG9uZyAqQUREUiwgbWFzazsKIAogCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7CiAJbWFzayA9IDEgPDwgKG5yICYgMzEpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIm1vdgklJW83LCAlJWc0XG5cdCIKLQkiY2FsbAlfX19jaGFuZ2VfYml0XG5cdCIKLQkiIGFkZAklJW83LCA4LCAlJW83XG4iCi0JOiAiPSZyIiAobWFzayksICI9ciIgKHRtcDEpLCAiPXIiICh0bXAyKSwgIj1yIiAodG1wMyksICI9ciIgKHRtcDQpCi0JOiAiMCIgKG1hc2spLCAiciIgKEFERFIpCi0JOiAibWVtb3J5IiwgImNjIik7Ci0KLQlyZXR1cm4gbWFzayAhPSAwOworCXJldHVybiBfX19jaGFuZ2VfYml0KEFERFIsIG1hc2spICE9IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBtYXNrIGFzbSgiZzIiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nICpBRERSIGFzbSgiZzEiKTsKLQlyZWdpc3RlciBpbnQgdG1wMSBhc20oImczIik7Ci0JcmVnaXN0ZXIgaW50IHRtcDIgYXNtKCJnNCIpOwotCXJlZ2lzdGVyIGludCB0bXAzIGFzbSgiZzUiKTsKLQlyZWdpc3RlciBpbnQgdG1wNCBhc20oImc3Iik7CisJdW5zaWduZWQgbG9uZyAqQUREUiwgbWFzazsKIAogCUFERFIgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gNSk7CiAJbWFzayA9IDEgPDwgKG5yICYgMzEpOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIm1vdgklJW83LCAlJWc0XG5cdCIKLQkiY2FsbAlfX19jaGFuZ2VfYml0XG5cdCIKLQkiIGFkZAklJW83LCA4LCAlJW83XG4iCi0JOiAiPSZyIiAobWFzayksICI9ciIgKHRtcDEpLCAiPXIiICh0bXAyKSwgIj1yIiAodG1wMyksICI9ciIgKHRtcDQpCi0JOiAiMCIgKG1hc2spLCAiciIgKEFERFIpCi0JOiAibWVtb3J5IiwgImNjIik7CisJKHZvaWQpIF9fX2NoYW5nZV9iaXQoQUREUiwgbWFzayk7CiB9CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGVmbHVzaC5oCmluZGV4IGZjNjMyZjguLjY4YWMxMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jYWNoZWZsdXNoLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKIAogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKSBCVEZJWFVQX0NBTEwoZmx1c2hfY2FjaGVfYWxsKSgpCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKSBCVEZJWFVQX0NBTEwoZmx1c2hfY2FjaGVfbW0pKG1tKQorI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pIEJURklYVVBfQ0FMTChmbHVzaF9jYWNoZV9tbSkobW0pCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSxzdGFydCxlbmQpIEJURklYVVBfQ0FMTChmbHVzaF9jYWNoZV9yYW5nZSkodm1hLHN0YXJ0LGVuZCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsYWRkcixwZm4pIEJURklYVVBfQ0FMTChmbHVzaF9jYWNoZV9wYWdlKSh2bWEsYWRkcikKICNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY2hlY2tzdW0uaAppbmRleCAyNjdlNjMxLi4zNDUxOGVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2NoZWNrc3VtLmgKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQkJICAgICAieG5vclx0JSVnMCwgJTAsICUwIgogCQkJICAgICA6ICI9ciIgKHN1bSksICI9JnIiIChpcGgpCiAJCQkgICAgIDogInIiIChpaGwpLCAiMSIgKGlwaCkKLQkJCSAgICAgOiAiZzIiLCAiZzMiLCAiZzQiLCAiY2MiKTsKKwkJCSAgICAgOiAiZzIiLCAiZzMiLCAiZzQiLCAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIHN1bTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvb2ZfZGV2aWNlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9vZl9kZXZpY2UuaAppbmRleCA4MGVhMzFmLi43Y2IwMGMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9vZl9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9vZl9kZXZpY2UuaApAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZQl0b19vZl9kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBvZl9kZXZpY2UsIGRldikKIAogZXh0ZXJuIHZvaWQgX19pb21lbSAqb2ZfaW9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY2hhciAqbmFtZSk7Ci1leHRlcm4gdm9pZCBvZl9pb3VubWFwKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIG9mX2lvdW5tYXAoc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAogZXh0ZXJuIHN0cnVjdCBvZl9kZXZpY2UgKm9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdGVybWJpdHMuaAppbmRleCAxNzk0ZDcxLi41ZWIwMGExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Rlcm1iaXRzLmgKQEAgLTMxLDYgKzMxLDE4IEBACiAjZW5kaWYKIH07CiAKK3N0cnVjdCBrdGVybWlvcyB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwljY190IF94X2NjWzJdOyAgICAgICAgICAgICAgICAgIC8qIFdlIG5lZWQgdGhlbSB0byBob2xkIHZtaW4vdnRpbWUgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCiAvKiBjX2NjIGNoYXJhY3RlcnMgKi8KICNkZWZpbmUgVklOVFIgICAgMAogI2RlZmluZSBWUVVJVCAgICAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oCmluZGV4IDc0NWQxYWIuLjEyMmU0MDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oCkBAIC0xMiw2ICsxMiw3IEBACiAvKiBUaGVzZSBhcmUgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoaXMgaXMgYW4gU01QIGtlcm5lbCBvciBub3QuICovCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKF9fbW0pIFwKIAlkbyB7IGlmICgoX19tbSkgPT0gY3VycmVudC0+bW0pIGZsdXNod191c2VyKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKSBmbHVzaF9jYWNoZV9tbShtbSkKICNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBcCiAJZmx1c2hfY2FjaGVfbW0oKHZtYSktPnZtX21tKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgcGFnZSwgcGZuKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEuaAppbmRleCAyN2Y2NTk3Li45M2U1YTA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLmgKQEAgLTE1Miw5ICsxNTIsOSBAQAogI2RlZmluZSBETUFfTUFYRU5EKGFkZHIpICgweDAxMDAwMDAwVUwtKCgodW5zaWduZWQgbG9uZykoYWRkcikpJjB4MDBmZmZmZmZVTCkpCiAKIC8qIFllcywgSSBoYWNrIGEgbG90IG9mIGVsaXNwIGluIG15IHNwYXJlIHRpbWUuLi4gKi8KLSNkZWZpbmUgRE1BX0VSUk9SX1AocmVncykgICgoKHNidXNfcmVhZGwoKHJlZ3MpICsgRE1BX0NTUikgJiBETUFfSE5ETF9FUlJPUikpCi0jZGVmaW5lIERNQV9JUlFfUChyZWdzKSAgICAoKChzYnVzX3JlYWRsKChyZWdzKSArIERNQV9DU1IpKSAmIChETUFfSE5ETF9JTlRSIHwgRE1BX0hORExfRVJST1IpKSkKLSNkZWZpbmUgRE1BX1dSSVRFX1AocmVncykgICgoKHNidXNfcmVhZGwoKHJlZ3MpICsgRE1BX0NTUikgJiBETUFfU1RfV1JJVEUpKQorI2RlZmluZSBETUFfRVJST1JfUChyZWdzKSAgKChzYnVzX3JlYWRsKChyZWdzKSArIERNQV9DU1IpICYgRE1BX0hORExfRVJST1IpKQorI2RlZmluZSBETUFfSVJRX1AocmVncykgICAgKChzYnVzX3JlYWRsKChyZWdzKSArIERNQV9DU1IpKSAmIChETUFfSE5ETF9JTlRSIHwgRE1BX0hORExfRVJST1IpKQorI2RlZmluZSBETUFfV1JJVEVfUChyZWdzKSAgKChzYnVzX3JlYWRsKChyZWdzKSArIERNQV9DU1IpICYgRE1BX1NUX1dSSVRFKSkKICNkZWZpbmUgRE1BX09GRihfX3JlZ3MpCQlcCiBkbyB7CXUzMiB0bXAgPSBzYnVzX3JlYWRsKChfX3JlZ3MpICsgRE1BX0NTUik7IFwKIAl0bXAgJj0gfkRNQV9FTkFCTEU7IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2h3X2lycS5oCmluZGV4IDU5OWIzYjAuLjhlNDRhODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9od19pcnEuaApAQCAtMSw2ICsxLDQgQEAKICNpZm5kZWYgX19BU01fU1BBUkM2NF9IV19JUlFfSAogI2RlZmluZSBfX0FTTV9TUEFSQzY0X0hXX0lSUV9ICiAKLWV4dGVybiB2b2lkIGh3X3Jlc2VuZF9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICpoYW5kbGVyLCB1bnNpZ25lZCBpbnQgdmlydF9pcnEpOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxZmxhZ3MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjRmYzU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pcnFmbGFncy5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zcGFyYzY0L2lycWZsYWdzLmgKKyAqCisgKiBJUlEgZmxhZ3MgaGFuZGxpbmcKKyAqCisgKiBUaGlzIGZpbGUgZ2V0cyBpbmNsdWRlZCBmcm9tIGxvd2xldmVsIGFzbSBoZWFkZXJzIHRvbywgdG8gcHJvdmlkZQorICogd3JhcHBlZCB2ZXJzaW9ucyBvZiB0aGUgbG9jYWxfaXJxXyooKSBBUElzLCBiYXNlZCBvbiB0aGUKKyAqIHJhd19sb2NhbF9pcnFfKigpIGZ1bmN0aW9ucyBmcm9tIHRoZSBsb3dsZXZlbCBoZWFkZXJzLgorICovCisjaWZuZGVmIF9BU01fSVJRRkxBR1NfSAorI2RlZmluZSBfQVNNX0lSUUZMQUdTX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3Modm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJyZHByCSUlcGlsLCAlMCIKKwkJOiAiPXIiIChmbGFncykKKwkpOworCisJcmV0dXJuIGZsYWdzOworfQorCisjZGVmaW5lIHJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKSBcCisJCWRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3MoKTsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkid3JwcgklMCwgJSVwaWwiCisJCTogLyogbm8gb3V0cHV0ICovCisJCTogInIiIChmbGFncykKKwkJOiAibWVtb3J5IgorCSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIndycHIJMTUsICUlcGlsIgorCQk6IC8qIG5vIG91dHB1dHMgKi8KKwkJOiAvKiBubyBpbnB1dHMgKi8KKwkJOiAibWVtb3J5IgorCSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkid3JwcgkwLCAlJXBpbCIKKwkJOiAvKiBubyBvdXRwdXRzICovCisJCTogLyogbm8gaW5wdXRzICovCisJCTogIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIGludCByYXdfaXJxc19kaXNhYmxlZF9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiAoZmxhZ3MgPiAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmF3X2lycXNfZGlzYWJsZWQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gX19yYXdfbG9jYWxfc2F2ZV9mbGFncygpOworCisJcmV0dXJuIHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKTsKK30KKworLyoKKyAqIEZvciBzcGlubG9ja3MsIGV0YzoKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX2lycV9zYXZlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3MoKTsKKworCXJhd19sb2NhbF9pcnFfZGlzYWJsZSgpOworCisJcmV0dXJuIGZsYWdzOworfQorCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfc2F2ZShmbGFncykgXAorCQlkbyB7IChmbGFncykgPSBfX3Jhd19sb2NhbF9pcnFfc2F2ZSgpOyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogKF9fQVNTRU1CTFlfXykgKi8KKworI2VuZGlmIC8qICEoX0FTTV9JUlFGTEFHU19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaAppbmRleCBjOWY1YzM0Li5iZWNjMzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaApAQCAtMTMsNyArMTMsMTEgQEAKICNkZWZpbmUgSlBST0JFX0VOVFJZKHBlbnRyeSkJKGtwcm9iZV9vcGNvZGVfdCAqKXBlbnRyeQogI2RlZmluZSBhcmNoX3JlbW92ZV9rcHJvYmUocCkJZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lICBBUkNIX0lOQUNUSVZFX0tQUk9CRV9DT1VOVCAwCi0jZGVmaW5lIGZsdXNoX2luc25fc2xvdChwKQlkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCQlcCitkbyB7IAlmbHVzaGkoJihwKS0+YWluc24uaW5zblswXSk7CVwKKwlmbHVzaGkoJihwKS0+YWluc24uaW5zblsxXSk7CVwKK30gd2hpbGUgKDApCiAKIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb3B5IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uKi8KIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gewpAQCAtMjMsNyArMjcsNyBAQAogCiBzdHJ1Y3QgcHJldl9rcHJvYmUgewogCXN0cnVjdCBrcHJvYmUgKmtwOwotCXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBvcmlnX3RucGM7CiAJdW5zaWduZWQgbG9uZyBvcmlnX3RzdGF0ZV9waWw7CiB9OwpAQCAtMzMsMTAgKzM3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGtwcm9iZV9zdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBrcHJvYmVfb3JpZ190bnBjOwogCXVuc2lnbmVkIGxvbmcga3Byb2JlX29yaWdfdHN0YXRlX3BpbDsKLQlsb25nICpqcHJvYmVfc2F2ZWRfZXNwOwogCXN0cnVjdCBwdF9yZWdzIGpwcm9iZV9zYXZlZF9yZWdzOwotCXN0cnVjdCBwdF9yZWdzICpqcHJvYmVfc2F2ZWRfcmVnc19sb2NhdGlvbjsKLQlzdHJ1Y3Qgc3BhcmNfc3RhY2tmIGpwcm9iZV9zYXZlZF9zdGFjazsKIAlzdHJ1Y3QgcHJldl9rcHJvYmUgcHJldl9rcHJvYmU7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29mX2RldmljZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vZl9kZXZpY2UuaAppbmRleCBhNjJjN2I5Li42MGU5MTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29mX2RldmljZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvb2ZfZGV2aWNlLmgKQEAgLTM0LDcgKzM0LDcgQEAKICNkZWZpbmUJdG9fb2ZfZGV2aWNlKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgb2ZfZGV2aWNlLCBkZXYpCiAKIGV4dGVybiB2b2lkIF9faW9tZW0gKm9mX2lvcmVtYXAoc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgb2ZfaW91bm1hcCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBvZl9pb3VubWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKIGV4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmgKaW5kZXggY2VkOGNiZC4uMGQzZGY3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oCkBAIC01LDYgKzUsMTYgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAorI2lmZGVmIENPTkZJR19NT0RVTEVTCisjIGRlZmluZSBQRVJDUFVfTU9EVUxFX1JFU0VSVkUgODE5MgorI2Vsc2UKKyMgZGVmaW5lIFBFUkNQVV9NT0RVTEVfUkVTRVJWRSAwCisjZW5kaWYKKworI2RlZmluZSBQRVJDUFVfRU5PVUdIX1JPT00gXAorCShBTElHTihfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0LCBTTVBfQ0FDSEVfQllURVMpICsgXAorCSBQRVJDUFVfTU9EVUxFX1JFU0VSVkUpCisKIGV4dGVybiB2b2lkIHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9iYXNlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9yd3NlbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9yd3NlbS5oCmluZGV4IGNlZjVlODIuLjEyOTRiN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcndzZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3J3c2VtLmgKQEAgLTIzLDIwICsyMywzMyBAQAogCXNpZ25lZCBpbnQgY291bnQ7CiAJc3BpbmxvY2tfdAkJd2FpdF9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJc3RydWN0IGxvY2tkZXBfbWFwCWRlcF9tYXA7CisjZW5kaWYKIH07CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworIyBkZWZpbmUgX19SV1NFTV9ERVBfTUFQX0lOSVQobG9ja25hbWUpICwgLmRlcF9tYXAgPSB7IC5uYW1lID0gI2xvY2tuYW1lIH0KKyNlbHNlCisjIGRlZmluZSBfX1JXU0VNX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkKKyNlbmRpZgorCiAjZGVmaW5lIF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkgXAoteyBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwgU1BJTl9MT0NLX1VOTE9DS0VELCBMSVNUX0hFQURfSU5JVCgobmFtZSkud2FpdF9saXN0KSB9Cit7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIExJU1RfSEVBRF9JTklUKChuYW1lKS53YWl0X2xpc3QpIFwKKyAgX19SV1NFTV9ERVBfTUFQX0lOSVQobmFtZSkgfQogCiAjZGVmaW5lIERFQ0xBUkVfUldTRU0obmFtZSkgXAogCXN0cnVjdCByd19zZW1hcGhvcmUgbmFtZSA9IF9fUldTRU1fSU5JVElBTElaRVIobmFtZSkKIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBpbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlzZW0tPmNvdW50ID0gUldTRU1fVU5MT0NLRURfVkFMVUU7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNlbS0+d2FpdF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmc2VtLT53YWl0X2xpc3QpOwotfQorZXh0ZXJuIHZvaWQgX19pbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7CisKKyNkZWZpbmUgaW5pdF9yd3NlbShzZW0pCQkJCQkJXAorZG8gewkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAorCQkJCQkJCQlcCisJX19pbml0X3J3c2VtKChzZW0pLCAjc2VtLCAmX19rZXkpOwkJCVwKK30gd2hpbGUgKDApCiAKIGV4dGVybiB2b2lkIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CiBleHRlcm4gaW50IF9fZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKTsKQEAgLTQ2LDYgKzU5LDExIEBACiBleHRlcm4gdm9pZCBfX3VwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSk7CiBleHRlcm4gdm9pZCBfX2Rvd25ncmFkZV93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pOwogCitzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3dyaXRlX25lc3RlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGludCBzdWJjbGFzcykKK3sKKwlfX2Rvd25fd3JpdGUoc2VtKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKIAlyZXR1cm4gYXRvbWljX2FkZF9yZXR1cm4oZGVsdGEsIChhdG9taWNfdCAqKSgmc2VtLT5jb3VudCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzdGVtLmgKaW5kZXggYThiNzQzMi4uMzIyODFhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oCkBAIC03LDYgKzcsOSBAQAogI2luY2x1ZGUgPGFzbS92aXNhc20uaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisKIC8qCiAgKiBTcGFyYyAoZ2VuZXJhbCkgQ1BVIHR5cGVzCiAgKi8KQEAgLTcyLDUyICs3NSw2IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIHNldGlwbChfX25ld19pcGwpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3JwcgklMCwgJSVwaWwiICA6IDogInIiIChfX25ld19pcGwpIDogIm1lbW9yeSIpCi0KLSNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIndycHIJMTUsICUlcGlsIiA6IDogOiAibWVtb3J5IikKLQotI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkgXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJ3cnByCTAsICUlcGlsIiA6IDogOiAibWVtb3J5IikKLQotI2RlZmluZSBnZXRpcGwoKSBcCi0oeyB1bnNpZ25lZCBsb25nIHJldHZhbDsgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkcHIJJSVwaWwsICUwIiA6ICI9ciIgKHJldHZhbCkpOyByZXR2YWw7IH0pCi0KLSNkZWZpbmUgc3dhcF9waWwoX19uZXdfcGlsKSBcCi0oewl1bnNpZ25lZCBsb25nIHJldHZhbDsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZHByCSUlcGlsLCAlMFxuXHQiIFwKLQkJCSAgICAgIndycHIJJTEsICUlcGlsIiBcCi0JCQkgICAgIDogIj0mciIgKHJldHZhbCkgXAotCQkJICAgICA6ICJyIiAoX19uZXdfcGlsKSBcCi0JCQkgICAgIDogIm1lbW9yeSIpOyBcCi0JcmV0dmFsOyBcCi19KQotCi0jZGVmaW5lIHJlYWRfcGlsX2FuZF9jbGkoKSBcCi0oewl1bnNpZ25lZCBsb25nIHJldHZhbDsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZHByCSUlcGlsLCAlMFxuXHQiIFwKLQkJCSAgICAgIndycHIJMTUsICUlcGlsIiBcCi0JCQkgICAgIDogIj1yIiAocmV0dmFsKSBcCi0JCQkgICAgIDogOiAibWVtb3J5Iik7IFwKLQlyZXR2YWw7IFwKLX0pCi0KLSNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyhmbGFncykJCSgoZmxhZ3MpID0gZ2V0aXBsKCkpCi0jZGVmaW5lIGxvY2FsX2lycV9zYXZlKGZsYWdzKQkJKChmbGFncykgPSByZWFkX3BpbF9hbmRfY2xpKCkpCi0jZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKQkJc2V0aXBsKChmbGFncykpCi0KLS8qIE9uIHNwYXJjNjQgSVJRIGZsYWdzIGFyZSB0aGUgUElMIHJlZ2lzdGVyLiAgQSB2YWx1ZSBvZiB6ZXJvCi0gKiBtZWFucyBhbGwgaW50ZXJydXB0IGxldmVscyBhcmUgZW5hYmxlZCwgYW55IG90aGVyIHZhbHVlIG1lYW5zCi0gKiBvbmx5IElSUSBsZXZlbHMgZ3JlYXRlciB0aGFuIHRoYXQgdmFsdWUgd2lsbCBiZSByZWNlaXZlZC4KLSAqIENvbnNlcXVlbnRseSB0aGlzIG1lYW5zIHRoYXQgdGhlIGxvd2VzdCBJUlEgbGV2ZWwgaXMgb25lLgotICovCi0jZGVmaW5lIGlycXNfZGlzYWJsZWQoKQkJXAotKHsJdW5zaWduZWQgbG9uZyBmbGFnczsJXAotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpO1wKLQkoZmxhZ3MgPiAwKTsJCVwKLX0pCi0KICNkZWZpbmUgbm9wKCkgCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcCIpCiAKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQkJZG8geyB9IHdoaWxlKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Rlcm1iaXRzLmgKaW5kZXggYjA3NzE1Mi4uNzA1Y2Q0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGVybWJpdHMuaApAQCAtMzMsNiArMzMsMTggQEAKICNlbmRpZgogfTsKIAorc3RydWN0IGt0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworCWNjX3QgX3hfY2NbMl07ICAgICAgICAgICAgICAgICAgLyogV2UgbmVlZCB0aGVtIHRvIGhvbGQgdm1pbi92dGltZSAqLworCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KK307CisKIC8qIGNfY2MgY2hhcmFjdGVycyAqLwogI2RlZmluZSBWSU5UUiAgICAwCiAjZGVmaW5lIFZRVUlUICAgIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3R0YWJsZS5oCmluZGV4IGYyMzUyNjAuLmMyYTE2ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaApAQCAtMTM3LDEwICsxMzcsNDkgQEAKICNlbmRpZgogI2RlZmluZSBCUkVBS1BPSU5UX1RSQVAgVFJBUChicmVha3BvaW50X3RyYXApCiAKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwogI2RlZmluZSBUUkFQX0lSUShyb3V0aW5lLCBsZXZlbCkJCQlcCiAJcmRwcgklcGlsLCAlZzI7CQkJCVwKIAl3cnByCSVnMCwgMTUsICVwaWw7CQkJCVwKLQliLHB0CSV4Y2MsIGV0cmFwX2lycTsJCQlcCisJc2V0aGkJJWhpKDFmLTQpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcF9pcnE7CQkJXAorCSBvcgklZzcsICVsbygxZi00KSwgJWc3OwkJCVwKKwlub3A7CQkJCQkJXAorCW5vcDsJCQkJCQlcCisJbm9wOwkJCQkJCVwKKwkuc3Vic2VjdGlvbgkyOwkJCQlcCisxOgljYWxsCXRyYWNlX2hhcmRpcnFzX29mZjsJCQlcCisJIG5vcDsJCQkJCQlcCisJbW92CWxldmVsLCAlbzA7CQkJCVwKKwljYWxsCXJvdXRpbmU7CQkJCVwKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8xOwkJCVwKKwliYSxhLHB0CSV4Y2MsIHJ0cmFwX2lycTsJCQlcCisJLnByZXZpb3VzOworCisjZGVmaW5lIFRJQ0tfU01QX0lSUQkJCQkJXAorCXJkcHIJJXBpbCwgJWcyOwkJCQlcCisJd3JwcgklZzAsIDE1LCAlcGlsOwkJCQlcCisJc2V0aGkJJWhpKDFmLTQpLCAlZzc7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcF9pcnE7CQkJXAorCSBvcgklZzcsICVsbygxZi00KSwgJWc3OwkJCVwKKwlub3A7CQkJCQkJXAorCW5vcDsJCQkJCQlcCisJbm9wOwkJCQkJCVwKKwkuc3Vic2VjdGlvbgkyOwkJCQlcCisxOgljYWxsCXRyYWNlX2hhcmRpcnFzX29mZjsJCQlcCisJIG5vcDsJCQkJCQlcCisJY2FsbAlzbXBfcGVyY3B1X3RpbWVyX2ludGVycnVwdDsJCVwKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKKwliYSxhLHB0CSV4Y2MsIHJ0cmFwX2lycTsJCQlcCisJLnByZXZpb3VzOworCisjZWxzZQorCisjZGVmaW5lIFRSQVBfSVJRKHJvdXRpbmUsIGxldmVsKQkJCVwKKwlyZHByCSVwaWwsICVnMjsJCQkJXAorCXdycHIJJWcwLCAxNSwgJXBpbDsJCQkJXAorCWJhLHB0CSV4Y2MsIGV0cmFwX2lycTsJCQlcCiAJIHJkCSVwYywgJWc3OwkJCQlcCiAJbW92CWxldmVsLCAlbzA7CQkJCVwKIAljYWxsCXJvdXRpbmU7CQkJCVwKQEAgLTE1MSwxMiArMTkwLDE0IEBACiAJcmRwcgklcGlsLCAlZzI7CQkJCVwKIAl3cnByCSVnMCwgMTUsICVwaWw7CQkJCVwKIAlzZXRoaQklaGkoMTA5ZiksICVnNzsJCQkJXAotCWIscHQJJXhjYywgZXRyYXBfaXJxOwkJCVwKKwliYSxwdAkleGNjLCBldHJhcF9pcnE7CQkJXAogMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCiAJY2FsbAlzbXBfcGVyY3B1X3RpbWVyX2ludGVycnVwdDsJCVwKIAkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wOwkJCVwKIAliYSxhLHB0CSV4Y2MsIHJ0cmFwX2lycTsKIAorI2VuZGlmCisKICNkZWZpbmUgVFJBUF9JVkVDIFRSQVBfTk9TQVZFKGRvX2l2ZWMpCiAKICNkZWZpbmUgQlRSQVAobHZsKSBUUkFQX0FSRyhiYWRfdHJhcCwgbHZsKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYnVnLmggYi9pbmNsdWRlL2FzbS11bS9idWcuaAppbmRleCAxZTIyZmEyLi4zMzU3YzVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9idWcuaAorKysgYi9pbmNsdWRlL2FzbS11bS9idWcuaApAQCAtMSw0ICsxLDYgQEAKICNpZm5kZWYgX19VTV9CVUdfSAogI2RlZmluZSBfX1VNX0JVR19ICi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9idWcuaD4KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLmgKaW5kZXggMTg4ZjcyNi4uZTU3ZmYxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3BndGFibGUuaApAQCAtNDA4LDYgKzQwOCwxNSBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgogCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKy8qIENsZWFyIGEga2VybmVsIFBURSBhbmQgZmx1c2ggaXQgZnJvbSB0aGUgVExCICovCisjZGVmaW5lIGtwdGVfY2xlYXJfZmx1c2gocHRlcCwgdmFkZHIpCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXB0ZV9jbGVhcigmaW5pdF9tbSwgdmFkZHIsIHB0ZXApOwkJCQlcCisJX19mbHVzaF90bGJfb25lKHZhZGRyKTsJCQkJCQlcCit9IHdoaWxlICgwKQorI2VuZGlmCisKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tdjg1MC9jYWNoZWZsdXNoLmgKaW5kZXggZTFhODdmOC4uOWVjZTA1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9jYWNoZWZsdXNoLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAgIHN5c3RlbXMgd2l0aCBNTVVzLCBzbyB3ZSBkb24ndCBuZWVkIHRoZW0uICAqLwogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCSgodm9pZCkwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQkoKHZvaWQpMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKQkJCSgodm9pZCkwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCSgodm9pZCkwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCSgodm9pZCkwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfcGFnZShwYWdlKQkJCSgodm9pZCkwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tdjg1MC90ZXJtYml0cy5oCmluZGV4IDIxMmQ0ZTIuLmYzYjQzMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3Rlcm1iaXRzLmgKQEAgLTE3LDYgKzE3LDE3IEBACiAJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCiB9OwogCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKwogLyogY19jYyBjaGFyYWN0ZXJzICovCiAjZGVmaW5lIFZJTlRSIDAKICNkZWZpbmUgVlFVSVQgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2FjcGkuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hY3BpLmgKaW5kZXggOWQxOTE2ZS4uNmI2ZmM2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2FjcGkuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYWNwaS5oCkBAIC01NCwzMCArNTQsOCBAQAogI2RlZmluZSBBQ1BJX0VOQUJMRV9JUlFTKCkgIGxvY2FsX2lycV9lbmFibGUoKQogI2RlZmluZSBBQ1BJX0ZMVVNIX0NQVV9DQUNIRSgpCXdiaW52ZCgpCiAKLQotc3RhdGljIGlubGluZSBpbnQKLV9fYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrICh1bnNpZ25lZCBpbnQgKmxvY2spCi17Ci0JdW5zaWduZWQgaW50IG9sZCwgbmV3LCB2YWw7Ci0JZG8gewotCQlvbGQgPSAqbG9jazsKLQkJbmV3ID0gKCgob2xkICYgfjB4MykgKyAyKSArICgob2xkID4+IDEpICYgMHgxKSk7Ci0JCXZhbCA9IGNtcHhjaGcobG9jaywgb2xkLCBuZXcpOwotCX0gd2hpbGUgKHVubGlrZWx5ICh2YWwgIT0gb2xkKSk7Ci0JcmV0dXJuIChuZXcgPCAzKSA/IC0xIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLV9fYWNwaV9yZWxlYXNlX2dsb2JhbF9sb2NrICh1bnNpZ25lZCBpbnQgKmxvY2spCi17Ci0JdW5zaWduZWQgaW50IG9sZCwgbmV3LCB2YWw7Ci0JZG8gewotCQlvbGQgPSAqbG9jazsKLQkJbmV3ID0gb2xkICYgfjB4MzsKLQkJdmFsID0gY21weGNoZyhsb2NrLCBvbGQsIG5ldyk7Ci0JfSB3aGlsZSAodW5saWtlbHkgKHZhbCAhPSBvbGQpKTsKLQlyZXR1cm4gb2xkICYgMHgxOwotfQoraW50IF9fYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKHVuc2lnbmVkIGludCAqbG9jayk7CitpbnQgX19hY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2sodW5zaWduZWQgaW50ICpsb2NrKTsKIAogI2RlZmluZSBBQ1BJX0FDUVVJUkVfR0xPQkFMX0xPQ0soR0xwdHIsIEFjcSkgXAogCSgoQWNxKSA9IF9fYWNwaV9hY3F1aXJlX2dsb2JhbF9sb2NrKCh1bnNpZ25lZCBpbnQgKikgR0xwdHIpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2JpdG9wcy5oCmluZGV4IDViNTM1ZWEuLjhkYTk2MDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYml0b3BzLmgKQEAgLTcsNyArNywxMyBAQAogCiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAKLSNkZWZpbmUgQUREUiAoKih2b2xhdGlsZSBsb25nICopIGFkZHIpCisjaWYgX19HTlVDX18gPCA0IHx8IF9fR05VQ19NSU5PUl9fIDwgMQorLyogVGVjaG5pY2FsbHkgd3JvbmcsIGJ1dCB0aGlzIGF2b2lkcyBjb21waWxhdGlvbiBlcnJvcnMgb24gc29tZSBnY2MKKyAgIHZlcnNpb25zLiAqLworI2RlZmluZSBBRERSICI9bSIgKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKQorI2Vsc2UKKyNkZWZpbmUgQUREUiAiK20iICgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikKKyNlbmRpZgogCiAvKioKICAqIHNldF9iaXQgLSBBdG9taWNhbGx5IHNldCBhIGJpdCBpbiBtZW1vcnkKQEAgLTIzLDcgKzI5LDcgQEAKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKIAkJImJ0c2wgJTEsJTAiCi0JCToiK20iIChBRERSKQorCQk6QUREUgogCQk6ImRJciIgKG5yKSA6ICJtZW1vcnkiKTsKIH0KIApAQCAtNDAsNyArNDYsNyBAQAogewogCV9fYXNtX18gdm9sYXRpbGUoCiAJCSJidHNsICUxLCUwIgotCQk6IittIiAoQUREUikKKwkJOkFERFIKIAkJOiJkSXIiIChucikgOiAibWVtb3J5Iik7CiB9CiAKQEAgLTU4LDcgKzY0LDcgQEAKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKIAkJImJ0cmwgJTEsJTAiCi0JCToiK20iIChBRERSKQorCQk6QUREUgogCQk6ImRJciIgKG5yKSk7CiB9CiAKQEAgLTY2LDcgKzcyLDcgQEAKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJImJ0cmwgJTEsJTAiCi0JCToiK20iIChBRERSKQorCQk6QUREUgogCQk6ImRJciIgKG5yKSk7CiB9CiAKQEAgLTg2LDcgKzkyLDcgQEAKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJImJ0Y2wgJTEsJTAiCi0JCToiK20iIChBRERSKQorCQk6QUREUgogCQk6ImRJciIgKG5yKSk7CiB9CiAKQEAgLTEwMyw3ICsxMDksNyBAQAogewogCV9fYXNtX18gX192b2xhdGlsZV9fKCBMT0NLX1BSRUZJWAogCQkiYnRjbCAlMSwlMCIKLQkJOiIrbSIgKEFERFIpCisJCTpBRERSCiAJCToiZElyIiAobnIpKTsKIH0KIApAQCAtMTIxLDcgKzEyNyw3IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKIAkJImJ0c2wgJTIsJTFcblx0c2JibCAlMCwlMCIKLQkJOiI9ciIgKG9sZGJpdCksIittIiAoQUREUikKKwkJOiI9ciIgKG9sZGJpdCksQUREUgogCQk6ImRJciIgKG5yKSA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gb2xkYml0OwogfQpAQCAtMTQxLDcgKzE0Nyw3IEBACiAKIAlfX2FzbV9fKAogCQkiYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgotCQk6Ij1yIiAob2xkYml0KSwiK20iIChBRERSKQorCQk6Ij1yIiAob2xkYml0KSxBRERSCiAJCToiZElyIiAobnIpKTsKIAlyZXR1cm4gb2xkYml0OwogfQpAQCAtMTYwLDcgKzE2Niw3IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKIAkJImJ0cmwgJTIsJTFcblx0c2JibCAlMCwlMCIKLQkJOiI9ciIgKG9sZGJpdCksIittIiAoQUREUikKKwkJOiI9ciIgKG9sZGJpdCksQUREUgogCQk6ImRJciIgKG5yKSA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gb2xkYml0OwogfQpAQCAtMTgwLDcgKzE4Niw3IEBACiAKIAlfX2FzbV9fKAogCQkiYnRybCAlMiwlMVxuXHRzYmJsICUwLCUwIgotCQk6Ij1yIiAob2xkYml0KSwiK20iIChBRERSKQorCQk6Ij1yIiAob2xkYml0KSxBRERSCiAJCToiZElyIiAobnIpKTsKIAlyZXR1cm4gb2xkYml0OwogfQpAQCAtMTkyLDcgKzE5OCw3IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJImJ0Y2wgJTIsJTFcblx0c2JibCAlMCwlMCIKLQkJOiI9ciIgKG9sZGJpdCksIittIiAoQUREUikKKwkJOiI9ciIgKG9sZGJpdCksQUREUgogCQk6ImRJciIgKG5yKSA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gb2xkYml0OwogfQpAQCAtMjExLDcgKzIxNyw3IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKIAkJImJ0Y2wgJTIsJTFcblx0c2JibCAlMCwlMCIKLQkJOiI9ciIgKG9sZGJpdCksIittIiAoQUREUikKKwkJOiI9ciIgKG9sZGJpdCksQUREUgogCQk6ImRJciIgKG5yKSA6ICJtZW1vcnkiKTsKIAlyZXR1cm4gb2xkYml0OwogfQpAQCAtMjM3LDcgKzI0Myw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJidGwgJTIsJTFcblx0c2JibCAlMCwlMCIKIAkJOiI9ciIgKG9sZGJpdCkKLQkJOiJtIiAoQUREUiksImRJciIgKG5yKSk7CisJCToibSIgKCoodm9sYXRpbGUgbG9uZyAqKWFkZHIpLCJkSXIiIChucikpOwogCXJldHVybiBvbGRiaXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9idWcuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9idWcuaAppbmRleCA4MGFjMWZlLi42ODI2MDY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2J1Zy5oCkBAIC0xLDMwICsxLDMwIEBACiAjaWZuZGVmIF9fQVNNX1g4NjY0X0JVR19ICiAjZGVmaW5lIF9fQVNNX1g4NjY0X0JVR19IIDEKIAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgotCi0vKgotICogVGVsbCB0aGUgdXNlciB0aGVyZSBpcyBzb21lIHByb2JsZW0uICBUaGUgZXhjZXB0aW9uIGhhbmRsZXIgZGVjb2RlcyAKLSAqIHRoaXMgZnJhbWUuCi0gKi8KLXN0cnVjdCBidWdfZnJhbWUgewotCXVuc2lnbmVkIGNoYXIgdWQyWzJdOwotCXVuc2lnbmVkIGNoYXIgcHVzaDsKLQlzaWduZWQgaW50IGZpbGVuYW1lOwotCXVuc2lnbmVkIGNoYXIgcmV0OwotCXVuc2lnbmVkIHNob3J0IGxpbmU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiAjaWZkZWYgQ09ORklHX0JVRwogI2RlZmluZSBIQVZFX0FSQ0hfQlVHCi0vKiBXZSB0dXJuIHRoZSBidWcgZnJhbWUgaW50byB2YWxpZCBpbnN0cnVjdGlvbnMgdG8gbm90IGNvbmZ1c2UKLSAgIHRoZSBkaXNhc3NlbWJsZXIuIFRoYW5rcyB0byBKYW4gQmV1bGljaCAmIFN1cmVzaCBTaWRkaGEKLSAgIGZvciBuaWNlIGluc3RydWN0aW9uIHNlbGVjdGlvbi4KLSAgIFRoZSBtYWdpYyBudW1iZXJzIGdlbmVyYXRlIG1vdiAkNjRiaXRpbW0sJWVheCA7IHJldCAkb2Zmc2V0LiAqLwotI2RlZmluZSBCVUcoKSAJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCQkJCVwKLQkidWQyIDsgcHVzaHEgJCVjMSA7IHJldCAkJWMwIiA6OiAJCQkJXAotCQkgICAgICJpIihfX0xJTkVfXyksICJpIiAoX19GSUxFX18pKQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKKyNkZWZpbmUgQlVHKCkJCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWFzbSB2b2xhdGlsZSgiMTpcdHVkMlxuIgkJCQlcCisJCQkgICAgICIucHVzaHNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcbiIJCVwKKwkJCSAgICAgIjI6XHQucXVhZCAxYiwgJWMwXG4iCQkJXAorCQkJICAgICAiXHQud29yZCAlYzEsIDBcbiIJCQkJXAorCQkJICAgICAiXHQub3JnIDJiKyVjMlxuIgkJCQlcCisJCQkgICAgICIucG9wc2VjdGlvbiIJCQkJXAorCQkJICAgICA6IDogImkiIChfX0ZJTEVfXyksICJpIiAoX19MSU5FX18pLAlcCisJCQkgICAgICAgICJpIiAoc2l6ZW9mKHN0cnVjdCBidWdfZW50cnkpKSk7CVwKKwkJZm9yKDs7KSA7CQkJCQkJXAorCX0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIEJVRygpCQkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlhc20gdm9sYXRpbGUoInVkMiIpOwkJCQkJXAorCQlmb3IoOzspIDsJCQkJCQlcCisJfSB3aGlsZSgwKQorI2VuZGlmCisKIHZvaWQgb3V0X29mX2xpbmVfYnVnKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXRfb2ZfbGluZV9idWcodm9pZCkgeyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlZmx1c2guaAppbmRleCBkMzJmN2Y1Li5hYjFjYjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZWZsdXNoLmgKQEAgLTcsNiArNyw3IEBACiAvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIGludGVsLiAqLwogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaAppbmRleCBiZTllYzY4Li40OWRiYWIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaApAQCAtNjMsNiArNjMsOSBAQAogCXJldHVybiAoZG1hX2FkZHIgPT0gYmFkX2RtYV9hZGRyZXNzKTsKIH0KIAorI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCisjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCisKIGV4dGVybiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApOwogZXh0ZXJuIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvaW9jdGxzLmgKaW5kZXggNjJjYWY4Yi4uM2ZjMGIxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2lvY3Rscy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pb2N0bHMuaApAQCAtNDYsNiArNDYsMTAgQEAKICNkZWZpbmUgVElPQ1NCUksJMHg1NDI3ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLwogI2RlZmluZSBUSU9DQ0JSSwkweDU0MjggIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIFRJT0NHU0lECTB4NTQyOSAgLyogUmV0dXJuIHRoZSBzZXNzaW9uIElEIG9mIEZEICovCisjZGVmaW5lIFRDR0VUUzIJCV9JT1IoJ1QnLDB4MkEsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTMgkJX0lPVygnVCcsMHgyQiwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFNXMglfSU9XKCdUJywweDJDLCBzdHJ1Y3QgdGVybWlvczIpCisjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCiAjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tc3IuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tc3IuaAppbmRleCA5NTI3ODNkLi4zMjI3YmM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbXNyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21zci5oCkBAIC0xODksNiArMTg5LDcgQEAKIAogI2RlZmluZSBNU1JfSUEzMl9QRVJGQ1RSMCAgICAgIDB4YzEKICNkZWZpbmUgTVNSX0lBMzJfUEVSRkNUUjEgICAgICAweGMyCisjZGVmaW5lIE1TUl9GU0JfRlJFUQkJMHhjZAogCiAjZGVmaW5lIE1TUl9NVFJSY2FwCQkweDBmZQogI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1JfQ1RMICAgICAgICAweDExOQpAQCAtMzExLDYgKzMxMiw5IEBACiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZfU1RBVFVTCQkweDE5OAogI2RlZmluZSBNU1JfSUEzMl9QRVJGX0NUTAkJMHgxOTkKIAorI2RlZmluZSBNU1JfSUEzMl9NUEVSRgkJCTB4RTcKKyNkZWZpbmUgTVNSX0lBMzJfQVBFUkYJCQkweEU4CisKICNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fQ09OVFJPTAkJMHgxOWEKICNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fSU5URVJSVVBUCTB4MTliCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX1NUQVRVUwkJMHgxOWMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3Rlcm1iaXRzLmgKaW5kZXggYmQ5NTA5NC4uNmNmYzNiYjEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdGVybWJpdHMuaApAQCAtMTcsNiArMTcsMjggQEAKIAljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KIH07CiAKK3N0cnVjdCB0ZXJtaW9zMiB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCitzdHJ1Y3Qga3Rlcm1pb3MgeworCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCisJY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCisJY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCisJc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCisJc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworfTsKKwogLyogY19jYyBjaGFyYWN0ZXJzICovCiAjZGVmaW5lIFZJTlRSIDAKICNkZWZpbmUgVlFVSVQgMQpAQCAtMTE4LDYgKzE0MCw3IEBACiAjZGVmaW5lIEhVUENMCTAwMDIwMDAKICNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAKICNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCisjZGVmaW5lCSAgIEJPVEhFUiAwMDEwMDAwCQkvKiBub24gc3RhbmRhcmQgcmF0ZSAqLwogI2RlZmluZSAgICBCNTc2MDAgMDAxMDAwMQogI2RlZmluZSAgIEIxMTUyMDAgMDAxMDAwMgogI2RlZmluZSAgIEIyMzA0MDAgMDAxMDAwMwpAQCAtMTMzLDEwICsxNTYsMTIgQEAKICNkZWZpbmUgIEIzMDAwMDAwIDAwMTAwMTUKICNkZWZpbmUgIEIzNTAwMDAwIDAwMTAwMTYKICNkZWZpbmUgIEI0MDAwMDAwIDAwMTAwMTcKLSNkZWZpbmUgQ0lCQVVECSAgMDAyMDAzNjAwMDAwCS8qIGlucHV0IGJhdWQgcmF0ZSAobm90IHVzZWQpICovCisjZGVmaW5lIENJQkFVRAkgIDAwMjAwMzYwMDAwMAkvKiBpbnB1dCBiYXVkIHJhdGUgKi8KICNkZWZpbmUgQ01TUEFSCSAgMDEwMDAwMDAwMDAwCQkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCiAjZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJCS8qIGZsb3cgY29udHJvbCAqLwogCisjZGVmaW5lIElCU0hJRlQJICA4CQkvKiBTaGlmdCBmcm9tIENCQVVEIHRvIENJQkFVRCAqLworCiAvKiBjX2xmbGFnIGJpdHMgKi8KICNkZWZpbmUgSVNJRwkwMDAwMDAxCiAjZGVmaW5lIElDQU5PTgkwMDAwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3Rlcm1pb3MuaAppbmRleCAwNDFhOTFmLi40NDNiMjI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdGVybWlvcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC90ZXJtaW9zLmgKQEAgLTk4LDggKzk4LDEwIEBACiAJY29weV90b191c2VyKCh0ZXJtaW8pLT5jX2NjLCAodGVybWlvcyktPmNfY2MsIE5DQyk7IFwKIH0pCiAKLSNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKGssIHUpIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpCi0jZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKKyNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKGssIHUpIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvczIpKQorI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3ModSwgaykgY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvczIpKQorI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3NfMShrLCB1KSBjb3B5X2Zyb21fdXNlcihrLCB1LCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3NfMSh1LCBrKSBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdGhyZWFkX2luZm8uaAppbmRleCA3ODdhMDgxLi43NGE2Yzc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdGhyZWFkX2luZm8uaApAQCAtMTIyLDYgKzEyMiw3IEBACiAjZGVmaW5lIFRJRl9NRU1ESUUJCTIwCiAjZGVmaW5lIFRJRl9ERUJVRwkJMjEJLyogdXNlcyBkZWJ1ZyByZWdpc3RlcnMgKi8KICNkZWZpbmUgVElGX0lPX0JJVE1BUAkJMjIJLyogdXNlcyBJL08gYml0bWFwICovCisjZGVmaW5lIFRJRl9GUkVFWkUJCTIzCS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKQEAgLTEzNyw2ICsxMzgsNyBAQAogI2RlZmluZSBfVElGX0FCSV9QRU5ESU5HCSgxPDxUSUZfQUJJX1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfREVCVUcJCSgxPDxUSUZfREVCVUcpCiAjZGVmaW5lIF9USUZfSU9fQklUTUFQCQkoMTw8VElGX0lPX0JJVE1BUCkKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAjZGVmaW5lIF9USUZfV09SS19NQVNLIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3RvcG9sb2d5LmgKaW5kZXggNWM4ZjQ5Mi4uMmZhY2VjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3RvcG9sb2d5LmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIAkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRQlcCiAJCQkJfCBTRF9CQUxBTkNFX0ZPUksJXAogCQkJCXwgU0RfQkFMQU5DRV9FWEVDCVwKKwkJCQl8IFNEX1NFUklBTElaRQkJXAogCQkJCXwgU0RfV0FLRV9CQUxBTkNFLAlcCiAJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAogCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3VhY2Nlc3MuaAppbmRleCBkNWRiYzg3Li5jMGVhYzUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCSAgY2FzZSAxOiBfX3B1dF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImIiLCJiIiwiaXEiLC1FRkFVTFQpOyBicmVhaztcCiAJICBjYXNlIDI6IF9fcHV0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwidyIsInciLCJpciIsLUVGQVVMVCk7IGJyZWFrO1wKIAkgIGNhc2UgNDogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJsIiwiayIsImlyIiwtRUZBVUxUKTsgYnJlYWs7XAotCSAgY2FzZSA4OiBfX3B1dF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInEiLCIiLCJpciIsLUVGQVVMVCk7IGJyZWFrO1wKKwkgIGNhc2UgODogX19wdXRfdXNlcl9hc20oeCxwdHIscmV0dmFsLCJxIiwiIiwiWnIiLC1FRkFVTFQpOyBicmVhaztcCiAJICBkZWZhdWx0OiBfX3B1dF91c2VyX2JhZCgpOwkJCQkJXAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdW53aW5kLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdW53aW5kLmgKaW5kZXggMmY2MzQ5ZS4uMDI3MTBmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3Vud2luZC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bndpbmQuaApAQCAtMSwxMDAgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1g4Nl82NF9VTldJTkRfSAogI2RlZmluZSBfQVNNX1g4Nl82NF9VTldJTkRfSAogCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgTm92ZWxsLCBJbmMuCi0gKglKYW4gQmV1bGljaCA8amJldWxpY2hAbm92ZWxsLmNvbT4KLSAqIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHUEwuCi0gKi8KLQotI2lmZGVmIENPTkZJR19TVEFDS19VTldJTkQKLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+Ci0KLXN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbwotewotCXN0cnVjdCBwdF9yZWdzIHJlZ3M7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCXVuc2lnbmVkIGNhbGxfZnJhbWU6MTsKLX07Ci0KLSNkZWZpbmUgVU5XX1BDKGZyYW1lKSAgICAgICAgKGZyYW1lKS0+cmVncy5yaXAKLSNkZWZpbmUgVU5XX1NQKGZyYW1lKSAgICAgICAgKGZyYW1lKS0+cmVncy5yc3AKLSNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgotI2RlZmluZSBVTldfRlAoZnJhbWUpICAgICAgICAoZnJhbWUpLT5yZWdzLnJicAotI2RlZmluZSBGUkFNRV9SRVRBRERSX09GRlNFVCA4Ci0jZGVmaW5lIEZSQU1FX0xJTktfT0ZGU0VUICAgIDAKLSNkZWZpbmUgU1RBQ0tfQk9UVE9NKHRzaykgICAgKCgodHNrKS0+dGhyZWFkLnJzcDAgLSAxKSAmIH4oVEhSRUFEX1NJWkUgLSAxKSkKLSNkZWZpbmUgU1RBQ0tfVE9QKHRzaykgICAgICAgKCh0c2spLT50aHJlYWQucnNwMCkKLSNlbmRpZgotLyogTWlnaHQgbmVlZCB0byBhY2NvdW50IGZvciB0aGUgc3BlY2lhbCBleGNlcHRpb24gYW5kIGludGVycnVwdCBoYW5kbGluZwotICAgc3RhY2tzIGhlcmUsIHNpbmNlIG5vcm1hbGx5Ci0JRVhDRVBUSU9OX1NUQUNLX09SREVSIDwgVEhSRUFEX09SREVSIDwgSVJRU1RBQ0tfT1JERVIsCi0gICBidXQgdGhlIGNvbnN0cnVjdCBpcyBuZWVkZWQgb25seSBmb3IgZ2V0dGluZyBhY3Jvc3MgdGhlIHN0YWNrIHN3aXRjaCB0bwotICAgdGhlIGludGVycnVwdCBzdGFjayAtIHRodXMgY29uc2lkZXJpbmcgdGhlIElSUSBzdGFjayBpdHNlbGYgaXMgdW5uZWNlc3NhcnksCi0gICBhbmQgdGhlIG92ZXJoZWFkIG9mIGNvbXBhcmluZyBhZ2FpbnN0IGFsbCBleGNlcHRpb24gaGFuZGxpbmcgc3RhY2tzIHNlZW1zCi0gICBub3QgZGVzaXJhYmxlLiAqLwotI2RlZmluZSBTVEFDS19MSU1JVChwdHIpICAgICAoKChwdHIpIC0gMSkgJiB+KFRIUkVBRF9TSVpFIC0gMSkpCi0KLSNkZWZpbmUgVU5XX1JFR0lTVEVSX0lORk8gXAotCVBUUkVHU19JTkZPKHJheCksIFwKLQlQVFJFR1NfSU5GTyhyZHgpLCBcCi0JUFRSRUdTX0lORk8ocmN4KSwgXAotCVBUUkVHU19JTkZPKHJieCksIFwKLQlQVFJFR1NfSU5GTyhyc2kpLCBcCi0JUFRSRUdTX0lORk8ocmRpKSwgXAotCVBUUkVHU19JTkZPKHJicCksIFwKLQlQVFJFR1NfSU5GTyhyc3ApLCBcCi0JUFRSRUdTX0lORk8ocjgpLCBcCi0JUFRSRUdTX0lORk8ocjkpLCBcCi0JUFRSRUdTX0lORk8ocjEwKSwgXAotCVBUUkVHU19JTkZPKHIxMSksIFwKLQlQVFJFR1NfSU5GTyhyMTIpLCBcCi0JUFRSRUdTX0lORk8ocjEzKSwgXAotCVBUUkVHU19JTkZPKHIxNCksIFwKLQlQVFJFR1NfSU5GTyhyMTUpLCBcCi0JUFRSRUdTX0lORk8ocmlwKQotCi0jZGVmaW5lIFVOV19ERUZBVUxUX1JBKHJhSXRlbSwgZGF0YUFsaWduKSBcCi0JKChyYUl0ZW0pLndoZXJlID09IE1lbW9yeSAmJiBcCi0JICEoKHJhSXRlbSkudmFsdWUgKiAoZGF0YUFsaWduKSArIDgpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF91bndfaW5pdF9mcmFtZV9pbmZvKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypjb25zdCovIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWluZm8tPnJlZ3MgPSAqcmVnczsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfdW53X2luaXRfYmxvY2tlZChzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8pCi17Ci0JZXh0ZXJuIGNvbnN0IGNoYXIgdGhyZWFkX3JldHVybltdOwotCi0JbWVtc2V0KCZpbmZvLT5yZWdzLCAwLCBzaXplb2YoaW5mby0+cmVncykpOwotCWluZm8tPnJlZ3MucmlwID0gKHVuc2lnbmVkIGxvbmcpdGhyZWFkX3JldHVybjsKLQlpbmZvLT5yZWdzLmNzID0gX19LRVJORUxfQ1M7Ci0JX19nZXRfdXNlcihpbmZvLT5yZWdzLnJicCwgKHVuc2lnbmVkIGxvbmcgKilpbmZvLT50YXNrLT50aHJlYWQucnNwKTsKLQlpbmZvLT5yZWdzLnJzcCA9IGluZm8tPnRhc2stPnRocmVhZC5yc3A7Ci0JaW5mby0+cmVncy5zcyA9IF9fS0VSTkVMX0RTOwotfQotCi1leHRlcm4gaW50IGFyY2hfdW53aW5kX2luaXRfcnVubmluZyhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmNhbGxiYWNrKShzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKLQotc3RhdGljIGlubGluZSBpbnQgYXJjaF91bndfdXNlcl9tb2RlKGNvbnN0IHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbykKLXsKLQlyZXR1cm4gdXNlcl9tb2RlKCZpbmZvLT5yZWdzKQotCSAgICAgICB8fCAobG9uZylpbmZvLT5yZWdzLnJpcCA+PSAwCi0JICAgICAgIHx8IChpbmZvLT5yZWdzLnJpcCA+PSBWU1lTQ0FMTF9TVEFSVCAmJiBpbmZvLT5yZWdzLnJpcCA8IFZTWVNDQUxMX0VORCkKLQkgICAgICAgfHwgKGxvbmcpaW5mby0+cmVncy5yc3AgPj0gMDsKLX0KLQotI2Vsc2UKLQogI2RlZmluZSBVTldfUEMoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwVUwpCiAjZGVmaW5lIFVOV19TUChmcmFtZSkgKCh2b2lkKShmcmFtZSksIDBVTCkKIApAQCAtMTAzLDYgKzksNCBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYKLQogI2VuZGlmIC8qIF9BU01fWDg2XzY0X1VOV0lORF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvYXNtbWFjcm8uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9hc21tYWNyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTE1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvYXNtbWFjcm8uaApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXh0ZW5zYS9hc21tYWNyby5oCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRlbnNpbGljYSBJbmMuCisgKi8KKworI2lmbmRlZiBfWFRFTlNBX0FTTU1BQ1JPX0gKKyNkZWZpbmUgX1hURU5TQV9BU01NQUNST19ICisKKyNpbmNsdWRlIDxhc20vdmFyaWFudC9jb3JlLmg+CisKKy8qCisgKiBTb21lIGxpdHRsZSBoZWxwZXJzIGZvciBsb29wcy4gVXNlIHplcm8tb3ZlcmhlYWQtbG9vcHMKKyAqIHdoZXJlIGFwcGxpY2FibGUgYW5kIGlmIHN1cHBvcnRlZCBieSB0aGUgcHJvY2Vzc29yLgorICoKKyAqIF9fbG9vcGkgYXIsIGF0LCBzaXplLCBpbmMKKyAqICAgICAgICAgYXIJcmVnaXN0ZXIgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3RhcnQgYWRkcmVzcworICoJICAgYXQJc2NyYXRjaCByZWdpc3RlciB1c2VkIGJ5IG1hY3JvCisgKgkgICBzaXplCXNpemUgaW1tZWRpYXRlIHZhbHVlCisgKgkgICBpbmMJaW5jcmVtZW50CisgKgorICogX19sb29wcyBhciwgYXMsIGF0LCBpbmNfbG9nMlssIG1hc2tfbG9nMl1bLCBjb25kXVssIG5jb25kXQorICoJICAgYXIJcmVnaXN0ZXIgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3RhcnQgYWRkcmVzcworICoJICAgYXMJcmVnaXN0ZXIgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc2l6ZQorICoJICAgYXQJc2NyYXRjaCByZWdpc3RlciB1c2UgYnkgbWFjcm8KKyAqCSAgIGluY19sb2cyCWluY3JlbWVudCBbaW4gbG9nMl0KKyAqCSAgIG1hc2tfbG9nMgltYXNrIFtpbiBsb2cyXQorICoJICAgY29uZAkJdHJ1ZSBjb25kaXRpb24gKHVzZWQgaW4gbG9vcCdjb25kJykKKyAqCSAgIG5jb25kCWZhbHNlIGNvbmRpdGlvbiAodXNlZCBpbiBiJ25jb25kJykKKyAqCisgKiBfX2xvb3AgIGFzCisgKgkgICByZXN0YXJ0IGxvb3AuICdhcycgcmVnaXN0ZXIgbXVzdCBub3QgaGF2ZSBiZWVuIG1vZGlmaWVkIQorICoKKyAqIF9fZW5kbGEgYXIsIGF0LCBpbmNyCisgKgkgICBhcglzdGFydCBhZGRyZXNzIChtb2RpZmllZCkKKyAqCSAgIGFzCXNjcmF0Y2ggcmVnaXN0ZXIgdXNlZCBieSBtYWNybworICoJICAgaW5jCWluY3JlbWVudAorICovCisKKy8qCisgKiBsb29wIGZvciBnaXZlbiBzaXplIGFzIGltbWVkaWF0ZQorICovCisKKwkubWFjcm8JX19sb29waSBhciwgYXQsIHNpemUsIGluY3IKKworI2lmIFhDSEFMX0hBVkVfTE9PUFMKKwkJbW92aQlcYXQsICgoXHNpemUgKyBcaW5jciAtIDEpIC8gKFxpbmNyKSkKKwkJbG9vcAlcYXQsIDk5ZgorI2Vsc2UKKwkJYWRkaQlcYXQsIFxhciwgXHNpemUKKwkJOTg6CisjZW5kaWYKKworCS5lbmRtCisKKy8qCisgKiBsb29wIGZvciBnaXZlbiBzaXplIGluIHJlZ2lzdGVyCisgKi8KKworCS5tYWNybwlfX2xvb3BzCWFyLCBhcywgYXQsIGluY3JfbG9nMiwgbWFza19sb2cyLCBjb25kLCBuY29uZAorCisjaWYgWENIQUxfSEFWRV9MT09QUworCQkuaWZndCBcaW5jcl9sb2cyIC0gMQorCQkJYWRkaQlcYXQsIFxhcywgKDEgPDwgXGluY3JfbG9nMikgLSAxCisJCQkuaWZuYyBcbWFza19sb2cyLAorCQkJCWV4dHVpCVxhdCwgXGF0LCBcaW5jcl9sb2cyLCBcbWFza19sb2cyCisJCQkuZWxzZQorCQkJCXNybGkJXGF0LCBcYXQsIFxpbmNyX2xvZzIKKwkJCS5lbmRpZgorCQkuZW5kaWYKKwkJbG9vcFxjb25kCVxhdCwgOTlmCisjZWxzZQorCQkuaWZuYyBcbWFza19sb2cyLAorCQkJZXh0dWkJXGF0LCBcYXMsIFxpbmNyX2xvZzIsIFxtYXNrX2xvZzIKKwkJLmVsc2UKKwkJCS5pZm5jIFxuY29uZCwKKwkJCQlzcmxpCVxhdCwgXGFzLCBcaW5jcl9sb2cyCisJCQkuZW5kaWYKKwkJLmVuZGlmCisJCS5pZm5jIFxuY29uZCwKKwkJCWJcbmNvbmQJXGF0LCA5OWYKKworCQkuZW5kaWYKKwkJLmlmbmMgXG1hc2tfbG9nMiwKKwkJCXNsbGkJXGF0LCBcYXQsIFxpbmNyX2xvZzIKKwkJCWFkZAlcYXQsIFxhciwgXGF0CisJCS5lbHNlCisJCQlhZGQJXGF0LCBcYXIsIFxhcworCQkuZW5kaWYKKyNlbmRpZgorCQk5ODoKKworCS5lbmRtCisKKy8qCisgKiBsb29wIGZyb20gYXIgdG8gYXgKKyAqLworCisJLm1hY3JvCV9fbG9vcHQJYXIsIGFzLCBhdCwgaW5jcl9sb2cyCisKKyNpZiBYQ0hBTF9IQVZFX0xPT1BTCisJCXN1YglcYXQsIFxhcywgXGFyCisJCS5pZmd0CVxpbmNyX2xvZzIgLSAxCisJCQlhZGRpCVxhdCwgXGF0LCAoMSA8PCBcaW5jcl9sb2cyKSAtIDEKKwkJCXNybGkJXGF0LCBcYXQsIFxpbmNyX2xvZzIKKwkJLmVuZGlmCisJCWxvb3AJXGF0LCA5OWYKKyNlbHNlCisJCTk4OgorI2VuZGlmCisKKwkuZW5kbQorCisvKgorICogcmVzdGFydCBsb29wLiByZWdpc3RlcnMgbXVzdCBiZSB1bmNoYW5nZWQKKyAqLworCisJLm1hY3JvCV9fbG9vcAlhcworCisjaWYgWENIQUxfSEFWRV9MT09QUworCQlsb29wCVxhcywgOTlmCisjZWxzZQorCQk5ODoKKyNlbmRpZgorCisJLmVuZG0KKworLyoKKyAqIGVuZCBvZiBsb29wIHdpdGggbm8gaW5jcmVtZW50IG9mIHRoZSBhZGRyZXNzLgorICovCisKKwkubWFjcm8JX19lbmRsCWFyLCBhcworI2lmICFYQ0hBTF9IQVZFX0xPT1BTCisJCWJsdHUJXGFyLCBcYXMsIDk4YgorI2VuZGlmCisJCTk5OgorCS5lbmRtCisKKy8qCisgKiBlbmQgb2YgbG9vcCB3aXRoIGluY3JlbWVudCBvZiB0aGUgYWRkcmVzcy4KKyAqLworCisJLm1hY3JvCV9fZW5kbGEJYXIsIGFzLCBpbmNyCisJCWFkZGkJXGFyLCBcYXIsIFxpbmNyCisJCV9fZW5kbAlcYXIgXGFzCisJLmVuZG0KKworCisjZW5kaWYgLyogX1hURU5TQV9BU01NQUNST19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvYnVnLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvYnVnLmgKaW5kZXggNTY3MDM2NS4uM2U1MmQ3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9idWcuaApAQCAtMTMsMjkgKzEzLDYgQEAKICNpZm5kZWYgX1hURU5TQV9CVUdfSAogI2RlZmluZSBfWFRFTlNBX0JVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KLQotI2RlZmluZSBJTEwJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuYnl0ZSAwLDAsMFxuIikKLQotI2lmZGVmIENPTkZJR19LQUxMU1lNUwotIyBkZWZpbmUgQlVHKCkgZG8gewkJCQkJCQlcCi0JcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsJCVwKLQlJTEw7CQkJCQkJCQlcCi19IHdoaWxlICgwKQotI2Vsc2UKLSMgZGVmaW5lIEJVRygpIGRvIHsJCQkJCQkJXAotCXByaW50aygia2VybmVsIEJVRyFcbiIpOwkJCQkJXAotICAgICAgCUlMTDsJCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2RlZmluZSBCVUdfT04oY29uZGl0aW9uKSBkbyB7IGlmICh1bmxpa2VseSgoY29uZGl0aW9uKSE9MCkpIEJVRygpOyB9IHdoaWxlKDApCi0jZGVmaW5lIFBBR0VfQlVHKHBhZ2UpIGRvIHsgIEJVRygpOyB9IHdoaWxlICgwKQotI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgZG8gewkJCQkJCSAgIFwKLSAgaWYgKHVubGlrZWx5KChjb25kaXRpb24pIT0wKSkgewkJCQkJICAgXAotICAgIHByaW50ayAoIldhcm5pbmcgaW4gJXMgYXQgJXM6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsgXAotICAgICAgZHVtcF9zdGFjaygpOwkJCQkJCQkgICBcCi0gIH0JCQkJCQkJCQkgICBcCi19IHdoaWxlICgwKQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCiAjZW5kaWYJLyogX1hURU5TQV9CVUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2J5dGVvcmRlci5oCmluZGV4IDBiMTU1MjUuLjBmNTQwYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9ieXRlb3JkZXIuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvYnl0ZW9yZGVyLmgKQEAgLTExLDEwICsxMSw5IEBACiAjaWZuZGVmIF9YVEVOU0FfQllURU9SREVSX0gKICNkZWZpbmUgX1hURU5TQV9CWVRFT1JERVJfSAogCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCi1zdGF0aWMgX19pbmxpbmVfXyBfX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQogewogICAgIF9fdTMyIHJlczsKICAgICAvKiBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBmcm9tIFh0ZW5zYSBJU0EgcmVsZWFzZSAyLzIwMDAgKi8KQEAgLTI5LDcgKzI4LDcgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBfX2NvbnN0X18gX191MTYgX19fYXJjaF9fc3dhYjE2KF9fdTE2IHgpCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTE2IF9fX2FyY2hfX3N3YWIxNihfX3UxNiB4KQogewogICAgIC8qIEdpdmVuIHRoYXQgJ3Nob3J0JyB2YWx1ZXMgYXJlIHNpZ25lZCAoaS5lLiwgY2FuIGJlIG5lZ2F0aXZlKSwKICAgICAgKiB3ZSBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlIHVwcGVyIDE2LWJpdHMgb2YgdGhlIHJlZ2lzdGVyIGFyZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2NhY2hlLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvY2FjaGUuaAppbmRleCAxZTc5YzBlLi4xYzRhNzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvY2FjaGUuaApAQCAtNCw3ICs0LDYgQEAKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiAoQykgMjAwMSAtIDIwMDUgVGVuc2lsaWNhIEluYy4KICAqLwpAQCAtMTIsMjEgKzExLDE0IEBACiAjaWZuZGVmIF9YVEVOU0FfQ0FDSEVfSAogI2RlZmluZSBfWFRFTlNBX0NBQ0hFX0gKIAotI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgorI2luY2x1ZGUgPGFzbS92YXJpYW50L2NvcmUuaD4KIAotI2lmIFhDSEFMX0lDQUNIRV9TSVpFID4gMAotIyBpZiAoWENIQUxfSUNBQ0hFX1NJWkUgJSAoWENIQUxfSUNBQ0hFX0xJTkVTSVpFKlhDSEFMX0lDQUNIRV9XQVlTKjQpKSAhPSAwCi0jICBlcnJvciBjYWNoZSBjb25maWd1cmF0aW9uIG91dHNpZGUgZXhwZWN0ZWQvc3VwcG9ydGVkIHJhbmdlIQotIyBlbmRpZgotI2VuZGlmCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCVhDSEFMX0RDQUNIRV9MSU5FV0lEVEgKKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMJWENIQUxfRENBQ0hFX0xJTkVTSVpFCisjZGVmaW5lIFNNUF9DQUNIRV9CWVRFUwlMMV9DQUNIRV9CWVRFUwogCi0jaWYgWENIQUxfRENBQ0hFX1NJWkUgPiAwCi0jIGlmIChYQ0hBTF9EQ0FDSEVfU0laRSAlIChYQ0hBTF9EQ0FDSEVfTElORVNJWkUqWENIQUxfRENBQ0hFX1dBWVMqNCkpICE9IDAKLSMgIGVycm9yIGNhY2hlIGNvbmZpZ3VyYXRpb24gb3V0c2lkZSBleHBlY3RlZC9zdXBwb3J0ZWQgcmFuZ2UhCi0jIGVuZGlmCi0jZW5kaWYKKyNkZWZpbmUgRENBQ0hFX1dBWV9TSVpFCShYQ0hBTF9EQ0FDSEVfU0laRS9YQ0hBTF9EQ0FDSEVfV0FZUykKKyNkZWZpbmUgSUNBQ0hFX1dBWV9TSVpFCShYQ0hBTF9JQ0FDSEVfU0laRS9YQ0hBTF9JQ0FDSEVfV0FZUykKIAotI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJWENIQUxfQ0FDSEVfTElORVdJRFRIX01BWAotI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkJWENIQUxfQ0FDSEVfTElORVNJWkVfTUFYCiAKICNlbmRpZgkvKiBfWFRFTlNBX0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9jYWNoZWFzbS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2NhY2hlYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyMGE1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jYWNoZWFzbS5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogaW5jbHVkZS9hc20teHRlbnNhL2NhY2hlYXNtLmgKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGVuc2lsaWNhIEluYy4KKyAqLworCisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisKKy8qCisgKiBEZWZpbmUgY2FjaGUgZnVuY3Rpb25zIGFzIG1hY3JvcyBoZXJlIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZAorICogYnkgdGhlIGtlcm5lbCBhbmQgYm9vdCBsb2FkZXIuIFdlIHNob3VsZCBjb25zaWRlciBtb3ZpbmcgdGhlbSB0byBhCisgKiBsaWJyYXJ5IHRoYXQgY2FuIGJlIGxpbmtlZCBieSBib3RoLgorICoKKyAqIExvY2tpbmcKKyAqCisgKiAgIF9fX3VubG9ja19kY2FjaGVfYWxsCisgKiAgIF9fX3VubG9ja19pY2FjaGVfYWxsCisgKgorICogRmx1c2ggYW5kIGludmFsZGF0aW5nCisgKgorICogICBfX19mbHVzaF9pbnZhbGlkYXRlX2RjYWNoZV97YWxsfHJhbmdlfHBhZ2V9CisgKiAgIF9fX2ZsdXNoX2RjYWNoZV97YWxsfHJhbmdlfHBhZ2V9CisgKiAgIF9fX2ludmFsaWRhdGVfZGNhY2hlX3thbGx8cmFuZ2V8cGFnZX0KKyAqICAgX19faW52YWxpZGF0ZV9pY2FjaGVfe2FsbHxyYW5nZXxwYWdlfQorICoKKyAqLworCisJLm1hY3JvCV9fbG9vcF9jYWNoZV9hbGwgYXIgYXQgaW5zbiBzaXplIGxpbmVfd2lkdGgKKworCW1vdmkJXGFyLCAwCisKKwlfX2xvb3BpCVxhciwgXGF0LCBcc2l6ZSwgKDQgPDwgKFxsaW5lX3dpZHRoKSkKKwlcaW5zbglcYXIsIDAgPDwgKFxsaW5lX3dpZHRoKQorCVxpbnNuCVxhciwgMSA8PCAoXGxpbmVfd2lkdGgpCisJXGluc24JXGFyLCAyIDw8IChcbGluZV93aWR0aCkKKwlcaW5zbglcYXIsIDMgPDwgKFxsaW5lX3dpZHRoKQorCV9fZW5kbGEJXGFyLCBcYXQsIDQgPDwgKFxsaW5lX3dpZHRoKQorCisJLmVuZG0KKworCisJLm1hY3JvCV9fbG9vcF9jYWNoZV9yYW5nZSBhciBhcyBhdCBpbnNuIGxpbmVfd2lkdGgKKworCWV4dHVpCVxhdCwgXGFyLCAwLCBcbGluZV93aWR0aAorCWFkZAlcYXMsIFxhcywgXGF0CisKKwlfX2xvb3BzCVxhciwgXGFzLCBcYXQsIFxsaW5lX3dpZHRoCisJXGluc24JXGFyLCAwCisJX19lbmRsYQlcYXIsIFxhdCwgKDEgPDwgKFxsaW5lX3dpZHRoKSkKKworCS5lbmRtCisKKworCS5tYWNybwlfX2xvb3BfY2FjaGVfcGFnZSBhciBhdCBpbnNuIGxpbmVfd2lkdGgKKworCV9fbG9vcGkJXGFyLCBcYXQsIFBBR0VfU0laRSwgNCA8PCAoXGxpbmVfd2lkdGgpCisJXGluc24JXGFyLCAwIDw8IChcbGluZV93aWR0aCkKKwlcaW5zbglcYXIsIDEgPDwgKFxsaW5lX3dpZHRoKQorCVxpbnNuCVxhciwgMiA8PCAoXGxpbmVfd2lkdGgpCisJXGluc24JXGFyLCAzIDw8IChcbGluZV93aWR0aCkKKwlfX2VuZGxhCVxhciwgXGF0LCA0IDw8IChcbGluZV93aWR0aCkKKworCS5lbmRtCisKKworI2lmIFhDSEFMX0RDQUNIRV9MSU5FX0xPQ0tBQkxFCisKKwkubWFjcm8JX19fdW5sb2NrX2RjYWNoZV9hbGwgYXIgYXQKKworCV9fbG9vcF9jYWNoZV9hbGwgXGFyIFxhdCBkaXUgWENIQUxfRENBQ0hFX1NJWkUgWENIQUxfRENBQ0hFX0xJTkVXSURUSAorCisJLmVuZG0KKworI2VuZGlmCisKKyNpZiBYQ0hBTF9JQ0FDSEVfTElORV9MT0NLQUJMRQorCisJLm1hY3JvCV9fX3VubG9ja19pY2FjaGVfYWxsIGFyIGF0CisKKwlfX2xvb3BfY2FjaGVfYWxsIFxhciBcYXQgaWl1IFhDSEFMX0lDQUNIRV9TSVpFIFhDSEFMX0lDQUNIRV9MSU5FV0lEVEgKKworCS5lbmRtCisjZW5kaWYKKworCS5tYWNybwlfX19mbHVzaF9pbnZhbGlkYXRlX2RjYWNoZV9hbGwgYXIgYXQKKworCV9fbG9vcF9jYWNoZV9hbGwgXGFyIFxhdCBkaXdiaSBYQ0hBTF9EQ0FDSEVfU0laRSBYQ0hBTF9EQ0FDSEVfTElORVdJRFRICisKKwkuZW5kbQorCisKKwkubWFjcm8JX19fZmx1c2hfZGNhY2hlX2FsbCBhciBhdAorCisJX19sb29wX2NhY2hlX2FsbCBcYXIgXGF0IGRpd2IgWENIQUxfRENBQ0hFX1NJWkUgWENIQUxfRENBQ0hFX0xJTkVXSURUSAorCisJLmVuZG0KKworCisJLm1hY3JvCV9fX2ludmFsaWRhdGVfZGNhY2hlX2FsbCBhciBhdAorCisJX19sb29wX2NhY2hlX2FsbCBcYXIgXGF0IGRpaSBfX3N0cmluZ2lmeShEQ0FDSEVfV0FZX1NJWkUpIFwKKwkJCSBYQ0hBTF9EQ0FDSEVfTElORVdJRFRICisKKwkuZW5kbQorCisKKwkubWFjcm8JX19faW52YWxpZGF0ZV9pY2FjaGVfYWxsIGFyIGF0CisKKwlfX2xvb3BfY2FjaGVfYWxsIFxhciBcYXQgaWlpIF9fc3RyaW5naWZ5KElDQUNIRV9XQVlfU0laRSkgXAorCQkJIFhDSEFMX0lDQUNIRV9MSU5FV0lEVEgKKworCS5lbmRtCisKKworCisJLm1hY3JvCV9fX2ZsdXNoX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlIGFyIGFzIGF0CisKKwlfX2xvb3BfY2FjaGVfcmFuZ2UgXGFyIFxhcyBcYXQgZGh3YmkgWENIQUxfRENBQ0hFX0xJTkVXSURUSAorCisJLmVuZG0KKworCisJLm1hY3JvCV9fX2ZsdXNoX2RjYWNoZV9yYW5nZSBhciBhcyBhdAorCisJX19sb29wX2NhY2hlX3JhbmdlIFxhciBcYXMgXGF0IGRod2IgWENIQUxfRENBQ0hFX0xJTkVXSURUSAorCisJLmVuZG0KKworCisJLm1hY3JvCV9fX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlIGFyIGFzIGF0CisKKwlfX2xvb3BfY2FjaGVfcmFuZ2UgXGFyIFxhcyBcYXQgZGhpIFhDSEFMX0RDQUNIRV9MSU5FV0lEVEgKKworCS5lbmRtCisKKworCS5tYWNybwlfX19pbnZhbGlkYXRlX2ljYWNoZV9yYW5nZSBhciBhcyBhdAorCisJX19sb29wX2NhY2hlX3JhbmdlIFxhciBcYXMgXGF0IGloaSBYQ0hBTF9JQ0FDSEVfTElORVdJRFRICisKKwkuZW5kbQorCisKKworCS5tYWNybwlfX19mbHVzaF9pbnZhbGlkYXRlX2RjYWNoZV9wYWdlIGFyIGFzCisKKwlfX2xvb3BfY2FjaGVfcGFnZSBcYXIgXGFzIGRod2JpIFhDSEFMX0RDQUNIRV9MSU5FV0lEVEgKKworCS5lbmRtCisKKworCS5tYWNybyBfX19mbHVzaF9kY2FjaGVfcGFnZSBhciBhcworCisJX19sb29wX2NhY2hlX3BhZ2UgXGFyIFxhcyBkaHdiIFhDSEFMX0RDQUNIRV9MSU5FV0lEVEgKKworCS5lbmRtCisKKworCS5tYWNybwlfX19pbnZhbGlkYXRlX2RjYWNoZV9wYWdlIGFyIGFzCisKKwlfX2xvb3BfY2FjaGVfcGFnZSBcYXIgXGFzIGRoaSBYQ0hBTF9EQ0FDSEVfTElORVdJRFRICisKKwkuZW5kbQorCisKKwkubWFjcm8JX19faW52YWxpZGF0ZV9pY2FjaGVfcGFnZSBhciBhcworCisJX19sb29wX2NhY2hlX3BhZ2UgXGFyIFxhcyBpaGkgWENIQUxfSUNBQ0hFX0xJTkVXSURUSAorCisJLmVuZG0KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jYWNoZWZsdXNoLmgKaW5kZXggNDRhMzZlMC4uMjJlZjkwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvY2FjaGVmbHVzaC5oCkBAIC01LDcgKzUsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiAoQykgMjAwMSAtIDIwMDUgVGVuc2lsaWNhIEluYy4KKyAqIChDKSAyMDAxIC0gMjAwNiBUZW5zaWxpY2EgSW5jLgogICovCiAKICNpZm5kZWYgX1hURU5TQV9DQUNIRUZMVVNIX0gKQEAgLTc1LDYgKzc1LDcgQEAKIAogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJX19mbHVzaF9pbnZhbGlkYXRlX2NhY2hlX2FsbCgpOwogI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCV9fZmx1c2hfaW52YWxpZGF0ZV9jYWNoZV9hbGwoKTsKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKQkJX19mbHVzaF9pbnZhbGlkYXRlX2NhY2hlX2FsbCgpOwogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsZW5kKQlfX2ZsdXNoX2ludmFsaWRhdGVfY2FjaGVfYWxsKCk7CiAjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCxlbmQpCV9fZmx1c2hfaW52YWxpZGF0ZV9jYWNoZV9hbGwoKTsKQEAgLTg4LDYgKzg5LDcgQEAKIAogI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQkJZG8geyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsZW5kKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LGVuZCkJCQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jaGVja3N1bS5oCmluZGV4IDU0MzVhZmYuLjIzNTM0YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jaGVja3N1bS5oCkBAIC0xMiw3ICsxMiw3IEBACiAjZGVmaW5lIF9YVEVOU0FfQ0hFQ0tTVU1fSAogCiAjaW5jbHVkZSA8bGludXgvaW42Lmg+Ci0jaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9jb3JlLmg+CisjaW5jbHVkZSA8YXNtL3ZhcmlhbnQvY29yZS5oPgogCiAvKgogICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvY29wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jb3Byb2Nlc3Nvci5oCmluZGV4IDUwOTMwMzQuLmJkMDllYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9jb3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9jb3Byb2Nlc3Nvci5oCkBAIC0xMSw3ICsxMSwxNiBAQAogI2lmbmRlZiBfWFRFTlNBX0NPUFJPQ0VTU09SX0gKICNkZWZpbmUgX1hURU5TQV9DT1BST0NFU1NPUl9ICiAKLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vdmFyaWFudC9jb3JlLmg+CisjaW5jbHVkZSA8YXNtL3ZhcmlhbnQvdGllLmg+CisKKyNpZiAhWENIQUxfSEFWRV9DUAorCisjZGVmaW5lIFhURU5TQV9DUF9FWFRSQV9PRkZTRVQgCTAKKyNkZWZpbmUgWFRFTlNBX0NQX0VYVFJBX0FMSUdOCTEJLyogbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KKyNkZWZpbmUgWFRFTlNBX0NQX0VYVFJBX1NJWkUJMAorCisjZWxzZQogCiAjZGVmaW5lIFhUT0ZTKGxhc3Rfc3RhcnQsbGFzdF9zaXplLGFsaWduKSBcCiAJKChsYXN0X3N0YXJ0K2xhc3Rfc2l6ZSthbGlnbi0xKSAmIC1hbGlnbikKQEAgLTY3LDQgKzc2LDYgQEAKICMgZW5kaWYKICNlbmRpZgogCisjZW5kaWYKKwogI2VuZGlmCS8qIF9YVEVOU0FfQ09QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2RtYS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2RtYS5oCmluZGV4IGRiMjYzM2YuLmUzMGYzYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvZG1hLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUgX1hURU5TQV9ETUFfSAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4KIAogLyoKICAqIFRoaXMgaXMgb25seSB0byBiZSBkZWZpbmVkIGlmIHdlIGhhdmUgUEMtbGlrZSBETUEuCkBAIC00NCw3ICs0Myw5IEBACiAgKgllbnRlcnMgYW5vdGhlciBhcmVhLCBhbmQgdmlydF90b19waHlzKCkgbWF5IG5vdCByZXR1cm4KICAqCXRoZSB2YWx1ZSBkZXNpcmVkKS4KICAqLwotI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCShQQUdFX09GRlNFVCArIFhDSEFMX0tTRUdfQ0FDSEVEX1NJWkUgLSAxKQorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUICsgWENIQUxfS0lPX1NJWkUgLSAxKQorCiAKIC8qIFJlc2VydmUgYW5kIHJlbGVhc2UgYSBETUEgY2hhbm5lbCAqLwogZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2VsZi5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2VsZi5oCmluZGV4IGRlMDY2NzQuLmYwZjlmZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvZWxmLmgKQEAgLTEzLDkgKzEzLDggQEAKICNpZm5kZWYgX1hURU5TQV9FTEZfSAogI2RlZmluZSBfWFRFTlNBX0VMRl9ICiAKKyNpbmNsdWRlIDxhc20vdmFyaWFudC9jb3JlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9jb3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgogCiAvKiBYdGVuc2EgcHJvY2Vzc29yIEVMRiBhcmNoaXRlY3R1cmUtbWFnaWMgbnVtYmVyICovCiAKQEAgLTExOCwxMSArMTE3LDE1IEBACiAgKiB1c2luZyBtZW1jcHkoKS4gIEJ1dCB3ZSBkbyBhbGxvdyBzcGFjZSBmb3Igc3VjaCBhbGlnbm1lbnQsCiAgKiB0byBhbGxvdyBvcHRpbWl6YXRpb25zIG9mIGxheW91dCBhbmQgY29weWluZy4KICAqLwotCisjaWYgMAogI2RlZmluZSBUT1RBTF9GUFJFR1NfU0laRQkJCQkJCVwKICAgCSg0ICsgWFRFTlNBX0NQRV9MVEFCTEVfU0laRSArIFhURU5TQV9DUF9FWFRSQV9TSVpFKQogI2RlZmluZSBFTEZfTkZQUkVHCQkJCQkJCVwKIAkoKFRPVEFMX0ZQUkVHU19TSVpFICsgc2l6ZW9mKGVsZl9mcHJlZ190KSAtIDEpIC8gc2l6ZW9mKGVsZl9mcHJlZ190KSkKKyNlbHNlCisjZGVmaW5lIFRPVEFMX0ZQUkVHU19TSVpFCTAKKyNkZWZpbmUgRUxGX05GUFJFRwkJMAorI2VuZGlmCiAKIHR5cGVkZWYgdW5zaWduZWQgaW50IGVsZl9mcHJlZ190OwogdHlwZWRlZiBlbGZfZnByZWdfdCBlbGZfZnByZWdzZXRfdFtFTEZfTkZQUkVHXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9mY250bC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2ZjbnRsLmgKaW5kZXggZWMwNjZhZS4uMDYwOWZjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2ZjbnRsLmgKQEAgLTE0LDQ4ICsxNCw4NiBAQAogCiAvKiBvcGVuL2ZjbnRsIC0gT19TWU5DIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gYmxvY2tzIGRldmljZXMgYW5kIG9uIGZpbGVzCiAgICBsb2NhdGVkIG9uIGFuIGV4dDIgZmlsZSBzeXN0ZW0gKi8KLSNkZWZpbmUgT19BUFBFTkQJMHgwMDA4Ci0jZGVmaW5lIE9fU1lOQwkJMHgwMDEwCi0jZGVmaW5lIE9fTk9OQkxPQ0sJMHgwMDgwCi0jZGVmaW5lIE9fQ1JFQVQgICAgICAgICAweDAxMDAJLyogbm90IGZjbnRsICovCi0jZGVmaW5lIE9fRVhDTAkJMHgwNDAwCS8qIG5vdCBmY250bCAqLwotI2RlZmluZSBPX05PQ1RUWQkweDA4MDAJLyogbm90IGZjbnRsICovCi0jZGVmaW5lIEZBU1lOQwkJMHgxMDAwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgT19MQVJHRUZJTEUJMHgyMDAwCS8qIGFsbG93IGxhcmdlIGZpbGUgb3BlbnMgLSBjdXJyZW50bHkgaWdub3JlZCAqLwotI2RlZmluZSBPX0RJUkVDVAkweDgwMDAJLyogZGlyZWN0IGRpc2sgYWNjZXNzIGhpbnQgLSBjdXJyZW50bHkgaWdub3JlZCovCi0jZGVmaW5lIE9fTk9BVElNRQkweDEwMDAwMAorI2RlZmluZSBPX0FDQ01PREUJICAgMDAwMworI2RlZmluZSBPX1JET05MWQkgICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAgMDEKKyNkZWZpbmUgT19SRFdSCQkgICAgIDAyCisjZGVmaW5lIE9fQ1JFQVQJCSAgIDAxMDAJLyogbm90IGZjbnRsICovCisjZGVmaW5lIE9fRVhDTAkJICAgMDIwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19OT0NUVFkJICAgMDQwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19UUlVOQwkJICAwMTAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19BUFBFTkQJICAwMjAwMAorI2RlZmluZSBPX05PTkJMT0NLCSAgMDQwMDAKKyNkZWZpbmUgT19OREVMQVkJT19OT05CTE9DSworI2RlZmluZSBPX1NZTkMJCSAwMTAwMDAKKyNkZWZpbmUgRkFTWU5DCQkgMDIwMDAwCS8qIGZjbnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19ESVJFQ1QJIDA0MDAwMAkvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAqLworI2RlZmluZSBPX0xBUkdFRklMRQkwMTAwMDAwCisjZGVmaW5lIE9fRElSRUNUT1JZCTAyMDAwMDAJLyogbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTA0MDAwMDAgLyogZG9uJ3QgZm9sbG93IGxpbmtzICovCisjZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMAogCi0jZGVmaW5lIEZfR0VUTEsJCTE0Ci0jZGVmaW5lIEZfR0VUTEs2NCAgICAgICAxNQorI2RlZmluZSBGX0RVUEZECQkwCS8qIGR1cCAqLworI2RlZmluZSBGX0dFVEZECQkxCS8qIGdldCBjbG9zZV9vbl9leGVjICovCisjZGVmaW5lIEZfU0VURkQJCTIJLyogc2V0L2NsZWFyIGNsb3NlX29uX2V4ZWMgKi8KKyNkZWZpbmUgRl9HRVRGTAkJMwkvKiBnZXQgZmlsZS0+Zl9mbGFncyAqLworI2RlZmluZSBGX1NFVEZMCQk0CS8qIHNldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZfR0VUTEsJCTUKICNkZWZpbmUgRl9TRVRMSwkJNgogI2RlZmluZSBGX1NFVExLVwk3Ci0jZGVmaW5lIEZfU0VUTEs2NCAgICAgICAxNgotI2RlZmluZSBGX1NFVExLVzY0ICAgICAgMTcKIAotI2RlZmluZSBGX1NFVE9XTgkyNAkvKiAgZm9yIHNvY2tldHMuICovCi0jZGVmaW5lIEZfR0VUT1dOCTIzCS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9TRVRPV04JOAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUT1dOCTkJLyogIGZvciBzb2NrZXRzLiAqLworI2RlZmluZSBGX1NFVFNJRwkxMAkvKiAgZm9yIHNvY2tldHMuICovCisjZGVmaW5lIEZfR0VUU0lHCTExCS8qICBmb3Igc29ja2V0cy4gKi8KIAotdHlwZWRlZiBzdHJ1Y3QgZmxvY2sgeworI2RlZmluZSBGX0dFVExLNjQJMTIJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KKyNkZWZpbmUgRl9TRVRMSzY0CTEzCisjZGVmaW5lIEZfU0VUTEtXNjQJMTQKKworLyogZm9yIEZfW0dFVHxTRVRdRkwgKi8KKyNkZWZpbmUgRkRfQ0xPRVhFQwkxCS8qIGFjdHVhbGx5IGFueXRoaW5nIHdpdGggbG93IGJpdCBzZXQgZ29lcyAqLworCisvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLworI2RlZmluZSBGX1JETENLCQkwCisjZGVmaW5lIEZfV1JMQ0sJCTEKKyNkZWZpbmUgRl9VTkxDSwkJMgorCisvKiBmb3Igb2xkIGltcGxlbWVudGF0aW9uIG9mIGJzZCBmbG9jayAoKSAqLworI2RlZmluZSBGX0VYTENLCQk0CS8qIG9yIDMgKi8KKyNkZWZpbmUgRl9TSExDSwkJOAkvKiBvciA0ICovCisKKy8qIGZvciBsZWFzZXMgKi8KKyNkZWZpbmUgRl9JTlBST0dSRVNTCTE2CisKKy8qIG9wZXJhdGlvbnMgZm9yIGJzZCBmbG9jaygpLCBhbHNvIHVzZWQgYnkgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiAqLworI2RlZmluZSBMT0NLX1NICQkxCS8qIHNoYXJlZCBsb2NrICovCisjZGVmaW5lIExPQ0tfRVgJCTIJLyogZXhjbHVzaXZlIGxvY2sgKi8KKyNkZWZpbmUgTE9DS19OQgkJNAkvKiBvcidkIHdpdGggb25lIG9mIHRoZSBhYm92ZSB0byBwcmV2ZW50CisJCQkJICAgYmxvY2tpbmcgKi8KKyNkZWZpbmUgTE9DS19VTgkJOAkvKiByZW1vdmUgbG9jayAqLworCisjZGVmaW5lIExPQ0tfTUFORAkzMgkvKiBUaGlzIGlzIGEgbWFuZGF0b3J5IGZsb2NrICovCisjZGVmaW5lIExPQ0tfUkVBRAk2NAkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfV1JJVEUJMTI4CS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCB3cml0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIExPQ0tfUlcJCTE5MgkvKiAuLi4gV2hpY2ggYWxsb3dzIGNvbmN1cnJlbnQgcmVhZCAmIHdyaXRlIG9wcyAqLworCitzdHJ1Y3QgZmxvY2sgewogCXNob3J0IGxfdHlwZTsKIAlzaG9ydCBsX3doZW5jZTsKLQlfX2tlcm5lbF9vZmZfdCBsX3N0YXJ0OwotCV9fa2VybmVsX29mZl90IGxfbGVuOwotCWxvbmcgIGxfc3lzaWQ7Ci0JX19rZXJuZWxfcGlkX3QgbF9waWQ7Ci0JbG9uZyAgcGFkWzRdOwotfSBmbG9ja190OworCW9mZl90IGxfc3RhcnQ7CisJb2ZmX3QgbF9sZW47CisJcGlkX3QgbF9waWQ7Cit9OwogCiBzdHJ1Y3QgZmxvY2s2NCB7CiAJc2hvcnQgIGxfdHlwZTsKIAlzaG9ydCAgbF93aGVuY2U7Ci0JX19rZXJuZWxfb2ZmX3QgbF9zdGFydDsKLQlfX2tlcm5lbF9vZmZfdCBsX2xlbjsKKwlsb2ZmX3QgbF9zdGFydDsKKwlsb2ZmX3QgbF9sZW47CiAJcGlkX3QgIGxfcGlkOwogfTsKIAotI2RlZmluZSBIQVZFX0FSQ0hfU1RSVUNUX0ZMT0NLCi0jZGVmaW5lIEhBVkVfQVJDSF9TVFJVQ1RfRkxPQ0s2NAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZmNudGwuaD4KKyNkZWZpbmUgRl9MSU5VWF9TUEVDSUZJQ19CQVNFCTEwMjQKIAogI2VuZGlmIC8qIF9YVEVOU0FfRkNOVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2ZpeG1hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDIzYjhhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9maXhtYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20teHRlbnNhL2ZpeG1hcC5oCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwNSBUZW5zaWxpY2EgSW5jLgotICovCi0KLSNpZm5kZWYgX1hURU5TQV9GSVhNQVBfSAotI2RlZmluZSBfWFRFTlNBX0ZJWE1BUF9ICi0KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KLSNpZmRlZiBDT05GSUdfTU1VCi0KLS8qCi0gKiBIZXJlIHdlIGRlZmluZSBhbGwgdGhlIGNvbXBpbGUtdGltZSB2aXJ0dWFsIGFkZHJlc3Nlcy4KLSAqLwotCi0jaWYgWENIQUxfU0VHX01BUFBBQkxFX1ZBRERSICE9IDAKLSMgZXJyb3IgIkN1cnJlbnQgcG9ydCByZXF1aXJlcyB2aXJ0dWFsIHVzZXIgc3BhY2Ugc3RhcnRpbmcgYXQgMCIKLSNlbmRpZgotI2lmIFhDSEFMX1NFR19NQVBQQUJMRV9TSVpFIDwgMHg4MDAwMDAwMAotIyBlcnJvciAiQ3VycmVudCBwb3J0IHJlcXVpcmVzIGF0IGxlYXN0IDB4ODAwMDAwMCBieXRlcyBmb3IgdXNlciBzcGFjZSIKLSNlbmRpZgotCi0vKiBWZXJpZnkgaW5zdHJ1Y3Rpb24vZGF0YSByYW0vcm9tIGFuZCB4bG1pIGRvbid0IG92ZXJsYXkgdm1hbGxvYyBzcGFjZS4gKi8KLQotI2RlZmluZSBfX0lOX1ZNQUxMT0MoYWRkcikJCQkJCQlcCi0JKCgoYWRkcikgPj0gVk1BTExPQ19TVEFSVCkgJiYgKChhZGRyKSA8IFZNQUxMT0NfRU5EKSkKLSNkZWZpbmUgX19TUEFOX1ZNQUxMT0Moc3RhcnQsZW5kKQkJCQkJXAotCSgoKHN0YXJ0KSA8IFZNQUxMT0NfU1RBUlQpICYmICgoZW5kKSA+PSBWTUFMTE9DX0VORCkpCi0jZGVmaW5lIElOU0lERV9WTUFMTE9DKHN0YXJ0LGVuZCkgCQkJCQlcCi0JKF9fSU5fVk1BTExPQygoc3RhcnQpKSB8fCBfX0lOX1ZNQUxMT0MoZW5kKSB8fCBfX1NQQU5fVk1BTExPQygoc3RhcnQpLChlbmQpKSkKLQotI2lmIFhDSEFMX05VTV9JTlNUUk9NCi0jIGlmIFhDSEFMX05VTV9JTlNUUk9NID09IDEKLSMgIGlmIElOU0lERV9WTUFMTE9DKFhDSEFMX0lOU1RST00wX1ZBRERSLFhDSEFMX0lOU1RST00wX1ZBRERSK1hDSEFMX0lOU1RST00wX1NJWkUpCi0jICAgZXJyb3Igdm1hbGxvYyByYW5nZSBjb25mbGljdHMgd2l0aCBpbnN0cm9tMAotIyAgZW5kaWYKLSMgZW5kaWYKLSMgaWYgWENIQUxfTlVNX0lOU1RST00gPT0gMgotIyAgaWYgSU5TSURFX1ZNQUxMT0MoWENIQUxfSU5TVFJPTTFfVkFERFIsWENIQUxfSU5TVFJPTTFfVkFERFIrWENIQUxfSU5TVFJPTTFfU0laRSkKLSMgICBlcnJvciB2bWFsbG9jIHJhbmdlIGNvbmZsaWN0cyB3aXRoIGluc3Ryb20xCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZiBYQ0hBTF9OVU1fSU5TVFJBTQotIyBpZiBYQ0hBTF9OVU1fSU5TVFJBTSA9PSAxCi0jICBpZiBJTlNJREVfVk1BTExPQyhYQ0hBTF9JTlNUUkFNMF9WQUREUixYQ0hBTF9JTlNUUkFNMF9WQUREUitYQ0hBTF9JTlNUUkFNMF9TSVpFKQotIyAgIGVycm9yIHZtYWxsb2MgcmFuZ2UgY29uZmxpY3RzIHdpdGggaW5zdHJhbTAKLSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmIFhDSEFMX05VTV9JTlNUUkFNID09IDIKLSMgIGlmIElOU0lERV9WTUFMTE9DKFhDSEFMX0lOU1RSQU0xX1ZBRERSLFhDSEFMX0lOU1RSQU0xX1ZBRERSK1hDSEFMX0lOU1RSQU0xX1NJWkUpCi0jICAgZXJyb3Igdm1hbGxvYyByYW5nZSBjb25mbGljdHMgd2l0aCBpbnN0cmFtMQotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgWENIQUxfTlVNX0RBVEFST00KLSMgaWYgWENIQUxfTlVNX0RBVEFST00gPT0gMQotIyAgaWYgSU5TSURFX1ZNQUxMT0MoWENIQUxfREFUQVJPTTBfVkFERFIsWENIQUxfREFUQVJPTTBfVkFERFIrWENIQUxfREFUQVJPTTBfU0laRSkKLSMgICBlcnJvciB2bWFsbG9jIHJhbmdlIGNvbmZsaWN0cyB3aXRoIGRhdGFyb20wCi0jICBlbmRpZgotIyBlbmRpZgotIyBpZiBYQ0hBTF9OVU1fREFUQVJPTSA9PSAyCi0jICBpZiBJTlNJREVfVk1BTExPQyhYQ0hBTF9EQVRBUk9NMV9WQUREUixYQ0hBTF9EQVRBUk9NMV9WQUREUitYQ0hBTF9EQVRBUk9NMV9TSVpFKQotIyAgIGVycm9yIHZtYWxsb2MgcmFuZ2UgY29uZmxpY3RzIHdpdGggZGF0YXJvbTEKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIFhDSEFMX05VTV9EQVRBUkFNCi0jIGlmIFhDSEFMX05VTV9EQVRBUkFNID09IDEKLSMgIGlmIElOU0lERV9WTUFMTE9DKFhDSEFMX0RBVEFSQU0wX1ZBRERSLFhDSEFMX0RBVEFSQU0wX1ZBRERSK1hDSEFMX0RBVEFSQU0wX1NJWkUpCi0jICAgZXJyb3Igdm1hbGxvYyByYW5nZSBjb25mbGljdHMgd2l0aCBkYXRhcmFtMAotIyAgZW5kaWYKLSMgZW5kaWYKLSMgaWYgWENIQUxfTlVNX0RBVEFSQU0gPT0gMgotIyAgaWYgSU5TSURFX1ZNQUxMT0MoWENIQUxfREFUQVJBTTFfVkFERFIsWENIQUxfREFUQVJBTTFfVkFERFIrWENIQUxfREFUQVJBTTFfU0laRSkKLSMgICBlcnJvciB2bWFsbG9jIHJhbmdlIGNvbmZsaWN0cyB3aXRoIGRhdGFyYW0xCi0jICBlbmRpZgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZiBYQ0hBTF9OVU1fWExNSQotIyBpZiBYQ0hBTF9OVU1fWExNSSA9PSAxCi0jICBpZiBJTlNJREVfVk1BTExPQyhYQ0hBTF9YTE1JMF9WQUREUixYQ0hBTF9YTE1JMF9WQUREUitYQ0hBTF9YTE1JMF9TSVpFKQotIyAgIGVycm9yIHZtYWxsb2MgcmFuZ2UgY29uZmxpY3RzIHdpdGggeGxtaTAKLSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmIFhDSEFMX05VTV9YTE1JID09IDIKLSMgIGlmIElOU0lERV9WTUFMTE9DKFhDSEFMX1hMTUkxX1ZBRERSLFhDSEFMX1hMTUkxX1ZBRERSK1hDSEFMX1hMTUkxX1NJWkUpCi0jICAgZXJyb3Igdm1hbGxvYyByYW5nZSBjb25mbGljdHMgd2l0aCB4bG1pMQotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgKFhDSEFMX05VTV9JTlNUUk9NID4gMikgfHwgXAotICAgIChYQ0hBTF9OVU1fSU5TVFJBTSA+IDIpIHx8IFwKLSAgICAoWENIQUxfTlVNX0RBVEFSQU0gPiAyKSB8fCBcCi0gICAgKFhDSEFMX05VTV9EQVRBUk9NID4gMikgfHwgXAotICAgIChYQ0hBTF9OVU1fWExNSSAgICA+IDIpCi0jIGVycm9yIEluc3VmZmljaWVudCBjaGVja3Mgb24gdm1hbGxvYyBhYm92ZSBmb3IgbW9yZSB0aGFuIDIgZGV2aWNlcwotI2VuZGlmCi0KLS8qCi0gKiBVU0VSX1ZNX1NJWkUgZG9lcyBub3QgbmVjZXNzYXJpbHkgZXF1YWwgVEFTS19TSVpFLiAgV2UgYnVtcGVkCi0gKiBUQVNLX1NJWkUgZG93biB0byAweDQwMDAwMDAgdG8gc2ltcGxpZnkgdGhlIGhhbmRsaW5nIG9mIHdpbmRvd2VkCi0gKiBjYWxsIGluc3RydWN0aW9ucyAoY3VycmVudGx5IGxpbWl0ZWQgdG8gYSByYW5nZSBvZiAxIEdCeXRlKS4gIFVzZXIKLSAqIHRhc2tzIG1heSB2ZXJ5IHdlbGwgcmVjbGFpbSB0aGUgVk0gc3BhY2UgZnJvbSAweDQwMDAwMDAwIHRvCi0gKiAweDdmZmZmZmZmIGluIHRoZSBmdXR1cmUsIHNvIHdlIGRvIG5vdCB3YW50IHRoZSBrZXJuZWwgYmVjb21pbmcKLSAqIGFjY3VzdG9tZWQgdG8gaGF2aW5nIGFueSBvZiBpdHMgc3R1ZmYgKGUuZy4sIHBhZ2UgdGFibGVzKSBpbiB0aGlzCi0gKiByZWdpb24uICBUaGlzIFZNIHJlZ2lvbiBpcyBuby1tYW4ncyBsYW5kIGZvciBub3cuCi0gKi8KLQotI2RlZmluZSBVU0VSX1ZNX1NUQVJUCQlYQ0hBTF9TRUdfTUFQUEFCTEVfVkFERFIKLSNkZWZpbmUgVVNFUl9WTV9TSVpFCQkweDgwMDAwMDAwCi0KLS8qICBTaXplIG9mIHBhZ2UgdGFibGU6ICAqLwotCi0jZGVmaW5lIFBHVEFCTEVfU0laRV9CSVRTCSgzMiAtIFhDSEFMX01NVV9NSU5fUFRFX1BBR0VfU0laRSArIDIpCi0jZGVmaW5lIFBHVEFCTEVfU0laRQkJKDFMIDw8IFBHVEFCTEVfU0laRV9CSVRTKQotCi0vKiAgQWxsIGtlcm5lbC1tYXBwYWJsZSBzcGFjZTogICovCi0KLSNkZWZpbmUgS0VSTkVMX0FMTE1BUF9TVEFSVAkoVVNFUl9WTV9TVEFSVCArIFVTRVJfVk1fU0laRSkKLSNkZWZpbmUgS0VSTkVMX0FMTE1BUF9TSVpFCShYQ0hBTF9TRUdfTUFQUEFCTEVfU0laRSAtIEtFUk5FTF9BTExNQVBfU1RBUlQpCi0KLS8qICBDYXJ2ZSBvdXQgcGFnZSB0YWJsZSBhdCBzdGFydCBvZiBrZXJuZWwtbWFwcGFibGUgYXJlYTogICovCi0KLSNpZiBLRVJORUxfQUxMTUFQX1NJWkUgPCBQR1RBQkxFX1NJWkUKLSNlcnJvciAiR2ltbWUgc29tZSBzcGFjZSBmb3IgcGFnZSB0YWJsZSEiCi0jZW5kaWYKLSNkZWZpbmUgUEdUQUJMRV9TVEFSVAkJS0VSTkVMX0FMTE1BUF9TVEFSVAotCi0vKiAgUmVtYWluaW5nIGtlcm5lbC1tYXBwYWJsZSBzcGFjZTogICovCi0KLSNkZWZpbmUgS0VSTkVMX01BUFBFRF9TVEFSVAkoS0VSTkVMX0FMTE1BUF9TVEFSVCArIFBHVEFCTEVfU0laRSkKLSNkZWZpbmUgS0VSTkVMX01BUFBFRF9TSVpFCShLRVJORUxfQUxMTUFQX1NJWkUgLSBQR1RBQkxFX1NJWkUpCi0KLSNpZiBLRVJORUxfTUFQUEVEX1NJWkUgPCAweDAxMDAwMDAwCS8qIDE2IE1CIGlzIGFyYml0cmFyeSBmb3Igbm93ICovCi0jIGVycm9yICJTaG91bGRuJ3QgdGhlIGtlcm5lbCBoYXZlIGF0IGxlYXN0ICpzb21lKiBtYXBwYWJsZSBzcGFjZT8iCi0jZW5kaWYKLQotI2RlZmluZSBNQVhfTE9XX01FTU9SWQkJWENIQUxfS1NFR19DQUNIRURfU0laRQotCi0jZW5kaWYKLQotLyoKLSAqICBTb21lIGNvbnN0YW50cyB1c2VkIGVsc2V3aGVyZSwgYnV0IHBlcmhhcHMgb25seSBpbiBYdGVuc2EgaGVhZGVyCi0gKiAgZmlsZXMsIHNvIG1heWJlIHdlIGNhbiBnZXQgcmlkIG9mIHNvbWUgYW5kIGFjY2VzcyBjb21waWxlLXRpbWUgSEFMCi0gKiAgZGlyZWN0bHkuLi4KLSAqCi0gKiAgTm90ZTogIFdlIGFzc3VtZSB0aGF0IHN5c3RlbSBSQU0gaXMgbG9jYXRlZCBhdCB0aGUgdmVyeSBzdGFydCBvZiB0aGUKLSAqICAJICAga2VybmVsIHNlZ21lbnRzICEhCi0gKi8KLSNkZWZpbmUgS0VSTkVMX1ZNX0xPVyAgICAgICAgICAgWENIQUxfS1NFR19DQUNIRURfVkFERFIKLSNkZWZpbmUgS0VSTkVMX1ZNX0hJR0ggICAgICAgICAgWENIQUxfS1NFR19CWVBBU1NfVkFERFIKLSNkZWZpbmUgS0VSTkVMX1NQQUNFICAgICAgICAgICAgWENIQUxfS1NFR19DQUNIRURfVkFERFIKLQotLyoKLSAqIFJldHVybnMgdGhlIHBoeXNpY2FsL3ZpcnR1YWwgYWRkcmVzc2VzIG9mIHRoZSBrZXJuZWwgc3BhY2UKLSAqICh3b3JrcyB3aXRoIHRoZSBjYWNoZWQga2VybmVsIHNlZ21lbnQgb25seSwgd2hpY2ggaXMgdGhlCi0gKiAgb25lIG5vcm1hbGx5IHVzZWQgZm9yIGtlcm5lbCBvcGVyYXRpb24pLgotICovCi0KLS8qCQkJUEhZU0lDQUwJQllQQVNTCQlDQUNIRUQKLSAqCi0gKiAgYnlwYXNzIHZhZGRyCWJ5cGFzcyBwYWRkcgkqCQljYWNoZWQgdmFkZHIKLSAqICBjYWNoZWQgdmFkZHIJY2FjaGVkIHBhZGRyCWJ5cGFzcyB2YWRkcgkqCi0gKiAgYnlwYXNzIHBhZGRyCSoJCWJ5cGFzcyB2YWRkcgljYWNoZWQgdmFkZHIKLSAqICBjYWNoZWQgcGFkZHIJKgkJYnlwYXNzIHZhZGRyCWNhY2hlZCB2YWRkcgotICogIG90aGVyCQkqCQkqCQkqCi0gKi8KLQotI2RlZmluZSBQSFlTQUREUihhKQkJCQkJCQkgICAgICBcCi0oKCh1bnNpZ25lZCkoYSkgPj0gWENIQUxfS1NFR19CWVBBU1NfVkFERFIJCQkJICAgICAgXAotICAmJiAodW5zaWduZWQpKGEpIDwgWENIQUxfS1NFR19CWVBBU1NfVkFERFIgKyBYQ0hBTF9LU0VHX0JZUEFTU19TSVpFKSA/ICAgICAgXAotICAgICh1bnNpZ25lZCkoYSkgLSBYQ0hBTF9LU0VHX0JZUEFTU19WQUREUiArIFhDSEFMX0tTRUdfQllQQVNTX1BBRERSIDogICAgICAgXAotICAgICgodW5zaWduZWQpKGEpID49IFhDSEFMX0tTRUdfQ0FDSEVEX1ZBRERSCQkJCSAgICAgIFwKLSAgICAgJiYgKHVuc2lnbmVkKShhKSA8IFhDSEFMX0tTRUdfQ0FDSEVEX1ZBRERSICsgWENIQUxfS1NFR19DQUNIRURfU0laRSkgPyAgIFwKLSAgICAgICAgKHVuc2lnbmVkKShhKSAtIFhDSEFMX0tTRUdfQ0FDSEVEX1ZBRERSICsgWENIQUxfS1NFR19DQUNIRURfUEFERFIgOiAgIFwKLQkodW5zaWduZWQpKGEpKQotCi0jZGVmaW5lIEJZUEFTU19BRERSKGEpCQkJCQkJCSAgICAgIFwKLSgoKHVuc2lnbmVkKShhKSA+PSBYQ0hBTF9LU0VHX0JZUEFTU19QQUREUgkJCQkgICAgICBcCi0gICYmICh1bnNpZ25lZCkoYSkgPCBYQ0hBTF9LU0VHX0JZUEFTU19QQUREUiArIFhDSEFMX0tTRUdfQllQQVNTX1NJWkUpID8gICAgICBcCi0gICAgKHVuc2lnbmVkKShhKSAtIFhDSEFMX0tTRUdfQllQQVNTX1BBRERSICsgWENIQUxfS1NFR19CWVBBU1NfVkFERFIgOiAgICAgICBcCi0gICAgKCh1bnNpZ25lZCkoYSkgPj0gWENIQUxfS1NFR19DQUNIRURfUEFERFIJCQkJICAgICAgXAotICAgICAmJiAodW5zaWduZWQpKGEpIDwgWENIQUxfS1NFR19DQUNIRURfUEFERFIgKyBYQ0hBTF9LU0VHX0NBQ0hFRF9TSVpFKSA/ICAgXAotICAgICAgICAodW5zaWduZWQpKGEpIC0gWENIQUxfS1NFR19DQUNIRURfUEFERFIgKyBYQ0hBTF9LU0VHX0JZUEFTU19WQUREUiA6ICAgXAotICAgICAgICAoKHVuc2lnbmVkKShhKSA+PSBYQ0hBTF9LU0VHX0NBQ0hFRF9WQUREUgkJCSAgICAgIFwKLSAgICAgICAgICYmICh1bnNpZ25lZCkoYSkgPCBYQ0hBTF9LU0VHX0NBQ0hFRF9WQUREUitYQ0hBTF9LU0VHX0NBQ0hFRF9TSVpFKT8gIFwKLSAgICAgICAgICAgICh1bnNpZ25lZCkoYSkgLSBYQ0hBTF9LU0VHX0NBQ0hFRF9WQUREUitYQ0hBTF9LU0VHX0JZUEFTU19WQUREUjogIFwKLQkgICAgKHVuc2lnbmVkKShhKSkKLQotI2RlZmluZSBDQUNIRURfQUREUihhKQkJCQkJCQkgICAgICBcCi0oKCh1bnNpZ25lZCkoYSkgPj0gWENIQUxfS1NFR19CWVBBU1NfUEFERFIJCQkJICAgICAgXAotICAmJiAodW5zaWduZWQpKGEpIDwgWENIQUxfS1NFR19CWVBBU1NfUEFERFIgKyBYQ0hBTF9LU0VHX0JZUEFTU19TSVpFKSA/ICAgICAgXAotICAgICh1bnNpZ25lZCkoYSkgLSBYQ0hBTF9LU0VHX0JZUEFTU19QQUREUiArIFhDSEFMX0tTRUdfQ0FDSEVEX1ZBRERSIDogICAgICAgXAotICAgICgodW5zaWduZWQpKGEpID49IFhDSEFMX0tTRUdfQ0FDSEVEX1BBRERSCQkJICAgICAgICAgICAgICBcCi0gICAgICYmICh1bnNpZ25lZCkoYSkgPCBYQ0hBTF9LU0VHX0NBQ0hFRF9QQUREUiArIFhDSEFMX0tTRUdfQ0FDSEVEX1NJWkUpID8gICBcCi0gICAgICAgICh1bnNpZ25lZCkoYSkgLSBYQ0hBTF9LU0VHX0NBQ0hFRF9QQUREUiArIFhDSEFMX0tTRUdfQ0FDSEVEX1ZBRERSIDogICBcCi0gICAgICAgICgodW5zaWduZWQpKGEpID49IFhDSEFMX0tTRUdfQllQQVNTX1ZBRERSCQkJICAgICAgXAotICAgICAgICAgJiYgKHVuc2lnbmVkKShhKSA8IFhDSEFMX0tTRUdfQllQQVNTX1ZBRERSK1hDSEFMX0tTRUdfQllQQVNTX1NJWkUpID8gXAotICAgICAgICAgICAgKHVuc2lnbmVkKShhKSAtIFhDSEFMX0tTRUdfQllQQVNTX1ZBRERSK1hDSEFMX0tTRUdfQ0FDSEVEX1ZBRERSIDogXAotCSAgICAodW5zaWduZWQpKGEpKQotCi0jZGVmaW5lIFBIWVNBRERSX0lPKGEpCQkJCQkJCSAgICAgIFwKLSgoKHVuc2lnbmVkKShhKSA+PSBYQ0hBTF9LSU9fQllQQVNTX1ZBRERSCQkJCSAgICAgIFwKLSAgJiYgKHVuc2lnbmVkKShhKSA8IFhDSEFMX0tJT19CWVBBU1NfVkFERFIgKyBYQ0hBTF9LSU9fQllQQVNTX1NJWkUpID8JICAgICAgXAotICAgICh1bnNpZ25lZCkoYSkgLSBYQ0hBTF9LSU9fQllQQVNTX1ZBRERSICsgWENIQUxfS0lPX0JZUEFTU19QQUREUiA6CSAgICAgIFwKLSAgICAoKHVuc2lnbmVkKShhKSA+PSBYQ0hBTF9LSU9fQ0FDSEVEX1ZBRERSCQkJCSAgICAgIFwKLSAgICAgJiYgKHVuc2lnbmVkKShhKSA8IFhDSEFMX0tJT19DQUNIRURfVkFERFIgKyBYQ0hBTF9LSU9fQ0FDSEVEX1NJWkUpID8gICAgIFwKLSAgICAgICAgKHVuc2lnbmVkKShhKSAtIFhDSEFMX0tJT19DQUNIRURfVkFERFIgKyBYQ0hBTF9LSU9fQ0FDSEVEX1BBRERSIDogICAgIFwKLQkodW5zaWduZWQpKGEpKQotCi0jZGVmaW5lIEJZUEFTU19BRERSX0lPKGEpCQkJCQkJICAgICAgXAotKCgodW5zaWduZWQpKGEpID49IFhDSEFMX0tJT19CWVBBU1NfUEFERFIJCQkJICAgICAgXAotICAmJiAodW5zaWduZWQpKGEpIDwgWENIQUxfS0lPX0JZUEFTU19QQUREUiArIFhDSEFMX0tJT19CWVBBU1NfU0laRSkgPwkgICAgICBcCi0gICAgKHVuc2lnbmVkKShhKSAtIFhDSEFMX0tJT19CWVBBU1NfUEFERFIgKyBYQ0hBTF9LSU9fQllQQVNTX1ZBRERSIDoJICAgICAgXAotICAgICgodW5zaWduZWQpKGEpID49IFhDSEFMX0tJT19DQUNIRURfUEFERFIJCQkJICAgICAgXAotICAgICAmJiAodW5zaWduZWQpKGEpIDwgWENIQUxfS0lPX0NBQ0hFRF9QQUREUiArIFhDSEFMX0tJT19DQUNIRURfU0laRSkgPyAgICAgXAotICAgICAgICAodW5zaWduZWQpKGEpIC0gWENIQUxfS0lPX0NBQ0hFRF9QQUREUiArIFhDSEFMX0tJT19CWVBBU1NfVkFERFIgOiAgICAgXAotICAgICAgICAoKHVuc2lnbmVkKShhKSA+PSBYQ0hBTF9LSU9fQ0FDSEVEX1ZBRERSCQkJICAgICAgXAotICAgICAgICAgJiYgKHVuc2lnbmVkKShhKSA8IFhDSEFMX0tJT19DQUNIRURfVkFERFIgKyBYQ0hBTF9LSU9fQ0FDSEVEX1NJWkUpID8gXAotICAgICAgICAgICAgKHVuc2lnbmVkKShhKSAtIFhDSEFMX0tJT19DQUNIRURfVkFERFIgKyBYQ0hBTF9LSU9fQllQQVNTX1ZBRERSIDogXAotCSAgICAodW5zaWduZWQpKGEpKQotCi0jZGVmaW5lIENBQ0hFRF9BRERSX0lPKGEpCQkJCQkJICAgICAgXAotKCgodW5zaWduZWQpKGEpID49IFhDSEFMX0tJT19CWVBBU1NfUEFERFIJCQkJICAgICAgXAotICAmJiAodW5zaWduZWQpKGEpIDwgWENIQUxfS0lPX0JZUEFTU19QQUREUiArIFhDSEFMX0tJT19CWVBBU1NfU0laRSkgPwkgICAgICBcCi0gICAgKHVuc2lnbmVkKShhKSAtIFhDSEFMX0tJT19CWVBBU1NfUEFERFIgKyBYQ0hBTF9LSU9fQ0FDSEVEX1ZBRERSIDoJICAgICAgXAotICAgICgodW5zaWduZWQpKGEpID49IFhDSEFMX0tJT19DQUNIRURfUEFERFIJCQkJICAgICAgXAotICAgICAmJiAodW5zaWduZWQpKGEpIDwgWENIQUxfS0lPX0NBQ0hFRF9QQUREUiArIFhDSEFMX0tJT19DQUNIRURfU0laRSkgPyAgICAgXAotICAgICAgICAodW5zaWduZWQpKGEpIC0gWENIQUxfS0lPX0NBQ0hFRF9QQUREUiArIFhDSEFMX0tJT19DQUNIRURfVkFERFIgOiAgICAgXAotICAgICAgICAoKHVuc2lnbmVkKShhKSA+PSBYQ0hBTF9LSU9fQllQQVNTX1ZBRERSCQkJICAgICAgXAotICAgICAgICAgJiYgKHVuc2lnbmVkKShhKSA8IFhDSEFMX0tJT19CWVBBU1NfVkFERFIgKyBYQ0hBTF9LSU9fQllQQVNTX1NJWkUpID8gXAotICAgICAgICAgICAgKHVuc2lnbmVkKShhKSAtIFhDSEFMX0tJT19CWVBBU1NfVkFERFIgKyBYQ0hBTF9LSU9fQ0FDSEVEX1ZBRERSIDogXAotCSAgICAodW5zaWduZWQpKGEpKQotCi0jZW5kaWYgLyogX1hURU5TQV9BRERSU1BBQ0VfSCAqLwotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9pby5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2lvLmgKaW5kZXggNTU2ZTVlZS4uMzFmZmMzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2lvLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2lvLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvaW5jbHVkZS9hc20teHRlbnNhL2lvLmgKKyAqIGluY2x1ZGUvYXNtLXh0ZW5zYS9pby5oCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE1LDEwICsxNSwxMSBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogCi0jZGVmaW5lIF9JT19CQVNFIDAKLQorI2RlZmluZSBYQ0hBTF9LSU9fQ0FDSEVEX1ZBRERSCTB4ZjAwMDAwMDAKKyNkZWZpbmUgWENIQUxfS0lPX0JZUEFTU19WQUREUgkweGY4MDAwMDAwCisjZGVmaW5lIFhDSEFMX0tJT19QQUREUgkJMHhmMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9LSU9fU0laRQkJMHgwODAwMDAwMAogCiAvKgogICogc3dhcCBmdW5jdGlvbnMgdG8gY2hhbmdlIGJ5dGUgb3JkZXIgZnJvbSBsaXR0bGUtZW5kaWFuIHRvIGJpZy1lbmRpYW4gYW5kCkBAIC00Miw0MCArNDMsNDMgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICogYWRkcmVzcykKIHsKLQlyZXR1cm4gUEhZU0FERFIoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcyk7CisJcmV0dXJuIF9fcGEoYWRkcmVzcyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqIHBoeXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JcmV0dXJuICh2b2lkKikgQ0FDSEVEX0FERFIoYWRkcmVzcyk7CisJcmV0dXJuIF9fdmEoYWRkcmVzcyk7CiB9CiAKIC8qCi0gKiBJTyBidXMgbWVtb3J5IGFkZHJlc3NlcyBhcmUgYWxzbyAxOjEgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcworICogdmlydF90b19idXMgYW5kIGJ1c190b192aXJ0IGFyZSBkZXByZWNhdGVkLgogICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2J1cyh2b2xhdGlsZSB2b2lkICogYWRkcmVzcykKLXsKLQlyZXR1cm4gUEhZU0FERFIoKHVuc2lnbmVkIGxvbmcpYWRkcmVzcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqIGJ1c190b192aXJ0ICh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0JcmV0dXJuICh2b2lkICopIENBQ0hFRF9BRERSKGFkZHJlc3MpOwotfQorI2RlZmluZSB2aXJ0X3RvX2J1cyh4KQl2aXJ0X3RvX3BoeXMoeCkKKyNkZWZpbmUgYnVzX3RvX3ZpcnQoeCkJcGh5c190b192aXJ0KHgpCiAKIC8qCi0gKiBDaGFuZ2UgInN0cnVjdCBwYWdlIiB0byBwaHlzaWNhbCBhZGRyZXNzLgorICogUmV0dXJuIHRoZSB2aXJ0dWFsIChjYWNoZWQpIGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgYnVzIG1lbW9yeS4KKyAqIE5vdGUgdGhhdCB3ZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBhbnkgYWRkcmVzcyBvdXRzaWRlIHRoZSBLSU8gc2VnbWVudC4KICAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmlvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLSAgICAgICAgcmV0dXJuICh2b2lkICopIENBQ0hFRF9BRERSX0lPKG9mZnNldCk7CisJaWYgKG9mZnNldCA+PSBYQ0hBTF9LSU9fUEFERFIKKwkgICAgJiYgb2Zmc2V0IDwgWENIQUxfS0lPX1BBRERSICsgWENIQUxfS0lPX1NJWkUpCisJCXJldHVybiAodm9pZCopKG9mZnNldC1YQ0hBTF9LSU9fUEFERFIrWENIQUxfS0lPX0JZUEFTU19WQUREUik7CisKKwllbHNlCisJCUJVRygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmlvcmVtYXBfbm9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQogewotICAgICAgICByZXR1cm4gKHZvaWQgKikgQllQQVNTX0FERFJfSU8ob2Zmc2V0KTsKKwlpZiAob2Zmc2V0ID49IFhDSEFMX0tJT19QQUREUgorCSAgICAmJiBvZmZzZXQgPCBYQ0hBTF9LSU9fUEFERFIgKyBYQ0hBTF9LSU9fU0laRSkKKwkJcmV0dXJuICh2b2lkKikob2Zmc2V0LVhDSEFMX0tJT19QQUREUitYQ0hBTF9LSU9fQ0FDSEVEX1ZBRERSKTsKKwllbHNlCisJCUJVRygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2lkICphZGRyKQpAQCAtMTIxLDkgKzEyNSw2IEBACiAgICAgICAgICAgKihfX2ZvcmNlIHZvbGF0aWxlIF9fdTMyICopKGFkZHIpID0gYjsKIH0KIAotCi0KLQogLyogVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIHg4NiBJTyBpbnN0cnVjdGlvbnMKICAqIGluYi9pbncvaW5sL291dGIvb3V0dy9vdXRsLCB0aGUgInN0cmluZyIgdmVyc2lvbnMKICAqIGluc2IvaW5zdy9pbnNsL291dHNiL291dHN3L291dHNsLCBhbmQgdGhlICJwYXVzaW5nIiB2ZXJzaW9ucwpAQCAtMTMxLDExICsxMzIsMTEgQEAKICAqIFRoZSBtYWNyb3MgZG9uJ3QgZG8gYnl0ZS1zd2FwcGluZy4KICAqLwogCi0jZGVmaW5lIGluYihwb3J0KQkJcmVhZGIoKHU4ICopKChwb3J0KStfSU9fQkFTRSkpCi0jZGVmaW5lIG91dGIodmFsLCBwb3J0KQkJd3JpdGViKCh2YWwpLCh1OCAqKSgodW5zaWduZWQgbG9uZykocG9ydCkrX0lPX0JBU0UpKQotI2RlZmluZSBpbncocG9ydCkJCXJlYWR3KCh1MTYgKikoKHBvcnQpK19JT19CQVNFKSkKLSNkZWZpbmUgb3V0dyh2YWwsIHBvcnQpCQl3cml0ZXcoKHZhbCksKHUxNiAqKSgodW5zaWduZWQgbG9uZykocG9ydCkrX0lPX0JBU0UpKQotI2RlZmluZSBpbmwocG9ydCkJCXJlYWRsKCh1MzIgKikoKHBvcnQpK19JT19CQVNFKSkKKyNkZWZpbmUgaW5iKHBvcnQpCQlyZWFkYigodTggKikoKHBvcnQpKSkKKyNkZWZpbmUgb3V0Yih2YWwsIHBvcnQpCQl3cml0ZWIoKHZhbCksKHU4ICopKCh1bnNpZ25lZCBsb25nKShwb3J0KSkpCisjZGVmaW5lIGludyhwb3J0KQkJcmVhZHcoKHUxNiAqKSgocG9ydCkpKQorI2RlZmluZSBvdXR3KHZhbCwgcG9ydCkJCXdyaXRldygodmFsKSwodTE2ICopKCh1bnNpZ25lZCBsb25nKShwb3J0KSkpCisjZGVmaW5lIGlubChwb3J0KQkJcmVhZGwoKHUzMiAqKSgocG9ydCkpKQogI2RlZmluZSBvdXRsKHZhbCwgcG9ydCkJCXdyaXRlbCgodmFsKSwodTMyICopKCh1bnNpZ25lZCBsb25nKShwb3J0KSkpCiAKICNkZWZpbmUgaW5iX3AocG9ydCkJCWluYigocG9ydCkpCkBAIC0xODAsMTQgKzE4MSwxMyBAQAogCiAKIC8qCi0gKiAgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCi0gKiAgICogYWNjZXNzCi0gKiAgICAqLworICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbSBhY2Nlc3MKKyAqLwogI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKSAgICBfX3ZhKHApCiAKIC8qCi0gKiAgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCi0gKiAgICovCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KICNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApICAgcAogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9pcnEuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9pcnEuaAppbmRleCAwNDlmZGU3Li5mYzczYjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2lycS5oCkBAIC0xMiw4ICsxMiw3IEBACiAjZGVmaW5lIF9YVEVOU0FfSVJRX0gKIAogI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9jb3JlLmg+CisjaW5jbHVkZSA8YXNtL3ZhcmlhbnQvY29yZS5oPgogCiAjaWZuZGVmIFBMQVRGT1JNX05SX0lSUVMKICMgZGVmaW5lIFBMQVRGT1JNX05SX0lSUVMgMApAQCAtMjcsMTAgKzI2LDUgQEAKIH0KIAogc3RydWN0IGlycWFjdGlvbjsKLSNpZiAwIC8vIEZJWE1FCi1leHRlcm4gdm9pZCBkaXNhYmxlX2lycV9ub3N5bmModW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBlbmFibGVfaXJxKHVuc2lnbmVkIGludCk7Ci0jZW5kaWYKIAogI2VuZGlmCS8qIF9YVEVOU0FfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9pcnFfcmVncy5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2lycV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkOWMwYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9pcnFfcmVncy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcnFfcmVncy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS14dGVuc2EvbW11X2NvbnRleHQuaAppbmRleCBhZjY4M2E3Li5mMTQ4NTFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvbW11X2NvbnRleHQuaApAQCAtMTYsMTg3ICsxNiwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi0vKgotICogTGludXggd2FzIHBvcnRlZCB0byBYdGVuc2EgYXNzdW1pbmcgYWxsIGF1dG8tcmVmaWxsIHdheXMgaW4gc2V0IDAKLSAqIGhhZCB0aGUgc2FtZSBwcm9wZXJ0aWVzIChhIHZlcnkgbGlrZWx5IGFzc3VtcHRpb24pLiAgTXVsdGlwbGUgc2V0cwotICogb2YgYXV0by1yZWZpbGwgd2F5cyB3aWxsIHN0aWxsIHdvcmsgcHJvcGVybHksIGJ1dCBub3QgYXMgb3B0aW1hbGx5Ci0gKiBhcyB0aGUgWHRlbnNhIGRlc2lnbmVyIG1heSBoYXZlIGFzc3VtZWQuCi0gKgotICogV2UgbWFrZSB0aGlzIGNhc2UgYSBoYXJkICNlcnJvciwga2lsbGluZyB0aGUga2VybmVsIGJ1aWxkLCB0byBhbGVydAotICogdGhlIGRldmVsb3BlciB0byB0aGlzIGNvbmRpdGlvbiAod2hpY2ggaXMgbW9yZSBsaWtlbHkgYW4gZXJyb3IpLgotICogWW91IHN1cGVyLWR1cGVyIGNsZXZlciBkZXZlbG9wZXJzIGNhbiBjaGFuZ2UgaXQgdG8gYSB3YXJuaW5nIG9yCi0gKiByZW1vdmUgaXQgYWx0b2dldGhlciBpZiB5b3UgdGhpbmsgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuICA6KQotICovCisjZGVmaW5lIFhDSEFMX01NVV9BU0lEX0JJVFMJOAogCiAjaWYgKFhDSEFMX0hBVkVfVExCUyAhPSAxKQogIyBlcnJvciAiTGludXggbXVzdCBoYXZlIGFuIE1NVSEiCiAjZW5kaWYKIAotI2lmICgoWENIQUxfSVRMQl9BUkZfV0FZUyA9PSAwKSB8fCAoWENIQUxfRFRMQl9BUkZfV0FZUyA9PSAwKSkKLSMgZXJyb3IgIk1NVSBtdXN0IGhhdmUgYXV0by1yZWZpbGwgd2F5cyIKLSNlbmRpZgotCi0jaWYgKChYQ0hBTF9JVExCX0FSRl9TRVRTICE9IDEpIHx8IChYQ0hBTF9EVExCX0FSRl9TRVRTICE9IDEpKQotIyBlcnJvciBMaW51eCBtYXkgbm90IHVzZSBhbGwgYXV0by1yZWZpbGwgd2F5cyBhcyBlZmZpY2llbnRseSBhcyB5b3UgdGhpbmsKLSNlbmRpZgotCi0jaWYgKFhDSEFMX01NVV9NQVhfUFRFX1BBR0VfU0laRSAhPSBYQ0hBTF9NTVVfTUlOX1BURV9QQUdFX1NJWkUpCi0jIGVycm9yIE9ubHkgb25lIHBhZ2Ugc2l6ZSBhbGxvd2VkIQotI2VuZGlmCi0KIGV4dGVybiB1bnNpZ25lZCBsb25nIGFzaWRfY2FjaGU7Ci1leHRlcm4gcGdkX3QgKmN1cnJlbnRfcGdkOwotCi0vKgotICogRGVmaW5lIHRoZSBudW1iZXIgb2YgZW50cmllcyBwZXIgYXV0by1yZWZpbGwgd2F5IGluIHNldCAwIG9mIGJvdGggSSBhbmQgRAotICogVExCcy4gIFdlIGRlYWwgb25seSB3aXRoIHNldCAwIGhlcmUgKGFuIGFzc3VtcHRpb24gZnVydGhlciBleHBsYWluZWQgaW4KLSAqIGFzc2VydGlvbnMuaCkuICBBbHNvLCBkZWZpbmUgdGhlIHRvdGFsIG51bWJlciBvZiBBUkYgZW50cmllcyBpbiBib3RoIFRMQnMuCi0gKi8KLQotI2RlZmluZSBJVExCX0VOVFJJRVNfUEVSX0FSRl9XQVkgIChYQ0hBTF9JVExCX1NFVChYQ0hBTF9JVExCX0FSRl9TRVQwLEVOVFJJRVMpKQotI2RlZmluZSBEVExCX0VOVFJJRVNfUEVSX0FSRl9XQVkgIChYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX0FSRl9TRVQwLEVOVFJJRVMpKQotCi0jZGVmaW5lIElUTEJfRU5UUklFUwkJCQkJCQlcCi0gCShJVExCX0VOVFJJRVNfUEVSX0FSRl9XQVkgKiAoWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9BUkZfU0VUMCxXQVlTKSkpCi0jZGVmaW5lIERUTEJfRU5UUklFUwkJCQkJCQlcCi0JKERUTEJfRU5UUklFU19QRVJfQVJGX1dBWSAqIChYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX0FSRl9TRVQwLFdBWVMpKSkKLQotCi0vKgotICogU01BTExFU1RfTlRMQl9FTlRSSUVTIGlzIHRoZSBzbWFsbGVyIG9mIElUTEJfRU5UUklFUyBhbmQgRFRMQl9FTlRSSUVTLgotICogSW4gcHJhY3RpY2UsIHRoZXkgYXJlIHByb2JhYmx5IGVxdWFsLiAgVGhpcyBtYWNybyBzaW1wbGlmaWVzIGZ1bmN0aW9uCi0gKiBmbHVzaF90bGJfcmFuZ2UoKS4KLSAqLwotCi0jaWYgKERUTEJfRU5UUklFUyA8IElUTEJfRU5UUklFUykKLSMgZGVmaW5lIFNNQUxMRVNUX05UTEJfRU5UUklFUyAgRFRMQl9FTlRSSUVTCi0jZWxzZQotIyBkZWZpbmUgU01BTExFU1RfTlRMQl9FTlRSSUVTICBJVExCX0VOVFJJRVMKLSNlbmRpZgotCi0KLS8qCi0gKiBhc2lkX2NhY2hlIHRyYWNrcyBvbmx5IHRoZSBBU0lEW1VTRVJfUklOR10gZmllbGQgb2YgdGhlIFJBU0lEIHNwZWNpYWwKLSAqIHJlZ2lzdGVyLCB3aGljaCBpcyB0aGUgY3VycmVudCB1c2VyLXRhc2sgYXNpZCBhbGxvY2F0aW9uIHZhbHVlLgotICogbW0tPmNvbnRleHQgaGFzIHRoZSBzYW1lIG1lYW5pbmcuICBXaGVuIGl0IGNvbWVzIHRpbWUgdG8gd3JpdGUgdGhlCi0gKiBhc2lkX2NhY2hlIG9yIG1tLT5jb250ZXh0IHZhbHVlcyB0byB0aGUgUkFTSUQgc3BlY2lhbCByZWdpc3Rlciwgd2UgZmlyc3QKLSAqIHNoaWZ0IHRoZSB2YWx1ZSBsZWZ0IGJ5IDgsIHRoZW4gaW5zZXJ0IHRoZSB2YWx1ZS4KLSAqIEFTSURbMF0gYWx3YXlzIGNvbnRhaW5zIHRoZSBrZXJuZWwncyBhc2lkIHZhbHVlLCBhbmQgd2UgcmVzZXJ2ZSB0aHJlZQotICogb3RoZXIgYXNpZCB2YWx1ZXMgdGhhdCB3ZSBuZXZlciBhc3NpZ24gdG8gdXNlciB0YXNrcy4KLSAqLwotCi0jZGVmaW5lIEFTSURfSU5DCTB4MQotI2RlZmluZSBBU0lEX01BU0sJKCgxIDw8IFhDSEFMX01NVV9BU0lEX0JJVFMpIC0gMSkKLQotLyoKLSAqIFhDSEFMX01NVV9BU0lEX0lOVkFMSUQgaXMgYSBjb25maWd1cmFibGUgWHRlbnNhIHByb2Nlc3NvciBjb25zdGFudAotICogaW5kaWNhdGluZyBpbnZhbGlkIGFkZHJlc3Mgc3BhY2UuICBYQ0hBTF9NTVVfQVNJRF9LRVJORUwgaXMgYSBjb25maWd1cmFibGUKLSAqIFh0ZW5zYSBwcm9jZXNzb3IgY29uc3RhbnQgaW5kaWNhdGluZyB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuICBUaGV5IGNhbgotICogYmUgYXJiaXRyYXJ5IHZhbHVlcy4KLSAqCi0gKiBXZSBpZGVudGlmeSB0aHJlZSBtb3JlIHVuaXF1ZSwgcmVzZXJ2ZWQgQVNJRCB2YWx1ZXMgdG8gdXNlIGluIHRoZSB1bnVzZWQKLSAqIHJpbmcgcG9zaXRpb25zLiAgTm8gb3RoZXIgdXNlciBwcm9jZXNzIHdpbGwgYmUgYXNzaWduZWQgdGhlc2UgcmVzZXJ2ZWQKLSAqIEFTSUQgdmFsdWVzLgotICoKLSAqIEZvciBleGFtcGxlLCBnaXZlbiB0aGF0Ci0gKgotICoJWENIQUxfTU1VX0FTSURfSU5WQUxJRCA9PSAwCi0gKglYQ0hBTF9NTVVfQVNJRF9LRVJORUwgID09IDEKLSAqCi0gKiB0aGUgZm9sbG93aW5nIG1hemUgb2YgI2lmIHN0YXRlbWVudHMgd291bGQgZ2VuZXJhdGUKLSAqCi0gKglBU0lEX1JFU0VSVkVEXzEgICAgICAgID09IDIKLSAqCUFTSURfUkVTRVJWRURfMiAgICAgICAgPT0gMwotICoJQVNJRF9SRVNFUlZFRF8zICAgICAgICA9PSA0Ci0gKglBU0lEX0ZJUlNUX05PTlJFU0VSVkVEID09IDUKLSAqLwotCi0jaWYgKFhDSEFMX01NVV9BU0lEX0lOVkFMSUQgIT0gWENIQUxfTU1VX0FTSURfS0VSTkVMICsgMSkKLSMgZGVmaW5lIEFTSURfUkVTRVJWRURfMSAgICAgICAgICgoWENIQUxfTU1VX0FTSURfS0VSTkVMICsgMSkgJiBBU0lEX01BU0spCi0jZWxzZQotIyBkZWZpbmUgQVNJRF9SRVNFUlZFRF8xICAgICAgICAgKChYQ0hBTF9NTVVfQVNJRF9LRVJORUwgKyAyKSAmIEFTSURfTUFTSykKLSNlbmRpZgotCi0jaWYgKFhDSEFMX01NVV9BU0lEX0lOVkFMSUQgIT0gQVNJRF9SRVNFUlZFRF8xICsgMSkKLSMgZGVmaW5lIEFTSURfUkVTRVJWRURfMiAgICAgICAgICgoQVNJRF9SRVNFUlZFRF8xICsgMSkgJiBBU0lEX01BU0spCi0jZWxzZQotIyBkZWZpbmUgQVNJRF9SRVNFUlZFRF8yICAgICAgICAgKChBU0lEX1JFU0VSVkVEXzEgKyAyKSAmIEFTSURfTUFTSykKLSNlbmRpZgotCi0jaWYgKFhDSEFMX01NVV9BU0lEX0lOVkFMSUQgIT0gQVNJRF9SRVNFUlZFRF8yICsgMSkKLSMgZGVmaW5lIEFTSURfUkVTRVJWRURfMyAgICAgICAgICgoQVNJRF9SRVNFUlZFRF8yICsgMSkgJiBBU0lEX01BU0spCi0jZWxzZQotIyBkZWZpbmUgQVNJRF9SRVNFUlZFRF8zICAgICAgICAgKChBU0lEX1JFU0VSVkVEXzIgKyAyKSAmIEFTSURfTUFTSykKLSNlbmRpZgotCi0jaWYgKFhDSEFMX01NVV9BU0lEX0lOVkFMSUQgIT0gQVNJRF9SRVNFUlZFRF8zICsgMSkKLSMgZGVmaW5lIEFTSURfRklSU1RfTk9OUkVTRVJWRUQgICgoQVNJRF9SRVNFUlZFRF8zICsgMSkgJiBBU0lEX01BU0spCi0jZWxzZQotIyBkZWZpbmUgQVNJRF9GSVJTVF9OT05SRVNFUlZFRCAgKChBU0lEX1JFU0VSVkVEXzMgKyAyKSAmIEFTSURfTUFTSykKLSNlbmRpZgotCi0jZGVmaW5lIEFTSURfQUxMX1JFU0VSVkVEICggKChBU0lEX1JFU0VSVkVEXzEpIDw8IDI0KSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFTSURfUkVTRVJWRURfMikgPDwgMTYpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQVNJRF9SRVNFUlZFRF8zKSA8PCAgOCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChYQ0hBTF9NTVVfQVNJRF9LRVJORUwpKSAgICkKLQogCiAvKgogICogTk9fQ09OVEVYVCBpcyB0aGUgaW52YWxpZCBBU0lEIHZhbHVlIHRoYXQgd2UgZG9uJ3QgZXZlciBhc3NpZ24gdG8KLSAqIGFueSB1c2VyIG9yIGtlcm5lbCBjb250ZXh0LiAgTk9fQ09OVEVYVCBpcyBhIGJldHRlciBtbmVtb25pYyB0aGFuCi0gKiBYQ0hBTF9NTVVfQVNJRF9JTlZBTElELCBzbyB3ZSB1c2UgaXQgaW4gY29kZSBpbnN0ZWFkLgorICogYW55IHVzZXIgb3Iga2VybmVsIGNvbnRleHQuCisgKgorICogMCBpbnZhbGlkCisgKiAxIGtlcm5lbAorICogMiByZXNlcnZlZAorICogMyByZXNlcnZlZAorICogNC4uLjI1NSBhdmFpbGFibGUKICAqLwogCi0jZGVmaW5lIE5PX0NPTlRFWFQgICBYQ0hBTF9NTVVfQVNJRF9JTlZBTElECi0KLSNpZiAoS0VSTkVMX1JJTkcgIT0gMCkKLSMgZXJyb3IgVGhlIEtFUk5FTF9SSU5HIHJlYWxseSBzaG91bGQgYmUgemVyby4KLSNlbmRpZgotCi0jaWYgKFVTRVJfUklORyA+PSBYQ0hBTF9NTVVfUklOR1MpCi0jIGVycm9yIFVTRVJfUklORyBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBoaWdoZXN0IG51bWJlcmVkIHJpbmcuCi0jZW5kaWYKLQotI2lmIChVU0VSX1JJTkcgPT0gS0VSTkVMX1JJTkcpCi0jIGVycm9yIFRoZSB1c2VyIGFuZCBrZXJuZWwgcmluZ3MgcmVhbGx5IHNob3VsZCBub3QgYmUgZXF1YWwuCi0jZW5kaWYKLQotI2lmIChVU0VSX1JJTkcgPT0gMSkKLSNkZWZpbmUgQVNJRF9JTlNFUlQoeCkgKCAoKEFTSURfUkVTRVJWRURfMSkgICA8PCAyNCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKChBU0lEX1JFU0VSVkVEXzIpICAgPDwgMTYpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgKEFTSURfTUFTSykpIDw8ICA4KSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKFhDSEFMX01NVV9BU0lEX0tFUk5FTCkpICAgKQotCi0jZWxpZiAoVVNFUl9SSU5HID09IDIpCi0jZGVmaW5lIEFTSURfSU5TRVJUKHgpICggKChBU0lEX1JFU0VSVkVEXzEpICAgPDwgMjQpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgKEFTSURfTUFTSykpIDw8IDE2KSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKEFTSURfUkVTRVJWRURfMikgICA8PCAgOCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKChYQ0hBTF9NTVVfQVNJRF9LRVJORUwpKSAgICkKLQotI2VsaWYgKFVTRVJfUklORyA9PSAzKQotI2RlZmluZSBBU0lEX0lOU0VSVCh4KSAoICgoKHgpICYgKEFTSURfTUFTSykpIDw8IDI0KSArIFwKLQkJCSAoKEFTSURfUkVTRVJWRURfMSkgICA8PCAxNikgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgKChBU0lEX1JFU0VSVkVEXzIpICAgPDwgIDgpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICgoWENIQUxfTU1VX0FTSURfS0VSTkVMKSkgICApCi0KLSNlbHNlCi0jZXJyb3IgR29vZnkgdmFsdWUgZm9yIFVTRVJfUklORwotCi0jZW5kaWYgLyogVVNFUl9SSU5HID09IDEgKi8KLQotCi0vKgotICogIEFsbCB1bnVzZWQgYnkgaGFyZHdhcmUgdXBwZXIgYml0cyB3aWxsIGJlIGNvbnNpZGVyZWQKLSAqICBhcyBhIHNvZnR3YXJlIGFzaWQgZXh0ZW5zaW9uLgotICovCi0KLSNkZWZpbmUgQVNJRF9WRVJTSU9OX01BU0sgICgodW5zaWduZWQgbG9uZyl+KEFTSURfTUFTS3woQVNJRF9NQVNLLTEpKSkKLSNkZWZpbmUgQVNJRF9GSVJTVF9WRVJTSU9OCQkJCQkJXAotCSgodW5zaWduZWQgbG9uZykofkFTSURfVkVSU0lPTl9NQVNLKSArIDEgKyBBU0lEX0ZJUlNUX05PTlJFU0VSVkVEKQorI2RlZmluZSBOT19DT05URVhUCTAKKyNkZWZpbmUgQVNJRF9VU0VSX0ZJUlNUCTQKKyNkZWZpbmUgQVNJRF9NQVNLCSgoMSA8PCBYQ0hBTF9NTVVfQVNJRF9CSVRTKSAtIDEpCisjZGVmaW5lIEFTSURfSU5TRVJUKHgpCSgweDAzMDIwMDAxIHwgKCgoeCkgJiBBU0lEX01BU0spIDw8IDgpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Jhc2lkX3JlZ2lzdGVyICh1bnNpZ25lZCBsb25nIHZhbCkKIHsKQEAgLTIwNyw2NyArNTIsMjggQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfcmFzaWRfcmVnaXN0ZXIgKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgcnNyICUwLCAiX19zdHJpbmdpZnkoUkFTSUQpIlxuXHQiIDogIj1hIiAodG1wKSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIgcnNyICUwLCJfX3N0cmluZ2lmeShSQVNJRCkiXG5cdCIgOiAiPWEiICh0bXApKTsKIAlyZXR1cm4gdG1wOwogfQogCi0KLSNpZiAoKFhDSEFMX01NVV9BU0lEX0lOVkFMSUQgPT0gMCkgJiYgKFhDSEFMX01NVV9BU0lEX0tFUk5FTCA9PSAxKSkKLQogc3RhdGljIGlubGluZSB2b2lkCi1nZXRfbmV3X21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFzaWQpCitfX2dldF9uZXdfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKLQlpZiAoISAoKGFzaWQgKz0gQVNJRF9JTkMpICYgQVNJRF9NQVNLKSApIHsKKwlpZiAoISAoKythc2lkX2NhY2hlICYgQVNJRF9NQVNLKSApIHsKIAkJZmx1c2hfdGxiX2FsbCgpOyAvKiBzdGFydCBuZXcgYXNpZCBjeWNsZSAqLwotCQlpZiAoIWFzaWQpICAgICAgLyogZml4IHZlcnNpb24gaWYgbmVlZGVkICovCi0JCQlhc2lkID0gQVNJRF9GSVJTVF9WRVJTSU9OIC0gQVNJRF9GSVJTVF9OT05SRVNFUlZFRDsKLQkJYXNpZCArPSBBU0lEX0ZJUlNUX05PTlJFU0VSVkVEOworCQlhc2lkX2NhY2hlICs9IEFTSURfVVNFUl9GSVJTVDsKIAl9Ci0JbW0tPmNvbnRleHQgPSBhc2lkX2NhY2hlID0gYXNpZDsKLX0KLQotI2Vsc2UKLSN3YXJuaW5nIEFTSURfe0lOVkFMSUQsS0VSTkVMfSB2YWx1ZXMgaW1wb3NlIG5vbi1vcHRpbWFsIGdldF9uZXdfbW11X2NvbnRleHQgaW1wbGVtZW50YXRpb24KLQotLyogWENIQUxfTU1VX0FTSURfSU5WQUxJRCA9PSAwIGFuZCBYQ0hBTF9NTVVfQVNJRF9LRVJORUwgPT0xIGFyZQotICAgcmVhbGx5IHRoZSBiZXN0LCBidXQgaWYgeW91IGluc2lzdC4uLiAqLwotCi1zdGF0aWMgaW5saW5lIGludCB2YWxpZGF0ZV9hc2lkICh1bnNpZ25lZCBsb25nIGFzaWQpCi17Ci0Jc3dpdGNoIChhc2lkKSB7Ci0JY2FzZSBYQ0hBTF9NTVVfQVNJRF9JTlZBTElEOgotCWNhc2UgWENIQUxfTU1VX0FTSURfS0VSTkVMOgotCWNhc2UgQVNJRF9SRVNFUlZFRF8xOgotCWNhc2UgQVNJRF9SRVNFUlZFRF8yOgotCWNhc2UgQVNJRF9SRVNFUlZFRF8zOgotCQlyZXR1cm4gMDsgLyogY2FuJ3QgdXNlIHRoZXNlIHZhbHVlcyBhcyBBU0lEcyAqLwotCX0KLQlyZXR1cm4gMTsgLyogdmFsaWQgKi8KKwltbS0+Y29udGV4dCA9IGFzaWRfY2FjaGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotZ2V0X25ld19tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhc2lkKQorX19sb2FkX21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCWV4dGVybiB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCk7Ci0Jd2hpbGUgKDEpIHsKLQkJYXNpZCArPSBBU0lEX0lOQzsKLQkJaWYgKCAhIChhc2lkICYgQVNJRF9NQVNLKSApIHsKLQkJCWZsdXNoX3RsYl9hbGwoKTsgLyogc3RhcnQgbmV3IGFzaWQgY3ljbGUgKi8KLQkJCWlmICghYXNpZCkgICAgICAvKiBmaXggdmVyc2lvbiBpZiBuZWVkZWQgKi8KLQkJCQlhc2lkID0gQVNJRF9GSVJTVF9WRVJTSU9OIC0gQVNJRF9GSVJTVF9OT05SRVNFUlZFRDsKLQkJCWFzaWQgKz0gQVNJRF9GSVJTVF9OT05SRVNFUlZFRDsKLQkJCWJyZWFrOyAvKiBubyBuZWVkIHRvIHZhbGlkYXRlIGhlcmUgKi8KLQkJfQotCQlpZiAodmFsaWRhdGVfYXNpZCAoYXNpZCAmIEFTSURfTUFTSykpCi0JCQlicmVhazsKLQl9Ci0JbW0tPmNvbnRleHQgPSBhc2lkX2NhY2hlID0gYXNpZDsKKwlzZXRfcmFzaWRfcmVnaXN0ZXIoQVNJRF9JTlNFUlQobW0tPmNvbnRleHQpKTsKKwlpbnZhbGlkYXRlX3BhZ2VfZGlyZWN0b3J5KCk7CiB9CiAKLSNlbmRpZgotCi0KIC8qCiAgKiBJbml0aWFsaXplIHRoZSBjb250ZXh0IHJlbGF0ZWQgaW5mbyBmb3IgYSBuZXcgbW1fc3RydWN0CiAgKiBpbnN0YW5jZS4KQEAgLTI4MCw2ICs4NiwyMCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogQWZ0ZXIgd2UgaGF2ZSBzZXQgY3VycmVudC0+bW0gdG8gYSBuZXcgdmFsdWUsIHRoaXMgYWN0aXZhdGVzCisgKiB0aGUgY29udGV4dCBmb3IgdGhlIG5ldyBtbSBzbyB3ZSBzZWUgdGhlIG5ldyBtYXBwaW5ncy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCithY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQoreworCS8qIFVuY29uZGl0aW9uYWxseSBnZXQgYSBuZXcgQVNJRC4gICovCisKKwlfX2dldF9uZXdfbW11X2NvbnRleHQobmV4dCk7CisJX19sb2FkX21tdV9jb250ZXh0KG5leHQpOworfQorCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CkBAIC0yODcsMTEgKzEwNywxMCBAQAogCiAJLyogQ2hlY2sgaWYgb3VyIEFTSUQgaXMgb2YgYW4gb2xkZXIgdmVyc2lvbiBhbmQgdGh1cyBpbnZhbGlkICovCiAKLQlpZiAoKG5leHQtPmNvbnRleHQgXiBhc2lkKSAmIEFTSURfVkVSU0lPTl9NQVNLKQotCQlnZXRfbmV3X21tdV9jb250ZXh0KG5leHQsIGFzaWQpOworCWlmIChuZXh0LT5jb250ZXh0ID09IE5PX0NPTlRFWFQgfHwgKChuZXh0LT5jb250ZXh0XmFzaWQpICYgfkFTSURfTUFTSykpCisJCV9fZ2V0X25ld19tbXVfY29udGV4dChuZXh0KTsKIAotCXNldF9yYXNpZF9yZWdpc3RlciAoQVNJRF9JTlNFUlQobmV4dC0+Y29udGV4dCkpOwotCWludmFsaWRhdGVfcGFnZV9kaXJlY3RvcnkoKTsKKwlfX2xvYWRfbW11X2NvbnRleHQobmV4dCk7CiB9CiAKICNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssIG1tKQlkbyB7IH0gd2hpbGUoMCkKQEAgLTMwMiwyMCArMTIxLDYgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQkvKiBOb3RoaW5nIHRvIGRvLiAqLwotfQotCi0vKgotICogQWZ0ZXIgd2UgaGF2ZSBzZXQgY3VycmVudC0+bW0gdG8gYSBuZXcgdmFsdWUsIHRoaXMgYWN0aXZhdGVzCi0gKiB0aGUgY29udGV4dCBmb3IgdGhlIG5ldyBtbSBzbyB3ZSBzZWUgdGhlIG5ldyBtYXBwaW5ncy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1hY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQotewotCS8qIFVuY29uZGl0aW9uYWxseSBnZXQgYSBuZXcgQVNJRC4gICovCi0KLQlnZXRfbmV3X21tdV9jb250ZXh0KG5leHQsIGFzaWRfY2FjaGUpOwotCXNldF9yYXNpZF9yZWdpc3RlciAoQVNJRF9JTlNFUlQobmV4dC0+Y29udGV4dCkpOwogCWludmFsaWRhdGVfcGFnZV9kaXJlY3RvcnkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wYWdlLmgKaW5kZXggNDBmNGM2Yy4uYzYzMWQwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcGFnZS5oCkBAIC0xNSwxOCArMTUsMjQgQEAKIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAorI2RlZmluZSBYQ0hBTF9LU0VHX0NBQ0hFRF9WQUREUiAweGQwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0tTRUdfQllQQVNTX1ZBRERSIDB4ZDgwMDAwMDAKKyNkZWZpbmUgWENIQUxfS1NFR19QQUREUiAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9LU0VHX1NJWkUgICAgICAgICAweDA4MDAwMDAwCisKIC8qCiAgKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZQogICogUEFHRV9BTElHTih4KSBhbGlnbnMgdGhlIHBvaW50ZXIgdG8gdGhlIChuZXh0KSBwYWdlIGJvdW5kYXJ5CiAgKi8KIAotI2RlZmluZSBQQUdFX1NISUZUCQlYQ0hBTF9NTVVfTUlOX1BURV9QQUdFX1NJWkUKKyNkZWZpbmUgUEFHRV9TSElGVAkJMTIKICNkZWZpbmUgUEFHRV9TSVpFCQkoMSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBQQUdFX01BU0sJCSh+KFBBR0VfU0laRS0xKSkKICNkZWZpbmUgUEFHRV9BTElHTihhZGRyKQkoKChhZGRyKStQQUdFX1NJWkUgLSAxKSAmIFBBR0VfTUFTSykKIAotI2RlZmluZSBEQ0FDSEVfV0FZX1NJWkUJCShYQ0hBTF9EQ0FDSEVfU0laRSAvIFhDSEFMX0RDQUNIRV9XQVlTKQogI2RlZmluZSBQQUdFX09GRlNFVAkJWENIQUxfS1NFR19DQUNIRURfVkFERFIKKyNkZWZpbmUgTUFYX01FTV9QRk4gICAgICAgICAgICAgWENIQUxfS1NFR19TSVpFCisjZGVmaW5lIFBHVEFCTEVfU1RBUlQgICAgICAgICAgIDB4ODAwMDAwMDAKIAogI2lmZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wYXJhbS5oCmluZGV4IGMwZWVjODIuLjZmMjgxMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wYXJhbS5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9YVEVOU0FfUEFSQU1fSAogI2RlZmluZSBfWFRFTlNBX1BBUkFNX0gKIAotI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgorI2luY2x1ZGUgPGFzbS92YXJpYW50L2NvcmUuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KICMgZGVmaW5lIEhaCQkxMDAJCS8qIGludGVybmFsIHRpbWVyIGZyZXF1ZW5jeSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wZ3RhYmxlLmgKaW5kZXggYjQzMTg5My4uMmQ0YjVkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcGd0YWJsZS5oCkBAIC0xNCw0NSArMTQsNiBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCi0vKiBBc3NlcnRpb25zLiAqLwotCi0jaWZkZWYgQ09ORklHX01NVQotCi0KLSNpZiAoWENIQUxfTU1VX1JJTkdTIDwgMikKLSMgZXJyb3IgTGludXggYnVpbGQgYXNzdW1lcyBhdCBsZWFzdCAyIHJpbmcgbGV2ZWxzLgotI2VuZGlmCi0KLSNpZiAoWENIQUxfTU1VX0NBX0JJVFMgIT0gNCkKLSMgZXJyb3IgV2UgYXNzdW1lIGV4YWN0bHkgZm91ciBiaXRzIGZvciBDQS4KLSNlbmRpZgotCi0jaWYgKFhDSEFMX01NVV9TUl9CSVRTICE9IDApCi0jIGVycm9yIFdlIGhhdmUgbm8gcm9vbSBmb3IgU1IgYml0cy4KLSNlbmRpZgotCi0vKgotICogVXNlIHRoZSBmaXJzdCBtaW4td2lyZWQgd2F5IGZvciBtYXBwaW5nIHBhZ2UtdGFibGUgcGFnZXMuCi0gKiBQYWdlIGNvbG9yaW5nIHJlcXVpcmVzIGEgc2Vjb25kIG1pbi13aXJlZCB3YXkuCi0gKi8KLQotI2lmIChYQ0hBTF9EVExCX01JTldJUkVEX1NFVFMgPT0gMCkKLSMgZXJyb3IgTmVlZCBhIG1pbi13aXJlZCB3YXkgZm9yIG1hcHBpbmcgcGFnZS10YWJsZSBwYWdlcwotI2VuZGlmCi0KLSNkZWZpbmUgRFRMQl9XQVlfUEdUQUJMRSBYQ0hBTF9EVExCX1NFVChYQ0hBTF9EVExCX01JTldJUkVEX1NFVDAsIFdBWSkKLQotI2lmIChEQ0FDSEVfV0FZX1NJWkUgPiBQQUdFX1NJWkUpICYmIFhDSEFMX0RDQUNIRV9JU19XUklURUJBQ0sKLSMgaWYgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9NSU5XSVJFRF9TRVQwLCBXQVlTKSA+PSAyCi0jICBkZWZpbmUgRFRMQl9XQVlfRENBQ0hFX0FMSUFTMCAoRFRMQl9XQVlfUEdUQUJMRSArIDEpCi0jICBkZWZpbmUgRFRMQl9XQVlfRENBQ0hFX0FMSUFTMSAoRFRMQl9XQVlfUEdUQUJMRSArIDIpCi0jIGVsc2UKLSMgIGVycm9yIFBhZ2UgY29sb3JpbmcgcmVxdWlyZXMgaXRzIG93biB3aXJlZCBkdGxiIHdheSEKLSMgZW5kaWYKLSNlbmRpZgotCi0jZW5kaWYgLyogQ09ORklHX01NVSAqLwotCiAvKgogICogV2Ugb25seSB1c2UgdHdvIHJpbmcgbGV2ZWxzLCB1c2VyIGFuZCBrZXJuZWwgc3BhY2UuCiAgKi8KQEAgLTk3LDcgKzU4LDcgQEAKICNkZWZpbmUgUEdEX09SREVSCQkwCiAjZGVmaW5lIFBNRF9PUkRFUgkJMAogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFL1BHRElSX1NJWkUpCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUyAgICAgIFhDSEFMX1NFR19NQVBQQUJMRV9WQUREUgorI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MgICAgICAwCiAjZGVmaW5lIEZJUlNUX1VTRVJfUEdEX05SCShGSVJTVF9VU0VSX0FERFJFU1MgPj4gUEdESVJfU0hJRlQpCiAKIC8qIHZpcnR1YWwgbWVtb3J5IGFyZWEuIFdlIGtlZXAgYSBkaXN0YW5jZSB0byBvdGhlciBtZW1vcnkgcmVnaW9ucyB0byBiZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLWlzcy9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLWlzcy9oYXJkd2FyZS5oCmluZGV4IDIyMjQwZjAuLjY5MzBjMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS1pc3MvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcGxhdGZvcm0taXNzL2hhcmR3YXJlLmgKQEAgLTEyLDE4ICsxMiwxOCBAQAogICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgSVNTLgogICovCiAKLSNpZm5kZWYgX19BU01fWFRFTlNBX0lTU19IQVJEV0FSRQotI2RlZmluZSBfX0FTTV9YVEVOU0FfSVNTX0hBUkRXQVJFCisjaWZuZGVmIF9YVEVOU0FfUExBVEZPUk1fSVNTX0hBUkRXQVJFX0gKKyNkZWZpbmUgX1hURU5TQV9QTEFURk9STV9JU1NfSEFSRFdBUkVfSAogCiAvKgogICogTWVtb3J5IGNvbmZpZ3VyYXRpb24uCiAgKi8KIAotI2RlZmluZSBQTEFURk9STV9ERUZBVUxUX01FTV9TVEFSVCBYU0hBTF9SQU1fUEFERFIKLSNkZWZpbmUgUExBVEZPUk1fREVGQVVMVF9NRU1fU0laRSBYU0hBTF9SQU1fVlNJWkUKKyNkZWZpbmUgUExBVEZPUk1fREVGQVVMVF9NRU1fU1RBUlQJMHgwMDAwMDAwMAorI2RlZmluZSBQTEFURk9STV9ERUZBVUxUX01FTV9TSVpFCTB4MDgwMDAwMDAKIAogLyoKICAqIEludGVycnVwdCBjb25maWd1cmF0aW9uLgogICovCiAKLSNlbmRpZiAvKiBfX0FTTV9YVEVOU0FfSVNTX0hBUkRXQVJFICovCisjZW5kaWYgLyogX1hURU5TQV9QTEFURk9STV9JU1NfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLWlzcy9zaW1jYWxsLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvcGxhdGZvcm0taXNzL3NpbWNhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWNiNTcyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3BsYXRmb3JtLWlzcy9zaW1jYWxsLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS1pc3MvaGFyZHdhcmUuaAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBUZW5zaWxpY2EgSW5jLgorICovCisKKyNpZm5kZWYgX1hURU5TQV9QTEFURk9STV9JU1NfU0lNQ0FMTF9ICisjZGVmaW5lIF9YVEVOU0FfUExBVEZPUk1fSVNTX1NJTUNBTExfSAorCisKKy8qCisgKiAgU3lzdGVtIGNhbGwgbGlrZSBzZXJ2aWNlcyBvZmZlcmVkIGJ5IHRoZSBzaW11bGF0b3IgaG9zdC4KKyAqLworCisjZGVmaW5lIFNZU19ub3AJCTAJLyogdW51c2VkICovCisjZGVmaW5lIFNZU19leGl0CTEJLyp4Ki8KKyNkZWZpbmUgU1lTX2ZvcmsJMgorI2RlZmluZSBTWVNfcmVhZAkzCS8qeCovCisjZGVmaW5lIFNZU193cml0ZQk0CS8qeCovCisjZGVmaW5lIFNZU19vcGVuCTUJLyp4Ki8KKyNkZWZpbmUgU1lTX2Nsb3NlCTYJLyp4Ki8KKyNkZWZpbmUgU1lTX3JlbmFtZQk3CS8qeCAzOCAtIHdhaXRwaWQgKi8KKyNkZWZpbmUgU1lTX2NyZWF0CTgJLyp4Ki8KKyNkZWZpbmUgU1lTX2xpbmsJOQkvKnggKG5vdCBpbXBsZW1lbnRlZCBvbiBXSU4zMikgKi8KKyNkZWZpbmUgU1lTX3VubGluawkxMAkvKngqLworI2RlZmluZSBTWVNfZXhlY3YJMTEJLyogbi9hIC0gZXhlY3ZlICovCisjZGVmaW5lIFNZU19leGVjdmUJMTIJLyogMTEgLSBjaGRpciAqLworI2RlZmluZSBTWVNfcGlwZQkxMwkvKiA0MiAtIHRpbWUgKi8KKyNkZWZpbmUgU1lTX3N0YXQJMTQJLyogMTA2IC0gbWtub2QgKi8KKyNkZWZpbmUgU1lTX2NobW9kCTE1CisjZGVmaW5lIFNZU19jaG93bgkxNgkvKiAyMDIgLSBsY2hvd24gKi8KKyNkZWZpbmUgU1lTX3V0aW1lCTE3CS8qIDMwIC0gYnJlYWsgKi8KKyNkZWZpbmUgU1lTX3dhaXQJMTgJLyogbi9hIC0gb2xkc3RhdCAqLworI2RlZmluZSBTWVNfbHNlZWsJMTkJLyp4Ki8KKyNkZWZpbmUgU1lTX2dldHBpZAkyMAorI2RlZmluZSBTWVNfaXNhdHR5CTIxCS8qIG4vYSAtIG1vdW50ICovCisjZGVmaW5lIFNZU19mc3RhdAkyMgkvKiAxMDggLSBvbGR1bW91bnQgKi8KKyNkZWZpbmUgU1lTX3RpbWUJMjMJLyogMTMgLSBzZXR1aWQgKi8KKyNkZWZpbmUgU1lTX2dldHRpbWVvZmRheSAyNAkvKnggNzggLSBnZXR1aWQgKG5vdCBpbXBsZW1lbnRlZCBvbiBXSU4zMikgKi8KKyNkZWZpbmUgU1lTX3RpbWVzCTI1CS8qWCA0MyAtIHN0aW1lIChYdGVuc2Etc3BlY2lmaWMgaW1wbGVtZW50YXRpb24pICovCisjZGVmaW5lIFNZU19zb2NrZXQgICAgICAyNgorI2RlZmluZSBTWVNfc2VuZHRvICAgICAgMjcKKyNkZWZpbmUgU1lTX3JlY3Zmcm9tICAgIDI4CisjZGVmaW5lIFNZU19zZWxlY3Rfb25lICAyOSAgICAgIC8qIG5vdCBjb21waXRpYmxlIHNlbGVjdCwgb25lIGZpbGUgZGVzY3JpcHRvciBhdCB0aGUgdGltZSAqLworI2RlZmluZSBTWVNfYmluZCAgICAgICAgMzAKKyNkZWZpbmUgU1lTX2lvY3RsCTMxCisKKy8qCisgKiBTWVNfc2VsZWN0X29uZSBzcGVjaWZpZXJzCisgKi8KKworI2RlZmluZSAgWFRJU1NfU0VMRUNUX09ORV9SRUFEICAgIDEKKyNkZWZpbmUgIFhUSVNTX1NFTEVDVF9PTkVfV1JJVEUgICAyCisjZGVmaW5lICBYVElTU19TRUxFQ1RfT05FX0VYQ0VQVCAgMworCisKKyNlbmRpZiAvKiBfWFRFTlNBX1BMQVRGT1JNX0lTU19TSU1DQUxMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvcG9zaXhfdHlwZXMuaAppbmRleCAyYzgxNmIwLi40YWQ3N2RkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvcG9zaXhfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcG9zaXhfdHlwZXMuaApAQCAtMjEsNyArMjEsNyBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfaW5vX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9tb2RlX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfbmxpbmtfdDsKIHR5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7CiB0eXBlZGVmIGludAkJX19rZXJuZWxfcGlkX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2lwY19waWRfdDsKQEAgLTYwLDcgKzYwLDcgQEAKICNkZWZpbmUJX19GRF9DTFIoZCwgc2V0KQkoKHNldCktPmZkc19iaXRzW19fRkRFTFQoZCldICY9IH5fX0ZETUFTSyhkKSkKICNkZWZpbmUJX19GRF9JU1NFVChkLCBzZXQpCSgoc2V0KS0+ZmRzX2JpdHNbX19GREVMVChkKV0gJiBfX0ZETUFTSyhkKSkKICNkZWZpbmUJX19GRF9aRVJPKHNldCkJXAotICAoKHZvaWQpIG1lbXNldCAoKF9fcHRyX3QpIChzZXQpLCAwLCBzaXplb2YgKF9fa2VybmVsX2ZkX3NldCkpKQorICAoKHZvaWQpIG1lbXNldCAoKHZvaWQgKikgKHNldCksIDAsIHNpemVvZiAoX19rZXJuZWxfZmRfc2V0KSkpCiAKICNlbHNlIC8qIF9fR05VQ19fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wcm9jZXNzb3IuaAppbmRleCA4Yjk2ZTc3Li40ZmViOWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3Byb2Nlc3Nvci5oCkBAIC0xMSwyNCArMTEsMTggQEAKICNpZm5kZWYgX1hURU5TQV9QUk9DRVNTT1JfSAogI2RlZmluZSBfWFRFTlNBX1BST0NFU1NPUl9ICiAKLSNpZmRlZiBfX0FTU0VNQkxZX18KLSNkZWZpbmUgX0FTTUxBTkdVQUdFCi0jZW5kaWYKLQotI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvY29yZS5oPgotI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvc3BlY3JlZy5oPgotI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvdGllLmg+Ci0jaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdmFyaWFudC9jb3JlLmg+CisjaW5jbHVkZSA8YXNtL2NvcHJvY2Vzc29yLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vY29wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcmVncy5oPgogCiAvKiBBc3NlcnRpb25zLiAqLwogCiAjaWYgKFhDSEFMX0hBVkVfV0lORE9XRUQgIT0gMSkKLSNlcnJvciBMaW51eCByZXF1aXJlcyB0aGUgWHRlbnNhIFdpbmRvd2VkIFJlZ2lzdGVycyBPcHRpb24uCisjIGVycm9yIExpbnV4IHJlcXVpcmVzIHRoZSBYdGVuc2EgV2luZG93ZWQgUmVnaXN0ZXJzIE9wdGlvbi4KICNlbmRpZgogCiAvKgpAQCAtMTQ1LDExICsxMzksMTEgQEAKICAqIE5vdGU6IFdlIHNldC11cCBwcyBhcyBpZiB3ZSBkaWQgYSBjYWxsNCB0byB0aGUgbmV3IHBjLgogICogICAgICAgc2V0X3RocmVhZF9zdGF0ZSBpbiBzaWduYWwuYyBkZXBlbmRzIG9uIGl0LgogICovCi0jZGVmaW5lIFVTRVJfUFNfVkFMVUUgKCAoMSA8PCBYQ0hBTF9QU19XT0VfU0hJRlQpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgWENIQUxfUFNfQ0FMTElOQ19TSElGVCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoVVNFUl9SSU5HIDw8IFhDSEFMX1BTX1JJTkdfU0hJRlQpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgWENIQUxfUFNfUFJPR1NUQUNLX1NISUZUKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IFhDSEFMX1BTX0VYQ01fU0hJRlQpICkKKyNkZWZpbmUgVVNFUl9QU19WQUxVRSAoKDEgPDwgUFNfV09FX0JJVCkgfAkJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IFBTX0NBTExJTkNfU0hJRlQpIHwJCQlcCisgICAgICAgICAgICAgICAgICAgICAgIChVU0VSX1JJTkcgPDwgUFNfUklOR19TSElGVCkgfAkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgUFNfVU1fQklUKSB8CQkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgUFNfRVhDTV9CSVQpKQogCiAvKiBDbGVhcmluZyBhMCB0ZXJtaW5hdGVzIHRoZSBiYWNrdHJhY2UuICovCiAjZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBuZXdfcGMsIG5ld19zcCkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3B0cmFjZS5oCmluZGV4IGE1YWM3MWEuLjFiN2ZlMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcHRyYWNlLmgKQEAgLTExLDcgKzExLDcgQEAKICNpZm5kZWYgX1hURU5TQV9QVFJBQ0VfSAogI2RlZmluZSBfWFRFTlNBX1BUUkFDRV9ICiAKLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vdmFyaWFudC9jb3JlLmg+CiAKIC8qCiAgKiBLZXJuZWwgc3RhY2sKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9yZWdzLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MTNkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcmVncy5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFRlbnNpbGljYSwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMi4xIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogRnVydGhlciwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSB0aGF0IGl0IGlzCisgKiBmcmVlIG9mIHRoZSByaWdodGZ1bCBjbGFpbSBvZiBhbnkgdGhpcmQgcGVyc29uIHJlZ2FyZGluZyBpbmZyaW5nZW1lbnQKKyAqIG9yIHRoZSBsaWtlLiAgQW55IGxpY2Vuc2UgcHJvdmlkZWQgaGVyZWluLCB3aGV0aGVyIGltcGxpZWQgb3IKKyAqIG90aGVyd2lzZSwgYXBwbGllcyBvbmx5IHRvIHRoaXMgc29mdHdhcmUgZmlsZS4gIFBhdGVudCBsaWNlbnNlcywgaWYKKyAqIGFueSwgcHJvdmlkZWQgaGVyZWluIGRvIG5vdCBhcHBseSB0byBjb21iaW5hdGlvbnMgb2YgdGhpcyBwcm9ncmFtIHdpdGgKKyAqIG90aGVyIHNvZnR3YXJlLCBvciBhbnkgb3RoZXIgcHJvZHVjdCB3aGF0c29ldmVyLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2lmbmRlZiBfWFRFTlNBX1JFR1NfSAorI2RlZmluZSBfWFRFTlNBX1JFR1NfSAorCisvKiAgU3BlY2lhbCByZWdpc3RlcnMuICAqLworCisjZGVmaW5lIExCRUcJCTAKKyNkZWZpbmUgTEVORAkJMQorI2RlZmluZSBMQ09VTlQJCTIKKyNkZWZpbmUgU0FSCQkzCisjZGVmaW5lIEJSCQk0CisjZGVmaW5lIFNDT01QQVJFMQkxMgorI2RlZmluZSBBQ0NISQkJMTYKKyNkZWZpbmUgQUNDTE8JCTE3CisjZGVmaW5lIE1SCQkzMgorI2RlZmluZSBXSU5ET1dCQVNFCTcyCisjZGVmaW5lIFdJTkRPV1NUQVJUCTczCisjZGVmaW5lIFBURVZBRERSCTgzCisjZGVmaW5lIFJBU0lECQk5MAorI2RlZmluZSBJVExCQ0ZHCQk5MQorI2RlZmluZSBEVExCQ0ZHCQk5MgorI2RlZmluZSBJQlJFQUtFTkFCTEUJOTYKKyNkZWZpbmUgRERSCQkxMDQKKyNkZWZpbmUgSUJSRUFLQQkJMTI4CisjZGVmaW5lIERCUkVBS0EJCTE0NAorI2RlZmluZSBEQlJFQUtDCQkxNjAKKyNkZWZpbmUgRVBDCQkxNzYKKyNkZWZpbmUgRVBDXzEJCTE3NworI2RlZmluZSBERVBDCQkxOTIKKyNkZWZpbmUgRVBTCQkxOTIKKyNkZWZpbmUgRVBTXzEJCTE5MworI2RlZmluZSBFWENTQVZFCQkyMDgKKyNkZWZpbmUgRVhDU0FWRV8xCTIwOQorI2RlZmluZSBJTlRFUlJVUFQJMjI2CisjZGVmaW5lIElOVEVOQUJMRQkyMjgKKyNkZWZpbmUgUFMJCTIzMAorI2RlZmluZSBUSFJFQURQVFIJMjMxCisjZGVmaW5lIEVYQ0NBVVNFCTIzMgorI2RlZmluZSBERUJVR0NBVVNFCTIzMworI2RlZmluZSBDQ09VTlQJCTIzNAorI2RlZmluZSBQUklECQkyMzUKKyNkZWZpbmUgSUNPVU5UCQkyMzYKKyNkZWZpbmUgSUNPVU5UTEVWRUwJMjM3CisjZGVmaW5lIEVYQ1ZBRERSCTIzOAorI2RlZmluZSBDQ09NUEFSRQkyNDAKKyNkZWZpbmUgTUlTQwkJMjQ0CisKKy8qICBTcGVjaWFsIG5hbWVzIGZvciByZWFkLW9ubHkgYW5kIHdyaXRlLW9ubHkgaW50ZXJydXB0IHJlZ2lzdGVycy4gICovCisKKyNkZWZpbmUgSU5UUkVBRAkJMjI2CisjZGVmaW5lIElOVFNFVAkJMjI2CisjZGVmaW5lIElOVENMRUFSCTIyNworCisvKiAgRVhDQ0FVU0UgcmVnaXN0ZXIgZmllbGRzICAqLworCisjZGVmaW5lIEVYQ0NBVVNFX0VYQ0NBVVNFX1NISUZUCTAKKyNkZWZpbmUgRVhDQ0FVU0VfRVhDQ0FVU0VfTUFTSwkweDNGCisKKyNkZWZpbmUgRVhDQ0FVU0VfSUxMRUdBTF9JTlNUUlVDVElPTgkJMAorI2RlZmluZSBFWENDQVVTRV9TWVNURU1fQ0FMTAkJCTEKKyNkZWZpbmUgRVhDQ0FVU0VfSU5TVFJVQ1RJT05fRkVUQ0hfRVJST1IJMgorI2RlZmluZSBFWENDQVVTRV9MT0FEX1NUT1JFX0VSUk9SCQkzCisjZGVmaW5lIEVYQ0NBVVNFX0xFVkVMMV9JTlRFUlJVUFQJCTQKKyNkZWZpbmUgRVhDQ0FVU0VfQUxMT0NBCQkJCTUKKyNkZWZpbmUgRVhDQ0FVU0VfSU5URUdFUl9ESVZJREVfQllfWkVSTwkJNgorI2RlZmluZSBFWENDQVVTRV9TUEVDVUxBVElPTgkJCTcKKyNkZWZpbmUgRVhDQ0FVU0VfUFJJVklMRUdFRAkJCTgKKyNkZWZpbmUgRVhDQ0FVU0VfVU5BTElHTkVECQkJOQorI2RlZmluZSBFWENDQVVTRV9JVExCX01JU1MJCQkxNgorI2RlZmluZSBFWENDQVVTRV9JVExCX01VTFRJSElUCQkJMTcKKyNkZWZpbmUgRVhDQ0FVU0VfSVRMQl9QUklWSUxFR0UJCQkxOAorI2RlZmluZSBFWENDQVVTRV9JVExCX1NJWkVfUkVTVFJJQ1RJT04JCTE5CisjZGVmaW5lIEVYQ0NBVVNFX0ZFVENIX0NBQ0hFX0FUVFJJQlVURQkJMjAKKyNkZWZpbmUgRVhDQ0FVU0VfRFRMQl9NSVNTCQkJMjQKKyNkZWZpbmUgRVhDQ0FVU0VfRFRMQl9NVUxUSUhJVAkJCTI1CisjZGVmaW5lIEVYQ0NBVVNFX0RUTEJfUFJJVklMRUdFCQkJMjYKKyNkZWZpbmUgRVhDQ0FVU0VfRFRMQl9TSVpFX1JFU1RSSUNUSU9OCQkyNworI2RlZmluZSBFWENDQVVTRV9MT0FEX0NBQ0hFX0FUVFJJQlVURQkJMjgKKyNkZWZpbmUgRVhDQ0FVU0VfU1RPUkVfQ0FDSEVfQVRUUklCVVRFCQkyOQorI2RlZmluZSBFWENDQVVTRV9GTE9BVElOR19QT0lOVAkJCTQwCisKKy8qICBQUyByZWdpc3RlciBmaWVsZHMuICAqLworCisjZGVmaW5lIFBTX1dPRV9CSVQJCTE4CisjZGVmaW5lIFBTX0NBTExJTkNfU0hJRlQJMTYKKyNkZWZpbmUgUFNfQ0FMTElOQ19NQVNLCQkweDAwMDMwMDAwCisjZGVmaW5lIFBTX09XQl9TSElGVAkJOAorI2RlZmluZSBQU19PV0JfTUFTSwkJMHgwMDAwMEYwMAorI2RlZmluZSBQU19SSU5HX1NISUZUCQk2CisjZGVmaW5lIFBTX1JJTkdfTUFTSwkJMHgwMDAwMDBDMAorI2RlZmluZSBQU19VTV9CSVQJCTUKKyNkZWZpbmUgUFNfRVhDTV9CSVQJCTQKKyNkZWZpbmUgUFNfSU5UTEVWRUxfU0hJRlQJMAorI2RlZmluZSBQU19JTlRMRVZFTF9NQVNLCTB4MDAwMDAwMEYKKworLyogIERCUkVBS0NuIHJlZ2lzdGVyIGZpZWxkcy4gICovCisKKyNkZWZpbmUgREJSRUFLQ19NQVNLX0JJVAkJMAorI2RlZmluZSBEQlJFQUtDX01BU0tfTUFTSwkJMHgwMDAwMDAzRgorI2RlZmluZSBEQlJFQUtDX0xPQURfQklUCQkzMAorI2RlZmluZSBEQlJFQUtDX0xPQURfTUFTSwkJMHg0MDAwMDAwMAorI2RlZmluZSBEQlJFQUtDX1NUT1JfQklUCQkzMQorI2RlZmluZSBEQlJFQUtDX1NUT1JfTUFTSwkJMHg4MDAwMDAwMAorCisvKiAgREVCVUdDQVVTRSByZWdpc3RlciBmaWVsZHMuICAqLworCisjZGVmaW5lIERFQlVHQ0FVU0VfREVCVUdJTlRfQklUCQk1CS8qIEV4dGVybmFsIGRlYnVnIGludGVycnVwdCAqLworI2RlZmluZSBERUJVR0NBVVNFX0JSRUFLTl9CSVQJCTQJLyogQlJFQUsuTiBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBERUJVR0NBVVNFX0JSRUFLX0JJVAkJMwkvKiBCUkVBSyBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBERUJVR0NBVVNFX0RCUkVBS19CSVQJCTIJLyogREJSRUFLIG1hdGNoICovCisjZGVmaW5lIERFQlVHQ0FVU0VfSUJSRUFLX0JJVAkJMQkvKiBJQlJFQUsgbWF0Y2ggKi8KKyNkZWZpbmUgREVCVUdDQVVTRV9JQ09VTlRfQklUCQkwCS8qIElDT1VOVCB3b3VsZCBpbmNyLiB0byB6ZXJvICovCisKKyNlbmRpZiAvKiBfWFRFTlNBX1NQRUNSRUdfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2Evc2VtYnVmLmggYi9pbmNsdWRlL2FzbS14dGVuc2Evc2VtYnVmLmgKaW5kZXggMmQyNmM0Ny4uYzE1ODcwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3NlbWJ1Zi5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zZW1idWYuaApAQCAtMjUsNyArMjUsNyBAQAogCiBzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CiAJc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkvKiBwZXJtaXNzaW9ucyAuLiBzZWUgaXBjLmggKi8KLSNpZiBYQ0hBTF9IQVZFX0xFCisjaWZkZWYgX19YVEVOU0FfRUxfXwogCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkvKiBsYXN0IHNlbW9wIHRpbWUgKi8KIAl1bnNpZ25lZCBsb25nCV9fdW51c2VkMTsKIAlfX2tlcm5lbF90aW1lX3QJc2VtX2N0aW1lOwkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3NobWJ1Zi5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3NobWJ1Zi5oCmluZGV4IGEzMGI4MWEuLmFkNGIwMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zaG1idWYuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2Evc2htYnVmLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpZm5kZWYgX1hURU5TQV9TSE1CVUZfSAogI2RlZmluZSBfWFRFTlNBX1NITUJVRl9ICiAKKyNpZiBkZWZpbmVkIChfX1hURU5TQV9FTF9fKQogc3RydWN0IHNobWlkNjRfZHMgewogCXN0cnVjdCBpcGM2NF9wZXJtCXNobV9wZXJtOwkvKiBvcGVyYXRpb24gcGVybXMgKi8KIAlzaXplX3QJCQlzaG1fc2Vnc3o7CS8qIHNpemUgb2Ygc2VnbWVudCAoYnl0ZXMpICovCkBAIC0zNCw2ICszNSwyNiBAQAogCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNDsKIAl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDU7CiB9OworI2VsaWYgZGVmaW5lZCAoX19YVEVOU0FfRUJfXykKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKwlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCisJc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLworCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOworCV9fa2VybmVsX3RpbWVfdAkJc2htX2R0aW1lOwkvKiBsYXN0IGRldGFjaCB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOworCV9fa2VybmVsX3RpbWVfdAkJc2htX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQzOworCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KKwlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCisJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KKwl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZwkJX191bnVzZWQ1OworfTsKKyNlbHNlCisjIGVycm9yIGVuZGlhbiBvcmRlciBub3QgZGVmaW5lZAorI2VuZGlmCisKIAogc3RydWN0IHNobWluZm82NCB7CiAJdW5zaWduZWQgbG9uZwlzaG1tYXg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2Evc3RhdC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3N0YXQuaAppbmRleCAyZjQ2NjJmLi4xNDlmNGJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2Evc3RhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zdGF0LmgKQEAgLTEzLDkzICsxMyw1NyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKLQl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7Ci0JdW5zaWduZWQgc2hvcnQgc3RfaW5vOwotCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7Ci0JdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7Ci0JdW5zaWduZWQgc2hvcnQgc3RfdWlkOwotCXVuc2lnbmVkIHNob3J0IHN0X2dpZDsKLQl1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwotCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Ci19OwotCiAjZGVmaW5lIFNUQVRfSEFWRV9OU0VDIDEKIAogc3RydWN0IHN0YXQgewotCXVuc2lnbmVkIHNob3J0IHN0X2RldjsKLQl1bnNpZ25lZCBzaG9ydCBfX3BhZDE7Ci0JdW5zaWduZWQgbG9uZyBzdF9pbm87Ci0JdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKLQl1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKLQl1bnNpZ25lZCBzaG9ydCBzdF91aWQ7Ci0JdW5zaWduZWQgc2hvcnQgc3RfZ2lkOwotCXVuc2lnbmVkIHNob3J0IHN0X3JkZXY7Ci0JdW5zaWduZWQgc2hvcnQgX19wYWQyOwotCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfYmxrc2l6ZTsKLQl1bnNpZ25lZCBsb25nICBzdF9ibG9ja3M7Ci0JdW5zaWduZWQgbG9uZyAgc3RfYXRpbWU7Ci0JdW5zaWduZWQgbG9uZyAgc3RfYXRpbWVfbnNlYzsKLQl1bnNpZ25lZCBsb25nICBzdF9tdGltZTsKLQl1bnNpZ25lZCBsb25nICBzdF9tdGltZV9uc2VjOwotCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lOwotCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lX25zZWM7Ci0JdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OwotCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKKwl1bnNpZ25lZCBsb25nCXN0X2RldjsKKwlpbm9fdAkJc3RfaW5vOworCW1vZGVfdAkJc3RfbW9kZTsKKwlubGlua190CQlzdF9ubGluazsKKwl1aWRfdAkJc3RfdWlkOworCWdpZF90CQlzdF9naWQ7CisJdW5zaWduZWQgaW50CXN0X3JkZXY7CisJb2ZmX3QJCXN0X3NpemU7CisJdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOworCXVuc2lnbmVkIGxvbmcJc3RfYmxvY2tzOworCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9hdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9tdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcJc3RfY3RpbWU7CisJdW5zaWduZWQgbG9uZwlzdF9jdGltZV9uc2VjOworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OworCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ1OwogfTsKIAotLyogVGhpcyBtYXRjaGVzIHN0cnVjdCBzdGF0NjQgaW4gZ2xpYmMtMi4yLjMuICovCisvKiBUaGlzIG1hdGNoZXMgc3RydWN0IHN0YXQ2NCBpbiBnbGliYy0yLjMgKi8KIAogc3RydWN0IHN0YXQ2NCAgewotI2lmZGVmIF9fWFRFTlNBX0VMX18KLQl1bnNpZ25lZCBzaG9ydAlzdF9kZXY7CQkvKiBEZXZpY2UgKi8KLQl1bnNpZ25lZCBjaGFyCV9fcGFkMFsxMF07Ci0jZWxzZQotCXVuc2lnbmVkIGNoYXIJX19wYWQwWzZdOwotCXVuc2lnbmVkIHNob3J0CXN0X2RldjsKLQl1bnNpZ25lZCBjaGFyCV9fcGFkMVsyXTsKLSNlbmRpZgotCi0jZGVmaW5lIFNUQVQ2NF9IQVNfQlJPS0VOX1NUX0lOTwkxCi0JdW5zaWduZWQgbG9uZyBfX3N0X2lubzsJCS8qIDMyYml0IGZpbGUgc2VyaWFsIG51bWJlci4gKi8KLQorCXVuc2lnbmVkIGxvbmcgbG9uZyBzdF9kZXY7CS8qIERldmljZSAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdF9pbm87CS8qIEZpbGUgc2VyaWFsIG51bWJlciAqLwogCXVuc2lnbmVkIGludCAgc3RfbW9kZTsJCS8qIEZpbGUgbW9kZS4gKi8KIAl1bnNpZ25lZCBpbnQgIHN0X25saW5rOwkJLyogTGluayBjb3VudC4gKi8KIAl1bnNpZ25lZCBpbnQgIHN0X3VpZDsJCS8qIFVzZXIgSUQgb2YgdGhlIGZpbGUncyBvd25lci4gKi8KIAl1bnNpZ25lZCBpbnQgIHN0X2dpZDsJCS8qIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAuICovCi0KLSNpZmRlZiBfX1hURU5TQV9FTF9fCi0JdW5zaWduZWQgc2hvcnQJc3RfcmRldjsJLyogRGV2aWNlIG51bWJlciwgaWYgZGV2aWNlLiAqLwotCXVuc2lnbmVkIGNoYXIJX19wYWQzWzEwXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RfcmRldjsJLyogRGV2aWNlIG51bWJlciwgaWYgZGV2aWNlLiAqLworCWxvbmcgbG9uZyBzdF9zaXplOwkJLyogU2l6ZSBvZiBmaWxlLCBpbiBieXRlcy4gKi8KKwlsb25nIHN0X2Jsa3NpemU7CQkvKiBPcHRpbWFsIGJsb2NrIHNpemUgZm9yIEkvTy4gKi8KKwl1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKKyNpZmRlZiBfX1hURU5TQV9FQl9fCisJdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CisJbG9uZyBzdF9ibG9ja3M7CQkJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCiAjZWxzZQotCXVuc2lnbmVkIGNoYXIJX19wYWQyWzZdOwotCXVuc2lnbmVkIHNob3J0CXN0X3JkZXY7Ci0JdW5zaWduZWQgY2hhcglfX3BhZDNbMl07CisJbG9uZyBzdF9ibG9ja3M7CQkJLyogTnVtYmVyIDUxMi1ieXRlIGJsb2NrcyBhbGxvY2F0ZWQuICovCisJdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CiAjZW5kaWYKLQotCWxvbmcgbG9uZyBpbnQgIHN0X3NpemU7CQkvKiBTaXplIG9mIGZpbGUsIGluIGJ5dGVzLiAqLwotCWxvbmcgaW50IHN0X2Jsa3NpemU7CQkvKiBPcHRpbWFsIGJsb2NrIHNpemUgZm9yIEkvTy4gKi8KLQotI2lmZGVmIF9fWFRFTlNBX0VMX18KLQl1bnNpZ25lZCBsb25nICBzdF9ibG9ja3M7CS8qIE51bWJlciA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkLiAqLwotCXVuc2lnbmVkIGxvbmcgIF9fcGFkNDsKLSNlbHNlCi0JdW5zaWduZWQgbG9uZyAgX19wYWQ0OwotCXVuc2lnbmVkIGxvbmcgIHN0X2Jsb2NrczsKLSNlbmRpZgotCi0JdW5zaWduZWQgbG9uZyAgX19wYWQ1OwotCWxvbmcgaW50IHN0X2F0aW1lOwkJLyogVGltZSBvZiBsYXN0IGFjY2Vzcy4gKi8KLQl1bnNpZ25lZCBsb25nICBzdF9hdGltZV9uc2VjOwotCWxvbmcgaW50IHN0X210aW1lOwkJLyogVGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbi4gKi8KLQl1bnNpZ25lZCBsb25nICBzdF9tdGltZV9uc2VjOwotCWxvbmcgaW50ICBzdF9jdGltZTsJCS8qIFRpbWUgb2YgbGFzdCBzdGF0dXMgY2hhbmdlLiAqLwotCXVuc2lnbmVkIGxvbmcgIHN0X2N0aW1lX25zZWM7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGludCBzdF9pbm87CS8qIEZpbGUgc2VyaWFsIG51bWJlci4gKi8KKwlsb25nIHN0X2F0aW1lOwkJCS8qIFRpbWUgb2YgbGFzdCBhY2Nlc3MuICovCisJdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOworCWxvbmcgc3RfbXRpbWU7CQkJLyogVGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbi4gKi8KKwl1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7CisJbG9uZyBzdF9jdGltZTsJCQkvKiBUaW1lIG9mIGxhc3Qgc3RhdHVzIGNoYW5nZS4gKi8KKwl1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7CisJdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CisJdW5zaWduZWQgbG9uZyBfX3VudXNlZDU7CiB9OwogCiAjZW5kaWYJLyogX1hURU5TQV9TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXNjYWxsLmggYi9pbmNsdWRlL2FzbS14dGVuc2Evc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjBkNDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2Evc3lzY2FsbC5oCkBAIC0wLDAgKzEsMjAgQEAKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IHNpZ2FjdGlvbjsKK2FzbWxpbmthZ2UgbG9uZyB4dGVuc2FfZXhlY3ZlKGNoYXIqLCBjaGFyKiosIGNoYXIqKiwgc3RydWN0IHB0X3JlZ3MqKTsKK2FzbWxpbmthZ2UgbG9uZyB4dGVuc2FfY2xvbmUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0IHB0X3JlZ3MqKTsKK2FzbWxpbmthZ2UgbG9uZyB4dGVuc2FfcGlwZShpbnQgX191c2VyICopOworYXNtbGlua2FnZSBsb25nIHh0ZW5zYV9tbWFwMih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorICAgIAkJCSAgICAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cithc21saW5rYWdlIGxvbmcgeHRlbnNhX3B0cmFjZShsb25nLCBsb25nLCBsb25nLCBsb25nKTsKK2FzbWxpbmthZ2UgbG9uZyB4dGVuc2Ffc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzKik7Cithc21saW5rYWdlIGxvbmcgeHRlbnNhX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyopOworYXNtbGlua2FnZSBsb25nIHh0ZW5zYV9zaWdzdXNwZW5kKHN0cnVjdCBwdF9yZWdzKik7Cithc21saW5rYWdlIGxvbmcgeHRlbnNhX3J0X3NpZ3N1c3BlbmQoc3RydWN0IHB0X3JlZ3MqKTsKK2FzbWxpbmthZ2UgbG9uZyB4dGVuc2Ffc2lnYWN0aW9uKGludCwgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24qLAorCQkJCSBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiopOworYXNtbGlua2FnZSBsb25nIHh0ZW5zYV9zaWdhbHRzdGFjayhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cithc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ2FjdGlvbihpbnQsCisJCQkJIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICosCisJCQkJIHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICosCisJCQkJIHNpemVfdCk7Cithc21saW5rYWdlIGxvbmcgeHRlbnNhX3NobWF0KGludCBzaG1pZCwgY2hhciBfX3VzZXIgKnNobWFkZHIsIGludCBzaG1mbGcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCmluZGV4IDkzMmJkYTkuLjRhYWVkN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXVuc2lnbmVkIGludCBhMCwgcHM7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSJtb3ZpCWExNCwiIF9fc3RyaW5naWZ5IChQU19FWENNX01BU0spICIgfCAxXG5cdCIKKwkJIm1vdmkJYTE0LCIgX19zdHJpbmdpZnkgKFBTX0VYQ01fQklUKSAiIHwgMVxuXHQiCiAJCSJtb3YJYTEyLCBhMFxuXHQiCiAJCSJyc3IJYTEzLCIgX19zdHJpbmdpZnkoU0FSKSAiXG5cdCIKIAkJInhzcglhMTQsIiBfX3N0cmluZ2lmeShQUykgIlxuXHQiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS90ZXJtYml0cy5oCmluZGV4IGM3ODA1OTMuLjA1N2I5YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS90ZXJtYml0cy5oCkBAIC0zMCw2ICszMCwxNyBAQAogCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLwogfTsKIAorc3RydWN0IGt0ZXJtaW9zIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KK307CisKIC8qIGNfY2MgY2hhcmFjdGVycyAqLwogCiAjZGVmaW5lIFZJTlRSIDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS90aW1leC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3RpbWV4LmgKaW5kZXggYzdiNzA1ZS4uMjhjNzk4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3RpbWV4LmgKQEAgLTE2LDE3ICsxNiwyMiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAotI2lmIFhDSEFMX0lOVF9MRVZFTChYQ0hBTF9USU1FUjBfSU5URVJSVVBUKSA9PSAxCisjZGVmaW5lIF9JTlRMRVZFTCh4KQlYQ0hBTF9JTlQgIyMgeCAjIyBfTEVWRUwKKyNkZWZpbmUgSU5UTEVWRUwoeCkJX0lOVExFVkVMKHgpCisKKyNpZiBJTlRMRVZFTChYQ0hBTF9USU1FUjBfSU5URVJSVVBUKSA9PSAxCiAjIGRlZmluZSBMSU5VWF9USU1FUiAgICAgMAotI2VsaWYgWENIQUxfSU5UX0xFVkVMKFhDSEFMX1RJTUVSMV9JTlRFUlJVUFQpID09IDEKKyMgZGVmaW5lIExJTlVYX1RJTUVSX0lOVCBYQ0hBTF9USU1FUjBfSU5URVJSVVBUCisjZWxpZiBJTlRMRVZFTChYQ0hBTF9USU1FUjFfSU5URVJSVVBUKSA9PSAxCiAjIGRlZmluZSBMSU5VWF9USU1FUiAgICAgMQotI2VsaWYgWENIQUxfSU5UX0xFVkVMKFhDSEFMX1RJTUVSMl9JTlRFUlJVUFQpID09IDEKKyMgZGVmaW5lIExJTlVYX1RJTUVSX0lOVCBYQ0hBTF9USU1FUjFfSU5URVJSVVBUCisjZWxpZiBJTlRMRVZFTChYQ0hBTF9USU1FUjJfSU5URVJSVVBUKSA9PSAxCiAjIGRlZmluZSBMSU5VWF9USU1FUiAgICAgMgorIyBkZWZpbmUgTElOVVhfVElNRVJfSU5UIFhDSEFMX1RJTUVSMl9JTlRFUlJVUFQKICNlbHNlCiAjIGVycm9yICJCYWQgdGltZXIgbnVtYmVyIGZvciBMaW51eCBjb25maWd1cmF0aW9ucyEiCiAjZW5kaWYKIAotI2RlZmluZSBMSU5VWF9USU1FUl9JTlQgICAgICAgICBYQ0hBTF9USU1FUl9JTlRFUlJVUFQoTElOVVhfVElNRVIpCiAjZGVmaW5lIExJTlVYX1RJTUVSX01BU0sgICAgICAgICgxTCA8PCBMSU5VWF9USU1FUl9JTlQpCiAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIAkxMTkzMTgwCS8qIChldmVyeW9uZSBpcyB1c2luZyB0aGlzIHZhbHVlKSAqLwpAQCAtNjAsOCArNjUsOCBAQAogCiAjZGVmaW5lIFdTUl9DQ09VTlQocikJICBfX2FzbV9fKCJ3c3IgJTAsIl9fc3RyaW5naWZ5KENDT1VOVCkgOjogImEiIChyKSkKICNkZWZpbmUgUlNSX0NDT1VOVChyKQkgIF9fYXNtX18oInJzciAlMCwiX19zdHJpbmdpZnkoQ0NPVU5UKSA6ICI9YSIgKHIpKQotI2RlZmluZSBXU1JfQ0NPTVBBUkUoeCxyKSBfX2FzbV9fKCJ3c3IgJTAsIl9fc3RyaW5naWZ5KENDT01QQVJFXzApIisiX19zdHJpbmdpZnkoeCkgOjogImEiKHIpKQotI2RlZmluZSBSU1JfQ0NPTVBBUkUoeCxyKSBfX2FzbV9fKCJyc3IgJTAsIl9fc3RyaW5naWZ5KENDT01QQVJFXzApIisiX19zdHJpbmdpZnkoeCkgOiAiPWEiKHIpKQorI2RlZmluZSBXU1JfQ0NPTVBBUkUoeCxyKSBfX2FzbV9fKCJ3c3IgJTAsIl9fc3RyaW5naWZ5KENDT01QQVJFKSIrIl9fc3RyaW5naWZ5KHgpIDo6ICJhIihyKSkKKyNkZWZpbmUgUlNSX0NDT01QQVJFKHgscikgX19hc21fXygicnNyICUwLCJfX3N0cmluZ2lmeShDQ09NUEFSRSkiKyJfX3N0cmluZ2lmeSh4KSA6ICI9YSIocikpCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfY2NvdW50ICh2b2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvdGxiZmx1c2guaAppbmRleCA0M2Y2ZWM4Li43YzYzN2IzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdGxiZmx1c2guaApAQCAtMTEsMTIgKzExLDIwIEBACiAjaWZuZGVmIF9YVEVOU0FfVExCRkxVU0hfSAogI2RlZmluZSBfWFRFTlNBX1RMQkZMVVNIX0gKIAotI2RlZmluZSBERUJVR19UTEIKLQogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNkZWZpbmUgRFRMQl9XQVlfUEdECTcKKworI2RlZmluZSBJVExCX0FSRl9XQVlTCTQKKyNkZWZpbmUgRFRMQl9BUkZfV0FZUwk0CisKKyNkZWZpbmUgSVRMQl9ISVRfQklUCTMKKyNkZWZpbmUgRFRMQl9ISVRfQklUCTQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogLyogVExCIGZsdXNoaW5nOgogICoKQEAgLTQ2LDExICs1NCw2IEBACiAKIC8qIFRMQiBvcGVyYXRpb25zLiAqLwogCi0jZGVmaW5lIElUTEJfV0FZU19MT0cyICAgICAgWENIQUxfSVRMQl9XQVlfQklUUwotI2RlZmluZSBEVExCX1dBWVNfTE9HMiAgICAgIFhDSEFMX0RUTEJfV0FZX0JJVFMKLSNkZWZpbmUgSVRMQl9QUk9CRV9TVUNDRVNTICAoMSA8PCBJVExCX1dBWVNfTE9HMikKLSNkZWZpbmUgRFRMQl9QUk9CRV9TVUNDRVNTICAoMSA8PCBEVExCX1dBWVNfTE9HMikKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGl0bGJfcHJvYmUodW5zaWduZWQgbG9uZyBhZGRyKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwpAQCAtMTMxLDI5ICsxMzQsMzAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfcGFnZV9kaXJlY3RvcnkgKHZvaWQpCiB7Ci0JaW52YWxpZGF0ZV9kdGxiX2VudHJ5IChEVExCX1dBWV9QR1RBQkxFKTsKKwlpbnZhbGlkYXRlX2R0bGJfZW50cnkgKERUTEJfV0FZX1BHRCk7CisJaW52YWxpZGF0ZV9kdGxiX2VudHJ5IChEVExCX1dBWV9QR0QrMSk7CisJaW52YWxpZGF0ZV9kdGxiX2VudHJ5IChEVExCX1dBWV9QR0QrMik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2l0bGJfbWFwcGluZyAodW5zaWduZWQgYWRkcmVzcykKIHsKIAl1bnNpZ25lZCBsb25nIHRsYl9lbnRyeTsKLQl3aGlsZSAoKHRsYl9lbnRyeSA9IGl0bGJfcHJvYmUgKGFkZHJlc3MpKSAmIElUTEJfUFJPQkVfU1VDQ0VTUykKLQkJaW52YWxpZGF0ZV9pdGxiX2VudHJ5ICh0bGJfZW50cnkpOworCWlmICgoKHRsYl9lbnRyeSA9IGl0bGJfcHJvYmUoYWRkcmVzcykpICYgKDEgPDwgSVRMQl9ISVRfQklUKSkgIT0gMCkKKwkJaW52YWxpZGF0ZV9pdGxiX2VudHJ5KHRsYl9lbnRyeSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2R0bGJfbWFwcGluZyAodW5zaWduZWQgYWRkcmVzcykKIHsKIAl1bnNpZ25lZCBsb25nIHRsYl9lbnRyeTsKLQl3aGlsZSAoKHRsYl9lbnRyeSA9IGR0bGJfcHJvYmUgKGFkZHJlc3MpKSAmIERUTEJfUFJPQkVfU1VDQ0VTUykKLQkJaW52YWxpZGF0ZV9kdGxiX2VudHJ5ICh0bGJfZW50cnkpOworCWlmICgoKHRsYl9lbnRyeSA9IGR0bGJfcHJvYmUoYWRkcmVzcykpICYgKDEgPDwgRFRMQl9ISVRfQklUKSkgIT0gMCkKKwkJaW52YWxpZGF0ZV9kdGxiX2VudHJ5KHRsYl9lbnRyeSk7CiB9CiAKICNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQogCiAKLSNpZmRlZiBERUJVR19UTEIKLQotLyogRE8gTk9UIFVTRSBUSEVTRSBGVU5DVElPTlMuICBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlbid0IHBhcnQgb2YgdGhlIFh0ZW5zYQorLyoKKyAqIERPIE5PVCBVU0UgVEhFU0UgRlVOQ1RJT05TLiAgVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZW4ndCBwYXJ0IG9mIHRoZSBYdGVuc2EKICAqIElTQSBhbmQgZXhpc3Qgb25seSBmb3IgdGVzdCBwdXJwb3Nlcy4uCiAgKiBZb3UgbWF5IGZpbmQgaXQgaGVscGZ1bCBmb3IgTU1VIGRlYnVnZ2luZywgaG93ZXZlci4KICAqCkBAIC0xOTMsOCArMTk3LDYgQEAKIAlyZXR1cm4gdG1wOwogfQogCi0jZW5kaWYJLyogREVCVUdfVExCICovCi0KLQorI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZgkvKiBfWFRFTlNBX1BHQUxMT0NfSCAqLworI2VuZGlmCS8qIF9YVEVOU0FfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS91YWNjZXNzLmgKaW5kZXggODhhNjRlMS4uZDYzNTJkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdWFjY2Vzcy5oCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpZmRlZiBfX0FTU0VNQkxZX18KIAotI2RlZmluZSBfQVNNTEFOR1VBR0UKICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS91bmlzdGQuaAppbmRleCAyZTFhMWI5Li44YTdmYjY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3VuaXN0ZC5oCkBAIC0xMSwyMTIgKzExLDU5MyBAQAogI2lmbmRlZiBfWFRFTlNBX1VOSVNURF9ICiAjZGVmaW5lIF9YVEVOU0FfVU5JU1REX0gKIAotI2RlZmluZSBfX05SX3NwaWxsCQkgIDAKLSNkZWZpbmUgX19OUl9leGl0CQkgIDEKLSNkZWZpbmUgX19OUl9yZWFkCQkgIDMKLSNkZWZpbmUgX19OUl93cml0ZQkJICA0Ci0jZGVmaW5lIF9fTlJfb3BlbgkJICA1Ci0jZGVmaW5lIF9fTlJfY2xvc2UJCSAgNgotI2RlZmluZSBfX05SX2NyZWF0CQkgIDgKLSNkZWZpbmUgX19OUl9saW5rCQkgIDkKLSNkZWZpbmUgX19OUl91bmxpbmsJCSAxMAotI2RlZmluZSBfX05SX2V4ZWN2ZQkJIDExCi0jZGVmaW5lIF9fTlJfY2hkaXIJCSAxMgotI2RlZmluZSBfX05SX21rbm9kCQkgMTQKLSNkZWZpbmUgX19OUl9jaG1vZAkJIDE1Ci0jZGVmaW5lIF9fTlJfbGNob3duCQkgMTYKLSNkZWZpbmUgX19OUl9icmVhawkJIDE3Ci0jZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQotI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCi0jZGVmaW5lIF9fTlJfbW91bnQJCSAyMQotI2RlZmluZSBfX05SX3NldHVpZAkJIDIzCi0jZGVmaW5lIF9fTlJfZ2V0dWlkCQkgMjQKLSNkZWZpbmUgX19OUl9wdHJhY2UJCSAyNgotI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKLSNkZWZpbmUgX19OUl9zdHR5CQkgMzEKLSNkZWZpbmUgX19OUl9ndHR5CQkgMzIKLSNkZWZpbmUgX19OUl9hY2Nlc3MJCSAzMwotI2RlZmluZSBfX05SX2Z0aW1lCQkgMzUKLSNkZWZpbmUgX19OUl9zeW5jCQkgMzYKLSNkZWZpbmUgX19OUl9raWxsCQkgMzcKLSNkZWZpbmUgX19OUl9yZW5hbWUJCSAzOAotI2RlZmluZSBfX05SX21rZGlyCQkgMzkKLSNkZWZpbmUgX19OUl9ybWRpcgkJIDQwCi0jZGVmaW5lIF9fTlJfZHVwCQkgNDEKLSNkZWZpbmUgX19OUl9waXBlCQkgNDIKLSNkZWZpbmUgX19OUl90aW1lcwkJIDQzCi0jZGVmaW5lIF9fTlJfcHJvZgkJIDQ0Ci0jZGVmaW5lIF9fTlJfYnJrCQkgNDUKLSNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgotI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3Ci0jZGVmaW5lIF9fTlJfc2lnbmFsCQkgNDgKLSNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKLSNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKLSNkZWZpbmUgX19OUl9hY2N0CQkgNTEKLSNkZWZpbmUgX19OUl9sb2NrCQkgNTMKLSNkZWZpbmUgX19OUl9pb2N0bAkJIDU0Ci0jZGVmaW5lIF9fTlJfZmNudGwJCSA1NQotI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NwotI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4Ci0jZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAotI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCi0jZGVmaW5lIF9fTlJfdXN0YXQJCSA2MgotI2RlZmluZSBfX05SX2R1cDIJCSA2MwotI2RlZmluZSBfX05SX2dldHBwaWQJCSA2NAotI2RlZmluZSBfX05SX3NldHNpZAkJIDY2Ci0jZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkgNjcKLSNkZWZpbmUgX19OUl9zZXRyZXVpZAkJIDcwCi0jZGVmaW5lIF9fTlJfc2V0cmVnaWQJCSA3MQotI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQJCSA3MgotI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcJCSA3MwotI2RlZmluZSBfX05SX3NldGhvc3RuYW1lCSA3NAotI2RlZmluZSBfX05SX3NldHJsaW1pdAkJIDc1Ci0jZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CSAJIDc2CS8qIEJhY2sgY29tcGF0aWJsZSAyR2lnIGxpbWl0ZWQgcmxpbWl0ICovCi0jZGVmaW5lIF9fTlJfZ2V0cnVzYWdlCQkgNzcKLSNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkJIDc4Ci0jZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5CSA3OQotI2RlZmluZSBfX05SX2dldGdyb3VwcwkJIDgwCi0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzCQkgODEKLSNkZWZpbmUgX19OUl9zZWxlY3QJCSA4MgotI2RlZmluZSBfX05SX3N5bWxpbmsJCSA4MwotI2RlZmluZSBfX05SX3JlYWRsaW5rCQkgODUKLSNkZWZpbmUgX19OUl91c2VsaWIJCSA4NgotI2RlZmluZSBfX05SX3N3YXBvbgkJIDg3Ci0jZGVmaW5lIF9fTlJfcmVib290CQkgODgKLSNkZWZpbmUgX19OUl9tdW5tYXAJCSA5MQotI2RlZmluZSBfX05SX3RydW5jYXRlCQkgOTIKLSNkZWZpbmUgX19OUl9mdHJ1bmNhdGUJCSA5MwotI2RlZmluZSBfX05SX2ZjaG1vZAkJIDk0Ci0jZGVmaW5lIF9fTlJfZmNob3duCQkgOTUKLSNkZWZpbmUgX19OUl9nZXRwcmlvcml0eQkgOTYKLSNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkgOTcKLSNkZWZpbmUgX19OUl9wcm9maWwJCSA5OAotI2RlZmluZSBfX05SX3N0YXRmcwkJIDk5Ci0jZGVmaW5lIF9fTlJfZnN0YXRmcwkJMTAwCi0jZGVmaW5lIF9fTlJfaW9wZXJtCQkxMDEKLSNkZWZpbmUgX19OUl9zeXNsb2cJCTEwMwotI2RlZmluZSBfX05SX3NldGl0aW1lcgkJMTA0Ci0jZGVmaW5lIF9fTlJfZ2V0aXRpbWVyCQkxMDUKLSNkZWZpbmUgX19OUl9zdGF0CQkxMDYKLSNkZWZpbmUgX19OUl9sc3RhdAkJMTA3Ci0jZGVmaW5lIF9fTlJfZnN0YXQJCTEwOAotI2RlZmluZSBfX05SX2lvcGwJCTExMAotI2RlZmluZSBfX05SX3ZoYW5ndXAJCTExMQotI2RlZmluZSBfX05SX2lkbGUJCTExMgotI2RlZmluZSBfX05SX3dhaXQ0CQkxMTQKLSNkZWZpbmUgX19OUl9zd2Fwb2ZmCQkxMTUKLSNkZWZpbmUgX19OUl9zeXNpbmZvCQkxMTYKLSNkZWZpbmUgX19OUl9mc3luYwkJMTE4Ci0jZGVmaW5lIF9fTlJfc2lncmV0dXJuCQkxMTkKLSNkZWZpbmUgX19OUl9jbG9uZQkJMTIwCi0jZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkxMjEKLSNkZWZpbmUgX19OUl91bmFtZQkJMTIyCi0jZGVmaW5lIF9fTlJfbW9kaWZ5X2xkdAkJMTIzCi0jZGVmaW5lIF9fTlJfYWRqdGltZXgJCTEyNAotI2RlZmluZSBfX05SX21wcm90ZWN0CQkxMjUKLSNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCTEyNwotI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCTEyOAotI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJMTI5Ci0jZGVmaW5lIF9fTlJfcXVvdGFjdGwJCTEzMQotI2RlZmluZSBfX05SX2dldHBnaWQJCTEzMgotI2RlZmluZSBfX05SX2ZjaGRpcgkJMTMzCi0jZGVmaW5lIF9fTlJfYmRmbHVzaAkJMTM0Ci0jZGVmaW5lIF9fTlJfc3lzZnMJCTEzNQotI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5CTEzNgotI2RlZmluZSBfX05SX3NldGZzdWlkCQkxMzgKLSNkZWZpbmUgX19OUl9zZXRmc2dpZAkJMTM5Ci0jZGVmaW5lIF9fTlJfX2xsc2VlawkJMTQwCi0jZGVmaW5lIF9fTlJfZ2V0ZGVudHMJCTE0MQotI2RlZmluZSBfX05SX19uZXdzZWxlY3QJCTE0MgotI2RlZmluZSBfX05SX2Zsb2NrCQkxNDMKLSNkZWZpbmUgX19OUl9tc3luYwkJMTQ0Ci0jZGVmaW5lIF9fTlJfcmVhZHYJCTE0NQotI2RlZmluZSBfX05SX3dyaXRldgkJMTQ2Ci0jZGVmaW5lIF9fTlJfY2FjaGVmbHVzaCAgICAgICAgIDE0NwotI2RlZmluZSBfX05SX2NhY2hlY3RsICAgICAgICAgICAxNDgKLSNkZWZpbmUgX19OUl9zeXN4dGVuc2EgICAgICAgICAgMTQ5Ci0jZGVmaW5lIF9fTlJfc3lzZHVtbXkgICAgICAgICAgIDE1MAotI2RlZmluZSBfX05SX2dldHNpZAkJMTUxCi0jZGVmaW5lIF9fTlJfZmRhdGFzeW5jCQkxNTIKLSNkZWZpbmUgX19OUl9fc3lzY3RsCQkxNTMKLSNkZWZpbmUgX19OUl9tbG9jawkJMTU0Ci0jZGVmaW5lIF9fTlJfbXVubG9jawkJMTU1Ci0jZGVmaW5lIF9fTlJfbWxvY2thbGwJCTE1NgotI2RlZmluZSBfX05SX211bmxvY2thbGwJCTE1NwotI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtCQkxNTgKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbQkJMTU5Ci0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCQkxNjAKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIJCTE2MQotI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkCQkxNjIKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CTE2MwotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4JMTY0Ci0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCTE2NQotI2RlZmluZSBfX05SX25hbm9zbGVlcAkJMTY2Ci0jZGVmaW5lIF9fTlJfbXJlbWFwCQkxNjcKLSNkZWZpbmUgX19OUl9hY2NlcHQgICAgICAgICAgICAgMTY4Ci0jZGVmaW5lIF9fTlJfYmluZCAgICAgICAgICAgICAgIDE2OQotI2RlZmluZSBfX05SX2Nvbm5lY3QgICAgICAgICAgICAxNzAKLSNkZWZpbmUgX19OUl9nZXRwZWVybmFtZSAgICAgICAgMTcxCi0jZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgICAgICAgIDE3MgotI2RlZmluZSBfX05SX2dldHNvY2tvcHQgICAgICAgICAxNzMKLSNkZWZpbmUgX19OUl9saXN0ZW4gICAgICAgICAgICAgMTc0Ci0jZGVmaW5lIF9fTlJfcmVjdiAgICAgICAgICAgICAgIDE3NQotI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAxNzYKLSNkZWZpbmUgX19OUl9yZWN2bXNnICAgICAgICAgICAgMTc3Ci0jZGVmaW5lIF9fTlJfc2VuZCAgICAgICAgICAgICAgIDE3OAotI2RlZmluZSBfX05SX3NlbmRtc2cgICAgICAgICAgICAxNzkKLSNkZWZpbmUgX19OUl9zZW5kdG8gICAgICAgICAgICAgMTgwCi0jZGVmaW5lIF9fTlJfc2V0c29ja29wdCAgICAgICAgIDE4MQotI2RlZmluZSBfX05SX3NodXRkb3duICAgICAgICAgICAxODIKLSNkZWZpbmUgX19OUl9zb2NrZXQgICAgICAgICAgICAgMTgzCi0jZGVmaW5lIF9fTlJfc29ja2V0cGFpciAgICAgICAgIDE4NAotI2RlZmluZSBfX05SX3NldHJlc3VpZAkJMTg1Ci0jZGVmaW5lIF9fTlJfZ2V0cmVzdWlkCQkxODYKLSNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUJMTg3Ci0jZGVmaW5lIF9fTlJfcG9sbAkJMTg4Ci0jZGVmaW5lIF9fTlJfbmZzc2VydmN0bAkJMTg5Ci0jZGVmaW5lIF9fTlJfc2V0cmVzZ2lkCQkxOTAKLSNkZWZpbmUgX19OUl9nZXRyZXNnaWQJCTE5MQotI2RlZmluZSBfX05SX3ByY3RsICAgICAgICAgICAgICAxOTIKLSNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4JMTkzCi0jZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uCTE5NAotI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrCTE5NQotI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcJMTk2Ci0jZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0CTE5NwotI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbwkxOTgKLSNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kCTE5OQotI2RlZmluZSBfX05SX3ByZWFkCQkyMDAKLSNkZWZpbmUgX19OUl9wd3JpdGUJCTIwMQotI2RlZmluZSBfX05SX2Nob3duCQkyMDIKLSNkZWZpbmUgX19OUl9nZXRjd2QJCTIwMwotI2RlZmluZSBfX05SX2NhcGdldAkJMjA0Ci0jZGVmaW5lIF9fTlJfY2Fwc2V0CQkyMDUKLSNkZWZpbmUgX19OUl9zaWdhbHRzdGFjawkyMDYKLSNkZWZpbmUgX19OUl9zZW5kZmlsZQkJMjA3Ci0jZGVmaW5lIF9fTlJfbW1hcDIJCTIxMAotI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTIxMQotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTIxMgotI2RlZmluZSBfX05SX3N0YXQ2NAkJMjEzCi0jZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMjE0Ci0jZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMjE1Ci0jZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJMjE2Ci0jZGVmaW5lIF9fTlJfbWluY29yZQkJMjE3Ci0jZGVmaW5lIF9fTlJfbWFkdmlzZQkJMjE4Ci0jZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NAkJMjE5CisjaWZuZGVmIF9fU1lTQ0FMTAorIyBkZWZpbmUgX19TWVNDQUxMKG5yLGZ1bmMsbmFyZ3MpCisjZW5kaWYKIAotLyogS2VlcCB0aGlzIGxhc3Q7IHNob3VsZCBhbHdheXMgZXF1YWwgdGhlIGxhc3QgdmFsaWQgY2FsbCBudW1iZXIuICovCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgICAgIDIyMAorI2RlZmluZSBfX05SX3NwaWxsCQkJCSAgMAorX19TWVNDQUxMKCAgMCwgc3lzX25pX3N5c2NhbGwsIDApCisjZGVmaW5lIF9fTlJfeHRlbnNhCQkJCSAgMQorX19TWVNDQUxMKCAgMSwgc3lzX25pX3N5c2NhbGwsIDApCisjZGVmaW5lIF9fTlJfYXZhaWxhYmxlNAkJCQkgIDIKK19fU1lTQ0FMTCggIDIsIHN5c19uaV9zeXNjYWxsLCAwKQorI2RlZmluZSBfX05SX2F2YWlsYWJsZTUJCQkJICAzCitfX1NZU0NBTEwoICAzLCBzeXNfbmlfc3lzY2FsbCwgMCkKKyNkZWZpbmUgX19OUl9hdmFpbGFibGU2CQkJCSAgNAorX19TWVNDQUxMKCAgNCwgc3lzX25pX3N5c2NhbGwsIDApCisjZGVmaW5lIF9fTlJfYXZhaWxhYmxlNwkJCQkgIDUKK19fU1lTQ0FMTCggIDUsIHN5c19uaV9zeXNjYWxsLCAwKQorI2RlZmluZSBfX05SX2F2YWlsYWJsZTgJCQkJICA2CitfX1NZU0NBTEwoICA2LCBzeXNfbmlfc3lzY2FsbCwgMCkKKyNkZWZpbmUgX19OUl9hdmFpbGFibGU5CQkJCSAgNworX19TWVNDQUxMKCAgNywgc3lzX25pX3N5c2NhbGwsIDApCiAKLS8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTI1OiBzZWUKLSAqIDxhc20teHRlbnNhL2Vycm5vLmg+ICovCisvKiBGaWxlIE9wZXJhdGlvbnMgKi8KIAotI2RlZmluZSBTWVNYVEVOU0FfUkVTRVJWRUQJICAgMAkvKiBkb24ndCB1c2UgdGhpcyAqLwotI2RlZmluZSBTWVNYVEVOU0FfQVRPTUlDX1NFVAkgICAxCS8qIHNldCB2YXJpYWJsZSAqLwotI2RlZmluZSBTWVNYVEVOU0FfQVRPTUlDX0VYR19BREQgICAyCS8qIGV4Y2hhbmdlIG1lbW9yeSBhbmQgYWRkICovCi0jZGVmaW5lIFNZU1hURU5TQV9BVE9NSUNfQURECSAgIDMJLyogYWRkIHRvIG1lbW9yeSAqLwotI2RlZmluZSBTWVNYVEVOU0FfQVRPTUlDX0NNUF9TV1AgICA0CS8qIGNvbXBhcmUgYW5kIHN3YXAgKi8KKyNkZWZpbmUgX19OUl9vcGVuIAkJCQkgIDgKK19fU1lTQ0FMTCggIDgsIHN5c19vcGVuLCAzKQorI2RlZmluZSBfX05SX2Nsb3NlIAkJCQkgIDkKK19fU1lTQ0FMTCggIDksIHN5c19jbG9zZSwgMSkKKyNkZWZpbmUgX19OUl9kdXAgCQkJCSAxMAorX19TWVNDQUxMKCAxMCwgc3lzX2R1cCwgMSkKKyNkZWZpbmUgX19OUl9kdXAyIAkJCQkgMTEKK19fU1lTQ0FMTCggMTEsIHN5c19kdXAyLCAyKQorI2RlZmluZSBfX05SX3JlYWQgCQkJCSAxMgorX19TWVNDQUxMKCAxMiwgc3lzX3JlYWQsIDMpCisjZGVmaW5lIF9fTlJfd3JpdGUgCQkJCSAxMworX19TWVNDQUxMKCAxMywgc3lzX3dyaXRlLCAzKQorI2RlZmluZSBfX05SX3NlbGVjdCAJCQkJIDE0CitfX1NZU0NBTEwoIDE0LCBzeXNfc2VsZWN0LCA1KQorI2RlZmluZSBfX05SX2xzZWVrIAkJCQkgMTUKK19fU1lTQ0FMTCggMTUsIHN5c19sc2VlaywgMykKKyNkZWZpbmUgX19OUl9wb2xsIAkJCQkgMTYKK19fU1lTQ0FMTCggMTYsIHN5c19wb2xsLCAzKQorI2RlZmluZSBfX05SX19sbHNlZWsJCQkJIDE3CitfX1NZU0NBTEwoIDE3LCBzeXNfbGxzZWVrLCA1KQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgCQkJIDE4CitfX1NZU0NBTEwoIDE4LCBzeXNfZXBvbGxfd2FpdCwgNCkKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwgCQkJCSAxOQorX19TWVNDQUxMKCAxOSwgc3lzX2Vwb2xsX2N0bCwgNCkKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgCQkJIDIwCitfX1NZU0NBTEwoIDIwLCBzeXNfZXBvbGxfY3JlYXRlLCAxKQorI2RlZmluZSBfX05SX2NyZWF0IAkJCQkgMjEKK19fU1lTQ0FMTCggMjEsIHN5c19jcmVhdCwgMikKKyNkZWZpbmUgX19OUl90cnVuY2F0ZSAJCQkJIDIyCitfX1NZU0NBTEwoIDIyLCBzeXNfdHJ1bmNhdGUsIDIpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlIAkJCQkgMjMKK19fU1lTQ0FMTCggMjMsIHN5c19mdHJ1bmNhdGUsIDIpCisjZGVmaW5lIF9fTlJfcmVhZHYgCQkJCSAyNAorX19TWVNDQUxMKCAyNCwgc3lzX3JlYWR2LCAzKQorI2RlZmluZSBfX05SX3dyaXRldiAJCQkJIDI1CitfX1NZU0NBTEwoIDI1LCBzeXNfd3JpdGV2LCAzKQorI2RlZmluZSBfX05SX2ZzeW5jIAkJCQkgMjYKK19fU1lTQ0FMTCggMjYsIHN5c19mc3luYywgMSkKKyNkZWZpbmUgX19OUl9mZGF0YXN5bmMgCQkJCSAyNworX19TWVNDQUxMKCAyNywgc3lzX2ZkYXRhc3luYywgMSkKKyNkZWZpbmUgX19OUl90cnVuY2F0ZTY0IAkJCSAyOAorX19TWVNDQUxMKCAyOCwgc3lzX3RydW5jYXRlNjQsIDIpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQgCQkJIDI5CitfX1NZU0NBTEwoIDI5LCBzeXNfZnRydW5jYXRlNjQsIDIpCisjZGVmaW5lIF9fTlJfcHJlYWQ2NCAJCQkJIDMwCitfX1NZU0NBTEwoIDMwLCBzeXNfcHJlYWQ2NCwgNikKKyNkZWZpbmUgX19OUl9wd3JpdGU2NCAJCQkJIDMxCitfX1NZU0NBTEwoIDMxLCBzeXNfcHdyaXRlNjQsIDYpCiAKLSNkZWZpbmUgU1lTWFRFTlNBX0NPVU5UCQkgICA1CS8qIGNvdW50IG9mIHN5c2NhbGwwIGZ1bmN0aW9ucyovCisjZGVmaW5lIF9fTlJfbGluayAJCQkJIDMyCitfX1NZU0NBTEwoIDMyLCBzeXNfbGluaywgMikKKyNkZWZpbmUgX19OUl9yZW5hbWUgCQkJCSAzMworX19TWVNDQUxMKCAzMywgc3lzX3JlbmFtZSwgMikKKyNkZWZpbmUgX19OUl9zeW1saW5rIAkJCQkgMzQKK19fU1lTQ0FMTCggMzQsIHN5c19zeW1saW5rLCAyKQorI2RlZmluZSBfX05SX3JlYWRsaW5rIAkJCQkgMzUKK19fU1lTQ0FMTCggMzUsIHN5c19yZWFkbGluaywgMykKKyNkZWZpbmUgX19OUl9ta25vZCAJCQkJIDM2CitfX1NZU0NBTEwoIDM2LCBzeXNfbWtub2QsIDMpCisjZGVmaW5lIF9fTlJfcGlwZSAJCQkJIDM3CitfX1NZU0NBTEwoIDM3LCB4dGVuc2FfcGlwZSwgMSkKKyNkZWZpbmUgX19OUl91bmxpbmsgCQkJCSAzOAorX19TWVNDQUxMKCAzOCwgc3lzX3VubGluaywgMSkKKyNkZWZpbmUgX19OUl9ybWRpciAJCQkJIDM5CitfX1NZU0NBTEwoIDM5LCBzeXNfcm1kaXIsIDEpCisKKyNkZWZpbmUgX19OUl9ta2RpciAJCQkJIDQwCitfX1NZU0NBTEwoIDQwLCBzeXNfbWtkaXIsIDIpCisjZGVmaW5lIF9fTlJfY2hkaXIgCQkJCSA0MQorX19TWVNDQUxMKCA0MSwgc3lzX2NoZGlyLCAxKQorI2RlZmluZSBfX05SX2ZjaGRpciAJCQkJIDQyCitfX1NZU0NBTEwoIDQyLCBzeXNfZmNoZGlyLCAxKQorI2RlZmluZSBfX05SX2dldGN3ZCAJCQkJIDQzCitfX1NZU0NBTEwoIDQzLCBzeXNfZ2V0Y3dkLCAyKQorCisjZGVmaW5lIF9fTlJfY2htb2QgCQkJCSA0NAorX19TWVNDQUxMKCA0NCwgc3lzX2NobW9kLCAyKQorI2RlZmluZSBfX05SX2Nob3duIAkJCQkgNDUKK19fU1lTQ0FMTCggNDUsIHN5c19jaG93biwgMykKKyNkZWZpbmUgX19OUl9zdGF0IAkJCQkgNDYKK19fU1lTQ0FMTCggNDYsIHN5c19uZXdzdGF0LCAyKQorI2RlZmluZSBfX05SX3N0YXQ2NCAJCQkJIDQ3CitfX1NZU0NBTEwoIDQ3LCBzeXNfc3RhdDY0LCAyKQorCisjZGVmaW5lIF9fTlJfbGNob3duIAkJCQkgNDgKK19fU1lTQ0FMTCggNDgsIHN5c19sY2hvd24sIDMpCisjZGVmaW5lIF9fTlJfbHN0YXQgCQkJCSA0OQorX19TWVNDQUxMKCA0OSwgc3lzX25ld2xzdGF0LCAyKQorI2RlZmluZSBfX05SX2xzdGF0NjQgCQkJCSA1MAorX19TWVNDQUxMKCA1MCwgc3lzX2xzdGF0NjQsIDIpCisjZGVmaW5lIF9fTlJfYXZhaWxhYmxlNTEJCQkgNTEKK19fU1lTQ0FMTCggNTEsIHN5c19uaV9zeXNjYWxsLCAwKQorCisjZGVmaW5lIF9fTlJfZmNobW9kIAkJCQkgNTIKK19fU1lTQ0FMTCggNTIsIHN5c19mY2htb2QsIDIpCisjZGVmaW5lIF9fTlJfZmNob3duIAkJCQkgNTMKK19fU1lTQ0FMTCggNTMsIHN5c19mY2hvd24sIDMpCisjZGVmaW5lIF9fTlJfZnN0YXQgCQkJCSA1NAorX19TWVNDQUxMKCA1NCwgc3lzX25ld2ZzdGF0LCAyKQorI2RlZmluZSBfX05SX2ZzdGF0NjQgCQkJCSA1NQorX19TWVNDQUxMKCA1NSwgc3lzX2ZzdGF0NjQsIDIpCisKKyNkZWZpbmUgX19OUl9mbG9jayAJCQkJIDU2CitfX1NZU0NBTEwoIDU2LCBzeXNfZmxvY2ssIDIpCisjZGVmaW5lIF9fTlJfYWNjZXNzIAkJCQkgNTcKK19fU1lTQ0FMTCggNTcsIHN5c19hY2Nlc3MsIDIpCisjZGVmaW5lIF9fTlJfdW1hc2sgCQkJCSA1OAorX19TWVNDQUxMKCA1OCwgc3lzX3VtYXNrLCAxKQorI2RlZmluZSBfX05SX2dldGRlbnRzIAkJCQkgNTkKK19fU1lTQ0FMTCggNTksIHN5c19nZXRkZW50cywgMykKKyNkZWZpbmUgX19OUl9nZXRkZW50czY0IAkJCSA2MAorX19TWVNDQUxMKCA2MCwgc3lzX2dldGRlbnRzNjQsIDMpCisjZGVmaW5lIF9fTlJfZmNudGw2NCAJCQkJIDYxCitfX1NZU0NBTEwoIDYxLCBzeXNfZmNudGw2NCwgMykKKyNkZWZpbmUgX19OUl9hdmFpbGFibGU2MgkJCSA2MgorX19TWVNDQUxMKCA2Miwgc3lzX25pX3N5c2NhbGwsIDApCisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0IAkJCSA2MworX19TWVNDQUxMKCA2Mywgc3lzX2ZhZHZpc2U2NF82NCwgNikKKyNkZWZpbmUgX19OUl91dGltZQkJCQkgNjQJLyogZ2xpYmMgMi4zLjMgPz8gKi8KK19fU1lTQ0FMTCggNjQsIHN5c191dGltZSwgMikKKyNkZWZpbmUgX19OUl91dGltZXMgCQkJCSA2NQorX19TWVNDQUxMKCA2NSwgc3lzX3V0aW1lcywgMikKKyNkZWZpbmUgX19OUl9pb2N0bCAJCQkJIDY2CitfX1NZU0NBTEwoIDY2LCBzeXNfaW9jdGwsIDMpCisjZGVmaW5lIF9fTlJfZmNudGwgCQkJCSA2NworX19TWVNDQUxMKCA2Nywgc3lzX2ZjbnRsLCAzKQorCisjZGVmaW5lIF9fTlJfc2V0eGF0dHIgCQkJCSA2OAorX19TWVNDQUxMKCA2OCwgc3lzX3NldHhhdHRyLCA1KQorI2RlZmluZSBfX05SX2dldHhhdHRyIAkJCQkgNjkKK19fU1lTQ0FMTCggNjksIHN5c19nZXR4YXR0ciwgNCkKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIgCQkJCSA3MAorX19TWVNDQUxMKCA3MCwgc3lzX2xpc3R4YXR0ciwgMykKKyNkZWZpbmUgX19OUl9yZW1vdmV4YXR0ciAJCQkgNzEKK19fU1lTQ0FMTCggNzEsIHN5c19yZW1vdmV4YXR0ciwgMikKKyNkZWZpbmUgX19OUl9sc2V0eGF0dHIgCQkJCSA3MgorX19TWVNDQUxMKCA3Miwgc3lzX2xzZXR4YXR0ciwgNSkKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIgCQkJCSA3MworX19TWVNDQUxMKCA3Mywgc3lzX2xnZXR4YXR0ciwgNCkKKyNkZWZpbmUgX19OUl9sbGlzdHhhdHRyIAkJCSA3NAorX19TWVNDQUxMKCA3NCwgc3lzX2xsaXN0eGF0dHIsIDMpCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyIAkJCSA3NQorX19TWVNDQUxMKCA3NSwgc3lzX2xyZW1vdmV4YXR0ciwgMikKKyNkZWZpbmUgX19OUl9mc2V0eGF0dHIgCQkJCSA3NgorX19TWVNDQUxMKCA3Niwgc3lzX2ZzZXR4YXR0ciwgNSkKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIgCQkJCSA3NworX19TWVNDQUxMKCA3Nywgc3lzX2ZnZXR4YXR0ciwgNCkKKyNkZWZpbmUgX19OUl9mbGlzdHhhdHRyIAkJCSA3OAorX19TWVNDQUxMKCA3OCwgc3lzX2ZsaXN0eGF0dHIsIDMpCisjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyIAkJCSA3OQorX19TWVNDQUxMKCA3OSwgc3lzX2ZyZW1vdmV4YXR0ciwgMikKKworLyogRmlsZSBNYXAgLyBTaGFyZWQgTWVtb3J5IE9wZXJhdGlvbnMgKi8KKworI2RlZmluZSBfX05SX21tYXAyIAkJCQkgODAKK19fU1lTQ0FMTCggODAsIHh0ZW5zYV9tbWFwMiwgNikKKyNkZWZpbmUgX19OUl9tdW5tYXAgCQkJCSA4MQorX19TWVNDQUxMKCA4MSwgc3lzX211bm1hcCwgMikKKyNkZWZpbmUgX19OUl9tcHJvdGVjdCAJCQkJIDgyCitfX1NZU0NBTEwoIDgyLCBzeXNfbXByb3RlY3QsIDMpCisjZGVmaW5lIF9fTlJfYnJrIAkJCQkgODMKK19fU1lTQ0FMTCggODMsIHN5c19icmssIDEpCisjZGVmaW5lIF9fTlJfbWxvY2sgCQkJCSA4NAorX19TWVNDQUxMKCA4NCwgc3lzX21sb2NrLCAyKQorI2RlZmluZSBfX05SX211bmxvY2sgCQkJCSA4NQorX19TWVNDQUxMKCA4NSwgc3lzX211bmxvY2ssIDIpCisjZGVmaW5lIF9fTlJfbWxvY2thbGwgCQkJCSA4NgorX19TWVNDQUxMKCA4Niwgc3lzX21sb2NrYWxsLCAxKQorI2RlZmluZSBfX05SX211bmxvY2thbGwgCQkJIDg3CitfX1NZU0NBTEwoIDg3LCBzeXNfbXVubG9ja2FsbCwgMCkKKyNkZWZpbmUgX19OUl9tcmVtYXAgCQkJCSA4OAorX19TWVNDQUxMKCA4OCwgc3lzX21yZW1hcCwgNCkKKyNkZWZpbmUgX19OUl9tc3luYyAJCQkJIDg5CitfX1NZU0NBTEwoIDg5LCBzeXNfbXN5bmMsIDMpCisjZGVmaW5lIF9fTlJfbWluY29yZSAJCQkJIDkwCitfX1NZU0NBTEwoIDkwLCBzeXNfbWluY29yZSwgMykKKyNkZWZpbmUgX19OUl9tYWR2aXNlIAkJCQkgOTEKK19fU1lTQ0FMTCggOTEsIHN5c19tYWR2aXNlLCAzKQorI2RlZmluZSBfX05SX3NobWdldAkJCQkgOTIKK19fU1lTQ0FMTCggOTIsIHN5c19zaG1nZXQsIDQpCisjZGVmaW5lIF9fTlJfc2htYXQJCQkJIDkzCitfX1NZU0NBTEwoIDkzLCB4dGVuc2Ffc2htYXQsIDQpCisjZGVmaW5lIF9fTlJfc2htY3RsCQkJCSA5NAorX19TWVNDQUxMKCA5NCwgc3lzX3NobWN0bCwgNCkKKyNkZWZpbmUgX19OUl9zaG1kdAkJCQkgOTUKK19fU1lTQ0FMTCggOTUsIHN5c19zaG1kdCwgNCkKKworLyogU29ja2V0IE9wZXJhdGlvbnMgKi8KKworI2RlZmluZSBfX05SX3NvY2tldCAJCQkJIDk2CitfX1NZU0NBTEwoIDk2LCBzeXNfc29ja2V0LCAzKQorI2RlZmluZSBfX05SX3NldHNvY2tvcHQgCQkJIDk3CitfX1NZU0NBTEwoIDk3LCBzeXNfc2V0c29ja29wdCwgNSkKKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0IAkJCSA5OAorX19TWVNDQUxMKCA5OCwgc3lzX2dldHNvY2tvcHQsIDUpCisjZGVmaW5lIF9fTlJfc2h1dGRvd24gCQkJCSA5OQorX19TWVNDQUxMKCA5OSwgc3lzX3NodXRkb3duLCAyKQorCisjZGVmaW5lIF9fTlJfYmluZCAJCQkJMTAwCitfX1NZU0NBTEwoMTAwLCBzeXNfYmluZCwgMykKKyNkZWZpbmUgX19OUl9jb25uZWN0IAkJCQkxMDEKK19fU1lTQ0FMTCgxMDEsIHN5c19jb25uZWN0LCAzKQorI2RlZmluZSBfX05SX2xpc3RlbiAJCQkJMTAyCitfX1NZU0NBTEwoMTAyLCBzeXNfbGlzdGVuLCAyKQorI2RlZmluZSBfX05SX2FjY2VwdCAJCQkJMTAzCitfX1NZU0NBTEwoMTAzLCBzeXNfYWNjZXB0LCAzKQorCisjZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgCQkJMTA0CitfX1NZU0NBTEwoMTA0LCBzeXNfZ2V0c29ja25hbWUsIDMpCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgCQkJMTA1CitfX1NZU0NBTEwoMTA1LCBzeXNfZ2V0cGVlcm5hbWUsIDMpCisjZGVmaW5lIF9fTlJfc2VuZG1zZyAJCQkJMTA2CitfX1NZU0NBTEwoMTA2LCBzeXNfc2VuZG1zZywgMykKKyNkZWZpbmUgX19OUl9yZWN2bXNnIAkJCQkxMDcKK19fU1lTQ0FMTCgxMDcsIHN5c19yZWN2bXNnLCAzKQorI2RlZmluZSBfX05SX3NlbmQgCQkJCTEwOAorX19TWVNDQUxMKDEwOCwgc3lzX3NlbmQsIDQpCisjZGVmaW5lIF9fTlJfcmVjdiAJCQkJMTA5CitfX1NZU0NBTEwoMTA5LCBzeXNfcmVjdiwgNCkKKyNkZWZpbmUgX19OUl9zZW5kdG8gCQkJCTExMAorX19TWVNDQUxMKDExMCwgc3lzX3NlbmR0bywgNikKKyNkZWZpbmUgX19OUl9yZWN2ZnJvbSAJCQkJMTExCitfX1NZU0NBTEwoMTExLCBzeXNfcmVjdmZyb20sIDYpCisKKyNkZWZpbmUgX19OUl9zb2NrZXRwYWlyIAkJCTExMgorX19TWVNDQUxMKDExMiwgc3lzX3NvY2tldHBhaXIsIDQpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGUgCQkJCTExMworX19TWVNDQUxMKDExMywgc3lzX3NlbmRmaWxlLCA0KQorI2RlZmluZSBfX05SX3NlbmRmaWxlNjQgCQkJMTE0CitfX1NZU0NBTEwoMTE0LCBzeXNfc2VuZGZpbGU2NCwgNCkKKyNkZWZpbmUgX19OUl9hdmFpbGFibGUxMTUJCQkxMTUKK19fU1lTQ0FMTCgxMTUsIHN5c19uaV9zeXNjYWxsLCAwKQorCisvKiBQcm9jZXNzIE9wZXJhdGlvbnMgKi8KKworI2RlZmluZSBfX05SX2Nsb25lIAkJCQkxMTYKK19fU1lTQ0FMTCgxMTYsIHh0ZW5zYV9jbG9uZSwgNSkKKyNkZWZpbmUgX19OUl9leGVjdmUgCQkJCTExNworX19TWVNDQUxMKDExNywgeHRlbnNhX2V4ZWN2ZSwgMykKKyNkZWZpbmUgX19OUl9leGl0IAkJCQkxMTgKK19fU1lTQ0FMTCgxMTgsIHN5c19leGl0LCAxKQorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAgCQkJMTE5CitfX1NZU0NBTEwoMTE5LCBzeXNfZXhpdF9ncm91cCwgMSkKKyNkZWZpbmUgX19OUl9nZXRwaWQgCQkJCTEyMAorX19TWVNDQUxMKDEyMCwgc3lzX2dldHBpZCwgMCkKKyNkZWZpbmUgX19OUl93YWl0NCAJCQkJMTIxCitfX1NZU0NBTEwoMTIxLCBzeXNfd2FpdDQsIDQpCisjZGVmaW5lIF9fTlJfd2FpdGlkIAkJCQkxMjIKK19fU1lTQ0FMTCgxMjIsIHN5c193YWl0aWQsIDUpCisjZGVmaW5lIF9fTlJfa2lsbCAJCQkJMTIzCitfX1NZU0NBTEwoMTIzLCBzeXNfa2lsbCwgMikKKyNkZWZpbmUgX19OUl90a2lsbCAJCQkJMTI0CitfX1NZU0NBTEwoMTI0LCBzeXNfdGtpbGwsIDIpCisjZGVmaW5lIF9fTlJfdGdraWxsIAkJCQkxMjUKK19fU1lTQ0FMTCgxMjUsIHN5c190Z2tpbGwsIDMpCisjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzIAkJCTEyNgorX19TWVNDQUxMKDEyNiwgc3lzX3NldF90aWRfYWRkcmVzcywgMSkKKyNkZWZpbmUgX19OUl9nZXR0aWQgCQkJCTEyNworX19TWVNDQUxMKDEyNywgc3lzX2dldHRpZCwgMCkKKyNkZWZpbmUgX19OUl9zZXRzaWQgCQkJCTEyOAorX19TWVNDQUxMKDEyOCwgc3lzX3NldHNpZCwgMCkKKyNkZWZpbmUgX19OUl9nZXRzaWQgCQkJCTEyOQorX19TWVNDQUxMKDEyOSwgc3lzX2dldHNpZCwgMSkKKyNkZWZpbmUgX19OUl9wcmN0bCAJCQkJMTMwCitfX1NZU0NBTEwoMTMwLCBzeXNfcHJjdGwsIDUpCisjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkgCQkJMTMxCitfX1NZU0NBTEwoMTMxLCBzeXNfcGVyc29uYWxpdHksIDEpCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgCQkJMTMyCitfX1NZU0NBTEwoMTMyLCBzeXNfZ2V0cHJpb3JpdHksIDIpCisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgCQkJMTMzCitfX1NZU0NBTEwoMTMzLCBzeXNfc2V0cHJpb3JpdHksIDMpCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyIAkJCQkxMzQKK19fU1lTQ0FMTCgxMzQsIHN5c19zZXRpdGltZXIsIDMpCisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyIAkJCQkxMzUKK19fU1lTQ0FMTCgxMzUsIHN5c19nZXRpdGltZXIsIDIpCisjZGVmaW5lIF9fTlJfc2V0dWlkIAkJCQkxMzYKK19fU1lTQ0FMTCgxMzYsIHN5c19zZXR1aWQsIDEpCisjZGVmaW5lIF9fTlJfZ2V0dWlkIAkJCQkxMzcKK19fU1lTQ0FMTCgxMzcsIHN5c19nZXR1aWQsIDApCisjZGVmaW5lIF9fTlJfc2V0Z2lkIAkJCQkxMzgKK19fU1lTQ0FMTCgxMzgsIHN5c19zZXRnaWQsIDEpCisjZGVmaW5lIF9fTlJfZ2V0Z2lkIAkJCQkxMzkKK19fU1lTQ0FMTCgxMzksIHN5c19nZXRnaWQsIDApCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZCAJCQkJMTQwCitfX1NZU0NBTEwoMTQwLCBzeXNfZ2V0ZXVpZCwgMCkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkIAkJCQkxNDEKK19fU1lTQ0FMTCgxNDEsIHN5c19nZXRlZ2lkLCAwKQorI2RlZmluZSBfX05SX3NldHJldWlkIAkJCQkxNDIKK19fU1lTQ0FMTCgxNDIsIHN5c19zZXRyZXVpZCwgMikKKyNkZWZpbmUgX19OUl9zZXRyZWdpZCAJCQkJMTQzCitfX1NZU0NBTEwoMTQzLCBzeXNfc2V0cmVnaWQsIDIpCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkIAkJCQkxNDQKK19fU1lTQ0FMTCgxNDQsIHN5c19zZXRyZXN1aWQsIDMpCisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkIAkJCQkxNDUKK19fU1lTQ0FMTCgxNDUsIHN5c19nZXRyZXN1aWQsIDMpCisjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkIAkJCQkxNDYKK19fU1lTQ0FMTCgxNDYsIHN5c19zZXRyZXNnaWQsIDMpCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkIAkJCQkxNDcKK19fU1lTQ0FMTCgxNDcsIHN5c19nZXRyZXNnaWQsIDMpCisjZGVmaW5lIF9fTlJfc2V0cGdpZCAJCQkJMTQ4CitfX1NZU0NBTEwoMTQ4LCBzeXNfc2V0cGdpZCwgMikKKyNkZWZpbmUgX19OUl9nZXRwZ2lkIAkJCQkxNDkKK19fU1lTQ0FMTCgxNDksIHN5c19nZXRwZ2lkLCAxKQorI2RlZmluZSBfX05SX2dldHBwaWQgCQkJCTE1MAorX19TWVNDQUxMKDE1MCwgc3lzX2dldHBwaWQsIDApCisjZGVmaW5lIF9fTlJfYXZhaWxhYmxlMTUxCQkJMTUxCitfX1NZU0NBTEwoMTUxLCBzeXNfbmlfc3lzY2FsbCwgMCkKKworI2RlZmluZSBfX05SX3Jlc2VydmVkMTUyIAkJCTE1MgkvKiBzZXRfdGhyZWFkX2FyZWEgKi8KK19fU1lTQ0FMTCgxNTIsIHN5c19uaV9zeXNjYWxsLCAwKQorI2RlZmluZSBfX05SX3Jlc2VydmVkMTUzIAkJCTE1MwkvKiBnZXRfdGhyZWFkX2FyZWEgKi8KK19fU1lTQ0FMTCgxNTMsIHN5c19uaV9zeXNjYWxsLCAwKQorI2RlZmluZSBfX05SX3RpbWVzIAkJCQkxNTQKK19fU1lTQ0FMTCgxNTQsIHN5c190aW1lcywgMSkKKyNkZWZpbmUgX19OUl9hY2N0IAkJCQkxNTUKK19fU1lTQ0FMTCgxNTUsIHN5c19hY2N0LCAxKQorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5IAkJCTE1NgorX19TWVNDQUxMKDE1Niwgc3lzX3NjaGVkX3NldGFmZmluaXR5LCAzKQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5IAkJCTE1NworX19TWVNDQUxMKDE1Nywgc3lzX3NjaGVkX2dldGFmZmluaXR5LCAzKQorI2RlZmluZSBfX05SX2NhcGdldCAJCQkJMTU4CitfX1NZU0NBTEwoMTU4LCBzeXNfY2FwZ2V0LCAyKQorI2RlZmluZSBfX05SX2NhcHNldCAJCQkJMTU5CitfX1NZU0NBTEwoMTU5LCBzeXNfY2Fwc2V0LCAyKQorI2RlZmluZSBfX05SX3B0cmFjZSAJCQkJMTYwCitfX1NZU0NBTEwoMTYwLCBzeXNfcHRyYWNlLCA0KQorI2RlZmluZSBfX05SX3NlbXRpbWVkb3AJCQkJMTYxCitfX1NZU0NBTEwoMTYxLCBzeXNfc2VtdGltZWRvcCwgNSkKKyNkZWZpbmUgX19OUl9zZW1nZXQJCQkJMTYyCitfX1NZU0NBTEwoMTYyLCBzeXNfc2VtZ2V0LCA0KQorI2RlZmluZSBfX05SX3NlbW9wCQkJCTE2MworX19TWVNDQUxMKDE2Mywgc3lzX3NlbW9wLCA0KQorI2RlZmluZSBfX05SX3NlbWN0bAkJCQkxNjQKK19fU1lTQ0FMTCgxNjQsIHN5c19zZW1jdGwsIDQpCisjZGVmaW5lIF9fTlJfYXZhaWxhYmxlMTY1CQkJMTY1CitfX1NZU0NBTEwoMTY1LCBzeXNfbmlfc3lzY2FsbCwgMCkKKyNkZWZpbmUgX19OUl9tc2dnZXQJCQkJMTY2CitfX1NZU0NBTEwoMTY2LCBzeXNfbXNnZ2V0LCA0KQorI2RlZmluZSBfX05SX21zZ3NuZAkJCQkxNjcKK19fU1lTQ0FMTCgxNjcsIHN5c19tc2dzbmQsIDQpCisjZGVmaW5lIF9fTlJfbXNncmN2CQkJCTE2OAorX19TWVNDQUxMKDE2OCwgc3lzX21zZ3JjdiwgNCkKKyNkZWZpbmUgX19OUl9tc2djdGwJCQkJMTY5CitfX1NZU0NBTEwoMTY5LCBzeXNfbXNnY3RsLCA0KQorI2RlZmluZSBfX05SX2F2YWlsYWJsZTE3MAkJCTE3MAorX19TWVNDQUxMKDE3MCwgc3lzX25pX3N5c2NhbGwsIDApCisjZGVmaW5lIF9fTlJfYXZhaWxhYmxlMTcxCQkJMTcxCitfX1NZU0NBTEwoMTcxLCBzeXNfbmlfc3lzY2FsbCwgMCkKKworLyogRmlsZSBTeXN0ZW0gKi8KKworI2RlZmluZSBfX05SX21vdW50IAkJCQkxNzIKK19fU1lTQ0FMTCgxNzIsIHN5c19tb3VudCwgNSkKKyNkZWZpbmUgX19OUl9zd2Fwb24gCQkJCTE3MworX19TWVNDQUxMKDE3Mywgc3lzX3N3YXBvbiwgMikKKyNkZWZpbmUgX19OUl9jaHJvb3QgCQkJCTE3NAorX19TWVNDQUxMKDE3NCwgc3lzX2Nocm9vdCwgMSkKKyNkZWZpbmUgX19OUl9waXZvdF9yb290IAkJCTE3NQorX19TWVNDQUxMKDE3NSwgc3lzX3Bpdm90X3Jvb3QsIDIpCisjZGVmaW5lIF9fTlJfdW1vdW50IAkJCQkxNzYKK19fU1lTQ0FMTCgxNzYsIHN5c191bW91bnQsIDIpCisjZGVmaW5lIF9fTlJfc3dhcG9mZiAJCQkJMTc3CitfX1NZU0NBTEwoMTc3LCBzeXNfc3dhcG9mZiwgMSkKKyNkZWZpbmUgX19OUl9zeW5jIAkJCQkxNzgKK19fU1lTQ0FMTCgxNzgsIHN5c19zeW5jLCAwKQorI2RlZmluZSBfX05SX2F2YWlsYWJsZTE3OQkJCTE3OQorX19TWVNDQUxMKDE3OSwgc3lzX25pX3N5c2NhbGwsIDApCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQgCQkJCTE4MAorX19TWVNDQUxMKDE4MCwgc3lzX3NldGZzdWlkLCAxKQorI2RlZmluZSBfX05SX3NldGZzZ2lkIAkJCQkxODEKK19fU1lTQ0FMTCgxODEsIHN5c19zZXRmc2dpZCwgMSkKKyNkZWZpbmUgX19OUl9zeXNmcyAJCQkJMTgyCitfX1NZU0NBTEwoMTgyLCBzeXNfc3lzZnMsIDMpCisjZGVmaW5lIF9fTlJfdXN0YXQgCQkJCTE4MworX19TWVNDQUxMKDE4Mywgc3lzX3VzdGF0LCAyKQorI2RlZmluZSBfX05SX3N0YXRmcyAJCQkJMTg0CitfX1NZU0NBTEwoMTg0LCBzeXNfc3RhdGZzLCAyKQorI2RlZmluZSBfX05SX2ZzdGF0ZnMgCQkJCTE4NQorX19TWVNDQUxMKDE4NSwgc3lzX2ZzdGF0ZnMsIDIpCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQgCQkJCTE4NgorX19TWVNDQUxMKDE4Niwgc3lzX3N0YXRmczY0LCAzKQorI2RlZmluZSBfX05SX2ZzdGF0ZnM2NCAJCQkJMTg3CitfX1NZU0NBTEwoMTg3LCBzeXNfZnN0YXRmczY0LCAzKQorCisvKiBTeXN0ZW0gKi8KKworI2RlZmluZSBfX05SX3NldHJsaW1pdCAJCQkJMTg4CitfX1NZU0NBTEwoMTg4LCBzeXNfc2V0cmxpbWl0LCAyKQorI2RlZmluZSBfX05SX2dldHJsaW1pdCAJCQkJMTg5CitfX1NZU0NBTEwoMTg5LCBzeXNfZ2V0cmxpbWl0LCAyKQorI2RlZmluZSBfX05SX2dldHJ1c2FnZSAJCQkJMTkwCitfX1NZU0NBTEwoMTkwLCBzeXNfZ2V0cnVzYWdlLCAyKQorI2RlZmluZSBfX05SX2Z1dGV4CQkJCTE5MQorX19TWVNDQUxMKDE5MSwgc3lzX2Z1dGV4LCA1KQorI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSAJCQkxOTIKK19fU1lTQ0FMTCgxOTIsIHN5c19nZXR0aW1lb2ZkYXksIDIpCisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5IAkJCTE5MworX19TWVNDQUxMKDE5Mywgc3lzX3NldHRpbWVvZmRheSwgMikKKyNkZWZpbmUgX19OUl9hZGp0aW1leCAJCQkJMTk0CitfX1NZU0NBTEwoMTk0LCBzeXNfYWRqdGltZXgsIDEpCisjZGVmaW5lIF9fTlJfbmFub3NsZWVwCSAJCQkxOTUKK19fU1lTQ0FMTCgxOTUsIHN5c19uYW5vc2xlZXAsIDIpCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzIAkJCQkxOTYKK19fU1lTQ0FMTCgxOTYsIHN5c19nZXRncm91cHMsIDIpCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzIAkJCQkxOTcKK19fU1lTQ0FMTCgxOTcsIHN5c19zZXRncm91cHMsIDIpCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgCQkJMTk4CitfX1NZU0NBTEwoMTk4LCBzeXNfc2V0aG9zdG5hbWUsIDIpCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAJCQkxOTkKK19fU1lTQ0FMTCgxOTksIHN5c19zZXRkb21haW5uYW1lLCAyKQorI2RlZmluZSBfX05SX3N5c2xvZyAJCQkJMjAwCitfX1NZU0NBTEwoMjAwLCBzeXNfc3lzbG9nLCAzKQorI2RlZmluZSBfX05SX3ZoYW5ndXAgCQkJCTIwMQorX19TWVNDQUxMKDIwMSwgc3lzX3ZoYW5ndXAsIDApCisjZGVmaW5lIF9fTlJfdXNlbGliIAkJCQkyMDIKK19fU1lTQ0FMTCgyMDIsIHN5c191c2VsaWIsIDEpCisjZGVmaW5lIF9fTlJfcmVib290IAkJCQkyMDMKK19fU1lTQ0FMTCgyMDMsIHN5c19yZWJvb3QsIDMpCisjZGVmaW5lIF9fTlJfcXVvdGFjdGwgCQkJCTIwNAorX19TWVNDQUxMKDIwNCwgc3lzX3F1b3RhY3RsLCA0KQorI2RlZmluZSBfX05SX25mc3NlcnZjdGwgCQkJMjA1CitfX1NZU0NBTEwoMjA1LCBzeXNfbmZzc2VydmN0bCwgMykKKyNkZWZpbmUgX19OUl9fc3lzY3RsIAkJCQkyMDYKK19fU1lTQ0FMTCgyMDYsIHN5c19zeXNjdGwsIDEpCisjZGVmaW5lIF9fTlJfYmRmbHVzaCAJCQkJMjA3CitfX1NZU0NBTEwoMjA3LCBzeXNfYmRmbHVzaCwgMikKKyNkZWZpbmUgX19OUl91bmFtZSAJCQkJMjA4CitfX1NZU0NBTEwoMjA4LCBzeXNfbmV3dW5hbWUsIDEpCisjZGVmaW5lIF9fTlJfc3lzaW5mbyAJCQkJMjA5CitfX1NZU0NBTEwoMjA5LCBzeXNfc3lzaW5mbywgMSkKKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAJCQkyMTAKK19fU1lTQ0FMTCgyMTAsIHN5c19pbml0X21vZHVsZSwgMikKKyNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlIAkJCTIxMQorX19TWVNDQUxMKDIxMSwgc3lzX2RlbGV0ZV9tb2R1bGUsIDEpCisKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbSAJCQkyMTIKK19fU1lTQ0FMTCgyMTIsIHN5c19zY2hlZF9zZXRwYXJhbSwgMikKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAJCQkyMTMKK19fU1lTQ0FMTCgyMTMsIHN5c19zY2hlZF9nZXRwYXJhbSwgMikKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgCQkyMTQKK19fU1lTQ0FMTCgyMTQsIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIsIDMpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyIAkJMjE1CitfX1NZU0NBTEwoMjE1LCBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyLCAxKQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggCQkyMTYKK19fU1lTQ0FMTCgyMTYsIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LCAxKQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gCQkyMTcKK19fU1lTQ0FMTCgyMTcsIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluLCAxKQorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAJCTIxOAorX19TWVNDQUxMKDIxOCwgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgMikKKyNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAJCQkyMTkKK19fU1lTQ0FMTCgyMTksIHN5c19zY2hlZF95aWVsZCwgMCkKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4JIAkJCTIyMgorX19TWVNDQUxMKDIyMiwgeHRlbnNhX3NpZ3JldHVybiwgMCkKKworLyogU2lnbmFsIEhhbmRsaW5nICovCisKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgCQkJMjIzCitfX1NZU0NBTEwoMjIzLCBzeXNfcmVzdGFydF9zeXNjYWxsLCAwKQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrIAkJCTIyNAorX19TWVNDQUxMKDIyNCwgeHRlbnNhX3NpZ2FsdHN0YWNrLCAyKQorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAJCQkyMjUKK19fU1lTQ0FMTCgyMjUsIHh0ZW5zYV9ydF9zaWdyZXR1cm4sIDEpCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uIAkJCTIyNgorX19TWVNDQUxMKDIyNiwgc3lzX3J0X3NpZ2FjdGlvbiwgNCkKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzayAJCQkyMjcKK19fU1lTQ0FMTCgyMjcsIHN5c19ydF9zaWdwcm9jbWFzaywgNCkKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nIAkJCTIyOAorX19TWVNDQUxMKDIyOCwgc3lzX3J0X3NpZ3BlbmRpbmcsIDIpCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0IAkJCTIyOQorX19TWVNDQUxMKDIyOSwgc3lzX3J0X3NpZ3RpbWVkd2FpdCwgNCkKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8gCQkJMjMwCitfX1NZU0NBTEwoMjMwLCBzeXNfcnRfc2lncXVldWVpbmZvLCAzKQorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQgCQkJMjMxCitfX1NZU0NBTEwoMjMxLCB4dGVuc2FfcnRfc2lnc3VzcGVuZCwgMikKKworLyogTWVzc2FnZSAqLworCisjZGVmaW5lIF9fTlJfbXFfb3BlbiAJCQkJMjMyCitfX1NZU0NBTEwoMjMyLCBzeXNfbXFfb3BlbiwgNCkKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsgCQkJCTIzMworX19TWVNDQUxMKDIzMywgc3lzX21xX3VubGluaywgMSkKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQgCQkJMjM0CitfX1NZU0NBTEwoMjM0LCBzeXNfbXFfdGltZWRzZW5kLCA1KQorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZSAJCQkyMzUKK19fU1lTQ0FMTCgyMzUsIHN5c19tcV90aW1lZHJlY2VpdmUsIDUpCisjZGVmaW5lIF9fTlJfbXFfbm90aWZ5IAkJCQkyMzYKK19fU1lTQ0FMTCgyMzYsIHN5c19tcV9ub3RpZnksIDIpCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAJCQkyMzcKK19fU1lTQ0FMTCgyMzcsIHN5c19tcV9nZXRzZXRhdHRyLCAzKQorI2RlZmluZSBfX05SX2F2YWlsYWJsZTIzOAkJCTIzOAorX19TWVNDQUxMKDIzOCwgc3lzX25pX3N5c2NhbGwsIDApCisKKy8qIElPICovCisKKyNkZWZpbmUgX19OUl9pb19zZXR1cCAJCQkJMjM5CitfX1NZU0NBTEwoMjM5LCBzeXNfaW9fc2V0dXAsIDIpCisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveSAJCQkyNDAKK19fU1lTQ0FMTCgyNDAsIHN5c19pb19kZXN0cm95LCAxKQorI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAJCQkJMjQxCitfX1NZU0NBTEwoMjQxLCBzeXNfaW9fc3VibWl0LCAzKQorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cyAJCQkyNDIKK19fU1lTQ0FMTCgyNDIsIHN5c19pb19nZXRldmVudHMsIDUpCisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsIAkJCQkyNDMKK19fU1lTQ0FMTCgyNDMsIHN5c19pb19jYW5jZWwsIDMpCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZSAJCQkyNDQKK19fU1lTQ0FMTCgyNDQsIHN5c19jbG9ja19zZXR0aW1lLCAyKQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUgCQkJMjQ1CitfX1NZU0NBTEwoMjQ1LCBzeXNfY2xvY2tfZ2V0dGltZSwgMikKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMgCQkJMjQ2CitfX1NZU0NBTEwoMjQ2LCBzeXNfY2xvY2tfZ2V0cmVzLCAyKQorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcCAJCQkyNDcKK19fU1lTQ0FMTCgyNDcsIHN5c19jbG9ja19uYW5vc2xlZXAsIDQpCisKKy8qIFRpbWVyICovCisKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUgCQkJMjQ4CitfX1NZU0NBTEwoMjQ4LCBzeXNfdGltZXJfY3JlYXRlLCAzKQorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAJCQkyNDkKK19fU1lTQ0FMTCgyNDksIHN5c190aW1lcl9kZWxldGUsIDEpCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAJCQkyNTAKK19fU1lTQ0FMTCgyNTAsIHN5c190aW1lcl9zZXR0aW1lLCA0KQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUgCQkJMjUxCitfX1NZU0NBTEwoMjUxLCBzeXNfdGltZXJfZ2V0dGltZSwgMikKKyNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuIAkJCTI1MgorX19TWVNDQUxMKDI1Miwgc3lzX3RpbWVyX2dldG92ZXJydW4sIDEpCisKKy8qIFN5c3RlbSAqLworCisjZGVmaW5lIF9fTlJfcmVzZXJ2ZWQyNDQgCQkJMjUzCitfX1NZU0NBTEwoMjUzLCBzeXNfbmlfc3lzY2FsbCwgMCkKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAJCQkyNTQKK19fU1lTQ0FMTCgyNTQsIHN5c19sb29rdXBfZGNvb2tpZSwgNCkKKyNkZWZpbmUgX19OUl9hdmFpbGFibGUyNTUJCQkyNTUKK19fU1lTQ0FMTCgyNTUsIHN5c19uaV9zeXNjYWxsLCAwKQorI2RlZmluZSBfX05SX2FkZF9rZXkgCQkJCTI1NgorX19TWVNDQUxMKDI1Niwgc3lzX2FkZF9rZXksIDUpCisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkgCQkJMjU3CitfX1NZU0NBTEwoMjU3LCBzeXNfcmVxdWVzdF9rZXksIDUpCisjZGVmaW5lIF9fTlJfa2V5Y3RsIAkJCQkyNTgKK19fU1lTQ0FMTCgyNTgsIHN5c19rZXljdGwsIDUpCisjZGVmaW5lIF9fTlJfYXZhaWxhYmxlMjU5CQkJMjU5CitfX1NZU0NBTEwoMjU5LCBzeXNfbmlfc3lzY2FsbCwgMCkKKworI2RlZmluZSBfX05SX3N5c2NhbGxfY291bnQJCQkyNjEKKworLyoKKyAqIHN5c3h0ZW5zYSBzeXNjYWxsIGhhbmRsZXIKKyAqCisgKiBpbnQgc3lzeHRlbnNhIChTWVNfWFRFTlNBX0FUT01JQ19TRVQsICAgICBwdHIsIHZhbCwgICAgdW51c2VkKTsKKyAqIGludCBzeXN4dGVuc2EgKFNZU19YVEVOU0FfQVRPTUlDX0FERCwgICAgIHB0ciwgdmFsLCAgICB1bnVzZWQpOworICogaW50IHN5c3h0ZW5zYSAoU1lTX1hURU5TQV9BVE9NSUNfRVhHX0FERCwgcHRyLCB2YWwsICAgIHVudXNlZCk7CisgKiBpbnQgc3lzeHRlbnNhIChTWVNfWFRFTlNBX0FUT01JQ19DTVBfU1dQLCBwdHIsIG9sZHZhbCwgbmV3dmFsKTsKKyAqICAgICAgICBhMiAgICAgICAgICAgIGE2ICAgICAgICAgICAgICAgICAgIGEzICAgIGE0ICAgICAgYTUKKyAqLworCisjZGVmaW5lIFNZU19YVEVOU0FfUkVTRVJWRUQgICAgICAgICAgICAgICAwICAgICAvKiBkb24ndCB1c2UgdGhpcyAqLworI2RlZmluZSBTWVNfWFRFTlNBX0FUT01JQ19TRVQgICAgICAgICAgICAgMSAgICAgLyogc2V0IHZhcmlhYmxlICovCisjZGVmaW5lIFNZU19YVEVOU0FfQVRPTUlDX0VYR19BREQgICAgICAgICAyICAgICAvKiBleGNoYW5nZSBtZW1vcnkgYW5kIGFkZCAqLworI2RlZmluZSBTWVNfWFRFTlNBX0FUT01JQ19BREQgICAgICAgICAgICAgMyAgICAgLyogYWRkIHRvIG1lbW9yeSAqLworI2RlZmluZSBTWVNfWFRFTlNBX0FUT01JQ19DTVBfU1dQICAgICAgICAgNCAgICAgLyogY29tcGFyZSBhbmQgc3dhcCAqLworCisjZGVmaW5lIFNZU19YVEVOU0FfQ09VTlQgICAgICAgICAgICAgICAgICA1ICAgICAvKiBjb3VudCAqLworCisjaWZkZWYgX19LRVJORUxfXwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtMjMwLDYgKzYxMSw5IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19VVElNRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgkvKiBfWFRFTlNBX1VOSVNURF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS92YXJpYW50LWZzZi9jb3JlLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvdmFyaWFudC1mc2YvY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzM3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdmFyaWFudC1mc2YvY29yZS5oCkBAIC0wLDAgKzEsMzU5IEBACisvKgorICogWHRlbnNhIHByb2Nlc3NvciBjb3JlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYgVGVuc2lsaWNhIEluYy4KKyAqLworCisjaWZuZGVmIF9YVEVOU0FfQ09SRV9ICisjZGVmaW5lIF9YVEVOU0FfQ09SRV9ICisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgICAgUGFyYW1ldGVycyBVc2VmdWwgZm9yIEFueSBDb2RlLCBVU0VSIG9yIFBSSVZJTEVHRUQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogIE5vdGU6ICBNYWNyb3Mgb2YgdGhlIGZvcm0gWENIQUxfSEFWRV8qKiogaGF2ZSBhIHZhbHVlIG9mIDEgaWYgdGhlIG9wdGlvbiBpcworICogIGNvbmZpZ3VyZWQsIGFuZCBhIHZhbHVlIG9mIDAgb3RoZXJ3aXNlLiAgVGhlc2UgbWFjcm9zIGFyZSBhbHdheXMgZGVmaW5lZC4KKyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCUlTQQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9IQVZFX0JFCQkJMQkvKiBiaWctZW5kaWFuIGJ5dGUgb3JkZXJpbmcgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9XSU5ET1dFRAkJMQkvKiB3aW5kb3dlZCByZWdpc3RlcnMgb3B0aW9uICovCisjZGVmaW5lIFhDSEFMX05VTV9BUkVHUwkJCTY0CS8qIG51bSBvZiBwaHlzaWNhbCBhZGRyIHJlZ3MgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0FSRUdTX0xPRzIJCTYJLyogbG9nMihYQ0hBTF9OVU1fQVJFR1MpICovCisjZGVmaW5lIFhDSEFMX01BWF9JTlNUUlVDVElPTl9TSVpFCTMJLyogbWF4IGluc3RyIGJ5dGVzICgzLi44KSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0RFQlVHCQkxCS8qIGRlYnVnIG9wdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0RFTlNJVFkJCTEJLyogMTYtYml0IGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0xPT1BTCQkxCS8qIHplcm8tb3ZlcmhlYWQgbG9vcHMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9OU0EJCQkxCS8qIE5TQS9OU0FVIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01JTk1BWAkJMAkvKiBNSU4vTUFYIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1NFWFQJCQkwCS8qIFNFWFQgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9DTEFNUFMJCTAJLyogQ0xBTVBTIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTVVMMTYJCTAJLyogTVVMMTZTL01VTDE2VSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9NVUwzMgkJMAkvKiBNVUxMIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTVVMMzJfSElHSAkJMAkvKiBNVUxVSC9NVUxTSCBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9MMzJSCQkJMQkvKiBMMzJSIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQUJTT0xVVEVfTElURVJBTFMJMQkvKiBub24tUEMtcmVsIChleHRlbmRlZCkgTDMyUiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NPTlNUMTYJCTAJLyogQ09OU1QxNiBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0FERFgJCQkxCS8qIEFERFgjL1NVQlgjIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1dJREVfQlJBTkNIRVMJMAkvKiBCKi5XMTggb3IgQiouVzE1IGluc3RyJ3MgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9QUkVESUNURURfQlJBTkNIRVMJMAkvKiBCW0VRL0VRWi9ORS9ORVpdVCBpbnN0cidzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQ0FMTDRBTkQxMgkJMQkvKiAob2Jzb2xldGUgb3B0aW9uKSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0FCUwkJCTEJLyogQUJTIGluc3RydWN0aW9uICovCisvKiNkZWZpbmUgWENIQUxfSEFWRV9QT1BDCQkwKi8JLyogUE9QQyBpbnN0cnVjdGlvbiAqLworLyojZGVmaW5lIFhDSEFMX0hBVkVfQ1JDCQkwKi8JLyogQ1JDIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfUkVMRUFTRV9TWU5DCQkwCS8qIEwzMkFJL1MzMlJJIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1MzMkMxSQkJMAkvKiBTMzJDMUkgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9TUEVDVUxBVElPTgkJMAkvKiBzcGVjdWxhdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0ZVTExfUkVTRVQJCTEJLyogYWxsIHJlZ3Mvc3RhdGUgcmVzZXQgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0NPTlRFWFRTCQkxCS8qICovCisjZGVmaW5lIFhDSEFMX05VTV9NSVNDX1JFR1MJCTIJLyogbnVtIG9mIHNjcmF0Y2ggcmVncyAoMC4uNCkgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9UQVBfTUFTVEVSCQkwCS8qIEpUQUcgVEFQIGNvbnRyb2wgaW5zdHIncyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1BSSUQJCQkxCS8qIHByb2Nlc3NvciBJRCByZWdpc3RlciAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1RIUkVBRFBUUgkJMQkvKiBUSFJFQURQVFIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9CT09MRUFOUwkJMAkvKiBib29sZWFuIHJlZ2lzdGVycyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NQCQkJMAkvKiBDUEVOQUJMRSByZWcgKGNvcHJvY2Vzc29yKSAqLworI2RlZmluZSBYQ0hBTF9DUF9NQVhDRkcJCQkwCS8qIG1heCBhbGxvd2VkIGNwIGlkIHBsdXMgb25lICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTUFDMTYJCTAJLyogTUFDMTYgcGFja2FnZSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RPUkZQVTIwMDUJMAkvKiB2ZWN0b3IgZmxvYXRpbmctcG9pbnQgcGtnICovCisjZGVmaW5lIFhDSEFMX0hBVkVfRlAJCQkwCS8qIGZsb2F0aW5nIHBvaW50IHBrZyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RSQTEJCTAJLyogVmVjdHJhIEkgIHBrZyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RSQUxYCQkwCS8qIFZlY3RyYSBMWCBwa2cgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ISUZJMgkJMAkvKiBIaUZpMiBBdWRpbyBFbmdpbmUgcGtnICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJTUlTQworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9OVU1fV1JJVEVCVUZGRVJfRU5UUklFUwk0CS8qIHNpemUgb2Ygd3JpdGUgYnVmZmVyICovCisjZGVmaW5lIFhDSEFMX0lOU1RfRkVUQ0hfV0lEVEgJCTQJLyogaW5zdHItZmV0Y2ggd2lkdGggaW4gYnl0ZXMgKi8KKyNkZWZpbmUgWENIQUxfREFUQV9XSURUSAkJNAkvKiBkYXRhIHdpZHRoIGluIGJ5dGVzICovCisvKiAgSW4gVDEwNTAsIGFwcGxpZXMgdG8gc2VsZWN0ZWQgY29yZSBsb2FkIGFuZCBzdG9yZSBpbnN0cnVjdGlvbnMgKHNlZSBJU0EpOiAqLworI2RlZmluZSBYQ0hBTF9VTkFMSUdORURfTE9BRF9FWENFUFRJT04JMQkvKiB1bmFsaWduZWQgbG9hZHMgY2F1c2UgZXhjLiAqLworI2RlZmluZSBYQ0hBTF9VTkFMSUdORURfU1RPUkVfRVhDRVBUSU9OCTEJLyogdW5hbGlnbmVkIHN0b3JlcyBjYXVzZSBleGMuKi8KKworI2RlZmluZSBYQ0hBTF9DT1JFX0lECQkJImZzZiIJLyogYWxwaGFudW0gY29yZSBuYW1lCisJCQkJCQkgICAoQ29yZUlEKSBzZXQgaW4gdGhlIFh0ZW5zYQorCQkJCQkJICAgUHJvY2Vzc29yIEdlbmVyYXRvciAqLworCisjZGVmaW5lIFhDSEFMX0JVSUxEX1VOSVFVRV9JRAkJMHgwMDAwNjcwMAkvKiAyMi1iaXQgc3cgYnVpbGQgSUQgKi8KKworLyoKKyAqICBUaGVzZSBkZWZpbml0aW9ucyBkZXNjcmliZSB0aGUgaGFyZHdhcmUgdGFyZ2V0ZWQgYnkgdGhpcyBzb2Z0d2FyZS4KKyAqLworI2RlZmluZSBYQ0hBTF9IV19DT05GSUdJRDAJCTB4QzEwM0MzRkYJLyogQ29uZmlnSUQgaGkgMzIgYml0cyovCisjZGVmaW5lIFhDSEFMX0hXX0NPTkZJR0lEMQkJMHgwQzAwNjcwMAkvKiBDb25maWdJRCBsbyAzMiBiaXRzKi8KKyNkZWZpbmUgWENIQUxfSFdfVkVSU0lPTl9OQU1FCQkiTFgyLjAuMCIJLyogZnVsbCB2ZXJzaW9uIG5hbWUgKi8KKyNkZWZpbmUgWENIQUxfSFdfVkVSU0lPTl9NQUpPUgkJMjIwMAkvKiBtYWpvciB2ZXIjIG9mIHRhcmdldGVkIGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX1ZFUlNJT05fTUlOT1IJCTAJLyogbWlub3IgdmVyIyBvZiB0YXJnZXRlZCBodyAqLworI2RlZmluZSBYVEhBTF9IV19SRUxfTFgyCQkxCisjZGVmaW5lIFhUSEFMX0hXX1JFTF9MWDJfMAkJMQorI2RlZmluZSBYVEhBTF9IV19SRUxfTFgyXzBfMAkJMQorI2RlZmluZSBYQ0hBTF9IV19DT05GSUdJRF9SRUxJQUJMRQkxCisvKiAgSWYgc29mdHdhcmUgdGFyZ2V0cyBhICpyYW5nZSogb2YgaGFyZHdhcmUgdmVyc2lvbnMsIHRoZXNlIGFyZSB0aGUgYm91bmRzOiAqLworI2RlZmluZSBYQ0hBTF9IV19NSU5fVkVSU0lPTl9NQUpPUgkyMjAwCS8qIG1ham9yIHYgb2YgZWFybGllc3QgdGd0IGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX01JTl9WRVJTSU9OX01JTk9SCTAJLyogbWlub3IgdiBvZiBlYXJsaWVzdCB0Z3QgaHcgKi8KKyNkZWZpbmUgWENIQUxfSFdfTUFYX1ZFUlNJT05fTUFKT1IJMjIwMAkvKiBtYWpvciB2IG9mIGxhdGVzdCB0Z3QgaHcgKi8KKyNkZWZpbmUgWENIQUxfSFdfTUFYX1ZFUlNJT05fTUlOT1IJMAkvKiBtaW5vciB2IG9mIGxhdGVzdCB0Z3QgaHcgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlDQUNIRQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9JQ0FDSEVfTElORVNJWkUJCTE2CS8qIEktY2FjaGUgbGluZSBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lIFhDSEFMX0RDQUNIRV9MSU5FU0laRQkJMTYJLyogRC1jYWNoZSBsaW5lIHNpemUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgWENIQUxfSUNBQ0hFX0xJTkVXSURUSAkJNAkvKiBsb2cyKEkgbGluZSBzaXplIGluIGJ5dGVzKSAqLworI2RlZmluZSBYQ0hBTF9EQ0FDSEVfTElORVdJRFRICQk0CS8qIGxvZzIoRCBsaW5lIHNpemUgaW4gYnl0ZXMpICovCisKKyNkZWZpbmUgWENIQUxfSUNBQ0hFX1NJWkUJCTgxOTIJLyogSS1jYWNoZSBzaXplIGluIGJ5dGVzIG9yIDAgKi8KKyNkZWZpbmUgWENIQUxfRENBQ0hFX1NJWkUJCTgxOTIJLyogRC1jYWNoZSBzaXplIGluIGJ5dGVzIG9yIDAgKi8KKworI2RlZmluZSBYQ0hBTF9EQ0FDSEVfSVNfV1JJVEVCQUNLCTAJLyogd3JpdGViYWNrIGZlYXR1cmUgKi8KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBQYXJhbWV0ZXJzIFVzZWZ1bCBmb3IgUFJJVklMRUdFRCAoU3VwZXJ2aXNvcnkgb3IgTm9uLVZpcnR1YWxpemVkKSBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIFhURU5TQV9IQUxfTk9OX1BSSVZJTEVHRURfT05MWQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlDQUNIRQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9IQVZFX1BJRgkJCTEJLyogYW55IG91dGJvdW5kIFBJRiBwcmVzZW50ICovCisKKy8qICBJZiBwcmVzZW50LCBjYWNoZSBzaXplIGluIGJ5dGVzID09ICh3YXlzICogMl4obGluZXdpZHRoICsgc2V0d2lkdGgpKS4gICovCisKKy8qICBOdW1iZXIgb2YgY2FjaGUgc2V0cyBpbiBsb2cyKGxpbmVzIHBlciB3YXkpOiAgKi8KKyNkZWZpbmUgWENIQUxfSUNBQ0hFX1NFVFdJRFRICQk4CisjZGVmaW5lIFhDSEFMX0RDQUNIRV9TRVRXSURUSAkJOAorCisvKiAgQ2FjaGUgc2V0IGFzc29jaWF0aXZpdHkgKG51bWJlciBvZiB3YXlzKTogICovCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9XQVlTCQkyCisjZGVmaW5lIFhDSEFMX0RDQUNIRV9XQVlTCQkyCisKKy8qICBDYWNoZSBmZWF0dXJlczogICovCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9MSU5FX0xPQ0tBQkxFCTAKKyNkZWZpbmUgWENIQUxfRENBQ0hFX0xJTkVfTE9DS0FCTEUJMAorI2RlZmluZSBYQ0hBTF9JQ0FDSEVfRUNDX1BBUklUWQkJMAorI2RlZmluZSBYQ0hBTF9EQ0FDSEVfRUNDX1BBUklUWQkJMAorCisvKiAgTnVtYmVyIG9mIGVuY29kZWQgY2FjaGUgYXR0ciBiaXRzIChzZWUgPHh0ZW5zYS9oYWwuaD4gZm9yIGRlY29kZWQgYml0cyk6ICAqLworI2RlZmluZSBYQ0hBTF9DQV9CSVRTCQkJNAorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJSU5URVJOQUwgSS9EIFJBTS9ST01zIGFuZCBYTE1JCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFhDSEFMX05VTV9JTlNUUk9NCQkwCS8qIG51bWJlciBvZiBjb3JlIGluc3RyLiBST01zICovCisjZGVmaW5lIFhDSEFMX05VTV9JTlNUUkFNCQkwCS8qIG51bWJlciBvZiBjb3JlIGluc3RyLiBSQU1zICovCisjZGVmaW5lIFhDSEFMX05VTV9EQVRBUk9NCQkwCS8qIG51bWJlciBvZiBjb3JlIGRhdGEgUk9NcyAqLworI2RlZmluZSBYQ0hBTF9OVU1fREFUQVJBTQkJMAkvKiBudW1iZXIgb2YgY29yZSBkYXRhIFJBTXMgKi8KKyNkZWZpbmUgWENIQUxfTlVNX1VSQU0JCQkwCS8qIG51bWJlciBvZiBjb3JlIHVuaWZpZWQgUkFNcyovCisjZGVmaW5lIFhDSEFMX05VTV9YTE1JCQkJMAkvKiBudW1iZXIgb2YgY29yZSBYTE1JIHBvcnRzICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQlJTlRFUlJVUFRTIGFuZCBUSU1FUlMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9JTlRFUlJVUFRTCQkxCS8qIGludGVycnVwdCBvcHRpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ISUdIUFJJX0lOVEVSUlVQVFMJMQkvKiBtZWQvaGlnaC1wcmkuIGludGVycnVwdHMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9OTUkJCQkwCS8qIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9DQ09VTlQJCTEJLyogQ0NPVU5UIHJlZy4gKHRpbWVyIG9wdGlvbikgKi8KKyNkZWZpbmUgWENIQUxfTlVNX1RJTUVSUwkJMwkvKiBudW1iZXIgb2YgQ0NPTVBBUkVuIHJlZ3MgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0lOVEVSUlVQVFMJCTE3CS8qIG51bWJlciBvZiBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFhDSEFMX05VTV9JTlRFUlJVUFRTX0xPRzIJNQkvKiBjZWlsKGxvZzIoTlVNX0lOVEVSUlVQVFMpKSAqLworI2RlZmluZSBYQ0hBTF9OVU1fRVhUSU5URVJSVVBUUwkJMTAJLyogbnVtIG9mIGV4dGVybmFsIGludGVycnVwdHMgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0lOVExFVkVMUwkJNAkvKiBudW1iZXIgb2YgaW50ZXJydXB0IGxldmVscworCQkJCQkJICAgKG5vdCBpbmNsdWRpbmcgbGV2ZWwgemVybykgKi8KKyNkZWZpbmUgWENIQUxfRVhDTV9MRVZFTAkJMQkvKiBsZXZlbCBtYXNrZWQgYnkgUFMuRVhDTSAqLworCS8qIChhbHdheXMgMSBpbiBYRUExOyBsZXZlbHMgMiAuLiBFWENNX0xFVkVMIGFyZSAibWVkaXVtIHByaW9yaXR5IikgKi8KKworLyogIE1hc2tzIG9mIGludGVycnVwdHMgYXQgZWFjaCBpbnRlcnJ1cHQgbGV2ZWw6ICAqLworI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDFfTUFTSwkJMHgwMDAwNjRGOQorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDJfTUFTSwkJMHgwMDAwODkwMgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfTUFTSwkJMHgwMDAxMTIwNAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfTUFTSwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfTUFTSwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDZfTUFTSwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDdfTUFTSwkJMHgwMDAwMDAwMAorCisvKiAgTWFza3Mgb2YgaW50ZXJydXB0cyBhdCBlYWNoIHJhbmdlIDEuLm4gb2YgaW50ZXJydXB0IGxldmVsczogICovCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMMV9BTkRCRUxPV19NQVNLCTB4MDAwMDY0RjkKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX0FOREJFTE9XX01BU0sJMHgwMDAwRURGQgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfQU5EQkVMT1dfTUFTSwkweDAwMDFGRkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw1X0FOREJFTE9XX01BU0sJMHgwMDAxRkZGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDZfQU5EQkVMT1dfTUFTSwkweDAwMDFGRkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMN19BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKKworLyogIExldmVsIG9mIGVhY2ggaW50ZXJydXB0OiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UMF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxX0xFVkVMCQkyCisjZGVmaW5lIFhDSEFMX0lOVDJfTEVWRUwJCTMKKyNkZWZpbmUgWENIQUxfSU5UM19MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQ0X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDVfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UNl9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQ3X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDhfTEVWRUwJCTIKKyNkZWZpbmUgWENIQUxfSU5UOV9MRVZFTAkJMworI2RlZmluZSBYQ0hBTF9JTlQxMF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxMV9MRVZFTAkJMgorI2RlZmluZSBYQ0hBTF9JTlQxMl9MRVZFTAkJMworI2RlZmluZSBYQ0hBTF9JTlQxM19MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxNF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxNV9MRVZFTAkJMgorI2RlZmluZSBYQ0hBTF9JTlQxNl9MRVZFTAkJMworI2RlZmluZSBYQ0hBTF9ERUJVR0xFVkVMCQk0CS8qIGRlYnVnIGludGVycnVwdCBsZXZlbCAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0RFQlVHX0VYVEVSTl9JTlQJMAkvKiBPQ0QgZXh0ZXJuYWwgZGIgaW50ZXJydXB0ICovCisKKy8qICBUeXBlIG9mIGVhY2ggaW50ZXJydXB0OiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UMF9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDJfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UM19UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQ0X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDVfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UNl9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQ3X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0VER0UKKyNkZWZpbmUgWENIQUxfSU5UOF9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9FREdFCisjZGVmaW5lIFhDSEFMX0lOVDlfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fRURHRQorI2RlZmluZSBYQ0hBTF9JTlQxMF9UWVBFIAlYVEhBTF9JTlRUWVBFX1RJTUVSCisjZGVmaW5lIFhDSEFMX0lOVDExX1RZUEUgCVhUSEFMX0lOVFRZUEVfVElNRVIKKyNkZWZpbmUgWENIQUxfSU5UMTJfVFlQRSAJWFRIQUxfSU5UVFlQRV9USU1FUgorI2RlZmluZSBYQ0hBTF9JTlQxM19UWVBFIAlYVEhBTF9JTlRUWVBFX1NPRlRXQVJFCisjZGVmaW5lIFhDSEFMX0lOVDE0X1RZUEUgCVhUSEFMX0lOVFRZUEVfU09GVFdBUkUKKyNkZWZpbmUgWENIQUxfSU5UMTVfVFlQRSAJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRQorI2RlZmluZSBYQ0hBTF9JTlQxNl9UWVBFIAlYVEhBTF9JTlRUWVBFX1NPRlRXQVJFCisKKy8qICBNYXNrcyBvZiBpbnRlcnJ1cHRzIGZvciBlYWNoIHR5cGUgb2YgaW50ZXJydXB0OiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX1VOQ09ORklHVVJFRAkweEZGRkUwMDAwCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19TT0ZUV0FSRQkweDAwMDFFMDAwCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19FWFRFUk5fRURHRQkweDAwMDAwMzgwCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19FWFRFUk5fTEVWRUwJMHgwMDAwMDA3RgorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfVElNRVIJMHgwMDAwMUMwMAorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfTk1JCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19XUklURV9FUlJPUgkweDAwMDAwMDAwCisKKy8qICBJbnRlcnJ1cHQgbnVtYmVycyBhc3NpZ25lZCB0byBzcGVjaWZpYyBpbnRlcnJ1cHQgc291cmNlczogICovCisjZGVmaW5lIFhDSEFMX1RJTUVSMF9JTlRFUlJVUFQJCTEwCS8qIENDT01QQVJFMCAqLworI2RlZmluZSBYQ0hBTF9USU1FUjFfSU5URVJSVVBUCQkxMQkvKiBDQ09NUEFSRTEgKi8KKyNkZWZpbmUgWENIQUxfVElNRVIyX0lOVEVSUlVQVAkJMTIJLyogQ0NPTVBBUkUyICovCisjZGVmaW5lIFhDSEFMX1RJTUVSM19JTlRFUlJVUFQJCVhUSEFMX1RJTUVSX1VOQ09ORklHVVJFRAorCisvKiAgSW50ZXJydXB0IG51bWJlcnMgZm9yIGxldmVscyBhdCB3aGljaCBvbmx5IG9uZSBpbnRlcnJ1cHQgaXMgY29uZmlndXJlZDogICovCisvKiAgKFRoZXJlIGFyZSBtYW55IGludGVycnVwdHMgZWFjaCBhdCBsZXZlbChzKSAxLCAyLCAzLikgICovCisKKworLyoKKyAqICBFeHRlcm5hbCBpbnRlcnJ1cHQgdmVjdG9ycy9sZXZlbHMuCisgKiAgVGhlc2UgbWFjcm9zIGRlc2NyaWJlIGhvdyBYdGVuc2EgcHJvY2Vzc29yIGludGVycnVwdCBudW1iZXJzCisgKiAgKGFzIG51bWJlcmVkIGludGVybmFsbHksIGVnLiBpbiBJTlRFUlJVUFQgYW5kIElOVEVOQUJMRSByZWdpc3RlcnMpCisgKiAgbWFwIHRvIGV4dGVybmFsIEJJbnRlcnJ1cHQ8bj4gcGlucywgZm9yIHRob3NlIGludGVycnVwdHMKKyAqICBjb25maWd1cmVkIGFzIGV4dGVybmFsIChsZXZlbC10cmlnZ2VyZWQsIGVkZ2UtdHJpZ2dlcmVkLCBvciBOTUkpLgorICogIFNlZSB0aGUgWHRlbnNhIHByb2Nlc3NvciBkYXRhYm9vayBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qICBDb3JlIGludGVycnVwdCBudW1iZXJzIG1hcHBlZCB0byBlYWNoIEVYVEVSTkFMIGludGVycnVwdCBudW1iZXI6ICAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQwX05VTQkJMAkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMV9OVU0JCTEJLyogKGludGxldmVsIDIpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDJfTlVNCQkyCS8qIChpbnRsZXZlbCAzKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQzX05VTQkJMwkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UNF9OVU0JCTQJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDVfTlVNCQk1CS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQ2X05VTQkJNgkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UN19OVU0JCTcJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDhfTlVNCQk4CS8qIChpbnRsZXZlbCAyKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQ5X05VTQkJOQkvKiAoaW50bGV2ZWwgMykgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCUVYQ0VQVElPTlMgYW5kIFZFQ1RPUlMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfWEVBX1ZFUlNJT04JCTIJLyogWHRlbnNhIEV4Y2VwdGlvbiBBcmNoaXRlY3R1cmUKKwkJCQkJCSAgIG51bWJlcjogMSA9PSBYRUExIChvbGQpCisJCQkJCQkJICAgMiA9PSBYRUEyIChuZXcpCisJCQkJCQkJICAgMCA9PSBYRUFYIChleHRlcm4pICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWEVBMQkJCTAJLyogRXhjZXB0aW9uIEFyY2hpdGVjdHVyZSAxICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWEVBMgkJCTEJLyogRXhjZXB0aW9uIEFyY2hpdGVjdHVyZSAyICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWEVBWAkJCTAJLyogRXh0ZXJuYWwgRXhjZXB0aW9uIEFyY2guICovCisjZGVmaW5lIFhDSEFMX0hBVkVfRVhDRVBUSU9OUwkJMQkvKiBleGNlcHRpb24gb3B0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTUVNX0VDQ19QQVJJVFkJMAkvKiBsb2NhbCBtZW1vcnkgRUNDL3Bhcml0eSAqLworCisjZGVmaW5lIFhDSEFMX1JFU0VUX1ZFQ1RPUl9WQUREUgkweEZFMDAwMDIwCisjZGVmaW5lIFhDSEFMX1JFU0VUX1ZFQ1RPUl9QQUREUgkweEZFMDAwMDIwCisjZGVmaW5lIFhDSEFMX1VTRVJfVkVDVE9SX1ZBRERSCQkweEQwMDAwMjIwCisjZGVmaW5lIFhDSEFMX1VTRVJfVkVDVE9SX1BBRERSCQkweDAwMDAwMjIwCisjZGVmaW5lIFhDSEFMX0tFUk5FTF9WRUNUT1JfVkFERFIJMHhEMDAwMDIwMAorI2RlZmluZSBYQ0hBTF9LRVJORUxfVkVDVE9SX1BBRERSCTB4MDAwMDAyMDAKKyNkZWZpbmUgWENIQUxfRE9VQkxFRVhDX1ZFQ1RPUl9WQUREUgkweEQwMDAwMjkwCisjZGVmaW5lIFhDSEFMX0RPVUJMRUVYQ19WRUNUT1JfUEFERFIJMHgwMDAwMDI5MAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfVkVDVE9SU19WQUREUgkweEQwMDAwMDAwCisjZGVmaW5lIFhDSEFMX1dJTkRPV19WRUNUT1JTX1BBRERSCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX1ZFQ1RPUl9WQUREUgkweEQwMDAwMjQwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMMl9WRUNUT1JfUEFERFIJMHgwMDAwMDI0MAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfVkVDVE9SX1ZBRERSCTB4RDAwMDAyNTAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwzX1ZFQ1RPUl9QQUREUgkweDAwMDAwMjUwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9WRUNUT1JfVkFERFIJMHhGRTAwMDUyMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfVkVDVE9SX1BBRERSCTB4RkUwMDA1MjAKKyNkZWZpbmUgWENIQUxfREVCVUdfVkVDVE9SX1ZBRERSCVhDSEFMX0lOVExFVkVMNF9WRUNUT1JfVkFERFIKKyNkZWZpbmUgWENIQUxfREVCVUdfVkVDVE9SX1BBRERSCVhDSEFMX0lOVExFVkVMNF9WRUNUT1JfUEFERFIKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlERUJVRworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9IQVZFX09DRAkJCTEJLyogT25DaGlwRGVidWcgb3B0aW9uICovCisjZGVmaW5lIFhDSEFMX05VTV9JQlJFQUsJCTIJLyogbnVtYmVyIG9mIElCUkVBS24gcmVncyAqLworI2RlZmluZSBYQ0hBTF9OVU1fREJSRUFLCQkyCS8qIG51bWJlciBvZiBEQlJFQUtuIHJlZ3MgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9PQ0RfRElSX0FSUkFZCTEJLyogZmFzdGVyIE9DRCBvcHRpb24gKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlNTVUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qICBTZWUgPHh0ZW5zYS9jb25maWcvY29yZS1tYXRtYXAuaD4gaGVhZGVyIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4gICovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9UTEJTCQkJMQkvKiBpbnZlcnNlIG9mIEhBVkVfQ0FDSEVBVFRSICovCisjZGVmaW5lIFhDSEFMX0hBVkVfU1BBTk5JTkdfV0FZCQkwCS8qIG9uZSB3YXkgbWFwcyBJK0QgNEdCIHZhZGRyICovCisjZGVmaW5lIFhDSEFMX0hBVkVfSURFTlRJVFlfTUFQCQkwCS8qIHZhZGRyID09IHBhZGRyIGFsd2F5cyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NBQ0hFQVRUUgkJMAkvKiBDQUNIRUFUVFIgcmVnaXN0ZXIgcHJlc2VudCAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01JTUlDX0NBQ0hFQVRUUgkwCS8qIHJlZ2lvbiBwcm90ZWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWExUX0NBQ0hFQVRUUgkwCS8qIHJlZ2lvbiBwcm90LiB3L3RyYW5zbGF0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfUFRQX01NVQkJMQkvKiBmdWxsIE1NVSAod2l0aCBwYWdlIHRhYmxlCisJCQkJCQkgICBbYXV0b3JlZmlsbF0gYW5kIHByb3RlY3Rpb24pCisJCQkJCQkgICB1c2FibGUgZm9yIGFuIE1NVS1iYXNlZCBPUyAqLworLyogIElmIG5vbmUgb2YgdGhlIGFib3ZlIGxhc3QgNCBhcmUgc2V0LCBpdCdzIGEgY3VzdG9tIFRMQiBjb25maWd1cmF0aW9uLiAgKi8KKyNkZWZpbmUgWENIQUxfSVRMQl9BUkZfRU5UUklFU19MT0cyCTIJLyogbG9nMihhdXRvcmVmaWxsIHdheSBzaXplKSAqLworI2RlZmluZSBYQ0hBTF9EVExCX0FSRl9FTlRSSUVTX0xPRzIJMgkvKiBsb2cyKGF1dG9yZWZpbGwgd2F5IHNpemUpICovCisKKyNkZWZpbmUgWENIQUxfTU1VX0FTSURfQklUUwkJOAkvKiBudW1iZXIgb2YgYml0cyBpbiBBU0lEcyAqLworI2RlZmluZSBYQ0hBTF9NTVVfUklOR1MJCQk0CS8qIG51bWJlciBvZiByaW5ncyAoMS4uNCkgKi8KKyNkZWZpbmUgWENIQUxfTU1VX1JJTkdfQklUUwkJMgkvKiBudW0gb2YgYml0cyBpbiBSSU5HIGZpZWxkICovCisKKyNlbmRpZiAvKiAhWFRFTlNBX0hBTF9OT05fUFJJVklMRUdFRF9PTkxZICovCisKKworI2VuZGlmIC8qIF9YVEVOU0FfQ09SRV9DT05GSUdVUkFUSU9OX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3ZhcmlhbnQtZnNmL3RpZS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3ZhcmlhbnQtZnNmL3RpZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3M2M3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdmFyaWFudC1mc2YvdGllLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIFh0ZW5zYSBwcm9jZXNzb3IgY29yZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2IFRlbnNpbGljYSBJbmMuCisgKi8KKworI2lmbmRlZiBYVEVOU0FfVElFX0gKKyNkZWZpbmUgWFRFTlNBX1RJRV9ICisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJQ09QUk9DRVNTT1JTIGFuZCBFWFRSQSBTVEFURQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9DUF9OVU0JCQkwCS8qIG51bWJlciBvZiBjb3Byb2Nlc3NvcnMgKi8KKyNkZWZpbmUgWENIQUxfQ1BfTUFTSwkJCTB4MDAKKworI2VuZGlmIC8qWFRFTlNBX0NPTkZJR19USUVfSCovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY2FjaGVhc20uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY2FjaGVhc20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNkYmIwYi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2NhY2hlYXNtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MDggKzAsMCBAQAotI2lmbmRlZiBYVEVOU0FfQ0FDSEVBU01fSAotI2RlZmluZSBYVEVOU0FfQ0FDSEVBU01fSAotCi0vKgotICogVEhJUyBGSUxFIElTIEdFTkVSQVRFRCAtLSBETyBOT1QgTU9ESUZZIEJZIEhBTkQKLSAqCi0gKiBpbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2NhY2hlYXNtLmggLS0gYXNzZW1ibGVyLXNwZWNpZmljIGNhY2hlCi0gKiByZWxhdGVkIGRlZmluaXRpb25zIHRoYXQgZGVwZW5kIG9uIENPUkUgY29uZmlndXJhdGlvbi4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgVGVuc2lsaWNhIEluYy4KLSAqLwotCi0KLSNpbmNsdWRlIDx4dGVuc2EvY29yZWFzbS5oPgotCi0KLS8qCi0gKiAgVGhpcyBoZWFkZXIgZmlsZSBkZWZpbmVzIGFzc2VtYmxlciBtYWNyb3Mgb2YgdGhlIGZvcm06Ci0gKgk8eD5jYWNoZV88ZnVuYz4KLSAqICB3aGVyZSA8eD4gaXMgJ2knIG9yICdkJyBmb3IgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgY2FjaGVzLAotICogIGFuZCA8ZnVuYz4gaW5kaWNhdGVzIHRoZSBmdW5jdGlvbiBvZiB0aGUgbWFjcm8uCi0gKgotICogIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIDxmdW5jPiBhcmUgZGVmaW5lZCwKLSAqICBhbmQgYXBwbHkgb25seSB0byB0aGUgc3BlY2lmaWVkIGNhY2hlIChJIG9yIEQpOgotICoKLSAqICByZXNldAotICoJUmVzZXRzIHRoZSBjYWNoZS4KLSAqCi0gKiAgc3luYwotICoJTWFrZXMgc3VyZSBhbnkgcHJldmlvdXMgY2FjaGUgaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBjb21wbGV0ZWQ7Ci0gKglpZS4gbWFrZXMgc3VyZSBhbnkgcHJldmlvdXMgY2FjaGUgY29udHJvbCBvcGVyYXRpb25zCi0gKgloYXZlIGhhZCBmdWxsIGVmZmVjdCBhbmQgYmVlbiBzeW5jaHJvbml6ZWQgdG8gbWVtb3J5LgotICoJRWcuIGFueSBpbnZhbGlkYXRlIGNvbXBsZXRlZCBbc28gYXMgbm90IHRvIGdlbmVyYXRlIGEgaGl0XSwKLSAqCWFueSB3cml0ZWJhY2tzIG9yIG90aGVyIHBpcGVsaW5lZCB3cml0ZXMgd3JpdHRlbiB0byBtZW1vcnksIGV0Yy4KLSAqCi0gKiAgaW52YWxpZGF0ZV9saW5lCQkoc2luZ2xlIGNhY2hlIGxpbmUpCi0gKiAgaW52YWxpZGF0ZV9yZWdpb24JCShzcGVjaWZpZWQgbWVtb3J5IHJhbmdlKQotICogIGludmFsaWRhdGVfYWxsCQkoZW50aXJlIGNhY2hlKQotICoJSW52YWxpZGF0ZXMgYWxsIGNhY2hlIGVudHJpZXMgdGhhdCBjYWNoZQotICoJZGF0YSBmcm9tIHRoZSBzcGVjaWZpZWQgbWVtb3J5IHJhbmdlLgotICoJTk9URTogbG9ja2VkIGVudHJpZXMgYXJlIG5vdCBpbnZhbGlkYXRlZC4KLSAqCi0gKiAgd3JpdGViYWNrX2xpbmUJCShzaW5nbGUgY2FjaGUgbGluZSkKLSAqICB3cml0ZWJhY2tfcmVnaW9uCQkoc3BlY2lmaWVkIG1lbW9yeSByYW5nZSkKLSAqICB3cml0ZWJhY2tfYWxsCQkoZW50aXJlIGNhY2hlKQotICoJV3JpdGVzIGJhY2sgdG8gbWVtb3J5IGFsbCBkaXJ0eSBjYWNoZSBlbnRyaWVzCi0gKgl0aGF0IGNhY2hlIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIG1lbW9yeSByYW5nZSwKLSAqCWFuZCBtYXJrcyB0aGVzZSBlbnRyaWVzIGFzIGNsZWFuLgotICoJTk9URTogb24gc29tZSBmdXR1cmUgaW1wbGVtZW50YXRpb25zLCB0aGlzIG1pZ2h0Ci0gKgkJYWxzbyBpbnZhbGlkYXRlLgotICoJTk9URTogbG9ja2VkIGVudHJpZXMgYXJlIHdyaXR0ZW4gYmFjaywgYnV0IG5ldmVyIGludmFsaWRhdGVkLgotICoJTk9URTogaW5zdHJ1Y3Rpb24gY2FjaGVzIG5ldmVyIGltcGxlbWVudCB3cml0ZWJhY2suCi0gKgotICogIHdyaXRlYmFja19pbnZfbGluZQkJKHNpbmdsZSBjYWNoZSBsaW5lKQotICogIHdyaXRlYmFja19pbnZfcmVnaW9uCShzcGVjaWZpZWQgbWVtb3J5IHJhbmdlKQotICogIHdyaXRlYmFja19pbnZfYWxsCQkoZW50aXJlIGNhY2hlKQotICoJV3JpdGVzIGJhY2sgdG8gbWVtb3J5IGFsbCBkaXJ0eSBjYWNoZSBlbnRyaWVzCi0gKgl0aGF0IGNhY2hlIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIG1lbW9yeSByYW5nZSwKLSAqCWFuZCBpbnZhbGlkYXRlcyB0aGVzZSBlbnRyaWVzIChpbmNsdWRpbmcgYWxsIGNsZWFuCi0gKgljYWNoZSBlbnRyaWVzIHRoYXQgY2FjaGUgZGF0YSBmcm9tIHRoYXQgcmFuZ2UpLgotICoJTk9URTogbG9ja2VkIGVudHJpZXMgYXJlIHdyaXR0ZW4gYmFjayBidXQgbm90IGludmFsaWRhdGVkLgotICoJTk9URTogaW5zdHJ1Y3Rpb24gY2FjaGVzIG5ldmVyIGltcGxlbWVudCB3cml0ZWJhY2suCi0gKgotICogIGxvY2tfbGluZQkJCShzaW5nbGUgY2FjaGUgbGluZSkKLSAqICBsb2NrX3JlZ2lvbgkJCShzcGVjaWZpZWQgbWVtb3J5IHJhbmdlKQotICoJUHJlZmV0Y2ggYW5kIGxvY2sgdGhlIHNwZWNpZmllZCBtZW1vcnkgcmFuZ2UgaW50byBjYWNoZS4KLSAqCU5PVEU6ICBpZiBhbnkgcGFydCBvZiB0aGUgc3BlY2lmaWVkIG1lbW9yeSByYW5nZSBjYW5ub3QKLSAqCWJlIGxvY2tlZCwgYSA/Pz8gZXhjZXB0aW9uIG9jY3Vycy4gIFRoZXNlIG1hY3JvcyBkb24ndAotICoJZG8gYW55dGhpbmcgc3BlY2lhbCAoeWV0IGFueXdheSkgdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uLgotICoKLSAqICB1bmxvY2tfbGluZQkJCShzaW5nbGUgY2FjaGUgbGluZSkKLSAqICB1bmxvY2tfcmVnaW9uCQkoc3BlY2lmaWVkIG1lbW9yeSByYW5nZSkKLSAqICB1bmxvY2tfYWxsCQkJKGVudGlyZSBjYWNoZSkKLSAqCVVubG9jayBjYWNoZSBlbnRyaWVzIHRoYXQgY2FjaGUgdGhlIHNwZWNpZmllZCBtZW1vcnkgcmFuZ2UuCi0gKglFbnRyaWVzIG5vdCBhbHJlYWR5IGxvY2tlZCBhcmUgdW5hZmZlY3RlZC4KLSAqLwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIEdFTkVSSUMgLS0gQUxMIENBQ0hFUyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKgotICogIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFzc3VtZSB0aGUgZm9sbG93aW5nIGNhY2hlIHNpemUvcGFyYW1ldGVyIGxpbWl0cwotICogIGluIHRoZSBjdXJyZW50IFh0ZW5zYSBjb3JlIGltcGxlbWVudGF0aW9uOgotICoJY2FjaGUgc2l6ZToJMTAyNCBieXRlcyBtaW5pbXVtCi0gKglsaW5lIHNpemU6CTE2IC0gNjQgYnl0ZXMKLSAqCXdheSBjb3VudDoJMSAtIDQKLSAqCi0gKiAgTWluaW11bSBlbnRyaWVzIHBlciB3YXkgKGllLiBwZXIgYXNzb2NpYXRpdml0eSkgPSAxMDI0IC8gNjQgLyA0ID0gNAotICogIEhlbmNlIHRoZSBhc3N1bXB0aW9uIHRoYXQgZWFjaCBsb29wIGNhbiBleGVjdXRlIGZvdXIgY2FjaGUgaW5zdHJ1Y3Rpb25zLgotICoKLSAqICBDb3JyZXNwb25kaW5nbHksIHRoZSBvZmZzZXQgcmFuZ2Ugb2YgaW5zdHJ1Y3Rpb25zIGlzIGFzc3VtZWQgYWJsZSB0byBjb3ZlcgotICogIGZvdXIgbGluZXMsIGllLiBvZmZzZXRzIHswLDEsMiwzfSAqIGxpbmVfc2l6ZSBhcmUgYXNzdW1lZCB2YWxpZCBmb3IKLSAqICBib3RoIGhpdCBhbmQgaW5kZXhlZCBjYWNoZSBpbnN0cnVjdGlvbnMuICBJZS4gdGhlc2Ugb2Zmc2V0cyBhcmUgYWxsCi0gKiAgdmFsaWQ6ICAwLCAxNiwgMzIsIDQ4LCA2NCwgOTYsIDEyOCwgMTkyIChmb3IgbGluZSBzaXplcyAxNiwgMzIsIDY0KS4KLSAqICBUaGlzIGlzIHRydWUgb2YgYWxsIG9yaWdpbmFsIGNhY2hlIGluc3RydWN0aW9ucwotICogIChkaGksIGloaSwgZGh3YiwgZGh3YmksIGRpaSwgaWlpKSB3aGljaCBoYXZlIG9mZnNldHMKLSAqICBvZiAwIHRvIDEwMjAgaW4gbXVsdGlwbGVzIG9mIDQgKGllLiA4IGJpdHMgc2hpZnRlZCBieSAyKS4KLSAqICBUaGlzIGlzIGFsc28gdHJ1ZSBvZiBzdWJzZXF1ZW50IGNhY2hlIGluc3RydWN0aW9ucwotICogIChkaHUsIGlodSwgZGl1LCBpaXUsIGRpd2IsIGRpd2JpLCBkcGZsLCBpcGZsKSB3aGljaCBoYXZlIG9mZnNldHMKLSAqICBvZiAwIHRvIDI0MCBpbiBtdWx0aXBsZXMgb2YgMTYgKGllLiA0IGJpdHMgc2hpZnRlZCBieSA0KS4KLSAqCi0gKiAgKE1heGltdW0gY2FjaGUgc2l6ZSwgY3VycmVudGx5IDMyaywgZG9lc24ndCBhZmZlY3QgdGhlIGZvbGxvd2luZyBtYWNyb3MuCi0gKiAgQ2FjaGUgd2F5cyA+IE1NVSBtaW4gcGFnZSBzaXplIGNhdXNlIGFsaWFzaW5nIGJ1dCB0aGF0J3MgYW5vdGhlciBtYXR0ZXIuKQotICovCi0KLQotCi0vKgotICogIE1hY3JvIHRvIGFwcGx5IGFuICdpbmRleGVkJyBjYWNoZSBpbnN0cnVjdGlvbiB0byB0aGUgZW50aXJlIGNhY2hlLgotICoKLSAqICBQYXJhbWV0ZXJzOgotICoJY2FpbnN0CQlpbnN0cnVjdGlvbi8gdGhhdCB0YWtlcyBhbiBhZGRyZXNzIHJlZ2lzdGVyIHBhcmFtZXRlcgotICoJCQlhbmQgYW4gb2Zmc2V0IHBhcmFtZXRlciAoaW4gcmFuZ2UgMCAuLiAzKmxpbmVzaXplKS4KLSAqCXNpemUJCXNpemUgb2YgY2FjaGUgaW4gYnl0ZXMKLSAqCWxpbmVzaXplCXNpemUgb2YgY2FjaGUgbGluZSBpbiBieXRlcwotICoJYXNzb2Nfb3IxCW51bWJlciBvZiBhc3NvY2lhdGl2aXRpZXMgKHdheXMvc2V0cykgaW4gY2FjaGUKLSAqCQkJaWYgYWxsIHNldHMgYWZmZWN0ZWQgYnkgY2FpbnN0LAotICoJCQlvciAxIGlmIG9ubHkgb25lIHNldCAob3Igbm90IGFsbCBzZXRzKSBvZiB0aGUgY2FjaGUKLSAqCQkJaXMgYWZmZWN0ZWQgYnkgY2FpbnN0IChlZy4gRElXQiBvciBESVdCSSBbbm90IHlldCBJU0EgZGVmaW5lZF0pLgotICoJYWEsIGFiCQl1bmlxdWUgYWRkcmVzcyByZWdpc3RlcnMgKHRlbXBvcmFyaWVzKQotICovCi0KLQkubWFjcm8JY2FjaGVfaW5kZXhfYWxsCQljYWluc3QsIHNpemUsIGxpbmVzaXplLCBhc3NvY19vcjEsIGFhLCBhYgotCi0JLy8gIFNhbml0eS1jaGVjayBvbiBjYWNoZSBwYXJhbWV0ZXJzOgotCS5pZm5lCShcc2l6ZSAlIChcbGluZXNpemUgKiBcYXNzb2Nfb3IxICogNCkpCi0JLmVycgkvLyAgY2FjaGUgY29uZmlndXJhdGlvbiBvdXRzaWRlIGV4cGVjdGVkL3N1cHBvcnRlZCByYW5nZSEKLQkuZW5kaWYKLQotCS8vICBcc2l6ZSBieXRlIGNhY2hlLCBcbGluZXNpemUgYnl0ZSBsaW5lcywgXGFzc29jX29yMSB3YXkocykgYWZmZWN0ZWQgYnkgZWFjaCBcY2FpbnN0LgotCW1vdmkJXGFhLCAoXHNpemUgLyAoXGxpbmVzaXplICogXGFzc29jX29yMSAqIDQpKQotCS8vIFBvc3NpYmxlIGltcHJvdmVtZW50OiBuZWVkIG9ubHkgbG9vcCBpZiBcYWEgPiAxIDsKLQkvLyBob3dldmVyIHRoYXQgcGFydGljdWxhciBjb25kaXRpb24gaXMgaGlnaGx5IHVubGlrZWx5LgotCW1vdmkJXGFiLCAwCQkvLyB0byBpdGVyYXRlIG92ZXIgY2FjaGUKLQlmbG9vcAkJXGFhLCBjYWNoZXhcQAotCVxjYWluc3QJCVxhYiwgMCpcbGluZXNpemUKLQlcY2FpbnN0CQlcYWIsIDEqXGxpbmVzaXplCi0JXGNhaW5zdAkJXGFiLCAyKlxsaW5lc2l6ZQotCVxjYWluc3QJCVxhYiwgMypcbGluZXNpemUKLQlhZGRpCQlcYWIsIFxhYiwgNCpcbGluZXNpemUJLy8gbW92ZSB0byBuZXh0IGxpbmUKLQlmbG9vcGVuZAlcYWEsIGNhY2hleFxACi0KLQkuZW5kbQotCi0KLS8qCi0gKiAgTWFjcm8gdG8gYXBwbHkgYSAnaGl0JyBjYWNoZSBpbnN0cnVjdGlvbiB0byBhIG1lbW9yeSByZWdpb24sCi0gKiAgaWUuIHRvIGFueSBjYWNoZSBlbnRyaWVzIHRoYXQgY2FjaGUgYSBzcGVjaWZpZWQgcG9ydGlvbiAocmVnaW9uKSBvZiBtZW1vcnkuCi0gKiAgVGFrZXMgY2FyZSBvZiB0aGUgdW5hbGlnbmVkIGNhc2VzLCBpZS4gbWF5IGFwcGx5IHRvIG9uZQotICogIG1vcmUgY2FjaGUgbGluZSB0aGFuICRhc2l6ZSAvIGxpbmVTaXplIGlmICRhYWRkciBpcyBub3QgYWxpZ25lZC4KLSAqCi0gKgotICogIFBhcmFtZXRlcnMgYXJlOgotICoJY2FpbnN0CWluc3RydWN0aW9uL21hY3JvIHRoYXQgdGFrZXMgYW4gYWRkcmVzcyByZWdpc3RlciBwYXJhbWV0ZXIKLSAqCQlhbmQgYW4gb2Zmc2V0IHBhcmFtZXRlciAoY3VycmVudGx5IGFsd2F5cyB6ZXJvKQotICoJCWFuZCBnZW5lcmF0ZXMgYSBjYWNoZSBpbnN0cnVjdGlvbiAoZWcuICJkaGkiLCAiZGh3YiIsICJpaGkiLCBldGMuKQotICoJbGluZXNpemVfbG9nMglsb2cyKHNpemUgb2YgY2FjaGUgbGluZSBpbiBieXRlcykKLSAqCWFkZHIJcmVnaXN0ZXIgY29udGFpbmluZyBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbiAoY2xvYmJlcmVkKQotICoJYXNpemUJcmVnaXN0ZXIgY29udGFpbmluZyBzaXplIG9mIHRoZSByZWdpb24gaW4gYnl0ZXMgKGNsb2JiZXJlZCkKLSAqCWFza2V3CXVuaXF1ZSByZWdpc3RlciB1c2VkIGFzIHRlbXBvcmFyeQotICoKLSAqICE/IT8hIDJETzogb3B0aW1pemF0aW9uOiBpdGVyYXRlIG1heChjYWNoZV9zaXplIGFuZCBcYXNpemUpIC8gbGluZXNpemUKLSAqLwotCi0JLm1hY3JvCWNhY2hlX2hpdF9yZWdpb24JY2FpbnN0LCBsaW5lc2l6ZV9sb2cyLCBhZGRyLCBhc2l6ZSwgYXNrZXcKLQotCS8vICBNYWtlIFxhc2l6ZSB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnM6Ci0JZXh0dWkJXGFza2V3LCBcYWRkciwgMCwgXGxpbmVzaXplX2xvZzIJLy8gZ2V0IHVuYWxpZ25tZW50IGFtb3VudCBvZiBcYWRkcgotCWFkZAlcYXNpemUsIFxhc2l6ZSwgXGFza2V3CQkJLy8gLi4uIGFuZCBhZGQgaXQgdG8gXGFzaXplCi0JYWRkaQlcYXNpemUsIFxhc2l6ZSwgKDEgPDwgXGxpbmVzaXplX2xvZzIpIC0gMQkvLyByb3VuZCB1cCEKLQlzcmxpCVxhc2l6ZSwgXGFzaXplLCBcbGluZXNpemVfbG9nMgotCi0JLy8gIEl0ZXJhdGUgb3ZlciByZWdpb246Ci0JZmxvb3BuZXoJXGFzaXplLCBjYWNoZWhcQAotCVxjYWluc3QJCVxhZGRyLCAwCi0JYWRkaQkJXGFkZHIsIFxhZGRyLCAoMSA8PCBcbGluZXNpemVfbG9nMikJLy8gbW92ZSB0byBuZXh0IGxpbmUKLQlmbG9vcGVuZAlcYXNpemUsIGNhY2hlaFxACi0KLQkuZW5kbQotCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogICBJTlNUUlVDVElPTiBDQUNIRSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0vKgotICogIFJlc2V0L2luaXRpYWxpemUgdGhlIGluc3RydWN0aW9uIGNhY2hlIGJ5IHNpbXBseSBpbnZhbGlkYXRpbmcgaXQ6Ci0gKiAgKG5lZWQgdG8gdW5sb2NrIGZpcnN0IGFsc28sIGlmIGNhY2hlIGxvY2tpbmcgaW1wbGVtZW50ZWQpOgotICoKLSAqICBQYXJhbWV0ZXJzOgotICoJYWEsIGFiCQl1bmlxdWUgYWRkcmVzcyByZWdpc3RlcnMgKHRlbXBvcmFyaWVzKQotICovCi0JLm1hY3JvCWljYWNoZV9yZXNldAlhYSwgYWIKLQlpY2FjaGVfdW5sb2NrX2FsbAlcYWEsIFxhYgotCWljYWNoZV9pbnZhbGlkYXRlX2FsbAlcYWEsIFxhYgotCS5lbmRtCi0KLQotLyoKLSAqIFN5bmNocm9uaXplIGFmdGVyIGFuIGluc3RydWN0aW9uIGNhY2hlIG9wZXJhdGlvbiwKLSAqIHRvIGJlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBzeW5jIHdpdGggbWVtb3J5IGFzIHRvIGJlCi0gKiBleHBlY3RlZCBmb2xsb3dpbmcgYW55IHByZXZpb3VzIGluc3RydWN0aW9uIGNhY2hlIGNvbnRyb2wgb3BlcmF0aW9ucy4KLSAqCi0gKiBQYXJhbWV0ZXJzIGFyZToKLSAqCWFyCWFuIGFkZHJlc3MgcmVnaXN0ZXIgKHRlbXBvcmFyeSkgKGN1cnJlbnRseSB1bnVzZWQsIGJ1dCBtYXkgYmUgdXNlZCBpbiBmdXR1cmUpCi0gKi8KLQkubWFjcm8JaWNhY2hlX3N5bmMJYXIKLSNpZiBYQ0hBTF9JQ0FDSEVfU0laRSA+IDAKLQlpc3luYwotI2VuZGlmCi0JLmVuZG0KLQotCi0KLS8qCi0gKiAgSW52YWxpZGF0ZSBhIHNpbmdsZSBsaW5lIG9mIHRoZSBpbnN0cnVjdGlvbiBjYWNoZS4KLSAqICBQYXJhbWV0ZXJzIGFyZToKLSAqCWFyCWFkZHJlc3MgcmVnaXN0ZXIgdGhhdCBjb250YWlucyAodmlydHVhbCkgYWRkcmVzcyB0byBpbnZhbGlkYXRlCi0gKgkJKG1heSBnZXQgY2xvYmJlcmVkIGluIGEgZnV0dXJlIGltcGxlbWVudGF0aW9uLCBidXQgbm90IGN1cnJlbnRseSkKLSAqCW9mZnNldAkob3B0aW9uYWwpIG9mZnNldCB0byBhZGQgdG8gXGFyIHRvIGNvbXB1dGUgZWZmZWN0aXZlIGFkZHJlc3MgdG8gaW52YWxpZGF0ZQotICoJCShub3RlOiBzb21lIG51bWJlciBvZiBsc2JpdHMgYXJlIGlnbm9yZWQpCi0gKi8KLQkubWFjcm8JaWNhY2hlX2ludmFsaWRhdGVfbGluZQlhciwgb2Zmc2V0Ci0jaWYgWENIQUxfSUNBQ0hFX1NJWkUgPiAwCi0JaWhpCVxhciwgXG9mZnNldAkJLy8gaW52YWxpZGF0ZSBpY2FjaGUgbGluZQotCS8qCi0JICogIE5PVEU6ICBpbiBzb21lIHZlcnNpb24gb2YgdGhlIHNpbGljb24gWyEhIVNIT1VMRCBIQVZFIEJFRU4gRE9DVU1FTlRFRCEhIV0KLQkgKiAgJ2loaScgZG9lc24ndCB3b3JrLCBzbyBpdCBoYWQgYmVlbiByZXBsYWNlZCB3aXRoICdpaWknCi0JICogICh3aGljaCB3b3VsZCBqdXN0IGludmFsaWRhdGUgbW9yZSB0aGFuIGl0IHNob3VsZCwKLQkgKiAgd2hpY2ggc2hvdWxkIGJlIG9rYXkgb3RoZXIgdGhhbiB0aGUgcGVyZm9ybWFuY2UgaGl0Ci0JICogIGJlY2F1c2UgY2FjaGUgbG9ja2luZyBkaWQgbm90IGV4aXN0IGluIHRoYXQgdmVyc2lvbiwKLQkgKiAgdW5sZXNzIHVzZXIgc29tZWhvdyByZWxpZXMgb24gc29tZXRoaW5nIGJlaW5nIGNhY2hlZCkuCi0JICogIFtXSEFUIFZFUlNJT04gSVMgSVQhIT8hPwotCSAqICBJUyBUSEVSRSBBTlkgV0FZIFRPIFRFU1QgRk9SIFRIQVQgSEVSRSwgVE8gT1VUUFVUICdJSUknIE9OTFkgSUYgTkVFREVEIT8hP10uCi0JICoKLQkgKglpaWkJXGFyLCBcb2Zmc2V0Ci0JICovCi0JaWNhY2hlX3N5bmMJXGFyCi0jZW5kaWYKLQkuZW5kbQotCi0KLQotCi0vKgotICogIEludmFsaWRhdGUgaW5zdHJ1Y3Rpb24gIGNhY2hlIGVudHJpZXMgdGhhdCBjYWNoZSBhIHNwZWNpZmllZCBwb3J0aW9uIG9mIG1lbW9yeS4KLSAqICBQYXJhbWV0ZXJzIGFyZToKLSAqCWFzdGFydAlzdGFydCBhZGRyZXNzIChyZWdpc3RlciBnZXRzIGNsb2JiZXJlZCkKLSAqCWFzaXplCXNpemUgb2YgdGhlIHJlZ2lvbiBpbiBieXRlcyAocmVnaXN0ZXIgZ2V0cyBjbG9iYmVyZWQpCi0gKglhYwl1bmlxdWUgcmVnaXN0ZXIgdXNlZCBhcyB0ZW1wb3JhcnkKLSAqLwotCS5tYWNybwlpY2FjaGVfaW52YWxpZGF0ZV9yZWdpb24JYXN0YXJ0LCBhc2l6ZSwgYWMKLSNpZiBYQ0hBTF9JQ0FDSEVfU0laRSA+IDAKLQkvLyAgSW5zdHJ1Y3Rpb24gY2FjaGUgcmVnaW9uIGludmFsaWRhdGlvbjoKLQljYWNoZV9oaXRfcmVnaW9uCWloaSwgWENIQUxfSUNBQ0hFX0xJTkVXSURUSCwgXGFzdGFydCwgXGFzaXplLCBcYWMKLQlpY2FjaGVfc3luYwlcYWMKLQkvLyAgRW5kIG9mIGluc3RydWN0aW9uIGNhY2hlIHJlZ2lvbiBpbnZhbGlkYXRpb24KLSNlbmRpZgotCS5lbmRtCi0KLQotCi0vKgotICogIEludmFsaWRhdGUgZW50aXJlIGluc3RydWN0aW9uIGNhY2hlLgotICoKLSAqICBQYXJhbWV0ZXJzOgotICoJYWEsIGFiCQl1bmlxdWUgYWRkcmVzcyByZWdpc3RlcnMgKHRlbXBvcmFyaWVzKQotICovCi0JLm1hY3JvCWljYWNoZV9pbnZhbGlkYXRlX2FsbAlhYSwgYWIKLSNpZiBYQ0hBTF9JQ0FDSEVfU0laRSA+IDAKLQkvLyAgSW5zdHJ1Y3Rpb24gY2FjaGUgaW52YWxpZGF0aW9uOgotCWNhY2hlX2luZGV4X2FsbAkJaWlpLCBYQ0hBTF9JQ0FDSEVfU0laRSwgWENIQUxfSUNBQ0hFX0xJTkVTSVpFLCBYQ0hBTF9JQ0FDSEVfV0FZUywgXGFhLCBcYWIKLQlpY2FjaGVfc3luYwlcYWEKLQkvLyAgRW5kIG9mIGluc3RydWN0aW9uIGNhY2hlIGludmFsaWRhdGlvbgotI2VuZGlmCi0JLmVuZG0KLQotCi0KLS8qCi0gKiAgTG9jayAocHJlZmV0Y2ggJiBsb2NrKSBhIHNpbmdsZSBsaW5lIG9mIHRoZSBpbnN0cnVjdGlvbiBjYWNoZS4KLSAqCi0gKiAgUGFyYW1ldGVycyBhcmU6Ci0gKglhcglhZGRyZXNzIHJlZ2lzdGVyIHRoYXQgY29udGFpbnMgKHZpcnR1YWwpIGFkZHJlc3MgdG8gbG9jawotICoJCShtYXkgZ2V0IGNsb2JiZXJlZCBpbiBhIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbiwgYnV0IG5vdCBjdXJyZW50bHkpCi0gKglvZmZzZXQJb2Zmc2V0IHRvIGFkZCB0byBcYXIgdG8gY29tcHV0ZSBlZmZlY3RpdmUgYWRkcmVzcyB0byBsb2NrCi0gKgkJKG5vdGU6IHNvbWUgbnVtYmVyIG9mIGxzYml0cyBhcmUgaWdub3JlZCkKLSAqLwotCS5tYWNybwlpY2FjaGVfbG9ja19saW5lCWFyLCBvZmZzZXQKLSNpZiBYQ0hBTF9JQ0FDSEVfU0laRSA+IDAgJiYgWENIQUxfSUNBQ0hFX0xJTkVfTE9DS0FCTEUKLQlpcGZsCVxhciwgXG9mZnNldAkvKiBwcmVmZXRjaCBhbmQgbG9jayBpY2FjaGUgbGluZSAqLwotCWljYWNoZV9zeW5jCVxhcgotI2VuZGlmCi0JLmVuZG0KLQotCi0KLS8qCi0gKiAgTG9jayAocHJlZmV0Y2ggJiBsb2NrKSBhIHNwZWNpZmllZCBwb3J0aW9uIG9mIG1lbW9yeSBpbnRvIHRoZSBpbnN0cnVjdGlvbiBjYWNoZS4KLSAqICBQYXJhbWV0ZXJzIGFyZToKLSAqCWFzdGFydAlzdGFydCBhZGRyZXNzIChyZWdpc3RlciBnZXRzIGNsb2JiZXJlZCkKLSAqCWFzaXplCXNpemUgb2YgdGhlIHJlZ2lvbiBpbiBieXRlcyAocmVnaXN0ZXIgZ2V0cyBjbG9iYmVyZWQpCi0gKglhYwl1bmlxdWUgcmVnaXN0ZXIgdXNlZCBhcyB0ZW1wb3JhcnkKLSAqLwotCS5tYWNybwlpY2FjaGVfbG9ja19yZWdpb24JYXN0YXJ0LCBhc2l6ZSwgYWMKLSNpZiBYQ0hBTF9JQ0FDSEVfU0laRSA+IDAgJiYgWENIQUxfSUNBQ0hFX0xJTkVfTE9DS0FCTEUKLQkvLyAgSW5zdHJ1Y3Rpb24gY2FjaGUgcmVnaW9uIGxvY2s6Ci0JY2FjaGVfaGl0X3JlZ2lvbglpcGZsLCBYQ0hBTF9JQ0FDSEVfTElORVdJRFRILCBcYXN0YXJ0LCBcYXNpemUsIFxhYwotCWljYWNoZV9zeW5jCVxhYwotCS8vICBFbmQgb2YgaW5zdHJ1Y3Rpb24gY2FjaGUgcmVnaW9uIGxvY2sKLSNlbmRpZgotCS5lbmRtCi0KLQotCi0vKgotICogIFVubG9jayBhIHNpbmdsZSBsaW5lIG9mIHRoZSBpbnN0cnVjdGlvbiBjYWNoZS4KLSAqCi0gKiAgUGFyYW1ldGVycyBhcmU6Ci0gKglhcglhZGRyZXNzIHJlZ2lzdGVyIHRoYXQgY29udGFpbnMgKHZpcnR1YWwpIGFkZHJlc3MgdG8gdW5sb2NrCi0gKgkJKG1heSBnZXQgY2xvYmJlcmVkIGluIGEgZnV0dXJlIGltcGxlbWVudGF0aW9uLCBidXQgbm90IGN1cnJlbnRseSkKLSAqCW9mZnNldAlvZmZzZXQgdG8gYWRkIHRvIFxhciB0byBjb21wdXRlIGVmZmVjdGl2ZSBhZGRyZXNzIHRvIHVubG9jawotICoJCShub3RlOiBzb21lIG51bWJlciBvZiBsc2JpdHMgYXJlIGlnbm9yZWQpCi0gKi8KLQkubWFjcm8JaWNhY2hlX3VubG9ja19saW5lCWFyLCBvZmZzZXQKLSNpZiBYQ0hBTF9JQ0FDSEVfU0laRSA+IDAgJiYgWENIQUxfSUNBQ0hFX0xJTkVfTE9DS0FCTEUKLQlpaHUJXGFyLCBcb2Zmc2V0CS8qIHVubG9jayBpY2FjaGUgbGluZSAqLwotCWljYWNoZV9zeW5jCVxhcgotI2VuZGlmCi0JLmVuZG0KLQotCi0KLS8qCi0gKiAgVW5sb2NrIGEgc3BlY2lmaWVkIHBvcnRpb24gb2YgbWVtb3J5IGZyb20gdGhlIGluc3RydWN0aW9uIGNhY2hlLgotICogIFBhcmFtZXRlcnMgYXJlOgotICoJYXN0YXJ0CXN0YXJ0IGFkZHJlc3MgKHJlZ2lzdGVyIGdldHMgY2xvYmJlcmVkKQotICoJYXNpemUJc2l6ZSBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzIChyZWdpc3RlciBnZXRzIGNsb2JiZXJlZCkKLSAqCWFjCXVuaXF1ZSByZWdpc3RlciB1c2VkIGFzIHRlbXBvcmFyeQotICovCi0JLm1hY3JvCWljYWNoZV91bmxvY2tfcmVnaW9uCWFzdGFydCwgYXNpemUsIGFjCi0jaWYgWENIQUxfSUNBQ0hFX1NJWkUgPiAwICYmIFhDSEFMX0lDQUNIRV9MSU5FX0xPQ0tBQkxFCi0JLy8gIEluc3RydWN0aW9uIGNhY2hlIHJlZ2lvbiB1bmxvY2s6Ci0JY2FjaGVfaGl0X3JlZ2lvbglpaHUsIFhDSEFMX0lDQUNIRV9MSU5FV0lEVEgsIFxhc3RhcnQsIFxhc2l6ZSwgXGFjCi0JaWNhY2hlX3N5bmMJXGFjCi0JLy8gIEVuZCBvZiBpbnN0cnVjdGlvbiBjYWNoZSByZWdpb24gdW5sb2NrCi0jZW5kaWYKLQkuZW5kbQotCi0KLQotLyoKLSAqICBVbmxvY2sgZW50aXJlIGluc3RydWN0aW9uIGNhY2hlLgotICoKLSAqICBQYXJhbWV0ZXJzOgotICoJYWEsIGFiCQl1bmlxdWUgYWRkcmVzcyByZWdpc3RlcnMgKHRlbXBvcmFyaWVzKQotICovCi0JLm1hY3JvCWljYWNoZV91bmxvY2tfYWxsCWFhLCBhYgotI2lmIFhDSEFMX0lDQUNIRV9TSVpFID4gMCAmJiBYQ0hBTF9JQ0FDSEVfTElORV9MT0NLQUJMRQotCS8vICBJbnN0cnVjdGlvbiBjYWNoZSB1bmxvY2s6Ci0JY2FjaGVfaW5kZXhfYWxsCQlpaXUsIFhDSEFMX0lDQUNIRV9TSVpFLCBYQ0hBTF9JQ0FDSEVfTElORVNJWkUsIDEsIFxhYSwgXGFiCi0JaWNhY2hlX3N5bmMJXGFhCi0JLy8gIEVuZCBvZiBpbnN0cnVjdGlvbiBjYWNoZSB1bmxvY2sKLSNlbmRpZgotCS5lbmRtCi0KLQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiAgIERBVEEgQ0FDSEUgICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotCi0vKgotICogIFJlc2V0L2luaXRpYWxpemUgdGhlIGRhdGEgY2FjaGUgYnkgc2ltcGx5IGludmFsaWRhdGluZyBpdAotICogIChuZWVkIHRvIHVubG9jayBmaXJzdCBhbHNvLCBpZiBjYWNoZSBsb2NraW5nIGltcGxlbWVudGVkKToKLSAqCi0gKiAgUGFyYW1ldGVyczoKLSAqCWFhLCBhYgkJdW5pcXVlIGFkZHJlc3MgcmVnaXN0ZXJzICh0ZW1wb3JhcmllcykKLSAqLwotCS5tYWNybwlkY2FjaGVfcmVzZXQJYWEsIGFiCi0JZGNhY2hlX3VubG9ja19hbGwJXGFhLCBcYWIKLQlkY2FjaGVfaW52YWxpZGF0ZV9hbGwJXGFhLCBcYWIKLQkuZW5kbQotCi0KLQotCi0vKgotICogU3luY2hyb25pemUgYWZ0ZXIgYSBkYXRhIGNhY2hlIG9wZXJhdGlvbiwKLSAqIHRvIGJlIHN1cmUgZXZlcnl0aGluZyBpcyBpbiBzeW5jIHdpdGggbWVtb3J5IGFzIHRvIGJlCi0gKiBleHBlY3RlZCBmb2xsb3dpbmcgYW55IHByZXZpb3VzIGRhdGEgY2FjaGUgY29udHJvbCBvcGVyYXRpb25zLgotICoKLSAqIFBhcmFtZXRlcnMgYXJlOgotICoJYXIJYW4gYWRkcmVzcyByZWdpc3RlciAodGVtcG9yYXJ5KSAoY3VycmVudGx5IHVudXNlZCwgYnV0IG1heSBiZSB1c2VkIGluIGZ1dHVyZSkKLSAqLwotCS5tYWNybwlkY2FjaGVfc3luYwlhcgotI2lmIFhDSEFMX0RDQUNIRV9TSVpFID4gMAotCS8vICBUaGlzIHByZXZpb3VzIHNlcXVlbmNlIGVycnMgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlICh0b28gbXVjaCBzbyk7IGEgRFNZTkMgc2hvdWxkIGJlIHN1ZmZpY2llbnQ6Ci0JLy9tZW13CQkvLyBzeW5jaHJvbml6ZSBkYXRhIGNhY2hlIGNoYW5nZXMgcmVsYXRpdmUgdG8gc3Vic2VxdWVudCBtZW1vcnkgYWNjZXNzZXMKLQkvL2lzeW5jCQkvLyBiZSBjb25zZXJ2YXRpdmUgYW5kIElTWU5DIGFzIHdlbGwgKGp1c3QgdG8gYmUgc3VyZSkKLQotCWRzeW5jCi0jZW5kaWYKLQkuZW5kbQotCi0KLQotLyoKLSAqIFN5bmNocm9uaXplIGFmdGVyIGEgZGF0YSBzdG9yZSBvcGVyYXRpb24sCi0gKiB0byBiZSBzdXJlIHRoZSBzdG9yZWQgZGF0YSBpcyBjb21wbGV0ZWx5IG9mZiB0aGUgcHJvY2Vzc29yCi0gKiAoYW5kIGFzc3VtaW5nIHRoZXJlIGlzIG5vIGJ1ZmZlcmluZyBvdXRzaWRlIHRoZSBwcm9jZXNzb3IsCi0gKiAgdGhhdCB0aGUgZGF0YSBpcyBpbiBtZW1vcnkpLiAgVGhpcyBtYXkgYmUgcmVxdWlyZWQgdG8KLSAqIGVuc3VyZSB0aGF0IHRoZSBwcm9jZXNzb3IncyB3cml0ZSBidWZmZXJzIGFyZSBlbXB0aWVkLgotICogQSBNRU1XIGZvbGxvd2VkIGJ5IGEgcmVhZCBndWFyYW50ZWVzIHRoaXMsIGJ5IGRlZmluaXRpb24uCi0gKiBXZSBhbHNvIHRyeSB0byBtYWtlIHN1cmUgdGhlIHJlYWQgaXRzZWxmIGNvbXBsZXRlcy4KLSAqCi0gKiBQYXJhbWV0ZXJzIGFyZToKLSAqCWFyCWFuIGFkZHJlc3MgcmVnaXN0ZXIgKHRlbXBvcmFyeSkKLSAqLwotCS5tYWNybwl3cml0ZV9zeW5jCWFyCi0JbWVtdwkJCS8vIGVuc3VyZSBwcmV2aW91cyBtZW1vcnkgYWNjZXNzZXMgYXJlIGNvbXBsZXRlIHByaW9yIHRvIHN1YnNlcXVlbnQgbWVtb3J5IGFjY2Vzc2VzCi0JbDMyaQlcYXIsIHNwLCAwCS8vIGNvbXBsZXRpbmcgdGhpcyByZWFkIGVuc3VyZXMgYW55IHByZXZpb3VzIHdyaXRlIGhhcyBjb21wbGV0ZWQsIGJlY2F1c2Ugb2YgTUVNVwotCS8vc2xvdAotCWFkZAlcYXIsIFxhciwgXGFyCS8vIHVzZSB0aGUgcmVzdWx0IG9mIHRoZSByZWFkIHRvIGhlbHAgZW5zdXJlIHRoZSByZWFkIGNvbXBsZXRlcyAoaW4gZnV0dXJlIGFyY2hpdGVjdHVyZXMpCi0JLmVuZG0KLQotCi0vKgotICogIEludmFsaWRhdGUgYSBzaW5nbGUgbGluZSBvZiB0aGUgZGF0YSBjYWNoZS4KLSAqICBQYXJhbWV0ZXJzIGFyZToKLSAqCWFyCWFkZHJlc3MgcmVnaXN0ZXIgdGhhdCBjb250YWlucyAodmlydHVhbCkgYWRkcmVzcyB0byBpbnZhbGlkYXRlCi0gKgkJKG1heSBnZXQgY2xvYmJlcmVkIGluIGEgZnV0dXJlIGltcGxlbWVudGF0aW9uLCBidXQgbm90IGN1cnJlbnRseSkKLSAqCW9mZnNldAkob3B0aW9uYWwpIG9mZnNldCB0byBhZGQgdG8gXGFyIHRvIGNvbXB1dGUgZWZmZWN0aXZlIGFkZHJlc3MgdG8gaW52YWxpZGF0ZQotICoJCShub3RlOiBzb21lIG51bWJlciBvZiBsc2JpdHMgYXJlIGlnbm9yZWQpCi0gKi8KLQkubWFjcm8JZGNhY2hlX2ludmFsaWRhdGVfbGluZQlhciwgb2Zmc2V0Ci0jaWYgWENIQUxfRENBQ0hFX1NJWkUgPiAwCi0JZGhpCVxhciwgXG9mZnNldAotCWRjYWNoZV9zeW5jCVxhcgotI2VuZGlmCi0JLmVuZG0KLQotCi0KLQotCi0vKgotICogIEludmFsaWRhdGUgZGF0YSBjYWNoZSBlbnRyaWVzIHRoYXQgY2FjaGUgYSBzcGVjaWZpZWQgcG9ydGlvbiBvZiBtZW1vcnkuCi0gKiAgUGFyYW1ldGVycyBhcmU6Ci0gKglhc3RhcnQJc3RhcnQgYWRkcmVzcyAocmVnaXN0ZXIgZ2V0cyBjbG9iYmVyZWQpCi0gKglhc2l6ZQlzaXplIG9mIHRoZSByZWdpb24gaW4gYnl0ZXMgKHJlZ2lzdGVyIGdldHMgY2xvYmJlcmVkKQotICoJYWMJdW5pcXVlIHJlZ2lzdGVyIHVzZWQgYXMgdGVtcG9yYXJ5Ci0gKi8KLQkubWFjcm8JZGNhY2hlX2ludmFsaWRhdGVfcmVnaW9uCWFzdGFydCwgYXNpemUsIGFjCi0jaWYgWENIQUxfRENBQ0hFX1NJWkUgPiAwCi0JLy8gIERhdGEgY2FjaGUgcmVnaW9uIGludmFsaWRhdGlvbjoKLQljYWNoZV9oaXRfcmVnaW9uCWRoaSwgWENIQUxfRENBQ0hFX0xJTkVXSURUSCwgXGFzdGFydCwgXGFzaXplLCBcYWMKLQlkY2FjaGVfc3luYwlcYWMKLQkvLyAgRW5kIG9mIGRhdGEgY2FjaGUgcmVnaW9uIGludmFsaWRhdGlvbgotI2VuZGlmCi0JLmVuZG0KLQotCi0KLSNpZiAwCi0vKgotICogIFRoaXMgaXMgYSB3b3JrLWFyb3VuZCBmb3IgYSBidWcgaW4gU2lDaGlwMSAoPz8/KS4KLSAqICBUaGVyZSBzaG91bGQgYmUgYSBwcm9wZXIgbWVjaGFuaXNtIGZvciBub3Qgb3V0cHV0dGluZwotICogIHRoZXNlIGluc3RydWN0aW9ucyB3aGVuIG5vdCBuZWVkZWQuCi0gKiAgVG8gZW5hYmxlIHdvcmstYXJvdW5kLCB1bmNvbW1lbnQgdGhpcyBhbmQgcmVwbGFjZSAnZGlpJwotICogIHdpdGggJ2RpaV9zMScgZXZlcnl3aGVyZSwgZWcuIGluIGRjYWNoZV9pbnZhbGlkYXRlX2FsbAotICogIG1hY3JvIGJlbG93LgotICovCi0JLm1hY3JvCWRpaV9zMQlhciwgb2Zmc2V0Ci0JZGlpCVxhciwgXG9mZnNldAotCW9yCVxhciwgXGFyLCBcYXIKLQlvcglcYXIsIFxhciwgXGFyCi0Jb3IJXGFyLCBcYXIsIFxhcgotCW9yCVxhciwgXGFyLCBcYXIKLQkuZW5kbQotI2VuZGlmCi0KLQotLyoKLSAqICBJbnZhbGlkYXRlIGVudGlyZSBkYXRhIGNhY2hlLgotICoKLSAqICBQYXJhbWV0ZXJzOgotICoJYWEsIGFiCQl1bmlxdWUgYWRkcmVzcyByZWdpc3RlcnMgKHRlbXBvcmFyaWVzKQotICovCi0JLm1hY3JvCWRjYWNoZV9pbnZhbGlkYXRlX2FsbAlhYSwgYWIKLSNpZiBYQ0hBTF9EQ0FDSEVfU0laRSA+IDAKLQkvLyAgRGF0YSBjYWNoZSBpbnZhbGlkYXRpb246Ci0JY2FjaGVfaW5kZXhfYWxsCQlkaWksIFhDSEFMX0RDQUNIRV9TSVpFLCBYQ0hBTF9EQ0FDSEVfTElORVNJWkUsIFhDSEFMX0RDQUNIRV9XQVlTLCBcYWEsIFxhYgotCWRjYWNoZV9zeW5jCVxhYQotCS8vICBFbmQgb2YgZGF0YSBjYWNoZSBpbnZhbGlkYXRpb24KLSNlbmRpZgotCS5lbmRtCi0KLQotCi0vKgotICogIFdyaXRlYmFjayBhIHNpbmdsZSBsaW5lIG9mIHRoZSBkYXRhIGNhY2hlLgotICogIFBhcmFtZXRlcnMgYXJlOgotICoJYXIJYWRkcmVzcyByZWdpc3RlciB0aGF0IGNvbnRhaW5zICh2aXJ0dWFsKSBhZGRyZXNzIHRvIHdyaXRlYmFjawotICoJCShtYXkgZ2V0IGNsb2JiZXJlZCBpbiBhIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbiwgYnV0IG5vdCBjdXJyZW50bHkpCi0gKglvZmZzZXQJb2Zmc2V0IHRvIGFkZCB0byBcYXIgdG8gY29tcHV0ZSBlZmZlY3RpdmUgYWRkcmVzcyB0byB3cml0ZWJhY2sKLSAqCQkobm90ZTogc29tZSBudW1iZXIgb2YgbHNiaXRzIGFyZSBpZ25vcmVkKQotICovCi0JLm1hY3JvCWRjYWNoZV93cml0ZWJhY2tfbGluZQlhciwgb2Zmc2V0Ci0jaWYgWENIQUxfRENBQ0hFX1NJWkUgPiAwICYmIFhDSEFMX0RDQUNIRV9JU19XUklURUJBQ0sKLQlkaHdiCVxhciwgXG9mZnNldAotCWRjYWNoZV9zeW5jCVxhcgotI2VuZGlmCi0JLmVuZG0KLQotCi0KLS8qCi0gKiAgV3JpdGViYWNrIGRpcnR5IGRhdGEgY2FjaGUgZW50cmllcyB0aGF0IGNhY2hlIGEgc3BlY2lmaWVkIHBvcnRpb24gb2YgbWVtb3J5LgotICogIFBhcmFtZXRlcnMgYXJlOgotICoJYXN0YXJ0CXN0YXJ0IGFkZHJlc3MgKHJlZ2lzdGVyIGdldHMgY2xvYmJlcmVkKQotICoJYXNpemUJc2l6ZSBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzIChyZWdpc3RlciBnZXRzIGNsb2JiZXJlZCkKLSAqCWFjCXVuaXF1ZSByZWdpc3RlciB1c2VkIGFzIHRlbXBvcmFyeQotICovCi0JLm1hY3JvCWRjYWNoZV93cml0ZWJhY2tfcmVnaW9uCQlhc3RhcnQsIGFzaXplLCBhYwotI2lmIFhDSEFMX0RDQUNIRV9TSVpFID4gMCAmJiBYQ0hBTF9EQ0FDSEVfSVNfV1JJVEVCQUNLCi0JLy8gIERhdGEgY2FjaGUgcmVnaW9uIHdyaXRlYmFjazoKLQljYWNoZV9oaXRfcmVnaW9uCWRod2IsIFhDSEFMX0RDQUNIRV9MSU5FV0lEVEgsIFxhc3RhcnQsIFxhc2l6ZSwgXGFjCi0JZGNhY2hlX3N5bmMJXGFjCi0JLy8gIEVuZCBvZiBkYXRhIGNhY2hlIHJlZ2lvbiB3cml0ZWJhY2sKLSNlbmRpZgotCS5lbmRtCi0KLQotCi0vKgotICogIFdyaXRlYmFjayBlbnRpcmUgZGF0YSBjYWNoZS4KLSAqICBQYXJhbWV0ZXJzOgotICoJYWEsIGFiCQl1bmlxdWUgYWRkcmVzcyByZWdpc3RlcnMgKHRlbXBvcmFyaWVzKQotICovCi0JLm1hY3JvCWRjYWNoZV93cml0ZWJhY2tfYWxsCWFhLCBhYgotI2lmIFhDSEFMX0RDQUNIRV9TSVpFID4gMCAmJiBYQ0hBTF9EQ0FDSEVfSVNfV1JJVEVCQUNLCi0JLy8gIERhdGEgY2FjaGUgd3JpdGViYWNrOgotCWNhY2hlX2luZGV4X2FsbAkJZGl3YiwgWENIQUxfRENBQ0hFX1NJWkUsIFhDSEFMX0RDQUNIRV9MSU5FU0laRSwgMSwgXGFhLCBcYWIKLQlkY2FjaGVfc3luYwlcYWEKLQkvLyAgRW5kIG9mIGRhdGEgY2FjaGUgd3JpdGViYWNrCi0jZW5kaWYKLQkuZW5kbQotCi0KLQotLyoKLSAqICBXcml0ZWJhY2sgYW5kIGludmFsaWRhdGUgYSBzaW5nbGUgbGluZSBvZiB0aGUgZGF0YSBjYWNoZS4KLSAqICBQYXJhbWV0ZXJzIGFyZToKLSAqCWFyCWFkZHJlc3MgcmVnaXN0ZXIgdGhhdCBjb250YWlucyAodmlydHVhbCkgYWRkcmVzcyB0byB3cml0ZWJhY2sgYW5kIGludmFsaWRhdGUKLSAqCQkobWF5IGdldCBjbG9iYmVyZWQgaW4gYSBmdXR1cmUgaW1wbGVtZW50YXRpb24sIGJ1dCBub3QgY3VycmVudGx5KQotICoJb2Zmc2V0CW9mZnNldCB0byBhZGQgdG8gXGFyIHRvIGNvbXB1dGUgZWZmZWN0aXZlIGFkZHJlc3MgdG8gd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlCi0gKgkJKG5vdGU6IHNvbWUgbnVtYmVyIG9mIGxzYml0cyBhcmUgaWdub3JlZCkKLSAqLwotCS5tYWNybwlkY2FjaGVfd3JpdGViYWNrX2ludl9saW5lCWFyLCBvZmZzZXQKLSNpZiBYQ0hBTF9EQ0FDSEVfU0laRSA+IDAKLQlkaHdiaQlcYXIsIFxvZmZzZXQJLyogd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlIGRjYWNoZSBsaW5lICovCi0JZGNhY2hlX3N5bmMJXGFyCi0jZW5kaWYKLQkuZW5kbQotCi0KLQotLyoKLSAqICBXcml0ZWJhY2sgYW5kIGludmFsaWRhdGUgZGF0YSBjYWNoZSBlbnRyaWVzIHRoYXQgY2FjaGUgYSBzcGVjaWZpZWQgcG9ydGlvbiBvZiBtZW1vcnkuCi0gKiAgUGFyYW1ldGVycyBhcmU6Ci0gKglhc3RhcnQJc3RhcnQgYWRkcmVzcyAocmVnaXN0ZXIgZ2V0cyBjbG9iYmVyZWQpCi0gKglhc2l6ZQlzaXplIG9mIHRoZSByZWdpb24gaW4gYnl0ZXMgKHJlZ2lzdGVyIGdldHMgY2xvYmJlcmVkKQotICoJYWMJdW5pcXVlIHJlZ2lzdGVyIHVzZWQgYXMgdGVtcG9yYXJ5Ci0gKi8KLQkubWFjcm8JZGNhY2hlX3dyaXRlYmFja19pbnZfcmVnaW9uCWFzdGFydCwgYXNpemUsIGFjCi0jaWYgWENIQUxfRENBQ0hFX1NJWkUgPiAwCi0JLy8gIERhdGEgY2FjaGUgcmVnaW9uIHdyaXRlYmFjayBhbmQgaW52YWxpZGF0ZToKLQljYWNoZV9oaXRfcmVnaW9uCWRod2JpLCBYQ0hBTF9EQ0FDSEVfTElORVdJRFRILCBcYXN0YXJ0LCBcYXNpemUsIFxhYwotCWRjYWNoZV9zeW5jCVxhYwotCS8vICBFbmQgb2YgZGF0YSBjYWNoZSByZWdpb24gd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlCi0jZW5kaWYKLQkuZW5kbQotCi0KLQotLyoKLSAqICBXcml0ZWJhY2sgYW5kIGludmFsaWRhdGUgZW50aXJlIGRhdGEgY2FjaGUuCi0gKiAgUGFyYW1ldGVyczoKLSAqCWFhLCBhYgkJdW5pcXVlIGFkZHJlc3MgcmVnaXN0ZXJzICh0ZW1wb3JhcmllcykKLSAqLwotCS5tYWNybwlkY2FjaGVfd3JpdGViYWNrX2ludl9hbGwJYWEsIGFiCi0jaWYgWENIQUxfRENBQ0hFX1NJWkUgPiAwCi0JLy8gIERhdGEgY2FjaGUgd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlOgotI2lmIFhDSEFMX0RDQUNIRV9JU19XUklURUJBQ0sKLQljYWNoZV9pbmRleF9hbGwJCWRpd2JpLCBYQ0hBTF9EQ0FDSEVfU0laRSwgWENIQUxfRENBQ0hFX0xJTkVTSVpFLCAxLCBcYWEsIFxhYgotCWRjYWNoZV9zeW5jCVxhYQotI2Vsc2UgLyp3cml0ZWJhY2sqLwotCS8vICBEYXRhIGNhY2hlIGRvZXMgbm90IHN1cHBvcnQgd3JpdGViYWNrLCBzbyBqdXN0IGludmFsaWRhdGU6ICovCi0JZGNhY2hlX2ludmFsaWRhdGVfYWxsCVxhYSwgXGFiCi0jZW5kaWYgLyp3cml0ZWJhY2sqLwotCS8vICBFbmQgb2YgZGF0YSBjYWNoZSB3cml0ZWJhY2sgYW5kIGludmFsaWRhdGUKLSNlbmRpZgotCS5lbmRtCi0KLQotCi0KLS8qCi0gKiAgTG9jayAocHJlZmV0Y2ggJiBsb2NrKSBhIHNpbmdsZSBsaW5lIG9mIHRoZSBkYXRhIGNhY2hlLgotICoKLSAqICBQYXJhbWV0ZXJzIGFyZToKLSAqCWFyCWFkZHJlc3MgcmVnaXN0ZXIgdGhhdCBjb250YWlucyAodmlydHVhbCkgYWRkcmVzcyB0byBsb2NrCi0gKgkJKG1heSBnZXQgY2xvYmJlcmVkIGluIGEgZnV0dXJlIGltcGxlbWVudGF0aW9uLCBidXQgbm90IGN1cnJlbnRseSkKLSAqCW9mZnNldAlvZmZzZXQgdG8gYWRkIHRvIFxhciB0byBjb21wdXRlIGVmZmVjdGl2ZSBhZGRyZXNzIHRvIGxvY2sKLSAqCQkobm90ZTogc29tZSBudW1iZXIgb2YgbHNiaXRzIGFyZSBpZ25vcmVkKQotICovCi0JLm1hY3JvCWRjYWNoZV9sb2NrX2xpbmUJYXIsIG9mZnNldAotI2lmIFhDSEFMX0RDQUNIRV9TSVpFID4gMCAmJiBYQ0hBTF9EQ0FDSEVfTElORV9MT0NLQUJMRQotCWRwZmwJXGFyLCBcb2Zmc2V0CS8qIHByZWZldGNoIGFuZCBsb2NrIGRjYWNoZSBsaW5lICovCi0JZGNhY2hlX3N5bmMJXGFyCi0jZW5kaWYKLQkuZW5kbQotCi0KLQotLyoKLSAqICBMb2NrIChwcmVmZXRjaCAmIGxvY2spIGEgc3BlY2lmaWVkIHBvcnRpb24gb2YgbWVtb3J5IGludG8gdGhlIGRhdGEgY2FjaGUuCi0gKiAgUGFyYW1ldGVycyBhcmU6Ci0gKglhc3RhcnQJc3RhcnQgYWRkcmVzcyAocmVnaXN0ZXIgZ2V0cyBjbG9iYmVyZWQpCi0gKglhc2l6ZQlzaXplIG9mIHRoZSByZWdpb24gaW4gYnl0ZXMgKHJlZ2lzdGVyIGdldHMgY2xvYmJlcmVkKQotICoJYWMJdW5pcXVlIHJlZ2lzdGVyIHVzZWQgYXMgdGVtcG9yYXJ5Ci0gKi8KLQkubWFjcm8JZGNhY2hlX2xvY2tfcmVnaW9uCWFzdGFydCwgYXNpemUsIGFjCi0jaWYgWENIQUxfRENBQ0hFX1NJWkUgPiAwICYmIFhDSEFMX0RDQUNIRV9MSU5FX0xPQ0tBQkxFCi0JLy8gIERhdGEgY2FjaGUgcmVnaW9uIGxvY2s6Ci0JY2FjaGVfaGl0X3JlZ2lvbglkcGZsLCBYQ0hBTF9EQ0FDSEVfTElORVdJRFRILCBcYXN0YXJ0LCBcYXNpemUsIFxhYwotCWRjYWNoZV9zeW5jCVxhYwotCS8vICBFbmQgb2YgZGF0YSBjYWNoZSByZWdpb24gbG9jawotI2VuZGlmCi0JLmVuZG0KLQotCi0KLS8qCi0gKiAgVW5sb2NrIGEgc2luZ2xlIGxpbmUgb2YgdGhlIGRhdGEgY2FjaGUuCi0gKgotICogIFBhcmFtZXRlcnMgYXJlOgotICoJYXIJYWRkcmVzcyByZWdpc3RlciB0aGF0IGNvbnRhaW5zICh2aXJ0dWFsKSBhZGRyZXNzIHRvIHVubG9jawotICoJCShtYXkgZ2V0IGNsb2JiZXJlZCBpbiBhIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbiwgYnV0IG5vdCBjdXJyZW50bHkpCi0gKglvZmZzZXQJb2Zmc2V0IHRvIGFkZCB0byBcYXIgdG8gY29tcHV0ZSBlZmZlY3RpdmUgYWRkcmVzcyB0byB1bmxvY2sKLSAqCQkobm90ZTogc29tZSBudW1iZXIgb2YgbHNiaXRzIGFyZSBpZ25vcmVkKQotICovCi0JLm1hY3JvCWRjYWNoZV91bmxvY2tfbGluZQlhciwgb2Zmc2V0Ci0jaWYgWENIQUxfRENBQ0hFX1NJWkUgPiAwICYmIFhDSEFMX0RDQUNIRV9MSU5FX0xPQ0tBQkxFCi0JZGh1CVxhciwgXG9mZnNldAkvKiB1bmxvY2sgZGNhY2hlIGxpbmUgKi8KLQlkY2FjaGVfc3luYwlcYXIKLSNlbmRpZgotCS5lbmRtCi0KLQotCi0vKgotICogIFVubG9jayBhIHNwZWNpZmllZCBwb3J0aW9uIG9mIG1lbW9yeSBmcm9tIHRoZSBkYXRhIGNhY2hlLgotICogIFBhcmFtZXRlcnMgYXJlOgotICoJYXN0YXJ0CXN0YXJ0IGFkZHJlc3MgKHJlZ2lzdGVyIGdldHMgY2xvYmJlcmVkKQotICoJYXNpemUJc2l6ZSBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzIChyZWdpc3RlciBnZXRzIGNsb2JiZXJlZCkKLSAqCWFjCXVuaXF1ZSByZWdpc3RlciB1c2VkIGFzIHRlbXBvcmFyeQotICovCi0JLm1hY3JvCWRjYWNoZV91bmxvY2tfcmVnaW9uCWFzdGFydCwgYXNpemUsIGFjCi0jaWYgWENIQUxfRENBQ0hFX1NJWkUgPiAwICYmIFhDSEFMX0RDQUNIRV9MSU5FX0xPQ0tBQkxFCi0JLy8gIERhdGEgY2FjaGUgcmVnaW9uIHVubG9jazoKLQljYWNoZV9oaXRfcmVnaW9uCWRodSwgWENIQUxfRENBQ0hFX0xJTkVXSURUSCwgXGFzdGFydCwgXGFzaXplLCBcYWMKLQlkY2FjaGVfc3luYwlcYWMKLQkvLyAgRW5kIG9mIGRhdGEgY2FjaGUgcmVnaW9uIHVubG9jawotI2VuZGlmCi0JLmVuZG0KLQotCi0KLS8qCi0gKiAgVW5sb2NrIGVudGlyZSBkYXRhIGNhY2hlLgotICoKLSAqICBQYXJhbWV0ZXJzOgotICoJYWEsIGFiCQl1bmlxdWUgYWRkcmVzcyByZWdpc3RlcnMgKHRlbXBvcmFyaWVzKQotICovCi0JLm1hY3JvCWRjYWNoZV91bmxvY2tfYWxsCWFhLCBhYgotI2lmIFhDSEFMX0RDQUNIRV9TSVpFID4gMCAmJiBYQ0hBTF9EQ0FDSEVfTElORV9MT0NLQUJMRQotCS8vICBEYXRhIGNhY2hlIHVubG9jazoKLQljYWNoZV9pbmRleF9hbGwJCWRpdSwgWENIQUxfRENBQ0hFX1NJWkUsIFhDSEFMX0RDQUNIRV9MSU5FU0laRSwgMSwgXGFhLCBcYWIKLQlkY2FjaGVfc3luYwlcYWEKLQkvLyAgRW5kIG9mIGRhdGEgY2FjaGUgdW5sb2NrCi0jZW5kaWYKLQkuZW5kbQotCi0KLSNlbmRpZiAvKlhURU5TQV9DQUNIRUFTTV9IKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS9jYWNoZWF0dHJhc20uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY2FjaGVhdHRyYXNtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjM2UxMTcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS9jYWNoZWF0dHJhc20uaAorKysgL2Rldi9udWxsCkBAIC0xLDQzMiArMCwwIEBACi0jaWZuZGVmIFhURU5TQV9DQUNIRUFUVFJBU01fSAotI2RlZmluZSBYVEVOU0FfQ0FDSEVBVFRSQVNNX0gKLQotLyoKLSAqIFRISVMgRklMRSBJUyBHRU5FUkFURUQgLS0gRE8gTk9UIE1PRElGWSBCWSBIQU5ECi0gKgotICogaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS9jYWNoZWF0dHJhc20uaCAtLSBhc3NlbWJsZXItc3BlY2lmaWMKLSAqIENBQ0hFQVRUUiByZWdpc3RlciByZWxhdGVkIGRlZmluaXRpb25zIHRoYXQgZGVwZW5kIG9uIENPUkUKLSAqIGNvbmZpZ3VyYXRpb24uCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFRlbnNpbGljYSBJbmMuCi0gKi8KLQotCi0jaW5jbHVkZSA8eHRlbnNhL2NvcmVhc20uaD4KLQotCi0vKgotICogIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyBhc3NlbWJsZXIgbWFjcm9zIG9mIHRoZSBmb3JtOgotICoJPHg+Y2FjaGVhdHRyXzxmdW5jPgotICogIHdoZXJlOgotICoJPHg+IGlzICdpJywgJ2QnIG9yIGFic2VudCBmb3IgaW5zdHJ1Y3Rpb24sIGRhdGEKLSAqCQlvciBib3RoIGNhY2hlczsgYW5kCi0gKgk8ZnVuYz4gaW5kaWNhdGVzIHRoZSBmdW5jdGlvbiBvZiB0aGUgbWFjcm8uCi0gKgotICogIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkOgotICoKLSAqICBpY2FjaGVhdHRyX2dldAotICoJUmVhZHMgSS1jYWNoZSBDQUNIRUFUVFIgaW50byBhMiAoY2xvYmJlcnMgYTMtYTUpLgotICoKLSAqICBkY2FjaGVhdHRyX2dldAotICoJUmVhZHMgRC1jYWNoZSBDQUNIRUFUVFIgaW50byBhMiAoY2xvYmJlcnMgYTMtYTUpLgotICoJKE5vdGU6ICBmb3IgY29uZmlncyB3aXRoIGEgcmVhbCBDQUNIRUFUVFIgcmVnaXN0ZXIsIHRoZQotICoJIGFib3ZlIHR3byBtYWNyb3MgYXJlIGlkZW50aWNhbC4pCi0gKgotICogIGNhY2hlYXR0cl9zZXQKLSAqCVdyaXRlcyBib3RoIEktY2FjaGUgYW5kIEQtY2FjaGUgQ0FDSEVBVFRScyBmcm9tIGEyIChhMy1hOCBjbG9iYmVyZWQpLgotICoJV29ya3MgZXZlbiB3aGVuIGNoYW5naW5nIG9uZSdzIG93biBjb2RlJ3MgYXR0cmlidXRlcy4KLSAqCi0gKiAgaWNhY2hlYXR0cl9pc19lbmFibGVkICBsYWJlbAotICoJQnJhbmNoZXMgdG8gXGxhYmVsIGlmIEktY2FjaGUgYXBwZWFycyB0byBoYXZlIGJlZW4gZW5hYmxlZAotICoJKGVnLiBpZiBDQUNIRUFUVFIgY29udGFpbnMgYSBjYWNoZS1lbmFibGVkIGF0dHJpYnV0ZSkuCi0gKgkoY2xvYmJlcnMgYTItYTUsU0FSKQotICoKLSAqICBkY2FjaGVhdHRyX2lzX2VuYWJsZWQgIGxhYmVsCi0gKglCcmFuY2hlcyB0byBcbGFiZWwgaWYgRC1jYWNoZSBhcHBlYXJzIHRvIGhhdmUgYmVlbiBlbmFibGVkCi0gKgkoZWcuIGlmIENBQ0hFQVRUUiBjb250YWlucyBhIGNhY2hlLWVuYWJsZWQgYXR0cmlidXRlKS4KLSAqCShjbG9iYmVycyBhMi1hNSxTQVIpCi0gKgotICogIGNhY2hlYXR0cl9pc19lbmFibGVkICBsYWJlbAotICoJQnJhbmNoZXMgdG8gXGxhYmVsIGlmIGVpdGhlciBJLWNhY2hlIG9yIEQtY2FjaGUgYXBwZWFycyB0byBoYXZlIGJlZW4gZW5hYmxlZAotICoJKGVnLiBpZiBDQUNIRUFUVFIgY29udGFpbnMgYSBjYWNoZS1lbmFibGVkIGF0dHJpYnV0ZSkuCi0gKgkoY2xvYmJlcnMgYTItYTUsU0FSKQotICoKLSAqICBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgb25seSBkZWZpbmVkIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczoKLSAqCi0gKiAgaWNhY2hlYXR0cl9zZXQJKGlmIFhDSEFMX0hBVkVfTUlNSUNfQ0FDSEVBVFRSIHx8IFhDSEFMX0hBVkVfWExUX0NBQ0hFQVRUUikKLSAqCVdyaXRlcyBJLWNhY2hlIENBQ0hFQVRUUiBmcm9tIGEyIChhMy1hOCBjbG9iYmVyZWQpLgotICoKLSAqICBkY2FjaGVhdHRyX3NldAkoaWYgWENIQUxfSEFWRV9NSU1JQ19DQUNIRUFUVFIgfHwgWENIQUxfSEFWRV9YTFRfQ0FDSEVBVFRSKQotICoJV3JpdGVzIEQtY2FjaGUgQ0FDSEVBVFRSIGZyb20gYTIgKGEzLWE4IGNsb2JiZXJlZCkuCi0gKi8KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogICBHRU5FUklDIC0tIEFMTCBDQUNIRVMgICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiAgX2NhY2hlYXR0cl9nZXQKLSAqCi0gKiAgKEludGVybmFsIG1hY3JvLikKLSAqICBSZXR1cm5zIHZhbHVlIG9mIENBQ0hFQVRUUiByZWdpc3RlciAob3IgY2xvc2VzdCBlcXVpdmFsZW50KSBpbiBhMi4KLSAqCi0gKiAgRW50cnk6Ci0gKgkobm9uZSkKLSAqICBFeGl0OgotICoJYTIJdmFsdWUgcmVhZCBmcm9tIENBQ0hFQVRUUgotICoJYTMtYTUJY2xvYmJlcmVkICh0ZW1wb3JhcmllcykKLSAqLwotCS5tYWNybwlfY2FjaGVhdHRyX2dldAl0bGIKLSNpZiBYQ0hBTF9IQVZFX0NBQ0hFQVRUUgotCXJzcglhMiwgQ0FDSEVBVFRSCi0jZWxpZiBYQ0hBTF9IQVZFX01JTUlDX0NBQ0hFQVRUUiB8fCBYQ0hBTF9IQVZFX1hMVF9DQUNIRUFUVFIKLQkvLyAgV2UgaGF2ZSBhIGNvbmZpZyB0aGF0ICJtaW1pY3MiIENBQ0hFQVRUUiB1c2luZyBhIHNpbXBsaWZpZWQKLQkvLyAgIk1NVSIgY29tcG9zZWQgb2YgYSBzaW5nbGUgc3RhdGljYWxseS1tYXBwZWQgd2F5LgotCS8vICBEVExCIGFuZCBJVExCIGFyZSBpbmRlcGVuZGVudCwgc28gdGhlcmUncyBubyBzaW5nbGUKLQkvLyAgY2FjaGUgYXR0cmlidXRlIHRoYXQgY2FuIGRlc2NyaWJlIGJvdGguICBTbyBmb3Igbm93Ci0JLy8gIGp1c3QgcmV0dXJuIHRoZSBEVExCIHN0YXRlLgotCW1vdmkJYTUsIDB4RTAwMDAwMDAKLQltb3ZpCWEyLCAwCi0JbW92aQlhMywgMAotMToJYWRkCWEzLCBhMywgYTUJLy8gbmV4dCBzZWdtZW50Ci0JciZ0bGImMQlhNCwgYTMJCS8vIGdldCBQUE4rQ0Egb2Ygc2VnbWVudCBhdCAweEUwMDAwMDAwLCAweEMwMDAwMDAwLCAuLi4sIDAKLQlkc3luYwkvLyBpbnRlcmxvY2s/Pz8KLQlzbGxpCWEyLCBhMiwgNAotCWV4dHVpCWE0LCBhNCwgMCwgNAkvLyBleHRyYWN0IENBCi0Jb3IJYTIsIGEyLCBhNAotCWJuZXoJYTMsIDFiCi0jZWxzZQotCS8vICBUaGlzIG1hY3JvIGlzbid0IGFwcGxpY2FibGUgdG8gYXJiaXRyYXJ5IE1NVSBjb25maWd1cmF0aW9ucy4KLQkvLyAgSnVzdCByZXR1cm4gemVyby4KLQltb3ZpCWEyLCAwCi0jZW5kaWYKLQkuZW5kbQotCi0JLm1hY3JvCWljYWNoZWF0dHJfZ2V0Ci0JX2NhY2hlYXR0cl9nZXQJaXRsYgotCS5lbmRtCi0KLQkubWFjcm8JZGNhY2hlYXR0cl9nZXQKLQlfY2FjaGVhdHRyX2dldAlkdGxiCi0JLmVuZG0KLQotCi0jZGVmaW5lIFhDSEFMX0NBQ0hFQVRUUl9BTExfQllQQVNTCTB4MjIyMjIyMjIJLyogZGVmYXVsdCAocG93ZXJ1cC9yZXNldCkgdmFsdWUgb2YgQ0FDSEVBVFRSLCBhbGwgQllQQVNTCi0JCQkJCQkJICAgbW9kZSAoaWUuIGRpc2FibGVkL2J5cGFzc2VkIGNhY2hlcykgKi8KLQotI2lmIFhDSEFMX0hBVkVfQ0FDSEVBVFRSIHx8IFhDSEFMX0hBVkVfTUlNSUNfQ0FDSEVBVFRSIHx8IFhDSEFMX0hBVkVfWExUX0NBQ0hFQVRUUgotCi0jZGVmaW5lIFhDSEFMX0ZDQV9FTkFNQVNLCTB4MDAxQQkvKiBiaXRtYXAgb2YgZmV0Y2ggYXR0cmlidXRlcyB0aGF0IHJlcXVpcmUgZW5hYmxlZCBpY2FjaGUgKi8KLSNkZWZpbmUgWENIQUxfTENBX0VOQU1BU0sJMHgwMDAzCS8qIGJpdG1hcCBvZiBsb2FkICBhdHRyaWJ1dGVzIHRoYXQgcmVxdWlyZSBlbmFibGVkIGRjYWNoZSAqLwotI2RlZmluZSBYQ0hBTF9TQ0FfRU5BTUFTSwkweDAwMDMJLyogYml0bWFwIG9mIHN0b3JlIGF0dHJpYnV0ZXMgdGhhdCByZXF1aXJlIGVuYWJsZWQgZGNhY2hlICovCi0jZGVmaW5lIFhDSEFMX0xTQ0FfRU5BTUFTSwkoWENIQUxfTENBX0VOQU1BU0t8WENIQUxfU0NBX0VOQU1BU0spCS8qIGwvcyBhdHRycyByZXF1aXJpbmcgZW5hYmxlZCBkY2FjaGUgKi8KLSNkZWZpbmUgWENIQUxfQUxMQ0FfRU5BTUFTSwkoWENIQUxfRkNBX0VOQU1BU0t8WENIQUxfTFNDQV9FTkFNQVNLKQkvKiBhbGwgYXR0cnMgcmVxdWlyaW5nIGVuYWJsZWQgY2FjaGVzICovCi0KLS8qCi0gKiAgX2NhY2hlYXR0cl9pc19lbmFibGVkCi0gKgotICogIChJbnRlcm5hbCBtYWNyby4pCi0gKiAgQnJhbmNoZXMgdG8gXGxhYmVsIGlmIENBQ0hFQVRUUiBpbiBhMiBpbmRpY2F0ZXMgYW4gZW5hYmxlZAotICogIGNhY2hlLCB1c2luZyBtYXNrIGluIGEzLgotICoKLSAqICBQYXJhbWV0ZXJzOgotICoJbGFiZWwJd2hlcmUgdG8gYnJhbmNoIHRvIGlmIGNhY2hlIGlzIGVuYWJsZWQKLSAqICBFbnRyeToKLSAqCWEyCWNvbnRhaW5zIENBQ0hFQVRUUiB2YWx1ZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyCi0gKgkJY2FjaGVzIGFyZSBlbmFibGVkCi0gKglhMwkxNi1iaXQgY29uc3RhbnQgd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZCB0bwotICoJCW9uZSBvZiB0aGUgMTYgcG9zc2libGUgQ0EgdmFsdWVzIChpbiBhIENBQ0hFQVRUUiBtYXNrKTsKLSAqCQlDQSB2YWx1ZXMgdGhhdCBpbmRpY2F0ZSB0aGUgY2FjaGUgaXMgZW5hYmxlZAotICoJCWhhdmUgdGhlaXIgY29ycmVzcG9uZGluZyBiaXQgc2V0IGluIHRoaXMgbWFzawotICoJCShlZy4gdXNlIFhDSEFMX3hDQV9FTkFNQVNLICwgYWJvdmUpCi0gKiAgRXhpdDoKLSAqCWEyLGE0LGE1CWNsb2JiZXJlZAotICoJU0FSCQljbG9iYmVyZWQKLSAqLwotCS5tYWNybwlfY2FjaGVhdHRyX2lzX2VuYWJsZWQJbGFiZWwKLQltb3ZpCWE0LCA4CQkvLyBsb29wIDggdGltZXMKLS5MY2FpZmVcQDoKLQlleHR1aQlhNSwgYTIsIDAsIDQJLy8gZ2V0IENBIG5pYmJsZQotCXNzcglhNQkJLy8gaW5kZXggaW50byBtYXNrIGFjY29yZGluZyB0byBDQS4uLgotCXNybAlhNSwgYTMJCS8vIC4uLmFuZCBnZXQgQ0EncyBtYXNrIGJpdCBpbiBhNSBiaXQgMAotCWJic2kubAlhNSwgMCwgXGxhYmVsCS8vIGlmIENBIGluZGljYXRlcyBjYWNoZSBlbmFibGVkLCBqdW1wIHRvIGxhYmVsCi0Jc3JsaQlhMiwgYTIsIDQJLy8gbmV4dCBuaWJibGUKLQlhZGRpCWE0LCBhNCwgLTEKLQlibmV6CWE0LCAuTGNhaWZlXEAJLy8gbG9vcCBmb3IgZWFjaCBuaWJibGUKLQkuZW5kbQotCi0jZWxzZSAvKiBYQ0hBTF9IQVZFX0NBQ0hFQVRUUiB8fCBYQ0hBTF9IQVZFX01JTUlDX0NBQ0hFQVRUUiB8fCBYQ0hBTF9IQVZFX1hMVF9DQUNIRUFUVFIgKi8KLQkubWFjcm8JX2NhY2hlYXR0cl9pc19lbmFibGVkCWxhYmVsCi0JaglcbGFiZWwJCS8vIG1hY3JvIG5vdCBhcHBsaWNhYmxlLCBhc3N1bWUgY2FjaGVzIGFsd2F5cyBlbmFibGVkCi0JLmVuZG0KLSNlbmRpZiAvKiBYQ0hBTF9IQVZFX0NBQ0hFQVRUUiB8fCBYQ0hBTF9IQVZFX01JTUlDX0NBQ0hFQVRUUiB8fCBYQ0hBTF9IQVZFX1hMVF9DQUNIRUFUVFIgKi8KLQotCi0KLS8qCi0gKiAgaWNhY2hlYXR0cl9pc19lbmFibGVkCi0gKgotICogIEJyYW5jaGVzIHRvIFxsYWJlbCBpZiBJLWNhY2hlIGlzIGVuYWJsZWQuCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKglsYWJlbAl3aGVyZSB0byBicmFuY2ggdG8gaWYgaWNhY2hlIGlzIGVuYWJsZWQKLSAqICBFbnRyeToKLSAqCShub25lKQotICogIEV4aXQ6Ci0gKglhMi1hNSwgU0FSCWNsb2JiZXJlZCAodGVtcG9yYXJpZXMpCi0gKi8KLQkubWFjcm8JaWNhY2hlYXR0cl9pc19lbmFibGVkCWxhYmVsCi0jaWYgWENIQUxfSEFWRV9DQUNIRUFUVFIgfHwgWENIQUxfSEFWRV9NSU1JQ19DQUNIRUFUVFIgfHwgWENIQUxfSEFWRV9YTFRfQ0FDSEVBVFRSCi0JaWNhY2hlYXR0cl9nZXQKLQltb3ZpCWEzLCBYQ0hBTF9GQ0FfRU5BTUFTSwotI2VuZGlmCi0JX2NhY2hlYXR0cl9pc19lbmFibGVkCVxsYWJlbAotCS5lbmRtCi0KLS8qCi0gKiAgZGNhY2hlYXR0cl9pc19lbmFibGVkCi0gKgotICogIEJyYW5jaGVzIHRvIFxsYWJlbCBpZiBELWNhY2hlIGlzIGVuYWJsZWQuCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKglsYWJlbAl3aGVyZSB0byBicmFuY2ggdG8gaWYgZGNhY2hlIGlzIGVuYWJsZWQKLSAqICBFbnRyeToKLSAqCShub25lKQotICogIEV4aXQ6Ci0gKglhMi1hNSwgU0FSCWNsb2JiZXJlZCAodGVtcG9yYXJpZXMpCi0gKi8KLQkubWFjcm8JZGNhY2hlYXR0cl9pc19lbmFibGVkCWxhYmVsCi0jaWYgWENIQUxfSEFWRV9DQUNIRUFUVFIgfHwgWENIQUxfSEFWRV9NSU1JQ19DQUNIRUFUVFIgfHwgWENIQUxfSEFWRV9YTFRfQ0FDSEVBVFRSCi0JZGNhY2hlYXR0cl9nZXQKLQltb3ZpCWEzLCBYQ0hBTF9MU0NBX0VOQU1BU0sKLSNlbmRpZgotCV9jYWNoZWF0dHJfaXNfZW5hYmxlZAlcbGFiZWwKLQkuZW5kbQotCi0vKgotICogIGNhY2hlYXR0cl9pc19lbmFibGVkCi0gKgotICogIEJyYW5jaGVzIHRvIFxsYWJlbCBpZiBlaXRoZXIgSS1jYWNoZSBvciBELWNhY2hlIGlzIGVuYWJsZWQuCi0gKgotICogIFBhcmFtZXRlcnM6Ci0gKglsYWJlbAl3aGVyZSB0byBicmFuY2ggdG8gaWYgYSBjYWNoZSBpcyBlbmFibGVkCi0gKiAgRW50cnk6Ci0gKgkobm9uZSkKLSAqICBFeGl0OgotICoJYTItYTUsIFNBUgljbG9iYmVyZWQgKHRlbXBvcmFyaWVzKQotICovCi0JLm1hY3JvCWNhY2hlYXR0cl9pc19lbmFibGVkCWxhYmVsCi0jaWYgWENIQUxfSEFWRV9DQUNIRUFUVFIKLQlyc3IJYTIsIENBQ0hFQVRUUgotCW1vdmkJYTMsIFhDSEFMX0FMTENBX0VOQU1BU0sKLSNlbGlmIFhDSEFMX0hBVkVfTUlNSUNfQ0FDSEVBVFRSIHx8IFhDSEFMX0hBVkVfWExUX0NBQ0hFQVRUUgotCWljYWNoZWF0dHJfZ2V0Ci0JbW92aQlhMywgWENIQUxfRkNBX0VOQU1BU0sKLQlfY2FjaGVhdHRyX2lzX2VuYWJsZWQJXGxhYmVsCi0JZGNhY2hlYXR0cl9nZXQKLQltb3ZpCWEzLCBYQ0hBTF9MU0NBX0VOQU1BU0sKLSNlbmRpZgotCV9jYWNoZWF0dHJfaXNfZW5hYmxlZAlcbGFiZWwKLQkuZW5kbQotCi0KLQotLyoKLSAqICBUaGUgSVNBIGRvZXMgbm90IGhhdmUgYSBkZWZpbmVkIHdheSB0byBjaGFuZ2UgdGhlCi0gKiAgaW5zdHJ1Y3Rpb24gY2FjaGUgYXR0cmlidXRlcyBvZiB0aGUgcnVubmluZyBjb2RlLAotICogIGllLiBvZiB0aGUgbWVtb3J5IGFyZWEgdGhhdCBlbmNsb3NlcyB0aGUgY3VycmVudCBQQy4KLSAqICBIb3dldmVyLCBlYWNoIG1pY3JvLWFyY2hpdGVjdHVyZSAob3IgY2xhc3Mgb2YKLSAqICBjb25maWd1cmF0aW9ucyB3aXRoaW4gYSBtaWNyby1hcmNoaXRlY3R1cmUpCi0gKiAgcHJvdmlkZXMgYSB3YXkgdG8gZGVhbCB3aXRoIHRoaXMgaXNzdWUuCi0gKgotICogIEhlcmUgYXJlIGEgZmV3IG1hY3JvcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgcmVsZXZhbnQKLSAqICBhcHByb2FjaCB0YWtlbi4KLSAqLwotCi0jaWYgWENIQUxfSEFWRV9NSU1JQ19DQUNIRUFUVFIgfHwgWENIQUxfSEFWRV9YTFRfQ0FDSEVBVFRSCi0JLy8gIFdlIGhhdmUgYSBjb25maWcgdGhhdCAibWltaWNzIiBDQUNIRUFUVFIgdXNpbmcgYSBzaW1wbGlmaWVkCi0JLy8gICJNTVUiIGNvbXBvc2VkIG9mIGEgc2luZ2xlIHN0YXRpY2FsbHktbWFwcGVkIHdheS4KLQotLyoKLSAqICBpY2FjaGVhdHRyX3NldAotICoKLSAqICBFbnRyeToKLSAqCWEyCQljYWNoZWF0dHIgdmFsdWUgdG8gc2V0Ci0gKiAgRXhpdDoKLSAqCWEyCQl1bmNoYW5nZWQKLSAqCWEzLWE4CQljbG9iYmVyZWQgKHRlbXBvcmFyaWVzKQotICovCi0JLm1hY3JvCWljYWNoZWF0dHJfc2V0Ci0KLQltb3ZpCWE1LCAweEUwMDAwMDAwCS8vIG1hc2sgb2YgdXBwZXIgMyBiaXRzCi0JbW92aQlhNiwgM2YJCS8vIFBDIHdoZXJlIElUTEIgaXMgc2V0Ci0JbW92aQlhMywgMAkJLy8gc3RhcnQgYXQgcmVnaW9uIDAgKDAgLi4gNykKLQlhbmQJYTYsIGE2LCBhNQkvLyB1cHBlciAzIGJpdHMgb2YgbG9jYWwgUEMgYXJlYQotCW1vdglhNywgYTIJCS8vIGNvcHkgYTIgc28gaXQgZG9lc24ndCBnZXQgY2xvYmJlcmVkCi0JagkzZgotCi0jIGlmIFhDSEFMX0hBVkVfWExUX0NBQ0hFQVRUUgotCS8vICBDYW4gZG8gdHJhbnNsYXRpb25zLCB1c2UgZ2VuZXJpYyBtZXRob2Q6Ci0xOglzdWIJYTYsIGEzLCBhNQkvLyBhZGRyZXNzIG9mIHNvbWUgb3RoZXIgc2VnbWVudAotCXJpdGxiMQlhOCwgYTYJCS8vIHNhdmUgaXRzIFBQTitDQQotCWRzeW5jCS8vIGludGVybG9jaz8/Ci0Jd2l0bGIJYTQsIGE2CQkvLyBtYWtlIGl0IHRyYW5zbGF0ZSB0byB0aGlzIGNvZGUgYXJlYQotCW1vdmkJYTYsIDVmCQkvLyB3aGVyZSB0byBqdW1wIGludG8gaXQKLQlpc3luYwotCXN1YglhNiwgYTYsIGE1CS8vIGFkanVzdCBqdW1wIGFkZHJlc3Mgd2l0aGluIHRoYXQgb3RoZXIgc2VnbWVudAotCWp4CWE2Ci0KLQkvLyAgTm90ZSB0aGF0IGluIHRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0LCB3aGljaCBydW5zIGF0IGEgZGlmZmVyZW50IHZpcnR1YWwKLQkvLyAgYWRkcmVzcyB0aGFuIGl0IGlzIGFzc2VtYmxlZCBmb3IsIHdlIGF2b2lkIHVzaW5nIGxpdGVyYWxzIChlZy4gdmlhIG1vdmkvbDMycikKLQkvLyAganVzdCBpbiBjYXNlIGxpdGVyYWxzIGVuZCB1cCBpbiBhIGRpZmZlcmVudCA1MTIgTUIgc2VnbWVudCwgYW5kIHdlIGF2b2lkCi0JLy8gIGluc3RydWN0aW9ucyB0aGF0IHJlbHkgb24gdGhlIGN1cnJlbnQgUEMgYmVpbmcgd2hhdCBpcyBleHBlY3RlZC4KLQkvLwotCS5hbGlnbgk0Ci0JX2oJNmYJCS8vIHRoaXMgaXMgYXQgbGFiZWwgJzUnIG1pbnVzIDQgYnl0ZXMKLQkuYWxpZ24JNAotNToJd2l0bGIJYTQsIGEzCQkvLyB3ZSdyZSBpbiBvdGhlciBzZWdtZW50LCBub3cgY2FuIHdyaXRlIHByZXZpb3VzIHNlZ21lbnQncyBDQQotCWlzeW5jCi0JYWRkCWE2LCBhNiwgYTUJLy8gYmFjayB0byBwcmV2aW91cyBzZWdtZW50Ci0JYWRkaQlhNiwgYTYsIC00CS8vIG5leHQganVtcCBsYWJlbAotCWp4CWE2Ci0KLTY6CXN1YglhNiwgYTMsIGE1CS8vIGFkZHJlc3Mgb2Ygc29tZSBvdGhlciBzZWdtZW50Ci0Jd2l0bGIJYTgsIGE2CQkvLyByZXN0b3JlIFBQTitDQSBvZiBvdGhlciBzZWdtZW50Ci0JbW92CWE2LCBhMwkJLy8gcmVzdG9yZSBhNgotCWlzeW5jCi0jIGVsc2UgLyogWENIQUxfSEFWRV9YTFRfQ0FDSEVBVFRSICovCi0JLy8gIFVzZSBtaWNyby1hcmNoaXRlY3R1cmUgc3BlY2lmaWMgbWV0aG9kLgotCS8vICBUaGUgZm9sbG93aW5nIDQtaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgaXMgYWxpZ25lZCBzdWNoIHRoYXQKLQkvLyAgaXQgYWxsIGZpdHMgd2l0aGluIGEgc2luZ2xlIEktY2FjaGUgbGluZS4gIFNpeHRlZW4gYnl0ZQotCS8vICBhbGlnbm1lbnQgaXMgc3VmZmljaWVudCBmb3IgdGhpcyAodXNpbmcgWENIQUxfSUNBQ0hFX0xJTkVTSVpFCi0JLy8gIGFjdHVhbGx5IGNhdXNlcyBwcm9ibGVtcyBiZWNhdXNlIHRoYXQgY2FuIGJlIGdyZWF0ZXIgdGhhbgotCS8vICB0aGUgYWxpZ25tZW50IG9mIHRoZSByZXNldCB2ZWN0b3IsIHdoZXJlIHRoaXMgbWFjcm8gaXMgb2Z0ZW4KLQkvLyAgaW52b2tlZCwgd2hpY2ggd291bGQgY2F1c2UgdGhlIGxpbmtlciB0byBhbGlnbiB0aGUgcmVzZXQKLQkvLyAgdmVjdG9yIGNvZGUgYXdheSBmcm9tIHRoZSByZXNldCB2ZWN0b3IhISkuCi0JLmFsaWduCTE2IC8qWENIQUxfSUNBQ0hFX0xJTkVTSVpFKi8KLTE6CV93aXRsYglhNCwgYTMJCS8vIHdyaXRlIHdpcmVkIFBURSAoQ0EsIG5vIFBQTikgb2YgNTEyTUIgc2VnbWVudCB0byBJVExCCi0JX2lzeW5jCi0Jbm9wCi0Jbm9wCi0jIGVuZGlmIC8qIFhDSEFMX0hBVkVfWExUX0NBQ0hFQVRUUiAqLwotCWJlcQlhMywgYTUsIDRmCS8vIGRvbmU/Ci0KLQkvLyAgTm90ZSB0aGF0IGluIHRoZSBXSVRMQiBsb29wLCB3ZSBkb24ndCBkbyBhbnkgbG9hZC9zdG9yZXMKLQkvLyAgKG1heSBub3QgYmUgYW4gaXNzdWUgaGVyZSwgYnV0IGl0IGlzIGltcG9ydGFudCBpbiB0aGUgRFRMQiBjYXNlKS4KLTI6CXNybGkJYTcsIGE3LCA0CS8vIG5leHQgQ0EKLQlzdWIJYTMsIGEzLCBhNQkvLyBuZXh0IHNlZ21lbnQgKGFkZCAweDIwMDAwMDAwKQotMzoKLSMgaWYgWENIQUxfSEFWRV9YTFRfQ0FDSEVBVFRSCS8qIGlmIGhhdmUgdHJhbnNsYXRpb24sIHByZXNlcnZlIGl0ICovCi0Jcml0bGIxCWE4LCBhMwkJLy8gZ2V0IGN1cnJlbnQgUFBOK0NBIG9mIHNlZ21lbnQKLQlkc3luYwkvLyBpbnRlcmxvY2s/Pz8KLQlleHR1aQlhNCwgYTcsIDAsIDQJLy8gZXh0cmFjdCBDQSB0byBzZXQKLQlzcmxpCWE4LCBhOCwgNAkvLyBjbGVhciBDQSBidXQga2VlcCBQUE4gLi4uCi0Jc2xsaQlhOCwgYTgsIDQJLy8gLi4uCi0JYWRkCWE0LCBhNCwgYTgJLy8gY29tYmluZSBuZXcgQ0Egd2l0aCBQUE4gdG8gcHJlc2VydmUKLSMgZWxzZQotCWV4dHVpCWE0LCBhNywgMCwgNAkvLyBleHRyYWN0IENBCi0jIGVuZGlmCi0JYmVxCWEzLCBhNiwgMWIJLy8gY3VycmVudCBQQydzIHJlZ2lvbj8gaWYgc28sIGRvIGl0IGluIGEgc2FmZSB3YXkKLQl3aXRsYglhNCwgYTMJCS8vIHdyaXRlIHdpcmVkIFBURSAoQ0EgWytQUE5dKSBvZiA1MTJNQiBzZWdtZW50IHRvIElUTEIKLQlibmUJYTMsIGE1LCAyYgotCWlzeW5jCQkJLy8gbWFrZSBzdXJlIGFsbCBpZmV0Y2ggY2hhbmdlcyB0YWtlIGVmZmVjdAotNDoKLQkuZW5kbQkvLyBpY2FjaGVhdHRyX3NldAotCi0KLS8qCi0gKiAgZGNhY2hlYXR0cl9zZXQKLSAqCi0gKiAgRW50cnk6Ci0gKglhMgkJY2FjaGVhdHRyIHZhbHVlIHRvIHNldAotICogIEV4aXQ6Ci0gKglhMgkJdW5jaGFuZ2VkCi0gKglhMy1hOAkJY2xvYmJlcmVkICh0ZW1wb3JhcmllcykKLSAqLwotCi0JLm1hY3JvCWRjYWNoZWF0dHJfc2V0Ci0KLQltb3ZpCWE1LCAweEUwMDAwMDAwCS8vIG1hc2sgb2YgdXBwZXIgMyBiaXRzCi0JbW92aQlhMywgMAkJLy8gc3RhcnQgYXQgcmVnaW9uIDAgKDAgLi4gNykKLQltb3YJYTcsIGEyCQkvLyBjb3B5IGEyIHNvIGl0IGRvZXNuJ3QgZ2V0IGNsb2JiZXJlZAotCWoJM2YKLQkvLyAgTm90ZSB0aGF0IGluIHRoZSBXRFRMQiBsb29wLCB3ZSBkb24ndCBkbyBhbnkgbG9hZC9zdG9yZXMKLQkvLyAgKGluY2x1ZGluZyBpbXBsaWNpdCBsMzJyIHZpYSBtb3ZpKSBiZWNhdXNlIGl0IGlzbid0IHNhZmUuCi0yOglzcmxpCWE3LCBhNywgNAkvLyBuZXh0IENBCi0Jc3ViCWEzLCBhMywgYTUJLy8gbmV4dCBzZWdtZW50IChhZGQgMHgyMDAwMDAwMCkKLTM6Ci0jIGlmIFhDSEFMX0hBVkVfWExUX0NBQ0hFQVRUUgkvKiBpZiBoYXZlIHRyYW5zbGF0aW9uLCBwcmVzZXJ2ZSBpdCAqLwotCXJkdGxiMQlhOCwgYTMJCS8vIGdldCBjdXJyZW50IFBQTitDQSBvZiBzZWdtZW50Ci0JZHN5bmMJLy8gaW50ZXJsb2NrPz8/Ci0JZXh0dWkJYTQsIGE3LCAwLCA0CS8vIGV4dHJhY3QgQ0EgdG8gc2V0Ci0Jc3JsaQlhOCwgYTgsIDQJLy8gY2xlYXIgQ0EgYnV0IGtlZXAgUFBOIC4uLgotCXNsbGkJYTgsIGE4LCA0CS8vIC4uLgotCWFkZAlhNCwgYTQsIGE4CS8vIGNvbWJpbmUgbmV3IENBIHdpdGggUFBOIHRvIHByZXNlcnZlCi0jIGVsc2UKLQlleHR1aQlhNCwgYTcsIDAsIDQJLy8gZXh0cmFjdCBDQSB0byBzZXQKLSMgZW5kaWYKLQl3ZHRsYglhNCwgYTMJCS8vIHdyaXRlIHdpcmVkIFBURSAoQ0EgWytQUE5dKSBvZiA1MTJNQiBzZWdtZW50IHRvIERUTEIKLQlibmUJYTMsIGE1LCAyYgotCWRzeW5jCQkJLy8gbWFrZSBzdXJlIGFsbCBkYXRhIHBhdGggY2hhbmdlcyB0YWtlIGVmZmVjdAotCS5lbmRtCS8vIGRjYWNoZWF0dHJfc2V0Ci0KLSNlbmRpZiAvKiBYQ0hBTF9IQVZFX01JTUlDX0NBQ0hFQVRUUiB8fCBYQ0hBTF9IQVZFX1hMVF9DQUNIRUFUVFIgKi8KLQotCi0KLS8qCi0gKiAgY2FjaGVhdHRyX3NldAotICoKLSAqICBNYWNybyB0aGF0IHNldHMgdGhlIGN1cnJlbnQgQ0FDSEVBVFRSIHNhZmVseQotICogIChib3RoIGkgYW5kIGQpIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb250ZW50cyBvZiBhMi4KLSAqICBJdCB3b3JrcyBldmVuIHdoZW4gY2hhbmdpbmcgdGhlIGNhY2hlIGF0dHJpYnV0ZXMgb2YKLSAqICB0aGUgY3VycmVudGx5IHJ1bm5pbmcgY29kZS4KLSAqCi0gKiAgRW50cnk6Ci0gKglhMgkJY2FjaGVhdHRyIHZhbHVlIHRvIHNldAotICogIEV4aXQ6Ci0gKglhMgkJdW5jaGFuZ2VkCi0gKglhMy1hOAkJY2xvYmJlcmVkICh0ZW1wb3JhcmllcykKLSAqLwotCS5tYWNybwljYWNoZWF0dHJfc2V0Ci0KLSNpZiBYQ0hBTF9IQVZFX0NBQ0hFQVRUUgotIyBpZiBYQ0hBTF9JQ0FDSEVfTElORVNJWkUgPCA0Ci0JLy8gIE5vIGktY2FjaGUsIHNvIGNhbiBhbHdheXMgc2FmZWx5IHdyaXRlIHRvIENBQ0hFQVRUUjoKLQl3c3IJYTIsIENBQ0hFQVRUUgotIyBlbHNlCi0JLy8gIFRoZSBBdGhlbnMgbWljcm8tYXJjaGl0ZWN0dXJlLCB3aGVuIHVzaW5nIHRoZSBvbGQKLQkvLyAgZXhjZXB0aW9uIGFyY2hpdGVjdHVyZSBvcHRpb24gKGllLiB3aXRoIHRoZSBDQUNIRUFUVFIgcmVnaXN0ZXIpCi0JLy8gIGFsbG93cyBjaGFuZ2luZyB0aGUgY2FjaGUgYXR0cmlidXRlcyBvZiB0aGUgcnVubmluZyBjb2RlCi0JLy8gIHVzaW5nIHRoZSBmb2xsb3dpbmcgZXhhY3Qgc2VxdWVuY2UgYWxpZ25lZCB0byBiZSB3aXRoaW4KLQkvLyAgYW4gaW5zdHJ1Y3Rpb24gY2FjaGUgbGluZS4gIChOT1RFOiB1c2luZyBYQ0hBTF9JQ0FDSEVfTElORVNJWkUKLQkvLyAgYWxpZ25tZW50IGFjdHVhbGx5IGNhdXNlcyBwcm9ibGVtcyBiZWNhdXNlIHRoYXQgY2FuIGJlIGdyZWF0ZXIKLQkvLyAgdGhhbiB0aGUgYWxpZ25tZW50IG9mIHRoZSByZXNldCB2ZWN0b3IsIHdoZXJlIHRoaXMgbWFjcm8gaXMgb2Z0ZW4KLQkvLyAgaW52b2tlZCwgd2hpY2ggd291bGQgY2F1c2UgdGhlIGxpbmtlciB0byBhbGlnbiB0aGUgcmVzZXQKLQkvLyAgdmVjdG9yIGNvZGUgYXdheSBmcm9tIHRoZSByZXNldCB2ZWN0b3IhISkuCi0JagkxZgotCS5hbGlnbgkxNiAvKlhDSEFMX0lDQUNIRV9MSU5FU0laRSovCS8vIGFsaWduIHRvIHdpdGhpbiBhbiBJLWNhY2hlIGxpbmUKLTE6CV93c3IJYTIsIENBQ0hFQVRUUgotCV9pc3luYwotCW5vcAotCW5vcAotIyBlbmRpZgotI2VsaWYgWENIQUxfSEFWRV9NSU1JQ19DQUNIRUFUVFIgfHwgWENIQUxfSEFWRV9YTFRfQ0FDSEVBVFRSCi0JLy8gIERUTEIgYW5kIElUTEIgYXJlIGluZGVwZW5kZW50LCBidXQgdG8ga2VlcCBzZW1hbnRpY3MKLQkvLyAgb2YgdGhpcyBtYWNybyB3ZSBzaW1wbHkgd3JpdGUgdG8gYm90aC4KLQlpY2FjaGVhdHRyX3NldAotCWRjYWNoZWF0dHJfc2V0Ci0jZWxzZQotCS8vICBUaGlzIG1hY3JvIGlzbid0IGFwcGxpY2FibGUgdG8gYXJiaXRyYXJ5IE1NVSBjb25maWd1cmF0aW9ucy4KLQkvLyAgRG8gbm90aGluZyBpbiB0aGlzIGNhc2UuCi0jZW5kaWYKLQkuZW5kbQotCi0KLSNlbmRpZiAvKlhURU5TQV9DQUNIRUFUVFJBU01fSCovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29uZmlnLWxpbnV4X2JlL2NvcmUuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29uZmlnLWxpbnV4X2JlL2NvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU0ZmU1ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2NvbmZpZy1saW51eF9iZS9jb3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcwICswLDAgQEAKLS8qCi0gKiB4dGVuc2EvY29uZmlnL2NvcmUuaCAtLSBIQUwgZGVmaW5pdGlvbnMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIENPUkUgY29uZmlndXJhdGlvbgotICoKLSAqICBUaGlzIGhlYWRlciBmaWxlIGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyB0aGUgImNvbXBpbGUtdGltZSBIQUwiIG9yIENIQUwuCi0gKiAgSXQgd2FzIGdlbmVyYXRlZCBmb3IgYSBzcGVjaWZpYyBYdGVuc2EgcHJvY2Vzc29yIGNvbmZpZ3VyYXRpb24uCi0gKgotICogIFNvdXJjZSBmb3IgY29uZmlndXJhdGlvbi1pbmRlcGVuZGVudCBiaW5hcmllcyAod2hpY2ggbGluayBpbiBhCi0gKiAgY29uZmlndXJhdGlvbi1zcGVjaWZpYyBIQUwgbGlicmFyeSkgbXVzdCBORVZFUiBpbmNsdWRlIHRoaXMgZmlsZS4KLSAqICBJdCBpcyBwZXJmZWN0bHkgbm9ybWFsLCBob3dldmVyLCBmb3IgdGhlIEhBTCBzb3VyY2UgaXRzZWxmIHRvIGluY2x1ZGUgdGhpcyBmaWxlLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGVuc2lsaWNhLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyLjEgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqCi0gKiBGdXJ0aGVyLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IHRoYXQgaXQgaXMKLSAqIGZyZWUgb2YgdGhlIHJpZ2h0ZnVsIGNsYWltIG9mIGFueSB0aGlyZCBwZXJzb24gcmVnYXJkaW5nIGluZnJpbmdlbWVudAotICogb3IgdGhlIGxpa2UuICBBbnkgbGljZW5zZSBwcm92aWRlZCBoZXJlaW4sIHdoZXRoZXIgaW1wbGllZCBvcgotICogb3RoZXJ3aXNlLCBhcHBsaWVzIG9ubHkgdG8gdGhpcyBzb2Z0d2FyZSBmaWxlLiAgUGF0ZW50IGxpY2Vuc2VzLCBpZgotICogYW55LCBwcm92aWRlZCBoZXJlaW4gZG8gbm90IGFwcGx5IHRvIGNvbWJpbmF0aW9ucyBvZiB0aGlzIHByb2dyYW0gd2l0aAotICogb3RoZXIgc29mdHdhcmUsIG9yIGFueSBvdGhlciBwcm9kdWN0IHdoYXRzb2V2ZXIuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywKLSAqIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgWFRFTlNBX0NPTkZJR19DT1JFX0gKLSNkZWZpbmUgWFRFTlNBX0NPTkZJR19DT1JFX0gKLQotI2luY2x1ZGUgPHh0ZW5zYS9oYWwuaD4KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJCQlHRU5FUkFMCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKgotICogIFNlcGFyYXRvcnMgZm9yIG1hY3JvcyB0aGF0IGV4cGFuZCBpbnRvIGFycmF5cy4KLSAqICBUaGVzZSBjYW4gYmUgcHJlZGVmaW5lZCBieSBmaWxlcyB0aGF0ICNpbmNsdWRlIHRoaXMgb25lLAotICogIHdoZW4gZGlmZmVyZW50IHNlcGFyYXRvcnMgYXJlIHJlcXVpcmVkLgotICovCi0vKiAgRWxlbWVudCBzZXBhcmF0b3IgZm9yIG1hY3JvcyB0aGF0IGV4cGFuZCBpbnRvIDEtZGltZW5zaW9uYWwgYXJyYXlzOiAgKi8KLSNpZm5kZWYgWENIQUxfU0VQCi0jZGVmaW5lIFhDSEFMX1NFUAkJCSwKLSNlbmRpZgotLyogIEFycmF5IHNlcGFyYXRvciBmb3IgbWFjcm9zIHRoYXQgZXhwYW5kIGludG8gMi1kaW1lbnNpb25hbCBhcnJheXM6ICAqLwotI2lmbmRlZiBYQ0hBTF9TRVAyCi0jZGVmaW5lIFhDSEFMX1NFUDIJCQl9LHsKLSNlbmRpZgotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJCUVORElBTk5FU1MKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgWENIQUxfSEFWRV9CRQkJCTEKLSNkZWZpbmUgWENIQUxfSEFWRV9MRQkJCTAKLSNkZWZpbmUgWENIQUxfTUVNT1JZX09SREVSCQlYVEhBTF9CSUdFTkRJQU4KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJCQlSRUdJU1RFUiBXSU5ET1dTCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIFhDSEFMX0hBVkVfV0lORE9XRUQJCTEJLyogMSBpZiB3aW5kb3dlZCByZWdpc3RlcnMgb3B0aW9uIGNvbmZpZ3VyZWQsIDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX05VTV9BUkVHUwkJCTY0CS8qIG51bWJlciBvZiBwaHlzaWNhbCBhZGRyZXNzIHJlZ3MgKi8KLSNkZWZpbmUgWENIQUxfTlVNX0FSRUdTX0xPRzIJCTYJLyogbG9nMihYQ0hBTF9OVU1fQVJFR1MpICovCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQkJQUREUkVTUyBBTElHTk1FTlQKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qICBUaGVzZSBhcHBseSB0byBhIHNlbGVjdGVkIHNldCBvZiBjb3JlIGxvYWQgYW5kIHN0b3JlIGluc3RydWN0aW9ucyBvbmx5IChzZWUgSVNBKTogICovCi0jZGVmaW5lIFhDSEFMX1VOQUxJR05FRF9MT0FEX0VYQ0VQVElPTgkxCS8qIDEgaWYgdW5hbGlnbmVkIGxvYWRzIGNhdXNlIGFuIGV4Y2VwdGlvbiwgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfVU5BTElHTkVEX1NUT1JFX0VYQ0VQVElPTgkxCS8qIDEgaWYgdW5hbGlnbmVkIHN0b3JlcyBjYXVzZSBhbiBleGNlcHRpb24sIDAgb3RoZXJ3aXNlICovCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQkJSU5URVJSVVBUUwotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBYQ0hBTF9IQVZFX0lOVEVSUlVQVFMJCTEJLyogMSBpZiBpbnRlcnJ1cHQgb3B0aW9uIGNvbmZpZ3VyZWQsIDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0hBVkVfSElHSFBSSV9JTlRFUlJVUFRTCTEJLyogMSBpZiBoaWdoLXByaW9yaXR5IGludGVycnVwdCBvcHRpb24gY29uZmlndXJlZCwgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfSEFWRV9ISUdITEVWRUxfSU5URVJSVVBUUwlYQ0hBTF9IQVZFX0hJR0hQUklfSU5URVJSVVBUUwotI2RlZmluZSBYQ0hBTF9IQVZFX05NSQkJCTAJLyogMSBpZiBOTUkgb3B0aW9uIGNvbmZpZ3VyZWQsIDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX05VTV9JTlRFUlJVUFRTCQkxNwkvKiBudW1iZXIgb2YgaW50ZXJydXB0cyAqLwotI2RlZmluZSBYQ0hBTF9OVU1fSU5URVJSVVBUU19MT0cyCTUJLyogbnVtYmVyIG9mIGJpdHMgdG8gaG9sZCBhbiBpbnRlcnJ1cHQgbnVtYmVyOiByb3VuZHVwKGxvZzIobnVtYmVyIG9mIGludGVycnVwdHMpKSAqLwotI2RlZmluZSBYQ0hBTF9OVU1fRVhUSU5URVJSVVBUUwkJMTAJLyogbnVtYmVyIG9mIGV4dGVybmFsIGludGVycnVwdHMgKi8KLSNkZWZpbmUgWENIQUxfTlVNX0lOVExFVkVMUwkJNAkvKiBudW1iZXIgb2YgaW50ZXJydXB0IGxldmVscyAobm90IGluY2x1ZGluZyBsZXZlbCB6ZXJvISkgKi8KLSNkZWZpbmUgWENIQUxfTlVNX0xPV1BSSV9MRVZFTFMJCTEJCQkvKiBudW1iZXIgb2YgbG93LXByaW9yaXR5IGludGVycnVwdCBsZXZlbHMgKGFsd2F5cyAxKSAqLwotI2RlZmluZSBYQ0hBTF9GSVJTVF9ISUdIUFJJX0xFVkVMCShYQ0hBTF9OVU1fTE9XUFJJX0xFVkVMUysxKQkvKiBsZXZlbCBvZiBmaXJzdCBoaWdoLXByaW9yaXR5IGludGVycnVwdCAoYWx3YXlzIDIpICovCi0jZGVmaW5lIFhDSEFMX0VYQ01fTEVWRUwJCTEJCQkvKiBsZXZlbCBvZiBpbnRlcnJ1cHRzIG1hc2tlZCBieSBQUy5FWENNIChYRUEyIG9ubHk7IGFsd2F5cyAxIGluIFQxMHh4KTsKLQkJCQkJCQkJICAgZm9yIFhFQTEsIHdoZXJlIHRoZXJlIGlzIG5vIFBTLkVYQ00sIHRoaXMgaXMgYWx3YXlzIDE7Ci0JCQkJCQkJCSAgIGludGVycnVwdHMgYXQgbGV2ZWxzIEZJUlNUX0hJR0hQUkkgPD0gbiA8PSBFWENNX0xFVkVMLCBpZiBhbnksCi0JCQkJCQkJCSAgIGFyZSB0ZXJtZWQgIm1lZGl1bSBwcmlvcml0eSIgaW50ZXJydXB0cyAocG9zdCBUMTB4eCBvbmx5KSAqLwotLyogIE5vdGU6ICAxIDw9IExPV1BSSV9MRVZFTFMgPD0gRVhDTV9MRVZFTCA8IERFQlVHTEVWRUwgPD0gTlVNX0lOVExFVkVMUyA8IE5NSUxFVkVMIDw9IDE1ICAqLwotCi0vKiAgTWFza3Mgb2YgaW50ZXJydXB0cyBhdCBlYWNoIGludGVycnVwdCBsZXZlbDogICovCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMMF9NQVNLCQkweDAwMDAwMDAwCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMMV9NQVNLCQkweDAwMDA2NEY5Ci0jZGVmaW5lIFhDSEFMX0lOVExFVkVMMl9NQVNLCQkweDAwMDA4OTAyCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMM19NQVNLCQkweDAwMDExMjA0Ci0jZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9NQVNLCQkweDAwMDAwMDAwCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMNV9NQVNLCQkweDAwMDAwMDAwCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMNl9NQVNLCQkweDAwMDAwMDAwCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMN19NQVNLCQkweDAwMDAwMDAwCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMOF9NQVNLCQkweDAwMDAwMDAwCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMOV9NQVNLCQkweDAwMDAwMDAwCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMMTBfTUFTSwkJMHgwMDAwMDAwMAotI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDExX01BU0sJCTB4MDAwMDAwMDAKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUwxMl9NQVNLCQkweDAwMDAwMDAwCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMMTNfTUFTSwkJMHgwMDAwMDAwMAotI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDE0X01BU0sJCTB4MDAwMDAwMDAKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUwxNV9NQVNLCQkweDAwMDAwMDAwCi0vKiAgQXMgYW4gYXJyYXkgb2YgZW50cmllcyAoZWcuIGZvciBDIGNvbnN0YW50IGFycmF5cyk6ICAqLwotI2RlZmluZSBYQ0hBTF9JTlRMRVZFTF9NQVNLUwkJMHgwMDAwMDAwMAlYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDA2NEY5CVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMDg5MDIJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAxMTIwNAlYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDAwMDAwCVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMDAwMDAJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAwMDAwMAlYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDAwMDAwCVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMDAwMDAJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAwMDAwMAlYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDAwMDAwCVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMDAwMDAJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAwMDAwMAlYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDAwMDAwCVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMDAwMDAJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAwMDAwMAotCi0vKiAgTWFza3Mgb2YgaW50ZXJydXB0cyBhdCBlYWNoIHJhbmdlIDEuLm4gb2YgaW50ZXJydXB0IGxldmVsczogICovCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMMF9BTkRCRUxPV19NQVNLCTB4MDAwMDAwMDAKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUwxX0FOREJFTE9XX01BU0sJMHgwMDAwNjRGOQotI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDJfQU5EQkVMT1dfTUFTSwkweDAwMDBFREZCCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMM19BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUw0X0FOREJFTE9XX01BU0sJMHgwMDAxRkZGRgotI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfQU5EQkVMT1dfTUFTSwkweDAwMDFGRkZGCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMNl9BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUw3X0FOREJFTE9XX01BU0sJMHgwMDAxRkZGRgotI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDhfQU5EQkVMT1dfTUFTSwkweDAwMDFGRkZGCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMOV9BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUwxMF9BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUwxMV9BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUwxMl9BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUwxM19BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUwxNF9BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUwxNV9BTkRCRUxPV19NQVNLCTB4MDAwMUZGRkYKLSNkZWZpbmUgWENIQUxfTE9XUFJJX01BU0sJCVhDSEFMX0lOVExFVkVMMV9BTkRCRUxPV19NQVNLCS8qIG1hc2sgb2YgYWxsIGxvdy1wcmlvcml0eSBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIFhDSEFMX0VYQ01fTUFTSwkJCVhDSEFMX0lOVExFVkVMMV9BTkRCRUxPV19NQVNLCS8qIG1hc2sgb2YgYWxsIGludGVycnVwdHMgbWFza2VkIGJ5IFBTLkVYQ00gKG9yIENFWENNKSAqLwotLyogIEFzIGFuIGFycmF5IG9mIGVudHJpZXMgKGVnLiBmb3IgQyBjb25zdGFudCBhcnJheXMpOiAgKi8KLSNkZWZpbmUgWENIQUxfSU5UTEVWRUxfQU5EQkVMT1dfTUFTS1MJMHgwMDAwMDAwMAlYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDA2NEY5CVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMEVERkIJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAxRkZGRglYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDFGRkZGCVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMUZGRkYJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAxRkZGRglYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDFGRkZGCVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMUZGRkYJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAxRkZGRglYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDFGRkZGCVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMUZGRkYJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAxRkZGRglYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDFGRkZGCVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMUZGRkYJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAxRkZGRgotCi0vKiAgSW50ZXJydXB0IG51bWJlcnMgZm9yIGVhY2ggaW50ZXJydXB0IGxldmVsIGF0IHdoaWNoIG9ubHkgb25lIGludGVycnVwdCB3YXMgY29uZmlndXJlZDogICovCi0vKiNkZWZpbmUgWENIQUxfSU5UTEVWRUwxX05VTQkJLi4ubW9yZSB0aGFuIG9uZSBpbnRlcnJ1cHQgYXQgdGhpcyBsZXZlbC4uLiovCi0vKiNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX05VTQkJLi4ubW9yZSB0aGFuIG9uZSBpbnRlcnJ1cHQgYXQgdGhpcyBsZXZlbC4uLiovCi0vKiNkZWZpbmUgWENIQUxfSU5UTEVWRUwzX05VTQkJLi4ubW9yZSB0aGFuIG9uZSBpbnRlcnJ1cHQgYXQgdGhpcyBsZXZlbC4uLiovCi0KLS8qICBMZXZlbCBvZiBlYWNoIGludGVycnVwdDogICovCi0jZGVmaW5lIFhDSEFMX0lOVDBfTEVWRUwJCTEKLSNkZWZpbmUgWENIQUxfSU5UMV9MRVZFTAkJMgotI2RlZmluZSBYQ0hBTF9JTlQyX0xFVkVMCQkzCi0jZGVmaW5lIFhDSEFMX0lOVDNfTEVWRUwJCTEKLSNkZWZpbmUgWENIQUxfSU5UNF9MRVZFTAkJMQotI2RlZmluZSBYQ0hBTF9JTlQ1X0xFVkVMCQkxCi0jZGVmaW5lIFhDSEFMX0lOVDZfTEVWRUwJCTEKLSNkZWZpbmUgWENIQUxfSU5UN19MRVZFTAkJMQotI2RlZmluZSBYQ0hBTF9JTlQ4X0xFVkVMCQkyCi0jZGVmaW5lIFhDSEFMX0lOVDlfTEVWRUwJCTMKLSNkZWZpbmUgWENIQUxfSU5UMTBfTEVWRUwJCTEKLSNkZWZpbmUgWENIQUxfSU5UMTFfTEVWRUwJCTIKLSNkZWZpbmUgWENIQUxfSU5UMTJfTEVWRUwJCTMKLSNkZWZpbmUgWENIQUxfSU5UMTNfTEVWRUwJCTEKLSNkZWZpbmUgWENIQUxfSU5UMTRfTEVWRUwJCTEKLSNkZWZpbmUgWENIQUxfSU5UMTVfTEVWRUwJCTIKLSNkZWZpbmUgWENIQUxfSU5UMTZfTEVWRUwJCTMKLSNkZWZpbmUgWENIQUxfSU5UMTdfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMThfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMTlfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMjBfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMjFfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMjJfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMjNfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMjRfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMjVfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMjZfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMjdfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMjhfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMjlfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMzBfTEVWRUwJCTAKLSNkZWZpbmUgWENIQUxfSU5UMzFfTEVWRUwJCTAKLS8qICBBcyBhbiBhcnJheSBvZiBlbnRyaWVzIChlZy4gZm9yIEMgY29uc3RhbnQgYXJyYXlzKTogICovCi0jZGVmaW5lIFhDSEFMX0lOVF9MRVZFTFMJCTEJWENIQUxfU0VQIFwKLQkJCQkJMglYQ0hBTF9TRVAgXAotCQkJCQkzCVhDSEFMX1NFUCBcCi0JCQkJCTEJWENIQUxfU0VQIFwKLQkJCQkJMQlYQ0hBTF9TRVAgXAotCQkJCQkxCVhDSEFMX1NFUCBcCi0JCQkJCTEJWENIQUxfU0VQIFwKLQkJCQkJMQlYQ0hBTF9TRVAgXAotCQkJCQkyCVhDSEFMX1NFUCBcCi0JCQkJCTMJWENIQUxfU0VQIFwKLQkJCQkJMQlYQ0hBTF9TRVAgXAotCQkJCQkyCVhDSEFMX1NFUCBcCi0JCQkJCTMJWENIQUxfU0VQIFwKLQkJCQkJMQlYQ0hBTF9TRVAgXAotCQkJCQkxCVhDSEFMX1NFUCBcCi0JCQkJCTIJWENIQUxfU0VQIFwKLQkJCQkJMwlYQ0hBTF9TRVAgXAotCQkJCQkwCVhDSEFMX1NFUCBcCi0JCQkJCTAJWENIQUxfU0VQIFwKLQkJCQkJMAlYQ0hBTF9TRVAgXAotCQkJCQkwCVhDSEFMX1NFUCBcCi0JCQkJCTAJWENIQUxfU0VQIFwKLQkJCQkJMAlYQ0hBTF9TRVAgXAotCQkJCQkwCVhDSEFMX1NFUCBcCi0JCQkJCTAJWENIQUxfU0VQIFwKLQkJCQkJMAlYQ0hBTF9TRVAgXAotCQkJCQkwCVhDSEFMX1NFUCBcCi0JCQkJCTAJWENIQUxfU0VQIFwKLQkJCQkJMAlYQ0hBTF9TRVAgXAotCQkJCQkwCVhDSEFMX1NFUCBcCi0JCQkJCTAJWENIQUxfU0VQIFwKLQkJCQkJMAotCi0vKiAgVHlwZSBvZiBlYWNoIGludGVycnVwdDogICovCi0jZGVmaW5lIFhDSEFMX0lOVDBfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKLSNkZWZpbmUgWENIQUxfSU5UMV9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAotI2RlZmluZSBYQ0hBTF9JTlQyX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCi0jZGVmaW5lIFhDSEFMX0lOVDNfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKLSNkZWZpbmUgWENIQUxfSU5UNF9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAotI2RlZmluZSBYQ0hBTF9JTlQ1X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCi0jZGVmaW5lIFhDSEFMX0lOVDZfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKLSNkZWZpbmUgWENIQUxfSU5UN19UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9FREdFCi0jZGVmaW5lIFhDSEFMX0lOVDhfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fRURHRQotI2RlZmluZSBYQ0hBTF9JTlQ5X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0VER0UKLSNkZWZpbmUgWENIQUxfSU5UMTBfVFlQRSAJWFRIQUxfSU5UVFlQRV9USU1FUgotI2RlZmluZSBYQ0hBTF9JTlQxMV9UWVBFIAlYVEhBTF9JTlRUWVBFX1RJTUVSCi0jZGVmaW5lIFhDSEFMX0lOVDEyX1RZUEUgCVhUSEFMX0lOVFRZUEVfVElNRVIKLSNkZWZpbmUgWENIQUxfSU5UMTNfVFlQRSAJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRQotI2RlZmluZSBYQ0hBTF9JTlQxNF9UWVBFIAlYVEhBTF9JTlRUWVBFX1NPRlRXQVJFCi0jZGVmaW5lIFhDSEFMX0lOVDE1X1RZUEUgCVhUSEFMX0lOVFRZUEVfU09GVFdBUkUKLSNkZWZpbmUgWENIQUxfSU5UMTZfVFlQRSAJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRQotI2RlZmluZSBYQ0hBTF9JTlQxN19UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQxOF9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQxOV9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQyMF9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQyMV9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQyMl9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQyM19UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQyNF9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQyNV9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQyNl9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQyN19UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQyOF9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQyOV9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQzMF9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotI2RlZmluZSBYQ0hBTF9JTlQzMV9UWVBFIAlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotLyogIEFzIGFuIGFycmF5IG9mIGVudHJpZXMgKGVnLiBmb3IgQyBjb25zdGFudCBhcnJheXMpOiAgKi8KLSNkZWZpbmUgWENIQUxfSU5UX1RZUEVTCQlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTCAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwgICAgIAlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMICAgICAJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTCAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwgICAgIAlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMICAgICAJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTCAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9FWFRFUk5fRURHRSAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9FWFRFUk5fRURHRSAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9FWFRFUk5fRURHRSAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9USU1FUiAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9USU1FUiAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9USU1FUiAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRSAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRSAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRSAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRSAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9VTkNPTkZJR1VSRUQgICAgIAlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0lOVFRZUEVfVU5DT05GSUdVUkVEICAgICAJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRCAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9VTkNPTkZJR1VSRUQgICAgIAlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0lOVFRZUEVfVU5DT05GSUdVUkVEICAgICAJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRCAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9VTkNPTkZJR1VSRUQgICAgIAlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0lOVFRZUEVfVU5DT05GSUdVUkVEICAgICAJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRCAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9VTkNPTkZJR1VSRUQgICAgIAlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0lOVFRZUEVfVU5DT05GSUdVUkVEICAgICAJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRCAgICAgCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfSU5UVFlQRV9VTkNPTkZJR1VSRUQgICAgIAlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0lOVFRZUEVfVU5DT05GSUdVUkVEICAgICAJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9JTlRUWVBFX1VOQ09ORklHVVJFRAotCi0vKiAgTWFza3Mgb2YgaW50ZXJydXB0cyBmb3IgZWFjaCB0eXBlIG9mIGludGVycnVwdDogICovCi0jZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19VTkNPTkZJR1VSRUQJMHhGRkZFMDAwMAotI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfU09GVFdBUkUJMHgwMDAxRTAwMAotI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfRVhURVJOX0VER0UJMHgwMDAwMDM4MAotI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfRVhURVJOX0xFVkVMCTB4MDAwMDAwN0YKLSNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX1RJTUVSCTB4MDAwMDFDMDAKLSNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX05NSQkJMHgwMDAwMDAwMAotLyogIEFzIGFuIGFycmF5IG9mIGVudHJpZXMgKGVnLiBmb3IgQyBjb25zdGFudCBhcnJheXMpOiAgKi8KLSNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLUwkJMHhGRkZFMDAwMAlYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDFFMDAwCVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMDAzODAJWENIQUxfU0VQIFwKLQkJCQkJMHgwMDAwMDA3RglYQ0hBTF9TRVAgXAotCQkJCQkweDAwMDAxQzAwCVhDSEFMX1NFUCBcCi0JCQkJCTB4MDAwMDAwMDAKLQotLyogIEludGVycnVwdHMgYXNzaWduZWQgdG8gZWFjaCB0aW1lciAoQ0NPTVBBUkUwIHRvIENDT01QQVJFMyksIC0xIGlmIHVuYXNzaWduZWQgICovCi0jZGVmaW5lIFhDSEFMX1RJTUVSMF9JTlRFUlJVUFQJMTAKLSNkZWZpbmUgWENIQUxfVElNRVIxX0lOVEVSUlVQVAkxMQotI2RlZmluZSBYQ0hBTF9USU1FUjJfSU5URVJSVVBUCTEyCi0jZGVmaW5lIFhDSEFMX1RJTUVSM19JTlRFUlJVUFQJWFRIQUxfVElNRVJfVU5DT05GSUdVUkVECi0vKiAgQXMgYW4gYXJyYXkgb2YgZW50cmllcyAoZWcuIGZvciBDIGNvbnN0YW50IGFycmF5cyk6ICAqLwotI2RlZmluZSBYQ0hBTF9USU1FUl9JTlRFUlJVUFRTCTEwCVhDSEFMX1NFUCBcCi0JCQkJMTEJWENIQUxfU0VQIFwKLQkJCQkxMglYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX1RJTUVSX1VOQ09ORklHVVJFRAotCi0vKiAgSW5kZXhpbmcgbWFjcm9zOiAgKi8KLSNkZWZpbmUgX1hDSEFMX0lOVExFVkVMX01BU0sobikJCVhDSEFMX0lOVExFVkVMICMjIG4gIyMgX01BU0sKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUxfTUFTSyhuKQkJX1hDSEFMX0lOVExFVkVMX01BU0sobikJCS8qIG4gPSAwIC4uIDE1ICovCi0jZGVmaW5lIF9YQ0hBTF9JTlRMRVZFTF9BTkRCRUxPV01BU0sobikJWENIQUxfSU5UTEVWRUwgIyMgbiAjIyBfQU5EQkVMT1dfTUFTSwotI2RlZmluZSBYQ0hBTF9JTlRMRVZFTF9BTkRCRUxPV19NQVNLKG4pCV9YQ0hBTF9JTlRMRVZFTF9BTkRCRUxPV01BU0sobikJLyogbiA9IDAgLi4gMTUgKi8KLSNkZWZpbmUgX1hDSEFMX0lOVF9MRVZFTChuKQkJWENIQUxfSU5UICMjIG4gIyMgX0xFVkVMCi0jZGVmaW5lIFhDSEFMX0lOVF9MRVZFTChuKQkJX1hDSEFMX0lOVF9MRVZFTChuKQkJLyogbiA9IDAgLi4gMzEgKi8KLSNkZWZpbmUgX1hDSEFMX0lOVF9UWVBFKG4pCQlYQ0hBTF9JTlQgIyMgbiAjIyBfVFlQRQotI2RlZmluZSBYQ0hBTF9JTlRfVFlQRShuKQkJX1hDSEFMX0lOVF9UWVBFKG4pCQkvKiBuID0gMCAuLiAzMSAqLwotI2RlZmluZSBfWENIQUxfVElNRVJfSU5URVJSVVBUKG4pCVhDSEFMX1RJTUVSICMjIG4gIyMgX0lOVEVSUlVQVAotI2RlZmluZSBYQ0hBTF9USU1FUl9JTlRFUlJVUFQobikJX1hDSEFMX1RJTUVSX0lOVEVSUlVQVChuKQkvKiBuID0gMCAuLiAzICovCi0KLQotCi0vKgotICogIEV4dGVybmFsIGludGVycnVwdCB2ZWN0b3JzL2xldmVscy4KLSAqICBUaGVzZSBtYWNyb3MgZGVzY3JpYmUgaG93IFh0ZW5zYSBwcm9jZXNzb3IgaW50ZXJydXB0IG51bWJlcnMKLSAqICAoYXMgbnVtYmVyZWQgaW50ZXJuYWxseSwgZWcuIGluIElOVEVSUlVQVCBhbmQgSU5URU5BQkxFIHJlZ2lzdGVycykKLSAqICBtYXAgdG8gZXh0ZXJuYWwgQkludGVycnVwdDxuPiBwaW5zLCBmb3IgdGhvc2UgaW50ZXJydXB0cwotICogIGNvbmZpZ3VyZWQgYXMgZXh0ZXJuYWwgKGxldmVsLXRyaWdnZXJlZCwgZWRnZS10cmlnZ2VyZWQsIG9yIE5NSSkuCi0gKiAgU2VlIHRoZSBYdGVuc2EgcHJvY2Vzc29yIGRhdGFib29rIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotLyogIENvcmUgaW50ZXJydXB0IG51bWJlcnMgbWFwcGVkIHRvIGVhY2ggRVhURVJOQUwgaW50ZXJydXB0IG51bWJlcjogICovCi0jZGVmaW5lIFhDSEFMX0VYVElOVDBfTlVNCQkwCS8qIChpbnRsZXZlbCAxKSAqLwotI2RlZmluZSBYQ0hBTF9FWFRJTlQxX05VTQkJMQkvKiAoaW50bGV2ZWwgMikgKi8KLSNkZWZpbmUgWENIQUxfRVhUSU5UMl9OVU0JCTIJLyogKGludGxldmVsIDMpICovCi0jZGVmaW5lIFhDSEFMX0VYVElOVDNfTlVNCQkzCS8qIChpbnRsZXZlbCAxKSAqLwotI2RlZmluZSBYQ0hBTF9FWFRJTlQ0X05VTQkJNAkvKiAoaW50bGV2ZWwgMSkgKi8KLSNkZWZpbmUgWENIQUxfRVhUSU5UNV9OVU0JCTUJLyogKGludGxldmVsIDEpICovCi0jZGVmaW5lIFhDSEFMX0VYVElOVDZfTlVNCQk2CS8qIChpbnRsZXZlbCAxKSAqLwotI2RlZmluZSBYQ0hBTF9FWFRJTlQ3X05VTQkJNwkvKiAoaW50bGV2ZWwgMSkgKi8KLSNkZWZpbmUgWENIQUxfRVhUSU5UOF9OVU0JCTgJLyogKGludGxldmVsIDIpICovCi0jZGVmaW5lIFhDSEFMX0VYVElOVDlfTlVNCQk5CS8qIChpbnRsZXZlbCAzKSAqLwotCi0vKiAgQ29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgbWFza3M6ICAqLwotI2RlZmluZSBYQ0hBTF9FWFRJTlQwX01BU0sJCTB4MDAwMDAwMDEKLSNkZWZpbmUgWENIQUxfRVhUSU5UMV9NQVNLCQkweDAwMDAwMDAyCi0jZGVmaW5lIFhDSEFMX0VYVElOVDJfTUFTSwkJMHgwMDAwMDAwNAotI2RlZmluZSBYQ0hBTF9FWFRJTlQzX01BU0sJCTB4MDAwMDAwMDgKLSNkZWZpbmUgWENIQUxfRVhUSU5UNF9NQVNLCQkweDAwMDAwMDEwCi0jZGVmaW5lIFhDSEFMX0VYVElOVDVfTUFTSwkJMHgwMDAwMDAyMAotI2RlZmluZSBYQ0hBTF9FWFRJTlQ2X01BU0sJCTB4MDAwMDAwNDAKLSNkZWZpbmUgWENIQUxfRVhUSU5UN19NQVNLCQkweDAwMDAwMDgwCi0jZGVmaW5lIFhDSEFMX0VYVElOVDhfTUFTSwkJMHgwMDAwMDEwMAotI2RlZmluZSBYQ0hBTF9FWFRJTlQ5X01BU0sJCTB4MDAwMDAyMDAKLQotLyogIENvcmUgY29uZmlnIGludGVycnVwdCBsZXZlbHMgbWFwcGVkIHRvIGVhY2ggZXh0ZXJuYWwgaW50ZXJydXB0OiAgKi8KLSNkZWZpbmUgWENIQUxfRVhUSU5UMF9MRVZFTAkJMQkvKiAoaW50IG51bWJlciAwKSAqLwotI2RlZmluZSBYQ0hBTF9FWFRJTlQxX0xFVkVMCQkyCS8qIChpbnQgbnVtYmVyIDEpICovCi0jZGVmaW5lIFhDSEFMX0VYVElOVDJfTEVWRUwJCTMJLyogKGludCBudW1iZXIgMikgKi8KLSNkZWZpbmUgWENIQUxfRVhUSU5UM19MRVZFTAkJMQkvKiAoaW50IG51bWJlciAzKSAqLwotI2RlZmluZSBYQ0hBTF9FWFRJTlQ0X0xFVkVMCQkxCS8qIChpbnQgbnVtYmVyIDQpICovCi0jZGVmaW5lIFhDSEFMX0VYVElOVDVfTEVWRUwJCTEJLyogKGludCBudW1iZXIgNSkgKi8KLSNkZWZpbmUgWENIQUxfRVhUSU5UNl9MRVZFTAkJMQkvKiAoaW50IG51bWJlciA2KSAqLwotI2RlZmluZSBYQ0hBTF9FWFRJTlQ3X0xFVkVMCQkxCS8qIChpbnQgbnVtYmVyIDcpICovCi0jZGVmaW5lIFhDSEFMX0VYVElOVDhfTEVWRUwJCTIJLyogKGludCBudW1iZXIgOCkgKi8KLSNkZWZpbmUgWENIQUxfRVhUSU5UOV9MRVZFTAkJMwkvKiAoaW50IG51bWJlciA5KSAqLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJRVhDRVBUSU9OUyBhbmQgVkVDVE9SUwotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBYQ0hBTF9IQVZFX0VYQ0VQVElPTlMJCTEJLyogMSBpZiBleGNlcHRpb24gb3B0aW9uIGNvbmZpZ3VyZWQsIDAgb3RoZXJ3aXNlICovCi0KLSNkZWZpbmUgWENIQUxfWEVBX1ZFUlNJT04JCTIJLyogWHRlbnNhIEV4Y2VwdGlvbiBBcmNoaXRlY3R1cmUgbnVtYmVyOiAxIGZvciBYRUExIChvbGQpLCAyIGZvciBYRUEyIChuZXcpICovCi0jZGVmaW5lIFhDSEFMX0hBVkVfWEVBMQkJCTAJLyogMSBpZiBYRUExLCAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX1hFQTIJCQkxCS8qIDEgaWYgWEVBMiwgMCBvdGhlcndpc2UgKi8KLS8qICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBPTkxZIC0tIERPIE5PVCBVU0UgKHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZSk6ICAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX09MRF9FWENfQVJDSAkJWENIQUxfSEFWRV9YRUExCS8qIChERVBSRUNBVEVEKSAxIGlmIG9sZCBleGNlcHRpb24gYXJjaGl0ZWN0dXJlIChYRUExKSwgMCBvdGhlcndpc2UgKGVnLiBYRUEyKSAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX0VYQ00JCQlYQ0hBTF9IQVZFX1hFQTIJLyogKERFUFJFQ0FURUQpIDEgaWYgUFMuRVhDTSBiaXQgZXhpc3RzIChjdXJyZW50bHkgZXF1YWxzIFhDSEFMX0hBVkVfVExCUykgKi8KLQotI2RlZmluZSBYQ0hBTF9SRVNFVF9WRUNUT1JfVkFERFIJMHhGRTAwMDAyMAotI2RlZmluZSBYQ0hBTF9SRVNFVF9WRUNUT1JfUEFERFIJMHhGRTAwMDAyMAotI2RlZmluZSBYQ0hBTF9VU0VSX1ZFQ1RPUl9WQUREUgkJMHhEMDAwMDIyMAotI2RlZmluZSBYQ0hBTF9QUk9HUkFNRVhDX1ZFQ1RPUl9WQUREUglYQ0hBTF9VU0VSX1ZFQ1RPUl9WQUREUgkJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgWENIQUxfVVNFUkVYQ19WRUNUT1JfVkFERFIJWENIQUxfVVNFUl9WRUNUT1JfVkFERFIJCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIFhDSEFMX1VTRVJfVkVDVE9SX1BBRERSCQkweDAwMDAwMjIwCi0jZGVmaW5lIFhDSEFMX1BST0dSQU1FWENfVkVDVE9SX1BBRERSCVhDSEFMX1VTRVJfVkVDVE9SX1BBRERSCQkvKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSBYQ0hBTF9VU0VSRVhDX1ZFQ1RPUl9QQUREUglYQ0hBTF9VU0VSX1ZFQ1RPUl9QQUREUgkJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgWENIQUxfS0VSTkVMX1ZFQ1RPUl9WQUREUgkweEQwMDAwMjAwCi0jZGVmaW5lIFhDSEFMX1NUQUNLRURFWENfVkVDVE9SX1ZBRERSCVhDSEFMX0tFUk5FTF9WRUNUT1JfVkFERFIJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgWENIQUxfS0VSTkVMRVhDX1ZFQ1RPUl9WQUREUglYQ0hBTF9LRVJORUxfVkVDVE9SX1ZBRERSCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIFhDSEFMX0tFUk5FTF9WRUNUT1JfUEFERFIJMHgwMDAwMDIwMAotI2RlZmluZSBYQ0hBTF9TVEFDS0VERVhDX1ZFQ1RPUl9QQUREUglYQ0hBTF9LRVJORUxfVkVDVE9SX1BBRERSCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIFhDSEFMX0tFUk5FTEVYQ19WRUNUT1JfUEFERFIJWENIQUxfS0VSTkVMX1ZFQ1RPUl9QQUREUgkvKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSBYQ0hBTF9ET1VCTEVFWENfVkVDVE9SX1ZBRERSCTB4RDAwMDAyOTAKLSNkZWZpbmUgWENIQUxfRE9VQkxFRVhDX1ZFQ1RPUl9QQUREUgkweDAwMDAwMjkwCi0jZGVmaW5lIFhDSEFMX1dJTkRPV19WRUNUT1JTX1ZBRERSCTB4RDAwMDAwMDAKLSNkZWZpbmUgWENIQUxfV0lORE9XX1ZFQ1RPUlNfUEFERFIJMHgwMDAwMDAwMAotI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDJfVkVDVE9SX1ZBRERSCTB4RDAwMDAyNDAKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX1ZFQ1RPUl9QQUREUgkweDAwMDAwMjQwCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMM19WRUNUT1JfVkFERFIJMHhEMDAwMDI1MAotI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfVkVDVE9SX1BBRERSCTB4MDAwMDAyNTAKLSNkZWZpbmUgWENIQUxfSU5UTEVWRUw0X1ZFQ1RPUl9WQUREUgkweEZFMDAwNTIwCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9WRUNUT1JfUEFERFIJMHhGRTAwMDUyMAotI2RlZmluZSBYQ0hBTF9ERUJVR19WRUNUT1JfVkFERFIJWENIQUxfSU5UTEVWRUw0X1ZFQ1RPUl9WQUREUgotI2RlZmluZSBYQ0hBTF9ERUJVR19WRUNUT1JfUEFERFIJWENIQUxfSU5UTEVWRUw0X1ZFQ1RPUl9QQUREUgotCi0vKiAgSW5kZXhpbmcgbWFjcm9zOiAgKi8KLSNkZWZpbmUgX1hDSEFMX0lOVExFVkVMX1ZFQ1RPUl9WQUREUihuKQkJWENIQUxfSU5UTEVWRUwgIyMgbiAjIyBfVkVDVE9SX1ZBRERSCi0jZGVmaW5lIFhDSEFMX0lOVExFVkVMX1ZFQ1RPUl9WQUREUihuKQkJX1hDSEFMX0lOVExFVkVMX1ZFQ1RPUl9WQUREUihuKQkJLyogbiA9IDAgLi4gMTUgKi8KLQotLyoKLSAqICBHZW5lcmFsIEV4Y2VwdGlvbiBDYXVzZXMKLSAqICAodmFsdWVzIG9mIEVYQ0NBVVNFIHNwZWNpYWwgcmVnaXN0ZXIgc2V0IGJ5IGdlbmVyYWwgZXhjZXB0aW9ucywKLSAqICAgd2hpY2ggdmVjdG9yIHRvIHRoZSB1c2VyLCBrZXJuZWwsIG9yIGRvdWJsZS1leGNlcHRpb24gdmVjdG9ycyk6Ci0gKi8KLSNkZWZpbmUgWENIQUxfRVhDQ0FVU0VfSUxMRUdBTF9JTlNUUlVDVElPTgkJMAkvKiBJbGxlZ2FsIEluc3RydWN0aW9uIChJbGxlZ2FsSW5zdHJ1Y3Rpb24pICovCi0jZGVmaW5lIFhDSEFMX0VYQ0NBVVNFX1NZU1RFTV9DQUxMCQkJMQkvKiBTeXN0ZW0gQ2FsbCAoU3lzdGVtQ2FsbCkgKi8KLSNkZWZpbmUgWENIQUxfRVhDQ0FVU0VfSU5TVFJVQ1RJT05fRkVUQ0hfRVJST1IJCTIJLyogSW5zdHJ1Y3Rpb24gRmV0Y2ggRXJyb3IgKEluc3RydWN0aW9uRmV0Y2hFcnJvcikgKi8KLSNkZWZpbmUgWENIQUxfRVhDQ0FVU0VfTE9BRF9TVE9SRV9FUlJPUgkJCTMJLyogTG9hZCBTdG9yZSBFcnJvciAoTG9hZFN0b3JlRXJyb3IpICovCi0jZGVmaW5lIFhDSEFMX0VYQ0NBVVNFX0xFVkVMMV9JTlRFUlJVUFQJCQk0CS8qIExldmVsIDEgSW50ZXJydXB0IChMZXZlbDFJbnRlcnJ1cHQpICovCi0jZGVmaW5lIFhDSEFMX0VYQ0NBVVNFX0FMTE9DQQkJCQk1CS8qIFN0YWNrIEV4dGVuc2lvbiBBc3Npc3QgKEFsbG9jYSkgKi8KLSNkZWZpbmUgWENIQUxfRVhDQ0FVU0VfSU5URUdFUl9ESVZJREVfQllfWkVSTwkJNgkvKiBJbnRlZ2VyIERpdmlkZSBieSBaZXJvIChJbnRlZ2VyRGl2aWRlQnlaZXJvKSAqLwotI2RlZmluZSBYQ0hBTF9FWENDQVVTRV9TUEVDVUxBVElPTgkJCTcJLyogU3BlY3VsYXRpb24gKFNwZWN1bGF0aW9uKSAqLwotI2RlZmluZSBYQ0hBTF9FWENDQVVTRV9QUklWSUxFR0VECQkJOAkvKiBQcml2aWxlZ2VkIEluc3RydWN0aW9uIChQcml2aWxlZ2VkKSAqLwotI2RlZmluZSBYQ0hBTF9FWENDQVVTRV9VTkFMSUdORUQJCQk5CS8qIFVuYWxpZ25lZCBMb2FkIFN0b3JlIChVbmFsaWduZWQpICovCi0jZGVmaW5lIFhDSEFMX0VYQ0NBVVNFX0lUTEJfTUlTUwkJCTE2CS8qIElUbGIgTWlzcyBFeGNlcHRpb24gKElUbGJNaXNzKSAqLwotI2RlZmluZSBYQ0hBTF9FWENDQVVTRV9JVExCX01VTFRJSElUCQkJMTcJLyogSVRsYiBNdXRsdGloaXQgRXhjZXB0aW9uIChJVGxiTXVsdGloaXQpICovCi0jZGVmaW5lIFhDSEFMX0VYQ0NBVVNFX0lUTEJfUFJJVklMRUdFCQkJMTgJLyogSVRsYiBQcml2aWxlZ2UgRXhjZXB0aW9uIChJVGxiUHJpdmlsZWdlKSAqLwotI2RlZmluZSBYQ0hBTF9FWENDQVVTRV9JVExCX1NJWkVfUkVTVFJJQ1RJT04JCTE5CS8qIElUbGIgU2l6ZSBSZXN0cmljdGlvbiBFeGNlcHRpb24gKElUbGJTaXplUmVzdHJpY3Rpb24pICovCi0jZGVmaW5lIFhDSEFMX0VYQ0NBVVNFX0ZFVENIX0NBQ0hFX0FUVFJJQlVURQkJMjAJLyogRmV0Y2ggQ2FjaGUgQXR0cmlidXRlIEV4Y2VwdGlvbiAoRmV0Y2hDYWNoZUF0dHJpYnV0ZSkgKi8KLSNkZWZpbmUgWENIQUxfRVhDQ0FVU0VfRFRMQl9NSVNTCQkJMjQJLyogRFRsYiBNaXNzIEV4Y2VwdGlvbiAoRFRsYk1pc3MpICovCi0jZGVmaW5lIFhDSEFMX0VYQ0NBVVNFX0RUTEJfTVVMVElISVQJCQkyNQkvKiBEVGxiIE11bHRpaGl0IEV4Y2VwdGlvbiAoRFRsYk11bHRpaGl0KSAqLwotI2RlZmluZSBYQ0hBTF9FWENDQVVTRV9EVExCX1BSSVZJTEVHRQkJCTI2CS8qIERUbGIgUHJpdmlsZWdlIEV4Y2VwdGlvbiAoRFRsYlByaXZpbGVnZSkgKi8KLSNkZWZpbmUgWENIQUxfRVhDQ0FVU0VfRFRMQl9TSVpFX1JFU1RSSUNUSU9OCQkyNwkvKiBEVGxiIFNpemUgUmVzdHJpY3Rpb24gRXhjZXB0aW9uIChEVGxiU2l6ZVJlc3RyaWN0aW9uKSAqLwotI2RlZmluZSBYQ0hBTF9FWENDQVVTRV9MT0FEX0NBQ0hFX0FUVFJJQlVURQkJMjgJLyogTG9hZCBDYWNoZSBBdHRyaWJ1dGUgRXhjZXB0aW9uIChMb2FkQ2FjaGVBdHRyaWJ1dGUpICovCi0jZGVmaW5lIFhDSEFMX0VYQ0NBVVNFX1NUT1JFX0NBQ0hFX0FUVFJJQlVURQkJMjkJLyogU3RvcmUgQ2FjaGUgQXR0cmlidXRlIEV4Y2VwdGlvbiAoU3RvcmVDYWNoZUF0dHJpYnV0ZSkgKi8KLSNkZWZpbmUgWENIQUxfRVhDQ0FVU0VfRkxPQVRJTkdfUE9JTlQJCQk0MAkvKiBGbG9hdGluZyBQb2ludCBFeGNlcHRpb24gKEZsb2F0aW5nUG9pbnQpICovCi0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJCQlUSU1FUlMKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgWENIQUxfSEFWRV9DQ09VTlQJCTEJLyogMSBpZiBoYXZlIENDT1VOVCwgMCBvdGhlcndpc2UgKi8KLS8qI2RlZmluZSBYQ0hBTF9IQVZFX1RJTUVSUwkJWENIQUxfSEFWRV9DQ09VTlQqLwotI2RlZmluZSBYQ0hBTF9OVU1fVElNRVJTCQkzCS8qIG51bWJlciBvZiBDQ09NUEFSRW4gcmVncyAqLwotCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQkJREVCVUcKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgWENIQUxfSEFWRV9ERUJVRwkJMQkvKiAxIGlmIGRlYnVnIG9wdGlvbiBjb25maWd1cmVkLCAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX09DRAkJCTEJLyogMSBpZiBPbkNoaXBEZWJ1ZyBvcHRpb24gY29uZmlndXJlZCwgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfTlVNX0lCUkVBSwkJMgkvKiBudW1iZXIgb2YgSUJSRUFLbiByZWdzICovCi0jZGVmaW5lIFhDSEFMX05VTV9EQlJFQUsJCTIJLyogbnVtYmVyIG9mIERCUkVBS24gcmVncyAqLwotI2RlZmluZSBYQ0hBTF9ERUJVR0xFVkVMCQk0CS8qIGRlYnVnIGludGVycnVwdCBsZXZlbCAqLwotLypEZWJ1Z0V4dGVybmFsSW50ZXJydXB0CQkwCQkwfDEqLwotLypEZWJ1Z1VzZURJUkFycmF5CQkJMAkJMHwxKi8KLQotCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQlDT1BST0NFU1NPUlMgYW5kIEVYVFJBIFNUQVRFCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIFhDSEFMX0hBVkVfQ1AJCQkwCS8qIDEgaWYgY29wcm9jZXNzb3Igb3B0aW9uIGNvbmZpZ3VyZWQgKENQRU5BQkxFIHByZXNlbnQpICovCi0jZGVmaW5lIFhDSEFMX0NQX01BWENGRwkJCTAJLyogbWF4IGFsbG93ZWQgY3AgaWQgcGx1cyBvbmUgKHBlciBjZmcpICovCi0KLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL3RpZS5oPgotCi0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJCUlOVEVSTkFMIEkvRCBSQU0vUk9NcyBhbmQgWExNSQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBYQ0hBTF9OVU1fSU5TVFJPTQkJMAkvKiBudW1iZXIgb2YgY29yZSBpbnN0cnVjdGlvbiBST01zIGNvbmZpZ3VyZWQgKi8KLSNkZWZpbmUgWENIQUxfTlVNX0lOU1RSQU0JCTAJLyogbnVtYmVyIG9mIGNvcmUgaW5zdHJ1Y3Rpb24gUkFNcyBjb25maWd1cmVkICovCi0jZGVmaW5lIFhDSEFMX05VTV9EQVRBUk9NCQkwCS8qIG51bWJlciBvZiBjb3JlIGRhdGEgUk9NcyBjb25maWd1cmVkICovCi0jZGVmaW5lIFhDSEFMX05VTV9EQVRBUkFNCQkwCS8qIG51bWJlciBvZiBjb3JlIGRhdGEgUkFNcyBjb25maWd1cmVkICovCi0jZGVmaW5lIFhDSEFMX05VTV9YTE1JCQkJMAkvKiBudW1iZXIgb2YgY29yZSBYTE1JIHBvcnRzIGNvbmZpZ3VyZWQgKi8KLSNkZWZpbmUgIFhDSEFMX05VTV9JUk9NCQkJWENIQUxfTlVNX0lOU1RST00JLyogKERFUFJFQ0FURUQpICovCi0jZGVmaW5lICBYQ0hBTF9OVU1fSVJBTQkJCVhDSEFMX05VTV9JTlNUUkFNCS8qIChERVBSRUNBVEVEKSAqLwotI2RlZmluZSAgWENIQUxfTlVNX0RST00JCQlYQ0hBTF9OVU1fREFUQVJPTQkvKiAoREVQUkVDQVRFRCkgKi8KLSNkZWZpbmUgIFhDSEFMX05VTV9EUkFNCQkJWENIQUxfTlVNX0RBVEFSQU0JLyogKERFUFJFQ0FURUQpICovCi0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJCQlDQUNIRQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogIFNpemUgb2YgdGhlIGNhY2hlIGxpbmVzIGluIGxvZzIoYnl0ZXMpOiAgKi8KLSNkZWZpbmUgWENIQUxfSUNBQ0hFX0xJTkVXSURUSAkJNAotI2RlZmluZSBYQ0hBTF9EQ0FDSEVfTElORVdJRFRICQk0Ci0vKiAgU2l6ZSBvZiB0aGUgY2FjaGUgbGluZXMgaW4gYnl0ZXM6ICAqLwotI2RlZmluZSBYQ0hBTF9JQ0FDSEVfTElORVNJWkUJCTE2Ci0jZGVmaW5lIFhDSEFMX0RDQUNIRV9MSU5FU0laRQkJMTYKLS8qICBNYXggZm9yIGJvdGggSS1jYWNoZSBhbmQgRC1jYWNoZSAodXNlZCBmb3IgZ2VuZXJhbCBhbGlnbm1lbnQpOiAgKi8KLSNkZWZpbmUgWENIQUxfQ0FDSEVfTElORVdJRFRIX01BWAk0Ci0jZGVmaW5lIFhDSEFMX0NBQ0hFX0xJTkVTSVpFX01BWAkxNgotCi0vKiAgTnVtYmVyIG9mIGNhY2hlIHNldHMgaW4gbG9nMihsaW5lcyBwZXIgd2F5KTogICovCi0jZGVmaW5lIFhDSEFMX0lDQUNIRV9TRVRXSURUSAkJOAotI2RlZmluZSBYQ0hBTF9EQ0FDSEVfU0VUV0lEVEgJCTgKLS8qICBNYXggZm9yIGJvdGggSS1jYWNoZSBhbmQgRC1jYWNoZSAodXNlZCBmb3IgZ2VuZXJhbCBjYWNoZS1jb2hlcmVuY3kgcGFnZSBhbGlnbm1lbnQpOiAgKi8KLSNkZWZpbmUgWENIQUxfQ0FDSEVfU0VUV0lEVEhfTUFYCTgKLSNkZWZpbmUgWENIQUxfQ0FDSEVfU0VUU0laRV9NQVgJCTI1NgotCi0vKiAgQ2FjaGUgc2V0IGFzc29jaWF0aXZpdHkgKG51bWJlciBvZiB3YXlzKTogICovCi0jZGVmaW5lIFhDSEFMX0lDQUNIRV9XQVlTCQkyCi0jZGVmaW5lIFhDSEFMX0RDQUNIRV9XQVlTCQkyCi0KLS8qICBTaXplIG9mIHRoZSBjYWNoZXMgaW4gYnl0ZXMgKHdheXMgKiAyXihsaW5ld2lkdGggKyBzZXR3aWR0aCkpOiAgKi8KLSNkZWZpbmUgWENIQUxfSUNBQ0hFX1NJWkUJCTgxOTIKLSNkZWZpbmUgWENIQUxfRENBQ0hFX1NJWkUJCTgxOTIKLQotLyogIENhY2hlIGZlYXR1cmVzOiAgKi8KLSNkZWZpbmUgWENIQUxfRENBQ0hFX0lTX1dSSVRFQkFDSwkwCi0vKiAgV2hldGhlciBjYWNoZSBsb2NraW5nIGZlYXR1cmUgaXMgYXZhaWxhYmxlOiAgKi8KLSNkZWZpbmUgWENIQUxfSUNBQ0hFX0xJTkVfTE9DS0FCTEUJMAotI2RlZmluZSBYQ0hBTF9EQ0FDSEVfTElORV9MT0NLQUJMRQkwCi0KLS8qICBOdW1iZXIgb2YgKGVuY29kZWQpIGNhY2hlIGF0dHJpYnV0ZSBiaXRzOiAgKi8KLSNkZWZpbmUgWENIQUxfQ0FfQklUUwkJCTQJLyogbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIGhvbGQgY2FjaGUgYXR0cmlidXRlIGVuY29kaW5nICovCi0vKiAgKFRoZSBudW1iZXIgb2YgYWNjZXNzIG1vZGUgYml0cyAoZGVjb2RlZCBjYWNoZSBhdHRyaWJ1dGUgYml0cykgaXMgZGVmaW5lZCBieSB0aGUgYXJjaGl0ZWN0dXJlOyBzZWUgeHRlbnNhL2hhbC5oPykgICovCi0KLQotLyogIENhY2hlIEF0dHJpYnV0ZSBlbmNvZGluZ3MgLS0gbGlzdHMgb2YgYWNjZXNzIG1vZGVzIGZvciBlYWNoIGNhY2hlIGF0dHJpYnV0ZTogICovCi0jZGVmaW5lIFhDSEFMX0ZDQV9MSVNUCQlYVEhBTF9GQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfRkFNX0JZUEFTUwlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0ZBTV9FWENFUFRJT04JWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9GQU1fQllQQVNTCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfRkFNX0VYQ0VQVElPTglYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0ZBTV9DQUNIRUQJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9GQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfRkFNX0NBQ0hFRAlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0ZBTV9FWENFUFRJT04JWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9GQU1fQ0FDSEVECVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfRkFNX0VYQ0VQVElPTglYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0ZBTV9DQUNIRUQJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9GQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfRkFNX0VYQ0VQVElPTglYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0ZBTV9FWENFUFRJT04JWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9GQU1fRVhDRVBUSU9OCi0jZGVmaW5lIFhDSEFMX0xDQV9MSVNUCQlYVEhBTF9MQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfTEFNX0JZUEFTU0cJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9MQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfTEFNX0JZUEFTU0cJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9MQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfTEFNX0NBQ0hFRAlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0xBTV9FWENFUFRJT04JWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9MQU1fQ0FDSEVECVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfTEFNX0VYQ0VQVElPTglYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0xBTV9OQUNBQ0hFRAlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX0xBTV9FWENFUFRJT04JWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9MQU1fTkFDQUNIRUQJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9MQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfTEFNX0lTT0xBVEUJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9MQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfTEFNX0NBQ0hFRAotI2RlZmluZSBYQ0hBTF9TQ0FfTElTVAkJWFRIQUxfU0FNX0VYQ0VQVElPTglYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX1NBTV9FWENFUFRJT04JWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9TQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfU0FNX0JZUEFTUwlYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX1NBTV9FWENFUFRJT04JWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9TQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfU0FNX0VYQ0VQVElPTglYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX1NBTV9XUklURVRIUlUJWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9TQU1fRVhDRVBUSU9OCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfU0FNX0VYQ0VQVElPTglYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX1NBTV9FWENFUFRJT04JWENIQUxfU0VQIFwKLQkJCQlYVEhBTF9TQU1fV1JJVEVUSFJVCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfU0FNX0VYQ0VQVElPTglYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX1NBTV9JU09MQVRFCVhDSEFMX1NFUCBcCi0JCQkJWFRIQUxfU0FNX0VYQ0VQVElPTglYQ0hBTF9TRVAgXAotCQkJCVhUSEFMX1NBTV9XUklURVRIUlUKLQotLyogIFRlc3Q6Ci0JcmVhZC9vbmx5OiAwICsgMSArIDIgKyA0ICsgNSArIDYgKyA4ICsgOSArIDEwICsgMTIgKyAxNAotCXJlYWQvb25seTogMCArIDEgKyAyICsgNCArIDUgKyA2ICsgOCArIDkgKyAxMCArIDEyICsgMTQKLQlhbGw6ICAgICAgIDAgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3ICsgOCArIDkgKyAxMCArIDExICsgMTIgKyAxMyArIDE0ICsgMTUKLQlmYXVsdDogICAgIDAgKyAyICsgNCArIDYgKyA4ICsgMTAgKyAxMiArIDE0Ci0Jci93L3ggY2FjaGVkOgotCXIvdy94IGRjYWNoZWQ6Ci0JSS1ieXBhc3M6ICAxICsgMwotCi0JbG9hZCBndWFyZCBiaXQgc2V0OiAxICsgMwotCWxvYWQgZ3VhcmQgYml0IGNscjogMCArIDIgKyA0ICsgNSArIDYgKyA3ICsgOCArIDkgKyAxMCArIDExICsgMTIgKyAxMyArIDE0ICsgMTUKLQloaXQtY2FjaGUgci93L3g6IDcgKyAxMQotCi0JZmFtczogNQotCWZhbXM6IDAgLyA2IC8gMTggLyAxIC8gMgotCWZhbXM6IEJ5cGFzcyAvIElzb2xhdGUgLyBDYWNoZWQgLyBFeGNlcHRpb24gLyBOQUNhY2hlZAotCi0gICAgICAgIE1NVSBva2F5OiAgeWVzCi0qLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJCU1NVQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqICBHZW5lcmFsIG5vdGVzIG9uIE1NVSBwYXJhbWV0ZXJzLgotICoKLSAqICBUZXJtaW5vbG9neToKLSAqCUFTSUQgPSBhZGRyZXNzLXNwYWNlIElEIChhY3RzIGFzIGFuICJleHRlbnNpb24iIG9mIHZpcnR1YWwgYWRkcmVzc2VzKQotICoJVlBOICA9IHZpcnR1YWwgcGFnZSBudW1iZXIKLSAqCVBQTiAgPSBwaHlzaWNhbCBwYWdlIG51bWJlcgotICoJQ0EgICA9IGVuY29kZWQgY2FjaGUgYXR0cmlidXRlIChhY2Nlc3MgbW9kZXMpCi0gKglUTEIgID0gdHJhbnNsYXRpb24gbG9vay1hc2lkZSBidWZmZXIgKHRlcm0gaXMgc3RyZXRjaGVkIHNvbWV3aGF0IGhlcmUpCi0gKglJICAgID0gaW5zdHJ1Y3Rpb24gKGZldGNoIGFjY2Vzc2VzKQotICoJRCAgICA9IGRhdGEgKGxvYWQgYW5kIHN0b3JlIGFjY2Vzc2VzKQotICoJd2F5ICA9IGVhY2ggVExCIChJVExCIGFuZCBEVExCKSBjb25zaXN0cyBvZiBhIG51bWJlciBvZiAid2F5cyIKLSAqCQl0aGF0IHNpbXVsdGFuZW91c2x5IG1hdGNoIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgYW4gYWNjZXNzOwotICoJCWEgVExCIHN1Y2Nlc3NmdWxseSB0cmFuc2xhdGVzIGEgdmlydHVhbCBhZGRyZXNzIGlmIGV4YWN0bHkKLSAqCQlvbmUgd2F5IG1hdGNoZXMgdGhlIHZhZGRyOyBpZiBub25lIG1hdGNoLCBpdCBpcyBhIG1pc3M7Ci0gKgkJaWYgbXVsdGlwbGUgbWF0Y2gsIG9uZSBnZXRzIGEgIm11bHRpaGl0IiBleGNlcHRpb247Ci0gKgkJZWFjaCB3YXkgY2FuIGJlIGluZGVwZW5kZW50bHkgY29uZmlndXJlZCBpbiB0ZXJtcyBvZiBudW1iZXIgb2YKLSAqCQllbnRyaWVzLCBwYWdlIHNpemVzLCB3aGljaCBmaWVsZHMgYXJlIHdyaXRhYmxlIG9yIGNvbnN0YW50LCBldGMuCi0gKglzZXQgID0gZ3JvdXAgb2YgY29udGlndW91cyB3YXlzIHdpdGggZXhhY3RseSBpZGVudGljYWwgcGFyYW1ldGVycwotICoJQVJGICA9IGF1dG8tcmVmaWxsOyBoYXJkd2FyZSBzZXJ2aWNlcyBhIDFzdC1sZXZlbCBtaXNzIGJ5IGxvYWRpbmcgYSBQVEUKLSAqCQlmcm9tIHRoZSBwYWdlIHRhYmxlIGFuZCBzdG9yaW5nIGl0IGluIG9uZSBvZiB0aGUgYXV0by1yZWZpbGwgd2F5czsKLSAqCQlpZiB0aGlzIFBURSBsb2FkIGFsc28gbWlzc2VzLCBhIG1pc3MgZXhjZXB0aW9uIGlzIHBvc3RlZCBmb3Igcy93LgotICoJbWluLXdpcmVkID0gYSAibWluLXdpcmVkIiB3YXkgY2FuIGJlIHVzZWQgdG8gbWFwIGEgc2luZ2xlIChtaW5pbXVtLXNpemVkKQotICogCQlwYWdlIGFyYml0cmFyaWx5IHVuZGVyIHByb2dyYW0gY29udHJvbDsgaXQgaGFzIGEgc2luZ2xlIGVudHJ5LAotICoJCWlzIG5vbi1hdXRvLXJlZmlsbCAoc29tZSBvdGhlciB3YXkocykgbXVzdCBiZSBhdXRvLXJlZmlsbCksCi0gKgkJYWxsIGl0cyBmaWVsZHMgKFZQTiwgUFBOLCBBU0lELCBDQSkgYXJlIGFsbCB3cml0YWJsZSwgYW5kIGl0Ci0gKgkJc3VwcG9ydHMgdGhlIFhDSEFMX01NVV9NSU5fUFRFX1BBR0VfU0laRSBwYWdlIHNpemUgKGEgY3VycmVudAotICoJCXJlc3RyaWN0aW9uIGlzIHRoYXQgdGhpcyBiZSB0aGUgb25seSBwYWdlIHNpemUgaXQgc3VwcG9ydHMpLgotICoKLSAqICBUTEIgd2F5IGVudHJpZXMgYXJlIHZpcnR1YWxseSBpbmRleGVkLgotICogIFRMQiB3YXlzIHRoYXQgc3VwcG9ydCBtdWx0aXBsZSBwYWdlIHNpemVzOgotICoJLSBtdXN0IGhhdmUgYWxsIHdyaXRhYmxlIFZQTiBhbmQgUFBOIGZpZWxkczsKLSAqCS0gY2FuIG9ubHkgdXNlIG9uZSBwYWdlIHNpemUgYXQgYW55IGdpdmVuIHRpbWUgKGVnLiBzZXR1cCBhdCBzdGFydHVwKSwKLSAqCSAgc2VsZWN0ZWQgYnkgdGhlIHJlc3BlY3RpdmUgSVRMQkNGRyBvciBEVExCQ0ZHIHNwZWNpYWwgcmVnaXN0ZXIsCi0gKgkgIHdob3NlIGJpdHMgbio0KzMgLi4gbio0IGluZGV4IHRoZSBsaXN0IG9mIHBhZ2Ugc2l6ZXMgZm9yIHdheSBuCi0gKgkgIChYQ0hBTF94VExCX1NFVG1fUEFHRVNaX0xPRzJfTElTVCBmb3Igc2V0IG0gY29ycmVzcG9uZGluZyB0byB3YXkgbik7Ci0gKgkgIHRoaXMgbGlzdCBtYXkgYmUgc3BhcnNlIGZvciBhdXRvLXJlZmlsbCB3YXlzIGJlY2F1c2UgYXV0by1yZWZpbGwKLSAqCSAgd2F5cyBoYXZlIGluZGVwZW5kZW50IGxpc3RzIG9mIHN1cHBvcnRlZCBwYWdlIHNpemVzIHNoYXJpbmcgYQotICoJICBjb21tb24gZW5jb2Rpbmcgd2l0aCBQVEUgZW50cmllczsgdGhlIGVuY29kaW5nIGlzIHRoZSBpbmRleCBpbnRvCi0gKgkgIHRoaXMgbGlzdDsgdW5zdXBwb3J0ZWQgc2l6ZXMgZm9yIGEgZ2l2ZW4gd2F5IGFyZSB6ZXJvIGluIHRoZSBsaXN0OwotICoJICBzZWxlY3RpbmcgdW5zdXBwb3J0ZWQgc2l6ZXMgcmVzdWx0cyBpbiB1bmRlZmluZWQgaGFyZHdhcmUgYmVoYXZpb3VyOwotICoJLSBpcyBvbmx5IHBvc3NpYmxlIGZvciB3YXlzIDAgdGhydSA3IChkdWUgdG8gSVRMQkNGRy9EVExCQ0ZHIGRlZmluaXRpb24pLgotICovCi0KLSNkZWZpbmUgWENIQUxfSEFWRV9DQUNIRUFUVFIJCTAJLyogMSBpZiBDQUNIRUFUVFIgcmVnaXN0ZXIgcHJlc2VudCwgMCBpZiBUTEJzIHByZXNlbnQgaW5zdGVhZCAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX1RMQlMJCQkxCS8qIDEgaWYgVExCcyBwcmVzZW50LCAwIGlmIENBQ0hFQVRUUiBwcmVzZW50IGluc3RlYWQgKi8KLSNkZWZpbmUgWENIQUxfSEFWRV9NTVUJCQlYQ0hBTF9IQVZFX1RMQlMJLyogKERFUFJFQ0FURUQ7IHVzZSBYQ0hBTF9IQVZFX1RMQlMgaW5zdGVhZDsgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlKSAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX1NQQU5OSU5HX1dBWQkJMAkvKiAxIGlmIHNpbmdsZSB3YXkgbWFwcyBlbnRpcmUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIGluIEkrRCAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX0lERU5USVRZX01BUAkJMAkvKiAxIGlmIHZpcnR1YWwgYWRkciA9PSBwaHlzaWNhbCBhZGRyIGFsd2F5cywgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfSEFWRV9NSU1JQ19DQUNIRUFUVFIJMAkvKiAxIGlmIGhhdmUgTU1VIHRoYXQgbWltaWNzIGEgQ0FDSEVBVFRSIGNvbmZpZyAoQ2FNTVUpICovCi0jZGVmaW5lIFhDSEFMX0hBVkVfWExUX0NBQ0hFQVRUUgkwCS8qIDEgaWYgaGF2ZSBNTVUgdGhhdCBtaW1pY3MgYSBDQUNIRUFUVFIgY29uZmlnLCBidXQgd2l0aCB0cmFuc2xhdGlvbiAoQ2FYbHRNTVUpICovCi0KLSNkZWZpbmUgWENIQUxfTU1VX0FTSURfQklUUwkJOAkvKiBudW1iZXIgb2YgYml0cyBpbiBBU0lEcyAoYWRkcmVzcyBzcGFjZSBJRHMpICovCi0jZGVmaW5lIFhDSEFMX01NVV9BU0lEX0lOVkFMSUQJCTAJLyogQVNJRCB2YWx1ZSBpbmRpY2F0aW5nIGludmFsaWQgYWRkcmVzcyBzcGFjZSAqLwotI2RlZmluZSBYQ0hBTF9NTVVfQVNJRF9LRVJORUwJCTEJLyogQVNJRCB2YWx1ZSBpbmRpY2F0aW5nIGtlcm5lbCAocmluZyAwKSBhZGRyZXNzIHNwYWNlICovCi0jZGVmaW5lIFhDSEFMX01NVV9SSU5HUwkJCTQJLyogbnVtYmVyIG9mIHJpbmdzIHN1cHBvcnRlZCAoMS4uNCkgKi8KLSNkZWZpbmUgWENIQUxfTU1VX1JJTkdfQklUUwkJMgkvKiBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gaG9sZCByaW5nIG51bWJlciAqLwotI2RlZmluZSBYQ0hBTF9NTVVfU1JfQklUUwkJMAkvKiBudW1iZXIgb2Ygc2l6ZS1yZXN0cmljdGlvbiBiaXRzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBYQ0hBTF9NTVVfQ0FfQklUUwkJNAkvKiBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gaG9sZCBjYWNoZSBhdHRyaWJ1dGUgZW5jb2RpbmcgKi8KLSNkZWZpbmUgWENIQUxfTU1VX01BWF9QVEVfUEFHRV9TSVpFCTEyCS8qIG1heCBwYWdlIHNpemUgaW4gYSBQVEUgc3RydWN0dXJlIChsb2cyKSAqLwotI2RlZmluZSBYQ0hBTF9NTVVfTUlOX1BURV9QQUdFX1NJWkUJMTIJLyogbWluIHBhZ2Ugc2l6ZSBpbiBhIFBURSBzdHJ1Y3R1cmUgKGxvZzIpICovCi0KLQotLyoqKiAgSW5zdHJ1Y3Rpb24gVExCOiAgKioqLwotCi0jZGVmaW5lIFhDSEFMX0lUTEJfV0FZX0JJVFMJCTMJLyogbnVtYmVyIG9mIGJpdHMgaG9sZGluZyB0aGUgd2F5cyAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1dBWVMJCQk3CS8qIG51bWJlciBvZiB3YXlzIChuLXdheSBzZXQtYXNzb2NpYXRpdmUgVExCKSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX0FSRl9XQVlTCQk0CS8qIG51bWJlciBvZiBhdXRvLXJlZmlsbCB3YXlzICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUUwkJCTQJLyogbnVtYmVyIG9mIHNldHMgKGdyb3VwcyBvZiB3YXlzIHdpdGggaWRlbnRpY2FsIHNldHRpbmdzKSAqLwotCi0vKiAgV2F5IHNldCB0byB3aGljaCBlYWNoIHdheSBiZWxvbmdzOiAgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9XQVkwX1NFVAkJMAotI2RlZmluZSBYQ0hBTF9JVExCX1dBWTFfU0VUCQkwCi0jZGVmaW5lIFhDSEFMX0lUTEJfV0FZMl9TRVQJCTAKLSNkZWZpbmUgWENIQUxfSVRMQl9XQVkzX1NFVAkJMAotI2RlZmluZSBYQ0hBTF9JVExCX1dBWTRfU0VUCQkxCi0jZGVmaW5lIFhDSEFMX0lUTEJfV0FZNV9TRVQJCTIKLSNkZWZpbmUgWENIQUxfSVRMQl9XQVk2X1NFVAkJMwotCi0vKiAgV2F5cyBzZXRzIHRoYXQgYXJlIHVzZWQgYnkgaGFyZHdhcmUgYXV0by1yZWZpbGwgKEFSRik6ICAqLwotI2RlZmluZSBYQ0hBTF9JVExCX0FSRl9TRVRTCQkxCS8qIG51bWJlciBvZiBhdXRvLXJlZmlsbCBzZXRzICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfQVJGX1NFVDAJCTAJLyogaW5kZXggb2Ygbid0aCBhdXRvLXJlZmlsbCBzZXQgKi8KLQotLyogIFdheSBzZXRzIHRoYXQgYXJlICJtaW4td2lyZWQiIChzZWUgdGVybWlub2xvZ3kgY29tbWVudCBhYm92ZSk6ICAqLwotI2RlZmluZSBYQ0hBTF9JVExCX01JTldJUkVEX1NFVFMJMAkvKiBudW1iZXIgb2YgIm1pbi13aXJlZCIgc2V0cyAqLwotCi0KLS8qICBJVExCIHdheSBzZXQgMCAoZ3JvdXAgb2Ygd2F5cyAwIHRocnUgMyk6ICAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDBfV0FZCQkJMAkvKiBpbmRleCBvZiBmaXJzdCB3YXkgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMF9XQVlTCQkJNAkvKiBudW1iZXIgb2YgKGNvbnRpZ3VvdXMpIHdheXMgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMF9FTlRSSUVTX0xPRzIJCTIJLyogbG9nMihudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIHdheSkgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQwX0VOVFJJRVMJCQk0CS8qIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgd2F5IChhbHdheXMgYSBwb3dlciBvZiAyKSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDBfQVJGCQkJMQkvKiAxPWF1dG9yZWZpbGwgYnkgaC93LCAwPW5vbi1hdXRvcmVmaWxsICh3aXJlZC9jb25zdGFudC9zdGF0aWMpICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMF9QQUdFU0laRVMJCTEJLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBwYWdlIHNpemVzIGluIHRoaXMgd2F5ICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMF9QQUdFU1pfQklUUwkJMAkvKiBudW1iZXIgb2YgYml0cyB0byBlbmNvZGUgdGhlIHBhZ2Ugc2l6ZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDBfUEFHRVNaX0xPRzJfTUlOCQkxMgkvKiBsb2cyKG1pbmltdW0gc3VwcG9ydGVkIHBhZ2Ugc2l6ZSkgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQwX1BBR0VTWl9MT0cyX01BWAkJMTIJLyogbG9nMihtYXhpbXVtIHN1cHBvcnRlZCBwYWdlIHNpemUpICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMF9QQUdFU1pfTE9HMl9MSVNUCTEyCS8qIGxpc3Qgb2YgbG9nMihwYWdlIHNpemUpcywgc2VwYXJhdGVkIGJ5IFhDSEFMX1NFUDsKLQkJCQkJCQkgICAyXlBBR0VTWl9CSVRTIGVudHJpZXMgaW4gbGlzdCwgdW5zdXBwb3J0ZWQgZW50cmllcyBhcmUgemVybyAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDBfQVNJRF9DT05TVE1BU0sJCTAJLyogY29uc3RhbnQgQVNJRCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDBfVlBOX0NPTlNUTUFTSwkJMAkvKiBjb25zdGFudCBWUE4gYml0cywgbm90IGluY2x1ZGluZyBlbnRyeSBpbmRleCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDBfUFBOX0NPTlNUTUFTSwkJMAkvKiBjb25zdGFudCBQUE4gYml0cywgaW5jbHVkaW5nIGVudHJ5IGluZGV4IGJpdHM7IDAgaWYgYWxsIHdyaXRhYmxlICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMF9DQV9DT05TVE1BU0sJCTAJLyogY29uc3RhbnQgQ0EgYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQwX0FTSURfUkVTRVQJCTAJLyogMSBpZiBBU0lEIHJlc2V0IHZhbHVlcyBkZWZpbmVkIChhbmQgYWxsIHdyaXRhYmxlKTsgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQwX1ZQTl9SRVNFVAkJMAkvKiAxIGlmIFZQTiByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMF9QUE5fUkVTRVQJCTAJLyogMSBpZiBQUE4gcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDBfQ0FfUkVTRVQJCTAJLyogMSBpZiBDQSByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0KLS8qICBJVExCIHdheSBzZXQgMSAoZ3JvdXAgb2Ygd2F5cyA0IHRocnUgNCk6ICAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDFfV0FZCQkJNAkvKiBpbmRleCBvZiBmaXJzdCB3YXkgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMV9XQVlTCQkJMQkvKiBudW1iZXIgb2YgKGNvbnRpZ3VvdXMpIHdheXMgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMV9FTlRSSUVTX0xPRzIJCTIJLyogbG9nMihudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIHdheSkgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQxX0VOVFJJRVMJCQk0CS8qIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgd2F5IChhbHdheXMgYSBwb3dlciBvZiAyKSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDFfQVJGCQkJMAkvKiAxPWF1dG9yZWZpbGwgYnkgaC93LCAwPW5vbi1hdXRvcmVmaWxsICh3aXJlZC9jb25zdGFudC9zdGF0aWMpICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMV9QQUdFU0laRVMJCTQJLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBwYWdlIHNpemVzIGluIHRoaXMgd2F5ICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMV9QQUdFU1pfQklUUwkJMgkvKiBudW1iZXIgb2YgYml0cyB0byBlbmNvZGUgdGhlIHBhZ2Ugc2l6ZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDFfUEFHRVNaX0xPRzJfTUlOCQkyMAkvKiBsb2cyKG1pbmltdW0gc3VwcG9ydGVkIHBhZ2Ugc2l6ZSkgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQxX1BBR0VTWl9MT0cyX01BWAkJMjYJLyogbG9nMihtYXhpbXVtIHN1cHBvcnRlZCBwYWdlIHNpemUpICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMV9QQUdFU1pfTE9HMl9MSVNUCTIwIFhDSEFMX1NFUCAyMiBYQ0hBTF9TRVAgMjQgWENIQUxfU0VQIDI2CS8qIGxpc3Qgb2YgbG9nMihwYWdlIHNpemUpcywgc2VwYXJhdGVkIGJ5IFhDSEFMX1NFUDsKLQkJCQkJCQkgICAyXlBBR0VTWl9CSVRTIGVudHJpZXMgaW4gbGlzdCwgdW5zdXBwb3J0ZWQgZW50cmllcyBhcmUgemVybyAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDFfQVNJRF9DT05TVE1BU0sJCTAJLyogY29uc3RhbnQgQVNJRCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDFfVlBOX0NPTlNUTUFTSwkJMAkvKiBjb25zdGFudCBWUE4gYml0cywgbm90IGluY2x1ZGluZyBlbnRyeSBpbmRleCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDFfUFBOX0NPTlNUTUFTSwkJMAkvKiBjb25zdGFudCBQUE4gYml0cywgaW5jbHVkaW5nIGVudHJ5IGluZGV4IGJpdHM7IDAgaWYgYWxsIHdyaXRhYmxlICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMV9DQV9DT05TVE1BU0sJCTAJLyogY29uc3RhbnQgQ0EgYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQxX0FTSURfUkVTRVQJCTAJLyogMSBpZiBBU0lEIHJlc2V0IHZhbHVlcyBkZWZpbmVkIChhbmQgYWxsIHdyaXRhYmxlKTsgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQxX1ZQTl9SRVNFVAkJMAkvKiAxIGlmIFZQTiByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMV9QUE5fUkVTRVQJCTAJLyogMSBpZiBQUE4gcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDFfQ0FfUkVTRVQJCTAJLyogMSBpZiBDQSByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0KLS8qICBJVExCIHdheSBzZXQgMiAoZ3JvdXAgb2Ygd2F5cyA1IHRocnUgNSk6ICAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDJfV0FZCQkJNQkvKiBpbmRleCBvZiBmaXJzdCB3YXkgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMl9XQVlTCQkJMQkvKiBudW1iZXIgb2YgKGNvbnRpZ3VvdXMpIHdheXMgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMl9FTlRSSUVTX0xPRzIJCTEJLyogbG9nMihudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIHdheSkgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQyX0VOVFJJRVMJCQkyCS8qIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgd2F5IChhbHdheXMgYSBwb3dlciBvZiAyKSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDJfQVJGCQkJMAkvKiAxPWF1dG9yZWZpbGwgYnkgaC93LCAwPW5vbi1hdXRvcmVmaWxsICh3aXJlZC9jb25zdGFudC9zdGF0aWMpICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMl9QQUdFU0laRVMJCTEJLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBwYWdlIHNpemVzIGluIHRoaXMgd2F5ICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMl9QQUdFU1pfQklUUwkJMAkvKiBudW1iZXIgb2YgYml0cyB0byBlbmNvZGUgdGhlIHBhZ2Ugc2l6ZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDJfUEFHRVNaX0xPRzJfTUlOCQkyNwkvKiBsb2cyKG1pbmltdW0gc3VwcG9ydGVkIHBhZ2Ugc2l6ZSkgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQyX1BBR0VTWl9MT0cyX01BWAkJMjcJLyogbG9nMihtYXhpbXVtIHN1cHBvcnRlZCBwYWdlIHNpemUpICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMl9QQUdFU1pfTE9HMl9MSVNUCTI3CS8qIGxpc3Qgb2YgbG9nMihwYWdlIHNpemUpcywgc2VwYXJhdGVkIGJ5IFhDSEFMX1NFUDsKLQkJCQkJCQkgICAyXlBBR0VTWl9CSVRTIGVudHJpZXMgaW4gbGlzdCwgdW5zdXBwb3J0ZWQgZW50cmllcyBhcmUgemVybyAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDJfQVNJRF9DT05TVE1BU0sJCTB4RkYJLyogY29uc3RhbnQgQVNJRCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDJfVlBOX0NPTlNUTUFTSwkJMHhGMDAwMDAwMAkvKiBjb25zdGFudCBWUE4gYml0cywgbm90IGluY2x1ZGluZyBlbnRyeSBpbmRleCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDJfUFBOX0NPTlNUTUFTSwkJMHhGODAwMDAwMAkvKiBjb25zdGFudCBQUE4gYml0cywgaW5jbHVkaW5nIGVudHJ5IGluZGV4IGJpdHM7IDAgaWYgYWxsIHdyaXRhYmxlICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMl9DQV9DT05TVE1BU0sJCTB4MDAwMDAwMEYJLyogY29uc3RhbnQgQ0EgYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQyX0FTSURfUkVTRVQJCTAJLyogMSBpZiBBU0lEIHJlc2V0IHZhbHVlcyBkZWZpbmVkIChhbmQgYWxsIHdyaXRhYmxlKTsgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQyX1ZQTl9SRVNFVAkJMAkvKiAxIGlmIFZQTiByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMl9QUE5fUkVTRVQJCTAJLyogMSBpZiBQUE4gcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDJfQ0FfUkVTRVQJCTAJLyogMSBpZiBDQSByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0vKiAgQ29uc3RhbnQgQVNJRCB2YWx1ZXMgZm9yIGVhY2ggZW50cnkgb2YgSVRMQiB3YXkgc2V0IDIgKGJlY2F1c2UgQVNJRF9DT05TVE1BU0sgaXMgbm9uLXplcm8pOiAgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQyX0UwX0FTSURfQ09OU1QJCTB4MDEKLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQyX0UxX0FTSURfQ09OU1QJCTB4MDEKLS8qICBDb25zdGFudCBWUE4gdmFsdWVzIGZvciBlYWNoIGVudHJ5IG9mIElUTEIgd2F5IHNldCAyIChiZWNhdXNlIFZQTl9DT05TVE1BU0sgaXMgbm9uLXplcm8pOiAgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQyX0UwX1ZQTl9DT05TVAkJMHhEMDAwMDAwMAotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDJfRTFfVlBOX0NPTlNUCQkweEQ4MDAwMDAwCi0vKiAgQ29uc3RhbnQgUFBOIHZhbHVlcyBmb3IgZWFjaCBlbnRyeSBvZiBJVExCIHdheSBzZXQgMiAoYmVjYXVzZSBQUE5fQ09OU1RNQVNLIGlzIG5vbi16ZXJvKTogICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMl9FMF9QUE5fQ09OU1QJCTB4MDAwMDAwMDAKLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQyX0UxX1BQTl9DT05TVAkJMHgwMDAwMDAwMAotLyogIENvbnN0YW50IENBIHZhbHVlcyBmb3IgZWFjaCBlbnRyeSBvZiBJVExCIHdheSBzZXQgMiAoYmVjYXVzZSBDQV9DT05TVE1BU0sgaXMgbm9uLXplcm8pOiAgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQyX0UwX0NBX0NPTlNUCQkweDA3Ci0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUMl9FMV9DQV9DT05TVAkJMHgwMwotCi0vKiAgSVRMQiB3YXkgc2V0IDMgKGdyb3VwIG9mIHdheXMgNiB0aHJ1IDYpOiAgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQzX1dBWQkJCTYJLyogaW5kZXggb2YgZmlyc3Qgd2F5IGluIHRoaXMgd2F5IHNldCAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDNfV0FZUwkJCTEJLyogbnVtYmVyIG9mIChjb250aWd1b3VzKSB3YXlzIGluIHRoaXMgd2F5IHNldCAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDNfRU5UUklFU19MT0cyCQkxCS8qIGxvZzIobnVtYmVyIG9mIGVudHJpZXMgaW4gdGhpcyB3YXkpICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUM19FTlRSSUVTCQkJMgkvKiBudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIHdheSAoYWx3YXlzIGEgcG93ZXIgb2YgMikgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQzX0FSRgkJCTAJLyogMT1hdXRvcmVmaWxsIGJ5IGgvdywgMD1ub24tYXV0b3JlZmlsbCAod2lyZWQvY29uc3RhbnQvc3RhdGljKSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDNfUEFHRVNJWkVTCQkxCS8qIG51bWJlciBvZiBzdXBwb3J0ZWQgcGFnZSBzaXplcyBpbiB0aGlzIHdheSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDNfUEFHRVNaX0JJVFMJCTAJLyogbnVtYmVyIG9mIGJpdHMgdG8gZW5jb2RlIHRoZSBwYWdlIHNpemUgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQzX1BBR0VTWl9MT0cyX01JTgkJMjgJLyogbG9nMihtaW5pbXVtIHN1cHBvcnRlZCBwYWdlIHNpemUpICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUM19QQUdFU1pfTE9HMl9NQVgJCTI4CS8qIGxvZzIobWF4aW11bSBzdXBwb3J0ZWQgcGFnZSBzaXplKSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDNfUEFHRVNaX0xPRzJfTElTVAkyOAkvKiBsaXN0IG9mIGxvZzIocGFnZSBzaXplKXMsIHNlcGFyYXRlZCBieSBYQ0hBTF9TRVA7Ci0JCQkJCQkJICAgMl5QQUdFU1pfQklUUyBlbnRyaWVzIGluIGxpc3QsIHVuc3VwcG9ydGVkIGVudHJpZXMgYXJlIHplcm8gKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQzX0FTSURfQ09OU1RNQVNLCQkweEZGCS8qIGNvbnN0YW50IEFTSUQgYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQzX1ZQTl9DT05TVE1BU0sJCTB4RTAwMDAwMDAJLyogY29uc3RhbnQgVlBOIGJpdHMsIG5vdCBpbmNsdWRpbmcgZW50cnkgaW5kZXggYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQzX1BQTl9DT05TVE1BU0sJCTB4RjAwMDAwMDAJLyogY29uc3RhbnQgUFBOIGJpdHMsIGluY2x1ZGluZyBlbnRyeSBpbmRleCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDNfQ0FfQ09OU1RNQVNLCQkweDAwMDAwMDBGCS8qIGNvbnN0YW50IENBIGJpdHM7IDAgaWYgYWxsIHdyaXRhYmxlICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUM19BU0lEX1JFU0VUCQkwCS8qIDEgaWYgQVNJRCByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUM19WUE5fUkVTRVQJCTAJLyogMSBpZiBWUE4gcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDNfUFBOX1JFU0VUCQkwCS8qIDEgaWYgUFBOIHJlc2V0IHZhbHVlcyBkZWZpbmVkIChhbmQgYWxsIHdyaXRhYmxlKTsgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQzX0NBX1JFU0VUCQkwCS8qIDEgaWYgQ0EgcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotLyogIENvbnN0YW50IEFTSUQgdmFsdWVzIGZvciBlYWNoIGVudHJ5IG9mIElUTEIgd2F5IHNldCAzIChiZWNhdXNlIEFTSURfQ09OU1RNQVNLIGlzIG5vbi16ZXJvKTogICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUM19FMF9BU0lEX0NPTlNUCQkweDAxCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUM19FMV9BU0lEX0NPTlNUCQkweDAxCi0vKiAgQ29uc3RhbnQgVlBOIHZhbHVlcyBmb3IgZWFjaCBlbnRyeSBvZiBJVExCIHdheSBzZXQgMyAoYmVjYXVzZSBWUE5fQ09OU1RNQVNLIGlzIG5vbi16ZXJvKTogICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUM19FMF9WUE5fQ09OU1QJCTB4RTAwMDAwMDAKLSNkZWZpbmUgWENIQUxfSVRMQl9TRVQzX0UxX1ZQTl9DT05TVAkJMHhGMDAwMDAwMAotLyogIENvbnN0YW50IFBQTiB2YWx1ZXMgZm9yIGVhY2ggZW50cnkgb2YgSVRMQiB3YXkgc2V0IDMgKGJlY2F1c2UgUFBOX0NPTlNUTUFTSyBpcyBub24temVybyk6ICAqLwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDNfRTBfUFBOX0NPTlNUCQkweEYwMDAwMDAwCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUM19FMV9QUE5fQ09OU1QJCTB4RjAwMDAwMDAKLS8qICBDb25zdGFudCBDQSB2YWx1ZXMgZm9yIGVhY2ggZW50cnkgb2YgSVRMQiB3YXkgc2V0IDMgKGJlY2F1c2UgQ0FfQ09OU1RNQVNLIGlzIG5vbi16ZXJvKTogICovCi0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUM19FMF9DQV9DT05TVAkJMHgwNwotI2RlZmluZSBYQ0hBTF9JVExCX1NFVDNfRTFfQ0FfQ09OU1QJCTB4MDMKLQotLyogIEluZGV4aW5nIG1hY3JvczogICovCi0jZGVmaW5lIF9YQ0hBTF9JVExCX1NFVChuLF93aGF0KQlYQ0hBTF9JVExCX1NFVCAjIyBuICMjIF93aGF0Ci0jZGVmaW5lIFhDSEFMX0lUTEJfU0VUKG4sd2hhdCkJCV9YQ0hBTF9JVExCX1NFVChuLCBfICMjIHdoYXQgKQotI2RlZmluZSBfWENIQUxfSVRMQl9TRVRfRShuLGksX3doYXQpCVhDSEFMX0lUTEJfU0VUICMjIG4gIyMgX0UgIyMgaSAjIyBfd2hhdAotI2RlZmluZSBYQ0hBTF9JVExCX1NFVF9FKG4saSx3aGF0KQlfWENIQUxfSVRMQl9TRVRfRShuLGksIF8gIyMgd2hhdCApCi0vKgotICogIEV4YW1wbGUgdXNlOiAgWENIQUxfSVRMQl9TRVQoWENIQUxfSVRMQl9BUkZfU0VUMCxFTlRSSUVTKQotICoJdG8gZ2V0IHRoZSB2YWx1ZSBvZiBYQ0hBTF9JVExCX1NFVDxuPl9FTlRSSUVTIHdoZXJlIDxuPiBpcyB0aGUgZmlyc3QgYXV0by1yZWZpbGwgc2V0LgotICovCi0KLQotLyoqKiAgRGF0YSBUTEI6ICAqKiovCi0KLSNkZWZpbmUgWENIQUxfRFRMQl9XQVlfQklUUwkJNAkvKiBudW1iZXIgb2YgYml0cyBob2xkaW5nIHRoZSB3YXlzICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfV0FZUwkJCTEwCS8qIG51bWJlciBvZiB3YXlzIChuLXdheSBzZXQtYXNzb2NpYXRpdmUgVExCKSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX0FSRl9XQVlTCQk0CS8qIG51bWJlciBvZiBhdXRvLXJlZmlsbCB3YXlzICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUUwkJCTUJLyogbnVtYmVyIG9mIHNldHMgKGdyb3VwcyBvZiB3YXlzIHdpdGggaWRlbnRpY2FsIHNldHRpbmdzKSAqLwotCi0vKiAgV2F5IHNldCB0byB3aGljaCBlYWNoIHdheSBiZWxvbmdzOiAgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9XQVkwX1NFVAkJMAotI2RlZmluZSBYQ0hBTF9EVExCX1dBWTFfU0VUCQkwCi0jZGVmaW5lIFhDSEFMX0RUTEJfV0FZMl9TRVQJCTAKLSNkZWZpbmUgWENIQUxfRFRMQl9XQVkzX1NFVAkJMAotI2RlZmluZSBYQ0hBTF9EVExCX1dBWTRfU0VUCQkxCi0jZGVmaW5lIFhDSEFMX0RUTEJfV0FZNV9TRVQJCTIKLSNkZWZpbmUgWENIQUxfRFRMQl9XQVk2X1NFVAkJMwotI2RlZmluZSBYQ0hBTF9EVExCX1dBWTdfU0VUCQk0Ci0jZGVmaW5lIFhDSEFMX0RUTEJfV0FZOF9TRVQJCTQKLSNkZWZpbmUgWENIQUxfRFRMQl9XQVk5X1NFVAkJNAotCi0vKiAgV2F5cyBzZXRzIHRoYXQgYXJlIHVzZWQgYnkgaGFyZHdhcmUgYXV0by1yZWZpbGwgKEFSRik6ICAqLwotI2RlZmluZSBYQ0hBTF9EVExCX0FSRl9TRVRTCQkxCS8qIG51bWJlciBvZiBhdXRvLXJlZmlsbCBzZXRzICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfQVJGX1NFVDAJCTAJLyogaW5kZXggb2Ygbid0aCBhdXRvLXJlZmlsbCBzZXQgKi8KLQotLyogIFdheSBzZXRzIHRoYXQgYXJlICJtaW4td2lyZWQiIChzZWUgdGVybWlub2xvZ3kgY29tbWVudCBhYm92ZSk6ICAqLwotI2RlZmluZSBYQ0hBTF9EVExCX01JTldJUkVEX1NFVFMJMQkvKiBudW1iZXIgb2YgIm1pbi13aXJlZCIgc2V0cyAqLwotI2RlZmluZSBYQ0hBTF9EVExCX01JTldJUkVEX1NFVDAJNAkvKiBpbmRleCBvZiBuJ3RoICJtaW4td2lyZWQiIHNldCAqLwotCi0KLS8qICBEVExCIHdheSBzZXQgMCAoZ3JvdXAgb2Ygd2F5cyAwIHRocnUgMyk6ICAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDBfV0FZCQkJMAkvKiBpbmRleCBvZiBmaXJzdCB3YXkgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMF9XQVlTCQkJNAkvKiBudW1iZXIgb2YgKGNvbnRpZ3VvdXMpIHdheXMgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMF9FTlRSSUVTX0xPRzIJCTIJLyogbG9nMihudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIHdheSkgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQwX0VOVFJJRVMJCQk0CS8qIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgd2F5IChhbHdheXMgYSBwb3dlciBvZiAyKSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDBfQVJGCQkJMQkvKiAxPWF1dG9yZWZpbGwgYnkgaC93LCAwPW5vbi1hdXRvcmVmaWxsICh3aXJlZC9jb25zdGFudC9zdGF0aWMpICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMF9QQUdFU0laRVMJCTEJLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBwYWdlIHNpemVzIGluIHRoaXMgd2F5ICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMF9QQUdFU1pfQklUUwkJMAkvKiBudW1iZXIgb2YgYml0cyB0byBlbmNvZGUgdGhlIHBhZ2Ugc2l6ZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDBfUEFHRVNaX0xPRzJfTUlOCQkxMgkvKiBsb2cyKG1pbmltdW0gc3VwcG9ydGVkIHBhZ2Ugc2l6ZSkgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQwX1BBR0VTWl9MT0cyX01BWAkJMTIJLyogbG9nMihtYXhpbXVtIHN1cHBvcnRlZCBwYWdlIHNpemUpICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMF9QQUdFU1pfTE9HMl9MSVNUCTEyCS8qIGxpc3Qgb2YgbG9nMihwYWdlIHNpemUpcywgc2VwYXJhdGVkIGJ5IFhDSEFMX1NFUDsKLQkJCQkJCQkgICAyXlBBR0VTWl9CSVRTIGVudHJpZXMgaW4gbGlzdCwgdW5zdXBwb3J0ZWQgZW50cmllcyBhcmUgemVybyAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDBfQVNJRF9DT05TVE1BU0sJCTAJLyogY29uc3RhbnQgQVNJRCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDBfVlBOX0NPTlNUTUFTSwkJMAkvKiBjb25zdGFudCBWUE4gYml0cywgbm90IGluY2x1ZGluZyBlbnRyeSBpbmRleCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDBfUFBOX0NPTlNUTUFTSwkJMAkvKiBjb25zdGFudCBQUE4gYml0cywgaW5jbHVkaW5nIGVudHJ5IGluZGV4IGJpdHM7IDAgaWYgYWxsIHdyaXRhYmxlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMF9DQV9DT05TVE1BU0sJCTAJLyogY29uc3RhbnQgQ0EgYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQwX0FTSURfUkVTRVQJCTAJLyogMSBpZiBBU0lEIHJlc2V0IHZhbHVlcyBkZWZpbmVkIChhbmQgYWxsIHdyaXRhYmxlKTsgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQwX1ZQTl9SRVNFVAkJMAkvKiAxIGlmIFZQTiByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMF9QUE5fUkVTRVQJCTAJLyogMSBpZiBQUE4gcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDBfQ0FfUkVTRVQJCTAJLyogMSBpZiBDQSByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0KLS8qICBEVExCIHdheSBzZXQgMSAoZ3JvdXAgb2Ygd2F5cyA0IHRocnUgNCk6ICAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDFfV0FZCQkJNAkvKiBpbmRleCBvZiBmaXJzdCB3YXkgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMV9XQVlTCQkJMQkvKiBudW1iZXIgb2YgKGNvbnRpZ3VvdXMpIHdheXMgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMV9FTlRSSUVTX0xPRzIJCTIJLyogbG9nMihudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIHdheSkgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQxX0VOVFJJRVMJCQk0CS8qIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgd2F5IChhbHdheXMgYSBwb3dlciBvZiAyKSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDFfQVJGCQkJMAkvKiAxPWF1dG9yZWZpbGwgYnkgaC93LCAwPW5vbi1hdXRvcmVmaWxsICh3aXJlZC9jb25zdGFudC9zdGF0aWMpICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMV9QQUdFU0laRVMJCTQJLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBwYWdlIHNpemVzIGluIHRoaXMgd2F5ICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMV9QQUdFU1pfQklUUwkJMgkvKiBudW1iZXIgb2YgYml0cyB0byBlbmNvZGUgdGhlIHBhZ2Ugc2l6ZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDFfUEFHRVNaX0xPRzJfTUlOCQkyMAkvKiBsb2cyKG1pbmltdW0gc3VwcG9ydGVkIHBhZ2Ugc2l6ZSkgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQxX1BBR0VTWl9MT0cyX01BWAkJMjYJLyogbG9nMihtYXhpbXVtIHN1cHBvcnRlZCBwYWdlIHNpemUpICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMV9QQUdFU1pfTE9HMl9MSVNUCTIwIFhDSEFMX1NFUCAyMiBYQ0hBTF9TRVAgMjQgWENIQUxfU0VQIDI2CS8qIGxpc3Qgb2YgbG9nMihwYWdlIHNpemUpcywgc2VwYXJhdGVkIGJ5IFhDSEFMX1NFUDsKLQkJCQkJCQkgICAyXlBBR0VTWl9CSVRTIGVudHJpZXMgaW4gbGlzdCwgdW5zdXBwb3J0ZWQgZW50cmllcyBhcmUgemVybyAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDFfQVNJRF9DT05TVE1BU0sJCTAJLyogY29uc3RhbnQgQVNJRCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDFfVlBOX0NPTlNUTUFTSwkJMAkvKiBjb25zdGFudCBWUE4gYml0cywgbm90IGluY2x1ZGluZyBlbnRyeSBpbmRleCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDFfUFBOX0NPTlNUTUFTSwkJMAkvKiBjb25zdGFudCBQUE4gYml0cywgaW5jbHVkaW5nIGVudHJ5IGluZGV4IGJpdHM7IDAgaWYgYWxsIHdyaXRhYmxlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMV9DQV9DT05TVE1BU0sJCTAJLyogY29uc3RhbnQgQ0EgYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQxX0FTSURfUkVTRVQJCTAJLyogMSBpZiBBU0lEIHJlc2V0IHZhbHVlcyBkZWZpbmVkIChhbmQgYWxsIHdyaXRhYmxlKTsgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQxX1ZQTl9SRVNFVAkJMAkvKiAxIGlmIFZQTiByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMV9QUE5fUkVTRVQJCTAJLyogMSBpZiBQUE4gcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDFfQ0FfUkVTRVQJCTAJLyogMSBpZiBDQSByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0KLS8qICBEVExCIHdheSBzZXQgMiAoZ3JvdXAgb2Ygd2F5cyA1IHRocnUgNSk6ICAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDJfV0FZCQkJNQkvKiBpbmRleCBvZiBmaXJzdCB3YXkgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMl9XQVlTCQkJMQkvKiBudW1iZXIgb2YgKGNvbnRpZ3VvdXMpIHdheXMgaW4gdGhpcyB3YXkgc2V0ICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMl9FTlRSSUVTX0xPRzIJCTEJLyogbG9nMihudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIHdheSkgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQyX0VOVFJJRVMJCQkyCS8qIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgd2F5IChhbHdheXMgYSBwb3dlciBvZiAyKSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDJfQVJGCQkJMAkvKiAxPWF1dG9yZWZpbGwgYnkgaC93LCAwPW5vbi1hdXRvcmVmaWxsICh3aXJlZC9jb25zdGFudC9zdGF0aWMpICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMl9QQUdFU0laRVMJCTEJLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBwYWdlIHNpemVzIGluIHRoaXMgd2F5ICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMl9QQUdFU1pfQklUUwkJMAkvKiBudW1iZXIgb2YgYml0cyB0byBlbmNvZGUgdGhlIHBhZ2Ugc2l6ZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDJfUEFHRVNaX0xPRzJfTUlOCQkyNwkvKiBsb2cyKG1pbmltdW0gc3VwcG9ydGVkIHBhZ2Ugc2l6ZSkgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQyX1BBR0VTWl9MT0cyX01BWAkJMjcJLyogbG9nMihtYXhpbXVtIHN1cHBvcnRlZCBwYWdlIHNpemUpICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMl9QQUdFU1pfTE9HMl9MSVNUCTI3CS8qIGxpc3Qgb2YgbG9nMihwYWdlIHNpemUpcywgc2VwYXJhdGVkIGJ5IFhDSEFMX1NFUDsKLQkJCQkJCQkgICAyXlBBR0VTWl9CSVRTIGVudHJpZXMgaW4gbGlzdCwgdW5zdXBwb3J0ZWQgZW50cmllcyBhcmUgemVybyAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDJfQVNJRF9DT05TVE1BU0sJCTB4RkYJLyogY29uc3RhbnQgQVNJRCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDJfVlBOX0NPTlNUTUFTSwkJMHhGMDAwMDAwMAkvKiBjb25zdGFudCBWUE4gYml0cywgbm90IGluY2x1ZGluZyBlbnRyeSBpbmRleCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDJfUFBOX0NPTlNUTUFTSwkJMHhGODAwMDAwMAkvKiBjb25zdGFudCBQUE4gYml0cywgaW5jbHVkaW5nIGVudHJ5IGluZGV4IGJpdHM7IDAgaWYgYWxsIHdyaXRhYmxlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMl9DQV9DT05TVE1BU0sJCTB4MDAwMDAwMEYJLyogY29uc3RhbnQgQ0EgYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQyX0FTSURfUkVTRVQJCTAJLyogMSBpZiBBU0lEIHJlc2V0IHZhbHVlcyBkZWZpbmVkIChhbmQgYWxsIHdyaXRhYmxlKTsgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQyX1ZQTl9SRVNFVAkJMAkvKiAxIGlmIFZQTiByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMl9QUE5fUkVTRVQJCTAJLyogMSBpZiBQUE4gcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDJfQ0FfUkVTRVQJCTAJLyogMSBpZiBDQSByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0vKiAgQ29uc3RhbnQgQVNJRCB2YWx1ZXMgZm9yIGVhY2ggZW50cnkgb2YgRFRMQiB3YXkgc2V0IDIgKGJlY2F1c2UgQVNJRF9DT05TVE1BU0sgaXMgbm9uLXplcm8pOiAgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQyX0UwX0FTSURfQ09OU1QJCTB4MDEKLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQyX0UxX0FTSURfQ09OU1QJCTB4MDEKLS8qICBDb25zdGFudCBWUE4gdmFsdWVzIGZvciBlYWNoIGVudHJ5IG9mIERUTEIgd2F5IHNldCAyIChiZWNhdXNlIFZQTl9DT05TVE1BU0sgaXMgbm9uLXplcm8pOiAgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQyX0UwX1ZQTl9DT05TVAkJMHhEMDAwMDAwMAotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDJfRTFfVlBOX0NPTlNUCQkweEQ4MDAwMDAwCi0vKiAgQ29uc3RhbnQgUFBOIHZhbHVlcyBmb3IgZWFjaCBlbnRyeSBvZiBEVExCIHdheSBzZXQgMiAoYmVjYXVzZSBQUE5fQ09OU1RNQVNLIGlzIG5vbi16ZXJvKTogICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMl9FMF9QUE5fQ09OU1QJCTB4MDAwMDAwMDAKLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQyX0UxX1BQTl9DT05TVAkJMHgwMDAwMDAwMAotLyogIENvbnN0YW50IENBIHZhbHVlcyBmb3IgZWFjaCBlbnRyeSBvZiBEVExCIHdheSBzZXQgMiAoYmVjYXVzZSBDQV9DT05TVE1BU0sgaXMgbm9uLXplcm8pOiAgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQyX0UwX0NBX0NPTlNUCQkweDA3Ci0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUMl9FMV9DQV9DT05TVAkJMHgwMwotCi0vKiAgRFRMQiB3YXkgc2V0IDMgKGdyb3VwIG9mIHdheXMgNiB0aHJ1IDYpOiAgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQzX1dBWQkJCTYJLyogaW5kZXggb2YgZmlyc3Qgd2F5IGluIHRoaXMgd2F5IHNldCAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDNfV0FZUwkJCTEJLyogbnVtYmVyIG9mIChjb250aWd1b3VzKSB3YXlzIGluIHRoaXMgd2F5IHNldCAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDNfRU5UUklFU19MT0cyCQkxCS8qIGxvZzIobnVtYmVyIG9mIGVudHJpZXMgaW4gdGhpcyB3YXkpICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUM19FTlRSSUVTCQkJMgkvKiBudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIHdheSAoYWx3YXlzIGEgcG93ZXIgb2YgMikgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQzX0FSRgkJCTAJLyogMT1hdXRvcmVmaWxsIGJ5IGgvdywgMD1ub24tYXV0b3JlZmlsbCAod2lyZWQvY29uc3RhbnQvc3RhdGljKSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDNfUEFHRVNJWkVTCQkxCS8qIG51bWJlciBvZiBzdXBwb3J0ZWQgcGFnZSBzaXplcyBpbiB0aGlzIHdheSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDNfUEFHRVNaX0JJVFMJCTAJLyogbnVtYmVyIG9mIGJpdHMgdG8gZW5jb2RlIHRoZSBwYWdlIHNpemUgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQzX1BBR0VTWl9MT0cyX01JTgkJMjgJLyogbG9nMihtaW5pbXVtIHN1cHBvcnRlZCBwYWdlIHNpemUpICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUM19QQUdFU1pfTE9HMl9NQVgJCTI4CS8qIGxvZzIobWF4aW11bSBzdXBwb3J0ZWQgcGFnZSBzaXplKSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDNfUEFHRVNaX0xPRzJfTElTVAkyOAkvKiBsaXN0IG9mIGxvZzIocGFnZSBzaXplKXMsIHNlcGFyYXRlZCBieSBYQ0hBTF9TRVA7Ci0JCQkJCQkJICAgMl5QQUdFU1pfQklUUyBlbnRyaWVzIGluIGxpc3QsIHVuc3VwcG9ydGVkIGVudHJpZXMgYXJlIHplcm8gKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQzX0FTSURfQ09OU1RNQVNLCQkweEZGCS8qIGNvbnN0YW50IEFTSUQgYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQzX1ZQTl9DT05TVE1BU0sJCTB4RTAwMDAwMDAJLyogY29uc3RhbnQgVlBOIGJpdHMsIG5vdCBpbmNsdWRpbmcgZW50cnkgaW5kZXggYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQzX1BQTl9DT05TVE1BU0sJCTB4RjAwMDAwMDAJLyogY29uc3RhbnQgUFBOIGJpdHMsIGluY2x1ZGluZyBlbnRyeSBpbmRleCBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDNfQ0FfQ09OU1RNQVNLCQkweDAwMDAwMDBGCS8qIGNvbnN0YW50IENBIGJpdHM7IDAgaWYgYWxsIHdyaXRhYmxlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUM19BU0lEX1JFU0VUCQkwCS8qIDEgaWYgQVNJRCByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUM19WUE5fUkVTRVQJCTAJLyogMSBpZiBWUE4gcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDNfUFBOX1JFU0VUCQkwCS8qIDEgaWYgUFBOIHJlc2V0IHZhbHVlcyBkZWZpbmVkIChhbmQgYWxsIHdyaXRhYmxlKTsgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQzX0NBX1JFU0VUCQkwCS8qIDEgaWYgQ0EgcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotLyogIENvbnN0YW50IEFTSUQgdmFsdWVzIGZvciBlYWNoIGVudHJ5IG9mIERUTEIgd2F5IHNldCAzIChiZWNhdXNlIEFTSURfQ09OU1RNQVNLIGlzIG5vbi16ZXJvKTogICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUM19FMF9BU0lEX0NPTlNUCQkweDAxCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUM19FMV9BU0lEX0NPTlNUCQkweDAxCi0vKiAgQ29uc3RhbnQgVlBOIHZhbHVlcyBmb3IgZWFjaCBlbnRyeSBvZiBEVExCIHdheSBzZXQgMyAoYmVjYXVzZSBWUE5fQ09OU1RNQVNLIGlzIG5vbi16ZXJvKTogICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUM19FMF9WUE5fQ09OU1QJCTB4RTAwMDAwMDAKLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQzX0UxX1ZQTl9DT05TVAkJMHhGMDAwMDAwMAotLyogIENvbnN0YW50IFBQTiB2YWx1ZXMgZm9yIGVhY2ggZW50cnkgb2YgRFRMQiB3YXkgc2V0IDMgKGJlY2F1c2UgUFBOX0NPTlNUTUFTSyBpcyBub24temVybyk6ICAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDNfRTBfUFBOX0NPTlNUCQkweEYwMDAwMDAwCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUM19FMV9QUE5fQ09OU1QJCTB4RjAwMDAwMDAKLS8qICBDb25zdGFudCBDQSB2YWx1ZXMgZm9yIGVhY2ggZW50cnkgb2YgRFRMQiB3YXkgc2V0IDMgKGJlY2F1c2UgQ0FfQ09OU1RNQVNLIGlzIG5vbi16ZXJvKTogICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUM19FMF9DQV9DT05TVAkJMHgwNwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDNfRTFfQ0FfQ09OU1QJCTB4MDMKLQotLyogIERUTEIgd2F5IHNldCA0IChncm91cCBvZiB3YXlzIDcgdGhydSA5KTogICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUNF9XQVkJCQk3CS8qIGluZGV4IG9mIGZpcnN0IHdheSBpbiB0aGlzIHdheSBzZXQgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQ0X1dBWVMJCQkzCS8qIG51bWJlciBvZiAoY29udGlndW91cykgd2F5cyBpbiB0aGlzIHdheSBzZXQgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQ0X0VOVFJJRVNfTE9HMgkJMAkvKiBsb2cyKG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgd2F5KSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDRfRU5UUklFUwkJCTEJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhpcyB3YXkgKGFsd2F5cyBhIHBvd2VyIG9mIDIpICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUNF9BUkYJCQkwCS8qIDE9YXV0b3JlZmlsbCBieSBoL3csIDA9bm9uLWF1dG9yZWZpbGwgKHdpcmVkL2NvbnN0YW50L3N0YXRpYykgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQ0X1BBR0VTSVpFUwkJMQkvKiBudW1iZXIgb2Ygc3VwcG9ydGVkIHBhZ2Ugc2l6ZXMgaW4gdGhpcyB3YXkgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQ0X1BBR0VTWl9CSVRTCQkwCS8qIG51bWJlciBvZiBiaXRzIHRvIGVuY29kZSB0aGUgcGFnZSBzaXplICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUNF9QQUdFU1pfTE9HMl9NSU4JCTEyCS8qIGxvZzIobWluaW11bSBzdXBwb3J0ZWQgcGFnZSBzaXplKSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDRfUEFHRVNaX0xPRzJfTUFYCQkxMgkvKiBsb2cyKG1heGltdW0gc3VwcG9ydGVkIHBhZ2Ugc2l6ZSkgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQ0X1BBR0VTWl9MT0cyX0xJU1QJMTIJLyogbGlzdCBvZiBsb2cyKHBhZ2Ugc2l6ZSlzLCBzZXBhcmF0ZWQgYnkgWENIQUxfU0VQOwotCQkJCQkJCSAgIDJeUEFHRVNaX0JJVFMgZW50cmllcyBpbiBsaXN0LCB1bnN1cHBvcnRlZCBlbnRyaWVzIGFyZSB6ZXJvICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUNF9BU0lEX0NPTlNUTUFTSwkJMAkvKiBjb25zdGFudCBBU0lEIGJpdHM7IDAgaWYgYWxsIHdyaXRhYmxlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUNF9WUE5fQ09OU1RNQVNLCQkwCS8qIGNvbnN0YW50IFZQTiBiaXRzLCBub3QgaW5jbHVkaW5nIGVudHJ5IGluZGV4IGJpdHM7IDAgaWYgYWxsIHdyaXRhYmxlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUNF9QUE5fQ09OU1RNQVNLCQkwCS8qIGNvbnN0YW50IFBQTiBiaXRzLCBpbmNsdWRpbmcgZW50cnkgaW5kZXggYml0czsgMCBpZiBhbGwgd3JpdGFibGUgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQ0X0NBX0NPTlNUTUFTSwkJMAkvKiBjb25zdGFudCBDQSBiaXRzOyAwIGlmIGFsbCB3cml0YWJsZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDRfQVNJRF9SRVNFVAkJMAkvKiAxIGlmIEFTSUQgcmVzZXQgdmFsdWVzIGRlZmluZWQgKGFuZCBhbGwgd3JpdGFibGUpOyAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9EVExCX1NFVDRfVlBOX1JFU0VUCQkwCS8qIDEgaWYgVlBOIHJlc2V0IHZhbHVlcyBkZWZpbmVkIChhbmQgYWxsIHdyaXRhYmxlKTsgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfRFRMQl9TRVQ0X1BQTl9SRVNFVAkJMAkvKiAxIGlmIFBQTiByZXNldCB2YWx1ZXMgZGVmaW5lZCAoYW5kIGFsbCB3cml0YWJsZSk7IDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUNF9DQV9SRVNFVAkJMAkvKiAxIGlmIENBIHJlc2V0IHZhbHVlcyBkZWZpbmVkIChhbmQgYWxsIHdyaXRhYmxlKTsgMCBvdGhlcndpc2UgKi8KLQotLyogIEluZGV4aW5nIG1hY3JvczogICovCi0jZGVmaW5lIF9YQ0hBTF9EVExCX1NFVChuLF93aGF0KQlYQ0hBTF9EVExCX1NFVCAjIyBuICMjIF93aGF0Ci0jZGVmaW5lIFhDSEFMX0RUTEJfU0VUKG4sd2hhdCkJCV9YQ0hBTF9EVExCX1NFVChuLCBfICMjIHdoYXQgKQotI2RlZmluZSBfWENIQUxfRFRMQl9TRVRfRShuLGksX3doYXQpCVhDSEFMX0RUTEJfU0VUICMjIG4gIyMgX0UgIyMgaSAjIyBfd2hhdAotI2RlZmluZSBYQ0hBTF9EVExCX1NFVF9FKG4saSx3aGF0KQlfWENIQUxfRFRMQl9TRVRfRShuLGksIF8gIyMgd2hhdCApCi0vKgotICogIEV4YW1wbGUgdXNlOiAgWENIQUxfRFRMQl9TRVQoWENIQUxfRFRMQl9BUkZfU0VUMCxFTlRSSUVTKQotICoJdG8gZ2V0IHRoZSB2YWx1ZSBvZiBYQ0hBTF9EVExCX1NFVDxuPl9FTlRSSUVTIHdoZXJlIDxuPiBpcyB0aGUgZmlyc3QgYXV0by1yZWZpbGwgc2V0LgotICovCi0KLQotLyoKLSAqICBEZXRlcm1pbmUgd2hldGhlciB3ZSBoYXZlIGEgZnVsbCBNTVUgKHdpdGggUGFnZSBUYWJsZSBhbmQgUHJvdGVjdGlvbikKLSAqICB1c2FibGUgZm9yIGFuIE1NVS1iYXNlZCBPUzoKLSAqLwotI2lmIFhDSEFMX0hBVkVfVExCUyAmJiAhWENIQUxfSEFWRV9TUEFOTklOR19XQVkgJiYgWENIQUxfSVRMQl9BUkZfV0FZUyA+IDAgJiYgWENIQUxfRFRMQl9BUkZfV0FZUyA+IDAgJiYgWENIQUxfTU1VX1JJTkdTID49IDIKLSMgZGVmaW5lIFhDSEFMX0hBVkVfUFRQX01NVQkJMQkvKiBoYXZlIGZ1bGwgTU1VICh3aXRoIHBhZ2UgdGFibGUgW2F1dG9yZWZpbGxdIGFuZCBwcm90ZWN0aW9uKSAqLwotI2Vsc2UKLSMgZGVmaW5lIFhDSEFMX0hBVkVfUFRQX01NVQkJMAkvKiBkb24ndCBoYXZlIGZ1bGwgTU1VICovCi0jZW5kaWYKLQotLyoKLSAqICBGb3IgZnVsbCBNTVVzLCByZXBvcnQga2VybmVsIFJBTSBzZWdtZW50IGFuZCBrZXJuZWwgSS9PIHNlZ21lbnQgc3RhdGljIHBhZ2UgbWFwcGluZ3M6Ci0gKi8KLSNpZiBYQ0hBTF9IQVZFX1BUUF9NTVUKLSNkZWZpbmUgWENIQUxfS1NFR19DQUNIRURfVkFERFIJCTB4RDAwMDAwMDAJLyogdmlydC5hZGRyIG9mIGtlcm5lbCBSQU0gY2FjaGVkIHN0YXRpYyBtYXAgKi8KLSNkZWZpbmUgWENIQUxfS1NFR19DQUNIRURfUEFERFIJCTB4MDAwMDAwMDAJLyogcGh5cy5hZGRyIG9mIGtzZWdfY2FjaGVkICovCi0jZGVmaW5lIFhDSEFMX0tTRUdfQ0FDSEVEX1NJWkUJCTB4MDgwMDAwMDAJLyogc2l6ZSBpbiBieXRlcyBvZiBrc2VnX2NhY2hlZCAoYXNzdW1lZCBwb3dlciBvZiAyISEhKSAqLwotI2RlZmluZSBYQ0hBTF9LU0VHX0JZUEFTU19WQUREUgkJMHhEODAwMDAwMAkvKiB2aXJ0LmFkZHIgb2Yga2VybmVsIFJBTSBieXBhc3MgKHVuY2FjaGVkKSBzdGF0aWMgbWFwICovCi0jZGVmaW5lIFhDSEFMX0tTRUdfQllQQVNTX1BBRERSCQkweDAwMDAwMDAwCS8qIHBoeXMuYWRkciBvZiBrc2VnX2J5cGFzcyAqLwotI2RlZmluZSBYQ0hBTF9LU0VHX0JZUEFTU19TSVpFCQkweDA4MDAwMDAwCS8qIHNpemUgaW4gYnl0ZXMgb2Yga3NlZ19ieXBhc3MgKGFzc3VtZWQgcG93ZXIgb2YgMiEhISkgKi8KLQotI2RlZmluZSBYQ0hBTF9LSU9fQ0FDSEVEX1ZBRERSCQkweEUwMDAwMDAwCS8qIHZpcnQuYWRkciBvZiBrZXJuZWwgSS9PIGNhY2hlZCBzdGF0aWMgbWFwICovCi0jZGVmaW5lIFhDSEFMX0tJT19DQUNIRURfUEFERFIJCTB4RjAwMDAwMDAJLyogcGh5cy5hZGRyIG9mIGtpb19jYWNoZWQgKi8KLSNkZWZpbmUgWENIQUxfS0lPX0NBQ0hFRF9TSVpFCQkweDEwMDAwMDAwCS8qIHNpemUgaW4gYnl0ZXMgb2Yga2lvX2NhY2hlZCAoYXNzdW1lZCBwb3dlciBvZiAyISEhKSAqLwotI2RlZmluZSBYQ0hBTF9LSU9fQllQQVNTX1ZBRERSCQkweEYwMDAwMDAwCS8qIHZpcnQuYWRkciBvZiBrZXJuZWwgSS9PIGJ5cGFzcyAodW5jYWNoZWQpIHN0YXRpYyBtYXAgKi8KLSNkZWZpbmUgWENIQUxfS0lPX0JZUEFTU19QQUREUgkJMHhGMDAwMDAwMAkvKiBwaHlzLmFkZHIgb2Yga2lvX2J5cGFzcyAqLwotI2RlZmluZSBYQ0hBTF9LSU9fQllQQVNTX1NJWkUJCTB4MTAwMDAwMDAJLyogc2l6ZSBpbiBieXRlcyBvZiBraW9fYnlwYXNzIChhc3N1bWVkIHBvd2VyIG9mIDIhISEpICovCi0KLSNkZWZpbmUgWENIQUxfU0VHX01BUFBBQkxFX1ZBRERSCTB4MDAwMDAwMDAJLyogc3RhcnQgb2YgbGFyZ2VzdCBub24tc3RhdGljLW1hcHBlZCB2aXJ0dWFsIGFkZHIgYXJlYSAqLwotI2RlZmluZSBYQ0hBTF9TRUdfTUFQUEFCTEVfU0laRQkJMHhEMDAwMDAwMAkvKiBzaXplIGluIGJ5dGVzIG9mICAiICAqLwotLyogZGVmaW5lIFhDSEFMX1NFR19NQVBQQUJMRTJfeHh4IGlmIG1vcmUgYXJlYXMgcHJlc2VudCwgc29ydGVkIGluIG9yZGVyIG9mIGRlc2NlbmRpbmcgc2l6ZS4gICovCi0jZW5kaWYKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJCQlNSVNDCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIFhDSEFMX05VTV9XUklURUJVRkZFUl9FTlRSSUVTCTQJLyogbnVtYmVyIG9mIHdyaXRlIGJ1ZmZlciBlbnRyaWVzICovCi0KLSNkZWZpbmUgWENIQUxfQ09SRV9JRAkJCSJsaW51eF9iZSIJLyogY29uZmlndXJhdGlvbidzIGFscGhhbnVtZXJpYyBjb3JlIGlkZW50aWZpZXIKLQkJCQkJCQkgICAoQ29yZUlEKSBzZXQgaW4gdGhlIFh0ZW5zYSBQcm9jZXNzb3IgR2VuZXJhdG9yICovCi0KLSNkZWZpbmUgWENIQUxfQlVJTERfVU5JUVVFX0lECQkweDAwMDAzMjU2CS8qIHNvZnR3YXJlIGJ1aWxkLXVuaXF1ZSBJRCAoMjItYml0KSAqLwotCi0vKiAgVGhlc2UgZGVmaW5pdGlvbnMgZGVzY3JpYmUgdGhlIGhhcmR3YXJlIHRhcmdldGVkIGJ5IHRoaXMgc29mdHdhcmU6ICAqLwotI2RlZmluZSBYQ0hBTF9IV19DT05GSUdJRDAJCTB4QzEwM0QxRkYJLyogY29uZmlnIElEIHJlZyAwIHZhbHVlICh1cHBlciAzMiBvZiA2NCBiaXRzKSAqLwotI2RlZmluZSBYQ0hBTF9IV19DT05GSUdJRDEJCTB4MDA4MDMyNTYJLyogY29uZmlnIElEIHJlZyAxIHZhbHVlIChsb3dlciAzMiBvZiA2NCBiaXRzKSAqLwotI2RlZmluZSBYQ0hBTF9DT05GSUdJRDAJCQlYQ0hBTF9IV19DT05GSUdJRDAJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb25seSAtLSBkb24ndCB1c2UhICovCi0jZGVmaW5lIFhDSEFMX0NPTkZJR0lEMQkJCVhDSEFMX0hXX0NPTkZJR0lEMQkvKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvbmx5IC0tIGRvbid0IHVzZSEgKi8KLSNkZWZpbmUgWENIQUxfSFdfUkVMRUFTRV9NQUpPUgkJMTA1MAkvKiBtYWpvciByZWxlYXNlIG9mIHRhcmdldGVkIGhhcmR3YXJlICovCi0jZGVmaW5lIFhDSEFMX0hXX1JFTEVBU0VfTUlOT1IJCTEJLyogbWlub3IgcmVsZWFzZSBvZiB0YXJnZXRlZCBoYXJkd2FyZSAqLwotI2RlZmluZSBYQ0hBTF9IV19SRUxFQVNFX05BTUUJCSJUMTA1MC4xIgkvKiBmdWxsIHJlbGVhc2UgbmFtZSBvZiB0YXJnZXRlZCBoYXJkd2FyZSAqLwotI2RlZmluZSBYVEhBTF9IV19SRUxfVDEwNTAJMQotI2RlZmluZSBYVEhBTF9IV19SRUxfVDEwNTBfMQkxCi0jZGVmaW5lIFhDSEFMX0hXX0NPTkZJR0lEX1JFTElBQkxFCTEKLQotCi0vKgotICogIE1pc2NlbGxhbmVvdXMgc3BlY2lhbCByZWdpc3RlciBmaWVsZHM6Ci0gKi8KLQotCi0vKiAgREJSRUFLQyAoc3BlY2lhbCByZWdpc3RlciBudW1iZXIgMTYwKTogICovCi0jZGVmaW5lIFhDSEFMX0RCUkVBS0NfVkFMSURNQVNLCTB4QzAwMDAwM0YJLyogYml0cyBvZiBEQlJFQUtDIHRoYXQgYXJlIGRlZmluZWQgKi8KLS8qICBNQVNLIGZpZWxkOiAgKi8KLSNkZWZpbmUgWENIQUxfREJSRUFLQ19NQVNLX0JJVFMgCTYJCS8qIG51bWJlciBvZiBiaXRzIGluIE1BU0sgZmllbGQgKi8KLSNkZWZpbmUgWENIQUxfREJSRUFLQ19NQVNLX05VTSAgCTY0CQkvKiBtYXggbnVtYmVyIG9mIHBvc3NpYmxlIGNhdXNlcyAoMl5iaXRzKSAqLwotI2RlZmluZSBYQ0hBTF9EQlJFQUtDX01BU0tfU0hJRlQJMAkJLyogcG9zaXRpb24gb2YgTUFTSyBiaXRzIGluIERCUkVBS0MsIHN0YXJ0aW5nIGZyb20gbHNiaXQgKi8KLSNkZWZpbmUgWENIQUxfREJSRUFLQ19NQVNLX01BU0sgCTB4MDAwMDAwM0YJLyogbWFzayBvZiBiaXRzIGluIE1BU0sgZmllbGQgb2YgREJSRUFLQyAqLwotLyogIExPQURCUkVBSyBmaWVsZDogICovCi0jZGVmaW5lIFhDSEFMX0RCUkVBS0NfTE9BREJSRUFLX0JJVFMgCTEJCS8qIG51bWJlciBvZiBiaXRzIGluIExPQURCUkVBSyBmaWVsZCAqLwotI2RlZmluZSBYQ0hBTF9EQlJFQUtDX0xPQURCUkVBS19OVU0gIAkyCQkvKiBtYXggbnVtYmVyIG9mIHBvc3NpYmxlIGNhdXNlcyAoMl5iaXRzKSAqLwotI2RlZmluZSBYQ0hBTF9EQlJFQUtDX0xPQURCUkVBS19TSElGVAkzMAkJLyogcG9zaXRpb24gb2YgTE9BREJSRUFLIGJpdHMgaW4gREJSRUFLQywgc3RhcnRpbmcgZnJvbSBsc2JpdCAqLwotI2RlZmluZSBYQ0hBTF9EQlJFQUtDX0xPQURCUkVBS19NQVNLIAkweDQwMDAwMDAwCS8qIG1hc2sgb2YgYml0cyBpbiBMT0FEQlJFQUsgZmllbGQgb2YgREJSRUFLQyAqLwotLyogIFNUT1JFQlJFQUsgZmllbGQ6ICAqLwotI2RlZmluZSBYQ0hBTF9EQlJFQUtDX1NUT1JFQlJFQUtfQklUUyAJMQkJLyogbnVtYmVyIG9mIGJpdHMgaW4gU1RPUkVCUkVBSyBmaWVsZCAqLwotI2RlZmluZSBYQ0hBTF9EQlJFQUtDX1NUT1JFQlJFQUtfTlVNICAJMgkJLyogbWF4IG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgKDJeYml0cykgKi8KLSNkZWZpbmUgWENIQUxfREJSRUFLQ19TVE9SRUJSRUFLX1NISUZUCTMxCQkvKiBwb3NpdGlvbiBvZiBTVE9SRUJSRUFLIGJpdHMgaW4gREJSRUFLQywgc3RhcnRpbmcgZnJvbSBsc2JpdCAqLwotI2RlZmluZSBYQ0hBTF9EQlJFQUtDX1NUT1JFQlJFQUtfTUFTSyAJMHg4MDAwMDAwMAkvKiBtYXNrIG9mIGJpdHMgaW4gU1RPUkVCUkVBSyBmaWVsZCBvZiBEQlJFQUtDICovCi0KLS8qICBQUyAoc3BlY2lhbCByZWdpc3RlciBudW1iZXIgMjMwKTogICovCi0jZGVmaW5lIFhDSEFMX1BTX1ZBTElETUFTSwkweDAwMDcwRkZGCS8qIGJpdHMgb2YgUFMgdGhhdCBhcmUgZGVmaW5lZCAqLwotLyogIElOVExFVkVMIGZpZWxkOiAgKi8KLSNkZWZpbmUgWENIQUxfUFNfSU5UTEVWRUxfQklUUyAJNAkJLyogbnVtYmVyIG9mIGJpdHMgaW4gSU5UTEVWRUwgZmllbGQgKi8KLSNkZWZpbmUgWENIQUxfUFNfSU5UTEVWRUxfTlVNICAJMTYJCS8qIG1heCBudW1iZXIgb2YgcG9zc2libGUgY2F1c2VzICgyXmJpdHMpICovCi0jZGVmaW5lIFhDSEFMX1BTX0lOVExFVkVMX1NISUZUCTAJCS8qIHBvc2l0aW9uIG9mIElOVExFVkVMIGJpdHMgaW4gUFMsIHN0YXJ0aW5nIGZyb20gbHNiaXQgKi8KLSNkZWZpbmUgWENIQUxfUFNfSU5UTEVWRUxfTUFTSyAJMHgwMDAwMDAwRgkvKiBtYXNrIG9mIGJpdHMgaW4gSU5UTEVWRUwgZmllbGQgb2YgUFMgKi8KLS8qICBFWENNIGZpZWxkOiAgKi8KLSNkZWZpbmUgWENIQUxfUFNfRVhDTV9CSVRTIAkxCQkvKiBudW1iZXIgb2YgYml0cyBpbiBFWENNIGZpZWxkICovCi0jZGVmaW5lIFhDSEFMX1BTX0VYQ01fTlVNICAJMgkJLyogbWF4IG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgKDJeYml0cykgKi8KLSNkZWZpbmUgWENIQUxfUFNfRVhDTV9TSElGVAk0CQkvKiBwb3NpdGlvbiBvZiBFWENNIGJpdHMgaW4gUFMsIHN0YXJ0aW5nIGZyb20gbHNiaXQgKi8KLSNkZWZpbmUgWENIQUxfUFNfRVhDTV9NQVNLIAkweDAwMDAwMDEwCS8qIG1hc2sgb2YgYml0cyBpbiBFWENNIGZpZWxkIG9mIFBTICovCi0vKiAgUFJPR1NUQUNLIGZpZWxkOiAgKi8KLSNkZWZpbmUgWENIQUxfUFNfUFJPR1NUQUNLX0JJVFMgCTEJCS8qIG51bWJlciBvZiBiaXRzIGluIFBST0dTVEFDSyBmaWVsZCAqLwotI2RlZmluZSBYQ0hBTF9QU19QUk9HU1RBQ0tfTlVNICAJMgkJLyogbWF4IG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgKDJeYml0cykgKi8KLSNkZWZpbmUgWENIQUxfUFNfUFJPR1NUQUNLX1NISUZUCTUJCS8qIHBvc2l0aW9uIG9mIFBST0dTVEFDSyBiaXRzIGluIFBTLCBzdGFydGluZyBmcm9tIGxzYml0ICovCi0jZGVmaW5lIFhDSEFMX1BTX1BST0dTVEFDS19NQVNLIAkweDAwMDAwMDIwCS8qIG1hc2sgb2YgYml0cyBpbiBQUk9HU1RBQ0sgZmllbGQgb2YgUFMgKi8KLS8qICBSSU5HIGZpZWxkOiAgKi8KLSNkZWZpbmUgWENIQUxfUFNfUklOR19CSVRTIAkyCQkvKiBudW1iZXIgb2YgYml0cyBpbiBSSU5HIGZpZWxkICovCi0jZGVmaW5lIFhDSEFMX1BTX1JJTkdfTlVNICAJNAkJLyogbWF4IG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgKDJeYml0cykgKi8KLSNkZWZpbmUgWENIQUxfUFNfUklOR19TSElGVAk2CQkvKiBwb3NpdGlvbiBvZiBSSU5HIGJpdHMgaW4gUFMsIHN0YXJ0aW5nIGZyb20gbHNiaXQgKi8KLSNkZWZpbmUgWENIQUxfUFNfUklOR19NQVNLIAkweDAwMDAwMEMwCS8qIG1hc2sgb2YgYml0cyBpbiBSSU5HIGZpZWxkIG9mIFBTICovCi0vKiAgT1dCIGZpZWxkOiAgKi8KLSNkZWZpbmUgWENIQUxfUFNfT1dCX0JJVFMgCTQJCS8qIG51bWJlciBvZiBiaXRzIGluIE9XQiBmaWVsZCAqLwotI2RlZmluZSBYQ0hBTF9QU19PV0JfTlVNICAJMTYJCS8qIG1heCBudW1iZXIgb2YgcG9zc2libGUgY2F1c2VzICgyXmJpdHMpICovCi0jZGVmaW5lIFhDSEFMX1BTX09XQl9TSElGVAk4CQkvKiBwb3NpdGlvbiBvZiBPV0IgYml0cyBpbiBQUywgc3RhcnRpbmcgZnJvbSBsc2JpdCAqLwotI2RlZmluZSBYQ0hBTF9QU19PV0JfTUFTSyAJMHgwMDAwMEYwMAkvKiBtYXNrIG9mIGJpdHMgaW4gT1dCIGZpZWxkIG9mIFBTICovCi0vKiAgQ0FMTElOQyBmaWVsZDogICovCi0jZGVmaW5lIFhDSEFMX1BTX0NBTExJTkNfQklUUyAJMgkJLyogbnVtYmVyIG9mIGJpdHMgaW4gQ0FMTElOQyBmaWVsZCAqLwotI2RlZmluZSBYQ0hBTF9QU19DQUxMSU5DX05VTSAgCTQJCS8qIG1heCBudW1iZXIgb2YgcG9zc2libGUgY2F1c2VzICgyXmJpdHMpICovCi0jZGVmaW5lIFhDSEFMX1BTX0NBTExJTkNfU0hJRlQJMTYJCS8qIHBvc2l0aW9uIG9mIENBTExJTkMgYml0cyBpbiBQUywgc3RhcnRpbmcgZnJvbSBsc2JpdCAqLwotI2RlZmluZSBYQ0hBTF9QU19DQUxMSU5DX01BU0sgCTB4MDAwMzAwMDAJLyogbWFzayBvZiBiaXRzIGluIENBTExJTkMgZmllbGQgb2YgUFMgKi8KLS8qICBXT0UgZmllbGQ6ICAqLwotI2RlZmluZSBYQ0hBTF9QU19XT0VfQklUUyAJMQkJLyogbnVtYmVyIG9mIGJpdHMgaW4gV09FIGZpZWxkICovCi0jZGVmaW5lIFhDSEFMX1BTX1dPRV9OVU0gIAkyCQkvKiBtYXggbnVtYmVyIG9mIHBvc3NpYmxlIGNhdXNlcyAoMl5iaXRzKSAqLwotI2RlZmluZSBYQ0hBTF9QU19XT0VfU0hJRlQJMTgJCS8qIHBvc2l0aW9uIG9mIFdPRSBiaXRzIGluIFBTLCBzdGFydGluZyBmcm9tIGxzYml0ICovCi0jZGVmaW5lIFhDSEFMX1BTX1dPRV9NQVNLIAkweDAwMDQwMDAwCS8qIG1hc2sgb2YgYml0cyBpbiBXT0UgZmllbGQgb2YgUFMgKi8KLQotLyogIEVYQ0NBVVNFIChzcGVjaWFsIHJlZ2lzdGVyIG51bWJlciAyMzIpOiAgKi8KLSNkZWZpbmUgWENIQUxfRVhDQ0FVU0VfVkFMSURNQVNLCTB4MDAwMDAwM0YJLyogYml0cyBvZiBFWENDQVVTRSB0aGF0IGFyZSBkZWZpbmVkICovCi0vKiAgRVhDQ0FVU0UgZmllbGQ6ICAqLwotI2RlZmluZSBYQ0hBTF9FWENDQVVTRV9CSVRTIAkJNgkJLyogbnVtYmVyIG9mIGJpdHMgaW4gRVhDQ0FVU0UgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgWENIQUxfRVhDQ0FVU0VfTlVNICAJCTY0CQkvKiBtYXggbnVtYmVyIG9mIHBvc3NpYmxlIGNhdXNlcyAoMl5iaXRzKSAqLwotI2RlZmluZSBYQ0hBTF9FWENDQVVTRV9TSElGVAkJMAkJLyogcG9zaXRpb24gb2YgRVhDQ0FVU0UgYml0cyBpbiByZWdpc3Rlciwgc3RhcnRpbmcgZnJvbSBsc2JpdCAqLwotI2RlZmluZSBYQ0hBTF9FWENDQVVTRV9NQVNLIAkJMHgwMDAwMDAzRgkvKiBtYXNrIG9mIGJpdHMgaW4gRVhDQ0FVU0UgcmVnaXN0ZXIgKi8KLQotLyogIERFQlVHQ0FVU0UgKHNwZWNpYWwgcmVnaXN0ZXIgbnVtYmVyIDIzMyk6ICAqLwotI2RlZmluZSBYQ0hBTF9ERUJVR0NBVVNFX1ZBTElETUFTSwkweDAwMDAwMDNGCS8qIGJpdHMgb2YgREVCVUdDQVVTRSB0aGF0IGFyZSBkZWZpbmVkICovCi0vKiAgSUNPVU5UIGZpZWxkOiAgKi8KLSNkZWZpbmUgWENIQUxfREVCVUdDQVVTRV9JQ09VTlRfQklUUyAJMQkJLyogbnVtYmVyIG9mIGJpdHMgaW4gSUNPVU5UIGZpZWxkICovCi0jZGVmaW5lIFhDSEFMX0RFQlVHQ0FVU0VfSUNPVU5UX05VTSAgCTIJCS8qIG1heCBudW1iZXIgb2YgcG9zc2libGUgY2F1c2VzICgyXmJpdHMpICovCi0jZGVmaW5lIFhDSEFMX0RFQlVHQ0FVU0VfSUNPVU5UX1NISUZUCTAJCS8qIHBvc2l0aW9uIG9mIElDT1VOVCBiaXRzIGluIERFQlVHQ0FVU0UsIHN0YXJ0aW5nIGZyb20gbHNiaXQgKi8KLSNkZWZpbmUgWENIQUxfREVCVUdDQVVTRV9JQ09VTlRfTUFTSyAJMHgwMDAwMDAwMQkvKiBtYXNrIG9mIGJpdHMgaW4gSUNPVU5UIGZpZWxkIG9mIERFQlVHQ0FVU0UgKi8KLS8qICBJQlJFQUsgZmllbGQ6ICAqLwotI2RlZmluZSBYQ0hBTF9ERUJVR0NBVVNFX0lCUkVBS19CSVRTIAkxCQkvKiBudW1iZXIgb2YgYml0cyBpbiBJQlJFQUsgZmllbGQgKi8KLSNkZWZpbmUgWENIQUxfREVCVUdDQVVTRV9JQlJFQUtfTlVNICAJMgkJLyogbWF4IG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgKDJeYml0cykgKi8KLSNkZWZpbmUgWENIQUxfREVCVUdDQVVTRV9JQlJFQUtfU0hJRlQJMQkJLyogcG9zaXRpb24gb2YgSUJSRUFLIGJpdHMgaW4gREVCVUdDQVVTRSwgc3RhcnRpbmcgZnJvbSBsc2JpdCAqLwotI2RlZmluZSBYQ0hBTF9ERUJVR0NBVVNFX0lCUkVBS19NQVNLIAkweDAwMDAwMDAyCS8qIG1hc2sgb2YgYml0cyBpbiBJQlJFQUsgZmllbGQgb2YgREVCVUdDQVVTRSAqLwotLyogIERCUkVBSyBmaWVsZDogICovCi0jZGVmaW5lIFhDSEFMX0RFQlVHQ0FVU0VfREJSRUFLX0JJVFMgCTEJCS8qIG51bWJlciBvZiBiaXRzIGluIERCUkVBSyBmaWVsZCAqLwotI2RlZmluZSBYQ0hBTF9ERUJVR0NBVVNFX0RCUkVBS19OVU0gIAkyCQkvKiBtYXggbnVtYmVyIG9mIHBvc3NpYmxlIGNhdXNlcyAoMl5iaXRzKSAqLwotI2RlZmluZSBYQ0hBTF9ERUJVR0NBVVNFX0RCUkVBS19TSElGVAkyCQkvKiBwb3NpdGlvbiBvZiBEQlJFQUsgYml0cyBpbiBERUJVR0NBVVNFLCBzdGFydGluZyBmcm9tIGxzYml0ICovCi0jZGVmaW5lIFhDSEFMX0RFQlVHQ0FVU0VfREJSRUFLX01BU0sgCTB4MDAwMDAwMDQJLyogbWFzayBvZiBiaXRzIGluIERCUkVBSyBmaWVsZCBvZiBERUJVR0NBVVNFICovCi0vKiAgQlJFQUsgZmllbGQ6ICAqLwotI2RlZmluZSBYQ0hBTF9ERUJVR0NBVVNFX0JSRUFLX0JJVFMgCTEJCS8qIG51bWJlciBvZiBiaXRzIGluIEJSRUFLIGZpZWxkICovCi0jZGVmaW5lIFhDSEFMX0RFQlVHQ0FVU0VfQlJFQUtfTlVNICAJMgkJLyogbWF4IG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgKDJeYml0cykgKi8KLSNkZWZpbmUgWENIQUxfREVCVUdDQVVTRV9CUkVBS19TSElGVAkzCQkvKiBwb3NpdGlvbiBvZiBCUkVBSyBiaXRzIGluIERFQlVHQ0FVU0UsIHN0YXJ0aW5nIGZyb20gbHNiaXQgKi8KLSNkZWZpbmUgWENIQUxfREVCVUdDQVVTRV9CUkVBS19NQVNLIAkweDAwMDAwMDA4CS8qIG1hc2sgb2YgYml0cyBpbiBCUkVBSyBmaWVsZCBvZiBERUJVR0NBVVNFICovCi0vKiAgQlJFQUtOIGZpZWxkOiAgKi8KLSNkZWZpbmUgWENIQUxfREVCVUdDQVVTRV9CUkVBS05fQklUUyAJMQkJLyogbnVtYmVyIG9mIGJpdHMgaW4gQlJFQUtOIGZpZWxkICovCi0jZGVmaW5lIFhDSEFMX0RFQlVHQ0FVU0VfQlJFQUtOX05VTSAgCTIJCS8qIG1heCBudW1iZXIgb2YgcG9zc2libGUgY2F1c2VzICgyXmJpdHMpICovCi0jZGVmaW5lIFhDSEFMX0RFQlVHQ0FVU0VfQlJFQUtOX1NISUZUCTQJCS8qIHBvc2l0aW9uIG9mIEJSRUFLTiBiaXRzIGluIERFQlVHQ0FVU0UsIHN0YXJ0aW5nIGZyb20gbHNiaXQgKi8KLSNkZWZpbmUgWENIQUxfREVCVUdDQVVTRV9CUkVBS05fTUFTSyAJMHgwMDAwMDAxMAkvKiBtYXNrIG9mIGJpdHMgaW4gQlJFQUtOIGZpZWxkIG9mIERFQlVHQ0FVU0UgKi8KLS8qICBERUJVR0lOVCBmaWVsZDogICovCi0jZGVmaW5lIFhDSEFMX0RFQlVHQ0FVU0VfREVCVUdJTlRfQklUUyAJMQkJLyogbnVtYmVyIG9mIGJpdHMgaW4gREVCVUdJTlQgZmllbGQgKi8KLSNkZWZpbmUgWENIQUxfREVCVUdDQVVTRV9ERUJVR0lOVF9OVU0gIAkyCQkvKiBtYXggbnVtYmVyIG9mIHBvc3NpYmxlIGNhdXNlcyAoMl5iaXRzKSAqLwotI2RlZmluZSBYQ0hBTF9ERUJVR0NBVVNFX0RFQlVHSU5UX1NISUZUCTUJCS8qIHBvc2l0aW9uIG9mIERFQlVHSU5UIGJpdHMgaW4gREVCVUdDQVVTRSwgc3RhcnRpbmcgZnJvbSBsc2JpdCAqLwotI2RlZmluZSBYQ0hBTF9ERUJVR0NBVVNFX0RFQlVHSU5UX01BU0sgCTB4MDAwMDAwMjAJLyogbWFzayBvZiBiaXRzIGluIERFQlVHSU5UIGZpZWxkIG9mIERFQlVHQ0FVU0UgKi8KLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJCUlTQQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBYQ0hBTF9IQVZFX0RFTlNJVFkJCTEJLyogMSBpZiBkZW5zaXR5IG9wdGlvbiBjb25maWd1cmVkLCAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX0xPT1BTCQkxCS8qIDEgaWYgemVyby1vdmVyaGVhZCBsb29wcyBvcHRpb24gY29uZmlndXJlZCwgMCBvdGhlcndpc2UgKi8KLS8qICBNaXNjIGluc3RydWN0aW9uczogICovCi0jZGVmaW5lIFhDSEFMX0hBVkVfTlNBCQkJMAkvKiAxIGlmIE5TQS9OU0FVIGluc3RydWN0aW9ucyBvcHRpb24gY29uZmlndXJlZCwgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfSEFWRV9NSU5NQVgJCTAJLyogMSBpZiBNSU4vTUFYIGluc3RydWN0aW9ucyBvcHRpb24gY29uZmlndXJlZCwgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfSEFWRV9TRVhUCQkJMAkvKiAxIGlmIHNpZ24tZXh0ZW5kIGluc3RydWN0aW9uIG9wdGlvbiBjb25maWd1cmVkLCAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX0NMQU1QUwkJMAkvKiAxIGlmIENMQU1QUyBpbnN0cnVjdGlvbiBvcHRpb24gY29uZmlndXJlZCwgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfSEFWRV9NQUMxNgkJMAkvKiAxIGlmIE1BQzE2IG9wdGlvbiBjb25maWd1cmVkLCAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX01VTDE2CQkwCS8qIDEgaWYgMTYtYml0IGludGVnZXIgbXVsdGlwbHkgb3B0aW9uIGNvbmZpZ3VyZWQsIDAgb3RoZXJ3aXNlICovCi0vKiNkZWZpbmUgWENIQUxfSEFWRV9QT1BDCQkwKi8JLyogMSBpZiBDUkMgaW5zdHJ1Y3Rpb24gb3B0aW9uIGNvbmZpZ3VyZWQsIDAgb3RoZXJ3aXNlICovCi0vKiNkZWZpbmUgWENIQUxfSEFWRV9DUkMJCTAqLwkvKiAxIGlmIFBPUEMgaW5zdHJ1Y3Rpb24gb3B0aW9uIGNvbmZpZ3VyZWQsIDAgb3RoZXJ3aXNlICovCi0KLSNkZWZpbmUgWENIQUxfSEFWRV9TUEVDVUxBVElPTgkJMAkvKiAxIGlmIHNwZWN1bGF0aW9uIG9wdGlvbiBjb25maWd1cmVkLCAwIG90aGVyd2lzZSAqLwotLyojZGVmaW5lIFhDSEFMX0hBVkVfTVBfU1lOQwkJMCovCS8qIDEgaWYgbXVsdGlwcm9jZXNzb3Igc3luYy4gb3B0aW9uIGNvbmZpZ3VyZWQsIDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0hBVkVfUFJJRAkJCTAJLyogMSBpZiBwcm9jZXNzb3IgSUQgcmVnaXN0ZXIgY29uZmlndXJlZCwgMCBvdGhlcndpc2UgKi8KLQotI2RlZmluZSBYQ0hBTF9OVU1fTUlTQ19SRUdTCQkyCS8qIG51bWJlciBvZiBtaXNjZWxsYW5lb3VzIHJlZ2lzdGVycyAoMC4uNCkgKi8KLQotLyogIFRoZXNlIHJlbGF0ZSBhIGJpdCBtb3JlIHRvIFRJRTogICovCi0jZGVmaW5lIFhDSEFMX0hBVkVfQk9PTEVBTlMJCTAJLyogMSBpZiBib29sZWFucyBvcHRpb24gY29uZmlndXJlZCwgMCBvdGhlcndpc2UgKi8KLSNkZWZpbmUgWENIQUxfSEFWRV9NVUwzMgkJMAkvKiAxIGlmIDMyLWJpdCBpbnRlZ2VyIG11bHRpcGx5IG9wdGlvbiBjb25maWd1cmVkLCAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX01VTDMyX0hJR0gJCTAJLyogMSBpZiBNVUwzMiBvcHRpb24gaW5jbHVkZXMgTVVMVUggYW5kIE1VTFNILCAwIG90aGVyd2lzZSAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX0ZQCQkJMAkvKiAxIGlmIGZsb2F0aW5nIHBvaW50IG9wdGlvbiBjb25maWd1cmVkLCAwIG90aGVyd2lzZSAqLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJCURFUklWRUQKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiBYQ0hBTF9IQVZFX0JFCi0jZGVmaW5lIFhDSEFMX0lOU1RfSUxMTgkJCTB4RDYwRgkJLyogMi1ieXRlIGlsbGVnYWwgaW5zdHJ1Y3Rpb24sIG1zYi1maXJzdCAqLwotI2RlZmluZSBYQ0hBTF9JTlNUX0lMTE5fQllURTAJCTB4RDYJCS8qIDItYnl0ZSBpbGxlZ2FsIGluc3RydWN0aW9uLCAxc3QgYnl0ZSAqLwotI2RlZmluZSBYQ0hBTF9JTlNUX0lMTE5fQllURTEJCTB4MEYJCS8qIDItYnl0ZSBpbGxlZ2FsIGluc3RydWN0aW9uLCAybmQgYnl0ZSAqLwotI2Vsc2UKLSNkZWZpbmUgWENIQUxfSU5TVF9JTExOCQkJMHhGMDZECQkvKiAyLWJ5dGUgaWxsZWdhbCBpbnN0cnVjdGlvbiwgbHNiLWZpcnN0ICovCi0jZGVmaW5lIFhDSEFMX0lOU1RfSUxMTl9CWVRFMAkJMHg2RAkJLyogMi1ieXRlIGlsbGVnYWwgaW5zdHJ1Y3Rpb24sIDFzdCBieXRlICovCi0jZGVmaW5lIFhDSEFMX0lOU1RfSUxMTl9CWVRFMQkJMHhGMAkJLyogMi1ieXRlIGlsbGVnYWwgaW5zdHJ1Y3Rpb24sIDJuZCBieXRlICovCi0jZW5kaWYKLS8qICBCZWxvbmdzIGluIHh0ZW5zYS9oYWwuaDogICovCi0jZGVmaW5lIFhUSEFMX0lOU1RfSUxMCQkJMHgwMDAwMDAJLyogMy1ieXRlIGlsbGVnYWwgaW5zdHJ1Y3Rpb24gKi8KLQotCi0vKgotICogIEJlY2F1c2UgaW5mb3JtYXRpb24gYXMgdG8gZXhhY3RseSB3aGljaCBoYXJkd2FyZSByZWxlYXNlIGlzIHRhcmdldGVkCi0gKiAgYnkgYSBnaXZlbiBzb2Z0d2FyZSBidWlsZCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZSwgY29tcGlsZS10aW1lIEhBTAotICogIEhhcmR3YXJlLVJlbGVhc2UgIl9BVCIgbWFjcm9zIGFyZSBmdXp6eSAocmV0dXJuIDAsIDEsIG9yIFhDSEFMX01BWUJFKToKLSAqLwotI2lmbmRlZiBYQ0hBTF9IV19SRUxFQVNFX01BSk9SCi0jIGRlZmluZSBYQ0hBTF9IV19DT05GSUdJRF9SRUxJQUJMRQkwCi0jZW5kaWYKLSNpZiBYQ0hBTF9IV19DT05GSUdJRF9SRUxJQUJMRQotIyBkZWZpbmUgWENIQUxfSFdfUkVMRUFTRV9BVF9PUl9CRUxPVyhtYWpvcixtaW5vcikJKFhUSEFMX1JFTF9MRSggWENIQUxfSFdfUkVMRUFTRV9NQUpPUixYQ0hBTF9IV19SRUxFQVNFX01JTk9SLCBtYWpvcixtaW5vciApID8gMSA6IDApCi0jIGRlZmluZSBYQ0hBTF9IV19SRUxFQVNFX0FUX09SX0FCT1ZFKG1ham9yLG1pbm9yKQkoWFRIQUxfUkVMX0dFKCBYQ0hBTF9IV19SRUxFQVNFX01BSk9SLFhDSEFMX0hXX1JFTEVBU0VfTUlOT1IsIG1ham9yLG1pbm9yICkgPyAxIDogMCkKLSMgZGVmaW5lIFhDSEFMX0hXX1JFTEVBU0VfQVQobWFqb3IsbWlub3IpCQkoWFRIQUxfUkVMX0VRKCBYQ0hBTF9IV19SRUxFQVNFX01BSk9SLFhDSEFMX0hXX1JFTEVBU0VfTUlOT1IsIG1ham9yLG1pbm9yICkgPyAxIDogMCkKLSMgZGVmaW5lIFhDSEFMX0hXX1JFTEVBU0VfTUFKT1JfQVQobWFqb3IpCQkoKFhDSEFMX0hXX1JFTEVBU0VfTUFKT1IgPT0gKG1ham9yKSkgPyAxIDogMCkKLSNlbHNlCi0jIGRlZmluZSBYQ0hBTF9IV19SRUxFQVNFX0FUX09SX0JFTE9XKG1ham9yLG1pbm9yKQkoICgobWFqb3IpIDwgMTA0MCAmJiBYQ0hBTF9IQVZFX1hFQTIpID8gMCBcCi0JCQkJCQkJOiAoKG1ham9yKSA+IDEwNTAgJiYgWENIQUxfSEFWRV9YRUExKSA/IDEgXAotCQkJCQkJCTogWFRIQUxfTUFZQkUgKQotIyBkZWZpbmUgWENIQUxfSFdfUkVMRUFTRV9BVF9PUl9BQk9WRShtYWpvcixtaW5vcikJKCAoKG1ham9yKSA+PSAyMDAwICYmIFhDSEFMX0hBVkVfWEVBMSkgPyAwIFwKLQkJCQkJCQk6IChYVEhBTF9SRUxfTEUobWFqb3IsbWlub3IsIDEwNDAsMCkgJiYgWENIQUxfSEFWRV9YRUEyKSA/IDEgXAotCQkJCQkJCTogWFRIQUxfTUFZQkUgKQotIyBkZWZpbmUgWENIQUxfSFdfUkVMRUFTRV9BVChtYWpvcixtaW5vcikJCSggKCgobWFqb3IpIDwgMTA0MCAmJiBYQ0hBTF9IQVZFX1hFQTIpIHx8IFwKLQkJCQkJCQkgICAoKG1ham9yKSA+PSAyMDAwICYmIFhDSEFMX0hBVkVfWEVBMSkpID8gMCA6IFhUSEFMX01BWUJFKQotIyBkZWZpbmUgWENIQUxfSFdfUkVMRUFTRV9NQUpPUl9BVChtYWpvcikJCVhDSEFMX0hXX1JFTEVBU0VfQVQobWFqb3IsMCkKLSNlbmRpZgotCi0vKgotICogIFNwZWNpZmljIGVycmF0YToKLSAqLwotCi0vKgotICogIEVycmF0dW0gVDEwMjAuSDEzLCBUMTAzMC5INywgVDEwNDAuSDEwLCBUMTA1MC5INCAoZml4ZWQgaW4gVDEwNDAuMyBhbmQgVDEwNTAuMTsKLSAqICByZWxldmFudCBvbmx5IGluIFhFQTEsIGtlcm5lbC12ZWN0b3IgbW9kZSwgbGV2ZWwtb25lIGludGVycnVwdHMgYW5kIG92ZXJmbG93cyBlbmFibGVkKToKLSAqLwotI2RlZmluZSBYQ0hBTF9NQVlIQVZFX0VSUkFUVU1fWEVBMUtXSU4JKFhDSEFMX0hBVkVfWEVBMSAmJiBcCi0JCQkJCSAoWENIQUxfSFdfUkVMRUFTRV9BVF9PUl9CRUxPVygxMDQwLDIpICE9IDAgXAotCQkJCQkgIHx8IFhDSEFMX0hXX1JFTEVBU0VfQVQoMTA1MCwwKSkpCi0KLQotCi0jZW5kaWYgLypYVEVOU0FfQ09ORklHX0NPUkVfSCovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29uZmlnLWxpbnV4X2JlL2RlZnMuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29uZmlnLWxpbnV4X2JlL2RlZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdjNThiMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2NvbmZpZy1saW51eF9iZS9kZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyogRGVmaW5pdGlvbnMgZm9yIFh0ZW5zYSBpbnN0cnVjdGlvbnMsIHR5cGVzLCBhbmQgcHJvdG9zLiAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAzIFRlbnNpbGljYSwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMi4xIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKgotICogRnVydGhlciwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSB0aGF0IGl0IGlzCi0gKiBmcmVlIG9mIHRoZSByaWdodGZ1bCBjbGFpbSBvZiBhbnkgdGhpcmQgcGVyc29uIHJlZ2FyZGluZyBpbmZyaW5nZW1lbnQKLSAqIG9yIHRoZSBsaWtlLiAgQW55IGxpY2Vuc2UgcHJvdmlkZWQgaGVyZWluLCB3aGV0aGVyIGltcGxpZWQgb3IKLSAqIG90aGVyd2lzZSwgYXBwbGllcyBvbmx5IHRvIHRoaXMgc29mdHdhcmUgZmlsZS4gIFBhdGVudCBsaWNlbnNlcywgaWYKLSAqIGFueSwgcHJvdmlkZWQgaGVyZWluIGRvIG5vdCBhcHBseSB0byBjb21iaW5hdGlvbnMgb2YgdGhpcyBwcm9ncmFtIHdpdGgKLSAqIG90aGVyIHNvZnR3YXJlLCBvciBhbnkgb3RoZXIgcHJvZHVjdCB3aGF0c29ldmVyLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsCi0gKiBVU0EuCi0gKi8KLQotLyogRG8gbm90IG1vZGlmeS4gVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4qLwotCi0jaWZuZGVmIF9YVEVOU0FfQkFTRV9IRUFERVIKLSNkZWZpbmUgX1hURU5TQV9CQVNFX0hFQURFUgotCi0jaWZkZWYgX19YVEVOU0FfXwotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fWENDX18pCi0KLSNkZWZpbmUgTDhVSV9BU00oYXJyLCBhcnMsIGltbSkgeyBcCi0gIF9fYXNtX18gdm9sYXRpbGUoImw4dWkgJTAsICUxLCAlMiIgOiAiPWEiIChhcnIpIDogImEiIChhcnMpICwgImkiIChpbW0pKTsgXAotfQotCi0jZGVmaW5lIFhUX0w4VUkoYXJzLCBpbW0pIFwKLSh7IFwKLSAgdW5zaWduZWQgY2hhciBfYXJyOyBcCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9hcnMgPSBhcnM7IFwKLSAgTDhVSV9BU00oX2FyciwgX2FycywgaW1tKTsgXAotICBfYXJyOyBcCi19KQotCi0jZGVmaW5lIEwxNlVJX0FTTShhcnIsIGFycywgaW1tKSB7IFwKLSAgX19hc21fXyB2b2xhdGlsZSgibDE2dWkgJTAsICUxLCAlMiIgOiAiPWEiIChhcnIpIDogImEiIChhcnMpICwgImkiIChpbW0pKTsgXAotfQotCi0jZGVmaW5lIFhUX0wxNlVJKGFycywgaW1tKSBcCi0oeyBcCi0gIHVuc2lnbmVkIHNob3J0IF9hcnI7IFwKLSAgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9hcnMgPSBhcnM7IFwKLSAgTDE2VUlfQVNNKF9hcnIsIF9hcnMsIGltbSk7IFwKLSAgX2FycjsgXAotfSkKLQotI2RlZmluZSBMMTZTSV9BU00oYXJyLCBhcnMsIGltbSkge1wKLSAgX19hc21fXyB2b2xhdGlsZSgibDE2c2kgJTAsICUxLCAlMiIgOiAiPWEiIChhcnIpIDogImEiIChhcnMpICwgImkiIChpbW0pKTsgXAotfQotCi0jZGVmaW5lIFhUX0wxNlNJKGFycywgaW1tKSBcCi0oeyBcCi0gIHNpZ25lZCBzaG9ydCBfYXJyOyBcCi0gIGNvbnN0IHNpZ25lZCBzaG9ydCAqX2FycyA9IGFyczsgXAotICBMMTZTSV9BU00oX2FyciwgX2FycywgaW1tKTsgXAotICBfYXJyOyBcCi19KQotCi0jZGVmaW5lIEwzMklfQVNNKGFyciwgYXJzLCBpbW0pIHsgXAotICBfX2FzbV9fIHZvbGF0aWxlKCJsMzJpICUwLCAlMSwgJTIiIDogIj1hIiAoYXJyKSA6ICJhIiAoYXJzKSAsICJpIiAoaW1tKSk7IFwKLX0KLQotI2RlZmluZSBYVF9MMzJJKGFycywgaW1tKSBcCi0oeyBcCi0gIHVuc2lnbmVkIF9hcnI7IFwKLSAgY29uc3QgdW5zaWduZWQgKl9hcnMgPSBhcnM7IFwKLSAgTDMySV9BU00oX2FyciwgX2FycywgaW1tKTsgXAotICBfYXJyOyBcCi19KQotCi0jZGVmaW5lIFM4SV9BU00oYXJyLCBhcnMsIGltbSkge1wKLSAgX19hc21fXyB2b2xhdGlsZSgiczhpICUwLCAlMSwgJTIiIDogOiAiYSIgKGFyciksICJhIiAoYXJzKSAsICJpIiAoaW1tKSA6ICJtZW1vcnkiICk7IFwKLX0KLQotI2RlZmluZSBYVF9TOEkoYXJyLCBhcnMsIGltbSkgXAotKHsgXAotICBzaWduZWQgY2hhciBfYXJyID0gYXJyOyBcCi0gIGNvbnN0IHNpZ25lZCBjaGFyICpfYXJzID0gYXJzOyBcCi0gIFM4SV9BU00oX2FyciwgX2FycywgaW1tKTsgXAotfSkKLQotI2RlZmluZSBTMTZJX0FTTShhcnIsIGFycywgaW1tKSB7XAotICBfX2FzbV9fIHZvbGF0aWxlKCJzMTZpICUwLCAlMSwgJTIiIDogOiAiYSIgKGFyciksICJhIiAoYXJzKSAsICJpIiAoaW1tKSA6ICJtZW1vcnkiICk7IFwKLX0KLQotI2RlZmluZSBYVF9TMTZJKGFyciwgYXJzLCBpbW0pIFwKLSh7IFwKLSAgc2lnbmVkIHNob3J0IF9hcnIgPSBhcnI7IFwKLSAgY29uc3Qgc2lnbmVkIHNob3J0ICpfYXJzID0gYXJzOyBcCi0gIFMxNklfQVNNKF9hcnIsIF9hcnMsIGltbSk7IFwKLX0pCi0KLSNkZWZpbmUgUzMySV9BU00oYXJyLCBhcnMsIGltbSkgeyBcCi0gIF9fYXNtX18gdm9sYXRpbGUoInMzMmkgJTAsICUxLCAlMiIgOiA6ICJhIiAoYXJyKSwgImEiIChhcnMpICwgImkiIChpbW0pIDogIm1lbW9yeSIgKTsgXAotfQotCi0jZGVmaW5lIFhUX1MzMkkoYXJyLCBhcnMsIGltbSkgXAotKHsgXAotICBzaWduZWQgaW50IF9hcnIgPSBhcnI7IFwKLSAgY29uc3Qgc2lnbmVkIGludCAqX2FycyA9IGFyczsgXAotICBTMzJJX0FTTShfYXJyLCBfYXJzLCBpbW0pOyBcCi19KQotCi0jZGVmaW5lIEFERElfQVNNKGFydCwgYXJzLCBpbW0pIHtcCi0gICBfX2FzbV9fICgiYWRkaSAlMCwgJTEsICUyIiA6ICI9YSIgKGFydCkgOiAiYSIgKGFycyksICJpIiAoaW1tKSk7IFwKLX0KLQotI2RlZmluZSBYVF9BRERJKGFycywgaW1tKSBcCi0oeyBcCi0gICB1bnNpZ25lZCBfYXJ0OyBcCi0gICB1bnNpZ25lZCBfYXJzID0gYXJzOyBcCi0gICBBRERJX0FTTShfYXJ0LCBfYXJzLCBpbW0pOyBcCi0gICBfYXJ0OyBcCi19KQotCi0jZGVmaW5lIEFCU19BU00oYXJyLCBhcnQpIHtcCi0gICBfX2FzbV9fICgiYWJzICUwLCAlMSIgOiAiPWEiIChhcnIpIDogImEiIChhcnQpKTsgXAotfQotCi0jZGVmaW5lIFhUX0FCUyhhcnQpIFwKLSh7IFwKLSAgIHVuc2lnbmVkIF9hcnI7IFwKLSAgIHNpZ25lZCBfYXJ0ID0gYXJ0OyBcCi0gICBBQlNfQVNNKF9hcnIsIF9hcnQpOyBcCi0gICBfYXJyOyBcCi19KQotCi0vKiBOb3RlOiBJbiB0aGUgZm9sbG93aW5nIG1hY3JvcyB0aGF0IHJlZmVyZW5jZSBTQVIsIHRoZSBtYWdpYyAic3RhdGUiCi0gICByZWdpc3RlciBpcyB1c2VkIHRvIGNhcHR1cmUgdGhlIGRlcGVuZGVuY3kgb24gU0FSLiAgVGhpcyBpcyBiZWNhdXNlCi0gICBTQVIgaXMgYSA1LWJpdCByZWdpc3RlciBhbmQgdGh1cyB0aGVyZSBhcmUgbm8gQyB0eXBlcyB0aGF0IGNhbiBiZQotICAgdXNlZCB0byByZXByZXNlbnQgaXQuICBJdCBkb2Vzbid0IGFwcGVhciB0aGF0IHRoZSBTQVIgcmVnaXN0ZXIgaXMKLSAgIGV2ZW4gcmVsZXZhbnQgdG8gR0NDLCBidXQgaXQgaXMgbWFya2VkIGFzICJjbG9iYmVyZWQiIGp1c3QgaW4KLSAgIGNhc2UuICAqLwotCi0jZGVmaW5lIFNSQ19BU00oYXJyLCBhcnMsIGFydCkge1wKLSAgIHJlZ2lzdGVyIGludCBfeHRfc2FyIF9fYXNtX18gKCJzdGF0ZSIpOyBcCi0gICBfX2FzbV9fICgic3JjICUwLCAlMSwgJTIiIFwKLQkgICAgOiAiPWEiIChhcnIpIDogImEiIChhcnMpLCAiYSIgKGFydCksICJ0IiAoX3h0X3NhcikpOyBcCi19Ci0KLSNkZWZpbmUgWFRfU1JDKGFycywgYXJ0KSBcCi0oeyBcCi0gICB1bnNpZ25lZCBfYXJyOyBcCi0gICB1bnNpZ25lZCBfYXJzID0gYXJzOyBcCi0gICB1bnNpZ25lZCBfYXJ0ID0gYXJ0OyBcCi0gICBTUkNfQVNNKF9hcnIsIF9hcnMsIF9hcnQpOyBcCi0gICBfYXJyOyBcCi19KQotCi0jZGVmaW5lIFNTUl9BU00oYXJzKSB7XAotICAgcmVnaXN0ZXIgaW50IF94dF9zYXIgX19hc21fXyAoInN0YXRlIik7IFwKLSAgIF9fYXNtX18gKCJzc3IgJTEiIDogIj10IiAoX3h0X3NhcikgOiAiYSIgKGFycykgOiAic2FyIik7IFwKLX0KLQotI2RlZmluZSBYVF9TU1IoYXJzKSBcCi0oeyBcCi0gICB1bnNpZ25lZCBfYXJzID0gYXJzOyBcCi0gICBTU1JfQVNNKF9hcnMpOyBcCi19KQotCi0jZGVmaW5lIFNTTF9BU00oYXJzKSB7XAotICAgcmVnaXN0ZXIgaW50IF94dF9zYXIgX19hc21fXyAoInN0YXRlIik7IFwKLSAgIF9fYXNtX18gKCJzc2wgJTEiIDogIj10IiAoX3h0X3NhcikgOiAiYSIgKGFycykgOiAic2FyIik7IFwKLX0KLQotI2RlZmluZSBYVF9TU0woYXJzKSBcCi0oeyBcCi0gICB1bnNpZ25lZCBfYXJzID0gYXJzOyBcCi0gICBTU0xfQVNNKF9hcnMpOyBcCi19KQotCi0jZGVmaW5lIFNTQThCX0FTTShhcnMpIHtcCi0gICByZWdpc3RlciBpbnQgX3h0X3NhciBfX2FzbV9fICgic3RhdGUiKTsgXAotICAgX19hc21fXyAoInNzYThiICUxIiA6ICI9dCIgKF94dF9zYXIpIDogImEiIChhcnMpIDogInNhciIpOyBcCi19Ci0KLSNkZWZpbmUgWFRfU1NBOEIoYXJzKSBcCi0oeyBcCi0gICB1bnNpZ25lZCBfYXJzID0gYXJzOyBcCi0gICBTU0E4Ql9BU00oX2Fycyk7IFwKLX0pCi0KLSNkZWZpbmUgU1NBOExfQVNNKGFycykge1wKLSAgIHJlZ2lzdGVyIGludCBfeHRfc2FyIF9fYXNtX18gKCJzdGF0ZSIpOyBcCi0gICBfX2FzbV9fICgic3NhOGwgJTEiIDogIj10IiAoX3h0X3NhcikgOiAiYSIgKGFycykgOiAic2FyIik7IFwKLX0KLQotI2RlZmluZSBYVF9TU0E4TChhcnMpIFwKLSh7IFwKLSAgIHVuc2lnbmVkIF9hcnMgPSBhcnM7IFwKLSAgIFNTQThMX0FTTShfYXJzKTsgXAotfSkKLQotI2RlZmluZSBTU0FJX0FTTShpbW0pIHtcCi0gICByZWdpc3RlciBpbnQgX3h0X3NhciBfX2FzbV9fICgic3RhdGUiKTsgXAotICAgX19hc21fXyAoInNzYWkgJTEiIDogIj10IiAoX3h0X3NhcikgOiAiaSIgKGltbSkgOiAic2FyIik7IFwKLX0KLQotI2RlZmluZSBYVF9TU0FJKGltbSkgXAotKHsgXAotICAgU1NBSV9BU00oaW1tKTsgXAotfSkKLQotCi0KLQotCi0KLQotCi0jZW5kaWYgLyogX19HTlVDX18gJiYgIV9fWENDX18gKi8KLQotI2lmZGVmIF9fWENDX18KLQotLyogQ29yZSBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyAqLwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX1RJRV9MOFVJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBhcnMsIGltbWVkaWF0ZSBpbW0pOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9USUVfTDE2VUkoY29uc3QgdW5zaWduZWQgc2hvcnQgKiBhcnMsIGltbWVkaWF0ZSBpbW0pOwotZXh0ZXJuIHNpZ25lZCBzaG9ydCBfVElFX0wxNlNJKGNvbnN0IHNpZ25lZCBzaG9ydCAqIGFycywgaW1tZWRpYXRlIGltbSk7Ci1leHRlcm4gdW5zaWduZWQgX1RJRV9MMzJJKGNvbnN0IHVuc2lnbmVkICogYXJzLCBpbW1lZGlhdGUgaW1tKTsKLWV4dGVybiB2b2lkIF9USUVfUzhJKHVuc2lnbmVkIGNoYXIgYXJyLCB1bnNpZ25lZCBjaGFyICogYXJzLCBpbW1lZGlhdGUgaW1tKTsKLWV4dGVybiB2b2lkIF9USUVfUzE2SSh1bnNpZ25lZCBzaG9ydCBhcnIsIHVuc2lnbmVkIHNob3J0ICogYXJzLCBpbW1lZGlhdGUgaW1tKTsKLWV4dGVybiB2b2lkIF9USUVfUzMySSh1bnNpZ25lZCBhcnIsIHVuc2lnbmVkICogYXJzLCBpbW1lZGlhdGUgaW1tKTsKLQotI2RlZmluZSBYVF9MOFVJICBfVElFX0w4VUkKLSNkZWZpbmUgWFRfTDE2VUkgX1RJRV9MMTZVSQotI2RlZmluZSBYVF9MMTZTSSBfVElFX0wxNlNJCi0jZGVmaW5lIFhUX0wzMkkgIF9USUVfTDMySQotI2RlZmluZSBYVF9TOEkgICBfVElFX1M4SQotI2RlZmluZSBYVF9TMTZJICBfVElFX1MxNkkKLSNkZWZpbmUgWFRfUzMySSAgX1RJRV9TMzJJCi0KLS8qIEFkZC1pbW1lZGlhdGUgaW5zdHJ1Y3Rpb24gKi8KLWV4dGVybiB1bnNpZ25lZCBfVElFX0FEREkodW5zaWduZWQgYXJzLCBpbW1lZGlhdGUgaW1tKTsKLSNkZWZpbmUgWFRfQURESSAgX1RJRV9BRERJCi0KLS8qIEFic29sdXRlIHZhbHVlIGluc3RydWN0aW9uICovCi1leHRlcm4gdW5zaWduZWQgX1RJRV9BQlMoaW50IGFydCk7Ci0jZGVmaW5lIFhUX0FCUyBfVElFX0FCUwotCi0vKiBmdW5uZWwgc2hpZnQgaW5zdHJ1Y3Rpb25zICovCi1leHRlcm4gdW5zaWduZWQgX1RJRV9TUkModW5zaWduZWQgYXJzLCB1bnNpZ25lZCBhcnQpOwotI2RlZmluZSBYVF9TUkMgX1RJRV9TUkMKLWV4dGVybiB2b2lkIF9USUVfU1NSKHVuc2lnbmVkIGFycyk7Ci0jZGVmaW5lIFhUX1NTUiBfVElFX1NTUgotZXh0ZXJuIHZvaWQgX1RJRV9TU0wodW5zaWduZWQgYXJzKTsKLSNkZWZpbmUgWFRfU1NMIF9USUVfU1NMCi1leHRlcm4gdm9pZCBfVElFX1NTQThCKHVuc2lnbmVkIGFycyk7Ci0jZGVmaW5lIFhUX1NTQThCIF9USUVfU1NBOEIKLWV4dGVybiB2b2lkIF9USUVfU1NBOEwodW5zaWduZWQgYXJzKTsKLSNkZWZpbmUgWFRfU1NBOEwgX1RJRV9TU0E4TAotZXh0ZXJuIHZvaWQgX1RJRV9TU0FJKGltbWVkaWF0ZSBpbW0pOwotI2RlZmluZSBYVF9TU0FJIF9USUVfU1NBSQotCi0KLSNlbmRpZiAvKiBfX1hDQ19fICovCi0KLSNlbmRpZiAvKiBfX1hURU5TQV9fICovCi0jZW5kaWYgLyogIV9YVEVOU0FfQkFTRV9IRUFERVIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29uZmlnLWxpbnV4X2JlL3NwZWNyZWcuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29uZmlnLWxpbnV4X2JlL3NwZWNyZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE0MTA2YS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2NvbmZpZy1saW51eF9iZS9zcGVjcmVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogWHRlbnNhIFNwZWNpYWwgUmVnaXN0ZXIgc3ltYm9saWMgbmFtZXMKLSAqLwotCi0vKiAkSWQ6IHNwZWNyZWcuaCx2IDEuMiAyMDAzLzAzLzA3IDE5OjE1OjE4IGpvZXRheWxvciBFeHAgJCAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAzIFRlbnNpbGljYSwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMi4xIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKgotICogRnVydGhlciwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSB0aGF0IGl0IGlzCi0gKiBmcmVlIG9mIHRoZSByaWdodGZ1bCBjbGFpbSBvZiBhbnkgdGhpcmQgcGVyc29uIHJlZ2FyZGluZyBpbmZyaW5nZW1lbnQKLSAqIG9yIHRoZSBsaWtlLiAgQW55IGxpY2Vuc2UgcHJvdmlkZWQgaGVyZWluLCB3aGV0aGVyIGltcGxpZWQgb3IKLSAqIG90aGVyd2lzZSwgYXBwbGllcyBvbmx5IHRvIHRoaXMgc29mdHdhcmUgZmlsZS4gIFBhdGVudCBsaWNlbnNlcywgaWYKLSAqIGFueSwgcHJvdmlkZWQgaGVyZWluIGRvIG5vdCBhcHBseSB0byBjb21iaW5hdGlvbnMgb2YgdGhpcyBwcm9ncmFtIHdpdGgKLSAqIG90aGVyIHNvZnR3YXJlLCBvciBhbnkgb3RoZXIgcHJvZHVjdCB3aGF0c29ldmVyLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsCi0gKiBVU0EuCi0gKi8KLQotI2lmbmRlZiBYVEVOU0FfU1BFQ1JFR19ICi0jZGVmaW5lIFhURU5TQV9TUEVDUkVHX0gKLQotLyogIEluY2x1ZGUgdGhlc2Ugc3BlY2lhbCByZWdpc3RlciBiaXRmaWVsZCBkZWZpbml0aW9ucywgZm9yIGhpc3RvcmljYWwgcmVhc29uczogICovCi0jaW5jbHVkZSA8eHRlbnNhL2NvcmViaXRzLmg+Ci0KLQotLyogIFNwZWNpYWwgcmVnaXN0ZXJzOiAgKi8KLSNkZWZpbmUgTEJFRwkJMAotI2RlZmluZSBMRU5ECQkxCi0jZGVmaW5lIExDT1VOVAkJMgotI2RlZmluZSBTQVIJCTMKLSNkZWZpbmUgV0lORE9XQkFTRQk3MgotI2RlZmluZSBXSU5ET1dTVEFSVAk3MwotI2RlZmluZSBQVEVWQUREUgk4MwotI2RlZmluZSBSQVNJRAkJOTAKLSNkZWZpbmUgSVRMQkNGRwkJOTEKLSNkZWZpbmUgRFRMQkNGRwkJOTIKLSNkZWZpbmUgSUJSRUFLRU5BQkxFCTk2Ci0jZGVmaW5lIEREUgkJMTA0Ci0jZGVmaW5lIElCUkVBS0FfMAkxMjgKLSNkZWZpbmUgSUJSRUFLQV8xCTEyOQotI2RlZmluZSBEQlJFQUtBXzAJMTQ0Ci0jZGVmaW5lIERCUkVBS0FfMQkxNDUKLSNkZWZpbmUgREJSRUFLQ18wCTE2MAotI2RlZmluZSBEQlJFQUtDXzEJMTYxCi0jZGVmaW5lIEVQQ18xCQkxNzcKLSNkZWZpbmUgRVBDXzIJCTE3OAotI2RlZmluZSBFUENfMwkJMTc5Ci0jZGVmaW5lIEVQQ180CQkxODAKLSNkZWZpbmUgREVQQwkJMTkyCi0jZGVmaW5lIEVQU18yCQkxOTQKLSNkZWZpbmUgRVBTXzMJCTE5NQotI2RlZmluZSBFUFNfNAkJMTk2Ci0jZGVmaW5lIEVYQ1NBVkVfMQkyMDkKLSNkZWZpbmUgRVhDU0FWRV8yCTIxMAotI2RlZmluZSBFWENTQVZFXzMJMjExCi0jZGVmaW5lIEVYQ1NBVkVfNAkyMTIKLSNkZWZpbmUgSU5URVJSVVBUCTIyNgotI2RlZmluZSBJTlRFTkFCTEUJMjI4Ci0jZGVmaW5lIFBTCQkyMzAKLSNkZWZpbmUgRVhDQ0FVU0UJMjMyCi0jZGVmaW5lIERFQlVHQ0FVU0UJMjMzCi0jZGVmaW5lIENDT1VOVAkJMjM0Ci0jZGVmaW5lIElDT1VOVAkJMjM2Ci0jZGVmaW5lIElDT1VOVExFVkVMCTIzNwotI2RlZmluZSBFWENWQUREUgkyMzgKLSNkZWZpbmUgQ0NPTVBBUkVfMAkyNDAKLSNkZWZpbmUgQ0NPTVBBUkVfMQkyNDEKLSNkZWZpbmUgQ0NPTVBBUkVfMgkyNDIKLSNkZWZpbmUgTUlTQ19SRUdfMAkyNDQKLSNkZWZpbmUgTUlTQ19SRUdfMQkyNDUKLQotLyogIFNwZWNpYWwgY2FzZXMgKGJhc2VzIG9mIHNwZWNpYWwgcmVnaXN0ZXIgc2VyaWVzKTogICovCi0jZGVmaW5lIElCUkVBS0EJCTEyOAotI2RlZmluZSBEQlJFQUtBCQkxNDQKLSNkZWZpbmUgREJSRUFLQwkJMTYwCi0jZGVmaW5lIEVQQwkJMTc2Ci0jZGVmaW5lIEVQUwkJMTkyCi0jZGVmaW5lIEVYQ1NBVkUJCTIwOAotI2RlZmluZSBDQ09NUEFSRQkyNDAKLQotLyogIFNwZWNpYWwgbmFtZXMgZm9yIHJlYWQtb25seSBhbmQgd3JpdGUtb25seSBpbnRlcnJ1cHQgcmVnaXN0ZXJzOiAgKi8KLSNkZWZpbmUgSU5UUkVBRAkJMjI2Ci0jZGVmaW5lIElOVFNFVAkJMjI2Ci0jZGVmaW5lIElOVENMRUFSCTIyNwotCi0jZW5kaWYgLyogWFRFTlNBX1NQRUNSRUdfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2NvbmZpZy1saW51eF9iZS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29uZmlnLWxpbnV4X2JlL3N5c3RlbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjlkNGQzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29uZmlnLWxpbnV4X2JlL3N5c3RlbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gKiB4dGVuc2EvY29uZmlnL3N5c3RlbS5oIC0tIEhBTCBkZWZpbml0aW9ucyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gU1lTVEVNIGNvbmZpZ3VyYXRpb24KLSAqCi0gKiAgTk9URTogVGhlIGxvY2F0aW9uIGFuZCBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIGhpZ2hseSBzdWJqZWN0IHRvIGNoYW5nZS4KLSAqCi0gKiAgU291cmNlIGZvciBjb25maWd1cmF0aW9uLWluZGVwZW5kZW50IGJpbmFyaWVzICh3aGljaCBsaW5rIGluIGEKLSAqICBjb25maWd1cmF0aW9uLXNwZWNpZmljIEhBTCBsaWJyYXJ5KSBtdXN0IE5FVkVSIGluY2x1ZGUgdGhpcyBmaWxlLgotICogIFRoZSBIQUwgaXRzZWxmIGhhcyBoaXN0b3JpY2FsbHkgaW5jbHVkZWQgdGhpcyBmaWxlIGluIHNvbWUgaW5zdGFuY2VzLAotICogIGJ1dCB0aGlzIGlzIG5vdCBhcHByb3ByaWF0ZSBlaXRoZXIsIGJlY2F1c2UgdGhlIEhBTCBpcyBtZWFudCB0byBiZQotICogIGNvcmUtc3BlY2lmaWMgYnV0IHN5c3RlbSBpbmRlcGVuZGVudC4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAzIFRlbnNpbGljYSwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMi4xIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKgotICogRnVydGhlciwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSB0aGF0IGl0IGlzCi0gKiBmcmVlIG9mIHRoZSByaWdodGZ1bCBjbGFpbSBvZiBhbnkgdGhpcmQgcGVyc29uIHJlZ2FyZGluZyBpbmZyaW5nZW1lbnQKLSAqIG9yIHRoZSBsaWtlLiAgQW55IGxpY2Vuc2UgcHJvdmlkZWQgaGVyZWluLCB3aGV0aGVyIGltcGxpZWQgb3IKLSAqIG90aGVyd2lzZSwgYXBwbGllcyBvbmx5IHRvIHRoaXMgc29mdHdhcmUgZmlsZS4gIFBhdGVudCBsaWNlbnNlcywgaWYKLSAqIGFueSwgcHJvdmlkZWQgaGVyZWluIGRvIG5vdCBhcHBseSB0byBjb21iaW5hdGlvbnMgb2YgdGhpcyBwcm9ncmFtIHdpdGgKLSAqIG90aGVyIHNvZnR3YXJlLCBvciBhbnkgb3RoZXIgcHJvZHVjdCB3aGF0c29ldmVyLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsCi0gKiBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIFhURU5TQV9DT05GSUdfU1lTVEVNX0gKLSNkZWZpbmUgWFRFTlNBX0NPTkZJR19TWVNURU1fSAotCi0vKiNpbmNsdWRlIDx4dGVuc2EvaGFsLmg+Ki8KLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJCURFVklDRSBBRERSRVNTRVMKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qCi0gKiAgU3RyYW5nZSBwbGFjZSB0byBmaW5kIHRoZXNlLCBidXQgdGhlIGNvbmZpZ3VyYXRpb24gR1VJCi0gKiAgYWxsb3dzIG1vdmluZyB0aGVzZSBhcm91bmQgdG8gYWNjb3VudCBmb3IgdmFyaW91cyBjb3JlCi0gKiAgY29uZmlndXJhdGlvbnMuICBTcGVjaWZpYyBib2FyZHMgKGFuZCB0aGVpciBCU1Agc29mdHdhcmUpCi0gKiAgd2lsbCBoYXZlIHNwZWNpZmljIG1lYW5pbmdzIGZvciB0aGVzZSBjb21wb25lbnRzLgotICovCi0KLS8qICBJL08gQmxvY2sgYXJlYXM6ICAqLwotI2RlZmluZSBYU0hBTF9JT0JMT0NLX0NBQ0hFRF9WQUREUgkweEUwMDAwMDAwCi0jZGVmaW5lIFhTSEFMX0lPQkxPQ0tfQ0FDSEVEX1BBRERSCTB4RjAwMDAwMDAKLSNkZWZpbmUgWFNIQUxfSU9CTE9DS19DQUNIRURfU0laRQkweDBFMDAwMDAwCi0KLSNkZWZpbmUgWFNIQUxfSU9CTE9DS19CWVBBU1NfVkFERFIJMHhGMDAwMDAwMAotI2RlZmluZSBYU0hBTF9JT0JMT0NLX0JZUEFTU19QQUREUgkweEYwMDAwMDAwCi0jZGVmaW5lIFhTSEFMX0lPQkxPQ0tfQllQQVNTX1NJWkUJMHgwRTAwMDAwMAotCi0vKiAgU3lzdGVtIFJPTTogICovCi0jZGVmaW5lIFhTSEFMX1JPTV9WQUREUgkJMHhFRTAwMDAwMAotI2RlZmluZSBYU0hBTF9ST01fUEFERFIJCTB4RkUwMDAwMDAKLSNkZWZpbmUgWFNIQUxfUk9NX1NJWkUJCTB4MDA0MDAwMDAKLS8qICBMYXJnZXN0IGF2YWlsYWJsZSBhcmVhIChmcmVlIG9mIHZlY3RvcnMpOiAgKi8KLSNkZWZpbmUgWFNIQUxfUk9NX0FWQUlMX1ZBRERSCTB4RUUwMDA1MkMKLSNkZWZpbmUgWFNIQUxfUk9NX0FWQUlMX1ZTSVpFCTB4MDAzRkZBRDQKLQotLyogIFN5c3RlbSBSQU06ICAqLwotI2RlZmluZSBYU0hBTF9SQU1fVkFERFIJCTB4RDAwMDAwMDAKLSNkZWZpbmUgWFNIQUxfUkFNX1BBRERSCQkweDAwMDAwMDAwCi0jZGVmaW5lIFhTSEFMX1JBTV9WU0laRQkJMHgwODAwMDAwMAotI2RlZmluZSBYU0hBTF9SQU1fUFNJWkUJCTB4MTAwMDAwMDAKLSNkZWZpbmUgWFNIQUxfUkFNX1NJWkUJCVhTSEFMX1JBTV9QU0laRQotLyogIExhcmdlc3QgYXZhaWxhYmxlIGFyZWEgKGZyZWUgb2YgdmVjdG9ycyk6ICAqLwotI2RlZmluZSBYU0hBTF9SQU1fQVZBSUxfVkFERFIJMHhEMDAwMDM3MAotI2RlZmluZSBYU0hBTF9SQU1fQVZBSUxfVlNJWkUJMHgwN0ZGRkM5MAotCi0vKgotICogIFNoYWRvdyBzeXN0ZW0gUkFNIChzYW1lIGRldmljZSBhcyBzeXN0ZW0gUkFNLCBhdCBkaWZmZXJlbnQgYWRkcmVzcykuCi0gKiAgKEVtdWxhdGlvbiBib2FyZHMgbmVlZCB0aGlzIGZvciB0aGUgU09OSUMgRXRoZXJuZXQgZHJpdmVyCi0gKiAgIHdoZW4gZGF0YSBjYWNoZXMgYXJlIGNvbmZpZ3VyZWQgZm9yIHdyaXRlYmFjayBtb2RlLikKLSAqICBOT1RFOiBvbiBmdWxsIE1NVSBjb25maWdzLCB0aGlzIHBvaW50cyB0byB0aGUgQllQQVNTIHZpcnR1YWwgYWRkcmVzcwotICogIG9mIHN5c3RlbSBSQU0sIGllLiBpcyB0aGUgc2FtZSBhcyBYU0hBTF9SQU1fKiBleGNlcHQgdGhhdCB2aXJ0dWFsCi0gKiAgYWRkcmVzc2VzIGFyZSB2aWV3ZWQgdGhyb3VnaCB0aGUgQllQQVNTIHN0YXRpYyBtYXAgcmF0aGVyIHRoYW4KLSAqICB0aGUgQ0FDSEVEIHN0YXRpYyBtYXAuCi0gKi8KLSNkZWZpbmUgWFNIQUxfUkFNX0JZUEFTU19WQUREUgkJMHhEODAwMDAwMAotI2RlZmluZSBYU0hBTF9SQU1fQllQQVNTX1BBRERSCQkweDAwMDAwMDAwCi0jZGVmaW5lIFhTSEFMX1JBTV9CWVBBU1NfUFNJWkUJCTB4MDgwMDAwMDAKLQotLyogIEFsdGVybmF0ZSBzeXN0ZW0gUkFNIChkaWZmZXJlbnQgZGV2aWNlIHRoYW4gc3lzdGVtIFJBTSk6ICAqLwotI2RlZmluZSBYU0hBTF9BTFRSQU1fVkFERFIJCTB4Q0VFMDAwMDAKLSNkZWZpbmUgWFNIQUxfQUxUUkFNX1BBRERSCQkweEMwMDAwMDAwCi0jZGVmaW5lIFhTSEFMX0FMVFJBTV9TSVpFCQkweDAwMjAwMDAwCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgkJCURFVklDRS1BRERSRVNTIERFUEVOREVOVC4uLgotICoKLSAqICBWYWx1ZXMgd3JpdHRlbiB0byBDQUNIRUFUVFIgc3BlY2lhbCByZWdpc3RlciAob3IgaXRzIGVxdWl2YWxlbnQpCi0gKiAgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIGNhY2hlcyBpbiB2YXJpb3VzIG1vZGVzLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQlCQUNLV0FSRCBDT01QQVRJQklMSVRZIC4uLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqICBOT1RFOiAgdGhlIGZvbGxvd2luZyB0d28gbWFjcm9zIGFyZSBERVBSRUNBVEVELiAgVXNlIHRoZSBsYXR0ZXIKLSAqICBib2FyZC1zcGVjaWZpYyBtYWNyb3MgaW5zdGVhZCwgd2hpY2ggYXJlIHNwZWNpYWxseSB0dW5lZCBmb3IgdGhlCi0gKiAgcGFydGljdWxhciB0YXJnZXQgZW52aXJvbm1lbnRzJyBtZW1vcnkgbWFwcy4KLSAqLwotI2RlZmluZSBYU0hBTF9DQUNIRUFUVFJfQllQQVNTCQlYU0hBTF9YVDIwMDBfQ0FDSEVBVFRSX0JZUEFTUwkvKiBkaXNhYmxlIGNhY2hlcyBpbiBieXBhc3MgbW9kZSAqLwotI2RlZmluZSBYU0hBTF9DQUNIRUFUVFJfREVGQVVMVAkJWFNIQUxfWFQyMDAwX0NBQ0hFQVRUUl9ERUZBVUxUCS8qIGRlZmF1bHQgc2V0dGluZyB0byBlbmFibGUgY2FjaGVzIChubyB3cml0ZWJhY2shKSAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJCUlTUyAoSW5zdHJ1Y3Rpb24gU2V0IFNpbXVsYXRvcikgU1BFQ0lGSUMgLi4uCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jZGVmaW5lIFhTSEFMX0lTU19DQUNIRUFUVFJfV1JJVEVCQUNLCTB4MTEyMjIyMkYJLyogZW5hYmxlIGNhY2hlcyBpbiB3cml0ZS1iYWNrIG1vZGUgKi8KLSNkZWZpbmUgWFNIQUxfSVNTX0NBQ0hFQVRUUl9XUklURUFMTE9DCTB4MTEyMjIyMkYJLyogZW5hYmxlIGNhY2hlcyBpbiB3cml0ZS1hbGxvY2F0ZSBtb2RlICovCi0jZGVmaW5lIFhTSEFMX0lTU19DQUNIRUFUVFJfV1JJVEVUSFJVCTB4MTEyMjIyMkYJLyogZW5hYmxlIGNhY2hlcyBpbiB3cml0ZS10aHJvdWdoIG1vZGUgKi8KLSNkZWZpbmUgWFNIQUxfSVNTX0NBQ0hFQVRUUl9CWVBBU1MJMHgyMjIyMjIyRgkvKiBkaXNhYmxlIGNhY2hlcyBpbiBieXBhc3MgbW9kZSAqLwotI2RlZmluZSBYU0hBTF9JU1NfQ0FDSEVBVFRSX0RFRkFVTFQJWFNIQUxfSVNTX0NBQ0hFQVRUUl9XUklURUJBQ0sJLyogZGVmYXVsdCBzZXR0aW5nIHRvIGVuYWJsZSBjYWNoZXMgKi8KLQotLyogIEZvciBDb3dhcmUgb25seTogICovCi0jZGVmaW5lIFhTSEFMX0NPV0FSRV9DQUNIRUFUVFJfV1JJVEVCQUNLCTB4MTEyMjIyMjIJLyogZW5hYmxlIGNhY2hlcyBpbiB3cml0ZS1iYWNrIG1vZGUgKi8KLSNkZWZpbmUgWFNIQUxfQ09XQVJFX0NBQ0hFQVRUUl9XUklURUFMTE9DCTB4MTEyMjIyMjIJLyogZW5hYmxlIGNhY2hlcyBpbiB3cml0ZS1hbGxvY2F0ZSBtb2RlICovCi0jZGVmaW5lIFhTSEFMX0NPV0FSRV9DQUNIRUFUVFJfV1JJVEVUSFJVCTB4MTEyMjIyMjIJLyogZW5hYmxlIGNhY2hlcyBpbiB3cml0ZS10aHJvdWdoIG1vZGUgKi8KLSNkZWZpbmUgWFNIQUxfQ09XQVJFX0NBQ0hFQVRUUl9CWVBBU1MJCTB4MjIyMjIyMjIJLyogZGlzYWJsZSBjYWNoZXMgaW4gYnlwYXNzIG1vZGUgKi8KLSNkZWZpbmUgWFNIQUxfQ09XQVJFX0NBQ0hFQVRUUl9ERUZBVUxUCQlYU0hBTF9DT1dBUkVfQ0FDSEVBVFRSX1dSSVRFQkFDSwkvKiBkZWZhdWx0IHNldHRpbmcgdG8gZW5hYmxlIGNhY2hlcyAqLwotCi0vKiAgRm9yIEJGTSBhbmQgb3RoZXIgcHVycG9zZXM6ICAqLwotI2RlZmluZSBYU0hBTF9BTExWQUxJRF9DQUNIRUFUVFJfV1JJVEVCQUNLCTB4MTEyMjIyMjIJLyogZW5hYmxlIGNhY2hlcyB3aXRob3V0IGFueSBpbnZhbGlkIHJlZ2lvbnMgKi8KLSNkZWZpbmUgWFNIQUxfQUxMVkFMSURfQ0FDSEVBVFRSX0RFRkFVTFQJWFNIQUxfQUxMVkFMSURfQ0FDSEVBVFRSX1dSSVRFQkFDSwkvKiBkZWZhdWx0IHNldHRpbmcgZm9yIGNhY2hlcyB3aXRob3V0IGFueSBpbnZhbGlkIHJlZ2lvbnMgKi8KLQotI2RlZmluZSBYU0hBTF9JU1NfUElQRV9SRUdJT05TCTAKLSNkZWZpbmUgWFNIQUxfSVNTX1NEUkFNX1JFR0lPTlMJMAotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJWFQyMDAwIEJPQVJEIFNQRUNJRklDIC4uLgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBYU0hBTF9YVDIwMDBfQ0FDSEVBVFRSX1dSSVRFQkFDSwkweDIyRkZGRkZGCS8qIGVuYWJsZSBjYWNoZXMgaW4gd3JpdGUtYmFjayBtb2RlICovCi0jZGVmaW5lIFhTSEFMX1hUMjAwMF9DQUNIRUFUVFJfV1JJVEVBTExPQwkweDIyRkZGRkZGCS8qIGVuYWJsZSBjYWNoZXMgaW4gd3JpdGUtYWxsb2NhdGUgbW9kZSAqLwotI2RlZmluZSBYU0hBTF9YVDIwMDBfQ0FDSEVBVFRSX1dSSVRFVEhSVQkweDIyRkZGRkZGCS8qIGVuYWJsZSBjYWNoZXMgaW4gd3JpdGUtdGhyb3VnaCBtb2RlICovCi0jZGVmaW5lIFhTSEFMX1hUMjAwMF9DQUNIRUFUVFJfQllQQVNTCQkweDIyRkZGRkZGCS8qIGRpc2FibGUgY2FjaGVzIGluIGJ5cGFzcyBtb2RlICovCi0jZGVmaW5lIFhTSEFMX1hUMjAwMF9DQUNIRUFUVFJfREVGQVVMVAkJWFNIQUxfWFQyMDAwX0NBQ0hFQVRUUl9XUklURUJBQ0sJLyogZGVmYXVsdCBzZXR0aW5nIHRvIGVuYWJsZSBjYWNoZXMgKi8KLQotI2RlZmluZSBYU0hBTF9YVDIwMDBfUElQRV9SRUdJT05TCTB4MDAwMDEwMDAJLyogQnVzSW50IHBpcGVsaW5lIHJlZ2lvbnMgKi8KLSNkZWZpbmUgWFNIQUxfWFQyMDAwX1NEUkFNX1JFR0lPTlMJMHgwMDAwMDAwNQkvKiBCdXNJbnQgU0RSQU0gcmVnaW9ucyAqLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJCVZFQ1RPUiBTSVpFUwotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqICBTaXplcyBhbGxvY2F0ZWQgdG8gdmVjdG9ycyBieSB0aGUgc3lzdGVtIChtZW1vcnkgbWFwKSBjb25maWd1cmF0aW9uLgotICogIFRoZXNlIHNpemVzIGFyZSBjb25zdHJhaW5lZCBieSBjb3JlIGNvbmZpZ3VyYXRpb24gKGVnLiBvbmUgdmVjdG9yJ3MKLSAqICBjb2RlIGNhbm5vdCBvdmVyZmxvdyBpbnRvIGFub3RoZXIgdmVjdG9yKSBidXQgYXJlIGRlcGVuZGVudCBvbiB0aGUKLSAqICBzeXN0ZW0gb3IgYm9hcmQgKG9yIExTUCkgbWVtb3J5IG1hcCBjb25maWd1cmF0aW9uLgotICoKLSAqICBXaGV0aGVyIG9yIG5vdCBlYWNoIHZlY3RvciBoYXBwZW5zIHRvIGJlIGluIGEgc3lzdGVtIFJPTSBpcyBhbHNvCi0gKiAgYSBzeXN0ZW0gY29uZmlndXJhdGlvbiBtYXR0ZXIsIHNvbWV0aW1lcyB1c2VmdWwsIGluY2x1ZGVkIGhlcmUgYWxzbzoKLSAqLwotI2RlZmluZSBYU0hBTF9SRVNFVF9WRUNUT1JfU0laRQkweDAwMDAwNEUwCi0jZGVmaW5lIFhTSEFMX1JFU0VUX1ZFQ1RPUl9JU1JPTQkxCi0jZGVmaW5lIFhTSEFMX1VTRVJfVkVDVE9SX1NJWkUJMHgwMDAwMDAxQwotI2RlZmluZSBYU0hBTF9VU0VSX1ZFQ1RPUl9JU1JPTQkwCi0jZGVmaW5lIFhTSEFMX1BST0dSQU1FWENfVkVDVE9SX1NJWkUJWFNIQUxfVVNFUl9WRUNUT1JfU0laRQkvKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSBYU0hBTF9VU0VSRVhDX1ZFQ1RPUl9TSVpFCVhTSEFMX1VTRVJfVkVDVE9SX1NJWkUJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgWFNIQUxfS0VSTkVMX1ZFQ1RPUl9TSVpFCTB4MDAwMDAwMUMKLSNkZWZpbmUgWFNIQUxfS0VSTkVMX1ZFQ1RPUl9JU1JPTQkwCi0jZGVmaW5lIFhTSEFMX1NUQUNLRURFWENfVkVDVE9SX1NJWkUJWFNIQUxfS0VSTkVMX1ZFQ1RPUl9TSVpFCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIFhTSEFMX0tFUk5FTEVYQ19WRUNUT1JfU0laRQlYU0hBTF9LRVJORUxfVkVDVE9SX1NJWkUJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgWFNIQUxfRE9VQkxFRVhDX1ZFQ1RPUl9TSVpFCTB4MDAwMDAwRTAKLSNkZWZpbmUgWFNIQUxfRE9VQkxFRVhDX1ZFQ1RPUl9JU1JPTQkwCi0jZGVmaW5lIFhTSEFMX1dJTkRPV19WRUNUT1JTX1NJWkUJMHgwMDAwMDE4MAotI2RlZmluZSBYU0hBTF9XSU5ET1dfVkVDVE9SU19JU1JPTQkwCi0jZGVmaW5lIFhTSEFMX0lOVExFVkVMMl9WRUNUT1JfU0laRQkweDAwMDAwMDBDCi0jZGVmaW5lIFhTSEFMX0lOVExFVkVMMl9WRUNUT1JfSVNST00JMAotI2RlZmluZSBYU0hBTF9JTlRMRVZFTDNfVkVDVE9SX1NJWkUJMHgwMDAwMDAwQwotI2RlZmluZSBYU0hBTF9JTlRMRVZFTDNfVkVDVE9SX0lTUk9NCTAKLSNkZWZpbmUgWFNIQUxfSU5UTEVWRUw0X1ZFQ1RPUl9TSVpFCTB4MDAwMDAwMEMKLSNkZWZpbmUgWFNIQUxfSU5UTEVWRUw0X1ZFQ1RPUl9JU1JPTQkxCi0jZGVmaW5lIFhTSEFMX0RFQlVHX1ZFQ1RPUl9TSVpFCQlYU0hBTF9JTlRMRVZFTDRfVkVDVE9SX1NJWkUKLSNkZWZpbmUgWFNIQUxfREVCVUdfVkVDVE9SX0lTUk9NCVhTSEFMX0lOVExFVkVMNF9WRUNUT1JfSVNST00KLQotCi0jZW5kaWYgLypYVEVOU0FfQ09ORklHX1NZU1RFTV9IKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS9jb25maWctbGludXhfYmUvdGllLmggYi9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2NvbmZpZy1saW51eF9iZS90aWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MyZTUxNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2NvbmZpZy1saW51eF9iZS90aWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKgotICogeHRlbnNhL2NvbmZpZy90aWUuaCAtLSBIQUwgZGVmaW5pdGlvbnMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIENPUkUgYW5kIFRJRSBjb25maWd1cmF0aW9uCi0gKgotICogIFRoaXMgaGVhZGVyIGZpbGUgaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIHRoZSAiY29tcGlsZS10aW1lIEhBTCIgb3IgQ0hBTC4KLSAqICBJdCB3YXMgZ2VuZXJhdGVkIGZvciBhIHNwZWNpZmljIFh0ZW5zYSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbiwKLSAqICBhbmQgZnVydGhlcm1vcmUgZm9yIGEgc3BlY2lmaWMgc2V0IG9mIFRJRSBzb3VyY2UgZmlsZXMgdGhhdCBleHRlbmQKLSAqICBiYXNpYyBjb3JlIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogIFNvdXJjZSBmb3IgY29uZmlndXJhdGlvbi1pbmRlcGVuZGVudCBiaW5hcmllcyAod2hpY2ggbGluayBpbiBhCi0gKiAgY29uZmlndXJhdGlvbi1zcGVjaWZpYyBIQUwgbGlicmFyeSkgbXVzdCBORVZFUiBpbmNsdWRlIHRoaXMgZmlsZS4KLSAqICBJdCBpcyBwZXJmZWN0bHkgbm9ybWFsLCBob3dldmVyLCBmb3IgdGhlIEhBTCBzb3VyY2UgaXRzZWxmIHRvIGluY2x1ZGUgdGhpcyBmaWxlLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGVuc2lsaWNhLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyLjEgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqCi0gKiBGdXJ0aGVyLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5IHRoYXQgaXQgaXMKLSAqIGZyZWUgb2YgdGhlIHJpZ2h0ZnVsIGNsYWltIG9mIGFueSB0aGlyZCBwZXJzb24gcmVnYXJkaW5nIGluZnJpbmdlbWVudAotICogb3IgdGhlIGxpa2UuICBBbnkgbGljZW5zZSBwcm92aWRlZCBoZXJlaW4sIHdoZXRoZXIgaW1wbGllZCBvcgotICogb3RoZXJ3aXNlLCBhcHBsaWVzIG9ubHkgdG8gdGhpcyBzb2Z0d2FyZSBmaWxlLiAgUGF0ZW50IGxpY2Vuc2VzLCBpZgotICogYW55LCBwcm92aWRlZCBoZXJlaW4gZG8gbm90IGFwcGx5IHRvIGNvbWJpbmF0aW9ucyBvZiB0aGlzIHByb2dyYW0gd2l0aAotICogb3RoZXIgc29mdHdhcmUsIG9yIGFueSBvdGhlciBwcm9kdWN0IHdoYXRzb2V2ZXIuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywKLSAqIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgWFRFTlNBX0NPTkZJR19USUVfSAotI2RlZmluZSBYVEVOU0FfQ09ORklHX1RJRV9ICi0KLSNpbmNsdWRlIDx4dGVuc2EvaGFsLmg+Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQkJR0VORVJBTAotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoKLSAqICBTZXBhcmF0b3JzIGZvciBtYWNyb3MgdGhhdCBleHBhbmQgaW50byBhcnJheXMuCi0gKiAgVGhlc2UgY2FuIGJlIHByZWRlZmluZWQgYnkgZmlsZXMgdGhhdCAjaW5jbHVkZSB0aGlzIG9uZSwKLSAqICB3aGVuIGRpZmZlcmVudCBzZXBhcmF0b3JzIGFyZSByZXF1aXJlZC4KLSAqLwotLyogIEVsZW1lbnQgc2VwYXJhdG9yIGZvciBtYWNyb3MgdGhhdCBleHBhbmQgaW50byAxLWRpbWVuc2lvbmFsIGFycmF5czogICovCi0jaWZuZGVmIFhDSEFMX1NFUAotI2RlZmluZSBYQ0hBTF9TRVAJCQksCi0jZW5kaWYKLS8qICBBcnJheSBzZXBhcmF0b3IgZm9yIG1hY3JvcyB0aGF0IGV4cGFuZCBpbnRvIDItZGltZW5zaW9uYWwgYXJyYXlzOiAgKi8KLSNpZm5kZWYgWENIQUxfU0VQMgotI2RlZmluZSBYQ0hBTF9TRVAyCQkJfSx7Ci0jZW5kaWYKLQotCi0KLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJQ09QUk9DRVNTT1JTIGFuZCBFWFRSQSBTVEFURQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZSBYQ0hBTF9DUF9OVU0JCQkwCS8qIG51bWJlciBvZiBjb3Byb2Nlc3NvcnMgKi8KLSNkZWZpbmUgWENIQUxfQ1BfTUFYCQkJMAkvKiBtYXggY29wcm9jZXNzb3IgaWQgcGx1cyBvbmUgKDAgaWYgbm9uZSkgKi8KLSNkZWZpbmUgWENIQUxfQ1BfTUFTSwkJCTB4MDAJLyogYml0bWFzayBvZiBjb3Byb2Nlc3NvcnMgYnkgaWQgKi8KLQotLyogIFNwYWNlIGZvciBjb3Byb2Nlc3NvcnMnIHN0YXRlIHNhdmUgYXJlYXM6ICAqLwotI2RlZmluZSBYQ0hBTF9DUDBfU0FfU0laRQkJMAotI2RlZmluZSBYQ0hBTF9DUDFfU0FfU0laRQkJMAotI2RlZmluZSBYQ0hBTF9DUDJfU0FfU0laRQkJMAotI2RlZmluZSBYQ0hBTF9DUDNfU0FfU0laRQkJMAotI2RlZmluZSBYQ0hBTF9DUDRfU0FfU0laRQkJMAotI2RlZmluZSBYQ0hBTF9DUDVfU0FfU0laRQkJMAotI2RlZmluZSBYQ0hBTF9DUDZfU0FfU0laRQkJMAotI2RlZmluZSBYQ0hBTF9DUDdfU0FfU0laRQkJMAotLyogIE1pbmltdW0gcmVxdWlyZWQgYWxpZ25tZW50cyBvZiBDUCBzdGF0ZSBzYXZlIGFyZWFzOiAgKi8KLSNkZWZpbmUgWENIQUxfQ1AwX1NBX0FMSUdOCQkxCi0jZGVmaW5lIFhDSEFMX0NQMV9TQV9BTElHTgkJMQotI2RlZmluZSBYQ0hBTF9DUDJfU0FfQUxJR04JCTEKLSNkZWZpbmUgWENIQUxfQ1AzX1NBX0FMSUdOCQkxCi0jZGVmaW5lIFhDSEFMX0NQNF9TQV9BTElHTgkJMQotI2RlZmluZSBYQ0hBTF9DUDVfU0FfQUxJR04JCTEKLSNkZWZpbmUgWENIQUxfQ1A2X1NBX0FMSUdOCQkxCi0jZGVmaW5lIFhDSEFMX0NQN19TQV9BTElHTgkJMQotCi0vKiAgSW5kZXhpbmcgbWFjcm9zOiAgKi8KLSNkZWZpbmUgX1hDSEFMX0NQX1NBX1NJWkUobikJCVhDSEFMX0NQICMjIG4gIyMgX1NBX1NJWkUKLSNkZWZpbmUgWENIQUxfQ1BfU0FfU0laRShuKQkJX1hDSEFMX0NQX1NBX1NJWkUobikJLyogbiA9IDAgLi4gNyAqLwotI2RlZmluZSBfWENIQUxfQ1BfU0FfQUxJR04obikJCVhDSEFMX0NQICMjIG4gIyMgX1NBX0FMSUdOCi0jZGVmaW5lIFhDSEFMX0NQX1NBX0FMSUdOKG4pCQlfWENIQUxfQ1BfU0FfQUxJR04obikJLyogbiA9IDAgLi4gNyAqLwotCi0KLS8qICBTcGFjZSBmb3IgImV4dHJhIiBzdGF0ZSAodXNlciBzcGVjaWFsIHJlZ2lzdGVycyBhbmQgbm9uLWNwIFRJRSkgc2F2ZSBhcmVhOiAgKi8KLSNkZWZpbmUgWENIQUxfRVhUUkFfU0FfU0laRQkJMAotI2RlZmluZSBYQ0hBTF9FWFRSQV9TQV9BTElHTgkJMQotCi0vKiAgVG90YWwgc2F2ZSBhcmVhIHNpemUgKGV4dHJhICsgYWxsIGNvcHJvY2Vzc29ycykgICovCi0vKiAgKG5vdCB1c2VmdWwgdW50aWwgeHRoYWxfe3NhdmUscmVzdG9yZX1fYWxsX2V4dHJhKCkgaXMgaW1wbGVtZW50ZWQsICAqLwotLyogICBidXQgaW5jbHVkZWQgZm9yIFRvcjIgYmV0YTsgZG9lc24ndCBhY2NvdW50IGZvciBhbGlnbm1lbnQhKTogICovCi0jZGVmaW5lIFhDSEFMX0NQRVhUUkFfU0FfU0laRV9UT1IyCTAJLyogVG9yMkJldGEgdGVtcG9yYXJ5IGRlZmluaXRpb24gLS0gZG8gbm90IHVzZSAqLwotCi0vKiAgQ29tYmluZWQgcmVxdWlyZWQgYWxpZ25tZW50IGZvciBhbGwgQ1AgYW5kIEVYVFJBIHN0YXRlIHNhdmUgYXJlYXMgICovCi0vKiAgKGRvZXMgbm90IGluY2x1ZGUgcmVxdWlyZWQgYWxpZ25tZW50IGZvciBhbnkgYmFzZSBjb25maWcgcmVnaXN0ZXJzKTogICovCi0jZGVmaW5lIFhDSEFMX0NQRVhUUkFfU0FfQUxJR04JCTEKLQotLyogLi4uICovCi0KLQotI2lmZGVmIF9BU01MQU5HVUFHRQotLyoKLSAqICBBc3NlbWJseS1sYW5ndWFnZSBzcGVjaWZpYyBkZWZpbml0aW9ucyAoYXNzZW1ibHkgbWFjcm9zLCBldGMuKS4KLSAqLwotI2luY2x1ZGUgPHh0ZW5zYS9jb25maWcvc3BlY3JlZy5oPgotCi0vKioqKioqKioqKioqKioqKioqKioKLSAqICBNYWNyb3MgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgbm9uLWNvcHJvY2Vzc29yIFRJRSBwb3J0aW9uIG9mIEVYVFJBIHN0YXRlLgotICovCi0KLS8qIChub25lKSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKgotICogIE1hY3JvcyB0byBjcmVhdGUgZnVuY3Rpb25zIHRoYXQgc2F2ZSBhbmQgcmVzdG9yZSBhbGwgRVhUUkEgKG5vbi1jb3Byb2Nlc3Nvcikgc3RhdGUKLSAqICAoZG9lcyBub3QgaW5jbHVkZSB6ZXJvLW92ZXJoZWFkIGxvb3AgcmVnaXN0ZXJzIGFuZCBub24tb3B0aW9uYWwgcmVnaXN0ZXJzKS4KLSAqLwotCi0JLyoKLQkgKiAgTWFjcm8gdGhhdCBleHBhbmRzIHRvIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gdGhhdAotCSAqICBzdG9yZXMgdGhlIGV4dHJhIChub24tY29wcm9jZXNzb3IpIG9wdGlvbmFsL2N1c3RvbSBzdGF0ZS4KLQkgKglFbnRyeToJYTIgPSBwdHIgdG8gc2F2ZSBhcmVhIGluIHdoaWNoIHRvIHNhdmUgZXh0cmEgc3RhdGUKLQkgKglFeGl0OglhbnkgcmVnaXN0ZXIgYTItYTE1ICg/KSBtYXkgaGF2ZSBiZWVuIGNsb2JiZXJlZC4KLQkgKi8KLQkubWFjcm8JeGNoYWxfZXh0cmFfc3RvcmVfZnVuY2JvZHkKLQkuZW5kbQotCi0KLQkvKgotCSAqICBNYWNybyB0aGF0IGV4cGFuZHMgdG8gdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiB0aGF0Ci0JICogIGxvYWRzIHRoZSBleHRyYSAobm9uLWNvcHJvY2Vzc29yKSBvcHRpb25hbC9jdXN0b20gc3RhdGUuCi0JICoJRW50cnk6CWEyID0gcHRyIHRvIHNhdmUgYXJlYSBmcm9tIHdoaWNoIHRvIHJlc3RvcmUgZXh0cmEgc3RhdGUKLQkgKglFeGl0OglhbnkgcmVnaXN0ZXIgYTItYTE1ICg/KSBtYXkgaGF2ZSBiZWVuIGNsb2JiZXJlZC4KLQkgKi8KLQkubWFjcm8JeGNoYWxfZXh0cmFfbG9hZF9mdW5jYm9keQotCS5lbmRtCi0KLQotLyoqKioqKioqKioqKioqKioqKioqCi0gKiAgTWFjcm9zIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGVhY2ggVElFIGNvcHJvY2Vzc29yLgotICovCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioKLSAqICBNYWNyb3MgdG8gY3JlYXRlIGZ1bmN0aW9ucyB0aGF0IHNhdmUgYW5kIHJlc3RvcmUgdGhlIHN0YXRlIG9mICphbnkqIFRJRSBjb3Byb2Nlc3Nvci4KLSAqLwotCi0JLyoKLQkgKiAgTWFjcm8gdGhhdCBleHBhbmRzIHRvIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24KLQkgKiAgdGhhdCBzdG9yZXMgdGhlIHNlbGVjdGVkIGNvcHJvY2Vzc29yJ3Mgc3RhdGUgKHJlZ2lzdGVycyBldGMpLgotCSAqCUVudHJ5OglhMiA9IHB0ciB0byBzYXZlIGFyZWEgaW4gd2hpY2ggdG8gc2F2ZSBjcCBzdGF0ZQotCSAqCQlhMyA9IGNvcHJvY2Vzc29yIG51bWJlcgotCSAqCUV4aXQ6CWFueSByZWdpc3RlciBhMi1hMTUgKD8pIG1heSBoYXZlIGJlZW4gY2xvYmJlcmVkLgotCSAqLwotCS5tYWNybwl4Y2hhbF9jcGlfc3RvcmVfZnVuY2JvZHkKLQkuZW5kbQotCi0KLQkvKgotCSAqICBNYWNybyB0aGF0IGV4cGFuZHMgdG8gdGhlIGJvZHkgb2YgYSBmdW5jdGlvbgotCSAqICB0aGF0IGxvYWRzIHRoZSBzZWxlY3RlZCBjb3Byb2Nlc3NvcidzIHN0YXRlIChyZWdpc3RlcnMgZXRjKS4KLQkgKglFbnRyeToJYTIgPSBwdHIgdG8gc2F2ZSBhcmVhIGZyb20gd2hpY2ggdG8gcmVzdG9yZSBjcCBzdGF0ZQotCSAqCQlhMyA9IGNvcHJvY2Vzc29yIG51bWJlcgotCSAqCUV4aXQ6CWFueSByZWdpc3RlciBhMi1hMTUgKD8pIG1heSBoYXZlIGJlZW4gY2xvYmJlcmVkLgotCSAqLwotCS5tYWNybwl4Y2hhbF9jcGlfbG9hZF9mdW5jYm9keQotCS5lbmRtCi0KLSNlbmRpZiAvKl9BU01MQU5HVUFHRSovCi0KLQotLyoKLSAqICBDb250ZW50cyBvZiBzYXZlIGFyZWFzIGluIHRlcm1zIG9mIGxpYmRiIHJlZ2lzdGVyIG51bWJlcnMuCi0gKiAgTk9URTogIENPTlRFTlRTX0xJQkRCX3tVUkVHLFJFR0Z9IG1hY3JvcyBhcmUgbm90IGRlZmluZWQgaW4gdGhpcyBmaWxlOwotICogIGl0IGlzIHVwIHRvIHRoZSB1c2VyIG9mIHRoaXMgaGVhZGVyIGZpbGUgdG8gZGVmaW5lIHRoZXNlIG1hY3JvcwotICogIHVzZWZ1bGx5IGJlZm9yZSBlYWNoIGV4cGFuc2lvbiBvZiB0aGUgQ09OVEVOVFNfTElCREIgbWFjcm9zLgotICogIChGaWVsZHMgcnN2WzEyM10gYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgYWRkaXRpb25zOyB0aGV5IGFyZSBjdXJyZW50bHkKLSAqICAgc2V0IHRvIHplcm8gYnV0IG1heSBiZSBzZXQgdG8gc29tZSB1c2VmdWwgdmFsdWVzIGluIHRoZSBmdXR1cmUuKQotICoKLSAqCUNPTlRFTlRTX0xJQkRCX1NSRUcobGliZGJudW0sIG9mZnNldCwgc2l6ZSwgYWxpZ24sIHJzdjEsIG5hbWUsIHNyZWdudW0sIGJpdG1hc2ssIHJzdjIsIHJzdjMpCi0gKglDT05URU5UU19MSUJEQl9VUkVHKGxpYmRibnVtLCBvZmZzZXQsIHNpemUsIGFsaWduLCByc3YxLCBuYW1lLCB1cmVnbnVtLCBiaXRtYXNrLCByc3YyLCByc3YzKQotICoJQ09OVEVOVFNfTElCREJfUkVHRihsaWJkYm51bSwgb2Zmc2V0LCBzaXplLCBhbGlnbiwgcnN2MSwgbmFtZSwgaW5kZXgsIG51bWVudHJpZXMsIGNvbnRlbnRzaXplLCByZWduYW1lX2Jhc2UsIHJlZ2ZpbGVfbmFtZSwgcnN2MiwgcnN2MykKLSAqLwotCi0jZGVmaW5lIFhDSEFMX0VYVFJBX1NBX0NPTlRFTlRTX0xJQkRCX05VTQkwCi0jZGVmaW5lIFhDSEFMX0VYVFJBX1NBX0NPTlRFTlRTX0xJQkRCCS8qIGVtcHR5ICovCi0KLSNkZWZpbmUgWENIQUxfQ1AwX1NBX0NPTlRFTlRTX0xJQkRCX05VTQkwCi0jZGVmaW5lIFhDSEFMX0NQMF9TQV9DT05URU5UU19MSUJEQgkvKiBlbXB0eSAqLwotCi0jZGVmaW5lIFhDSEFMX0NQMV9TQV9DT05URU5UU19MSUJEQl9OVU0JMAotI2RlZmluZSBYQ0hBTF9DUDFfU0FfQ09OVEVOVFNfTElCREIJLyogZW1wdHkgKi8KLQotI2RlZmluZSBYQ0hBTF9DUDJfU0FfQ09OVEVOVFNfTElCREJfTlVNCTAKLSNkZWZpbmUgWENIQUxfQ1AyX1NBX0NPTlRFTlRTX0xJQkRCCS8qIGVtcHR5ICovCi0KLSNkZWZpbmUgWENIQUxfQ1AzX1NBX0NPTlRFTlRTX0xJQkRCX05VTQkwCi0jZGVmaW5lIFhDSEFMX0NQM19TQV9DT05URU5UU19MSUJEQgkvKiBlbXB0eSAqLwotCi0jZGVmaW5lIFhDSEFMX0NQNF9TQV9DT05URU5UU19MSUJEQl9OVU0JMAotI2RlZmluZSBYQ0hBTF9DUDRfU0FfQ09OVEVOVFNfTElCREIJLyogZW1wdHkgKi8KLQotI2RlZmluZSBYQ0hBTF9DUDVfU0FfQ09OVEVOVFNfTElCREJfTlVNCTAKLSNkZWZpbmUgWENIQUxfQ1A1X1NBX0NPTlRFTlRTX0xJQkRCCS8qIGVtcHR5ICovCi0KLSNkZWZpbmUgWENIQUxfQ1A2X1NBX0NPTlRFTlRTX0xJQkRCX05VTQkwCi0jZGVmaW5lIFhDSEFMX0NQNl9TQV9DT05URU5UU19MSUJEQgkvKiBlbXB0eSAqLwotCi0jZGVmaW5lIFhDSEFMX0NQN19TQV9DT05URU5UU19MSUJEQl9OVU0JMAotI2RlZmluZSBYQ0hBTF9DUDdfU0FfQ09OVEVOVFNfTElCREIJLyogZW1wdHkgKi8KLQotCi0KLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJCU1JU0MKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZiAwCS8qIGlzIHRoZXJlIHNvbWV0aGluZyBlcXVpdmFsZW50IGZvciB1c2VyIFRJRT8gKi8KLSNkZWZpbmUgWENIQUxfQ09SRV9JRAkJCSJsaW51eF9iZSIJLyogY29uZmlndXJhdGlvbidzIGFscGhhbnVtZXJpYyBjb3JlIGlkZW50aWZpZXIKLQkJCQkJCQkgICAoQ29yZUlEKSBzZXQgaW4gdGhlIFh0ZW5zYSBQcm9jZXNzb3IgR2VuZXJhdG9yICovCi0KLSNkZWZpbmUgWENIQUxfQlVJTERfVU5JUVVFX0lECQkweDAwMDAzMjU2CS8qIHNvZnR3YXJlIGJ1aWxkLXVuaXF1ZSBJRCAoMjItYml0KSAqLwotCi0vKiAgVGhlc2UgZGVmaW5pdGlvbnMgZGVzY3JpYmUgdGhlIGhhcmR3YXJlIHRhcmdldGVkIGJ5IHRoaXMgc29mdHdhcmU6ICAqLwotI2RlZmluZSBYQ0hBTF9IV19DT05GSUdJRDAJCTB4QzEwM0QxRkYJLyogY29uZmlnIElEIHJlZyAwIHZhbHVlICh1cHBlciAzMiBvZiA2NCBiaXRzKSAqLwotI2RlZmluZSBYQ0hBTF9IV19DT05GSUdJRDEJCTB4MDA4MDMyNTYJLyogY29uZmlnIElEIHJlZyAxIHZhbHVlIChsb3dlciAzMiBvZiA2NCBiaXRzKSAqLwotI2RlZmluZSBYQ0hBTF9DT05GSUdJRDAJCQlYQ0hBTF9IV19DT05GSUdJRDAJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb25seSAtLSBkb24ndCB1c2UhICovCi0jZGVmaW5lIFhDSEFMX0NPTkZJR0lEMQkJCVhDSEFMX0hXX0NPTkZJR0lEMQkvKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvbmx5IC0tIGRvbid0IHVzZSEgKi8KLSNkZWZpbmUgWENIQUxfSFdfUkVMRUFTRV9NQUpPUgkJMTA1MAkvKiBtYWpvciByZWxlYXNlIG9mIHRhcmdldGVkIGhhcmR3YXJlICovCi0jZGVmaW5lIFhDSEFMX0hXX1JFTEVBU0VfTUlOT1IJCTEJLyogbWlub3IgcmVsZWFzZSBvZiB0YXJnZXRlZCBoYXJkd2FyZSAqLwotI2RlZmluZSBYQ0hBTF9IV19SRUxFQVNFX05BTUUJCSJUMTA1MC4xIgkvKiBmdWxsIHJlbGVhc2UgbmFtZSBvZiB0YXJnZXRlZCBoYXJkd2FyZSAqLwotI2RlZmluZSBYVEhBTF9IV19SRUxfVDEwNTAJMQotI2RlZmluZSBYVEhBTF9IV19SRUxfVDEwNTBfMQkxCi0jZGVmaW5lIFhDSEFMX0hXX0NPTkZJR0lEX1JFTElBQkxFCTEKLSNlbmRpZiAvKjAqLwotCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQkJSVNBCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgMAkvKiB0aGVzZSBwcm9iYWJseSBkb24ndCBiZWxvbmcgaGVyZSwgYnV0IGFyZSByZWxhdGVkIHRvIG9yIGltcGxlbWVudGVkIHVzaW5nIFRJRSAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX0JPT0xFQU5TCQkwCS8qIDEgaWYgYm9vbGVhbnMgb3B0aW9uIGNvbmZpZ3VyZWQsIDAgb3RoZXJ3aXNlICovCi0vKiAgTWlzYyBpbnN0cnVjdGlvbnM6ICAqLwotI2RlZmluZSBYQ0hBTF9IQVZFX01VTDMyCQkwCS8qIDEgaWYgMzItYml0IGludGVnZXIgbXVsdGlwbHkgb3B0aW9uIGNvbmZpZ3VyZWQsIDAgb3RoZXJ3aXNlICovCi0jZGVmaW5lIFhDSEFMX0hBVkVfTVVMMzJfSElHSAkJMAkvKiAxIGlmIE1VTDMyIG9wdGlvbiBpbmNsdWRlcyBNVUxVSCBhbmQgTVVMU0gsIDAgb3RoZXJ3aXNlICovCi0KLSNkZWZpbmUgWENIQUxfSEFWRV9GUAkJCTAJLyogMSBpZiBmbG9hdGluZyBwb2ludCBvcHRpb24gY29uZmlndXJlZCwgMCBvdGhlcndpc2UgKi8KLSNlbmRpZiAvKjAqLwotCi0KLSNlbmRpZiAvKlhURU5TQV9DT05GSUdfVElFX0gqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2NvcmVhc20uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29yZWFzbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGNmYjU0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29yZWFzbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTI2ICswLDAgQEAKLSNpZm5kZWYgWFRFTlNBX0NPUkVBU01fSAotI2RlZmluZSBYVEVOU0FfQ09SRUFTTV9ICi0KLS8qCi0gKiBUSElTIEZJTEUgSVMgR0VORVJBVEVEIC0tIERPIE5PVCBNT0RJRlkgQlkgSEFORAotICoKLSAqIGluY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29yZWFzbS5oIC0tIGFzc2VtYmxlci1zcGVjaWZpYwotICogZGVmaW5pdGlvbnMgdGhhdCBkZXBlbmQgb24gQ09SRSBjb25maWd1cmF0aW9uLgotICoKLSAqIFNvdXJjZSBmb3IgY29uZmlndXJhdGlvbi1pbmRlcGVuZGVudCBiaW5hcmllcyAod2hpY2ggbGluayBpbiBhCi0gKiBjb25maWd1cmF0aW9uLXNwZWNpZmljIEhBTCBsaWJyYXJ5KSBtdXN0IE5FVkVSIGluY2x1ZGUgdGhpcyBmaWxlLgotICogSXQgaXMgcGVyZmVjdGx5IG5vcm1hbCwgaG93ZXZlciwgZm9yIHRoZSBIQUwgaXRzZWxmIHRvIGluY2x1ZGUgdGhpcwotICogZmlsZS4KLSAqCi0gKiBUaGlzIGZpbGUgbXVzdCBOT1QgaW5jbHVkZSB4dGVuc2EvY29uZmlnL3N5c3RlbS5oLiAgQW55IGFzc2VtYmxlcgotICogaGVhZGVyIGZpbGUgdGhhdCBkZXBlbmRzIG9uIHN5c3RlbSBpbmZvcm1hdGlvbiBzaG91bGQgbGlrZWx5IGdvIGluCi0gKiBhIG5ldyBzeXN0ZW1hc20uaCAob3Igc3lzYXNtLmgpIGhlYWRlciBmaWxlLgotICoKLSAqICBOT1RFOiBtYWNybyBiZXFpMzIgaXMgTk9UIGNvbmZpZ3VyYXRpb24tZGVwZW5kZW50LCBhbmQgaXMgcGxhY2VkCi0gKiAgICAgICAgaGVyZSB0aWwgd2Ugd2lsbCBoYXZlIGNvbmZpZ3VyYXRpb24taW5kZXBlbmRlbnQgaGVhZGVyIGZpbGUuCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZgotICogdGhpcyBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFRlbnNpbGljYSBJbmMuCi0gKi8KLQotCi0jaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9jb3JlLmg+Ci0jaW5jbHVkZSA8eHRlbnNhL2NvbmZpZy9zcGVjcmVnLmg+Ci0KLS8qCi0gKiAgQXNzZW1ibHktbGFuZ3VhZ2Ugc3BlY2lmaWMgZGVmaW5pdGlvbnMgKGFzc2VtYmx5IG1hY3JvcywgZXRjLikuCi0gKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgZmluZF9tc19zZXRiaXQKLSAqCi0gKiAgVGhpcyBtYWNybyBmaW5kcyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgdGhhdCBpcyBzZXQgaW4gPGFzPgotICogIGFuZCByZXR1cm4gaXRzIGluZGV4ICsgPGJhc2U+IGluIDxhZD4sIG9yIDxiYXNlPiAtIDEgaWYgPGFzPiBpcyB6ZXJvLgotICogIFRoZSBpbmRleCBjb3VudHMgc3RhcnRpbmcgYXQgemVybyBmb3IgdGhlIGxzYml0LCBzbyB0aGUgcmV0dXJuCi0gKiAgdmFsdWUgcmFuZ2VzIGZyb20gPGJhc2U+LTEgKG5vIGJpdCBzZXQpIHRvIDxiYXNlPiszMSAobXNiaXQgc2V0KS4KLSAqCi0gKiAgUGFyYW1ldGVyczoKLSAqCTxhZD4JZGVzdGluYXRpb24gYWRkcmVzcyByZWdpc3RlciAoYW55IHJlZ2lzdGVyKQotICoJPGFzPglzb3VyY2UgYWRkcmVzcyByZWdpc3RlcgotICoJPGF0Pgl0ZW1wb3JhcnkgYWRkcmVzcyByZWdpc3RlciAobXVzdCBiZSBkaWZmZXJlbnQgdGhhbiA8YXM+KQotICoJPGJhc2U+CWNvbnN0YW50IHZhbHVlIGFkZGVkIHRvIHJlc3VsdCAodXN1YWxseSAwIG9yIDEpCi0gKiAgT24gZW50cnk6Ci0gKgk8YWQ+ID0gdW5kZWZpbmVkIGlmIGRpZmZlcmVudCB0aGFuIDxhcz4KLSAqCTxhcz4gPSB2YWx1ZSB3aG9zZSBtb3N0IHNpZ25pZmljYW50IHNldCBiaXQgaXMgdG8gYmUgZm91bmQKLSAqCTxhdD4gPSB1bmRlZmluZWQKLSAqCW5vIG90aGVyIHJlZ2lzdGVycyBhcmUgdXNlZCBieSB0aGlzIG1hY3JvLgotICogIE9uIGV4aXQ6Ci0gKgk8YWQ+ID0gPGJhc2U+ICsgaW5kZXggb2YgbXNiaXQgc2V0IGluIG9yaWdpbmFsIDxhcz4sCi0gKgkgICAgID0gPGJhc2U+IC0gMSBpZiBvcmlnaW5hbCA8YXM+IHdhcyB6ZXJvLgotICoJPGFzPiBjbG9iYmVyZWQgKGlmIG5vdCA8YWQ+KQotICoJPGF0PiBjbG9iYmVyZWQgKGlmIG5vdCA8YWQ+KQotICogIEV4YW1wbGU6Ci0gKglmaW5kX21zX3NldGJpdCBhMCwgYTQsIGEwLCAwCQktLSByZXR1cm4gaW4gYTAgaW5kZXggb2YgbXNiaXQgc2V0IGluIGE0Ci0gKi8KLQotCS5tYWNybwlmaW5kX21zX3NldGJpdCBhZCwgYXMsIGF0LCBiYXNlCi0jaWYgWENIQUxfSEFWRV9OU0EKLQltb3ZpCVxhdCwgMzErXGJhc2UKLQluc2F1CVxhcywgXGFzCS8vIGdldCBpbmRleCBvZiBcYXMsIG51bWJlcmVkIGZyb20gbXNiaXQgKDMyIGlmIGFic2VudCkKLQlzdWIJXGFkLCBcYXQsIFxhcwkvLyBnZXQgbnVtYmVyaW5nIGZyb20gbHNiaXQgKDAuLjMxLCAtMSBpZiBhYnNlbnQpCi0jZWxzZSAvKiBYQ0hBTF9IQVZFX05TQSAqLwotCW1vdmkJXGF0LCBcYmFzZQkvLyBzdGFydCB3aXRoIHJlc3VsdCBvZiAwIChwb2ludCB0byBsc2JpdCBvZiAzMikKLQotCWJlcXoJXGFzLCAyZgkJLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvIGFyZ3VtZW50OiByZXR1cm4gLTEKLQlibHR1aQlcYXMsIDB4MTAwMDAsIDFmCS8vIGlzIGl0IG9uZSBvZiB0aGUgMTYgbHNiaXRzPyAoaWYgc28sIGNoZWNrIGxvd2VyIDE2IGJpdHMpCi0JYWRkaQlcYXQsIFxhdCwgMTYJLy8gbm8sIGluY3JlbWVudCByZXN1bHQgdG8gdXBwZXIgMTYgYml0cyAob2YgMzIpCi0JLy9zcmxpCVxhcywgXGFzLCAxNgkvLyBjaGVjayB1cHBlciBoYWxmIChzaGlmdCByaWdodCAxNiBiaXRzKQotCWV4dHVpCVxhcywgXGFzLCAxNiwgMTYJLy8gY2hlY2sgdXBwZXIgaGFsZiAoc2hpZnQgcmlnaHQgMTYgYml0cykKLTE6CWJsdHVpCVxhcywgMHgxMDAsIDFmCS8vIGlzIGl0IG9uZSBvZiB0aGUgOCBsc2JpdHM/IChpZiBzbywgY2hlY2sgbG93ZXIgOCBiaXRzKQotCWFkZGkJXGF0LCBcYXQsIDgJLy8gbm8sIGluY3JlbWVudCByZXN1bHQgdG8gdXBwZXIgOCBiaXRzIChvZiAxNikKLQlzcmxpCVxhcywgXGFzLCA4CS8vIHNoaWZ0IHJpZ2h0IHRvIGNoZWNrIHVwcGVyIDggYml0cwotMToJYmx0dWkJXGFzLCAweDEwLCAxZgkvLyBpcyBpdCBvbmUgb2YgdGhlIDQgbHNiaXRzPyAoaWYgc28sIGNoZWNrIGxvd2VyIDQgYml0cykKLQlhZGRpCVxhdCwgXGF0LCA0CS8vIG5vLCBpbmNyZW1lbnQgcmVzdWx0IHRvIHVwcGVyIDQgYml0cyAob2YgOCkKLQlzcmxpCVxhcywgXGFzLCA0CS8vIHNoaWZ0IHJpZ2h0IDQgYml0cyB0byBjaGVjayB1cHBlciBoYWxmCi0xOglibHR1aQlcYXMsIDB4NCwgMWYJLy8gaXMgaXQgb25lIG9mIHRoZSAyIGxzYml0cz8gKGlmIHNvLCBjaGVjayBsb3dlciAyIGJpdHMpCi0JYWRkaQlcYXQsIFxhdCwgMgkvLyBubywgaW5jcmVtZW50IHJlc3VsdCB0byB1cHBlciAyIGJpdHMgKG9mIDQpCi0Jc3JsaQlcYXMsIFxhcywgMgkvLyBzaGlmdCByaWdodCAyIGJpdHMgdG8gY2hlY2sgdXBwZXIgaGFsZgotMToJYmx0dWkJXGFzLCAweDIsIDFmCS8vIGlzIGl0IHRoZSBsc2JpdD8KLQlhZGRpCVxhdCwgXGF0LCAyCS8vIG5vLCBpbmNyZW1lbnQgcmVzdWx0IHRvIHVwcGVyIGJpdCAob2YgMikKLTI6CWFkZGkJXGF0LCBcYXQsIC0xCS8vIChmcm9tIGp1c3QgYWJvdmU6IGFkZCAxOyAgZnJvbSBiZXF6OiByZXR1cm4gLTEpCi0JLy9zcmxpCVxhcywgXGFzLCAxCi0xOgkJCQkvLyBkb25lISBcYXQgY29udGFpbnMgaW5kZXggb2YgbXNiaXQgc2V0IChvciAtMSBpZiBub25lIHNldCkKLQkuaWYJMHhcYWQgLSAweFxhdAkvLyBkZXN0aW5hdGlvbiBkaWZmZXJlbnQgdGhhbiBcYXQgPyAod29ya3MgYmVjYXVzZSByZWdzIGFyZSBhMC1hMTUpCi0JbW92CVxhZCwgXGF0CS8vIHRoZW4gbW92ZSByZXN1bHQgdG8gXGFkCi0JLmVuZGlmCi0jZW5kaWYgLyogWENIQUxfSEFWRV9OU0EgKi8KLQkuZW5kbQkvLyBmaW5kX21zX3NldGJpdAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBmaW5kX2xzX3NldGJpdAotICoKLSAqICBUaGlzIG1hY3JvIGZpbmRzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgdGhhdCBpcyBzZXQgaW4gPGFzPiwKLSAqICBhbmQgcmV0dXJuIGl0cyBpbmRleCBpbiA8YWQ+LgotICogIFVzYWdlIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgZmluZF9tc19zZXRiaXQgbWFjcm8uCi0gKiAgRXhhbXBsZToKLSAqCWZpbmRfbHNfc2V0Yml0IGEwLCBhNCwgYTAsIDAJLS0gcmV0dXJuIGluIGEwIGluZGV4IG9mIGxzYml0IHNldCBpbiBhNAotICovCi0KLQkubWFjcm8JZmluZF9sc19zZXRiaXQgYWQsIGFzLCBhdCwgYmFzZQotCW5lZwlcYXQsIFxhcwkvLyBrZWVwIG9ubHkgdGhlIGxlYXN0LXNpZ25pZmljYW50IGJpdCB0aGF0IGlzIHNldC4uLgotCWFuZAlcYXMsIFxhdCwgXGFzCS8vIC4uLiBpbiBcYXMKLQlmaW5kX21zX3NldGJpdAlcYWQsIFxhcywgXGF0LCBcYmFzZQotCS5lbmRtCS8vIGZpbmRfbHNfc2V0Yml0Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIGZpbmRfbHNfb25lCi0gKgotICogIFNhbWUgYXMgZmluZF9sc19zZXRiaXQgd2l0aCBiYXNlIHplcm8uCi0gKiAgU291cmNlIChhcykgYW5kIGRlc3RpbmF0aW9uIChhZCkgcmVnaXN0ZXJzIG11c3QgYmUgZGlmZmVyZW50LgotICogIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotICovCi0KLQkubWFjcm8JZmluZF9sc19vbmUgYWQsIGFzCi0JZmluZF9sc19zZXRiaXQJXGFkLCBcYXMsIFxhZCwgMAotCS5lbmRtCS8vIGZpbmRfbHNfb25lCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIGZsb29wLCBmbG9vcG5leiwgZmxvb3BndHosIGZsb29wZW5kCi0gKgotICogIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCBmb3IgZmFzdCBpbm5lciBsb29wcyB0aGF0Ci0gKiAgd29yayB3aGV0aGVyIG9yIG5vdCB0aGUgTG9vcHMgb3B0aW9ucyBpcyBjb25maWd1cmVkLgotICogIElmIHRoZSBMb29wcyBvcHRpb24gaXMgY29uZmlndXJlZCwgdGhleSBzaW1wbHkgdXNlCi0gKiAgdGhlIHplcm8tb3ZlcmhlYWQgTE9PUCBpbnN0cnVjdGlvbnM7IG90aGVyd2lzZQotICogIHRoZXkgdXNlIGV4cGxpY2l0IGRlY3JlbWVudCBhbmQgYnJhbmNoIGluc3RydWN0aW9ucy4KLSAqCi0gKiAgVGhleSBhcmUgdXNlZCBpbiBwYWlycywgd2l0aCBmbG9vcCwgZmxvb3BuZXogb3IgZmxvb3BndHoKLSAqICBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLCBhbmQgZmxvb3BlbmQgYXQgdGhlIGVuZC4KLSAqCi0gKiAgRWFjaCBwYWlyIG9mIGxvb3AgbWFjcm8gY2FsbHMgbXVzdCBiZSBnaXZlbiB0aGUgbG9vcCBjb3VudAotICogIGFkZHJlc3MgcmVnaXN0ZXIgYW5kIGEgdW5pcXVlIGxhYmVsIGZvciB0aGF0IGxvb3AuCi0gKgotICogIEV4YW1wbGU6Ci0gKgotICoJbW92aQkgYTMsIDE2ICAgICAvLyBsb29wIDE2IHRpbWVzCi0gKglmbG9vcCAgICBhMywgbXlsb29wMQotICoJOgotICoJYm5leiAgICAgYTcsIGVuZDEJLy8gZXhpdCBsb29wIGlmIGE3ICE9IDAKLSAqCToKLSAqCWZsb29wZW5kIGEzLCBteWxvb3AxCi0gKiAgZW5kMToKLSAqCi0gKiAgTGlrZSB0aGUgTE9PUCBpbnN0cnVjdGlvbnMsIHRoZXNlIG1hY3JvcyBjYW5ub3QgYmUKLSAqICBuZXN0ZWQsIG11c3QgaW5jbHVkZSBhdCBsZWFzdCBvbmUgaW5zdHJ1Y3Rpb24sCi0gKiAgY2Fubm90IGNhbGwgZnVuY3Rpb25zIGluc2lkZSB0aGUgbG9vcCwgZXRjLgotICogIFRoZSBsb29wIGNhbiBiZSBleGl0ZWQgYnkganVtcGluZyB0byB0aGUgaW5zdHJ1Y3Rpb24KLSAqICBmb2xsb3dpbmcgZmxvb3BlbmQgKG9yIGVsc2V3aGVyZSBvdXRzaWRlIHRoZSBsb29wKSwKLSAqICBvciBjb250aW51ZWQgYnkganVtcGluZyB0byBhIE5PUCBpbnN0cnVjdGlvbiBwbGFjZWQKLSAqICBpbW1lZGlhdGVseSBiZWZvcmUgZmxvb3BlbmQuCi0gKgotICogIFVubGlrZSBMT09QIGluc3RydWN0aW9ucywgdGhlIHJlZ2lzdGVyIHBhc3NlZCB0byBmbG9vcCoKLSAqICBjYW5ub3QgYmUgdXNlZCBpbnNpZGUgdGhlIGxvb3AsIGJlY2F1c2UgaXQgaXMgdXNlZCBhcwotICogIHRoZSBsb29wIGNvdW50ZXIgaWYgdGhlIExvb3BzIG9wdGlvbiBpcyBub3QgY29uZmlndXJlZC4KLSAqICBBbmQgaXRzIHZhbHVlIGlzIHVuZGVmaW5lZCBhZnRlciBleGl0aW5nIHRoZSBsb29wLgotICogIEFuZCBiZWNhdXNlIHRoZSBsb29wIGNvdW50ZXIgcmVnaXN0ZXIgaXMgYWN0aXZlIGluc2lkZQotICogIHRoZSBsb29wLCB5b3UgY2FuJ3QgZWFzaWx5IHVzZSB0aGlzIGNvbnN0cnVjdCB0byBsb29wCi0gKiAgYWNyb3NzIGEgcmVnaXN0ZXIgZmlsZSB1c2luZyBST1RXIGFzIHlvdSBtaWdodCB3aXRoIExPT1AKLSAqICBpbnN0cnVjdGlvbnMsIHVubGVzcyB5b3UgY29weSB0aGUgbG9vcCByZWdpc3RlciBhbG9uZy4KLSAqLwotCi0JLyogIE5hbWVkIGxhYmVsIHZlcnNpb24gb2YgdGhlIG1hY3JvczogICovCi0KLQkubWFjcm8JZmxvb3AJCWFyLCBlbmRsYWJlbAotCWZsb29wXwkJXGFyLCAuTGZsb29wc3RhcnRfXGVuZGxhYmVsLCAuTGZsb29wZW5kX1xlbmRsYWJlbAotCS5lbmRtCi0KLQkubWFjcm8JZmxvb3BuZXoJYXIsIGVuZGxhYmVsCi0JZmxvb3BuZXpfCVxhciwgLkxmbG9vcHN0YXJ0X1xlbmRsYWJlbCwgLkxmbG9vcGVuZF9cZW5kbGFiZWwKLQkuZW5kbQotCi0JLm1hY3JvCWZsb29wZ3R6CWFyLCBlbmRsYWJlbAotCWZsb29wZ3R6XwlcYXIsIC5MZmxvb3BzdGFydF9cZW5kbGFiZWwsIC5MZmxvb3BlbmRfXGVuZGxhYmVsCi0JLmVuZG0KLQotCS5tYWNybwlmbG9vcGVuZAlhciwgZW5kbGFiZWwKLQlmbG9vcGVuZF8JXGFyLCAuTGZsb29wc3RhcnRfXGVuZGxhYmVsLCAuTGZsb29wZW5kX1xlbmRsYWJlbAotCS5lbmRtCi0KLQkvKiAgTnVtYmVyZWQgbG9jYWwgbGFiZWwgdmVyc2lvbiBvZiB0aGUgbWFjcm9zOiAgKi8KLSNpZiAwIC8qVU5URVNURUQqLwotCS5tYWNybwlmbG9vcDg5CQlhcgotCWZsb29wXwkJXGFyLCA4LCA5ZgotCS5lbmRtCi0KLQkubWFjcm8JZmxvb3BuZXo4OQlhcgotCWZsb29wbmV6XwlcYXIsIDgsIDlmCi0JLmVuZG0KLQotCS5tYWNybwlmbG9vcGd0ejg5CWFyCi0JZmxvb3BndHpfCVxhciwgOCwgOWYKLQkuZW5kbQotCi0JLm1hY3JvCWZsb29wZW5kODkJYXIKLQlmbG9vcGVuZF8JXGFyLCA4YiwgOQotCS5lbmRtCi0jZW5kaWYgLyowKi8KLQotCS8qICBVbmRlcmx5aW5nIHZlcnNpb24gb2YgdGhlIG1hY3JvczogICovCi0KLQkubWFjcm8JZmxvb3BfCWFyLCBzdGFydGxhYmVsLCBlbmRsYWJlbHJlZgotCS5pZmRlZglfaW5mbG9vcF8KLQkuaWYJX2luZmxvb3BfCi0JLmVycgkvLyBFcnJvcjogZmxvb3AgY2Fubm90IGJlIG5lc3RlZAotCS5lbmRpZgotCS5lbmRpZgotCS5zZXQJX2luZmxvb3BfLCAxCi0jaWYgWENIQUxfSEFWRV9MT09QUwotCWxvb3AJXGFyLCBcZW5kbGFiZWxyZWYKLSNlbHNlIC8qIFhDSEFMX0hBVkVfTE9PUFMgKi8KLVxzdGFydGxhYmVsOgotCWFkZGkJXGFyLCBcYXIsIC0xCi0jZW5kaWYgLyogWENIQUxfSEFWRV9MT09QUyAqLwotCS5lbmRtCS8vIGZsb29wXwotCi0JLm1hY3JvCWZsb29wbmV6Xwlhciwgc3RhcnRsYWJlbCwgZW5kbGFiZWxyZWYKLQkuaWZkZWYJX2luZmxvb3BfCi0JLmlmCV9pbmZsb29wXwotCS5lcnIJLy8gRXJyb3I6IGZsb29wbmV6IGNhbm5vdCBiZSBuZXN0ZWQKLQkuZW5kaWYKLQkuZW5kaWYKLQkuc2V0CV9pbmZsb29wXywgMQotI2lmIFhDSEFMX0hBVkVfTE9PUFMKLQlsb29wbmV6CVxhciwgXGVuZGxhYmVscmVmCi0jZWxzZSAvKiBYQ0hBTF9IQVZFX0xPT1BTICovCi0JYmVxeglcYXIsIFxlbmRsYWJlbHJlZgotXHN0YXJ0bGFiZWw6Ci0JYWRkaQlcYXIsIFxhciwgLTEKLSNlbmRpZiAvKiBYQ0hBTF9IQVZFX0xPT1BTICovCi0JLmVuZG0JLy8gZmxvb3BuZXpfCi0KLQkubWFjcm8JZmxvb3BndHpfCWFyLCBzdGFydGxhYmVsLCBlbmRsYWJlbHJlZgotCS5pZmRlZglfaW5mbG9vcF8KLQkuaWYJX2luZmxvb3BfCi0JLmVycgkvLyBFcnJvcjogZmxvb3BndHogY2Fubm90IGJlIG5lc3RlZAotCS5lbmRpZgotCS5lbmRpZgotCS5zZXQJX2luZmxvb3BfLCAxCi0jaWYgWENIQUxfSEFWRV9MT09QUwotCWxvb3BndHoJXGFyLCBcZW5kbGFiZWxyZWYKLSNlbHNlIC8qIFhDSEFMX0hBVkVfTE9PUFMgKi8KLQlibHR6CVxhciwgXGVuZGxhYmVscmVmCi0JYmVxeglcYXIsIFxlbmRsYWJlbHJlZgotXHN0YXJ0bGFiZWw6Ci0JYWRkaQlcYXIsIFxhciwgLTEKLSNlbmRpZiAvKiBYQ0hBTF9IQVZFX0xPT1BTICovCi0JLmVuZG0JLy8gZmxvb3BndHpfCi0KLQotCS5tYWNybwlmbG9vcGVuZF8JYXIsIHN0YXJ0bGFiZWxyZWYsIGVuZGxhYmVsCi0JLmlmbmRlZglfaW5mbG9vcF8KLQkuZXJyCS8vIEVycm9yOiBmbG9vcGVuZCB3aXRob3V0IG1hdGNoaW5nIGZsb29wWFhYCi0JLmVuZGlmCi0JLmlmZXEJX2luZmxvb3BfCi0JLmVycgkvLyBFcnJvcjogZmxvb3BlbmQgd2l0aG91dCBtYXRjaGluZyBmbG9vcFhYWAotCS5lbmRpZgotCS5zZXQJX2luZmxvb3BfLCAwCi0jaWYgISBYQ0hBTF9IQVZFX0xPT1BTCi0JYm5leglcYXIsIFxzdGFydGxhYmVscmVmCi0jZW5kaWYgLyogWENIQUxfSEFWRV9MT09QUyAqLwotXGVuZGxhYmVsOgotCS5lbmRtCS8vIGZsb29wZW5kXwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBjcnNpbCAgLS0gIGNvbmRpdGlvbmFsIFJTSUwgKHJlYWQvc2V0IGludGVycnVwdCBsZXZlbCkKLSAqCi0gKiAgRXhlY3V0ZXMgdGhlIFJTSUwgaW5zdHJ1Y3Rpb24gaWYgaXQgZXhpc3RzLCBlbHNlIGp1c3QgcmVhZHMgUFMuCi0gKiAgVGhlIFJTSUwgaW5zdHJ1Y3Rpb24gZG9lcyBub3QgZXhpc3QgaW4gdGhlIG5ldyBleGNlcHRpb24gYXJjaGl0ZWN0dXJlCi0gKiAgaWYgdGhlIGludGVycnVwdCBvcHRpb24gaXMgbm90IHNlbGVjdGVkLgotICovCi0KLQkubWFjcm8JY3JzaWwJYXIsIG5ld2xldmVsCi0jaWYgWENIQUxfSEFWRV9PTERfRVhDX0FSQ0ggfHwgWENIQUxfSEFWRV9JTlRFUlJVUFRTCi0JcnNpbAlcYXIsIFxuZXdsZXZlbAotI2Vsc2UKLQlyc3IJXGFyLCBQUwotI2VuZGlmCi0JLmVuZG0JLy8gY3JzaWwKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgd2luZG93X3NwaWxsezQsOCwxMn0KLSAqCi0gKiAgVGhlc2UgbWFjcm9zIHNwaWxsIGNhbGxlcnMnIHJlZ2lzdGVyIHdpbmRvd3MgdG8gdGhlIHN0YWNrLgotICogIFRoZXkgd29yayBmb3IgYm90aCBwcml2aWxlZ2VkIGFuZCBub24tcHJpdmlsZWdlZCB0YXNrcy4KLSAqICBNdXN0IGJlIGNhbGxlZCBmcm9tIGEgd2luZG93ZWQgQUJJIGNvbnRleHQsIGVnLiB3aXRoaW4KLSAqICBhIHdpbmRvd2VkIEFCSSBmdW5jdGlvbiAoaWUuIHZhbGlkIHN0YWNrIGZyYW1lLCB3aW5kb3cKLSAqICBleGNlcHRpb25zIGVuYWJsZWQsIG5vdCBpbiBleGNlcHRpb24gbW9kZSwgZXRjKS4KLSAqCi0gKiAgVGhpcyBtYWNybyByZXF1aXJlcyBhIHNpbmdsZSBpbnZvY2F0aW9uIG9mIHRoZSB3aW5kb3dfc3BpbGxfY29tbW9uCi0gKiAgbWFjcm8gaW4gdGhlIHNhbWUgYXNzZW1ibHkgdW5pdCBhbmQgc2VjdGlvbi4KLSAqCi0gKiAgTm90ZSB0aGF0IHVzaW5nIHdpbmRvd19zcGlsbHs0LDgsMTJ9IG1hY3JvcyBpcyBtb3JlIGVmZmljaWVudAotICogIHRoYW4gY2FsbGluZyBhIGZ1bmN0aW9uIGltcGxlbWVudGVkIHVzaW5nIHdpbmRvd19zcGlsbF9mdW5jdGlvbiwKLSAqICBiZWNhdXNlIHRoZSBsYXR0ZXIgbmVlZHMgZXh0cmEgY29kZSB0byBmaWd1cmUgb3V0IHRoZSBzaXplIG9mCi0gKiAgdGhlIGNhbGwgdG8gdGhlIHNwaWxsaW5nIGZ1bmN0aW9uLgotICoKLSAqICBFeGFtcGxlIHVzYWdlOgotICoKLSAqCQkudGV4dAotICoJCS5hbGlnbgk0Ci0gKgkJLmdsb2JhbAlzb21lX2Z1bmN0aW9uCi0gKgkJLnR5cGUJc29tZV9mdW5jdGlvbixAZnVuY3Rpb24KLSAqCXNvbWVfZnVuY3Rpb246Ci0gKgkJZW50cnkJYTEsIDE2Ci0gKgkJOgotICoJCToKLSAqCi0gKgkJd2luZG93X3NwaWxsNAkvLyBzcGlsbCB3aW5kb3dzIG9mIHNvbWVfZnVuY3Rpb24ncyBjYWxsZXJzOyBwcmVzZXJ2ZXMgYTAuLmEzIG9ubHk7Ci0gKgkJCQkvLyB0byB1c2Ugd2luZG93X3NwaWxsezgsMTJ9IGluIHRoaXMgZXhhbXBsZSBmdW5jdGlvbiB3ZSdkIGhhdmUKLSAqCQkJCS8vIHRvIGluY3JlYXNlIHNwYWNlIGFsbG9jYXRlZCBieSB0aGUgZW50cnkgaW5zdHJ1Y3Rpb24sIGJlY2F1c2UKLSAqCQkJCS8vIDE2IGJ5dGVzIG9ubHkgYWxsb3dzIGNhbGw0OyAzMiBvciA0OCBieXRlcyAoK2xvY2FscykgYXJlIG5lZWRlZAotICoJCQkJLy8gZm9yIGNhbGw4L3dpbmRvd19zcGlsbDggb3IgY2FsbDEyL3dpbmRvd19zcGlsbDEyIHJlc3BlY3RpdmVseS4KLSAqCQk6Ci0gKgotICoJCXJldHcKLSAqCi0gKgkJd2luZG93X3NwaWxsX2NvbW1vbgkvLyBpbnN0YW50aWF0ZXMgY29kZSB1c2VkIGJ5IHdpbmRvd19zcGlsbDQKLSAqCi0gKgotICogIE9uIGVudHJ5OgotICoJbm9uZSAoaWYgd2luZG93X3NwaWxsNCkKLSAqCXN0YWNrIGZyYW1lIGhhcyBlbm91Z2ggc3BhY2UgYWxsb2NhdGVkIGZvciBjYWxsOCAoaWYgd2luZG93X3NwaWxsOCkKLSAqCXN0YWNrIGZyYW1lIGhhcyBlbm91Z2ggc3BhY2UgYWxsb2NhdGVkIGZvciBjYWxsMTIgKGlmIHdpbmRvd19zcGlsbDEyKQotICogIE9uIGV4aXQ6Ci0gKgkgYTQuLmExNSBjbG9iYmVyZWQgKGlmIHdpbmRvd19zcGlsbDQpCi0gKgkgYTguLmExNSBjbG9iYmVyZWQgKGlmIHdpbmRvd19zcGlsbDgpCi0gKglhMTIuLmExNSBjbG9iYmVyZWQgKGlmIHdpbmRvd19zcGlsbDEyKQotICoJbm8gY2FsbGVyIHdpbmRvd3MgYXJlIGluIGxpdmUgcmVnaXN0ZXJzCi0gKi8KLQotCS5tYWNybwl3aW5kb3dfc3BpbGw0Ci0jaWYgWENIQUxfSEFWRV9XSU5ET1dFRAotIyBpZiBYQ0hBTF9OVU1fQVJFR1MgPT0gMTYKLQltb3ZpCWExNSwgMAkJCS8vIGZvciAxNi1yZWdpc3RlciBmaWxlcywgbm8gbmVlZCB0byBjYWxsIHRvIHJlYWNoIHRoZSBlbmQKLSMgZWxpZiBYQ0hBTF9OVU1fQVJFR1MgPT0gMzIKLQljYWxsNAkuTF9fd2R3c3BpbGxfYXNzaXN0MjgJLy8gY2FsbCBkZWVwIGVub3VnaCB0byBjbGVhciBvdXQgYW55IGxpdmUgY2FsbGVycwotIyBlbGlmIFhDSEFMX05VTV9BUkVHUyA9PSA2NAotCWNhbGw0CS5MX193ZHdzcGlsbF9hc3Npc3Q2MAkvLyBjYWxsIGRlZXAgZW5vdWdoIHRvIGNsZWFyIG91dCBhbnkgbGl2ZSBjYWxsZXJzCi0jIGVuZGlmCi0jZW5kaWYKLQkuZW5kbQkvLyB3aW5kb3dfc3BpbGw0Ci0KLQkubWFjcm8Jd2luZG93X3NwaWxsOAotI2lmIFhDSEFMX0hBVkVfV0lORE9XRUQKLSMgaWYgWENIQUxfTlVNX0FSRUdTID09IDE2Ci0JbW92aQlhMTUsIDAJCQkvLyBmb3IgMTYtcmVnaXN0ZXIgZmlsZXMsIG5vIG5lZWQgdG8gY2FsbCB0byByZWFjaCB0aGUgZW5kCi0jIGVsaWYgWENIQUxfTlVNX0FSRUdTID09IDMyCi0JY2FsbDgJLkxfX3dkd3NwaWxsX2Fzc2lzdDI0CS8vIGNhbGwgZGVlcCBlbm91Z2ggdG8gY2xlYXIgb3V0IGFueSBsaXZlIGNhbGxlcnMKLSMgZWxpZiBYQ0hBTF9OVU1fQVJFR1MgPT0gNjQKLQljYWxsOAkuTF9fd2R3c3BpbGxfYXNzaXN0NTYJLy8gY2FsbCBkZWVwIGVub3VnaCB0byBjbGVhciBvdXQgYW55IGxpdmUgY2FsbGVycwotIyBlbmRpZgotI2VuZGlmCi0JLmVuZG0JLy8gd2luZG93X3NwaWxsOAotCi0JLm1hY3JvCXdpbmRvd19zcGlsbDEyCi0jaWYgWENIQUxfSEFWRV9XSU5ET1dFRAotIyBpZiBYQ0hBTF9OVU1fQVJFR1MgPT0gMTYKLQltb3ZpCWExNSwgMAkJCS8vIGZvciAxNi1yZWdpc3RlciBmaWxlcywgbm8gbmVlZCB0byBjYWxsIHRvIHJlYWNoIHRoZSBlbmQKLSMgZWxpZiBYQ0hBTF9OVU1fQVJFR1MgPT0gMzIKLQljYWxsMTIJLkxfX3dkd3NwaWxsX2Fzc2lzdDIwCS8vIGNhbGwgZGVlcCBlbm91Z2ggdG8gY2xlYXIgb3V0IGFueSBsaXZlIGNhbGxlcnMKLSMgZWxpZiBYQ0hBTF9OVU1fQVJFR1MgPT0gNjQKLQljYWxsMTIJLkxfX3dkd3NwaWxsX2Fzc2lzdDUyCS8vIGNhbGwgZGVlcCBlbm91Z2ggdG8gY2xlYXIgb3V0IGFueSBsaXZlIGNhbGxlcnMKLSMgZW5kaWYKLSNlbmRpZgotCS5lbmRtCS8vIHdpbmRvd19zcGlsbDEyCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogIHdpbmRvd19zcGlsbF9mdW5jdGlvbgotICoKLSAqICBUaGlzIG1hY3JvIG91dHB1dHMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgc3BpbGwgaXRzIGNhbGxlcidzIGNhbGxlcnMnCi0gKiAgcmVnaXN0ZXIgd2luZG93cyB0byB0aGUgc3RhY2suICBFZy4gaXQgY291bGQgYmUgdXNlZCB0byBpbXBsZW1lbnQKLSAqICBhIHZlcnNpb24gb2YgeHRoYWxfd2luZG93X3NwaWxsKCkgdGhhdCB3b3JrcyBpbiBub24tcHJpdmlsZWdlZCB0YXNrcy4KLSAqICBUaGlzIHdvcmtzIGZvciBib3RoIHByaXZpbGVnZWQgYW5kIG5vbi1wcml2aWxlZ2VkIHRhc2tzLgotICoKLSAqICBUeXBpY2FsIHVzYWdlOgotICoKLSAqCQkudGV4dAotICoJCS5hbGlnbgk0Ci0gKgkJLmdsb2JhbAlteV9zcGlsbF9mdW5jdGlvbgotICoJCS50eXBlCW15X3NwaWxsX2Z1bmN0aW9uLEBmdW5jdGlvbgotICoJbXlfc3BpbGxfZnVuY3Rpb246Ci0gKgkJd2luZG93X3NwaWxsX2Z1bmN0aW9uCi0gKgotICogIE9uIGVudHJ5IHRvIHJlc3VsdGluZyBmdW5jdGlvbjoKLSAqCW5vbmUKLSAqICBPbiBleGl0IGZyb20gcmVzdWx0aW5nIGZ1bmN0aW9uOgotICoJbm9uZSAobm8gY2FsbGVyIHdpbmRvd3MgYXJlIGluIGxpdmUgcmVnaXN0ZXJzKQotICovCi0KLQkubWFjcm8Jd2luZG93X3NwaWxsX2Z1bmN0aW9uCi0jaWYgWENIQUxfSEFWRV9XSU5ET1dFRAotIyBpZiBYQ0hBTF9OVU1fQVJFR1MgPT0gMzIKLQllbnRyeQlzcCwgNDgKLQliYmNpLmwJYTAsIDMxLCAxZgkJLy8gYnJhbmNoIGlmIGNhbGxlZCB3aXRoIGNhbGw0Ci0JYmJzaS5sCWEwLCAzMCwgMmYJCS8vIGJyYW5jaCBpZiBjYWxsZWQgd2l0aCBjYWxsMTIKLQljYWxsOAkuTF9fd2R3c3BpbGxfYXNzaXN0MTYJLy8gY2FsbGVkIHdpdGggY2FsbDgsIG9ubHkgbmVlZCBhbm90aGVyIDgKLQlyZXR3Ci0xOgljYWxsMTIJLkxfX3dkd3NwaWxsX2Fzc2lzdDE2CS8vIGNhbGxlZCB3aXRoIGNhbGw0LCBvbmx5IG5lZWQgYW5vdGhlciAxMgotCXJldHcKLTI6CWNhbGw0CS5MX193ZHdzcGlsbF9hc3Npc3QxNgkvLyBjYWxsZWQgd2l0aCBjYWxsMTIsIG9ubHkgbmVlZCBhbm90aGVyIDQKLQlyZXR3Ci0jIGVsaWYgWENIQUxfTlVNX0FSRUdTID09IDY0Ci0JZW50cnkJc3AsIDQ4Ci0JYmJjaS5sCWEwLCAzMSwgMWYJCS8vIGJyYW5jaCBpZiBjYWxsZWQgd2l0aCBjYWxsNAotCWJic2kubAlhMCwgMzAsIDJmCQkvLyBicmFuY2ggaWYgY2FsbGVkIHdpdGggY2FsbDEyCi0JY2FsbDQJLkxfX3dkd3NwaWxsX2Fzc2lzdDUyCS8vIGNhbGxlZCB3aXRoIGNhbGw4LCBvbmx5IG5lZWQgYSBjYWxsNAotCXJldHcKLTE6CWNhbGw4CS5MX193ZHdzcGlsbF9hc3Npc3Q1MgkvLyBjYWxsZWQgd2l0aCBjYWxsNCwgb25seSBuZWVkIGEgY2FsbDgKLQlyZXR3Ci0yOgljYWxsMTIJLkxfX3dkd3NwaWxsX2Fzc2lzdDQwCS8vIGNhbGxlZCB3aXRoIGNhbGwxMiwgY2FuIHNraXAgYSBjYWxsMTIKLQlyZXR3Ci0jIGVsaWYgWENIQUxfTlVNX0FSRUdTID09IDE2Ci0JZW50cnkJc3AsIDE2Ci0JYmJjaS5sCWEwLCAzMSwgMWYJLy8gYnJhbmNoIGlmIGNhbGxlZCB3aXRoIGNhbGw0Ci0JYmJzaS5sCWEwLCAzMCwgMmYJLy8gYnJhbmNoIGlmIGNhbGxlZCB3aXRoIGNhbGwxMgotCW1vdmkJYTcsIDAJCS8vIGNhbGxlZCB3aXRoIGNhbGw4Ci0JcmV0dwotMToJbW92aQlhMTEsIDAJCS8vIGNhbGxlZCB3aXRoIGNhbGw0Ci0yOglyZXR3CQkJLy8gaWYgY2FsbGVkIHdpdGggY2FsbDEyLCBldmVyeXRoaW5nIGFscmVhZHkgc3BpbGxlZAotCi0vLwltb3ZpCWExNSwgMAkJLy8gdHJpY2sgdG8gc3BpbGwgYWxsIGJ1dCB0aGUgZGlyZWN0IGNhbGxlcgotLy8JagkxZgotLy8JLy8gIFRoZSBlbnRyeSBpbnN0cnVjdGlvbiBpcyBtYWdpY2FsIGluIHRoZSBhc3NlbWJsZXIgKGdldHMgYXV0by1hbGlnbmVkKQotLy8JLy8gIHNvIHdlIGhhdmUgdG8ganVtcCB0byBpdCB0byBhdm9pZCBmYWxsaW5nIHRocm91Z2ggdGhlIHBhZGRpbmcuCi0vLwkvLyAgV2UgbmVlZCBlbnRyeS9yZXR3IHRvIGtub3cgd2hlcmUgdG8gcmV0dXJuLgotLy8xOgllbnRyeQlzcCwgMTYKLS8vCXJldHcKLSMgZWxzZQotIyAgZXJyb3IgInVucmVjb2duaXplZCBhZGRyZXNzIHJlZ2lzdGVyIGZpbGUgc2l6ZSIKLSMgZW5kaWYKLSNlbmRpZiAvKiBYQ0hBTF9IQVZFX1dJTkRPV0VEICovCi0Jd2luZG93X3NwaWxsX2NvbW1vbgotCS5lbmRtCS8vIHdpbmRvd19zcGlsbF9mdW5jdGlvbgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICB3aW5kb3dfc3BpbGxfY29tbW9uCi0gKgotICogIENvbW1vbiBjb2RlIHVzZWQgYnkgYW55IG51bWJlciBvZiBpbnZvY2F0aW9ucyBvZiB0aGUgd2luZG93X3NwaWxsIyMKLSAqICBhbmQgd2luZG93X3NwaWxsX2Z1bmN0aW9uIG1hY3Jvcy4KLSAqCi0gKiAgTXVzdCBiZSBpbnN0YW50aWF0ZWQgZXhhY3RseSBvbmNlIHdpdGhpbiBhIGdpdmVuIGFzc2VtYmx5IHVuaXQsCi0gKiAgd2l0aGluIGNhbGwvaiByYW5nZSBvZiBhbmQgc2FtZSBzZWN0aW9uIGFzIHdpbmRvd19zcGlsbCMjCi0gKiAgbWFjcm8gaW52b2NhdGlvbnMgZm9yIHRoYXQgYXNzZW1ibHkgdW5pdC4KLSAqICAoSXMgYXV0b21hdGljYWxseSBpbnN0YW50aWF0ZWQgYnkgdGhlIHdpbmRvd19zcGlsbF9mdW5jdGlvbiBtYWNyby4pCi0gKi8KLQotCS5tYWNybwl3aW5kb3dfc3BpbGxfY29tbW9uCi0jaWYgWENIQUxfSEFWRV9XSU5ET1dFRCAmJiAoWENIQUxfTlVNX0FSRUdTID09IDMyIHx8IFhDSEFMX05VTV9BUkVHUyA9PSA2NCkKLQkuaWZuZGVmCS5MX193ZHdzcGlsbF9kZWZpbmVkCi0jIGlmIFhDSEFMX05VTV9BUkVHUyA+PSA2NAotLkxfX3dkd3NwaWxsX2Fzc2lzdDYwOgotCWVudHJ5CXNwLCAzMgotCWNhbGw4CS5MX193ZHdzcGlsbF9hc3Npc3Q1MgotCXJldHcKLS5MX193ZHdzcGlsbF9hc3Npc3Q1NjoKLQllbnRyeQlzcCwgMTYKLQljYWxsNAkuTF9fd2R3c3BpbGxfYXNzaXN0NTIKLQlyZXR3Ci0uTF9fd2R3c3BpbGxfYXNzaXN0NTI6Ci0JZW50cnkJc3AsIDQ4Ci0JY2FsbDEyCS5MX193ZHdzcGlsbF9hc3Npc3Q0MAotCXJldHcKLS5MX193ZHdzcGlsbF9hc3Npc3Q0MDoKLQllbnRyeQlzcCwgNDgKLQljYWxsMTIJLkxfX3dkd3NwaWxsX2Fzc2lzdDI4Ci0JcmV0dwotIyBlbmRpZgotLkxfX3dkd3NwaWxsX2Fzc2lzdDI4OgotCWVudHJ5CXNwLCA0OAotCWNhbGwxMgkuTF9fd2R3c3BpbGxfYXNzaXN0MTYKLQlyZXR3Ci0uTF9fd2R3c3BpbGxfYXNzaXN0MjQ6Ci0JZW50cnkJc3AsIDMyCi0JY2FsbDgJLkxfX3dkd3NwaWxsX2Fzc2lzdDE2Ci0JcmV0dwotLkxfX3dkd3NwaWxsX2Fzc2lzdDIwOgotCWVudHJ5CXNwLCAxNgotCWNhbGw0CS5MX193ZHdzcGlsbF9hc3Npc3QxNgotCXJldHcKLS5MX193ZHdzcGlsbF9hc3Npc3QxNjoKLQllbnRyeQlzcCwgMTYKLQltb3ZpCWExNSwgMAotCXJldHcKLQkuc2V0CS5MX193ZHdzcGlsbF9kZWZpbmVkLCAxCi0JLmVuZGlmCi0jZW5kaWYgLyogWENIQUxfSEFWRV9XSU5ET1dFRCB3aXRoIDMyIG9yIDY0IGFyZWdzICovCi0JLmVuZG0JLy8gd2luZG93X3NwaWxsX2NvbW1vbgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICBiZXFpMzIKLSAqCi0gKiAgbWFjcm8gaW1wbGVtZW50cyB2ZXJzaW9uIG9mIGJlcWkgZm9yIGFyYml0cmFyeSAzMi1iaXQgaW1taWRpYXRlIHZhbHVlCi0gKgotICogICAgIGJlcWkzMiBheCwgYXksIGltbTMyLCBsYWJlbAotICoKLSAqICBDb21wYXJlcyB2YWx1ZSBpbiByZWdpc3RlciBheCB3aXRoIGltbTMyIHZhbHVlIGFuZCBqdW1wcyB0byBsYWJlbCBpZgotICogIGVxdWFsLiBDbG9iYmVyZXMgcmVnaXN0ZXIgYXkgaWYgbmVlZGVkCi0gKgotICovCi0gICAubWFjcm8gYmVxaTMyCWF4LCBheSwgaW1tLCBsYWJlbAotICAgIC5pZmVxICgoXGltbS0xKSAmIH43KQkvLyAxLi44ID8KLQkJYmVxaQlcYXgsIFxpbW0sIFxsYWJlbAotICAgIC5lbHNlCi0gICAgICAuaWZlcSAoXGltbSsxKQkJLy8gLTEgPwotCQliZXFpCVxheCwgXGltbSwgXGxhYmVsCi0gICAgICAuZWxzZQotICAgICAgICAuaWZlcSAoXGltbSkJCS8vIDAgPwotCQliZXF6CVxheCwgXGxhYmVsCi0gICAgICAgIC5lbHNlCi0JCS8vICBXZSBjb3VsZCBhbHNvIGhhbmRsZSBpbW1lZGlhdGVzIDEwLDEyLDE2LDMyLDY0LDEyOCwyNTYKLQkJLy8gIGJ1dCBpdCB3b3VsZCBiZSBhIGxvbmcgbWFjcm8uLi4KLQkJbW92aQlcYXksIFxpbW0KLQkJYmVxCVxheCwgXGF5LCBcbGFiZWwKLSAgICAgICAgLmVuZGlmCi0gICAgICAuZW5kaWYKLSAgICAuZW5kaWYKLSAgIC5lbmRtIC8vIGJlcWkzMgotCi0jZW5kaWYgLypYVEVOU0FfQ09SRUFTTV9IKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS9jb3JlYml0cy5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS9jb3JlYml0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTc4YWRlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EvY29yZWJpdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLSNpZm5kZWYgWFRFTlNBX0NPUkVCSVRTX0gKLSNkZWZpbmUgWFRFTlNBX0NPUkVCSVRTX0gKLQotLyoKLSAqIFRISVMgRklMRSBJUyBHRU5FUkFURUQgLS0gRE8gTk9UIE1PRElGWSBCWSBIQU5ECi0gKgotICogeHRlbnNhL2NvcmViaXRzLmggLSBYdGVuc2EgU3BlY2lhbCBSZWdpc3RlciBmaWVsZCBwb3NpdGlvbnMgYW5kIG1hc2tzLgotICoKLSAqIChJbiBwcmV2aW91cyByZWxlYXNlcywgdGhlc2Ugd2VyZSBkZWZpbmVkIGluIHNwZWNyZWcuaCwgYSBnZW5lcmF0ZWQgZmlsZS4KLSAqICBUaGlzIGZpbGUgaXMgbm90IGdlbmVyYXRlZCwgaS5lLiBpdCBpcyBwcm9jZXNzb3IgY29uZmlndXJhdGlvbiBpbmRlcGVuZGVudC4pCi0gKi8KLQotCi0vKiAgRVhDQ0FVU0UgcmVnaXN0ZXIgZmllbGRzOiAgKi8KLSNkZWZpbmUgRVhDQ0FVU0VfRVhDQ0FVU0VfU0hJRlQJMAotI2RlZmluZSBFWENDQVVTRV9FWENDQVVTRV9NQVNLCTB4M0YKLS8qICBFeGNlcHRpb24gY2F1c2VzIChtb3N0bHkgaW5jb21wbGV0ZSEpOiAgKi8KLSNkZWZpbmUgRVhDQ0FVU0VfSUxMRUdBTAkJMAotI2RlZmluZSBFWENDQVVTRV9TWVNDQUxMCQkxCi0jZGVmaW5lIEVYQ0NBVVNFX0lGRVRDSEVSUk9SCQkyCi0jZGVmaW5lIEVYQ0NBVVNFX0xPQURTVE9SRUVSUk9SCQkzCi0jZGVmaW5lIEVYQ0NBVVNFX0xFVkVMMUlOVEVSUlVQVAk0Ci0jZGVmaW5lIEVYQ0NBVVNFX0FMTE9DQQkJCTUKLQotLyogIFBTIHJlZ2lzdGVyIGZpZWxkczogICovCi0jZGVmaW5lIFBTX1dPRV9TSElGVAkJMTgKLSNkZWZpbmUgUFNfV09FX01BU0sJCTB4MDAwNDAwMDAKLSNkZWZpbmUgUFNfV09FCQkJUFNfV09FX01BU0sKLSNkZWZpbmUgUFNfQ0FMTElOQ19TSElGVAkxNgotI2RlZmluZSBQU19DQUxMSU5DX01BU0sJCTB4MDAwMzAwMDAKLSNkZWZpbmUgUFNfQ0FMTElOQyhuKQkJKCgobikmMyk8PFBTX0NBTExJTkNfU0hJRlQpCS8qIG4gPSAwLi4zICovCi0jZGVmaW5lIFBTX09XQl9TSElGVAkJOAotI2RlZmluZSBQU19PV0JfTUFTSwkJMHgwMDAwMEYwMAotI2RlZmluZSBQU19PV0IobikJCSgoKG4pJjE1KTw8UFNfT1dCX1NISUZUKQkvKiBuID0gMC4uMTUgKG9yIDAuLjcpICovCi0jZGVmaW5lIFBTX1JJTkdfU0hJRlQJCTYKLSNkZWZpbmUgUFNfUklOR19NQVNLCQkweDAwMDAwMEMwCi0jZGVmaW5lIFBTX1JJTkcobikJCSgoKG4pJjMpPDxQU19SSU5HX1NISUZUKQkvKiBuID0gMC4uMyAqLwotI2RlZmluZSBQU19VTV9TSElGVAkJNQotI2RlZmluZSBQU19VTV9NQVNLCQkweDAwMDAwMDIwCi0jZGVmaW5lIFBTX1VNCQkJUFNfVU1fTUFTSwotI2RlZmluZSBQU19FWENNX1NISUZUCQk0Ci0jZGVmaW5lIFBTX0VYQ01fTUFTSwkJMHgwMDAwMDAxMAotI2RlZmluZSBQU19FWENNCQkJUFNfRVhDTV9NQVNLCi0jZGVmaW5lIFBTX0lOVExFVkVMX1NISUZUCTAKLSNkZWZpbmUgUFNfSU5UTEVWRUxfTUFTSwkweDAwMDAwMDBGCi0jZGVmaW5lIFBTX0lOVExFVkVMKG4pCQkoKG4pJlBTX0lOVExFVkVMX01BU0spCQkvKiBuID0gMC4uMTUgKi8KLS8qICBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IChkZXByZWNhdGVkKTogICovCi0jZGVmaW5lIFBTX1BST0dTVEFDS19TSElGVAlQU19VTV9TSElGVAotI2RlZmluZSBQU19QUk9HU1RBQ0tfTUFTSwlQU19VTV9NQVNLCi0jZGVmaW5lIFBTX1BST0dfU0hJRlQJCVBTX1VNX1NISUZUCi0jZGVmaW5lIFBTX1BST0dfTUFTSwkJUFNfVU1fTUFTSwotI2RlZmluZSBQU19QUk9HCQkJUFNfVU0KLQotLyogIERCUkVBS0NuIHJlZ2lzdGVyIGZpZWxkczogICovCi0jZGVmaW5lIERCUkVBS0NfTUFTS19TSElGVAkJMAotI2RlZmluZSBEQlJFQUtDX01BU0tfTUFTSwkJMHgwMDAwMDAzRgotI2RlZmluZSBEQlJFQUtDX0xPQURCUkVBS19TSElGVAkJMzAKLSNkZWZpbmUgREJSRUFLQ19MT0FEQlJFQUtfTUFTSwkJMHg0MDAwMDAwMAotI2RlZmluZSBEQlJFQUtDX1NUT1JFQlJFQUtfU0hJRlQJMzEKLSNkZWZpbmUgREJSRUFLQ19TVE9SRUJSRUFLX01BU0sJCTB4ODAwMDAwMDAKLQotLyogIERFQlVHQ0FVU0UgcmVnaXN0ZXIgZmllbGRzOiAgKi8KLSNkZWZpbmUgREVCVUdDQVVTRV9ERUJVR0lOVF9TSElGVAk1Ci0jZGVmaW5lIERFQlVHQ0FVU0VfREVCVUdJTlRfTUFTSwkweDIwCS8qIGRlYnVnIGludGVycnVwdCAqLwotI2RlZmluZSBERUJVR0NBVVNFX0JSRUFLTl9TSElGVAkJNAotI2RlZmluZSBERUJVR0NBVVNFX0JSRUFLTl9NQVNLCQkweDEwCS8qIEJSRUFLLk4gaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgREVCVUdDQVVTRV9CUkVBS19TSElGVAkJMwotI2RlZmluZSBERUJVR0NBVVNFX0JSRUFLX01BU0sJCTB4MDgJLyogQlJFQUsgaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgREVCVUdDQVVTRV9EQlJFQUtfU0hJRlQJCTIKLSNkZWZpbmUgREVCVUdDQVVTRV9EQlJFQUtfTUFTSwkJMHgwNAkvKiBEQlJFQUsgbWF0Y2ggKi8KLSNkZWZpbmUgREVCVUdDQVVTRV9JQlJFQUtfU0hJRlQJCTEKLSNkZWZpbmUgREVCVUdDQVVTRV9JQlJFQUtfTUFTSwkJMHgwMgkvKiBJQlJFQUsgbWF0Y2ggKi8KLSNkZWZpbmUgREVCVUdDQVVTRV9JQ09VTlRfU0hJRlQJCTAKLSNkZWZpbmUgREVCVUdDQVVTRV9JQ09VTlRfTUFTSwkJMHgwMQkvKiBJQ09VTlQgd291bGQgaW5jcmVtZW50IHRvIHplcm8gKi8KLQotI2VuZGlmIC8qWFRFTlNBX0NPUkVCSVRTX0gqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2hhbC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS9oYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEwNDcyNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2hhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsODIyICswLDAgQEAKLSNpZm5kZWYgWFRFTlNBX0hBTF9ICi0jZGVmaW5lIFhURU5TQV9IQUxfSAotCi0vKgotICogVEhJUyBGSUxFIElTIEdFTkVSQVRFRCAtLSBETyBOT1QgTU9ESUZZIEJZIEhBTkQKLSAqCi0gKiBpbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL2hhbC5oIC0tIGNvbnRhaW5zIGEgZGVmaW5pdGlvbiBvZiB0aGUKLSAqIENvcmUgSEFMIGludGVyZmFjZS4KLSAqCi0gKiBBbGwgZGVmaW5pdGlvbnMgaW4gdGhpcyBoZWFkZXIgZmlsZSBhcmUgaW5kZXBlbmRlbnQgb2YgYW55IHNwZWNpZmljCi0gKiBYdGVuc2EgcHJvY2Vzc29yIGNvbmZpZ3VyYXRpb24uICBUaHVzIGFuIE9TIG9yIG90aGVyIHNvZnR3YXJlIGNhbgotICogaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlIGFuZCBiZSBjb21waWxlZCBpbnRvIGNvbmZpZ3VyYXRpb24tCi0gKiBpbmRlcGVuZGVudCBvYmplY3RzIHRoYXQgY2FuIGJlIGRpc3RyaWJ1dGVkIGFuZCBldmVudHVhbGx5IGxpbmtlZAotICogdG8gdGhlIEhBTCBsaWJyYXJ5IChsaWJoYWwuYSkgdG8gY3JlYXRlIGEgY29uZmlndXJhdGlvbi1zcGVjaWZpYwotICogZmluYWwgZXhlY3V0YWJsZS4KLSAqCi0gKiBDZXJ0YWluIGRlZmluaXRpb25zLCBob3dldmVyLCBhcmUgcmVsZWFzZS1zcGVjaWZpYyAtLSBzdWNoIGFzIHRoZQotICogWFRIQUxfUkVMRUFTRV94eHggbWFjcm9zIChvciBhZGRpdGlvbnMgbWFkZSBpbiBsYXRlciByZWxlYXNlcykuCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFRlbnNpbGljYSBJbmMuCi0gKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgCQkJIENvbnN0YW50IERlZmluaXRpb25zCi0JCQkoc2hhcmVkIHdpdGggYXNzZW1ibHkpCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiAgU29mdHdhcmUgcmVsZWFzZSBpbmZvcm1hdGlvbiAobm90IGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMhKTogICovCi0jZGVmaW5lIFhUSEFMX1JFTEVBU0VfTUFKT1IJMTA1MAotI2RlZmluZSBYVEhBTF9SRUxFQVNFX01JTk9SCTAKLSNkZWZpbmUgWFRIQUxfUkVMRUFTRV9OQU1FCSJUMTA1MC4wLTIwMDItMDgtMDYtZW5nMCIKLSNkZWZpbmUgWFRIQUxfUkVMRUFTRV9JTlRFUk5BTAkiMjAwMi0wOC0wNi1lbmcwIgotI2RlZmluZSBYVEhBTF9SRUxfVDEwNTAJMQotI2RlZmluZSBYVEhBTF9SRUxfVDEwNTBfMAkxCi0jZGVmaW5lIFhUSEFMX1JFTF9UMTA1MF8wXzIwMDIJMQotI2RlZmluZSBYVEhBTF9SRUxfVDEwNTBfMF8yMDAyXzA4CTEKLSNkZWZpbmUgWFRIQUxfUkVMX1QxMDUwXzBfMjAwMl8wOF8wNgkxCi0jZGVmaW5lIFhUSEFMX1JFTF9UMTA1MF8wXzIwMDJfMDhfMDZfRU5HMAkxCi0KLS8qICBIQUwgdmVyc2lvbiBudW1iZXJzICh0aGVzZSBuYW1lcyBhcmUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpOiAgKi8KLSNkZWZpbmUgWFRIQUxfTUFKT1JfUkVWCQlYVEhBTF9SRUxFQVNFX01BSk9SCi0jZGVmaW5lIFhUSEFMX01JTk9SX1JFVgkJWFRIQUxfUkVMRUFTRV9NSU5PUgotLyoKLSAqICBBIGJpdCBvZiBzb2Z0d2FyZSByZWxlYXNlIGhpc3Rvcnkgb24gdmFsdWVzIG9mIFhUSEFMX3tNQUpPUixNSU5PUn1fUkVWOgotICoKLSAqCVJlbGVhc2UJCU1BSk9SCU1JTk9SCQlDb21tZW50Ci0gKgk9PT09PT09CQk9PT09PQk9PT09PQkJPT09PT09PQotICoJVDEwMTUubgkJbi9hCW4vYQkJKEhBTCBub3QgeWV0IGF2YWlsYWJsZSkKLSAqCVQxMDIwLnswLDEsMn0JMAkxCQkoSEFMIGJldGEpCi0gKglUMTAyMC57Myw0fQkwCTIJCUZpcnN0IHJlbGVhc2UuCi0gKglUMTAyMC5uIChuPjQpCTAJMiBvciA+MwkJKFRCRCkKLSAqCVQxMDMwLjAJCTAJMQkJKEhBTCBiZXRhKQotICoJVDEwMzAuezEsMn0JMAkzCQlFcXVpdmFsZW50IHRvIGZpcnN0IHJlbGVhc2UuCi0gKglUMTAzMC5uIChuPj0zKQkwCT49IDMJCShUQkQpCi0gKglUMTA0MC5uCQkxMDQwCW4JCUZ1bGwgQ0hBTCBhdmFpbGFibGUgZnJvbSBUMTA0MC4yCi0gKglUMTA1MC5uCQkxMDUwCW4JCUN1cnJlbnQgcmVsZWFzZS4KLSAqCi0gKgotICogIE5vdGU6ICB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIHNvZnR3YXJlIHJlbGVhc2Ugd2l0aAotICogIHdoaWNoIHNvbWV0aGluZyBpcyBjb21waWxlZCAoYWNjZXNzaWJsZSB1c2luZyBYVEhBTF9SRUxFQVNFXyogbWFjcm9zKQotICogIGFuZCB0aGUgc29mdHdhcmUgcmVsZWFzZSB3aXRoIHdoaWNoIHRoZSBIQUwgbGlicmFyeSB3YXMgY29tcGlsZWQKLSAqICAoYWNjZXNzaWJsZSB1c2luZyBYdGhhbF9yZWxlYXNlXyogZ2xvYmFsIHZhcmlhYmxlcykuICBUaGlzCi0gKiAgZGlzdGluY3Rpb24gaXMgcGFydGljdWxhcmx5IHJlbGV2YW50IGZvciB2ZW5kb3JzIHRoYXQgZGlzdHJpYnV0ZQotICogIGNvbmZpZ3VyYXRpb24taW5kZXBlbmRlbnQgYmluYXJpZXMgKGVnLiBhbiBPUyksIHdoZXJlIHRoZWlyIGN1c3RvbWVyCi0gKiAgbWlnaHQgbGluayBpdCB3aXRoIGEgSEFMIG9mIGEgZGlmZmVyZW50IFh0ZW5zYSBzb2Z0d2FyZSByZWxlYXNlLgotICogIEluIHRoaXMgY2FzZSwgaXQgbWF5IGJlIGFwcHJvcHJpYXRlIGZvciB0aGUgT1MgdG8gdmVyaWZ5IGF0IHJ1bi10aW1lCi0gKiAgd2hldGhlciBYVEhBTF9SRUxFQVNFXyogYW5kIFh0aGFsX3JlbGVhc2VfKiBhcmUgY29tcGF0aWJsZS4KLSAqICBbR3VpZGVsaW5lcyBhcyB0byB3aGljaCByZWxlYXNlIGlzIGNvbXBhdGlibGUgd2l0aCB3aGljaCBhcmUgbm90Ci0gKiAgY3VycmVudGx5IHByb3ZpZGVkIGV4cGxpY2l0bHksIGJ1dCBtaWdodCBiZSBpbmZlcnJlZCBmcm9tIHJlYWRpbmcKLSAqICBPU0tpdCBkb2N1bWVudGF0aW9uIGZvciBhbGwgcmVsZWFzZXMgLS0gY29tcGF0aWJpbGl0eSBpcyBhbHNvIGhpZ2hseQotICogIGRlcGVuZGVudCBvbiB3aGljaCBIQUwgZmVhdHVyZXMgYXJlIHVzZWQuICBFYWNoIHJlbGVhc2UgaXMgdXN1YWxseQotICogIGJhY2t3YXJkIGNvbXBhdGlibGUsIHdpdGggdmVyeSBmZXcgZXhjZXB0aW9ucyBpZiBhbnkuXQotICoKLSAqICBOb3RlczoKLSAqCVRvcm5hZG8gMi4wIHN1cHBvcnRlZCBpbiBUMTAyMC4zKywgVDEwMzAuMSssIGFuZCBUMTA0MC57MCwxfSBvbmx5LgotICoJVG9ybmFkbyAyLjAuMiBzdXBwb3J0ZWQgaW4gVDEwNDAuMissIGFuZCBUMTA1MC4KLSAqCUNvbXBpbGUtdGltZSBIQUwgcG9ydCBvZiBOdWNsZXVzUGx1cyBzdXBwb3J0ZWQgYnkgVDEwNDAuMisgYW5kIFQxMDUwLgotICovCi0KLQotLyoKLSAqICBBcmNoaXRlY3R1cmFsIGxpbWl0cywgaW5kZXBlbmRlbnQgb2YgY29uZmlndXJhdGlvbi4KLSAqICBOb3RlIHRoYXQgdGhlc2UgYXJlIElTQS1kZWZpbmVkIGxpbWl0cywgbm90IG1pY3JvLWFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbgotICogIGxpbWl0cyBlbmZvcmNlZCBieSB0aGUgWHRlbnNhIFByb2Nlc3NvciBHZW5lcmF0b3IgKHdoaWNoIG1heSBiZSBzdHJpY3RlciB0aGFuCi0gKiAgdGhlc2UgYmVsb3cpLgotICovCi0jZGVmaW5lIFhUSEFMX01BWF9DUFMJCTgJLyogbWF4IG51bWJlciBvZiBjb3Byb2Nlc3NvcnMgKDAuLjcpICovCi0jZGVmaW5lIFhUSEFMX01BWF9JTlRFUlJVUFRTCTMyCS8qIG1heCBudW1iZXIgb2YgaW50ZXJydXB0cyAoMC4uMzEpICovCi0jZGVmaW5lIFhUSEFMX01BWF9JTlRMRVZFTFMJMTYJLyogbWF4IG51bWJlciBvZiBpbnRlcnJ1cHQgbGV2ZWxzICgwLi4xNSkgKi8KLQkJCQkJLyogKGFzIG9mIFQxMDQwLCBpbXBsZW1lbnRhdGlvbiBsaW1pdCBpcyA3OiAwLi42KSAqLwotI2RlZmluZSBYVEhBTF9NQVhfVElNRVJTCTQJLyogbWF4IG51bWJlciBvZiB0aW1lcnMgKENDT01QQVJFMC4uQ0NPTVBBUkUzKSAqLwotCQkJCQkvKiAoYXMgb2YgVDEwNDAsIGltcGxlbWVudGF0aW9uIGxpbWl0IGlzIDM6IDAuLjIpICovCi0KLS8qICBNaXNjOiAgKi8KLSNkZWZpbmUgWFRIQUxfTElUVExFRU5ESUFOCQkwCi0jZGVmaW5lIFhUSEFMX0JJR0VORElBTgkJCTEKLQotCi0vKiAgSW50ZXJydXB0IHR5cGVzOiAgKi8KLSNkZWZpbmUgWFRIQUxfSU5UVFlQRV9VTkNPTkZJR1VSRUQJMAotI2RlZmluZSBYVEhBTF9JTlRUWVBFX1NPRlRXQVJFCQkxCi0jZGVmaW5lIFhUSEFMX0lOVFRZUEVfRVhURVJOX0VER0UJMgotI2RlZmluZSBYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAkzCi0jZGVmaW5lIFhUSEFMX0lOVFRZUEVfVElNRVIJCTQKLSNkZWZpbmUgWFRIQUxfSU5UVFlQRV9OTUkJCTUKLSNkZWZpbmUgWFRIQUxfTUFYX0lOVFRZUEVTCQk2CS8qIG51bWJlciBvZiBpbnRlcnJ1cHQgdHlwZXMgKi8KLQotLyogIFRpbWVyIHJlbGF0ZWQ6ICAqLwotI2RlZmluZSBYVEhBTF9USU1FUl9VTkNPTkZJR1VSRUQJLTEJLyogWHRoYWxfdGltZXJfaW50ZXJydXB0W10gdmFsdWUgZm9yIG5vbi1leGlzdGVudCB0aW1lcnMgKi8KLSNkZWZpbmUgWFRIQUxfVElNRVJfVU5BU1NJR05FRAlYVEhBTF9USU1FUl9VTkNPTkZJR1VSRUQJLyogKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5KSAqLwotCi0KLS8qICBBY2Nlc3MgTW9kZSBiaXRzICh0ZW50YXRpdmUpOiAgKi8JLyogYml0IGFiYnIgdW5pdCBzaG9ydF9uYW1lICAgICAgIFBQQyBlcXUgLSBEZXNjcmlwdGlvbiAqLwotI2RlZmluZSBYVEhBTF9BTUJfRVhDRVBUSU9OCTAJLyogMDAxIEUgRVggZmxzOiBFWGNlcHRpb24gICAgICAgIG5vbmUgICAgLSBnZW5lcmF0ZSBleGNlcHRpb24gb24gYW55IGFjY2VzcyAoYWthICJpbGxlZ2FsIikgKi8KLSNkZWZpbmUgWFRIQUxfQU1CX0hJVENBQ0hFCTEJLyogMDAyIEMgQ0ggZmxzOiB1c2UgQ2FjaGUgb24gSGl0IH4oSSBDSSkgLSB1c2UgY2FjaGUgb24gaGl0IC0tIHdheSBmcm9tIHRhZyBtYXRjaCBbb3IgSCBIQywgb3IgVSBVQ10gKElTQTogc2FtZSwgZXhjZXB0IGZvciBJc29sYXRlIGNhc2UpICovCi0jZGVmaW5lIFhUSEFMX0FNQl9BTExPQ0FURQkyCS8qIDAwNCBBIEFMIGZsPzogQUxsb2NhdGUgICAgICAgICBub25lICAgIC0gcmVmaWxsIGNhY2hlIG9uIG1pc3MgLS0gd2F5IGZyb20gTFJVIFtvciBGIEZJIGZpbGxdIChJU0E6IFJlYWQvV3JpdGUgTWlzcyBSZWZpbGwpICovCi0jZGVmaW5lIFhUSEFMX0FNQl9XUklURVRIUlUJMwkvKiAwMDggVyBXVCAtLXM6IFdyaXRlVGhyb3VnaCAgICAgVyBXVCAgICAtIHN0b3JlIGltbWVkaWF0ZWx5IHRvIG1lbW9yeSAoSVNBOiBzYW1lKSAqLwotI2RlZmluZSBYVEhBTF9BTUJfSVNPTEFURQk0CS8qIDAxMCBJIElTIGZsczogSVNvbGF0ZSAgICAgICAgICBub25lICAgIC0gdXNlIGNhY2hlIHJlZ2FyZGxlc3Mgb2YgaGl0LXZzLW1pc3MgLS0gd2F5IGZyb20gdmFkZHIgKElTQTogdXNlLWNhY2hlLW9uLW1pc3MraGl0KSAqLwotI2RlZmluZSBYVEhBTF9BTUJfR1VBUkQJCTUJLyogMDIwIEcgR1UgP2w/OiBHVWFyZCAgICAgICAgICAgIEcgKiAgICAgLSBub24tc3BlY3VsYXRpdmU7IHNwZWMvcmVwbGF5IHJlZnMgbm90IHBlcm1pdHRlZCAqLwotI2lmIDAKLSNkZWZpbmUgWFRIQUxfQU1CX09SREVSRUQJeAkvKiAwMDAgTyBPUiBmbHM6IE9SZGVyZWQgICAgICAgICAgRyAqICAgICAtIG1lbSBhY2Nlc3NlcyBjYW5ub3QgYmUgb3V0IG9mIG9yZGVyICovCi0jZGVmaW5lIFhUSEFMX0FNQl9GVVNFV1JJVEVTCXgJLyogMDAwIEYgRlcgLS1zOiBGdXNlV3JpdGVzICAgICAgIG5vbmUgICAgLSBhbGxvdyBjb21iaW5pbmcvbWVyZ2luZyBtdWx0aXBsZSB3cml0ZXMgKHRvIHNhbWUgZGF0YXBhdGggZGF0YSB1bml0KSBpbnRvIG9uZSAoaW1wbGllZCBieSB3cml0ZWJhY2spICovCi0jZGVmaW5lIFhUSEFMX0FNQl9DT0hFUkVOVAl4CS8qIDAwMCBNIE1DIGZsPzogTWVtL01QIENvaGVyZW50ICBNICAgICAgIC0gb24gcmVhZHMsIG90aGVyIENQVXMvYnVzLW1hc3RlcnMgbWF5IG5lZWQgdG8gc3VwcGx5IGRhdGEgKi8KLSNkZWZpbmUgWFRIQUxfQU1CX1RSVVNURUQJeAkvKiAwMDAgVCBUUiA/bD86IFRSdXN0ZWQgICAgICAgICAgbm9uZSAgICAtIG1lbW9yeSB3aWxsIG5vdCBidXMgZXJyb3IgKGlmIGl0IGRvZXMsIGhhbmRsZSBhcyBmYXRhbCBpbXByZWNpc2UgaW50ZXJydXB0KSAqLwotI2RlZmluZSBYVEhBTF9BTUJfUFJFRkVUQ0gJeAkvKiAwMDAgUCBQUiBmbD86IFBSZWZldGNoICAgICAgICAgbm9uZSAgICAtIG9uIHJlZmlsbCwgcmVhZCBsaW5lKzEgaW50byBwcmVmZXRjaCBidWZmZXJzICovCi0jZGVmaW5lIFhUSEFMX0FNQl9TVFJFQU0JeAkvKiAwMDAgUyBTVCA/Pz86IFNUcmVhbWluZyAgICAgICAgbm9uZSAgICAtIGFjY2VzcyBvbmUgb2YgTiBzdHJlYW0gYnVmZmVycyAqLwotI2VuZGlmIC8qMCovCi0KLSNkZWZpbmUgWFRIQUxfQU1fRVhDRVBUSU9OCSgxPDxYVEhBTF9BTUJfRVhDRVBUSU9OKQotI2RlZmluZSBYVEhBTF9BTV9ISVRDQUNIRQkoMTw8WFRIQUxfQU1CX0hJVENBQ0hFKQotI2RlZmluZSBYVEhBTF9BTV9BTExPQ0FURQkoMTw8WFRIQUxfQU1CX0FMTE9DQVRFKQotI2RlZmluZSBYVEhBTF9BTV9XUklURVRIUlUJKDE8PFhUSEFMX0FNQl9XUklURVRIUlUpCi0jZGVmaW5lIFhUSEFMX0FNX0lTT0xBVEUJKDE8PFhUSEFMX0FNQl9JU09MQVRFKQotI2RlZmluZSBYVEhBTF9BTV9HVUFSRAkJKDE8PFhUSEFMX0FNQl9HVUFSRCkKLSNpZiAwCi0jZGVmaW5lIFhUSEFMX0FNX09SREVSRUQJKDE8PFhUSEFMX0FNQl9PUkRFUkVEKQotI2RlZmluZSBYVEhBTF9BTV9GVVNFV1JJVEVTCSgxPDxYVEhBTF9BTUJfRlVTRVdSSVRFUykKLSNkZWZpbmUgWFRIQUxfQU1fQ09IRVJFTlQJKDE8PFhUSEFMX0FNQl9DT0hFUkVOVCkKLSNkZWZpbmUgWFRIQUxfQU1fVFJVU1RFRAkoMTw8WFRIQUxfQU1CX1RSVVNURUQpCi0jZGVmaW5lIFhUSEFMX0FNX1BSRUZFVENICSgxPDxYVEhBTF9BTUJfUFJFRkVUQ0gpCi0jZGVmaW5lIFhUSEFMX0FNX1NUUkVBTQkJKDE8PFhUSEFMX0FNQl9TVFJFQU0pCi0jZW5kaWYgLyowKi8KLQotLyoKLSAqICBBbGxvd2VkIEFjY2VzcyBNb2RlcyAoYml0IGNvbWJpbmF0aW9ucykuCi0gKgotICogIENvbHVtbnMgYXJlOgotICogICJGT0dJV0FDRSIKLSAqCUFjY2VzcyBtb2RlIGJpdHMgKHNlZSBYVEhBTF9BTUJfeHh4IGFib3ZlKS4KLSAqCTxsZXR0ZXI+ID0gYml0IGlzIHNldAotICoJJy0nICAgICAgPSBiaXQgaXMgY2xlYXIKLSAqCScuJyAgICAgID0gYml0IGlzIGlycmVsZXZhbnQgLyBkb24ndCBjYXJlLCBhcyBmb2xsb3dzOgotICoJCQlFPTEgbWFrZXMgYWxsIG90aGVycyBpcnJlbGV2YW50Ci0gKgkJCVcsRiByZWxldmFudCBvbmx5IGZvciBzdG9yZXMKLSAqICAiMjM0NSIKLSAqCUluZGljYXRlcyB3aGljaCBYdGVuc2EgcmVsZWFzZXMgc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZwotICoJYWNjZXNzIG1vZGUuICBSZWxlYXNlcyBmb3IgZWFjaCBjaGFyYWN0ZXIgY29sdW1uIGFyZToKLSAqCQkyID0gcHJpb3IgdG8gVDEwMjAuMjogICBUMTAxNSAoVjEuNSksIFQxMDIwLjAsIFQxMDIwLjEKLSAqCQkzID0gVDEwMjAuMiBhbmQgbGF0ZXI6ICBUMTAyMC4yKywgVDEwMzAKLSAqCQk0ID0gVDEwNDAKLSAqCQk1ID0gVDEwNTAgKG1heWJlKQotICoJQW5kIHRoZSBjaGFyYWN0ZXIgY29sdW1uIGNvbnRlbnRzIGFyZToKLSAqCQk8bnVtYmVyPiA9IHN1cHBvcnQgYnkgcmVsZWFzZShzKQotICoJCSIuIiA9IHVuc3VwcG9ydGVkIGJ5IHJlbGVhc2UocykKLSAqCQkiPyIgPSBzdXBwb3J0IHVua25vd24KLSAqLwotCQkJCQkvKiBGT0dJV0FDRSAyMzQ1ICovCi0vKiAgRm9yIGluc3RydWN0aW9uIGZldGNoOiAgKi8KLSNkZWZpbmUgWFRIQUxfRkFNX0VYQ0VQVElPTgkweDAwMQkvKiAuLi4uLi4uRSAyMzQ1IGV4Y2VwdGlvbiAqLwotI2RlZmluZSBYVEhBTF9GQU1fSVNPTEFURQkweDAxMgkvKiAuLS1JLi1DLSAuLi4uIGlzb2xhdGUgKi8KLSNkZWZpbmUgWFRIQUxfRkFNX0JZUEFTUwkweDAwMAkvKiAuLS0tLi0tLSAyMzQ1IGJ5cGFzcyAqLwotI2RlZmluZSBYVEhBTF9GQU1fTkFDQUNIRUQJMHgwMDIJLyogLi0tLS4tQy0gLi4uLiBjYWNoZWQgbm8tYWxsb2NhdGUgKGZyb3plbikgKi8KLSNkZWZpbmUgWFRIQUxfRkFNX0NBQ0hFRAkweDAwNgkvKiAuLS0tLkFDLSAyMzQ1IGNhY2hlZCAqLwotLyogIEZvciBkYXRhIGxvYWQ6ICAqLwotI2RlZmluZSBYVEhBTF9MQU1fRVhDRVBUSU9OCTB4MDAxCS8qIC4uLi4uLi5FIDIzNDUgZXhjZXB0aW9uICovCi0jZGVmaW5lIFhUSEFMX0xBTV9JU09MQVRFCTB4MDEyCS8qIC4tLUkuLUMtIDIzNDUgaXNvbGF0ZSAqLwotI2RlZmluZSBYVEhBTF9MQU1fQllQQVNTCTB4MDAwCS8qIC5PLS0uLS0tIDIuLi4gYnlwYXNzIHNwZWN1bGF0aXZlICovCi0jZGVmaW5lIFhUSEFMX0xBTV9CWVBBU1NHCTB4MDIwCS8qIC5PRy0uLS0tIC4zNDUgYnlwYXNzIGd1YXJkZWQgKi8KLSNkZWZpbmUgWFRIQUxfTEFNX05BQ0FDSEVECTB4MDAyCS8qIC5PLS0uLUMtIDIuLi4gY2FjaGVkIG5vLWFsbG9jYXRlIHNwZWN1bGF0aXZlICovCi0jZGVmaW5lIFhUSEFMX0xBTV9OQUNBQ0hFREcJMHgwMjIJLyogLk9HLS4tQy0gLjM0NSBjYWNoZWQgbm8tYWxsb2NhdGUgZ3VhcmRlZCAqLwotI2RlZmluZSBYVEhBTF9MQU1fQ0FDSEVECTB4MDA2CS8qIC4tLS0uQUMtIDIzNDUgY2FjaGVkIHNwZWN1bGF0aXZlICovCi0jZGVmaW5lIFhUSEFMX0xBTV9DQUNIRURHCTB4MDI2CS8qIC4/Ry0uQUMtIC4uLi4gY2FjaGVkIGd1YXJkZWQgKi8KLS8qICBGb3IgZGF0YSBzdG9yZTogICovCi0jZGVmaW5lIFhUSEFMX1NBTV9FWENFUFRJT04JMHgwMDEJLyogLi4uLi4uLkUgMjM0NSBleGNlcHRpb24gKi8KLSNkZWZpbmUgWFRIQUxfU0FNX0lTT0xBVEUJMHgwMzIJLyogLi1HSS0tQy0gMjM0NSBpc29sYXRlICovCi0jZGVmaW5lIFhUSEFMX1NBTV9CWVBBU1MJMHgwMjgJLyogLU9HLVctLS0gMjM0NSBieXBhc3MgKi8KLS8qZWZpbmUgWFRIQUxfU0FNX0JZUEFTU0YJMHgwMjgqLwkvKiBGLUctVy0tLSAuLi4/IGJ5cGFzcyB3cml0ZS1jb21iaW5lZCAqLwotI2RlZmluZSBYVEhBTF9TQU1fV1JJVEVUSFJVCTB4MDJBCS8qIC1PRy1XLUMtIDIzND8gd3JpdGV0aHJvdWdoICovCi0vKmVmaW5lIFhUSEFMX1NBTV9XUklURVRIUlVGCTB4MDJBKi8JLyogRi1HLVctQy0gLi4uNSB3cml0ZXRocm91Z2ggd3JpdGUtY29tYmluZWQgKi8KLSNkZWZpbmUgWFRIQUxfU0FNX1dSSVRFQUxMT0MJMHgwMkUJLyogLU9HLVdBQy0gLi4uPyB3cml0ZXRocm91Z2gtYWxsb2NhdGUgKi8KLS8qZWZpbmUgWFRIQUxfU0FNX1dSSVRFQUxMT0NGCTB4MDJFKi8JLyogRi1HLVdBQy0gLi4uPyB3cml0ZXRocm91Z2gtYWxsb2NhdGUgd3JpdGUtY29tYmluZWQgKi8KLSNkZWZpbmUgWFRIQUxfU0FNX1dSSVRFQkFDSwkweDAyNgkvKiBGLUctLUFDLSAuLi41IHdyaXRlYmFjayAqLwotCi0jaWYgMAotLyoKLSAgICBDYWNoZSBhdHRyaWJ1dGUgZW5jb2RpbmcgZm9yIENBQ0hFQVRUUiAocGVyIElTQSk6Ci0gICAgKE5vdGU6ICBpZiB0aGlzIGRpZmZlcnMgZnJvbSBJU0EgUmVmIE1hbnVhbCwgSVNBIGhhcyBwcmVjZWRlbmNlKQotCi0JSW5zdC1mZXRjaGVzCUxvYWRzCQlTdG9yZXMKLQktLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tCi0weDAJRkNBX0VYQ0VQVElPTiAgP0xDQV9OQUNBQ0hFRF9HKglTQ0FfV1JJVEVUSFJVCSJ1bmNhY2hlZCIKLTB4MQlGQ0FfQ0FDSEVECUxDQV9DQUNIRUQJU0NBX1dSSVRFVEhSVQljYWNoZWQKLTB4MglGQ0FfQllQQVNTCUxDQV9CWVBBU1NfRyoJU0NBX0JZUEFTUwlieXBhc3MKLTB4MwlGQ0FfQ0FDSEVECUxDQV9DQUNIRUQJU0NBX1dSSVRFQUxMT0NGCXdyaXRlLWFsbG9jYXRlCi0JCSAgICAgb3IgTENBX0VYQ0VQVElPTglTQ0FfRVhDRVBUSU9OCShpZiB1bmltcGxlbWVudGVkKQotMHg0CUZDQV9DQUNIRUQJTENBX0NBQ0hFRAlTQ0FfV1JJVEVCQUNLCXdyaXRlLWJhY2sKLQkJICAgICBvciBMQ0FfRVhDRVBUSU9OCVNDQV9FWENFUFRJT04JKGlmIHVuaW1wbGVtZW50ZWQpCi0weDUuLkQJRkNBX0VYQ0VQVElPTglMQ0FfRVhDRVBUSU9OCVNDQV9FWENFUFRJT04JKHJlc2VydmVkKQotMHhFCUZDQV9FWENFUFRJT04JTENBX0lTT0xBVEUJU0NBX0lTT0xBVEUJaXNvbGF0ZQotMHhGCUZDQV9FWENFUFRJT04JTENBX0VYQ0VQVElPTglTQ0FfRVhDRVBUSU9OCWlsbGVnYWwKLSAgICAgKiAgUHJpb3IgdG8gVDEwMjAuMj8sIGd1YXJkIGZlYXR1cmUgbm90IHN1cHBvcnRlZCwgdGhpcyBkZWZhdWx0ZWQgdG8gc3BlY3VsYXRpdmUgKG5vIF9HKQotKi8KLSNlbmRpZiAvKjAqLwotCi0KLSNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmICFkZWZpbmVkKF9OT0NMQU5HVUFHRSkKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIAkJCSAgICAgSEFMCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBDb25zdGFudCB0byBiZSBjaGVja2VkIGluIGJ1aWxkID0gKFhUSEFMX01BSk9SX1JFVjw8MTYpfFhUSEFMX01JTk9SX1JFViAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBYdGhhbF9yZXZfbm87Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIAkJCVByb2Nlc3NvciBTdGF0ZQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHNhdmUgJiByZXN0b3JlIHRoZSBleHRyYSBwcm9jZXNzb3Igc3RhdGUgKi8KLWV4dGVybiB2b2lkIHh0aGFsX3NhdmVfZXh0cmEodm9pZCAqYmFzZSk7Ci1leHRlcm4gdm9pZCB4dGhhbF9yZXN0b3JlX2V4dHJhKHZvaWQgKmJhc2UpOwotCi1leHRlcm4gdm9pZCB4dGhhbF9zYXZlX2NwcmVncyh2b2lkICpiYXNlLCBpbnQpOwotZXh0ZXJuIHZvaWQgeHRoYWxfcmVzdG9yZV9jcHJlZ3Modm9pZCAqYmFzZSwgaW50KTsKLQotLypleHRlcm4gdm9pZCB4dGhhbF9zYXZlX2FsbF9leHRyYSh2b2lkICpiYXNlKTsqLwotLypleHRlcm4gdm9pZCB4dGhhbF9yZXN0b3JlX2FsbF9leHRyYSh2b2lkICpiYXNlKTsqLwotCi0vKiBzcGFjZSBmb3IgcHJvY2Vzc29yIHN0YXRlICovCi1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50IFh0aGFsX2V4dHJhX3NpemU7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50IFh0aGFsX2V4dHJhX2FsaWduOwotLyogc3BhY2UgZm9yIFRJRSByZWdpc3RlciBmaWxlcyAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBYdGhhbF9jcHJlZ3Nfc2l6ZVtYVEhBTF9NQVhfQ1BTXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgWHRoYWxfY3ByZWdzX2FsaWduW1hUSEFMX01BWF9DUFNdOwotCi0vKiB0b3RhbCBvZiBzcGFjZSBmb3IgdGhlIHByb2Nlc3NvciBzdGF0ZSAoZm9yIFRvcjIpICovCi1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50IFh0aGFsX2FsbF9leHRyYV9zaXplOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBYdGhhbF9hbGxfZXh0cmFfYWxpZ247Ci0KLS8qIGluaXRpYWxpemUgdGhlIGV4dHJhIHByb2Nlc3NvciAqLwotLypleHRlcm4gdm9pZCB4dGhhbF9pbml0X2V4dHJhKHZvaWQpOyovCi0vKiBpbml0aWFsaXplIHRoZSBUSUUgY29wcm9jZXNzb3IgKi8KLS8qZXh0ZXJuIHZvaWQgeHRoYWxfaW5pdF9jcChpbnQpOyovCi0KLS8qIGluaXRpYWxpemUgdGhlIGV4dHJhIHByb2Nlc3NvciAqLwotZXh0ZXJuIHZvaWQgeHRoYWxfaW5pdF9tZW1fZXh0cmEodm9pZCAqKTsKLS8qIGluaXRpYWxpemUgdGhlIFRJRSBjb3Byb2Nlc3NvciAqLwotZXh0ZXJuIHZvaWQgeHRoYWxfaW5pdF9tZW1fY3Aodm9pZCAqLCBpbnQpOwotCi0vKiB2YWxpZGF0ZSAmIGludmFsaWRhdGUgdGhlIFRJRSByZWdpc3RlciBmaWxlICovCi1leHRlcm4gdm9pZCB4dGhhbF92YWxpZGF0ZV9jcChpbnQpOwotZXh0ZXJuIHZvaWQgeHRoYWxfaW52YWxpZGF0ZV9jcChpbnQpOwotCi0vKiB0aGUgbnVtYmVyIG9mIFRJRSBjb3Byb2Nlc3NvcnMgY29udGlndW91cyBmcm9tIHplcm8gKGZvciBUb3IyKSAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBYdGhhbF9udW1fY29wcm9jZXNzb3JzOwotCi0vKiBhY3R1YWwgbnVtYmVyIG9mIGNvcHJvY2Vzc29ycyAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfY3BfbnVtOwotLyogaW5kZXggb2YgaGlnaGVzdCBudW1iZXJlZCBjb3Byb2Nlc3NvciwgcGx1cyBvbmUgKi8KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2NwX21heDsKLS8qIGluZGV4IG9mIGhpZ2hlc3QgYWxsb3dlZCBjb3Byb2Nlc3NvciBudW1iZXIsIHBlciBjZmcsIHBsdXMgb25lICovCi0vKmV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2NwX21heGNmZzsqLwotLyogYml0bWFzayBvZiB3aGljaCBjb3Byb2Nlc3NvcnMgYXJlIHByZXNlbnQgKi8KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgIFh0aGFsX2NwX21hc2s7Ci0KLS8qIHJlYWQgYW5kIHdyaXRlIGNwZW5hYmxlIHJlZ2lzdGVyICovCi1leHRlcm4gdm9pZCB4dGhhbF9zZXRfY3BlbmFibGUodW5zaWduZWQpOwotZXh0ZXJuIHVuc2lnbmVkIHh0aGFsX2dldF9jcGVuYWJsZSh2b2lkKTsKLQotLyogcmVhZCAmIHdyaXRlIGV4dHJhIHN0YXRlIHJlZ2lzdGVyICovCi0vKmV4dGVybiBpbnQgeHRoYWxfcmVhZF9leHRyYSh2b2lkICpiYXNlLCB1bnNpZ25lZCByZWcsIHVuc2lnbmVkICp2YWx1ZSk7Ki8KLS8qZXh0ZXJuIGludCB4dGhhbF93cml0ZV9leHRyYSh2b2lkICpiYXNlLCB1bnNpZ25lZCByZWcsIHVuc2lnbmVkIHZhbHVlKTsqLwotCi0vKiByZWFkICYgd3JpdGUgYSBUSUUgY29wcm9jZXNzb3IgcmVnaXN0ZXIgKi8KLS8qZXh0ZXJuIGludCB4dGhhbF9yZWFkX2NwcmVnKHZvaWQgKmJhc2UsIGludCBjcCwgdW5zaWduZWQgcmVnLCB1bnNpZ25lZCAqdmFsdWUpOyovCi0vKmV4dGVybiBpbnQgeHRoYWxfd3JpdGVfY3ByZWcodm9pZCAqYmFzZSwgaW50IGNwLCB1bnNpZ25lZCByZWcsIHVuc2lnbmVkIHZhbHVlKTsqLwotCi0vKiByZXR1cm4gY29wcm9jZXNzb3IgbnVtYmVyIGJhc2VkIG9uIHJlZ2lzdGVyICovCi0vKmV4dGVybiBpbnQgeHRoYWxfd2hpY2hfY3AodW5zaWduZWQgcmVnKTsqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIAkJCQlJbnRlcnJ1cHRzCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiB0aGUgbnVtYmVyIG9mIGludGVycnVwdCBsZXZlbHMgKi8KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX251bV9pbnRsZXZlbHM7Ci0vKiB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgKi8KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX251bV9pbnRlcnJ1cHRzOwotCi0vKiBtYXNrIGZvciBsZXZlbCBvZiBpbnRlcnJ1cHRzICovCi1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50IFh0aGFsX2ludGxldmVsX21hc2tbWFRIQUxfTUFYX0lOVExFVkVMU107Ci0vKiBtYXNrIGZvciBsZXZlbCAwIHRvIE4gaW50ZXJydXB0cyAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBYdGhhbF9pbnRsZXZlbF9hbmRiZWxvd19tYXNrW1hUSEFMX01BWF9JTlRMRVZFTFNdOwotCi0vKiBsZXZlbCBvZiBlYWNoIGludGVycnVwdCAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaW50bGV2ZWxbWFRIQUxfTUFYX0lOVEVSUlVQVFNdOwotCi0vKiB0eXBlIHBlciBpbnRlcnJ1cHQgKi8KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2ludHR5cGVbWFRIQUxfTUFYX0lOVEVSUlVQVFNdOwotCi0vKiBtYXNrcyBvZiBlYWNoIHR5cGUgb2YgaW50ZXJydXB0ICovCi1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50IFh0aGFsX2ludHR5cGVfbWFza1tYVEhBTF9NQVhfSU5UVFlQRVNdOwotCi0vKiBpbnRlcnJ1cHQgbnVtYmVycyBhc3NpZ25lZCB0byBlYWNoIHRpbWVyIGludGVycnVwdCAqLwotZXh0ZXJuIGNvbnN0IGludCBYdGhhbF90aW1lcl9pbnRlcnJ1cHRbWFRIQUxfTUFYX1RJTUVSU107Ci0KLS8qKiogIFZpcnR1YWwgaW50ZXJydXB0IHByaW9yaXRpemF0aW9uOiAgKioqLwotCi0vKiAgQ29udmVydCBiZXR3ZWVuIGludGVycnVwdCBsZXZlbHMgKGFzIHBlciBQUy5JTlRMRVZFTCkgYW5kIHZpcnR1YWwgaW50ZXJydXB0IHByaW9yaXRpZXM6ICAqLwotZXh0ZXJuIHVuc2lnbmVkCXh0aGFsX3ZwcmlfdG9faW50bGV2ZWwodW5zaWduZWQgdnByaSk7Ci1leHRlcm4gdW5zaWduZWQJeHRoYWxfaW50bGV2ZWxfdG9fdnByaSh1bnNpZ25lZCBpbnRsZXZlbCk7Ci0KLS8qICBFbmFibGVzL2Rpc2FibGVzIGdpdmVuIHNldCAobWFzaykgb2YgaW50ZXJydXB0czsgcmV0dXJucyBwcmV2aW91cyBlbmFibGVkLW1hc2sgb2YgYWxsIGludHM6ICAqLwotZXh0ZXJuIHVuc2lnbmVkCXh0aGFsX2ludF9lbmFibGUodW5zaWduZWQpOwotZXh0ZXJuIHVuc2lnbmVkCXh0aGFsX2ludF9kaXNhYmxlKHVuc2lnbmVkKTsKLQotLyogIFNldC9nZXQgdmlydHVhbCBwcmlvcml0eSBvZiBhbiBpbnRlcnJ1cHQ6ICAqLwotZXh0ZXJuIGludAl4dGhhbF9zZXRfaW50X3ZwcmkoaW50IGludG51bSwgaW50IHZwcmkpOwotZXh0ZXJuIGludAl4dGhhbF9nZXRfaW50X3ZwcmkoaW50IGludG51bSk7Ci0KLS8qICBTZXQvZ2V0IGludGVycnVwdCBsb2Nrb3V0IGxldmVsIGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIHZpcnR1YWwgcHJpb3JpdHkgZGF0YSBzdHJ1Y3R1cmVzOiAgKi8KLWV4dGVybiB2b2lkCXh0aGFsX3NldF92cHJpX2xvY2tsZXZlbCh1bnNpZ25lZCBpbnRsZXZlbCk7Ci1leHRlcm4gdW5zaWduZWQJeHRoYWxfZ2V0X3ZwcmlfbG9ja2xldmVsKHZvaWQpOwotCi0vKiAgU2V0L2dldCBjdXJyZW50IHZpcnR1YWwgaW50ZXJydXB0IHByaW9yaXR5OiAgKi8KLWV4dGVybiB1bnNpZ25lZAl4dGhhbF9zZXRfdnByaSh1bnNpZ25lZCB2cHJpKTsKLWV4dGVybiB1bnNpZ25lZAl4dGhhbF9nZXRfdnByaSh1bnNpZ25lZCB2cHJpKTsKLWV4dGVybiB1bnNpZ25lZAl4dGhhbF9zZXRfdnByaV9pbnRsZXZlbCh1bnNpZ25lZCBpbnRsZXZlbCk7Ci1leHRlcm4gdW5zaWduZWQJeHRoYWxfc2V0X3ZwcmlfbG9jayh2b2lkKTsKLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgCQkJR2VuZXJpYyBJbnRlcnJ1cHQgVHJhbXBvbGluaW5nIFN1cHBvcnQKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXR5cGVkZWYgdm9pZCAoWHRIYWxWb2lkRnVuYykodm9pZCk7Ci0KLS8qCi0gKiAgQml0bWFzayBvZiBpbnRlcnJ1cHRzIGN1cnJlbnRseSB0cmFtcG9saW5pbmcgZG93bjoKLSAqLwotZXh0ZXJuIHVuc2lnbmVkIFh0aGFsX3RyYW1fcGVuZGluZzsKLQotLyoKLSAqICBCaXRtYXNrIG9mIHdoaWNoIGludGVycnVwdHMgY3VycmVudGx5IHRyYW1wb2xpbmluZyBkb3duCi0gKiAgc3luY2hyb25vdXNseSBhcmUgYWN0dWFsbHkgZW5hYmxlZDsgdGhpcyBiaXRtYXNrIGlzIG5lY2Vzc2FyeQotICogIGJlY2F1c2UgSU5URU5BQkxFIGNhbm5vdCBob2xkIHRoYXQgc3RhdGUgKHN5bmMtdHJhbXBvbGluaW5nCi0gKiAgaW50ZXJydXB0cyBtdXN0IGJlIGtlcHQgZGlzYWJsZWQgd2hpbGUgdHJhbXBvbGluaW5nKTsKLSAqICBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgYW55IGJpdCBzZXQgaGVyZSBpcyBub3Qgc2V0Ci0gKiAgaW4gSU5URU5BQkxFLCBhbmQgdmljZS12ZXJzYTsgb25jZSBhIHN5bmMtdHJhbXBvbGluZSBpcwotICogIGhhbmRsZWQgKGF0IGxldmVsIG9uZSksIGl0cyBlbmFibGUgYml0IG11c3QgYmUgbW92ZWQgZnJvbQotICogIGhlcmUgdG8gSU5URU5BQkxFOgotICovCi1leHRlcm4gdW5zaWduZWQgWHRoYWxfdHJhbV9lbmFibGVkOwotCi0vKgotICogIEJpdG1hc2sgb2YgaW50ZXJydXB0cyBjb25maWd1cmVkIGZvciBzeW5jIHRyYW1wb2xpbmluZzoKLSAqLwotZXh0ZXJuIHVuc2lnbmVkIFh0aGFsX3RyYW1fc3luYzsKLQotCi0vKiAgVHJhbXBvbGluZSBzdXBwb3J0IGZ1bmN0aW9uczogICovCi1leHRlcm4gdW5zaWduZWQgIHh0aGFsX3RyYW1fcGVuZGluZ190b19zZXJ2aWNlKCB2b2lkICk7Ci1leHRlcm4gdm9pZCAgICAgIHh0aGFsX3RyYW1fZG9uZSggdW5zaWduZWQgc2VydmljZWRfbWFzayApOwotZXh0ZXJuIGludCAgICAgICB4dGhhbF90cmFtX3NldF9zeW5jKCBpbnQgaW50bnVtLCBpbnQgc3luYyApOwotZXh0ZXJuIFh0SGFsVm9pZEZ1bmMqIHh0aGFsX3NldF90cmFtX3RyaWdnZXJfZnVuYyggWHRIYWxWb2lkRnVuYyAqdHJpZ2dlcl9mbiApOwotCi0vKiAgSU5URU5BQkxFLElOVFJFQUQsSU5UU0VULElOVENMRUFSIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnM6ICAqLwotZXh0ZXJuIHVuc2lnbmVkICB4dGhhbF9nZXRfaW50ZW5hYmxlKCB2b2lkICk7Ci1leHRlcm4gdm9pZCAgICAgIHh0aGFsX3NldF9pbnRlbmFibGUoIHVuc2lnbmVkICk7Ci1leHRlcm4gdW5zaWduZWQgIHh0aGFsX2dldF9pbnRyZWFkKCB2b2lkICk7Ci1leHRlcm4gdm9pZCAgICAgIHh0aGFsX3NldF9pbnRzZXQoIHVuc2lnbmVkICk7Ci1leHRlcm4gdm9pZCAgICAgIHh0aGFsX3NldF9pbnRjbGVhciggdW5zaWduZWQgKTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIAkJCQlSZWdpc3RlciBXaW5kb3dzCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBudW1iZXIgb2YgcmVnaXN0ZXJzIGluIHJlZ2lzdGVyIHdpbmRvdyAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfbnVtX2FyZWdzOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfbnVtX2FyZWdzX2xvZzI7Ci0KLS8qICBUaGlzIHNwaWxsIGFueSBsaXZlIHJlZ2lzdGVyIHdpbmRvd3MgKG90aGVyIHRoYW4gdGhlIGNhbGxlcidzKTogICovCi1leHRlcm4gdm9pZCAgICAgIHh0aGFsX3dpbmRvd19zcGlsbCggdm9pZCApOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgCQkJCUNhY2hlCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBzaXplIG9mIHRoZSBjYWNoZSBsaW5lcyBpbiBsb2cyKGJ5dGVzKSAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaWNhY2hlX2xpbmV3aWR0aDsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2RjYWNoZV9saW5ld2lkdGg7Ci0vKiBzaXplIG9mIHRoZSBjYWNoZSBsaW5lcyBpbiBieXRlcyAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IFh0aGFsX2ljYWNoZV9saW5lc2l6ZTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBYdGhhbF9kY2FjaGVfbGluZXNpemU7Ci0vKiBudW1iZXIgb2YgY2FjaGUgc2V0cyBpbiBsb2cyKGxpbmVzIHBlciB3YXkpICovCi1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9pY2FjaGVfc2V0d2lkdGg7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9kY2FjaGVfc2V0d2lkdGg7Ci0vKiBjYWNoZSBzZXQgYXNzb2NpYXRpdml0eSAobnVtYmVyIG9mIHdheXMpICovCi1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9pY2FjaGVfd2F5czsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgIFh0aGFsX2RjYWNoZV93YXlzOwotLyogc2l6ZSBvZiB0aGUgY2FjaGVzIGluIGJ5dGVzICh3YXlzICogMl4obGluZXdpZHRoICsgc2V0d2lkdGgpKSAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfaWNhY2hlX3NpemU7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9kY2FjaGVfc2l6ZTsKLS8qIGNhY2hlIGZlYXR1cmVzICovCi1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9kY2FjaGVfaXNfd3JpdGViYWNrOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaWNhY2hlX2xpbmVfbG9ja2FibGU7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9kY2FjaGVfbGluZV9sb2NrYWJsZTsKLQotLyogY2FjaGUgYXR0cmlidXRlIHJlZ2lzdGVyIGNvbnRyb2wgKHVzZWQgYnkgb3RoZXIgSEFMIHJvdXRpbmVzKSAqLwotZXh0ZXJuIHVuc2lnbmVkIHh0aGFsX2dldF9jYWNoZWF0dHIoIHZvaWQgKTsKLWV4dGVybiB1bnNpZ25lZCB4dGhhbF9nZXRfaWNhY2hlYXR0ciggdm9pZCApOwotZXh0ZXJuIHVuc2lnbmVkIHh0aGFsX2dldF9kY2FjaGVhdHRyKCB2b2lkICk7Ci1leHRlcm4gdm9pZCAgICAgeHRoYWxfc2V0X2NhY2hlYXR0ciggdW5zaWduZWQgKTsKLWV4dGVybiB2b2lkICAgICB4dGhhbF9zZXRfaWNhY2hlYXR0ciggdW5zaWduZWQgKTsKLWV4dGVybiB2b2lkICAgICB4dGhhbF9zZXRfZGNhY2hlYXR0ciggdW5zaWduZWQgKTsKLQotLyogaW5pdGlhbGl6ZSBjYWNoZSBzdXBwb3J0IChtdXN0IGJlIGNhbGxlZCBvbmNlIGF0IHN0YXJ0dXAsIGJlZm9yZSBhbGwgb3RoZXIgY2FjaGUgY2FsbHMpICovCi0vKmV4dGVybiB2b2lkIHh0aGFsX2NhY2hlX3N0YXJ0aW5pdCggdm9pZCApOyovCi0vKiByZXNldCBjYWNoZXMgKi8KLS8qZXh0ZXJuIHZvaWQgeHRoYWxfaWNhY2hlX3Jlc2V0KCB2b2lkICk7Ki8KLS8qZXh0ZXJuIHZvaWQgeHRoYWxfZGNhY2hlX3Jlc2V0KCB2b2lkICk7Ki8KLS8qIGVuYWJsZSBjYWNoZXMgKi8KLWV4dGVybiB2b2lkIHh0aGFsX2ljYWNoZV9lbmFibGUoIHZvaWQgKTsJLyogREVQUkVDQVRFRCAqLwotZXh0ZXJuIHZvaWQgeHRoYWxfZGNhY2hlX2VuYWJsZSggdm9pZCApOwkvKiBERVBSRUNBVEVEICovCi0vKiBkaXNhYmxlIGNhY2hlcyAqLwotZXh0ZXJuIHZvaWQgeHRoYWxfaWNhY2hlX2Rpc2FibGUoIHZvaWQgKTsJLyogREVQUkVDQVRFRCAqLwotZXh0ZXJuIHZvaWQgeHRoYWxfZGNhY2hlX2Rpc2FibGUoIHZvaWQgKTsJLyogREVQUkVDQVRFRCAqLwotCi0vKiBpbnZhbGlkYXRlIHRoZSBjYWNoZXMgKi8KLWV4dGVybiB2b2lkIHh0aGFsX2ljYWNoZV9hbGxfaW52YWxpZGF0ZSggdm9pZCApOwotZXh0ZXJuIHZvaWQgeHRoYWxfZGNhY2hlX2FsbF9pbnZhbGlkYXRlKCB2b2lkICk7Ci1leHRlcm4gdm9pZCB4dGhhbF9pY2FjaGVfcmVnaW9uX2ludmFsaWRhdGUoIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNpemUgKTsKLWV4dGVybiB2b2lkIHh0aGFsX2RjYWNoZV9yZWdpb25faW52YWxpZGF0ZSggdm9pZCAqYWRkciwgdW5zaWduZWQgc2l6ZSApOwotZXh0ZXJuIHZvaWQgeHRoYWxfaWNhY2hlX2xpbmVfaW52YWxpZGF0ZSh2b2lkICphZGRyKTsKLWV4dGVybiB2b2lkIHh0aGFsX2RjYWNoZV9saW5lX2ludmFsaWRhdGUodm9pZCAqYWRkcik7Ci0vKiB3cml0ZSBkaXJ0eSBkYXRhIGJhY2sgKi8KLWV4dGVybiB2b2lkIHh0aGFsX2RjYWNoZV9hbGxfd3JpdGViYWNrKCB2b2lkICk7Ci1leHRlcm4gdm9pZCB4dGhhbF9kY2FjaGVfcmVnaW9uX3dyaXRlYmFjayggdm9pZCAqYWRkciwgdW5zaWduZWQgc2l6ZSApOwotZXh0ZXJuIHZvaWQgeHRoYWxfZGNhY2hlX2xpbmVfd3JpdGViYWNrKHZvaWQgKmFkZHIpOwotLyogd3JpdGUgZGlydHkgZGF0YSBiYWNrIGFuZCBpbnZhbGlkYXRlICovCi1leHRlcm4gdm9pZCB4dGhhbF9kY2FjaGVfYWxsX3dyaXRlYmFja19pbnYoIHZvaWQgKTsKLWV4dGVybiB2b2lkIHh0aGFsX2RjYWNoZV9yZWdpb25fd3JpdGViYWNrX2ludiggdm9pZCAqYWRkciwgdW5zaWduZWQgc2l6ZSApOwotZXh0ZXJuIHZvaWQgeHRoYWxfZGNhY2hlX2xpbmVfd3JpdGViYWNrX2ludih2b2lkICphZGRyKTsKLS8qIHByZWZldGNoIGFuZCBsb2NrIHNwZWNpZmllZCBtZW1vcnkgcmFuZ2UgaW50byBjYWNoZSAqLwotZXh0ZXJuIHZvaWQgeHRoYWxfaWNhY2hlX3JlZ2lvbl9sb2NrKCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaXplICk7Ci1leHRlcm4gdm9pZCB4dGhhbF9kY2FjaGVfcmVnaW9uX2xvY2soIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNpemUgKTsKLWV4dGVybiB2b2lkIHh0aGFsX2ljYWNoZV9saW5lX2xvY2sodm9pZCAqYWRkcik7Ci1leHRlcm4gdm9pZCB4dGhhbF9kY2FjaGVfbGluZV9sb2NrKHZvaWQgKmFkZHIpOwotLyogdW5sb2NrIGZyb20gY2FjaGUgKi8KLWV4dGVybiB2b2lkIHh0aGFsX2ljYWNoZV9hbGxfdW5sb2NrKCB2b2lkICk7Ci1leHRlcm4gdm9pZCB4dGhhbF9kY2FjaGVfYWxsX3VubG9jayggdm9pZCApOwotZXh0ZXJuIHZvaWQgeHRoYWxfaWNhY2hlX3JlZ2lvbl91bmxvY2soIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNpemUgKTsKLWV4dGVybiB2b2lkIHh0aGFsX2RjYWNoZV9yZWdpb25fdW5sb2NrKCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaXplICk7Ci1leHRlcm4gdm9pZCB4dGhhbF9pY2FjaGVfbGluZV91bmxvY2sodm9pZCAqYWRkcik7Ci1leHRlcm4gdm9pZCB4dGhhbF9kY2FjaGVfbGluZV91bmxvY2sodm9pZCAqYWRkcik7Ci0KLQotLyogc3luYyBpY2FjaGUgYW5kIG1lbW9yeSAqLwotZXh0ZXJuIHZvaWQgeHRoYWxfaWNhY2hlX3N5bmMoIHZvaWQgKTsKLS8qIHN5bmMgZGNhY2hlIGFuZCBtZW1vcnkgKi8KLWV4dGVybiB2b2lkIHh0aGFsX2RjYWNoZV9zeW5jKCB2b2lkICk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgCQkJCURlYnVnCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiAgMSBpZiBkZWJ1ZyBvcHRpb24gY29uZmlndXJlZCwgMCBpZiBub3Q6ICAqLwotZXh0ZXJuIGNvbnN0IGludCBYdGhhbF9kZWJ1Z19jb25maWd1cmVkOwotCi0vKiAgTnVtYmVyIG9mIGluc3RydWN0aW9uIGFuZCBkYXRhIGJyZWFrIHJlZ2lzdGVyczogICovCi1leHRlcm4gY29uc3QgaW50IFh0aGFsX251bV9pYnJlYWs7Ci1leHRlcm4gY29uc3QgaW50IFh0aGFsX251bV9kYnJlYWs7Ci0KLS8qICBTZXQgKHBsYW50KSBhbmQgcmVtb3ZlIHNvZnR3YXJlIGJyZWFrcG9pbnQsIGJvdGggc3luY2hyb25pemluZyBjYWNoZTogICovCi1leHRlcm4gdW5zaWduZWQgaW50IHh0aGFsX3NldF9zb2Z0X2JyZWFrKHZvaWQgKmFkZHIpOwotZXh0ZXJuIHZvaWQgICAgICAgICB4dGhhbF9yZW1vdmVfc29mdF9icmVhayh2b2lkICphZGRyLCB1bnNpZ25lZCBpbnQpOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgCQkJCURpc2Fzc2VtYmxlcgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogIE1heCBleHBlY3RlZCBzaXplIG9mIHRoZSByZXR1cm4gYnVmZmVyIGZvciBhIGRpc2Fzc2VtYmxlZCBpbnN0cnVjdGlvbiAoaGludCBvbmx5KTogICovCi0jZGVmaW5lIFhUSEFMX0RJU0FTTV9CVUZTSVpFCTgwCi0KLS8qICBEaXNhc3NlbWJseSBvcHRpb24gYml0cyBmb3Igc2VsZWN0aW5nIHdoYXQgdG8gcmV0dXJuOiAgKi8KLSNkZWZpbmUgWFRIQUxfRElTQVNNX09QVF9BRERSCTB4MDAwMQkvKiBkaXNwbGF5IGFkZHJlc3MgKi8KLSNkZWZpbmUgWFRIQUxfRElTQVNNX09QVF9PUEhFWAkweDAwMDIJLyogZGlzcGxheSBvcGNvZGUgYnl0ZXMgaW4gaGV4ICovCi0jZGVmaW5lIFhUSEFMX0RJU0FTTV9PUFRfT1BDT0RFCTB4MDAwNAkvKiBkaXNwbGF5IG9wY29kZSBuYW1lIChtbmVtb25pYykgKi8KLSNkZWZpbmUgWFRIQUxfRElTQVNNX09QVF9QQVJNUwkweDAwMDgJLyogZGlzcGxheSBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIFhUSEFMX0RJU0FTTV9PUFRfQUxMCTB4MEZGRgkvKiBkaXNwbGF5IGV2ZXJ5dGhpbmcgKi8KLQotLyogcm91dGluZSB0byBnZXQgYSBzdHJpbmcgZm9yIHRoZSBkaXNhc3NlbWJsZWQgaW5zdHJ1Y3Rpb24gKi8KLWV4dGVybiBpbnQgeHRoYWxfZGlzYXNzZW1ibGUoIHVuc2lnbmVkIGNoYXIgKmluc3RyX2J1Ziwgdm9pZCAqdGd0X2FkZHIsCi0JCSAgICAgICBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGJ1ZmxlbiwgdW5zaWduZWQgb3B0aW9ucyApOwotCi0vKiByb3V0aW5lIHRvIGdldCB0aGUgc2l6ZSBvZiB0aGUgbmV4dCBpbnN0cnVjdGlvbi4gUmV0dXJucyAwIGZvcgotICAgaWxsZWdhbCBpbnN0cnVjdGlvbiAqLwotZXh0ZXJuIGludCB4dGhhbF9kaXNhc3NlbWJsZV9zaXplKCB1bnNpZ25lZCBjaGFyICppbnN0cl9idWYgKTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIAkJCQlDb3JlIENvdW50ZXIKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIGNvdW50ZXIgaW5mbyAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaGF2ZV9jY291bnQ7CS8qIHNldCBpZiBDQ09VTlQgcmVnaXN0ZXIgcHJlc2VudCAqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfbnVtX2Njb21wYXJlOwkvKiBudW1iZXIgb2YgQ0NPTVBBUkVuIHJlZ2lzdGVycyAqLwotCi0vKiBnZXQgQ0NPVU5UIHJlZ2lzdGVyIChpZiBub3QgcHJlc2VudCByZXR1cm4gMCkgKi8KLWV4dGVybiB1bnNpZ25lZCB4dGhhbF9nZXRfY2NvdW50KHZvaWQpOwotCi0vKiBzZXQgYW5kIGdldCBDQ09NUEFSRW4gcmVnaXN0ZXJzIChpZiBub3QgcHJlc2VudCwgZ2V0IHJldHVybnMgMCkgKi8KLWV4dGVybiB2b2lkICAgICB4dGhhbF9zZXRfY2NvbXBhcmUoaW50LCB1bnNpZ25lZCk7Ci1leHRlcm4gdW5zaWduZWQgeHRoYWxfZ2V0X2Njb21wYXJlKGludCk7Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCQlJbnN0cnVjdGlvbi9EYXRhIFJBTS9ST00gQWNjZXNzCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1leHRlcm4gdm9pZCogeHRoYWxfbWVtY3B5KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsZW4pOwotZXh0ZXJuIHZvaWQqIHh0aGFsX2Jjb3B5KGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LCB1bnNpZ25lZCBsZW4pOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QIFN5bmNocm9uaXphdGlvbgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWV4dGVybiBpbnQgICAgICB4dGhhbF9jb21wYXJlX2FuZF9zZXQoIGludCAqYWRkciwgaW50IHRlc3RfdmFsLCBpbnQgY29tcGFyZV92YWwgKTsKLWV4dGVybiB1bnNpZ25lZCB4dGhhbF9nZXRfcHJpZCggdm9pZCApOwotCi0vKmV4dGVybiBjb25zdCBjaGFyICBYdGhhbF9oYXZlX3MzMmMxaTsqLwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaGF2ZV9wcmlkOwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjZWxsYW5lb3VzCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9yZWxlYXNlX21ham9yOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfcmVsZWFzZV9taW5vcjsKLWV4dGVybiBjb25zdCBjaGFyICogY29uc3QgIFh0aGFsX3JlbGVhc2VfbmFtZTsKLWV4dGVybiBjb25zdCBjaGFyICogY29uc3QgIFh0aGFsX3JlbGVhc2VfaW50ZXJuYWw7Ci0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX21lbW9yeV9vcmRlcjsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2hhdmVfd2luZG93ZWQ7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9oYXZlX2RlbnNpdHk7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9oYXZlX2Jvb2xlYW5zOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaGF2ZV9sb29wczsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2hhdmVfbnNhOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaGF2ZV9taW5tYXg7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9oYXZlX3NleHQ7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9oYXZlX2NsYW1wczsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2hhdmVfbWFjMTY7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9oYXZlX211bDE2OwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaGF2ZV9mcDsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2hhdmVfc3BlY3VsYXRpb247Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9oYXZlX2V4Y2VwdGlvbnM7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF94ZWFfdmVyc2lvbjsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2hhdmVfaW50ZXJydXB0czsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2hhdmVfaGlnaGxldmVsX2ludGVycnVwdHM7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9oYXZlX25taTsKLQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IFh0aGFsX251bV93cml0ZWJ1ZmZlcl9lbnRyaWVzOwotCi1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9idWlsZF91bmlxdWVfaWQ7Ci0vKiAgUmVsZWFzZSBpbmZvIGZvciBoYXJkd2FyZSB0YXJnZXRlZCBieSBzb2Z0d2FyZSB1cGdyYWRlczogICovCi1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9od19jb25maWdpZDA7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9od19jb25maWdpZDE7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9od19yZWxlYXNlX21ham9yOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfaHdfcmVsZWFzZV9taW5vcjsKLWV4dGVybiBjb25zdCBjaGFyICogY29uc3QgIFh0aGFsX2h3X3JlbGVhc2VfbmFtZTsKLWV4dGVybiBjb25zdCBjaGFyICogY29uc3QgIFh0aGFsX2h3X3JlbGVhc2VfaW50ZXJuYWw7Ci0KLQotLyogIEludGVybmFsIG1lbW9yaWVzLi4uICAqLwotCi1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9udW1faW5zdHJvbTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX251bV9pbnN0cmFtOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfbnVtX2RhdGFyb207Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9udW1fZGF0YXJhbTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX251bV94bG1pOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfaW5zdHJvbV92YWRkclsxXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgIFh0aGFsX2luc3Ryb21fcGFkZHJbMV07Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9pbnN0cm9tX3NpemUgWzFdOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfaW5zdHJhbV92YWRkclsxXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgIFh0aGFsX2luc3RyYW1fcGFkZHJbMV07Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9pbnN0cmFtX3NpemUgWzFdOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfZGF0YXJvbV92YWRkclsxXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgIFh0aGFsX2RhdGFyb21fcGFkZHJbMV07Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9kYXRhcm9tX3NpemUgWzFdOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfZGF0YXJhbV92YWRkclsxXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgIFh0aGFsX2RhdGFyYW1fcGFkZHJbMV07Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF9kYXRhcmFtX3NpemUgWzFdOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfeGxtaV92YWRkclsxXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgIFh0aGFsX3hsbWlfcGFkZHJbMV07Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50ICBYdGhhbF94bG1pX3NpemUgWzFdOwotCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdAotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaGF2ZV9zcGFubmluZ193YXk7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9oYXZlX2lkZW50aXR5X21hcDsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2hhdmVfbWltaWNfY2FjaGVhdHRyOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaGF2ZV94bHRfY2FjaGVhdHRyOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaGF2ZV9jYWNoZWF0dHI7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9oYXZlX3RsYnM7Ci0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX21tdV9hc2lkX2JpdHM7CQkvKiAwIC4uIDggKi8KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX21tdV9hc2lkX2tlcm5lbDsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX21tdV9yaW5nczsJCS8qIDEgLi4gNCAocGVyaGFwcyAwIGlmIG5vIE1NVSBhbmQvb3Igbm8gcHJvdGVjdGlvbj8pICovCi1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9tbXVfcmluZ19iaXRzOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfbW11X3NyX2JpdHM7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9tbXVfY2FfYml0czsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgIFh0aGFsX21tdV9tYXhfcHRlX3BhZ2Vfc2l6ZTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgIFh0aGFsX21tdV9taW5fcHRlX3BhZ2Vfc2l6ZTsKLQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaXRsYl93YXlfYml0czsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2l0bGJfd2F5czsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIFh0aGFsX2l0bGJfYXJmX3dheXM7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9kdGxiX3dheV9iaXRzOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfZHRsYl93YXlzOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfZHRsYl9hcmZfd2F5czsKLQotLyogIENvbnZlcnQgYmV0d2VlbiB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMgKHRocm91Z2ggc3RhdGljIG1hcHMgb25seSk6ICAqLwotLyoqKiBXQVJOSU5HOiB0aGVzZSB0d28gZnVuY3Rpb25zIG1heSBnbyBhd2F5IGluIGEgZnV0dXJlIHJlbGVhc2U7IGRvbid0IGRlcGVuZCBvbiB0aGVtISAqKiovCi1leHRlcm4gaW50ICB4dGhhbF9zdGF0aWNfdjJwKCB1bnNpZ25lZCB2YWRkciwgdW5zaWduZWQgKnBhZGRycCApOwotZXh0ZXJuIGludCAgeHRoYWxfc3RhdGljX3AydiggdW5zaWduZWQgcGFkZHIsIHVuc2lnbmVkICp2YWRkcnAsIHVuc2lnbmVkIGNhY2hlZCApOwotCi0jaWYgMAotLyoqKioqKioqKioqKioqKioqKiogICBFWFBFUklNRU5UQUwgQU5EIFRFTlRBVElWRSBPTkxZICAgKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgWFRIQUxfTU1VX1BBR0VTWl9DT1VOVF9NQVgJOAkvKiBtYXhpbXVtIG51bWJlciBvZiBkaWZmZXJlbnQgcGFnZSBzaXplcyAqLwotZXh0ZXJuIGNvbnN0IGNoYXIJWHRoYWxfbW11X3BhZ2Vzel9jb3VudDsJCS8qIDAgLi4gOAkJbnVtYmVyIG9mIGRpZmZlcmVudCBwYWdlIHNpemVzIGNvbmZpZ3VyZWQgKi8KLQotLyogIE5vdGU6ICB0aGUgZm9sbG93aW5nIHRhYmxlIGRvZXNuJ3QgbmVjZXNzYXJpbHkgaGF2ZSBwYWdlIHNpemVzIGluIGluY3JlYXNpbmcgb3JkZXI6ICovCi1leHRlcm4gY29uc3QgY2hhcglYdGhhbF9tbXVfcGFnZXN6X2xvZzJbWFRIQUxfTU1VX1BBR0VTWl9DT1VOVF9NQVhdOwkvKiAxMCAuLiAyOCAoMCBwYXN0IGNvdW50KSAqLwotCi0vKiAgU29ydGVkIChpbmNyZWFzaW5nKSB0YWJsZSBvZiBwYWdlIHNpemVzLCB0aGF0IGluZGV4ZXMgaW50byB0aGUgYWJvdmUgdGFibGU6ICovCi1leHRlcm4gY29uc3QgY2hhcglYdGhhbF9tbXVfcGFnZXN6X3NvcnRlZFtYVEhBTF9NTVVfUEFHRVNaX0NPVU5UX01BWF07CS8qIDAgLi4gNyAoMCBwYXN0IGNvdW50KSAqLwotCi0vKnUzMglYdGhhbF92aXJ0dWFsX2V4Y2VwdGlvbnM7Ki8JLyogYml0bWFzayBvZiB3aGljaCBleGNlcHRpb25zIGV4ZWN1dGUgaW4gdmlydHVhbCBtb2RlLi4uICovCi0KLWV4dGVybiBjb25zdCBjaGFyCVh0aGFsX21tdV9wdGVfcGFnZXN6X2xvZzJfbWluOwkvKiA/PyBtaW5pbXVtIHBhZ2Ugc2l6ZSBpbiBQVEVzICovCi1leHRlcm4gY29uc3QgY2hhcglYdGhhbF9tbXVfcHRlX3BhZ2Vzel9sb2cyX21heDsJLyogPz8gbWF4aW11bSBwYWdlIHNpemUgaW4gUFRFcyAqLwotCi0vKiAgQ2FjaGUgQXR0cmlidXRlIEJpdHMgSW1wbGVtZW50ZWQgYnkgdGhlIENhY2hlIChwYXJ0IG9mIHRoZSBjYWNoZSBhYnN0cmFjdGlvbikgKi8KLWV4dGVybiBjb25zdCBjaGFyCVh0aGFsX2ljYWNoZV9mY2FfYml0c19pbXBsZW1lbnRlZDsJLyogSVRMQi9VVExCIG9ubHkhICovCi1leHRlcm4gY29uc3QgY2hhcglYdGhhbF9kY2FjaGVfbGNhX2JpdHNfaW1wbGVtZW50ZWQ7CS8qIERUTEIvVVRMQiBvbmx5ISAqLwotZXh0ZXJuIGNvbnN0IGNoYXIJWHRoYWxfZGNhY2hlX3NjYV9iaXRzX2ltcGxlbWVudGVkOyAJLyogRFRMQi9VVExCIG9ubHkhICovCi0KLS8qICBQZXIgVExCIFBhcmFtZXRlcnMgKEluc3RydWN0aW9uLCBEYXRhLCBVbmlmaWVkKSAgKi8KLXN0cnVjdCBYdEhhbE1tdVRsYglYdGhhbF9pdGxiOwkvKiBkZXNjcmlwdGlvbiBvZiBNTVUgSS1UTEIgZ2VuZXJpYyBmZWF0dXJlcyAqLwotc3RydWN0IFh0SGFsTW11VGxiCVh0aGFsX2R0bGI7CS8qIGRlc2NyaXB0aW9uIG9mIE1NVSBELVRMQiBnZW5lcmljIGZlYXR1cmVzICovCi1zdHJ1Y3QgWHRIYWxNbXVUbGIJWHRoYWxfdXRsYjsJLyogZGVzY3JpcHRpb24gb2YgTU1VIFUtVExCIGdlbmVyaWMgZmVhdHVyZXMgKi8KLQotI2RlZmluZSBYVEhBTF9NTVVfV0FZU19NQVgJOAkvKiBtYXhpbXVtIG51bWJlciBvZiB3YXlzIChhc3NvY2lhdGl2aXRpZXMpIGZvciBlYWNoIFRMQiAqLwotCi0vKiAgU3RydWN0dXJlIGZvciBjb21tb24gaW5mb3JtYXRpb24gZGVzY3JpYmVkIGZvciBlYWNoIHBvc3NpYmxlIFRMQiAoaW5zdHJ1Y3Rpb24sIGRhdGEgYW5kIHVuaWZpZWQpOiAqLwotdHlwZWRlZiBzdHJ1Y3QgWHRIYWxNbXVUbGIgewotICAgIHU4ICAJdmFfYml0czsJCS8qIDMyCQkobnVtYmVyIG9mIHZpcnR1YWwgYWRkcmVzcyBiaXRzKSAqLwotICAgIHU4ICAJcGFfYml0czsJCS8qIDMyCQkobnVtYmVyIG9mIHBoeXNpY2FsIGFkZHJlc3MgYml0cykgKi8KLSAgICBib29sCXRsYl92YV9pbmRleGVkOwkJLyogMQkoc2V0IGlmIFRMQiBpcyBpbmRleGVkIGJ5IHZpcnR1YWwgYWRkcmVzcykgKi8KLSAgICBib29sCXRsYl92YV90YWdnZWQ7CQkvKiAwCShzZXQgaWYgVExCIGlzIHRhZ2dlZCBieSB2aXJ0dWFsIGFkZHJlc3MpICovCi0gICAgYm9vbAljYWNoZV92YV9pbmRleGVkOwkvKiAxCShzZXQgaWYgY2FjaGUgaXMgaW5kZXhlZCBieSB2aXJ0dWFsIGFkZHJlc3MpICovCi0gICAgYm9vbAljYWNoZV92YV90YWdnZWQ7CS8qIDAJKHNldCBpZiBjYWNoZSBpcyB0YWdnZWQgYnkgdmlydHVhbCBhZGRyZXNzKSAqLwotICAgIC8qYm9vbAkod2hldGhlciBwYWdlIHRhYmxlcyBhcmUgdHJhdmVyc2VkIGluIHZhZGRyIHNvcnRlZCBvcmRlciwgcGFkZHIgc29ydGVkIG9yZGVyLCAuLi4pICovCi0gICAgLyp1OAkoc2V0IG9mIGF2YWlsYWJsZSBwYWdlIGF0dHJpYnV0ZSBiaXRzLCBvdGhlciB0aGFuIGNhY2hlIGF0dHJpYnV0ZSBiaXRzIGRlZmluZWQgYWJvdmUpICovCi0gICAgLyp1MzIJKHZhcmlvdXMgbWFza3MgZm9yIHBhZ2VzLCBNTVUgdGFibGUvVExCIGVudHJpZXMsIGV0Yy4pICovCi0gICAgdTggIAl3YXlfY291bnQ7CQkvKiAwIC4uIDgJKG51bWJlciBvZiB3YXlzLCBhLmsuYS4gYXNzb2NpYXRpdml0aWVzLCBmb3IgdGhpcyBUTEIpICovCi0gICAgWHRIYWxNbXVUbGJXYXkgKgl3YXlzW1hUSEFMX01NVV9XQVlTX01BWF07CS8qIHBvaW50ZXJzIHRvIHBlci13YXkgcGFybXMgZm9yIGVhY2ggd2F5ICovCi19IFh0SGFsTW11VGxiOwotCi0vKiAgUGVyIFRMQiBXYXkgKFBlciBBc3NvY2lhdGl2aXR5KSBQYXJhbWV0ZXJzICAqLwotdHlwZWRlZiBzdHJ1Y3QgWHRIYWxNbXVUbGJXYXkgewotICAgICB1MzIJaW5kZXhfY291bnRfbG9nMjsJLyogMCAuLiA0ICovCi0gICAgIHUzMglwYWdlc3pfbWFzazsJCS8qIDAgLi4gMl5wYWdlc3pfY291bnQgLSAxCShlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIHNpemUgKi8KLQkJCQkJLyoJCWRlZmluZWQgaW4gdGhlIFh0aGFsX21tdV9wYWdlc3pfbG9nMltdIHRhYmxlKSAqLwotICAgICB1MzIJdnBuX2NvbnN0X21hc2s7Ci0gICAgIHUzMgl2cG5fY29uc3RfdmFsdWU7Ci0gICAgIHU2NAlwcG5fY29uc3RfbWFzazsJCS8qIGZ1dHVyZSBtYXkgc3VwcG9ydCBwYV9iaXRzID4gMzIgKi8KLSAgICAgdTY0CXBwbl9jb25zdF92YWx1ZTsKLSAgICAgdTMyCXBwbl9pZF9tYXNrOwkJLyogcGFkZHIgYml0cyB0YWtlbiBkaXJlY3RseSBmcm9tIHZhZGRyICovCi0gICAgIGJvb2wJYmFja2duZF9tYXRjaDsJCS8qIDAgb3IgMSAqLwotICAgICAvKiAgVGhlc2UgYXJlIGRlZmluZWQgaW4gdGVybXMgb2YgdGhlIFhUSEFMX0NBQ0hFX3h4eCBiaXRzOiAqLwotICAgICB1OCAJZmNhX2NvbnN0X21hc2s7CQkvKiBJVExCL1VUTEIgb25seSEgKi8KLSAgICAgdTggCWZjYV9jb25zdF92YWx1ZTsJLyogSVRMQi9VVExCIG9ubHkhICovCi0gICAgIHU4IAlsY2FfY29uc3RfbWFzazsJCS8qIERUTEIvVVRMQiBvbmx5ISAqLwotICAgICB1OCAJbGNhX2NvbnN0X3ZhbHVlOyAJLyogRFRMQi9VVExCIG9ubHkhICovCi0gICAgIHU4IAlzY2FfY29uc3RfbWFzazsgCS8qIERUTEIvVVRMQiBvbmx5ISAqLwotICAgICB1OCAJc2NhX2NvbnN0X3ZhbHVlOyAJLyogRFRMQi9VVExCIG9ubHkhICovCi0gICAgIC8qICBUaGVzZSBkZWZpbmUgYW4gZW5jb2RpbmcgdGhhdCBtYXAgNSBiaXRzIGluIFRMQiBhbmQgUFRFIGVudHJpZXMgdG8gKi8KLSAgICAgLyogIDggYml0cyAoRkNBLCBJVExCKSwgMTYgYml0cyAoTENBK1NDQSwgRFRMQikgb3IgMjQgYml0cyAoRkNBK0xDQStTQ0EsIFVUTEIpOiAqLwotICAgICAvKiAgKHRoZXkgbWF5IGJlIG1vdmVkIHRvIHN0cnVjdCBYdEhhbE1tdVRsYikgKi8KLSAgICAgdTgJCWNhX2JpdHM7CQkvKiBudW1iZXIgb2YgYml0cyBpbiBUTEIvUFRFIGVudHJpZXMgZm9yIGNhY2hlIGF0dHJpYnV0ZXMgKi8KLSAgICAgdTMyICoJY2FfbWFwOwkJCS8qIHBvaW50ZXIgdG8gYXJyYXkgb2YgMl5jYV9iaXRzIGVudHJpZXMgb2YgRkNBK0xDQStTQ0EgYml0cyAqLwotfSBYdEhhbE1tdVRsYldheTsKLQotLyoKLSAqICBUaGUgd2F5IHRvIGRldGVybWluZSB3aGV0aGVyIHByb3RlY3Rpb24gc3VwcG9ydCBpcyBwcmVzZW50IGluIGNvcmUKLSAqICBpcyB0byBbbG9vayBhdCBYdGhhbF9tbXVfcmluZ3MgPz8/XS4KLSAqICBHaXZlIGluZm8gb24gbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgTU1VIHRhYmxlcyBhbmQgb3RoZXIgaW4tbWVtb3J5Ci0gKiAgZGF0YSBzdHJ1Y3R1cmVzIChnbG9iYWxseSwgcGVyIHRhc2ssIGJhc2UgYW5kIHBlciBwYWdlLCBldGMuKSAtIHdoYXRldmVyIGJvdW5kcyBjYW4gYmUgY2FsY3VsYXRlZC4KLSAqLwotCi0KLS8qICBEZWZhdWx0IHZlY3RvcnM6ICAqLwoteHRoYWxfaW1tdV9mZXRjaF9taXNzX3ZlY3RvcgoteHRoYWxfZG1tdV9sb2FkX21pc3NfdmVjdG9yCi14dGhhbF9kbW11X3N0b3JlX21pc3NfdmVjdG9yCi0KLS8qICBGdW5jdGlvbnMgY2FsbGVkIHdoZW4gYSBmYXVsdCBpcyBkZXRlY3RlZDogICovCi10eXBlZGVmIHZvaWQgKFh0SGFsTW11RmF1bHRGdW5jKSggdW5zaWduZWQgdmFkZHIsIC4uLmNvbnRleHQuLi4gKTsKLS8qICBPciwgKi8KLS8qCWE/ID0gdmFkZHIgKi8KLS8qCWE/ID0gY29udGV4dC4uLiAqLwotLyoJUFMueHh4ID0geHh4ICovCi1YdEhhbE1NdUZhdWx0RnVuYyAqWHRoYWxfaW1tdV9mZXRjaF9mYXVsdF9mdW5jOwotWHRIYWxNTXVGYXVsdEZ1bmMgKlh0aGFsX2RtbXVfbG9hZF9mYXVsdF9mdW5jOwotWHRIYWxNTXVGYXVsdEZ1bmMgKlh0aGFsX2RtbXVfc3RvcmVfZmF1bHRfZnVuYzsKLQotLyogIERlZmF1bHQgSGFuZGxlcnM6ICAqLwotLyogIFRoZSB1c2VyIGFuZC9vciBrZXJuZWwgZXhjZXB0aW9uIGhhbmRsZXJzIG1heSBqdW1wIHRvIHRoZXNlIGhhbmRsZXJzIHRvIGhhbmRsZSB0aGUgcmVsZXZhbnQgZXhjZXB0aW9ucywKLSAqICBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIEVYQ0NBVVNFLiAgVGhlIGV4YWN0IHJlZ2lzdGVyIHN0YXRlIG9uIGVudHJ5IHRvIHRoZXNlIGhhbmRsZXJzIGlzIFRCRC4gICovCi0vKiAgV2hlbiBtdWx0aXBsZSBUTEIgZW50cmllcyBtYXRjaCAoaGl0KSBvbiB0aGUgc2FtZSBhY2Nlc3M6ICAqLwoteHRoYWxfaW1tdV9mZXRjaF9tdWx0aWhpdF9oYW5kbGVyCi14dGhhbF9kbW11X2xvYWRfbXVsdGloaXRfaGFuZGxlcgoteHRoYWxfZG1tdV9zdG9yZV9tdWx0aWhpdF9oYW5kbGVyCi0vKiAgUHJvdGVjdGlvbiB2aW9sYXRpb25zIGFjY29yZGluZyB0byBjYWNoZSBhdHRyaWJ1dGVzLCBhbmQgb3RoZXIgY2FjaGUgYXR0cmlidXRlIG1pc21hdGNoZXM6ICAqLwoteHRoYWxfaW1tdV9mZXRjaF9hdHRyX2hhbmRsZXIKLXh0aGFsX2RtbXVfbG9hZF9hdHRyX2hhbmRsZXIKLXh0aGFsX2RtbXVfc3RvcmVfYXR0cl9oYW5kbGVyCi0vKiAgUHJvdGVjdGlvbiB2aW9sYXRpb25zIGR1ZSB0byBpbnN1ZmZpY2llbnQgcmluZyBsZXZlbDogICovCi14dGhhbF9pbW11X2ZldGNoX3ByaXZfaGFuZGxlcgoteHRoYWxfZG1tdV9sb2FkX3ByaXZfaGFuZGxlcgoteHRoYWxfZG1tdV9zdG9yZV9wcml2X2hhbmRsZXIKLS8qICBBbGlnbm1lbnQgZXhjZXB0aW9uIGhhbmRsZXJzIChpZiBzdXBwb3J0ZWQgYnkgdGhlIHBhcnRpY3VsYXIgWHRlbnNhIE1NVSBjb25maWd1cmF0aW9uKTogICovCi14dGhhbF9kbW11X2xvYWRfYWxpZ25faGFuZGxlcgoteHRoYWxfZG1tdV9zdG9yZV9hbGlnbl9oYW5kbGVyCi0KLS8qICBPciwgYWx0ZXJuYXRpdmVseSwgdGhlIE9TIHVzZXIgYW5kL29yIGtlcm5lbCBleGNlcHRpb24gaGFuZGxlcnMgbWF5IHNpbXBseSBqdW1wIHRvIHRoZQotICogIGZvbGxvd2luZyBlbnRyeSBwb2ludHMgd2hpY2ggd2lsbCBoYW5kbGUgYW55IHZhbHVlcyBvZiBFWENDQVVTRSBub3QgaGFuZGxlZCBieSB0aGUgT1M6ICAqLwoteHRoYWxfdXNlcl9leGNfZGVmYXVsdF9oYW5kbGVyCi14dGhhbF9rZXJuZWxfZXhjX2RlZmF1bHRfaGFuZGxlcgotCi0jZW5kaWYgLyowKi8KLQotI2lmZGVmIElOQ0xVREVfREVQUkVDQVRFRF9IQUxfQ09ERQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfaGF2ZV9vbGRfZXhjX2FyY2g7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBYdGhhbF9oYXZlX21tdTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgIFh0aGFsX251bV9yZWdzOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfbnVtX2lyb21zOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfbnVtX2lyYW1zOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfbnVtX2Ryb21zOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgWHRoYWxfbnVtX2RyYW1zOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfY29uZmlnaWQwOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCAgWHRoYWxfY29uZmlnaWQxOwotI2VuZGlmCi0KLSNpZmRlZiBJTkNMVURFX0RFUFJFQ0FURURfSEFMX0RFQlVHX0NPREUKLSNkZWZpbmUgWFRIQUxfMjRfQklUX0JSRUFLCQkweDgwMDAwMDAwCi0jZGVmaW5lIFhUSEFMXzE2X0JJVF9CUkVBSwkJMHg0MDAwMDAwMAotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0CVh0aGFsX2lsbF9pbnN0XzE2WzE2XTsKLSNkZWZpbmUgWFRIQUxfREVTVF9SRUcJCTB4ZjAwMDAwMDAJLyogTWFzayBmb3IgZGVzdGluYXRpb24gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgWFRIQUxfREVTVF9SRUdfSU5TVAkweDA4MDAwMDAwCS8qIEJyYW5jaCBhZGRyZXNzIGlzIGluIHJlZ2lzdGVyICovCi0jZGVmaW5lIFhUSEFMX0RFU1RfUkVMX0lOU1QJMHgwNDAwMDAwMAkvKiBCcmFuY2ggYWRkcmVzcyBpcyByZWxhdGl2ZSAqLwotI2RlZmluZSBYVEhBTF9SRldfSU5TVAkJMHgwMDAwMDgwMAotI2RlZmluZSBYVEhBTF9SRlVFX0lOU1QJCTB4MDAwMDA0MDAKLSNkZWZpbmUgWFRIQUxfUkZJX0lOU1QJCTB4MDAwMDAyMDAKLSNkZWZpbmUgWFRIQUxfUkZFX0lOU1QJCTB4MDAwMDAxMDAKLSNkZWZpbmUgWFRIQUxfUkVUX0lOU1QJCTB4MDAwMDAwODAKLSNkZWZpbmUgWFRIQUxfQlJFQUtfSU5TVAkweDAwMDAwMDQwCi0jZGVmaW5lIFhUSEFMX1NZU0NBTExfSU5TVAkweDAwMDAwMDIwCi0jZGVmaW5lIFhUSEFMX0xPT1BfRU5ECQkweDAwMDAwMDEwCS8qIE5vdCBzZXQgYnkgeHRoYWxfaW5zdF90eXBlICovCi0jZGVmaW5lIFhUSEFMX0pVTVBfSU5TVAkJMHgwMDAwMDAwOAkvKiBDYWxsIG9yIGp1bXAgaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgWFRIQUxfQlJBTkNIX0lOU1QJMHgwMDAwMDAwNAkvKiBCcmFuY2ggaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgWFRIQUxfMjRfQklUX0lOU1QJMHgwMDAwMDAwMgotI2RlZmluZSBYVEhBTF8xNl9CSVRfSU5TVCAgIDB4MDAwMDAwMDEKLXR5cGVkZWYgc3RydWN0IHh0aGFsX3N0YXRlIHsKLSAgICB1bnNpZ25lZAlwYzsKLSAgICB1bnNpZ25lZAlhclsxNl07Ci0gICAgdW5zaWduZWQJbGJlZzsKLSAgICB1bnNpZ25lZAlsZW5kOwotICAgIHVuc2lnbmVkCWxjb3VudDsKLSAgICB1bnNpZ25lZAlleHRyYV9wdHI7Ci0gICAgdW5zaWduZWQJY3ByZWdzX3B0cltYVEhBTF9NQVhfQ1BTXTsKLX0gWFRIQUxfU1RBVEU7Ci1leHRlcm4gdW5zaWduZWQgaW50IHh0aGFsX2luc3RfdHlwZSh2b2lkICphZGRyKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgeHRoYWxfYnJhbmNoX2FkZHIodm9pZCAqYWRkcik7Ci1leHRlcm4gdW5zaWduZWQgaW50IHh0aGFsX2dldF9ucGMoWFRIQUxfU1RBVEUgKnVzZXJfc3RhdGUpOwotI2VuZGlmIC8qIElOQ0xVREVfREVQUkVDQVRFRF9IQUxfREVCVUdfQ09ERSAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotI2VuZGlmIC8qIV9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLypYVEVOU0FfSEFMX0gqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL3NpbWNhbGwuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2Evc2ltY2FsbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmI4Njg5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2Evc2ltY2FsbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLSNpZm5kZWYgU0lNQ0FMTF9JTkNMVURFRAotI2RlZmluZSBTSU1DQUxMX0lOQ0xVREVECi0KLS8qCi0gKiBUSElTIEZJTEUgSVMgR0VORVJBVEVEIC0tIERPIE5PVCBNT0RJRlkgQlkgSEFORAotICoKLSAqIGluY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2Evc2ltY2FsbC5oICAtICBTaW11bGF0b3IgY2FsbCBudW1iZXJzCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZgotICogdGhpcyBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFRlbnNpbGljYSBJbmMuCi0gKi8KLQotCi0vKgotICogIFN5c3RlbSBjYWxsIGxpa2Ugc2VydmljZXMgb2ZmZXJlZCBieSB0aGUgc2ltdWxhdG9yIGhvc3QuCi0gKiAgVGhlc2UgYXJlIG1vZGVsZWQgYWZ0ZXIgdGhlIExpbnV4IDIuNCBrZXJuZWwgc3lzdGVtIGNhbGxzCi0gKiAgZm9yIFh0ZW5zYSBwcm9jZXNzb3JzLiAgSG93ZXZlciBub3QgYWxsIHN5c3RlbSBjYWxscyBhbmQKLSAqICBub3QgYWxsIGZ1bmN0aW9uYWxpdHkgb2YgYSBnaXZlbiBzeXN0ZW0gY2FsbCBhcmUgaW1wbGVtZW50ZWQsCi0gKiAgb3IgbmVjZXNzYXJpbHkgaGF2ZSB3ZWxsIGRlZmluZWQgb3IgZXF1aXZhbGVudCBzZW1hbnRpY3MgaW4KLSAqICB0aGUgY29udGV4dCBvZiBhIHNpbXVsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBVbml4IGtlcm5lbCkuCi0gKgotICogIFRoZXNlIHNlcnZpY2VzIGJlaGF2ZSBsYXJnZWx5IGFzIGlmIHRoZXkgaGFkIGJlZW4gaW52b2tlZAotICogIGFzIGEgdGFzayBpbiB0aGUgc2ltdWxhdG9yIGhvc3QncyBvcGVyYXRpbmcgc3lzdGVtCi0gKiAgKGVnLiBmaWxlcyBhY2Nlc3NlZCBhcmUgdGhvc2Ugb2YgdGhlIHNpbXVsYXRvciBob3N0KS4KLSAqICBIb3dldmVyLCB0aGVzZSBTSU1DQUxMcyBtb2RlbCBhIHZpcnR1YWwgb3BlcmF0aW5nIHN5c3RlbQotICogIHNvIHRoYXQgdmFyaW91cyBkZWZpbml0aW9ucywgYml0IGFzc2lnbm1lbnRzIGV0YwotICogIChlZy4gb3BlbiBtb2RlIGJpdHMsIGVycm5vIHZhbHVlcywgZXRjKSBhcmUgaW5kZXBlbmRlbnQKLSAqICBvZiB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtIHVzZWQgdG8gcnVuIHRoZSBzaW11bGF0aW9uLgotICogIFJhdGhlciB0aGVzZSBkZWZpbml0aW9ucyBhcmUgc3BlY2lmaWMgdG8gdGhlIFh0ZW5zYSBJU1MuCi0gKiAgVGhpcyB3YXkgWHRlbnNhIElTQSBjb2RlIHdyaXR0ZW4gdG8gdXNlIHRoZXNlIFNJTUNBTExzCi0gKiAgY2FuIChpbiBwcmluY2lwbGUpIGJlIHNpbXVsYXRlZCBvbiBhbnkgaG9zdC4KLSAqCi0gKiAgVXAgdG8gNiBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgaW4gcmVnaXN0ZXJzIGEzIHRvIGE4Ci0gKiAgKG5vdGUgdGhlIDZ0aCBwYXJhbWV0ZXIgaXNuJ3QgcGFzc2VkIG9uIHRoZSBzdGFjaywKLSAqICAgdW5saWtlIHdpbmRvd2VkIGZ1bmN0aW9uIGNhbGxpbmcgY29udmVudGlvbnMpLgotICogIFRoZSByZXR1cm4gdmFsdWUgaXMgaW4gYTIuICBBIG5lZ2F0aXZlIHZhbHVlIGluIHRoZQotICogIHJhbmdlIC00MDk2IHRvIC0xIGluZGljYXRlcyBhIG5lZ2F0ZWQgZXJyb3IgY29kZSB0byBiZQotICogIHJlcG9ydGVkIGluIGVycm5vIHdpdGggYSByZXR1cm4gdmFsdWUgb2YgLTEsIG90aGVyd2lzZQotICogIHRoZSB2YWx1ZSBpbiBhMiBpcyByZXR1cm5lZCBhcyBpcy4KLSAqLwotCi0vKiBUaGVzZSAjZGVmaW5lcyBuZWVkIHRvIG1hdGNoIHdoYXQncyBpbiBYdGVuc2EvT1Mvdnh3b3Jrcy94dGlzcy9zaW1jYWxscy5jICovCi0KLSNkZWZpbmUgU1lTX25vcAkJMAkvKiBuL2EgLSBzZXR1cDsgdXNlZCB0byBmbHVzaCByZWdpc3RlciB3aW5kb3dzICovCi0jZGVmaW5lIFNZU19leGl0CTEJLyp4Ki8KLSNkZWZpbmUgU1lTX2ZvcmsJMgotI2RlZmluZSBTWVNfcmVhZAkzCS8qeCovCi0jZGVmaW5lIFNZU193cml0ZQk0CS8qeCovCi0jZGVmaW5lIFNZU19vcGVuCTUJLyp4Ki8KLSNkZWZpbmUgU1lTX2Nsb3NlCTYJLyp4Ki8KLSNkZWZpbmUgU1lTX3JlbmFtZQk3CS8qeCAzOCAtIHdhaXRwaWQgKi8KLSNkZWZpbmUgU1lTX2NyZWF0CTgJLyp4Ki8KLSNkZWZpbmUgU1lTX2xpbmsJOQkvKnggKG5vdCBpbXBsZW1lbnRlZCBvbiBXSU4zMikgKi8KLSNkZWZpbmUgU1lTX3VubGluawkxMAkvKngqLwotI2RlZmluZSBTWVNfZXhlY3YJMTEJLyogbi9hIC0gZXhlY3ZlICovCi0jZGVmaW5lIFNZU19leGVjdmUJMTIJLyogMTEgLSBjaGRpciAqLwotI2RlZmluZSBTWVNfcGlwZQkxMwkvKiA0MiAtIHRpbWUgKi8KLSNkZWZpbmUgU1lTX3N0YXQJMTQJLyogMTA2IC0gbWtub2QgKi8KLSNkZWZpbmUgU1lTX2NobW9kCTE1Ci0jZGVmaW5lIFNZU19jaG93bgkxNgkvKiAyMDIgLSBsY2hvd24gKi8KLSNkZWZpbmUgU1lTX3V0aW1lCTE3CS8qIDMwIC0gYnJlYWsgKi8KLSNkZWZpbmUgU1lTX3dhaXQJMTgJLyogbi9hIC0gb2xkc3RhdCAqLwotI2RlZmluZSBTWVNfbHNlZWsJMTkJLyp4Ki8KLSNkZWZpbmUgU1lTX2dldHBpZAkyMAotI2RlZmluZSBTWVNfaXNhdHR5CTIxCS8qIG4vYSAtIG1vdW50ICovCi0jZGVmaW5lIFNZU19mc3RhdAkyMgkvKiAxMDggLSBvbGR1bW91bnQgKi8KLSNkZWZpbmUgU1lTX3RpbWUJMjMJLyogMTMgLSBzZXR1aWQgKi8KLSNkZWZpbmUgU1lTX2dldHRpbWVvZmRheSAyNAkvKnggNzggLSBnZXR1aWQgKG5vdCBpbXBsZW1lbnRlZCBvbiBXSU4zMikgKi8KLSNkZWZpbmUgU1lTX3RpbWVzCTI1CS8qWCA0MyAtIHN0aW1lIChYdGVuc2Etc3BlY2lmaWMgaW1wbGVtZW50YXRpb24pICovCi0jZGVmaW5lIFNZU19zb2NrZXQgICAgICAyNgotI2RlZmluZSBTWVNfc2VuZHRvICAgICAgMjcKLSNkZWZpbmUgU1lTX3JlY3Zmcm9tICAgIDI4Ci0jZGVmaW5lIFNZU19zZWxlY3Rfb25lICAyOSAgICAgIC8qIG5vdCBjb21waXRpYmxlIHNlbGVjdCwgb25lIGZpbGUgZGVzY3JpcHRvciBhdCB0aGUgdGltZSAqLwotI2RlZmluZSBTWVNfYmluZCAgICAgICAgMzAKLSNkZWZpbmUgU1lTX2lvY3RsCTMxCi0KLS8qCi0gKiAgT3RoZXIuLi4KLSAqLwotI2RlZmluZSBTWVNfaXNzX2FyZ2MgICAgICAxMDAwCS8qIHJldHVybnMgdmFsdWUgb2YgYXJnYyAqLwotI2RlZmluZSBTWVNfaXNzX2FyZ3Zfc2l6ZSAxMDAxCS8qIGJ5dGVzIG5lZWRlZCBmb3IgYXJndiAmIGFyZyBzdHJpbmdzICovCi0jZGVmaW5lIFNZU19pc3Nfc2V0X2FyZ3YgIDEwMDIJLyogc2F2ZXMgYXJndiAmIGFyZyBzdHJpbmdzIGF0IGdpdmVuIGFkZHIgKi8KLQotLyoKLSAqIFNJTUNBTExzIGZvciB0aGUgZmVycmV0IG1lbW9yeSBkZWJ1Z2dlci4gQWxsIGFyZSBpbnZva2VkIGJ5Ci0gKiBsaWJmZXJyZXQuYSAuLi4gICggWHRlbnNhL1RhcmdldC1MaWJzL2ZlcnJldCApCi0gKi8KLSNkZWZpbmUgU1lTX2ZlcnJldCAgICAgICAgICAgMTAxMAotI2RlZmluZSBTWVNfbWFsbG9jICAgICAgICAgICAxMDExCi0jZGVmaW5lIFNZU19mcmVlICAgICAgICAgICAgIDEwMTIKLSNkZWZpbmUgU1lTX21vcmVfaGVhcCAgICAgICAgMTAxMwotI2RlZmluZSBTWVNfbm9faGVhcCAgICAgICAgICAxMDE0Ci0KLQotLyoKLSAqICBFeHRyYSBTSU1DQUxMcyBmb3IgR0RCOgotICovCi0jZGVmaW5lIFNZU19nZGJfYnJlYWsgICAgICAgICAtMQkvKiBpbnZva2VkIGJ5IFhUT1Mgb24gdXNlciBleGNlcHRpb25zIGlmIEVQQyBwb2ludHMKLQkJCQkJICAgdG8gYSBicmVhay5uL2JyZWFrLCByZWdhcmRsZXNzIG9mIGNhdXNlISAqLwotI2RlZmluZSBTWVNfeG1vbl9vdXQgICAgICAgICAgLTIJLyogaW52b2tlZCBieSBYTU9OOiAuLi4gKi8KLSNkZWZpbmUgU1lTX3htb25faW4gICAgICAgICAgIC0zCS8qIGludm9rZWQgYnkgWE1PTjogLi4uICovCi0jZGVmaW5lIFNZU194bW9uX2ZsdXNoICAgICAgICAtNAkvKiBpbnZva2VkIGJ5IFhNT046IC4uLiAqLwotI2RlZmluZSBTWVNfZ2RiX2Fib3J0ICAgICAgICAgLTUJLyogaW52b2tlZCBieSBYVE9TIGluIF94dG9zX3BhbmljKCkgKi8KLSNkZWZpbmUgU1lTX2dkYl9pbGxlZ2FsX2luc3QgIC02CS8qIGludm9rZWQgYnkgWFRPUyBmb3IgaWxsZWdhbCBpbnN0cnVjdGlvbnMgKHRvbyBkZWVwbHkpICovCi0jZGVmaW5lIFNZU194bW9uX2luaXQgICAgICAgICAtNwkvKiBpbnZva2VkIGJ5IFhNT046IC4uLiAqLwotI2RlZmluZSBTWVNfZ2RiX2VudGVyX3NrdGxvb3AgLTgJLyogaW52b2tlZCBieSBYVE9TIG9uIGRlYnVnIGV4Y2VwdGlvbnMgKi8KLQotLyoKLSAqICBTSU1DQUxMcyBmb3IgdnhXb3JrcyB4dGlzcyBCU1A6Ci0gKi8KLSNkZWZpbmUgU1lTX3NldHVwX3BwcF9waXBlcyAgIC04MwotI2RlZmluZSBTWVNfbG9nX21zZyAgICAgICAgICAgLTg0Ci0KLS8qCi0gKiAgVGVzdCBTSU1DQUxMczoKLSAqLwotI2RlZmluZSBTWVNfdGVzdF93cml0ZV9zdGF0ZSAgLTEwMAotI2RlZmluZSBTWVNfdGVzdF9yZWFkX3N0YXRlICAgLTEwMQotCi0vKgotICogU1lTX3NlbGVjdF9vbmUgc3BlY2lmaWVycwotICovCi0jZGVmaW5lICBYVElTU19TRUxFQ1RfT05FX1JFQUQgICAgMQotI2RlZmluZSAgWFRJU1NfU0VMRUNUX09ORV9XUklURSAgIDIKLSNkZWZpbmUgIFhUSVNTX1NFTEVDVF9PTkVfRVhDRVBUICAzCi0KLSNlbmRpZiAvKiAhU0lNQ0FMTF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS94dDIwMDAtdWFydC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS94dDIwMDAtdWFydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTU0NDYwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EveHQyMDAwLXVhcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0jaWZuZGVmIF91YXJ0X2hfaW5jbHVkZWRfCi0jZGVmaW5lIF91YXJ0X2hfaW5jbHVkZWRfCi0KLS8qCi0gKiBUSElTIEZJTEUgSVMgR0VORVJBVEVEIC0tIERPIE5PVCBNT0RJRlkgQlkgSEFORAotICoKLSAqIGluY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EveHQyMDAwLXVhcnQuaCAtLSBOYXRTZW1pIFBDMTY1NTJEIERVQVJUCi0gKiBkZWZpbml0aW9ucwotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBUZW5zaWxpY2EgSW5jLgotICovCi0KLQotI2luY2x1ZGUgPHh0ZW5zYS94dDIwMDAuaD4KLQotCi0vKiAxNjU1MCBVQVJUIERFVklDRSBSRUdJU1RFUlMKLSAgIFRoZSBYVDIwMDAgYm9hcmQgYWxpZ25zIGVhY2ggcmVnaXN0ZXIgdG8gYSAzMi1iaXQgd29yZCBidXQgdGhlIFVBUlQgZGV2aWNlIG9ubHkgdXNlcwotICAgb25lIGJ5dGUgb2YgdGhlIHdvcmQsIHdoaWNoIGlzIHRoZSBsZWFzdC1zaWduaWZpY2FudCBieXRlIHJlZ2FyZGxlc3Mgb2YgdGhlCi0gICBlbmRpYW5uZXNzIG9mIHRoZSBjb3JlIChpZS4gYnl0ZSBvZmZzZXQgMCBmb3IgbGl0dGxlLWVuZGlhbiBhbmQgMyBmb3IgYmlnLWVuZGlhbikuCi0gICBTbyBpZiB1c2luZyB3b3JkIGFjY2Vzc2VzIHRoZW4gZW5kaWFubmVzcyBkb2Vzbid0IG1hdHRlci4KLSAgIFRoZSBtYWNyb3MgcHJvdmlkZWQgaGVyZSBkbyB0aGF0LgotKi8KLXN0cnVjdCB1YXJ0X2Rldl9zIHsKLSAgdW5pb24gewotICAgIHVuc2lnbmVkIGludCByeGI7CS8qIERMQUI9MDogcmVjZWl2ZSBidWZmZXIsIHJlYWQtb25seSAqLwotICAgIHVuc2lnbmVkIGludCB0eGI7CS8qIERMQUI9MDogdHJhbnNtaXQgYnVmZmVyLCB3cml0ZS1vbmx5ICovCi0gICAgdW5zaWduZWQgaW50IGRsbDsJLyogRExBQj0xOiBkaXZpc29yLCBsZWFzdC1zaWduaWZpY2FudCBieXRlIGxhdGNoICh3YXMgd3JpdGUtb25seT8pICovCi0gIH0gdzA7Ci0gIHVuaW9uIHsKLSAgICB1bnNpZ25lZCBpbnQgaWVyOwkvKiBETEFCPTA6IGludGVycnVwdC1lbmFibGUgcmVnaXN0ZXIgKHdhcyB3cml0ZS1vbmx5PykgKi8KLSAgICB1bnNpZ25lZCBpbnQgZGxtOwkvKiBETEFCPTE6IGRpdmlzb3IsIG1vc3Qtc2lnbmlmaWNhbnQgYnl0ZSBsYXRjaCAod2FzIHdyaXRlLW9ubHk/KSAqLwotICB9IHcxOwotCi0gIHVuaW9uIHsKLSAgICB1bnNpZ25lZCBpbnQgaXNyOwkvKiBETEFCPTA6IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIsIHJlYWQtb25seSAqLwotICAgIHVuc2lnbmVkIGludCBmY3I7CS8qIERMQUI9MDogRklGTyBjb250cm9sIHJlZ2lzdGVyLCB3cml0ZS1vbmx5ICovCi0gICAgdW5zaWduZWQgaW50IGFmcjsJLyogRExBQj0xOiBhbHRlcm5hdGUgZnVuY3Rpb24gcmVnaXN0ZXIgKi8KLSAgfSB3MjsKLQotICB1bnNpZ25lZCBpbnQgbGNyOwkvKiBsaW5lIGNvbnRyb2wtcmVnaXN0ZXIsIHdyaXRlLW9ubHkgKi8KLSAgdW5zaWduZWQgaW50IG1jcjsJLyogbW9kZW0gY29udHJvbC1yZWdzaXRlciwgd3JpdGUtb25seSAqLwotICB1bnNpZ25lZCBpbnQgbHNyOwkvKiBsaW5lIHN0YXR1cyByZWdpc3RlciwgcmVhZC1vbmx5ICovCi0gIHVuc2lnbmVkIGludCBtc3I7CS8qIG1vZGVtIHN0YXR1cyByZWdpc3RlciwgcmVhZC1vbmx5ICovCi0gIHVuc2lnbmVkIGludCBzY3I7CS8qIHNjcmF0Y2ggcmVnc2l0ZXIsIHJlYWQvd3JpdGUgKi8KLX07Ci0KLSNkZWZpbmUgX1JYQih1KSAoKHUpLT53MC5yeGIpCi0jZGVmaW5lIF9UWEIodSkgKCh1KS0+dzAudHhiKQotI2RlZmluZSBfRExMKHUpICgodSktPncwLmRsbCkKLSNkZWZpbmUgX0lFUih1KSAoKHUpLT53MS5pZXIpCi0jZGVmaW5lIF9ETE0odSkgKCh1KS0+dzEuZGxtKQotI2RlZmluZSBfSVNSKHUpICgodSktPncyLmlzcikKLSNkZWZpbmUgX0ZDUih1KSAoKHUpLT53Mi5mY3IpCi0jZGVmaW5lIF9BRlIodSkgKCh1KS0+dzIuYWZyKQotI2RlZmluZSBfTENSKHUpICgodSktPmxjcikKLSNkZWZpbmUgX01DUih1KSAoKHUpLT5tY3IpCi0jZGVmaW5lIF9MU1IodSkgKCh1KS0+bHNyKQotI2RlZmluZSBfTVNSKHUpICgodSktPm1zcikKLSNkZWZpbmUgX1NDUih1KSAoKHUpLT5zY3IpCi0KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0IHVhcnRfZGV2X3MgdWFydF9kZXZfdDsKLQotLyogSUVSIGJpdHMgKi8KLSNkZWZpbmUgUkNWUl9EQVRBX1JFR19JTlRFTkFCTEUgMHgwMQotI2RlZmluZSBYTUlUX0hPTERfUkVHX0lOVEVOQUJMRSAgICAweDAyCi0jZGVmaW5lIFJDVlJfU1RBVFVTX0lOVEVOQUJMRSAgIDB4MDQKLSNkZWZpbmUgTU9ERU1fU1RBVFVTX0lOVEVOQUJMRSAgICAgMHgwOAotCi0vKiBGQ1IgYml0cyAqLwotI2RlZmluZSBfRklGT19FTkFCTEUgICAgICAweDAxCi0jZGVmaW5lIFJDVlJfRklGT19SRVNFVCAgMHgwMgotI2RlZmluZSBYTUlUX0ZJRk9fUkVTRVQgIDB4MDQKLSNkZWZpbmUgRE1BX01PREVfU0VMRUNUICAweDA4Ci0jZGVmaW5lIFJDVlJfVFJJR0dFUl9MU0IgMHg0MAotI2RlZmluZSBSQ1ZSX1RSSUdHRVJfTVNCIDB4ODAKLQotLyogQUZSIGJpdHMgKi8KLSNkZWZpbmUgQUZSX0NPTkNfV1JJVEUJMHgwMQotI2RlZmluZSBBRlJfQkFVRE9VVF9TRUwJMHgwMgotI2RlZmluZSBBRlJfUlhSRFlfU0VMCTB4MDQKLQotLyogSVNSIGJpdHMgKi8KLSNkZWZpbmUgSU5UX1NUQVRVUyhyKSAgICgocikmMSkKLSNkZWZpbmUgSU5UX1BSSU9SSVRZKHIpICgoKHIpPj4xKSYweDcpCi0KLS8qIExDUiBiaXRzICovCi0jZGVmaW5lIFdPUkRfTEVOR1RIKG4pICAoKChuKS01KSYweDMpCi0jZGVmaW5lIFNUT1BfQklUX0VOQUJMRSAweDA0Ci0jZGVmaW5lIFBBUklUWV9FTkFCTEUgICAweDA4Ci0jZGVmaW5lIEVWRU5fUEFSSVRZICAgICAweDEwCi0jZGVmaW5lIEZPUkNFX1BBUklUWSAgICAweDIwCi0jZGVmaW5lIFhNSVRfQlJFQUsgICAgICAweDQwCi0jZGVmaW5lIERMQUJfRU5BQkxFICAgICAweDgwCi0KLS8qIE1DUiBiaXRzICovCi0jZGVmaW5lIF9EVFIgMHgwMQotI2RlZmluZSBfUlRTIDB4MDIKLSNkZWZpbmUgX09QMSAweDA0Ci0jZGVmaW5lIF9PUDIgMHgwOAotI2RlZmluZSBMT09QX0JBQ0sgMHgxMAotCi0vKiBMU1IgQml0cyAqLwotI2RlZmluZSBSQ1ZSX0RBVEFfUkVBRFkgMHgwMQotI2RlZmluZSBPVkVSUlVOX0VSUk9SICAgMHgwMgotI2RlZmluZSBQQVJJVFlfRVJST1IgICAgMHgwNAotI2RlZmluZSBGUkFNSU5HX0VSUk9SICAgMHgwOAotI2RlZmluZSBCUkVBS19JTlRFUlJVUFQgMHgxMAotI2RlZmluZSBYTUlUX0hPTERfRU1QVFkgMHgyMAotI2RlZmluZSBYTUlUX0VNUFRZICAgICAgMHg0MAotI2RlZmluZSBGSUZPX0VSUk9SICAgICAgMHg4MAotI2RlZmluZSBSQ1ZSX1JFQURZKHUpICAgKF9MU1IodSkmUkNWUl9EQVRBX1JFQURZKQotI2RlZmluZSBYTUlUX1JFQURZKHUpICAgKF9MU1IodSkmWE1JVF9IT0xEX0VNUFRZKQotCi0vKiBNU1IgYml0cyAqLwotI2RlZmluZSBfUkRSICAgICAgIDB4MDEKLSNkZWZpbmUgREVMVEFfRFNSIDB4MDIKLSNkZWZpbmUgREVMVEFfUkkgIDB4MDQKLSNkZWZpbmUgREVMVEFfQ0QgIDB4MDgKLSNkZWZpbmUgX0NUUyAgICAgICAweDEwCi0jZGVmaW5lIF9EU1IgICAgICAgMHgyMAotI2RlZmluZSBfUkkgICAgICAgIDB4NDAKLSNkZWZpbmUgX0NEICAgICAgICAweDgwCi0KLS8qIHByb3RvdHlwZXMgKi8KLXZvaWQgdWFydF9pbml0KCB1YXJ0X2Rldl90ICp1LCBpbnQgYml0cmF0ZSApOwotdm9pZCB1YXJ0X291dCggdWFydF9kZXZfdCAqdSwgY2hhciBjICk7Ci12b2lkIHVhcnRfcHV0cyggdWFydF9kZXZfdCAqdSwgY2hhciAqcyApOwotY2hhciB1YXJ0X2luKCB1YXJ0X2Rldl90ICp1ICk7Ci12b2lkIHVhcnRfZW5hYmxlX3JjdnJfaW50KCB1YXJ0X2Rldl90ICp1ICk7Ci12b2lkIHVhcnRfZGlzYWJsZV9yY3ZyX2ludCggdWFydF9kZXZfdCAqdSApOwotCi0jaWZkZWYgRFVBUlQxNjU1Ml8xX1ZBRERSCi0vKiAgRFVBUlQgcHJlc2VudC4gICovCi0jZGVmaW5lIERVQVJUXzFfQkFTRQkoKih1YXJ0X2Rldl90KilEVUFSVDE2NTUyXzFfVkFERFIpCi0jZGVmaW5lIERVQVJUXzJfQkFTRQkoKih1YXJ0X2Rldl90KilEVUFSVDE2NTUyXzJfVkFERFIpCi0jZGVmaW5lIFVBUlQxX1BVVFMocykJdWFydF9wdXRzKCAmRFVBUlRfMV9CQVNFLCBzICkKLSNkZWZpbmUgVUFSVDJfUFVUUyhzKQl1YXJ0X3B1dHMoICZEVUFSVF8yX0JBU0UsIHMgKQotI2Vsc2UKLS8qICBEVUFSVCBub3QgY29uZmlndXJlZCwgdXNlIGR1bW15IHBsYWNlaG9sZGVycyB0byBhbGxvdyBjb21waWxlcyB0byB3b3JrLiAgKi8KLSNkZWZpbmUgRFVBUlRfMV9CQVNFCSgqKHVhcnRfZGV2X3QqKTApCi0jZGVmaW5lIERVQVJUXzJfQkFTRQkoKih1YXJ0X2Rldl90KikwKQotI2RlZmluZSBVQVJUMV9QVVRTKHMpCi0jZGVmaW5lIFVBUlQyX1BVVFMocykKLSNlbmRpZgotCi0vKiAgQ29tcHV0ZSAxNi1iaXQgZGl2aXNvciBmb3IgYmF1ZHJhdGUgZ2VuZXJhdG9yLCB3aXRoIHJvdW5kaW5nOiAgKi8KLSNkZWZpbmUgRFVBUlRfRElWSVNPUihjcnlzdGFsLHNwZWVkKQkoKChjcnlzdGFsKS8xNiArIChzcGVlZCkvMikvKHNwZWVkKSkKLQotI2VuZGlmIC8qX3VhcnRfaF9pbmNsdWRlZF8qLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL3h0MjAwMC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS94dDIwMDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAzYTQ1MC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL3h0MjAwMC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDA4ICswLDAgQEAKLSNpZm5kZWYgX0lOQ19YVDIwMDBfSF8KLSNkZWZpbmUgX0lOQ19YVDIwMDBfSF8KLQotLyoKLSAqIFRISVMgRklMRSBJUyBHRU5FUkFURUQgLS0gRE8gTk9UIE1PRElGWSBCWSBIQU5ECi0gKgotICogaW5jbHVkZS9hc20teHRlbnNhL3h0ZW5zYS94dDIwMDAuaCAtIERlZmluaXRpb25zIHNwZWNpZmljIHRvIHRoZQotICogVGVuc2lsaWNhIFhUMjAwMCBFbXVsYXRpb24gQm9hcmQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgVGVuc2lsaWNhIEluYy4KLSAqLwotCi0KLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4KLSNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL3N5c3RlbS5oPgotCi0KLS8qCi0gKiAgRGVmYXVsdCBhc3NpZ25tZW50IG9mIFhUMjAwMCBkZXZpY2VzIHRvIGV4dGVybmFsIGludGVycnVwdHMuCi0gKi8KLQotLyogIEV0aGVybmV0IGludGVycnVwdDogICovCi0jaWZkZWYgWENIQUxfRVhUSU5UM19OVU0KLSNkZWZpbmUgU09OSUM4MzkzNF9JTlROVU0JWENIQUxfRVhUSU5UM19OVU0KLSNkZWZpbmUgU09OSUM4MzkzNF9JTlRMRVZFTAlYQ0hBTF9FWFRJTlQzX0xFVkVMCi0jZGVmaW5lIFNPTklDODM5MzRfSU5UTUFTSwlYQ0hBTF9FWFRJTlQzX01BU0sKLSNlbHNlCi0jZGVmaW5lIFNPTklDODM5MzRfSU5UTUFTSwkwCi0jZW5kaWYKLQotLyogIERVQVJUIGNoYW5uZWwgMSBpbnRlcnJ1cHQgKFAxIC0gY29uc29sZSk6ICAqLwotI2lmZGVmIFhDSEFMX0VYVElOVDRfTlVNCi0jZGVmaW5lIERVQVJUMTY1NTJfMV9JTlROVU0JWENIQUxfRVhUSU5UNF9OVU0KLSNkZWZpbmUgRFVBUlQxNjU1Ml8xX0lOVExFVkVMCVhDSEFMX0VYVElOVDRfTEVWRUwKLSNkZWZpbmUgRFVBUlQxNjU1Ml8xX0lOVE1BU0sJWENIQUxfRVhUSU5UNF9NQVNLCi0jZWxzZQotI2RlZmluZSBEVUFSVDE2NTUyXzFfSU5UTUFTSwkwCi0jZW5kaWYKLQotLyogIERVQVJUIGNoYW5uZWwgMiBpbnRlcnJ1cHQgKFAyIC0gMm5kIHNlcmlhbCBwb3J0KTogICovCi0jaWZkZWYgWENIQUxfRVhUSU5UNV9OVU0KLSNkZWZpbmUgRFVBUlQxNjU1Ml8yX0lOVE5VTQlYQ0hBTF9FWFRJTlQ1X05VTQotI2RlZmluZSBEVUFSVDE2NTUyXzJfSU5UTEVWRUwJWENIQUxfRVhUSU5UNV9MRVZFTAotI2RlZmluZSBEVUFSVDE2NTUyXzJfSU5UTUFTSwlYQ0hBTF9FWFRJTlQ1X01BU0sKLSNlbHNlCi0jZGVmaW5lIERVQVJUMTY1NTJfMl9JTlRNQVNLCTAKLSNlbmRpZgotCi0vKiAgRlBHQS1jb21iaW5lZCBQQ0kvZXRjIGludGVycnVwdHM6ICAqLwotI2lmZGVmIFhDSEFMX0VYVElOVDZfTlVNCi0jZGVmaW5lIFhUMjAwMF9GUEdBUENJX0lOVE5VTQlYQ0hBTF9FWFRJTlQ2X05VTQotI2RlZmluZSBYVDIwMDBfRlBHQVBDSV9JTlRMRVZFTAlYQ0hBTF9FWFRJTlQ2X0xFVkVMCi0jZGVmaW5lIFhUMjAwMF9GUEdBUENJX0lOVE1BU0sJWENIQUxfRVhUSU5UNl9NQVNLCi0jZWxzZQotI2RlZmluZSBYVDIwMDBfRlBHQVBDSV9JTlRNQVNLCTAKLSNlbmRpZgotCi0KLQotLyoKLSAqICBEZXZpY2UgYWRkcmVzc2VzLgotICoKLSAqICBOb3RlOiAgZm9yIGVuZGlhbm5lc3MtaW5kZXBlbmRlbmNlLCB1c2UgMzItYml0IGxvYWRzIGFuZCBzdG9yZXMgZm9yIGFsbAotICogIHJlZ2lzdGVyIGFjY2Vzc2VzIHRvIEV0aGVybmV0LCBEVUFSVCBhbmQgTEVEIGRldmljZXMuICBVbmRlZmluZWQgYml0cwotICogIG1heSBuZWVkIHRvIGJlIG1hc2tlZCBvdXQgaWYgbmVlZGVkIHdoZW4gcmVhZGluZyBpZiB0aGUgYWN0dWFsIHJlZ2lzdGVyCi0gKiAgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMzIgYml0cy4KLSAqCi0gKiAgTm90ZTogIFhUMjAwMCBidXMgYnl0ZSBsYW5lcyBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiBtc2J5dGUgYW5kIGxzYnl0ZQotICogIHJlbGF0aXZlIHRvIHRoZSBwcm9jZXNzb3IuICBTbyAzMi1iaXQgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBjb25zaXN0ZW50bHkKLSAqICBmcm9tIGJvdGggYmlnIGFuZCBsaXR0bGUgZW5kaWFuIHByb2Nlc3NvcnMuICBIb3dldmVyLCB0aGlzIG1lYW5zIGJ5dGUKLSAqICBzZXF1ZW5jZXMgYXJlIG5vdCBjb25zaXN0ZW50IGJldHdlZW4gYmlnIGFuZCBsaXR0bGUgZW5kaWFuIHByb2Nlc3NvcnMuCi0gKiAgVGhpcyBpcyBmaW5lIGZvciBSQU0sIGFuZCBmb3IgUk9NIGlmIFJPTSBpcyBjcmVhdGVkIGZvciBhIHNwZWNpZmljCi0gKiAgcHJvY2Vzc29yIChhbmQgdGh1cyBoYXMgY29ycmVjdCBieXRlIHNlcXVlbmNlcykuICBIb3dldmVyIHRoaXMgbWF5IGJlCi0gKiAgdW5leHBlY3RlZCBmb3IgRmxhc2gsIHdoaWNoIG1pZ2h0IGNvbnRhaW4gYSBmaWxlLXN5c3RlbSB0aGF0IG9uZSB3YW50cwotICogIHRvIHVzZSBmb3IgbXVsdGlwbGUgcHJvY2Vzc29yIGNvbmZpZ3VyYXRpb25zIChlZy4gdGhlIEZsYXNoIG1pZ2h0IGNvbnRhaW4KLSAqICB0aGUgRXRoZXJuZXQgY2FyZCdzIGFkZHJlc3MsIGVuZGlhbm5lc3MtaW5kZXBlbmRlbnQgYXBwbGljYXRpb24gZGF0YSwgZXRjKS4KLSAqICBUaGF0IGlzLCBieXRlIHNlcXVlbmNlcyB3cml0dGVuIGluIEZsYXNoIGJ5IGEgY29yZSBvZiBhIGdpdmVuIGVuZGlhbm5lc3MKLSAqICB3aWxsIGJlIGJ5dGUtc3dhcHBlZCB3aGVuIHNlZW4gYnkgYSBjb3JlIG9mIHRoZSBvdGhlciBlbmRpYW5uZXNzLgotICogIFNvbWVvbmUgaW1wbGVtZW50aW5nIGFuIGVuZGlhbm5lc3MtaW5kZXBlbmRlbnQgRmxhc2ggZmlsZSBzeXN0ZW0gd2lsbAotICogIGxpa2VseSBoYW5kbGUgdGhpcyBieXRlLXN3YXBwaW5nIGlzc3VlIGluIHRoZSBGbGFzaCBkcml2ZXIgc29mdHdhcmUuCi0gKi8KLQotI2RlZmluZSBEVUFSVDE2NTUyX1hUQUxfRlJFUQkxODQzMjAwMAkvKiBjcnlzdGFsIGZyZXF1ZW5jeSBpbiBIeiAqLwotI2RlZmluZSBYVEJPQVJEX0ZMQVNIX01BWFNJWkUJMHg0MDAwMDAwCS8qIDY0IE1CIChtYXg7IGRlcGVuZHMgb24gd2hhdCBpcyBzb2NrZXRlZCEpICovCi0jZGVmaW5lIFhUQk9BUkRfRVBST01fTUFYU0laRQkweDA0MDAwMDAJLyogNCBNQiAobWF4OyBkZXBlbmRzIG9uIHdoYXQgaXMgc29ja2V0ZWQhKSAqLwotI2RlZmluZSBYVEJPQVJEX0VFUFJPTV9NQVhTSVpFCTB4MDA4MDAwMAkvKiA1MTIga0IgKG1heDsgZGVwZW5kcyBvbiB3aGF0IGlzIHNvY2tldGVkISkgKi8KLSNkZWZpbmUgWFRCT0FSRF9BU1JBTV9TSVpFCTB4MDEwMDAwMAkvKiAxIE1CICovCi0jZGVmaW5lIFhUQk9BUkRfUENJX01FTV9TSVpFCTB4ODAwMDAwMAkvKiAxMjggTUIgKGFsbG9jYXRlZCkgKi8KLSNkZWZpbmUgWFRCT0FSRF9QQ0lfSU9fU0laRQkweDEwMDAwMDAJLyogMTYgTUIgKGFsbG9jYXRlZCkgKi8KLQotI2lmZGVmIFhTSEFMX0lPQkxPQ0tfQllQQVNTX1BBRERSCi0vKiAgUENJIG1lbW9yeSBzcGFjZTogICovCi0jIGRlZmluZSBYVEJPQVJEX1BDSV9NRU1fUEFERFIJKFhTSEFMX0lPQkxPQ0tfQllQQVNTX1BBRERSKzB4MDAwMDAwMCkKLS8qICBTb2NrZXRlZCBGbGFzaCAoZWcuIDIgeCAxNi1iaXQgZGV2aWNlcyk6ICAqLwotIyBkZWZpbmUgWFRCT0FSRF9GTEFTSF9QQUREUgkoWFNIQUxfSU9CTE9DS19CWVBBU1NfUEFERFIrMHg4MDAwMDAwKQotLyogIFBDSSBJL08gc3BhY2U6ICAqLwotIyBkZWZpbmUgWFRCT0FSRF9QQ0lfSU9fUEFERFIJKFhTSEFMX0lPQkxPQ0tfQllQQVNTX1BBRERSKzB4QzAwMDAwMCkKLS8qICBWMyBQQ0kgaW50ZXJmYWNlIGNoaXAgcmVnaXN0ZXIvY29uZmlnIHNwYWNlOiAgKi8KLSMgZGVmaW5lIFhUQk9BUkRfVjNQQ0lfUEFERFIJKFhTSEFMX0lPQkxPQ0tfQllQQVNTX1BBRERSKzB4RDAwMDAwMCkKLS8qICBCdXMgSW50ZXJmYWNlIHJlZ2lzdGVyczogICovCi0jIGRlZmluZSBYVEJPQVJEX0JVU0lOVF9QQUREUgkoWFNIQUxfSU9CTE9DS19CWVBBU1NfUEFERFIrMHhEMDEwMDAwKQotLyogIEZQR0EgcmVnaXN0ZXJzOiAgKi8KLSMgZGVmaW5lIFhUMjAwMF9GUEdBUkVHU19QQUREUgkoWFNIQUxfSU9CTE9DS19CWVBBU1NfUEFERFIrMHhEMDIwMDAwKQotLyogIFNPTklDIFNOODM5MzQgRXRoZXJuZXQgY29udHJvbGxlci90cmFuc2NlaXZlcjogICovCi0jIGRlZmluZSBTT05JQzgzOTM0X1BBRERSCShYU0hBTF9JT0JMT0NLX0JZUEFTU19QQUREUisweEQwMzAwMDApCi0vKiAgOC1jaGFyYWN0ZXIgYml0bWFwcGVkIExFRCBkaXNwbGF5OiAgKi8KLSMgZGVmaW5lIFhUQk9BUkRfTEVEX1BBRERSCShYU0hBTF9JT0JMT0NLX0JZUEFTU19QQUREUisweEQwNDAwMDApCi0vKiAgTmF0aW9uYWwtU2VtaSBQQzE2NTUyRCBEVUFSVDogICovCi0jIGRlZmluZSBEVUFSVDE2NTUyXzFfUEFERFIJKFhTSEFMX0lPQkxPQ0tfQllQQVNTX1BBRERSKzB4RDA1MDAyMCkJLyogY2hhbm5lbCAxIChQMSAtIGNvbnNvbGUpICovCi0jIGRlZmluZSBEVUFSVDE2NTUyXzJfUEFERFIJKFhTSEFMX0lPQkxPQ0tfQllQQVNTX1BBRERSKzB4RDA1MDAwMCkJLyogY2hhbm5lbCAyIChQMikgKi8KLS8qICBBc3luY2hyb25vdXMgU3RhdGljIFJBTTogICovCi0jIGRlZmluZSBYVEJPQVJEX0FTUkFNX1BBRERSCShYU0hBTF9JT0JMT0NLX0JZUEFTU19QQUREUisweEQ0MDAwMDApCi0vKiAgOC1iaXQgRUVQUk9NOiAgKi8KLSMgZGVmaW5lIFhUQk9BUkRfRUVQUk9NX1BBRERSCShYU0hBTF9JT0JMT0NLX0JZUEFTU19QQUREUisweEQ2MDAwMDApCi0vKiAgMiB4IDE2LWJpdCBFUFJPTXM6ICAqLwotIyBkZWZpbmUgWFRCT0FSRF9FUFJPTV9QQUREUgkoWFNIQUxfSU9CTE9DS19CWVBBU1NfUEFERFIrMHhEODAwMDAwKQotI2VuZGlmIC8qIFhTSEFMX0lPQkxPQ0tfQllQQVNTX1BBRERSICovCi0KLS8qICBUaGVzZSBkZXZpY2VzIG1pZ2h0IGJlIGFjY2Vzc2VkIGNhY2hlZDogICovCi0jaWZkZWYgWFNIQUxfSU9CTE9DS19DQUNIRURfUEFERFIKLSMgZGVmaW5lIFhUQk9BUkRfUENJX01FTV9DQUNIRURfUEFERFIJKFhTSEFMX0lPQkxPQ0tfQ0FDSEVEX1BBRERSKzB4MDAwMDAwMCkKLSMgZGVmaW5lIFhUQk9BUkRfRkxBU0hfQ0FDSEVEX1BBRERSCShYU0hBTF9JT0JMT0NLX0NBQ0hFRF9QQUREUisweDgwMDAwMDApCi0jIGRlZmluZSBYVEJPQVJEX0FTUkFNX0NBQ0hFRF9QQUREUgkoWFNIQUxfSU9CTE9DS19DQUNIRURfUEFERFIrMHhENDAwMDAwKQotIyBkZWZpbmUgWFRCT0FSRF9FRVBST01fQ0FDSEVEX1BBRERSCShYU0hBTF9JT0JMT0NLX0NBQ0hFRF9QQUREUisweEQ2MDAwMDApCi0jIGRlZmluZSBYVEJPQVJEX0VQUk9NX0NBQ0hFRF9QQUREUgkoWFNIQUxfSU9CTE9DS19DQUNIRURfUEFERFIrMHhEODAwMDAwKQotI2VuZGlmIC8qIFhTSEFMX0lPQkxPQ0tfQ0FDSEVEX1BBRERSICovCi0KLQotLyoqKiAgU2FtZSB0aGluZyBvdmVyIGFnYWluLCB0aGlzIHRpbWUgd2l0aCB2aXJ0dWFsIGFkZHJlc3NlczogICoqKi8KLQotI2lmZGVmIFhTSEFMX0lPQkxPQ0tfQllQQVNTX1ZBRERSCi0vKiAgUENJIG1lbW9yeSBzcGFjZTogICovCi0jIGRlZmluZSBYVEJPQVJEX1BDSV9NRU1fVkFERFIJKFhTSEFMX0lPQkxPQ0tfQllQQVNTX1ZBRERSKzB4MDAwMDAwMCkKLS8qICBTb2NrZXRlZCBGbGFzaCAoZWcuIDIgeCAxNi1iaXQgZGV2aWNlcyk6ICAqLwotIyBkZWZpbmUgWFRCT0FSRF9GTEFTSF9WQUREUgkoWFNIQUxfSU9CTE9DS19CWVBBU1NfVkFERFIrMHg4MDAwMDAwKQotLyogIFBDSSBJL08gc3BhY2U6ICAqLwotIyBkZWZpbmUgWFRCT0FSRF9QQ0lfSU9fVkFERFIJKFhTSEFMX0lPQkxPQ0tfQllQQVNTX1ZBRERSKzB4QzAwMDAwMCkKLS8qICBWMyBQQ0kgaW50ZXJmYWNlIGNoaXAgcmVnaXN0ZXIvY29uZmlnIHNwYWNlOiAgKi8KLSMgZGVmaW5lIFhUQk9BUkRfVjNQQ0lfVkFERFIJKFhTSEFMX0lPQkxPQ0tfQllQQVNTX1ZBRERSKzB4RDAwMDAwMCkKLS8qICBCdXMgSW50ZXJmYWNlIHJlZ2lzdGVyczogICovCi0jIGRlZmluZSBYVEJPQVJEX0JVU0lOVF9WQUREUgkoWFNIQUxfSU9CTE9DS19CWVBBU1NfVkFERFIrMHhEMDEwMDAwKQotLyogIEZQR0EgcmVnaXN0ZXJzOiAgKi8KLSMgZGVmaW5lIFhUMjAwMF9GUEdBUkVHU19WQUREUgkoWFNIQUxfSU9CTE9DS19CWVBBU1NfVkFERFIrMHhEMDIwMDAwKQotLyogIFNPTklDIFNOODM5MzQgRXRoZXJuZXQgY29udHJvbGxlci90cmFuc2NlaXZlcjogICovCi0jIGRlZmluZSBTT05JQzgzOTM0X1ZBRERSCShYU0hBTF9JT0JMT0NLX0JZUEFTU19WQUREUisweEQwMzAwMDApCi0vKiAgOC1jaGFyYWN0ZXIgYml0bWFwcGVkIExFRCBkaXNwbGF5OiAgKi8KLSMgZGVmaW5lIFhUQk9BUkRfTEVEX1ZBRERSCShYU0hBTF9JT0JMT0NLX0JZUEFTU19WQUREUisweEQwNDAwMDApCi0vKiAgTmF0aW9uYWwtU2VtaSBQQzE2NTUyRCBEVUFSVDogICovCi0jIGRlZmluZSBEVUFSVDE2NTUyXzFfVkFERFIJKFhTSEFMX0lPQkxPQ0tfQllQQVNTX1ZBRERSKzB4RDA1MDAyMCkJLyogY2hhbm5lbCAxIChQMSAtIGNvbnNvbGUpICovCi0jIGRlZmluZSBEVUFSVDE2NTUyXzJfVkFERFIJKFhTSEFMX0lPQkxPQ0tfQllQQVNTX1ZBRERSKzB4RDA1MDAwMCkJLyogY2hhbm5lbCAyIChQMikgKi8KLS8qICBBc3luY2hyb25vdXMgU3RhdGljIFJBTTogICovCi0jIGRlZmluZSBYVEJPQVJEX0FTUkFNX1ZBRERSCShYU0hBTF9JT0JMT0NLX0JZUEFTU19WQUREUisweEQ0MDAwMDApCi0vKiAgOC1iaXQgRUVQUk9NOiAgKi8KLSMgZGVmaW5lIFhUQk9BUkRfRUVQUk9NX1ZBRERSCShYU0hBTF9JT0JMT0NLX0JZUEFTU19WQUREUisweEQ2MDAwMDApCi0vKiAgMiB4IDE2LWJpdCBFUFJPTXM6ICAqLwotIyBkZWZpbmUgWFRCT0FSRF9FUFJPTV9WQUREUgkoWFNIQUxfSU9CTE9DS19CWVBBU1NfVkFERFIrMHhEODAwMDAwKQotI2VuZGlmIC8qIFhTSEFMX0lPQkxPQ0tfQllQQVNTX1ZBRERSICovCi0KLS8qICBUaGVzZSBkZXZpY2VzIG1pZ2h0IGJlIGFjY2Vzc2VkIGNhY2hlZDogICovCi0jaWZkZWYgWFNIQUxfSU9CTE9DS19DQUNIRURfVkFERFIKLSMgZGVmaW5lIFhUQk9BUkRfUENJX01FTV9DQUNIRURfVkFERFIJKFhTSEFMX0lPQkxPQ0tfQ0FDSEVEX1ZBRERSKzB4MDAwMDAwMCkKLSMgZGVmaW5lIFhUQk9BUkRfRkxBU0hfQ0FDSEVEX1ZBRERSCShYU0hBTF9JT0JMT0NLX0NBQ0hFRF9WQUREUisweDgwMDAwMDApCi0jIGRlZmluZSBYVEJPQVJEX0FTUkFNX0NBQ0hFRF9WQUREUgkoWFNIQUxfSU9CTE9DS19DQUNIRURfVkFERFIrMHhENDAwMDAwKQotIyBkZWZpbmUgWFRCT0FSRF9FRVBST01fQ0FDSEVEX1ZBRERSCShYU0hBTF9JT0JMT0NLX0NBQ0hFRF9WQUREUisweEQ2MDAwMDApCi0jIGRlZmluZSBYVEJPQVJEX0VQUk9NX0NBQ0hFRF9WQUREUgkoWFNIQUxfSU9CTE9DS19DQUNIRURfVkFERFIrMHhEODAwMDAwKQotI2VuZGlmIC8qIFhTSEFMX0lPQkxPQ0tfQ0FDSEVEX1ZBRERSICovCi0KLQotLyogIFN5c3RlbSBST006ICAqLwotI2RlZmluZSBYVEJPQVJEX1JPTV9TSVpFCQlYU0hBTF9ST01fU0laRQotI2lmZGVmIFhTSEFMX1JPTV9WQUREUgotI2RlZmluZSBYVEJPQVJEX1JPTV9WQUREUgkJWFNIQUxfUk9NX1ZBRERSCi0jZW5kaWYKLSNpZmRlZiBYU0hBTF9ST01fUEFERFIKLSNkZWZpbmUgWFRCT0FSRF9ST01fUEFERFIJCVhTSEFMX1JPTV9QQUREUgotI2VuZGlmCi0KLS8qICBTeXN0ZW0gUkFNOiAgKi8KLSNkZWZpbmUgWFRCT0FSRF9SQU1fU0laRQkJWFNIQUxfUkFNX1NJWkUKLSNpZmRlZiBYU0hBTF9SQU1fVkFERFIKLSNkZWZpbmUgWFRCT0FSRF9SQU1fVkFERFIJCVhTSEFMX1JBTV9WQUREUgotI2VuZGlmCi0jaWZkZWYgWFNIQUxfUkFNX1BBRERSCi0jZGVmaW5lIFhUQk9BUkRfUkFNX1BBRERSCQlYU0hBTF9SQU1fUEFERFIKLSNlbmRpZgotI2RlZmluZSBYVEJPQVJEX1JBTV9CWVBBU1NfVkFERFIJWFNIQUxfUkFNX0JZUEFTU19WQUREUgotI2RlZmluZSBYVEJPQVJEX1JBTV9CWVBBU1NfUEFERFIJWFNIQUxfUkFNX0JZUEFTU19QQUREUgotCi0KLQotLyoKLSAqICBUaGluZ3MgdGhhdCBkZXBlbmQgb24gZGV2aWNlIGFkZHJlc3Nlcy4KLSAqLwotCi0KLSNkZWZpbmUgWFRCT0FSRF9DQUNIRUFUVFJfV1JJVEVCQUNLCVhTSEFMX1hUMjAwMF9DQUNIRUFUVFJfV1JJVEVCQUNLCi0jZGVmaW5lIFhUQk9BUkRfQ0FDSEVBVFRSX1dSSVRFQUxMT0MJWFNIQUxfWFQyMDAwX0NBQ0hFQVRUUl9XUklURUFMTE9DCi0jZGVmaW5lIFhUQk9BUkRfQ0FDSEVBVFRSX1dSSVRFVEhSVQlYU0hBTF9YVDIwMDBfQ0FDSEVBVFRSX1dSSVRFVEhSVQotI2RlZmluZSBYVEJPQVJEX0NBQ0hFQVRUUl9CWVBBU1MJWFNIQUxfWFQyMDAwX0NBQ0hFQVRUUl9CWVBBU1MKLSNkZWZpbmUgWFRCT0FSRF9DQUNIRUFUVFJfREVGQVVMVAlYU0hBTF9YVDIwMDBfQ0FDSEVBVFRSX0RFRkFVTFQKLQotI2RlZmluZSBYVEJPQVJEX0JVU0lOVF9QSVBFX1JFR0lPTlMJWFNIQUxfWFQyMDAwX1BJUEVfUkVHSU9OUwotI2RlZmluZSBYVEJPQVJEX0JVU0lOVF9TRFJBTV9SRUdJT05TCVhTSEFMX1hUMjAwMF9TRFJBTV9SRUdJT05TCi0KLQotCi0vKgotICogIEJ1c0xvZ2ljIChGUEdBKSByZWdpc3RlcnMuCi0gKiAgQWxsIHRoZXNlIHJlZ2lzdGVycyBhcmUgbm9ybWFsbHkgYWNjZXNzZWQgdXNpbmcgMzItYml0IGxvYWRzL3N0b3Jlcy4KLSAqLwotCi0vKiAgUmVnaXN0ZXIgb2Zmc2V0czogICovCi0jZGVmaW5lIFhUMjAwMF9EQVRFQ0RfT0ZTCTB4MDAJLyogZGF0ZSBjb2RlIChyZWFkLW9ubHkpICovCi0jZGVmaW5lIFhUMjAwMF9TVFNSRUdfT0ZTCTB4MDQJLyogc3RhdHVzIChyZWFkLW9ubHkpICovCi0jZGVmaW5lIFhUMjAwMF9TWVNMRURfT0ZTCTB4MDgJLyogc3lzdGVtIExFRCAqLwotI2RlZmluZSBYVDIwMDBfV1JQUk9UX09GUwkweDBDCS8qIHdyaXRlIHByb3RlY3QgKi8KLSNkZWZpbmUgWFQyMDAwX1NXUlNUX09GUwkweDEwCS8qIHNvZnR3YXJlIHJlc2V0ICovCi0jZGVmaW5lIFhUMjAwMF9TWVNSU1RfT0ZTCTB4MTQJLyogc3lzdGVtIChwZXJpcGhlcmFscykgcmVzZXQgKi8KLSNkZWZpbmUgWFQyMDAwX0lNQVNLX09GUwkweDE4CS8qIGludGVycnVwdCBtYXNrICovCi0jZGVmaW5lIFhUMjAwMF9JU1RBVF9PRlMJMHgxQwkvKiBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lIFhUMjAwMF9WM0NGR19PRlMJMHgyMAkvKiBWMyBjb25maWcgKFYzMjAgUENJKSAqLwotCi0vKiAgUGh5c2ljYWwgcmVnaXN0ZXIgYWRkcmVzc2VzOiAgKi8KLSNpZmRlZiBYVDIwMDBfRlBHQVJFR1NfUEFERFIKLSNkZWZpbmUgWFQyMDAwX0RBVEVDRF9QQUREUgkoWFQyMDAwX0ZQR0FSRUdTX1BBRERSK1hUMjAwMF9EQVRFQ0RfT0ZTKQotI2RlZmluZSBYVDIwMDBfU1RTUkVHX1BBRERSCShYVDIwMDBfRlBHQVJFR1NfUEFERFIrWFQyMDAwX1NUU1JFR19PRlMpCi0jZGVmaW5lIFhUMjAwMF9TWVNMRURfUEFERFIJKFhUMjAwMF9GUEdBUkVHU19QQUREUitYVDIwMDBfU1lTTEVEX09GUykKLSNkZWZpbmUgWFQyMDAwX1dSUFJPVF9QQUREUgkoWFQyMDAwX0ZQR0FSRUdTX1BBRERSK1hUMjAwMF9XUlBST1RfT0ZTKQotI2RlZmluZSBYVDIwMDBfU1dSU1RfUEFERFIJKFhUMjAwMF9GUEdBUkVHU19QQUREUitYVDIwMDBfU1dSU1RfT0ZTKQotI2RlZmluZSBYVDIwMDBfU1lTUlNUX1BBRERSCShYVDIwMDBfRlBHQVJFR1NfUEFERFIrWFQyMDAwX1NZU1JTVF9PRlMpCi0jZGVmaW5lIFhUMjAwMF9JTUFTS19QQUREUgkoWFQyMDAwX0ZQR0FSRUdTX1BBRERSK1hUMjAwMF9JTUFTS19PRlMpCi0jZGVmaW5lIFhUMjAwMF9JU1RBVF9QQUREUgkoWFQyMDAwX0ZQR0FSRUdTX1BBRERSK1hUMjAwMF9JU1RBVF9PRlMpCi0jZGVmaW5lIFhUMjAwMF9WM0NGR19QQUREUgkoWFQyMDAwX0ZQR0FSRUdTX1BBRERSK1hUMjAwMF9WM0NGR19PRlMpCi0jZW5kaWYKLQotLyogIFZpcnR1YWwgcmVnaXN0ZXIgYWRkcmVzc2VzOiAgKi8KLSNpZmRlZiBYVDIwMDBfRlBHQVJFR1NfVkFERFIKLSNkZWZpbmUgWFQyMDAwX0RBVEVDRF9WQUREUgkoWFQyMDAwX0ZQR0FSRUdTX1ZBRERSK1hUMjAwMF9EQVRFQ0RfT0ZTKQotI2RlZmluZSBYVDIwMDBfU1RTUkVHX1ZBRERSCShYVDIwMDBfRlBHQVJFR1NfVkFERFIrWFQyMDAwX1NUU1JFR19PRlMpCi0jZGVmaW5lIFhUMjAwMF9TWVNMRURfVkFERFIJKFhUMjAwMF9GUEdBUkVHU19WQUREUitYVDIwMDBfU1lTTEVEX09GUykKLSNkZWZpbmUgWFQyMDAwX1dSUFJPVF9WQUREUgkoWFQyMDAwX0ZQR0FSRUdTX1ZBRERSK1hUMjAwMF9XUlBST1RfT0ZTKQotI2RlZmluZSBYVDIwMDBfU1dSU1RfVkFERFIJKFhUMjAwMF9GUEdBUkVHU19WQUREUitYVDIwMDBfU1dSU1RfT0ZTKQotI2RlZmluZSBYVDIwMDBfU1lTUlNUX1ZBRERSCShYVDIwMDBfRlBHQVJFR1NfVkFERFIrWFQyMDAwX1NZU1JTVF9PRlMpCi0jZGVmaW5lIFhUMjAwMF9JTUFTS19WQUREUgkoWFQyMDAwX0ZQR0FSRUdTX1ZBRERSK1hUMjAwMF9JTUFTS19PRlMpCi0jZGVmaW5lIFhUMjAwMF9JU1RBVF9WQUREUgkoWFQyMDAwX0ZQR0FSRUdTX1ZBRERSK1hUMjAwMF9JU1RBVF9PRlMpCi0jZGVmaW5lIFhUMjAwMF9WM0NGR19WQUREUgkoWFQyMDAwX0ZQR0FSRUdTX1ZBRERSK1hUMjAwMF9WM0NGR19PRlMpCi0vKiAgUmVnaXN0ZXIgYWNjZXNzIChmb3IgQyBjb2RlKTogICovCi0jZGVmaW5lIFhUMjAwMF9EQVRFQ0RfUkVHCSgqKHZvbGF0aWxlIHVuc2lnbmVkKikgWFQyMDAwX0RBVEVDRF9WQUREUikKLSNkZWZpbmUgWFQyMDAwX1NUU1JFR19SRUcJKCoodm9sYXRpbGUgdW5zaWduZWQqKSBYVDIwMDBfU1RTUkVHX1ZBRERSKQotI2RlZmluZSBYVDIwMDBfU1lTTEVEX1JFRwkoKih2b2xhdGlsZSB1bnNpZ25lZCopIFhUMjAwMF9TWVNMRURfVkFERFIpCi0jZGVmaW5lIFhUMjAwMF9XUlBST1RfUkVHCSgqKHZvbGF0aWxlIHVuc2lnbmVkKikgWFQyMDAwX1dSUFJPVF9WQUREUikKLSNkZWZpbmUgWFQyMDAwX1NXUlNUX1JFRwkoKih2b2xhdGlsZSB1bnNpZ25lZCopIFhUMjAwMF9TV1JTVF9WQUREUikKLSNkZWZpbmUgWFQyMDAwX1NZU1JTVF9SRUcJKCoodm9sYXRpbGUgdW5zaWduZWQqKSBYVDIwMDBfU1lTUlNUX1ZBRERSKQotI2RlZmluZSBYVDIwMDBfSU1BU0tfUkVHCSgqKHZvbGF0aWxlIHVuc2lnbmVkKikgWFQyMDAwX0lNQVNLX1ZBRERSKQotI2RlZmluZSBYVDIwMDBfSVNUQVRfUkVHCSgqKHZvbGF0aWxlIHVuc2lnbmVkKikgWFQyMDAwX0lTVEFUX1ZBRERSKQotI2RlZmluZSBYVDIwMDBfVjNDRkdfUkVHCSgqKHZvbGF0aWxlIHVuc2lnbmVkKikgWFQyMDAwX1YzQ0ZHX1ZBRERSKQotI2VuZGlmCi0KLS8qICBEQVRFQ0QgKGRhdGUgY29kZSkgYml0IGZpZWxkczogICovCi0KLS8qICBCQ0QtY29kZWQgbW9udGggKDAxLi4xMik6ICAqLwotI2RlZmluZSBYVDIwMDBfREFURUNEX01PTlRIX1NISUZUCTI0Ci0jZGVmaW5lIFhUMjAwMF9EQVRFQ0RfTU9OVEhfQklUUwk4Ci0jZGVmaW5lIFhUMjAwMF9EQVRFQ0RfTU9OVEhfTUFTSwkweEZGMDAwMDAwCi0vKiAgQkNELWNvZGVkIGRheSAoMDEuLjMxKTogICovCi0jZGVmaW5lIFhUMjAwMF9EQVRFQ0RfREFZX1NISUZUCQkxNgotI2RlZmluZSBYVDIwMDBfREFURUNEX0RBWV9CSVRTCQk4Ci0jZGVmaW5lIFhUMjAwMF9EQVRFQ0RfREFZX01BU0sJCTB4MDBGRjAwMDAKLS8qICBCQ0QtY29kZWQgeWVhciAoMjAwMS4uOTk5OSk6ICAqLwotI2RlZmluZSBYVDIwMDBfREFURUNEX1lFQVJfU0hJRlQJMAotI2RlZmluZSBYVDIwMDBfREFURUNEX1lFQVJfQklUUwkJMTYKLSNkZWZpbmUgWFQyMDAwX0RBVEVDRF9ZRUFSX01BU0sJCTB4MDAwMEZGRkYKLQotLyogIFNUU1JFRyAoc3RhdHVzKSBiaXQgZmllbGRzOiAgKi8KLQotLyogIFN3aXRjaCBTVzMgc2V0dGluZyBiaXQgZmllbGRzICgwPW9mZi91cCwgMT1vbi9kb3duKTogICovCi0jZGVmaW5lIFhUMjAwMF9TVFNSRUdfU1czX1NISUZUCQkwCi0jZGVmaW5lIFhUMjAwMF9TVFNSRUdfU1czX0JJVFMJCTQKLSNkZWZpbmUgWFQyMDAwX1NUU1JFR19TVzNfTUFTSwkJMHgwMDAwMDAwRgotLyogIEJvb3Qtc2VsZWN0IGJpdHMgb2Ygc3dpdGNoIFNXMzogICovCi0jZGVmaW5lIFhUMjAwMF9TVFNSRUdfQk9PVFNFTF9TSElGVAkwCi0jZGVmaW5lIFhUMjAwMF9TVFNSRUdfQk9PVFNFTF9CSVRTCTIKLSNkZWZpbmUgWFQyMDAwX1NUU1JFR19CT09UU0VMX01BU0sJMHgwMDAwMDAwMwotLyogIEJvb3Qtc2VsZWN0IHZhbHVlczogICovCi0jZGVmaW5lIFhUMjAwMF9TVFNSRUdfQk9PVFNFTF9GTEFTSAkwCi0jZGVmaW5lIFhUMjAwMF9TVFNSRUdfQk9PVFNFTF9FUFJPTTE2CTEKLSNkZWZpbmUgWFQyMDAwX1NUU1JFR19CT09UU0VMX1BST004CTIKLSNkZWZpbmUgWFQyMDAwX1NUU1JFR19CT09UU0VMX0FTUkFNCTMKLS8qICBVc2VyLWRlZmluZWQgYml0cyBvZiBzd2l0Y2ggU1czOiAgKi8KLSNkZWZpbmUgWFQyMDAwX1NUU1JFR19TVzNfMl9TSElGVAkyCi0jZGVmaW5lIFhUMjAwMF9TVFNSRUdfU1czXzJfTUFTSwkweDAwMDAwMDA0Ci0jZGVmaW5lIFhUMjAwMF9TVFNSRUdfU1czXzNfU0hJRlQJMwotI2RlZmluZSBYVDIwMDBfU1RTUkVHX1NXM18zX01BU0sJMHgwMDAwMDAwOAotCi0vKiAgU1lTTEVEIChzeXN0ZW0gTEVEKSBiaXQgZmllbGRzOiAgKi8KLQotLyogIExFRCBjb250cm9sIGJpdCAoMD1vZmYsIDE9b24pOiAgKi8KLSNkZWZpbmUgWFQyMDAwX1NZU0xFRF9MRURPTl9TSElGVAkwCi0jZGVmaW5lIFhUMjAwMF9TWVNMRURfTEVET05fTUFTSwkweDAwMDAwMDAxCi0KLS8qICBXUlBST1QgKHdyaXRlIHByb3RlY3QpIGJpdCBmaWVsZHMgKDA9d3JpdGFibGUsIDE9d3JpdGUtcHJvdGVjdGVkIFtkZWZhdWx0XSk6ICAqLwotCi0vKiAgRmxhc2ggd3JpdGUgcHJvdGVjdDogICovCi0jZGVmaW5lIFhUMjAwMF9XUlBST1RfRkxXUF9TSElGVAkwCi0jZGVmaW5lIFhUMjAwMF9XUlBST1RfRkxXUF9NQVNLCQkweDAwMDAwMDAxCi0vKiAgUmVzZXJ2ZWQgYnV0IHByZXNlbnQgd3JpdGUgcHJvdGVjdCBiaXRzOiAgKi8KLSNkZWZpbmUgWFQyMDAwX1dSUFJPVF9XUlBfU0hJRlQJCTEKLSNkZWZpbmUgWFQyMDAwX1dSUFJPVF9XUlBfQklUUwkJNwotI2RlZmluZSBYVDIwMDBfV1JQUk9UX1dSUF9NQVNLCQkweDAwMDAwMEZFCi0KLS8qICBTV1JTVCAoc29mdHdhcmUgcmVzZXQ7IGFsbG93cyBzL3cgdG8gZ2VuZXJhdGUgcG93ZXItb24gZXF1aXZhbGVudCByZXNldCk6ICAqLwotCi0vKiAgU29mdHdhcmUgcmVzZXQgYml0czogICovCi0jZGVmaW5lIFhUMjAwMF9TV1JTVF9TV1JfU0hJRlQJCTAKLSNkZWZpbmUgWFQyMDAwX1NXUlNUX1NXUl9CSVRTCQkxNgotI2RlZmluZSBYVDIwMDBfU1dSU1RfU1dSX01BU0sJCTB4MDAwMEZGRkYKLS8qICBTb2Z0d2FyZSByZXNldCB2YWx1ZSAtLSB3cml0aW5nIHRoaXMgdmFsdWUgcmVzZXRzIHRoZSBib2FyZDogICovCi0jZGVmaW5lIFhUMjAwMF9TV1JTVF9SRVNFVFZBTFVFCQkweDAwMDBERUFECi0KLS8qICBTWVNSU1QgKHN5c3RlbSByZXNldDsgY29udHJvbHMgcmVzZXQgb2YgaW5kaXZpZHVhbCBwZXJpcGhlcmFscyk6ICAqLwotCi0vKiAgQWxsLWRldmljZSByZXNldDogICovCi0jZGVmaW5lIFhUMjAwMF9TWVNSU1RfQUxMX1NISUZUCQkwCi0jZGVmaW5lIFhUMjAwMF9TWVNSU1RfQUxMX0JJVFMJCTQKLSNkZWZpbmUgWFQyMDAwX1NZU1JTVF9BTExfTUFTSwkJMHgwMDAwMDAwRgotLyogIEhEU1AtMjUzNCBMRUQgZGlzcGxheSByZXNldCAoMT1yZXNldCwgMD1ub3RoaW5nKTogICovCi0jZGVmaW5lIFhUMjAwMF9TWVNSU1RfTEVEX1NISUZUCQkwCi0jZGVmaW5lIFhUMjAwMF9TWVNSU1RfTEVEX01BU0sJCTB4MDAwMDAwMDEKLS8qICBTb25pYyBEUDgzOTM0IEV0aGVybmV0IGNvbnRyb2xsZXIgcmVzZXQgKDE9cmVzZXQsIDA9bm90aGluZyk6ICAqLwotI2RlZmluZSBYVDIwMDBfU1lTUlNUX1NPTklDX1NISUZUCTEKLSNkZWZpbmUgWFQyMDAwX1NZU1JTVF9TT05JQ19NQVNLCTB4MDAwMDAwMDIKLS8qICBEUDE2NTUyIERVQVJUIHJlc2V0ICgxPXJlc2V0LCAwPW5vdGhpbmcpOiAgKi8KLSNkZWZpbmUgWFQyMDAwX1NZU1JTVF9EVUFSVF9TSElGVAkyCi0jZGVmaW5lIFhUMjAwMF9TWVNSU1RfRFVBUlRfTUFTSwkweDAwMDAwMDA0Ci0vKiAgVjMgVjMyMCBQQ0kgYnJpZGdlIGNvbnRyb2xsZXIgcmVzZXQgKDE9cmVzZXQsIDA9bm90aGluZyk6ICAqLwotI2RlZmluZSBYVDIwMDBfU1lTUlNUX1YzX1NISUZUCQkzCi0jZGVmaW5lIFhUMjAwMF9TWVNSU1RfVjNfTUFTSwkJMHgwMDAwMDAwOAotCi0vKiAgSU1BU0sgKGludGVycnVwdCBtYXNrOyAwPWRpc2FibGUsIDE9ZW5hYmxlKTogICovCi0vKiAgSVNUQVQgKGludGVycnVwdCBzdGF0dXM7IDA9aW5hY3RpdmUsIDE9cGVuZGluZyk6ICAqLwotCi0vKiAgUENJIElOVFAgaW50ZXJydXB0OiAgKi8KLSNkZWZpbmUgWFQyMDAwX0lOVE1VWF9QQ0lfSU5UUF9TSElGVAkyCi0jZGVmaW5lIFhUMjAwMF9JTlRNVVhfUENJX0lOVFBfTUFTSwkweDAwMDAwMDA0Ci0vKiAgUENJIElOVFMgaW50ZXJydXB0OiAgKi8KLSNkZWZpbmUgWFQyMDAwX0lOVE1VWF9QQ0lfSU5UU19TSElGVAkzCi0jZGVmaW5lIFhUMjAwMF9JTlRNVVhfUENJX0lOVFNfTUFTSwkweDAwMDAwMDA4Ci0vKiAgUENJIElOVEQgaW50ZXJydXB0OiAgKi8KLSNkZWZpbmUgWFQyMDAwX0lOVE1VWF9QQ0lfSU5URF9TSElGVAk0Ci0jZGVmaW5lIFhUMjAwMF9JTlRNVVhfUENJX0lOVERfTUFTSwkweDAwMDAwMDEwCi0vKiAgVjMyMCBQQ0kgY29udHJvbGxlciBpbnRlcnJ1cHQ6ICAqLwotI2RlZmluZSBYVDIwMDBfSU5UTVVYX1YzX1NISUZUCQk1Ci0jZGVmaW5lIFhUMjAwMF9JTlRNVVhfVjNfTUFTSwkJMHgwMDAwMDAyMAotLyogIFBDSSBFTlVNIGludGVycnVwdDogICovCi0jZGVmaW5lIFhUMjAwMF9JTlRNVVhfUENJX0VOVU1fU0hJRlQJNgotI2RlZmluZSBYVDIwMDBfSU5UTVVYX1BDSV9FTlVNX01BU0sJMHgwMDAwMDA0MAotLyogIFBDSSBERUcgaW50ZXJydXB0OiAgKi8KLSNkZWZpbmUgWFQyMDAwX0lOVE1VWF9QQ0lfREVHX1NISUZUCTcKLSNkZWZpbmUgWFQyMDAwX0lOVE1VWF9QQ0lfREVHX01BU0sJMHgwMDAwMDA4MAotCi0vKiAgVjNDRkcgKFYzIGNvbmZpZywgVjMyMCBQQ0kgY29udHJvbGxlcik6ICAqLwotCi0vKiAgVjMgYWRkcmVzcyBjb250cm9sICgwPXBhc3MtdGhydSwgMT1WMyBhZGRyZXNzIGJpdHMgMzE6Mjggc2V0IHRvIDQnYjAwMDEgW2RlZmF1bHRdKTogICovCi0jZGVmaW5lIFhUMjAwMF9WM0NGR19WM0FEQ19TSElGVAkwCi0jZGVmaW5lIFhUMjAwMF9WM0NGR19WM0FEQ19NQVNLCQkweDAwMDAwMDAxCi0KLS8qIEkyQyBEZXZpY2VzICovCi0KLSNkZWZpbmUJWFQyMDAwX0kyQ19SVENfSUQJCTB4NjgKLSNkZWZpbmUJWFQyMDAwX0kyQ19OVlJBTTBfSUQJCTB4NTYJLyogMXN0IDI1NiBieXRlIGJsb2NrICovCi0jZGVmaW5lCVhUMjAwMF9JMkNfTlZSQU0xX0lECQkweDU3CS8qIDJuZCAyNTYgYnl0ZSBibG9jayAqLwotCi0vKiAgTlZSQU0gQm9hcmQgSW5mbyBzdHJ1Y3R1cmU6ICAqLwotCi0jZGVmaW5lIFhUMjAwMF9OVlJBTV9TSVpFCQk1MTIKLQotI2RlZmluZSBYVDIwMDBfTlZSQU1fQklORk9fU1RBUlQJMHgxMDAKLSNkZWZpbmUgWFQyMDAwX05WUkFNX0JJTkZPX1NJWkUJCTB4MjAKLSNkZWZpbmUgWFQyMDAwX05WUkFNX0JJTkZPX1ZFUlNJT04JMHgxMAkvKiB2ZXJzaW9uIDEuMCAqLwotI2lmIDAKLSNkZWZpbmUgWFQyMDAwX05WUkFNX0JJTkZPX1ZFUlNJT05fT0ZGU0VUCTB4MDAKLSNkZWZpbmUgWFQyMDAwX05WUkFNX0JJTkZPX1ZFUlNJT05fU0laRQkJCTB4MQotI2RlZmluZSBYVDIwMDBfTlZSQU1fQklORk9fRVRIX0FERFJfT0ZGU0VUCTB4MDIKLSNkZWZpbmUgWFQyMDAwX05WUkFNX0JJTkZPX0VUSF9BRERSX1NJWkUJCTB4NgotI2RlZmluZSBYVDIwMDBfTlZSQU1fQklORk9fU05fT0ZGU0VUCQkweDEwCi0jZGVmaW5lIFhUMjAwMF9OVlJBTV9CSU5GT19TTl9TSVpFCQkJMHhFCi0jZGVmaW5lCVhUMjAwMF9OVlJBTV9CSU5GT19DUkNfT0ZGU0VUCQkweDFFCi0jZGVmaW5lCVhUMjAwMF9OVlJBTV9CSU5GT19DUkNfU0laRQkJCTB4MgotI2VuZGlmIC8qMCovCi0KLSNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmICFkZWZpbmVkKF9OT0NMQU5HVUFHRSkKLXR5cGVkZWYgc3RydWN0IHh0MjAwMF9udnJhbV9iaW5mbyB7Ci0gICAgdW5zaWduZWQgY2hhcgl2ZXJzaW9uOwotICAgIHVuc2lnbmVkIGNoYXIJcmVzZXJ2ZWQxOwotICAgIHVuc2lnbmVkIGNoYXIJZXRoX2FkZHJbNl07Ci0gICAgdW5zaWduZWQgY2hhcglyZXNlcnZlZDhbOF07Ci0gICAgdW5zaWduZWQgY2hhcglzZXJpYWxub1sxNF07Ci0gICAgdW5zaWduZWQgY2hhcgljcmNbMl07CQkvKiAxNi1iaXQgQ1JDICovCi19IHh0MjAwMF9udnJhbV9iaW5mbzsKLSNlbmRpZiAvKiFfX0FTU0VNQkxZX18gJiYgIV9OT0NMQU5HVUFHRSovCi0KLQotI2VuZGlmIC8qX0lOQ19YVDIwMDBfSF8qLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EveHRlbnNhL3h0Ym9hcmQuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EveHRib2FyZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjQ2OWMxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS94dGVuc2EveHRib2FyZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLSNpZm5kZWYgX3h0Ym9hcmRfaF9pbmNsdWRlZF8KLSNkZWZpbmUgX3h0Ym9hcmRfaF9pbmNsdWRlZF8KLQotLyoKLSAqIFRISVMgRklMRSBJUyBHRU5FUkFURUQgLS0gRE8gTk9UIE1PRElGWSBCWSBIQU5ECi0gKgotICogIHh0Ym9hcmQuaCAgLS0gIFJvdXRpbmVzIGZvciBnZXR0aW5nIHVzZWZ1bCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBib2FyZC4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgVGVuc2lsaWNhIEluYy4KLSAqLwotCi0KLSNpbmNsdWRlIDx4dGVuc2EveHQyMDAwLmg+Ci0KLSNkZWZpbmUJWFRCT0FSRF9SVENfRVJST1IJLTEKLSNkZWZpbmUJWFRCT0FSRF9SVENfU1RPUFBFRAktMgotCi0KLS8qICB4dDIwMDAtaTJjZGV2LmM6ICAqLwotdHlwZWRlZiB2b2lkIFh0Ym9hcmREZWxheUZ1bmMoIHVuc2lnbmVkICk7Ci1leHRlcm4gWHRib2FyZERlbGF5RnVuYyogeHRib2FyZF9zZXRfbnNkZWxheV9mdW5jKCBYdGJvYXJkRGVsYXlGdW5jICpkZWxheV9mbiApOwotZXh0ZXJuIGludCB4dGJvYXJkX2kyY19yZWFkICh1bnNpZ25lZCBpZCwgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBhZGRyLCB1bnNpZ25lZCBzaXplKTsKLWV4dGVybiBpbnQgeHRib2FyZF9pMmNfd3JpdGUodW5zaWduZWQgaWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgYWRkciwgdW5zaWduZWQgc2l6ZSk7Ci1leHRlcm4gaW50IHh0Ym9hcmRfaTJjX3dhaXRfbnZyYW1fYWNrKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBzd3RpbWVyKTsKLQotLyogIHh0Ym9hcmQuYzogICovCi1leHRlcm4gaW50IHh0Ym9hcmRfbnZyYW1fcmVhZCAodW5zaWduZWQgYWRkciwgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjaGFyICpidWYpOwotZXh0ZXJuIGludCB4dGJvYXJkX252cmFtX3dyaXRlKHVuc2lnbmVkIGFkZHIsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgY2hhciAqYnVmKTsKLWV4dGVybiBpbnQgeHRib2FyZF9udnJhbV9iaW5mb19yZWFkICh4dDIwMDBfbnZyYW1fYmluZm8gKmJ1Zik7Ci1leHRlcm4gaW50IHh0Ym9hcmRfbnZyYW1fYmluZm9fd3JpdGUoeHQyMDAwX252cmFtX2JpbmZvICpidWYpOwotZXh0ZXJuIGludCB4dGJvYXJkX252cmFtX2JpbmZvX3ZhbGlkKHh0MjAwMF9udnJhbV9iaW5mbyAqYnVmKTsKLWV4dGVybiBpbnQgeHRib2FyZF9ldGhlcm1hY19nZXQodW5zaWduZWQgY2hhciAqYnVmKTsKLWV4dGVybiBpbnQgeHRib2FyZF9ldGhlcm1hY19zZXQodW5zaWduZWQgY2hhciAqYnVmKTsKLQotLyorKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8gRnVuY3Rpb246IHh0Ym9hcmRfZ2V0X3J0Y190aW1lCi0vCi0vIERlc2NyaXB0aW9uOiAgR2V0IHRpbWUgc3RvcmVkIGluIHJlYWwtdGltZSBjbG9jay4KLS8KLS8gUmV0dXJuczogdGltZSBpbiBzZWNvbmRzIHN0b3JlZCBpbiByZWFsLXRpbWUgY2xvY2suCi0vLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLWV4dGVybiB1bnNpZ25lZCB4dGJvYXJkX2dldF9ydGNfdGltZSh2b2lkKTsKLQotLyorKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8gRnVuY3Rpb246IHh0Ym9hcmRfc2V0X3J0Y190aW1lCi0vCi0vIERlc2NyaXB0aW9uOiAgU2V0IHRpbWUgc3RvcmVkIGluIHJlYWwtdGltZSBjbG9jay4KLS8KLS8gUGFyYW1ldGVyczogCXRpbWUgLS0gdGltZSBpbiBzZWNvbmRzIHRvIHN0b3JlIHRvIHJlYWwtdGltZSBjbG9jawotLwotLyBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIHh0Ym9hcmRfaTJjX3dyaXRlKCkgZXJyb3IgY29kZSBvdGhlcndpc2UuCi0vLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLWV4dGVybiBpbnQgeHRib2FyZF9zZXRfcnRjX3RpbWUodW5zaWduZWQgdGltZSk7Ci0KLQotLyogIHh0ZnJlcS5jOiAgKi8KLS8qKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vIEZ1bmN0aW9uOiB4dGJvYXJkX21lYXN1cmVfc3lzX2NsawotLwotLyBEZXNjcmlwdGlvbjogIEdldCBmcmVxdWVuY3kgb2Ygc3lzdGVtIGNsb2NrLgotLwotLyBQYXJhbWV0ZXJzOglub25lCi0vCi0vIFJldHVybnM6IGZyZXF1ZW5jeSBvZiBzeXN0ZW0gY2xvY2suCi0vLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLWV4dGVybiB1bnNpZ25lZCB4dGJvYXJkX21lYXN1cmVfc3lzX2Nsayh2b2lkKTsKLQotCi0jaWYgMAkvKiBvbGQgc3R1ZmYgZnJvbSB4dGJvYXJkLmM6ICovCi0KLS8qKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vIEZ1bmN0aW9uOiB4dGJvYXJkX252cmFtIHZhbGlkCi0vCi0vIERlc2NyaXB0aW9uOiAgRGV0ZXJtaW5lcyBpZiBkYXRhIGluIE5WUkFNIGlzIHZhbGlkLgotLwotLyBQYXJhbWV0ZXJzOglkZWxheSAtLSAxMHVzIGRlbGF5IGZ1bmN0aW9uCi0vCi0vIFJldHVybnM6IDEgaWYgTlZSQU0gaXMgdmFsaWQsIDAgb3RoZXJ3aXNlCi0vLSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLWV4dGVybiB1bnNpZ25lZCB4dGJvYXJkX252cmFtX3ZhbGlkKHZvaWQgKCpkZWxheSkoIHZvaWQgKSk7Ci0KLS8qKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vIEZ1bmN0aW9uOiB4dGJvYXJkX2dldF9udnJhbV9jb250ZW50cwotLwotLyBEZXNjcmlwdGlvbjogIFJldHVybnMgY29udGVudHMgb2YgTlZSQU0uCi0vCi0vIFBhcmFtZXRlcnM6IAlidWYgLS0gYnVmZmVyIHRvIE5WUkFNIGNvbnRlbnRzLgotLwkJZGVsYXkgLS0gMTB1cyBkZWxheSBmdW5jdGlvbgotLwotLyBSZXR1cm5zOiAxIGlmIE5WUkFNIGlzIHZhbGlkLCAwIG90aGVyd2lzZQotLy0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1leHRlcm4gdW5zaWduZWQgeHRib2FyZF9nZXRfbnZyYW1fY29udGVudHModW5zaWduZWQgY2hhciAqYnVmLCB2b2lkICgqZGVsYXkpKCB2b2lkICkpOwotCi0vKisqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLyBGdW5jdGlvbjogeHRib2FyZF9nZXRfZXRoZXJfYWRkcgotLwotLyBEZXNjcmlwdGlvbjogIFJldHVybnMgZXRoZXJuZXQgYWRkcmVzcyBvZiBib2FyZC4KLS8KLS8gUGFyYW1ldGVyczogCWJ1ZiAtLSBidWZmZXIgdG8gc3RvcmUgZXRoZXJuZXQgYWRkcmVzcwotLwkJZGVsYXkgLS0gMTB1cyBkZWxheSBmdW5jdGlvbgotLwotLyBSZXR1cm5zOiBub3RoaW5nLgotLy0qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1leHRlcm4gdm9pZCB4dGJvYXJkX2dldF9ldGhlcl9hZGRyKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgdm9pZCAoKmRlbGF5KSggdm9pZCApKTsKLQotI2VuZGlmIC8qMCovCi0KLQotI2VuZGlmIC8qX3h0Ym9hcmRfaF9pbmNsdWRlZF8qLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IGU2MThiMjUuLjE1N2RiNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC02MSw3ICs2MSw2IEBACiBoZWFkZXIteSArPSBmZHJlZy5oCiBoZWFkZXIteSArPSBmaWJfcnVsZXMuaAogaGVhZGVyLXkgKz0gZnVzZS5oCi1oZWFkZXIteSArPSBmdXRleC5oCiBoZWFkZXIteSArPSBnZW5ldGxpbmsuaAogaGVhZGVyLXkgKz0gZ2VuX3N0YXRzLmgKIGhlYWRlci15ICs9IGdpZ2FzZXRfZGV2LmgKQEAgLTcwLDcgKzY5LDYgQEAKIGhlYWRlci15ICs9IGkyYy1kZXYuaAogaGVhZGVyLXkgKz0gaThrLmgKIGhlYWRlci15ICs9IGljbXAuaAotaGVhZGVyLXkgKz0gaWZfYWRkci5oCiBoZWFkZXIteSArPSBpZl9hcmNuZXQuaAogaGVhZGVyLXkgKz0gaWZfYXJwLmgKIGhlYWRlci15ICs9IGlmX2JvbmRpbmcuaApAQCAtODAsNyArNzgsNiBAQAogaGVhZGVyLXkgKz0gaWYuaAogaGVhZGVyLXkgKz0gaWZfaGlwcGkuaAogaGVhZGVyLXkgKz0gaWZfaW5maW5pYmFuZC5oCi1oZWFkZXIteSArPSBpZl9saW5rLmgKIGhlYWRlci15ICs9IGlmX3BhY2tldC5oCiBoZWFkZXIteSArPSBpZl9wbGlwLmgKIGhlYWRlci15ICs9IGlmX3BwcC5oCkBAIC0xMjAsNyArMTE3LDYgQEAKIGhlYWRlci15ICs9IG5mc19tb3VudC5oCiBoZWFkZXIteSArPSBvb20uaAogaGVhZGVyLXkgKz0gcGFyYW0uaAotaGVhZGVyLXkgKz0gcGNpX2lkcy5oCiBoZWFkZXIteSArPSBwY2lfcmVncy5oCiBoZWFkZXIteSArPSBwZXJzb25hbGl0eS5oCiBoZWFkZXIteSArPSBwZmtleXYyLmgKQEAgLTEzMSw3ICsxMjcsNiBAQAogaGVhZGVyLXkgKz0gcHBkZXYuaAogaGVhZGVyLXkgKz0gcHJjdGwuaAogaGVhZGVyLXkgKz0gcHMyZXNkaS5oCi1oZWFkZXIteSArPSBxaWMxMTcuaAogaGVhZGVyLXkgKz0gcW54dHlwZXMuaAogaGVhZGVyLXkgKz0gcXVvdGFpb192MS5oCiBoZWFkZXIteSArPSBxdW90YWlvX3YyLmgKQEAgLTEzOSw3ICsxMzQsNiBAQAogaGVhZGVyLXkgKz0gcmF3LmgKIGhlYWRlci15ICs9IHJlc291cmNlLmgKIGhlYWRlci15ICs9IHJvc2UuaAotaGVhZGVyLXkgKz0gc2N0cC5oCiBoZWFkZXIteSArPSBzbWJuby5oCiBoZWFkZXIteSArPSBzbm1wLmgKIGhlYWRlci15ICs9IHNvY2tpb3MuaApAQCAtMTYzLDcgKzE1Nyw2IEBACiBoZWFkZXIteSArPSB3aXJlbGVzcy5oCiBoZWFkZXIteSArPSB4YXR0ci5oCiBoZWFkZXIteSArPSB4MjUuaAotaGVhZGVyLXkgKz0gem9ycm9faWRzLmgKIAogdW5pZmRlZi15ICs9IGFjY3QuaAogdW5pZmRlZi15ICs9IGFkYi5oCkBAIC0yMDMsNiArMTk2LDcgQEAKIHVuaWZkZWYteSArPSBmY250bC5oCiB1bmlmZGVmLXkgKz0gZmlsdGVyLmgKIHVuaWZkZWYteSArPSBmbGF0LmgKK3VuaWZkZWYteSArPSBmdXRleC5oCiB1bmlmZGVmLXkgKz0gZnMuaAogdW5pZmRlZi15ICs9IGdhbWVwb3J0LmgKIHVuaWZkZWYteSArPSBnZW5lcmljX3NlcmlhbC5oCkBAIC0yMTcsNiArMjExLDcgQEAKIHVuaWZkZWYteSArPSBpMmMuaAogdW5pZmRlZi15ICs9IGkyby1kZXYuaAogdW5pZmRlZi15ICs9IGljbXB2Ni5oCit1bmlmZGVmLXkgKz0gaWZfYWRkci5oCiB1bmlmZGVmLXkgKz0gaWZfYnJpZGdlLmgKIHVuaWZkZWYteSArPSBpZl9lYy5oCiB1bmlmZGVmLXkgKz0gaWZfZXFsLmgKQEAgLTIyNCw2ICsyMTksNyBAQAogdW5pZmRlZi15ICs9IGlmX2ZkZGkuaAogdW5pZmRlZi15ICs9IGlmX2ZyYWQuaAogdW5pZmRlZi15ICs9IGlmX2x0YWxrLmgKK3VuaWZkZWYteSArPSBpZl9saW5rLmgKIHVuaWZkZWYteSArPSBpZl9wcHBveC5oCiB1bmlmZGVmLXkgKz0gaWZfc2hhcGVyLmgKIHVuaWZkZWYteSArPSBpZl90ci5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IDJiMGM5NTUuLjkxZjFmMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC00Nyw2ICs0Nyw3IEBACiAJQUNQSV9JUlFfTU9ERUxfUElDID0gMCwKIAlBQ1BJX0lSUV9NT0RFTF9JT0FQSUMsCiAJQUNQSV9JUlFfTU9ERUxfSU9TQVBJQywKKwlBQ1BJX0lSUV9NT0RFTF9QTEFURk9STSwKIAlBQ1BJX0lSUV9NT0RFTF9DT1VOVAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9haW8uaCBiL2luY2x1ZGUvbGludXgvYWlvLmgKaW5kZXggMzM3MmVjNi4uYTMwZWYxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9haW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Fpby5oCkBAIC0xMDUsNiArMTA1LDcgQEAKIAl3YWl0X3F1ZXVlX3QJCWtpX3dhaXQ7CiAJbG9mZl90CQkJa2lfcG9zOwogCisJYXRvbWljX3QJCWtpX2Jpb19jb3VudDsJLyogbnVtIGJpbyB1c2VkIGZvciB0aGlzIGlvY2IgKi8KIAl2b2lkCQkJKnByaXZhdGU7CiAJLyogU3RhdGUgdGhhdCB3ZSByZW1lbWJlciB0byBiZSBhYmxlIHRvIHJlc3RhcnQvcmV0cnkgICovCiAJdW5zaWduZWQgc2hvcnQJCWtpX29wY29kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCmluZGV4IDc1ZTkxZjUuLmE1Y2YxYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaApAQCAtNTQsNyArNTQsNyBAQAogfTsKIAogZXh0ZXJuIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCi0Jdm9pZCAqZGV2ZGF0YSwgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzICpicCk7CisJc3RydWN0IGRldmljZSAqZGV2LHZvaWQgKmRldmRhdGEsc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzICpicCk7CiBleHRlcm4gdm9pZCBiYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKTsKIAogI2RlZmluZSB0b19iYWNrbGlnaHRfZGV2aWNlKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UsIGNsYXNzX2RldikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IDA5MmRiZDAuLjA4ZGFmMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaApAQCAtMzA5LDYgKzMwOSw3IEBACiAJCQkJZ2ZwX3QpOwogZXh0ZXJuIHZvaWQgYmlvX3NldF9wYWdlc19kaXJ0eShzdHJ1Y3QgYmlvICpiaW8pOwogZXh0ZXJuIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbyk7CitleHRlcm4gdm9pZCBiaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8pOwogZXh0ZXJuIHN0cnVjdCBiaW8gKmJpb19jb3B5X3VzZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50LCBpbnQpOwogZXh0ZXJuIGludCBiaW9fdW5jb3B5X3VzZXIoc3RydWN0IGJpbyAqKTsKIHZvaWQgemVyb19maWxsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggNWQxZWFiYy4uNjM4MTY1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0zMSw5ICszMSw4IEBACiAJcmV0dXJuIHNpemVvZih3KSA9PSA0ID8gaHdlaWdodDMyKHcpIDogaHdlaWdodDY0KHcpOwogfQogCi0vKgorLyoqCiAgKiByb2wzMiAtIHJvdGF0ZSBhIDMyLWJpdCB2YWx1ZSBsZWZ0Ci0gKgogICogQHdvcmQ6IHZhbHVlIHRvIHJvdGF0ZQogICogQHNoaWZ0OiBiaXRzIHRvIHJvbGwKICAqLwpAQCAtNDIsOSArNDEsOCBAQAogCXJldHVybiAod29yZCA8PCBzaGlmdCkgfCAod29yZCA+PiAoMzIgLSBzaGlmdCkpOwogfQogCi0vKgorLyoqCiAgKiByb3IzMiAtIHJvdGF0ZSBhIDMyLWJpdCB2YWx1ZSByaWdodAotICoKICAqIEB3b3JkOiB2YWx1ZSB0byByb3RhdGUKICAqIEBzaGlmdDogYml0cyB0byByb2xsCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0cmV2LmggYi9pbmNsdWRlL2xpbnV4L2JpdHJldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTU0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdHJldi5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX0xJTlVYX0JJVFJFVl9ICisjZGVmaW5lIF9MSU5VWF9CSVRSRVZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIHU4IGNvbnN0IGJ5dGVfcmV2X3RhYmxlWzI1Nl07CisKK3N0YXRpYyBpbmxpbmUgdTggYml0cmV2OCh1OCBieXRlKQoreworCXJldHVybiBieXRlX3Jldl90YWJsZVtieXRlXTsKK30KKworZXh0ZXJuIHUzMiBiaXRyZXYzMih1MzIgaW4pOworCisjZW5kaWYgLyogX0xJTlVYX0JJVFJFVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCBlMWM3Mjg2Li4zNmE2ZWFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTMzMSwxMCArMzMxLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2VsZXZhdG9yLmg+CiAKLXR5cGVkZWYgaW50IChtZXJnZV9yZXF1ZXN0X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosCi0JCQkJc3RydWN0IGJpbyAqKTsKLXR5cGVkZWYgaW50IChtZXJnZV9yZXF1ZXN0c19mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAotCQkJCSBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgdm9pZCAocmVxdWVzdF9mbl9wcm9jKSAocmVxdWVzdF9xdWV1ZV90ICpxKTsKIHR5cGVkZWYgaW50IChtYWtlX3JlcXVlc3RfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBiaW8gKmJpbyk7CiB0eXBlZGVmIGludCAocHJlcF9ycV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKQEAgLTM0Miw3ICszMzgsNiBAQAogCiBzdHJ1Y3QgYmlvX3ZlYzsKIHR5cGVkZWYgaW50IChtZXJnZV9idmVjX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpb192ZWMgKik7Ci10eXBlZGVmIHZvaWQgKGFjdGl2aXR5X2ZuKSAodm9pZCAqZGF0YSwgaW50IHJ3KTsKIHR5cGVkZWYgaW50IChpc3N1ZV9mbHVzaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCBzZWN0b3JfdCAqKTsKIHR5cGVkZWYgdm9pZCAocHJlcGFyZV9mbHVzaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgdm9pZCAoc29mdGlycV9kb25lX2ZuKShzdHJ1Y3QgcmVxdWVzdCAqKTsKQEAgLTM3NywxNCArMzcyLDEwIEBACiAJc3RydWN0IHJlcXVlc3RfbGlzdAlycTsKIAogCXJlcXVlc3RfZm5fcHJvYwkJKnJlcXVlc3RfZm47Ci0JbWVyZ2VfcmVxdWVzdF9mbgkqYmFja19tZXJnZV9mbjsKLQltZXJnZV9yZXF1ZXN0X2ZuCSpmcm9udF9tZXJnZV9mbjsKLQltZXJnZV9yZXF1ZXN0c19mbgkqbWVyZ2VfcmVxdWVzdHNfZm47CiAJbWFrZV9yZXF1ZXN0X2ZuCQkqbWFrZV9yZXF1ZXN0X2ZuOwogCXByZXBfcnFfZm4JCSpwcmVwX3JxX2ZuOwogCXVucGx1Z19mbgkJKnVucGx1Z19mbjsKIAltZXJnZV9idmVjX2ZuCQkqbWVyZ2VfYnZlY19mbjsKLQlhY3Rpdml0eV9mbgkJKmFjdGl2aXR5X2ZuOwogCWlzc3VlX2ZsdXNoX2ZuCQkqaXNzdWVfZmx1c2hfZm47CiAJcHJlcGFyZV9mbHVzaF9mbgkqcHJlcGFyZV9mbHVzaF9mbjsKIAlzb2Z0aXJxX2RvbmVfZm4JCSpzb2Z0aXJxX2RvbmVfZm47CkBAIC00MTEsOCArNDAyLDYgQEAKIAkgKi8KIAl2b2lkCQkJKnF1ZXVlZGF0YTsKIAotCXZvaWQJCQkqYWN0aXZpdHlfZGF0YTsKLQogCS8qCiAJICogcXVldWUgbmVlZHMgYm91bmNlIHBhZ2VzIGZvciBwYWdlcyBhYm92ZSB0aGlzIGxpbWl0CiAJICovCkBAIC02NTMsNiArNjQyLDExIEBACiAJCXN0cnVjdCBnZW5kaXNrICosIHN0cnVjdCBzY3NpX2lvY3RsX2NvbW1hbmQgX191c2VyICopOwogCiAvKgorICogVGVtcG9yYXJ5IGV4cG9ydCwgdW50aWwgU0NTSSBnZXRzIGZpeGVkIHVwLgorICovCitleHRlcm4gaW50IGxsX2JhY2tfbWVyZ2VfZm4ocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHN0cnVjdCBiaW8gKik7CisKKy8qCiAgKiBBIHF1ZXVlIGhhcyBqdXN0IGV4aXR0ZWQgY29uZ2VzdGlvbi4gIE5vdGUgdGhpcyBpbiB0aGUgZ2xvYmFsIGNvdW50ZXIgb2YKICAqIGNvbmdlc3RlZCBxdWV1ZXMsIGFuZCB3YWtlIHVwIGFueW9uZSB3aG8gd2FzIHdhaXRpbmcgZm9yIHJlcXVlc3RzIHRvIGJlCiAgKiBwdXQgYmFjay4KQEAgLTY3Nyw5ICs2NzEsOCBAQAogZXh0ZXJuIHZvaWQgX19ibGtfc3RvcF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3J1bl9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKik7CiBleHRlcm4gdm9pZCBibGtfc3RhcnRfcXVldWVpbmcocmVxdWVzdF9xdWV1ZV90ICopOwotZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2FjdGl2aXR5X2ZuKHJlcXVlc3RfcXVldWVfdCAqLCBhY3Rpdml0eV9mbiAqLCB2b2lkICopOwogZXh0ZXJuIGludCBibGtfcnFfbWFwX3VzZXIocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIGludCBibGtfcnFfdW5tYXBfdXNlcihzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiBpbnQgYmxrX3JxX3VubWFwX3VzZXIoc3RydWN0IGJpbyAqKTsKIGV4dGVybiBpbnQgYmxrX3JxX21hcF9rZXJuKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB2b2lkICosIHVuc2lnbmVkIGludCwgZ2ZwX3QpOwogZXh0ZXJuIGludCBibGtfcnFfbWFwX3VzZXJfaW92KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAogCQkJICAgICAgIHN0cnVjdCBzZ19pb3ZlYyAqLCBpbnQsIHVuc2lnbmVkIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J1Zy5oIGIvaW5jbHVkZS9saW51eC9idWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmFhMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9idWcuaApAQCAtMCwwICsxLDQ3IEBACisjaWZuZGVmIF9MSU5VWF9CVUdfSAorI2RlZmluZSBfTElOVVhfQlVHX0gKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KKworZW51bSBidWdfdHJhcF90eXBlIHsKKwlCVUdfVFJBUF9UWVBFX05PTkUgPSAwLAorCUJVR19UUkFQX1RZUEVfV0FSTiA9IDEsCisJQlVHX1RSQVBfVFlQRV9CVUcgPSAyLAorfTsKKworI2lmZGVmIENPTkZJR19HRU5FUklDX0JVRworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorCitzdGF0aWMgaW5saW5lIGludCBpc193YXJuaW5nX2J1Zyhjb25zdCBzdHJ1Y3QgYnVnX2VudHJ5ICpidWcpCit7CisJcmV0dXJuIGJ1Zy0+ZmxhZ3MgJiBCVUdGTEFHX1dBUk5JTkc7Cit9CisKK2NvbnN0IHN0cnVjdCBidWdfZW50cnkgKmZpbmRfYnVnKHVuc2lnbmVkIGxvbmcgYnVnYWRkcik7CisKK2VudW0gYnVnX3RyYXBfdHlwZSByZXBvcnRfYnVnKHVuc2lnbmVkIGxvbmcgYnVnX2FkZHIpOworCitpbnQgIG1vZHVsZV9idWdfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKiwgY29uc3QgRWxmX1NoZHIgKiwKKwkJCSBzdHJ1Y3QgbW9kdWxlICopOwordm9pZCBtb2R1bGVfYnVnX2NsZWFudXAoc3RydWN0IG1vZHVsZSAqKTsKKworLyogVGhlc2UgYXJlIGRlZmluZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSAqLworaW50IGlzX3ZhbGlkX2J1Z2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKTsKKworI2Vsc2UJLyogIUNPTkZJR19HRU5FUklDX0JVRyAqLworCitzdGF0aWMgaW5saW5lIGVudW0gYnVnX3RyYXBfdHlwZSByZXBvcnRfYnVnKHVuc2lnbmVkIGxvbmcgYnVnX2FkZHIpCit7CisJcmV0dXJuIEJVR19UUkFQX1RZUEVfQlVHOworfQorc3RhdGljIGlubGluZSBpbnQgIG1vZHVsZV9idWdfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwKKwkJCQkJY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisJCQkJCXN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfYnVnX2NsZWFudXAoc3RydWN0IG1vZHVsZSAqbW9kKSB7fQorCisjZW5kaWYJLyogQ09ORklHX0dFTkVSSUNfQlVHICovCisjZW5kaWYJLyogX0xJTlVYX0JVR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NkZXYuaCBiL2luY2x1ZGUvbGludXgvY2Rldi5oCmluZGV4IGYzMDliMDAuLjFlMjliMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvY2Rldi5oCkBAIC02LDYgKzYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKK3N0cnVjdCBmaWxlX29wZXJhdGlvbnM7CitzdHJ1Y3QgaW5vZGU7CitzdHJ1Y3QgbW9kdWxlOworCiBzdHJ1Y3QgY2RldiB7CiAJc3RydWN0IGtvYmplY3Qga29iajsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCBkODUyMDI0Li4xNjIyZDIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC0xNTksNyArMTU5LDcgQEAKICAqIFVubGVzcyB5b3UncmUgdGhlIHRpbWVrZWVwaW5nIGNvZGUsIHlvdSBzaG91bGQgbm90IGJlIHVzaW5nIHRoaXMhCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjbG9ja3NvdXJjZV9jYWxjdWxhdGVfaW50ZXJ2YWwoc3RydWN0IGNsb2Nrc291cmNlICpjLAotCQkJCQkJdW5zaWduZWQgbG9uZyBsZW5ndGhfbnNlYykKKwkJCQkJICAJICB1bnNpZ25lZCBsb25nIGxlbmd0aF9uc2VjKQogewogCXU2NCB0bXA7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29kYV9saW51eC5oIGIvaW5jbHVkZS9saW51eC9jb2RhX2xpbnV4LmgKaW5kZXggYmU1MTJjYy4uNGMyNjMyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb2RhX2xpbnV4LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb2RhX2xpbnV4LmgKQEAgLTY0LDcgKzY0LDcgQEAKIAogI2RlZmluZSBDT0RBX0FMTE9DKHB0ciwgY2FzdCwgc2l6ZSkgZG8geyBcCiAgICAgaWYgKHNpemUgPCBQQUdFX1NJWkUpIFwKLSAgICAgICAgcHRyID0gKGNhc3Qpa21hbGxvYygodW5zaWduZWQgbG9uZykgc2l6ZSwgR0ZQX0tFUk5FTCk7IFwKKyAgICAgICAgcHRyID0ga21hbGxvYygodW5zaWduZWQgbG9uZykgc2l6ZSwgR0ZQX0tFUk5FTCk7IFwKICAgICBlbHNlIFwKICAgICAgICAgcHRyID0gKGNhc3Qpdm1hbGxvYygodW5zaWduZWQgbG9uZykgc2l6ZSk7IFwKICAgICBpZiAoIXB0cikgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCmluZGV4IDUzODQyM2QuLmFjYTY2OTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNlcnJvciBubyBjb21waWxlci1nY2MuaCBmaWxlIGZvciB0aGlzIGdjYyB2ZXJzaW9uCiAjZWxpZiBfX0dOVUNfXyA9PSA0CiAjIGluY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLWdjYzQuaD4KLSNlbGlmIF9fR05VQ19fID09IDMKKyNlbGlmIF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMgogIyBpbmNsdWRlIDxsaW51eC9jb21waWxlci1nY2MzLmg+CiAjZWxzZQogIyBlcnJvciBTb3JyeSwgeW91ciBjb21waWxlciBpcyB0b28gb2xkL25vdCByZWNvZ25pemVkLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25maWdmcy5oIGIvaW5jbHVkZS9saW51eC9jb25maWdmcy5oCmluZGV4IGE3ZjAxNTAuLmZlZjZmM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgKQEAgLTE2MCwzMSArMTYwLDYgQEAKIAl2b2lkICgqZHJvcF9pdGVtKShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTsKIH07CiAKLQotCi0vKioKLSAqIFVzZSB0aGVzZSBtYWNyb3MgdG8gbWFrZSBkZWZpbmluZyBhdHRyaWJ1dGVzIGVhc2llci4gU2VlIGluY2x1ZGUvbGludXgvZGV2aWNlLmgKLSAqIGZvciBleGFtcGxlcy4uCi0gKi8KLQotI2lmIDAKLSNkZWZpbmUgX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgeyBcCi0JLmF0dHIgPSB7LmNhX25hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5jYV9tb2RlID0gX21vZGUsIC5jYV9vd25lciA9IFRISVNfTU9EVUxFIH0sCVwKLQkuc2hvdwk9IF9zaG93LAkJCQkJXAotCS5zdG9yZQk9IF9zdG9yZSwJCQkJCVwKLX0KLQotI2RlZmluZSBfX0FUVFJfUk8oX25hbWUpIHsgXAotCS5hdHRyCT0geyAuY2FfbmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLmNhX21vZGUgPSAwNDQ0LCAuY2Ffb3duZXIgPSBUSElTX01PRFVMRSB9LAlcCi0JLnNob3cJPSBfbmFtZSMjX3Nob3csCVwKLX0KLQotI2RlZmluZSBfX0FUVFJfTlVMTCB7IC5hdHRyID0geyAubmFtZSA9IE5VTEwgfSB9Ci0KLSNkZWZpbmUgYXR0cl9uYW1lKF9hdHRyKSAoX2F0dHIpLmF0dHIubmFtZQotI2VuZGlmCi0KLQogc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSB7CiAJc3RydWN0IGNvbmZpZ19ncm91cAlzdV9ncm91cDsKIAlzdHJ1Y3Qgc2VtYXBob3JlCXN1X3NlbTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IDNlYTFjZDUuLjEwZWI1NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMTMzLDcgKzEzMyw3IEBACiBzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgewogCXN0cnVjdCBsaXN0X2hlYWQgY2FsbGJhY2tfZW50cnk7CiAJc3RydWN0IGNuX2NhbGxiYWNrICpjYjsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGNuX3F1ZXVlX2RldiAqcGRldjsKIAogCXN0cnVjdCBjbl9jYWxsYmFja19pZCBpZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKaW5kZXggNGVhMzlmZS4uN2YwMDhmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVmcmVxLmgKQEAgLTE3Miw2ICsxNzIsOCBAQAogCQkJCSAgIHVuc2lnbmVkIGludCByZWxhdGlvbik7CiAKIAorZXh0ZXJuIGludCBjcHVmcmVxX2RyaXZlcl9nZXRhdmcoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworCiBpbnQgY3B1ZnJlcV9yZWdpc3Rlcl9nb3Zlcm5vcihzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqZ292ZXJub3IpOwogdm9pZCBjcHVmcmVxX3VucmVnaXN0ZXJfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKmdvdmVybm9yKTsKIApAQCAtMjA0LDYgKzIwNiw3IEBACiAJdW5zaWduZWQgaW50CSgqZ2V0KQkodW5zaWduZWQgaW50IGNwdSk7CiAKIAkvKiBvcHRpb25hbCAqLworCXVuc2lnbmVkIGludCAoKmdldGF2ZykJKHVuc2lnbmVkIGludCBjcHUpOwogCWludAkoKmV4aXQpCQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOwogCWludAkoKnN1c3BlbmQpCShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgcG1fbWVzc2FnZV90IHBtc2cpOwogCWludAkoKnJlc3VtZSkJKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1c2V0LmggYi9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCmluZGV4IDg4MjFlMWYuLmZkNDA0NDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVzZXQuaApAQCAtMzAsMTAgKzMwLDE5IEBACiAJCW5vZGVzX3N1YnNldCgobm9kZXMpLCBjdXJyZW50LT5tZW1zX2FsbG93ZWQpCiBpbnQgY3B1c2V0X3pvbmVsaXN0X3ZhbGlkX21lbXNfYWxsb3dlZChzdHJ1Y3Qgem9uZWxpc3QgKnpsKTsKIAotZXh0ZXJuIGludCBfX2NwdXNldF96b25lX2FsbG93ZWQoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKTsKLXN0YXRpYyBpbnQgaW5saW5lIGNwdXNldF96b25lX2FsbG93ZWQoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQorZXh0ZXJuIGludCBfX2NwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKTsKK2V4dGVybiBpbnQgX19jcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHN0cnVjdCB6b25lICp6LCBnZnBfdCBnZnBfbWFzayk7CisKK3N0YXRpYyBpbnQgaW5saW5lIGNwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQogewotCXJldHVybiBudW1iZXJfb2ZfY3B1c2V0cyA8PSAxIHx8IF9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6LCBnZnBfbWFzayk7CisJcmV0dXJuIG51bWJlcl9vZl9jcHVzZXRzIDw9IDEgfHwKKwkJX19jcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKHosIGdmcF9tYXNrKTsKK30KKworc3RhdGljIGludCBpbmxpbmUgY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIG51bWJlcl9vZl9jcHVzZXRzIDw9IDEgfHwKKwkJX19jcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHosIGdmcF9tYXNrKTsKIH0KIAogZXh0ZXJuIGludCBjcHVzZXRfZXhjbF9ub2Rlc19vdmVybGFwKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CkBAIC00Niw3ICs1NSw3IEBACiBleHRlcm4gaW50IGNwdXNldF9tZW1vcnlfcHJlc3N1cmVfZW5hYmxlZDsKIGV4dGVybiB2b2lkIF9fY3B1c2V0X21lbW9yeV9wcmVzc3VyZV9idW1wKHZvaWQpOwogCi1leHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NwdXNldF9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jcHVzZXRfb3BlcmF0aW9uczsKIGV4dGVybiBjaGFyICpjcHVzZXRfdGFza19zdGF0dXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlcik7CiAKIGV4dGVybiB2b2lkIGNwdXNldF9sb2NrKHZvaWQpOwpAQCAtOTQsNyArMTAzLDEyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNwdXNldF96b25lX2FsbG93ZWQoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQogewogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmMzMi5oIGIvaW5jbHVkZS9saW51eC9jcmMzMi5oCmluZGV4IDU2YzA2NDUuLmUyMGRkMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JjMzIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyYzMyLmgKQEAgLTYsMTAgKzYsMTAgQEAKICNkZWZpbmUgX0xJTlVYX0NSQzMyX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CiAKIGV4dGVybiB1MzIgIGNyYzMyX2xlKHUzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pOwogZXh0ZXJuIHUzMiAgY3JjMzJfYmUodTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbik7Ci1leHRlcm4gdTMyICBiaXRyZXZlcnNlKHUzMiBpbik7CiAKICNkZWZpbmUgY3JjMzIoc2VlZCwgZGF0YSwgbGVuZ3RoKSAgY3JjMzJfbGUoc2VlZCwgKHVuc2lnbmVkIGNoYXIgY29uc3QgKilkYXRhLCBsZW5ndGgpCiAKQEAgLTIxLDcgKzIxLDcgQEAKICAqIGlzIGluIGJpdCBuciAwXSwgdGh1cyBpdCBtdXN0IGJlIHJldmVyc2VkIGJlZm9yZSB1c2UuIEV4Y2VwdCBmb3IKICAqIG5pY3MgdGhhdCBiaXQgc3dhcCB0aGUgcmVzdWx0IGludGVybmFsbHkuLi4KICAqLwotI2RlZmluZSBldGhlcl9jcmMobGVuZ3RoLCBkYXRhKSAgICBiaXRyZXZlcnNlKGNyYzMyX2xlKH4wLCBkYXRhLCBsZW5ndGgpKQorI2RlZmluZSBldGhlcl9jcmMobGVuZ3RoLCBkYXRhKSAgICBiaXRyZXYzMihjcmMzMl9sZSh+MCwgZGF0YSwgbGVuZ3RoKSkKICNkZWZpbmUgZXRoZXJfY3JjX2xlKGxlbmd0aCwgZGF0YSkgY3JjMzJfbGUofjAsIGRhdGEsIGxlbmd0aCkKIAogI2VuZGlmIC8qIF9MSU5VWF9DUkMzMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjY3AuaCBiL2luY2x1ZGUvbGludXgvZGNjcC5oCmluZGV4IGVkNmNjODkuLjFjYjA1NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNjcC5oCkBAIC0xNzYsMjAgKzE3NiwyMCBAQAogfTsKIAogLyogRENDUCBmZWF0dXJlcyAoUkZDIDQzNDAgc2VjdGlvbiA2LjQpICovCi0gZW51bSB7Ci0gCURDQ1BGX1JFU0VSVkVEID0gMCwKLSAJRENDUEZfQ0NJRCA9IDEsCitlbnVtIHsKKwlEQ0NQRl9SRVNFUlZFRCA9IDAsCisJRENDUEZfQ0NJRCA9IDEsCiAJRENDUEZfU0hPUlRfU0VRTk9TID0gMiwJCS8qIFhYWDogbm90IHlldCBpbXBsZW1lbnRlZCAqLwotIAlEQ0NQRl9TRVFVRU5DRV9XSU5ET1cgPSAzLAorCURDQ1BGX1NFUVVFTkNFX1dJTkRPVyA9IDMsCiAJRENDUEZfRUNOX0lOQ0FQQUJMRSA9IDQsCS8qIFhYWDogbm90IHlldCBpbXBsZW1lbnRlZCAqLwotIAlEQ0NQRl9BQ0tfUkFUSU8gPSA1LAotIAlEQ0NQRl9TRU5EX0FDS19WRUNUT1IgPSA2LAotIAlEQ0NQRl9TRU5EX05EUF9DT1VOVCA9IDcsCisJRENDUEZfQUNLX1JBVElPID0gNSwKKwlEQ0NQRl9TRU5EX0FDS19WRUNUT1IgPSA2LAorCURDQ1BGX1NFTkRfTkRQX0NPVU5UID0gNywKIAlEQ0NQRl9NSU5fQ1NVTV9DT1ZFUiA9IDgsCiAJRENDUEZfREFUQV9DSEVDS1NVTSA9IDksCS8qIFhYWDogbm90IHlldCBpbXBsZW1lbnRlZCAqLwotIAkvKiAxMC0xMjcgcmVzZXJ2ZWQgKi8KLSAJRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMgPSAxMjgsCi0gCURDQ1BGX01BWF9DQ0lEX1NQRUNJRklDID0gMjU1LAorCS8qIDEwLTEyNyByZXNlcnZlZCAqLworCURDQ1BGX01JTl9DQ0lEX1NQRUNJRklDID0gMTI4LAorCURDQ1BGX01BWF9DQ0lEX1NQRUNJRklDID0gMjU1LAogfTsKIAogLyogdGhpcyBzdHJ1Y3R1cmUgaXMgYXJndW1lbnQgdG8gRENDUF9TT0NLT1BUX0NIQU5HRV9YICovCkBAIC00MjcsNyArNDI3LDcgQEAKIH07CiAKICNkZWZpbmUgRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUUgaHRvbmwoKF9fdTMyKS0xKQotI2RlZmluZSBEQ0NQX1NFUlZJQ0VfQ09ERV9JU19BQlNFTlQgCQkgMAorI2RlZmluZSBEQ0NQX1NFUlZJQ0VfQ09ERV9JU19BQlNFTlQJCTAKIAogc3RhdGljIGlubGluZSBpbnQgZGNjcF9saXN0X2hhc19zZXJ2aWNlKGNvbnN0IHN0cnVjdCBkY2NwX3NlcnZpY2VfbGlzdCAqc2wsCiAJCQkJCWNvbnN0IF9fYmUzMiBzZXJ2aWNlKQpAQCAtNDM2LDcgKzQzNiw3IEBACiAJCXUzMiBpID0gc2wtPmRjY3BzbF9ucjsKIAkJd2hpbGUgKGktLSkKIAkJCWlmIChzbC0+ZGNjcHNsX2xpc3RbaV0gPT0gc2VydmljZSkKLQkJCQlyZXR1cm4gMTsgCisJCQkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTExLDcgKzUxMSw3IEBACiAJX191OAkJCQlkY2Nwc19oY190eF9pbnNlcnRfb3B0aW9uczoxOwogCXN0cnVjdCB0aW1lcl9saXN0CQlkY2Nwc194bWl0X3RpbWVyOwogfTsKLSAKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNjcF9zb2NrICpkY2NwX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKIAlyZXR1cm4gKHN0cnVjdCBkY2NwX3NvY2sgKilzazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGVidWdfbG9ja3MuaCBiL2luY2x1ZGUvbGludXgvZGVidWdfbG9ja3MuaAppbmRleCBhMWMxMGIwLi4xNjc4YTVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RlYnVnX2xvY2tzLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZWJ1Z19sb2Nrcy5oCkBAIC0yNCw3ICsyNCw3IEBACiAJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAogCQkJCQkJCQkJXAogCWlmICh1bmxpa2VseShjKSkgewkJCQkJCVwKLQkJaWYgKGRlYnVnX2xvY2tzX3NpbGVudCB8fCBkZWJ1Z19sb2Nrc19vZmYoKSkJCVwKKwkJaWYgKGRlYnVnX2xvY2tzX29mZigpICYmICFkZWJ1Z19sb2Nrc19zaWxlbnQpCQlcCiAJCQlXQVJOX09OKDEpOwkJCQkJXAogCQlfX3JldCA9IDE7CQkJCQkJXAogCX0JCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKaW5kZXggMDNlZjQxYy4uNDk5ZjUzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKQEAgLTM5LDcgKzM5LDggQEAKICAqIFRoZSBtYXAgZnVuY3Rpb24gbXVzdCByZXR1cm46CiAgKiA8IDA6IGVycm9yCiAgKiA9IDA6IFRoZSB0YXJnZXQgd2lsbCBoYW5kbGUgdGhlIGlvIGJ5IHJlc3VibWl0dGluZyBpdCBsYXRlcgotICogPiAwOiBzaW1wbGUgcmVtYXAgY29tcGxldGUKKyAqID0gMTogc2ltcGxlIHJlbWFwIGNvbXBsZXRlCisgKiA9IDI6IFRoZSB0YXJnZXQgd2FudHMgdG8gcHVzaCBiYWNrIHRoZSBpbwogICovCiB0eXBlZGVmIGludCAoKmRtX21hcF9mbikgKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8sCiAJCQkgIHVuaW9uIG1hcF9pbmZvICptYXBfY29udGV4dCk7CkBAIC01MCw2ICs1MSw3IEBACiAgKiAwICAgOiBlbmRlZCBzdWNjZXNzZnVsbHkKICAqIDEgICA6IGZvciBzb21lIHJlYXNvbiB0aGUgaW8gaGFzIHN0aWxsIG5vdCBjb21wbGV0ZWQgKGVnLAogICogICAgICAgbXVsdGlwYXRoIHRhcmdldCBtaWdodCB3YW50IHRvIHJlcXVldWUgYSBmYWlsZWQgaW8pLgorICogMiAgIDogVGhlIHRhcmdldCB3YW50cyB0byBwdXNoIGJhY2sgdGhlIGlvCiAgKi8KIHR5cGVkZWYgaW50ICgqZG1fZW5kaW9fZm4pIChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwKIAkJCSAgICBzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnJvciwKQEAgLTE3Myw3ICsxNzUsNyBAQAogLyoKICAqIEEgZGV2aWNlIGNhbiBzdGlsbCBiZSB1c2VkIHdoaWxlIHN1c3BlbmRlZCwgYnV0IEkvTyBpcyBkZWZlcnJlZC4KICAqLwotaW50IGRtX3N1c3BlbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBpbnQgd2l0aF9sb2NrZnMpOworaW50IGRtX3N1c3BlbmQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCB1bnNpZ25lZCBzdXNwZW5kX2ZsYWdzKTsKIGludCBkbV9yZXN1bWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKIAogLyoKQEAgLTE4OCw2ICsxOTAsNyBAQAogY29uc3QgY2hhciAqZG1fZGV2aWNlX25hbWUoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKIHN0cnVjdCBnZW5kaXNrICpkbV9kaXNrKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7CiBpbnQgZG1fc3VzcGVuZGVkKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7CitpbnQgZG1fbm9mbHVzaF9zdXNwZW5kaW5nKHN0cnVjdCBkbV90YXJnZXQgKnRpKTsKIAogLyoKICAqIEdlb21ldHJ5IGZ1bmN0aW9ucy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDQ5YWI1M2MuLmY0NDI0N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtNDMzLDYgKzQzMyw4IEBACiAJcmV0dXJuIGRldi0+aXNfcmVnaXN0ZXJlZDsKIH0KIAordm9pZCBkcml2ZXJfaW5pdCh2b2lkKTsKKwogLyoKICAqIEhpZ2ggbGV2ZWwgcm91dGluZXMgZm9yIHVzZSBieSB0aGUgYnVzIGRyaXZlcnMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCmluZGV4IDg4NTNmYzQuLmI5MzQ4NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTI4NSw5ICsyODUsOSBAQAogI2RlZmluZSBETV9ERVZfU0VUX0dFT01FVFJZCV9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU0VUX0dFT01FVFJZX0NNRCwgc3RydWN0IGRtX2lvY3RsKQogCiAjZGVmaW5lIERNX1ZFUlNJT05fTUFKT1IJNAotI2RlZmluZSBETV9WRVJTSU9OX01JTk9SCTEwCisjZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IJMTEKICNkZWZpbmUgRE1fVkVSU0lPTl9QQVRDSExFVkVMCTAKLSNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDA2LTA5LTE0KSIKKyNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDA2LTEwLTEyKSIKIAogLyogU3RhdHVzIGJpdHMgKi8KICNkZWZpbmUgRE1fUkVBRE9OTFlfRkxBRwkoMSA8PCAwKSAvKiBJbi9PdXQgKi8KQEAgLTMyMyw0ICszMjMsOSBAQAogICovCiAjZGVmaW5lIERNX1NLSVBfTE9DS0ZTX0ZMQUcJKDEgPDwgMTApIC8qIEluICovCiAKKy8qCisgKiBTZXQgdGhpcyB0byBzdXNwZW5kIHdpdGhvdXQgZmx1c2hpbmcgcXVldWVkIGlvcy4KKyAqLworI2RlZmluZSBETV9OT0ZMVVNIX0ZMQUcJCSgxIDw8IDExKSAvKiBJbiAqLworCiAjZW5kaWYJCQkJLyogX0xJTlVYX0RNX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IGRmMWM5MTguLmY4ZWJkN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtMzAxLDcgKzMwMSw3IEBACiBleHRlcm4gdm9pZCBlZmlfaW5pdGlhbGl6ZV9pb21lbV9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpjb2RlX3Jlc291cmNlLAogCQkJCQlzdHJ1Y3QgcmVzb3VyY2UgKmRhdGFfcmVzb3VyY2UpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZWZpX2dldF90aW1lKHZvaWQpOwotZXh0ZXJuIGludCBfX2luaXQgZWZpX3NldF9ydGNfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpOworZXh0ZXJuIGludCBlZmlfc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSk7CiBleHRlcm4gaW50IGlzX2F2YWlsYWJsZV9tZW1vcnkoZWZpX21lbW9yeV9kZXNjX3QgKiBtZCk7CiBleHRlcm4gc3RydWN0IGVmaV9tZW1vcnlfbWFwIG1lbW1hcDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oIGIvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oCmluZGV4IGEyNDkzMWQuLmU4OGZjYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKQEAgLTEyLDYgKzEyLDggQEAKIAogdHlwZWRlZiB2b2lkIChlbGV2YXRvcl9tZXJnZWRfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50KTsKIAordHlwZWRlZiBpbnQgKGVsZXZhdG9yX2FsbG93X21lcmdlX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHN0cnVjdCBiaW8gKik7CisKIHR5cGVkZWYgaW50IChlbGV2YXRvcl9kaXNwYXRjaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBpbnQpOwogCiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2FkZF9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CkBAIC0zMyw2ICszNSw3IEBACiAJZWxldmF0b3JfbWVyZ2VfZm4gKmVsZXZhdG9yX21lcmdlX2ZuOwogCWVsZXZhdG9yX21lcmdlZF9mbiAqZWxldmF0b3JfbWVyZ2VkX2ZuOwogCWVsZXZhdG9yX21lcmdlX3JlcV9mbiAqZWxldmF0b3JfbWVyZ2VfcmVxX2ZuOworCWVsZXZhdG9yX2FsbG93X21lcmdlX2ZuICplbGV2YXRvcl9hbGxvd19tZXJnZV9mbjsKIAogCWVsZXZhdG9yX2Rpc3BhdGNoX2ZuICplbGV2YXRvcl9kaXNwYXRjaF9mbjsKIAllbGV2YXRvcl9hZGRfcmVxX2ZuICplbGV2YXRvcl9hZGRfcmVxX2ZuOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYXVsdC1pbmplY3QuaCBiL2luY2x1ZGUvbGludXgvZmF1bHQtaW5qZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzNjhjNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZmF1bHQtaW5qZWN0LmgKQEAgLTAsMCArMSw4NCBAQAorI2lmbmRlZiBfTElOVVhfRkFVTFRfSU5KRUNUX0gKKyNkZWZpbmUgX0xJTlVYX0ZBVUxUX0lOSkVDVF9ICisKKyNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKy8qCisgKiBGb3IgZXhwbGFuYXRpb24gb2YgdGhlIGVsZW1lbnRzIG9mIHRoaXMgc3RydWN0LCBzZWUKKyAqIERvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhdWx0LWluamVjdGlvbi50eHQKKyAqLworc3RydWN0IGZhdWx0X2F0dHIgeworCXVuc2lnbmVkIGxvbmcgcHJvYmFiaWxpdHk7CisJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKKwlhdG9taWNfdCB0aW1lczsKKwlhdG9taWNfdCBzcGFjZTsKKwl1bnNpZ25lZCBsb25nIHZlcmJvc2U7CisJdTMyIHRhc2tfZmlsdGVyOworCXVuc2lnbmVkIGxvbmcgc3RhY2t0cmFjZV9kZXB0aDsKKwl1bnNpZ25lZCBsb25nIHJlcXVpcmVfc3RhcnQ7CisJdW5zaWduZWQgbG9uZyByZXF1aXJlX2VuZDsKKwl1bnNpZ25lZCBsb25nIHJlamVjdF9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHJlamVjdF9lbmQ7CisKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCisjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUworCisJc3RydWN0IHsKKwkJc3RydWN0IGRlbnRyeSAqZGlyOworCisJCXN0cnVjdCBkZW50cnkgKnByb2JhYmlsaXR5X2ZpbGU7CisJCXN0cnVjdCBkZW50cnkgKmludGVydmFsX2ZpbGU7CisJCXN0cnVjdCBkZW50cnkgKnRpbWVzX2ZpbGU7CisJCXN0cnVjdCBkZW50cnkgKnNwYWNlX2ZpbGU7CisJCXN0cnVjdCBkZW50cnkgKnZlcmJvc2VfZmlsZTsKKwkJc3RydWN0IGRlbnRyeSAqdGFza19maWx0ZXJfZmlsZTsKKwkJc3RydWN0IGRlbnRyeSAqc3RhY2t0cmFjZV9kZXB0aF9maWxlOworCQlzdHJ1Y3QgZGVudHJ5ICpyZXF1aXJlX3N0YXJ0X2ZpbGU7CisJCXN0cnVjdCBkZW50cnkgKnJlcXVpcmVfZW5kX2ZpbGU7CisJCXN0cnVjdCBkZW50cnkgKnJlamVjdF9zdGFydF9maWxlOworCQlzdHJ1Y3QgZGVudHJ5ICpyZWplY3RfZW5kX2ZpbGU7CisJfSBkZW50cmllczsKKworI2VuZGlmCit9OworCisjZGVmaW5lIEZBVUxUX0FUVFJfSU5JVElBTElaRVIgewkJCQlcCisJCS5pbnRlcnZhbCA9IDEsCQkJCQlcCisJCS50aW1lcyA9IEFUT01JQ19JTklUKDEpLAkJCVwKKwkJLnJlcXVpcmVfZW5kID0gVUxPTkdfTUFYLAkJCVwKKwkJLnN0YWNrdHJhY2VfZGVwdGggPSAzMiwJCQkJXAorCQkudmVyYm9zZSA9IDIsCQkJCQlcCisJfQorCisjZGVmaW5lIERFQ0xBUkVfRkFVTFRfQVRUUihuYW1lKSBzdHJ1Y3QgZmF1bHRfYXR0ciBuYW1lID0gRkFVTFRfQVRUUl9JTklUSUFMSVpFUgoraW50IHNldHVwX2ZhdWx0X2F0dHIoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIsIGNoYXIgKnN0cik7Cit2b2lkIHNob3VsZF9mYWlsX3NyYW5kb20odW5zaWduZWQgbG9uZyBlbnRyb3B5KTsKK2Jvb2wgc2hvdWxkX2ZhaWwoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIsIHNzaXplX3Qgc2l6ZSk7CisKKyNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTCisKK2ludCBpbml0X2ZhdWx0X2F0dHJfZGVudHJpZXMoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIsIGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBjbGVhbnVwX2ZhdWx0X2F0dHJfZGVudHJpZXMoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIpOworCisjZWxzZSAvKiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfZmF1bHRfYXR0cl9kZW50cmllcyhzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0ciwKKwkJCQkJICBjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW51cF9mYXVsdF9hdHRyX2RlbnRyaWVzKHN0cnVjdCBmYXVsdF9hdHRyICphdHRyKQoreworfQorCisjZW5kaWYgLyogQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUyAqLworCisjZW5kaWYgLyogQ09ORklHX0ZBVUxUX0lOSkVDVElPTiAqLworCisjZW5kaWYgLyogX0xJTlVYX0ZBVUxUX0lOSkVDVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggZmEyM2UwNi4uNjQxNzdlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtOTI5LDggKzkyOSw2IEBACiAjZGVmaW5lIEZCX01PREVfSVNfRklSU1QJMTYKICNkZWZpbmUgRkJfTU9ERV9JU19GUk9NX1ZBUiAgICAgMzIKIAotZXh0ZXJuIGludCBmYm1vbl92YWxpZF90aW1pbmdzKHVfaW50IHBpeGNsb2NrLCB1X2ludCBodG90YWwsIHVfaW50IHZ0b3RhbCwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CiBleHRlcm4gaW50IGZibW9uX2RwbXMoY29uc3Qgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwogZXh0ZXJuIGludCBmYl9nZXRfbW9kZShpbnQgZmxhZ3MsIHUzMiB2YWwsIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwpAQCAtOTcwLDExICs5NjgsMTEgQEAKIC8qIGRyaXZlcnMvdmlkZW8vZmJjbWFwLmMgKi8KIGV4dGVybiBpbnQgZmJfYWxsb2NfY21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgaW50IGxlbiwgaW50IHRyYW5zcCk7CiBleHRlcm4gdm9pZCBmYl9kZWFsbG9jX2NtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXApOwotZXh0ZXJuIGludCBmYl9jb3B5X2NtYXAoc3RydWN0IGZiX2NtYXAgKmZyb20sIHN0cnVjdCBmYl9jbWFwICp0byk7Ci1leHRlcm4gaW50IGZiX2NtYXBfdG9fdXNlcihzdHJ1Y3QgZmJfY21hcCAqZnJvbSwgc3RydWN0IGZiX2NtYXBfdXNlciAqdG8pOworZXh0ZXJuIGludCBmYl9jb3B5X2NtYXAoY29uc3Qgc3RydWN0IGZiX2NtYXAgKmZyb20sIHN0cnVjdCBmYl9jbWFwICp0byk7CitleHRlcm4gaW50IGZiX2NtYXBfdG9fdXNlcihjb25zdCBzdHJ1Y3QgZmJfY21hcCAqZnJvbSwgc3RydWN0IGZiX2NtYXBfdXNlciAqdG8pOwogZXh0ZXJuIGludCBmYl9zZXRfY21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwogZXh0ZXJuIGludCBmYl9zZXRfdXNlcl9jbWFwKHN0cnVjdCBmYl9jbWFwX3VzZXIgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLWV4dGVybiBzdHJ1Y3QgZmJfY21hcCAqZmJfZGVmYXVsdF9jbWFwKGludCBsZW4pOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmYl9jbWFwICpmYl9kZWZhdWx0X2NtYXAoaW50IGxlbik7CiBleHRlcm4gdm9pZCBmYl9pbnZlcnRfY21hcHModm9pZCk7CiAKIHN0cnVjdCBmYl92aWRlb21vZGUgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWxlLmggYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaAppbmRleCA2ZTc3YjkxLi5hNTkwMDFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaApAQCAtMjYsMTkgKzI2LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmZHNfYml0c1sxXTsKIH07CiAKLS8qCi0gKiBNb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgZmRzOiB3ZSB1c2UgYSBzZXBhcmF0ZWx5IGFsbG9jYXRlZCBmZF9zZXQKLSAqLwotI2RlZmluZSBFTUJFRERFRF9GRF9TRVRfU0laRSAoQklUU19QRVJfQllURSAqIHNpemVvZihzdHJ1Y3QgZW1iZWRkZWRfZmRfc2V0KSkKLQogc3RydWN0IGZkdGFibGUgewogCXVuc2lnbmVkIGludCBtYXhfZmRzOwotCWludCBtYXhfZmRzZXQ7CiAJc3RydWN0IGZpbGUgKiogZmQ7ICAgICAgLyogY3VycmVudCBmZCBhcnJheSAqLwogCWZkX3NldCAqY2xvc2Vfb25fZXhlYzsKIAlmZF9zZXQgKm9wZW5fZmRzOwogCXN0cnVjdCByY3VfaGVhZCByY3U7Ci0Jc3RydWN0IGZpbGVzX3N0cnVjdCAqZnJlZV9maWxlczsKIAlzdHJ1Y3QgZmR0YWJsZSAqbmV4dDsKIH07CiAKQEAgLTgzLDE2ICs3NiwxNSBAQAogZXh0ZXJuIHZvaWQgRkFTVENBTEwocHV0X3VudXNlZF9mZCh1bnNpZ25lZCBpbnQgZmQpKTsKIHN0cnVjdCBrbWVtX2NhY2hlOwogCi1leHRlcm4gc3RydWN0IGZpbGUgKiogYWxsb2NfZmRfYXJyYXkoaW50KTsKLWV4dGVybiB2b2lkIGZyZWVfZmRfYXJyYXkoc3RydWN0IGZpbGUgKiosIGludCk7Ci0KLWV4dGVybiBmZF9zZXQgKmFsbG9jX2Zkc2V0KGludCk7Ci1leHRlcm4gdm9pZCBmcmVlX2Zkc2V0KGZkX3NldCAqLCBpbnQpOwotCiBleHRlcm4gaW50IGV4cGFuZF9maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICosIGludCBucik7Ci1leHRlcm4gdm9pZCBmcmVlX2ZkdGFibGUoc3RydWN0IGZkdGFibGUgKmZkdCk7CitleHRlcm4gdm9pZCBmcmVlX2ZkdGFibGVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KTsKIGV4dGVybiB2b2lkIF9faW5pdCBmaWxlc19kZWZlcl9pbml0KHZvaWQpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9mZHRhYmxlKHN0cnVjdCBmZHRhYmxlICpmZHQpCit7CisJY2FsbF9yY3UoJmZkdC0+cmN1LCBmcmVlX2ZkdGFibGVfcmN1KTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqIGZjaGVja19maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgdW5zaWduZWQgaW50IGZkKQogewogCXN0cnVjdCBmaWxlICogZmlsZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaCBiL2luY2x1ZGUvbGludXgvZnJlZXplci5oCmluZGV4IDZlMDVlM2UuLjVlNzVlMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oCisrKyBiL2luY2x1ZGUvbGludXgvZnJlZXplci5oCkBAIC0xLDUgKzEsNyBAQAogLyogRnJlZXplciBkZWNsYXJhdGlvbnMgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKICNpZmRlZiBDT05GSUdfUE0KIC8qCiAgKiBDaGVjayBpZiBhIHByb2Nlc3MgaGFzIGJlZW4gZnJvemVuCkBAIC0xNCwxNiArMTYsMTUgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZnJlZXppbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXJldHVybiBwLT5mbGFncyAmIFBGX0ZSRUVaRTsKKwlyZXR1cm4gdGVzdF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX0ZSRUVaRSk7CiB9CiAKIC8qCiAgKiBSZXF1ZXN0IHRoYXQgYSBwcm9jZXNzIGJlIGZyb3plbgotICogRklYTUU6IFNNUCBwcm9ibGVtLiBXZSBtYXkgbm90IG1vZGlmeSBvdGhlciBwcm9jZXNzJyBmbGFncyEKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGZyZWV6ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JcC0+ZmxhZ3MgfD0gUEZfRlJFRVpFOworCXNldF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX0ZSRUVaRSk7CiB9CiAKIC8qCkBAIC0zMSw3ICszMiw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkb19ub3RfZnJlZXplKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlwLT5mbGFncyAmPSB+UEZfRlJFRVpFOworCWNsZWFyX3Rza190aHJlYWRfZmxhZyhwLCBUSUZfRlJFRVpFKTsKIH0KIAogLyoKQEAgLTUyLDcgKzUzLDkgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGZyb3plbl9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlwLT5mbGFncyA9IChwLT5mbGFncyAmIH5QRl9GUkVFWkUpIHwgUEZfRlJPWkVOOworCXAtPmZsYWdzIHw9IFBGX0ZST1pFTjsKKwl3bWIoKTsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcocCwgVElGX0ZSRUVaRSk7CiB9CiAKIGV4dGVybiB2b2lkIHJlZnJpZ2VyYXRvcih2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA3MGI5OWZiLi4xNDEwZTUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0xMjAsNiArMTIwLDcgQEAKICNkZWZpbmUgTVNfUFJJVkFURQkoMTw8MTgpCS8qIGNoYW5nZSB0byBwcml2YXRlICovCiAjZGVmaW5lIE1TX1NMQVZFCSgxPDwxOSkJLyogY2hhbmdlIHRvIHNsYXZlICovCiAjZGVmaW5lIE1TX1NIQVJFRAkoMTw8MjApCS8qIGNoYW5nZSB0byBzaGFyZWQgKi8KKyNkZWZpbmUgTVNfUkVMQVRJTUUJKDE8PDIxKQkvKiBVcGRhdGUgYXRpbWUgcmVsYXRpdmUgdG8gbXRpbWUvY3RpbWUuICovCiAjZGVmaW5lIE1TX0FDVElWRQkoMTw8MzApCiAjZGVmaW5lIE1TX05PVVNFUgkoMTw8MzEpCiAKQEAgLTI2OSw2ICsyNzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CkBAIC00MjQsNiArNDI2LDcgQEAKIAkvKiBtaWdyYXRlIHRoZSBjb250ZW50cyBvZiBhIHBhZ2UgdG8gdGhlIHNwZWNpZmllZCB0YXJnZXQgKi8KIAlpbnQgKCptaWdyYXRlcGFnZSkgKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosCiAJCQlzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKKwlpbnQgKCpsYXVuZGVyX3BhZ2UpIChzdHJ1Y3QgcGFnZSAqKTsKIH07CiAKIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvOwpAQCAtNDU2LDcgKzQ1OSw3IEBACiAJc3RydWN0IGlub2RlICoJCWJkX2lub2RlOwkvKiB3aWxsIGRpZSAqLwogCWludAkJCWJkX29wZW5lcnM7CiAJc3RydWN0IG11dGV4CQliZF9tdXRleDsJLyogb3Blbi9jbG9zZSBtdXRleCAqLwotCXN0cnVjdCBtdXRleAkJYmRfbW91bnRfbXV0ZXg7CS8qIG1vdW50IG11dGV4ICovCisJc3RydWN0IHNlbWFwaG9yZQliZF9tb3VudF9zZW07CiAJc3RydWN0IGxpc3RfaGVhZAliZF9pbm9kZXM7CiAJdm9pZCAqCQkJYmRfaG9sZGVyOwogCWludAkJCWJkX2hvbGRlcnM7CkBAIC00ODIsMjEgKzQ4NSw2IEBACiB9OwogCiAvKgotICogYmRldi0+YmRfbXV0ZXggbmVzdGluZyBzdWJjbGFzc2VzIGZvciB0aGUgbG9jayB2YWxpZGF0b3I6Ci0gKgotICogMDogbm9ybWFsCi0gKiAxOiAnd2hvbGUnCi0gKiAyOiAncGFydGl0aW9uJwotICovCi1lbnVtIGJkZXZfYmRfbXV0ZXhfbG9ja19jbGFzcwotewotCUJEX01VVEVYX05PUk1BTCwKLQlCRF9NVVRFWF9XSE9MRSwKLQlCRF9NVVRFWF9QQVJUSVRJT04KLX07Ci0KLQotLyoKICAqIFJhZGl4LXRyZWUgdGFncywgZm9yIHRhZ2dpbmcgZGlydHkgYW5kIHdyaXRlYmFjayBwYWdlcyB3aXRoaW4gdGhlIHBhZ2VjYWNoZQogICogcmFkaXggdHJlZXMKICAqLwpAQCAtNzI2LDggKzcxNCw5IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQJZnVfbGlzdDsKIAkJc3RydWN0IHJjdV9oZWFkIAlmdV9yY3VoZWFkOwogCX0gZl91OwotCXN0cnVjdCBkZW50cnkJCSpmX2RlbnRyeTsKLQlzdHJ1Y3QgdmZzbW91bnQgICAgICAgICAqZl92ZnNtbnQ7CisJc3RydWN0IHBhdGgJCWZfcGF0aDsKKyNkZWZpbmUgZl9kZW50cnkJZl9wYXRoLmRlbnRyeQorI2RlZmluZSBmX3Zmc21udAlmX3BhdGgubW50CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqZl9vcDsKIAlhdG9taWNfdAkJZl9jb3VudDsKIAl1bnNpZ25lZCBpbnQgCQlmX2ZsYWdzOwpAQCAtMTIzOSw3ICsxMjI4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxlX2FjY2Vzc2VkKHN0cnVjdCBmaWxlICpmaWxlKQogewogCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PQVRJTUUpKQotCQl0b3VjaF9hdGltZShmaWxlLT5mX3Zmc21udCwgZmlsZS0+Zl9kZW50cnkpOworCQl0b3VjaF9hdGltZShmaWxlLT5mX3BhdGgubW50LCBmaWxlLT5mX3BhdGguZGVudHJ5KTsKIH0KIAogaW50IHN5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwpAQCAtMTQ5OSw3ICsxNDg4LDYgQEAKIGV4dGVybiB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkIGJkcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiBleHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqb3Blbl9ieV9kZXZudW0oZGV2X3QsIHVuc2lnbmVkKTsKLWV4dGVybiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX3BhcnRpdGlvbl9ieV9kZXZudW0oZGV2X3QsIHVuc2lnbmVkKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGRlZl9ibGtfYW9wczsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYmRfZm9yZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpIHt9CkBAIC0xNTE3LDcgKzE1MDUsNiBAQAogZXh0ZXJuIGxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gaW50IGJsa2Rldl9nZXQoc3RydWN0IGJsb2NrX2RldmljZSAqLCBtb2RlX3QsIHVuc2lnbmVkKTsKIGV4dGVybiBpbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwotZXh0ZXJuIGludCBibGtkZXZfcHV0X3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogZXh0ZXJuIGludCBiZF9jbGFpbShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHZvaWQgKik7CiBleHRlcm4gdm9pZCBiZF9yZWxlYXNlKHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiAjaWZkZWYgQ09ORklHX1NZU0ZTCkBAIC0xNjMyLDcgKzE2MTksNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGFsbG93X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpZiAoZmlsZSkKLQkJYXRvbWljX2luYygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCk7CisJCWF0b21pY19pbmMoJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCk7CiB9CiBleHRlcm4gaW50IGRvX3BpcGUoaW50ICopOwogZXh0ZXJuIHN0cnVjdCBmaWxlICpjcmVhdGVfcmVhZF9waXBlKHN0cnVjdCBmaWxlICpmKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfc3RhY2suaCBiL2luY2x1ZGUvbGludXgvZnNfc3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjUxNmNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mc19zdGFjay5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgX0xJTlVYX0ZTX1NUQUNLX0gKKyNkZWZpbmUgX0xJTlVYX0ZTX1NUQUNLX0gKKworLyogVGhpcyBmaWxlIGRlZmluZXMgZ2VuZXJpYyBmdW5jdGlvbnMgdXNlZCBwcmltYXJpbHkgYnkgc3RhY2thYmxlCisgKiBmaWxlc3lzdGVtczsgbm9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgcmVxdWlyZSBpX211dGV4IHRvIGJlIGhlbGQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKKy8qIGV4dGVybnMgZm9yIGZzL3N0YWNrLmMgKi8KK2V4dGVybiB2b2lkIGZzc3RhY2tfY29weV9hdHRyX2FsbChzdHJ1Y3QgaW5vZGUgKmRlc3QsIGNvbnN0IHN0cnVjdCBpbm9kZSAqc3JjLAorCQkJCWludCAoKmdldF9ubGlua3MpKHN0cnVjdCBpbm9kZSAqKSk7CisKK2V4dGVybiB2b2lkIGZzc3RhY2tfY29weV9pbm9kZV9zaXplKHN0cnVjdCBpbm9kZSAqZHN0LCBjb25zdCBzdHJ1Y3QgaW5vZGUgKnNyYyk7CisKKy8qIGlubGluZXMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc3N0YWNrX2NvcHlfYXR0cl9hdGltZShzdHJ1Y3QgaW5vZGUgKmRlc3QsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqc3JjKQoreworCWRlc3QtPmlfYXRpbWUgPSBzcmMtPmlfYXRpbWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmc3N0YWNrX2NvcHlfYXR0cl90aW1lcyhzdHJ1Y3QgaW5vZGUgKmRlc3QsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqc3JjKQoreworCWRlc3QtPmlfYXRpbWUgPSBzcmMtPmlfYXRpbWU7CisJZGVzdC0+aV9tdGltZSA9IHNyYy0+aV9tdGltZTsKKwlkZXN0LT5pX2N0aW1lID0gc3JjLT5pX2N0aW1lOworfQorCisjZW5kaWYgLyogX0xJTlVYX0ZTX1NUQUNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaCBiL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaAppbmRleCAzZGEyOWUyLi5hYmI2NGM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIF9GU0xfREVWSUNFX0hfCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogCiAvKgogICogU29tZSBjb252ZW50aW9ucyBvbiBob3cgd2UgaGFuZGxlIHBlcmlwaGVyYWxzIG9uIEZyZWVzY2FsZSBjaGlwcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oIGIvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCmluZGV4IGQ0ZjIxOWYuLmRmYzRlNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKQEAgLTE2NCw3ICsxNjQsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwogCW1vZGVfdCBtb2RlID0gZmlsZS0+Zl9tb2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdXRleC5oIGIvaW5jbHVkZS9saW51eC9mdXRleC5oCmluZGV4IGQwOTdiNWIuLjNmMTUzYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKQEAgLTkzLDYgKzkzLDcgQEAKICAqLwogI2RlZmluZSBST0JVU1RfTElTVF9MSU1JVAkyMDQ4CiAKKyNpZmRlZiBfX0tFUk5FTF9fCiBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwKIAkgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7CiAKQEAgLTExMCw2ICsxMTEsNyBAQAogewogfQogI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZGVmaW5lIEZVVEVYX09QX1NFVAkJMAkvKiAqKGludCAqKVVBRERSMiA9IE9QQVJHOyAqLwogI2RlZmluZSBGVVRFWF9PUF9BREQJCTEJLyogKihpbnQgKilVQUREUjIgKz0gT1BBUkc7ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmggYi9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKaW5kZXggMmNkYmEwYy4uYWZhZDk1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaApAQCAtMTA1LDcgKzEwNSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydF9hbGxvY2F0ZV9wb3J0KHZvaWQpCiB7Ci0Jc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBnYW1lcG9ydCksIEdGUF9LRVJORUwpOworCXN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2FtZXBvcnQpLCBHRlBfS0VSTkVMKTsKIAogCXJldHVybiBnYW1lcG9ydDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuZXJpY19zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvZ2VuZXJpY19zZXJpYWwuaAppbmRleCBlMjUzODQ1Li41NDEyZGEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5lcmljX3NlcmlhbC5oCkBAIC05MSw3ICs5MSw3IEBACiBpbnQgIGdzX2Jsb2NrX3RpbF9yZWFkeSh2b2lkICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiB2b2lkIGdzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIHZvaWQgZ3Nfc2V0X3Rlcm1pb3MgKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCAKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0ZXJtaW9zICogb2xkX3Rlcm1pb3MpOworICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt0ZXJtaW9zICogb2xkX3Rlcm1pb3MpOwogaW50ICBnc19pbml0X3BvcnQoc3RydWN0IGdzX3BvcnQgKnBvcnQpOwogaW50ICBnc19zZXRzZXJpYWwoc3RydWN0IGdzX3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApOwogaW50ICBnc19nZXRzZXJpYWwoc3RydWN0IGdzX3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IDQxZjI3NmYuLjBhMDIyYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKQEAgLTgzLDYgKzgzLDkgQEAKIAlzdHJ1Y3Qga29iamVjdCAqaG9sZGVyX2RpcjsKIAl1bnNpZ25lZCBpb3NbMl0sIHNlY3RvcnNbMl07CS8qIFJFQURzIGFuZCBXUklURXMgKi8KIAlpbnQgcG9saWN5LCBwYXJ0bm87CisjaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUCisJaW50IG1ha2VfaXRfZmFpbDsKKyNlbmRpZgogfTsKIAogI2RlZmluZSBHRU5IRF9GTF9SRU1PVkFCTEUJCQkxCkBAIC05MCw2ICs5Myw3IEBACiAjZGVmaW5lIEdFTkhEX0ZMX0NECQkJCTgKICNkZWZpbmUgR0VOSERfRkxfVVAJCQkJMTYKICNkZWZpbmUgR0VOSERfRkxfU1VQUFJFU1NfUEFSVElUSU9OX0lORk8JMzIKKyNkZWZpbmUgR0VOSERfRkxfRkFJTAkJCQk2NAogCiBzdHJ1Y3QgZGlza19zdGF0cyB7CiAJdW5zaWduZWQgbG9uZyBzZWN0b3JzWzJdOwkvKiBSRUFEcyBhbmQgV1JJVEVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkcmVnLmggYi9pbmNsdWRlL2xpbnV4L2hkcmVnLmgKaW5kZXggMmI1NGVhYy4uODE4YzZhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZHJlZy5oCisrKyBiL2luY2x1ZGUvbGludXgvaGRyZWcuaApAQCAtNjAsMTMgKzYwLDE1IEBACiAjZGVmaW5lIFRBR19NQVNLCQkweGY4CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqIENvbW1hbmQgSGVhZGVyIHNpemVzIGZvciBJT0NUTCBjb21tYW5kcwogICovCiAKLSNkZWZpbmUgSERJT19EUklWRV9DTURfSERSX1NJWkUJCSg0ICogc2l6ZW9mKHU4KSkKLSNkZWZpbmUgSERJT19EUklWRV9IT0JfSERSX1NJWkUJCSg4ICogc2l6ZW9mKHU4KSkKLSNkZWZpbmUgSERJT19EUklWRV9UQVNLX0hEUl9TSVpFCSg4ICogc2l6ZW9mKHU4KSkKKyNkZWZpbmUgSERJT19EUklWRV9DTURfSERSX1NJWkUJCSg0ICogc2l6ZW9mKF9fdTgpKQorI2RlZmluZSBIRElPX0RSSVZFX0hPQl9IRFJfU0laRQkJKDggKiBzaXplb2YoX191OCkpCisjZGVmaW5lIEhESU9fRFJJVkVfVEFTS19IRFJfU0laRQkoOCAqIHNpemVvZihfX3U4KSkKIAogI2RlZmluZSBJREVfRFJJVkVfVEFTS19JTlZBTElECQktMQogI2RlZmluZSBJREVfRFJJVkVfVEFTS19OT19EQVRBCQkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZGVidWcuaCBiL2luY2x1ZGUvbGludXgvaGlkLWRlYnVnLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvaW5wdXQvaGlkLWRlYnVnLmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvaGlkLWRlYnVnLmgKaW5kZXggZjA0ZDZkNy4uOGU0ZGJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWRlYnVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQtZGVidWcuaApAQCAtNzAwLDkgKzcwMCwxMCBAQAogCiBzdGF0aWMgY2hhciAqcmVsYXRpdmVzW1JFTF9NQVggKyAxXSA9IHsKIAlbUkVMX1hdID0gIlgiLAkJCVtSRUxfWV0gPSAiWSIsCi0JW1JFTF9aXSA9ICJaIiwJCQlbUkVMX0hXSEVFTF0gPSAiSFdoZWVsIiwKLQlbUkVMX0RJQUxdID0gIkRpYWwiLAkJW1JFTF9XSEVFTF0gPSAiV2hlZWwiLAotCVtSRUxfTUlTQ10gPSAiTWlzYyIsCisJW1JFTF9aXSA9ICJaIiwJCQlbUkVMX1JYXSA9ICJSeCIsCisJW1JFTF9SWV0gPSAiUnkiLAkJW1JFTF9SWl0gPSAiUnoiLAorCVtSRUxfSFdIRUVMXSA9ICJIV2hlZWwiLAlbUkVMX0RJQUxdID0gIkRpYWwiLAorCVtSRUxfV0hFRUxdID0gIldoZWVsIiwJCVtSRUxfTUlTQ10gPSAiTWlzYyIsCiB9OwogCiBzdGF0aWMgY2hhciAqYWJzb2x1dGVzW0FCU19NQVggKyAxXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC5oIGIvaW5jbHVkZS9saW51eC9oaWQuaApzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9pbnB1dC9oaWQuaApyZW5hbWUgdG8gaW5jbHVkZS9saW51eC9oaWQuaAppbmRleCAyYTliZjA3Li4zNDJiNGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC02LDYgKzYsNyBAQAogICoKICAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpaworICogIENvcHlyaWdodCAoYykgMjAwNiBKaXJpIEtvc2luYQogICovCiAKIC8qCkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogLyoKICAqIFVTQiBISUQgKEh1bWFuIEludGVyZmFjZSBEZXZpY2UpIGludGVyZmFjZSBjbGFzcyBjb2RlCkBAIC0yNjAsNyArMjYyLDggQEAKICNkZWZpbmUgSElEX1FVSVJLX1BPV0VSQk9PS19IQVNfRk4JCTB4MDAwMDEwMDAKICNkZWZpbmUgSElEX1FVSVJLX1BPV0VSQk9PS19GTl9PTgkJMHgwMDAwMjAwMAogI2RlZmluZSBISURfUVVJUktfSU5WRVJUX0hXSEVFTAkJCTB4MDAwMDQwMDAKLSNkZWZpbmUgSElEX1FVSVJLX1BPV0VSQk9PS19JU09fS0VZQk9BUkQJMHgwMDAwODAwMAorI2RlZmluZSBISURfUVVJUktfUE9XRVJCT09LX0lTT19LRVlCT0FSRCAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBISURfUVVJUktfQkFEX1JFTEFUSVZFX0tFWVMJCTB4MDAwMTAwMDAKIAogLyoKICAqIFRoaXMgaXMgdGhlIGdsb2JhbCBlbnZpcm9ubWVudCBvZiB0aGUgcGFyc2VyLiBUaGlzIGluZm9ybWF0aW9uIGlzCkBAIC00MDAsNDIgKzQwMywxNCBAQAogCXVuc2lnbmVkIGNvbGxlY3Rpb25fc2l6ZTsJCQkJCS8qIE51bWJlciBvZiBhbGxvY2F0ZWQgaGlkX2NvbGxlY3Rpb25zICovCiAJdW5zaWduZWQgbWF4Y29sbGVjdGlvbjsJCQkJCQkvKiBOdW1iZXIgb2YgcGFyc2VkIGNvbGxlY3Rpb25zICovCiAJdW5zaWduZWQgbWF4YXBwbGljYXRpb247CQkJCQkvKiBOdW1iZXIgb2YgYXBwbGljYXRpb25zICovCisJdW5zaWduZWQgc2hvcnQgYnVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJVUyBJRCAqLworCXVuc2lnbmVkIHNob3J0IHZlbmRvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWZW5kb3IgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydCBwcm9kdWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvZHVjdCBJRCAqLwogCXVuc2lnbmVkIHZlcnNpb247CQkJCQkJLyogSElEIHZlcnNpb24gKi8KIAl1bnNpZ25lZCBjb3VudHJ5OwkJCQkJCS8qIEhJRCBjb3VudHJ5ICovCiAJc3RydWN0IGhpZF9yZXBvcnRfZW51bSByZXBvcnRfZW51bVtISURfUkVQT1JUX1RZUEVTXTsKIAotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CQkJCQkJLyogVVNCIGRldmljZSAqLwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwkJCQkJLyogVVNCIGludGVyZmFjZSAqLwotCWludCBpZm51bTsJCQkJCQkJLyogVVNCIGludGVyZmFjZSBudW1iZXIgKi8KLQotCXVuc2lnbmVkIGxvbmcgaW9mbDsJCQkJCQkvKiBJL08gZmxhZ3MgKENUUkxfUlVOTklORywgT1VUX1JVTk5JTkcpICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgaW9fcmV0cnk7CQkJCQkvKiBSZXRyeSB0aW1lciAqLwotCXVuc2lnbmVkIGxvbmcgc3RvcF9yZXRyeTsJCQkJCS8qIFRpbWUgdG8gZ2l2ZSB1cCwgaW4gamlmZmllcyAqLwotCXVuc2lnbmVkIGludCByZXRyeV9kZWxheTsJCQkJCS8qIERlbGF5IGxlbmd0aCBpbiBtcyAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF93b3JrOwkJCQkJLyogVGFzayBjb250ZXh0IGZvciByZXNldHMgKi8KLQotCXVuc2lnbmVkIGludCBidWZzaXplOwkJCQkJCS8qIFVSQiBidWZmZXIgc2l6ZSAqLwotCi0Jc3RydWN0IHVyYiAqdXJiaW47CQkJCQkJLyogSW5wdXQgVVJCICovCi0JY2hhciAqaW5idWY7CQkJCQkJCS8qIElucHV0IGJ1ZmZlciAqLwotCWRtYV9hZGRyX3QgaW5idWZfZG1hOwkJCQkJCS8qIElucHV0IGJ1ZmZlciBkbWEgKi8KLQlzcGlubG9ja190IGlubG9jazsJCQkJCQkvKiBJbnB1dCBmaWZvIHNwaW5sb2NrICovCi0KLQlzdHJ1Y3QgdXJiICp1cmJjdHJsOwkJCQkJCS8qIENvbnRyb2wgVVJCICovCi0Jc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3I7CQkJCQkvKiBDb250cm9sIHJlcXVlc3Qgc3RydWN0ICovCi0JZG1hX2FkZHJfdCBjcl9kbWE7CQkJCQkJLyogQ29udHJvbCByZXF1ZXN0IHN0cnVjdCBkbWEgKi8KLQlzdHJ1Y3QgaGlkX2NvbnRyb2xfZmlmbyBjdHJsW0hJRF9DT05UUk9MX0ZJRk9fU0laRV07CQkvKiBDb250cm9sIGZpZm8gKi8KLQl1bnNpZ25lZCBjaGFyIGN0cmxoZWFkLCBjdHJsdGFpbDsJCQkJLyogQ29udHJvbCBmaWZvIGhlYWQgJiB0YWlsICovCi0JY2hhciAqY3RybGJ1ZjsJCQkJCQkJLyogQ29udHJvbCBidWZmZXIgKi8KLQlkbWFfYWRkcl90IGN0cmxidWZfZG1hOwkJCQkJCS8qIENvbnRyb2wgYnVmZmVyIGRtYSAqLwotCXNwaW5sb2NrX3QgY3RybGxvY2s7CQkJCQkJLyogQ29udHJvbCBmaWZvIHNwaW5sb2NrICovCi0KLQlzdHJ1Y3QgdXJiICp1cmJvdXQ7CQkJCQkJLyogT3V0cHV0IFVSQiAqLwotCXN0cnVjdCBoaWRfcmVwb3J0ICpvdXRbSElEX0NPTlRST0xfRklGT19TSVpFXTsJCQkvKiBPdXRwdXQgcGlwZSBmaWZvICovCi0JdW5zaWduZWQgY2hhciBvdXRoZWFkLCBvdXR0YWlsOwkJCQkJLyogT3V0cHV0IHBpcGUgZmlmbyBoZWFkICYgdGFpbCAqLwotCWNoYXIgKm91dGJ1ZjsJCQkJCQkJLyogT3V0cHV0IGJ1ZmZlciAqLwotCWRtYV9hZGRyX3Qgb3V0YnVmX2RtYTsJCQkJCQkvKiBPdXRwdXQgYnVmZmVyIGRtYSAqLwotCXNwaW5sb2NrX3Qgb3V0bG9jazsJCQkJCQkvKiBPdXRwdXQgZmlmbyBzcGlubG9jayAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsJCQkJCQkvKiBkZXZpY2UgKi8KIAogCXVuc2lnbmVkIGNsYWltZWQ7CQkJCQkJLyogQ2xhaW1lZCBieSBoaWRpbnB1dCwgaGlkZGV2PyAqLwogCXVuc2lnbmVkIHF1aXJrczsJCQkJCQkvKiBWYXJpb3VzIHF1aXJrcyB0aGUgZGV2aWNlIGNhbiBwdWxsIG9uIHVzICovCkBAIC00NTEsNiArNDI2LDE3IEBACiAJY2hhciBwaHlzWzY0XTsJCQkJCQkJLyogRGV2aWNlIHBoeXNpY2FsIGxvY2F0aW9uICovCiAJY2hhciB1bmlxWzY0XTsJCQkJCQkJLyogRGV2aWNlIHVuaXF1ZSBpZGVudGlmaWVyIChzZXJpYWwgIykgKi8KIAorCXZvaWQgKmRyaXZlcl9kYXRhOworCisJLyogZGV2aWNlLXNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzICovCisJaW50ICgqaGlkaW5wdXRfaW5wdXRfZXZlbnQpIChzdHJ1Y3QgaW5wdXRfZGV2ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBpbnQpOworCWludCAoKmhpZGlucHV0X29wZW4pIChzdHJ1Y3QgaW5wdXRfZGV2ICopOworCXZvaWQgKCpoaWRpbnB1dF9jbG9zZSkgKHN0cnVjdCBpbnB1dF9kZXYgKik7CisKKwkvKiBoaWRkZXYgZXZlbnQgaGFuZGxlciAqLworCXZvaWQgKCpoaWRkZXZfaGlkX2V2ZW50KSAoc3RydWN0IGhpZF9kZXZpY2UgKiwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQkJICBzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyKTsKKwl2b2lkICgqaGlkZGV2X3JlcG9ydF9ldmVudCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfcmVwb3J0ICopOwogI2lmZGVmIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LCiAJdW5zaWduZWQgbG9uZyBwYl9wcmVzc2VkX2ZuW05CSVRTKEtFWV9NQVgpXTsKIAl1bnNpZ25lZCBsb25nIHBiX3ByZXNzZWRfbnVtbG9ja1tOQklUUyhLRVlfTUFYKV07CkBAIC00OTUsMzEgKzQ4MSwyMyBAQAogI2RlZmluZSByZXNvbHZfZXZlbnQoYSxiKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX0hJRElOUFVUCiAvKiBBcHBsaWNhdGlvbnMgZnJvbSBISUQgVXNhZ2UgVGFibGVzIDQvOC85OSBWZXJzaW9uIDEuMSAqLwogLyogV2UgaWdub3JlIGEgZmV3IGlucHV0IGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBub3Qgd2lkZWx5IHVzZWQgKi8KICNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKCgoYSA+PSAweDAwMDEwMDAwKSAmJiAoYSA8PSAweDAwMDEwMDA4KSkgfHwgKGEgPT0gMHgwMDAxMDA4MCkgfHwgKGEgPT0gMHgwMDBjMDAwMSkpCisKKy8qIEhJRCBjb3JlIEFQSSAqLwogZXh0ZXJuIHZvaWQgaGlkaW5wdXRfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfZmllbGQgKiwgc3RydWN0IGhpZF91c2FnZSAqLCBfX3MzMik7CiBleHRlcm4gdm9pZCBoaWRpbnB1dF9yZXBvcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCk7CiBleHRlcm4gaW50IGhpZGlucHV0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBoaWRpbnB1dF9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICopOwotI2Vsc2UKLSNkZWZpbmUgSVNfSU5QVVRfQVBQTElDQVRJT04oYSkgKDApCi1zdGF0aWMgaW5saW5lIHZvaWQgaGlkaW5wdXRfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGhpZGlucHV0X3JlcG9ydF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0KSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50IGhpZGlucHV0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyByZXR1cm4gLUVOT0RFVjsgfQotc3RhdGljIGlubGluZSB2b2lkIGhpZGlucHV0X2Rpc2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyB9Ci0jZW5kaWYKIAotaW50IGhpZF9vcGVuKHN0cnVjdCBoaWRfZGV2aWNlICopOwotdm9pZCBoaWRfY2xvc2Uoc3RydWN0IGhpZF9kZXZpY2UgKik7CiBpbnQgaGlkX3NldF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICosIHVuc2lnbmVkLCBfX3MzMik7Ci12b2lkIGhpZF9zdWJtaXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfcmVwb3J0ICosIHVuc2lnbmVkIGNoYXIgZGlyKTsKLXZvaWQgaGlkX2luaXRfcmVwb3J0cyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKLWludCBoaWRfd2FpdF9pbyhzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKLQoraW50IGhpZF9pbnB1dF9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKiwgaW50IHR5cGUsIHU4ICosIGludCwgaW50KTsKK2ludCBoaWRpbnB1dF9maW5kX2ZpZWxkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgc3RydWN0IGhpZF9maWVsZCAqKmZpZWxkKTsKK3ZvaWQgaGlkX2lucHV0X2ZpZWxkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBfX3U4ICpkYXRhLCBpbnQgaW50ZXJydXB0KTsKK3ZvaWQgaGlkX291dHB1dF9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgX191OCAqZGF0YSk7Cit2b2lkIGhpZF9mcmVlX2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlKTsKK3N0cnVjdCBoaWRfZGV2aWNlICpoaWRfcGFyc2VfcmVwb3J0KF9fdTggKnN0YXJ0LCB1bnNpZ25lZCBzaXplKTsKIAogI2lmZGVmIENPTkZJR19ISURfRkYKIGludCBoaWRfZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKQEAgLTUzNiw0ICs1MTQsMTQgQEAKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBoaWRfZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKSB7IHJldHVybiAtMTsgfQogI2VuZGlmCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0ICJcbiIgLCBcCisJCV9fRklMRV9fICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmb3JtYXQgIlxuIiAsIFwKKwkJX19GSUxFX18gLCAjIyBhcmcpCisjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWdobWVtLmggYi9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaAppbmRleCAzZDg3NjhiLi42NDVkNDQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaApAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaWZuZGVmIEFSQ0hfSEFTX0ZMVVNIX0FOT05fUEFHRQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2Fub25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiB7CiB9CiAjZW5kaWYKQEAgLTk2LDcgKzk2LDEwIEBACiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIpCisjaWZuZGVmIF9fSEFWRV9BUkNIX0NPUFlfVVNFUl9ISUdIUEFHRQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCisJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJY2hhciAqdmZyb20sICp2dG87CiAKQEAgLTEwOSw2ICsxMTIsOCBAQAogCXNtcF93bWIoKTsKIH0KIAorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20pCiB7CiAJY2hhciAqdmZyb20sICp2dG87CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWJpdC5oIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1iaXQuaAppbmRleCBjOGY4ZGYyLi45MzdkYTcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWJpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tYml0LmgKQEAgLTI2LDkgKzI2LDkgQEAKIAogLyogLS0tIERlZmluZXMgZm9yIGJpdC1hZGFwdGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KIC8qCi0gKiBUaGlzIHN0cnVjdCBjb250YWlucyB0aGUgaHctZGVwZW5kZW50IGZ1bmN0aW9ucyBvZiBiaXQtc3R5bGUgYWRhcHRlcnMgdG8gCisgKiBUaGlzIHN0cnVjdCBjb250YWlucyB0aGUgaHctZGVwZW5kZW50IGZ1bmN0aW9ucyBvZiBiaXQtc3R5bGUgYWRhcHRlcnMgdG8KICAqIG1hbmlwdWxhdGUgdGhlIGxpbmUgc3RhdGVzLCBhbmQgdG8gaW5pdCBhbnkgaHctc3BlY2lmaWMgZmVhdHVyZXMuIFRoaXMgaXMKLSAqIG9ubHkgdXNlZCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGh3LXR5cGUgb2YgYWRhcHRlciBydW5uaW5nLiAKKyAqIG9ubHkgdXNlZCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGh3LXR5cGUgb2YgYWRhcHRlciBydW5uaW5nLgogICovCiBzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgewogCXZvaWQgKmRhdGE7CQkvKiBwcml2YXRlIGRhdGEgZm9yIGxvd2xldmVsIHJvdXRpbmVzICovCkBAIC00NCw2ICs0NCw1IEBACiB9OwogCiBpbnQgaTJjX2JpdF9hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKLWludCBpMmNfYml0X2RlbF9idXMoc3RydWN0IGkyY19hZGFwdGVyICopOwogCiAjZW5kaWYgLyogX0xJTlVYX0kyQ19BTEdPX0JJVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWl0ZS5oIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1pdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA3M2ZlOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogaTJjLWFsZ28taXRlLmggaTJjIGRyaXZlciBhbGdvcml0aG1zIGZvciBJVEUgSUlDIGFkYXB0ZXJzICAgICAgICAgICAgICAgICAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogICBDb3B5cmlnaHQgKEMpIDE5OTUtOTcgU2ltb24gRy4gVm9nbAotICAgICAgICAgICAgICAgICAgIDE5OTgtOTkgSGFucyBCZXJnbHVuZAotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZCBldmVuCi0gICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+ICovCi0KLS8qIE1vZGlmaWNhdGlvbnMgYnkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgMjAwMQotICAgQ2hhbmdlcyBtYWRlIHRvIHN1cHBvcnQgdGhlIElURSBJSUMgcGVyaXBoZXJhbCAqLwotCi0KLSNpZm5kZWYgSTJDX0FMR09fSVRFX0gKLSNkZWZpbmUgSTJDX0FMR09fSVRFX0ggMQotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyogRXhhbXBsZSBvZiBhIHNlcXVlbnRpYWwgcmVhZCByZXF1ZXN0OgotCXN0cnVjdCBpMmNfaWljX21zZyBzX21zZzsgCi0KLQlzX21zZy5hZGRyPWRldmljZV9hZGRyZXNzOwotCXNfbXNnLmxlbj1sZW5ndGg7Ci0Jc19tc2cuYnVmPWJ1ZmZlcjsKLQlzX21zZy53YWRkcj13b3JkX2FkZHJlc3M7Ci0JaW9jdGwoZmlsZSxJMkNfU1JFQUQsICZzX21zZyk7Ci0gKi8KLSNkZWZpbmUgSTJDX1NSRUFECTB4NzgwCS8qIFNSRUFEIGlvY3RsIGNvbW1hbmQgKi8KLQotc3RydWN0IGkyY19paWNfbXNnIHsKLQlfX3UxNiBhZGRyOwkvKiBkZXZpY2UgYWRkcmVzcyAqLwotCV9fdTE2IHdhZGRyOwkvKiB3b3JkIGFkZHJlc3MgKi8KLQlzaG9ydCBsZW47CS8qIG1zZyBsZW5ndGggKi8KLQljaGFyICpidWY7CS8qIHBvaW50ZXIgdG8gbXNnIGRhdGEgKi8KLX07Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi1zdHJ1Y3QgaTJjX2FkYXB0ZXI7Ci0KLXN0cnVjdCBpMmNfYWxnb19paWNfZGF0YSB7Ci0Jdm9pZCAqZGF0YTsJCS8qIHByaXZhdGUgZGF0YSBmb3IgbG9sZXZlbCByb3V0aW5lcwkqLwotCXZvaWQgKCpzZXRpaWMpICh2b2lkICpkYXRhLCBpbnQgY3RsLCBpbnQgdmFsKTsKLQlpbnQgICgqZ2V0aWljKSAodm9pZCAqZGF0YSwgaW50IGN0bCk7Ci0JaW50ICAoKmdldG93bikgKHZvaWQgKmRhdGEpOwotCWludCAgKCpnZXRjbG9jaykgKHZvaWQgKmRhdGEpOwotCXZvaWQgKCp3YWl0Zm9ycGluKSAodm9pZCk7ICAgICAKLQotCS8qIGxvY2FsIHNldHRpbmdzICovCi0JaW50IHVkZWxheTsKLQlpbnQgbWRlbGF5OwotCWludCB0aW1lb3V0OwotfTsKLQotaW50IGkyY19paWNfYWRkX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7Ci1pbnQgaTJjX2lpY19kZWxfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogSTJDX0FMR09fSVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNhLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjYS5oCmluZGV4IDIyNjY5M2UuLmZjZTQ3YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNhLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1wY2EuaApAQCAtMTAsNiArMTAsNSBAQAogfTsKIAogaW50IGkyY19wY2FfYWRkX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7Ci1pbnQgaTJjX3BjYV9kZWxfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKIAogI2VuZGlmIC8qIF9MSU5VWF9JMkNfQUxHT19QQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtYWxnby1wY2YuaCBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNmLmgKaW5kZXggOTkwOGYzZi4uOTk0ZWI4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtYWxnby1wY2YuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjZi5oCkBAIC0zMSw3ICszMSw3IEBACiAJaW50ICAoKmdldHBjZikgKHZvaWQgKmRhdGEsIGludCBjdGwpOwogCWludCAgKCpnZXRvd24pICh2b2lkICpkYXRhKTsKIAlpbnQgICgqZ2V0Y2xvY2spICh2b2lkICpkYXRhKTsKLQl2b2lkICgqd2FpdGZvcnBpbikgKHZvaWQpOyAgICAgCisJdm9pZCAoKndhaXRmb3JwaW4pICh2b2lkKTsKIAogCS8qIGxvY2FsIHNldHRpbmdzICovCiAJaW50IHVkZWxheTsKQEAgLTM5LDYgKzM5LDUgQEAKIH07CiAKIGludCBpMmNfcGNmX2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICopOwotaW50IGkyY19wY2ZfZGVsX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CiAKICNlbmRpZiAvKiBfTElOVVhfSTJDX0FMR09fUENGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tc2dpLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXNnaS5oCmluZGV4IDRhMDExM2QuLjNiNzcxNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tc2dpLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1zZ2kuaApAQCAtMjIsNiArMjIsNSBAQAogfTsKIAogaW50IGkyY19zZ2lfYWRkX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7Ci1pbnQgaTJjX3NnaV9kZWxfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKIAogI2VuZGlmIC8qIEkyQ19BTEdPX1NHSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCAwYThmNzUwLi5kMzg3NzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTEsNyArMSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiAJCQkJCQkJCQkgICAgICovCisvKgkJCQkJCQkJCSAgICAgKi8KIC8qIGkyYy1pZC5oIC0gaWRlbnRpZmllciB2YWx1ZXMgZm9yIGkyYyBkcml2ZXJzIGFuZCBhZGFwdGVycwkJICAgICAqLwotLyogCQkJCQkJCQkJICAgICAqLworLyoJCQkJCQkJCQkgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5IFNpbW9uIEcuIFZvZ2wKIApAQCAtNDAsMTAgKzQwLDEwIEBACiAjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTIwCTExCS8qIHZpZGVvIGVuY29kZXIJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTIxCTEyCS8qIHZpZGVvIGVuY29kZXIJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTg1QgkxMwkvKiB2aWRlbyBlbmNvZGVyCQkqLwotI2RlZmluZSBJMkNfRFJJVkVSSURfQ0g3MDAzCTE0CS8qIGRpZ2l0YWwgcGMgdG8gdHYgZW5jb2RlciAJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX0NINzAwMwkxNAkvKiBkaWdpdGFsIHBjIHRvIHR2IGVuY29kZXIJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1BDRjg1NzRBCTE1CS8qIGkyYyBleHBhbmRlciAtIDggYml0IGluL291dAkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfUENGODU4MkMJMTYJLyogZWVwcm9tCQkJKi8KLSNkZWZpbmUgSTJDX0RSSVZFUklEX0FUMjRDeHgJMTcJLyogZWVwcm9tIDEvMi80LzgvMTYgSyAJCSovCisjZGVmaW5lIEkyQ19EUklWRVJJRF9BVDI0Q3h4CTE3CS8qIGVlcHJvbSAxLzIvNC84LzE2IEsJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9URUE2MzAwCTE4CS8qIGF1ZGlvIG1peGVyCQkJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0JUODI5CTE5CS8qIHBjIHRvIHR2IGVuY29kZXIJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9UREE5ODUwCTIwCS8qIGF1ZGlvIG1peGVyCQkJKi8KQEAgLTgyLDkgKzgyLDggQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX1NUTTQxVDAwCTUyCS8qIHJlYWwgdGltZSBjbG9jawkJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1VEQTEzNDIJNTMJLyogVURBMTM0MiBhdWRpbyBjb2RlYwkJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0FEVjcxNzAJNTQJLyogdmlkZW8gZW5jb2RlcgkJKi8KLSNkZWZpbmUgSTJDX0RSSVZFUklEX1JBREVPTgk1NQkvKiBJMkMgYnVzIG9uIFJhZGVvbiBib2FyZHMJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX01BWDE2MTcJNTYJLyogdGVtcCBzZW5zb3IJCQkqLwotI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzE5MQk1NwkvKiB2aWRlbyBlbmNvZGVyCQkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzE5MQk1NwkvKiB2aWRlbyBkZWNvZGVyCQkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfSU5EWUNBTQk1OAkvKiBTR0kgSW5keUNhbQkJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9CVDgzMgk1OQkvKiBDTU9TIGNhbWVyYSB2aWRlbyBwcm9jZXNzb3IJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1REQTk4ODcJNjAJLyogVERBOTg4eCBJRi1QTEwgZGVtb2R1bGF0b3IJKi8KQEAgLTEzMiw3ICsxMzEsNiBAQAogI2RlZmluZSBJMkNfRFJJVkVSSURfQURNMTAyMSAxMDA4CiAjZGVmaW5lIEkyQ19EUklWRVJJRF9BRE05MjQwIDEwMDkKICNkZWZpbmUgSTJDX0RSSVZFUklEX0xUQzE3MTAgMTAxMAotI2RlZmluZSBJMkNfRFJJVkVSSURfSUNTUExMIDEwMTIKICNkZWZpbmUgSTJDX0RSSVZFUklEX0JUODY5IDEwMTMKICNkZWZpbmUgSTJDX0RSSVZFUklEX01BWElMSUZFIDEwMTQKICNkZWZpbmUgSTJDX0RSSVZFUklEX01BVE9SQiAxMDE1CkBAIC0xNDQsNyArMTQyLDYgQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX01UUDAwOCAxMDIzCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9EUzE2MjEgMTAyNAogI2RlZmluZSBJMkNfRFJJVkVSSURfQURNMTAyNCAxMDI1Ci0jZGVmaW5lIEkyQ19EUklWRVJJRF9JVDg3IDEwMjYKICNkZWZpbmUgSTJDX0RSSVZFUklEX0NINzAwWCAxMDI3IC8qIHNpbmdsZSBkcml2ZXIgZm9yIENINzAwMy03MDA5IGRpZ2l0YWwgcGMgdG8gdHYgZW5jb2RlcnMgKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0ZTQ1BPUyAxMDI4CiAjZGVmaW5lIEkyQ19EUklWRVJJRF9GU0NTQ1kgMTAyOQpAQCAtMTU5LDEyICsxNTYsMTMgQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX0FTQjEwMCAxMDQzCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9GU0NIRVIgMTA0NgogI2RlZmluZSBJMkNfRFJJVkVSSURfVzgzTDc4NVRTIDEwNDcKKyNkZWZpbmUgSTJDX0RSSVZFUklEX09WNzY3MCAxMDQ4CS8qIE9tbml2aXNpb24gNzY3MCBjYW1lcmEgKi8KIAogLyoKICAqIC0tLS0gQWRhcHRlciB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyogLS0tIEJpdCBhbGdvcml0aG0gYWRhcHRlcnMgCQkJCQkJKi8KKy8qIC0tLSBCaXQgYWxnb3JpdGhtIGFkYXB0ZXJzCQkJCQkJKi8KICNkZWZpbmUgSTJDX0hXX0JfTFAJCTB4MDEwMDAwIC8qIFBhcmFsbGVsIHBvcnQgUGhpbGlwcyBzdHlsZSAqLwogI2RlZmluZSBJMkNfSFdfQl9TRVIJCTB4MDEwMDAyIC8qIFNlcmlhbCBsaW5lIGludGVyZmFjZSAqLwogI2RlZmluZSBJMkNfSFdfQl9CVDg0OAkJMHgwMTAwMDUgLyogQlQ4NDggdmlkZW8gYm9hcmRzICovCkBAIC0yMTIsOSArMjEwLDYgQEAKIC8qIC0tLSBNUEM4eHggUG93ZXJQQyBhZGFwdGVycwkJCQkJCSovCiAjZGVmaW5lIEkyQ19IV19NUEM4WFhfRVBPTgkweDExMDAwMCAvKiBFcG9ueW1vdXMgTVBDOHh4IEkyQyBhZGFwdGVyICovCiAKLS8qIC0tLSBJVEUgYmFzZWQgYWxnb3JpdGhtcwkJCQkJCSovCi0jZGVmaW5lIEkyQ19IV19JX0lJQwkJMHgwODAwMDAgLyogY29udHJvbGxlciBvbiB0aGUgSVRFICovCi0KIC8qIC0tLSBQb3dlclBDIG9uLWNoaXAgYWRhcHRlcnMJCQkJCQkqLwogI2RlZmluZSBJMkNfSFdfT0NQCQkweDEyMDAwMCAvKiBJQk0gb24tY2hpcCBJMkMgYWRhcHRlciAqLwogCkBAIC0yNTAsNiArMjQ1LDcgQEAKICNkZWZpbmUgSTJDX0hXX1NNQlVTX09WNTE4CTB4MDQwMDBmIC8qIE9WNTE4KCspIFVTQiAxLjEgd2ViY2FtIElDcyAqLwogI2RlZmluZSBJMkNfSFdfU01CVVNfT1Y1MTkJMHgwNDAwMTAgLyogT1Y1MTkgVVNCIDEuMSB3ZWJjYW0gSUMgKi8KICNkZWZpbmUgSTJDX0hXX1NNQlVTX09WRlgyCTB4MDQwMDExIC8qIEN5cHJlc3MvT21uaVZpc2lvbiBGWDIgd2ViY2FtICovCisjZGVmaW5lIEkyQ19IV19TTUJVU19DQUZFCTB4MDQwMDEyIC8qIE1hcnZlbGwgODhBTFAwMSAiQ0FGRSIgY2FtICAqLwogCiAvKiAtLS0gSVNBIHBzZXVkby1hZGFwdGVyCQkJCQkJKi8KICNkZWZpbmUgSTJDX0hXX0lTQQkJMHgwNTAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLXBueC5oIGIvaW5jbHVkZS9saW51eC9pMmMtcG54LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlOWM4MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLXBueC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBIZWFkZXIgZmlsZSBmb3IgSTJDIHN1cHBvcnQgb24gUE5YMDEweC80MDA4LgorICoKKyAqIEF1dGhvcjogRGVubmlzIEtvdmFsZXYgPGRrb3ZhbGV2QHJ1Lm12aXN0YS5jb20+CisgKgorICogMjAwNC0yMDA2IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19JMkNfUE5YX0hfXworI2RlZmluZSBfX0kyQ19QTlhfSF9fCisKKyNpbmNsdWRlIDxhc20vYXJjaC9pMmMuaD4KKworc3RydWN0IGkyY19wbnhfbWlmIHsKKwlpbnQJCQlyZXQ7CQkvKiBSZXR1cm4gdmFsdWUgKi8KKwlpbnQJCQltb2RlOwkJLyogSW50ZXJmYWNlIG1vZGUgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0ZTsJLyogSS9PIGNvbXBsZXRpb24gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsJCS8qIFRpbWVvdXQgKi8KKwljaGFyICoJCQlidWY7CQkvKiBEYXRhIGJ1ZmZlciAqLworCWludAkJCWxlbjsJCS8qIExlbmd0aCBvZiBkYXRhIGJ1ZmZlciAqLworfTsKKworc3RydWN0IGkyY19wbnhfYWxnb19kYXRhIHsKKwl1MzIJCQliYXNlOworCXUzMgkJCWlvYWRkcjsKKwlpbnQJCQlpcnE7CisJc3RydWN0IGkyY19wbnhfbWlmCW1pZjsKKwlpbnQJCQlsYXN0OworfTsKKworc3RydWN0IGkyY19wbnhfZGF0YSB7CisJaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisJaW50ICgqcmVzdW1lKSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisJdTMyICgqY2FsY3VsYXRlX2lucHV0X2ZyZXEpIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKwlpbnQgKCpzZXRfY2xvY2tfcnVuKSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisJaW50ICgqc2V0X2Nsb2NrX3N0b3ApIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7Cit9OworCisjZW5kaWYgLyogX19JMkNfUE5YX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjLmgKaW5kZXggOWI1ZDA0Ny4uNzFlNTBkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0xLDcgKzEsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogCQkJCQkJCQkJICAgICAqLworLyoJCQkJCQkJCQkgICAgICovCiAvKiBpMmMuaCAtIGRlZmluaXRpb25zIGZvciB0aGUgaTJjLWJ1cyBpbnRlcmZhY2UJCQkgICAgICovCi0vKiAJCQkJCQkJCQkgICAgICovCisvKgkJCQkJCQkJCSAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgU2ltb24gRy4gVm9nbAogCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIF9MSU5VWF9JMkNfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpZmRlZiBfX0tFUk5FTF9fIAorI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KQEAgLTUzLDggKzUzLDggQEAKIAogLyoKICAqIFRoZSBtYXN0ZXIgcm91dGluZXMgYXJlIHRoZSBvbmVzIG5vcm1hbGx5IHVzZWQgdG8gdHJhbnNtaXQgZGF0YSB0byBkZXZpY2VzCi0gKiBvbiBhIGJ1cyAob3IgcmVhZCBmcm9tIHRoZW0pLiBBcGFydCBmcm9tIHR3byBiYXNpYyB0cmFuc2ZlciBmdW5jdGlvbnMgdG8gCi0gKiB0cmFuc21pdCBvbmUgbWVzc2FnZSBhdCBhIHRpbWUsIGEgbW9yZSBjb21wbGV4IHZlcnNpb24gY2FuIGJlIHVzZWQgdG8gCisgKiBvbiBhIGJ1cyAob3IgcmVhZCBmcm9tIHRoZW0pLiBBcGFydCBmcm9tIHR3byBiYXNpYyB0cmFuc2ZlciBmdW5jdGlvbnMgdG8KKyAqIHRyYW5zbWl0IG9uZSBtZXNzYWdlIGF0IGEgdGltZSwgYSBtb3JlIGNvbXBsZXggdmVyc2lvbiBjYW4gYmUgdXNlZCB0bwogICogdHJhbnNtaXQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBtZXNzYWdlcyB3aXRob3V0IGludGVycnVwdGlvbi4KICAqLwogZXh0ZXJuIGludCBpMmNfbWFzdGVyX3NlbmQoc3RydWN0IGkyY19jbGllbnQgKixjb25zdCBjaGFyKiAsaW50KTsKQEAgLTY3LDEwICs2NywxMCBAQAogCiAvKiBUaGlzIGlzIHRoZSB2ZXJ5IGdlbmVyYWxpemVkIFNNQnVzIGFjY2VzcyByb3V0aW5lLiBZb3UgcHJvYmFibHkgZG8gbm90CiAgICB3YW50IHRvIHVzZSB0aGlzLCB0aG91Z2g7IG9uZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IG1heSBiZSBtdWNoIGVhc2llciwKLSAgIGFuZCBwcm9iYWJseSBqdXN0IGFzIGZhc3QuIAorICAgYW5kIHByb2JhYmx5IGp1c3QgYXMgZmFzdC4KICAgIE5vdGUgdGhhdCB3ZSB1c2UgaTJjX2FkYXB0ZXIgaGVyZSwgYmVjYXVzZSB5b3UgZG8gbm90IG5lZWQgYSBzcGVjaWZpYwogICAgc21idXMgYWRhcHRlciB0byBjYWxsIHRoaXMgZnVuY3Rpb24uICovCi1leHRlcm4gczMyIGkyY19zbWJ1c194ZmVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBhZGFwdGVyLCB1MTYgYWRkciwgCitleHRlcm4gczMyIGkyY19zbWJ1c194ZmVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBhZGFwdGVyLCB1MTYgYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLCBpbnQgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGkyY19zbWJ1c19kYXRhICogZGF0YSk7CkBAIC0xMTIsMTQgKzExMiwxNCBAQAogCiAJLyogTm90aWZpZXMgdGhlIGRyaXZlciB0aGF0IGEgbmV3IGJ1cyBoYXMgYXBwZWFyZWQuIFRoaXMgcm91dGluZQogCSAqIGNhbiBiZSB1c2VkIGJ5IHRoZSBkcml2ZXIgdG8gdGVzdCBpZiB0aGUgYnVzIG1lZXRzIGl0cyBjb25kaXRpb25zCi0JICogJiBzZWVrIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGNoaXAocykgaXQgc3VwcG9ydHMuIElmIGZvdW5kLCBpdCAKKwkgKiAmIHNlZWsgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgY2hpcChzKSBpdCBzdXBwb3J0cy4gSWYgZm91bmQsIGl0CiAJICogcmVnaXN0ZXJzIHRoZSBjbGllbnQocykgdGhhdCBhcmUgb24gdGhlIGJ1cyB0byB0aGUgaTJjIGFkbWluLiB2aWEKIAkgKiBpMmNfYXR0YWNoX2NsaWVudC4KIAkgKi8KIAlpbnQgKCphdHRhY2hfYWRhcHRlcikoc3RydWN0IGkyY19hZGFwdGVyICopOwogCWludCAoKmRldGFjaF9hZGFwdGVyKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CiAKLQkvKiB0ZWxscyB0aGUgZHJpdmVyIHRoYXQgYSBjbGllbnQgaXMgYWJvdXQgdG8gYmUgZGVsZXRlZCAmIGdpdmVzIGl0IAorCS8qIHRlbGxzIHRoZSBkcml2ZXIgdGhhdCBhIGNsaWVudCBpcyBhYm91dCB0byBiZSBkZWxldGVkICYgZ2l2ZXMgaXQKIAkgKiB0aGUgY2hhbmNlIHRvIHJlbW92ZSBpdHMgcHJpdmF0ZSBkYXRhLiBBbHNvLCBpZiB0aGUgY2xpZW50IHN0cnVjdAogCSAqIGhhcyBiZWVuIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyIGluIHRoZSBmdW5jdGlvbiBhYm92ZSwKIAkgKiBpdCBtdXN0IGJlIGZyZWVkIGhlcmUuCkBAIC0xMzksMTMgKzEzOSwxMyBAQAogI2RlZmluZSBJMkNfTkFNRV9TSVpFCTUwCiAKIC8qCi0gKiBpMmNfY2xpZW50IGlkZW50aWZpZXMgYSBzaW5nbGUgZGV2aWNlIChpLmUuIGNoaXApIHRoYXQgaXMgY29ubmVjdGVkIHRvIGFuIAorICogaTJjX2NsaWVudCBpZGVudGlmaWVzIGEgc2luZ2xlIGRldmljZSAoaS5lLiBjaGlwKSB0aGF0IGlzIGNvbm5lY3RlZCB0byBhbgogICogaTJjIGJ1cy4gVGhlIGJlaGF2aW91ciBpcyBkZWZpbmVkIGJ5IHRoZSByb3V0aW5lcyBvZiB0aGUgZHJpdmVyLiBUaGlzCiAgKiBmdW5jdGlvbiBpcyBtYWlubHkgdXNlZCBmb3IgbG9va3VwICYgb3RoZXIgYWRtaW4uIGZ1bmN0aW9ucy4KICAqLwogc3RydWN0IGkyY19jbGllbnQgewogCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIGRpdi4sIHNlZSBiZWxvdwkJKi8KLQl1bnNpZ25lZCBzaG9ydCBhZGRyOwkJLyogY2hpcCBhZGRyZXNzIC0gTk9URTogN2JpdCAJKi8KKwl1bnNpZ25lZCBzaG9ydCBhZGRyOwkJLyogY2hpcCBhZGRyZXNzIC0gTk9URTogN2JpdAkqLwogCQkJCQkvKiBhZGRyZXNzZXMgYXJlIHN0b3JlZCBpbiB0aGUJKi8KIAkJCQkJLyogX0xPV0VSXyA3IGJpdHMJCSovCiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwkvKiB0aGUgYWRhcHRlciB3ZSBzaXQgb24JKi8KQEAgLTE4MiwxNCArMTgyLDE0IEBACiAgKi8KIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHsKIAkvKiBJZiBhbiBhZGFwdGVyIGFsZ29yaXRobSBjYW4ndCBkbyBJMkMtbGV2ZWwgYWNjZXNzLCBzZXQgbWFzdGVyX3hmZXIKLQkgICB0byBOVUxMLiBJZiBhbiBhZGFwdGVyIGFsZ29yaXRobSBjYW4gZG8gU01CdXMgYWNjZXNzLCBzZXQgCisJICAgdG8gTlVMTC4gSWYgYW4gYWRhcHRlciBhbGdvcml0aG0gY2FuIGRvIFNNQnVzIGFjY2Vzcywgc2V0CiAJICAgc21idXNfeGZlci4gSWYgc2V0IHRvIE5VTEwsIHRoZSBTTUJ1cyBwcm90b2NvbCBpcyBzaW11bGF0ZWQKIAkgICB1c2luZyBjb21tb24gSTJDIG1lc3NhZ2VzICovCiAJLyogbWFzdGVyX3hmZXIgc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHN1Y2Nlc3NmdWxseQogCSAgIHByb2Nlc3NlZCwgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciAqLwotCWludCAoKm1hc3Rlcl94ZmVyKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsc3RydWN0IGkyY19tc2cgKm1zZ3MsIAorCWludCAoKm1hc3Rlcl94ZmVyKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsc3RydWN0IGkyY19tc2cgKm1zZ3MsCiAJICAgICAgICAgICAgICAgICAgIGludCBudW0pOwotCWludCAoKnNtYnVzX3hmZXIpIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHUxNiBhZGRyLCAKKwlpbnQgKCpzbWJ1c194ZmVyKSAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCB1MTYgYWRkciwKIAkgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwKIAkgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICogZGF0YSk7CiAKQEAgLTIxNiw2ICsyMTYsNyBAQAogCWludCAoKmNsaWVudF91bnJlZ2lzdGVyKShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKIAogCS8qIGRhdGEgZmllbGRzIHRoYXQgYXJlIHZhbGlkIGZvciBhbGwgZGV2aWNlcwkqLworCXU4IGxldmVsOyAJCQkvKiBuZXN0aW5nIGxldmVsIGZvciBsb2NrZGVwICovCiAJc3RydWN0IG11dGV4IGJ1c19sb2NrOwogCXN0cnVjdCBtdXRleCBjbGlzdF9sb2NrOwogCkBAIC0zMTYsNyArMzE3LDcgQEAKICAqIEl0IHdpbGwgb25seSBjYWxsIGZvdW5kX3Byb2MgaWYgc29tZSBjbGllbnQgaXMgY29ubmVjdGVkIGF0IHRoZQogICogc3BlY2lmaWMgYWRkcmVzcyAodW5sZXNzIGEgJ2ZvcmNlJyBtYXRjaGVkKTsKICAqLwotZXh0ZXJuIGludCBpMmNfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCAKK2V4dGVybiBpbnQgaTJjX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKIAkJc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhICphZGRyZXNzX2RhdGEsCiAJCWludCAoKmZvdW5kX3Byb2MpIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiwgaW50LCBpbnQpKTsKIApAQCAtMzUyLDE1ICszNTMsMTUgQEAKICAqLwogc3RydWN0IGkyY19tc2cgewogCV9fdTE2IGFkZHI7CS8qIHNsYXZlIGFkZHJlc3MJCQkqLwotIAlfX3UxNiBmbGFnczsJCQorCV9fdTE2IGZsYWdzOwogI2RlZmluZSBJMkNfTV9URU4JMHgxMAkvKiB3ZSBoYXZlIGEgdGVuIGJpdCBjaGlwIGFkZHJlc3MJKi8KICNkZWZpbmUgSTJDX01fUkQJMHgwMQogI2RlZmluZSBJMkNfTV9OT1NUQVJUCTB4NDAwMAogI2RlZmluZSBJMkNfTV9SRVZfRElSX0FERFIJMHgyMDAwCiAjZGVmaW5lIEkyQ19NX0lHTk9SRV9OQUsJMHgxMDAwCiAjZGVmaW5lIEkyQ19NX05PX1JEX0FDSwkJMHgwODAwCi0gCV9fdTE2IGxlbjsJCS8qIG1zZyBsZW5ndGgJCQkJKi8KLSAJX191OCAqYnVmOwkJLyogcG9pbnRlciB0byBtc2cgZGF0YQkJCSovCisJX191MTYgbGVuOwkJLyogbXNnIGxlbmd0aAkJCQkqLworCV9fdTggKmJ1ZjsJCS8qIHBvaW50ZXIgdG8gbXNnIGRhdGEJCQkqLwogfTsKIAogLyogVG8gZGV0ZXJtaW5lIHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50ICovCkBAIC0zNzAsMTYgKzM3MSwxNiBAQAogI2RlZmluZSBJMkNfRlVOQ19QUk9UT0NPTF9NQU5HTElORwkweDAwMDAwMDA0IC8qIEkyQ19NX3tSRVZfRElSX0FERFIsTk9TVEFSVCwuLn0gKi8KICNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfSFdQRUNfQ0FMQwkweDAwMDAwMDA4IC8qIFNNQnVzIDIuMCAqLwogI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CTE9DS19QUk9DX0NBTEwJMHgwMDAwODAwMCAvKiBTTUJ1cyAyLjAgKi8KLSNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUVVJQ0sJCTB4MDAwMTAwMDAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURQkweDAwMDIwMDAwIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFCTB4MDAwNDAwMDAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBCTB4MDAwODAwMDAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQQkweDAwMTAwMDAwIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQQkweDAwMjAwMDAwIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEEJMHgwMDQwMDAwMCAKLSNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUFJPQ19DQUxMCTB4MDA4MDAwMDAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQkxPQ0tfREFUQQkweDAxMDAwMDAwIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBIDB4MDIwMDAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1FVSUNLCQkweDAwMDEwMDAwCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURQkweDAwMDIwMDAwCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEUJMHgwMDA0MDAwMAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQQkweDAwMDgwMDAwCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQQkweDAwMTAwMDAwCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfV09SRF9EQVRBCTB4MDAyMDAwMDAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBCTB4MDA0MDAwMDAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUFJPQ19DQUxMCTB4MDA4MDAwMDAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9CTE9DS19EQVRBCTB4MDEwMDAwMDAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSAweDAyMDAwMDAwCiAjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLCTB4MDQwMDAwMDAgLyogSTJDLWxpa2UgYmxvY2sgeGZlciAgKi8KICNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLCTB4MDgwMDAwMDAgLyogdy8gMS1ieXRlIHJlZy4gYWRkci4gKi8KICNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0tfMgkgMHgxMDAwMDAwMCAvKiBJMkMtbGlrZSBibG9jayB4ZmVyICAqLwpAQCAtNDA2LDEwICs0MDcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKQogCi0vKiAKLSAqIERhdGEgZm9yIFNNQnVzIE1lc3NhZ2VzIAorLyoKKyAqIERhdGEgZm9yIFNNQnVzIE1lc3NhZ2VzCiAgKi8KLSNkZWZpbmUgSTJDX1NNQlVTX0JMT0NLX01BWAkzMgkvKiBBcyBzcGVjaWZpZWQgaW4gU01CdXMgc3RhbmRhcmQgKi8JCisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19NQVgJMzIJLyogQXMgc3BlY2lmaWVkIGluIFNNQnVzIHN0YW5kYXJkICovCiB1bmlvbiBpMmNfc21idXNfZGF0YSB7CiAJX191OCBieXRlOwogCV9fdTE2IHdvcmQ7CkBAIC00MjEsMTEgKzQyMiwxMSBAQAogI2RlZmluZSBJMkNfU01CVVNfUkVBRAkxCiAjZGVmaW5lIEkyQ19TTUJVU19XUklURQkwCiAKLS8qIFNNQnVzIHRyYW5zYWN0aW9uIHR5cGVzIChzaXplIHBhcmFtZXRlciBpbiB0aGUgYWJvdmUgZnVuY3Rpb25zKSAKKy8qIFNNQnVzIHRyYW5zYWN0aW9uIHR5cGVzIChzaXplIHBhcmFtZXRlciBpbiB0aGUgYWJvdmUgZnVuY3Rpb25zKQogICAgTm90ZTogdGhlc2Ugbm8gbG9uZ2VyIGNvcnJlc3BvbmQgdG8gdGhlIChhcmJpdHJhcnkpIFBJSVg0IGludGVybmFsIGNvZGVzISAqLwogI2RlZmluZSBJMkNfU01CVVNfUVVJQ0sJCSAgICAwCiAjZGVmaW5lIEkyQ19TTUJVU19CWVRFCQkgICAgMQotI2RlZmluZSBJMkNfU01CVVNfQllURV9EQVRBCSAgICAyIAorI2RlZmluZSBJMkNfU01CVVNfQllURV9EQVRBCSAgICAyCiAjZGVmaW5lIEkyQ19TTUJVU19XT1JEX0RBVEEJICAgIDMKICNkZWZpbmUgSTJDX1NNQlVTX1BST0NfQ0FMTAkgICAgNAogI2RlZmluZSBJMkNfU01CVVNfQkxPQ0tfREFUQQkgICAgNQpAQCAtNDM0LDE1ICs0MzUsMTUgQEAKIAogCiAvKiAtLS0tLSBjb21tYW5kcyBmb3IgdGhlIGlvY3RsIGxpa2UgaTJjX2NvbW1hbmQgY2FsbDoKLSAqIG5vdGUgdGhhdCBhZGRpdGlvbmFsIGNhbGxzIGFyZSBkZWZpbmVkIGluIHRoZSBhbGdvcml0aG0gYW5kIGh3IAotICoJZGVwZW5kZW50IGxheWVycyAtIHRoZXNlIGNhbiBiZSBsaXN0ZWQgaGVyZSwgb3Igc2VlIHRoZSAKKyAqIG5vdGUgdGhhdCBhZGRpdGlvbmFsIGNhbGxzIGFyZSBkZWZpbmVkIGluIHRoZSBhbGdvcml0aG0gYW5kIGh3CisgKglkZXBlbmRlbnQgbGF5ZXJzIC0gdGhlc2UgY2FuIGJlIGxpc3RlZCBoZXJlLCBvciBzZWUgdGhlCiAgKgljb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlcy4KICAqLwogCQkJCS8qIC0+IGJpdC1hZGFwdGVyIHNwZWNpZmljIGlvY3RscwkqLwogI2RlZmluZSBJMkNfUkVUUklFUwkweDA3MDEJLyogbnVtYmVyIG9mIHRpbWVzIGEgZGV2aWNlIGFkZHJlc3MgICAgICAqLwogCQkJCS8qIHNob3VsZCBiZSBwb2xsZWQgd2hlbiBub3QgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnaW5nIAkJCSovCi0jZGVmaW5lIEkyQ19USU1FT1VUCTB4MDcwMgkvKiBzZXQgdGltZW91dCAtIGNhbGwgd2l0aCBpbnQgCQkqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnaW5nCQkJKi8KKyNkZWZpbmUgSTJDX1RJTUVPVVQJMHgwNzAyCS8qIHNldCB0aW1lb3V0IC0gY2FsbCB3aXRoIGludAkJKi8KIAogCiAvKiB0aGlzIGlzIGZvciBpMmMtZGV2LmMJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJvLWRldi5oIGIvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKaW5kZXggYzI1MTlkZi4uYTBiMjNkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKQEAgLTI0LDEyICsyNCwxMyBAQAogI2RlZmluZSBNQVhfSTJPX0NPTlRST0xMRVJTCTMyCiAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qCiAgKiBJMk8gQ29udHJvbCBJT0NUTHMgYW5kIHN0cnVjdHVyZXMKICAqLwogI2RlZmluZSBJMk9fTUFHSUNfTlVNQkVSCSdpJwotI2RlZmluZSBJMk9HRVRJT1BTCQlfSU9SKEkyT19NQUdJQ19OVU1CRVIsMCx1OFtNQVhfSTJPX0NPTlRST0xMRVJTXSkKKyNkZWZpbmUgSTJPR0VUSU9QUwkJX0lPUihJMk9fTUFHSUNfTlVNQkVSLDAsX191OFtNQVhfSTJPX0NPTlRST0xMRVJTXSkKICNkZWZpbmUgSTJPSFJUR0VUCQlfSU9XUihJMk9fTUFHSUNfTlVNQkVSLDEsc3RydWN0IGkyb19jbWRfaHJ0bGN0KQogI2RlZmluZSBJMk9MQ1RHRVQJCV9JT1dSKEkyT19NQUdJQ19OVU1CRVIsMixzdHJ1Y3QgaTJvX2NtZF9ocnRsY3QpCiAjZGVmaW5lIEkyT1BBUk1TRVQJCV9JT1dSKEkyT19NQUdJQ19OVU1CRVIsMyxzdHJ1Y3QgaTJvX2NtZF9wc2V0Z2V0KQpAQCAtMzcsNyArMzgsNyBAQAogI2RlZmluZSBJMk9TV0RMIAkJX0lPV1IoSTJPX01BR0lDX05VTUJFUiw1LHN0cnVjdCBpMm9fc3dfeGZlcikKICNkZWZpbmUgSTJPU1dVTCAJCV9JT1dSKEkyT19NQUdJQ19OVU1CRVIsNixzdHJ1Y3QgaTJvX3N3X3hmZXIpCiAjZGVmaW5lIEkyT1NXREVMCQlfSU9XUihJMk9fTUFHSUNfTlVNQkVSLDcsc3RydWN0IGkyb19zd194ZmVyKQotI2RlZmluZSBJMk9WQUxJREFURQkJX0lPUihJMk9fTUFHSUNfTlVNQkVSLDgsdTMyKQorI2RlZmluZSBJMk9WQUxJREFURQkJX0lPUihJMk9fTUFHSUNfTlVNQkVSLDgsX191MzIpCiAjZGVmaW5lIEkyT0hUTUwgCQlfSU9XUihJMk9fTUFHSUNfTlVNQkVSLDksc3RydWN0IGkyb19odG1sKQogI2RlZmluZSBJMk9FVlRSRUcJCV9JT1coSTJPX01BR0lDX05VTUJFUiwxMCxzdHJ1Y3QgaTJvX2V2dF9pZCkKICNkZWZpbmUgSTJPRVZUR0VUCQlfSU9SKEkyT19NQUdJQ19OVU1CRVIsMTEsc3RydWN0IGkyb19ldnRfaW5mbykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IDljMjA1MDIuLmUyNmEwMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtNzk2LDYgKzc5Niw3IEBACiAJdW5zaWduZWQJc2dfbWFwcGVkICA6IDE7CS8qIHNnX3RhYmxlIGFuZCBzZ19uZW50cyBhcmUgcmVhZHkgKi8KIAl1bnNpZ25lZAlub19pb18zMmJpdCA6IDE7IC8qIDEgPSBjYW4gbm90IGRvIDMyLWJpdCBJTyBvcHMgKi8KIAl1bnNpZ25lZAllcnJfc3RvcHNfZmlmbyA6IDE7IC8qIDE9ZGF0YSBGSUZPIGlzIGNsZWFyZWQgYnkgYW4gZXJyb3IgKi8KKwl1bnNpZ25lZAlhdGFwaV9pcnFfYm9nb24gOiAxOyAvKiBHZW5lcmF0ZXMgc3B1cmlvdXMgRE1BIGludGVycnVwdHMgaW4gUElPIG1vZGUgKi8KIAogCXN0cnVjdCBkZXZpY2UJZ2VuZGV2OwogCXN0cnVjdCBjb21wbGV0aW9uIGdlbmRldl9yZWxfY29tcDsgLyogVG8gZGVhbCB3aXRoIGRldmljZSByZWxlYXNlKCkgKi8KQEAgLTgwMyw4ICs4MDQsNiBAQAogCXZvaWQJCSpod2lmX2RhdGE7CS8qIGV4dHJhIGh3aWYgZGF0YSAqLwogCiAJdW5zaWduZWQgZG1hOwotCi0Jdm9pZCAoKmxlZF9hY3QpKHZvaWQgKmRhdGEsIGludCBydyk7CiB9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXAgaWRlX2h3aWZfdDsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfYWRkci5oIGIvaW5jbHVkZS9saW51eC9pZl9hZGRyLmgKaW5kZXggZGJlOGY2MS4uZDU1N2U0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9hZGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9hZGRyLmgKQEAgLTUyLDQgKzUyLDEwIEBACiAJX191MzIJdHN0YW1wOyAvKiB1cGRhdGVkIHRpbWVzdGFtcCwgaHVuZHJlZHRocyBvZiBzZWNvbmRzICovCiB9OwogCisvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgdXNlcnNwYWNlICovCisjaWZuZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgSUZBX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSkpCisjZGVmaW5lIElGQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpCisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaCBiL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCmluZGV4IGUwYTE1MDAuLjRhYmE2YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCkBAIC0xMDMsNiArMTAzLDggQEAKIAl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKwogLyogRGVmaW5lIEZEREkgc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBmZGRpX3N0YXRpc3RpY3MgewogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2xpbmsuaCBiL2luY2x1ZGUvbGludXgvaWZfbGluay5oCmluZGV4IGU5NjNhMDcuLjM1ZWQzYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfbGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfbGluay5oCkBAIC04Miw2ICs4MiwxMiBAQAogCiAjZGVmaW5lIElGTEFfTUFYIChfX0lGTEFfTUFYIC0gMSkKIAorLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIHVzZXJzcGFjZSAqLworI2lmbmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIElGTEFfUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpKSkKKyNkZWZpbmUgSUZMQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpCisjZW5kaWYKKwogLyogaWZpX2ZsYWdzLgogCiAgICBJRkZfKiBmbGFncy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCmluZGV4IDhkZTA3OWIuLjY2MGI1MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0lGX1RVTk5FTF9IXwogI2RlZmluZSBfSUZfVFVOTkVMX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFNJT0NHRVRUVU5ORUwgICAoU0lPQ0RFVlBSSVZBVEUgKyAwKQogI2RlZmluZSBTSU9DQUREVFVOTkVMICAgKFNJT0NERVZQUklWQVRFICsgMSkKICNkZWZpbmUgU0lPQ0RFTFRVTk5FTCAgIChTSU9DREVWUFJJVkFURSArIDIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXQuaCBiL2luY2x1ZGUvbGludXgvaW5pdC5oCmluZGV4IDVlYjVkMjQuLjVhNTkzYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC0xMTEsNiArMTExLDcgQEAKICNkZWZpbmUgc3Vic3lzX2luaXRjYWxsX3N5bmMoZm4pCV9fZGVmaW5lX2luaXRjYWxsKCI0cyIsZm4sNHMpCiAjZGVmaW5lIGZzX2luaXRjYWxsKGZuKQkJCV9fZGVmaW5lX2luaXRjYWxsKCI1Iixmbiw1KQogI2RlZmluZSBmc19pbml0Y2FsbF9zeW5jKGZuKQkJX19kZWZpbmVfaW5pdGNhbGwoIjVzIixmbiw1cykKKyNkZWZpbmUgcm9vdGZzX2luaXRjYWxsKGZuKQkJX19kZWZpbmVfaW5pdGNhbGwoInJvb3RmcyIsZm4scm9vdGZzKQogI2RlZmluZSBkZXZpY2VfaW5pdGNhbGwoZm4pCQlfX2RlZmluZV9pbml0Y2FsbCgiNiIsZm4sNikKICNkZWZpbmUgZGV2aWNlX2luaXRjYWxsX3N5bmMoZm4pCV9fZGVmaW5lX2luaXRjYWxsKCI2cyIsZm4sNnMpCiAjZGVmaW5lIGxhdGVfaW5pdGNhbGwoZm4pCQlfX2RlZmluZV9pbml0Y2FsbCgiNyIsZm4sNykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmggYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCmluZGV4IDczMzc5MGQuLjYzODNkMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaApAQCAtNywxNiArNywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAjaW5jbHVkZSA8bGludXgvaXBjLmg+CisjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogCiAjZGVmaW5lIElOSVRfRkRUQUJMRSBcCiB7CQkJCQkJCVwKIAkubWF4X2Zkcwk9IE5SX09QRU5fREVGQVVMVCwgCQlcCi0JLm1heF9mZHNldAk9IEVNQkVEREVEX0ZEX1NFVF9TSVpFLAkJXAogCS5mZAkJPSAmaW5pdF9maWxlcy5mZF9hcnJheVswXSwgCVwKIAkuY2xvc2Vfb25fZXhlYwk9IChmZF9zZXQgKikmaW5pdF9maWxlcy5jbG9zZV9vbl9leGVjX2luaXQsIFwKIAkub3Blbl9mZHMJPSAoZmRfc2V0ICopJmluaXRfZmlsZXMub3Blbl9mZHNfaW5pdCwgCVwKIAkucmN1CQk9IFJDVV9IRUFEX0lOSVQsIAkJXAotCS5mcmVlX2ZpbGVzCT0gTlVMTCwJCSAJCVwKIAkubmV4dAkJPSBOVUxMLAkJIAkJXAogfQogCkBAIC01NywyNSArNTYsMjcgQEAKIAkuY3B1X3ZtX21hc2sJPSBDUFVfTUFTS19BTEwsCQkJCVwKIH0KIAotI2RlZmluZSBJTklUX1NJR05BTFMoc2lnKSB7CVwKLQkuY291bnQJCT0gQVRPTUlDX0lOSVQoMSksIAkJXAorI2RlZmluZSBJTklUX1NJR05BTFMoc2lnKSB7CQkJCQkJXAorCS5jb3VudAkJPSBBVE9NSUNfSU5JVCgxKSwgCQkJCVwKIAkud2FpdF9jaGxkZXhpdAk9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKHNpZy53YWl0X2NobGRleGl0KSxcCi0JLnNoYXJlZF9wZW5kaW5nCT0geyAJCQkJXAorCS5zaGFyZWRfcGVuZGluZwk9IHsgCQkJCQkJXAogCQkubGlzdCA9IExJU1RfSEVBRF9JTklUKHNpZy5zaGFyZWRfcGVuZGluZy5saXN0KSwJXAotCQkuc2lnbmFsID0gIHt7MH19fSwgXAorCQkuc2lnbmFsID0gIHt7MH19fSwJCQkJCVwKIAkucG9zaXhfdGltZXJzCSA9IExJU1RfSEVBRF9JTklUKHNpZy5wb3NpeF90aW1lcnMpLAkJXAogCS5jcHVfdGltZXJzCT0gSU5JVF9DUFVfVElNRVJTKHNpZy5jcHVfdGltZXJzKSwJCVwKIAkucmxpbQkJPSBJTklUX1JMSU1JVFMsCQkJCQlcCiAJLnBncnAJCT0gMSwJCQkJCQlcCi0JLnNlc3Npb24JPSAxLAkJCQkJCVwKKwkudHR5X29sZF9wZ3JwICAgPSAwLAkJCQkJCVwKKwl7IC5fX3Nlc3Npb24gICAgICA9IDF9LAkJCQkJCVwKIH0KIAogZXh0ZXJuIHN0cnVjdCBuc3Byb3h5IGluaXRfbnNwcm94eTsKICNkZWZpbmUgSU5JVF9OU1BST1hZKG5zcHJveHkpIHsJCQkJCQlcCisJLnBpZF9ucwkJPSAmaW5pdF9waWRfbnMsCQkJCQlcCiAJLmNvdW50CQk9IEFUT01JQ19JTklUKDEpLAkJCQlcCiAJLm5zbG9jawkJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChuc3Byb3h5Lm5zbG9jayksCQlcCiAJLnV0c19ucwkJPSAmaW5pdF91dHNfbnMsCQkJCQlcCi0JLm5hbWVzcGFjZQk9IE5VTEwsCQkJCQkJXAorCS5tbnRfbnMJCT0gTlVMTCwJCQkJCQlcCiAJSU5JVF9JUENfTlMoaXBjX25zKQkJCQkJCVwKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IGMzODUwN2IuLmJkZTY1YzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTQ5MSw2ICs0OTEsMjEgQEAKICNkZWZpbmUgS0VZX0RJR0lUUwkJMHgxOWQKICNkZWZpbmUgS0VZX1RFRU4JCTB4MTllCiAjZGVmaW5lIEtFWV9UV0VOCQkweDE5ZgorI2RlZmluZSBLRVlfVklERU9QSE9ORQkJMHgxYTAKKyNkZWZpbmUgS0VZX0dBTUVTCQkweDFhMQorI2RlZmluZSBLRVlfWk9PTUlOCQkweDFhMgorI2RlZmluZSBLRVlfWk9PTU9VVAkJMHgxYTMKKyNkZWZpbmUgS0VZX1pPT01SRVNFVAkJMHgxYTQKKyNkZWZpbmUgS0VZX1dPUkRQUk9DRVNTT1IJMHgxYTUKKyNkZWZpbmUgS0VZX0VESVRPUgkJMHgxYTYKKyNkZWZpbmUgS0VZX1NQUkVBRFNIRUVUCQkweDFhNworI2RlZmluZSBLRVlfR1JBUEhJQ1NFRElUT1IJMHgxYTgKKyNkZWZpbmUgS0VZX1BSRVNFTlRBVElPTgkweDFhOQorI2RlZmluZSBLRVlfREFUQUJBU0UJCTB4MWFhCisjZGVmaW5lIEtFWV9ORVdTCQkweDFhYgorI2RlZmluZSBLRVlfVk9JQ0VNQUlMCQkweDFhYworI2RlZmluZSBLRVlfQUREUkVTU0JPT0sJCTB4MWFkCisjZGVmaW5lIEtFWV9NRVNTRU5HRVIJCTB4MWFlCiAKICNkZWZpbmUgS0VZX0RFTF9FT0wJCTB4MWMwCiAjZGVmaW5lIEtFWV9ERUxfRU9TCQkweDFjMQpAQCAtNjYzLDcgKzY3OCw3IEBACiAjZGVmaW5lIEJVU19HU0MJCQkweDFBCiAKIC8qCi0gKiBWYWx1ZXMgZGVzY3JpYmluZyB0aGUgc3RhdHVzIG9mIGFuIGVmZmVjdAorICogVmFsdWVzIGRlc2NyaWJpbmcgdGhlIHN0YXR1cyBvZiBhIGZvcmNlLWZlZWRiYWNrIGVmZmVjdAogICovCiAjZGVmaW5lIEZGX1NUQVRVU19TVE9QUEVECTB4MDAKICNkZWZpbmUgRkZfU1RBVFVTX1BMQVlJTkcJMHgwMQpAQCAtNjgwLDcgKzY5NSw3IEBACiAgKi8KIAogLyoqCi0gKiBzdHJ1Y3QgZmZfcmVwbGF5IC0gZGVmaW5lcyBzY2hlZHVsaW5nIG9mIHRoZSBlZmZlY3QKKyAqIHN0cnVjdCBmZl9yZXBsYXkgLSBkZWZpbmVzIHNjaGVkdWxpbmcgb2YgdGhlIGZvcmNlLWZlZWRiYWNrIGVmZmVjdAogICogQGxlbmd0aDogZHVyYXRpb24gb2YgdGhlIGVmZmVjdAogICogQGRlbGF5OiBkZWxheSBiZWZvcmUgZWZmZWN0IHNob3VsZCBzdGFydCBwbGF5aW5nCiAgKi8KQEAgLTY5MCw3ICs3MDUsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgZmZfdHJpZ2dlciAtIGRlZmluZXMgd2hhdCB0cmlnZ2VycyB0aGUgZWZmZWN0CisgKiBzdHJ1Y3QgZmZfdHJpZ2dlciAtIGRlZmluZXMgd2hhdCB0cmlnZ2VycyB0aGUgZm9yY2UtZmVlZGJhY2sgZWZmZWN0CiAgKiBAYnV0dG9uOiBudW1iZXIgb2YgdGhlIGJ1dHRvbiB0cmlnZ2VyaW5nIHRoZSBlZmZlY3QKICAqIEBpbnRlcnZhbDogY29udHJvbHMgaG93IHNvb24gdGhlIGVmZmVjdCBjYW4gYmUgcmUtdHJpZ2dlcmVkCiAgKi8KQEAgLTcwMCw3ICs3MTUsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgZmZfZW52ZWxvcGUgLSBnZW5lcmljIGVmZmVjdCBlbnZlbG9wZQorICogc3RydWN0IGZmX2VudmVsb3BlIC0gZ2VuZXJpYyBmb3JjZS1mZWVkYmFjayBlZmZlY3QgZW52ZWxvcGUKICAqIEBhdHRhY2tfbGVuZ3RoOiBkdXJhdGlvbiBvZiB0aGUgYXR0YWNrIChtcykKICAqIEBhdHRhY2tfbGV2ZWw6IGxldmVsIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGF0dGFjawogICogQGZhZGVfbGVuZ3RoOiBkdXJhdGlvbiBvZiBmYWRlIChtcykKQEAgLTcxOSw3ICs3MzQsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgZmZfY29uc3RhbnRfZWZmZWN0IC0gZGVmaW5lcyBwYXJhbWV0ZXJzIG9mIGEgY29uc3RhbnQgZWZmZWN0CisgKiBzdHJ1Y3QgZmZfY29uc3RhbnRfZWZmZWN0IC0gZGVmaW5lcyBwYXJhbWV0ZXJzIG9mIGEgY29uc3RhbnQgZm9yY2UtZmVlZGJhY2sgZWZmZWN0CiAgKiBAbGV2ZWw6IHN0cmVuZ3RoIG9mIHRoZSBlZmZlY3Q7IG1heSBiZSBuZWdhdGl2ZQogICogQGVudmVsb3BlOiBlbnZlbG9wZSBkYXRhCiAgKi8KQEAgLTcyOSw3ICs3NDQsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgZmZfcmFtcF9lZmZlY3QgLSBkZWZpbmVzIHBhcmFtZXRlcnMgb2YgYSByYW1wIGVmZmVjdAorICogc3RydWN0IGZmX3JhbXBfZWZmZWN0IC0gZGVmaW5lcyBwYXJhbWV0ZXJzIG9mIGEgcmFtcCBmb3JjZS1mZWVkYmFjayBlZmZlY3QKICAqIEBzdGFydF9sZXZlbDogYmVnaW5uaW5nIHN0cmVuZ3RoIG9mIHRoZSBlZmZlY3Q7IG1heSBiZSBuZWdhdGl2ZQogICogQGVuZF9sZXZlbDogZmluYWwgc3RyZW5ndGggb2YgdGhlIGVmZmVjdDsgbWF5IGJlIG5lZ2F0aXZlCiAgKiBAZW52ZWxvcGU6IGVudmVsb3BlIGRhdGEKQEAgLTc0MSw3ICs3NTYsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgZmZfY29uZGl0aW9uX2VmZmVjdCAtIGRlZmluZXMgYSBzcHJpbmcgb3IgZnJpY3Rpb24gZWZmZWN0CisgKiBzdHJ1Y3QgZmZfY29uZGl0aW9uX2VmZmVjdCAtIGRlZmluZXMgYSBzcHJpbmcgb3IgZnJpY3Rpb24gZm9yY2UtZmVlZGJhY2sgZWZmZWN0CiAgKiBAcmlnaHRfc2F0dXJhdGlvbjogbWF4aW11bSBsZXZlbCB3aGVuIGpveXN0aWNrIG1vdmVkIGFsbCB3YXkgdG8gdGhlIHJpZ2h0CiAgKiBAbGVmdF9zYXR1cmF0aW9uOiBzYW1lIGZvciB0aGUgbGVmdCBzaWRlCiAgKiBAcmlnaHRfY29lZmY6IGNvbnRyb2xzIGhvdyBmYXN0IHRoZSBmb3JjZSBncm93cyB3aGVuIHRoZSBqb3lzdGljayBtb3ZlcwpAQCAtNzYyLDcgKzc3Nyw3IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBmZl9wZXJpb2RpY19lZmZlY3QgLSBkZWZpbmVzIHBhcmFtZXRlcnMgb2YgYSBwZXJpb2RpYyBlZmZlY3QKKyAqIHN0cnVjdCBmZl9wZXJpb2RpY19lZmZlY3QgLSBkZWZpbmVzIHBhcmFtZXRlcnMgb2YgYSBwZXJpb2RpYyBmb3JjZS1mZWVkYmFjayBlZmZlY3QKICAqIEB3YXZlZm9ybToga2luZCBvZiB0aGUgZWZmZWN0ICh3YXZlKQogICogQHBlcmlvZDogcGVyaW9kIG9mIHRoZSB3YXZlIChtcykKICAqIEBtYWduaXR1ZGU6IHBlYWsgdmFsdWUKQEAgLTc5Myw3ICs4MDgsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgZmZfcnVtYmxlX2VmZmVjdCAtIGRlZmluZXMgcGFyYW1ldGVycyBvZiBhIHBlcmlvZGljIGVmZmVjdAorICogc3RydWN0IGZmX3J1bWJsZV9lZmZlY3QgLSBkZWZpbmVzIHBhcmFtZXRlcnMgb2YgYSBwZXJpb2RpYyBmb3JjZS1mZWVkYmFjayBlZmZlY3QKICAqIEBzdHJvbmdfbWFnbml0dWRlOiBtYWduaXR1ZGUgb2YgdGhlIGhlYXZ5IG1vdG9yCiAgKiBAd2Vha19tYWduaXR1ZGU6IG1hZ25pdHVkZSBvZiB0aGUgbGlnaHQgb25lCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggZGU3NTkzZi4uZTM2ZTg2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC0yMzEsNyArMjMxLDggQEAKIAlORVRfVFhfU09GVElSUSwKIAlORVRfUlhfU09GVElSUSwKIAlCTE9DS19TT0ZUSVJRLAotCVRBU0tMRVRfU09GVElSUQorCVRBU0tMRVRfU09GVElSUSwKKwlTQ0hFRF9TT0ZUSVJRLAogfTsKIAogLyogc29mdGlycSBtYXNrIGFuZCBhY3RpdmUgZmllbGRzIG1vdmVkIHRvIGlycV9jcHVzdGF0X3QgaW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCmluZGV4IGNmODY5NmQuLjE1MjI4ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pb3BvcnQuaApAQCAtOTEsNiArOTEsOSBAQAogI2RlZmluZSBJT1JFU09VUkNFX1JPTV9DT1BZCQkoMTw8MikJLyogUk9NIGlzIGFsbG9jJ2QgY29weSwgcmVzb3VyY2UgZmllbGQgb3ZlcmxhaWQgKi8KICNkZWZpbmUgSU9SRVNPVVJDRV9ST01fQklPU19DT1BZCSgxPDwzKQkvKiBST00gaXMgQklPUyBjb3B5LCByZXNvdXJjZSBmaWVsZCBvdmVybGFpZCAqLwogCisvKiBQQ0kgY29udHJvbCBiaXRzLiAgU2hhcmVzIElPUkVTT1VSQ0VfQklUUyB3aXRoIGFib3ZlIFBDSSBST00uICAqLworI2RlZmluZSBJT1JFU09VUkNFX1BDSV9GSVhFRAkJKDE8PDQpCS8qIERvIG5vdCBtb3ZlIHJlc291cmNlICovCisKIC8qIFBDL0lTQS93aGF0ZXZlciAtIHRoZSBub3JtYWwgUEMgYWRkcmVzcyBzcGFjZXM6IElPIGFuZCBtZW1vcnkgKi8KIGV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgaW9wb3J0X3Jlc291cmNlOwogZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSBpb21lbV9yZXNvdXJjZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi5oIGIvaW5jbHVkZS9saW51eC9pc2RuLmgKaW5kZXggNjI5OTExNC4uM2M3ODc1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc2RuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuLmgKQEAgLTUxMSw4ICs1MTEsOCBAQAogI2VuZGlmCiAgIHN0cnVjdCB0dHlfc3RydWN0IAkqdHR5OyAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gY29ycmVzcG9uZGluZyB0dHkgICAqLwogICBhdGVtdSAgICAgICAgICAgICAgICAgZW11OyAgICAgICAgICAgICAvKiBBVC1lbXVsYXRvciBkYXRhICAgICAgICAgICAgICAgKi8KLSAgc3RydWN0IHRlcm1pb3MJbm9ybWFsX3Rlcm1pb3M7ICAvKiBGb3Igc2F2aW5nIHRlcm1pb3Mgc3RydWN0cyAgICAgKi8KLSAgc3RydWN0IHRlcm1pb3MJY2FsbG91dF90ZXJtaW9zOworICBzdHJ1Y3Qga3Rlcm1pb3MJbm9ybWFsX3Rlcm1pb3M7ICAvKiBGb3Igc2F2aW5nIHRlcm1pb3Mgc3RydWN0cyAgICAgKi8KKyAgc3RydWN0IGt0ZXJtaW9zCWNhbGxvdXRfdGVybWlvczsKICAgd2FpdF9xdWV1ZV9oZWFkX3QJb3Blbl93YWl0LCBjbG9zZV93YWl0OwogICBzdHJ1Y3Qgc2VtYXBob3JlICAgICAgd3JpdGVfc2VtOwogICBzcGlubG9ja190CSAgICAgICAgcmVhZGxvY2s7CkBAIC01MjUsOCArNTI1LDggQEAKICAgaW50ICAgICAgICAgICAgICAgIHJlZmNvdW50OwkJCQkvKiBOdW1iZXIgb2Ygb3BlbnMgICAgICAgICovCiAgIHN0cnVjdCB0dHlfZHJpdmVyICAqdHR5X21vZGVtOwkJCS8qIHR0eS1kZXZpY2UgICAgICAgICAgICAgKi8KICAgc3RydWN0IHR0eV9zdHJ1Y3QgICptb2RlbV90YWJsZVtJU0ROX01BWF9DSEFOTkVMU107CS8qID8/IGNvcGllZCBmcm9tIE9yaWcgICAgKi8KLSAgc3RydWN0IHRlcm1pb3MgICAgICptb2RlbV90ZXJtaW9zW0lTRE5fTUFYX0NIQU5ORUxTXTsKLSAgc3RydWN0IHRlcm1pb3MgICAgICptb2RlbV90ZXJtaW9zX2xvY2tlZFtJU0ROX01BWF9DSEFOTkVMU107CisgIHN0cnVjdCBrdGVybWlvcyAgICAgKm1vZGVtX3Rlcm1pb3NbSVNETl9NQVhfQ0hBTk5FTFNdOworICBzdHJ1Y3Qga3Rlcm1pb3MgICAgICptb2RlbV90ZXJtaW9zX2xvY2tlZFtJU0ROX01BWF9DSEFOTkVMU107CiAgIG1vZGVtX2luZm8gICAgICAgICBpbmZvW0lTRE5fTUFYX0NIQU5ORUxTXTsJICAgLyogUHJpdmF0ZSBkYXRhICAgICAgICAgICAqLwogfSBpc2RuX21vZGVtX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXN0YWxsaW9uLmggYi9pbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oCmluZGV4IGI1NWUyYTAuLjEwNmE1ZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXN0YWxsaW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc3RhbGxpb24uaApAQCAtNDksMTMgKzQ5LDEzIEBACiAgKgljb21tdW5pY2F0aW9uIHdpdGggdGhlIHNsYXZlIGJvYXJkIHdpbGwgYWx3YXlzIGJlIG9uIGEgcGVyIHBvcnQKICAqCWJhc2lzLgogICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3Qgc3RsaXBvcnQgewogCXVuc2lnbmVkIGxvbmcJCW1hZ2ljOwotCWludAkJCXBvcnRucjsKLQlpbnQJCQlwYW5lbG5yOwotCWludAkJCWJyZG5yOworCXVuc2lnbmVkIGludAkJcG9ydG5yOworCXVuc2lnbmVkIGludAkJcGFuZWxucjsKKwl1bnNpZ25lZCBpbnQJCWJyZG5yOwogCXVuc2lnbmVkIGxvbmcJCXN0YXRlOwotCWludAkJCWRldm5yOworCXVuc2lnbmVkIGludAkJZGV2bnI7CiAJaW50CQkJZmxhZ3M7CiAJaW50CQkJYmF1ZF9iYXNlOwogCWludAkJCWN1c3RvbV9kaXZpc29yOwpAQCAtNzIsNyArNzIsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90CWNsb3NlX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJcmF3X3dhaXQ7CiAJc3RydWN0IHdvcmtfc3RydWN0CXRxaGFuZ3VwOwotCWFzeXNpZ3NfdAkJYXNpZzsKKwlzdHJ1Y3QgYXN5c2lncwkJYXNpZzsKIAl1bnNpZ25lZCBsb25nCQlhZGRyOwogCXVuc2lnbmVkIGxvbmcJCXJ4b2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcJCXR4b2Zmc2V0OwpAQCAtODMsMzEgKzgzLDMxIEBACiAJdW5zaWduZWQgY2hhcgkJcmVxYml0OwogCXVuc2lnbmVkIGNoYXIJCXBvcnRpZHg7CiAJdW5zaWduZWQgY2hhcgkJcG9ydGJpdDsKLX0gc3RsaXBvcnRfdDsKK307CiAKIC8qCiAgKglVc2UgYSBzdHJ1Y3R1cmUgb2YgZnVuY3Rpb24gcG9pbnRlcnMgdG8gZG8gYm9hcmQgbGV2ZWwgb3BlcmF0aW9ucy4KICAqCVRoZXNlIGluY2x1ZGUsIGVuYWJsZS9kaXNhYmxlLCBwYWdpbmcgc2hhcmVkIG1lbW9yeSwgaW50ZXJydXB0aW5nLCBldGMuCiAgKi8KLXR5cGVkZWYgc3RydWN0IHN0bGlicmQgeworc3RydWN0IHN0bGlicmQgewogCXVuc2lnbmVkIGxvbmcJbWFnaWM7Ci0JaW50CQlicmRucjsKLQlpbnQJCWJyZHR5cGU7Ci0JaW50CQlzdGF0ZTsKLQlpbnQJCW5ycGFuZWxzOwotCWludAkJbnJwb3J0czsKLQlpbnQJCW5yZGV2czsKKwl1bnNpZ25lZCBpbnQJYnJkbnI7CisJdW5zaWduZWQgaW50CWJyZHR5cGU7CisJdW5zaWduZWQgaW50CXN0YXRlOworCXVuc2lnbmVkIGludAlucnBhbmVsczsKKwl1bnNpZ25lZCBpbnQJbnJwb3J0czsKKwl1bnNpZ25lZCBpbnQJbnJkZXZzOwogCXVuc2lnbmVkIGludAlpb2Jhc2U7CiAJaW50CQlpb3NpemU7CiAJdW5zaWduZWQgbG9uZwltZW1hZGRyOwogCXZvaWQJCV9faW9tZW0gKm1lbWJhc2U7Ci0JaW50CQltZW1zaXplOworCXVuc2lnbmVkIGxvbmcJbWVtc2l6ZTsKIAlpbnQJCXBhZ2VzaXplOwogCWludAkJaG9zdG9mZnNldDsKIAlpbnQJCXNsYXZlb2Zmc2V0OwogCWludAkJYml0c2l6ZTsKIAlpbnQJCWVuYWJ2YWw7Ci0JaW50CQlwYW5lbHNbU1RMX01BWFBBTkVMU107CisJdW5zaWduZWQgaW50CXBhbmVsc1tTVExfTUFYUEFORUxTXTsKIAlpbnQJCXBhbmVsaWRzW1NUTF9NQVhQQU5FTFNdOwogCXZvaWQJCSgqaW5pdCkoc3RydWN0IHN0bGlicmQgKmJyZHApOwogCXZvaWQJCSgqZW5hYmxlKShzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CkBAIC0xMTYsOCArMTE2LDggQEAKIAl2b2lkCQlfX2lvbWVtICooKmdldG1lbXB0cikoc3RydWN0IHN0bGlicmQgKmJyZHAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgbGluZSk7CiAJdm9pZAkJKCppbnRyKShzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CiAJdm9pZAkJKCpyZXNldCkoc3RydWN0IHN0bGlicmQgKmJyZHApOwotCXN0bGlwb3J0X3QJKnBvcnRzW1NUTF9NQVhQT1JUU107Ci19IHN0bGlicmRfdDsKKwlzdHJ1Y3Qgc3RsaXBvcnQJKnBvcnRzW1NUTF9NQVhQT1JUU107Cit9OwogCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCA2NzM4MjgzLi42M2ZiMThkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xMywxMCArMTMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAKIGV4dGVybiBjb25zdCBjaGFyIGxpbnV4X2Jhbm5lcltdOworZXh0ZXJuIGNvbnN0IGNoYXIgbGludXhfcHJvY19iYW5uZXJbXTsKIAogI2RlZmluZSBJTlRfTUFYCQkoKGludCkofjBVPj4xKSkKICNkZWZpbmUgSU5UX01JTgkJKC1JTlRfTUFYIC0gMSkKQEAgLTE1NywyMCArMTU5LDYgQEAKIAogdW5zaWduZWQgbG9uZyBpbnRfc3FydCh1bnNpZ25lZCBsb25nKTsKIAotc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfcHVyZV9fIGxvbmdfbG9nMih1bnNpZ25lZCBsb25nIHgpCi17Ci0JaW50IHIgPSAwOwotCWZvciAoeCA+Pj0gMTsgeCA+IDA7IHggPj49IDEpCi0JCXIrKzsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2F0dHJpYnV0ZV9jb25zdF9fIHJvdW5kdXBfcG93X29mX3R3byh1bnNpZ25lZCBsb25nIHgpCi17Ci0JcmV0dXJuIDFVTCA8PCBmbHNfbG9uZyh4IC0gMSk7Ci19Ci0KIGV4dGVybiBpbnQgcHJpbnRrX3JhdGVsaW1pdCh2b2lkKTsKIGV4dGVybiBpbnQgX19wcmludGtfcmF0ZWxpbWl0KGludCByYXRlbGltaXRfamlmZmllcywgaW50IHJhdGVsaW1pdF9idXJzdCk7CiBleHRlcm4gYm9vbCBwcmludGtfdGltZWRfcmF0ZWxpbWl0KHVuc2lnbmVkIGxvbmcgKmNhbGxlcl9qaWZmaWVzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmggYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAppbmRleCBkMWM4ZDI4Li43NjUzOGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaApAQCAtMjY1LDggKzI2NSw4IEBACiAJCQkJCXN0cnVjdCBzdWJzeXNfYXR0cmlidXRlICopOwogCiAjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVRykKLXZvaWQga29iamVjdF91ZXZlbnQoc3RydWN0IGtvYmplY3QgKmtvYmosIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uKTsKLXZvaWQga29iamVjdF91ZXZlbnRfZW52KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBlbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbiwKK2ludCBrb2JqZWN0X3VldmVudChzdHJ1Y3Qga29iamVjdCAqa29iaiwgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24pOworaW50IGtvYmplY3RfdWV2ZW50X2VudihzdHJ1Y3Qga29iamVjdCAqa29iaiwgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24sCiAJCQljaGFyICplbnZwW10pOwogCiBpbnQgYWRkX3VldmVudF92YXIoY2hhciAqKmVudnAsIGludCBudW1fZW52cCwgaW50ICpjdXJfaW5kZXgsCkBAIC0yNzQsMTEgKzI3NCwxMiBAQAogCQkJY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDcsIDgpKSk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGtvYmplY3RfdWV2ZW50KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBlbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbikgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQga29iamVjdF91ZXZlbnRfZW52KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorc3RhdGljIGlubGluZSBpbnQga29iamVjdF91ZXZlbnQoc3RydWN0IGtvYmplY3QgKmtvYmosIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uKQoreyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQga29iamVjdF91ZXZlbnRfZW52KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSAgICAgIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uLAogCQkJCSAgICAgIGNoYXIgKmVudnBbXSkKLXsgfQoreyByZXR1cm4gMDsgfQogCiBzdGF0aWMgaW5saW5lIGludCBhZGRfdWV2ZW50X3ZhcihjaGFyICoqZW52cCwgaW50IG51bV9lbnZwLCBpbnQgKmN1cl9pbmRleCwKIAkJCQkgICAgICBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgaW50ICpjdXJfbGVuLCAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtLmggYi9pbmNsdWRlL2xpbnV4L2t2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZTE0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bS5oCkBAIC0wLDAgKzEsMjQwIEBACisjaWZuZGVmIF9fTElOVVhfS1ZNX0gKKyNkZWZpbmUgX19MSU5VWF9LVk1fSAorCisvKgorICogVXNlcnNwYWNlIGludGVyZmFjZSBmb3IgL2Rldi9rdm0gLSBrZXJuZWwgYmFzZWQgdmlydHVhbCBtYWNoaW5lCisgKgorICogTm90ZTogdGhpcyBpbnRlcmZhY2UgaXMgY29uc2lkZXJlZCBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2Ugd2l0aG91dAorICogICAgICAgbm90aWNlLgorICovCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIEtWTV9BUElfVkVSU0lPTiAyCisKKy8qCisgKiBBcmNoaXRlY3R1cmFsIGludGVycnVwdCBsaW5lIGNvdW50LCBhbmQgdGhlIHNpemUgb2YgdGhlIGJpdG1hcCBuZWVkZWQKKyAqIHRvIGhvbGQgdGhlbS4KKyAqLworI2RlZmluZSBLVk1fTlJfSU5URVJSVVBUUyAyNTYKKyNkZWZpbmUgS1ZNX0lSUV9CSVRNQVBfU0laRV9CWVRFUyAgICAoKEtWTV9OUl9JTlRFUlJVUFRTICsgNykgLyA4KQorI2RlZmluZSBLVk1fSVJRX0JJVE1BUF9TSVpFKHR5cGUpICAgIChLVk1fSVJRX0JJVE1BUF9TSVpFX0JZVEVTIC8gc2l6ZW9mKHR5cGUpKQorCisKKy8qIGZvciBLVk1fQ1JFQVRFX01FTU9SWV9SRUdJT04gKi8KK3N0cnVjdCBrdm1fbWVtb3J5X3JlZ2lvbiB7CisJX191MzIgc2xvdDsKKwlfX3UzMiBmbGFnczsKKwlfX3U2NCBndWVzdF9waHlzX2FkZHI7CisJX191NjQgbWVtb3J5X3NpemU7IC8qIGJ5dGVzICovCit9OworCisvKiBmb3Iga3ZtX21lbW9yeV9yZWdpb246OmZsYWdzICovCisjZGVmaW5lIEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTICAxVUwKKworCisjZGVmaW5lIEtWTV9FWElUX1RZUEVfRkFJTF9FTlRSWSAxCisjZGVmaW5lIEtWTV9FWElUX1RZUEVfVk1fRVhJVCAgICAyCisKK2VudW0ga3ZtX2V4aXRfcmVhc29uIHsKKwlLVk1fRVhJVF9VTktOT1dOICAgICAgICAgID0gMCwKKwlLVk1fRVhJVF9FWENFUFRJT04gICAgICAgID0gMSwKKwlLVk1fRVhJVF9JTyAgICAgICAgICAgICAgID0gMiwKKwlLVk1fRVhJVF9DUFVJRCAgICAgICAgICAgID0gMywKKwlLVk1fRVhJVF9ERUJVRyAgICAgICAgICAgID0gNCwKKwlLVk1fRVhJVF9ITFQgICAgICAgICAgICAgID0gNSwKKwlLVk1fRVhJVF9NTUlPICAgICAgICAgICAgID0gNiwKKwlLVk1fRVhJVF9JUlFfV0lORE9XX09QRU4gID0gNywKKwlLVk1fRVhJVF9TSFVURE9XTiAgICAgICAgID0gOCwKK307CisKKy8qIGZvciBLVk1fUlVOICovCitzdHJ1Y3Qga3ZtX3J1biB7CisJLyogaW4gKi8KKwlfX3UzMiB2Y3B1OworCV9fdTMyIGVtdWxhdGVkOyAgLyogc2tpcCBjdXJyZW50IGluc3RydWN0aW9uICovCisJX191MzIgbW1pb19jb21wbGV0ZWQ7IC8qIG1taW8gcmVxdWVzdCBjb21wbGV0ZWQgKi8KKwlfX3U4IHJlcXVlc3RfaW50ZXJydXB0X3dpbmRvdzsKKwlfX3U4IHBhZGRpbmcxWzNdOworCisJLyogb3V0ICovCisJX191MzIgZXhpdF90eXBlOworCV9fdTMyIGV4aXRfcmVhc29uOworCV9fdTMyIGluc3RydWN0aW9uX2xlbmd0aDsKKwlfX3U4IHJlYWR5X2Zvcl9pbnRlcnJ1cHRfaW5qZWN0aW9uOworCV9fdTggaWZfZmxhZzsKKwlfX3UxNiBwYWRkaW5nMjsKKwlfX3U2NCBjcjg7CisJX191NjQgYXBpY19iYXNlOworCisJdW5pb24geworCQkvKiBLVk1fRVhJVF9VTktOT1dOICovCisJCXN0cnVjdCB7CisJCQlfX3UzMiBoYXJkd2FyZV9leGl0X3JlYXNvbjsKKwkJfSBodzsKKwkJLyogS1ZNX0VYSVRfRVhDRVBUSU9OICovCisJCXN0cnVjdCB7CisJCQlfX3UzMiBleGNlcHRpb247CisJCQlfX3UzMiBlcnJvcl9jb2RlOworCQl9IGV4OworCQkvKiBLVk1fRVhJVF9JTyAqLworCQlzdHJ1Y3QgeworI2RlZmluZSBLVk1fRVhJVF9JT19JTiAgMAorI2RlZmluZSBLVk1fRVhJVF9JT19PVVQgMQorCQkJX191OCBkaXJlY3Rpb247CisJCQlfX3U4IHNpemU7IC8qIGJ5dGVzICovCisJCQlfX3U4IHN0cmluZzsKKwkJCV9fdTggc3RyaW5nX2Rvd247CisJCQlfX3U4IHJlcDsKKwkJCV9fdTggcGFkOworCQkJX191MTYgcG9ydDsKKwkJCV9fdTY0IGNvdW50OworCQkJdW5pb24geworCQkJCV9fdTY0IGFkZHJlc3M7CisJCQkJX191MzIgdmFsdWU7CisJCQl9OworCQl9IGlvOworCQlzdHJ1Y3QgeworCQl9IGRlYnVnOworCQkvKiBLVk1fRVhJVF9NTUlPICovCisJCXN0cnVjdCB7CisJCQlfX3U2NCBwaHlzX2FkZHI7CisJCQlfX3U4ICBkYXRhWzhdOworCQkJX191MzIgbGVuOworCQkJX191OCAgaXNfd3JpdGU7CisJCX0gbW1pbzsKKwl9OworfTsKKworLyogZm9yIEtWTV9HRVRfUkVHUyBhbmQgS1ZNX1NFVF9SRUdTICovCitzdHJ1Y3Qga3ZtX3JlZ3MgeworCS8qIGluICovCisJX191MzIgdmNwdTsKKwlfX3UzMiBwYWRkaW5nOworCisJLyogb3V0IChLVk1fR0VUX1JFR1MpIC8gaW4gKEtWTV9TRVRfUkVHUykgKi8KKwlfX3U2NCByYXgsIHJieCwgcmN4LCByZHg7CisJX191NjQgcnNpLCByZGksIHJzcCwgcmJwOworCV9fdTY0IHI4LCAgcjksICByMTAsIHIxMTsKKwlfX3U2NCByMTIsIHIxMywgcjE0LCByMTU7CisJX191NjQgcmlwLCByZmxhZ3M7Cit9OworCitzdHJ1Y3Qga3ZtX3NlZ21lbnQgeworCV9fdTY0IGJhc2U7CisJX191MzIgbGltaXQ7CisJX191MTYgc2VsZWN0b3I7CisJX191OCAgdHlwZTsKKwlfX3U4ICBwcmVzZW50LCBkcGwsIGRiLCBzLCBsLCBnLCBhdmw7CisJX191OCAgdW51c2FibGU7CisJX191OCAgcGFkZGluZzsKK307CisKK3N0cnVjdCBrdm1fZHRhYmxlIHsKKwlfX3U2NCBiYXNlOworCV9fdTE2IGxpbWl0OworCV9fdTE2IHBhZGRpbmdbM107Cit9OworCisvKiBmb3IgS1ZNX0dFVF9TUkVHUyBhbmQgS1ZNX1NFVF9TUkVHUyAqLworc3RydWN0IGt2bV9zcmVncyB7CisJLyogaW4gKi8KKwlfX3UzMiB2Y3B1OworCV9fdTMyIHBhZGRpbmc7CisKKwkvKiBvdXQgKEtWTV9HRVRfU1JFR1MpIC8gaW4gKEtWTV9TRVRfU1JFR1MpICovCisJc3RydWN0IGt2bV9zZWdtZW50IGNzLCBkcywgZXMsIGZzLCBncywgc3M7CisJc3RydWN0IGt2bV9zZWdtZW50IHRyLCBsZHQ7CisJc3RydWN0IGt2bV9kdGFibGUgZ2R0LCBpZHQ7CisJX191NjQgY3IwLCBjcjIsIGNyMywgY3I0LCBjcjg7CisJX191NjQgZWZlcjsKKwlfX3U2NCBhcGljX2Jhc2U7CisJX191NjQgaW50ZXJydXB0X2JpdG1hcFtLVk1fSVJRX0JJVE1BUF9TSVpFKF9fdTY0KV07Cit9OworCitzdHJ1Y3Qga3ZtX21zcl9lbnRyeSB7CisJX191MzIgaW5kZXg7CisJX191MzIgcmVzZXJ2ZWQ7CisJX191NjQgZGF0YTsKK307CisKKy8qIGZvciBLVk1fR0VUX01TUlMgYW5kIEtWTV9TRVRfTVNSUyAqLworc3RydWN0IGt2bV9tc3JzIHsKKwlfX3UzMiB2Y3B1OworCV9fdTMyIG5tc3JzOyAvKiBudW1iZXIgb2YgbXNycyBpbiBlbnRyaWVzICovCisKKwlzdHJ1Y3Qga3ZtX21zcl9lbnRyeSBlbnRyaWVzWzBdOworfTsKKworLyogZm9yIEtWTV9HRVRfTVNSX0lOREVYX0xJU1QgKi8KK3N0cnVjdCBrdm1fbXNyX2xpc3QgeworCV9fdTMyIG5tc3JzOyAvKiBudW1iZXIgb2YgbXNycyBpbiBlbnRyaWVzICovCisJX191MzIgaW5kaWNlc1swXTsKK307CisKKy8qIGZvciBLVk1fVFJBTlNMQVRFICovCitzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uIHsKKwkvKiBpbiAqLworCV9fdTY0IGxpbmVhcl9hZGRyZXNzOworCV9fdTMyIHZjcHU7CisJX191MzIgcGFkZGluZzsKKworCS8qIG91dCAqLworCV9fdTY0IHBoeXNpY2FsX2FkZHJlc3M7CisJX191OCAgdmFsaWQ7CisJX191OCAgd3JpdGVhYmxlOworCV9fdTggIHVzZXJtb2RlOworfTsKKworLyogZm9yIEtWTV9JTlRFUlJVUFQgKi8KK3N0cnVjdCBrdm1faW50ZXJydXB0IHsKKwkvKiBpbiAqLworCV9fdTMyIHZjcHU7CisJX191MzIgaXJxOworfTsKKworc3RydWN0IGt2bV9icmVha3BvaW50IHsKKwlfX3UzMiBlbmFibGVkOworCV9fdTMyIHBhZGRpbmc7CisJX191NjQgYWRkcmVzczsKK307CisKKy8qIGZvciBLVk1fREVCVUdfR1VFU1QgKi8KK3N0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgeworCS8qIGludCAqLworCV9fdTMyIHZjcHU7CisJX191MzIgZW5hYmxlZDsKKwlzdHJ1Y3Qga3ZtX2JyZWFrcG9pbnQgYnJlYWtwb2ludHNbNF07CisJX191MzIgc2luZ2xlc3RlcDsKK307CisKKy8qIGZvciBLVk1fR0VUX0RJUlRZX0xPRyAqLworc3RydWN0IGt2bV9kaXJ0eV9sb2cgeworCV9fdTMyIHNsb3Q7CisJX191MzIgcGFkZGluZzsKKwl1bmlvbiB7CisJCXZvaWQgX191c2VyICpkaXJ0eV9iaXRtYXA7IC8qIG9uZSBiaXQgcGVyIHBhZ2UgKi8KKwkJX191NjQgcGFkZGluZzsKKwl9OworfTsKKworI2RlZmluZSBLVk1JTyAweEFFCisKKyNkZWZpbmUgS1ZNX0dFVF9BUElfVkVSU0lPTiAgICAgICBfSU8oS1ZNSU8sIDEpCisjZGVmaW5lIEtWTV9SVU4gICAgICAgICAgICAgICAgICAgX0lPV1IoS1ZNSU8sIDIsIHN0cnVjdCBrdm1fcnVuKQorI2RlZmluZSBLVk1fR0VUX1JFR1MgICAgICAgICAgICAgIF9JT1dSKEtWTUlPLCAzLCBzdHJ1Y3Qga3ZtX3JlZ3MpCisjZGVmaW5lIEtWTV9TRVRfUkVHUyAgICAgICAgICAgICAgX0lPVyhLVk1JTywgNCwgc3RydWN0IGt2bV9yZWdzKQorI2RlZmluZSBLVk1fR0VUX1NSRUdTICAgICAgICAgICAgIF9JT1dSKEtWTUlPLCA1LCBzdHJ1Y3Qga3ZtX3NyZWdzKQorI2RlZmluZSBLVk1fU0VUX1NSRUdTICAgICAgICAgICAgIF9JT1coS1ZNSU8sIDYsIHN0cnVjdCBrdm1fc3JlZ3MpCisjZGVmaW5lIEtWTV9UUkFOU0xBVEUgICAgICAgICAgICAgX0lPV1IoS1ZNSU8sIDcsIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24pCisjZGVmaW5lIEtWTV9JTlRFUlJVUFQgICAgICAgICAgICAgX0lPVyhLVk1JTywgOCwgc3RydWN0IGt2bV9pbnRlcnJ1cHQpCisjZGVmaW5lIEtWTV9ERUJVR19HVUVTVCAgICAgICAgICAgX0lPVyhLVk1JTywgOSwgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCkKKyNkZWZpbmUgS1ZNX1NFVF9NRU1PUllfUkVHSU9OICAgICBfSU9XKEtWTUlPLCAxMCwgc3RydWN0IGt2bV9tZW1vcnlfcmVnaW9uKQorI2RlZmluZSBLVk1fQ1JFQVRFX1ZDUFUgICAgICAgICAgIF9JT1coS1ZNSU8sIDExLCBpbnQgLyogdmNwdV9zbG90ICovKQorI2RlZmluZSBLVk1fR0VUX0RJUlRZX0xPRyAgICAgICAgIF9JT1coS1ZNSU8sIDEyLCBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZykKKyNkZWZpbmUgS1ZNX0dFVF9NU1JTICAgICAgICAgICAgICBfSU9XUihLVk1JTywgMTMsIHN0cnVjdCBrdm1fbXNycykKKyNkZWZpbmUgS1ZNX1NFVF9NU1JTICAgICAgICAgICAgICBfSU9XUihLVk1JTywgMTQsIHN0cnVjdCBrdm1fbXNycykKKyNkZWZpbmUgS1ZNX0dFVF9NU1JfSU5ERVhfTElTVCAgICBfSU9XUihLVk1JTywgMTUsIHN0cnVjdCBrdm1fbXNyX2xpc3QpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggYWIyNzU0OC4uOTFiYjhjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC0xNzcsNiArMTc3LDcgQEAKIAkJCQkJICAgICAgKiBSZWdpc3RlciBGSVMgY2xlYXJpbmcgQlNZICovCiAJQVRBX0ZMQUdfREVCVUdNU0cJPSAoMSA8PCAxMyksCiAJQVRBX0ZMQUdfU0VUWEZFUl9QT0xMSU5HPSAoMSA8PCAxNCksIC8qIHVzZSBwb2xsaW5nIGZvciBTRVRYRkVSICovCisJQVRBX0ZMQUdfSUdOX1NJTVBMRVgJPSAoMSA8PCAxNSksIC8qIGlnbm9yZSBTSU1QTEVYICovCiAKIAkvKiBUaGUgZm9sbG93aW5nIGZsYWcgYmVsb25ncyB0byBhcC0+cGZsYWdzIGJ1dCBpcyBrZXB0IGluCiAJICogYXAtPmZsYWdzIGJlY2F1c2UgaXQncyByZWZlcmVuY2VkIGluIG1hbnkgTExEcyBhbmQgd2lsbCBiZQpAQCAtNjEyLDExICs2MTMsMTEgQEAKIAl2b2lkICgqZGV2X3NlbGVjdCkoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSk7CiAKIAl2b2lkICgqcGh5X3Jlc2V0KSAoc3RydWN0IGF0YV9wb3J0ICphcCk7IC8qIG9ic29sZXRlICovCi0Jdm9pZCAoKnNldF9tb2RlKSAoc3RydWN0IGF0YV9wb3J0ICphcCk7CisJaW50ICAoKnNldF9tb2RlKSAoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKipyX2ZhaWxlZF9kZXYpOwogCiAJdm9pZCAoKnBvc3Rfc2V0X21vZGUpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAotCWludCAoKmNoZWNrX2F0YXBpX2RtYSkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworCWludCAgKCpjaGVja19hdGFwaV9kbWEpIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAogCXZvaWQgKCpibWRtYV9zZXR1cCkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogCXZvaWQgKCpibWRtYV9zdGFydCkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwpAQCAtMTA1Myw2ICsxMDU0LDggQEAKIC8qKgogICoJYXRhX2J1c3lfd2FpdCAtIFdhaXQgZm9yIGEgcG9ydCBzdGF0dXMgcmVnaXN0ZXIKICAqCUBhcDogUG9ydCB0byB3YWl0IGZvci4KKyAqCUBiaXRzOiBiaXRzIHRoYXQgbXVzdCBiZSBjbGVhcgorICoJQG1heDogbnVtYmVyIG9mIDEwdVMgd2FpdHMgdG8gcGVyZm9ybQogICoKICAqCVdhaXRzIHVwIHRvIG1heCoxMCBtaWNyb3NlY29uZHMgZm9yIHRoZSBzZWxlY3RlZCBiaXRzIGluIHRoZSBwb3J0J3MKICAqCXN0YXR1cyByZWdpc3RlciB0byBiZSBjbGVhcmVkLgpAQCAtMTE0MywxMiArMTE0NiwxNSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRhX3FjX3JlaW5pdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogeworCXFjLT5kbWFfZGlyID0gRE1BX05PTkU7CiAJcWMtPl9fc2cgPSBOVUxMOwogCXFjLT5mbGFncyA9IDA7CiAJcWMtPmN1cnNlY3QgPSBxYy0+Y3Vyc2cgPSBxYy0+Y3Vyc2dfb2ZzID0gMDsKIAlxYy0+bnNlY3QgPSAwOwogCXFjLT5uYnl0ZXMgPSBxYy0+Y3VyYnl0ZXMgPSAwOworCXFjLT5uX2VsZW0gPSAwOwogCXFjLT5lcnJfbWFzayA9IDA7CisJcWMtPnBhZF9sZW4gPSAwOwogCiAJYXRhX3RmX2luaXQocWMtPmRldiwgJnFjLT50Zik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdC5oIGIvaW5jbHVkZS9saW51eC9saXN0LmgKaW5kZXggYTljOTAyOC4uNjExMDU5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9saXN0LmgKQEAgLTIyNywxMyArMjI3LDEzIEBACiAJSU5JVF9MSVNUX0hFQUQob2xkKTsKIH0KIAotLyoKKy8qKgogICogbGlzdF9yZXBsYWNlX3JjdSAtIHJlcGxhY2Ugb2xkIGVudHJ5IGJ5IG5ldyBvbmUKICAqIEBvbGQgOiB0aGUgZWxlbWVudCB0byBiZSByZXBsYWNlZAogICogQG5ldyA6IHRoZSBuZXcgZWxlbWVudCB0byBpbnNlcnQKICAqCi0gKiBUaGUgb2xkIGVudHJ5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgbmV3IGVudHJ5IGF0b21pY2FsbHkuCi0gKiBOb3RlOiAnb2xkJyBzaG91bGQgbm90IGJlIGVtcHR5LgorICogVGhlIEBvbGQgZW50cnkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBAbmV3IGVudHJ5IGF0b21pY2FsbHkuCisgKiBOb3RlOiBAb2xkIHNob3VsZCBub3QgYmUgZW1wdHkuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3JlcGxhY2VfcmN1KHN0cnVjdCBsaXN0X2hlYWQgKm9sZCwKIAkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpuZXcpCkBAIC02ODAsMTIgKzY4MCwxMiBAQAogCX0KIH0KIAotLyoKKy8qKgogICogaGxpc3RfcmVwbGFjZV9yY3UgLSByZXBsYWNlIG9sZCBlbnRyeSBieSBuZXcgb25lCiAgKiBAb2xkIDogdGhlIGVsZW1lbnQgdG8gYmUgcmVwbGFjZWQKICAqIEBuZXcgOiB0aGUgbmV3IGVsZW1lbnQgdG8gaW5zZXJ0CiAgKgotICogVGhlIG9sZCBlbnRyeSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBlbnRyeSBhdG9taWNhbGx5LgorICogVGhlIEBvbGQgZW50cnkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBAbmV3IGVudHJ5IGF0b21pY2FsbHkuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9yZXBsYWNlX3JjdShzdHJ1Y3QgaGxpc3Rfbm9kZSAqb2xkLAogCQkJCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV3KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC9iaW5kLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2JpbmQuaAppbmRleCBhYTUwZDg5Li4yNDZkZTFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2JpbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2JpbmQuaApAQCAtMjMsNyArMjMsNyBAQAogICogVGhpcyBpcyB0aGUgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgbG9ja2QtPm5mc2QgY29tbXVuaWNhdGlvbgogICovCiBzdHJ1Y3Qgbmxtc3ZjX2JpbmRpbmcgewotCXUzMgkJCSgqZm9wZW4pKHN0cnVjdCBzdmNfcnFzdCAqLAorCV9fYmUzMgkJCSgqZm9wZW4pKHN0cnVjdCBzdmNfcnFzdCAqLAogCQkJCQkJc3RydWN0IG5mc19maCAqLAogCQkJCQkJc3RydWN0IGZpbGUgKiopOwogCXZvaWQJCQkoKmZjbG9zZSkoc3RydWN0IGZpbGUgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKaW5kZXggOGMzOTY1NC4uYWMyNWI1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaApAQCAtMTkxLDcgKzE5MSw3IEBACiB1bnNpZ25lZCBsb25nCSAgbmxtc3ZjX3JldHJ5X2Jsb2NrZWQodm9pZCk7CiB2b2lkCQkgIG5sbXN2Y190cmF2ZXJzZV9ibG9ja3Moc3RydWN0IG5sbV9ob3N0ICosIHN0cnVjdCBubG1fZmlsZSAqLAogCQkJCQlubG1faG9zdF9tYXRjaF9mbl90IG1hdGNoKTsKLXZvaWQJCSAgbmxtc3ZjX2dyYW50X3JlcGx5KHN0cnVjdCBubG1fY29va2llICosIHUzMik7Cit2b2lkCQkgIG5sbXN2Y19ncmFudF9yZXBseShzdHJ1Y3QgbmxtX2Nvb2tpZSAqLCBfX2JlMzIpOwogCiAvKgogICogRmlsZSBoYW5kbGluZyBmb3IgdGhlIHNlcnZlciBwZXJzb25hbGl0eQpAQCAtMjA2LDcgKzIwNiw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgaW5vZGUgKgogbmxtc3ZjX2ZpbGVfaW5vZGUoc3RydWN0IG5sbV9maWxlICpmaWxlKQogewotCXJldHVybiBmaWxlLT5mX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXJldHVybiBmaWxlLT5mX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL3NtX2ludGVyLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL3NtX2ludGVyLmgKaW5kZXggZmM2MWQ0MC4uMjJhNjQ1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC9zbV9pbnRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2Qvc21faW50ZXIuaApAQCAtMjQsNyArMjQsNyBAQAogICogQXJndW1lbnRzIGZvciBhbGwgY2FsbHMgdG8gc3RhdGQKICAqLwogc3RydWN0IG5zbV9hcmdzIHsKLQl1MzIJCWFkZHI7CQkvKiByZW1vdGUgYWRkcmVzcyAqLworCV9fYmUzMgkJYWRkcjsJCS8qIHJlbW90ZSBhZGRyZXNzICovCiAJdTMyCQlwcm9nOwkJLyogUlBDIGNhbGxiYWNrIGluZm8gKi8KIAl1MzIJCXZlcnM7CiAJdTMyCQlwcm9jOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC94ZHIuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QveGRyLmgKaW5kZXggMjllN2Q5Zi4uODNhMWY5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC94ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL3hkci5oCkBAIC02OSw3ICs2OSw3IEBACiAgKi8KIHN0cnVjdCBubG1fcmVzIHsKIAlzdHJ1Y3QgbmxtX2Nvb2tpZQljb29raWU7Ci0JdTMyCQkJc3RhdHVzOworCV9fYmUzMgkJCXN0YXR1czsKIAlzdHJ1Y3QgbmxtX2xvY2sJCWxvY2s7CiB9OwogCkBAIC04MCw5ICs4MCw5IEBACiAJY2hhciAqCQltb247CiAJaW50CQlsZW47CiAJdTMyCQlzdGF0ZTsKLQl1MzIJCWFkZHI7Ci0JdTMyCQl2ZXJzOwotCXUzMgkJcHJvdG87CisJX19iZTMyCQlhZGRyOworCV9fYmUzMgkJdmVyczsKKwlfX2JlMzIJCXByb3RvOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKaW5kZXggNDk4YmZiZC4uZWEwOTdkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKQEAgLTI4MSwxNSArMjgxLDI1IEBACiAjaWYgZGVmaW5lZChDT05GSUdfVFJBQ0VfSVJRRkxBR1MpICYmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpCiBleHRlcm4gdm9pZCBlYXJseV9pbml0X2lycV9sb2NrX2NsYXNzKHZvaWQpOwogI2Vsc2UKLSMgZGVmaW5lIGVhcmx5X2luaXRfaXJxX2xvY2tfY2xhc3MoKQkJZG8geyB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2luaXRfaXJxX2xvY2tfY2xhc3Modm9pZCkKK3sKK30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiBleHRlcm4gdm9pZCBlYXJseV9ib290X2lycXNfb2ZmKHZvaWQpOwogZXh0ZXJuIHZvaWQgZWFybHlfYm9vdF9pcnFzX29uKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vycik7CiAjZWxzZQotIyBkZWZpbmUgZWFybHlfYm9vdF9pcnFzX29mZigpCQkJZG8geyB9IHdoaWxlICgwKQotIyBkZWZpbmUgZWFybHlfYm9vdF9pcnFzX29uKCkJCQlkbyB7IH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfYm9vdF9pcnFzX29mZih2b2lkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2Jvb3RfaXJxc19vbih2b2lkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIHByaW50X2lycXRyYWNlX2V2ZW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCit7Cit9CiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9nMi5oIGIvaW5jbHVkZS9saW51eC9sb2cyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyZTFhNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbG9nMi5oCkBAIC0wLDAgKzEsMTU3IEBACisvKiBJbnRlZ2VyIGJhc2UgMiBsb2dhcml0aG0gY2FsY3VsYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTElOVVhfTE9HMl9ICisjZGVmaW5lIF9MSU5VWF9MT0cyX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKy8qCisgKiBkZWFsIHdpdGggdW5yZXByZXNlbnRhYmxlIGNvbnN0YW50IGxvZ2FyaXRobXMKKyAqLworZXh0ZXJuIF9fYXR0cmlidXRlX18oKGNvbnN0LCBub3JldHVybikpCitpbnQgX19fX2lsb2cyX05hTih2b2lkKTsKKworLyoKKyAqIG5vbi1jb25zdGFudCBsb2cgb2YgYmFzZSAyIGNhbGN1bGF0b3JzCisgKiAtIHRoZSBhcmNoIG1heSBvdmVycmlkZSB0aGVzZSBpbiBhc20vYml0b3BzLmggaWYgdGhleSBjYW4gYmUgaW1wbGVtZW50ZWQKKyAqICAgbW9yZSBlZmZpY2llbnRseSB0aGFuIHVzaW5nIGZscygpIGFuZCBmbHM2NCgpCisgKiAtIHRoZSBhcmNoIGlzIG5vdCByZXF1aXJlZCB0byBoYW5kbGUgbj09MCBpZiBpbXBsZW1lbnRpbmcgdGhlIGZhbGxiYWNrCisgKi8KKyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMgorc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpCitpbnQgX19pbG9nMl91MzIodTMyIG4pCit7CisJcmV0dXJuIGZscyhuKSAtIDE7Cit9CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0CitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGNvbnN0KSkKK2ludCBfX2lsb2cyX3U2NCh1NjQgbikKK3sKKwlyZXR1cm4gZmxzNjQobikgLSAxOworfQorI2VuZGlmCisKKy8qCisgKiByb3VuZCB1cCB0byBuZWFyZXN0IHBvd2VyIG9mIHR3bworICovCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGNvbnN0KSkKK3Vuc2lnbmVkIGxvbmcgX19yb3VuZHVwX3Bvd19vZl90d28odW5zaWduZWQgbG9uZyBuKQoreworCXJldHVybiAxVUwgPDwgZmxzX2xvbmcobiAtIDEpOworfQorCisvKioKKyAqIGlsb2cyIC0gbG9nIG9mIGJhc2UgMiBvZiAzMi1iaXQgb3IgYSA2NC1iaXQgdW5zaWduZWQgdmFsdWUKKyAqIEBuIC0gcGFyYW1ldGVyCisgKgorICogY29uc3RhbnQtY2FwYWJsZSBsb2cgb2YgYmFzZSAyIGNhbGN1bGF0aW9uCisgKiAtIHRoaXMgY2FuIGJlIHVzZWQgdG8gaW5pdGlhbGlzZSBnbG9iYWwgdmFyaWFibGVzIGZyb20gY29uc3RhbnQgZGF0YSwgaGVuY2UKKyAqICAgdGhlIG1hc3NpdmUgdGVybmFyeSBvcGVyYXRvciBjb25zdHJ1Y3Rpb24KKyAqCisgKiBzZWxlY3RzIHRoZSBhcHByb3ByaWF0ZWx5LXNpemVkIG9wdGltaXNlZCB2ZXJzaW9uIGRlcGVuZGluZyBvbiBzaXplb2YobikKKyAqLworI2RlZmluZSBpbG9nMihuKQkJCQlcCisoCQkJCQkJXAorCV9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8gKAkJXAorCQkobikgPCAxID8gX19fX2lsb2cyX05hTigpIDoJXAorCQkobikgJiAoMVVMTCA8PCA2MykgPyA2MyA6CVwKKwkJKG4pICYgKDFVTEwgPDwgNjIpID8gNjIgOglcCisJCShuKSAmICgxVUxMIDw8IDYxKSA/IDYxIDoJXAorCQkobikgJiAoMVVMTCA8PCA2MCkgPyA2MCA6CVwKKwkJKG4pICYgKDFVTEwgPDwgNTkpID8gNTkgOglcCisJCShuKSAmICgxVUxMIDw8IDU4KSA/IDU4IDoJXAorCQkobikgJiAoMVVMTCA8PCA1NykgPyA1NyA6CVwKKwkJKG4pICYgKDFVTEwgPDwgNTYpID8gNTYgOglcCisJCShuKSAmICgxVUxMIDw8IDU1KSA/IDU1IDoJXAorCQkobikgJiAoMVVMTCA8PCA1NCkgPyA1NCA6CVwKKwkJKG4pICYgKDFVTEwgPDwgNTMpID8gNTMgOglcCisJCShuKSAmICgxVUxMIDw8IDUyKSA/IDUyIDoJXAorCQkobikgJiAoMVVMTCA8PCA1MSkgPyA1MSA6CVwKKwkJKG4pICYgKDFVTEwgPDwgNTApID8gNTAgOglcCisJCShuKSAmICgxVUxMIDw8IDQ5KSA/IDQ5IDoJXAorCQkobikgJiAoMVVMTCA8PCA0OCkgPyA0OCA6CVwKKwkJKG4pICYgKDFVTEwgPDwgNDcpID8gNDcgOglcCisJCShuKSAmICgxVUxMIDw8IDQ2KSA/IDQ2IDoJXAorCQkobikgJiAoMVVMTCA8PCA0NSkgPyA0NSA6CVwKKwkJKG4pICYgKDFVTEwgPDwgNDQpID8gNDQgOglcCisJCShuKSAmICgxVUxMIDw8IDQzKSA/IDQzIDoJXAorCQkobikgJiAoMVVMTCA8PCA0MikgPyA0MiA6CVwKKwkJKG4pICYgKDFVTEwgPDwgNDEpID8gNDEgOglcCisJCShuKSAmICgxVUxMIDw8IDQwKSA/IDQwIDoJXAorCQkobikgJiAoMVVMTCA8PCAzOSkgPyAzOSA6CVwKKwkJKG4pICYgKDFVTEwgPDwgMzgpID8gMzggOglcCisJCShuKSAmICgxVUxMIDw8IDM3KSA/IDM3IDoJXAorCQkobikgJiAoMVVMTCA8PCAzNikgPyAzNiA6CVwKKwkJKG4pICYgKDFVTEwgPDwgMzUpID8gMzUgOglcCisJCShuKSAmICgxVUxMIDw8IDM0KSA/IDM0IDoJXAorCQkobikgJiAoMVVMTCA8PCAzMykgPyAzMyA6CVwKKwkJKG4pICYgKDFVTEwgPDwgMzIpID8gMzIgOglcCisJCShuKSAmICgxVUxMIDw8IDMxKSA/IDMxIDoJXAorCQkobikgJiAoMVVMTCA8PCAzMCkgPyAzMCA6CVwKKwkJKG4pICYgKDFVTEwgPDwgMjkpID8gMjkgOglcCisJCShuKSAmICgxVUxMIDw8IDI4KSA/IDI4IDoJXAorCQkobikgJiAoMVVMTCA8PCAyNykgPyAyNyA6CVwKKwkJKG4pICYgKDFVTEwgPDwgMjYpID8gMjYgOglcCisJCShuKSAmICgxVUxMIDw8IDI1KSA/IDI1IDoJXAorCQkobikgJiAoMVVMTCA8PCAyNCkgPyAyNCA6CVwKKwkJKG4pICYgKDFVTEwgPDwgMjMpID8gMjMgOglcCisJCShuKSAmICgxVUxMIDw8IDIyKSA/IDIyIDoJXAorCQkobikgJiAoMVVMTCA8PCAyMSkgPyAyMSA6CVwKKwkJKG4pICYgKDFVTEwgPDwgMjApID8gMjAgOglcCisJCShuKSAmICgxVUxMIDw8IDE5KSA/IDE5IDoJXAorCQkobikgJiAoMVVMTCA8PCAxOCkgPyAxOCA6CVwKKwkJKG4pICYgKDFVTEwgPDwgMTcpID8gMTcgOglcCisJCShuKSAmICgxVUxMIDw8IDE2KSA/IDE2IDoJXAorCQkobikgJiAoMVVMTCA8PCAxNSkgPyAxNSA6CVwKKwkJKG4pICYgKDFVTEwgPDwgMTQpID8gMTQgOglcCisJCShuKSAmICgxVUxMIDw8IDEzKSA/IDEzIDoJXAorCQkobikgJiAoMVVMTCA8PCAxMikgPyAxMiA6CVwKKwkJKG4pICYgKDFVTEwgPDwgMTEpID8gMTEgOglcCisJCShuKSAmICgxVUxMIDw8IDEwKSA/IDEwIDoJXAorCQkobikgJiAoMVVMTCA8PCAgOSkgPyAgOSA6CVwKKwkJKG4pICYgKDFVTEwgPDwgIDgpID8gIDggOglcCisJCShuKSAmICgxVUxMIDw8ICA3KSA/ICA3IDoJXAorCQkobikgJiAoMVVMTCA8PCAgNikgPyAgNiA6CVwKKwkJKG4pICYgKDFVTEwgPDwgIDUpID8gIDUgOglcCisJCShuKSAmICgxVUxMIDw8ICA0KSA/ICA0IDoJXAorCQkobikgJiAoMVVMTCA8PCAgMykgPyAgMyA6CVwKKwkJKG4pICYgKDFVTEwgPDwgIDIpID8gIDIgOglcCisJCShuKSAmICgxVUxMIDw8ICAxKSA/ICAxIDoJXAorCQkobikgJiAoMVVMTCA8PCAgMCkgPyAgMCA6CVwKKwkJX19fX2lsb2cyX05hTigpCQkJXAorCQkJCSAgICkgOgkJXAorCShzaXplb2YobikgPD0gNCkgPwkJCVwKKwlfX2lsb2cyX3UzMihuKSA6CQkJXAorCV9faWxvZzJfdTY0KG4pCQkJCVwKKyApCisKKy8qKgorICogcm91bmR1cF9wb3dfb2ZfdHdvIC0gcm91bmQgdGhlIGdpdmVuIHZhbHVlIHVwIHRvIG5lYXJlc3QgcG93ZXIgb2YgdHdvCisgKiBAbiAtIHBhcmFtZXRlcgorICoKKyAqIHJvdW5kIHRoZSBnaXZlbiBiYWx1ZSB1cCB0byB0aGUgbmVhcmVzdCBwb3dlciBvZiB0d28KKyAqIC0gdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQgd2hlbiBuID09IDAKKyAqIC0gdGhpcyBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXNlIGdsb2JhbCB2YXJpYWJsZXMgZnJvbSBjb25zdGFudCBkYXRhCisgKi8KKyNkZWZpbmUgcm91bmR1cF9wb3dfb2ZfdHdvKG4pCQkJXAorKAkJCQkJCVwKKwlfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/ICgJCVwKKwkJKG4gPT0gMSkgPyAwIDoJCQlcCisJCSgxVUwgPDwgKGlsb2cyKChuKSAtIDEpICsgMSkpCVwKKwkJCQkgICApIDoJCVwKKwlfX3JvdW5kdXBfcG93X29mX3R3byhuKQkJCVwKKyApCisKKyNlbmRpZiAvKiBfTElOVVhfTE9HMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hZ2ljLmggYi9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKaW5kZXggMTU2YzQwZi4uYjc4YmJmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYWdpYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWFnaWMuaApAQCAtMyw2ICszLDcgQEAKIAogI2RlZmluZSBBREZTX1NVUEVSX01BR0lDCTB4YWRmNQogI2RlZmluZSBBRkZTX1NVUEVSX01BR0lDCTB4YWRmZgorI2RlZmluZSBBRlNfU1VQRVJfTUFHSUMgICAgICAgICAgICAgICAgMHg1MzQ2NDE0RgogI2RlZmluZSBBVVRPRlNfU1VQRVJfTUFHSUMJMHgwMTg3CiAjZGVmaW5lIENPREFfU1VQRVJfTUFHSUMJMHg3Mzc1NzI0NQogI2RlZmluZSBFRlNfU1VQRVJfTUFHSUMJCTB4NDE0QTUzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggYTE3YjE0Ny4uMmQyYzA4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTY4LDYgKzE2OCw3IEBACiAjZGVmaW5lIFZNX05PTkxJTkVBUgkweDAwODAwMDAwCS8qIElzIG5vbi1saW5lYXIgKHJlbWFwX2ZpbGVfcGFnZXMpICovCiAjZGVmaW5lIFZNX01BUFBFRF9DT1BZCTB4MDEwMDAwMDAJLyogVCBpZiBtYXBwZWQgY29weSBvZiBkYXRhIChub21tdSBtbWFwKSAqLwogI2RlZmluZSBWTV9JTlNFUlRQQUdFCTB4MDIwMDAwMDAJLyogVGhlIHZtYSBoYXMgaGFkICJ2bV9pbnNlcnRfcGFnZSgpIiBkb25lIG9uIGl0ICovCisjZGVmaW5lIFZNX0FMV0FZU0RVTVAJMHgwNDAwMDAwMAkvKiBBbHdheXMgaW5jbHVkZSBpbiBjb3JlIGR1bXBzICovCiAKICNpZm5kZWYgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUwkJLyogYXJjaCBjYW4gb3ZlcnJpZGUgdGhpcyAqLwogI2RlZmluZSBWTV9TVEFDS19ERUZBVUxUX0ZMQUdTIFZNX0RBVEFfREVGQVVMVF9GTEFHUwpAQCAtOTc4LDcgKzk3OSw4IEBACiAjZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEICovCiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQICovCiBleHRlcm4gdm9pZCBzZXRfZG1hX3Jlc2VydmUodW5zaWduZWQgbG9uZyBuZXdfZG1hX3Jlc2VydmUpOwotZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZSh1bnNpZ25lZCBsb25nLCBpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZSh1bnNpZ25lZCBsb25nLCBpbnQsIHVuc2lnbmVkIGxvbmcsCisJCQkJdW5zaWduZWQgbG9uZywgZW51bSBtZW1tYXBfY29udGV4dCk7CiBleHRlcm4gdm9pZCBzZXR1cF9wZXJfem9uZV9wYWdlc19taW4odm9pZCk7CiBleHRlcm4gdm9pZCBtZW1faW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNob3dfbWVtKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmggYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAppbmRleCBhMzU5NGRmLi5iY2YyNDkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaApAQCAtNDIsNyArNDIsNyBAQAogI2RlZmluZSBNTUNfUlNQX1IxQgkoTU1DX1JTUF9QUkVTRU5UfE1NQ19SU1BfQ1JDfE1NQ19SU1BfT1BDT0RFfE1NQ19SU1BfQlVTWSkKICNkZWZpbmUgTU1DX1JTUF9SMgkoTU1DX1JTUF9QUkVTRU5UfE1NQ19SU1BfMTM2fE1NQ19SU1BfQ1JDKQogI2RlZmluZSBNTUNfUlNQX1IzCShNTUNfUlNQX1BSRVNFTlQpCi0jZGVmaW5lIE1NQ19SU1BfUjYJKE1NQ19SU1BfUFJFU0VOVHxNTUNfUlNQX0NSQykKKyNkZWZpbmUgTU1DX1JTUF9SNgkoTU1DX1JTUF9QUkVTRU5UfE1NQ19SU1BfQ1JDfE1NQ19SU1BfT1BDT0RFKQogCiAjZGVmaW5lIG1tY19yZXNwX3R5cGUoY21kKQkoKGNtZCktPmZsYWdzICYgKE1NQ19SU1BfUFJFU0VOVHxNTUNfUlNQXzEzNnxNTUNfUlNQX0NSQ3xNTUNfUlNQX0JVU1l8TU1DX1JTUF9PUENPREUpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCBlMzM5YTczLi5iMjYyZjQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTQ1MCw5ICs0NTAsMTMgQEAKIHZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyKTsKIGludCB6b25lX3dhdGVybWFya19vayhzdHJ1Y3Qgem9uZSAqeiwgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIG1hcmssCiAJCWludCBjbGFzc3pvbmVfaWR4LCBpbnQgYWxsb2NfZmxhZ3MpOwotCitlbnVtIG1lbW1hcF9jb250ZXh0IHsKKwlNRU1NQVBfRUFSTFksCisJTUVNTUFQX0hPVFBMVUcsCit9OwogZXh0ZXJuIGludCBpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgICBlbnVtIG1lbW1hcF9jb250ZXh0IGNvbnRleHQpOwogCiAjaWZkZWYgQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQKIHZvaWQgbWVtb3J5X3ByZXNlbnQoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbnRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWYwYjFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tbnRfbmFtZXNwYWNlLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfTkFNRVNQQUNFX0hfCisjZGVmaW5lIF9OQU1FU1BBQ0VfSF8KKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgorCitzdHJ1Y3QgbW50X25hbWVzcGFjZSB7CisJYXRvbWljX3QJCWNvdW50OworCXN0cnVjdCB2ZnNtb3VudCAqCXJvb3Q7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXdhaXRfcXVldWVfaGVhZF90IHBvbGw7CisJaW50IGV2ZW50OworfTsKKworZXh0ZXJuIGludCBjb3B5X21udF9ucyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIF9fcHV0X21udF9ucyhzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpOworZXh0ZXJuIHN0cnVjdCBtbnRfbmFtZXNwYWNlICpkdXBfbW50X25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqLAorCQlzdHJ1Y3QgZnNfc3RydWN0ICopOworCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X21udF9ucyhzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJm5zLT5jb3VudCwgJnZmc21vdW50X2xvY2spKQorCQkvKiByZWxlYXNlcyB2ZnNtb3VudF9sb2NrICovCisJCV9fcHV0X21udF9ucyhucyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleGl0X21udF9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zID0gcC0+bnNwcm94eS0+bW50X25zOworCWlmIChucykKKwkJcHV0X21udF9ucyhucyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbW50X25zKHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucykKK3sKKwlhdG9taWNfaW5jKCZucy0+Y291bnQpOworfQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggZDMzZGYyNC4uMTBmNzcxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0zMTksNiArMzE5LDEzIEBACiAKIAl1bnNpZ25lZCBpbnQgdGFpbnRzOwkvKiBzYW1lIGJpdHMgYXMga2VybmVsOnRhaW50ZWQgKi8KIAorI2lmZGVmIENPTkZJR19HRU5FUklDX0JVRworCS8qIFN1cHBvcnQgZm9yIEJVRyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYnVnX2xpc3Q7CisJc3RydWN0IGJ1Z19lbnRyeSAqYnVnX3RhYmxlOworCXVuc2lnbmVkIG51bV9idWdzOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogCS8qIFJlZmVyZW5jZSBjb3VudHMgKi8KIAlzdHJ1Y3QgbW9kdWxlX3JlZiByZWZbTlJfQ1BVU107CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vdW50LmggYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKaW5kZXggNDAzZDFhOS4uMWI3ZTE3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW91bnQuaApAQCAtMjAsMTMgKzIwLDE0IEBACiBzdHJ1Y3Qgc3VwZXJfYmxvY2s7CiBzdHJ1Y3QgdmZzbW91bnQ7CiBzdHJ1Y3QgZGVudHJ5Owotc3RydWN0IG5hbWVzcGFjZTsKK3N0cnVjdCBtbnRfbmFtZXNwYWNlOwogCiAjZGVmaW5lIE1OVF9OT1NVSUQJMHgwMQogI2RlZmluZSBNTlRfTk9ERVYJMHgwMgogI2RlZmluZSBNTlRfTk9FWEVDCTB4MDQKICNkZWZpbmUgTU5UX05PQVRJTUUJMHgwOAogI2RlZmluZSBNTlRfTk9ESVJBVElNRQkweDEwCisjZGVmaW5lIE1OVF9SRUxBVElNRQkweDIwCiAKICNkZWZpbmUgTU5UX1NIUklOS0FCTEUJMHgxMDAKIApAQCAtNTIsNyArNTMsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbW50X3NsYXZlX2xpc3Q7LyogbGlzdCBvZiBzbGF2ZSBtb3VudHMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG1udF9zbGF2ZTsJLyogc2xhdmUgbGlzdCBlbnRyeSAqLwogCXN0cnVjdCB2ZnNtb3VudCAqbW50X21hc3RlcjsJLyogc2xhdmUgaXMgb24gbWFzdGVyLT5tbnRfc2xhdmVfbGlzdCAqLwotCXN0cnVjdCBuYW1lc3BhY2UgKm1udF9uYW1lc3BhY2U7IC8qIGNvbnRhaW5pbmcgbmFtZXNwYWNlICovCisJc3RydWN0IG1udF9uYW1lc3BhY2UgKm1udF9uczsJLyogY29udGFpbmluZyBuYW1lc3BhY2UgKi8KIAlpbnQgbW50X3Bpbm5lZDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2Jsa3RyYW5zLmggYi9pbmNsdWRlL2xpbnV4L210ZC9ibGt0cmFucy5oCmluZGV4IDcyZmM2OGMuLjlhNmUyZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2Jsa3RyYW5zLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvYmxrdHJhbnMuaApAQCAtMjQsNyArMjQsNiBAQAogCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwogCXN0cnVjdCBtdXRleCBsb2NrOwogCWludCBkZXZudW07Ci0JaW50IGJsa3NpemU7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCWludCByZWFkb25seTsKIAl2b2lkICpibGtjb3JlX3ByaXY7IC8qIGdlbmRpc2sgaW4gMi41LCBkZXZmc19oYW5kbGUgaW4gMi40ICovCkBAIC0zNiw2ICszNSw4IEBACiAJY2hhciAqbmFtZTsKIAlpbnQgbWFqb3I7CiAJaW50IHBhcnRfYml0czsKKwlpbnQgYmxrc2l6ZTsKKwlpbnQgYmxrc2hpZnQ7CiAKIAkvKiBBY2Nlc3MgZnVuY3Rpb25zICovCiAJaW50ICgqcmVhZHNlY3QpKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaCBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCmluZGV4IDk0YTQ0M2QuLmQ2NDRlNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCkBAIC0yMyw3ICsyMyw3IEBACiAKICNkZWZpbmUgTVREX0NIQVJfTUFKT1IgOTAKICNkZWZpbmUgTVREX0JMT0NLX01BSk9SIDMxCi0jZGVmaW5lIE1BWF9NVERfREVWSUNFUyAxNgorI2RlZmluZSBNQVhfTVREX0RFVklDRVMgMzIKIAogI2RlZmluZSBNVERfRVJBU0VfUEVORElORyAgICAgIAkweDAxCiAjZGVmaW5lIE1URF9FUkFTSU5HCQkweDAyCkBAIC03NSwxNSArNzUsMTIgQEAKICAqIHN0cnVjdCBtdGRfb29iX29wcyAtIG9vYiBvcGVyYXRpb24gb3BlcmFuZHMKICAqIEBtb2RlOglvcGVyYXRpb24gbW9kZQogICoKLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byB3cml0ZS9yZWFkLiBXaGVuIGEgZGF0YSBidWZmZXIgaXMgZ2l2ZW4KLSAqCQkoZGF0YnVmICE9IE5VTEwpIHRoaXMgaXMgdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzLiBXaGVuCi0gKgkJbm8gZGF0YSBidWZmZXIgaXMgYXZhaWxhYmxlIHRoaXMgaXMgdGhlIG51bWJlciBvZiBvb2IgYnl0ZXMuCisgKiBAbGVuOgludW1iZXIgb2YgZGF0YSBieXRlcyB0byB3cml0ZS9yZWFkCiAgKgotICogQHJldGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4vcmVhZC4gV2hlbiBhIGRhdGEgYnVmZmVyIGlzIGdpdmVuCi0gKgkJKGRhdGJ1ZiAhPSBOVUxMKSB0aGlzIGlzIHRoZSBudW1iZXIgb2YgZGF0YSBieXRlcy4gV2hlbgotICoJCW5vIGRhdGEgYnVmZmVyIGlzIGF2YWlsYWJsZSB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygb29iIGJ5dGVzLgorICogQHJldGxlbjoJbnVtYmVyIG9mIGRhdGEgYnl0ZXMgd3JpdHRlbi9yZWFkCiAgKgotICogQG9vYmxlbjoJbnVtYmVyIG9mIG9vYiBieXRlcyBwZXIgcGFnZQorICogQG9vYmxlbjoJbnVtYmVyIG9mIG9vYiBieXRlcyB0byB3cml0ZS9yZWFkCisgKiBAb29icmV0bGVuOgludW1iZXIgb2Ygb29iIGJ5dGVzIHdyaXR0ZW4vcmVhZAogICogQG9vYm9mZnM6CW9mZnNldCBvZiBvb2IgZGF0YSBpbiB0aGUgb29iIGFyZWEgKG9ubHkgcmVsZXZhbnQgd2hlbgogICoJCW1vZGUgPSBNVERfT09CX1BMQUNFKQogICogQGRhdGJ1ZjoJZGF0YSBidWZmZXIgLSBpZiBOVUxMIG9ubHkgb29iIGRhdGEgYXJlIHJlYWQvd3JpdHRlbgpAQCAtOTQsNiArOTEsNyBAQAogCXNpemVfdAkJbGVuOwogCXNpemVfdAkJcmV0bGVuOwogCXNpemVfdAkJb29ibGVuOworCXNpemVfdAkJb29icmV0bGVuOwogCXVpbnQzMl90CW9vYm9mZnM7CiAJdWludDhfdAkJKmRhdGJ1ZjsKIAl1aW50OF90CQkqb29iYnVmOwpAQCAtMjAyLDExICsyMDAsMjAgQEAKIAogCS8qIEVDQyBzdGF0dXMgaW5mb3JtYXRpb24gKi8KIAlzdHJ1Y3QgbXRkX2VjY19zdGF0cyBlY2Nfc3RhdHM7CisJLyogU3VicGFnZSBzaGlmdCAoTkFORCkgKi8KKwlpbnQgc3VicGFnZV9zZnQ7CiAKIAl2b2lkICpwcml2OwogCiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJaW50IHVzZWNvdW50OworCisJLyogSWYgdGhlIGRyaXZlciBpcyBzb21ldGhpbmcgc21hcnQsIGxpa2UgVUJJLCBpdCBtYXkgbmVlZCB0byBtYWludGFpbgorCSAqIGl0cyBvd24gcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUgYmVsb3cgZnVuY3Rpb25zIGFyZSBvbmx5IGZvciBkcml2ZXIuCisJICogVGhlIGRyaXZlciBtYXkgcmVnaXN0ZXIgaXRzIGNhbGxiYWNrcy4gVGhlc2UgY2FsbGJhY2tzIGFyZSBub3QKKwkgKiBzdXBwb3NlZCB0byBiZSBjYWxsZWQgYnkgTVREIHVzZXJzICovCisJaW50ICgqZ2V0X2RldmljZSkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKwl2b2lkICgqcHV0X2RldmljZSkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKIH07CiAKIApAQCAtMjE2LDYgKzIyMyw3IEBACiBleHRlcm4gaW50IGRlbF9tdGRfZGV2aWNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAKIGV4dGVybiBzdHJ1Y3QgbXRkX2luZm8gKmdldF9tdGRfZGV2aWNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbnVtKTsKK2V4dGVybiBzdHJ1Y3QgbXRkX2luZm8gKmdldF9tdGRfZGV2aWNlX25tKGNvbnN0IGNoYXIgKm5hbWUpOwogCiBleHRlcm4gdm9pZCBwdXRfbXRkX2RldmljZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAppbmRleCA4YjNlZjQxLi4yMDcxYjAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCkBAIC0xNjYsNiArMTY2LDkgQEAKICAqIGZvciBhbGwgbGFyZ2UgcGFnZSBkZXZpY2VzLCBhcyB0aGV5IGRvIG5vdCBzdXBwb3J0CiAgKiBhdXRvaW5jcmVtZW50LiovCiAjZGVmaW5lIE5BTkRfTk9fUkVBRFJEWQkJMHgwMDAwMDEwMAorLyogQ2hpcCBkb2VzIG5vdCBhbGxvdyBzdWJwYWdlIHdyaXRlcyAqLworI2RlZmluZSBOQU5EX05PX1NVQlBBR0VfV1JJVEUJMHgwMDAwMDIwMAorCiAKIC8qIE9wdGlvbnMgdmFsaWQgZm9yIFNhbXN1bmcgbGFyZ2UgcGFnZSBkZXZpY2VzICovCiAjZGVmaW5lIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIFwKQEAgLTE5Myw2ICsxOTYsOSBAQAogLyogTmFuZCBzY2FuIGhhcyBhbGxvY2F0ZWQgY29udHJvbGxlciBzdHJ1Y3QgKi8KICNkZWZpbmUgTkFORF9DT05UUk9MTEVSX0FMTE9DCTB4ODAwMDAwMDAKIAorLyogQ2VsbCBpbmZvIGNvbnN0YW50cyAqLworI2RlZmluZSBOQU5EX0NJX0NISVBOUl9NU0sJMHgwMworI2RlZmluZSBOQU5EX0NJX0NFTExUWVBFX01TSwkweDBDCiAKIC8qCiAgKiBuYW5kX3N0YXRlX3QgLSBjaGlwIHN0YXRlcwpAQCAtMjg2LDkgKzI5Miw3IEBACiAgKiBzdHJ1Y3QgbmFuZF9idWZmZXJzIC0gYnVmZmVyIHN0cnVjdHVyZSBmb3IgcmVhZC93cml0ZQogICogQGVjY2NhbGM6CWJ1ZmZlciBmb3IgY2FsY3VsYXRlZCBlY2MKICAqIEBlY2Njb2RlOglidWZmZXIgZm9yIGVjYyByZWFkIGZyb20gZmxhc2gKLSAqIEBvb2J3YnVmOglidWZmZXIgZm9yIHdyaXRlIG9vYiBkYXRhCiAgKiBAZGF0YWJ1ZjoJYnVmZmVyIGZvciBkYXRhIC0gZHluYW1pY2FsbHkgc2l6ZWQKLSAqIEBvb2JyYnVmOglidWZmZXIgdG8gcmVhZCBvb2IgZGF0YQogICoKICAqIERvIG5vdCBjaGFuZ2UgdGhlIG9yZGVyIG9mIGJ1ZmZlcnMuIGRhdGFidWYgYW5kIG9vYnJidWYgbXVzdCBiZSBpbgogICogY29uc2VjdXRpdmUgb3JkZXIuCkBAIC0yOTYsOSArMzAwLDcgQEAKIHN0cnVjdCBuYW5kX2J1ZmZlcnMgewogCXVpbnQ4X3QJZWNjY2FsY1tOQU5EX01BWF9PT0JTSVpFXTsKIAl1aW50OF90CWVjY2NvZGVbTkFORF9NQVhfT09CU0laRV07Ci0JdWludDhfdAlvb2J3YnVmW05BTkRfTUFYX09PQlNJWkVdOwotCXVpbnQ4X3QgZGF0YWJ1ZltOQU5EX01BWF9QQUdFU0laRV07Ci0JdWludDhfdAlvb2JyYnVmW05BTkRfTUFYX09PQlNJWkVdOworCXVpbnQ4X3QgZGF0YWJ1ZltOQU5EX01BWF9QQUdFU0laRSArIE5BTkRfTUFYX09PQlNJWkVdOwogfTsKIAogLyoqCkBAIC0zNDUsNiArMzQ3LDcgQEAKICAqIEBjaGlwc2l6ZToJCVtJTlRFUk5dIHRoZSBzaXplIG9mIG9uZSBjaGlwIGZvciBtdWx0aWNoaXAgYXJyYXlzCiAgKiBAcGFnZW1hc2s6CQlbSU5URVJOXSBwYWdlIG51bWJlciBtYXNrID0gbnVtYmVyIG9mIChwYWdlcyAvIGNoaXApIC0gMQogICogQHBhZ2VidWY6CQlbSU5URVJOXSBob2xkcyB0aGUgcGFnZW51bWJlciB3aGljaCBpcyBjdXJyZW50bHkgaW4gZGF0YV9idWYKKyAqIEBzdWJwYWdlc2l6ZToJW0lOVEVSTl0gaG9sZHMgdGhlIHN1YnBhZ2VzaXplCiAgKiBAZWNjbGF5b3V0OgkJW1JFUExBQ0VBQkxFXSB0aGUgZGVmYXVsdCBlY2MgcGxhY2VtZW50IHNjaGVtZQogICogQGJidDoJCVtJTlRFUk5dIGJhZCBibG9jayB0YWJsZSBwb2ludGVyCiAgKiBAYmJ0X3RkOgkJW1JFUExBQ0VBQkxFXSBiYWQgYmxvY2sgdGFibGUgZGVzY3JpcHRvciBmb3IgZmxhc2ggbG9va3VwCkBAIC0zOTIsNiArMzk1LDggQEAKIAl1bnNpZ25lZCBsb25nCWNoaXBzaXplOwogCWludAkJcGFnZW1hc2s7CiAJaW50CQlwYWdlYnVmOworCWludAkJc3VicGFnZXNpemU7CisJdWludDhfdAkJY2VsbGluZm87CiAJaW50CQliYWRibG9ja3BvczsKIAogCW5hbmRfc3RhdGVfdAlzdGF0ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaAppbmRleCA2ZjA0NWI1Li5mNzc1YTdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIF9fTElOVVhfTVREX09ORU5BTkRfSAogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmRfcmVncy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9iYm0uaD4KIApAQCAtMzMsNyArMzQsNiBAQAogCUZMX1dSSVRJTkcsCiAJRkxfRVJBU0lORywKIAlGTF9TWU5DSU5HLAotCUZMX1VOTE9DS0lORywKIAlGTF9MT0NLSU5HLAogCUZMX1JFU0VUSU5HLAogCUZMX09UUElORywKQEAgLTg4LDYgKzg4LDcgQEAKICAqCQkJb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzCiAgKiBAc3RhdGU6CQlbSU5URVJOXSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgT25lTkFORCBkZXZpY2UKICAqIEBwYWdlX2J1ZjoJCWRhdGEgYnVmZmVyCisgKiBAc3VicGFnZXNpemU6CVtJTlRFUk5dIGhvbGRzIHRoZSBzdWJwYWdlc2l6ZQogICogQGVjY2xheW91dDoJCVtSRVBMQUNFQUJMRV0gdGhlIGRlZmF1bHQgZWNjIHBsYWNlbWVudCBzY2hlbWUKICAqIEBiYm06CQlbUkVQTEFDRUFCTEVdIHBvaW50ZXIgdG8gQmFkIEJsb2NrIE1hbmFnZW1lbnQKICAqIEBwcml2OgkJW09QVElPTkFMXSBwb2ludGVyIHRvIHByaXZhdGUgY2hpcCBkYXRlCkBAIC0xMjAsMTEgKzEyMSwxNSBAQAogCWludCAoKmJsb2NrX21hcmtiYWQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKTsKIAlpbnQgKCpzY2FuX2JidCkoc3RydWN0IG10ZF9pbmZvICptdGQpOwogCisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGU7CisJaW50CQkJaXJxOworCiAJc3BpbmxvY2tfdAkJY2hpcF9sb2NrOwogCXdhaXRfcXVldWVfaGVhZF90CXdxOwogCW9uZW5hbmRfc3RhdGVfdAkJc3RhdGU7CiAJdW5zaWduZWQgY2hhcgkJKnBhZ2VfYnVmOwogCisJaW50CQkJc3VicGFnZXNpemU7CiAJc3RydWN0IG5hbmRfZWNjbGF5b3V0CSplY2NsYXlvdXQ7CiAKIAl2b2lkCQkJKmJibTsKQEAgLTEzOCw2ICsxNDMsNyBAQAogI2RlZmluZSBPTkVOQU5EX0NVUlJFTlRfQlVGRkVSUkFNKHRoaXMpCQkodGhpcy0+YnVmZmVycmFtX2luZGV4KQogI2RlZmluZSBPTkVOQU5EX05FWFRfQlVGRkVSUkFNKHRoaXMpCQkodGhpcy0+YnVmZmVycmFtX2luZGV4IF4gMSkKICNkZWZpbmUgT05FTkFORF9TRVRfTkVYVF9CVUZGRVJSQU0odGhpcykJKHRoaXMtPmJ1ZmZlcnJhbV9pbmRleCBePSAxKQorI2RlZmluZSBPTkVOQU5EX1NFVF9QUkVWX0JVRkZFUlJBTSh0aGlzKQkodGhpcy0+YnVmZmVycmFtX2luZGV4IF49IDEpCiAKICNkZWZpbmUgT05FTkFORF9HRVRfU1lTX0NGRzEodGhpcykJCQkJCVwKIAkodGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TWVNfQ0ZHMSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCmluZGV4IDllNDA5ZmUuLmUzMWM4ZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCkBAIC0xNzksNiArMTc5LDcgQEAKICAqIEVDQyBTdGF0dXMgUmVpZ3NlciBGRjAwaCAoUikKICAqLwogI2RlZmluZSBPTkVOQU5EX0VDQ18xQklUCQkoMSA8PCAwKQorI2RlZmluZSBPTkVOQU5EX0VDQ18xQklUX0FMTAkJKDB4NTU1NSkKICNkZWZpbmUgT05FTkFORF9FQ0NfMkJJVAkJKDEgPDwgMSkKICNkZWZpbmUgT05FTkFORF9FQ0NfMkJJVF9BTEwJCSgweEFBQUEpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRpby5oIGIvaW5jbHVkZS9saW51eC9tdGlvLmgKaW5kZXggOGM2NjE1MS4uNmY4ZDJkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGlvLmgKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9xaWMxMTcuaD4KIAogLyoKICAqIFN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciBtYWcgdGFwZSBpbyBjb250cm9sIGNvbW1hbmRzCkBAIC0xMTYsMzIgKzExNSw2IEBACiAjZGVmaW5lIE1UX0lTRlRBUEVfVU5LTk9XTgkweDgwMDAwMCAvKiBvYnNvbGV0ZSAqLwogI2RlZmluZSBNVF9JU0ZUQVBFX0ZMQUcJMHg4MDAwMDAKIAotc3RydWN0IG10X3RhcGVfaW5mbyB7Ci0JbG9uZyB0X3R5cGU7CQkvKiBkZXZpY2UgdHlwZSBpZCAobXRfdHlwZSkgKi8KLQljaGFyICp0X25hbWU7CQkvKiBkZXNjcmlwdGl2ZSBuYW1lICovCi19OwotCi0jZGVmaW5lIE1UX1RBUEVfSU5GTwl7IFwKLQl7TVRfSVNVTktOT1dOLAkJIlVua25vd24gdHlwZSBvZiB0YXBlIGRldmljZSJ9LCBcCi0Je01UX0lTUUlDMDIsCQkiR2VuZXJpYyBRSUMtMDIgdGFwZSBzdHJlYW1lciJ9LCBcCi0Je01UX0lTV1Q1MTUwLAkJIldhbmd0ZWsgNTE1MCwgUUlDLTE1MCJ9LCBcCi0Je01UX0lTQVJDSElWRV81OTQ1TDIsCSJBcmNoaXZlIDU5NDVMLTIifSwgXAotCXtNVF9JU0NNU0o1MDAsCQkiQ01TIEp1bWJvIDUwMCJ9LCBcCi0Je01UX0lTVERDMzYxMCwJCSJUYW5kYmVyZyBUREMgMzYxMCwgUUlDLTI0In0sIFwKLQl7TVRfSVNBUkNISVZFX1ZQNjBJLAkiQXJjaGl2ZSBWUDYwaSwgUUlDLTAyIn0sIFwKLQl7TVRfSVNBUkNISVZFXzIxNTBMLAkiQXJjaGl2ZSBWaXBlciAyMTUwTCJ9LCBcCi0Je01UX0lTQVJDSElWRV8yMDYwTCwJIkFyY2hpdmUgVmlwZXIgMjA2MEwifSwgXAotCXtNVF9JU0FSQ0hJVkVTQzQ5OSwJIkFyY2hpdmUgU0MtNDk5IFFJQy0zNiBjb250cm9sbGVyIn0sIFwKLQl7TVRfSVNRSUMwMl9BTExfRkVBVFVSRVMsICJHZW5lcmljIFFJQy0wMiB0YXBlLCBhbGwgZmVhdHVyZXMifSwgXAotCXtNVF9JU1dUNTA5OUVFTjI0LAkiV2FuZ3RlayA1MDk5LWVlbjI0LCA2ME1CIn0sIFwKLQl7TVRfSVNURUFDX01UMlNULAkiVGVhYyBNVC0yU1QgMTU1bWIgZGF0YSBjYXNzZXR0ZSBkcml2ZSJ9LCBcCi0Je01UX0lTRVZFUkVYX0ZUNDBBLAkiRXZlcmV4IEZUNDBBLCBRSUMtNDAifSwgXAotCXtNVF9JU09OU1RSRUFNX1NDLCAgICAgICJPblN0cmVhbSBTQy0sIERJLSwgRFAtLCBvciBVU0IgdGFwZSBkcml2ZSJ9LCBcCi0Je01UX0lTU0NTSTEsCQkiR2VuZXJpYyBTQ1NJLTEgdGFwZSJ9LCBcCi0Je01UX0lTU0NTSTIsCQkiR2VuZXJpYyBTQ1NJLTIgdGFwZSJ9LCBcCi0JezAsIE5VTEx9IFwKLX0KLQogCiAvKiBzdHJ1Y3R1cmUgZm9yIE1USU9DUE9TIC0gbWFnIHRhcGUgZ2V0IHBvc2l0aW9uIGNvbW1hbmQgKi8KIApAQCAtMTUwLDEzMCArMTIzLDExIEBACiB9OwogCiAKLS8qICBzdHJ1Y3R1cmUgZm9yIE1USU9DVk9MSU5GTywgcXVlcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZvbHVtZQotICogIGN1cnJlbnRseSBwb3NpdGlvbmVkIGF0ICh6ZnRhcGUpCi0gKi8KLXN0cnVjdCBtdHZvbGluZm8gewotCXVuc2lnbmVkIGludCBtdF92b2xubzsgICAvKiB2b2wtbnVtYmVyICovCi0JdW5zaWduZWQgaW50IG10X2Jsa3N6OyAgIC8qIGJsb2Nrc2l6ZSB1c2VkIHdoZW4gcmVjb3JkaW5nICovCi0JdW5zaWduZWQgaW50IG10X3Jhd3NpemU7IC8qIHJhdyB0YXBlIHNwYWNlIGNvbnN1bWVkLCBpbiBrYiAqLwotCXVuc2lnbmVkIGludCBtdF9zaXplOyAgICAvKiB2b2x1bWUgc2l6ZSBhZnRlciBkZWNvbXByZXNzaW9uLCBpbiBrYiAqLwotCXVuc2lnbmVkIGludCBtdF9jbXByOjE7ICAvKiB0aGlzIHZvbHVtZSBoYXMgYmVlbiBjb21wcmVzc2VkICovCi19OwotCi0vKiByYXcgYWNjZXNzIHRvIGEgZmxvcHB5IGRyaXZlLCByZWFkIGFuZCB3cml0ZSBhbiBhcmJpdHJhcnkgc2VnbWVudC4KLSAqIEZvciBmdGFwZS96ZnRhcGUgdG8gc3VwcG9ydCBmb3JtYXR0aW5nIGV0Yy4KLSAqLwotI2RlZmluZSBNVF9GVF9SRF9TSU5HTEUgIDAKLSNkZWZpbmUgTVRfRlRfUkRfQUhFQUQgICAxCi0jZGVmaW5lIE1UX0ZUX1dSX0FTWU5DICAgMCAvKiBzdGFydCB0YXBlIG9ubHkgd2hlbiBhbGwgYnVmZmVycyBhcmUgZnVsbCAgICAgKi8KLSNkZWZpbmUgTVRfRlRfV1JfTVVMVEkgICAxIC8qIHN0YXJ0IHRhcGUsIGNvbnRpbnVlIHVudGlsIGJ1ZmZlcnMgYXJlIGVtcHR5ICAqLwotI2RlZmluZSBNVF9GVF9XUl9TSU5HTEUgIDIgLyogd3JpdGUgYSBzaW5nbGUgc2VnbWVudCBhbmQgc3RvcCBhZnRlcndhcmRzICAgICovCi0jZGVmaW5lIE1UX0ZUX1dSX0RFTEVURSAgMyAvKiB3cml0ZSBkZWxldGVkIGRhdGEgbWFya3MsIG9uZSBzZWdtZW50IGF0IHRpbWUgKi8KLQotc3RydWN0IG10ZnRzZWcKLXsgICAgICAgICAgICAKLQl1bnNpZ25lZCBtdF9zZWdubzsgICAvKiB0aGUgc2VnbWVudCB0byByZWFkIG9yIHdyaXRlICovCi0JdW5zaWduZWQgbXRfbW9kZTsgICAgLyogbW9kZXMgZm9yIHJlYWQvd3JpdGUgKHN5bmMvYXN5bmMgZXRjLikgKi8KLQlpbnQgICAgICBtdF9yZXN1bHQ7ICAvKiByZXN1bHQgb2Ygci93IHJlcXVlc3QsIG5vdCBvZiB0aGUgaW9jdGwgKi8KLQl2b2lkICAgIF9fdXNlciAqbXRfZGF0YTsgICAgLyogVXNlciBzcGFjZSBidWZmZXI6IG11c3QgYmUgMjlrYiAqLwotfTsKLQotLyogZ2V0IHRhcGUgY2FwYWNpdHkgKGZ0YXBlL3pmdGFwZSkKLSAqLwotc3RydWN0IG10dGFwZXNpemUgewotCXVuc2lnbmVkIGxvbmcgbXRfY2FwYWNpdHk7IC8qIGVudGlyZSwgdW5jb21wcmVzc2VkIGNhcGFjaXR5IAotCQkJCSAgICAqIG9mIGEgY2FydHJpZGdlCi0JCQkJICAgICovCi0JdW5zaWduZWQgbG9uZyBtdF91c2VkOyAgICAgLyogd2hhdCBoYXMgYmVlbiB1c2VkIHNvIGZhciwgcmF3IAotCQkJCSAgICAqIHVuY29tcHJlc3NlZCBhbW91bnQKLQkJCQkgICAgKi8KLX07Ci0KLS8qICBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGZ0Zm10X29wIGZpZWxkCi0gKi8KLSNkZWZpbmUgRlRGTVRfU0VUX1BBUk1TCQkxIC8qIHNldCBzb2Z0d2FyZSBwYXJtcyAqLwotI2RlZmluZSBGVEZNVF9HRVRfUEFSTVMJCTIgLyogZ2V0IHNvZnR3YXJlIHBhcm1zICovCi0jZGVmaW5lIEZURk1UX0ZPUk1BVF9UUkFDSwkzIC8qIHN0YXJ0IGZvcm1hdHRpbmcgYSB0YXBlIHRyYWNrICAgKi8KLSNkZWZpbmUgRlRGTVRfU1RBVFVTCQk0IC8qIG1vbml0b3IgZm9ybWF0dGluZyBhIHRhcGUgdHJhY2sgKi8KLSNkZWZpbmUgRlRGTVRfVkVSSUZZCQk1IC8qIHZlcmlmeSB0aGUgZ2l2ZW4gc2VnbWVudCAgICAgICAgKi8KLQotc3RydWN0IGZ0Zm10cGFybXMgewotCXVuc2lnbmVkIGNoYXIgIGZ0X3FpY3N0ZDsgICAvKiBRSUMtNDAvUUlDLTgwL1FJQy0zMDEwL1FJQy0zMDIwICovCi0JdW5zaWduZWQgY2hhciAgZnRfZm10Y29kZTsgIC8qIFJlZmVyIHRvIHRoZSBRSUMgc3BlY3MgKi8KLQl1bnNpZ25lZCBjaGFyICBmdF9maG07ICAgICAgLyogZmxvcHB5IGhlYWQgbWF4ICovCi0JdW5zaWduZWQgY2hhciAgZnRfZnRtOyAgICAgIC8qIGZsb3BweSB0cmFjayBtYXggKi8KLQl1bnNpZ25lZCBzaG9ydCBmdF9zcHQ7ICAgICAgLyogc2VnbWVudHMgcGVyIHRyYWNrICovCi0JdW5zaWduZWQgc2hvcnQgZnRfdHBjOyAgICAgIC8qIHRyYWNrcyBwZXIgY2FydHJpZGdlICovCi19OwotCi1zdHJ1Y3QgZnRmbXR0cmFjayB7Ci0JdW5zaWduZWQgaW50ICBmdF90cmFjazsgICAvKiB0cmFjayB0byBmb3JtYXQgKi8KLQl1bnNpZ25lZCBjaGFyIGZ0X2dhcDM7ICAgIC8qIHNpemUgb2YgZ2FwMywgZm9yIEZPUk1BVF9UUksgKi8KLX07Ci0KLXN0cnVjdCBmdGZtdHN0YXR1cyB7Ci0JdW5zaWduZWQgaW50ICBmdF9zZWdtZW50OyAgLyogc2VnbWVudCBjdXJyZW50bHkgYmVpbmcgZm9ybWF0dGVkICovCi19OwotCi1zdHJ1Y3QgZnRmbXR2ZXJpZnkgewotCXVuc2lnbmVkIGludCAgZnRfc2VnbWVudDsgICAvKiBzZWdtZW50IHRvIHZlcmlmeSAqLwotCXVuc2lnbmVkIGxvbmcgZnRfYnNtOyAgICAgICAvKiBic20gYXMgcmVzdWx0IG9mIFZFUklGWSBjbWQgKi8KLX07Ci0KLXN0cnVjdCBtdGZ0Zm9ybWF0IHsKLQl1bnNpZ25lZCBpbnQgZm10X29wOyAgICAgIC8qIG9wZXJhdGlvbiB0byBwZXJmb3JtICovCi0JdW5pb24gZm10X2FyZyB7Ci0JCXN0cnVjdCBmdGZtdHBhcm1zICBmbXRfcGFybXM7ICAvKiBmb3JtYXQgcGFyYW1ldGVycyAqLwotCQlzdHJ1Y3QgZnRmbXR0cmFjayAgZm10X3RyYWNrOyAgLyogY3RybCB3aGlsZSBmb3JtYXR0aW5nICovCi0JCXN0cnVjdCBmdGZtdHN0YXR1cyBmbXRfc3RhdHVzOwotCQlzdHJ1Y3QgZnRmbXR2ZXJpZnkgZm10X3ZlcmlmeTsgLyogZm9yIHZlcmlmeWluZyAqLyAKLQl9IGZtdF9hcmc7Ci19OwotCi1zdHJ1Y3QgbXRmdGNtZCB7Ci0JdW5zaWduZWQgaW50IGZ0X3dhaXRfYmVmb3JlOyAvKiB0aW1lb3V0IHRvIHdhaXQgZm9yIGRyaXZlIHRvIGdldCByZWFkeSAKLQkJCQkgICAgICAqIGJlZm9yZSBjb21tYW5kIGlzIHNlbnQuIE1pbGxpc2Vjb25kcwotCQkJCSAgICAgICovCi0JcWljMTE3X2NtZF90IGZ0X2NtZDsgICAgICAgICAvKiBjb21tYW5kIHRvIHNlbmQgKi8KLQl1bnNpZ25lZCBjaGFyIGZ0X3Bhcm1fY250OyAgIC8qIHplcm86IG5vIHBhcm0gaXMgc2VudC4gKi8KLQl1bnNpZ25lZCBjaGFyIGZ0X3Bhcm1zWzNdOyAgIC8qIHBhcmFtZXRlcihzKSB0byBzZW5kIHRvCi0JCQkJICAgICAgKiB0aGUgZHJpdmUuIFRoZSBwYXJtcyBhcmUgbmliYmxlcwotCQkJCSAgICAgICogZHJpdmVyIHNlbmRzIGNtZCArIDIgc3RlcCBwdWxzZXMgKi8KLQl1bnNpZ25lZCBpbnQgZnRfcmVzdWx0X2JpdHM7IC8qIGlmIG5vbiB6ZXJvLCBudW1iZXIgb2YgYml0cwotCQkJCSAgICAgICoJcmV0dXJuZWQgYnkgdGhlIHRhcGUgZHJpdmUKLQkJCQkgICAgICAqLwotCXVuc2lnbmVkIGludCBmdF9yZXN1bHQ7ICAgICAgLyogdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgdGFwZSBkcml2ZSovCi0JdW5zaWduZWQgaW50IGZ0X3dhaXRfYWZ0ZXI7ICAvKiB0aW1lb3V0IHRvIHdhaXQgZm9yIGRyaXZlIHRvIGdldCByZWFkeQotCQkJCSAgICAgICogYWZ0ZXIgY29tbWFuZCBpcyBzZW50LiAwOiBkb24ndCB3YWl0ICovCi0JaW50IGZ0X3N0YXR1czsJICAgICAgICAgICAgIC8qIHN0YXR1cyByZXR1cm5lZCBieSByZWFkeSB3YWl0Ci0JCQkJICAgICAgKiB1bmRlZmluZWQgaWYgdGltZW91dCB3YXMgMC4KLQkJCQkgICAgICAqLwotCWludCBmdF9lcnJvcjsgICAgICAgICAgICAgICAgLyogZXJyb3IgY29kZSBpZiBlcnJvciBzdGF0dXMgd2FzIHNldCBieSAKLQkJCQkgICAgICAqIGNvbW1hbmQKLQkJCQkgICAgICAqLwotfTsKLQogLyogbWFnIHRhcGUgaW8gY29udHJvbCBjb21tYW5kcyAqLwogI2RlZmluZQlNVElPQ1RPUAlfSU9XKCdtJywgMSwgc3RydWN0IG10b3ApCS8qIGRvIGEgbWFnIHRhcGUgb3AgKi8KICNkZWZpbmUJTVRJT0NHRVQJX0lPUignbScsIDIsIHN0cnVjdCBtdGdldCkJLyogZ2V0IHRhcGUgc3RhdHVzICovCiAjZGVmaW5lCU1USU9DUE9TCV9JT1IoJ20nLCAzLCBzdHJ1Y3QgbXRwb3MpCS8qIGdldCB0YXBlIHBvc2l0aW9uICovCiAKLS8qIFRoZSBuZXh0IHR3byBhcmUgdXNlZCBieSB0aGUgUUlDLTAyIGRyaXZlciBmb3IgcnVudGltZSByZWNvbmZpZ3VyYXRpb24uCi0gKiBTZWUgdHBxaWMwMi5oIGZvciBzdHJ1Y3QgbXRjb25maWdpbmZvLgotICovCi0jZGVmaW5lCU1USU9DR0VUQ09ORklHCV9JT1IoJ20nLCA0LCBzdHJ1Y3QgbXRjb25maWdpbmZvKSAvKiBnZXQgdGFwZSBjb25maWcgKi8KLSNkZWZpbmUJTVRJT0NTRVRDT05GSUcJX0lPVygnbScsIDUsIHN0cnVjdCBtdGNvbmZpZ2luZm8pIC8qIHNldCB0YXBlIGNvbmZpZyAqLwotCi0vKiB0aGUgbmV4dCBzaXggYXJlIHVzZWQgYnkgdGhlIGZsb3BweSBmdGFwZSBkcml2ZXJzIGFuZCBpdHMgZnJvbnRlbmRzCi0gKiBzb3JyeSwgYnV0IE1USU9DVE9QIGNvbW1hbmRzIGFyZSB3cml0ZSBvbmx5LgotICovCi0jZGVmaW5lCU1USU9DUkRGVFNFRyAgICBfSU9XUignbScsIDYsIHN0cnVjdCBtdGZ0c2VnKSAgLyogcmVhZCBhIHNlZ21lbnQgKi8KLSNkZWZpbmUJTVRJT0NXUkZUU0VHICAgIF9JT1dSKCdtJywgNywgc3RydWN0IG10ZnRzZWcpICAgLyogd3JpdGUgYSBzZWdtZW50ICovCi0jZGVmaW5lIE1USU9DVk9MSU5GTwlfSU9SKCdtJywgIDgsIHN0cnVjdCBtdHZvbGluZm8pIC8qIGluZm8gYWJvdXQgdm9sdW1lICovCi0jZGVmaW5lIE1USU9DR0VUU0laRSAgICBfSU9SKCdtJywgIDksIHN0cnVjdCBtdHRhcGVzaXplKS8qIGdldCBjYXJ0cmlkZ2Ugc2l6ZSovCi0jZGVmaW5lIE1USU9DRlRGT1JNQVQgICBfSU9XUignbScsIDEwLCBzdHJ1Y3QgbXRmdGZvcm1hdCkgLyogZm9ybWF0IGZ0YXBlICovCi0jZGVmaW5lIE1USU9DRlRDTUQJX0lPV1IoJ20nLCAxMSwgc3RydWN0IG10ZnRjbWQpIC8qIHNlbmQgUUlDLTExNyBjbWQgKi8KIAogLyogR2VuZXJpYyBNYWcgVGFwZSAoZGV2aWNlIGluZGVwZW5kZW50KSBzdGF0dXMgbWFjcm9zIGZvciBleGFtaW5pbmcKICAqIG10X2dzdGF0IC0tIEhQLVVYIGNvbXBhdGlibGUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L211dGV4LmggYi9pbmNsdWRlL2xpbnV4L211dGV4LmgKaW5kZXggYjJiOTFjNC4uYjgxYmMyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXV0ZXguaApAQCAtMTA1LDcgKzEwNSw3IEBACiBleHRlcm4gdm9pZCBfX211dGV4X2luaXQoc3RydWN0IG11dGV4ICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLAogCQkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKIAotLyoqKgorLyoqCiAgKiBtdXRleF9pc19sb2NrZWQgLSBpcyB0aGUgbXV0ZXggbG9ja2VkCiAgKiBAbG9jazogdGhlIG11dGV4IHRvIGJlIHF1ZXJpZWQKICAqCkBAIC0xMjUsOCArMTI1LDEwIEBACiAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwogZXh0ZXJuIHZvaWQgbXV0ZXhfbG9ja19uZXN0ZWQoc3RydWN0IG11dGV4ICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MpOworZXh0ZXJuIGludCBtdXRleF9sb2NrX2ludGVycnVwdGlibGVfbmVzdGVkKHN0cnVjdCBtdXRleCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzKTsKICNlbHNlCiAjIGRlZmluZSBtdXRleF9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcykgbXV0ZXhfbG9jayhsb2NrKQorIyBkZWZpbmUgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX25lc3RlZChsb2NrLCBzdWJjbGFzcykgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKGxvY2spCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbl9yMzk2NC5oIGIvaW5jbHVkZS9saW51eC9uX3IzOTY0LmgKaW5kZXggZGI0ZjM3Ny4uZGUyNGFmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uX3IzOTY0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uX3IzOTY0LmgKQEAgLTExNiw3ICsxMTYsNyBAQAogCiBzdHJ1Y3QgcjM5NjRfY2xpZW50X2luZm8gewogCXNwaW5sb2NrX3QgICAgIGxvY2s7Ci0JcGlkX3QgICAgICAgICAgcGlkOworCXN0cnVjdCBwaWQgICAgKnBpZDsKIAl1bnNpZ25lZCBpbnQgICBzaWdfZmxhZ3M7CiAKIAlzdHJ1Y3QgcjM5NjRfY2xpZW50X2luZm8gKm5leHQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVpLmggYi9pbmNsdWRlL2xpbnV4L25hbWVpLmgKaW5kZXggZjVmMTk2MC4uZDM5YTVhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYW1laS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaApAQCAtMjksNiArMjksMTEgQEAKIAl9IGludGVudDsKIH07CiAKK3N0cnVjdCBwYXRoIHsKKwlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Cit9OworCiAvKgogICogVHlwZSBvZiB0aGUgbGFzdCBjb21wb25lbnQgb24gTE9PS1VQX1BBUkVOVAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC9uYW1lc3BhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEzNzAwOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVzcGFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotI2lmbmRlZiBfTkFNRVNQQUNFX0hfCi0jZGVmaW5lIF9OQU1FU1BBQ0VfSF8KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgotCi1zdHJ1Y3QgbmFtZXNwYWNlIHsKLQlhdG9taWNfdAkJY291bnQ7Ci0Jc3RydWN0IHZmc21vdW50ICoJcm9vdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgcG9sbDsKLQlpbnQgZXZlbnQ7Ci19OwotCi1leHRlcm4gaW50IGNvcHlfbmFtZXNwYWNlKGludCwgc3RydWN0IHRhc2tfc3RydWN0ICopOwotZXh0ZXJuIHZvaWQgX19wdXRfbmFtZXNwYWNlKHN0cnVjdCBuYW1lc3BhY2UgKm5hbWVzcGFjZSk7Ci1leHRlcm4gc3RydWN0IG5hbWVzcGFjZSAqZHVwX25hbWVzcGFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IGZzX3N0cnVjdCAqKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHB1dF9uYW1lc3BhY2Uoc3RydWN0IG5hbWVzcGFjZSAqbmFtZXNwYWNlKQotewotCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZuYW1lc3BhY2UtPmNvdW50LCAmdmZzbW91bnRfbG9jaykpCi0JCS8qIHJlbGVhc2VzIHZmc21vdW50X2xvY2sgKi8KLQkJX19wdXRfbmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X25hbWVzcGFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0Jc3RydWN0IG5hbWVzcGFjZSAqbmFtZXNwYWNlID0gcC0+bnNwcm94eS0+bmFtZXNwYWNlOwotCWlmIChuYW1lc3BhY2UpIHsKLQkJcHV0X25hbWVzcGFjZShuYW1lc3BhY2UpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdldF9uYW1lc3BhY2Uoc3RydWN0IG5hbWVzcGFjZSAqbmFtZXNwYWNlKQotewotCWF0b21pY19pbmMoJm5hbWVzcGFjZS0+Y291bnQpOwotfQotCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uY3BfbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbmNwX21vdW50LmgKaW5kZXggZjQ2YmRkYy4uYTJiNTQ5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uY3BfbW91bnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oCkBAIC03NSw3ICs3NSw3IEBACiAJdW5zaWduZWQgaW50CSBpbnRfZmxhZ3M7CS8qIGludGVybmFsIGZsYWdzICovCiAjZGVmaW5lIE5DUF9JTU9VTlRfTE9HR0VESU5fUE9TU0lCTEUJMHgwMDAxCiAJX19rZXJuZWxfdWlkMzJfdCBtb3VudGVkX3VpZDsJLyogV2hvIG1heSB1bW91bnQoKSB0aGlzIGZpbGVzeXN0ZW0/ICovCi0JX19rZXJuZWxfcGlkX3QgICB3ZG9nX3BpZDsJCS8qIFdobyBjYXJlcyBmb3Igb3VyIHdhdGNoZG9nIHBhY2tldHM/ICovCisJc3RydWN0IHBpZCAgICAgICp3ZG9nX3BpZDsJLyogV2hvIGNhcmVzIGZvciBvdXIgd2F0Y2hkb2cgcGFja2V0cz8gKi8KIAl1bnNpZ25lZCBpbnQgICAgIG5jcF9mZDsJLyogVGhlIHNvY2tldCB0byB0aGUgbmNwIHBvcnQgKi8KIAl1bnNpZ25lZCBpbnQgICAgIHRpbWVfb3V0OwkvKiBIb3cgbG9uZyBzaG91bGQgSSB3YWl0IGFmdGVyCiAJCQkJCSAgIHNlbmRpbmcgYSBOQ1AgcmVxdWVzdD8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oCmluZGV4IDZmMGRmZWIuLmYyOGQ4YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBfTElOVVhfTkVUX0gKIAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxhc20vc29ja2V0Lmg+CiAKIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKQEAgLTU3LDYgKzU2LDcgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KIAogI2RlZmluZSBTT0NLX0FTWU5DX05PU1BBQ0UJMAogI2RlZmluZSBTT0NLX0FTWU5DX1dBSVREQVRBCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IGM1NzA4OGYuLmZlYTBkOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMTkzLDEzICsxOTMsMjAgQEAKIHsKIAlzdHJ1Y3QgaGhfY2FjaGUgKmhoX25leHQ7CS8qIE5leHQgZW50cnkJCQkgICAgICovCiAJYXRvbWljX3QJaGhfcmVmY250OwkvKiBudW1iZXIgb2YgdXNlcnMgICAgICAgICAgICAgICAgICAgKi8KLQlfX2JlMTYJCWhoX3R5cGU7CS8qIHByb3RvY29sIGlkZW50aWZpZXIsIGYuZSBFVEhfUF9JUAorLyoKKyAqIFdlIHdhbnQgaGhfb3V0cHV0LCBoaF9sZW4sIGhoX2xvY2sgYW5kIGhoX2RhdGEgYmUgYSBpbiBhIHNlcGFyYXRlCisgKiBjYWNoZSBsaW5lIG9uIFNNUC4KKyAqIFRoZXkgYXJlIG1vc3RseSByZWFkLCBidXQgaGhfcmVmY250IG1heSBiZSBjaGFuZ2VkIHF1aXRlIGZyZXF1ZW50bHksCisgKiBpbmN1cnJpbmcgY2FjaGUgbGluZSBwaW5nIHBvbmdzLgorICovCisJX19iZTE2CQloaF90eXBlIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisJCQkJCS8qIHByb3RvY29sIGlkZW50aWZpZXIsIGYuZSBFVEhfUF9JUAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICBOT1RFOiAgRm9yIFZMQU5zLCB0aGlzIHdpbGwgYmUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogIGVuY2FwdXNsYXRlZCB0eXBlLiAtLUJMRwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCXUxNgkJaGhfbGVuOwkJLyogbGVuZ3RoIG9mIGhlYWRlciAqLwogCWludAkJKCpoaF9vdXRwdXQpKHN0cnVjdCBza19idWZmICpza2IpOwotCXJ3bG9ja190CWhoX2xvY2s7CisJc2VxbG9ja190CWhoX2xvY2s7CiAKIAkvKiBjYWNoZWQgaGFyZHdhcmUgaGVhZGVyOyBhbGxvdyBmb3IgbWFjaGluZSBhbGlnbm1lbnQgbmVlZHMuICAgICAgICAqLwogI2RlZmluZSBISF9EQVRBX01PRAkxNgpAQCAtODk5LDYgKzkwNiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9wb2xsX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwogCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfUlhfU0NIRUQsICZkZXYtPnN0YXRlKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCmluZGV4IDZiMDFiYTIuLjJmNGU5OGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfU0FDS19QRVJNCQkweDAyCiAKIC8qIFRoaXMgc2VuZGVyIHNlbnQgRklOIGZpcnN0ICovCi0jZGVmaW5lIElQX0NUX1RDUF9GTEFHX0NMT1NFX0lOSVQJCTB4MDMKKyNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfQ0xPU0VfSU5JVAkJMHgwNAogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaAppbmRleCAwYmUyMzU0Li4yNGM4Nzg2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCkBAIC0xOTAsNiArMTkwLDcgQEAKIAogLyogVGhlIGFyZ3VtZW50IHRvIEFSUFRfU09fQUREX0NPVU5URVJTLiAqLwogI2RlZmluZSBhcnB0X2NvdW50ZXJzX2luZm8geHRfY291bnRlcnNfaW5mbworI2RlZmluZSBhcnB0X2NvdW50ZXJzIHh0X2NvdW50ZXJzCiAKIC8qIFRoZSBhcmd1bWVudCB0byBBUlBUX1NPX0dFVF9FTlRSSUVTLiAqLwogc3RydWN0IGFycHRfZ2V0X2VudHJpZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKaW5kZXggNmM0NjEzZi4uNTU2ODlmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKQEAgLTY4LDcgKzY4LDYgQEAKIAl9IGRhZGRyOwogfTsKIAotZXh0ZXJuIGludCBicm5mX2RlZmVycmVkX2hvb2tzOwogI2Vsc2UKICNkZWZpbmUgbmZfYnJpZGdlX21heWJlX2NvcHlfaGVhZGVyKHNrYikJKDApCiAjZGVmaW5lIG5mX2JyaWRnZV9wYWQoc2tiKQkJCSgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCmluZGV4IDU4MjFlYjUuLmNlYWU4N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKQEAgLTU3LDEwICs1Nyw4IEBACiAJTkZfSVBfUFJJX1JBVyA9IC0zMDAsCiAJTkZfSVBfUFJJX1NFTElOVVhfRklSU1QgPSAtMjI1LAogCU5GX0lQX1BSSV9DT05OVFJBQ0sgPSAtMjAwLAotCU5GX0lQX1BSSV9CUklER0VfU0FCT1RBR0VfRk9SV0FSRCA9IC0xNzUsCiAJTkZfSVBfUFJJX01BTkdMRSA9IC0xNTAsCiAJTkZfSVBfUFJJX05BVF9EU1QgPSAtMTAwLAotCU5GX0lQX1BSSV9CUklER0VfU0FCT1RBR0VfTE9DQUxfT1VUID0gLTUwLAogCU5GX0lQX1BSSV9GSUxURVIgPSAwLAogCU5GX0lQX1BSSV9OQVRfU1JDID0gMTAwLAogCU5GX0lQX1BSSV9TRUxJTlVYX0xBU1QgPSAyMjUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAppbmRleCA0ZjA2ZGFkLi45OGQ1NjZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KIAogI2RlZmluZSBJUFRfRlVOQ1RJT05fTUFYTkFNRUxFTiBYVF9GVU5DVElPTl9NQVhOQU1FTEVOCi0jZGVmaW5lIElQVF9UQUJMRV9NQVhOQU1FTEVOIFhUX0ZVTkNUSU9OX01BWE5BTUVMRU4KKyNkZWZpbmUgSVBUX1RBQkxFX01BWE5BTUVMRU4gWFRfVEFCTEVfTUFYTkFNRUxFTgogI2RlZmluZSBpcHRfbWF0Y2ggeHRfbWF0Y2gKICNkZWZpbmUgaXB0X3RhcmdldCB4dF90YXJnZXQKICNkZWZpbmUgaXB0X3RhYmxlIHh0X3RhYmxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKaW5kZXggYWI4MWE2ZC4uNjZjYThlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaApAQCAtNjIsMTAgKzYyLDggQEAKIAlORl9JUDZfUFJJX0NPTk5UUkFDS19ERUZSQUcgPSAtNDAwLAogCU5GX0lQNl9QUklfU0VMSU5VWF9GSVJTVCA9IC0yMjUsCiAJTkZfSVA2X1BSSV9DT05OVFJBQ0sgPSAtMjAwLAotCU5GX0lQNl9QUklfQlJJREdFX1NBQk9UQUdFX0ZPUldBUkQgPSAtMTc1LAogCU5GX0lQNl9QUklfTUFOR0xFID0gLTE1MCwKIAlORl9JUDZfUFJJX05BVF9EU1QgPSAtMTAwLAotCU5GX0lQNl9QUklfQlJJREdFX1NBQk9UQUdFX0xPQ0FMX09VVCA9IC01MCwKIAlORl9JUDZfUFJJX0ZJTFRFUiA9IDAsCiAJTkZfSVA2X1BSSV9OQVRfU1JDID0gMTAwLAogCU5GX0lQNl9QUklfU0VMSU5VWF9MQVNUID0gMjI1LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKaW5kZXggMDQ5NjMwNi4uYzVkNDA4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCkBAIC0zMDgsNiArMzA4LDcgQEAKIGV4dGVybiBpbnQgbmZzX3JldmFsaWRhdGVfaW5vZGUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gaW50IF9fbmZzX3JldmFsaWRhdGVfaW5vZGUoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBuZnNfcmV2YWxpZGF0ZV9tYXBwaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKK2V4dGVybiBpbnQgbmZzX3JldmFsaWRhdGVfbWFwcGluZ19ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwogZXh0ZXJuIGludCBuZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKIGV4dGVybiB2b2lkIG5mc19zZXRhdHRyX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogZXh0ZXJuIHZvaWQgbmZzX2JlZ2luX2F0dHJfdXBkYXRlKHN0cnVjdCBpbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmggYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCmluZGV4IGVkYjU0YzMuLjRiN2M0YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaApAQCAtNTIsOCArNTIsNiBAQAogc3RydWN0IHJlYWRkaXJfY2QgewogCV9fYmUzMgkJCWVycjsJLyogMCwgbmZzZXJyLCBvciBuZnNlcnJfZW9mICovCiB9OwotdHlwZWRlZiBpbnQJCSgqZW5jb2RlX2RlbnRfZm4pKHN0cnVjdCByZWFkZGlyX2NkICosIGNvbnN0IGNoYXIgKiwKLQkJCQkJCWludCwgbG9mZl90LCBpbm9fdCwgdW5zaWduZWQgaW50KTsKIHR5cGVkZWYgaW50ICgqbmZzZF9kaXJvcF90KShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQsIGludCk7CiAKIGV4dGVybiBzdHJ1Y3Qgc3ZjX3Byb2dyYW0JbmZzZF9wcm9ncmFtOwpAQCAtMTE3LDcgKzExNSw3IEBACiBpbnQJCW5mc2RfdHJ1bmNhdGUoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKIAkJCQl1bnNpZ25lZCBsb25nIHNpemUpOwogX19iZTMyCQluZnNkX3JlYWRkaXIoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKLQkJCSAgICAgbG9mZl90ICosIHN0cnVjdCByZWFkZGlyX2NkICosIGVuY29kZV9kZW50X2ZuKTsKKwkJCSAgICAgbG9mZl90ICosIHN0cnVjdCByZWFkZGlyX2NkICosIGZpbGxkaXJfdCk7CiBfX2JlMzIJCW5mc2Rfc3RhdGZzKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCiAJCQkJc3RydWN0IGtzdGF0ZnMgKik7CiAKQEAgLTI3NSwxMiArMjczLDEyIEBACiAgKiB3ZSBtaWdodCBwcm9jZXNzIGFuIG9wZXJhdGlvbiB3aXRoIHNpZGUgZWZmZWN0cywgYW5kIGJlIHVuYWJsZSB0bwogICogdGVsbCB0aGUgY2xpZW50IHRoYXQgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQuCiAgKgotICogQ09NUE9VTkRfU0xBQ0tfU1BBQ0UgLSB0aGlzIGlzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBidWZmZXIgc3BhY2UKKyAqIENPTVBPVU5EX1NMQUNLX1NQQUNFIC0gdGhpcyBpcyB0aGUgbWluaW11bSBieXRlcyBvZiBidWZmZXIgc3BhY2UKICAqIG5lZWRlZCB0byBlbmNvZGUgYW4gIm9yZGluYXJ5IiBfc3VjY2Vzc2Z1bF8gb3BlcmF0aW9uLiAgKEdFVEFUVFIsCiAgKiBSRUFELCBSRUFERElSLCBhbmQgUkVBRExJTksgaGF2ZSB0aGVpciBvd24gYnVmZmVyIGNoZWNrcy4pICBpZiB3ZQogICogZmFsbCBiZWxvdyB0aGlzIGxldmVsLCB3ZSBmYWlsIHRoZSBuZXh0IG9wZXJhdGlvbiB3aXRoIE5GUzRFUlJfUkVTT1VSQ0UuCiAgKgotICogQ09NUE9VTkRfRVJSX1NMQUNLX1NQQUNFIC0gdGhpcyBpcyB0aGUgbWluaW11bSBhbW91bnQgb2YgYnVmZmVyIHNwYWNlCisgKiBDT01QT1VORF9FUlJfU0xBQ0tfU1BBQ0UgLSB0aGlzIGlzIHRoZSBtaW5pbXVtIGJ5dGVzIG9mIGJ1ZmZlciBzcGFjZQogICogbmVlZGVkIHRvIGVuY29kZSBhbiBvcGVyYXRpb24gd2hpY2ggaGFzIGZhaWxlZCB3aXRoIE5GUzRFUlJfUkVTT1VSQ0UuCiAgKiBjYXJlIGlzIHRha2VuIHRvIGVuc3VyZSB0aGF0IHdlIG5ldmVyIGZhbGwgYmVsb3cgdGhpcyBsZXZlbCBmb3IgYW55CiAgKiByZWFzb24uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaCBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCmluZGV4IGYzYjUxZDYuLmQ5YzZjMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCkBAIC0yMTcsMTEgKzIxNyw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3Qgc3ZjX2ZoICoKIGZoX2NvcHkoc3RydWN0IHN2Y19maCAqZHN0LCBzdHJ1Y3Qgc3ZjX2ZoICpzcmMpCiB7Ci0JaWYgKHNyYy0+ZmhfZGVudHJ5IHx8IHNyYy0+ZmhfbG9ja2VkKSB7Ci0JCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IHNyYy0+ZmhfZGVudHJ5OwotCQlwcmludGsoS0VSTl9FUlIgImZoX2NvcHk6IGNvcHlpbmcgJXMvJXMsIGFscmVhZHkgdmVyaWZpZWQhXG4iLAotCQkJZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCX0KKwlXQVJOX09OKHNyYy0+ZmhfZGVudHJ5IHx8IHNyYy0+ZmhfbG9ja2VkKTsKIAkJCQogCSpkc3QgPSAqc3JjOwogCXJldHVybiBkc3Q7CkBAIC0zMDAsMTAgKzI5Niw4IEBACiAJZGZwcmludGsoRklMRU9QLCAibmZzZDogZmhfbG9jayglcykgbG9ja2VkID0gJWRcbiIsCiAJCQlTVkNGSF9mbXQoZmhwKSwgZmhwLT5maF9sb2NrZWQpOwogCi0JaWYgKCFmaHAtPmZoX2RlbnRyeSkgewotCQlwcmludGsoS0VSTl9FUlIgImZoX2xvY2s6IGZoIG5vdCB2ZXJpZmllZCFcbiIpOwotCQlyZXR1cm47Ci0JfQorCUJVR19PTighZGVudHJ5KTsKKwogCWlmIChmaHAtPmZoX2xvY2tlZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJmaF9sb2NrOiAlcy8lcyBhbHJlYWR5IGxvY2tlZCFcbiIsCiAJCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSk7CkBAIC0zMjgsOCArMzIyLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZmhfdW5sb2NrKHN0cnVjdCBzdmNfZmggKmZocCkKIHsKLQlpZiAoIWZocC0+ZmhfZGVudHJ5KQotCQlwcmludGsoS0VSTl9FUlIgImZoX3VubG9jazogZmggbm90IHZlcmlmaWVkIVxuIik7CisJQlVHX09OKCFmaHAtPmZoX2RlbnRyeSk7CiAKIAlpZiAoZmhwLT5maF9sb2NrZWQpIHsKIAkJZmlsbF9wb3N0X3djYyhmaHApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL3N0YXRlLmggYi9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdGUuaAppbmRleCBjMzY3M2Y0Li5hYjVjMjM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2Qvc3RhdGUuaApAQCAtMjczLDcgKzI3Myw2IEBACiAJKChlcnIpICE9IG5mc2Vycl9zdGFsZV9zdGF0ZWlkKSAmJiAgICAgIFwKIAkoKGVycikgIT0gbmZzZXJyX2JhZF9zdGF0ZWlkKSkKIAotZXh0ZXJuIF9fYmUzMiBuZnNkNF9yZW5ldyhjbGllbnRpZF90ICpjbGlkKTsKIGV4dGVybiBfX2JlMzIgbmZzNF9wcmVwcm9jZXNzX3N0YXRlaWRfb3Aoc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwKIAkJc3RhdGVpZF90ICpzdGF0ZWlkLCBpbnQgZmxhZ3MsIHN0cnVjdCBmaWxlICoqZmlscCk7CiBleHRlcm4gdm9pZCBuZnM0X2xvY2tfc3RhdGUodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QveGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc2QveGRyLmgKaW5kZXggODc3MTkyZC4uNjc4ODVkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL3hkci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC94ZHIuaApAQCAtMTY1LDggKzE2NSw4IEBACiBpbnQgbmZzc3ZjX2VuY29kZV9zdGF0ZnNyZXMoc3RydWN0IHN2Y19ycXN0ICosIF9fYmUzMiAqLCBzdHJ1Y3QgbmZzZF9zdGF0ZnNyZXMgKik7CiBpbnQgbmZzc3ZjX2VuY29kZV9yZWFkZGlycmVzKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwgc3RydWN0IG5mc2RfcmVhZGRpcnJlcyAqKTsKIAotaW50IG5mc3N2Y19lbmNvZGVfZW50cnkoc3RydWN0IHJlYWRkaXJfY2QgKiwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQlpbnQgbmFtbGVuLCBsb2ZmX3Qgb2Zmc2V0LCBpbm9fdCBpbm8sIHVuc2lnbmVkIGludCk7CitpbnQgbmZzc3ZjX2VuY29kZV9lbnRyeSh2b2lkICosIGNvbnN0IGNoYXIgKm5hbWUsCisJCQlpbnQgbmFtbGVuLCBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQpOwogCiBpbnQgbmZzc3ZjX3JlbGVhc2VfZmhhbmRsZShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICosIHN0cnVjdCBuZnNkX2ZoYW5kbGUgKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC94ZHIzLmggYi9pbmNsdWRlL2xpbnV4L25mc2QveGRyMy5oCmluZGV4IDc5OTYzODYuLjg5ZDlkNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC94ZHIzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL3hkcjMuaApAQCAtMzMxLDExICszMzEsMTEgQEAKIAkJCQlzdHJ1Y3QgbmZzZDNfYXR0cnN0YXQgKik7CiBpbnQgbmZzM3N2Y19yZWxlYXNlX2ZoYW5kbGUyKHN0cnVjdCBzdmNfcnFzdCAqLCBfX2JlMzIgKiwKIAkJCQlzdHJ1Y3QgbmZzZDNfZmhhbmRsZV9wYWlyICopOwotaW50IG5mczNzdmNfZW5jb2RlX2VudHJ5KHN0cnVjdCByZWFkZGlyX2NkICosIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJaW50IG5hbWxlbiwgbG9mZl90IG9mZnNldCwgaW5vX3QgaW5vLAoraW50IG5mczNzdmNfZW5jb2RlX2VudHJ5KHZvaWQgKiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlpbnQgbmFtbGVuLCBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLAogCQkJCXVuc2lnbmVkIGludCk7Ci1pbnQgbmZzM3N2Y19lbmNvZGVfZW50cnlfcGx1cyhzdHJ1Y3QgcmVhZGRpcl9jZCAqLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCWludCBuYW1sZW4sIGxvZmZfdCBvZmZzZXQsIGlub190IGlubywKK2ludCBuZnMzc3ZjX2VuY29kZV9lbnRyeV9wbHVzKHZvaWQgKiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlpbnQgbmFtbGVuLCBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLAogCQkJCXVuc2lnbmVkIGludCk7CiAvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBORlN2MyBBQ0wgY29kZSAqLwogX19iZTMyICpuZnMzc3ZjX2VuY29kZV9wb3N0X29wX2F0dHIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgX19iZTMyICpwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL3hkcjQuaCBiL2luY2x1ZGUvbGludXgvbmZzZC94ZHI0LmgKaW5kZXggNDVjYTAxYi4uMDk3OTliYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL3hkcjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QveGRyNC5oCkBAIC00NCw2ICs0NCwxMiBAQAogI2RlZmluZSBORlNENF9NQVhfVEFHTEVOCTEyOAogI2RlZmluZSBYRFJfTEVOKG4pICAgICAgICAgICAgICAgICAgICAgKCgobikgKyAzKSAmIH4zKQogCitzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgeworCXN0cnVjdCBzdmNfZmggY3VycmVudF9maDsKKwlzdHJ1Y3Qgc3ZjX2ZoIHNhdmVfZmg7CisJc3RydWN0IG5mczRfc3RhdGVvd25lciAqcmVwbGF5X293bmVyOworfTsKKwogc3RydWN0IG5mc2Q0X2NoYW5nZV9pbmZvIHsKIAl1MzIJCWF0b21pYzsKIAl1MzIJCWJlZm9yZV9jdGltZV9zZWM7CkBAIC00MzAsMzUgKzQzNiwzOSBAQAogCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBfX2JlMzIgKmJ1ZmZlciwgaW50ICpjb3VudHAsCiAJCSAgICAgICB1MzIgKmJtdmFsLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKik7CiBleHRlcm4gX19iZTMyIG5mc2Q0X3NldGNsaWVudGlkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAogCQlzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWQgKnNldGNsaWQpOwogZXh0ZXJuIF9fYmUzMiBuZnNkNF9zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAogCQlzdHJ1Y3QgbmZzZDRfc2V0Y2xpZW50aWRfY29uZmlybSAqc2V0Y2xpZW50aWRfY29uZmlybSk7CiBleHRlcm4gX19iZTMyIG5mc2Q0X3Byb2Nlc3Nfb3BlbjEoc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pOwogZXh0ZXJuIF9fYmUzMiBuZnNkNF9wcm9jZXNzX29wZW4yKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCiAJCXN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9vcGVuICpvcGVuKTsKIGV4dGVybiBfX2JlMzIgbmZzZDRfb3Blbl9jb25maXJtKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCi0JCXN0cnVjdCBzdmNfZmggKmN1cnJlbnRfZmgsIHN0cnVjdCBuZnNkNF9vcGVuX2NvbmZpcm0gKm9jLAotCQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICoqKTsKLWV4dGVybiBfX2JlMzIgbmZzZDRfY2xvc2Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwKLQkJc3RydWN0IG5mc2Q0X2Nsb3NlICpjbG9zZSwKLQkJc3RydWN0IG5mczRfc3RhdGVvd25lciAqKnJlcGxheV9vd25lcik7CisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLCBzdHJ1Y3QgbmZzZDRfb3Blbl9jb25maXJtICpvYyk7CitleHRlcm4gX19iZTMyIG5mc2Q0X2Nsb3NlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCXN0cnVjdCBuZnNkNF9jb21wb3VuZF9zdGF0ZSAqLAorCQlzdHJ1Y3QgbmZzZDRfY2xvc2UgKmNsb3NlKTsKIGV4dGVybiBfX2JlMzIgbmZzZDRfb3Blbl9kb3duZ3JhZGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgc3RydWN0IG5mc2Q0X29wZW5fZG93bmdyYWRlICpvZCwKLQkJc3RydWN0IG5mczRfc3RhdGVvd25lciAqKnJlcGxheV9vd25lcik7Ci1leHRlcm4gX19iZTMyIG5mc2Q0X2xvY2soc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwKLQkJc3RydWN0IG5mc2Q0X2xvY2sgKmxvY2ssCi0JCXN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKipyZXBsYXlfb3duZXIpOwotZXh0ZXJuIF9fYmUzMiBuZnNkNF9sb2NrdChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLAorCQlzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKiwKKwkJc3RydWN0IG5mc2Q0X29wZW5fZG93bmdyYWRlICpvZCk7CitleHRlcm4gX19iZTMyIG5mc2Q0X2xvY2soc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCisJCXN0cnVjdCBuZnNkNF9sb2NrICpsb2NrKTsKK2V4dGVybiBfX2JlMzIgbmZzZDRfbG9ja3Qoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCiAJCXN0cnVjdCBuZnNkNF9sb2NrdCAqbG9ja3QpOwotZXh0ZXJuIF9fYmUzMiBuZnNkNF9sb2NrdShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLAotCQlzdHJ1Y3QgbmZzZDRfbG9ja3UgKmxvY2t1LAotCQlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICoqcmVwbGF5X293bmVyKTsKK2V4dGVybiBfX2JlMzIgbmZzZDRfbG9ja3Uoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCisJCXN0cnVjdCBuZnNkNF9sb2NrdSAqbG9ja3UpOwogZXh0ZXJuIF9fYmUzMgogbmZzZDRfcmVsZWFzZV9sb2Nrb3duZXIoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosCiAJCXN0cnVjdCBuZnNkNF9yZWxlYXNlX2xvY2tvd25lciAqcmxvY2tvd25lcik7CiBleHRlcm4gdm9pZCBuZnNkNF9yZWxlYXNlX2NvbXBvdW5kYXJncyhzdHJ1Y3QgbmZzZDRfY29tcG91bmRhcmdzICopOwogZXh0ZXJuIF9fYmUzMiBuZnNkNF9kZWxlZ3JldHVybihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAotCQlzdHJ1Y3Qgc3ZjX2ZoICpjdXJyZW50X2ZoLCBzdHJ1Y3QgbmZzZDRfZGVsZWdyZXR1cm4gKmRyKTsKKwkJc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICosIHN0cnVjdCBuZnNkNF9kZWxlZ3JldHVybiAqZHIpOworZXh0ZXJuIF9fYmUzMiBuZnNkNF9yZW5ldyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAorCQkJICBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKiwgY2xpZW50aWRfdCAqY2xpZCk7CiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnNwcm94eS5oIGIvaW5jbHVkZS9saW51eC9uc3Byb3h5LmgKaW5kZXggOTcxZDFjNi4uMGI5ZjBkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uc3Byb3h5LmgKKysrIGIvaW5jbHVkZS9saW51eC9uc3Byb3h5LmgKQEAgLTQsOSArNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAotc3RydWN0IG5hbWVzcGFjZTsKK3N0cnVjdCBtbnRfbmFtZXNwYWNlOwogc3RydWN0IHV0c19uYW1lc3BhY2U7CiBzdHJ1Y3QgaXBjX25hbWVzcGFjZTsKK3N0cnVjdCBwaWRfbmFtZXNwYWNlOwogCiAvKgogICogQSBzdHJ1Y3R1cmUgdG8gY29udGFpbiBwb2ludGVycyB0byBhbGwgcGVyLXByb2Nlc3MKQEAgLTI1LDcgKzI2LDggQEAKIAlzcGlubG9ja190IG5zbG9jazsKIAlzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqdXRzX25zOwogCXN0cnVjdCBpcGNfbmFtZXNwYWNlICppcGNfbnM7Ci0Jc3RydWN0IG5hbWVzcGFjZSAqbmFtZXNwYWNlOworCXN0cnVjdCBtbnRfbmFtZXNwYWNlICptbnRfbnM7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKnBpZF9uczsKIH07CiBleHRlcm4gc3RydWN0IG5zcHJveHkgaW5pdF9uc3Byb3h5OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDQ4MzBhM2IuLjM1MDg3OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC0yNTMsMTUgKzI1MywxMSBAQAogCiBzdHJ1Y3QgcGFnZTsJLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogCi1pbnQgdGVzdF9jbGVhcl9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIGNhbmNlbF9kaXJ0eV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgYWNjb3VudF9zaXplKTsKKwogaW50IHRlc3RfY2xlYXJfcGFnZV93cml0ZWJhY2soc3RydWN0IHBhZ2UgKnBhZ2UpOwogaW50IHRlc3Rfc2V0X3BhZ2Vfd3JpdGViYWNrKHN0cnVjdCBwYWdlICpwYWdlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JdGVzdF9jbGVhcl9wYWdlX2RpcnR5KHBhZ2UpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfd3JpdGViYWNrKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXRlc3Rfc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggMDFjNzA3Mi4uZjNjNjE3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0yMCw5ICsyMCw2IEBACiAvKiBJbmNsdWRlIHRoZSBwY2kgcmVnaXN0ZXIgZGVmaW5lcyAqLwogI2luY2x1ZGUgPGxpbnV4L3BjaV9yZWdzLmg+CiAKLS8qIEluY2x1ZGUgdGhlIElEIGxpc3QgKi8KLSNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+Ci0KIC8qCiAgKiBUaGUgUENJIGludGVyZmFjZSB0cmVhdHMgbXVsdGktZnVuY3Rpb24gZGV2aWNlcyBhcyBpbmRlcGVuZGVudAogICogZGV2aWNlcy4gIFRoZSBzbG90L2Z1bmN0aW9uIGFkZHJlc3Mgb2YgZWFjaCBkZXZpY2UgaXMgZW5jb2RlZApAQCAtNTQsNiArNTEsOSBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAorLyogSW5jbHVkZSB0aGUgSUQgbGlzdCAqLworI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKwogLyogRmlsZSBzdGF0ZSBmb3IgbW1hcCgpcyBvbiAvcHJvYy9idXMvcGNpL1gvWSAqLwogZW51bSBwY2lfbW1hcF9zdGF0ZSB7CiAJcGNpX21tYXBfaW8sCkBAIC0zOTYsNiArMzk2LDIxIEBACiAgKi8KICNkZWZpbmUgcGNpX21vZHVsZV9pbml0CXBjaV9yZWdpc3Rlcl9kcml2ZXIKIAorLyoqCisgKiBQQ0lfVkRFVklDRSAtIG1hY3JvIHVzZWQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyBwY2kgZGV2aWNlIGluIHNob3J0IGZvcm0KKyAqIEB2ZW5kOiB0aGUgdmVuZG9yIG5hbWUKKyAqIEBkZXY6IHRoZSAxNiBiaXQgUENJIERldmljZSBJRAorICoKKyAqIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBjcmVhdGUgYSBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0aGF0IG1hdGNoZXMgYQorICogc3BlY2lmaWMgUENJIGRldmljZS4gIFRoZSBzdWJ2ZW5kb3IsIGFuZCBzdWJkZXZpY2UgZmllbGRzIHdpbGwgYmUgc2V0CisgKiB0byBQQ0lfQU5ZX0lELiBUaGUgbWFjcm8gYWxsb3dzIHRoZSBuZXh0IGZpZWxkIHRvIGZvbGxvdyBhcyB0aGUgZGV2aWNlCisgKiBwcml2YXRlIGRhdGEuCisgKi8KKworI2RlZmluZSBQQ0lfVkRFVklDRSh2ZW5kb3IsIGRldmljZSkJCVwKKwlQQ0lfVkVORE9SX0lEXyMjdmVuZG9yLCAoZGV2aWNlKSwJXAorCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAKKwogLyogdGhlc2UgZXh0ZXJuYWwgZnVuY3Rpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIFBDSSBzdXBwb3J0IGlzIGVuYWJsZWQgKi8KICNpZmRlZiBDT05GSUdfUENJCiAKQEAgLTQ1NCw2ICs0NjksOCBAQAogaW50IHBjaV9maW5kX2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApOwogaW50IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggcG9zLCBpbnQgY2FwKTsKIGludCBwY2lfZmluZF9leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCk7CitpbnQgcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGh0X2NhcCk7CitpbnQgcGNpX2ZpbmRfbmV4dF9odF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcG9zLCBpbnQgaHRfY2FwKTsKIHN0cnVjdCBwY2lfYnVzICpwY2lfZmluZF9uZXh0X2J1cyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqZnJvbSk7CiAKIHN0cnVjdCBwY2lfZGV2ICpwY2lfZ2V0X2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLApAQCAtNDY4LDYgKzQ4NSw3IEBACiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9idXNfYW5kX3Nsb3QgKHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbik7CiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2dldF9jbGFzcyAodW5zaWduZWQgaW50IGNsYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7CiBpbnQgcGNpX2Rldl9wcmVzZW50KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMpOworY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9maW5kX3ByZXNlbnQoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcyk7CiAKIGludCBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUgKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1OCAqdmFsKTsKIGludCBwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQgKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MTYgKnZhbCk7CkBAIC02ODEsNiArNjk5LDcgQEAKIHsgcmV0dXJuIE5VTEw7IH0KIAogI2RlZmluZSBwY2lfZGV2X3ByZXNlbnQoaWRzKQkoMCkKKyNkZWZpbmUgcGNpX2ZpbmRfcHJlc2VudChpZHMpCShOVUxMKQogI2RlZmluZSBwY2lfZGV2X3B1dChkZXYpCWRvIHsgfSB3aGlsZSAoMCkKIAogc3RhdGljIGlubGluZSB2b2lkIHBjaV9zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfQpAQCAtNzgzLDYgKzgwMiw3IEBACiAJcGNpX2ZpeHVwX2hlYWRlciwJLyogQWZ0ZXIgcmVhZGluZyBjb25maWd1cmF0aW9uIGhlYWRlciAqLwogCXBjaV9maXh1cF9maW5hbCwJLyogRmluYWwgcGhhc2Ugb2YgZGV2aWNlIGZpeHVwcyAqLwogCXBjaV9maXh1cF9lbmFibGUsCS8qIHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLworCXBjaV9maXh1cF9yZXN1bWUsCS8qIHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLwogfTsKIAogLyogQW5vbnltb3VzIHZhcmlhYmxlcyB3b3VsZCBiZSBuaWNlLi4uICovCkBAIC04MDEsNiArODIxLDkgQEAKICNkZWZpbmUgREVDTEFSRV9QQ0lfRklYVVBfRU5BQkxFKHZlbmRvciwgZGV2aWNlLCBob29rKQkJCVwKIAlERUNMQVJFX1BDSV9GSVhVUF9TRUNUSU9OKC5wY2lfZml4dXBfZW5hYmxlLAkJCVwKIAkJCXZlbmRvciMjZGV2aWNlIyNob29rLCB2ZW5kb3IsIGRldmljZSwgaG9vaykKKyNkZWZpbmUgREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FKHZlbmRvciwgZGV2aWNlLCBob29rKQkJCVwKKwlERUNMQVJFX1BDSV9GSVhVUF9TRUNUSU9OKC5wY2lfZml4dXBfcmVzdW1lLAkJCVwKKwkJCXJlc3VtZSMjdmVuZG9yIyNkZXZpY2UjI2hvb2ssIHZlbmRvciwgZGV2aWNlLCBob29rKQogCiAKIHZvaWQgcGNpX2ZpeHVwX2RldmljZShlbnVtIHBjaV9maXh1cF9wYXNzIHBhc3MsIHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCA0ZDk3MmJiLi4zZDFkMjEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMTA0LDYgKzEwNCwxMCBAQAogI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX0ZJQkVSCQkweDBjMDQKICNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9TTUJVUwkJMHgwYzA1CiAKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfV0lSRUxFU1MJCQkweDBkCisjZGVmaW5lIFBDSV9DTEFTU19XSVJFTEVTU19SRl9DT05UUk9MTEVSCTB4MGQxMAorI2RlZmluZSBQQ0lfQ0xBU1NfV0lSRUxFU1NfV0hDSQkJCTB4MGQxMDEwCisKICNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfSU5URUxMSUdFTlQJMHgwZQogI2RlZmluZSBQQ0lfQ0xBU1NfSU5URUxMSUdFTlRfSTJPCTB4MGUwMAogCkBAIC0xMjczLDEyICsxMjc3LDEzIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMAkweDAyOTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM2M18wCTB4MDMwNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9QNE04MDBDRQkweDAzMTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUDRNODkwCTB4MDMyNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzMzYJMHgwMzM2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMAkweDAzOTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODUwMV8wCTB4MDUwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1NjEJMHgwNTYxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8xCTB4MDU3MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1NzYJMHgwNTc2Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1NBVEFfRUlERQkweDA1ODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzAJMHgwNTg2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5NgkweDA1OTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk3XzAJMHgwNTk3CkBAIC0xMzIxLDYgKzEzMjYsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3CQkweDMyMjcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODI1MQkJMHgzMjg3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzdBCQkweDMzMzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzN1MJCTB4MzM3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9TQVRBX0VJREUJMHg1MzI0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzEJCTB4ODIzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMxXzQJMHg4MjM1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNjVfMQkweDgzMDUKQEAgLTE3ODUsMTQgKzE3OTIsMTcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0MxMDQJCTB4MTA0MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDRVCTB4MTA0MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDRKVQkweDEwNDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTA0RUwJMHgxMDQzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DVDExNAkweDExNDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTE0CTB4MTE0MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMThVCTB4MTE4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMThFTAkweDExODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTMyCTB4MTMyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMzJVCTB4MTMyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMzRVCTB4MTM0MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQzE2OAkJMHgxNjgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDE2OFUJMHgxNjgxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDE2OEVMCTB4MTY4MgogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0NECQkweDEzOTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfMkJEMAkJMHgyYmQwCkBAIC0yMDY0LDYgKzIwNzQsMTAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NgkweDIzNjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2OAkweDIzNjgKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0tPUkVOSVgJCTB4MTk4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0tPUkVOSVhfSkVUQ0FSREYwCTB4MTYwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0tPUkVOSVhfSkVUQ0FSREYxCTB4MTZmZgorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVEVLUkFNCQkweDFkZTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9URUtSQU1fREMyOTAJMHhkYzI5CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaAppbmRleCAwNjRiMWRjLi43YTZkMzRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCkBAIC00NzUsMTUgKzQ3NSwzMiBAQAogI2RlZmluZSBQQ0lfUFdSX0NBUAkJMTIJLyogQ2FwYWJpbGl0eSAqLwogI2RlZmluZSAgUENJX1BXUl9DQVBfQlVER0VUKHgpCSgoeCkgJiAxKQkvKiBJbmNsdWRlZCBpbiBzeXN0ZW0gYnVkZ2V0ICovCiAKLS8qIEh5cGVydHJhbnNwb3J0IHN1YiBjYXBhYmlsaXR5IHR5cGVzICovCisvKgorICogSHlwZXJ0cmFuc3BvcnQgc3ViIGNhcGFiaWxpdHkgdHlwZXMKKyAqCisgKiBVbmZvcnR1bmF0ZWx5IHRoZXJlIGFyZSBib3RoIDMgYml0IGFuZCA1IGJpdCBjYXBhYmlsaXR5IHR5cGVzIGRlZmluZWQKKyAqIGluIHRoZSBIVCBzcGVjLCBjYXRlcmluZyBmb3IgdGhhdCBpcyBhIGxpdHRsZSBtZXNzeS4gWW91IHByb2JhYmx5IGRvbid0CisgKiB3YW50IHRvIHVzZSB0aGVzZSBkaXJlY3RseSwganVzdCB1c2UgcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eSgpIGFuZCBpdAorICogd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIHlvdS4KKyAqLworI2RlZmluZSBIVF8zQklUX0NBUF9NQVNLCTB4RTAKICNkZWZpbmUgSFRfQ0FQVFlQRV9TTEFWRQkweDAwCS8qIFNsYXZlL1ByaW1hcnkgbGluayBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIEhUX0NBUFRZUEVfSE9TVAkJMHgyMAkvKiBIb3N0L1NlY29uZGFyeSBsaW5rIGNvbmZpZ3VyYXRpb24gKi8KKworI2RlZmluZSBIVF81QklUX0NBUF9NQVNLCTB4RjgKICNkZWZpbmUgSFRfQ0FQVFlQRV9JUlEJCTB4ODAJLyogSVJRIENvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgSFRfQ0FQVFlQRV9SRU1BUFBJTkdfNDAJMHhBMAkvKiA0MCBiaXQgYWRkcmVzcyByZW1hcHBpbmcgKi8KICNkZWZpbmUgSFRfQ0FQVFlQRV9SRU1BUFBJTkdfNjQgMHhBMgkvKiA2NCBiaXQgYWRkcmVzcyByZW1hcHBpbmcgKi8KICNkZWZpbmUgSFRfQ0FQVFlQRV9VTklUSURfQ0xVTVAJMHg5MAkvKiBVbml0IElEIGNsdW1waW5nICovCiAjZGVmaW5lIEhUX0NBUFRZUEVfRVhUQ09ORgkweDk4CS8qIEV4dGVuZGVkIENvbmZpZ3VyYXRpb24gU3BhY2UgQWNjZXNzICovCiAjZGVmaW5lIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcJMHhBOAkvKiBNU0kgTWFwcGluZyBDYXBhYmlsaXR5ICovCisjZGVmaW5lICBIVF9NU0lfRkxBR1MJCTB4MDIJCS8qIE9mZnNldCB0byBmbGFncyAqLworI2RlZmluZSAgSFRfTVNJX0ZMQUdTX0VOQUJMRQkweDEJCS8qIE1hcHBpbmcgZW5hYmxlICovCisjZGVmaW5lICBIVF9NU0lfRkxBR1NfRklYRUQJMHgyCQkvKiBGaXhlZCBtYXBwaW5nIG9ubHkgKi8KKyNkZWZpbmUgIEhUX01TSV9GSVhFRF9BRERSCTB4MDAwMDAwMDBGRUUwMDAwMFVMTAkvKiBGaXhlZCBhZGRyICovCisjZGVmaW5lICBIVF9NU0lfQUREUl9MTwkJMHgwNAkJLyogT2Zmc2V0IHRvIGxvdyBhZGRyIGJpdHMgKi8KKyNkZWZpbmUgIEhUX01TSV9BRERSX0xPX01BU0sJMHhGRkYwMDAwMAkvKiBMb3cgYWRkcmVzcyBiaXQgbWFzayAqLworI2RlZmluZSAgSFRfTVNJX0FERFJfSEkJCTB4MDgJCS8qIE9mZnNldCB0byBoaWdoIGFkZHIgYml0cyAqLwogI2RlZmluZSBIVF9DQVBUWVBFX0RJUkVDVF9ST1VURQkweEIwCS8qIERpcmVjdCByb3V0aW5nIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgSFRfQ0FQVFlQRV9WQ1NFVAkweEI4CS8qIFZpcnR1YWwgQ2hhbm5lbCBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIEhUX0NBUFRZUEVfRVJST1JfUkVUUlkJMHhDMAkvKiBSZXRyeSBvbiBlcnJvciBjb25maWd1cmF0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpZC5oIGIvaW5jbHVkZS9saW51eC9waWQuaAppbmRleCAyYzAwMDdkLi40ZGVjMDQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGlkLmgKQEAgLTM1LDggKzM1LDkgQEAKICAqCiAgKiBIb2xkaW5nIGEgcmVmZXJlbmNlIHRvIHN0cnVjdCBwaWQgc29sdmVzIGJvdGggb2YgdGhlc2UgcHJvYmxlbXMuCiAgKiBJdCBpcyBzbWFsbCBzbyBob2xkaW5nIGEgcmVmZXJlbmNlIGRvZXMgbm90IGNvbnN1bWUgYSBsb3Qgb2YKLSAqIHJlc291cmNlcywgYW5kIHNpbmNlIGEgbmV3IHN0cnVjdCBwaWQgaXMgYWxsb2NhdGVkIHdoZW4gdGhlIG51bWVyaWMKLSAqIHBpZCB2YWx1ZSBpcyByZXVzZWQgd2UgZG9uJ3QgbWlzdGFrZW5seSByZWZlciB0byBuZXcgcHJvY2Vzc2VzLgorICogcmVzb3VyY2VzLCBhbmQgc2luY2UgYSBuZXcgc3RydWN0IHBpZCBpcyBhbGxvY2F0ZWQgd2hlbiB0aGUgbnVtZXJpYyBwaWQKKyAqIHZhbHVlIGlzIHJldXNlZCAod2hlbiBwaWRzIHdyYXAgYXJvdW5kKSB3ZSBkb24ndCBtaXN0YWtlbmx5IHJlZmVyIHRvIG5ldworICogcHJvY2Vzc2VzLgogICovCiAKIHN0cnVjdCBwaWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlkX25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC9waWRfbmFtZXNwYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzMzgwNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGlkX25hbWVzcGFjZS5oCkBAIC0wLDAgKzEsNDUgQEAKKyNpZm5kZWYgX0xJTlVYX1BJRF9OU19ICisjZGVmaW5lIF9MSU5VWF9QSURfTlNfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9waWQuaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorCitzdHJ1Y3QgcGlkbWFwIHsKKyAgICAgICBhdG9taWNfdCBucl9mcmVlOworICAgICAgIHZvaWQgKnBhZ2U7Cit9OworCisjZGVmaW5lIFBJRE1BUF9FTlRSSUVTICAgICAgICAgKChQSURfTUFYX0xJTUlUICsgOCpQQUdFX1NJWkUgLSAxKS9QQUdFX1NJWkUvOCkKKworc3RydWN0IHBpZF9uYW1lc3BhY2UgeworCXN0cnVjdCBrcmVmIGtyZWY7CisJc3RydWN0IHBpZG1hcCBwaWRtYXBbUElETUFQX0VOVFJJRVNdOworCWludCBsYXN0X3BpZDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkX3JlYXBlcjsKK307CisKK2V4dGVybiBzdHJ1Y3QgcGlkX25hbWVzcGFjZSBpbml0X3BpZF9uczsKKworc3RhdGljIGlubGluZSB2b2lkIGdldF9waWRfbnMoc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQoreworCWtyZWZfZ2V0KCZucy0+a3JlZik7Cit9CisKK2V4dGVybiBpbnQgY29weV9waWRfbnMoaW50IGZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gdm9pZCBmcmVlX3BpZF9ucyhzdHJ1Y3Qga3JlZiAqa3JlZik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfcGlkX25zKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKK3sKKwlrcmVmX3B1dCgmbnMtPmtyZWYsIGZyZWVfcGlkX25zKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkX3JlYXBlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gaW5pdF9waWRfbnMuY2hpbGRfcmVhcGVyOworfQorCisjZW5kaWYgLyogX0xJTlVYX1BJRF9OU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaAppbmRleCBlYTRmN2NkLi4yZTE5NDc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgKQEAgLTEyLDcgKzEyLDcgQEAKIHN0cnVjdCBwaXBlX2J1ZmZlciB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgaW50IG9mZnNldCwgbGVuOwotCXN0cnVjdCBwaXBlX2J1Zl9vcGVyYXRpb25zICpvcHM7CisJY29uc3Qgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgKm9wczsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCkBAIC00MSw5ICs0MSw3IEBACiBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXVuc2lnbmVkIGludCBucmJ1ZnMsIGN1cmJ1ZjsKLQlzdHJ1Y3QgcGlwZV9idWZmZXIgYnVmc1tQSVBFX0JVRkZFUlNdOwogCXN0cnVjdCBwYWdlICp0bXBfcGFnZTsKLQl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAJdW5zaWduZWQgaW50IHJlYWRlcnM7CiAJdW5zaWduZWQgaW50IHdyaXRlcnM7CiAJdW5zaWduZWQgaW50IHdhaXRpbmdfd3JpdGVyczsKQEAgLTUyLDYgKzUwLDcgQEAKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX3JlYWRlcnM7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY193cml0ZXJzOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHBpcGVfYnVmZmVyIGJ1ZnNbUElQRV9CVUZGRVJTXTsKIH07CiAKIC8qIERpZmZlcnMgZnJvbSBQSVBFX0JVRiBpbiB0aGF0IFBJUEVfU0laRSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBhY3R1YWwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oIGIvaW5jbHVkZS9saW51eC9wa3RjZHZkLmgKaW5kZXggOGE5NGM3MS4uNWVhNGYwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wa3RjZHZkLmgKKysrIGIvaW5jbHVkZS9saW51eC9wa3RjZHZkLmgKQEAgLTExMSw2ICsxMTEsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKworLyogZGVmYXVsdCBiaW8gd3JpdGUgcXVldWUgY29uZ2VzdGlvbiBtYXJrcyAqLworI2RlZmluZSBQS1RfV1JJVEVfQ09OR0VTVElPTl9PTiAgICAxMDAwMAorI2RlZmluZSBQS1RfV1JJVEVfQ09OR0VTVElPTl9PRkYgICA5MDAwCisKIAogc3RydWN0IHBhY2tldF9zZXR0aW5ncwogewpAQCAtMjQxLDYgKzI0OCwxNCBAQAogfTsKICNkZWZpbmUgUFNEX1BPT0xfU0laRQkJNjQKIAorc3RydWN0IHBrdGNkdmRfa29iagoreworCXN0cnVjdCBrb2JqZWN0CQlrb2JqOworCXN0cnVjdCBwa3RjZHZkX2RldmljZQkqcGQ7Cit9OworI2RlZmluZSB0b19wa3RjZHZka29iaihfaykgXAorICAoKHN0cnVjdCBwa3RjZHZkX2tvYmoqKWNvbnRhaW5lcl9vZihfayxzdHJ1Y3QgcGt0Y2R2ZF9rb2JqLGtvYmopKQorCiBzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlCSpiZGV2OwkJLyogZGV2IGF0dGFjaGVkICovCkBAIC0yNzEsNiArMjg2LDE2IEBACiAKIAlzdHJ1Y3QgcGFja2V0X2lvc2NoZWQgICBpb3NjaGVkOwogCXN0cnVjdCBnZW5kaXNrCQkqZGlzazsKKworCWludAkJCXdyaXRlX2Nvbmdlc3Rpb25fb2ZmOworCWludAkJCXdyaXRlX2Nvbmdlc3Rpb25fb247CisKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlCSpjbHNkZXY7CS8qIHN5c2ZzIHBrdGNkdmRbMC03XSBjbGFzcyBkZXYgKi8KKwlzdHJ1Y3QgcGt0Y2R2ZF9rb2JqCSprb2JqX3N0YXQ7CS8qIHN5c2ZzIHBrdGNkdmRbMC03XS9zdGF0LyAgICAgKi8KKwlzdHJ1Y3QgcGt0Y2R2ZF9rb2JqCSprb2JqX3dxdWV1ZTsJLyogc3lzZnMgcGt0Y2R2ZFswLTddL3dyaXRlX3F1ZXVlLyAqLworCisJc3RydWN0IGRlbnRyeQkJKmRmc19kX3Jvb3Q7CS8qIGRlYnVnZnM6IGRldm5hbWUgZGlyZWN0b3J5ICovCisJc3RydWN0IGRlbnRyeQkJKmRmc19mX2luZm87CS8qIGRlYnVnZnM6IGluZm8gZmlsZSAqLwogfTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCmluZGV4IDIwZjQ3YjguLjhiYmQ0NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaApAQCAtMzksNyArMzksNyBAQAogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX2FsbG9jKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBpZCk7CiBleHRlcm4gaW50IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtKTsKLWV4dGVybiBpbnQgcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKIGV4dGVybiBpbnQgcGxhdGZvcm1fZGV2aWNlX2FkZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIGV4dGVybiB2b2lkIHBsYXRmb3JtX2RldmljZV9kZWwoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9kZXZpY2VfcHV0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaAppbmRleCA1NjcwYjM0Li5lZWM0OGY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBDUFVfUFJPRklMSU5HCTEKICNkZWZpbmUgU0NIRURfUFJPRklMSU5HCTIKICNkZWZpbmUgU0xFRVBfUFJPRklMSU5HCTMKKyNkZWZpbmUgS1ZNX1BST0ZJTElORwk0CiAKIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeTsKIHN0cnVjdCBwdF9yZWdzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvcHNwYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZDQ4YjguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9wc3BhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNpZm5kZWYgX0xJTlVYX1BTUEFDRV9ICi0jZGVmaW5lIF9MSU5VWF9QU1BBQ0VfSAotCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9waWQuaD4KLQotc3RydWN0IHBpZG1hcCB7Ci0gICAgICAgYXRvbWljX3QgbnJfZnJlZTsKLSAgICAgICB2b2lkICpwYWdlOwotfTsKLQotI2RlZmluZSBQSURNQVBfRU5UUklFUyAgICAgICAgICgoUElEX01BWF9MSU1JVCArIDgqUEFHRV9TSVpFIC0gMSkvUEFHRV9TSVpFLzgpCi0KLXN0cnVjdCBwc3BhY2UgewotICAgICAgIHN0cnVjdCBwaWRtYXAgcGlkbWFwW1BJRE1BUF9FTlRSSUVTXTsKLSAgICAgICBpbnQgbGFzdF9waWQ7Ci19OwotCi1leHRlcm4gc3RydWN0IHBzcGFjZSBpbml0X3BzcGFjZTsKLQotI2VuZGlmIC8qIF9MSU5VWF9QU1BBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xaWMxMTcuaCBiL2luY2x1ZGUvbGludXgvcWljMTE3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YjUzN2UuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9xaWMxMTcuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5MCArMCwwIEBACi0jaWZuZGVmIF9RSUMxMTdfSAotI2RlZmluZSBfUUlDMTE3X0gKLQotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkzLTE5OTYgQmFzIExhYXJob3ZlbiwKLSAqICAgICAgICAgICAgICAgIChDKSAxOTk3ICAgICAgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9pbmNsdWRlL2xpbnV4L3FpYzExNy5oLHYgJAotICogJFJldmlzaW9uOiAxLjIgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTk6MzIgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIFFJQy0xMTcgc3BlYy4gcmVsYXRlZCBkZWZpbml0aW9ucyBmb3IgdGhlCi0gKiAgICAgIFFJQy00MC84MC8zMDEwLzMwMjAgZmxvcHB5LXRhcGUgZHJpdmVyICJmdGFwZSIgZm9yIExpbnV4LgotICoKLSAqICAgICAgVGhlc2UgZGF0YSB3ZXJlIHRha2VuIGZyb20gdGhlIFF1YXJ0ZXItSW5jaCBDYXJ0cmlkZ2UKLSAqICAgICAgRHJpdmUgU3RhbmRhcmRzLCBJbmMuIGRvY3VtZW50IHRpdGxlZDoKLSAqICAgICAgYENvbW1vbiBDb21tYW5kIFNldCBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbiBmb3IgRmxleGlibGUKLSAqICAgICAgIERpc2sgQ29udHJvbGxlciBCYXNlZCBNaW5pY2FydHJpZGdlIFRhcGUgRHJpdmVzJwotICogICAgICAgZG9jdW1lbnQgUUlDLTExNyBSZXZpc2lvbiBKLCAyOCBBdWcgOTYuCi0gKiAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb250YWN0OgotICogICAgICAgUXVhcnRlci1JbmNoIENhcnRyaWRnZSBEcml2ZSBTdGFuZGFyZHMsIEluYy4KLSAqICAgICAgIDMxMSBFYXN0IENhcnJpbGxvIFN0cmVldAotICogICAgICAgU2FudGEgQmFyYmFyYSwgQ2FsaWZvcm5pYSA5MzEwMQotICogICAgICAgVGVsZXBob25lICg4MDUpIDk2My0zODUzCi0gKiAgICAgICBGYXggICAgICAgKDgwNSkgOTYyLTE1NDEKLSAqICAgICAgIFdXVyAgICAgICBodHRwOi8vd3d3LnFpYy5vcmcKLSAqCi0gKiAgICAgIEN1cnJlbnQgUUlDIHN0YW5kYXJkIHJldmlzaW9ucyAob2YgaW50ZXJlc3QpIGFyZToKLSAqICAgICAgIFFJQy00MC1NQywgICBSZXYuIE0sICAyIFNlcCA5Mi4KLSAqICAgICAgIFFJQy04MC1NQywgICBSZXYuIE4sIDIwIE1hciA5Ni4KLSAqICAgICAgIFFJQy04MC1NQywgICBSZXYuIEssIDE1IERlYyA5NC4KLSAqICAgICAgIFFJQy0xMTMsICAgICBSZXYuIEcsIDE1IEp1biA5NS4KLSAqICAgICAgIFFJQy0xMTcsICAgICBSZXYuIEosIDI4IEF1ZyA5Ni4KLSAqICAgICAgIFFJQy0xMjIsICAgICBSZXYuIEIsICA2IE1hciA5MS4KLSAqICAgICAgIFFJQy0xMzAsICAgICBSZXYuIEMsICAyIFNlcCA5Mi4KLSAqICAgICAgIFFJQy0zMDEwLU1DLCBSZXYuIEYsIDE0IEp1biA5NS4KLSAqICAgICAgIFFJQy0zMDIwLU1DLCBSZXYuIEcsIDMxIEF1ZyA5NS4KLSAqICAgICAgIFFJQy1DUkYzLCAgICBSZXYuIEIsIDE1IEp1biA5NS4KLSAqICovCi0KLS8qCi0gKiAgICAgIFFJQy0xMTcgY29tbW9uIGNvbW1hbmQgc2V0IHJldi4gSi4KLSAqICAgICAgVGhlc2UgY29tbWFuZHMgYXJlIHNlbnQgdG8gdGhlIHRhcGUgdW5pdAotICogICAgICBhcyBudW1iZXIgb2YgcHVsc2VzIG92ZXIgdGhlIHN0ZXAgbGluZS4KLSAqLwotCi10eXBlZGVmIGVudW0gewotCVFJQ19OT19DT01NQU5EICAgICAgICAgICAgICAgICAgPSAwLAotCVFJQ19SRVNFVCAJCQk9IDEsCi0JUUlDX1JFUE9SVF9ORVhUX0JJVAkJPSAyLAotCVFJQ19QQVVTRSAJCQk9IDMsCi0JUUlDX01JQ1JPX1NURVBfUEFVU0UJCT0gNCwKLQlRSUNfQUxURVJOQVRFX1RJTUVPVVQJCT0gNSwKLQlRSUNfUkVQT1JUX0RSSVZFX1NUQVRVUwkJPSA2LAotCVFJQ19SRVBPUlRfRVJST1JfQ09ERQkJPSA3LAotCVFJQ19SRVBPUlRfRFJJVkVfQ09ORklHVVJBVElPTgk9IDgsCi0JUUlDX1JFUE9SVF9ST01fVkVSU0lPTgkJPSA5LAotCVFJQ19MT0dJQ0FMX0ZPUldBUkQJCT0gMTAsCi0JUUlDX1BIWVNJQ0FMX1JFVkVSU0UJCT0gMTEsCi0JUUlDX1BIWVNJQ0FMX0ZPUldBUkQJCT0gMTIsCi0JUUlDX1NFRUtfSEVBRF9UT19UUkFDSwkJPSAxMywKLQlRSUNfU0VFS19MT0FEX1BPSU5UCQk9IDE0LAotCVFJQ19FTlRFUl9GT1JNQVRfTU9ERQkJPSAxNSwKLQlRSUNfV1JJVEVfUkVGRVJFTkNFX0JVUlNUCT0gMTYsCi0JUUlDX0VOVEVSX1ZFUklGWV9NT0RFCQk9IDE3LAotCVFJQ19TVE9QX1RBUEUJCQk9IDE4LAotLyogY29tbWFuZHMgMTktMjA6IHJlc2VydmVkICovCi0JUUlDX01JQ1JPX1NURVBfSEVBRF9VUAkJPSAyMSwKLQlRSUNfTUlDUk9fU1RFUF9IRUFEX0RPV04JPSAyMiwKLQlRSUNfU09GVF9TRUxFQ1QJCQk9IDIzLAotCVFJQ19TT0ZUX0RFU0VMRUNUCQk9IDI0LAotCVFJQ19TS0lQX1JFVkVSU0UJCT0gMjUsCi0JUUlDX1NLSVBfRk9SV0FSRAkJPSAyNiwKLQlRSUNfU0VMRUNUX1JBVEUJCQk9IDI3LAotLyogY29tbWFuZCAyNywgaW4gY2NzMjogU2VsZWN0IFJhdGUgb3IgRm9ybWF0ICovCi0JUUlDX0VOVEVSX0RJQUdOT1NUSUNfMQkJPSAyOCwKLQlRSUNfRU5URVJfRElBR05PU1RJQ18yCQk9IDI5LAotCVFJQ19FTlRFUl9QUklNQVJZX01PREUJCT0gMzAsCi0vKiBjb21tYW5kIDMxOiB2ZW5kb3IgdW5pcXVlICovCi0JUUlDX1JFUE9SVF9WRU5ET1JfSUQJCT0gMzIsCi0JUUlDX1JFUE9SVF9UQVBFX1NUQVRVUwkJPSAzMywKLQlRSUNfU0tJUF9FWFRFTkRFRF9SRVZFUlNFCT0gMzQsCi0JUUlDX1NLSVBfRVhURU5ERURfRk9SV0FSRAk9IDM1LAotCVFJQ19DQUxJQlJBVEVfVEFQRV9MRU5HVEgJPSAzNiwKLQlRSUNfUkVQT1JUX0ZPUk1BVF9TRUdNRU5UUwk9IDM3LAotCVFJQ19TRVRfRk9STUFUX1NFR01FTlRTCQk9IDM4LAotLyogY29tbWFuZHMgMzktNDU6IHJlc2VydmVkICovCi0JUUlDX1BIQU5UT01fU0VMRUNUCQk9IDQ2LAotCVFJQ19QSEFOVE9NX0RFU0VMRUNUCQk9IDQ3Ci19IHFpYzExN19jbWRfdDsKLQotdHlwZWRlZiBlbnVtIHsKLQlkaXNjcmV0aW9uYWwgPSAwLCByZXF1aXJlZCwgY2NzMSwgY2NzMgotfSBxaWNfY29tcGF0aWJpbGl0eTsKLQotdHlwZWRlZiBlbnVtIHsKLQl1bnVzZWQsIG1vZGUsIG1vdGlvbiwgcmVwb3J0Ci19IGNvbW1hbmRfdHlwZXM7Ci0KLXN0cnVjdCBxaWMxMTdfY29tbWFuZF90YWJsZSB7Ci0JY2hhciAqbmFtZTsKLQlfX3U4IG1hc2s7Ci0JX191OCBzdGF0ZTsKLQlfX3U4IGNtZF90eXBlOwotCV9fdTggbm9uX2ludHI7Ci0JX191OCBsZXZlbDsKLX07Ci0KLSNkZWZpbmUgUUlDMTE3X0NPTU1BTkRTIHtcCi0vKiBjb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayAgc3RhdGUgY21kX3R5cGUgICAgICAgICAgICovXAotLyogfCAgICBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgIHwgICAgICAgbm9uX2ludHIgICAqL1wKLS8qIHwgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICB8ICAgICAgIHwgIGxldmVsICAgKi9cCi0vKiAwKi8ge05VTEwsICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgbW9kZSwgICAwLCBkaXNjcmV0aW9uYWx9LFwKLS8qIDEqLyB7InNvZnQgcmVzZXQiLCAgICAgICAgICAgICAgICAweDAwLCAweDAwLCBtb3Rpb24sIDEsIHJlcXVpcmVkfSxcCi0vKiAyKi8geyJyZXBvcnQgbmV4dCBiaXQiLCAgICAgICAgICAgMHgwMCwgMHgwMCwgcmVwb3J0LCAwLCByZXF1aXJlZH0sXAotLyogMyovIHsicGF1c2UiLCAgICAgICAgICAgICAgICAgICAgIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LFwKLS8qIDQqLyB7Im1pY3JvIHN0ZXAgcGF1c2UiLCAgICAgICAgICAweDM2LCAweDI0LCBtb3Rpb24sIDEsIHJlcXVpcmVkfSxcCi0vKiA1Ki8geyJhbHRlcm5hdGUgY29tbWFuZCB0aW1lb3V0IiwgMHgwMCwgMHgwMCwgbW9kZSwgICAwLCByZXF1aXJlZH0sXAotLyogNiovIHsicmVwb3J0IGRyaXZlIHN0YXR1cyIsICAgICAgIDB4MDAsIDB4MDAsIHJlcG9ydCwgMCwgcmVxdWlyZWR9LFwKLS8qIDcqLyB7InJlcG9ydCBlcnJvciBjb2RlIiwgICAgICAgICAweDAxLCAweDAxLCByZXBvcnQsIDAsIHJlcXVpcmVkfSxcCi0vKiA4Ki8geyJyZXBvcnQgZHJpdmUgY29uZmlndXJhdGlvbiIsMHgwMCwgMHgwMCwgcmVwb3J0LCAwLCByZXF1aXJlZH0sXAotLyogOSovIHsicmVwb3J0IHJvbSB2ZXJzaW9uIiwgICAgICAgIDB4MDAsIDB4MDAsIHJlcG9ydCwgMCwgcmVxdWlyZWR9LFwKLS8qMTAqLyB7ImxvZ2ljYWwgZm9yd2FyZCIsICAgICAgICAgICAweDM3LCAweDI1LCBtb3Rpb24sIDAsIHJlcXVpcmVkfSxcCi0vKjExKi8geyJwaHlzaWNhbCByZXZlcnNlIiwgICAgICAgICAgMHgxNywgMHgwNSwgbW90aW9uLCAwLCByZXF1aXJlZH0sXAotLyoxMiovIHsicGh5c2ljYWwgZm9yd2FyZCIsICAgICAgICAgIDB4MTcsIDB4MDUsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LFwKLS8qMTMqLyB7InNlZWsgaGVhZCB0byB0cmFjayIsICAgICAgICAweDM3LCAweDI1LCBtb3Rpb24sIDAsIHJlcXVpcmVkfSxcCi0vKjE0Ki8geyJzZWVrIGxvYWQgcG9pbnQiLCAgICAgICAgICAgMHgxNywgMHgwNSwgbW90aW9uLCAxLCByZXF1aXJlZH0sXAotLyoxNSovIHsiZW50ZXIgZm9ybWF0IG1vZGUiLCAgICAgICAgIDB4MWYsIDB4MDUsIG1vZGUsICAgMCwgcmVxdWlyZWR9LFwKLS8qMTYqLyB7IndyaXRlIHJlZmVyZW5jZSBidXJzdCIsICAgICAweDFmLCAweDA1LCBtb3Rpb24sIDEsIHJlcXVpcmVkfSxcCi0vKjE3Ki8geyJlbnRlciB2ZXJpZnkgbW9kZSIsICAgICAgICAgMHgzNywgMHgyNSwgbW9kZSwgICAwLCByZXF1aXJlZH0sXAotLyoxOCovIHsic3RvcCB0YXBlIiwgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LFwKLS8qMTkqLyB7InJlc2VydmVkICgxOSkiLCAgICAgICAgICAgICAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sXAotLyoyMCovIHsicmVzZXJ2ZWQgKDIwKSIsICAgICAgICAgICAgIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSxcCi0vKjIxKi8geyJtaWNybyBzdGVwIGhlYWQgdXAiLCAgICAgICAgMHgwMiwgMHgwMCwgbW90aW9uLCAwLCByZXF1aXJlZH0sXAotLyoyMiovIHsibWljcm8gc3RlcCBoZWFkIGRvd24iLCAgICAgIDB4MDIsIDB4MDAsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LFwKLS8qMjMqLyB7InNvZnQgc2VsZWN0IiwgICAgICAgICAgICAgICAweDAwLCAweDAwLCBtb2RlLCAgIDAsIGRpc2NyZXRpb25hbH0sXAotLyoyNCovIHsic29mdCBkZXNlbGVjdCIsICAgICAgICAgICAgIDB4MDAsIDB4MDAsIG1vZGUsICAgMCwgZGlzY3JldGlvbmFsfSxcCi0vKjI1Ki8geyJza2lwIHNlZ21lbnRzIHJldmVyc2UiLCAgICAgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCByZXF1aXJlZH0sXAotLyoyNiovIHsic2tpcCBzZWdtZW50cyBmb3J3YXJkIiwgICAgIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LFwKLS8qMjcqLyB7InNlbGVjdCByYXRlIG9yIGZvcm1hdCIsICAgICAweDAzLCAweDAxLCBtb2RlLCAgIDAsIHJlcXVpcmVkIC8qIFtjY3MyXSAqL30sXAotLyoyOCovIHsiZW50ZXIgZGlhZyBtb2RlIDEiLCAgICAgICAgIDB4MDAsIDB4MDAsIG1vZGUsICAgMCwgZGlzY3JldGlvbmFsfSxcCi0vKjI5Ki8geyJlbnRlciBkaWFnIG1vZGUgMiIsICAgICAgICAgMHgwMCwgMHgwMCwgbW9kZSwgICAwLCBkaXNjcmV0aW9uYWx9LFwKLS8qMzAqLyB7ImVudGVyIHByaW1hcnkgbW9kZSIsICAgICAgICAweDAwLCAweDAwLCBtb2RlLCAgIDAsIHJlcXVpcmVkfSxcCi0vKjMxKi8geyJ2ZW5kb3IgdW5pcXVlICgzMSkiLCAgICAgICAgMHgwMCwgMHgwMCwgdW51c2VkLCAwLCBkaXNjcmV0aW9uYWx9LFwKLS8qMzIqLyB7InJlcG9ydCB2ZW5kb3IgaWQiLCAgICAgICAgICAweDAwLCAweDAwLCByZXBvcnQsIDAsIHJlcXVpcmVkfSxcCi0vKjMzKi8geyJyZXBvcnQgdGFwZSBzdGF0dXMiLCAgICAgICAgMHgwNCwgMHgwNCwgcmVwb3J0LCAwLCBjY3MxfSxcCi0vKjM0Ki8geyJza2lwIGV4dGVuZGVkIHJldmVyc2UiLCAgICAgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCBjY3MxfSxcCi0vKjM1Ki8geyJza2lwIGV4dGVuZGVkIGZvcndhcmQiLCAgICAgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCBjY3MxfSxcCi0vKjM2Ki8geyJjYWxpYnJhdGUgdGFwZSBsZW5ndGgiLCAgICAgMHgxNywgMHgwNSwgbW90aW9uLCAxLCBjY3MyfSxcCi0vKjM3Ki8geyJyZXBvcnQgZm9ybWF0IHNlZ21lbnRzIiwgICAgMHgxNywgMHgwNSwgcmVwb3J0LCAwLCBjY3MyfSxcCi0vKjM4Ki8geyJzZXQgZm9ybWF0IHNlZ21lbnRzIiwgICAgICAgMHgxNywgMHgwNSwgbW9kZSwgICAwLCBjY3MyfSxcCi0vKjM5Ki8geyJyZXNlcnZlZCAoMzkpIiwgICAgICAgICAgICAgMHgwMCwgMHgwMCwgdW51c2VkLCAwLCBkaXNjcmV0aW9uYWx9LFwKLS8qNDAqLyB7InZlbmRvciB1bmlxdWUgKDQwKSIsICAgICAgICAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sXAotLyo0MSovIHsidmVuZG9yIHVuaXF1ZSAoNDEpIiwgICAgICAgIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSxcCi0vKjQyKi8geyJ2ZW5kb3IgdW5pcXVlICg0MikiLCAgICAgICAgMHgwMCwgMHgwMCwgdW51c2VkLCAwLCBkaXNjcmV0aW9uYWx9LFwKLS8qNDMqLyB7InZlbmRvciB1bmlxdWUgKDQzKSIsICAgICAgICAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sXAotLyo0NCovIHsidmVuZG9yIHVuaXF1ZSAoNDQpIiwgICAgICAgIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSxcCi0vKjQ1Ki8geyJ2ZW5kb3IgdW5pcXVlICg0NSkiLCAgICAgICAgMHgwMCwgMHgwMCwgdW51c2VkLCAwLCBkaXNjcmV0aW9uYWx9LFwKLS8qNDYqLyB7InBoYW50b20gc2VsZWN0IiwgICAgICAgICAgICAweDAwLCAweDAwLCBtb2RlLCAgIDAsIGRpc2NyZXRpb25hbH0sXAotLyo0NyovIHsicGhhbnRvbSBkZXNlbGVjdCIsICAgICAgICAgIDB4MDAsIDB4MDAsIG1vZGUsICAgMCwgZGlzY3JldGlvbmFsfSxcCi19Ci0KLS8qCi0gKiAgICAgIFN0YXR1cyBiaXRzIHJldHVybmVkIGJ5IFFJQ19SRVBPUlRfRFJJVkVfU1RBVFVTCi0gKi8KLQotI2RlZmluZSBRSUNfU1RBVFVTX1JFQURZCTB4MDEJLyogRHJpdmUgaXMgcmVhZHkgb3IgaWRsZS4gKi8KLSNkZWZpbmUgUUlDX1NUQVRVU19FUlJPUgkweDAyCS8qIEVycm9yIGRldGVjdGVkLCBtdXN0IHJlYWQKLQkJCQkJICAgZXJyb3IgY29kZSB0byBjbGVhciB0aGlzICovCi0jZGVmaW5lIFFJQ19TVEFUVVNfQ0FSVFJJREdFX1BSRVNFTlQgMHgwNAkvKiBUYXBlIGlzIHByZXNlbnQgKi8KLSNkZWZpbmUgUUlDX1NUQVRVU19XUklURV9QUk9URUNUIDB4MDgJLyogVGFwZSBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KLSNkZWZpbmUgUUlDX1NUQVRVU19ORVdfQ0FSVFJJREdFIDB4MTAJLyogTmV3IGNhcnRyaWRnZSBpbnNlcnRlZCwgbXVzdAotCQkJCQkgICByZWFkIGVycm9yIHN0YXR1cyB0byBjbGVhci4gKi8KLSNkZWZpbmUgUUlDX1NUQVRVU19SRUZFUkVOQ0VECTB4MjAJLyogQ2FydHJpZGdlIGFwcGVhcnMgdG8gaGF2ZSBiZWVuCi0JCQkJCSAgIGZvcm1hdHRlZC4gKi8KLSNkZWZpbmUgUUlDX1NUQVRVU19BVF9CT1QJMHg0MAkvKiBDYXJ0cmlkZ2UgaXMgYXQgcGh5c2ljYWwKLQkJCQkJICAgYmVnaW5uaW5nIG9mIHRhcGUuICovCi0jZGVmaW5lIFFJQ19TVEFUVVNfQVRfRU9UCTB4ODAJLyogQ2FydHJpZGdlIGlzIGF0IHBoeXNpY2FsIGVuZAotCQkJCQkgICBvZiB0YXBlLiAqLwotLyoKLSAqICAgICAgU3RhdHVzIGJpdHMgcmV0dXJuZWQgYnkgUUlDX1JFUE9SVF9EUklWRV9DT05GSUdVUkFUSU9OCi0gKi8KLQotI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfTUFTSwkweDE4Ci0jZGVmaW5lIFFJQ19DT05GSUdfUkFURV9TSElGVAkzCi0jZGVmaW5lIFFJQ19DT05GSUdfUkFURV8yNTAJMAotI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfNTAwCTIKLSNkZWZpbmUgUUlDX0NPTkZJR19SQVRFXzEwMDAJMwotI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfMjAwMAkxCi0jZGVmaW5lIFFJQ19DT05GSUdfUkFURV80MDAwICAgIDAgICAgICAgLyogc2luY2UgUUlDLTExNyBSZXYuIEogKi8KLQotI2RlZmluZSBRSUNfQ09ORklHX0xPTkcJCTB4NDAJLyogRXh0cmEgTGVuZ3RoIFRhcGUgRGV0ZWN0ZWQgKi8KLSNkZWZpbmUgUUlDX0NPTkZJR184MAkJMHg4MAkvKiBRSUMtODAgZGV0ZWN0ZWQuICovCi0KLS8qCi0gKiAgICAgIFN0YXR1cyBiaXRzIHJldHVybmVkIGJ5IFFJQ19SRVBPUlRfVEFQRV9TVEFUVVMKLSAqLwotCi0jZGVmaW5lIFFJQ19UQVBFX1NURF9NQVNLICAgICAgIDB4MGYKLSNkZWZpbmUgUUlDX1RBUEVfUUlDNDAgIAkweDAxCi0jZGVmaW5lIFFJQ19UQVBFX1FJQzgwICAJMHgwMgotI2RlZmluZSBRSUNfVEFQRV9RSUMzMDIwICAJMHgwMwotI2RlZmluZSBRSUNfVEFQRV9RSUMzMDEwICAJMHgwNAotCi0jZGVmaW5lIFFJQ19UQVBFX0xFTl9NQVNLCTB4NzAKLSNkZWZpbmUgUUlDX1RBUEVfMjA1RlQJCTB4MTAKLSNkZWZpbmUgUUlDX1RBUEVfMzA3RlQJCTB4MjAKLSNkZWZpbmUgUUlDX1RBUEVfVkFSSUFCTEUJMHgzMAotI2RlZmluZSBRSUNfVEFQRV8xMTAwRlQJCTB4NDAKLSNkZWZpbmUgUUlDX1RBUEVfRkxFWAkJMHg2MAotCi0jZGVmaW5lIFFJQ19UQVBFX1dJREUJCTB4ODAKLQotLyogRGVmaW5lIGEgdmFsdWUgKGluIGZlZXQpIHNsaWdodGx5IGhpZ2hlciB0aGFuIAotICogdGhlIHBvc3NpYmxlIG1heGltdW0gdGFwZSBsZW5ndGguCi0gKi8KLSNkZWZpbmUgUUlDX1RPUF9UQVBFX0xFTgkxNTAwCi0KLS8qCi0gKiAgICAgIEVycm9yczogTGlzdCBvZiBlcnJvciBjb2RlcywgYW5kIHRoZWlyIHNldmVyaXR5LgotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQljaGFyICptZXNzYWdlOwkJLyogVGV4dCBkZXNjcmliaW5nIHRoZSBlcnJvci4gKi8KLQl1bnNpZ25lZCBpbnQgZmF0YWw6MTsJLyogTm9uLXplcm8gaWYgdGhlIGVycm9yIGlzIGZhdGFsLiAqLwotfSBmdGFwZV9lcnJvcjsKLQotI2RlZmluZSBRSUMxMTdfRVJST1JTIHtcCi0gIC8qIDAqLyB7ICJObyBlcnJvciIsIDAsIH0sXAotICAvKiAxKi8geyAiQ29tbWFuZCBSZWNlaXZlZCB3aGlsZSBEcml2ZSBOb3QgUmVhZHkiLCAwLCB9LFwKLSAgLyogMiovIHsgIkNhcnRyaWRnZSBOb3QgUHJlc2VudCBvciBSZW1vdmVkIiwgMSwgfSxcCi0gIC8qIDMqLyB7ICJNb3RvciBTcGVlZCBFcnJvciAobm90IHdpdGhpbiAxJSkiLCAxLCB9LFwKLSAgLyogNCovIHsgIk1vdG9yIFNwZWVkIEZhdWx0IChqYW1tZWQsIG9yIGdyb3NzIHNwZWVkIGVycm9yIiwgMSwgfSxcCi0gIC8qIDUqLyB7ICJDYXJ0cmlkZ2UgV3JpdGUgUHJvdGVjdGVkIiwgMSwgfSxcCi0gIC8qIDYqLyB7ICJVbmRlZmluZWQgb3IgUmVzZXJ2ZWQgQ29tbWFuZCBDb2RlIiwgMSwgfSxcCi0gIC8qIDcqLyB7ICJJbGxlZ2FsIFRyYWNrIEFkZHJlc3MgU3BlY2lmaWVkIGZvciBTZWVrIiwgMSwgfSxcCi0gIC8qIDgqLyB7ICJJbGxlZ2FsIENvbW1hbmQgaW4gUmVwb3J0IFN1YmNvbnRleHQiLCAwLCB9LFwKLSAgLyogOSovIHsgIklsbGVnYWwgRW50cnkgaW50byBhIERpYWdub3N0aWMgTW9kZSIsIDEsIH0sXAotICAvKjEwKi8geyAiQnJva2VuIFRhcGUgRGV0ZWN0ZWQgKGJhc2VkIG9uIGhvbGUgc2Vuc29yKSIsIDEsIH0sXAotICAvKjExKi8geyAiV2FybmluZy0tUmVhZCBHYWluIFNldHRpbmcgRXJyb3IiLCAxLCB9LFwKLSAgLyoxMiovIHsgIkNvbW1hbmQgUmVjZWl2ZWQgV2hpbGUgRXJyb3IgU3RhdHVzIFBlbmRpbmcgKG9icykiLCAxLCB9LFwKLSAgLyoxMyovIHsgIkNvbW1hbmQgUmVjZWl2ZWQgV2hpbGUgTmV3IENhcnRyaWRnZSBQZW5kaW5nIiwgMSwgfSxcCi0gIC8qMTQqLyB7ICJDb21tYW5kIElsbGVnYWwgb3IgVW5kZWZpbmVkIGluIFByaW1hcnkgTW9kZSIsIDEsIH0sXAotICAvKjE1Ki8geyAiQ29tbWFuZCBJbGxlZ2FsIG9yIFVuZGVmaW5lZCBpbiBGb3JtYXQgTW9kZSIsIDEsIH0sXAotICAvKjE2Ki8geyAiQ29tbWFuZCBJbGxlZ2FsIG9yIFVuZGVmaW5lZCBpbiBWZXJpZnkgTW9kZSIsIDEsIH0sXAotICAvKjE3Ki8geyAiTG9naWNhbCBGb3J3YXJkIE5vdCBhdCBMb2dpY2FsIEJPVCBvciBubyBGb3JtYXQgU2VnbWVudHMgaW4gRm9ybWF0IE1vZGUiLCAxLCB9LFwKLSAgLyoxOCovIHsgIkxvZ2ljYWwgRU9UIEJlZm9yZSBBbGwgU2VnbWVudHMgZ2VuZXJhdGVkIiwgMSwgfSxcCi0gIC8qMTkqLyB7ICJDb21tYW5kIElsbGVnYWwgV2hlbiBDYXJ0cmlkZ2UgTm90IFJlZmVyZW5jZWQiLCAxLCB9LFwKLSAgLyoyMCovIHsgIlNlbGYtRGlhZ25vc3RpYyBGYWlsZWQgKGNhbm5vdCBiZSBjbGVhcmVkKSIsIDEsIH0sXAotICAvKjIxKi8geyAiV2FybmluZyBFRVBST00gTm90IEluaXRpYWxpemVkLCBEZWZhdWx0cyBTZXQiLCAxLCB9LFwKLSAgLyoyMiovIHsgIkVFUFJPTSBDb3JydXB0ZWQgb3IgSGFyZHdhcmUgRmFpbHVyZSIsIDEsIH0sXAotICAvKjIzKi8geyAiTW90aW9uIFRpbWUtb3V0IEVycm9yIiwgMSwgfSxcCi0gIC8qMjQqLyB7ICJEYXRhIFNlZ21lbnQgVG9vIExvbmcgLS0gTG9naWNhbCBGb3J3YXJkIG9yIFBhdXNlIiwgMSwgfSxcCi0gIC8qMjUqLyB7ICJUcmFuc21pdCBPdmVycnVuIChvYnMpIiwgMSwgfSxcCi0gIC8qMjYqLyB7ICJQb3dlciBPbiBSZXNldCBPY2N1cnJlZCIsIDAsIH0sXAotICAvKjI3Ki8geyAiU29mdHdhcmUgUmVzZXQgT2NjdXJyZWQiLCAwLCB9LFwKLSAgLyoyOCovIHsgIkRpYWdub3N0aWMgTW9kZSAxIEVycm9yIiwgMSwgfSxcCi0gIC8qMjkqLyB7ICJEaWFnbm9zdGljIE1vZGUgMiBFcnJvciIsIDEsIH0sXAotICAvKjMwKi8geyAiQ29tbWFuZCBSZWNlaXZlZCBEdXJpbmcgTm9uLUludGVycnVwdGlibGUgUHJvY2VzcyIsIDEsIH0sXAotICAvKjMxKi8geyAiUmF0ZSBvciBGb3JtYXQgU2VsZWN0aW9uIEVycm9yIiwgMSwgfSxcCi0gIC8qMzIqLyB7ICJJbGxlZ2FsIENvbW1hbmQgV2hpbGUgaW4gSGlnaCBTcGVlZCBNb2RlIiwgMSwgfSxcCi0gIC8qMzMqLyB7ICJJbGxlZ2FsIFNlZWsgU2VnbWVudCBWYWx1ZSIsIDEsIH0sXAotICAvKjM0Ki8geyAiSW52YWxpZCBNZWRpYSIsIDEsIH0sXAotICAvKjM1Ki8geyAiSGVhZCBQb3NpdGlvbmluZyBGYWlsdXJlIiwgMSwgfSxcCi0gIC8qMzYqLyB7ICJXcml0ZSBSZWZlcmVuY2UgQnVyc3QgRmFpbHVyZSIsIDEsIH0sXAotICAvKjM3Ki8geyAiUHJvbSBDb2RlIE1pc3NpbmciLCAxLCB9LFwKLSAgLyozOCovIHsgIkludmFsaWQgRm9ybWF0IiwgMSwgfSxcCi0gIC8qMzkqLyB7ICJFT1QvQk9UIFN5c3RlbSBGYWlsdXJlIiwgMSwgfSxcCi0gIC8qNDAqLyB7ICJQcm9tIEEgQ2hlY2tzdW0gRXJyb3IiLCAxLCB9LFwKLSAgLyo0MSovIHsgIkRyaXZlIFdha2V1cCBSZXNldCBPY2N1cnJlZCIsIDEsIH0sXAotICAvKjQyKi8geyAiUHJvbSBCIENoZWNrc3VtIEVycm9yIiwgMSwgfSxcCi0gIC8qNDMqLyB7ICJJbGxlZ2FsIEVudHJ5IGludG8gRm9ybWF0IE1vZGUiLCAxLCB9LFwKLX0KLQotI2VuZGlmCQkJCS8qIF9RSUMxMTdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaAppbmRleCA4NjZhMWUyLi5mYmFlZGE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaApAQCAtOTQsNyArOTQsNyBAQAogCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBydyk7CiBleHRlcm4gdm9pZCBtZF9kb19zeW5jKG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiB2b2lkIG1kX25ld19ldmVudChtZGRldl90ICptZGRldik7Ci0KK2V4dGVybiB2b2lkIG1kX2FsbG93X3dyaXRlKG1kZGV2X3QgKm1kZGV2KTsKIAogI2VuZGlmIC8qIENPTkZJR19NRCAqLwogI2VuZGlmIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQ1LmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaAppbmRleCAwMzYzNmQ3Li5kODI4NmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaApAQCAtMjI3LDcgKzIyNywxMCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJaGFuZGxlX2xpc3Q7IC8qIHN0cmlwZXMgbmVlZGluZyBoYW5kbGluZyAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZGVsYXllZF9saXN0OyAvKiBzdHJpcGVzIHRoYXQgaGF2ZSBwbHVnZ2VkIHJlcXVlc3RzICovCiAJc3RydWN0IGxpc3RfaGVhZAliaXRtYXBfbGlzdDsgLyogc3RyaXBlcyBkZWxheWluZyBhd2FpdGluZyBiaXRtYXAgdXBkYXRlICovCisJc3RydWN0IGJpbwkJKnJldHJ5X3JlYWRfYWxpZ25lZDsgLyogY3VycmVudGx5IHJldHJ5aW5nIGFsaWduZWQgYmlvcyAgICovCisJc3RydWN0IGJpbwkJKnJldHJ5X3JlYWRfYWxpZ25lZF9saXN0OyAvKiBhbGlnbmVkIGJpb3MgcmV0cnkgbGlzdCAgKi8KIAlhdG9taWNfdAkJcHJlcmVhZF9hY3RpdmVfc3RyaXBlczsgLyogc3RyaXBlcyB3aXRoIHNjaGVkdWxlZCBpbyAqLworCWF0b21pY190CQlhY3RpdmVfYWxpZ25lZF9yZWFkczsKIAogCWF0b21pY190CQlyZXNoYXBlX3N0cmlwZXM7IC8qIHN0cmlwZXMgd2l0aCBwZW5kaW5nIHdyaXRlcyBmb3IgcmVzaGFwZSAqLwogCS8qIHVuZm9ydHVuYXRlbHkgd2UgbmVlZCB0d28gY2FjaGUgbmFtZXMgYXMgd2UgdGVtcG9yYXJpbHkgaGF2ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWNpcHJvY2FsX2Rpdi5oIGIvaW5jbHVkZS9saW51eC9yZWNpcHJvY2FsX2Rpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YzkwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3JlY2lwcm9jYWxfZGl2LmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfTElOVVhfUkVDSVBST0NBTF9ESVZfSAorI2RlZmluZSBfTElOVVhfUkVDSVBST0NBTF9ESVZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIFRoaXMgZmlsZSBkZXNjcmliZXMgcmVjaXByb2NpY2FsIGRpdmlzaW9uLgorICoKKyAqIFRoaXMgb3B0aW1pemVzIHRoZSAoQS9CKSBwcm9ibGVtLCB3aGVuIEEgYW5kIEIgYXJlIHR3byB1MzIKKyAqIGFuZCBCIGlzIGEga25vd24gdmFsdWUgKGJ1dCBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lKQorICoKKyAqIFRoZSBtYXRoIHByaW5jaXBsZSB1c2VkIGlzIDoKKyAqICAgTGV0IFJFQ0lQUk9DQUxfVkFMVUUoQikgYmUgKCgoMUxMIDw8IDMyKSArIChCIC0gMSkpLyBCKQorICogICBUaGVuIEEgLyBCID0gKHUzMikoKCh1NjQpKEEpICogKFIpKSA+PiAzMikKKyAqCisgKiBUaGlzIHJlcGxhY2VzIGEgZGl2aWRlIGJ5IGEgbXVsdGlwbHkgKGFuZCBhIHNoaWZ0KSwgYW5kCisgKiBpcyBnZW5lcmFsbHkgbGVzcyBleHBlbnNpdmUgaW4gQ1BVIGN5Y2xlcy4KKyAqLworCisvKgorICogQ29tcHV0ZXMgdGhlIHJlY2lwcm9jYWwgdmFsdWUgKFIpIGZvciB0aGUgdmFsdWUgQiBvZiB0aGUgZGl2aXNvci4KKyAqIFNob3VsZCBub3QgYmUgY2FsbGVkIGJlZm9yZSBlYWNoIHJlY2lwcm9jYWxfZGl2aWRlKCksCisgKiBvciBlbHNlIHRoZSBwZXJmb3JtYW5jZSBpcyBzbG93ZXIgdGhhbiBhIG5vcm1hbCBkaXZpZGUuCisgKi8KK2V4dGVybiB1MzIgcmVjaXByb2NhbF92YWx1ZSh1MzIgQik7CisKKworc3RhdGljIGlubGluZSB1MzIgcmVjaXByb2NhbF9kaXZpZGUodTMyIEEsIHUzMiBSKQoreworCXJldHVybiAodTMyKSgoKHU2NClBICogUikgPj4gMzIpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKaW5kZXggZDBlNGRjZS4uYzNmYzZjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaApAQCAtMTE1OSw3ICsxMTU5LDcgQEAKICNkZWZpbmUgUEFUSF9SRUFEQQkweDEJLyogZG8gcmVhZCBhaGVhZCAqLwogI2RlZmluZSBQQVRIX1JFQURBX0JBQ0sgMHgyCS8qIHJlYWQgYmFja3dhcmRzICovCiAKLXN0cnVjdCBwYXRoIHsKK3N0cnVjdCB0cmVlcGF0aCB7CiAJaW50IHBhdGhfbGVuZ3RoOwkvKiBMZW5ndGggb2YgdGhlIGFycmF5IGFib3ZlLiAgICovCiAJaW50IHJlYWRhOwogCXN0cnVjdCBwYXRoX2VsZW1lbnQgcGF0aF9lbGVtZW50c1tFWFRFTkRFRF9NQVhfSEVJR0hUXTsJLyogQXJyYXkgb2YgdGhlIHBhdGggZWxlbWVudHMuICAqLwpAQCAtMTE2OSw3ICsxMTY5LDcgQEAKICNkZWZpbmUgcG9zX2luX2l0ZW0ocGF0aCkgKChwYXRoKS0+cG9zX2luX2l0ZW0pCiAKICNkZWZpbmUgSU5JVElBTElaRV9QQVRIKHZhcikgXAotc3RydWN0IHBhdGggdmFyID0gey5wYXRoX2xlbmd0aCA9IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCwgLnJlYWRhID0gMCx9CitzdHJ1Y3QgdHJlZXBhdGggdmFyID0gey5wYXRoX2xlbmd0aCA9IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCwgLnJlYWRhID0gMCx9CiAKIC8qIEdldCBwYXRoIGVsZW1lbnQgYnkgcGF0aCBhbmQgcGF0aCBwb3NpdGlvbi4gKi8KICNkZWZpbmUgUEFUSF9PRkZTRVRfUEVMRU1FTlQocF9zX3BhdGgsbl9vZmZzZXQpICAoKHBfc19wYXRoKS0+cGF0aF9lbGVtZW50cyArKG5fb2Zmc2V0KSkKQEAgLTEzMjcsNyArMTMyNyw3IEBACiAJaW50IG5lZWRfYmFsYW5jZV9kaXJ0eTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnRiX3NiOwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRyYW5zYWN0aW9uX2hhbmRsZTsKLQlzdHJ1Y3QgcGF0aCAqdGJfcGF0aDsKKwlzdHJ1Y3QgdHJlZXBhdGggKnRiX3BhdGg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpMW01BWF9IRUlHSFRdOwkvKiBhcnJheSBvZiBsZWZ0IG5laWdoYm9ycyBvZiBub2RlcyBpbiB0aGUgcGF0aCAqLwogCXN0cnVjdCBidWZmZXJfaGVhZCAqUltNQVhfSEVJR0hUXTsJLyogYXJyYXkgb2YgcmlnaHQgbmVpZ2hib3JzIG9mIG5vZGVzIGluIHRoZSBwYXRoICovCiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpGTFtNQVhfSEVJR0hUXTsJLyogYXJyYXkgb2YgZmF0aGVycyBvZiB0aGUgbGVmdCAgbmVpZ2hib3JzICAgICAgKi8KQEAgLTE3OTMsNDEgKzE3OTMsNDEgQEAKIAltZW1jcHkodG8sIGZyb20sIEtFWV9TSVpFKTsKIH0KIAotaW50IGNvbXBfaXRlbXMoY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqc3RvcmVkX2loLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcF9zX3BhdGgpOwotY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X3JrZXkoY29uc3Qgc3RydWN0IHBhdGggKnBfc19jaGtfcGF0aCwKK2ludCBjb21wX2l0ZW1zKGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKnN0b3JlZF9paCwgY29uc3Qgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCk7Citjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfcmtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19jaGtfcGF0aCwKIAkJCQkgICAgY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpOwogaW50IHNlYXJjaF9ieV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICosCi0JCSAgc3RydWN0IHBhdGggKiwgaW50KTsKKwkJICBzdHJ1Y3QgdHJlZXBhdGggKiwgaW50KTsKICNkZWZpbmUgc2VhcmNoX2l0ZW0ocyxrZXkscGF0aCkgc2VhcmNoX2J5X2tleSAocywga2V5LCBwYXRoLCBESVNLX0xFQUZfTk9ERV9MRVZFTCkKIGludCBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2NwdV9rZXksCi0JCQkgICAgICAgc3RydWN0IHBhdGggKnBfc19zZWFyY2hfcGF0aCk7CisJCQkgICAgICAgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOwogZXh0ZXJuIHZvaWQgZGVjcmVtZW50X2Jjb3VudChzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaCk7Ci12b2lkIGRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKHN0cnVjdCBwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOwotdm9pZCBwYXRocmVsc2Uoc3RydWN0IHBhdGggKnBfc19zZWFyY2hfcGF0aCk7Ci1pbnQgcmVpc2VyZnNfY2hlY2tfcGF0aChzdHJ1Y3QgcGF0aCAqcCk7Ci12b2lkIHBhdGhyZWxzZV9hbmRfcmVzdG9yZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOwordm9pZCBkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aChzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCk7Cit2b2lkIHBhdGhyZWxzZShzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCk7CitpbnQgcmVpc2VyZnNfY2hlY2tfcGF0aChzdHJ1Y3QgdHJlZXBhdGggKnApOwordm9pZCBwYXRocmVsc2VfYW5kX3Jlc3RvcmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCk7CiAKIGludCByZWlzZXJmc19pbnNlcnRfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSBzdHJ1Y3QgcGF0aCAqcGF0aCwKKwkJCSBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCiAJCQkgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwKIAkJCSBzdHJ1Y3QgaXRlbV9oZWFkICppaCwKIAkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpib2R5KTsKIAogaW50IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgICAgc3RydWN0IHBhdGggKnBhdGgsCisJCQkgICAgIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwKIAkJCSAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgY29uc3QgY2hhciAqYm9keSwgaW50IHBhc3RlX3NpemUpOwogCiBpbnQgcmVpc2VyZnNfY3V0X2Zyb21faXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgIHN0cnVjdCBwYXRoICpwYXRoLAorCQkJICAgc3RydWN0IHRyZWVwYXRoICpwYXRoLAogCQkJICAgc3RydWN0IGNwdV9rZXkgKmtleSwKIAkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9mZl90IG5ld19maWxlX3NpemUpOwogCiBpbnQgcmVpc2VyZnNfZGVsZXRlX2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgc3RydWN0IHBhdGggKnBhdGgsCisJCQkgc3RydWN0IHRyZWVwYXRoICpwYXRoLAogCQkJIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICprZXksCiAJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfdW5fYmgpOwogCkBAIC0xODU4LDcgKzE4NTgsNyBAQAogI2RlZmluZSBHRVRfQkxPQ0tfTk9fREFOR0xFICAgMTYJLyogZG9uJ3QgbGVhdmUgYW55IHRyYW5zYWN0aW9ucyBydW5uaW5nICovCiAKIGludCByZXN0YXJ0X3RyYW5zYWN0aW9uKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhdGggKnBhdGgpOworCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHRyZWVwYXRoICpwYXRoKTsKIHZvaWQgcmVpc2VyZnNfcmVhZF9sb2NrZWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgcmVpc2VyZnNfaWdldF9hcmdzICphcmdzKTsKIGludCByZWlzZXJmc19maW5kX2FjdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKnApOwpAQCAtMTkwNSw3ICsxOTA1LDcgQEAKIC8qIG5hbWVpLmMgKi8KIHZvaWQgc2V0X2RlX25hbWVfYW5kX25hbWVsZW4oc3RydWN0IHJlaXNlcmZzX2Rpcl9lbnRyeSAqZGUpOwogaW50IHNlYXJjaF9ieV9lbnRyeV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwKLQkJCXN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5ICpkZSk7CisJCQlzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIHN0cnVjdCByZWlzZXJmc19kaXJfZW50cnkgKmRlKTsKIHN0cnVjdCBkZW50cnkgKnJlaXNlcmZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqKTsKIC8qIHByb2Nmcy5jICovCiAKQEAgLTE5NTYsOSArMTk1Niw5IEBACiAKIC8qIHRhaWxfY29udmVyc2lvbi5jICovCiBpbnQgZGlyZWN0MmluZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwgc3RydWN0IGlub2RlICosCi0JCSAgICBzdHJ1Y3QgcGF0aCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgbG9mZl90KTsKKwkJICAgIHN0cnVjdCB0cmVlcGF0aCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgbG9mZl90KTsKIGludCBpbmRpcmVjdDJkaXJlY3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKLQkJICAgIHN0cnVjdCBwYWdlICosIHN0cnVjdCBwYXRoICosIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICosCisJCSAgICBzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgdHJlZXBhdGggKiwgY29uc3Qgc3RydWN0IGNwdV9rZXkgKiwKIAkJICAgIGxvZmZfdCwgY2hhciAqKTsKIHZvaWQgcmVpc2VyZnNfdW5tYXBfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKIApAQCAtMjA0NSw3ICsyMDQ1LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwkvKiBpbm9kZSBwYXNzZWQgdG8gYWxsb2NhdG9yLCBpZiB3ZSBhbGxvY2F0ZSB1bmYuIG5vZGVzICovCiAJbG9uZyBibG9jazsJCS8qIGZpbGUgb2Zmc2V0LCBpbiBibG9ja3MgKi8KIAlzdHJ1Y3QgaW5fY29yZV9rZXkga2V5OwotCXN0cnVjdCBwYXRoICpwYXRoOwkvKiBzZWFyY2ggcGF0aCwgdXNlZCBieSBhbGxvY2F0b3IgdG8gZGV0ZXJuaW5lIHNlYXJjaF9zdGFydCBieQorCXN0cnVjdCB0cmVlcGF0aCAqcGF0aDsJLyogc2VhcmNoIHBhdGgsIHVzZWQgYnkgYWxsb2NhdG9yIHRvIGRldGVybmluZSBzZWFyY2hfc3RhcnQgYnkKIAkJCQkgKiB2YXJpb3VzIHdheXMgKi8KIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aDsJLyogdHJhbnNhY3Rpb24gaGFuZGxlIGlzIG5lZWRlZCB0byBsb2cgc3VwZXIgYmxvY2tzIGFuZAogCQkJCQkJICogYml0bWFwIGJsb2NrcyBjaGFuZ2VzICAqLwpAQCAtMjEwMSw3ICsyMTAxLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX25ld191bmZfYmxvY2tucnMoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZQogCQkJCQkgICAgKnRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgYl9ibG9ja25yX3QgKiBuZXdfYmxvY2tucnMsCi0JCQkJCSAgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgbG9uZyBibG9jaykKKwkJCQkJICAgIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwgbG9uZyBibG9jaykKIHsKIAlyZWlzZXJmc19ibG9ja25yX2hpbnRfdCBoaW50ID0gewogCQkudGggPSB0aCwKQEAgLTIxMTgsNyArMjExOCw3IEBACiBzdGF0aWMgaW5saW5lIGludCByZWlzZXJmc19uZXdfdW5mX2Jsb2NrbnJzMihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlCiAJCQkJCSAgICAgKnRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgIGJfYmxvY2tucl90ICogbmV3X2Jsb2NrbnJzLAotCQkJCQkgICAgIHN0cnVjdCBwYXRoICpwYXRoLCBsb25nIGJsb2NrKQorCQkJCQkgICAgIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwgbG9uZyBibG9jaykKIHsKIAlyZWlzZXJmc19ibG9ja25yX2hpbnRfdCBoaW50ID0gewogCQkudGggPSB0aCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmgKaW5kZXggNWIzYjI5Ny4uY2UzNjYzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAlpX2xpbmtfc2F2ZWRfdHJ1bmNhdGVfbWFzayA9IDB4MDAyMCwKIAlpX2hhc194YXR0cl9kaXIgPSAweDAwNDAsCiAJaV9kYXRhX2xvZyA9IDB4MDA4MCwKKwlpX2V2ZXJfbWFwcGVkID0gMHgwMTAwCiB9IHJlaXNlcmZzX2lub2RlX2ZsYWdzOwogCiBzdHJ1Y3QgcmVpc2VyZnNfaW5vZGVfaW5mbyB7CkBAIC01Miw2ICs1Myw3IEBACiAJICoqIGZsdXNoZWQgKi8KIAl1bnNpZ25lZCBsb25nIGlfdHJhbnNfaWQ7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqaV9qbDsKKwlzdHJ1Y3QgbXV0ZXggaV9tbWFwOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKIAlzdHJ1Y3QgcG9zaXhfYWNsICppX2FjbF9hY2Nlc3M7CiAJc3RydWN0IHBvc2l4X2FjbCAqaV9hY2xfZGVmYXVsdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggMzZmODUwMy4uYmRkMjc3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTcyLDcgKzcyLDcgQEAKIHZvaWQgcGFnZV9hZGRfYW5vbl9ybWFwKHN0cnVjdCBwYWdlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKIHZvaWQgcGFnZV9hZGRfbmV3X2Fub25fcm1hcChzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CiB2b2lkIHBhZ2VfYWRkX2ZpbGVfcm1hcChzdHJ1Y3QgcGFnZSAqKTsKLXZvaWQgcGFnZV9yZW1vdmVfcm1hcChzdHJ1Y3QgcGFnZSAqKTsKK3ZvaWQgcGFnZV9yZW1vdmVfcm1hcChzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiAKIC8qKgogICogcGFnZV9kdXBfcm1hcCAtIGR1cGxpY2F0ZSBwdGUgbWFwcGluZyB0byBhIHBhZ2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjLmggYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCmluZGV4IDA5ZmY0YzMuLjVlMjJkNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydGMuaApAQCAtMTA2LDYgKzEwNiw3IEBACiBleHRlcm4gaW50IHJ0Y192YWxpZF90bShzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKIGV4dGVybiBpbnQgcnRjX3RtX3RvX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSwgdW5zaWduZWQgbG9uZyAqdGltZSk7CiBleHRlcm4gdm9pZCBydGNfdGltZV90b190bSh1bnNpZ25lZCBsb25nIHRpbWUsIHN0cnVjdCBydGNfdGltZSAqdG0pOworZXh0ZXJuIHZvaWQgcnRjX21lcmdlX2FsYXJtKHN0cnVjdCBydGNfdGltZSAqbm93LCBzdHJ1Y3QgcnRjX3RpbWUgKmFsYXJtKTsKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bXV0ZXguaCBiL2luY2x1ZGUvbGludXgvcnRtdXRleC5oCmluZGV4IGIwMDkwZTkuLjM4MmJiNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRtdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRtdXRleC5oCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogCi0vKgorLyoqCiAgKiBUaGUgcnRfbXV0ZXggc3RydWN0dXJlCiAgKgogICogQHdhaXRfbG9jazoJc3BpbmxvY2sgdG8gcHJvdGVjdCB0aGUgc3RydWN0dXJlCkBAIC03MSw3ICs3MSw3IEBACiAjZGVmaW5lIERFRklORV9SVF9NVVRFWChtdXRleG5hbWUpIFwKIAlzdHJ1Y3QgcnRfbXV0ZXggbXV0ZXhuYW1lID0gX19SVF9NVVRFWF9JTklUSUFMSVpFUihtdXRleG5hbWUpCiAKLS8qKioKKy8qKgogICogcnRfbXV0ZXhfaXNfbG9ja2VkIC0gaXMgdGhlIG11dGV4IGxvY2tlZAogICogQGxvY2s6IHRoZSBtdXRleCB0byBiZSBxdWVyaWVkCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggNDkzMjk3YS4uNGE2MjllYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCkBAIC0zLDYgKzMsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2xpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+CisjaW5jbHVkZSA8bGludXgvbmVpZ2hib3VyLmg+CiAKIC8qKioqCiAgKgkJUm91dGluZy9uZWlnaGJvdXIgZGlzY292ZXJ5IG1lc3NhZ2VzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IGRlZGU4MmMuLjQ0NjM3MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTgyLDYgKzgyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCkBAIC00MzYsNyArNDM3LDEyIEBACiAJLyogam9iIGNvbnRyb2wgSURzICovCiAJcGlkX3QgcGdycDsKIAlwaWRfdCB0dHlfb2xkX3BncnA7Ci0JcGlkX3Qgc2Vzc2lvbjsKKworCXVuaW9uIHsKKwkJcGlkX3Qgc2Vzc2lvbiBfX2RlcHJlY2F0ZWQ7CisJCXBpZF90IF9fc2Vzc2lvbjsKKwl9OworCiAJLyogYm9vbGVhbiB2YWx1ZSBmb3Igc2Vzc2lvbiBncm91cCBsZWFkZXIgKi8KIAlpbnQgbGVhZGVyOwogCkBAIC02NDIsNiArNjQ4LDcgQEAKICNkZWZpbmUgU0RfU0hBUkVfQ1BVUE9XRVIJMTI4CS8qIERvbWFpbiBtZW1iZXJzIHNoYXJlIGNwdSBwb3dlciAqLwogI2RlZmluZSBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRQkyNTYJLyogQmFsYW5jZSBmb3IgcG93ZXIgc2F2aW5ncyAqLwogI2RlZmluZSBTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCTUxMgkvKiBEb21haW4gbWVtYmVycyBzaGFyZSBjcHUgcGtnIHJlc291cmNlcyAqLworI2RlZmluZSBTRF9TRVJJQUxJWkUJCTEwMjQJLyogT25seSBhIHNpbmdsZSBsb2FkIGJhbGFuY2luZyBpbnN0YW5jZSAqLwogCiAjZGVmaW5lIEJBTEFOQ0VfRk9SX01DX1BPV0VSCVwKIAkoc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgPyBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSA6IDApCkBAIC0xMDA4LDYgKzEwMTUsNyBAQAogCXdhaXRfcXVldWVfdCAqaW9fd2FpdDsKIC8qIGkvbyBjb3VudGVycyhieXRlcyByZWFkL3dyaXR0ZW4sICNzeXNjYWxscyAqLwogCXU2NCByY2hhciwgd2NoYXIsIHN5c2NyLCBzeXNjdzsKKwlzdHJ1Y3QgdGFza19pb19hY2NvdW50aW5nIGlvYWM7CiAjaWYgZGVmaW5lZChDT05GSUdfVEFTS19YQUNDVCkKIAl1NjQgYWNjdF9yc3NfbWVtMTsJLyogYWNjdW11bGF0ZWQgcnNzIHVzYWdlICovCiAJdTY0IGFjY3Rfdm1fbWVtMTsJLyogYWNjdW11bGF0ZWQgdmlydHVhbCBtZW1vcnkgdXNhZ2UgKi8KQEAgLTEwNDAsNiArMTA0OCw5IEBACiAjaWZkZWYJQ09ORklHX1RBU0tfREVMQVlfQUNDVAogCXN0cnVjdCB0YXNrX2RlbGF5X2luZm8gKmRlbGF5czsKICNlbmRpZgorI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT04KKwlpbnQgbWFrZV9pdF9mYWlsOworI2VuZGlmCiB9OwogCiBzdGF0aWMgaW5saW5lIHBpZF90IHByb2Nlc3NfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCkBAIC0xMDQ3LDYgKzEwNTgsMjEgQEAKIAlyZXR1cm4gdHNrLT5zaWduYWwtPnBncnA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgcGlkX3Qgc2lnbmFsX3Nlc3Npb24oc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKK3sKKwlyZXR1cm4gc2lnLT5fX3Nlc3Npb247Cit9CisKK3N0YXRpYyBpbmxpbmUgcGlkX3QgcHJvY2Vzc19zZXNzaW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiBzaWduYWxfc2Vzc2lvbih0c2stPnNpZ25hbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2lnbmFsX3Nlc3Npb24oc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZywgcGlkX3Qgc2Vzc2lvbikKK3sKKwlzaWctPl9fc2Vzc2lvbiA9IHNlc3Npb247Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBpZCAqdGFza19waWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXJldHVybiB0YXNrLT5waWRzW1BJRFRZUEVfUElEXS5waWQ7CkBAIC0xMTE4LDcgKzExNDQsNiBAQAogI2RlZmluZSBQRl9NRU1BTExPQwkweDAwMDAwODAwCS8qIEFsbG9jYXRpbmcgbWVtb3J5ICovCiAjZGVmaW5lIFBGX0ZMVVNIRVIJMHgwMDAwMTAwMAkvKiByZXNwb25zaWJsZSBmb3IgZGlzayB3cml0ZWJhY2sgKi8KICNkZWZpbmUgUEZfVVNFRF9NQVRICTB4MDAwMDIwMDAJLyogaWYgdW5zZXQgdGhlIGZwdSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKi8KLSNkZWZpbmUgUEZfRlJFRVpFCTB4MDAwMDQwMDAJLyogdGhpcyB0YXNrIGlzIGJlaW5nIGZyb3plbiBmb3Igc3VzcGVuZCBub3cgKi8KICNkZWZpbmUgUEZfTk9GUkVFWkUJMHgwMDAwODAwMAkvKiB0aGlzIHRocmVhZCBzaG91bGQgbm90IGJlIGZyb3plbiAqLwogI2RlZmluZSBQRl9GUk9aRU4JMHgwMDAxMDAwMAkvKiBmcm96ZW4gZm9yIHN5c3RlbSBzdXNwZW5kICovCiAjZGVmaW5lIFBGX0ZTVFJBTlMJMHgwMDAyMDAwMAkvKiBpbnNpZGUgYSBmaWxlc3lzdGVtIHRyYW5zYWN0aW9uICovCkBAIC0xMjQwLDcgKzEyNjUsNiBAQAogCiAjZGVmaW5lIGZpbmRfdGFza19ieV9waWQobnIpCWZpbmRfdGFza19ieV9waWRfdHlwZShQSURUWVBFX1BJRCwgbnIpCiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlfcGlkX3R5cGUoaW50IHR5cGUsIGludCBwaWQpOwotZXh0ZXJuIHZvaWQgc2V0X3NwZWNpYWxfcGlkcyhwaWRfdCBzZXNzaW9uLCBwaWRfdCBwZ3JwKTsKIGV4dGVybiB2b2lkIF9fc2V0X3NwZWNpYWxfcGlkcyhwaWRfdCBzZXNzaW9uLCBwaWRfdCBwZ3JwKTsKIAogLyogcGVyLVVJRCBwcm9jZXNzIGNoYXJnaW5nLiAqLwpAQCAtMTM4MSw3ICsxNDA1LDYgQEAKIGV4dGVybiB2b2lkIGRhZW1vbml6ZShjb25zdCBjaGFyICosIC4uLik7CiBleHRlcm4gaW50IGFsbG93X3NpZ25hbChpbnQpOwogZXh0ZXJuIGludCBkaXNhbGxvd19zaWduYWwoaW50KTsKLWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkX3JlYXBlcjsKIAogZXh0ZXJuIGludCBkb19leGVjdmUoY2hhciAqLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiBsb25nIGRvX2ZvcmsodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0IHB0X3JlZ3MgKiwgdW5zaWduZWQgbG9uZywgaW50IF9fdXNlciAqLCBpbnQgX191c2VyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY3RwLmggYi9pbmNsdWRlL2xpbnV4L3NjdHAuaAppbmRleCAzNTEwOGZlLi5kNGY4NjU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjdHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjdHAuaApAQCAtMTgwLDcgKzE4MCw3IEBACiAJU0NUUF9QQVJBTV9FUlJfQ0FVU0UJCT0gX19jb25zdGFudF9odG9ucygweGMwMDMpLAogCVNDVFBfUEFSQU1fU0VUX1BSSU1BUlkJCT0gX19jb25zdGFudF9odG9ucygweGMwMDQpLAogCVNDVFBfUEFSQU1fU1VDQ0VTU19SRVBPUlQJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwNSksCi0JU0NUUF9QQVJBTV9BREFQVElPTl9MQVlFUl9JTkQgICA9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDA2KSwKKwlTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EID0gX19jb25zdGFudF9odG9ucygweGMwMDYpLAogCiB9IHNjdHBfcGFyYW1fdDsgLyogZW51bSAqLwogCkBAIC0yODEsMTEgKzI4MSwxMSBAQAogCXNjdHBfcGFyYW1oZHJfdCBwYXJhbV9oZHI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfZWNuX2NhcGFibGVfcGFyYW1fdDsKIAotLyogQURESVAgU2VjdGlvbiAzLjIuNiBBZGFwdGlvbiBMYXllciBJbmRpY2F0aW9uICovCi10eXBlZGVmIHN0cnVjdCBzY3RwX2FkYXB0aW9uX2luZF9wYXJhbSB7CisvKiBBRERJUCBTZWN0aW9uIDMuMi42IEFkYXB0YXRpb24gTGF5ZXIgSW5kaWNhdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2luZF9wYXJhbSB7CiAJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGFyYW1faGRyOwotCV9fYmUzMiBhZGFwdGlvbl9pbmQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfYWRhcHRpb25faW5kX3BhcmFtX3Q7CisJX19iZTMyIGFkYXB0YXRpb25faW5kOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2FkYXB0YXRpb25faW5kX3BhcmFtX3Q7CiAKIC8qIFJGQyAyOTYwLiAgU2VjdGlvbiAzLjMuMyBJbml0aWF0aW9uIEFja25vd2xlZGdlbWVudCAoSU5JVCBBQ0spICgyKToKICAqICAgVGhlIElOSVQgQUNLIGNodW5rIGlzIHVzZWQgdG8gYWNrbm93bGVkZ2UgdGhlIGluaXRpYXRpb24gb2YgYW4gU0NUUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaAppbmRleCA0NjAwMDkzLi42YjA2NDhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaApAQCAtNDQsOCArNDQsMTEgQEAKICNkZWZpbmUgU0VRTE9DS19VTkxPQ0tFRCBcCiAJCSBfX1NFUUxPQ0tfVU5MT0NLRUQob2xkX3N0eWxlX3NlcWxvY2tfaW5pdCkKIAotI2RlZmluZSBzZXFsb2NrX2luaXQoeCkgXAotCQlkbyB7ICooeCkgPSAoc2VxbG9ja190KSBfX1NFUUxPQ0tfVU5MT0NLRUQoeCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNlcWxvY2tfaW5pdCh4KQkJCQkJXAorCWRvIHsJCQkJCQlcCisJCSh4KS0+c2VxdWVuY2UgPSAwOwkJCVwKKwkJc3Bpbl9sb2NrX2luaXQoJih4KS0+bG9jayk7CQlcCisJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBERUZJTkVfU0VRTE9DSyh4KSBcCiAJCXNlcWxvY2tfdCB4ID0gX19TRVFMT0NLX1VOTE9DS0VEKHgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKaW5kZXggODI3NjcyMS4uY2YyMzgxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaApAQCAtMTY2LDggKzE2Niw4IEBACiAJdm9pZAkJKCpicmVha19jdGwpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgaW50IGN0bCk7CiAJaW50CQkoKnN0YXJ0dXApKHN0cnVjdCB1YXJ0X3BvcnQgKik7CiAJdm9pZAkJKCpzaHV0ZG93bikoc3RydWN0IHVhcnRfcG9ydCAqKTsKLQl2b2lkCQkoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdWFydF9wb3J0ICosIHN0cnVjdCB0ZXJtaW9zICpuZXcsCi0JCQkJICAgICAgIHN0cnVjdCB0ZXJtaW9zICpvbGQpOworCXZvaWQJCSgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgc3RydWN0IGt0ZXJtaW9zICpuZXcsCisJCQkJICAgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKIAl2b2lkCQkoKnBtKShzdHJ1Y3QgdWFydF9wb3J0ICosIHVuc2lnbmVkIGludCBzdGF0ZSwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBvbGRzdGF0ZSk7CiAJaW50CQkoKnNldF93YWtlKShzdHJ1Y3QgdWFydF9wb3J0ICosIHVuc2lnbmVkIGludCBzdGF0ZSk7CkBAIC0zNjEsOCArMzYxLDggQEAKICAqLwogdm9pZCB1YXJ0X3VwZGF0ZV90aW1lb3V0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjZmxhZywKIAkJCSB1bnNpZ25lZCBpbnQgYmF1ZCk7Ci11bnNpZ25lZCBpbnQgdWFydF9nZXRfYmF1ZF9yYXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLAotCQkJCXN0cnVjdCB0ZXJtaW9zICpvbGQsIHVuc2lnbmVkIGludCBtaW4sCit1bnNpZ25lZCBpbnQgdWFydF9nZXRfYmF1ZF9yYXRlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJCQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCwgdW5zaWduZWQgaW50IG1pbiwKIAkJCQl1bnNpZ25lZCBpbnQgbWF4KTsKIHVuc2lnbmVkIGludCB1YXJ0X2dldF9kaXZpc29yKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBiYXVkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpby5oIGIvaW5jbHVkZS9saW51eC9zZXJpby5oCmluZGV4IGI5OWM1Y2EuLjBmNDc4YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKQEAgLTg1LDE4ICs4NSw4IEBACiAKIHZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KHN0cnVjdCBzZXJpbyAqc2VyaW8pOwogdm9pZCBzZXJpb191bnJlZ2lzdGVyX2NoaWxkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7Ci12b2lkIF9fc2VyaW9fdW5yZWdpc3Rlcl9wb3J0X2RlbGF5ZWQoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IG1vZHVsZSAqb3duZXIpOwotc3RhdGljIGlubGluZSB2b2lkIHNlcmlvX3VucmVnaXN0ZXJfcG9ydF9kZWxheWVkKHN0cnVjdCBzZXJpbyAqc2VyaW8pCi17Ci0JX19zZXJpb191bnJlZ2lzdGVyX3BvcnRfZGVsYXllZChzZXJpbywgVEhJU19NT0RVTEUpOwotfQogCi12b2lkIF9fc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpOwotc3RhdGljIGlubGluZSB2b2lkIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpCi17Ci0JX19zZXJpb19yZWdpc3Rlcl9kcml2ZXIoZHJ2LCBUSElTX01PRFVMRSk7Ci19Ci0KK2ludCBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KTsKIHZvaWQgc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KTsKIAogc3RhdGljIGlubGluZSBpbnQgc2VyaW9fd3JpdGUoc3RydWN0IHNlcmlvICpzZXJpbywgdW5zaWduZWQgY2hhciBkYXRhKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCAyMjcxODg2Li4xZWY4MjJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaApAQCAtMSw3ICsxLDkgQEAKIC8qCi0gKiBsaW51eC9pbmNsdWRlL2xpbnV4L3NsYWIuaAotICogV3JpdHRlbiBieSBNYXJrIEhlbW1lbnQsIDE5OTYuCi0gKiAobWFya2hlQG5leHRkLmRlbW9uLmNvLnVrKQorICogV3JpdHRlbiBieSBNYXJrIEhlbW1lbnQsIDE5OTYgKG1hcmtoZUBuZXh0ZC5kZW1vbi5jby51aykuCisgKgorICogKEMpIFNHSSAyMDA2LCBDaHJpc3RvcGggTGFtZXRlciA8Y2xhbWV0ZXJAc2dpLmNvbT4KKyAqIAlDbGVhbmVkIHVwIGFuZCByZXN0cnVjdHVyZWQgdG8gZWFzZSB0aGUgYWRkaXRpb24gb2YgYWx0ZXJuYXRpdmUKKyAqIAlpbXBsZW1lbnRhdGlvbnMgb2YgU0xBQiBhbGxvY2F0b3JzLgogICovCiAKICNpZm5kZWYgX0xJTlVYX1NMQUJfSApAQCAtMTAsNjQgKzEyLDk1IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4JCS8qIGttYWxsb2Nfc2l6ZXMuaCBuZWVkcyBQQUdFX1NJWkUgKi8KLSNpbmNsdWRlIDxhc20vY2FjaGUuaD4JCS8qIGttYWxsb2Nfc2l6ZXMuaCBuZWVkcyBMMV9DQUNIRV9CWVRFUyAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKLS8qIGttZW1fY2FjaGVfdCBleGlzdHMgZm9yIGxlZ2FjeSByZWFzb25zIGFuZCBpcyBub3QgdXNlZCBieSBjb2RlIGluIG1tICovCiB0eXBlZGVmIHN0cnVjdCBrbWVtX2NhY2hlIGttZW1fY2FjaGVfdCBfX2RlcHJlY2F0ZWQ7CiAKLS8qIGZsYWdzIHRvIHBhc3MgdG8ga21lbV9jYWNoZV9jcmVhdGUoKS4KLSAqIFRoZSBmaXJzdCAzIGFyZSBvbmx5IHZhbGlkIHdoZW4gdGhlIGFsbG9jYXRvciBhcyBiZWVuIGJ1aWxkCi0gKiBTTEFCX0RFQlVHX1NVUFBPUlQuCisvKgorICogRmxhZ3MgdG8gcGFzcyB0byBrbWVtX2NhY2hlX2NyZWF0ZSgpLgorICogVGhlIG9uZXMgbWFya2VkIERFQlVHIGFyZSBvbmx5IHZhbGlkIGlmIENPTkZJR19TTEFCX0RFQlVHIGlzIHNldC4KICAqLwotI2RlZmluZQlTTEFCX0RFQlVHX0ZSRUUJCTB4MDAwMDAxMDBVTAkvKiBQZWZvcm0gKGV4cGVuc2l2ZSkgY2hlY2tzIG9uIGZyZWUgKi8KLSNkZWZpbmUJU0xBQl9ERUJVR19JTklUSUFMCTB4MDAwMDAyMDBVTAkvKiBDYWxsIGNvbnN0cnVjdG9yIChhcyB2ZXJpZmllcikgKi8KLSNkZWZpbmUJU0xBQl9SRURfWk9ORQkJMHgwMDAwMDQwMFVMCS8qIFJlZCB6b25lIG9ianMgaW4gYSBjYWNoZSAqLwotI2RlZmluZQlTTEFCX1BPSVNPTgkJMHgwMDAwMDgwMFVMCS8qIFBvaXNvbiBvYmplY3RzICovCi0jZGVmaW5lCVNMQUJfSFdDQUNIRV9BTElHTgkweDAwMDAyMDAwVUwJLyogYWxpZ24gb2JqcyBvbiBhIGgvdyBjYWNoZSBsaW5lcyAqLwotI2RlZmluZSBTTEFCX0NBQ0hFX0RNQQkJMHgwMDAwNDAwMFVMCS8qIHVzZSBHRlBfRE1BIG1lbW9yeSAqLwotI2RlZmluZSBTTEFCX01VU1RfSFdDQUNIRV9BTElHTgkweDAwMDA4MDAwVUwJLyogZm9yY2UgYWxpZ25tZW50ICovCi0jZGVmaW5lIFNMQUJfU1RPUkVfVVNFUgkJMHgwMDAxMDAwMFVMCS8qIHN0b3JlIHRoZSBsYXN0IG93bmVyIGZvciBidWcgaHVudGluZyAqLwotI2RlZmluZSBTTEFCX1JFQ0xBSU1fQUNDT1VOVAkweDAwMDIwMDAwVUwJLyogdHJhY2sgcGFnZXMgYWxsb2NhdGVkIHRvIGluZGljYXRlCi0JCQkJCQkgICB3aGF0IGlzIHJlY2xhaW1hYmxlIGxhdGVyKi8KLSNkZWZpbmUgU0xBQl9QQU5JQwkJMHgwMDA0MDAwMFVMCS8qIHBhbmljIGlmIGttZW1fY2FjaGVfY3JlYXRlKCkgZmFpbHMgKi8KLSNkZWZpbmUgU0xBQl9ERVNUUk9ZX0JZX1JDVQkweDAwMDgwMDAwVUwJLyogZGVmZXIgZnJlZWluZyBwYWdlcyB0byBSQ1UgKi8KKyNkZWZpbmUgU0xBQl9ERUJVR19GUkVFCQkweDAwMDAwMTAwVUwJLyogREVCVUc6IFBlcmZvcm0gKGV4cGVuc2l2ZSkgY2hlY2tzIG9uIGZyZWUgKi8KKyNkZWZpbmUgU0xBQl9ERUJVR19JTklUSUFMCTB4MDAwMDAyMDBVTAkvKiBERUJVRzogQ2FsbCBjb25zdHJ1Y3RvciAoYXMgdmVyaWZpZXIpICovCisjZGVmaW5lIFNMQUJfUkVEX1pPTkUJCTB4MDAwMDA0MDBVTAkvKiBERUJVRzogUmVkIHpvbmUgb2JqcyBpbiBhIGNhY2hlICovCisjZGVmaW5lIFNMQUJfUE9JU09OCQkweDAwMDAwODAwVUwJLyogREVCVUc6IFBvaXNvbiBvYmplY3RzICovCisjZGVmaW5lIFNMQUJfSFdDQUNIRV9BTElHTgkweDAwMDAyMDAwVUwJLyogQWxpZ24gb2JqcyBvbiBjYWNoZSBsaW5lcyAqLworI2RlZmluZSBTTEFCX0NBQ0hFX0RNQQkJMHgwMDAwNDAwMFVMCS8qIFVzZSBHRlBfRE1BIG1lbW9yeSAqLworI2RlZmluZSBTTEFCX01VU1RfSFdDQUNIRV9BTElHTgkweDAwMDA4MDAwVUwJLyogRm9yY2UgYWxpZ25tZW50IGV2ZW4gaWYgZGVidWdnaW4gaXMgYWN0aXZlICovCisjZGVmaW5lIFNMQUJfU1RPUkVfVVNFUgkJMHgwMDAxMDAwMFVMCS8qIERFQlVHOiBTdG9yZSB0aGUgbGFzdCBvd25lciBmb3IgYnVnIGh1bnRpbmcgKi8KKyNkZWZpbmUgU0xBQl9SRUNMQUlNX0FDQ09VTlQJMHgwMDAyMDAwMFVMCS8qIE9iamVjdHMgYXJlIHJlY2xhaW1hYmxlICovCisjZGVmaW5lIFNMQUJfUEFOSUMJCTB4MDAwNDAwMDBVTAkvKiBQYW5pYyBpZiBrbWVtX2NhY2hlX2NyZWF0ZSgpIGZhaWxzICovCisjZGVmaW5lIFNMQUJfREVTVFJPWV9CWV9SQ1UJMHgwMDA4MDAwMFVMCS8qIERlZmVyIGZyZWVpbmcgc2xhYnMgdG8gUkNVICovCiAjZGVmaW5lIFNMQUJfTUVNX1NQUkVBRAkJMHgwMDEwMDAwMFVMCS8qIFNwcmVhZCBzb21lIG1lbW9yeSBvdmVyIGNwdXNldCAqLwogCi0vKiBmbGFncyBwYXNzZWQgdG8gYSBjb25zdHJ1Y3RvciBmdW5jICovCi0jZGVmaW5lCVNMQUJfQ1RPUl9DT05TVFJVQ1RPUgkweDAwMVVMCQkvKiBpZiBub3Qgc2V0LCB0aGVuIGRlY29uc3RydWN0b3IgKi8KLSNkZWZpbmUgU0xBQl9DVE9SX0FUT01JQwkweDAwMlVMCQkvKiB0ZWxsIGNvbnN0cnVjdG9yIGl0IGNhbid0IHNsZWVwICovCi0jZGVmaW5lCVNMQUJfQ1RPUl9WRVJJRlkJMHgwMDRVTAkJLyogdGVsbCBjb25zdHJ1Y3RvciBpdCdzIGEgdmVyaWZ5IGNhbGwgKi8KKy8qIEZsYWdzIHBhc3NlZCB0byBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyAqLworI2RlZmluZSBTTEFCX0NUT1JfQ09OU1RSVUNUT1IJMHgwMDFVTAkJLyogSWYgbm90IHNldCwgdGhlbiBkZWNvbnN0cnVjdG9yICovCisjZGVmaW5lIFNMQUJfQ1RPUl9BVE9NSUMJMHgwMDJVTAkJLyogVGVsbCBjb25zdHJ1Y3RvciBpdCBjYW4ndCBzbGVlcCAqLworI2RlZmluZSBTTEFCX0NUT1JfVkVSSUZZCTB4MDA0VUwJCS8qIFRlbGwgY29uc3RydWN0b3IgaXQncyBhIHZlcmlmeSBjYWxsICovCiAKLSNpZm5kZWYgQ09ORklHX1NMT0IKKy8qCisgKiBzdHJ1Y3Qga21lbV9jYWNoZSByZWxhdGVkIHByb3RvdHlwZXMKKyAqLwordm9pZCBfX2luaXQga21lbV9jYWNoZV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBzbGFiX2lzX2F2YWlsYWJsZSh2b2lkKTsKIAotLyogcHJvdG90eXBlcyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdCh2b2lkKTsKLQotZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICprbWVtX2NhY2hlX2NyZWF0ZShjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90LAorc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGVfY3JlYXRlKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsCiAJCQl1bnNpZ25lZCBsb25nLAogCQkJdm9pZCAoKikodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLCB1bnNpZ25lZCBsb25nKSwKIAkJCXZvaWQgKCopKHZvaWQgKiwgc3RydWN0IGttZW1fY2FjaGUgKiwgdW5zaWduZWQgbG9uZykpOwotZXh0ZXJuIHZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICopOwotZXh0ZXJuIGludCBrbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKLWV4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90KTsKLWV4dGVybiB2b2lkICprbWVtX2NhY2hlX3phbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCk7Ci1leHRlcm4gdm9pZCBrbWVtX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKiwgdm9pZCAqKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICopOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmttZW1fY2FjaGVfbmFtZShzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKK3ZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICopOworaW50IGttZW1fY2FjaGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICopOwordm9pZCAqa21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCk7Cit2b2lkICprbWVtX2NhY2hlX3phbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCk7Cit2b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqLCB2b2lkICopOwordW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKK2NvbnN0IGNoYXIgKmttZW1fY2FjaGVfbmFtZShzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKK2ludCBrbWVtX3B0cl92YWxpZGF0ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBjb25zdCB2b2lkICpwdHIpOwogCi0vKiBTaXplIGRlc2NyaXB0aW9uIHN0cnVjdCBmb3IgZ2VuZXJhbCBjYWNoZXMuICovCi1zdHJ1Y3QgY2FjaGVfc2l6ZXMgewotCXNpemVfdAkJIAljc19zaXplOwotCXN0cnVjdCBrbWVtX2NhY2hlCSpjc19jYWNoZXA7Ci0Jc3RydWN0IGttZW1fY2FjaGUJKmNzX2RtYWNhY2hlcDsKLX07Ci1leHRlcm4gc3RydWN0IGNhY2hlX3NpemVzIG1hbGxvY19zaXplc1tdOworI2lmZGVmIENPTkZJR19OVU1BCitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90IGZsYWdzLCBpbnQgbm9kZSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCQkJZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGNhY2hlcCwgZmxhZ3MpOworfQorI2VuZGlmCiAKLWV4dGVybiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90LCBnZnBfdCk7CisvKgorICogQ29tbW9uIGttYWxsb2MgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGFsbCBhbGxvY2F0b3JzCisgKi8KK3ZvaWQgKl9fa21hbGxvYyhzaXplX3QsIGdmcF90KTsKK3ZvaWQgKl9fa3phbGxvYyhzaXplX3QsIGdmcF90KTsKK3ZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqKTsKK3Vuc2lnbmVkIGludCBrc2l6ZShjb25zdCB2b2lkICopOworCisvKioKKyAqIGtjYWxsb2MgLSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFuIGFycmF5LiBUaGUgbWVtb3J5IGlzIHNldCB0byB6ZXJvLgorICogQG46IG51bWJlciBvZiBlbGVtZW50cy4KKyAqIEBzaXplOiBlbGVtZW50IHNpemUuCisgKiBAZmxhZ3M6IHRoZSB0eXBlIG9mIG1lbW9yeSB0byBhbGxvY2F0ZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICprY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCit7CisJaWYgKG4gIT0gMCAmJiBzaXplID4gVUxPTkdfTUFYIC8gbikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIF9fa3phbGxvYyhuICogc2l6ZSwgZmxhZ3MpOworfQorCisvKgorICogQWxsb2NhdG9yIHNwZWNpZmljIGRlZmluaXRpb25zLiBUaGVzZSBhcmUgbWFpbmx5IHVzZWQgdG8gZXN0YWJsaXNoIG9wdGltaXplZAorICogd2F5cyB0byBjb252ZXJ0IGttYWxsb2MoKSBjYWxscyB0byBrbWVtX2NhY2hlX2FsbG9jKCkgaW52b2NhdGlvbnMgYnkgc2VsZWN0aW5nCisgKiB0aGUgYXBwcm9wcmlhdGUgZ2VuZXJhbCBjYWNoZSBhdCBjb21waWxlIHRpbWUuCisgKi8KKworI2lmZGVmIENPTkZJR19TTEFCCisjaW5jbHVkZSA8bGludXgvc2xhYl9kZWYuaD4KKyNlbHNlCisvKgorICogRmFsbGJhY2sgZGVmaW5pdGlvbnMgZm9yIGFuIGFsbG9jYXRvciBub3Qgd2FudGluZyB0byBwcm92aWRlCisgKiBpdHMgb3duIG9wdGltaXplZCBrbWFsbG9jIGRlZmluaXRpb25zIChsaWtlIFNMT0IpLgorICovCiAKIC8qKgogICoga21hbGxvYyAtIGFsbG9jYXRlIG1lbW9yeQpAQCAtMTE2LDI3ICsxNDksMzIgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkpIHsKLQkJaW50IGkgPSAwOwotI2RlZmluZSBDQUNIRSh4KSBcCi0JCWlmIChzaXplIDw9IHgpIFwKLQkJCWdvdG8gZm91bmQ7IFwKLQkJZWxzZSBcCi0JCQlpKys7Ci0jaW5jbHVkZSAia21hbGxvY19zaXplcy5oIgotI3VuZGVmIENBQ0hFCi0JCXsKLQkJCWV4dGVybiB2b2lkIF9feW91X2Nhbm5vdF9rbWFsbG9jX3RoYXRfbXVjaCh2b2lkKTsKLQkJCV9feW91X2Nhbm5vdF9rbWFsbG9jX3RoYXRfbXVjaCgpOwotCQl9Ci1mb3VuZDoKLQkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoKGZsYWdzICYgR0ZQX0RNQSkgPwotCQkJbWFsbG9jX3NpemVzW2ldLmNzX2RtYWNhY2hlcCA6Ci0JCQltYWxsb2Nfc2l6ZXNbaV0uY3NfY2FjaGVwLCBmbGFncyk7Ci0JfQogCXJldHVybiBfX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpOwogfQogCisvKioKKyAqIGt6YWxsb2MgLSBhbGxvY2F0ZSBtZW1vcnkuIFRoZSBtZW1vcnkgaXMgc2V0IHRvIHplcm8uCisgKiBAc2l6ZTogaG93IG1hbnkgYnl0ZXMgb2YgbWVtb3J5IGFyZSByZXF1aXJlZC4KKyAqIEBmbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlIChzZWUga21hbGxvYykuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqa3phbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCit7CisJcmV0dXJuIF9fa3phbGxvYyhzaXplLCBmbGFncyk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfTlVNQQorc3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKK3sKKwlyZXR1cm4ga21hbGxvYyhzaXplLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX19rbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKK3sKKwlyZXR1cm4gX19rbWFsbG9jKHNpemUsIGZsYWdzKTsKK30KKyNlbmRpZiAvKiAhQ09ORklHX05VTUEgKi8KKwogLyoKICAqIGttYWxsb2NfdHJhY2tfY2FsbGVyIGlzIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIGttYWxsb2MgdGhhdCByZWNvcmRzIHRoZQogICogY2FsbGluZyBmdW5jdGlvbiBvZiB0aGUgcm91dGluZSBjYWxsaW5nIGl0IGZvciBzbGFiIGxlYWsgdHJhY2tpbmcgaW5zdGVhZApAQCAtMTQ1LDg5ICsxODMsMTYgQEAKICAqIGFsbG9jYXRvciB3aGVyZSB3ZSBjYXJlIGFib3V0IHRoZSByZWFsIHBsYWNlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbgogICogcmVxdWVzdCBjb21lcyBmcm9tLgogICovCi0jaWZuZGVmIENPTkZJR19ERUJVR19TTEFCCi0jZGVmaW5lIGttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzKSBcCi0JX19rbWFsbG9jKHNpemUsIGZsYWdzKQotI2Vsc2UKKyNpZmRlZiBDT05GSUdfREVCVUdfU0xBQgogZXh0ZXJuIHZvaWQgKl9fa21hbGxvY190cmFja19jYWxsZXIoc2l6ZV90LCBnZnBfdCwgdm9pZCopOwogI2RlZmluZSBrbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncykgXAogCV9fa21hbGxvY190cmFja19jYWxsZXIoc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKLSNlbmRpZgotCi1leHRlcm4gdm9pZCAqX19remFsbG9jKHNpemVfdCwgZ2ZwX3QpOwotCi0vKioKLSAqIGt6YWxsb2MgLSBhbGxvY2F0ZSBtZW1vcnkuIFRoZSBtZW1vcnkgaXMgc2V0IHRvIHplcm8uCi0gKiBAc2l6ZTogaG93IG1hbnkgYnl0ZXMgb2YgbWVtb3J5IGFyZSByZXF1aXJlZC4KLSAqIEBmbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlIChzZWUga21hbGxvYykuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqa3phbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCi17Ci0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKSB7Ci0JCWludCBpID0gMDsKLSNkZWZpbmUgQ0FDSEUoeCkgXAotCQlpZiAoc2l6ZSA8PSB4KSBcCi0JCQlnb3RvIGZvdW5kOyBcCi0JCWVsc2UgXAotCQkJaSsrOwotI2luY2x1ZGUgImttYWxsb2Nfc2l6ZXMuaCIKLSN1bmRlZiBDQUNIRQotCQl7Ci0JCQlleHRlcm4gdm9pZCBfX3lvdV9jYW5ub3Rfa3phbGxvY190aGF0X211Y2godm9pZCk7Ci0JCQlfX3lvdV9jYW5ub3Rfa3phbGxvY190aGF0X211Y2goKTsKLQkJfQotZm91bmQ6Ci0JCXJldHVybiBrbWVtX2NhY2hlX3phbGxvYygoZmxhZ3MgJiBHRlBfRE1BKSA/Ci0JCQltYWxsb2Nfc2l6ZXNbaV0uY3NfZG1hY2FjaGVwIDoKLQkJCW1hbGxvY19zaXplc1tpXS5jc19jYWNoZXAsIGZsYWdzKTsKLQl9Ci0JcmV0dXJuIF9fa3phbGxvYyhzaXplLCBmbGFncyk7Ci19Ci0KLS8qKgotICoga2NhbGxvYyAtIGFsbG9jYXRlIG1lbW9yeSBmb3IgYW4gYXJyYXkuIFRoZSBtZW1vcnkgaXMgc2V0IHRvIHplcm8uCi0gKiBAbjogbnVtYmVyIG9mIGVsZW1lbnRzLgotICogQHNpemU6IGVsZW1lbnQgc2l6ZS4KLSAqIEBmbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKmtjYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKLXsKLQlpZiAobiAhPSAwICYmIHNpemUgPiBVTE9OR19NQVggLyBuKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4ga3phbGxvYyhuICogc2l6ZSwgZmxhZ3MpOwotfQotCi1leHRlcm4gdm9pZCBrZnJlZShjb25zdCB2b2lkICopOwotZXh0ZXJuIHVuc2lnbmVkIGludCBrc2l6ZShjb25zdCB2b2lkICopOwotZXh0ZXJuIGludCBzbGFiX2lzX2F2YWlsYWJsZSh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIGttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzKSBcCisJX19rbWFsbG9jKHNpemUsIGZsYWdzKQorI2VuZGlmIC8qIERFQlVHX1NMQUIgKi8KIAogI2lmZGVmIENPTkZJR19OVU1BCi1leHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90IGZsYWdzLCBpbnQgbm9kZSk7Ci1leHRlcm4gdm9pZCAqX19rbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCi17Ci0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKSB7Ci0JCWludCBpID0gMDsKLSNkZWZpbmUgQ0FDSEUoeCkgXAotCQlpZiAoc2l6ZSA8PSB4KSBcCi0JCQlnb3RvIGZvdW5kOyBcCi0JCWVsc2UgXAotCQkJaSsrOwotI2luY2x1ZGUgImttYWxsb2Nfc2l6ZXMuaCIKLSN1bmRlZiBDQUNIRQotCQl7Ci0JCQlleHRlcm4gdm9pZCBfX3lvdV9jYW5ub3Rfa21hbGxvY190aGF0X211Y2godm9pZCk7Ci0JCQlfX3lvdV9jYW5ub3Rfa21hbGxvY190aGF0X211Y2goKTsKLQkJfQotZm91bmQ6Ci0JCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUoKGZsYWdzICYgR0ZQX0RNQSkgPwotCQkJbWFsbG9jX3NpemVzW2ldLmNzX2RtYWNhY2hlcCA6Ci0JCQltYWxsb2Nfc2l6ZXNbaV0uY3NfY2FjaGVwLCBmbGFncywgbm9kZSk7Ci0JfQotCXJldHVybiBfX2ttYWxsb2Nfbm9kZShzaXplLCBmbGFncywgbm9kZSk7Ci19Ci0KIC8qCiAgKiBrbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyIGlzIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIGttYWxsb2Nfbm9kZSB0aGF0CiAgKiByZWNvcmRzIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIG9mIHRoZSByb3V0aW5lIGNhbGxpbmcgaXQgZm9yIHNsYWIgbGVhawpAQCAtMjM2LDcwICsyMDEsMjMgQEAKICAqIHN0YW5kYXJkIGFsbG9jYXRvciB3aGVyZSB3ZSBjYXJlIGFib3V0IHRoZSByZWFsIHBsYWNlIHRoZSBtZW1vcnkKICAqIGFsbG9jYXRpb24gcmVxdWVzdCBjb21lcyBmcm9tLgogICovCi0jaWZuZGVmIENPTkZJR19ERUJVR19TTEFCCi0jZGVmaW5lIGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2l6ZSwgZmxhZ3MsIG5vZGUpIFwKLQlfX2ttYWxsb2Nfbm9kZShzaXplLCBmbGFncywgbm9kZSkKLSNlbHNlCisjaWZkZWYgQ09ORklHX0RFQlVHX1NMQUIKIGV4dGVybiB2b2lkICpfX2ttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2l6ZV90LCBnZnBfdCwgaW50LCB2b2lkICopOwogI2RlZmluZSBrbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzLCBub2RlKSBcCiAJX19rbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzLCBub2RlLCBcCiAJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisjZWxzZQorI2RlZmluZSBrbWFsbG9jX25vZGVfdHJhY2tfY2FsbGVyKHNpemUsIGZsYWdzLCBub2RlKSBcCisJX19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUpCiAjZW5kaWYKKwogI2Vsc2UgLyogQ09ORklHX05VTUEgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCi0JCQkJCWdmcF90IGZsYWdzLCBpbnQgbm9kZSkKLXsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCi17Ci0JcmV0dXJuIGttYWxsb2Moc2l6ZSwgZmxhZ3MpOwotfQogCiAjZGVmaW5lIGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2l6ZSwgZmxhZ3MsIG5vZGUpIFwKIAlrbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncykKLSNlbmRpZgogCi1leHRlcm4gaW50IEZBU1RDQUxMKGttZW1fY2FjaGVfcmVhcChpbnQpKTsKLWV4dGVybiBpbnQgRkFTVENBTEwoa21lbV9wdHJfdmFsaWRhdGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqcHRyKSk7Ci0KLSNlbHNlIC8qIENPTkZJR19TTE9CICovCi0KLS8qIFNMT0IgYWxsb2NhdG9yIHJvdXRpbmVzICovCi0KLXZvaWQga21lbV9jYWNoZV9pbml0KHZvaWQpOwotc3RydWN0IGttZW1fY2FjaGUgKmttZW1fY2FjaGVfY3JlYXRlKGNvbnN0IGNoYXIgKmMsIHNpemVfdCwgc2l6ZV90LAotCXVuc2lnbmVkIGxvbmcsCi0Jdm9pZCAoKikodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLCB1bnNpZ25lZCBsb25nKSwKLQl2b2lkICgqKSh2b2lkICosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpKTsKLXZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpjKTsKLXZvaWQgKmttZW1fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmMsIGdmcF90IGZsYWdzKTsKLXZvaWQgKmttZW1fY2FjaGVfemFsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90KTsKLXZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpjLCB2b2lkICpiKTsKLWNvbnN0IGNoYXIgKmttZW1fY2FjaGVfbmFtZShzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKLXZvaWQgKmttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKLXZvaWQgKl9fa3phbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpOwotdm9pZCBrZnJlZShjb25zdCB2b2lkICptKTsKLXVuc2lnbmVkIGludCBrc2l6ZShjb25zdCB2b2lkICptKTsKLXVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKmMpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmtjYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKLXsKLQlyZXR1cm4gX19remFsbG9jKG4gKiBzaXplLCBmbGFncyk7Ci19Ci0KLSNkZWZpbmUga21lbV9jYWNoZV9zaHJpbmsoZCkgKDApCi0jZGVmaW5lIGttZW1fY2FjaGVfcmVhcChhKQotI2RlZmluZSBrbWVtX3B0cl92YWxpZGF0ZShhLCBiKSAoMCkKLSNkZWZpbmUga21lbV9jYWNoZV9hbGxvY19ub2RlKGMsIGYsIG4pIGttZW1fY2FjaGVfYWxsb2MoYywgZikKLSNkZWZpbmUga21hbGxvY19ub2RlKHMsIGYsIG4pIGttYWxsb2MocywgZikKLSNkZWZpbmUga3phbGxvYyhzLCBmKSBfX2t6YWxsb2MocywgZikKLSNkZWZpbmUga21hbGxvY190cmFja19jYWxsZXIga21hbGxvYwotCi0jZGVmaW5lIGttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIga21hbGxvY19ub2RlCi0KLSNlbmRpZiAvKiBDT05GSUdfU0xPQiAqLworI2VuZGlmIC8qIERFQlVHX1NMQUIgKi8KIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KLQogI2VuZGlmCS8qIF9MSU5VWF9TTEFCX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oIGIvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNDYzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmgKQEAgLTAsMCArMSwxMDAgQEAKKyNpZm5kZWYgX0xJTlVYX1NMQUJfREVGX0gKKyNkZWZpbmUJX0xJTlVYX1NMQUJfREVGX0gKKworLyoKKyAqIERlZmluaXRpb25zIHVuaXF1ZSB0byB0aGUgb3JpZ2luYWwgTGludXggU0xBQiBhbGxvY2F0b3IuCisgKgorICogV2hhdCB3ZSBwcm92aWRlIGhlcmUgaXMgYSB3YXkgdG8gb3B0aW1pemUgdGhlIGZyZXF1ZW50IGttYWxsb2MKKyAqIGNhbGxzIGluIHRoZSBrZXJuZWwgYnkgc2VsZWN0aW5nIHRoZSBhcHByb3ByaWF0ZSBnZW5lcmFsIGNhY2hlCisgKiBpZiBrbWFsbG9jIHdhcyBjYWxsZWQgd2l0aCBhIHNpemUgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgYXQKKyAqIGNvbXBpbGUgdGltZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CQkvKiBrbWFsbG9jX3NpemVzLmggbmVlZHMgUEFHRV9TSVpFICovCisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CQkvKiBrbWFsbG9jX3NpemVzLmggbmVlZHMgTDFfQ0FDSEVfQllURVMgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisvKiBTaXplIGRlc2NyaXB0aW9uIHN0cnVjdCBmb3IgZ2VuZXJhbCBjYWNoZXMuICovCitzdHJ1Y3QgY2FjaGVfc2l6ZXMgeworCXNpemVfdAkJIAljc19zaXplOworCXN0cnVjdCBrbWVtX2NhY2hlCSpjc19jYWNoZXA7CisJc3RydWN0IGttZW1fY2FjaGUJKmNzX2RtYWNhY2hlcDsKK307CitleHRlcm4gc3RydWN0IGNhY2hlX3NpemVzIG1hbGxvY19zaXplc1tdOworCitzdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQoreworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkgeworCQlpbnQgaSA9IDA7CisjZGVmaW5lIENBQ0hFKHgpIFwKKwkJaWYgKHNpemUgPD0geCkgXAorCQkJZ290byBmb3VuZDsgXAorCQllbHNlIFwKKwkJCWkrKzsKKyNpbmNsdWRlICJrbWFsbG9jX3NpemVzLmgiCisjdW5kZWYgQ0FDSEUKKwkJeworCQkJZXh0ZXJuIHZvaWQgX195b3VfY2Fubm90X2ttYWxsb2NfdGhhdF9tdWNoKHZvaWQpOworCQkJX195b3VfY2Fubm90X2ttYWxsb2NfdGhhdF9tdWNoKCk7CisJCX0KK2ZvdW5kOgorCQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYygoZmxhZ3MgJiBHRlBfRE1BKSA/CisJCQltYWxsb2Nfc2l6ZXNbaV0uY3NfZG1hY2FjaGVwIDoKKwkJCW1hbGxvY19zaXplc1tpXS5jc19jYWNoZXAsIGZsYWdzKTsKKwl9CisJcmV0dXJuIF9fa21hbGxvYyhzaXplLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqa3phbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKSB7CisJCWludCBpID0gMDsKKyNkZWZpbmUgQ0FDSEUoeCkgXAorCQlpZiAoc2l6ZSA8PSB4KSBcCisJCQlnb3RvIGZvdW5kOyBcCisJCWVsc2UgXAorCQkJaSsrOworI2luY2x1ZGUgImttYWxsb2Nfc2l6ZXMuaCIKKyN1bmRlZiBDQUNIRQorCQl7CisJCQlleHRlcm4gdm9pZCBfX3lvdV9jYW5ub3Rfa3phbGxvY190aGF0X211Y2godm9pZCk7CisJCQlfX3lvdV9jYW5ub3Rfa3phbGxvY190aGF0X211Y2goKTsKKwkJfQorZm91bmQ6CisJCXJldHVybiBrbWVtX2NhY2hlX3phbGxvYygoZmxhZ3MgJiBHRlBfRE1BKSA/CisJCQltYWxsb2Nfc2l6ZXNbaV0uY3NfZG1hY2FjaGVwIDoKKwkJCW1hbGxvY19zaXplc1tpXS5jc19jYWNoZXAsIGZsYWdzKTsKKwl9CisJcmV0dXJuIF9fa3phbGxvYyhzaXplLCBmbGFncyk7Cit9CisKKyNpZmRlZiBDT05GSUdfTlVNQQorZXh0ZXJuIHZvaWQgKl9fa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQoreworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkgeworCQlpbnQgaSA9IDA7CisjZGVmaW5lIENBQ0hFKHgpIFwKKwkJaWYgKHNpemUgPD0geCkgXAorCQkJZ290byBmb3VuZDsgXAorCQllbHNlIFwKKwkJCWkrKzsKKyNpbmNsdWRlICJrbWFsbG9jX3NpemVzLmgiCisjdW5kZWYgQ0FDSEUKKwkJeworCQkJZXh0ZXJuIHZvaWQgX195b3VfY2Fubm90X2ttYWxsb2NfdGhhdF9tdWNoKHZvaWQpOworCQkJX195b3VfY2Fubm90X2ttYWxsb2NfdGhhdF9tdWNoKCk7CisJCX0KK2ZvdW5kOgorCQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvY19ub2RlKChmbGFncyAmIEdGUF9ETUEpID8KKwkJCW1hbGxvY19zaXplc1tpXS5jc19kbWFjYWNoZXAgOgorCQkJbWFsbG9jX3NpemVzW2ldLmNzX2NhY2hlcCwgZmxhZ3MsIG5vZGUpOworCX0KKwlyZXR1cm4gX19rbWFsbG9jX25vZGUoc2l6ZSwgZmxhZ3MsIG5vZGUpOworfQorCisjZW5kaWYJLyogQ09ORklHX05VTUEgKi8KKworI2VuZGlmCS8qIF9MSU5VWF9TTEFCX0RFRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIGIvaW5jbHVkZS9saW51eC9zbWJfZnNfc2IuaAppbmRleCA1YjRhZTJjLi4zYWE5N2FhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc21iX2ZzX3NiLmgKQEAgLTU1LDcgKzU1LDcgQEAKIAkgKiBnZW5lcmF0aW9uIGlzIGluY3JlbWVudGVkLgogCSAqLwogCXVuc2lnbmVkIGludCBnZW5lcmF0aW9uOwotCXBpZF90IGNvbm5fcGlkOworCXN0cnVjdCBwaWQgKmNvbm5fcGlkOwogCXN0cnVjdCBzbWJfY29ubl9vcHQgb3B0OwogCXdhaXRfcXVldWVfaGVhZF90IGNvbm5fd3E7CiAJaW50IGNvbm5fY29tcGxldGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oCmluZGV4IGM4YmI2ODAuLjE3NmY2ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oCkBAIC0yODksNyArMjg5LDcgQEAKICAqIHRoZSBkYXRhIGJlaW5nIHRyYW5zZmVycmVkOyB0aGF0IG1heSByZWR1Y2Ugb3ZlcmhlYWQsIHdoZW4gdGhlCiAgKiB1bmRlcmx5aW5nIGRyaXZlciB1c2VzIGRtYS4KICAqCi0gKiBJZiB0aGUgdHJhbnNtaXQgYnVmZmVyIGlzIG51bGwsIHVuZGVmaW5lZCBkYXRhIHdpbGwgYmUgc2hpZnRlZCBvdXQKKyAqIElmIHRoZSB0cmFuc21pdCBidWZmZXIgaXMgbnVsbCwgemVyb2VzIHdpbGwgYmUgc2hpZnRlZCBvdXQKICAqIHdoaWxlIGZpbGxpbmcgcnhfYnVmLiAgSWYgdGhlIHJlY2VpdmUgYnVmZmVyIGlzIG51bGwsIHRoZSBkYXRhCiAgKiBzaGlmdGVkIGluIHdpbGwgYmUgZGlzY2FyZGVkLiAgT25seSAibGVuIiBieXRlcyBzaGlmdCBvdXQgKG9yIGluKS4KICAqIEl0J3MgYW4gZXJyb3IgdG8gdHJ5IHRvIHNoaWZ0IG91dCBhIHBhcnRpYWwgd29yZC4gIChGb3IgZXhhbXBsZSwgYnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RhbGxpb24uaCBiL2luY2x1ZGUvbGludXgvc3RhbGxpb24uaAppbmRleCAxM2EzN2YxLi40YTBhMzI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0YWxsaW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdGFsbGlvbi5oCkBAIC01MiwxMSArNTIsMTEgQEAKICAqCXByb3RlY3Rpb24gLSBzaW5jZSAid3JpdGUiIGNvZGUgb25seSBuZWVkcyB0byBjaGFuZ2UgdGhlIGhlYWQsIGFuZAogICoJaW50ZXJydXB0IGNvZGUgb25seSBuZWVkcyB0byBjaGFuZ2UgdGhlIHRhaWwuCiAgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBzdGxycSB7CiAJY2hhcgkqYnVmOwogCWNoYXIJKmhlYWQ7CiAJY2hhcgkqdGFpbDsKLX0gc3RscnFfdDsKK307CiAKIC8qCiAgKglQb3J0LCBwYW5lbCBhbmQgYm9hcmQgc3RydWN0dXJlcyB0byBob2xkIHN0YXR1cyBpbmZvIGFib3V0IGVhY2guCkBAIC02NywxNCArNjcsMTQgQEAKICAqCWlzIGFzc29jaWF0ZWQgd2l0aCwgdGhpcyBtYWtlcyBpdCAoZmFpcmx5KSBlYXN5IHRvIGdldCBiYWNrIHRvIHRoZQogICoJYm9hcmQvcGFuZWwgaW5mbyBmb3IgYSBwb3J0LgogICovCi10eXBlZGVmIHN0cnVjdCBzdGxwb3J0IHsKK3N0cnVjdCBzdGxwb3J0IHsKIAl1bnNpZ25lZCBsb25nCQltYWdpYzsKLQlpbnQJCQlwb3J0bnI7Ci0JaW50CQkJcGFuZWxucjsKLQlpbnQJCQlicmRucjsKKwl1bnNpZ25lZCBpbnQJCXBvcnRucjsKKwl1bnNpZ25lZCBpbnQJCXBhbmVsbnI7CisJdW5zaWduZWQgaW50CQlicmRucjsKIAlpbnQJCQlpb2FkZHI7CiAJaW50CQkJdWFydGFkZHI7Ci0JaW50CQkJcGFnZW5yOworCXVuc2lnbmVkIGludAkJcGFnZW5yOwogCWxvbmcJCQlpc3RhdGU7CiAJaW50CQkJZmxhZ3M7CiAJaW50CQkJYmF1ZF9iYXNlOwpAQCAtOTcsMzEgKzk3LDMxIEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJY2xvc2Vfd2FpdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHF1ZXVlOwogCWNvbXN0YXRzX3QJCXN0YXRzOwotCXN0bHJxX3QJCQl0eDsKLX0gc3RscG9ydF90OworCXN0cnVjdCBzdGxycQkJdHg7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBzdGxwYW5lbCB7CitzdHJ1Y3Qgc3RscGFuZWwgewogCXVuc2lnbmVkIGxvbmcJbWFnaWM7Ci0JaW50CQlwYW5lbG5yOwotCWludAkJYnJkbnI7Ci0JaW50CQlwYWdlbnI7Ci0JaW50CQlucnBvcnRzOworCXVuc2lnbmVkIGludAlwYW5lbG5yOworCXVuc2lnbmVkIGludAlicmRucjsKKwl1bnNpZ25lZCBpbnQJcGFnZW5yOworCXVuc2lnbmVkIGludAlucnBvcnRzOwogCWludAkJaW9iYXNlOwogCXZvaWQJCSp1YXJ0cDsKIAl2b2lkCQkoKmlzcikoc3RydWN0IHN0bHBhbmVsICpwYW5lbHAsIHVuc2lnbmVkIGludCBpb2Jhc2UpOwogCXVuc2lnbmVkIGludAlod2lkOwogCXVuc2lnbmVkIGludAlhY2ttYXNrOwotCXN0bHBvcnRfdAkqcG9ydHNbU1RMX1BPUlRTUEVSUEFORUxdOwotfSBzdGxwYW5lbF90OworCXN0cnVjdCBzdGxwb3J0CSpwb3J0c1tTVExfUE9SVFNQRVJQQU5FTF07Cit9OwogCi10eXBlZGVmIHN0cnVjdCBzdGxicmQgeworc3RydWN0IHN0bGJyZCB7CiAJdW5zaWduZWQgbG9uZwltYWdpYzsKLQlpbnQJCWJyZG5yOwotCWludAkJYnJkdHlwZTsKLQlpbnQJCXN0YXRlOwotCWludAkJbnJwYW5lbHM7Ci0JaW50CQlucnBvcnRzOwotCWludAkJbnJibmtzOworCXVuc2lnbmVkIGludAlicmRucjsKKwl1bnNpZ25lZCBpbnQJYnJkdHlwZTsKKwl1bnNpZ25lZCBpbnQJc3RhdGU7CisJdW5zaWduZWQgaW50CW5ycGFuZWxzOworCXVuc2lnbmVkIGludAlucnBvcnRzOworCXVuc2lnbmVkIGludAlucmJua3M7CiAJaW50CQlpcnE7CiAJaW50CQlpcnF0eXBlOwogCWludAkJKCppc3IpKHN0cnVjdCBzdGxicmQgKmJyZHApOwpAQCAtMTM2LDkgKzEzNiw5IEBACiAJdW5zaWduZWQgbG9uZwljbGs7CiAJdW5zaWduZWQgaW50CWJua3BhZ2VhZGRyW1NUTF9NQVhCQU5LU107CiAJdW5zaWduZWQgaW50CWJua3N0YXRhZGRyW1NUTF9NQVhCQU5LU107Ci0Jc3RscGFuZWxfdAkqYm5rMnBhbmVsW1NUTF9NQVhCQU5LU107Ci0Jc3RscGFuZWxfdAkqcGFuZWxzW1NUTF9NQVhQQU5FTFNdOwotfSBzdGxicmRfdDsKKwlzdHJ1Y3Qgc3RscGFuZWwJKmJuazJwYW5lbFtTVExfTUFYQkFOS1NdOworCXN0cnVjdCBzdGxwYW5lbAkqcGFuZWxzW1NUTF9NQVhQQU5FTFNdOworfTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKaW5kZXggOTdjNzYxNi4uOGI2Y2U2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCkBAIC0yNTAsNyArMjUwLDYgQEAKIAkJCQlpbnQgZmxhZ3MsIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKm9wcywKIAkJCQl2b2lkICpkYXRhKTsKIHZvaWQJCXJwY19wdXRfdGFzayhzdHJ1Y3QgcnBjX3Rhc2sgKik7Ci12b2lkCQlycGNfcmVsZWFzZV90YXNrKHN0cnVjdCBycGNfdGFzayAqKTsKIHZvaWQJCXJwY19leGl0X3Rhc2soc3RydWN0IHJwY190YXNrICopOwogdm9pZAkJcnBjX3JlbGVhc2VfY2FsbGRhdGEoY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyAqLCB2b2lkICopOwogdm9pZAkJcnBjX2tpbGxhbGxfdGFza3Moc3RydWN0IHJwY19jbG50ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaAppbmRleCA5NjVkNmMyLi42NGYzZDYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaApAQCAtMTQ0LDggKzE0NCwxMSBAQAogICoKICAqIEVhY2ggcmVxdWVzdC9yZXBseSBwYWlyIGNhbiBoYXZlIGF0IG1vc3Qgb25lICJwYXlsb2FkIiwgcGx1cyB0d28gcGFnZXMsCiAgKiBvbmUgZm9yIHRoZSByZXF1ZXN0LCBhbmQgb25lIGZvciB0aGUgcmVwbHkuCisgKiBXZSB1c2luZyAtPnNlbmRmaWxlIHRvIHJldHVybiByZWFkIGRhdGEsIHdlIG1pZ2h0IG5lZWQgb25lIGV4dHJhIHBhZ2UKKyAqIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBwYWdlLWFsaWduZWQuICBTbyBhZGQgYW5vdGhlciAnMScuCiAgKi8KLSNkZWZpbmUgUlBDU1ZDX01BWFBBR0VTCQkoKFJQQ1NWQ19NQVhQQVlMT0FEK1BBR0VfU0laRS0xKS9QQUdFX1NJWkUgKyAyKQorI2RlZmluZSBSUENTVkNfTUFYUEFHRVMJCSgoUlBDU1ZDX01BWFBBWUxPQUQrUEFHRV9TSVpFLTEpL1BBR0VfU0laRSBcCisJCQkJKyAyICsgMSkKIAogc3RhdGljIGlubGluZSB1MzIgc3ZjX2dldG5sKHN0cnVjdCBrdmVjICppb3YpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IGFkZDUxY2UuLjU0MjM1NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0yNDUsNyArMjQ1LDcgQEAKIGV4dGVybiBpbnQgdmFsaWRfc3dhcGhhbmRsZXMoc3dwX2VudHJ5X3QsIHVuc2lnbmVkIGxvbmcgKik7CiBleHRlcm4gdm9pZCBzd2FwX2ZyZWUoc3dwX2VudHJ5X3QpOwogZXh0ZXJuIHZvaWQgZnJlZV9zd2FwX2FuZF9jYWNoZShzd3BfZW50cnlfdCk7Ci1leHRlcm4gaW50IHN3YXBfdHlwZV9vZihkZXZfdCwgc2VjdG9yX3QpOworZXh0ZXJuIGludCBzd2FwX3R5cGVfb2YoZGV2X3QsIHNlY3Rvcl90LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICoqKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgY291bnRfc3dhcF9wYWdlcyhpbnQsIGludCk7CiBleHRlcm4gc2VjdG9yX3QgbWFwX3N3YXBfcGFnZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqLCBwZ29mZl90KTsKIGV4dGVybiBzZWN0b3JfdCBzd2FwZGV2X2Jsb2NrKGludCwgcGdvZmZfdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCA5NDMxNmE5Li44MTQ4MGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTExLDcgKzExLDcgQEAKICAqKiAgdGhlIHN5c2N0bCgpIGJpbmFyeSBpbnRlcmZhY2UuICBEbyAqTk9UKiBjaGFuZ2UgdGhlCiAgKiogIG51bWJlcmluZyBvZiBhbnkgZXhpc3RpbmcgdmFsdWVzIGhlcmUsIGFuZCBkbyBub3QgY2hhbmdlCiAgKiogIGFueSBudW1iZXJzIHdpdGhpbiBhbnkgb25lIHNldCBvZiB2YWx1ZXMuICBJZiB5b3UgaGF2ZSB0bwotICoqICBoYXZlIHRvIHJlZGVmaW5lIGFuIGV4aXN0aW5nIGludGVyZmFjZSwgdXNlIGEgbmV3IG51bWJlciBmb3IgaXQuCisgKiogIHJlZGVmaW5lIGFuIGV4aXN0aW5nIGludGVyZmFjZSwgdXNlIGEgbmV3IG51bWJlciBmb3IgaXQuCiAgKiogIFRoZSBrZXJuZWwgd2lsbCB0aGVuIHJldHVybiAtRU5PVERJUiB0byBhbnkgYXBwbGljYXRpb24gdXNpbmcKICAqKiAgdGhlIG9sZCBiaW5hcnkgaW50ZXJmYWNlLgogICoqCkBAIC05MTgsOCArOTE4LDcgQEAKIAogdHlwZWRlZiBpbnQgY3RsX2hhbmRsZXIgKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQkJIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCi0JCQkgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwgCi0JCQkgdm9pZCAqKmNvbnRleHQpOworCQkJIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pOwogCiB0eXBlZGVmIGludCBwcm9jX2hhbmRsZXIgKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICogZmlscCwKIAkJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOwpAQCAtOTUwLDcgKzk0OSw3IEBACiBleHRlcm4gaW50IGRvX3N5c2N0bF9zdHJhdGVneSAoY3RsX3RhYmxlICp0YWJsZSwgCiAJCQkgICAgICAgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCQkgICAgICAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKLQkJCSAgICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqIGNvbnRleHQpOworCQkJICAgICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pOwogCiBleHRlcm4gY3RsX2hhbmRsZXIgc3lzY3RsX3N0cmluZzsKIGV4dGVybiBjdGxfaGFuZGxlciBzeXNjdGxfaW50dmVjOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNycS5oIGIvaW5jbHVkZS9saW51eC9zeXNycS5oCmluZGV4IDlkZjg4MzMuLjk4YTFkOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKQEAgLTM3LDIzICszNywzNyBAQAogCiAjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCiAKK2V4dGVybiBpbnQgc3lzcnFfb24odm9pZCk7CisKKy8qCisgKiBEbyBub3QgdXNlIHRoaXMgb25lIGRpcmVjdGx5OgorICovCitleHRlcm4gaW50IF9fc3lzcnFfZW5hYmxlZDsKKwogLyogR2VuZXJpYyBTeXNScSBpbnRlcmZhY2UgLS0geW91IG1heSBjYWxsIGl0IGZyb20gYW55IGRldmljZSBkcml2ZXIsIHN1cHBseWluZwogICogQVNDSUkgY29kZSBvZiB0aGUga2V5LCBwb2ludGVyIHRvIHJlZ2lzdGVycyBhbmQga2JkL3R0eSBzdHJ1Y3RzIChpZiB0aGV5CiAgKiBhcmUgYXZhaWxhYmxlIC0tIGVsc2UgTlVMTCdzKS4KICAqLwogCi12b2lkIGhhbmRsZV9zeXNycShpbnQsIHN0cnVjdCB0dHlfc3RydWN0ICopOwotdm9pZCBfX2hhbmRsZV9zeXNycShpbnQsIHN0cnVjdCB0dHlfc3RydWN0ICosIGludCBjaGVja19tYXNrKTsKLWludCByZWdpc3Rlcl9zeXNycV9rZXkoaW50LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICopOwotaW50IHVucmVnaXN0ZXJfc3lzcnFfa2V5KGludCwgc3RydWN0IHN5c3JxX2tleV9vcCAqKTsKK3ZvaWQgaGFuZGxlX3N5c3JxKGludCBrZXksIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwordm9pZCBfX2hhbmRsZV9zeXNycShpbnQga2V5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgY2hlY2tfbWFzayk7CitpbnQgcmVnaXN0ZXJfc3lzcnFfa2V5KGludCBrZXksIHN0cnVjdCBzeXNycV9rZXlfb3AgKm9wKTsKK2ludCB1bnJlZ2lzdGVyX3N5c3JxX2tleShpbnQga2V5LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpvcCk7CiBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpfX3N5c3JxX2dldF9rZXlfb3AoaW50IGtleSk7CiAKICNlbHNlCiAKK3N0YXRpYyBpbmxpbmUgaW50IHN5c3JxX29uKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CiBzdGF0aWMgaW5saW5lIGludCBfX3JldGVycih2b2lkKQogewogCXJldHVybiAtRUlOVkFMOwogfQorc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9zeXNycShpbnQga2V5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworfQogCiAjZGVmaW5lIHJlZ2lzdGVyX3N5c3JxX2tleShpZyxub3JlKSBfX3JldGVycigpCiAjZGVmaW5lIHVucmVnaXN0ZXJfc3lzcnFfa2V5KGlnLG5vcmUpIF9fcmV0ZXJyKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGFza19pb19hY2NvdW50aW5nLmggYi9pbmNsdWRlL2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZDAwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiB0YXNrX2lvX2FjY291bnRpbmc6IGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIHJlY29yZGluZyBhIHNpbmdsZSB0YXNrJ3MKKyAqIElPIHN0YXRpc3RpY3MuCisgKgorICogRG9uJ3QgaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlIGRpcmVjdGx5IC0gaXQgaXMgZGVzaWduZWQgdG8gYmUgZHJhZ2dlZCBpbiB2aWEKKyAqIHNjaGVkLmguCisgKgorICogQmxhbWUgYWtwbUBvc2RsLm9yZyBmb3IgYWxsIHRoaXMuCisgKi8KKworI2lmZGVmIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkcKK3N0cnVjdCB0YXNrX2lvX2FjY291bnRpbmcgeworCS8qCisJICogVGhlIG51bWJlciBvZiBieXRlcyB3aGljaCB0aGlzIHRhc2sgaGFzIGNhdXNlZCB0byBiZSByZWFkIGZyb20KKwkgKiBzdG9yYWdlLgorCSAqLworCXU2NCByZWFkX2J5dGVzOworCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIHRoaXMgdGFzayBoYXMgY2F1c2VkLCBvciBzaGFsbCBjYXVzZSB0byBiZQorCSAqIHdyaXR0ZW4gdG8gZGlzay4KKwkgKi8KKwl1NjQgd3JpdGVfYnl0ZXM7CisKKwkvKgorCSAqIEEgdGFzayBjYW4gY2F1c2UgIm5lZ2F0aXZlIiBJTyB0b28uICBJZiB0aGlzIHRhc2sgdHJ1bmNhdGVzIHNvbWUKKwkgKiBkaXJ0eSBwYWdlY2FjaGUsIHNvbWUgSU8gd2hpY2ggYW5vdGhlciB0YXNrIGhhcyBiZWVuIGFjY291bnRlZCBmb3IKKwkgKiAoaW4gaXRzIHdyaXRlX2J5dGVzKSB3aWxsIG5vdCBiZSBoYXBwZW5pbmcuICBXZSBfY291bGRfIGp1c3QKKwkgKiBzdWJ0cmFjdCB0aGF0IGZyb20gdGhlIHRydW5jYXRpbmcgdGFzaydzIHdyaXRlX2J5dGVzLCBidXQgdGhlcmUgaXMKKwkgKiBpbmZvcm1hdGlvbiBsb3NzIGluIGRvaW5nIHRoYXQuCisJICovCisJdTY0IGNhbmNlbGxlZF93cml0ZV9ieXRlczsKK307CisjZWxzZQorc3RydWN0IHRhc2tfaW9fYWNjb3VudGluZyB7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaCBiL2luY2x1ZGUvbGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMmEzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogVGFzayBJL08gYWNjb3VudGluZyBvcGVyYXRpb25zCisgKi8KKyNpZm5kZWYgX19UQVNLX0lPX0FDQ09VTlRJTkdfT1BTX0lOQ0xVREVECisjZGVmaW5lIF9fVEFTS19JT19BQ0NPVU5USU5HX09QU19JTkNMVURFRAorCisjaWZkZWYgQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORworc3RhdGljIGlubGluZSB2b2lkIHRhc2tfaW9fYWNjb3VudF9yZWFkKHNpemVfdCBieXRlcykKK3sKKwljdXJyZW50LT5pb2FjLnJlYWRfYnl0ZXMgKz0gYnl0ZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lvX2FjY291bnRfd3JpdGUoc2l6ZV90IGJ5dGVzKQoreworCWN1cnJlbnQtPmlvYWMud3JpdGVfYnl0ZXMgKz0gYnl0ZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lvX2FjY291bnRfY2FuY2VsbGVkX3dyaXRlKHNpemVfdCBieXRlcykKK3sKKwljdXJyZW50LT5pb2FjLmNhbmNlbGxlZF93cml0ZV9ieXRlcyArPSBieXRlczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRhc2tfaW9fYWNjb3VudGluZ19pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCW1lbXNldCgmdHNrLT5pb2FjLCAwLCBzaXplb2YodHNrLT5pb2FjKSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lvX2FjY291bnRfcmVhZChzaXplX3QgYnl0ZXMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lvX2FjY291bnRfd3JpdGUoc2l6ZV90IGJ5dGVzKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19pb19hY2NvdW50X2NhbmNlbGxlZF93cml0ZShzaXplX3QgYnl0ZXMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2lvX2FjY291bnRpbmdfaW5pdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworI2VuZGlmCQkvKiBDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HICovCisjZW5kaWYJCS8qIF9fVEFTS19JT19BQ0NPVU5USU5HX09QU19JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90YXNrc3RhdHMuaCBiL2luY2x1ZGUvbGludXgvdGFza3N0YXRzLmgKaW5kZXggNDUyNDg4MC4uM2ZjZWQ0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90YXNrc3RhdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Rhc2tzdGF0cy5oCkBAIC0zMSw3ICszMSw3IEBACiAgKi8KIAogCi0jZGVmaW5lIFRBU0tTVEFUU19WRVJTSU9OCTIKKyNkZWZpbmUgVEFTS1NUQVRTX1ZFUlNJT04JMwogI2RlZmluZSBUU19DT01NX0xFTgkJMzIJLyogc2hvdWxkIGJlID49IFRBU0tfQ09NTV9MRU4KIAkJCQkJICogaW4gbGludXgvc2NoZWQuaCAqLwogCkBAIC0xMTUsMzEgKzExNSwzNyBAQAogCV9fdTY0CWFjX21hamZsdDsJCS8qIE1ham9yIFBhZ2UgRmF1bHQgQ291bnQgKi8KIAkvKiBCYXNpYyBBY2NvdW50aW5nIEZpZWxkcyBlbmQgKi8KIAotIAkvKiBFeHRlbmRlZCBhY2NvdW50aW5nIGZpZWxkcyBzdGFydCAqLworCS8qIEV4dGVuZGVkIGFjY291bnRpbmcgZmllbGRzIHN0YXJ0ICovCiAJLyogQWNjdW11bGF0ZWQgUlNTIHVzYWdlIGluIGR1cmF0aW9uIG9mIGEgdGFzaywgaW4gTUJ5dGVzLXVzZWNzLgogCSAqIFRoZSBjdXJyZW50IHJzcyB1c2FnZSBpcyBhZGRlZCB0byB0aGlzIGNvdW50ZXIgZXZlcnkgdGltZQogCSAqIGEgdGljayBpcyBjaGFyZ2VkIHRvIGEgdGFzaydzIHN5c3RlbSB0aW1lLiBTbywgYXQgdGhlIGVuZCB3ZQogCSAqIHdpbGwgaGF2ZSBtZW1vcnkgdXNhZ2UgbXVsdGlwbGllZCBieSBzeXN0ZW0gdGltZS4gVGh1cyBhbgogCSAqIGF2ZXJhZ2UgdXNhZ2UgcGVyIHN5c3RlbSB0aW1lIHVuaXQgY2FuIGJlIGNhbGN1bGF0ZWQuCiAJICovCi0gCV9fdTY0CWNvcmVtZW07CQkvKiBhY2N1bXVsYXRlZCBSU1MgdXNhZ2UgaW4gTUItdXNlYyAqLworCV9fdTY0CWNvcmVtZW07CQkvKiBhY2N1bXVsYXRlZCBSU1MgdXNhZ2UgaW4gTUItdXNlYyAqLwogCS8qIEFjY3VtdWxhdGVkIHZpcnR1YWwgbWVtb3J5IHVzYWdlIGluIGR1cmF0aW9uIG9mIGEgdGFzay4KIAkgKiBTYW1lIGFzIGFjY3RfcnNzX21lbTEgYWJvdmUgZXhjZXB0IHRoYXQgd2Uga2VlcCB0cmFjayBvZiBWTSB1c2FnZS4KIAkgKi8KLSAJX191NjQJdmlydG1lbTsJCS8qIGFjY3VtdWxhdGVkIFZNICB1c2FnZSBpbiBNQi11c2VjICovCisJX191NjQJdmlydG1lbTsJCS8qIGFjY3VtdWxhdGVkIFZNICB1c2FnZSBpbiBNQi11c2VjICovCiAKIAkvKiBIaWdoIHdhdGVybWFyayBvZiBSU1MgYW5kIHZpcnR1YWwgbWVtb3J5IHVzYWdlIGluIGR1cmF0aW9uIG9mCiAJICogYSB0YXNrLCBpbiBLQnl0ZXMuCiAJICovCi0gCV9fdTY0CWhpd2F0ZXJfcnNzOwkJLyogSGlnaC13YXRlcm1hcmsgb2YgUlNTIHVzYWdlLCBpbiBLQiAqLwotIAlfX3U2NAloaXdhdGVyX3ZtOwkJLyogSGlnaC13YXRlciBWTSB1c2FnZSwgaW4gS0IgKi8KKwlfX3U2NAloaXdhdGVyX3JzczsJCS8qIEhpZ2gtd2F0ZXJtYXJrIG9mIFJTUyB1c2FnZSwgaW4gS0IgKi8KKwlfX3U2NAloaXdhdGVyX3ZtOwkJLyogSGlnaC13YXRlciBWTSB1c2FnZSwgaW4gS0IgKi8KIAogCS8qIFRoZSBmb2xsb3dpbmcgZm91ciBmaWVsZHMgYXJlIEkvTyBzdGF0aXN0aWNzIG9mIGEgdGFzay4gKi8KLSAJX191NjQJcmVhZF9jaGFyOwkJLyogYnl0ZXMgcmVhZCAqLwotIAlfX3U2NAl3cml0ZV9jaGFyOwkJLyogYnl0ZXMgd3JpdHRlbiAqLwotIAlfX3U2NAlyZWFkX3N5c2NhbGxzOwkJLyogcmVhZCBzeXNjYWxscyAqLwotIAlfX3U2NAl3cml0ZV9zeXNjYWxsczsJCS8qIHdyaXRlIHN5c2NhbGxzICovCi0gCS8qIEV4dGVuZGVkIGFjY291bnRpbmcgZmllbGRzIGVuZCAqLworCV9fdTY0CXJlYWRfY2hhcjsJCS8qIGJ5dGVzIHJlYWQgKi8KKwlfX3U2NAl3cml0ZV9jaGFyOwkJLyogYnl0ZXMgd3JpdHRlbiAqLworCV9fdTY0CXJlYWRfc3lzY2FsbHM7CQkvKiByZWFkIHN5c2NhbGxzICovCisJX191NjQJd3JpdGVfc3lzY2FsbHM7CQkvKiB3cml0ZSBzeXNjYWxscyAqLworCS8qIEV4dGVuZGVkIGFjY291bnRpbmcgZmllbGRzIGVuZCAqLworCisjZGVmaW5lIFRBU0tTVEFUU19IQVNfSU9fQUNDT1VOVElORworCS8qIFBlci10YXNrIHN0b3JhZ2UgSS9PIGFjY291bnRpbmcgc3RhcnRzICovCisJX191NjQJcmVhZF9ieXRlczsJCS8qIGJ5dGVzIG9mIHJlYWQgSS9PICovCisJX191NjQJd3JpdGVfYnl0ZXM7CQkvKiBieXRlcyBvZiB3cml0ZSBJL08gKi8KKwlfX3U2NAljYW5jZWxsZWRfd3JpdGVfYnl0ZXM7CS8qIGJ5dGVzIG9mIGNhbmNlbGxlZCB3cml0ZSBJL08gKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90ZnJjLmggYi9pbmNsdWRlL2xpbnV4L3RmcmMuaAppbmRleCAzMWE5YjI1Li44YTg0NjJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RmcmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RmcmMuaApAQCAtMzcsMTAgKzM3LDE0IEBACiAgKiAJQHRmcmN0eF9wOgljdXJyZW50IGxvc3MgZXZlbnQgcmF0ZSAoNS40KQogICogCUB0ZnJjdHhfcnRvOgllc3RpbWF0ZSBvZiBSVE8sIGVxdWFscyA0KlJUVCAoNC4zKQogICogCUB0ZnJjdHhfaXBpOglpbnRlci1wYWNrZXQgaW50ZXJ2YWwgKDQuNikKKyAqCisgKiAgTm90ZTogWCBhbmQgWF9yZWN2IGFyZSBib3RoIG1haW50YWluZWQgaW4gdW5pdHMgb2YgNjQgKiBieXRlcy9zZWNvbmQuIFRoaXMKKyAqICAgICAgICBlbmFibGVzIGEgZmluZXIgcmVzb2x1dGlvbiBvZiBzZW5kaW5nIHJhdGVzIGFuZCBhdm9pZHMgcHJvYmxlbXMgd2l0aAorICogICAgICAgIGludGVnZXIgYXJpdGhtZXRpYzsgdTMyIGlzIG5vdCBzdWZmaWNpZW50IGFzIHNjYWxpbmcgY29uc3VtZXMgNiBiaXRzLgogICovCiBzdHJ1Y3QgdGZyY190eF9pbmZvIHsKLQlfX3UzMiB0ZnJjdHhfeDsKLQlfX3UzMiB0ZnJjdHhfeF9yZWN2OworCV9fdTY0IHRmcmN0eF94OworCV9fdTY0IHRmcmN0eF94X3JlY3Y7CiAJX191MzIgdGZyY3R4X3hfY2FsYzsKIAlfX3UzMiB0ZnJjdHhfcnR0OwogCV9fdTMyIHRmcmN0eF9wOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lci5oIGIvaW5jbHVkZS9saW51eC90aW1lci5oCmluZGV4IGM5ODIzMDQuLmZiNWVkYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKQEAgLTQxLDcgKzQxLDcgQEAKIAlpbml0X3RpbWVyKHRpbWVyKTsKIH0KIAotLyoqKgorLyoqCiAgKiB0aW1lcl9wZW5kaW5nIC0gaXMgYSB0aW1lciBwZW5kaW5nPwogICogQHRpbWVyOiB0aGUgdGltZXIgaW4gcXVlc3Rpb24KICAqCkBAIC02Myw3ICs2Myw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG5leHRfdGltZXJfaW50ZXJydXB0KHZvaWQpOwogCi0vKioqCisvKioKICAqIGFkZF90aW1lciAtIHN0YXJ0IGEgdGltZXIKICAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGFkZGVkCiAgKgpAQCAtOTgsNCArOTgsMTAgQEAKIHN0cnVjdCBocnRpbWVyOwogZXh0ZXJuIGludCBpdF9yZWFsX2ZuKHN0cnVjdCBocnRpbWVyICopOwogCit1bnNpZ25lZCBsb25nIF9fcm91bmRfamlmZmllcyh1bnNpZ25lZCBsb25nIGosIGludCBjcHUpOwordW5zaWduZWQgbG9uZyBfX3JvdW5kX2ppZmZpZXNfcmVsYXRpdmUodW5zaWduZWQgbG9uZyBqLCBpbnQgY3B1KTsKK3Vuc2lnbmVkIGxvbmcgcm91bmRfamlmZmllcyh1bnNpZ25lZCBsb25nIGopOwordW5zaWduZWQgbG9uZyByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKHVuc2lnbmVkIGxvbmcgaik7CisKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKaW5kZXggZGE1MDhkMS4uNmM1YTZlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaApAQCAtOTMsNyArOTMsNyBAQAogCS5ncm91cHMJCQk9IE5VTEwsCQkJXAogCS5taW5faW50ZXJ2YWwJCT0gMSwJCQlcCiAJLm1heF9pbnRlcnZhbAkJPSAyLAkJCVwKLQkuYnVzeV9mYWN0b3IJCT0gOCwJCQlcCisJLmJ1c3lfZmFjdG9yCQk9IDY0LAkJCVwKIAkuaW1iYWxhbmNlX3BjdAkJPSAxMTAsCQkJXAogCS5jYWNoZV9uaWNlX3RyaWVzCT0gMCwJCQlcCiAJLnBlcl9jcHVfZ2FpbgkJPSAyNSwJCQlcCkBAIC0xOTQsNyArMTk0LDggQEAKIAkud2FrZV9pZHgJCT0gMCwgLyogdW51c2VkICovCVwKIAkuZm9ya2V4ZWNfaWR4CQk9IDAsIC8qIHVudXNlZCAqLwlcCiAJLnBlcl9jcHVfZ2FpbgkJPSAxMDAsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFLAlcCisJLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAorCQkJCXwgU0RfU0VSSUFMSVpFLAlcCiAJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAogCS5iYWxhbmNlX2ludGVydmFsCT0gNjQsCQkJXAogCS5ucl9iYWxhbmNlX2ZhaWxlZAk9IDAsCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHkuaCBiL2luY2x1ZGUvbGludXgvdHR5LmgKaW5kZXggZjcxN2YwOC4uNjVjYmNmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlpbnQgaW5kZXg7CiAJc3RydWN0IHR0eV9sZGlzYyBsZGlzYzsKIAlzdHJ1Y3QgbXV0ZXggdGVybWlvc19tdXRleDsKLQlzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywgKnRlcm1pb3NfbG9ja2VkOworCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywgKnRlcm1pb3NfbG9ja2VkOwogCWNoYXIgbmFtZVs2NF07CiAJaW50IHBncnA7CiAJaW50IHNlc3Npb247CkBAIC0yNTgsNyArMjU4LDcgQEAKIAogZXh0ZXJuIHZvaWQgdHR5X3dyaXRlX2ZsdXNoKHN0cnVjdCB0dHlfc3RydWN0ICopOwogCi1leHRlcm4gc3RydWN0IHRlcm1pb3MgdHR5X3N0ZF90ZXJtaW9zOworZXh0ZXJuIHN0cnVjdCBrdGVybWlvcyB0dHlfc3RkX3Rlcm1pb3M7CiAKIGV4dGVybiBpbnQga21zZ19yZWRpcmVjdDsKIApAQCAtMjkzLDggKzI5Myw5IEBACiBleHRlcm4gdm9pZCBkb19TQUsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gdm9pZCBkaXNhc3NvY2lhdGVfY3R0eShpbnQgcHJpdik7CiBleHRlcm4gdm9pZCB0dHlfZmxpcF9idWZmZXJfcHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKLWV4dGVybiBpbnQgdHR5X2dldF9iYXVkX3JhdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1leHRlcm4gaW50IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcyk7CitleHRlcm4gc3BlZWRfdCB0dHlfZ2V0X2JhdWRfcmF0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiBzcGVlZF90IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MpOworZXh0ZXJuIHNwZWVkX3QgdHR5X3Rlcm1pb3NfaW5wdXRfYmF1ZF9yYXRlKHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcyk7CiAKIGV4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjICp0dHlfbGRpc2NfcmVmKHN0cnVjdCB0dHlfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgdHR5X2xkaXNjX2RlcmVmKHN0cnVjdCB0dHlfbGRpc2MgKik7CkBAIC0zMDksNiArMzEwLDEyIEBACiBleHRlcm4gaW50IHR0eV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAKK2V4dGVybiBkZXZfdCB0dHlfZGV2bnVtKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIHZvaWQgcHJvY19jbGVhcl90dHkoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKK2V4dGVybiB2b2lkIF9fcHJvY19zZXRfdHR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIHByb2Nfc2V0X3R0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitleHRlcm4gc3RydWN0IHR0eV9zdHJ1Y3QgKmdldF9jdXJyZW50X3R0eSh2b2lkKTsKKwogZXh0ZXJuIHN0cnVjdCBtdXRleCB0dHlfbXV0ZXg7CiAKIC8qIG5fdHR5LmMgKi8KQEAgLTMzNSwxMCArMzQyLDUgQEAKIGV4dGVybiBpbnQgdnRfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCi1zdGF0aWMgaW5saW5lIGRldl90IHR0eV9kZXZudW0oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlyZXR1cm4gTUtERVYodHR5LT5kcml2ZXItPm1ham9yLCB0dHktPmRyaXZlci0+bWlub3Jfc3RhcnQpICsgdHR5LT5pbmRleDsKLX0KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaAppbmRleCA1Yzg0NzNiLi42NTk0ODdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaApAQCAtNTMsNyArNTMsNyBAQAogICoJZGV2aWNlLXNwZWNpZmljIGlvY3RsJ3MuICBJZiB0aGUgaW9jdGwgbnVtYmVyIHBhc3NlZCBpbiBjbWQKICAqIAlpcyBub3QgcmVjb2duaXplZCBieSB0aGUgZHJpdmVyLCBpdCBzaG91bGQgcmV0dXJuIEVOT0lPQ1RMQ01ELgogICogCi0gKiB2b2lkICgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKKyAqIHZvaWQgKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICogb2xkKTsKICAqCiAgKiAJVGhpcyByb3V0aW5lIGFsbG93cyB0aGUgdHR5IGRyaXZlciB0byBiZSBub3RpZmllZCB3aGVuCiAgKiAJZGV2aWNlJ3MgdGVybWlvcyBzZXR0aW5ncyBoYXZlIGNoYW5nZWQuICBOb3RlIHRoYXQgYQpAQCAtMTMyLDcgKzEzMiw3IEBACiAJaW50ICAoKmNoYXJzX2luX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJaW50ICAoKmlvY3RsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0Jdm9pZCAoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CisJdm9pZCAoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpOwogCXZvaWQgKCp0aHJvdHRsZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwogCXZvaWQgKCp1bnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CiAJdm9pZCAoKnN0b3ApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJaW50CW51bTsJCS8qIG51bWJlciBvZiBkZXZpY2VzIGFsbG9jYXRlZCAqLwogCXNob3J0CXR5cGU7CQkvKiB0eXBlIG9mIHR0eSBkcml2ZXIgKi8KIAlzaG9ydAlzdWJ0eXBlOwkvKiBzdWJ0eXBlIG9mIHR0eSBkcml2ZXIgKi8KLQlzdHJ1Y3QgdGVybWlvcyBpbml0X3Rlcm1pb3M7IC8qIEluaXRpYWwgdGVybWlvcyAqLworCXN0cnVjdCBrdGVybWlvcyBpbml0X3Rlcm1pb3M7IC8qIEluaXRpYWwgdGVybWlvcyAqLwogCWludAlmbGFnczsJCS8qIHR0eSBkcml2ZXIgZmxhZ3MgKi8KIAlpbnQJcmVmY291bnQ7CS8qIGZvciBsb2FkYWJsZSB0dHkgZHJpdmVycyAqLwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19lbnRyeTsgLyogL3Byb2MgZnMgZW50cnkgKi8KQEAgLTE3NSw4ICsxNzUsOCBAQAogCSAqIFBvaW50ZXIgdG8gdGhlIHR0eSBkYXRhIHN0cnVjdHVyZXMKIAkgKi8KIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqKnR0eXM7Ci0Jc3RydWN0IHRlcm1pb3MgKip0ZXJtaW9zOwotCXN0cnVjdCB0ZXJtaW9zICoqdGVybWlvc19sb2NrZWQ7CisJc3RydWN0IGt0ZXJtaW9zICoqdGVybWlvczsKKwlzdHJ1Y3Qga3Rlcm1pb3MgKip0ZXJtaW9zX2xvY2tlZDsKIAl2b2lkICpkcml2ZXJfc3RhdGU7CS8qIG9ubHkgdXNlZCBmb3IgdGhlIFBUWSBkcml2ZXIgKi8KIAkKIAkvKgpAQCAtMTkzLDcgKzE5Myw3IEBACiAJaW50ICAoKmNoYXJzX2luX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJaW50ICAoKmlvY3RsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0Jdm9pZCAoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CisJdm9pZCAoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpOwogCXZvaWQgKCp0aHJvdHRsZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwogCXZvaWQgKCp1bnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CiAJdm9pZCAoKnN0b3ApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCBiL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKaW5kZXggODNjNmU2Yy4uZDc1OTMyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCkBAIC01OSw3ICs1OSw3IEBACiAgKiAJbG93LWxldmVsIGRyaXZlciBjYW4gImdyYWIiIGFuIGlvY3RsIHJlcXVlc3QgYmVmb3JlIHRoZSBsaW5lCiAgKiAJZGlzY3BsaW5lIGhhcyBhIGNoYW5jZSB0byBzZWUgaXQuCiAgKiAKLSAqIHZvaWQJKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworICogdm9pZAkoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpOwogICoKICAqIAlUaGlzIGZ1bmN0aW9uIG5vdGlmaWVzIHRoZSBsaW5lIGRpc2NwbGluZSB0aGF0IGEgY2hhbmdlIGhhcwogICogCWJlZW4gbWFkZSB0byB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUuCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmLCBzaXplX3QgbnIpOwkKIAlpbnQJKCppb2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci0Jdm9pZAkoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CisJdm9pZAkoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpOwogCXVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICosCiAJCQkgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqKTsKIAlpbnQJKCpoYW5ndXApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91bndpbmQuaCBiL2luY2x1ZGUvbGludXgvdW53aW5kLmgKaW5kZXggNzQ5OTI4Yy4uNzc2MDg2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91bndpbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Vud2luZC5oCkBAIC0xNCw2MyArMTQsNiBAQAogCiBzdHJ1Y3QgbW9kdWxlOwogCi0jaWZkZWYgQ09ORklHX1NUQUNLX1VOV0lORAotCi0jaW5jbHVkZSA8YXNtL3Vud2luZC5oPgotCi0jaWZuZGVmIEFSQ0hfVU5XSU5EX1NFQ1RJT05fTkFNRQotI2RlZmluZSBBUkNIX1VOV0lORF9TRUNUSU9OX05BTUUgIi5laF9mcmFtZSIKLSNlbmRpZgotCi0vKgotICogSW5pdGlhbGl6ZSB1bndpbmQgc3VwcG9ydC4KLSAqLwotZXh0ZXJuIHZvaWQgdW53aW5kX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCB1bndpbmRfc2V0dXAodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCi1leHRlcm4gdm9pZCAqdW53aW5kX2FkZF90YWJsZShzdHJ1Y3QgbW9kdWxlICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp0YWJsZV9zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGFibGVfc2l6ZSk7Ci0KLWV4dGVybiB2b2lkIHVud2luZF9yZW1vdmVfdGFibGUodm9pZCAqaGFuZGxlLCBpbnQgaW5pdF9vbmx5KTsKLQotI2VuZGlmCi0KLWV4dGVybiBpbnQgdW53aW5kX2luaXRfZnJhbWVfaW5mbyhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmNvbnN0Ki8gc3RydWN0IHB0X3JlZ3MgKik7Ci0KLS8qCi0gKiBQcmVwYXJlIHRvIHVud2luZCBhIGJsb2NrZWQgdGFzay4KLSAqLwotZXh0ZXJuIGludCB1bndpbmRfaW5pdF9ibG9ja2VkKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKLQotLyoKLSAqIFByZXBhcmUgdG8gdW53aW5kIHRoZSBjdXJyZW50bHkgcnVubmluZyB0aHJlYWQuCi0gKi8KLWV4dGVybiBpbnQgdW53aW5kX2luaXRfcnVubmluZyhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc21saW5rYWdlIGludCAoKmNhbGxiYWNrKShzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyk7Ci0KLS8qCi0gKiBVbndpbmQgdG8gcHJldmlvdXMgdG8gZnJhbWUuICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgbmVnYXRpdmUKLSAqIG51bWJlciBpbiBjYXNlIG9mIGFuIGVycm9yLgotICovCi1leHRlcm4gaW50IHVud2luZChzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKik7Ci0KLS8qCi0gKiBVbndpbmQgdW50aWwgdGhlIHJldHVybiBwb2ludGVyIGlzIGluIHVzZXItbGFuZCAob3IgdW50aWwgYW4gZXJyb3IKLSAqIG9jY3VycykuICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgbmVnYXRpdmUgbnVtYmVyIGluIGNhc2Ugb2YKLSAqIGVycm9yLgotICovCi1leHRlcm4gaW50IHVud2luZF90b191c2VyKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqKTsKLQotI2Vsc2UKLQogc3RydWN0IHVud2luZF9mcmFtZV9pbmZvIHt9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW53aW5kX2luaXQodm9pZCkge30KQEAgLTg1LDEyICsyOCwxMiBAQAogCXJldHVybiBOVUxMOwogfQogCi0jZW5kaWYKLQogc3RhdGljIGlubGluZSB2b2lkIHVud2luZF9yZW1vdmVfdGFibGUodm9pZCAqaGFuZGxlLCBpbnQgaW5pdF9vbmx5KQogewogfQogCisjZW5kaWYKKwogc3RhdGljIGlubGluZSBpbnQgdW53aW5kX2luaXRfZnJhbWVfaW5mbyhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTEyMiw2ICs2NSw0IEBACiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLSNlbmRpZgotCiAjZW5kaWYgLyogX0xJTlVYX1VOV0lORF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IDkxYjNlYTIuLjEwZjk5ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlpbnQgICgqd3JpdGUpCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogCWludCAgKCp3cml0ZV9yb29tKQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiAJaW50ICAoKmlvY3RsKQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotCXZvaWQgKCpzZXRfdGVybWlvcykJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKKwl2b2lkICgqc2V0X3Rlcm1pb3MpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpOwogCXZvaWQgKCpicmVha19jdGwpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpOwogCWludCAgKCpjaGFyc19pbl9idWZmZXIpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIAl2b2lkICgqdGhyb3R0bGUpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IGRmNWM0NjUuLmQ5NGUyNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMjQ0LDYgKzI0NCw3IEBACiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZWVVWICAgIHY0bDJfZm91cmNjKCdZJywnWScsJ1UnLCdWJykgLyogMTYgIFlVViA0OjI6MiAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX0hJMjQwICAgdjRsMl9mb3VyY2MoJ0gnLCdJJywnMicsJzQnKSAvKiAgOCAgOC1iaXQgY29sb3IgICAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfSE0xMiAgICB2NGwyX2ZvdXJjYygnSCcsJ00nLCcxJywnMicpIC8qICA4ICBZVVYgNDoyOjAgMTZ4MTYgbWFjcm9ibG9ja3MgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjQ0NCAgdjRsMl9mb3VyY2MoJ1InLCc0JywnNCcsJzQnKSAvKiAxNiAgeHh4eHJycnIgZ2dnZ2JiYmIgKi8KIAogLyogc2VlIGh0dHA6Ly93d3cuc2lsaWNvbmltYWdpbmcuY29tL1JHQiUyMEJheWVyLmh0bSAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1I4ICB2NGwyX2ZvdXJjYygnQicsJ0EnLCc4JywnMScpIC8qICA4ICBCR0JHLi4gR1JHUi4uICovCkBAIC02NjEsNiArNjYyLDE1IEBACiAjZGVmaW5lIFY0TDJfU1REX0FUU0NfOF9WU0IgICAgICgodjRsMl9zdGRfaWQpMHgwMTAwMDAwMCkKICNkZWZpbmUgVjRMMl9TVERfQVRTQ18xNl9WU0IgICAgKCh2NGwyX3N0ZF9pZCkweDAyMDAwMDAwKQogCisvKiBGSVhNRToKKyAgIEFsdGhvdWdoIHN0ZF9pZCBpcyA2NCBiaXRzLCB0aGVyZSBpcyBhbiBpc3N1ZSBvbiBQUEMzMiBhcmNoaXRlY3R1cmUgdGhhdAorICAgbWFrZXMgc3dpdGNoKF9fdTY0KSB0byBicmVhay4gU28sIHRoZXJlJ3MgYSBoYWNrIG9uIHY0bDItY29tbW9uLmMgcm91bmRpbmcKKyAgIHRoaXMgdmFsdWUgdG8gMzIgYml0cy4KKyAgIEFzLCBjdXJyZW50bHksIHRoZSBtYXggdmFsdWUgaXMgZm9yIFY0TDJfU1REX0FUU0NfMTZfVlNCICgzMCBiaXRzIHdpZGUpLAorICAgaXQgc2hvdWxkIHdvcmsgZmluZS4gSG93ZXZlciwgaWYgbmVlZGVkIHRvIGFkZCBtb3JlIHRoYW4gdHdvIHN0YW5kYXJkcywKKyAgIHY0bDItY29tbW9uLmMgc2hvdWxkIGJlIGZpeGVkLgorICovCisKIC8qIHNvbWUgbWVyZ2VkIHN0YW5kYXJkcyAqLwogI2RlZmluZSBWNEwyX1NURF9NTgkoVjRMMl9TVERfUEFMX018VjRMMl9TVERfUEFMX058VjRMMl9TVERfUEFMX05jfFY0TDJfU1REX05UU0MpCiAjZGVmaW5lIFY0TDJfU1REX0IJKFY0TDJfU1REX1BBTF9CfFY0TDJfU1REX1BBTF9CMXxWNEwyX1NURF9TRUNBTV9CKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bXN0YXQuaCBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKaW5kZXggYzg5ZGY1NS4uNWU5ODAzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCkBAIC0xMCw4ICsxMCw5IEBACiAvKgogICogTGlnaHQgd2VpZ2h0IHBlciBjcHUgY291bnRlciBpbXBsZW1lbnRhdGlvbi4KICAqCi0gKiBDb3VudGVycyBzaG91bGQgb25seSBiZSBpbmNyZW1lbnRlZCBhbmQgbm8gY3JpdGljYWwga2VybmVsIGNvbXBvbmVudAotICogc2hvdWxkIHJlbHkgb24gdGhlIGNvdW50ZXIgdmFsdWVzLgorICogQ291bnRlcnMgc2hvdWxkIG9ubHkgYmUgaW5jcmVtZW50ZWQuICBZb3UgbmVlZCB0byBzZXQgRU1CRURERUQKKyAqIHRvIGRpc2FibGUgVk1fRVZFTlRfQ09VTlRFUlMuICBUaGluZ3MgbGlrZSBwcm9jcHMgKHZtc3RhdCwKKyAqIHRvcCwgZXRjKSB1c2UgL3Byb2Mvdm1zdGF0IGFuZCBkZXBlbmQgb24gdGhlc2UgY291bnRlcnMuCiAgKgogICogQ291bnRlcnMgYXJlIGhhbmRsZWQgY29tcGxldGVseSBpbmxpbmUuIE9uIG1hbnkgcGxhdGZvcm1zIHRoZSBjb2RlCiAgKiBnZW5lcmF0ZWQgd2lsbCBzaW1wbHkgYmUgdGhlIGluY3JlbWVudCBvZiBhIGdsb2JhbCBhZGRyZXNzLgpAQCAtNzMsNyArNzQsMTMgQEAKIH0KIAogZXh0ZXJuIHZvaWQgYWxsX3ZtX2V2ZW50cyh1bnNpZ25lZCBsb25nICopOworI2lmZGVmIENPTkZJR19IT1RQTFVHCiBleHRlcm4gdm9pZCB2bV9ldmVudHNfZm9sZF9jcHUoaW50IGNwdSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZtX2V2ZW50c19mb2xkX2NwdShpbnQgY3B1KQoreworfQorI2VuZGlmCiAKICNlbHNlCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IGVkZWY4ZDUuLjJhN2IzOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtOCwxNiArOCwyMSBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3Q7CiAKIHN0cnVjdCB3b3JrX3N0cnVjdDsKIHR5cGVkZWYgdm9pZCAoKndvcmtfZnVuY190KShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCisvKgorICogVGhlIGZpcnN0IHdvcmQgaXMgdGhlIHdvcmsgcXVldWUgcG9pbnRlciBhbmQgdGhlIGZsYWdzIHJvbGxlZCBpbnRvCisgKiBvbmUKKyAqLworI2RlZmluZSB3b3JrX2RhdGFfYml0cyh3b3JrKSAoKHVuc2lnbmVkIGxvbmcgKikoJih3b3JrKS0+ZGF0YSkpCisKIHN0cnVjdCB3b3JrX3N0cnVjdCB7Ci0JLyogdGhlIGZpcnN0IHdvcmQgaXMgdGhlIHdvcmsgcXVldWUgcG9pbnRlciBhbmQgdGhlIGZsYWdzIHJvbGxlZCBpbnRvCi0JICogb25lICovCi0JdW5zaWduZWQgbG9uZyBtYW5hZ2VtZW50OworCWF0b21pY19sb25nX3QgZGF0YTsKICNkZWZpbmUgV09SS19TVFJVQ1RfUEVORElORyAwCQkvKiBUIGlmIHdvcmsgaXRlbSBwZW5kaW5nIGV4ZWN1dGlvbiAqLwogI2RlZmluZSBXT1JLX1NUUlVDVF9OT0FVVE9SRUwgMQkJLyogRiBpZiB3b3JrIGl0ZW0gYXV0b21hdGljYWxseSByZWxlYXNlZCBvbiBleGVjICovCiAjZGVmaW5lIFdPUktfU1RSVUNUX0ZMQUdfTUFTSyAoM1VMKQpAQCAtMjYsNiArMzEsOSBAQAogCXdvcmtfZnVuY190IGZ1bmM7CiB9OwogCisjZGVmaW5lIFdPUktfREFUQV9JTklUKGF1dG9yZWxlYXNlKSBcCisJQVRPTUlDX0xPTkdfSU5JVCgoYXV0b3JlbGVhc2UpIDw8IFdPUktfU1RSVUNUX05PQVVUT1JFTCkKKwogc3RydWN0IGRlbGF5ZWRfd29yayB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CkBAIC0zNiwxMyArNDQsMTMgQEAKIH07CiAKICNkZWZpbmUgX19XT1JLX0lOSVRJQUxJWkVSKG4sIGYpIHsJCQkJXAotCS5tYW5hZ2VtZW50ID0gMCwJCQkJCVwKKwkuZGF0YSA9IFdPUktfREFUQV9JTklUKDApLAkJCQlcCiAgICAgICAgIC5lbnRyeQk9IHsgJihuKS5lbnRyeSwgJihuKS5lbnRyeSB9LAkJCVwKIAkuZnVuYyA9IChmKSwJCQkJCQlcCiAJfQogCiAjZGVmaW5lIF9fV09SS19JTklUSUFMSVpFUl9OQVIobiwgZikgewkJCQlcCi0JLm1hbmFnZW1lbnQgPSAoMSA8PCBXT1JLX1NUUlVDVF9OT0FVVE9SRUwpLAkJXAorCS5kYXRhID0gV09SS19EQVRBX0lOSVQoMSksCQkJCVwKICAgICAgICAgLmVudHJ5CT0geyAmKG4pLmVudHJ5LCAmKG4pLmVudHJ5IH0sCQkJXAogCS5mdW5jID0gKGYpLAkJCQkJCVwKIAl9CkBAIC04MiwxNyArOTAsMjEgQEAKIAogLyoKICAqIGluaXRpYWxpemUgYWxsIG9mIGEgd29yayBpdGVtIGluIG9uZSBnbworICoKKyAqIE5PVEUhIE5vIHBvaW50IGluIHVzaW5nICJhdG9taWNfbG9uZ19zZXQoKSI6IHVzZWluZyBhIGRpcmVjdAorICogYXNzaWdubWVudCBvZiB0aGUgd29yayBkYXRhIGluaXRpYWxpemVyIGFsbG93cyB0aGUgY29tcGlsZXIKKyAqIHRvIGdlbmVyYXRlIGJldHRlciBjb2RlLgogICovCiAjZGVmaW5lIElOSVRfV09SSyhfd29yaywgX2Z1bmMpCQkJCQlcCiAJZG8gewkJCQkJCQlcCi0JCShfd29yayktPm1hbmFnZW1lbnQgPSAwOwkJCVwKKwkJKF93b3JrKS0+ZGF0YSA9IChhdG9taWNfbG9uZ190KSBXT1JLX0RBVEFfSU5JVCgwKTsJXAogCQlJTklUX0xJU1RfSEVBRCgmKF93b3JrKS0+ZW50cnkpOwkJXAogCQlQUkVQQVJFX1dPUksoKF93b3JrKSwgKF9mdW5jKSk7CQkJXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgSU5JVF9XT1JLX05BUihfd29yaywgX2Z1bmMpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQkoX3dvcmspLT5tYW5hZ2VtZW50ID0gKDEgPDwgV09SS19TVFJVQ1RfTk9BVVRPUkVMKTsJXAorCQkoX3dvcmspLT5kYXRhID0gKGF0b21pY19sb25nX3QpIFdPUktfREFUQV9JTklUKDEpOwlcCiAJCUlOSVRfTElTVF9IRUFEKCYoX3dvcmspLT5lbnRyeSk7CQkJXAogCQlQUkVQQVJFX1dPUksoKF93b3JrKSwgKF9mdW5jKSk7CQkJCVwKIAl9IHdoaWxlICgwKQpAQCAtMTE0LDE1ICsxMjYsMTUgQEAKICAqIEB3b3JrOiBUaGUgd29yayBpdGVtIGluIHF1ZXN0aW9uCiAgKi8KICNkZWZpbmUgd29ya19wZW5kaW5nKHdvcmspIFwKLQl0ZXN0X2JpdChXT1JLX1NUUlVDVF9QRU5ESU5HLCAmKHdvcmspLT5tYW5hZ2VtZW50KQorCXRlc3RfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKQogCiAvKioKICAqIGRlbGF5ZWRfd29ya19wZW5kaW5nIC0gRmluZCBvdXQgd2hldGhlciBhIGRlbGF5YWJsZSB3b3JrIGl0ZW0gaXMgY3VycmVudGx5CiAgKiBwZW5kaW5nCiAgKiBAd29yazogVGhlIHdvcmsgaXRlbSBpbiBxdWVzdGlvbgogICovCi0jZGVmaW5lIGRlbGF5ZWRfd29ya19wZW5kaW5nKHdvcmspIFwKLQl0ZXN0X2JpdChXT1JLX1NUUlVDVF9QRU5ESU5HLCAmKHdvcmspLT53b3JrLm1hbmFnZW1lbnQpCisjZGVmaW5lIGRlbGF5ZWRfd29ya19wZW5kaW5nKHcpIFwKKwl3b3JrX3BlbmRpbmcoJih3KS0+d29yaykKIAogLyoqCiAgKiB3b3JrX3JlbGVhc2UgLSBSZWxlYXNlIGEgd29yayBpdGVtIHVuZGVyIGV4ZWN1dGlvbgpAQCAtMTQzLDcgKzE1NSw3IEBACiAgKiBUaGlzIHNob3VsZCBhbHNvIGJlIHVzZWQgdG8gcmVsZWFzZSBhIGRlbGF5ZWQgd29yayBpdGVtLgogICovCiAjZGVmaW5lIHdvcmtfcmVsZWFzZSh3b3JrKSBcCi0JY2xlYXJfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsICYod29yayktPm1hbmFnZW1lbnQpCisJY2xlYXJfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKQogCiAKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqX19jcmVhdGVfd29ya3F1ZXVlKGNvbnN0IGNoYXIgKm5hbWUsCkBAIC0xODgsNyArMjAwLDcgQEAKIAogCXJldCA9IGRlbF90aW1lcl9zeW5jKCZ3b3JrLT50aW1lcik7CiAJaWYgKHJldCkKLQkJY2xlYXJfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsICZ3b3JrLT53b3JrLm1hbmFnZW1lbnQpOworCQl3b3JrX3JlbGVhc2UoJndvcmstPndvcmspOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgveGZybS5oIGIvaW5jbHVkZS9saW51eC94ZnJtLmgKaW5kZXggMDg4YmE4MS4uOTUyOWVhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC94ZnJtLmgKKysrIGIvaW5jbHVkZS9saW51eC94ZnJtLmgKQEAgLTM1Nyw3ICszNTcsNyBAQAogI2RlZmluZSBYRlJNR1JQX0VYUElSRQkJMgogI2RlZmluZSBYRlJNR1JQX1NBCQk0CiAjZGVmaW5lIFhGUk1HUlBfUE9MSUNZCQk4Ci0jZGVmaW5lIFhGUk1HUlBfUkVQT1JUCQkweDEwCisjZGVmaW5lIFhGUk1HUlBfUkVQT1JUCQkweDIwCiAjZW5kaWYKIAogZW51bSB4ZnJtX25sZ3JvdXBzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvY3gyMzQxeC5oIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKaW5kZXggZDkxZDg4Zi4uZWNhZDU1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKQEAgLTQ5LDcgKzQ5LDcgQEAKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbiBhdWRpb19tb2RlX2V4dGVuc2lvbjsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19lbXBoYXNpcyBhdWRpb19lbXBoYXNpczsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19jcmMgYXVkaW9fY3JjOwotCXU4IGF1ZGlvX3Byb3BlcnRpZXM7CisJdTE2IGF1ZGlvX3Byb3BlcnRpZXM7CiAKIAkvKiB2aWRlbyAqLwogCWVudW0gdjRsMl9tcGVnX3ZpZGVvX2VuY29kaW5nIHZpZGVvX2VuY29kaW5nOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggOGY1ODQwNi4uNGJiMGFkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIF9JUl9DT01NT04KIAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNkZWZpbmUgSVJfVFlQRV9SQzUgICAgIDEKICNkZWZpbmUgSVJfVFlQRV9QRCAgICAgIDIgLyogUHVsc2UgZGlzdGFuY2UgZW5jb2RlZCBJUiAqLwpAQCAtOTIsNiArOTMsNyBAQAogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX25wZ3RlY2hbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX25vcndvb2RbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3Byb3RldXNfMjMwOVtJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYnVkZ2V0X2NpX29sZFtJUl9LRVlUQUJfU0laRV07CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oCmluZGV4IGZlZTU3OWYuLjc5NmJjZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oCkBAIC00MiwxMCArNDIsNiBAQAogI2RlZmluZSBERUJfSU5UKHgpICBpZiAoMCE9KERFQlVHX1ZBUklBQkxFJjB4MjApKSB7IERFQlVHX1BST0xPRzsgcHJpbnRrIHg7IH0gLyogaW50ZXJydXB0IGRlYnVnIG1lc3NhZ2VzICovCiAjZGVmaW5lIERFQl9DQVAoeCkgIGlmICgwIT0oREVCVUdfVkFSSUFCTEUmMHg0MCkpIHsgREVCVUdfUFJPTE9HOyBwcmludGsgeDsgfSAvKiBjYXB0dXJlIGRlYnVnIG1lc3NhZ2VzICovCiAKLSNkZWZpbmUgU0FBNzE0Nl9JRVJfRElTQUJMRSh4LHkpIFwKLQlzYWE3MTQ2X3dyaXRlKHgsIElFUiwgc2FhNzE0Nl9yZWFkKHgsIElFUikgJiB+KHkpKTsKLSNkZWZpbmUgU0FBNzE0Nl9JRVJfRU5BQkxFKHgseSkgXAotCXNhYTcxNDZfd3JpdGUoeCwgSUVSLCBzYWE3MTQ2X3JlYWQoeCwgSUVSKSB8ICh5KSk7CiAjZGVmaW5lIFNBQTcxNDZfSVNSX0NMRUFSKHgseSkgXAogCXNhYTcxNDZfd3JpdGUoeCwgSVNSLCAoeSkpOwogCkBAIC00NDEsNCArNDM3LDIwIEBACiAjZGVmaW5lIFNBQTcxNDZfSTJDX0JVU19CSVRfUkFURV84MAkoMHgyMDApCiAjZGVmaW5lIFNBQTcxNDZfSTJDX0JVU19CSVRfUkFURV82MAkoMHgzMDApCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBTQUE3MTQ2X0lFUl9ESVNBQkxFKHN0cnVjdCBzYWE3MTQ2X2RldiAqeCwgdW5zaWduZWQgeSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZ4LT5pbnRfc2xvY2ssIGZsYWdzKTsKKwlzYWE3MTQ2X3dyaXRlKHgsIElFUiwgc2FhNzE0Nl9yZWFkKHgsIElFUikgJiB+eSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeC0+aW50X3Nsb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBTQUE3MTQ2X0lFUl9FTkFCTEUoc3RydWN0IHNhYTcxNDZfZGV2ICp4LCB1bnNpZ25lZCB5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJngtPmludF9zbG9jaywgZmxhZ3MpOworCXNhYTcxNDZfd3JpdGUoeCwgSUVSLCBzYWE3MTQ2X3JlYWQoeCwgSUVSKSB8IHkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJngtPmludF9zbG9jaywgZmxhZ3MpOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHVuZXItdHlwZXMuaCBiL2luY2x1ZGUvbWVkaWEvdHVuZXItdHlwZXMuaAppbmRleCAzN2RhZDA3Li5lNWFkM2ZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3R1bmVyLXR5cGVzLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dW5lci10eXBlcy5oCkBAIC01MCw2ICs1MCwxMCBAQAogCSAgIHNlbnNpdGl2aXR5LiBJZiB0aGlzIHNldHRpbmcgaXMgMSwgdGhlbiBzZXQgUE9SVDIgdG8gMSB0bwogCSAgIGdldCBwcm9wZXIgRk0gcmVjZXB0aW9uLiAqLwogCXVuc2lnbmVkIGludCBwb3J0Ml9mbV9oaWdoX3NlbnNpdGl2aXR5OjE7CisJLyogU29tZSBQaGlsaXBzIHR1bmVycyB1c2UgdGRhOTg4NyBjR2Fpbk5vcm1hbCB0byBzZWxlY3QgdGhlIEZNIHJhZGlvCisJICAgc2Vuc2l0aXZpdHkuIElmIHRoaXMgc2V0dGluZyBpcyAxLCBlIHJlZ2lzdGVyIHdpbGwgdXNlIGNHYWluTm9ybWFsCisJICAgaW5zdGVhZCBvZiBjR2Fpbkxvdy4gKi8KKwl1bnNpZ25lZCBpbnQgZm1fZ2Fpbl9ub3JtYWw6MTsKIAkvKiBNb3N0IHR1bmVycyB3aXRoIGEgdGRhOTg4NyB1c2UgUVNTIG1vZGUuIFNvbWUgKGNoZWFwZXIpIHR1bmVycwogCSAgIHVzZSBJbnRlcmNhcnJpZXIgbW9kZS4gSWYgdGhpcyBzZXR0aW5nIGlzIDEsIHRoZW4gdGhlIHR1bmVyCiAJICAgbmVlZHMgdG8gYmUgc2V0IHRvIGludGVyY2FycmllciBtb2RlLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dW5lci5oIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCmluZGV4IDMxMTZlNzUuLjk5YWNmODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAorKysgYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKQEAgLTE0NSw2ICsxNDUsNyBAQAogI2RlZmluZSBUREE5ODg3X0RFRU1QSEFTSVNfNzUgCQkoMzw8MTYpCiAjZGVmaW5lIFREQTk4ODdfQVVUT01VVEUgCQkoMTw8MTgpCiAjZGVmaW5lIFREQTk4ODdfR0FUSU5HXzE4CQkoMTw8MTkpCisjZGVmaW5lIFREQTk4ODdfR0FJTl9OT1JNQUwJCSgxPDwyMCkKIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dmVlcHJvbS5oIGIvaW5jbHVkZS9tZWRpYS90dmVlcHJvbS5oCmluZGV4IGU5ZmMxYTcuLjU2NjBlYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHZlZXByb20uaAorKysgYi9pbmNsdWRlL21lZGlhL3R2ZWVwcm9tLmgKQEAgLTMsNyArMyw3IEBACiAKIHN0cnVjdCB0dmVlcHJvbSB7CiAJdTMyIGhhc19yYWRpbzsKLQl1MzIgaGFzX2lyOyAgICAgLyogMDogbm8gSVIsIDE6IElSIHByZXNlbnQsIDI6IHVua25vd24gKi8KKwl1MzIgaGFzX2lyOyAgICAgLyogYml0IDA6IElSIHJlY2VpdmVyIHByZXNlbnQsIGJpdCAxOiBJUiB0cmFuc21pdHRlciAoYmxhc3RlcikgcHJlc2VudC4gLTEgPT0gdW5rbm93biAqLwogCXUzMiBoYXNfTUFDX2FkZHJlc3M7IC8qIDA6IG5vIE1BQywgMTogTUFDIHByZXNlbnQsIDI6IHVua25vd24gKi8KIAogCXUzMiB0dW5lcl90eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCmluZGV4IGFlY2M5NDYuLjkxYjE5OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKQEAgLTE0NCw2ICsxNDQsOSBAQAogCVY0TDJfSURFTlRfQ1gyNTg0MSA9IDI0MSwKIAlWNEwyX0lERU5UX0NYMjU4NDIgPSAyNDIsCiAJVjRMMl9JREVOVF9DWDI1ODQzID0gMjQzLAorCisJLyogT21uaVZpc2lvbiBzZW5zb3JzIC0gcmFuZ2UgMjUwLTI5OSAqLworCVY0TDJfSURFTlRfT1Y3NjcwID0gMjUwLAogfTsKIAogLyogYXVkaW8gaW9jdGxzICovCkBAIC0yNTEsNCArMjU0LDggQEAKICAgIElmIHRoZSBmcmVxdWVuY3kgaXMgbm90IHN1cHBvcnRlZCwgdGhlbiAtRUlOVkFMIGlzIHJldHVybmVkLiAqLwogI2RlZmluZSBWSURJT0NfSU5UX1NfQ1JZU1RBTF9GUkVRIAlfSU9XICgnZCcsIDExMywgc3RydWN0IHY0bDJfY3J5c3RhbF9mcmVxKQogCisvKiBJbml0aWFsaXplIHRoZSBzZW5zb3IgcmVnaXN0b3JzIHRvIHNvbWUgc29ydCBvZiByZWFzb25hYmxlCisgICBkZWZhdWx0IHZhbHVlcy4gKi8KKyNkZWZpbmUgVklESU9DX0lOVF9JTklUCQkJX0lPVyAoJ2QnLCAxMTQsIHUzMikKKwogI2VuZGlmIC8qIFY0TDJfQ09NTU9OX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKaW5kZXggNmExMWQ3Ny4uZmI5NjQ3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaApAQCAtNDMsNiArNDMsNyBAQAogCiAvKiAgVmlkZW8gc3RhbmRhcmQgZnVuY3Rpb25zICAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCB2NGwyX3ZpZGVvX3N0ZF9mcHMoc3RydWN0IHY0bDJfc3RhbmRhcmQgKnZzKTsKK2V4dGVybiBjaGFyICp2NGwyX25vcm1fdG9fbmFtZSh2NGwyX3N0ZF9pZCBpZCk7CiBleHRlcm4gaW50IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqdnMsCiAJCQkJICAgIGludCBpZCwgY2hhciAqbmFtZSk7CiAKQEAgLTgxLDEyICs4Miw2IEBACiAgKiAJVGhpcyB2ZXJzaW9uIG1vdmVzIHJlZHVuZGFudCBjb2RlIGZyb20gdmlkZW8gZGV2aWNlIGNvZGUgdG8KICAqCXRoZSBjb21tb24gaGFuZGxlcgogICovCi1zdHJ1Y3QgdjRsMl90dm5vcm0gewotCWNoYXIgICAgICAgICAgKm5hbWU7Ci0JdjRsMl9zdGRfaWQgICBpZDsKLQotCXZvaWQgICAgICAgICAgKnByaXZfZGF0YTsKLX07CiAKIHN0cnVjdCB2aWRlb19kZXZpY2UKIHsKQEAgLTEwNCw5ICs5OSw4IEBACiAJaW50IGRlYnVnOwkvKiBBY3RpdmF0ZXMgZGVidWcgbGV2ZWwqLwogCiAJLyogVmlkZW8gc3RhbmRhcmQgdmFycyAqLwotCWludCB0dm5vcm1zaXplOwkvKiBTaXplIG9mIHR2bm9ybSBhcnJheSAqLwotCXY0bDJfc3RkX2lkIGN1cnJlbnRfbm9ybTsgLyogQ3VycmVudCB0dm5vcm0gKi8KLQlzdHJ1Y3QgdjRsMl90dm5vcm0gKnR2bm9ybXM7CisJdjRsMl9zdGRfaWQgdHZub3JtczsJCS8qIFN1cHBvcnRlZCB0diBub3JtcyAqLworCXY0bDJfc3RkX2lkIGN1cnJlbnRfbm9ybTsJLyogQ3VycmVudCB0dm5vcm0gKi8KIAogCS8qIGNhbGxiYWNrcyAqLwogCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpOwpAQCAtMjExLDcgKzIwNSw3IEBACiAJCS8qIFN0YW5kYXJkIGhhbmRsaW5nCiAJCQlHX1NURCBhbmQgRU5VTVNURCBhcmUgaGFuZGxlZCBieSB2aWRlb2Rldi5jCiAJCSAqLwotCWludCAoKnZpZGlvY19zX3N0ZCkgICAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgYSk7CisJaW50ICgqdmlkaW9jX3Nfc3RkKSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqbm9ybSk7CiAJaW50ICgqdmlkaW9jX3F1ZXJ5c3RkKSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqYSk7CiAKIAkJLyogSW5wdXQgaGFuZGxpbmcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F4MjUuaCBiL2luY2x1ZGUvbmV0L2F4MjUuaAppbmRleCA2OTM3NGNkLi41YWUxMGRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9heDI1LmgKKysrIGIvaW5jbHVkZS9uZXQvYXgyNS5oCkBAIC0yNzcsMjAgKzI3NywyNCBAQAogZXh0ZXJuIGF4MjVfY2IgKmF4MjVfZmluZF9jYihheDI1X2FkZHJlc3MgKiwgYXgyNV9hZGRyZXNzICosIGF4MjVfZGlnaSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIGV4dGVybiB2b2lkIGF4MjVfc2VuZF90b19yYXcoYXgyNV9hZGRyZXNzICosIHN0cnVjdCBza19idWZmICosIGludCk7CiBleHRlcm4gdm9pZCBheDI1X2Rlc3Ryb3lfc29ja2V0KGF4MjVfY2IgKik7Ci1leHRlcm4gYXgyNV9jYiAqYXgyNV9jcmVhdGVfY2Iodm9pZCk7CitleHRlcm4gYXgyNV9jYiAqIF9fbXVzdF9jaGVjayBheDI1X2NyZWF0ZV9jYih2b2lkKTsKIGV4dGVybiB2b2lkIGF4MjVfZmlsbGluX2NiKGF4MjVfY2IgKiwgYXgyNV9kZXYgKik7CiBleHRlcm4gc3RydWN0IHNvY2sgKmF4MjVfbWFrZV9uZXcoc3RydWN0IHNvY2sgKiwgc3RydWN0IGF4MjVfZGV2ICopOwogCiAvKiBheDI1X2FkZHIuYyAqLwotZXh0ZXJuIGF4MjVfYWRkcmVzcyBudWxsX2F4MjVfYWRkcmVzczsKLWV4dGVybiBjaGFyICpheDJhc2MoY2hhciAqYnVmLCBheDI1X2FkZHJlc3MgKik7Ci1leHRlcm4gdm9pZCBhc2MyYXgoYXgyNV9hZGRyZXNzICphZGRyLCBjaGFyICpjYWxsc2lnbik7Ci1leHRlcm4gaW50ICBheDI1Y21wKGF4MjVfYWRkcmVzcyAqLCBheDI1X2FkZHJlc3MgKik7Ci1leHRlcm4gaW50ICBheDI1ZGlnaWNtcChheDI1X2RpZ2kgKiwgYXgyNV9kaWdpICopOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKmF4MjVfYWRkcl9wYXJzZSh1bnNpZ25lZCBjaGFyICosIGludCwgYXgyNV9hZGRyZXNzICosIGF4MjVfYWRkcmVzcyAqLCBheDI1X2RpZ2kgKiwgaW50ICosIGludCAqKTsKLWV4dGVybiBpbnQgIGF4MjVfYWRkcl9idWlsZCh1bnNpZ25lZCBjaGFyICosIGF4MjVfYWRkcmVzcyAqLCBheDI1X2FkZHJlc3MgKiwgYXgyNV9kaWdpICosIGludCwgaW50KTsKLWV4dGVybiBpbnQgIGF4MjVfYWRkcl9zaXplKGF4MjVfZGlnaSAqKTsKLWV4dGVybiB2b2lkIGF4MjVfZGlnaV9pbnZlcnQoYXgyNV9kaWdpICosIGF4MjVfZGlnaSAqKTsKK2V4dGVybiBjb25zdCBheDI1X2FkZHJlc3MgYXgyNV9iY2FzdDsKK2V4dGVybiBjb25zdCBheDI1X2FkZHJlc3MgYXgyNV9kZWZhZGRyOworZXh0ZXJuIGNvbnN0IGF4MjVfYWRkcmVzcyBudWxsX2F4MjVfYWRkcmVzczsKK2V4dGVybiBjaGFyICpheDJhc2MoY2hhciAqYnVmLCBjb25zdCBheDI1X2FkZHJlc3MgKik7CitleHRlcm4gdm9pZCBhc2MyYXgoYXgyNV9hZGRyZXNzICphZGRyLCBjb25zdCBjaGFyICpjYWxsc2lnbik7CitleHRlcm4gaW50IGF4MjVjbXAoY29uc3QgYXgyNV9hZGRyZXNzICosIGNvbnN0IGF4MjVfYWRkcmVzcyAqKTsKK2V4dGVybiBpbnQgYXgyNWRpZ2ljbXAoY29uc3QgYXgyNV9kaWdpICosIGNvbnN0IGF4MjVfZGlnaSAqKTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyICpheDI1X2FkZHJfcGFyc2UoY29uc3QgdW5zaWduZWQgY2hhciAqLCBpbnQsCisJYXgyNV9hZGRyZXNzICosIGF4MjVfYWRkcmVzcyAqLCBheDI1X2RpZ2kgKiwgaW50ICosIGludCAqKTsKK2V4dGVybiBpbnQgIGF4MjVfYWRkcl9idWlsZCh1bnNpZ25lZCBjaGFyICosIGNvbnN0IGF4MjVfYWRkcmVzcyAqLAorCWNvbnN0IGF4MjVfYWRkcmVzcyAqLCBjb25zdCBheDI1X2RpZ2kgKiwgaW50LCBpbnQpOworZXh0ZXJuIGludCAgYXgyNV9hZGRyX3NpemUoY29uc3QgYXgyNV9kaWdpICopOworZXh0ZXJuIHZvaWQgYXgyNV9kaWdpX2ludmVydChjb25zdCBheDI1X2RpZ2kgKiwgYXgyNV9kaWdpICopOwogCiAvKiBheDI1X2Rldi5jICovCiBleHRlcm4gYXgyNV9kZXYgKmF4MjVfZGV2X2xpc3Q7CkBAIC0zMjksMTEgKzMzMywyNSBAQAogZXh0ZXJuIHZvaWQgYXgyNV9kc19pZGxldGltZXJfZXhwaXJ5KGF4MjVfY2IgKik7CiAKIC8qIGF4MjVfaWZhY2UuYyAqLwotZXh0ZXJuIGludCAgYXgyNV9wcm90b2NvbF9yZWdpc3Rlcih1bnNpZ25lZCBpbnQsIGludCAoKikoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKSk7CisKK3N0cnVjdCBheDI1X3Byb3RvY29sIHsKKwlzdHJ1Y3QgYXgyNV9wcm90b2NvbCAqbmV4dDsKKwl1bnNpZ25lZCBpbnQgcGlkOworCWludCAoKmZ1bmMpKHN0cnVjdCBza19idWZmICosIGF4MjVfY2IgKik7Cit9OworCitleHRlcm4gdm9pZCBheDI1X3JlZ2lzdGVyX3BpZChzdHJ1Y3QgYXgyNV9wcm90b2NvbCAqYXApOwogZXh0ZXJuIHZvaWQgYXgyNV9wcm90b2NvbF9yZWxlYXNlKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gaW50ICBheDI1X2xpbmtmYWlsX3JlZ2lzdGVyKHZvaWQgKCopKGF4MjVfY2IgKiwgaW50KSk7Ci1leHRlcm4gdm9pZCBheDI1X2xpbmtmYWlsX3JlbGVhc2Uodm9pZCAoKikoYXgyNV9jYiAqLCBpbnQpKTsKLWV4dGVybiBpbnQgIGF4MjVfbGlzdGVuX3JlZ2lzdGVyKGF4MjVfYWRkcmVzcyAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKworc3RydWN0IGF4MjVfbGlua2ZhaWwgeworCXN0cnVjdCBobGlzdF9ub2RlIGxmX25vZGU7CisJdm9pZCAoKmZ1bmMpKGF4MjVfY2IgKiwgaW50KTsKK307CisKK2V4dGVybiB2b2lkIGF4MjVfbGlua2ZhaWxfcmVnaXN0ZXIoc3RydWN0IGF4MjVfbGlua2ZhaWwgKmxmKTsKK2V4dGVybiB2b2lkIGF4MjVfbGlua2ZhaWxfcmVsZWFzZShzdHJ1Y3QgYXgyNV9saW5rZmFpbCAqbGYpOworZXh0ZXJuIGludCBfX211c3RfY2hlY2sgYXgyNV9saXN0ZW5fcmVnaXN0ZXIoYXgyNV9hZGRyZXNzICosCisJc3RydWN0IG5ldF9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBheDI1X2xpc3Rlbl9yZWxlYXNlKGF4MjVfYWRkcmVzcyAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIGV4dGVybiBpbnQgICgqYXgyNV9wcm90b2NvbF9mdW5jdGlvbih1bnNpZ25lZCBpbnQpKShzdHJ1Y3Qgc2tfYnVmZiAqLCBheDI1X2NiICopOwogZXh0ZXJuIGludCAgYXgyNV9saXN0ZW5fbWluZShheDI1X2FkZHJlc3MgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CkBAIC00MTEsNyArNDI5LDcgQEAKIC8qIGF4MjVfdWlkLmMgKi8KIGV4dGVybiBpbnQgIGF4MjVfdWlkX3BvbGljeTsKIGV4dGVybiBheDI1X3VpZF9hc3NvYyAqYXgyNV9maW5kYnl1aWQodWlkX3QpOwotZXh0ZXJuIGludCAgYXgyNV91aWRfaW9jdGwoaW50LCBzdHJ1Y3Qgc29ja2FkZHJfYXgyNSAqKTsKK2V4dGVybiBpbnQgX19tdXN0X2NoZWNrIGF4MjVfdWlkX2lvY3RsKGludCwgc3RydWN0IHNvY2thZGRyX2F4MjUgKik7CiBleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBheDI1X3VpZF9mb3BzOwogZXh0ZXJuIHZvaWQgYXgyNV91aWRfZnJlZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCmluZGV4IDEwYTNlZWMuLjQxNDU2YzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTczOSwxMyArNzM5LDEzIEBACiBzdHJ1Y3QgaGNpX2ZpbHRlciB7CiAJdW5zaWduZWQgbG9uZyB0eXBlX21hc2s7CiAJdW5zaWduZWQgbG9uZyBldmVudF9tYXNrWzJdOwotCV9fdTE2ICAgb3Bjb2RlOworCV9fbGUxNiAgIG9wY29kZTsKIH07CiAKIHN0cnVjdCBoY2lfdWZpbHRlciB7CiAJX191MzIgICB0eXBlX21hc2s7CiAJX191MzIgICBldmVudF9tYXNrWzJdOwotCV9fdTE2ICAgb3Bjb2RlOworCV9fbGUxNiAgIG9wY29kZTsKIH07CiAKICNkZWZpbmUgSENJX0ZMVF9UWVBFX0JJVFMJMzEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKaW5kZXggZTZhZjM4MS4uZTAyZDg1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKQEAgLTIxOCw3ICsyMTgsNyBAQAogI2RlZmluZSBXTEFOX0ZDX0dFVF9TVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkKIAogI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJBRyhzZXEpICgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVEoc2VxKSAgKChzZXEpICYgSUVFRTgwMjExX1NDVExfU0VRKQorI2RlZmluZSBXTEFOX0dFVF9TRVFfU0VRKHNlcSkgICgoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCiAKIC8qIEF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMgKi8KICNkZWZpbmUgV0xBTl9BVVRIX09QRU4gMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaAppbmRleCAxNmFhOTZhLi5mMTNkZGMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaApAQCAtMzgsNSArMzgsNSBAQAogCiBleHRlcm4gdm9pZCBpbmV0Nl9jc2tfYWRkcjJzb2NrYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIpOwogCi1leHRlcm4gaW50IGluZXQ2X2Nza194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgaW50IGlwZnJhZ29rKTsKK2V4dGVybiBpbnQgaW5ldDZfY3NrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlwZnJhZ29rKTsKICNlbmRpZiAvKiBfSU5FVDZfQ09OTkVDVElPTl9TT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCmluZGV4IGJmMTZkOTguLjEzM2NmMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaApAQCAtMzcsOCArMzcsNyBAQAogICogKGkuZS4gdGhpbmdzIHRoYXQgZGVwZW5kIG9uIHRoZSBhZGRyZXNzIGZhbWlseSkKICAqLwogc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyB7Ci0JaW50CSAgICAoKnF1ZXVlX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywKLQkJCQkgIGludCBpcGZyYWdvayk7CisJaW50CSAgICAoKnF1ZXVlX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsIGludCBpcGZyYWdvayk7CiAJdm9pZAkgICAgKCpzZW5kX2NoZWNrKShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCiAJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQJICAgICgqcmVidWlsZF9oZWFkZXIpKHN0cnVjdCBzb2NrICpzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCA4M2NiOWFjLi5lNzljM2UzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTk3LDcgKzk3LDcgQEAKIGV4dGVybiBpbnQJCWlwX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYgKikpOwogZXh0ZXJuIGludAkJaXBfZG9fbmF0KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQJCWlwX3NlbmRfY2hlY2soc3RydWN0IGlwaGRyICppcCk7Ci1leHRlcm4gaW50CQlpcF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgaW50IGlwZnJhZ29rKTsKK2V4dGVybiBpbnQJCWlwX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlwZnJhZ29rKTsKIGV4dGVybiB2b2lkCQlpcF9pbml0KHZvaWQpOwogZXh0ZXJuIGludAkJaXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgICAgICBpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwKQEAgLTM3Niw4ICszNzYsNyBAQAogCQkJIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKIGludCBpcHY0X2RvaW50X2FuZF9mbHVzaF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJCQkgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCi0JCQkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCAKLQkJCQkgIHZvaWQgKipjb250ZXh0KTsKKwkJCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBleHRlcm4gaW50IGlwX21pc2NfcHJvY19pbml0KHZvaWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfY2hlY2tzdW0uaCBiL2luY2x1ZGUvbmV0L2lwNl9jaGVja3N1bS5oCmluZGV4IDY4ZTJiMzIuLmJjMWIwZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvbmV0L2lwNl9jaGVja3N1bS5oCkBAIC04Nyw3ICs4Nyw3IEBACiAJY2FycnkgPSAoc3VtIDwgdXByb3RvKTsKIAlzdW0gKz0gY2Fycnk7CiAKLQlyZXR1cm4gY3N1bV9mb2xkKChfX2ZvcmNlIF9fd3N1bSljc3VtKTsKKwlyZXR1cm4gY3N1bV9mb2xkKChfX2ZvcmNlIF9fd3N1bSlzdW0pOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaAppbmRleCBmOWNkZTQ0Li43YmU0ZjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCkBAIC01MCw5ICs1MCw5IEBACiAJc3RydWN0IGZpYjZfbm9kZQkqcGFyZW50OwogCXN0cnVjdCBmaWI2X25vZGUJKmxlZnQ7CiAJc3RydWN0IGZpYjZfbm9kZQkqcmlnaHQ7Ci0KKyNpZmRlZiBDT05GSUdfSVBWNl9TVUJUUkVFUwogCXN0cnVjdCBmaWI2X25vZGUJKnN1YnRyZWU7Ci0KKyNlbmRpZgogCXN0cnVjdCBydDZfaW5mbwkJKmxlYWY7CiAKIAlfX3UxNgkJCWZuX2JpdDsJCS8qIGJpdCBrZXkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX3R0eS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHR5LmgKaW5kZXggODc2OTljYi4uOGRhYmRkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHR5LmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHR5LmgKQEAgLTEyNiw3ICsxMjYsNyBAQAogZXh0ZXJuIGludCBpcmNvbW1fdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCAKIAkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gdm9pZCBpcmNvbW1fdHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIAotCQkJCSAgIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyk7CisJCQkJICAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7CiBleHRlcm4gaGFzaGJpbl90ICppcmNvbW1fdHR5OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKaW5kZXggMjM5NjcwMy4uMzcyNWI5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKKysrIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKQEAgLTMwOSw2ICszMDksMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfb3V0cHV0KHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdW5zaWduZWQgc2VxOworCWludCBoaF9sZW47CisKKwlkbyB7CisJCWludCBoaF9hbGVuOworCisJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJmhoLT5oaF9sb2NrKTsKKwkJaGhfbGVuID0gaGgtPmhoX2xlbjsKKwkJaGhfYWxlbiA9IEhIX0RBVEFfQUxJR04oaGhfbGVuKTsKKwkJbWVtY3B5KHNrYi0+ZGF0YSAtIGhoX2FsZW4sIGhoLT5oaF9kYXRhLCBoaF9hbGVuKTsKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZoaC0+aGhfbG9jaywgc2VxKSk7CisKKwlza2JfcHVzaChza2IsIGhoX2xlbik7CisJcmV0dXJuIGhoLT5oaF9vdXRwdXQoc2tiKTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hib3VyICoKIF9fbmVpZ2hfbG9va3VwKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBjb25zdCB2b2lkICpwa2V5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY3JlYXQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbXBhdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21wYXQuaAppbmRleCBmMWIxNDgyLi42Zjg0YzFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tcGF0LmgKQEAgLTYsNiArNiw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTU9EVUxFKQogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAKICNpZmRlZiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUksKIHN0YXRpYyBpbmxpbmUgdV9pbnQzMl90ICpuZl9jdF9nZXRfbWFyayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtNjQsNiArNjUsMTYgQEAKIAlyZXR1cm4gKGN0ICE9IE5VTEwpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KHVuc2lnbmVkIHNob3J0IGwzcHJvdG8pCit7CisJbmVlZF9jb25udHJhY2soKTsKKwlyZXR1cm4gbDNwcm90byA9PSBQRl9JTkVUID8gMCA6IC0xOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KHVuc2lnbmVkIHNob3J0IGwzcHJvdG8pCit7Cit9CisKICNlbHNlIC8qIENPTkZJR19JUF9ORl9DT05OVFJBQ0sgKi8KIAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm9zZS5oIGIvaW5jbHVkZS9uZXQvcm9zZS5oCmluZGV4IDAxMmIwOWUuLjRjMDVhODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Jvc2UuaAorKysgYi9pbmNsdWRlL25ldC9yb3NlLmgKQEAgLTE4OCwxMyArMTg4LDEzIEBACiBleHRlcm4gdm9pZCByb3NlX2VucXVpcnlfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKik7CiAKIC8qIHJvc2Vfcm91dGUuYyAqLwotZXh0ZXJuIHN0cnVjdCByb3NlX25laWdoICpyb3NlX2xvb3BiYWNrX25laWdoOworZXh0ZXJuIHN0cnVjdCByb3NlX25laWdoIHJvc2VfbG9vcGJhY2tfbmVpZ2g7CiBleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb3NlX25laWdoX2ZvcHM7CiBleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb3NlX25vZGVzX2ZvcHM7CiBleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb3NlX3JvdXRlc19mb3BzOwogCi1leHRlcm4gaW50ICByb3NlX2FkZF9sb29wYmFja19uZWlnaCh2b2lkKTsKLWV4dGVybiBpbnQgIHJvc2VfYWRkX2xvb3BiYWNrX25vZGUocm9zZV9hZGRyZXNzICopOworZXh0ZXJuIHZvaWQgcm9zZV9hZGRfbG9vcGJhY2tfbmVpZ2godm9pZCk7CitleHRlcm4gaW50IF9fbXVzdF9jaGVjayByb3NlX2FkZF9sb29wYmFja19ub2RlKHJvc2VfYWRkcmVzcyAqKTsKIGV4dGVybiB2b2lkIHJvc2VfZGVsX2xvb3BiYWNrX25vZGUocm9zZV9hZGRyZXNzICopOwogZXh0ZXJuIHZvaWQgcm9zZV9ydF9kZXZpY2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIGV4dGVybiB2b2lkIHJvc2VfbGlua19kZXZpY2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKaW5kZXggMjE1NDYxZi4uMjhhZjY4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKQEAgLTEyOCw4ICsxMjgsNiBAQAogCQkJCSAgICAgaW50IGZsYWdzKTsKIGV4dGVybiBzdHJ1Y3Qgc2N0cF9wZiAqc2N0cF9nZXRfcGZfc3BlY2lmaWMoc2FfZmFtaWx5X3QgZmFtaWx5KTsKIGV4dGVybiBpbnQgc2N0cF9yZWdpc3Rlcl9wZihzdHJ1Y3Qgc2N0cF9wZiAqLCBzYV9mYW1pbHlfdCk7Ci1pbnQgc2N0cF9pbmV0YWRkcl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwdHIpOwogCiAvKgogICogc2N0cC9zb2NrZXQuYwpAQCAtMzY4LDcgKzM2Niw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF9zeXNjdGxfdW5yZWdpc3Rlcih2b2lkKSB7IHJldHVybjsgfQogc3RhdGljIGlubGluZSBpbnQgc2N0cF9zeXNjdGxfamlmZmllc19tcyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKLQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwgdm9pZCAqKmNvbnRleHQpIHsKKwkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikgewogCXJldHVybiAtRU5PU1lTOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NtLmggYi9pbmNsdWRlL25ldC9zY3RwL3NtLmgKaW5kZXggMzI2OWVkMS4uNzNjYjk5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zbS5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc20uaApAQCAtMTM0LDYgKzEzNCw3IEBACiBzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kaXNjYXJkX2NodW5rOwogc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fNV8yXzFfc2ltaW5pdDsKIHNjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzVfMl8yX2R1cGluaXQ7CitzY3RwX3N0YXRlX2ZuX3Qgc2N0cF9zZl9kb181XzJfM19pbml0YWNrOwogc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vazsKIHNjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX3Vua19jaHVuazsKIHNjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvXzhfNV8xX0Vfc2E7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IGMwODlmOTMuLjMxYThlODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0yMDEsMTMgKzIwMSwxMiBAQAogCXN0cnVjdCBzY3RwX2JpbmRfaGFzaGJ1Y2tldCAqcG9ydF9oYXNodGFibGU7CiAKIAkvKiBUaGlzIGlzIHRoZSBnbG9iYWwgbG9jYWwgYWRkcmVzcyBsaXN0LgotCSAqIFdlIGFjdGl2ZWx5IG1haW50YWluIHRoaXMgY29tcGxldGUgbGlzdCBvZiBpbnRlcmZhY2VzIG9uCi0JICogdGhlIHN5c3RlbSBieSBjYXRjaGluZyByb3V0aW5nIGV2ZW50cy4KKwkgKiBXZSBhY3RpdmVseSBtYWludGFpbiB0aGlzIGNvbXBsZXRlIGxpc3Qgb2YgYWRkcmVzc2VzIG9uCisJICogdGhlIHN5c3RlbSBieSBjYXRjaGluZyBhZGRyZXNzIGFkZC9kZWxldGUgZXZlbnRzLgogCSAqCiAJICogSXQgaXMgYSBsaXN0IG9mIHNjdHBfc29ja2FkZHJfZW50cnkuCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBsb2NhbF9hZGRyX2xpc3Q7Ci0Jc3BpbmxvY2tfdCBsb2NhbF9hZGRyX2xvY2s7CiAJCiAJLyogRmxhZyB0byBpbmRpY2F0ZSBpZiBhZGRpcCBpcyBlbmFibGVkLiAqLwogCWludCBhZGRpcF9lbmFibGU7CkBAIC0yNDMsNyArMjQyLDYgQEAKICNkZWZpbmUgc2N0cF9wb3J0X2FsbG9jX2xvY2sJCShzY3RwX2dsb2JhbHMucG9ydF9hbGxvY19sb2NrKQogI2RlZmluZSBzY3RwX3BvcnRfaGFzaHRhYmxlCQkoc2N0cF9nbG9iYWxzLnBvcnRfaGFzaHRhYmxlKQogI2RlZmluZSBzY3RwX2xvY2FsX2FkZHJfbGlzdAkJKHNjdHBfZ2xvYmFscy5sb2NhbF9hZGRyX2xpc3QpCi0jZGVmaW5lIHNjdHBfbG9jYWxfYWRkcl9sb2NrCQkoc2N0cF9nbG9iYWxzLmxvY2FsX2FkZHJfbG9jaykKICNkZWZpbmUgc2N0cF9hZGRpcF9lbmFibGUJCShzY3RwX2dsb2JhbHMuYWRkaXBfZW5hYmxlKQogI2RlZmluZSBzY3RwX3Byc2N0cF9lbmFibGUJCShzY3RwX2dsb2JhbHMucHJzY3RwX2VuYWJsZSkKIApAQCAtMjc3LDYgKzI3NSw3IEBACiAJX191MTYgZGVmYXVsdF9mbGFnczsKIAlfX3UzMiBkZWZhdWx0X2NvbnRleHQ7CiAJX191MzIgZGVmYXVsdF90aW1ldG9saXZlOworCV9fdTMyIGRlZmF1bHRfcmN2X2NvbnRleHQ7CiAKIAkvKiBIZWFydGJlYXQgaW50ZXJ2YWw6IFRoZSBlbmRwb2ludCBzZW5kcyBvdXQgYSBIZWFydGJlYXQgY2h1bmsgdG8KIAkgKiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBldmVyeSBoZWFydGJlYXQgaW50ZXJ2YWwuIFRoaXMgdmFsdWUKQEAgLTMwNyw3ICszMDYsNyBAQAogCV9fdTggZGlzYWJsZV9mcmFnbWVudHM7CiAJX191OCBwZF9tb2RlOwogCV9fdTggdjRtYXBwZWQ7Ci0JX191MzIgYWRhcHRpb25faW5kOworCV9fdTMyIGFkYXB0YXRpb25faW5kOwogCiAJLyogUmVjZWl2ZSB0byBoZXJlIHdoaWxlIHBhcnRpYWwgZGVsaXZlcnkgaXMgaW4gZWZmZWN0LiAqLwogCXN0cnVjdCBza19idWZmX2hlYWQgcGRfbG9iYnk7CkBAIC0zODksNyArMzg4LDcgQEAKIAkvKiBQYWRkaW5nIGZvciBmdXR1cmUgdXNlICovCiAJX191OCBwYWRkaW5nOyAgCQkKIAotCV9fdTMyIGFkYXB0aW9uX2luZDsJCisJX191MzIgYWRhcHRhdGlvbl9pbmQ7CiAKIAogCS8qIFRoaXMgaXMgYSBzaGltIGZvciBteSBwZWVyJ3MgSU5JVCBwYWNrZXQsIGZvbGxvd2VkIGJ5CkBAIC00MzIsNyArNDMxLDcgQEAKIAlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqdjQ7CiAJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnY2OwogCXVuaW9uIHNjdHBfYWRkcl9wYXJhbSAqYWRkcjsKLQlzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9pbmRfcGFyYW0gKmFpbmQ7CisJc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9pbmRfcGFyYW0gKmFpbmQ7CiB9OwogCiAvKiBSRkMgMjk2MC4gIFNlY3Rpb24gMy4zLjUgSGVhcnRiZWF0LgpAQCAtMTQ4NCw3ICsxNDgzLDcgQEAKIAkJX191OCAgICBhc2NvbmZfY2FwYWJsZTsgIC8qIERvZXMgcGVlciBzdXBwb3J0IEFERElQPyAqLwogCQlfX3U4ICAgIHByc2N0cF9jYXBhYmxlOyAgLyogQ2FuIHBlZXIgZG8gUFItU0NUUD8gKi8KIAotCQlfX3UzMiAgIGFkYXB0aW9uX2luZDsJIC8qIEFkYXB0aW9uIENvZGUgcG9pbnQuICovCisJCV9fdTMyICAgYWRhcHRhdGlvbl9pbmQ7CSAvKiBBZGFwdGF0aW9uIENvZGUgcG9pbnQuICovCiAKIAkJLyogVGhpcyBtYXNrIGlzIHVzZWQgdG8gZGlzYWJsZSBzZW5kaW5nIHRoZSBBU0NPTkYgY2h1bmsKIAkJICogd2l0aCBzcGVjaWZpZWQgcGFyYW1ldGVyIHRvIHBlZXIuCkBAIC0xNjU5LDYgKzE2NTgsOSBAQAogCV9fdTMyIGRlZmF1bHRfY29udGV4dDsKIAlfX3UzMiBkZWZhdWx0X3RpbWV0b2xpdmU7CiAKKwkvKiBEZWZhdWx0IHJlY2VpdmUgcGFyYW1ldGVycyAqLworCV9fdTMyIGRlZmF1bHRfcmN2X2NvbnRleHQ7CisKIAkvKiBUaGlzIHRyYWNrcyBvdXRib3VuZCBzc24gZm9yIGEgZ2l2ZW4gc3RyZWFtLgkgKi8KIAlzdHJ1Y3Qgc2N0cF9zc25tYXAgKnNzbm1hcDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC91bHBldmVudC5oIGIvaW5jbHVkZS9uZXQvc2N0cC91bHBldmVudC5oCmluZGV4IDFhNGRkYzEuLjI5MjNlM2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3VscGV2ZW50LmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC91bHBldmVudC5oCkBAIC0xMjAsNyArMTIwLDcgQEAKIAljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAlfX3UzMiBpbmRpY2F0aW9uLCBnZnBfdCBnZnApOwogCi1zdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF91bHBldmVudF9tYWtlX2FkYXB0aW9uX2luZGljYXRpb24oCitzdHJ1Y3Qgc2N0cF91bHBldmVudCAqc2N0cF91bHBldmVudF9tYWtlX2FkYXB0YXRpb25faW5kaWNhdGlvbigKIAljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgZ2ZwX3QgZ2ZwKTsKIAogc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9yY3Ztc2coc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaCBiL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oCmluZGV4IDFiN2FhZTYuLjY3YTMwZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oCkBAIC03NSw4ICs3NSw4IEBACiAjZGVmaW5lIFNDVFBfU0VUX1BFRVJfUFJJTUFSWV9BRERSIFNDVFBfU0VUX1BFRVJfUFJJTUFSWV9BRERSCiAJU0NUUF9QUklNQVJZX0FERFIsCiAjZGVmaW5lIFNDVFBfUFJJTUFSWV9BRERSIFNDVFBfUFJJTUFSWV9BRERSCi0JU0NUUF9BREFQVElPTl9MQVlFUiwgICAgICAKLSNkZWZpbmUgU0NUUF9BREFQVElPTl9MQVlFUiBTQ1RQX0FEQVBUSU9OX0xBWUVSCisJU0NUUF9BREFQVEFUSU9OX0xBWUVSLAorI2RlZmluZSBTQ1RQX0FEQVBUQVRJT05fTEFZRVIgU0NUUF9BREFQVEFUSU9OX0xBWUVSCiAJU0NUUF9ESVNBQkxFX0ZSQUdNRU5UUywKICNkZWZpbmUgU0NUUF9ESVNBQkxFX0ZSQUdNRU5UUyBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTCiAJU0NUUF9QRUVSX0FERFJfUEFSQU1TLApAQCAtOTUsNiArOTUsOCBAQAogI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTyBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTwogCVNDVFBfREVMQVlFRF9BQ0tfVElNRSwKICNkZWZpbmUgU0NUUF9ERUxBWUVEX0FDS19USU1FIFNDVFBfREVMQVlFRF9BQ0tfVElNRQorCVNDVFBfQ09OVEVYVCwJLyogUmVjZWl2ZSBDb250ZXh0ICovCisjZGVmaW5lIFNDVFBfQ09OVEVYVCBTQ1RQX0NPTlRFWFQKIAogCS8qIEludGVybmFsIFNvY2tldCBPcHRpb25zLiBTb21lIG9mIHRoZSBzY3RwIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSAKIAkgKiBpbXBsZW1lbnRlZCB1c2luZyB0aGVzZSBzb2NrZXQgb3B0aW9ucy4KQEAgLTMyOSwxNyArMzMxLDE3IEBACiB9OwogCiAvKgotICogNS4zLjEuNiBTQ1RQX0FEQVBUSU9OX0lORElDQVRJT04KKyAqIDUuMy4xLjYgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04KICAqCi0gKiAgIFdoZW4gYSBwZWVyIHNlbmRzIGEgQWRhcHRpb24gTGF5ZXIgSW5kaWNhdGlvbiBwYXJhbWV0ZXIgLCBTQ1RQCisgKiAgIFdoZW4gYSBwZWVyIHNlbmRzIGEgQWRhcHRhdGlvbiBMYXllciBJbmRpY2F0aW9uIHBhcmFtZXRlciAsIFNDVFAKICAqICAgZGVsaXZlcnMgdGhpcyBub3RpZmljYXRpb24gdG8gaW5mb3JtIHRoZSBhcHBsaWNhdGlvbgotICogICB0aGF0IG9mIHRoZSBwZWVycyByZXF1ZXN0ZWQgYWRhcHRpb24gbGF5ZXIuCisgKiAgIHRoYXQgb2YgdGhlIHBlZXJzIHJlcXVlc3RlZCBhZGFwdGF0aW9uIGxheWVyLgogICovCi1zdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9ldmVudCB7CitzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50IHsKIAlfX3UxNiBzYWlfdHlwZTsKIAlfX3UxNiBzYWlfZmxhZ3M7CiAJX191MzIgc2FpX2xlbmd0aDsKLQlfX3UzMiBzYWlfYWRhcHRpb25faW5kOworCV9fdTMyIHNhaV9hZGFwdGF0aW9uX2luZDsKIAlzY3RwX2Fzc29jX3Qgc2FpX2Fzc29jX2lkOwogfTsKIApAQCAtMzcyLDcgKzM3NCw3IEBACiAJX191OCBzY3RwX3BlZXJfZXJyb3JfZXZlbnQ7CiAJX191OCBzY3RwX3NodXRkb3duX2V2ZW50OwogCV9fdTggc2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50OwotCV9fdTggc2N0cF9hZGFwdGlvbl9sYXllcl9ldmVudDsKKwlfX3U4IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudDsKIH07CiAKIC8qCkBAIC0zOTMsNyArMzk1LDcgQEAKIAlzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3Igc25fcmVtb3RlX2Vycm9yOwogCXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkIHNuX3NlbmRfZmFpbGVkOwogCXN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50IHNuX3NodXRkb3duX2V2ZW50OwotCXN0cnVjdCBzY3RwX2FkYXB0aW9uX2V2ZW50IHNuX2FkYXB0aW9uX2V2ZW50OworCXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgc25fYWRhcHRhdGlvbl9ldmVudDsKIAlzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCBzbl9wZGFwaV9ldmVudDsKIH07CiAKQEAgLTQxMCw3ICs0MTIsNyBAQAogCVNDVFBfUkVNT1RFX0VSUk9SLAogCVNDVFBfU0hVVERPV05fRVZFTlQsCiAJU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5ULAotCVNDVFBfQURBUFRJT05fSU5ESUNBVElPTiwKKwlTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTiwKIH07CiAKIC8qIE5vdGlmaWNhdGlvbiBlcnJvciBjb2RlcyB1c2VkIHRvIGZpbGwgdXAgdGhlIGVycm9yIGZpZWxkcyBpbiBzb21lCkBAIC00ODYsMTMgKzQ4OCwxMyBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKIAogLyoKLSAqIDcuMS4xMSBTZXQgQWRhcHRpb24gTGF5ZXIgSW5kaWNhdG9yIChTQ1RQX0FEQVBUSU9OX0xBWUVSKQorICogNy4xLjExIFNldCBBZGFwdGF0aW9uIExheWVyIEluZGljYXRvciAoU0NUUF9BREFQVEFUSU9OX0xBWUVSKQogICoKLSAqIFJlcXVlc3RzIHRoYXQgdGhlIGxvY2FsIGVuZHBvaW50IHNldCB0aGUgc3BlY2lmaWVkIEFkYXB0aW9uIExheWVyCisgKiBSZXF1ZXN0cyB0aGF0IHRoZSBsb2NhbCBlbmRwb2ludCBzZXQgdGhlIHNwZWNpZmllZCBBZGFwdGF0aW9uIExheWVyCiAgKiBJbmRpY2F0aW9uIHBhcmFtZXRlciBmb3IgYWxsIGZ1dHVyZSBJTklUIGFuZCBJTklULUFDSyBleGNoYW5nZXMuCiAgKi8KLXN0cnVjdCBzY3RwX3NldGFkYXB0aW9uIHsKLQlfX3UzMglzc2JfYWRhcHRpb25faW5kOworc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlvbiB7CisJX191MzIJc3NiX2FkYXB0YXRpb25faW5kOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggYzk5Nzc0Zi4uY2Q4ZmEwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTI0NCwxMiArMjQ0LDcgQEAKIHsKICAgICAgICAgcmV0dXJuIChfX3MzMikoc2VxMS1zZXEyKSA8IDA7CiB9Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFmdGVyKF9fdTMyIHNlcTEsIF9fdTMyIHNlcTIpCi17Ci0JcmV0dXJuIChfX3MzMikoc2VxMi1zZXExKSA8IDA7Ci19Ci0KKyNkZWZpbmUgYWZ0ZXIoc2VxMiwgc2VxMSkgCWJlZm9yZShzZXExLCBzZXEyKQogCiAvKiBpcyBzMjw9czE8PXMzID8gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGJldHdlZW4oX191MzIgc2VxMSwgX191MzIgc2VxMiwgX191MzIgc2VxMykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3gyNS5oIGIvaW5jbHVkZS9uZXQveDI1LmgKaW5kZXggMGFkOTBlYi4uZTQ3ZmU0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveDI1LmgKKysrIGIvaW5jbHVkZS9uZXQveDI1LmgKQEAgLTI1OSw2ICsyNTksNyBAQAogZXh0ZXJuIHZvaWQgeDI1X2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKiwgaW50LCB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKTsKIAogLyogeDI1X3RpbWVyLmMgKi8KK2V4dGVybiB2b2lkIHgyNV9pbml0X3RpbWVycyhzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIHZvaWQgeDI1X3N0YXJ0X2hlYXJ0YmVhdChzdHJ1Y3Qgc29jayAqKTsKIGV4dGVybiB2b2lkIHgyNV9zdGFydF90MnRpbWVyKHN0cnVjdCBzb2NrICopOwogZXh0ZXJuIHZvaWQgeDI1X3N0YXJ0X3QyMXRpbWVyKHN0cnVjdCBzb2NrICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX21hcnNoYWxsLmggYi9pbmNsdWRlL3JkbWEvaWJfbWFyc2hhbGwuaAppbmRleCA2NmJmNGQ3Li5kYjAzNzIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfbWFyc2hhbGwuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfbWFyc2hhbGwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC00MSw2ICs0MSw5IEBACiB2b2lkIGliX2NvcHlfcXBfYXR0cl90b191c2VyKHN0cnVjdCBpYl91dmVyYnNfcXBfYXR0ciAqZHN0LAogCQkJICAgICBzdHJ1Y3QgaWJfcXBfYXR0ciAqc3JjKTsKIAordm9pZCBpYl9jb3B5X2FoX2F0dHJfdG9fdXNlcihzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgKmRzdCwKKwkJCSAgICAgc3RydWN0IGliX2FoX2F0dHIgKnNyYyk7CisKIHZvaWQgaWJfY29weV9wYXRoX3JlY190b191c2VyKHN0cnVjdCBpYl91c2VyX3BhdGhfcmVjICpkc3QsCiAJCQkgICAgICBzdHJ1Y3QgaWJfc2FfcGF0aF9yZWMgKnNyYyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggOGVhY2MzNS4uMGJmYTMzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTQzLDYgKzQzLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgpAQCAtODQ4LDYgKzg1MCw0OSBAQAogCXU4ICAgICAgICAgICAgICAgICAgICAgKmxtY19jYWNoZTsKIH07CiAKK3N0cnVjdCBpYl9kbWFfbWFwcGluZ19vcHMgeworCWludAkJKCptYXBwaW5nX2Vycm9yKShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJCSB1NjQgZG1hX2FkZHIpOworCXU2NAkJKCptYXBfc2luZ2xlKShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJICAgICAgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCXZvaWQJCSgqdW5tYXBfc2luZ2xlKShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJCXU2NCBhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwl1NjQJCSgqbWFwX3BhZ2UpKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSAgICBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwl2b2lkCQkoKnVubWFwX3BhZ2UpKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCQkgICAgICB1NjQgYWRkciwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKKwlpbnQJCSgqbWFwX3NnKShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCXZvaWQJCSgqdW5tYXBfc2cpKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOworCXU2NAkJKCpkbWFfYWRkcmVzcykoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKTsKKwl1bnNpZ25lZCBpbnQJKCpkbWFfbGVuKShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyk7CisJdm9pZAkJKCpzeW5jX3NpbmdsZV9mb3JfY3B1KShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICB1NjQgZG1hX2hhbmRsZSwKKwkJCQkJICAgICAgIHNpemVfdCBzaXplLAorCQkJCSAgICAgICAgICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisJdm9pZAkJKCpzeW5jX3NpbmdsZV9mb3JfZGV2aWNlKShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJCQkgIHU2NCBkbWFfaGFuZGxlLAorCQkJCQkJICBzaXplX3Qgc2l6ZSwKKwkJCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKKwl2b2lkCQkqKCphbGxvY19jb2hlcmVudCkoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJCQkgICBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgdTY0ICpkbWFfaGFuZGxlLAorCQkJCQkgICBnZnBfdCBmbGFnKTsKKwl2b2lkCQkoKmZyZWVfY29oZXJlbnQpKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCQkJIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKKwkJCQkJIHU2NCBkbWFfaGFuZGxlKTsKK307CisKIHN0cnVjdCBpd19jbV92ZXJiczsKIAogc3RydWN0IGliX2RldmljZSB7CkBAIC05OTIsNiArMTAzNyw4IEBACiAJCQkJCQkgIHN0cnVjdCBpYl9tYWQgKmluX21hZCwKIAkJCQkJCSAgc3RydWN0IGliX21hZCAqb3V0X21hZCk7CiAKKwlzdHJ1Y3QgaWJfZG1hX21hcHBpbmdfb3BzICAgKmRtYV9vcHM7CisKIAlzdHJ1Y3QgbW9kdWxlICAgICAgICAgICAgICAgKm93bmVyOwogCXN0cnVjdCBjbGFzc19kZXZpY2UgICAgICAgICAgY2xhc3NfZGV2OwogCXN0cnVjdCBrb2JqZWN0ICAgICAgICAgICAgICAgcG9ydHNfcGFyZW50OwpAQCAtMTM5NSwxMCArMTQ0MiwyMzEgQEAKICAqICAgdXNhYmxlIGZvciBETUEuCiAgKiBAcGQ6IFRoZSBwcm90ZWN0aW9uIGRvbWFpbiBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbW9yeSByZWdpb24uCiAgKiBAbXJfYWNjZXNzX2ZsYWdzOiBTcGVjaWZpZXMgdGhlIG1lbW9yeSBhY2Nlc3MgcmlnaHRzLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgaWJfZG1hXyooKSBmdW5jdGlvbnMgZGVmaW5lZCBiZWxvdyBtdXN0IGJlIHVzZWQKKyAqIHRvIGNyZWF0ZS9kZXN0cm95IGFkZHJlc3NlcyB1c2VkIHdpdGggdGhlIExrZXkgb3IgUmtleSByZXR1cm5lZAorICogYnkgaWJfZ2V0X2RtYV9tcigpLgogICovCiBzdHJ1Y3QgaWJfbXIgKmliX2dldF9kbWFfbXIoc3RydWN0IGliX3BkICpwZCwgaW50IG1yX2FjY2Vzc19mbGFncyk7CiAKIC8qKgorICogaWJfZG1hX21hcHBpbmdfZXJyb3IgLSBjaGVjayBhIERNQSBhZGRyIGZvciBlcnJvcgorICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIGRtYV9hZGRyIHdhcyBjcmVhdGVkCisgKiBAZG1hX2FkZHI6IFRoZSBETUEgYWRkcmVzcyB0byBjaGVjaworICovCitzdGF0aWMgaW5saW5lIGludCBpYl9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHU2NCBkbWFfYWRkcikKK3sKKwlpZiAoZGV2LT5kbWFfb3BzKQorCQlyZXR1cm4gZGV2LT5kbWFfb3BzLT5tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpOworCXJldHVybiBkbWFfbWFwcGluZ19lcnJvcihkbWFfYWRkcik7Cit9CisKKy8qKgorICogaWJfZG1hX21hcF9zaW5nbGUgLSBNYXAgYSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIHRvIERNQSBhZGRyZXNzCisgKiBAZGV2OiBUaGUgZGV2aWNlIGZvciB3aGljaCB0aGUgZG1hX2FkZHIgaXMgdG8gYmUgY3JlYXRlZAorICogQGNwdV9hZGRyOiBUaGUga2VybmVsIHZpcnR1YWwgYWRkcmVzcworICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSByZWdpb24gaW4gYnl0ZXMKKyAqIEBkaXJlY3Rpb246IFRoZSBkaXJlY3Rpb24gb2YgdGhlIERNQQorICovCitzdGF0aWMgaW5saW5lIHU2NCBpYl9kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJICAgIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWlmIChkZXYtPmRtYV9vcHMpCisJCXJldHVybiBkZXYtPmRtYV9vcHMtPm1hcF9zaW5nbGUoZGV2LCBjcHVfYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlyZXR1cm4gZG1hX21hcF9zaW5nbGUoZGV2LT5kbWFfZGV2aWNlLCBjcHVfYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KKworLyoqCisgKiBpYl9kbWFfdW5tYXBfc2luZ2xlIC0gRGVzdHJveSBhIG1hcHBpbmcgY3JlYXRlZCBieSBpYl9kbWFfbWFwX3NpbmdsZSgpCisgKiBAZGV2OiBUaGUgZGV2aWNlIGZvciB3aGljaCB0aGUgRE1BIGFkZHJlc3Mgd2FzIGNyZWF0ZWQKKyAqIEBhZGRyOiBUaGUgRE1BIGFkZHJlc3MKKyAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzCisgKiBAZGlyZWN0aW9uOiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBETUEKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGliX2RtYV91bm1hcF9zaW5nbGUoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJCSAgICAgICB1NjQgYWRkciwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlpZiAoZGV2LT5kbWFfb3BzKQorCQlkZXYtPmRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGFkZHIsIHNpemUsIGRpcmVjdGlvbik7CisJZWxzZQorCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZG1hX2RldmljZSwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KKworLyoqCisgKiBpYl9kbWFfbWFwX3BhZ2UgLSBNYXAgYSBwaHlzaWNhbCBwYWdlIHRvIERNQSBhZGRyZXNzCisgKiBAZGV2OiBUaGUgZGV2aWNlIGZvciB3aGljaCB0aGUgZG1hX2FkZHIgaXMgdG8gYmUgY3JlYXRlZAorICogQHBhZ2U6IFRoZSBwYWdlIHRvIGJlIG1hcHBlZAorICogQG9mZnNldDogVGhlIG9mZnNldCB3aXRoaW4gdGhlIHBhZ2UKKyAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzCisgKiBAZGlyZWN0aW9uOiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBETUEKKyAqLworc3RhdGljIGlubGluZSB1NjQgaWJfZG1hX21hcF9wYWdlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJICBzaXplX3Qgc2l6ZSwKKwkJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlpZiAoZGV2LT5kbWFfb3BzKQorCQlyZXR1cm4gZGV2LT5kbWFfb3BzLT5tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlyZXR1cm4gZG1hX21hcF9wYWdlKGRldi0+ZG1hX2RldmljZSwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXJlY3Rpb24pOworfQorCisvKioKKyAqIGliX2RtYV91bm1hcF9wYWdlIC0gRGVzdHJveSBhIG1hcHBpbmcgY3JlYXRlZCBieSBpYl9kbWFfbWFwX3BhZ2UoKQorICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIERNQSBhZGRyZXNzIHdhcyBjcmVhdGVkCisgKiBAYWRkcjogVGhlIERNQSBhZGRyZXNzCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIHJlZ2lvbiBpbiBieXRlcworICogQGRpcmVjdGlvbjogVGhlIGRpcmVjdGlvbiBvZiB0aGUgRE1BCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9kbWFfdW5tYXBfcGFnZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJICAgICB1NjQgYWRkciwgc2l6ZV90IHNpemUsCisJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaWYgKGRldi0+ZG1hX29wcykKKwkJZGV2LT5kbWFfb3BzLT51bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwllbHNlCisJCWRtYV91bm1hcF9wYWdlKGRldi0+ZG1hX2RldmljZSwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KKworLyoqCisgKiBpYl9kbWFfbWFwX3NnIC0gTWFwIGEgc2NhdHRlci9nYXRoZXIgbGlzdCB0byBETUEgYWRkcmVzc2VzCisgKiBAZGV2OiBUaGUgZGV2aWNlIGZvciB3aGljaCB0aGUgRE1BIGFkZHJlc3NlcyBhcmUgdG8gYmUgY3JlYXRlZAorICogQHNnOiBUaGUgYXJyYXkgb2Ygc2NhdHRlci9nYXRoZXIgZW50cmllcworICogQG5lbnRzOiBUaGUgbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyIGVudHJpZXMKKyAqIEBkaXJlY3Rpb246IFRoZSBkaXJlY3Rpb24gb2YgdGhlIERNQQorICovCitzdGF0aWMgaW5saW5lIGludCBpYl9kbWFfbWFwX3NnKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWlmIChkZXYtPmRtYV9vcHMpCisJCXJldHVybiBkZXYtPmRtYV9vcHMtPm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKKwlyZXR1cm4gZG1hX21hcF9zZyhkZXYtPmRtYV9kZXZpY2UsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKK30KKworLyoqCisgKiBpYl9kbWFfdW5tYXBfc2cgLSBVbm1hcCBhIHNjYXR0ZXIvZ2F0aGVyIGxpc3Qgb2YgRE1BIGFkZHJlc3NlcworICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIERNQSBhZGRyZXNzZXMgd2VyZSBjcmVhdGVkCisgKiBAc2c6IFRoZSBhcnJheSBvZiBzY2F0dGVyL2dhdGhlciBlbnRyaWVzCisgKiBAbmVudHM6IFRoZSBudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIgZW50cmllcworICogQGRpcmVjdGlvbjogVGhlIGRpcmVjdGlvbiBvZiB0aGUgRE1BCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9kbWFfdW5tYXBfc2coc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaWYgKGRldi0+ZG1hX29wcykKKwkJZGV2LT5kbWFfb3BzLT51bm1hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKKwllbHNlCisJCWRtYV91bm1hcF9zZyhkZXYtPmRtYV9kZXZpY2UsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKK30KKworLyoqCisgKiBpYl9zZ19kbWFfYWRkcmVzcyAtIFJldHVybiB0aGUgRE1BIGFkZHJlc3MgZnJvbSBhIHNjYXR0ZXIvZ2F0aGVyIGVudHJ5CisgKiBAZGV2OiBUaGUgZGV2aWNlIGZvciB3aGljaCB0aGUgRE1BIGFkZHJlc3NlcyB3ZXJlIGNyZWF0ZWQKKyAqIEBzZzogVGhlIHNjYXR0ZXIvZ2F0aGVyIGVudHJ5CisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGliX3NnX2RtYV9hZGRyZXNzKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZykKK3sKKwlpZiAoZGV2LT5kbWFfb3BzKQorCQlyZXR1cm4gZGV2LT5kbWFfb3BzLT5kbWFfYWRkcmVzcyhkZXYsIHNnKTsKKwlyZXR1cm4gc2dfZG1hX2FkZHJlc3Moc2cpOworfQorCisvKioKKyAqIGliX3NnX2RtYV9sZW4gLSBSZXR1cm4gdGhlIERNQSBsZW5ndGggZnJvbSBhIHNjYXR0ZXIvZ2F0aGVyIGVudHJ5CisgKiBAZGV2OiBUaGUgZGV2aWNlIGZvciB3aGljaCB0aGUgRE1BIGFkZHJlc3NlcyB3ZXJlIGNyZWF0ZWQKKyAqIEBzZzogVGhlIHNjYXR0ZXIvZ2F0aGVyIGVudHJ5CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGliX3NnX2RtYV9sZW4oc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZykKK3sKKwlpZiAoZGV2LT5kbWFfb3BzKQorCQlyZXR1cm4gZGV2LT5kbWFfb3BzLT5kbWFfbGVuKGRldiwgc2cpOworCXJldHVybiBzZ19kbWFfbGVuKHNnKTsKK30KKworLyoqCisgKiBpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSAtIFByZXBhcmUgRE1BIHJlZ2lvbiB0byBiZSBhY2Nlc3NlZCBieSBDUFUKKyAqIEBkZXY6IFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBETUEgYWRkcmVzcyB3YXMgY3JlYXRlZAorICogQGFkZHI6IFRoZSBETUEgYWRkcmVzcworICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSByZWdpb24gaW4gYnl0ZXMKKyAqIEBkaXI6IFRoZSBkaXJlY3Rpb24gb2YgdGhlIERNQQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJCQkgICAgICB1NjQgYWRkciwKKwkJCQkJICAgICAgc2l6ZV90IHNpemUsCisJCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlpZiAoZGV2LT5kbWFfb3BzKQorCQlkZXYtPmRtYV9vcHMtPnN5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBhZGRyLCBzaXplLCBkaXIpOworCWVsc2UKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LT5kbWFfZGV2aWNlLCBhZGRyLCBzaXplLCBkaXIpOworfQorCisvKioKKyAqIGliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIC0gUHJlcGFyZSBETUEgcmVnaW9uIHRvIGJlIGFjY2Vzc2VkIGJ5IGRldmljZQorICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIERNQSBhZGRyZXNzIHdhcyBjcmVhdGVkCisgKiBAYWRkcjogVGhlIERNQSBhZGRyZXNzCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIHJlZ2lvbiBpbiBieXRlcworICogQGRpcjogVGhlIGRpcmVjdGlvbiBvZiB0aGUgRE1BCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJCQkgdTY0IGFkZHIsCisJCQkJCQkgc2l6ZV90IHNpemUsCisJCQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWlmIChkZXYtPmRtYV9vcHMpCisJCWRldi0+ZG1hX29wcy0+c3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGFkZHIsIHNpemUsIGRpcik7CisJZWxzZQorCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYtPmRtYV9kZXZpY2UsIGFkZHIsIHNpemUsIGRpcik7Cit9CisKKy8qKgorICogaWJfZG1hX2FsbG9jX2NvaGVyZW50IC0gQWxsb2NhdGUgbWVtb3J5IGFuZCBtYXAgaXQgZm9yIERNQQorICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIERNQSBhZGRyZXNzIGlzIHJlcXVlc3RlZAorICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSByZWdpb24gdG8gYWxsb2NhdGUgaW4gYnl0ZXMKKyAqIEBkbWFfaGFuZGxlOiBBIHBvaW50ZXIgZm9yIHJldHVybmluZyB0aGUgRE1BIGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbgorICogQGZsYWc6IG1lbW9yeSBhbGxvY2F0b3IgZmxhZ3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkICppYl9kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJCQkgICBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgdTY0ICpkbWFfaGFuZGxlLAorCQkJCQkgICBnZnBfdCBmbGFnKQoreworCWlmIChkZXYtPmRtYV9vcHMpCisJCXJldHVybiBkZXYtPmRtYV9vcHMtPmFsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZyk7CisJZWxzZSB7CisJCWRtYV9hZGRyX3QgaGFuZGxlOworCQl2b2lkICpyZXQ7CisKKwkJcmV0ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+ZG1hX2RldmljZSwgc2l6ZSwgJmhhbmRsZSwgZmxhZyk7CisJCSpkbWFfaGFuZGxlID0gaGFuZGxlOworCQlyZXR1cm4gcmV0OworCX0KK30KKworLyoqCisgKiBpYl9kbWFfZnJlZV9jb2hlcmVudCAtIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSBpYl9kbWFfYWxsb2NfY29oZXJlbnQoKQorICogQGRldjogVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIERNQSBhZGRyZXNzZXMgd2VyZSBhbGxvY2F0ZWQKKyAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgcmVnaW9uCisgKiBAY3B1X2FkZHI6IHRoZSBhZGRyZXNzIHJldHVybmVkIGJ5IGliX2RtYV9hbGxvY19jb2hlcmVudCgpCisgKiBAZG1hX2hhbmRsZTogdGhlIERNQSBhZGRyZXNzIHJldHVybmVkIGJ5IGliX2RtYV9hbGxvY19jb2hlcmVudCgpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9kbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsCisJCQkJCXNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKKwkJCQkJdTY0IGRtYV9oYW5kbGUpCit7CisJaWYgKGRldi0+ZG1hX29wcykKKwkJZGV2LT5kbWFfb3BzLT5mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOworCWVsc2UKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5kbWFfZGV2aWNlLCBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7Cit9CisKKy8qKgogICogaWJfcmVnX3BoeXNfbXIgLSBQcmVwYXJlcyBhIHZpcnR1YWxseSBhZGRyZXNzZWQgbWVtb3J5IHJlZ2lvbiBmb3IgdXNlCiAgKiAgIGJ5IGFuIEhDQS4KICAqIEBwZDogVGhlIHByb3RlY3Rpb24gZG9tYWluIGFzc29jaWF0ZWQgYXNzaWduZWQgdG8gdGhlIHJlZ2lzdGVyZWQgcmVnaW9uLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL3JkbWFfY20uaCBiL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmgKaW5kZXggZGViNWEwYS4uMzZjZDhhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL3JkbWFfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oCkBAIC03NywxMSArNzcsMzQgQEAKIAlpbnQgbnVtX3BhdGhzOwogfTsKIAorc3RydWN0IHJkbWFfY29ubl9wYXJhbSB7CisJY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhOworCXU4IHByaXZhdGVfZGF0YV9sZW47CisJdTggcmVzcG9uZGVyX3Jlc291cmNlczsKKwl1OCBpbml0aWF0b3JfZGVwdGg7CisJdTggZmxvd19jb250cm9sOworCXU4IHJldHJ5X2NvdW50OwkJLyogaWdub3JlZCB3aGVuIGFjY2VwdGluZyAqLworCXU4IHJucl9yZXRyeV9jb3VudDsKKwkvKiBGaWVsZHMgYmVsb3cgaWdub3JlZCBpZiBhIFFQIGlzIGNyZWF0ZWQgb24gdGhlIHJkbWFfY21faWQuICovCisJdTggc3JxOworCXUzMiBxcF9udW07Cit9OworCitzdHJ1Y3QgcmRtYV91ZF9wYXJhbSB7CisJY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhOworCXU4IHByaXZhdGVfZGF0YV9sZW47CisJc3RydWN0IGliX2FoX2F0dHIgYWhfYXR0cjsKKwl1MzIgcXBfbnVtOworCXUzMiBxa2V5OworfTsKKwogc3RydWN0IHJkbWFfY21fZXZlbnQgewogCWVudW0gcmRtYV9jbV9ldmVudF90eXBlCSBldmVudDsKIAlpbnQJCQkgc3RhdHVzOwotCXZvaWQJCQkqcHJpdmF0ZV9kYXRhOwotCXU4CQkJIHByaXZhdGVfZGF0YV9sZW47CisJdW5pb24geworCQlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtCWNvbm47CisJCXN0cnVjdCByZG1hX3VkX3BhcmFtCXVkOworCX0gcGFyYW07CiB9OwogCiBzdHJ1Y3QgcmRtYV9jbV9pZDsKQEAgLTIwNCwyNSArMjI3LDE3IEBACiBpbnQgcmRtYV9pbml0X3FwX2F0dHIoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0ciwKIAkJICAgICAgIGludCAqcXBfYXR0cl9tYXNrKTsKIAotc3RydWN0IHJkbWFfY29ubl9wYXJhbSB7Ci0JY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhOwotCXU4IHByaXZhdGVfZGF0YV9sZW47Ci0JdTggcmVzcG9uZGVyX3Jlc291cmNlczsKLQl1OCBpbml0aWF0b3JfZGVwdGg7Ci0JdTggZmxvd19jb250cm9sOwotCXU4IHJldHJ5X2NvdW50OwkJLyogaWdub3JlZCB3aGVuIGFjY2VwdGluZyAqLwotCXU4IHJucl9yZXRyeV9jb3VudDsKLQkvKiBGaWVsZHMgYmVsb3cgaWdub3JlZCBpZiBhIFFQIGlzIGNyZWF0ZWQgb24gdGhlIHJkbWFfY21faWQuICovCi0JdTggc3JxOwotCXUzMiBxcF9udW07Ci0JZW51bSBpYl9xcF90eXBlIHFwX3R5cGU7Ci19OwotCiAvKioKICAqIHJkbWFfY29ubmVjdCAtIEluaXRpYXRlIGFuIGFjdGl2ZSBjb25uZWN0aW9uIHJlcXVlc3QuCisgKiBAaWQ6IENvbm5lY3Rpb24gaWRlbnRpZmllciB0byBjb25uZWN0LgorICogQGNvbm5fcGFyYW06IENvbm5lY3Rpb24gaW5mb3JtYXRpb24gdXNlZCBmb3IgY29ubmVjdGVkIFFQcy4KICAqCiAgKiBVc2VycyBtdXN0IGhhdmUgcmVzb2x2ZWQgYSByb3V0ZSBmb3IgdGhlIHJkbWFfY21faWQgdG8gY29ubmVjdCB3aXRoCiAgKiBieSBoYXZpbmcgY2FsbGVkIHJkbWFfcmVzb2x2ZV9yb3V0ZSBiZWZvcmUgY2FsbGluZyB0aGlzIHJvdXRpbmUuCisgKgorICogVGhpcyBjYWxsIHdpbGwgZWl0aGVyIGNvbm5lY3QgdG8gYSByZW1vdGUgUVAgb3Igb2J0YWluIHJlbW90ZSBRUAorICogaW5mb3JtYXRpb24gZm9yIHVuY29ubmVjdGVkIHJkbWFfY21faWQncy4gIFRoZSBhY3R1YWwgb3BlcmF0aW9uIGlzCisgKiBiYXNlZCBvbiB0aGUgcmRtYV9jbV9pZCdzIHBvcnQgc3BhY2UuCiAgKi8KIGludCByZG1hX2Nvbm5lY3Qoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtKTsKIApAQCAtMjUzLDYgKzI2OCwyMSBAQAogaW50IHJkbWFfYWNjZXB0KHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqY29ubl9wYXJhbSk7CiAKIC8qKgorICogcmRtYV9ub3RpZnkgLSBOb3RpZmllcyB0aGUgUkRNQSBDTSBvZiBhbiBhc3luY2hyb25vdXMgZXZlbnQgdGhhdCBoYXMKKyAqIG9jY3VycmVkIG9uIHRoZSBjb25uZWN0aW9uLgorICogQGlkOiBDb25uZWN0aW9uIGlkZW50aWZpZXIgdG8gdHJhbnNpdGlvbiB0byBlc3RhYmxpc2hlZC4KKyAqIEBldmVudDogQXN5bmNocm9ub3VzIGV2ZW50LgorICoKKyAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgaW52b2tlZCBieSB1c2VycyB0byBub3RpZnkgdGhlIENNIG9mIHJlbGV2YW50CisgKiBjb21tdW5pY2F0aW9uIGV2ZW50cy4gIEV2ZW50cyB0aGF0IHNob3VsZCBiZSByZXBvcnRlZCB0byB0aGUgQ00gYW5kCisgKiB3aGVuIHRvIHJlcG9ydCB0aGVtIGFyZToKKyAqCisgKiBJQl9FVkVOVF9DT01NX0VTVCAtIFVzZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgb24gYSBjb25uZWN0ZWQKKyAqICAgIFFQIGJlZm9yZSBhbiBSVFUgaGFzIGJlZW4gcmVjZWl2ZWQuCisgKi8KK2ludCByZG1hX25vdGlmeShzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGVudW0gaWJfZXZlbnRfdHlwZSBldmVudCk7CisKKy8qKgogICogcmRtYV9yZWplY3QgLSBDYWxsZWQgdG8gcmVqZWN0IGEgY29ubmVjdGlvbiByZXF1ZXN0IG9yIHJlc3BvbnNlLgogICovCiBpbnQgcmRtYV9yZWplY3Qoc3RydWN0IHJkbWFfY21faWQgKmlkLCBjb25zdCB2b2lkICpwcml2YXRlX2RhdGEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvcmRtYV9jbV9pYi5oIGIvaW5jbHVkZS9yZG1hL3JkbWFfY21faWIuaAppbmRleCBlOGMzYWYxLi45YjE3NmRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvcmRtYV9jbV9pYi5oCisrKyBiL2luY2x1ZGUvcmRtYS9yZG1hX2NtX2liLmgKQEAgLTQ0LDQgKzQ0LDcgQEAKIGludCByZG1hX3NldF9pYl9wYXRocyhzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsCiAJCSAgICAgIHN0cnVjdCBpYl9zYV9wYXRoX3JlYyAqcGF0aF9yZWMsIGludCBudW1fcGF0aHMpOwogCisvKiBHbG9iYWwgcWtleSBmb3IgVUQgUVBzIGFuZCBtdWx0aWNhc3QgZ3JvdXBzLiAqLworI2RlZmluZSBSRE1BX1VEX1FLRVkgMHgwMTIzNDU2NworCiAjZW5kaWYgLyogUkRNQV9DTV9JQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvcmRtYV91c2VyX2NtLmggYi9pbmNsdWRlL3JkbWEvcmRtYV91c2VyX2NtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3MmFiOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcmRtYS9yZG1hX3VzZXJfY20uaApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgUkRNQV9VU0VSX0NNX0gKKyNkZWZpbmUgUkRNQV9VU0VSX0NNX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8cmRtYS9pYl91c2VyX3ZlcmJzLmg+CisjaW5jbHVkZSA8cmRtYS9pYl91c2VyX3NhLmg+CisKKyNkZWZpbmUgUkRNQV9VU0VSX0NNX0FCSV9WRVJTSU9OCTMKKworI2RlZmluZSBSRE1BX01BWF9QUklWQVRFX0RBVEEJCTI1NgorCitlbnVtIHsKKwlSRE1BX1VTRVJfQ01fQ01EX0NSRUFURV9JRCwKKwlSRE1BX1VTRVJfQ01fQ01EX0RFU1RST1lfSUQsCisJUkRNQV9VU0VSX0NNX0NNRF9CSU5EX0FERFIsCisJUkRNQV9VU0VSX0NNX0NNRF9SRVNPTFZFX0FERFIsCisJUkRNQV9VU0VSX0NNX0NNRF9SRVNPTFZFX1JPVVRFLAorCVJETUFfVVNFUl9DTV9DTURfUVVFUllfUk9VVEUsCisJUkRNQV9VU0VSX0NNX0NNRF9DT05ORUNULAorCVJETUFfVVNFUl9DTV9DTURfTElTVEVOLAorCVJETUFfVVNFUl9DTV9DTURfQUNDRVBULAorCVJETUFfVVNFUl9DTV9DTURfUkVKRUNULAorCVJETUFfVVNFUl9DTV9DTURfRElTQ09OTkVDVCwKKwlSRE1BX1VTRVJfQ01fQ01EX0lOSVRfUVBfQVRUUiwKKwlSRE1BX1VTRVJfQ01fQ01EX0dFVF9FVkVOVCwKKwlSRE1BX1VTRVJfQ01fQ01EX0dFVF9PUFRJT04sCisJUkRNQV9VU0VSX0NNX0NNRF9TRVRfT1BUSU9OLAorCVJETUFfVVNFUl9DTV9DTURfTk9USUZZCit9OworCisvKgorICogY29tbWFuZCBBQkkgc3RydWN0dXJlcy4KKyAqLworc3RydWN0IHJkbWFfdWNtX2NtZF9oZHIgeworCV9fdTMyIGNtZDsKKwlfX3UxNiBpbjsKKwlfX3UxNiBvdXQ7Cit9OworCitzdHJ1Y3QgcmRtYV91Y21fY3JlYXRlX2lkIHsKKwlfX3U2NCB1aWQ7CisJX191NjQgcmVzcG9uc2U7CisJX191MTYgcHM7CisJX191OCAgcmVzZXJ2ZWRbNl07Cit9OworCitzdHJ1Y3QgcmRtYV91Y21fY3JlYXRlX2lkX3Jlc3AgeworCV9fdTMyIGlkOworfTsKKworc3RydWN0IHJkbWFfdWNtX2Rlc3Ryb3lfaWQgeworCV9fdTY0IHJlc3BvbnNlOworCV9fdTMyIGlkOworCV9fdTMyIHJlc2VydmVkOworfTsKKworc3RydWN0IHJkbWFfdWNtX2Rlc3Ryb3lfaWRfcmVzcCB7CisJX191MzIgZXZlbnRzX3JlcG9ydGVkOworfTsKKworc3RydWN0IHJkbWFfdWNtX2JpbmRfYWRkciB7CisJX191NjQgcmVzcG9uc2U7CisJc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworCV9fdTMyIGlkOworfTsKKworc3RydWN0IHJkbWFfdWNtX3Jlc29sdmVfYWRkciB7CisJc3RydWN0IHNvY2thZGRyX2luNiBzcmNfYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGRzdF9hZGRyOworCV9fdTMyIGlkOworCV9fdTMyIHRpbWVvdXRfbXM7Cit9OworCitzdHJ1Y3QgcmRtYV91Y21fcmVzb2x2ZV9yb3V0ZSB7CisJX191MzIgaWQ7CisJX191MzIgdGltZW91dF9tczsKK307CisKK3N0cnVjdCByZG1hX3VjbV9xdWVyeV9yb3V0ZSB7CisJX191NjQgcmVzcG9uc2U7CisJX191MzIgaWQ7CisJX191MzIgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgcmRtYV91Y21fcXVlcnlfcm91dGVfcmVzcCB7CisJX191NjQgbm9kZV9ndWlkOworCXN0cnVjdCBpYl91c2VyX3BhdGhfcmVjIGliX3JvdXRlWzJdOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjX2FkZHI7CisJc3RydWN0IHNvY2thZGRyX2luNiBkc3RfYWRkcjsKKwlfX3UzMiBudW1fcGF0aHM7CisJX191OCBwb3J0X251bTsKKwlfX3U4IHJlc2VydmVkWzNdOworfTsKKworc3RydWN0IHJkbWFfdWNtX2Nvbm5fcGFyYW0geworCV9fdTMyIHFwX251bTsKKwlfX3UzMiByZXNlcnZlZDsKKwlfX3U4ICBwcml2YXRlX2RhdGFbUkRNQV9NQVhfUFJJVkFURV9EQVRBXTsKKwlfX3U4ICBwcml2YXRlX2RhdGFfbGVuOworCV9fdTggIHNycTsKKwlfX3U4ICByZXNwb25kZXJfcmVzb3VyY2VzOworCV9fdTggIGluaXRpYXRvcl9kZXB0aDsKKwlfX3U4ICBmbG93X2NvbnRyb2w7CisJX191OCAgcmV0cnlfY291bnQ7CisJX191OCAgcm5yX3JldHJ5X2NvdW50OworCV9fdTggIHZhbGlkOworfTsKKworc3RydWN0IHJkbWFfdWNtX3VkX3BhcmFtIHsKKwlfX3UzMiBxcF9udW07CisJX191MzIgcWtleTsKKwlzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgYWhfYXR0cjsKKwlfX3U4ICBwcml2YXRlX2RhdGFbUkRNQV9NQVhfUFJJVkFURV9EQVRBXTsKKwlfX3U4ICBwcml2YXRlX2RhdGFfbGVuOworCV9fdTggIHJlc2VydmVkWzddOworfTsKKworc3RydWN0IHJkbWFfdWNtX2Nvbm5lY3QgeworCXN0cnVjdCByZG1hX3VjbV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJX191MzIgaWQ7CisJX191MzIgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgcmRtYV91Y21fbGlzdGVuIHsKKwlfX3UzMiBpZDsKKwlfX3UzMiBiYWNrbG9nOworfTsKKworc3RydWN0IHJkbWFfdWNtX2FjY2VwdCB7CisJX191NjQgdWlkOworCXN0cnVjdCByZG1hX3VjbV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJX191MzIgaWQ7CisJX191MzIgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgcmRtYV91Y21fcmVqZWN0IHsKKwlfX3UzMiBpZDsKKwlfX3U4ICBwcml2YXRlX2RhdGFfbGVuOworCV9fdTggIHJlc2VydmVkWzNdOworCV9fdTggIHByaXZhdGVfZGF0YVtSRE1BX01BWF9QUklWQVRFX0RBVEFdOworfTsKKworc3RydWN0IHJkbWFfdWNtX2Rpc2Nvbm5lY3QgeworCV9fdTMyIGlkOworfTsKKworc3RydWN0IHJkbWFfdWNtX2luaXRfcXBfYXR0ciB7CisJX191NjQgcmVzcG9uc2U7CisJX191MzIgaWQ7CisJX191MzIgcXBfc3RhdGU7Cit9OworCitzdHJ1Y3QgcmRtYV91Y21fbm90aWZ5IHsKKwlfX3UzMiBpZDsKKwlfX3UzMiBldmVudDsKK307CisKK3N0cnVjdCByZG1hX3VjbV9nZXRfZXZlbnQgeworCV9fdTY0IHJlc3BvbnNlOworfTsKKworc3RydWN0IHJkbWFfdWNtX2V2ZW50X3Jlc3AgeworCV9fdTY0IHVpZDsKKwlfX3UzMiBpZDsKKwlfX3UzMiBldmVudDsKKwlfX3UzMiBzdGF0dXM7CisJdW5pb24geworCQlzdHJ1Y3QgcmRtYV91Y21fY29ubl9wYXJhbSBjb25uOworCQlzdHJ1Y3QgcmRtYV91Y21fdWRfcGFyYW0gICB1ZDsKKwl9IHBhcmFtOworfTsKKworI2VuZGlmIC8qIFJETUFfVVNFUl9DTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvcmUuaCBiL2luY2x1ZGUvc291bmQvY29yZS5oCmluZGV4IGE5OTRiZWEuLjUyMWYwMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29yZS5oCisrKyBiL2luY2x1ZGUvc291bmQvY29yZS5oCkBAIC0xMzIsOCArMTMyLDEwIEBACiAJaW50IHNodXRkb3duOwkJCS8qIHRoaXMgY2FyZCBpcyBnb2luZyBkb3duICovCiAJaW50IGZyZWVfb25fbGFzdF9jbG9zZTsJCS8qIGZyZWUgaW4gY29udGV4dCBvZiBmaWxlX3JlbGVhc2UgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBzaHV0ZG93bl9zbGVlcDsKLQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7Ci0Jc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldjsJCS8qIGRldmljZSBhc3NpZ25lZCB0byB0aGlzIGNhcmQgKi8KKyNpZm5kZWYgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQKKwlzdHJ1Y3QgZGV2aWNlICpjYXJkX2RldjsJLyogY2FyZFggb2JqZWN0IGZvciBzeXNmcyAqLworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUE0KIAl1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGU7CS8qIHBvd2VyIHN0YXRlICovCkBAIC0xOTEsNiArMTkzLDE2IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwkJLyogZGV2aWNlIGZvciBzeXNmcyAqLwogfTsKIAorLyogcmV0dXJuIGEgZGV2aWNlIHBvaW50ZXIgbGlua2VkIHRvIGVhY2ggc291bmQgZGV2aWNlIGFzIGEgcGFyZW50ICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKnNuZF9jYXJkX2dldF9kZXZpY2VfbGluayhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCit7CisjaWZkZWYgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQKKwlyZXR1cm4gY2FyZCA/IGNhcmQtPmRldiA6IE5VTEw7CisjZWxzZQorCXJldHVybiBjYXJkID8gY2FyZC0+Y2FyZF9kZXYgOiBOVUxMOworI2VuZGlmCit9CisKIC8qIHNvdW5kLmMgKi8KIAogZXh0ZXJuIGludCBzbmRfbWFqb3I7CkBAIC0yNTcsNyArMjY5LDcgQEAKIGludCBzbmRfY2FyZF9maWxlX3JlbW92ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBmaWxlICpmaWxlKTsKIAogI2lmbmRlZiBzbmRfY2FyZF9zZXRfZGV2Ci0jZGVmaW5lIHNuZF9jYXJkX3NldF9kZXYoY2FyZCxkZXZwdHIpICgoY2FyZCktPnBhcmVudCA9IChkZXZwdHIpKQorI2RlZmluZSBzbmRfY2FyZF9zZXRfZGV2KGNhcmQsZGV2cHRyKSAoKGNhcmQpLT5kZXYgPSAoZGV2cHRyKSkKICNlbmRpZgogCiAvKiBkZXZpY2UuYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmggYi9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaAppbmRleCBjODU0NjQ3Li4xY2Q0ZjY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaApAQCAtNTYsNiArNTYsNyBAQAogCXNpemVfdCBtbWFwX2J5dGVzOwogCWNoYXIgKmJ1ZmZlcjsJCQkJLyogdm1hbGxvY2F0ZWQgcGVyaW9kICovCiAJc2l6ZV90IGJ1ZmZlcl91c2VkOwkJCS8qIHVzZWQgbGVuZ3RoIGZyb20gcGVyaW9kIGJ1ZmZlciAqLworCXN0cnVjdCBtdXRleCBwYXJhbXNfbG9jazsKICNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUwogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luX2ZpcnN0OwogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luX2xhc3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaCBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCmluZGV4IDE3MTM3ZjMuLjIwZjdiYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oCkBAIC0xLDMgKzEsMyBAQAogLyogaW5jbHVkZS92ZXJzaW9uLmguICBHZW5lcmF0ZWQgYnkgYWxzYS9rc3luYyBzY3JpcHQuICAqLwotI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4xMyIKLSNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIgKFR1ZSBOb3YgMjggMTQ6MDc6MjQgMjAwNiBVVEMpIgorI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4xNHJjMSIKKyNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIgKFR1ZSBKYW4gMDkgMDk6NTY6MTcgMjAwNyBVVEMpIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC95bWZwY2kuaCBiL2luY2x1ZGUvc291bmQveW1mcGNpLmgKaW5kZXggZDQxY2RhOS4uZjM1MTRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC95bWZwY2kuaAorKysgYi9pbmNsdWRlL3NvdW5kL3ltZnBjaS5oCkBAIC0yODYsNyArMjg2LDcgQEAKIAlpbnQgaXJxOwogCiAJdW5zaWduZWQgaW50IGRldmljZV9pZDsJLyogUENJIGRldmljZSBJRCAqLwotCXVuc2lnbmVkIGludCByZXY7CS8qIFBDSSByZXZpc2lvbiAqLworCXVuc2lnbmVkIGNoYXIgcmV2OwkvKiBQQ0kgcmV2aXNpb24gKi8KIAl1bnNpZ25lZCBsb25nIHJlZ19hcmVhX3BoeXM7CiAJdm9pZCBfX2lvbWVtICpyZWdfYXJlYV92aXJ0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzX3JlZ19hcmVhOwpAQCAtMzQ1LDcgKzM0NSw2IEBACiAJc3RydWN0IHNuZF9rY29udHJvbCAqc3BkaWZfcGNtX2N0bDsKIAlpbnQgbW9kZV9kdXA0Y2g7CiAJaW50IHJlYXJfb3BlbmVkOwotCWludCByZWFyX3N3YXA7CiAJaW50IHNwZGlmX29wZW5lZDsKIAlzdHJ1Y3QgewogCQl1MTYgbGVmdDsKQEAgLTM3OCw3ICszNzcsNyBAQAogaW50IHNuZF95bWZwY2lfcGNtMihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKIGludCBzbmRfeW1mcGNpX3BjbV9zcGRpZihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKIGludCBzbmRfeW1mcGNpX3BjbV80Y2goc3RydWN0IHNuZF95bWZwY2kgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7Ci1pbnQgc25kX3ltZnBjaV9taXhlcihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IHJlYXJfc3dpdGNoLCBpbnQgcmVhcl9zd2FwKTsKK2ludCBzbmRfeW1mcGNpX21peGVyKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgcmVhcl9zd2l0Y2gpOwogaW50IHNuZF95bWZwY2lfdGltZXIoc3RydWN0IHNuZF95bWZwY2kgKmNoaXAsIGludCBkZXZpY2UpOwogCiAjZW5kaWYgLyogX19TT1VORF9ZTUZQQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9tYnhmYi5oIGIvaW5jbHVkZS92aWRlby9tYnhmYi5oCmluZGV4IDNiZGUwZjUuLjIwYjkwMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vbWJ4ZmIuaAorKysgYi9pbmNsdWRlL3ZpZGVvL21ieGZiLmgKQEAgLTEsNiArMSw5IEBACiAjaWZuZGVmIF9fTUJYX0ZCX0gKICNkZWZpbmUgX19NQlhfRkJfSAogCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKIHN0cnVjdCBtYnhmYl92YWwgewogCXVuc2lnbmVkIGludAlkZWZ2YWw7CiAJdW5zaWduZWQgaW50CW1pbjsKQEAgLTI1LDQgKzI4LDMyIEBACiAJCWludCAoKnJlbW92ZSkoc3RydWN0IGZiX2luZm8gKmZiKTsKIH07CiAKKy8qIHBsYW5hciAqLworI2RlZmluZSBNQlhGQl9GTVRfWVVWMTIJCTAKKworLyogcGFja2VkICovCisjZGVmaW5lIE1CWEZCX0ZNVF9VWTBWWTEJMQorI2RlZmluZSBNQlhGQl9GTVRfVlkwVVkxCTIKKyNkZWZpbmUgTUJYRkJfRk1UX1kwVVkxVgkzCisjZGVmaW5lIE1CWEZCX0ZNVF9ZMFZZMVUJNAorc3RydWN0IG1ieGZiX292ZXJsYXlTZXR1cCB7CisJX191MzIgZW5hYmxlOworCV9fdTMyIHgsIHk7CisJX191MzIgd2lkdGgsIGhlaWdodDsKKwlfX3UzMiBhbHBoYTsKKwlfX3UzMiBmbXQ7CisJX191MzIgbWVtX29mZnNldDsKKwlfX3UzMiBzY2FsZWRfd2lkdGg7CisJX191MzIgc2NhbGVkX2hlaWdodDsKKworCS8qIEZpbGxlZCBieSB0aGUgZHJpdmVyICovCisJX191MzIgVV9vZmZzZXQ7CisJX191MzIgVl9vZmZzZXQ7CisKKwlfX3UxNiBZX3N0cmlkZTsKKwlfX3UxNiBVVl9zdHJpZGU7Cit9OworCisjZGVmaW5lIE1CWEZCX0lPQ1hfT1ZFUkxBWQlfSU9XUigweEY0LCAweDAwLHN0cnVjdCBtYnhmYl9vdmVybGF5U2V0dXApCisKICNlbmRpZiAvKiBfX01CWF9GQl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3BtM2ZiLmggYi9pbmNsdWRlL3ZpZGVvL3BtM2ZiLmgKaW5kZXggYWMwMjEzNy4uOTRjN2QyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9wbTNmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vcG0zZmIuaApAQCAtNjA3LDE2ICs2MDcsMTYgQEAKICNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVPcgkJCQkJMHhhYzk4CiAJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9SZWFkRGlzYWJsZQkJCTA8PDAKIAkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX1JlYWRFbmFibGUJCQkxPDwwCi0JI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9TdHJpcGVQaXRjaChzcCkJKCgoc3ApJjB4Nyk8PDIKLQkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX1N0cmlwZUhlaWdodChzaCkJKCgoc2gpJjB4Nyk8PDcKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX1N0cmlwZVBpdGNoKHNwKQkoKChzcCkmMHg3KTw8MikKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX1N0cmlwZUhlaWdodChzaCkJKCgoc2gpJjB4Nyk8PDcpCiAJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9FbmFibGUwCQkJMTw8OAogCSNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVfRW5hYmxlMQkJCTE8PDkKIAkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX0VuYWJsZTIJCQkxPDwxMAogCSNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVfRW5hYmxlMwkJCTE8PDExCi0JI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9MYXlvdXQwKGwpCQkoKChsKSYweDMpPDwxMgotCSNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVfTGF5b3V0MShsKQkJKCgobCkmMHgzKTw8MTQKLQkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX0xheW91dDIobCkJCSgoKGwpJjB4Myk8PDE2Ci0JI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9MYXlvdXQzKGwpCQkoKChsKSYweDMpPDwxOAorCSNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVfTGF5b3V0MChsKQkJKCgobCkmMHgzKTw8MTIpCisJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9MYXlvdXQxKGwpCQkoKChsKSYweDMpPDwxNCkKKwkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX0xheW91dDIobCkJCSgoKGwpJjB4Myk8PDE2KQorCSNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVfTGF5b3V0MyhsKQkJKCgobCkmMHgzKTw8MTgpCiAJI2RlZmluZSBQTTNGQkRlc3RSZWFkTW9kZV9PcmlnaW4wCQkJMTw8MjAKIAkjZGVmaW5lIFBNM0ZCRGVzdFJlYWRNb2RlX09yaWdpbjEJCQkxPDwyMQogCSNkZWZpbmUgUE0zRkJEZXN0UmVhZE1vZGVfT3JpZ2luMgkJCTE8PDIyCkBAIC02NDAsMTYgKzY0MCwxNiBAQAogI2RlZmluZSBQTTNGQlNvdXJjZVJlYWRNb2RlT3IJCQkJCTB4YWNhOAogCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9SZWFkRGlzYWJsZQkJCSgwPDwwKQogCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9SZWFkRW5hYmxlCQkJKDE8PDApCi0JI2RlZmluZSBQTTNGQlNvdXJjZVJlYWRNb2RlX1N0cmlwZVBpdGNoKHNwKQkoKChzcCkmMHg3KTw8MgotCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9TdHJpcGVIZWlnaHQoc2gpCSgoKHNoKSYweDcpPDw3Ci0JI2RlZmluZSBQTTNGQlNvdXJjZVJlYWRNb2RlX0xheW91dChsKQkJKCgobCkmMHgzKTw8OAorCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9TdHJpcGVQaXRjaChzcCkJKCgoc3ApJjB4Nyk8PDIpCisJI2RlZmluZSBQTTNGQlNvdXJjZVJlYWRNb2RlX1N0cmlwZUhlaWdodChzaCkJKCgoc2gpJjB4Nyk8PDcpCisJI2RlZmluZSBQTTNGQlNvdXJjZVJlYWRNb2RlX0xheW91dChsKQkJKCgobCkmMHgzKTw8OCkKIAkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfT3JpZ2luCQkJMTw8MTAKIAkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfQmxvY2tpbmcJCQkxPDwxMQogCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9Vc2VyVGV4ZWxDb29yZAkJMTw8MTMKIAkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfV3JhcFhFbmFibGUJCQkxPDwxNAogCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9XcmFwWUVuYWJsZQkJCTE8PDE1Ci0JI2RlZmluZSBQTTNGQlNvdXJjZVJlYWRNb2RlX1dyYXBYKHcpCQkoKCh3KSYweGYpPDwxNgotCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9XcmFwWSh3KQkJKCgodykmMHhmKTw8MjAKKwkjZGVmaW5lIFBNM0ZCU291cmNlUmVhZE1vZGVfV3JhcFgodykJCSgoKHcpJjB4Zik8PDE2KQorCSNkZWZpbmUgUE0zRkJTb3VyY2VSZWFkTW9kZV9XcmFwWSh3KQkJKCgodykmMHhmKTw8MjApCiAJI2RlZmluZSBQTTNGQlNvdXJjZVJlYWRNb2RlX0V4dGVybmFsU291cmNlRGF0YQkJMTw8MjQKICNkZWZpbmUgUE0zRkJXcml0ZUJ1ZmZlckFkZHIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGIwMDAKICNkZWZpbmUgUE0zRkJXcml0ZUJ1ZmZlckFkZHIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGIwMDgKQEAgLTk0Miw3ICs5NDIsNyBAQAogI2RlZmluZSBQTTNXaW5kb3cJCQkJCQkweDg5ODAKIAkjZGVmaW5lIFBNM1dpbmRvd19Gb3JjZUxCVXBkYXRlCQkJCTE8PDMKIAkjZGVmaW5lIFBNM1dpbmRvd19MQlVwZGF0ZVNvdXJjZQkJCTE8PDQKLQkjZGVmaW5lIFBNM1dpbmRvd19GcmFtZUNvdW50KGMpCQkJCSgoKGMpJjB4ZmYpPDw5CisJI2RlZmluZSBQTTNXaW5kb3dfRnJhbWVDb3VudChjKQkJCQkoKChjKSYweGZmKTw8OSkKIAkjZGVmaW5lIFBNM1dpbmRvd19TdGVuY2lsRkNQCQkJCTE8PDE3CiAJI2RlZmluZSBQTTNXaW5kb3dfRGVwdGhGQ1AJCQkJMTw8MTgKIAkjZGVmaW5lIFBNM1dpbmRvd19PdmVycmlkZVdyaXRlRmlsdGVyaW5nCQkxPDwxOQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zc3RmYi5oIGIvaW5jbHVkZS92aWRlby9zc3RmYi5oCmluZGV4IDVkYmY1ZTcuLmJhYTE2M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vc3N0ZmIuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3NzdGZiLmgKQEAgLTExOSw3ICsxMTksNyBAQAogI2RlZmluZSBCQUNLUE9SQ0gJCTB4MDIwOAogI2RlZmluZSBWSURFT0RJTUVOU0lPTlMJCTB4MDIwYwogI2RlZmluZSBGQklJTklUMAkJMHgwMjEwCQkvKiBtaXNjK2ZpZm8gIGNvbnRyb2xzICovCi0jICBkZWZpbmUgRU5fVkdBX1BBU1NUSFJPVUdICSAgQklUKDApCisjICBkZWZpbmUgRElTX1ZHQV9QQVNTVEhST1VHSAkgIEJJVCgwKQogIyAgZGVmaW5lIEZCSV9SRVNFVAkJICBCSVQoMSkKICMgIGRlZmluZSBGSUZPX1JFU0VUCQkgIEJJVCgyKQogI2RlZmluZSBGQklJTklUMQkJMHgwMjE0CQkvKiBQQ0kgKyB2aWRlbyBjb250cm9scyAqLwpAQCAtMjUxLDcgKzI1MSw3IEBACiAjICBkZWZpbmUgREFDUkVHX0lDU19DTEsxX0EJICAwCS8qIGJpdDQgKi8KIAogLyogc3N0IGRlZmF1bHQgaW5pdCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgRkJJSU5JVDBfREVGQVVMVCBFTl9WR0FfUEFTU1RIUk9VR0gKKyNkZWZpbmUgRkJJSU5JVDBfREVGQVVMVCBESVNfVkdBX1BBU1NUSFJPVUdICiAKICNkZWZpbmUgRkJJSU5JVDFfREVGQVVMVCAJXAogCSgJCQlcCkBAIC0yOTYsNiArMjk2LDExIEBACiAgKgogICovCiAKKy8qIGlvY3RsIHRvIGVuYWJsZS9kaXNhYmxlIFZHQSBwYXNzdGhyb3VnaCAqLworI2RlZmluZSBTU1RGQl9TRVRfVkdBUEFTUwlfSU9XKCdGJywgMHhkZCwgX191MzIpCisjZGVmaW5lIFNTVEZCX0dFVF9WR0FQQVNTCV9JT1IoJ0YnLCAweGRkLCBfX3UzMikKKworCiAvKiB1c2VkIHRvIGtub3cgd2l0Y2ggY2xvY2sgdG8gc2V0ICovCiBlbnVtIHsKIAlWSURfQ0xPQ0s9MCwKQEAgLTMxNyw3ICszMjIsNyBAQAogfTsKIAogc3RydWN0IGRhY19zd2l0Y2ggewotCWNoYXIgKiBuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50ICgqZGV0ZWN0KSAoc3RydWN0IGZiX2luZm8gKmluZm8pOwogCWludCAoKnNldF9wbGwpIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IHBsbF90aW1pbmcgKnQsIGNvbnN0IGludCBjbG9jayk7CiAJdm9pZCAoKnNldF92aWRtb2QpIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgaW50IGJwcCk7CkBAIC0zNDUsNyArMzUwLDcgQEAKIAlzdHJ1Y3QgcGNpX2RldgkJKmRldjsKIAlpbnQJdHlwZTsKIAl1OAlyZXZpc2lvbjsKLQlpbnQJZ2Z4X2Nsb2NrOwkvKiBzdGF0dXMgKi8KKwl1OAl2Z2FwYXNzOwkvKiBWR0EgcGFzcyB0aHJvdWdoOiAxPWVuYWJsZWQsIDA9ZGlzYWJsZWQgKi8KIH07CiAKICNlbmRpZiAvKiBfU1NURkJfSF8gKi8KZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCAxNGQ0ODQ2Li5hM2Y4M2UyIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0zMDQsNiArMzA0LDE1IEBACiAKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAorY29uZmlnIFRBU0tfSU9fQUNDT1VOVElORworCWJvb2wgIkVuYWJsZSBwZXItdGFzayBzdG9yYWdlIEkvTyBhY2NvdW50aW5nIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVEFTS19YQUNDVAorCWhlbHAKKwkgIENvbGxlY3QgaW5mb3JtYXRpb24gb24gdGhlIG51bWJlciBvZiBieXRlcyBvZiBzdG9yYWdlIEkvTyB3aGljaCB0aGlzCisJICB0YXNrIGhhcyBjYXVzZWQuCisKKwkgIFNheSBOIGlmIHVuc3VyZS4KKwogY29uZmlnIFNZU0NUTAogCWJvb2wKIApAQCAtMzM5LDcgKzM0OCw3IEBACiAJICBJZiB1bnN1cmUgc2F5IFkgaGVyZS4KIAogY29uZmlnIEtBTExTWU1TCi0JIGJvb2wgIkxvYWQgYWxsIHN5bWJvbHMgZm9yIGRlYnVnZ2luZy9ra3N5bW9vcHMiIGlmIEVNQkVEREVECisJIGJvb2wgIkxvYWQgYWxsIHN5bWJvbHMgZm9yIGRlYnVnZ2luZy9rc3ltb29wcyIgaWYgRU1CRURERUQKIAkgZGVmYXVsdCB5CiAJIGhlbHAKIAkgICBTYXkgWSBoZXJlIHRvIGxldCB0aGUga2VybmVsIHByaW50IG91dCBzeW1ib2xpYyBjcmFzaCBpbmZvcm1hdGlvbiBhbmQKQEAgLTQ0MSw3ICs0NTAsNyBAQAogCiBjb25maWcgU0xBQgogCWRlZmF1bHQgeQotCWJvb2wgIlVzZSBmdWxsIFNMQUIgYWxsb2NhdG9yIiBpZiBFTUJFRERFRAorCWJvb2wgIlVzZSBmdWxsIFNMQUIgYWxsb2NhdG9yIiBpZiAoRU1CRURERUQgJiYgIVNNUCAmJiAhU1BBUlNFTUVNKQogCWhlbHAKIAkgIERpc2FibGluZyB0aGlzIHJlcGxhY2VzIHRoZSBhZHZhbmNlZCBTTEFCIGFsbG9jYXRvciBhbmQKIAkgIGttYWxsb2Mgc3VwcG9ydCB3aXRoIHRoZSBkcmFzdGljYWxseSBzaW1wbGVyIFNMT0IgYWxsb2NhdG9yLgpAQCAtNDUyLDEwICs0NjEsMTAgQEAKIAlkZWZhdWx0IHkKIAlib29sICJFbmFibGUgVk0gZXZlbnQgY291bnRlcnMgZm9yIC9wcm9jL3Ztc3RhdCIgaWYgRU1CRURERUQKIAloZWxwCi0JICBWTSBldmVudCBjb3VudGVycyBhcmUgb25seSBuZWVkZWQgdG8gZm9yIGV2ZW50IGNvdW50cyB0byBiZQotCSAgc2hvd24uIFRoZXkgaGF2ZSBubyBmdW5jdGlvbiBmb3IgdGhlIGtlcm5lbCBpdHNlbGYuIFRoaXMKLQkgIG9wdGlvbiBhbGxvd3MgdGhlIGRpc2FibGluZyBvZiB0aGUgVk0gZXZlbnQgY291bnRlcnMuCi0JICAvcHJvYy92bXN0YXQgd2lsbCBvbmx5IHNob3cgcGFnZSBjb3VudHMuCisJICBWTSBldmVudCBjb3VudGVycyBhcmUgbmVlZGVkIGZvciBldmVudCBjb3VudHMgdG8gYmUgc2hvd24uCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIGRpc2FibGluZyBvZiB0aGUgVk0gZXZlbnQgY291bnRlcnMKKwkgIG9uIEVNQkVEREVEIHN5c3RlbXMuICAvcHJvYy92bXN0YXQgd2lsbCBvbmx5IHNob3cgcGFnZSBjb3VudHMKKwkgIGlmIFZNIGV2ZW50IGNvdW50ZXJzIGFyZSBkaXNhYmxlZC4KIAogZW5kbWVudQkJIyBHZW5lcmFsIHNldHVwCiAKZGlmZiAtLWdpdCBhL2luaXQvaW5pdHJhbWZzLmMgYi9pbml0L2luaXRyYW1mcy5jCmluZGV4IDg1ZjA0MDMuLjRmYTBmNzkgMTAwNjQ0Ci0tLSBhL2luaXQvaW5pdHJhbWZzLmMKKysrIGIvaW5pdC9pbml0cmFtZnMuYwpAQCAtNTI2LDcgKzUyNiw3IEBACiAKICNlbmRpZgogCi12b2lkIF9faW5pdCBwb3B1bGF0ZV9yb290ZnModm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHBvcHVsYXRlX3Jvb3Rmcyh2b2lkKQogewogCWNoYXIgKmVyciA9IHVucGFja190b19yb290ZnMoX19pbml0cmFtZnNfc3RhcnQsCiAJCQkgX19pbml0cmFtZnNfZW5kIC0gX19pbml0cmFtZnNfc3RhcnQsIDApOwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJCQl1bnBhY2tfdG9fcm9vdGZzKChjaGFyICopaW5pdHJkX3N0YXJ0LAogCQkJCWluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQsIDApOwogCQkJZnJlZV9pbml0cmQoKTsKLQkJCXJldHVybjsKKwkJCXJldHVybiAwOwogCQl9CiAJCXByaW50aygiaXQgaXNuJ3QgKCVzKTsgbG9va3MgbGlrZSBhbiBpbml0cmRcbiIsIGVycik7CiAJCWZkID0gc3lzX29wZW4oIi9pbml0cmQuaW1hZ2UiLCBPX1dST05MWXxPX0NSRUFULCAwNzAwKTsKQEAgLTU2NSw0ICs1NjUsNiBAQAogI2VuZGlmCiAJfQogI2VuZGlmCisJcmV0dXJuIDA7CiB9Cityb290ZnNfaW5pdGNhbGwocG9wdWxhdGVfcm9vdGZzKTsKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggMTE3NGFlMy4uOGI0YTdkNyAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTUwLDYgKzUwLDggQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+CkBAIC05MSw4ICs5Myw2IEBACiBleHRlcm4gdm9pZCBwcmlvX3RyZWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHJhZGl4X3RyZWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKTsKLWV4dGVybiB2b2lkIHBvcHVsYXRlX3Jvb3Rmcyh2b2lkKTsKLWV4dGVybiB2b2lkIGRyaXZlcl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcHJlcGFyZV9uYW1lc3BhY2Uodm9pZCk7CiAjaWZkZWYJQ09ORklHX0FDUEkKIGV4dGVybiB2b2lkIGFjcGlfZWFybHlfaW5pdCh2b2lkKTsKQEAgLTUzMCw2ICs1MzAsMTEgQEAKIAlwYXJzZV9hcmdzKCJCb290aW5nIGtlcm5lbCIsIGNvbW1hbmRfbGluZSwgX19zdGFydF9fX3BhcmFtLAogCQkgICBfX3N0b3BfX19wYXJhbSAtIF9fc3RhcnRfX19wYXJhbSwKIAkJICAgJnVua25vd25fYm9vdG9wdGlvbik7CisJaWYgKCFpcnFzX2Rpc2FibGVkKCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic3RhcnRfa2VybmVsKCk6IGJ1ZzogaW50ZXJydXB0cyB3ZXJlICIKKwkJCQkiZW5hYmxlZCAqdmVyeSogZWFybHksIGZpeGluZyBpdFxuIik7CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJfQogCXNvcnRfbWFpbl9leHRhYmxlKCk7CiAJdHJhcF9pbml0KCk7CiAJcmN1X2luaXQoKTsKQEAgLTYyNCw4ICs2MjksNiBAQAogfQogX19zZXR1cCgiaW5pdGNhbGxfZGVidWciLCBpbml0Y2FsbF9kZWJ1Z19zZXR1cCk7CiAKLXN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGRfcmVhcGVyID0gJmluaXRfdGFzazsKLQogZXh0ZXJuIGluaXRjYWxsX3QgX19pbml0Y2FsbF9zdGFydFtdLCBfX2luaXRjYWxsX2VuZFtdOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZG9faW5pdGNhbGxzKHZvaWQpCkBAIC02OTIsNyArNjk1LDcgQEAKIAlkb19pbml0Y2FsbHMoKTsKIH0KIAotc3RhdGljIHZvaWQgZG9fcHJlX3NtcF9pbml0Y2FsbHModm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBkb19wcmVfc21wX2luaXRjYWxscyh2b2lkKQogewogCWV4dGVybiBpbnQgc3Bhd25fa3NvZnRpcnFkKHZvaWQpOwogI2lmZGVmIENPTkZJR19TTVAKQEAgLTcyNSw3ICs3MjgsNyBAQAogCSAqIGFzc3VtcHRpb25zIGFib3V0IHdoZXJlIGluIHRoZSB0YXNrIGFycmF5IHRoaXMKIAkgKiBjYW4gYmUgZm91bmQuCiAJICovCi0JY2hpbGRfcmVhcGVyID0gY3VycmVudDsKKwlpbml0X3BpZF9ucy5jaGlsZF9yZWFwZXIgPSBjdXJyZW50OwogCiAJY2FkX3BpZCA9IHRhc2tfcGlkKGN1cnJlbnQpOwogCkBAIC03MzgsMTIgKzc0MSw2IEBACiAKIAljcHVzZXRfaW5pdF9zbXAoKTsKIAotCS8qCi0JICogRG8gdGhpcyBiZWZvcmUgaW5pdGNhbGxzLCBiZWNhdXNlIHNvbWUgZHJpdmVycyB3YW50IHRvIGFjY2VzcwotCSAqIGZpcm13YXJlIGZpbGVzLgotCSAqLwotCXBvcHVsYXRlX3Jvb3RmcygpOwotCiAJZG9fYmFzaWNfc2V0dXAoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9pbml0L3ZlcnNpb24uYyBiL2luaXQvdmVyc2lvbi5jCmluZGV4IDhmMjgzNDQuLjZjMDFlYzEgMTAwNjQ0Ci0tLSBhL2luaXQvdmVyc2lvbi5jCisrKyBiL2luaXQvdmVyc2lvbi5jCkBAIC0zNCw2ICszNCwxMiBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfdXRzX25zKTsKIAorLyogRklYRUQgU1RSSU5HUyEgRG9uJ3QgdG91Y2ghICovCiBjb25zdCBjaGFyIGxpbnV4X2Jhbm5lcltdID0KIAkiTGludXggdmVyc2lvbiAiIFVUU19SRUxFQVNFICIgKCIgTElOVVhfQ09NUElMRV9CWSAiQCIKIAlMSU5VWF9DT01QSUxFX0hPU1QgIikgKCIgTElOVVhfQ09NUElMRVIgIikgIiBVVFNfVkVSU0lPTiAiXG4iOworCitjb25zdCBjaGFyIGxpbnV4X3Byb2NfYmFubmVyW10gPQorCSIlcyB2ZXJzaW9uICVzIgorCSIgKCIgTElOVVhfQ09NUElMRV9CWSAiQCIgTElOVVhfQ09NUElMRV9IT1NUICIpIgorCSIgKCIgTElOVVhfQ09NUElMRVIgIikgJXNcbiI7CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggM2FjYzE2Ni4uMDI3MTdmNyAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiBzdGF0aWMgc3NpemVfdCBtcXVldWVfcmVhZF9maWxlKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdV9kYXRhLAogCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICogb2ZmKQogewotCXN0cnVjdCBtcXVldWVfaW5vZGVfaW5mbyAqaW5mbyA9IE1RVUVVRV9JKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgbXF1ZXVlX2lub2RlX2luZm8gKmluZm8gPSBNUVVFVUVfSShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAljaGFyIGJ1ZmZlcltGSUxFTlRfU0laRV07CiAJc2l6ZV90IHNsZW47CiAJbG9mZl90IG87CkBAIC0zNTQsMTMgKzM1NCwxMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCSpvZmYgPSBvICsgY291bnQ7Ci0JZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfYXRpbWUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwlmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2F0aW1lID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbnQgbXF1ZXVlX2ZsdXNoX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIGZsX293bmVyX3QgaWQpCiB7Ci0Jc3RydWN0IG1xdWV1ZV9pbm9kZV9pbmZvICppbmZvID0gTVFVRVVFX0koZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBtcXVldWVfaW5vZGVfaW5mbyAqaW5mbyA9IE1RVUVVRV9JKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCiAJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIAlpZiAodGFza190Z2lkKGN1cnJlbnQpID09IGluZm8tPm5vdGlmeV9vd25lcikKQEAgLTM3Miw3ICszNzIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IG1xdWV1ZV9wb2xsX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcG9sbF90YWIpCiB7Ci0Jc3RydWN0IG1xdWV1ZV9pbm9kZV9pbmZvICppbmZvID0gTVFVRVVFX0koZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBtcXVldWVfaW5vZGVfaW5mbyAqaW5mbyA9IE1RVUVVRV9JKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWludCByZXR2YWwgPSAwOwogCiAJcG9sbF93YWl0KGZpbHAsICZpbmZvLT53YWl0X3EsIHBvbGxfdGFiKTsKQEAgLTgzNiw3ICs4MzYsNyBAQAogCWlmICh1bmxpa2VseSghZmlscCkpCiAJCWdvdG8gb3V0OwogCi0JaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKHVubGlrZWx5KGZpbHAtPmZfb3AgIT0gJm1xdWV1ZV9maWxlX29wZXJhdGlvbnMpKQogCQlnb3RvIG91dF9mcHV0OwogCWluZm8gPSBNUVVFVUVfSShpbm9kZSk7CkBAIC05MTksNyArOTE5LDcgQEAKIAlpZiAodW5saWtlbHkoIWZpbHApKQogCQlnb3RvIG91dDsKIAotCWlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWlmICh1bmxpa2VseShmaWxwLT5mX29wICE9ICZtcXVldWVfZmlsZV9vcGVyYXRpb25zKSkKIAkJZ290byBvdXRfZnB1dDsKIAlpbmZvID0gTVFVRVVFX0koaW5vZGUpOwpAQCAtMTA1Niw3ICsxMDU2LDcgQEAKIAlpZiAoIWZpbHApCiAJCWdvdG8gb3V0OwogCi0JaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKHVubGlrZWx5KGZpbHAtPmZfb3AgIT0gJm1xdWV1ZV9maWxlX29wZXJhdGlvbnMpKQogCQlnb3RvIG91dF9mcHV0OwogCWluZm8gPSBNUVVFVUVfSShpbm9kZSk7CkBAIC0xMTI2LDcgKzExMjYsNyBAQAogCWlmICghZmlscCkKIAkJZ290byBvdXQ7CiAKLQlpbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCWlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpZiAodW5saWtlbHkoZmlscC0+Zl9vcCAhPSAmbXF1ZXVlX2ZpbGVfb3BlcmF0aW9ucykpCiAJCWdvdG8gb3V0X2ZwdXQ7CiAJaW5mbyA9IE1RVUVVRV9JKGlub2RlKTsKZGlmZiAtLWdpdCBhL2lwYy9tc2d1dGlsLmMgYi9pcGMvbXNndXRpbC5jCmluZGV4IDA5OTI2MTYuLmM4MmMyMTUgMTAwNjQ0Ci0tLSBhL2lwYy9tc2d1dGlsLmMKKysrIGIvaXBjL21zZ3V0aWwuYwpAQCAtMzYsNyArMzYsNyBAQAogCWlmIChhbGVuID4gREFUQUxFTl9NU0cpCiAJCWFsZW4gPSBEQVRBTEVOX01TRzsKIAotCW1zZyA9IChzdHJ1Y3QgbXNnX21zZyAqKWttYWxsb2Moc2l6ZW9mKCptc2cpICsgYWxlbiwgR0ZQX0tFUk5FTCk7CisJbXNnID0ga21hbGxvYyhzaXplb2YoKm1zZykgKyBhbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAobXNnID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC01Niw3ICs1Niw3IEBACiAJCWFsZW4gPSBsZW47CiAJCWlmIChhbGVuID4gREFUQUxFTl9TRUcpCiAJCQlhbGVuID0gREFUQUxFTl9TRUc7Ci0JCXNlZyA9IChzdHJ1Y3QgbXNnX21zZ3NlZyAqKWttYWxsb2Moc2l6ZW9mKCpzZWcpICsgYWxlbiwKKwkJc2VnID0ga21hbGxvYyhzaXplb2YoKnNlZykgKyBhbGVuLAogCQkJCQkJIEdGUF9LRVJORUwpOwogCQlpZiAoc2VnID09IE5VTEwpIHsKIAkJCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggZDExOThkZC4uZjhlMTBhMiAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtMTY4LDcgKzE2OCw3IEBACiBzdGF0aWMgdm9pZCBzaG1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNobWQpCiB7CiAJc2htX2luYyhzaG1fZmlsZV9ucyhzaG1kLT52bV9maWxlKSwKLQkJCXNobWQtPnZtX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CisJCQlzaG1kLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CiB9CiAKIC8qCkBAIC0xODcsNyArMTg3LDcgQEAKIAlpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKHNocC0+c2htX2ZpbGUpKQogCQlzaG1lbV9sb2NrKHNocC0+c2htX2ZpbGUsIDAsIHNocC0+bWxvY2tfdXNlcik7CiAJZWxzZQotCQl1c2VyX3NobV91bmxvY2soc2hwLT5zaG1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSwKKwkJdXNlcl9zaG1fdW5sb2NrKHNocC0+c2htX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSwKIAkJCQkJCXNocC0+bWxvY2tfdXNlcik7CiAJZnB1dCAoc2hwLT5zaG1fZmlsZSk7CiAJc2VjdXJpdHlfc2htX2ZyZWUoc2hwKTsKQEAgLTIwMyw3ICsyMDMsNyBAQAogc3RhdGljIHZvaWQgc2htX2Nsb3NlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNobWQpCiB7CiAJc3RydWN0IGZpbGUgKiBmaWxlID0gc2htZC0+dm1fZmlsZTsKLQlpbnQgaWQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm87CisJaW50IGlkID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm87CiAJc3RydWN0IHNobWlkX2tlcm5lbCAqc2hwOwogCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpuczsKIApAQCAtMjMzLDcgKzIzMyw3IEBACiAJCXZtYS0+dm1fb3BzID0gJnNobV92bV9vcHM7CiAJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCiAJCQl2bWEtPnZtX2ZsYWdzICY9IH5WTV9NQVlXUklURTsKLQkJc2htX2luYyhzaG1fZmlsZV9ucyhmaWxlKSwgZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKKwkJc2htX2luYyhzaG1fZmlsZV9ucyhmaWxlKSwgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8pOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yNzksNyArMjc5LDcgQEAKIAlpZiAoc2l6ZSA8IFNITU1JTiB8fCBzaXplID4gbnMtPnNobV9jdGxtYXgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG5zLT5zaG1fdG90ICsgbnVtcGFnZXMgPj0gbnMtPnNobV9jdGxhbGwpCisJaWYgKG5zLT5zaG1fdG90ICsgbnVtcGFnZXMgPiBucy0+c2htX2N0bGFsbCkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAlzaHAgPSBpcGNfcmN1X2FsbG9jKHNpemVvZigqc2hwKSk7CkBAIC0zMzAsNyArMzMwLDcgQEAKIAlzaHAtPnNobV9uYXR0Y2ggPSAwOwogCXNocC0+aWQgPSBzaG1fYnVpbGRpZChucywgaWQsIHNocC0+c2htX3Blcm0uc2VxKTsKIAlzaHAtPnNobV9maWxlID0gZmlsZTsKLQlmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm8gPSBzaHAtPmlkOworCWZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfaW5vID0gc2hwLT5pZDsKIAogCXNobV9maWxlX25zKGZpbGUpID0gZ2V0X2lwY19ucyhucyk7CiAKQEAgLTQ5NSw3ICs0OTUsNyBAQAogCQlpZighc2hwKQogCQkJY29udGludWU7CiAKLQkJaW5vZGUgPSBzaHAtPnNobV9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwkJaW5vZGUgPSBzaHAtPnNobV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJCWlmIChpc19maWxlX2h1Z2VwYWdlcyhzaHAtPnNobV9maWxlKSkgewogCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwpAQCAtODQzLDcgKzg0Myw3IEBACiAJfQogCQkKIAlmaWxlID0gc2hwLT5zaG1fZmlsZTsKLQlzaXplID0gaV9zaXplX3JlYWQoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXNpemUgPSBpX3NpemVfcmVhZChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlzaHAtPnNobV9uYXR0Y2grKzsKIAlzaG1fdW5sb2NrKHNocCk7CiAKQEAgLTk0OCw3ICs5NDgsNyBAQAogCQkJKHZtYS0+dm1fc3RhcnQgLSBhZGRyKS9QQUdFX1NJWkUgPT0gdm1hLT52bV9wZ29mZikgewogCiAKLQkJCXNpemUgPSB2bWEtPnZtX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NpemU7CisJCQlzaXplID0gdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NpemU7CiAJCQlkb19tdW5tYXAobW0sIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7CiAJCQkvKgogCQkJICogV2UgZGlzY292ZXJlZCB0aGUgc2l6ZSBvZiB0aGUgc2htIHNlZ21lbnQsIHNvCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNWUzZjNiNy4uMTRmNGQ0NSAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtMzEsNyArMzEsNiBAQAogb2JqLSQoQ09ORklHX1VJRDE2KSArPSB1aWQxNi5vCiBvYmotJChDT05GSUdfTU9EVUxFUykgKz0gbW9kdWxlLm8KIG9iai0kKENPTkZJR19LQUxMU1lNUykgKz0ga2FsbHN5bXMubwotb2JqLSQoQ09ORklHX1NUQUNLX1VOV0lORCkgKz0gdW53aW5kLm8KIG9iai0kKENPTkZJR19QTSkgKz0gcG93ZXIvCiBvYmotJChDT05GSUdfQlNEX1BST0NFU1NfQUNDVCkgKz0gYWNjdC5vCiBvYmotJChDT05GSUdfS0VYRUMpICs9IGtleGVjLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9hY2N0LmMgYi9rZXJuZWwvYWNjdC5jCmluZGV4IGRjMTJkYjguLjcwZDBkODggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hY2N0LmMKKysrIGIva2VybmVsL2FjY3QuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJc3Bpbl91bmxvY2soJmFjY3RfZ2xvYmFscy5sb2NrKTsKIAogCS8qIE1heSBibG9jayAqLwotCWlmICh2ZnNfc3RhdGZzKGZpbGUtPmZfZGVudHJ5LCAmc2J1ZikpCisJaWYgKHZmc19zdGF0ZnMoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgJnNidWYpKQogCQlyZXR1cm4gcmVzOwogCXN1c3BlbmQgPSBzYnVmLmZfYmxvY2tzICogU1VTUEVORDsKIAlyZXN1bWUgPSBzYnVmLmZfYmxvY2tzICogUkVTVU1FOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJCWFkZF90aW1lcigmYWNjdF9nbG9iYWxzLnRpbWVyKTsKIAl9CiAJaWYgKG9sZF9hY2N0KSB7Ci0JCW1udF91bnBpbihvbGRfYWNjdC0+Zl92ZnNtbnQpOworCQltbnRfdW5waW4ob2xkX2FjY3QtPmZfcGF0aC5tbnQpOwogCQlzcGluX3VubG9jaygmYWNjdF9nbG9iYWxzLmxvY2spOwogCQlkb19hY2N0X3Byb2Nlc3Mob2xkX2FjY3QpOwogCQlmaWxwX2Nsb3NlKG9sZF9hY2N0LCBOVUxMKTsKQEAgLTIxMiw3ICsyMTIsNyBAQAogCWlmIChJU19FUlIoZmlsZSkpCiAJCXJldHVybiBQVFJfRVJSKGZpbGUpOwogCi0JaWYgKCFTX0lTUkVHKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7CisJaWYgKCFTX0lTUkVHKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKIAkJZmlscF9jbG9zZShmaWxlLCBOVUxMKTsKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQpAQCAtMjI5LDExICsyMjksMTEgQEAKIAl9CiAKIAlzcGluX2xvY2soJmFjY3RfZ2xvYmFscy5sb2NrKTsKLQltbnRfcGluKGZpbGUtPmZfdmZzbW50KTsKKwltbnRfcGluKGZpbGUtPmZfcGF0aC5tbnQpOwogCWFjY3RfZmlsZV9yZW9wZW4oZmlsZSk7CiAJc3Bpbl91bmxvY2soJmFjY3RfZ2xvYmFscy5sb2NrKTsKIAotCW1udHB1dChmaWxlLT5mX3Zmc21udCk7CS8qIGl0J3MgcGlubmVkLCBub3cgZ2l2ZSB1cCBhY3RpdmUgcmVmZXJlbmNlICovCisJbW50cHV0KGZpbGUtPmZfcGF0aC5tbnQpOyAvKiBpdCdzIHBpbm5lZCwgbm93IGdpdmUgdXAgYWN0aXZlIHJlZmVyZW5jZSAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODMsNyArMjgzLDcgQEAKIHZvaWQgYWNjdF9hdXRvX2Nsb3NlX21udChzdHJ1Y3QgdmZzbW91bnQgKm0pCiB7CiAJc3Bpbl9sb2NrKCZhY2N0X2dsb2JhbHMubG9jayk7Ci0JaWYgKGFjY3RfZ2xvYmFscy5maWxlICYmIGFjY3RfZ2xvYmFscy5maWxlLT5mX3Zmc21udCA9PSBtKQorCWlmIChhY2N0X2dsb2JhbHMuZmlsZSAmJiBhY2N0X2dsb2JhbHMuZmlsZS0+Zl9wYXRoLm1udCA9PSBtKQogCQlhY2N0X2ZpbGVfcmVvcGVuKE5VTEwpOwogCXNwaW5fdW5sb2NrKCZhY2N0X2dsb2JhbHMubG9jayk7CiB9CkBAIC0yOTksNyArMjk5LDcgQEAKIHsKIAlzcGluX2xvY2soJmFjY3RfZ2xvYmFscy5sb2NrKTsKIAlpZiAoYWNjdF9nbG9iYWxzLmZpbGUgJiYKLQkgICAgYWNjdF9nbG9iYWxzLmZpbGUtPmZfdmZzbW50LT5tbnRfc2IgPT0gc2IpIHsKKwkgICAgYWNjdF9nbG9iYWxzLmZpbGUtPmZfcGF0aC5tbnQtPm1udF9zYiA9PSBzYikgewogCQlhY2N0X2ZpbGVfcmVvcGVuKE5VTEwpOwogCX0KIAlzcGluX3VubG9jaygmYWNjdF9nbG9iYWxzLmxvY2spOwpAQCAtNDI4LDYgKzQyOCw3IEBACiAJdTY0IGVsYXBzZWQ7CiAJdTY0IHJ1bl90aW1lOwogCXN0cnVjdCB0aW1lc3BlYyB1cHRpbWU7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAogCS8qCiAJICogRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGVub3VnaCBmcmVlX3NwYWNlIHRvIGNvbnRpbnVlCkBAIC00ODQsMTYgKzQ4NSw5IEBACiAJYWMuYWNfcHBpZCA9IGN1cnJlbnQtPnBhcmVudC0+dGdpZDsKICNlbmRpZgogCi0JbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKLQkvKiBGSVhNRTogV2hvZXZlciBpcyByZXNwb25zaWJsZSBmb3IgY3VycmVudC0+c2lnbmFsIGxvY2tpbmcgbmVlZHMKLQkgICB0byB1c2UgdGhlIHNhbWUgbG9ja2luZyBhbGwgb3ZlciB0aGUga2VybmVsIGFuZCBkb2N1bWVudCBpdCAqLwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JYWMuYWNfdHR5ID0gY3VycmVudC0+c2lnbmFsLT50dHkgPwotCQlvbGRfZW5jb2RlX2Rldih0dHlfZGV2bnVtKGN1cnJlbnQtPnNpZ25hbC0+dHR5KSkgOiAwOwotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7Ci0KIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl0dHkgPSBjdXJyZW50LT5zaWduYWwtPnR0eTsKKwlhYy5hY190dHkgPSB0dHkgPyBvbGRfZW5jb2RlX2Rldih0dHlfZGV2bnVtKHR0eSkpIDogMDsKIAlhYy5hY191dGltZSA9IGVuY29kZV9jb21wX3QoamlmZmllc190b19BSFooY3B1dGltZV90b19qaWZmaWVzKHBhY2N0LT5hY191dGltZSkpKTsKIAlhYy5hY19zdGltZSA9IGVuY29kZV9jb21wX3QoamlmZmllc190b19BSFooY3B1dGltZV90b19qaWZmaWVzKHBhY2N0LT5hY19zdGltZSkpKTsKIAlhYy5hY19mbGFnID0gcGFjY3QtPmFjX2ZsYWc7CmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRmaWx0ZXIuYyBiL2tlcm5lbC9hdWRpdGZpbHRlci5jCmluZGV4IDJlODk2ZjguLjljOGMyMzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdGZpbHRlci5jCisrKyBiL2tlcm5lbC9hdWRpdGZpbHRlci5jCkBAIC04MDAsOCArODAwLDggQEAKIAogCS8qIG91ciBvd24gY29weSBvZiBzZV9zdHIgKi8KIAlzZV9zdHIgPSBrc3RyZHVwKHNmLT5zZV9zdHIsIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseShJU19FUlIoc2Vfc3RyKSkpCi0JICAgIHJldHVybiAtRU5PTUVNOworCWlmICh1bmxpa2VseSghc2Vfc3RyKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAJZGYtPnNlX3N0ciA9IHNlX3N0cjsKIAogCS8qIG91ciBvd24gKHJlZnJlc2hlZCkgY29weSBvZiBzZV9ydWxlICovCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCA0MDcyMmUyLi4yOTg4OTc1IDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTc4MSw4ICs3ODEsOCBAQAogCQkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkgJiYKIAkJCSAgICB2bWEtPnZtX2ZpbGUpIHsKIAkJCQlhdWRpdF9sb2dfZF9wYXRoKGFiLCAiZXhlPSIsCi0JCQkJCQkgdm1hLT52bV9maWxlLT5mX2RlbnRyeSwKLQkJCQkJCSB2bWEtPnZtX2ZpbGUtPmZfdmZzbW50KTsKKwkJCQkJCSB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnksCisJCQkJCQkgdm1hLT52bV9maWxlLT5mX3BhdGgubW50KTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXZtYSA9IHZtYS0+dm1fbmV4dDsKQEAgLTgyNiwxMCArODI2LDEyIEBACiAJCQkJIGNvbnRleHQtPnJldHVybl9jb2RlKTsKIAogCW11dGV4X2xvY2soJnR0eV9tdXRleCk7CisJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlpZiAodHNrLT5zaWduYWwgJiYgdHNrLT5zaWduYWwtPnR0eSAmJiB0c2stPnNpZ25hbC0+dHR5LT5uYW1lKQogCQl0dHkgPSB0c2stPnNpZ25hbC0+dHR5LT5uYW1lOwogCWVsc2UKIAkJdHR5ID0gIihub25lKSI7CisJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsCiAJCSAgIiBhMD0lbHggYTE9JWx4IGEyPSVseCBhMz0lbHggaXRlbXM9JWQiCiAJCSAgIiBwcGlkPSVkIHBpZD0lZCBhdWlkPSV1IHVpZD0ldSBnaWQ9JXUiCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmMKaW5kZXggOTEyNDY2OS4uNzQwNmZlNiAxMDA2NDQKLS0tIGEva2VybmVsL2NwdS5jCisrKyBiL2tlcm5lbC9jcHUuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAjZW5kaWYgLypDT05GSUdfSE9UUExVR19DUFUqLwogCiAvKiBSZXF1aXJlcyBjcHVfYWRkX3JlbW92ZV9sb2NrIHRvIGJlIGhlbGQgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IF9jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbnQgX19jcHVpbml0IF9jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKIHsKIAlpbnQgcmV0OwogCXZvaWQgKmhjcHUgPSAodm9pZCAqKShsb25nKWNwdTsKQEAgLTIzOSw3ICsyMzksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX2RldmluaXQgY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCitpbnQgX19jcHVpbml0IGNwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQogewogCWludCBlcnIgPSAwOwogCkBAIC0yNTgsNyArMjU4LDcgQEAKIAogaW50IGRpc2FibGVfbm9uYm9vdF9jcHVzKHZvaWQpCiB7Ci0JaW50IGNwdSwgZmlyc3RfY3B1LCBlcnJvcjsKKwlpbnQgY3B1LCBmaXJzdF9jcHUsIGVycm9yID0gMDsKIAogCW11dGV4X2xvY2soJmNwdV9hZGRfcmVtb3ZlX2xvY2spOwogCWZpcnN0X2NwdSA9IGZpcnN0X2NwdShjcHVfcHJlc2VudF9tYXApOwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJCS8qIE1ha2Ugc3VyZSB0aGUgQ1BVcyB3b24ndCBiZSBlbmFibGVkIGJ5IHNvbWVvbmUgZWxzZSAqLwogCQljcHVfaG90cGx1Z19kaXNhYmxlZCA9IDE7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJOb24tYm9vdCBDUFVzIGFyZSBub3QgZGlzYWJsZWQiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJOb24tYm9vdCBDUFVzIGFyZSBub3QgZGlzYWJsZWRcbiIpOwogCX0KIG91dDoKIAltdXRleF91bmxvY2soJmNwdV9hZGRfcmVtb3ZlX2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdXNldC5jIGIva2VybmVsL2NwdXNldC5jCmluZGV4IDBhNmI0ZDguLjZiMDVkYzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHVzZXQuYworKysgYi9rZXJuZWwvY3B1c2V0LmMKQEAgLTQxMyw4ICs0MTMsOCBAQAogICoKICAqCiAgKiBXaGVuIHJlYWRpbmcvd3JpdGluZyB0byBhIGZpbGU6Ci0gKgktIHRoZSBjcHVzZXQgdG8gdXNlIGluIGZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudC0+ZF9mc2RhdGEKLSAqCS0gdGhlICdjZnR5cGUnIG9mIHRoZSBmaWxlIGlzIGZpbGUtPmZfZGVudHJ5LT5kX2ZzZGF0YQorICoJLSB0aGUgY3B1c2V0IHRvIHVzZSBpbiBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudC0+ZF9mc2RhdGEKKyAqCS0gdGhlICdjZnR5cGUnIG9mIHRoZSBmaWxlIGlzIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhCiAgKi8KIAogc3RydWN0IGNmdHlwZSB7CkBAIC0xMjg0LDggKzEyODQsOCBAQAogCQkJCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICp1bnVzZWRfcHBvcykKIHsKLQlzdHJ1Y3QgY3B1c2V0ICpjcyA9IF9fZF9jcyhmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQpOwotCXN0cnVjdCBjZnR5cGUgKmNmdCA9IF9fZF9jZnQoZmlsZS0+Zl9kZW50cnkpOworCXN0cnVjdCBjcHVzZXQgKmNzID0gX19kX2NzKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfcGFyZW50KTsKKwlzdHJ1Y3QgY2Z0eXBlICpjZnQgPSBfX2RfY2Z0KGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCWNwdXNldF9maWxldHlwZV90IHR5cGUgPSBjZnQtPnByaXZhdGU7CiAJY2hhciAqYnVmZmVyOwogCWNoYXIgKnBhdGhidWYgPSBOVUxMOwpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKIAkJCQkJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKIHsKIAlzc2l6ZV90IHJldHZhbCA9IDA7Ci0Jc3RydWN0IGNmdHlwZSAqY2Z0ID0gX19kX2NmdChmaWxlLT5mX2RlbnRyeSk7CisJc3RydWN0IGNmdHlwZSAqY2Z0ID0gX19kX2NmdChmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAlpZiAoIWNmdCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTE0MTcsOCArMTQxNyw4IEBACiBzdGF0aWMgc3NpemVfdCBjcHVzZXRfY29tbW9uX2ZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGNmdHlwZSAqY2Z0ID0gX19kX2NmdChmaWxlLT5mX2RlbnRyeSk7Ci0Jc3RydWN0IGNwdXNldCAqY3MgPSBfX2RfY3MoZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50KTsKKwlzdHJ1Y3QgY2Z0eXBlICpjZnQgPSBfX2RfY2Z0KGZpbGUtPmZfcGF0aC5kZW50cnkpOworCXN0cnVjdCBjcHVzZXQgKmNzID0gX19kX2NzKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfcGFyZW50KTsKIAljcHVzZXRfZmlsZXR5cGVfdCB0eXBlID0gY2Z0LT5wcml2YXRlOwogCWNoYXIgKnBhZ2U7CiAJc3NpemVfdCByZXR2YWwgPSAwOwpAQCAtMTQ3Niw3ICsxNDc2LDcgQEAKIAkJCQkJCQkJbG9mZl90ICpwcG9zKQogewogCXNzaXplX3QgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgY2Z0eXBlICpjZnQgPSBfX2RfY2Z0KGZpbGUtPmZfZGVudHJ5KTsKKwlzdHJ1Y3QgY2Z0eXBlICpjZnQgPSBfX2RfY2Z0KGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCWlmICghY2Z0KQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMTQ5OCw3ICsxNDk4LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JY2Z0ID0gX19kX2NmdChmaWxlLT5mX2RlbnRyeSk7CisJY2Z0ID0gX19kX2NmdChmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAlpZiAoIWNmdCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKGNmdC0+b3BlbikKQEAgLTE1MTEsNyArMTUxMSw3IEBACiAKIHN0YXRpYyBpbnQgY3B1c2V0X2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgY2Z0eXBlICpjZnQgPSBfX2RfY2Z0KGZpbGUtPmZfZGVudHJ5KTsKKwlzdHJ1Y3QgY2Z0eXBlICpjZnQgPSBfX2RfY2Z0KGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCWlmIChjZnQtPnJlbGVhc2UpCiAJCXJldHVybiBjZnQtPnJlbGVhc2UoaW5vZGUsIGZpbGUpOwogCXJldHVybiAwOwpAQCAtMTcwMCw3ICsxNzAwLDcgQEAKICAqLwogc3RhdGljIGludCBjcHVzZXRfdGFza3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGNwdXNldCAqY3MgPSBfX2RfY3MoZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50KTsKKwlzdHJ1Y3QgY3B1c2V0ICpjcyA9IF9fZF9jcyhmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudCk7CiAJc3RydWN0IGN0cl9zdHJ1Y3QgKmN0cjsKIAlwaWRfdCAqcGlkYXJyYXk7CiAJaW50IG5waWRzOwpAQCAtMjM0MiwzMiArMjM0Miw0OCBAQAogfQogCiAvKioKLSAqIGNwdXNldF96b25lX2FsbG93ZWQgLSBDYW4gd2UgYWxsb2NhdGUgbWVtb3J5IG9uIHpvbmUgeidzIG1lbW9yeSBub2RlPworICogY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCAtIENhbiB3ZSBhbGxvY2F0ZSBvbiB6b25lIHoncyBtZW1vcnkgbm9kZT8KICAqIEB6OiBpcyB0aGlzIHpvbmUgb24gYW4gYWxsb3dlZCBub2RlPwotICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyAod2UgdXNlIF9fR0ZQX0hBUkRXQUxMKQorICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncwogICoKLSAqIElmIHdlJ3JlIGluIGludGVycnVwdCwgeWVzLCB3ZSBjYW4gYWx3YXlzIGFsbG9jYXRlLiAgSWYgem9uZQorICogSWYgd2UncmUgaW4gaW50ZXJydXB0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuICBJZgorICogX19HRlBfVEhJU05PREUgaXMgc2V0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuICBJZiB6b25lCiAgKiB6J3Mgbm9kZSBpcyBpbiBvdXIgdGFza3MgbWVtc19hbGxvd2VkLCB5ZXMuICBJZiBpdCdzIG5vdCBhCiAgKiBfX0dGUF9IQVJEV0FMTCByZXF1ZXN0IGFuZCB0aGlzIHpvbmUncyBub2RlcyBpcyBpbiB0aGUgbmVhcmVzdAogICogbWVtX2V4Y2x1c2l2ZSBjcHVzZXQgYW5jZXN0b3IgdG8gdGhpcyB0YXNrcyBjcHVzZXQsIHllcy4KICAqIE90aGVyd2lzZSwgbm8uCiAgKgorICogSWYgX19HRlBfSEFSRFdBTEwgaXMgc2V0LCBjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKCkKKyAqIHJlZHVjZXMgdG8gY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCgpLiAgT3RoZXJ3aXNlLAorICogY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCgpIG1pZ2h0IHNsZWVwLCBhbmQgbWlnaHQgYWxsb3cgYSB6b25lCisgKiBmcm9tIGFuIGVuY2xvc2luZyBjcHVzZXQuCisgKgorICogY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCgpIG9ubHkgaGFuZGxlcyB0aGUgc2ltcGxlciBjYXNlIG9mCisgKiBoYXJkd2FsbCBjcHVzZXRzLCBhbmQgbmV2ZXIgc2xlZXBzLgorICoKKyAqIFRoZSBfX0dGUF9USElTTk9ERSBwbGFjZW1lbnQgbG9naWMgaXMgcmVhbGx5IGhhbmRsZWQgZWxzZXdoZXJlLAorICogYnkgZm9yY2libHkgdXNpbmcgYSB6b25lbGlzdCBzdGFydGluZyBhdCBhIHNwZWNpZmllZCBub2RlLCBhbmQgYnkKKyAqIChpbiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkpIHJlZnVzaW5nIHRvIGNvbnNpZGVyIHRoZSB6b25lcyBmb3IKKyAqIGFueSBub2RlIG9uIHRoZSB6b25lbGlzdCBleGNlcHQgdGhlIGZpcnN0LiAgQnkgdGhlIHRpbWUgYW55IHN1Y2gKKyAqIGNhbGxzIGdldCB0byB0aGlzIHJvdXRpbmUsIHdlIHNob3VsZCBqdXN0IHNodXQgdXAgYW5kIHNheSAneWVzJy4KKyAqCiAgKiBHRlBfVVNFUiBhbGxvY2F0aW9ucyBhcmUgbWFya2VkIHdpdGggdGhlIF9fR0ZQX0hBUkRXQUxMIGJpdCwKICAqIGFuZCBkbyBub3QgYWxsb3cgYWxsb2NhdGlvbnMgb3V0c2lkZSB0aGUgY3VycmVudCB0YXNrcyBjcHVzZXQuCiAgKiBHRlBfS0VSTkVMIGFsbG9jYXRpb25zIGFyZSBub3Qgc28gbWFya2VkLCBzbyBjYW4gZXNjYXBlIHRvIHRoZQotICogbmVhcmVzdCBtZW1fZXhjbHVzaXZlIGFuY2VzdG9yIGNwdXNldC4KKyAqIG5lYXJlc3QgZW5jbG9zaW5nIG1lbV9leGNsdXNpdmUgYW5jZXN0b3IgY3B1c2V0LgogICoKLSAqIFNjYW5uaW5nIHVwIHBhcmVudCBjcHVzZXRzIHJlcXVpcmVzIGNhbGxiYWNrX211dGV4LiAgVGhlIF9fYWxsb2NfcGFnZXMoKQotICogcm91dGluZSBvbmx5IGNhbGxzIGhlcmUgd2l0aCBfX0dGUF9IQVJEV0FMTCBiaXQgX25vdF8gc2V0IGlmCi0gKiBpdCdzIGEgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uLCBhbmQgYWxsIG5vZGVzIGluIHRoZSBjdXJyZW50IHRhc2tzCi0gKiBtZW1zX2FsbG93ZWQgY2FtZSB1cCBlbXB0eSBvbiB0aGUgZmlyc3QgcGFzcyBvdmVyIHRoZSB6b25lbGlzdC4KLSAqIFNvIG9ubHkgR0ZQX0tFUk5FTCBhbGxvY2F0aW9ucywgaWYgYWxsIG5vZGVzIGluIHRoZSBjcHVzZXQgYXJlCi0gKiBzaG9ydCBvZiBtZW1vcnksIG1pZ2h0IHJlcXVpcmUgdGFraW5nIHRoZSBjYWxsYmFja19tdXRleCBtdXRleC4KKyAqIFNjYW5uaW5nIHVwIHBhcmVudCBjcHVzZXRzIHJlcXVpcmVzIGNhbGxiYWNrX211dGV4LiAgVGhlCisgKiBfX2FsbG9jX3BhZ2VzKCkgcm91dGluZSBvbmx5IGNhbGxzIGhlcmUgd2l0aCBfX0dGUF9IQVJEV0FMTCBiaXQKKyAqIF9ub3RfIHNldCBpZiBpdCdzIGEgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uLCBhbmQgYWxsIG5vZGVzIGluIHRoZQorICogY3VycmVudCB0YXNrcyBtZW1zX2FsbG93ZWQgY2FtZSB1cCBlbXB0eSBvbiB0aGUgZmlyc3QgcGFzcyBvdmVyCisgKiB0aGUgem9uZWxpc3QuICBTbyBvbmx5IEdGUF9LRVJORUwgYWxsb2NhdGlvbnMsIGlmIGFsbCBub2RlcyBpbiB0aGUKKyAqIGNwdXNldCBhcmUgc2hvcnQgb2YgbWVtb3J5LCBtaWdodCByZXF1aXJlIHRha2luZyB0aGUgY2FsbGJhY2tfbXV0ZXgKKyAqIG11dGV4LgogICoKICAqIFRoZSBmaXJzdCBjYWxsIGhlcmUgZnJvbSBtbS9wYWdlX2FsbG9jOmdldF9wYWdlX2Zyb21fZnJlZWxpc3QoKQotICogaGFzIF9fR0ZQX0hBUkRXQUxMIHNldCBpbiBnZnBfbWFzaywgZW5mb3JjaW5nIGhhcmR3YWxsIGNwdXNldHMsIHNvCi0gKiBubyBhbGxvY2F0aW9uIG9uIGEgbm9kZSBvdXRzaWRlIHRoZSBjcHVzZXQgaXMgYWxsb3dlZCAodW5sZXNzIGluCi0gKiBpbnRlcnJ1cHQsIG9mIGNvdXJzZSkuCisgKiBoYXMgX19HRlBfSEFSRFdBTEwgc2V0IGluIGdmcF9tYXNrLCBlbmZvcmNpbmcgaGFyZHdhbGwgY3B1c2V0cywKKyAqIHNvIG5vIGFsbG9jYXRpb24gb24gYSBub2RlIG91dHNpZGUgdGhlIGNwdXNldCBpcyBhbGxvd2VkICh1bmxlc3MKKyAqIGluIGludGVycnVwdCwgb2YgY291cnNlKS4KICAqCiAgKiBUaGUgc2Vjb25kIHBhc3MgdGhyb3VnaCBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkgZG9lc24ndCBldmVuIGNhbGwKICAqIGhlcmUgZm9yIEdGUF9BVE9NSUMgY2FsbHMuICBGb3IgdGhvc2UgY2FsbHMsIHRoZSBfX2FsbG9jX3BhZ2VzKCkKQEAgLTIzODAsMTIgKzIzOTYsMTIgQEAKICAqCUdGUF9VU0VSICAgICAtIG9ubHkgbm9kZXMgaW4gY3VycmVudCB0YXNrcyBtZW1zIGFsbG93ZWQgb2suCiAgKgogICogUnVsZToKLSAqICAgIERvbid0IGNhbGwgY3B1c2V0X3pvbmVfYWxsb3dlZCgpIGlmIHlvdSBjYW4ndCBzbGVlcCwgdW5sZXNzIHlvdQorICogICAgRG9uJ3QgY2FsbCBjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsIGlmIHlvdSBjYW4ndCBzbGVlcCwgdW5sZXNzIHlvdQogICogICAgcGFzcyBpbiB0aGUgX19HRlBfSEFSRFdBTEwgZmxhZyBzZXQgaW4gZ2ZwX2ZsYWcsIHdoaWNoIGRpc2FibGVzCiAgKiAgICB0aGUgY29kZSB0aGF0IG1pZ2h0IHNjYW4gdXAgYW5jZXN0b3IgY3B1c2V0cyBhbmQgc2xlZXAuCi0gKiovCisgKi8KIAotaW50IF9fY3B1c2V0X3pvbmVfYWxsb3dlZChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCitpbnQgX19jcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKHN0cnVjdCB6b25lICp6LCBnZnBfdCBnZnBfbWFzaykKIHsKIAlpbnQgbm9kZTsJCQkvKiBub2RlIHRoYXQgem9uZSB6IGlzIG9uICovCiAJY29uc3Qgc3RydWN0IGNwdXNldCAqY3M7CS8qIGN1cnJlbnQgY3B1c2V0IGFuY2VzdG9ycyAqLwpAQCAtMjQxNSw2ICsyNDMxLDQwIEBACiAJcmV0dXJuIGFsbG93ZWQ7CiB9CiAKKy8qCisgKiBjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsIC0gQ2FuIHdlIGFsbG9jYXRlIG9uIHpvbmUgeidzIG1lbW9yeSBub2RlPworICogQHo6IGlzIHRoaXMgem9uZSBvbiBhbiBhbGxvd2VkIG5vZGU/CisgKiBAZ2ZwX21hc2s6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCisgKgorICogSWYgd2UncmUgaW4gaW50ZXJydXB0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuCisgKiBJZiBfX0dGUF9USElTTk9ERSBpcyBzZXQsIHllcywgd2UgY2FuIGFsd2F5cyBhbGxvY2F0ZS4gIElmIHpvbmUKKyAqIHoncyBub2RlIGlzIGluIG91ciB0YXNrcyBtZW1zX2FsbG93ZWQsIHllcy4gICBPdGhlcndpc2UsIG5vLgorICoKKyAqIFRoZSBfX0dGUF9USElTTk9ERSBwbGFjZW1lbnQgbG9naWMgaXMgcmVhbGx5IGhhbmRsZWQgZWxzZXdoZXJlLAorICogYnkgZm9yY2libHkgdXNpbmcgYSB6b25lbGlzdCBzdGFydGluZyBhdCBhIHNwZWNpZmllZCBub2RlLCBhbmQgYnkKKyAqIChpbiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkpIHJlZnVzaW5nIHRvIGNvbnNpZGVyIHRoZSB6b25lcyBmb3IKKyAqIGFueSBub2RlIG9uIHRoZSB6b25lbGlzdCBleGNlcHQgdGhlIGZpcnN0LiAgQnkgdGhlIHRpbWUgYW55IHN1Y2gKKyAqIGNhbGxzIGdldCB0byB0aGlzIHJvdXRpbmUsIHdlIHNob3VsZCBqdXN0IHNodXQgdXAgYW5kIHNheSAneWVzJy4KKyAqCisgKiBVbmxpa2UgdGhlIGNwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwoKSB2YXJpYW50LCBhYm92ZSwKKyAqIHRoaXMgdmFyaWFudCByZXF1aXJlcyB0aGF0IHRoZSB6b25lIGJlIGluIHRoZSBjdXJyZW50IHRhc2tzCisgKiBtZW1zX2FsbG93ZWQgb3IgdGhhdCB3ZSdyZSBpbiBpbnRlcnJ1cHQuICBJdCBkb2VzIG5vdCBzY2FuIHVwIHRoZQorICogY3B1c2V0IGhpZXJhcmNoeSBmb3IgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG1lbV9leGNsdXNpdmUgY3B1c2V0LgorICogSXQgbmV2ZXIgc2xlZXBzLgorICovCisKK2ludCBfX2NwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQoreworCWludCBub2RlOwkJCS8qIG5vZGUgdGhhdCB6b25lIHogaXMgb24gKi8KKworCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCAoZ2ZwX21hc2sgJiBfX0dGUF9USElTTk9ERSkpCisJCXJldHVybiAxOworCW5vZGUgPSB6b25lX3RvX25pZCh6KTsKKwlpZiAobm9kZV9pc3NldChub2RlLCBjdXJyZW50LT5tZW1zX2FsbG93ZWQpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBjcHVzZXRfbG9jayAtIGxvY2sgb3V0IGFueSBjaGFuZ2VzIHRvIGNwdXNldCBzdHJ1Y3R1cmVzCiAgKgpAQCAtMjYwNiw3ICsyNjU2LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY19jcHVzZXRfc2hvdywgcGlkKTsKIH0KIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NwdXNldF9vcGVyYXRpb25zID0geworc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NwdXNldF9vcGVyYXRpb25zID0gewogCS5vcGVuCQk9IGNwdXNldF9vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNGUzZjkxOS4uZmVjMTJlYiAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KICNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CisjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgpAQCAtNDgsNyArNDksNiBAQAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCiBleHRlcm4gdm9pZCBzZW1fZXhpdCAodm9pZCk7Ci1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZF9yZWFwZXI7CiAKIHN0YXRpYyB2b2lkIGV4aXRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICogdHNrKTsKIApAQCAtMTg5LDIxICsxODksMTggQEAKIGludCBzZXNzaW9uX29mX3BncnAoaW50IHBncnApCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCWludCBzaWQgPSAtMTsKKwlpbnQgc2lkID0gMDsKIAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JZG9fZWFjaF90YXNrX3BpZChwZ3JwLCBQSURUWVBFX1BHSUQsIHApIHsKLQkJaWYgKHAtPnNpZ25hbC0+c2Vzc2lvbiA+IDApIHsKLQkJCXNpZCA9IHAtPnNpZ25hbC0+c2Vzc2lvbjsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfSB3aGlsZV9lYWNoX3Rhc2tfcGlkKHBncnAsIFBJRFRZUEVfUEdJRCwgcCk7Ci0JcCA9IGZpbmRfdGFza19ieV9waWQocGdycCk7Ci0JaWYgKHApCi0JCXNpZCA9IHAtPnNpZ25hbC0+c2Vzc2lvbjsKLW91dDoKKworCXAgPSBmaW5kX3Rhc2tfYnlfcGlkX3R5cGUoUElEVFlQRV9QR0lELCBwZ3JwKTsKKwlpZiAocCA9PSBOVUxMKQorCQlwID0gZmluZF90YXNrX2J5X3BpZChwZ3JwKTsKKwlpZiAocCAhPSBOVUxMKQorCQlzaWQgPSBwcm9jZXNzX3Nlc3Npb24ocCk7CisKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCisKIAlyZXR1cm4gc2lkOwogfQogCkBAIC0yMjUsOCArMjIyLDggQEAKIAkJCQl8fCBwLT5leGl0X3N0YXRlCiAJCQkJfHwgaXNfaW5pdChwLT5yZWFsX3BhcmVudCkpCiAJCQljb250aW51ZTsKLQkJaWYgKHByb2Nlc3NfZ3JvdXAocC0+cmVhbF9wYXJlbnQpICE9IHBncnAKLQkJCSAgICAmJiBwLT5yZWFsX3BhcmVudC0+c2lnbmFsLT5zZXNzaW9uID09IHAtPnNpZ25hbC0+c2Vzc2lvbikgeworCQlpZiAocHJvY2Vzc19ncm91cChwLT5yZWFsX3BhcmVudCkgIT0gcGdycCAmJgorCQkgICAgcHJvY2Vzc19zZXNzaW9uKHAtPnJlYWxfcGFyZW50KSA9PSBwcm9jZXNzX3Nlc3Npb24ocCkpIHsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtMjYwLDcgKzI1Nyw4IEBACiB9CiAKIC8qKgotICogcmVwYXJlbnRfdG9faW5pdCAtIFJlcGFyZW50IHRoZSBjYWxsaW5nIGtlcm5lbCB0aHJlYWQgdG8gdGhlIGluaXQgdGFzay4KKyAqIHJlcGFyZW50X3RvX2luaXQgLSBSZXBhcmVudCB0aGUgY2FsbGluZyBrZXJuZWwgdGhyZWFkIHRvIHRoZSBpbml0IHRhc2sKKyAqIG9mIHRoZSBwaWQgc3BhY2UgdGhhdCB0aGUgdGhyZWFkIGJlbG9uZ3MgdG8uCiAgKgogICogSWYgYSBrZXJuZWwgdGhyZWFkIGlzIGxhdW5jaGVkIGFzIGEgcmVzdWx0IG9mIGEgc3lzdGVtIGNhbGwsIG9yIGlmCiAgKiBpdCBldmVyIGV4aXRzLCBpdCBzaG91bGQgZ2VuZXJhbGx5IHJlcGFyZW50IGl0c2VsZiB0byBpbml0IHNvIHRoYXQKQEAgLTI3OCw4ICsyNzYsOCBAQAogCXB0cmFjZV91bmxpbmsoY3VycmVudCk7CiAJLyogUmVwYXJlbnQgdG8gaW5pdCAqLwogCXJlbW92ZV9wYXJlbnQoY3VycmVudCk7Ci0JY3VycmVudC0+cGFyZW50ID0gY2hpbGRfcmVhcGVyOwotCWN1cnJlbnQtPnJlYWxfcGFyZW50ID0gY2hpbGRfcmVhcGVyOworCWN1cnJlbnQtPnBhcmVudCA9IGNoaWxkX3JlYXBlcihjdXJyZW50KTsKKwljdXJyZW50LT5yZWFsX3BhcmVudCA9IGNoaWxkX3JlYXBlcihjdXJyZW50KTsKIAlhZGRfcGFyZW50KGN1cnJlbnQpOwogCiAJLyogU2V0IHRoZSBleGl0IHNpZ25hbCB0byBTSUdDSExEIHNvIHdlIHNpZ25hbCBpbml0IG9uIGV4aXQgKi8KQEAgLTMwMiw5ICszMDAsOSBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKIAotCWlmIChjdXJyLT5zaWduYWwtPnNlc3Npb24gIT0gc2Vzc2lvbikgeworCWlmIChwcm9jZXNzX3Nlc3Npb24oY3VycikgIT0gc2Vzc2lvbikgewogCQlkZXRhY2hfcGlkKGN1cnIsIFBJRFRZUEVfU0lEKTsKLQkJY3Vyci0+c2lnbmFsLT5zZXNzaW9uID0gc2Vzc2lvbjsKKwkJc2V0X3NpZ25hbF9zZXNzaW9uKGN1cnItPnNpZ25hbCwgc2Vzc2lvbik7CiAJCWF0dGFjaF9waWQoY3VyciwgUElEVFlQRV9TSUQsIHNlc3Npb24pOwogCX0KIAlpZiAocHJvY2Vzc19ncm91cChjdXJyKSAhPSBwZ3JwKSB7CkBAIC0zMTQsNyArMzEyLDcgQEAKIAl9CiB9CiAKLXZvaWQgc2V0X3NwZWNpYWxfcGlkcyhwaWRfdCBzZXNzaW9uLCBwaWRfdCBwZ3JwKQorc3RhdGljIHZvaWQgc2V0X3NwZWNpYWxfcGlkcyhwaWRfdCBzZXNzaW9uLCBwaWRfdCBwZ3JwKQogewogCXdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAlfX3NldF9zcGVjaWFsX3BpZHMoc2Vzc2lvbiwgcGdycCk7CkBAIC0zODQsOSArMzgyLDcgQEAKIAlleGl0X21tKGN1cnJlbnQpOwogCiAJc2V0X3NwZWNpYWxfcGlkcygxLCAxKTsKLQltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwotCWN1cnJlbnQtPnNpZ25hbC0+dHR5ID0gTlVMTDsKLQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CisJcHJvY19jbGVhcl90dHkoY3VycmVudCk7CiAKIAkvKiBCbG9jayBhbmQgZmx1c2ggYWxsIHNpZ25hbHMgKi8KIAlzaWdmaWxsc2V0KCZibG9ja2VkKTsKQEAgLTQyOSw3ICs0MjUsNyBAQAogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgbG9uZyBzZXQ7CiAJCWkgPSBqICogX19ORkRCSVRTOwotCQlpZiAoaSA+PSBmZHQtPm1heF9mZHNldCB8fCBpID49IGZkdC0+bWF4X2ZkcykKKwkJaWYgKGkgPj0gZmR0LT5tYXhfZmRzKQogCQkJYnJlYWs7CiAJCXNldCA9IGZkdC0+b3Blbl9mZHMtPmZkc19iaXRzW2orK107CiAJCXdoaWxlIChzZXQpIHsKQEAgLTQ3MCw5ICs0NjYsNyBAQAogCQkgKiB5b3UgY2FuIGZyZWUgZmlsZXMgaW1tZWRpYXRlbHkuCiAJCSAqLwogCQlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKLQkJaWYgKGZkdCA9PSAmZmlsZXMtPmZkdGFiKQotCQkJZmR0LT5mcmVlX2ZpbGVzID0gZmlsZXM7Ci0JCWVsc2UKKwkJaWYgKGZkdCAhPSAmZmlsZXMtPmZkdGFiKQogCQkJa21lbV9jYWNoZV9mcmVlKGZpbGVzX2NhY2hlcCwgZmlsZXMpOwogCQlmcmVlX2ZkdGFibGUoZmR0KTsKIAl9CkBAIC02MDMsMTAgKzU5Nyw2IEBACiBzdGF0aWMgdm9pZAogcmVwYXJlbnRfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsIGludCB0cmFjZWQpCiB7Ci0JLyogV2UgZG9uJ3Qgd2FudCBwZW9wbGUgc2xheWluZyBpbml0LiAgKi8KLQlpZiAocC0+ZXhpdF9zaWduYWwgIT0gLTEpCi0JCXAtPmV4aXRfc2lnbmFsID0gU0lHQ0hMRDsKLQogCWlmIChwLT5wZGVhdGhfc2lnbmFsKQogCQkvKiBXZSBhbHJlYWR5IGhvbGQgdGhlIHRhc2tsaXN0X2xvY2sgaGVyZS4gICovCiAJCWdyb3VwX3NlbmRfc2lnX2luZm8ocC0+cGRlYXRoX3NpZ25hbCwgU0VORF9TSUdfTk9JTkZPLCBwKTsKQEAgLTYyNiwxMyArNjE2LDcgQEAKIAkJcC0+cGFyZW50ID0gcC0+cmVhbF9wYXJlbnQ7CiAJCWFkZF9wYXJlbnQocCk7CiAKLQkJLyogSWYgd2UnZCBub3RpZmllZCB0aGUgb2xkIHBhcmVudCBhYm91dCB0aGlzIGNoaWxkJ3MgZGVhdGgsCi0JCSAqIGFsc28gbm90aWZ5IHRoZSBuZXcgcGFyZW50LgotCQkgKi8KLQkJaWYgKHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUgJiYgcC0+ZXhpdF9zaWduYWwgIT0gLTEgJiYKLQkJICAgIHRocmVhZF9ncm91cF9lbXB0eShwKSkKLQkJCWRvX25vdGlmeV9wYXJlbnQocCwgcC0+ZXhpdF9zaWduYWwpOwotCQllbHNlIGlmIChwLT5zdGF0ZSA9PSBUQVNLX1RSQUNFRCkgeworCQlpZiAocC0+c3RhdGUgPT0gVEFTS19UUkFDRUQpIHsKIAkJCS8qCiAJCQkgKiBJZiBpdCB3YXMgYXQgYSB0cmFjZSBzdG9wLCB0dXJuIGl0IGludG8KIAkJCSAqIGEgbm9ybWFsIHN0b3Agc2luY2UgaXQncyBubyBsb25nZXIgYmVpbmcKQEAgLTY0Miw2ICs2MjYsMjMgQEAKIAkJfQogCX0KIAorCS8qIElmIHRoaXMgaXMgYSB0aHJlYWRlZCByZXBhcmVudCB0aGVyZSBpcyBubyBuZWVkIHRvCisJICogbm90aWZ5IGFueW9uZSBhbnl0aGluZyBoYXMgaGFwcGVuZWQuCisJICovCisJaWYgKHAtPnJlYWxfcGFyZW50LT5ncm91cF9sZWFkZXIgPT0gZmF0aGVyLT5ncm91cF9sZWFkZXIpCisJCXJldHVybjsKKworCS8qIFdlIGRvbid0IHdhbnQgcGVvcGxlIHNsYXlpbmcgaW5pdC4gICovCisJaWYgKHAtPmV4aXRfc2lnbmFsICE9IC0xKQorCQlwLT5leGl0X3NpZ25hbCA9IFNJR0NITEQ7CisKKwkvKiBJZiB3ZSdkIG5vdGlmaWVkIHRoZSBvbGQgcGFyZW50IGFib3V0IHRoaXMgY2hpbGQncyBkZWF0aCwKKwkgKiBhbHNvIG5vdGlmeSB0aGUgbmV3IHBhcmVudC4KKwkgKi8KKwlpZiAoIXRyYWNlZCAmJiBwLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFICYmCisJICAgIHAtPmV4aXRfc2lnbmFsICE9IC0xICYmIHRocmVhZF9ncm91cF9lbXB0eShwKSkKKwkJZG9fbm90aWZ5X3BhcmVudChwLCBwLT5leGl0X3NpZ25hbCk7CisKIAkvKgogCSAqIHByb2Nlc3MgZ3JvdXAgb3JwaGFuIGNoZWNrCiAJICogQ2FzZSBpaTogT3VyIGNoaWxkIGlzIGluIGEgZGlmZmVyZW50IHBncnAKQEAgLTY0OSwxMCArNjUwLDExIEBACiAJICogb3V0c2lkZSwgc28gdGhlIGNoaWxkIHBncnAgaXMgbm93IG9ycGhhbmVkLgogCSAqLwogCWlmICgocHJvY2Vzc19ncm91cChwKSAhPSBwcm9jZXNzX2dyb3VwKGZhdGhlcikpICYmCi0JICAgIChwLT5zaWduYWwtPnNlc3Npb24gPT0gZmF0aGVyLT5zaWduYWwtPnNlc3Npb24pKSB7CisJICAgIChwcm9jZXNzX3Nlc3Npb24ocCkgPT0gcHJvY2Vzc19zZXNzaW9uKGZhdGhlcikpKSB7CiAJCWludCBwZ3JwID0gcHJvY2Vzc19ncm91cChwKTsKIAotCQlpZiAod2lsbF9iZWNvbWVfb3JwaGFuZWRfcGdycChwZ3JwLCBOVUxMKSAmJiBoYXNfc3RvcHBlZF9qb2JzKHBncnApKSB7CisJCWlmICh3aWxsX2JlY29tZV9vcnBoYW5lZF9wZ3JwKHBncnAsIE5VTEwpICYmCisJCSAgICBoYXNfc3RvcHBlZF9qb2JzKHBncnApKSB7CiAJCQlfX2tpbGxfcGdfaW5mbyhTSUdIVVAsIFNFTkRfU0lHX1BSSVYsIHBncnApOwogCQkJX19raWxsX3BnX2luZm8oU0lHQ09OVCwgU0VORF9TSUdfUFJJViwgcGdycCk7CiAJCX0KQEAgLTY2Myw3ICs2NjUsOCBAQAogICogV2hlbiB3ZSBkaWUsIHdlIHJlLXBhcmVudCBhbGwgb3VyIGNoaWxkcmVuLgogICogVHJ5IHRvIGdpdmUgdGhlbSB0byBhbm90aGVyIHRocmVhZCBpbiBvdXIgdGhyZWFkCiAgKiBncm91cCwgYW5kIGlmIG5vIHN1Y2ggbWVtYmVyIGV4aXN0cywgZ2l2ZSBpdCB0bwotICogdGhlIGdsb2JhbCBjaGlsZCByZWFwZXIgcHJvY2VzcyAoaWUgImluaXQiKQorICogdGhlIGNoaWxkIHJlYXBlciBwcm9jZXNzIChpZSAiaW5pdCIpIGluIG91ciBwaWQKKyAqIHNwYWNlLgogICovCiBzdGF0aWMgdm9pZAogZm9yZ2V0X29yaWdpbmFsX3BhcmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlciwgc3RydWN0IGxpc3RfaGVhZCAqdG9fcmVsZWFzZSkKQEAgLTY3NCw3ICs2NzcsNyBAQAogCWRvIHsKIAkJcmVhcGVyID0gbmV4dF90aHJlYWQocmVhcGVyKTsKIAkJaWYgKHJlYXBlciA9PSBmYXRoZXIpIHsKLQkJCXJlYXBlciA9IGNoaWxkX3JlYXBlcjsKKwkJCXJlYXBlciA9IGNoaWxkX3JlYXBlcihmYXRoZXIpOwogCQkJYnJlYWs7CiAJCX0KIAl9IHdoaWxlIChyZWFwZXItPmV4aXRfc3RhdGUpOwpAQCAtNzg2LDcgKzc4OSw3IEBACiAJdCA9IHRzay0+cmVhbF9wYXJlbnQ7CiAJCiAJaWYgKChwcm9jZXNzX2dyb3VwKHQpICE9IHByb2Nlc3NfZ3JvdXAodHNrKSkgJiYKLQkgICAgKHQtPnNpZ25hbC0+c2Vzc2lvbiA9PSB0c2stPnNpZ25hbC0+c2Vzc2lvbikgJiYKKwkgICAgKHByb2Nlc3Nfc2Vzc2lvbih0KSA9PSBwcm9jZXNzX3Nlc3Npb24odHNrKSkgJiYKIAkgICAgd2lsbF9iZWNvbWVfb3JwaGFuZWRfcGdycChwcm9jZXNzX2dyb3VwKHRzayksIHRzaykgJiYKIAkgICAgaGFzX3N0b3BwZWRfam9icyhwcm9jZXNzX2dyb3VwKHRzaykpKSB7CiAJCV9fa2lsbF9wZ19pbmZvKFNJR0hVUCwgU0VORF9TSUdfUFJJViwgcHJvY2Vzc19ncm91cCh0c2spKTsKQEAgLTg2MCw4ICs4NjMsMTMgQEAKIAkJcGFuaWMoIkFpZWUsIGtpbGxpbmcgaW50ZXJydXB0IGhhbmRsZXIhIik7CiAJaWYgKHVubGlrZWx5KCF0c2stPnBpZCkpCiAJCXBhbmljKCJBdHRlbXB0ZWQgdG8ga2lsbCB0aGUgaWRsZSB0YXNrISIpOwotCWlmICh1bmxpa2VseSh0c2sgPT0gY2hpbGRfcmVhcGVyKSkKLQkJcGFuaWMoIkF0dGVtcHRlZCB0byBraWxsIGluaXQhIik7CisJaWYgKHVubGlrZWx5KHRzayA9PSBjaGlsZF9yZWFwZXIodHNrKSkpIHsKKwkJaWYgKHRzay0+bnNwcm94eS0+cGlkX25zICE9ICZpbml0X3BpZF9ucykKKwkJCXRzay0+bnNwcm94eS0+cGlkX25zLT5jaGlsZF9yZWFwZXIgPSBpbml0X3BpZF9ucy5jaGlsZF9yZWFwZXI7CisJCWVsc2UKKwkJCXBhbmljKCJBdHRlbXB0ZWQgdG8ga2lsbCBpbml0ISIpOworCX0KKwogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPnB0cmFjZSAmIFBUX1RSQUNFX0VYSVQpKSB7CiAJCWN1cnJlbnQtPnB0cmFjZV9tZXNzYWdlID0gY29kZTsKQEAgLTkzMCw4ICs5MzgsOCBAQAogCiAJdHNrLT5leGl0X2NvZGUgPSBjb2RlOwogCXByb2NfZXhpdF9jb25uZWN0b3IodHNrKTsKLQlleGl0X25vdGlmeSh0c2spOwogCWV4aXRfdGFza19uYW1lc3BhY2VzKHRzayk7CisJZXhpdF9ub3RpZnkodHNrKTsKICNpZmRlZiBDT05GSUdfTlVNQQogCW1wb2xfZnJlZSh0c2stPm1lbXBvbGljeSk7CiAJdHNrLT5tZW1wb2xpY3kgPSBOVUxMOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggN2YyZTMxYi4uZDU3MTE4ZCAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbnRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC9zZW0uaD4KQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CkBAIC0yMDIsNyArMjAzLDcgQEAKIAlzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7CiAKIAlkb3duX3dyaXRlKCZvbGRtbS0+bW1hcF9zZW0pOwotCWZsdXNoX2NhY2hlX21tKG9sZG1tKTsKKwlmbHVzaF9jYWNoZV9kdXBfbW0ob2xkbW0pOwogCS8qCiAJICogTm90IGxpbmtlZCBpbiB5ZXQgLSBubyBkZWFkbG9jayBwb3RlbnRpYWw6CiAJICovCkBAIC0yNTIsNyArMjUzLDcgQEAKIAkJYW5vbl92bWFfbGluayh0bXApOwogCQlmaWxlID0gdG1wLT52bV9maWxlOwogCQlpZiAoZmlsZSkgewotCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJCQlnZXRfZmlsZShmaWxlKTsKIAkJCWlmICh0bXAtPnZtX2ZsYWdzICYgVk1fREVOWVdSSVRFKQogCQkJCWF0b21pY19kZWMoJmlub2RlLT5pX3dyaXRlY291bnQpOwpAQCAtNjEzLDcgKzYxNCw3IEBACiAKIHN0YXRpYyBpbnQgY291bnRfb3Blbl9maWxlcyhzdHJ1Y3QgZmR0YWJsZSAqZmR0KQogewotCWludCBzaXplID0gZmR0LT5tYXhfZmRzZXQ7CisJaW50IHNpemUgPSBmZHQtPm1heF9mZHM7CiAJaW50IGk7CiAKIAkvKiBGaW5kIHRoZSBsYXN0IG9wZW4gZmQgKi8KQEAgLTY0MCwxMiArNjQxLDEwIEBACiAJbmV3Zi0+bmV4dF9mZCA9IDA7CiAJZmR0ID0gJm5ld2YtPmZkdGFiOwogCWZkdC0+bWF4X2ZkcyA9IE5SX09QRU5fREVGQVVMVDsKLQlmZHQtPm1heF9mZHNldCA9IEVNQkVEREVEX0ZEX1NFVF9TSVpFOwogCWZkdC0+Y2xvc2Vfb25fZXhlYyA9IChmZF9zZXQgKikmbmV3Zi0+Y2xvc2Vfb25fZXhlY19pbml0OwogCWZkdC0+b3Blbl9mZHMgPSAoZmRfc2V0ICopJm5ld2YtPm9wZW5fZmRzX2luaXQ7CiAJZmR0LT5mZCA9ICZuZXdmLT5mZF9hcnJheVswXTsKIAlJTklUX1JDVV9IRUFEKCZmZHQtPnJjdSk7Ci0JZmR0LT5mcmVlX2ZpbGVzID0gTlVMTDsKIAlmZHQtPm5leHQgPSBOVUxMOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZXdmLT5mZHQsIGZkdCk7CiBvdXQ6CkBAIC02NjEsNyArNjYwLDcgQEAKIHsKIAlzdHJ1Y3QgZmlsZXNfc3RydWN0ICpuZXdmOwogCXN0cnVjdCBmaWxlICoqb2xkX2ZkcywgKipuZXdfZmRzOwotCWludCBvcGVuX2ZpbGVzLCBzaXplLCBpLCBleHBhbmQ7CisJaW50IG9wZW5fZmlsZXMsIHNpemUsIGk7CiAJc3RydWN0IGZkdGFibGUgKm9sZF9mZHQsICpuZXdfZmR0OwogCiAJKmVycm9ycCA9IC1FTk9NRU07CkBAIC02NzIsMjUgKzY3MSwxNCBAQAogCXNwaW5fbG9jaygmb2xkZi0+ZmlsZV9sb2NrKTsKIAlvbGRfZmR0ID0gZmlsZXNfZmR0YWJsZShvbGRmKTsKIAluZXdfZmR0ID0gZmlsZXNfZmR0YWJsZShuZXdmKTsKLQlzaXplID0gb2xkX2ZkdC0+bWF4X2Zkc2V0OwogCW9wZW5fZmlsZXMgPSBjb3VudF9vcGVuX2ZpbGVzKG9sZF9mZHQpOwotCWV4cGFuZCA9IDA7CiAKIAkvKgotCSAqIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBhbGxvY2F0ZSBhIGxhcmdlciBmZCBhcnJheSBvciBmZCBzZXQuCi0JICogTm90ZTogd2UncmUgbm90IGEgY2xvbmUgdGFzaywgc28gdGhlIG9wZW4gY291bnQgd29uJ3QgIGNoYW5nZS4KKwkgKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBsYXJnZXIgZmQgYXJyYXkgYW5kIGZkIHNldC4KKwkgKiBOb3RlOiB3ZSdyZSBub3QgYSBjbG9uZSB0YXNrLCBzbyB0aGUgb3BlbiBjb3VudCB3b24ndCBjaGFuZ2UuCiAJICovCi0JaWYgKG9wZW5fZmlsZXMgPiBuZXdfZmR0LT5tYXhfZmRzZXQpIHsKLQkJbmV3X2ZkdC0+bWF4X2Zkc2V0ID0gMDsKLQkJZXhwYW5kID0gMTsKLQl9CiAJaWYgKG9wZW5fZmlsZXMgPiBuZXdfZmR0LT5tYXhfZmRzKSB7CiAJCW5ld19mZHQtPm1heF9mZHMgPSAwOwotCQlleHBhbmQgPSAxOwotCX0KLQotCS8qIGlmIHRoZSBvbGQgZmRzZXQgZ2V0cyBncm93biBub3csIHdlJ2xsIG9ubHkgY29weSB1cCB0byAic2l6ZSIgZmRzICovCi0JaWYgKGV4cGFuZCkgewogCQlzcGluX3VubG9jaygmb2xkZi0+ZmlsZV9sb2NrKTsKIAkJc3Bpbl9sb2NrKCZuZXdmLT5maWxlX2xvY2spOwogCQkqZXJyb3JwID0gZXhwYW5kX2ZpbGVzKG5ld2YsIG9wZW5fZmlsZXMtMSk7CkBAIC03MTAsOCArNjk4LDEwIEBACiAJb2xkX2ZkcyA9IG9sZF9mZHQtPmZkOwogCW5ld19mZHMgPSBuZXdfZmR0LT5mZDsKIAotCW1lbWNweShuZXdfZmR0LT5vcGVuX2Zkcy0+ZmRzX2JpdHMsIG9sZF9mZHQtPm9wZW5fZmRzLT5mZHNfYml0cywgb3Blbl9maWxlcy84KTsKLQltZW1jcHkobmV3X2ZkdC0+Y2xvc2Vfb25fZXhlYy0+ZmRzX2JpdHMsIG9sZF9mZHQtPmNsb3NlX29uX2V4ZWMtPmZkc19iaXRzLCBvcGVuX2ZpbGVzLzgpOworCW1lbWNweShuZXdfZmR0LT5vcGVuX2Zkcy0+ZmRzX2JpdHMsCisJCW9sZF9mZHQtPm9wZW5fZmRzLT5mZHNfYml0cywgb3Blbl9maWxlcy84KTsKKwltZW1jcHkobmV3X2ZkdC0+Y2xvc2Vfb25fZXhlYy0+ZmRzX2JpdHMsCisJCW9sZF9mZHQtPmNsb3NlX29uX2V4ZWMtPmZkc19iaXRzLCBvcGVuX2ZpbGVzLzgpOwogCiAJZm9yIChpID0gb3Blbl9maWxlczsgaSAhPSAwOyBpLS0pIHsKIAkJc3RydWN0IGZpbGUgKmYgPSAqb2xkX2ZkcysrOwpAQCAtNzM2LDIyICs3MjYsMTkgQEAKIAkvKiBUaGlzIGlzIGxvbmcgd29yZCBhbGlnbmVkIHRodXMgY291bGQgdXNlIGEgb3B0aW1pemVkIHZlcnNpb24gKi8gCiAJbWVtc2V0KG5ld19mZHMsIDAsIHNpemUpOyAKIAotCWlmIChuZXdfZmR0LT5tYXhfZmRzZXQgPiBvcGVuX2ZpbGVzKSB7Ci0JCWludCBsZWZ0ID0gKG5ld19mZHQtPm1heF9mZHNldC1vcGVuX2ZpbGVzKS84OworCWlmIChuZXdfZmR0LT5tYXhfZmRzID4gb3Blbl9maWxlcykgeworCQlpbnQgbGVmdCA9IChuZXdfZmR0LT5tYXhfZmRzLW9wZW5fZmlsZXMpLzg7CiAJCWludCBzdGFydCA9IG9wZW5fZmlsZXMgLyAoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiAKIAkJbWVtc2V0KCZuZXdfZmR0LT5vcGVuX2Zkcy0+ZmRzX2JpdHNbc3RhcnRdLCAwLCBsZWZ0KTsKIAkJbWVtc2V0KCZuZXdfZmR0LT5jbG9zZV9vbl9leGVjLT5mZHNfYml0c1tzdGFydF0sIDAsIGxlZnQpOwogCX0KIAotb3V0OgogCXJldHVybiBuZXdmOwogCiBvdXRfcmVsZWFzZToKLQlmcmVlX2Zkc2V0IChuZXdfZmR0LT5jbG9zZV9vbl9leGVjLCBuZXdfZmR0LT5tYXhfZmRzZXQpOwotCWZyZWVfZmRzZXQgKG5ld19mZHQtPm9wZW5fZmRzLCBuZXdfZmR0LT5tYXhfZmRzZXQpOwotCWZyZWVfZmRfYXJyYXkobmV3X2ZkdC0+ZmQsIG5ld19mZHQtPm1heF9mZHMpOwogCWttZW1fY2FjaGVfZnJlZShmaWxlc19jYWNoZXAsIG5ld2YpOworb3V0OgogCXJldHVybiBOVUxMOwogfQogCkBAIC0xMDU1LDYgKzEwNDIsNyBAQAogCXAtPndjaGFyID0gMDsJCS8qIEkvTyBjb3VudGVyOiBieXRlcyB3cml0dGVuICovCiAJcC0+c3lzY3IgPSAwOwkJLyogSS9PIGNvdW50ZXI6IHJlYWQgc3lzY2FsbHMgKi8KIAlwLT5zeXNjdyA9IDA7CQkvKiBJL08gY291bnRlcjogd3JpdGUgc3lzY2FsbHMgKi8KKwl0YXNrX2lvX2FjY291bnRpbmdfaW5pdChwKTsKIAlhY2N0X2NsZWFyX2ludGVncmFscyhwKTsKIAogIAlwLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CkBAIC0xMjU5LDkgKzEyNDcsOSBAQAogCQlpZiAodGhyZWFkX2dyb3VwX2xlYWRlcihwKSkgewogCQkJcC0+c2lnbmFsLT50dHkgPSBjdXJyZW50LT5zaWduYWwtPnR0eTsKIAkJCXAtPnNpZ25hbC0+cGdycCA9IHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7Ci0JCQlwLT5zaWduYWwtPnNlc3Npb24gPSBjdXJyZW50LT5zaWduYWwtPnNlc3Npb247CisJCQlzZXRfc2lnbmFsX3Nlc3Npb24ocC0+c2lnbmFsLCBwcm9jZXNzX3Nlc3Npb24oY3VycmVudCkpOwogCQkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1BHSUQsIHByb2Nlc3NfZ3JvdXAocCkpOwotCQkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1NJRCwgcC0+c2lnbmFsLT5zZXNzaW9uKTsKKwkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9TSUQsIHByb2Nlc3Nfc2Vzc2lvbihwKSk7CiAKIAkJCWxpc3RfYWRkX3RhaWxfcmN1KCZwLT50YXNrcywgJmluaXRfdGFzay50YXNrcyk7CiAJCQlfX2dldF9jcHVfdmFyKHByb2Nlc3NfY291bnRzKSsrOwpAQCAtMTMyNSw3ICsxMzEzLDcgQEAKIAlyZXR1cm4gcmVnczsKIH0KIAotc3RydWN0IHRhc2tfc3RydWN0ICogX19kZXZpbml0IGZvcmtfaWRsZShpbnQgY3B1KQorc3RydWN0IHRhc2tfc3RydWN0ICogX19jcHVpbml0IGZvcmtfaWRsZShpbnQgY3B1KQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAlzdHJ1Y3QgcHRfcmVncyByZWdzOwpAQCAtMTUyNSwxNyArMTUxMywxOCBAQAogfQogCiAvKgotICogVW5zaGFyZSB0aGUgbmFtZXNwYWNlIHN0cnVjdHVyZSBpZiBpdCBpcyBiZWluZyBzaGFyZWQKKyAqIFVuc2hhcmUgdGhlIG1udF9uYW1lc3BhY2Ugc3RydWN0dXJlIGlmIGl0IGlzIGJlaW5nIHNoYXJlZAogICovCi1zdGF0aWMgaW50IHVuc2hhcmVfbmFtZXNwYWNlKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncywgc3RydWN0IG5hbWVzcGFjZSAqKm5ld19uc3AsIHN0cnVjdCBmc19zdHJ1Y3QgKm5ld19mcykKK3N0YXRpYyBpbnQgdW5zaGFyZV9tbnRfbmFtZXNwYWNlKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncywKKwkJc3RydWN0IG1udF9uYW1lc3BhY2UgKipuZXdfbnNwLCBzdHJ1Y3QgZnNfc3RydWN0ICpuZXdfZnMpCiB7Ci0Jc3RydWN0IG5hbWVzcGFjZSAqbnMgPSBjdXJyZW50LT5uc3Byb3h5LT5uYW1lc3BhY2U7CisJc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zID0gY3VycmVudC0+bnNwcm94eS0+bW50X25zOwogCiAJaWYgKCh1bnNoYXJlX2ZsYWdzICYgQ0xPTkVfTkVXTlMpICYmIG5zKSB7CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJKm5ld19uc3AgPSBkdXBfbmFtZXNwYWNlKGN1cnJlbnQsIG5ld19mcyA/IG5ld19mcyA6IGN1cnJlbnQtPmZzKTsKKwkJKm5ld19uc3AgPSBkdXBfbW50X25zKGN1cnJlbnQsIG5ld19mcyA/IG5ld19mcyA6IGN1cnJlbnQtPmZzKTsKIAkJaWYgKCEqbmV3X25zcCkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTE1NDQsMTUgKzE1MzMsMTMgQEAKIH0KIAogLyoKLSAqIFVuc2hhcmluZyBvZiBzaWdoYW5kIGZvciB0YXNrcyBjcmVhdGVkIHdpdGggQ0xPTkVfU0lHSEFORCBpcyBub3QKLSAqIHN1cHBvcnRlZCB5ZXQKKyAqIFVuc2hhcmluZyBvZiBzaWdoYW5kIGlzIG5vdCBzdXBwb3J0ZWQgeWV0CiAgKi8KIHN0YXRpYyBpbnQgdW5zaGFyZV9zaWdoYW5kKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncywgc3RydWN0IHNpZ2hhbmRfc3RydWN0ICoqbmV3X3NpZ2hwKQogewogCXN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaCA9IGN1cnJlbnQtPnNpZ2hhbmQ7CiAKLQlpZiAoKHVuc2hhcmVfZmxhZ3MgJiBDTE9ORV9TSUdIQU5EKSAmJgotCSAgICAoc2lnaCAmJiBhdG9taWNfcmVhZCgmc2lnaC0+Y291bnQpID4gMSkpCisJaWYgKCh1bnNoYXJlX2ZsYWdzICYgQ0xPTkVfU0lHSEFORCkgJiYgYXRvbWljX3JlYWQoJnNpZ2gtPmNvdW50KSA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCWVsc2UKIAkJcmV0dXJuIDA7CkBAIC0xNjI1LDggKzE2MTIsOCBAQAogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBmc19zdHJ1Y3QgKmZzLCAqbmV3X2ZzID0gTlVMTDsKLQlzdHJ1Y3QgbmFtZXNwYWNlICpucywgKm5ld19ucyA9IE5VTEw7Ci0Jc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoLCAqbmV3X3NpZ2ggPSBOVUxMOworCXN0cnVjdCBtbnRfbmFtZXNwYWNlICpucywgKm5ld19ucyA9IE5VTEw7CisJc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpuZXdfc2lnaCA9IE5VTEw7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0sICpuZXdfbW0gPSBOVUxMLCAqYWN0aXZlX21tID0gTlVMTDsKIAlzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmZCwgKm5ld19mZCA9IE5VTEw7CiAJc3RydWN0IHNlbV91bmRvX2xpc3QgKm5ld191bGlzdCA9IE5VTEw7CkBAIC0xNjQ3LDcgKzE2MzQsNyBAQAogCQlnb3RvIGJhZF91bnNoYXJlX291dDsKIAlpZiAoKGVyciA9IHVuc2hhcmVfZnModW5zaGFyZV9mbGFncywgJm5ld19mcykpKQogCQlnb3RvIGJhZF91bnNoYXJlX2NsZWFudXBfdGhyZWFkOwotCWlmICgoZXJyID0gdW5zaGFyZV9uYW1lc3BhY2UodW5zaGFyZV9mbGFncywgJm5ld19ucywgbmV3X2ZzKSkpCisJaWYgKChlcnIgPSB1bnNoYXJlX21udF9uYW1lc3BhY2UodW5zaGFyZV9mbGFncywgJm5ld19ucywgbmV3X2ZzKSkpCiAJCWdvdG8gYmFkX3Vuc2hhcmVfY2xlYW51cF9mczsKIAlpZiAoKGVyciA9IHVuc2hhcmVfc2lnaGFuZCh1bnNoYXJlX2ZsYWdzLCAmbmV3X3NpZ2gpKSkKIAkJZ290byBiYWRfdW5zaGFyZV9jbGVhbnVwX25zOwpAQCAtMTY3MSw3ICsxNjU4LDcgQEAKIAkJfQogCX0KIAotCWlmIChuZXdfZnMgfHwgbmV3X25zIHx8IG5ld19zaWdoIHx8IG5ld19tbSB8fCBuZXdfZmQgfHwgbmV3X3VsaXN0IHx8CisJaWYgKG5ld19mcyB8fCBuZXdfbnMgfHwgbmV3X21tIHx8IG5ld19mZCB8fCBuZXdfdWxpc3QgfHwKIAkJCQluZXdfdXRzIHx8IG5ld19pcGMpIHsKIAogCQl0YXNrX2xvY2soY3VycmVudCk7CkBAIC0xNjg4LDE3ICsxNjc1LDExIEBACiAJCX0KIAogCQlpZiAobmV3X25zKSB7Ci0JCQlucyA9IGN1cnJlbnQtPm5zcHJveHktPm5hbWVzcGFjZTsKLQkJCWN1cnJlbnQtPm5zcHJveHktPm5hbWVzcGFjZSA9IG5ld19uczsKKwkJCW5zID0gY3VycmVudC0+bnNwcm94eS0+bW50X25zOworCQkJY3VycmVudC0+bnNwcm94eS0+bW50X25zID0gbmV3X25zOwogCQkJbmV3X25zID0gbnM7CiAJCX0KIAotCQlpZiAobmV3X3NpZ2gpIHsKLQkJCXNpZ2ggPSBjdXJyZW50LT5zaWdoYW5kOwotCQkJcmN1X2Fzc2lnbl9wb2ludGVyKGN1cnJlbnQtPnNpZ2hhbmQsIG5ld19zaWdoKTsKLQkJCW5ld19zaWdoID0gc2lnaDsKLQkJfQotCiAJCWlmIChuZXdfbW0pIHsKIAkJCW1tID0gY3VycmVudC0+bW07CiAJCQlhY3RpdmVfbW0gPSBjdXJyZW50LT5hY3RpdmVfbW07CkBAIC0xNzU2LDcgKzE3MzcsNyBAQAogCiBiYWRfdW5zaGFyZV9jbGVhbnVwX25zOgogCWlmIChuZXdfbnMpCi0JCXB1dF9uYW1lc3BhY2UobmV3X25zKTsKKwkJcHV0X21udF9ucyhuZXdfbnMpOwogCiBiYWRfdW5zaGFyZV9jbGVhbnVwX2ZzOgogCWlmIChuZXdfZnMpCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IDk1OTg5YTMuLjVhNzM3ZGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIC8qCiAgKiBHZXQgcGFyYW1ldGVycyB3aGljaCBhcmUgdGhlIGtleXMgZm9yIGEgZnV0ZXguCiAgKgotICogRm9yIHNoYXJlZCBtYXBwaW5ncywgaXQncyAocGFnZS0+aW5kZXgsIHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUsCisgKiBGb3Igc2hhcmVkIG1hcHBpbmdzLCBpdCdzIChwYWdlLT5pbmRleCwgdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLAogICogb2Zmc2V0X3dpdGhpbl9wYWdlKS4gIEZvciBwcml2YXRlIG1hcHBpbmdzLCBpdCdzICh1YWRkciwgY3VycmVudC0+bW0pLgogICogV2UgY2FuIHVzdWFsbHkgd29yayBvdXQgdGhlIGluZGV4IHdpdGhvdXQgc3dhcHBpbmcgaW4gdGhlIHBhZ2UuCiAgKgpAQCAtMjIzLDcgKzIyMyw3IEBACiAJLyoKIAkgKiBMaW5lYXIgZmlsZSBtYXBwaW5ncyBhcmUgYWxzbyBzaW1wbGUuCiAJICovCi0Ja2V5LT5zaGFyZWQuaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWtleS0+c2hhcmVkLmlub2RlID0gdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWtleS0+Ym90aC5vZmZzZXQrKzsgLyogQml0IDAgb2Ygb2Zmc2V0IGluZGljYXRlcyBpbm9kZS1iYXNlZCBrZXkuICovCiAJaWYgKGxpa2VseSghKHZtYS0+dm1fZmxhZ3MgJiBWTV9OT05MSU5FQVIpKSkgewogCQlrZXktPnNoYXJlZC5wZ29mZiA9ICgoKGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKQpAQCAtMTUyOCw5ICsxNTI4LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCWZpbHAtPmZfb3AgPSAmZnV0ZXhfZm9wczsKLQlmaWxwLT5mX3Zmc21udCA9IG1udGdldChmdXRleF9tbnQpOwotCWZpbHAtPmZfZGVudHJ5ID0gZGdldChmdXRleF9tbnQtPm1udF9yb290KTsKLQlmaWxwLT5mX21hcHBpbmcgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nOworCWZpbHAtPmZfcGF0aC5tbnQgPSBtbnRnZXQoZnV0ZXhfbW50KTsKKwlmaWxwLT5mX3BhdGguZGVudHJ5ID0gZGdldChmdXRleF9tbnQtPm1udF9yb290KTsKKwlmaWxwLT5mX21hcHBpbmcgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CiAKIAlpZiAoc2lnbmFsKSB7CiAJCWVyciA9IF9fZl9zZXRvd24oZmlscCwgdGFza19waWQoY3VycmVudCksIFBJRFRZUEVfUElELCAxKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggZWJmZDI0YS4uZDI3YjI1OCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9jaGlwLmMKKysrIGIva2VybmVsL2lycS9jaGlwLmMKQEAgLTUxNywxMCArNTE3LDkgQEAKIAogCWlmICghaGFuZGxlKQogCQloYW5kbGUgPSBoYW5kbGVfYmFkX2lycTsKLQotCWlmIChkZXNjLT5jaGlwID09ICZub19pcnFfY2hpcCkgeworCWVsc2UgaWYgKGRlc2MtPmNoaXAgPT0gJm5vX2lycV9jaGlwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRyeWluZyB0byBpbnN0YWxsICVzaW50ZXJydXB0IGhhbmRsZXIgIgotCQkgICAgICAgImZvciBJUlElZFxuIiwgaXNfY2hhaW5lZCA/ICJjaGFpbmVkICIgOiAiICIsIGlycSk7CisJCSAgICAgICAiZm9yIElSUSVkXG4iLCBpc19jaGFpbmVkID8gImNoYWluZWQgIiA6ICIiLCBpcnEpOwogCQkvKgogCQkgKiBTb21lIEFSTSBpbXBsZW1lbnRhdGlvbnMgaW5zdGFsbCBhIGhhbmRsZXIgZm9yIHJlYWxseSBkdW1iCiAJCSAqIGludGVycnVwdCBoYXJkd2FyZSB3aXRob3V0IHNldHRpbmcgYW4gaXJxX2NoaXAuIFRoaXMgd29ya2VkCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCBiMzg1ODc4Li44Yjk2MWFkIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTMxNSw2ICszMTUsOSBAQAogCQkJLyogVW5kbyBuZXN0ZWQgZGlzYWJsZXM6ICovCiAJCQlkZXNjLT5kZXB0aCA9IDE7CiAJfQorCS8qIFJlc2V0IGJyb2tlbiBpcnEgZGV0ZWN0aW9uIHdoZW4gaW5zdGFsbGluZyBuZXcgaGFuZGxlciAqLworCWRlc2MtPmlycV9jb3VudCA9IDA7CisJZGVzYy0+aXJxc191bmhhbmRsZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCW5ldy0+aXJxID0gaXJxOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9wcm9jLmMgYi9rZXJuZWwvaXJxL3Byb2MuYwppbmRleCA5YTM1MjY2Li42MWY1YzcxIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Byb2MuYworKysgYi9rZXJuZWwvaXJxL3Byb2MuYwpAQCAtNTQsNyArNTQsOCBAQAogCXVuc2lnbmVkIGludCBpcnEgPSAoaW50KShsb25nKWRhdGEsIGZ1bGxfY291bnQgPSBjb3VudCwgZXJyOwogCWNwdW1hc2tfdCBuZXdfdmFsdWUsIHRtcDsKIAotCWlmICghaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkgfHwgbm9faXJxX2FmZmluaXR5KQorCWlmICghaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkgfHwgbm9faXJxX2FmZmluaXR5IHx8CisJCQkJQ0hFQ0tfSVJRX1BFUl9DUFUoaXJxX2Rlc2NbaXJxXS5zdGF0dXMpKQogCQlyZXR1cm4gLUVJTzsKIAogCWVyciA9IGNwdW1hc2tfcGFyc2VfdXNlcihidWZmZXIsIGNvdW50LCBuZXdfdmFsdWUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9zcHVyaW91cy5jIGIva2VybmVsL2lycS9zcHVyaW91cy5jCmluZGV4IDU0M2VhMmUuLjlkOGM3OWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYworKysgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiBpbnQgbm9pcnFkZWJ1ZyBfX3JlYWRfbW9zdGx5OwogCi1pbnQgX19pbml0IG5vaXJxZGVidWdfc2V0dXAoY2hhciAqc3RyKQoraW50IG5vaXJxZGVidWdfc2V0dXAoY2hhciAqc3RyKQogewogCW5vaXJxZGVidWcgPSAxOwogCXByaW50ayhLRVJOX0lORk8gIklSUSBsb2NrdXAgZGV0ZWN0aW9uIGRpc2FibGVkXG4iKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rYWxsc3ltcy5jIGIva2VybmVsL2thbGxzeW1zLmMKaW5kZXggYWI2M2NmYy4uNmYyOTRmZiAxMDA2NDQKLS0tIGEva2VybmVsL2thbGxzeW1zLmMKKysrIGIva2VybmVsL2thbGxzeW1zLmMKQEAgLTMxLDE0ICszMSwxNCBAQAogI2VuZGlmCiAKIC8qIFRoZXNlIHdpbGwgYmUgcmUtbGlua2VkIGFnYWluc3QgdGhlaXIgcmVhbCB2YWx1ZXMgZHVyaW5nIHRoZSBzZWNvbmQgbGluayBzdGFnZSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2FsbHN5bXNfYWRkcmVzc2VzW10gX19hdHRyaWJ1dGVfXygod2VhaykpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2FsbHN5bXNfbnVtX3N5bXMgX19hdHRyaWJ1dGVfXygod2VhayxzZWN0aW9uKCJkYXRhIikpKTsKLWV4dGVybiB1OCBrYWxsc3ltc19uYW1lc1tdIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIGthbGxzeW1zX2FkZHJlc3Nlc1tdIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIGthbGxzeW1zX251bV9zeW1zIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK2V4dGVybiBjb25zdCB1OCBrYWxsc3ltc19uYW1lc1tdIF9fYXR0cmlidXRlX18oKHdlYWspKTsKIAotZXh0ZXJuIHU4IGthbGxzeW1zX3Rva2VuX3RhYmxlW10gX19hdHRyaWJ1dGVfXygod2VhaykpOwotZXh0ZXJuIHUxNiBrYWxsc3ltc190b2tlbl9pbmRleFtdIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK2V4dGVybiBjb25zdCB1OCBrYWxsc3ltc190b2tlbl90YWJsZVtdIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK2V4dGVybiBjb25zdCB1MTYga2FsbHN5bXNfdG9rZW5faW5kZXhbXSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGthbGxzeW1zX21hcmtlcnNbXSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBrYWxsc3ltc19tYXJrZXJzW10gX19hdHRyaWJ1dGVfXygod2VhaykpOwogCiBzdGF0aWMgaW5saW5lIGludCBpc19rZXJuZWxfaW5pdHRleHQodW5zaWduZWQgbG9uZyBhZGRyKQogewpAQCAtODQsNyArODQsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBrYWxsc3ltc19leHBhbmRfc3ltYm9sKHVuc2lnbmVkIGludCBvZmYsIGNoYXIgKnJlc3VsdCkKIHsKIAlpbnQgbGVuLCBza2lwcGVkX2ZpcnN0ID0gMDsKLQl1OCAqdHB0ciwgKmRhdGE7CisJY29uc3QgdTggKnRwdHIsICpkYXRhOwogCiAJLyogZ2V0IHRoZSBjb21wcmVzc2VkIHN5bWJvbCBsZW5ndGggZnJvbSB0aGUgZmlyc3Qgc3ltYm9sIGJ5dGUgKi8KIAlkYXRhID0gJmthbGxzeW1zX25hbWVzW29mZl07CkBAIC0xMzIsNyArMTMyLDcgQEAKICAqIGthbGxzeW1zIGFycmF5ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9zeW1ib2xfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgcG9zKQogewotCXU4ICpuYW1lOworCWNvbnN0IHU4ICpuYW1lOwogCWludCBpOwogCiAJLyogdXNlIHRoZSBjbG9zZXN0IG1hcmtlciB3ZSBoYXZlLiBXZSBoYXZlIG1hcmtlcnMgZXZlcnkgMjU2IHBvc2l0aW9ucywKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDhkMmJlYTAuLjNhNzM3OWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbnRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDE3ZWM0YWYuLjZmY2Y4ZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIva2VybmVsL2twcm9iZXMuYwpAQCAtODcsNiArODcsMTIgQEAKIAlpbnQgbmdhcmJhZ2U7CiB9OwogCitlbnVtIGtwcm9iZV9zbG90X3N0YXRlIHsKKwlTTE9UX0NMRUFOID0gMCwKKwlTTE9UX0RJUlRZID0gMSwKKwlTTE9UX1VTRUQgPSAyLAorfTsKKwogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGtwcm9iZV9pbnNuX3BhZ2VzOwogc3RhdGljIGludCBrcHJvYmVfZ2FyYmFnZV9zbG90czsKIHN0YXRpYyBpbnQgY29sbGVjdF9nYXJiYWdlX3Nsb3RzKHZvaWQpOwpAQCAtMTMwLDggKzEzNiw4IEBACiAJCWlmIChraXAtPm51c2VkIDwgSU5TTlNfUEVSX1BBR0UpIHsKIAkJCWludCBpOwogCQkJZm9yIChpID0gMDsgaSA8IElOU05TX1BFUl9QQUdFOyBpKyspIHsKLQkJCQlpZiAoIWtpcC0+c2xvdF91c2VkW2ldKSB7Ci0JCQkJCWtpcC0+c2xvdF91c2VkW2ldID0gMTsKKwkJCQlpZiAoa2lwLT5zbG90X3VzZWRbaV0gPT0gU0xPVF9DTEVBTikgeworCQkJCQlraXAtPnNsb3RfdXNlZFtpXSA9IFNMT1RfVVNFRDsKIAkJCQkJa2lwLT5udXNlZCsrOwogCQkJCQlyZXR1cm4ga2lwLT5pbnNucyArIChpICogTUFYX0lOU05fU0laRSk7CiAJCQkJfQpAQCAtMTYzLDggKzE2OSw4IEBACiAJfQogCUlOSVRfSExJU1RfTk9ERSgma2lwLT5obGlzdCk7CiAJaGxpc3RfYWRkX2hlYWQoJmtpcC0+aGxpc3QsICZrcHJvYmVfaW5zbl9wYWdlcyk7Ci0JbWVtc2V0KGtpcC0+c2xvdF91c2VkLCAwLCBJTlNOU19QRVJfUEFHRSk7Ci0Ja2lwLT5zbG90X3VzZWRbMF0gPSAxOworCW1lbXNldChraXAtPnNsb3RfdXNlZCwgU0xPVF9DTEVBTiwgSU5TTlNfUEVSX1BBR0UpOworCWtpcC0+c2xvdF91c2VkWzBdID0gU0xPVF9VU0VEOwogCWtpcC0+bnVzZWQgPSAxOwogCWtpcC0+bmdhcmJhZ2UgPSAwOwogCXJldHVybiBraXAtPmluc25zOwpAQCAtMTczLDcgKzE3OSw3IEBACiAvKiBSZXR1cm4gMSBpZiBhbGwgZ2FyYmFnZXMgYXJlIGNvbGxlY3RlZCwgb3RoZXJ3aXNlIDAuICovCiBzdGF0aWMgaW50IF9fa3Byb2JlcyBjb2xsZWN0X29uZV9zbG90KHN0cnVjdCBrcHJvYmVfaW5zbl9wYWdlICpraXAsIGludCBpZHgpCiB7Ci0Ja2lwLT5zbG90X3VzZWRbaWR4XSA9IDA7CisJa2lwLT5zbG90X3VzZWRbaWR4XSA9IFNMT1RfQ0xFQU47CiAJa2lwLT5udXNlZC0tOwogCWlmIChraXAtPm51c2VkID09IDApIHsKIAkJLyoKQEAgLTIxMiw3ICsyMTgsNyBAQAogCQkJY29udGludWU7CiAJCWtpcC0+bmdhcmJhZ2UgPSAwOwkvKiB3ZSB3aWxsIGNvbGxlY3QgYWxsIGdhcmJhZ2VzICovCiAJCWZvciAoaSA9IDA7IGkgPCBJTlNOU19QRVJfUEFHRTsgaSsrKSB7Ci0JCQlpZiAoa2lwLT5zbG90X3VzZWRbaV0gPT0gLTEgJiYKKwkJCWlmIChraXAtPnNsb3RfdXNlZFtpXSA9PSBTTE9UX0RJUlRZICYmCiAJCQkgICAgY29sbGVjdF9vbmVfc2xvdChraXAsIGkpKQogCQkJCWJyZWFrOwogCQl9CkBAIC0yMzIsNyArMjM4LDcgQEAKIAkJICAgIHNsb3QgPCBraXAtPmluc25zICsgKElOU05TX1BFUl9QQUdFICogTUFYX0lOU05fU0laRSkpIHsKIAkJCWludCBpID0gKHNsb3QgLSBraXAtPmluc25zKSAvIE1BWF9JTlNOX1NJWkU7CiAJCQlpZiAoZGlydHkpIHsKLQkJCQlraXAtPnNsb3RfdXNlZFtpXSA9IC0xOworCQkJCWtpcC0+c2xvdF91c2VkW2ldID0gU0xPVF9ESVJUWTsKIAkJCQlraXAtPm5nYXJiYWdlKys7CiAJCQl9IGVsc2UgewogCQkJCWNvbGxlY3Rfb25lX3Nsb3Qoa2lwLCBpKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IGIwMjAzMjQuLjUwOWVmZDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtNDMsMTMgKzQzLDQ5IEBACiAjaW5jbHVkZSAibG9ja2RlcF9pbnRlcm5hbHMuaCIKIAogLyoKLSAqIGhhc2hfbG9jazogcHJvdGVjdHMgdGhlIGxvY2tkZXAgaGFzaGVzIGFuZCBjbGFzcy9saXN0L2hhc2ggYWxsb2NhdG9ycy4KKyAqIGxvY2tkZXBfbG9jazogcHJvdGVjdHMgdGhlIGxvY2tkZXAgZ3JhcGgsIHRoZSBoYXNoZXMgYW5kIHRoZQorICogICAgICAgICAgICAgICBjbGFzcy9saXN0L2hhc2ggYWxsb2NhdG9ycy4KICAqCiAgKiBUaGlzIGlzIG9uZSBvZiB0aGUgcmFyZSBleGNlcHRpb25zIHdoZXJlIGl0J3MganVzdGlmaWVkCiAgKiB0byB1c2UgYSByYXcgc3BpbmxvY2sgLSB3ZSByZWFsbHkgZG9udCB3YW50IHRoZSBzcGlubG9jawotICogY29kZSB0byByZWN1cnNlIGJhY2sgaW50byB0aGUgbG9ja2RlcCBjb2RlLgorICogY29kZSB0byByZWN1cnNlIGJhY2sgaW50byB0aGUgbG9ja2RlcCBjb2RlLi4uCiAgKi8KLXN0YXRpYyByYXdfc3BpbmxvY2tfdCBoYXNoX2xvY2sgPSAocmF3X3NwaW5sb2NrX3QpX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIHJhd19zcGlubG9ja190IGxvY2tkZXBfbG9jayA9IChyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CisKK3N0YXRpYyBpbnQgZ3JhcGhfbG9jayh2b2lkKQoreworCV9fcmF3X3NwaW5fbG9jaygmbG9ja2RlcF9sb2NrKTsKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IGlmIGFub3RoZXIgQ1BVIGRldGVjdGVkIGEgYnVnIHdoaWxlCisJICogd2Fsa2luZyB0aGUgZ3JhcGggd2UgZG9udCBjaGFuZ2UgaXQgKHdoaWxlIHRoZSBvdGhlcgorCSAqIENQVSBpcyBidXN5IHByaW50aW5nIG91dCBzdHVmZiB3aXRoIHRoZSBncmFwaCBsb2NrCisJICogZHJvcHBlZCBhbHJlYWR5KQorCSAqLworCWlmICghZGVidWdfbG9ja3MpIHsKKwkJX19yYXdfc3Bpbl91bmxvY2soJmxvY2tkZXBfbG9jayk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3JhcGhfdW5sb2NrKHZvaWQpCit7CisJX19yYXdfc3Bpbl91bmxvY2soJmxvY2tkZXBfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUdXJuIGxvY2sgZGVidWdnaW5nIG9mZiBhbmQgcmV0dXJuIHdpdGggMCBpZiBpdCB3YXMgb2ZmIGFscmVhZHksCisgKiBhbmQgYWxzbyByZWxlYXNlIHRoZSBncmFwaCBsb2NrOgorICovCitzdGF0aWMgaW5saW5lIGludCBkZWJ1Z19sb2Nrc19vZmZfZ3JhcGhfdW5sb2NrKHZvaWQpCit7CisJaW50IHJldCA9IGRlYnVnX2xvY2tzX29mZigpOworCisJX19yYXdfc3Bpbl91bmxvY2soJmxvY2tkZXBfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgaW50IGxvY2tkZXBfaW5pdGlhbGl6ZWQ7CiAKQEAgLTU3LDE0ICs5MywxNSBAQAogc3RhdGljIHN0cnVjdCBsb2NrX2xpc3QgbGlzdF9lbnRyaWVzW01BWF9MT0NLREVQX0VOVFJJRVNdOwogCiAvKgotICogQWxsb2NhdGUgYSBsb2NrZGVwIGVudHJ5LiAoYXNzdW1lcyBoYXNoX2xvY2sgaGVsZCwgcmV0dXJucworICogQWxsb2NhdGUgYSBsb2NrZGVwIGVudHJ5LiAoYXNzdW1lcyB0aGUgZ3JhcGhfbG9jayBoZWxkLCByZXR1cm5zCiAgKiB3aXRoIE5VTEwgb24gZmFpbHVyZSkKICAqLwogc3RhdGljIHN0cnVjdCBsb2NrX2xpc3QgKmFsbG9jX2xpc3RfZW50cnkodm9pZCkKIHsKIAlpZiAobnJfbGlzdF9lbnRyaWVzID49IE1BWF9MT0NLREVQX0VOVFJJRVMpIHsKLQkJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7Ci0JCWRlYnVnX2xvY2tzX29mZigpOworCQlpZiAoIWRlYnVnX2xvY2tzX29mZl9ncmFwaF91bmxvY2soKSkKKwkJCXJldHVybiBOVUxMOworCiAJCXByaW50aygiQlVHOiBNQVhfTE9DS0RFUF9FTlRSSUVTIHRvbyBsb3chXG4iKTsKIAkJcHJpbnRrKCJ0dXJuaW5nIG9mZiB0aGUgbG9ja2luZyBjb3JyZWN0bmVzcyB2YWxpZGF0b3IuXG4iKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNDUsOSArMTgyLDcgQEAKICAqLwogCiAjZGVmaW5lIFZFUkJPU0UJCQkwCi0jaWZkZWYgVkVSQk9TRQotIyBkZWZpbmUgVkVSWV9WRVJCT1NFCQkwCi0jZW5kaWYKKyNkZWZpbmUgVkVSWV9WRVJCT1NFCQkwCiAKICNpZiBWRVJCT1NFCiAjIGRlZmluZSBIQVJESVJRX1ZFUkJPU0UJMQpAQCAtMTcyLDggKzIwNyw4IEBACiAJCQkhc3RyY21wKGNsYXNzLT5uYW1lLCAiJnN0cnVjdC0+bG9ja2ZpZWxkIikpCiAJCXJldHVybiAxOwogI2VuZGlmCi0JLyogQWxsb3cgZXZlcnl0aGluZyBlbHNlLiAwIHdvdWxkIGJlIGZpbHRlciBldmVyeXRoaW5nIGVsc2UgKi8KLQlyZXR1cm4gMTsKKwkvKiBGaWx0ZXIgZXZlcnl0aGluZyBlbHNlLiAxIHdvdWxkIGJlIHRvIGFsbG93IGV2ZXJ5dGhpbmcgZWxzZSAqLworCXJldHVybiAwOwogfQogI2VuZGlmCiAKQEAgLTIwNyw3ICsyNDIsNyBAQAogCiAvKgogICogU3RhY2stdHJhY2U6IHRpZ2h0bHkgcGFja2VkIGFycmF5IG9mIHN0YWNrIGJhY2t0cmFjZQotICogYWRkcmVzc2VzLiBQcm90ZWN0ZWQgYnkgdGhlIGhhc2hfbG9jay4KKyAqIGFkZHJlc3Nlcy4gUHJvdGVjdGVkIGJ5IHRoZSBncmFwaF9sb2NrLgogICovCiB1bnNpZ25lZCBsb25nIG5yX3N0YWNrX3RyYWNlX2VudHJpZXM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFja190cmFjZVtNQVhfU1RBQ0tfVFJBQ0VfRU5UUklFU107CkBAIC0yMjYsMTggKzI2MSwxNSBAQAogCXRyYWNlLT5tYXhfZW50cmllcyA9IHRyYWNlLT5ucl9lbnRyaWVzOwogCiAJbnJfc3RhY2tfdHJhY2VfZW50cmllcyArPSB0cmFjZS0+bnJfZW50cmllczsKLQlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTihucl9zdGFja190cmFjZV9lbnRyaWVzID4gTUFYX1NUQUNLX1RSQUNFX0VOVFJJRVMpKSB7Ci0JCV9fcmF3X3NwaW5fdW5sb2NrKCZoYXNoX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9CiAKIAlpZiAobnJfc3RhY2tfdHJhY2VfZW50cmllcyA9PSBNQVhfU1RBQ0tfVFJBQ0VfRU5UUklFUykgewotCQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKLQkJaWYgKGRlYnVnX2xvY2tzX29mZigpKSB7Ci0JCQlwcmludGsoIkJVRzogTUFYX1NUQUNLX1RSQUNFX0VOVFJJRVMgdG9vIGxvdyFcbiIpOwotCQkJcHJpbnRrKCJ0dXJuaW5nIG9mZiB0aGUgbG9ja2luZyBjb3JyZWN0bmVzcyB2YWxpZGF0b3IuXG4iKTsKLQkJCWR1bXBfc3RhY2soKTsKLQkJfQorCQlpZiAoIWRlYnVnX2xvY2tzX29mZl9ncmFwaF91bmxvY2soKSkKKwkJCXJldHVybiAwOworCisJCXByaW50aygiQlVHOiBNQVhfU1RBQ0tfVFJBQ0VfRU5UUklFUyB0b28gbG93IVxuIik7CisJCXByaW50aygidHVybmluZyBvZmYgdGhlIGxvY2tpbmcgY29ycmVjdG5lc3MgdmFsaWRhdG9yLlxuIik7CisJCWR1bXBfc3RhY2soKTsKKwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUyNiw5ICs1NTgsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CiAKLQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKLQlkZWJ1Z19sb2Nrc19vZmYoKTsKLQlpZiAoZGVidWdfbG9ja3Nfc2lsZW50KQorCWlmICghZGVidWdfbG9ja3Nfb2ZmX2dyYXBoX3VubG9jaygpIHx8IGRlYnVnX2xvY2tzX3NpbGVudCkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CkBAIC01NTYsMTIgKzU4NiwxMCBAQAogCWlmIChkZWJ1Z19sb2Nrc19zaWxlbnQpCiAJCXJldHVybiAwOwogCi0JLyogaGFzaF9sb2NrIHVubG9ja2VkIGJ5IHRoZSBoZWFkZXIgKi8KLQlfX3Jhd19zcGluX2xvY2soJmhhc2hfbG9jayk7CiAJdGhpcy5jbGFzcyA9IGNoZWNrX3NvdXJjZS0+Y2xhc3M7CiAJaWYgKCFzYXZlX3RyYWNlKCZ0aGlzLnRyYWNlKSkKIAkJcmV0dXJuIDA7Ci0JX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisKIAlwcmludF9jaXJjdWxhcl9idWdfZW50cnkoJnRoaXMsIDApOwogCiAJcHJpbnRrKCJcbm90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6XG5cbiIpOwpAQCAtNTc3LDggKzYwNSwxMCBAQAogCiBzdGF0aWMgaW50IG5vaW5saW5lIHByaW50X2luZmluaXRlX3JlY3Vyc2lvbl9idWcodm9pZCkKIHsKLQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKLQlERUJVR19MT0NLU19XQVJOX09OKDEpOworCWlmICghZGVidWdfbG9ja3Nfb2ZmX2dyYXBoX3VubG9jaygpKQorCQlyZXR1cm4gMDsKKworCVdBUk5fT04oMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcxMyw5ICs3NDMsNyBAQAogCQkJIGVudW0gbG9ja191c2FnZV9iaXQgYml0MiwKIAkJCSBjb25zdCBjaGFyICppcnFjbGFzcykKIHsKLQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKLQlkZWJ1Z19sb2Nrc19vZmYoKTsKLQlpZiAoZGVidWdfbG9ja3Nfc2lsZW50KQorCWlmICghZGVidWdfbG9ja3Nfb2ZmX2dyYXBoX3VubG9jaygpIHx8IGRlYnVnX2xvY2tzX3NpbGVudCkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKQEAgLTc5Niw5ICs4MjQsNyBAQAogcHJpbnRfZGVhZGxvY2tfYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqcHJldiwKIAkJICAgc3RydWN0IGhlbGRfbG9jayAqbmV4dCkKIHsKLQlkZWJ1Z19sb2Nrc19vZmYoKTsKLQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKLQlpZiAoZGVidWdfbG9ja3Nfc2lsZW50KQorCWlmICghZGVidWdfbG9ja3Nfb2ZmX2dyYXBoX3VubG9jaygpIHx8IGRlYnVnX2xvY2tzX3NpbGVudCkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKQEAgLTk3NCwxNCArMTAwMCwxNCBAQAogCSAqIERlYnVnZ2luZyBwcmludG91dHM6CiAJICovCiAJaWYgKHZlcmJvc2UocHJldi0+Y2xhc3MpIHx8IHZlcmJvc2UobmV4dC0+Y2xhc3MpKSB7Ci0JCV9fcmF3X3NwaW5fdW5sb2NrKCZoYXNoX2xvY2spOworCQlncmFwaF91bmxvY2soKTsKIAkJcHJpbnRrKCJcbiBuZXcgZGVwZW5kZW5jeTogIik7CiAJCXByaW50X2xvY2tfbmFtZShwcmV2LT5jbGFzcyk7CiAJCXByaW50aygiID0+ICIpOwogCQlwcmludF9sb2NrX25hbWUobmV4dC0+Y2xhc3MpOwogCQlwcmludGsoIlxuIik7CiAJCWR1bXBfc3RhY2soKTsKLQkJX19yYXdfc3Bpbl9sb2NrKCZoYXNoX2xvY2spOworCQlyZXR1cm4gZ3JhcGhfbG9jaygpOwogCX0KIAlyZXR1cm4gMTsKIH0KQEAgLTEwNDYsOCArMTA3MiwxMCBAQAogCX0KIAlyZXR1cm4gMTsKIG91dF9idWc6Ci0JX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7Ci0JREVCVUdfTE9DS1NfV0FSTl9PTigxKTsKKwlpZiAoIWRlYnVnX2xvY2tzX29mZl9ncmFwaF91bmxvY2soKSkKKwkJcmV0dXJuIDA7CisKKwlXQVJOX09OKDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjAxLDcgKzEyMjksMTAgQEAKIAloYXNoX2hlYWQgPSBjbGFzc2hhc2hlbnRyeShrZXkpOwogCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3Jhd19zcGluX2xvY2soJmhhc2hfbG9jayk7CisJaWYgKCFncmFwaF9sb2NrKCkpIHsKKwkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCS8qCiAJICogV2UgaGF2ZSB0byBkbyB0aGUgaGFzaC13YWxrIGFnYWluLCB0byBhdm9pZCByYWNlcwogCSAqIHdpdGggYW5vdGhlciBDUFU6CkBAIC0xMjE0LDkgKzEyNDUsMTIgQEAKIAkgKiB0aGUgaGFzaDoKIAkgKi8KIAlpZiAobnJfbG9ja19jbGFzc2VzID49IE1BWF9MT0NLREVQX0tFWVMpIHsKLQkJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJCWlmICghZGVidWdfbG9ja3Nfb2ZmX2dyYXBoX3VubG9jaygpKSB7CisJCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KIAkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJZGVidWdfbG9ja3Nfb2ZmKCk7CisKIAkJcHJpbnRrKCJCVUc6IE1BWF9MT0NLREVQX0tFWVMgdG9vIGxvdyFcbiIpOwogCQlwcmludGsoInR1cm5pbmcgb2ZmIHRoZSBsb2NraW5nIGNvcnJlY3RuZXNzIHZhbGlkYXRvci5cbiIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTEyMzcsMTggKzEyNzEsMjMgQEAKIAlsaXN0X2FkZF90YWlsX3JjdSgmY2xhc3MtPmhhc2hfZW50cnksIGhhc2hfaGVhZCk7CiAKIAlpZiAodmVyYm9zZShjbGFzcykpIHsKLQkJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJCWdyYXBoX3VubG9jaygpOwogCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJCXByaW50aygiXG5uZXcgY2xhc3MgJXA6ICVzIiwgY2xhc3MtPmtleSwgY2xhc3MtPm5hbWUpOwogCQlpZiAoY2xhc3MtPm5hbWVfdmVyc2lvbiA+IDEpCiAJCQlwcmludGsoIiMlZCIsIGNsYXNzLT5uYW1lX3ZlcnNpb24pOwogCQlwcmludGsoIlxuIik7CiAJCWR1bXBfc3RhY2soKTsKKwogCQlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlfX3Jhd19zcGluX2xvY2soJmhhc2hfbG9jayk7CisJCWlmICghZ3JhcGhfbG9jaygpKSB7CisJCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KIAl9CiBvdXRfdW5sb2NrX3NldDoKLQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKKwlncmFwaF91bmxvY2soKTsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJaWYgKCFzdWJjbGFzcyB8fCBmb3JjZSkKQEAgLTEyNjQsNyArMTMwMyw3IEBACiAgKiBhZGQgaXQgYW5kIHJldHVybiAwIC0gaW4gdGhpcyBjYXNlIHRoZSBuZXcgZGVwZW5kZW5jeSBjaGFpbiBpcwogICogdmFsaWRhdGVkLiBJZiB0aGUga2V5IGlzIGFscmVhZHkgaGFzaGVkLCByZXR1cm4gMS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgbG9va3VwX2NoYWluX2NhY2hlKHU2NCBjaGFpbl9rZXkpCitzdGF0aWMgaW5saW5lIGludCBsb29rdXBfY2hhaW5fY2FjaGUodTY0IGNoYWluX2tleSwgc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmhhc2hfaGVhZCA9IGNoYWluaGFzaGVudHJ5KGNoYWluX2tleSk7CiAJc3RydWN0IGxvY2tfY2hhaW4gKmNoYWluOwpAQCAtMTI3OCwzNCArMTMxNywzNiBAQAogCQlpZiAoY2hhaW4tPmNoYWluX2tleSA9PSBjaGFpbl9rZXkpIHsKIGNhY2hlX2hpdDoKIAkJCWRlYnVnX2F0b21pY19pbmMoJmNoYWluX2xvb2t1cF9oaXRzKTsKLQkJCS8qCi0JCQkgKiBJbiB0aGUgZGVidWdnaW5nIGNhc2UsIGZvcmNlIHJlZHVuZGFudCBjaGVja2luZwotCQkJICogYnkgcmV0dXJuaW5nIDE6Ci0JCQkgKi8KLSNpZmRlZiBDT05GSUdfREVCVUdfTE9DS0RFUAotCQkJX19yYXdfc3Bpbl9sb2NrKCZoYXNoX2xvY2spOwotCQkJcmV0dXJuIDE7Ci0jZW5kaWYKKwkJCWlmICh2ZXJ5X3ZlcmJvc2UoY2xhc3MpKQorCQkJCXByaW50aygiXG5oYXNoIGNoYWluIGFscmVhZHkgY2FjaGVkLCBrZXk6ICIKKwkJCQkJIiUwMTZMeCB0YWlsIGNsYXNzOiBbJXBdICVzXG4iLAorCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWNoYWluX2tleSwKKwkJCQkJY2xhc3MtPmtleSwgY2xhc3MtPm5hbWUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CisJaWYgKHZlcnlfdmVyYm9zZShjbGFzcykpCisJCXByaW50aygiXG5uZXcgaGFzaCBjaGFpbiwga2V5OiAlMDE2THggdGFpbCBjbGFzczogWyVwXSAlc1xuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY2hhaW5fa2V5LCBjbGFzcy0+a2V5LCBjbGFzcy0+bmFtZSk7CiAJLyoKIAkgKiBBbGxvY2F0ZSBhIG5ldyBjaGFpbiBlbnRyeSBmcm9tIHRoZSBzdGF0aWMgYXJyYXksIGFuZCBhZGQKIAkgKiBpdCB0byB0aGUgaGFzaDoKIAkgKi8KLQlfX3Jhd19zcGluX2xvY2soJmhhc2hfbG9jayk7CisJaWYgKCFncmFwaF9sb2NrKCkpCisJCXJldHVybiAwOwogCS8qCiAJICogV2UgaGF2ZSB0byB3YWxrIHRoZSBjaGFpbiBhZ2FpbiBsb2NrZWQgLSB0byBhdm9pZCBkdXBsaWNhdGVzOgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIGhhc2hfaGVhZCwgZW50cnkpIHsKIAkJaWYgKGNoYWluLT5jaGFpbl9rZXkgPT0gY2hhaW5fa2V5KSB7Ci0JCQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKKwkJCWdyYXBoX3VubG9jaygpOwogCQkJZ290byBjYWNoZV9oaXQ7CiAJCX0KIAl9CiAJaWYgKHVubGlrZWx5KG5yX2xvY2tfY2hhaW5zID49IE1BWF9MT0NLREVQX0NIQUlOUykpIHsKLQkJX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7Ci0JCWRlYnVnX2xvY2tzX29mZigpOworCQlpZiAoIWRlYnVnX2xvY2tzX29mZl9ncmFwaF91bmxvY2soKSkKKwkJCXJldHVybiAwOworCiAJCXByaW50aygiQlVHOiBNQVhfTE9DS0RFUF9DSEFJTlMgdG9vIGxvdyFcbiIpOwogCQlwcmludGsoInR1cm5pbmcgb2ZmIHRoZSBsb2NraW5nIGNvcnJlY3RuZXNzIHZhbGlkYXRvci5cbiIpOwogCQlyZXR1cm4gMDsKQEAgLTEzODEsOSArMTQyMiw3IEBACiAJCQlzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLCBpbnQgZm9yd2FyZHMsCiAJCQljb25zdCBjaGFyICppcnFjbGFzcykKIHsKLQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKLQlkZWJ1Z19sb2Nrc19vZmYoKTsKLQlpZiAoZGVidWdfbG9ja3Nfc2lsZW50KQorCWlmICghZGVidWdfbG9ja3Nfb2ZmX2dyYXBoX3VubG9jaygpIHx8IGRlYnVnX2xvY2tzX3NpbGVudCkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKQEAgLTE0NTMsNyArMTQ5Miw3IEBACiAJcmV0dXJuIHByaW50X2lycV9pbnZlcnNpb25fYnVnKGN1cnIsIGJhY2t3YXJkc19tYXRjaCwgdGhpcywgMCwgaXJxY2xhc3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKK3ZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKIHsKIAlwcmludGsoImlycSBldmVudCBzdGFtcDogJXVcbiIsIGN1cnItPmlycV9ldmVudHMpOwogCXByaW50aygiaGFyZGlycXMgbGFzdCAgZW5hYmxlZCBhdCAoJXUpOiAiLCBjdXJyLT5oYXJkaXJxX2VuYWJsZV9ldmVudCk7CkBAIC0xNDY2LDE5ICsxNTA1LDEzIEBACiAJcHJpbnRfaXBfc3ltKGN1cnItPnNvZnRpcnFfZGlzYWJsZV9pcCk7CiB9CiAKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKLXsKLX0KICNlbmRpZgogCiBzdGF0aWMgaW50CiBwcmludF91c2FnZV9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLAogCQllbnVtIGxvY2tfdXNhZ2VfYml0IHByZXZfYml0LCBlbnVtIGxvY2tfdXNhZ2VfYml0IG5ld19iaXQpCiB7Ci0JX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7Ci0JZGVidWdfbG9ja3Nfb2ZmKCk7Ci0JaWYgKGRlYnVnX2xvY2tzX3NpbGVudCkKKwlpZiAoIWRlYnVnX2xvY2tzX29mZl9ncmFwaF91bmxvY2soKSB8fCBkZWJ1Z19sb2Nrc19zaWxlbnQpCiAJCXJldHVybiAwOwogCiAJcHJpbnRrKCJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CkBAIC0xNTM5LDEyICsxNTcyLDEzIEBACiAJaWYgKGxpa2VseSh0aGlzLT5jbGFzcy0+dXNhZ2VfbWFzayAmIG5ld19tYXNrKSkKIAkJcmV0dXJuIDE7CiAKLQlfX3Jhd19zcGluX2xvY2soJmhhc2hfbG9jayk7CisJaWYgKCFncmFwaF9sb2NrKCkpCisJCXJldHVybiAwOwogCS8qCiAJICogTWFrZSBzdXJlIHdlIGRpZG50IHJhY2U6CiAJICovCiAJaWYgKHVubGlrZWx5KHRoaXMtPmNsYXNzLT51c2FnZV9tYXNrICYgbmV3X21hc2spKSB7Ci0JCV9fcmF3X3NwaW5fdW5sb2NrKCZoYXNoX2xvY2spOworCQlncmFwaF91bmxvY2soKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xNzMwLDE2ICsxNzY0LDE2IEBACiAJCWRlYnVnX2F0b21pY19kZWMoJm5yX3VudXNlZF9sb2Nrcyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCV9fcmF3X3NwaW5fdW5sb2NrKCZoYXNoX2xvY2spOwotCQlkZWJ1Z19sb2Nrc19vZmYoKTsKKwkJaWYgKCFkZWJ1Z19sb2Nrc19vZmZfZ3JhcGhfdW5sb2NrKCkpCisJCQlyZXR1cm4gMDsKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JX19yYXdfc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CisJZ3JhcGhfdW5sb2NrKCk7CiAKIAkvKgotCSAqIFdlIG11c3QgcHJpbnRrIG91dHNpZGUgb2YgdGhlIGhhc2hfbG9jazoKKwkgKiBXZSBtdXN0IHByaW50ayBvdXRzaWRlIG9mIHRoZSBncmFwaF9sb2NrOgogCSAqLwogCWlmIChyZXQgPT0gMikgewogCQlwcmludGsoIlxubWFya2VkIGxvY2sgYXMgeyVzfTpcbiIsIHVzYWdlX3N0cltuZXdfYml0XSk7CkBAIC0yMTM3LDkgKzIxNzEsOSBAQAogCSAqIFdlIGxvb2sgdXAgdGhlIGNoYWluX2tleSBhbmQgZG8gdGhlIE8oTl4yKSBjaGVjayBhbmQgdXBkYXRlIG9mCiAJICogdGhlIGRlcGVuZGVuY2llcyBvbmx5IGlmIHRoaXMgaXMgYSBuZXcgZGVwZW5kZW5jeSBjaGFpbi4KIAkgKiAoSWYgbG9va3VwX2NoYWluX2NhY2hlKCkgcmV0dXJucyB3aXRoIDEgaXQgYWNxdWlyZXMKLQkgKiBoYXNoX2xvY2sgZm9yIHVzKQorCSAqIGdyYXBoX2xvY2sgZm9yIHVzKQogCSAqLwotCWlmICghdHJ5bG9jayAmJiAoY2hlY2sgPT0gMikgJiYgbG9va3VwX2NoYWluX2NhY2hlKGNoYWluX2tleSkpIHsKKwlpZiAoIXRyeWxvY2sgJiYgKGNoZWNrID09IDIpICYmIGxvb2t1cF9jaGFpbl9jYWNoZShjaGFpbl9rZXksIGNsYXNzKSkgewogCQkvKgogCQkgKiBDaGVjayB3aGV0aGVyIGxhc3QgaGVsZCBsb2NrOgogCQkgKgpAQCAtMjE3MCw3ICsyMjA0LDcgQEAKIAkJaWYgKCFjaGFpbl9oZWFkICYmIHJldCAhPSAyKQogCQkJaWYgKCFjaGVja19wcmV2c19hZGQoY3VyciwgaGxvY2spKQogCQkJCXJldHVybiAwOwotCQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKKwkJZ3JhcGhfdW5sb2NrKCk7CiAJfQogCWN1cnItPmxvY2tkZXBfZGVwdGgrKzsKIAljaGVja19jaGFpbl9rZXkoY3Vycik7CkBAIC0yNDMzLDYgKzI0NjcsNyBAQAogdm9pZCBsb2NrZGVwX3Jlc2V0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKIAogCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3VycmVudC0+Y3Vycl9jaGFpbl9rZXkgPSAwOwpAQCAtMjQ0Myw2ICsyNDc4LDggQEAKIAlucl9zb2Z0aXJxX2NoYWlucyA9IDA7CiAJbnJfcHJvY2Vzc19jaGFpbnMgPSAwOwogCWRlYnVnX2xvY2tzID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgQ0hBSU5IQVNIX1NJWkU7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoY2hhaW5oYXNoX3RhYmxlICsgaSk7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMjQ3OSw3ICsyNTE2LDcgQEAKIAlpbnQgaTsKIAogCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19yYXdfc3Bpbl9sb2NrKCZoYXNoX2xvY2spOworCWdyYXBoX2xvY2soKTsKIAogCS8qCiAJICogVW5oYXNoIGFsbCBjbGFzc2VzIHRoYXQgd2VyZSBjcmVhdGVkIGJ5IHRoaXMgbW9kdWxlOgpAQCAtMjQ5Myw3ICsyNTMwLDcgQEAKIAkJCQl6YXBfY2xhc3MoY2xhc3MpOwogCX0KIAotCV9fcmF3X3NwaW5fdW5sb2NrKCZoYXNoX2xvY2spOworCWdyYXBoX3VubG9jaygpOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTI1MjEsMjAgKzI1NTgsMjAgQEAKIAkgKiBEZWJ1ZyBjaGVjazogaW4gdGhlIGVuZCBhbGwgbWFwcGVkIGNsYXNzZXMgc2hvdWxkCiAJICogYmUgZ29uZS4KIAkgKi8KLQlfX3Jhd19zcGluX2xvY2soJmhhc2hfbG9jayk7CisJZ3JhcGhfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgPCBDTEFTU0hBU0hfU0laRTsgaSsrKSB7CiAJCWhlYWQgPSBjbGFzc2hhc2hfdGFibGUgKyBpOwogCQlpZiAobGlzdF9lbXB0eShoZWFkKSkKIAkJCWNvbnRpbnVlOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2xhc3MsIG5leHQsIGhlYWQsIGhhc2hfZW50cnkpIHsKIAkJCWlmICh1bmxpa2VseShjbGFzcyA9PSBsb2NrLT5jbGFzc19jYWNoZSkpIHsKLQkJCQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKLQkJCQlERUJVR19MT0NLU19XQVJOX09OKDEpOworCQkJCWlmIChkZWJ1Z19sb2Nrc19vZmZfZ3JhcGhfdW5sb2NrKCkpCisJCQkJCVdBUk5fT04oMSk7CiAJCQkJZ290byBvdXRfcmVzdG9yZTsKIAkJCX0KIAkJfQogCX0KLQlfX3Jhd19zcGluX3VubG9jaygmaGFzaF9sb2NrKTsKKwlncmFwaF91bmxvY2soKTsKIAogb3V0X3Jlc3RvcmU6CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCBkOWVhZTQ1Li5kMGYyMjYwIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC04MjQsOSArODI0LDM0IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01PRFVMRV9VTkxPQUQgKi8KIAorc3RhdGljIHNzaXplX3Qgc2hvd19pbml0c3RhdGUoc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1hdHRyLAorCQkJICAgc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpidWZmZXIpCit7CisJY29uc3QgY2hhciAqc3RhdGUgPSAidW5rbm93biI7CisKKwlzd2l0Y2ggKG1vZC0+c3RhdGUpIHsKKwljYXNlIE1PRFVMRV9TVEFURV9MSVZFOgorCQlzdGF0ZSA9ICJsaXZlIjsKKwkJYnJlYWs7CisJY2FzZSBNT0RVTEVfU1RBVEVfQ09NSU5HOgorCQlzdGF0ZSA9ICJjb21pbmciOworCQlicmVhazsKKwljYXNlIE1PRFVMRV9TVEFURV9HT0lORzoKKwkJc3RhdGUgPSAiZ29pbmciOworCQlicmVhazsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJXNcbiIsIHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlIGluaXRzdGF0ZSA9IHsKKwkuYXR0ciA9IHsgLm5hbWUgPSAiaW5pdHN0YXRlIiwgLm1vZGUgPSAwNDQ0LCAub3duZXIgPSBUSElTX01PRFVMRSB9LAorCS5zaG93ID0gc2hvd19pbml0c3RhdGUsCit9OworCiBzdGF0aWMgc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1vZGluZm9fYXR0cnNbXSA9IHsKIAkmbW9kaW5mb192ZXJzaW9uLAogCSZtb2RpbmZvX3NyY3ZlcnNpb24sCisJJmluaXRzdGF0ZSwKICNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogCSZyZWZjbnQsCiAjZW5kaWYKQEAgLTExMDcsOCArMTEzMiwxMCBAQAogCQlnb3RvIG91dDsKIAogCW1vZC0+ZHJpdmVyc19kaXIgPSBrb2JqZWN0X2FkZF9kaXIoJm1vZC0+bWtvYmoua29iaiwgImRyaXZlcnMiKTsKLQlpZiAoIW1vZC0+ZHJpdmVyc19kaXIpCisJaWYgKCFtb2QtPmRyaXZlcnNfZGlyKSB7CisJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3VucmVnOworCX0KIAogCWVyciA9IG1vZHVsZV9wYXJhbV9zeXNmc19zZXR1cChtb2QsIGtwYXJhbSwgbnVtX3BhcmFtcyk7CiAJaWYgKGVycikKQEAgLTExMjEsMTAgKzExNDgsMTAgQEAKIAlrb2JqZWN0X3VldmVudCgmbW9kLT5ta29iai5rb2JqLCBLT0JKX0FERCk7CiAJcmV0dXJuIDA7CiAKLW91dF91bnJlZ19kcml2ZXJzOgotCWtvYmplY3RfdW5yZWdpc3Rlcihtb2QtPmRyaXZlcnNfZGlyKTsKIG91dF91bnJlZ19wYXJhbToKIAltb2R1bGVfcGFyYW1fc3lzZnNfcmVtb3ZlKG1vZCk7CitvdXRfdW5yZWdfZHJpdmVyczoKKwlrb2JqZWN0X3VucmVnaXN0ZXIobW9kLT5kcml2ZXJzX2Rpcik7CiBvdXRfdW5yZWc6CiAJa29iamVjdF9kZWwoJm1vZC0+bWtvYmoua29iaik7CiAJa29iamVjdF9wdXQoJm1vZC0+bWtvYmoua29iaik7CkBAIC0yMzAwLDggKzIzMjcsMjIgQEAKIAlwcmludGsoIlxuIik7CiB9CiAKK3N0YXRpYyBjaGFyICptYWtlX2RyaXZlcl9uYW1lKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJY2hhciAqZHJpdmVyX25hbWU7CisKKwlkcml2ZXJfbmFtZSA9IGttYWxsb2Moc3RybGVuKGRydi0+bmFtZSkgKyBzdHJsZW4oZHJ2LT5idXMtPm5hbWUpICsgMiwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghZHJpdmVyX25hbWUpCisJCXJldHVybiBOVUxMOworCisJc3ByaW50Zihkcml2ZXJfbmFtZSwgIiVzOiVzIiwgZHJ2LT5idXMtPm5hbWUsIGRydi0+bmFtZSk7CisJcmV0dXJuIGRyaXZlcl9uYW1lOworfQorCiB2b2lkIG1vZHVsZV9hZGRfZHJpdmVyKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKKwljaGFyICpkcml2ZXJfbmFtZTsKIAlpbnQgbm9fd2FybjsKIAogCWlmICghbW9kIHx8ICFkcnYpCkBAIC0yMzA5LDE3ICsyMzUwLDMxIEBACiAKIAkvKiBEb24ndCBjaGVjayByZXR1cm4gY29kZXM7IHRoZXNlIGNhbGxzIGFyZSBpZGVtcG90ZW50ICovCiAJbm9fd2FybiA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkcnYtPmtvYmosICZtb2QtPm1rb2JqLmtvYmosICJtb2R1bGUiKTsKLQlub193YXJuID0gc3lzZnNfY3JlYXRlX2xpbmsobW9kLT5kcml2ZXJzX2RpciwgJmRydi0+a29iaiwgZHJ2LT5uYW1lKTsKKwlkcml2ZXJfbmFtZSA9IG1ha2VfZHJpdmVyX25hbWUoZHJ2KTsKKwlpZiAoZHJpdmVyX25hbWUpIHsKKwkJbm9fd2FybiA9IHN5c2ZzX2NyZWF0ZV9saW5rKG1vZC0+ZHJpdmVyc19kaXIsICZkcnYtPmtvYmosCisJCQkJCSAgICBkcml2ZXJfbmFtZSk7CisJCWtmcmVlKGRyaXZlcl9uYW1lKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKG1vZHVsZV9hZGRfZHJpdmVyKTsKIAogdm9pZCBtb2R1bGVfcmVtb3ZlX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogeworCWNoYXIgKmRyaXZlcl9uYW1lOworCiAJaWYgKCFkcnYpCiAJCXJldHVybjsKKwogCXN5c2ZzX3JlbW92ZV9saW5rKCZkcnYtPmtvYmosICJtb2R1bGUiKTsKLQlpZiAoZHJ2LT5vd25lciAmJiBkcnYtPm93bmVyLT5kcml2ZXJzX2RpcikKLQkJc3lzZnNfcmVtb3ZlX2xpbmsoZHJ2LT5vd25lci0+ZHJpdmVyc19kaXIsIGRydi0+bmFtZSk7CisJaWYgKGRydi0+b3duZXIgJiYgZHJ2LT5vd25lci0+ZHJpdmVyc19kaXIpIHsKKwkJZHJpdmVyX25hbWUgPSBtYWtlX2RyaXZlcl9uYW1lKGRydik7CisJCWlmIChkcml2ZXJfbmFtZSkgeworCQkJc3lzZnNfcmVtb3ZlX2xpbmsoZHJ2LT5vd25lci0+ZHJpdmVyc19kaXIsCisJCQkJCSAgZHJpdmVyX25hbWUpOworCQkJa2ZyZWUoZHJpdmVyX25hbWUpOworCQl9CisJfQogfQogRVhQT1JUX1NZTUJPTChtb2R1bGVfcmVtb3ZlX2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC5jIGIva2VybmVsL211dGV4LmMKaW5kZXggOGM3MWNmNy4uZTdjYmJiOCAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LmMKKysrIGIva2VybmVsL211dGV4LmMKQEAgLTIwNiw2ICsyMDYsMTUgQEAKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwobXV0ZXhfbG9ja19uZXN0ZWQpOworCitpbnQgX19zY2hlZAorbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX25lc3RlZChzdHJ1Y3QgbXV0ZXggKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKK3sKKwltaWdodF9zbGVlcCgpOworCXJldHVybiBfX211dGV4X2xvY2tfY29tbW9uKGxvY2ssIFRBU0tfSU5URVJSVVBUSUJMRSwgc3ViY2xhc3MpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChtdXRleF9sb2NrX2ludGVycnVwdGlibGVfbmVzdGVkKTsKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL25zcHJveHkuYyBiL2tlcm5lbC9uc3Byb3h5LmMKaW5kZXggNjc0YWNlYi4uZjViOWVlNiAxMDA2NDQKLS0tIGEva2VybmVsL25zcHJveHkuYworKysgYi9rZXJuZWwvbnNwcm94eS5jCkBAIC0xNyw4ICsxNyw5IEBACiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0X3Rhc2suaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbnRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KIAogc3RydWN0IG5zcHJveHkgaW5pdF9uc3Byb3h5ID0gSU5JVF9OU1BST1hZKGluaXRfbnNwcm94eSk7CiAKQEAgLTYwLDEyICs2MSwxNCBAQAogCXN0cnVjdCBuc3Byb3h5ICpucyA9IGNsb25lX25hbWVzcGFjZXMob3JpZyk7CiAKIAlpZiAobnMpIHsKLQkJaWYgKG5zLT5uYW1lc3BhY2UpCi0JCQlnZXRfbmFtZXNwYWNlKG5zLT5uYW1lc3BhY2UpOworCQlpZiAobnMtPm1udF9ucykKKwkJCWdldF9tbnRfbnMobnMtPm1udF9ucyk7CiAJCWlmIChucy0+dXRzX25zKQogCQkJZ2V0X3V0c19ucyhucy0+dXRzX25zKTsKIAkJaWYgKG5zLT5pcGNfbnMpCiAJCQlnZXRfaXBjX25zKG5zLT5pcGNfbnMpOworCQlpZiAobnMtPnBpZF9ucykKKwkJCWdldF9waWRfbnMobnMtPnBpZF9ucyk7CiAJfQogCiAJcmV0dXJuIG5zOwpAQCAtOTcsNyArMTAwLDcgQEAKIAogCXRzay0+bnNwcm94eSA9IG5ld19uczsKIAotCWVyciA9IGNvcHlfbmFtZXNwYWNlKGZsYWdzLCB0c2spOworCWVyciA9IGNvcHlfbW50X25zKGZsYWdzLCB0c2spOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X25zOwogCkBAIC0xMDksMTYgKzExMiwyMyBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2lwYzsKIAorCWVyciA9IGNvcHlfcGlkX25zKGZsYWdzLCB0c2spOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3BpZDsKKwogb3V0OgogCXB1dF9uc3Byb3h5KG9sZF9ucyk7CiAJcmV0dXJuIGVycjsKIAorb3V0X3BpZDoKKwlpZiAobmV3X25zLT5pcGNfbnMpCisJCXB1dF9pcGNfbnMobmV3X25zLT5pcGNfbnMpOwogb3V0X2lwYzoKIAlpZiAobmV3X25zLT51dHNfbnMpCiAJCXB1dF91dHNfbnMobmV3X25zLT51dHNfbnMpOwogb3V0X3V0czoKLQlpZiAobmV3X25zLT5uYW1lc3BhY2UpCi0JCXB1dF9uYW1lc3BhY2UobmV3X25zLT5uYW1lc3BhY2UpOworCWlmIChuZXdfbnMtPm1udF9ucykKKwkJcHV0X21udF9ucyhuZXdfbnMtPm1udF9ucyk7CiBvdXRfbnM6CiAJdHNrLT5uc3Byb3h5ID0gb2xkX25zOwogCWtmcmVlKG5ld19ucyk7CkBAIC0xMjcsMTEgKzEzNywxMyBAQAogCiB2b2lkIGZyZWVfbnNwcm94eShzdHJ1Y3QgbnNwcm94eSAqbnMpCiB7Ci0JCWlmIChucy0+bmFtZXNwYWNlKQotCQkJcHV0X25hbWVzcGFjZShucy0+bmFtZXNwYWNlKTsKLQkJaWYgKG5zLT51dHNfbnMpCi0JCQlwdXRfdXRzX25zKG5zLT51dHNfbnMpOwotCQlpZiAobnMtPmlwY19ucykKLQkJCXB1dF9pcGNfbnMobnMtPmlwY19ucyk7Ci0JCWtmcmVlKG5zKTsKKwlpZiAobnMtPm1udF9ucykKKwkJcHV0X21udF9ucyhucy0+bW50X25zKTsKKwlpZiAobnMtPnV0c19ucykKKwkJcHV0X3V0c19ucyhucy0+dXRzX25zKTsKKwlpZiAobnMtPmlwY19ucykKKwkJcHV0X2lwY19ucyhucy0+aXBjX25zKTsKKwlpZiAobnMtPnBpZF9ucykKKwkJcHV0X3BpZF9ucyhucy0+cGlkX25zKTsKKwlrZnJlZShucyk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggZjQwNjY1NS4uNzE4OTQ1ZCAxMDA2NDQKLS0tIGEva2VybmVsL3BhcmFtcy5jCisrKyBiL2tlcm5lbC9wYXJhbXMuYwpAQCAtMTQzLDkgKzE0MywxNSBAQAogCiAJd2hpbGUgKCphcmdzKSB7CiAJCWludCByZXQ7CisJCWludCBpcnFfd2FzX2Rpc2FibGVkOwogCiAJCWFyZ3MgPSBuZXh0X2FyZyhhcmdzLCAmcGFyYW0sICZ2YWwpOworCQlpcnFfd2FzX2Rpc2FibGVkID0gaXJxc19kaXNhYmxlZCgpOwogCQlyZXQgPSBwYXJzZV9vbmUocGFyYW0sIHZhbCwgcGFyYW1zLCBudW0sIHVua25vd24pOworCQlpZiAoaXJxX3dhc19kaXNhYmxlZCAmJiAhaXJxc19kaXNhYmxlZCgpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJwYXJzZV9hcmdzKCk6IG9wdGlvbiAnJXMnIGVuYWJsZWQgIgorCQkJCQkiaXJxJ3MhXG4iLCBwYXJhbSk7CisJCX0KIAkJc3dpdGNoIChyZXQpIHsKIAkJY2FzZSAtRU5PRU5UOgogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5rbm93biBwYXJhbWV0ZXIgYCVzJ1xuIiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCBhNDg4NzliLi43OGYyYWVlIDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+Ci0jaW5jbHVkZSA8bGludXgvcHNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogCiAjZGVmaW5lIHBpZF9oYXNoZm4obnIpIGhhc2hfbG9uZygodW5zaWduZWQgbG9uZyluciwgcGlkaGFzaF9zaGlmdCkKIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcGlkX2hhc2g7CkBAIC00Myw5ICs0MywxMCBAQAogI2RlZmluZSBCSVRTX1BFUl9QQUdFCQkoUEFHRV9TSVpFKjgpCiAjZGVmaW5lIEJJVFNfUEVSX1BBR0VfTUFTSwkoQklUU19QRVJfUEFHRS0xKQogCi1zdGF0aWMgaW5saW5lIGludCBta19waWQoc3RydWN0IHBzcGFjZSAqcHNwYWNlLCBzdHJ1Y3QgcGlkbWFwICptYXAsIGludCBvZmYpCitzdGF0aWMgaW5saW5lIGludCBta19waWQoc3RydWN0IHBpZF9uYW1lc3BhY2UgKnBpZF9ucywKKwkJc3RydWN0IHBpZG1hcCAqbWFwLCBpbnQgb2ZmKQogewotCXJldHVybiAobWFwIC0gcHNwYWNlLT5waWRtYXApKkJJVFNfUEVSX1BBR0UgKyBvZmY7CisJcmV0dXJuIChtYXAgLSBwaWRfbnMtPnBpZG1hcCkqQklUU19QRVJfUEFHRSArIG9mZjsKIH0KIAogI2RlZmluZSBmaW5kX25leHRfb2Zmc2V0KG1hcCwgb2ZmKQkJCQkJXApAQCAtNTcsMTEgKzU4LDE1IEBACiAgKiB2YWx1ZSBkb2VzIG5vdCBjYXVzZSBsb3RzIG9mIGJpdG1hcHMgdG8gYmUgYWxsb2NhdGVkLCBidXQKICAqIHRoZSBzY2hlbWUgc2NhbGVzIHRvIHVwIHRvIDQgbWlsbGlvbiBQSURzLCBydW50aW1lLgogICovCi1zdHJ1Y3QgcHNwYWNlIGluaXRfcHNwYWNlID0geworc3RydWN0IHBpZF9uYW1lc3BhY2UgaW5pdF9waWRfbnMgPSB7CisJLmtyZWYgPSB7CisJCS5yZWZjb3VudCAgICAgICA9IEFUT01JQ19JTklUKDIpLAorCX0sCiAJLnBpZG1hcCA9IHsKIAkJWyAwIC4uLiBQSURNQVBfRU5UUklFUy0xXSA9IHsgQVRPTUlDX0lOSVQoQklUU19QRVJfUEFHRSksIE5VTEwgfQogCX0sCi0JLmxhc3RfcGlkID0gMAorCS5sYXN0X3BpZCA9IDAsCisJLmNoaWxkX3JlYXBlciA9ICZpbml0X3Rhc2sKIH07CiAKIC8qCkBAIC04MCwyNSArODUsMjUgQEAKIAogc3RhdGljICBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU1BJTkxPQ0socGlkbWFwX2xvY2spOwogCi1zdGF0aWMgZmFzdGNhbGwgdm9pZCBmcmVlX3BpZG1hcChzdHJ1Y3QgcHNwYWNlICpwc3BhY2UsIGludCBwaWQpCitzdGF0aWMgZmFzdGNhbGwgdm9pZCBmcmVlX3BpZG1hcChzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqcGlkX25zLCBpbnQgcGlkKQogewotCXN0cnVjdCBwaWRtYXAgKm1hcCA9IHBzcGFjZS0+cGlkbWFwICsgcGlkIC8gQklUU19QRVJfUEFHRTsKKwlzdHJ1Y3QgcGlkbWFwICptYXAgPSBwaWRfbnMtPnBpZG1hcCArIHBpZCAvIEJJVFNfUEVSX1BBR0U7CiAJaW50IG9mZnNldCA9IHBpZCAmIEJJVFNfUEVSX1BBR0VfTUFTSzsKIAogCWNsZWFyX2JpdChvZmZzZXQsIG1hcC0+cGFnZSk7CiAJYXRvbWljX2luYygmbWFwLT5ucl9mcmVlKTsKIH0KIAotc3RhdGljIGludCBhbGxvY19waWRtYXAoc3RydWN0IHBzcGFjZSAqcHNwYWNlKQorc3RhdGljIGludCBhbGxvY19waWRtYXAoc3RydWN0IHBpZF9uYW1lc3BhY2UgKnBpZF9ucykKIHsKLQlpbnQgaSwgb2Zmc2V0LCBtYXhfc2NhbiwgcGlkLCBsYXN0ID0gcHNwYWNlLT5sYXN0X3BpZDsKKwlpbnQgaSwgb2Zmc2V0LCBtYXhfc2NhbiwgcGlkLCBsYXN0ID0gcGlkX25zLT5sYXN0X3BpZDsKIAlzdHJ1Y3QgcGlkbWFwICptYXA7CiAKIAlwaWQgPSBsYXN0ICsgMTsKIAlpZiAocGlkID49IHBpZF9tYXgpCiAJCXBpZCA9IFJFU0VSVkVEX1BJRFM7CiAJb2Zmc2V0ID0gcGlkICYgQklUU19QRVJfUEFHRV9NQVNLOwotCW1hcCA9ICZwc3BhY2UtPnBpZG1hcFtwaWQvQklUU19QRVJfUEFHRV07CisJbWFwID0gJnBpZF9ucy0+cGlkbWFwW3BpZC9CSVRTX1BFUl9QQUdFXTsKIAltYXhfc2NhbiA9IChwaWRfbWF4ICsgQklUU19QRVJfUEFHRSAtIDEpL0JJVFNfUEVSX1BBR0UgLSAhb2Zmc2V0OwogCWZvciAoaSA9IDA7IGkgPD0gbWF4X3NjYW47ICsraSkgewogCQlpZiAodW5saWtlbHkoIW1hcC0+cGFnZSkpIHsKQEAgLTEyMCwxMSArMTI1LDExIEBACiAJCQlkbyB7CiAJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KG9mZnNldCwgbWFwLT5wYWdlKSkgewogCQkJCQlhdG9taWNfZGVjKCZtYXAtPm5yX2ZyZWUpOwotCQkJCQlwc3BhY2UtPmxhc3RfcGlkID0gcGlkOworCQkJCQlwaWRfbnMtPmxhc3RfcGlkID0gcGlkOwogCQkJCQlyZXR1cm4gcGlkOwogCQkJCX0KIAkJCQlvZmZzZXQgPSBmaW5kX25leHRfb2Zmc2V0KG1hcCwgb2Zmc2V0KTsKLQkJCQlwaWQgPSBta19waWQocHNwYWNlLCBtYXAsIG9mZnNldCk7CisJCQkJcGlkID0gbWtfcGlkKHBpZF9ucywgbWFwLCBvZmZzZXQpOwogCQkJLyoKIAkJCSAqIGZpbmRfbmV4dF9vZmZzZXQoKSBmb3VuZCBhIGJpdCwgdGhlIHBpZCBmcm9tIGl0CiAJCQkgKiBpcyBpbi1ib3VuZHMsIGFuZCBpZiB3ZSBmZWxsIGJhY2sgdG8gdGhlIGxhc3QKQEAgLTEzNSwzNCArMTQwLDM0IEBACiAJCQkJCShpICE9IG1heF9zY2FuIHx8IHBpZCA8IGxhc3QgfHwKIAkJCQkJICAgICEoKGxhc3QrMSkgJiBCSVRTX1BFUl9QQUdFX01BU0spKSk7CiAJCX0KLQkJaWYgKG1hcCA8ICZwc3BhY2UtPnBpZG1hcFsocGlkX21heC0xKS9CSVRTX1BFUl9QQUdFXSkgeworCQlpZiAobWFwIDwgJnBpZF9ucy0+cGlkbWFwWyhwaWRfbWF4LTEpL0JJVFNfUEVSX1BBR0VdKSB7CiAJCQkrK21hcDsKIAkJCW9mZnNldCA9IDA7CiAJCX0gZWxzZSB7Ci0JCQltYXAgPSAmcHNwYWNlLT5waWRtYXBbMF07CisJCQltYXAgPSAmcGlkX25zLT5waWRtYXBbMF07CiAJCQlvZmZzZXQgPSBSRVNFUlZFRF9QSURTOwogCQkJaWYgKHVubGlrZWx5KGxhc3QgPT0gb2Zmc2V0KSkKIAkJCQlicmVhazsKIAkJfQotCQlwaWQgPSBta19waWQocHNwYWNlLCBtYXAsIG9mZnNldCk7CisJCXBpZCA9IG1rX3BpZChwaWRfbnMsIG1hcCwgb2Zmc2V0KTsKIAl9CiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IG5leHRfcGlkbWFwKHN0cnVjdCBwc3BhY2UgKnBzcGFjZSwgaW50IGxhc3QpCitzdGF0aWMgaW50IG5leHRfcGlkbWFwKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwaWRfbnMsIGludCBsYXN0KQogewogCWludCBvZmZzZXQ7CiAJc3RydWN0IHBpZG1hcCAqbWFwLCAqZW5kOwogCiAJb2Zmc2V0ID0gKGxhc3QgKyAxKSAmIEJJVFNfUEVSX1BBR0VfTUFTSzsKLQltYXAgPSAmcHNwYWNlLT5waWRtYXBbKGxhc3QgKyAxKS9CSVRTX1BFUl9QQUdFXTsKLQllbmQgPSAmcHNwYWNlLT5waWRtYXBbUElETUFQX0VOVFJJRVNdOworCW1hcCA9ICZwaWRfbnMtPnBpZG1hcFsobGFzdCArIDEpL0JJVFNfUEVSX1BBR0VdOworCWVuZCA9ICZwaWRfbnMtPnBpZG1hcFtQSURNQVBfRU5UUklFU107CiAJZm9yICg7IG1hcCA8IGVuZDsgbWFwKyssIG9mZnNldCA9IDApIHsKIAkJaWYgKHVubGlrZWx5KCFtYXAtPnBhZ2UpKQogCQkJY29udGludWU7CiAJCW9mZnNldCA9IGZpbmRfbmV4dF9iaXQoKG1hcCktPnBhZ2UsIEJJVFNfUEVSX1BBR0UsIG9mZnNldCk7CiAJCWlmIChvZmZzZXQgPCBCSVRTX1BFUl9QQUdFKQotCQkJcmV0dXJuIG1rX3BpZChwc3BhY2UsIG1hcCwgb2Zmc2V0KTsKKwkJCXJldHVybiBta19waWQocGlkX25zLCBtYXAsIG9mZnNldCk7CiAJfQogCXJldHVybiAtMTsKIH0KQEAgLTE5Miw3ICsxOTcsNyBAQAogCWhsaXN0X2RlbF9yY3UoJnBpZC0+cGlkX2NoYWluKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaWRtYXBfbG9jaywgZmxhZ3MpOwogCi0JZnJlZV9waWRtYXAoJmluaXRfcHNwYWNlLCBwaWQtPm5yKTsKKwlmcmVlX3BpZG1hcCgmaW5pdF9waWRfbnMsIHBpZC0+bnIpOwogCWNhbGxfcmN1KCZwaWQtPnJjdSwgZGVsYXllZF9wdXRfcGlkKTsKIH0KIApAQCAtMjA2LDcgKzIxMSw3IEBACiAJaWYgKCFwaWQpCiAJCWdvdG8gb3V0OwogCi0JbnIgPSBhbGxvY19waWRtYXAoJmluaXRfcHNwYWNlKTsKKwluciA9IGFsbG9jX3BpZG1hcChjdXJyZW50LT5uc3Byb3h5LT5waWRfbnMpOwogCWlmIChuciA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAKQEAgLTM0OCwxMyArMzUzLDMzIEBACiAJCXBpZCA9IGZpbmRfcGlkKG5yKTsKIAkJaWYgKHBpZCkKIAkJCWJyZWFrOwotCQluciA9IG5leHRfcGlkbWFwKCZpbml0X3BzcGFjZSwgbnIpOworCQluciA9IG5leHRfcGlkbWFwKGN1cnJlbnQtPm5zcHJveHktPnBpZF9ucywgbnIpOwogCX0gd2hpbGUgKG5yID4gMCk7CiAKIAlyZXR1cm4gcGlkOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmluZF9nZXRfcGlkKTsKIAoraW50IGNvcHlfcGlkX25zKGludCBmbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm9sZF9ucyA9IHRzay0+bnNwcm94eS0+cGlkX25zOworCWludCBlcnIgPSAwOworCisJaWYgKCFvbGRfbnMpCisJCXJldHVybiAwOworCisJZ2V0X3BpZF9ucyhvbGRfbnMpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgZnJlZV9waWRfbnMoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOworCisJbnMgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHBpZF9uYW1lc3BhY2UsIGtyZWYpOworCWtmcmVlKG5zKTsKK30KKwogLyoKICAqIFRoZSBwaWQgaGFzaCB0YWJsZSBpcyBzY2FsZWQgYWNjb3JkaW5nIHRvIHRoZSBhbW91bnQgb2YgbWVtb3J5IGluIHRoZQogICogbWFjaGluZS4gIEZyb20gYSBtaW5pbXVtIG9mIDE2IHNsb3RzIHVwIHRvIDQwOTYgc2xvdHMgYXQgb25lIGdpZ2FieXRlIG9yCkBAIC0zODIsMTAgKzQwNywxMCBAQAogCiB2b2lkIF9faW5pdCBwaWRtYXBfaW5pdCh2b2lkKQogewotCWluaXRfcHNwYWNlLnBpZG1hcFswXS5wYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWluaXRfcGlkX25zLnBpZG1hcFswXS5wYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCS8qIFJlc2VydmUgUElEIDAuIFdlIG5ldmVyIGNhbGwgZnJlZV9waWRtYXAoMCkgKi8KLQlzZXRfYml0KDAsIGluaXRfcHNwYWNlLnBpZG1hcFswXS5wYWdlKTsKLQlhdG9taWNfZGVjKCZpbml0X3BzcGFjZS5waWRtYXBbMF0ubnJfZnJlZSk7CisJc2V0X2JpdCgwLCBpbml0X3BpZF9ucy5waWRtYXBbMF0ucGFnZSk7CisJYXRvbWljX2RlYygmaW5pdF9waWRfbnMucGlkbWFwWzBdLm5yX2ZyZWUpOwogCiAJcGlkX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJwaWQiLCBzaXplb2Yoc3RydWN0IHBpZCksCiAJCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBwaWQpLApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL0tjb25maWcgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwppbmRleCA3MTBlZDA4Li5lZDI5NjIyIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvS2NvbmZpZworKysgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwpAQCAtMjAsMTMgKzIwLDE0IEBACiAJICBzZW5kaW5nIHRoZSBwcm9jZXNzb3IgdG8gc2xlZXAgYW5kIHNhdmluZyBwb3dlci4KIAogY29uZmlnIFBNX0xFR0FDWQotCWJvb2wgIkxlZ2FjeSBQb3dlciBNYW5hZ2VtZW50IEFQSSIKKwlib29sICJMZWdhY3kgUG93ZXIgTWFuYWdlbWVudCBBUEkgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gUE0KLQlkZWZhdWx0IHkKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCi0JICAgU3VwcG9ydCBmb3IgcG1fcmVnaXN0ZXIoKSBhbmQgZnJpZW5kcy4KKwkgICBTdXBwb3J0IGZvciBwbV9yZWdpc3RlcigpIGFuZCBmcmllbmRzLiAgVGhpcyBvbGQgQVBJIGlzIG9ic29sZXRlZAorCSAgIGJ5IHRoZSBkcml2ZXIgbW9kZWwuCiAKLQkgICBJZiB1bnN1cmUsIHNheSBZLgorCSAgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBQTV9ERUJVRwogCWJvb2wgIlBvd2VyIE1hbmFnZW1lbnQgRGVidWcgU3VwcG9ydCIKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9kaXNrLmMgYi9rZXJuZWwvcG93ZXIvZGlzay5jCmluZGV4IDBiMDBmNTYuLjg4ZmM1ZDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9kaXNrLmMKKysrIGIva2VybmVsL3Bvd2VyL2Rpc2suYwpAQCAtNjAsOSArNjAsMTEgQEAKIHsKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgUE1fRElTS19QTEFURk9STToKLQkJa2VybmVsX3NodXRkb3duX3ByZXBhcmUoU1lTVEVNX1NVU1BFTkRfRElTSyk7Ci0JCXBtX29wcy0+ZW50ZXIoUE1fU1VTUEVORF9ESVNLKTsKLQkJYnJlYWs7CisJCWlmIChwbV9vcHMgJiYgcG1fb3BzLT5lbnRlcikgeworCQkJa2VybmVsX3NodXRkb3duX3ByZXBhcmUoU1lTVEVNX1NVU1BFTkRfRElTSyk7CisJCQlwbV9vcHMtPmVudGVyKFBNX1NVU1BFTkRfRElTSyk7CisJCQlicmVhazsKKwkJfQogCWNhc2UgUE1fRElTS19TSFVURE9XTjoKIAkJa2VybmVsX3Bvd2VyX29mZigpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IDUwMGViODcuLmZmM2E2MTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMjksNyArMjksNyBAQAogREVGSU5FX01VVEVYKHBtX211dGV4KTsKIAogc3RydWN0IHBtX29wcyAqcG1fb3BzOwotc3VzcGVuZF9kaXNrX21ldGhvZF90IHBtX2Rpc2tfbW9kZSA9IFBNX0RJU0tfU0hVVERPV047CitzdXNwZW5kX2Rpc2tfbWV0aG9kX3QgcG1fZGlza19tb2RlID0gUE1fRElTS19QTEFURk9STTsKIAogLyoqCiAgKglwbV9zZXRfb3BzIC0gU2V0IHRoZSBnbG9iYWwgcG93ZXIgbWV0aG9kIHRhYmxlLiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCmluZGV4IDk5ZWViMTEuLjZkNTY2YmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKKysrIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwpAQCAtMjgsOCArMjgsNyBAQAogCWlmICgocCA9PSBjdXJyZW50KSB8fCAKIAkgICAgKHAtPmZsYWdzICYgUEZfTk9GUkVFWkUpIHx8CiAJICAgIChwLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB8fAotCSAgICAocC0+ZXhpdF9zdGF0ZSA9PSBFWElUX0RFQUQpIHx8Ci0JICAgIChwLT5zdGF0ZSA9PSBUQVNLX1NUT1BQRUQpKQorCSAgICAocC0+ZXhpdF9zdGF0ZSA9PSBFWElUX0RFQUQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KQEAgLTYxLDEwICs2MCwxNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWZyZWV6aW5nKHApKSB7Ci0JCWZyZWV6ZShwKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJc2lnbmFsX3dha2VfdXAocCwgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJcm1iKCk7CisJCWlmICghZnJvemVuKHApKSB7CisJCQlpZiAocC0+c3RhdGUgPT0gVEFTS19TVE9QUEVEKQorCQkJCWZvcmNlX3NpZ19zcGVjaWZpYyhTSUdTVE9QLCBwKTsKKworCQkJZnJlZXplKHApOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJCXNpZ25hbF93YWtlX3VwKHAsIHAtPnN0YXRlID09IFRBU0tfU1RPUFBFRCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJCX0KIAl9CiB9CiAKQEAgLTEwMyw5ICsxMDgsNyBAQAogCQkJaWYgKGZyb3plbihwKSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKHAtPnN0YXRlID09IFRBU0tfVFJBQ0VEICYmCi0JCQkgICAgKGZyb3plbihwLT5wYXJlbnQpIHx8Ci0JCQkgICAgIHAtPnBhcmVudC0+c3RhdGUgPT0gVEFTS19TVE9QUEVEKSkgeworCQkJaWYgKHAtPnN0YXRlID09IFRBU0tfVFJBQ0VEICYmIGZyb3plbihwLT5wYXJlbnQpKSB7CiAJCQkJY2FuY2VsX2ZyZWV6aW5nKHApOwogCQkJCWNvbnRpbnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3YXAuYyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKaW5kZXggZjEzM2Q0YS4uMzU4MWY4ZiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N3YXAuYworKysgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCkBAIC0xNjUsMTQgKzE2NSwxNSBAQAogewogCWludCByZXM7CiAKLQlyZXMgPSBzd2FwX3R5cGVfb2Yoc3dzdXNwX3Jlc3VtZV9kZXZpY2UsIHN3c3VzcF9yZXN1bWVfYmxvY2spOworCXJlcyA9IHN3YXBfdHlwZV9vZihzd3N1c3BfcmVzdW1lX2RldmljZSwgc3dzdXNwX3Jlc3VtZV9ibG9jaywKKwkJCSZyZXN1bWVfYmRldik7CiAJaWYgKHJlcyA8IDApCiAJCXJldHVybiByZXM7CiAKIAlyb290X3N3YXAgPSByZXM7Ci0JcmVzdW1lX2JkZXYgPSBvcGVuX2J5X2Rldm51bShzd3N1c3BfcmVzdW1lX2RldmljZSwgRk1PREVfV1JJVEUpOwotCWlmIChJU19FUlIocmVzdW1lX2JkZXYpKQotCQlyZXR1cm4gUFRSX0VSUihyZXN1bWVfYmRldik7CisJcmVzID0gYmxrZGV2X2dldChyZXN1bWVfYmRldiwgRk1PREVfV1JJVEUsIE9fUkRXUik7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKIAogCXJlcyA9IHNldF9ibG9ja3NpemUocmVzdW1lX2JkZXYsIFBBR0VfU0laRSk7CiAJaWYgKHJlcyA8IDApCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvdXNlci5jIGIva2VybmVsL3Bvd2VyL3VzZXIuYwppbmRleCA4OTQ0M2I4Li5mN2I3YTc4IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvdXNlci5jCisrKyBiL2tlcm5lbC9wb3dlci91c2VyLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAltZW1zZXQoJmRhdGEtPmhhbmRsZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbmFwc2hvdF9oYW5kbGUpKTsKIAlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKSB7CiAJCWRhdGEtPnN3YXAgPSBzd3N1c3BfcmVzdW1lX2RldmljZSA/Ci0JCQkJc3dhcF90eXBlX29mKHN3c3VzcF9yZXN1bWVfZGV2aWNlLCAwKSA6IC0xOworCQkJc3dhcF90eXBlX29mKHN3c3VzcF9yZXN1bWVfZGV2aWNlLCAwLCBOVUxMKSA6IC0xOwogCQlkYXRhLT5tb2RlID0gT19SRE9OTFk7CiAJfSBlbHNlIHsKIAkJZGF0YS0+c3dhcCA9IC0xOwpAQCAtMjY4LDcgKzI2OCw4IEBACiAJCQkgKiBzbyB3ZSBuZWVkIHRvIHJlY29kZSB0aGVtCiAJCQkgKi8KIAkJCWlmIChvbGRfZGVjb2RlX2RldihhcmcpKSB7Ci0JCQkJZGF0YS0+c3dhcCA9IHN3YXBfdHlwZV9vZihvbGRfZGVjb2RlX2RldihhcmcpLCAwKTsKKwkJCQlkYXRhLT5zd2FwID0gc3dhcF90eXBlX29mKG9sZF9kZWNvZGVfZGV2KGFyZyksCisJCQkJCQkJMCwgTlVMTCk7CiAJCQkJaWYgKGRhdGEtPnN3YXAgPCAwKQogCQkJCQllcnJvciA9IC1FTk9ERVY7CiAJCQl9IGVsc2UgewpAQCAtMzY1LDcgKzM2Niw3IEBACiAJCQlzd2RldiA9IG9sZF9kZWNvZGVfZGV2KHN3YXBfYXJlYS5kZXYpOwogCQkJaWYgKHN3ZGV2KSB7CiAJCQkJb2Zmc2V0ID0gc3dhcF9hcmVhLm9mZnNldDsKLQkJCQlkYXRhLT5zd2FwID0gc3dhcF90eXBlX29mKHN3ZGV2LCBvZmZzZXQpOworCQkJCWRhdGEtPnN3YXAgPSBzd2FwX3R5cGVfb2Yoc3dkZXYsIG9mZnNldCwgTlVMTCk7CiAJCQkJaWYgKGRhdGEtPnN3YXAgPCAwKQogCQkJCQllcnJvciA9IC1FTk9ERVY7CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IDE4NWJiNDUuLmM3NzBlMWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTMzNSw3ICszMzUsNyBAQAogCiBzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgaWdub3JlX2xvZ2xldmVsOwogCi1pbnQgX19pbml0IGlnbm9yZV9sb2dsZXZlbF9zZXR1cChjaGFyICpzdHIpCitzdGF0aWMgaW50IF9faW5pdCBpZ25vcmVfbG9nbGV2ZWxfc2V0dXAoY2hhciAqc3RyKQogewogCWlnbm9yZV9sb2dsZXZlbCA9IDE7CiAJcHJpbnRrKEtFUk5fSU5GTyAiZGVidWc6IGlnbm9yaW5nIGxvZ2xldmVsIHNldHRpbmcuXG4iKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcm9maWxlLmMgYi9rZXJuZWwvcHJvZmlsZS5jCmluZGV4IGZiNWUwM2QuLmQ2NTc5ZDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcm9maWxlLmMKKysrIGIva2VybmVsL3Byb2ZpbGUuYwpAQCAtNDAsNyArNDAsMTAgQEAKIAogc3RhdGljIGF0b21pY190ICpwcm9mX2J1ZmZlcjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHByb2ZfbGVuLCBwcm9mX3NoaWZ0OworCiBpbnQgcHJvZl9vbiBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwocHJvZl9vbik7CisKIHN0YXRpYyBjcHVtYXNrX3QgcHJvZl9jcHVfbWFzayA9IENQVV9NQVNLX0FMTDsKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHByb2ZpbGVfaGl0ICpbMl0sIGNwdV9wcm9maWxlX2hpdHMpOwpAQCAtNTIsNiArNTUsNyBAQAogewogCXN0YXRpYyBjaGFyIF9faW5pdGRhdGEgc2NoZWRzdHJbXSA9ICJzY2hlZHVsZSI7CiAJc3RhdGljIGNoYXIgX19pbml0ZGF0YSBzbGVlcHN0cltdID0gInNsZWVwIjsKKwlzdGF0aWMgY2hhciBfX2luaXRkYXRhIGt2bXN0cltdID0gImt2bSI7CiAJaW50IHBhcjsKIAogCWlmICghc3RybmNtcChzdHIsIHNsZWVwc3RyLCBzdHJsZW4oc2xlZXBzdHIpKSkgewpAQCAtNjMsNyArNjcsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPCiAJCQkia2VybmVsIHNsZWVwIHByb2ZpbGluZyBlbmFibGVkIChzaGlmdDogJWxkKVxuIiwKIAkJCXByb2Zfc2hpZnQpOwotCX0gZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCBzbGVlcHN0ciwgc3RybGVuKHNsZWVwc3RyKSkpIHsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgc2NoZWRzdHIsIHN0cmxlbihzY2hlZHN0cikpKSB7CiAJCXByb2Zfb24gPSBTQ0hFRF9QUk9GSUxJTkc7CiAJCWlmIChzdHJbc3RybGVuKHNjaGVkc3RyKV0gPT0gJywnKQogCQkJc3RyICs9IHN0cmxlbihzY2hlZHN0cikgKyAxOwpAQCAtNzIsNiArNzYsMTUgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkJImtlcm5lbCBzY2hlZHVsZSBwcm9maWxpbmcgZW5hYmxlZCAoc2hpZnQ6ICVsZClcbiIsCiAJCQlwcm9mX3NoaWZ0KTsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwga3Ztc3RyLCBzdHJsZW4oa3Ztc3RyKSkpIHsKKwkJcHJvZl9vbiA9IEtWTV9QUk9GSUxJTkc7CisJCWlmIChzdHJbc3RybGVuKGt2bXN0cildID09ICcsJykKKwkJCXN0ciArPSBzdHJsZW4oa3Ztc3RyKSArIDE7CisJCWlmIChnZXRfb3B0aW9uKCZzdHIsICZwYXIpKQorCQkJcHJvZl9zaGlmdCA9IHBhcjsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJImtlcm5lbCBLVk0gcHJvZmlsaW5nIGVuYWJsZWQgKHNoaWZ0OiAlbGQpXG4iLAorCQkJcHJvZl9zaGlmdCk7CiAJfSBlbHNlIGlmIChnZXRfb3B0aW9uKCZzdHIsICZwYXIpKSB7CiAJCXByb2Zfc2hpZnQgPSBwYXI7CiAJCXByb2Zfb24gPSBDUFVfUFJPRklMSU5HOwpAQCAtMzg3LDYgKzQwMCw4IEBACiB9CiAjZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KIAorRVhQT1JUX1NZTUJPTF9HUEwocHJvZmlsZV9oaXRzKTsKKwogdm9pZCBwcm9maWxlX3RpY2soaW50IHR5cGUpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IGM1MmY5ODEuLjQ4MmIxMWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtNTIyLDYgKzUyMiw3IEBACiAKIAlWRVJCT1NFX1BSSU5US19TVFJJTkcoInJjdV90b3J0dXJlX3dyaXRlciB0YXNrIHN0YXJ0ZWQiKTsKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIDE5KTsKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKIAogCWRvIHsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CkBAIC01NjEsNiArNTYyLDcgQEAKIAogCVZFUkJPU0VfUFJJTlRLX1NUUklORygicmN1X3RvcnR1cmVfZmFrZXdyaXRlciB0YXNrIHN0YXJ0ZWQiKTsKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIDE5KTsKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKIAogCWRvIHsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSArIHJjdV9yYW5kb20oJnJhbmQpJTEwKTsKQEAgLTU5MSw2ICs1OTMsNyBAQAogCiAJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJyY3VfdG9ydHVyZV9yZWFkZXIgdGFzayBzdGFydGVkIik7CiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAxOSk7CisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CiAKIAlkbyB7CiAJCWlkeCA9IGN1cl9vcHMtPnJlYWRsb2NrKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmVsYXkuYyBiL2tlcm5lbC9yZWxheS5jCmluZGV4IDc1YTNhOWEuLjI4NGUyZTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZWxheS5jCisrKyBiL2tlcm5lbC9yZWxheS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKICAqLwogc3RydWN0IHJjaGFuX2J1ZiAqcmVsYXlfY3JlYXRlX2J1ZihzdHJ1Y3QgcmNoYW4gKmNoYW4pCiB7Ci0Jc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJjaGFuX2J1ZiksIEdGUF9LRVJORUwpOworCXN0cnVjdCByY2hhbl9idWYgKmJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByY2hhbl9idWYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTMwMiw3ICszMDIsNyBAQAogCiAvKioKICAqCXdha2V1cF9yZWFkZXJzIC0gd2FrZSB1cCByZWFkZXJzIHdhaXRpbmcgb24gYSBjaGFubmVsCi0gKglAcHJpdmF0ZTogdGhlIGNoYW5uZWwgYnVmZmVyCisgKglAd29yazogd29yayBzdHJ1Y3QgdGhhdCBjb250YWlucyB0aGUgdGhlIGNoYW5uZWwgYnVmZmVyCiAgKgogICoJVGhpcyBpcyB0aGUgd29yayBmdW5jdGlvbiB1c2VkIHRvIGRlZmVyIHJlYWRlciB3YWtpbmcuICBUaGUKICAqCXJlYXNvbiB3YWtpbmcgaXMgZGVmZXJyZWQgaXMgdGhhdCBjYWxsaW5nIGRpcmVjdGx5IGZyb20gd3JpdGUKQEAgLTMyMiw3ICszMjIsNyBAQAogICoKICAqCVNlZSByZWxheV9yZXNldCBmb3IgZGVzY3JpcHRpb24gb2YgZWZmZWN0LgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yZWxheV9yZXNldChzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHVuc2lnbmVkIGludCBpbml0KQorc3RhdGljIHZvaWQgX19yZWxheV9yZXNldChzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHVuc2lnbmVkIGludCBpbml0KQogewogCXNpemVfdCBpOwogCkBAIC00MTgsNyArNDE4LDcgQEAKICAqCVRoZSBjaGFubmVsIGJ1ZmZlciBhbmQgY2hhbm5lbCBidWZmZXIgZGF0YSBzdHJ1Y3R1cmUgYXJlIHRoZW4gZnJlZWQKICAqCWF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgaXMgZ2l2ZW4gdXAuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWxheV9jbG9zZV9idWYoc3RydWN0IHJjaGFuX2J1ZiAqYnVmKQorc3RhdGljIHZvaWQgcmVsYXlfY2xvc2VfYnVmKHN0cnVjdCByY2hhbl9idWYgKmJ1ZikKIHsKIAlidWYtPmZpbmFsaXplZCA9IDE7CiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmYnVmLT53YWtlX3JlYWRlcnMpOwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJa3JlZl9wdXQoJmJ1Zi0+a3JlZiwgcmVsYXlfcmVtb3ZlX2J1Zik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9jYWxsYmFja3Moc3RydWN0IHJjaGFuICpjaGFuLAorc3RhdGljIHZvaWQgc2V0dXBfY2FsbGJhY2tzKHN0cnVjdCByY2hhbiAqY2hhbiwKIAkJCQkgICBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzICpjYikKIHsKIAlpZiAoIWNiKSB7CkBAIC00NzksNyArNDc5LDcgQEAKIAlpZiAoIShzdWJidWZfc2l6ZSAmJiBuX3N1YmJ1ZnMpKQogCQlyZXR1cm4gTlVMTDsKIAotCWNoYW4gPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmNoYW4pLCBHRlBfS0VSTkVMKTsKKwljaGFuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJjaGFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjaGFuKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtOTQ2LDExICs5NDYsMTAgQEAKIC8qCiAgKglyZWxheV9maWxlX3JlYWRfc3ViYnVmcyAtIHJlYWQgY291bnQgYnl0ZXMsIGJyaWRnaW5nIHN1YmJ1ZiBib3VuZGFyaWVzCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCByZWxheV9maWxlX3JlYWRfc3ViYnVmcyhzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQkJICAgICAgbG9mZl90ICpwcG9zLAotCQkJCQkgICAgICBzdWJidWZfYWN0b3JfdCBzdWJidWZfYWN0b3IsCi0JCQkJCSAgICAgIHJlYWRfYWN0b3JfdCBhY3RvciwKLQkJCQkJICAgICAgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MpCitzdGF0aWMgc3NpemVfdCByZWxheV9maWxlX3JlYWRfc3ViYnVmcyhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90ICpwcG9zLAorCQkJCQlzdWJidWZfYWN0b3JfdCBzdWJidWZfYWN0b3IsCisJCQkJCXJlYWRfYWN0b3JfdCBhY3RvciwKKwkJCQkJcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MpCiB7CiAJc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXNpemVfdCByZWFkX3N0YXJ0LCBhdmFpbDsKQEAgLTk1OSw3ICs5NTgsNyBAQAogCWlmICghZGVzYy0+Y291bnQpCiAJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X2xvY2soJmZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWRvIHsKIAkJaWYgKCFyZWxheV9maWxlX3JlYWRfYXZhaWwoYnVmLCAqcHBvcykpCiAJCQlicmVhazsKQEAgLTk3OSw3ICs5NzgsNyBAQAogCQkJKnBwb3MgPSByZWxheV9maWxlX3JlYWRfZW5kX3BvcyhidWYsIHJlYWRfc3RhcnQsIHJldCk7CiAJCX0KIAl9IHdoaWxlIChkZXNjLT5jb3VudCAmJiByZXQpOwotCW11dGV4X3VubG9jaygmZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gZGVzYy0+d3JpdHRlbjsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggZjM4NWVmZi4uY2NhOTNjYyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTIyNSw4ICsyMjUsMTAgQEAKIAl1bnNpZ25lZCBsb25nIG5yX3VuaW50ZXJydXB0aWJsZTsKIAogCXVuc2lnbmVkIGxvbmcgZXhwaXJlZF90aW1lc3RhbXA7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRpbWVzdGFtcF9sYXN0X3RpY2s7CisJLyogQ2FjaGVkIHRpbWVzdGFtcCBzZXQgYnkgdXBkYXRlX2NwdV9jbG9jaygpICovCisJdW5zaWduZWQgbG9uZyBsb25nIG1vc3RfcmVjZW50X3RpbWVzdGFtcDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsICppZGxlOworCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW07CiAJc3RydWN0IHByaW9fYXJyYXkgKmFjdGl2ZSwgKmV4cGlyZWQsIGFycmF5c1syXTsKIAlpbnQgYmVzdF9leHBpcmVkX3ByaW87CkBAIC00MjYsNyArNDI4LDcgQEAKICAqIGJ1bXAgdGhpcyB1cCB3aGVuIGNoYW5naW5nIHRoZSBvdXRwdXQgZm9ybWF0IG9yIHRoZSBtZWFuaW5nIG9mIGFuIGV4aXN0aW5nCiAgKiBmb3JtYXQsIHNvIHRoYXQgdG9vbHMgY2FuIGFkYXB0IChvciBhYm9ydCkKICAqLwotI2RlZmluZSBTQ0hFRFNUQVRfVkVSU0lPTiAxMgorI2RlZmluZSBTQ0hFRFNUQVRfVkVSU0lPTiAxNAogCiBzdGF0aWMgaW50IHNob3dfc2NoZWRzdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewpAQCAtNDY0LDcgKzQ2Niw4IEBACiAJCQlzZXFfcHJpbnRmKHNlcSwgImRvbWFpbiVkICVzIiwgZGNudCsrLCBtYXNrX3N0cik7CiAJCQlmb3IgKGl0eXBlID0gU0NIRURfSURMRTsgaXR5cGUgPCBNQVhfSURMRV9UWVBFUzsKIAkJCQkJaXR5cGUrKykgewotCQkJCXNlcV9wcmludGYoc2VxLCAiICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUiLAorCQkJCXNlcV9wcmludGYoc2VxLCAiICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAiCisJCQkJCQkiJWx1IiwKIAkJCQkgICAgc2QtPmxiX2NudFtpdHlwZV0sCiAJCQkJICAgIHNkLT5sYl9iYWxhbmNlZFtpdHlwZV0sCiAJCQkJICAgIHNkLT5sYl9mYWlsZWRbaXR5cGVdLApAQCAtNDc0LDExICs0NzcsMTMgQEAKIAkJCQkgICAgc2QtPmxiX25vYnVzeXFbaXR5cGVdLAogCQkJCSAgICBzZC0+bGJfbm9idXN5Z1tpdHlwZV0pOwogCQkJfQotCQkJc2VxX3ByaW50ZihzZXEsICIgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHVcbiIsCisJCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSIKKwkJCSAgICAiICVsdSAlbHUgJWx1XG4iLAogCQkJICAgIHNkLT5hbGJfY250LCBzZC0+YWxiX2ZhaWxlZCwgc2QtPmFsYl9wdXNoZWQsCiAJCQkgICAgc2QtPnNiZV9jbnQsIHNkLT5zYmVfYmFsYW5jZWQsIHNkLT5zYmVfcHVzaGVkLAogCQkJICAgIHNkLT5zYmZfY250LCBzZC0+c2JmX2JhbGFuY2VkLCBzZC0+c2JmX3B1c2hlZCwKLQkJCSAgICBzZC0+dHR3dV93YWtlX3JlbW90ZSwgc2QtPnR0d3VfbW92ZV9hZmZpbmUsIHNkLT50dHd1X21vdmVfYmFsYW5jZSk7CisJCQkgICAgc2QtPnR0d3Vfd2FrZV9yZW1vdGUsIHNkLT50dHd1X21vdmVfYWZmaW5lLAorCQkJICAgIHNkLT50dHd1X21vdmVfYmFsYW5jZSk7CiAJCX0KIAkJcHJlZW1wdF9lbmFibGUoKTsKICNlbmRpZgpAQCAtNTQ3LDcgKzU1Miw3IEBACiAjZW5kaWYKIAogLyoKLSAqIHJxX2xvY2sgLSBsb2NrIGEgZ2l2ZW4gcnVucXVldWUgYW5kIGRpc2FibGUgaW50ZXJydXB0cy4KKyAqIHRoaXNfcnFfbG9jayAtIGxvY2sgdGhpcyBydW5xdWV1ZSBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqdGhpc19ycV9sb2NrKHZvaWQpCiAJX19hY3F1aXJlcyhycS0+bG9jaykKQEAgLTkzOCwxMyArOTQzLDE2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIG5vdzsKIAorCWlmIChydF90YXNrKHApKQorCQlnb3RvIG91dDsKKwogCW5vdyA9IHNjaGVkX2Nsb2NrKCk7CiAjaWZkZWYgQ09ORklHX1NNUAogCWlmICghbG9jYWwpIHsKIAkJLyogQ29tcGVuc2F0ZSBmb3IgZHJpZnRpbmcgc2NoZWRfY2xvY2sgKi8KIAkJc3RydWN0IHJxICp0aGlzX3JxID0gdGhpc19ycSgpOwotCQlub3cgPSAobm93IC0gdGhpc19ycS0+dGltZXN0YW1wX2xhc3RfdGljaykKLQkJCSsgcnEtPnRpbWVzdGFtcF9sYXN0X3RpY2s7CisJCW5vdyA9IChub3cgLSB0aGlzX3JxLT5tb3N0X3JlY2VudF90aW1lc3RhbXApCisJCQkrIHJxLT5tb3N0X3JlY2VudF90aW1lc3RhbXA7CiAJfQogI2VuZGlmCiAKQEAgLTk1OSw4ICs5NjcsNyBAQAogCQkJCSAgICAgKG5vdyAtIHAtPnRpbWVzdGFtcCkgPj4gMjApOwogCX0KIAotCWlmICghcnRfdGFzayhwKSkKLQkJcC0+cHJpbyA9IHJlY2FsY190YXNrX3ByaW8ocCwgbm93KTsKKwlwLT5wcmlvID0gcmVjYWxjX3Rhc2tfcHJpbyhwLCBub3cpOwogCiAJLyoKIAkgKiBUaGlzIGNoZWNrcyB0byBtYWtlIHN1cmUgaXQncyBub3QgYW4gdW5pbnRlcnJ1cHRpYmxlIHRhc2sKQEAgLTk4NSw3ICs5OTIsNyBAQAogCQl9CiAJfQogCXAtPnRpbWVzdGFtcCA9IG5vdzsKLQorb3V0OgogCV9fYWN0aXZhdGVfdGFzayhwLCBycSk7CiB9CiAKQEAgLTE0NTAsNyArMTQ1Nyw5IEBACiAKIAkJaWYgKHRoaXNfc2QtPmZsYWdzICYgU0RfV0FLRV9BRkZJTkUpIHsKIAkJCXVuc2lnbmVkIGxvbmcgdGwgPSB0aGlzX2xvYWQ7Ci0JCQl1bnNpZ25lZCBsb25nIHRsX3Blcl90YXNrID0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKHRoaXNfY3B1KTsKKwkJCXVuc2lnbmVkIGxvbmcgdGxfcGVyX3Rhc2s7CisKKwkJCXRsX3Blcl90YXNrID0gY3B1X2F2Z19sb2FkX3Blcl90YXNrKHRoaXNfY3B1KTsKIAogCQkJLyoKIAkJCSAqIElmIHN5bmMgd2FrZXVwIHRoZW4gc3VidHJhY3QgdGhlIChtYXhpbXVtIHBvc3NpYmxlKQpAQCAtMTU1OCw2ICsxNTY3LDcgQEAKIAlyZXR1cm4gdHJ5X3RvX3dha2VfdXAocCwgc3RhdGUsIDApOwogfQogCitzdGF0aWMgdm9pZCB0YXNrX3J1bm5pbmdfdGljayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogLyoKICAqIFBlcmZvcm0gc2NoZWR1bGVyIHJlbGF0ZWQgc2V0dXAgZm9yIGEgbmV3bHkgZm9ya2VkIHByb2Nlc3MgcC4KICAqIHAgaXMgZm9ya2VkIGJ5IGN1cnJlbnQuCkBAIC0xNjE4LDcgKzE2MjgsNyBAQAogCQkgKiBydW5xdWV1ZSBsb2NrIGlzIG5vdCBhIHByb2JsZW0uCiAJCSAqLwogCQljdXJyZW50LT50aW1lX3NsaWNlID0gMTsKLQkJc2NoZWR1bGVyX3RpY2soKTsKKwkJdGFza19ydW5uaW5nX3RpY2soY3B1X3JxKGNwdSksIGN1cnJlbnQpOwogCX0KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJcHV0X2NwdSgpOwpAQCAtMTY4OCw4ICsxNjk4LDggQEAKIAkJICogTm90IHRoZSBsb2NhbCBDUFUgLSBtdXN0IGFkanVzdCB0aW1lc3RhbXAuIFRoaXMgc2hvdWxkCiAJCSAqIGdldCBvcHRpbWlzZWQgYXdheSBpbiB0aGUgIUNPTkZJR19TTVAgY2FzZS4KIAkJICovCi0JCXAtPnRpbWVzdGFtcCA9IChwLT50aW1lc3RhbXAgLSB0aGlzX3JxLT50aW1lc3RhbXBfbGFzdF90aWNrKQotCQkJCQkrIHJxLT50aW1lc3RhbXBfbGFzdF90aWNrOworCQlwLT50aW1lc3RhbXAgPSAocC0+dGltZXN0YW1wIC0gdGhpc19ycS0+bW9zdF9yZWNlbnRfdGltZXN0YW1wKQorCQkJCQkrIHJxLT5tb3N0X3JlY2VudF90aW1lc3RhbXA7CiAJCV9fYWN0aXZhdGVfdGFzayhwLCBycSk7CiAJCWlmIChUQVNLX1BSRUVNUFRTX0NVUlIocCwgcnEpKQogCQkJcmVzY2hlZF90YXNrKHJxLT5jdXJyKTsKQEAgLTE5NTIsNiArMTk2Miw3IEBACiAJX19hY3F1aXJlcyhycTEtPmxvY2spCiAJX19hY3F1aXJlcyhycTItPmxvY2spCiB7CisJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCWlmIChycTEgPT0gcnEyKSB7CiAJCXNwaW5fbG9jaygmcnExLT5sb2NrKTsKIAkJX19hY3F1aXJlKHJxMi0+bG9jayk7CS8qIEZha2UgaXQgb3V0IDspICovCkBAIC0xOTkxLDYgKzIwMDIsMTEgQEAKIAlfX2FjcXVpcmVzKGJ1c2llc3QtPmxvY2spCiAJX19hY3F1aXJlcyh0aGlzX3JxLT5sb2NrKQogeworCWlmICh1bmxpa2VseSghaXJxc19kaXNhYmxlZCgpKSkgeworCQkvKiBwcmludGsoKSBkb2Vzbid0IHdvcmsgZ29vZCB1bmRlciBycS0+bG9jayAqLworCQlzcGluX3VubG9jaygmdGhpc19ycS0+bG9jayk7CisJCUJVR19PTigxKTsKKwl9CiAJaWYgKHVubGlrZWx5KCFzcGluX3RyeWxvY2soJmJ1c2llc3QtPmxvY2spKSkgewogCQlpZiAoYnVzaWVzdCA8IHRoaXNfcnEpIHsKIAkJCXNwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKQEAgLTIwNjEsOCArMjA3Nyw4IEBACiAJc2V0X3Rhc2tfY3B1KHAsIHRoaXNfY3B1KTsKIAlpbmNfbnJfcnVubmluZyhwLCB0aGlzX3JxKTsKIAllbnF1ZXVlX3Rhc2socCwgdGhpc19hcnJheSk7Ci0JcC0+dGltZXN0YW1wID0gKHAtPnRpbWVzdGFtcCAtIHNyY19ycS0+dGltZXN0YW1wX2xhc3RfdGljaykKLQkJCQkrIHRoaXNfcnEtPnRpbWVzdGFtcF9sYXN0X3RpY2s7CisJcC0+dGltZXN0YW1wID0gKHAtPnRpbWVzdGFtcCAtIHNyY19ycS0+bW9zdF9yZWNlbnRfdGltZXN0YW1wKQorCQkJCSsgdGhpc19ycS0+bW9zdF9yZWNlbnRfdGltZXN0YW1wOwogCS8qCiAJICogTm90ZSB0aGF0IGlkbGUgdGhyZWFkcyBoYXZlIGEgcHJpbyBvZiBNQVhfUFJJTywgZm9yIHRoaXMgdGVzdAogCSAqIHRvIGJlIGFsd2F5cyB0cnVlIGZvciB0aGVtLgpAQCAtMjA5OCwxMCArMjExNCwxNSBAQAogCSAqIDIpIHRvbyBtYW55IGJhbGFuY2UgYXR0ZW1wdHMgaGF2ZSBmYWlsZWQuCiAJICovCiAKLQlpZiAoc2QtPm5yX2JhbGFuY2VfZmFpbGVkID4gc2QtPmNhY2hlX25pY2VfdHJpZXMpCisJaWYgKHNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKSB7CisjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKKwkJaWYgKHRhc2tfaG90KHAsIHJxLT5tb3N0X3JlY2VudF90aW1lc3RhbXAsIHNkKSkKKwkJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2hvdF9nYWluZWRbaWRsZV0pOworI2VuZGlmCiAJCXJldHVybiAxOworCX0KIAotCWlmICh0YXNrX2hvdChwLCBycS0+dGltZXN0YW1wX2xhc3RfdGljaywgc2QpKQorCWlmICh0YXNrX2hvdChwLCBycS0+bW9zdF9yZWNlbnRfdGltZXN0YW1wLCBzZCkpCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQpAQCAtMjE5OSwxMSArMjIyMCw2IEBACiAJCWdvdG8gc2tpcF9iaXRtYXA7CiAJfQogCi0jaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKLQlpZiAodGFza19ob3QodG1wLCBidXNpZXN0LT50aW1lc3RhbXBfbGFzdF90aWNrLCBzZCkpCi0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2hvdF9nYWluZWRbaWRsZV0pOwotI2VuZGlmCi0KIAlwdWxsX3Rhc2soYnVzaWVzdCwgYXJyYXksIHRtcCwgdGhpc19ycSwgZHN0X2FycmF5LCB0aGlzX2NwdSk7CiAJcHVsbGVkKys7CiAJcmVtX2xvYWRfbW92ZSAtPSB0bXAtPmxvYWRfd2VpZ2h0OwpAQCAtMjI0MSw3ICsyMjU3LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKgogZmluZF9idXNpZXN0X2dyb3VwKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCiAJCSAgIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSwgZW51bSBpZGxlX3R5cGUgaWRsZSwgaW50ICpzZF9pZGxlLAotCQkgICBjcHVtYXNrX3QgKmNwdXMpCisJCSAgIGNwdW1hc2tfdCAqY3B1cywgaW50ICpiYWxhbmNlKQogewogCXN0cnVjdCBzY2hlZF9ncm91cCAqYnVzaWVzdCA9IE5VTEwsICp0aGlzID0gTlVMTCwgKmdyb3VwID0gc2QtPmdyb3VwczsKIAl1bnNpZ25lZCBsb25nIG1heF9sb2FkLCBhdmdfbG9hZCwgdG90YWxfbG9hZCwgdGhpc19sb2FkLCB0b3RhbF9wd3I7CkBAIC0yMjcwLDEwICsyMjg2LDE0IEBACiAJCXVuc2lnbmVkIGxvbmcgbG9hZCwgZ3JvdXBfY2FwYWNpdHk7CiAJCWludCBsb2NhbF9ncm91cDsKIAkJaW50IGk7CisJCXVuc2lnbmVkIGludCBiYWxhbmNlX2NwdSA9IC0xLCBmaXJzdF9pZGxlX2NwdSA9IDA7CiAJCXVuc2lnbmVkIGxvbmcgc3VtX25yX3J1bm5pbmcsIHN1bV93ZWlnaHRlZF9sb2FkOwogCiAJCWxvY2FsX2dyb3VwID0gY3B1X2lzc2V0KHRoaXNfY3B1LCBncm91cC0+Y3B1bWFzayk7CiAKKwkJaWYgKGxvY2FsX2dyb3VwKQorCQkJYmFsYW5jZV9jcHUgPSBmaXJzdF9jcHUoZ3JvdXAtPmNwdW1hc2spOworCiAJCS8qIFRhbGx5IHVwIHRoZSBsb2FkIG9mIGFsbCBDUFVzIGluIHRoZSBncm91cCAqLwogCQlzdW1fd2VpZ2h0ZWRfbG9hZCA9IHN1bV9ucl9ydW5uaW5nID0gYXZnX2xvYWQgPSAwOwogCkBAIC0yMjg5LDkgKzIzMDksMTQgQEAKIAkJCQkqc2RfaWRsZSA9IDA7CiAKIAkJCS8qIEJpYXMgYmFsYW5jaW5nIHRvd2FyZCBjcHVzIG9mIG91ciBkb21haW4gKi8KLQkJCWlmIChsb2NhbF9ncm91cCkKKwkJCWlmIChsb2NhbF9ncm91cCkgeworCQkJCWlmIChpZGxlX2NwdShpKSAmJiAhZmlyc3RfaWRsZV9jcHUpIHsKKwkJCQkJZmlyc3RfaWRsZV9jcHUgPSAxOworCQkJCQliYWxhbmNlX2NwdSA9IGk7CisJCQkJfQorCiAJCQkJbG9hZCA9IHRhcmdldF9sb2FkKGksIGxvYWRfaWR4KTsKLQkJCWVsc2UKKwkJCX0gZWxzZQogCQkJCWxvYWQgPSBzb3VyY2VfbG9hZChpLCBsb2FkX2lkeCk7CiAKIAkJCWF2Z19sb2FkICs9IGxvYWQ7CkBAIC0yMjk5LDYgKzIzMjQsMTYgQEAKIAkJCXN1bV93ZWlnaHRlZF9sb2FkICs9IHJxLT5yYXdfd2VpZ2h0ZWRfbG9hZDsKIAkJfQogCisJCS8qCisJCSAqIEZpcnN0IGlkbGUgY3B1IG9yIHRoZSBmaXJzdCBjcHUoYnVzaWVzdCkgaW4gdGhpcyBzY2hlZCBncm91cAorCQkgKiBpcyBlbGlnaWJsZSBmb3IgZG9pbmcgbG9hZCBiYWxhbmNpbmcgYXQgdGhpcyBhbmQgYWJvdmUKKwkJICogZG9tYWlucy4KKwkJICovCisJCWlmIChsb2NhbF9ncm91cCAmJiBiYWxhbmNlX2NwdSAhPSB0aGlzX2NwdSAmJiBiYWxhbmNlKSB7CisJCQkqYmFsYW5jZSA9IDA7CisJCQlnb3RvIHJldDsKKwkJfQorCiAJCXRvdGFsX2xvYWQgKz0gYXZnX2xvYWQ7CiAJCXRvdGFsX3B3ciArPSBncm91cC0+Y3B1X3Bvd2VyOwogCkBAIC0yNDU4LDE4ICsyNDkzLDIxIEBACiAJCXB3cl9ub3cgLz0gU0NIRURfTE9BRF9TQ0FMRTsKIAogCQkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIHN1YnRyYWN0ICovCi0JCXRtcCA9IGJ1c2llc3RfbG9hZF9wZXJfdGFzaypTQ0hFRF9MT0FEX1NDQUxFL2J1c2llc3QtPmNwdV9wb3dlcjsKKwkJdG1wID0gYnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSAvCisJCQlidXNpZXN0LT5jcHVfcG93ZXI7CiAJCWlmIChtYXhfbG9hZCA+IHRtcCkKIAkJCXB3cl9tb3ZlICs9IGJ1c2llc3QtPmNwdV9wb3dlciAqCiAJCQkJbWluKGJ1c2llc3RfbG9hZF9wZXJfdGFzaywgbWF4X2xvYWQgLSB0bXApOwogCiAJCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2QgYWRkICovCi0JCWlmIChtYXhfbG9hZCpidXNpZXN0LT5jcHVfcG93ZXIgPAotCQkJCWJ1c2llc3RfbG9hZF9wZXJfdGFzaypTQ0hFRF9MT0FEX1NDQUxFKQotCQkJdG1wID0gbWF4X2xvYWQqYnVzaWVzdC0+Y3B1X3Bvd2VyL3RoaXMtPmNwdV9wb3dlcjsKKwkJaWYgKG1heF9sb2FkICogYnVzaWVzdC0+Y3B1X3Bvd2VyIDwKKwkJCQlidXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKQorCQkJdG1wID0gbWF4X2xvYWQgKiBidXNpZXN0LT5jcHVfcG93ZXIgLyB0aGlzLT5jcHVfcG93ZXI7CiAJCWVsc2UKLQkJCXRtcCA9IGJ1c2llc3RfbG9hZF9wZXJfdGFzaypTQ0hFRF9MT0FEX1NDQUxFL3RoaXMtPmNwdV9wb3dlcjsKLQkJcHdyX21vdmUgKz0gdGhpcy0+Y3B1X3Bvd2VyKm1pbih0aGlzX2xvYWRfcGVyX3Rhc2ssIHRoaXNfbG9hZCArIHRtcCk7CisJCQl0bXAgPSBidXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFIC8KKwkJCQl0aGlzLT5jcHVfcG93ZXI7CisJCXB3cl9tb3ZlICs9IHRoaXMtPmNwdV9wb3dlciAqCisJCQltaW4odGhpc19sb2FkX3Blcl90YXNrLCB0aGlzX2xvYWQgKyB0bXApOwogCQlwd3JfbW92ZSAvPSBTQ0hFRF9MT0FEX1NDQUxFOwogCiAJCS8qIE1vdmUgaWYgd2UgZ2FpbiB0aHJvdWdocHV0ICovCkBAIC0yNDkwLDggKzI1MjgsOCBAQAogCQkqaW1iYWxhbmNlID0gbWluX2xvYWRfcGVyX3Rhc2s7CiAJCXJldHVybiBncm91cF9taW47CiAJfQotcmV0OgogI2VuZGlmCityZXQ6CiAJKmltYmFsYW5jZSA9IDA7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yNTQwLDE3ICsyNTc4LDE3IEBACiAvKgogICogQ2hlY2sgdGhpc19jcHUgdG8gZW5zdXJlIGl0IGlzIGJhbGFuY2VkIHdpdGhpbiBkb21haW4uIEF0dGVtcHQgdG8gbW92ZQogICogdGFza3MgaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLgotICoKLSAqIENhbGxlZCB3aXRoIHRoaXNfcnEgdW5sb2NrZWQuCiAgKi8KIHN0YXRpYyBpbnQgbG9hZF9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLAotCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gaWRsZV90eXBlIGlkbGUpCisJCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBpZGxlX3R5cGUgaWRsZSwKKwkJCWludCAqYmFsYW5jZSkKIHsKIAlpbnQgbnJfbW92ZWQsIGFsbF9waW5uZWQgPSAwLCBhY3RpdmVfYmFsYW5jZSA9IDAsIHNkX2lkbGUgPSAwOwogCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXA7CiAJdW5zaWduZWQgbG9uZyBpbWJhbGFuY2U7CiAJc3RydWN0IHJxICpidXNpZXN0OwogCWNwdW1hc2tfdCBjcHVzID0gQ1BVX01BU0tfQUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgogCSAqIFdoZW4gcG93ZXIgc2F2aW5ncyBwb2xpY3kgaXMgZW5hYmxlZCBmb3IgdGhlIHBhcmVudCBkb21haW4sIGlkbGUKQEAgLTI1NjYsNyArMjYwNCwxMSBAQAogCiByZWRvOgogCWdyb3VwID0gZmluZF9idXNpZXN0X2dyb3VwKHNkLCB0aGlzX2NwdSwgJmltYmFsYW5jZSwgaWRsZSwgJnNkX2lkbGUsCi0JCQkJCQkJJmNwdXMpOworCQkJCSAgICZjcHVzLCBiYWxhbmNlKTsKKworCWlmICgqYmFsYW5jZSA9PSAwKQorCQlnb3RvIG91dF9iYWxhbmNlZDsKKwogCWlmICghZ3JvdXApIHsKIAkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5Z1tpZGxlXSk7CiAJCWdvdG8gb3V0X2JhbGFuY2VkOwpAQCAtMjU5MCwxMSArMjYzMiwxMyBAQAogCQkgKiBzdGlsbCB1bmJhbGFuY2VkLiBucl9tb3ZlZCBzaW1wbHkgc3RheXMgemVybywgc28gaXQgaXMKIAkJICogY29ycmVjdGx5IHRyZWF0ZWQgYXMgYW4gaW1iYWxhbmNlLgogCQkgKi8KKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlkb3VibGVfcnFfbG9jayh0aGlzX3JxLCBidXNpZXN0KTsKIAkJbnJfbW92ZWQgPSBtb3ZlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAogCQkJCSAgICAgIG1pbnVzXzFfb3JfemVybyhidXNpZXN0LT5ucl9ydW5uaW5nKSwKIAkJCQkgICAgICBpbWJhbGFuY2UsIHNkLCBpZGxlLCAmYWxsX3Bpbm5lZCk7CiAJCWRvdWJsZV9ycV91bmxvY2sodGhpc19ycSwgYnVzaWVzdCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCQkvKiBBbGwgdGFza3Mgb24gdGhpcyBydW5xdWV1ZSB3ZXJlIHBpbm5lZCBieSBDUFUgYWZmaW5pdHkgKi8KIAkJaWYgKHVubGlrZWx5KGFsbF9waW5uZWQpKSB7CkBAIC0yNjExLDEzICsyNjU1LDEzIEBACiAKIAkJaWYgKHVubGlrZWx5KHNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKzIpKSB7CiAKLQkJCXNwaW5fbG9jaygmYnVzaWVzdC0+bG9jayk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYnVzaWVzdC0+bG9jaywgZmxhZ3MpOwogCiAJCQkvKiBkb24ndCBraWNrIHRoZSBtaWdyYXRpb25fdGhyZWFkLCBpZiB0aGUgY3VycgogCQkJICogdGFzayBvbiBidXNpZXN0IGNwdSBjYW4ndCBiZSBtb3ZlZCB0byB0aGlzX2NwdQogCQkJICovCiAJCQlpZiAoIWNwdV9pc3NldCh0aGlzX2NwdSwgYnVzaWVzdC0+Y3Vyci0+Y3B1c19hbGxvd2VkKSkgewotCQkJCXNwaW5fdW5sb2NrKCZidXNpZXN0LT5sb2NrKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7CiAJCQkJYWxsX3Bpbm5lZCA9IDE7CiAJCQkJZ290byBvdXRfb25lX3Bpbm5lZDsKIAkJCX0KQEAgLTI2MjcsNyArMjY3MSw3IEBACiAJCQkJYnVzaWVzdC0+cHVzaF9jcHUgPSB0aGlzX2NwdTsKIAkJCQlhY3RpdmVfYmFsYW5jZSA9IDE7CiAJCQl9Ci0JCQlzcGluX3VubG9jaygmYnVzaWVzdC0+bG9jayk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7CiAJCQlpZiAoYWN0aXZlX2JhbGFuY2UpCiAJCQkJd2FrZV91cF9wcm9jZXNzKGJ1c2llc3QtPm1pZ3JhdGlvbl90aHJlYWQpOwogCkBAIC0yNzA2LDcgKzI3NTAsNyBAQAogCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2NudFtORVdMWV9JRExFXSk7CiByZWRvOgogCWdyb3VwID0gZmluZF9idXNpZXN0X2dyb3VwKHNkLCB0aGlzX2NwdSwgJmltYmFsYW5jZSwgTkVXTFlfSURMRSwKLQkJCQkmc2RfaWRsZSwgJmNwdXMpOworCQkJCSAgICZzZF9pZGxlLCAmY3B1cywgTlVMTCk7CiAJaWYgKCFncm91cCkgewogCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lnW05FV0xZX0lETEVdKTsKIAkJZ290byBvdXRfYmFsYW5jZWQ7CkBAIC0yNzY2LDE0ICsyODEwLDI4IEBACiBzdGF0aWMgdm9pZCBpZGxlX2JhbGFuY2UoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEpCiB7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CisJaW50IHB1bGxlZF90YXNrID0gMDsKKwl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyA2MCAqICBIWjsKIAogCWZvcl9lYWNoX2RvbWFpbih0aGlzX2NwdSwgc2QpIHsKIAkJaWYgKHNkLT5mbGFncyAmIFNEX0JBTEFOQ0VfTkVXSURMRSkgewogCQkJLyogSWYgd2UndmUgcHVsbGVkIHRhc2tzIG92ZXIgc3RvcCBzZWFyY2hpbmc6ICovCi0JCQlpZiAobG9hZF9iYWxhbmNlX25ld2lkbGUodGhpc19jcHUsIHRoaXNfcnEsIHNkKSkKKwkJCXB1bGxlZF90YXNrID0gbG9hZF9iYWxhbmNlX25ld2lkbGUodGhpc19jcHUsCisJCQkJCQkJdGhpc19ycSwgc2QpOworCQkJaWYgKHRpbWVfYWZ0ZXIobmV4dF9iYWxhbmNlLAorCQkJCSAgc2QtPmxhc3RfYmFsYW5jZSArIHNkLT5iYWxhbmNlX2ludGVydmFsKSkKKwkJCQluZXh0X2JhbGFuY2UgPSBzZC0+bGFzdF9iYWxhbmNlCisJCQkJCQkrIHNkLT5iYWxhbmNlX2ludGVydmFsOworCQkJaWYgKHB1bGxlZF90YXNrKQogCQkJCWJyZWFrOwogCQl9CiAJfQorCWlmICghcHVsbGVkX3Rhc2spCisJCS8qCisJCSAqIFdlIGFyZSBnb2luZyBpZGxlLiBuZXh0X2JhbGFuY2UgbWF5IGJlIHNldCBiYXNlZCBvbgorCQkgKiBhIGJ1c3kgcHJvY2Vzc29yLiBTbyByZXNldCBuZXh0X2JhbGFuY2UuCisJCSAqLworCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7CiB9CiAKIC8qCkBAIC0yODI2LDI2ICsyODg0LDkgQEAKIAlzcGluX3VubG9jaygmdGFyZ2V0X3JxLT5sb2NrKTsKIH0KIAotLyoKLSAqIHJlYmFsYW5jZV90aWNrIHdpbGwgZ2V0IGNhbGxlZCBldmVyeSB0aW1lciB0aWNrLCBvbiBldmVyeSBDUFUuCi0gKgotICogSXQgY2hlY2tzIGVhY2ggc2NoZWR1bGluZyBkb21haW4gdG8gc2VlIGlmIGl0IGlzIGR1ZSB0byBiZSBiYWxhbmNlZCwKLSAqIGFuZCBpbml0aWF0ZXMgYSBiYWxhbmNpbmcgb3BlcmF0aW9uIGlmIHNvLgotICoKLSAqIEJhbGFuY2luZyBwYXJhbWV0ZXJzIGFyZSBzZXQgdXAgaW4gYXJjaF9pbml0X3NjaGVkX2RvbWFpbnMuCi0gKi8KLQotLyogRG9uJ3QgaGF2ZSBhbGwgYmFsYW5jaW5nIG9wZXJhdGlvbnMgZ29pbmcgb2ZmIGF0IG9uY2U6ICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3B1X29mZnNldChpbnQgY3B1KQorc3RhdGljIHZvaWQgdXBkYXRlX2xvYWQoc3RydWN0IHJxICp0aGlzX3JxKQogewotCXJldHVybiBqaWZmaWVzICsgY3B1ICogSFogLyBOUl9DUFVTOwotfQotCi1zdGF0aWMgdm9pZAotcmViYWxhbmNlX3RpY2soaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsIGVudW0gaWRsZV90eXBlIGlkbGUpCi17Ci0JdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQsIGludGVydmFsLCBqID0gY3B1X29mZnNldCh0aGlzX2NwdSk7Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CisJdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQ7CiAJaW50IGksIHNjYWxlOwogCiAJdGhpc19sb2FkID0gdGhpc19ycS0+cmF3X3dlaWdodGVkX2xvYWQ7CkBAIC0yODY1LDYgKzI5MDYsMzIgQEAKIAkJCW5ld19sb2FkICs9IHNjYWxlLTE7CiAJCXRoaXNfcnEtPmNwdV9sb2FkW2ldID0gKG9sZF9sb2FkKihzY2FsZS0xKSArIG5ld19sb2FkKSAvIHNjYWxlOwogCX0KK30KKworLyoKKyAqIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyBpcyB0cmlnZ2VyZWQgd2hlbiBuZWVkZWQgZnJvbSB0aGUgc2NoZWR1bGVyIHRpY2suCisgKgorICogSXQgY2hlY2tzIGVhY2ggc2NoZWR1bGluZyBkb21haW4gdG8gc2VlIGlmIGl0IGlzIGR1ZSB0byBiZSBiYWxhbmNlZCwKKyAqIGFuZCBpbml0aWF0ZXMgYSBiYWxhbmNpbmcgb3BlcmF0aW9uIGlmIHNvLgorICoKKyAqIEJhbGFuY2luZyBwYXJhbWV0ZXJzIGFyZSBzZXQgdXAgaW4gYXJjaF9pbml0X3NjaGVkX2RvbWFpbnMuCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmFsYW5jaW5nKTsKKworc3RhdGljIHZvaWQgcnVuX3JlYmFsYW5jZV9kb21haW5zKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCkKK3sKKwlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCksIGJhbGFuY2UgPSAxOworCXN0cnVjdCBycSAqdGhpc19ycSA9IGNwdV9ycSh0aGlzX2NwdSk7CisJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKwkvKgorCSAqIFdlIGFyZSBpZGxlIGlmIHRoZXJlIGFyZSBubyBwcm9jZXNzZXMgcnVubmluZy4gVGhpcworCSAqIGlzIHZhbGlkIGV2ZW4gaWYgd2UgYXJlIHRoZSBpZGxlIHByb2Nlc3MgKFNNVCkuCisJICovCisJZW51bSBpZGxlX3R5cGUgaWRsZSA9ICF0aGlzX3JxLT5ucl9ydW5uaW5nID8KKwkJCQlTQ0hFRF9JRExFIDogTk9UX0lETEU7CisJLyogRWFybGllc3QgdGltZSB3aGVuIHdlIGhhdmUgdG8gY2FsbCBydW5fcmViYWxhbmNlX2RvbWFpbnMgYWdhaW4gKi8KKwl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyA2MCpIWjsKIAogCWZvcl9lYWNoX2RvbWFpbih0aGlzX2NwdSwgc2QpIHsKIAkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKQEAgLTI4NzksOCArMjk0NiwxMyBAQAogCQlpZiAodW5saWtlbHkoIWludGVydmFsKSkKIAkJCWludGVydmFsID0gMTsKIAotCQlpZiAoaiAtIHNkLT5sYXN0X2JhbGFuY2UgPj0gaW50ZXJ2YWwpIHsKLQkJCWlmIChsb2FkX2JhbGFuY2UodGhpc19jcHUsIHRoaXNfcnEsIHNkLCBpZGxlKSkgeworCQlpZiAoc2QtPmZsYWdzICYgU0RfU0VSSUFMSVpFKSB7CisJCQlpZiAoIXNwaW5fdHJ5bG9jaygmYmFsYW5jaW5nKSkKKwkJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpIHsKKwkJCWlmIChsb2FkX2JhbGFuY2UodGhpc19jcHUsIHRoaXNfcnEsIHNkLCBpZGxlLCAmYmFsYW5jZSkpIHsKIAkJCQkvKgogCQkJCSAqIFdlJ3ZlIHB1bGxlZCB0YXNrcyBvdmVyIHNvIGVpdGhlciB3ZSdyZSBubwogCQkJCSAqIGxvbmdlciBpZGxlLCBvciBvbmUgb2Ygb3VyIFNNVCBzaWJsaW5ncyBpcwpAQCAtMjg4OCwzOSArMjk2MCw0OCBAQAogCQkJCSAqLwogCQkJCWlkbGUgPSBOT1RfSURMRTsKIAkJCX0KLQkJCXNkLT5sYXN0X2JhbGFuY2UgKz0gaW50ZXJ2YWw7CisJCQlzZC0+bGFzdF9iYWxhbmNlID0gamlmZmllczsKIAkJfQorCQlpZiAoc2QtPmZsYWdzICYgU0RfU0VSSUFMSVpFKQorCQkJc3Bpbl91bmxvY2soJmJhbGFuY2luZyk7CitvdXQ6CisJCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkKKwkJCW5leHRfYmFsYW5jZSA9IHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbDsKKworCQkvKgorCQkgKiBTdG9wIHRoZSBsb2FkIGJhbGFuY2UgYXQgdGhpcyBsZXZlbC4gVGhlcmUgaXMgYW5vdGhlcgorCQkgKiBDUFUgaW4gb3VyIHNjaGVkIGdyb3VwIHdoaWNoIGlzIGRvaW5nIGxvYWQgYmFsYW5jaW5nIG1vcmUKKwkJICogYWN0aXZlbHkuCisJCSAqLworCQlpZiAoIWJhbGFuY2UpCisJCQlicmVhazsKIAl9CisJdGhpc19ycS0+bmV4dF9iYWxhbmNlID0gbmV4dF9iYWxhbmNlOwogfQogI2Vsc2UKIC8qCiAgKiBvbiBVUCB3ZSBkbyBub3QgbmVlZCB0byBiYWxhbmNlIGJldHdlZW4gQ1BVczoKICAqLwotc3RhdGljIGlubGluZSB2b2lkIHJlYmFsYW5jZV90aWNrKGludCBjcHUsIHN0cnVjdCBycSAqcnEsIGVudW0gaWRsZV90eXBlIGlkbGUpCi17Ci19CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRsZV9iYWxhbmNlKGludCBjcHUsIHN0cnVjdCBycSAqcnEpCiB7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBpbnQgd2FrZV9wcmlvcml0eV9zbGVlcGVyKHN0cnVjdCBycSAqcnEpCitzdGF0aWMgaW5saW5lIHZvaWQgd2FrZV9wcmlvcml0eV9zbGVlcGVyKHN0cnVjdCBycSAqcnEpCiB7Ci0JaW50IHJldCA9IDA7Ci0KICNpZmRlZiBDT05GSUdfU0NIRURfU01UCisJaWYgKCFycS0+bnJfcnVubmluZykKKwkJcmV0dXJuOworCiAJc3Bpbl9sb2NrKCZycS0+bG9jayk7CiAJLyoKIAkgKiBJZiBhbiBTTVQgc2libGluZyB0YXNrIGhhcyBiZWVuIHB1dCB0byBzbGVlcCBmb3IgcHJpb3JpdHkKIAkgKiByZWFzb25zIHJlc2NoZWR1bGUgdGhlIGlkbGUgdGFzayB0byBzZWUgaWYgaXQgY2FuIG5vdyBydW4uCiAJICovCi0JaWYgKHJxLT5ucl9ydW5uaW5nKSB7CisJaWYgKHJxLT5ucl9ydW5uaW5nKQogCQlyZXNjaGVkX3Rhc2socnEtPmlkbGUpOwotCQlyZXQgPSAxOwotCX0KIAlzcGluX3VubG9jaygmcnEtPmxvY2spOwogI2VuZGlmCi0JcmV0dXJuIHJldDsKIH0KIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGtlcm5lbF9zdGF0LCBrc3RhdCk7CkBAIC0yOTM0LDcgKzMwMTUsOCBAQAogc3RhdGljIGlubGluZSB2b2lkCiB1cGRhdGVfY3B1X2Nsb2NrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSwgdW5zaWduZWQgbG9uZyBsb25nIG5vdykKIHsKLQlwLT5zY2hlZF90aW1lICs9IG5vdyAtIG1heChwLT50aW1lc3RhbXAsIHJxLT50aW1lc3RhbXBfbGFzdF90aWNrKTsKKwlwLT5zY2hlZF90aW1lICs9IG5vdyAtIHAtPmxhc3RfcmFuOworCXAtPmxhc3RfcmFuID0gcnEtPm1vc3RfcmVjZW50X3RpbWVzdGFtcCA9IG5vdzsKIH0KIAogLyoKQEAgLTI5NDcsOCArMzAyOSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlucyA9IG1heChwLT50aW1lc3RhbXAsIHRhc2tfcnEocCktPnRpbWVzdGFtcF9sYXN0X3RpY2spOwotCW5zID0gcC0+c2NoZWRfdGltZSArIHNjaGVkX2Nsb2NrKCkgLSBuczsKKwlucyA9IHAtPnNjaGVkX3RpbWUgKyBzY2hlZF9jbG9jaygpIC0gcC0+bGFzdF9yYW47CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIG5zOwpAQCAtMzA0OCwzNSArMzEyOSwxMiBAQAogCQljcHVzdGF0LT5zdGVhbCA9IGNwdXRpbWU2NF9hZGQoY3B1c3RhdC0+c3RlYWwsIHRtcCk7CiB9CiAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IHRoZSB0aW1lciBjb2RlLCB3aXRoIEhaIGZyZXF1ZW5jeS4KLSAqIFdlIGNhbGwgaXQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICoKLSAqIEl0IGFsc28gZ2V0cyBjYWxsZWQgYnkgdGhlIGZvcmsgY29kZSwgd2hlbiBjaGFuZ2luZyB0aGUgcGFyZW50J3MKLSAqIHRpbWVzbGljZXMuCi0gKi8KLXZvaWQgc2NoZWR1bGVyX3RpY2sodm9pZCkKK3N0YXRpYyB2b2lkIHRhc2tfcnVubmluZ190aWNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbm93ID0gc2NoZWRfY2xvY2soKTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50OwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwotCi0JdXBkYXRlX2NwdV9jbG9jayhwLCBycSwgbm93KTsKLQotCXJxLT50aW1lc3RhbXBfbGFzdF90aWNrID0gbm93OwotCi0JaWYgKHAgPT0gcnEtPmlkbGUpIHsKLQkJaWYgKHdha2VfcHJpb3JpdHlfc2xlZXBlcihycSkpCi0JCQlnb3RvIG91dDsKLQkJcmViYWxhbmNlX3RpY2soY3B1LCBycSwgU0NIRURfSURMRSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBUYXNrIG1pZ2h0IGhhdmUgZXhwaXJlZCBhbHJlYWR5LCBidXQgbm90IHNjaGVkdWxlZCBvZmYgeWV0ICovCiAJaWYgKHAtPmFycmF5ICE9IHJxLT5hY3RpdmUpIHsKKwkJLyogVGFzayBoYXMgZXhwaXJlZCBidXQgd2FzIG5vdCBzY2hlZHVsZWQgeWV0ICovCiAJCXNldF90c2tfbmVlZF9yZXNjaGVkKHApOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCX0KIAlzcGluX2xvY2soJnJxLT5sb2NrKTsKIAkvKgpAQCAtMzE0NCw4ICszMjAyLDM0IEBACiAJfQogb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmcnEtPmxvY2spOwotb3V0OgotCXJlYmFsYW5jZV90aWNrKGNwdSwgcnEsIE5PVF9JRExFKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgdGhlIHRpbWVyIGNvZGUsIHdpdGggSFogZnJlcXVlbmN5LgorICogV2UgY2FsbCBpdCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICogSXQgYWxzbyBnZXRzIGNhbGxlZCBieSB0aGUgZm9yayBjb2RlLCB3aGVuIGNoYW5naW5nIHRoZSBwYXJlbnQncworICogdGltZXNsaWNlcy4KKyAqLwordm9pZCBzY2hlZHVsZXJfdGljayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBub3cgPSBzY2hlZF9jbG9jaygpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGN1cnJlbnQ7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CisKKwl1cGRhdGVfY3B1X2Nsb2NrKHAsIHJxLCBub3cpOworCisJaWYgKHAgPT0gcnEtPmlkbGUpCisJCS8qIFRhc2sgb24gdGhlIGlkbGUgcXVldWUgKi8KKwkJd2FrZV9wcmlvcml0eV9zbGVlcGVyKHJxKTsKKwllbHNlCisJCXRhc2tfcnVubmluZ190aWNrKHJxLCBwKTsKKyNpZmRlZiBDT05GSUdfU01QCisJdXBkYXRlX2xvYWQocnEpOworCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJxLT5uZXh0X2JhbGFuY2UpKQorCQlyYWlzZV9zb2Z0aXJxKFNDSEVEX1NPRlRJUlEpOworI2VuZGlmCiB9CiAKICNpZmRlZiBDT05GSUdfU0NIRURfU01UCkBAIC0zMjkxLDcgKzMzNzUsOCBAQAogCS8qCiAJICogU3BpbmxvY2sgY291bnQgb3ZlcmZsb3dpbmcgc29vbj8KIAkgKi8KLQlERUJVR19MT0NLU19XQVJOX09OKChwcmVlbXB0X2NvdW50KCkgJiBQUkVFTVBUX01BU0spID49IFBSRUVNUFRfTUFTSy0xMCk7CisJREVCVUdfTE9DS1NfV0FSTl9PTigocHJlZW1wdF9jb3VudCgpICYgUFJFRU1QVF9NQVNLKSA+PQorCQkJCVBSRUVNUFRfTUFTSyAtIDEwKTsKIH0KIEVYUE9SVF9TWU1CT0woYWRkX3ByZWVtcHRfY291bnQpOwogCkBAIC0zMzQ1LDYgKzM0MzAsOCBAQAogCQkJIiVzLzB4JTA4eC8lZFxuIiwKIAkJCWN1cnJlbnQtPmNvbW0sIHByZWVtcHRfY291bnQoKSwgY3VycmVudC0+cGlkKTsKIAkJZGVidWdfc2hvd19oZWxkX2xvY2tzKGN1cnJlbnQpOworCQlpZiAoaXJxc19kaXNhYmxlZCgpKQorCQkJcHJpbnRfaXJxdHJhY2VfZXZlbnRzKGN1cnJlbnQpOwogCQlkdW1wX3N0YWNrKCk7CiAJfQogCXByb2ZpbGVfaGl0KFNDSEVEX1BST0ZJTElORywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKQEAgLTQ1MzAsMTUgKzQ2MTcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX3Jlc2NoZWRfbGVnYWwoaW50IGV4cGVjdGVkX3ByZWVtcHRfY291bnQpCi17Ci0JaWYgKHVubGlrZWx5KHByZWVtcHRfY291bnQoKSAhPSBleHBlY3RlZF9wcmVlbXB0X2NvdW50KSkKLQkJcmV0dXJuIDA7Ci0JaWYgKHVubGlrZWx5KHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORykpCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCiBzdGF0aWMgdm9pZCBfX2NvbmRfcmVzY2hlZCh2b2lkKQogewogI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUApAQCAtNDU1OCw3ICs0NjM2LDggQEAKIAogaW50IF9fc2NoZWQgY29uZF9yZXNjaGVkKHZvaWQpCiB7Ci0JaWYgKG5lZWRfcmVzY2hlZCgpICYmIF9fcmVzY2hlZF9sZWdhbCgwKSkgeworCWlmIChuZWVkX3Jlc2NoZWQoKSAmJiAhKHByZWVtcHRfY291bnQoKSAmIFBSRUVNUFRfQUNUSVZFKSAmJgorCQkJCQlzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcpIHsKIAkJX19jb25kX3Jlc2NoZWQoKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDU4NCw3ICs0NjYzLDcgQEAKIAkJcmV0ID0gMTsKIAkJc3Bpbl9sb2NrKGxvY2spOwogCX0KLQlpZiAobmVlZF9yZXNjaGVkKCkgJiYgX19yZXNjaGVkX2xlZ2FsKDEpKSB7CisJaWYgKG5lZWRfcmVzY2hlZCgpICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykgewogCQlzcGluX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9USElTX0lQXyk7CiAJCV9yYXdfc3Bpbl91bmxvY2sobG9jayk7CiAJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKQEAgLTQ2MDAsNyArNDY3OSw3IEBACiB7CiAJQlVHX09OKCFpbl9zb2Z0aXJxKCkpOwogCi0JaWYgKG5lZWRfcmVzY2hlZCgpICYmIF9fcmVzY2hlZF9sZWdhbCgwKSkgeworCWlmIChuZWVkX3Jlc2NoZWQoKSAmJiBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcpIHsKIAkJcmF3X2xvY2FsX2lycV9kaXNhYmxlKCk7CiAJCV9sb2NhbF9iaF9lbmFibGUoKTsKIAkJcmF3X2xvY2FsX2lycV9lbmFibGUoKTsKQEAgLTQ5OTAsOCArNTA2OSw4IEBACiAJCSAqIGFmdGVyd2FyZHMsIGFuZCBwcmV0ZW5kaW5nIGl0IHdhcyBhIGxvY2FsIGFjdGl2YXRlLgogCQkgKiBUaGlzIHdheSBpcyBjbGVhbmVyIGFuZCBsb2dpY2FsbHkgY29ycmVjdC4KIAkJICovCi0JCXAtPnRpbWVzdGFtcCA9IHAtPnRpbWVzdGFtcCAtIHJxX3NyYy0+dGltZXN0YW1wX2xhc3RfdGljawotCQkJCSsgcnFfZGVzdC0+dGltZXN0YW1wX2xhc3RfdGljazsKKwkJcC0+dGltZXN0YW1wID0gcC0+dGltZXN0YW1wIC0gcnFfc3JjLT5tb3N0X3JlY2VudF90aW1lc3RhbXAKKwkJCQkrIHJxX2Rlc3QtPm1vc3RfcmVjZW50X3RpbWVzdGFtcDsKIAkJZGVhY3RpdmF0ZV90YXNrKHAsIHJxX3NyYyk7CiAJCV9fYWN0aXZhdGVfdGFzayhwLCBycV9kZXN0KTsKIAkJaWYgKFRBU0tfUFJFRU1QVFNfQ1VSUihwLCBycV9kZXN0KSkKQEAgLTUwNjcsNyArNTE0NiwxMCBAQAogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0vKiBGaWd1cmUgb3V0IHdoZXJlIHRhc2sgb24gZGVhZCBDUFUgc2hvdWxkIGdvLCB1c2UgZm9yY2UgaWYgbmVjY2Vzc2FyeS4gKi8KKy8qCisgKiBGaWd1cmUgb3V0IHdoZXJlIHRhc2sgb24gZGVhZCBDUFUgc2hvdWxkIGdvLCB1c2UgZm9yY2UgaWYgbmVjY2Vzc2FyeS4KKyAqIE5PVEU6IGludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IHRoZSBjYWxsZXIKKyAqLwogc3RhdGljIHZvaWQgbW92ZV90YXNrX29mZl9kZWFkX2NwdShpbnQgZGVhZF9jcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTE4Nyw2ICs1MjY5LDcgQEAKIAltbWRyb3AobW0pOwogfQogCisvKiBjYWxsZWQgdW5kZXIgcnEtPmxvY2sgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzICovCiBzdGF0aWMgdm9pZCBtaWdyYXRlX2RlYWQodW5zaWduZWQgaW50IGRlYWRfY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJc3RydWN0IHJxICpycSA9IGNwdV9ycShkZWFkX2NwdSk7CkBAIC01MjAzLDEwICs1Mjg2LDExIEBACiAJICogRHJvcCBsb2NrIGFyb3VuZCBtaWdyYXRpb247IGlmIHNvbWVvbmUgZWxzZSBtb3ZlcyBpdCwKIAkgKiB0aGF0J3MgT0suICBObyB0YXNrIGNhbiBiZSBhZGRlZCB0byB0aGlzIENQVSwgc28gaXRlcmF0aW9uIGlzCiAJICogZmluZS4KKwkgKiBOT1RFOiBpbnRlcnJ1cHRzIHNob3VsZCBiZSBsZWZ0IGRpc2FibGVkICAtLWRldkAKIAkgKi8KLQlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKKwlzcGluX3VubG9jaygmcnEtPmxvY2spOwogCW1vdmVfdGFza19vZmZfZGVhZF9jcHUoZGVhZF9jcHUsIHApOwotCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKKwlzcGluX2xvY2soJnJxLT5sb2NrKTsKIAogCXB1dF90YXNrX3N0cnVjdChwKTsKIH0KQEAgLTUzNTksMTYgKzU0NDMsMTkgQEAKIAkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkgewogCQkJcHJpbnRrKCJkb2VzIG5vdCBsb2FkLWJhbGFuY2VcbiIpOwogCQkJaWYgKHNkLT5wYXJlbnQpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogIVNEX0xPQURfQkFMQU5DRSBkb21haW4gaGFzIHBhcmVudCIpOworCQkJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6ICFTRF9MT0FEX0JBTEFOQ0UgZG9tYWluIgorCQkJCQkJIiBoYXMgcGFyZW50Iik7CiAJCQlicmVhazsKIAkJfQogCiAJCXByaW50aygic3BhbiAlc1xuIiwgc3RyKTsKIAogCQlpZiAoIWNwdV9pc3NldChjcHUsIHNkLT5zcGFuKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IGRvbWFpbi0+c3BhbiBkb2VzIG5vdCBjb250YWluIENQVSVkXG4iLCBjcHUpOworCQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogZG9tYWluLT5zcGFuIGRvZXMgbm90IGNvbnRhaW4gIgorCQkJCQkiQ1BVJWRcbiIsIGNwdSk7CiAJCWlmICghY3B1X2lzc2V0KGNwdSwgZ3JvdXAtPmNwdW1hc2spKQotCQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogZG9tYWluLT5ncm91cHMgZG9lcyBub3QgY29udGFpbiBDUFUlZFxuIiwgY3B1KTsKKwkJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IGRvbWFpbi0+Z3JvdXBzIGRvZXMgbm90IGNvbnRhaW4iCisJCQkJCSIgQ1BVJWRcbiIsIGNwdSk7CiAKIAkJcHJpbnRrKEtFUk5fREVCVUcpOwogCQlmb3IgKGkgPSAwOyBpIDwgbGV2ZWwgKyAyOyBpKyspCkBAIC01MzgzLDcgKzU0NzAsOCBAQAogCiAJCQlpZiAoIWdyb3VwLT5jcHVfcG93ZXIpIHsKIAkJCQlwcmludGsoIlxuIik7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogZG9tYWluLT5jcHVfcG93ZXIgbm90IHNldFxuIik7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogZG9tYWluLT5jcHVfcG93ZXIgbm90ICIKKwkJCQkJCSJzZXRcbiIpOwogCQkJfQogCiAJCQlpZiAoIWNwdXNfd2VpZ2h0KGdyb3VwLT5jcHVtYXNrKSkgewpAQCAtNTQwNiwxNSArNTQ5NCwxNyBAQAogCQlwcmludGsoIlxuIik7CiAKIAkJaWYgKCFjcHVzX2VxdWFsKHNkLT5zcGFuLCBncm91cG1hc2spKQotCQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogZ3JvdXBzIGRvbid0IHNwYW4gZG9tYWluLT5zcGFuXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IGdyb3VwcyBkb24ndCBzcGFuICIKKwkJCQkJImRvbWFpbi0+c3BhblxuIik7CiAKIAkJbGV2ZWwrKzsKIAkJc2QgPSBzZC0+cGFyZW50OworCQlpZiAoIXNkKQorCQkJY29udGludWU7CiAKLQkJaWYgKHNkKSB7Ci0JCQlpZiAoIWNwdXNfc3Vic2V0KGdyb3VwbWFzaywgc2QtPnNwYW4pKQotCQkJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IHBhcmVudCBzcGFuIGlzIG5vdCBhIHN1cGVyc2V0IG9mIGRvbWFpbi0+c3BhblxuIik7Ci0JCX0KKwkJaWYgKCFjcHVzX3N1YnNldChncm91cG1hc2ssIHNkLT5zcGFuKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IHBhcmVudCBzcGFuIGlzIG5vdCBhIHN1cGVyc2V0ICIKKwkJCQkib2YgZG9tYWluLT5zcGFuXG4iKTsKIAogCX0gd2hpbGUgKHNkKTsKIH0KQEAgLTU1MTAsNyArNTYwMCw3IEBACiB9CiAKIC8qIGNwdXMgd2l0aCBpc29sYXRlZCBkb21haW5zICovCi1zdGF0aWMgY3B1bWFza190IF9fY3B1aW5pdGRhdGEgY3B1X2lzb2xhdGVkX21hcCA9IENQVV9NQVNLX05PTkU7CitzdGF0aWMgY3B1bWFza190IGNwdV9pc29sYXRlZF9tYXAgPSBDUFVfTUFTS19OT05FOwogCiAvKiBTZXR1cCB0aGUgbWFzayBvZiBjcHVzIGNvbmZpZ3VyZWQgZm9yIGlzb2xhdGVkIGRvbWFpbnMgKi8KIHN0YXRpYyBpbnQgX19pbml0IGlzb2xhdGVkX2NwdV9zZXR1cChjaGFyICpzdHIpCkBAIC01NTI4LDI4ICs1NjE4LDI3IEBACiBfX3NldHVwICgiaXNvbGNwdXM9IiwgaXNvbGF0ZWRfY3B1X3NldHVwKTsKIAogLyoKLSAqIGluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzIHRha2VzIGFuIGFycmF5IG9mIGdyb3VwcywgdGhlIGNwdW1hc2sgd2Ugd2lzaAotICogdG8gc3BhbiwgYW5kIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHdoaWNoIGlkZW50aWZpZXMgd2hhdCBncm91cCBhIENQVQotICogYmVsb25ncyB0by4gVGhlIHJldHVybiB2YWx1ZSBvZiBncm91cF9mbiBtdXN0IGJlIGEgdmFsaWQgaW5kZXggaW50byB0aGUKLSAqIGdyb3Vwc1tdIGFycmF5LCBhbmQgbXVzdCBiZSA+PSAwIGFuZCA8IE5SX0NQVVMgKGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlCi0gKiBrZWVwIHRyYWNrIG9mIGdyb3VwcyBjb3ZlcmVkIHdpdGggYSBjcHVtYXNrX3QpLgorICogaW5pdF9zY2hlZF9idWlsZF9ncm91cHMgdGFrZXMgdGhlIGNwdW1hc2sgd2Ugd2lzaCB0byBzcGFuLCBhbmQgYSBwb2ludGVyCisgKiB0byBhIGZ1bmN0aW9uIHdoaWNoIGlkZW50aWZpZXMgd2hhdCBncm91cChhbG9uZyB3aXRoIHNjaGVkIGdyb3VwKSBhIENQVQorICogYmVsb25ncyB0by4gVGhlIHJldHVybiB2YWx1ZSBvZiBncm91cF9mbiBtdXN0IGJlIGEgPj0gMCBhbmQgPCBOUl9DUFVTCisgKiAoZHVlIHRvIHRoZSBmYWN0IHRoYXQgd2Uga2VlcCB0cmFjayBvZiBncm91cHMgY292ZXJlZCB3aXRoIGEgY3B1bWFza190KS4KICAqCiAgKiBpbml0X3NjaGVkX2J1aWxkX2dyb3VwcyB3aWxsIGJ1aWxkIGEgY2lyY3VsYXIgbGlua2VkIGxpc3Qgb2YgdGhlIGdyb3VwcwogICogY292ZXJlZCBieSB0aGUgZ2l2ZW4gc3BhbiwgYW5kIHdpbGwgc2V0IGVhY2ggZ3JvdXAncyAtPmNwdW1hc2sgY29ycmVjdGx5LAogICogYW5kIC0+Y3B1X3Bvd2VyIHRvIDAuCiAgKi8KIHN0YXRpYyB2b2lkCi1pbml0X3NjaGVkX2J1aWxkX2dyb3VwcyhzdHJ1Y3Qgc2NoZWRfZ3JvdXAgZ3JvdXBzW10sIGNwdW1hc2tfdCBzcGFuLAotCQkJY29uc3QgY3B1bWFza190ICpjcHVfbWFwLAotCQkJaW50ICgqZ3JvdXBfZm4pKGludCBjcHUsIGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCkpCitpbml0X3NjaGVkX2J1aWxkX2dyb3VwcyhjcHVtYXNrX3Qgc3BhbiwgY29uc3QgY3B1bWFza190ICpjcHVfbWFwLAorCQkJaW50ICgqZ3JvdXBfZm4pKGludCBjcHUsIGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCwKKwkJCQkJc3RydWN0IHNjaGVkX2dyb3VwICoqc2cpKQogewogCXN0cnVjdCBzY2hlZF9ncm91cCAqZmlyc3QgPSBOVUxMLCAqbGFzdCA9IE5VTEw7CiAJY3B1bWFza190IGNvdmVyZWQgPSBDUFVfTUFTS19OT05FOwogCWludCBpOwogCiAJZm9yX2VhY2hfY3B1X21hc2soaSwgc3BhbikgewotCQlpbnQgZ3JvdXAgPSBncm91cF9mbihpLCBjcHVfbWFwKTsKLQkJc3RydWN0IHNjaGVkX2dyb3VwICpzZyA9ICZncm91cHNbZ3JvdXBdOworCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnOworCQlpbnQgZ3JvdXAgPSBncm91cF9mbihpLCBjcHVfbWFwLCAmc2cpOwogCQlpbnQgajsKIAogCQlpZiAoY3B1X2lzc2V0KGksIGNvdmVyZWQpKQpAQCAtNTU1OSw3ICs1NjQ4LDcgQEAKIAkJc2ctPmNwdV9wb3dlciA9IDA7CiAKIAkJZm9yX2VhY2hfY3B1X21hc2soaiwgc3BhbikgewotCQkJaWYgKGdyb3VwX2ZuKGosIGNwdV9tYXApICE9IGdyb3VwKQorCQkJaWYgKGdyb3VwX2ZuKGosIGNwdV9tYXAsIE5VTEwpICE9IGdyb3VwKQogCQkJCWNvbnRpbnVlOwogCiAJCQljcHVfc2V0KGosIGNvdmVyZWQpOwpAQCAtNTczMyw4ICs1ODIyLDkgQEAKICAqLwogc3RhdGljIHZvaWQgdG91Y2hfY2FjaGUodm9pZCAqX19jYWNoZSwgdW5zaWduZWQgbG9uZyBfX3NpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gX19zaXplL3NpemVvZihsb25nKSwgY2h1bmsxID0gc2l6ZS8zLAotCQkJY2h1bmsyID0gMipzaXplLzM7CisJdW5zaWduZWQgbG9uZyBzaXplID0gX19zaXplIC8gc2l6ZW9mKGxvbmcpOworCXVuc2lnbmVkIGxvbmcgY2h1bmsxID0gc2l6ZSAvIDM7CisJdW5zaWduZWQgbG9uZyBjaHVuazIgPSAyICogc2l6ZSAvIDM7CiAJdW5zaWduZWQgbG9uZyAqY2FjaGUgPSBfX2NhY2hlOwogCWludCBpOwogCkBAIC01ODQzLDExICs1OTMzLDExIEBACiAJICovCiAJbWVhc3VyZV9vbmUoY2FjaGUsIHNpemUsIGNwdTEsIGNwdTIpOwogCWZvciAoaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspCi0JCWNvc3QxICs9IG1lYXN1cmVfb25lKGNhY2hlLCBzaXplIC0gaSoxMDI0LCBjcHUxLCBjcHUyKTsKKwkJY29zdDEgKz0gbWVhc3VyZV9vbmUoY2FjaGUsIHNpemUgLSBpICogMTAyNCwgY3B1MSwgY3B1Mik7CiAKIAltZWFzdXJlX29uZShjYWNoZSwgc2l6ZSwgY3B1MiwgY3B1MSk7CiAJZm9yIChpID0gMDsgaSA8IElURVJBVElPTlM7IGkrKykKLQkJY29zdDEgKz0gbWVhc3VyZV9vbmUoY2FjaGUsIHNpemUgLSBpKjEwMjQsIGNwdTIsIGNwdTEpOworCQljb3N0MSArPSBtZWFzdXJlX29uZShjYWNoZSwgc2l6ZSAtIGkgKiAxMDI0LCBjcHUyLCBjcHUxKTsKIAogCS8qCiAJICogKFdlIG1lYXN1cmUgdGhlIG5vbi1taWdyYXRpbmcgW2NhY2hlZF0gY29zdCBvbiBib3RoCkBAIC01ODU3LDE3ICs1OTQ3LDE3IEBACiAKIAltZWFzdXJlX29uZShjYWNoZSwgc2l6ZSwgY3B1MSwgY3B1MSk7CiAJZm9yIChpID0gMDsgaSA8IElURVJBVElPTlM7IGkrKykKLQkJY29zdDIgKz0gbWVhc3VyZV9vbmUoY2FjaGUsIHNpemUgLSBpKjEwMjQsIGNwdTEsIGNwdTEpOworCQljb3N0MiArPSBtZWFzdXJlX29uZShjYWNoZSwgc2l6ZSAtIGkgKiAxMDI0LCBjcHUxLCBjcHUxKTsKIAogCW1lYXN1cmVfb25lKGNhY2hlLCBzaXplLCBjcHUyLCBjcHUyKTsKIAlmb3IgKGkgPSAwOyBpIDwgSVRFUkFUSU9OUzsgaSsrKQotCQljb3N0MiArPSBtZWFzdXJlX29uZShjYWNoZSwgc2l6ZSAtIGkqMTAyNCwgY3B1MiwgY3B1Mik7CisJCWNvc3QyICs9IG1lYXN1cmVfb25lKGNhY2hlLCBzaXplIC0gaSAqIDEwMjQsIGNwdTIsIGNwdTIpOwogCiAJLyoKIAkgKiBHZXQgdGhlIHBlci1pdGVyYXRpb24gbWlncmF0aW9uIGNvc3Q6CiAJICovCi0JZG9fZGl2KGNvc3QxLCAyKklURVJBVElPTlMpOwotCWRvX2Rpdihjb3N0MiwgMipJVEVSQVRJT05TKTsKKwlkb19kaXYoY29zdDEsIDIgKiBJVEVSQVRJT05TKTsKKwlkb19kaXYoY29zdDIsIDIgKiBJVEVSQVRJT05TKTsKIAogCXJldHVybiBjb3N0MSAtIGNvc3QyOwogfQpAQCAtNTkwNSw3ICs1OTk1LDcgQEAKIAkgKi8KIAljYWNoZSA9IHZtYWxsb2MobWF4X3NpemUpOwogCWlmICghY2FjaGUpIHsKLQkJcHJpbnRrKCJjb3VsZCBub3Qgdm1hbGxvYyAlZCBieXRlcyBmb3IgY2FjaGUhXG4iLCAyKm1heF9zaXplKTsKKwkJcHJpbnRrKCJjb3VsZCBub3Qgdm1hbGxvYyAlZCBieXRlcyBmb3IgY2FjaGUhXG4iLCAyICogbWF4X3NpemUpOwogCQlyZXR1cm4gMTAwMDAwMDsgLyogcmV0dXJuIDEgbXNlYyBvbiB2ZXJ5IHNtYWxsIGJveGVuICovCiAJfQogCkBAIC01OTMwLDcgKzYwMjAsOCBAQAogCQlhdmdfZmx1Y3QgPSAoYXZnX2ZsdWN0ICsgZmx1Y3QpLzI7CiAKIAkJaWYgKG1pZ3JhdGlvbl9kZWJ1ZykKLQkJCXByaW50aygiLT4gWyVkXVslZF1bJTdkXSAlM2xkLiVsZCBbJTNsZC4lbGRdICglbGQpOiAoJThMZCAlOExkKVxuIiwKKwkJCXByaW50aygiLT4gWyVkXVslZF1bJTdkXSAlM2xkLiVsZCBbJTNsZC4lbGRdICglbGQpOiAiCisJCQkJIiglOExkICU4TGQpXG4iLAogCQkJCWNwdTEsIGNwdTIsIHNpemUsCiAJCQkJKGxvbmcpY29zdCAvIDEwMDAwMDAsCiAJCQkJKChsb25nKWNvc3QgLyAxMDAwMDApICUgMTAsCkBAIC02MDI1LDIwICs2MTE2LDE4IEBACiAJCQktMQogI2VuZGlmCiAJCSk7Ci0JaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykgewotCQlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKSB7Ci0JCQlwcmludGsoIm1pZ3JhdGlvbl9jb3N0PSIpOwotCQkJZm9yIChkaXN0YW5jZSA9IDA7IGRpc3RhbmNlIDw9IG1heF9kaXN0YW5jZTsgZGlzdGFuY2UrKykgewotCQkJCWlmIChkaXN0YW5jZSkKLQkJCQkJcHJpbnRrKCIsIik7Ci0JCQkJcHJpbnRrKCIlbGQiLCAobG9uZyltaWdyYXRpb25fY29zdFtkaXN0YW5jZV0gLyAxMDAwKTsKLQkJCX0KLQkJCXByaW50aygiXG4iKTsKKwlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HICYmIG51bV9vbmxpbmVfY3B1cygpID4gMSkgeworCQlwcmludGsoIm1pZ3JhdGlvbl9jb3N0PSIpOworCQlmb3IgKGRpc3RhbmNlID0gMDsgZGlzdGFuY2UgPD0gbWF4X2Rpc3RhbmNlOyBkaXN0YW5jZSsrKSB7CisJCQlpZiAoZGlzdGFuY2UpCisJCQkJcHJpbnRrKCIsIik7CisJCQlwcmludGsoIiVsZCIsIChsb25nKW1pZ3JhdGlvbl9jb3N0W2Rpc3RhbmNlXSAvIDEwMDApOwogCQl9CisJCXByaW50aygiXG4iKTsKIAl9CiAJajEgPSBqaWZmaWVzOwogCWlmIChtaWdyYXRpb25fZGVidWcpCi0JCXByaW50aygibWlncmF0aW9uOiAlbGQgc2Vjb25kc1xuIiwgKGoxLWowKS9IWik7CisJCXByaW50aygibWlncmF0aW9uOiAlbGQgc2Vjb25kc1xuIiwgKGoxLWowKSAvIEhaKTsKIAogCS8qCiAJICogTW92ZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCBDUFUuIE5VTUEtUSBnZXRzIGNvbmZ1c2VkCkBAIC02MTM1LDEwICs2MjI0LDEzIEBACiAgKi8KICNpZmRlZiBDT05GSUdfU0NIRURfU01UCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjaGVkX2RvbWFpbiwgY3B1X2RvbWFpbnMpOwotc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCBzY2hlZF9ncm91cF9jcHVzW05SX0NQVVNdOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9ncm91cCwgc2NoZWRfZ3JvdXBfY3B1cyk7CiAKLXN0YXRpYyBpbnQgY3B1X3RvX2NwdV9ncm91cChpbnQgY3B1LCBjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXApCitzdGF0aWMgaW50IGNwdV90b19jcHVfZ3JvdXAoaW50IGNwdSwgY29uc3QgY3B1bWFza190ICpjcHVfbWFwLAorCQkJICAgIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnKQogeworCWlmIChzZykKKwkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBfY3B1cywgY3B1KTsKIAlyZXR1cm4gY3B1OwogfQogI2VuZGlmCkBAIC02MTQ4LDM5ICs2MjQwLDUyIEBACiAgKi8KICNpZmRlZiBDT05GSUdfU0NIRURfTUMKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2NoZWRfZG9tYWluLCBjb3JlX2RvbWFpbnMpOwotc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCBzY2hlZF9ncm91cF9jb3JlW05SX0NQVVNdOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9ncm91cCwgc2NoZWRfZ3JvdXBfY29yZSk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSAmJiBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi1zdGF0aWMgaW50IGNwdV90b19jb3JlX2dyb3VwKGludCBjcHUsIGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCkKK3N0YXRpYyBpbnQgY3B1X3RvX2NvcmVfZ3JvdXAoaW50IGNwdSwgY29uc3QgY3B1bWFza190ICpjcHVfbWFwLAorCQkJICAgICBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZykKIHsKKwlpbnQgZ3JvdXA7CiAJY3B1bWFza190IG1hc2sgPSBjcHVfc2libGluZ19tYXBbY3B1XTsKIAljcHVzX2FuZChtYXNrLCBtYXNrLCAqY3B1X21hcCk7Ci0JcmV0dXJuIGZpcnN0X2NwdShtYXNrKTsKKwlncm91cCA9IGZpcnN0X2NwdShtYXNrKTsKKwlpZiAoc2cpCisJCSpzZyA9ICZwZXJfY3B1KHNjaGVkX2dyb3VwX2NvcmUsIGdyb3VwKTsKKwlyZXR1cm4gZ3JvdXA7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykKLXN0YXRpYyBpbnQgY3B1X3RvX2NvcmVfZ3JvdXAoaW50IGNwdSwgY29uc3QgY3B1bWFza190ICpjcHVfbWFwKQorc3RhdGljIGludCBjcHVfdG9fY29yZV9ncm91cChpbnQgY3B1LCBjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXAsCisJCQkgICAgIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnKQogeworCWlmIChzZykKKwkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBfY29yZSwgY3B1KTsKIAlyZXR1cm4gY3B1OwogfQogI2VuZGlmCiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2NoZWRfZG9tYWluLCBwaHlzX2RvbWFpbnMpOwotc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCBzY2hlZF9ncm91cF9waHlzW05SX0NQVVNdOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9ncm91cCwgc2NoZWRfZ3JvdXBfcGh5cyk7CiAKLXN0YXRpYyBpbnQgY3B1X3RvX3BoeXNfZ3JvdXAoaW50IGNwdSwgY29uc3QgY3B1bWFza190ICpjcHVfbWFwKQorc3RhdGljIGludCBjcHVfdG9fcGh5c19ncm91cChpbnQgY3B1LCBjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXAsCisJCQkgICAgIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnKQogeworCWludCBncm91cDsKICNpZmRlZiBDT05GSUdfU0NIRURfTUMKIAljcHVtYXNrX3QgbWFzayA9IGNwdV9jb3JlZ3JvdXBfbWFwKGNwdSk7CiAJY3B1c19hbmQobWFzaywgbWFzaywgKmNwdV9tYXApOwotCXJldHVybiBmaXJzdF9jcHUobWFzayk7CisJZ3JvdXAgPSBmaXJzdF9jcHUobWFzayk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCiAJY3B1bWFza190IG1hc2sgPSBjcHVfc2libGluZ19tYXBbY3B1XTsKIAljcHVzX2FuZChtYXNrLCBtYXNrLCAqY3B1X21hcCk7Ci0JcmV0dXJuIGZpcnN0X2NwdShtYXNrKTsKKwlncm91cCA9IGZpcnN0X2NwdShtYXNrKTsKICNlbHNlCi0JcmV0dXJuIGNwdTsKKwlncm91cCA9IGNwdTsKICNlbmRpZgorCWlmIChzZykKKwkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBfcGh5cywgZ3JvdXApOworCXJldHVybiBncm91cDsKIH0KIAogI2lmZGVmIENPTkZJR19OVU1BCkBAIC02MTkzLDEyICs2Mjk4LDIyIEBACiBzdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICoqc2NoZWRfZ3JvdXBfbm9kZXNfYnljcHVbTlJfQ1BVU107CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2NoZWRfZG9tYWluLCBhbGxub2Rlc19kb21haW5zKTsKLXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNjaGVkX2dyb3VwX2FsbG5vZGVzX2J5Y3B1W05SX0NQVVNdOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9ncm91cCwgc2NoZWRfZ3JvdXBfYWxsbm9kZXMpOwogCi1zdGF0aWMgaW50IGNwdV90b19hbGxub2Rlc19ncm91cChpbnQgY3B1LCBjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXApCitzdGF0aWMgaW50IGNwdV90b19hbGxub2Rlc19ncm91cChpbnQgY3B1LCBjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXAsCisJCQkJIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnKQogewotCXJldHVybiBjcHVfdG9fbm9kZShjcHUpOworCWNwdW1hc2tfdCBub2RlbWFzayA9IG5vZGVfdG9fY3B1bWFzayhjcHVfdG9fbm9kZShjcHUpKTsKKwlpbnQgZ3JvdXA7CisKKwljcHVzX2FuZChub2RlbWFzaywgbm9kZW1hc2ssICpjcHVfbWFwKTsKKwlncm91cCA9IGZpcnN0X2NwdShub2RlbWFzayk7CisKKwlpZiAoc2cpCisJCSpzZyA9ICZwZXJfY3B1KHNjaGVkX2dyb3VwX2FsbG5vZGVzLCBncm91cCk7CisJcmV0dXJuIGdyb3VwOwogfQorCiBzdGF0aWMgdm9pZCBpbml0X251bWFfc2NoZWRfZ3JvdXBzX3Bvd2VyKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfaGVhZCkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnID0gZ3JvdXBfaGVhZDsKQEAgLTYyMzQsMTYgKzYzNDksOSBAQAogCWludCBjcHUsIGk7CiAKIAlmb3JfZWFjaF9jcHVfbWFzayhjcHUsICpjcHVfbWFwKSB7Ci0JCXN0cnVjdCBzY2hlZF9ncm91cCAqc2NoZWRfZ3JvdXBfYWxsbm9kZXMKLQkJCT0gc2NoZWRfZ3JvdXBfYWxsbm9kZXNfYnljcHVbY3B1XTsKIAkJc3RydWN0IHNjaGVkX2dyb3VwICoqc2NoZWRfZ3JvdXBfbm9kZXMKIAkJCT0gc2NoZWRfZ3JvdXBfbm9kZXNfYnljcHVbY3B1XTsKIAotCQlpZiAoc2NoZWRfZ3JvdXBfYWxsbm9kZXMpIHsKLQkJCWtmcmVlKHNjaGVkX2dyb3VwX2FsbG5vZGVzKTsKLQkJCXNjaGVkX2dyb3VwX2FsbG5vZGVzX2J5Y3B1W2NwdV0gPSBOVUxMOwotCQl9Ci0KIAkJaWYgKCFzY2hlZF9ncm91cF9ub2RlcykKIAkJCWNvbnRpbnVlOwogCkBAIC02MzM3LDcgKzY0NDUsNyBAQAogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogI2lmZGVmIENPTkZJR19OVU1BCiAJc3RydWN0IHNjaGVkX2dyb3VwICoqc2NoZWRfZ3JvdXBfbm9kZXMgPSBOVUxMOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqc2NoZWRfZ3JvdXBfYWxsbm9kZXMgPSBOVUxMOworCWludCBzZF9hbGxub2RlcyA9IDA7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBwZXItbm9kZSBsaXN0IG9mIHNjaGVkIGdyb3VwcwpAQCAtNjM1NSw3ICs2NDYzLDYgQEAKIAkgKiBTZXQgdXAgZG9tYWlucyBmb3IgY3B1cyBzcGVjaWZpZWQgYnkgdGhlIGNwdV9tYXAuCiAJICovCiAJZm9yX2VhY2hfY3B1X21hc2soaSwgKmNwdV9tYXApIHsKLQkJaW50IGdyb3VwOwogCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IE5VTEwsICpwOwogCQljcHVtYXNrX3Qgbm9kZW1hc2sgPSBub2RlX3RvX2NwdW1hc2soY3B1X3RvX25vZGUoaSkpOwogCkBAIC02MzY0LDI2ICs2NDcxLDEyIEBACiAjaWZkZWYgQ09ORklHX05VTUEKIAkJaWYgKGNwdXNfd2VpZ2h0KCpjcHVfbWFwKQogCQkJCT4gU0RfTk9ERVNfUEVSX0RPTUFJTipjcHVzX3dlaWdodChub2RlbWFzaykpIHsKLQkJCWlmICghc2NoZWRfZ3JvdXBfYWxsbm9kZXMpIHsKLQkJCQlzY2hlZF9ncm91cF9hbGxub2RlcwotCQkJCQk9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHNjaGVkX2dyb3VwKQotCQkJCQkJICAJKiBNQVhfTlVNTk9ERVMsCi0JCQkJCQkgIEdGUF9LRVJORUwsCi0JCQkJCQkgIGNwdV90b19ub2RlKGkpKTsKLQkJCQlpZiAoIXNjaGVkX2dyb3VwX2FsbG5vZGVzKSB7Ci0JCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkJIkNhbiBub3QgYWxsb2MgYWxsbm9kZXMgc2NoZWQgZ3JvdXBcbiIpOwotCQkJCQlnb3RvIGVycm9yOwotCQkJCX0KLQkJCQlzY2hlZF9ncm91cF9hbGxub2Rlc19ieWNwdVtpXQotCQkJCQkJPSBzY2hlZF9ncm91cF9hbGxub2RlczsKLQkJCX0KIAkJCXNkID0gJnBlcl9jcHUoYWxsbm9kZXNfZG9tYWlucywgaSk7CiAJCQkqc2QgPSBTRF9BTExOT0RFU19JTklUOwogCQkJc2QtPnNwYW4gPSAqY3B1X21hcDsKLQkJCWdyb3VwID0gY3B1X3RvX2FsbG5vZGVzX2dyb3VwKGksIGNwdV9tYXApOwotCQkJc2QtPmdyb3VwcyA9ICZzY2hlZF9ncm91cF9hbGxub2Rlc1tncm91cF07CisJCQljcHVfdG9fYWxsbm9kZXNfZ3JvdXAoaSwgY3B1X21hcCwgJnNkLT5ncm91cHMpOwogCQkJcCA9IHNkOworCQkJc2RfYWxsbm9kZXMgPSAxOwogCQl9IGVsc2UKIAkJCXAgPSBOVUxMOwogCkBAIC02Mzk4LDM2ICs2NDkxLDMzIEBACiAKIAkJcCA9IHNkOwogCQlzZCA9ICZwZXJfY3B1KHBoeXNfZG9tYWlucywgaSk7Ci0JCWdyb3VwID0gY3B1X3RvX3BoeXNfZ3JvdXAoaSwgY3B1X21hcCk7CiAJCSpzZCA9IFNEX0NQVV9JTklUOwogCQlzZC0+c3BhbiA9IG5vZGVtYXNrOwogCQlzZC0+cGFyZW50ID0gcDsKIAkJaWYgKHApCiAJCQlwLT5jaGlsZCA9IHNkOwotCQlzZC0+Z3JvdXBzID0gJnNjaGVkX2dyb3VwX3BoeXNbZ3JvdXBdOworCQljcHVfdG9fcGh5c19ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3Vwcyk7CiAKICNpZmRlZiBDT05GSUdfU0NIRURfTUMKIAkJcCA9IHNkOwogCQlzZCA9ICZwZXJfY3B1KGNvcmVfZG9tYWlucywgaSk7Ci0JCWdyb3VwID0gY3B1X3RvX2NvcmVfZ3JvdXAoaSwgY3B1X21hcCk7CiAJCSpzZCA9IFNEX01DX0lOSVQ7CiAJCXNkLT5zcGFuID0gY3B1X2NvcmVncm91cF9tYXAoaSk7CiAJCWNwdXNfYW5kKHNkLT5zcGFuLCBzZC0+c3BhbiwgKmNwdV9tYXApOwogCQlzZC0+cGFyZW50ID0gcDsKIAkJcC0+Y2hpbGQgPSBzZDsKLQkJc2QtPmdyb3VwcyA9ICZzY2hlZF9ncm91cF9jb3JlW2dyb3VwXTsKKwkJY3B1X3RvX2NvcmVfZ3JvdXAoaSwgY3B1X21hcCwgJnNkLT5ncm91cHMpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU0NIRURfU01UCiAJCXAgPSBzZDsKIAkJc2QgPSAmcGVyX2NwdShjcHVfZG9tYWlucywgaSk7Ci0JCWdyb3VwID0gY3B1X3RvX2NwdV9ncm91cChpLCBjcHVfbWFwKTsKIAkJKnNkID0gU0RfU0lCTElOR19JTklUOwogCQlzZC0+c3BhbiA9IGNwdV9zaWJsaW5nX21hcFtpXTsKIAkJY3B1c19hbmQoc2QtPnNwYW4sIHNkLT5zcGFuLCAqY3B1X21hcCk7CiAJCXNkLT5wYXJlbnQgPSBwOwogCQlwLT5jaGlsZCA9IHNkOwotCQlzZC0+Z3JvdXBzID0gJnNjaGVkX2dyb3VwX2NwdXNbZ3JvdXBdOworCQljcHVfdG9fY3B1X2dyb3VwKGksIGNwdV9tYXAsICZzZC0+Z3JvdXBzKTsKICNlbmRpZgogCX0KIApAQCAtNjQzOSw4ICs2NTI5LDcgQEAKIAkJaWYgKGkgIT0gZmlyc3RfY3B1KHRoaXNfc2libGluZ19tYXApKQogCQkJY29udGludWU7CiAKLQkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHMoc2NoZWRfZ3JvdXBfY3B1cywgdGhpc19zaWJsaW5nX21hcCwKLQkJCQkJY3B1X21hcCwgJmNwdV90b19jcHVfZ3JvdXApOworCQlpbml0X3NjaGVkX2J1aWxkX2dyb3Vwcyh0aGlzX3NpYmxpbmdfbWFwLCBjcHVfbWFwLCAmY3B1X3RvX2NwdV9ncm91cCk7CiAJfQogI2VuZGlmCiAKQEAgLTY0NTEsOCArNjU0MCw3IEBACiAJCWNwdXNfYW5kKHRoaXNfY29yZV9tYXAsIHRoaXNfY29yZV9tYXAsICpjcHVfbWFwKTsKIAkJaWYgKGkgIT0gZmlyc3RfY3B1KHRoaXNfY29yZV9tYXApKQogCQkJY29udGludWU7Ci0JCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKHNjaGVkX2dyb3VwX2NvcmUsIHRoaXNfY29yZV9tYXAsCi0JCQkJCWNwdV9tYXAsICZjcHVfdG9fY29yZV9ncm91cCk7CisJCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKHRoaXNfY29yZV9tYXAsIGNwdV9tYXAsICZjcHVfdG9fY29yZV9ncm91cCk7CiAJfQogI2VuZGlmCiAKQEAgLTY0NjUsMTUgKzY1NTMsMTMgQEAKIAkJaWYgKGNwdXNfZW1wdHkobm9kZW1hc2spKQogCQkJY29udGludWU7CiAKLQkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHMoc2NoZWRfZ3JvdXBfcGh5cywgbm9kZW1hc2ssCi0JCQkJCWNwdV9tYXAsICZjcHVfdG9fcGh5c19ncm91cCk7CisJCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKG5vZGVtYXNrLCBjcHVfbWFwLCAmY3B1X3RvX3BoeXNfZ3JvdXApOwogCX0KIAogI2lmZGVmIENPTkZJR19OVU1BCiAJLyogU2V0IHVwIG5vZGUgZ3JvdXBzICovCi0JaWYgKHNjaGVkX2dyb3VwX2FsbG5vZGVzKQotCQlpbml0X3NjaGVkX2J1aWxkX2dyb3VwcyhzY2hlZF9ncm91cF9hbGxub2RlcywgKmNwdV9tYXAsCi0JCQkJCWNwdV9tYXAsICZjcHVfdG9fYWxsbm9kZXNfZ3JvdXApOworCWlmIChzZF9hbGxub2RlcykKKwkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHMoKmNwdV9tYXAsIGNwdV9tYXAsICZjcHVfdG9fYWxsbm9kZXNfZ3JvdXApOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKSB7CiAJCS8qIFNldCB1cCBub2RlIGdyb3VwcyAqLwpAQCAtNjU2NSwxMCArNjY1MSwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7IGkrKykKIAkJaW5pdF9udW1hX3NjaGVkX2dyb3Vwc19wb3dlcihzY2hlZF9ncm91cF9ub2Rlc1tpXSk7CiAKLQlpZiAoc2NoZWRfZ3JvdXBfYWxsbm9kZXMpIHsKLQkJaW50IGdyb3VwID0gY3B1X3RvX2FsbG5vZGVzX2dyb3VwKGZpcnN0X2NwdSgqY3B1X21hcCksIGNwdV9tYXApOwotCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnID0gJnNjaGVkX2dyb3VwX2FsbG5vZGVzW2dyb3VwXTsKKwlpZiAoc2RfYWxsbm9kZXMpIHsKKwkJc3RydWN0IHNjaGVkX2dyb3VwICpzZzsKIAorCQljcHVfdG9fYWxsbm9kZXNfZ3JvdXAoZmlyc3RfY3B1KCpjcHVfbWFwKSwgY3B1X21hcCwgJnNnKTsKIAkJaW5pdF9udW1hX3NjaGVkX2dyb3Vwc19wb3dlcihzZyk7CiAJfQogI2VuZGlmCkBAIC02Nzc5LDcgKzY4NjUsNyBAQAogCiAJbG9ja19jcHVfaG90cGx1ZygpOwogCWFyY2hfaW5pdF9zY2hlZF9kb21haW5zKCZjcHVfb25saW5lX21hcCk7Ci0JY3B1c19hbmRub3Qobm9uX2lzb2xhdGVkX2NwdXMsIGNwdV9vbmxpbmVfbWFwLCBjcHVfaXNvbGF0ZWRfbWFwKTsKKwljcHVzX2FuZG5vdChub25faXNvbGF0ZWRfY3B1cywgY3B1X3Bvc3NpYmxlX21hcCwgY3B1X2lzb2xhdGVkX21hcCk7CiAJaWYgKGNwdXNfZW1wdHkobm9uX2lzb2xhdGVkX2NwdXMpKQogCQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbm9uX2lzb2xhdGVkX2NwdXMpOwogCXVubG9ja19jcHVfaG90cGx1ZygpOwpAQCAtNjg0Nyw2ICs2OTMzLDEwIEBACiAKIAlzZXRfbG9hZF93ZWlnaHQoJmluaXRfdGFzayk7CiAKKyNpZmRlZiBDT05GSUdfU01QCisJb3Blbl9zb2Z0aXJxKFNDSEVEX1NPRlRJUlEsIHJ1bl9yZWJhbGFuY2VfZG9tYWlucywgTlVMTCk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19SVF9NVVRFWEVTCiAJcGxpc3RfaGVhZF9pbml0KCZpbml0X3Rhc2sucGlfd2FpdGVycywgJmluaXRfdGFzay5waV9sb2NrKTsKICNlbmRpZgpAQCAtNjg4Miw2ICs2OTcyLDggQEAKIAkJcHJpbnRrKCJpbl9hdG9taWMoKTolZCwgaXJxc19kaXNhYmxlZCgpOiVkXG4iLAogCQkJaW5fYXRvbWljKCksIGlycXNfZGlzYWJsZWQoKSk7CiAJCWRlYnVnX3Nob3dfaGVsZF9sb2NrcyhjdXJyZW50KTsKKwkJaWYgKGlycXNfZGlzYWJsZWQoKSkKKwkJCXByaW50X2lycXRyYWNlX2V2ZW50cyhjdXJyZW50KTsKIAkJZHVtcF9zdGFjaygpOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IGVjODFkZWYuLjU2MzAyNTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CisKICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KQEAgLTU4Myw3ICs1ODYsNyBAQAogCWVycm9yID0gLUVQRVJNOwogCWlmICgoaW5mbyA9PSBTRU5EX1NJR19OT0lORk8gfHwgKCFpc19zaV9zcGVjaWFsKGluZm8pICYmIFNJX0ZST01VU0VSKGluZm8pKSkKIAkgICAgJiYgKChzaWcgIT0gU0lHQ09OVCkgfHwKLQkJKGN1cnJlbnQtPnNpZ25hbC0+c2Vzc2lvbiAhPSB0LT5zaWduYWwtPnNlc3Npb24pKQorCQkocHJvY2Vzc19zZXNzaW9uKGN1cnJlbnQpICE9IHByb2Nlc3Nfc2Vzc2lvbih0KSkpCiAJICAgICYmIChjdXJyZW50LT5ldWlkIF4gdC0+c3VpZCkgJiYgKGN1cnJlbnQtPmV1aWQgXiB0LT51aWQpCiAJICAgICYmIChjdXJyZW50LT51aWQgXiB0LT5zdWlkKSAmJiAoY3VycmVudC0+dWlkIF4gdC0+dWlkKQogCSAgICAmJiAhY2FwYWJsZShDQVBfS0lMTCkpCkBAIC0xNzAyLDcgKzE3MDUsOSBAQAogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJfQogCi0Jc2NoZWR1bGUoKTsKKwlkbyB7CisJCXNjaGVkdWxlKCk7CisJfSB3aGlsZSAodHJ5X3RvX2ZyZWV6ZSgpKTsKIAkvKgogCSAqIE5vdyB3ZSBkb24ndCBydW4gYWdhaW4gdW50aWwgY29udGludWVkLgogCSAqLwpAQCAtMTg3Nyw4ICsxODgyLDEyIEBACiAJCWlmIChzaWdfa2VybmVsX2lnbm9yZShzaWducikpIC8qIERlZmF1bHQgaXMgbm90aGluZy4gKi8KIAkJCWNvbnRpbnVlOwogCi0JCS8qIEluaXQgZ2V0cyBubyBzaWduYWxzIGl0IGRvZXNuJ3Qgd2FudC4gICovCi0JCWlmIChjdXJyZW50ID09IGNoaWxkX3JlYXBlcikKKwkJLyoKKwkJICogSW5pdCBvZiBhIHBpZCBzcGFjZSBnZXRzIG5vIHNpZ25hbHMgaXQgZG9lc24ndCB3YW50IGZyb20KKwkJICogd2l0aGluIHRoYXQgcGlkIHNwYWNlLiBJdCBjYW4gb2YgY291cnNlIGdldCBzaWduYWxzIGZyb20KKwkJICogaXRzIHBhcmVudCBwaWQgc3BhY2UuCisJCSAqLworCQlpZiAoY3VycmVudCA9PSBjaGlsZF9yZWFwZXIoY3VycmVudCkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoc2lnX2tlcm5lbF9zdG9wKHNpZ25yKSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IGEwYzFhMjkuLjZlMjEwMWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTMyMywxMSArMzIzLDE4IEBACiBpbnQgYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCAqbmgsCiAJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQogewotCWludCByZXQ7CisJaW50IHJldCA9IE5PVElGWV9ET05FOwogCi0JZG93bl9yZWFkKCZuaC0+cndzZW0pOwotCXJldCA9IG5vdGlmaWVyX2NhbGxfY2hhaW4oJm5oLT5oZWFkLCB2YWwsIHYpOwotCXVwX3JlYWQoJm5oLT5yd3NlbSk7CisJLyoKKwkgKiBXZSBjaGVjayB0aGUgaGVhZCBvdXRzaWRlIHRoZSBsb2NrLCBidXQgaWYgdGhpcyBhY2Nlc3MgaXMKKwkgKiByYWN5IHRoZW4gaXQgZG9lcyBub3QgbWF0dGVyIHdoYXQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdAorCSAqIGlzLCB3ZSByZS1jaGVjayB0aGUgbGlzdCBhZnRlciBoYXZpbmcgdGFrZW4gdGhlIGxvY2sgYW55d2F5OgorCSAqLworCWlmIChyY3VfZGVyZWZlcmVuY2UobmgtPmhlYWQpKSB7CisJCWRvd25fcmVhZCgmbmgtPnJ3c2VtKTsKKwkJcmV0ID0gbm90aWZpZXJfY2FsbF9jaGFpbigmbmgtPmhlYWQsIHZhbCwgdik7CisJCXVwX3JlYWQoJm5oLT5yd3NlbSk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEzODEsNyArMTM4OCw3IEBACiAKIAlpZiAocC0+cmVhbF9wYXJlbnQgPT0gZ3JvdXBfbGVhZGVyKSB7CiAJCWVyciA9IC1FUEVSTTsKLQkJaWYgKHAtPnNpZ25hbC0+c2Vzc2lvbiAhPSBncm91cF9sZWFkZXItPnNpZ25hbC0+c2Vzc2lvbikKKwkJaWYgKHByb2Nlc3Nfc2Vzc2lvbihwKSAhPSBwcm9jZXNzX3Nlc3Npb24oZ3JvdXBfbGVhZGVyKSkKIAkJCWdvdG8gb3V0OwogCQllcnIgPSAtRUFDQ0VTOwogCQlpZiAocC0+ZGlkX2V4ZWMpCkBAIC0xMzk3LDE2ICsxNDA0LDEzIEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKHBnaWQgIT0gcGlkKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpnID0KKwkJCWZpbmRfdGFza19ieV9waWRfdHlwZShQSURUWVBFX1BHSUQsIHBnaWQpOwogCi0JCWRvX2VhY2hfdGFza19waWQocGdpZCwgUElEVFlQRV9QR0lELCBwKSB7Ci0JCQlpZiAocC0+c2lnbmFsLT5zZXNzaW9uID09IGdyb3VwX2xlYWRlci0+c2lnbmFsLT5zZXNzaW9uKQotCQkJCWdvdG8gb2tfcGdpZDsKLQkJfSB3aGlsZV9lYWNoX3Rhc2tfcGlkKHBnaWQsIFBJRFRZUEVfUEdJRCwgcCk7Ci0JCWdvdG8gb3V0OworCQlpZiAoIWcgfHwgcHJvY2Vzc19zZXNzaW9uKGcpICE9IHByb2Nlc3Nfc2Vzc2lvbihncm91cF9sZWFkZXIpKQorCQkJZ290byBvdXQ7CiAJfQogCi1va19wZ2lkOgogCWVyciA9IHNlY3VyaXR5X3Rhc2tfc2V0cGdpZChwLCBwZ2lkKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTE0NTksNyArMTQ2Myw3IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX2dldHNpZChwaWRfdCBwaWQpCiB7CiAJaWYgKCFwaWQpCi0JCXJldHVybiBjdXJyZW50LT5zaWduYWwtPnNlc3Npb247CisJCXJldHVybiBwcm9jZXNzX3Nlc3Npb24oY3VycmVudCk7CiAJZWxzZSB7CiAJCWludCByZXR2YWw7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTE0NzEsNyArMTQ3NSw3IEBACiAJCWlmIChwKSB7CiAJCQlyZXR2YWwgPSBzZWN1cml0eV90YXNrX2dldHNpZChwKTsKIAkJCWlmICghcmV0dmFsKQotCQkJCXJldHZhbCA9IHAtPnNpZ25hbC0+c2Vzc2lvbjsKKwkJCQlyZXR2YWwgPSBwcm9jZXNzX3Nlc3Npb24ocCk7CiAJCX0KIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCQlyZXR1cm4gcmV0dmFsOwpAQCAtMTQ4NCw3ICsxNDg4LDYgQEAKIAlwaWRfdCBzZXNzaW9uOwogCWludCBlcnIgPSAtRVBFUk07CiAKLQltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCXdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAogCS8qIEZhaWwgaWYgSSBhbSBhbHJlYWR5IGEgc2Vzc2lvbiBsZWFkZXIgKi8KQEAgLTE1MDQsMTIgKzE1MDcsMTUgQEAKIAogCWdyb3VwX2xlYWRlci0+c2lnbmFsLT5sZWFkZXIgPSAxOwogCV9fc2V0X3NwZWNpYWxfcGlkcyhzZXNzaW9uLCBzZXNzaW9uKTsKKworCXNwaW5fbG9jaygmZ3JvdXBfbGVhZGVyLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlncm91cF9sZWFkZXItPnNpZ25hbC0+dHR5ID0gTlVMTDsKIAlncm91cF9sZWFkZXItPnNpZ25hbC0+dHR5X29sZF9wZ3JwID0gMDsKKwlzcGluX3VubG9jaygmZ3JvdXBfbGVhZGVyLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwogCWVyciA9IHByb2Nlc3NfZ3JvdXAoZ3JvdXBfbGVhZGVyKTsKIG91dDoKIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKLQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDhlOWYwMGYuLjYwMGIzMzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTY1LDcgKzY1LDYgQEAKIGV4dGVybiBpbnQgc3lzY3RsX292ZXJjb21taXRfcmF0aW87CiBleHRlcm4gaW50IHN5c2N0bF9wYW5pY19vbl9vb207CiBleHRlcm4gaW50IG1heF90aHJlYWRzOwotZXh0ZXJuIGludCBzeXNycV9lbmFibGVkOwogZXh0ZXJuIGludCBjb3JlX3VzZXNfcGlkOwogZXh0ZXJuIGludCBzdWlkX2R1bXBhYmxlOwogZXh0ZXJuIGNoYXIgY29yZV9wYXR0ZXJuW107CkBAIC05Miw3ICs5MSw5IEBACiBleHRlcm4gaW50IHNnX2JpZ19idWZmOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU1ZJUEMKLXN0YXRpYyBpbnQgcHJvY19kb19pcGNfc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCitzdGF0aWMgaW50IHByb2NfaXBjX2RvaW50dmVjKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCXZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKK3N0YXRpYyBpbnQgcHJvY19pcGNfZG91bG9uZ3ZlY19taW5tYXgoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOwogI2VuZGlmCiAKQEAgLTEzMSwxMiArMTMyLDIyIEBACiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwKIHN0YXRpYyBpbnQgcGFyc2VfdGFibGUoaW50IF9fdXNlciAqLCBpbnQsIHZvaWQgX191c2VyICosIHNpemVfdCBfX3VzZXIgKiwKLQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90LCBjdGxfdGFibGUgKiwgdm9pZCAqKik7CisJCXZvaWQgX191c2VyICosIHNpemVfdCwgY3RsX3RhYmxlICopOwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgcHJvY19kb191dHNfc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOwogCitzdGF0aWMgaW50IHN5c2N0bF91dHNfc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorCQkgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCisJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CisKKyNpZmRlZiBDT05GSUdfU1lTVklQQworc3RhdGljIGludCBzeXNjdGxfaXBjX2RhdGEoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCisJCSAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKKwkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BST0NfU1lTQ1RMCiBzdGF0aWMgaW50IHByb2NfZG9fY2FkX3BpZChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKQEAgLTE2Myw2ICsxNzQsNDAgQEAKIGludCBzeXNjdGxfbGVnYWN5X3ZhX2xheW91dDsKICNlbmRpZgogCitzdGF0aWMgdm9pZCAqZ2V0X3V0cyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUpCit7CisJY2hhciAqd2hpY2ggPSB0YWJsZS0+ZGF0YTsKKyNpZmRlZiBDT05GSUdfVVRTX05TCisJc3RydWN0IHV0c19uYW1lc3BhY2UgKnV0c19ucyA9IGN1cnJlbnQtPm5zcHJveHktPnV0c19uczsKKwl3aGljaCA9ICh3aGljaCAtIChjaGFyICopJmluaXRfdXRzX25zKSArIChjaGFyICopdXRzX25zOworI2VuZGlmCisJaWYgKCF3cml0ZSkKKwkJZG93bl9yZWFkKCZ1dHNfc2VtKTsKKwllbHNlCisJCWRvd25fd3JpdGUoJnV0c19zZW0pOworCXJldHVybiB3aGljaDsKK30KKworc3RhdGljIHZvaWQgcHV0X3V0cyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHZvaWQgKndoaWNoKQoreworCWlmICghd3JpdGUpCisJCXVwX3JlYWQoJnV0c19zZW0pOworCWVsc2UKKwkJdXBfd3JpdGUoJnV0c19zZW0pOworfQorCisjaWZkZWYgQ09ORklHX1NZU1ZJUEMKK3N0YXRpYyB2b2lkICpnZXRfaXBjKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSkKK3sKKwljaGFyICp3aGljaCA9IHRhYmxlLT5kYXRhOworCXN0cnVjdCBpcGNfbmFtZXNwYWNlICppcGNfbnMgPSBjdXJyZW50LT5uc3Byb3h5LT5pcGNfbnM7CisJd2hpY2ggPSAod2hpY2ggLSAoY2hhciAqKSZpbml0X2lwY19ucykgKyAoY2hhciAqKWlwY19uczsKKwlyZXR1cm4gd2hpY2g7Cit9CisjZWxzZQorI2RlZmluZSBnZXRfaXBjKFQsVykgKChUKS0+ZGF0YSkKKyNlbmRpZgorCiAvKiAvcHJvYyBkZWNsYXJhdGlvbnM6ICovCiAKICNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKQEAgLTIyOSw3ICsyNzQsNiBAQAogfTsKIAogc3RhdGljIGN0bF90YWJsZSBrZXJuX3RhYmxlW10gPSB7Ci0jaWZuZGVmIENPTkZJR19VVFNfTlMKIAl7CiAJCS5jdGxfbmFtZQk9IEtFUk5fT1NUWVBFLAogCQkucHJvY25hbWUJPSAib3N0eXBlIiwKQEAgLTIzNyw3ICsyODEsNyBAQAogCQkubWF4bGVuCQk9IHNpemVvZihpbml0X3V0c19ucy5uYW1lLnN5c25hbWUpLAogCQkubW9kZQkJPSAwNDQ0LAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9fdXRzX3N0cmluZywKLQkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9zdHJpbmcsCisJCS5zdHJhdGVneQk9ICZzeXNjdGxfdXRzX3N0cmluZywKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gS0VSTl9PU1JFTEVBU0UsCkBAIC0yNDYsNyArMjkwLDcgQEAKIAkJLm1heGxlbgkJPSBzaXplb2YoaW5pdF91dHNfbnMubmFtZS5yZWxlYXNlKSwKIAkJLm1vZGUJCT0gMDQ0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX3V0c19zdHJpbmcsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfc3RyaW5nLAorCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX3V0c19zdHJpbmcsCiAJfSwKIAl7CiAJCS5jdGxfbmFtZQk9IEtFUk5fVkVSU0lPTiwKQEAgLTI1NSw3ICsyOTksNyBAQAogCQkubWF4bGVuCQk9IHNpemVvZihpbml0X3V0c19ucy5uYW1lLnZlcnNpb24pLAogCQkubW9kZQkJPSAwNDQ0LAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9fdXRzX3N0cmluZywKLQkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9zdHJpbmcsCisJCS5zdHJhdGVneQk9ICZzeXNjdGxfdXRzX3N0cmluZywKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gS0VSTl9OT0RFTkFNRSwKQEAgLTI2NCw3ICszMDgsNyBAQAogCQkubWF4bGVuCQk9IHNpemVvZihpbml0X3V0c19ucy5uYW1lLm5vZGVuYW1lKSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX3V0c19zdHJpbmcsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfc3RyaW5nLAorCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX3V0c19zdHJpbmcsCiAJfSwKIAl7CiAJCS5jdGxfbmFtZQk9IEtFUk5fRE9NQUlOTkFNRSwKQEAgLTI3Myw1NiArMzE3LDggQEAKIAkJLm1heGxlbgkJPSBzaXplb2YoaW5pdF91dHNfbnMubmFtZS5kb21haW5uYW1lKSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX3V0c19zdHJpbmcsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfc3RyaW5nLAorCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX3V0c19zdHJpbmcsCiAJfSwKLSNlbHNlICAvKiAhQ09ORklHX1VUU19OUyAqLwotCXsKLQkJLmN0bF9uYW1lCT0gS0VSTl9PU1RZUEUsCi0JCS5wcm9jbmFtZQk9ICJvc3R5cGUiLAotCQkuZGF0YQkJPSBOVUxMLAotCQkvKiBjb3VsZCBtYXliZSB1c2UgX19ORVdfVVRTX0xFTiBoZXJlPyAqLwotCQkubWF4bGVuCQk9IEZJRUxEX1NJWkVPRihzdHJ1Y3QgbmV3X3V0c25hbWUsIHN5c25hbWUpLAotCQkubW9kZQkJPSAwNDQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9fdXRzX3N0cmluZywKLQkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9zdHJpbmcsCi0JfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IEtFUk5fT1NSRUxFQVNFLAotCQkucHJvY25hbWUJPSAib3NyZWxlYXNlIiwKLQkJLmRhdGEJCT0gTlVMTCwKLQkJLm1heGxlbgkJPSBGSUVMRF9TSVpFT0Yoc3RydWN0IG5ld191dHNuYW1lLCByZWxlYXNlKSwKLQkJLm1vZGUJCT0gMDQ0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX3V0c19zdHJpbmcsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfc3RyaW5nLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBLRVJOX1ZFUlNJT04sCi0JCS5wcm9jbmFtZQk9ICJ2ZXJzaW9uIiwKLQkJLmRhdGEJCT0gTlVMTCwKLQkJLm1heGxlbgkJPSBGSUVMRF9TSVpFT0Yoc3RydWN0IG5ld191dHNuYW1lLCB2ZXJzaW9uKSwKLQkJLm1vZGUJCT0gMDQ0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX3V0c19zdHJpbmcsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfc3RyaW5nLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBLRVJOX05PREVOQU1FLAotCQkucHJvY25hbWUJPSAiaG9zdG5hbWUiLAotCQkuZGF0YQkJPSBOVUxMLAotCQkubWF4bGVuCQk9IEZJRUxEX1NJWkVPRihzdHJ1Y3QgbmV3X3V0c25hbWUsIG5vZGVuYW1lKSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX3V0c19zdHJpbmcsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfc3RyaW5nLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBLRVJOX0RPTUFJTk5BTUUsCi0JCS5wcm9jbmFtZQk9ICJkb21haW5uYW1lIiwKLQkJLmRhdGEJCT0gTlVMTCwKLQkJLm1heGxlbgkJPSBGSUVMRF9TSVpFT0Yoc3RydWN0IG5ld191dHNuYW1lLCBkb21haW5uYW1lKSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX3V0c19zdHJpbmcsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfc3RyaW5nLAotCX0sCi0jZW5kaWYgLyogIUNPTkZJR19VVFNfTlMgKi8KIAl7CiAJCS5jdGxfbmFtZQk9IEtFUk5fUEFOSUMsCiAJCS5wcm9jbmFtZQk9ICJwYW5pYyIsCkBAIC00ODEsNjUgKzQ3Nyw3MiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gS0VSTl9TSE1NQVgsCiAJCS5wcm9jbmFtZQk9ICJzaG1tYXgiLAotCQkuZGF0YQkJPSBOVUxMLAotCQkubWF4bGVuCQk9IHNpemVvZiAoc2l6ZV90KSwKKwkJLmRhdGEJCT0gJmluaXRfaXBjX25zLnNobV9jdGxtYXgsCisJCS5tYXhsZW4JCT0gc2l6ZW9mIChpbml0X2lwY19ucy5zaG1fY3RsbWF4KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX2lwY19zdHJpbmcsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19pcGNfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5zdHJhdGVneQk9IHN5c2N0bF9pcGNfZGF0YSwKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gS0VSTl9TSE1BTEwsCiAJCS5wcm9jbmFtZQk9ICJzaG1hbGwiLAotCQkuZGF0YQkJPSBOVUxMLAotCQkubWF4bGVuCQk9IHNpemVvZiAoc2l6ZV90KSwKKwkJLmRhdGEJCT0gJmluaXRfaXBjX25zLnNobV9jdGxhbGwsCisJCS5tYXhsZW4JCT0gc2l6ZW9mIChpbml0X2lwY19ucy5zaG1fY3RsYWxsKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX2lwY19zdHJpbmcsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19pcGNfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5zdHJhdGVneQk9IHN5c2N0bF9pcGNfZGF0YSwKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gS0VSTl9TSE1NTkksCiAJCS5wcm9jbmFtZQk9ICJzaG1tbmkiLAotCQkuZGF0YQkJPSBOVUxMLAotCQkubWF4bGVuCQk9IHNpemVvZiAoaW50KSwKKwkJLmRhdGEJCT0gJmluaXRfaXBjX25zLnNobV9jdGxtbmksCisJCS5tYXhsZW4JCT0gc2l6ZW9mIChpbml0X2lwY19ucy5zaG1fY3RsbW5pKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX2lwY19zdHJpbmcsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19pcGNfZG9pbnR2ZWMsCisJCS5zdHJhdGVneQk9IHN5c2N0bF9pcGNfZGF0YSwKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gS0VSTl9NU0dNQVgsCiAJCS5wcm9jbmFtZQk9ICJtc2dtYXgiLAotCQkuZGF0YQkJPSBOVUxMLAotCQkubWF4bGVuCQk9IHNpemVvZiAoaW50KSwKKwkJLmRhdGEJCT0gJmluaXRfaXBjX25zLm1zZ19jdGxtYXgsCisJCS5tYXhsZW4JCT0gc2l6ZW9mIChpbml0X2lwY19ucy5tc2dfY3RsbWF4KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX2lwY19zdHJpbmcsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19pcGNfZG9pbnR2ZWMsCisJCS5zdHJhdGVneQk9IHN5c2N0bF9pcGNfZGF0YSwKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gS0VSTl9NU0dNTkksCiAJCS5wcm9jbmFtZQk9ICJtc2dtbmkiLAotCQkuZGF0YQkJPSBOVUxMLAotCQkubWF4bGVuCQk9IHNpemVvZiAoaW50KSwKKwkJLmRhdGEJCT0gJmluaXRfaXBjX25zLm1zZ19jdGxtbmksCisJCS5tYXhsZW4JCT0gc2l6ZW9mIChpbml0X2lwY19ucy5tc2dfY3RsbW5pKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvX2lwY19zdHJpbmcsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19pcGNfZG9pbnR2ZWMsCisJCS5zdHJhdGVneQk9IHN5c2N0bF9pcGNfZGF0YSwKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gS0VSTl9NU0dNTkIsCiAJCS5wcm9jbmFtZQk9ICAibXNnbW5iIiwKLQkJLmRhdGEJCT0gTlVMTCwKLQkJLm1heGxlbgkJPSBzaXplb2YgKGludCksCisJCS5kYXRhCQk9ICZpbml0X2lwY19ucy5tc2dfY3RsbW5iLAorCQkubWF4bGVuCQk9IHNpemVvZiAoaW5pdF9pcGNfbnMubXNnX2N0bG1uYiksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb19pcGNfc3RyaW5nLAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfaXBjX2RvaW50dmVjLAorCQkuc3RyYXRlZ3kJPSBzeXNjdGxfaXBjX2RhdGEsCiAJfSwKIAl7CiAJCS5jdGxfbmFtZQk9IEtFUk5fU0VNLAogCQkucHJvY25hbWUJPSAic2VtIiwKLQkJLmRhdGEJCT0gTlVMTCwKKwkJLmRhdGEJCT0gJmluaXRfaXBjX25zLnNlbV9jdGxzLAogCQkubWF4bGVuCQk9IDQqc2l6ZW9mIChpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9faXBjX3N0cmluZywKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2lwY19kb2ludHZlYywKKwkJLnN0cmF0ZWd5CT0gc3lzY3RsX2lwY19kYXRhLAogCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKIAl7CiAJCS5jdGxfbmFtZQk9IEtFUk5fU1lTUlEsCiAJCS5wcm9jbmFtZQk9ICJzeXNycSIsCi0JCS5kYXRhCQk9ICZzeXNycV9lbmFibGVkLAorCQkuZGF0YQkJPSAmX19zeXNycV9lbmFibGVkLAogCQkubWF4bGVuCQk9IHNpemVvZiAoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLApAQCAtMTIzOSw3ICsxMjQyLDYgQEAKIAlkbyB7CiAJCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkID0KIAkJCWxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciwgY3RsX2VudHJ5KTsKLQkJdm9pZCAqY29udGV4dCA9IE5VTEw7CiAKIAkJaWYgKCF1c2VfdGFibGUoaGVhZCkpCiAJCQljb250aW51ZTsKQEAgLTEyNDcsOSArMTI0OSw3IEBACiAJCXNwaW5fdW5sb2NrKCZzeXNjdGxfbG9jayk7CiAKIAkJZXJyb3IgPSBwYXJzZV90YWJsZShuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIAotCQkJCQluZXd2YWwsIG5ld2xlbiwgaGVhZC0+Y3RsX3RhYmxlLAotCQkJCQkmY29udGV4dCk7Ci0JCWtmcmVlKGNvbnRleHQpOworCQkJCQluZXd2YWwsIG5ld2xlbiwgaGVhZC0+Y3RsX3RhYmxlKTsKIAogCQlzcGluX2xvY2soJnN5c2N0bF9sb2NrKTsKIAkJdW51c2VfdGFibGUoaGVhZCk7CkBAIC0xMzA1LDcgKzEzMDUsNyBAQAogc3RhdGljIGludCBwYXJzZV90YWJsZShpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJICAgICAgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCSAgICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLAotCQkgICAgICAgY3RsX3RhYmxlICp0YWJsZSwgdm9pZCAqKmNvbnRleHQpCisJCSAgICAgICBjdGxfdGFibGUgKnRhYmxlKQogewogCWludCBuOwogcmVwZWF0OgpAQCAtMTMyNSw3ICsxMzI1LDcgQEAKIAkJCQkJZXJyb3IgPSB0YWJsZS0+c3RyYXRlZ3koCiAJCQkJCQl0YWJsZSwgbmFtZSwgbmxlbiwKIAkJCQkJCW9sZHZhbCwgb2xkbGVucCwKLQkJCQkJCW5ld3ZhbCwgbmV3bGVuLCBjb250ZXh0KTsKKwkJCQkJCW5ld3ZhbCwgbmV3bGVuKTsKIAkJCQkJaWYgKGVycm9yKQogCQkJCQkJcmV0dXJuIGVycm9yOwogCQkJCX0KQEAgLTEzMzYsNyArMTMzNiw3IEBACiAJCQl9CiAJCQllcnJvciA9IGRvX3N5c2N0bF9zdHJhdGVneSh0YWJsZSwgbmFtZSwgbmxlbiwKIAkJCQkJCSAgIG9sZHZhbCwgb2xkbGVucCwKLQkJCQkJCSAgIG5ld3ZhbCwgbmV3bGVuLCBjb250ZXh0KTsKKwkJCQkJCSAgIG5ld3ZhbCwgbmV3bGVuKTsKIAkJCXJldHVybiBlcnJvcjsKIAkJfQogCX0KQEAgLTEzNDcsNyArMTM0Nyw3IEBACiBpbnQgZG9fc3lzY3RsX3N0cmF0ZWd5IChjdGxfdGFibGUgKnRhYmxlLCAKIAkJCWludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKLQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sIHZvaWQgKipjb250ZXh0KQorCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgb3AgPSAwLCByYzsKIAlzaXplX3QgbGVuOwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAKIAogCWlmICh0YWJsZS0+c3RyYXRlZ3kpIHsKIAkJcmMgPSB0YWJsZS0+c3RyYXRlZ3kodGFibGUsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwKLQkJCQkgICAgIG5ld3ZhbCwgbmV3bGVuLCBjb250ZXh0KTsKKwkJCQkgICAgIG5ld3ZhbCwgbmV3bGVuKTsKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKIAkJaWYgKHJjID4gMCkKQEAgLTE2MTQsNyArMTYxNCw3IEBACiAJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCWludCBvcDsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlID0gUERFKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXNpemVfdCByZXM7CiAJc3NpemVfdCBlcnJvciA9IC1FTk9URElSOwpAQCAtMTc1Myw2NiArMTc1MywxNyBAQAogICoJU3BlY2lhbCBjYXNlIG9mIGRvc3RyaW5nIGZvciB0aGUgVVRTIHN0cnVjdHVyZS4gVGhpcyBoYXMgbG9ja3MKICAqCXRvIG9ic2VydmUuIFNob3VsZCB0aGlzIGJlIGluIGtlcm5lbC9zeXMuYyA/Pz8/CiAgKi8KLSAKLSNpZm5kZWYgQ09ORklHX1VUU19OUworCiBzdGF0aWMgaW50IHByb2NfZG9fdXRzX3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewogCWludCByOwotCi0JaWYgKCF3cml0ZSkgewotCQlkb3duX3JlYWQoJnV0c19zZW0pOwotCQlyPXByb2NfZG9zdHJpbmcodGFibGUsMCxmaWxwLGJ1ZmZlcixsZW5wLCBwcG9zKTsKLQkJdXBfcmVhZCgmdXRzX3NlbSk7Ci0JfSBlbHNlIHsKLQkJZG93bl93cml0ZSgmdXRzX3NlbSk7Ci0JCXI9cHJvY19kb3N0cmluZyh0YWJsZSwxLGZpbHAsYnVmZmVyLGxlbnAsIHBwb3MpOwotCQl1cF93cml0ZSgmdXRzX3NlbSk7Ci0JfQorCXZvaWQgKndoaWNoOworCXdoaWNoID0gZ2V0X3V0cyh0YWJsZSwgd3JpdGUpOworCXIgPSBfcHJvY19kb19zdHJpbmcod2hpY2gsIHRhYmxlLT5tYXhsZW4sd3JpdGUsZmlscCxidWZmZXIsbGVucCwgcHBvcyk7CisJcHV0X3V0cyh0YWJsZSwgd3JpdGUsIHdoaWNoKTsKIAlyZXR1cm4gcjsKIH0KLSNlbHNlIC8qICFDT05GSUdfVVRTX05TICovCi1zdGF0aWMgaW50IHByb2NfZG9fdXRzX3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQotewotCWludCByOwotCXN0cnVjdCB1dHNfbmFtZXNwYWNlKiB1dHNfbnMgPSBjdXJyZW50LT5uc3Byb3h5LT51dHNfbnM7Ci0JY2hhciogd2hpY2g7Ci0KLQlzd2l0Y2ggKHRhYmxlLT5jdGxfbmFtZSkgewotCWNhc2UgS0VSTl9PU1RZUEU6Ci0JCXdoaWNoID0gdXRzX25zLT5uYW1lLnN5c25hbWU7Ci0JCWJyZWFrOwotCWNhc2UgS0VSTl9OT0RFTkFNRToKLQkJd2hpY2ggPSB1dHNfbnMtPm5hbWUubm9kZW5hbWU7Ci0JCWJyZWFrOwotCWNhc2UgS0VSTl9PU1JFTEVBU0U6Ci0JCXdoaWNoID0gdXRzX25zLT5uYW1lLnJlbGVhc2U7Ci0JCWJyZWFrOwotCWNhc2UgS0VSTl9WRVJTSU9OOgotCQl3aGljaCA9IHV0c19ucy0+bmFtZS52ZXJzaW9uOwotCQlicmVhazsKLQljYXNlIEtFUk5fRE9NQUlOTkFNRToKLQkJd2hpY2ggPSB1dHNfbnMtPm5hbWUuZG9tYWlubmFtZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICghd3JpdGUpIHsKLQkJZG93bl9yZWFkKCZ1dHNfc2VtKTsKLQkJcj1fcHJvY19kb19zdHJpbmcod2hpY2gsdGFibGUtPm1heGxlbiwwLGZpbHAsYnVmZmVyLGxlbnAsIHBwb3MpOwotCQl1cF9yZWFkKCZ1dHNfc2VtKTsKLQl9IGVsc2UgewotCQlkb3duX3dyaXRlKCZ1dHNfc2VtKTsKLQkJcj1fcHJvY19kb19zdHJpbmcod2hpY2gsdGFibGUtPm1heGxlbiwxLGZpbHAsYnVmZmVyLGxlbnAsIHBwb3MpOwotCQl1cF93cml0ZSgmdXRzX3NlbSk7Ci0JfQotIG91dDoKLQlyZXR1cm4gcjsKLX0KLSNlbmRpZiAvKiAhQ09ORklHX1VUU19OUyAqLwogCiBzdGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2ZWNfY29udihpbnQgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKmx2YWxwLAogCQkJCSBpbnQgKnZhbHAsCkBAIC0xOTc2LDkgKzE5MjcsNiBAQAogCiAjZGVmaW5lIE9QX1NFVAkwCiAjZGVmaW5lIE9QX0FORAkxCi0jZGVmaW5lIE9QX09SCTIKLSNkZWZpbmUgT1BfTUFYCTMKLSNkZWZpbmUgT1BfTUlOCTQKIAogc3RhdGljIGludCBkb19wcm9jX2RvaW50dmVjX2JzZXRfY29udihpbnQgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKmx2YWxwLAogCQkJCSAgICAgIGludCAqdmFscCwKQEAgLTE5OTAsMTMgKzE5MzgsNiBAQAogCQlzd2l0Y2gob3ApIHsKIAkJY2FzZSBPUF9TRVQ6CSp2YWxwID0gdmFsOyBicmVhazsKIAkJY2FzZSBPUF9BTkQ6CSp2YWxwICY9IHZhbDsgYnJlYWs7Ci0JCWNhc2UgT1BfT1I6CSp2YWxwIHw9IHZhbDsgYnJlYWs7Ci0JCWNhc2UgT1BfTUFYOglpZigqdmFscCA8IHZhbCkKLQkJCQkJKnZhbHAgPSB2YWw7Ci0JCQkJYnJlYWs7Ci0JCWNhc2UgT1BfTUlOOglpZigqdmFscCA+IHZhbCkKLQkJCQkqdmFscCA9IHZhbDsKLQkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCWludCB2YWwgPSAqdmFscDsKQEAgLTIzOTEsNDYgKzIzMzIsMjQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TWVNWSVBDCi1zdGF0aWMgaW50IHByb2NfZG9faXBjX3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQl2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKK3N0YXRpYyBpbnQgcHJvY19pcGNfZG9pbnR2ZWMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwl2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKLQl2b2lkICpkYXRhOwotCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpuczsKLQotCW5zID0gY3VycmVudC0+bnNwcm94eS0+aXBjX25zOwotCi0Jc3dpdGNoICh0YWJsZS0+Y3RsX25hbWUpIHsKLQljYXNlIEtFUk5fU0hNTUFYOgotCQlkYXRhID0gJm5zLT5zaG1fY3RsbWF4OwotCQlnb3RvIHByb2NfbWlubWF4OwotCWNhc2UgS0VSTl9TSE1BTEw6Ci0JCWRhdGEgPSAmbnMtPnNobV9jdGxhbGw7Ci0JCWdvdG8gcHJvY19taW5tYXg7Ci0JY2FzZSBLRVJOX1NITU1OSToKLQkJZGF0YSA9ICZucy0+c2htX2N0bG1uaTsKLQkJYnJlYWs7Ci0JY2FzZSBLRVJOX01TR01BWDoKLQkJZGF0YSA9ICZucy0+bXNnX2N0bG1heDsKLQkJYnJlYWs7Ci0JY2FzZSBLRVJOX01TR01OSToKLQkJZGF0YSA9ICZucy0+bXNnX2N0bG1uaTsKLQkJYnJlYWs7Ci0JY2FzZSBLRVJOX01TR01OQjoKLQkJZGF0YSA9ICZucy0+bXNnX2N0bG1uYjsKLQkJYnJlYWs7Ci0JY2FzZSBLRVJOX1NFTToKLQkJZGF0YSA9ICZucy0+c2VtX2N0bHM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBfX2RvX3Byb2NfZG9pbnR2ZWMoZGF0YSwgdGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsCisJdm9pZCAqd2hpY2g7CisJd2hpY2ggPSBnZXRfaXBjKHRhYmxlLCB3cml0ZSk7CisJcmV0dXJuIF9fZG9fcHJvY19kb2ludHZlYyh3aGljaCwgdGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsCiAJCQlsZW5wLCBwcG9zLCBOVUxMLCBOVUxMKTsKLXByb2NfbWlubWF4OgotCXJldHVybiBfX2RvX3Byb2NfZG91bG9uZ3ZlY19taW5tYXgoZGF0YSwgdGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsCit9CisKK3N0YXRpYyBpbnQgcHJvY19pcGNfZG91bG9uZ3ZlY19taW5tYXgoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorCXN0cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKK3sKKwl2b2lkICp3aGljaDsKKwl3aGljaCA9IGdldF9pcGModGFibGUsIHdyaXRlKTsKKwlyZXR1cm4gX19kb19wcm9jX2RvdWxvbmd2ZWNfbWlubWF4KHdoaWNoLCB0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwKIAkJCWxlbnAsIHBwb3MsIDFsLCAxbCk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgaW50IHByb2NfZG9fY2FkX3BpZChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLApAQCAtMjQ3NSw2ICsyMzk0LDE3IEBACiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CitzdGF0aWMgaW50IHByb2NfaXBjX2RvaW50dmVjKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCXZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiAtRU5PU1lTOworfQorc3RhdGljIGludCBwcm9jX2lwY19kb3Vsb25ndmVjX21pbm1heChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCisJCXN0cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYnVmZmVyLAorCQlzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KICNlbmRpZgogCiBpbnQgcHJvY19kb2ludHZlYyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLApAQCAtMjUzOSw3ICsyNDY5LDcgQEAKIC8qIFRoZSBnZW5lcmljIHN0cmluZyBzdHJhdGVneSByb3V0aW5lOiAqLwogaW50IHN5c2N0bF9zdHJpbmcoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCSAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKLQkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqY29udGV4dCkKKwkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCWlmICghdGFibGUtPmRhdGEgfHwgIXRhYmxlLT5tYXhsZW4pIAogCQlyZXR1cm4gLUVOT1RESVI7CkBAIC0yNTg1LDcgKzI1MTUsNyBAQAogICovCiBpbnQgc3lzY3RsX2ludHZlYyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKLQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwgdm9pZCAqKmNvbnRleHQpCisJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAKIAlpZiAobmV3dmFsICYmIG5ld2xlbikgewpAQCAtMjYyMSw3ICsyNTUxLDcgQEAKIC8qIFN0cmF0ZWd5IGZ1bmN0aW9uIHRvIGNvbnZlcnQgamlmZmllcyB0byBzZWNvbmRzICovIAogaW50IHN5c2N0bF9qaWZmaWVzKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqY29udGV4dCkKKwkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpZiAob2xkdmFsKSB7CiAJCXNpemVfdCBvbGVuOwpAQCAtMjY0OSw3ICsyNTc5LDcgQEAKIC8qIFN0cmF0ZWd5IGZ1bmN0aW9uIHRvIGNvbnZlcnQgamlmZmllcyB0byBzZWNvbmRzICovIAogaW50IHN5c2N0bF9tc19qaWZmaWVzKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqY29udGV4dCkKKwkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpZiAob2xkdmFsKSB7CiAJCXNpemVfdCBvbGVuOwpAQCAtMjY3NCw2ICsyNjA0LDY0IEBACiAJcmV0dXJuIDE7CiB9CiAKKworLyogVGhlIGdlbmVyaWMgc3RyaW5nIHN0cmF0ZWd5IHJvdXRpbmU6ICovCitzdGF0aWMgaW50IHN5c2N0bF91dHNfc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorCQkgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCisJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKK3sKKwlzdHJ1Y3QgY3RsX3RhYmxlIHV0c190YWJsZTsKKwlpbnQgciwgd3JpdGU7CisJd3JpdGUgPSBuZXd2YWwgJiYgbmV3bGVuOworCW1lbWNweSgmdXRzX3RhYmxlLCB0YWJsZSwgc2l6ZW9mKHV0c190YWJsZSkpOworCXV0c190YWJsZS5kYXRhID0gZ2V0X3V0cyh0YWJsZSwgd3JpdGUpOworCXIgPSBzeXNjdGxfc3RyaW5nKCZ1dHNfdGFibGUsIG5hbWUsIG5sZW4sCisJCW9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOworCXB1dF91dHModGFibGUsIHdyaXRlLCB1dHNfdGFibGUuZGF0YSk7CisJcmV0dXJuIHI7Cit9CisKKyNpZmRlZiBDT05GSUdfU1lTVklQQworLyogVGhlIGdlbmVyaWMgc3lzY3RsIGlwYyBkYXRhIHJvdXRpbmUuICovCitzdGF0aWMgaW50IHN5c2N0bF9pcGNfZGF0YShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKKwkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKKwkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKK3sKKwlzaXplX3QgbGVuOworCXZvaWQgKmRhdGE7CisKKwkvKiBHZXQgb3V0IG9mIEkgZG9uJ3QgaGF2ZSBhIHZhcmlhYmxlICovCisJaWYgKCF0YWJsZS0+ZGF0YSB8fCAhdGFibGUtPm1heGxlbikKKwkJcmV0dXJuIC1FTk9URElSOworCisJZGF0YSA9IGdldF9pcGModGFibGUsIDEpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9URElSOworCisJaWYgKG9sZHZhbCAmJiBvbGRsZW5wKSB7CisJCWlmIChnZXRfdXNlcihsZW4sIG9sZGxlbnApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChsZW4pIHsKKwkJCWlmIChsZW4gPiB0YWJsZS0+bWF4bGVuKQorCQkJCWxlbiA9IHRhYmxlLT5tYXhsZW47CisJCQlpZiAoY29weV90b191c2VyKG9sZHZhbCwgZGF0YSwgbGVuKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWlmIChwdXRfdXNlcihsZW4sIG9sZGxlbnApKQorCQkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfQorCisJaWYgKG5ld3ZhbCAmJiBuZXdsZW4pIHsKKwkJaWYgKG5ld2xlbiA+IHRhYmxlLT5tYXhsZW4pCisJCQluZXdsZW4gPSB0YWJsZS0+bWF4bGVuOworCisJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBuZXd2YWwsIG5ld2xlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKwogI2Vsc2UgLyogQ09ORklHX1NZU0NUTF9TWVNDQUxMICovCiAKIApAQCAtMjcxMiwzMiArMjcwMCw0NCBAQAogCiBpbnQgc3lzY3RsX3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sIHZvaWQgKipjb250ZXh0KQorCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKIGludCBzeXNjdGxfaW50dmVjKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqY29udGV4dCkKKwkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAogaW50IHN5c2N0bF9qaWZmaWVzKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqY29udGV4dCkKKwkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAogaW50IHN5c2N0bF9tc19qaWZmaWVzKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqY29udGV4dCkKKwkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAorc3RhdGljIGludCBzeXNjdGxfdXRzX3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKKwkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAorCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CitzdGF0aWMgaW50IHN5c2N0bF9pcGNfZGF0YShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKKwkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKKwkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IDc0ZWNhNTkuLjIyNTA0YWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJLyogY2hlY2sgaWYgY2xvY2tzb3VyY2UgaXMgYWxyZWFkeSByZWdpc3RlcmVkICovCiAJaWYgKGlzX3JlZ2lzdGVyZWRfc291cmNlKGMpKSB7CiAJCXByaW50aygicmVnaXN0ZXJfY2xvY2tzb3VyY2U6IENhbm5vdCByZWdpc3RlciAlcy4gIgotCQkJIkFscmVhZHkgcmVnaXN0ZXJlZCEiLCBjLT5uYW1lKTsKKwkJICAgICAgICJBbHJlYWR5IHJlZ2lzdGVyZWQhIiwgYy0+bmFtZSk7CiAJCXJldCA9IC1FQlVTWTsKIAl9IGVsc2UgewogCQkvKiByZWdpc3RlciBpdCAqLwpAQCAtMTg2LDYgKzE4Niw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsb2Nrc291cmNlX3Jlc2VsZWN0KTsKIAorI2lmZGVmIENPTkZJR19TWVNGUwogLyoqCiAgKiBzeXNmc19zaG93X2N1cnJlbnRfY2xvY2tzb3VyY2VzIC0gc3lzZnMgaW50ZXJmYWNlIGZvciBjdXJyZW50IGNsb2Nrc291cmNlCiAgKiBAZGV2Ogl1bnVzZWQKQEAgLTI3NSwxMCArMjc2LDEwIEBACiAgKiBTeXNmcyBzZXR1cCBiaXRzOgogICovCiBzdGF0aWMgU1lTREVWX0FUVFIoY3VycmVudF9jbG9ja3NvdXJjZSwgMDYwMCwgc3lzZnNfc2hvd19jdXJyZW50X2Nsb2Nrc291cmNlcywKLQkJCXN5c2ZzX292ZXJyaWRlX2Nsb2Nrc291cmNlKTsKKwkJICAgc3lzZnNfb3ZlcnJpZGVfY2xvY2tzb3VyY2UpOwogCiBzdGF0aWMgU1lTREVWX0FUVFIoYXZhaWxhYmxlX2Nsb2Nrc291cmNlLCAwNjAwLAotCQkJc3lzZnNfc2hvd19hdmFpbGFibGVfY2xvY2tzb3VyY2VzLCBOVUxMKTsKKwkJICAgc3lzZnNfc2hvd19hdmFpbGFibGVfY2xvY2tzb3VyY2VzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgY2xvY2tzb3VyY2Vfc3lzY2xhc3MgPSB7CiAJc2V0X2tzZXRfbmFtZSgiY2xvY2tzb3VyY2UiKSwKQEAgLTMwNyw2ICszMDgsNyBAQAogfQogCiBkZXZpY2VfaW5pdGNhbGwoaW5pdF9jbG9ja3NvdXJjZV9zeXNmcyk7CisjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCiAKIC8qKgogICogYm9vdF9vdmVycmlkZV9jbG9ja3NvdXJjZSAtIGJvb3QgY2xvY2sgb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggYzFjN2ZiYy4uYzJhOGNjZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTgwLDYgKzgwLDEzOCBAQAogRVhQT1JUX1NZTUJPTChib290X3R2ZWNfYmFzZXMpOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHR2ZWNfYmFzZV90ICosIHR2ZWNfYmFzZXMpID0gJmJvb3RfdHZlY19iYXNlczsKIAorLyoqCisgKiBfX3JvdW5kX2ppZmZpZXMgLSBmdW5jdGlvbiB0byByb3VuZCBqaWZmaWVzIHRvIGEgZnVsbCBzZWNvbmQKKyAqIEBqOiB0aGUgdGltZSBpbiAoYWJzb2x1dGUpIGppZmZpZXMgdGhhdCBzaG91bGQgYmUgcm91bmRlZAorICogQGNwdTogdGhlIHByb2Nlc3NvciBudW1iZXIgb24gd2hpY2ggdGhlIHRpbWVvdXQgd2lsbCBoYXBwZW4KKyAqCisgKiBfX3JvdW5kX2ppZmZpZXMgcm91bmRzIGFuIGFic29sdXRlIHRpbWUgaW4gdGhlIGZ1dHVyZSAoaW4gamlmZmllcykKKyAqIHVwIG9yIGRvd24gdG8gKGFwcHJveGltYXRlbHkpIGZ1bGwgc2Vjb25kcy4gVGhpcyBpcyB1c2VmdWwgZm9yIHRpbWVycworICogZm9yIHdoaWNoIHRoZSBleGFjdCB0aW1lIHRoZXkgZmlyZSBkb2VzIG5vdCBtYXR0ZXIgdG9vIG11Y2gsIGFzIGxvbmcgYXMKKyAqIHRoZXkgZmlyZSBhcHByb3hpbWF0ZWx5IGV2ZXJ5IFggc2Vjb25kcy4KKyAqCisgKiBCeSByb3VuZGluZyB0aGVzZSB0aW1lcnMgdG8gd2hvbGUgc2Vjb25kcywgYWxsIHN1Y2ggdGltZXJzIHdpbGwgZmlyZQorICogYXQgdGhlIHNhbWUgdGltZSwgcmF0aGVyIHRoYW4gYXQgdmFyaW91cyB0aW1lcyBzcHJlYWQgb3V0LiBUaGUgZ29hbAorICogb2YgdGhpcyBpcyB0byBoYXZlIHRoZSBDUFUgd2FrZSB1cCBsZXNzLCB3aGljaCBzYXZlcyBwb3dlci4KKyAqCisgKiBUaGUgZXhhY3Qgcm91bmRpbmcgaXMgc2tld2VkIGZvciBlYWNoIHByb2Nlc3NvciB0byBhdm9pZCBhbGwKKyAqIHByb2Nlc3NvcnMgZmlyaW5nIGF0IHRoZSBleGFjdCBzYW1lIHRpbWUsIHdoaWNoIGNvdWxkIGxlYWQKKyAqIHRvIGxvY2sgY29udGVudGlvbiBvciBzcHVyaW91cyBjYWNoZSBsaW5lIGJvdW5jaW5nLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJvdW5kZWQgdmVyc2lvbiBvZiB0aGUgImoiIHBhcmFtZXRlci4KKyAqLwordW5zaWduZWQgbG9uZyBfX3JvdW5kX2ppZmZpZXModW5zaWduZWQgbG9uZyBqLCBpbnQgY3B1KQoreworCWludCByZW07CisJdW5zaWduZWQgbG9uZyBvcmlnaW5hbCA9IGo7CisKKwkvKgorCSAqIFdlIGRvbid0IHdhbnQgYWxsIGNwdXMgZmlyaW5nIHRoZWlyIHRpbWVycyBhdCBvbmNlIGhpdHRpbmcgdGhlCisJICogc2FtZSBsb2NrIG9yIGNhY2hlbGluZXMsIHNvIHdlIHNrZXcgZWFjaCBleHRyYSBjcHUgd2l0aCBhbiBleHRyYQorCSAqIDMgamlmZmllcy4gVGhpcyAzIGppZmZpZXMgY2FtZSBvcmlnaW5hbGx5IGZyb20gdGhlIG1tLyBjb2RlIHdoaWNoCisJICogYWxyZWFkeSBkaWQgdGhpcy4KKwkgKiBUaGUgc2tldyBpcyBkb25lIGJ5IGFkZGluZyAzKmNwdW5yLCB0aGVuIHJvdW5kLCB0aGVuIHN1YnRyYWN0IHRoaXMKKwkgKiBleHRyYSBvZmZzZXQgYWdhaW4uCisJICovCisJaiArPSBjcHUgKiAzOworCisJcmVtID0gaiAlIEhaOworCisJLyoKKwkgKiBJZiB0aGUgdGFyZ2V0IGppZmZpZSBpcyBqdXN0IGFmdGVyIGEgd2hvbGUgc2Vjb25kICh3aGljaCBjYW4gaGFwcGVuCisJICogZHVlIHRvIGRlbGF5cyBvZiB0aGUgdGltZXIgaXJxLCBsb25nIGlycSBvZmYgdGltZXMgZXRjIGV0YykgdGhlbgorCSAqIHdlIHNob3VsZCByb3VuZCBkb3duIHRvIHRoZSB3aG9sZSBzZWNvbmQsIG5vdCB1cC4gVXNlIDEvNHRoIHNlY29uZAorCSAqIGFzIGN1dG9mZiBmb3IgdGhpcyByb3VuZGluZyBhcyBhbiBleHRyZW1lIHVwcGVyIGJvdW5kIGZvciB0aGlzLgorCSAqLworCWlmIChyZW0gPCBIWi80KSAvKiByb3VuZCBkb3duICovCisJCWogPSBqIC0gcmVtOworCWVsc2UgLyogcm91bmQgdXAgKi8KKwkJaiA9IGogLSByZW0gKyBIWjsKKworCS8qIG5vdyB0aGF0IHdlIGhhdmUgcm91bmRlZCwgc3VidHJhY3QgdGhlIGV4dHJhIHNrZXcgYWdhaW4gKi8KKwlqIC09IGNwdSAqIDM7CisKKwlpZiAoaiA8PSBqaWZmaWVzKSAvKiByb3VuZGluZyBhdGUgb3VyIHRpbWVvdXQgZW50aXJlbHk7ICovCisJCXJldHVybiBvcmlnaW5hbDsKKwlyZXR1cm4gajsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fcm91bmRfamlmZmllcyk7CisKKy8qKgorICogX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlIC0gZnVuY3Rpb24gdG8gcm91bmQgamlmZmllcyB0byBhIGZ1bGwgc2Vjb25kCisgKiBAajogdGhlIHRpbWUgaW4gKHJlbGF0aXZlKSBqaWZmaWVzIHRoYXQgc2hvdWxkIGJlIHJvdW5kZWQKKyAqIEBjcHU6IHRoZSBwcm9jZXNzb3IgbnVtYmVyIG9uIHdoaWNoIHRoZSB0aW1lb3V0IHdpbGwgaGFwcGVuCisgKgorICogX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlIHJvdW5kcyBhIHRpbWUgZGVsdGEgIGluIHRoZSBmdXR1cmUgKGluIGppZmZpZXMpCisgKiB1cCBvciBkb3duIHRvIChhcHByb3hpbWF0ZWx5KSBmdWxsIHNlY29uZHMuIFRoaXMgaXMgdXNlZnVsIGZvciB0aW1lcnMKKyAqIGZvciB3aGljaCB0aGUgZXhhY3QgdGltZSB0aGV5IGZpcmUgZG9lcyBub3QgbWF0dGVyIHRvbyBtdWNoLCBhcyBsb25nIGFzCisgKiB0aGV5IGZpcmUgYXBwcm94aW1hdGVseSBldmVyeSBYIHNlY29uZHMuCisgKgorICogQnkgcm91bmRpbmcgdGhlc2UgdGltZXJzIHRvIHdob2xlIHNlY29uZHMsIGFsbCBzdWNoIHRpbWVycyB3aWxsIGZpcmUKKyAqIGF0IHRoZSBzYW1lIHRpbWUsIHJhdGhlciB0aGFuIGF0IHZhcmlvdXMgdGltZXMgc3ByZWFkIG91dC4gVGhlIGdvYWwKKyAqIG9mIHRoaXMgaXMgdG8gaGF2ZSB0aGUgQ1BVIHdha2UgdXAgbGVzcywgd2hpY2ggc2F2ZXMgcG93ZXIuCisgKgorICogVGhlIGV4YWN0IHJvdW5kaW5nIGlzIHNrZXdlZCBmb3IgZWFjaCBwcm9jZXNzb3IgdG8gYXZvaWQgYWxsCisgKiBwcm9jZXNzb3JzIGZpcmluZyBhdCB0aGUgZXhhY3Qgc2FtZSB0aW1lLCB3aGljaCBjb3VsZCBsZWFkCisgKiB0byBsb2NrIGNvbnRlbnRpb24gb3Igc3B1cmlvdXMgY2FjaGUgbGluZSBib3VuY2luZy4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSByb3VuZGVkIHZlcnNpb24gb2YgdGhlICJqIiBwYXJhbWV0ZXIuCisgKi8KK3Vuc2lnbmVkIGxvbmcgX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlKHVuc2lnbmVkIGxvbmcgaiwgaW50IGNwdSkKK3sKKwkvKgorCSAqIEluIHRoZW9yeSB0aGUgZm9sbG93aW5nIGNvZGUgY2FuIHNraXAgYSBqaWZmeSBpbiBjYXNlIGppZmZpZXMKKwkgKiBpbmNyZW1lbnRzIHJpZ2h0IGJldHdlZW4gdGhlIGFkZGl0aW9uIGFuZCB0aGUgbGF0ZXIgc3VidHJhY3Rpb24uCisJICogSG93ZXZlciBzaW5jZSB0aGUgZW50aXJlIHBvaW50IG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gdXNlIGFwcHJveGltYXRlCisJICogdGltZW91dHMsIGl0J3MgZW50aXJlbHkgb2sgdG8gbm90IGhhbmRsZSB0aGF0LgorCSAqLworCXJldHVybiAgX19yb3VuZF9qaWZmaWVzKGogKyBqaWZmaWVzLCBjcHUpIC0gamlmZmllczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fcm91bmRfamlmZmllc19yZWxhdGl2ZSk7CisKKy8qKgorICogcm91bmRfamlmZmllcyAtIGZ1bmN0aW9uIHRvIHJvdW5kIGppZmZpZXMgdG8gYSBmdWxsIHNlY29uZAorICogQGo6IHRoZSB0aW1lIGluIChhYnNvbHV0ZSkgamlmZmllcyB0aGF0IHNob3VsZCBiZSByb3VuZGVkCisgKgorICogcm91bmRfamlmZmllcyByb3VuZHMgYW4gYWJzb2x1dGUgdGltZSBpbiB0aGUgZnV0dXJlIChpbiBqaWZmaWVzKQorICogdXAgb3IgZG93biB0byAoYXBwcm94aW1hdGVseSkgZnVsbCBzZWNvbmRzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGltZXJzCisgKiBmb3Igd2hpY2ggdGhlIGV4YWN0IHRpbWUgdGhleSBmaXJlIGRvZXMgbm90IG1hdHRlciB0b28gbXVjaCwgYXMgbG9uZyBhcworICogdGhleSBmaXJlIGFwcHJveGltYXRlbHkgZXZlcnkgWCBzZWNvbmRzLgorICoKKyAqIEJ5IHJvdW5kaW5nIHRoZXNlIHRpbWVycyB0byB3aG9sZSBzZWNvbmRzLCBhbGwgc3VjaCB0aW1lcnMgd2lsbCBmaXJlCisgKiBhdCB0aGUgc2FtZSB0aW1lLCByYXRoZXIgdGhhbiBhdCB2YXJpb3VzIHRpbWVzIHNwcmVhZCBvdXQuIFRoZSBnb2FsCisgKiBvZiB0aGlzIGlzIHRvIGhhdmUgdGhlIENQVSB3YWtlIHVwIGxlc3MsIHdoaWNoIHNhdmVzIHBvd2VyLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJvdW5kZWQgdmVyc2lvbiBvZiB0aGUgImoiIHBhcmFtZXRlci4KKyAqLwordW5zaWduZWQgbG9uZyByb3VuZF9qaWZmaWVzKHVuc2lnbmVkIGxvbmcgaikKK3sKKwlyZXR1cm4gX19yb3VuZF9qaWZmaWVzKGosIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocm91bmRfamlmZmllcyk7CisKKy8qKgorICogcm91bmRfamlmZmllc19yZWxhdGl2ZSAtIGZ1bmN0aW9uIHRvIHJvdW5kIGppZmZpZXMgdG8gYSBmdWxsIHNlY29uZAorICogQGo6IHRoZSB0aW1lIGluIChyZWxhdGl2ZSkgamlmZmllcyB0aGF0IHNob3VsZCBiZSByb3VuZGVkCisgKgorICogcm91bmRfamlmZmllc19yZWxhdGl2ZSByb3VuZHMgYSB0aW1lIGRlbHRhICBpbiB0aGUgZnV0dXJlIChpbiBqaWZmaWVzKQorICogdXAgb3IgZG93biB0byAoYXBwcm94aW1hdGVseSkgZnVsbCBzZWNvbmRzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGltZXJzCisgKiBmb3Igd2hpY2ggdGhlIGV4YWN0IHRpbWUgdGhleSBmaXJlIGRvZXMgbm90IG1hdHRlciB0b28gbXVjaCwgYXMgbG9uZyBhcworICogdGhleSBmaXJlIGFwcHJveGltYXRlbHkgZXZlcnkgWCBzZWNvbmRzLgorICoKKyAqIEJ5IHJvdW5kaW5nIHRoZXNlIHRpbWVycyB0byB3aG9sZSBzZWNvbmRzLCBhbGwgc3VjaCB0aW1lcnMgd2lsbCBmaXJlCisgKiBhdCB0aGUgc2FtZSB0aW1lLCByYXRoZXIgdGhhbiBhdCB2YXJpb3VzIHRpbWVzIHNwcmVhZCBvdXQuIFRoZSBnb2FsCisgKiBvZiB0aGlzIGlzIHRvIGhhdmUgdGhlIENQVSB3YWtlIHVwIGxlc3MsIHdoaWNoIHNhdmVzIHBvd2VyLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJvdW5kZWQgdmVyc2lvbiBvZiB0aGUgImoiIHBhcmFtZXRlci4KKyAqLwordW5zaWduZWQgbG9uZyByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKHVuc2lnbmVkIGxvbmcgaikKK3sKKwlyZXR1cm4gX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlKGosIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocm91bmRfamlmZmllc19yZWxhdGl2ZSk7CisKKwogc3RhdGljIGlubGluZSB2b2lkIHNldF9ydW5uaW5nX3RpbWVyKHR2ZWNfYmFzZV90ICpiYXNlLAogCQkJCQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCiB7CkBAIC03MTQsNyArODQ2LDcgQEAKIAkJY2xvY2sgPSBuZXc7CiAJCWNsb2NrLT5jeWNsZV9sYXN0ID0gbm93OwogCQlwcmludGsoS0VSTl9JTkZPICJUaW1lOiAlcyBjbG9ja3NvdXJjZSBoYXMgYmVlbiBpbnN0YWxsZWQuXG4iLAotCQkJCQljbG9jay0+bmFtZSk7CisJCSAgICAgICBjbG9jay0+bmFtZSk7CiAJCXJldHVybiAxOwogCX0gZWxzZSBpZiAoY2xvY2stPnVwZGF0ZV9jYWxsYmFjaykgewogCQlyZXR1cm4gY2xvY2stPnVwZGF0ZV9jYWxsYmFjaygpOwpAQCAtNzIyLDcgKzg1NCwxMCBAQAogCXJldHVybiAwOwogfQogI2Vsc2UKLSNkZWZpbmUgY2hhbmdlX2Nsb2Nrc291cmNlKCkgKDApCitzdGF0aWMgaW5saW5lIGludCBjaGFuZ2VfY2xvY2tzb3VyY2Uodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiAvKioKQEAgLTgyMCw3ICs5NTUsOCBAQAogICogSWYgdGhlIGVycm9yIGlzIGFscmVhZHkgbGFyZ2VyLCB3ZSBsb29rIGFoZWFkIGV2ZW4gZnVydGhlcgogICogdG8gY29tcGVuc2F0ZSBmb3IgbGF0ZSBvciBsb3N0IGFkanVzdG1lbnRzLgogICovCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBjbG9ja3NvdXJjZV9iaWdhZGp1c3QoczY0IGVycm9yLCBzNjQgKmludGVydmFsLCBzNjQgKm9mZnNldCkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGNsb2Nrc291cmNlX2JpZ2FkanVzdChzNjQgZXJyb3IsIHM2NCAqaW50ZXJ2YWwsCisJCQkJCQkgczY0ICpvZmZzZXQpCiB7CiAJczY0IHRpY2tfZXJyb3IsIGk7CiAJdTMyIGxvb2tfYWhlYWQsIGFkajsKQEAgLTg0NCw3ICs5ODAsOCBAQAogCSAqIE5vdyBjYWxjdWxhdGUgdGhlIGVycm9yIGluICgxIDw8IGxvb2tfYWhlYWQpIHRpY2tzLCBidXQgZmlyc3QKIAkgKiByZW1vdmUgdGhlIHNpbmdsZSBsb29rIGFoZWFkIGFscmVhZHkgaW5jbHVkZWQgaW4gdGhlIGVycm9yLgogCSAqLwotCXRpY2tfZXJyb3IgPSBjdXJyZW50X3RpY2tfbGVuZ3RoKCkgPj4gKFRJQ0tfTEVOR1RIX1NISUZUIC0gY2xvY2stPnNoaWZ0ICsgMSk7CisJdGlja19lcnJvciA9IGN1cnJlbnRfdGlja19sZW5ndGgoKSA+PgorCQkoVElDS19MRU5HVEhfU0hJRlQgLSBjbG9jay0+c2hpZnQgKyAxKTsKIAl0aWNrX2Vycm9yIC09IGNsb2NrLT54dGltZV9pbnRlcnZhbCA+PiAxOwogCWVycm9yID0gKChlcnJvciAtIHRpY2tfZXJyb3IpID4+IGxvb2tfYWhlYWQpICsgdGlja19lcnJvcjsKIApAQCAtODk2LDcgKzEwMzMsOCBAQAogCWNsb2NrLT5tdWx0ICs9IGFkajsKIAljbG9jay0+eHRpbWVfaW50ZXJ2YWwgKz0gaW50ZXJ2YWw7CiAJY2xvY2stPnh0aW1lX25zZWMgLT0gb2Zmc2V0OwotCWNsb2NrLT5lcnJvciAtPSAoaW50ZXJ2YWwgLSBvZmZzZXQpIDw8IChUSUNLX0xFTkdUSF9TSElGVCAtIGNsb2NrLT5zaGlmdCk7CisJY2xvY2stPmVycm9yIC09IChpbnRlcnZhbCAtIG9mZnNldCkgPDwKKwkJCShUSUNLX0xFTkdUSF9TSElGVCAtIGNsb2NrLT5zaGlmdCk7CiB9CiAKIC8qKgpAQCAtMTAwOCwxMSArMTE0NiwxNSBAQAogCXVuc2lnbmVkIGxvbmcgYWN0aXZlX3Rhc2tzOyAvKiBmaXhlZC1wb2ludCAqLwogCXN0YXRpYyBpbnQgY291bnQgPSBMT0FEX0ZSRVE7CiAKLQlhY3RpdmVfdGFza3MgPSBjb3VudF9hY3RpdmVfdGFza3MoKTsKLQlmb3IgKGNvdW50IC09IHRpY2tzOyBjb3VudCA8IDA7IGNvdW50ICs9IExPQURfRlJFUSkgewotCQlDQUxDX0xPQUQoYXZlbnJ1blswXSwgRVhQXzEsIGFjdGl2ZV90YXNrcyk7Ci0JCUNBTENfTE9BRChhdmVucnVuWzFdLCBFWFBfNSwgYWN0aXZlX3Rhc2tzKTsKLQkJQ0FMQ19MT0FEKGF2ZW5ydW5bMl0sIEVYUF8xNSwgYWN0aXZlX3Rhc2tzKTsKKwljb3VudCAtPSB0aWNrczsKKwlpZiAodW5saWtlbHkoY291bnQgPCAwKSkgeworCQlhY3RpdmVfdGFza3MgPSBjb3VudF9hY3RpdmVfdGFza3MoKTsKKwkJZG8geworCQkJQ0FMQ19MT0FEKGF2ZW5ydW5bMF0sIEVYUF8xLCBhY3RpdmVfdGFza3MpOworCQkJQ0FMQ19MT0FEKGF2ZW5ydW5bMV0sIEVYUF81LCBhY3RpdmVfdGFza3MpOworCQkJQ0FMQ19MT0FEKGF2ZW5ydW5bMl0sIEVYUF8xNSwgYWN0aXZlX3Rhc2tzKTsKKwkJCWNvdW50ICs9IExPQURfRlJFUTsKKwkJfSB3aGlsZSAoY291bnQgPCAwKTsKIAl9CiB9CiAKQEAgLTEyMDIsMTEgKzEzNDQsMTAgQEAKIAkJICogc2hvdWxkIG5ldmVyIGhhcHBlbnMgYW55d2F5KS4gWW91IGp1c3QgaGF2ZSB0aGUgcHJpbnRrKCkKIAkJICogdGhhdCB3aWxsIHRlbGwgeW91IGlmIHNvbWV0aGluZyBpcyBnb25lIHdyb25nIGFuZCB3aGVyZS4KIAkJICovCi0JCWlmICh0aW1lb3V0IDwgMCkKLQkJeworCQlpZiAodGltZW91dCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAic2NoZWR1bGVfdGltZW91dDogd3JvbmcgdGltZW91dCAiCi0JCQkJInZhbHVlICVseCBmcm9tICVwXG4iLCB0aW1lb3V0LAotCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJCQkJInZhbHVlICVseFxuIiwgdGltZW91dCk7CisJCQlkdW1wX3N0YWNrKCk7CiAJCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHNhY2N0LmMgYi9rZXJuZWwvdHNhY2N0LmMKaW5kZXggOTZmNzcwMS4uYmFhY2MzNiAxMDA2NDQKLS0tIGEva2VybmVsL3RzYWNjdC5jCisrKyBiL2tlcm5lbC90c2FjY3QuYwpAQCAtOTYsNiArOTYsMTUgQEAKIAlzdGF0cy0+d3JpdGVfY2hhcgk9IHAtPndjaGFyOwogCXN0YXRzLT5yZWFkX3N5c2NhbGxzCT0gcC0+c3lzY3I7CiAJc3RhdHMtPndyaXRlX3N5c2NhbGxzCT0gcC0+c3lzY3c7CisjaWZkZWYgQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORworCXN0YXRzLT5yZWFkX2J5dGVzCT0gcC0+aW9hYy5yZWFkX2J5dGVzOworCXN0YXRzLT53cml0ZV9ieXRlcwk9IHAtPmlvYWMud3JpdGVfYnl0ZXM7CisJc3RhdHMtPmNhbmNlbGxlZF93cml0ZV9ieXRlcyA9IHAtPmlvYWMuY2FuY2VsbGVkX3dyaXRlX2J5dGVzOworI2Vsc2UKKwlzdGF0cy0+cmVhZF9ieXRlcwk9IDA7CisJc3RhdHMtPndyaXRlX2J5dGVzCT0gMDsKKwlzdGF0cy0+Y2FuY2VsbGVkX3dyaXRlX2J5dGVzID0gMDsKKyNlbmRpZgogfQogI3VuZGVmIEtCCiAjdW5kZWYgTUIKZGlmZiAtLWdpdCBhL2tlcm5lbC91bndpbmQuYyBiL2tlcm5lbC91bndpbmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDljMjYxMy4uMDAwMDAwMAotLS0gYS9rZXJuZWwvdW53aW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBOb3ZlbGwsIEluYy4KLSAqCUphbiBCZXVsaWNoIDxqYmV1bGljaEBub3ZlbGwuY29tPgotICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHZlcnNpb24gMiBvZiB0aGUgR05VIEdQTC4KLSAqCi0gKiBBIHNpbXBsZSBBUEkgZm9yIHVud2luZGluZyBrZXJuZWwgc3RhY2tzLiAgVGhpcyBpcyB1c2VkIGZvcgotICogZGVidWdnaW5nIGFuZCBlcnJvciByZXBvcnRpbmcgcHVycG9zZXMuICBUaGUga2VybmVsIGRvZXNuJ3QgbmVlZAotICogZnVsbC1ibG93biBzdGFjayB1bndpbmRpbmcgd2l0aCBhbGwgdGhlIGJlbGxzIGFuZCB3aGlzdGxlcywgc28gdGhlcmUKLSAqIGlzIG5vdCBtdWNoIHBvaW50IGluIGltcGxlbWVudGluZyB0aGUgZnVsbCBEd2FyZjIgdW53aW5kIEFQSS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdW53aW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdG9wX21hY2hpbmUuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+Ci0KLWV4dGVybiBjb25zdCBjaGFyIF9fc3RhcnRfdW53aW5kW10sIF9fZW5kX3Vud2luZFtdOwotZXh0ZXJuIGNvbnN0IHU4IF9fc3RhcnRfdW53aW5kX2hkcltdLCBfX2VuZF91bndpbmRfaGRyW107Ci0KLSNkZWZpbmUgTUFYX1NUQUNLX0RFUFRIIDgKLQotI2RlZmluZSBFWFRSQV9JTkZPKGYpIHsgXAotCQlCVUlMRF9CVUdfT05fWkVSTyhvZmZzZXRvZihzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8sIGYpIFwKLQkJICAgICAgICAgICAgICAgICAgJSBGSUVMRF9TSVpFT0Yoc3RydWN0IHVud2luZF9mcmFtZV9pbmZvLCBmKSkgXAotCQkrIG9mZnNldG9mKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbywgZikgXAotCQkgIC8gRklFTERfU0laRU9GKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbywgZiksIFwKLQkJRklFTERfU0laRU9GKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbywgZikgXAotCX0KLSNkZWZpbmUgUFRSRUdTX0lORk8oZikgRVhUUkFfSU5GTyhyZWdzLmYpCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCXVuc2lnbmVkIG9mZnM6QklUU19QRVJfTE9ORyAvIDI7Ci0JdW5zaWduZWQgd2lkdGg6QklUU19QRVJfTE9ORyAvIDI7Ci19IHJlZ19pbmZvW10gPSB7Ci0JVU5XX1JFR0lTVEVSX0lORk8KLX07Ci0KLSN1bmRlZiBQVFJFR1NfSU5GTwotI3VuZGVmIEVYVFJBX0lORk8KLQotI2lmbmRlZiBSRUdfSU5WQUxJRAotI2RlZmluZSBSRUdfSU5WQUxJRChyKSAocmVnX2luZm9bcl0ud2lkdGggPT0gMCkKLSNlbmRpZgotCi0jZGVmaW5lIERXX0NGQV9ub3AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgRFdfQ0ZBX3NldF9sb2MgICAgICAgICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBEV19DRkFfYWR2YW5jZV9sb2MxICAgICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIERXX0NGQV9hZHZhbmNlX2xvYzIgICAgICAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgRFdfQ0ZBX2FkdmFuY2VfbG9jNCAgICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZSBEV19DRkFfb2Zmc2V0X2V4dGVuZGVkICAgICAgICAgICAgICAweDA1Ci0jZGVmaW5lIERXX0NGQV9yZXN0b3JlX2V4dGVuZGVkICAgICAgICAgICAgIDB4MDYKLSNkZWZpbmUgRFdfQ0ZBX3VuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgMHgwNwotI2RlZmluZSBEV19DRkFfc2FtZV92YWx1ZSAgICAgICAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIERXX0NGQV9yZWdpc3RlciAgICAgICAgICAgICAgICAgICAgIDB4MDkKLSNkZWZpbmUgRFdfQ0ZBX3JlbWVtYmVyX3N0YXRlICAgICAgICAgICAgICAgMHgwYQotI2RlZmluZSBEV19DRkFfcmVzdG9yZV9zdGF0ZSAgICAgICAgICAgICAgICAweDBiCi0jZGVmaW5lIERXX0NGQV9kZWZfY2ZhICAgICAgICAgICAgICAgICAgICAgIDB4MGMKLSNkZWZpbmUgRFdfQ0ZBX2RlZl9jZmFfcmVnaXN0ZXIgICAgICAgICAgICAgMHgwZAotI2RlZmluZSBEV19DRkFfZGVmX2NmYV9vZmZzZXQgICAgICAgICAgICAgICAweDBlCi0jZGVmaW5lIERXX0NGQV9kZWZfY2ZhX2V4cHJlc3Npb24gICAgICAgICAgIDB4MGYKLSNkZWZpbmUgRFdfQ0ZBX2V4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgMHgxMAotI2RlZmluZSBEV19DRkFfb2Zmc2V0X2V4dGVuZGVkX3NmICAgICAgICAgICAweDExCi0jZGVmaW5lIERXX0NGQV9kZWZfY2ZhX3NmICAgICAgICAgICAgICAgICAgIDB4MTIKLSNkZWZpbmUgRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0X3NmICAgICAgICAgICAgMHgxMwotI2RlZmluZSBEV19DRkFfdmFsX29mZnNldCAgICAgICAgICAgICAgICAgICAweDE0Ci0jZGVmaW5lIERXX0NGQV92YWxfb2Zmc2V0X3NmICAgICAgICAgICAgICAgIDB4MTUKLSNkZWZpbmUgRFdfQ0ZBX3ZhbF9leHByZXNzaW9uICAgICAgICAgICAgICAgMHgxNgotI2RlZmluZSBEV19DRkFfbG9fdXNlciAgICAgICAgICAgICAgICAgICAgICAweDFjCi0jZGVmaW5lIERXX0NGQV9HTlVfd2luZG93X3NhdmUgICAgICAgICAgICAgIDB4MmQKLSNkZWZpbmUgRFdfQ0ZBX0dOVV9hcmdzX3NpemUgICAgICAgICAgICAgICAgMHgyZQotI2RlZmluZSBEV19DRkFfR05VX25lZ2F0aXZlX29mZnNldF9leHRlbmRlZCAweDJmCi0jZGVmaW5lIERXX0NGQV9oaV91c2VyICAgICAgICAgICAgICAgICAgICAgIDB4M2YKLQotI2RlZmluZSBEV19FSF9QRV9GT1JNICAgICAweDA3Ci0jZGVmaW5lIERXX0VIX1BFX25hdGl2ZSAgIDB4MDAKLSNkZWZpbmUgRFdfRUhfUEVfbGViMTI4ICAgMHgwMQotI2RlZmluZSBEV19FSF9QRV9kYXRhMiAgICAweDAyCi0jZGVmaW5lIERXX0VIX1BFX2RhdGE0ICAgIDB4MDMKLSNkZWZpbmUgRFdfRUhfUEVfZGF0YTggICAgMHgwNAotI2RlZmluZSBEV19FSF9QRV9zaWduZWQgICAweDA4Ci0jZGVmaW5lIERXX0VIX1BFX0FESlVTVCAgIDB4NzAKLSNkZWZpbmUgRFdfRUhfUEVfYWJzICAgICAgMHgwMAotI2RlZmluZSBEV19FSF9QRV9wY3JlbCAgICAweDEwCi0jZGVmaW5lIERXX0VIX1BFX3RleHRyZWwgIDB4MjAKLSNkZWZpbmUgRFdfRUhfUEVfZGF0YXJlbCAgMHgzMAotI2RlZmluZSBEV19FSF9QRV9mdW5jcmVsICAweDQwCi0jZGVmaW5lIERXX0VIX1BFX2FsaWduZWQgIDB4NTAKLSNkZWZpbmUgRFdfRUhfUEVfaW5kaXJlY3QgMHg4MAotI2RlZmluZSBEV19FSF9QRV9vbWl0ICAgICAweGZmCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bGViMTI4X3Q7Ci10eXBlZGVmICAgc2lnbmVkIGxvbmcgc2xlYjEyOF90OwotI2RlZmluZSBzbGViMTI4YWJzIF9fYnVpbHRpbl9sYWJzCi0KLXN0YXRpYyBzdHJ1Y3QgdW53aW5kX3RhYmxlIHsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsb25nIHBjOwotCQl1bnNpZ25lZCBsb25nIHJhbmdlOwotCX0gY29yZSwgaW5pdDsKLQljb25zdCB2b2lkICphZGRyZXNzOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkZXI7Ci0JdW5zaWduZWQgbG9uZyBoZHJzejsKLQlzdHJ1Y3QgdW53aW5kX3RhYmxlICpsaW5rOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci19IHJvb3RfdGFibGU7Ci0KLXN0cnVjdCB1bndpbmRfaXRlbSB7Ci0JZW51bSBpdGVtX2xvY2F0aW9uIHsKLQkJTm93aGVyZSwKLQkJTWVtb3J5LAotCQlSZWdpc3RlciwKLQkJVmFsdWUKLQl9IHdoZXJlOwotCXVsZWIxMjhfdCB2YWx1ZTsKLX07Ci0KLXN0cnVjdCB1bndpbmRfc3RhdGUgewotCXVsZWIxMjhfdCBsb2MsIG9yZzsKLQljb25zdCB1OCAqY2llU3RhcnQsICpjaWVFbmQ7Ci0JdWxlYjEyOF90IGNvZGVBbGlnbjsKLQlzbGViMTI4X3QgZGF0YUFsaWduOwotCXN0cnVjdCBjZmEgewotCQl1bGViMTI4X3QgcmVnLCBvZmZzOwotCX0gY2ZhOwotCXN0cnVjdCB1bndpbmRfaXRlbSByZWdzW0FSUkFZX1NJWkUocmVnX2luZm8pXTsKLQl1bnNpZ25lZCBzdGFja0RlcHRoOjg7Ci0JdW5zaWduZWQgdmVyc2lvbjo4OwotCWNvbnN0IHU4ICpsYWJlbDsKLQljb25zdCB1OCAqc3RhY2tbTUFYX1NUQUNLX0RFUFRIXTsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2ZhIGJhZENGQSA9IHsgQVJSQVlfU0laRShyZWdfaW5mbyksIDEgfTsKLQotc3RhdGljIHVuc2lnbmVkIHVud2luZF9kZWJ1ZzsKLXN0YXRpYyBpbnQgX19pbml0IHVud2luZF9kZWJ1Z19zZXR1cChjaGFyICpzKQotewotCXVud2luZF9kZWJ1ZyA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDApOwotCXJldHVybiAxOwotfQotX19zZXR1cCgidW53aW5kX2RlYnVnPSIsIHVud2luZF9kZWJ1Z19zZXR1cCk7Ci0jZGVmaW5lIGRwcmludGsobHZsLCBmbXQsIGFyZ3MuLi4pIFwKLQkoKHZvaWQpKGx2bCA+IHVud2luZF9kZWJ1ZyBcCi0JIHx8IHByaW50ayhLRVJOX0RFQlVHICJ1bndpbmQ6ICIgZm10ICJcbiIsICMjYXJncykpKQotCi1zdGF0aWMgc3RydWN0IHVud2luZF90YWJsZSAqZmluZF90YWJsZSh1bnNpZ25lZCBsb25nIHBjKQotewotCXN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlOwotCi0JZm9yICh0YWJsZSA9ICZyb290X3RhYmxlOyB0YWJsZTsgdGFibGUgPSB0YWJsZS0+bGluaykKLQkJaWYgKChwYyA+PSB0YWJsZS0+Y29yZS5wYwotCQkgICAgICYmIHBjIDwgdGFibGUtPmNvcmUucGMgKyB0YWJsZS0+Y29yZS5yYW5nZSkKLQkJICAgIHx8IChwYyA+PSB0YWJsZS0+aW5pdC5wYwotCQkgICAgICAgICYmIHBjIDwgdGFibGUtPmluaXQucGMgKyB0YWJsZS0+aW5pdC5yYW5nZSkpCi0JCQlicmVhazsKLQotCXJldHVybiB0YWJsZTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF9wb2ludGVyKGNvbnN0IHU4ICoqcExvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICplbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIHB0clR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0ZXh0X2Jhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhX2Jhc2UpOwotCi1zdGF0aWMgdm9pZCBpbml0X3Vud2luZF90YWJsZShzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb3JlX3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb3JlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbml0X3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbml0X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp0YWJsZV9zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGFibGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHU4ICpoZWFkZXJfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRlcl9zaXplKQotewotCWNvbnN0IHU4ICpwdHIgPSBoZWFkZXJfc3RhcnQgKyA0OwotCWNvbnN0IHU4ICplbmQgPSBoZWFkZXJfc3RhcnQgKyBoZWFkZXJfc2l6ZTsKLQotCXRhYmxlLT5jb3JlLnBjID0gKHVuc2lnbmVkIGxvbmcpY29yZV9zdGFydDsKLQl0YWJsZS0+Y29yZS5yYW5nZSA9IGNvcmVfc2l6ZTsKLQl0YWJsZS0+aW5pdC5wYyA9ICh1bnNpZ25lZCBsb25nKWluaXRfc3RhcnQ7Ci0JdGFibGUtPmluaXQucmFuZ2UgPSBpbml0X3NpemU7Ci0JdGFibGUtPmFkZHJlc3MgPSB0YWJsZV9zdGFydDsKLQl0YWJsZS0+c2l6ZSA9IHRhYmxlX3NpemU7Ci0JLyogU2VlIGlmIHRoZSBsaW5rZXIgcHJvdmlkZWQgdGFibGUgbG9va3MgdmFsaWQuICovCi0JaWYgKGhlYWRlcl9zaXplIDw9IDQKLQkgICAgfHwgaGVhZGVyX3N0YXJ0WzBdICE9IDEKLQkgICAgfHwgKHZvaWQgKilyZWFkX3BvaW50ZXIoJnB0ciwgZW5kLCBoZWFkZXJfc3RhcnRbMV0sIDAsIDApCi0JICAgICAgICE9IHRhYmxlX3N0YXJ0Ci0JICAgIHx8ICFyZWFkX3BvaW50ZXIoJnB0ciwgZW5kLCBoZWFkZXJfc3RhcnRbMl0sIDAsIDApCi0JICAgIHx8ICFyZWFkX3BvaW50ZXIoJnB0ciwgZW5kLCBoZWFkZXJfc3RhcnRbM10sIDAsCi0JICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaGVhZGVyX3N0YXJ0KQotCSAgICB8fCAhcmVhZF9wb2ludGVyKCZwdHIsIGVuZCwgaGVhZGVyX3N0YXJ0WzNdLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWhlYWRlcl9zdGFydCkpCi0JCWhlYWRlcl9zdGFydCA9IE5VTEw7Ci0JdGFibGUtPmhkcnN6ID0gaGVhZGVyX3NpemU7Ci0Jc21wX3dtYigpOwotCXRhYmxlLT5oZWFkZXIgPSBoZWFkZXJfc3RhcnQ7Ci0JdGFibGUtPmxpbmsgPSBOVUxMOwotCXRhYmxlLT5uYW1lID0gbmFtZTsKLX0KLQotdm9pZCBfX2luaXQgdW53aW5kX2luaXQodm9pZCkKLXsKLQlpbml0X3Vud2luZF90YWJsZSgmcm9vdF90YWJsZSwgImtlcm5lbCIsCi0JICAgICAgICAgICAgICAgICAgX3RleHQsIF9lbmQgLSBfdGV4dCwKLQkgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotCSAgICAgICAgICAgICAgICAgIF9fc3RhcnRfdW53aW5kLCBfX2VuZF91bndpbmQgLSBfX3N0YXJ0X3Vud2luZCwKLQkgICAgICAgICAgICAgICAgICBfX3N0YXJ0X3Vud2luZF9oZHIsIF9fZW5kX3Vud2luZF9oZHIgLSBfX3N0YXJ0X3Vud2luZF9oZHIpOwotfQotCi1zdGF0aWMgY29uc3QgdTMyIGJhZF9jaWUsIG5vdF9mZGU7Ci1zdGF0aWMgY29uc3QgdTMyICpjaWVfZm9yX2ZkZShjb25zdCB1MzIgKmZkZSwgY29uc3Qgc3RydWN0IHVud2luZF90YWJsZSAqKTsKLXN0YXRpYyBzaWduZWQgZmRlX3BvaW50ZXJfdHlwZShjb25zdCB1MzIgKmNpZSk7Ci0KLXN0cnVjdCBlaF9mcmFtZV9oZHJfdGFibGVfZW50cnkgewotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGZkZTsKLX07Ci0KLXN0YXRpYyBpbnQgY21wX2VoX2ZyYW1lX2hkcl90YWJsZV9lbnRyaWVzKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKLXsKLQljb25zdCBzdHJ1Y3QgZWhfZnJhbWVfaGRyX3RhYmxlX2VudHJ5ICplMSA9IHAxOwotCWNvbnN0IHN0cnVjdCBlaF9mcmFtZV9oZHJfdGFibGVfZW50cnkgKmUyID0gcDI7Ci0KLQlyZXR1cm4gKGUxLT5zdGFydCA+IGUyLT5zdGFydCkgLSAoZTEtPnN0YXJ0IDwgZTItPnN0YXJ0KTsKLX0KLQotc3RhdGljIHZvaWQgc3dhcF9laF9mcmFtZV9oZHJfdGFibGVfZW50cmllcyh2b2lkICpwMSwgdm9pZCAqcDIsIGludCBzaXplKQotewotCXN0cnVjdCBlaF9mcmFtZV9oZHJfdGFibGVfZW50cnkgKmUxID0gcDE7Ci0Jc3RydWN0IGVoX2ZyYW1lX2hkcl90YWJsZV9lbnRyeSAqZTIgPSBwMjsKLQl1bnNpZ25lZCBsb25nIHY7Ci0KLQl2ID0gZTEtPnN0YXJ0OwotCWUxLT5zdGFydCA9IGUyLT5zdGFydDsKLQllMi0+c3RhcnQgPSB2OwotCXYgPSBlMS0+ZmRlOwotCWUxLT5mZGUgPSBlMi0+ZmRlOwotCWUyLT5mZGUgPSB2OwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdW53aW5kX3RhYmxlKHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlLAotCQkJCQl2b2lkICooKmFsbG9jKSh1bnNpZ25lZCBsb25nKSkKLXsKLQljb25zdCB1OCAqcHRyOwotCXVuc2lnbmVkIGxvbmcgdGFibGVTaXplID0gdGFibGUtPnNpemUsIGhkclNpemU7Ci0JdW5zaWduZWQgbjsKLQljb25zdCB1MzIgKmZkZTsKLQlzdHJ1Y3QgewotCQl1OCB2ZXJzaW9uOwotCQl1OCBlaF9mcmFtZV9wdHJfZW5jOwotCQl1OCBmZGVfY291bnRfZW5jOwotCQl1OCB0YWJsZV9lbmM7Ci0JCXVuc2lnbmVkIGxvbmcgZWhfZnJhbWVfcHRyOwotCQl1bnNpZ25lZCBpbnQgZmRlX2NvdW50OwotCQlzdHJ1Y3QgZWhfZnJhbWVfaGRyX3RhYmxlX2VudHJ5IHRhYmxlW107Ci0JfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkgKmhlYWRlcjsKLQotCWlmICh0YWJsZS0+aGVhZGVyKQotCQlyZXR1cm47Ci0KLQlpZiAodGFibGUtPmhkcnN6KQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIuZWhfZnJhbWVfaGRyIGZvciAnJXMnIHByZXNlbnQgYnV0IHVudXNhYmxlXG4iLAotCQkgICAgICAgdGFibGUtPm5hbWUpOwotCi0JaWYgKHRhYmxlU2l6ZSAmIChzaXplb2YoKmZkZSkgLSAxKSkKLQkJcmV0dXJuOwotCi0JZm9yIChmZGUgPSB0YWJsZS0+YWRkcmVzcywgbiA9IDA7Ci0JICAgICB0YWJsZVNpemUgPiBzaXplb2YoKmZkZSkgJiYgdGFibGVTaXplIC0gc2l6ZW9mKCpmZGUpID49ICpmZGU7Ci0JICAgICB0YWJsZVNpemUgLT0gc2l6ZW9mKCpmZGUpICsgKmZkZSwgZmRlICs9IDEgKyAqZmRlIC8gc2l6ZW9mKCpmZGUpKSB7Ci0JCWNvbnN0IHUzMiAqY2llID0gY2llX2Zvcl9mZGUoZmRlLCB0YWJsZSk7Ci0JCXNpZ25lZCBwdHJUeXBlOwotCi0JCWlmIChjaWUgPT0gJm5vdF9mZGUpCi0JCQljb250aW51ZTsKLQkJaWYgKGNpZSA9PSBOVUxMCi0JCSAgICB8fCBjaWUgPT0gJmJhZF9jaWUKLQkJICAgIHx8IChwdHJUeXBlID0gZmRlX3BvaW50ZXJfdHlwZShjaWUpKSA8IDApCi0JCQlyZXR1cm47Ci0JCXB0ciA9IChjb25zdCB1OCAqKShmZGUgKyAyKTsKLQkJaWYgKCFyZWFkX3BvaW50ZXIoJnB0ciwKLQkJICAgICAgICAgICAgICAgICAgKGNvbnN0IHU4ICopKGZkZSArIDEpICsgKmZkZSwKLQkJICAgICAgICAgICAgICAgICAgcHRyVHlwZSwgMCwgMCkpCi0JCQlyZXR1cm47Ci0JCSsrbjsKLQl9Ci0KLQlpZiAodGFibGVTaXplIHx8ICFuKQotCQlyZXR1cm47Ci0KLQloZHJTaXplID0gNCArIHNpemVvZih1bnNpZ25lZCBsb25nKSArIHNpemVvZih1bnNpZ25lZCBpbnQpCi0JICAgICAgICArIDIgKiBuICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwotCWRwcmludGsoMiwgIkJpbmFyeSBsb29rdXAgdGFibGUgc2l6ZSBmb3IgJXM6ICVsdSBieXRlcyIsIHRhYmxlLT5uYW1lLCBoZHJTaXplKTsKLQloZWFkZXIgPSBhbGxvYyhoZHJTaXplKTsKLQlpZiAoIWhlYWRlcikKLQkJcmV0dXJuOwotCWhlYWRlci0+dmVyc2lvbiAgICAgICAgICA9IDE7Ci0JaGVhZGVyLT5laF9mcmFtZV9wdHJfZW5jID0gRFdfRUhfUEVfYWJzfERXX0VIX1BFX25hdGl2ZTsKLQloZWFkZXItPmZkZV9jb3VudF9lbmMgICAgPSBEV19FSF9QRV9hYnN8RFdfRUhfUEVfZGF0YTQ7Ci0JaGVhZGVyLT50YWJsZV9lbmMgICAgICAgID0gRFdfRUhfUEVfYWJzfERXX0VIX1BFX25hdGl2ZTsKLQlwdXRfdW5hbGlnbmVkKCh1bnNpZ25lZCBsb25nKXRhYmxlLT5hZGRyZXNzLCAmaGVhZGVyLT5laF9mcmFtZV9wdHIpOwotCUJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKmhlYWRlciksIGZkZV9jb3VudCkKLQkgICAgICAgICAgICAgJSBfX2FsaWdub2YodHlwZW9mKGhlYWRlci0+ZmRlX2NvdW50KSkpOwotCWhlYWRlci0+ZmRlX2NvdW50ICAgICAgICA9IG47Ci0KLQlCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCpoZWFkZXIpLCB0YWJsZSkKLQkgICAgICAgICAgICAgJSBfX2FsaWdub2YodHlwZW9mKCpoZWFkZXItPnRhYmxlKSkpOwotCWZvciAoZmRlID0gdGFibGUtPmFkZHJlc3MsIHRhYmxlU2l6ZSA9IHRhYmxlLT5zaXplLCBuID0gMDsKLQkgICAgIHRhYmxlU2l6ZTsKLQkgICAgIHRhYmxlU2l6ZSAtPSBzaXplb2YoKmZkZSkgKyAqZmRlLCBmZGUgKz0gMSArICpmZGUgLyBzaXplb2YoKmZkZSkpIHsKLQkJY29uc3QgdTMyICpjaWUgPSBmZGUgKyAxIC0gZmRlWzFdIC8gc2l6ZW9mKCpmZGUpOwotCi0JCWlmICghZmRlWzFdKQotCQkJY29udGludWU7IC8qIHRoaXMgaXMgYSBDSUUgKi8KLQkJcHRyID0gKGNvbnN0IHU4ICopKGZkZSArIDIpOwotCQloZWFkZXItPnRhYmxlW25dLnN0YXJ0ID0gcmVhZF9wb2ludGVyKCZwdHIsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHU4ICopKGZkZSArIDEpICsgKmZkZSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGVfcG9pbnRlcl90eXBlKGNpZSksIDAsIDApOwotCQloZWFkZXItPnRhYmxlW25dLmZkZSA9ICh1bnNpZ25lZCBsb25nKWZkZTsKLQkJKytuOwotCX0KLQlXQVJOX09OKG4gIT0gaGVhZGVyLT5mZGVfY291bnQpOwotCi0Jc29ydChoZWFkZXItPnRhYmxlLAotCSAgICAgbiwKLQkgICAgIHNpemVvZigqaGVhZGVyLT50YWJsZSksCi0JICAgICBjbXBfZWhfZnJhbWVfaGRyX3RhYmxlX2VudHJpZXMsCi0JICAgICBzd2FwX2VoX2ZyYW1lX2hkcl90YWJsZV9lbnRyaWVzKTsKLQotCXRhYmxlLT5oZHJzeiA9IGhkclNpemU7Ci0Jc21wX3dtYigpOwotCXRhYmxlLT5oZWFkZXIgPSAoY29uc3Qgdm9pZCAqKWhlYWRlcjsKLX0KLQotc3RhdGljIHZvaWQgKl9faW5pdCBiYWxsb2ModW5zaWduZWQgbG9uZyBzeikKLXsKLQlyZXR1cm4gX19hbGxvY19ib290bWVtX25vcGFuaWMoc3osCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1bnNpZ25lZCBpbnQpLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhKE1BWF9ETUFfQUREUkVTUykpOwotfQotCi12b2lkIF9faW5pdCB1bndpbmRfc2V0dXAodm9pZCkKLXsKLQlzZXR1cF91bndpbmRfdGFibGUoJnJvb3RfdGFibGUsIGJhbGxvYyk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCi1zdGF0aWMgc3RydWN0IHVud2luZF90YWJsZSAqbGFzdF90YWJsZTsKLQotLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBtb2R1bGVfbXV0ZXggaGVsZC4gKi8KLXZvaWQgKnVud2luZF9hZGRfdGFibGUoc3RydWN0IG1vZHVsZSAqbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp0YWJsZV9zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0YWJsZV9zaXplKQotewotCXN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlOwotCi0JaWYgKHRhYmxlX3NpemUgPD0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQl0YWJsZSA9IGttYWxsb2Moc2l6ZW9mKCp0YWJsZSksIEdGUF9LRVJORUwpOwotCWlmICghdGFibGUpCi0JCXJldHVybiBOVUxMOwotCi0JaW5pdF91bndpbmRfdGFibGUodGFibGUsIG1vZHVsZS0+bmFtZSwKLQkgICAgICAgICAgICAgICAgICBtb2R1bGUtPm1vZHVsZV9jb3JlLCBtb2R1bGUtPmNvcmVfc2l6ZSwKLQkgICAgICAgICAgICAgICAgICBtb2R1bGUtPm1vZHVsZV9pbml0LCBtb2R1bGUtPmluaXRfc2l6ZSwKLQkgICAgICAgICAgICAgICAgICB0YWJsZV9zdGFydCwgdGFibGVfc2l6ZSwKLQkgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKLQotCWlmIChsYXN0X3RhYmxlKQotCQlsYXN0X3RhYmxlLT5saW5rID0gdGFibGU7Ci0JZWxzZQotCQlyb290X3RhYmxlLmxpbmsgPSB0YWJsZTsKLQlsYXN0X3RhYmxlID0gdGFibGU7Ci0KLQlyZXR1cm4gdGFibGU7Ci19Ci0KLXN0cnVjdCB1bmxpbmtfdGFibGVfaW5mbwotewotCXN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlOwotCWludCBpbml0X29ubHk7Ci19OwotCi1zdGF0aWMgaW50IHVubGlua190YWJsZSh2b2lkICphcmcpCi17Ci0Jc3RydWN0IHVubGlua190YWJsZV9pbmZvICppbmZvID0gYXJnOwotCXN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlID0gaW5mby0+dGFibGUsICpwcmV2OwotCi0JZm9yIChwcmV2ID0gJnJvb3RfdGFibGU7IHByZXYtPmxpbmsgJiYgcHJldi0+bGluayAhPSB0YWJsZTsgcHJldiA9IHByZXYtPmxpbmspCi0JCTsKLQotCWlmIChwcmV2LT5saW5rKSB7Ci0JCWlmIChpbmZvLT5pbml0X29ubHkpIHsKLQkJCXRhYmxlLT5pbml0LnBjID0gMDsKLQkJCXRhYmxlLT5pbml0LnJhbmdlID0gMDsKLQkJCWluZm8tPnRhYmxlID0gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCXByZXYtPmxpbmsgPSB0YWJsZS0+bGluazsKLQkJCWlmICghcHJldi0+bGluaykKLQkJCQlsYXN0X3RhYmxlID0gcHJldjsKLQkJfQotCX0gZWxzZQotCQlpbmZvLT50YWJsZSA9IE5VTEw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBtb2R1bGVfbXV0ZXggaGVsZC4gKi8KLXZvaWQgdW53aW5kX3JlbW92ZV90YWJsZSh2b2lkICpoYW5kbGUsIGludCBpbml0X29ubHkpCi17Ci0Jc3RydWN0IHVud2luZF90YWJsZSAqdGFibGUgPSBoYW5kbGU7Ci0Jc3RydWN0IHVubGlua190YWJsZV9pbmZvIGluZm87Ci0KLQlpZiAoIXRhYmxlIHx8IHRhYmxlID09ICZyb290X3RhYmxlKQotCQlyZXR1cm47Ci0KLQlpZiAoaW5pdF9vbmx5ICYmIHRhYmxlID09IGxhc3RfdGFibGUpIHsKLQkJdGFibGUtPmluaXQucGMgPSAwOwotCQl0YWJsZS0+aW5pdC5yYW5nZSA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQlpbmZvLnRhYmxlID0gdGFibGU7Ci0JaW5mby5pbml0X29ubHkgPSBpbml0X29ubHk7Ci0Jc3RvcF9tYWNoaW5lX3J1bih1bmxpbmtfdGFibGUsICZpbmZvLCBOUl9DUFVTKTsKLQotCWlmIChpbmZvLnRhYmxlKQotCQlrZnJlZSh0YWJsZSk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwotCi1zdGF0aWMgdWxlYjEyOF90IGdldF91bGViMTI4KGNvbnN0IHU4ICoqcGN1ciwgY29uc3QgdTggKmVuZCkKLXsKLQljb25zdCB1OCAqY3VyID0gKnBjdXI7Ci0JdWxlYjEyOF90IHZhbHVlOwotCXVuc2lnbmVkIHNoaWZ0OwotCi0JZm9yIChzaGlmdCA9IDAsIHZhbHVlID0gMDsgY3VyIDwgZW5kOyBzaGlmdCArPSA3KSB7Ci0JCWlmIChzaGlmdCArIDcgPiA4ICogc2l6ZW9mKHZhbHVlKQotCQkgICAgJiYgKCpjdXIgJiAweDdmVSkgPj0gKDFVIDw8ICg4ICogc2l6ZW9mKHZhbHVlKSAtIHNoaWZ0KSkpIHsKLQkJCWN1ciA9IGVuZCArIDE7Ci0JCQlicmVhazsKLQkJfQotCQl2YWx1ZSB8PSAodWxlYjEyOF90KSgqY3VyICYgMHg3ZikgPDwgc2hpZnQ7Ci0JCWlmICghKCpjdXIrKyAmIDB4ODApKQotCQkJYnJlYWs7Ci0JfQotCSpwY3VyID0gY3VyOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgc2xlYjEyOF90IGdldF9zbGViMTI4KGNvbnN0IHU4ICoqcGN1ciwgY29uc3QgdTggKmVuZCkKLXsKLQljb25zdCB1OCAqY3VyID0gKnBjdXI7Ci0Jc2xlYjEyOF90IHZhbHVlOwotCXVuc2lnbmVkIHNoaWZ0OwotCi0JZm9yIChzaGlmdCA9IDAsIHZhbHVlID0gMDsgY3VyIDwgZW5kOyBzaGlmdCArPSA3KSB7Ci0JCWlmIChzaGlmdCArIDcgPiA4ICogc2l6ZW9mKHZhbHVlKQotCQkgICAgJiYgKCpjdXIgJiAweDdmVSkgPj0gKDFVIDw8ICg4ICogc2l6ZW9mKHZhbHVlKSAtIHNoaWZ0KSkpIHsKLQkJCWN1ciA9IGVuZCArIDE7Ci0JCQlicmVhazsKLQkJfQotCQl2YWx1ZSB8PSAoc2xlYjEyOF90KSgqY3VyICYgMHg3ZikgPDwgc2hpZnQ7Ci0JCWlmICghKCpjdXIgJiAweDgwKSkgewotCQkJdmFsdWUgfD0gLSgqY3VyKysgJiAweDQwKSA8PCBzaGlmdDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCSpwY3VyID0gY3VyOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgY29uc3QgdTMyICpjaWVfZm9yX2ZkZShjb25zdCB1MzIgKmZkZSwgY29uc3Qgc3RydWN0IHVud2luZF90YWJsZSAqdGFibGUpCi17Ci0JY29uc3QgdTMyICpjaWU7Ci0KLQlpZiAoISpmZGUgfHwgKCpmZGUgJiAoc2l6ZW9mKCpmZGUpIC0gMSkpKQotCQlyZXR1cm4gJmJhZF9jaWU7Ci0JaWYgKCFmZGVbMV0pCi0JCXJldHVybiAmbm90X2ZkZTsgLyogdGhpcyBpcyBhIENJRSAqLwotCWlmICgoZmRlWzFdICYgKHNpemVvZigqZmRlKSAtIDEpKQotCSAgICB8fCBmZGVbMV0gPiAodW5zaWduZWQgbG9uZykoZmRlICsgMSkgLSAodW5zaWduZWQgbG9uZyl0YWJsZS0+YWRkcmVzcykKLQkJcmV0dXJuIE5VTEw7IC8qIHRoaXMgaXMgbm90IGEgdmFsaWQgRkRFICovCi0JY2llID0gZmRlICsgMSAtIGZkZVsxXSAvIHNpemVvZigqZmRlKTsKLQlpZiAoKmNpZSA8PSBzaXplb2YoKmNpZSkgKyA0Ci0JICAgIHx8ICpjaWUgPj0gZmRlWzFdIC0gc2l6ZW9mKCpmZGUpCi0JICAgIHx8ICgqY2llICYgKHNpemVvZigqY2llKSAtIDEpKQotCSAgICB8fCBjaWVbMV0pCi0JCXJldHVybiBOVUxMOyAvKiB0aGlzIGlzIG5vdCBhICh2YWxpZCkgQ0lFICovCi0JcmV0dXJuIGNpZTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF9wb2ludGVyKGNvbnN0IHU4ICoqcExvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICplbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIHB0clR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0ZXh0X2Jhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhX2Jhc2UpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7Ci0JdW5pb24gewotCQljb25zdCB1OCAqcDg7Ci0JCWNvbnN0IHUxNiAqcDE2dTsKLQkJY29uc3QgczE2ICpwMTZzOwotCQljb25zdCB1MzIgKnAzMnU7Ci0JCWNvbnN0IHMzMiAqcDMyczsKLQkJY29uc3QgdW5zaWduZWQgbG9uZyAqcHVsOwotCX0gcHRyOwotCi0JaWYgKHB0clR5cGUgPCAwIHx8IHB0clR5cGUgPT0gRFdfRUhfUEVfb21pdCkgewotCQlkcHJpbnRrKDEsICJJbnZhbGlkIHBvaW50ZXIgZW5jb2RpbmcgJTAyWCAoJXAsJXApLiIsIHB0clR5cGUsICpwTG9jLCBlbmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcHRyLnA4ID0gKnBMb2M7Ci0Jc3dpdGNoKHB0clR5cGUgJiBEV19FSF9QRV9GT1JNKSB7Ci0JY2FzZSBEV19FSF9QRV9kYXRhMjoKLQkJaWYgKGVuZCA8IChjb25zdCB2b2lkICopKHB0ci5wMTZ1ICsgMSkpIHsKLQkJCWRwcmludGsoMSwgIkRhdGExNiBvdmVycnVuICglcCwlcCkuIiwgcHRyLnA4LCBlbmQpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWYocHRyVHlwZSAmIERXX0VIX1BFX3NpZ25lZCkKLQkJCXZhbHVlID0gZ2V0X3VuYWxpZ25lZChwdHIucDE2cysrKTsKLQkJZWxzZQotCQkJdmFsdWUgPSBnZXRfdW5hbGlnbmVkKHB0ci5wMTZ1KyspOwotCQlicmVhazsKLQljYXNlIERXX0VIX1BFX2RhdGE0OgotI2lmZGVmIENPTkZJR182NEJJVAotCQlpZiAoZW5kIDwgKGNvbnN0IHZvaWQgKikocHRyLnAzMnUgKyAxKSkgewotCQkJZHByaW50aygxLCAiRGF0YTMyIG92ZXJydW4gKCVwLCVwKS4iLCBwdHIucDgsIGVuZCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpZihwdHJUeXBlICYgRFdfRUhfUEVfc2lnbmVkKQotCQkJdmFsdWUgPSBnZXRfdW5hbGlnbmVkKHB0ci5wMzJzKyspOwotCQllbHNlCi0JCQl2YWx1ZSA9IGdldF91bmFsaWduZWQocHRyLnAzMnUrKyk7Ci0JCWJyZWFrOwotCWNhc2UgRFdfRUhfUEVfZGF0YTg6Ci0JCUJVSUxEX0JVR19PTihzaXplb2YodTY0KSAhPSBzaXplb2YodmFsdWUpKTsKLSNlbHNlCi0JCUJVSUxEX0JVR19PTihzaXplb2YodTMyKSAhPSBzaXplb2YodmFsdWUpKTsKLSNlbmRpZgotCWNhc2UgRFdfRUhfUEVfbmF0aXZlOgotCQlpZiAoZW5kIDwgKGNvbnN0IHZvaWQgKikocHRyLnB1bCArIDEpKSB7Ci0JCQlkcHJpbnRrKDEsICJEYXRhVUwgb3ZlcnJ1biAoJXAsJXApLiIsIHB0ci5wOCwgZW5kKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXZhbHVlID0gZ2V0X3VuYWxpZ25lZChwdHIucHVsKyspOwotCQlicmVhazsKLQljYXNlIERXX0VIX1BFX2xlYjEyODoKLQkJQlVJTERfQlVHX09OKHNpemVvZih1bGViMTI4X3QpID4gc2l6ZW9mKHZhbHVlKSk7Ci0JCXZhbHVlID0gcHRyVHlwZSAmIERXX0VIX1BFX3NpZ25lZAotCQkgICAgICAgID8gZ2V0X3NsZWIxMjgoJnB0ci5wOCwgZW5kKQotCQkgICAgICAgIDogZ2V0X3VsZWIxMjgoJnB0ci5wOCwgZW5kKTsKLQkJaWYgKChjb25zdCB2b2lkICopcHRyLnA4ID4gZW5kKSB7Ci0JCQlkcHJpbnRrKDEsICJEYXRhTEVCIG92ZXJydW4gKCVwLCVwKS4iLCBwdHIucDgsIGVuZCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkcHJpbnRrKDIsICJDYW5ub3QgZGVjb2RlIHBvaW50ZXIgdHlwZSAlMDJYICglcCwlcCkuIiwKLQkJICAgICAgICBwdHJUeXBlLCBwdHIucDgsIGVuZCk7Ci0JCXJldHVybiAwOwotCX0KLQlzd2l0Y2gocHRyVHlwZSAmIERXX0VIX1BFX0FESlVTVCkgewotCWNhc2UgRFdfRUhfUEVfYWJzOgotCQlicmVhazsKLQljYXNlIERXX0VIX1BFX3BjcmVsOgotCQl2YWx1ZSArPSAodW5zaWduZWQgbG9uZykqcExvYzsKLQkJYnJlYWs7Ci0JY2FzZSBEV19FSF9QRV90ZXh0cmVsOgotCQlpZiAobGlrZWx5KHRleHRfYmFzZSkpIHsKLQkJCXZhbHVlICs9IHRleHRfYmFzZTsKLQkJCWJyZWFrOwotCQl9Ci0JCWRwcmludGsoMiwgIlRleHQtcmVsYXRpdmUgZW5jb2RpbmcgJTAyWCAoJXAsJXApLCBidXQgemVybyB0ZXh0IGJhc2UuIiwKLQkJICAgICAgICBwdHJUeXBlLCAqcExvYywgZW5kKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBEV19FSF9QRV9kYXRhcmVsOgotCQlpZiAobGlrZWx5KGRhdGFfYmFzZSkpIHsKLQkJCXZhbHVlICs9IGRhdGFfYmFzZTsKLQkJCWJyZWFrOwotCQl9Ci0JCWRwcmludGsoMiwgIkRhdGEtcmVsYXRpdmUgZW5jb2RpbmcgJTAyWCAoJXAsJXApLCBidXQgemVybyBkYXRhIGJhc2UuIiwKLQkJICAgICAgICBwdHJUeXBlLCAqcExvYywgZW5kKTsKLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJZHByaW50aygyLCAiQ2Fubm90IGFkanVzdCBwb2ludGVyIHR5cGUgJTAyWCAoJXAsJXApLiIsCi0JCSAgICAgICAgcHRyVHlwZSwgKnBMb2MsIGVuZCk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoKHB0clR5cGUgJiBEV19FSF9QRV9pbmRpcmVjdCkKLQkgICAgJiYgcHJvYmVfa2VybmVsX2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSwgdmFsdWUpKSB7Ci0JCWRwcmludGsoMSwgIkNhbm5vdCByZWFkIGluZGlyZWN0IHZhbHVlICVseCAoJXAsJXApLiIsCi0JCSAgICAgICAgdmFsdWUsICpwTG9jLCBlbmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0JKnBMb2MgPSBwdHIucDg7Ci0KLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyBzaWduZWQgZmRlX3BvaW50ZXJfdHlwZShjb25zdCB1MzIgKmNpZSkKLXsKLQljb25zdCB1OCAqcHRyID0gKGNvbnN0IHU4ICopKGNpZSArIDIpOwotCXVuc2lnbmVkIHZlcnNpb24gPSAqcHRyOwotCi0JaWYgKHZlcnNpb24gIT0gMSkKLQkJcmV0dXJuIC0xOyAvKiB1bnN1cHBvcnRlZCAqLwotCWlmICgqKytwdHIpIHsKLQkJY29uc3QgY2hhciAqYXVnOwotCQljb25zdCB1OCAqZW5kID0gKGNvbnN0IHU4ICopKGNpZSArIDEpICsgKmNpZTsKLQkJdWxlYjEyOF90IGxlbjsKLQotCQkvKiBjaGVjayBpZiBhdWdtZW50YXRpb24gc2l6ZSBpcyBmaXJzdCAoYW5kIHRodXMgcHJlc2VudCkgKi8KLQkJaWYgKCpwdHIgIT0gJ3onKQotCQkJcmV0dXJuIC0xOwotCQkvKiBjaGVjayBpZiBhdWdtZW50YXRpb24gc3RyaW5nIGlzIG51bC10ZXJtaW5hdGVkICovCi0JCWlmICgocHRyID0gbWVtY2hyKGF1ZyA9IChjb25zdCB2b2lkICopcHRyLCAwLCBlbmQgLSBwdHIpKSA9PSBOVUxMKQotCQkJcmV0dXJuIC0xOwotCQkrK3B0cjsgLyogc2tpcCB0ZXJtaW5hdG9yICovCi0JCWdldF91bGViMTI4KCZwdHIsIGVuZCk7IC8qIHNraXAgY29kZSBhbGlnbm1lbnQgKi8KLQkJZ2V0X3NsZWIxMjgoJnB0ciwgZW5kKTsgLyogc2tpcCBkYXRhIGFsaWdubWVudCAqLwotCQkvKiBza2lwIHJldHVybiBhZGRyZXNzIGNvbHVtbiAqLwotCQl2ZXJzaW9uIDw9IDEgPyAodm9pZCkrK3B0ciA6ICh2b2lkKWdldF91bGViMTI4KCZwdHIsIGVuZCk7Ci0JCWxlbiA9IGdldF91bGViMTI4KCZwdHIsIGVuZCk7IC8qIGF1Z21lbnRhdGlvbiBsZW5ndGggKi8KLQkJaWYgKHB0ciArIGxlbiA8IHB0ciB8fCBwdHIgKyBsZW4gPiBlbmQpCi0JCQlyZXR1cm4gLTE7Ci0JCWVuZCA9IHB0ciArIGxlbjsKLQkJd2hpbGUgKCorK2F1ZykgewotCQkJaWYgKHB0ciA+PSBlbmQpCi0JCQkJcmV0dXJuIC0xOwotCQkJc3dpdGNoKCphdWcpIHsKLQkJCWNhc2UgJ0wnOgotCQkJCSsrcHRyOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnUCc6IHsKLQkJCQkJc2lnbmVkIHB0clR5cGUgPSAqcHRyKys7Ci0KLQkJCQkJaWYgKCFyZWFkX3BvaW50ZXIoJnB0ciwgZW5kLCBwdHJUeXBlLCAwLCAwKQotCQkJCQkgICAgfHwgcHRyID4gZW5kKQotCQkJCQkJcmV0dXJuIC0xOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgJ1InOgotCQkJCXJldHVybiAqcHRyOwotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIERXX0VIX1BFX25hdGl2ZXxEV19FSF9QRV9hYnM7Ci19Ci0KLXN0YXRpYyBpbnQgYWR2YW5jZV9sb2ModW5zaWduZWQgbG9uZyBkZWx0YSwgc3RydWN0IHVud2luZF9zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RhdGUtPmxvYyArPSBkZWx0YSAqIHN0YXRlLT5jb2RlQWxpZ247Ci0KLQlyZXR1cm4gZGVsdGEgPiAwOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfcnVsZSh1bGViMTI4X3QgcmVnLAotICAgICAgICAgICAgICAgICAgICAgZW51bSBpdGVtX2xvY2F0aW9uIHdoZXJlLAotICAgICAgICAgICAgICAgICAgICAgdWxlYjEyOF90IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVud2luZF9zdGF0ZSAqc3RhdGUpCi17Ci0JaWYgKHJlZyA8IEFSUkFZX1NJWkUoc3RhdGUtPnJlZ3MpKSB7Ci0JCXN0YXRlLT5yZWdzW3JlZ10ud2hlcmUgPSB3aGVyZTsKLQkJc3RhdGUtPnJlZ3NbcmVnXS52YWx1ZSA9IHZhbHVlOwotCX0KLX0KLQotc3RhdGljIGludCBwcm9jZXNzQ0ZJKGNvbnN0IHU4ICpzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqZW5kLAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGFyZ2V0TG9jLAotICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBwdHJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1bndpbmRfc3RhdGUgKnN0YXRlKQotewotCXVuaW9uIHsKLQkJY29uc3QgdTggKnA4OwotCQljb25zdCB1MTYgKnAxNjsKLQkJY29uc3QgdTMyICpwMzI7Ci0JfSBwdHI7Ci0JaW50IHJlc3VsdCA9IDE7Ci0KLQlpZiAoc3RhcnQgIT0gc3RhdGUtPmNpZVN0YXJ0KSB7Ci0JCXN0YXRlLT5sb2MgPSBzdGF0ZS0+b3JnOwotCQlyZXN1bHQgPSBwcm9jZXNzQ0ZJKHN0YXRlLT5jaWVTdGFydCwgc3RhdGUtPmNpZUVuZCwgMCwgcHRyVHlwZSwgc3RhdGUpOwotCQlpZiAodGFyZ2V0TG9jID09IDAgJiYgc3RhdGUtPmxhYmVsID09IE5VTEwpCi0JCQlyZXR1cm4gcmVzdWx0OwotCX0KLQlmb3IgKHB0ci5wOCA9IHN0YXJ0OyByZXN1bHQgJiYgcHRyLnA4IDwgZW5kOyApIHsKLQkJc3dpdGNoKCpwdHIucDggPj4gNikgewotCQkJdWxlYjEyOF90IHZhbHVlOwotCi0JCWNhc2UgMDoKLQkJCXN3aXRjaCgqcHRyLnA4KyspIHsKLQkJCWNhc2UgRFdfQ0ZBX25vcDoKLQkJCQlicmVhazsKLQkJCWNhc2UgRFdfQ0ZBX3NldF9sb2M6Ci0JCQkJc3RhdGUtPmxvYyA9IHJlYWRfcG9pbnRlcigmcHRyLnA4LCBlbmQsIHB0clR5cGUsIDAsIDApOwotCQkJCWlmIChzdGF0ZS0+bG9jID09IDApCi0JCQkJCXJlc3VsdCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERXX0NGQV9hZHZhbmNlX2xvYzE6Ci0JCQkJcmVzdWx0ID0gcHRyLnA4IDwgZW5kICYmIGFkdmFuY2VfbG9jKCpwdHIucDgrKywgc3RhdGUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBEV19DRkFfYWR2YW5jZV9sb2MyOgotCQkJCXJlc3VsdCA9IHB0ci5wOCA8PSBlbmQgKyAyCi0JCQkJICAgICAgICAgJiYgYWR2YW5jZV9sb2MoKnB0ci5wMTYrKywgc3RhdGUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBEV19DRkFfYWR2YW5jZV9sb2M0OgotCQkJCXJlc3VsdCA9IHB0ci5wOCA8PSBlbmQgKyA0Ci0JCQkJICAgICAgICAgJiYgYWR2YW5jZV9sb2MoKnB0ci5wMzIrKywgc3RhdGUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBEV19DRkFfb2Zmc2V0X2V4dGVuZGVkOgotCQkJCXZhbHVlID0gZ2V0X3VsZWIxMjgoJnB0ci5wOCwgZW5kKTsKLQkJCQlzZXRfcnVsZSh2YWx1ZSwgTWVtb3J5LCBnZXRfdWxlYjEyOCgmcHRyLnA4LCBlbmQpLCBzdGF0ZSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERXX0NGQV92YWxfb2Zmc2V0OgotCQkJCXZhbHVlID0gZ2V0X3VsZWIxMjgoJnB0ci5wOCwgZW5kKTsKLQkJCQlzZXRfcnVsZSh2YWx1ZSwgVmFsdWUsIGdldF91bGViMTI4KCZwdHIucDgsIGVuZCksIHN0YXRlKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgRFdfQ0ZBX29mZnNldF9leHRlbmRlZF9zZjoKLQkJCQl2YWx1ZSA9IGdldF91bGViMTI4KCZwdHIucDgsIGVuZCk7Ci0JCQkJc2V0X3J1bGUodmFsdWUsIE1lbW9yeSwgZ2V0X3NsZWIxMjgoJnB0ci5wOCwgZW5kKSwgc3RhdGUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBEV19DRkFfdmFsX29mZnNldF9zZjoKLQkJCQl2YWx1ZSA9IGdldF91bGViMTI4KCZwdHIucDgsIGVuZCk7Ci0JCQkJc2V0X3J1bGUodmFsdWUsIFZhbHVlLCBnZXRfc2xlYjEyOCgmcHRyLnA4LCBlbmQpLCBzdGF0ZSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERXX0NGQV9yZXN0b3JlX2V4dGVuZGVkOgotCQkJY2FzZSBEV19DRkFfdW5kZWZpbmVkOgotCQkJY2FzZSBEV19DRkFfc2FtZV92YWx1ZToKLQkJCQlzZXRfcnVsZShnZXRfdWxlYjEyOCgmcHRyLnA4LCBlbmQpLCBOb3doZXJlLCAwLCBzdGF0ZSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERXX0NGQV9yZWdpc3RlcjoKLQkJCQl2YWx1ZSA9IGdldF91bGViMTI4KCZwdHIucDgsIGVuZCk7Ci0JCQkJc2V0X3J1bGUodmFsdWUsCi0JCQkJICAgICAgICAgUmVnaXN0ZXIsCi0JCQkJICAgICAgICAgZ2V0X3VsZWIxMjgoJnB0ci5wOCwgZW5kKSwgc3RhdGUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBEV19DRkFfcmVtZW1iZXJfc3RhdGU6Ci0JCQkJaWYgKHB0ci5wOCA9PSBzdGF0ZS0+bGFiZWwpIHsKLQkJCQkJc3RhdGUtPmxhYmVsID0gTlVMTDsKLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCQkJCWlmIChzdGF0ZS0+c3RhY2tEZXB0aCA+PSBNQVhfU1RBQ0tfREVQVEgpIHsKLQkJCQkJZHByaW50aygxLCAiU3RhdGUgc3RhY2sgb3ZlcmZsb3cgKCVwLCVwKS4iLCBwdHIucDgsIGVuZCk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCQlzdGF0ZS0+c3RhY2tbc3RhdGUtPnN0YWNrRGVwdGgrK10gPSBwdHIucDg7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERXX0NGQV9yZXN0b3JlX3N0YXRlOgotCQkJCWlmIChzdGF0ZS0+c3RhY2tEZXB0aCkgewotCQkJCQljb25zdCB1bGViMTI4X3QgbG9jID0gc3RhdGUtPmxvYzsKLQkJCQkJY29uc3QgdTggKmxhYmVsID0gc3RhdGUtPmxhYmVsOwotCi0JCQkJCXN0YXRlLT5sYWJlbCA9IHN0YXRlLT5zdGFja1tzdGF0ZS0+c3RhY2tEZXB0aCAtIDFdOwotCQkJCQltZW1jcHkoJnN0YXRlLT5jZmEsICZiYWRDRkEsIHNpemVvZihzdGF0ZS0+Y2ZhKSk7Ci0JCQkJCW1lbXNldChzdGF0ZS0+cmVncywgMCwgc2l6ZW9mKHN0YXRlLT5yZWdzKSk7Ci0JCQkJCXN0YXRlLT5zdGFja0RlcHRoID0gMDsKLQkJCQkJcmVzdWx0ID0gcHJvY2Vzc0NGSShzdGFydCwgZW5kLCAwLCBwdHJUeXBlLCBzdGF0ZSk7Ci0JCQkJCXN0YXRlLT5sb2MgPSBsb2M7Ci0JCQkJCXN0YXRlLT5sYWJlbCA9IGxhYmVsOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWRwcmludGsoMSwgIlN0YXRlIHN0YWNrIHVuZGVyZmxvdyAoJXAsJXApLiIsIHB0ci5wOCwgZW5kKTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBEV19DRkFfZGVmX2NmYToKLQkJCQlzdGF0ZS0+Y2ZhLnJlZyA9IGdldF91bGViMTI4KCZwdHIucDgsIGVuZCk7Ci0JCQkJLypub2JyZWFrKi8KLQkJCWNhc2UgRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0OgotCQkJCXN0YXRlLT5jZmEub2ZmcyA9IGdldF91bGViMTI4KCZwdHIucDgsIGVuZCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERXX0NGQV9kZWZfY2ZhX3NmOgotCQkJCXN0YXRlLT5jZmEucmVnID0gZ2V0X3VsZWIxMjgoJnB0ci5wOCwgZW5kKTsKLQkJCQkvKm5vYnJlYWsqLwotCQkJY2FzZSBEV19DRkFfZGVmX2NmYV9vZmZzZXRfc2Y6Ci0JCQkJc3RhdGUtPmNmYS5vZmZzID0gZ2V0X3NsZWIxMjgoJnB0ci5wOCwgZW5kKQotCQkJCSAgICAgICAgICAgICAgICAgICogc3RhdGUtPmRhdGFBbGlnbjsKLQkJCQlicmVhazsKLQkJCWNhc2UgRFdfQ0ZBX2RlZl9jZmFfcmVnaXN0ZXI6Ci0JCQkJc3RhdGUtPmNmYS5yZWcgPSBnZXRfdWxlYjEyOCgmcHRyLnA4LCBlbmQpOwotCQkJCWJyZWFrOwotCQkJLyp0b2RvIGNhc2UgRFdfQ0ZBX2RlZl9jZmFfZXhwcmVzc2lvbjogKi8KLQkJCS8qdG9kbyBjYXNlIERXX0NGQV9leHByZXNzaW9uOiAqLwotCQkJLyp0b2RvIGNhc2UgRFdfQ0ZBX3ZhbF9leHByZXNzaW9uOiAqLwotCQkJY2FzZSBEV19DRkFfR05VX2FyZ3Nfc2l6ZToKLQkJCQlnZXRfdWxlYjEyOCgmcHRyLnA4LCBlbmQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBEV19DRkFfR05VX25lZ2F0aXZlX29mZnNldF9leHRlbmRlZDoKLQkJCQl2YWx1ZSA9IGdldF91bGViMTI4KCZwdHIucDgsIGVuZCk7Ci0JCQkJc2V0X3J1bGUodmFsdWUsCi0JCQkJICAgICAgICAgTWVtb3J5LAotCQkJCSAgICAgICAgICh1bGViMTI4X3QpMCAtIGdldF91bGViMTI4KCZwdHIucDgsIGVuZCksIHN0YXRlKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgRFdfQ0ZBX0dOVV93aW5kb3dfc2F2ZToKLQkJCWRlZmF1bHQ6Ci0JCQkJZHByaW50aygxLCAiVW5yZWNvZ25pemVkIENGSSBvcCAlMDJYICglcCwlcCkuIiwgcHRyLnA4Wy0xXSwgcHRyLnA4IC0gMSwgZW5kKTsKLQkJCQlyZXN1bHQgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXJlc3VsdCA9IGFkdmFuY2VfbG9jKCpwdHIucDgrKyAmIDB4M2YsIHN0YXRlKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQl2YWx1ZSA9ICpwdHIucDgrKyAmIDB4M2Y7Ci0JCQlzZXRfcnVsZSh2YWx1ZSwgTWVtb3J5LCBnZXRfdWxlYjEyOCgmcHRyLnA4LCBlbmQpLCBzdGF0ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJc2V0X3J1bGUoKnB0ci5wOCsrICYgMHgzZiwgTm93aGVyZSwgMCwgc3RhdGUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHB0ci5wOCA+IGVuZCkgewotCQkJZHByaW50aygxLCAiRGF0YSBvdmVycnVuICglcCwlcCkuIiwgcHRyLnA4LCBlbmQpOwotCQkJcmVzdWx0ID0gMDsKLQkJfQotCQlpZiAocmVzdWx0ICYmIHRhcmdldExvYyAhPSAwICYmIHRhcmdldExvYyA8IHN0YXRlLT5sb2MpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAocmVzdWx0ICYmIHB0ci5wOCA8IGVuZCkKLQkJZHByaW50aygxLCAiRGF0YSB1bmRlcnJ1biAoJXAsJXApLiIsIHB0ci5wOCwgZW5kKTsKLQotCXJldHVybiByZXN1bHQKLQkgICAmJiBwdHIucDggPT0gZW5kCi0JICAgJiYgKHRhcmdldExvYyA9PSAwCi0JICAgIHx8ICgvKnRvZG8gV2hpbGUgaW4gdGhlb3J5IHRoaXMgc2hvdWxkIGFwcGx5LCBnY2MgaW4gcHJhY3RpY2Ugb21pdHMKLQkgICAgICAgICAgZXZlcnl0aGluZyBwYXN0IHRoZSBmdW5jdGlvbiBwcm9sb2csIGFuZCBoZW5jZSB0aGUgbG9jYXRpb24KLQkgICAgICAgICAgbmV2ZXIgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KLQkgICAgICAgIHRhcmdldExvYyA8IHN0YXRlLT5sb2MgJiYqLyBzdGF0ZS0+bGFiZWwgPT0gTlVMTCkpOwotfQotCi0vKiBVbndpbmQgdG8gcHJldmlvdXMgdG8gZnJhbWUuICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgbmVnYXRpdmUKLSAqIG51bWJlciBpbiBjYXNlIG9mIGFuIGVycm9yLiAqLwotaW50IHVud2luZChzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmZyYW1lKQotewotI2RlZmluZSBGUkFNRV9SRUcociwgdCkgKCgodCAqKWZyYW1lKVtyZWdfaW5mb1tyXS5vZmZzXSkKLQljb25zdCB1MzIgKmZkZSA9IE5VTEwsICpjaWUgPSBOVUxMOwotCWNvbnN0IHU4ICpwdHIgPSBOVUxMLCAqZW5kID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHBjID0gVU5XX1BDKGZyYW1lKSAtIGZyYW1lLT5jYWxsX2ZyYW1lLCBzcDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0TG9jID0gMCwgZW5kTG9jID0gMCwgY2ZhOwotCXVuc2lnbmVkIGk7Ci0Jc2lnbmVkIHB0clR5cGUgPSAtMTsKLQl1bGViMTI4X3QgcmV0QWRkclJlZyA9IDA7Ci0JY29uc3Qgc3RydWN0IHVud2luZF90YWJsZSAqdGFibGU7Ci0Jc3RydWN0IHVud2luZF9zdGF0ZSBzdGF0ZTsKLQotCWlmIChVTldfUEMoZnJhbWUpID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICgodGFibGUgPSBmaW5kX3RhYmxlKHBjKSkgIT0gTlVMTAotCSAgICAmJiAhKHRhYmxlLT5zaXplICYgKHNpemVvZigqZmRlKSAtIDEpKSkgewotCQljb25zdCB1OCAqaGRyID0gdGFibGUtPmhlYWRlcjsKLQkJdW5zaWduZWQgbG9uZyB0YWJsZVNpemU7Ci0KLQkJc21wX3JtYigpOwotCQlpZiAoaGRyICYmIGhkclswXSA9PSAxKSB7Ci0JCQlzd2l0Y2goaGRyWzNdICYgRFdfRUhfUEVfRk9STSkgewotCQkJY2FzZSBEV19FSF9QRV9uYXRpdmU6IHRhYmxlU2l6ZSA9IHNpemVvZih1bnNpZ25lZCBsb25nKTsgYnJlYWs7Ci0JCQljYXNlIERXX0VIX1BFX2RhdGEyOiB0YWJsZVNpemUgPSAyOyBicmVhazsKLQkJCWNhc2UgRFdfRUhfUEVfZGF0YTQ6IHRhYmxlU2l6ZSA9IDQ7IGJyZWFrOwotCQkJY2FzZSBEV19FSF9QRV9kYXRhODogdGFibGVTaXplID0gODsgYnJlYWs7Ci0JCQlkZWZhdWx0OiB0YWJsZVNpemUgPSAwOyBicmVhazsKLQkJCX0KLQkJCXB0ciA9IGhkciArIDQ7Ci0JCQllbmQgPSBoZHIgKyB0YWJsZS0+aGRyc3o7Ci0JCQlpZiAodGFibGVTaXplCi0JCQkgICAgJiYgcmVhZF9wb2ludGVyKCZwdHIsIGVuZCwgaGRyWzFdLCAwLCAwKQotCQkJICAgICAgID09ICh1bnNpZ25lZCBsb25nKXRhYmxlLT5hZGRyZXNzCi0JCQkgICAgJiYgKGkgPSByZWFkX3BvaW50ZXIoJnB0ciwgZW5kLCBoZHJbMl0sIDAsIDApKSA+IDAKLQkJCSAgICAmJiBpID09IChlbmQgLSBwdHIpIC8gKDIgKiB0YWJsZVNpemUpCi0JCQkgICAgJiYgISgoZW5kIC0gcHRyKSAlICgyICogdGFibGVTaXplKSkpIHsKLQkJCQlkbyB7Ci0JCQkJCWNvbnN0IHU4ICpjdXIgPSBwdHIgKyAoaSAvIDIpICogKDIgKiB0YWJsZVNpemUpOwotCi0JCQkJCXN0YXJ0TG9jID0gcmVhZF9wb2ludGVyKCZjdXIsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGN1ciArIHRhYmxlU2l6ZSwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgaGRyWzNdLCAwLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyloZHIpOwotCQkJCQlpZiAocGMgPCBzdGFydExvYykKLQkJCQkJCWkgLz0gMjsKLQkJCQkJZWxzZSB7Ci0JCQkJCQlwdHIgPSBjdXIgLSB0YWJsZVNpemU7Ci0JCQkJCQlpID0gKGkgKyAxKSAvIDI7Ci0JCQkJCX0KLQkJCQl9IHdoaWxlIChzdGFydExvYyAmJiBpID4gMSk7Ci0JCQkJaWYgKGkgPT0gMQotCQkJCSAgICAmJiAoc3RhcnRMb2MgPSByZWFkX3BvaW50ZXIoJnB0ciwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciArIHRhYmxlU2l6ZSwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkclszXSwgMCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWhkcikpICE9IDAKLQkJCQkgICAgJiYgcGMgPj0gc3RhcnRMb2MpCi0JCQkJCWZkZSA9ICh2b2lkICopcmVhZF9wb2ludGVyKCZwdHIsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ciArIHRhYmxlU2l6ZSwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyWzNdLCAwLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyloZHIpOwotCQkJfQotCQl9Ci0JCWlmKGhkciAmJiAhZmRlKQotCQkJZHByaW50aygzLCAiQmluYXJ5IGxvb2t1cCBmb3IgJWx4IGZhaWxlZC4iLCBwYyk7Ci0KLQkJaWYgKGZkZSAhPSBOVUxMKSB7Ci0JCQljaWUgPSBjaWVfZm9yX2ZkZShmZGUsIHRhYmxlKTsKLQkJCXB0ciA9IChjb25zdCB1OCAqKShmZGUgKyAyKTsKLQkJCWlmKGNpZSAhPSBOVUxMCi0JCQkgICAmJiBjaWUgIT0gJmJhZF9jaWUKLQkJCSAgICYmIGNpZSAhPSAmbm90X2ZkZQotCQkJICAgJiYgKHB0clR5cGUgPSBmZGVfcG9pbnRlcl90eXBlKGNpZSkpID49IDAKLQkJCSAgICYmIHJlYWRfcG9pbnRlcigmcHRyLAotCQkJICAgICAgICAgICAgICAgICAgIChjb25zdCB1OCAqKShmZGUgKyAxKSArICpmZGUsCi0JCQkgICAgICAgICAgICAgICAgICAgcHRyVHlwZSwgMCwgMCkgPT0gc3RhcnRMb2MpIHsKLQkJCQlpZiAoIShwdHJUeXBlICYgRFdfRUhfUEVfaW5kaXJlY3QpKQotCQkJCQlwdHJUeXBlICY9IERXX0VIX1BFX0ZPUk18RFdfRUhfUEVfc2lnbmVkOwotCQkJCWVuZExvYyA9IHN0YXJ0TG9jCi0JCQkJICAgICAgICAgKyByZWFkX3BvaW50ZXIoJnB0ciwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdTggKikoZmRlICsgMSkgKyAqZmRlLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHB0clR5cGUsIDAsIDApOwotCQkJCWlmKHBjID49IGVuZExvYykKLQkJCQkJZmRlID0gTlVMTDsKLQkJCX0gZWxzZQotCQkJCWZkZSA9IE5VTEw7Ci0JCQlpZighZmRlKQotCQkJCWRwcmludGsoMSwgIkJpbmFyeSBsb29rdXAgcmVzdWx0IGZvciAlbHggZGlzY2FyZGVkLiIsIHBjKTsKLQkJfQotCQlpZiAoZmRlID09IE5VTEwpIHsKLQkJCWZvciAoZmRlID0gdGFibGUtPmFkZHJlc3MsIHRhYmxlU2l6ZSA9IHRhYmxlLT5zaXplOwotCQkJICAgICBjaWUgPSBOVUxMLCB0YWJsZVNpemUgPiBzaXplb2YoKmZkZSkKLQkJCSAgICAgJiYgdGFibGVTaXplIC0gc2l6ZW9mKCpmZGUpID49ICpmZGU7Ci0JCQkgICAgIHRhYmxlU2l6ZSAtPSBzaXplb2YoKmZkZSkgKyAqZmRlLAotCQkJICAgICBmZGUgKz0gMSArICpmZGUgLyBzaXplb2YoKmZkZSkpIHsKLQkJCQljaWUgPSBjaWVfZm9yX2ZkZShmZGUsIHRhYmxlKTsKLQkJCQlpZiAoY2llID09ICZiYWRfY2llKSB7Ci0JCQkJCWNpZSA9IE5VTEw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoY2llID09IE5VTEwKLQkJCQkgICAgfHwgY2llID09ICZub3RfZmRlCi0JCQkJICAgIHx8IChwdHJUeXBlID0gZmRlX3BvaW50ZXJfdHlwZShjaWUpKSA8IDApCi0JCQkJCWNvbnRpbnVlOwotCQkJCXB0ciA9IChjb25zdCB1OCAqKShmZGUgKyAyKTsKLQkJCQlzdGFydExvYyA9IHJlYWRfcG9pbnRlcigmcHRyLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1OCAqKShmZGUgKyAxKSArICpmZGUsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgcHRyVHlwZSwgMCwgMCk7Ci0JCQkJaWYgKCFzdGFydExvYykKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKCEocHRyVHlwZSAmIERXX0VIX1BFX2luZGlyZWN0KSkKLQkJCQkJcHRyVHlwZSAmPSBEV19FSF9QRV9GT1JNfERXX0VIX1BFX3NpZ25lZDsKLQkJCQllbmRMb2MgPSBzdGFydExvYwotCQkJCSAgICAgICAgICsgcmVhZF9wb2ludGVyKCZwdHIsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHU4ICopKGZkZSArIDEpICsgKmZkZSwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBwdHJUeXBlLCAwLCAwKTsKLQkJCQlpZiAocGMgPj0gc3RhcnRMb2MgJiYgcGMgPCBlbmRMb2MpCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYoIWZkZSkKLQkJCQlkcHJpbnRrKDMsICJMaW5lYXIgbG9va3VwIGZvciAlbHggZmFpbGVkLiIsIHBjKTsKLQkJfQotCX0KLQlpZiAoY2llICE9IE5VTEwpIHsKLQkJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7Ci0JCXN0YXRlLmNpZUVuZCA9IHB0cjsgLyoga2VlcCBoZXJlIHRlbXBvcmFyaWx5ICovCi0JCXB0ciA9IChjb25zdCB1OCAqKShjaWUgKyAyKTsKLQkJZW5kID0gKGNvbnN0IHU4ICopKGNpZSArIDEpICsgKmNpZTsKLQkJZnJhbWUtPmNhbGxfZnJhbWUgPSAxOwotCQlpZiAoKHN0YXRlLnZlcnNpb24gPSAqcHRyKSAhPSAxKQotCQkJY2llID0gTlVMTDsgLyogdW5zdXBwb3J0ZWQgdmVyc2lvbiAqLwotCQllbHNlIGlmICgqKytwdHIpIHsKLQkJCS8qIGNoZWNrIGlmIGF1Z21lbnRhdGlvbiBzaXplIGlzIGZpcnN0IChhbmQgdGh1cyBwcmVzZW50KSAqLwotCQkJaWYgKCpwdHIgPT0gJ3onKSB7Ci0JCQkJd2hpbGUgKCsrcHRyIDwgZW5kICYmICpwdHIpIHsKLQkJCQkJc3dpdGNoKCpwdHIpIHsKLQkJCQkJLyogY2hlY2sgZm9yIGlnbm9yYWJsZSAob3IgYWxyZWFkeSBoYW5kbGVkKQotCQkJCQkgKiBudWwtdGVybWluYXRlZCBhdWdtZW50YXRpb24gc3RyaW5nICovCi0JCQkJCWNhc2UgJ0wnOgotCQkJCQljYXNlICdQJzoKLQkJCQkJY2FzZSAnUic6Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJY2FzZSAnUyc6Ci0JCQkJCQlmcmFtZS0+Y2FsbF9mcmFtZSA9IDA7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWlmIChwdHIgPj0gZW5kIHx8ICpwdHIpCi0JCQkJY2llID0gTlVMTDsKLQkJfQotCQlpZighY2llKQotCQkJZHByaW50aygxLCAiQ0lFIHVudXNhYmxlICglcCwlcCkuIiwgcHRyLCBlbmQpOwotCQkrK3B0cjsKLQl9Ci0JaWYgKGNpZSAhPSBOVUxMKSB7Ci0JCS8qIGdldCBjb2RlIGFsaWdtZW50IGZhY3RvciAqLwotCQlzdGF0ZS5jb2RlQWxpZ24gPSBnZXRfdWxlYjEyOCgmcHRyLCBlbmQpOwotCQkvKiBnZXQgZGF0YSBhbGlnbWVudCBmYWN0b3IgKi8KLQkJc3RhdGUuZGF0YUFsaWduID0gZ2V0X3NsZWIxMjgoJnB0ciwgZW5kKTsKLQkJaWYgKHN0YXRlLmNvZGVBbGlnbiA9PSAwIHx8IHN0YXRlLmRhdGFBbGlnbiA9PSAwIHx8IHB0ciA+PSBlbmQpCi0JCQljaWUgPSBOVUxMOwotCQllbHNlIGlmIChVTldfUEMoZnJhbWUpICUgc3RhdGUuY29kZUFsaWduCi0JCSAgICAgICAgIHx8IFVOV19TUChmcmFtZSkgJSBzbGViMTI4YWJzKHN0YXRlLmRhdGFBbGlnbikpIHsKLQkJCWRwcmludGsoMSwgIklucHV0IHBvaW50ZXIocykgbWlzYWxpZ25lZCAoJWx4LCVseCkuIiwKLQkJCSAgICAgICAgVU5XX1BDKGZyYW1lKSwgVU5XX1NQKGZyYW1lKSk7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQl9IGVsc2UgewotCQkJcmV0QWRkclJlZyA9IHN0YXRlLnZlcnNpb24gPD0gMSA/ICpwdHIrKyA6IGdldF91bGViMTI4KCZwdHIsIGVuZCk7Ci0JCQkvKiBza2lwIGF1Z21lbnRhdGlvbiAqLwotCQkJaWYgKCgoY29uc3QgY2hhciAqKShjaWUgKyAyKSlbMV0gPT0gJ3onKSB7Ci0JCQkJdWxlYjEyOF90IGF1Z1NpemUgPSBnZXRfdWxlYjEyOCgmcHRyLCBlbmQpOwotCi0JCQkJcHRyICs9IGF1Z1NpemU7Ci0JCQl9Ci0JCQlpZiAocHRyID4gZW5kCi0JCQkgICB8fCByZXRBZGRyUmVnID49IEFSUkFZX1NJWkUocmVnX2luZm8pCi0JCQkgICB8fCBSRUdfSU5WQUxJRChyZXRBZGRyUmVnKQotCQkJICAgfHwgcmVnX2luZm9bcmV0QWRkclJlZ10ud2lkdGggIT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCQkJCWNpZSA9IE5VTEw7Ci0JCX0KLQkJaWYoIWNpZSkKLQkJCWRwcmludGsoMSwgIkNJRSB2YWxpZGF0aW9uIGZhaWxlZCAoJXAsJXApLiIsIHB0ciwgZW5kKTsKLQl9Ci0JaWYgKGNpZSAhPSBOVUxMKSB7Ci0JCXN0YXRlLmNpZVN0YXJ0ID0gcHRyOwotCQlwdHIgPSBzdGF0ZS5jaWVFbmQ7Ci0JCXN0YXRlLmNpZUVuZCA9IGVuZDsKLQkJZW5kID0gKGNvbnN0IHU4ICopKGZkZSArIDEpICsgKmZkZTsKLQkJLyogc2tpcCBhdWdtZW50YXRpb24gKi8KLQkJaWYgKCgoY29uc3QgY2hhciAqKShjaWUgKyAyKSlbMV0gPT0gJ3onKSB7Ci0JCQl1bGViMTI4X3QgYXVnU2l6ZSA9IGdldF91bGViMTI4KCZwdHIsIGVuZCk7Ci0KLQkJCWlmICgocHRyICs9IGF1Z1NpemUpID4gZW5kKQotCQkJCWZkZSA9IE5VTEw7Ci0JCX0KLQkJaWYoIWZkZSkKLQkJCWRwcmludGsoMSwgIkZERSB2YWxpZGF0aW9uIGZhaWxlZCAoJXAsJXApLiIsIHB0ciwgZW5kKTsKLQl9Ci0JaWYgKGNpZSA9PSBOVUxMIHx8IGZkZSA9PSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKLQkJdW5zaWduZWQgbG9uZyB0b3AsIGJvdHRvbTsKLQotCQlpZiAoKFVOV19TUChmcmFtZSkgfCBVTldfRlAoZnJhbWUpKSAlIHNpemVvZih1bnNpZ25lZCBsb25nKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JCXRvcCA9IFNUQUNLX1RPUChmcmFtZS0+dGFzayk7Ci0JCWJvdHRvbSA9IFNUQUNLX0JPVFRPTShmcmFtZS0+dGFzayk7Ci0jIGlmIEZSQU1FX1JFVEFERFJfT0ZGU0VUIDwgMAotCQlpZiAoVU5XX1NQKGZyYW1lKSA8IHRvcAotCQkgICAgJiYgVU5XX0ZQKGZyYW1lKSA8PSBVTldfU1AoZnJhbWUpCi0JCSAgICAmJiBib3R0b20gPCBVTldfRlAoZnJhbWUpCi0jIGVsc2UKLQkJaWYgKFVOV19TUChmcmFtZSkgPiB0b3AKLQkJICAgICYmIFVOV19GUChmcmFtZSkgPj0gVU5XX1NQKGZyYW1lKQotCQkgICAgJiYgYm90dG9tID4gVU5XX0ZQKGZyYW1lKQotIyBlbmRpZgotCQkgICAmJiAhKChVTldfU1AoZnJhbWUpIHwgVU5XX0ZQKGZyYW1lKSkKLQkJICAgICAgICAmIChzaXplb2YodW5zaWduZWQgbG9uZykgLSAxKSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgbGluazsKLQotCQkJaWYgKCFwcm9iZV9rZXJuZWxfYWRkcmVzcygKLQkJCSAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyAqKShVTldfRlAoZnJhbWUpCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBGUkFNRV9MSU5LX09GRlNFVCksCi0JCQkJCQkgIGxpbmspCi0jIGlmIEZSQU1FX1JFVEFERFJfT0ZGU0VUIDwgMAotCQkJICAgJiYgbGluayA+IGJvdHRvbSAmJiBsaW5rIDwgVU5XX0ZQKGZyYW1lKQotIyBlbHNlCi0JCQkgICAmJiBsaW5rID4gVU5XX0ZQKGZyYW1lKSAmJiBsaW5rIDwgYm90dG9tCi0jIGVuZGlmCi0JCQkgICAmJiAhKGxpbmsgJiAoc2l6ZW9mKGxpbmspIC0gMSkpCi0JCQkgICAmJiAhcHJvYmVfa2VybmVsX2FkZHJlc3MoCi0JCQkgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyAqKShVTldfRlAoZnJhbWUpCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEZSQU1FX1JFVEFERFJfT0ZGU0VUKSwgVU5XX1BDKGZyYW1lKSkpIHsKLQkJCQlVTldfU1AoZnJhbWUpID0gVU5XX0ZQKGZyYW1lKSArIEZSQU1FX1JFVEFERFJfT0ZGU0VUCi0jIGlmIEZSQU1FX1JFVEFERFJfT0ZGU0VUIDwgMAotCQkJCQktCi0jIGVsc2UKLQkJCQkJKwotIyBlbmRpZgotCQkJCQkgIHNpemVvZihVTldfUEMoZnJhbWUpKTsKLQkJCQlVTldfRlAoZnJhbWUpID0gbGluazsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotI2VuZGlmCi0JCXJldHVybiAtRU5YSU87Ci0JfQotCXN0YXRlLm9yZyA9IHN0YXJ0TG9jOwotCW1lbWNweSgmc3RhdGUuY2ZhLCAmYmFkQ0ZBLCBzaXplb2Yoc3RhdGUuY2ZhKSk7Ci0JLyogcHJvY2VzcyBpbnN0cnVjdGlvbnMgKi8KLQlpZiAoIXByb2Nlc3NDRkkocHRyLCBlbmQsIHBjLCBwdHJUeXBlLCAmc3RhdGUpCi0JICAgfHwgc3RhdGUubG9jID4gZW5kTG9jCi0JICAgfHwgc3RhdGUucmVnc1tyZXRBZGRyUmVnXS53aGVyZSA9PSBOb3doZXJlCi0JICAgfHwgc3RhdGUuY2ZhLnJlZyA+PSBBUlJBWV9TSVpFKHJlZ19pbmZvKQotCSAgIHx8IHJlZ19pbmZvW3N0YXRlLmNmYS5yZWddLndpZHRoICE9IHNpemVvZih1bnNpZ25lZCBsb25nKQotCSAgIHx8IEZSQU1FX1JFRyhzdGF0ZS5jZmEucmVnLCB1bnNpZ25lZCBsb25nKSAlIHNpemVvZih1bnNpZ25lZCBsb25nKQotCSAgIHx8IHN0YXRlLmNmYS5vZmZzICUgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7Ci0JCWRwcmludGsoMSwgIlVudXNhYmxlIHVud2luZCBpbmZvICglcCwlcCkuIiwgcHRyLCBlbmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JLyogdXBkYXRlIGZyYW1lICovCi0jaWZuZGVmIENPTkZJR19BU19DRklfU0lHTkFMX0ZSQU1FCi0JaWYoZnJhbWUtPmNhbGxfZnJhbWUKLQkgICAmJiAhVU5XX0RFRkFVTFRfUkEoc3RhdGUucmVnc1tyZXRBZGRyUmVnXSwgc3RhdGUuZGF0YUFsaWduKSkKLQkJZnJhbWUtPmNhbGxfZnJhbWUgPSAwOwotI2VuZGlmCi0JY2ZhID0gRlJBTUVfUkVHKHN0YXRlLmNmYS5yZWcsIHVuc2lnbmVkIGxvbmcpICsgc3RhdGUuY2ZhLm9mZnM7Ci0Jc3RhcnRMb2MgPSBtaW4oKHVuc2lnbmVkIGxvbmcpVU5XX1NQKGZyYW1lKSwgY2ZhKTsKLQllbmRMb2MgPSBtYXgoKHVuc2lnbmVkIGxvbmcpVU5XX1NQKGZyYW1lKSwgY2ZhKTsKLQlpZiAoU1RBQ0tfTElNSVQoc3RhcnRMb2MpICE9IFNUQUNLX0xJTUlUKGVuZExvYykpIHsKLQkJc3RhcnRMb2MgPSBtaW4oU1RBQ0tfTElNSVQoY2ZhKSwgY2ZhKTsKLQkJZW5kTG9jID0gbWF4KFNUQUNLX0xJTUlUKGNmYSksIGNmYSk7Ci0JfQotI2lmbmRlZiBDT05GSUdfNjRCSVQKLSMgZGVmaW5lIENBU0VTIENBU0UoOCk7IENBU0UoMTYpOyBDQVNFKDMyKQotI2Vsc2UKLSMgZGVmaW5lIENBU0VTIENBU0UoOCk7IENBU0UoMTYpOyBDQVNFKDMyKTsgQ0FTRSg2NCkKLSNlbmRpZgotCXBjID0gVU5XX1BDKGZyYW1lKTsKLQlzcCA9IFVOV19TUChmcmFtZSk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RhdGUucmVncyk7ICsraSkgewotCQlpZiAoUkVHX0lOVkFMSUQoaSkpIHsKLQkJCWlmIChzdGF0ZS5yZWdzW2ldLndoZXJlID09IE5vd2hlcmUpCi0JCQkJY29udGludWU7Ci0JCQlkcHJpbnRrKDEsICJDYW5ub3QgcmVzdG9yZSByZWdpc3RlciAldSAoJWQpLiIsCi0JCQkgICAgICAgIGksIHN0YXRlLnJlZ3NbaV0ud2hlcmUpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJc3dpdGNoKHN0YXRlLnJlZ3NbaV0ud2hlcmUpIHsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQljYXNlIFJlZ2lzdGVyOgotCQkJaWYgKHN0YXRlLnJlZ3NbaV0udmFsdWUgPj0gQVJSQVlfU0laRShyZWdfaW5mbykKLQkJCSAgIHx8IFJFR19JTlZBTElEKHN0YXRlLnJlZ3NbaV0udmFsdWUpCi0JCQkgICB8fCByZWdfaW5mb1tpXS53aWR0aCA+IHJlZ19pbmZvW3N0YXRlLnJlZ3NbaV0udmFsdWVdLndpZHRoKSB7Ci0JCQkJZHByaW50aygxLCAiQ2Fubm90IHJlc3RvcmUgcmVnaXN0ZXIgJXUgZnJvbSByZWdpc3RlciAlbHUuIiwKLQkJCQkgICAgICAgIGksIHN0YXRlLnJlZ3NbaV0udmFsdWUpOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQkJc3dpdGNoKHJlZ19pbmZvW3N0YXRlLnJlZ3NbaV0udmFsdWVdLndpZHRoKSB7Ci0jZGVmaW5lIENBU0UobikgXAotCQkJY2FzZSBzaXplb2YodSMjbik6IFwKLQkJCQlzdGF0ZS5yZWdzW2ldLnZhbHVlID0gRlJBTUVfUkVHKHN0YXRlLnJlZ3NbaV0udmFsdWUsIFwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHUjI24pOyBcCi0JCQkJYnJlYWsKLQkJCUNBU0VTOwotI3VuZGVmIENBU0UKLQkJCWRlZmF1bHQ6Ci0JCQkJZHByaW50aygxLCAiVW5zdXBwb3J0ZWQgcmVnaXN0ZXIgc2l6ZSAldSAoJWx1KS4iLAotCQkJCSAgICAgICAgcmVnX2luZm9bc3RhdGUucmVnc1tpXS52YWx1ZV0ud2lkdGgsCi0JCQkJICAgICAgICBzdGF0ZS5yZWdzW2ldLnZhbHVlKTsKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0YXRlLnJlZ3MpOyArK2kpIHsKLQkJaWYgKFJFR19JTlZBTElEKGkpKQotCQkJY29udGludWU7Ci0JCXN3aXRjaChzdGF0ZS5yZWdzW2ldLndoZXJlKSB7Ci0JCWNhc2UgTm93aGVyZToKLQkJCWlmIChyZWdfaW5mb1tpXS53aWR0aCAhPSBzaXplb2YoVU5XX1NQKGZyYW1lKSkKLQkJCSAgIHx8ICZGUkFNRV9SRUcoaSwgX190eXBlb2ZfXyhVTldfU1AoZnJhbWUpKSkKLQkJCSAgICAgICE9ICZVTldfU1AoZnJhbWUpKQotCQkJCWNvbnRpbnVlOwotCQkJVU5XX1NQKGZyYW1lKSA9IGNmYTsKLQkJCWJyZWFrOwotCQljYXNlIFJlZ2lzdGVyOgotCQkJc3dpdGNoKHJlZ19pbmZvW2ldLndpZHRoKSB7Ci0jZGVmaW5lIENBU0UobikgY2FzZSBzaXplb2YodSMjbik6IFwKLQkJCQlGUkFNRV9SRUcoaSwgdSMjbikgPSBzdGF0ZS5yZWdzW2ldLnZhbHVlOyBcCi0JCQkJYnJlYWsKLQkJCUNBU0VTOwotI3VuZGVmIENBU0UKLQkJCWRlZmF1bHQ6Ci0JCQkJZHByaW50aygxLCAiVW5zdXBwb3J0ZWQgcmVnaXN0ZXIgc2l6ZSAldSAoJXUpLiIsCi0JCQkJICAgICAgICByZWdfaW5mb1tpXS53aWR0aCwgaSk7Ci0JCQkJcmV0dXJuIC1FSU87Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBWYWx1ZToKLQkJCWlmIChyZWdfaW5mb1tpXS53aWR0aCAhPSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKLQkJCQlkcHJpbnRrKDEsICJVbnN1cHBvcnRlZCB2YWx1ZSBzaXplICV1ICgldSkuIiwKLQkJCQkgICAgICAgIHJlZ19pbmZvW2ldLndpZHRoLCBpKTsKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KLQkJCUZSQU1FX1JFRyhpLCB1bnNpZ25lZCBsb25nKSA9IGNmYSArIHN0YXRlLnJlZ3NbaV0udmFsdWUKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGUuZGF0YUFsaWduOwotCQkJYnJlYWs7Ci0JCWNhc2UgTWVtb3J5OiB7Ci0JCQkJdW5zaWduZWQgbG9uZyBhZGRyID0gY2ZhICsgc3RhdGUucmVnc1tpXS52YWx1ZQotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGUuZGF0YUFsaWduOwotCi0JCQkJaWYgKChzdGF0ZS5yZWdzW2ldLnZhbHVlICogc3RhdGUuZGF0YUFsaWduKQotCQkJCSAgICAlIHNpemVvZih1bnNpZ25lZCBsb25nKQotCQkJCSAgICB8fCBhZGRyIDwgc3RhcnRMb2MKLQkJCQkgICAgfHwgYWRkciArIHNpemVvZih1bnNpZ25lZCBsb25nKSA8IGFkZHIKLQkJCQkgICAgfHwgYWRkciArIHNpemVvZih1bnNpZ25lZCBsb25nKSA+IGVuZExvYykgewotCQkJCQlkcHJpbnRrKDEsICJCYWQgbWVtb3J5IGxvY2F0aW9uICVseCAoJWx4KS4iLAotCQkJCQkgICAgICAgIGFkZHIsIHN0YXRlLnJlZ3NbaV0udmFsdWUpOwotCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQl9Ci0JCQkJc3dpdGNoKHJlZ19pbmZvW2ldLndpZHRoKSB7Ci0jZGVmaW5lIENBU0UobikgICAgIGNhc2Ugc2l6ZW9mKHUjI24pOiBcCi0JCQkJCXByb2JlX2tlcm5lbF9hZGRyZXNzKCh1IyNuICopYWRkciwgRlJBTUVfUkVHKGksIHUjI24pKTsgXAotCQkJCQlicmVhawotCQkJCUNBU0VTOwotI3VuZGVmIENBU0UKLQkJCQlkZWZhdWx0OgotCQkJCQlkcHJpbnRrKDEsICJVbnN1cHBvcnRlZCBtZW1vcnkgc2l6ZSAldSAoJXUpLiIsCi0JCQkJCSAgICAgICAgcmVnX2luZm9baV0ud2lkdGgsIGkpOwotCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChVTldfUEMoZnJhbWUpICUgc3RhdGUuY29kZUFsaWduCi0JICAgIHx8IFVOV19TUChmcmFtZSkgJSBzbGViMTI4YWJzKHN0YXRlLmRhdGFBbGlnbikpIHsKLQkJZHByaW50aygxLCAiT3V0cHV0IHBvaW50ZXIocykgbWlzYWxpZ25lZCAoJWx4LCVseCkuIiwKLQkJICAgICAgICBVTldfUEMoZnJhbWUpLCBVTldfU1AoZnJhbWUpKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWlmIChwYyA9PSBVTldfUEMoZnJhbWUpICYmIHNwID09IFVOV19TUChmcmFtZSkpIHsKLQkJZHByaW50aygxLCAiTm8gcHJvZ3Jlc3MgKCVseCwlbHgpLiIsIHBjLCBzcCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiAwOwotI3VuZGVmIENBU0VTCi0jdW5kZWYgRlJBTUVfUkVHCi19Ci1FWFBPUlRfU1lNQk9MKHVud2luZCk7Ci0KLWludCB1bndpbmRfaW5pdF9mcmFtZV9pbmZvKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLypjb25zdCovIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWluZm8tPnRhc2sgPSB0c2s7Ci0JaW5mby0+Y2FsbF9mcmFtZSA9IDA7Ci0JYXJjaF91bndfaW5pdF9mcmFtZV9pbmZvKGluZm8sIHJlZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHVud2luZF9pbml0X2ZyYW1lX2luZm8pOwotCi0vKgotICogUHJlcGFyZSB0byB1bndpbmQgYSBibG9ja2VkIHRhc2suCi0gKi8KLWludCB1bndpbmRfaW5pdF9ibG9ja2VkKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWluZm8tPnRhc2sgPSB0c2s7Ci0JaW5mby0+Y2FsbF9mcmFtZSA9IDA7Ci0JYXJjaF91bndfaW5pdF9ibG9ja2VkKGluZm8pOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHVud2luZF9pbml0X2Jsb2NrZWQpOwotCi0vKgotICogUHJlcGFyZSB0byB1bndpbmQgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRocmVhZC4KLSAqLwotaW50IHVud2luZF9pbml0X3J1bm5pbmcoc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgYXNtbGlua2FnZSBpbnQgKCpjYWxsYmFjaykoc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKQotewotCWluZm8tPnRhc2sgPSBjdXJyZW50OwotCWluZm8tPmNhbGxfZnJhbWUgPSAwOwotCi0JcmV0dXJuIGFyY2hfdW53aW5kX2luaXRfcnVubmluZyhpbmZvLCBjYWxsYmFjaywgYXJnKTsKLX0KLUVYUE9SVF9TWU1CT0wodW53aW5kX2luaXRfcnVubmluZyk7Ci0KLS8qCi0gKiBVbndpbmQgdW50aWwgdGhlIHJldHVybiBwb2ludGVyIGlzIGluIHVzZXItbGFuZCAob3IgdW50aWwgYW4gZXJyb3IKLSAqIG9jY3VycykuICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgbmVnYXRpdmUgbnVtYmVyIGluIGNhc2Ugb2YKLSAqIGVycm9yLgotICovCi1pbnQgdW53aW5kX3RvX3VzZXIoc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvKQotewotCXdoaWxlICghYXJjaF91bndfdXNlcl9tb2RlKGluZm8pKSB7Ci0JCWludCBlcnIgPSB1bndpbmQoaW5mbyk7Ci0KLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTCh1bndpbmRfdG9fdXNlcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggNmIxODY3NS4uYTNkYTA3YyAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtODUsMjcgKzg1LDI0IEBACiAJcmV0dXJuIGxpc3RfZW1wdHkoJndxLT5saXN0KTsKIH0KIAorLyoKKyAqIFNldCB0aGUgd29ya3F1ZXVlIG9uIHdoaWNoIGEgd29yayBpdGVtIGlzIHRvIGJlIHJ1bgorICogLSBNdXN0ICpvbmx5KiBiZSBjYWxsZWQgaWYgdGhlIHBlbmRpbmcgZmxhZyBpcyBzZXQKKyAqLwogc3RhdGljIGlubGluZSB2b2lkIHNldF93cV9kYXRhKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywgdm9pZCAqd3EpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXcsIG9sZCwgcmVzOworCXVuc2lnbmVkIGxvbmcgbmV3OwogCi0JLyogYXNzdW1lIHRoZSBwZW5kaW5nIGZsYWcgaXMgYWxyZWFkeSBzZXQgYW5kIHRoYXQgdGhlIHRhc2sgaGFzIGFscmVhZHkKLQkgKiBiZWVuIHF1ZXVlZCBvbiB0aGlzIHdvcmtxdWV1ZSAqLworCUJVR19PTighd29ya19wZW5kaW5nKHdvcmspKTsKKwogCW5ldyA9ICh1bnNpZ25lZCBsb25nKSB3cSB8ICgxVUwgPDwgV09SS19TVFJVQ1RfUEVORElORyk7Ci0JcmVzID0gd29yay0+bWFuYWdlbWVudDsKLQlpZiAocmVzICE9IG5ldykgewotCQlkbyB7Ci0JCQlvbGQgPSByZXM7Ci0JCQluZXcgPSAodW5zaWduZWQgbG9uZykgd3E7Ci0JCQluZXcgfD0gKG9sZCAmIFdPUktfU1RSVUNUX0ZMQUdfTUFTSyk7Ci0JCQlyZXMgPSBjbXB4Y2hnKCZ3b3JrLT5tYW5hZ2VtZW50LCBvbGQsIG5ldyk7Ci0JCX0gd2hpbGUgKHJlcyAhPSBvbGQpOwotCX0KKwluZXcgfD0gV09SS19TVFJVQ1RfRkxBR19NQVNLICYgKndvcmtfZGF0YV9iaXRzKHdvcmspOworCWF0b21pY19sb25nX3NldCgmd29yay0+ZGF0YSwgbmV3KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkICpnZXRfd3FfZGF0YShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JcmV0dXJuICh2b2lkICopICh3b3JrLT5tYW5hZ2VtZW50ICYgV09SS19TVFJVQ1RfV1FfREFUQV9NQVNLKTsKKwlyZXR1cm4gKHZvaWQgKikgKGF0b21pY19sb25nX3JlYWQoJndvcmstPmRhdGEpICYgV09SS19TVFJVQ1RfV1FfREFUQV9NQVNLKTsKIH0KIAogc3RhdGljIGludCBfX3J1bl93b3JrKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0xMzYsNyArMTMzLDcgQEAKIAkJbGlzdF9kZWxfaW5pdCgmd29yay0+ZW50cnkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjd3EtPmxvY2ssIGZsYWdzKTsKIAotCQlpZiAoIXRlc3RfYml0KFdPUktfU1RSVUNUX05PQVVUT1JFTCwgJndvcmstPm1hbmFnZW1lbnQpKQorCQlpZiAoIXRlc3RfYml0KFdPUktfU1RSVUNUX05PQVVUT1JFTCwgd29ya19kYXRhX2JpdHMod29yaykpKQogCQkJd29ya19yZWxlYXNlKHdvcmspOwogCQlmKHdvcmspOwogCkBAIC0yMDksNyArMjA2LDcgQEAKIHsKIAlpbnQgcmV0ID0gMCwgY3B1ID0gZ2V0X2NwdSgpOwogCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsICZ3b3JrLT5tYW5hZ2VtZW50KSkgeworCWlmICghdGVzdF9hbmRfc2V0X2JpdChXT1JLX1NUUlVDVF9QRU5ESU5HLCB3b3JrX2RhdGFfYml0cyh3b3JrKSkpIHsKIAkJaWYgKHVubGlrZWx5KGlzX3NpbmdsZV90aHJlYWRlZCh3cSkpKQogCQkJY3B1ID0gc2luZ2xldGhyZWFkX2NwdTsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZ3b3JrLT5lbnRyeSkpOwpAQCAtMjM2LDcgKzIzMyw3IEBACiAvKioKICAqIHF1ZXVlX2RlbGF5ZWRfd29yayAtIHF1ZXVlIHdvcmsgb24gYSB3b3JrcXVldWUgYWZ0ZXIgZGVsYXkKICAqIEB3cTogd29ya3F1ZXVlIHRvIHVzZQotICogQHdvcms6IGRlbGF5YWJsZSB3b3JrIHRvIHF1ZXVlCisgKiBAZHdvcms6IGRlbGF5YWJsZSB3b3JrIHRvIHF1ZXVlCiAgKiBAZGVsYXk6IG51bWJlciBvZiBqaWZmaWVzIHRvIHdhaXQgYmVmb3JlIHF1ZXVlaW5nCiAgKgogICogUmV0dXJucyAwIGlmIEB3b3JrIHdhcyBhbHJlYWR5IG9uIGEgcXVldWUsIG5vbi16ZXJvIG90aGVyd2lzZS4KQEAgLTI1MSw3ICsyNDgsNyBAQAogCWlmIChkZWxheSA9PSAwKQogCQlyZXR1cm4gcXVldWVfd29yayh3cSwgd29yayk7CiAKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19TVFJVQ1RfUEVORElORywgJndvcmstPm1hbmFnZW1lbnQpKSB7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKSkgewogCQlCVUdfT04odGltZXJfcGVuZGluZyh0aW1lcikpOwogCQlCVUdfT04oIWxpc3RfZW1wdHkoJndvcmstPmVudHJ5KSk7CiAKQEAgLTI3MSw3ICsyNjgsNyBAQAogICogcXVldWVfZGVsYXllZF93b3JrX29uIC0gcXVldWUgd29yayBvbiBzcGVjaWZpYyBDUFUgYWZ0ZXIgZGVsYXkKICAqIEBjcHU6IENQVSBudW1iZXIgdG8gZXhlY3V0ZSB3b3JrIG9uCiAgKiBAd3E6IHdvcmtxdWV1ZSB0byB1c2UKLSAqIEB3b3JrOiB3b3JrIHRvIHF1ZXVlCisgKiBAZHdvcms6IHdvcmsgdG8gcXVldWUKICAqIEBkZWxheTogbnVtYmVyIG9mIGppZmZpZXMgdG8gd2FpdCBiZWZvcmUgcXVldWVpbmcKICAqCiAgKiBSZXR1cm5zIDAgaWYgQHdvcmsgd2FzIGFscmVhZHkgb24gYSBxdWV1ZSwgbm9uLXplcm8gb3RoZXJ3aXNlLgpAQCAtMjgzLDcgKzI4MCw3IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyID0gJmR3b3JrLT50aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsgPSAmZHdvcmstPndvcms7CiAKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19TVFJVQ1RfUEVORElORywgJndvcmstPm1hbmFnZW1lbnQpKSB7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKSkgewogCQlCVUdfT04odGltZXJfcGVuZGluZyh0aW1lcikpOwogCQlCVUdfT04oIWxpc3RfZW1wdHkoJndvcmstPmVudHJ5KSk7CiAKQEAgLTMyNCw3ICszMjEsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjd3EtPmxvY2ssIGZsYWdzKTsKIAogCQlCVUdfT04oZ2V0X3dxX2RhdGEod29yaykgIT0gY3dxKTsKLQkJaWYgKCF0ZXN0X2JpdChXT1JLX1NUUlVDVF9OT0FVVE9SRUwsICZ3b3JrLT5tYW5hZ2VtZW50KSkKKwkJaWYgKCF0ZXN0X2JpdChXT1JLX1NUUlVDVF9OT0FVVE9SRUwsIHdvcmtfZGF0YV9iaXRzKHdvcmspKSkKIAkJCXdvcmtfcmVsZWFzZSh3b3JrKTsKIAkJZih3b3JrKTsKIApAQCAtNjQwLDkgKzYzNywxMSBAQAogCiAJbXV0ZXhfbG9jaygmd29ya3F1ZXVlX211dGV4KTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlJTklUX1dPUksocGVyX2NwdV9wdHIod29ya3MsIGNwdSksIGZ1bmMpOwotCQlfX3F1ZXVlX3dvcmsocGVyX2NwdV9wdHIoa2V2ZW50ZF93cS0+Y3B1X3dxLCBjcHUpLAotCQkJCXBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpKTsKKwkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrID0gcGVyX2NwdV9wdHIod29ya3MsIGNwdSk7CisKKwkJSU5JVF9XT1JLKHdvcmssIGZ1bmMpOworCQlzZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKTsKKwkJX19xdWV1ZV93b3JrKHBlcl9jcHVfcHRyKGtldmVudGRfd3EtPmNwdV93cSwgY3B1KSwgd29yayk7CiAJfQogCW11dGV4X3VubG9jaygmd29ya3F1ZXVlX211dGV4KTsKIAlmbHVzaF93b3JrcXVldWUoa2V2ZW50ZF93cSk7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IDczNGNlOTUuLjliMDM1ODEgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC00LDYgKzQsOSBAQAogCiBtZW51ICJMaWJyYXJ5IHJvdXRpbmVzIgogCitjb25maWcgQklUUkVWRVJTRQorCXRyaXN0YXRlCisKIGNvbmZpZyBDUkNfQ0NJVFQKIAl0cmlzdGF0ZSAiQ1JDLUNDSVRUIGZ1bmN0aW9ucyIKIAloZWxwCkBAIC0yMyw2ICsyNiw3IEBACiBjb25maWcgQ1JDMzIKIAl0cmlzdGF0ZSAiQ1JDMzIgZnVuY3Rpb25zIgogCWRlZmF1bHQgeQorCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscAogCSAgVGhpcyBvcHRpb24gaXMgcHJvdmlkZWQgZm9yIHRoZSBjYXNlIHdoZXJlIG5vIGluLWtlcm5lbC10cmVlCiAJICBtb2R1bGVzIHJlcXVpcmUgQ1JDMzIgZnVuY3Rpb25zLCBidXQgYSBtb2R1bGUgYnVpbHQgb3V0c2lkZSB0aGUKQEAgLTk3LDQgKzEwMSw5IEBACiBjb25maWcgUExJU1QKIAlib29sZWFuCiAKK2NvbmZpZyBJT01BUF9DT1BZCisJYm9vbGVhbgorCWRlcGVuZHMgb24gIVVNTAorCWRlZmF1bHQgeQorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IGI3NWZlZDcuLjVjMjY4MTg3IDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtNDcsNiArNDcsMzAgQEAKIAkgIHlvdSByZWFsbHkgbmVlZCBpdCwgYW5kIHdoYXQgdGhlIG1lcmdlIHBsYW4gdG8gdGhlIG1haW5saW5lIGtlcm5lbCBmb3IKIAkgIHlvdXIgbW9kdWxlIGlzLgogCitjb25maWcgREVCVUdfRlMKKwlib29sICJEZWJ1ZyBGaWxlc3lzdGVtIgorCWRlcGVuZHMgb24gU1lTRlMKKwloZWxwCisJICBkZWJ1Z2ZzIGlzIGEgdmlydHVhbCBmaWxlIHN5c3RlbSB0aGF0IGtlcm5lbCBkZXZlbG9wZXJzIHVzZSB0byBwdXQKKwkgIGRlYnVnZ2luZyBmaWxlcyBpbnRvLiAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIGJlIGFibGUgdG8gcmVhZCBhbmQKKwkgIHdyaXRlIHRvIHRoZXNlIGZpbGVzLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSEVBREVSU19DSEVDSworCWJvb2wgIlJ1biAnbWFrZSBoZWFkZXJzX2NoZWNrJyB3aGVuIGJ1aWxkaW5nIHZtbGludXgiCisJZGVwZW5kcyBvbiAhVU1MCisJaGVscAorCSAgVGhpcyBvcHRpb24gd2lsbCBleHRyYWN0IHRoZSB1c2VyLXZpc2libGUga2VybmVsIGhlYWRlcnMgd2hlbmV2ZXIKKwkgIGJ1aWxkaW5nIHRoZSBrZXJuZWwsIGFuZCB3aWxsIHJ1biBiYXNpYyBzYW5pdHkgY2hlY2tzIG9uIHRoZW0gdG8KKwkgIGVuc3VyZSB0aGF0IGV4cG9ydGVkIGZpbGVzIGRvIG5vdCBhdHRlbXB0IHRvIGluY2x1ZGUgZmlsZXMgd2hpY2gKKwkgIHdlcmUgbm90IGV4cG9ydGVkLCBldGMuCisKKwkgIElmIHlvdSdyZSBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBoZWFkZXIgZmlsZXMgd2hpY2ggYXJlCisJICByZWxldmFudCBmb3IgdXNlcnNwYWNlLCBzYXkgJ1knLCBhbmQgY2hlY2sgdGhlIGhlYWRlcnMKKwkgIGV4cG9ydGVkIHRvICQoSU5TVEFMTF9IRFJfUEFUSCkgKHVzdWFsbHkgJ3Vzci9pbmNsdWRlJyBpbgorCSAgeW91ciBidWlsZCB0cmVlKSwgdG8gbWFrZSBzdXJlIHRoZXkncmUgc3VpdGFibGUuCisKIGNvbmZpZyBERUJVR19LRVJORUwKIAlib29sICJLZXJuZWwgZGVidWdnaW5nIgogCWhlbHAKQEAgLTI4NSw3ICszMDksNyBAQAogY29uZmlnIERFQlVHX0JVR1ZFUkJPU0UKIAlib29sICJWZXJib3NlIEJVRygpIHJlcG9ydGluZyAoYWRkcyA3MEspIiBpZiBERUJVR19LRVJORUwgJiYgRU1CRURERUQKIAlkZXBlbmRzIG9uIEJVRwotCWRlcGVuZHMgb24gQVJNIHx8IEFSTTI2IHx8IEFWUjMyIHx8IE0zMlIgfHwgTTY4SyB8fCBTUEFSQzMyIHx8IFNQQVJDNjQgfHwgWDg2XzMyIHx8IEZSViB8fCBTVVBFUkgKKwlkZXBlbmRzIG9uIEFSTSB8fCBBUk0yNiB8fCBBVlIzMiB8fCBNMzJSIHx8IE02OEsgfHwgU1BBUkMzMiB8fCBTUEFSQzY0IHx8IEZSViB8fCBTVVBFUkggfHwgR0VORVJJQ19CVUcKIAlkZWZhdWx0ICFFTUJFRERFRAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gbWFrZSBCVUcoKSBwYW5pY3Mgb3V0cHV0IHRoZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyCkBAIC0zMDIsMTYgKzMyNiw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBERUJVR19GUwotCWJvb2wgIkRlYnVnIEZpbGVzeXN0ZW0iCi0JZGVwZW5kcyBvbiBTWVNGUwotCWhlbHAKLQkgIGRlYnVnZnMgaXMgYSB2aXJ0dWFsIGZpbGUgc3lzdGVtIHRoYXQga2VybmVsIGRldmVsb3BlcnMgdXNlIHRvIHB1dAotCSAgZGVidWdnaW5nIGZpbGVzIGludG8uICBFbmFibGUgdGhpcyBvcHRpb24gdG8gYmUgYWJsZSB0byByZWFkIGFuZAotCSAgd3JpdGUgdG8gdGhlc2UgZmlsZXMuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBERUJVR19WTQogCWJvb2wgIkRlYnVnIFZNIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCkBAIC0zNDAsMjQgKzM1NCw2IEBACiAJICBzb21lIGFyY2hpdGVjdHVyZXMgb3IgaWYgeW91IHVzZSBleHRlcm5hbCBkZWJ1Z2dlcnMuCiAJICBJZiB5b3UgZG9uJ3QgZGVidWcgdGhlIGtlcm5lbCwgeW91IGNhbiBzYXkgTi4KIAotY29uZmlnIFVOV0lORF9JTkZPCi0JYm9vbCAiQ29tcGlsZSB0aGUga2VybmVsIHdpdGggZnJhbWUgdW53aW5kIGluZm9ybWF0aW9uIgotCWRlcGVuZHMgb24gIUlBNjQgJiYgIVBBUklTQyAmJiAhQVJNCi0JZGVwZW5kcyBvbiAhTU9EVUxFUyB8fCAhKE1JUFMgfHwgUFBDIHx8IFNVUEVSSCB8fCBWODUwKQotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlIHRoZSByZXN1bHRpbmcga2VybmVsIGltYWdlIHdpbGwgYmUgc2xpZ2h0bHkgbGFyZ2VyCi0JICBidXQgbm90IHNsb3dlciwgYW5kIGl0IHdpbGwgZ2l2ZSB2ZXJ5IHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCi0JICBJZiB5b3UgZG9uJ3QgZGVidWcgdGhlIGtlcm5lbCwgeW91IGNhbiBzYXkgTiwgYnV0IHdlIG1heSBub3QgYmUgYWJsZQotCSAgdG8gc29sdmUgcHJvYmxlbXMgd2l0aG91dCBmcmFtZSB1bndpbmQgaW5mb3JtYXRpb24gb3IgZnJhbWUgcG9pbnRlcnMuCi0KLWNvbmZpZyBTVEFDS19VTldJTkQKLQlib29sICJTdGFjayB1bndpbmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVOV0lORF9JTkZPCi0JZGVwZW5kcyBvbiBYODYKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgbW9yZSBwcmVjaXNlIHN0YWNrIHRyYWNlcywgb21pdHRpbmcgYWxsIHVucmVsYXRlZAotCSAgb2NjdXJyZW5jZXMgb2YgcG9pbnRlcnMgaW50byBrZXJuZWwgY29kZSBmcm9tIHRoZSBkdW1wLgotCiBjb25maWcgRk9SQ0VEX0lOTElOSU5HCiAJYm9vbCAiRm9yY2UgZ2NjIHRvIGlubGluZSBmdW5jdGlvbnMgbWFya2VkICdpbmxpbmUnIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCkBAIC0zNzIsMjAgKzM2OCw2IEBACiAJICBiZWNvbWUgdGhlIGRlZmF1bHQgaW4gdGhlIGZ1dHVyZSwgdW50aWwgdGhlbiB0aGlzIG9wdGlvbiBpcyB0aGVyZSB0bwogCSAgdGVzdCBnY2MgZm9yIHRoaXMuCiAKLWNvbmZpZyBIRUFERVJTX0NIRUNLCi0JYm9vbCAiUnVuICdtYWtlIGhlYWRlcnNfY2hlY2snIHdoZW4gYnVpbGRpbmcgdm1saW51eCIKLQlkZXBlbmRzIG9uICFVTUwKLQloZWxwCi0JICBUaGlzIG9wdGlvbiB3aWxsIGV4dHJhY3QgdGhlIHVzZXItdmlzaWJsZSBrZXJuZWwgaGVhZGVycyB3aGVuZXZlcgotCSAgYnVpbGRpbmcgdGhlIGtlcm5lbCwgYW5kIHdpbGwgcnVuIGJhc2ljIHNhbml0eSBjaGVja3Mgb24gdGhlbSB0bwotCSAgZW5zdXJlIHRoYXQgZXhwb3J0ZWQgZmlsZXMgZG8gbm90IGF0dGVtcHQgdG8gaW5jbHVkZSBmaWxlcyB3aGljaAotCSAgd2VyZSBub3QgZXhwb3J0ZWQsIGV0Yy4KLQotCSAgSWYgeW91J3JlIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGhlYWRlciBmaWxlcyB3aGljaCBhcmUKLQkgIHJlbGV2YW50IGZvciB1c2Vyc3BhY2UsIHNheSAnWScsIGFuZCBjaGVjayB0aGUgaGVhZGVycwotCSAgZXhwb3J0ZWQgdG8gJChJTlNUQUxMX0hEUl9QQVRIKSAodXN1YWxseSAndXNyL2luY2x1ZGUnIGluCi0JICB5b3VyIGJ1aWxkIHRyZWUpLCB0byBtYWtlIHN1cmUgdGhleSdyZSBzdWl0YWJsZS4KLQogY29uZmlnIFJDVV9UT1JUVVJFX1RFU1QKIAl0cmlzdGF0ZSAidG9ydHVyZSB0ZXN0cyBmb3IgUkNVIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCkBAIC00MDIsNiArMzg0LDcgQEAKIAogY29uZmlnIExLRFRNCiAJdHJpc3RhdGUgIkxpbnV4IEtlcm5lbCBEdW1wIFRlc3QgVG9vbCBNb2R1bGUiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlkZXBlbmRzIG9uIEtQUk9CRVMKIAlkZWZhdWx0IG4KIAloZWxwCkBAIC00MTMsMyArMzk2LDM2IEBACiAKIAlEb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIG1vZHVsZSBjYW4gYmUgZm91bmQgaW4KIAlkcml2ZXJzL21pc2MvbGtkdG0uYworCitjb25maWcgRkFVTFRfSU5KRUNUSU9OCisJYm9vbCAiRmF1bHQtaW5qZWN0aW9uIGZyYW1ld29yayIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWRlcGVuZHMgb24gU1RBQ0tUUkFDRQorCXNlbGVjdCBGUkFNRV9QT0lOVEVSCisJaGVscAorCSAgUHJvdmlkZSBmYXVsdC1pbmplY3Rpb24gZnJhbWV3b3JrLgorCSAgRm9yIG1vcmUgZGV0YWlscywgc2VlIERvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uLy4KKworY29uZmlnIEZBSUxTTEFCCisJYm9vbCAiRmF1bHQtaW5qZWN0aW9uIGNhcGFiaWxpdHkgZm9yIGttYWxsb2MiCisJZGVwZW5kcyBvbiBGQVVMVF9JTkpFQ1RJT04KKwloZWxwCisJICBQcm92aWRlIGZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXR5IGZvciBrbWFsbG9jLgorCitjb25maWcgRkFJTF9QQUdFX0FMTE9DCisJYm9vbCAiRmF1bHQtaW5qZWN0aW9uIGNhcGFiaWxpdGl5IGZvciBhbGxvY19wYWdlcygpIgorCWRlcGVuZHMgb24gRkFVTFRfSU5KRUNUSU9OCisJaGVscAorCSAgUHJvdmlkZSBmYXVsdC1pbmplY3Rpb24gY2FwYWJpbGl0eSBmb3IgYWxsb2NfcGFnZXMoKS4KKworY29uZmlnIEZBSUxfTUFLRV9SRVFVRVNUCisJYm9vbCAiRmF1bHQtaW5qZWN0aW9uIGNhcGFiaWxpdHkgZm9yIGRpc2sgSU8iCisJZGVwZW5kcyBvbiBGQVVMVF9JTkpFQ1RJT04KKwloZWxwCisJICBQcm92aWRlIGZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXR5IGZvciBkaXNrIElPLgorCitjb25maWcgRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTCisJYm9vbCAiRGVidWdmcyBlbnRyaWVzIGZvciBmYXVsdC1pbmplY3Rpb24gY2FwYWJpbGl0aWVzIgorCWRlcGVuZHMgb24gRkFVTFRfSU5KRUNUSU9OICYmIFNZU0ZTICYmIERFQlVHX0ZTCisJaGVscAorCSAgRW5hYmxlIGNvbmZpZ3VyYXRpb24gb2YgZmF1bHQtaW5qZWN0aW9uIGNhcGFiaWxpdGllcyB2aWEgZGVidWdmcy4KZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCBmZWE4ZjkwLi43N2I0YmFkIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC01LDIwICs1LDIxIEBACiBsaWIteSA6PSBjdHlwZS5vIHN0cmluZy5vIHZzcHJpbnRmLm8gY21kbGluZS5vIFwKIAkgYnVzdF9zcGlubG9ja3MubyByYnRyZWUubyByYWRpeC10cmVlLm8gZHVtcF9zdGFjay5vIFwKIAkgaWRyLm8gZGl2NjQubyBpbnRfc3FydC5vIGJpdG1hcC5vIGV4dGFibGUubyBwcmlvX3RyZWUubyBcCi0JIHNoYTEubyBpcnFfcmVncy5vCisJIHNoYTEubyBpcnFfcmVncy5vIHJlY2lwcm9jYWxfZGl2Lm8KIAogbGliLSQoQ09ORklHX01NVSkgKz0gaW9yZW1hcC5vCiBsaWItJChDT05GSUdfU01QKSArPSBjcHVtYXNrLm8KIAogbGliLXkJKz0ga29iamVjdC5vIGtyZWYubyBrb2JqZWN0X3VldmVudC5vIGtsaXN0Lm8KIAotb2JqLXkgKz0gc29ydC5vIHBhcnNlci5vIGhhbGZtZDQubyBpb21hcF9jb3B5Lm8gZGVidWdfbG9ja3MubyByYW5kb20zMi5vCitvYmoteSArPSBzb3J0Lm8gcGFyc2VyLm8gaGFsZm1kNC5vIGRlYnVnX2xvY2tzLm8gcmFuZG9tMzIubwogCiBpZmVxICgkKENPTkZJR19ERUJVR19LT0JKRUNUKSx5KQogQ0ZMQUdTX2tvYmplY3QubyArPSAtRERFQlVHCiBDRkxBR1Nfa29iamVjdF91ZXZlbnQubyArPSAtRERFQlVHCiBlbmRpZgogCitvYmotJChDT05GSUdfSU9NQVBfQ09QWSkgKz0gaW9tYXBfY29weS5vCiBvYmotJChDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTKSArPSBsb2NraW5nLXNlbGZ0ZXN0Lm8KIG9iai0kKENPTkZJR19ERUJVR19TUElOTE9DSykgKz0gc3BpbmxvY2tfZGVidWcubwogbGliLSQoQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0spICs9IHJ3c2VtLXNwaW5sb2NrLm8KQEAgLTM1LDYgKzM2LDcgQEAKICAgbGliLXkgKz0gZGVjX2FuZF9sb2NrLm8KIGVuZGlmCiAKK29iai0kKENPTkZJR19CSVRSRVZFUlNFKSArPSBiaXRyZXYubwogb2JqLSQoQ09ORklHX0NSQ19DQ0lUVCkJKz0gY3JjLWNjaXR0Lm8KIG9iai0kKENPTkZJR19DUkMxNikJKz0gY3JjMTYubwogb2JqLSQoQ09ORklHX0NSQzMyKQkrPSBjcmMzMi5vCkBAIC01NCw2ICs1Niw5IEBACiBvYmotJChDT05GSUdfQVVESVRfR0VORVJJQykgKz0gYXVkaXQubwogCiBvYmotJChDT05GSUdfU1dJT1RMQikgKz0gc3dpb3RsYi5vCitvYmotJChDT05GSUdfRkFVTFRfSU5KRUNUSU9OKSArPSBmYXVsdC1pbmplY3QubworCitsaWItJChDT05GSUdfR0VORVJJQ19CVUcpICs9IGJ1Zy5vCiAKIGhvc3Rwcm9ncy15CTo9IGdlbl9jcmMzMnRhYmxlCiBjbGVhbi1maWxlcwk6PSBjcmMzMnRhYmxlLmgKZGlmZiAtLWdpdCBhL2xpYi9iaXRyZXYuYyBiL2xpYi9iaXRyZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODlhZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2JpdHJldi5jCkBAIC0wLDAgKzEsNTggQEAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdHJldi5oPgorCitNT0RVTEVfQVVUSE9SKCJBa2lub2J1IE1pdGEgPGFraW5vYnUubWl0YUBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJpdCBvcmRlcmluZyByZXZlcnNhbCBmdW5jdGlvbnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworY29uc3QgdTggYnl0ZV9yZXZfdGFibGVbMjU2XSA9IHsKKwkweDAwLCAweDgwLCAweDQwLCAweGMwLCAweDIwLCAweGEwLCAweDYwLCAweGUwLAorCTB4MTAsIDB4OTAsIDB4NTAsIDB4ZDAsIDB4MzAsIDB4YjAsIDB4NzAsIDB4ZjAsCisJMHgwOCwgMHg4OCwgMHg0OCwgMHhjOCwgMHgyOCwgMHhhOCwgMHg2OCwgMHhlOCwKKwkweDE4LCAweDk4LCAweDU4LCAweGQ4LCAweDM4LCAweGI4LCAweDc4LCAweGY4LAorCTB4MDQsIDB4ODQsIDB4NDQsIDB4YzQsIDB4MjQsIDB4YTQsIDB4NjQsIDB4ZTQsCisJMHgxNCwgMHg5NCwgMHg1NCwgMHhkNCwgMHgzNCwgMHhiNCwgMHg3NCwgMHhmNCwKKwkweDBjLCAweDhjLCAweDRjLCAweGNjLCAweDJjLCAweGFjLCAweDZjLCAweGVjLAorCTB4MWMsIDB4OWMsIDB4NWMsIDB4ZGMsIDB4M2MsIDB4YmMsIDB4N2MsIDB4ZmMsCisJMHgwMiwgMHg4MiwgMHg0MiwgMHhjMiwgMHgyMiwgMHhhMiwgMHg2MiwgMHhlMiwKKwkweDEyLCAweDkyLCAweDUyLCAweGQyLCAweDMyLCAweGIyLCAweDcyLCAweGYyLAorCTB4MGEsIDB4OGEsIDB4NGEsIDB4Y2EsIDB4MmEsIDB4YWEsIDB4NmEsIDB4ZWEsCisJMHgxYSwgMHg5YSwgMHg1YSwgMHhkYSwgMHgzYSwgMHhiYSwgMHg3YSwgMHhmYSwKKwkweDA2LCAweDg2LCAweDQ2LCAweGM2LCAweDI2LCAweGE2LCAweDY2LCAweGU2LAorCTB4MTYsIDB4OTYsIDB4NTYsIDB4ZDYsIDB4MzYsIDB4YjYsIDB4NzYsIDB4ZjYsCisJMHgwZSwgMHg4ZSwgMHg0ZSwgMHhjZSwgMHgyZSwgMHhhZSwgMHg2ZSwgMHhlZSwKKwkweDFlLCAweDllLCAweDVlLCAweGRlLCAweDNlLCAweGJlLCAweDdlLCAweGZlLAorCTB4MDEsIDB4ODEsIDB4NDEsIDB4YzEsIDB4MjEsIDB4YTEsIDB4NjEsIDB4ZTEsCisJMHgxMSwgMHg5MSwgMHg1MSwgMHhkMSwgMHgzMSwgMHhiMSwgMHg3MSwgMHhmMSwKKwkweDA5LCAweDg5LCAweDQ5LCAweGM5LCAweDI5LCAweGE5LCAweDY5LCAweGU5LAorCTB4MTksIDB4OTksIDB4NTksIDB4ZDksIDB4MzksIDB4YjksIDB4NzksIDB4ZjksCisJMHgwNSwgMHg4NSwgMHg0NSwgMHhjNSwgMHgyNSwgMHhhNSwgMHg2NSwgMHhlNSwKKwkweDE1LCAweDk1LCAweDU1LCAweGQ1LCAweDM1LCAweGI1LCAweDc1LCAweGY1LAorCTB4MGQsIDB4OGQsIDB4NGQsIDB4Y2QsIDB4MmQsIDB4YWQsIDB4NmQsIDB4ZWQsCisJMHgxZCwgMHg5ZCwgMHg1ZCwgMHhkZCwgMHgzZCwgMHhiZCwgMHg3ZCwgMHhmZCwKKwkweDAzLCAweDgzLCAweDQzLCAweGMzLCAweDIzLCAweGEzLCAweDYzLCAweGUzLAorCTB4MTMsIDB4OTMsIDB4NTMsIDB4ZDMsIDB4MzMsIDB4YjMsIDB4NzMsIDB4ZjMsCisJMHgwYiwgMHg4YiwgMHg0YiwgMHhjYiwgMHgyYiwgMHhhYiwgMHg2YiwgMHhlYiwKKwkweDFiLCAweDliLCAweDViLCAweGRiLCAweDNiLCAweGJiLCAweDdiLCAweGZiLAorCTB4MDcsIDB4ODcsIDB4NDcsIDB4YzcsIDB4MjcsIDB4YTcsIDB4NjcsIDB4ZTcsCisJMHgxNywgMHg5NywgMHg1NywgMHhkNywgMHgzNywgMHhiNywgMHg3NywgMHhmNywKKwkweDBmLCAweDhmLCAweDRmLCAweGNmLCAweDJmLCAweGFmLCAweDZmLCAweGVmLAorCTB4MWYsIDB4OWYsIDB4NWYsIDB4ZGYsIDB4M2YsIDB4YmYsIDB4N2YsIDB4ZmYsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoYnl0ZV9yZXZfdGFibGUpOworCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHUxNiBiaXRyZXYxNih1MTYgeCkKK3sKKwlyZXR1cm4gKGJpdHJldjgoeCAmIDB4ZmYpIDw8IDgpIHwgYml0cmV2OCh4ID4+IDgpOworfQorCisvKioKKyAqIGJpdHJldjMyIC0gcmV2ZXJzZSB0aGUgb3JkZXIgb2YgYml0cyBpbiBhIHUzMiB2YWx1ZQorICogQHg6IHZhbHVlIHRvIGJlIGJpdC1yZXZlcnNlZAorICovCit1MzIgYml0cmV2MzIodTMyIHgpCit7CisJcmV0dXJuIChiaXRyZXYxNih4ICYgMHhmZmZmKSA8PCAxNikgfCBiaXRyZXYxNih4ID4+IDE2KTsKK30KK0VYUE9SVF9TWU1CT0woYml0cmV2MzIpOwpkaWZmIC0tZ2l0IGEvbGliL2J1Zy5jIGIvbGliL2J1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNGI1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYnVnLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgIEdlbmVyaWMgc3VwcG9ydCBmb3IgQlVHKCkKKworICBUaGlzIHJlc3BlY3RzIHRoZSBmb2xsb3dpbmcgY29uZmlnIG9wdGlvbnM6CisKKyAgQ09ORklHX0JVRyAtIGVtaXQgQlVHIHRyYXBzLiAgTm90aGluZyBoYXBwZW5zIHdpdGhvdXQgdGhpcy4KKyAgQ09ORklHX0dFTkVSSUNfQlVHIC0gZW5hYmxlIHRoaXMgY29kZS4KKyAgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgLSBlbWl0IGZ1bGwgZmlsZStsaW5lIGluZm9ybWF0aW9uIGZvciBlYWNoIEJVRworCisgIENPTkZJR19CVUcgYW5kIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGFyZSBwb3RlbnRpYWxseSB1c2VyLXNldHRhYmxlCisgICh0aG91Z2ggdGhleSdyZSBnZW5lcmFsbHkgYWx3YXlzIG9uKS4KKworICBDT05GSUdfR0VORVJJQ19CVUcgaXMgc2V0IGJ5IGVhY2ggYXJjaGl0ZWN0dXJlIHVzaW5nIHRoaXMgY29kZS4KKworICBUbyB1c2UgdGhpcywgeW91ciBhcmNoaXRlY3R1cmUgbXVzdDoKKworICAxLiBTZXQgdXAgdGhlIGNvbmZpZyBvcHRpb25zOgorICAgICAtIEVuYWJsZSBDT05GSUdfR0VORVJJQ19CVUcgaWYgQ09ORklHX0JVRworCisgIDIuIEltcGxlbWVudCBCVUcgKGFuZCBvcHRpb25hbGx5IEJVR19PTiwgV0FSTiwgV0FSTl9PTikKKyAgICAgLSBEZWZpbmUgSEFWRV9BUkNIX0JVRworICAgICAtIEltcGxlbWVudCBCVUcoKSB0byBnZW5lcmF0ZSBhIGZhdWx0aW5nIGluc3RydWN0aW9uCisgICAgIC0gTk9URTogc3RydWN0IGJ1Z19lbnRyeSBkb2VzIG5vdCBoYXZlICJmaWxlIiBvciAibGluZSIgZW50cmllcworICAgICAgIHdoZW4gQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IGVuYWJsZWQsIHNvIHlvdSBtdXN0IGdlbmVyYXRlCisgICAgICAgdGhlIHZhbHVlcyBhY2NvcmRpbmdseS4KKworICAzLiBJbXBsZW1lbnQgdGhlIHRyYXAKKyAgICAgLSBJbiB0aGUgaWxsZWdhbCBpbnN0cnVjdGlvbiB0cmFwIGhhbmRsZXIgKHR5cGljYWxseSksIHZlcmlmeQorICAgICAgIHRoYXQgdGhlIGZhdWx0IHdhcyBpbiBrZXJuZWwgbW9kZSwgYW5kIGNhbGwgcmVwb3J0X2J1ZygpCisgICAgIC0gcmVwb3J0X2J1ZygpIHdpbGwgcmV0dXJuIHdoZXRoZXIgaXQgd2FzIGEgZmFsc2UgYWxhcm0sIGEgd2FybmluZywKKyAgICAgICBvciBhbiBhY3R1YWwgYnVnLgorICAgICAtIFlvdSBtdXN0IGltcGxlbWVudCB0aGUgaXNfdmFsaWRfYnVnYWRkcihidWdhZGRyKSBjYWxsYmFjayB3aGljaAorICAgICAgIHJldHVybnMgdHJ1ZSBpZiB0aGUgZWlwIGlzIGEgcmVhbCBrZXJuZWwgYWRkcmVzcywgYW5kIGl0IHBvaW50cworICAgICAgIHRvIHRoZSBleHBlY3RlZCBCVUcgdHJhcCBpbnN0cnVjdGlvbi4KKworICAgIEplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUBnb29wLm9yZz4gMjAwNgorICovCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorCitleHRlcm4gY29uc3Qgc3RydWN0IGJ1Z19lbnRyeSBfX3N0YXJ0X19fYnVnX3RhYmxlW10sIF9fc3RvcF9fX2J1Z190YWJsZVtdOworCisjaWZkZWYgQ09ORklHX01PRFVMRVMKK3N0YXRpYyBMSVNUX0hFQUQobW9kdWxlX2J1Z19saXN0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBidWdfZW50cnkgKm1vZHVsZV9maW5kX2J1Zyh1bnNpZ25lZCBsb25nIGJ1Z2FkZHIpCit7CisJc3RydWN0IG1vZHVsZSAqbW9kOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVfYnVnX2xpc3QsIGJ1Z19saXN0KSB7CisJCWNvbnN0IHN0cnVjdCBidWdfZW50cnkgKmJ1ZyA9IG1vZC0+YnVnX3RhYmxlOworCQl1bnNpZ25lZCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9idWdzOyArK2ksICsrYnVnKQorCQkJaWYgKGJ1Z2FkZHIgPT0gYnVnLT5idWdfYWRkcikKKwkJCQlyZXR1cm4gYnVnOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworaW50IG1vZHVsZV9idWdfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisJCQlzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJY2hhciAqc2Vjc3RyaW5nczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCW1vZC0+YnVnX3RhYmxlID0gTlVMTDsKKwltb2QtPm51bV9idWdzID0gMDsKKworCS8qIEZpbmQgdGhlIF9fYnVnX3RhYmxlIHNlY3Rpb24sIGlmIHByZXNlbnQgKi8KKwlzZWNzdHJpbmdzID0gKGNoYXIgKiloZHIgKyBzZWNoZHJzW2hkci0+ZV9zaHN0cm5keF0uc2hfb2Zmc2V0OworCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07IGkrKykgeworCQlpZiAoc3RyY21wKHNlY3N0cmluZ3Mrc2VjaGRyc1tpXS5zaF9uYW1lLCAiX19idWdfdGFibGUiKSkKKwkJCWNvbnRpbnVlOworCQltb2QtPmJ1Z190YWJsZSA9ICh2b2lkICopIHNlY2hkcnNbaV0uc2hfYWRkcjsKKwkJbW9kLT5udW1fYnVncyA9IHNlY2hkcnNbaV0uc2hfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgYnVnX2VudHJ5KTsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBTdHJpY3RseSBzcGVha2luZyB0aGlzIHNob3VsZCBoYXZlIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0CisJICogdHJhdmVyc2FscywgYnV0IHNpbmNlIHdlIG9ubHkgdHJhdmVyc2Ugb24gQlVHKClzLCBhIHNwaW5sb2NrCisJICogY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBkZWFkbG9jayBhbmQgdGh1cyBiZSBjb3VudGVyLXByb2R1Y3RpdmUuCisJICovCisJbGlzdF9hZGQoJm1vZC0+YnVnX2xpc3QsICZtb2R1bGVfYnVnX2xpc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbW9kdWxlX2J1Z19jbGVhbnVwKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwlsaXN0X2RlbCgmbW9kLT5idWdfbGlzdCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGJ1Z19lbnRyeSAqbW9kdWxlX2ZpbmRfYnVnKHVuc2lnbmVkIGxvbmcgYnVnYWRkcikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCitjb25zdCBzdHJ1Y3QgYnVnX2VudHJ5ICpmaW5kX2J1Zyh1bnNpZ25lZCBsb25nIGJ1Z2FkZHIpCit7CisJY29uc3Qgc3RydWN0IGJ1Z19lbnRyeSAqYnVnOworCisJZm9yIChidWcgPSBfX3N0YXJ0X19fYnVnX3RhYmxlOyBidWcgPCBfX3N0b3BfX19idWdfdGFibGU7ICsrYnVnKQorCQlpZiAoYnVnYWRkciA9PSBidWctPmJ1Z19hZGRyKQorCQkJcmV0dXJuIGJ1ZzsKKworCXJldHVybiBtb2R1bGVfZmluZF9idWcoYnVnYWRkcik7Cit9CisKK2VudW0gYnVnX3RyYXBfdHlwZSByZXBvcnRfYnVnKHVuc2lnbmVkIGxvbmcgYnVnYWRkcikKK3sKKwljb25zdCBzdHJ1Y3QgYnVnX2VudHJ5ICpidWc7CisJY29uc3QgY2hhciAqZmlsZTsKKwl1bnNpZ25lZCBsaW5lLCB3YXJuaW5nOworCisJaWYgKCFpc192YWxpZF9idWdhZGRyKGJ1Z2FkZHIpKQorCQlyZXR1cm4gQlVHX1RSQVBfVFlQRV9OT05FOworCisJYnVnID0gZmluZF9idWcoYnVnYWRkcik7CisKKwlwcmludGsoS0VSTl9FTUVSRyAiLS0tLS0tLS0tLS0tWyBjdXQgaGVyZSBdLS0tLS0tLS0tLS0tXG4iKTsKKworCWZpbGUgPSBOVUxMOworCWxpbmUgPSAwOworCXdhcm5pbmcgPSAwOworCisJaWYgKGJ1ZykgeworI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCisJCWZpbGUgPSBidWctPmZpbGU7CisJCWxpbmUgPSBidWctPmxpbmU7CisjZW5kaWYKKwkJd2FybmluZyA9IChidWctPmZsYWdzICYgQlVHRkxBR19XQVJOSU5HKSAhPSAwOworCX0KKworCWlmICh3YXJuaW5nKSB7CisJCS8qIHRoaXMgaXMgYSBXQVJOX09OIHJhdGhlciB0aGFuIEJVRy9CVUdfT04gKi8KKwkJaWYgKGZpbGUpCisJCQlwcmludGsoS0VSTl9FUlIgIkJhZG5lc3MgYXQgJXM6JXVcbiIsCisJCQkgICAgICAgZmlsZSwgbGluZSk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0VSUiAiQmFkbmVzcyBhdCAlcCAiCisJCQkgICAgICAgIlt2ZXJib3NlIGRlYnVnIGluZm8gdW5hdmFpbGFibGVdXG4iLAorCQkJICAgICAgICh2b2lkICopYnVnYWRkcik7CisKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm4gQlVHX1RSQVBfVFlQRV9XQVJOOworCX0KKworCWlmIChmaWxlKQorCQlwcmludGsoS0VSTl9DUklUICJrZXJuZWwgQlVHIGF0ICVzOiV1IVxuIiwKKwkJICAgICAgIGZpbGUsIGxpbmUpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiS2VybmVsIEJVRyBhdCAlcCAiCisJCSAgICAgICAiW3ZlcmJvc2UgZGVidWcgaW5mbyB1bmF2YWlsYWJsZV1cbiIsCisJCSAgICAgICAodm9pZCAqKWJ1Z2FkZHIpOworCisJcmV0dXJuIEJVR19UUkFQX1RZUEVfQlVHOworfQpkaWZmIC0tZ2l0IGEvbGliL2NyYzMyLmMgYi9saWIvY3JjMzIuYwppbmRleCAyODVmZDliLi5iZmMzMzMxIDEwMDY0NAotLS0gYS9saWIvY3JjMzIuYworKysgYi9saWIvY3JjMzIuYwpAQCAtMjM1LDIzICsyMzUsOCBAQAogfQogI2VuZGlmCiAKLS8qKgotICogYml0cmV2ZXJzZSAtIHJldmVyc2UgdGhlIG9yZGVyIG9mIGJpdHMgaW4gYSB1MzIgdmFsdWUKLSAqIEB4OiB2YWx1ZSB0byBiZSBiaXQtcmV2ZXJzZWQKLSAqLwotdTMyIGJpdHJldmVyc2UodTMyIHgpCi17Ci0JeCA9ICh4ID4+IDE2KSB8ICh4IDw8IDE2KTsKLQl4ID0gKHggPj4gOCAmIDB4MDBmZjAwZmYpIHwgKHggPDwgOCAmIDB4ZmYwMGZmMDApOwotCXggPSAoeCA+PiA0ICYgMHgwZjBmMGYwZikgfCAoeCA8PCA0ICYgMHhmMGYwZjBmMCk7Ci0JeCA9ICh4ID4+IDIgJiAweDMzMzMzMzMzKSB8ICh4IDw8IDIgJiAweGNjY2NjY2NjKTsKLQl4ID0gKHggPj4gMSAmIDB4NTU1NTU1NTUpIHwgKHggPDwgMSAmIDB4YWFhYWFhYWEpOwotCXJldHVybiB4OwotfQotCiBFWFBPUlRfU1lNQk9MKGNyYzMyX2xlKTsKIEVYUE9SVF9TWU1CT0woY3JjMzJfYmUpOwotRVhQT1JUX1NZTUJPTChiaXRyZXZlcnNlKTsKIAogLyoKICAqIEEgYnJpZWYgQ1JDIHR1dG9yaWFsLgpAQCAtNDAwLDEwICszODUsNyBAQAogc3RhdGljIHZvaWQgYnl0ZXJldmVyc2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXdoaWxlIChsZW4tLSkgewotCQl1bnNpZ25lZCBjaGFyIHggPSAqYnVmOwotCQl4ID0gKHggPj4gNCkgfCAoeCA8PCA0KTsKLQkJeCA9ICh4ID4+IDIgJiAweDMzKSB8ICh4IDw8IDIgJiAweGNjKTsKLQkJeCA9ICh4ID4+IDEgJiAweDU1KSB8ICh4IDw8IDEgJiAweGFhKTsKKwkJdW5zaWduZWQgY2hhciB4ID0gYml0cmV2OCgqYnVmKTsKIAkJKmJ1ZisrID0geDsKIAl9CiB9CkBAIC00NjAsMTEgKzQ0MiwxMSBAQAogCS8qIE5vdyBzd2FwIGl0IGFyb3VuZCBmb3IgdGhlIG90aGVyIHRlc3QgKi8KIAogCWJ5dGVyZXZlcnNlKGJ1ZiwgbGVuICsgNCk7Ci0JaW5pdCA9IGJpdHJldmVyc2UoaW5pdCk7Ci0JY3JjMiA9IGJpdHJldmVyc2UoY3JjMSk7Ci0JaWYgKGNyYzEgIT0gYml0cmV2ZXJzZShjcmMyKSkKKwlpbml0ID0gYml0cmV2MzIoaW5pdCk7CisJY3JjMiA9IGJpdHJldjMyKGNyYzEpOworCWlmIChjcmMxICE9IGJpdHJldjMyKGNyYzIpKQogCQlwcmludGYoIlxuQml0IHJldmVyc2FsIGZhaWw6IDB4JTA4eCAtPiAweCUwOHggLT4gMHglMDh4XG4iLAotCQkgICAgICAgY3JjMSwgY3JjMiwgYml0cmV2ZXJzZShjcmMyKSk7CisJCSAgICAgICBjcmMxLCBjcmMyLCBiaXRyZXYzMihjcmMyKSk7CiAJY3JjMSA9IGNyYzMyX2xlKGluaXQsIGJ1ZiwgbGVuKTsKIAlpZiAoY3JjMSAhPSBjcmMyKQogCQlwcmludGYoIlxuQ1JDIGVuZGlhbm5lc3MgZmFpbDogMHglMDh4ICE9IDB4JTA4eFxuIiwgY3JjMSwKZGlmZiAtLWdpdCBhL2xpYi9mYXVsdC1pbmplY3QuYyBiL2xpYi9mYXVsdC1pbmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE5MGZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2ZhdWx0LWluamVjdC5jCkBAIC0wLDAgKzEsMzA2IEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdW53aW5kLmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvZmF1bHQtaW5qZWN0Lmg+CisKKy8qCisgKiBzZXR1cF9mYXVsdF9hdHRyKCkgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHZhcmlvdXMgX19zZXR1cCBoYW5kbGVycywgc28gaXQKKyAqIHJldHVybnMgMCBvbiBlcnJvciwgYmVjYXVzZSB0aGF0IGlzIHdoYXQgX19zZXR1cCBoYW5kbGVycyBkby4KKyAqLworaW50IF9faW5pdCBzZXR1cF9mYXVsdF9hdHRyKHN0cnVjdCBmYXVsdF9hdHRyICphdHRyLCBjaGFyICpzdHIpCit7CisJdW5zaWduZWQgbG9uZyBwcm9iYWJpbGl0eTsKKwl1bnNpZ25lZCBsb25nIGludGVydmFsOworCWludCB0aW1lczsKKwlpbnQgc3BhY2U7CisKKwkvKiAiPGludGVydmFsPiw8cHJvYmFiaWxpdHk+LDxzcGFjZT4sPHRpbWVzPiIgKi8KKwlpZiAoc3NjYW5mKHN0ciwgIiVsdSwlbHUsJWQsJWQiLAorCQkJJmludGVydmFsLCAmcHJvYmFiaWxpdHksICZzcGFjZSwgJnRpbWVzKSA8IDQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkZBVUxUX0lOSkVDVElPTjogZmFpbGVkIHRvIHBhcnNlIGFyZ3VtZW50c1xuIik7CisJCXJldHVybiAwOworCX0KKworCWF0dHItPnByb2JhYmlsaXR5ID0gcHJvYmFiaWxpdHk7CisJYXR0ci0+aW50ZXJ2YWwgPSBpbnRlcnZhbDsKKwlhdG9taWNfc2V0KCZhdHRyLT50aW1lcywgdGltZXMpOworCWF0b21pY19zZXQoJmF0dHItPnNwYWNlLCBzcGFjZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZmFpbF9kdW1wKHN0cnVjdCBmYXVsdF9hdHRyICphdHRyKQoreworCWlmIChhdHRyLT52ZXJib3NlID4gMCkKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJGQVVMVF9JTkpFQ1RJT046IGZvcmNpbmcgYSBmYWlsdXJlXG4iKTsKKwlpZiAoYXR0ci0+dmVyYm9zZSA+IDEpCisJCWR1bXBfc3RhY2soKTsKK30KKworI2RlZmluZSBhdG9taWNfZGVjX25vdF96ZXJvKHYpCQlhdG9taWNfYWRkX3VubGVzcygodiksIC0xLCAwKQorCitzdGF0aWMgYm9vbCBmYWlsX3Rhc2soc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlyZXR1cm4gIWluX2ludGVycnVwdCgpICYmIHRhc2stPm1ha2VfaXRfZmFpbDsKK30KKworI2RlZmluZSBNQVhfU1RBQ0tfVFJBQ0VfREVQVEggMzIKKworI2lmIGRlZmluZWQoQ09ORklHX1NUQUNLVFJBQ0UpCisKK3N0YXRpYyBib29sIGZhaWxfc3RhY2t0cmFjZShzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2U7CisJaW50IGRlcHRoID0gYXR0ci0+c3RhY2t0cmFjZV9kZXB0aDsKKwl1bnNpZ25lZCBsb25nIGVudHJpZXNbTUFYX1NUQUNLX1RSQUNFX0RFUFRIXTsKKwlpbnQgbjsKKwlib29sIGZvdW5kID0gKGF0dHItPnJlcXVpcmVfc3RhcnQgPT0gMCAmJiBhdHRyLT5yZXF1aXJlX2VuZCA9PSBVTE9OR19NQVgpOworCisJaWYgKGRlcHRoID09IDApCisJCXJldHVybiBmb3VuZDsKKworCXRyYWNlLm5yX2VudHJpZXMgPSAwOworCXRyYWNlLmVudHJpZXMgPSBlbnRyaWVzOworCXRyYWNlLm1heF9lbnRyaWVzID0gZGVwdGg7CisJdHJhY2Uuc2tpcCA9IDE7CisJdHJhY2UuYWxsX2NvbnRleHRzID0gMDsKKworCXNhdmVfc3RhY2tfdHJhY2UoJnRyYWNlLCBOVUxMKTsKKwlmb3IgKG4gPSAwOyBuIDwgdHJhY2UubnJfZW50cmllczsgbisrKSB7CisJCWlmIChhdHRyLT5yZWplY3Rfc3RhcnQgPD0gZW50cmllc1tuXSAmJgorCQkJICAgICAgIGVudHJpZXNbbl0gPCBhdHRyLT5yZWplY3RfZW5kKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoYXR0ci0+cmVxdWlyZV9zdGFydCA8PSBlbnRyaWVzW25dICYmCisJCQkgICAgICAgZW50cmllc1tuXSA8IGF0dHItPnJlcXVpcmVfZW5kKQorCQkJZm91bmQgPSB0cnVlOworCX0KKwlyZXR1cm4gZm91bmQ7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBmYWlsX3N0YWNrdHJhY2Uoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIpCit7CisJc3RhdGljIGJvb2wgZmlyc3R0aW1lID0gdHJ1ZTsKKworCWlmIChmaXJzdHRpbWUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkiVGhpcyBhcmNoaXRlY3R1cmUgZG9lcyBub3QgaW1wbGVtZW50IHNhdmVfc3RhY2tfdHJhY2UoKVxuIik7CisJCWZpcnN0dGltZSA9IGZhbHNlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKyNlbmRpZgorCisvKgorICogVGhpcyBjb2RlIGlzIHN0b2xlbiBmcm9tIGZhaWxtYWxsb2MtMS4wCisgKiBodHRwOi8vd3d3Lm5vbmdudS5vcmcvZmFpbG1hbGxvYy8KKyAqLworCitib29sIHNob3VsZF9mYWlsKHN0cnVjdCBmYXVsdF9hdHRyICphdHRyLCBzc2l6ZV90IHNpemUpCit7CisJaWYgKGF0dHItPnRhc2tfZmlsdGVyICYmICFmYWlsX3Rhc2soYXR0ciwgY3VycmVudCkpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChhdG9taWNfcmVhZCgmYXR0ci0+dGltZXMpID09IDApCisJCXJldHVybiBmYWxzZTsKKworCWlmIChhdG9taWNfcmVhZCgmYXR0ci0+c3BhY2UpID4gc2l6ZSkgeworCQlhdG9taWNfc3ViKHNpemUsICZhdHRyLT5zcGFjZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoYXR0ci0+aW50ZXJ2YWwgPiAxKSB7CisJCWF0dHItPmNvdW50Kys7CisJCWlmIChhdHRyLT5jb3VudCAlIGF0dHItPmludGVydmFsKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChhdHRyLT5wcm9iYWJpbGl0eSA8PSByYW5kb20zMigpICUgMTAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWZhaWxfc3RhY2t0cmFjZShhdHRyKSkKKwkJcmV0dXJuIGZhbHNlOworCisJZmFpbF9kdW1wKGF0dHIpOworCisJaWYgKGF0b21pY19yZWFkKCZhdHRyLT50aW1lcykgIT0gLTEpCisJCWF0b21pY19kZWNfbm90X3plcm8oJmF0dHItPnRpbWVzKTsKKworCXJldHVybiB0cnVlOworfQorCisjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUworCitzdGF0aWMgdm9pZCBkZWJ1Z2ZzX3VsX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCSoodW5zaWduZWQgbG9uZyAqKWRhdGEgPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnZnNfdWxfc2V0X01BWF9TVEFDS19UUkFDRV9ERVBUSCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCSoodW5zaWduZWQgbG9uZyAqKWRhdGEgPQorCQl2YWwgPCBNQVhfU1RBQ0tfVFJBQ0VfREVQVEggPworCQl2YWwgOiBNQVhfU1RBQ0tfVFJBQ0VfREVQVEg7Cit9CisKK3N0YXRpYyB1NjQgZGVidWdmc191bF9nZXQodm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gKih1bnNpZ25lZCBsb25nICopZGF0YTsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoZm9wc191bCwgZGVidWdmc191bF9nZXQsIGRlYnVnZnNfdWxfc2V0LCAiJWxsdVxuIik7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV91bChjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKwkJCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQoreworCXJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIG1vZGUsIHBhcmVudCwgdmFsdWUsICZmb3BzX3VsKTsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoZm9wc191bF9NQVhfU1RBQ0tfVFJBQ0VfREVQVEgsIGRlYnVnZnNfdWxfZ2V0LAorCQkJZGVidWdmc191bF9zZXRfTUFYX1NUQUNLX1RSQUNFX0RFUFRILCAiJWxsdVxuIik7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV91bF9NQVhfU1RBQ0tfVFJBQ0VfREVQVEgoCisJY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCisJc3RydWN0IGRlbnRyeSAqcGFyZW50LCB1bnNpZ25lZCBsb25nICp2YWx1ZSkKK3sKKwlyZXR1cm4gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBtb2RlLCBwYXJlbnQsIHZhbHVlLAorCQkJCSAgICZmb3BzX3VsX01BWF9TVEFDS19UUkFDRV9ERVBUSCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnZnNfYXRvbWljX3Rfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJYXRvbWljX3NldCgoYXRvbWljX3QgKilkYXRhLCB2YWwpOworfQorCitzdGF0aWMgdTY0IGRlYnVnZnNfYXRvbWljX3RfZ2V0KHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGF0b21pY19yZWFkKChhdG9taWNfdCAqKWRhdGEpOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShmb3BzX2F0b21pY190LCBkZWJ1Z2ZzX2F0b21pY190X2dldCwKKwkJCWRlYnVnZnNfYXRvbWljX3Rfc2V0LCAiJWxsZFxuIik7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV9hdG9taWNfdChjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKwkJCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGF0b21pY190ICp2YWx1ZSkKK3sKKwlyZXR1cm4gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBtb2RlLCBwYXJlbnQsIHZhbHVlLCAmZm9wc19hdG9taWNfdCk7Cit9CisKK3ZvaWQgY2xlYW51cF9mYXVsdF9hdHRyX2RlbnRyaWVzKHN0cnVjdCBmYXVsdF9hdHRyICphdHRyKQoreworCWRlYnVnZnNfcmVtb3ZlKGF0dHItPmRlbnRyaWVzLnByb2JhYmlsaXR5X2ZpbGUpOworCWF0dHItPmRlbnRyaWVzLnByb2JhYmlsaXR5X2ZpbGUgPSBOVUxMOworCisJZGVidWdmc19yZW1vdmUoYXR0ci0+ZGVudHJpZXMuaW50ZXJ2YWxfZmlsZSk7CisJYXR0ci0+ZGVudHJpZXMuaW50ZXJ2YWxfZmlsZSA9IE5VTEw7CisKKwlkZWJ1Z2ZzX3JlbW92ZShhdHRyLT5kZW50cmllcy50aW1lc19maWxlKTsKKwlhdHRyLT5kZW50cmllcy50aW1lc19maWxlID0gTlVMTDsKKworCWRlYnVnZnNfcmVtb3ZlKGF0dHItPmRlbnRyaWVzLnNwYWNlX2ZpbGUpOworCWF0dHItPmRlbnRyaWVzLnNwYWNlX2ZpbGUgPSBOVUxMOworCisJZGVidWdmc19yZW1vdmUoYXR0ci0+ZGVudHJpZXMudmVyYm9zZV9maWxlKTsKKwlhdHRyLT5kZW50cmllcy52ZXJib3NlX2ZpbGUgPSBOVUxMOworCisJZGVidWdmc19yZW1vdmUoYXR0ci0+ZGVudHJpZXMudGFza19maWx0ZXJfZmlsZSk7CisJYXR0ci0+ZGVudHJpZXMudGFza19maWx0ZXJfZmlsZSA9IE5VTEw7CisKKwlkZWJ1Z2ZzX3JlbW92ZShhdHRyLT5kZW50cmllcy5zdGFja3RyYWNlX2RlcHRoX2ZpbGUpOworCWF0dHItPmRlbnRyaWVzLnN0YWNrdHJhY2VfZGVwdGhfZmlsZSA9IE5VTEw7CisKKwlkZWJ1Z2ZzX3JlbW92ZShhdHRyLT5kZW50cmllcy5yZXF1aXJlX3N0YXJ0X2ZpbGUpOworCWF0dHItPmRlbnRyaWVzLnJlcXVpcmVfc3RhcnRfZmlsZSA9IE5VTEw7CisKKwlkZWJ1Z2ZzX3JlbW92ZShhdHRyLT5kZW50cmllcy5yZXF1aXJlX2VuZF9maWxlKTsKKwlhdHRyLT5kZW50cmllcy5yZXF1aXJlX2VuZF9maWxlID0gTlVMTDsKKworCWRlYnVnZnNfcmVtb3ZlKGF0dHItPmRlbnRyaWVzLnJlamVjdF9zdGFydF9maWxlKTsKKwlhdHRyLT5kZW50cmllcy5yZWplY3Rfc3RhcnRfZmlsZSA9IE5VTEw7CisKKwlkZWJ1Z2ZzX3JlbW92ZShhdHRyLT5kZW50cmllcy5yZWplY3RfZW5kX2ZpbGUpOworCWF0dHItPmRlbnRyaWVzLnJlamVjdF9lbmRfZmlsZSA9IE5VTEw7CisKKwlpZiAoYXR0ci0+ZGVudHJpZXMuZGlyKQorCQlXQVJOX09OKCFzaW1wbGVfZW1wdHkoYXR0ci0+ZGVudHJpZXMuZGlyKSk7CisKKwlkZWJ1Z2ZzX3JlbW92ZShhdHRyLT5kZW50cmllcy5kaXIpOworCWF0dHItPmRlbnRyaWVzLmRpciA9IE5VTEw7Cit9CisKK2ludCBpbml0X2ZhdWx0X2F0dHJfZGVudHJpZXMoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJbW9kZV90IG1vZGUgPSBTX0lGUkVHIHwgU19JUlVTUiB8IFNfSVdVU1I7CisJc3RydWN0IGRlbnRyeSAqZGlyOworCisJbWVtc2V0KCZhdHRyLT5kZW50cmllcywgMCwgc2l6ZW9mKGF0dHItPmRlbnRyaWVzKSk7CisKKwlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgTlVMTCk7CisJaWYgKCFkaXIpCisJCWdvdG8gZmFpbDsKKwlhdHRyLT5kZW50cmllcy5kaXIgPSBkaXI7CisKKwlhdHRyLT5kZW50cmllcy5wcm9iYWJpbGl0eV9maWxlID0KKwkJZGVidWdmc19jcmVhdGVfdWwoInByb2JhYmlsaXR5IiwgbW9kZSwgZGlyLCAmYXR0ci0+cHJvYmFiaWxpdHkpOworCisJYXR0ci0+ZGVudHJpZXMuaW50ZXJ2YWxfZmlsZSA9CisJCWRlYnVnZnNfY3JlYXRlX3VsKCJpbnRlcnZhbCIsIG1vZGUsIGRpciwgJmF0dHItPmludGVydmFsKTsKKworCWF0dHItPmRlbnRyaWVzLnRpbWVzX2ZpbGUgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV9hdG9taWNfdCgidGltZXMiLCBtb2RlLCBkaXIsICZhdHRyLT50aW1lcyk7CisKKwlhdHRyLT5kZW50cmllcy5zcGFjZV9maWxlID0KKwkJZGVidWdmc19jcmVhdGVfYXRvbWljX3QoInNwYWNlIiwgbW9kZSwgZGlyLCAmYXR0ci0+c3BhY2UpOworCisJYXR0ci0+ZGVudHJpZXMudmVyYm9zZV9maWxlID0KKwkJZGVidWdmc19jcmVhdGVfdWwoInZlcmJvc2UiLCBtb2RlLCBkaXIsICZhdHRyLT52ZXJib3NlKTsKKworCWF0dHItPmRlbnRyaWVzLnRhc2tfZmlsdGVyX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJ0YXNrLWZpbHRlciIsCisJCQkJCQltb2RlLCBkaXIsICZhdHRyLT50YXNrX2ZpbHRlcik7CisKKwlhdHRyLT5kZW50cmllcy5zdGFja3RyYWNlX2RlcHRoX2ZpbGUgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91bF9NQVhfU1RBQ0tfVFJBQ0VfREVQVEgoCisJCQkic3RhY2t0cmFjZS1kZXB0aCIsIG1vZGUsIGRpciwgJmF0dHItPnN0YWNrdHJhY2VfZGVwdGgpOworCisJYXR0ci0+ZGVudHJpZXMucmVxdWlyZV9zdGFydF9maWxlID0KKwkJZGVidWdmc19jcmVhdGVfdWwoInJlcXVpcmUtc3RhcnQiLCBtb2RlLCBkaXIsICZhdHRyLT5yZXF1aXJlX3N0YXJ0KTsKKworCWF0dHItPmRlbnRyaWVzLnJlcXVpcmVfZW5kX2ZpbGUgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91bCgicmVxdWlyZS1lbmQiLCBtb2RlLCBkaXIsICZhdHRyLT5yZXF1aXJlX2VuZCk7CisKKwlhdHRyLT5kZW50cmllcy5yZWplY3Rfc3RhcnRfZmlsZSA9CisJCWRlYnVnZnNfY3JlYXRlX3VsKCJyZWplY3Qtc3RhcnQiLCBtb2RlLCBkaXIsICZhdHRyLT5yZWplY3Rfc3RhcnQpOworCisJYXR0ci0+ZGVudHJpZXMucmVqZWN0X2VuZF9maWxlID0KKwkJZGVidWdmc19jcmVhdGVfdWwoInJlamVjdC1lbmQiLCBtb2RlLCBkaXIsICZhdHRyLT5yZWplY3RfZW5kKTsKKworCisJaWYgKCFhdHRyLT5kZW50cmllcy5wcm9iYWJpbGl0eV9maWxlIHx8ICFhdHRyLT5kZW50cmllcy5pbnRlcnZhbF9maWxlCisJICAgIHx8ICFhdHRyLT5kZW50cmllcy50aW1lc19maWxlIHx8ICFhdHRyLT5kZW50cmllcy5zcGFjZV9maWxlCisJICAgIHx8ICFhdHRyLT5kZW50cmllcy52ZXJib3NlX2ZpbGUgfHwgIWF0dHItPmRlbnRyaWVzLnRhc2tfZmlsdGVyX2ZpbGUKKwkgICAgfHwgIWF0dHItPmRlbnRyaWVzLnN0YWNrdHJhY2VfZGVwdGhfZmlsZQorCSAgICB8fCAhYXR0ci0+ZGVudHJpZXMucmVxdWlyZV9zdGFydF9maWxlCisJICAgIHx8ICFhdHRyLT5kZW50cmllcy5yZXF1aXJlX2VuZF9maWxlCisJICAgIHx8ICFhdHRyLT5kZW50cmllcy5yZWplY3Rfc3RhcnRfZmlsZQorCSAgICB8fCAhYXR0ci0+ZGVudHJpZXMucmVqZWN0X2VuZF9maWxlCisJICAgICkKKwkJZ290byBmYWlsOworCisJcmV0dXJuIDA7CitmYWlsOgorCWNsZWFudXBfZmF1bHRfYXR0cl9kZW50cmllcyhhdHRyKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworI2VuZGlmIC8qIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMgKi8KZGlmZiAtLWdpdCBhL2xpYi9pb3JlbWFwLmMgYi9saWIvaW9yZW1hcC5jCmluZGV4IDk5ZmEyNzcuLmE5ZTQ0MTUgMTAwNjQ0Ci0tLSBhL2xpYi9pb3JlbWFwLmMKKysrIGIvbGliL2lvcmVtYXAuYwpAQCAtNSw3ICs1LDYgQEAKICAqCiAgKiAoQykgQ29weXJpZ2h0IDE5OTUgMTk5NiBMaW51cyBUb3J2YWxkcwogICovCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIApkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3RfdWV2ZW50LmMgYi9saWIva29iamVjdF91ZXZlbnQuYwppbmRleCBhMTkyMjc2Li44NDI3MmVkIDEwMDY0NAotLS0gYS9saWIva29iamVjdF91ZXZlbnQuYworKysgYi9saWIva29iamVjdF91ZXZlbnQuYwpAQCAtNjMsOCArNjMsMTEgQEAKICAqIEBhY3Rpb246IGFjdGlvbiB0aGF0IGlzIGhhcHBlbmluZyAodXN1YWxseSBLT0JKX01PVkUpCiAgKiBAa29iajogc3RydWN0IGtvYmplY3QgdGhhdCB0aGUgYWN0aW9uIGlzIGhhcHBlbmluZyB0bwogICogQGVudnBfZXh0OiBwb2ludGVyIHRvIGVudmlyb25tZW50YWwgZGF0YQorICoKKyAqIFJldHVybnMgMCBpZiBrb2JqZWN0X3VldmVudCgpIGlzIGNvbXBsZXRlZCB3aXRoIHN1Y2Nlc3Mgb3IgdGhlCisgKiBjb3JyZXNwb25kaW5nIGVycm9yIHdoZW4gaXQgZmFpbHMuCiAgKi8KLXZvaWQga29iamVjdF91ZXZlbnRfZW52KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBlbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbiwKK2ludCBrb2JqZWN0X3VldmVudF9lbnYoc3RydWN0IGtvYmplY3QgKmtvYmosIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uLAogCQkJY2hhciAqZW52cF9leHRbXSkKIHsKIAljaGFyICoqZW52cDsKQEAgLTc5LDE0ICs4MiwxNiBAQAogCXU2NCBzZXE7CiAJY2hhciAqc2VxX2J1ZmY7CiAJaW50IGkgPSAwOwotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDA7CiAJaW50IGo7CiAKIAlwcl9kZWJ1ZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlhY3Rpb25fc3RyaW5nID0gYWN0aW9uX3RvX3N0cmluZyhhY3Rpb24pOwotCWlmICghYWN0aW9uX3N0cmluZykKLQkJcmV0dXJuOworCWlmICghYWN0aW9uX3N0cmluZykgeworCQlwcl9kZWJ1Zygia29iamVjdCBhdHRlbXB0ZWQgdG8gc2VuZCB1ZXZlbnQgd2l0aG91dCBhY3Rpb25fc3RyaW5nIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCS8qIHNlYXJjaCB0aGUga3NldCB3ZSBiZWxvbmcgdG8gKi8KIAl0b3Bfa29iaiA9IGtvYmo7CkBAIC05NSwzMSArMTAwLDM5IEBACiAJCQl0b3Bfa29iaiA9IHRvcF9rb2JqLT5wYXJlbnQ7CiAJCX0gd2hpbGUgKCF0b3Bfa29iai0+a3NldCAmJiB0b3Bfa29iai0+cGFyZW50KTsKIAl9Ci0JaWYgKCF0b3Bfa29iai0+a3NldCkKLQkJcmV0dXJuOworCWlmICghdG9wX2tvYmotPmtzZXQpIHsKKwkJcHJfZGVidWcoImtvYmplY3QgYXR0ZW1wdGVkIHRvIHNlbmQgdWV2ZW50IHdpdGhvdXQga3NldCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlrc2V0ID0gdG9wX2tvYmotPmtzZXQ7CiAJdWV2ZW50X29wcyA9IGtzZXQtPnVldmVudF9vcHM7CiAKIAkvKiAgc2tpcCB0aGUgZXZlbnQsIGlmIHRoZSBmaWx0ZXIgcmV0dXJucyB6ZXJvLiAqLwogCWlmICh1ZXZlbnRfb3BzICYmIHVldmVudF9vcHMtPmZpbHRlcikKLQkJaWYgKCF1ZXZlbnRfb3BzLT5maWx0ZXIoa3NldCwga29iaikpCi0JCQlyZXR1cm47CisJCWlmICghdWV2ZW50X29wcy0+ZmlsdGVyKGtzZXQsIGtvYmopKSB7CisJCQlwcl9kZWJ1Zygia29iamVjdCBmaWx0ZXIgZnVuY3Rpb24gY2F1c2VkIHRoZSBldmVudCB0byBkcm9wIVxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQogCiAJLyogZW52aXJvbm1lbnQgaW5kZXggKi8KIAllbnZwID0ga3phbGxvYyhOVU1fRU5WUCAqIHNpemVvZiAoY2hhciAqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlbnZwKQotCQlyZXR1cm47CisJCXJldHVybiAtRU5PTUVNOwogCiAJLyogZW52aXJvbm1lbnQgdmFsdWVzICovCiAJYnVmZmVyID0ga21hbGxvYyhCVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpCisJaWYgKCFidWZmZXIpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBleGl0OworCX0KIAogCS8qIGNvbXBsZXRlIG9iamVjdCBwYXRoICovCiAJZGV2cGF0aCA9IGtvYmplY3RfZ2V0X3BhdGgoa29iaiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXZwYXRoKQorCWlmICghZGV2cGF0aCkgeworCQlyZXR2YWwgPSAtRU5PRU5UOwogCQlnb3RvIGV4aXQ7CisJfQogCiAJLyogb3JpZ2luYXRpbmcgc3Vic3lzdGVtICovCiAJaWYgKHVldmVudF9vcHMgJiYgdWV2ZW50X29wcy0+bmFtZSkKQEAgLTIwNCw3ICsyMTcsNyBAQAogCWtmcmVlKGRldnBhdGgpOwogCWtmcmVlKGJ1ZmZlcik7CiAJa2ZyZWUoZW52cCk7Ci0JcmV0dXJuOworCXJldHVybiByZXR2YWw7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGtvYmplY3RfdWV2ZW50X2Vudik7CkBAIC0yMTQsMTAgKzIyNywxMyBAQAogICoKICAqIEBhY3Rpb246IGFjdGlvbiB0aGF0IGlzIGhhcHBlbmluZyAodXN1YWxseSBLT0JKX0FERCBhbmQgS09CSl9SRU1PVkUpCiAgKiBAa29iajogc3RydWN0IGtvYmplY3QgdGhhdCB0aGUgYWN0aW9uIGlzIGhhcHBlbmluZyB0bworICoKKyAqIFJldHVybnMgMCBpZiBrb2JqZWN0X3VldmVudCgpIGlzIGNvbXBsZXRlZCB3aXRoIHN1Y2Nlc3Mgb3IgdGhlCisgKiBjb3JyZXNwb25kaW5nIGVycm9yIHdoZW4gaXQgZmFpbHMuCiAgKi8KLXZvaWQga29iamVjdF91ZXZlbnQoc3RydWN0IGtvYmplY3QgKmtvYmosIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uKQoraW50IGtvYmplY3RfdWV2ZW50KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBlbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbikKIHsKLQlrb2JqZWN0X3VldmVudF9lbnYoa29iaiwgYWN0aW9uLCBOVUxMKTsKKwlyZXR1cm4ga29iamVjdF91ZXZlbnRfZW52KGtvYmosIGFjdGlvbiwgTlVMTCk7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGtvYmplY3RfdWV2ZW50KTsKZGlmZiAtLWdpdCBhL2xpYi9rcmVmLmMgYi9saWIva3JlZi5jCmluZGV4IDRhNDY3ZmEuLjBkMDdjYzMgMTAwNjQ0Ci0tLSBhL2xpYi9rcmVmLmMKKysrIGIvbGliL2tyZWYuYwpAQCAtNTIsMTIgKzUyLDcgQEAKIAlXQVJOX09OKHJlbGVhc2UgPT0gTlVMTCk7CiAJV0FSTl9PTihyZWxlYXNlID09ICh2b2lkICgqKShzdHJ1Y3Qga3JlZiAqKSlrZnJlZSk7CiAKLQkvKgotCSAqIGlmIGN1cnJlbnQgY291bnQgaXMgb25lLCB3ZSBhcmUgdGhlIGxhc3QgdXNlciBhbmQgY2FuIHJlbGVhc2Ugb2JqZWN0Ci0JICogcmlnaHQgbm93LCBhdm9pZGluZyBhbiBhdG9taWMgb3BlcmF0aW9uIG9uICdyZWZjb3VudCcKLQkgKi8KLQlpZiAoKGF0b21pY19yZWFkKCZrcmVmLT5yZWZjb3VudCkgPT0gMSkgfHwKLQkgICAgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmtyZWYtPnJlZmNvdW50KSkpIHsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgma3JlZi0+cmVmY291bnQpKSB7CiAJCXJlbGVhc2Uoa3JlZik7CiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2xpYi9yZWNpcHJvY2FsX2Rpdi5jIGIvbGliL3JlY2lwcm9jYWxfZGl2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzYmQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9yZWNpcHJvY2FsX2Rpdi5jCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlY2lwcm9jYWxfZGl2Lmg+CisKK3UzMiByZWNpcHJvY2FsX3ZhbHVlKHUzMiBrKQoreworCXU2NCB2YWwgPSAoMUxMIDw8IDMyKSArIChrIC0gMSk7CisJZG9fZGl2KHZhbCwgayk7CisJcmV0dXJuICh1MzIpdmFsOworfQpkaWZmIC0tZ2l0IGEvbW0vYm91bmNlLmMgYi9tbS9ib3VuY2UuYwppbmRleCBlNGI2MmQyLi42NDNlZmJlIDEwMDY0NAotLS0gYS9tbS9ib3VuY2UuYworKysgYi9tbS9ib3VuY2UuYwpAQCAtMjM3LDYgKzIzNyw4IEBACiAJaWYgKCFiaW8pCiAJCXJldHVybjsKIAorCWJsa19hZGRfdHJhY2VfYmlvKHEsICpiaW9fb3JpZywgQkxLX1RBX0JPVU5DRSk7CisKIAkvKgogCSAqIGF0IGxlYXN0IG9uZSBwYWdlIHdhcyBib3VuY2VkLCBmaWxsIGluIHBvc3NpYmxlIG5vbi1oaWdobWVtCiAJICogcGFnZXMKQEAgLTI5MSw4ICsyOTMsNiBAQAogCQlwb29sID0gaXNhX3BhZ2VfcG9vbDsKIAl9CiAKLQlibGtfYWRkX3RyYWNlX2JpbyhxLCAqYmlvX29yaWcsIEJMS19UQV9CT1VOQ0UpOwotCiAJLyoKIAkgKiBzbG93IHBhdGgKIAkgKi8KZGlmZiAtLWdpdCBhL21tL2ZhZHZpc2UuYyBiL21tL2ZhZHZpc2UuYwppbmRleCAxNjhjNzhhLi4wZGY0Yzg5IDEwMDY0NAotLS0gYS9tbS9mYWR2aXNlLmMKKysrIGIvbW0vZmFkdmlzZS5jCkBAIC0zOCw3ICszOCw3IEBACiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gLUVCQURGOwogCi0JaWYgKFNfSVNGSUZPKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7CisJaWYgKFNfSVNGSUZPKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKIAkJcmV0ID0gLUVTUElQRTsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGFmN2UyZjUuLjgzMzJjNzcgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTExODEsOCArMTE4MSw2IEBACiAJCWlmIChwb3MgPCBzaXplKSB7CiAJCQlyZXR2YWwgPSBnZW5lcmljX2ZpbGVfZGlyZWN0X0lPKFJFQUQsIGlvY2IsCiAJCQkJCQlpb3YsIHBvcywgbnJfc2Vncyk7Ci0JCQlpZiAocmV0dmFsID4gMCAmJiAhaXNfc3luY19raW9jYihpb2NiKSkKLQkJCQlyZXR2YWwgPSAtRUlPQ0JRVUVVRUQ7CiAJCQlpZiAocmV0dmFsID4gMCkKIAkJCQkqcHBvcyA9IHBvcyArIHJldHZhbDsKIAkJfQpAQCAtMjA0NywxNSArMjA0NSwxNCBAQAogCSAqIFN5bmMgdGhlIGZzIG1ldGFkYXRhIGJ1dCBub3QgdGhlIG1pbm9yIGlub2RlIGNoYW5nZXMgYW5kCiAJICogb2YgY291cnNlIG5vdCB0aGUgZGF0YSBhcyB3ZSBkaWQgZGlyZWN0IERNQSBmb3IgdGhlIElPLgogCSAqIGlfbXV0ZXggaXMgaGVsZCwgd2hpY2ggcHJvdGVjdHMgZ2VuZXJpY19vc3luY19pbm9kZSgpIGZyb20KLQkgKiBsaXZlbG9ja2luZy4KKwkgKiBsaXZlbG9ja2luZy4gIEFJTyBPX0RJUkVDVCBvcHMgYXR0ZW1wdCB0byBzeW5jIG1ldGFkYXRhIGhlcmUuCiAJICovCi0JaWYgKHdyaXR0ZW4gPj0gMCAmJiAoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgeworCWlmICgod3JpdHRlbiA+PSAwIHx8IHdyaXR0ZW4gPT0gLUVJT0NCUVVFVUVEKSAmJgorCSAgICAoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgewogCQlpbnQgZXJyID0gZ2VuZXJpY19vc3luY19pbm9kZShpbm9kZSwgbWFwcGluZywgT1NZTkNfTUVUQURBVEEpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXdyaXR0ZW4gPSBlcnI7CiAJfQotCWlmICh3cml0dGVuID09IGNvdW50ICYmICFpc19zeW5jX2tpb2NiKGlvY2IpKQotCQl3cml0dGVuID0gLUVJT0NCUVVFVUVEOwogCXJldHVybiB3cml0dGVuOwogfQogRVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbGVfZGlyZWN0X3dyaXRlKTsKQEAgLTIyNjksNyArMjI2Niw3IEBACiAJaWYgKGNvdW50ID09IDApCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gcmVtb3ZlX3N1aWQoZmlsZS0+Zl9kZW50cnkpOworCWVyciA9IHJlbW92ZV9zdWlkKGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwX3hpcC5jIGIvbW0vZmlsZW1hcF94aXAuYwppbmRleCBiNGZkMGQ3Li45ZGQ5ZmJiIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwX3hpcC5jCisrKyBiL21tL2ZpbGVtYXBfeGlwLmMKQEAgLTE4MywxMyArMTgzLDEzIEBACiAJCWFkZHJlc3MgPSB2bWEtPnZtX3N0YXJ0ICsKIAkJCSgocGdvZmYgLSB2bWEtPnZtX3Bnb2ZmKSA8PCBQQUdFX1NISUZUKTsKIAkJQlVHX09OKGFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0IHx8IGFkZHJlc3MgPj0gdm1hLT52bV9lbmQpOwotCQlwYWdlID0gWkVST19QQUdFKGFkZHJlc3MpOworCQlwYWdlID0gWkVST19QQUdFKDApOwogCQlwdGUgPSBwYWdlX2NoZWNrX2FkZHJlc3MocGFnZSwgbW0sIGFkZHJlc3MsICZwdGwpOwogCQlpZiAocHRlKSB7CiAJCQkvKiBOdWtlIHRoZSBwYWdlIHRhYmxlIGVudHJ5LiAqLwogCQkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHB0ZV9wZm4oKnB0ZSkpOwogCQkJcHRldmFsID0gcHRlcF9jbGVhcl9mbHVzaCh2bWEsIGFkZHJlc3MsIHB0ZSk7Ci0JCQlwYWdlX3JlbW92ZV9ybWFwKHBhZ2UpOworCQkJcGFnZV9yZW1vdmVfcm1hcChwYWdlLCB2bWEpOwogCQkJZGVjX21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKTsKIAkJCUJVR19PTihwdGVfZGlydHkocHRldmFsKSk7CiAJCQlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCQlfX3hpcF91bm1hcChtYXBwaW5nLCBwZ29mZik7CiAJfSBlbHNlIHsKIAkJLyogbm90IHNoYXJlZCBhbmQgd3JpdGFibGUsIHVzZSBaRVJPX1BBR0UoKSAqLwotCQlwYWdlID0gWkVST19QQUdFKGFkZHJlc3MpOworCQlwYWdlID0gWkVST19QQUdFKDApOwogCX0KIAogb3V0OgpAQCAtMzc5LDcgKzM3OSw3IEBACiAJaWYgKGNvdW50ID09IDApCiAJCWdvdG8gb3V0X2JhY2tpbmc7CiAKLQlyZXQgPSByZW1vdmVfc3VpZChmaWxwLT5mX2RlbnRyeSk7CisJcmV0ID0gcmVtb3ZlX3N1aWQoZmlscC0+Zl9wYXRoLmRlbnRyeSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfYmFja2luZzsKIApkaWZmIC0tZ2l0IGEvbW0vZnJlbWFwLmMgYi9tbS9mcmVtYXAuYwppbmRleCBiNzdhMDAyLi40ZTNmNTNkIDEwMDY0NAotLS0gYS9tbS9mcmVtYXAuYworKysgYi9tbS9mcmVtYXAuYwpAQCAtMzMsNyArMzMsNyBAQAogCQlpZiAocGFnZSkgewogCQkJaWYgKHB0ZV9kaXJ0eShwdGUpKQogCQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJcGFnZV9yZW1vdmVfcm1hcChwYWdlKTsKKwkJCXBhZ2VfcmVtb3ZlX3JtYXAocGFnZSwgdm1hKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggMGNjYzdmMi4uY2IzNjJmNyAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtNDQsMTQgKzQ0LDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNvcHlfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpkc3QsIHN0cnVjdCBwYWdlICpzcmMsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCisJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCWludCBpOwogCiAJbWlnaHRfc2xlZXAoKTsKIAlmb3IgKGkgPSAwOyBpIDwgSFBBR0VfU0laRS9QQUdFX1NJWkU7IGkrKykgewogCQljb25kX3Jlc2NoZWQoKTsKLQkJY29weV91c2VyX2hpZ2hwYWdlKGRzdCArIGksIHNyYyArIGksIGFkZHIgKyBpKlBBR0VfU0laRSk7CisJCWNvcHlfdXNlcl9oaWdocGFnZShkc3QgKyBpLCBzcmMgKyBpLCBhZGRyICsgaSpQQUdFX1NJWkUsIHZtYSk7CiAJfQogfQogCkBAIC03Myw3ICs3Myw3IEBACiAKIAlmb3IgKHogPSB6b25lbGlzdC0+em9uZXM7ICp6OyB6KyspIHsKIAkJbmlkID0gem9uZV90b19uaWQoKnopOwotCQlpZiAoY3B1c2V0X3pvbmVfYWxsb3dlZCgqeiwgR0ZQX0hJR0hVU0VSKSAmJgorCQlpZiAoY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCgqeiwgR0ZQX0hJR0hVU0VSKSAmJgogCQkgICAgIWxpc3RfZW1wdHkoJmh1Z2VwYWdlX2ZyZWVsaXN0c1tuaWRdKSkKIAkJCWJyZWFrOwogCX0KQEAgLTQ0Miw3ICs0NDIsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKLQljb3B5X2h1Z2VfcGFnZShuZXdfcGFnZSwgb2xkX3BhZ2UsIGFkZHJlc3MpOworCWNvcHlfaHVnZV9wYWdlKG5ld19wYWdlLCBvbGRfcGFnZSwgYWRkcmVzcywgdm1hKTsKIAlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCiAJcHRlcCA9IGh1Z2VfcHRlX29mZnNldChtbSwgYWRkcmVzcyAmIEhQQUdFX01BU0spOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA0MTk4ZGYwLi5lZjA5ZjBhIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtNjgxLDcgKzY4MSw3IEBACiAJCQkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKIAkJCQlmaWxlX3Jzcy0tOwogCQkJfQotCQkJcGFnZV9yZW1vdmVfcm1hcChwYWdlKTsKKwkJCXBhZ2VfcmVtb3ZlX3JtYXAocGFnZSwgdm1hKTsKIAkJCXRsYl9yZW1vdmVfcGFnZSh0bGIsIHBhZ2UpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTEwOTEsNyArMTA5MSw3IEBACiAJCQlpZiAocGFnZXMpIHsKIAkJCQlwYWdlc1tpXSA9IHBhZ2U7CiAKLQkJCQlmbHVzaF9hbm9uX3BhZ2UocGFnZSwgc3RhcnQpOworCQkJCWZsdXNoX2Fub25fcGFnZSh2bWEsIHBhZ2UsIHN0YXJ0KTsKIAkJCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAkJCX0KIAkJCWlmICh2bWFzKQpAQCAtMTExMCwyMyArMTExMCwyOSBAQAogewogCXB0ZV90ICpwdGU7CiAJc3BpbmxvY2tfdCAqcHRsOworCWludCBlcnIgPSAwOwogCiAJcHRlID0gcHRlX2FsbG9jX21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsICZwdGwpOwogCWlmICghcHRlKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIC1FQUdBSU47CiAJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IFpFUk9fUEFHRShhZGRyKTsKIAkJcHRlX3QgemVyb19wdGUgPSBwdGVfd3Jwcm90ZWN0KG1rX3B0ZShwYWdlLCBwcm90KSk7CisKKwkJaWYgKHVubGlrZWx5KCFwdGVfbm9uZSgqcHRlKSkpIHsKKwkJCWVyciA9IC1FRVhJU1Q7CisJCQlwdGUrKzsKKwkJCWJyZWFrOworCQl9CiAJCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOwogCQlwYWdlX2FkZF9maWxlX3JtYXAocGFnZSk7CiAJCWluY19tbV9jb3VudGVyKG1tLCBmaWxlX3Jzcyk7Ci0JCUJVR19PTighcHRlX25vbmUoKnB0ZSkpOwogCQlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIHplcm9fcHRlKTsKIAl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSAtIDEsIHB0bCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgemVyb21hcF9wbWRfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsCkBAIC0xMTM0LDE2ICsxMTQwLDE4IEBACiB7CiAJcG1kX3QgKnBtZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CisJaW50IGVycjsKIAogCXBtZCA9IHBtZF9hbGxvYyhtbSwgcHVkLCBhZGRyKTsKIAlpZiAoIXBtZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiAtRUFHQUlOOwogCWRvIHsKIAkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAoemVyb21hcF9wdGVfcmFuZ2UobW0sIHBtZCwgYWRkciwgbmV4dCwgcHJvdCkpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gemVyb21hcF9wdGVfcmFuZ2UobW0sIHBtZCwgYWRkciwgbmV4dCwgcHJvdCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB6ZXJvbWFwX3B1ZF9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwKQEAgLTExNTEsMTYgKzExNTksMTggQEAKIHsKIAlwdWRfdCAqcHVkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwlpbnQgZXJyOwogCiAJcHVkID0gcHVkX2FsbG9jKG1tLCBwZ2QsIGFkZHIpOwogCWlmICghcHVkKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIC1FQUdBSU47CiAJZG8gewogCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmICh6ZXJvbWFwX3BtZF9yYW5nZShtbSwgcHVkLCBhZGRyLCBuZXh0LCBwcm90KSkKLQkJCXJldHVybiAtRU5PTUVNOworCQllcnIgPSB6ZXJvbWFwX3BtZF9yYW5nZShtbSwgcHVkLCBhZGRyLCBuZXh0LCBwcm90KTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOwogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIGludCB6ZXJvbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCkBAIC0xNDMxLDcgKzE0NDEsNyBAQAogCXJldHVybiBwdGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3dfdXNlcl9wYWdlKHN0cnVjdCBwYWdlICpkc3QsIHN0cnVjdCBwYWdlICpzcmMsIHVuc2lnbmVkIGxvbmcgdmEpCitzdGF0aWMgaW5saW5lIHZvaWQgY293X3VzZXJfcGFnZShzdHJ1Y3QgcGFnZSAqZHN0LCBzdHJ1Y3QgcGFnZSAqc3JjLCB1bnNpZ25lZCBsb25nIHZhLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAkvKgogCSAqIElmIHRoZSBzb3VyY2UgcGFnZSB3YXMgYSBQRk4gbWFwcGluZywgd2UgZG9uJ3QgaGF2ZQpAQCAtMTQ1NCw5ICsxNDY0LDkgQEAKIAkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCQlmbHVzaF9kY2FjaGVfcGFnZShkc3QpOwogCQlyZXR1cm47Ci0JCQorCiAJfQotCWNvcHlfdXNlcl9oaWdocGFnZShkc3QsIHNyYywgdmEpOworCWNvcHlfdXNlcl9oaWdocGFnZShkc3QsIHNyYywgdmEsIHZtYSk7CiB9CiAKIC8qCkBAIC0xNTY3LDcgKzE1NzcsNyBAQAogCQluZXdfcGFnZSA9IGFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUiwgdm1hLCBhZGRyZXNzKTsKIAkJaWYgKCFuZXdfcGFnZSkKIAkJCWdvdG8gb29tOwotCQljb3dfdXNlcl9wYWdlKG5ld19wYWdlLCBvbGRfcGFnZSwgYWRkcmVzcyk7CisJCWNvd191c2VyX3BhZ2UobmV3X3BhZ2UsIG9sZF9wYWdlLCBhZGRyZXNzLCB2bWEpOwogCX0KIAogCS8qCkBAIC0xNTc2LDcgKzE1ODYsNyBAQAogCXBhZ2VfdGFibGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHJlc3MsICZwdGwpOwogCWlmIChsaWtlbHkocHRlX3NhbWUoKnBhZ2VfdGFibGUsIG9yaWdfcHRlKSkpIHsKIAkJaWYgKG9sZF9wYWdlKSB7Ci0JCQlwYWdlX3JlbW92ZV9ybWFwKG9sZF9wYWdlKTsKKwkJCXBhZ2VfcmVtb3ZlX3JtYXAob2xkX3BhZ2UsIHZtYSk7CiAJCQlpZiAoIVBhZ2VBbm9uKG9sZF9wYWdlKSkgewogCQkJCWRlY19tbV9jb3VudGVyKG1tLCBmaWxlX3Jzcyk7CiAJCQkJaW5jX21tX2NvdW50ZXIobW0sIGFub25fcnNzKTsKQEAgLTIxOTAsNyArMjIwMCw3IEBACiAJCQlwYWdlID0gYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSLCB2bWEsIGFkZHJlc3MpOwogCQkJaWYgKCFwYWdlKQogCQkJCWdvdG8gb29tOwotCQkJY29weV91c2VyX2hpZ2hwYWdlKHBhZ2UsIG5ld19wYWdlLCBhZGRyZXNzKTsKKwkJCWNvcHlfdXNlcl9oaWdocGFnZShwYWdlLCBuZXdfcGFnZSwgYWRkcmVzcywgdm1hKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXdfcGFnZSk7CiAJCQluZXdfcGFnZSA9IHBhZ2U7CiAJCQlhbm9uID0gMTsKQEAgLTI1OTYsOCArMjYwNiwxNSBAQAogCWdhdGVfdm1hLnZtX21tID0gTlVMTDsKIAlnYXRlX3ZtYS52bV9zdGFydCA9IEZJWEFERFJfVVNFUl9TVEFSVDsKIAlnYXRlX3ZtYS52bV9lbmQgPSBGSVhBRERSX1VTRVJfRU5EOwotCWdhdGVfdm1hLnZtX3BhZ2VfcHJvdCA9IFBBR0VfUkVBRE9OTFk7Ci0JZ2F0ZV92bWEudm1fZmxhZ3MgPSAwOworCWdhdGVfdm1hLnZtX2ZsYWdzID0gVk1fUkVBRCB8IFZNX01BWVJFQUQgfCBWTV9FWEVDIHwgVk1fTUFZRVhFQzsKKwlnYXRlX3ZtYS52bV9wYWdlX3Byb3QgPSBfX1AxMDE7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIHZEU08gZ2V0cyBpbnRvIGV2ZXJ5IGNvcmUgZHVtcC4KKwkgKiBEdW1waW5nIGl0cyBjb250ZW50cyBtYWtlcyBwb3N0LW1vcnRlbSBmdWxseSBpbnRlcnByZXRhYmxlIGxhdGVyCisJICogd2l0aG91dCBtYXRjaGluZyB1cCB0aGUgc2FtZSBrZXJuZWwgYW5kIGhhcmR3YXJlIGNvbmZpZyB0byBzZWUKKwkgKiB3aGF0IFBDIHZhbHVlcyBtZWFudC4KKwkgKi8KKwlnYXRlX3ZtYS52bV9mbGFncyB8PSBWTV9BTFdBWVNEVU1QOwogCXJldHVybiAwOwogfQogX19pbml0Y2FsbChnYXRlX3ZtYV9pbml0KTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDBjMDU1YTA5Li44NDI3OTEyIDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTY3LDExICs2NywxMyBAQAogCXpvbmVfdHlwZSA9IHpvbmUgLSBwZ2RhdC0+bm9kZV96b25lczsKIAlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKSB7CiAJCWludCByZXQgPSAwOwotCQlyZXQgPSBpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHpvbmUsIHBoeXNfc3RhcnRfcGZuLCBucl9wYWdlcyk7CisJCXJldCA9IGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoem9uZSwgcGh5c19zdGFydF9wZm4sCisJCQkJCQlucl9wYWdlcywgTUVNTUFQX0hPVFBMVUcpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQotCW1lbW1hcF9pbml0X3pvbmUobnJfcGFnZXMsIG5pZCwgem9uZV90eXBlLCBwaHlzX3N0YXJ0X3Bmbik7CisJbWVtbWFwX2luaXRfem9uZShucl9wYWdlcywgbmlkLCB6b25lX3R5cGUsCisJCQkgcGh5c19zdGFydF9wZm4sIE1FTU1BUF9IT1RQTFVHKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCBiOTE3ZDZmLi5jMmFlYzBlIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtODg0LDYgKzg4NCwxMCBAQAogCWVyciA9IGdldF9ub2Rlcygmbm9kZXMsIG5tYXNrLCBtYXhub2RlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOworI2lmZGVmIENPTkZJR19DUFVTRVRTCisJLyogUmVzdHJpY3QgdGhlIG5vZGVzIHRvIHRoZSBhbGxvd2VkIG5vZGVzIGluIHRoZSBjcHVzZXQgKi8KKwlub2Rlc19hbmQobm9kZXMsIG5vZGVzLCBjdXJyZW50LT5tZW1zX2FsbG93ZWQpOworI2VuZGlmCiAJcmV0dXJuIGRvX21iaW5kKHN0YXJ0LCBsZW4sIG1vZGUsICZub2RlcywgZmxhZ3MpOwogfQogCkBAIC0xODU3LDcgKzE4NjEsNyBAQAogCiAJaWYgKGZpbGUpIHsKIAkJc2VxX3ByaW50ZihtLCAiIGZpbGU9Iik7Ci0JCXNlcV9wYXRoKG0sIGZpbGUtPmZfdmZzbW50LCBmaWxlLT5mX2RlbnRyeSwgIlxuXHQ9ICIpOworCQlzZXFfcGF0aChtLCBmaWxlLT5mX3BhdGgubW50LCBmaWxlLT5mX3BhdGguZGVudHJ5LCAiXG5cdD0gIik7CiAJfSBlbHNlIGlmICh2bWEtPnZtX3N0YXJ0IDw9IG1tLT5icmsgJiYgdm1hLT52bV9lbmQgPj0gbW0tPnN0YXJ0X2JyaykgewogCQlzZXFfcHJpbnRmKG0sICIgaGVhcCIpOwogCX0gZWxzZSBpZiAodm1hLT52bV9zdGFydCA8PSBtbS0+c3RhcnRfc3RhY2sgJiYKZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuYwppbmRleCA3Mjg5MDc4Li44YWNhNmY3IDEwMDY0NAotLS0gYS9tbS9taW5jb3JlLmMKKysrIGIvbW0vbWluY29yZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCWxpbnV4L21tL21pbmNvcmUuYwogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk5ICBMaW51cyBUb3J2YWxkcworICogQ29weXJpZ2h0IChDKSAxOTk0LTIwMDYgIExpbnVzIFRvcnZhbGRzCiAgKi8KIAogLyoKQEAgLTM4LDQ2ICszOCw1MSBAQAogCXJldHVybiBwcmVzZW50OwogfQogCi1zdGF0aWMgbG9uZyBtaW5jb3JlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCi0JdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGNoYXIgX191c2VyICogdmVjKQorLyoKKyAqIERvIGEgY2h1bmsgb2YgInN5c19taW5jb3JlKCkiLiBXZSd2ZSBhbHJlYWR5IGNoZWNrZWQKKyAqIGFsbCB0aGUgYXJndW1lbnRzLCB3ZSBob2xkIHRoZSBtbWFwIHNlbWFwaG9yZTogd2Ugc2hvdWxkCisgKiBqdXN0IHJldHVybiB0aGUgYW1vdW50IG9mIGluZm8gd2UncmUgYXNrZWQgZm9yLgorICovCitzdGF0aWMgbG9uZyBkb19taW5jb3JlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgY2hhciAqdmVjLCB1bnNpZ25lZCBsb25nIHBhZ2VzKQogewotCWxvbmcgZXJyb3IsIGksIHJlbWFpbmluZzsKLQl1bnNpZ25lZCBjaGFyICogdG1wOworCXVuc2lnbmVkIGxvbmcgaSwgbnIsIHBnb2ZmOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOwogCi0JZXJyb3IgPSAtRU5PTUVNOworCS8qCisJICogZmluZF92bWEoKSBkaWRuJ3QgZmluZCBhbnl0aGluZyBhYm92ZSB1cywgb3Igd2UncmUKKwkgKiBpbiBhbiB1bm1hcHBlZCBob2xlIGluIHRoZSBhZGRyZXNzIHNwYWNlOiBFTk9NRU0uCisJICovCisJaWYgKCF2bWEgfHwgYWRkciA8IHZtYS0+dm1fc3RhcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBPaywgZ290IGl0LiBCdXQgY2hlY2sgd2hldGhlciBpdCdzIGEgc2VnbWVudCB3ZSBzdXBwb3J0CisJICogbWluY29yZSgpIG9uLiBSaWdodCBub3csIHdlIGRvbid0IGRvIGFueSBhbm9ueW1vdXMgbWFwcGluZ3MuCisJICoKKwkgKiBGSVhNRTogVGhpcyBpcyBqdXN0IHN0dXBpZC4gQW5kIHJldHVybmluZyBFTk9NRU0gaXMgCisJICogc3R1cGlkIHRvby4gV2Ugc2hvdWxkIGp1c3QgbG9vayBhdCB0aGUgcGFnZSB0YWJsZXMuIEJ1dAorCSAqIHRoaXMgaXMgd2hhdCB3ZSd2ZSB0cmFkaXRpb25hbGx5IGRvbmUsIHNvIHdlJ2xsIGp1c3QKKwkgKiBjb250aW51ZSBkb2luZyBpdC4KKwkgKi8KIAlpZiAoIXZtYS0+dm1fZmlsZSkKLQkJcmV0dXJuIGVycm9yOworCQlyZXR1cm4gLUVOT01FTTsKIAotCXN0YXJ0ID0gKChzdGFydCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQpICsgdm1hLT52bV9wZ29mZjsKLQlpZiAoZW5kID4gdm1hLT52bV9lbmQpCi0JCWVuZCA9IHZtYS0+dm1fZW5kOwotCWVuZCA9ICgoZW5kIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCkgKyB2bWEtPnZtX3Bnb2ZmOworCS8qCisJICogQ2FsY3VsYXRlIGhvdyBtYW55IHBhZ2VzIHRoZXJlIGFyZSBsZWZ0IGluIHRoZSB2bWEsIGFuZAorCSAqIHdoYXQgdGhlIHBnb2ZmIGlzIGZvciBvdXIgYWRkcmVzcy4KKwkgKi8KKwluciA9ICh2bWEtPnZtX2VuZCAtIGFkZHIpID4+IFBBR0VfU0hJRlQ7CisJaWYgKG5yID4gcGFnZXMpCisJCW5yID0gcGFnZXM7CiAKLQllcnJvciA9IC1FQUdBSU47Ci0JdG1wID0gKHVuc2lnbmVkIGNoYXIgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghdG1wKQotCQlyZXR1cm4gZXJyb3I7CisJcGdvZmYgPSAoYWRkciAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJcGdvZmYgKz0gdm1hLT52bV9wZ29mZjsKIAotCS8qIChlbmQgLSBzdGFydCkgaXMgIyBvZiBwYWdlcywgYW5kIGFsc28gIyBvZiBieXRlcyBpbiAidmVjICovCi0JcmVtYWluaW5nID0gKGVuZCAtIHN0YXJ0KSwKKwkvKiBBbmQgdGhlbiB3ZSBqdXN0IGZpbGwgdGhlIHN1Y2tlciBpbi4uICovCisJZm9yIChpID0gMCA7IGkgPCBucjsgaSsrLCBwZ29mZisrKQorCQl2ZWNbaV0gPSBtaW5jb3JlX3BhZ2Uodm1hLCBwZ29mZik7CiAKLQllcnJvciA9IDA7Ci0JZm9yIChpID0gMDsgcmVtYWluaW5nID4gMDsgcmVtYWluaW5nIC09IFBBR0VfU0laRSwgaSsrKSB7Ci0JCWludCBqID0gMDsKLQkJbG9uZyB0aGlzcGllY2UgPSAocmVtYWluaW5nIDwgUEFHRV9TSVpFKSA/Ci0JCQkJCQlyZW1haW5pbmcgOiBQQUdFX1NJWkU7Ci0KLQkJd2hpbGUgKGogPCB0aGlzcGllY2UpCi0JCQl0bXBbaisrXSA9IG1pbmNvcmVfcGFnZSh2bWEsIHN0YXJ0KyspOwotCi0JCWlmIChjb3B5X3RvX3VzZXIodmVjICsgUEFHRV9TSVpFICogaSwgdG1wLCB0aGlzcGllY2UpKSB7Ci0JCQllcnJvciA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgdG1wKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIG5yOwogfQogCiAvKgpAQCAtMTA3LDgyICsxMTIsNTAgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbWluY29yZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuLAogCXVuc2lnbmVkIGNoYXIgX191c2VyICogdmVjKQogewotCWludCBpbmRleCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBlbmQsIGxpbWl0OwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYTsKLQlzaXplX3QgbWF4OwotCWludCB1bm1hcHBlZF9lcnJvciA9IDA7Ci0JbG9uZyBlcnJvcjsKKwlsb25nIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOworCXVuc2lnbmVkIGNoYXIgKnRtcDsKIAotCS8qIGNoZWNrIHRoZSBhcmd1bWVudHMgKi8KKwkvKiBDaGVjayB0aGUgc3RhcnQgYWRkcmVzczogbmVlZHMgdG8gYmUgcGFnZS1hbGlnbmVkLi4gKi8KICAJaWYgKHN0YXJ0ICYgflBBR0VfQ0FDSEVfTUFTSykKLQkJZ290byBlaW52YWw7CisJCXJldHVybiAtRUlOVkFMOwogCi0JbGltaXQgPSBUQVNLX1NJWkU7Ci0JaWYgKHN0YXJ0ID49IGxpbWl0KQotCQlnb3RvIGVub21lbTsKKwkvKiAuLmFuZCB3ZSBuZWVkIHRvIGJlIHBhc3NlZCBhIHZhbGlkIHVzZXItc3BhY2UgcmFuZ2UgKi8KKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgKHZvaWQgX191c2VyICopIHN0YXJ0LCBsZW4pKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghbGVuKQotCQlyZXR1cm4gMDsKKwkvKiBUaGlzIGFsc28gYXZvaWRzIGFueSBvdmVyZmxvd3Mgb24gUEFHRV9DQUNIRV9BTElHTiAqLworCXBhZ2VzID0gbGVuID4+IFBBR0VfU0hJRlQ7CisJcGFnZXMgKz0gKGxlbiAmIH5QQUdFX01BU0spICE9IDA7CiAKLQltYXggPSBsaW1pdCAtIHN0YXJ0OwotCWxlbiA9IFBBR0VfQ0FDSEVfQUxJR04obGVuKTsKLQlpZiAobGVuID4gbWF4IHx8ICFsZW4pCi0JCWdvdG8gZW5vbWVtOworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdmVjLCBwYWdlcykpCisJCXJldHVybiAtRUZBVUxUOwogCi0JZW5kID0gc3RhcnQgKyBsZW47CisJdG1wID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9VU0VSKTsKKwlpZiAoIXRtcCkKKwkJcmV0dXJuIC1FQUdBSU47CiAKLQkvKiBjaGVjayB0aGUgb3V0cHV0IGJ1ZmZlciB3aGlsc3QgaG9sZGluZyB0aGUgbG9jayAqLwotCWVycm9yID0gLUVGQVVMVDsKLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcmV0dmFsID0gMDsKKwl3aGlsZSAocGFnZXMpIHsKKwkJLyoKKwkJICogRG8gYXQgbW9zdCBQQUdFX1NJWkUgZW50cmllcyBwZXIgaXRlcmF0aW9uLCBkdWUgdG8KKwkJICogdGhlIHRlbXBvcmFyeSBidWZmZXIgc2l6ZS4KKwkJICovCisJCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJcmV0dmFsID0gZG9fbWluY29yZShzdGFydCwgdG1wLCBtaW4ocGFnZXMsIFBBR0VfU0laRSkpOworCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB2ZWMsIGxlbiA+PiBQQUdFX1NISUZUKSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIElmIHRoZSBpbnRlcnZhbCBbc3RhcnQsZW5kKSBjb3ZlcnMgc29tZSB1bm1hcHBlZCBhZGRyZXNzCi0JICogcmFuZ2VzLCBqdXN0IGlnbm9yZSB0aGVtLCBidXQgcmV0dXJuIC1FTk9NRU0gYXQgdGhlIGVuZC4KLQkgKi8KLQllcnJvciA9IDA7Ci0KLQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgc3RhcnQpOwotCXdoaWxlICh2bWEpIHsKLQkJLyogSGVyZSBzdGFydCA8IHZtYS0+dm1fZW5kLiAqLwotCQlpZiAoc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KSB7Ci0JCQl1bm1hcHBlZF9lcnJvciA9IC1FTk9NRU07Ci0JCQlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJCWlmIChyZXR2YWwgPD0gMCkKKwkJCWJyZWFrOworCQlpZiAoY29weV90b191c2VyKHZlYywgdG1wLCByZXR2YWwpKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJYnJlYWs7CiAJCX0KLQotCQkvKiBIZXJlIHZtYS0+dm1fc3RhcnQgPD0gc3RhcnQgPCB2bWEtPnZtX2VuZC4gKi8KLQkJaWYgKGVuZCA8PSB2bWEtPnZtX2VuZCkgewotCQkJaWYgKHN0YXJ0IDwgZW5kKSB7Ci0JCQkJZXJyb3IgPSBtaW5jb3JlX3ZtYSh2bWEsIHN0YXJ0LCBlbmQsCi0JCQkJCQkJJnZlY1tpbmRleF0pOwotCQkJCWlmIChlcnJvcikKLQkJCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQllcnJvciA9IHVubWFwcGVkX2Vycm9yOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiBIZXJlIHZtYS0+dm1fc3RhcnQgPD0gc3RhcnQgPCB2bWEtPnZtX2VuZCA8IGVuZC4gKi8KLQkJZXJyb3IgPSBtaW5jb3JlX3ZtYSh2bWEsIHN0YXJ0LCB2bWEtPnZtX2VuZCwgJnZlY1tpbmRleF0pOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKLQkJaW5kZXggKz0gKHZtYS0+dm1fZW5kIC0gc3RhcnQpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0JCXN0YXJ0ID0gdm1hLT52bV9lbmQ7Ci0JCXZtYSA9IHZtYS0+dm1fbmV4dDsKKwkJcGFnZXMgLT0gcmV0dmFsOworCQl2ZWMgKz0gcmV0dmFsOworCQlzdGFydCArPSByZXR2YWwgPDwgUEFHRV9TSElGVDsKKwkJcmV0dmFsID0gMDsKIAl9Ci0KLQkvKiB3ZSBmb3VuZCBhIGhvbGUgaW4gdGhlIGFyZWEgcXVlcmllZCBpZiB3ZSBhcnJpdmUgaGVyZSAqLwotCWVycm9yID0gLUVOT01FTTsKLQotb3V0OgotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIGVycm9yOwotCi1laW52YWw6Ci0JcmV0dXJuIC1FSU5WQUw7Ci1lbm9tZW06Ci0JcmV0dXJuIC1FTk9NRU07CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSB0bXApOworCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggN2JlMTEwZS4uY2MzYTIwOCAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJCXN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0RFTllXUklURSkKLQkJYXRvbWljX2luYygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCk7CisJCWF0b21pY19pbmMoJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCk7CiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpCiAJCW1hcHBpbmctPmlfbW1hcF93cml0YWJsZS0tOwogCkBAIC0zOTksNyArMzk5LDcgQEAKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CiAKIAkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9ERU5ZV1JJVEUpCi0JCQlhdG9taWNfZGVjKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50KTsKKwkJCWF0b21pY19kZWMoJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCk7CiAJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKQogCQkJbWFwcGluZy0+aV9tbWFwX3dyaXRhYmxlKys7CiAKQEAgLTkwNyw3ICs5MDcsNyBAQAogCSAqICBtb3VudGVkLCBpbiB3aGljaCBjYXNlIHdlIGRvbnQgYWRkIFBST1RfRVhFQy4pCiAJICovCiAJaWYgKChwcm90ICYgUFJPVF9SRUFEKSAmJiAoY3VycmVudC0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykpCi0JCWlmICghKGZpbGUgJiYgKGZpbGUtPmZfdmZzbW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9FWEVDKSkpCisJCWlmICghKGZpbGUgJiYgKGZpbGUtPmZfcGF0aC5tbnQtPm1udF9mbGFncyAmIE1OVF9OT0VYRUMpKSkKIAkJCXByb3QgfD0gUFJPVF9FWEVDOwogCiAJaWYgKCFsZW4pCkBAIC05NjAsNyArOTYwLDcgQEAKIAkJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlub2RlID0gZmlsZSA/IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlIDogTlVMTDsKKwlpbm9kZSA9IGZpbGUgPyBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlIDogTlVMTDsKIAogCWlmIChmaWxlKSB7CiAJCXN3aXRjaCAoZmxhZ3MgJiBNQVBfVFlQRSkgewpAQCAtOTg5LDcgKzk4OSw3IEBACiAJCWNhc2UgTUFQX1BSSVZBVEU6CiAJCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKIAkJCQlyZXR1cm4gLUVBQ0NFUzsKLQkJCWlmIChmaWxlLT5mX3Zmc21udC0+bW50X2ZsYWdzICYgTU5UX05PRVhFQykgeworCQkJaWYgKGZpbGUtPmZfcGF0aC5tbnQtPm1udF9mbGFncyAmIE1OVF9OT0VYRUMpIHsKIAkJCQlpZiAodm1fZmxhZ3MgJiBWTV9FWEVDKQogCQkJCQlyZXR1cm4gLUVQRVJNOwogCQkJCXZtX2ZsYWdzICY9IH5WTV9NQVlFWEVDOwpAQCAtMTQ3Nyw2ICsxNDc3LDcgQEAKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJc3RydWN0IHJsaW1pdCAqcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbTsKKwl1bnNpZ25lZCBsb25nIG5ld19zdGFydDsKIAogCS8qIGFkZHJlc3Mgc3BhY2UgbGltaXQgdGVzdHMgKi8KIAlpZiAoIW1heV9leHBhbmRfdm0obW0sIGdyb3cpKQpAQCAtMTQ5Niw2ICsxNDk3LDEyIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwkvKiBDaGVjayB0byBlbnN1cmUgdGhlIHN0YWNrIHdpbGwgbm90IGdyb3cgaW50byBhIGh1Z2V0bGItb25seSByZWdpb24gKi8KKwluZXdfc3RhcnQgPSAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTVVApID8gdm1hLT52bV9zdGFydCA6CisJCQl2bWEtPnZtX2VuZCAtIHNpemU7CisJaWYgKGlzX2h1Z2VwYWdlX29ubHlfcmFuZ2Uodm1hLT52bV9tbSwgbmV3X3N0YXJ0LCBzaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKIAkvKgogCSAqIE92ZXJjb21taXQuLiAgVGhpcyBtdXN0IGJlIHRoZSBmaW5hbCB0ZXN0LCBhcyBpdCB3aWxsCiAJICogdXBkYXRlIHNlY3VyaXR5IHN0YXRpc3RpY3MuCmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IDljNzY5ZmEuLjVkNGJkNGYgMTAwNjQ0Ci0tLSBhL21tL21yZW1hcC5jCisrKyBiL21tL21yZW1hcC5jCkBAIC0xMDUsNyArMTA1LDYgQEAKIAkJaWYgKHB0ZV9ub25lKCpvbGRfcHRlKSkKIAkJCWNvbnRpbnVlOwogCQlwdGUgPSBwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgb2xkX2FkZHIsIG9sZF9wdGUpOwotCQkvKiBaRVJPX1BBR0UgY2FuIGJlIGRlcGVuZGFudCBvbiB2aXJ0dWFsIGFkZHIgKi8KIAkJcHRlID0gbW92ZV9wdGUocHRlLCBuZXdfdm1hLT52bV9wYWdlX3Byb3QsIG9sZF9hZGRyLCBuZXdfYWRkcik7CiAJCXNldF9wdGVfYXQobW0sIG5ld19hZGRyLCBuZXdfcHRlLCBwdGUpOwogCX0KZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IGFmODc0NTYuLjIzZmIwMzMgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtNTIzLDcgKzUyMyw3IEBACiAJCSAqLwogCQltYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwogCQlpZiAoIW1hcHBpbmcpCi0JCQltYXBwaW5nID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKKwkJCW1hcHBpbmcgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CiAKIAkJY2FwYWJpbGl0aWVzID0gMDsKIAkJaWYgKG1hcHBpbmcgJiYgbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbykKQEAgLTUzMiw3ICs1MzIsNyBAQAogCQlpZiAoIWNhcGFiaWxpdGllcykgewogCQkJLyogbm8gZXhwbGljaXQgY2FwYWJpbGl0aWVzIHNldCwgc28gYXNzdW1lIHNvbWUKIAkJCSAqIGRlZmF1bHRzICovCi0JCQlzd2l0Y2ggKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUgJiBTX0lGTVQpIHsKKwkJCXN3aXRjaCAoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7CiAJCQljYXNlIFNfSUZSRUc6CiAJCQljYXNlIFNfSUZCTEs6CiAJCQkJY2FwYWJpbGl0aWVzID0gQkRJX0NBUF9NQVBfQ09QWTsKQEAgLTU2MywxMSArNTYzLDExIEBACiAJCQkgICAgIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCiAJCQkJcmV0dXJuIC1FQUNDRVM7CiAKLQkJCWlmIChJU19BUFBFTkQoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpICYmCisJCQlpZiAoSVNfQVBQRU5EKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpICYmCiAJCQkgICAgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJCQlyZXR1cm4gLUVBQ0NFUzsKIAotCQkJaWYgKGxvY2tzX3ZlcmlmeV9sb2NrZWQoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpKQorCQkJaWYgKGxvY2tzX3ZlcmlmeV9sb2NrZWQoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpCiAJCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJCWlmICghKGNhcGFiaWxpdGllcyAmIEJESV9DQVBfTUFQX0RJUkVDVCkpCkBAIC01OTgsNyArNTk4LDcgQEAKIAogCQkvKiBoYW5kbGUgZXhlY3V0YWJsZSBtYXBwaW5ncyBhbmQgaW1wbGllZCBleGVjdXRhYmxlCiAJCSAqIG1hcHBpbmdzICovCi0JCWlmIChmaWxlLT5mX3Zmc21udC0+bW50X2ZsYWdzICYgTU5UX05PRVhFQykgeworCQlpZiAoZmlsZS0+Zl9wYXRoLm1udC0+bW50X2ZsYWdzICYgTU5UX05PRVhFQykgewogCQkJaWYgKHByb3QgJiBQUk9UX0VYRUMpCiAJCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQpAQCAtODMzLDcgKzgzMyw3IEBACiAJCQkJY29udGludWU7CiAKIAkJCS8qIHNlYXJjaCBmb3Igb3ZlcmxhcHBpbmcgbWFwcGluZ3Mgb24gdGhlIHNhbWUgZmlsZSAqLwotCQkJaWYgKHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUgIT0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpCisJCQlpZiAodm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlICE9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpCiAJCQkJY29udGludWU7CiAKIAkJCWlmICh2bWEtPnZtX3Bnb2ZmID49IHBnb2ZmICsgcGdsZW4pCmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCAyMjNkOWNjLi5iMjc4YjhkIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTYxLDEyICs2MSw2IEBACiAJfQogCiAJLyoKLQkgKiBzd2Fwb2ZmIGNhbiBlYXNpbHkgdXNlIHVwIGFsbCBtZW1vcnksIHNvIGtpbGwgdGhvc2UgZmlyc3QuCi0JICovCi0JaWYgKHAtPmZsYWdzICYgUEZfU1dBUE9GRikKLQkJcmV0dXJuIFVMT05HX01BWDsKLQotCS8qCiAJICogVGhlIG1lbW9yeSBzaXplIG9mIHRoZSBwcm9jZXNzIGlzIHRoZSBiYXNpcyBmb3IgdGhlIGJhZG5lc3MuCiAJICovCiAJcG9pbnRzID0gbW0tPnRvdGFsX3ZtOwpAQCAtNzcsNiArNzEsMTIgQEAKIAl0YXNrX3VubG9jayhwKTsKIAogCS8qCisJICogc3dhcG9mZiBjYW4gZWFzaWx5IHVzZSB1cCBhbGwgbWVtb3J5LCBzbyBraWxsIHRob3NlIGZpcnN0LgorCSAqLworCWlmIChwLT5mbGFncyAmIFBGX1NXQVBPRkYpCisJCXJldHVybiBVTE9OR19NQVg7CisKKwkvKgogCSAqIFByb2Nlc3NlcyB3aGljaCBmb3JrIGEgbG90IG9mIGNoaWxkIHByb2Nlc3NlcyBhcmUgbGlrZWx5CiAJICogYSBnb29kIGNob2ljZS4gV2UgYWRkIGhhbGYgdGhlIHZtc2l6ZSBvZiB0aGUgY2hpbGRyZW4gaWYgdGhleQogCSAqIGhhdmUgYW4gb3duIG1tLiBUaGlzIHByZXZlbnRzIGZvcmtpbmcgc2VydmVycyB0byBmbG9vZCB0aGUKQEAgLTE3NCwxMCArMTc0LDE1IEBACiB7CiAjaWZkZWYgQ09ORklHX05VTUEKIAlzdHJ1Y3Qgem9uZSAqKno7Ci0Jbm9kZW1hc2tfdCBub2RlcyA9IG5vZGVfb25saW5lX21hcDsKKwlub2RlbWFza190IG5vZGVzOworCWludCBub2RlOworCS8qIG5vZGUgaGFzIG1lbW9yeSA/ICovCisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkKKwkJaWYgKE5PREVfREFUQShub2RlKS0+bm9kZV9wcmVzZW50X3BhZ2VzKQorCQkJbm9kZV9zZXQobm9kZSwgbm9kZXMpOwogCiAJZm9yICh6ID0gem9uZWxpc3QtPnpvbmVzOyAqejsgeisrKQotCQlpZiAoY3B1c2V0X3pvbmVfYWxsb3dlZCgqeiwgZ2ZwX21hc2spKQorCQlpZiAoY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCgqeiwgZ2ZwX21hc2spKQogCQkJbm9kZV9jbGVhcih6b25lX3RvX25pZCgqeiksIG5vZGVzKTsKIAkJZWxzZQogCQkJcmV0dXJuIENPTlNUUkFJTlRfQ1BVU0VUOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggOGQ5YjE5Zi4uYmUwZWZiZCAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L21wYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvcm1hcC5oPgpAQCAtMTMyLDExICsxMzMsOSBAQAogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIAkvKgotCSAqIElmIHRoaXMgbWFwcGluZyBjYW4gb25seSBhbGxvY2F0ZSBmcm9tIGxvdyBtZW1vcnksCi0JICogd2UgZXhjbHVkZSBoaWdoIG1lbW9yeSBmcm9tIG91ciBjb3VudC4KKwkgKiBXZSBhbHdheXMgZXhjbHVkZSBoaWdoIG1lbW9yeSBmcm9tIG91ciBjb3VudC4KIAkgKi8KLQlpZiAobWFwcGluZyAmJiAhKG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykgJiBfX0dGUF9ISUdITUVNKSkKLQkJYXZhaWxhYmxlX21lbW9yeSAtPSB0b3RhbGhpZ2hfcGFnZXM7CisJYXZhaWxhYmxlX21lbW9yeSAtPSB0b3RhbGhpZ2hfcGFnZXM7CiAjZW5kaWYKIAogCkBAIC01MjUsMjggKzUyNCwyNSBAQAogfTsKIAogLyoKLSAqIElmIHRoZSBtYWNoaW5lIGhhcyBhIGxhcmdlIGhpZ2htZW06bG93bWVtIHJhdGlvIHRoZW4gc2NhbGUgYmFjayB0aGUgZGVmYXVsdAotICogZGlydHkgbWVtb3J5IHRocmVzaG9sZHM6IGFsbG93aW5nIHRvbyBtdWNoIGRpcnR5IGhpZ2htZW0gcGlucyBhbiBleGNlc3NpdmUKLSAqIG51bWJlciBvZiBidWZmZXJfaGVhZHMuCisgKiBDYWxsZWQgZWFybHkgb24gdG8gdHVuZSB0aGUgcGFnZSB3cml0ZWJhY2sgZGlydHkgbGltaXRzLgorICoKKyAqIFdlIHVzZWQgdG8gc2NhbGUgZGlydHkgcGFnZXMgYWNjb3JkaW5nIHRvIGhvdyB0b3RhbCBtZW1vcnkKKyAqIHJlbGF0ZWQgdG8gcGFnZXMgdGhhdCBjb3VsZCBiZSBhbGxvY2F0ZWQgZm9yIGJ1ZmZlcnMgKGJ5CisgKiBjb21wYXJpbmcgbnJfZnJlZV9idWZmZXJfcGFnZXMoKSB0byB2bV90b3RhbF9wYWdlcy4KKyAqCisgKiBIb3dldmVyLCB0aGF0IHdhcyB3aGVuIHdlIHVzZWQgImRpcnR5X3JhdGlvIiB0byBzY2FsZSB3aXRoCisgKiBhbGwgbWVtb3J5LCBhbmQgd2UgZG9uJ3QgZG8gdGhhdCBhbnkgbW9yZS4gImRpcnR5X3JhdGlvIgorICogaXMgbm93IGFwcGxpZWQgdG8gdG90YWwgbm9uLUhJR0hQQUdFIG1lbW9yeSAoYnkgc3VidHJhY3RpbmcKKyAqIHRvdGFsaGlnaF9wYWdlcyBmcm9tIHZtX3RvdGFsX3BhZ2VzKSwgYW5kIGFzIHN1Y2ggd2UgY2FuJ3QKKyAqIGdldCBpbnRvIHRoZSBvbGQgaW5zYW5lIHNpdHVhdGlvbiBhbnkgbW9yZSB3aGVyZSB3ZSBoYWQKKyAqIGxhcmdlIGFtb3VudHMgb2YgZGlydHkgcGFnZXMgY29tcGFyZWQgdG8gYSBzbWFsbCBhbW91bnQgb2YKKyAqIG5vbi1ISUdITUVNIG1lbW9yeS4KKyAqCisgKiBCdXQgd2UgbWlnaHQgc3RpbGwgd2FudCB0byBzY2FsZSB0aGUgZGlydHlfcmF0aW8gYnkgaG93CisgKiBtdWNoIG1lbW9yeSB0aGUgYm94IGhhcy4uCiAgKi8KIHZvaWQgX19pbml0IHBhZ2Vfd3JpdGViYWNrX2luaXQodm9pZCkKIHsKLQlsb25nIGJ1ZmZlcl9wYWdlcyA9IG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKCk7Ci0JbG9uZyBjb3JyZWN0aW9uOwotCi0JY29ycmVjdGlvbiA9ICgxMDAgKiA0ICogYnVmZmVyX3BhZ2VzKSAvIHZtX3RvdGFsX3BhZ2VzOwotCi0JaWYgKGNvcnJlY3Rpb24gPCAxMDApIHsKLQkJZGlydHlfYmFja2dyb3VuZF9yYXRpbyAqPSBjb3JyZWN0aW9uOwotCQlkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvIC89IDEwMDsKLQkJdm1fZGlydHlfcmF0aW8gKj0gY29ycmVjdGlvbjsKLQkJdm1fZGlydHlfcmF0aW8gLz0gMTAwOwotCi0JCWlmIChkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvIDw9IDApCi0JCQlkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvID0gMTsKLQkJaWYgKHZtX2RpcnR5X3JhdGlvIDw9IDApCi0JCQl2bV9kaXJ0eV9yYXRpbyA9IDE7Ci0JfQogCW1vZF90aW1lcigmd2JfdGltZXIsIGppZmZpZXMgKyBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwpOwogCXdyaXRlYmFja19zZXRfcmF0ZWxpbWl0KCk7CiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZyYXRlbGltaXRfbmIpOwpAQCAtNzYxLDIzICs3NTcsMjQgQEAKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nMjsKIAotCQlpZiAobWFwcGluZykgewotCQkJd3JpdGVfbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JCQltYXBwaW5nMiA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQkJCWlmIChtYXBwaW5nMikgeyAvKiBSYWNlIHdpdGggdHJ1bmNhdGU/ICovCi0JCQkJQlVHX09OKG1hcHBpbmcyICE9IG1hcHBpbmcpOwotCQkJCWlmIChtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKQotCQkJCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwKLQkJCQkJCQkJTlJfRklMRV9ESVJUWSk7Ci0JCQkJcmFkaXhfdHJlZV90YWdfc2V0KCZtYXBwaW5nLT5wYWdlX3RyZWUsCi0JCQkJCXBhZ2VfaW5kZXgocGFnZSksIFBBR0VDQUNIRV9UQUdfRElSVFkpOworCQlpZiAoIW1hcHBpbmcpCisJCQlyZXR1cm4gMTsKKworCQl3cml0ZV9sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwkJbWFwcGluZzIgPSBwYWdlX21hcHBpbmcocGFnZSk7CisJCWlmIChtYXBwaW5nMikgeyAvKiBSYWNlIHdpdGggdHJ1bmNhdGU/ICovCisJCQlCVUdfT04obWFwcGluZzIgIT0gbWFwcGluZyk7CisJCQlpZiAobWFwcGluZ19jYXBfYWNjb3VudF9kaXJ0eShtYXBwaW5nKSkgeworCQkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX0RJUlRZKTsKKwkJCQl0YXNrX2lvX2FjY291bnRfd3JpdGUoUEFHRV9DQUNIRV9TSVpFKTsKIAkJCX0KLQkJCXdyaXRlX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JCQlpZiAobWFwcGluZy0+aG9zdCkgewotCQkJCS8qICFQYWdlQW5vbiAmJiAhc3dhcHBlcl9zcGFjZSAqLwotCQkJCV9fbWFya19pbm9kZV9kaXJ0eShtYXBwaW5nLT5ob3N0LAotCQkJCQkJCUlfRElSVFlfUEFHRVMpOwotCQkJfQorCQkJcmFkaXhfdHJlZV90YWdfc2V0KCZtYXBwaW5nLT5wYWdlX3RyZWUsCisJCQkJcGFnZV9pbmRleChwYWdlKSwgUEFHRUNBQ0hFX1RBR19ESVJUWSk7CisJCX0KKwkJd3JpdGVfdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwkJaWYgKG1hcHBpbmctPmhvc3QpIHsKKwkJCS8qICFQYWdlQW5vbiAmJiAhc3dhcHBlcl9zcGFjZSAqLworCQkJX19tYXJrX2lub2RlX2RpcnR5KG1hcHBpbmctPmhvc3QsIElfRElSVFlfUEFHRVMpOwogCQl9CiAJCXJldHVybiAxOwogCX0KQEAgLTg0MywzOSArODQwLDYgQEAKIEVYUE9SVF9TWU1CT0woc2V0X3BhZ2VfZGlydHlfbG9jayk7CiAKIC8qCi0gKiBDbGVhciBhIHBhZ2UncyBkaXJ0eSBmbGFnLCB3aGlsZSBjYXJpbmcgZm9yIGRpcnR5IG1lbW9yeSBhY2NvdW50aW5nLiAKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgcHJldmlvdXNseSBkaXJ0eS4KLSAqLwotaW50IHRlc3RfY2xlYXJfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG1hcHBpbmcpIHsKLQkJd3JpdGVfbG9ja19pcnFzYXZlKCZtYXBwaW5nLT50cmVlX2xvY2ssIGZsYWdzKTsKLQkJaWYgKFRlc3RDbGVhclBhZ2VEaXJ0eShwYWdlKSkgewotCQkJcmFkaXhfdHJlZV90YWdfY2xlYXIoJm1hcHBpbmctPnBhZ2VfdHJlZSwKLQkJCQkJCXBhZ2VfaW5kZXgocGFnZSksCi0JCQkJCQlQQUdFQ0FDSEVfVEFHX0RJUlRZKTsKLQkJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZtYXBwaW5nLT50cmVlX2xvY2ssIGZsYWdzKTsKLQkJCS8qCi0JCQkgKiBXZSBjYW4gY29udGludWUgdG8gdXNlIGBtYXBwaW5nJyBoZXJlIGJlY2F1c2UgdGhlCi0JCQkgKiBwYWdlIGlzIGxvY2tlZCwgd2hpY2ggcGlucyB0aGUgYWRkcmVzc19zcGFjZQotCQkJICovCi0JCQlpZiAobWFwcGluZ19jYXBfYWNjb3VudF9kaXJ0eShtYXBwaW5nKSkgewotCQkJCXBhZ2VfbWtjbGVhbihwYWdlKTsKLQkJCQlkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfRElSVFkpOwotCQkJfQotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm1hcHBpbmctPnRyZWVfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIFRlc3RDbGVhclBhZ2VEaXJ0eShwYWdlKTsKLX0KLUVYUE9SVF9TWU1CT0wodGVzdF9jbGVhcl9wYWdlX2RpcnR5KTsKLQotLyoKICAqIENsZWFyIGEgcGFnZSdzIGRpcnR5IGZsYWcsIHdoaWxlIGNhcmluZyBmb3IgZGlydHkgbWVtb3J5IGFjY291bnRpbmcuCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhZ2Ugd2FzIHByZXZpb3VzbHkgZGlydHkuCiAgKgpAQCAtODkzLDEyICs4NTcsNDEgQEAKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKIAotCWlmIChtYXBwaW5nKSB7CisJaWYgKG1hcHBpbmcgJiYgbWFwcGluZ19jYXBfYWNjb3VudF9kaXJ0eShtYXBwaW5nKSkgeworCQkvKgorCQkgKiBZZXMsIFZpcmdpbmlhLCB0aGlzIGlzIGluZGVlZCBpbnNhbmUuCisJCSAqCisJCSAqIFdlIHVzZSB0aGlzIHNlcXVlbmNlIHRvIG1ha2Ugc3VyZSB0aGF0CisJCSAqICAoYSkgd2UgYWNjb3VudCBmb3IgZGlydHkgc3RhdHMgcHJvcGVybHkKKwkJICogIChiKSB3ZSB0ZWxsIHRoZSBsb3ctbGV2ZWwgZmlsZXN5c3RlbSB0bworCQkgKiAgICAgIG1hcmsgdGhlIHdob2xlIHBhZ2UgZGlydHkgaWYgaXQgd2FzCisJCSAqICAgICAgZGlydHkgaW4gYSBwYWdldGFibGUuIE9ubHkgdG8gdGhlbgorCQkgKiAgKGMpIGNsZWFuIHRoZSBwYWdlIGFnYWluIGFuZCByZXR1cm4gMSB0bworCQkgKiAgICAgIGNhdXNlIHRoZSB3cml0ZWJhY2suCisJCSAqCisJCSAqIFRoaXMgd2F5IHdlIGF2b2lkIGFsbCBuYXN0eSByYWNlcyB3aXRoIHRoZQorCQkgKiBkaXJ0eSBiaXQgaW4gbXVsdGlwbGUgcGxhY2VzIGFuZCBjbGVhcmluZworCQkgKiB0aGVtIGNvbmN1cnJlbnRseSBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLgorCQkgKgorCQkgKiBOb3RlISBOb3JtYWxseSB0aGUgInNldF9wYWdlX2RpcnR5KHBhZ2UpIgorCQkgKiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBhY3R1YWwgZGlydHkgYml0IC0gc2luY2UKKwkJICogdGhhdCB3aWxsIGFscmVhZHkgdXN1YWxseSBiZSBzZXQuIEJ1dCB3ZQorCQkgKiBuZWVkIHRoZSBzaWRlIGVmZmVjdHMsIGFuZCBpdCBjYW4gaGVscCB1cworCQkgKiBhdm9pZCByYWNlcy4KKwkJICoKKwkJICogV2UgYmFzaWNhbGx5IHVzZSB0aGUgcGFnZSAibWFzdGVyIGRpcnR5IGJpdCIKKwkJICogYXMgYSBzZXJpYWxpemF0aW9uIHBvaW50IGZvciBhbGwgdGhlIGRpZmZlcmVudAorCQkgKiB0aHJlYWRzIGRvaW5nIHRoZWlyIHRoaW5ncy4KKwkJICoKKwkJICogRklYTUUhIFdlIHN0aWxsIGhhdmUgYSByYWNlIGhlcmU6IGlmIHNvbWVib2R5CisJCSAqIGFkZHMgdGhlIHBhZ2UgYmFjayB0byB0aGUgcGFnZSB0YWJsZXMgaW4KKwkJICogYmV0d2VlbiB0aGUgInBhZ2VfbWtjbGVhbigpIiBhbmQgdGhlICJUZXN0Q2xlYXJQYWdlRGlydHkoKSIsCisJCSAqIHdlIG1pZ2h0IGhhdmUgaXQgbWFwcGVkIHdpdGhvdXQgdGhlIGRpcnR5IGJpdCBzZXQuCisJCSAqLworCQlpZiAocGFnZV9ta2NsZWFuKHBhZ2UpKQorCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJCWlmIChUZXN0Q2xlYXJQYWdlRGlydHkocGFnZSkpIHsKLQkJCWlmIChtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKSB7Ci0JCQkJcGFnZV9ta2NsZWFuKHBhZ2UpOwotCQkJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7Ci0JCQl9CisJCQlkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfRElSVFkpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggY2FjZTIyYi4uMmM2MDZjYyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZhdWx0LWluamVjdC5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC03MTAsNiArNzExLDkgQEAKIAlmb3JfZWFjaF96b25lKHpvbmUpIHsKIAkJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcHNldDsKIAorCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQorCQkJY29udGludWU7CisKIAkJcHNldCA9IHpvbmVfcGNwKHpvbmUsIGNwdSk7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBzZXQtPnBjcCk7IGkrKykgewogCQkJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKQEAgLTg5Miw2ICs4OTYsOTEgQEAKICNkZWZpbmUgQUxMT0NfSElHSAkJMHgyMCAvKiBfX0dGUF9ISUdIIHNldCAqLwogI2RlZmluZSBBTExPQ19DUFVTRVQJCTB4NDAgLyogY2hlY2sgZm9yIGNvcnJlY3QgY3B1c2V0ICovCiAKKyNpZmRlZiBDT05GSUdfRkFJTF9QQUdFX0FMTE9DCisKK3N0YXRpYyBzdHJ1Y3QgZmFpbF9wYWdlX2FsbG9jX2F0dHIgeworCXN0cnVjdCBmYXVsdF9hdHRyIGF0dHI7CisKKwl1MzIgaWdub3JlX2dmcF9oaWdobWVtOworCXUzMiBpZ25vcmVfZ2ZwX3dhaXQ7CisKKyNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTCisKKwlzdHJ1Y3QgZGVudHJ5ICppZ25vcmVfZ2ZwX2hpZ2htZW1fZmlsZTsKKwlzdHJ1Y3QgZGVudHJ5ICppZ25vcmVfZ2ZwX3dhaXRfZmlsZTsKKworI2VuZGlmIC8qIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMgKi8KKworfSBmYWlsX3BhZ2VfYWxsb2MgPSB7CisJLmF0dHIgPSBGQVVMVF9BVFRSX0lOSVRJQUxJWkVSLAorCS5pZ25vcmVfZ2ZwX3dhaXQgPSAxLAorCS5pZ25vcmVfZ2ZwX2hpZ2htZW0gPSAxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfZmFpbF9wYWdlX2FsbG9jKGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gc2V0dXBfZmF1bHRfYXR0cigmZmFpbF9wYWdlX2FsbG9jLmF0dHIsIHN0cik7Cit9CitfX3NldHVwKCJmYWlsX3BhZ2VfYWxsb2M9Iiwgc2V0dXBfZmFpbF9wYWdlX2FsbG9jKTsKKworc3RhdGljIGludCBzaG91bGRfZmFpbF9hbGxvY19wYWdlKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJaWYgKGdmcF9tYXNrICYgX19HRlBfTk9GQUlMKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFpbF9wYWdlX2FsbG9jLmlnbm9yZV9nZnBfaGlnaG1lbSAmJiAoZ2ZwX21hc2sgJiBfX0dGUF9ISUdITUVNKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhaWxfcGFnZV9hbGxvYy5pZ25vcmVfZ2ZwX3dhaXQgJiYgKGdmcF9tYXNrICYgX19HRlBfV0FJVCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHNob3VsZF9mYWlsKCZmYWlsX3BhZ2VfYWxsb2MuYXR0ciwgMSA8PCBvcmRlcik7Cit9CisKKyNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTCisKK3N0YXRpYyBpbnQgX19pbml0IGZhaWxfcGFnZV9hbGxvY19kZWJ1Z2ZzKHZvaWQpCit7CisJbW9kZV90IG1vZGUgPSBTX0lGUkVHIHwgU19JUlVTUiB8IFNfSVdVU1I7CisJc3RydWN0IGRlbnRyeSAqZGlyOworCWludCBlcnI7CisKKwllcnIgPSBpbml0X2ZhdWx0X2F0dHJfZGVudHJpZXMoJmZhaWxfcGFnZV9hbGxvYy5hdHRyLAorCQkJCSAgICAgICAiZmFpbF9wYWdlX2FsbG9jIik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlkaXIgPSBmYWlsX3BhZ2VfYWxsb2MuYXR0ci5kZW50cmllcy5kaXI7CisKKwlmYWlsX3BhZ2VfYWxsb2MuaWdub3JlX2dmcF93YWl0X2ZpbGUgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJpZ25vcmUtZ2ZwLXdhaXQiLCBtb2RlLCBkaXIsCisJCQkJICAgICAgJmZhaWxfcGFnZV9hbGxvYy5pZ25vcmVfZ2ZwX3dhaXQpOworCisJZmFpbF9wYWdlX2FsbG9jLmlnbm9yZV9nZnBfaGlnaG1lbV9maWxlID0KKwkJZGVidWdmc19jcmVhdGVfYm9vbCgiaWdub3JlLWdmcC1oaWdobWVtIiwgbW9kZSwgZGlyLAorCQkJCSAgICAgICZmYWlsX3BhZ2VfYWxsb2MuaWdub3JlX2dmcF9oaWdobWVtKTsKKworCWlmICghZmFpbF9wYWdlX2FsbG9jLmlnbm9yZV9nZnBfd2FpdF9maWxlIHx8CisJCQkhZmFpbF9wYWdlX2FsbG9jLmlnbm9yZV9nZnBfaGlnaG1lbV9maWxlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWRlYnVnZnNfcmVtb3ZlKGZhaWxfcGFnZV9hbGxvYy5pZ25vcmVfZ2ZwX3dhaXRfZmlsZSk7CisJCWRlYnVnZnNfcmVtb3ZlKGZhaWxfcGFnZV9hbGxvYy5pZ25vcmVfZ2ZwX2hpZ2htZW1fZmlsZSk7CisJCWNsZWFudXBfZmF1bHRfYXR0cl9kZW50cmllcygmZmFpbF9wYWdlX2FsbG9jLmF0dHIpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2xhdGVfaW5pdGNhbGwoZmFpbF9wYWdlX2FsbG9jX2RlYnVnZnMpOworCisjZW5kaWYgLyogQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUyAqLworCisjZWxzZSAvKiBDT05GSUdfRkFJTF9QQUdFX0FMTE9DICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcikKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19GQUlMX1BBR0VfQUxMT0MgKi8KKwogLyoKICAqIFJldHVybiAxIGlmIGZyZWUgcGFnZXMgYXJlIGFib3ZlICdtYXJrJy4gVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIG9yZGVyCiAgKiBvZiB0aGUgYWxsb2NhdGlvbi4KQEAgLTkwMCw4ICs5ODksNyBAQAogCQkgICAgICBpbnQgY2xhc3N6b25lX2lkeCwgaW50IGFsbG9jX2ZsYWdzKQogewogCS8qIGZyZWVfcGFnZXMgbXkgZ28gbmVnYXRpdmUgLSB0aGF0J3MgT0sgKi8KLQl1bnNpZ25lZCBsb25nIG1pbiA9IG1hcms7Ci0JbG9uZyBmcmVlX3BhZ2VzID0gei0+ZnJlZV9wYWdlcyAtICgxIDw8IG9yZGVyKSArIDE7CisJbG9uZyBtaW4gPSBtYXJrLCBmcmVlX3BhZ2VzID0gei0+ZnJlZV9wYWdlcyAtICgxIDw8IG9yZGVyKSArIDE7CiAJaW50IG87CiAKIAlpZiAoYWxsb2NfZmxhZ3MgJiBBTExPQ19ISUdIKQpAQCAtMTA3Niw3ICsxMTY0LDcgQEAKIAkJCXpvbmUtPnpvbmVfcGdkYXQgIT0gem9uZWxpc3QtPnpvbmVzWzBdLT56b25lX3BnZGF0KSkKIAkJCQlicmVhazsKIAkJaWYgKChhbGxvY19mbGFncyAmIEFMTE9DX0NQVVNFVCkgJiYKLQkJCSFjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcF9tYXNrKSkKKwkJCSFjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKHpvbmUsIGdmcF9tYXNrKSkKIAkJCQlnb3RvIHRyeV9uZXh0X3pvbmU7CiAKIAkJaWYgKCEoYWxsb2NfZmxhZ3MgJiBBTExPQ19OT19XQVRFUk1BUktTKSkgewpAQCAtMTEzNiw2ICsxMjI0LDkgQEAKIAogCW1pZ2h0X3NsZWVwX2lmKHdhaXQpOwogCisJaWYgKHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX21hc2ssIG9yZGVyKSkKKwkJcmV0dXJuIE5VTEw7CisKIHJlc3RhcnQ6CiAJeiA9IHpvbmVsaXN0LT56b25lczsgIC8qIHRoZSBsaXN0IG9mIHpvbmVzIHN1aXRhYmxlIGZvciBnZnBfbWFzayAqLwogCkBAIC0xODY0LDE3ICsxOTU1LDI0IEBACiAgKiBkb25lLiBOb24tYXRvbWljIGluaXRpYWxpemF0aW9uLCBzaW5nbGUtcGFzcy4KICAqLwogdm9pZCBfX21lbWluaXQgbWVtbWFwX2luaXRfem9uZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSwKLQkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4pCisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbnVtIG1lbW1hcF9jb250ZXh0IGNvbnRleHQpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gc3RhcnRfcGZuICsgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHBmbjsKIAogCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gPCBlbmRfcGZuOyBwZm4rKykgewotCQlpZiAoIWVhcmx5X3Bmbl92YWxpZChwZm4pKQotCQkJY29udGludWU7Ci0JCWlmICghZWFybHlfcGZuX2luX25pZChwZm4sIG5pZCkpCi0JCQljb250aW51ZTsKKwkJLyoKKwkJICogVGhlcmUgY2FuIGJlIGhvbGVzIGluIGJvb3QtdGltZSBtZW1fbWFwW11zCisJCSAqIGhhbmRlZCB0byB0aGlzIGZ1bmN0aW9uLiAgVGhleSBkbyBub3QKKwkJICogZXhpc3Qgb24gaG90cGx1Z2dlZCBtZW1vcnkuCisJCSAqLworCQlpZiAoY29udGV4dCA9PSBNRU1NQVBfRUFSTFkpIHsKKwkJCWlmICghZWFybHlfcGZuX3ZhbGlkKHBmbikpCisJCQkJY29udGludWU7CisJCQlpZiAoIWVhcmx5X3Bmbl9pbl9uaWQocGZuLCBuaWQpKQorCQkJCWNvbnRpbnVlOworCQl9CiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCQlzZXRfcGFnZV9saW5rcyhwYWdlLCB6b25lLCBuaWQsIHBmbik7CiAJCWluaXRfcGFnZV9jb3VudChwYWdlKTsKQEAgLTE5MDEsNyArMTk5OSw3IEBACiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfTUVNTUFQX0lOSVQKICNkZWZpbmUgbWVtbWFwX2luaXQoc2l6ZSwgbmlkLCB6b25lLCBzdGFydF9wZm4pIFwKLQltZW1tYXBfaW5pdF96b25lKChzaXplKSwgKG5pZCksICh6b25lKSwgKHN0YXJ0X3BmbikpCisJbWVtbWFwX2luaXRfem9uZSgoc2l6ZSksIChuaWQpLCAoem9uZSksIChzdGFydF9wZm4pLCBNRU1NQVBfRUFSTFkpCiAjZW5kaWYKIAogc3RhdGljIGludCBfX2NwdWluaXQgem9uZV9iYXRjaHNpemUoc3RydWN0IHpvbmUgKnpvbmUpCkBAIC0yMTQ3LDcgKzIyNDUsOCBAQAogCiBfX21lbWluaXQgaW50IGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsCiAJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wZm4sCi0JCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSkKKwkJCQkJdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCQllbnVtIG1lbW1hcF9jb250ZXh0IGNvbnRleHQpCiB7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtPnpvbmVfcGdkYXQ7CiAJaW50IHJldDsKQEAgLTI1OTEsNyArMjY5MCw4IEBACiAJCWlmICghc2l6ZSkKIAkJCWNvbnRpbnVlOwogCi0JCXJldCA9IGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoem9uZSwgem9uZV9zdGFydF9wZm4sIHNpemUpOworCQlyZXQgPSBpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHpvbmUsIHpvbmVfc3RhcnRfcGZuLAorCQkJCQkJc2l6ZSwgTUVNTUFQX0VBUkxZKTsKIAkJQlVHX09OKHJldCk7CiAJCXpvbmVfc3RhcnRfcGZuICs9IHNpemU7CiAJfQpAQCAtMzIzMiw2ICszMzMyLDEwIEBACiAJCQludW1lbnRyaWVzID4+PSAoc2NhbGUgLSBQQUdFX1NISUZUKTsKIAkJZWxzZQogCQkJbnVtZW50cmllcyA8PD0gKFBBR0VfU0hJRlQgLSBzY2FsZSk7CisKKwkJLyogTWFrZSBzdXJlIHdlJ3ZlIGdvdCBhdCBsZWFzdCBhIDAtb3JkZXIgYWxsb2NhdGlvbi4uICovCisJCWlmICh1bmxpa2VseSgobnVtZW50cmllcyAqIGJ1Y2tldHNpemUpIDwgUEFHRV9TSVpFKSkKKwkJCW51bWVudHJpZXMgPSBQQUdFX1NJWkUgLyBidWNrZXRzaXplOwogCX0KIAludW1lbnRyaWVzID0gcm91bmR1cF9wb3dfb2ZfdHdvKG51bWVudHJpZXMpOwogCkBAIC0zMjQ0LDcgKzMzNDgsNyBAQAogCWlmIChudW1lbnRyaWVzID4gbWF4KQogCQludW1lbnRyaWVzID0gbWF4OwogCi0JbG9nMnF0eSA9IGxvbmdfbG9nMihudW1lbnRyaWVzKTsKKwlsb2cycXR5ID0gaWxvZzIobnVtZW50cmllcyk7CiAKIAlkbyB7CiAJCXNpemUgPSBidWNrZXRzaXplIDw8IGxvZzJxdHk7CkBAIC0zMjY2LDcgKzMzNzAsNyBAQAogCXByaW50aygiJXMgaGFzaCB0YWJsZSBlbnRyaWVzOiAlZCAob3JkZXI6ICVkLCAlbHUgYnl0ZXMpXG4iLAogCSAgICAgICB0YWJsZW5hbWUsCiAJICAgICAgICgxVSA8PCBsb2cycXR5KSwKLQkgICAgICAgbG9uZ19sb2cyKHNpemUpIC0gUEFHRV9TSElGVCwKKwkgICAgICAgaWxvZzIoc2l6ZSkgLSBQQUdFX1NISUZULAogCSAgICAgICBzaXplKTsKIAogCWlmIChfaGFzaF9zaGlmdCkKZGlmZiAtLWdpdCBhL21tL3JlYWRhaGVhZC5jIGIvbW0vcmVhZGFoZWFkLmMKaW5kZXggYTM4NmYyYi4uMGY1MzllOCAxMDA2NDQKLS0tIGEvbW0vcmVhZGFoZWFkLmMKKysrIGIvbW0vcmVhZGFoZWFkLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAKIHZvaWQgZGVmYXVsdF91bnBsdWdfaW9fZm4oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHBhZ2UgKnBhZ2UpCkBAIC0xNTEsNiArMTUyLDcgQEAKIAkJCXB1dF9wYWdlc19saXN0KHBhZ2VzKTsKIAkJCWJyZWFrOwogCQl9CisJCXRhc2tfaW9fYWNjb3VudF9yZWFkKFBBR0VfQ0FDSEVfU0laRSk7CiAJfQogCXBhZ2V2ZWNfbHJ1X2FkZCgmbHJ1X3B2ZWMpOwogCXJldHVybiByZXQ7CkBAIC00NTAsNyArNDUyLDcgQEAKICAqCiAgKiBOb3RlIHRoYXQgQGZpbHAgaXMgcHVyZWx5IHVzZWQgZm9yIHBhc3Npbmcgb24gdG8gdGhlIC0+cmVhZHBhZ2Vbc10oKQogICogaGFuZGxlcjogaXQgbWF5IHJlZmVyIHRvIGEgZGlmZmVyZW50IGZpbGUgZnJvbSBAbWFwcGluZyAoc28gd2UgbWF5IG5vdCB1c2UKLSAqIEBmaWxwLT5mX21hcHBpbmcgb3IgQGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlIGhlcmUpLgorICogQGZpbHAtPmZfbWFwcGluZyBvciBAZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSBoZXJlKS4KICAqIEFsc28sIEByYSBtYXkgbm90IGJlIGVxdWFsIHRvICZAZmlscC0+Zl9yYS4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCBkOGE4NDJhLi42NjlhY2IyMiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIApAQCAtNDMyLDcgKzQzMyw3IEBACiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKLQlwdGVfdCAqcHRlLCBlbnRyeTsKKwlwdGVfdCAqcHRlOwogCXNwaW5sb2NrX3QgKnB0bDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNDQ0LDE3ICs0NDUsMTggQEAKIAlpZiAoIXB0ZSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIXB0ZV9kaXJ0eSgqcHRlKSAmJiAhcHRlX3dyaXRlKCpwdGUpKQotCQlnb3RvIHVubG9jazsKKwlpZiAocHRlX2RpcnR5KCpwdGUpIHx8IHB0ZV93cml0ZSgqcHRlKSkgeworCQlwdGVfdCBlbnRyeTsKIAotCWVudHJ5ID0gcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyZXNzLCBwdGUpOwotCWVudHJ5ID0gcHRlX21rY2xlYW4oZW50cnkpOwotCWVudHJ5ID0gcHRlX3dycHJvdGVjdChlbnRyeSk7Ci0JcHRlcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdGUsIGVudHJ5KTsKLQlsYXp5X21tdV9wcm90X3VwZGF0ZShlbnRyeSk7Ci0JcmV0ID0gMTsKKwkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHB0ZV9wZm4oKnB0ZSkpOworCQllbnRyeSA9IHB0ZXBfY2xlYXJfZmx1c2godm1hLCBhZGRyZXNzLCBwdGUpOworCQllbnRyeSA9IHB0ZV93cnByb3RlY3QoZW50cnkpOworCQllbnRyeSA9IHB0ZV9ta2NsZWFuKGVudHJ5KTsKKwkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlLCBlbnRyeSk7CisJCWxhenlfbW11X3Byb3RfdXBkYXRlKGVudHJ5KTsKKwkJcmV0ID0gMTsKKwl9CiAKLXVubG9jazoKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtNDg5LDYgKzQ5MSw4IEBACiAJCWlmIChtYXBwaW5nKQogCQkJcmV0ID0gcGFnZV9ta2NsZWFuX2ZpbGUobWFwcGluZywgcGFnZSk7CiAJfQorCWlmIChwYWdlX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KHBhZ2UpKQorCQlyZXQgPSAxOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTU2NywxNCArNTcxLDIwIEBACiAgKgogICogVGhlIGNhbGxlciBuZWVkcyB0byBob2xkIHRoZSBwdGUgbG9jay4KICAqLwotdm9pZCBwYWdlX3JlbW92ZV9ybWFwKHN0cnVjdCBwYWdlICpwYWdlKQordm9pZCBwYWdlX3JlbW92ZV9ybWFwKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlpZiAoYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJnBhZ2UtPl9tYXBjb3VudCkpIHsKIAkJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgPCAwKSkgewogCQkJcHJpbnRrIChLRVJOX0VNRVJHICJFZWVrISBwYWdlX21hcGNvdW50KHBhZ2UpIHdlbnQgbmVnYXRpdmUhICglZClcbiIsIHBhZ2VfbWFwY291bnQocGFnZSkpOworCQkJcHJpbnRrIChLRVJOX0VNRVJHICIgIHBhZ2UgcGZuID0gJWx4XG4iLCBwYWdlX3RvX3BmbihwYWdlKSk7CiAJCQlwcmludGsgKEtFUk5fRU1FUkcgIiAgcGFnZS0+ZmxhZ3MgPSAlbHhcbiIsIHBhZ2UtPmZsYWdzKTsKIAkJCXByaW50ayAoS0VSTl9FTUVSRyAiICBwYWdlLT5jb3VudCA9ICV4XG4iLCBwYWdlX2NvdW50KHBhZ2UpKTsKIAkJCXByaW50ayAoS0VSTl9FTUVSRyAiICBwYWdlLT5tYXBwaW5nID0gJXBcbiIsIHBhZ2UtPm1hcHBpbmcpOworCQkJcHJpbnRfc3ltYm9sIChLRVJOX0VNRVJHICIgIHZtYS0+dm1fb3BzID0gJXNcbiIsICh1bnNpZ25lZCBsb25nKXZtYS0+dm1fb3BzKTsKKwkJCWlmICh2bWEtPnZtX29wcykKKwkJCQlwcmludF9zeW1ib2wgKEtFUk5fRU1FUkcgIiAgdm1hLT52bV9vcHMtPm5vcGFnZSA9ICVzXG4iLCAodW5zaWduZWQgbG9uZyl2bWEtPnZtX29wcy0+bm9wYWdlKTsKKwkJCWlmICh2bWEtPnZtX2ZpbGUgJiYgdm1hLT52bV9maWxlLT5mX29wKQorCQkJCXByaW50X3N5bWJvbCAoS0VSTl9FTUVSRyAiICB2bWEtPnZtX2ZpbGUtPmZfb3AtPm1tYXAgPSAlc1xuIiwgKHVuc2lnbmVkIGxvbmcpdm1hLT52bV9maWxlLT5mX29wLT5tbWFwKTsKIAkJCUJVRygpOwogCQl9CiAKQEAgLTY3OSw3ICs2ODksNyBAQAogCQlkZWNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOwogCiAKLQlwYWdlX3JlbW92ZV9ybWFwKHBhZ2UpOworCXBhZ2VfcmVtb3ZlX3JtYXAocGFnZSwgdm1hKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAKIG91dF91bm1hcDoKQEAgLTc2OSw3ICs3NzksNyBAQAogCQlpZiAocHRlX2RpcnR5KHB0ZXZhbCkpCiAJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAotCQlwYWdlX3JlbW92ZV9ybWFwKHBhZ2UpOworCQlwYWdlX3JlbW92ZV9ybWFwKHBhZ2UsIHZtYSk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJZGVjX21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKTsKIAkJKCptYXBjb3VudCktLTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGM4MjBiNGYuLjcwZGE3YTAgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtNTE1LDcgKzUxNSwxMiBAQAogCQkJc2l6ZSA9IFNITUVNX05SX0RJUkVDVDsKIAkJbnJfc3dhcHNfZnJlZWQgPSBzaG1lbV9mcmVlX3N3cChwdHIraWR4LCBwdHIrc2l6ZSk7CiAJfQotCWlmICghdG9wZGlyKQorCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gaW5kaXJlY3QgYmxvY2tzIG9yIHdlIGFyZSBwdW5jaGluZyBhIGhvbGUKKwkgKiBiZWxvdyBpbmRpcmVjdCBibG9ja3MsIG5vdGhpbmcgdG8gYmUgZG9uZS4KKwkgKi8KKwlpZiAoIXRvcGRpciB8fCAocHVuY2hfaG9sZSAmJiAobGltaXQgPD0gU0hNRU1fTlJfRElSRUNUKSkpCiAJCWdvdG8gZG9uZTI7CiAKIAlCVUdfT04obGltaXQgPD0gU0hNRU1fTlJfRElSRUNUKTsKQEAgLTEyMjUsNyArMTIzMCw3IEBACiAKIHN0cnVjdCBwYWdlICpzaG1lbV9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50ICp0eXBlKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgaWR4OwogCWludCBlcnJvcjsKQEAgLTEyNDgsNyArMTI1Myw3IEBACiAJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAlwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIHBnb2ZmLCBpbnQgbm9uYmxvY2spCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJZW51bSBzZ3BfdHlwZSBzZ3AgPSBub25ibG9jaz8gU0dQX1FVSUNLOiBTR1BfQ0FDSEU7CiAJdW5zaWduZWQgbG9uZyBzaXplOwpAQCAtMTI5MywxNCArMTI5OCwxNCBAQAogI2lmZGVmIENPTkZJR19OVU1BCiBpbnQgc2htZW1fc2V0X3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1lbXBvbGljeSAqbmV3KQogewotCXN0cnVjdCBpbm9kZSAqaSA9IHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppID0gdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXJldHVybiBtcG9sX3NldF9zaGFyZWRfcG9saWN5KCZTSE1FTV9JKGkpLT5wb2xpY3ksIHZtYSwgbmV3KTsKIH0KIAogc3RydWN0IG1lbXBvbGljeSAqCiBzaG1lbV9nZXRfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0Jc3RydWN0IGlub2RlICppID0gdm1hLT52bV9maWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmkgPSB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJdW5zaWduZWQgbG9uZyBpZHg7CiAKIAlpZHggPSAoKGFkZHIgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKSArIHZtYS0+dm1fcGdvZmY7CkBAIC0xMzEwLDcgKzEzMTUsNyBAQAogCiBpbnQgc2htZW1fbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGxvY2ssIHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIApAQCAtMTQyMiw3ICsxNDI3LDcgQEAKIHN0YXRpYyBzc2l6ZV90CiBzaG1lbV9maWxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJbG9mZl90CQlwb3M7CiAJdW5zaWduZWQgbG9uZwl3cml0dGVuOwogCXNzaXplX3QJCWVycjsKQEAgLTE0NDIsNyArMTQ0Nyw3IEBACiAJaWYgKGVyciB8fCAhY291bnQpCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gcmVtb3ZlX3N1aWQoZmlsZS0+Zl9kZW50cnkpOworCWVyciA9IHJlbW92ZV9zdWlkKGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xNTI0LDcgKzE1MjksNyBAQAogCiBzdGF0aWMgdm9pZCBkb19zaG1lbV9maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCAqcHBvcywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHJlYWRfYWN0b3JfdCBhY3RvcikKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwogCXVuc2lnbmVkIGxvbmcgaW5kZXgsIG9mZnNldDsKIApAQCAtMjQ5Myw4ICsyNDk4LDggQEAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCWlub2RlLT5pX3NpemUgPSBzaXplOwogCWlub2RlLT5pX25saW5rID0gMDsJLyogSXQgaXMgdW5saW5rZWQgKi8KLQlmaWxlLT5mX3Zmc21udCA9IG1udGdldChzaG1fbW50KTsKLQlmaWxlLT5mX2RlbnRyeSA9IGRlbnRyeTsKKwlmaWxlLT5mX3BhdGgubW50ID0gbW50Z2V0KHNobV9tbnQpOworCWZpbGUtPmZfcGF0aC5kZW50cnkgPSBkZW50cnk7CiAJZmlsZS0+Zl9tYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAlmaWxlLT5mX29wID0gJnNobWVtX2ZpbGVfb3BlcmF0aW9uczsKIAlmaWxlLT5mX21vZGUgPSBGTU9ERV9XUklURSB8IEZNT0RFX1JFQUQ7CmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggMDY4Y2I0NS4uYzYxMDA2MiAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtMTA3LDcgKzEwNyw5IEBACiAjaW5jbHVkZQk8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlCTxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlCTxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUJPGxpbnV4L2ZhdWx0LWluamVjdC5oPgogI2luY2x1ZGUJPGxpbnV4L3J0bXV0ZXguaD4KKyNpbmNsdWRlCTxsaW51eC9yZWNpcHJvY2FsX2Rpdi5oPgogCiAjaW5jbHVkZQk8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlCTxhc20vdGxiZmx1c2guaD4KQEAgLTM4NSw2ICszODcsNyBAQAogCXVuc2lnbmVkIGludCBzaGFyZWQ7CiAKIAl1bnNpZ25lZCBpbnQgYnVmZmVyX3NpemU7CisJdTMyIHJlY2lwcm9jYWxfYnVmZmVyX3NpemU7CiAvKiAzKSB0b3VjaGVkIGJ5IGV2ZXJ5IGFsbG9jICYgZnJlZSBmcm9tIHRoZSBiYWNrZW5kICovCiAJc3RydWN0IGttZW1fbGlzdDMgKm5vZGVsaXN0c1tNQVhfTlVNTk9ERVNdOwogCkBAIC02MjYsMTAgKzYyOSwxNyBAQAogCXJldHVybiBzbGFiLT5zX21lbSArIGNhY2hlLT5idWZmZXJfc2l6ZSAqIGlkeDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2JqX3RvX2luZGV4KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwKLQkJCQkJc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iaikKKy8qCisgKiBXZSB3YW50IHRvIGF2b2lkIGFuIGV4cGVuc2l2ZSBkaXZpZGUgOiAob2Zmc2V0IC8gY2FjaGUtPmJ1ZmZlcl9zaXplKQorICogICBVc2luZyB0aGUgZmFjdCB0aGF0IGJ1ZmZlcl9zaXplIGlzIGEgY29uc3RhbnQgZm9yIGEgcGFydGljdWxhciBjYWNoZSwKKyAqICAgd2UgY2FuIHJlcGxhY2UgKG9mZnNldCAvIGNhY2hlLT5idWZmZXJfc2l6ZSkgYnkKKyAqICAgcmVjaXByb2NhbF9kaXZpZGUob2Zmc2V0LCBjYWNoZS0+cmVjaXByb2NhbF9idWZmZXJfc2l6ZSkKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2JqX3RvX2luZGV4KGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSwKKwkJCQkJY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iaikKIHsKLQlyZXR1cm4gKHVuc2lnbmVkKShvYmogLSBzbGFiLT5zX21lbSkgLyBjYWNoZS0+YnVmZmVyX3NpemU7CisJdTMyIG9mZnNldCA9IChvYmogLSBzbGFiLT5zX21lbSk7CisJcmV0dXJuIHJlY2lwcm9jYWxfZGl2aWRlKG9mZnNldCwgY2FjaGUtPnJlY2lwcm9jYWxfYnVmZmVyX3NpemUpOwogfQogCiAvKgpAQCAtOTQ1LDcgKzk1NSw4IEBACiAJaWYgKGtldmVudGRfdXAoKSAmJiByZWFwX3dvcmstPndvcmsuZnVuYyA9PSBOVUxMKSB7CiAJCWluaXRfcmVhcF9ub2RlKGNwdSk7CiAJCUlOSVRfREVMQVlFRF9XT1JLKHJlYXBfd29yaywgY2FjaGVfcmVhcCk7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsIHJlYXBfd29yaywgSFogKyAzICogY3B1KTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgcmVhcF93b3JrLAorCQkJCQlfX3JvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFosIGNwdSkpOwogCX0KIH0KIApAQCAtMTQyNSw2ICsxNDM2LDggQEAKIAogCWNhY2hlX2NhY2hlLmJ1ZmZlcl9zaXplID0gQUxJR04oY2FjaGVfY2FjaGUuYnVmZmVyX3NpemUsCiAJCQkJCWNhY2hlX2xpbmVfc2l6ZSgpKTsKKwljYWNoZV9jYWNoZS5yZWNpcHJvY2FsX2J1ZmZlcl9zaXplID0KKwkJcmVjaXByb2NhbF92YWx1ZShjYWNoZV9jYWNoZS5idWZmZXJfc2l6ZSk7CiAKIAlmb3IgKG9yZGVyID0gMDsgb3JkZXIgPCBNQVhfT1JERVI7IG9yZGVyKyspIHsKIAkJY2FjaGVfZXN0aW1hdGUob3JkZXIsIGNhY2hlX2NhY2hlLmJ1ZmZlcl9zaXplLApAQCAtMjMxMSw2ICsyMzI0LDcgQEAKIAlpZiAoZmxhZ3MgJiBTTEFCX0NBQ0hFX0RNQSkKIAkJY2FjaGVwLT5nZnBmbGFncyB8PSBHRlBfRE1BOwogCWNhY2hlcC0+YnVmZmVyX3NpemUgPSBzaXplOworCWNhY2hlcC0+cmVjaXByb2NhbF9idWZmZXJfc2l6ZSA9IHJlY2lwcm9jYWxfdmFsdWUoc2l6ZSk7CiAKIAlpZiAoZmxhZ3MgJiBDRkxHU19PRkZfU0xBQikgewogCQljYWNoZXAtPnNsYWJwX2NhY2hlID0ga21lbV9maW5kX2dlbmVyYWxfY2FjaGVwKHNsYWJfc2l6ZSwgMHUpOwpAQCAtMzA4OCwxMiArMzEwMiw4OSBAQAogI2RlZmluZSBjYWNoZV9hbGxvY19kZWJ1Z2NoZWNrX2FmdGVyKGEsYixvYmpwLGQpIChvYmpwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRkFJTFNMQUIKKworc3RhdGljIHN0cnVjdCBmYWlsc2xhYl9hdHRyIHsKKworCXN0cnVjdCBmYXVsdF9hdHRyIGF0dHI7CisKKwl1MzIgaWdub3JlX2dmcF93YWl0OworI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5ICppZ25vcmVfZ2ZwX3dhaXRfZmlsZTsKKyNlbmRpZgorCit9IGZhaWxzbGFiID0geworCS5hdHRyID0gRkFVTFRfQVRUUl9JTklUSUFMSVpFUiwKKwkuaWdub3JlX2dmcF93YWl0ID0gMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2ZhaWxzbGFiKGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gc2V0dXBfZmF1bHRfYXR0cigmZmFpbHNsYWIuYXR0ciwgc3RyKTsKK30KK19fc2V0dXAoImZhaWxzbGFiPSIsIHNldHVwX2ZhaWxzbGFiKTsKKworc3RhdGljIGludCBzaG91bGRfZmFpbHNsYWIoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCit7CisJaWYgKGNhY2hlcCA9PSAmY2FjaGVfY2FjaGUpCisJCXJldHVybiAwOworCWlmIChmbGFncyAmIF9fR0ZQX05PRkFJTCkKKwkJcmV0dXJuIDA7CisJaWYgKGZhaWxzbGFiLmlnbm9yZV9nZnBfd2FpdCAmJiAoZmxhZ3MgJiBfX0dGUF9XQUlUKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2hvdWxkX2ZhaWwoJmZhaWxzbGFiLmF0dHIsIG9ial9zaXplKGNhY2hlcCkpOworfQorCisjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUworCitzdGF0aWMgaW50IF9faW5pdCBmYWlsc2xhYl9kZWJ1Z2ZzKHZvaWQpCit7CisJbW9kZV90IG1vZGUgPSBTX0lGUkVHIHwgU19JUlVTUiB8IFNfSVdVU1I7CisJc3RydWN0IGRlbnRyeSAqZGlyOworCWludCBlcnI7CisKKyAgICAgICAJZXJyID0gaW5pdF9mYXVsdF9hdHRyX2RlbnRyaWVzKCZmYWlsc2xhYi5hdHRyLCAiZmFpbHNsYWIiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWRpciA9IGZhaWxzbGFiLmF0dHIuZGVudHJpZXMuZGlyOworCisJZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0X2ZpbGUgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJpZ25vcmUtZ2ZwLXdhaXQiLCBtb2RlLCBkaXIsCisJCQkJICAgICAgJmZhaWxzbGFiLmlnbm9yZV9nZnBfd2FpdCk7CisKKwlpZiAoIWZhaWxzbGFiLmlnbm9yZV9nZnBfd2FpdF9maWxlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWRlYnVnZnNfcmVtb3ZlKGZhaWxzbGFiLmlnbm9yZV9nZnBfd2FpdF9maWxlKTsKKwkJY2xlYW51cF9mYXVsdF9hdHRyX2RlbnRyaWVzKCZmYWlsc2xhYi5hdHRyKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitsYXRlX2luaXRjYWxsKGZhaWxzbGFiX2RlYnVnZnMpOworCisjZW5kaWYgLyogQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUyAqLworCisjZWxzZSAvKiBDT05GSUdfRkFJTFNMQUIgKi8KKworc3RhdGljIGlubGluZSBpbnQgc2hvdWxkX2ZhaWxzbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0ZBSUxTTEFCICovCisKIHN0YXRpYyBpbmxpbmUgdm9pZCAqX19fX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzKQogewogCXZvaWQgKm9ianA7CiAJc3RydWN0IGFycmF5X2NhY2hlICphYzsKIAogCWNoZWNrX2lycV9vZmYoKTsKKworCWlmIChzaG91bGRfZmFpbHNsYWIoY2FjaGVwLCBmbGFncykpCisJCXJldHVybiBOVUxMOworCiAJYWMgPSBjcHVfY2FjaGVfZ2V0KGNhY2hlcCk7CiAJaWYgKGxpa2VseShhYy0+YXZhaWwpKSB7CiAJCVNUQVRTX0lOQ19BTExPQ0hJVChjYWNoZXApOwpAQCAtMzE3Myw2ICszMjY0LDcgQEAKIAlzdHJ1Y3Qgem9uZSAqKno7CiAJdm9pZCAqb2JqID0gTlVMTDsKIAlpbnQgbmlkOworCWdmcF90IGxvY2FsX2ZsYWdzID0gKGZsYWdzICYgR0ZQX0xFVkVMX01BU0spOwogCiByZXRyeToKIAkvKgpAQCAtMzE4MiwyMSArMzI3NCwyNiBAQAogCWZvciAoeiA9IHpvbmVsaXN0LT56b25lczsgKnogJiYgIW9iajsgeisrKSB7CiAJCW5pZCA9IHpvbmVfdG9fbmlkKCp6KTsKIAotCQlpZiAoY3B1c2V0X3pvbmVfYWxsb3dlZCgqeiwgZmxhZ3MpICYmCisJCWlmIChjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKCp6LCBmbGFncykgJiYKIAkJCWNhY2hlLT5ub2RlbGlzdHNbbmlkXSAmJgogCQkJY2FjaGUtPm5vZGVsaXN0c1tuaWRdLT5mcmVlX29iamVjdHMpCiAJCQkJb2JqID0gX19fX2NhY2hlX2FsbG9jX25vZGUoY2FjaGUsCiAJCQkJCWZsYWdzIHwgR0ZQX1RISVNOT0RFLCBuaWQpOwogCX0KIAotCWlmICghb2JqKSB7CisJaWYgKCFvYmogJiYgIShmbGFncyAmIF9fR0ZQX05PX0dST1cpKSB7CiAJCS8qCiAJCSAqIFRoaXMgYWxsb2NhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCB3aXRoaW4gdGhlIGNvbnN0cmFpbnRzCiAJCSAqIG9mIHRoZSBjdXJyZW50IGNwdXNldCAvIG1lbW9yeSBwb2xpY3kgcmVxdWlyZW1lbnRzLgogCQkgKiBXZSBtYXkgdHJpZ2dlciB2YXJpb3VzIGZvcm1zIG9mIHJlY2xhaW0gb24gdGhlIGFsbG93ZWQKIAkJICogc2V0IGFuZCBnbyBpbnRvIG1lbW9yeSByZXNlcnZlcyBpZiBuZWNlc3NhcnkuCiAJCSAqLworCQlpZiAobG9jYWxfZmxhZ3MgJiBfX0dGUF9XQUlUKQorCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlrbWVtX2ZsYWdjaGVjayhjYWNoZSwgZmxhZ3MpOwogCQlvYmogPSBrbWVtX2dldHBhZ2VzKGNhY2hlLCBmbGFncywgLTEpOworCQlpZiAobG9jYWxfZmxhZ3MgJiBfX0dGUF9XQUlUKQorCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJaWYgKG9iaikgewogCQkJLyoKIAkJCSAqIEluc2VydCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwZXIgbm9kZSBxdWV1ZXMKQEAgLTMyMTMsNyArMzMxMCw3IEBACiAJCQkJCSAqLwogCQkJCQlnb3RvIHJldHJ5OwogCQkJfSBlbHNlIHsKLQkJCQlrbWVtX2ZyZWVwYWdlcyhjYWNoZSwgb2JqKTsKKwkJCQkvKiBjYWNoZV9ncm93IGFscmVhZHkgZnJlZWQgb2JqICovCiAJCQkJb2JqID0gTlVMTDsKIAkJCX0KIAkJfQpAQCAtMzQ1Niw3ICszNTUzLDcgQEAKICAqCiAgKiBDdXJyZW50bHkgb25seSB1c2VkIGZvciBkZW50cnkgdmFsaWRhdGlvbi4KICAqLwotaW50IGZhc3RjYWxsIGttZW1fcHRyX3ZhbGlkYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKnB0cikKK2ludCBrbWVtX3B0cl92YWxpZGF0ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBjb25zdCB2b2lkICpwdHIpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcHRyOwogCXVuc2lnbmVkIGxvbmcgbWluX2FkZHIgPSBQQUdFX09GRlNFVDsKQEAgLTM0OTAsNiArMzU4Nyw3IEBACiAgKiBAY2FjaGVwOiBUaGUgY2FjaGUgdG8gYWxsb2NhdGUgZnJvbS4KICAqIEBmbGFnczogU2VlIGttYWxsb2MoKS4KICAqIEBub2RlaWQ6IG5vZGUgbnVtYmVyIG9mIHRoZSB0YXJnZXQgbm9kZS4KKyAqIEBjYWxsZXI6IHJldHVybiBhZGRyZXNzIG9mIGNhbGxlciwgdXNlZCBmb3IgZGVidWcgaW5mb3JtYXRpb24KICAqCiAgKiBJZGVudGljYWwgdG8ga21lbV9jYWNoZV9hbGxvYyBidXQgaXQgd2lsbCBhbGxvY2F0ZSBtZW1vcnkgb24gdGhlIGdpdmVuCiAgKiBub2RlLCB3aGljaCBjYW4gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2UgZm9yIGNwdSBib3VuZCBzdHJ1Y3R1cmVzLgpAQCAtMzkyOCw3ICs0MDI2LDcgQEAKIAlpZiAoIW11dGV4X3RyeWxvY2soJmNhY2hlX2NoYWluX211dGV4KSkgewogCQkvKiBHaXZlIHVwLiBTZXR1cCB0aGUgbmV4dCBpdGVyYXRpb24uICovCiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmX19nZXRfY3B1X3ZhcihyZWFwX3dvcmspLAotCQkJCSAgICAgIFJFQVBUSU1FT1VUX0NQVUMpOworCQkJCSAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoUkVBUFRJTUVPVVRfQ1BVQykpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zOTc0LDcgKzQwNzIsOCBAQAogCW5leHRfcmVhcF9ub2RlKCk7CiAJcmVmcmVzaF9jcHVfdm1fc3RhdHMoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkvKiBTZXQgdXAgdGhlIG5leHQgaXRlcmF0aW9uICovCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZfX2dldF9jcHVfdmFyKHJlYXBfd29yayksIFJFQVBUSU1FT1VUX0NQVUMpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmX19nZXRfY3B1X3ZhcihyZWFwX3dvcmspLAorCQlyb3VuZF9qaWZmaWVzX3JlbGF0aXZlKFJFQVBUSU1FT1VUX0NQVUMpKTsKIH0KIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCmRpZmYgLS1naXQgYS9tbS9zbG9iLmMgYi9tbS9zbG9iLmMKaW5kZXggNTQyMzk0MS4uNWFkYzI5YyAxMDA2NDQKLS0tIGEvbW0vc2xvYi5jCisrKyBiL21tL3Nsb2IuYwpAQCAtNjAsNiArNjAsOCBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhibG9ja19sb2NrKTsKIAogc3RhdGljIHZvaWQgc2xvYl9mcmVlKHZvaWQgKmIsIGludCBzaXplKTsKK3N0YXRpYyB2b2lkIHNsb2JfdGltZXJfY2JrKHZvaWQpOworCiAKIHN0YXRpYyB2b2lkICpzbG9iX2FsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGludCBhbGlnbikKIHsKQEAgLTE1Nyw3ICsxNTksNyBAQAogCXJldHVybiBvcmRlcjsKIH0KIAotdm9pZCAqa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKQordm9pZCAqX19rbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBnZnApCiB7CiAJc2xvYl90ICptOwogCWJpZ2Jsb2NrX3QgKmJiOwpAQCAtMTg2LDggKzE4OCw3IEBACiAJc2xvYl9mcmVlKGJiLCBzaXplb2YoYmlnYmxvY2tfdCkpOwogCXJldHVybiAwOwogfQotCi1FWFBPUlRfU1lNQk9MKGttYWxsb2MpOworRVhQT1JUX1NZTUJPTChfX2ttYWxsb2MpOwogCiB2b2lkIGtmcmVlKGNvbnN0IHZvaWQgKmJsb2NrKQogewpAQCAtMzI3LDkgKzMyOCwyNSBAQAogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX25hbWUpOwogCiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3Qgc2xvYl90aW1lciA9IFRJTUVSX0lOSVRJQUxJWkVSKAotCSh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlrbWVtX2NhY2hlX2luaXQsIDAsIDApOworCSh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlzbG9iX3RpbWVyX2NiaywgMCwgMCk7CiAKLXZvaWQga21lbV9jYWNoZV9pbml0KHZvaWQpCitpbnQga21lbV9jYWNoZV9zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKmQpCit7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfc2hyaW5rKTsKKworaW50IGttZW1fcHRyX3ZhbGlkYXRlKHN0cnVjdCBrbWVtX2NhY2hlICphLCBjb25zdCB2b2lkICpiKQoreworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBrbWVtX2NhY2hlX2luaXQodm9pZCkKK3sKKwlzbG9iX3RpbWVyX2NiaygpOworfQorCitzdGF0aWMgdm9pZCBzbG9iX3RpbWVyX2Niayh2b2lkKQogewogCXZvaWQgKnAgPSBzbG9iX2FsbG9jKFBBR0VfU0laRSwgMCwgUEFHRV9TSVpFLTEpOwogCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCBjNTQzMTA3Li5hMmQ5YmI0IDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTQzNCw3ICs0MzQsNyBAQAogICoKICAqIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3VzcGVuZCB0byBkaXNrIChha2Egc3dzdXNwKS4KICAqLwotaW50IHN3YXBfdHlwZV9vZihkZXZfdCBkZXZpY2UsIHNlY3Rvcl90IG9mZnNldCkKK2ludCBzd2FwX3R5cGVfb2YoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQsIHN0cnVjdCBibG9ja19kZXZpY2UgKipiZGV2X3ApCiB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IE5VTEw7CiAJaW50IGk7CkBAIC00NTAsNiArNDUwLDkgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghYmRldikgeworCQkJaWYgKGJkZXZfcCkKKwkJCQkqYmRldl9wID0gc2lzLT5iZGV2OworCiAJCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAkJCXJldHVybiBpOwogCQl9CkBAIC00NTksNiArNDYyLDkgQEAKIAkJCXNlID0gbGlzdF9lbnRyeShzaXMtPmV4dGVudF9saXN0Lm5leHQsCiAJCQkJCXN0cnVjdCBzd2FwX2V4dGVudCwgbGlzdCk7CiAJCQlpZiAoc2UtPnN0YXJ0X2Jsb2NrID09IG9mZnNldCkgeworCQkJCWlmIChiZGV2X3ApCisJCQkJCSpiZGV2X3AgPSBzaXMtPmJkZXY7CisKIAkJCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAkJCQliZHB1dChiZGV2KTsKIAkJCQlyZXR1cm4gaTsKQEAgLTEzNTcsMTAgKzEzNjMsMTAgQEAKIAl9CiAKIAlmaWxlID0gcHRyLT5zd2FwX2ZpbGU7Ci0JbGVuID0gc2VxX3BhdGgoc3dhcCwgZmlsZS0+Zl92ZnNtbnQsIGZpbGUtPmZfZGVudHJ5LCAiIFx0XG5cXCIpOworCWxlbiA9IHNlcV9wYXRoKHN3YXAsIGZpbGUtPmZfcGF0aC5tbnQsIGZpbGUtPmZfcGF0aC5kZW50cnksICIgXHRcblxcIik7CiAJc2VxX3ByaW50Zihzd2FwLCAiJSpzJXNcdCV1XHQldVx0JWRcbiIsCiAJCSAgICAgICBsZW4gPCA0MCA/IDQwIC0gbGVuIDogMSwgIiAiLAotCQkgICAgICAgU19JU0JMSyhmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSA/CisJCSAgICAgICBTX0lTQkxLKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgPwogCQkJCSJwYXJ0aXRpb24iIDogImZpbGVcdCIsCiAJCSAgICAgICBwdHItPnBhZ2VzIDw8IChQQUdFX1NISUZUIC0gMTApLAogCQkgICAgICAgcHRyLT5pbnVzZV9wYWdlcyA8PCAoUEFHRV9TSElGVCAtIDEwKSwKZGlmZiAtLWdpdCBhL21tL3Rpbnktc2htZW0uYyBiL21tL3Rpbnktc2htZW0uYwppbmRleCA1ZjJjYmYwLi5jN2Y2ZTE5IDEwMDY0NAotLS0gYS9tbS90aW55LXNobWVtLmMKKysrIGIvbW0vdGlueS1zaG1lbS5jCkBAIC03OSw4ICs3OSw4IEBACiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlpbm9kZS0+aV9ubGluayA9IDA7CS8qIEl0IGlzIHVubGlua2VkICovCiAKLQlmaWxlLT5mX3Zmc21udCA9IG1udGdldChzaG1fbW50KTsKLQlmaWxlLT5mX2RlbnRyeSA9IGRlbnRyeTsKKwlmaWxlLT5mX3BhdGgubW50ID0gbW50Z2V0KHNobV9tbnQpOworCWZpbGUtPmZfcGF0aC5kZW50cnkgPSBkZW50cnk7CiAJZmlsZS0+Zl9tYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAlmaWxlLT5mX29wID0gJnJhbWZzX2ZpbGVfb3BlcmF0aW9uczsKIAlmaWxlLT5mX21vZGUgPSBGTU9ERV9XUklURSB8IEZNT0RFX1JFQUQ7CmRpZmYgLS1naXQgYS9tbS90cnVuY2F0ZS5jIGIvbW0vdHJ1bmNhdGUuYwppbmRleCBlMDdiMWU2Li41ZGY5NDdkIDEwMDY0NAotLS0gYS9tbS90cnVuY2F0ZS5jCisrKyBiL21tL3RydW5jYXRlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgorI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgkvKiBncnIuIHRyeV90b19yZWxlYXNlX3BhZ2UsCiAJCQkJICAgZG9faW52YWxpZGF0ZXBhZ2UgKi8KIApAQCAtNTEsNiArNTIsMzMgQEAKIH0KIAogLyoKKyAqIFRoaXMgY2FuY2VscyBqdXN0IHRoZSBkaXJ0eSBiaXQgb24gdGhlIGtlcm5lbCBwYWdlIGl0c2VsZiwgaXQKKyAqIGRvZXMgTk9UIGFjdHVhbGx5IHJlbW92ZSBkaXJ0eSBiaXRzIG9uIGFueSBtbWFwJ3MgdGhhdCBtYXkgYmUKKyAqIGFyb3VuZC4gSXQgYWxzbyBsZWF2ZXMgdGhlIHBhZ2UgdGFnZ2VkIGRpcnR5LCBzbyBhbnkgc3luYworICogYWN0aXZpdHkgd2lsbCBzdGlsbCBmaW5kIGl0IG9uIHRoZSBkaXJ0eSBsaXN0cywgYW5kIGluIHBhcnRpY3VsYXIsCisgKiBjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbygpIHdpbGwgc3RpbGwgbG9vayBhdCB0aGUgZGlydHkgYml0cyBpbgorICogdGhlIFZNLgorICoKKyAqIERvaW5nIHRoaXMgc2hvdWxkICpub3JtYWxseSogb25seSBldmVyIGJlIGRvbmUgd2hlbiBhIHBhZ2UKKyAqIGlzIHRydW5jYXRlZCwgYW5kIGlzIG5vdCBhY3R1YWxseSBtYXBwZWQgYW55d2hlcmUgYXQgYWxsLiBIb3dldmVyLAorICogZnMvYnVmZmVyLmMgZG9lcyB0aGlzIHdoZW4gaXQgbm90aWNlcyB0aGF0IHNvbWVib2R5IGhhcyBjbGVhbmVkCisgKiBvdXQgYWxsIHRoZSBidWZmZXJzIG9uIGEgcGFnZSB3aXRob3V0IGFjdHVhbGx5IGRvaW5nIGl0IHRocm91Z2gKKyAqIHRoZSBWTS4gQ2FuIHlvdSBzYXkgImV4dDMgaXMgaG9ycmlibHkgdWdseSI/IFRvdWdodCB5b3UgY291bGQuCisgKi8KK3ZvaWQgY2FuY2VsX2RpcnR5X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBhY2NvdW50X3NpemUpCit7CisJaWYgKFRlc3RDbGVhclBhZ2VEaXJ0eShwYWdlKSkgeworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CisJCWlmIChtYXBwaW5nICYmIG1hcHBpbmdfY2FwX2FjY291bnRfZGlydHkobWFwcGluZykpIHsKKwkJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7CisJCQlpZiAoYWNjb3VudF9zaXplKQorCQkJCXRhc2tfaW9fYWNjb3VudF9jYW5jZWxsZWRfd3JpdGUoYWNjb3VudF9zaXplKTsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0woY2FuY2VsX2RpcnR5X3BhZ2UpOworCisvKgogICogSWYgdHJ1bmNhdGUgY2Fubm90IHJlbW92ZSB0aGUgZnMtcHJpdmF0ZSBtZXRhZGF0YSBmcm9tIHRoZSBwYWdlLCB0aGUgcGFnZQogICogYmVjb21lcyBhbm9ueW1vdXMuICBJdCB3aWxsIGJlIGxlZnQgb24gdGhlIExSVSBhbmQgbWF5IGV2ZW4gYmUgbWFwcGVkIGludG8KICAqIHVzZXIgcGFnZXRhYmxlcyBpZiB3ZSdyZSByYWNpbmcgd2l0aCBmaWxlbWFwX25vcGFnZSgpLgpAQCAtNjYsMTAgKzk0LDExIEBACiAJaWYgKHBhZ2UtPm1hcHBpbmcgIT0gbWFwcGluZykKIAkJcmV0dXJuOwogCisJY2FuY2VsX2RpcnR5X3BhZ2UocGFnZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwogCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKIAkJZG9faW52YWxpZGF0ZXBhZ2UocGFnZSwgMCk7CiAKLQljbGVhcl9wYWdlX2RpcnR5KHBhZ2UpOwogCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwogCUNsZWFyUGFnZU1hcHBlZFRvRGlzayhwYWdlKTsKIAlyZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwpAQCAtMzE5LDYgKzM0OCwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRvX2xhdW5kZXJfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKCFQYWdlRGlydHkocGFnZSkpCisJCXJldHVybiAwOworCWlmIChwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcgfHwgbWFwcGluZy0+YV9vcHMtPmxhdW5kZXJfcGFnZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbWFwcGluZy0+YV9vcHMtPmxhdW5kZXJfcGFnZShwYWdlKTsKK30KKwogLyoqCiAgKiBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSAtIHJlbW92ZSByYW5nZSBvZiBwYWdlcyBmcm9tIGFuIGFkZHJlc3Nfc3BhY2UKICAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZQpAQCAtMzQ4LDcgKzM4Niw2IEBACiAJCWZvciAoaSA9IDA7ICFyZXQgJiYgaSA8IHBhZ2V2ZWNfY291bnQoJnB2ZWMpOyBpKyspIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKIAkJCXBnb2ZmX3QgcGFnZV9pbmRleDsKLQkJCWludCB3YXNfZGlydHk7CiAKIAkJCWxvY2tfcGFnZShwYWdlKTsKIAkJCWlmIChwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcpIHsKQEAgLTM4NCwxOCArNDIxLDE0IEBACiAJCQkJCSAgUEFHRV9DQUNIRV9TSVpFLCAwKTsKIAkJCQl9CiAJCQl9Ci0JCQl3YXNfZGlydHkgPSB0ZXN0X2NsZWFyX3BhZ2VfZGlydHkocGFnZSk7Ci0JCQlpZiAoIWludmFsaWRhdGVfY29tcGxldGVfcGFnZTIobWFwcGluZywgcGFnZSkpIHsKLQkJCQlpZiAod2FzX2RpcnR5KQotCQkJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKwkJCXJldCA9IGRvX2xhdW5kZXJfcGFnZShtYXBwaW5nLCBwYWdlKTsKKwkJCWlmIChyZXQgPT0gMCAmJiAhaW52YWxpZGF0ZV9jb21wbGV0ZV9wYWdlMihtYXBwaW5nLCBwYWdlKSkKIAkJCQlyZXQgPSAtRUlPOwotCQkJfQogCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCX0KIAkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQotCVdBUk5fT05fT05DRShyZXQpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZSk7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDA5M2Y1ZmUuLjc0MzBkZjYgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC02OTIsNyArNjkyLDcgQEAKIAkJCV9fY291bnRfdm1fZXZlbnRzKEtTV0FQRF9TVEVBTCwgbnJfZnJlZWQpOwogCQl9IGVsc2UKIAkJCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdTQ0FOX0RJUkVDVCwgem9uZSwgbnJfc2Nhbik7Ci0JCV9fY291bnRfdm1fZXZlbnRzKFBHQUNUSVZBVEUsIG5yX2ZyZWVkKTsKKwkJX19jb3VudF96b25lX3ZtX2V2ZW50cyhQR1NURUFMLCB6b25lLCBucl9mcmVlZCk7CiAKIAkJaWYgKG5yX3Rha2VuID09IDApCiAJCQlnb3RvIGRvbmU7CkBAIC05ODQsNyArOTg0LDcgQEAKIAkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBfX0dGUF9IQVJEV0FMTCkpCisJCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCh6b25lLCBHRlBfS0VSTkVMKSkKIAkJCWNvbnRpbnVlOwogCiAJCW5vdGVfem9uZV9zY2FubmluZ19wcmlvcml0eSh6b25lLCBwcmlvcml0eSk7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQAogCWZvciAoaSA9IDA7IHpvbmVzW2ldICE9IE5VTEw7IGkrKykgewogCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHpvbmVzW2ldOwogCi0JCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBfX0dGUF9IQVJEV0FMTCkpCisJCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCh6b25lLCBHRlBfS0VSTkVMKSkKIAkJCWNvbnRpbnVlOwogCiAJCWxydV9wYWdlcyArPSB6b25lLT5ucl9hY3RpdmUgKyB6b25lLT5ucl9pbmFjdGl2ZTsKQEAgLTEwODksNyArMTA4OSw3IEBACiAJZm9yIChpID0gMDsgem9uZXNbaV0gIT0gMDsgaSsrKSB7CiAJCXN0cnVjdCB6b25lICp6b25lID0gem9uZXNbaV07CiAKLQkJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIF9fR0ZQX0hBUkRXQUxMKSkKKwkJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHpvbmUsIEdGUF9LRVJORUwpKQogCQkJY29udGludWU7CiAKIAkJem9uZS0+cHJldl9wcmlvcml0eSA9IHByaW9yaXR5OwpAQCAtMTM1NCw3ICsxMzU0LDcgQEAKIAkJcmV0dXJuOwogCWlmIChwZ2RhdC0+a3N3YXBkX21heF9vcmRlciA8IG9yZGVyKQogCQlwZ2RhdC0+a3N3YXBkX21heF9vcmRlciA9IG9yZGVyOwotCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBfX0dGUF9IQVJEV0FMTCkpCisJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHpvbmUsIEdGUF9LRVJORUwpKQogCQlyZXR1cm47CiAJaWYgKCF3YWl0cXVldWVfYWN0aXZlKCZwZ2RhdC0+a3N3YXBkX3dhaXQpKQogCQlyZXR1cm47CkBAIC0xMzY5LDggKzEzNjksOCBAQAogICoKICAqIEZvciBwYXNzID4gMyB3ZSBhbHNvIHRyeSB0byBzaHJpbmsgdGhlIExSVSBsaXN0cyB0aGF0IGNvbnRhaW4gYSBmZXcgcGFnZXMKICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF96b25lcyh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBpbnQgcGFzcywKLQkJCQkgICAgICBpbnQgcHJpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX3pvbmVzKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGludCBwcmlvLAorCQkJCSAgICAgIGludCBwYXNzLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHJldCA9IDA7CkBAIC0xNDA2LDYgKzE0MDYsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9scnVfcGFnZXModm9pZCkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CisKKwlmb3JfZWFjaF96b25lKHpvbmUpCisJCXJldCArPSB6b25lLT5ucl9hY3RpdmUgKyB6b25lLT5ucl9pbmFjdGl2ZTsKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogVHJ5IHRvIGZyZWUgYG5yX3BhZ2VzJyBvZiBtZW1vcnksIHN5c3RlbS13aWRlLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YKICAqIGZyZWVkIHBhZ2VzLgpAQCAtMTQyMCw3ICsxNDMwLDYgQEAKIAl1bnNpZ25lZCBsb25nIHJldCA9IDA7CiAJaW50IHBhc3M7CiAJc3RydWN0IHJlY2xhaW1fc3RhdGUgcmVjbGFpbV9zdGF0ZTsKLQlzdHJ1Y3Qgem9uZSAqem9uZTsKIAlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewogCQkuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLAogCQkubWF5X3N3YXAgPSAwLApAQCAtMTQzMSwxMCArMTQ0MCw3IEBACiAKIAljdXJyZW50LT5yZWNsYWltX3N0YXRlID0gJnJlY2xhaW1fc3RhdGU7CiAKLQlscnVfcGFnZXMgPSAwOwotCWZvcl9lYWNoX3pvbmUoem9uZSkKLQkJbHJ1X3BhZ2VzICs9IHpvbmUtPm5yX2FjdGl2ZSArIHpvbmUtPm5yX2luYWN0aXZlOwotCisJbHJ1X3BhZ2VzID0gY291bnRfbHJ1X3BhZ2VzKCk7CiAJbnJfc2xhYiA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfUkVDTEFJTUFCTEUpOwogCS8qIElmIHNsYWIgY2FjaGVzIGFyZSBodWdlLCBpdCdzIGJldHRlciB0byBoaXQgdGhlbSBmaXJzdCAqLwogCXdoaWxlIChucl9zbGFiID49IGxydV9wYWdlcykgewpAQCAtMTQ2MSwxMyArMTQ2Nyw2IEBACiAJZm9yIChwYXNzID0gMDsgcGFzcyA8IDU7IHBhc3MrKykgewogCQlpbnQgcHJpbzsKIAotCQkvKiBOZWVkZWQgZm9yIHNocmlua2luZyBzbGFiIGNhY2hlcyBsYXRlciBvbiAqLwotCQlpZiAoIWxydV9wYWdlcykKLQkJCWZvcl9lYWNoX3pvbmUoem9uZSkgewotCQkJCWxydV9wYWdlcyArPSB6b25lLT5ucl9hY3RpdmU7Ci0JCQkJbHJ1X3BhZ2VzICs9IHpvbmUtPm5yX2luYWN0aXZlOwotCQkJfQotCiAJCS8qIEZvcmNlIHJlY2xhaW1pbmcgbWFwcGVkIHBhZ2VzIGluIHRoZSBwYXNzZXMgIzMgYW5kICM0ICovCiAJCWlmIChwYXNzID4gMikgewogCQkJc2MubWF5X3N3YXAgPSAxOwpAQCAtMTQ4Myw3ICsxNDgyLDggQEAKIAkJCQlnb3RvIG91dDsKIAogCQkJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7Ci0JCQlzaHJpbmtfc2xhYihzYy5ucl9zY2FubmVkLCBzYy5nZnBfbWFzaywgbHJ1X3BhZ2VzKTsKKwkJCXNocmlua19zbGFiKHNjLm5yX3NjYW5uZWQsIHNjLmdmcF9tYXNrLAorCQkJCQljb3VudF9scnVfcGFnZXMoKSk7CiAJCQlyZXQgKz0gcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYjsKIAkJCWlmIChyZXQgPj0gbnJfcGFnZXMpCiAJCQkJZ290byBvdXQ7CkBAIC0xNDkxLDIwICsxNDkxLDE5IEBACiAJCQlpZiAoc2MubnJfc2Nhbm5lZCAmJiBwcmlvIDwgREVGX1BSSU9SSVRZIC0gMikKIAkJCQljb25nZXN0aW9uX3dhaXQoV1JJVEUsIEhaIC8gMTApOwogCQl9Ci0KLQkJbHJ1X3BhZ2VzID0gMDsKIAl9CiAKIAkvKgogCSAqIElmIHJldCA9IDAsIHdlIGNvdWxkIG5vdCBzaHJpbmsgTFJVcywgYnV0IHRoZXJlIG1heSBiZSBzb21ldGhpbmcKIAkgKiBpbiBzbGFiIGNhY2hlcwogCSAqLwotCWlmICghcmV0KQorCWlmICghcmV0KSB7CiAJCWRvIHsKIAkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwotCQkJc2hyaW5rX3NsYWIobnJfcGFnZXMsIHNjLmdmcF9tYXNrLCBscnVfcGFnZXMpOworCQkJc2hyaW5rX3NsYWIobnJfcGFnZXMsIHNjLmdmcF9tYXNrLCBjb3VudF9scnVfcGFnZXMoKSk7CiAJCQlyZXQgKz0gcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYjsKIAkJfSB3aGlsZSAocmV0IDwgbnJfcGFnZXMgJiYgcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA+IDApOworCX0KIAogb3V0OgogCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcm9jLmMgYi9uZXQvYXRtL3Byb2MuYwppbmRleCA5MWZlNWY1Li43Mzk4NjZiIDEwMDY0NAotLS0gYS9uZXQvYXRtL3Byb2MuYworKysgYi9uZXQvYXRtL3Byb2MuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJaWYgKGNvdW50ID09IDApIHJldHVybiAwOwogCXBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYWdlKSByZXR1cm4gLUVOT01FTTsKLQlkZXYgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpLT5kYXRhOworCWRldiA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAlpZiAoIWRldi0+b3BzLT5wcm9jX3JlYWQpCiAJCWxlbmd0aCA9IC1FSU5WQUw7CiAJZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9hZl9heDI1LmMgYi9uZXQvYXgyNS9hZl9heDI1LmMKaW5kZXggNmNhYmY2ZC4uNDIyMzNkZiAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYWZfYXgyNS5jCisrKyBiL25ldC9heDI1L2FmX2F4MjUuYwpAQCAtMTA4OCw4ICsxMDg4LDggQEAKIC8qCiAgKglGSVhNRTogbm9uYmxvY2sgYmVoYXZpb3VyIGxvb2tzIGxpa2UgaXQgbWF5IGhhdmUgYSBidWcuCiAgKi8KLXN0YXRpYyBpbnQgYXgyNV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCi0JaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBheDI1X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywKKwlzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4sIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlheDI1X2NiICpheDI1ID0gYXgyNV9zayhzayksICpheDI1dDsKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfYWRkci5jIGIvbmV0L2F4MjUvYXgyNV9hZGRyLmMKaW5kZXggNWYwODk2YS4uOTdhNDljNyAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9hZGRyLmMKKysrIGIvbmV0L2F4MjUvYXgyNV9hZGRyLmMKQEAgLTI5LDE3ICsyOSwyNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAvKgotICoJVGhlIG51bGwgYWRkcmVzcyBpcyBkZWZpbmVkIGFzIGEgY2FsbHNpZ24gb2YgYWxsIHNwYWNlcyB3aXRoIGFuCi0gKglTU0lEIG9mIHplcm8uCisgKiBUaGUgZGVmYXVsdCBicm9hZGNhc3QgYWRkcmVzcyBvZiBhbiBpbnRlcmZhY2UgaXMgUVNULTA7IHRoZSBkZWZhdWx0IGFkZHJlc3MKKyAqIGlzIExJTlVYLTEuICBUaGUgbnVsbCBhZGRyZXNzIGlzIGRlZmluZWQgYXMgYSBjYWxsc2lnbiBvZiBhbGwgc3BhY2VzIHdpdGgKKyAqIGFuIFNTSUQgb2YgemVyby4KICAqLwotYXgyNV9hZGRyZXNzIG51bGxfYXgyNV9hZGRyZXNzID0ge3sweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDAwfX07CiAKK2NvbnN0IGF4MjVfYWRkcmVzcyBheDI1X2JjYXN0ID0KKwl7eydRJyA8PCAxLCAnUycgPDwgMSwgJ1QnIDw8IDEsICcgJyA8PCAxLCAnICcgPDwgMSwgJyAnIDw8IDEsIDAgPDwgMX19OworY29uc3QgYXgyNV9hZGRyZXNzIGF4MjVfZGVmYWRkciA9CisJe3snTCcgPDwgMSwgJ0knIDw8IDEsICdOJyA8PCAxLCAnVScgPDwgMSwgJ1gnIDw8IDEsICcgJyA8PCAxLCAxIDw8IDF9fTsKK2NvbnN0IGF4MjVfYWRkcmVzcyBudWxsX2F4MjVfYWRkcmVzcyA9CisJe3snICcgPDwgMSwgJyAnIDw8IDEsICcgJyA8PCAxLCAnICcgPDwgMSwgJyAnIDw8IDEsICcgJyA8PCAxLCAwIDw8IDF9fTsKKworRVhQT1JUX1NZTUJPTF9HUEwoYXgyNV9iY2FzdCk7CitFWFBPUlRfU1lNQk9MX0dQTChheDI1X2RlZmFkZHIpOwogRVhQT1JUX1NZTUJPTChudWxsX2F4MjVfYWRkcmVzcyk7CiAKIC8qCiAgKglheDI1IC0+IGFzY2lpIGNvbnZlcnNpb24KICAqLwotY2hhciAqYXgyYXNjKGNoYXIgKmJ1ZiwgYXgyNV9hZGRyZXNzICphKQorY2hhciAqYXgyYXNjKGNoYXIgKmJ1ZiwgY29uc3QgYXgyNV9hZGRyZXNzICphKQogewogCWNoYXIgYywgKnM7CiAJaW50IG47CkBAIC03Miw5ICs4MSw5IEBACiAvKgogICoJYXNjaWkgLT4gYXgyNSBjb252ZXJzaW9uCiAgKi8KLXZvaWQgYXNjMmF4KGF4MjVfYWRkcmVzcyAqYWRkciwgY2hhciAqY2FsbHNpZ24pCit2b2lkIGFzYzJheChheDI1X2FkZHJlc3MgKmFkZHIsIGNvbnN0IGNoYXIgKmNhbGxzaWduKQogewotCWNoYXIgKnM7CisJY29uc3QgY2hhciAqczsKIAlpbnQgbjsKIAogCWZvciAocyA9IGNhbGxzaWduLCBuID0gMDsgbiA8IDY7IG4rKykgewpAQCAtMTA3LDcgKzExNiw3IEBACiAvKgogICoJQ29tcGFyZSB0d28gYXguMjUgYWRkcmVzc2VzCiAgKi8KLWludCBheDI1Y21wKGF4MjVfYWRkcmVzcyAqYSwgYXgyNV9hZGRyZXNzICpiKQoraW50IGF4MjVjbXAoY29uc3QgYXgyNV9hZGRyZXNzICphLCBjb25zdCBheDI1X2FkZHJlc3MgKmIpCiB7CiAJaW50IGN0ID0gMDsKIApAQCAtMTI4LDcgKzEzNyw3IEBACiAvKgogICoJQ29tcGFyZSB0d28gQVguMjUgZGlnaXBlYXRlciBwYXRocy4KICAqLwotaW50IGF4MjVkaWdpY21wKGF4MjVfZGlnaSAqZGlnaTEsIGF4MjVfZGlnaSAqZGlnaTIpCitpbnQgYXgyNWRpZ2ljbXAoY29uc3QgYXgyNV9kaWdpICpkaWdpMSwgY29uc3QgYXgyNV9kaWdpICpkaWdpMikKIHsKIAlpbnQgaTsKIApAQCAtMTQ5LDcgKzE1OCw5IEBACiAgKglHaXZlbiBhbiBBWC4yNSBhZGRyZXNzIHB1bGwgb2YgdG8sIGZyb20sIGRpZ2kgbGlzdCwgY29tbWFuZC9yZXNwb25zZSBhbmQgdGhlIHN0YXJ0IG9mIGRhdGEKICAqCiAgKi8KLXVuc2lnbmVkIGNoYXIgKmF4MjVfYWRkcl9wYXJzZSh1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sIGF4MjVfYWRkcmVzcyAqc3JjLCBheDI1X2FkZHJlc3MgKmRlc3QsIGF4MjVfZGlnaSAqZGlnaSwgaW50ICpmbGFncywgaW50ICpkYW1hKQorY29uc3QgdW5zaWduZWQgY2hhciAqYXgyNV9hZGRyX3BhcnNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKKwlheDI1X2FkZHJlc3MgKnNyYywgYXgyNV9hZGRyZXNzICpkZXN0LCBheDI1X2RpZ2kgKmRpZ2ksIGludCAqZmxhZ3MsCisJaW50ICpkYW1hKQogewogCWludCBkID0gMDsKIApAQCAtMjA0LDcgKzIxNSw4IEBACiAvKgogICoJQXNzZW1ibGUgYW4gQVguMjUgaGVhZGVyIGZyb20gdGhlIGJpdHMKICAqLwotaW50IGF4MjVfYWRkcl9idWlsZCh1bnNpZ25lZCBjaGFyICpidWYsIGF4MjVfYWRkcmVzcyAqc3JjLCBheDI1X2FkZHJlc3MgKmRlc3QsIGF4MjVfZGlnaSAqZCwgaW50IGZsYWcsIGludCBtb2R1bHVzKQoraW50IGF4MjVfYWRkcl9idWlsZCh1bnNpZ25lZCBjaGFyICpidWYsIGNvbnN0IGF4MjVfYWRkcmVzcyAqc3JjLAorCWNvbnN0IGF4MjVfYWRkcmVzcyAqZGVzdCwgY29uc3QgYXgyNV9kaWdpICpkLCBpbnQgZmxhZywgaW50IG1vZHVsdXMpCiB7CiAJaW50IGxlbiA9IDA7CiAJaW50IGN0ICA9IDA7CkBAIC0yNjEsNyArMjczLDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1pbnQgYXgyNV9hZGRyX3NpemUoYXgyNV9kaWdpICpkcCkKK2ludCBheDI1X2FkZHJfc2l6ZShjb25zdCBheDI1X2RpZ2kgKmRwKQogewogCWlmIChkcCA9PSBOVUxMKQogCQlyZXR1cm4gMiAqIEFYMjVfQUREUl9MRU47CkBAIC0yNzIsNyArMjg0LDcgQEAKIC8qCiAgKglSZXZlcnNlIERpZ2lwZWF0IExpc3QuIE1heSBub3QgcGFzcyBib3RoIHBhcmFtZXRlcnMgYXMgc2FtZSBzdHJ1Y3QKICAqLwotdm9pZCBheDI1X2RpZ2lfaW52ZXJ0KGF4MjVfZGlnaSAqaW4sIGF4MjVfZGlnaSAqb3V0KQordm9pZCBheDI1X2RpZ2lfaW52ZXJ0KGNvbnN0IGF4MjVfZGlnaSAqaW4sIGF4MjVfZGlnaSAqb3V0KQogewogCWludCBjdDsKIApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9pZmFjZS5jIGIvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCmluZGV4IDA3YWMwMjAuLmFmZjNlNjUgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfaWZhY2UuYworKysgYi9uZXQvYXgyNS9heDI1X2lmYWNlLmMKQEAgLTI5LDE3ICsyOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvdG9jb2xfc3RydWN0IHsKLQlzdHJ1Y3QgcHJvdG9jb2xfc3RydWN0ICpuZXh0OwotCXVuc2lnbmVkIGludCBwaWQ7Ci0JaW50ICgqZnVuYykoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKTsKLX0gKnByb3RvY29sX2xpc3QgPSBOVUxMOworc3RhdGljIHN0cnVjdCBheDI1X3Byb3RvY29sICpwcm90b2NvbF9saXN0Owogc3RhdGljIERFRklORV9SV0xPQ0socHJvdG9jb2xfbGlzdF9sb2NrKTsKIAotc3RhdGljIHN0cnVjdCBsaW5rZmFpbF9zdHJ1Y3QgewotCXN0cnVjdCBsaW5rZmFpbF9zdHJ1Y3QgKm5leHQ7Ci0Jdm9pZCAoKmZ1bmMpKGF4MjVfY2IgKiwgaW50KTsKLX0gKmxpbmtmYWlsX2xpc3QgPSBOVUxMOworc3RhdGljIEhMSVNUX0hFQUQoYXgyNV9saW5rZmFpbF9saXN0KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGlua2ZhaWxfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3QgbGlzdGVuX3N0cnVjdCB7CkBAIC00OSwzNiArNDIsMjMgQEAKIH0gKmxpc3Rlbl9saXN0ID0gTlVMTDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGlzdGVuX2xvY2spOwogCi1pbnQgYXgyNV9wcm90b2NvbF9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgcGlkLAotCWludCAoKmZ1bmMpKHN0cnVjdCBza19idWZmICosIGF4MjVfY2IgKikpCisvKgorICogRG8gbm90IHJlZ2lzdGVyIHRoZSBpbnRlcm5hbCBwcm90b2NvbHMgQVgyNV9QX1RFWFQsIEFYMjVfUF9TRUdNRU5ULAorICogQVgyNV9QX0lQIG9yIEFYMjVfUF9BUlAgLi4uCisgKi8KK3ZvaWQgYXgyNV9yZWdpc3Rlcl9waWQoc3RydWN0IGF4MjVfcHJvdG9jb2wgKmFwKQogewotCXN0cnVjdCBwcm90b2NvbF9zdHJ1Y3QgKnByb3RvY29sOwotCi0JaWYgKHBpZCA9PSBBWDI1X1BfVEVYVCB8fCBwaWQgPT0gQVgyNV9QX1NFR01FTlQpCi0JCXJldHVybiAwOwotI2lmZGVmIENPTkZJR19JTkVUCi0JaWYgKHBpZCA9PSBBWDI1X1BfSVAgfHwgcGlkID09IEFYMjVfUF9BUlApCi0JCXJldHVybiAwOwotI2VuZGlmCi0JaWYgKChwcm90b2NvbCA9IGttYWxsb2Moc2l6ZW9mKCpwcm90b2NvbCksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCXByb3RvY29sLT5waWQgID0gcGlkOwotCXByb3RvY29sLT5mdW5jID0gZnVuYzsKLQogCXdyaXRlX2xvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7Ci0JcHJvdG9jb2wtPm5leHQgPSBwcm90b2NvbF9saXN0OwotCXByb3RvY29sX2xpc3QgID0gcHJvdG9jb2w7CisJYXAtPm5leHQgPSBwcm90b2NvbF9saXN0OworCXByb3RvY29sX2xpc3QgPSBhcDsKIAl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7Ci0KLQlyZXR1cm4gMTsKIH0KIAotRVhQT1JUX1NZTUJPTChheDI1X3Byb3RvY29sX3JlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF4MjVfcmVnaXN0ZXJfcGlkKTsKIAogdm9pZCBheDI1X3Byb3RvY29sX3JlbGVhc2UodW5zaWduZWQgaW50IHBpZCkKIHsKLQlzdHJ1Y3QgcHJvdG9jb2xfc3RydWN0ICpzLCAqcHJvdG9jb2w7CisJc3RydWN0IGF4MjVfcHJvdG9jb2wgKnMsICpwcm90b2NvbDsKIAogCXdyaXRlX2xvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7CiAJcHJvdG9jb2wgPSBwcm90b2NvbF9saXN0OwpAQCAtMTEwLDU0ICs5MCwxOSBAQAogCiBFWFBPUlRfU1lNQk9MKGF4MjVfcHJvdG9jb2xfcmVsZWFzZSk7CiAKLWludCBheDI1X2xpbmtmYWlsX3JlZ2lzdGVyKHZvaWQgKCpmdW5jKShheDI1X2NiICosIGludCkpCit2b2lkIGF4MjVfbGlua2ZhaWxfcmVnaXN0ZXIoc3RydWN0IGF4MjVfbGlua2ZhaWwgKmxmKQogewotCXN0cnVjdCBsaW5rZmFpbF9zdHJ1Y3QgKmxpbmtmYWlsOwotCi0JaWYgKChsaW5rZmFpbCA9IGttYWxsb2Moc2l6ZW9mKCpsaW5rZmFpbCksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCWxpbmtmYWlsLT5mdW5jID0gZnVuYzsKLQogCXNwaW5fbG9ja19iaCgmbGlua2ZhaWxfbG9jayk7Ci0JbGlua2ZhaWwtPm5leHQgPSBsaW5rZmFpbF9saXN0OwotCWxpbmtmYWlsX2xpc3QgID0gbGlua2ZhaWw7CisJaGxpc3RfYWRkX2hlYWQoJmxmLT5sZl9ub2RlLCAmYXgyNV9saW5rZmFpbF9saXN0KTsKIAlzcGluX3VubG9ja19iaCgmbGlua2ZhaWxfbG9jayk7Ci0KLQlyZXR1cm4gMTsKIH0KIAogRVhQT1JUX1NZTUJPTChheDI1X2xpbmtmYWlsX3JlZ2lzdGVyKTsKIAotdm9pZCBheDI1X2xpbmtmYWlsX3JlbGVhc2Uodm9pZCAoKmZ1bmMpKGF4MjVfY2IgKiwgaW50KSkKK3ZvaWQgYXgyNV9saW5rZmFpbF9yZWxlYXNlKHN0cnVjdCBheDI1X2xpbmtmYWlsICpsZikKIHsKLQlzdHJ1Y3QgbGlua2ZhaWxfc3RydWN0ICpzLCAqbGlua2ZhaWw7Ci0KIAlzcGluX2xvY2tfYmgoJmxpbmtmYWlsX2xvY2spOwotCWxpbmtmYWlsID0gbGlua2ZhaWxfbGlzdDsKLQlpZiAobGlua2ZhaWwgPT0gTlVMTCkgewotCQlzcGluX3VubG9ja19iaCgmbGlua2ZhaWxfbG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobGlua2ZhaWwtPmZ1bmMgPT0gZnVuYykgewotCQlsaW5rZmFpbF9saXN0ID0gbGlua2ZhaWwtPm5leHQ7Ci0JCXNwaW5fdW5sb2NrX2JoKCZsaW5rZmFpbF9sb2NrKTsKLQkJa2ZyZWUobGlua2ZhaWwpOwotCQlyZXR1cm47Ci0JfQotCi0Jd2hpbGUgKGxpbmtmYWlsICE9IE5VTEwgJiYgbGlua2ZhaWwtPm5leHQgIT0gTlVMTCkgewotCQlpZiAobGlua2ZhaWwtPm5leHQtPmZ1bmMgPT0gZnVuYykgewotCQkJcyA9IGxpbmtmYWlsLT5uZXh0OwotCQkJbGlua2ZhaWwtPm5leHQgPSBsaW5rZmFpbC0+bmV4dC0+bmV4dDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZsaW5rZmFpbF9sb2NrKTsKLQkJCWtmcmVlKHMpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJbGlua2ZhaWwgPSBsaW5rZmFpbC0+bmV4dDsKLQl9CisJaGxpc3RfZGVsX2luaXQoJmxmLT5sZl9ub2RlKTsKIAlzcGluX3VubG9ja19iaCgmbGlua2ZhaWxfbG9jayk7CiB9CiAKQEAgLTE3MSw3ICsxMTYsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICgobGlzdGVuID0ga21hbGxvYyhzaXplb2YoKmxpc3RlbiksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlsaXN0ZW4tPmNhbGxzaWduID0gKmNhbGxzaWduOwogCWxpc3Rlbi0+ZGV2ICAgICAgPSBkZXY7CkBAIC0xODEsNyArMTI2LDcgQEAKIAlsaXN0ZW5fbGlzdCAgPSBsaXN0ZW47CiAJc3Bpbl91bmxvY2tfYmgoJmxpc3Rlbl9sb2NrKTsKIAotCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKGF4MjVfbGlzdGVuX3JlZ2lzdGVyKTsKQEAgLTIyMyw3ICsxNjgsNyBAQAogaW50ICgqYXgyNV9wcm90b2NvbF9mdW5jdGlvbih1bnNpZ25lZCBpbnQgcGlkKSkoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKQogewogCWludCAoKnJlcykoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKSA9IE5VTEw7Ci0Jc3RydWN0IHByb3RvY29sX3N0cnVjdCAqcHJvdG9jb2w7CisJc3RydWN0IGF4MjVfcHJvdG9jb2wgKnByb3RvY29sOwogCiAJcmVhZF9sb2NrKCZwcm90b2NvbF9saXN0X2xvY2spOwogCWZvciAocHJvdG9jb2wgPSBwcm90b2NvbF9saXN0OyBwcm90b2NvbCAhPSBOVUxMOyBwcm90b2NvbCA9IHByb3RvY29sLT5uZXh0KQpAQCAtMjQyLDcgKzE4Nyw4IEBACiAKIAlzcGluX2xvY2tfYmgoJmxpc3Rlbl9sb2NrKTsKIAlmb3IgKGxpc3RlbiA9IGxpc3Rlbl9saXN0OyBsaXN0ZW4gIT0gTlVMTDsgbGlzdGVuID0gbGlzdGVuLT5uZXh0KQotCQlpZiAoYXgyNWNtcCgmbGlzdGVuLT5jYWxsc2lnbiwgY2FsbHNpZ24pID09IDAgJiYgKGxpc3Rlbi0+ZGV2ID09IGRldiB8fCBsaXN0ZW4tPmRldiA9PSBOVUxMKSkgeworCQlpZiAoYXgyNWNtcCgmbGlzdGVuLT5jYWxsc2lnbiwgY2FsbHNpZ24pID09IDAgJiYKKwkJICAgIChsaXN0ZW4tPmRldiA9PSBkZXYgfHwgbGlzdGVuLT5kZXYgPT0gTlVMTCkpIHsKIAkJCXNwaW5fdW5sb2NrX2JoKCZsaXN0ZW5fbG9jayk7CiAJCQlyZXR1cm4gMTsKIAl9CkBAIC0yNTMsMTcgKzE5OSwxOCBAQAogCiB2b2lkIGF4MjVfbGlua19mYWlsZWQoYXgyNV9jYiAqYXgyNSwgaW50IHJlYXNvbikKIHsKLQlzdHJ1Y3QgbGlua2ZhaWxfc3RydWN0ICpsaW5rZmFpbDsKKwlzdHJ1Y3QgYXgyNV9saW5rZmFpbCAqbGY7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAKIAlzcGluX2xvY2tfYmgoJmxpbmtmYWlsX2xvY2spOwotCWZvciAobGlua2ZhaWwgPSBsaW5rZmFpbF9saXN0OyBsaW5rZmFpbCAhPSBOVUxMOyBsaW5rZmFpbCA9IGxpbmtmYWlsLT5uZXh0KQotCQkobGlua2ZhaWwtPmZ1bmMpKGF4MjUsIHJlYXNvbik7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkobGYsIG5vZGUsICZheDI1X2xpbmtmYWlsX2xpc3QsIGxmX25vZGUpCisJCWxmLT5mdW5jKGF4MjUsIHJlYXNvbik7CiAJc3Bpbl91bmxvY2tfYmgoJmxpbmtmYWlsX2xvY2spOwogfQogCiBpbnQgYXgyNV9wcm90b2NvbF9pc19yZWdpc3RlcmVkKHVuc2lnbmVkIGludCBwaWQpCiB7Ci0Jc3RydWN0IHByb3RvY29sX3N0cnVjdCAqcHJvdG9jb2w7CisJc3RydWN0IGF4MjVfcHJvdG9jb2wgKnByb3RvY29sOwogCWludCByZXMgPSAwOwogCiAJcmVhZF9sb2NrX2JoKCZwcm90b2NvbF9saXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9yb3V0ZS5jIGIvbmV0L2F4MjUvYXgyNV9yb3V0ZS5jCmluZGV4IDg1ODAzNTYuLjBhMDM4MTYgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfcm91dGUuYworKysgYi9uZXQvYXgyNS9heDI1X3JvdXRlLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAl3cml0ZV91bmxvY2soJmF4MjVfcm91dGVfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgYXgyNV9ydF9hZGQoc3RydWN0IGF4MjVfcm91dGVzX3N0cnVjdCAqcm91dGUpCitzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBheDI1X3J0X2FkZChzdHJ1Y3QgYXgyNV9yb3V0ZXNfc3RydWN0ICpyb3V0ZSkKIHsKIAlheDI1X3JvdXRlICpheDI1X3J0OwogCWF4MjVfZGV2ICpheDI1X2RldjsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jCmluZGV4IGJlMDRlOWYuLmFiMTY2YjQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NhcGkuYwpAQCAtMTk2LDYgKzE5Niw5IEBACiAKIAlzd2l0Y2ggKENBUElNU0dfU1VCQ09NTUFORChza2ItPmRhdGEpKSB7CiAJY2FzZSBDQVBJX0NPTkY6CisJCWlmIChza2ItPmxlbiA8IENBUElfTVNHX0JBU0VMRU4gKyAxMCkKKwkJCWJyZWFrOworCiAJCWZ1bmMgPSBDQVBJTVNHX1UxNihza2ItPmRhdGEsIENBUElfTVNHX0JBU0VMRU4gKyA1KTsKIAkJaW5mbyA9IENBUElNU0dfVTE2KHNrYi0+ZGF0YSwgQ0FQSV9NU0dfQkFTRUxFTiArIDgpOwogCkBAIC0yMjYsNiArMjI5LDkgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgQ0FQSV9GVU5DVElPTl9HRVRfUFJPRklMRToKKwkJCWlmIChza2ItPmxlbiA8IENBUElfTVNHX0JBU0VMRU4gKyAxMSArIHNpemVvZihjYXBpX3Byb2ZpbGUpKQorCQkJCWJyZWFrOworCiAJCQljb250cm9sbGVyID0gQ0FQSU1TR19VMTYoc2tiLT5kYXRhLCBDQVBJX01TR19CQVNFTEVOICsgMTEpOwogCQkJbXNnbnVtID0gQ0FQSU1TR19NU0dJRChza2ItPmRhdGEpOwogCkBAIC0yNDYsMTcgKzI1MiwyNiBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBDQVBJX0ZVTkNUSU9OX0dFVF9NQU5VRkFDVFVSRVI6CisJCQlpZiAoc2tiLT5sZW4gPCBDQVBJX01TR19CQVNFTEVOICsgMTUpCisJCQkJYnJlYWs7CisKIAkJCWNvbnRyb2xsZXIgPSBDQVBJTVNHX1UzMihza2ItPmRhdGEsIENBUElfTVNHX0JBU0VMRU4gKyAxMCk7CiAKIAkJCWlmICghaW5mbyAmJiBjdHJsKSB7CisJCQkJaW50IGxlbiA9IG1pbl90KHVpbnQsIENBUElfTUFOVUZBQ1RVUkVSX0xFTiwKKwkJCQkJCXNrYi0+ZGF0YVtDQVBJX01TR19CQVNFTEVOICsgMTRdKTsKKworCQkJCW1lbXNldChjdHJsLT5tYW51LCAwLCBDQVBJX01BTlVGQUNUVVJFUl9MRU4pOwogCQkJCXN0cm5jcHkoY3RybC0+bWFudSwKLQkJCQkJc2tiLT5kYXRhICsgQ0FQSV9NU0dfQkFTRUxFTiArIDE1LAotCQkJCQlza2ItPmRhdGFbQ0FQSV9NU0dfQkFTRUxFTiArIDE0XSk7CisJCQkJCXNrYi0+ZGF0YSArIENBUElfTVNHX0JBU0VMRU4gKyAxNSwgbGVuKTsKIAkJCX0KIAogCQkJYnJlYWs7CiAKIAkJY2FzZSBDQVBJX0ZVTkNUSU9OX0dFVF9WRVJTSU9OOgorCQkJaWYgKHNrYi0+bGVuIDwgQ0FQSV9NU0dfQkFTRUxFTiArIDMyKQorCQkJCWJyZWFrOworCiAJCQljb250cm9sbGVyID0gQ0FQSU1TR19VMzIoc2tiLT5kYXRhLCBDQVBJX01TR19CQVNFTEVOICsgMTIpOwogCiAJCQlpZiAoIWluZm8gJiYgY3RybCkgewpAQCAtMjY5LDEzICsyODQsMTggQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgQ0FQSV9GVU5DVElPTl9HRVRfU0VSSUFMX05VTUJFUjoKKwkJCWlmIChza2ItPmxlbiA8IENBUElfTVNHX0JBU0VMRU4gKyAxNykKKwkJCQlicmVhazsKKwogCQkJY29udHJvbGxlciA9IENBUElNU0dfVTMyKHNrYi0+ZGF0YSwgQ0FQSV9NU0dfQkFTRUxFTiArIDEyKTsKIAogCQkJaWYgKCFpbmZvICYmIGN0cmwpIHsKKwkJCQlpbnQgbGVuID0gbWluX3QodWludCwgQ0FQSV9TRVJJQUxfTEVOLAorCQkJCQkJc2tiLT5kYXRhW0NBUElfTVNHX0JBU0VMRU4gKyAxNl0pOworCiAJCQkJbWVtc2V0KGN0cmwtPnNlcmlhbCwgMCwgQ0FQSV9TRVJJQUxfTEVOKTsKIAkJCQlzdHJuY3B5KGN0cmwtPnNlcmlhbCwKLQkJCQkJc2tiLT5kYXRhICsgQ0FQSV9NU0dfQkFTRUxFTiArIDE3LAotCQkJCQlza2ItPmRhdGFbQ0FQSV9NU0dfQkFTRUxFTiArIDE2XSk7CisJCQkJCXNrYi0+ZGF0YSArIENBUElfTVNHX0JBU0VMRU4gKyAxNywgbGVuKTsKIAkJCX0KIAogCQkJYnJlYWs7CkBAIC0yODQsMTQgKzMwNCwxOCBAQAogCQlicmVhazsKIAogCWNhc2UgQ0FQSV9JTkQ6CisJCWlmIChza2ItPmxlbiA8IENBUElfTVNHX0JBU0VMRU4gKyA2KQorCQkJYnJlYWs7CisKIAkJZnVuYyA9IENBUElNU0dfVTE2KHNrYi0+ZGF0YSwgQ0FQSV9NU0dfQkFTRUxFTiArIDMpOwogCiAJCWlmIChmdW5jID09IENBUElfRlVOQ1RJT05fTE9PUEJBQ0spIHsKKwkJCWludCBsZW4gPSBtaW5fdCh1aW50LCBza2ItPmxlbiAtIENBUElfTVNHX0JBU0VMRU4gLSA2LAorCQkJCQkJc2tiLT5kYXRhW0NBUElfTVNHX0JBU0VMRU4gKyA1XSk7CiAJCQlhcHBsID0gQ0FQSU1TR19BUFBJRChza2ItPmRhdGEpOwogCQkJbXNnbnVtID0gQ0FQSU1TR19NU0dJRChza2ItPmRhdGEpOwogCQkJY210cF9zZW5kX2ludGVyb3Btc2coc2Vzc2lvbiwgQ0FQSV9SRVNQLCBhcHBsLCBtc2dudW0sIGZ1bmMsCi0JCQkJCQlza2ItPmRhdGEgKyBDQVBJX01TR19CQVNFTEVOICsgNiwKLQkJCQkJCXNrYi0+ZGF0YVtDQVBJX01TR19CQVNFTEVOICsgNV0pOworCQkJCQkJc2tiLT5kYXRhICsgQ0FQSV9NU0dfQkFTRUxFTiArIDYsIGxlbik7CiAJCX0KIAogCQlicmVhazsKQEAgLTMwOSw2ICszMzMsOSBAQAogCiAJQlRfREJHKCJzZXNzaW9uICVwIHNrYiAlcCBsZW4gJWQiLCBzZXNzaW9uLCBza2IsIHNrYi0+bGVuKTsKIAorCWlmIChza2ItPmxlbiA8IENBUElfTVNHX0JBU0VMRU4pCisJCXJldHVybjsKKwogCWlmIChDQVBJTVNHX0NPTU1BTkQoc2tiLT5kYXRhKSA9PSBDQVBJX0lOVEVST1BFUkFCSUxJVFkpIHsKIAkJY210cF9yZWN2X2ludGVyb3Btc2coc2Vzc2lvbiwgc2tiKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc29jay5jIGIvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCmluZGV4IDcxMWEwODUuLmRiZjk4YzQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKQEAgLTEyMywxMCArMTIzLDEwIEBACiAJCQlpZiAoZmx0LT5vcGNvZGUgJiYKIAkJCSAgICAoKGV2dCA9PSBIQ0lfRVZfQ01EX0NPTVBMRVRFICYmCiAJCQkgICAgICBmbHQtPm9wY29kZSAhPQotCQkJICAgICAgZ2V0X3VuYWxpZ25lZCgoX191MTYgKikoc2tiLT5kYXRhICsgMykpKSB8fAorCQkJICAgICAgZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopKHNrYi0+ZGF0YSArIDMpKSkgfHwKIAkJCSAgICAgKGV2dCA9PSBIQ0lfRVZfQ01EX1NUQVRVUyAmJgogCQkJICAgICAgZmx0LT5vcGNvZGUgIT0KLQkJCSAgICAgIGdldF91bmFsaWduZWQoKF9fdTE2ICopKHNrYi0+ZGF0YSArIDQpKSkpKQorCQkJICAgICAgZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopKHNrYi0+ZGF0YSArIDQpKSkpKQogCQkJCWNvbnRpbnVlOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCmluZGV4IGQ0YzkzNTYuLjgwMWQ2ODcgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJc3RydWN0IGhjaV9jb25uICpjb25uID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoY2lfY29ubiwgd29yayk7CiAJaW50IGk7CiAKLQlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZjb25uLT5kZXYpIDwgMCkgeworCWlmIChkZXZpY2VfYWRkKCZjb25uLT5kZXYpIDwgMCkgewogCQlCVF9FUlIoIkZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0aW9uIGRldmljZSIpOwogCQlyZXR1cm47CiAJfQpAQCAtMjcyLDYgKzI3Miw4IEBACiAKIAlkZXZfc2V0X2RydmRhdGEoJmNvbm4tPmRldiwgY29ubik7CiAKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmY29ubi0+ZGV2KTsKKwogCUlOSVRfV09SSygmY29ubi0+d29yaywgYWRkX2Nvbm4pOwogCiAJc2NoZWR1bGVfd29yaygmY29ubi0+d29yayk7CkBAIC0yODcsNiArMjg5LDkgQEAKIHsKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIAorCWlmICghZGV2aWNlX2lzX3JlZ2lzdGVyZWQoJmNvbm4tPmRldikpCisJCXJldHVybjsKKwogCUlOSVRfV09SSygmY29ubi0+d29yaywgZGVsX2Nvbm4pOwogCiAJc2NoZWR1bGVfd29yaygmY29ubi0+d29yayk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggMjlhOGZhNC4uZjhjMjVkNSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtNTg1LDYgKzU4NSwxMiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJaWYgKGxhLT5sMl9wc20gPiAwICYmIGJ0b2hzKGxhLT5sMl9wc20pIDwgMHgxMDAxICYmCisJCQkJIWNhcGFibGUoQ0FQX05FVF9CSU5EX1NFUlZJQ0UpKSB7CisJCWVyciA9IC1FQUNDRVM7CisJCWdvdG8gZG9uZTsKKwl9CisJCQogCXdyaXRlX2xvY2tfYmgoJmwyY2FwX3NrX2xpc3QubG9jayk7CiAKIAlpZiAobGEtPmwyX3BzbSAmJiBfX2wyY2FwX2dldF9zb2NrX2J5X2FkZHIobGEtPmwyX3BzbSwgJmxhLT5sMl9iZGFkZHIpKSB7CkBAIC0yMTUwLDggKzIxNTYsOCBAQAogCiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVzICVzICVkICVkIDB4JTQuNHggMHglNC40eCAlZCAlZCAweCV4XG4iLAogCQkJCWJhdG9zdHIoJmJ0X3NrKHNrKS0+c3JjKSwgYmF0b3N0cigmYnRfc2soc2spLT5kc3QpLAotCQkJCXNrLT5za19zdGF0ZSwgcGktPnBzbSwgcGktPnNjaWQsIHBpLT5kY2lkLCBwaS0+aW10dSwKLQkJCQlwaS0+b210dSwgcGktPmxpbmtfbW9kZSk7CisJCQkJc2stPnNrX3N0YXRlLCBidG9ocyhwaS0+cHNtKSwgcGktPnNjaWQsIHBpLT5kY2lkLAorCQkJCXBpLT5pbXR1LCBwaS0+b210dSwgcGktPmxpbmtfbW9kZSk7CiAJfQogCiAJcmVhZF91bmxvY2tfYmgoJmwyY2FwX3NrX2xpc3QubG9jayk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKaW5kZXggNTQ0ZDY1Yi4uY2I3ZTg1NSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwpAQCAtNTU3LDcgKzU1Nyw2IEBACiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHJmY29tbV9kbGMgKmQgPSByZmNvbW1fcGkoc2spLT5kbGM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgZXJyOwogCWludCBzZW50ID0gMDsKIAogCWlmIChtc2ctPm1zZ19mbGFncyAmIE1TR19PT0IpCkBAIC01NzIsNiArNTcxLDcgQEAKIAogCXdoaWxlIChsZW4pIHsKIAkJc2l6ZV90IHNpemUgPSBtaW5fdChzaXplX3QsIGxlbiwgZC0+bXR1KTsKKwkJaW50IGVycjsKIAkJCiAJCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIHNpemUgKyBSRkNPTU1fU0tCX1JFU0VSVkUsCiAJCQkJbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOwpAQCAtNTgyLDEzICs1ODIsMTYgQEAKIAkJZXJyID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgc2l6ZSksIG1zZy0+bXNnX2lvdiwgc2l6ZSk7CiAJCWlmIChlcnIpIHsKIAkJCWtmcmVlX3NrYihza2IpOwotCQkJc2VudCA9IGVycjsKKwkJCWlmIChzZW50ID09IDApCisJCQkJc2VudCA9IGVycjsKIAkJCWJyZWFrOwogCQl9CiAKIAkJZXJyID0gcmZjb21tX2RsY19zZW5kKGQsIHNrYik7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCWlmIChzZW50ID09IDApCisJCQkJc2VudCA9IGVycjsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTU5OCw3ICs2MDEsNyBAQAogCiAJcmVsZWFzZV9zb2NrKHNrKTsKIAotCXJldHVybiBzZW50ID8gc2VudCA6IGVycjsKKwlyZXR1cm4gc2VudDsKIH0KIAogc3RhdGljIGxvbmcgcmZjb21tX3NvY2tfZGF0YV93YWl0KHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lbykKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKaW5kZXggMWZiNWQ0Mi4uZWIyYjUyNCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMKQEAgLTY5Nyw5ICs2OTcsMTMgQEAKIAogCUJUX0RCRygidHR5ICVwIiwgdHR5KTsKIAorCWlmICghZGV2IHx8ICFkZXYtPmRsYykKKwkJcmV0dXJuIDA7CisKIAlyb29tID0gcmZjb21tX3Jvb20oZGV2LT5kbGMpIC0gYXRvbWljX3JlYWQoJmRldi0+d21lbV9hbGxvYyk7CiAJaWYgKHJvb20gPCAwKQogCQlyb29tID0gMDsKKwogCXJldHVybiByb29tOwogfQogCkBAIC03NTIsOSArNzU2LDkgQEAKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCi1zdGF0aWMgdm9pZCByZmNvbW1fdHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGQpCitzdGF0aWMgdm9pZCByZmNvbW1fdHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewotCXN0cnVjdCB0ZXJtaW9zICpuZXcgPSAoc3RydWN0IHRlcm1pb3MgKikgdHR5LT50ZXJtaW9zOworCXN0cnVjdCBrdGVybWlvcyAqbmV3ID0gdHR5LT50ZXJtaW9zOwogCWludCBvbGRfYmF1ZF9yYXRlID0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZCk7CiAJaW50IG5ld19iYXVkX3JhdGUgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUobmV3KTsKIApAQCAtOTE1LDEyICs5MTksMTQgQEAKIHN0YXRpYyBpbnQgcmZjb21tX3R0eV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgcmZjb21tX2RldiAqZGV2ID0gKHN0cnVjdCByZmNvbW1fZGV2ICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHJmY29tbV9kbGMgKmRsYyA9IGRldi0+ZGxjOwogCiAJQlRfREJHKCJ0dHkgJXAgZGV2ICVwIiwgdHR5LCBkZXYpOwogCi0JaWYgKCFza2JfcXVldWVfZW1wdHkoJmRsYy0+dHhfcXVldWUpKQotCQlyZXR1cm4gZGxjLT5tdHU7CisJaWYgKCFkZXYgfHwgIWRldi0+ZGxjKQorCQlyZXR1cm4gMDsKKworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZkZXYtPmRsYy0+dHhfcXVldWUpKQorCQlyZXR1cm4gZGV2LT5kbGMtPm10dTsKIAogCXJldHVybiAwOwogfQpAQCAtOTI4LDExICs5MzQsMTIgQEAKIHN0YXRpYyB2b2lkIHJmY29tbV90dHlfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHJmY29tbV9kZXYgKmRldiA9IChzdHJ1Y3QgcmZjb21tX2RldiAqKSB0dHktPmRyaXZlcl9kYXRhOwotCWlmICghZGV2KQotCQlyZXR1cm47CiAKIAlCVF9EQkcoInR0eSAlcCBkZXYgJXAiLCB0dHksIGRldik7CiAKKwlpZiAoIWRldiB8fCAhZGV2LT5kbGMpCisJCXJldHVybjsKKwogCXNrYl9xdWV1ZV9wdXJnZSgmZGV2LT5kbGMtPnR4X3F1ZXVlKTsKIAogCWlmICh0ZXN0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmdHR5LT5mbGFncykgJiYgdHR5LT5sZGlzYy53cml0ZV93YWtldXApCkBAIC05NTIsMTEgKzk1OSwxMiBAQAogc3RhdGljIHZvaWQgcmZjb21tX3R0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgcmZjb21tX2RldiAqZGV2ID0gKHN0cnVjdCByZmNvbW1fZGV2ICopIHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKCFkZXYpCi0JCXJldHVybjsKIAogCUJUX0RCRygidHR5ICVwIGRldiAlcCIsIHR0eSwgZGV2KTsKIAorCWlmICghZGV2KQorCQlyZXR1cm47CisKIAlyZmNvbW1fdHR5X2ZsdXNoX2J1ZmZlcih0dHkpOwogCiAJaWYgKHRlc3RfYml0KFJGQ09NTV9SRUxFQVNFX09OSFVQLCAmZGV2LT5mbGFncykpCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCBiZDIyMWFkLi5lYTMzMzdhIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTYxLDkgKzYxLDYgQEAKICNkZWZpbmUgYnJuZl9maWx0ZXJfdmxhbl90YWdnZWQgMQogI2VuZGlmCiAKLWludCBicm5mX2RlZmVycmVkX2hvb2tzOwotRVhQT1JUX1NZTUJPTF9HUEwoYnJuZl9kZWZlcnJlZF9ob29rcyk7Ci0KIHN0YXRpYyBfX2JlMTYgaW5saW5lIHZsYW5fcHJvdG8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gdmxhbl9ldGhfaGRyKHNrYiktPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CkBAIC02ODUsMTEwICs2ODIsNTAgQEAKIAlyZXR1cm4gTkZfU1RPTEVOOwogfQogCi0vKiBQRl9CUklER0UvTE9DQUxfT1VUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBicl9uZl9sb2NhbF9vdXRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7Ci0JCXNrYl9wdXNoKHNrYiwgVkxBTl9ITEVOKTsKLQkJc2tiLT5uaC5yYXcgLT0gVkxBTl9ITEVOOwotCX0KLQotCU5GX0hPT0tfVEhSRVNIKFBGX0JSSURHRSwgTkZfQlJfTE9DQUxfT1VULCBza2IsIE5VTEwsIHNrYi0+ZGV2LAotCQkgICAgICAgYnJfZm9yd2FyZF9maW5pc2gsIE5GX0JSX1BSSV9GSVJTVCArIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gc2VlcyBib3RoIGxvY2FsbHkgb3JpZ2luYXRlZCBJUCBwYWNrZXRzIGFuZCBmb3J3YXJkZWQKKy8qIFBGX0JSSURHRS9MT0NBTF9PVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlZXMgYm90aCBsb2NhbGx5IG9yaWdpbmF0ZWQgSVAgcGFja2V0cyBhbmQgZm9yd2FyZGVkCiAgKiBJUCBwYWNrZXRzIChpbiBib3RoIGNhc2VzIHRoZSBkZXN0aW5hdGlvbiBkZXZpY2UgaXMgYSBicmlkZ2UKICAqIGRldmljZSkuIEl0IGFsc28gc2VlcyBicmlkZ2VkLWFuZC1ETkFUJ2VkIHBhY2tldHMuCi0gKiBUbyBiZSBhYmxlIHRvIGZpbHRlciBvbiB0aGUgcGh5c2ljYWwgYnJpZGdlIGRldmljZXMgKHdpdGggdGhlIHBoeXNkZXYKLSAqIG1vZHVsZSksIHdlIHN0ZWFsIHBhY2tldHMgZGVzdGluZWQgdG8gYSBicmlkZ2UgZGV2aWNlIGF3YXkgZnJvbSB0aGUKLSAqIFBGX0lORVQvRk9SV0FSRCBhbmQgUEZfSU5FVC9PVVRQVVQgaG9vayBmdW5jdGlvbnMsIGFuZCBnaXZlIHRoZW0gYmFjayBsYXRlciwKLSAqIHdoZW4gd2UgaGF2ZSBkZXRlcm1pbmVkIHRoZSByZWFsIG91dHB1dCBkZXZpY2UuIFRoaXMgaXMgZG9uZSBpbiBoZXJlLgogICoKICAqIElmIChuZl9icmlkZ2UtPm1hc2sgJiBCUk5GX0JSSURHRURfRE5BVCkgdGhlbiB0aGUgcGFja2V0IGlzIGJyaWRnZWQKICAqIGFuZCB3ZSBmYWtlIHRoZSBQRl9CUklER0UvRk9SV0FSRCBob29rLiBUaGUgZnVuY3Rpb24gYnJfbmZfZm9yd2FyZCgpCiAgKiB3aWxsIHRoZW4gZmFrZSB0aGUgUEZfSU5FVC9GT1JXQVJEIGhvb2suIGJyX25mX2xvY2FsX291dCgpIGhhcyBwcmlvcml0eQogICogTkZfQlJfUFJJX0ZJUlNULCBzbyBubyByZWxldmFudCBQRl9CUklER0UvSU5QVVQgZnVuY3Rpb25zIGhhdmUgYmVlbiBub3IKICAqIHdpbGwgYmUgZXhlY3V0ZWQuCi0gKiBPdGhlcndpc2UsIGlmIG5mX2JyaWRnZS0+cGh5c2luZGV2IGlzIE5VTEwsIHRoZSBicmlkZ2UtbmYgY29kZSBuZXZlciB0b3VjaGVkCi0gKiB0aGlzIHBhY2tldCBiZWZvcmUsIGFuZCBzbyB0aGUgcGFja2V0IHdhcyBsb2NhbGx5IG9yaWdpbmF0ZWQuIFdlIGZha2UKLSAqIHRoZSBQRl9JTkVUL0xPQ0FMX09VVCBob29rLgotICogRmluYWxseSwgaWYgbmZfYnJpZGdlLT5waHlzaW5kZXYgaXNuJ3QgTlVMTCwgdGhlbiB0aGUgcGFja2V0IHdhcyBJUCByb3V0ZWQsCi0gKiBzbyB3ZSBmYWtlIHRoZSBQRl9JTkVUL0ZPUldBUkQgaG9vay4gaXBfc2Fib3RhZ2Vfb3V0KCkgbWFrZXMgc3VyZQotICogZXZlbiByb3V0ZWQgcGFja2V0cyB0aGF0IGRpZG4ndCBhcnJpdmUgb24gYSBicmlkZ2UgaW50ZXJmYWNlIGhhdmUgdGhlaXIKLSAqIG5mX2JyaWRnZS0+cGh5c2luZGV2IHNldC4gKi8KKyAqLwogc3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9sb2NhbF9vdXQodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJCSAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbGluZGV2LCAqcmVhbG91dGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbGluZGV2OwogCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKIAlzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZTsKLQlpbnQgcGY7CiAKIAlpZiAoIXNrYi0+bmZfYnJpZGdlKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCi0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIHx8IElTX1ZMQU5fSVAoc2tiKSkKLQkJcGYgPSBQRl9JTkVUOwotCWVsc2UKLQkJcGYgPSBQRl9JTkVUNjsKLQogCW5mX2JyaWRnZSA9IHNrYi0+bmZfYnJpZGdlOwotCW5mX2JyaWRnZS0+cGh5c291dGRldiA9IHNrYi0+ZGV2OwotCXJlYWxpbmRldiA9IG5mX2JyaWRnZS0+cGh5c2luZGV2OworCWlmICghKG5mX2JyaWRnZS0+bWFzayAmIEJSTkZfQlJJREdFRF9ETkFUKSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCS8qIEJyaWRnZWQsIHRha2UgUEZfQlJJREdFL0ZPUldBUkQuCiAJICogKHNlZSBiaWcgbm90ZSBpbiBmcm9udCBvZiBicl9uZl9wcmVfcm91dGluZ19maW5pc2gpICovCi0JaWYgKG5mX2JyaWRnZS0+bWFzayAmIEJSTkZfQlJJREdFRF9ETkFUKSB7Ci0JCWlmIChuZl9icmlkZ2UtPm1hc2sgJiBCUk5GX1BLVF9UWVBFKSB7Ci0JCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQkJCW5mX2JyaWRnZS0+bWFzayBePSBCUk5GX1BLVF9UWVBFOwotCQl9Ci0JCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkgewotCQkJc2tiX3B1c2goc2tiLCBWTEFOX0hMRU4pOwotCQkJc2tiLT5uaC5yYXcgLT0gVkxBTl9ITEVOOwotCQl9CisJbmZfYnJpZGdlLT5waHlzb3V0ZGV2ID0gc2tiLT5kZXY7CisJcmVhbGluZGV2ID0gbmZfYnJpZGdlLT5waHlzaW5kZXY7CiAKLQkJTkZfSE9PSyhQRl9CUklER0UsIE5GX0JSX0ZPUldBUkQsIHNrYiwgcmVhbGluZGV2LAotCQkJc2tiLT5kZXYsIGJyX2ZvcndhcmRfZmluaXNoKTsKLQkJZ290byBvdXQ7CisJaWYgKG5mX2JyaWRnZS0+bWFzayAmIEJSTkZfUEtUX1RZUEUpIHsKKwkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisJCW5mX2JyaWRnZS0+bWFzayBePSBCUk5GX1BLVF9UWVBFOwogCX0KLQlyZWFsb3V0ZGV2ID0gYnJpZGdlX3BhcmVudChza2ItPmRldik7Ci0JaWYgKCFyZWFsb3V0ZGV2KQotCQlyZXR1cm4gTkZfRFJPUDsKLQotI2lmIGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpIHx8IGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQotCS8qIGlwdGFibGVzIHNob3VsZCBtYXRjaCAtbyBicjAueCAqLwotCWlmIChuZl9icmlkZ2UtPm5ldG91dGRldikKLQkJcmVhbG91dGRldiA9IG5mX2JyaWRnZS0+bmV0b3V0ZGV2OwotI2VuZGlmCiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7Ci0JCXNrYl9wdWxsKHNrYiwgVkxBTl9ITEVOKTsKLQkJKCpwc2tiKS0+bmgucmF3ICs9IFZMQU5fSExFTjsKLQl9Ci0JLyogSVAgZm9yd2FyZGVkIHRyYWZmaWMgaGFzIGEgcGh5c2luZGV2LCBsb2NhbGx5Ci0JICogZ2VuZXJhdGVkIHRyYWZmaWMgaGFzbid0LiAqLwotCWlmIChyZWFsaW5kZXYgIT0gTlVMTCkgewotCQlpZiAoIShuZl9icmlkZ2UtPm1hc2sgJiBCUk5GX0RPTlRfVEFLRV9QQVJFTlQpKSB7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqcGFyZW50ID0gYnJpZGdlX3BhcmVudChyZWFsaW5kZXYpOwotCQkJaWYgKHBhcmVudCkKLQkJCQlyZWFsaW5kZXYgPSBwYXJlbnQ7Ci0JCX0KLQotCQlORl9IT09LX1RIUkVTSChwZiwgTkZfSVBfRk9SV0FSRCwgc2tiLCByZWFsaW5kZXYsCi0JCQkgICAgICAgcmVhbG91dGRldiwgYnJfbmZfbG9jYWxfb3V0X2ZpbmlzaCwKLQkJCSAgICAgICBORl9JUF9QUklfQlJJREdFX1NBQk9UQUdFX0ZPUldBUkQgKyAxKTsKLQl9IGVsc2UgewotCQlORl9IT09LX1RIUkVTSChwZiwgTkZfSVBfTE9DQUxfT1VULCBza2IsIHJlYWxpbmRldiwKLQkJCSAgICAgICByZWFsb3V0ZGV2LCBicl9uZl9sb2NhbF9vdXRfZmluaXNoLAotCQkJICAgICAgIE5GX0lQX1BSSV9CUklER0VfU0FCT1RBR0VfTE9DQUxfT1VUICsgMSk7CisJCXNrYl9wdXNoKHNrYiwgVkxBTl9ITEVOKTsKKwkJc2tiLT5uaC5yYXcgLT0gVkxBTl9ITEVOOwogCX0KIAotb3V0OgorCU5GX0hPT0soUEZfQlJJREdFLCBORl9CUl9GT1JXQVJELCBza2IsIHJlYWxpbmRldiwgc2tiLT5kZXYsCisJCWJyX2ZvcndhcmRfZmluaXNoKTsKIAlyZXR1cm4gTkZfU1RPTEVOOwogfQogCkBAIC04OTQsNjkgKzgzMSw2IEBACiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotLyogUG9zdHBvbmUgZXhlY3V0aW9uIG9mIFBGX0lORVQoNikvRk9SV0FSRCwgUEZfSU5FVCg2KS9MT0NBTF9PVVQKLSAqIGFuZCBQRl9JTkVUKDYpL1BPU1RfUk9VVElORyB1bnRpbCB3ZSBoYXZlIGRvbmUgdGhlIGZvcndhcmRpbmcKLSAqIGRlY2lzaW9uIGluIHRoZSBicmlkZ2UgY29kZSBhbmQgaGF2ZSBkZXRlcm1pbmVkIG5mX2JyaWRnZS0+cGh5c291dGRldi4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfc2Fib3RhZ2Vfb3V0KHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJCQkgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwotCi0JaWYgKChvdXQtPmhhcmRfc3RhcnRfeG1pdCA9PSBicl9kZXZfeG1pdCAmJgotCSAgICAgb2tmbiAhPSBicl9uZl9mb3J3YXJkX2ZpbmlzaCAmJgotCSAgICAgb2tmbiAhPSBicl9uZl9sb2NhbF9vdXRfZmluaXNoICYmIG9rZm4gIT0gYnJfbmZfZGV2X3F1ZXVlX3htaXQpCi0jaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCi0JICAgIHx8ICgob3V0LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKSAmJgotCQlWTEFOX0RFVl9JTkZPKG91dCktPnJlYWxfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPT0gYnJfZGV2X3htaXQpCi0jZW5kaWYKLQkgICAgKSB7Ci0JCXN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlOwotCi0JCWlmICghc2tiLT5uZl9icmlkZ2UpIHsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0JCQkvKiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgd2hpbGUgaW4gdGhlIElQKHY2KSBzdGFjaywKLQkJCSAgIHRoZSB2ZXJzaW9uIHNob3VsZCBiZSA0IG9yIDYuIFdlIGNhbid0IHVzZQotCQkJICAgc2tiLT5wcm90b2NvbCBiZWNhdXNlIHRoYXQgaXNuJ3Qgc2V0IG9uCi0JCQkgICBQRl9JTkVUKDYpL0xPQ0FMX09VVC4gKi8KLQkJCXN0cnVjdCBpcGhkciAqaXAgPSBza2ItPm5oLmlwaDsKLQotCQkJaWYgKGlwLT52ZXJzaW9uID09IDQgJiYgIWJybmZfY2FsbF9pcHRhYmxlcykKLQkJCQlyZXR1cm4gTkZfQUNDRVBUOwotCQkJZWxzZSBpZiAoaXAtPnZlcnNpb24gPT0gNiAmJiAhYnJuZl9jYWxsX2lwNnRhYmxlcykKLQkJCQlyZXR1cm4gTkZfQUNDRVBUOwotCQkJZWxzZSBpZiAoIWJybmZfZGVmZXJyZWRfaG9va3MpCi0JCQkJcmV0dXJuIE5GX0FDQ0VQVDsKLSNlbmRpZgotCQkJaWYgKGhvb2sgPT0gTkZfSVBfUE9TVF9ST1VUSU5HKQotCQkJCXJldHVybiBORl9BQ0NFUFQ7Ci0JCQlpZiAoIW5mX2JyaWRnZV9hbGxvYyhza2IpKQotCQkJCXJldHVybiBORl9EUk9QOwotCQl9Ci0KLQkJbmZfYnJpZGdlID0gc2tiLT5uZl9icmlkZ2U7Ci0KLQkJLyogVGhpcyBmcmFtZSB3aWxsIGFycml2ZSBvbiBQRl9CUklER0UvTE9DQUxfT1VUIGFuZCB3ZQotCQkgKiB3aWxsIG5lZWQgdGhlIGluZGV2IHRoZW4uIEZvciBhIGJyb3V0ZXIsIHRoZSByZWFsIGluZGV2Ci0JCSAqIGNhbiBiZSBhIGJyaWRnZSBwb3J0LCBzbyB3ZSBtYWtlIHN1cmUgYnJfbmZfbG9jYWxfb3V0KCkKLQkJICogZG9lc24ndCB1c2UgdGhlIGJyaWRnZSBwYXJlbnQgb2YgdGhlIGluZGV2IGJ5IHVzaW5nCi0JCSAqIHRoZSBCUk5GX0RPTlRfVEFLRV9QQVJFTlQgbWFzay4gKi8KLQkJaWYgKGhvb2sgPT0gTkZfSVBfRk9SV0FSRCAmJiBuZl9icmlkZ2UtPnBoeXNpbmRldiA9PSBOVUxMKSB7Ci0JCQluZl9icmlkZ2UtPm1hc2sgfD0gQlJORl9ET05UX1RBS0VfUEFSRU5UOwotCQkJbmZfYnJpZGdlLT5waHlzaW5kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilpbjsKLQkJfQotI2lmIGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpIHx8IGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQotCQkvKiB0aGUgaXB0YWJsZXMgb3V0ZGV2IGlzIGJyMC54LCBub3QgYnIwICovCi0JCWlmIChvdXQtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pCi0JCQluZl9icmlkZ2UtPm5ldG91dGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKW91dDsKLSNlbmRpZgotCQlyZXR1cm4gTkZfU1RPUDsKLQl9Ci0KLQlyZXR1cm4gTkZfQUNDRVBUOwotfQotCiAvKiBGb3IgYnJfbmZfbG9jYWxfb3V0IHdlIG5lZWQgKHByaW8gPSBORl9CUl9QUklfRklSU1QpLCB0byBpbnN1cmUgdGhhdCBpbm5vY2VudAogICogUEZfQlJJREdFL05GX0JSX0xPQ0FMX09VVCBmdW5jdGlvbnMgZG9uJ3QgZ2V0IGJyaWRnZWQgdHJhZmZpYyBhcyBpbnB1dC4KICAqIEZvciBicl9uZl9wb3N0X3JvdXRpbmcsIHdlIG5lZWQgKHByaW8gPSBORl9CUl9QUklfTEFTVCksIGJlY2F1c2UKQEAgLTEwMDIsMzYgKzg3Niw2IEBACiAJICAucGYgPSBQRl9JTkVUNiwKIAkgIC5ob29rbnVtID0gTkZfSVA2X1BSRV9ST1VUSU5HLAogCSAgLnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCwgfSwKLQl7IC5ob29rID0gaXBfc2Fib3RhZ2Vfb3V0LAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JICAucGYgPSBQRl9JTkVULAotCSAgLmhvb2tudW0gPSBORl9JUF9GT1JXQVJELAotCSAgLnByaW9yaXR5ID0gTkZfSVBfUFJJX0JSSURHRV9TQUJPVEFHRV9GT1JXQVJELCB9LAotCXsgLmhvb2sgPSBpcF9zYWJvdGFnZV9vdXQsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkgIC5wZiA9IFBGX0lORVQ2LAotCSAgLmhvb2tudW0gPSBORl9JUDZfRk9SV0FSRCwKLQkgIC5wcmlvcml0eSA9IE5GX0lQNl9QUklfQlJJREdFX1NBQk9UQUdFX0ZPUldBUkQsIH0sCi0JeyAuaG9vayA9IGlwX3NhYm90YWdlX291dCwKLQkgIC5vd25lciA9IFRISVNfTU9EVUxFLAotCSAgLnBmID0gUEZfSU5FVCwKLQkgIC5ob29rbnVtID0gTkZfSVBfTE9DQUxfT1VULAotCSAgLnByaW9yaXR5ID0gTkZfSVBfUFJJX0JSSURHRV9TQUJPVEFHRV9MT0NBTF9PVVQsIH0sCi0JeyAuaG9vayA9IGlwX3NhYm90YWdlX291dCwKLQkgIC5vd25lciA9IFRISVNfTU9EVUxFLAotCSAgLnBmID0gUEZfSU5FVDYsCi0JICAuaG9va251bSA9IE5GX0lQNl9MT0NBTF9PVVQsCi0JICAucHJpb3JpdHkgPSBORl9JUDZfUFJJX0JSSURHRV9TQUJPVEFHRV9MT0NBTF9PVVQsIH0sCi0JeyAuaG9vayA9IGlwX3NhYm90YWdlX291dCwKLQkgIC5vd25lciA9IFRISVNfTU9EVUxFLAotCSAgLnBmID0gUEZfSU5FVCwKLQkgIC5ob29rbnVtID0gTkZfSVBfUE9TVF9ST1VUSU5HLAotCSAgLnByaW9yaXR5ID0gTkZfSVBfUFJJX0ZJUlNULCB9LAotCXsgLmhvb2sgPSBpcF9zYWJvdGFnZV9vdXQsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkgIC5wZiA9IFBGX0lORVQ2LAotCSAgLmhvb2tudW0gPSBORl9JUDZfUE9TVF9ST1VUSU5HLAotCSAgLnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCwgfSwKIH07CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCBiZWU1NThhNC4uNmM4NGNjYiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC02MTAsNyArNjEwLDcgQEAKIAlzdHJ1Y3QgZWJ0X2VudHJ5X3RhcmdldCAqdDsKIAlzdHJ1Y3QgZWJ0X3RhcmdldCAqdGFyZ2V0OwogCXVuc2lnbmVkIGludCBpLCBqLCBob29rID0gMCwgaG9va21hc2sgPSAwOwotCXNpemVfdCBnYXAgPSBlLT5uZXh0X29mZnNldCAtIGUtPnRhcmdldF9vZmZzZXQ7CisJc2l6ZV90IGdhcDsKIAlpbnQgcmV0OwogCiAJLyogZG9uJ3QgbWVzcyB3aXRoIHRoZSBzdHJ1Y3QgZWJ0X2VudHJpZXMgKi8KQEAgLTY2MCw2ICs2NjAsNyBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBjbGVhbnVwX3dhdGNoZXJzOwogCXQgPSAoc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKikoKChjaGFyICopZSkgKyBlLT50YXJnZXRfb2Zmc2V0KTsKKwlnYXAgPSBlLT5uZXh0X29mZnNldCAtIGUtPnRhcmdldF9vZmZzZXQ7CiAJdGFyZ2V0ID0gZmluZF90YXJnZXRfbG9jayh0LT51Lm5hbWUsICZyZXQsICZlYnRfbXV0ZXgpOwogCWlmICghdGFyZ2V0KQogCQlnb3RvIGNsZWFudXBfd2F0Y2hlcnM7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9mbG93LmMgYi9uZXQvY29yZS9mbG93LmMKaW5kZXggZDEzN2Y5Ny4uNWQyNTY5NyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmxvdy5jCisrKyBiL25ldC9jb3JlL2Zsb3cuYwpAQCAtMjMxLDIyICsyMzEsMTYgQEAKIAogCQllcnIgPSByZXNvbHZlcihrZXksIGZhbWlseSwgZGlyLCAmb2JqLCAmb2JqX3JlZik7CiAKLQkJaWYgKGZsZSkgewotCQkJaWYgKGVycikgewotCQkJCS8qIEZvcmNlIHNlY3VyaXR5IHBvbGljeSBjaGVjayBvbiBuZXh0IGxvb2t1cCAqLwotCQkJCSpoZWFkID0gZmxlLT5uZXh0OwotCQkJCWZsb3dfZW50cnlfa2lsbChjcHUsIGZsZSk7Ci0JCQl9IGVsc2UgewotCQkJCWZsZS0+Z2VuaWQgPSBhdG9taWNfcmVhZCgmZmxvd19jYWNoZV9nZW5pZCk7CisJCWlmIChmbGUgJiYgIWVycikgeworCQkJZmxlLT5nZW5pZCA9IGF0b21pY19yZWFkKCZmbG93X2NhY2hlX2dlbmlkKTsKIAotCQkJCWlmIChmbGUtPm9iamVjdCkKLQkJCQkJYXRvbWljX2RlYyhmbGUtPm9iamVjdF9yZWYpOworCQkJaWYgKGZsZS0+b2JqZWN0KQorCQkJCWF0b21pY19kZWMoZmxlLT5vYmplY3RfcmVmKTsKIAotCQkJCWZsZS0+b2JqZWN0ID0gb2JqOwotCQkJCWZsZS0+b2JqZWN0X3JlZiA9IG9ial9yZWY7Ci0JCQkJaWYgKG9iaikKLQkJCQkJYXRvbWljX2luYyhmbGUtPm9iamVjdF9yZWYpOwotCQkJfQorCQkJZmxlLT5vYmplY3QgPSBvYmo7CisJCQlmbGUtPm9iamVjdF9yZWYgPSBvYmpfcmVmOworCQkJaWYgKG9iaikKKwkJCQlhdG9taWNfaW5jKGZsZS0+b2JqZWN0X3JlZik7CiAJCX0KIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggMGFiMTk4Ny4uZTczMDBiNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTU3Nyw5ICs1NzcsMTAgQEAKIAl3aGlsZSAoKGhoID0gbmVpZ2gtPmhoKSAhPSBOVUxMKSB7CiAJCW5laWdoLT5oaCA9IGhoLT5oaF9uZXh0OwogCQloaC0+aGhfbmV4dCA9IE5VTEw7Ci0JCXdyaXRlX2xvY2tfYmgoJmhoLT5oaF9sb2NrKTsKKworCQl3cml0ZV9zZXFsb2NrX2JoKCZoaC0+aGhfbG9jayk7CiAJCWhoLT5oaF9vdXRwdXQgPSBuZWlnaF9ibGFja2hvbGU7Ci0JCXdyaXRlX3VubG9ja19iaCgmaGgtPmhoX2xvY2spOworCQl3cml0ZV9zZXF1bmxvY2tfYmgoJmhoLT5oaF9sb2NrKTsKIAkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmhoLT5oaF9yZWZjbnQpKQogCQkJa2ZyZWUoaGgpOwogCX0KQEAgLTg5Nyw5ICs4OTgsOSBAQAogCiAJaWYgKHVwZGF0ZSkgewogCQlmb3IgKGhoID0gbmVpZ2gtPmhoOyBoaDsgaGggPSBoaC0+aGhfbmV4dCkgewotCQkJd3JpdGVfbG9ja19iaCgmaGgtPmhoX2xvY2spOworCQkJd3JpdGVfc2VxbG9ja19iaCgmaGgtPmhoX2xvY2spOwogCQkJdXBkYXRlKGhoLCBuZWlnaC0+ZGV2LCBuZWlnaC0+aGEpOwotCQkJd3JpdGVfdW5sb2NrX2JoKCZoaC0+aGhfbG9jayk7CisJCQl3cml0ZV9zZXF1bmxvY2tfYmgoJmhoLT5oaF9sb2NrKTsKIAkJfQogCX0KIH0KQEAgLTEwODksNyArMTA5MCw3IEBACiAJCQlicmVhazsKIAogCWlmICghaGggJiYgKGhoID0ga3phbGxvYyhzaXplb2YoKmhoKSwgR0ZQX0FUT01JQykpICE9IE5VTEwpIHsKLQkJcndsb2NrX2luaXQoJmhoLT5oaF9sb2NrKTsKKwkJc2VxbG9ja19pbml0KCZoaC0+aGhfbG9jayk7CiAJCWhoLT5oaF90eXBlID0gcHJvdG9jb2w7CiAJCWF0b21pY19zZXQoJmhoLT5oaF9yZWZjbnQsIDApOwogCQloaC0+aGhfbmV4dCA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggYjNjNTU5Yi4uODIzMjE1ZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jCisrKyBiL25ldC9jb3JlL25ldHBvbGwuYwpAQCAtNTUsNiArNTUsNyBAQAogCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0cG9sbF9pbmZvLCB0eF93b3JrLndvcmspOwogCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJm5waW5mby0+dHhxKSkpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwpAQCAtNjQsMTUgKzY1LDE5IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQluZXRpZl90eF9sb2NrKGRldik7CiAJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgfHwKIAkJICAgIGRldi0+aGFyZF9zdGFydF94bWl0KHNrYiwgZGV2KSAhPSBORVRERVZfVFhfT0spIHsKIAkJCXNrYl9xdWV1ZV9oZWFkKCZucGluZm8tPnR4cSwgc2tiKTsKLQkJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOworCQkJbmV0aWZfdHhfdW5sb2NrKGRldik7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbnBpbmZvLT50eF93b3JrLCBIWi8xMCk7CiAJCQlyZXR1cm47CiAJCX0KKwkJbmV0aWZfdHhfdW5sb2NrKGRldik7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiB9CiAKQEAgLTI0MiwyMiArMjQ3LDI4IEBACiAKIAkvKiBkb24ndCBnZXQgbWVzc2FnZXMgb3V0IG9mIG9yZGVyLCBhbmQgbm8gcmVjdXJzaW9uICovCiAJaWYgKHNrYl9xdWV1ZV9sZW4oJm5waW5mby0+dHhxKSA9PSAwICYmCi0JICAgIG5waW5mby0+cG9sbF9vd25lciAhPSBzbXBfcHJvY2Vzc29yX2lkKCkgJiYKLQkgICAgbmV0aWZfdHhfdHJ5bG9jayhkZXYpKSB7Ci0JCS8qIHRyeSB1bnRpbCBuZXh0IGNsb2NrIHRpY2sgKi8KLQkJZm9yICh0cmllcyA9IGppZmZpZXNfdG9fdXNlY3MoMSkvVVNFQ19QRVJfUE9MTDsgdHJpZXMgPiAwOyAtLXRyaWVzKSB7Ci0JCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKLQkJCQlzdGF0dXMgPSBkZXYtPmhhcmRfc3RhcnRfeG1pdChza2IsIGRldik7CisJCSAgICBucGluZm8tPnBvbGxfb3duZXIgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJCWlmIChzdGF0dXMgPT0gTkVUREVWX1RYX09LKQotCQkJCWJyZWFrOworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCWlmIChuZXRpZl90eF90cnlsb2NrKGRldikpIHsKKwkJCS8qIHRyeSB1bnRpbCBuZXh0IGNsb2NrIHRpY2sgKi8KKwkJCWZvciAodHJpZXMgPSBqaWZmaWVzX3RvX3VzZWNzKDEpL1VTRUNfUEVSX1BPTEw7CisJCQkJCXRyaWVzID4gMDsgLS10cmllcykgeworCQkJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQorCQkJCQlzdGF0dXMgPSBkZXYtPmhhcmRfc3RhcnRfeG1pdChza2IsIGRldik7CiAKLQkJCS8qIHRpY2tsZSBkZXZpY2UgbWF5YmUgdGhlcmUgaXMgc29tZSBjbGVhbnVwICovCi0JCQluZXRwb2xsX3BvbGwobnApOworCQkJCWlmIChzdGF0dXMgPT0gTkVUREVWX1RYX09LKQorCQkJCQlicmVhazsKIAotCQkJdWRlbGF5KFVTRUNfUEVSX1BPTEwpOworCQkJCS8qIHRpY2tsZSBkZXZpY2UgbWF5YmUgdGhlcmUgaXMgc29tZSBjbGVhbnVwICovCisJCQkJbmV0cG9sbF9wb2xsKG5wKTsKKworCQkJCXVkZWxheShVU0VDX1BFUl9QT0xMKTsKKwkJCX0KKwkJCW5ldGlmX3R4X3VubG9jayhkZXYpOwogCQl9Ci0JCW5ldGlmX3R4X3VubG9jayhkZXYpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogCiAJaWYgKHN0YXR1cyAhPSBORVRERVZfVFhfT0spIHsKQEAgLTMzMCw2ICszNDEsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmFycF9wdHI7CiAJaW50IHNpemUsIHR5cGUgPSBBUlBPUF9SRVBMWSwgcHR5cGUgPSBFVEhfUF9BUlA7CiAJX19iZTMyIHNpcCwgdGlwOworCXVuc2lnbmVkIGNoYXIgKnNoYTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2VuZF9za2I7CiAJc3RydWN0IG5ldHBvbGwgKm5wID0gTlVMTDsKIApAQCAtMzU2LDkgKzM2OCwxNCBAQAogCSAgICBhcnAtPmFyX29wICE9IGh0b25zKEFSUE9QX1JFUVVFU1QpKQogCQlyZXR1cm47CiAKLQlhcnBfcHRyID0gKHVuc2lnbmVkIGNoYXIgKikoYXJwKzEpICsgc2tiLT5kZXYtPmFkZHJfbGVuOworCWFycF9wdHIgPSAodW5zaWduZWQgY2hhciAqKShhcnArMSk7CisJLyogc2F2ZSB0aGUgbG9jYXRpb24gb2YgdGhlIHNyYyBodyBhZGRyICovCisJc2hhID0gYXJwX3B0cjsKKwlhcnBfcHRyICs9IHNrYi0+ZGV2LT5hZGRyX2xlbjsKIAltZW1jcHkoJnNpcCwgYXJwX3B0ciwgNCk7Ci0JYXJwX3B0ciArPSA0ICsgc2tiLT5kZXYtPmFkZHJfbGVuOworCWFycF9wdHIgKz0gNDsKKwkvKiBpZiB3ZSBhY3R1YWxseSBjYXJlZCBhYm91dCBkc3QgaHcgYWRkciwgaXQgd291bGQgZ2V0IGNvcGllZCBoZXJlICovCisJYXJwX3B0ciArPSBza2ItPmRldi0+YWRkcl9sZW47CiAJbWVtY3B5KCZ0aXAsIGFycF9wdHIsIDQpOwogCiAJLyogU2hvdWxkIHdlIGlnbm9yZSBhcnA/ICovCkBAIC0zODEsNyArMzk4LDcgQEAKIAogCWlmIChucC0+ZGV2LT5oYXJkX2hlYWRlciAmJgogCSAgICBucC0+ZGV2LT5oYXJkX2hlYWRlcihzZW5kX3NrYiwgc2tiLT5kZXYsIHB0eXBlLAotCQkJCSBucC0+cmVtb3RlX21hYywgbnAtPmxvY2FsX21hYywKKwkJCQkgc2hhLCBucC0+bG9jYWxfbWFjLAogCQkJCSBzZW5kX3NrYi0+bGVuKSA8IDApIHsKIAkJa2ZyZWVfc2tiKHNlbmRfc2tiKTsKIAkJcmV0dXJuOwpAQCAtNDA1LDcgKzQyMiw3IEBACiAJYXJwX3B0ciArPSBucC0+ZGV2LT5hZGRyX2xlbjsKIAltZW1jcHkoYXJwX3B0ciwgJnRpcCwgNCk7CiAJYXJwX3B0ciArPSA0OwotCW1lbWNweShhcnBfcHRyLCBucC0+cmVtb3RlX21hYywgbnAtPmRldi0+YWRkcl9sZW4pOworCW1lbWNweShhcnBfcHRyLCBzaGEsIG5wLT5kZXYtPmFkZHJfbGVuKTsKIAlhcnBfcHRyICs9IG5wLT5kZXYtPmFkZHJfbGVuOwogCW1lbWNweShhcnBfcHRyLCAmc2lwLCA0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCAxODk3YTNhLi4wNGQ0YjkzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMTQ4LDYgKzE0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvYWRkcmNvbmYuaD4KQEAgLTM2MCw4ICszNjEsNyBAQAogCXNwaW5sb2NrX3QgaWZfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGlmX2xpc3Q7CS8qIEFsbCBkZXZpY2UgaGVyZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgdGhfbGlzdDsKLQlpbnQgcmVtb3ZlZDsKLQljaGFyIG5hbWVbMzJdOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCWNoYXIgcmVzdWx0WzUxMl07CiAJdTMyIG1heF9iZWZvcmVfc29mdGlycTsJLyogV2UnbGwgY2FsbCBkb19zb2Z0aXJxIHRvIHByZXZlbnQgc3RhcnZhdGlvbi4gKi8KIApAQCAtMTY4OSw3ICsxNjg5LDcgQEAKIAlCVUdfT04oIXQpOwogCiAJc2VxX3ByaW50ZihzZXEsICJOYW1lOiAlcyAgbWF4X2JlZm9yZV9zb2Z0aXJxOiAlZFxuIiwKLQkJICAgdC0+bmFtZSwgdC0+bWF4X2JlZm9yZV9zb2Z0aXJxKTsKKwkJICAgdC0+dHNrLT5jb21tLCB0LT5tYXhfYmVmb3JlX3NvZnRpcnEpOwogCiAJc2VxX3ByaW50ZihzZXEsICJSdW5uaW5nOiAiKTsKIApAQCAtMzExMiw3ICszMTEyLDcgQEAKIHsKIAkvKiBSZW1vdmUgZnJvbSB0aGUgdGhyZWFkIGxpc3QgKi8KIAotCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHBnX3Byb2NfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeSh0LT50c2stPmNvbW0sIHBnX3Byb2NfZGlyKTsKIAogCW11dGV4X2xvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CiAKQEAgLTMyNjAsNTkgKzMyNjAsNDEgQEAKICAqIE1haW4gbG9vcCBvZiB0aGUgdGhyZWFkIGdvZXMgaGVyZQogICovCiAKLXN0YXRpYyB2b2lkIHBrdGdlbl90aHJlYWRfd29ya2VyKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KQorc3RhdGljIGludCBwa3RnZW5fdGhyZWFkX3dvcmtlcih2b2lkICphcmcpCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7CisJc3RydWN0IHBrdGdlbl90aHJlYWQgKnQgPSBhcmc7CiAJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBOVUxMOwogCWludCBjcHUgPSB0LT5jcHU7Ci0Jc2lnc2V0X3QgdG1wc2lnOwogCXUzMiBtYXhfYmVmb3JlX3NvZnRpcnE7CiAJdTMyIHR4X3NpbmNlX3NvZnRpcnEgPSAwOwogCi0JZGFlbW9uaXplKCJwa3RnZW4vJWQiLCBjcHUpOwotCi0JLyogQmxvY2sgYWxsIHNpZ25hbHMgZXhjZXB0IFNJR0tJTEwsIFNJR1NUT1AgYW5kIFNJR1RFUk0gKi8KLQotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXRtcHNpZyA9IGN1cnJlbnQtPmJsb2NrZWQ7Ci0Jc2lnaW5pdHNldGludigmY3VycmVudC0+YmxvY2tlZCwKLQkJICAgICAgc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkgfCBzaWdtYXNrKFNJR1RFUk0pKTsKLQotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCS8qIE1pZ3JhdGUgdG8gdGhlIHJpZ2h0IENQVSAqLwotCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoY3B1KSk7Ci0JaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBjcHUpCi0JCUJVRygpOworCUJVR19PTihzbXBfcHJvY2Vzc29yX2lkKCkgIT0gY3B1KTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnQtPnF1ZXVlKTsKIAotCXQtPmNvbnRyb2wgJj0gfihUX1RFUk1JTkFURSk7Ci0JdC0+Y29udHJvbCAmPSB+KFRfUlVOKTsKLQl0LT5jb250cm9sICY9IH4oVF9TVE9QKTsKLQl0LT5jb250cm9sICY9IH4oVF9SRU1ERVZBTEwpOwotCXQtPmNvbnRyb2wgJj0gfihUX1JFTURFVik7Ci0KIAl0LT5waWQgPSBjdXJyZW50LT5waWQ7CiAKIAlQR19ERUJVRyhwcmludGsoInBrdGdlbjogc3RhcnRpbmcgcGt0Z2VuLyVkOiAgcGlkPSVkXG4iLCBjcHUsIGN1cnJlbnQtPnBpZCkpOwogCiAJbWF4X2JlZm9yZV9zb2Z0aXJxID0gdC0+bWF4X2JlZm9yZV9zb2Z0aXJxOwogCi0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCW1iKCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCXdoaWxlICgxKSB7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJcGt0X2RldiA9IG5leHRfdG9fcnVuKHQpOworCisJCWlmICghcGt0X2RldiAmJgorCQkgICAgKHQtPmNvbnRyb2wgJiAoVF9TVE9QIHwgVF9SVU4gfCBUX1JFTURFVkFMTCB8IFRfUkVNREVWKSkKKwkJICAgID09IDApIHsKKwkJCXByZXBhcmVfdG9fd2FpdCgmKHQtPnF1ZXVlKSwgJndhaXQsCisJCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlzY2hlZHVsZV90aW1lb3V0KEhaIC8gMTApOworCQkJZmluaXNoX3dhaXQoJih0LT5xdWV1ZSksICZ3YWl0KTsKKwkJfQogCiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAotCQkvKgotCQkgKiBHZXQgbmV4dCBkZXYgdG8geG1pdCAtLSBpZiBhbnkuCi0JCSAqLwotCi0JCXBrdF9kZXYgPSBuZXh0X3RvX3J1bih0KTsKLQogCQlpZiAocGt0X2RldikgewogCiAJCQlwa3RnZW5feG1pdChwa3RfZGV2KTsKQEAgLTMzMjksMjEgKzMzMTEsOCBAQAogCQkJCQlkb19zb2Z0aXJxKCk7CiAJCQkJdHhfc2luY2Vfc29mdGlycSA9IDA7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQlwcmVwYXJlX3RvX3dhaXQoJih0LT5xdWV1ZSksICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJc2NoZWR1bGVfdGltZW91dChIWiAvIDEwKTsKLQkJCWZpbmlzaF93YWl0KCYodC0+cXVldWUpLCAmd2FpdCk7CiAJCX0KIAotCQkvKgotCQkgKiBCYWNrIGZyb20gc2xlZXAsIGVpdGhlciBkdWUgdG8gdGhlIHRpbWVvdXQgb3Igc2lnbmFsLgotCQkgKiBXZSBjaGVjayBpZiB3ZSBoYXZlIGFueSAicG9zdGVkIiB3b3JrIGZvciB1cy4KLQkJICovCi0KLQkJaWYgKHQtPmNvbnRyb2wgJiBUX1RFUk1JTkFURSB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCS8qIHdlIHJlY2VpdmVkIGEgcmVxdWVzdCB0byB0ZXJtaW5hdGUgb3Vyc2VsZiAqLwotCQkJYnJlYWs7Ci0KIAkJaWYgKHQtPmNvbnRyb2wgJiBUX1NUT1ApIHsKIAkJCXBrdGdlbl9zdG9wKHQpOwogCQkJdC0+Y29udHJvbCAmPSB+KFRfU1RPUCk7CkBAIC0zMzY0LDIwICszMzMzLDE5IEBACiAJCQl0LT5jb250cm9sICY9IH4oVF9SRU1ERVYpOwogCQl9CiAKLQkJaWYgKG5lZWRfcmVzY2hlZCgpKQotCQkJc2NoZWR1bGUoKTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl9CiAKLQlQR19ERUJVRyhwcmludGsoInBrdGdlbjogJXMgc3RvcHBpbmcgYWxsIGRldmljZVxuIiwgdC0+bmFtZSkpOworCVBHX0RFQlVHKHByaW50aygicGt0Z2VuOiAlcyBzdG9wcGluZyBhbGwgZGV2aWNlXG4iLCB0LT50c2stPmNvbW0pKTsKIAlwa3RnZW5fc3RvcCh0KTsKIAotCVBHX0RFQlVHKHByaW50aygicGt0Z2VuOiAlcyByZW1vdmluZyBhbGwgZGV2aWNlXG4iLCB0LT5uYW1lKSk7CisJUEdfREVCVUcocHJpbnRrKCJwa3RnZW46ICVzIHJlbW92aW5nIGFsbCBkZXZpY2VcbiIsIHQtPnRzay0+Y29tbSkpOwogCXBrdGdlbl9yZW1fYWxsX2lmcyh0KTsKIAotCVBHX0RFQlVHKHByaW50aygicGt0Z2VuOiAlcyByZW1vdmluZyB0aHJlYWQuXG4iLCB0LT5uYW1lKSk7CisJUEdfREVCVUcocHJpbnRrKCJwa3RnZW46ICVzIHJlbW92aW5nIHRocmVhZC5cbiIsIHQtPnRzay0+Y29tbSkpOwogCXBrdGdlbl9yZW1fdGhyZWFkKHQpOwogCi0JdC0+cmVtb3ZlZCA9IDE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LApAQCAtMzQ5NSwzNyArMzQ2MywxMSBAQAogCXJldHVybiBhZGRfZGV2X3RvX3RocmVhZCh0LCBwa3RfZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBwa3RnZW5fdGhyZWFkICpfX2luaXQgcGt0Z2VuX2ZpbmRfdGhyZWFkKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW50IF9faW5pdCBwa3RnZW5fY3JlYXRlX3RocmVhZChpbnQgY3B1KQogewogCXN0cnVjdCBwa3RnZW5fdGhyZWFkICp0OwotCi0JbXV0ZXhfbG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnBrdGdlbl90aHJlYWRzLCB0aF9saXN0KQotCQlpZiAoc3RyY21wKHQtPm5hbWUsIG5hbWUpID09IDApIHsKLQkJCW11dGV4X3VubG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKLQkJCXJldHVybiB0OwotCQl9Ci0KLQltdXRleF91bmxvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBrdGdlbl9jcmVhdGVfdGhyZWFkKGNvbnN0IGNoYXIgKm5hbWUsIGludCBjcHUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCA9IE5VTEw7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZTsKLQotCWlmIChzdHJsZW4obmFtZSkgPiAzMSkgewotCQlwcmludGsoInBrdGdlbjogRVJST1I6ICBUaHJlYWQgbmFtZSBjYW5ub3QgYmUgbW9yZSB0aGFuIDMxIGNoYXJhY3RlcnMuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHBrdGdlbl9maW5kX3RocmVhZChuYW1lKSkgewotCQlwcmludGsoInBrdGdlbjogRVJST1I6IHRocmVhZDogJXMgYWxyZWFkeSBleGlzdHNcbiIsIG5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCiAJdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwa3RnZW5fdGhyZWFkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0KSB7CkBAIC0zNTMzLDE0ICszNDc1LDI5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXN0cmNweSh0LT5uYW1lLCBuYW1lKTsKIAlzcGluX2xvY2tfaW5pdCgmdC0+aWZfbG9jayk7CiAJdC0+Y3B1ID0gY3B1OwogCi0JcGUgPSBjcmVhdGVfcHJvY19lbnRyeSh0LT5uYW1lLCAwNjAwLCBwZ19wcm9jX2Rpcik7CisJSU5JVF9MSVNUX0hFQUQoJnQtPmlmX2xpc3QpOworCisJbGlzdF9hZGRfdGFpbCgmdC0+dGhfbGlzdCwgJnBrdGdlbl90aHJlYWRzKTsKKworCXAgPSBrdGhyZWFkX2NyZWF0ZShwa3RnZW5fdGhyZWFkX3dvcmtlciwgdCwgImtwa3RnZW5kXyVkIiwgY3B1KTsKKwlpZiAoSVNfRVJSKHApKSB7CisJCXByaW50aygicGt0Z2VuOiBrZXJuZWxfdGhyZWFkKCkgZmFpbGVkIGZvciBjcHUgJWRcbiIsIHQtPmNwdSk7CisJCWxpc3RfZGVsKCZ0LT50aF9saXN0KTsKKwkJa2ZyZWUodCk7CisJCXJldHVybiBQVFJfRVJSKHApOworCX0KKwlrdGhyZWFkX2JpbmQocCwgY3B1KTsKKwl0LT50c2sgPSBwOworCisJcGUgPSBjcmVhdGVfcHJvY19lbnRyeSh0LT50c2stPmNvbW0sIDA2MDAsIHBnX3Byb2NfZGlyKTsKIAlpZiAoIXBlKSB7CiAJCXByaW50aygicGt0Z2VuOiBjYW5ub3QgY3JlYXRlICVzLyVzIHByb2NmcyBlbnRyeS5cbiIsCi0JCSAgICAgICBQR19QUk9DX0RJUiwgdC0+bmFtZSk7CisJCSAgICAgICBQR19QUk9DX0RJUiwgdC0+dHNrLT5jb21tKTsKKwkJa3RocmVhZF9zdG9wKHApOworCQlsaXN0X2RlbCgmdC0+dGhfbGlzdCk7CiAJCWtmcmVlKHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0zNTQ4LDIxICszNTA1LDcgQEAKIAlwZS0+cHJvY19mb3BzID0gJnBrdGdlbl90aHJlYWRfZm9wczsKIAlwZS0+ZGF0YSA9IHQ7CiAKLQlJTklUX0xJU1RfSEVBRCgmdC0+aWZfbGlzdCk7Ci0KLQlsaXN0X2FkZF90YWlsKCZ0LT50aF9saXN0LCAmcGt0Z2VuX3RocmVhZHMpOwotCi0JdC0+cmVtb3ZlZCA9IDA7Ci0KLQllcnIgPSBrZXJuZWxfdGhyZWFkKCh2b2lkICopcGt0Z2VuX3RocmVhZF93b3JrZXIsICh2b2lkICopdCwKLQkJCSAgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8IENMT05FX1NJR0hBTkQpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXByaW50aygicGt0Z2VuOiBrZXJuZWxfdGhyZWFkKCkgZmFpbGVkIGZvciBjcHUgJWRcbiIsIHQtPmNwdSk7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHBnX3Byb2NfZGlyKTsKLQkJbGlzdF9kZWwoJnQtPnRoX2xpc3QpOwotCQlrZnJlZSh0KTsKLQkJcmV0dXJuIGVycjsKLQl9CisJd2FrZV91cF9wcm9jZXNzKHApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNjQzLDEwICszNTg2LDggQEAKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWludCBlcnI7Ci0JCWNoYXIgYnVmWzMwXTsKIAotCQlzcHJpbnRmKGJ1ZiwgImtwa3RnZW5kXyVpIiwgY3B1KTsKLQkJZXJyID0gcGt0Z2VuX2NyZWF0ZV90aHJlYWQoYnVmLCBjcHUpOworCQllcnIgPSBwa3RnZW5fY3JlYXRlX3RocmVhZChjcHUpOwogCQlpZiAoZXJyKQogCQkJcHJpbnRrKCJwa3RnZW46IFdBUk5JTkc6IENhbm5vdCBjcmVhdGUgdGhyZWFkIGZvciBjcHUgJWQgKCVkKVxuIiwKIAkJCQkJY3B1LCBlcnIpOwpAQCAtMzY3NCw5ICszNjE1LDggQEAKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShxLCBuLCAmcGt0Z2VuX3RocmVhZHMpIHsKIAkJdCA9IGxpc3RfZW50cnkocSwgc3RydWN0IHBrdGdlbl90aHJlYWQsIHRoX2xpc3QpOwotCQl0LT5jb250cm9sIHw9IChUX1RFUk1JTkFURSk7Ci0KLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocXVldWUsICh0LT5yZW1vdmVkID09IDEpLCBIWik7CisJCWt0aHJlYWRfc3RvcCh0LT50c2spOworCQlrZnJlZSh0KTsKIAl9CiAKIAkvKiBVbi1yZWdpc3RlciB1cyBmcm9tIHJlY2VpdmluZyBuZXRkZXZpY2UgZXZlbnRzICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuYyBiL25ldC9kY2NwL2Fja3ZlYy5jCmluZGV4IDFmNDcyN2QuLmEwODZjNjMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2Fja3ZlYy5jCisrKyBiL25ldC9kY2NwL2Fja3ZlYy5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIAkJCWdhcCA9IC1uZXdfaGVhZDsKIAkJfQogCQluZXdfaGVhZCArPSBEQ0NQX01BWF9BQ0tWRUNfTEVOOwotCX0gCisJfQogCiAJYXYtPmRjY3Bhdl9idWZfaGVhZCA9IG5ld19oZWFkOwogCkBAIC0zMzYsNyArMzM2LDcgQEAKIHZvaWQgZGNjcF9hY2t2ZWN0b3JfcHJpbnQoY29uc3QgdTY0IGFja25vLCBjb25zdCB1bnNpZ25lZCBjaGFyICp2ZWN0b3IsIGludCBsZW4pCiB7CiAJZGNjcF9wcl9kZWJ1Z19jYXQoIkFDSyB2ZWN0b3IgbGVuPSVkLCBhY2tubz0lbGx1IHwiLCBsZW4sCi0JCQkgCQkodW5zaWduZWQgbG9uZyBsb25nKWFja25vKTsKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKWFja25vKTsKIAogCXdoaWxlIChsZW4tLSkgewogCQljb25zdCB1OCBzdGF0ZSA9ICgqdmVjdG9yICYgRENDUF9BQ0tWRUNfU1RBVEVfTUFTSykgPj4gNjsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWQuaCBiL25ldC9kY2NwL2NjaWQuaAppbmRleCBiY2MyZDEyLi5jNjVjYjI0IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkLmgKKysrIGIvbmV0L2RjY3AvY2NpZC5oCkBAIC00Myw4ICs0Myw2IEBACiAJCQkJCQkgICAgdW5zaWduZWQgY2hhciogdmFsdWUpOwogCWludAkJKCpjY2lkX2hjX3J4X2luc2VydF9vcHRpb25zKShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOwotCWludAkJKCpjY2lkX2hjX3R4X2luc2VydF9vcHRpb25zKShzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogCXZvaWQJCSgqY2NpZF9oY190eF9wYWNrZXRfcmVjdikoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQJCSgqY2NpZF9oY190eF9wYXJzZV9vcHRpb25zKShzdHJ1Y3Qgc29jayAqc2ssCkBAIC0xNDYsMTQgKzE0NCw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjY2lkX2hjX3R4X2luc2VydF9vcHRpb25zKHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWlmIChjY2lkLT5jY2lkX29wcy0+Y2NpZF9oY190eF9pbnNlcnRfb3B0aW9ucyAhPSBOVUxMKQotCQlyZXR1cm4gY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfaW5zZXJ0X29wdGlvbnMoc2ssIHNrYik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGNjaWRfaGNfcnhfaW5zZXJ0X29wdGlvbnMoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMi5jIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDIuYwppbmRleCAyNTU1YmU4Li5mZDM4YjA1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMi5jCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQyLmMKQEAgLTM1MSw3ICszNTEsNyBAQAogCiAJCXdoaWxlIChzZXFwICE9IGhjdHgtPmNjaWQyaGN0eF9zZXFoKSB7CiAJCQljY2lkMl9wcl9kZWJ1Zygib3V0IHNlcT0lbGx1IGFja2VkPSVkIHRpbWU9JWx1XG4iLAotCQkJICAgICAgIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzZXFwLT5jY2lkMnNfc2VxLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNlcXAtPmNjaWQyc19zZXEsCiAJCQkJICAgICAgIHNlcXAtPmNjaWQyc19hY2tlZCwgc2VxcC0+Y2NpZDJzX3NlbnQpOwogCQkJc2VxcCA9IHNlcXAtPmNjaWQyc19uZXh0OwogCQl9CkBAIC00NzMsNyArNDczLDcgQEAKIAkJLyogZmlyc3QgbWVhc3VyZW1lbnQgKi8KIAkJaWYgKGhjdHgtPmNjaWQyaGN0eF9zcnR0ID09IC0xKSB7CiAJCQljY2lkMl9wcl9kZWJ1ZygiUjogJWx1IFRpbWU9JWx1IHNlcT0lbGx1XG4iLAotCQkJICAgICAgIAkgICAgICAgciwgamlmZmllcywKKwkJCQkgICAgICAgciwgamlmZmllcywKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzZXFwLT5jY2lkMnNfc2VxKTsKIAkJCWNjaWQyX2NoYW5nZV9zcnR0KGhjdHgsIHIpOwogCQkJaGN0eC0+Y2NpZDJoY3R4X3J0dHZhciA9IHIgPj4gMTsKQEAgLTUxOCw4ICs1MTgsOCBAQAogCQloY3R4LT5jY2lkMmhjdHhfbGFzdHJ0dCA9IGppZmZpZXM7CiAKIAkJY2NpZDJfcHJfZGVidWcoInNydHQ6ICVsZCBydHR2YXI6ICVsZCBydG86ICVsZCAoSFo9JWQpIFI9JWx1XG4iLAotCQkgICAgICAgCSAgICAgICBoY3R4LT5jY2lkMmhjdHhfc3J0dCwgaGN0eC0+Y2NpZDJoY3R4X3J0dHZhciwKLQkJICAgICAgIAkgICAgICAgaGN0eC0+Y2NpZDJoY3R4X3J0bywgSFosIHIpOworCQkJICAgICAgIGhjdHgtPmNjaWQyaGN0eF9zcnR0LCBoY3R4LT5jY2lkMmhjdHhfcnR0dmFyLAorCQkJICAgICAgIGhjdHgtPmNjaWQyaGN0eF9ydG8sIEhaLCByKTsKIAkJaGN0eC0+Y2NpZDJoY3R4X3NlbnQgPSAwOwogCX0KIApAQCAtNjY3LDkgKzY2Nyw5IEBACiAJCQkJLyogbmV3IHBhY2tldCByZWNlaXZlZCBvciBtYXJrZWQgKi8KIAkJCQlpZiAoc3RhdGUgIT0gRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVEICYmCiAJCQkJICAgICFzZXFwLT5jY2lkMnNfYWNrZWQpIHsKLQkJCQkgICAgCWlmIChzdGF0ZSA9PQorCQkJCQlpZiAoc3RhdGUgPT0KIAkJCQkJICAgIERDQ1BfQUNLVkVDX1NUQVRFX0VDTl9NQVJLRUQpIHsKLQkJCQkJICAgIAljY2lkMl9jb25nZXN0aW9uX2V2ZW50KGhjdHgsCisJCQkJCQljY2lkMl9jb25nZXN0aW9uX2V2ZW50KGhjdHgsCiAJCQkJCQkJCSAgICAgICBzZXFwKTsKIAkJCQkJfSBlbHNlCiAJCQkJCQljY2lkMl9uZXdfYWNrKHNrLCBzZXFwLApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKaW5kZXggNjZhMjdiOS4uNDA0MDJjNSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYworKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCkBAIC00MSwyNyArNDEsNiBAQAogI2luY2x1ZGUgImxpYi90ZnJjLmgiCiAjaW5jbHVkZSAiY2NpZDMuaCIKIAotLyoKLSAqIFJlYXNvbiBmb3IgbWF0aHMgaGVyZSBpcyB0byBhdm9pZCAzMiBiaXQgb3ZlcmZsb3cgd2hlbiBhIGlzIGJpZy4KLSAqIFdpdGggdGhpcyB3ZSBnZXQgY2xvc2UgdG8gdGhlIGxpbWl0LgotICovCi1zdGF0aWMgdTMyIHVzZWNzX2Rpdihjb25zdCB1MzIgYSwgY29uc3QgdTMyIGIpCi17Ci0JY29uc3QgdTMyIGRpdiA9IGEgPCAoVUlOVF9NQVggLyAoVVNFQ19QRVJfU0VDIC8gICAgMTApKSA/ICAgIDEwIDoKLQkJCWEgPCAoVUlOVF9NQVggLyAoVVNFQ19QRVJfU0VDIC8gICAgNTApKSA/ICAgIDUwIDoKLQkJCWEgPCAoVUlOVF9NQVggLyAoVVNFQ19QRVJfU0VDIC8gICAxMDApKSA/ICAgMTAwIDoKLQkJCWEgPCAoVUlOVF9NQVggLyAoVVNFQ19QRVJfU0VDIC8gICA1MDApKSA/ICAgNTAwIDoKLQkJCWEgPCAoVUlOVF9NQVggLyAoVVNFQ19QRVJfU0VDIC8gIDEwMDApKSA/ICAxMDAwIDoKLQkJCWEgPCAoVUlOVF9NQVggLyAoVVNFQ19QRVJfU0VDIC8gIDUwMDApKSA/ICA1MDAwIDoKLQkJCWEgPCAoVUlOVF9NQVggLyAoVVNFQ19QRVJfU0VDIC8gMTAwMDApKSA/IDEwMDAwIDoKLQkJCWEgPCAoVUlOVF9NQVggLyAoVVNFQ19QRVJfU0VDIC8gNTAwMDApKSA/IDUwMDAwIDoKLQkJCQkJCQkJIDEwMDAwMDsKLQljb25zdCB1MzIgdG1wID0gYSAqIChVU0VDX1BFUl9TRUMgLyBkaXYpOwotCXJldHVybiAoYiA+PSAyICogZGl2KSA/IHRtcCAvIChiIC8gZGl2KSA6IHRtcDsKLX0KLQotCi0KICNpZmRlZiBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRwogc3RhdGljIGludCBjY2lkM19kZWJ1ZzsKICNkZWZpbmUgY2NpZDNfcHJfZGVidWcoZm9ybWF0LCBhLi4uKQlEQ0NQX1BSX0RFQlVHKGNjaWQzX2RlYnVnLCBmb3JtYXQsICMjYSkKQEAgLTEwOCw4ICs4Nyw5IEBACiB7CiAJdGltZXZhbF9zdWJfdXNlY3MoJmhjdHgtPmNjaWQzaGN0eF90X25vbSwgaGN0eC0+Y2NpZDNoY3R4X3RfaXBpKTsKIAotCS8qIENhbGN1bGF0ZSBuZXcgdF9pcGkgKGludGVyIHBhY2tldCBpbnRlcnZhbCkgYnkgdF9pcGkgPSBzIC8gWF9pbnN0ICovCi0JaGN0eC0+Y2NpZDNoY3R4X3RfaXBpID0gdXNlY3NfZGl2KGhjdHgtPmNjaWQzaGN0eF9zLCBoY3R4LT5jY2lkM2hjdHhfeCk7CisJLyogQ2FsY3VsYXRlIG5ldyB0X2lwaSA9IHMgLyBYX2luc3QgKFhfaW5zdCBpcyBpbiA2NCAqIGJ5dGVzL3NlY29uZCkgKi8KKwloY3R4LT5jY2lkM2hjdHhfdF9pcGkgPSBzY2FsZWRfZGl2KGhjdHgtPmNjaWQzaGN0eF9zLAorCQkJCQkgICBoY3R4LT5jY2lkM2hjdHhfeCA+PiA2KTsKIAogCS8qIFVwZGF0ZSBub21pbmFsIHNlbmQgdGltZSB3aXRoIHJlZ2FyZCB0byB0aGUgbmV3IHRfaXBpICovCiAJdGltZXZhbF9hZGRfdXNlY3MoJmhjdHgtPmNjaWQzaGN0eF90X25vbSwgaGN0eC0+Y2NpZDNoY3R4X3RfaXBpKTsKQEAgLTEyOCw0MCArMTA4LDQ0IEBACiAgKiAgICAgICAgICBYID0gbWF4KG1pbigyICogWCwgMiAqIFhfcmVjdiksIHMgLyBSKTsKICAqICAgICAgICAgIHRsZCA9IG5vdzsKICAqCisgKiBOb3RlOiBYIGFuZCBYX3JlY3YgYXJlIGJvdGggc3RvcmVkIGluIHVuaXRzIG9mIDY0ICogYnl0ZXMvc2Vjb25kLCB0byBzdXBwb3J0CisgKiAgICAgICBmaW5lLWdyYWluZWQgcmVzb2x1dGlvbiBvZiBzZW5kaW5nIHJhdGVzLiBUaGlzIHJlcXVpcmVzIHNjYWxpbmcgYnkgMl42CisgKiAgICAgICB0aHJvdWdob3V0IHRoZSBjb2RlLiBPbmx5IFhfY2FsYyBpcyB1bnNjYWxlZCAoaW4gYnl0ZXMvc2Vjb25kKS4KKyAqCiAgKiBJZiBYIGhhcyBjaGFuZ2VkLCB3ZSBhbHNvIHVwZGF0ZSB0aGUgc2NoZWR1bGVkIHNlbmQgdGltZSB0X25vdywKICAqIHRoZSBpbnRlci1wYWNrZXQgaW50ZXJ2YWwgdF9pcGksIGFuZCB0aGUgZGVsdGEgdmFsdWUuCi0gKi8gCisgKi8KIHN0YXRpYyB2b2lkIGNjaWQzX2hjX3R4X3VwZGF0ZV94KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRpbWV2YWwgKm5vdykKIAogewogCXN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4ID0gY2NpZDNfaGNfdHhfc2soc2spOwotCWNvbnN0IF9fdTMyIG9sZF94ID0gaGN0eC0+Y2NpZDNoY3R4X3g7CisJY29uc3QgIF9fdTY0IG9sZF94ID0gaGN0eC0+Y2NpZDNoY3R4X3g7CiAKIAlpZiAoaGN0eC0+Y2NpZDNoY3R4X3AgPiAwKSB7Ci0JCWhjdHgtPmNjaWQzaGN0eF94X2NhbGMgPSB0ZnJjX2NhbGNfeChoY3R4LT5jY2lkM2hjdHhfcywKLQkJCQkJCSAgICAgaGN0eC0+Y2NpZDNoY3R4X3J0dCwKLQkJCQkJCSAgICAgaGN0eC0+Y2NpZDNoY3R4X3ApOwotCQloY3R4LT5jY2lkM2hjdHhfeCA9IG1heF90KHUzMiwgbWluKGhjdHgtPmNjaWQzaGN0eF94X2NhbGMsCi0JCQkJCQkgICBoY3R4LT5jY2lkM2hjdHhfeF9yZWN2ICogMiksCi0JCQkJCSAgICAgICBoY3R4LT5jY2lkM2hjdHhfcyAvIFRGUkNfVF9NQkkpOwogCi0JfSBlbHNlIGlmICh0aW1ldmFsX2RlbHRhKG5vdywgJmhjdHgtPmNjaWQzaGN0eF90X2xkKSA+PQotCQkJCQkJCSAgaGN0eC0+Y2NpZDNoY3R4X3J0dCkgewotCQloY3R4LT5jY2lkM2hjdHhfeCA9IG1heChtaW4oaGN0eC0+Y2NpZDNoY3R4X3hfcmVjdiwKLQkJCQkJICAgIGhjdHgtPmNjaWQzaGN0eF94ICAgICAgKSAqIDIsCi0JCQkJCXVzZWNzX2RpdihoY3R4LT5jY2lkM2hjdHhfcywKLQkJCQkJICAgICAgIAkgIGhjdHgtPmNjaWQzaGN0eF9ydHQpICAgKTsKKwkJaGN0eC0+Y2NpZDNoY3R4X3ggPSBtaW4oKChfX3U2NCloY3R4LT5jY2lkM2hjdHhfeF9jYWxjKSA8PCA2LAorCQkJCQloY3R4LT5jY2lkM2hjdHhfeF9yZWN2ICogMik7CisJCWhjdHgtPmNjaWQzaGN0eF94ID0gbWF4KGhjdHgtPmNjaWQzaGN0eF94LAorCQkJCQkoKChfX3U2NCloY3R4LT5jY2lkM2hjdHhfcykgPDwgNikgLworCQkJCQkJCQlURlJDX1RfTUJJKTsKKworCX0gZWxzZSBpZiAodGltZXZhbF9kZWx0YShub3csICZoY3R4LT5jY2lkM2hjdHhfdF9sZCkgLQorCQkJKHN1c2Vjb25kc190KWhjdHgtPmNjaWQzaGN0eF9ydHQgPj0gMCkgeworCisJCWhjdHgtPmNjaWQzaGN0eF94ID0KKwkJCW1heCgyICogbWluKGhjdHgtPmNjaWQzaGN0eF94LCBoY3R4LT5jY2lkM2hjdHhfeF9yZWN2KSwKKwkJCSAgICBzY2FsZWRfZGl2KCgoX191NjQpaGN0eC0+Y2NpZDNoY3R4X3MpIDw8IDYsCisJCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF9ydHQpKTsKIAkJaGN0eC0+Y2NpZDNoY3R4X3RfbGQgPSAqbm93OwotCX0gZWxzZQotCQljY2lkM19wcl9kZWJ1ZygiTm90IGNoYW5naW5nIFhcbiIpOworCX0KIAogCWlmIChoY3R4LT5jY2lkM2hjdHhfeCAhPSBvbGRfeCkKIAkJY2NpZDNfdXBkYXRlX3NlbmRfdGltZShoY3R4KTsKIH0KIAogLyoKLSAqIAlUcmFjayB0aGUgbWVhbiBwYWNrZXQgc2l6ZSBgcycgKGNmLiBSRkMgNDM0MiwgNS4zIGFuZCAgUkZDIDM0NDgsIDQuMSkKLSAqIAlAbGVuOiBEQ0NQIHBhY2tldCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMKKyAqCVRyYWNrIHRoZSBtZWFuIHBhY2tldCBzaXplIGBzJyAoY2YuIFJGQyA0MzQyLCA1LjMgYW5kICBSRkMgMzQ0OCwgNC4xKQorICoJQGxlbjogRENDUCBwYWNrZXQgcGF5bG9hZCBzaXplIGluIGJ5dGVzCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjY2lkM19oY190eF91cGRhdGVfcyhzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAqaGN0eCwgaW50IGxlbikKIHsKQEAgLTE3OCw2ICsxNjIsMzMgQEAKIAkgKi8KIH0KIAorLyoKKyAqCVVwZGF0ZSBXaW5kb3cgQ291bnRlciB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW1JGQyA0MzQyLCA4LjFdLgorICoJVGhlIGFsZ29yaXRobSBpcyBub3QgYXBwbGljYWJsZSBpZiBSVFQgPCA0IG1pY3Jvc2Vjb25kcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNjaWQzX2hjX3R4X3VwZGF0ZV93aW5fY291bnQoc3RydWN0IGNjaWQzX2hjX3R4X3NvY2sgKmhjdHgsCisJCQkJCQlzdHJ1Y3QgdGltZXZhbCAqbm93KQoreworCXN1c2Vjb25kc190IGRlbHRhOworCXUzMiBxdWFydGVyX3J0dHM7CisKKwlpZiAodW5saWtlbHkoaGN0eC0+Y2NpZDNoY3R4X3J0dCA8IDQpKQkvKiBhdm9pZCBkaXZpZGUtYnktemVybyAqLworCQlyZXR1cm47CisKKwlkZWx0YSA9IHRpbWV2YWxfZGVsdGEobm93LCAmaGN0eC0+Y2NpZDNoY3R4X3RfbGFzdF93aW5fY291bnQpOworCURDQ1BfQlVHX09OKGRlbHRhIDwgMCk7CisKKwlxdWFydGVyX3J0dHMgPSAodTMyKWRlbHRhIC8gKGhjdHgtPmNjaWQzaGN0eF9ydHQgLyA0KTsKKworCWlmIChxdWFydGVyX3J0dHMgPiAwKSB7CisJCWhjdHgtPmNjaWQzaGN0eF90X2xhc3Rfd2luX2NvdW50ID0gKm5vdzsKKwkJaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50CSs9IG1pbl90KHUzMiwgcXVhcnRlcl9ydHRzLCA1KTsKKwkJaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50CSY9IDB4RjsJCS8qIG1vZCAxNiAqLworCisJCWNjaWQzX3ByX2RlYnVnKCJub3cgYXQgJSNYXG4iLCBoY3R4LT5jY2lkM2hjdHhfbGFzdF93aW5fY291bnQpOworCX0KK30KKwogc3RhdGljIHZvaWQgY2NpZDNfaGNfdHhfbm9fZmVlZGJhY2tfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWRhdGE7CkBAIC0xOTEsMjAgKzIwMiwyMCBAQAogCQlnb3RvIHJlc3RhcnRfdGltZXI7CiAJfQogCi0JY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgc3RhdGU9JXNcbiIsIGRjY3Bfcm9sZShzayksIHNrLAorCWNjaWQzX3ByX2RlYnVnKCIlcyglcCwgc3RhdGU9JXMpIC0gZW50cnkgXG4iLCBkY2NwX3JvbGUoc2spLCBzaywKIAkJICAgICAgIGNjaWQzX3R4X3N0YXRlX25hbWUoaGN0eC0+Y2NpZDNoY3R4X3N0YXRlKSk7Ci0JCisKIAlzd2l0Y2ggKGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSkgewogCWNhc2UgVEZSQ19TU1RBVEVfTk9fRkJBQ0s6CiAJCS8qIFJGQyAzNDQ4LCA0LjQ6IEhhbHZlIHNlbmQgcmF0ZSBkaXJlY3RseSAqLwotCQloY3R4LT5jY2lkM2hjdHhfeCA9IG1pbl90KHUzMiwgaGN0eC0+Y2NpZDNoY3R4X3ggLyAyLAotCQkJCQkgICAgICAgaGN0eC0+Y2NpZDNoY3R4X3MgLyBURlJDX1RfTUJJKTsKKwkJaGN0eC0+Y2NpZDNoY3R4X3ggPSBtYXgoaGN0eC0+Y2NpZDNoY3R4X3ggLyAyLAorCQkJCQkoKChfX3U2NCloY3R4LT5jY2lkM2hjdHhfcykgPDwgNikgLworCQkJCQkJCQkgICAgVEZSQ19UX01CSSk7CiAKLQkJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgc3RhdGU9JXMsIHVwZGF0ZWQgdHggcmF0ZSB0byAlZCAiCi0JCQkgICAgICAgImJ5dGVzL3NcbiIsCi0JCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2ssCisJCWNjaWQzX3ByX2RlYnVnKCIlcyglcCwgc3RhdGU9JXMpLCB1cGRhdGVkIHR4IHJhdGUgdG8gJXUgIgorCQkJICAgICAgICJieXRlcy9zXG4iLCBkY2NwX3JvbGUoc2spLCBzaywKIAkJCSAgICAgICBjY2lkM190eF9zdGF0ZV9uYW1lKGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSksCi0JCQkgICAgICAgaGN0eC0+Y2NpZDNoY3R4X3gpOworCQkJICAgICAgICh1bnNpZ25lZCkoaGN0eC0+Y2NpZDNoY3R4X3ggPj4gNikpOwogCQkvKiBUaGUgdmFsdWUgb2YgUiBpcyBzdGlsbCB1bmRlZmluZWQgYW5kIHNvIHdlIGNhbiBub3QgcmVjb21wdXRlCiAJCSAqIHRoZSB0aW1vdXQgdmFsdWUuIEtlZXAgaW5pdGlhbCB2YWx1ZSBhcyBwZXIgW1JGQyA0MzQyLCA1XS4gKi8KIAkJdF9uZmIgPSBURlJDX0lOSVRJQUxfVElNRU9VVDsKQEAgLTIxMywzNCArMjI0LDQ2IEBACiAJY2FzZSBURlJDX1NTVEFURV9GQkFDSzoKIAkJLyoKIAkJICogQ2hlY2sgaWYgSURMRSBzaW5jZSBsYXN0IHRpbWVvdXQgYW5kIHJlY3YgcmF0ZSBpcyBsZXNzIHRoYW4KLQkJICogNCBwYWNrZXRzIHBlciBSVFQKKwkJICogNCBwYWNrZXRzIChpbiB1bml0cyBvZiA2NCpieXRlcy9zZWMpIHBlciBSVFQKIAkJICovCiAJCWlmICghaGN0eC0+Y2NpZDNoY3R4X2lkbGUgfHwKLQkJICAgIChoY3R4LT5jY2lkM2hjdHhfeF9yZWN2ID49Ci0JCSAgICAgNCAqIHVzZWNzX2RpdihoY3R4LT5jY2lkM2hjdHhfcywgaGN0eC0+Y2NpZDNoY3R4X3J0dCkpKSB7CisJCSAgICAoaGN0eC0+Y2NpZDNoY3R4X3hfcmVjdiA+PSA0ICoKKwkJICAgICBzY2FsZWRfZGl2KCgoX191NjQpaGN0eC0+Y2NpZDNoY3R4X3MpIDw8IDYsCisJCQkJaGN0eC0+Y2NpZDNoY3R4X3J0dCkpKSB7CiAJCQlzdHJ1Y3QgdGltZXZhbCBub3c7CiAKLQkJCWNjaWQzX3ByX2RlYnVnKCIlcywgc2s9JXAsIHN0YXRlPSVzLCBub3QgaWRsZVxuIiwKKwkJCWNjaWQzX3ByX2RlYnVnKCIlcyglcCwgc3RhdGU9JXMpLCBub3QgaWRsZVxuIiwKIAkJCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2ssCi0JCQkJICAgICAgIGNjaWQzX3R4X3N0YXRlX25hbWUoaGN0eC0+Y2NpZDNoY3R4X3N0YXRlKSk7Ci0JCQkvKiBIYWx2ZSBzZW5kaW5nIHJhdGUgKi8KKwkJCQkgICBjY2lkM190eF9zdGF0ZV9uYW1lKGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSkpOwogCi0JCQkvKiAgSWYgKHAgPT0gMCB8fCBYX2NhbGMgPiAyICogWF9yZWN2KQorCQkJLyoKKwkJCSAqICBNb2RpZnkgdGhlIGNhY2hlZCB2YWx1ZSBvZiBYX3JlY3YgW1JGQyAzNDQ4LCA0LjRdCisJCQkgKgorCQkJICogIElmIChwID09IDAgfHwgWF9jYWxjID4gMiAqIFhfcmVjdikKIAkJCSAqICAgIFhfcmVjdiA9IG1heChYX3JlY3YgLyAyLCBzIC8gKDIgKiB0X21iaSkpOwogCQkJICogIEVsc2UKIAkJCSAqICAgIFhfcmVjdiA9IFhfY2FsYyAvIDQ7CisJCQkgKgorCQkJICogIE5vdGUgdGhhdCBYX3JlY3YgaXMgc2NhbGVkIGJ5IDJeNiB3aGlsZSBYX2NhbGMgaXMgbm90CiAJCQkgKi8KIAkJCUJVR19PTihoY3R4LT5jY2lkM2hjdHhfcCAmJiAhaGN0eC0+Y2NpZDNoY3R4X3hfY2FsYyk7CiAKIAkJCWlmIChoY3R4LT5jY2lkM2hjdHhfcCAgPT0gMCB8fAotCQkJICAgIGhjdHgtPmNjaWQzaGN0eF94X2NhbGMgPiAyICogaGN0eC0+Y2NpZDNoY3R4X3hfcmVjdikKLQkJCQloY3R4LT5jY2lkM2hjdHhfeF9yZWN2ID0gbWF4X3QodTMyLCBoY3R4LT5jY2lkM2hjdHhfeF9yZWN2IC8gMiwKLQkJCQkJCQkJICAgIGhjdHgtPmNjaWQzaGN0eF9zIC8gKDIgKiBURlJDX1RfTUJJKSk7Ci0JCQllbHNlCi0JCQkJaGN0eC0+Y2NpZDNoY3R4X3hfcmVjdiA9IGhjdHgtPmNjaWQzaGN0eF94X2NhbGMgLyA0OworCQkJICAgIChoY3R4LT5jY2lkM2hjdHhfeF9jYWxjID4KKwkJCSAgICAgKGhjdHgtPmNjaWQzaGN0eF94X3JlY3YgPj4gNSkpKSB7CiAKLQkJCS8qIFVwZGF0ZSBzZW5kaW5nIHJhdGUgKi8KLQkJCWRjY3BfdGltZXN0YW1wKHNrLCAmbm93KTsKKwkJCQloY3R4LT5jY2lkM2hjdHhfeF9yZWN2ID0KKwkJCQkJbWF4KGhjdHgtPmNjaWQzaGN0eF94X3JlY3YgLyAyLAorCQkJCQkgICAgKCgoX191NjQpaGN0eC0+Y2NpZDNoY3R4X3MpIDw8IDYpIC8KKwkJCQkJCQkgICgyICogVEZSQ19UX01CSSkpOworCisJCQkJaWYgKGhjdHgtPmNjaWQzaGN0eF9wID09IDApCisJCQkJCWRjY3BfdGltZXN0YW1wKHNrLCAmbm93KTsKKwkJCX0gZWxzZSB7CisJCQkJaGN0eC0+Y2NpZDNoY3R4X3hfcmVjdiA9IGhjdHgtPmNjaWQzaGN0eF94X2NhbGM7CisJCQkJaGN0eC0+Y2NpZDNoY3R4X3hfcmVjdiA8PD0gNDsKKwkJCX0KKwkJCS8qIE5vdyByZWNhbGN1bGF0ZSBYIFtSRkMgMzQ0OCwgNC4zLCBzdGVwICg0KV0gKi8KIAkJCWNjaWQzX2hjX3R4X3VwZGF0ZV94KHNrLCAmbm93KTsKIAkJfQogCQkvKgpAQCAtMjUxLDcgKzI3NCw3IEBACiAJCXRfbmZiID0gbWF4KGhjdHgtPmNjaWQzaGN0eF90X3J0bywgMiAqIGhjdHgtPmNjaWQzaGN0eF90X2lwaSk7CiAJCWJyZWFrOwogCWNhc2UgVEZSQ19TU1RBVEVfTk9fU0VOVDoKLQkJRENDUF9CVUcoIklsbGVnYWwgJXMgc3RhdGUgTk9fU0VOVCwgc2s9JXAiLCBkY2NwX3JvbGUoc2spLCBzayk7CisJCURDQ1BfQlVHKCIlcyglcCkgLSBJbGxlZ2FsIHN0YXRlIE5PX1NFTlQiLCBkY2NwX3JvbGUoc2spLCBzayk7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgVEZSQ19TU1RBVEVfVEVSTToKIAkJZ290byBvdXQ7CkBAIC0yNzcsOSArMzAwLDggQEAKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4ID0gY2NpZDNfaGNfdHhfc2soc2spOwotCXN0cnVjdCBkY2NwX3R4X2hpc3RfZW50cnkgKm5ld19wYWNrZXQ7CiAJc3RydWN0IHRpbWV2YWwgbm93OwotCWxvbmcgZGVsYXk7CisJc3VzZWNvbmRzX3QgZGVsYXk7CiAKIAlCVUdfT04oaGN0eCA9PSBOVUxMKTsKIApAQCAtMjkxLDM0ICszMTMsMjEgQEAKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPT0gMCkpCiAJCXJldHVybiAtRUJBRE1TRzsKIAotCS8qIFNlZSBpZiBsYXN0IHBhY2tldCBhbGxvY2F0ZWQgd2FzIG5vdCBzZW50ICovCi0JbmV3X3BhY2tldCA9IGRjY3BfdHhfaGlzdF9oZWFkKCZoY3R4LT5jY2lkM2hjdHhfaGlzdCk7Ci0JaWYgKG5ld19wYWNrZXQgPT0gTlVMTCB8fCBuZXdfcGFja2V0LT5kY2NwaHR4X3NlbnQpIHsKLQkJbmV3X3BhY2tldCA9IGRjY3BfdHhfaGlzdF9lbnRyeV9uZXcoY2NpZDNfdHhfaGlzdCwKLQkJCQkJCSAgICBHRlBfQVRPTUlDKTsKLQotCQlpZiAodW5saWtlbHkobmV3X3BhY2tldCA9PSBOVUxMKSkgewotCQkJRENDUF9XQVJOKCIlcywgc2s9JXAsIG5vdCBlbm91Z2ggbWVtIHRvIGFkZCB0byBoaXN0b3J5LCIKLQkJCQkgICJzZW5kIHJlZnVzZWRcbiIsIGRjY3Bfcm9sZShzayksIHNrKTsKLQkJCXJldHVybiAtRU5PQlVGUzsKLQkJfQotCi0JCWRjY3BfdHhfaGlzdF9hZGRfZW50cnkoJmhjdHgtPmNjaWQzaGN0eF9oaXN0LCBuZXdfcGFja2V0KTsKLQl9Ci0KIAlkY2NwX3RpbWVzdGFtcChzaywgJm5vdyk7CiAKIAlzd2l0Y2ggKGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSkgewogCWNhc2UgVEZSQ19TU1RBVEVfTk9fU0VOVDoKIAkJc2tfcmVzZXRfdGltZXIoc2ssICZoY3R4LT5jY2lkM2hjdHhfbm9fZmVlZGJhY2tfdGltZXIsCi0JCQkgICAgICAgamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoVEZSQ19JTklUSUFMX1RJTUVPVVQpKTsKKwkJCSAgICAgICAoamlmZmllcyArCisJCQkgICAgICAgIHVzZWNzX3RvX2ppZmZpZXMoVEZSQ19JTklUSUFMX1RJTUVPVVQpKSk7CiAJCWhjdHgtPmNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudAkgPSAwOwogCQloY3R4LT5jY2lkM2hjdHhfdF9sYXN0X3dpbl9jb3VudCA9IG5vdzsKIAkJY2NpZDNfaGNfdHhfc2V0X3N0YXRlKHNrLCBURlJDX1NTVEFURV9OT19GQkFDSyk7CiAKLQkJLyogU2V0IGluaXRpYWwgc2VuZGluZyByYXRlIHRvIDEgcGFja2V0IHBlciBzZWNvbmQgKi8KKwkJLyogU2V0IGluaXRpYWwgc2VuZGluZyByYXRlIFgvcyB0byAxcHBzIChYIGlzIHNjYWxlZCBieSAyXjYpICovCiAJCWNjaWQzX2hjX3R4X3VwZGF0ZV9zKGhjdHgsIHNrYi0+bGVuKTsKLQkJaGN0eC0+Y2NpZDNoY3R4X3ggICAgID0gaGN0eC0+Y2NpZDNoY3R4X3M7CisJCWhjdHgtPmNjaWQzaGN0eF94ID0gaGN0eC0+Y2NpZDNoY3R4X3M7CisJCWhjdHgtPmNjaWQzaGN0eF94IDw8PSA2OwogCiAJCS8qIEZpcnN0IHRpbWVvdXQsIGFjY29yZGluZyB0byBbUkZDIDM0NDgsIDQuMl0sIGlzIDEgc2Vjb25kICovCiAJCWhjdHgtPmNjaWQzaGN0eF90X2lwaSA9IFVTRUNfUEVSX1NFQzsKQEAgLTMzMiw3NyArMzQxLDU3IEBACiAJY2FzZSBURlJDX1NTVEFURV9GQkFDSzoKIAkJZGVsYXkgPSB0aW1ldmFsX2RlbHRhKCZoY3R4LT5jY2lkM2hjdHhfdF9ub20sICZub3cpOwogCQkvKgotCQkgKiAJU2NoZWR1bGluZyBvZiBwYWNrZXQgdHJhbnNtaXNzaW9ucyBbUkZDIDM0NDgsIDQuNl0KKwkJICoJU2NoZWR1bGluZyBvZiBwYWNrZXQgdHJhbnNtaXNzaW9ucyBbUkZDIDM0NDgsIDQuNl0KIAkJICoKIAkJICogaWYgKHRfbm93ID4gdF9ub20gLSBkZWx0YSkKIAkJICogICAgICAgLy8gc2VuZCB0aGUgcGFja2V0IG5vdwogCQkgKiBlbHNlCiAJCSAqICAgICAgIC8vIHNlbmQgdGhlIHBhY2tldCBpbiAodF9ub20gLSB0X25vdykgbWlsbGlzZWNvbmRzLgogCQkgKi8KLQkJaWYgKGRlbGF5IC0gKGxvbmcpaGN0eC0+Y2NpZDNoY3R4X2RlbHRhID49IDApCisJCWlmIChkZWxheSAtIChzdXNlY29uZHNfdCloY3R4LT5jY2lkM2hjdHhfZGVsdGEgPj0gMCkKIAkJCXJldHVybiBkZWxheSAvIDEwMDBMOworCisJCWNjaWQzX2hjX3R4X3VwZGF0ZV93aW5fY291bnQoaGN0eCwgJm5vdyk7CiAJCWJyZWFrOwogCWNhc2UgVEZSQ19TU1RBVEVfVEVSTToKLQkJRENDUF9CVUcoIklsbGVnYWwgJXMgc3RhdGUgVEVSTSwgc2s9JXAiLCBkY2NwX3JvbGUoc2spLCBzayk7CisJCURDQ1BfQlVHKCIlcyglcCkgLSBJbGxlZ2FsIHN0YXRlIFRFUk0iLCBkY2NwX3JvbGUoc2spLCBzayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIHByZXBhcmUgdG8gc2VuZCBub3cgKGFkZCBvcHRpb25zIGV0Yy4pICovCiAJZHAtPmRjY3BzX2hjX3R4X2luc2VydF9vcHRpb25zID0gMTsKLQluZXdfcGFja2V0LT5kY2NwaHR4X2NjdmFsID0gRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfY2N2YWwgPQotCQkJCSAgICBoY3R4LT5jY2lkM2hjdHhfbGFzdF93aW5fY291bnQ7CisJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfY2N2YWwgPSBoY3R4LT5jY2lkM2hjdHhfbGFzdF93aW5fY291bnQ7CisKKwkvKiBzZXQgdGhlIG5vbWluYWwgc2VuZCB0aW1lIGZvciB0aGUgbmV4dCBmb2xsb3dpbmcgcGFja2V0ICovCiAJdGltZXZhbF9hZGRfdXNlY3MoJmhjdHgtPmNjaWQzaGN0eF90X25vbSwgaGN0eC0+Y2NpZDNoY3R4X3RfaXBpKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjY2lkM19oY190eF9wYWNrZXRfc2VudChzdHJ1Y3Qgc29jayAqc2ssIGludCBtb3JlLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgY2NpZDNfaGNfdHhfcGFja2V0X3NlbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbW9yZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IGxlbikKIHsKLQljb25zdCBzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4ID0gY2NpZDNfaGNfdHhfc2soc2spOwogCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQl1bnNpZ25lZCBsb25nIHF1YXJ0ZXJfcnR0OwogCXN0cnVjdCBkY2NwX3R4X2hpc3RfZW50cnkgKnBhY2tldDsKIAogCUJVR19PTihoY3R4ID09IE5VTEwpOwogCi0JZGNjcF90aW1lc3RhbXAoc2ssICZub3cpOwotCiAJY2NpZDNfaGNfdHhfdXBkYXRlX3MoaGN0eCwgbGVuKTsKIAotCXBhY2tldCA9IGRjY3BfdHhfaGlzdF9oZWFkKCZoY3R4LT5jY2lkM2hjdHhfaGlzdCk7CisJcGFja2V0ID0gZGNjcF90eF9oaXN0X2VudHJ5X25ldyhjY2lkM190eF9oaXN0LCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkocGFja2V0ID09IE5VTEwpKSB7Ci0JCURDQ1BfV0FSTigicGFja2V0IGRvZXNuJ3QgZXhpc3QgaW4gaGlzdG9yeSFcbiIpOworCQlEQ0NQX0NSSVQoInBhY2tldCBoaXN0b3J5IC0gb3V0IG9mIG1lbW9yeSEiKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAodW5saWtlbHkocGFja2V0LT5kY2NwaHR4X3NlbnQpKSB7Ci0JCURDQ1BfV0FSTigibm8gdW5zZW50IHBhY2tldCBpbiBoaXN0b3J5IVxuIik7Ci0JCXJldHVybjsKLQl9CisJZGNjcF90eF9oaXN0X2FkZF9lbnRyeSgmaGN0eC0+Y2NpZDNoY3R4X2hpc3QsIHBhY2tldCk7CisKKwlkY2NwX3RpbWVzdGFtcChzaywgJm5vdyk7CiAJcGFja2V0LT5kY2NwaHR4X3RzdGFtcCA9IG5vdzsKLQlwYWNrZXQtPmRjY3BodHhfc2Vxbm8gID0gZHAtPmRjY3BzX2dzczsKLQkvKgotCSAqIENoZWNrIGlmIHdpbl9jb3VudCBoYXZlIGNoYW5nZWQKLQkgKiBBbGdvcml0aG0gaW4gIjguMS4gV2luZG93IENvdW50ZXIgVmFsdWUiIGluIFJGQyA0MzQyLgotCSAqLwotCXF1YXJ0ZXJfcnR0ID0gdGltZXZhbF9kZWx0YSgmbm93LCAmaGN0eC0+Y2NpZDNoY3R4X3RfbGFzdF93aW5fY291bnQpOwotCWlmIChsaWtlbHkoaGN0eC0+Y2NpZDNoY3R4X3J0dCA+IDgpKQotCQlxdWFydGVyX3J0dCAvPSBoY3R4LT5jY2lkM2hjdHhfcnR0IC8gNDsKLQotCWlmIChxdWFydGVyX3J0dCA+IDApIHsKLQkJaGN0eC0+Y2NpZDNoY3R4X3RfbGFzdF93aW5fY291bnQgPSBub3c7Ci0JCWhjdHgtPmNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudAkgPSAoaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50ICsKLQkJCQkJCSAgICBtaW5fdCh1bnNpZ25lZCBsb25nLCBxdWFydGVyX3J0dCwgNSkpICUgMTY7Ci0JCWNjaWQzX3ByX2RlYnVnKCIlcywgc2s9JXAsIHdpbmRvdyBjaGFuZ2VkIGZyb20gIgotCQkJICAgICAgICIldSB0byAldSFcbiIsCi0JCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2ssCi0JCQkgICAgICAgcGFja2V0LT5kY2NwaHR4X2NjdmFsLAotCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudCk7Ci0JfQotCi0JaGN0eC0+Y2NpZDNoY3R4X2lkbGUgPSAwOwotCXBhY2tldC0+ZGNjcGh0eF9ydHQgID0gaGN0eC0+Y2NpZDNoY3R4X3J0dDsKLQlwYWNrZXQtPmRjY3BodHhfc2VudCA9IDE7CisJcGFja2V0LT5kY2NwaHR4X3NlcW5vICA9IGRjY3Bfc2soc2spLT5kY2Nwc19nc3M7CisJcGFja2V0LT5kY2NwaHR4X3J0dCAgICA9IGhjdHgtPmNjaWQzaGN0eF9ydHQ7CisJcGFja2V0LT5kY2NwaHR4X3NlbnQgICA9IDE7CisJaGN0eC0+Y2NpZDNoY3R4X2lkbGUgICA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNjaWQzX2hjX3R4X3BhY2tldF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTQxNCw3ICs0MDMsNyBAQAogCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAl1bnNpZ25lZCBsb25nIHRfbmZiOwogCXUzMiBwaW52OwotCWxvbmcgcl9zYW1wbGUsIHRfZWxhcHNlZDsKKwlzdXNlY29uZHNfdCByX3NhbXBsZSwgdF9lbGFwc2VkOwogCiAJQlVHX09OKGhjdHggPT0gTlVMTCk7CiAKQEAgLTQzMCw0NCArNDE5LDQ0IEBACiAJY2FzZSBURlJDX1NTVEFURV9GQkFDSzoKIAkJLyogZ2V0IHBhY2tldCBmcm9tIGhpc3RvcnkgdG8gbG9vayB1cCB0X3JlY3ZkYXRhICovCiAJCXBhY2tldCA9IGRjY3BfdHhfaGlzdF9maW5kX2VudHJ5KCZoY3R4LT5jY2lkM2hjdHhfaGlzdCwKLQkJCQkJCSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxKTsKKwkJCQkJICAgICAgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSk7CiAJCWlmICh1bmxpa2VseShwYWNrZXQgPT0gTlVMTCkpIHsKIAkJCURDQ1BfV0FSTigiJXMoJXApLCBzZXFubyAlbGx1KCVzKSBkb2Vzbid0IGV4aXN0ICIKIAkJCQkgICJpbiBoaXN0b3J5IVxuIiwgIGRjY3Bfcm9sZShzayksIHNrLAogCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSwKLQkJCQkgIGRjY3BfcGFja2V0X25hbWUoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSkpOworCQkJCWRjY3BfcGFja2V0X25hbWUoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSkpOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJLyogVXBkYXRlIHJlY2VpdmUgcmF0ZSAqLworCQkvKiBVcGRhdGUgcmVjZWl2ZSByYXRlIGluIHVuaXRzIG9mIDY0ICogYnl0ZXMvc2Vjb25kICovCiAJCWhjdHgtPmNjaWQzaGN0eF94X3JlY3YgPSBvcHRfcmVjdi0+Y2NpZDNvcl9yZWNlaXZlX3JhdGU7CisJCWhjdHgtPmNjaWQzaGN0eF94X3JlY3YgPDw9IDY7CiAKIAkJLyogVXBkYXRlIGxvc3MgZXZlbnQgcmF0ZSAqLwogCQlwaW52ID0gb3B0X3JlY3YtPmNjaWQzb3JfbG9zc19ldmVudF9yYXRlOwotCQlpZiAocGludiA9PSB+MFUgfHwgcGludiA9PSAwKQorCQlpZiAocGludiA9PSB+MFUgfHwgcGludiA9PSAwKQkgICAgICAgLyogc2VlIFJGQyA0MzQyLCA4LjUgICAqLwogCQkJaGN0eC0+Y2NpZDNoY3R4X3AgPSAwOwotCQllbHNlCi0gCQkJaGN0eC0+Y2NpZDNoY3R4X3AgPSAxMDAwMDAwIC8gcGludjsKKwkJZWxzZQkJCQkgICAgICAgLyogY2FuIG5vdCBleGNlZWQgMTAwJSAqLworCQkJaGN0eC0+Y2NpZDNoY3R4X3AgPSAxMDAwMDAwIC8gcGludjsKIAogCQlkY2NwX3RpbWVzdGFtcChzaywgJm5vdyk7CiAKIAkJLyoKIAkJICogQ2FsY3VsYXRlIG5ldyByb3VuZCB0cmlwIHNhbXBsZSBhcyBwZXIgW1JGQyAzNDQ4LCA0LjNdIGJ5Ci0JCSAqIAlSX3NhbXBsZSAgPSAgKG5vdyAtIHRfcmVjdmRhdGEpIC0gdF9lbGFwc2VkCisJCSAqCVJfc2FtcGxlICA9ICAobm93IC0gdF9yZWN2ZGF0YSkgLSB0X2VsYXBzZWQKIAkJICovCiAJCXJfc2FtcGxlICA9IHRpbWV2YWxfZGVsdGEoJm5vdywgJnBhY2tldC0+ZGNjcGh0eF90c3RhbXApOwogCQl0X2VsYXBzZWQgPSBkcC0+ZGNjcHNfb3B0aW9uc19yZWNlaXZlZC5kY2Nwb3JfZWxhcHNlZF90aW1lICogMTA7CiAKLQkJaWYgKHVubGlrZWx5KHJfc2FtcGxlIDw9IDApKSB7Ci0JCQlEQ0NQX1dBUk4oIldBUk5JTkc6IFJfc2FtcGxlICglbGQpIDw9IDAhXG4iLCByX3NhbXBsZSk7Ci0JCQlyX3NhbXBsZSA9IDA7Ci0JCX0gZWxzZSBpZiAodW5saWtlbHkocl9zYW1wbGUgPD0gdF9lbGFwc2VkKSkKLQkJCURDQ1BfV0FSTigiV0FSTklORzogcl9zYW1wbGU9JWxkdXMgPD0gdF9lbGFwc2VkPSVsZHVzXG4iLAotCQkJCSAgcl9zYW1wbGUsIHRfZWxhcHNlZCk7CisJCURDQ1BfQlVHX09OKHJfc2FtcGxlIDwgMCk7CisJCWlmICh1bmxpa2VseShyX3NhbXBsZSA8PSB0X2VsYXBzZWQpKQorCQkJRENDUF9XQVJOKCJXQVJOSU5HOiByX3NhbXBsZT0lZHVzIDw9IHRfZWxhcHNlZD0lZHVzXG4iLAorCQkJCSAgKGludClyX3NhbXBsZSwgKGludCl0X2VsYXBzZWQpOwogCQllbHNlCiAJCQlyX3NhbXBsZSAtPSB0X2VsYXBzZWQ7CisJCUNDSUQzX1JUVF9TQU5JVFlfQ0hFQ0socl9zYW1wbGUpOwogCi0JCS8qIFVwZGF0ZSBSVFQgZXN0aW1hdGUgYnkgCisJCS8qIFVwZGF0ZSBSVFQgZXN0aW1hdGUgYnkKIAkJICogSWYgKE5vIGZlZWRiYWNrIHJlY3YpCiAJCSAqICAgIFIgPSBSX3NhbXBsZTsKIAkJICogRWxzZQpAQCAtNDc2LDM0ICs0NjUsNDUgQEAKIAkJICogcSBpcyBhIGNvbnN0YW50LCBSRkMgMzQ0OCByZWNvbW1lbnRzIDAuOQogCQkgKi8KIAkJaWYgKGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSA9PSBURlJDX1NTVEFURV9OT19GQkFDSykgewotCQkJLyogVXNlIExhcmdlciBJbml0aWFsIFdpbmRvd3MgW1JGQyA0MzQyLCBzZWMuIDVdCi0JCQkgKiBXZSBkZXZpYXRlIGluIHRoYXQgd2UgdXNlIGBzJyBpbnN0ZWFkIG9mIGBNU1MnLiAqLwotCQkJdTE2IHdfaW5pdCA9IG1heCggICAgNCAqIGhjdHgtPmNjaWQzaGN0eF9zLAotCQkJCQkgbWF4KDIgKiBoY3R4LT5jY2lkM2hjdHhfcywgNDM4MCkpOworCQkJLyoKKwkJCSAqIExhcmdlciBJbml0aWFsIFdpbmRvd3MgW1JGQyA0MzQyLCBzZWMuIDVdCisJCQkgKiBXZSBkZXZpYXRlIGluIHRoYXQgd2UgdXNlIGBzJyBpbnN0ZWFkIG9mIGBNU1MnLgorCQkJICovCisJCQlfX3U2NCB3X2luaXQgPSBtaW4oNCAqIGhjdHgtPmNjaWQzaGN0eF9zLAorCQkJCQkgICBtYXgoMiAqIGhjdHgtPmNjaWQzaGN0eF9zLCA0MzgwKSk7CiAJCQloY3R4LT5jY2lkM2hjdHhfcnR0ICA9IHJfc2FtcGxlOwotCQkJaGN0eC0+Y2NpZDNoY3R4X3ggICAgPSB1c2Vjc19kaXYod19pbml0LCByX3NhbXBsZSk7CisJCQloY3R4LT5jY2lkM2hjdHhfeCAgICA9IHNjYWxlZF9kaXYod19pbml0IDw8IDYsIHJfc2FtcGxlKTsKIAkJCWhjdHgtPmNjaWQzaGN0eF90X2xkID0gbm93OwogCiAJCQljY2lkM191cGRhdGVfc2VuZF90aW1lKGhjdHgpOwogCi0JCQljY2lkM19wcl9kZWJ1ZygiJXMoJXApLCBzPSV1LCB3X2luaXQ9JXUsICIKLQkJCQkgICAgICAgIlJfc2FtcGxlPSVsZHVzLCBYPSV1XG4iLCBkY2NwX3JvbGUoc2spLAotCQkJCSAgICAgICBzaywgaGN0eC0+Y2NpZDNoY3R4X3MsIHdfaW5pdCwgcl9zYW1wbGUsCi0JCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF94KTsKKwkJCWNjaWQzX3ByX2RlYnVnKCIlcyglcCksIHM9JXUsIHdfaW5pdD0lbGx1LCAiCisJCQkJICAgICAgICJSX3NhbXBsZT0lZHVzLCBYPSV1XG4iLCBkY2NwX3JvbGUoc2spLAorCQkJCSAgICAgICBzaywgaGN0eC0+Y2NpZDNoY3R4X3MsIHdfaW5pdCwKKwkJCQkgICAgICAgKGludClyX3NhbXBsZSwKKwkJCQkgICAgICAgKHVuc2lnbmVkKShoY3R4LT5jY2lkM2hjdHhfeCA+PiA2KSk7CiAKIAkJCWNjaWQzX2hjX3R4X3NldF9zdGF0ZShzaywgVEZSQ19TU1RBVEVfRkJBQ0spOwogCQl9IGVsc2UgewogCQkJaGN0eC0+Y2NpZDNoY3R4X3J0dCA9ICg5ICogaGN0eC0+Y2NpZDNoY3R4X3J0dCArCi0JCQkJCSAgICAgICAgICAgKHUzMilyX3NhbXBsZSAgICAgICAgKSAvIDEwOworCQkJCQkgICAgICAgICAgICh1MzIpcl9zYW1wbGUpIC8gMTA7CiAKKwkJCS8qIFVwZGF0ZSBzZW5kaW5nIHJhdGUgKHN0ZXAgNCBvZiBbUkZDIDM0NDgsIDQuM10pICovCisJCQlpZiAoaGN0eC0+Y2NpZDNoY3R4X3AgPiAwKQorCQkJCWhjdHgtPmNjaWQzaGN0eF94X2NhbGMgPQorCQkJCQl0ZnJjX2NhbGNfeChoY3R4LT5jY2lkM2hjdHhfcywKKwkJCQkJCSAgICBoY3R4LT5jY2lkM2hjdHhfcnR0LAorCQkJCQkJICAgIGhjdHgtPmNjaWQzaGN0eF9wKTsKIAkJCWNjaWQzX2hjX3R4X3VwZGF0ZV94KHNrLCAmbm93KTsKIAotCQkJY2NpZDNfcHJfZGVidWcoIiVzKCVwKSwgUlRUPSV1dXMgKHNhbXBsZT0lbGR1cyksIHM9JXUsICIKLQkJCQkgICAgICAgInA9JXUsIFhfY2FsYz0ldSwgWD0ldVxuIiwgZGNjcF9yb2xlKHNrKSwKLQkJCQkgICAgICAgc2ssIGhjdHgtPmNjaWQzaGN0eF9ydHQsIHJfc2FtcGxlLAorCQkJY2NpZDNfcHJfZGVidWcoIiVzKCVwKSwgUlRUPSV1dXMgKHNhbXBsZT0lZHVzKSwgcz0ldSwgIgorCQkJCSAgICAgICAicD0ldSwgWF9jYWxjPSV1LCBYX3JlY3Y9JXUsIFg9JXVcbiIsCisJCQkJICAgICAgIGRjY3Bfcm9sZShzayksCisJCQkJICAgICAgIHNrLCBoY3R4LT5jY2lkM2hjdHhfcnR0LCAoaW50KXJfc2FtcGxlLAogCQkJCSAgICAgICBoY3R4LT5jY2lkM2hjdHhfcywgaGN0eC0+Y2NpZDNoY3R4X3AsCiAJCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF94X2NhbGMsCi0JCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF94KTsKKwkJCQkgICAgICAgKHVuc2lnbmVkKShoY3R4LT5jY2lkM2hjdHhfeF9yZWN2ID4+IDYpLAorCQkJCSAgICAgICAodW5zaWduZWQpKGhjdHgtPmNjaWQzaGN0eF94ID4+IDYpKTsKIAkJfQogCiAJCS8qIHVuc2NoZWR1bGUgbm8gZmVlZGJhY2sgdGltZXIgKi8KQEAgLTUxMyw1NyArNTEzLDQ4IEBACiAJCWRjY3BfdHhfaGlzdF9wdXJnZV9vbGRlcihjY2lkM190eF9oaXN0LAogCQkJCQkgJmhjdHgtPmNjaWQzaGN0eF9oaXN0LCBwYWNrZXQpOwogCQkvKgotCQkgKiBBcyB3ZSBoYXZlIGNhbGN1bGF0ZWQgbmV3IGlwaSwgZGVsdGEsIHRfbm9tIGl0IGlzIHBvc3NpYmxlIHRoYXQKLQkJICogd2Ugbm93IGNhbiBzZW5kIGEgcGFja2V0LCBzbyB3YWtlIHVwIGRjY3Bfd2FpdF9mb3JfY2NpZAorCQkgKiBBcyB3ZSBoYXZlIGNhbGN1bGF0ZWQgbmV3IGlwaSwgZGVsdGEsIHRfbm9tIGl0IGlzIHBvc3NpYmxlCisJCSAqIHRoYXQgd2Ugbm93IGNhbiBzZW5kIGEgcGFja2V0LCBzbyB3YWtlIHVwIGRjY3Bfd2FpdF9mb3JfY2NpZAogCQkgKi8KIAkJc2stPnNrX3dyaXRlX3NwYWNlKHNrKTsKIAogCQkvKgogCQkgKiBVcGRhdGUgdGltZW91dCBpbnRlcnZhbCBmb3IgdGhlIG5vZmVlZGJhY2sgdGltZXIuCiAJCSAqIFdlIHVzZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGluY3JlYXNlIHRoZSBsb3dlciBib3VuZC4KLQkJICogVGhpcyBjYW4gaGVscCBhdm9pZCB0cmlnZ2VyaW5nIHRoZSBub2ZlZWRiYWNrIHRpbWVyIHRvbyBvZnRlbgotCQkgKiAoJ3NwaW5uaW5nJykgb24gTEFOcyB3aXRoIHNtYWxsIFJUVHMuCisJCSAqIFRoaXMgY2FuIGhlbHAgYXZvaWQgdHJpZ2dlcmluZyB0aGUgbm9mZWVkYmFjayB0aW1lciB0b28KKwkJICogb2Z0ZW4gKCdzcGlubmluZycpIG9uIExBTnMgd2l0aCBzbWFsbCBSVFRzLgogCQkgKi8KIAkJaGN0eC0+Y2NpZDNoY3R4X3RfcnRvID0gbWF4X3QodTMyLCA0ICogaGN0eC0+Y2NpZDNoY3R4X3J0dCwKIAkJCQkJCSAgIENPTkZJR19JUF9EQ0NQX0NDSUQzX1JUTyAqCi0JCQkJCQkgICAoVVNFQ19QRVJfU0VDLzEwMDApCSAgICAgKTsKKwkJCQkJCSAgIChVU0VDX1BFUl9TRUMvMTAwMCkpOwogCQkvKgogCQkgKiBTY2hlZHVsZSBubyBmZWVkYmFjayB0aW1lciB0byBleHBpcmUgaW4KIAkJICogbWF4KHRfUlRPLCAyICogcy9YKSAgPSAgbWF4KHRfUlRPLCAyICogdF9pcGkpCiAJCSAqLwogCQl0X25mYiA9IG1heChoY3R4LT5jY2lkM2hjdHhfdF9ydG8sIDIgKiBoY3R4LT5jY2lkM2hjdHhfdF9pcGkpOwotCQkJCi0JCWNjaWQzX3ByX2RlYnVnKCIlcywgc2s9JXAsIFNjaGVkdWxlZCBubyBmZWVkYmFjayB0aW1lciB0byAiCi0JCQkgICAgICAgImV4cGlyZSBpbiAlbHUgamlmZmllcyAoJWx1dXMpXG4iLAotCQkJICAgICAgIGRjY3Bfcm9sZShzayksIHNrLAotCQkJICAgICAgIHVzZWNzX3RvX2ppZmZpZXModF9uZmIpLCB0X25mYik7CiAKLQkJc2tfcmVzZXRfdGltZXIoc2ssICZoY3R4LT5jY2lkM2hjdHhfbm9fZmVlZGJhY2tfdGltZXIsIAorCQljY2lkM19wcl9kZWJ1ZygiJXMoJXApLCBTY2hlZHVsZWQgbm8gZmVlZGJhY2sgdGltZXIgdG8gIgorCQkJICAgICAgICJleHBpcmUgaW4gJWx1IGppZmZpZXMgKCVsdXVzKVxuIiwKKwkJCSAgICAgICBkY2NwX3JvbGUoc2spLAorCQkJICAgICAgIHNrLCB1c2Vjc190b19qaWZmaWVzKHRfbmZiKSwgdF9uZmIpOworCisJCXNrX3Jlc2V0X3RpbWVyKHNrLCAmaGN0eC0+Y2NpZDNoY3R4X25vX2ZlZWRiYWNrX3RpbWVyLAogCQkJCSAgIGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKHRfbmZiKSk7CiAKIAkJLyogc2V0IGlkbGUgZmxhZyAqLwotCQloY3R4LT5jY2lkM2hjdHhfaWRsZSA9IDE7ICAgCisJCWhjdHgtPmNjaWQzaGN0eF9pZGxlID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBURlJDX1NTVEFURV9OT19TRU5UOgotCQlpZiAoZGNjcF9zayhzayktPmRjY3BzX3JvbGUgPT0gRENDUF9ST0xFX0NMSUVOVCkKLQkJCURDQ1BfV0FSTigiSWxsZWdhbCBBQ0sgcmVjZWl2ZWQgLSBubyBwYWNrZXQgc2VudFxuIik7CisJCS8qCisJCSAqIFhYWCB3aGVuIGltcGxlbWVudGluZyBiaWRpcmVjdGlvbmFsIHJ4L3R4IGNoZWNrIHRoaXMgYWdhaW4KKwkJICovCisJCURDQ1BfV0FSTigiSWxsZWdhbCBBQ0sgcmVjZWl2ZWQgLSBubyBwYWNrZXQgc2VudFxuIik7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgVEZSQ19TU1RBVEVfVEVSTToJCS8qIGlnbm9yZSBmZWVkYmFjayB3aGVuIGNsb3NpbmcgKi8KIAkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgaW50IGNjaWQzX2hjX3R4X2luc2VydF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQljb25zdCBzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAqaGN0eCA9IGNjaWQzX2hjX3R4X3NrKHNrKTsKLQotCUJVR19PTihoY3R4ID09IE5VTEwpOwotCi0JaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX09QRU4gfHwgc2stPnNrX3N0YXRlID09IERDQ1BfUEFSVE9QRU4pCi0JCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2NjdmFsID0gaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50OwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGNjaWQzX2hjX3R4X3BhcnNlX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBjaGFyIG9wdGlvbiwKIAkJCQkgICAgIHVuc2lnbmVkIGNoYXIgbGVuLCB1MTYgaWR4LAogCQkJCSAgICAgdW5zaWduZWQgY2hhciAqdmFsdWUpCkBAIC01ODgsMTMgKzU3OSwxNCBAQAogCXN3aXRjaCAob3B0aW9uKSB7CiAJY2FzZSBURlJDX09QVF9MT1NTX0VWRU5UX1JBVEU6CiAJCWlmICh1bmxpa2VseShsZW4gIT0gNCkpIHsKLQkJCURDQ1BfV0FSTigiJXMsIHNrPSVwLCBpbnZhbGlkIGxlbiAlZCAiCisJCQlEQ0NQX1dBUk4oIiVzKCVwKSwgaW52YWxpZCBsZW4gJWQgIgogCQkJCSAgImZvciBURlJDX09QVF9MT1NTX0VWRU5UX1JBVEVcbiIsCiAJCQkJICBkY2NwX3JvbGUoc2spLCBzaywgbGVuKTsKIAkJCXJjID0gLUVJTlZBTDsKIAkJfSBlbHNlIHsKLQkJCW9wdF9yZWN2LT5jY2lkM29yX2xvc3NfZXZlbnRfcmF0ZSA9IG50b2hsKCooX19iZTMyICopdmFsdWUpOwotCQkJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgTE9TU19FVkVOVF9SQVRFPSV1XG4iLAorCQkJb3B0X3JlY3YtPmNjaWQzb3JfbG9zc19ldmVudF9yYXRlID0KKwkJCQkJCW50b2hsKCooX19iZTMyICopdmFsdWUpOworCQkJY2NpZDNfcHJfZGVidWcoIiVzKCVwKSwgTE9TU19FVkVOVF9SQVRFPSV1XG4iLAogCQkJCSAgICAgICBkY2NwX3JvbGUoc2spLCBzaywKIAkJCQkgICAgICAgb3B0X3JlY3YtPmNjaWQzb3JfbG9zc19ldmVudF9yYXRlKTsKIAkJfQpAQCAtNjAyLDIwICs1OTQsMjEgQEAKIAljYXNlIFRGUkNfT1BUX0xPU1NfSU5URVJWQUxTOgogCQlvcHRfcmVjdi0+Y2NpZDNvcl9sb3NzX2ludGVydmFsc19pZHggPSBpZHg7CiAJCW9wdF9yZWN2LT5jY2lkM29yX2xvc3NfaW50ZXJ2YWxzX2xlbiA9IGxlbjsKLQkJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgTE9TU19JTlRFUlZBTFM9KCV1LCAldSlcbiIsCisJCWNjaWQzX3ByX2RlYnVnKCIlcyglcCksIExPU1NfSU5URVJWQUxTPSgldSwgJXUpXG4iLAogCQkJICAgICAgIGRjY3Bfcm9sZShzayksIHNrLAogCQkJICAgICAgIG9wdF9yZWN2LT5jY2lkM29yX2xvc3NfaW50ZXJ2YWxzX2lkeCwKIAkJCSAgICAgICBvcHRfcmVjdi0+Y2NpZDNvcl9sb3NzX2ludGVydmFsc19sZW4pOwogCQlicmVhazsKIAljYXNlIFRGUkNfT1BUX1JFQ0VJVkVfUkFURToKIAkJaWYgKHVubGlrZWx5KGxlbiAhPSA0KSkgewotCQkJRENDUF9XQVJOKCIlcywgc2s9JXAsIGludmFsaWQgbGVuICVkICIKKwkJCURDQ1BfV0FSTigiJXMoJXApLCBpbnZhbGlkIGxlbiAlZCAiCiAJCQkJICAiZm9yIFRGUkNfT1BUX1JFQ0VJVkVfUkFURVxuIiwKIAkJCQkgIGRjY3Bfcm9sZShzayksIHNrLCBsZW4pOwogCQkJcmMgPSAtRUlOVkFMOwogCQl9IGVsc2UgewotCQkJb3B0X3JlY3YtPmNjaWQzb3JfcmVjZWl2ZV9yYXRlID0gbnRvaGwoKihfX2JlMzIgKil2YWx1ZSk7Ci0JCQljY2lkM19wcl9kZWJ1ZygiJXMsIHNrPSVwLCBSRUNFSVZFX1JBVEU9JXVcbiIsCisJCQlvcHRfcmVjdi0+Y2NpZDNvcl9yZWNlaXZlX3JhdGUgPQorCQkJCQkJbnRvaGwoKihfX2JlMzIgKil2YWx1ZSk7CisJCQljY2lkM19wcl9kZWJ1ZygiJXMoJXApLCBSRUNFSVZFX1JBVEU9JXVcbiIsCiAJCQkJICAgICAgIGRjY3Bfcm9sZShzayksIHNrLAogCQkJCSAgICAgICBvcHRfcmVjdi0+Y2NpZDNvcl9yZWNlaXZlX3JhdGUpOwogCQl9CkBAIC02MzAsMTAgKzYyMywxMiBAQAogCXN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4ID0gY2NpZF9wcml2KGNjaWQpOwogCiAJaGN0eC0+Y2NpZDNoY3R4X3MgICAgID0gMDsKKwloY3R4LT5jY2lkM2hjdHhfcnR0ICAgPSAwOwogCWhjdHgtPmNjaWQzaGN0eF9zdGF0ZSA9IFRGUkNfU1NUQVRFX05PX1NFTlQ7CiAJSU5JVF9MSVNUX0hFQUQoJmhjdHgtPmNjaWQzaGN0eF9oaXN0KTsKIAotCWhjdHgtPmNjaWQzaGN0eF9ub19mZWVkYmFja190aW1lci5mdW5jdGlvbiA9IGNjaWQzX2hjX3R4X25vX2ZlZWRiYWNrX3RpbWVyOworCWhjdHgtPmNjaWQzaGN0eF9ub19mZWVkYmFja190aW1lci5mdW5jdGlvbiA9CisJCQkJY2NpZDNfaGNfdHhfbm9fZmVlZGJhY2tfdGltZXI7CiAJaGN0eC0+Y2NpZDNoY3R4X25vX2ZlZWRiYWNrX3RpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpc2s7CiAJaW5pdF90aW1lcigmaGN0eC0+Y2NpZDNoY3R4X25vX2ZlZWRiYWNrX3RpbWVyKTsKIApAQCAtNjk4LDggKzY5Myw5IEBACiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAlzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICpwYWNrZXQ7CiAJc3RydWN0IHRpbWV2YWwgbm93OworCXN1c2Vjb25kc190IGRlbHRhOwogCi0JY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcFxuIiwgZGNjcF9yb2xlKHNrKSwgc2spOworCWNjaWQzX3ByX2RlYnVnKCIlcyglcCkgLSBlbnRyeSBcbiIsIGRjY3Bfcm9sZShzayksIHNrKTsKIAogCWRjY3BfdGltZXN0YW1wKHNrLCAmbm93KTsKIApAQCAtNzA3LDIxICs3MDMsMjEgQEAKIAljYXNlIFRGUkNfUlNUQVRFX05PX0RBVEE6CiAJCWhjcngtPmNjaWQzaGNyeF94X3JlY3YgPSAwOwogCQlicmVhazsKLQljYXNlIFRGUkNfUlNUQVRFX0RBVEE6IHsKLQkJY29uc3QgdTMyIGRlbHRhID0gdGltZXZhbF9kZWx0YSgmbm93LAotCQkJCQkmaGNyeC0+Y2NpZDNoY3J4X3RzdGFtcF9sYXN0X2ZlZWRiYWNrKTsKLQkJaGNyeC0+Y2NpZDNoY3J4X3hfcmVjdiA9IHVzZWNzX2RpdihoY3J4LT5jY2lkM2hjcnhfYnl0ZXNfcmVjdiwKLQkJCQkJCSAgIGRlbHRhKTsKLQl9CisJY2FzZSBURlJDX1JTVEFURV9EQVRBOgorCQlkZWx0YSA9IHRpbWV2YWxfZGVsdGEoJm5vdywKKwkJCQkgICAgICAmaGNyeC0+Y2NpZDNoY3J4X3RzdGFtcF9sYXN0X2ZlZWRiYWNrKTsKKwkJRENDUF9CVUdfT04oZGVsdGEgPCAwKTsKKwkJaGNyeC0+Y2NpZDNoY3J4X3hfcmVjdiA9CisJCQlzY2FsZWRfZGl2MzIoaGNyeC0+Y2NpZDNoY3J4X2J5dGVzX3JlY3YsIGRlbHRhKTsKIAkJYnJlYWs7CiAJY2FzZSBURlJDX1JTVEFURV9URVJNOgotCQlEQ0NQX0JVRygiSWxsZWdhbCAlcyBzdGF0ZSBURVJNLCBzaz0lcCIsIGRjY3Bfcm9sZShzayksIHNrKTsKKwkJRENDUF9CVUcoIiVzKCVwKSAtIElsbGVnYWwgc3RhdGUgVEVSTSIsIGRjY3Bfcm9sZShzayksIHNrKTsKIAkJcmV0dXJuOwogCX0KIAogCXBhY2tldCA9IGRjY3BfcnhfaGlzdF9maW5kX2RhdGFfcGFja2V0KCZoY3J4LT5jY2lkM2hjcnhfaGlzdCk7CiAJaWYgKHVubGlrZWx5KHBhY2tldCA9PSBOVUxMKSkgewotCQlEQ0NQX1dBUk4oIiVzLCBzaz0lcCwgbm8gZGF0YSBwYWNrZXQgaW4gaGlzdG9yeSFcbiIsCisJCURDQ1BfV0FSTigiJXMoJXApLCBubyBkYXRhIHBhY2tldCBpbiBoaXN0b3J5IVxuIiwKIAkJCSAgZGNjcF9yb2xlKHNrKSwgc2spOwogCQlyZXR1cm47CiAJfQpAQCAtNzMwLDEzICs3MjYsMTkgQEAKIAloY3J4LT5jY2lkM2hjcnhfY2N2YWxfbGFzdF9jb3VudGVyICAgPSBwYWNrZXQtPmRjY3BocnhfY2N2YWw7CiAJaGNyeC0+Y2NpZDNoY3J4X2J5dGVzX3JlY3YJICAgICA9IDA7CiAKLQkvKiBDb252ZXJ0IHRvIG11bHRpcGxlcyBvZiAxMHVzICovCi0JaGNyeC0+Y2NpZDNoY3J4X2VsYXBzZWRfdGltZSA9Ci0JCQl0aW1ldmFsX2RlbHRhKCZub3csICZwYWNrZXQtPmRjY3BocnhfdHN0YW1wKSAvIDEwOworCS8qIEVsYXBzZWQgdGltZSBpbmZvcm1hdGlvbiBbUkZDIDQzNDAsIDEzLjJdIGluIHVuaXRzIG9mIDEwICogdXNlY3MgKi8KKwlkZWx0YSA9IHRpbWV2YWxfZGVsdGEoJm5vdywgJnBhY2tldC0+ZGNjcGhyeF90c3RhbXApOworCURDQ1BfQlVHX09OKGRlbHRhIDwgMCk7CisJaGNyeC0+Y2NpZDNoY3J4X2VsYXBzZWRfdGltZSA9IGRlbHRhIC8gMTA7CisKIAlpZiAoaGNyeC0+Y2NpZDNoY3J4X3AgPT0gMCkKLQkJaGNyeC0+Y2NpZDNoY3J4X3BpbnYgPSB+MDsKLQllbHNlCisJCWhjcngtPmNjaWQzaGNyeF9waW52ID0gfjBVOwkvKiBzZWUgUkZDIDQzNDIsIDguNSAqLworCWVsc2UgaWYgKGhjcngtPmNjaWQzaGNyeF9wID4gMTAwMDAwMCkgeworCQlEQ0NQX1dBUk4oInAgKCV1KSA+IDEwMCUlXG4iLCBoY3J4LT5jY2lkM2hjcnhfcCk7CisJCWhjcngtPmNjaWQzaGNyeF9waW52ID0gMTsJLyogdXNlIDEwMCUgaW4gdGhpcyBjYXNlICovCisJfSBlbHNlCiAJCWhjcngtPmNjaWQzaGNyeF9waW52ID0gMTAwMDAwMCAvIGhjcngtPmNjaWQzaGNyeF9wOworCiAJZHAtPmRjY3BzX2hjX3J4X2luc2VydF9vcHRpb25zID0gMTsKIAlkY2NwX3NlbmRfYWNrKHNrKTsKIH0KQEAgLTc2NCw5ICs3NjYsOSBAQAogCQkJCQkgICAgIGhjcngtPmNjaWQzaGNyeF9lbGFwc2VkX3RpbWUpKSB8fAogCSAgICBkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wKHNrLCBza2IpIHx8CiAJICAgIGRjY3BfaW5zZXJ0X29wdGlvbihzaywgc2tiLCBURlJDX09QVF9MT1NTX0VWRU5UX1JBVEUsCi0JCSAgICAJICAgICAgICZwaW52LCBzaXplb2YocGludikpIHx8CisJCQkgICAgICAgJnBpbnYsIHNpemVvZihwaW52KSkgfHwKIAkgICAgZGNjcF9pbnNlcnRfb3B0aW9uKHNrLCBza2IsIFRGUkNfT1BUX1JFQ0VJVkVfUkFURSwKLQkJICAgIAkgICAgICAgJnhfcmVjdiwgc2l6ZW9mKHhfcmVjdikpKQorCQkJICAgICAgICZ4X3JlY3YsIHNpemVvZih4X3JlY3YpKSkKIAkJcmV0dXJuIC0xOwogCiAJcmV0dXJuIDA7CkBAIC03ODAsMTIgKzc4MiwxMyBAQAogewogCXN0cnVjdCBjY2lkM19oY19yeF9zb2NrICpoY3J4ID0gY2NpZDNfaGNfcnhfc2soc2spOwogCXN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKmVudHJ5LCAqbmV4dCwgKnRhaWwgPSBOVUxMOwotCXUzMiBydHQsIGRlbHRhLCB4X3JlY3YsIGZ2YWwsIHAsIHRtcDI7CisJdTMyIHhfcmVjdiwgcDsKKwlzdXNlY29uZHNfdCBydHQsIGRlbHRhOwogCXN0cnVjdCB0aW1ldmFsIHRzdGFtcCA9IHsgMCwgfTsKIAlpbnQgaW50ZXJ2YWwgPSAwOwogCWludCB3aW5fY291bnQgPSAwOwogCWludCBzdGVwID0gMDsKLQl1NjQgdG1wMTsKKwl1NjQgZnZhbDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgJmhjcngtPmNjaWQzaGNyeF9oaXN0LAogCQkJCSBkY2NwaHJ4X25vZGUpIHsKQEAgLTgxMCwxMyArODEzLDEzIEBACiAJfQogCiAJaWYgKHVubGlrZWx5KHN0ZXAgPT0gMCkpIHsKLQkJRENDUF9XQVJOKCIlcywgc2s9JXAsIHBhY2tldCBoaXN0b3J5IGhhcyBubyBkYXRhIHBhY2tldHMhXG4iLAorCQlEQ0NQX1dBUk4oIiVzKCVwKSwgcGFja2V0IGhpc3RvcnkgaGFzIG5vIGRhdGEgcGFja2V0cyFcbiIsCiAJCQkgIGRjY3Bfcm9sZShzayksIHNrKTsKIAkJcmV0dXJuIH4wOwogCX0KIAogCWlmICh1bmxpa2VseShpbnRlcnZhbCA9PSAwKSkgewotCQlEQ0NQX1dBUk4oIiVzLCBzaz0lcCwgQ291bGQgbm90IGZpbmQgYSB3aW5fY291bnQgaW50ZXJ2YWwgPiAwLiIKKwkJRENDUF9XQVJOKCIlcyglcCksIENvdWxkIG5vdCBmaW5kIGEgd2luX2NvdW50IGludGVydmFsID4gMC4iCiAJCQkgICJEZWZhdWx0aW5nIHRvIDFcbiIsIGRjY3Bfcm9sZShzayksIHNrKTsKIAkJaW50ZXJ2YWwgPSAxOwogCX0KQEAgLTgyNSw0MSArODI4LDUxIEBACiAJCURDQ1BfQ1JJVCgidGFpbCBpcyBudWxsXG4iKTsKIAkJcmV0dXJuIH4wOwogCX0KLQlydHQgPSB0aW1ldmFsX2RlbHRhKCZ0c3RhbXAsICZ0YWlsLT5kY2NwaHJ4X3RzdGFtcCkgKiA0IC8gaW50ZXJ2YWw7Ci0JY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgYXBwcm94aW1hdGVkIFJUVCB0byAldXVzXG4iLAotCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2ssIHJ0dCk7CiAKLQlpZiAocnR0ID09IDApIHsKLQkJRENDUF9XQVJOKCJSVFQ9PTAsIHNldHRpbmcgdG8gMVxuIik7Ci0gCQlydHQgPSAxOworCWRlbHRhID0gdGltZXZhbF9kZWx0YSgmdHN0YW1wLCAmdGFpbC0+ZGNjcGhyeF90c3RhbXApOworCURDQ1BfQlVHX09OKGRlbHRhIDwgMCk7CisKKwlydHQgPSBkZWx0YSAqIDQgLyBpbnRlcnZhbDsKKwljY2lkM19wcl9kZWJ1ZygiJXMoJXApLCBhcHByb3hpbWF0ZWQgUlRUIHRvICVkdXNcbiIsCisJCSAgICAgICBkY2NwX3JvbGUoc2spLCBzaywgKGludClydHQpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUgZmlyc3QgbG9zcyBpbnRlcnZhbCB2aWEgaW52ZXJzZSBsb29rdXAuCisJICogQXNzdW1lIHRoYXQgWF9yZWN2IGNhbiBiZSBjb21wdXRlZCBieSB0aGUgdGhyb3VnaHB1dCBlcXVhdGlvbgorCSAqCQkgICAgcworCSAqCVhfcmVjdiA9IC0tLS0tLS0tCisJICoJCSBSICogZnZhbAorCSAqIEZpbmQgc29tZSBwIHN1Y2ggdGhhdCBmKHApID0gZnZhbDsgcmV0dXJuIDEvcCBbUkZDIDM0NDgsIDYuMy4xXS4KKwkgKi8KKwlpZiAocnR0ID09IDApIHsJCQkvKiB3b3VsZCByZXN1bHQgaW4gZGl2aWRlLWJ5LXplcm8gKi8KKwkJRENDUF9XQVJOKCJSVFQ9PTBcbiIpOworCQlyZXR1cm4gfjA7CiAJfQogCiAJZGNjcF90aW1lc3RhbXAoc2ssICZ0c3RhbXApOwogCWRlbHRhID0gdGltZXZhbF9kZWx0YSgmdHN0YW1wLCAmaGNyeC0+Y2NpZDNoY3J4X3RzdGFtcF9sYXN0X2ZlZWRiYWNrKTsKLQl4X3JlY3YgPSB1c2Vjc19kaXYoaGNyeC0+Y2NpZDNoY3J4X2J5dGVzX3JlY3YsIGRlbHRhKTsKKwlEQ0NQX0JVR19PTihkZWx0YSA8PSAwKTsKIAotCWlmICh4X3JlY3YgPT0gMCkKLQkJeF9yZWN2ID0gaGNyeC0+Y2NpZDNoY3J4X3hfcmVjdjsKLQotCXRtcDEgPSAodTY0KXhfcmVjdiAqICh1NjQpcnR0OwotCWRvX2Rpdih0bXAxLDEwMDAwMDAwKTsKLQl0bXAyID0gKHUzMil0bXAxOwotCi0JaWYgKCF0bXAyKSB7Ci0JCURDQ1BfQ1JJVCgidG1wMiA9IDAsIHhfcmVjdiA9ICV1LCBydHQgPSV1XG4iLCB4X3JlY3YsIHJ0dCk7Ci0JCXJldHVybiB+MDsKKwl4X3JlY3YgPSBzY2FsZWRfZGl2MzIoaGNyeC0+Y2NpZDNoY3J4X2J5dGVzX3JlY3YsIGRlbHRhKTsKKwlpZiAoeF9yZWN2ID09IDApIHsJCS8qIHdvdWxkIGFsc28gdHJpZ2dlciBkaXZpZGUtYnktemVybyAqLworCQlEQ0NQX1dBUk4oIlhfcmVjdj09MFxuIik7CisJCWlmICgoeF9yZWN2ID0gaGNyeC0+Y2NpZDNoY3J4X3hfcmVjdikgPT0gMCkgeworCQkJRENDUF9CVUcoInN0b3JlZCB2YWx1ZSBvZiBYX3JlY3YgaXMgemVybyIpOworCQkJcmV0dXJuIH4wOworCQl9CiAJfQogCi0JZnZhbCA9IChoY3J4LT5jY2lkM2hjcnhfcyAqIDEwMDAwMCkgLyB0bXAyOwotCS8qIGRvIG5vdCBhbHRlciBvcmRlciBhYm92ZSBvciB5b3Ugd2lsbCBnZXQgb3ZlcmZsb3cgb24gMzIgYml0ICovCisJZnZhbCA9IHNjYWxlZF9kaXYoaGNyeC0+Y2NpZDNoY3J4X3MsIHJ0dCk7CisJZnZhbCA9IHNjYWxlZF9kaXYzMihmdmFsLCB4X3JlY3YpOwogCXAgPSB0ZnJjX2NhbGNfeF9yZXZlcnNlX2xvb2t1cChmdmFsKTsKLQljY2lkM19wcl9kZWJ1ZygiJXMsIHNrPSVwLCByZWNlaXZlIHJhdGU9JXUgYnl0ZXMvcywgaW1wbGllZCAiCisKKwljY2lkM19wcl9kZWJ1ZygiJXMoJXApLCByZWNlaXZlIHJhdGU9JXUgYnl0ZXMvcywgaW1wbGllZCAiCiAJCSAgICAgICAibG9zcyByYXRlPSV1XG4iLCBkY2NwX3JvbGUoc2spLCBzaywgeF9yZWN2LCBwKTsKIAogCWlmIChwID09IDApCiAJCXJldHVybiB+MDsKIAllbHNlCi0JCXJldHVybiAxMDAwMDAwIC8gcDsgCisJCXJldHVybiAxMDAwMDAwIC8gcDsKIH0KIAogc3RhdGljIHZvaWQgY2NpZDNfaGNfcnhfdXBkYXRlX2xpKHN0cnVjdCBzb2NrICpzaywgdTY0IHNlcV9sb3NzLCB1OCB3aW5fbG9zcykKQEAgLTkxMyw3ICs5MjYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqcGFja2V0KQogewogCXN0cnVjdCBjY2lkM19oY19yeF9zb2NrICpoY3J4ID0gY2NpZDNfaGNfcnhfc2soc2spOwotCXN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKnJ4X2hpc3QgPSBkY2NwX3J4X2hpc3RfaGVhZCgmaGNyeC0+Y2NpZDNoY3J4X2hpc3QpOworCXN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKnJ4X2hpc3QgPQorCQkJCWRjY3BfcnhfaGlzdF9oZWFkKCZoY3J4LT5jY2lkM2hjcnhfaGlzdCk7CiAJdTY0IHNlcW5vID0gcGFja2V0LT5kY2NwaHJ4X3NlcW5vOwogCXU2NCB0bXBfc2Vxbm87CiAJaW50IGxvc3MgPSAwOwpAQCAtOTQxLDcgKzk1NSw3IEBACiAJCWRjY3BfaW5jX3NlcW5vKCZ0bXBfc2Vxbm8pOwogCQl3aGlsZSAoZGNjcF9yeF9oaXN0X2ZpbmRfZW50cnkoJmhjcngtPmNjaWQzaGNyeF9oaXN0LAogCQkgICB0bXBfc2Vxbm8sICZjY3ZhbCkpIHsKLQkJICAgCWhjcngtPmNjaWQzaGNyeF9zZXFub19ub25sb3NzID0gdG1wX3NlcW5vOworCQkJaGNyeC0+Y2NpZDNoY3J4X3NlcW5vX25vbmxvc3MgPSB0bXBfc2Vxbm87CiAJCQloY3J4LT5jY2lkM2hjcnhfY2N2YWxfbm9ubG9zcyA9IGNjdmFsOwogCQkJZGNjcF9pbmNfc2Vxbm8oJnRtcF9zZXFubyk7CiAJCX0KQEAgLTk2Nyw3ICs5ODEsOCBAQAogCWNvbnN0IHN0cnVjdCBkY2NwX29wdGlvbnNfcmVjZWl2ZWQgKm9wdF9yZWN2OwogCXN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKnBhY2tldDsKIAlzdHJ1Y3QgdGltZXZhbCBub3c7Ci0JdTMyIHBfcHJldiwgcnR0X3ByZXYsIHJfc2FtcGxlLCB0X2VsYXBzZWQ7CisJdTMyIHBfcHJldiwgcnR0X3ByZXY7CisJc3VzZWNvbmRzX3Qgcl9zYW1wbGUsIHRfZWxhcHNlZDsKIAlpbnQgbG9zcywgcGF5bG9hZF9zaXplOwogCiAJQlVHX09OKGhjcnggPT0gTlVMTCk7CkBAIC05ODcsMTEgKzEwMDIsMTMgQEAKIAkJcl9zYW1wbGUgPSB0aW1ldmFsX3VzZWNzKCZub3cpOwogCQl0X2VsYXBzZWQgPSBvcHRfcmVjdi0+ZGNjcG9yX2VsYXBzZWRfdGltZSAqIDEwOwogCisJCURDQ1BfQlVHX09OKHJfc2FtcGxlIDwgMCk7CiAJCWlmICh1bmxpa2VseShyX3NhbXBsZSA8PSB0X2VsYXBzZWQpKQotCQkJRENDUF9XQVJOKCJyX3NhbXBsZT0ldXVzLCB0X2VsYXBzZWQ9JXV1c1xuIiwKKwkJCURDQ1BfV0FSTigicl9zYW1wbGU9JWxkdXMsIHRfZWxhcHNlZD0lbGR1c1xuIiwKIAkJCQkgIHJfc2FtcGxlLCB0X2VsYXBzZWQpOwogCQllbHNlCiAJCQlyX3NhbXBsZSAtPSB0X2VsYXBzZWQ7CisJCUNDSUQzX1JUVF9TQU5JVFlfQ0hFQ0socl9zYW1wbGUpOwogCiAJCWlmIChoY3J4LT5jY2lkM2hjcnhfc3RhdGUgPT0gVEZSQ19SU1RBVEVfTk9fREFUQSkKIAkJCWhjcngtPmNjaWQzaGNyeF9ydHQgPSByX3NhbXBsZTsKQEAgLTEwMDAsOCArMTAxNyw4IEBACiAJCQkJCSAgICAgIHJfc2FtcGxlIC8gMTA7CiAKIAkJaWYgKHJ0dF9wcmV2ICE9IGhjcngtPmNjaWQzaGNyeF9ydHQpCi0JCQljY2lkM19wcl9kZWJ1ZygiJXMsIE5ldyBSVFQ9JXV1cywgZWxhcHNlZCB0aW1lPSV1XG4iLAotCQkJCSAgICAgICBkY2NwX3JvbGUoc2spLCBoY3J4LT5jY2lkM2hjcnhfcnR0LAorCQkJY2NpZDNfcHJfZGVidWcoIiVzKCVwKSwgTmV3IFJUVD0ldXVzLCBlbGFwc2VkIHRpbWU9JXVcbiIsCisJCQkJICAgICAgIGRjY3Bfcm9sZShzayksIHNrLCBoY3J4LT5jY2lkM2hjcnhfcnR0LAogCQkJCSAgICAgICBvcHRfcmVjdi0+ZGNjcG9yX2VsYXBzZWRfdGltZSk7CiAJCWJyZWFrOwogCWNhc2UgRENDUF9QS1RfREFUQToKQEAgLTEwMTMsNyArMTAzMCw3IEBACiAJcGFja2V0ID0gZGNjcF9yeF9oaXN0X2VudHJ5X25ldyhjY2lkM19yeF9oaXN0LCBzaywgb3B0X3JlY3YtPmRjY3Bvcl9uZHAsCiAJCQkJCXNrYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHVubGlrZWx5KHBhY2tldCA9PSBOVUxMKSkgewotCQlEQ0NQX1dBUk4oIiVzLCBzaz0lcCwgTm90IGVub3VnaCBtZW0gdG8gYWRkIHJ4IHBhY2tldCAiCisJCURDQ1BfV0FSTigiJXMoJXApLCBOb3QgZW5vdWdoIG1lbSB0byBhZGQgcnggcGFja2V0ICIKIAkJCSAgInRvIGhpc3RvcnksIGNvbnNpZGVyIGl0IGxvc3QhXG4iLCBkY2NwX3JvbGUoc2spLCBzayk7CiAJCXJldHVybjsKIAl9CkBAIC0xMDI4LDkgKzEwNDUsOCBAQAogCiAJc3dpdGNoIChoY3J4LT5jY2lkM2hjcnhfc3RhdGUpIHsKIAljYXNlIFRGUkNfUlNUQVRFX05PX0RBVEE6Ci0JCWNjaWQzX3ByX2RlYnVnKCIlcywgc2s9JXAoJXMpLCBza2I9JXAsIHNlbmRpbmcgaW5pdGlhbCAiCi0JCQkgICAgICAgImZlZWRiYWNrXG4iLAotCQkJICAgICAgIGRjY3Bfcm9sZShzayksIHNrLAorCQljY2lkM19wcl9kZWJ1ZygiJXMoJXAsIHN0YXRlPSVzKSwgc2tiPSVwLCBzZW5kaW5nIGluaXRpYWwgIgorCQkJICAgICAgICJmZWVkYmFja1xuIiwgZGNjcF9yb2xlKHNrKSwgc2ssCiAJCQkgICAgICAgZGNjcF9zdGF0ZV9uYW1lKHNrLT5za19zdGF0ZSksIHNrYik7CiAJCWNjaWQzX2hjX3J4X3NlbmRfZmVlZGJhY2soc2spOwogCQljY2lkM19oY19yeF9zZXRfc3RhdGUoc2ssIFRGUkNfUlNUQVRFX0RBVEEpOwpAQCAtMTA0MSwxOSArMTA1NywxOSBAQAogCQkJYnJlYWs7CiAKIAkJZGNjcF90aW1lc3RhbXAoc2ssICZub3cpOwotCQlpZiAodGltZXZhbF9kZWx0YSgmbm93LCAmaGNyeC0+Y2NpZDNoY3J4X3RzdGFtcF9sYXN0X2FjaykgPj0KLQkJICAgIGhjcngtPmNjaWQzaGNyeF9ydHQpIHsKKwkJaWYgKCh0aW1ldmFsX2RlbHRhKCZub3csICZoY3J4LT5jY2lkM2hjcnhfdHN0YW1wX2xhc3RfYWNrKSAtCisJCSAgICAgKHN1c2Vjb25kc190KWhjcngtPmNjaWQzaGNyeF9ydHQpID49IDApIHsKIAkJCWhjcngtPmNjaWQzaGNyeF90c3RhbXBfbGFzdF9hY2sgPSBub3c7CiAJCQljY2lkM19oY19yeF9zZW5kX2ZlZWRiYWNrKHNrKTsKIAkJfQogCQlyZXR1cm47CiAJY2FzZSBURlJDX1JTVEFURV9URVJNOgotCQlEQ0NQX0JVRygiSWxsZWdhbCAlcyBzdGF0ZSBURVJNLCBzaz0lcCIsIGRjY3Bfcm9sZShzayksIHNrKTsKKwkJRENDUF9CVUcoIiVzKCVwKSAtIElsbGVnYWwgc3RhdGUgVEVSTSIsIGRjY3Bfcm9sZShzayksIHNrKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIERlYWxpbmcgd2l0aCBwYWNrZXQgbG9zcyAqLwotCWNjaWQzX3ByX2RlYnVnKCIlcywgc2s9JXAoJXMpLCBkYXRhIGxvc3MhIFJlYWN0aW5nLi4uXG4iLAorCWNjaWQzX3ByX2RlYnVnKCIlcyglcCwgc3RhdGU9JXMpLCBkYXRhIGxvc3MhIFJlYWN0aW5nLi4uXG4iLAogCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2ssIGRjY3Bfc3RhdGVfbmFtZShzay0+c2tfc3RhdGUpKTsKIAogCXBfcHJldiA9IGhjcngtPmNjaWQzaGNyeF9wOwpAQCAtMTA3OCw3ICsxMDk0LDcgQEAKIHsKIAlzdHJ1Y3QgY2NpZDNfaGNfcnhfc29jayAqaGNyeCA9IGNjaWRfcHJpdihjY2lkKTsKIAotCWNjaWQzX3ByX2RlYnVnKCIlcywgc2s9JXBcbiIsIGRjY3Bfcm9sZShzayksIHNrKTsKKwljY2lkM19wcl9kZWJ1ZygiZW50cnlcbiIpOwogCiAJaGNyeC0+Y2NpZDNoY3J4X3N0YXRlID0gVEZSQ19SU1RBVEVfTk9fREFUQTsKIAlJTklUX0xJU1RfSEVBRCgmaGNyeC0+Y2NpZDNoY3J4X2hpc3QpOwpAQCAtMTA4Niw3ICsxMTAyLDcgQEAKIAlkY2NwX3RpbWVzdGFtcChzaywgJmhjcngtPmNjaWQzaGNyeF90c3RhbXBfbGFzdF9hY2spOwogCWhjcngtPmNjaWQzaGNyeF90c3RhbXBfbGFzdF9mZWVkYmFjayA9IGhjcngtPmNjaWQzaGNyeF90c3RhbXBfbGFzdF9hY2s7CiAJaGNyeC0+Y2NpZDNoY3J4X3MgICA9IDA7Ci0JaGNyeC0+Y2NpZDNoY3J4X3J0dCA9IDUwMDA7IC8qIFhYWCA1bXMgZm9yIG5vdy4uLiAqLworCWhjcngtPmNjaWQzaGNyeF9ydHQgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC0xMTE1LDkgKzExMzEsOSBAQAogCiAJQlVHX09OKGhjcnggPT0gTlVMTCk7CiAKLQlpbmZvLT50Y3BpX2NhX3N0YXRlCT0gaGNyeC0+Y2NpZDNoY3J4X3N0YXRlOwotCWluZm8tPnRjcGlfb3B0aW9ucwl8PSBUQ1BJX09QVF9USU1FU1RBTVBTOwotCWluZm8tPnRjcGlfcmN2X3J0dAk9IGhjcngtPmNjaWQzaGNyeF9ydHQ7CisJaW5mby0+dGNwaV9jYV9zdGF0ZSA9IGhjcngtPmNjaWQzaGNyeF9zdGF0ZTsKKwlpbmZvLT50Y3BpX29wdGlvbnMgIHw9IFRDUElfT1BUX1RJTUVTVEFNUFM7CisJaW5mby0+dGNwaV9yY3ZfcnR0ICA9IGhjcngtPmNjaWQzaGNyeF9ydHQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNjaWQzX2hjX3R4X2dldF9pbmZvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9pbmZvICppbmZvKQpAQCAtMTE5OCw3ICsxMjE0LDYgQEAKIAkuY2NpZF9oY190eF9zZW5kX3BhY2tldAkgICA9IGNjaWQzX2hjX3R4X3NlbmRfcGFja2V0LAogCS5jY2lkX2hjX3R4X3BhY2tldF9zZW50CSAgID0gY2NpZDNfaGNfdHhfcGFja2V0X3NlbnQsCiAJLmNjaWRfaGNfdHhfcGFja2V0X3JlY3YJICAgPSBjY2lkM19oY190eF9wYWNrZXRfcmVjdiwKLQkuY2NpZF9oY190eF9pbnNlcnRfb3B0aW9ucyA9IGNjaWQzX2hjX3R4X2luc2VydF9vcHRpb25zLAogCS5jY2lkX2hjX3R4X3BhcnNlX29wdGlvbnMgID0gY2NpZDNfaGNfdHhfcGFyc2Vfb3B0aW9ucywKIAkuY2NpZF9oY19yeF9vYmpfc2l6ZQkgICA9IHNpemVvZihzdHJ1Y3QgY2NpZDNfaGNfcnhfc29jayksCiAJLmNjaWRfaGNfcnhfaW5pdAkgICA9IGNjaWQzX2hjX3J4X2luaXQsCkBAIC0xMjEwLDcgKzEyMjUsNyBAQAogCS5jY2lkX2hjX3J4X2dldHNvY2tvcHQJICAgPSBjY2lkM19oY19yeF9nZXRzb2Nrb3B0LAogCS5jY2lkX2hjX3R4X2dldHNvY2tvcHQJICAgPSBjY2lkM19oY190eF9nZXRzb2Nrb3B0LAogfTsKLSAKKwogI2lmZGVmIENPTkZJR19JUF9EQ0NQX0NDSUQzX0RFQlVHCiBtb2R1bGVfcGFyYW0oY2NpZDNfZGVidWcsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNjaWQzX2RlYnVnLCAiRW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7CkBAIC0xMjMzLDcgKzEyNDgsNyBAQAogCQlnb3RvIG91dF9mcmVlX3R4OwogCiAJcmMgPSBjY2lkX3JlZ2lzdGVyKCZjY2lkMyk7Ci0JaWYgKHJjICE9IDApIAorCWlmIChyYyAhPSAwKQogCQlnb3RvIG91dF9mcmVlX2xvc3NfaW50ZXJ2YWxfaGlzdG9yeTsKIG91dDoKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuaAppbmRleCAwNzU5NmQ3Li4xNTc3NmE4IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmgKQEAgLTUxLDYgKzUxLDE2IEBACiAvKiBQYXJhbWV0ZXIgdF9tYmkgZnJvbSBbUkZDIDM0NDgsIDQuM106IGJhY2tvZmYgaW50ZXJ2YWwgaW4gc2Vjb25kcyAqLwogI2RlZmluZSBURlJDX1RfTUJJCQkgICA2NAogCisvKiBXaGF0IHdlIHRoaW5rIGlzIGEgcmVhc29uYWJsZSB1cHBlciBsaW1pdCBvbiBSVFQgdmFsdWVzICovCisjZGVmaW5lIENDSUQzX1NBTkVfUlRUX01BWAkgICAoKHN1c2Vjb25kc190KSg0ICogVVNFQ19QRVJfU0VDKSkKKworI2RlZmluZSBDQ0lEM19SVFRfU0FOSVRZX0NIRUNLKHJ0dCkgCQkJZG8gewkJICAgXAorCQlpZiAocnR0ID4gQ0NJRDNfU0FORV9SVFRfTUFYKSB7CQkJCSAgIFwKKwkJCURDQ1BfQ1JJVCgiUlRUICglZCkgdG9vIGxhcmdlLCBzdWJzdGl0dXRpbmcgJWQiLCAgIFwKKwkJCQkgIChpbnQpcnR0LCAoaW50KUNDSUQzX1NBTkVfUlRUX01BWCk7CSAgIFwKKwkJCXJ0dCA9IENDSUQzX1NBTkVfUlRUX01BWDsJCQkgICBcCisJCX0gCQkJCQl9IHdoaWxlICgwKQorCiBlbnVtIGNjaWQzX29wdGlvbnMgewogCVRGUkNfT1BUX0xPU1NfRVZFTlRfUkFURSA9IDE5MiwKIAlURlJDX09QVF9MT1NTX0lOVEVSVkFMUwkgPSAxOTMsCkBAIC02Nyw3ICs3Nyw3IEBACiAKIC8qIFRGUkMgc2VuZGVyIHN0YXRlcyAqLwogZW51bSBjY2lkM19oY190eF9zdGF0ZXMgewotICAgICAgIAlURlJDX1NTVEFURV9OT19TRU5UID0gMSwKKwlURlJDX1NTVEFURV9OT19TRU5UID0gMSwKIAlURlJDX1NTVEFURV9OT19GQkFDSywKIAlURlJDX1NTVEFURV9GQkFDSywKIAlURlJDX1NTVEFURV9URVJNLApAQCAtNzUsMjMgKzg1LDIzIEBACiAKIC8qKiBzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAtIENDSUQzIHNlbmRlciBoYWxmLWNvbm5lY3Rpb24gc29ja2V0CiAgKgotICogQGNjaWQzaGN0eF94IC0gQ3VycmVudCBzZW5kaW5nIHJhdGUKLSAqIEBjY2lkM2hjdHhfeF9yZWN2IC0gUmVjZWl2ZSByYXRlCi0gKiBAY2NpZDNoY3R4X3hfY2FsYyAtIENhbGN1bGF0ZWQgc2VuZCByYXRlIChSRkMgMzQ0OCwgMy4xKQorICogQGNjaWQzaGN0eF94IC0gQ3VycmVudCBzZW5kaW5nIHJhdGUgaW4gNjQgKiBieXRlcyBwZXIgc2Vjb25kCisgKiBAY2NpZDNoY3R4X3hfcmVjdiAtIFJlY2VpdmUgcmF0ZSAgICBpbiA2NCAqIGJ5dGVzIHBlciBzZWNvbmQKKyAqIEBjY2lkM2hjdHhfeF9jYWxjIC0gQ2FsY3VsYXRlZCByYXRlIGluIGJ5dGVzIHBlciBzZWNvbmQKICAqIEBjY2lkM2hjdHhfcnR0IC0gRXN0aW1hdGUgb2YgY3VycmVudCByb3VuZCB0cmlwIHRpbWUgaW4gdXNlY3MKICAqIEBjY2lkM2hjdHhfcCAtIEN1cnJlbnQgbG9zcyBldmVudCByYXRlICgwLTEpIHNjYWxlZCBieSAxMDAwMDAwCi0gKiBAY2NpZDNoY3R4X3MgLSBQYWNrZXQgc2l6ZQotICogQGNjaWQzaGN0eF90X3J0byAtIFJldHJhbnNtaXNzaW9uIFRpbWVvdXQgKFJGQyAzNDQ4LCAzLjEpCi0gKiBAY2NpZDNoY3R4X3RfaXBpIC0gSW50ZXJwYWNrZXQgKHNlbmQpIGludGVydmFsIChSRkMgMzQ0OCwgNC42KQorICogQGNjaWQzaGN0eF9zIC0gUGFja2V0IHNpemUgaW4gYnl0ZXMKKyAqIEBjY2lkM2hjdHhfdF9ydG8gLSBOb2ZlZWRiYWNrIFRpbWVyIHNldHRpbmcgaW4gdXNlY3MKKyAqIEBjY2lkM2hjdHhfdF9pcGkgLSBJbnRlcnBhY2tldCAoc2VuZCkgaW50ZXJ2YWwgKFJGQyAzNDQ4LCA0LjYpIGluIHVzZWNzCiAgKiBAY2NpZDNoY3R4X3N0YXRlIC0gU2VuZGVyIHN0YXRlLCBvbmUgb2YgJWNjaWQzX2hjX3R4X3N0YXRlcwogICogQGNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudCAtIExhc3Qgd2luZG93IGNvdW50ZXIgc2VudAogICogQGNjaWQzaGN0eF90X2xhc3Rfd2luX2NvdW50IC0gVGltZXN0YW1wIG9mIGVhcmxpZXN0IHBhY2tldAotICogCQkJCSB3aXRoIGxhc3Rfd2luX2NvdW50IHZhbHVlIHNlbnQKKyAqCQkJCSB3aXRoIGxhc3Rfd2luX2NvdW50IHZhbHVlIHNlbnQKICAqIEBjY2lkM2hjdHhfbm9fZmVlZGJhY2tfdGltZXIgLSBIYW5kbGUgdG8gbm8gZmVlZGJhY2sgdGltZXIKICAqIEBjY2lkM2hjdHhfaWRsZSAtIEZsYWcgaW5kaWNhdGluZyB0aGF0IHNlbmRlciBpcyBpZGxpbmcKICAqIEBjY2lkM2hjdHhfdF9sZCAtIFRpbWUgbGFzdCBkb3VibGVkIGR1cmluZyBzbG93IHN0YXJ0CiAgKiBAY2NpZDNoY3R4X3Rfbm9tIC0gTm9taW5hbCBzZW5kIHRpbWUgb2YgbmV4dCBwYWNrZXQKLSAqIEBjY2lkM2hjdHhfZGVsdGEgLSBTZW5kIHRpbWVyIGRlbHRhCisgKiBAY2NpZDNoY3R4X2RlbHRhIC0gU2VuZCB0aW1lciBkZWx0YSAoUkZDIDM0NDgsIDQuNikgaW4gdXNlY3MKICAqIEBjY2lkM2hjdHhfaGlzdCAtIFBhY2tldCBoaXN0b3J5CiAgKiBAY2NpZDNoY3R4X29wdGlvbnNfcmVjZWl2ZWQgLSBQYXJzZWQgc2V0IG9mIHJldHJpZXZlZCBvcHRpb25zCiAgKi8KQEAgLTEwNSw3ICsxMTUsNyBAQAogI2RlZmluZSBjY2lkM2hjdHhfdF9ydG8JCQljY2lkM2hjdHhfdGZyYy50ZnJjdHhfcnRvCiAjZGVmaW5lIGNjaWQzaGN0eF90X2lwaQkJCWNjaWQzaGN0eF90ZnJjLnRmcmN0eF9pcGkKIAl1MTYJCQkJY2NpZDNoY3R4X3M7Ci0gIAllbnVtIGNjaWQzX2hjX3R4X3N0YXRlcyAJY2NpZDNoY3R4X3N0YXRlOjg7CisJZW51bSBjY2lkM19oY190eF9zdGF0ZXMJCWNjaWQzaGN0eF9zdGF0ZTo4OwogCXU4CQkJCWNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudDsKIAl1OAkJCQljY2lkM2hjdHhfaWRsZTsKIAlzdHJ1Y3QgdGltZXZhbAkJCWNjaWQzaGN0eF90X2xhc3Rfd2luX2NvdW50OwpAQCAtMTE5LDcgKzEyOSw3IEBACiAKIC8qIFRGUkMgcmVjZWl2ZXIgc3RhdGVzICovCiBlbnVtIGNjaWQzX2hjX3J4X3N0YXRlcyB7Ci0gICAgICAgCVRGUkNfUlNUQVRFX05PX0RBVEEgPSAxLAorCVRGUkNfUlNUQVRFX05PX0RBVEEgPSAxLAogCVRGUkNfUlNUQVRFX0RBVEEsCiAJVEZSQ19SU1RBVEVfVEVSTSAgICA9IDEyNywKIH07CkBAIC0xNDcsMTggKzE1NywxOCBAQAogI2RlZmluZSBjY2lkM2hjcnhfeF9yZWN2CQljY2lkM2hjcnhfdGZyYy50ZnJjcnhfeF9yZWN2CiAjZGVmaW5lIGNjaWQzaGNyeF9ydHQJCQljY2lkM2hjcnhfdGZyYy50ZnJjcnhfcnR0CiAjZGVmaW5lIGNjaWQzaGNyeF9wCQkJY2NpZDNoY3J4X3RmcmMudGZyY3J4X3AKLSAgCXU2NAkJCQljY2lkM2hjcnhfc2Vxbm9fbm9ubG9zczo0OCwKKwl1NjQJCQkJY2NpZDNoY3J4X3NlcW5vX25vbmxvc3M6NDgsCiAJCQkJCWNjaWQzaGNyeF9jY3ZhbF9ub25sb3NzOjQsCiAJCQkJCWNjaWQzaGNyeF9jY3ZhbF9sYXN0X2NvdW50ZXI6NDsKIAllbnVtIGNjaWQzX2hjX3J4X3N0YXRlcwkJY2NpZDNoY3J4X3N0YXRlOjg7Ci0gIAl1MzIJCQkJY2NpZDNoY3J4X2J5dGVzX3JlY3Y7Ci0gIAlzdHJ1Y3QgdGltZXZhbAkJCWNjaWQzaGNyeF90c3RhbXBfbGFzdF9mZWVkYmFjazsKLSAgCXN0cnVjdCB0aW1ldmFsCQkJY2NpZDNoY3J4X3RzdGFtcF9sYXN0X2FjazsKKwl1MzIJCQkJY2NpZDNoY3J4X2J5dGVzX3JlY3Y7CisJc3RydWN0IHRpbWV2YWwJCQljY2lkM2hjcnhfdHN0YW1wX2xhc3RfZmVlZGJhY2s7CisJc3RydWN0IHRpbWV2YWwJCQljY2lkM2hjcnhfdHN0YW1wX2xhc3RfYWNrOwogCXN0cnVjdCBsaXN0X2hlYWQJCWNjaWQzaGNyeF9oaXN0OwogCXN0cnVjdCBsaXN0X2hlYWQJCWNjaWQzaGNyeF9saV9oaXN0OwotICAJdTE2CQkJCWNjaWQzaGNyeF9zOwotICAJdTMyCQkJCWNjaWQzaGNyeF9waW52OwotICAJdTMyCQkJCWNjaWQzaGNyeF9lbGFwc2VkX3RpbWU7CisJdTE2CQkJCWNjaWQzaGNyeF9zOworCXUzMgkJCQljY2lkM2hjcnhfcGludjsKKwl1MzIJCQkJY2NpZDNoY3J4X2VsYXBzZWRfdGltZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNjaWQzX2hjX3R4X3NvY2sgKmNjaWQzX2hjX3R4X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5jIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmMKaW5kZXggYjg3NmM5Yy4uMmU4ZWY0MiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmMKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmMKQEAgLTM2LDkgKzM2LDEwMCBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0KICNpbmNsdWRlICJwYWNrZXRfaGlzdG9yeS5oIgogCisvKgorICogCVRyYW5zbWl0dGVyIEhpc3RvcnkgUm91dGluZXMKKyAqLworc3RydWN0IGRjY3BfdHhfaGlzdCAqZGNjcF90eF9oaXN0X25ldyhjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkY2NwX3R4X2hpc3QgKmhpc3QgPSBrbWFsbG9jKHNpemVvZigqaGlzdCksIEdGUF9BVE9NSUMpOworCXN0YXRpYyBjb25zdCBjaGFyIGRjY3BfdHhfaGlzdF9tYXNrW10gPSAidHhfaGlzdF8lcyI7CisJY2hhciAqc2xhYl9uYW1lOworCisJaWYgKGhpc3QgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlzbGFiX25hbWUgPSBrbWFsbG9jKHN0cmxlbihuYW1lKSArIHNpemVvZihkY2NwX3R4X2hpc3RfbWFzaykgLSAxLAorCQkJICAgIEdGUF9BVE9NSUMpOworCWlmIChzbGFiX25hbWUgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZV9oaXN0OworCisJc3ByaW50ZihzbGFiX25hbWUsIGRjY3BfdHhfaGlzdF9tYXNrLCBuYW1lKTsKKwloaXN0LT5kY2NwdHhoX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZShzbGFiX25hbWUsCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX3R4X2hpc3RfZW50cnkpLAorCQkJCQkgICAgICAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJCQkgICAgICAgTlVMTCwgTlVMTCk7CisJaWYgKGhpc3QtPmRjY3B0eGhfc2xhYiA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlX3NsYWJfbmFtZTsKK291dDoKKwlyZXR1cm4gaGlzdDsKK291dF9mcmVlX3NsYWJfbmFtZToKKwlrZnJlZShzbGFiX25hbWUpOworb3V0X2ZyZWVfaGlzdDoKKwlrZnJlZShoaXN0KTsKKwloaXN0ID0gTlVMTDsKKwlnb3RvIG91dDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF90eF9oaXN0X25ldyk7CisKK3ZvaWQgZGNjcF90eF9oaXN0X2RlbGV0ZShzdHJ1Y3QgZGNjcF90eF9oaXN0ICpoaXN0KQoreworCWNvbnN0IGNoYXIqIG5hbWUgPSBrbWVtX2NhY2hlX25hbWUoaGlzdC0+ZGNjcHR4aF9zbGFiKTsKKworCWttZW1fY2FjaGVfZGVzdHJveShoaXN0LT5kY2NwdHhoX3NsYWIpOworCWtmcmVlKG5hbWUpOworCWtmcmVlKGhpc3QpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3R4X2hpc3RfZGVsZXRlKTsKKworc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqCisJZGNjcF90eF9oaXN0X2ZpbmRfZW50cnkoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY29uc3QgdTY0IHNlcSkKK3sKKwlzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICpwYWNrZXQgPSBOVUxMLCAqZW50cnk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBsaXN0LCBkY2NwaHR4X25vZGUpCisJCWlmIChlbnRyeS0+ZGNjcGh0eF9zZXFubyA9PSBzZXEpIHsKKwkJCXBhY2tldCA9IGVudHJ5OworCQkJYnJlYWs7CisJCX0KKworCXJldHVybiBwYWNrZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfdHhfaGlzdF9maW5kX2VudHJ5KTsKKwordm9pZCBkY2NwX3R4X2hpc3RfcHVyZ2Uoc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICplbnRyeSwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIGxpc3QsIGRjY3BodHhfbm9kZSkgeworCQlsaXN0X2RlbF9pbml0KCZlbnRyeS0+ZGNjcGh0eF9ub2RlKTsKKwkJZGNjcF90eF9oaXN0X2VudHJ5X2RlbGV0ZShoaXN0LCBlbnRyeSk7CisJfQorfQorCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3R4X2hpc3RfcHVyZ2UpOworCit2b2lkIGRjY3BfdHhfaGlzdF9wdXJnZV9vbGRlcihzdHJ1Y3QgZGNjcF90eF9oaXN0ICpoaXN0LAorCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCSAgICAgIHN0cnVjdCBkY2NwX3R4X2hpc3RfZW50cnkgKnBhY2tldCkKK3sKKwlzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlKHBhY2tldCwgbmV4dCwgbGlzdCwgZGNjcGh0eF9ub2RlKSB7CisJCWxpc3RfZGVsX2luaXQoJnBhY2tldC0+ZGNjcGh0eF9ub2RlKTsKKwkJZGNjcF90eF9oaXN0X2VudHJ5X2RlbGV0ZShoaXN0LCBwYWNrZXQpOworCX0KK30KKworRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF90eF9oaXN0X3B1cmdlX29sZGVyKTsKKworLyoKKyAqIAlSZWNlaXZlciBIaXN0b3J5IFJvdXRpbmVzCisgKi8KIHN0cnVjdCBkY2NwX3J4X2hpc3QgKmRjY3BfcnhfaGlzdF9uZXcoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgZGNjcF9yeF9oaXN0ICpoaXN0ID0ga21hbGxvYyhzaXplb2YoKmhpc3QpLCBHRlBfQVRPTUlDKTsKQEAgLTgzLDE4ICsxNzQsMjQgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9yeF9oaXN0X2RlbGV0ZSk7CiAKLXZvaWQgZGNjcF9yeF9oaXN0X3B1cmdlKHN0cnVjdCBkY2NwX3J4X2hpc3QgKmhpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCitpbnQgZGNjcF9yeF9oaXN0X2ZpbmRfZW50cnkoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY29uc3QgdTY0IHNlcSwKKwkJCSAgICB1OCAqY2N2YWwpCiB7Ci0Jc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqZW50cnksICpuZXh0OworCXN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKnBhY2tldCA9IE5VTEwsICplbnRyeTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgbGlzdCwgZGNjcGhyeF9ub2RlKSB7Ci0JCWxpc3RfZGVsX2luaXQoJmVudHJ5LT5kY2NwaHJ4X25vZGUpOwotCQlrbWVtX2NhY2hlX2ZyZWUoaGlzdC0+ZGNjcHJ4aF9zbGFiLCBlbnRyeSk7Ci0JfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QsIGRjY3Bocnhfbm9kZSkKKwkJaWYgKGVudHJ5LT5kY2NwaHJ4X3NlcW5vID09IHNlcSkgeworCQkJcGFja2V0ID0gZW50cnk7CisJCQlicmVhazsKKwkJfQorCisJaWYgKHBhY2tldCkKKwkJKmNjdmFsID0gcGFja2V0LT5kY2NwaHJ4X2NjdmFsOworCisJcmV0dXJuIHBhY2tldCAhPSBOVUxMOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChkY2NwX3J4X2hpc3RfcHVyZ2UpOwotCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3J4X2hpc3RfZmluZF9lbnRyeSk7CiBzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICoKIAkJZGNjcF9yeF9oaXN0X2ZpbmRfZGF0YV9wYWNrZXQoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKQEAgLTE4NCwxMTAgKzI4MSwxOCBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3J4X2hpc3RfYWRkX3BhY2tldCk7CiAKLXN0cnVjdCBkY2NwX3R4X2hpc3QgKmRjY3BfdHhfaGlzdF9uZXcoY29uc3QgY2hhciAqbmFtZSkKK3ZvaWQgZGNjcF9yeF9oaXN0X3B1cmdlKHN0cnVjdCBkY2NwX3J4X2hpc3QgKmhpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7Ci0Jc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCA9IGttYWxsb2Moc2l6ZW9mKCpoaXN0KSwgR0ZQX0FUT01JQyk7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgZGNjcF90eF9oaXN0X21hc2tbXSA9ICJ0eF9oaXN0XyVzIjsKLQljaGFyICpzbGFiX25hbWU7CisJc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqZW50cnksICpuZXh0OwogCi0JaWYgKGhpc3QgPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0KLQlzbGFiX25hbWUgPSBrbWFsbG9jKHN0cmxlbihuYW1lKSArIHNpemVvZihkY2NwX3R4X2hpc3RfbWFzaykgLSAxLAotCQkJICAgIEdGUF9BVE9NSUMpOwotCWlmIChzbGFiX25hbWUgPT0gTlVMTCkKLQkJZ290byBvdXRfZnJlZV9oaXN0OwotCi0Jc3ByaW50ZihzbGFiX25hbWUsIGRjY3BfdHhfaGlzdF9tYXNrLCBuYW1lKTsKLQloaXN0LT5kY2NwdHhoX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZShzbGFiX25hbWUsCi0JCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX3R4X2hpc3RfZW50cnkpLAotCQkJCQkgICAgICAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLAotCQkJCQkgICAgICAgTlVMTCwgTlVMTCk7Ci0JaWYgKGhpc3QtPmRjY3B0eGhfc2xhYiA9PSBOVUxMKQotCQlnb3RvIG91dF9mcmVlX3NsYWJfbmFtZTsKLW91dDoKLQlyZXR1cm4gaGlzdDsKLW91dF9mcmVlX3NsYWJfbmFtZToKLQlrZnJlZShzbGFiX25hbWUpOwotb3V0X2ZyZWVfaGlzdDoKLQlrZnJlZShoaXN0KTsKLQloaXN0ID0gTlVMTDsKLQlnb3RvIG91dDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF90eF9oaXN0X25ldyk7Ci0KLXZvaWQgZGNjcF90eF9oaXN0X2RlbGV0ZShzdHJ1Y3QgZGNjcF90eF9oaXN0ICpoaXN0KQotewotCWNvbnN0IGNoYXIqIG5hbWUgPSBrbWVtX2NhY2hlX25hbWUoaGlzdC0+ZGNjcHR4aF9zbGFiKTsKLQotCWttZW1fY2FjaGVfZGVzdHJveShoaXN0LT5kY2NwdHhoX3NsYWIpOwotCWtmcmVlKG5hbWUpOwotCWtmcmVlKGhpc3QpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChkY2NwX3R4X2hpc3RfZGVsZXRlKTsKLQotc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqCi0JZGNjcF90eF9oaXN0X2ZpbmRfZW50cnkoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY29uc3QgdTY0IHNlcSkKLXsKLQlzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICpwYWNrZXQgPSBOVUxMLCAqZW50cnk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBsaXN0LCBkY2NwaHR4X25vZGUpCi0JCWlmIChlbnRyeS0+ZGNjcGh0eF9zZXFubyA9PSBzZXEpIHsKLQkJCXBhY2tldCA9IGVudHJ5OwotCQkJYnJlYWs7Ci0JCX0KLQotCXJldHVybiBwYWNrZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfdHhfaGlzdF9maW5kX2VudHJ5KTsKLQotaW50IGRjY3BfcnhfaGlzdF9maW5kX2VudHJ5KGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGNvbnN0IHU2NCBzZXEsCi0gICB1OCAqY2N2YWwpCi17Ci0Jc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqcGFja2V0ID0gTlVMTCwgKmVudHJ5OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbGlzdCwgZGNjcGhyeF9ub2RlKQotCQlpZiAoZW50cnktPmRjY3Bocnhfc2Vxbm8gPT0gc2VxKSB7Ci0JCQlwYWNrZXQgPSBlbnRyeTsKLQkJCWJyZWFrOwotCQl9Ci0KLQlpZiAocGFja2V0KQotCQkqY2N2YWwgPSBwYWNrZXQtPmRjY3BocnhfY2N2YWw7Ci0KLQlyZXR1cm4gcGFja2V0ICE9IE5VTEw7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfcnhfaGlzdF9maW5kX2VudHJ5KTsKLQotdm9pZCBkY2NwX3R4X2hpc3RfcHVyZ2Vfb2xkZXIoc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCwKLQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCi0JCQkgICAgICBzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICpwYWNrZXQpCi17Ci0Jc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqbmV4dDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9jb250aW51ZShwYWNrZXQsIG5leHQsIGxpc3QsIGRjY3BodHhfbm9kZSkgewotCQlsaXN0X2RlbF9pbml0KCZwYWNrZXQtPmRjY3BodHhfbm9kZSk7Ci0JCWRjY3BfdHhfaGlzdF9lbnRyeV9kZWxldGUoaGlzdCwgcGFja2V0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIGxpc3QsIGRjY3Bocnhfbm9kZSkgeworCQlsaXN0X2RlbF9pbml0KCZlbnRyeS0+ZGNjcGhyeF9ub2RlKTsKKwkJa21lbV9jYWNoZV9mcmVlKGhpc3QtPmRjY3ByeGhfc2xhYiwgZW50cnkpOwogCX0KIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF90eF9oaXN0X3B1cmdlX29sZGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfcnhfaGlzdF9wdXJnZSk7CiAKLXZvaWQgZGNjcF90eF9oaXN0X3B1cmdlKHN0cnVjdCBkY2NwX3R4X2hpc3QgKmhpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCi17Ci0Jc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqZW50cnksICpuZXh0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCBsaXN0LCBkY2NwaHR4X25vZGUpIHsKLQkJbGlzdF9kZWxfaW5pdCgmZW50cnktPmRjY3BodHhfbm9kZSk7Ci0JCWRjY3BfdHhfaGlzdF9lbnRyeV9kZWxldGUoaGlzdCwgZW50cnkpOwotCX0KLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF90eF9oaXN0X3B1cmdlKTsKIAogTU9EVUxFX0FVVEhPUigiSWFuIE1jRG9uYWxkIDxpYW4ubWNkb25hbGRAamFuZGkuY28ubno+LCAiCiAJICAgICAgIkFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBnaG9zdHByb3RvY29scy5uZXQ+Iik7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9saWIvcGFja2V0X2hpc3RvcnkuaCBiL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5oCmluZGV4IDlhOGJjZjIuLjFmOTYwYzEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5oCisrKyBiL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5oCkBAIC00OSw0MyArNDksMjcgQEAKICNkZWZpbmUgVEZSQ19XSU5fQ09VTlRfUEVSX1JUVAkgNAogI2RlZmluZSBURlJDX1dJTl9DT1VOVF9MSU1JVAkxNgogCisvKgorICogCVRyYW5zbWl0dGVyIEhpc3RvcnkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkZWNsYXJhdGlvbnMKKyAqLwogc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZCBkY2NwaHR4X25vZGU7CiAJdTY0CQkgZGNjcGh0eF9zZXFubzo0OCwKLQkJCSBkY2NwaHR4X2NjdmFsOjQsCiAJCQkgZGNjcGh0eF9zZW50OjE7CiAJdTMyCQkgZGNjcGh0eF9ydHQ7CiAJc3RydWN0IHRpbWV2YWwJIGRjY3BodHhfdHN0YW1wOwogfTsKIAotc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBkY2NwaHJ4X25vZGU7Ci0JdTY0CQkgZGNjcGhyeF9zZXFubzo0OCwKLQkJCSBkY2NwaHJ4X2NjdmFsOjQsCi0JCQkgZGNjcGhyeF90eXBlOjQ7Ci0JdTMyCQkgZGNjcGhyeF9uZHA7IC8qIEluIGZhY3QgaXQgaXMgZnJvbSA4IHRvIDI0IGJpdHMgKi8KLQlzdHJ1Y3QgdGltZXZhbAkgZGNjcGhyeF90c3RhbXA7Ci19OwotCiBzdHJ1Y3QgZGNjcF90eF9oaXN0IHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqZGNjcHR4aF9zbGFiOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBkY2NwX3R4X2hpc3QgKmRjY3BfdHhfaGlzdF9uZXcoY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gdm9pZCBkY2NwX3R4X2hpc3RfZGVsZXRlKHN0cnVjdCBkY2NwX3R4X2hpc3QgKmhpc3QpOwotCi1zdHJ1Y3QgZGNjcF9yeF9oaXN0IHsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqZGNjcHJ4aF9zbGFiOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBkY2NwX3J4X2hpc3QgKmRjY3BfcnhfaGlzdF9uZXcoY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gdm9pZCBkY2NwX3J4X2hpc3RfZGVsZXRlKHN0cnVjdCBkY2NwX3J4X2hpc3QgKmhpc3QpOwotZXh0ZXJuIHN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKgotCQlkY2NwX3J4X2hpc3RfZmluZF9kYXRhX3BhY2tldChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKK2V4dGVybiB2b2lkIAkJICAgIGRjY3BfdHhfaGlzdF9kZWxldGUoc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqCi0JCWRjY3BfdHhfaGlzdF9lbnRyeV9uZXcoc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCwKLQkJCQkgICAgICAgY29uc3QgZ2ZwX3QgcHJpbykKKwkJCWRjY3BfdHhfaGlzdF9lbnRyeV9uZXcoc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCwKKwkJCQkJICAgICAgIGNvbnN0IGdmcF90IHByaW8pCiB7CiAJc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jKGhpc3QtPmRjY3B0eGhfc2xhYiwKIAkJCQkJCQkgICAgcHJpbyk7CkBAIC05NiwzNCArODAsOCBAQAogCXJldHVybiBlbnRyeTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRjY3BfdHhfaGlzdF9lbnRyeV9kZWxldGUoc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCwKLQkJCQkJICAgICBzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICplbnRyeSkKLXsKLQlpZiAoZW50cnkgIT0gTlVMTCkKLQkJa21lbV9jYWNoZV9mcmVlKGhpc3QtPmRjY3B0eGhfc2xhYiwgZW50cnkpOwotfQotCi1leHRlcm4gc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqCi0JCQlkY2NwX3R4X2hpc3RfZmluZF9lbnRyeShjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAotCQkJCQkJY29uc3QgdTY0IHNlcSk7Ci1leHRlcm4gaW50IGRjY3BfcnhfaGlzdF9maW5kX2VudHJ5KGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGNvbnN0IHU2NCBzZXEsCi0gICB1OCAqY2N2YWwpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGNjcF90eF9oaXN0X2FkZF9lbnRyeShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAotCQkJCQkgIHN0cnVjdCBkY2NwX3R4X2hpc3RfZW50cnkgKmVudHJ5KQotewotCWxpc3RfYWRkKCZlbnRyeS0+ZGNjcGh0eF9ub2RlLCBsaXN0KTsKLX0KLQotZXh0ZXJuIHZvaWQgZGNjcF90eF9oaXN0X3B1cmdlX29sZGVyKHN0cnVjdCBkY2NwX3R4X2hpc3QgKmhpc3QsCi0JCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAotCQkJCSAgICAgc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqbmV4dCk7Ci0KLWV4dGVybiB2b2lkIGRjY3BfdHhfaGlzdF9wdXJnZShzdHJ1Y3QgZGNjcF90eF9oaXN0ICpoaXN0LAotCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOwotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX3R4X2hpc3RfZW50cnkgKgotCQlkY2NwX3R4X2hpc3RfaGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQorCQkJZGNjcF90eF9oaXN0X2hlYWQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKIAlzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICpoZWFkID0gTlVMTDsKIApAQCAtMTMzLDEyICs5MSw1NSBAQAogCXJldHVybiBoZWFkOwogfQogCitleHRlcm4gc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqCisJCQlkY2NwX3R4X2hpc3RfZmluZF9lbnRyeShjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCQkJY29uc3QgdTY0IHNlcSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3R4X2hpc3RfYWRkX2VudHJ5KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJCSAgc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqZW50cnkpCit7CisJbGlzdF9hZGQoJmVudHJ5LT5kY2NwaHR4X25vZGUsIGxpc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF90eF9oaXN0X2VudHJ5X2RlbGV0ZShzdHJ1Y3QgZGNjcF90eF9oaXN0ICpoaXN0LAorCQkJCQkgICAgIHN0cnVjdCBkY2NwX3R4X2hpc3RfZW50cnkgKmVudHJ5KQoreworCWlmIChlbnRyeSAhPSBOVUxMKQorCQlrbWVtX2NhY2hlX2ZyZWUoaGlzdC0+ZGNjcHR4aF9zbGFiLCBlbnRyeSk7Cit9CisKK2V4dGVybiB2b2lkIGRjY3BfdHhfaGlzdF9wdXJnZShzdHJ1Y3QgZGNjcF90eF9oaXN0ICpoaXN0LAorCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOworCitleHRlcm4gdm9pZCBkY2NwX3R4X2hpc3RfcHVyZ2Vfb2xkZXIoc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCwKKwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJICAgICBzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICpuZXh0KTsKKworLyoKKyAqIAlSZWNlaXZlciBIaXN0b3J5IGRhdGEgc3RydWN0dXJlcyBhbmQgZGVjbGFyYXRpb25zCisgKi8KK3N0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgZGNjcGhyeF9ub2RlOworCXU2NAkJIGRjY3Bocnhfc2Vxbm86NDgsCisJCQkgZGNjcGhyeF9jY3ZhbDo0LAorCQkJIGRjY3BocnhfdHlwZTo0OworCXUzMgkJIGRjY3BocnhfbmRwOyAvKiBJbiBmYWN0IGl0IGlzIGZyb20gOCB0byAyNCBiaXRzICovCisJc3RydWN0IHRpbWV2YWwJIGRjY3BocnhfdHN0YW1wOworfTsKKworc3RydWN0IGRjY3BfcnhfaGlzdCB7CisJc3RydWN0IGttZW1fY2FjaGUgKmRjY3ByeGhfc2xhYjsKK307CisKK2V4dGVybiBzdHJ1Y3QgZGNjcF9yeF9oaXN0ICpkY2NwX3J4X2hpc3RfbmV3KGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgCQlkY2NwX3J4X2hpc3RfZGVsZXRlKHN0cnVjdCBkY2NwX3J4X2hpc3QgKmhpc3QpOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKgotCQkgICAgIGRjY3BfcnhfaGlzdF9lbnRyeV9uZXcoc3RydWN0IGRjY3BfcnhfaGlzdCAqaGlzdCwKLQkJCQkgICAgIAkgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrLCAKLQkJCQkgICAgIAkgICAgY29uc3QgdTMyIG5kcCwgCi0JCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgICAgY29uc3QgZ2ZwX3QgcHJpbykKKwkJCWRjY3BfcnhfaGlzdF9lbnRyeV9uZXcoc3RydWN0IGRjY3BfcnhfaGlzdCAqaGlzdCwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkgICAgIAkgICAgICAgY29uc3QgdTMyIG5kcCwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgICBjb25zdCBnZnBfdCBwcmlvKQogewogCXN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKmVudHJ5ID0ga21lbV9jYWNoZV9hbGxvYyhoaXN0LT5kY2NwcnhoX3NsYWIsCiAJCQkJCQkJICAgIHByaW8pOwpAQCAtMTU2LDYgKzE1NywyOCBAQAogCXJldHVybiBlbnRyeTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICoKKwkJCWRjY3BfcnhfaGlzdF9oZWFkKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqaGVhZCA9IE5VTEw7CisKKwlpZiAoIWxpc3RfZW1wdHkobGlzdCkpCisJCWhlYWQgPSBsaXN0X2VudHJ5KGxpc3QtPm5leHQsIHN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnksCisJCQkJICBkY2NwaHJ4X25vZGUpOworCXJldHVybiBoZWFkOworfQorCitleHRlcm4gaW50IGRjY3BfcnhfaGlzdF9maW5kX2VudHJ5KGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGNvbnN0IHU2NCBzZXEsCisgICAJCQkJICAgdTggKmNjdmFsKTsKK2V4dGVybiBzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICoKKwkJZGNjcF9yeF9oaXN0X2ZpbmRfZGF0YV9wYWNrZXQoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CisKK2V4dGVybiB2b2lkIGRjY3BfcnhfaGlzdF9hZGRfcGFja2V0KHN0cnVjdCBkY2NwX3J4X2hpc3QgKmhpc3QsCisJCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJ4X2xpc3QsCisJCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpX2xpc3QsCisJCQkJICAgIHN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKnBhY2tldCwKKwkJCQkgICAgdTY0IG5vbmxvc3Nfc2Vxbm8pOworCiBzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF9yeF9oaXN0X2VudHJ5X2RlbGV0ZShzdHJ1Y3QgZGNjcF9yeF9oaXN0ICpoaXN0LAogCQkJCQkgICAgIHN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKmVudHJ5KQogewpAQCAtMTY2LDE3ICsxODksNiBAQAogZXh0ZXJuIHZvaWQgZGNjcF9yeF9oaXN0X3B1cmdlKHN0cnVjdCBkY2NwX3J4X2hpc3QgKmhpc3QsCiAJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqCi0JCWRjY3BfcnhfaGlzdF9oZWFkKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCi17Ci0Jc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqaGVhZCA9IE5VTEw7Ci0KLQlpZiAoIWxpc3RfZW1wdHkobGlzdCkpCi0JCWhlYWQgPSBsaXN0X2VudHJ5KGxpc3QtPm5leHQsIHN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnksCi0JCQkJICBkY2NwaHJ4X25vZGUpOwotCXJldHVybiBoZWFkOwotfQotCiBzdGF0aWMgaW5saW5lIGludAogCWRjY3BfcnhfaGlzdF9lbnRyeV9kYXRhX3BhY2tldChjb25zdCBzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICplbnRyeSkKIHsKQEAgLTE4NCwxMiArMTk2LDYgQEAKIAkgICAgICAgZW50cnktPmRjY3BocnhfdHlwZSA9PSBEQ0NQX1BLVF9EQVRBQUNLOwogfQogCi1leHRlcm4gdm9pZCBkY2NwX3J4X2hpc3RfYWRkX3BhY2tldChzdHJ1Y3QgZGNjcF9yeF9oaXN0ICpoaXN0LAotCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnJ4X2xpc3QsCi0JCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqbGlfbGlzdCwKLQkJCQkgICBzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICpwYWNrZXQsCi0JCQkJICAgdTY0IG5vbmxvc3Nfc2Vxbm8pOwotCiBleHRlcm4gdTY0IGRjY3BfcnhfaGlzdF9kZXRlY3RfbG9zcyhzdHJ1Y3QgbGlzdF9oZWFkICpyeF9saXN0LAogCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaV9saXN0LCB1OCAqd2luX2xvc3MpOwogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9saWIvdGZyYy5oIGIvbmV0L2RjY3AvY2NpZHMvbGliL3RmcmMuaAppbmRleCA0NWYzMGY1Li5mYWY1ZjdlIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9saWIvdGZyYy5oCisrKyBiL25ldC9kY2NwL2NjaWRzL2xpYi90ZnJjLmgKQEAgLTEzLDggKzEzLDI5IEBACiAgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisvKiBpbnRlZ2VyLWFyaXRobWV0aWMgZGl2aXNpb25zIG9mIHR5cGUgKGEgKiAxMDAwMDAwKS9iICovCitzdGF0aWMgaW5saW5lIHU2NCBzY2FsZWRfZGl2KHU2NCBhLCB1MzIgYikKK3sKKwlCVUdfT04oYj09MCk7CisJYSAqPSAxMDAwMDAwOworCWRvX2RpdihhLCBiKTsKKwlyZXR1cm4gYTsKK30KKworc3RhdGljIGlubGluZSB1MzIgc2NhbGVkX2RpdjMyKHU2NCBhLCB1MzIgYikKK3sKKwl1NjQgcmVzdWx0ID0gc2NhbGVkX2RpdihhLCBiKTsKKworCWlmIChyZXN1bHQgPiBVSU5UX01BWCkgeworCQlEQ0NQX0NSSVQoIk92ZXJmbG93OiBhKCVsbHUpL2IoJXUpID4gfjBVIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylhLCBiKTsKKwkJcmV0dXJuIFVJTlRfTUFYOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQogCiBleHRlcm4gdTMyIHRmcmNfY2FsY194KHUxNiBzLCB1MzIgUiwgdTMyIHApOwogZXh0ZXJuIHUzMiB0ZnJjX2NhbGNfeF9yZXZlcnNlX2xvb2t1cCh1MzIgZnZhbHVlKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi90ZnJjX2VxdWF0aW9uLmMgYi9uZXQvZGNjcC9jY2lkcy9saWIvdGZyY19lcXVhdGlvbi5jCmluZGV4IGRkYWMyYzUuLjkwMDA5ZmQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2xpYi90ZnJjX2VxdWF0aW9uLmMKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL3RmcmNfZXF1YXRpb24uYwpAQCAtMTMsNyArMTMsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlICIuLi8uLi9kY2NwLmgiCiAjaW5jbHVkZSAidGZyYy5oIgogCkBAIC02MTYsMTUgKzYxNSwxMiBAQAogICogIEBSOiBSVFQgICAgICAgICAgICAgICAgICBzY2FsZWQgYnkgMTAwMDAwMCAgIChpLmUuLCBtaWNyb3NlY29uZHMpCiAgKiAgQHA6IGxvc3MgcmF0aW8gZXN0aW1hdGUgIHNjYWxlZCBieSAxMDAwMDAwCiAgKiAgUmV0dXJucyBYX2NhbGMgICAgICAgICAgIGluIGJ5dGVzIHBlciBzZWNvbmQgKG5vdCBzY2FsZWQpLgotICoKLSAqIE5vdGU6IERPIE5PVCBhbHRlciB0aGlzIGNvZGUgdW5sZXNzIHlvdSBydW4gdGVzdCBjYXNlcyBhZ2FpbnN0IGl0LAotICogICAgICAgYXMgdGhlIGNvZGUgaGFzIGJlZW4gb3B0aW1pemVkIHRvIHN0b3AgdW5kZXJmbG93L292ZXJmbG93LgogICovCiB1MzIgdGZyY19jYWxjX3godTE2IHMsIHUzMiBSLCB1MzIgcCkKIHsKLQlpbnQgaW5kZXg7CisJdTE2IGluZGV4OwogCXUzMiBmOwotCXU2NCB0bXAxLCB0bXAyOworCXU2NCByZXN1bHQ7CiAKIAkvKiBjaGVjayBhZ2FpbnN0IGludmFsaWQgcGFyYW1ldGVycyBhbmQgZGl2aWRlLWJ5LXplcm8gICAqLwogCUJVR19PTihwID4gIDEwMDAwMDApOwkJLyogcCBtdXN0IG5vdCBleGNlZWQgMTAwJSAgICovCkBAIC02NTAsMTUgKzY0NiwxNyBAQAogCQlmID0gdGZyY19jYWxjX3hfbG9va3VwW2luZGV4XVswXTsKIAl9CiAKLQkvKiBUaGUgZm9sbG93aW5nIGNvbXB1dGVzIFggPSBzLyhSKmYocCkpIGluIGJ5dGVzIHBlciBzZWNvbmQuIFNpbmNlIGYocCkKLQkgKiBhbmQgUiBhcmUgYm90aCBzY2FsZWQgYnkgMTAwMDAwMCwgd2UgbmVlZCB0byBtdWx0aXBseSBieSAxMDAwMDAwXjIuCi0JICogPT0+IERPIE5PVCBhbHRlciB0aGlzIHVubGVzcyB5b3UgdGVzdCBhZ2FpbnN0IG92ZXJmbG93IG9uIDMyIGJpdCAgICovCi0JdG1wMSA9ICgodTY0KXMgKiAxMDAwMDAwMDApOwotCXRtcDIgPSAoKHU2NClSICogKHU2NClmKTsKLQlkb19kaXYodG1wMiwgMTAwMDApOwotCWRvX2Rpdih0bXAxLCB0bXAyKTsgCi0KLQlyZXR1cm4gKHUzMil0bXAxOyAKKwkvKgorCSAqIENvbXB1dGUgWCA9IHMvKFIqZihwKSkgaW4gYnl0ZXMgcGVyIHNlY29uZC4KKwkgKiBTaW5jZSBmKHApIGFuZCBSIGFyZSBib3RoIHNjYWxlZCBieSAxMDAwMDAwLCB3ZSBuZWVkIHRvIG11bHRpcGx5IGJ5CisJICogMTAwMDAwMF4yLiBUbyBhdm9pZCBvdmVyZmxvdywgdGhlIHJlc3VsdCBpcyBjb21wdXRlZCBpbiB0d28gc3RhZ2VzLgorCSAqIFRoaXMgd29ya3MgdW5kZXIgYWxtb3N0IGFsbCByZWFzb25hYmxlIG9wZXJhdGlvbmFsIGNvbmRpdGlvbnMsIGZvciBhCisJICogd2lkZSByYW5nZSBvZiBwYXJhbWV0ZXJzLiBZZXQsIHNob3VsZCBzb21lIHN0cmFuZ2UgY29tYmluYXRpb24gb2YKKwkgKiBwYXJhbWV0ZXJzIHJlc3VsdCBpbiBvdmVyZmxvdywgdGhlIHVzZSBvZiBzY2FsZWRfZGl2MzIgd2lsbCBjYXRjaAorCSAqIHRoaXMgYW5kIHJldHVybiBVSU5UX01BWCAtIHdoaWNoIGlzIGEgbG9naWNhbGx5IGFkZXF1YXRlIGNvbnNlcXVlbmNlLgorCSAqLworCXJlc3VsdCA9IHNjYWxlZF9kaXYocywgUik7CisJcmV0dXJuIHNjYWxlZF9kaXYzMihyZXN1bHQsIGYpOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTCh0ZnJjX2NhbGNfeCk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9kY2NwLmggYi9uZXQvZGNjcC9kY2NwLmgKaW5kZXggNjg4ODY5OC4uYTA5MDBiZiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZGNjcC5oCisrKyBiL25ldC9kY2NwL2RjY3AuaApAQCAtODAsOCArODAsNiBAQAogCiAjZGVmaW5lIERDQ1BfUlRPX01BWCAoKHVuc2lnbmVkKSgxMjAgKiBIWikpIC8qIEZJWE1FOiB1c2luZyBUQ1AgdmFsdWUgKi8KIAotI2RlZmluZSBEQ0NQX1hNSVRfVElNRU8gMzAwMDAgLyogVGltZS9tc2VjcyBmb3IgYmxvY2tpbmcgdHJhbnNtaXQgcGVyIHBhY2tldCAqLwotCiAvKiBzeXNjdGwgdmFyaWFibGVzIGZvciBEQ0NQICovCiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXM7CiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9yZXRyaWVzMTsKQEAgLTQzNCw2ICs0MzIsNyBAQAogCQl0di0+dHZfc2VjLS07CiAJCXR2LT50dl91c2VjICs9IFVTRUNfUEVSX1NFQzsKIAl9CisJRENDUF9CVUdfT04odHYtPnR2X3NlYyA8IDApOwogfQogCiAjaWZkZWYgQ09ORklHX1NZU0NUTApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZmVhdC5jIGIvbmV0L2RjY3AvZmVhdC5jCmluZGV4IDRkYzQ4N2YuLjk1YjY5MjcgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2ZlYXQuYworKysgYi9uZXQvZGNjcC9mZWF0LmMKQEAgLTMyOSw3ICszMjksNyBAQAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgRENDUE9fQ0hBTkdFX0w6IG9wdC0+ZGNjcG9wX3R5cGUgPSBEQ0NQT19DT05GSVJNX1I7IGJyZWFrOwogCWNhc2UgRENDUE9fQ0hBTkdFX1I6IG9wdC0+ZGNjcG9wX3R5cGUgPSBEQ0NQT19DT05GSVJNX0w7IGJyZWFrOwotCWRlZmF1bHQ6IAkgICAgIERDQ1BfV0FSTigiaW52YWxpZCB0eXBlICVkXG4iLCB0eXBlKTsgcmV0dXJuOworCWRlZmF1bHQ6CSAgICAgRENDUF9XQVJOKCJpbnZhbGlkIHR5cGUgJWRcbiIsIHR5cGUpOyByZXR1cm47CiAKIAl9CiAJb3B0LT5kY2Nwb3BfZmVhdCA9IGZlYXR1cmU7CkBAIC00MjcsNyArNDI3LDcgQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIERDQ1BPX0NPTkZJUk1fTDogdCA9IERDQ1BPX0NIQU5HRV9SOyBicmVhazsKIAljYXNlIERDQ1BPX0NPTkZJUk1fUjogdCA9IERDQ1BPX0NIQU5HRV9MOyBicmVhazsKLQlkZWZhdWx0OiAJICAgICAgRENDUF9XQVJOKCJpbnZhbGlkIHR5cGUgJWRcbiIsIHR5cGUpOworCWRlZmF1bHQ6CSAgICAgIERDQ1BfV0FSTigiaW52YWxpZCB0eXBlICVkXG4iLCB0eXBlKTsKIAkJCSAgICAgIHJldHVybiAxOwogCiAJfQpAQCAtNjEwLDcgKzYxMCw3IEBACiAJY2FzZSBEQ0NQT19DSEFOR0VfUjogIHJldHVybigiQ2hhbmdlUiIpOwogCWNhc2UgRENDUE9fQ09ORklSTV9SOiByZXR1cm4oIkNvbmZpcm1SIik7CiAJLyogdGhlIGZvbGxvd2luZyBjYXNlIG11c3Qgbm90IGFwcGVhciBpbiBmZWF0dXJlIG5lZ290YXRpb24gICovCi0JZGVmYXVsdDogCSAgICAgIGRjY3BfcHJfZGVidWcoInVua25vd24gdHlwZSAlZCBbQlVHIV1cbiIsIHR5cGUpOworCWRlZmF1bHQ6CSAgICAgIGRjY3BfcHJfZGVidWcoInVua25vd24gdHlwZSAlZCBbQlVHIV1cbiIsIHR5cGUpOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lucHV0LmMgYi9uZXQvZGNjcC9pbnB1dC5jCmluZGV4IDczNzFhMmYuLjU2NWJjODAgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lucHV0LmMKKysrIGIvbmV0L2RjY3AvaW5wdXQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgbmV0L2RjY3AvaW5wdXQuYwotICogCisgKgogICogIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEQ0NQIHByb3RvY29sCiAgKiAgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CiAgKgpAQCAtODIsNyArODIsNyBAQAogCSAqCSAgT3RoZXJ3aXNlLAogCSAqCSAgICAgRHJvcCBwYWNrZXQgYW5kIHJldHVybgogCSAqLwotCWlmIChkaC0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9TWU5DIHx8IAorCWlmIChkaC0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9TWU5DIHx8CiAJICAgIGRoLT5kY2NwaF90eXBlID09IERDQ1BfUEtUX1NZTkNBQ0spIHsKIAkJaWYgKGJldHdlZW40OChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxLAogCQkJICAgICAgZHAtPmRjY3BzX2F3bCwgZHAtPmRjY3BzX2F3aCkgJiYKQEAgLTE4NSw4ICsxODUsOCBAQAogCQlkY2NwX3Jjdl9jbG9zZShzaywgc2tiKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBEQ0NQX1BLVF9SRVFVRVNUOgotCQkvKiBTdGVwIDcgCi0gICAgICAgICAgICAJICogICBvciAoUy5pc19zZXJ2ZXIgYW5kIFAudHlwZSA9PSBSZXNwb25zZSkKKwkJLyogU3RlcCA3CisJCSAqICAgb3IgKFMuaXNfc2VydmVyIGFuZCBQLnR5cGUgPT0gUmVzcG9uc2UpCiAJCSAqICAgb3IgKFMuaXNfY2xpZW50IGFuZCBQLnR5cGUgPT0gUmVxdWVzdCkKIAkJICogICBvciAoUy5zdGF0ZSA+PSBPUEVOIGFuZCBQLnR5cGUgPT0gUmVxdWVzdAogCQkgKglhbmQgUC5zZXFubyA+PSBTLk9TUikKQEAgLTI0OCw4ICsyNDgsMTggQEAKIAkJCSAgICBEQ0NQX0FDS1ZFQ19TVEFURV9SRUNFSVZFRCkpCiAJCWdvdG8gZGlzY2FyZDsKIAotCWNjaWRfaGNfcnhfcGFja2V0X3JlY3YoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrLCBza2IpOwotCWNjaWRfaGNfdHhfcGFja2V0X3JlY3YoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCBza2IpOworCS8qCisJICogRGVsaXZlciB0byB0aGUgQ0NJRCBtb2R1bGUgaW4gY2hhcmdlLgorCSAqIEZJWE1FOiBDdXJyZW50bHkgRENDUCBvcGVyYXRlcyBvbmUtZGlyZWN0aW9uYWwgb25seSwgaS5lLiBhIGxpc3RlbmluZworCSAqICAgICAgICBzZXJ2ZXIgaXMgbm90IGF0IHRoZSBzYW1lIHRpbWUgYSBjb25uZWN0aW5nIGNsaWVudC4gVGhlcmUgaXMKKwkgKiAgICAgICAgbm90IG11Y2ggc2Vuc2UgaW4gZGVsaXZlcmluZyB0byBib3RoIHJ4L3R4IHNpZGVzIGF0IHRoZSBtb21lbnQKKwkgKiAgICAgICAgKG9ubHkgb25lIGlzIGFjdGl2ZSBhdCBhIHRpbWUpOyB3aGVuIG1vdmluZyB0byBiaWRpcmVjdGlvbmFsCisJICogICAgICAgIHNlcnZpY2UsIHRoaXMgbmVlZHMgdG8gYmUgcmV2aXNlZC4KKwkgKi8KKwlpZiAoZGNjcF9zayhzayktPmRjY3BzX3JvbGUgPT0gRENDUF9ST0xFX1NFUlZFUikKKwkJY2NpZF9oY19yeF9wYWNrZXRfcmVjdihkcC0+ZGNjcHNfaGNfcnhfY2NpZCwgc2ssIHNrYik7CisJZWxzZQorCQljY2lkX2hjX3R4X3BhY2tldF9yZWN2KGRwLT5kY2Nwc19oY190eF9jY2lkLCBzaywgc2tiKTsKIAogCXJldHVybiBfX2RjY3BfcmN2X2VzdGFibGlzaGVkKHNrLCBza2IsIGRoLCBsZW4pOwogZGlzY2FyZDoKQEAgLTI2NCw3ICsyNzQsNyBAQAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCwKIAkJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGxlbikKIHsKLQkvKiAKKwkvKgogCSAqICBTdGVwIDQ6IFByZXBhcmUgc2VxdWVuY2UgbnVtYmVycyBpbiBSRVFVRVNUCiAJICogICAgIElmIFMuc3RhdGUgPT0gUkVRVUVTVCwKIAkgKgkgIElmIChQLnR5cGUgPT0gUmVzcG9uc2Ugb3IgUC50eXBlID09IFJlc2V0KQpAQCAtMzMyLDcgKzM0Miw3IEBACiAJCSAqCSAgICAgIGZyb20gdGhlIFJlc3BvbnNlICogLwogCQkgKgkgIFMuc3RhdGUgOj0gUEFSVE9QRU4KIAkJICoJICBTZXQgUEFSVE9QRU4gdGltZXIKLQkJICogCSAgQ29udGludWUgd2l0aCBTLnN0YXRlID09IFBBUlRPUEVOCisJCSAqCSAgQ29udGludWUgd2l0aCBTLnN0YXRlID09IFBBUlRPUEVOCiAJCSAqCSAgLyAqIFN0ZXAgMTIgd2lsbCBzZW5kIHRoZSBBY2sgY29tcGxldGluZyB0aGUKIAkJICoJICAgICAgdGhyZWUtd2F5IGhhbmRzaGFrZSAqIC8KIAkJICovCkBAIC0zNjMsNyArMzczLDcgQEAKIAkJCSAqLwogCQkJX19rZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiAwOwotCQl9IAorCQl9CiAJCWRjY3Bfc2VuZF9hY2soc2spOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMzcxLDcgKzM4MSw3IEBACiBvdXRfaW52YWxpZF9wYWNrZXQ6CiAJLyogZGNjcF92NF9kb19yY3Ygd2lsbCBzZW5kIGEgcmVzZXQgKi8KIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9yZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX1BBQ0tFVF9FUlJPUjsKLQlyZXR1cm4gMTsgCisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgZGNjcF9yY3ZfcmVzcG9uZF9wYXJ0b3Blbl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywKQEAgLTQ3OCwxNCArNDg4LDE3IEBACiAJCWlmIChkY2ItPmRjY3BkX2Fja19zZXEgIT0gRENDUF9QS1RfV0lUSE9VVF9BQ0tfU0VRKQogCQkJZGNjcF9ldmVudF9hY2tfcmVjdihzaywgc2tiKTsKIAotIAkJaWYgKGRjY3BfbXNrKHNrKS0+ZGNjcG1zX3NlbmRfYWNrX3ZlY3RvciAmJgorCQlpZiAoZGNjcF9tc2soc2spLT5kY2NwbXNfc2VuZF9hY2tfdmVjdG9yICYmCiAJCSAgICBkY2NwX2Fja3ZlY19hZGQoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYywgc2ssCi0gCQkJCSAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEsCi0gCQkJCSAgICBEQ0NQX0FDS1ZFQ19TVEFURV9SRUNFSVZFRCkpCi0gCQkJZ290byBkaXNjYXJkOworCQkJCSAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEsCisJCQkJICAgIERDQ1BfQUNLVkVDX1NUQVRFX1JFQ0VJVkVEKSkKKwkJCWdvdG8gZGlzY2FyZDsKIAotCQljY2lkX2hjX3J4X3BhY2tldF9yZWN2KGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzaywgc2tiKTsKLQkJY2NpZF9oY190eF9wYWNrZXRfcmVjdihkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2ssIHNrYik7CisJCS8qIFhYWCBzZWUgdGhlIGNvbW1lbnRzIGluIGRjY3BfcmN2X2VzdGFibGlzaGVkIGFib3V0IHRoaXMgKi8KKwkJaWYgKGRjY3Bfc2soc2spLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9TRVJWRVIpCisJCQljY2lkX2hjX3J4X3BhY2tldF9yZWN2KGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzaywgc2tiKTsKKwkJZWxzZQorCQkJY2NpZF9oY190eF9wYWNrZXRfcmVjdihkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2ssIHNrYik7CiAJfQogCiAJLyoKQEAgLTU2Nyw3ICs1ODAsNyBAQAogCQl9CiAJfQogCi0JaWYgKCFxdWV1ZWQpIHsgCisJaWYgKCFxdWV1ZWQpIHsKIGRpc2NhcmQ6CiAJCV9fa2ZyZWVfc2tiKHNrYik7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2NC5jIGIvbmV0L2RjY3AvaXB2NC5jCmluZGV4IGZmODE2NzkuLjkwYzc0YjQgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjQuYworKysgYi9uZXQvZGNjcC9pcHY0LmMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCS8qIFdlIGRvbid0IGNoZWNrIGluIHRoZSBkZXN0ZW50cnkgaWYgcG10dSBkaXNjb3ZlcnkgaXMgZm9yYmlkZGVuCiAJICogb24gdGhpcyByb3V0ZS4gV2UganVzdCBhc3N1bWUgdGhhdCBubyBwYWNrZXRfdG9fYmlnIHBhY2tldHMKIAkgKiBhcmUgc2VuZCBiYWNrIHdoZW4gcG10dSBkaXNjb3ZlcnkgaXMgbm90IGFjdGl2ZS4KLSAgICAgCSAqIFRoZXJlIGlzIGEgc21hbGwgcmFjZSB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhpcyBmbGFnIGluIHRoZQorIAkgKiBUaGVyZSBpcyBhIHNtYWxsIHJhY2Ugd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoaXMgZmxhZyBpbiB0aGUKIAkgKiByb3V0ZSwgYnV0IEkgdGhpbmsgdGhhdCdzIGFjY2VwdGFibGUuCiAJICovCiAJaWYgKChkc3QgPSBfX3NrX2RzdF9jaGVjayhzaywgMCkpID09IE5VTEwpCkBAIC00NjcsNyArNDY3LDcgQEAKIAkJCSAgICAudWxpX3UgPSB7IC5wb3J0cyA9CiAJCQkJICAgICAgIHsgLnNwb3J0ID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfZHBvcnQsCiAJCQkJCSAuZHBvcnQgPSBkY2NwX2hkcihza2IpLT5kY2NwaF9zcG9ydCB9Ci0JCQkgICAJICAgICB9CisJCQkJICAgICB9CiAJCQkgIH07CiAKIAlzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsICZmbCk7CkBAIC01OTUsNyArNTk1LDcgQEAKIAlzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmlyZXE7CiAJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxOwogCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcTsKLSAJY29uc3QgX19iZTMyIHNlcnZpY2UgPSBkY2NwX2hkcl9yZXF1ZXN0KHNrYiktPmRjY3BoX3JlcV9zZXJ2aWNlOworCWNvbnN0IF9fYmUzMiBzZXJ2aWNlID0gZGNjcF9oZHJfcmVxdWVzdChza2IpLT5kY2NwaF9yZXFfc2VydmljZTsKIAlzdHJ1Y3QgZGNjcF9za2JfY2IgKmRjYiA9IERDQ1BfU0tCX0NCKHNrYik7CiAJX191OCByZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX1RPT19CVVNZOwogCkBAIC02MDksNyArNjA5LDcgQEAKIAlpZiAoZGNjcF9iYWRfc2VydmljZV9jb2RlKHNrLCBzZXJ2aWNlKSkgewogCQlyZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX0JBRF9TRVJWSUNFX0NPREU7CiAJCWdvdG8gZHJvcDsKLSAJfQorCX0KIAkvKgogCSAqIFRXIGJ1Y2tldHMgYXJlIGNvbnZlcnRlZCB0byBvcGVuIHJlcXVlc3RzIHdpdGhvdXQKIAkgKiBsaW1pdGF0aW9ucywgdGhleSBjb25zZXJ2ZSByZXNvdXJjZXMgYW5kIHBlZXIgaXMKQEAgLTY0NCw3ICs2NDQsNyBAQAogCWlyZXEtPnJtdF9hZGRyID0gc2tiLT5uaC5pcGgtPnNhZGRyOwogCWlyZXEtPm9wdAk9IE5VTEw7CiAKLQkvKiAKKwkvKgogCSAqIFN0ZXAgMzogUHJvY2VzcyBMSVNURU4gc3RhdGUKIAkgKgogCSAqIFNldCBTLklTUiwgUy5HU1IsIFMuU1dMLCBTLlNXSCBmcm9tIHBhY2tldCBvciBJbml0IENvb2tpZQpAQCAtODQ2LDE1ICs4NDYsMTUgQEAKIAl9CiAKIAkvKiBTdGVwIDI6Ci0JICogCUxvb2sgdXAgZmxvdyBJRCBpbiB0YWJsZSBhbmQgZ2V0IGNvcnJlc3BvbmRpbmcgc29ja2V0ICovCisJICoJTG9vayB1cCBmbG93IElEIGluIHRhYmxlIGFuZCBnZXQgY29ycmVzcG9uZGluZyBzb2NrZXQgKi8KIAlzayA9IF9faW5ldF9sb29rdXAoJmRjY3BfaGFzaGluZm8sCiAJCQkgICBza2ItPm5oLmlwaC0+c2FkZHIsIGRoLT5kY2NwaF9zcG9ydCwKIAkJCSAgIHNrYi0+bmguaXBoLT5kYWRkciwgZGgtPmRjY3BoX2Rwb3J0LAogCQkJICAgaW5ldF9paWYoc2tiKSk7CiAKLQkvKiAKKwkvKgogCSAqIFN0ZXAgMjoKLQkgKiAJSWYgbm8gc29ja2V0IC4uLgorCSAqCUlmIG5vIHNvY2tldCAuLi4KIAkgKi8KIAlpZiAoc2sgPT0gTlVMTCkgewogCQlkY2NwX3ByX2RlYnVnKCJmYWlsZWQgdG8gbG9vayB1cCBmbG93IElEIGluIHRhYmxlIGFuZCAiCkBAIC04NjIsOSArODYyLDkgQEAKIAkJZ290byBub19kY2NwX3NvY2tldDsKIAl9CiAKLQkvKiAKKwkvKgogCSAqIFN0ZXAgMjoKLQkgKiAJLi4uIG9yIFMuc3RhdGUgPT0gVElNRVdBSVQsCisJICoJLi4uIG9yIFMuc3RhdGUgPT0gVElNRVdBSVQsCiAJICoJCUdlbmVyYXRlIFJlc2V0KE5vIENvbm5lY3Rpb24pIHVubGVzcyBQLnR5cGUgPT0gUmVzZXQKIAkgKgkJRHJvcCBwYWNrZXQgYW5kIHJldHVybgogCSAqLwpAQCAtODc2LDggKzg3Niw4IEBACiAKIAkvKgogCSAqIFJGQyA0MzQwLCBzZWMuIDkuMi4xOiBNaW5pbXVtIENoZWNrc3VtIENvdmVyYWdlCi0JICogCW8gaWYgTWluQ3NDb3YgPSAwLCBvbmx5IHBhY2tldHMgd2l0aCBDc0NvdiA9IDAgYXJlIGFjY2VwdGVkCi0JICogCW8gaWYgTWluQ3NDb3YgPiAwLCBhbHNvIGFjY2VwdCBwYWNrZXRzIHdpdGggQ3NDb3YgPj0gTWluQ3NDb3YKKwkgKglvIGlmIE1pbkNzQ292ID0gMCwgb25seSBwYWNrZXRzIHdpdGggQ3NDb3YgPSAwIGFyZSBhY2NlcHRlZAorCSAqCW8gaWYgTWluQ3NDb3YgPiAwLCBhbHNvIGFjY2VwdCBwYWNrZXRzIHdpdGggQ3NDb3YgPj0gTWluQ3NDb3YKIAkgKi8KIAltaW5fY292ID0gZGNjcF9zayhzayktPmRjY3BzX3BjcmxlbjsKIAlpZiAoZGgtPmRjY3BoX2NzY292ICYmIChtaW5fY292ID09IDAgfHwgZGgtPmRjY3BoX2NzY292IDwgbWluX2NvdikpICB7CkBAIC05MDAsNyArOTAwLDcgQEAKIAkJZ290byBkaXNjYXJkX2l0OwogCS8qCiAJICogU3RlcCAyOgotCSAqIAlJZiBubyBzb2NrZXQgLi4uCisJICoJSWYgbm8gc29ja2V0IC4uLgogCSAqCQlHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0CiAJICoJCURyb3AgcGFja2V0IGFuZCByZXR1cm4KIAkgKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCBjN2FhYTI1Li42YjkxYTlkIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC03Nyw3ICs3Nyw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgX191MzIgc2VjdXJlX2RjY3B2Nl9zZXF1ZW5jZV9udW1iZXIoX19iZTMyICpzYWRkciwgX19iZTMyICpkYWRkciwKLQkJCQkgICAJCSAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQgICApCisJCQkJCQkgIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0ICAgKQogewogCXJldHVybiBzZWN1cmVfdGNwdjZfc2VxdWVuY2VfbnVtYmVyKHNhZGRyLCBkYWRkciwgc3BvcnQsIGRwb3J0KTsKIH0KQEAgLTMyOSw3ICszMjksNyBAQAogCXNrYiA9IGFsbG9jX3NrYihkY2NwX3Y2X2N0bF9zb2NrZXQtPnNrLT5za19wcm90LT5tYXhfaGVhZGVyLAogCQkJR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQotCSAgCXJldHVybjsKKwkJcmV0dXJuOwogCiAJc2tiX3Jlc2VydmUoc2tiLCBkY2NwX3Y2X2N0bF9zb2NrZXQtPnNrLT5za19wcm90LT5tYXhfaGVhZGVyKTsKIApAQCAtMzUzLDcgKzM1Myw3IEBACiAKIAlkY2NwX2NzdW1fb3V0Z29pbmcoc2tiKTsKIAlkaC0+ZGNjcGhfY2hlY2tzdW0gPSBkY2NwX3Y2X2NzdW1fZmluaXNoKHNrYiwgJnJ4c2tiLT5uaC5pcHY2aC0+c2FkZHIsCi0JCQkJICAgCQkgICAgICAmcnhza2ItPm5oLmlwdjZoLT5kYWRkcik7CisJCQkJCQkgICAgICAmcnhza2ItPm5oLmlwdjZoLT5kYWRkcik7CiAKIAltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKIAlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgJnJ4c2tiLT5uaC5pcHY2aC0+c2FkZHIpOwpAQCAtNDI0LDcgKzQyNCw3IEBACiAJc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICpkcmVxOwogCXN0cnVjdCBpbmV0Nl9yZXF1ZXN0X3NvY2sgKmlyZXE2OwogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKLSAJY29uc3QgX19iZTMyIHNlcnZpY2UgPSBkY2NwX2hkcl9yZXF1ZXN0KHNrYiktPmRjY3BoX3JlcV9zZXJ2aWNlOworCWNvbnN0IF9fYmUzMiBzZXJ2aWNlID0gZGNjcF9oZHJfcmVxdWVzdChza2IpLT5kY2NwaF9yZXFfc2VydmljZTsKIAlzdHJ1Y3QgZGNjcF9za2JfY2IgKmRjYiA9IERDQ1BfU0tCX0NCKHNrYik7CiAJX191OCByZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX1RPT19CVVNZOwogCkBAIC00MzcsNyArNDM3LDcgQEAKIAlpZiAoZGNjcF9iYWRfc2VydmljZV9jb2RlKHNrLCBzZXJ2aWNlKSkgewogCQlyZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX0JBRF9TRVJWSUNFX0NPREU7CiAJCWdvdG8gZHJvcDsKLSAJfQorCX0KIAkvKgogCSAqIFRoZXJlIGFyZSBubyBTWU4gYXR0YWNrcyBvbiBJUHY2LCB5ZXQuLi4KIAkgKi8KQEAgLTc4Nyw3ICs3ODcsNyBAQAogCQkgKiBvdGhlcndpc2Ugd2UganVzdCBzaG9ydGNpcmN1aXQgdGhpcyBhbmQgY29udGludWUgd2l0aAogCQkgKiB0aGUgbmV3IHNvY2tldC4uCiAJCSAqLwotIAkJaWYgKG5zayAhPSBzaykgeworCQlpZiAobnNrICE9IHNrKSB7CiAJCQlpZiAoZGNjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYikpCiAJCQkJZ290byByZXNldDsKIAkJCWlmIChvcHRfc2tiICE9IE5VTEwpCkBAIC04NDMsMTQgKzg0MywxNCBAQAogCQlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxID0gZGNjcF9oZHJfYWNrX3NlcShza2IpOwogCiAJLyogU3RlcCAyOgotCSAqIAlMb29rIHVwIGZsb3cgSUQgaW4gdGFibGUgYW5kIGdldCBjb3JyZXNwb25kaW5nIHNvY2tldCAqLworCSAqCUxvb2sgdXAgZmxvdyBJRCBpbiB0YWJsZSBhbmQgZ2V0IGNvcnJlc3BvbmRpbmcgc29ja2V0ICovCiAJc2sgPSBfX2luZXQ2X2xvb2t1cCgmZGNjcF9oYXNoaW5mbywgJnNrYi0+bmguaXB2NmgtPnNhZGRyLAogCQkJICAgIGRoLT5kY2NwaF9zcG9ydCwKIAkJCSAgICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsIG50b2hzKGRoLT5kY2NwaF9kcG9ydCksCiAJCQkgICAgaW5ldDZfaWlmKHNrYikpOwogCS8qCiAJICogU3RlcCAyOgotCSAqIAlJZiBubyBzb2NrZXQgLi4uCisJICoJSWYgbm8gc29ja2V0IC4uLgogCSAqLwogCWlmIChzayA9PSBOVUxMKSB7CiAJCWRjY3BfcHJfZGVidWcoImZhaWxlZCB0byBsb29rIHVwIGZsb3cgSUQgaW4gdGFibGUgYW5kICIKQEAgLTg2MCw3ICs4NjAsNyBAQAogCiAJLyoKIAkgKiBTdGVwIDI6Ci0JICogCS4uLiBvciBTLnN0YXRlID09IFRJTUVXQUlULAorCSAqCS4uLiBvciBTLnN0YXRlID09IFRJTUVXQUlULAogCSAqCQlHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0CiAJICoJCURyb3AgcGFja2V0IGFuZCByZXR1cm4KIAkgKi8KQEAgLTg3Miw4ICs4NzIsOCBAQAogCiAJLyoKIAkgKiBSRkMgNDM0MCwgc2VjLiA5LjIuMTogTWluaW11bSBDaGVja3N1bSBDb3ZlcmFnZQotCSAqIAlvIGlmIE1pbkNzQ292ID0gMCwgb25seSBwYWNrZXRzIHdpdGggQ3NDb3YgPSAwIGFyZSBhY2NlcHRlZAotCSAqIAlvIGlmIE1pbkNzQ292ID4gMCwgYWxzbyBhY2NlcHQgcGFja2V0cyB3aXRoIENzQ292ID49IE1pbkNzQ292CisJICoJbyBpZiBNaW5Dc0NvdiA9IDAsIG9ubHkgcGFja2V0cyB3aXRoIENzQ292ID0gMCBhcmUgYWNjZXB0ZWQKKwkgKglvIGlmIE1pbkNzQ292ID4gMCwgYWxzbyBhY2NlcHQgcGFja2V0cyB3aXRoIENzQ292ID49IE1pbkNzQ292CiAJICovCiAJbWluX2NvdiA9IGRjY3Bfc2soc2spLT5kY2Nwc19wY3JsZW47CiAJaWYgKGRoLT5kY2NwaF9jc2NvdiAgJiYgIChtaW5fY292ID09IDAgfHwgZGgtPmRjY3BoX2NzY292IDwgbWluX2NvdikpICB7CkBAIC04OTMsNyArODkzLDcgQEAKIAkJZ290byBkaXNjYXJkX2l0OwogCS8qCiAJICogU3RlcCAyOgotCSAqIAlJZiBubyBzb2NrZXQgLi4uCisJICoJSWYgbm8gc29ja2V0IC4uLgogCSAqCQlHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0CiAJICoJCURyb3AgcGFja2V0IGFuZCByZXR1cm4KIAkgKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL21pbmlzb2Nrcy5jIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKaW5kZXggNGM5ZTI2Ny4uNjY1NmJiNCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvbWluaXNvY2tzLmMKKysrIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKTsKIAotLyogCisvKgogICogUHJvY2VzcyBhbiBpbmNvbWluZyBwYWNrZXQgZm9yIFJFU1BPTkQgc29ja2V0cyByZXByZXNlbnRlZAogICogYXMgYW4gcmVxdWVzdF9zb2NrLgogICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vcHRpb25zLmMgYi9uZXQvZGNjcC9vcHRpb25zLmMKaW5kZXggZjM5OGI0My4uYzAzYmE2MSAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3B0aW9ucy5jCisrKyBiL25ldC9kY2NwL29wdGlvbnMuYwpAQCAtNTU3LDExICs1NTcsNiBAQAogCQkJcmV0dXJuIC0xOwogCQlkcC0+ZGNjcHNfaGNfcnhfaW5zZXJ0X29wdGlvbnMgPSAwOwogCX0KLQlpZiAoZHAtPmRjY3BzX2hjX3R4X2luc2VydF9vcHRpb25zKSB7Ci0JCWlmIChjY2lkX2hjX3R4X2luc2VydF9vcHRpb25zKGRwLT5kY2Nwc19oY190eF9jY2lkLCBzaywgc2tiKSkKLQkJCXJldHVybiAtMTsKLQkJZHAtPmRjY3BzX2hjX3R4X2luc2VydF9vcHRpb25zID0gMDsKLQl9CiAKIAkvKiBGZWF0dXJlIG5lZ290aWF0aW9uICovCiAJLyogRGF0YSBwYWNrZXRzIGNhbid0IGRvIGZlYXQgbmVnb3RpYXRpb24gKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL291dHB1dC5jIGIvbmV0L2RjY3Avb3V0cHV0LmMKaW5kZXggNDAwYzMwYi4uMzQzNTU0MiAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3V0cHV0LmMKKysrIGIvbmV0L2RjY3Avb3V0cHV0LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogIG5ldC9kY2NwL291dHB1dC5jCi0gKiAKKyAqCiAgKiAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERDQ1AgcHJvdG9jb2wKICAqICBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KICAqCkBAIC0xMjQsNyArMTI0LDcgQEAKIAkJRENDUF9JTkNfU1RBVFMoRENDUF9NSUJfT1VUU0VHUyk7CiAKIAkJbWVtc2V0KCYoSVBDQihza2IpLT5vcHQpLCAwLCBzaXplb2YoSVBDQihza2IpLT5vcHQpKTsKLQkJZXJyID0gaWNzay0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCBzaywgMCk7CisJCWVyciA9IGljc2stPmljc2tfYWZfb3BzLT5xdWV1ZV94bWl0KHNrYiwgMCk7CiAJCXJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7CiAJfQogCXJldHVybiAtRU5PQlVGUzsKQEAgLTE3NSwxNCArMTc1LDEyIEBACiAvKioKICAqIGRjY3Bfd2FpdF9mb3JfY2NpZCAtIFdhaXQgZm9yIGNjaWQgdG8gdGVsbCB1cyB3ZSBjYW4gc2VuZCBhIHBhY2tldAogICogQHNrOiBzb2NrZXQgdG8gd2FpdCBmb3IKLSAqIEB0aW1lbzogZm9yIGhvdyBsb25nCiAgKi8KLXN0YXRpYyBpbnQgZGNjcF93YWl0X2Zvcl9jY2lkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgIGxvbmcgKnRpbWVvKQorc3RhdGljIGludCBkY2NwX3dhaXRfZm9yX2NjaWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJREVGSU5FX1dBSVQod2FpdCk7Ci0JbG9uZyBkZWxheTsKKwl1bnNpZ25lZCBsb25nIGRlbGF5OwogCWludCByYzsKIAogCXdoaWxlICgxKSB7CkBAIC0xOTAsOCArMTg4LDYgQEAKIAogCQlpZiAoc2stPnNrX2VycikKIAkJCWdvdG8gZG9fZXJyb3I7Ci0JCWlmICghKnRpbWVvKQotCQkJZ290byBkb19ub25ibG9jazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJZ290byBkb19pbnRlcnJ1cHRlZDsKIApAQCAtMTk5LDEyICsxOTUsOSBAQAogCQlpZiAocmMgPD0gMCkKIAkJCWJyZWFrOwogCQlkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMocmMpOwotCQlpZiAoZGVsYXkgPiAqdGltZW8gfHwgZGVsYXkgPCAwKQotCQkJZ290byBkb19ub25ibG9jazsKLQogCQlzay0+c2tfd3JpdGVfcGVuZGluZysrOwogCQlyZWxlYXNlX3NvY2soc2spOwotCQkqdGltZW8gLT0gc2NoZWR1bGVfdGltZW91dChkZWxheSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoZGVsYXkpOwogCQlsb2NrX3NvY2soc2spOwogCQlzay0+c2tfd3JpdGVfcGVuZGluZy0tOwogCX0KQEAgLTIxNSwxMSArMjA4LDggQEAKIGRvX2Vycm9yOgogCXJjID0gLUVQSVBFOwogCWdvdG8gb3V0OwotZG9fbm9uYmxvY2s6Ci0JcmMgPSAtRUFHQUlOOwotCWdvdG8gb3V0OwogZG9faW50ZXJydXB0ZWQ6Ci0JcmMgPSBzb2NrX2ludHJfZXJybm8oKnRpbWVvKTsKKwlyYyA9IC1FSU5UUjsKIAlnb3RvIG91dDsKIH0KIApAQCAtMjQwLDggKzIzMCw2IEBACiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWxvbmcgdGltZW8gPSBEQ0NQX1hNSVRfVElNRU87IAkvKiBJZiBhIHBhY2tldCBpcyB0YWtpbmcgbG9uZ2VyIHRoYW4KLQkJCQkJICAgdGhpcyB3ZSBoYXZlIG90aGVyIGlzc3VlcyAqLwogCiAJd2hpbGUgKChza2IgPSBza2JfcGVlaygmc2stPnNrX3dyaXRlX3F1ZXVlKSkpIHsKIAkJaW50IGVyciA9IGNjaWRfaGNfdHhfc2VuZF9wYWNrZXQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCBza2IpOwpAQCAtMjUxLDExICsyMzksOSBAQAogCQkJCXNrX3Jlc2V0X3RpbWVyKHNrLCAmZHAtPmRjY3BzX3htaXRfdGltZXIsCiAJCQkJCQltc2Vjc190b19qaWZmaWVzKGVycikramlmZmllcyk7CiAJCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCWVyciA9IGRjY3Bfd2FpdF9mb3JfY2NpZChzaywgc2tiLCAmdGltZW8pOwotCQkJCXRpbWVvID0gRENDUF9YTUlUX1RJTUVPOwotCQkJfQotCQkJaWYgKGVycikKKwkJCX0gZWxzZQorCQkJCWVyciA9IGRjY3Bfd2FpdF9mb3JfY2NpZChzaywgc2tiKTsKKwkJCWlmIChlcnIgJiYgZXJyICE9IC1FSU5UUikKIAkJCQlEQ0NQX0JVRygiZXJyPSVkIGFmdGVyIGRjY3Bfd2FpdF9mb3JfY2NpZCIsIGVycik7CiAJCX0KIApAQCAtMjgxLDggKzI2NywxMCBAQAogCQkJaWYgKGVycikKIAkJCQlEQ0NQX0JVRygiZXJyPSVkIGFmdGVyIGNjaWRfaGNfdHhfcGFja2V0X3NlbnQiLAogCQkJCQkgZXJyKTsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CisJCQlkY2NwX3ByX2RlYnVnKCJwYWNrZXQgZGlzY2FyZGVkXG4iKTsKIAkJCWtmcmVlKHNrYik7CisJCX0KIAl9CiB9CiAKQEAgLTM1MCw3ICszMzgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRjY3BfbWFrZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAkJCQkgICAgICAgY29uc3QgZW51bSBkY2NwX3Jlc2V0X2NvZGVzIGNvZGUpCi0JCQkJICAgCiB7CiAJc3RydWN0IGRjY3BfaGRyICpkaDsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwpAQCAtNDA5LDcgKzM5Niw3IEBACiAJCQkJCQkgICAgICBjb2RlKTsKIAkJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCQltZW1zZXQoJihJUENCKHNrYiktPm9wdCksIDAsIHNpemVvZihJUENCKHNrYiktPm9wdCkpOwotCQkJZXJyID0gaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+cXVldWVfeG1pdChza2IsIHNrLCAwKTsKKwkJCWVyciA9IGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCAwKTsKIAkJCXJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7CiAJCX0KIAl9CkBAIC00MzEsMTQgKzQxOCwxNCBAQAogCQogCWRjY3Bfc3luY19tc3Moc2ssIGRzdF9tdHUoZHN0KSk7CiAKLSAJLyoKKwkvKgogCSAqIFNXTCBhbmQgQVdMIGFyZSBpbml0aWFsbHkgYWRqdXN0ZWQgc28gdGhhdCB0aGV5IGFyZSBub3QgbGVzcyB0aGFuCiAJICogdGhlIGluaXRpYWwgU2VxdWVuY2UgTnVtYmVycyByZWNlaXZlZCBhbmQgc2VudCwgcmVzcGVjdGl2ZWx5OgogCSAqCVNXTCA6PSBtYXgoR1NSICsgMSAtIGZsb29yKFcvNCksIElTUiksCiAJICoJQVdMIDo9IG1heChHU1MgLSBXJyArIDEsIElTUykuCiAJICogVGhlc2UgYWRqdXN0bWVudHMgTVVTVCBiZSBhcHBsaWVkIG9ubHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKIAkgKiBjb25uZWN0aW9uLgotIAkgKi8KKwkgKi8KIAlkY2NwX3VwZGF0ZV9nc3Moc2ssIGRwLT5kY2Nwc19pc3MpOwogCWRjY3Bfc2V0X3NlcW5vKCZkcC0+ZGNjcHNfYXdsLCBtYXg0OChkcC0+ZGNjcHNfYXdsLCBkcC0+ZGNjcHNfaXNzKSk7CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IDVlYzQ3ZDkuLjYzYjNmYTIgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJCQkJCQkgICAgICBzaywgR0ZQX0tFUk5FTCk7CiAJCWRwLT5kY2Nwc19oY190eF9jY2lkID0gY2NpZF9oY190eF9uZXcoZG1zay0+ZGNjcG1zX3R4X2NjaWQsCiAJCQkJCQkgICAgICBzaywgR0ZQX0tFUk5FTCk7Ci0JICAgIAlpZiAodW5saWtlbHkoZHAtPmRjY3BzX2hjX3J4X2NjaWQgPT0gTlVMTCB8fAorCQlpZiAodW5saWtlbHkoZHAtPmRjY3BzX2hjX3J4X2NjaWQgPT0gTlVMTCB8fAogCQkJICAgICBkcC0+ZGNjcHNfaGNfdHhfY2NpZCA9PSBOVUxMKSkgewogCQkJY2NpZF9oY19yeF9kZWxldGUoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKTsKIAkJCWNjaWRfaGNfdHhfZGVsZXRlKGRwLT5kY2Nwc19oY190eF9jY2lkLCBzayk7CkBAIC0zOTAsNyArMzkwLDcgQEAKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXN0cnVjdCBkY2NwX3NlcnZpY2VfbGlzdCAqc2wgPSBOVUxMOwogCi0JaWYgKHNlcnZpY2UgPT0gRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUUgfHwgCisJaWYgKHNlcnZpY2UgPT0gRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUUgfHwKIAkgICAgb3B0bGVuID4gRENDUF9TRVJWSUNFX0xJU1RfTUFYX0xFTiAqIHNpemVvZih1MzIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODMwLDcgKzgzMCw3IEBACiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkY2NwX25ld19zdGF0ZVtdID0gewogCS8qIGN1cnJlbnQgc3RhdGU6ICAgbmV3IHN0YXRlOiAgICAgIGFjdGlvbjoJKi8KIAlbMF0JCSAgPSBEQ0NQX0NMT1NFRCwKLQlbRENDUF9PUEVOXSAJICA9IERDQ1BfQ0xPU0lORyB8IERDQ1BfQUNUSU9OX0ZJTiwKKwlbRENDUF9PUEVOXQkgID0gRENDUF9DTE9TSU5HIHwgRENDUF9BQ1RJT05fRklOLAogCVtEQ0NQX1JFUVVFU1RJTkddID0gRENDUF9DTE9TRUQsCiAJW0RDQ1BfUEFSVE9QRU5dCSAgPSBEQ0NQX0NMT1NJTkcgfCBEQ0NQX0FDVElPTl9GSU4sCiAJW0RDQ1BfTElTVEVOXQkgID0gRENDUF9DTE9TRUQsCmRpZmYgLS1naXQgYS9uZXQvZGNjcC90aW1lci5jIGIvbmV0L2RjY3AvdGltZXIuYwppbmRleCBlOGY1MTllLi5lNTM0OGYzIDEwMDY0NAotLS0gYS9uZXQvZGNjcC90aW1lci5jCisrKyBiL25ldC9kY2NwL3RpbWVyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogIG5ldC9kY2NwL3RpbWVyLmMKLSAqIAorICoKICAqICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRENDUCBwcm90b2NvbAogICogIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgogICoKQEAgLTEwMiwxMyArMTAyLDEzIEBACiAJICogc2stPnNrX3NlbmRfaGVhZCBoYXMgdG8gaGF2ZSBvbmUgc2tiIHdpdGgKIAkgKiBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlIHNldCB0byBvbmUgb2YgdGhlIHJldHJhbnNtaXR0YWJsZSBEQ0NQCiAJICogcGFja2V0IHR5cGVzLiBUaGUgb25seSBwYWNrZXRzIGVsaWdpYmxlIGZvciByZXRyYW5zbWlzc2lvbiBhcmU6Ci0JICogCS0tIFJlcXVlc3RzIGluIGNsaWVudC1SRVFVRVNUICBzdGF0ZSAoc2VjLiA4LjEuMSkKLQkgKiAJLS0gQWNrcyAgICAgaW4gY2xpZW50LVBBUlRPUEVOIHN0YXRlIChzZWMuIDguMS41KQotCSAqIAktLSBDbG9zZVJlcSBpbiBzZXJ2ZXItQ0xPU0VSRVEgc3RhdGUgKHNlYy4gOC4zKQotCSAqIAktLSBDbG9zZSAgICBpbiAgIG5vZGUtQ0xPU0lORyAgc3RhdGUgKHNlYy4gOC4zKSAgICAgICAgICAgICAgICAqLworCSAqCS0tIFJlcXVlc3RzIGluIGNsaWVudC1SRVFVRVNUICBzdGF0ZSAoc2VjLiA4LjEuMSkKKwkgKgktLSBBY2tzICAgICBpbiBjbGllbnQtUEFSVE9QRU4gc3RhdGUgKHNlYy4gOC4xLjUpCisJICoJLS0gQ2xvc2VSZXEgaW4gc2VydmVyLUNMT1NFUkVRIHN0YXRlIChzZWMuIDguMykKKwkgKgktLSBDbG9zZSAgICBpbiAgIG5vZGUtQ0xPU0lORyAgc3RhdGUgKHNlYy4gOC4zKSAgICAgICAgICAgICAgICAqLwogCUJVR19UUkFQKHNrLT5za19zZW5kX2hlYWQgIT0gTlVMTCk7CiAKLQkvKiAKKwkvKgogCSAqIE1vcmUgdGhhbiB0aGFuIDRNU0wgKDggbWludXRlcykgaGFzIHBhc3NlZCwgYSBSRVNFVChhYm9ydGVkKSB3YXMKIAkgKiBzZW50LCBubyBuZWVkIHRvIHJldHJhbnNtaXQsIHRoaXMgc29jayBpcyBkZWFkLgogCSAqLwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJLyogT25seSBwcm9jZXNzIGlmIHNvY2tldCBpcyBub3QgaW4gdXNlLiAqLwogCWJoX2xvY2tfc29jayhzayk7CiAJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKLQkJLyogVHJ5IGFnYWluIGxhdGVyLiAqLyAKKwkJLyogVHJ5IGFnYWluIGxhdGVyLiAqLwogCQlpbmV0X2Nza19yZXNldF9rZWVwYWxpdmVfdGltZXIoc2ssIEhaIC8gMjApOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCAwYjlkNGM5Li5lZDA4M2FiIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTE2Nyw4ICsxNjcsNyBAQAogCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKIHN0YXRpYyBpbnQgZG5fZm9yd2FyZGluZ19zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwKLQkJCXZvaWQgKipjb250ZXh0KTsKKwkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pOwogCiBzdGF0aWMgc3RydWN0IGRuX2Rldl9zeXNjdGxfdGFibGUgewogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpzeXNjdGxfaGVhZGVyOwpAQCAtMzQ3LDggKzM0Niw3IEBACiAKIHN0YXRpYyBpbnQgZG5fZm9yd2FyZGluZ19zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwKLQkJCXZvaWQgKipjb250ZXh0KQorCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKICNpZmRlZiBDT05GSUdfREVDTkVUX1JPVVRFUgogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0YWJsZS0+ZXh0cmExOwpAQCAtMTE0NywxNiArMTE0NSwyMyBAQAogCWluaXRfdGltZXIoJmRuX2RiLT50aW1lcik7CiAKIAlkbl9kYi0+dXB0aW1lID0gamlmZmllczsKKworCWRuX2RiLT5uZWlnaF9wYXJtcyA9IG5laWdoX3Bhcm1zX2FsbG9jKGRldiwgJmRuX25laWdoX3RhYmxlKTsKKwlpZiAoIWRuX2RiLT5uZWlnaF9wYXJtcykgeworCQlkZXYtPmRuX3B0ciA9IE5VTEw7CisJCWtmcmVlKGRuX2RiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJaWYgKGRuX2RiLT5wYXJtcy51cCkgewogCQlpZiAoZG5fZGItPnBhcm1zLnVwKGRldikgPCAwKSB7CisJCQluZWlnaF9wYXJtc19yZWxlYXNlKCZkbl9uZWlnaF90YWJsZSwgZG5fZGItPm5laWdoX3Bhcm1zKTsKIAkJCWRldi0+ZG5fcHRyID0gTlVMTDsKIAkJCWtmcmVlKGRuX2RiKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJfQogCi0JZG5fZGItPm5laWdoX3Bhcm1zID0gbmVpZ2hfcGFybXNfYWxsb2MoZGV2LCAmZG5fbmVpZ2hfdGFibGUpOwotCiAJZG5fZGV2X3N5c2N0bF9yZWdpc3RlcihkZXYsICZkbl9kYi0+cGFybXMpOwogCiAJZG5fZGV2X3NldF90aW1lcihkZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jIGIvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCmluZGV4IGUyNDZmMDUuLmE0MDY1ZWIgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKQEAgLTEzNCw4ICsxMzQsNyBAQAogCiBzdGF0aWMgaW50IGRuX25vZGVfYWRkcmVzc19zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sCi0JCQkJdm9pZCAqKmNvbnRleHQpCisJCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlzaXplX3QgbGVuOwogCV9fbGUxNiBhZGRyOwpAQCAtMjIwLDggKzIxOSw3IEBACiAKIHN0YXRpYyBpbnQgZG5fZGVmX2Rldl9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sCi0JCQkJdm9pZCAqKmNvbnRleHQpCisJCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlzaXplX3QgbGVuOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYwppbmRleCBlZWMxYTFkLi5hODI0ODUyIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogaWVlZTgwMjExc29mdG1hY19hc3NvY19ub3RpZnlfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZXZlbnRfdHlwZSwgdm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKCh2b2lkKiltYWMpOworCWllZWU4MDIxMXNvZnRtYWNfYXNzb2Nfd29yaygmbWFjLT5hc3NvY2luZm8ud29yay53b3JrKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCiAJc3dpdGNoIChldmVudF90eXBlKSB7CiAJY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhFTlRJQ0FURUQ6Ci0JCWllZWU4MDIxMXNvZnRtYWNfYXNzb2Nfd29yaygodm9pZCopbWFjKTsKKwkJaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKCZtYWMtPmFzc29jaW5mby53b3JrLndvcmspOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSF9GQUlMRUQ6CiAJY2FzZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhfVElNRU9VVDoKQEAgLTQzOCw3ICs0MzgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMTsKLQlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1hYy0+YXNzb2NpbmZvLndvcmssIDApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfd3guYwppbmRleCA0ODBkNzJjLi5mYTJmN2RhIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCQkJZXJyID0gLUUyQklHOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKLQltdXRleF9sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtYWMtPmFzc29jaW5mby5tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDExNDQ5MDAuLjg2NDAwOTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCQlzay0+c2tfcmV1c2UgPSAxOwogCiAJaW5ldCA9IGluZXRfc2soc2spOwotCWluZXQtPmlzX2ljc2sgPSBJTkVUX1BST1RPU1dfSUNTSyAmIGFuc3dlcl9mbGFnczsKKwlpbmV0LT5pc19pY3NrID0gKElORVRfUFJPVE9TV19JQ1NLICYgYW5zd2VyX2ZsYWdzKSAhPSAwOwogCiAJaWYgKFNPQ0tfUkFXID09IHNvY2stPnR5cGUpIHsKIAkJaW5ldC0+bnVtID0gcHJvdG9jb2w7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggMmZkODk5MS4uNDgwYWNlOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTY1LDkgKzE2NSw4IEBACiAJCQkgICAgICBORVRfSVBWNF9ORUlHSCwgImlwdjQiLCBOVUxMLCBOVUxMKTsKICNlbmRpZgogCi0JLyogQWNjb3VudCBmb3IgcmVmZXJlbmNlIGRldi0+aXBfcHRyICovCisJLyogQWNjb3VudCBmb3IgcmVmZXJlbmNlIGRldi0+aXBfcHRyIChiZWxvdykgKi8KIAlpbl9kZXZfaG9sZChpbl9kZXYpOwotCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPmlwX3B0ciwgaW5fZGV2KTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIAlkZXZpbmV0X3N5c2N0bF9yZWdpc3Rlcihpbl9kZXYsICZpbl9kZXYtPmNuZik7CkBAIC0xNzUsNiArMTc0LDkgQEAKIAlpcF9tY19pbml0X2Rldihpbl9kZXYpOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQogCQlpcF9tY191cChpbl9kZXYpOworCisJLyogd2UgY2FuIHJlY2VpdmUgYXMgc29vbiBhcyBpcF9wdHIgaXMgc2V0IC0tIGRvIHRoaXMgbGFzdCAqLworCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPmlwX3B0ciwgaW5fZGV2KTsKIG91dDoKIAlyZXR1cm4gaW5fZGV2Owogb3V0X2tmcmVlOgpAQCAtMTMwMyw4ICsxMzA1LDcgQEAKIAogaW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQkJCSAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKLQkJCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sIAotCQkJCSAgdm9pZCAqKmNvbnRleHQpCisJCQkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCWludCAqdmFscCA9IHRhYmxlLT5kYXRhOwogCWludCBuZXc7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCBjZmIyNDljLi4xZTU4OWI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTE5ODksNiArMTk4OSwxMCBAQAogCXVuc2lnbmVkIGNpbmRleCA9IGl0ZXItPmluZGV4OwogCXN0cnVjdCB0bm9kZSAqcDsKIAorCS8qIEEgc2luZ2xlIGVudHJ5IHJvdXRpbmcgdGFibGUgKi8KKwlpZiAoIXRuKQorCQlyZXR1cm4gTlVMTDsKKwogCXByX2RlYnVnKCJnZXRfbmV4dCBpdGVyPXtub2RlPSVwIGluZGV4PSVkIGRlcHRoPSVkfVxuIiwKIAkJIGl0ZXItPnRub2RlLCBpdGVyLT5pbmRleCwgaXRlci0+ZGVwdGgpOwogcmVzY2FuOgpAQCAtMjAzNywxMSArMjA0MSwxOCBAQAogCWlmKCFpdGVyKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChuICYmIElTX1ROT0RFKG4pKSB7Ci0JCWl0ZXItPnRub2RlID0gKHN0cnVjdCB0bm9kZSAqKSBuOwotCQlpdGVyLT50cmllID0gdDsKLQkJaXRlci0+aW5kZXggPSAwOwotCQlpdGVyLT5kZXB0aCA9IDE7CisJaWYgKG4pIHsKKwkJaWYgKElTX1ROT0RFKG4pKSB7CisJCQlpdGVyLT50bm9kZSA9IChzdHJ1Y3QgdG5vZGUgKikgbjsKKwkJCWl0ZXItPnRyaWUgPSB0OworCQkJaXRlci0+aW5kZXggPSAwOworCQkJaXRlci0+ZGVwdGggPSAxOworCQl9IGVsc2UgeworCQkJaXRlci0+dG5vZGUgPSBOVUxMOworCQkJaXRlci0+dHJpZSAgPSB0OworCQkJaXRlci0+aW5kZXggPSAwOworCQkJaXRlci0+ZGVwdGggPSAwOworCQl9CiAJCXJldHVybiBuOwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTIyNzksMTYgKzIyOTAsMTcgQEAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXJldHVybiAwOwogCisJaWYgKCFOT0RFX1BBUkVOVChuKSkgeworCQlpZiAoaXRlci0+dHJpZSA9PSB0cmllX2xvY2FsKQorCQkJc2VxX3B1dHMoc2VxLCAiPGxvY2FsPjpcbiIpOworCQllbHNlCisJCQlzZXFfcHV0cyhzZXEsICI8bWFpbj46XG4iKTsKKwl9CisKIAlpZiAoSVNfVE5PREUobikpIHsKIAkJc3RydWN0IHRub2RlICp0biA9IChzdHJ1Y3QgdG5vZGUgKikgbjsKIAkJX19iZTMyIHByZiA9IGh0b25sKE1BU0tfUEZYKHRuLT5rZXksIHRuLT5wb3MpKTsKIAotCQlpZiAoIU5PREVfUEFSRU5UKG4pKSB7Ci0JCQlpZiAoaXRlci0+dHJpZSA9PSB0cmllX2xvY2FsKQotCQkJCXNlcV9wdXRzKHNlcSwgIjxsb2NhbD46XG4iKTsKLQkJCWVsc2UKLQkJCQlzZXFfcHV0cyhzZXEsICI8bWFpbj46XG4iKTsKLQkJfSAKIAkJc2VxX2luZGVudChzZXEsIGl0ZXItPmRlcHRoLTEpOwogCQlzZXFfcHJpbnRmKHNlcSwgIiAgKy0tICVkLiVkLiVkLiVkLyVkICVkICVkICVkXG4iLAogCQkJICAgTklQUVVBRChwcmYpLCB0bi0+cG9zLCB0bi0+Yml0cywgdG4tPmZ1bGxfY2hpbGRyZW4sIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKaW5kZXggNzQwNDZlZi4uOGNlMDBkMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCkBAIC01NjUsNyArNTY1LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBza19idWZmICpmcmVlX2l0ID0gbmV4dDsKIAotCQkJLyogT2xkIGZyYWdtbmV0IGlzIGNvbXBsZXRlbHkgb3ZlcnJpZGRlbiB3aXRoCisJCQkvKiBPbGQgZnJhZ21lbnQgaXMgY29tcGxldGVseSBvdmVycmlkZGVuIHdpdGgKIAkJCSAqIG5ldyBvbmUgZHJvcCBpdC4KIAkJCSAqLwogCQkJbmV4dCA9IG5leHQtPm5leHQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IGEzNTIwOWQuLmEwZjIwMDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC0xNjQsNyArMTY0LDYgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGlwX2ZpbmlzaF9vdXRwdXQyKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiLT5kc3Q7Ci0Jc3RydWN0IGhoX2NhY2hlICpoaCA9IGRzdC0+aGg7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRzdC0+ZGV2OwogCWludCBoaF9sZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpOwogCkBAIC0xODMsMTYgKzE4Miw5IEBACiAJCXNrYiA9IHNrYjI7CiAJfQogCi0JaWYgKGhoKSB7Ci0JCWludCBoaF9hbGVuOwotCi0JCXJlYWRfbG9ja19iaCgmaGgtPmhoX2xvY2spOwotCQloaF9hbGVuID0gSEhfREFUQV9BTElHTihoaC0+aGhfbGVuKTsKLSAgCQltZW1jcHkoc2tiLT5kYXRhIC0gaGhfYWxlbiwgaGgtPmhoX2RhdGEsIGhoX2FsZW4pOwotCQlyZWFkX3VubG9ja19iaCgmaGgtPmhoX2xvY2spOwotCSAgICAgICAgc2tiX3B1c2goc2tiLCBoaC0+aGhfbGVuKTsKLQkJcmV0dXJuIGhoLT5oaF9vdXRwdXQoc2tiKTsKLQl9IGVsc2UgaWYgKGRzdC0+bmVpZ2hib3VyKQorCWlmIChkc3QtPmhoKQorCQlyZXR1cm4gbmVpZ2hfaGhfb3V0cHV0KGRzdC0+aGgsIHNrYik7CisJZWxzZSBpZiAoZHN0LT5uZWlnaGJvdXIpCiAJCXJldHVybiBkc3QtPm5laWdoYm91ci0+b3V0cHV0KHNrYik7CiAKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQpAQCAtMjg5LDggKzI4MSw5IEBACiAJCQkgICAgIShJUENCKHNrYiktPmZsYWdzICYgSVBTS0JfUkVST1VURUQpKTsKIH0KIAotaW50IGlwX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrLCBpbnQgaXBmcmFnb2spCitpbnQgaXBfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaXBmcmFnb2spCiB7CisJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IGluZXQtPm9wdDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggOTFhMDc1ZS4uN2VhMmQ5OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKQEAgLTY1Nyw3ICs2NTcsNyBAQAogCQlpZiAoc3RvcF9tYXN0ZXJfc3luYykKIAkJCWJyZWFrOwogCi0JCXNzbGVlcCgxKTsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwMCk7CiAJfQogCiAJLyogY2xlYW4gdXAgdGhlIHN5bmNfYnVmZiBxdWV1ZSAqLwpAQCAtNzE0LDcgKzcxNCw3IEBACiAJCWlmIChzdG9wX2JhY2t1cF9zeW5jKQogCQkJYnJlYWs7CiAKLQkJc3NsZWVwKDEpOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDAwKTsKIAl9CiAKIAkvKiByZWxlYXNlIHRoZSBzZW5kaW5nIG11bHRpY2FzdCBzb2NrZXQgKi8KQEAgLTgyNiw3ICs4MjYsNyBAQAogCWlmICgocGlkID0ga2VybmVsX3RocmVhZChzeW5jX3RocmVhZCwgc3RhcnR1cCwgMCkpIDwgMCkgewogCQlJUF9WU19FUlIoImNvdWxkIG5vdCBjcmVhdGUgc3luY190aHJlYWQgZHVlIHRvICVkLi4uICIKIAkJCSAgInJldHJ5aW5nLlxuIiwgcGlkKTsKLQkJc3NsZWVwKDEpOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDAwKTsKIAkJZ290byByZXBlYXQ7CiAJfQogCkBAIC04NDksMTAgKzg0OSwxMiBAQAogCiAJaXBfdnNfc3luY19zdGF0ZSB8PSBzdGF0ZTsKIAlpZiAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfTUFTVEVSKSB7Ci0JCXN0cmxjcHkoaXBfdnNfbWFzdGVyX21jYXN0X2lmbiwgbWNhc3RfaWZuLCBzaXplb2YoaXBfdnNfbWFzdGVyX21jYXN0X2lmbikpOworCQlzdHJsY3B5KGlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4sIG1jYXN0X2lmbiwKKwkJCXNpemVvZihpcF92c19tYXN0ZXJfbWNhc3RfaWZuKSk7CiAJCWlwX3ZzX21hc3Rlcl9zeW5jaWQgPSBzeW5jaWQ7CiAJfSBlbHNlIHsKLQkJc3RybGNweShpcF92c19iYWNrdXBfbWNhc3RfaWZuLCBtY2FzdF9pZm4sIHNpemVvZihpcF92c19iYWNrdXBfbWNhc3RfaWZuKSk7CisJCXN0cmxjcHkoaXBfdnNfYmFja3VwX21jYXN0X2lmbiwgbWNhc3RfaWZuLAorCQkJc2l6ZW9mKGlwX3ZzX2JhY2t1cF9tY2FzdF9pZm4pKTsKIAkJaXBfdnNfYmFja3VwX3N5bmNpZCA9IHN5bmNpZDsKIAl9CiAKQEAgLTg2MCw3ICs4NjIsNyBAQAogCWlmICgocGlkID0ga2VybmVsX3RocmVhZChmb3JrX3N5bmNfdGhyZWFkLCAmc3RhcnR1cCwgMCkpIDwgMCkgewogCQlJUF9WU19FUlIoImNvdWxkIG5vdCBjcmVhdGUgZm9ya19zeW5jX3RocmVhZCBkdWUgdG8gJWQuLi4gIgogCQkJICAicmV0cnlpbmcuXG4iLCBwaWQpOwotCQlzc2xlZXAoMSk7CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApOwogCQlnb3RvIHJlcGVhdDsKIAl9CiAKQEAgLTg4MCw3ICs4ODIsOCBAQAogCiAJSVBfVlNfREJHKDcsICIlczogcGlkICVkXG4iLCBfX0ZVTkNUSU9OX18sIGN1cnJlbnQtPnBpZCk7CiAJSVBfVlNfSU5GTygic3RvcHBpbmcgc3luYyB0aHJlYWQgJWQgLi4uXG4iLAotCQkgICAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfTUFTVEVSKSA/IHN5bmNfbWFzdGVyX3BpZCA6IHN5bmNfYmFja3VwX3BpZCk7CisJCSAgIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpID8KKwkJICAgc3luY19tYXN0ZXJfcGlkIDogc3luY19iYWNrdXBfcGlkKTsKIAogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCWFkZF93YWl0X3F1ZXVlKCZzdG9wX3N5bmNfd2FpdCwgJndhaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIuYwppbmRleCBhNjg5NjYwLi5jNDdjZTcwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIuYwpAQCAtMTUsMTYgKzE1LDE5IEBACiAJc3RydWN0IGZsb3dpIGZsID0ge307CiAJc3RydWN0IGRzdF9lbnRyeSAqb2RzdDsKIAl1bnNpZ25lZCBpbnQgaGhfbGVuOworCXVuc2lnbmVkIGludCB0eXBlOwogCisJdHlwZSA9IGluZXRfYWRkcl90eXBlKGlwaC0+c2FkZHIpOwogCWlmIChhZGRyX3R5cGUgPT0gUlROX1VOU1BFQykKLQkJYWRkcl90eXBlID0gaW5ldF9hZGRyX3R5cGUoaXBoLT5zYWRkcik7CisJCWFkZHJfdHlwZSA9IHR5cGU7CiAKIAkvKiBzb21lIG5vbi1zdGFuZGFyZCBoYWNrcyBsaWtlIGlwdF9SRUpFQ1QuYzpzZW5kX3Jlc2V0KCkgY2FuIGNhdXNlCiAJICogcGFja2V0cyB3aXRoIGZvcmVpZ24gc2FkZHIgdG8gYXBwZWFyIG9uIHRoZSBORl9JUF9MT0NBTF9PVVQgaG9vay4KIAkgKi8KIAlpZiAoYWRkcl90eXBlID09IFJUTl9MT0NBTCkgewogCQlmbC5ubF91LmlwNF91LmRhZGRyID0gaXBoLT5kYWRkcjsKLQkJZmwubmxfdS5pcDRfdS5zYWRkciA9IGlwaC0+c2FkZHI7CisJCWlmICh0eXBlID09IFJUTl9MT0NBTCkKKwkJCWZsLm5sX3UuaXA0X3Uuc2FkZHIgPSBpcGgtPnNhZGRyOwogCQlmbC5ubF91LmlwNF91LnRvcyA9IFJUX1RPUyhpcGgtPnRvcyk7CiAJCWZsLm9pZiA9ICgqcHNrYiktPnNrID8gKCpwc2tiKS0+c2stPnNrX2JvdW5kX2Rldl9pZiA6IDA7CiAJCWZsLm1hcmsgPSAoKnBza2IpLT5tYXJrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCAzNjNkZjk5Li40N2JkM2FkMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTYsOCArNiw4IEBACiAJZGVwZW5kcyBvbiBJTkVUICYmIE5FVEZJTFRFUgogCiBjb25maWcgTkZfQ09OTlRSQUNLX0lQVjQKLQl0cmlzdGF0ZSAiSVB2NCBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnQgKHJlcXVpcmVkIGZvciBOQVQpIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIE5GX0NPTk5UUkFDSworCXRyaXN0YXRlICJJUHY0IGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCAocmVxdWlyZWQgZm9yIE5BVCkiCisJZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sKIAktLS1oZWxwLS0tCiAJICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZAogCSAgdGhyb3VnaCB5b3VyIG1hY2hpbmUsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXkgYXJlIHJlbGF0ZWQKQEAgLTQwMSw3ICs0MDEsNyBAQAogIyBOQVQgKyBzcGVjaWZpYyB0YXJnZXRzOiBuZl9jb25udHJhY2sKIGNvbmZpZyBORl9OQVQKIAl0cmlzdGF0ZSAiRnVsbCBOQVQiCi0JZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUyAmJiBORl9DT05OVFJBQ0sKKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTICYmIE5GX0NPTk5UUkFDS19JUFY0CiAJaGVscAogCSAgVGhlIEZ1bGwgTkFUIG9wdGlvbiBhbGxvd3MgbWFzcXVlcmFkaW5nLCBwb3J0IGZvcndhcmRpbmcgYW5kIG90aGVyCiAJICBmb3JtcyBvZiBmdWxsIE5ldHdvcmsgQWRkcmVzcyBQb3J0IFRyYW5zbGF0aW9uLiAgSXQgaXMgY29udHJvbGxlZCBieQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDE1ZTc0MWEuLjE2ZDE3N2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTQsNiArNCwxNCBAQAogCiAjIG9iamVjdHMgZm9yIHRoZSBzdGFuZGFsb25lIC0gY29ubmVjdGlvbiB0cmFja2luZyAvIE5BVAogaXBfY29ubnRyYWNrLW9ianMJOj0gaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBpcF9jb25udHJhY2tfY29yZS5vIGlwX2Nvbm50cmFja19wcm90b19nZW5lcmljLm8gaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5vIGlwX2Nvbm50cmFja19wcm90b191ZHAubyBpcF9jb25udHJhY2tfcHJvdG9faWNtcC5vCisjIG9iamVjdHMgZm9yIGwzIGluZGVwZW5kZW50IGNvbm50cmFjaworbmZfY29ubnRyYWNrX2lwdjQtb2JqcyAgOj0gIG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQubyBuZl9jb25udHJhY2tfcHJvdG9faWNtcC5vCitpZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQpLHkpCitpZmVxICgkKENPTkZJR19QUk9DX0ZTKSx5KQorbmZfY29ubnRyYWNrX2lwdjQtb2JqcwkrPSBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5vCitlbmRpZgorZW5kaWYKKwogaXBfbmF0LW9ianMJOj0gaXBfbmF0X2NvcmUubyBpcF9uYXRfaGVscGVyLm8gaXBfbmF0X3Byb3RvX3Vua25vd24ubyBpcF9uYXRfcHJvdG9fdGNwLm8gaXBfbmF0X3Byb3RvX3VkcC5vIGlwX25hdF9wcm90b19pY21wLm8KIG5mX25hdC1vYmpzCTo9IG5mX25hdF9jb3JlLm8gbmZfbmF0X2hlbHBlci5vIG5mX25hdF9wcm90b191bmtub3duLm8gbmZfbmF0X3Byb3RvX3RjcC5vIG5mX25hdF9wcm90b191ZHAubyBuZl9uYXRfcHJvdG9faWNtcC5vCiBpZm5lcSAoJChDT05GSUdfTkZfTkFUKSwpCkBAIC0yMCw2ICsyOCw4IEBACiAKICMgY29ubmVjdGlvbiB0cmFja2luZwogb2JqLSQoQ09ORklHX0lQX05GX0NPTk5UUkFDSykgKz0gaXBfY29ubnRyYWNrLm8KK29iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSVBWNCkgKz0gbmZfY29ubnRyYWNrX2lwdjQubworCiBvYmotJChDT05GSUdfSVBfTkZfTkFUKSArPSBpcF9uYXQubwogb2JqLSQoQ09ORklHX05GX05BVCkgKz0gbmZfbmF0Lm8KIApAQCAtMTA2LDEzICsxMTYsMyBAQAogCiBvYmotJChDT05GSUdfSVBfTkZfUVVFVUUpICs9IGlwX3F1ZXVlLm8KIAotIyBvYmplY3RzIGZvciBsMyBpbmRlcGVuZGVudCBjb25udHJhY2sKLW5mX2Nvbm50cmFja19pcHY0LW9ianMgIDo9ICBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0Lm8gbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAubwotaWZlcSAoJChDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUKSx5KQotaWZlcSAoJChDT05GSUdfUFJPQ19GUykseSkKLW5mX2Nvbm50cmFja19pcHY0LW9ianMJKz0gbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQubwotZW5kaWYKLWVuZGlmCi0KLSMgbDMgaW5kZXBlbmRlbnQgY29ubnRyYWNrCi1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQpICs9IG5mX2Nvbm50cmFja19pcHY0Lm8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IDcxYjc2YWQuLjlhYTIyMzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtMzU4LDYgKzM1OCw3IEBACiAJCWZvciAoOzspIHsKIAkJCXN0cnVjdCBhcnB0X3N0YW5kYXJkX3RhcmdldCAqdAogCQkJCT0gKHZvaWQgKilhcnB0X2dldF90YXJnZXQoZSk7CisJCQlpbnQgdmlzaXRlZCA9IGUtPmNvbWVmcm9tICYgKDEgPDwgaG9vayk7CiAKIAkJCWlmIChlLT5jb21lZnJvbSAmICgxIDw8IE5GX0FSUF9OVU1IT09LUykpIHsKIAkJCQlwcmludGsoImFycHRhYmxlczogbG9vcCBob29rICV1IHBvcyAldSAlMDhYLlxuIiwKQEAgLTM2OCwxMSArMzY5LDExIEBACiAJCQkJfD0gKCgxIDw8IGhvb2spIHwgKDEgPDwgTkZfQVJQX05VTUhPT0tTKSk7CiAKIAkJCS8qIFVuY29uZGl0aW9uYWwgcmV0dXJuL0VORC4gKi8KLQkJCWlmIChlLT50YXJnZXRfb2Zmc2V0ID09IHNpemVvZihzdHJ1Y3QgYXJwdF9lbnRyeSkKKwkJCWlmICgoZS0+dGFyZ2V0X29mZnNldCA9PSBzaXplb2Yoc3RydWN0IGFycHRfZW50cnkpCiAJCQkgICAgJiYgKHN0cmNtcCh0LT50YXJnZXQudS51c2VyLm5hbWUsCiAJCQkJICAgICAgIEFSUFRfU1RBTkRBUkRfVEFSR0VUKSA9PSAwKQogCQkJICAgICYmIHQtPnZlcmRpY3QgPCAwCi0JCQkgICAgJiYgdW5jb25kaXRpb25hbCgmZS0+YXJwKSkgeworCQkJICAgICYmIHVuY29uZGl0aW9uYWwoJmUtPmFycCkpIHx8IHZpc2l0ZWQpIHsKIAkJCQl1bnNpZ25lZCBpbnQgb2xkcG9zLCBzaXplOwogCiAJCQkJaWYgKHQtPnZlcmRpY3QgPCAtTkZfTUFYX1ZFUkRJQ1QgLSAxKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDVmY2Y5MWQuLjdmNzBiMDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCkBAIC0zNzQsOSArMzc0LDExIEBACiAJCSAgICAmJiBjdG5ldGxpbmtfZHVtcF9oZWxwaW5mbyhza2IsIGN0KSA8IDApCiAJCSAgICAJZ290byBuZmF0dHJfZmFpbHVyZTsKIAorI2lmZGVmIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSwogCQlpZiAoKGV2ZW50cyAmIElQQ1RfTUFSSyB8fCBjdC0+bWFyaykKIAkJICAgICYmIGN0bmV0bGlua19kdW1wX21hcmsoc2tiLCBjdCkgPCAwKQogCQkgICAgCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisjZW5kaWYKIAogCQlpZiAoZXZlbnRzICYgSVBDVF9DT1VOVEVSX0ZJTExJTkcgJiYKIAkJICAgIChjdG5ldGxpbmtfZHVtcF9jb3VudGVycyhza2IsIGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpIDwgMCB8fApAQCAtOTU5LDcgKzk2MSw3IEBACiAJaWYgKGNkYVtDVEFfUFJPVE9JTkZPLTFdKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfcHJvdG9pbmZvKGN0LCBjZGEpOwogCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGVycjsKIAl9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc2lwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3NpcC5jCmluZGV4IDNhMjZkNjMuLjExYzU4OGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc2lwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zaXAuYwpAQCAtMjgzLDEwICsyODMsMTYgQEAKIHsKIAlpbnQgcyA9ICpzaGlmdDsKIAotCWZvciAoOyBkcHRyIDw9IGxpbWl0ICYmICpkcHRyICE9ICdAJzsgZHB0cisrKQorCS8qIFNlYXJjaCBmb3IgQCwgYnV0IHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4KKwkgKiBXZSBhcmUgaW5zaWRlIGEgc2lwOiBVUkksIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQKKwkgKiBjb250aW51YXRpb24gbGluZXMuICovCisJd2hpbGUgKGRwdHIgPD0gbGltaXQgJiYKKwkgICAgICAgKmRwdHIgIT0gJ0AnICYmICpkcHRyICE9ICdccicgJiYgKmRwdHIgIT0gJ1xuJykgewogCQkoKnNoaWZ0KSsrOworCQlkcHRyKys7CisJfQogCi0JaWYgKCpkcHRyID09ICdAJykgeworCWlmIChkcHRyIDw9IGxpbWl0ICYmICpkcHRyID09ICdAJykgewogCQlkcHRyKys7CiAJCSgqc2hpZnQpKys7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggMGZmMjk1Ni4uZmMxZjE1MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtMzg0LDYgKzM4NCw3IEBACiAJCWZvciAoOzspIHsKIAkJCXN0cnVjdCBpcHRfc3RhbmRhcmRfdGFyZ2V0ICp0CiAJCQkJPSAodm9pZCAqKWlwdF9nZXRfdGFyZ2V0KGUpOworCQkJaW50IHZpc2l0ZWQgPSBlLT5jb21lZnJvbSAmICgxIDw8IGhvb2spOwogCiAJCQlpZiAoZS0+Y29tZWZyb20gJiAoMSA8PCBORl9JUF9OVU1IT09LUykpIHsKIAkJCQlwcmludGsoImlwdGFibGVzOiBsb29wIGhvb2sgJXUgcG9zICV1ICUwOFguXG4iLApAQCAtMzk0LDExICszOTUsMTEgQEAKIAkJCQl8PSAoKDEgPDwgaG9vaykgfCAoMSA8PCBORl9JUF9OVU1IT09LUykpOwogCiAJCQkvKiBVbmNvbmRpdGlvbmFsIHJldHVybi9FTkQuICovCi0JCQlpZiAoZS0+dGFyZ2V0X29mZnNldCA9PSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSkKKwkJCWlmICgoZS0+dGFyZ2V0X29mZnNldCA9PSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSkKIAkJCSAgICAmJiAoc3RyY21wKHQtPnRhcmdldC51LnVzZXIubmFtZSwKIAkJCQkgICAgICAgSVBUX1NUQU5EQVJEX1RBUkdFVCkgPT0gMCkKIAkJCSAgICAmJiB0LT52ZXJkaWN0IDwgMAotCQkJICAgICYmIHVuY29uZGl0aW9uYWwoJmUtPmlwKSkgeworCQkJICAgICYmIHVuY29uZGl0aW9uYWwoJmUtPmlwKSkgfHwgdmlzaXRlZCkgewogCQkJCXVuc2lnbmVkIGludCBvbGRwb3MsIHNpemU7CiAKIAkJCQlpZiAodC0+dmVyZGljdCA8IC1ORl9NQVhfVkVSRElDVCAtIDEpIHsKQEAgLTQ4NCw3ICs0ODUsNDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWNoZWNrX21hdGNoKHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKm0sCitjaGVja19lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0ICp0OworCisJaWYgKCFpcF9jaGVja2VudHJ5KCZlLT5pcCkpIHsKKwkJZHVwcmludGYoImlwX3RhYmxlczogaXAgY2hlY2sgZmFpbGVkICVwICVzLlxuIiwgZSwgbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChlLT50YXJnZXRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0KSA+IGUtPm5leHRfb2Zmc2V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKKwlpZiAoZS0+dGFyZ2V0X29mZnNldCArIHQtPnUudGFyZ2V0X3NpemUgPiBlLT5uZXh0X29mZnNldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfbWF0Y2goc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQljb25zdCBzdHJ1Y3QgaXB0X2lwICppcCwgdW5zaWduZWQgaW50IGhvb2ttYXNrKQoreworCXN0cnVjdCBpcHRfbWF0Y2ggKm1hdGNoOworCWludCByZXQ7CisKKwltYXRjaCA9IG0tPnUua2VybmVsLm1hdGNoOworCXJldCA9IHh0X2NoZWNrX21hdGNoKG1hdGNoLCBBRl9JTkVULCBtLT51Lm1hdGNoX3NpemUgLSBzaXplb2YoKm0pLAorCQkJICAgICBuYW1lLCBob29rbWFzaywgaXAtPnByb3RvLAorCQkJICAgICBpcC0+aW52ZmxhZ3MgJiBJUFRfSU5WX1BST1RPKTsKKwlpZiAoIXJldCAmJiBtLT51Lmtlcm5lbC5tYXRjaC0+Y2hlY2tlbnRyeQorCSAgICAmJiAhbS0+dS5rZXJuZWwubWF0Y2gtPmNoZWNrZW50cnkobmFtZSwgaXAsIG1hdGNoLCBtLT5kYXRhLAorCQkJCQkgICAgICBob29rbWFzaykpIHsKKwkJZHVwcmludGYoImlwX3RhYmxlczogY2hlY2sgZmFpbGVkIGZvciBgJXMnLlxuIiwKKwkJCSBtLT51Lmtlcm5lbC5tYXRjaC0+bmFtZSk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitmaW5kX2NoZWNrX21hdGNoKHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKm0sCiAJICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAJICAgIGNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwLAogCSAgICB1bnNpZ25lZCBpbnQgaG9va21hc2ssCkBAIC00OTcsMjYgKzUzOCwxNSBAQAogCQkJCQkJICAgbS0+dS51c2VyLnJldmlzaW9uKSwKIAkJCQkJImlwdF8lcyIsIG0tPnUudXNlci5uYW1lKTsKIAlpZiAoSVNfRVJSKG1hdGNoKSB8fCAhbWF0Y2gpIHsKLQkJZHVwcmludGYoImNoZWNrX21hdGNoOiBgJXMnIG5vdCBmb3VuZFxuIiwgbS0+dS51c2VyLm5hbWUpOworCQlkdXByaW50ZigiZmluZF9jaGVja19tYXRjaDogYCVzJyBub3QgZm91bmRcbiIsIG0tPnUudXNlci5uYW1lKTsKIAkJcmV0dXJuIG1hdGNoID8gUFRSX0VSUihtYXRjaCkgOiAtRU5PRU5UOwogCX0KIAltLT51Lmtlcm5lbC5tYXRjaCA9IG1hdGNoOwogCi0JcmV0ID0geHRfY2hlY2tfbWF0Y2gobWF0Y2gsIEFGX0lORVQsIG0tPnUubWF0Y2hfc2l6ZSAtIHNpemVvZigqbSksCi0JCQkgICAgIG5hbWUsIGhvb2ttYXNrLCBpcC0+cHJvdG8sCi0JCQkgICAgIGlwLT5pbnZmbGFncyAmIElQVF9JTlZfUFJPVE8pOworCXJldCA9IGNoZWNrX21hdGNoKG0sIG5hbWUsIGlwLCBob29rbWFzayk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlpZiAobS0+dS5rZXJuZWwubWF0Y2gtPmNoZWNrZW50cnkKLQkgICAgJiYgIW0tPnUua2VybmVsLm1hdGNoLT5jaGVja2VudHJ5KG5hbWUsIGlwLCBtYXRjaCwgbS0+ZGF0YSwKLQkJCQkJICAgICAgaG9va21hc2spKSB7Ci0JCWR1cHJpbnRmKCJpcF90YWJsZXM6IGNoZWNrIGZhaWxlZCBmb3IgYCVzJy5cbiIsCi0JCQkgbS0+dS5rZXJuZWwubWF0Y2gtPm5hbWUpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci0KIAkoKmkpKys7CiAJcmV0dXJuIDA7CiBlcnI6CkBAIC01MjQsMTAgKzU1NCwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXB0X3RhcmdldCBpcHRfc3RhbmRhcmRfdGFyZ2V0Oworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfdGFyZ2V0KHN0cnVjdCBpcHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgCXN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0ICp0OworIAlzdHJ1Y3QgaXB0X3RhcmdldCAqdGFyZ2V0OworIAlpbnQgcmV0OworCisJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOworCXRhcmdldCA9IHQtPnUua2VybmVsLnRhcmdldDsKKwlyZXQgPSB4dF9jaGVja190YXJnZXQodGFyZ2V0LCBBRl9JTkVULCB0LT51LnRhcmdldF9zaXplIC0gc2l6ZW9mKCp0KSwKKwkJCSAgICAgIG5hbWUsIGUtPmNvbWVmcm9tLCBlLT5pcC5wcm90bywKKwkJCSAgICAgIGUtPmlwLmludmZsYWdzICYgSVBUX0lOVl9QUk9UTyk7CisJaWYgKCFyZXQgJiYgdC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5CisJCSAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkobmFtZSwgZSwgdGFyZ2V0LAorCQkJCQkJICAgICAgdC0+ZGF0YSwgZS0+Y29tZWZyb20pKSB7CisJCWR1cHJpbnRmKCJpcF90YWJsZXM6IGNoZWNrIGZhaWxlZCBmb3IgYCVzJy5cbiIsCisJCQkgdC0+dS5rZXJuZWwudGFyZ2V0LT5uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldDsKK30KIAogc3RhdGljIGlubGluZSBpbnQKLWNoZWNrX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplLAorZmluZF9jaGVja19lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwKIAkgICAgdW5zaWduZWQgaW50ICppKQogewogCXN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0ICp0OwpAQCAtNTM1LDQ5ICs1ODQsMzIgQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBqOwogCi0JaWYgKCFpcF9jaGVja2VudHJ5KCZlLT5pcCkpIHsKLQkJZHVwcmludGYoImlwX3RhYmxlczogaXAgY2hlY2sgZmFpbGVkICVwICVzLlxuIiwgZSwgbmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChlLT50YXJnZXRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0KSA+IGUtPm5leHRfb2Zmc2V0KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSBjaGVja19lbnRyeShlLCBuYW1lKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJaiA9IDA7Ci0JcmV0ID0gSVBUX01BVENIX0lURVJBVEUoZSwgY2hlY2tfbWF0Y2gsIG5hbWUsICZlLT5pcCwgZS0+Y29tZWZyb20sICZqKTsKKwlyZXQgPSBJUFRfTUFUQ0hfSVRFUkFURShlLCBmaW5kX2NoZWNrX21hdGNoLCBuYW1lLCAmZS0+aXAsCisJCQkJCQkJZS0+Y29tZWZyb20sICZqKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gY2xlYW51cF9tYXRjaGVzOwogCiAJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOwotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKGUtPnRhcmdldF9vZmZzZXQgKyB0LT51LnRhcmdldF9zaXplID4gZS0+bmV4dF9vZmZzZXQpCi0JCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKIAl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChBRl9JTkVULAogCQkJCQkJICAgICB0LT51LnVzZXIubmFtZSwKIAkJCQkJCSAgICAgdC0+dS51c2VyLnJldmlzaW9uKSwKIAkJCQkJICJpcHRfJXMiLCB0LT51LnVzZXIubmFtZSk7CiAJaWYgKElTX0VSUih0YXJnZXQpIHx8ICF0YXJnZXQpIHsKLQkJZHVwcmludGYoImNoZWNrX2VudHJ5OiBgJXMnIG5vdCBmb3VuZFxuIiwgdC0+dS51c2VyLm5hbWUpOworCQlkdXByaW50ZigiZmluZF9jaGVja19lbnRyeTogYCVzJyBub3QgZm91bmRcbiIsIHQtPnUudXNlci5uYW1lKTsKIAkJcmV0ID0gdGFyZ2V0ID8gUFRSX0VSUih0YXJnZXQpIDogLUVOT0VOVDsKIAkJZ290byBjbGVhbnVwX21hdGNoZXM7CiAJfQogCXQtPnUua2VybmVsLnRhcmdldCA9IHRhcmdldDsKIAotCXJldCA9IHh0X2NoZWNrX3RhcmdldCh0YXJnZXQsIEFGX0lORVQsIHQtPnUudGFyZ2V0X3NpemUgLSBzaXplb2YoKnQpLAotCQkJICAgICAgbmFtZSwgZS0+Y29tZWZyb20sIGUtPmlwLnByb3RvLAotCQkJICAgICAgZS0+aXAuaW52ZmxhZ3MgJiBJUFRfSU5WX1BST1RPKTsKKwlyZXQgPSBjaGVja190YXJnZXQoZSwgbmFtZSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlpZiAodC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5Ci0JCSAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkobmFtZSwgZSwgdGFyZ2V0LCB0LT5kYXRhLAotCQkJCQkJICAgICAgZS0+Y29tZWZyb20pKSB7Ci0JCWR1cHJpbnRmKCJpcF90YWJsZXM6IGNoZWNrIGZhaWxlZCBmb3IgYCVzJy5cbiIsCi0JCQkgdC0+dS5rZXJuZWwudGFyZ2V0LT5uYW1lKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnI7Ci0JfQotCiAJKCppKSsrOwogCXJldHVybiAwOwogIGVycjoKQEAgLTcxMiw3ICs3NDQsNyBAQAogCS8qIEZpbmFsbHksIGVhY2ggc2FuaXR5IGNoZWNrIG11c3QgcGFzcyAqLwogCWkgPSAwOwogCXJldCA9IElQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwKLQkJCQljaGVja19lbnRyeSwgbmFtZSwgc2l6ZSwgJmkpOworCQkJCWZpbmRfY2hlY2tfZW50cnksIG5hbWUsIHNpemUsICZpKTsKIAogCWlmIChyZXQgIT0gMCkgewogCQlJUFRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsCkBAIC04ODcsMTMgKzkxOSwxMyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIHN0cnVjdCBjb21wYXRfZGVsdGEgewogCXN0cnVjdCBjb21wYXRfZGVsdGEgKm5leHQ7Ci0JdV9pbnQxNl90IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXNob3J0IGRlbHRhOwogfTsKIAogc3RhdGljIHN0cnVjdCBjb21wYXRfZGVsdGEgKmNvbXBhdF9vZmZzZXRzID0gTlVMTDsKIAotc3RhdGljIGludCBjb21wYXRfYWRkX29mZnNldCh1X2ludDE2X3Qgb2Zmc2V0LCBzaG9ydCBkZWx0YSkKK3N0YXRpYyBpbnQgY29tcGF0X2FkZF9vZmZzZXQodW5zaWduZWQgaW50IG9mZnNldCwgc2hvcnQgZGVsdGEpCiB7CiAJc3RydWN0IGNvbXBhdF9kZWx0YSAqdG1wOwogCkBAIC05MjUsNyArOTU3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzaG9ydCBjb21wYXRfY2FsY19qdW1wKHVfaW50MTZfdCBvZmZzZXQpCitzdGF0aWMgc2hvcnQgY29tcGF0X2NhbGNfanVtcCh1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogCXN0cnVjdCBjb21wYXRfZGVsdGEgKnRtcDsKIAlzaG9ydCBkZWx0YTsKQEAgLTk2NSw3ICs5OTcsNyBAQAogCQl2b2lkICpiYXNlLCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKIHsKIAlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKLQl1X2ludDE2X3QgZW50cnlfb2Zmc2V0OworCXVuc2lnbmVkIGludCBlbnRyeV9vZmZzZXQ7CiAJaW50IG9mZiwgaSwgcmV0OwogCiAJb2ZmID0gMDsKQEAgLTE0MzUsNyArMTQ2Nyw3IEBACiB7CiAJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CiAJc3RydWN0IGlwdF90YXJnZXQgKnRhcmdldDsKLQl1X2ludDE2X3QgZW50cnlfb2Zmc2V0OworCXVuc2lnbmVkIGludCBlbnRyeV9vZmZzZXQ7CiAJaW50IHJldCwgb2ZmLCBoLCBqOwogCiAJZHVwcmludGYoImNoZWNrX2NvbXBhdF9lbnRyeV9zaXplX2FuZF9ob29rcyAlcFxuIiwgZSk7CkBAIC0xNDUyLDE0ICsxNDg0LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFpcF9jaGVja2VudHJ5KCZlLT5pcCkpIHsKLQkJZHVwcmludGYoImlwX3RhYmxlczogaXAgY2hlY2sgZmFpbGVkICVwICVzLlxuIiwgZSwgbmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChlLT50YXJnZXRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfZW50cnlfdGFyZ2V0KSA+Ci0JCQkJCQkJCWUtPm5leHRfb2Zmc2V0KQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSBjaGVja19lbnRyeShlLCBuYW1lKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJb2ZmID0gMDsKIAllbnRyeV9vZmZzZXQgPSAodm9pZCAqKWUgLSAodm9pZCAqKWJhc2U7CkBAIC0xNDcwLDE1ICsxNDk3LDEzIEBACiAJCWdvdG8gY2xlYW51cF9tYXRjaGVzOwogCiAJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOwotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKGUtPnRhcmdldF9vZmZzZXQgKyB0LT51LnRhcmdldF9zaXplID4gZS0+bmV4dF9vZmZzZXQpCi0JCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKIAl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChBRl9JTkVULAogCQkJCQkJICAgICB0LT51LnVzZXIubmFtZSwKIAkJCQkJCSAgICAgdC0+dS51c2VyLnJldmlzaW9uKSwKIAkJCQkJICJpcHRfJXMiLCB0LT51LnVzZXIubmFtZSk7CiAJaWYgKElTX0VSUih0YXJnZXQpIHx8ICF0YXJnZXQpIHsKLQkJZHVwcmludGYoImNoZWNrX2VudHJ5OiBgJXMnIG5vdCBmb3VuZFxuIiwgdC0+dS51c2VyLm5hbWUpOworCQlkdXByaW50ZigiY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzOiBgJXMnIG5vdCBmb3VuZFxuIiwKKwkJCQkJCQl0LT51LnVzZXIubmFtZSk7CiAJCXJldCA9IHRhcmdldCA/IFBUUl9FUlIodGFyZ2V0KSA6IC1FTk9FTlQ7CiAJCWdvdG8gY2xlYW51cF9tYXRjaGVzOwogCX0KQEAgLTE1NTUsNTcgKzE1ODAsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjb21wYXRfY2hlY2tfbWF0Y2goc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQljb25zdCBzdHJ1Y3QgaXB0X2lwICppcCwgdW5zaWduZWQgaW50IGhvb2ttYXNrKQotewotCXN0cnVjdCBpcHRfbWF0Y2ggKm1hdGNoOwotCWludCByZXQ7Ci0KLQltYXRjaCA9IG0tPnUua2VybmVsLm1hdGNoOwotCXJldCA9IHh0X2NoZWNrX21hdGNoKG1hdGNoLCBBRl9JTkVULCBtLT51Lm1hdGNoX3NpemUgLSBzaXplb2YoKm0pLAotCQkJICAgICBuYW1lLCBob29rbWFzaywgaXAtPnByb3RvLAotCQkJICAgICBpcC0+aW52ZmxhZ3MgJiBJUFRfSU5WX1BST1RPKTsKLQlpZiAoIXJldCAmJiBtLT51Lmtlcm5lbC5tYXRjaC0+Y2hlY2tlbnRyeQotCSAgICAmJiAhbS0+dS5rZXJuZWwubWF0Y2gtPmNoZWNrZW50cnkobmFtZSwgaXAsIG1hdGNoLCBtLT5kYXRhLAotCQkJCQkgICAgICBob29rbWFzaykpIHsKLQkJZHVwcmludGYoImlwX3RhYmxlczogY29tcGF0OiBjaGVjayBmYWlsZWQgZm9yIGAlcycuXG4iLAotCQkJIG0tPnUua2VybmVsLm1hdGNoLT5uYW1lKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY29tcGF0X2NoZWNrX3RhcmdldChzdHJ1Y3QgaXB0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lKQotewotIAlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKLSAJc3RydWN0IGlwdF90YXJnZXQgKnRhcmdldDsKLSAJaW50IHJldDsKLQotCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKLQl0YXJnZXQgPSB0LT51Lmtlcm5lbC50YXJnZXQ7Ci0JcmV0ID0geHRfY2hlY2tfdGFyZ2V0KHRhcmdldCwgQUZfSU5FVCwgdC0+dS50YXJnZXRfc2l6ZSAtIHNpemVvZigqdCksCi0JCQkgICAgICBuYW1lLCBlLT5jb21lZnJvbSwgZS0+aXAucHJvdG8sCi0JCQkgICAgICBlLT5pcC5pbnZmbGFncyAmIElQVF9JTlZfUFJPVE8pOwotCWlmICghcmV0ICYmIHQtPnUua2VybmVsLnRhcmdldC0+Y2hlY2tlbnRyeQotCQkgICAmJiAhdC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5KG5hbWUsIGUsIHRhcmdldCwKLQkJCQkJCSAgICAgIHQtPmRhdGEsIGUtPmNvbWVmcm9tKSkgewotCQlkdXByaW50ZigiaXBfdGFibGVzOiBjb21wYXQ6IGNoZWNrIGZhaWxlZCBmb3IgYCVzJy5cbiIsCi0JCQkgdC0+dS5rZXJuZWwudGFyZ2V0LT5uYW1lKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgY29tcGF0X2NoZWNrX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IElQVF9NQVRDSF9JVEVSQVRFKGUsIGNvbXBhdF9jaGVja19tYXRjaCwgbmFtZSwgJmUtPmlwLAotCQkJCQkJCQllLT5jb21lZnJvbSk7CisJcmV0ID0gSVBUX01BVENIX0lURVJBVEUoZSwgY2hlY2tfbWF0Y2gsIG5hbWUsICZlLT5pcCwgZS0+Y29tZWZyb20pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gY29tcGF0X2NoZWNrX3RhcmdldChlLCBuYW1lKTsKKwlyZXR1cm4gY2hlY2tfdGFyZ2V0KGUsIG5hbWUpOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCAwOTgzNjUwLi5iMWMxMTE2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTQ0Nyw2ICs0NDcsMTIgQEAKIAkJY2lwaW5mby0+Y29uZmlnID0gY29uZmlnOwogCX0KIAorCWlmIChuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KHRhcmdldC0+ZmFtaWx5KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FuJ3QgbG9hZCBjb25udHJhY2sgc3VwcG9ydCBmb3IgIgorCQkJCSAgICAicHJvdG89JWRcbiIsIHRhcmdldC0+ZmFtaWx5KTsKKwkJcmV0dXJuIDA7CisJfQorCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQ2MCw2ICs0NjYsOCBAQAogCWNsdXN0ZXJpcF9jb25maWdfZW50cnlfcHV0KGNpcGluZm8tPmNvbmZpZyk7CiAKIAljbHVzdGVyaXBfY29uZmlnX3B1dChjaXBpbmZvLT5jb25maWcpOworCisJbmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KHRhcmdldC0+ZmFtaWx5KTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGNsdXN0ZXJpcF90Z3QgPSB7CkBAIC02ODMsNyArNjkxLDcgQEAKIHsKICNkZWZpbmUgUFJPQ19XUklURUxFTgkxMAogCWNoYXIgYnVmZmVyW1BST0NfV1JJVEVMRU4rMV07Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjID0gcGRlLT5kYXRhOwogCXVuc2lnbmVkIGxvbmcgbm9kZW51bTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwppbmRleCAyOGI5MjMzLi5kNjY5Njg1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwpAQCAtMTI3LDEwICsxMjcsMTMgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBkZXZpY2VfY21wKHN0cnVjdCBpcF9jb25udHJhY2sgKmksIHZvaWQgKmlmaW5kZXgpCiB7CisJaW50IHJldDsKICNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAogCXN0cnVjdCBuZl9jb25uX25hdCAqbmF0ID0gbmZjdF9uYXQoaSk7CisKKwlpZiAoIW5hdCkKKwkJcmV0dXJuIDA7CiAjZW5kaWYKLQlpbnQgcmV0OwogCiAJcmVhZF9sb2NrX2JoKCZtYXNxX2xvY2spOwogI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYwppbmRleCAxMjZkYjQ0Li40ZGIwZTczIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMKQEAgLTQwMSw3ICs0MDEsNyBAQAogc3RhdGljIHNzaXplX3QgcmVjZW50X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICppbnB1dCwKIAkJCQkgc2l6ZV90IHNpemUsIGxvZmZfdCAqbG9mZikKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IHJlY2VudF90YWJsZSAqdCA9IHBkZS0+ZGF0YTsKIAlzdHJ1Y3QgcmVjZW50X2VudHJ5ICplOwogCWNoYXIgYnVmW3NpemVvZigiKzI1NS4yNTUuMjU1LjI1NSIpXSwgKmMgPSBidWY7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHB0cC5jCmluZGV4IDBhZTQ1YjcuLjVkZjRmY2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHB0cC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHB0cC5jCkBAIC03Miw5ICs3Miw5IEBACiAJCURFQlVHUCgid2UgYXJlIFBBQy0+UE5TXG4iKTsKIAkJLyogYnVpbGQgdHVwbGUgZm9yIFBOUy0+UEFDICovCiAJCXQuc3JjLmwzbnVtID0gQUZfSU5FVDsKLQkJdC5zcmMudTMuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFtleHAtPmRpcl0udHVwbGUuc3JjLnUzLmlwOworCQl0LnNyYy51My5pcCA9IG1hc3Rlci0+dHVwbGVoYXNoWyFleHAtPmRpcl0udHVwbGUuc3JjLnUzLmlwOwogCQl0LnNyYy51LmdyZS5rZXkgPSBuYXRfcHB0cF9pbmZvLT5wbnNfY2FsbF9pZDsKLQkJdC5kc3QudTMuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFtleHAtPmRpcl0udHVwbGUuZHN0LnUzLmlwOworCQl0LmRzdC51My5pcCA9IG1hc3Rlci0+dHVwbGVoYXNoWyFleHAtPmRpcl0udHVwbGUuZHN0LnUzLmlwOwogCQl0LmRzdC51LmdyZS5rZXkgPSBuYXRfcHB0cF9pbmZvLT5wYWNfY2FsbF9pZDsKIAkJdC5kc3QucHJvdG9udW0gPSBJUFBST1RPX0dSRTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCmluZGV4IDczMGE3YTQuLjAwZDZkZWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAogCW5hdCA9IG5mY3RfbmF0KGN0KTsKIAlpZiAoIW5hdCkKLQkJcmV0dXJuIE5GX0RST1A7CisJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAlzd2l0Y2ggKGN0aW5mbykgewogCWNhc2UgSVBfQ1RfUkVMQVRFRDoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDExYzE2NzEuLjJkYWEwZGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTMyNSw3ICsxMzI1LDggQEAKIAkvKiBDaGVjayBmb3IgbG9hZCBsaW1pdDsgc2V0IHJhdGVfbGFzdCB0byB0aGUgbGF0ZXN0IHNlbnQKIAkgKiByZWRpcmVjdC4KIAkgKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCWlmIChydC0+dS5kc3QucmF0ZV90b2tlbnMgPT0gMCB8fAorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsCiAJCSAgICAgICAocnQtPnUuZHN0LnJhdGVfbGFzdCArCiAJCQkoaXBfcnRfcmVkaXJlY3RfbG9hZCA8PCBydC0+dS5kc3QucmF0ZV90b2tlbnMpKSkpIHsKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9SRURJUkVDVCwgSUNNUF9SRURJUl9IT1NULCBydC0+cnRfZ2F0ZXdheSk7CkBAIC0yODcyLDggKzI4NzMsNyBAQAogCQkJCQkJdm9pZCBfX3VzZXIgKm9sZHZhbCwKIAkJCQkJCXNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkJCQl2b2lkIF9fdXNlciAqbmV3dmFsLAotCQkJCQkJc2l6ZV90IG5ld2xlbiwKLQkJCQkJCXZvaWQgKipjb250ZXh0KQorCQkJCQkJc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgZGVsYXk7CiAJaWYgKG5ld2xlbiAhPSBzaXplb2YoaW50KSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKaW5kZXggZGZjZjQ3Zi4uZmFiZjY5YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKQEAgLTUxLDggKzUxLDcgQEAKIHN0YXRpYyBpbnQgaXB2NF9zeXNjdGxfZm9yd2FyZF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLAogCQkJIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQkJIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCi0JCQkgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwgCi0JCQkgdm9pZCAqKmNvbnRleHQpCisJCQkgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgKnZhbHAgPSB0YWJsZS0+ZGF0YTsKIAlpbnQgbmV3OwpAQCAtMTExLDggKzExMCw3IEBACiBzdGF0aWMgaW50IHN5c2N0bF90Y3BfY29uZ2VzdGlvbl9jb250cm9sKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsCiAJCQkJCSBpbnQgbmxlbiwgdm9pZCBfX3VzZXIgKm9sZHZhbCwKIAkJCQkJIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCi0JCQkJCSB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLAotCQkJCQkgdm9pZCAqKmNvbnRleHQpCisJCQkJCSB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCWNoYXIgdmFsW1RDUF9DQV9OQU1FX01BWF07CiAJY3RsX3RhYmxlIHRibCA9IHsKQEAgLTEyMiw4ICsxMjAsNyBAQAogCWludCByZXQ7CiAKIAl0Y3BfZ2V0X2RlZmF1bHRfY29uZ2VzdGlvbl9jb250cm9sKHZhbCk7Ci0JcmV0ID0gc3lzY3RsX3N0cmluZygmdGJsLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuLAotCQkJICAgIGNvbnRleHQpOworCXJldCA9IHN5c2N0bF9zdHJpbmcoJnRibCwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHJldCA9PSAwICYmIG5ld3ZhbCAmJiBuZXdsZW4pCiAJCXJldCA9IHRjcF9zZXRfZGVmYXVsdF9jb25nZXN0aW9uX2NvbnRyb2wodmFsKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTY5LDggKzE2Niw4IEBACiBzdGF0aWMgaW50IHN0cmF0ZWd5X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsCiAJCQkJCSAgICAgICBpbnQgbmxlbiwgdm9pZCBfX3VzZXIgKm9sZHZhbCwKIAkJCQkJICAgICAgIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCi0JCQkJCSAgICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLAotCQkJCQkgICAgICAgdm9pZCAqKmNvbnRleHQpCisJCQkJCSAgICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLAorCQkJCQkgICAgICAgc2l6ZV90IG5ld2xlbikKIHsKIAljdGxfdGFibGUgdGJsID0geyAubWF4bGVuID0gVENQX0NBX0JVRl9NQVggfTsKIAlpbnQgcmV0OwpAQCAtMTgwLDggKzE3Nyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJdGNwX2dldF9hdmFpbGFibGVfY29uZ2VzdGlvbl9jb250cm9sKHRibC5kYXRhLCB0YmwubWF4bGVuKTsKLQlyZXQgPSBzeXNjdGxfc3RyaW5nKCZ0YmwsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4sCi0JCQkgICAgY29udGV4dCk7CisJcmV0ID0gc3lzY3RsX3N0cmluZygmdGJsLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAlpZiAocmV0ID09IDAgJiYgbmV3dmFsICYmIG5ld2xlbikKIAkJcmV0ID0gdGNwX3NldF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbCh0YmwuZGF0YSk7CiAJa2ZyZWUodGJsLmRhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAwOTBjNjkwLi5iNjdlMGRkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMjM2NCw4ICsyMzY0LDkgQEAKIAogRVhQT1JUX1NZTUJPTChfX3RjcF9nZXRfbWQ1c2lnX3Bvb2wpOwogCi12b2lkIF9fdGNwX3B1dF9tZDVzaWdfcG9vbCh2b2lkKSB7Ci0JX190Y3BfZnJlZV9tZDVzaWdfcG9vbCh0Y3BfbWQ1c2lnX3Bvb2wpOwordm9pZCBfX3RjcF9wdXRfbWQ1c2lnX3Bvb2wodm9pZCkKK3sKKwl0Y3BfZnJlZV9tZDVzaWdfcG9vbCgpOwogfQogCiBFWFBPUlRfU1lNQk9MKF9fdGNwX3B1dF9tZDVzaWdfcG9vbCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGM3MDFmNmEuLmMyNjA3NmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC0xMDExLDEwICsxMDExLDExIEBACiAJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKXsKIAkJCQlpZiAoYWZ0ZXIobnRvaGwoc3Bbal0uc3RhcnRfc2VxKSwKIAkJCQkJICBudG9obChzcFtqKzFdLnN0YXJ0X3NlcSkpKXsKLQkJCQkJc3Bbal0uc3RhcnRfc2VxID0gaHRvbmwodHAtPnJlY3Zfc2Fja19jYWNoZVtqKzFdLnN0YXJ0X3NlcSk7Ci0JCQkJCXNwW2pdLmVuZF9zZXEgPSBodG9ubCh0cC0+cmVjdl9zYWNrX2NhY2hlW2orMV0uZW5kX3NlcSk7Ci0JCQkJCXNwW2orMV0uc3RhcnRfc2VxID0gaHRvbmwodHAtPnJlY3Zfc2Fja19jYWNoZVtqXS5zdGFydF9zZXEpOwotCQkJCQlzcFtqKzFdLmVuZF9zZXEgPSBodG9ubCh0cC0+cmVjdl9zYWNrX2NhY2hlW2pdLmVuZF9zZXEpOworCQkJCQlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2tfd2lyZSB0bXA7CisKKwkJCQkJdG1wID0gc3Bbal07CisJCQkJCXNwW2pdID0gc3BbaisxXTsKKwkJCQkJc3BbaisxXSA9IHRtcDsKIAkJCQl9CiAKIAkJCX0KQEAgLTQ0MjAsOSArNDQyMSwxMSBAQAogCQkJICogQnV0LCB0aGlzIGxlYXZlcyBvbmUgb3BlbiB0byBhbiBlYXN5IGRlbmlhbCBvZgogCQkgCSAqIHNlcnZpY2UgYXR0YWNrLCBhbmQgU1lOIGNvb2tpZXMgY2FuJ3QgZGVmZW5kCiAJCQkgKiBhZ2FpbnN0IHRoaXMgcHJvYmxlbS4gU28sIHdlIGRyb3AgdGhlIGRhdGEKLQkJCSAqIGluIHRoZSBpbnRlcmVzdCBvZiBzZWN1cml0eSBvdmVyIHNwZWVkLgorCQkJICogaW4gdGhlIGludGVyZXN0IG9mIHNlY3VyaXR5IG92ZXIgc3BlZWQgdW5sZXNzCisJCQkgKiBpdCdzIHN0aWxsIGluIHVzZS4KIAkJCSAqLwotCQkJZ290byBkaXNjYXJkOworCQkJa2ZyZWVfc2tiKHNrYik7CisJCQlyZXR1cm4gMDsKIAkJfQogCQlnb3RvIGRpc2NhcmQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IGExMjIyZDYuLjEyZGU5MGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJCQkJICAgVENQT0xFTl9USU1FU1RBTVApOwogCQlyZXAub3B0WzFdID0gaHRvbmwodGNwX3RpbWVfc3RhbXApOwogCQlyZXAub3B0WzJdID0gaHRvbmwodHMpOwotCQlhcmcuaW92WzBdLmlvdl9sZW4gPSBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEOworCQlhcmcuaW92WzBdLmlvdl9sZW4gKz0gVENQT0xFTl9UU1RBTVBfQUxJR05FRDsKIAl9CiAKIAkvKiBTd2FwIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZS4gKi8KQEAgLTkyOCw2ICs5MjgsNyBAQAogCQkJaWYgKHRwLT5tZDVzaWdfaW5mby0+ZW50cmllczQgPT0gMCkgewogCQkJCWtmcmVlKHRwLT5tZDVzaWdfaW5mby0+a2V5czQpOwogCQkJCXRwLT5tZDVzaWdfaW5mby0+a2V5czQgPSBOVUxMOworCQkJCXRwLT5tZDVzaWdfaW5mby0+YWxsb2NlZDQgPSAwOwogCQkJfSBlbHNlIGlmICh0cC0+bWQ1c2lnX2luZm8tPmVudHJpZXM0ICE9IGkpIHsKIAkJCQkvKiBOZWVkIHRvIGRvIHNvbWUgbWFuaXB1bGF0aW9uICovCiAJCQkJbWVtY3B5KCZ0cC0+bWQ1c2lnX2luZm8tPmtleXM0W2ldLApAQCAtMTE4NSw3ICsxMTg2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaGFzaF9leHBlY3RlZCAmJiAhaGFzaF9sb2NhdGlvbikgewotCQlMSU1JVF9ORVRERUJVRyhLRVJOX0lORk8gIk1ENSBIYXNoIE5PVCBleHBlY3RlZCBidXQgZm91bmQgIgorCQlMSU1JVF9ORVRERUJVRyhLRVJOX0lORk8gIk1ENSBIYXNoIGV4cGVjdGVkIGJ1dCBOT1QgZm91bmQgIgogCQkJICAgICAgICIoIiBOSVBRVUFEX0ZNVCAiLCAlZCktPigiIE5JUFFVQURfRk1UICIsICVkKVxuIiwKIAkJCSAgICAgICBOSVBRVUFEKGlwaC0+c2FkZHIpLCBudG9ocyh0aC0+c291cmNlKSwKIAkJCSAgICAgICBOSVBRVUFEKGlwaC0+ZGFkZHIpLCBudG9ocyh0aC0+ZGVzdCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IDMyYzFhOTcuLjk3NWY0NDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogCiAJdGggPSAoc3RydWN0IHRjcGhkciAqKSBza2JfcHVzaChza2IsIHRjcF9oZWFkZXJfc2l6ZSk7CiAJc2tiLT5oLnRoID0gdGg7CisJc2tiX3NldF9vd25lcl93KHNrYiwgc2spOwogCiAJLyogQnVpbGQgVENQIGhlYWRlciBhbmQgY2hlY2tzdW0gaXQuICovCiAJdGgtPnNvdXJjZQkJPSBpbmV0LT5zcG9ydDsKQEAgLTU0MCw3ICs1NDEsNyBAQAogCWlmIChhZnRlcih0Y2ItPmVuZF9zZXEsIHRwLT5zbmRfbnh0KSB8fCB0Y2ItPnNlcSA9PSB0Y2ItPmVuZF9zZXEpCiAJCVRDUF9JTkNfU1RBVFMoVENQX01JQl9PVVRTRUdTKTsKIAotCWVyciA9IGljc2stPmljc2tfYWZfb3BzLT5xdWV1ZV94bWl0KHNrYiwgc2ssIDApOworCWVyciA9IGljc2stPmljc2tfYWZfb3BzLT5xdWV1ZV94bWl0KHNrYiwgMCk7CiAJaWYgKGxpa2VseShlcnIgPD0gMCkpCiAJCXJldHVybiBlcnI7CiAKQEAgLTE2NTAsNyArMTY1MSw4IEBACiAKIAkJbWVtY3B5KHNrYl9wdXQoc2tiLCBuZXh0X3NrYl9zaXplKSwgbmV4dF9za2ItPmRhdGEsIG5leHRfc2tiX3NpemUpOwogCi0JCXNrYi0+aXBfc3VtbWVkID0gbmV4dF9za2ItPmlwX3N1bW1lZDsKKwkJaWYgKG5leHRfc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAogCQlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkKIAkJCXNrYi0+Y3N1bSA9IGNzdW1fYmxvY2tfYWRkKHNrYi0+Y3N1bSwgbmV4dF9za2ItPmNzdW0sIHNrYl9zaXplKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9wcm9iZS5jIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKaW5kZXggZjIzMGVlZS4uNDFjMTU3OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3Byb2JlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgPG5ldC90Y3AuaD4KIAotTU9EVUxFX0FVVEhPUigiU3RlcGhlbiBIZW1taW5nZXIgPHNoZW1taW5nZXJAb3NkbC5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJTdGVwaGVuIEhlbW1pbmdlciA8c2hlbW1pbmdlckBsaW51eC1mb3VuZGF0aW9uLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVENQIGN3bmQgc25vb3BlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IDAzNTkxNWYuLmNmZmY5MzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC0xNjUsMTEgKzE2NSwxNCBAQAogCQkJCWdvdG8gZ290aXQ7CiAJCQl9CiAJCQlzaXplID0gMDsKLQkJCXNrX2Zvcl9lYWNoKHNrMiwgbm9kZSwgaGVhZCkKLQkJCQlpZiAoKytzaXplIDwgYmVzdF9zaXplX3NvX2ZhcikgewotCQkJCQliZXN0X3NpemVfc29fZmFyID0gc2l6ZTsKLQkJCQkJYmVzdCA9IHJlc3VsdDsKLQkJCQl9CisJCQlza19mb3JfZWFjaChzazIsIG5vZGUsIGhlYWQpIHsKKwkJCQlpZiAoKytzaXplID49IGJlc3Rfc2l6ZV9zb19mYXIpCisJCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJCWJlc3Rfc2l6ZV9zb19mYXIgPSBzaXplOworCQkJYmVzdCA9IHJlc3VsdDsKKwkJbmV4dDoKKwkJCTsKIAkJfQogCQlyZXN1bHQgPSBiZXN0OwogCQlmb3IoaSA9IDA7IGkgPCAoMSA8PCAxNikgLyBVRFBfSFRBQkxFX1NJWkU7IGkrKywgcmVzdWx0ICs9IFVEUF9IVEFCTEVfU0laRSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggYTVlOGQyMC4uZTM4NTQ2OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0zNDEsNiArMzQxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaW5ldDZfZGV2ICogaXB2Nl9hZGRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGluZXQ2X2RldiAqbmRldjsKKwlzdHJ1Y3QgaW42X2FkZHIgbWFkZHI7CiAKIAlBU1NFUlRfUlROTCgpOwogCkBAIC00MTMsOCArNDE0LDYgQEAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKQogCQluZGV2LT5pZl9mbGFncyB8PSBJRl9SRUFEWTsKIAotCS8qIHByb3RlY3RlZCBieSBydG5sX2xvY2sgKi8KLQlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LT5pcDZfcHRyLCBuZGV2KTsKIAogCWlwdjZfbWNfaW5pdF9kZXYobmRldik7CiAJbmRldi0+dHN0YW1wID0gamlmZmllczsKQEAgLTQyNSw2ICs0MjQsMTMgQEAKIAkJCSAgICAgIE5VTEwpOwogCWFkZHJjb25mX3N5c2N0bF9yZWdpc3RlcihuZGV2LCAmbmRldi0+Y25mKTsKICNlbmRpZgorCS8qIHByb3RlY3RlZCBieSBydG5sX2xvY2sgKi8KKwlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LT5pcDZfcHRyLCBuZGV2KTsKKworCS8qIEpvaW4gYWxsLW5vZGUgbXVsdGljYXN0IGdyb3VwICovCisJaXB2Nl9hZGRyX2FsbF9ub2RlcygmbWFkZHIpOworCWlwdjZfZGV2X21jX2luYyhkZXYsICZtYWRkcik7CisKIAlyZXR1cm4gbmRldjsKIH0KIApAQCAtMzM4Nyw3ICszMzkzLDcgQEAKICNpZmRlZiBDT05GSUdfSVBWNl9ST1VURVJfUFJFRgogCWFycmF5W0RFVkNPTkZfQUNDRVBUX1JBX1JUUl9QUkVGXSA9IGNuZi0+YWNjZXB0X3JhX3J0cl9wcmVmOwogCWFycmF5W0RFVkNPTkZfUlRSX1BST0JFX0lOVEVSVkFMXSA9IGNuZi0+cnRyX3Byb2JlX2ludGVydmFsOwotI2lmZGVmIENPTkZJVl9JUFY2X1JPVVRFX0lORk8KKyNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCiAJYXJyYXlbREVWQ09ORl9BQ0NFUFRfUkFfUlRfSU5GT19NQVhfUExFTl0gPSBjbmYtPmFjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuOwogI2VuZGlmCiAjZW5kaWYKQEAgLTM2NTYsOCArMzY2Miw3IEBACiAJCQkJCSAgICBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJCQkJICAgIHZvaWQgX191c2VyICpvbGR2YWwsCiAJCQkJCSAgICBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkJCQkgICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwKLQkJCQkJICAgIHZvaWQgKipjb250ZXh0KQorCQkJCQkgICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgKnZhbHAgPSB0YWJsZS0+ZGF0YTsKIAlpbnQgbmV3OwpAQCAtMzg5Myw3ICszODk4LDcgQEAKIAkJCS5wcm9jX2hhbmRsZXIJPQkmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCQkJLnN0cmF0ZWd5CT0JJnN5c2N0bF9qaWZmaWVzLAogCQl9LAotI2lmZGVmIENPTkZJVl9JUFY2X1JPVVRFX0lORk8KKyNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCiAJCXsKIAkJCS5jdGxfbmFtZQk9CU5FVF9JUFY2X0FDQ0VQVF9SQV9SVF9JTkZPX01BWF9QTEVOLAogCQkJLnByb2NuYW1lCT0JImFjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCmluZGV4IGU1Y2Q4M2IuLjBlMGU0MjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmMKKysrIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwpAQCAtMTcxLDcgKzE3MSw3IEBACiAJCXNrLT5za19yZXVzZSA9IDE7CiAKIAlpbmV0ID0gaW5ldF9zayhzayk7Ci0JaW5ldC0+aXNfaWNzayA9IElORVRfUFJPVE9TV19JQ1NLICYgYW5zd2VyX2ZsYWdzOworCWluZXQtPmlzX2ljc2sgPSAoSU5FVF9QUk9UT1NXX0lDU0sgJiBhbnN3ZXJfZmxhZ3MpICE9IDA7CiAKIAlpZiAoU09DS19SQVcgPT0gc29jay0+dHlwZSkgewogCQlpbmV0LT5udW0gPSBwcm90b2NvbDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggYzcwMDMwMi4uMTE2Zjk0YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTEzOSw4ICsxMzksOSBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0Nl9jc2tfYWRkcjJzb2NrYWRkcik7CiAKLWludCBpbmV0Nl9jc2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssIGludCBpcGZyYWdvaykKK2ludCBpbmV0Nl9jc2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaXBmcmFnb2spCiB7CisJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBmbG93aSBmbDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCBlOTIxMmM3Li43YjdiZDQ0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC03MiwyMCArNzIsMTEgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaXA2X291dHB1dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYi0+ZHN0OwotCXN0cnVjdCBoaF9jYWNoZSAqaGggPSBkc3QtPmhoOwogCi0JaWYgKGhoKSB7Ci0JCWludCBoaF9hbGVuOwotCi0JCXJlYWRfbG9ja19iaCgmaGgtPmhoX2xvY2spOwotCQloaF9hbGVuID0gSEhfREFUQV9BTElHTihoaC0+aGhfbGVuKTsKLQkJbWVtY3B5KHNrYi0+ZGF0YSAtIGhoX2FsZW4sIGhoLT5oaF9kYXRhLCBoaF9hbGVuKTsKLQkJcmVhZF91bmxvY2tfYmgoJmhoLT5oaF9sb2NrKTsKLQkgICAgICAgIHNrYl9wdXNoKHNrYiwgaGgtPmhoX2xlbik7Ci0JCXJldHVybiBoaC0+aGhfb3V0cHV0KHNrYik7Ci0JfSBlbHNlIGlmIChkc3QtPm5laWdoYm91cikKKwlpZiAoZHN0LT5oaCkKKwkJcmV0dXJuIG5laWdoX2hoX291dHB1dChkc3QtPmhoLCBza2IpOworCWVsc2UgaWYgKGRzdC0+bmVpZ2hib3VyKQogCQlyZXR1cm4gZHN0LT5uZWlnaGJvdXItPm91dHB1dChza2IpOwogCiAJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoZHN0KSwgSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IDFlYWZjZmMuLjM1MjY5MGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYworKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTk3OCwxMiArOTc4LDI3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBJUFY2X1VOSUNBU1RfSE9QUzoKLQkJdmFsID0gbnAtPmhvcF9saW1pdDsKLQkJYnJlYWs7Ci0KIAljYXNlIElQVjZfTVVMVElDQVNUX0hPUFM6Ci0JCXZhbCA9IG5wLT5tY2FzdF9ob3BzOworCXsKKwkJc3RydWN0IGRzdF9lbnRyeSAqZHN0OworCisJCWlmIChvcHRuYW1lID09IElQVjZfVU5JQ0FTVF9IT1BTKQorCQkJdmFsID0gbnAtPmhvcF9saW1pdDsKKwkJZWxzZQorCQkJdmFsID0gbnAtPm1jYXN0X2hvcHM7CisKKwkJZHN0ID0gc2tfZHN0X2dldChzayk7CisJCWlmIChkc3QpIHsKKwkJCWlmICh2YWwgPCAwKQorCQkJCXZhbCA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX0hPUExJTUlUKTsKKwkJCWlmICh2YWwgPCAwKQorCQkJCXZhbCA9IGlwdjZfZ2V0X2hvcGxpbWl0KGRzdC0+ZGV2KTsKKwkJCWRzdF9yZWxlYXNlKGRzdCk7CisJCX0KKwkJaWYgKHZhbCA8IDApCisJCQl2YWwgPSBpcHY2X2RldmNvbmYuaG9wX2xpbWl0OwogCQlicmVhazsKKwl9CiAKIAljYXNlIElQVjZfTVVMVElDQVNUX0xPT1A6CiAJCXZhbCA9IG5wLT5tY19sb29wOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmMKaW5kZXggYTFjMjMxYS4uODgyY2RlNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWNhc3QuYworKysgYi9uZXQvaXB2Ni9tY2FzdC5jCkBAIC0yMjU4LDggKzIyNTgsNiBAQAogCiB2b2lkIGlwdjZfbWNfaW5pdF9kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKLQlzdHJ1Y3QgaW42X2FkZHIgbWFkZHI7Ci0KIAl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAlyd2xvY2tfaW5pdCgmaWRldi0+bWNfbG9jayk7CiAJaWRldi0+bWNfZ3FfcnVubmluZyA9IDA7CkBAIC0yMjc1LDEwICsyMjczLDYgQEAKIAlpZGV2LT5tY19tYXhkZWxheSA9IElHTVA2X1VOU09MSUNJVEVEX0lWQUw7CiAJaWRldi0+bWNfdjFfc2VlbiA9IDA7CiAJd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQotCS8qIEFkZCBhbGwtbm9kZXMgYWRkcmVzcy4gKi8KLQlpcHY2X2FkZHJfYWxsX25vZGVzKCZtYWRkcik7Ci0JaXB2Nl9kZXZfbWNfaW5jKGlkZXYtPmRldiwgJm1hZGRyKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IDU2ZWE5MjguLjM5YmI2NTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKKysrIGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtMTQxMyw2ICsxNDEzLDEzIEBACiAgCQlyZXR1cm47CiAgCX0KIAorCWlmICghaXB2Nl9hZGRyX2VxdWFsKCZza2ItPm5oLmlwdjZoLT5kYWRkciwgdGFyZ2V0KSAmJgorCSAgICAhKGlwdjZfYWRkcl90eXBlKHRhcmdldCkgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSkgeworCQlORF9QUklOVEsyKEtFUk5fV0FSTklORworCQkJIklDTVB2NiBSZWRpcmVjdDogdGFyZ2V0IGFkZHJlc3MgaXMgbm90IGxpbmstbG9jYWwuXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCW5kaXNjX2Zsb3dfaW5pdCgmZmwsIE5ESVNDX1JFRElSRUNULCAmc2FkZHJfYnVmLCAmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCiAJCQlkZXYtPmlmaW5kZXgpOwogCkBAIC0xNjY3LDggKzE2NzQsNyBAQAogc3RhdGljIGludCBuZGlzY19pZmluZm9fc3lzY3RsX3N0cmF0ZWd5KGN0bF90YWJsZSAqY3RsLCBpbnQgX191c2VyICpuYW1lLAogCQkJCQlpbnQgbmxlbiwgdm9pZCBfX3VzZXIgKm9sZHZhbCwKIAkJCQkJc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKLQkJCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwKLQkJCQkJdm9pZCAqKmNvbnRleHQpCisJCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGN0bC0+ZXh0cmExOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CkBAIC0xNjgxLDE0ICsxNjg3LDEyIEBACiAJc3dpdGNoIChjdGwtPmN0bF9uYW1lKSB7CiAJY2FzZSBORVRfTkVJR0hfUkVBQ0hBQkxFX1RJTUU6CiAJCXJldCA9IHN5c2N0bF9qaWZmaWVzKGN0bCwgbmFtZSwgbmxlbiwKLQkJCQkgICAgIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4sCi0JCQkJICAgICBjb250ZXh0KTsKKwkJCQkgICAgIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCQlicmVhazsKIAljYXNlIE5FVF9ORUlHSF9SRVRSQU5TX1RJTUVfTVM6CiAJY2FzZSBORVRfTkVJR0hfUkVBQ0hBQkxFX1RJTUVfTVM6CiAJCSByZXQgPSBzeXNjdGxfbXNfamlmZmllcyhjdGwsIG5hbWUsIG5sZW4sCi0JCQkJCSBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuLAotCQkJCQkgY29udGV4dCk7CisJCQkJCSBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAkJIGJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGZjM2U1ZWIuLmFkY2Q2MTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCkBAIC03LDcgKzcsNyBAQAogCiBjb25maWcgTkZfQ09OTlRSQUNLX0lQVjYKIAl0cmlzdGF0ZSAiSVB2NiBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLCisJZGVwZW5kcyBvbiBJTkVUICYmIElQVjYgJiYgRVhQRVJJTUVOVEFMICYmIE5GX0NPTk5UUkFDSwogCS0tLWhlbHAtLS0KIAkgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkCiAJICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZApAQCAtMjEsNiArMjEsNyBAQAogCiBjb25maWcgSVA2X05GX1FVRVVFCiAJdHJpc3RhdGUgIklQNiBVc2Vyc3BhY2UgcXVldWVpbmcgdmlhIE5FVExJTksgKE9CU09MRVRFKSIKKwlkZXBlbmRzIG9uIElORVQgJiYgSVBWNiAmJiBORVRGSUxURVIgJiYgRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQogCiAJICBUaGlzIG9wdGlvbiBhZGRzIGEgcXVldWUgaGFuZGxlciB0byB0aGUga2VybmVsIGZvciBJUHY2CkBAIC00MSw3ICs0Miw3IEBACiAKIGNvbmZpZyBJUDZfTkZfSVBUQUJMRVMKIAl0cmlzdGF0ZSAiSVA2IHRhYmxlcyBzdXBwb3J0IChyZXF1aXJlZCBmb3IgZmlsdGVyaW5nKSIKLQlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCisJZGVwZW5kcyBvbiBJTkVUICYmIElQVjYgJiYgRVhQRVJJTUVOVEFMICYmIE5FVEZJTFRFUl9YVEFCTEVTCiAJaGVscAogCSAgaXA2dGFibGVzIGlzIGEgZ2VuZXJhbCwgZXh0ZW5zaWJsZSBwYWNrZXQgaWRlbnRpZmljYXRpb24gZnJhbWV3b3JrLgogCSAgQ3VycmVudGx5IG9ubHkgdGhlIHBhY2tldCBmaWx0ZXJpbmcgYW5kIHBhY2tldCBtYW5nbGluZyBzdWJzeXN0ZW0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDRlZWM0YjMuLjk5NTAyYzUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtNDEzLDYgKzQxMyw3IEBACiAJCXVuc2lnbmVkIGludCBwb3MgPSBuZXdpbmZvLT5ob29rX2VudHJ5W2hvb2tdOwogCQlzdHJ1Y3QgaXA2dF9lbnRyeSAqZQogCQkJPSAoc3RydWN0IGlwNnRfZW50cnkgKikoZW50cnkwICsgcG9zKTsKKwkJaW50IHZpc2l0ZWQgPSBlLT5jb21lZnJvbSAmICgxIDw8IGhvb2spOwogCiAJCWlmICghKHZhbGlkX2hvb2tzICYgKDEgPDwgaG9vaykpKQogCQkJY29udGludWU7CkBAIC00MzMsMTEgKzQzNCwxMSBAQAogCQkJCXw9ICgoMSA8PCBob29rKSB8ICgxIDw8IE5GX0lQNl9OVU1IT09LUykpOwogCiAJCQkvKiBVbmNvbmRpdGlvbmFsIHJldHVybi9FTkQuICovCi0JCQlpZiAoZS0+dGFyZ2V0X29mZnNldCA9PSBzaXplb2Yoc3RydWN0IGlwNnRfZW50cnkpCisJCQlpZiAoKGUtPnRhcmdldF9vZmZzZXQgPT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2VudHJ5KQogCQkJICAgICYmIChzdHJjbXAodC0+dGFyZ2V0LnUudXNlci5uYW1lLAogCQkJCSAgICAgICBJUDZUX1NUQU5EQVJEX1RBUkdFVCkgPT0gMCkKIAkJCSAgICAmJiB0LT52ZXJkaWN0IDwgMAotCQkJICAgICYmIHVuY29uZGl0aW9uYWwoJmUtPmlwdjYpKSB7CisJCQkgICAgJiYgdW5jb25kaXRpb25hbCgmZS0+aXB2NikpIHx8IHZpc2l0ZWQpIHsKIAkJCQl1bnNpZ25lZCBpbnQgb2xkcG9zLCBzaXplOwogCiAJCQkJaWYgKHQtPnZlcmRpY3QgPCAtTkZfTUFYX1ZFUkRJQ1QgLSAxKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKaW5kZXggMzdlNWZjYS4uZDljMTU0MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwpAQCAtODM1LDYgKzgzNSw4IEBACiAJCXMtPm5mY3RfcmVhc20gPSBza2I7CiAKIAkJczIgPSBzLT5uZXh0OworCQlzLT5uZXh0ID0gTlVMTDsKKwogCQlORl9IT09LX1RIUkVTSChQRl9JTkVUNiwgaG9va251bSwgcywgaW4sIG91dCwgb2tmbiwKIAkJCSAgICAgICBORl9JUDZfUFJJX0NPTk5UUkFDS19ERUZSQUcgKyAxKTsKIAkJcyA9IHMyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggOWY4MDUxOC4uNWYwMDQzYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC00OTQsNyArNDk0LDcgQEAKIAkJCQlnb3RvIG91dDsgXAogCQkJcG4gPSBmbi0+cGFyZW50OyBcCiAJCQlpZiAoRklCNl9TVUJUUkVFKHBuKSAmJiBGSUI2X1NVQlRSRUUocG4pICE9IGZuKSBcCi0JCQkJZm4gPSBmaWI2X2xvb2t1cChwbi0+c3VidHJlZSwgTlVMTCwgc2FkZHIpOyBcCisJCQkJZm4gPSBmaWI2X2xvb2t1cChGSUI2X1NVQlRSRUUocG4pLCBOVUxMLCBzYWRkcik7IFwKIAkJCWVsc2UgXAogCQkJCWZuID0gcG47IFwKIAkJCWlmIChmbi0+Zm5fZmxhZ3MgJiBSVE5fUlRJTkZPKSBcCkBAIC0yMDE3LDYgKzIwMTcsNyBAQAogCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9JSUYgKi8KIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfT0lGICovCiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX1BSSU9SSVRZICovCisJICAgICAgICsgUlRBWF9NQVggKiBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfTUVUUklDUyAqLwogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9pb2N0bC5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfaW9jdGwuYwppbmRleCAxOTdlM2U3Li43NWUzOWVhIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9pb2N0bC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2lvY3RsLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogICogICAgZG8gc29tZXRoaW5nIHJhdGlvbmFsLgogICovCiB2b2lkIGlyY29tbV90dHlfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgCi0JCQkgICAgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQorCQkJICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBpbnQgY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggM2E2Njg3OC4uODAxMDdkNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIG1lbnUgIkNvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24iCi0JZGVwZW5kcyBvbiBORVQgJiYgTkVURklMVEVSCisJZGVwZW5kcyBvbiBORVQgJiYgSU5FVCAmJiBORVRGSUxURVIKIAogY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LCiAgICAgICAgdHJpc3RhdGUgIk5ldGZpbHRlciBuZXRsaW5rIGludGVyZmFjZSIKQEAgLTQ0LDggKzQ0LDcgQEAKIAlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19FTkFCTEVECiAKIGNvbmZpZyBORl9DT05OVFJBQ0tfU1VQUE9SVAotCWJvb2wgIkxheWVyIDMgSW5kZXBlbmRlbnQgQ29ubmVjdGlvbiB0cmFja2luZyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWJvb2wgIkxheWVyIDMgSW5kZXBlbmRlbnQgQ29ubmVjdGlvbiB0cmFja2luZyIKIAloZWxwCiAJICBMYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZXhwZXJpbWVudGFsIHNjaGVtZQogCSAgd2hpY2ggZ2VuZXJhbGl6ZSBpcF9jb25udHJhY2sgdG8gc3VwcG9ydCBvdGhlciBsYXllciAzIHByb3RvY29scy4KQEAgLTEyMiw3ICsxMjEsNyBAQAogCiBjb25maWcgTkZfQ1RfUFJPVE9fR1JFCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sKKwlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSwogCiBjb25maWcgTkZfQ1RfUFJPVE9fU0NUUAogCXRyaXN0YXRlICdTQ1RQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKScKQEAgLTEzNiw4ICsxMzUsOCBAQAogCSAgRG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dC4gIElmIHVuc3VyZSwgc2F5IGBOJy4KIAogY29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREEKLQl0cmlzdGF0ZSAiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIE5GX0NPTk5UUkFDSworCXRyaXN0YXRlICJBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sKIAlzZWxlY3QgVEVYVFNFQVJDSAogCXNlbGVjdCBURVhUU0VBUkNIX0tNUAogCWhlbHAKQEAgLTE1MSw4ICsxNTAsOCBAQAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBORl9DT05OVFJBQ0tfRlRQCi0JdHJpc3RhdGUgIkZUUCBwcm90b2NvbCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIE5GX0NPTk5UUkFDSworCXRyaXN0YXRlICJGVFAgcHJvdG9jb2wgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSwogCWhlbHAKIAkgIFRyYWNraW5nIEZUUCBjb25uZWN0aW9ucyBpcyBwcm9ibGVtYXRpYzogc3BlY2lhbCBoZWxwZXJzIGFyZQogCSAgcmVxdWlyZWQgZm9yIHRyYWNraW5nIHRoZW0sIGFuZCBkb2luZyBtYXNxdWVyYWRpbmcgYW5kIG90aGVyIGZvcm1zCkBAIC0xNjYsNyArMTY1LDcgQEAKIAogY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzCiAJdHJpc3RhdGUgIkguMzIzIHByb3RvY29sIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLICYmIChJUFY2IHx8IElQVjY9bikKIAloZWxwCiAJICBILjMyMyBpcyBhIFZvSVAgc2lnbmFsbGluZyBwcm90b2NvbCBmcm9tIElUVS1ULiBBcyBvbmUgb2YgdGhlIG1vc3QKIAkgIGltcG9ydGFudCBWb0lQIHByb3RvY29scywgaXQgaXMgd2lkZWx5IHVzZWQgYnkgdm9pY2UgaGFyZHdhcmUgYW5kCkBAIC0xODQsOCArMTgzLDggQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgTkZfQ09OTlRSQUNLX0lSQwotCXRyaXN0YXRlICJJUkMgcHJvdG9jb2wgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sKKwl0cmlzdGF0ZSAiSVJDIHByb3RvY29sIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sKIAloZWxwCiAJICBUaGVyZSBpcyBhIGNvbW1vbmx5LXVzZWQgZXh0ZW5zaW9uIHRvIElSQyBjYWxsZWQKIAkgIERpcmVjdCBDbGllbnQtdG8tQ2xpZW50IFByb3RvY29sIChEQ0MpLiAgVGhpcyBlbmFibGVzIHVzZXJzIHRvIHNlbmQKQEAgLTIxOCw4ICsyMTcsOCBAQAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUAotCXRyaXN0YXRlICJQUHRQIHByb3RvY29sIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLCisJdHJpc3RhdGUgIlBQdFAgcHJvdG9jb2wgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSwogCXNlbGVjdCBORl9DVF9QUk9UT19HUkUKIAloZWxwCiAJICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFBQVFAgKFBvaW50IHRvIFBvaW50IFR1bm5lbGxpbmcKQEAgLTI0OSw4ICsyNDgsOCBAQAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUAotCXRyaXN0YXRlICJURlRQIHByb3RvY29sIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLCisJdHJpc3RhdGUgIlRGVFAgcHJvdG9jb2wgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSwogCWhlbHAKIAkgIFRGVFAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIsIHRoaXMgaXMgcmVxdWlyZWQgZGVwZW5kaW5nCiAJICBvbiBob3cgcmVzdHJpY3RpdmUgeW91ciBydWxlc2V0IGlzLgpAQCAtNjI5LDcgKzYyOCw3IEBACiAKIGNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUCiAJdHJpc3RhdGUgJyJoYXNobGltaXQiIG1hdGNoIHN1cHBvcnQnCi0JZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFUworCWRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVMgJiYgKElQNl9ORl9JUFRBQkxFUyB8fCBJUDZfTkZfSVBUQUJMRVM9bikKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhZGRzIGEgYGhhc2hsaW1pdCcgbWF0Y2guCiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwppbmRleCBhNWIyMzRlLi4yYTQ4ZWZkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCkBAIC04OSw2ICs4OSw3IEBACiAKIAlleHAtPmV4cGVjdGZuICAgICAgICAgICAgID0gTlVMTDsKIAlleHAtPmZsYWdzICAgICAgICAgICAgICAgID0gTkZfQ1RfRVhQRUNUX1BFUk1BTkVOVDsKKwlleHAtPmhlbHBlciAgICAgICAgICAgICAgID0gTlVMTDsKIAogCW5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApOwogCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggYmQxZDJkZS4uYzY0ZjAyOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtMzg5LDkgKzM4OSwxMSBAQAogCQkgICAgJiYgY3RuZXRsaW5rX2R1bXBfaGVscGluZm8oc2tiLCBjdCkgPCAwKQogCQkgICAgCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CiAKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksKIAkJaWYgKChldmVudHMgJiBJUENUX01BUksgfHwgY3QtPm1hcmspCiAJCSAgICAmJiBjdG5ldGxpbmtfZHVtcF9tYXJrKHNrYiwgY3QpIDwgMCkKIAkJICAgIAlnb3RvIG5mYXR0cl9mYWlsdXJlOworI2VuZGlmCiAKIAkJaWYgKGV2ZW50cyAmIElQQ1RfQ09VTlRFUl9GSUxMSU5HICYmCiAJCSAgICAoY3RuZXRsaW5rX2R1bXBfY291bnRlcnMoc2tiLCBjdCwgSVBfQ1RfRElSX09SSUdJTkFMKSA8IDAgfHwKQEAgLTk4MSw3ICs5ODMsNyBAQAogCWlmIChjZGFbQ1RBX1BST1RPSU5GTy0xXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3Byb3RvaW5mbyhjdCwgY2RhKTsKIAkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCQkJZ290byBlcnI7CiAJfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKaW5kZXggZjBmZjAwZS4uYzU5ZGYzYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbmZfbmF0X3BwdHBfZXhwZWN0Zm4gPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3BwdHBfaG9va19leHBlY3Rmbik7Ci0JaWYgKG5mX25hdF9wcHRwX2V4cGVjdGZuICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spCisJaWYgKG5mX25hdF9wcHRwX2V4cGVjdGZuICYmIGN0LT5tYXN0ZXItPnN0YXR1cyAmIElQU19OQVRfTUFTSykKIAkJbmZfbmF0X3BwdHBfZXhwZWN0Zm4oY3QsIGV4cCk7CiAJZWxzZSB7CiAJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgaW52X3Q7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCmluZGV4IGViMmEyNDEuLjlkZWMxMTUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCkBAIC0zMDMsMTAgKzMwMywxNiBAQAogewogCWludCBzID0gKnNoaWZ0OwogCi0JZm9yICg7IGRwdHIgPD0gbGltaXQgJiYgKmRwdHIgIT0gJ0AnOyBkcHRyKyspCisJLyogU2VhcmNoIGZvciBALCBidXQgc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCSAqIFdlIGFyZSBpbnNpZGUgYSBzaXA6IFVSSSwgc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dAorCSAqIGNvbnRpbnVhdGlvbiBsaW5lcy4gKi8KKwl3aGlsZSAoZHB0ciA8PSBsaW1pdCAmJgorCSAgICAgICAqZHB0ciAhPSAnQCcgJiYgKmRwdHIgIT0gJ1xyJyAmJiAqZHB0ciAhPSAnXG4nKSB7CiAJCSgqc2hpZnQpKys7CisJCWRwdHIrKzsKKwl9CiAKLQlpZiAoKmRwdHIgPT0gJ0AnKSB7CisJaWYgKGRwdHIgPD0gbGltaXQgJiYgKmRwdHIgPT0gJ0AnKSB7CiAJCWRwdHIrKzsKIAkJKCpzaGlmdCkrKzsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuYwppbmRleCBiNTU0ODIzLi4wNTM0YmZhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9DT05OTUFSSy5jCkBAIC05Niw2ICs5NiwxMSBAQAogewogCXN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyAqbWF0Y2hpbmZvID0gdGFyZ2luZm87CiAKKwlpZiAobmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldCh0YXJnZXQtPmZhbWlseSkgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNhbid0IGxvYWQgY29ubnRyYWNrIHN1cHBvcnQgZm9yICIKKwkJCQkgICAgInByb3RvPSVkXG4iLCB0YXJnZXQtPmZhbWlseSk7CisJCXJldHVybiAwOworCX0KIAlpZiAobWF0Y2hpbmZvLT5tb2RlID09IFhUX0NPTk5NQVJLX1JFU1RPUkUpIHsKIAkJaWYgKHN0cmNtcCh0YWJsZW5hbWUsICJtYW5nbGUiKSAhPSAwKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDT05OTUFSSzogcmVzdG9yZSBjYW4gb25seSBiZSAiCkBAIC0xMTEsNiArMTE2LDEyIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkCitkZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwgdm9pZCAqdGFyZ2luZm8pCit7CisJbmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KHRhcmdldC0+ZmFtaWx5KTsKK30KKwogI2lmZGVmIENPTkZJR19DT01QQVQKIHN0cnVjdCBjb21wYXRfeHRfY29ubm1hcmtfdGFyZ2V0X2luZm8gewogCWNvbXBhdF91bG9uZ190CW1hcmssIG1hc2s7CkBAIC0xNDcsNiArMTU4LDcgQEAKIAkJLm5hbWUJCT0gIkNPTk5NQVJLIiwKIAkJLmZhbWlseQkJPSBBRl9JTkVULAogCQkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJCS5kZXN0cm95CT0gZGVzdHJveSwKIAkJLnRhcmdldAkJPSB0YXJnZXQsCiAJCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyksCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtMTYwLDYgKzE3Miw3IEBACiAJCS5uYW1lCQk9ICJDT05OTUFSSyIsCiAJCS5mYW1pbHkJCT0gQUZfSU5FVDYsCiAJCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkJLmRlc3Ryb3kJPSBkZXN0cm95LAogCQkudGFyZ2V0CQk9IHRhcmdldCwKIAkJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvKSwKIAkJLm1lCQk9IFRISVNfTU9EVUxFCkBAIC0xNjgsNyArMTgxLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgeHRfY29ubm1hcmtfaW5pdCh2b2lkKQogewotCW5lZWRfY29ubnRyYWNrKCk7CiAJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldHMoeHRfY29ubm1hcmtfdGFyZ2V0LAogCQkJCSAgIEFSUkFZX1NJWkUoeHRfY29ubm1hcmtfdGFyZ2V0KSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMKaW5kZXggNDY3Mzg2Mi4uYTNmZTNjMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYwpAQCAtOTMsNiArOTMsMTEgQEAKIHsKIAlzdHJ1Y3QgeHRfY29ubnNlY21hcmtfdGFyZ2V0X2luZm8gKmluZm8gPSB0YXJnaW5mbzsKIAorCWlmIChuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KHRhcmdldC0+ZmFtaWx5KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FuJ3QgbG9hZCBjb25udHJhY2sgc3VwcG9ydCBmb3IgIgorCQkJCSAgICAicHJvdG89JWRcbiIsIHRhcmdldC0+ZmFtaWx5KTsKKwkJcmV0dXJuIDA7CisJfQogCXN3aXRjaCAoaW5mby0+bW9kZSkgewogCWNhc2UgQ09OTlNFQ01BUktfU0FWRToKIAljYXNlIENPTk5TRUNNQVJLX1JFU1RPUkU6CkBAIC0xMDYsMTEgKzExMSwxOCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZAorZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsIHZvaWQgKnRhcmdpbmZvKQoreworCW5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dCh0YXJnZXQtPmZhbWlseSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IHh0X2Nvbm5zZWNtYXJrX3RhcmdldFtdID0gewogCXsKIAkJLm5hbWUJCT0gIkNPTk5TRUNNQVJLIiwKIAkJLmZhbWlseQkJPSBBRl9JTkVULAogCQkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJCS5kZXN0cm95CT0gZGVzdHJveSwKIAkJLnRhcmdldAkJPSB0YXJnZXQsCiAJCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyksCiAJCS50YWJsZQkJPSAibWFuZ2xlIiwKQEAgLTEyMCw2ICsxMzIsNyBAQAogCQkubmFtZQkJPSAiQ09OTlNFQ01BUksiLAogCQkuZmFtaWx5CQk9IEFGX0lORVQ2LAogCQkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJCS5kZXN0cm95CT0gZGVzdHJveSwKIAkJLnRhcmdldAkJPSB0YXJnZXQsCiAJCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyksCiAJCS50YWJsZQkJPSAibWFuZ2xlIiwKQEAgLTEyOSw3ICsxNDIsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB4dF9jb25uc2VjbWFya19pbml0KHZvaWQpCiB7Ci0JbmVlZF9jb25udHJhY2soKTsKIAlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0cyh4dF9jb25uc2VjbWFya190YXJnZXQsCiAJCQkJICAgQVJSQVlfU0laRSh4dF9jb25uc2VjbWFya190YXJnZXQpKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5jCmluZGV4IGRjYzQ5N2UuLjVlMzJkZmEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9jb25uYnl0ZXMuYwpAQCAtNTIsNiArNTIsOCBAQAogewogCWNvbnN0IHN0cnVjdCB4dF9jb25uYnl0ZXNfaW5mbyAqc2luZm8gPSBtYXRjaGluZm87CiAJdV9pbnQ2NF90IHdoYXQgPSAwOwkvKiBpbml0aWFsaXplIHRvIG1ha2UgZ2NjIGhhcHB5ICovCisJdV9pbnQ2NF90IGJ5dGVzID0gMDsKKwl1X2ludDY0X3QgcGt0cyA9IDA7CiAJY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja19jb3VudGVyICpjb3VudGVyczsKIAogCWlmICghKGNvdW50ZXJzID0gbmZfY3RfZ2V0X2NvdW50ZXJzKHNrYikpKQpAQCAtODksMjkgKzkxLDIyIEBACiAJY2FzZSBYVF9DT05OQllURVNfQVZHUEtUOgogCQlzd2l0Y2ggKHNpbmZvLT5kaXJlY3Rpb24pIHsKIAkJY2FzZSBYVF9DT05OQllURVNfRElSX09SSUdJTkFMOgotCQkJd2hhdCA9IGRpdjY0XzY0KGNvdW50ZXJzW0lQX0NUX0RJUl9PUklHSU5BTF0uYnl0ZXMsCi0JCQkJCWNvdW50ZXJzW0lQX0NUX0RJUl9PUklHSU5BTF0ucGFja2V0cyk7CisJCQlieXRlcyA9IGNvdW50ZXJzW0lQX0NUX0RJUl9PUklHSU5BTF0uYnl0ZXM7CisJCQlwa3RzICA9IGNvdW50ZXJzW0lQX0NUX0RJUl9PUklHSU5BTF0ucGFja2V0czsKIAkJCWJyZWFrOwogCQljYXNlIFhUX0NPTk5CWVRFU19ESVJfUkVQTFk6Ci0JCQl3aGF0ID0gZGl2NjRfNjQoY291bnRlcnNbSVBfQ1RfRElSX1JFUExZXS5ieXRlcywKLQkJCQkJY291bnRlcnNbSVBfQ1RfRElSX1JFUExZXS5wYWNrZXRzKTsKKwkJCWJ5dGVzID0gY291bnRlcnNbSVBfQ1RfRElSX1JFUExZXS5ieXRlczsKKwkJCXBrdHMgID0gY291bnRlcnNbSVBfQ1RfRElSX1JFUExZXS5wYWNrZXRzOwogCQkJYnJlYWs7CiAJCWNhc2UgWFRfQ09OTkJZVEVTX0RJUl9CT1RIOgotCQkJewotCQkJCXVfaW50NjRfdCBieXRlczsKLQkJCQl1X2ludDY0X3QgcGt0czsKLQkJCQlieXRlcyA9IGNvdW50ZXJzW0lQX0NUX0RJUl9PUklHSU5BTF0uYnl0ZXMgKwotCQkJCQljb3VudGVyc1tJUF9DVF9ESVJfUkVQTFldLmJ5dGVzOwotCQkJCXBrdHMgPSBjb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLnBhY2tldHMrCi0JCQkJCWNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0ucGFja2V0czsKLQotCQkJCS8qIEZJWE1FX1RIRU9SRVRJQ0FMOiB3aGF0IHRvIGRvIGlmIHN1bQotCQkJCSAqIG92ZXJmbG93cyA/ICovCi0KLQkJCQl3aGF0ID0gZGl2NjRfNjQoYnl0ZXMsIHBrdHMpOwotCQkJfQorCQkJYnl0ZXMgPSBjb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLmJ5dGVzICsKKwkJCQljb3VudGVyc1tJUF9DVF9ESVJfUkVQTFldLmJ5dGVzOworCQkJcGt0cyAgPSBjb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdLnBhY2tldHMgKworCQkJCWNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0ucGFja2V0czsKIAkJCWJyZWFrOwogCQl9CisJCWlmIChwa3RzICE9IDApCisJCQl3aGF0ID0gZGl2NjRfNjQoYnl0ZXMsIHBrdHMpOwogCQlicmVhazsKIAl9CiAKQEAgLTEzOSwxNSArMTM0LDI4IEBACiAJICAgIHNpbmZvLT5kaXJlY3Rpb24gIT0gWFRfQ09OTkJZVEVTX0RJUl9CT1RIKQogCQlyZXR1cm4gMDsKIAorCWlmIChuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KG1hdGNoLT5mYW1pbHkpIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYW4ndCBsb2FkIGNvbm50cmFjayBzdXBwb3J0IGZvciAiCisJCQkJICAgICJwcm90bz0lZFxuIiwgbWF0Y2gtPmZhbWlseSk7CisJCXJldHVybiAwOworCX0KKwogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZAorZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB2b2lkICptYXRjaGluZm8pCit7CisJbmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KG1hdGNoLT5mYW1pbHkpOworfQorCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHh0X2Nvbm5ieXRlc19tYXRjaFtdID0gewogCXsKIAkJLm5hbWUJCT0gImNvbm5ieXRlcyIsCiAJCS5mYW1pbHkJCT0gQUZfSU5FVCwKIAkJLmNoZWNrZW50cnkJPSBjaGVjaywKIAkJLm1hdGNoCQk9IG1hdGNoLAorCQkuZGVzdHJveQk9IGRlc3Ryb3ksCiAJCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm5ieXRlc19pbmZvKSwKIAkJLm1lCQk9IFRISVNfTU9EVUxFCiAJfSwKQEAgLTE1Niw2ICsxNjQsNyBAQAogCQkuZmFtaWx5CQk9IEFGX0lORVQ2LAogCQkuY2hlY2tlbnRyeQk9IGNoZWNrLAogCQkubWF0Y2gJCT0gbWF0Y2gsCisJCS5kZXN0cm95CT0gZGVzdHJveSwKIAkJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfY29ubmJ5dGVzX2luZm8pLAogCQkubWUJCT0gVEhJU19NT0RVTEUKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jIGIvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jCmluZGV4IGE4ZjAzMDUuLjM2YzJkZWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMKQEAgLTYzLDIyICs2MywxOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb25ubWFyazogb25seSBzdXBwb3J0IDMyYml0IG1hcmtcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0jaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQogCWlmIChuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KG1hdGNoLT5mYW1pbHkpIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYW4ndCBsb2FkIG5mX2Nvbm50cmFjayBzdXBwb3J0IGZvciAiCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNhbid0IGxvYWQgY29ubnRyYWNrIHN1cHBvcnQgZm9yICIKIAkJCQkgICAgInByb3RvPSVkXG4iLCBtYXRjaC0+ZmFtaWx5KTsKIAkJcmV0dXJuIDA7CiAJfQotI2VuZGlmCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkCiBkZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHZvaWQgKm1hdGNoaW5mbykKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCiAJbmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KG1hdGNoLT5mYW1pbHkpOwotI2VuZGlmCiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC0xNDAsNyArMTM2LDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgeHRfY29ubm1hcmtfaW5pdCh2b2lkKQogewotCW5lZWRfY29ubnRyYWNrKCk7CiAJcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMoeHRfY29ubm1hcmtfbWF0Y2gsCiAJCQkJICAgQVJSQVlfU0laRSh4dF9jb25ubWFya19tYXRjaCkpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKaW5kZXggMGVhNTAxYS4uM2RjMjM1NyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tcGF0Lmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIk1hcmMgQm91Y2hlciA8bWFyY0BtYnNpLmNhPiIpOwpAQCAtMjI4LDIxICsyMjksMTcgQEAKIAkgICB2b2lkICptYXRjaGluZm8sCiAJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCiAJaWYgKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQobWF0Y2gtPmZhbWlseSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNhbid0IGxvYWQgbmZfY29ubnRyYWNrIHN1cHBvcnQgZm9yICIKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FuJ3QgbG9hZCBjb25udHJhY2sgc3VwcG9ydCBmb3IgIgogCQkJCSAgICAicHJvdG89JWRcbiIsIG1hdGNoLT5mYW1pbHkpOwogCQlyZXR1cm4gMDsKIAl9Ci0jZW5kaWYKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHZvaWQgZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB2b2lkICptYXRjaGluZm8pCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQogCW5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dChtYXRjaC0+ZmFtaWx5KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGNvbm50cmFja19tYXRjaCA9IHsKQEAgLTI1Nyw3ICsyNTQsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB4dF9jb25udHJhY2tfaW5pdCh2b2lkKQogewotCW5lZWRfY29ubnRyYWNrKCk7CiAJcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoKCZjb25udHJhY2tfbWF0Y2gpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwppbmRleCBhNWE2ZTE5Li5mMjhiZjY5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKQEAgLTc0NSw3ICs3NDUsNyBAQAogCX0KIAloYXNobGltaXRfcHJvY2RpcjYgPSBwcm9jX21rZGlyKCJpcDZ0X2hhc2hsaW1pdCIsIHByb2NfbmV0KTsKIAlpZiAoIWhhc2hsaW1pdF9wcm9jZGlyNikgewotCQlwcmludGsoS0VSTl9FUlIgInh0X2hhc2hsaW1pdDogdG5hYmxlIHRvIGNyZWF0ZSBwcm9jIGRpciAiCisJCXByaW50ayhLRVJOX0VSUiAieHRfaGFzaGxpbWl0OiB1bmFibGUgdG8gY3JlYXRlIHByb2MgZGlyICIKIAkJCQkiZW50cnlcbiIpOwogCQlnb3RvIGVycjQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGVscGVyLmMKaW5kZXggNWQ3ODE4Yi4uMDRiYzMyYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9oZWxwZXIuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2hlbHBlci5jCkBAIC0yNCw2ICsyNCw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tcGF0Lmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIk1hcnRpbiBKb3NlZnNzb24gPGdhbmRhbGZAbmV0ZmlsdGVyLm9yZz4iKTsKQEAgLTE0MywxMyArMTQ0LDExIEBACiB7CiAJc3RydWN0IHh0X2hlbHBlcl9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQogCWlmIChuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KG1hdGNoLT5mYW1pbHkpIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYW4ndCBsb2FkIG5mX2Nvbm50cmFjayBzdXBwb3J0IGZvciAiCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNhbid0IGxvYWQgY29ubnRyYWNrIHN1cHBvcnQgZm9yICIKIAkJCQkgICAgInByb3RvPSVkXG4iLCBtYXRjaC0+ZmFtaWx5KTsKIAkJcmV0dXJuIDA7CiAJfQotI2VuZGlmCiAJaW5mby0+bmFtZVsyOV0gPSAnXDAnOwogCXJldHVybiAxOwogfQpAQCAtMTU3LDkgKzE1Niw3IEBACiBzdGF0aWMgdm9pZAogZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB2b2lkICptYXRjaGluZm8pCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQogCW5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dChtYXRjaC0+ZmFtaWx5KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHh0X2hlbHBlcl9tYXRjaFtdID0gewpAQCAtMTg1LDcgKzE4Miw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHh0X2hlbHBlcl9pbml0KHZvaWQpCiB7Ci0JbmVlZF9jb25udHJhY2soKTsKIAlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2hlcyh4dF9oZWxwZXJfbWF0Y2gsCiAJCQkJICAgQVJSQVlfU0laRSh4dF9oZWxwZXJfbWF0Y2gpKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5jIGIvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMKaW5kZXggZmQ4Zjk1NC4uYjliM2ZmYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMKQEAgLTExMywyMCArMTEzLDE2IEBACiAJaWYgKCEoaW5mby0+Yml0bWFzayAmIFhUX1BIWVNERVZfT1BfTUFTSykgfHwKIAkgICAgaW5mby0+Yml0bWFzayAmIH5YVF9QSFlTREVWX09QX01BU0spCiAJCXJldHVybiAwOwotCWlmIChicm5mX2RlZmVycmVkX2hvb2tzID09IDAgJiYKLQkgICAgaW5mby0+Yml0bWFzayAmIFhUX1BIWVNERVZfT1BfT1VUICYmCisJaWYgKGluZm8tPmJpdG1hc2sgJiBYVF9QSFlTREVWX09QX09VVCAmJgogCSAgICAoIShpbmZvLT5iaXRtYXNrICYgWFRfUEhZU0RFVl9PUF9CUklER0VEKSB8fAogCSAgICAgaW5mby0+aW52ZXJ0ICYgWFRfUEhZU0RFVl9PUF9CUklER0VEKSAmJgogCSAgICBob29rX21hc2sgJiAoKDEgPDwgTkZfSVBfTE9DQUxfT1VUKSB8ICgxIDw8IE5GX0lQX0ZPUldBUkQpIHwKIAkgICAgICAgICAgICAgICAgICgxIDw8IE5GX0lQX1BPU1RfUk9VVElORykpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBoeXNkZXYgbWF0Y2g6IHVzaW5nIC0tcGh5c2Rldi1vdXQgaW4gdGhlICIKIAkJICAgICAgICJPVVRQVVQsIEZPUldBUkQgYW5kIFBPU1RST1VUSU5HIGNoYWlucyBmb3Igbm9uLWJyaWRnZWQgIgotCQkgICAgICAgInRyYWZmaWMgaXMgZGVwcmVjYXRlZCBhbmQgYnJlYWtzIG90aGVyIHRoaW5ncywgaXQgd2lsbCAiCi0JCSAgICAgICAiYmUgcmVtb3ZlZCBpbiBKYW51YXJ5IDIwMDcuIFNlZSBEb2N1bWVudGF0aW9uLyIKLQkJICAgICAgICJmZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGZvciBkZXRhaWxzLiBUaGlzIGRvZXNuJ3QgIgotCQkgICAgICAgImFmZmVjdCB5b3UgaW4gY2FzZSB5b3UncmUgdXNpbmcgaXQgZm9yIHB1cmVseSBicmlkZ2VkICIKLQkJICAgICAgICJ0cmFmZmljLlxuIik7Ci0JCWJybmZfZGVmZXJyZWRfaG9va3MgPSAxOworCQkgICAgICAgInRyYWZmaWMgaXMgbm90IHN1cHBvcnRlZCBhbnltb3JlLlxuIik7CisJCWlmIChob29rX21hc2sgJiAoMSA8PCBORl9JUF9MT0NBTF9PVVQpKQorCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zdGF0ZS5jIGIvbmV0L25ldGZpbHRlci94dF9zdGF0ZS5jCmluZGV4IGQ5MDEwYjEuLmRmMzdiOTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGUuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRlLmMKQEAgLTUwLDIyICs1MCwxOCBAQAogCQkgdm9pZCAqbWF0Y2hpbmZvLAogCQkgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCiAJaWYgKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQobWF0Y2gtPmZhbWlseSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNhbid0IGxvYWQgbmZfY29ubnRyYWNrIHN1cHBvcnQgZm9yICIKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FuJ3QgbG9hZCBjb25udHJhY2sgc3VwcG9ydCBmb3IgIgogCQkJCSAgICAicHJvdG89JWRcbiIsIG1hdGNoLT5mYW1pbHkpOwogCQlyZXR1cm4gMDsKIAl9Ci0jZW5kaWYKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHZvaWQKIGRlc3Ryb3koY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvKQogewotI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKIAluZl9jdF9sM3Byb3RvX21vZHVsZV9wdXQobWF0Y2gtPmZhbWlseSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCB4dF9zdGF0ZV9tYXRjaFtdID0gewpAQCAtOTEsNyArODcsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB4dF9zdGF0ZV9pbml0KHZvaWQpCiB7Ci0JbmVlZF9jb25udHJhY2soKTsKIAlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2hlcyh4dF9zdGF0ZV9tYXRjaCwgQVJSQVlfU0laRSh4dF9zdGF0ZV9tYXRjaCkpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCmluZGV4IDc0M2IwNTcuLjczZTBmZjQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCkBAIC0xMzAsMTIgKzEzMCwxMiBAQAogCiAJbmxhX2Zvcl9lYWNoX25lc3RlZChubGEsIGluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX1RBR0xTVF0sIG5sYV9yZW0pCiAJCWlmIChubGEtPm5sYV90eXBlID09IE5MQkxfQ0lQU09WNF9BX1RBRykgewotCQkJaWYgKGl0ZXIgPiBDSVBTT19WNF9UQUdfTUFYQ05UKQorCQkJaWYgKGl0ZXIgPj0gQ0lQU09fVjRfVEFHX01BWENOVCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWRvaV9kZWYtPnRhZ3NbaXRlcisrXSA9IG5sYV9nZXRfdTgobmxhKTsKIAkJfQotCWlmIChpdGVyIDwgQ0lQU09fVjRfVEFHX01BWENOVCkKLQkJZG9pX2RlZi0+dGFnc1tpdGVyXSA9IENJUFNPX1Y0X1RBR19JTlZBTElEOworCXdoaWxlIChpdGVyIDwgQ0lQU09fVjRfVEFHX01BWENOVCkKKwkJZG9pX2RlZi0+dGFnc1tpdGVyKytdID0gQ0lQU09fVjRfVEFHX0lOVkFMSUQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2Miw2ICsxNjIsNyBAQAogCXN0cnVjdCBubGF0dHIgKm5sYV9iOwogCWludCBubGFfYV9yZW07CiAJaW50IG5sYV9iX3JlbTsKKwl1MzIgaXRlcjsKIAogCWlmICghaW5mby0+YXR0cnNbTkxCTF9DSVBTT1Y0X0FfVEFHTFNUXSB8fAogCSAgICAhaW5mby0+YXR0cnNbTkxCTF9DSVBTT1Y0X0FfTUxTTFZMTFNUXSkKQEAgLTE4NSwyMCArMTg2LDMxIEBACiAJcmV0X3ZhbCA9IG5ldGxibF9jaXBzb3Y0X2FkZF9jb21tb24oaW5mbywgZG9pX2RlZik7CiAJaWYgKHJldF92YWwgIT0gMCkKIAkJZ290byBhZGRfc3RkX2ZhaWx1cmU7CisJcmV0X3ZhbCA9IC1FSU5WQUw7CiAKIAlubGFfZm9yX2VhY2hfbmVzdGVkKG5sYV9hLAogCQkJICAgIGluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX01MU0xWTExTVF0sCiAJCQkgICAgbmxhX2FfcmVtKQogCQlpZiAobmxhX2EtPm5sYV90eXBlID09IE5MQkxfQ0lQU09WNF9BX01MU0xWTCkgeworCQkJaWYgKG5sYV92YWxpZGF0ZV9uZXN0ZWQobmxhX2EsCisJCQkJCSAgICBOTEJMX0NJUFNPVjRfQV9NQVgsCisJCQkJCSAgICBuZXRsYmxfY2lwc292NF9nZW5sX3BvbGljeSkgIT0gMCkKKwkJCQkJZ290byBhZGRfc3RkX2ZhaWx1cmU7CiAJCQlubGFfZm9yX2VhY2hfbmVzdGVkKG5sYV9iLCBubGFfYSwgbmxhX2JfcmVtKQogCQkJCXN3aXRjaCAobmxhX2ItPm5sYV90eXBlKSB7CiAJCQkJY2FzZSBOTEJMX0NJUFNPVjRfQV9NTFNMVkxMT0M6CisJCQkJCWlmIChubGFfZ2V0X3UzMihubGFfYikgPgorCQkJCQkgICAgQ0lQU09fVjRfTUFYX0xPQ19MVkxTKQorCQkJCQkJZ290byBhZGRfc3RkX2ZhaWx1cmU7CiAJCQkJCWlmIChubGFfZ2V0X3UzMihubGFfYikgPj0KIAkJCQkJICAgIGRvaV9kZWYtPm1hcC5zdGQtPmx2bC5sb2NhbF9zaXplKQogCQkJCQkgICAgIGRvaV9kZWYtPm1hcC5zdGQtPmx2bC5sb2NhbF9zaXplID0KIAkJCQkJCSAgICAgbmxhX2dldF91MzIobmxhX2IpICsgMTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBOTEJMX0NJUFNPVjRfQV9NTFNMVkxSRU06CisJCQkJCWlmIChubGFfZ2V0X3UzMihubGFfYikgPgorCQkJCQkgICAgQ0lQU09fVjRfTUFYX1JFTV9MVkxTKQorCQkJCQkJZ290byBhZGRfc3RkX2ZhaWx1cmU7CiAJCQkJCWlmIChubGFfZ2V0X3UzMihubGFfYikgPj0KIAkJCQkJICAgIGRvaV9kZWYtPm1hcC5zdGQtPmx2bC5jaXBzb19zaXplKQogCQkJCQkgICAgIGRvaV9kZWYtPm1hcC5zdGQtPmx2bC5jaXBzb19zaXplID0KQEAgLTIwNiw5ICsyMTgsNiBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAJCX0KLQlpZiAoZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmxvY2FsX3NpemUgPiBDSVBTT19WNF9NQVhfTE9DX0xWTFMgfHwKLQkgICAgZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmNpcHNvX3NpemUgPiBDSVBTT19WNF9NQVhfUkVNX0xWTFMpCi0JCWdvdG8gYWRkX3N0ZF9mYWlsdXJlOwogCWRvaV9kZWYtPm1hcC5zdGQtPmx2bC5sb2NhbCA9IGtjYWxsb2MoZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmxvY2FsX3NpemUsCiAJCQkJCSAgICAgIHNpemVvZih1MzIpLAogCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKQEAgLTIyMyw2ICsyMzIsMTAgQEAKIAkJcmV0X3ZhbCA9IC1FTk9NRU07CiAJCWdvdG8gYWRkX3N0ZF9mYWlsdXJlOwogCX0KKwlmb3IgKGl0ZXIgPSAwOyBpdGVyIDwgZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmxvY2FsX3NpemU7IGl0ZXIrKykKKwkJZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmxvY2FsW2l0ZXJdID0gQ0lQU09fVjRfSU5WX0xWTDsKKwlmb3IgKGl0ZXIgPSAwOyBpdGVyIDwgZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmNpcHNvX3NpemU7IGl0ZXIrKykKKwkJZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmNpcHNvW2l0ZXJdID0gQ0lQU09fVjRfSU5WX0xWTDsKIAlubGFfZm9yX2VhY2hfbmVzdGVkKG5sYV9hLAogCQkJICAgIGluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX01MU0xWTExTVF0sCiAJCQkgICAgbmxhX2FfcmVtKQpAQCAtMjMwLDExICsyNDMsNiBAQAogCQkJc3RydWN0IG5sYXR0ciAqbHZsX2xvYzsKIAkJCXN0cnVjdCBubGF0dHIgKmx2bF9yZW07CiAKLQkJCWlmIChubGFfdmFsaWRhdGVfbmVzdGVkKG5sYV9hLAotCQkJCQkgICAgICBOTEJMX0NJUFNPVjRfQV9NQVgsCi0JCQkJCSAgICAgIG5ldGxibF9jaXBzb3Y0X2dlbmxfcG9saWN5KSAhPSAwKQotCQkJCWdvdG8gYWRkX3N0ZF9mYWlsdXJlOwotCiAJCQlsdmxfbG9jID0gbmxhX2ZpbmRfbmVzdGVkKG5sYV9hLAogCQkJCQkJICBOTEJMX0NJUFNPVjRfQV9NTFNMVkxMT0MpOwogCQkJbHZsX3JlbSA9IG5sYV9maW5kX25lc3RlZChubGFfYSwKQEAgLTI2NCwxMiArMjcyLDE4IEBACiAJCQkJbmxhX2Zvcl9lYWNoX25lc3RlZChubGFfYiwgbmxhX2EsIG5sYV9iX3JlbSkKIAkJCQkJc3dpdGNoIChubGFfYi0+bmxhX3R5cGUpIHsKIAkJCQkJY2FzZSBOTEJMX0NJUFNPVjRfQV9NTFNDQVRMT0M6CisJCQkJCQlpZiAobmxhX2dldF91MzIobmxhX2IpID4KKwkJCQkJCSAgICBDSVBTT19WNF9NQVhfTE9DX0NBVFMpCisJCQkJCQkJZ290byBhZGRfc3RkX2ZhaWx1cmU7CiAJCQkJCQlpZiAobmxhX2dldF91MzIobmxhX2IpID49CiAJCQkJCSAgICAgIGRvaV9kZWYtPm1hcC5zdGQtPmNhdC5sb2NhbF9zaXplKQogCQkJCQkgICAgIGRvaV9kZWYtPm1hcC5zdGQtPmNhdC5sb2NhbF9zaXplID0KIAkJCQkJCSAgICAgbmxhX2dldF91MzIobmxhX2IpICsgMTsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlIE5MQkxfQ0lQU09WNF9BX01MU0NBVFJFTToKKwkJCQkJCWlmIChubGFfZ2V0X3UzMihubGFfYikgPgorCQkJCQkJICAgIENJUFNPX1Y0X01BWF9SRU1fQ0FUUykKKwkJCQkJCQlnb3RvIGFkZF9zdGRfZmFpbHVyZTsKIAkJCQkJCWlmIChubGFfZ2V0X3UzMihubGFfYikgPj0KIAkJCQkJICAgICAgZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmNpcHNvX3NpemUpCiAJCQkJCSAgICAgZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmNpcHNvX3NpemUgPQpAQCAtMjc3LDkgKzI5MSw2IEBACiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJfQotCQlpZiAoZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmxvY2FsX3NpemUgPiBDSVBTT19WNF9NQVhfTE9DX0NBVFMgfHwKLQkJICAgIGRvaV9kZWYtPm1hcC5zdGQtPmNhdC5jaXBzb19zaXplID4gQ0lQU09fVjRfTUFYX1JFTV9DQVRTKQotCQkJZ290byBhZGRfc3RkX2ZhaWx1cmU7CiAJCWRvaV9kZWYtPm1hcC5zdGQtPmNhdC5sb2NhbCA9IGtjYWxsb2MoCiAJCQkgICAgICAgICAgICAgICAgICAgICAgZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmxvY2FsX3NpemUsCiAJCQkJCSAgICAgIHNpemVvZih1MzIpLApAQCAtMjk2LDYgKzMwNywxMCBAQAogCQkJcmV0X3ZhbCA9IC1FTk9NRU07CiAJCQlnb3RvIGFkZF9zdGRfZmFpbHVyZTsKIAkJfQorCQlmb3IgKGl0ZXIgPSAwOyBpdGVyIDwgZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmxvY2FsX3NpemU7IGl0ZXIrKykKKwkJCWRvaV9kZWYtPm1hcC5zdGQtPmNhdC5sb2NhbFtpdGVyXSA9IENJUFNPX1Y0X0lOVl9DQVQ7CisJCWZvciAoaXRlciA9IDA7IGl0ZXIgPCBkb2lfZGVmLT5tYXAuc3RkLT5jYXQuY2lwc29fc2l6ZTsgaXRlcisrKQorCQkJZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmNpcHNvW2l0ZXJdID0gQ0lQU09fVjRfSU5WX0NBVDsKIAkJbmxhX2Zvcl9lYWNoX25lc3RlZChubGFfYSwKIAkJCQkgICAgaW5mby0+YXR0cnNbTkxCTF9DSVBTT1Y0X0FfTUxTQ0FUTFNUXSwKIAkJCQkgICAgbmxhX2FfcmVtKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDNiYWFmYjEuLjM4M2RkNGUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTQ3Miw4ICs0NzIsNyBAQAogCQkJCU5FVExJTktfVVJFTEVBU0UsICZuKTsKIAl9CQogCi0JaWYgKG5say0+bW9kdWxlKQotCQltb2R1bGVfcHV0KG5say0+bW9kdWxlKTsKKwltb2R1bGVfcHV0KG5say0+bW9kdWxlKTsKIAogCW5ldGxpbmtfdGFibGVfZ3JhYigpOwogCWlmIChubGstPmZsYWdzICYgTkVUTElOS19LRVJORUxfU09DS0VUKSB7CkBAIC02OTksNyArNjk4LDcgQEAKIAogc3RydWN0IHNvY2sgKm5ldGxpbmtfZ2V0c29ja2J5ZmlscChzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHNvY2sgKnNvY2s7CiAKIAlpZiAoIVNfSVNTT0NLKGlub2RlLT5pX21vZGUpKQpkaWZmIC0tZ2l0IGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKaW5kZXggMWQ1MGY4MC4uNDNiYmUyYyAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYworKysgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCkBAIC0xMzc3LDYgKzEzNzcsMTUgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2X25yOwogCitzdGF0aWMgc3RydWN0IGF4MjVfcHJvdG9jb2wgbnJfcGlkID0geworCS5waWQJPSBBWDI1X1BfTkVUUk9NLAorCS5mdW5jCT0gbnJfcm91dGVfZnJhbWUKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXgyNV9saW5rZmFpbCBucl9saW5rZmFpbF9ub3RpZmllciA9IHsKKwkuZnVuYwk9IG5yX2xpbmtfZmFpbGVkLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgbnJfcHJvdG9faW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMTQyNCw4ICsxNDMzLDggQEAKIAkJCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZucl9kZXZfbm90aWZpZXIpOwogCi0JYXgyNV9wcm90b2NvbF9yZWdpc3RlcihBWDI1X1BfTkVUUk9NLCBucl9yb3V0ZV9mcmFtZSk7Ci0JYXgyNV9saW5rZmFpbF9yZWdpc3Rlcihucl9saW5rX2ZhaWxlZCk7CisJYXgyNV9yZWdpc3Rlcl9waWQoJm5yX3BpZCk7CisJYXgyNV9saW5rZmFpbF9yZWdpc3RlcigmbnJfbGlua2ZhaWxfbm90aWZpZXIpOwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCW5yX3JlZ2lzdGVyX3N5c2N0bCgpOwpAQCAtMTQ3NCw3ICsxNDgzLDcgQEAKIAlucl91bnJlZ2lzdGVyX3N5c2N0bCgpOwogI2VuZGlmCiAKLQlheDI1X2xpbmtmYWlsX3JlbGVhc2UobnJfbGlua19mYWlsZWQpOworCWF4MjVfbGlua2ZhaWxfcmVsZWFzZSgmbnJfbGlua2ZhaWxfbm90aWZpZXIpOwogCWF4MjVfcHJvdG9jb2xfcmVsZWFzZShBWDI1X1BfTkVUUk9NKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZucl9kZXZfbm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldHJvbS9ucl9kZXYuYyBiL25ldC9uZXRyb20vbnJfZGV2LmMKaW5kZXggOWI4ZWI1NC4uNDcwMGQ1MiAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9ucl9kZXYuYworKysgYi9uZXQvbmV0cm9tL25yX2Rldi5jCkBAIC0xMjgsMjUgKzEyOCwzNyBAQAogCXJldHVybiAtMzc7CiB9CiAKLXN0YXRpYyBpbnQgbnJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCitzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBucl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gYWRkcjsKKwlpbnQgZXJyOwogCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJaWYgKCFtZW1jbXAoZGV2LT5kZXZfYWRkciwgc2EtPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pKQorCQlyZXR1cm4gMDsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CisJCWVyciA9IGF4MjVfbGlzdGVuX3JlZ2lzdGVyKChheDI1X2FkZHJlc3MgKilzYS0+c2FfZGF0YSwgTlVMTCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCiAJCWF4MjVfbGlzdGVuX3JlbGVhc2UoKGF4MjVfYWRkcmVzcyAqKWRldi0+ZGV2X2FkZHIsIE5VTEwpOworCX0KIAogCW1lbWNweShkZXYtPmRldl9hZGRyLCBzYS0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkKLQkJYXgyNV9saXN0ZW5fcmVnaXN0ZXIoKGF4MjVfYWRkcmVzcyAqKWRldi0+ZGV2X2FkZHIsIE5VTEwpOwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbnJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCWludCBlcnI7CisKKwllcnIgPSBheDI1X2xpc3Rlbl9yZWdpc3RlcigoYXgyNV9hZGRyZXNzICopZGV2LT5kZXZfYWRkciwgTlVMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JYXgyNV9saXN0ZW5fcmVnaXN0ZXIoKGF4MjVfYWRkcmVzcyAqKWRldi0+ZGV2X2FkZHIsIE5VTEwpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vbnJfcm91dGUuYyBiL25ldC9uZXRyb20vbnJfcm91dGUuYwppbmRleCAwMDk2MTA1Li44Zjg4OTY0IDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL25yX3JvdXRlLmMKKysrIGIvbmV0L25ldHJvbS9ucl9yb3V0ZS5jCkBAIC04Nyw4ICs4Nyw5IEBACiAgKglBZGQgYSBuZXcgcm91dGUgdG8gYSBub2RlLCBhbmQgaW4gdGhlIHByb2Nlc3MgYWRkIHRoZSBub2RlIGFuZCB0aGUKICAqCW5laWdoYm91ciBpZiBpdCBpcyBuZXcuCiAgKi8KLXN0YXRpYyBpbnQgbnJfYWRkX25vZGUoYXgyNV9hZGRyZXNzICpuciwgY29uc3QgY2hhciAqbW5lbW9uaWMsIGF4MjVfYWRkcmVzcyAqYXgyNSwKLQlheDI1X2RpZ2kgKmF4MjVfZGlnaSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHF1YWxpdHksIGludCBvYnNfY291bnQpCitzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBucl9hZGRfbm9kZShheDI1X2FkZHJlc3MgKm5yLCBjb25zdCBjaGFyICptbmVtb25pYywKKwlheDI1X2FkZHJlc3MgKmF4MjUsIGF4MjVfZGlnaSAqYXgyNV9kaWdpLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCWludCBxdWFsaXR5LCBpbnQgb2JzX2NvdW50KQogewogCXN0cnVjdCBucl9ub2RlICAqbnJfbm9kZTsKIAlzdHJ1Y3QgbnJfbmVpZ2ggKm5yX25laWdoOwpAQCAtNDA2LDcgKzQwNyw4IEBACiAvKgogICoJTG9jayBhIG5laWdoYm91ciB3aXRoIGEgcXVhbGl0eS4KICAqLwotc3RhdGljIGludCBucl9hZGRfbmVpZ2goYXgyNV9hZGRyZXNzICpjYWxsc2lnbiwgYXgyNV9kaWdpICpheDI1X2RpZ2ksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBxdWFsaXR5KQorc3RhdGljIGludCBfX211c3RfY2hlY2sgbnJfYWRkX25laWdoKGF4MjVfYWRkcmVzcyAqY2FsbHNpZ24sCisJYXgyNV9kaWdpICpheDI1X2RpZ2ksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBxdWFsaXR5KQogewogCXN0cnVjdCBucl9uZWlnaCAqbnJfbmVpZ2g7CiAKQEAgLTc3Nyw5ICs3NzksMTMgQEAKIAlucl9zcmMgID0gKGF4MjVfYWRkcmVzcyAqKShza2ItPmRhdGEgKyAwKTsKIAlucl9kZXN0ID0gKGF4MjVfYWRkcmVzcyAqKShza2ItPmRhdGEgKyA3KTsKIAotCWlmIChheDI1ICE9IE5VTEwpCi0JCW5yX2FkZF9ub2RlKG5yX3NyYywgIiIsICZheDI1LT5kZXN0X2FkZHIsIGF4MjUtPmRpZ2lwZWF0LAotCQkJICAgIGF4MjUtPmF4MjVfZGV2LT5kZXYsIDAsIHN5c2N0bF9uZXRyb21fb2Jzb2xlc2NlbmNlX2NvdW50X2luaXRpYWxpc2VyKTsKKwlpZiAoYXgyNSAhPSBOVUxMKSB7CisJCXJldCA9IG5yX2FkZF9ub2RlKG5yX3NyYywgIiIsICZheDI1LT5kZXN0X2FkZHIsIGF4MjUtPmRpZ2lwZWF0LAorCQkgICAgICAgICAgICAgICAgICBheDI1LT5heDI1X2Rldi0+ZGV2LCAwLAorCQkgICAgICAgICAgICAgICAgICBzeXNjdGxfbmV0cm9tX29ic29sZXNjZW5jZV9jb3VudF9pbml0aWFsaXNlcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KIAogCWlmICgoZGV2ID0gbnJfZGV2X2dldChucl9kZXN0KSkgIT0gTlVMTCkgewkvKiBJdHMgZm9yIG1lICovCiAJCWlmIChheDI1ID09IE5VTEwpCQkJLyogSXRzIGZyb20gbWUgKi8KQEAgLTg0NCw2ICs4NTAsNyBAQAogCXJldCA9IChucl9uZWlnaC0+YXgyNSAhPSBOVUxMKTsKIAlucl9ub2RlX3VubG9jayhucl9ub2RlKTsKIAlucl9ub2RlX3B1dChucl9ub2RlKTsKKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGRhNzNlOGEuLjZkYzAxYmQgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtMzU5LDYgKzM1OSwxMCBAQAogCWlmIChkZXYgPT0gTlVMTCkKIAkJZ290byBvdXRfdW5sb2NrOwogCQorCWVyciA9IC1FTkVURE9XTjsKKwlpZiAoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkKKwkJZ290byBvdXRfdW5sb2NrOworCiAJLyoKIAkgKglZb3UgbWF5IG5vdCBxdWV1ZSBhIGZyYW1lIGJpZ2dlciB0aGFuIHRoZSBtdHUuIFRoaXMgaXMgdGhlIGxvd2VzdCBsZXZlbAogCSAqCXJhdyBwcm90b2NvbCBhbmQgeW91IG11c3QgZG8geW91ciBvd24gZnJhZ21lbnRhdGlvbiBhdCB0aGlzIGxldmVsLgpAQCAtNDA3LDEwICs0MTEsNiBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKLQllcnIgPSAtRU5FVERPV047Ci0JaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KIAkvKgogCSAqCU5vdyBzZW5kIGl0CiAJICovCkBAIC00MjgsMjQgKzQyOCwxOCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgaW50IHJ1bl9maWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJCXVuc2lnbmVkICpzbmFwbGVuKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcnVuX2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICAgICAgdW5zaWduZWQgaW50IHJlcykKIHsKIAlzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXI7Ci0JaW50IGVyciA9IDA7CiAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOwotCWlmIChmaWx0ZXIgIT0gTlVMTCkgewotCQllcnIgPSBza19ydW5fZmlsdGVyKHNrYiwgZmlsdGVyLT5pbnNucywgZmlsdGVyLT5sZW4pOwotCQlpZiAoIWVycikKLQkJCWVyciA9IC1FUEVSTTsKLQkJZWxzZSBpZiAoKnNuYXBsZW4gPiBlcnIpCi0JCQkqc25hcGxlbiA9IGVycjsKLQl9CisJaWYgKGZpbHRlciAhPSBOVUxMKQorCQlyZXMgPSBza19ydW5fZmlsdGVyKHNrYiwgZmlsdGVyLT5pbnNucywgZmlsdGVyLT5sZW4pOwogCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcmVzOwogfQogCiAvKgpAQCAtNDY3LDcgKzQ2MSw3IEBACiAJc3RydWN0IHBhY2tldF9zb2NrICpwbzsKIAl1OCAqIHNrYl9oZWFkID0gc2tiLT5kYXRhOwogCWludCBza2JfbGVuID0gc2tiLT5sZW47Ci0JdW5zaWduZWQgc25hcGxlbjsKKwl1bnNpZ25lZCBpbnQgc25hcGxlbiwgcmVzOwogCiAJaWYgKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX0xPT1BCQUNLKQogCQlnb3RvIGRyb3A7CkBAIC00OTUsOCArNDg5LDExIEBACiAKIAlzbmFwbGVuID0gc2tiLT5sZW47CiAKLQlpZiAocnVuX2ZpbHRlcihza2IsIHNrLCAmc25hcGxlbikgPCAwKQorCXJlcyA9IHJ1bl9maWx0ZXIoc2tiLCBzaywgc25hcGxlbik7CisJaWYgKCFyZXMpCiAJCWdvdG8gZHJvcF9uX3Jlc3RvcmU7CisJaWYgKHNuYXBsZW4gPiByZXMpCisJCXNuYXBsZW4gPSByZXM7CiAKIAlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSArIHNrYi0+dHJ1ZXNpemUgPj0KIAkgICAgKHVuc2lnbmVkKXNrLT5za19yY3ZidWYpCkBAIC01NjgsNyArNTY1LDcgQEAKIAlzdHJ1Y3QgdHBhY2tldF9oZHIgKmg7CiAJdTggKiBza2JfaGVhZCA9IHNrYi0+ZGF0YTsKIAlpbnQgc2tiX2xlbiA9IHNrYi0+bGVuOwotCXVuc2lnbmVkIHNuYXBsZW47CisJdW5zaWduZWQgaW50IHNuYXBsZW4sIHJlczsKIAl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IFRQX1NUQVRVU19MT1NJTkd8VFBfU1RBVFVTX1VTRVI7CiAJdW5zaWduZWQgc2hvcnQgbWFjb2ZmLCBuZXRvZmY7CiAJc3RydWN0IHNrX2J1ZmYgKmNvcHlfc2tiID0gTlVMTDsKQEAgLTU5Miw4ICs1ODksMTEgQEAKIAogCXNuYXBsZW4gPSBza2ItPmxlbjsKIAotCWlmIChydW5fZmlsdGVyKHNrYiwgc2ssICZzbmFwbGVuKSA8IDApCisJcmVzID0gcnVuX2ZpbHRlcihza2IsIHNrLCBzbmFwbGVuKTsKKwlpZiAoIXJlcykKIAkJZ290byBkcm9wX25fcmVzdG9yZTsKKwlpZiAoc25hcGxlbiA+IHJlcykKKwkJc25hcGxlbiA9IHJlczsKIAogCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7CiAJCW1hY29mZiA9IG5ldG9mZiA9IFRQQUNLRVRfQUxJR04oVFBBQ0tFVF9IRFJMRU4pICsgMTY7CkBAIC03MzgsNiArNzM4LDEwIEBACiAJaWYgKHNvY2stPnR5cGUgPT0gU09DS19SQVcpCiAJCXJlc2VydmUgPSBkZXYtPmhhcmRfaGVhZGVyX2xlbjsKIAorCWVyciA9IC1FTkVURE9XTjsKKwlpZiAoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkKKwkJZ290byBvdXRfdW5sb2NrOworCiAJZXJyID0gLUVNU0dTSVpFOwogCWlmIChsZW4gPiBkZXYtPm10dStyZXNlcnZlKQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC03NzAsMTAgKzc3NCw2IEBACiAJc2tiLT5kZXYgPSBkZXY7CiAJc2tiLT5wcmlvcml0eSA9IHNrLT5za19wcmlvcml0eTsKIAotCWVyciA9IC1FTkVURE9XTjsKLQlpZiAoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkKLQkJZ290byBvdXRfZnJlZTsKLQogCS8qCiAJICoJTm93IHNlbmQgaXQKIAkgKi8KZGlmZiAtLWdpdCBhL25ldC9yb3NlL2FmX3Jvc2UuYyBiL25ldC9yb3NlL2FmX3Jvc2UuYwppbmRleCAwOGE1NDI4Li45ZTI3OTQ2IDEwMDY0NAotLS0gYS9uZXQvcm9zZS9hZl9yb3NlLmMKKysrIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCkBAIC0xMzE0LDcgKzEzMTQsOCBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJnJvc2VfY2FsbHNpZ24sIGFyZ3AsIHNpemVvZihheDI1X2FkZHJlc3MpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpZiAoYXgyNWNtcCgmcm9zZV9jYWxsc2lnbiwgJm51bGxfYXgyNV9hZGRyZXNzKSAhPSAwKQotCQkJYXgyNV9saXN0ZW5fcmVnaXN0ZXIoJnJvc2VfY2FsbHNpZ24sIE5VTEwpOworCQkJcmV0dXJuIGF4MjVfbGlzdGVuX3JlZ2lzdGVyKCZyb3NlX2NhbGxzaWduLCBOVUxMKTsKKwogCQlyZXR1cm4gMDsKIAogCWNhc2UgU0lPQ1JTR0wyQ0FMTDoKQEAgLTE0ODEsNiArMTQ4MiwxNSBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKipkZXZfcm9zZTsKIAorc3RhdGljIHN0cnVjdCBheDI1X3Byb3RvY29sIHJvc2VfcGlkID0geworCS5waWQJPSBBWDI1X1BfUk9TRSwKKwkuZnVuYwk9IHJvc2Vfcm91dGVfZnJhbWUKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXgyNV9saW5rZmFpbCByb3NlX2xpbmtmYWlsX25vdGlmaWVyID0geworCS5mdW5jCT0gcm9zZV9saW5rX2ZhaWxlZAorfTsKKwogc3RhdGljIGludCBfX2luaXQgcm9zZV9wcm90b19pbml0KHZvaWQpCiB7CiAJaW50IGk7CkBAIC0xNTMwLDggKzE1NDAsOCBAQAogCXNvY2tfcmVnaXN0ZXIoJnJvc2VfZmFtaWx5X29wcyk7CiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZyb3NlX2Rldl9ub3RpZmllcik7CiAKLQlheDI1X3Byb3RvY29sX3JlZ2lzdGVyKEFYMjVfUF9ST1NFLCByb3NlX3JvdXRlX2ZyYW1lKTsKLQlheDI1X2xpbmtmYWlsX3JlZ2lzdGVyKHJvc2VfbGlua19mYWlsZWQpOworCWF4MjVfcmVnaXN0ZXJfcGlkKCZyb3NlX3BpZCk7CisJYXgyNV9saW5rZmFpbF9yZWdpc3Rlcigmcm9zZV9saW5rZmFpbF9ub3RpZmllcik7CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJcm9zZV9yZWdpc3Rlcl9zeXNjdGwoKTsKQEAgLTE1NzksNyArMTU4OSw3IEBACiAJcm9zZV9ydF9mcmVlKCk7CiAKIAlheDI1X3Byb3RvY29sX3JlbGVhc2UoQVgyNV9QX1JPU0UpOwotCWF4MjVfbGlua2ZhaWxfcmVsZWFzZShyb3NlX2xpbmtfZmFpbGVkKTsKKwlheDI1X2xpbmtmYWlsX3JlbGVhc2UoJnJvc2VfbGlua2ZhaWxfbm90aWZpZXIpOwogCiAJaWYgKGF4MjVjbXAoJnJvc2VfY2FsbHNpZ24sICZudWxsX2F4MjVfYWRkcmVzcykgIT0gMCkKIAkJYXgyNV9saXN0ZW5fcmVsZWFzZSgmcm9zZV9jYWxsc2lnbiwgTlVMTCk7CmRpZmYgLS1naXQgYS9uZXQvcm9zZS9yb3NlX2Rldi5jIGIvbmV0L3Jvc2Uvcm9zZV9kZXYuYwppbmRleCA3YzI3OWUyLi41MDgyNGQzIDEwMDY0NAotLS0gYS9uZXQvcm9zZS9yb3NlX2Rldi5jCisrKyBiL25ldC9yb3NlL3Jvc2VfZGV2LmMKQEAgLTkzLDIwICs5MywzNCBAQAogc3RhdGljIGludCByb3NlX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQogewogCXN0cnVjdCBzb2NrYWRkciAqc2EgPSBhZGRyOworCWludCBlcnI7CiAKLQlyb3NlX2RlbF9sb29wYmFja19ub2RlKChyb3NlX2FkZHJlc3MgKilkZXYtPmRldl9hZGRyKTsKKwlpZiAoIW1lbWNweShkZXYtPmRldl9hZGRyLCBzYS0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbikpCisJCXJldHVybiAwOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKKwkJZXJyID0gcm9zZV9hZGRfbG9vcGJhY2tfbm9kZSgocm9zZV9hZGRyZXNzICopZGV2LT5kZXZfYWRkcik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCXJvc2VfZGVsX2xvb3BiYWNrX25vZGUoKHJvc2VfYWRkcmVzcyAqKWRldi0+ZGV2X2FkZHIpOworCX0KIAogCW1lbWNweShkZXYtPmRldl9hZGRyLCBzYS0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAKLQlyb3NlX2FkZF9sb29wYmFja19ub2RlKChyb3NlX2FkZHJlc3MgKilkZXYtPmRldl9hZGRyKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJvc2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCWludCBlcnI7CisKKwllcnIgPSByb3NlX2FkZF9sb29wYmFja19ub2RlKChyb3NlX2FkZHJlc3MgKilkZXYtPmRldl9hZGRyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQlyb3NlX2FkZF9sb29wYmFja19ub2RlKChyb3NlX2FkZHJlc3MgKilkZXYtPmRldl9hZGRyKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcm9zZS9yb3NlX2xvb3BiYWNrLmMgYi9uZXQvcm9zZS9yb3NlX2xvb3BiYWNrLmMKaW5kZXggMTAzYjRkMy4uM2U0MWJkOSAxMDA2NDQKLS0tIGEvbmV0L3Jvc2Uvcm9zZV9sb29wYmFjay5jCisrKyBiL25ldC9yb3NlL3Jvc2VfbG9vcGJhY2suYwpAQCAtNzksNyArNzksOCBAQAogCiAJCXNrYi0+aC5yYXcgPSBza2ItPmRhdGE7CiAKLQkJaWYgKChzayA9IHJvc2VfZmluZF9zb2NrZXQobGNpX28sIHJvc2VfbG9vcGJhY2tfbmVpZ2gpKSAhPSBOVUxMKSB7CisJCXNrID0gcm9zZV9maW5kX3NvY2tldChsY2lfbywgJnJvc2VfbG9vcGJhY2tfbmVpZ2gpOworCQlpZiAoc2spIHsKIAkJCWlmIChyb3NlX3Byb2Nlc3NfcnhfZnJhbWUoc2ssIHNrYikgPT0gMCkKIAkJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCWNvbnRpbnVlOwpAQCAtODcsNyArODgsNyBAQAogCiAJCWlmIChmcmFtZXR5cGUgPT0gUk9TRV9DQUxMX1JFUVVFU1QpIHsKIAkJCWlmICgoZGV2ID0gcm9zZV9kZXZfZ2V0KGRlc3QpKSAhPSBOVUxMKSB7Ci0JCQkJaWYgKHJvc2VfcnhfY2FsbF9yZXF1ZXN0KHNrYiwgZGV2LCByb3NlX2xvb3BiYWNrX25laWdoLCBsY2lfbykgPT0gMCkKKwkJCQlpZiAocm9zZV9yeF9jYWxsX3JlcXVlc3Qoc2tiLCBkZXYsICZyb3NlX2xvb3BiYWNrX25laWdoLCBsY2lfbykgPT0gMCkKIAkJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQl9IGVsc2UgewogCQkJCWtmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jIGIvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCmluZGV4IDcyNTIzNDQuLjgwMjhjMGQgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL3Jvc2Vfcm91dGUuYworKysgYi9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKQEAgLTQ2LDEzICs0NiwxMyBAQAogc3RhdGljIHN0cnVjdCByb3NlX3JvdXRlICpyb3NlX3JvdXRlX2xpc3Q7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJvc2Vfcm91dGVfbGlzdF9sb2NrKTsKIAotc3RydWN0IHJvc2VfbmVpZ2ggKnJvc2VfbG9vcGJhY2tfbmVpZ2g7CitzdHJ1Y3Qgcm9zZV9uZWlnaCByb3NlX2xvb3BiYWNrX25laWdoOwogCiAvKgogICoJQWRkIGEgbmV3IHJvdXRlIHRvIGEgbm9kZSwgYW5kIGluIHRoZSBwcm9jZXNzIGFkZCB0aGUgbm9kZSBhbmQgdGhlCiAgKgluZWlnaGJvdXIgaWYgaXQgaXMgbmV3LgogICovCi1zdGF0aWMgaW50IHJvc2VfYWRkX25vZGUoc3RydWN0IHJvc2Vfcm91dGVfc3RydWN0ICpyb3NlX3JvdXRlLAorc3RhdGljIGludCBfX211c3RfY2hlY2sgcm9zZV9hZGRfbm9kZShzdHJ1Y3Qgcm9zZV9yb3V0ZV9zdHJ1Y3QgKnJvc2Vfcm91dGUsCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgcm9zZV9ub2RlICAqcm9zZV9ub2RlLCAqcm9zZV90bXBuLCAqcm9zZV90bXBwOwpAQCAtMzYxLDMzICszNjEsMzAgQEAKIC8qCiAgKglBZGQgdGhlIGxvb3BiYWNrIG5laWdoYm91ci4KICAqLwotaW50IHJvc2VfYWRkX2xvb3BiYWNrX25laWdoKHZvaWQpCit2b2lkIHJvc2VfYWRkX2xvb3BiYWNrX25laWdoKHZvaWQpCiB7Ci0JaWYgKChyb3NlX2xvb3BiYWNrX25laWdoID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJvc2VfbmVpZ2gpLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJc3RydWN0IHJvc2VfbmVpZ2ggKnNuID0gJnJvc2VfbG9vcGJhY2tfbmVpZ2g7CiAKLQlyb3NlX2xvb3BiYWNrX25laWdoLT5jYWxsc2lnbiAgPSBudWxsX2F4MjVfYWRkcmVzczsKLQlyb3NlX2xvb3BiYWNrX25laWdoLT5kaWdpcGVhdCAgPSBOVUxMOwotCXJvc2VfbG9vcGJhY2tfbmVpZ2gtPmF4MjUgICAgICA9IE5VTEw7Ci0Jcm9zZV9sb29wYmFja19uZWlnaC0+ZGV2ICAgICAgID0gTlVMTDsKLQlyb3NlX2xvb3BiYWNrX25laWdoLT5jb3VudCAgICAgPSAwOwotCXJvc2VfbG9vcGJhY2tfbmVpZ2gtPnVzZSAgICAgICA9IDA7Ci0Jcm9zZV9sb29wYmFja19uZWlnaC0+ZGNlX21vZGUgID0gMTsKLQlyb3NlX2xvb3BiYWNrX25laWdoLT5sb29wYmFjayAgPSAxOwotCXJvc2VfbG9vcGJhY2tfbmVpZ2gtPm51bWJlciAgICA9IHJvc2VfbmVpZ2hfbm8rKzsKLQlyb3NlX2xvb3BiYWNrX25laWdoLT5yZXN0YXJ0ZWQgPSAxOworCXNuLT5jYWxsc2lnbiAgPSBudWxsX2F4MjVfYWRkcmVzczsKKwlzbi0+ZGlnaXBlYXQgID0gTlVMTDsKKwlzbi0+YXgyNSAgICAgID0gTlVMTDsKKwlzbi0+ZGV2ICAgICAgID0gTlVMTDsKKwlzbi0+Y291bnQgICAgID0gMDsKKwlzbi0+dXNlICAgICAgID0gMDsKKwlzbi0+ZGNlX21vZGUgID0gMTsKKwlzbi0+bG9vcGJhY2sgID0gMTsKKwlzbi0+bnVtYmVyICAgID0gcm9zZV9uZWlnaF9ubysrOworCXNuLT5yZXN0YXJ0ZWQgPSAxOwogCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcm9zZV9sb29wYmFja19uZWlnaC0+cXVldWUpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNuLT5xdWV1ZSk7CiAKLQlpbml0X3RpbWVyKCZyb3NlX2xvb3BiYWNrX25laWdoLT5mdGltZXIpOwotCWluaXRfdGltZXIoJnJvc2VfbG9vcGJhY2tfbmVpZ2gtPnQwdGltZXIpOworCWluaXRfdGltZXIoJnNuLT5mdGltZXIpOworCWluaXRfdGltZXIoJnNuLT50MHRpbWVyKTsKIAogCXNwaW5fbG9ja19iaCgmcm9zZV9uZWlnaF9saXN0X2xvY2spOwotCXJvc2VfbG9vcGJhY2tfbmVpZ2gtPm5leHQgPSByb3NlX25laWdoX2xpc3Q7Ci0Jcm9zZV9uZWlnaF9saXN0ICAgICAgICAgICA9IHJvc2VfbG9vcGJhY2tfbmVpZ2g7CisJc24tPm5leHQgPSByb3NlX25laWdoX2xpc3Q7CisJcm9zZV9uZWlnaF9saXN0ICAgICAgICAgICA9IHNuOwogCXNwaW5fdW5sb2NrX2JoKCZyb3NlX25laWdoX2xpc3RfbG9jayk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTQyMSwxMyArNDE4LDEzIEBACiAJcm9zZV9ub2RlLT5tYXNrICAgICAgICAgPSAxMDsKIAlyb3NlX25vZGUtPmNvdW50ICAgICAgICA9IDE7CiAJcm9zZV9ub2RlLT5sb29wYmFjayAgICAgPSAxOwotCXJvc2Vfbm9kZS0+bmVpZ2hib3VyWzBdID0gcm9zZV9sb29wYmFja19uZWlnaDsKKwlyb3NlX25vZGUtPm5laWdoYm91clswXSA9ICZyb3NlX2xvb3BiYWNrX25laWdoOwogCiAJLyogSW5zZXJ0IGF0IHRoZSBoZWFkIG9mIGxpc3QuIEFkZHJlc3MgaXMgYWx3YXlzIG1hc2s9MTAgKi8KIAlyb3NlX25vZGUtPm5leHQgPSByb3NlX25vZGVfbGlzdDsKIAlyb3NlX25vZGVfbGlzdCAgPSByb3NlX25vZGU7CiAKLQlyb3NlX2xvb3BiYWNrX25laWdoLT5jb3VudCsrOworCXJvc2VfbG9vcGJhY2tfbmVpZ2guY291bnQrKzsKIAogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZyb3NlX25vZGVfbGlzdF9sb2NrKTsKQEAgLTQ1OCw3ICs0NTUsNyBAQAogCiAJcm9zZV9yZW1vdmVfbm9kZShyb3NlX25vZGUpOwogCi0Jcm9zZV9sb29wYmFja19uZWlnaC0+Y291bnQtLTsKKwlyb3NlX2xvb3BiYWNrX25laWdoLmNvdW50LS07CiAKIG91dDoKIAlzcGluX3VubG9ja19iaCgmcm9zZV9ub2RlX2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lwdC5jIGIvbmV0L3NjaGVkL2FjdF9pcHQuYwppbmRleCBhOTYwODA2Li4wMWU2OTEzIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lwdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfaXB0LmMKQEAgLTU1LDcgKzU1LDggQEAKIAlzdHJ1Y3QgaXB0X3RhcmdldCAqdGFyZ2V0OwogCWludCByZXQgPSAwOwogCi0JdGFyZ2V0ID0geHRfZmluZF90YXJnZXQoQUZfSU5FVCwgdC0+dS51c2VyLm5hbWUsIHQtPnUudXNlci5yZXZpc2lvbik7CisJdGFyZ2V0ID0geHRfcmVxdWVzdF9maW5kX3RhcmdldChBRl9JTkVULCB0LT51LnVzZXIubmFtZSwKKwkJCQkJdC0+dS51c2VyLnJldmlzaW9uKTsKIAlpZiAoIXRhcmdldCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTYzLDkgKzY0LDEwIEBACiAKIAlyZXQgPSB4dF9jaGVja190YXJnZXQodGFyZ2V0LCBBRl9JTkVULCB0LT51LnRhcmdldF9zaXplIC0gc2l6ZW9mKCp0KSwKIAkJCSAgICAgIHRhYmxlLCBob29rLCAwLCAwKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKIAkJcmV0dXJuIHJldDsKLQorCX0KIAlpZiAodC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5CiAJICAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkodGFibGUsIE5VTEwsCiAJCSAgICAJCQkgICAgICAgdC0+dS5rZXJuZWwudGFyZ2V0LCB0LT5kYXRhLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggYmE4MmRmYS4uZjc5YTRmMyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC0zNzEsOCArMzcxLDYgQEAKIAkJCQkJcmV0dXJuOwogCQkJCX0KIAkJCX0KLQotCQkJY2wgPSBjbF9wcmV2LT5uZXh0X2FsaXZlOwogCQkJcmV0dXJuOwogCQl9CiAJfSB3aGlsZSAoKGNsX3ByZXYgPSBjbCkgIT0gcS0+YWN0aXZlW3ByaW9dKTsKQEAgLTEyNTgsNiArMTI1Niw4IEBACiAJCWRvIHsKIAkJCWlmIChjbC0+cS0+b3BzLT5kcm9wICYmIChsZW4gPSBjbC0+cS0+b3BzLT5kcm9wKGNsLT5xKSkpIHsKIAkJCQlzY2gtPnEucWxlbi0tOworCQkJCWlmICghY2wtPnEtPnEucWxlbikKKwkJCQkJY2JxX2RlYWN0aXZhdGVfY2xhc3MoY2wpOwogCQkJCXJldHVybiBsZW47CiAJCQl9CiAJCX0gd2hpbGUgKChjbCA9IGNsLT5uZXh0X2FsaXZlKSAhPSBjbF9oZWFkKTsKQEAgLTE2ODUsOCArMTY4NSw3IEBACiAjZW5kaWYKIAkJfQogCQlzY2hfdHJlZV9sb2NrKHNjaCk7Ci0JCSpvbGQgPSBjbC0+cTsKLQkJY2wtPnEgPSBuZXc7CisJCSpvbGQgPSB4Y2hnKCZjbC0+cSwgbmV3KTsKIAkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKCpvbGQsICgqb2xkKS0+cS5xbGVuKTsKIAkJcWRpc2NfcmVzZXQoKm9sZCk7CiAJCXNjaF90cmVlX3VubG9jayhzY2gpOwpAQCAtMTcwNCw2ICsxNzAzLDE0IEBACiAJcmV0dXJuIGNsID8gY2wtPnEgOiBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBjYnFfcWxlbl9ub3RpZnkoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjYnFfY2xhc3MgKmNsID0gKHN0cnVjdCBjYnFfY2xhc3MgKilhcmc7CisKKwlpZiAoY2wtPnEtPnEucWxlbiA9PSAwKQorCQljYnFfZGVhY3RpdmF0ZV9jbGFzcyhjbCk7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNicV9nZXQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKQogewogCXN0cnVjdCBjYnFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKQEAgLTE5ODgsMTIgKzE5OTUsMTcgQEAKIHsKIAlzdHJ1Y3QgY2JxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJc3RydWN0IGNicV9jbGFzcyAqY2wgPSAoc3RydWN0IGNicV9jbGFzcyopYXJnOworCXVuc2lnbmVkIGludCBxbGVuOwogCiAJaWYgKGNsLT5maWx0ZXJzIHx8IGNsLT5jaGlsZHJlbiB8fCBjbCA9PSAmcS0+bGluaykKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXNjaF90cmVlX2xvY2soc2NoKTsKIAorCXFsZW4gPSBjbC0+cS0+cS5xbGVuOworCXFkaXNjX3Jlc2V0KGNsLT5xKTsKKwlxZGlzY190cmVlX2RlY3JlYXNlX3FsZW4oY2wtPnEsIHFsZW4pOworCiAJaWYgKGNsLT5uZXh0X2FsaXZlKQogCQljYnFfZGVhY3RpdmF0ZV9jbGFzcyhjbCk7CiAKQEAgLTIwODQsNiArMjA5Niw3IEBACiBzdGF0aWMgc3RydWN0IFFkaXNjX2NsYXNzX29wcyBjYnFfY2xhc3Nfb3BzID0gewogCS5ncmFmdAkJPQljYnFfZ3JhZnQsCiAJLmxlYWYJCT0JY2JxX2xlYWYsCisJLnFsZW5fbm90aWZ5CT0JY2JxX3FsZW5fbm90aWZ5LAogCS5nZXQJCT0JY2JxX2dldCwKIAkucHV0CQk9CWNicV9wdXQsCiAJLmNoYW5nZQkJPQljYnFfY2hhbmdlX2NsYXNzLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9odGIuYyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKaW5kZXggMjE1ZTY4Yy4uMTVmMjNjNSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuYworKysgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCkBAIC0xNDcsNiArMTQ3LDEwIEBACiAJcHNjaGVkX3RkaWZmX3QgbWJ1ZmZlcjsJLyogbWF4IHdhaXQgdGltZSAqLwogCWxvbmcgdG9rZW5zLCBjdG9rZW5zOwkvKiBjdXJyZW50IG51bWJlciBvZiB0b2tlbnMgKi8KIAlwc2NoZWRfdGltZV90IHRfYzsJLyogY2hlY2twb2ludCB0aW1lICovCisKKwlpbnQgcHJpbzsJCS8qIEZvciBwYXJlbnQgdG8gbGVhZiByZXR1cm4gcG9zc2libGUgaGVyZSAqLworCWludCBxdWFudHVtOwkJLyogd2UgZG8gYmFja3VwLiBGaW5hbGx5IGZ1bGwgcmVwbGFjZW1lbnQgICovCisJCQkJLyogb2YgdW4ubGVhZiBvcmlnaW5hbHMgc2hvdWxkIGJlIGRvbmUuICovCiB9OwogCiAvKiBUT0RPOiBtYXliZSBjb21wdXRlIHJhdGUgd2hlbiBzaXplIGlzIHRvbyBsYXJnZSAuLiBvciBkcm9wID8gKi8KQEAgLTEyNzEsNiArMTI3NSwzOCBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSBpbnQgaHRiX3BhcmVudF9sYXN0X2NoaWxkKHN0cnVjdCBodGJfY2xhc3MgKmNsKQoreworCWlmICghY2wtPnBhcmVudCkKKwkJLyogdGhlIHJvb3QgY2xhc3MgKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoIShjbC0+cGFyZW50LT5jaGlsZHJlbi5uZXh0ID09ICZjbC0+c2libGluZyAmJgorCQljbC0+cGFyZW50LT5jaGlsZHJlbi5wcmV2ID09ICZjbC0+c2libGluZykpCisJCS8qIG5vdCB0aGUgbGFzdCBjaGlsZCAqLworCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBodGJfcGFyZW50X3RvX2xlYWYoc3RydWN0IGh0Yl9jbGFzcyAqY2wsIHN0cnVjdCBRZGlzYyAqbmV3X3EpCit7CisJc3RydWN0IGh0Yl9jbGFzcyAqcGFyZW50ID0gY2wtPnBhcmVudDsKKworCUJVR19UUkFQKCFjbC0+bGV2ZWwgJiYgY2wtPnVuLmxlYWYucSAmJiAhY2wtPnByaW9fYWN0aXZpdHkpOworCisJcGFyZW50LT5sZXZlbCA9IDA7CisJbWVtc2V0KCZwYXJlbnQtPnVuLmlubmVyLCAwLCBzaXplb2YocGFyZW50LT51bi5pbm5lcikpOworCUlOSVRfTElTVF9IRUFEKCZwYXJlbnQtPnVuLmxlYWYuZHJvcF9saXN0KTsKKwlwYXJlbnQtPnVuLmxlYWYucSA9IG5ld19xID8gbmV3X3EgOiAmbm9vcF9xZGlzYzsKKwlwYXJlbnQtPnVuLmxlYWYucXVhbnR1bSA9IHBhcmVudC0+cXVhbnR1bTsKKwlwYXJlbnQtPnVuLmxlYWYucHJpbyA9IHBhcmVudC0+cHJpbzsKKwlwYXJlbnQtPnRva2VucyA9IHBhcmVudC0+YnVmZmVyOworCXBhcmVudC0+Y3Rva2VucyA9IHBhcmVudC0+Y2J1ZmZlcjsKKwlQU0NIRURfR0VUX1RJTUUocGFyZW50LT50X2MpOworCXBhcmVudC0+Y21vZGUgPSBIVEJfQ0FOX1NFTkQ7Cit9CisKIHN0YXRpYyB2b2lkIGh0Yl9kZXN0cm95X2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgaHRiX2NsYXNzICpjbCkKIHsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwpAQCAtMTMyOCw2ICsxMzY0LDggQEAKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCBodGJfY2xhc3MgKmNsID0gKHN0cnVjdCBodGJfY2xhc3MgKilhcmc7CiAJdW5zaWduZWQgaW50IHFsZW47CisJc3RydWN0IFFkaXNjICpuZXdfcSA9IE5VTEw7CisJaW50IGxhc3RfY2hpbGQgPSAwOwogCiAJLy8gVE9ETzogd2h5IGRvbid0IGFsbG93IHRvIGRlbGV0ZSBzdWJ0cmVlID8gcmVmZXJlbmNlcyA/IGRvZXMKIAkvLyB0YyBzdWJzeXMgcXVhcmFudGVlIHVzIHRoYXQgaW4gaHRiX2Rlc3Ryb3kgaXQgaG9sZHMgbm8gY2xhc3MKQEAgLTEzMzUsNiArMTM3MywxMiBAQAogCWlmICghbGlzdF9lbXB0eSgmY2wtPmNoaWxkcmVuKSB8fCBjbC0+ZmlsdGVyX2NudCkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWlmICghY2wtPmxldmVsICYmIGh0Yl9wYXJlbnRfbGFzdF9jaGlsZChjbCkpIHsKKwkJbmV3X3EgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcywKKwkJCQkJCWNsLT5wYXJlbnQtPmNsYXNzaWQpOworCQlsYXN0X2NoaWxkID0gMTsKKwl9CisKIAlzY2hfdHJlZV9sb2NrKHNjaCk7CiAKIAkvKiBkZWxldGUgZnJvbSBoYXNoIGFuZCBhY3RpdmU7IHJlbWFpbmRlciBpbiBkZXN0cm95X2NsYXNzICovCkBAIC0xMzQ5LDYgKzEzOTMsOSBAQAogCWlmIChjbC0+cHJpb19hY3Rpdml0eSkKIAkJaHRiX2RlYWN0aXZhdGUocSwgY2wpOwogCisJaWYgKGxhc3RfY2hpbGQpCisJCWh0Yl9wYXJlbnRfdG9fbGVhZihjbCwgbmV3X3EpOworCiAJaWYgKC0tY2wtPnJlZmNudCA9PSAwKQogCQlodGJfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTsKIApAQCAtMTQ4Myw2ICsxNTMwLDEwIEBACiAJCQljbC0+dW4ubGVhZi5xdWFudHVtID0gaG9wdC0+cXVhbnR1bTsKIAkJaWYgKChjbC0+dW4ubGVhZi5wcmlvID0gaG9wdC0+cHJpbykgPj0gVENfSFRCX05VTVBSSU8pCiAJCQljbC0+dW4ubGVhZi5wcmlvID0gVENfSFRCX05VTVBSSU8gLSAxOworCisJCS8qIGJhY2t1cCBmb3IgaHRiX3BhcmVudF90b19sZWFmICovCisJCWNsLT5xdWFudHVtID0gY2wtPnVuLmxlYWYucXVhbnR1bTsKKwkJY2wtPnByaW8gPSBjbC0+dW4ubGVhZi5wcmlvOwogCX0KIAogCWNsLT5idWZmZXIgPSBob3B0LT5idWZmZXI7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCmluZGV4IGFkMDA1N2QuLjVkYjk1Y2EgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2Fzc29jaW9sYS5jCisrKyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCkBAIC0yOTgsNiArMjk4LDcgQEAKIAlhc29jLT5kZWZhdWx0X2ZsYWdzID0gc3AtPmRlZmF1bHRfZmxhZ3M7CiAJYXNvYy0+ZGVmYXVsdF9jb250ZXh0ID0gc3AtPmRlZmF1bHRfY29udGV4dDsKIAlhc29jLT5kZWZhdWx0X3RpbWV0b2xpdmUgPSBzcC0+ZGVmYXVsdF90aW1ldG9saXZlOworCWFzb2MtPmRlZmF1bHRfcmN2X2NvbnRleHQgPSBzcC0+ZGVmYXVsdF9yY3ZfY29udGV4dDsKIAogCXJldHVybiBhc29jOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggM2MzZTU2MC4uZWYzNmJlMDcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lwdjYuYworKysgYi9uZXQvc2N0cC9pcHY2LmMKQEAgLTc4LDggKzc4LDQ0IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCisvKiBFdmVudCBoYW5kbGVyIGZvciBpbmV0NiBhZGRyZXNzIGFkZGl0aW9uL2RlbGV0aW9uIGV2ZW50cy4gICovCitzdGF0aWMgaW50IHNjdHBfaW5ldDZhZGRyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldiwKKwkJCQl2b2lkICpwdHIpCit7CisJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhID0gKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKilwdHI7CisJc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKmFkZHI7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdGVtcDsKKworCXN3aXRjaCAoZXYpIHsKKwljYXNlIE5FVERFVl9VUDoKKwkJYWRkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5KSwgR0ZQX0FUT01JQyk7CisJCWlmIChhZGRyKSB7CisJCQlhZGRyLT5hLnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJCQlhZGRyLT5hLnY2LnNpbjZfcG9ydCA9IDA7CisJCQltZW1jcHkoJmFkZHItPmEudjYuc2luNl9hZGRyLCAmaWZhLT5hZGRyLAorCQkJCSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCQlhZGRyLT5hLnY2LnNpbjZfc2NvcGVfaWQgPSBpZmEtPmlkZXYtPmRldi0+aWZpbmRleDsKKwkJCWxpc3RfYWRkX3RhaWwoJmFkZHItPmxpc3QsICZzY3RwX2xvY2FsX2FkZHJfbGlzdCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBORVRERVZfRE9XTjoKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdGVtcCwgJnNjdHBfbG9jYWxfYWRkcl9saXN0KSB7CisJCQlhZGRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5LCBsaXN0KTsKKwkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmFkZHItPmEudjYuc2luNl9hZGRyLCAmaWZhLT5hZGRyKSkgeworCQkJCWxpc3RfZGVsKHBvcyk7CisJCQkJa2ZyZWUoYWRkcik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2N0cF9pbmV0NmFkZHJfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBzY3RwX2luZXRhZGRyX2V2ZW50LAorCS5ub3RpZmllcl9jYWxsID0gc2N0cF9pbmV0NmFkZHJfZXZlbnQsCiB9OwogCiAvKiBJQ01QIGVycm9yIGhhbmRsZXIuICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm90b2NvbC5jIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwppbmRleCBmMmJhODYxLi4wZWY0ODEyIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm90b2NvbC5jCisrKyBiL25ldC9zY3RwL3Byb3RvY29sLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogLyogRXh0cmFjdCBvdXIgSVAgYWRkcmVzc2VzIGZyb20gdGhlIHN5c3RlbSBhbmQgc3Rhc2ggdGhlbSBpbiB0aGUKICAqIHByb3RvY29sIHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgX19zY3RwX2dldF9sb2NhbF9hZGRyX2xpc3Qodm9pZCkKK3N0YXRpYyB2b2lkIHNjdHBfZ2V0X2xvY2FsX2FkZHJfbGlzdCh2b2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwpAQCAtMTc5LDE3ICsxNzksOCBAQAogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgc2N0cF9nZXRfbG9jYWxfYWRkcl9saXN0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNjdHBfc3Bpbl9sb2NrX2lycXNhdmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLCBmbGFncyk7Ci0JX19zY3RwX2dldF9sb2NhbF9hZGRyX2xpc3QoKTsKLQlzY3RwX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLCBmbGFncyk7Ci19Ci0KIC8qIEZyZWUgdGhlIGV4aXN0aW5nIGxvY2FsIGFkZHJlc3Nlcy4gICovCi1zdGF0aWMgdm9pZCBfX3NjdHBfZnJlZV9sb2NhbF9hZGRyX2xpc3Qodm9pZCkKK3N0YXRpYyB2b2lkIHNjdHBfZnJlZV9sb2NhbF9hZGRyX2xpc3Qodm9pZCkKIHsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0ZW1wOwpAQCAtMjAxLDI3ICsxOTIsMTUgQEAKIAl9CiB9CiAKLS8qIEZyZWUgdGhlIGV4aXN0aW5nIGxvY2FsIGFkZHJlc3Nlcy4gICovCi1zdGF0aWMgdm9pZCBzY3RwX2ZyZWVfbG9jYWxfYWRkcl9saXN0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNjdHBfc3Bpbl9sb2NrX2lycXNhdmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLCBmbGFncyk7Ci0JX19zY3RwX2ZyZWVfbG9jYWxfYWRkcl9saXN0KCk7Ci0Jc2N0cF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3RwX2xvY2FsX2FkZHJfbG9jaywgZmxhZ3MpOwotfQotCiAvKiBDb3B5IHRoZSBsb2NhbCBhZGRyZXNzZXMgd2hpY2ggYXJlIHZhbGlkIGZvciAnc2NvcGUnIGludG8gJ2JwJy4gICovCiBpbnQgc2N0cF9jb3B5X2xvY2FsX2FkZHJfbGlzdChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKmJwLCBzY3RwX3Njb3BlX3Qgc2NvcGUsCiAJCQkgICAgICBnZnBfdCBnZnAsIGludCBjb3B5X2ZsYWdzKQogewogCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICphZGRyOwogCWludCBlcnJvciA9IDA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdGVtcDsKIAotCXNjdHBfc3Bpbl9sb2NrX2lycXNhdmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaChwb3MsICZzY3RwX2xvY2FsX2FkZHJfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRlbXAsICZzY3RwX2xvY2FsX2FkZHJfbGlzdCkgewogCQlhZGRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5LCBsaXN0KTsKIAkJaWYgKHNjdHBfaW5fc2NvcGUoJmFkZHItPmEsIHNjb3BlKSkgewogCQkJLyogTm93IHRoYXQgdGhlIGFkZHJlc3MgaXMgaW4gc2NvcGUsIGNoZWNrIHRvIHNlZSBpZgpAQCAtMjQyLDcgKzIyMSw2IEBACiAJfQogCiBlbmRfY29weToKLQlzY3RwX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC02MjIsMTggKzYwMCwzNiBAQAogCXNlcV9wcmludGYoc2VxLCAiJWQuJWQuJWQuJWQgIiwgTklQUVVBRChhZGRyLT52NC5zaW5fYWRkcikpOwogfQogCi0vKiBFdmVudCBoYW5kbGVyIGZvciBpbmV0IGFkZHJlc3MgYWRkaXRpb24vZGVsZXRpb24gZXZlbnRzLgotICogQmFzaWNhbGx5LCB3aGVuZXZlciB0aGVyZSBpcyBhbiBldmVudCwgd2UgcmUtYnVpbGQgb3VyIGxvY2FsIGFkZHJlc3MgbGlzdC4KLSAqLwotaW50IHNjdHBfaW5ldGFkZHJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcHRyKQorLyogRXZlbnQgaGFuZGxlciBmb3IgaW5ldCBhZGRyZXNzIGFkZGl0aW9uL2RlbGV0aW9uIGV2ZW50cy4gICovCitzdGF0aWMgaW50IHNjdHBfaW5ldGFkZHJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2LAorCQkJICAgICAgIHZvaWQgKnB0cikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpbl9pZmFkZHIgKmlmYSA9IChzdHJ1Y3QgaW5faWZhZGRyICopcHRyOworCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICphZGRyOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRlbXA7CiAKLQlzY3RwX3NwaW5fbG9ja19pcnFzYXZlKCZzY3RwX2xvY2FsX2FkZHJfbG9jaywgZmxhZ3MpOwotCV9fc2N0cF9mcmVlX2xvY2FsX2FkZHJfbGlzdCgpOwotCV9fc2N0cF9nZXRfbG9jYWxfYWRkcl9saXN0KCk7Ci0Jc2N0cF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3RwX2xvY2FsX2FkZHJfbG9jaywgZmxhZ3MpOworCXN3aXRjaCAoZXYpIHsKKwljYXNlIE5FVERFVl9VUDoKKwkJYWRkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5KSwgR0ZQX0FUT01JQyk7CisJCWlmIChhZGRyKSB7CisJCQlhZGRyLT5hLnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCQkJYWRkci0+YS52NC5zaW5fcG9ydCA9IDA7CisJCQlhZGRyLT5hLnY0LnNpbl9hZGRyLnNfYWRkciA9IGlmYS0+aWZhX2xvY2FsOworCQkJbGlzdF9hZGRfdGFpbCgmYWRkci0+bGlzdCwgJnNjdHBfbG9jYWxfYWRkcl9saXN0KTsKKwkJfQorCQlicmVhazsKKwljYXNlIE5FVERFVl9ET1dOOgorCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0ZW1wLCAmc2N0cF9sb2NhbF9hZGRyX2xpc3QpIHsKKwkJCWFkZHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksIGxpc3QpOworCQkJaWYgKGFkZHItPmEudjQuc2luX2FkZHIuc19hZGRyID09IGlmYS0+aWZhX2xvY2FsKSB7CisJCQkJbGlzdF9kZWwocG9zKTsKKwkJCQlrZnJlZShhZGRyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWJyZWFrOworCX0KIAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTgwOCw3ICs4MDQsNyBAQAogCQkJICBOSVBRVUFEKCgoc3RydWN0IHJ0YWJsZSAqKXNrYi0+ZHN0KS0+cnRfZHN0KSk7CiAKIAlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9PVVRTQ1RQUEFDS1MpOwotCXJldHVybiBpcF9xdWV1ZV94bWl0KHNrYiwgc2tiLT5zaywgaXBmcmFnb2spOworCXJldHVybiBpcF9xdWV1ZV94bWl0KHNrYiwgaXBmcmFnb2spOwogfQogCiBzdGF0aWMgc3RydWN0IHNjdHBfYWYgc2N0cF9pcHY0X3NwZWNpZmljOwpAQCAtMTE3MiwxMyArMTE2OCwxMiBAQAogCiAJLyogSW5pdGlhbGl6ZSB0aGUgbG9jYWwgYWRkcmVzcyBsaXN0LiAqLwogCUlOSVRfTElTVF9IRUFEKCZzY3RwX2xvY2FsX2FkZHJfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNjdHBfbG9jYWxfYWRkcl9sb2NrKTsKKworCXNjdHBfZ2V0X2xvY2FsX2FkZHJfbGlzdCgpOwogCiAJLyogUmVnaXN0ZXIgbm90aWZpZXIgZm9yIGluZXQgYWRkcmVzcyBhZGRpdGlvbnMvZGVsZXRpb25zLiAqLwogCXJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZzY3RwX2luZXRhZGRyX25vdGlmaWVyKTsKIAotCXNjdHBfZ2V0X2xvY2FsX2FkZHJfbGlzdCgpOwotCiAJX191bnNhZmUoVEhJU19NT0RVTEUpOwogCXN0YXR1cyA9IDA7CiBvdXQ6CkBAIC0xMjYzLDYgKzEyNTgsNyBAQAogICogX19zdHJpbmdpZnkgZG9lc24ndCBsaWtlcyBlbnVtcywgc28gdXNlIElQUFJPVE9fU0NUUCB2YWx1ZSAoMTMyKSBkaXJlY3RseS4KICAqLwogTU9EVUxFX0FMSUFTKCJuZXQtcGYtIiBfX3N0cmluZ2lmeShQRl9JTkVUKSAiLXByb3RvLTEzMiIpOworTU9EVUxFX0FMSUFTKCJuZXQtcGYtIiBfX3N0cmluZ2lmeShQRl9JTkVUNikgIi1wcm90by0xMzIiKTsKIE1PRFVMRV9BVVRIT1IoIkxpbnV4IEtlcm5lbCBTQ1RQIGRldmVsb3BlcnMgPGxrc2N0cC1kZXZlbG9wZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgdGhlIFNDVFAgcHJvdG9jb2wgKFJGQzI5NjApIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggMzA5MjdkMy4uMGIxZGRiMSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMTI0LDggKzEyNCw4IEBACiAJcGFkbGVuID0gbGVuICUgNDsKIAllcnIubGVuZ3RoICA9IGh0b25zKGxlbik7CiAJbGVuICs9IHBhZGxlbjsKLQlzY3RwX2FkZHRvX2NodW5rKGNodW5rLCBzaXplb2Yoc2N0cF9lcnJoZHJfdCksICZlcnIpOwotCWNodW5rLT5zdWJoLmVycl9oZHIgPSBzY3RwX2FkZHRvX2NodW5rKGNodW5rLCBwYXlsZW4sIHBheWxvYWQpOworCWNodW5rLT5zdWJoLmVycl9oZHIgPSBzY3RwX2FkZHRvX2NodW5rKGNodW5rLCBzaXplb2Yoc2N0cF9lcnJoZHJfdCksICZlcnIpOworCXNjdHBfYWRkdG9fY2h1bmsoY2h1bmssIHBheWxlbiwgcGF5bG9hZCk7CiB9CiAKIC8qIDMuMy4yIEluaXRpYXRpb24gKElOSVQpICgxKQpAQCAtMTg0LDcgKzE4NCw3IEBACiAJc3RydWN0IHNjdHBfc29jayAqc3A7CiAJc2N0cF9zdXBwb3J0ZWRfYWRkcnNfcGFyYW1fdCBzYXQ7CiAJX19iZTE2IHR5cGVzWzJdOwotCXNjdHBfYWRhcHRpb25faW5kX3BhcmFtX3QgYWlwYXJhbTsKKwlzY3RwX2FkYXB0YXRpb25faW5kX3BhcmFtX3QgYWlwYXJhbTsKIAogCS8qIFJGQyAyOTYwIDMuMy4yIEluaXRpYXRpb24gKElOSVQpICgxKQogCSAqCkBAIC0yNDksOSArMjQ5LDkgQEAKIAlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKGVjYXBfcGFyYW0pLCAmZWNhcF9wYXJhbSk7CiAJaWYgKHNjdHBfcHJzY3RwX2VuYWJsZSkKIAkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihwcnNjdHBfcGFyYW0pLCAmcHJzY3RwX3BhcmFtKTsKLQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVElPTl9MQVlFUl9JTkQ7CisJYWlwYXJhbS5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ7CiAJYWlwYXJhbS5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKGFpcGFyYW0pKTsKLQlhaXBhcmFtLmFkYXB0aW9uX2luZCA9IGh0b25sKHNwLT5hZGFwdGlvbl9pbmQpOworCWFpcGFyYW0uYWRhcHRhdGlvbl9pbmQgPSBodG9ubChzcC0+YWRhcHRhdGlvbl9pbmQpOwogCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YoYWlwYXJhbSksICZhaXBhcmFtKTsKIG5vZGF0YToKIAlrZnJlZShhZGRycy52KTsKQEAgLTI2OSw3ICsyNjksNyBAQAogCXNjdHBfY29va2llX3BhcmFtX3QgKmNvb2tpZTsKIAlpbnQgY29va2llX2xlbjsKIAlzaXplX3QgY2h1bmtzaXplOwotCXNjdHBfYWRhcHRpb25faW5kX3BhcmFtX3QgYWlwYXJhbTsKKwlzY3RwX2FkYXB0YXRpb25faW5kX3BhcmFtX3QgYWlwYXJhbTsKIAogCXJldHZhbCA9IE5VTEw7CiAKQEAgLTMyMyw5ICszMjMsOSBAQAogCWlmIChhc29jLT5wZWVyLnByc2N0cF9jYXBhYmxlKQogCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKHByc2N0cF9wYXJhbSksICZwcnNjdHBfcGFyYW0pOwogCi0JYWlwYXJhbS5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQURBUFRJT05fTEFZRVJfSU5EOworCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOwogCWFpcGFyYW0ucGFyYW1faGRyLmxlbmd0aCA9IGh0b25zKHNpemVvZihhaXBhcmFtKSk7Ci0JYWlwYXJhbS5hZGFwdGlvbl9pbmQgPSBodG9ubChzY3RwX3NrKGFzb2MtPmJhc2Uuc2spLT5hZGFwdGlvbl9pbmQpOworCWFpcGFyYW0uYWRhcHRhdGlvbl9pbmQgPSBodG9ubChzY3RwX3NrKGFzb2MtPmJhc2Uuc2spLT5hZGFwdGF0aW9uX2luZCk7CiAJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihhaXBhcmFtKSwgJmFpcGFyYW0pOwogCiAJLyogV2UgbmVlZCB0byByZW1vdmUgdGhlIGNvbnN0IHF1YWxpZmllciBhdCB0aGlzIHBvaW50LiAgKi8KQEAgLTEzMDAsOCArMTMwMCw4IEBACiAJLyogUmVtZW1iZXIgUFItU0NUUCBjYXBhYmlsaXR5LiAqLwogCWNvb2tpZS0+Yy5wcnNjdHBfY2FwYWJsZSA9IGFzb2MtPnBlZXIucHJzY3RwX2NhcGFibGU7CiAKLQkvKiBTYXZlIGFkYXB0aW9uIGluZGljYXRpb24gaW4gdGhlIGNvb2tpZS4gKi8KLQljb29raWUtPmMuYWRhcHRpb25faW5kID0gYXNvYy0+cGVlci5hZGFwdGlvbl9pbmQ7CisJLyogU2F2ZSBhZGFwdGF0aW9uIGluZGljYXRpb24gaW4gdGhlIGNvb2tpZS4gKi8KKwljb29raWUtPmMuYWRhcHRhdGlvbl9pbmQgPSBhc29jLT5wZWVyLmFkYXB0YXRpb25faW5kOwogCiAJLyogU2V0IGFuIGV4cGlyYXRpb24gdGltZSBmb3IgdGhlIGNvb2tpZS4gICovCiAJZG9fZ2V0dGltZW9mZGF5KCZjb29raWUtPmMuZXhwaXJhdGlvbik7CkBAIC0xNTEyLDcgKzE1MTIsNyBAQAogCXJldHZhbC0+YWRkaXBfc2VyaWFsID0gcmV0dmFsLT5jLmluaXRpYWxfdHNuOwogCXJldHZhbC0+YWR2X3BlZXJfYWNrX3BvaW50ID0gcmV0dmFsLT5jdHNuX2Fja19wb2ludDsKIAlyZXR2YWwtPnBlZXIucHJzY3RwX2NhcGFibGUgPSByZXR2YWwtPmMucHJzY3RwX2NhcGFibGU7Ci0JcmV0dmFsLT5wZWVyLmFkYXB0aW9uX2luZCA9IHJldHZhbC0+Yy5hZGFwdGlvbl9pbmQ7CisJcmV0dmFsLT5wZWVyLmFkYXB0YXRpb25faW5kID0gcmV0dmFsLT5jLmFkYXB0YXRpb25faW5kOwogCiAJLyogVGhlIElOSVQgc3R1ZmYgd2lsbCBiZSBkb25lIGJ5IHRoZSBzaWRlIGVmZmVjdHMuICAqLwogCXJldHVybiByZXR2YWw7CkBAIC0xNTYyLDcgKzE1NjIsNyBAQAogCWlmICgqZXJycCkgewogCQlyZXBvcnQubnVtX21pc3NpbmcgPSBodG9ubCgxKTsKIAkJcmVwb3J0LnR5cGUgPSBwYXJhbXR5cGU7Ci0JCXNjdHBfaW5pdF9jYXVzZSgqZXJycCwgU0NUUF9FUlJPUl9JTlZfUEFSQU0sCisJCXNjdHBfaW5pdF9jYXVzZSgqZXJycCwgU0NUUF9FUlJPUl9NSVNTX1BBUkFNLAogCQkJCSZyZXBvcnQsIHNpemVvZihyZXBvcnQpKTsKIAl9CiAKQEAgLTE3NDMsNyArMTc0Myw3IEBACiAJY2FzZSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOgogCWNhc2UgU0NUUF9QQVJBTV9VTlJFQ09HTklaRURfUEFSQU1FVEVSUzoKIAljYXNlIFNDVFBfUEFSQU1fRUNOX0NBUEFCTEU6Ci0JY2FzZSBTQ1RQX1BBUkFNX0FEQVBUSU9OX0xBWUVSX0lORDoKKwljYXNlIFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ6CiAJCWJyZWFrOwogCiAJY2FzZSBTQ1RQX1BBUkFNX0hPU1RfTkFNRV9BRERSRVNTOgpAQCAtMTc3NSw3ICsxNzc1LDkgQEAKIAogCS8qIFZlcmlmeSBzdHJlYW0gdmFsdWVzIGFyZSBub24temVyby4gKi8KIAlpZiAoKDAgPT0gcGVlcl9pbml0LT5pbml0X2hkci5udW1fb3V0Ym91bmRfc3RyZWFtcykgfHwKLQkgICAgKDAgPT0gcGVlcl9pbml0LT5pbml0X2hkci5udW1faW5ib3VuZF9zdHJlYW1zKSkgeworCSAgICAoMCA9PSBwZWVyX2luaXQtPmluaXRfaGRyLm51bV9pbmJvdW5kX3N0cmVhbXMpIHx8CisJICAgICgwID09IHBlZXJfaW5pdC0+aW5pdF9oZHIuaW5pdF90YWcpIHx8CisJICAgIChTQ1RQX0RFRkFVTFRfTUlOV0lORE9XID4gbnRvaGwocGVlcl9pbml0LT5pbml0X2hkci5hX3J3bmQpKSkgewogCiAJCXNjdHBfcHJvY2Vzc19pbnZfbWFuZGF0b3J5KGFzb2MsIGNodW5rLCBlcnJwKTsKIAkJcmV0dXJuIDA7CkBAIC0yMDk4LDggKzIxMDAsOCBAQAogCQlhc29jLT5wZWVyLmVjbl9jYXBhYmxlID0gMTsKIAkJYnJlYWs7CiAKLQljYXNlIFNDVFBfUEFSQU1fQURBUFRJT05fTEFZRVJfSU5EOgotCQlhc29jLT5wZWVyLmFkYXB0aW9uX2luZCA9IHBhcmFtLmFpbmQtPmFkYXB0aW9uX2luZDsKKwljYXNlIFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ6CisJCWFzb2MtPnBlZXIuYWRhcHRhdGlvbl9pbmQgPSBwYXJhbS5haW5kLT5hZGFwdGF0aW9uX2luZDsKIAkJYnJlYWs7CiAKIAljYXNlIFNDVFBfUEFSQU1fRldEX1RTTl9TVVBQT1JUOgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IDdiYmM2MTUuLjZkYjc3ZDEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogCiAJCWFzb2MtPnBlZXIuc2Fja19uZWVkZWQgPSAwOwogCi0JCWVycm9yID0gc2N0cF9vdXRxX3RhaWwoJmFzb2MtPm91dHF1ZXVlLCBzYWNrKTsKKwkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9SRVBMWSwgU0NUUF9DSFVOSyhzYWNrKSk7CiAKIAkJLyogU3RvcCB0aGUgU0FDSyB0aW1lci4gICovCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVElNRVJfU1RPUCwKQEAgLTYyMSw3ICs2MjEsMTMgQEAKIAkvKiBUaGUgcmVjZWl2ZXIgb2YgdGhlIEhFQVJUQkVBVCBBQ0sgc2hvdWxkIGFsc28gcGVyZm9ybSBhbgogCSAqIFJUVCBtZWFzdXJlbWVudCBmb3IgdGhhdCBkZXN0aW5hdGlvbiB0cmFuc3BvcnQgYWRkcmVzcwogCSAqIHVzaW5nIHRoZSB0aW1lIHZhbHVlIGNhcnJpZWQgaW4gdGhlIEhFQVJUQkVBVCBBQ0sgY2h1bmsuCisJICogSWYgdGhlIHRyYW5zcG9ydCdzIHJ0b19wZW5kaW5nIHZhcmlhYmxlIGhhcyBiZWVuIGNsZWFyZWQsCisJICogaXQgd2FzIG1vc3QgbGlrZWx5IGR1ZSB0byBhIHJldHJhbnNtaXQuICBIb3dldmVyLCB3ZSB3YW50CisJICogdG8gcmUtZW5hYmxlIGl0IHRvIHByb3Blcmx5IHVwZGF0ZSB0aGUgcnRvLgogCSAqLworCWlmICh0LT5ydG9fcGVuZGluZyA9PSAwKQorCQl0LT5ydG9fcGVuZGluZyA9IDE7CisKIAloYmluZm8gPSAoc2N0cF9zZW5kZXJfaGJfaW5mb190ICopIGNodW5rLT5za2ItPmRhdGE7CiAJc2N0cF90cmFuc3BvcnRfdXBkYXRlX3J0byh0LCAoamlmZmllcyAtIGhiaW5mby0+c2VudF9hdCkpOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDI3Y2M0NDQuLmZiYmM5ZTYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC00NDAsNyArNDQwLDYgQEAKIHsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBhcmc7CiAJc2N0cF9pbml0X2NodW5rX3QgKmluaXRjaHVuazsKLQlfX3UzMiBpbml0X3RhZzsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqZXJyX2NodW5rOwogCXN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0OwogCXNjdHBfZXJyb3JfdCBlcnJvcjsKQEAgLTQ2MiwyNCArNDYxLDYgQEAKIAkvKiBHcmFiIHRoZSBJTklUIGhlYWRlci4gICovCiAJY2h1bmstPnN1YmguaW5pdF9oZHIgPSAoc2N0cF9pbml0aGRyX3QgKikgY2h1bmstPnNrYi0+ZGF0YTsKIAotCWluaXRfdGFnID0gbnRvaGwoY2h1bmstPnN1YmguaW5pdF9oZHItPmluaXRfdGFnKTsKLQotCS8qIFZlcmlmaWNhdGlvbiBUYWc6IDMuMy4zCi0JICogICBJZiB0aGUgdmFsdWUgb2YgdGhlIEluaXRpYXRlIFRhZyBpbiBhIHJlY2VpdmVkIElOSVQgQUNLCi0JICogICBjaHVuayBpcyBmb3VuZCB0byBiZSAwLCB0aGUgcmVjZWl2ZXIgTVVTVCB0cmVhdCBpdCBhcyBhbgotCSAqICAgZXJyb3IgYW5kIGNsb3NlIHRoZSBhc3NvY2lhdGlvbiBieSB0cmFuc21pdHRpbmcgYW4gQUJPUlQuCi0JICovCi0JaWYgKCFpbml0X3RhZykgewotCQlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbHkgPSBzY3RwX21ha2VfYWJvcnQoYXNvYywgY2h1bmssIDApOwotCQlpZiAoIXJlcGx5KQotCQkJZ290byBub21lbTsKLQotCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1JFUExZLCBTQ1RQX0NIVU5LKHJlcGx5KSk7Ci0JCXJldHVybiBzY3RwX3N0b3BfdDFfYW5kX2Fib3J0KGNvbW1hbmRzLCBTQ1RQX0VSUk9SX0lOVl9QQVJBTSwKLQkJCQkJICAgICAgRUNPTk5SRUZVU0VELCBhc29jLAotCQkJCQkgICAgICBjaHVuay0+dHJhbnNwb3J0KTsKLQl9Ci0KIAkvKiBWZXJpZnkgdGhlIElOSVQgY2h1bmsgYmVmb3JlIHByb2Nlc3NpbmcgaXQuICovCiAJZXJyX2NodW5rID0gTlVMTDsKIAlpZiAoIXNjdHBfdmVyaWZ5X2luaXQoYXNvYywgY2h1bmstPmNodW5rX2hkci0+dHlwZSwKQEAgLTU1MCw5ICs1MzEsNiBAQAogCQkJU0NUUF9DSFVOSyhlcnJfY2h1bmspKTsKIAogCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7Ci0KLW5vbWVtOgotCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwogfQogCiAvKgpAQCAtNjg4LDEyICs2NjYsMTIgQEAKIAkJZ290byBub21lbV9ldjsKIAogCS8qIFNvY2tldHMgQVBJIERyYWZ0IFNlY3Rpb24gNS4zLjEuNiAJCi0JICogV2hlbiBhIHBlZXIgc2VuZHMgYSBBZGFwdGlvbiBMYXllciBJbmRpY2F0aW9uIHBhcmFtZXRlciAsIFNDVFAKKwkgKiBXaGVuIGEgcGVlciBzZW5kcyBhIEFkYXB0YXRpb24gTGF5ZXIgSW5kaWNhdGlvbiBwYXJhbWV0ZXIgLCBTQ1RQCiAJICogZGVsaXZlcnMgdGhpcyBub3RpZmljYXRpb24gdG8gaW5mb3JtIHRoZSBhcHBsaWNhdGlvbiB0aGF0IG9mIHRoZQotCSAqIHBlZXJzIHJlcXVlc3RlZCBhZGFwdGlvbiBsYXllci4KKwkgKiBwZWVycyByZXF1ZXN0ZWQgYWRhcHRhdGlvbiBsYXllci4KIAkgKi8KLQlpZiAobmV3X2Fzb2MtPnBlZXIuYWRhcHRpb25faW5kKSB7Ci0JCWFpX2V2ID0gc2N0cF91bHBldmVudF9tYWtlX2FkYXB0aW9uX2luZGljYXRpb24obmV3X2Fzb2MsCisJaWYgKG5ld19hc29jLT5wZWVyLmFkYXB0YXRpb25faW5kKSB7CisJCWFpX2V2ID0gc2N0cF91bHBldmVudF9tYWtlX2FkYXB0YXRpb25faW5kaWNhdGlvbihuZXdfYXNvYywKIAkJCQkJCQkgICAgR0ZQX0FUT01JQyk7CiAJCWlmICghYWlfZXYpCiAJCQlnb3RvIG5vbWVtX2FpZXY7CkBAIC04MjAsMTIgKzc5OCwxMiBAQAogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfRVZFTlRfVUxQLCBTQ1RQX1VMUEVWRU5UKGV2KSk7CiAKIAkvKiBTb2NrZXRzIEFQSSBEcmFmdCBTZWN0aW9uIDUuMy4xLjYKLQkgKiBXaGVuIGEgcGVlciBzZW5kcyBhIEFkYXB0aW9uIExheWVyIEluZGljYXRpb24gcGFyYW1ldGVyICwgU0NUUAorCSAqIFdoZW4gYSBwZWVyIHNlbmRzIGEgQWRhcHRhdGlvbiBMYXllciBJbmRpY2F0aW9uIHBhcmFtZXRlciAsIFNDVFAKIAkgKiBkZWxpdmVycyB0aGlzIG5vdGlmaWNhdGlvbiB0byBpbmZvcm0gdGhlIGFwcGxpY2F0aW9uIHRoYXQgb2YgdGhlCi0JICogcGVlcnMgcmVxdWVzdGVkIGFkYXB0aW9uIGxheWVyLgorCSAqIHBlZXJzIHJlcXVlc3RlZCBhZGFwdGF0aW9uIGxheWVyLgogCSAqLwotCWlmIChhc29jLT5wZWVyLmFkYXB0aW9uX2luZCkgewotCQlldiA9IHNjdHBfdWxwZXZlbnRfbWFrZV9hZGFwdGlvbl9pbmRpY2F0aW9uKGFzb2MsIEdGUF9BVE9NSUMpOworCWlmIChhc29jLT5wZWVyLmFkYXB0YXRpb25faW5kKSB7CisJCWV2ID0gc2N0cF91bHBldmVudF9tYWtlX2FkYXB0YXRpb25faW5kaWNhdGlvbihhc29jLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFldikKIAkJCWdvdG8gbm9tZW07CiAKQEAgLTE1NTMsNiArMTUzMSwyOCBAQAogfQogCiAKKy8qCisgKiBVbmV4cGVjdGVkIElOSVQtQUNLIGhhbmRsZXIuCisgKgorICogU2VjdGlvbiA1LjIuMworICogSWYgYW4gSU5JVCBBQ0sgcmVjZWl2ZWQgYnkgYW4gZW5kcG9pbnQgaW4gYW55IHN0YXRlIG90aGVyIHRoYW4gdGhlCisgKiBDT09LSUUtV0FJVCBzdGF0ZSwgdGhlIGVuZHBvaW50IHNob3VsZCBkaXNjYXJkIHRoZSBJTklUIEFDSyBjaHVuay4KKyAqIEFuIHVuZXhwZWN0ZWQgSU5JVCBBQ0sgdXN1YWxseSBpbmRpY2F0ZXMgdGhlIHByb2Nlc3Npbmcgb2YgYW4gb2xkIG9yCisgKiBkdXBsaWNhdGVkIElOSVQgY2h1bmsuCisqLworc2N0cF9kaXNwb3NpdGlvbl90IHNjdHBfc2ZfZG9fNV8yXzNfaW5pdGFjayhjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJCQkJICAgIGNvbnN0IHNjdHBfc3VidHlwZV90IHR5cGUsCisJCQkJCSAgICB2b2lkICphcmcsIHNjdHBfY21kX3NlcV90ICpjb21tYW5kcykKK3sKKwkvKiBQZXIgdGhlIGFib3ZlIHNlY3Rpb24sIHdlJ2xsIGRpc2NhcmQgdGhlIGNodW5rIGlmIHdlIGhhdmUgYW4KKwkgKiBlbmRwb2ludC4gIElmIHRoaXMgaXMgYW4gT09UQiBJTklULUFDSywgdHJlYXQgaXQgYXMgc3VjaC4KKwkgKi8KKyAgICAgICAgaWYgKGVwID09IHNjdHBfc2soKHNjdHBfZ2V0X2N0bF9zb2NrKCkpKS0+ZXApCisJCXJldHVybiBzY3RwX3NmX29vdGIoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOworCWVsc2UKKwkJcmV0dXJuIHNjdHBfc2ZfZGlzY2FyZF9jaHVuayhlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7Cit9CiAKIC8qIFVuZXhwZWN0ZWQgQ09PS0lFLUVDSE8gaGFuZGxlciBmb3IgcGVlciByZXN0YXJ0IChUYWJsZSAyLCBhY3Rpb24gJ0EnKQogICoKQEAgLTE2OTgsMTIgKzE2OTgsMTIgQEAKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0VWRU5UX1VMUCwgU0NUUF9VTFBFVkVOVChldikpOwogCiAJLyogU29ja2V0cyBBUEkgRHJhZnQgU2VjdGlvbiA1LjMuMS42Ci0JICogV2hlbiBhIHBlZXIgc2VuZHMgYSBBZGFwdGlvbiBMYXllciBJbmRpY2F0aW9uIHBhcmFtZXRlciAsIFNDVFAKKwkgKiBXaGVuIGEgcGVlciBzZW5kcyBhIEFkYXB0YXRpb24gTGF5ZXIgSW5kaWNhdGlvbiBwYXJhbWV0ZXIgLCBTQ1RQCiAJICogZGVsaXZlcnMgdGhpcyBub3RpZmljYXRpb24gdG8gaW5mb3JtIHRoZSBhcHBsaWNhdGlvbiB0aGF0IG9mIHRoZQotCSAqIHBlZXJzIHJlcXVlc3RlZCBhZGFwdGlvbiBsYXllci4KKwkgKiBwZWVycyByZXF1ZXN0ZWQgYWRhcHRhdGlvbiBsYXllci4KIAkgKi8KLQlpZiAoYXNvYy0+cGVlci5hZGFwdGlvbl9pbmQpIHsKLQkJZXYgPSBzY3RwX3VscGV2ZW50X21ha2VfYWRhcHRpb25faW5kaWNhdGlvbihhc29jLCBHRlBfQVRPTUlDKTsKKwlpZiAoYXNvYy0+cGVlci5hZGFwdGF0aW9uX2luZCkgeworCQlldiA9IHNjdHBfdWxwZXZlbnRfbWFrZV9hZGFwdGF0aW9uX2luZGljYXRpb24oYXNvYywgR0ZQX0FUT01JQyk7CiAJCWlmICghZXYpCiAJCQlnb3RvIG5vbWVtX2V2OwogCkBAIC0xNzkxLDEyICsxNzkxLDEyIEBACiAJCQlnb3RvIG5vbWVtOwogCiAJCS8qIFNvY2tldHMgQVBJIERyYWZ0IFNlY3Rpb24gNS4zLjEuNgotCQkgKiBXaGVuIGEgcGVlciBzZW5kcyBhIEFkYXB0aW9uIExheWVyIEluZGljYXRpb24gcGFyYW1ldGVyLAorCQkgKiBXaGVuIGEgcGVlciBzZW5kcyBhIEFkYXB0YXRpb24gTGF5ZXIgSW5kaWNhdGlvbiBwYXJhbWV0ZXIsCiAJCSAqIFNDVFAgZGVsaXZlcnMgdGhpcyBub3RpZmljYXRpb24gdG8gaW5mb3JtIHRoZSBhcHBsaWNhdGlvbgotCQkgKiB0aGF0IG9mIHRoZSBwZWVycyByZXF1ZXN0ZWQgYWRhcHRpb24gbGF5ZXIuCisJCSAqIHRoYXQgb2YgdGhlIHBlZXJzIHJlcXVlc3RlZCBhZGFwdGF0aW9uIGxheWVyLgogCQkgKi8KLQkJaWYgKGFzb2MtPnBlZXIuYWRhcHRpb25faW5kKSB7Ci0JCQlhaV9ldiA9IHNjdHBfdWxwZXZlbnRfbWFrZV9hZGFwdGlvbl9pbmRpY2F0aW9uKGFzb2MsCisJCWlmIChhc29jLT5wZWVyLmFkYXB0YXRpb25faW5kKSB7CisJCQlhaV9ldiA9IHNjdHBfdWxwZXZlbnRfbWFrZV9hZGFwdGF0aW9uX2luZGljYXRpb24oYXNvYywKIAkJCQkJCQkJIEdGUF9BVE9NSUMpOwogCQkJaWYgKCFhaV9ldikKIAkJCQlnb3RvIG5vbWVtOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jIGIvbmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jCmluZGV4IDczM2RkODcuLjVmNmNjN2EgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fNV8yXzNfaW5pdGFjayksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzVfMUNfYWNrKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IDFlODEzMmIuLjM4OGQwZmIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0yNzMxLDE3ICsyNzMxLDU3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWRhcHRpb25fbGF5ZXIoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWRhcHRhdGlvbl9sYXllcihzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsCiAJCQkJCSAgaW50IG9wdGxlbikKIHsKLQlzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGlvbiBhZGFwdGlvbjsKKwlzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uIGFkYXB0YXRpb247CiAKLQlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGlvbikpCisJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlvbikpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChjb3B5X2Zyb21fdXNlcigmYWRhcHRpb24sIG9wdHZhbCwgb3B0bGVuKSkgCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhZGFwdGF0aW9uLCBvcHR2YWwsIG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCi0Jc2N0cF9zayhzayktPmFkYXB0aW9uX2luZCA9IGFkYXB0aW9uLnNzYl9hZGFwdGlvbl9pbmQ7CisJc2N0cF9zayhzayktPmFkYXB0YXRpb25faW5kID0gYWRhcHRhdGlvbi5zc2JfYWRhcHRhdGlvbl9pbmQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIDcuMS4yOS4gIFNldCBvciBHZXQgdGhlIGRlZmF1bHQgY29udGV4dCAoU0NUUF9DT05URVhUKQorICoKKyAqIFRoZSBjb250ZXh0IGZpZWxkIGluIHRoZSBzY3RwX3NuZHJjdmluZm8gc3RydWN0dXJlIGlzIG5vcm1hbGx5IG9ubHkKKyAqIHVzZWQgd2hlbiBhIGZhaWxlZCBtZXNzYWdlIGlzIHJldHJpZXZlZCBob2xkaW5nIHRoZSB2YWx1ZSB0aGF0IHdhcworICogc2VudCBkb3duIG9uIHRoZSBhY3R1YWwgc2VuZCBjYWxsLiAgVGhpcyBvcHRpb24gYWxsb3dzIHRoZSBzZXR0aW5nIG9mCisgKiBhIGRlZmF1bHQgY29udGV4dCBvbiBhbiBhc3NvY2lhdGlvbiBiYXNpcyB0aGF0IHdpbGwgYmUgcmVjZWl2ZWQgb24KKyAqIHJlYWRpbmcgbWVzc2FnZXMgZnJvbSB0aGUgcGVlci4gIFRoaXMgaXMgZXNwZWNpYWxseSBoZWxwZnVsIGluIHRoZQorICogb25lLTItbWFueSBtb2RlbCBmb3IgYW4gYXBwbGljYXRpb24gdG8ga2VlcCBzb21lIHJlZmVyZW5jZSB0byBhbgorICogaW50ZXJuYWwgc3RhdGUgbWFjaGluZSB0aGF0IGlzIHByb2Nlc3NpbmcgbWVzc2FnZXMgb24gdGhlCisgKiBhc3NvY2lhdGlvbi4gIE5vdGUgdGhhdCB0aGUgc2V0dGluZyBvZiB0aGlzIHZhbHVlIG9ubHkgZWZmZWN0cworICogcmVjZWl2ZWQgbWVzc2FnZXMgZnJvbSB0aGUgcGVlciBhbmQgZG9lcyBub3QgZWZmZWN0IHRoZSB2YWx1ZSB0aGF0IGlzCisgKiBzYXZlZCB3aXRoIG91dGJvdW5kIG1lc3NhZ2VzLgorICovCitzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9jb250ZXh0KHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCQkgICBpbnQgb3B0bGVuKQoreworCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtczsKKwlzdHJ1Y3Qgc2N0cF9zb2NrICpzcDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKworCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJhbXMsIG9wdHZhbCwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzcCA9IHNjdHBfc2soc2spOworCisJaWYgKHBhcmFtcy5hc3NvY19pZCAhPSAwKSB7CisJCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuYXNzb2NfaWQpOworCQlpZiAoIWFzb2MpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYXNvYy0+ZGVmYXVsdF9yY3ZfY29udGV4dCA9IHBhcmFtcy5hc3NvY192YWx1ZTsKKwl9IGVsc2UgeworCQlzcC0+ZGVmYXVsdF9yY3ZfY29udGV4dCA9IHBhcmFtcy5hc3NvY192YWx1ZTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4NTQsOCArMjg5NCwxMSBAQAogCWNhc2UgU0NUUF9NQVhTRUc6CiAJCXJldHZhbCA9IHNjdHBfc2V0c29ja29wdF9tYXhzZWcoc2ssIG9wdHZhbCwgb3B0bGVuKTsKIAkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0FEQVBUSU9OX0xBWUVSOgotCQlyZXR2YWwgPSBzY3RwX3NldHNvY2tvcHRfYWRhcHRpb25fbGF5ZXIoc2ssIG9wdHZhbCwgb3B0bGVuKTsKKwljYXNlIFNDVFBfQURBUFRBVElPTl9MQVlFUjoKKwkJcmV0dmFsID0gc2N0cF9zZXRzb2Nrb3B0X2FkYXB0YXRpb25fbGF5ZXIoc2ssIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0NPTlRFWFQ6CisJCXJldHZhbCA9IHNjdHBfc2V0c29ja29wdF9jb250ZXh0KHNrLCBvcHR2YWwsIG9wdGxlbik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTMwMTYsNiArMzA1OSw4IEBACiAJc3AtPmRlZmF1bHRfY29udGV4dCA9IDA7CiAJc3AtPmRlZmF1bHRfdGltZXRvbGl2ZSA9IDA7CiAKKwlzcC0+ZGVmYXVsdF9yY3ZfY29udGV4dCA9IDA7CisKIAkvKiBJbml0aWFsaXplIGRlZmF1bHQgc2V0dXAgcGFyYW1ldGVycy4gVGhlc2UgcGFyYW1ldGVycwogCSAqIGNhbiBiZSBtb2RpZmllZCB3aXRoIHRoZSBTQ1RQX0lOSVRNU0cgc29ja2V0IG9wdGlvbiBvcgogCSAqIG92ZXJyaWRkZW4gYnkgdGhlIFNDVFBfSU5JVCBDTVNHLgpAQCAtMzA3OCw3ICszMTIzLDcgQEAKIAkvKiBVc2VyIHNwZWNpZmllZCBmcmFnbWVudGF0aW9uIGxpbWl0LiAqLwogCXNwLT51c2VyX2ZyYWcgICAgICAgICA9IDA7CiAKLQlzcC0+YWRhcHRpb25faW5kID0gMDsKKwlzcC0+YWRhcHRhdGlvbl9pbmQgPSAwOwogCiAJc3AtPnBmID0gc2N0cF9nZXRfcGZfc3BlY2lmaWMoc2stPnNrX2ZhbWlseSk7CiAKQEAgLTM4MjEsMTAgKzM4NjYsOSBAQAogCXNjdHBfYXNzb2NfdCBpZDsKIAlzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKmJwOwogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0ZW1wOwogCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICphZGRyOwogCXJ3bG9ja190ICphZGRyX2xvY2s7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY250ID0gMDsKIAogCWlmIChsZW4gIT0gc2l6ZW9mKHNjdHBfYXNzb2NfdCkpCkBAIC0zODU5LDggKzM5MDMsNyBAQAogCQlhZGRyID0gbGlzdF9lbnRyeShicC0+YWRkcmVzc19saXN0Lm5leHQsCiAJCQkJICBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSwgbGlzdCk7CiAJCWlmIChzY3RwX2lzX2FueSgmYWRkci0+YSkpIHsKLQkJCXNjdHBfc3Bpbl9sb2NrX2lycXNhdmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLCBmbGFncyk7Ci0JCQlsaXN0X2Zvcl9lYWNoKHBvcywgJnNjdHBfbG9jYWxfYWRkcl9saXN0KSB7CisJCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0ZW1wLCAmc2N0cF9sb2NhbF9hZGRyX2xpc3QpIHsKIAkJCQlhZGRyID0gbGlzdF9lbnRyeShwb3MsCiAJCQkJCQkgIHN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5LAogCQkJCQkJICBsaXN0KTsKQEAgLTM4NjksOCArMzkxMiw2IEBACiAJCQkJCWNvbnRpbnVlOwogCQkJCWNudCsrOwogCQkJfQotCQkJc2N0cF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3RwX2xvY2FsX2FkZHJfbG9jaywKLQkJCQkJCSAgICBmbGFncyk7CiAJCX0gZWxzZSB7CiAJCQljbnQgPSAxOwogCQl9CkBAIC0zODkyLDE1ICszOTMzLDEzIEBACiBzdGF0aWMgaW50IHNjdHBfY29weV9sYWRkcnNfdG9fdXNlcl9vbGQoc3RydWN0IHNvY2sgKnNrLCBfX3UxNiBwb3J0LCBpbnQgbWF4X2FkZHJzLAogCQkJCQl2b2lkIF9fdXNlciAqdG8pCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm5leHQ7CiAJc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKmFkZHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bmlvbiBzY3RwX2FkZHIgdGVtcDsKIAlpbnQgY250ID0gMDsKIAlpbnQgYWRkcmxlbjsKIAotCXNjdHBfc3Bpbl9sb2NrX2lycXNhdmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaChwb3MsICZzY3RwX2xvY2FsX2FkZHJfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsICZzY3RwX2xvY2FsX2FkZHJfbGlzdCkgewogCQlhZGRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5LCBsaXN0KTsKIAkJaWYgKChQRl9JTkVUID09IHNrLT5za19mYW1pbHkpICYmIAogCQkgICAgKEFGX0lORVQ2ID09IGFkZHItPmEuc2Euc2FfZmFtaWx5KSkKQEAgLTM5MDksMTYgKzM5NDgsMTMgQEAKIAkJc2N0cF9nZXRfcGZfc3BlY2lmaWMoc2stPnNrX2ZhbWlseSktPmFkZHJfdjRtYXAoc2N0cF9zayhzayksCiAJCQkJCQkJCSZ0ZW1wKTsKIAkJYWRkcmxlbiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHRlbXAuc2Euc2FfZmFtaWx5KS0+c29ja2FkZHJfbGVuOwotCQlpZiAoY29weV90b191c2VyKHRvLCAmdGVtcCwgYWRkcmxlbikpIHsKLQkJCXNjdHBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2N0cF9sb2NhbF9hZGRyX2xvY2ssCi0JCQkJCQkgICAgZmxhZ3MpOworCQlpZiAoY29weV90b191c2VyKHRvLCAmdGVtcCwgYWRkcmxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQorCiAJCXRvICs9IGFkZHJsZW47CiAJCWNudCArKzsKIAkJaWYgKGNudCA+PSBtYXhfYWRkcnMpIGJyZWFrOwogCX0KLQlzY3RwX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMzkyNiwxNSArMzk2MiwxMyBAQAogc3RhdGljIGludCBzY3RwX2NvcHlfbGFkZHJzX3RvX3VzZXIoc3RydWN0IHNvY2sgKnNrLCBfX3UxNiBwb3J0LAogCQkJCSAgICB2b2lkIF9fdXNlciAqKnRvLCBzaXplX3Qgc3BhY2VfbGVmdCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbmV4dDsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuaW9uIHNjdHBfYWRkciB0ZW1wOwogCWludCBjbnQgPSAwOwogCWludCBhZGRybGVuOwogCi0Jc2N0cF9zcGluX2xvY2tfaXJxc2F2ZSgmc2N0cF9sb2NhbF9hZGRyX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoKHBvcywgJnNjdHBfbG9jYWxfYWRkcl9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgJnNjdHBfbG9jYWxfYWRkcl9saXN0KSB7CiAJCWFkZHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksIGxpc3QpOwogCQlpZiAoKFBGX0lORVQgPT0gc2stPnNrX2ZhbWlseSkgJiYgCiAJCSAgICAoQUZfSU5FVDYgPT0gYWRkci0+YS5zYS5zYV9mYW1pbHkpKQpAQCAtMzk0NSwxNiArMzk3OSwxMyBAQAogCQlhZGRybGVuID0gc2N0cF9nZXRfYWZfc3BlY2lmaWModGVtcC5zYS5zYV9mYW1pbHkpLT5zb2NrYWRkcl9sZW47CiAJCWlmKHNwYWNlX2xlZnQ8YWRkcmxlbikKIAkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoY29weV90b191c2VyKCp0bywgJnRlbXAsIGFkZHJsZW4pKSB7Ci0JCQlzY3RwX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLAotCQkJCQkJICAgIGZsYWdzKTsKKwkJaWYgKGNvcHlfdG9fdXNlcigqdG8sICZ0ZW1wLCBhZGRybGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQl9CisKIAkJKnRvICs9IGFkZHJsZW47CiAJCWNudCArKzsKIAkJc3BhY2VfbGVmdCAtPSBhZGRybGVuOwogCX0KLQlzY3RwX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtNDE3OSwyMSArNDIxMCwyMSBAQAogfQogCiAvKgotICogNy4xLjExICBTZXQgQWRhcHRpb24gTGF5ZXIgSW5kaWNhdG9yIChTQ1RQX0FEQVBUSU9OX0xBWUVSKQorICogNy4xLjExICBTZXQgQWRhcHRhdGlvbiBMYXllciBJbmRpY2F0b3IgKFNDVFBfQURBUFRBVElPTl9MQVlFUikKICAqCi0gKiBSZXF1ZXN0cyB0aGF0IHRoZSBsb2NhbCBlbmRwb2ludCBzZXQgdGhlIHNwZWNpZmllZCBBZGFwdGlvbiBMYXllcgorICogUmVxdWVzdHMgdGhhdCB0aGUgbG9jYWwgZW5kcG9pbnQgc2V0IHRoZSBzcGVjaWZpZWQgQWRhcHRhdGlvbiBMYXllcgogICogSW5kaWNhdGlvbiBwYXJhbWV0ZXIgZm9yIGFsbCBmdXR1cmUgSU5JVCBhbmQgSU5JVC1BQ0sgZXhjaGFuZ2VzLgogICovCi1zdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9hZGFwdGlvbl9sYXllcihzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCitzdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwKIAkJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKLQlzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGlvbiBhZGFwdGlvbjsKKwlzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uIGFkYXB0YXRpb247CiAKLQlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGlvbikpCisJaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlvbikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYWRhcHRpb24uc3NiX2FkYXB0aW9uX2luZCA9IHNjdHBfc2soc2spLT5hZGFwdGlvbl9pbmQ7Ci0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZhZGFwdGlvbiwgbGVuKSkKKwlhZGFwdGF0aW9uLnNzYl9hZGFwdGF0aW9uX2luZCA9IHNjdHBfc2soc2spLT5hZGFwdGF0aW9uX2luZDsKKwlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJmFkYXB0YXRpb24sIGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CkBAIC00NDM1LDYgKzQ0NjYsNDIgQEAKIH0KIAogLyoKKyAqIDcuMS4yOS4gIFNldCBvciBHZXQgdGhlIGRlZmF1bHQgY29udGV4dCAoU0NUUF9DT05URVhUKQorICogKGNoYXB0ZXIgYW5kIHZlcnNlIGlzIHF1b3RlZCBhdCBzY3RwX3NldHNvY2tvcHRfY29udGV4dCgpKQorICovCitzdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9jb250ZXh0KHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwKKwkJCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgcGFyYW1zOworCXN0cnVjdCBzY3RwX3NvY2sgKnNwOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCisJaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmcGFyYW1zLCBvcHR2YWwsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJc3AgPSBzY3RwX3NrKHNrKTsKKworCWlmIChwYXJhbXMuYXNzb2NfaWQgIT0gMCkgeworCQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsKKwkJaWYgKCFhc29jKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXBhcmFtcy5hc3NvY192YWx1ZSA9IGFzb2MtPmRlZmF1bHRfcmN2X2NvbnRleHQ7CisJfSBlbHNlIHsKKwkJcGFyYW1zLmFzc29jX3ZhbHVlID0gc3AtPmRlZmF1bHRfcmN2X2NvbnRleHQ7CisJfQorCisJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZwYXJhbXMsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiA3LjEuMTcgU2V0IHRoZSBtYXhpbXVtIGZyYWdybWVudGF0aW9uIHNpemUgKFNDVFBfTUFYU0VHKQogICoKICAqIFRoaXMgc29ja2V0IG9wdGlvbiBzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSB0byBwdXQgaW4gYW55IG91dGdvaW5nCkBAIC00NTY4LDEwICs0NjM1LDEzIEBACiAJCXJldHZhbCA9IHNjdHBfZ2V0c29ja29wdF9wZWVyX2FkZHJfaW5mbyhzaywgbGVuLCBvcHR2YWwsCiAJCQkJCQkJb3B0bGVuKTsKIAkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0FEQVBUSU9OX0xBWUVSOgotCQlyZXR2YWwgPSBzY3RwX2dldHNvY2tvcHRfYWRhcHRpb25fbGF5ZXIoc2ssIGxlbiwgb3B0dmFsLAorCWNhc2UgU0NUUF9BREFQVEFUSU9OX0xBWUVSOgorCQlyZXR2YWwgPSBzY3RwX2dldHNvY2tvcHRfYWRhcHRhdGlvbl9sYXllcihzaywgbGVuLCBvcHR2YWwsCiAJCQkJCQkJb3B0bGVuKTsKIAkJYnJlYWs7CisJY2FzZSBTQ1RQX0NPTlRFWFQ6CisJCXJldHZhbCA9IHNjdHBfZ2V0c29ja29wdF9jb250ZXh0KHNrLCBsZW4sIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dmFsID0gLUVOT1BST1RPT1BUOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3VscGV2ZW50LmMgYi9uZXQvc2N0cC91bHBldmVudC5jCmluZGV4IGUyNTVhNzAuLjQ0NWUwN2EgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmMKKysrIGIvbmV0L3NjdHAvdWxwZXZlbnQuYwpAQCAtNjA5LDMxICs2MDksMzEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgU0NUUF9BREFQVElPTl9JTkRJQ0FUSU9OIG5vdGlmaWNhdGlvbi4KKy8qIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OIG5vdGlmaWNhdGlvbi4KICAqCiAgKiBTb2NrZXQgRXh0ZW5zaW9ucyBmb3IgU0NUUAotICogNS4zLjEuNiBTQ1RQX0FEQVBUSU9OX0lORElDQVRJT04KKyAqIDUuMy4xLjYgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04KICAqLwotc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9hZGFwdGlvbl9pbmRpY2F0aW9uKAorc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9hZGFwdGF0aW9uX2luZGljYXRpb24oCiAJY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHNjdHBfYWRhcHRpb25fZXZlbnQgKnNhaTsKKwlzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50ICpzYWk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCWV2ZW50ID0gc2N0cF91bHBldmVudF9uZXcoc2l6ZW9mKHN0cnVjdCBzY3RwX2FkYXB0aW9uX2V2ZW50KSwKKwlldmVudCA9IHNjdHBfdWxwZXZlbnRfbmV3KHNpemVvZihzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50KSwKIAkJCQkgIE1TR19OT1RJRklDQVRJT04sIGdmcCk7CiAJaWYgKCFldmVudCkKIAkJZ290byBmYWlsOwogCiAJc2tiID0gc2N0cF9ldmVudDJza2IoZXZlbnQpOwotCXNhaSA9IChzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9ldmVudCAqKQotCQlza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2FkYXB0aW9uX2V2ZW50KSk7CisJc2FpID0gKHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgKikKKwkJc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50KSk7CiAKLQlzYWktPnNhaV90eXBlID0gU0NUUF9BREFQVElPTl9JTkRJQ0FUSU9OOworCXNhaS0+c2FpX3R5cGUgPSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTjsKIAlzYWktPnNhaV9mbGFncyA9IDA7Ci0Jc2FpLT5zYWlfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FkYXB0aW9uX2V2ZW50KTsKLQlzYWktPnNhaV9hZGFwdGlvbl9pbmQgPSBhc29jLT5wZWVyLmFkYXB0aW9uX2luZDsKKwlzYWktPnNhaV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCk7CisJc2FpLT5zYWlfYWRhcHRhdGlvbl9pbmQgPSBhc29jLT5wZWVyLmFkYXB0YXRpb25faW5kOwogCXNjdHBfdWxwZXZlbnRfc2V0X293bmVyKGV2ZW50LCBhc29jKTsKIAlzYWktPnNhaV9hc3NvY19pZCA9IHNjdHBfYXNzb2MyaWQoYXNvYyk7CiAKQEAgLTg0OSw4ICs4NDksMTAgQEAKIAkgKi8KIAlzaW5mby5zaW5mb19hc3NvY19pZCA9IHNjdHBfYXNzb2MyaWQoZXZlbnQtPmFzb2MpOwogCisJLyogY29udGV4dCB2YWx1ZSB0aGF0IGlzIHNldCB2aWEgU0NUUF9DT05URVhUIHNvY2tldCBvcHRpb24uICovCisJc2luZm8uc2luZm9fY29udGV4dCA9IGV2ZW50LT5hc29jLT5kZWZhdWx0X3Jjdl9jb250ZXh0OworCiAJLyogVGhlc2UgZmllbGRzIGFyZSBub3QgdXNlZCB3aGlsZSByZWNlaXZpbmcuICovCi0Jc2luZm8uc2luZm9fY29udGV4dCA9IDA7CiAJc2luZm8uc2luZm9fdGltZXRvbGl2ZSA9IDA7CiAKIAlwdXRfY21zZyhtc2doZHIsIElQUFJPVE9fU0NUUCwgU0NUUF9TTkRSQ1YsCmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggMjllYTFkZS4uNGUzOTYzMSAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMzYyLDIwICszNjIsMjAgQEAKIAl0aGlzLm5hbWUgPSBuYW1lOwogCXRoaXMuaGFzaCA9IDA7CiAKLQlmaWxlLT5mX2RlbnRyeSA9IGRfYWxsb2Moc29ja19tbnQtPm1udF9zYi0+c19yb290LCAmdGhpcyk7Ci0JaWYgKHVubGlrZWx5KCFmaWxlLT5mX2RlbnRyeSkpCisJZmlsZS0+Zl9wYXRoLmRlbnRyeSA9IGRfYWxsb2Moc29ja19tbnQtPm1udF9zYi0+c19yb290LCAmdGhpcyk7CisJaWYgKHVubGlrZWx5KCFmaWxlLT5mX3BhdGguZGVudHJ5KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmaWxlLT5mX2RlbnRyeS0+ZF9vcCA9ICZzb2NrZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9vcCA9ICZzb2NrZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJLyoKIAkgKiBXZSBkb250IHdhbnQgdG8gcHVzaCB0aGlzIGRlbnRyeSBpbnRvIGdsb2JhbCBkZW50cnkgaGFzaCB0YWJsZS4KIAkgKiBXZSBwcmV0ZW5kIGRlbnRyeSBpcyBhbHJlYWR5IGhhc2hlZCwgYnkgdW5zZXR0aW5nIERDQUNIRV9VTkhBU0hFRAogCSAqIFRoaXMgcGVybWl0cyBhIHdvcmtpbmcgL3Byb2MvJHBpZC9mZC9YWFggb24gc29ja2V0cwogCSAqLwotCWZpbGUtPmZfZGVudHJ5LT5kX2ZsYWdzICY9IH5EQ0FDSEVfVU5IQVNIRUQ7Ci0JZF9pbnN0YW50aWF0ZShmaWxlLT5mX2RlbnRyeSwgU09DS19JTk9ERShzb2NrKSk7Ci0JZmlsZS0+Zl92ZnNtbnQgPSBtbnRnZXQoc29ja19tbnQpOwotCWZpbGUtPmZfbWFwcGluZyA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CisJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOworCWRfaW5zdGFudGlhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgU09DS19JTk9ERShzb2NrKSk7CisJZmlsZS0+Zl9wYXRoLm1udCA9IG1udGdldChzb2NrX21udCk7CisJZmlsZS0+Zl9tYXBwaW5nID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nOwogCiAJc29jay0+ZmlsZSA9IGZpbGU7CiAJZmlsZS0+Zl9vcCA9IFNPQ0tfSU5PREUoc29jayktPmlfZm9wID0gJnNvY2tldF9maWxlX29wczsKQEAgLTQxMyw3ICs0MTMsNyBAQAogCWlmIChmaWxlLT5mX29wID09ICZzb2NrZXRfZmlsZV9vcHMpCiAJCXJldHVybiBmaWxlLT5wcml2YXRlX2RhdGE7CS8qIHNldCBpbiBzb2NrX21hcF9mZCAqLwogCi0JaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKCFTX0lTU09DSyhpbm9kZS0+aV9tb2RlKSkgewogCQkqZXJyID0gLUVOT1RTT0NLOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCBhMDJlY2MxLi5lMWExMDRhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCkBAIC01MDEsNyArNTAxLDcgQEAKIAlpZiAoIWJ1ZikKIAkJZ290byBvdXQ7CiAKLQljbG50ID0gUlBDX0koZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpLT5wcml2YXRlOworCWNsbnQgPSBSUENfSShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+cHJpdmF0ZTsKIAllcnIgPSAtRUZBVUxUOwogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHNyYywgbWxlbikpCiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfc3BrbTNfbWVjaC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfc3BrbTNfbWVjaC5jCmluZGV4IDQxNDY1MDcuLjhlZjNmMWMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3Nwa20zX21lY2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19zcGttM19tZWNoLmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCXN0YXR1cyA9IGdzc19tZWNoX3JlZ2lzdGVyKCZnc3Nfc3BrbTNfbWVjaCk7CiAJaWYgKHN0YXR1cykKIAkJcHJpbnRrKCJGYWlsZWQgdG8gcmVnaXN0ZXIgc3BrbTMgZ3NzIG1lY2hhbmlzbSFcbiIpOwotCXJldHVybiAwOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3Nwa20zX21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCmluZGV4IDcwMDM1M2IuLjA2NmM2NGEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKQEAgLTgwNCwxOSArODA0LDE5IEBACiAKIAlpbnRlZ19sZW4gPSBzdmNfZ2V0bmwoJmJ1Zi0+aGVhZFswXSk7CiAJaWYgKGludGVnX2xlbiAmIDMpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gc3RhdDsKIAlpZiAoaW50ZWdfbGVuID4gYnVmLT5sZW4pCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gc3RhdDsKIAlpZiAoeGRyX2J1Zl9zdWJzZWdtZW50KGJ1ZiwgJmludGVnX2J1ZiwgMCwgaW50ZWdfbGVuKSkKIAkJQlVHKCk7CiAJLyogY29weSBvdXQgbWljLi4uICovCiAJaWYgKHJlYWRfdTMyX2Zyb21feGRyX2J1ZihidWYsIGludGVnX2xlbiwgJm1pYy5sZW4pKQogCQlCVUcoKTsKIAlpZiAobWljLmxlbiA+IFJQQ19NQVhfQVVUSF9TSVpFKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIHN0YXQ7CiAJbWljLmRhdGEgPSBrbWFsbG9jKG1pYy5sZW4sIEdGUF9LRVJORUwpOwogCWlmICghbWljLmRhdGEpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gc3RhdDsKIAlpZiAocmVhZF9ieXRlc19mcm9tX3hkcl9idWYoYnVmLCBpbnRlZ19sZW4gKyA0LCBtaWMuZGF0YSwgbWljLmxlbikpCiAJCWdvdG8gb3V0OwogCW1hal9zdGF0ID0gZ3NzX3ZlcmlmeV9taWMoY3R4LCAmaW50ZWdfYnVmLCAmbWljKTsKQEAgLTgyNiw2ICs4MjYsNyBAQAogCQlnb3RvIG91dDsKIAlzdGF0ID0gMDsKIG91dDoKKwlrZnJlZShtaWMuZGF0YSk7CiAJcmV0dXJuIHN0YXQ7CiB9CiAKQEAgLTEwNjUsNyArMTA2Niw3IEBACiAJCX0KIAkJc3dpdGNoKGNhY2hlX2NoZWNrKCZyc2lfY2FjaGUsICZyc2lwLT5oLCAmcnFzdHAtPnJxX2NoYW5kbGUpKSB7CiAJCWNhc2UgLUVBR0FJTjoKLQkJCWdvdG8gZHJvcDsKKwkJY2FzZSAtRVRJTUVET1VUOgogCQljYXNlIC1FTk9FTlQ6CiAJCQlnb3RvIGRyb3A7CiAJCWNhc2UgMDoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2FjaGUuYyBiL25ldC9zdW5ycGMvY2FjaGUuYwppbmRleCBkOTZmZDQ2Li4xNDI3NDQ5IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NhY2hlLmMKKysrIGIvbmV0L3N1bnJwYy9jYWNoZS5jCkBAIC0zNCw3ICszNCw3IEBACiAKICNkZWZpbmUJIFJQQ0RCR19GQUNJTElUWSBSUENEQkdfQ0FDSEUKIAotc3RhdGljIHZvaWQgY2FjaGVfZGVmZXJfcmVxKHN0cnVjdCBjYWNoZV9yZXEgKnJlcSwgc3RydWN0IGNhY2hlX2hlYWQgKml0ZW0pOworc3RhdGljIGludCBjYWNoZV9kZWZlcl9yZXEoc3RydWN0IGNhY2hlX3JlcSAqcmVxLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaXRlbSk7CiBzdGF0aWMgdm9pZCBjYWNoZV9yZXZpc2l0X3JlcXVlc3Qoc3RydWN0IGNhY2hlX2hlYWQgKml0ZW0pOwogCiBzdGF0aWMgdm9pZCBjYWNoZV9pbml0KHN0cnVjdCBjYWNoZV9oZWFkICpoKQpAQCAtMTg1LDYgKzE4NSw3IEBACiAgKgogICogUmV0dXJucyAwIGlmIHRoZSBjYWNoZV9oZWFkIGNhbiBiZSB1c2VkLCBvciBjYWNoZV9wdXRzIGl0IGFuZCByZXR1cm5zCiAgKiAtRUFHQUlOIGlmIHVwY2FsbCBpcyBwZW5kaW5nLAorICogLUVUSU1FRE9VVCBpZiB1cGNhbGwgZmFpbGVkIGFuZCBzaG91bGQgYmUgcmV0cmllZCwKICAqIC1FTk9FTlQgaWYgY2FjaGUgZW50cnkgd2FzIG5lZ2F0aXZlCiAgKi8KIGludCBjYWNoZV9jaGVjayhzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwsCkBAIC0yMzYsNyArMjM3LDggQEAKIAl9CiAKIAlpZiAocnYgPT0gLUVBR0FJTikKLQkJY2FjaGVfZGVmZXJfcmVxKHJxc3RwLCBoKTsKKwkJaWYgKGNhY2hlX2RlZmVyX3JlcShycXN0cCwgaCkgIT0gMCkKKwkJCXJ2ID0gLUVUSU1FRE9VVDsKIAogCWlmIChydikKIAkJY2FjaGVfcHV0KGgsIGRldGFpbCk7CkBAIC01MjMsMTQgKzUyNSwyMSBAQAogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgY2FjaGVfZGVmZXJfaGFzaFtERlJfSEFTSFNJWkVdOwogc3RhdGljIGludCBjYWNoZV9kZWZlcl9jbnQ7CiAKLXN0YXRpYyB2b2lkIGNhY2hlX2RlZmVyX3JlcShzdHJ1Y3QgY2FjaGVfcmVxICpyZXEsIHN0cnVjdCBjYWNoZV9oZWFkICppdGVtKQorc3RhdGljIGludCBjYWNoZV9kZWZlcl9yZXEoc3RydWN0IGNhY2hlX3JlcSAqcmVxLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaXRlbSkKIHsKIAlzdHJ1Y3QgY2FjaGVfZGVmZXJyZWRfcmVxICpkcmVxOwogCWludCBoYXNoID0gREZSX0hBU0goaXRlbSk7CiAKKwlpZiAoY2FjaGVfZGVmZXJfY250ID49IERGUl9NQVgpIHsKKwkJLyogdG9vIG11Y2ggaW4gdGhlIGNhY2hlLCByYW5kb21seSBkcm9wIHRoaXMgb25lLAorCQkgKiBvciBjb250aW51ZSBhbmQgZHJvcCB0aGUgb2xkZXN0IGJlbG93CisJCSAqLworCQlpZiAobmV0X3JhbmRvbSgpJjEpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CiAJZHJlcSA9IHJlcS0+ZGVmZXIocmVxKTsKIAlpZiAoZHJlcSA9PSBOVUxMKQotCQlyZXR1cm47CisJCXJldHVybiAtRVRJTUVET1VUOwogCiAJZHJlcS0+aXRlbSA9IGl0ZW07CiAJZHJlcS0+cmVjdl90aW1lID0gZ2V0X3NlY29uZHMoKTsKQEAgLTU0NiwxNyArNTU1LDggQEAKIAkvKiBpdCBpcyBpbiwgbm93IG1heWJlIGNsZWFuIHVwICovCiAJZHJlcSA9IE5VTEw7CiAJaWYgKCsrY2FjaGVfZGVmZXJfY250ID4gREZSX01BWCkgewotCQkvKiB0b28gbXVjaCBpbiB0aGUgY2FjaGUsIHJhbmRvbWx5IGRyb3AKLQkJICogZmlyc3Qgb3IgbGFzdAotCQkgKi8KLQkJaWYgKG5ldF9yYW5kb20oKSYxKSAKLQkJCWRyZXEgPSBsaXN0X2VudHJ5KGNhY2hlX2RlZmVyX2xpc3QubmV4dCwKLQkJCQkJICBzdHJ1Y3QgY2FjaGVfZGVmZXJyZWRfcmVxLAotCQkJCQkgIHJlY2VudCk7Ci0JCWVsc2UKLQkJCWRyZXEgPSBsaXN0X2VudHJ5KGNhY2hlX2RlZmVyX2xpc3QucHJldiwKLQkJCQkJICBzdHJ1Y3QgY2FjaGVfZGVmZXJyZWRfcmVxLAotCQkJCQkgIHJlY2VudCk7CisJCWRyZXEgPSBsaXN0X2VudHJ5KGNhY2hlX2RlZmVyX2xpc3QucHJldiwKKwkJCQkgIHN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEsIHJlY2VudCk7CiAJCWxpc3RfZGVsKCZkcmVxLT5yZWNlbnQpOwogCQlsaXN0X2RlbCgmZHJlcS0+aGFzaCk7CiAJCWNhY2hlX2RlZmVyX2NudC0tOwpAQCAtNTcxLDYgKzU3MSw3IEBACiAJCS8qIG11c3QgaGF2ZSBqdXN0IGJlZW4gdmFsaWRhdGVkLi4uICovCiAJCWNhY2hlX3JldmlzaXRfcmVxdWVzdChpdGVtKTsKIAl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNhY2hlX3JldmlzaXRfcmVxdWVzdChzdHJ1Y3QgY2FjaGVfaGVhZCAqaXRlbSkKQEAgLTY3MCw3ICs2NzEsNyBAQAogewogCXN0cnVjdCBjYWNoZV9yZWFkZXIgKnJwID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjYWNoZV9yZXF1ZXN0ICpycTsKLQlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CisJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBQREUoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJaW50IGVycjsKIAogCWlmIChjb3VudCA9PSAwKQpAQCAtNzQ3LDcgKzc0OCw3IEBACiAJICAgIGxvZmZfdCAqcHBvcykKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUERFKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKKwlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAogCWlmIChjb3VudCA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTc3OCw3ICs3NzksNyBAQAogCXVuc2lnbmVkIGludCBtYXNrOwogCXN0cnVjdCBjYWNoZV9yZWFkZXIgKnJwID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjYWNoZV9xdWV1ZSAqY3E7Ci0Jc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBQREUoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpLT5kYXRhOworCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUERFKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwogCiAJcG9sbF93YWl0KGZpbHAsICZxdWV1ZV93YWl0LCB3YWl0KTsKIApAQCAtMTI1NCw3ICsxMjU1LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlYWRfZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBQREUoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpLT5kYXRhOworCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwogCWNoYXIgdGJ1ZlsyMF07CiAJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7CiAJaW50IGxlbjsKQEAgLTEyNzUsNyArMTI3Niw3IEBACiBzdGF0aWMgc3NpemVfdCB3cml0ZV9mbHVzaChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAogCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CisJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJY2hhciB0YnVmWzIwXTsKIAljaGFyICplcDsKIAlsb25nIGZsdXNodGltZTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2xudC5jIGIvbmV0L3N1bnJwYy9jbG50LmMKaW5kZXggYWJhNTI4Yi4uMTZjOWZiYyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9jbG50LmMKQEAgLTQ5MCwxNiArNDkwLDE0IEBACiAKIAkvKiBTZXQgdXAgdGhlIGNhbGwgaW5mbyBzdHJ1Y3QgYW5kIGV4ZWN1dGUgdGhlIHRhc2sgKi8KIAlzdGF0dXMgPSB0YXNrLT50a19zdGF0dXM7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCXJwY19yZWxlYXNlX3Rhc2sodGFzayk7CisJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKLQl9CiAJYXRvbWljX2luYygmdGFzay0+dGtfY291bnQpOwogCXN0YXR1cyA9IHJwY19leGVjdXRlKHRhc2spOwogCWlmIChzdGF0dXMgPT0gMCkKIAkJc3RhdHVzID0gdGFzay0+dGtfc3RhdHVzOwotCXJwY19wdXRfdGFzayh0YXNrKTsKIG91dDoKKwlycGNfcHV0X3Rhc2sodGFzayk7CiAJcnBjX3Jlc3RvcmVfc2lnbWFzaygmb2xkc2V0KTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNTM3LDcgKzUzNSw3IEBACiAJaWYgKHN0YXR1cyA9PSAwKQogCQlycGNfZXhlY3V0ZSh0YXNrKTsKIAllbHNlCi0JCXJwY19yZWxlYXNlX3Rhc2sodGFzayk7CisJCXJwY19wdXRfdGFzayh0YXNrKTsKIAogCXJwY19yZXN0b3JlX3NpZ21hc2soJm9sZHNldCk7CQkKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCmluZGV4IDE5NzAzYWEuLjg5MjczZDMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYworKysgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogc3RhdGljIHNzaXplX3QKIHJwY19waXBlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqb2Zmc2V0KQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcnBjX2lub2RlICpycGNpID0gUlBDX0koaW5vZGUpOwogCXN0cnVjdCBycGNfcGlwZV9tc2cgKm1zZzsKIAlpbnQgcmVzID0gMDsKQEAgLTI1Nyw3ICsyNTcsNyBAQAogc3RhdGljIHNzaXplX3QKIHJwY19waXBlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnNldCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHJwY19pbm9kZSAqcnBjaSA9IFJQQ19JKGlub2RlKTsKIAlpbnQgcmVzOwogCkBAIC0yNzUsNyArMjc1LDcgQEAKIAlzdHJ1Y3QgcnBjX2lub2RlICpycGNpOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAotCXJwY2kgPSBSUENfSShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJcnBjaSA9IFJQQ19JKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXBvbGxfd2FpdChmaWxwLCAmcnBjaS0+d2FpdHEsIHdhaXQpOwogCiAJbWFzayA9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwpAQCAtMjkwLDcgKzI5MCw3IEBACiBycGNfcGlwZV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IGZpbGUgKmZpbHAsCiAJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBycGNfaW5vZGUgKnJwY2kgPSBSUENfSShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHJwY19pbm9kZSAqcnBjaSA9IFJQQ19JKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWludCBsZW47CiAKIAlzd2l0Y2ggKGNtZCkgewpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zY2hlZC5jIGIvbmV0L3N1bnJwYy9zY2hlZC5jCmluZGV4IDc5YmM0Y2QuLmZjMDgzZjAgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc2NoZWQuYworKysgYi9uZXQvc3VucnBjL3NjaGVkLmMKQEAgLTQyLDYgKzQyLDcgQEAKIHN0YXRpYyB2b2lkCQkJX19ycGNfZGVmYXVsdF90aW1lcihzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogc3RhdGljIHZvaWQJCQlycGNpb2Rfa2lsbGFsbCh2b2lkKTsKIHN0YXRpYyB2b2lkCQkJcnBjX2FzeW5jX3NjaGVkdWxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3N0YXRpYyB2b2lkCQkJIHJwY19yZWxlYXNlX3Rhc2soc3RydWN0IHJwY190YXNrICp0YXNrKTsKIAogLyoKICAqIFJQQyB0YXNrcyBzaXQgaGVyZSB3aGlsZSB3YWl0aW5nIGZvciBjb25kaXRpb25zIHRvIGltcHJvdmUuCkBAIC04OTYsNyArODk3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocnBjX3B1dF90YXNrKTsKIAotdm9pZCBycGNfcmVsZWFzZV90YXNrKHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3N0YXRpYyB2b2lkIHJwY19yZWxlYXNlX3Rhc2soc3RydWN0IHJwY190YXNrICp0YXNrKQogewogI2lmZGVmIFJQQ19ERUJVRwogCUJVR19PTih0YXNrLT50a19tYWdpYyAhPSBSUENfVEFTS19NQUdJQ19JRCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCBlYjQ0ZWM5Li40YzE2MTEyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Yy5jCisrKyBiL25ldC9zdW5ycGMvc3ZjLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfU1ZDRFNQCi0jZGVmaW5lIFJQQ19QQVJBTk9JQSAxCiAKIC8qCiAgKiBNb2RlIGZvciBtYXBwaW5nIGNwdXMgdG8gcG9vbHMuCkBAIC0zMDgsNyArMzA3LDcgQEAKIAogCXNlcnYtPnN2X25ycG9vbHMgPSBucG9vbHM7CiAJc2Vydi0+c3ZfcG9vbHMgPQotCQlrY2FsbG9jKHNpemVvZihzdHJ1Y3Qgc3ZjX3Bvb2wpLCBzZXJ2LT5zdl9ucnBvb2xzLAorCQlrY2FsbG9jKHNlcnYtPnN2X25ycG9vbHMsIHNpemVvZihzdHJ1Y3Qgc3ZjX3Bvb2wpLAogCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFzZXJ2LT5zdl9wb29scykgewogCQlrZnJlZShzZXJ2KTsKQEAgLTg3MiwxNSArODcxLDE1IEBACiAJcmV0dXJuIDA7CiAKIGVycl9zaG9ydF9sZW46Ci0jaWZkZWYgUlBDX1BBUkFOT0lBCi0JcHJpbnRrKCJzdmM6IHNob3J0IGxlbiAlWmQsIGRyb3BwaW5nIHJlcXVlc3RcbiIsIGFyZ3YtPmlvdl9sZW4pOwotI2VuZGlmCisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKCJzdmM6IHNob3J0IGxlbiAlWmQsIGRyb3BwaW5nIHJlcXVlc3RcbiIsIGFyZ3YtPmlvdl9sZW4pOworCiAJZ290byBkcm9waXQ7CQkJLyogZHJvcCByZXF1ZXN0ICovCiAKIGVycl9iYWRfZGlyOgotI2lmZGVmIFJQQ19QQVJBTk9JQQotCXByaW50aygic3ZjOiBiYWQgZGlyZWN0aW9uICVkLCBkcm9wcGluZyByZXF1ZXN0XG4iLCBkaXIpOwotI2VuZGlmCisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKCJzdmM6IGJhZCBkaXJlY3Rpb24gJWQsIGRyb3BwaW5nIHJlcXVlc3RcbiIsIGRpcik7CisKIAlzZXJ2LT5zdl9zdGF0cy0+cnBjYmFkZm10Kys7CiAJZ290byBkcm9waXQ7CQkJLyogZHJvcCByZXF1ZXN0ICovCiAKQEAgLTkwOSw5ICs5MDgsMTAgQEAKIAlnb3RvIHNlbmRpdDsKIAogZXJyX2JhZF92ZXJzOgotI2lmZGVmIFJQQ19QQVJBTk9JQQotCXByaW50aygic3ZjOiB1bmtub3duIHZlcnNpb24gKCVkKVxuIiwgdmVycyk7Ci0jZW5kaWYKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQlwcmludGsoInN2YzogdW5rbm93biB2ZXJzaW9uICglZCBmb3IgcHJvZyAlZCwgJXMpXG4iLAorCQkgICAgICAgdmVycywgcHJvZywgcHJvZ3AtPnBnX25hbWUpOworCiAJc2Vydi0+c3Zfc3RhdHMtPnJwY2JhZGZtdCsrOwogCXN2Y19wdXRubChyZXN2LCBSUENfUFJPR19NSVNNQVRDSCk7CiAJc3ZjX3B1dG5sKHJlc3YsIHByb2dwLT5wZ19sb3ZlcnMpOwpAQCAtOTE5LDE3ICs5MTksMTcgQEAKIAlnb3RvIHNlbmRpdDsKIAogZXJyX2JhZF9wcm9jOgotI2lmZGVmIFJQQ19QQVJBTk9JQQotCXByaW50aygic3ZjOiB1bmtub3duIHByb2NlZHVyZSAoJWQpXG4iLCBwcm9jKTsKLSNlbmRpZgorCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50aygic3ZjOiB1bmtub3duIHByb2NlZHVyZSAoJWQpXG4iLCBwcm9jKTsKKwogCXNlcnYtPnN2X3N0YXRzLT5ycGNiYWRmbXQrKzsKIAlzdmNfcHV0bmwocmVzdiwgUlBDX1BST0NfVU5BVkFJTCk7CiAJZ290byBzZW5kaXQ7CiAKIGVycl9nYXJiYWdlOgotI2lmZGVmIFJQQ19QQVJBTk9JQQotCXByaW50aygic3ZjOiBmYWlsZWQgdG8gZGVjb2RlIGFyZ3NcbiIpOwotI2VuZGlmCisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKCJzdmM6IGZhaWxlZCB0byBkZWNvZGUgYXJnc1xuIik7CisKIAlycGNfc3RhdCA9IHJwY19nYXJiYWdlX2FyZ3M7CiBlcnJfYmFkOgogCXNlcnYtPnN2X3N0YXRzLT5ycGNiYWRmbXQrKzsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMgYi9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCmluZGV4IGEwYTk1M2EuLjBkMWU4ZmIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKKysrIGIvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYwpAQCAtNTMsNiArNTMsMTAgQEAKIAkJCXJldHVybiBOVUxMOwogCQlrcmVmX2luaXQoJm5ldy0+aC5yZWYpOwogCQluZXctPmgubmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChuZXctPmgubmFtZSA9PSBOVUxMKSB7CisJCQlrZnJlZShuZXcpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KIAkJbmV3LT5oLmZsYXZvdXIgPSAmc3ZjYXV0aF91bml4OwogCQluZXctPmFkZHJfY2hhbmdlcyA9IDA7CiAJCXJ2ID0gYXV0aF9kb21haW5fbG9va3VwKG5hbWUsICZuZXctPmgpOwpAQCAtNDM1LDYgKzQzOSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlCVUcoKTsKIAkJY2FzZSAtRUFHQUlOOgorCQljYXNlIC1FVElNRURPVVQ6CiAJCQlyZXR1cm4gU1ZDX0RST1A7CiAJCWNhc2UgLUVOT0VOVDoKIAkJCXJldHVybiBTVkNfREVOSUVEOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA5OWY1NGZiLi5mZjFmOGJmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYworKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtMTA2MiwxNSArMTA2MiwxOSBAQAogCQkJICogIGJpdCBzZXQgaW4gdGhlIGZyYWdtZW50IGxlbmd0aCBoZWFkZXIuCiAJCQkgKiAgQnV0IGFwcGFyZW50bHkgbm8ga25vd24gbmZzIGNsaWVudHMgc2VuZCBmcmFnbWVudGVkCiAJCQkgKiAgcmVjb3Jkcy4gKi8KLQkJCXByaW50ayhLRVJOX05PVElDRSAiUlBDOiBiYWQgVENQIHJlY2xlbiAweCUwOGx4IChub24tdGVybWluYWwpXG4iLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBzdnNrLT5za19yZWNsZW4pOworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJQQzogYmFkIFRDUCByZWNsZW4gMHglMDhseCIKKwkJCQkgICAgICAgIiAobm9uLXRlcm1pbmFsKVxuIiwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIHN2c2stPnNrX3JlY2xlbik7CiAJCQlnb3RvIGVycl9kZWxldGU7CiAJCX0KIAkJc3Zzay0+c2tfcmVjbGVuICY9IDB4N2ZmZmZmZmY7CiAJCWRwcmludGsoInN2YzogVENQIHJlY29yZCwgJWQgYnl0ZXNcbiIsIHN2c2stPnNrX3JlY2xlbik7CiAJCWlmIChzdnNrLT5za19yZWNsZW4gPiBzZXJ2LT5zdl9tYXhfbWVzZykgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJSUEM6IGJhZCBUQ1AgcmVjbGVuIDB4JTA4bHggKGxhcmdlKVxuIiwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgc3Zzay0+c2tfcmVjbGVuKTsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJSUEM6IGJhZCBUQ1AgcmVjbGVuIDB4JTA4bHgiCisJCQkJICAgICAgICIgKGxhcmdlKVxuIiwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIHN2c2stPnNrX3JlY2xlbik7CiAJCQlnb3RvIGVycl9kZWxldGU7CiAJCX0KIAl9CkBAIC0xMjc4LDYgKzEyODIsOCBAQAogCQkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7CiAJCQlycXN0cC0+cnFfcGFnZXNbaV0gPSBwOwogCQl9CisJcnFzdHAtPnJxX3BhZ2VzW2krK10gPSBOVUxMOyAvKiB0aGlzIG1pZ2h0IGJlIHNlZW4gaW4gbmZzX3JlYWRfYWN0b3IgKi8KKwlCVUdfT04ocGFnZXMgPj0gUlBDU1ZDX01BWFBBR0VTKTsKIAogCS8qIE1ha2UgYXJnLT5oZWFkIHBvaW50IHRvIGZpcnN0IHBhZ2UgYW5kIGFyZy0+cGFnZXMgcG9pbnQgdG8gcmVzdCAqLwogCWFyZyA9ICZycXN0cC0+cnFfYXJnOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29uZmlnLmMgYi9uZXQvdGlwYy9jb25maWcuYwppbmRleCA0NThhMmM0Li5iYWY1NWM0IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb25maWcuYworKysgYi9uZXQvdGlwYy9jb25maWcuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAKIAkJCWlmIChtbmcubGlua19zdWJzY3JpcHRpb25zID4gNjQpCiAJCQkJYnJlYWs7Ci0JCQlzdWIgPSAoc3RydWN0IHN1YnNjcl9kYXRhICopa21hbGxvYyhzaXplb2YoKnN1YiksCisJCQlzdWIgPSBrbWFsbG9jKHNpemVvZigqc3ViKSwKIAkJCQkJCQkgICAgR0ZQX0FUT01JQyk7CiAJCQlpZiAoc3ViID09IE5VTEwpIHsKIAkJCQl3YXJuKCJNZW1vcnkgc3F1ZWV6ZTsgZHJvcHBlZCByZW1vdGUgbGluayBzdWJzY3JpcHRpb25cbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZ2FyYmFnZS5jIGIvbmV0L3VuaXgvZ2FyYmFnZS5jCmluZGV4IDc0NmMyZjQuLmYxNGFkNjYgMTAwNjQ0Ci0tLSBhL25ldC91bml4L2dhcmJhZ2UuYworKysgYi9uZXQvdW5peC9nYXJiYWdlLmMKQEAgLTk2LDcgKzk2LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdW5peF9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBzb2NrICp1X3NvY2sgPSBOVUxMOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCS8qCiAJICoJU29ja2V0ID8KZGlmZiAtLWdpdCBhL25ldC94MjUvYWZfeDI1LmMgYi9uZXQveDI1L2FmX3gyNS5jCmluZGV4IDUyYTI3MjYuLmI1YzgwYjEgMTAwNjQ0Ci0tLSBhL25ldC94MjUvYWZfeDI1LmMKKysrIGIvbmV0L3gyNS9hZl94MjUuYwpAQCAtNDg0LDggKzQ4NCw2IEBACiAJcmV0dXJuIHNrOwogfQogCi12b2lkIHgyNV9pbml0X3RpbWVycyhzdHJ1Y3Qgc29jayAqc2spOwotCiBzdGF0aWMgaW50IHgyNV9jcmVhdGUoc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sKQogewogCXN0cnVjdCBzb2NrICpzazsKZGlmZiAtLWdpdCBhL25ldC94MjUveDI1X2Rldi5jIGIvbmV0L3gyNS94MjVfZGV2LmMKaW5kZXggNDdiNjhhMy4uMzI4ZDgwZiAxMDA2NDQKLS0tIGEvbmV0L3gyNS94MjVfZGV2LmMKKysrIGIvbmV0L3gyNS94MjVfZGV2LmMKQEAgLTU2LDYgKzU2LDcgQEAKIAkJCXNrX2FkZF9iYWNrbG9nKHNrLCBza2IpOwogCQl9CiAJCWJoX3VubG9ja19zb2NrKHNrKTsKKwkJc29ja19wdXQoc2spOwogCQlyZXR1cm4gcXVldWVkOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jIGIvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jCmluZGV4IDlmNDJiOWMuLjI3ZjVjYzcgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYworKysgYi9uZXQveDI1L3gyNV9mYWNpbGl0aWVzLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCSAqCVRoZXkgd2FudCByZXZlcnNlIGNoYXJnaW5nLCB3ZSB3b24ndCBhY2NlcHQgaXQuCiAJICovCiAJaWYgKCh0aGVpcnMucmV2ZXJzZSAmIDB4MDEgKSAmJiAob3Vycy0+cmV2ZXJzZSAmIDB4MDEpKSB7Ci0JCVNPQ0tfREVCVUcoc2ssICJYLjI1OiByZWplY3RpbmcgcmV2ZXJzZSBjaGFyZ2luZyByZXF1ZXN0Iik7CisJCVNPQ0tfREVCVUcoc2ssICJYLjI1OiByZWplY3RpbmcgcmV2ZXJzZSBjaGFyZ2luZyByZXF1ZXN0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMjYyLDI5ICsyNjIsMjkgQEAKIAogCWlmICh0aGVpcnMudGhyb3VnaHB1dCkgewogCQlpZiAodGhlaXJzLnRocm91Z2hwdXQgPCBvdXJzLT50aHJvdWdocHV0KSB7Ci0JCQlTT0NLX0RFQlVHKHNrLCAiWC4yNTogdGhyb3VnaHB1dCBuZWdvdGlhdGVkIGRvd24iKTsKKwkJCVNPQ0tfREVCVUcoc2ssICJYLjI1OiB0aHJvdWdocHV0IG5lZ290aWF0ZWQgZG93blxuIik7CiAJCQluZXctPnRocm91Z2hwdXQgPSB0aGVpcnMudGhyb3VnaHB1dDsKIAkJfQogCX0KIAogCWlmICh0aGVpcnMucGFjc2l6ZV9pbiAmJiB0aGVpcnMucGFjc2l6ZV9vdXQpIHsKIAkJaWYgKHRoZWlycy5wYWNzaXplX2luIDwgb3Vycy0+cGFjc2l6ZV9pbikgewotCQkJU09DS19ERUJVRyhzaywgIlguMjU6IHBhY2tldCBzaXplIGlud2FyZHMgbmVnb3RpYXRlZCBkb3duIik7CisJCQlTT0NLX0RFQlVHKHNrLCAiWC4yNTogcGFja2V0IHNpemUgaW53YXJkcyBuZWdvdGlhdGVkIGRvd25cbiIpOwogCQkJbmV3LT5wYWNzaXplX2luID0gdGhlaXJzLnBhY3NpemVfaW47CiAJCX0KIAkJaWYgKHRoZWlycy5wYWNzaXplX291dCA8IG91cnMtPnBhY3NpemVfb3V0KSB7Ci0JCQlTT0NLX0RFQlVHKHNrLCAiWC4yNTogcGFja2V0IHNpemUgb3V0d2FyZHMgbmVnb3RpYXRlZCBkb3duIik7CisJCQlTT0NLX0RFQlVHKHNrLCAiWC4yNTogcGFja2V0IHNpemUgb3V0d2FyZHMgbmVnb3RpYXRlZCBkb3duXG4iKTsKIAkJCW5ldy0+cGFjc2l6ZV9vdXQgPSB0aGVpcnMucGFjc2l6ZV9vdXQ7CiAJCX0KIAl9CiAKIAlpZiAodGhlaXJzLndpbnNpemVfaW4gJiYgdGhlaXJzLndpbnNpemVfb3V0KSB7CiAJCWlmICh0aGVpcnMud2luc2l6ZV9pbiA8IG91cnMtPndpbnNpemVfaW4pIHsKLQkJCVNPQ0tfREVCVUcoc2ssICJYLjI1OiB3aW5kb3cgc2l6ZSBpbndhcmRzIG5lZ290aWF0ZWQgZG93biIpOworCQkJU09DS19ERUJVRyhzaywgIlguMjU6IHdpbmRvdyBzaXplIGlud2FyZHMgbmVnb3RpYXRlZCBkb3duXG4iKTsKIAkJCW5ldy0+d2luc2l6ZV9pbiA9IHRoZWlycy53aW5zaXplX2luOwogCQl9CiAJCWlmICh0aGVpcnMud2luc2l6ZV9vdXQgPCBvdXJzLT53aW5zaXplX291dCkgewotCQkJU09DS19ERUJVRyhzaywgIlguMjU6IHdpbmRvdyBzaXplIG91dHdhcmRzIG5lZ290aWF0ZWQgZG93biIpOworCQkJU09DS19ERUJVRyhzaywgIlguMjU6IHdpbmRvdyBzaXplIG91dHdhcmRzIG5lZ290aWF0ZWQgZG93blxuIik7CiAJCQluZXctPndpbnNpemVfb3V0ID0gdGhlaXJzLndpbnNpemVfb3V0OwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9hbGdvLmMgYi9uZXQveGZybS94ZnJtX2FsZ28uYwppbmRleCA2YjM4MWZjMDMuLmYxY2YzNDAgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fYWxnby5jCisrKyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCkBAIC0zOTksNyArMzk5LDggQEAKIAkJaWYgKCFwcm9iZSkKIAkJCWJyZWFrOwogCi0JCXN0YXR1cyA9IGNyeXB0b19oYXNfYWxnKG5hbWUsIHR5cGUsIG1hc2sgfCBDUllQVE9fQUxHX0FTWU5DKTsKKwkJc3RhdHVzID0gY3J5cHRvX2hhc19hbGcobGlzdFtpXS5uYW1lLCB0eXBlLAorCQkJCQltYXNrIHwgQ1JZUFRPX0FMR19BU1lOQyk7CiAJCWlmICghc3RhdHVzKQogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IGJlYmQ0MGUuLmI3ZTUzN2YgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtNjUwLDE5ICs2NTAsMTggQEAKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbDsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKmRlbHBvbDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47Ci0Jc3RydWN0IGhsaXN0X25vZGUgKmVudHJ5LCAqbmV3cG9zLCAqbGFzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnksICpuZXdwb3M7CiAJc3RydWN0IGRzdF9lbnRyeSAqZ2NfbGlzdDsKIAogCXdyaXRlX2xvY2tfYmgoJnhmcm1fcG9saWN5X2xvY2spOwogCWNoYWluID0gcG9saWN5X2hhc2hfYnlzZWwoJnBvbGljeS0+c2VsZWN0b3IsIHBvbGljeS0+ZmFtaWx5LCBkaXIpOwogCWRlbHBvbCA9IE5VTEw7CiAJbmV3cG9zID0gTlVMTDsKLQlsYXN0ID0gTlVMTDsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShwb2wsIGVudHJ5LCBjaGFpbiwgYnlkc3QpIHsKLQkJaWYgKCFkZWxwb2wgJiYKLQkJICAgIHBvbC0+dHlwZSA9PSBwb2xpY3ktPnR5cGUgJiYKKwkJaWYgKHBvbC0+dHlwZSA9PSBwb2xpY3ktPnR5cGUgJiYKIAkJICAgICFzZWxlY3Rvcl9jbXAoJnBvbC0+c2VsZWN0b3IsICZwb2xpY3ktPnNlbGVjdG9yKSAmJgotCQkgICAgeGZybV9zZWNfY3R4X21hdGNoKHBvbC0+c2VjdXJpdHksIHBvbGljeS0+c2VjdXJpdHkpKSB7CisJCSAgICB4ZnJtX3NlY19jdHhfbWF0Y2gocG9sLT5zZWN1cml0eSwgcG9saWN5LT5zZWN1cml0eSkgJiYKKwkJICAgICFXQVJOX09OKGRlbHBvbCkpIHsKIAkJCWlmIChleGNsKSB7CiAJCQkJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKIAkJCQlyZXR1cm4gLUVFWElTVDsKQEAgLTY3MSwxNyArNjcwLDEyIEBACiAJCQlpZiAocG9saWN5LT5wcmlvcml0eSA+IHBvbC0+cHJpb3JpdHkpCiAJCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAocG9saWN5LT5wcmlvcml0eSA+PSBwb2wtPnByaW9yaXR5KSB7Ci0JCQlsYXN0ID0gJnBvbC0+Ynlkc3Q7CisJCQluZXdwb3MgPSAmcG9sLT5ieWRzdDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmICghbmV3cG9zKQotCQkJbmV3cG9zID0gJnBvbC0+Ynlkc3Q7CiAJCWlmIChkZWxwb2wpCiAJCQlicmVhazsKLQkJbGFzdCA9ICZwb2wtPmJ5ZHN0OwogCX0KLQlpZiAoIW5ld3BvcykKLQkJbmV3cG9zID0gbGFzdDsKIAlpZiAobmV3cG9zKQogCQlobGlzdF9hZGRfYWZ0ZXIobmV3cG9zLCAmcG9saWN5LT5ieWRzdCk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCBlNTM3MmIxLi44MmYzNmQzIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYworKysgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtNDM0LDE4ICs0MzQsMTkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCB4ZnJtX2FkZF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqKnhmcm1hKQorc3RhdGljIGludCB4ZnJtX2FkZF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJc3RydWN0IHJ0YXR0ciAqKnhmcm1hKQogewogCXN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwID0gTkxNU0dfREFUQShubGgpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwogCWludCBlcnI7CiAJc3RydWN0IGttX2V2ZW50IGM7CiAKLQllcnIgPSB2ZXJpZnlfbmV3c2FfaW5mbyhwLCAoc3RydWN0IHJ0YXR0ciAqKil4ZnJtYSk7CisJZXJyID0gdmVyaWZ5X25ld3NhX2luZm8ocCwgeGZybWEpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQl4ID0geGZybV9zdGF0ZV9jb25zdHJ1Y3QocCwgKHN0cnVjdCBydGF0dHIgKiopeGZybWEsICZlcnIpOworCXggPSB4ZnJtX3N0YXRlX2NvbnN0cnVjdChwLCB4ZnJtYSwgJmVycik7CiAJaWYgKCF4KQogCQlyZXR1cm4gZXJyOwogCkBAIC01MDcsMTQgKzUwOCwxNSBAQAogCXJldHVybiB4OwogfQogCi1zdGF0aWMgaW50IHhmcm1fZGVsX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICoqeGZybWEpCitzdGF0aWMgaW50IHhmcm1fZGVsX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQlzdHJ1Y3QgcnRhdHRyICoqeGZybWEpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAJaW50IGVyciA9IC1FU1JDSDsKIAlzdHJ1Y3Qga21fZXZlbnQgYzsKIAlzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgKnAgPSBOTE1TR19EQVRBKG5saCk7CiAKLQl4ID0geGZybV91c2VyX3N0YXRlX2xvb2t1cChwLCAoc3RydWN0IHJ0YXR0ciAqKil4ZnJtYSwgJmVycik7CisJeCA9IHhmcm1fdXNlcl9zdGF0ZV9sb29rdXAocCwgeGZybWEsICZlcnIpOwogCWlmICh4ID09IE5VTEwpCiAJCXJldHVybiBlcnI7CiAKQEAgLTY3MiwxNCArNjc0LDE1IEBACiAJcmV0dXJuIHNrYjsKIH0KIAotc3RhdGljIGludCB4ZnJtX2dldF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqKnhmcm1hKQorc3RhdGljIGludCB4ZnJtX2dldF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJc3RydWN0IHJ0YXR0ciAqKnhmcm1hKQogewogCXN0cnVjdCB4ZnJtX3VzZXJzYV9pZCAqcCA9IE5MTVNHX0RBVEEobmxoKTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVzcF9za2I7CiAJaW50IGVyciA9IC1FU1JDSDsKIAotCXggPSB4ZnJtX3VzZXJfc3RhdGVfbG9va3VwKHAsIChzdHJ1Y3QgcnRhdHRyICoqKXhmcm1hLCAmZXJyKTsKKwl4ID0geGZybV91c2VyX3N0YXRlX2xvb2t1cChwLCB4ZnJtYSwgJmVycik7CiAJaWYgKHggPT0gTlVMTCkKIAkJZ290byBvdXRfbm9wdXQ7CiAKQEAgLTcxOCw3ICs3MjEsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqKnhmcm1hKQorc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCXN0cnVjdCBydGF0dHIgKip4ZnJtYSkKIHsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gKnA7CkBAIC0xMDEzLDcgKzEwMTcsOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IHhmcm1fYWRkX3BvbGljeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqKnhmcm1hKQorc3RhdGljIGludCB4ZnJtX2FkZF9wb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCXN0cnVjdCBydGF0dHIgKip4ZnJtYSkKIHsKIAlzdHJ1Y3QgeGZybV91c2VycG9saWN5X2luZm8gKnAgPSBOTE1TR19EQVRBKG5saCk7CiAJc3RydWN0IHhmcm1fcG9saWN5ICp4cDsKQEAgLTEwMjQsMTEgKzEwMjksMTEgQEAKIAllcnIgPSB2ZXJpZnlfbmV3cG9saWN5X2luZm8ocCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQllcnIgPSB2ZXJpZnlfc2VjX2N0eF9sZW4oKHN0cnVjdCBydGF0dHIgKiopeGZybWEpOworCWVyciA9IHZlcmlmeV9zZWNfY3R4X2xlbih4ZnJtYSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXhwID0geGZybV9wb2xpY3lfY29uc3RydWN0KHAsIChzdHJ1Y3QgcnRhdHRyICoqKXhmcm1hLCAmZXJyKTsKKwl4cCA9IHhmcm1fcG9saWN5X2NvbnN0cnVjdChwLCB4ZnJtYSwgJmVycik7CiAJaWYgKCF4cCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTIyNyw3ICsxMjMyLDggQEAKIAlyZXR1cm4gc2tiOwogfQogCi1zdGF0aWMgaW50IHhmcm1fZ2V0X3BvbGljeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqKnhmcm1hKQorc3RhdGljIGludCB4ZnJtX2dldF9wb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCXN0cnVjdCBydGF0dHIgKip4ZnJtYSkKIHsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwOwogCXN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaWQgKnA7CkBAIC0xMjM5LDcgKzEyNDUsNyBAQAogCXAgPSBOTE1TR19EQVRBKG5saCk7CiAJZGVsZXRlID0gbmxoLT5ubG1zZ190eXBlID09IFhGUk1fTVNHX0RFTFBPTElDWTsKIAotCWVyciA9IGNvcHlfZnJvbV91c2VyX3BvbGljeV90eXBlKCZ0eXBlLCAoc3RydWN0IHJ0YXR0ciAqKil4ZnJtYSk7CisJZXJyID0gY29weV9mcm9tX3VzZXJfcG9saWN5X3R5cGUoJnR5cGUsIHhmcm1hKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xMjUwLDExICsxMjU2LDEwIEBACiAJaWYgKHAtPmluZGV4KQogCQl4cCA9IHhmcm1fcG9saWN5X2J5aWQodHlwZSwgcC0+ZGlyLCBwLT5pbmRleCwgZGVsZXRlKTsKIAllbHNlIHsKLQkJc3RydWN0IHJ0YXR0ciAqKnJ0YXR0cnMgPSAoc3RydWN0IHJ0YXR0ciAqKil4ZnJtYTsKLQkJc3RydWN0IHJ0YXR0ciAqcnQgPSBydGF0dHJzW1hGUk1BX1NFQ19DVFgtMV07CisJCXN0cnVjdCBydGF0dHIgKnJ0ID0geGZybWFbWEZSTUFfU0VDX0NUWC0xXTsKIAkJc3RydWN0IHhmcm1fcG9saWN5IHRtcDsKIAotCQllcnIgPSB2ZXJpZnlfc2VjX2N0eF9sZW4ocnRhdHRycyk7CisJCWVyciA9IHZlcmlmeV9zZWNfY3R4X2xlbih4ZnJtYSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCkBAIC0xMzAyLDcgKzEzMDcsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgeGZybV9mbHVzaF9zYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqKnhmcm1hKQorc3RhdGljIGludCB4ZnJtX2ZsdXNoX3NhKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQlzdHJ1Y3QgcnRhdHRyICoqeGZybWEpCiB7CiAJc3RydWN0IGttX2V2ZW50IGM7CiAJc3RydWN0IHhmcm1fdXNlcnNhX2ZsdXNoICpwID0gTkxNU0dfREFUQShubGgpOwpAQCAtMTM2Nyw3ICsxMzczLDggQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgeGZybV9nZXRfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKip4ZnJtYSkKK3N0YXRpYyBpbnQgeGZybV9nZXRfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCXN0cnVjdCBydGF0dHIgKip4ZnJtYSkKIHsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcl9za2I7CkBAIC0xNDE1LDcgKzE0MjIsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgeGZybV9uZXdfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKip4ZnJtYSkKK3N0YXRpYyBpbnQgeGZybV9uZXdfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCXN0cnVjdCBydGF0dHIgKip4ZnJtYSkKIHsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3Qga21fZXZlbnQgYzsKQEAgLTE0MzksNyArMTQ0Nyw3IEBACiAJCWdvdG8gb3V0OwogCiAJc3Bpbl9sb2NrX2JoKCZ4LT5sb2NrKTsKLQllcnIgPSB4ZnJtX3VwZGF0ZV9hZV9wYXJhbXMoeCwoc3RydWN0IHJ0YXR0ciAqKil4ZnJtYSk7CisJZXJyID0geGZybV91cGRhdGVfYWVfcGFyYW1zKHgsIHhmcm1hKTsKIAlzcGluX3VubG9ja19iaCgmeC0+bG9jayk7CiAJaWYgKGVycgk8IDApCiAJCWdvdG8gb3V0OwpAQCAtMTQ1NSwxNCArMTQ2MywxNSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgeGZybV9mbHVzaF9wb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKip4ZnJtYSkKK3N0YXRpYyBpbnQgeGZybV9mbHVzaF9wb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCXN0cnVjdCBydGF0dHIgKip4ZnJtYSkKIHsKIAlzdHJ1Y3Qga21fZXZlbnQgYzsKIAl1OCB0eXBlID0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOOwogCWludCBlcnI7CiAJc3RydWN0IHhmcm1fYXVkaXQgYXVkaXRfaW5mbzsKIAotCWVyciA9IGNvcHlfZnJvbV91c2VyX3BvbGljeV90eXBlKCZ0eXBlLCAoc3RydWN0IHJ0YXR0ciAqKil4ZnJtYSk7CisJZXJyID0gY29weV9mcm9tX3VzZXJfcG9saWN5X3R5cGUoJnR5cGUsIHhmcm1hKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xNDc3LDcgKzE0ODYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHhmcm1fYWRkX3BvbF9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKip4ZnJtYSkKK3N0YXRpYyBpbnQgeGZybV9hZGRfcG9sX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJc3RydWN0IHJ0YXR0ciAqKnhmcm1hKQogewogCXN0cnVjdCB4ZnJtX3BvbGljeSAqeHA7CiAJc3RydWN0IHhmcm1fdXNlcl9wb2xleHBpcmUgKnVwID0gTkxNU0dfREFUQShubGgpOwpAQCAtMTQ4NSwxOCArMTQ5NSwxNyBAQAogCXU4IHR5cGUgPSBYRlJNX1BPTElDWV9UWVBFX01BSU47CiAJaW50IGVyciA9IC1FTk9FTlQ7CiAKLQllcnIgPSBjb3B5X2Zyb21fdXNlcl9wb2xpY3lfdHlwZSgmdHlwZSwgKHN0cnVjdCBydGF0dHIgKiopeGZybWEpOworCWVyciA9IGNvcHlfZnJvbV91c2VyX3BvbGljeV90eXBlKCZ0eXBlLCB4ZnJtYSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWlmIChwLT5pbmRleCkKIAkJeHAgPSB4ZnJtX3BvbGljeV9ieWlkKHR5cGUsIHAtPmRpciwgcC0+aW5kZXgsIDApOwogCWVsc2UgewotCQlzdHJ1Y3QgcnRhdHRyICoqcnRhdHRycyA9IChzdHJ1Y3QgcnRhdHRyICoqKXhmcm1hOwotCQlzdHJ1Y3QgcnRhdHRyICpydCA9IHJ0YXR0cnNbWEZSTUFfU0VDX0NUWC0xXTsKKwkJc3RydWN0IHJ0YXR0ciAqcnQgPSB4ZnJtYVtYRlJNQV9TRUNfQ1RYLTFdOwogCQlzdHJ1Y3QgeGZybV9wb2xpY3kgdG1wOwogCi0JCWVyciA9IHZlcmlmeV9zZWNfY3R4X2xlbihydGF0dHJzKTsKKwkJZXJyID0gdmVyaWZ5X3NlY19jdHhfbGVuKHhmcm1hKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAKQEAgLTE1MzcsNyArMTU0Niw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB4ZnJtX2FkZF9zYV9leHBpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKip4ZnJtYSkKK3N0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQlzdHJ1Y3QgcnRhdHRyICoqeGZybWEpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAJaW50IGVycjsKQEAgLTE1NjgsNyArMTU3OCw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB4ZnJtX2FkZF9hY3F1aXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICoqeGZybWEpCitzdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCXN0cnVjdCBydGF0dHIgKip4ZnJtYSkKIHsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwOwogCXN0cnVjdCB4ZnJtX3VzZXJfdG1wbCAqdXQ7CkBAIC0xNjQ3LDcgKzE2NTgsNyBAQAogI3VuZGVmIFhNU0dTSVpFCiAKIHN0YXRpYyBzdHJ1Y3QgeGZybV9saW5rIHsKLQlpbnQgKCpkb2l0KShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgbmxtc2doZHIgKiwgdm9pZCAqKik7CisJaW50ICgqZG9pdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5sbXNnaGRyICosIHN0cnVjdCBydGF0dHIgKiopOwogCWludCAoKmR1bXApKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICopOwogfSB4ZnJtX2Rpc3BhdGNoW1hGUk1fTlJfTVNHVFlQRVNdID0gewogCVtYRlJNX01TR19ORVdTQSAgICAgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fYWRkX3NhICAgICAgICB9LApAQCAtMTczNSw3ICsxNzQ2LDcgQEAKIAogCWlmIChsaW5rLT5kb2l0ID09IE5VTEwpCiAJCWdvdG8gZXJyX2VpbnZhbDsKLQkqZXJycCA9IGxpbmstPmRvaXQoc2tiLCBubGgsICh2b2lkICoqKSAmeGZybWEpOworCSplcnJwID0gbGluay0+ZG9pdChza2IsIG5saCwgeGZybWEpOwogCiAJcmV0dXJuICplcnJwOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL0tidWlsZC5pbmNsdWRlIGIvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQppbmRleCA0ZjVmZjE5Li5mMDFmOGMwIDEwMDY0NAotLS0gYS9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCisrKyBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKQEAgLTU2LDYgKzU2LDkgQEAKICMgZ2NjIHN1cHBvcnQgZnVuY3Rpb25zCiAjIFNlZSBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQKIAorIyBvdXRwdXQgZGlyZWN0b3J5IGZvciB0ZXN0cyBiZWxvdworVE1QT1VUIDo9ICQoaWYgJChLQlVJTERfRVhUTU9EKSwkKGZpcnN0d29yZCAkKEtCVUlMRF9FWFRNT0QpKS8pCisKICMgYXMtb3B0aW9uCiAjIFVzYWdlOiBjZmxhZ3MteSArPSAkKGNhbGwgYXMtb3B0aW9uLCAtV2EkKGNvbW1hKS1pc2E9Zm9vLCkKIApAQCAtNjYsOSArNjksMTEgQEAKICMgYXMtaW5zdHIKICMgVXNhZ2U6IGNmbGFncy15ICs9ICQoY2FsbCBhcy1pbnN0ciwgaW5zdHIsIG9wdGlvbjEsIG9wdGlvbjIpCiAKLWFzLWluc3RyID0gJChzaGVsbCBpZiBlY2hvIC1lICIkKDEpIiB8ICQoQVMpID4vZGV2L251bGwgMj4mMSAtVyAtWiAtbyBhc3Rlc3QkJCQkLm91dCA7IFwKLQkJICAgdGhlbiBlY2hvICIkKDIpIjsgZWxzZSBlY2hvICIkKDMpIjsgZmk7IFwKLQkgICAgICAgICAgIHJtIC1mIGFzdGVzdCQkJCQub3V0KQorYXMtaW5zdHIgPSAkKHNoZWxsIGlmIGVjaG8gLWUgIiQoMSkiIHwgXAorCQkgICAgICAkKENDKSAkKEFGTEFHUykgLWMgLXhhc3NlbWJsZXIgLSBcCisJCQkgICAgLW8gJChUTVBPVVQpYXN0ZXN0JCQkJC5vdXQgPiAvZGV2L251bGwgMj4mMTsgXAorCQkgICB0aGVuIHJtICQoVE1QT1VUKWFzdGVzdCQkJCQub3V0OyBlY2hvICIkKDIpIjsgXAorCQkgICBlbHNlIGVjaG8gIiQoMykiOyBmaSkKIAogIyBjYy1vcHRpb24KICMgVXNhZ2U6IGNmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sIC1tYXJjaD13aW5jaGlwLWM2LCAtbWFyY2g9aTU4NikKQEAgLTk3LDEwICsxMDIsMTAgQEAKIAogIyBsZC1vcHRpb24KICMgVXNhZ2U6IGxkZmxhZ3MgKz0gJChjYWxsIGxkLW9wdGlvbiwgLVdsJChjb21tYSktLWhhc2gtc3R5bGU9Ym90aCkKLWxkLW9wdGlvbiA9ICQoc2hlbGwgaWYgJChDQykgJCgxKSBcCi0JCQkgICAgIC1ub3N0ZGxpYiAtbyBsZHRlc3QkJCQkLm91dCAteGMgL2Rldi9udWxsIFwKLSAgICAgICAgICAgICA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuIGVjaG8gIiQoMSkiOyBlbHNlIGVjaG8gIiQoMikiOyBmaTsgXAotCSAgICAgcm0gLWYgbGR0ZXN0JCQkJC5vdXQpCitsZC1vcHRpb24gPSAkKHNoZWxsIGlmICQoQ0MpICQoMSkgLW5vc3RkbGliIC14YyAvZGV2L251bGwgXAorCQkJICAgICAtbyAkKFRNUE9VVClsZHRlc3QkJCQkLm91dCA+IC9kZXYvbnVsbCAyPiYxOyBcCisgICAgICAgICAgICAgdGhlbiBybSAkKFRNUE9VVClsZHRlc3QkJCQkLm91dDsgZWNobyAiJCgxKSI7IFwKKyAgICAgICAgICAgICBlbHNlIGVjaG8gIiQoMikiOyBmaSkKIAogIyMjCiAjIFNob3J0aGFuZCBmb3IgJChRKSQoTUFLRSkgLWYgc2NyaXB0cy9NYWtlZmlsZS5idWlsZCBvYmo9CmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmhlYWRlcnNpbnN0IGIvc2NyaXB0cy9NYWtlZmlsZS5oZWFkZXJzaW5zdAppbmRleCA0MjQxZTBkLi5mN2I2NzA1IDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmhlYWRlcnNpbnN0CisrKyBiL3NjcmlwdHMvTWFrZWZpbGUuaGVhZGVyc2luc3QKQEAgLTEwOSw3ICsxMDksNyBAQAogcXVpZXRfY21kX2dlbgkJICA9IEdFTiAgICAgJChwYXRzdWJzdCAkKElOU1RBTExfSERSX1BBVEgpLyUsJSwkQCkKICAgICAgIGNtZF9nZW4JCSAgPSBcCiBGTkFNRT0kKHBhdHN1YnN0ICQoSU5TVEFMTF9IRFJfUEFUSCkvJChfZHN0KS8lLCUsJEApCQkJXAotU1RVQkRFRj1fX0FTTV9TVFVCX2BlY2hvICQkRk5BTUUgfCB0ciBhLXouIEEtWl9gOwkJCVwKK1NUVUJERUY9X19BU01fU1RVQl9gZWNobyAkJEZOQU1FIHwgdHIgYS16Li0gQS1aX19gOwkJCVwKIChlY2hvICIvKiBGaWxlIGF1dG9nZW5lcmF0ZWQgYnkgJ21ha2UgaGVhZGVyc19pbnN0YWxsJyAqLyIgOwkJXAogZWNobyAiXCNpZm5kZWYgJCRTVFVCREVGIiA7CQkJCQkJXAogZWNobyAiXCNkZWZpbmUgJCRTVFVCREVGIiA7CQkJCQkJXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rYWxsc3ltcy5jIGIvc2NyaXB0cy9rYWxsc3ltcy5jCmluZGV4IGYzNTliNzMuLjhiODA5YjIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2FsbHN5bXMuYworKysgYi9zY3JpcHRzL2thbGxzeW1zLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXByaW50ZigiI2RlZmluZSBBTEdOIC5hbGlnbiA0XG4iKTsKIAlwcmludGYoIiNlbmRpZlxuIik7CiAKLQlwcmludGYoIi5kYXRhXG4iKTsKKwlwcmludGYoIlx0LnNlY3Rpb24gLnJvZGF0YSwgXCJhXCJcbiIpOwogCiAJLyogUHJvdmlkZSBwcm9wZXIgc3ltYm9scyByZWxvY2F0YWJpbGl0eSBieSB0aGVpciAnX3RleHQnCiAJICogcmVsYXRpdmVuZXNzLiAgVGhlIHN5bWJvbCBuYW1lcyBjYW5ub3QgYmUgdXNlZCB0byBjb25zdHJ1Y3QKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IDRkY2I4ODYuLjEyNGIzNDEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtNjAwLDcgKzYwMCw3IEBACiAJCQlpbnB1dF9tb2RlID0gYXNrX3NpbGVudDsKIAkJCXZhbGlkX3N0ZGluID0gMTsKIAkJfQotCX0gZWxzZSBpZiAoc3ltX2NoYW5nZV9jb3VudCkgeworCX0gZWxzZSBpZiAoY29uZl9nZXRfY2hhbmdlZCgpKSB7CiAJCW5hbWUgPSBnZXRlbnYoIktDT05GSUdfTk9TSUxFTlRVUERBVEUiKTsKIAkJaWYgKG5hbWUgJiYgKm5hbWUpIHsKIAkJCWZwcmludGYoc3RkZXJyLCBfKCJcbioqKiBLZXJuZWwgY29uZmlndXJhdGlvbiByZXF1aXJlcyBleHBsaWNpdCB1cGRhdGUuXG5cbiIpKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKaW5kZXggNjZiMTVlZi4uNjY0ZmUyOSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCQlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOwogCQlpZiAoaW4pCiAJCQlnb3RvIGxvYWQ7Ci0JCXN5bV9jaGFuZ2VfY291bnQrKzsKKwkJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7CiAJCWlmICghc3ltX2RlZmNvbmZpZ19saXN0KQogCQkJcmV0dXJuIDE7CiAKQEAgLTMxMiw3ICszMTIsNyBAQAogCXN0cnVjdCBleHByICplOwogCWludCBpLCBmbGFnczsKIAotCXN5bV9jaGFuZ2VfY291bnQgPSAwOworCXN5bV9zZXRfY2hhbmdlX2NvdW50KDApOwogCiAJaWYgKGNvbmZfcmVhZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUikpCiAJCXJldHVybiAxOwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJCXN5bS0+ZmxhZ3MgJj0gZmxhZ3MgfCB+U1lNQk9MX0RFRl9VU0VSOwogCX0KIAotCXN5bV9jaGFuZ2VfY291bnQgKz0gY29uZl93YXJuaW5ncyB8fCBjb25mX3Vuc2F2ZWQ7CisJc3ltX2FkZF9jaGFuZ2VfY291bnQoY29uZl93YXJuaW5ncyB8fCBjb25mX3Vuc2F2ZWQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MzIsNyArNDMyLDcgQEAKIAkJICAgICB1c2VfdGltZXN0YW1wID8gIiMgIiA6ICIiLAogCQkgICAgIHVzZV90aW1lc3RhbXAgPyBjdGltZSgmbm93KSA6ICIiKTsKIAotCWlmICghc3ltX2NoYW5nZV9jb3VudCkKKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkKIAkJc3ltX2NsZWFyX2FsbF92YWxpZCgpOwogCiAJbWVudSA9IHJvb3RtZW51Lmxpc3Q7CkBAIC01MjgsNyArNTI4LDcgQEAKIAkJICIjIGNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byAlc1xuIgogCQkgIiNcbiIpLCBuZXduYW1lKTsKIAotCXN5bV9jaGFuZ2VfY291bnQgPSAwOworCXN5bV9zZXRfY2hhbmdlX2NvdW50KDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NjUsMyArNzY1LDMwIEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBzeW1fY2hhbmdlX2NvdW50Oworc3RhdGljIHZvaWQgKCpjb25mX2NoYW5nZWRfY2FsbGJhY2spKHZvaWQpOworCit2b2lkIHN5bV9zZXRfY2hhbmdlX2NvdW50KGludCBjb3VudCkKK3sKKwlpbnQgX3N5bV9jaGFuZ2VfY291bnQgPSBzeW1fY2hhbmdlX2NvdW50OworCXN5bV9jaGFuZ2VfY291bnQgPSBjb3VudDsKKwlpZiAoY29uZl9jaGFuZ2VkX2NhbGxiYWNrICYmCisJICAgIChib29sKV9zeW1fY2hhbmdlX2NvdW50ICE9IChib29sKWNvdW50KQorCQljb25mX2NoYW5nZWRfY2FsbGJhY2soKTsKK30KKwordm9pZCBzeW1fYWRkX2NoYW5nZV9jb3VudChpbnQgY291bnQpCit7CisJc3ltX3NldF9jaGFuZ2VfY291bnQoY291bnQgKyBzeW1fY2hhbmdlX2NvdW50KTsKK30KKworYm9vbCBjb25mX2dldF9jaGFuZ2VkKHZvaWQpCit7CisJcmV0dXJuIHN5bV9jaGFuZ2VfY291bnQ7Cit9CisKK3ZvaWQgY29uZl9zZXRfY2hhbmdlZF9jYWxsYmFjayh2b2lkICgqZm4pKHZvaWQpKQoreworCWNvbmZfY2hhbmdlZF9jYWxsYmFjayA9IGZuOworfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2djb25mLmMgYi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYwppbmRleCA3YjBkM2E5Li42MWQ4MTY2IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYworKysgYi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYwpAQCAtMzgsOCArMzgsNiBAQAogc3RhdGljIGdib29sZWFuIHNob3dfZGVidWcgPSBGQUxTRTsKIHN0YXRpYyBnYm9vbGVhbiByZXNpemVhYmxlID0gRkFMU0U7CiAKLXN0YXRpYyBnYm9vbGVhbiBjb25maWdfY2hhbmdlZCA9IEZBTFNFOwotCiBzdGF0aWMgY2hhciBub2hlbHBfdGV4dFtdID0KICAgICBOXygiU29ycnksIG5vIGhlbHAgYXZhaWxhYmxlIGZvciB0aGlzIG9wdGlvbiB5ZXQuXG4iKTsKIApAQCAtNTAsNiArNDgsOCBAQAogR3RrV2lkZ2V0ICpocGFuZWQgPSBOVUxMOwogR3RrV2lkZ2V0ICp2cGFuZWQgPSBOVUxMOwogR3RrV2lkZ2V0ICpiYWNrX2J0biA9IE5VTEw7CitHdGtXaWRnZXQgKnNhdmVfYnRuID0gTlVMTDsKK0d0a1dpZGdldCAqc2F2ZV9tZW51X2l0ZW0gPSBOVUxMOwogCiBHdGtUZXh0VGFnICp0YWcxLCAqdGFnMjsKIEdka0NvbG9yIGNvbG9yOwpAQCAtNzUsNyArNzUsNyBAQAogc3RhdGljIHZvaWQgdXBkYXRlX3RyZWUoc3RydWN0IG1lbnUgKnNyYywgR3RrVHJlZUl0ZXIgKiBkc3QpOwogc3RhdGljIHZvaWQgc2V0X25vZGUoR3RrVHJlZUl0ZXIgKiBub2RlLCBzdHJ1Y3QgbWVudSAqbWVudSwgZ2NoYXIgKiogcm93KTsKIHN0YXRpYyBnY2hhciAqKmZpbGxfcm93KHN0cnVjdCBtZW51ICptZW51KTsKLQorc3RhdGljIHZvaWQgY29uZl9jaGFuZ2VkKHZvaWQpOwogCiAvKiBIZWxwaW5nL0RlYnVnZ2luZyBGdW5jdGlvbnMgKi8KIApAQCAtMjI0LDYgKzIyNCwxMCBAQAogCWd0a19jaGVja19tZW51X2l0ZW1fc2V0X2FjdGl2ZSgoR3RrQ2hlY2tNZW51SXRlbSAqKSB3aWRnZXQsCiAJCQkJICAgICAgIHNob3dfdmFsdWUpOwogCisJc2F2ZV9idG4gPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJidXR0b24zIik7CisJc2F2ZV9tZW51X2l0ZW0gPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJzYXZlMSIpOworCWNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2soY29uZl9jaGFuZ2VkKTsKKwogCXN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUobWFpbl93bmQpOwogCXdpZGdldCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInRvb2xiYXIxIik7CiAKQEAgLTUxMiwxNCArNTE2LDE0IEBACiAKIC8qIE1haW4gV2luZG93cyBDYWxsYmFja3MgKi8KIAotdm9pZCBvbl9zYXZlMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpOwordm9pZCBvbl9zYXZlX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSk7CiBnYm9vbGVhbiBvbl93aW5kb3cxX2RlbGV0ZV9ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQsIEdka0V2ZW50ICogZXZlbnQsCiAJCQkJIGdwb2ludGVyIHVzZXJfZGF0YSkKIHsKIAlHdGtXaWRnZXQgKmRpYWxvZywgKmxhYmVsOwogCWdpbnQgcmVzdWx0OwogCi0JaWYgKGNvbmZpZ19jaGFuZ2VkID09IEZBTFNFKQorCWlmICghY29uZl9nZXRfY2hhbmdlZCgpKQogCQlyZXR1cm4gRkFMU0U7CiAKIAlkaWFsb2cgPSBndGtfZGlhbG9nX25ld193aXRoX2J1dHRvbnMoXygiV2FybmluZyAhIiksCkBAIC01NDMsNyArNTQ3LDcgQEAKIAlyZXN1bHQgPSBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpOwogCXN3aXRjaCAocmVzdWx0KSB7CiAJY2FzZSBHVEtfUkVTUE9OU0VfWUVTOgotCQlvbl9zYXZlMV9hY3RpdmF0ZShOVUxMLCBOVUxMKTsKKwkJb25fc2F2ZV9hY3RpdmF0ZShOVUxMLCBOVUxMKTsKIAkJcmV0dXJuIEZBTFNFOwogCWNhc2UgR1RLX1JFU1BPTlNFX05POgogCQlyZXR1cm4gRkFMU0U7CkBAIC02MjEsMTIgKzYyNSwxMCBAQAogfQogCiAKLXZvaWQgb25fc2F2ZTFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQordm9pZCBvbl9zYXZlX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKIHsKIAlpZiAoY29uZl93cml0ZShOVUxMKSkKIAkJdGV4dF9pbnNlcnRfbXNnKF8oIkVycm9yIiksIF8oIlVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24gISIpKTsKLQotCWNvbmZpZ19jaGFuZ2VkID0gRkFMU0U7CiB9CiAKIApAQCAtODE5LDEyICs4MjEsNiBAQAogfQogCiAKLXZvaWQgb25fc2F2ZV9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCW9uX3NhdmUxX2FjdGl2YXRlKE5VTEwsIHVzZXJfZGF0YSk7Ci19Ci0KLQogdm9pZCBvbl9zaW5nbGVfY2xpY2tlZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkKIHsKIAl2aWV3X21vZGUgPSBTSU5HTEVfVklFVzsKQEAgLTg5OSw3ICs4OTUsNiBAQAogCiAJc3ltX3NldF9zdHJpbmdfdmFsdWUoc3ltLCBuZXdfZGVmKTsKIAotCWNvbmZpZ19jaGFuZ2VkID0gVFJVRTsKIAl1cGRhdGVfdHJlZSgmcm9vdG1lbnUsIE5VTEwpOwogCiAJZ3RrX3RyZWVfcGF0aF9mcmVlKHBhdGgpOwpAQCAtOTMwLDcgKzkyNSw2IEBACiAJCWlmICghc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG5ld3ZhbCkpCiAJCQluZXd2YWwgPSB5ZXM7CiAJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBuZXd2YWwpOwotCQljb25maWdfY2hhbmdlZCA9IFRSVUU7CiAJCWlmICh2aWV3X21vZGUgPT0gRlVMTF9WSUVXKQogCQkJdXBkYXRlX3RyZWUoJnJvb3RtZW51LCBOVUxMKTsKIAkJZWxzZSBpZiAodmlld19tb2RlID09IFNQTElUX1ZJRVcpIHsKQEAgLTE2MzMsMyArMTYyNywxMCBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2b2lkKQoreworCWJvb2wgY2hhbmdlZCA9IGNvbmZfZ2V0X2NoYW5nZWQoKTsKKwlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoc2F2ZV9idG4sIGNoYW5nZWQpOworCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShzYXZlX21lbnVfaXRlbSwgY2hhbmdlZCk7Cit9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvZ2NvbmYuZ2xhZGUgYi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuZ2xhZGUKaW5kZXggZjg3NDRlZC4uODAzMjMzZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2djb25mLmdsYWRlCisrKyBiL3NjcmlwdHMva2NvbmZpZy9nY29uZi5nbGFkZQpAQCAtNzAsNyArNzAsNyBAQAogCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUgdGhlIGNvbmZpZyBpbiAuY29uZmlnPC9wcm9wZXJ0eT4KIAkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X1NhdmU8L3Byb3BlcnR5PgogCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NhdmUxX2FjdGl2YXRlIi8+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NhdmVfYWN0aXZhdGUiLz4KIAkJICAgICAgPGFjY2VsZXJhdG9yIGtleT0iUyIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2YXRlIi8+CiAKIAkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+CkBAIC0zODAsNyArMzgwLDcgQEAKIAkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KIAkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+CiAJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5PgotCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fc2F2ZV9jbGlja2VkIi8+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9zYXZlX2FjdGl2YXRlIi8+CiAJCTwvd2lkZ2V0PgogCQk8cGFja2luZz4KIAkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbGtjLmggYi9zY3JpcHRzL2tjb25maWcvbGtjLmgKaW5kZXggMjYyODAyMy4uOWIyNzA2YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2xrYy5oCisrKyBiL3NjcmlwdHMva2NvbmZpZy9sa2MuaApAQCAtNjUsNiArNjUsOCBAQAogCiAvKiBjb25mZGF0YS5jICovCiBjaGFyICpjb25mX2dldF9kZWZhdWx0X2NvbmZuYW1lKHZvaWQpOwordm9pZCBzeW1fc2V0X2NoYW5nZV9jb3VudChpbnQgY291bnQpOwordm9pZCBzeW1fYWRkX2NoYW5nZV9jb3VudChpbnQgY291bnQpOwogCiAvKiBrY29uZmlnX2xvYWQuYyAqLwogdm9pZCBrY29uZmlnX2xvYWQodm9pZCk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbGtjX3Byb3RvLmggYi9zY3JpcHRzL2tjb25maWcvbGtjX3Byb3RvLmgKaW5kZXggYTI2Mzc0Ni4uMTUwMzA3NyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2xrY19wcm90by5oCisrKyBiL3NjcmlwdHMva2NvbmZpZy9sa2NfcHJvdG8uaApAQCAtNSw2ICs1LDggQEAKIFAoY29uZl9yZWFkX3NpbXBsZSxpbnQsKGNvbnN0IGNoYXIgKm5hbWUsIGludCkpOwogUChjb25mX3dyaXRlLGludCwoY29uc3QgY2hhciAqbmFtZSkpOwogUChjb25mX3dyaXRlX2F1dG9jb25mLGludCwodm9pZCkpOworUChjb25mX2dldF9jaGFuZ2VkLGJvb2wsKHZvaWQpKTsKK1AoY29uZl9zZXRfY2hhbmdlZF9jYWxsYmFjaywgdm9pZCwodm9pZCAoKmZuKSh2b2lkKSkpOwogCiAvKiBtZW51LmMgKi8KIFAocm9vdG1lbnUsc3RydWN0IG1lbnUsKTsKQEAgLTE2LDcgKzE4LDYgQEAKIAogLyogc3ltYm9sLmMgKi8KIFAoc3ltYm9sX2hhc2gsc3RydWN0IHN5bWJvbCAqLFtTWU1CT0xfSEFTSFNJWkVdKTsKLVAoc3ltX2NoYW5nZV9jb3VudCxpbnQsKTsKIAogUChzeW1fbG9va3VwLHN0cnVjdCBzeW1ib2wgKiwoY29uc3QgY2hhciAqbmFtZSwgaW50IGlzY29uc3QpKTsKIFAoc3ltX2ZpbmQsc3RydWN0IHN5bWJvbCAqLChjb25zdCBjaGFyICpuYW1lKSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbWNvbmYuYyBiL3NjcmlwdHMva2NvbmZpZy9tY29uZi5jCmluZGV4IDA4YTRjN2EuLjNmOWExMzIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9tY29uZi5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9tY29uZi5jCkBAIC04OTAsMTQgKzg5MCwxOSBAQAogCWRvIHsKIAkJY29uZigmcm9vdG1lbnUpOwogCQlkaWFsb2dfY2xlYXIoKTsKLQkJcmVzID0gZGlhbG9nX3llc25vKE5VTEwsCi0JCQkJICAgXygiRG8geW91IHdpc2ggdG8gc2F2ZSB5b3VyICIKLQkJCQkgICAgICJuZXcga2VybmVsIGNvbmZpZ3VyYXRpb24/XG4iCi0JCQkJICAgICAiPEVTQz48RVNDPiB0byBjb250aW51ZS4iKSwKLQkJCQkgICA2LCA2MCk7CisJCWlmIChjb25mX2dldF9jaGFuZ2VkKCkpCisJCQlyZXMgPSBkaWFsb2dfeWVzbm8oTlVMTCwKKwkJCQkJICAgXygiRG8geW91IHdpc2ggdG8gc2F2ZSB5b3VyICIKKwkJCQkJICAgICAibmV3IGtlcm5lbCBjb25maWd1cmF0aW9uP1xuIgorCQkJCQkgICAgICI8RVNDPjxFU0M+IHRvIGNvbnRpbnVlLiIpLAorCQkJCQkgICA2LCA2MCk7CisJCWVsc2UKKwkJCXJlcyA9IC0xOwogCX0gd2hpbGUgKHJlcyA9PSBLRVlfRVNDKTsKIAllbmRfZGlhbG9nKCk7Ci0JaWYgKHJlcyA9PSAwKSB7CisKKwlzd2l0Y2ggKHJlcykgeworCWNhc2UgMDoKIAkJaWYgKGNvbmZfd3JpdGUoTlVMTCkpIHsKIAkJCWZwcmludGYoc3RkZXJyLCBfKCJcblxuIgogCQkJCSJFcnJvciBkdXJpbmcgd3JpdGluZyBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uXG4iCkBAIC05MDUsMTEgKzkxMCwxMyBAQAogCQkJCSJcblxuIikpOwogCQkJcmV0dXJuIDE7CiAJCX0KKwljYXNlIC0xOgogCQlwcmludGYoXygiXG5cbiIKIAkJCSIqKiogRW5kIG9mIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uLlxuIgogCQkJIioqKiBFeGVjdXRlICdtYWtlJyB0byBidWlsZCB0aGUga2VybmVsIG9yIHRyeSAnbWFrZSBoZWxwJy4iCiAJCQkiXG5cbiIpKTsKLQl9IGVsc2UgeworCQlicmVhazsKKwlkZWZhdWx0OgogCQlmcHJpbnRmKHN0ZGVyciwgXygiXG5cbiIKIAkJCSJZb3VyIGtlcm5lbCBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBOT1Qgc2F2ZWQuIgogCQkJIlxuXG4iKSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvcWNvbmYuY2MgYi9zY3JpcHRzL2tjb25maWcvcWNvbmYuY2MKaW5kZXggZjU2MjhjNS4uYzBhZTBhNyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3Fjb25mLmNjCisrKyBiL3NjcmlwdHMva2NvbmZpZy9xY29uZi5jYwpAQCAtMzgsNiArMzgsOCBAQAogc3RhdGljIFFBcHBsaWNhdGlvbiAqY29uZmlnQXBwOwogc3RhdGljIENvbmZpZ1NldHRpbmdzICpjb25maWdTZXR0aW5nczsKIAorUUFjdGlvbiAqQ29uZmlnTWFpbldpbmRvdzo6c2F2ZUFjdGlvbjsKKwogc3RhdGljIGlubGluZSBRU3RyaW5nIHFnZXR0ZXh0KGNvbnN0IGNoYXIqIHN0cikKIHsKIAlyZXR1cm4gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChnZXR0ZXh0KHN0cikpOwpAQCAtOTE1LDcgKzkxNyw3IEBACiB9CiAKIENvbmZpZ0luZm9WaWV3OjpDb25maWdJbmZvVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCi0JOiBQYXJlbnQocGFyZW50LCBuYW1lKSwgbWVudSgwKQorCTogUGFyZW50KHBhcmVudCwgbmFtZSksIG1lbnUoMCksIHN5bSgwKQogewogCWlmIChuYW1lKSB7CiAJCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG5hbWUpOwpAQCAtOTUxLDYgKzk1Myw3IEBACiAJaWYgKG1lbnUgPT0gbSkKIAkJcmV0dXJuOwogCW1lbnUgPSBtOworCXN5bSA9IE5VTEw7CiAJaWYgKCFtZW51KQogCQljbGVhcigpOwogCWVsc2UKQEAgLTEzMDYsOCArMTMwOSwxMSBAQAogCSAgY29ubmVjdChxdWl0QWN0aW9uLCBTSUdOQUwoYWN0aXZhdGVkKCkpLCBTTE9UKGNsb3NlKCkpKTsKIAlRQWN0aW9uICpsb2FkQWN0aW9uID0gbmV3IFFBY3Rpb24oIkxvYWQiLCBRUGl4bWFwKHhwbV9sb2FkKSwgIiZMb2FkIiwgQ1RSTCtLZXlfTCwgdGhpcyk7CiAJICBjb25uZWN0KGxvYWRBY3Rpb24sIFNJR05BTChhY3RpdmF0ZWQoKSksIFNMT1QobG9hZENvbmZpZygpKSk7Ci0JUUFjdGlvbiAqc2F2ZUFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTYXZlIiwgUVBpeG1hcCh4cG1fc2F2ZSksICImU2F2ZSIsIENUUkwrS2V5X1MsIHRoaXMpOworCXNhdmVBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2F2ZSIsIFFQaXhtYXAoeHBtX3NhdmUpLCAiJlNhdmUiLCBDVFJMK0tleV9TLCB0aGlzKTsKIAkgIGNvbm5lY3Qoc2F2ZUFjdGlvbiwgU0lHTkFMKGFjdGl2YXRlZCgpKSwgU0xPVChzYXZlQ29uZmlnKCkpKTsKKwljb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKGNvbmZfY2hhbmdlZCk7CisJLy8gU2V0IHNhdmVBY3Rpb24ncyBpbml0aWFsIHN0YXRlCisJY29uZl9jaGFuZ2VkKCk7CiAJUUFjdGlvbiAqc2F2ZUFzQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNhdmUgQXMuLi4iLCAiU2F2ZSAmQXMuLi4iLCAwLCB0aGlzKTsKIAkgIGNvbm5lY3Qoc2F2ZUFzQWN0aW9uLCBTSUdOQUwoYWN0aXZhdGVkKCkpLCBTTE9UKHNhdmVDb25maWdBcygpKSk7CiAJUUFjdGlvbiAqc2VhcmNoQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNlYXJjaCIsICImU2VhcmNoIiwgQ1RSTCtLZXlfRiwgdGhpcyk7CkBAIC0xNTg1LDcgKzE1OTEsNyBAQAogICovCiB2b2lkIENvbmZpZ01haW5XaW5kb3c6OmNsb3NlRXZlbnQoUUNsb3NlRXZlbnQqIGUpCiB7Ci0JaWYgKCFzeW1fY2hhbmdlX2NvdW50KSB7CisJaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkpIHsKIAkJZS0+YWNjZXB0KCk7CiAJCXJldHVybjsKIAl9CkBAIC0xNjU4LDYgKzE2NjQsMTIgQEAKIAljb25maWdTZXR0aW5ncy0+d3JpdGVTaXplcygiL3NwbGl0MiIsIHNwbGl0Mi0+c2l6ZXMoKSk7CiB9CiAKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6Y29uZl9jaGFuZ2VkKHZvaWQpCit7CisJaWYgKHNhdmVBY3Rpb24pCisJCXNhdmVBY3Rpb24tPnNldEVuYWJsZWQoY29uZl9nZXRfY2hhbmdlZCgpKTsKK30KKwogdm9pZCBmaXh1cF9yb290bWVudShzdHJ1Y3QgbWVudSAqbWVudSkKIHsKIAlzdHJ1Y3QgbWVudSAqY2hpbGQ7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvcWNvbmYuaCBiL3NjcmlwdHMva2NvbmZpZy9xY29uZi5oCmluZGV4IDZhOWUzYjEuLjZmYzFjNWYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9xY29uZi5oCisrKyBiL3NjcmlwdHMva2NvbmZpZy9xY29uZi5oCkBAIC0yOTcsNiArMjk3LDkgQEAKIAogY2xhc3MgQ29uZmlnTWFpbldpbmRvdyA6IHB1YmxpYyBRTWFpbldpbmRvdyB7CiAJUV9PQkpFQ1QKKworCXN0YXRpYyBRQWN0aW9uICpzYXZlQWN0aW9uOworCXN0YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2b2lkKTsKIHB1YmxpYzoKIAlDb25maWdNYWluV2luZG93KHZvaWQpOwogcHVibGljIHNsb3RzOgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3N5bWJvbC5jIGIvc2NyaXB0cy9rY29uZmlnL3N5bWJvbC5jCmluZGV4IGVlMjI1Y2UuLjhmMDZjNDcgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9zeW1ib2wuYworKysgYi9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMKQEAgLTMwLDcgKzMwLDYgQEAKIAkuZmxhZ3MgPSBTWU1CT0xfVkFMSUQsCiB9OwogCi1pbnQgc3ltX2NoYW5nZV9jb3VudDsKIHN0cnVjdCBzeW1ib2wgKnN5bV9kZWZjb25maWdfbGlzdDsKIHN0cnVjdCBzeW1ib2wgKm1vZHVsZXNfc3ltOwogdHJpc3RhdGUgbW9kdWxlc192YWw7CkBAIC0zNzksNyArMzc4LDcgQEAKIAogCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pCiAJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9WQUxJRDsKLQlzeW1fY2hhbmdlX2NvdW50Kys7CisJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7CiAJaWYgKG1vZHVsZXNfc3ltKQogCQlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCmluZGV4IDJmYjBhNGYuLmQ3NzdmZTggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCkBAIC0yMTM1LDcgKzIxMzUsNyBAQAogCQlzeW1fY2hlY2tfZGVwcyhzeW0pOwogICAgICAgICB9CiAKLQlzeW1fY2hhbmdlX2NvdW50ID0gMTsKKwlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKIH0KIAogY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi55IGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLnkKaW5kZXggYWI0NGZlYi4uMDRhNTg2NCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLnkKKysrIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLnkKQEAgLTUwNCw3ICs1MDQsNyBAQAogCQlzeW1fY2hlY2tfZGVwcyhzeW0pOwogICAgICAgICB9CiAKLQlzeW1fY2hhbmdlX2NvdW50ID0gMTsKKwlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKIH0KIAogY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2VybmVsLWRvYyBiL3NjcmlwdHMva2VybmVsLWRvYwppbmRleCBkZjNiMjcyLi5mNTBhNzBmIDEwMDc1NQotLS0gYS9zY3JpcHRzL2tlcm5lbC1kb2MKKysrIGIvc2NyaXB0cy9rZXJuZWwtZG9jCkBAIC0xNDY5LDYgKzE0NjksNyBAQAogCW15ICRwYXJhbSA9IHNoaWZ0OwogCW15ICR0eXBlID0gc2hpZnQ7CiAJbXkgJGZpbGUgPSBzaGlmdDsKKwlteSAkYW5vbiA9IDA7CiAKIAlteSAkcGFyYW1fbmFtZSA9ICRwYXJhbTsKIAkkcGFyYW1fbmFtZSA9fiBzL1xbLiovLzsKQEAgLTE0ODQsOSArMTQ4NSwyMCBAQAogCSAgICAkcGFyYW09InZvaWQiOwogCSAgICAkcGFyYW1ldGVyZGVzY3N7dm9pZH0gPSAibm8gYXJndW1lbnRzIjsKIAl9CisJZWxzaWYgKCR0eXBlIGVxICIiICYmICgkcGFyYW0gZXEgInN0cnVjdCIgb3IgJHBhcmFtIGVxICJ1bmlvbiIpKQorCSMgaGFuZGxlIHVubmFtZWQgKGFub255bW91cykgdW5pb24gb3Igc3RydWN0OgorCXsKKwkJJHR5cGUgPSAkcGFyYW07CisJCSRwYXJhbSA9ICJ7dW5uYW1lZF8iIC4gJHBhcmFtLiAifSI7CisJCSRwYXJhbWV0ZXJkZXNjc3skcGFyYW19ID0gImFub255bW91c1xuIjsKKwkJJGFub24gPSAxOworCX0KKwogCSMgd2FybiBpZiBwYXJhbWV0ZXIgaGFzIG5vIGRlc2NyaXB0aW9uCi0JIyAoYnV0IGlnbm9yZSBvbmVzIHN0YXJ0aW5nIHdpdGggIyBhcyB0aGVzZSBhcmUgbm8gcGFyYW1ldGVycwotCSMgYnV0IGlubGluZSBwcmVwcm9jZXNzb3Igc3RhdGVtZW50cworCSMgKGJ1dCBpZ25vcmUgb25lcyBzdGFydGluZyB3aXRoICMgYXMgdGhlc2UgYXJlIG5vdCBwYXJhbWV0ZXJzCisJIyBidXQgaW5saW5lIHByZXByb2Nlc3NvciBzdGF0ZW1lbnRzKTsKKwkjIGFsc28gaWdub3JlIHVubmFtZWQgc3RydWN0cy91bmlvbnM7CisJaWYgKCEkYW5vbikgewogCWlmICghZGVmaW5lZCAkcGFyYW1ldGVyZGVzY3N7JHBhcmFtX25hbWV9ICYmICRwYXJhbV9uYW1lICF+IC9eIy8pIHsKIAogCSAgICAkcGFyYW1ldGVyZGVzY3N7JHBhcmFtX25hbWV9ID0gJHVuZGVzY3JpYmVkOwpAQCAtMTUwMCw2ICsxNTEyLDcgQEAKIAkgICAgICAgICAgICAgICAgICIgTm8gZGVzY3JpcHRpb24gZm91bmQgZm9yIHBhcmFtZXRlciAnJHBhcmFtJ1xuIjsKIAkgICAgKyskd2FybmluZ3M7CiAgICAgICAgIH0KKyAgICAgICAgfQogCiAJcHVzaCBAcGFyYW1ldGVybGlzdCwgJHBhcmFtOwogCSRwYXJhbWV0ZXJ0eXBlc3skcGFyYW19ID0gJHR5cGU7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggZTI2MzgxZS4uNDdiZWY2MiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtNTgyLDkgKzU4MiwxOSBAQAogICogICB0b3NlYyAgID0gLmluaXQudGV4dCB8IC5leGl0LnRleHQgfCAuaW5pdC5kYXRhCiAgKiAgIGZyb21zZWMgPSAuZGF0YQogICogICBhdHN5bSA9ICpkcml2ZXIsICpfdGVtcGxhdGUsICpfc2h0LCAqX29wcywgKl9wcm9iZSwgKnByb2JlX29uZQorICoKKyAqIFBhdHRlcm4gMzoKKyAqICAgU29tZSBzeW1ib2xzIGJlbG9uZyB0byBpbml0IHNlY3Rpb24gYnV0IHN0aWxsIGl0IGlzIG9rIHRvIHJlZmVyZW5jZQorICogICB0aGVzZSBmcm9tIG5vbi1pbml0IHNlY3Rpb25zIGFzIHRoZXNlIHN5bWJvbHMgZG9uJ3QgaGF2ZSBhbnkgbWVtb3J5CisgKiAgIGFsbG9jYXRlZCBmb3IgdGhlbSBhbmQgc3ltYm9sIGFkZHJlc3MgYW5kIHZhbHVlIGFyZSBzYW1lLiBTbyBldmVuCisgKiAgIGlmIGluaXQgc2VjdGlvbiBpcyBmcmVlZCwgaXRzIG9rIHRvIHJlZmVyZW5jZSB0aG9zZSBzeW1ib2xzLgorICogICBGb3IgZXguIHN5bWJvbHMgbWFya2luZyB0aGUgaW5pdCBzZWN0aW9uIGJvdW5kYXJpZXMuCisgKiAgIFRoaXMgcGF0dGVybiBpcyBpZGVudGlmaWVkIGJ5CisgKiAgIHJlZnN5bW5hbWUgPSBfX2luaXRfYmVnaW4sIF9zaW5pdHRleHQsIF9laW5pdHRleHQKICAqKi8KIHN0YXRpYyBpbnQgc2VjcmVmX3doaXRlbGlzdChjb25zdCBjaGFyICptb2RuYW1lLCBjb25zdCBjaGFyICp0b3NlYywKLQkJCSAgICBjb25zdCBjaGFyICpmcm9tc2VjLCBjb25zdCBjaGFyICphdHN5bSkKKwkJCSAgICBjb25zdCBjaGFyICpmcm9tc2VjLCBjb25zdCBjaGFyICphdHN5bSwKKwkJCSAgICBjb25zdCBjaGFyICpyZWZzeW1uYW1lKQogewogCWludCBmMSA9IDEsIGYyID0gMTsKIAljb25zdCBjaGFyICoqczsKQEAgLTU5NSw2ICs2MDUsMTQgQEAKIAkJIl9vcHMiLAogCQkiX3Byb2JlIiwKIAkJIl9wcm9iZV9vbmUiLAorCQkiX2NvbnNvbGUiLAorCQlOVUxMCisJfTsKKworCWNvbnN0IGNoYXIgKnBhdDNyZWZzeW1bXSA9IHsKKwkJIl9faW5pdF9iZWdpbiIsCisJCSJfc2luaXR0ZXh0IiwKKwkJIl9laW5pdHRleHQiLAogCQlOVUxMCiAJfTsKIApAQCAtNjI4LDYgKzY0NiwxMSBAQAogCQlpZiAoKHN0cmNtcChmcm9tc2VjLCAiLnBjaV9maXh1cCIpID09IDApICYmCiAJCSAgICAoc3RyY21wKHRvc2VjLCAiLmluaXQudGV4dCIpID09IDApKQogCQlyZXR1cm4gMTsKKworCQkvKiBDaGVjayBmb3IgcGF0dGVybiAzICovCisJCWZvciAocyA9IHBhdDNyZWZzeW07ICpzOyBzKyspCisJCQlpZiAoc3RyY21wKHJlZnN5bW5hbWUsICpzKSA9PSAwKQorCQkJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTczNyw3ICs3NjAsNyBAQAogCS8qIGNoZWNrIHdoaXRlbGlzdCAtIHdlIG1heSBpZ25vcmUgaXQgKi8KIAlpZiAoYmVmb3JlICYmCiAJICAgIHNlY3JlZl93aGl0ZWxpc3QobW9kbmFtZSwgc2VjbmFtZSwgZnJvbXNlYywKLQkJCSAgICAgZWxmLT5zdHJ0YWIgKyBiZWZvcmUtPnN0X25hbWUpKQorCQkJICAgICBlbGYtPnN0cnRhYiArIGJlZm9yZS0+c3RfbmFtZSwgcmVmc3ltbmFtZSkpCiAJCXJldHVybjsKIAogCWlmIChiZWZvcmUgJiYgYWZ0ZXIpIHsKQEAgLTk5OCw2ICsxMDIxLDcgQEAKIAkJIl9fYnVnX3RhYmxlIiwgLyogdXNlZCBieSBwb3dlcnBjIGZvciBCVUcoKSAqLwogCQkiLmV4aXRjYWxsLmV4aXQiLAogCQkiLmVoX2ZyYW1lIiwKKwkJIi5wYXJhaW5zdHJ1Y3Rpb25zIiwKIAkJIi5zdGFiIiwKIAkJIl9fZXhfdGFibGUiLAogCQkiLmZpeHVwIiwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA0NGU5Y2Q0Li42NWZiNWU4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0xMTIwLDggKzExMjAsOCBAQAogewogCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IHRzay0+c2VjdXJpdHk7CiAJc3RydWN0IGZpbGVfc2VjdXJpdHlfc3RydWN0ICpmc2VjID0gZmlsZS0+Zl9zZWN1cml0eTsKLQlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IGZpbGUtPmZfdmZzbW50OwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfZGVudHJ5OworCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gZmlsZS0+Zl9wYXRoLm1udDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwogCWludCByYzsKQEAgLTE1ODEsNyArMTU4MSw3IEBACiBzdGF0aWMgaW50IHNlbGludXhfYnBybV9zZXRfc2VjdXJpdHkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWM7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGJwcm0tPmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBicHJtLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7CiAJc3RydWN0IGJwcm1fc2VjdXJpdHlfc3RydWN0ICpic2VjOwogCXUzMiBuZXdzaWQ7CkBAIC0xNjIxLDEwICsxNjIxLDEwIEBACiAJfQogCiAJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKLQlhZC51LmZzLm1udCA9IGJwcm0tPmZpbGUtPmZfdmZzbW50OwotCWFkLnUuZnMuZGVudHJ5ID0gYnBybS0+ZmlsZS0+Zl9kZW50cnk7CisJYWQudS5mcy5tbnQgPSBicHJtLT5maWxlLT5mX3BhdGgubW50OworCWFkLnUuZnMuZGVudHJ5ID0gYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAotCWlmIChicHJtLT5maWxlLT5mX3Zmc21udC0+bW50X2ZsYWdzICYgTU5UX05PU1VJRCkKKwlpZiAoYnBybS0+ZmlsZS0+Zl9wYXRoLm1udC0+bW50X2ZsYWdzICYgTU5UX05PU1VJRCkKIAkJbmV3c2lkID0gdHNlYy0+c2lkOwogCiAgICAgICAgIGlmICh0c2VjLT5zaWQgPT0gbmV3c2lkKSB7CkBAIC0xNjk1LDkgKzE2OTUsMTAgQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXN0cnVjdCBmZHRhYmxlICpmZHQ7CiAJbG9uZyBqID0gLTE7CisJaW50IGRyb3BfdHR5ID0gMDsKIAogCW11dGV4X2xvY2soJnR0eV9tdXRleCk7Ci0JdHR5ID0gY3VycmVudC0+c2lnbmFsLT50dHk7CisJdHR5ID0gZ2V0X2N1cnJlbnRfdHR5KCk7CiAJaWYgKHR0eSkgewogCQlmaWxlX2xpc3RfbG9jaygpOwogCQlmaWxlID0gbGlzdF9lbnRyeSh0dHktPnR0eV9maWxlcy5uZXh0LCB0eXBlb2YoKmZpbGUpLCBmX3UuZnVfbGlzdCk7CkBAIC0xNzA3LDE1ICsxNzA4LDE3IEBACiAJCQkgICB0aGFuIHVzaW5nIGZpbGVfaGFzX3Blcm0sIGFzIHRoaXMgcGFydGljdWxhciBvcGVuCiAJCQkgICBmaWxlIG1heSBiZWxvbmcgdG8gYW5vdGhlciBwcm9jZXNzIGFuZCB3ZSBhcmUgb25seQogCQkJICAgaW50ZXJlc3RlZCBpbiB0aGUgaW5vZGUtYmFzZWQgY2hlY2sgaGVyZS4gKi8KLQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwkJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCQkJaWYgKGlub2RlX2hhc19wZXJtKGN1cnJlbnQsIGlub2RlLAogCQkJCQkgICBGSUxFX19SRUFEIHwgRklMRV9fV1JJVEUsIE5VTEwpKSB7Ci0JCQkJLyogUmVzZXQgY29udHJvbGxpbmcgdHR5LiAqLwotCQkJCWN1cnJlbnQtPnNpZ25hbC0+dHR5ID0gTlVMTDsKLQkJCQljdXJyZW50LT5zaWduYWwtPnR0eV9vbGRfcGdycCA9IDA7CisJCQkJZHJvcF90dHkgPSAxOwogCQkJfQogCQl9CiAJCWZpbGVfbGlzdF91bmxvY2soKTsKKworCQkvKiBSZXNldCBjb250cm9sbGluZyB0dHkuICovCisJCWlmIChkcm9wX3R0eSkKKwkJCXByb2Nfc2V0X3R0eShjdXJyZW50LCBOVUxMKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCkBAIC0xNzMxLDcgKzE3MzQsNyBAQAogCQlqKys7CiAJCWkgPSBqICogX19ORkRCSVRTOwogCQlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKLQkJaWYgKGkgPj0gZmR0LT5tYXhfZmRzIHx8IGkgPj0gZmR0LT5tYXhfZmRzZXQpCisJCWlmIChpID49IGZkdC0+bWF4X2ZkcykKIAkJCWJyZWFrOwogCQlzZXQgPSBmZHQtPm9wZW5fZmRzLT5mZHNfYml0c1tqXTsKIAkJaWYgKCFzZXQpCkBAIC0yNDE3LDcgKzI0MjAsNyBAQAogc3RhdGljIGludCBzZWxpbnV4X2ZpbGVfcGVybWlzc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1hc2spCiB7CiAJaW50IHJjOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCWlmICghbWFzaykgewogCQkvKiBObyBwZXJtaXNzaW9uIHRvIGNoZWNrLiAgRXhpc3RlbmNlIHRlc3QuICovCkBAIC0yNTk0LDcgKzI1OTcsNyBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAkgICAgICAgIGNhc2UgRl9TRVRGTDoKLQkJCWlmICghZmlsZS0+Zl9kZW50cnkgfHwgIWZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSB7CisJCQlpZiAoIWZpbGUtPmZfcGF0aC5kZW50cnkgfHwgIWZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpIHsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjYyMCw3ICsyNjIzLDcgQEAKIAkJY2FzZSBGX1NFVExLNjQ6CiAJICAgICAgICBjYXNlIEZfU0VUTEtXNjQ6CiAjZW5kaWYKLQkJCWlmICghZmlsZS0+Zl9kZW50cnkgfHwgIWZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSB7CisJCQlpZiAoIWZpbGUtPmZfcGF0aC5kZW50cnkgfHwgIWZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpIHsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS94ZnJtLmgKaW5kZXggMTYxZWI1Ny4uMzE5MjllMyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUveGZybS5oCkBAIC0zNyw2ICszNywxMSBAQAogaW50IHNlbGludXhfeGZybV9wb3N0cm91dGVfbGFzdCh1MzIgaXNlY19zaWQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkLCB1OCBwcm90byk7CiBpbnQgc2VsaW51eF94ZnJtX2RlY29kZV9zZXNzaW9uKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqc2lkLCBpbnQgY2thbGwpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF94ZnJtX25vdGlmeV9wb2xpY3lsb2FkKHZvaWQpCit7CisJYXRvbWljX2luYygmZmxvd19jYWNoZV9nZW5pZCk7Cit9CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF94ZnJtX3NvY2tfcmN2X3NrYih1MzIgaXNlY19zaWQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkKQpAQCAtNTUsNiArNjAsMTAgQEAKIAkqc2lkID0gU0VDU0lEX05VTEw7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X3hmcm1fbm90aWZ5X3BvbGljeWxvYWQodm9pZCkKK3sKK30KICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9za2JfeGZybV9zaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpzaWQpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwppbmRleCBjZDI0NDQxLi5jOGJmNmUxIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCiBzdGF0aWMgc3NpemVfdCBzZWxpbnV4X3RyYW5zYWN0aW9uX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpCiB7Ci0JaW5vX3QgaW5vID0gIGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubzsKKwlpbm9fdCBpbm8gPSAgZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm87CiAJY2hhciAqZGF0YTsKIAlzc2l6ZV90IHJ2OwogCkBAIC04MDUsNyArODA1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaW5vZGUgPSBmaWxlcC0+Zl9kZW50cnktPmRfaW5vZGU7CisJaW5vZGUgPSBmaWxlcC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAljdXJfZW5mb3JjaW5nID0gc2VjdXJpdHlfZ2V0X2Jvb2xfdmFsdWUoaW5vZGUtPmlfaW5vIC0gQk9PTF9JTk9fT0ZGU0VUKTsKIAlpZiAoY3VyX2VuZm9yY2luZyA8IDApIHsKIAkJcmV0ID0gY3VyX2VuZm9yY2luZzsKQEAgLTg2NCw3ICs4NjQsNyBAQAogCWlmIChuZXdfdmFsdWUpCiAJCW5ld192YWx1ZSA9IDE7CiAKLQlpbm9kZSA9IGZpbGVwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbGVwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWJvb2xfcGVuZGluZ192YWx1ZXNbaW5vZGUtPmlfaW5vIC0gQk9PTF9JTk9fT0ZGU0VUXSA9IG5ld192YWx1ZTsKIAlsZW5ndGggPSBjb3VudDsKIApAQCAtOTY1LDcgKzk2NSw3IEBACiAJZmlsZV9saXN0X2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoKHAsICZzYi0+c19maWxlcykgewogCQlzdHJ1Y3QgZmlsZSAqIGZpbHAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBmaWxlLCBmX3UuZnVfbGlzdCk7Ci0JCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxwLT5mX2RlbnRyeTsKKwkJc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAKIAkJaWYgKGRlbnRyeS0+ZF9wYXJlbnQgIT0gZGUpIHsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9jb250ZXh0LmggYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbnRleHQuaAppbmRleCAwNTYyYmFjLi4yZWVlMGRhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbnRleHQuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbnRleHQuaApAQCAtNTUsNiArNTUsMjkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qCisgKiBTZXRzIGJvdGggbGV2ZWxzIGluIHRoZSBNTFMgcmFuZ2Ugb2YgJ2RzdCcgdG8gdGhlIGxvdyBsZXZlbCBvZiAnc3JjJy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbWxzX2NvbnRleHRfY3B5X2xvdyhzdHJ1Y3QgY29udGV4dCAqZHN0LCBzdHJ1Y3QgY29udGV4dCAqc3JjKQoreworCWludCByYzsKKworCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlkc3QtPnJhbmdlLmxldmVsWzBdLnNlbnMgPSBzcmMtPnJhbmdlLmxldmVsWzBdLnNlbnM7CisJcmMgPSBlYml0bWFwX2NweSgmZHN0LT5yYW5nZS5sZXZlbFswXS5jYXQsICZzcmMtPnJhbmdlLmxldmVsWzBdLmNhdCk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKworCWRzdC0+cmFuZ2UubGV2ZWxbMV0uc2VucyA9IHNyYy0+cmFuZ2UubGV2ZWxbMF0uc2VuczsKKwlyYyA9IGViaXRtYXBfY3B5KCZkc3QtPnJhbmdlLmxldmVsWzFdLmNhdCwgJnNyYy0+cmFuZ2UubGV2ZWxbMF0uY2F0KTsKKwlpZiAocmMpCisJCWViaXRtYXBfZGVzdHJveSgmZHN0LT5yYW5nZS5sZXZlbFswXS5jYXQpOworb3V0OgorCXJldHVybiByYzsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbWxzX2NvbnRleHRfY21wKHN0cnVjdCBjb250ZXh0ICpjMSwgc3RydWN0IGNvbnRleHQgKmMyKQogewogCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCmluZGV4IGI0ZjY4MmQuLjRhOGJhYjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCWlmICghZGVmY29uKQogCQkJZ290byBvdXQ7CiAKLQkJcmMgPSBtbHNfY29weV9jb250ZXh0KGNvbnRleHQsIGRlZmNvbik7CisJCXJjID0gbWxzX2NvbnRleHRfY3B5KGNvbnRleHQsIGRlZmNvbik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNDAxLDI2ICs0MDEsNiBAQAogfQogCiAvKgotICogQ29waWVzIHRoZSBlZmZlY3RpdmUgTUxTIHJhbmdlIGZyb20gYHNyYycgaW50byBgZHN0Jy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgbWxzX3Njb3B5X2NvbnRleHQoc3RydWN0IGNvbnRleHQgKmRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZXh0ICpzcmMpCi17Ci0JaW50IGwsIHJjID0gMDsKLQotCS8qIENvcHkgdGhlIE1MUyByYW5nZSBmcm9tIHRoZSBzb3VyY2UgY29udGV4dCAqLwotCWZvciAobCA9IDA7IGwgPCAyOyBsKyspIHsKLQkJZHN0LT5yYW5nZS5sZXZlbFtsXS5zZW5zID0gc3JjLT5yYW5nZS5sZXZlbFswXS5zZW5zOwotCQlyYyA9IGViaXRtYXBfY3B5KCZkc3QtPnJhbmdlLmxldmVsW2xdLmNhdCwKLQkJCQkgJnNyYy0+cmFuZ2UubGV2ZWxbMF0uY2F0KTsKLQkJaWYgKHJjKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0vKgogICogQ29waWVzIHRoZSBNTFMgcmFuZ2UgYHJhbmdlJyBpbnRvIGBjb250ZXh0Jy4KICAqLwogc3RhdGljIGlubGluZSBpbnQgbWxzX3JhbmdlX3NldChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKQEAgLTU1MiwxOSArNTMyLDE5IEBACiAJY2FzZSBBVlRBQl9DSEFOR0U6CiAJCWlmICh0Y2xhc3MgPT0gU0VDQ0xBU1NfUFJPQ0VTUykKIAkJCS8qIFVzZSB0aGUgcHJvY2VzcyBNTFMgYXR0cmlidXRlcy4gKi8KLQkJCXJldHVybiBtbHNfY29weV9jb250ZXh0KG5ld2NvbnRleHQsIHNjb250ZXh0KTsKKwkJCXJldHVybiBtbHNfY29udGV4dF9jcHkobmV3Y29udGV4dCwgc2NvbnRleHQpOwogCQllbHNlCiAJCQkvKiBVc2UgdGhlIHByb2Nlc3MgZWZmZWN0aXZlIE1MUyBhdHRyaWJ1dGVzLiAqLwotCQkJcmV0dXJuIG1sc19zY29weV9jb250ZXh0KG5ld2NvbnRleHQsIHNjb250ZXh0KTsKKwkJCXJldHVybiBtbHNfY29udGV4dF9jcHlfbG93KG5ld2NvbnRleHQsIHNjb250ZXh0KTsKIAljYXNlIEFWVEFCX01FTUJFUjoKIAkJLyogT25seSBwb2x5aW5zdGFudGlhdGUgdGhlIE1MUyBhdHRyaWJ1dGVzIGlmCiAJCSAgIHRoZSB0eXBlIGlzIGJlaW5nIHBvbHlpbnN0YW50aWF0ZWQgKi8KIAkJaWYgKG5ld2NvbnRleHQtPnR5cGUgIT0gdGNvbnRleHQtPnR5cGUpIHsKIAkJCS8qIFVzZSB0aGUgcHJvY2VzcyBlZmZlY3RpdmUgTUxTIGF0dHJpYnV0ZXMuICovCi0JCQlyZXR1cm4gbWxzX3Njb3B5X2NvbnRleHQobmV3Y29udGV4dCwgc2NvbnRleHQpOworCQkJcmV0dXJuIG1sc19jb250ZXh0X2NweV9sb3cobmV3Y29udGV4dCwgc2NvbnRleHQpOwogCQl9IGVsc2UgewogCQkJLyogVXNlIHRoZSByZWxhdGVkIG9iamVjdCBNTFMgYXR0cmlidXRlcy4gKi8KLQkJCXJldHVybiBtbHNfY29weV9jb250ZXh0KG5ld2NvbnRleHQsIHRjb250ZXh0KTsKKwkJCXJldHVybiBtbHNfY29udGV4dF9jcHkobmV3Y29udGV4dCwgdGNvbnRleHQpOwogCQl9CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuaAppbmRleCA2NjFkNmZjLi4wOTZkMWI0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmgKQEAgLTI0LDI2ICsyNCw2IEBACiAjaW5jbHVkZSAiY29udGV4dC5oIgogI2luY2x1ZGUgInBvbGljeWRiLmgiCiAKLS8qCi0gKiBDb3BpZXMgdGhlIE1MUyByYW5nZSBmcm9tIGBzcmMnIGludG8gYGRzdCcuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IG1sc19jb3B5X2NvbnRleHQoc3RydWN0IGNvbnRleHQgKmRzdCwKLQkJCQkgICBzdHJ1Y3QgY29udGV4dCAqc3JjKQotewotCWludCBsLCByYyA9IDA7Ci0KLQkvKiBDb3B5IHRoZSBNTFMgcmFuZ2UgZnJvbSB0aGUgc291cmNlIGNvbnRleHQgKi8KLQlmb3IgKGwgPSAwOyBsIDwgMjsgbCsrKSB7Ci0JCWRzdC0+cmFuZ2UubGV2ZWxbbF0uc2VucyA9IHNyYy0+cmFuZ2UubGV2ZWxbbF0uc2VuczsKLQkJcmMgPSBlYml0bWFwX2NweSgmZHN0LT5yYW5nZS5sZXZlbFtsXS5jYXQsCi0JCQkJICZzcmMtPnJhbmdlLmxldmVsW2xdLmNhdCk7Ci0JCWlmIChyYykKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiByYzsKLX0KLQogaW50IG1sc19jb21wdXRlX2NvbnRleHRfbGVuKHN0cnVjdCBjb250ZXh0ICpjb250ZXh0KTsKIHZvaWQgbWxzX3NpZF90b19jb250ZXh0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LCBjaGFyICoqc2NvbnRleHQpOwogaW50IG1sc19jb250ZXh0X2lzdmFsaWQoc3RydWN0IHBvbGljeWRiICpwLCBzdHJ1Y3QgY29udGV4dCAqYyk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKaW5kZXggYmRiNzA3MC4uY2E5MTU0ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwpAQCAtMTI5OSw2ICsxMjk5LDcgQEAKIAkJYXZjX3NzX3Jlc2V0KHNlcW5vKTsKIAkJc2Vsbmxfbm90aWZ5X3BvbGljeWxvYWQoc2Vxbm8pOwogCQlzZWxpbnV4X25ldGxibF9jYWNoZV9pbnZhbGlkYXRlKCk7CisJCXNlbGludXhfeGZybV9ub3RpZnlfcG9saWN5bG9hZCgpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEzNTQsNiArMTM1NSw3IEBACiAJYXZjX3NzX3Jlc2V0KHNlcW5vKTsKIAlzZWxubF9ub3RpZnlfcG9saWN5bG9hZChzZXFubyk7CiAJc2VsaW51eF9uZXRsYmxfY2FjaGVfaW52YWxpZGF0ZSgpOworCXNlbGludXhfeGZybV9ub3RpZnlfcG9saWN5bG9hZCgpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTE4NTMsNiArMTg1NSw3IEBACiAJaWYgKCFyYykgewogCQlhdmNfc3NfcmVzZXQoc2Vxbm8pOwogCQlzZWxubF9ub3RpZnlfcG9saWN5bG9hZChzZXFubyk7CisJCXNlbGludXhfeGZybV9ub3RpZnlfcG9saWN5bG9hZCgpOwogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC0xOTE2LDExICsxOTE5LDEwIEBACiAJbmV3Y29uLnVzZXIgPSBjb250ZXh0MS0+dXNlcjsKIAluZXdjb24ucm9sZSA9IGNvbnRleHQxLT5yb2xlOwogCW5ld2Nvbi50eXBlID0gY29udGV4dDEtPnR5cGU7Ci0JcmMgPSBtbHNfY29weV9jb250ZXh0KCZuZXdjb24sIGNvbnRleHQyKTsKKwlyYyA9IG1sc19jb250ZXh0X2NweSgmbmV3Y29uLCBjb250ZXh0Mik7CiAJaWYgKHJjKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQogCS8qIENoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgbmV3IGNvbnRleHQuICovCiAJaWYgKCFwb2xpY3lkYl9jb250ZXh0X2lzdmFsaWQoJnBvbGljeWRiLCAmbmV3Y29uKSkgewogCQlyYyA9IGNvbnZlcnRfY29udGV4dF9oYW5kbGVfaW52YWxpZF9jb250ZXh0KCZuZXdjb24pOwpAQCAtMjQ5Miw5ICsyNDk0LDkgQEAKIAogCXJjID0gbmV0bGJsX3NvY2tldF9zZXRhdHRyKHNvY2ssICZzZWNhdHRyKTsKIAlpZiAocmMgPT0gMCkgewotCQlzcGluX2xvY2soJnNrc2VjLT5ubGJsX2xvY2spOworCQlzcGluX2xvY2tfYmgoJnNrc2VjLT5ubGJsX2xvY2spOwogCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfTEFCRUxFRDsKLQkJc3Bpbl91bmxvY2soJnNrc2VjLT5ubGJsX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmc2tzZWMtPm5sYmxfbG9jayk7CiAJfQogCiBuZXRsYmxfc29ja2V0X3NldHNpZF9yZXR1cm46CkBAIC0yNjYwLDkgKzI2NjIsMTEgQEAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KLQlsb2NrX3NvY2soc29jay0+c2spOworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwliaF9sb2NrX3NvY2tfbmVzdGVkKHNvY2stPnNrKTsKIAlyYyA9IHNlbGludXhfbmV0bGJsX3NvY2tldF9zZXRzaWQoc29jaywgc2tzZWMtPnNpZCk7Ci0JcmVsZWFzZV9zb2NrKHNvY2stPnNrKTsKKwliaF91bmxvY2tfc29jayhzb2NrLT5zayk7CisJbG9jYWxfYmhfZW5hYmxlKCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9zb3VuZC9LY29uZmlnIGIvc291bmQvS2NvbmZpZwppbmRleCA5NTk0OWI2Li45ZDc3MzAwIDEwMDY0NAotLS0gYS9zb3VuZC9LY29uZmlnCisrKyBiL3NvdW5kL0tjb25maWcKQEAgLTkzLDQgKzkzLDEyIEBACiAKIGVuZGlmCiAKK2NvbmZpZyBBQzk3X0JVUworCXRyaXN0YXRlCisJaGVscAorCSAgVGhpcyBpcyB1c2VkIHRvIGF2b2lkIGNvbmZpZyBhbmQgbGluayBoYXJkIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZQorCSAgc291bmQgc3Vic3lzdGVtIGFuZCBvdGhlciBmdW5jdGlvbiBkcml2ZXJzIGNvbXBsZXRlbHkgdW5yZWxhdGVkIHRvCisJICBzb3VuZCBhbHRob3VnaCB0aGV5J3JlIHNoYXJpbmcgdGhlIEFDOTcgYnVzLiBDb25jZXJuZWQgZHJpdmVycworCSAgc2hvdWxkICJzZWxlY3QiIHRoaXMuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL3NvdW5kL01ha2VmaWxlIGIvc291bmQvTWFrZWZpbGUKaW5kZXggNWY2YmVmNS4uOWFlZTU0YyAxMDA2NDQKLS0tIGEvc291bmQvTWFrZWZpbGUKKysrIGIvc291bmQvTWFrZWZpbGUKQEAgLTgsNiArOCw5IEBACiBvYmotJChDT05GSUdfU05EKSArPSBjb3JlLyBpMmMvIGRyaXZlcnMvIGlzYS8gcGNpLyBwcGMvIGFybS8gc3ludGgvIHVzYi8gc3BhcmMvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLwogb2JqLSQoQ09ORklHX1NORF9BT0EpICs9IGFvYS8KIAorIyBUaGlzIG9uZSBtdXN0IGJlIGNvbXBpbGFibGUgZXZlbiBpZiBzb3VuZCBpcyBjb25maWd1cmVkIG91dAorb2JqLSQoQ09ORklHX0FDOTdfQlVTKSArPSBhYzk3X2J1cy5vCisKIGlmZXEgKCQoQ09ORklHX1NORCkseSkKICAgb2JqLXkgKz0gbGFzdC5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19idXMuYyBiL3NvdW5kL2FjOTdfYnVzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNvdW5kL3BjaS9hYzk3L2FjOTdfYnVzLmMKcmVuYW1lIHRvIHNvdW5kL2FjOTdfYnVzLmMKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb2RlY3Mvc25kLWFvYS1jb2RlYy1vbnl4LmggYi9zb3VuZC9hb2EvY29kZWNzL3NuZC1hb2EtY29kZWMtb255eC5oCmluZGV4IGFlZWRkYTcuLmZmZDIwMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb2RlY3Mvc25kLWFvYS1jb2RlYy1vbnl4LmgKKysrIGIvc291bmQvYW9hL2NvZGVjcy9zbmQtYW9hLWNvZGVjLW9ueXguaApAQCAtOSw3ICs5LDYgQEAKICNkZWZpbmUgX19TTkRfQU9BX0NPREVDX09OWVhfSAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KICNpbmNsdWRlIDxhc20vcG1hY19sb3dfaTJjLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvZGVjcy9zbmQtYW9hLWNvZGVjLXRhcy5jIGIvc291bmQvYW9hL2NvZGVjcy9zbmQtYW9hLWNvZGVjLXRhcy5jCmluZGV4IDlkZTg0ODUuLjJjZDgxZmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb2RlY3Mvc25kLWFvYS1jb2RlYy10YXMuYworKysgYi9zb3VuZC9hb2EvY29kZWNzL3NuZC1hb2EtY29kZWMtdGFzLmMKQEAgLTYxLDcgKzYxLDYgQEAKICAqLwogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KICNpbmNsdWRlIDxhc20vcG1hY19sb3dfaTJjLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2ZhYnJpY3MvS2NvbmZpZyBiL3NvdW5kL2FvYS9mYWJyaWNzL0tjb25maWcKaW5kZXggYzNiYzc3MC4uNTBkNzAyMSAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2ZhYnJpY3MvS2NvbmZpZworKysgYi9zb3VuZC9hb2EvZmFicmljcy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFNORF9BT0FfRkFCUklDX0xBWU9VVAogCXRyaXN0YXRlICJsYXlvdXQtaWQgZmFicmljIgotCWRlcGVuZHMgU05EX0FPQQorCWRlcGVuZHMgb24gU05EX0FPQQogCXNlbGVjdCBTTkRfQU9BX1NPVU5EQlVTCiAJc2VsZWN0IFNORF9BT0FfU09VTkRCVVNfSTJTCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sLmMgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwppbmRleCA0OGVmMGEwLi4wYzdiY2Q2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2NvbnRyb2wuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwpAQCAtMTI3NSw3ICsxMjc1LDcgQEAKIAkJCXNjaGVkdWxlKCk7CiAJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY3RsLT5jaGFuZ2Vfc2xlZXAsICZ3YWl0KTsKIAkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQlyZXR1cm4gcmVzdWx0ID4gMCA/IHJlc3VsdCA6IC1FUkVTVEFSVFNZUzsKKwkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQkJc3Bpbl9sb2NrX2lycSgmY3RsLT5yZWFkX2xvY2spOwogCQl9CiAJCWtldiA9IHNuZF9rY3RsX2V2ZW50KGN0bC0+ZXZlbnRzLm5leHQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbmZvLmMgYi9zb3VuZC9jb3JlL2luZm8uYwppbmRleCAwYjRhYWIzLi41NDU5MWUyIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luZm8uYworKysgYi9zb3VuZC9jb3JlL2luZm8uYwpAQCAtNDg4LDcgKzQ4OCw3IEBACiAKIHN0YXRpYyBpbnQgc25kX2luZm9fZW50cnlfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBzbmRfaW5mb19wcml2YXRlX2RhdGEgKmRhdGE7CiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCA2MTUyYTc1Li5hNGNjNmIxIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtMzYxLDggKzM2MSwxMCBAQAogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAidW5hYmxlIHRvIGZyZWUgY2FyZCBpbmZvXG4iKTsKIAkJLyogTm90IGZhdGFsIGVycm9yICovCiAJfQotCWlmIChjYXJkLT5kZXYpCi0JCWRldmljZV91bnJlZ2lzdGVyKGNhcmQtPmRldik7CisjaWZuZGVmIENPTkZJR19TWVNGU19ERVBSRUNBVEVECisJaWYgKGNhcmQtPmNhcmRfZGV2KQorCQlkZXZpY2VfdW5yZWdpc3RlcihjYXJkLT5jYXJkX2Rldik7CisjZW5kaWYKIAlrZnJlZShjYXJkKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5NywxMiArNDk5LDE0IEBACiAJaW50IGVycjsKIAogCXNuZF9hc3NlcnQoY2FyZCAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7Ci0JaWYgKCFjYXJkLT5kZXYpIHsKLQkJY2FyZC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShzb3VuZF9jbGFzcywgY2FyZC0+cGFyZW50LCAwLAotCQkJCQkgICJjYXJkJWkiLCBjYXJkLT5udW1iZXIpOwotCQlpZiAoSVNfRVJSKGNhcmQtPmRldikpCi0JCQljYXJkLT5kZXYgPSBOVUxMOworI2lmbmRlZiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRAorCWlmICghY2FyZC0+Y2FyZF9kZXYpIHsKKwkJY2FyZC0+Y2FyZF9kZXYgPSBkZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBjYXJkLT5kZXYsIDAsCisJCQkJCSAgICAgICAiY2FyZCVpIiwgY2FyZC0+bnVtYmVyKTsKKwkJaWYgKElTX0VSUihjYXJkLT5jYXJkX2RldikpCisJCQljYXJkLT5jYXJkX2RldiA9IE5VTEw7CiAJfQorI2VuZGlmCiAJaWYgKChlcnIgPSBzbmRfZGV2aWNlX3JlZ2lzdGVyX2FsbChjYXJkKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCW11dGV4X2xvY2soJnNuZF9jYXJkX211dGV4KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL21peGVyX29zcy5jIGIvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMKaW5kZXggZjRjNjcwNC4uMzM5MWYyYSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMKKysrIGIvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMKQEAgLTEwMjMsNyArMTAyMyw3IEBACiAJfQogCXVwX3JlYWQoJm1peGVyLT5jYXJkLT5jb250cm9sc19yd3NlbSk7CiAJaWYgKHNsb3QucHJlc2VudCAhPSAwKSB7Ci0JCXBzbG90ID0gKHN0cnVjdCBzbG90ICopa21hbGxvYyhzaXplb2Yoc2xvdCksIEdGUF9LRVJORUwpOworCQlwc2xvdCA9IGttYWxsb2Moc2l6ZW9mKHNsb3QpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCEgcHNsb3QpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJKnBzbG90ID0gc2xvdDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwppbmRleCBlMDgyMWViLi43ODZhODJlIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCkBAIC04MTAsNiArODEwLDggQEAKIAlzdHJ1Y3Qgc25kX21hc2sgc2Zvcm1hdF9tYXNrOwogCXN0cnVjdCBzbmRfbWFzayBtYXNrOwogCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcnVudGltZS0+b3NzLnBhcmFtc19sb2NrKSkKKwkJcmV0dXJuIC1FSU5UUjsKIAlzd19wYXJhbXMgPSBrbWFsbG9jKHNpemVvZigqc3dfcGFyYW1zKSwgR0ZQX0tFUk5FTCk7CiAJcGFyYW1zID0ga21hbGxvYyhzaXplb2YoKnBhcmFtcyksIEdGUF9LRVJORUwpOwogCXNwYXJhbXMgPSBrbWFsbG9jKHNpemVvZigqc3BhcmFtcyksIEdGUF9LRVJORUwpOwpAQCAtMTAyMCw2ICsxMDIyLDcgQEAKIAlrZnJlZShzd19wYXJhbXMpOwogCWtmcmVlKHBhcmFtcyk7CiAJa2ZyZWUoc3BhcmFtcyk7CisJbXV0ZXhfdW5sb2NrKCZydW50aW1lLT5vc3MucGFyYW1zX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEzMDcsMTQgKzEzMTAsMTcgQEAKIAogCWlmICgodG1wID0gc25kX3BjbV9vc3NfbWFrZV9yZWFkeShzdWJzdHJlYW0pKSA8IDApCiAJCXJldHVybiB0bXA7CisJbXV0ZXhfbG9jaygmcnVudGltZS0+b3NzLnBhcmFtc19sb2NrKTsKIAl3aGlsZSAoYnl0ZXMgPiAwKSB7CiAJCWlmIChieXRlcyA8IHJ1bnRpbWUtPm9zcy5wZXJpb2RfYnl0ZXMgfHwgcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID4gMCkgewogCQkJdG1wID0gYnl0ZXM7CiAJCQlpZiAodG1wICsgcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID4gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcykKIAkJCQl0bXAgPSBydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzIC0gcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkOwogCQkJaWYgKHRtcCA+IDApIHsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIocnVudGltZS0+b3NzLmJ1ZmZlciArIHJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCwgYnVmLCB0bXApKQotCQkJCQlyZXR1cm4geGZlciA+IDAgPyAoc25kX3BjbV9zZnJhbWVzX3QpeGZlciA6IC1FRkFVTFQ7CisJCQkJaWYgKGNvcHlfZnJvbV91c2VyKHJ1bnRpbWUtPm9zcy5idWZmZXIgKyBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQsIGJ1ZiwgdG1wKSkgeworCQkJCQl0bXAgPSAtRUZBVUxUOworCQkJCQlnb3RvIGVycjsKKwkJCQl9CiAJCQl9CiAJCQlydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQgKz0gdG1wOwogCQkJYnVmICs9IHRtcDsKQEAgLTEzMjUsMjIgKzEzMzEsMjQgQEAKIAkJCQl0bXAgPSBzbmRfcGNtX29zc193cml0ZTIoc3Vic3RyZWFtLCBydW50aW1lLT5vc3MuYnVmZmVyICsgcnVudGltZS0+b3NzLnBlcmlvZF9wdHIsIAogCQkJCQkJCSBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQgLSBydW50aW1lLT5vc3MucGVyaW9kX3B0ciwgMSk7CiAJCQkJaWYgKHRtcCA8PSAwKQotCQkJCQlyZXR1cm4geGZlciA+IDAgPyAoc25kX3BjbV9zZnJhbWVzX3QpeGZlciA6IHRtcDsKKwkJCQkJZ290byBlcnI7CiAJCQkJcnVudGltZS0+b3NzLmJ5dGVzICs9IHRtcDsKIAkJCQlydW50aW1lLT5vc3MucGVyaW9kX3B0ciArPSB0bXA7CiAJCQkJcnVudGltZS0+b3NzLnBlcmlvZF9wdHIgJT0gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlczsKIAkJCQlpZiAocnVudGltZS0+b3NzLnBlcmlvZF9wdHIgPT0gMCB8fAogCQkJCSAgICBydW50aW1lLT5vc3MucGVyaW9kX3B0ciA9PSBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQpCiAJCQkJCXJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCA9IDA7Ci0JCQkJZWxzZSBpZiAoKHN1YnN0cmVhbS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICE9IDApCi0JCQkJCXJldHVybiB4ZmVyID4gMCA/IHhmZXIgOiAtRUFHQUlOOworCQkJCWVsc2UgaWYgKChzdWJzdHJlYW0tPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAhPSAwKSB7CisJCQkJCXRtcCA9IC1FQUdBSU47CisJCQkJCWdvdG8gZXJyOworCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXRtcCA9IHNuZF9wY21fb3NzX3dyaXRlMihzdWJzdHJlYW0sCiAJCQkJCQkgKGNvbnN0IGNoYXIgX19mb3JjZSAqKWJ1ZiwKIAkJCQkJCSBydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzLCAwKTsKIAkJCWlmICh0bXAgPD0gMCkKLQkJCQlyZXR1cm4geGZlciA+IDAgPyAoc25kX3BjbV9zZnJhbWVzX3QpeGZlciA6IHRtcDsKKwkJCQlnb3RvIGVycjsKIAkJCXJ1bnRpbWUtPm9zcy5ieXRlcyArPSB0bXA7CiAJCQlidWYgKz0gdG1wOwogCQkJYnl0ZXMgLT0gdG1wOwpAQCAtMTM1MCw3ICsxMzU4LDEyIEBACiAJCQkJYnJlYWs7CiAJCX0KIAl9CisJbXV0ZXhfdW5sb2NrKCZydW50aW1lLT5vc3MucGFyYW1zX2xvY2spOwogCXJldHVybiB4ZmVyOworCisgZXJyOgorCW11dGV4X3VubG9jaygmcnVudGltZS0+b3NzLnBhcmFtc19sb2NrKTsKKwlyZXR1cm4geGZlciA+IDAgPyAoc25kX3BjbV9zZnJhbWVzX3QpeGZlciA6IHRtcDsKIH0KIAogc3RhdGljIHNzaXplX3Qgc25kX3BjbV9vc3NfcmVhZDIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ5dGVzLCBpbnQgaW5fa2VybmVsKQpAQCAtMTM5NywxMiArMTQxMCwxMyBAQAogCiAJaWYgKCh0bXAgPSBzbmRfcGNtX29zc19tYWtlX3JlYWR5KHN1YnN0cmVhbSkpIDwgMCkKIAkJcmV0dXJuIHRtcDsKKwltdXRleF9sb2NrKCZydW50aW1lLT5vc3MucGFyYW1zX2xvY2spOwogCXdoaWxlIChieXRlcyA+IDApIHsKIAkJaWYgKGJ5dGVzIDwgcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcyB8fCBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQgPiAwKSB7CiAJCQlpZiAocnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID09IDApIHsKIAkJCQl0bXAgPSBzbmRfcGNtX29zc19yZWFkMihzdWJzdHJlYW0sIHJ1bnRpbWUtPm9zcy5idWZmZXIsIHJ1bnRpbWUtPm9zcy5wZXJpb2RfYnl0ZXMsIDEpOwogCQkJCWlmICh0bXAgPD0gMCkKLQkJCQkJcmV0dXJuIHhmZXIgPiAwID8gKHNuZF9wY21fc2ZyYW1lc190KXhmZXIgOiB0bXA7CisJCQkJCWdvdG8gZXJyOwogCQkJCXJ1bnRpbWUtPm9zcy5ieXRlcyArPSB0bXA7CiAJCQkJcnVudGltZS0+b3NzLnBlcmlvZF9wdHIgPSB0bXA7CiAJCQkJcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID0gdG1wOwpAQCAtMTQxMCw4ICsxNDI0LDEwIEBACiAJCQl0bXAgPSBieXRlczsKIAkJCWlmICgoc2l6ZV90KSB0bXAgPiBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQpCiAJCQkJdG1wID0gcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkOwotCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJ1bnRpbWUtPm9zcy5idWZmZXIgKyAocnVudGltZS0+b3NzLnBlcmlvZF9wdHIgLSBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQpLCB0bXApKQotCQkJCXJldHVybiB4ZmVyID4gMCA/IChzbmRfcGNtX3NmcmFtZXNfdCl4ZmVyIDogLUVGQVVMVDsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBydW50aW1lLT5vc3MuYnVmZmVyICsgKHJ1bnRpbWUtPm9zcy5wZXJpb2RfcHRyIC0gcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkKSwgdG1wKSkgeworCQkJCXRtcCA9IC1FRkFVTFQ7CisJCQkJZ290byBlcnI7CisJCQl9CiAJCQlidWYgKz0gdG1wOwogCQkJYnl0ZXMgLT0gdG1wOwogCQkJeGZlciArPSB0bXA7CkBAIC0xNDIwLDE0ICsxNDM2LDE5IEBACiAJCQl0bXAgPSBzbmRfcGNtX29zc19yZWFkMihzdWJzdHJlYW0sIChjaGFyIF9fZm9yY2UgKilidWYsCiAJCQkJCQlydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzLCAwKTsKIAkJCWlmICh0bXAgPD0gMCkKLQkJCQlyZXR1cm4geGZlciA+IDAgPyAoc25kX3BjbV9zZnJhbWVzX3QpeGZlciA6IHRtcDsKKwkJCQlnb3RvIGVycjsKIAkJCXJ1bnRpbWUtPm9zcy5ieXRlcyArPSB0bXA7CiAJCQlidWYgKz0gdG1wOwogCQkJYnl0ZXMgLT0gdG1wOwogCQkJeGZlciArPSB0bXA7CiAJCX0KIAl9CisJbXV0ZXhfdW5sb2NrKCZydW50aW1lLT5vc3MucGFyYW1zX2xvY2spOwogCXJldHVybiB4ZmVyOworCisgZXJyOgorCW11dGV4X3VubG9jaygmcnVudGltZS0+b3NzLnBhcmFtc19sb2NrKTsKKwlyZXR1cm4geGZlciA+IDAgPyAoc25kX3BjbV9zZnJhbWVzX3QpeGZlciA6IHRtcDsKIH0KIAogc3RhdGljIGludCBzbmRfcGNtX29zc19yZXNldChzdHJ1Y3Qgc25kX3BjbV9vc3NfZmlsZSAqcGNtX29zc19maWxlKQpAQCAtMTUyOCw2ICsxNTQ5LDcgQEAKIAkJCXJldHVybiBlcnI7CiAJCWZvcm1hdCA9IHNuZF9wY21fb3NzX2Zvcm1hdF9mcm9tKHJ1bnRpbWUtPm9zcy5mb3JtYXQpOwogCQl3aWR0aCA9IHNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKGZvcm1hdCk7CisJCW11dGV4X2xvY2soJnJ1bnRpbWUtPm9zcy5wYXJhbXNfbG9jayk7CiAJCWlmIChydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQgPiAwKSB7CiAjaWZkZWYgT1NTX0RFQlVHCiAJCQlwcmludGsoInN5bmM6IGJ1ZmZlcl91c2VkXG4iKTsKQEAgLTE1MzcsOCArMTU1OSwxMCBAQAogCQkJCQkJICAgcnVudGltZS0+b3NzLmJ1ZmZlciArIHJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCwKIAkJCQkJCSAgIHNpemUpOwogCQkJZXJyID0gc25kX3BjbV9vc3Nfc3luYzEoc3Vic3RyZWFtLCBydW50aW1lLT5vc3MucGVyaW9kX2J5dGVzKTsKLQkJCWlmIChlcnIgPCAwKQorCQkJaWYgKGVyciA8IDApIHsKKwkJCQltdXRleF91bmxvY2soJnJ1bnRpbWUtPm9zcy5wYXJhbXNfbG9jayk7CiAJCQkJcmV0dXJuIGVycjsKKwkJCX0KIAkJfSBlbHNlIGlmIChydW50aW1lLT5vc3MucGVyaW9kX3B0ciA+IDApIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCXByaW50aygic3luYzogcGVyaW9kX3B0clxuIik7CkBAIC0xNTQ4LDggKzE1NzIsMTAgQEAKIAkJCQkJCSAgIHJ1bnRpbWUtPm9zcy5idWZmZXIsCiAJCQkJCQkgICBzaXplICogOCAvIHdpZHRoKTsKIAkJCWVyciA9IHNuZF9wY21fb3NzX3N5bmMxKHN1YnN0cmVhbSwgc2l6ZSk7Ci0JCQlpZiAoZXJyIDwgMCkKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZydW50aW1lLT5vc3MucGFyYW1zX2xvY2spOwogCQkJCXJldHVybiBlcnI7CisJCQl9CiAJCX0KIAkJLyoKIAkJICogVGhlIEFMU0EncyBwZXJpb2QgbWlnaHQgYmUgYSBiaXQgbGFyZ2UgdGhhbiBPU1Mgb25lLgpAQCAtMTU3OSw2ICsxNjA1LDcgQEAKIAkJCQlzbmRfcGNtX2xpYl93cml0ZXYoc3Vic3RyZWFtLCBidWZmZXJzLCBzaXplKTsKIAkJCX0KIAkJfQorCQltdXRleF91bmxvY2soJnJ1bnRpbWUtPm9zcy5wYXJhbXNfbG9jayk7CiAJCS8qCiAJCSAqIGZpbmlzaCBzeW5jOiBkcmFpbiB0aGUgYnVmZmVyCiAJCSAqLwpAQCAtMjE3Miw2ICsyMTk5LDcgQEAKIAlydW50aW1lLT5vc3MucGFyYW1zID0gMTsKIAlydW50aW1lLT5vc3MudHJpZ2dlciA9IDE7CiAJcnVudGltZS0+b3NzLnJhdGUgPSA4MDAwOworCW11dGV4X2luaXQoJnJ1bnRpbWUtPm9zcy5wYXJhbXNfbG9jayk7CiAJc3dpdGNoIChTTkRSVl9NSU5PUl9PU1NfREVWSUNFKG1pbm9yKSkgewogCWNhc2UgU05EUlZfTUlOT1JfT1NTX1BDTV84OgogCQlydW50aW1lLT5vc3MuZm9ybWF0ID0gQUZNVF9VODsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtLmMgYi9zb3VuZC9jb3JlL3BjbS5jCmluZGV4IDVhYzZlMTkuLjhlMDE4OTggMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtNjQwLDYgKzY0MCwxMCBAQAogCQllcnIgPSBzbmRfcGNtX3N1YnN0cmVhbV9wcm9jX2luaXQoc3Vic3RyZWFtKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkVycm9yIGluIHNuZF9wY21fc3RyZWFtX3Byb2NfaW5pdFxuIik7CisJCQlpZiAocHJldiA9PSBOVUxMKQorCQkJCXBzdHItPnN1YnN0cmVhbSA9IE5VTEw7CisJCQllbHNlCisJCQkJcHJldi0+bmV4dCA9IE5VTEw7CiAJCQlrZnJlZShzdWJzdHJlYW0pOwogCQkJcmV0dXJuIGVycjsKIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCAwYmIxNDJhLi5iMzM2Nzk3IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtNzksMTkgKzc5LDE3IEBACiAJCQlydW50aW1lLT5zaWxlbmNlX2ZpbGxlZCAtPSBmcmFtZXM7CiAJCQlpZiAoKHNuZF9wY21fc2ZyYW1lc190KXJ1bnRpbWUtPnNpbGVuY2VfZmlsbGVkIDwgMCkgewogCQkJCXJ1bnRpbWUtPnNpbGVuY2VfZmlsbGVkID0gMDsKLQkJCQlydW50aW1lLT5zaWxlbmNlX3N0YXJ0ID0gKG9mcyArIGZyYW1lcykgLSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJCQlydW50aW1lLT5zaWxlbmNlX3N0YXJ0ID0gbmV3X2h3X3B0cjsKIAkJCX0gZWxzZSB7Ci0JCQkJcnVudGltZS0+c2lsZW5jZV9zdGFydCA9IG9mcyAtIHJ1bnRpbWUtPnNpbGVuY2VfZmlsbGVkOworCQkJCXJ1bnRpbWUtPnNpbGVuY2Vfc3RhcnQgPSBvZnM7CiAJCQl9Ci0JCQlpZiAoKHNuZF9wY21fc2ZyYW1lc190KXJ1bnRpbWUtPnNpbGVuY2Vfc3RhcnQgPCAwKQotCQkJCXJ1bnRpbWUtPnNpbGVuY2Vfc3RhcnQgKz0gcnVudGltZS0+Ym91bmRhcnk7CiAJCX0KIAkJZnJhbWVzID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBydW50aW1lLT5zaWxlbmNlX2ZpbGxlZDsKIAl9CiAJc25kX2Fzc2VydChmcmFtZXMgPD0gcnVudGltZS0+YnVmZmVyX3NpemUsIHJldHVybik7CiAJaWYgKGZyYW1lcyA9PSAwKQogCQlyZXR1cm47Ci0Jb2ZzID0gKHJ1bnRpbWUtPnNpbGVuY2Vfc3RhcnQgKyBydW50aW1lLT5zaWxlbmNlX2ZpbGxlZCkgJSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlvZnMgPSBydW50aW1lLT5zaWxlbmNlX3N0YXJ0ICUgcnVudGltZS0+YnVmZmVyX3NpemU7CiAJd2hpbGUgKGZyYW1lcyA+IDApIHsKIAkJdHJhbnNmZXIgPSBvZnMgKyBmcmFtZXMgPiBydW50aW1lLT5idWZmZXJfc2l6ZSA/IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gb2ZzIDogZnJhbWVzOwogCQlpZiAocnVudGltZS0+YWNjZXNzID09IFNORFJWX1BDTV9BQ0NFU1NfUldfSU5URVJMRUFWRUQgfHwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggNmVhNjdiMS4uYjUyZTg5MyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTE2MDQsNyArMTYwNCw3IEBACiAJZmlsZSA9IGZnZXQoZmQpOwogCWlmICghZmlsZSkKIAkJcmV0dXJuIE5VTEw7Ci0JaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKCFTX0lTQ0hSKGlub2RlLT5pX21vZGUpIHx8CiAJICAgIGltYWpvcihpbm9kZSkgIT0gc25kX21ham9yKSB7CiAJCWZwdXQoZmlsZSk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3Jhd21pZGkuYyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCmluZGV4IDI2OWM0NjcuLjBmMDU1YmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCkBAIC0xMzg1LDcgKzEzODUsNiBAQAogCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlpbnQgaWR4OwogCi0JSU5JVF9MSVNUX0hFQUQoJnN0cmVhbS0+c3Vic3RyZWFtcyk7CiAJZm9yIChpZHggPSAwOyBpZHggPCBjb3VudDsgaWR4KyspIHsKIAkJc3Vic3RyZWFtID0ga3phbGxvYyhzaXplb2YoKnN1YnN0cmVhbSksIEdGUF9LRVJORUwpOwogCQlpZiAoc3Vic3RyZWFtID09IE5VTEwpIHsKQEAgLTE0NDAsNiArMTQzOSw5IEBACiAJcm1pZGktPmRldmljZSA9IGRldmljZTsKIAltdXRleF9pbml0KCZybWlkaS0+b3Blbl9tdXRleCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcm1pZGktPm9wZW5fd2FpdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1zKTsKKwlJTklUX0xJU1RfSEVBRCgmcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1zKTsKKwogCWlmIChpZCAhPSBOVUxMKQogCQlzdHJsY3B5KHJtaWRpLT5pZCwgaWQsIHNpemVvZihybWlkaS0+aWQpKTsKIAlpZiAoKGVyciA9IHNuZF9yYXdtaWRpX2FsbG9jX3N1YnN0cmVhbXMocm1pZGksCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfbWVtb3J5LmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfbWVtb3J5LmMKaW5kZXggNGJmZmU1MC4uYTNkYzVlMCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX21lbW9yeS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9tZW1vcnkuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCXJldHVybiBsZW47CiAJbmV3bGVuID0gbGVuOwogCWlmIChzaXplX2FsaWduZWQgPiAwKQotCQluZXdsZW4gPSAoKGxlbiArIHNpemVfYWxpZ25lZCAtIDEpIC8gc2l6ZV9hbGlnbmVkKSAqIHNpemVfYWxpZ25lZDsKKwkJbmV3bGVuID0gcm91bmR1cChsZW4sIHNpemVfYWxpZ25lZCk7CiAJaWYgKGNvdW50IDwgbmV3bGVuKQogCQlyZXR1cm4gLUVBR0FJTjsKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZ2J1Zi5jIGIvc291bmQvY29yZS9zZ2J1Zi5jCmluZGV4IGMzMDY2OWYuLmNlZmQyMjggMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2didWYuYworKysgYi9zb3VuZC9jb3JlL3NnYnVmLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyogdGFibGUgZW50cmllcyBhcmUgYWxpZ24gdG8gMzIgKi8KICNkZWZpbmUgU0dCVUZfVEJMX0FMSUdOCQkzMgotI2RlZmluZSBzZ2J1Zl9hbGlnbl90YWJsZSh0YmwpCSgoKCh0YmwpICsgU0dCVUZfVEJMX0FMSUdOIC0gMSkgLyBTR0JVRl9UQkxfQUxJR04pICogU0dCVUZfVEJMX0FMSUdOKQorI2RlZmluZSBzZ2J1Zl9hbGlnbl90YWJsZSh0YmwpCUFMSUdOKCh0YmwpLCBTR0JVRl9UQkxfQUxJR04pCiAKIGludCBzbmRfZnJlZV9zZ2J1Zl9wYWdlcyhzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmRtYWIpCiB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NvdW5kLmMgYi9zb3VuZC9jb3JlL3NvdW5kLmMKaW5kZXggMjgyNzQyMC4uODJhNjFjNiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zb3VuZC5jCisrKyBiL3NvdW5kL2NvcmUvc291bmQuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiB7CiAJaW50IG1pbm9yOwogCXN0cnVjdCBzbmRfbWlub3IgKnByZWc7Ci0Jc3RydWN0IGRldmljZSAqZGV2aWNlID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSBzbmRfY2FyZF9nZXRfZGV2aWNlX2xpbmsoY2FyZCk7CiAKIAlzbmRfYXNzZXJ0KG5hbWUsIHJldHVybiAtRUlOVkFMKTsKIAlwcmVnID0ga21hbGxvYyhzaXplb2YgKnByZWcsIEdGUF9LRVJORUwpOwpAQCAtMjYzLDggKzI2Myw2IEBACiAJCXJldHVybiBtaW5vcjsKIAl9CiAJc25kX21pbm9yc1ttaW5vcl0gPSBwcmVnOwotCWlmIChjYXJkKQotCQlkZXZpY2UgPSBjYXJkLT5kZXY7CiAJcHJlZy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShzb3VuZF9jbGFzcywgZGV2aWNlLCBNS0RFVihtYWpvciwgbWlub3IpLAogCQkJCSAgIiVzIiwgbmFtZSk7CiAJaWYgKHByZWctPmRldikKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc291bmRfb3NzLmMgYi9zb3VuZC9jb3JlL3NvdW5kX29zcy5jCmluZGV4IGIyZmM0MGEuLjQ1NjZkZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc291bmRfb3NzLmMKKysrIGIvc291bmQvY29yZS9zb3VuZF9vc3MuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJaW50IGNpZHggPSBTTkRSVl9NSU5PUl9PU1NfQ0FSRChtaW5vcik7CiAJaW50IHRyYWNrMiA9IC0xOwogCWludCByZWdpc3RlcjEgPSAtMSwgcmVnaXN0ZXIyID0gLTE7Ci0Jc3RydWN0IGRldmljZSAqY2FyZGRldiA9IE5VTEw7CisJc3RydWN0IGRldmljZSAqY2FyZGRldiA9IHNuZF9jYXJkX2dldF9kZXZpY2VfbGluayhjYXJkKTsKIAogCWlmIChjYXJkICYmIGNhcmQtPm51bWJlciA+PSA4KQogCQlyZXR1cm4gMDsgLyogaWdub3JlIHNpbGVudGx5ICovCkBAIC0xMzQsOCArMTM0LDYgQEAKIAkJdHJhY2syID0gU05EUlZfTUlOT1JfT1NTKGNpZHgsIFNORFJWX01JTk9SX09TU19ETU1JREkxKTsKIAkJYnJlYWs7CiAJfQotCWlmIChjYXJkKQotCQljYXJkZGV2ID0gY2FyZC0+ZGV2OwogCXJlZ2lzdGVyMSA9IHJlZ2lzdGVyX3NvdW5kX3NwZWNpYWxfZGV2aWNlKGZfb3BzLCBtaW5vciwgY2FyZGRldik7CiAJaWYgKHJlZ2lzdGVyMSAhPSBtaW5vcikKIAkJZ290byBfX2VuZDsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvS2NvbmZpZyBiL3NvdW5kL2RyaXZlcnMvS2NvbmZpZwppbmRleCA3OTcxMjg1Li40MGViZDJmIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL0tjb25maWcKKysrIGIvc291bmQvZHJpdmVycy9LY29uZmlnCkBAIC0yNiwxMSArMjYsNyBAQAogY29uZmlnIFNORF9BQzk3X0NPREVDCiAJdHJpc3RhdGUKIAlzZWxlY3QgU05EX1BDTQotCXNlbGVjdCBTTkRfQUM5N19CVVMKLQotY29uZmlnIFNORF9BQzk3X0JVUwotCXRyaXN0YXRlCi0KKwlzZWxlY3QgQUM5N19CVVMKIAogY29uZmlnIFNORF9EVU1NWQogCXRyaXN0YXRlICJEdW1teSAoL2Rldi9udWxsKSBzb3VuZGNhcmQiCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c19tZW0uYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX21lbS5jCmluZGV4IGY1MGMyNzYuLjcxMDc3NTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX21lbS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX21lbS5jCkBAIC0xNDMsOSArMTQzLDggQEAKIAlzdHJ1Y3Qgc25kX2dmMV9tZW1fYmxvY2sgKnBibG9jazsKIAl1bnNpZ25lZCBpbnQgcHRyMSwgcHRyMjsKIAotCWFsaWduLS07Ci0JaWYgKHdfMTYgJiYgYWxpZ24gPCAxKQotCQlhbGlnbiA9IDE7CisJaWYgKHdfMTYgJiYgYWxpZ24gPCAyKQorCQlhbGlnbiA9IDI7CiAJYmxvY2stPmZsYWdzID0gd18xNiA/IFNORFJWX0dGMV9NRU1fQkxPQ0tfMTZCSVQgOiAwOwogCWJsb2NrLT5vd25lciA9IFNORFJWX0dGMV9NRU1fT1dORVJfRFJJVkVSOwogCWJsb2NrLT5zaGFyZSA9IDA7CkBAIC0xNjUsNyArMTY0LDcgQEAKIAkJCWlmIChwYmxvY2stPm5leHQtPnB0ciA8IGJvdW5kYXJ5KQogCQkJCXB0cjIgPSBwYmxvY2stPm5leHQtPnB0cjsKIAkJfQotCQlwdHIxID0gKHBibG9jay0+cHRyICsgcGJsb2NrLT5zaXplICsgYWxpZ24pICYgfmFsaWduOworCQlwdHIxID0gQUxJR04ocGJsb2NrLT5wdHIgKyBwYmxvY2stPnNpemUsIGFsaWduKTsKIAkJaWYgKHB0cjEgPj0gcHRyMikKIAkJCWNvbnRpbnVlOwogCQlzaXplMSA9IHB0cjIgLSBwdHIxOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jIGIvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jCmluZGV4IGM2MmE5ZTMuLjMwOTRmMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYworKysgYi9zb3VuZC9pc2Evc2Ivc2JfY29tbW9uLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogCWNoaXAtPnBvcnQgPSBwb3J0OwogCQogCWlmIChyZXF1ZXN0X2lycShpcnEsIGlycV9oYW5kbGVyLCBoYXJkd2FyZSA9PSBTQl9IV19BTFM0MDAwID8KLQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCA6IElSUUZfRElTQUJMRUQsCisJCQlJUlFGX1NIQVJFRCA6IElSUUZfRElTQUJMRUQsCiAJCQkiU291bmRCbGFzdGVyIiwgKHZvaWQgKikgY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAic2I6IGNhbid0IGdyYWIgaXJxICVkXG4iLCBpcnEpOwogCQlzbmRfc2Jkc3BfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jCmluZGV4IGJlZDMyOWUuLjc4MDIwZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMKKysrIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYwpAQCAtMTA2OCw3ICsxMDY4LDcgQEAKIAkJCWJsb2Nrc2l6ZSA9IG1heF9ibGtzaXplOwogCQl9IGVsc2UgewogCQkJLyogcm91bmQgdG8gbmVhcmVzdCAxNi1ieXRlIHZhbHVlICovCi0JCQlibG9ja3NpemUgPSAoKGxlbmd0aC13cml0dGVuKzcpJn4weDcpOworCQkJYmxvY2tzaXplID0gQUxJR04obGVuZ3RoIC0gd3JpdHRlbiwgOCk7CiAJCX0KIAogCQlpZiAoc25kX3dhdmVmcm9udF9jbWQgKGRldiwgV0ZDX0RPV05MT0FEX0JMT0NLLCBOVUxMLCBOVUxMKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2FkMTg0OC5jIGIvc291bmQvb3NzL2FkMTg0OC5jCmluZGV4IDBmZmE5OTcuLjdjZjk5MTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hZDE4NDguYworKysgYi9zb3VuZC9vc3MvYWQxODQ4LmMKQEAgLTE5OTIsNyArMTk5Miw3IEBACiAJCQlkZXZjLT5hdWRpb19mbGFncyB8PSBETUFfRFVQTEVYOwogCX0KIAotCXBvcnRjID0gKGFkMTg0OF9wb3J0X2luZm8gKikga21hbGxvYyhzaXplb2YoYWQxODQ4X3BvcnRfaW5mbyksIEdGUF9LRVJORUwpOworCXBvcnRjID0ga21hbGxvYyhzaXplb2YoYWQxODQ4X3BvcnRfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmKHBvcnRjPT1OVUxMKSB7CiAJCXJlbGVhc2VfcmVnaW9uKGRldmMtPmJhc2UsIDQpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvY3M0MjMyLmMgYi9zb3VuZC9vc3MvY3M0MjMyLmMKaW5kZXggYjY5MjRjNy4uZGU0MGUyMSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2NzNDIzMi5jCisrKyBiL3NvdW5kL29zcy9jczQyMzIuYwpAQCAtNDA4LDcgKzQwOCw3IEBACiB7CiAJc3RydWN0IGFkZHJlc3NfaW5mbyAqaXNhcG5wY2ZnOwogCi0JaXNhcG5wY2ZnPShzdHJ1Y3QgYWRkcmVzc19pbmZvKilrbWFsbG9jKHNpemVvZigqaXNhcG5wY2ZnKSxHRlBfS0VSTkVMKTsKKwlpc2FwbnBjZmcgPSBrbWFsbG9jKHNpemVvZigqaXNhcG5wY2ZnKSxHRlBfS0VSTkVMKTsKIAlpZiAoIWlzYXBucGNmZykKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCmluZGV4IDg3YmQzMTAuLjgwYjgzNmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAKIAogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewogCQlpZiAod3JpdGVfc3EuYnVzeSkKLQkJCXJjID0gc3FfZnN5bmMoZmlsZSwgZmlsZS0+Zl9kZW50cnkpOworCQkJcmMgPSBzcV9mc3luYyhmaWxlLCBmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAogCQlzcV9yZXNldF9vdXRwdXQoKSA7IC8qIG1ha2Ugc3VyZSBkbWEgaXMgc3RvcHBlZCBhbmQgYWxsIGlzIHF1aWV0ICovCiAJCXdyaXRlX3NxX3JlbGVhc2VfYnVmZmVycygpOwpAQCAtMTIxNyw3ICsxMjE3LDcgQEAKIAkJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSAmJiBkbWFzb3VuZC5tYWNoLnJlY29yZCkKIAkJCXNxX3Jlc2V0X2lucHV0KCkgOwogCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJCXJlc3VsdCA9IHNxX2ZzeW5jKGZpbGUsIGZpbGUtPmZfZGVudHJ5KTsKKwkJCXJlc3VsdCA9IHNxX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCQkJc3FfcmVzZXRfb3V0cHV0KCkgOwogCQl9CiAJCS8qIGlmIHdlIGFyZSB0aGUgc2hhcmVkIHJlc291cmNlIG93bmVyIHRoZW4gcmVsZWFzZSB0aGVtICovCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvdGFzMzAwMWMuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC90YXMzMDAxYy5jCmluZGV4IGYyMjdjOWYuLjJmMjFhM2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC90YXMzMDAxYy5jCisrKyBiL3NvdW5kL29zcy9kbWFzb3VuZC90YXMzMDAxYy5jCkBAIC01MCw2ICs1MCw3IEBACiAJaW50IG91dHB1dF9pZDsKIAlpbnQgc3BlYWtlcl9pZDsKIAlzdHJ1Y3QgdGFzX2RyY2VfdCBkcmNlX3N0YXRlOworCXN0cnVjdCB3b3JrX3N0cnVjdCBjaGFuZ2U7CiB9OwogCiAKQEAgLTY2NywxNCArNjY4LDEzIEBACiB9CiAKIHN0YXRpYyB2b2lkCi10YXMzMDAxY19kZXZpY2VfY2hhbmdlX2hhbmRsZXIodm9pZCAqc2VsZikKK3RhczMwMDFjX2RldmljZV9jaGFuZ2VfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaWYgKHNlbGYpCi0JCXRhczMwMDFjX3VwZGF0ZV9kZXZpY2VfcGFyYW1ldGVycyhzZWxmKTsKKwlzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmOworCXNlbGYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHRhczMwMDFjX2RhdGFfdCwgY2hhbmdlKTsKKwl0YXMzMDAxY191cGRhdGVfZGV2aWNlX3BhcmFtZXRlcnMoc2VsZik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGV2aWNlX2NoYW5nZTsKLQogc3RhdGljIGludAogdGFzMzAwMWNfb3V0cHV0X2RldmljZV9jaGFuZ2UoCXN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGYsCiAJCQkJaW50IGRldmljZV9pZCwKQEAgLTY4NSw3ICs2ODUsNyBAQAogCXNlbGYtPm91dHB1dF9pZD1vdXRwdXRfaWQ7CiAJc2VsZi0+c3BlYWtlcl9pZD1zcGVha2VyX2lkOwogCi0Jc2NoZWR1bGVfd29yaygmZGV2aWNlX2NoYW5nZSk7CisJc2NoZWR1bGVfd29yaygmc2VsZi0+Y2hhbmdlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODIzLDcgKzgyMyw3IEBACiAJCQl0YXMzMDAxY193cml0ZV9iaXF1YWRfc2hhZG93KHNlbGYsIGksIGosCiAJCQkJJnRhczMwMDFjX2VxX3VuaXR5KTsKIAotCUlOSVRfV09SSygmZGV2aWNlX2NoYW5nZSwgdGFzMzAwMWNfZGV2aWNlX2NoYW5nZV9oYW5kbGVyLCBzZWxmKTsKKwlJTklUX1dPUksoJnNlbGYtPmNoYW5nZSwgdGFzMzAwMWNfZGV2aWNlX2NoYW5nZV9oYW5kbGVyKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL3RhczMwMDQuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC90YXMzMDA0LmMKaW5kZXggODJlYWFjYS4uYWYzNGZiMyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL3RhczMwMDQuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvdGFzMzAwNC5jCkBAIC00OCw2ICs0OCw3IEBACiAJaW50IG91dHB1dF9pZDsKIAlpbnQgc3BlYWtlcl9pZDsKIAlzdHJ1Y3QgdGFzX2RyY2VfdCBkcmNlX3N0YXRlOworCXN0cnVjdCB3b3JrX3N0cnVjdCBjaGFuZ2U7CiB9OwogCiAjZGVmaW5lIE1BS0VfVElNRShzZWMsdXNlYykgKCgoc2VjKTw8MTIpICsgKDUwMDAwKyh1c2VjLzEwKSooMTw8MTIpKS8xMDAwMDApCkBAIC05MTQsMTUgKzkxNSwxMyBAQAogfQogCiBzdGF0aWMgdm9pZAotdGFzMzAwNF9kZXZpY2VfY2hhbmdlX2hhbmRsZXIodm9pZCAqc2VsZikKK3RhczMwMDRfZGV2aWNlX2NoYW5nZV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlpZiAoIXNlbGYpIHJldHVybjsKLQotCXRhczMwMDRfdXBkYXRlX2RldmljZV9wYXJhbWV0ZXJzKChzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKilzZWxmKTsKKwlzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGY7CisJc2VsZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QsIGNoYW5nZSk7CisJdGFzMzAwNF91cGRhdGVfZGV2aWNlX3BhcmFtZXRlcnMoc2VsZik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGV2aWNlX2NoYW5nZTsKLQogc3RhdGljIGludAogdGFzMzAwNF9vdXRwdXRfZGV2aWNlX2NoYW5nZSgJc3RydWN0IHRhczMwMDRfZGF0YV90ICpzZWxmLAogCQkJCWludCBkZXZpY2VfaWQsCkBAIC05MzMsNyArOTMyLDcgQEAKIAlzZWxmLT5vdXRwdXRfaWQ9b3V0cHV0X2lkOwogCXNlbGYtPnNwZWFrZXJfaWQ9c3BlYWtlcl9pZDsKIAotCXNjaGVkdWxlX3dvcmsoJmRldmljZV9jaGFuZ2UpOworCXNjaGVkdWxlX3dvcmsoJnNlbGYtPmNoYW5nZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTIsNyArMTExMSw3IEBACiAJdGFzMzAwNF93cml0ZV9yZWdpc3RlcihzZWxmLCBUQVMzMDA0X1JFR19NQ1IyLCAmbWNyMiwgV1JJVEVfU0hBRE9XKTsKIAl0YXMzMDA0X3dyaXRlX3JlZ2lzdGVyKHNlbGYsIFRBUzMwMDRfUkVHX0RSQywgZHJjZV9pbml0LCBXUklURV9TSEFET1cpOwogCi0JSU5JVF9XT1JLKCZkZXZpY2VfY2hhbmdlLCB0YXMzMDA0X2RldmljZV9jaGFuZ2VfaGFuZGxlciwgc2VsZik7CisJSU5JVF9XT1JLKCZzZWxmLT5jaGFuZ2UsIHRhczMwMDRfZGV2aWNlX2NoYW5nZV9oYW5kbGVyKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2VtdTEwazEvYXVkaW8uYyBiL3NvdW5kL29zcy9lbXUxMGsxL2F1ZGlvLmMKaW5kZXggNDlmOTAyZi4uZWZjZjU4OSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2VtdTEwazEvYXVkaW8uYworKysgYi9zb3VuZC9vc3MvZW11MTBrMS9hdWRpby5jCkBAIC0xMTM5LDcgKzExMzksNyBAQAogCiBtYXRjaDoKIAotCXdhdmVfZGV2ID0gKHN0cnVjdCBlbXUxMGsxX3dhdmVkZXZpY2UgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IGVtdTEwazFfd2F2ZWRldmljZSksIEdGUF9LRVJORUwpOworCXdhdmVfZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGVtdTEwazFfd2F2ZWRldmljZSksIEdGUF9LRVJORUwpOwogCiAJaWYgKHdhdmVfZGV2ID09IE5VTEwpIHsgCiAJCUVSUk9SKCk7CkBAIC0xMTU1LDcgKzExNTUsNyBAQAogCQkvKiBSZWNvcmRpbmcgKi8KIAkJc3RydWN0IHdpaW5zdCAqd2lpbnN0OwogCi0JCWlmICgod2lpbnN0ID0gKHN0cnVjdCB3aWluc3QgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpaW5zdCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCWlmICgod2lpbnN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpaW5zdCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCQlFUlJPUigpOwogCQkJa2ZyZWUod2F2ZV9kZXYpOwogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjExLDcgKzEyMTEsNyBAQAogCQlzdHJ1Y3Qgd29pbnN0ICp3b2luc3Q7CiAJCWludCBpOwogCi0JCWlmICgod29pbnN0ID0gKHN0cnVjdCB3b2luc3QgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHdvaW5zdCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCWlmICgod29pbnN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdvaW5zdCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCQlFUlJPUigpOwogCQkJa2ZyZWUod2F2ZV9kZXYpOwogCQkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZW11MTBrMS9jYXJkbWkuYyBiL3NvdW5kL29zcy9lbXUxMGsxL2NhcmRtaS5jCmluZGV4IDA1NDU4MTQuLjU3Njc0ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9lbXUxMGsxL2NhcmRtaS5jCisrKyBiL3NvdW5kL29zcy9lbXUxMGsxL2NhcmRtaS5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIAltaWRpaGRyLT5mbGFncyB8PSBNSURJQlVGX0lOUVVFVUU7CS8qIHNldCAqLwogCW1pZGloZHItPmZsYWdzICY9IH5NSURJQlVGX0RPTkU7CS8qIGNsZWFyICovCiAKLQlpZiAoKG1pZGlxID0gKHN0cnVjdCBtaWRpX3F1ZXVlICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWRpX3F1ZXVlKSwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKKwlpZiAoKG1pZGlxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pZGlfcXVldWUpLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgewogCQkvKiBNZXNzYWdlIGxvc3QgKi8KIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9lbXUxMGsxL2NhcmRtby5jIGIvc291bmQvb3NzL2VtdTEwazEvY2FyZG1vLmMKaW5kZXggNTkzOGQzMS4uYThjYzc1ZCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2VtdTEwazEvY2FyZG1vLmMKKysrIGIvc291bmQvb3NzL2VtdTEwazEvY2FyZG1vLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCW1pZGloZHItPmZsYWdzIHw9IE1JRElCVUZfSU5RVUVVRTsKIAltaWRpaGRyLT5mbGFncyAmPSB+TUlESUJVRl9ET05FOwogCi0JaWYgKChtaWRpcSA9IChzdHJ1Y3QgbWlkaV9xdWV1ZSAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlkaV9xdWV1ZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJaWYgKChtaWRpcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWRpX3F1ZXVlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKIAkJLyogTWVzc2FnZSBsb3N0ICovCiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZW11MTBrMS9taWRpLmMgYi9zb3VuZC9vc3MvZW11MTBrMS9taWRpLmMKaW5kZXggOGFjNzdkZi4uY2NhM2RhZCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2VtdTEwazEvbWlkaS5jCisrKyBiL3NvdW5kL29zcy9lbXUxMGsxL21pZGkuYwpAQCAtNTgsNyArNTgsNyBAQAogewogCXN0cnVjdCBtaWRpX2hkciAqbWlkaWhkcjsKIAotCWlmICgobWlkaWhkciA9IChzdHJ1Y3QgbWlkaV9oZHIgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pZGlfaGRyKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwlpZiAoKG1pZGloZHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlkaV9oZHIpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQlFUlJPUigpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJbXV0ZXhfbG9jaygmY2FyZC0+b3Blbl9zZW0pOwogCX0KIAotCWlmICgobWlkaV9kZXYgPSAoc3RydWN0IGVtdTEwazFfbWlkaWRldmljZSAqKSBrbWFsbG9jKHNpemVvZigqbWlkaV9kZXYpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKG1pZGlfZGV2ID0ga21hbGxvYyhzaXplb2YoKm1pZGlfZGV2KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbWlkaV9kZXYtPmNhcmQgPSBjYXJkOwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZmZlciwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmICgobWlkaWhkciA9IChzdHJ1Y3QgbWlkaV9oZHIgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pZGlfaGRyKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKChtaWRpaGRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pZGlfaGRyKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbWlkaWhkci0+YnVmZmVybGVuZ3RoID0gY291bnQ7CkBAIC00OTAsNyArNDkwLDcgQEAKIAkJCQogCURQRigyLCAiZW11MTBrMV9zZXFfbWlkaV9vcGVuKClcbiIpOwogCQotCWlmICgobWlkaV9kZXYgPSAoc3RydWN0IGVtdTEwazFfbWlkaWRldmljZSAqKSBrbWFsbG9jKHNpemVvZigqbWlkaV9kZXYpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKG1pZGlfZGV2ID0ga21hbGxvYyhzaXplb2YoKm1pZGlfZGV2KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbWlkaV9kZXYtPmNhcmQgPSBjYXJkOwpAQCAtNTQwLDcgKzU0MCw3IEBACiAKIAljYXJkID0gbWlkaV9kZXZzW2Rldl0tPmRldmM7CiAKLQlpZiAoKG1pZGloZHIgPSAoc3RydWN0IG1pZGlfaGRyICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWRpX2hkciksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICgobWlkaWhkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWRpX2hkciksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1pZGloZHItPmJ1ZmZlcmxlbmd0aCA9IDE7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZW11MTBrMS9taXhlci5jIGIvc291bmQvb3NzL2VtdTEwazEvbWl4ZXIuYwppbmRleCBjYmNhYWEzLi42NDE5Nzk2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZW11MTBrMS9taXhlci5jCisrKyBiL3NvdW5kL29zcy9lbXUxMGsxL21peGVyLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCiAJY2FzZSBTT1VORF9NSVhFUl9QUklWQVRFMzoKIAotCQljdGwgPSAoc3RydWN0IG1peGVyX3ByaXZhdGVfaW9jdGwgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IG1peGVyX3ByaXZhdGVfaW9jdGwpLCBHRlBfS0VSTkVMKTsKKwkJY3RsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1peGVyX3ByaXZhdGVfaW9jdGwpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGN0bCA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9oYWwyLmMgYi9zb3VuZC9vc3MvaGFsMi5jCmluZGV4IDc4NGJkZDcuLmQxODI4NmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9oYWwyLmMKKysrIGIvc291bmQvb3NzL2hhbDIuYwpAQCAtMTQzNSw3ICsxNDM1LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgaGFsMl9jYXJkICpoYWwyOwogCi0JaGFsMiA9IChzdHJ1Y3QgaGFsMl9jYXJkICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoYWwyX2NhcmQpLCBHRlBfS0VSTkVMKTsKKwloYWwyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhhbDJfY2FyZCksIEdGUF9LRVJORUwpOwogCWlmICghaGFsMikKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KGhhbDIsIDAsIHNpemVvZihzdHJ1Y3QgaGFsMl9jYXJkKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvbXB1NDAxLmMgYi9zb3VuZC9vc3MvbXB1NDAxLmMKaW5kZXggZTk2MjIwNS4uMjc5NmMwZSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL21wdTQwMS5jCisrKyBiL3NvdW5kL29zcy9tcHU0MDEuYwpAQCAtMTAyMyw3ICsxMDIzLDcgQEAKIAkJCQlkZXZjLT5jYXBhYmlsaXRpZXMgfD0gTVBVX0NBUF9JTlRMRzsJLyogU3VwcG9ydHMgaW50ZWxsaWdlbnQgbW9kZSAqLwogCiAKLQltcHU0MDFfc3ludGhfb3BlcmF0aW9uc1ttXSA9IChzdHJ1Y3Qgc3ludGhfb3BlcmF0aW9ucyAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW50aF9vcGVyYXRpb25zKSwgR0ZQX0tFUk5FTCk7CisJbXB1NDAxX3N5bnRoX29wZXJhdGlvbnNbbV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3ludGhfb3BlcmF0aW9ucyksIEdGUF9LRVJORUwpOwogCiAJaWYgKG1wdTQwMV9zeW50aF9vcGVyYXRpb25zW21dID09IE5VTEwpCiAJewpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL21zbmRfcGlubmFjbGUuYyBiL3NvdW5kL29zcy9tc25kX3Bpbm5hY2xlLmMKaW5kZXggZDUxNDY3OS4uMjQxMTBkNiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL21zbmRfcGlubmFjbGUuYworKysgYi9zb3VuZC9vc3MvbXNuZF9waW5uYWNsZS5jCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCiBzdGF0aWMgc3NpemVfdCBkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKIHsKLQlpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAobWlub3IgPT0gZGV2LmRzcF9taW5vcikKIAkJcmV0dXJuIGRzcF9yZWFkKGJ1ZiwgY291bnQpOwogCWVsc2UKQEAgLTEwMTYsNyArMTAxNiw3IEBACiAKIHN0YXRpYyBzc2l6ZV90IGRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKIHsKLQlpbnQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAobWlub3IgPT0gZGV2LmRzcF9taW5vcikKIAkJcmV0dXJuIGRzcF93cml0ZShidWYsIGNvdW50KTsKIAllbHNlCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvb3BsMy5jIGIvc291bmQvb3NzL29wbDMuYwppbmRleCA0Nzk5YmM3Li4yZThjZmE1IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvb3BsMy5jCisrKyBiL3NvdW5kL29zcy9vcGwzLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlkZXZjID0gKHN0cnVjdCBvcGxfZGV2aW5mbyAqKWttYWxsb2Moc2l6ZW9mKCpkZXZjKSwgR0ZQX0tFUk5FTCk7CisJZGV2YyA9IGttYWxsb2Moc2l6ZW9mKCpkZXZjKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoZGV2YyA9PSBOVUxMKQogCXsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zYl9jb21tb24uYyBiL3NvdW5kL29zcy9zYl9jb21tb24uYwppbmRleCA0NDA1MzdjLi4wN2NiYWNmIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2JfY29tbW9uLmMKKysrIGIvc291bmQvb3NzL3NiX2NvbW1vbi5jCkBAIC02MjUsNyArNjI1LDcgQEAKIAkgKi8KIAogCi0JZGV0ZWN0ZWRfZGV2YyA9IChzYl9kZXZjICopa21hbGxvYyhzaXplb2Yoc2JfZGV2YyksIEdGUF9LRVJORUwpOworCWRldGVjdGVkX2RldmMgPSBrbWFsbG9jKHNpemVvZihzYl9kZXZjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldGVjdGVkX2RldmMgPT0gTlVMTCkKIAl7CiAJCXByaW50ayhLRVJOX0VSUiAic2I6IENhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZGV2aWNlIGluZm9ybWF0aW9uXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zYl9taWRpLmMgYi9zb3VuZC9vc3Mvc2JfbWlkaS5jCmluZGV4IDJlM2JjMDQuLjhiNzk2NzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zYl9taWRpLmMKKysrIGIvc291bmQvb3NzL3NiX21pZGkuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJCXJldHVybjsKIAl9CiAJc3RkX21pZGlfc3ludGgubWlkaV9kZXYgPSBkZXZjLT5teV9taWRpZGV2ID0gZGV2OwotCW1pZGlfZGV2c1tkZXZdID0gKHN0cnVjdCBtaWRpX29wZXJhdGlvbnMgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlkaV9vcGVyYXRpb25zKSwgR0ZQX0tFUk5FTCk7CisJbWlkaV9kZXZzW2Rldl0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlkaV9vcGVyYXRpb25zKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG1pZGlfZGV2c1tkZXZdID09IE5VTEwpCiAJewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJTb3VuZCBCbGFzdGVyOiAgZmFpbGVkIHRvIGFsbG9jYXRlIE1JREkgbWVtb3J5LlxuIik7CkBAIC0xODksNyArMTg5LDcgQEAKIAltaWRpX2RldnNbZGV2XS0+ZGV2YyA9IGRldmM7CiAKIAotCW1pZGlfZGV2c1tkZXZdLT5jb252ZXJ0ZXIgPSAoc3RydWN0IHN5bnRoX29wZXJhdGlvbnMgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3ludGhfb3BlcmF0aW9ucyksIEdGUF9LRVJORUwpOworCW1pZGlfZGV2c1tkZXZdLT5jb252ZXJ0ZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3ludGhfb3BlcmF0aW9ucyksIEdGUF9LRVJORUwpOwogCWlmIChtaWRpX2RldnNbZGV2XS0+Y29udmVydGVyID09IE5VTEwpCiAJewogCQkgIHByaW50ayhLRVJOX1dBUk5JTkcgIlNvdW5kIEJsYXN0ZXI6ICBmYWlsZWQgdG8gYWxsb2NhdGUgTUlESSBtZW1vcnkuXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zYl9taXhlci5jIGIvc291bmQvb3NzL3NiX21peGVyLmMKaW5kZXggMjM4ZTJjZi4uZmFkMWE0ZiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NiX21peGVyLmMKKysrIGIvc291bmQvb3NzL3NiX21peGVyLmMKQEAgLTczNCw3ICs3MzQsNyBAQAogCWlmIChtID09IC0xKQogCQlyZXR1cm4gMDsKIAotCW1peGVyX2RldnNbbV0gPSAoc3RydWN0IG1peGVyX29wZXJhdGlvbnMgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWl4ZXJfb3BlcmF0aW9ucyksIEdGUF9LRVJORUwpOworCW1peGVyX2RldnNbbV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWl4ZXJfb3BlcmF0aW9ucyksIEdGUF9LRVJORUwpOwogCWlmIChtaXhlcl9kZXZzW21dID09IE5VTEwpCiAJewogCQlwcmludGsoS0VSTl9FUlIgInNiX21peGVyOiBDYW4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NvdW5kY2FyZC5jIGIvc291bmQvb3NzL3NvdW5kY2FyZC5jCmluZGV4IDhmYjhlN2YuLmE4OTEwOGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zb3VuZGNhcmQuYworKysgYi9zb3VuZC9vc3Mvc291bmRjYXJkLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCiBzdGF0aWMgc3NpemVfdCBzb3VuZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgZGV2ID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlpbnQgZGV2ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJLyoKQEAgLTE3NCw3ICsxNzQsNyBAQAogCiBzdGF0aWMgc3NpemVfdCBzb3VuZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50IGRldiA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJaW50IGRldiA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAkKIAlsb2NrX2tlcm5lbCgpOwpAQCAtMzkzLDcgKzM5Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc291bmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCBkZXYgPSBpbWlub3IoaW5vZGUpOwogCiAJREVCKHByaW50aygic291bmRfcG9sbChkZXY9JWQpXG4iLCBkZXYpKTsKQEAgLTQxOCw3ICs0MTgsNyBAQAogCWludCBkZXZfY2xhc3M7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXN0cnVjdCBkbWFfYnVmZnBhcm1zICpkbWFwID0gTlVMTDsKLQlpbnQgZGV2ID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlpbnQgZGV2ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCiAJZGV2X2NsYXNzID0gZGV2ICYgMHgwZjsKIAlkZXYgPj49IDQ7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvdl9taWRpLmMgYi9zb3VuZC9vc3Mvdl9taWRpLmMKaW5kZXggZDk1MmIyMi4uMTAzOTQwZiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3ZfbWlkaS5jCisrKyBiL3NvdW5kL29zcy92X21pZGkuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJCXJldHVybjsKIAl9CiAJCi0JbT0oc3RydWN0IHZtaWRpX21lbW9yeSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2bWlkaV9tZW1vcnkpLCBHRlBfS0VSTkVMKTsKKwltID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtaWRpX21lbW9yeSksIEdGUF9LRVJORUwpOwogCWlmIChtID09IE5VTEwpCiAJewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJMb29wYmFjayBNSURJOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy93YXZlYXJ0aXN0LmMgYi9zb3VuZC9vc3Mvd2F2ZWFydGlzdC5jCmluZGV4IGM1YmYzNjMuLjI2YTdjNmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy93YXZlYXJ0aXN0LmMKKysrIGIvc291bmQvb3NzL3dhdmVhcnRpc3QuYwpAQCAtMTI2Nyw3ICsxMjY3LDcgQEAKIAljb25mX3ByaW50ZjIoZGV2X25hbWUsIGRldmMtPmh3LmlvX2Jhc2UsIGRldmMtPmh3LmlycSwKIAkJICAgICBkZXZjLT5ody5kbWEsIGRldmMtPmh3LmRtYTIpOwogCi0JcG9ydGMgPSAod2F2bmNfcG9ydF9pbmZvICopa21hbGxvYyhzaXplb2Yod2F2bmNfcG9ydF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJcG9ydGMgPSBrbWFsbG9jKHNpemVvZih3YXZuY19wb3J0X2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAocG9ydGMgPT0gTlVMTCkKIAkJZ290byBub21lbTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvTWFrZWZpbGUgYi9zb3VuZC9wY2kvYWM5Ny9NYWtlZmlsZQppbmRleCA3N2IzNDgyLi4zYzMyMjIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9NYWtlZmlsZQorKysgYi9zb3VuZC9wY2kvYWM5Ny9NYWtlZmlsZQpAQCAtMTAsMTEgKzEwLDkgQEAKIGVuZGlmCiAKIHNuZC1hazQ1MzEtY29kZWMtb2JqcyA6PSBhazQ1MzFfY29kZWMubwotc25kLWFjOTctYnVzLW9ianMgOj0gYWM5N19idXMubwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CiBvYmotJChDT05GSUdfU05EX0FDOTdfQ09ERUMpICs9IHNuZC1hYzk3LWNvZGVjLm8KIG9iai0kKENPTkZJR19TTkRfRU5TMTM3MCkgKz0gc25kLWFrNDUzMS1jb2RlYy5vCi1vYmotJChDT05GSUdfU05EX0FDOTdfQlVTKSArPSBzbmQtYWM5Ny1idXMubwogCiBvYmotbSA6PSAkKHNvcnQgJChvYmotbSkpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKaW5kZXggN2FiY2IxMC4uZDI5OTRjYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwpAQCAtMTI5LDkgKzEyOSw5IEBACiB7IDB4NDM0ZDQ5NDEsIDB4ZmZmZmZmZmYsICJDTUk5NzM4IiwJCXBhdGNoX2NtOTczOCwJTlVMTCB9LAogeyAweDQzNGQ0OTYxLCAweGZmZmZmZmZmLCAiQ01JOTczOSIsCQlwYXRjaF9jbTk3MzksCU5VTEwgfSwKIHsgMHg0MzRkNDk2OSwgMHhmZmZmZmZmZiwgIkNNSTk3ODAiLAkJcGF0Y2hfY205NzgwLAlOVUxMIH0sCi17IDB4NDM0ZDQ5NzgsIDB4ZmZmZmZmZmYsICJDTUk5NzYxIiwJCXBhdGNoX2NtOTc2MSwJTlVMTCB9LAoteyAweDQzNGQ0OTgyLCAweGZmZmZmZmZmLCAiQ01JOTc2MSIsCQlwYXRjaF9jbTk3NjEsCU5VTEwgfSwKLXsgMHg0MzRkNDk4MywgMHhmZmZmZmZmZiwgIkNNSTk3NjEiLAkJcGF0Y2hfY205NzYxLAlOVUxMIH0sCit7IDB4NDM0ZDQ5NzgsIDB4ZmZmZmZmZmYsICJDTUk5NzYxQSIsCQlwYXRjaF9jbTk3NjEsCU5VTEwgfSwKK3sgMHg0MzRkNDk4MiwgMHhmZmZmZmZmZiwgIkNNSTk3NjFCIiwJCXBhdGNoX2NtOTc2MSwJTlVMTCB9LAoreyAweDQzNGQ0OTgzLCAweGZmZmZmZmZmLCAiQ01JOTc2MUErIiwJCXBhdGNoX2NtOTc2MSwJTlVMTCB9LAogeyAweDQzNTI1OTAwLCAweGZmZmZmZmY4LCAiQ1M0Mjk3IiwJCU5VTEwsCQlOVUxMIH0sCiB7IDB4NDM1MjU5MTAsIDB4ZmZmZmZmZjgsICJDUzQyOTdBIiwJCXBhdGNoX2NpcnJ1c19zcGRpZiwJTlVMTCB9LAogeyAweDQzNTI1OTIwLCAweGZmZmZmZmY4LCAiQ1M0Mjk4IiwJCXBhdGNoX2NpcnJ1c19zcGRpZiwJCU5VTEwgfSwKQEAgLTM4Miw3ICszODIsNyBAQAogCXVuc2lnbmVkIHNob3J0IG9sZCwgbmV3OwogCiAJb2xkID0gc25kX2FjOTdfcmVhZF9jYWNoZShhYzk3LCByZWcpOwotCW5ldyA9IChvbGQgJiB+bWFzaykgfCB2YWx1ZTsKKwluZXcgPSAob2xkICYgfm1hc2spIHwgKHZhbHVlICYgbWFzayk7CiAJY2hhbmdlID0gb2xkICE9IG5ldzsKIAlpZiAoY2hhbmdlKSB7CiAJCWFjOTctPnJlZ3NbcmVnXSA9IG5ldzsKQEAgLTM5OSw3ICszOTksNyBAQAogCiAJbXV0ZXhfbG9jaygmYWM5Ny0+cGFnZV9tdXRleCk7CiAJb2xkID0gYWM5Ny0+c3BlYy5hZDE4eHgucGNtcmVnW2NvZGVjXTsKLQluZXcgPSAob2xkICYgfm1hc2spIHwgdmFsdWU7CisJbmV3ID0gKG9sZCAmIH5tYXNrKSB8ICh2YWx1ZSAmIG1hc2spOwogCWNoYW5nZSA9IG9sZCAhPSBuZXc7CiAJaWYgKGNoYW5nZSkgewogCQltdXRleF9sb2NrKCZhYzk3LT5yZWdfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCmluZGV4IDE1YmU2YmEuLmU4MTM5NjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKQEAgLTE0NjcsNyArMTQ2Nyw5IEBACiAJc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgQUM5N19BRF9DT0RFQ19DRkcsIDB4MDAwMik7CQkvLyBJRDFDCiAJYWM5Ny0+c3BlYy5hZDE4eHguY29kZWNfY2ZnW3VuY2hhaW5lZF9pZHhdID0gMHgwMDAyOwogCWlmIChjaWR4MSA+PSAwKSB7Ci0JCWlmIChwYXRjaF9hZDE4ODFfY2hhaW5lZDEoYWM5NywgY2lkeDEsIDB4MDAwNikpCQkvLyBTRElFIHwgSUQxQworCQlpZiAoY2lkeDIgPCAwKQorCQkJcGF0Y2hfYWQxODgxX2NoYWluZWQxKGFjOTcsIGNpZHgxLCAwKTsKKwkJZWxzZSBpZiAocGF0Y2hfYWQxODgxX2NoYWluZWQxKGFjOTcsIGNpZHgxLCAweDAwMDYpKQkvLyBTRElFIHwgSUQxQwogCQkJcGF0Y2hfYWQxODgxX2NoYWluZWQxKGFjOTcsIGNpZHgyLCAwKTsKIAkJZWxzZSBpZiAocGF0Y2hfYWQxODgxX2NoYWluZWQxKGFjOTcsIGNpZHgyLCAweDAwMDYpKQkvLyBTRElFIHwgSUQxQwogCQkJcGF0Y2hfYWQxODgxX2NoYWluZWQxKGFjOTcsIGNpZHgxLCAwKTsKQEAgLTIyNjEsNyArMjI2Myw4IEBACiAJZWxzZSB7IC8qIEFMQzY1NSAqLwogCQlpZiAoYWM5Ny0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDE0NjIgJiYKIAkJICAgIChhYzk3LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDEzMSB8fCAvKiBNU0kgUzI3MCBsYXB0b3AgKi8KLQkJICAgICBhYzk3LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE2MSkpIC8qIExHIEsxIEV4cHJlc3MgKi8KKwkJICAgICBhYzk3LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE2MSB8fCAvKiBMRyBLMSBFeHByZXNzICovCisJCSAgICAgYWM5Ny0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAzNTEpKSAgLyogTVNJIEw3MjUgbGFwdG9wICovCiAJCQl2YWwgJj0gfigxIDw8IDEpOyAvKiBQaW4gNDcgaXMgRUFQRCAoZm9yIGludGVybmFsIHNwZWFrZXIpICovCiAJCWVsc2UKIAkJCXZhbCB8PSAoMSA8PCAxKTsgLyogUGluIDQ3IGlzIHNwZGlmIGlucHV0IHBpbiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FkMTg4OS5jIGIvc291bmQvcGNpL2FkMTg4OS5jCmluZGV4IGNiZjgzMzFjLi45ODk3MGQ0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC04NTgsNyArODU4LDcgQEAKIAlzeW5jaHJvbml6ZV9pcnEoY2hpcC0+aXJxKTsKIAkKIAlpZiAoY2hpcC0+aXJxID49IDApCi0JCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQqKWNoaXApOworCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwogCiBza2lwX2h3OgogCWlmIChjaGlwLT5pb2Jhc2UpCkBAIC05NDUsNyArOTQ1LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CS8qIG9ubHkgbm93IGNhbiB3ZSBjYWxsIGFkMTg4OV9mcmVlICovCiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9hZDE4ODlfaW50ZXJydXB0LAotCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgY2FyZC0+ZHJpdmVyLCAodm9pZCopY2hpcCkpIHsKKwkJCUlSUUZfU0hBUkVELCBjYXJkLT5kcml2ZXIsIGNoaXApKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCBvYnRhaW4gSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9hZDE4ODlfZnJlZShjaGlwKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBhN2VkZDU2Li45MzI3YWIyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yMDk1LDcgKzIwOTUsNyBAQAogCQlzbmRfYWxpX2Rpc2FibGVfYWRkcmVzc19pbnRlcnJ1cHQoY29kZWMpOwogCWlmIChjb2RlYy0+aXJxID49IDApIHsKIAkJc3luY2hyb25pemVfaXJxKGNvZGVjLT5pcnEpOwotCQlmcmVlX2lycShjb2RlYy0+aXJxLCAodm9pZCAqKWNvZGVjKTsKKwkJZnJlZV9pcnEoY29kZWMtPmlycSwgY29kZWMpOwogCX0KIAlpZiAoY29kZWMtPnBvcnQpCiAJCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY29kZWMtPnBjaSk7CkBAIC0yMTkyLDcgKzIxOTIsOCBAQAogCQlyZXR1cm4gZXJyOwogCWNvZGVjLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGNvZGVjLT5wY2ksIDApOwogCi0JaWYgKHJlcXVlc3RfaXJxKGNvZGVjLT5wY2ktPmlycSwgc25kX2FsaV9jYXJkX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIkFMSSA1NDUxIiwgKHZvaWQgKiljb2RlYykpIHsKKwlpZiAocmVxdWVzdF9pcnEoY29kZWMtPnBjaS0+aXJxLCBzbmRfYWxpX2NhcmRfaW50ZXJydXB0LAorCQkJSVJRRl9TSEFSRUQsICJBTEkgNTQ1MSIsIGNvZGVjKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVxdWVzdCBpcnEuXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzMzAwLmMgYi9zb3VuZC9wY2kvYWxzMzAwLmMKaW5kZXggOTVmNzBmMy4uOWY0MDZmYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsczMwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHMzMDAuYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAJc25kX2FsczMwMF9kYmdjYWxsZW50ZXIoKTsKIAlzbmRfYWxzMzAwX3NldF9pcnFfZmxhZyhjaGlwLCBJUlFfRElTQUJMRSk7CiAJaWYgKGNoaXAtPmlycSA+PSAwKQotCQlmcmVlX2lycShjaGlwLT5pcnEsICh2b2lkICopY2hpcCk7CisJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwogCXBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOwogCWtmcmVlKGNoaXApOwpAQCAtNzIyLDggKzcyMiw4IEBACiAJZWxzZQogCQlpcnFfaGFuZGxlciA9IHNuZF9hbHMzMDBfaW50ZXJydXB0OwogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBpcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKLQkJCQkJY2FyZC0+c2hvcnRuYW1lLCAodm9pZCAqKWNoaXApKSB7CisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBpcnFfaGFuZGxlciwgSVJRRl9TSEFSRUQsCisJCQljYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfYWxzMzAwX2ZyZWUoY2hpcCk7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggZTNlOTlmMy4uNDc2YzM0MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMTU4Myw3ICsxNTgzLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfYXRpaXhwX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9hdGlpeHBfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCWNhcmQtPnNob3J0bmFtZSwgY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9hdGlpeHBfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwppbmRleCBkYzU0ZjJjLi5jYzJlNmI5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCkBAIC0xMjU2LDcgKzEyNTYsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9hdGlpeHBfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2F0aWl4cF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX2F0aWl4cF9mcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKaW5kZXggNmVkNWFkNS4uMjM4MTU0YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAl9CiAKIAlpZiAoKGVyciA9IHJlcXVlc3RfaXJxKHBjaS0+aXJxLCB2b3J0ZXhfaW50ZXJydXB0LAotCSAgICAgICAgICAgICAgICAgICAgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBDQVJEX05BTUVfU0hPUlQsCisJICAgICAgICAgICAgICAgICAgICAgICBJUlFGX1NIQVJFRCwgQ0FSRF9OQU1FX1NIT1JULAogCSAgICAgICAgICAgICAgICAgICAgICAgY2hpcCkpICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnFcbiIpOwogCQlnb3RvIGlycV9vdXQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXp0MzMyOC5jIGIvc291bmQvcGNpL2F6dDMzMjguYwppbmRleCAyNDE0ZWU2Li40M2VkZDI4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXp0MzMyOC5jCisrKyBiL3NvdW5kL3BjaS9henQzMzI4LmMKQEAgLTE1MTMsNyArMTUxMyw3IEBACiBfX2VuZF9odzoKIAlzbmRfYXpmMzMyOF9mcmVlX2pveXN0aWNrKGNoaXApOwogICAgICAgICBpZiAoY2hpcC0+aXJxID49IDApCi0JCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiAKQEAgLTE3MjQsNyArMTcyNCw4IEBACiAJY2hpcC0+c3ludGhfcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDMpOwogCWNoaXAtPm1peGVyX3BvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCA0KTsKIAotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2F6ZjMzMjhfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBjYXJkLT5zaG9ydG5hbWUsICh2b2lkICopY2hpcCkpIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9hemYzMzI4X2ludGVycnVwdCwKKwkJCUlSUUZfU0hBUkVELCBjYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X2VycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggZDMzYTM3MC4uYzNmM2RhMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTY5OSw3ICs2OTksNyBAQAogCQkJCQkJICAgICBTTkRSVl9ETUFfVFlQRV9ERVZfU0csCiAJCQkJCQkgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKIAkJCQkJCQkxMjggKiAxMDI0LAotCQkJCQkJCSgyNTUgKiA0MDkyICsgMTAyMykgJiB+MTAyMyk7CisJCQkJCQkJQUxJR04oMjU1ICogNDA5MiwgMTAyNCkpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYnQ4N3hfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKQEAgLTc0Nyw3ICs3NDcsNyBAQAogCXNuZF9idDg3eF93cml0ZWwoY2hpcCwgUkVHX0lOVF9NQVNLLCAwKTsKIAlzbmRfYnQ4N3hfd3JpdGVsKGNoaXAsIFJFR19JTlRfU1RBVCwgTVlfSU5URVJSVVBUUyk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9idDg3eF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9idDg3eF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJIkJ0ODd4IGF1ZGlvIiwgY2hpcCkpIHsKIAkJc25kX2J0ODd4X2ZyZWUoY2hpcCk7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycVxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNi5oIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDYuaAppbmRleCA5Y2I2NmM1Li5hYWFjNmU1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNi5oCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2LmgKQEAgLTU5MCw3ICs1OTAsNyBAQAogCXN0cnVjdCByZXNvdXJjZSAqcmVzX3BvcnQ7CiAJaW50IGlycTsKIAotCXVuc2lnbmVkIGludCByZXZpc2lvbjsJCS8qIGNoaXAgcmV2aXNpb24gKi8KKwl1bnNpZ25lZCBjaGFyIHJldmlzaW9uOwkJLyogY2hpcCByZXZpc2lvbiAqLwogCXVuc2lnbmVkIGludCBzZXJpYWw7ICAgICAgICAgICAgLyogc2VyaWFsIG51bWJlciAqLwogCXVuc2lnbmVkIHNob3J0IG1vZGVsOwkJLyogc3Vic3lzdGVtIGlkICovCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwppbmRleCA2ZmE0YTMwLi5mNjFmMDUyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCkBAIC0xNTQsNiArMTU0LDcgQEAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CiBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CitzdGF0aWMgdWludCBzdWJzeXN0ZW1bU05EUlZfQ0FSRFNdOyAvKiBGb3JjZSBjYXJkIHN1YnN5c3RlbSBtb2RlbCAqLwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIHRoZSBDQTAxMDYgc291bmRjYXJkLiIpOwpAQCAtMTYxLDYgKzE2Miw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciB0aGUgQ0EwMTA2IHNvdW5kY2FyZC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgdGhlIENBMDEwNiBzb3VuZGNhcmQuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoc3Vic3lzdGVtLCB1aW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3Vic3lzdGVtLCAiRm9yY2UgY2FyZCBzdWJzeXN0ZW0gbW9kZWwuIik7CiAKICNpbmNsdWRlICJjYTAxMDYuaCIKIApAQCAtMTk0LDYgKzE5NywxNyBAQAogCSAgIC5ncGlvX3R5cGUgPSAxLAogCSAgIC5pMmNfYWRjID0gMSwKIAkgICAuc3BpX2RhYyA9IDEgfSAsCisJIC8qIE5ldyBBdWRpZ3kgTFMuIEhhcyBhIGRpZmZlcmVudCBEQUMuICovCisJIC8qIFNCMDU3MDoKKwkgICogQ1RSTDpDQTAxMDYtREFUCisJICAqIEFEQzogV004Nzc1RURTCisJICAqIERBQzogV004NzY4R0VEUworCSAgKi8KKwkgeyAuc2VyaWFsID0gMHgxMDExMTEwMiwKKwkgICAubmFtZSAgID0gIkF1ZGlneSBTRSBPRU0gW1NCMDU3MGFdIiwKKwkgICAuZ3Bpb190eXBlID0gMSwKKwkgICAuaTJjX2FkYyA9IDEsCisJICAgLnNwaV9kYWMgPSAxIH0gLAogCSAvKiBNU0kgSzhOIERpYW1vbmQgTW90aGVyYm9hcmQgd2l0aCBvbmJvYXJkIFNCIExpdmUgMjRiaXQgd2l0aG91dCBBQzk3ICovCiAJIC8qIFNCMDQzOAogCSAgKiBDVFJMOkNBMDEwNi1EQVQKQEAgLTEwNDYsNyArMTA2MCw3IEBACiAKIAkvLyByZWxlYXNlIHRoZSBpcnEKIAlpZiAoY2hpcC0+aXJxID49IDApCi0JCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKIAlrZnJlZShjaGlwKTsKIAlyZXR1cm4gMDsKQEAgLTEyMjMsNyArMTIzNyw3IEBACiAJeyAweDE1LCBBRENfTVVYX0xJTkVJTiB9LCAgLyogQURDIE1peGVyIGNvbnRyb2wgKi8KIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYTAxMDZfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYTAxMDZfY3JlYXRlKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKIAkJCQkJIHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkJCSBzdHJ1Y3Qgc25kX2NhMDEwNiAqKnJjaGlwKQogewpAQCAtMTI2Nyw4ICsxMjgxLDcgQEAKIAl9CiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9jYTAxMDZfaW50ZXJydXB0LAotCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgInNuZF9jYTAxMDYiLAotCQkJKHZvaWQgKiljaGlwKSkgeworCQkJSVJRRl9TSEFSRUQsICJzbmRfY2EwMTA2IiwgY2hpcCkpIHsKIAkJc25kX2NhMDEwNl9mcmVlKGNoaXApOwogCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycVxuIik7CiAJCXJldHVybiAtRUJVU1k7CkBAIC0xMjgzLDIxICsxMjk2LDI5IEBACiAKIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCS8qIHJlYWQgcmV2aXNpb24gJiBzZXJpYWwgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2ksIFBDSV9SRVZJU0lPTl9JRCwgKGNoYXIgKikmY2hpcC0+cmV2aXNpb24pOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaSwgUENJX1JFVklTSU9OX0lELCAmY2hpcC0+cmV2aXNpb24pOwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2ksIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELCAmY2hpcC0+c2VyaWFsKTsKIAlwY2lfcmVhZF9jb25maWdfd29yZChwY2ksIFBDSV9TVUJTWVNURU1fSUQsICZjaGlwLT5tb2RlbCk7CiAjaWYgMQotCXByaW50ayhLRVJOX0lORk8gIk1vZGVsICUwNHggUmV2ICUwOHggU2VyaWFsICUwOHhcbiIsIGNoaXAtPm1vZGVsLAorCXByaW50ayhLRVJOX0lORk8gInNuZC1jYTAxMDY6IE1vZGVsICUwNHggUmV2ICUwOHggU2VyaWFsICUwOHhcbiIsIGNoaXAtPm1vZGVsLAogCSAgICAgICBjaGlwLT5yZXZpc2lvbiwgY2hpcC0+c2VyaWFsKTsKICNlbmRpZgogCXN0cmNweShjYXJkLT5kcml2ZXIsICJDQTAxMDYiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQ0EwMTA2Iik7CiAKIAlmb3IgKGMgPSBjYTAxMDZfY2hpcF9kZXRhaWxzOyBjLT5zZXJpYWw7IGMrKykgewotCQlpZiAoYy0+c2VyaWFsID09IGNoaXAtPnNlcmlhbCkKKwkJaWYgKHN1YnN5c3RlbVtkZXZdKSB7CisJCQlpZiAoYy0+c2VyaWFsID09IHN1YnN5c3RlbVtkZXZdKQorCQkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGMtPnNlcmlhbCA9PSBjaGlwLT5zZXJpYWwpCiAJCQlicmVhazsKIAl9CiAJY2hpcC0+ZGV0YWlscyA9IGM7CisJaWYgKHN1YnN5c3RlbVtkZXZdKSB7CisJCXByaW50ayhLRVJOX0lORk8gInNuZC1jYTAxMDY6IFNvdW5kIGNhcmQgbmFtZT0lcywgc3Vic3lzdGVtPTB4JXguIEZvcmNlZCB0byBzdWJzeXN0ZW09MHgleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGMtPm5hbWUsIGNoaXAtPnNlcmlhbCwgc3Vic3lzdGVtW2Rldl0pOworCX0KKwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCBpcnEgJWkiLAogCQljLT5uYW1lLCBjaGlwLT5wb3J0LCBjaGlwLT5pcnEpOwogCkBAIC0xNTQwLDcgKzE1NjEsNyBAQAogCWlmIChjYXJkID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKChlcnIgPSBzbmRfY2EwMTA2X2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKSkgPCAwKSB7CisJaWYgKChlcnIgPSBzbmRfY2EwMTA2X2NyZWF0ZShkZXYsIGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY21pcGNpLmMgYi9zb3VuZC9wY2kvY21pcGNpLmMKaW5kZXggMDA5M2NkMS4uNzBmYWNlNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NtaXBjaS5jCisrKyBiL3NvdW5kL3BjaS9jbWlwY2kuYwpAQCAtMjE5OCw3ICsyMTk4LDggQEAKIAkJdmFsID0gaW5iKGNtLT5pb2Jhc2UgKyBhcmdzLT5yZWcpOwogCWVsc2UKIAkJdmFsID0gc25kX2NtaXBjaV9yZWFkKGNtLCBhcmdzLT5yZWcpOwotCWNoYW5nZSA9ICh2YWwgJiBhcmdzLT5tYXNrKSAhPSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPyBhcmdzLT5tYXNrIDogMCk7CisJY2hhbmdlID0gKHZhbCAmIGFyZ3MtPm1hc2spICE9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA/IAorCQkJYXJncy0+bWFza19vbiA6IChhcmdzLT5tYXNrICYgfmFyZ3MtPm1hc2tfb24pKTsKIAlpZiAoY2hhbmdlKSB7CiAJCXZhbCAmPSB+YXJncy0+bWFzazsKIAkJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQpAQCAtMjg2Miw3ICsyODYzLDcgQEAKIAljbS0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9jbWlwY2lfaW50ZXJydXB0LAotCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgY2FyZC0+ZHJpdmVyLCBjbSkpIHsKKwkJCUlSUUZfU0hBUkVELCBjYXJkLT5kcml2ZXIsIGNtKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX2NtaXBjaV9mcmVlKGNtKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQyODEuYyBiL3NvdW5kL3BjaS9jczQyODEuYwppbmRleCAwOTA1ZmE4Li44ZTU1MTlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0MjgxLmMKKysrIGIvc291bmQvcGNpL2NzNDI4MS5jCkBAIC0xMzkxLDcgKzEzOTEsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfY3M0MjgxX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9jczQyODFfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSJDUzQyODEiLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX2NzNDI4MV9mcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCAyODA3Yjk3Li4yYWU1MzliIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtMzg2Nyw3ICszODY3LDcgQEAKIAkJfQogCX0KIAotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2NzNDZ4eF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfY3M0Nnh4X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkiQ1M0NlhYIiwgY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9jczQ2eHhfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKaW5kZXggMjQ0MTIzOC4uYjhlNzVlZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKQEAgLTMyMCw3ICszMjAsNyBAQAogCWNzNTUzNWF1LT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9jczU1MzVhdWRpb19pbnRlcnJ1cHQsCi0JCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCAiQ1M1NTM1IEF1ZGlvIiwgY3M1NTM1YXUpKSB7CisJCQlJUlFGX1NIQVJFRCwgIkNTNTUzNSBBdWRpbyIsIGNzNTUzNWF1KSkgewogCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIHNuZGZhaWw7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCBlNWU4OGZlLi4wNDdlMGI1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTE4NzIsNyArMTg3Miw3IEBACiAJREVfSU5JVCgoIlN0b3BwZWQuXG4iKSk7CiAKIAlpZiAoY2hpcC0+aXJxID49IDApCi0JCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAogCWlmIChjaGlwLT5kc3BfcmVnaXN0ZXJzKQogCQlpb3VubWFwKGNoaXAtPmRzcF9yZWdpc3RlcnMpOwpAQCAtMTk1MCw4ICsxOTUwLDggQEAKIAljaGlwLT5kc3BfcmVnaXN0ZXJzID0gKHZvbGF0aWxlIHUzMiBfX2lvbWVtICopCiAJCWlvcmVtYXBfbm9jYWNoZShjaGlwLT5kc3BfcmVnaXN0ZXJzX3BoeXMsIHN6KTsKIAotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VjaG9faW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCi0JCQkJCQlFQ0hPQ0FSRF9OQU1FLCAodm9pZCAqKWNoaXApKSB7CisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfZWNob19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJRUNIT0NBUkRfTkFNRSwgY2hpcCkpIHsKIAkJc25kX2VjaG9fZnJlZShjaGlwKTsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGdyYWIgaXJxXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlkaS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKaW5kZXggZTMxZjBmMS4uOTFmNWJmZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXNlbnQgPSBieXRlcyA9IDA7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAljaGlwLT5taWRpX2Z1bGwgPSAwOwotCWlmIChjaGlwLT5taWRpX291dCAmJiAhc25kX3Jhd21pZGlfdHJhbnNtaXRfZW1wdHkoY2hpcC0+bWlkaV9vdXQpKSB7CisJaWYgKCFzbmRfcmF3bWlkaV90cmFuc21pdF9lbXB0eShjaGlwLT5taWRpX291dCkpIHsKIAkJYnl0ZXMgPSBzbmRfcmF3bWlkaV90cmFuc21pdF9wZWVrKGNoaXAtPm1pZGlfb3V0LCBidWYsCiAJCQkJCQkgIE1JRElfT1VUX0JVRkZFUl9TSVpFIC0gMSk7CiAJCURFX01JRCgoIlRyeSB0byBzZW5kICVkIGJ5dGVzLi4uXG4iLCBieXRlcykpOwpAQCAtMjY0LDkgKzI2NCwxMSBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGNoaXAtPnRpbnVzZSkgewotCQkJZGVsX3RpbWVyKCZjaGlwLT50aW1lcik7CiAJCQljaGlwLT50aW51c2UgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKKwkJCWRlbF90aW1lcl9zeW5jKCZjaGlwLT50aW1lcik7CiAJCQlERV9NSUQoKCJUaW1lciByZW1vdmVkXG4iKSk7CisJCQlyZXR1cm47CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5sb2NrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKaW5kZXggOGJjNGZmYS4uOTcyZWM0MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKQEAgLTc1OSw3ICs3NTksNyBAQAogCWZyZWVfcG1fYnVmZmVyKGVtdSk7CiAjZW5kaWYKIAlpZiAoZW11LT5pcnEgPj0gMCkKLQkJZnJlZV9pcnEoZW11LT5pcnEsICh2b2lkICopZW11KTsKKwkJZnJlZV9pcnEoZW11LT5pcnEsIGVtdSk7CiAJaWYgKGVtdS0+cG9ydCkKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhlbXUtPnBjaSk7CiAJaWYgKGVtdS0+Y2FyZF9jYXBhYmlsaXRpZXMtPmNhMDE1MV9jaGlwKSAvKiBQMTZWICovCQpAQCAtMTI0Niw3ICsxMjQ2LDggQEAKIAl9CiAJZW11LT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9lbXUxMGsxX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIkVNVTEwSzEiLCAodm9pZCAqKWVtdSkpIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9lbXUxMGsxX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkiRU1VMTBLMSIsIGVtdSkpIHsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycm9yOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCmluZGV4IGM0NjkwNWEuLjIxOTliNDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJc3RydWN0IHJlc291cmNlICpyZXNfcG9ydDsKIAlpbnQgaXJxOwogCi0JdW5zaWduZWQgaW50IHJldmlzaW9uOwkJLyogY2hpcCByZXZpc2lvbiAqLworCXVuc2lnbmVkIGNoYXIgcmV2aXNpb247CQkvKiBjaGlwIHJldmlzaW9uICovCiAJdW5zaWduZWQgaW50IHNlcmlhbDsgICAgICAgICAgICAvKiBzZXJpYWwgbnVtYmVyICovCiAJdW5zaWduZWQgc2hvcnQgbW9kZWw7CQkvKiBzdWJzeXN0ZW0gaWQgKi8KIApAQCAtNzYwLDcgKzc2MCw3IEBACiAKIAkvLyByZWxlYXNlIHRoZSBpcnEKIAlpZiAoY2hpcC0+aXJxID49IDApCi0JCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAogCS8vIHJlbGVhc2UgdGhlIERNQQogCWlmIChjaGlwLT5kbWFfYnVmZmVyLmFyZWEpIHsKQEAgLTkyNyw4ICs5MjcsNyBAQAogCX0KIAogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VtdTEwazF4X2ludGVycnVwdCwKLQkJCUlSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsICJFTVUxMEsxWCIsCi0JCQkodm9pZCAqKWNoaXApKSB7CisJCQlJUlFGX1NIQVJFRCwgIkVNVTEwSzFYIiwgY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiZW11MTBrMXg6IGNhbm5vdCBncmFiIGlycSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfZW11MTBrMXhfZnJlZShjaGlwKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTk0Myw3ICs5NDIsNyBAQAogCiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAkvKiByZWFkIHJldmlzaW9uICYgc2VyaWFsICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpLCBQQ0lfUkVWSVNJT05fSUQsIChjaGFyICopJmNoaXAtPnJldmlzaW9uKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2ksIFBDSV9SRVZJU0lPTl9JRCwgJmNoaXAtPnJldmlzaW9uKTsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwgJmNoaXAtPnNlcmlhbCk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpLCBQQ0lfU1VCU1lTVEVNX0lELCAmY2hpcC0+bW9kZWwpOwogCXNuZF9wcmludGsoS0VSTl9JTkZPICJNb2RlbCAlMDR4IFJldiAlMDh4IFNlcmlhbCAlMDh4XG4iLCBjaGlwLT5tb2RlbCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbnMxMzcwLmMgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCmluZGV4IGQyYTgxMWYuLmE4NGY2YjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbnMxMzcwLmMKKysrIGIvc291bmQvcGNpL2VuczEzNzAuYwpAQCAtMjE0MSw3ICsyMTQxLDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJZW5zb25pcS0+cG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2F1ZGlvcGNpX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9hdWRpb3BjaV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJIkVuc29uaXEgQXVkaW9QQ0kiLCBlbnNvbmlxKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX2Vuc29uaXFfZnJlZShlbnNvbmlxKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5MzguYyBiL3NvdW5kL3BjaS9lczE5MzguYwppbmRleCAxYThkMzZkLi42NmFjMjZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTM4LmMKKysrIGIvc291bmQvcGNpL2VzMTkzOC5jCkBAIC0xNTA4LDcgKzE1MDgsNyBAQAogCX0KIAogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VzMTkzOF9pbnRlcnJ1cHQsCi0JCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCAiRVMxOTM4IiwgY2hpcCkpIHsKKwkJCUlSUUZfU0hBUkVELCAiRVMxOTM4IiwgY2hpcCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlczE5Mzg6IHVuYWJsZSB0byBncmFiIElSUSAlZCwgIgogCQkgICAgICAgImRpc2FibGluZyBkZXZpY2VcbiIsIHBjaS0+aXJxKTsKIAkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKQEAgLTE2MzEsNyArMTYzMSw3IEBACiAJY2hpcC0+dmNfcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDIpOwogCWNoaXAtPm1wdV9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMyk7CiAJY2hpcC0+Z2FtZV9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgNCk7Ci0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfZXMxOTM4X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9lczE5MzhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSJFUzE5MzgiLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX2VzMTkzOF9mcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTk2OC5jIGIvc291bmQvcGNpL2VzMTk2OC5jCmluZGV4IDA5MmRhNTNlLi5kYzg0YzE4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC0xMzM3LDcgKzEzMzcsNyBAQAogCXN0cnVjdCBlc21fbWVtb3J5ICpidWY7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAkKLQlzaXplID0gKChzaXplICsgRVNNX01FTV9BTElHTiAtIDEpIC8gRVNNX01FTV9BTElHTikgKiBFU01fTUVNX0FMSUdOOworCXNpemUgPSBBTElHTihzaXplLCBFU01fTUVNX0FMSUdOKTsKIAltdXRleF9sb2NrKCZjaGlwLT5tZW1vcnlfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2gocCwgJmNoaXAtPmJ1Zl9saXN0KSB7CiAJCWJ1ZiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGVzbV9tZW1vcnksIGxpc3QpOwpAQCAtMjQ2Miw3ICsyNDYyLDcgQEAKIAl9CiAKIAlpZiAoY2hpcC0+aXJxID49IDApCi0JCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQgKiljaGlwKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAlzbmRfZXMxOTY4X2ZyZWVfZ2FtZXBvcnQoY2hpcCk7CiAJY2hpcC0+bWFzdGVyX3N3aXRjaCA9IE5VTEw7CiAJY2hpcC0+bWFzdGVyX3ZvbHVtZSA9IE5VTEw7CkBAIC0yNTUyLDggKzI1NTIsOCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAljaGlwLT5pb19wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7Ci0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfZXMxOTY4X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKLQkJCSJFU1MgTWFlc3RybyIsICh2b2lkKiljaGlwKSkgeworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VzMTk2OF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJIkVTUyBNYWVzdHJvIiwgY2hpcCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9lczE5NjhfZnJlZShjaGlwKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9mbTgwMS5jIGIvc291bmQvcGNpL2ZtODAxLmMKaW5kZXggNzdlM2Q1Yy4uYjdiMzYxYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ZtODAxLmMKKysrIGIvc291bmQvcGNpL2ZtODAxLmMKQEAgLTEzOTUsNyArMTM5NSw3IEBACiAJfQogCWNoaXAtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKIAlpZiAoKHRlYTU3NXhfdHVuZXIgJiAweDAwMTApID09IDApIHsKLQkJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfZm04MDFfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAorCQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9mbTgwMV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCSJGTTgwMSIsIGNoaXApKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIGNoaXAtPmlycSk7CiAJCQlzbmRfZm04MDFfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCmluZGV4IDcxNDgyYzEuLjE4YmJjODcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtMTM2Nyw5ICsxMzY3LDYgQEAKIAl7IDE3NjQwMCwgU05EUlZfUENNX1JBVEVfMTc2NDAwLCAweDU4MDAgfSwvKiA0IHggNDQgKi8KIAl7IDE5MjAwMCwgU05EUlZfUENNX1JBVEVfMTkyMDAwLCAweDE4MDAgfSwgLyogNCB4IDQ4ICovCiAKLQkvKiBub3QgYXV0b2RldGVjdGVkIHZhbHVlICovCi0JeyA5NjAwLCBTTkRSVl9QQ01fUkFURV9LTk9ULCAweDA0MDAgfSwgLyogMS81IHggNDggKi8KLQogCXsgMCB9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYwppbmRleCA5N2U5YWYxLi4xNTg5ZDJmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCkBAIC00ODUsOCArNDg1LDkgQEAKIAkJCXJldHVybiAiRnJvbnQgQXV4IjsKIAkJcmV0dXJuICJBdXgiOwogCWNhc2UgQUNfSkFDS19NSUNfSU46Ci0JCWlmIChub2RlLT5waW5fY2FwcyAmCi0JCSAgICAoQUNfUElOQ0FQX1ZSRUZfODAgPDwgQUNfUElOQ0FQX1ZSRUZfU0hJRlQpKQorCQlpZiAocGluY3RsICYmCisJCSAgICAobm9kZS0+cGluX2NhcHMgJgorCQkgICAgIChBQ19QSU5DQVBfVlJFRl84MCA8PCBBQ19QSU5DQVBfVlJFRl9TSElGVCkpKQogCQkJKnBpbmN0bCB8PSBBQ19QSU5DVExfVlJFRl84MDsKIAkJaWYgKChsb2NhdGlvbiAmIDB4MGYpID09IEFDX0pBQ0tfTE9DX0ZST05UKQogCQkJcmV0dXJuICJGcm9udCBNaWMiOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggZTM1Y2ZkMy4uMWE3ZTgyMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC04Myw2ICs4Myw3IEBACiAJCQkgIntJbnRlbCwgSUNIN30sIgogCQkJICJ7SW50ZWwsIEVTQjJ9LCIKIAkJCSAie0ludGVsLCBJQ0g4fSwiCisJCQkgIntJbnRlbCwgSUNIOX0sIgogCQkJICJ7QVRJLCBTQjQ1MH0sIgogCQkJICJ7QVRJLCBTQjYwMH0sIgogCQkJICJ7QVRJLCBSUzYwMH0sIgpAQCAtMTM4MCw3ICsxMzgxLDggQEAKIAogc3RhdGljIGludCBhenhfYWNxdWlyZV9pcnEoc3RydWN0IGF6eCAqY2hpcCwgaW50IGRvX2Rpc2Nvbm5lY3QpCiB7Ci0JaWYgKHJlcXVlc3RfaXJxKGNoaXAtPnBjaS0+aXJxLCBhenhfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAorCWlmIChyZXF1ZXN0X2lycShjaGlwLT5wY2ktPmlycSwgYXp4X2ludGVycnVwdCwKKwkJCWNoaXAtPm1zaSA/IDAgOiBJUlFGX1NIQVJFRCwKIAkJCSJIREEgSW50ZWwiLCBjaGlwKSkgewogCQlwcmludGsoS0VSTl9FUlIgImhkYS1pbnRlbDogdW5hYmxlIHRvIGdyYWIgSVJRICVkLCAiCiAJCSAgICAgICAiZGlzYWJsaW5nIGRldmljZVxuIiwgY2hpcC0+cGNpLT5pcnEpOwpAQCAtMTcxMCw2ICsxNzEyLDggQEAKIAl7IDB4ODA4NiwgMHgyN2Q4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX0lDSCB9LCAvKiBJQ0g3ICovCiAJeyAweDgwODYsIDB4MjY5YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9JQ0ggfSwgLyogRVNCMiAqLwogCXsgMHg4MDg2LCAweDI4NGIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfSUNIIH0sIC8qIElDSDggKi8KKwl7IDB4ODA4NiwgMHgyOTNlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX0lDSCB9LCAvKiBJQ0g5ICovCisJeyAweDgwODYsIDB4MjkzZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9JQ0ggfSwgLyogSUNIOSAqLwogCXsgMHgxMDAyLCAweDQzN2IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJIH0sIC8qIEFUSSBTQjQ1MCAqLwogCXsgMHgxMDAyLCAweDQzODMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJIH0sIC8qIEFUSSBTQjYwMCAqLwogCXsgMHgxMDAyLCAweDc5M2IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfQVRJSERNSSB9LCAvKiBBVEkgUlM2MDAgSERNSSAqLwpAQCAtMTcxNyw5ICsxNzIxLDE0IEBACiAJeyAweDExMDYsIDB4MzI4OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9WSUEgfSwgLyogVklBIFZUODI1MS9WVDgyMzdBICovCiAJeyAweDEwMzksIDB4NzUwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9TSVMgfSwgLyogU0lTOTY2ICovCiAJeyAweDEwYjksIDB4NTQ2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9VTEkgfSwgLyogVUxJIE01NDYxICovCi0JeyAweDEwZGUsIDB4MDI2YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9OVklESUEgfSwgLyogTlZJRElBIDAyNmMgKi8KLQl7IDB4MTBkZSwgMHgwMzcxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBWlhfRFJJVkVSX05WSURJQSB9LCAvKiBOVklESUEgMDM3MSAqLwotCXsgMHgxMGRlLCAweDAzZjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEFaWF9EUklWRVJfTlZJRElBIH0sIC8qIE5WSURJQSAwM2YwICovCisJeyAweDEwZGUsIDB4MDI2YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9OVklESUEgfSwgLyogTlZJRElBIE1DUDUxICovCisJeyAweDEwZGUsIDB4MDM3MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9OVklESUEgfSwgLyogTlZJRElBIE1DUDU1ICovCisJeyAweDEwZGUsIDB4MDNlNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9OVklESUEgfSwgLyogTlZJRElBIE1DUDYxICovCisJeyAweDEwZGUsIDB4MDNmMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9OVklESUEgfSwgLyogTlZJRElBIE1DUDYxICovCisJeyAweDEwZGUsIDB4MDQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9OVklESUEgfSwgLyogTlZJRElBIE1DUDY1ICovCisJeyAweDEwZGUsIDB4MDQ0YiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9OVklESUEgfSwgLyogTlZJRElBIE1DUDY1ICovCisJeyAweDEwZGUsIDB4MDU1YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9OVklESUEgfSwgLyogTlZJRElBIE1DUDY3ICovCisJeyAweDEwZGUsIDB4MDU1ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQVpYX0RSSVZFUl9OVklESUEgfSwgLyogTlZJRElBIE1DUDY3ICovCiAJeyAwLCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF6eF9pZHMpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCmluZGV4IGQ3MzdmMTcuLjE3ZGY0ZDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAlpZiAobmFtZXNbd2lkX3ZhbHVlXSkKIAkJcmV0dXJuIG5hbWVzW3dpZF92YWx1ZV07CiAJZWxzZQotCQlyZXR1cm4gIlVOS09XTiBXaWRnZXQiOworCQlyZXR1cm4gIlVOS05PV04gV2lkZ2V0IjsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfYW1wX2NhcHMoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLApAQCAtODgsNiArODgsNDggQEAKIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogfQogCitzdGF0aWMgdm9pZCBwcmludF9wY21fcmF0ZXMoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgcGNtKQoreworCXN0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9IHsKKwkJODAwMCwgMTEwMjUsIDE2MDAwLCAyMjA1MCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCwgODgyMDAsCisJCTk2MDAwLCAxNzY0MDAsIDE5MjAwMCwgMzg0MDAwCisJfTsKKwlpbnQgaTsKKworCXBjbSAmPSBBQ19TVVBQQ01fUkFURVM7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIHJhdGVzIFsweCV4XToiLCBwY20pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhdGVzKTsgaSsrKSAKKwkJaWYgKHBjbSAmICgxIDw8IGkpKQorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICVkIiwgcmF0ZXNbaV0pOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3BjbV9iaXRzKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHBjbSkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IGJpdHNbXSA9IHsgOCwgMTYsIDIwLCAyNCwgMzIgfTsKKwlpbnQgaTsKKworCXBjbSA9IChwY20gPj4gMTYpICYgMHhmZjsKKwlzbmRfaXByaW50ZihidWZmZXIsICIgICAgYml0cyBbMHgleF06IiwgcGNtKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiaXRzKTsgaSsrKQorCQlpZiAocGNtICYgKDEgPDwgaSkpCisJCQlzbmRfaXByaW50ZihidWZmZXIsICIgJWQiLCBiaXRzW2ldKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9wY21fZm9ybWF0cyhzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgc3RyZWFtcykKK3sKKwlzbmRfaXByaW50ZihidWZmZXIsICIgICAgZm9ybWF0cyBbMHgleF06Iiwgc3RyZWFtcyAmIDB4Zik7CisJaWYgKHN0cmVhbXMgJiBBQ19TVVBGTVRfUENNKQorCQlzbmRfaXByaW50ZihidWZmZXIsICIgUENNIik7CisJaWYgKHN0cmVhbXMgJiBBQ19TVVBGTVRfRkxPQVQzMikKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiIEZMT0FUIik7CisJaWYgKHN0cmVhbXMgJiBBQ19TVVBGTVRfQUMzKQorCQlzbmRfaXByaW50ZihidWZmZXIsICIgQUMzIik7CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfcGNtX2NhcHMoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAogCQkJICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCiB7CkBAIC05Nyw4ICsxMzksOSBAQAogCQlzbmRfaXByaW50ZihidWZmZXIsICJOL0FcbiIpOwogCQlyZXR1cm47CiAJfQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgInJhdGVzIDB4JTAzeCwgYml0cyAweCUwMngsIHR5cGVzIDB4JXhcbiIsCi0JCSAgICBwY20gJiBBQ19TVVBQQ01fUkFURVMsIChwY20gPj4gMTYpICYgMHhmZiwgc3RyZWFtICYgMHhmKTsKKwlwcmludF9wY21fcmF0ZXMoYnVmZmVyLCBwY20pOworCXByaW50X3BjbV9iaXRzKGJ1ZmZlciwgcGNtKTsKKwlwcmludF9wY21fZm9ybWF0cyhidWZmZXIsIHN0cmVhbSk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfamFja19sb2NhdGlvbih1MzIgY2ZnKQpAQCAtMjEwLDcgKzI1Myw3IEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiUmV2aXNpb24gSWQ6IDB4JXhcbiIsIGNvZGVjLT5yZXZpc2lvbl9pZCk7CiAJaWYgKCEgY29kZWMtPmFmZykKIAkJcmV0dXJuOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRlZmF1bHQgUENNOiAiKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJEZWZhdWx0IFBDTTpcbiIpOwogCXByaW50X3BjbV9jYXBzKGJ1ZmZlciwgY29kZWMsIGNvZGVjLT5hZmcpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRlZmF1bHQgQW1wLUluIGNhcHM6ICIpOwogCXByaW50X2FtcF9jYXBzKGJ1ZmZlciwgY29kZWMsIGNvZGVjLT5hZmcsIEhEQV9JTlBVVCk7CkBAIC0yNzgsNyArMzIxLDcgQEAKIAogCQlpZiAoKHdpZF90eXBlID09IEFDX1dJRF9BVURfT1VUIHx8IHdpZF90eXBlID09IEFDX1dJRF9BVURfSU4pICYmCiAJCSAgICAod2lkX2NhcHMgJiBBQ19XQ0FQX0ZPUk1BVF9PVlJEKSkgewotCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICBQQ006ICIpOworCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICBQQ006XG4iKTsKIAkJCXByaW50X3BjbV9jYXBzKGJ1ZmZlciwgY29kZWMsIG5pZCk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggZWRkMjJkZS4uMDc2MzY1YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC03OTQsNiArNzk0LDggQEAKIAl7IC5tb2RlbG5hbWUgPSAiM3N0YWNrIiwJLmNvbmZpZyA9IEFEMTk4NkFfM1NUQUNLIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTBkZSwgLnBjaV9zdWJkZXZpY2UgPSAweGNiODQsCiAJICAuY29uZmlnID0gQUQxOTg2QV8zU1RBQ0sgfSwgLyogQVNVUyBBOE4tVk0gQ1NNICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDgxN2YsCisJICAuY29uZmlnID0gQUQxOTg2QV8zU1RBQ0sgfSwgLyogQVNVUyBQNVAtTDIgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4ODFiMywKIAkgIC5jb25maWcgPSBBRDE5ODZBXzNTVEFDSyB9LCAvKiBBU1VTIFA1UkQyLVZNIC8gUDVHUEwtWCBTRSAqLwogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHg4MWNiLApAQCAtODExLDcgKzgxMyw3IEBACiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTQ0ZCwgLnBjaV9zdWJkZXZpY2UgPSAweGMwMjQsCiAJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBTYW1zdW5nIFI2NS1UMjMwMCBDaGFyaXMgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxNDRkLCAucGNpX3N1YmRldmljZSA9IDB4YzAyNiwKLQkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIFNhbXN1bmcgWDEwLVQyMzAwIEN1bGVzYSAqLworCSAgLmNvbmZpZyA9IEFEMTk4NkFfTEFQVE9QX0VBUEQgfSwgLyogU2Ftc3VuZyBYMTEtVDIzMDAgQ3VsZXNhICovCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDExNTMsCiAJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBBU1VTIE05ICovCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDEyMTMsCkBAIC04MjIsNiArODI0LDggQEAKIAkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIEFTVVMgVTVGICovCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDEyOTcsCiAJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBBU1VTIFo2MkYgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTJiMywKKwkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIEFTVVMgVjFqICovCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDMwYWYsCiAJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBIUCBDb21wYXEgUHJlc2FyaW8gQjI4MDAgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxN2FhLCAucGNpX3N1YmRldmljZSA9IDB4MjA2NiwKQEAgLTE2NDAsNyArMTY0NCw3IEBACiAJaW50IGVyciA9IHNuZF9oZGFfY2hfbW9kZV9wdXQoY29kZWMsIHVjb250cm9sLCBzcGVjLT5jaGFubmVsX21vZGUsCiAJCQkJICAgICAgc3BlYy0+bnVtX2NoYW5uZWxfbW9kZSwKIAkJCQkgICAgICAmc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzKTsKLQlpZiAoISBlcnIgJiYgc3BlYy0+bmVlZF9kYWNfZml4KQorCWlmIChlcnIgPj0gMCAmJiBzcGVjLT5uZWVkX2RhY19maXgpCiAJCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzIC8gMjsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBmYjk2MTQ0Li40ZTBjM2MxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAJaW50IGVyciA9IHNuZF9oZGFfY2hfbW9kZV9wdXQoY29kZWMsIHVjb250cm9sLCBzcGVjLT5jaGFubmVsX21vZGUsCiAJCQkJICAgICAgc3BlYy0+bnVtX2NoYW5uZWxfbW9kZSwKIAkJCQkgICAgICAmc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzKTsKLQlpZiAoISBlcnIgJiYgc3BlYy0+bmVlZF9kYWNfZml4KQorCWlmIChlcnIgPj0gMCAmJiBzcGVjLT5uZWVkX2RhY19maXgpCiAJCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzIC8gMjsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTA3MCw2ICs1MDcwLDggQEAKIAl7IC5tb2RlbG5hbWUgPSAiNnN0YWNrLWRpZyIsIC5jb25maWcgPSBBTEM4ODNfNlNUX0RJRyB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDE0NjIsIC5wY2lfc3ViZGV2aWNlID0gMHg2NjY4LAogCSAgLmNvbmZpZyA9IEFMQzg4M182U1RfRElHIH0sIC8qIE1TSSAgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxNDYyLCAucGNpX3N1YmRldmljZSA9IDB4NzI4MCwKKwkgIC5jb25maWcgPSBBTEM4ODNfNlNUX0RJRyB9LCAvKiBNU0kgSzlBIFBsYXRpbnVtIChNUy03MjgwKSAqLwogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNWIsIC5wY2lfc3ViZGV2aWNlID0gMHg2NjY4LAogCSAgLmNvbmZpZyA9IEFMQzg4M182U1RfRElHIH0sIC8qIEZveGNvbm4gKi8KIAl7IC5tb2RlbG5hbWUgPSAiNnN0YWNrLWRpZy1kZW1vIiwgLmNvbmZpZyA9IEFMQzg4OF9ERU1PX0JPQVJEIH0sCkBAIC01ODcyLDYgKzU4NzQsOCBAQAogCXsgLm1vZGVsbmFtZSA9ICJocC1icGMiLCAuY29uZmlnID0gQUxDMjYyX0hQX0JQQyB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwM2MsIC5wY2lfc3ViZGV2aWNlID0gMHgyODBjLAogCSAgLmNvbmZpZyA9IEFMQzI2Ml9IUF9CUEMgfSwgLyogeHc0NDAwICovCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDI4MDEsCisJICAuY29uZmlnID0gQUxDMjYyX0hQX0JQQyB9LCAvKiBxOTY1ICovCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDMwMTQsCiAJICAuY29uZmlnID0gQUxDMjYyX0hQX0JQQyB9LCAvKiB4dzY0MDAgKi8KIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDNjLCAucGNpX3N1YmRldmljZSA9IDB4MzAxNSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpMzA1NC5jCmluZGV4IGNjODdkZmYuLmVkNWU0NWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaTMwNTQuYwpAQCAtMjQzLDcgKzI0Myw4IEBACiAKIAlpZigodmFsJlNJMzA1NF9NRUlfUkVBRFkpICE9IFNJMzA1NF9NRUlfUkVBRFkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAic2kzMDU0OiBjYW5ub3QgaW5pdGlhbGl6ZS4gRVhUIE1JRCA9ICUwNHhcbiIsIHZhbCk7Ci0JCXJldHVybiAtRUFDQ0VTOworCQkvKiBsZXQncyBwcmF5IHRoYXQgdGhpcyBpcyBubyBmYXRhbCBlcnJvciAqLworCQkvKiByZXR1cm4gLUVBQ0NFUzsgKi8KIAl9CiAKIAlTRVRfUkVHKGNvZGVjLCBTSTMwNTRfR1BJT19QT0xBUklUWSwgMHhmZmZmKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCA4YTU3NmI3Li44YmEzMWNmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC0yNjE0LDcgKzI2MTQsNyBAQAogCWljZS0+ZG1hcGF0aF9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMik7CiAJaWNlLT5wcm9maV9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMyk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9pY2UxNzEyX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9pY2UxNzEyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkiSUNFMTcxMiIsIGljZSkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9pY2UxNzEyX2ZyZWUoaWNlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwppbmRleCBlOWNiZmRmLi4zZTNhMTAyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCkBAIC0yMjUzLDcgKzIyNTMsNyBAQAogCWljZS0+cHJvZmlfcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDEpOwogCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfdnQxNzI0X2ludGVycnVwdCwKLQkJCUlSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsICJJQ0UxNzI0IiwgaWNlKSkgeworCQkJSVJRRl9TSEFSRUQsICJJQ0UxNzI0IiwgaWNlKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX3Z0MTcyNF9mcmVlKGljZSk7CiAJCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCA5YzFiY2U3Li4zMGFhYTYwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtMjUwOSw3ICsyNTA5LDcgQEAKIAl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9pbnRlbDh4MF9pbnRlcnJ1cHQsCi0JCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCBjYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CisJCQlJUlFGX1NIQVJFRCwgY2FyZC0+c2hvcnRuYW1lLCBjaGlwKSkgewogCQlwcmludGsoS0VSTl9FUlIgImludGVsOHgwOiB1bmFibGUgdG8gZ3JhYiBJUlEgJWQsICIKIAkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CkBAIC0yODg3LDcgKzI4ODcsNyBAQAogCiAJLyogcmVxdWVzdCBpcnEgYWZ0ZXIgaW5pdGlhbGl6YWluZyBpbnRfc3RhX21hc2ssIGV0YyAqLwogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ludGVsOHgwX2ludGVycnVwdCwKLQkJCUlSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsIGNhcmQtPnNob3J0bmFtZSwgY2hpcCkpIHsKKwkJCUlSUUZfU0hBUkVELCBjYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfaW50ZWw4eDBfZnJlZShjaGlwKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwppbmRleCBiZDQ2N2M1Li4wOWRjZjkyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCkBAIC0xMDcxLDcgKzEwNzEsNyBAQAogCX0KIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ludGVsOHgwX2ludGVycnVwdCwKLQkJCUlSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsIGNhcmQtPnNob3J0bmFtZSwgY2hpcCkpIHsKKwkJCUlSUUZfU0hBUkVELCBjYXJkLT5zaG9ydG5hbWUsIGNoaXApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaW50ZWw4eDBtOiB1bmFibGUgdG8gZ3JhYiBJUlEgJWQsICIKIAkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iLCBwY2ktPmlycSk7CiAJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CkBAIC0xMjA1LDcgKzEyMDUsNyBAQAogCX0KIAogIHBvcnRfaW5pdGVkOgotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ludGVsOHgwX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9pbnRlbDh4MF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX2ludGVsOHgwX2ZyZWUoY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IGZhOGNkOGMuLjM0NWVlZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC0yMjMzLDcgKzIyMzMsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgZXJyID0gcmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9rb3JnMTIxMl9pbnRlcnJ1cHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfU0hBUkVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAia29yZzEyMTIiLCBrb3JnMTIxMik7CiAKICAgICAgICAgaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21hZXN0cm8zLmMgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwppbmRleCA4Y2FiMzQyLi42ZWZlNmQ1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWFlc3RybzMuYworKysgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwpAQCAtMjM3Nyw3ICsyMzc3LDcgQEAKIAkgKiBzaGlmdGVkIGxpc3QgYWRkcmVzcyBpcyBhbGlnbmVkLgogCSAqIGxpc3QgYWRkcmVzcyA9IChtZW0gYWRkcmVzcyA+PiAxKSA+PiA3OwogCSAqLwotCWRhdGFfYnl0ZXMgPSAoZGF0YV9ieXRlcyArIDI1NSkgJiB+MjU1OworCWRhdGFfYnl0ZXMgPSBBTElHTihkYXRhX2J5dGVzLCAyNTYpOwogCWFkZHJlc3MgPSAweDExMDAgKyAoKGRhdGFfYnl0ZXMvMikgKiBpbmRleCk7CiAKIAlpZiAoKGFkZHJlc3MgKyAoZGF0YV9ieXRlcy8yKSkgPj0gMHgxYzAwKSB7CkBAIC0yNzYyLDcgKzI3NjIsNyBAQAogCiAJdGFza2xldF9pbml0KCZjaGlwLT5od3ZvbF90cSwgc25kX20zX3VwZGF0ZV9od192b2x1bWUsICh1bnNpZ25lZCBsb25nKWNoaXApOwogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbTNfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAorCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX20zX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQljYXJkLT5kcml2ZXIsIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfbTNfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCmluZGV4IDIxNmFlZTUuLjIxMzg2ZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKIAogCS8qIHJlbGVhc2UgaXJxICAqLwogCWlmIChtZ3ItPmlycSA+PSAwKQotCQlmcmVlX2lycShtZ3ItPmlycSwgKHZvaWQgKiltZ3IpOworCQlmcmVlX2lycShtZ3ItPmlycSwgbWdyKTsKIAogCS8qIHJlc2V0IGJvYXJkIGlmIHNvbWUgZmlybXdhcmUgd2FzIGxvYWRlZCAqLwogCWlmKG1nci0+ZHNwX2xvYWRlZCkgewpAQCAtMTMxOSw3ICsxMzE5LDggQEAKIAkJCQkJCSAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpLCBpKSk7CiAJfQogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbWl4YXJ0X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgQ0FSRF9OQU1FLCAodm9pZCAqKW1ncikpIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9taXhhcnRfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCUNBUkRfTkFNRSwgbWdyKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX21peGFydF9mcmVlKG1ncik7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCmluZGV4IDk0NWQyMWIuLjg3OWUzMWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCisrKyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCkBAIC00NjUsNyArNDY1LDcgQEAKIHsKIAltdXRleF9sb2NrKCZjaGlwLT5pcnFfbXV0ZXgpOwogCWlmIChjaGlwLT5pcnEgPCAwKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShjaGlwLT5wY2ktPmlycSwgY2hpcC0+aW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAorCQlpZiAocmVxdWVzdF9pcnEoY2hpcC0+cGNpLT5pcnEsIGNoaXAtPmludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJY2hpcC0+Y2FyZC0+ZHJpdmVyLCBjaGlwKSkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBjaGlwLT5wY2ktPmlycSk7CiAJCQltdXRleF91bmxvY2soJmNoaXAtPmlycV9tdXRleCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jCmluZGV4IDUzM2M2NzIuLmQ5NzQxMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jCkBAIC0xMjUwLDcgKzEyNTAsNyBAQAogCW1nci0+cGNpID0gcGNpOwogCW1nci0+aXJxID0gLTE7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHBjeGhyX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHBjeGhyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQljYXJkX25hbWUsIG1ncikpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXBjeGhyX2ZyZWUobWdyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwppbmRleCA1NmUwYzAxLi41ZTFkNWQyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKKysrIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCkBAIC0xODk5LDkgKzE4OTksOCBAQAogCWh3cG9ydCA9IChzdHJ1Y3QgcmlwdGlkZXBvcnQgKiljaGlwLT5wb3J0OwogCVVOU0VUX0FJRShod3BvcnQpOwogCi0JaWYgKHJlcXVlc3RfaXJxCi0JICAgIChwY2ktPmlycSwgc25kX3JpcHRpZGVfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCi0JICAgICAiUklQVElERSIsIGNoaXApKSB7CisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfcmlwdGlkZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJIlJJUFRJREUiLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJSaXB0aWRlOiB1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsCiAJCQkgICBwY2ktPmlycSk7CiAJCXNuZF9yaXB0aWRlX2ZyZWUoY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lMzIuYyBiL3NvdW5kL3BjaS9ybWUzMi5jCmluZGV4IGRjOGQxMzAuLjZiYjdhYzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWUzMi5jCisrKyBiL3NvdW5kL3BjaS9ybWUzMi5jCkBAIC0xMzczLDcgKzEzNzMsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9ybWUzMl9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgIlJNRTMyIiwgKHZvaWQgKikgcm1lMzIpKSB7CisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfcm1lMzJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCSJSTUUzMiIsIHJtZTMyKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDEwNjExMGEuLmUzMzA0YjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC0xNTg3LDcgKzE1ODcsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9ybWU5Nl9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsICJSTUU5NiIsICh2b2lkICopcm1lOTYpKSB7CisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfcm1lOTZfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCSJSTUU5NiIsIHJtZTk2KSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKaW5kZXggNjk0YWEwNS4uNjM4Mzk4NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwpAQCAtMzUxNiw4ICszNTE2LDggQEAKIAogCS8qIEFsaWduIHRvIGJ1cy1zcGFjZSA2NEsgYm91bmRhcnkgKi8KIAotCWNiX2J1cyA9IChoZHNwLT5jYXB0dXJlX2RtYV9idWYuYWRkciArIDB4RkZGRikgJiB+MHhGRkZGbDsKLQlwYl9idXMgPSAoaGRzcC0+cGxheWJhY2tfZG1hX2J1Zi5hZGRyICsgMHhGRkZGKSAmIH4weEZGRkZsOworCWNiX2J1cyA9IEFMSUdOKGhkc3AtPmNhcHR1cmVfZG1hX2J1Zi5hZGRyLCAweDEwMDAwdWwpOworCXBiX2J1cyA9IEFMSUdOKGhkc3AtPnBsYXliYWNrX2RtYV9idWYuYWRkciwgMHgxMDAwMHVsKTsKIAogCS8qIFRlbGwgdGhlIGNhcmQgd2hlcmUgaXQgaXMgKi8KIApAQCAtNDkzNCwxMyArNDkzNCwxNCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2hkc3BfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCAiaGRzcCIsICh2b2lkICopaGRzcCkpIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9oZHNwX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkiaGRzcCIsIGhkc3ApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkhhbW1lcmZhbGwtRFNQOiB1bmFibGUgdG8gdXNlIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWhkc3AtPmlycSA9IHBjaS0+aXJxOwotCWhkc3AtPnByZWNpc2VfcHRyID0gMTsKKwloZHNwLT5wcmVjaXNlX3B0ciA9IDA7CiAJaGRzcC0+dXNlX21pZGlfdGFza2xldCA9IDE7CiAKIAlpZiAoKGVyciA9IHNuZF9oZHNwX2luaXRpYWxpemVfbWVtb3J5KGhkc3ApKSA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCA3MDU1ZDg5Li4wNTQ3ZjZmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTM0OTYsOCArMzQ5Niw3IEBACiAJCSAgIGhkc3BtLT5wb3J0ICsgaW9fZXh0ZW50IC0gMSk7CiAKIAlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9oZHNwbV9pbnRlcnJ1cHQsCi0JCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsICJoZHNwbSIsCi0JCQkodm9pZCAqKSBoZHNwbSkpIHsKKwkJCUlSUUZfU0hBUkVELCAiaGRzcG0iLCBoZHNwbSkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiSERTUE06IHVuYWJsZSB0byB1c2UgSVJRICVkXG4iLCBwY2ktPmlycSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCmluZGV4IGNmMDQyN2IuLmNjM2JkZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKQEAgLTE4MjcsOCArMTgyNyw4IEBACiAKIAkvKiBBbGlnbiB0byBidXMtc3BhY2UgNjRLIGJvdW5kYXJ5ICovCiAKLQljYl9idXMgPSAocm1lOTY1Mi0+Y2FwdHVyZV9kbWFfYnVmLmFkZHIgKyAweEZGRkYpICYgfjB4RkZGRmw7Ci0JcGJfYnVzID0gKHJtZTk2NTItPnBsYXliYWNrX2RtYV9idWYuYWRkciArIDB4RkZGRikgJiB+MHhGRkZGbDsKKwljYl9idXMgPSBBTElHTihybWU5NjUyLT5jYXB0dXJlX2RtYV9idWYuYWRkciwgMHgxMDAwMHVsKTsKKwlwYl9idXMgPSBBTElHTihybWU5NjUyLT5wbGF5YmFja19kbWFfYnVmLmFkZHIsIDB4MTAwMDB1bCk7CiAKIAkvKiBUZWxsIHRoZSBjYXJkIHdoZXJlIGl0IGlzICovCiAKQEAgLTI1MDAsNyArMjUwMCw4IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCQotCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX3JtZTk2NTJfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCAicm1lOTY1MiIsICh2b2lkICopcm1lOTY1MikpIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9ybWU5NjUyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkicm1lOTY1MiIsIHJtZTk2NTIpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMgYi9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCmluZGV4IGY5YjhhZmEuLjlmMjVkOTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKKysrIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwpAQCAtMTE5NSw3ICsxMTk1LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNvbmljLT5wY2ksIDB4NDAsIHNvbmljLT5kbWFhX3BvcnQpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoc29uaWMtPnBjaSwgMHg0OCwgc29uaWMtPmRtYWNfcG9ydCk7CiAJaWYgKHNvbmljLT5pcnEgPj0gMCkKLQkJZnJlZV9pcnEoc29uaWMtPmlycSwgKHZvaWQgKilzb25pYyk7CisJCWZyZWVfaXJxKHNvbmljLT5pcnEsIHNvbmljKTsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKHNvbmljLT5yZXNfZG1hYSk7CiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShzb25pYy0+cmVzX2RtYWMpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoc29uaWMtPnBjaSk7CkBAIC0xMjU3LDcgKzEyNTcsOCBAQAogCXNvbmljLT5taWRpX3BvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAzKTsKIAlzb25pYy0+Z2FtZV9wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgNCk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9zb25pY3ZpYmVzX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwgIlMzIFNvbmljVmliZXMiLCAodm9pZCAqKXNvbmljKSkgeworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX3NvbmljdmliZXNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCSJTMyBTb25pY1ZpYmVzIiwgc29uaWMpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfc29uaWN2aWJlc19mcmVlKHNvbmljKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWFpbi5jIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMKaW5kZXggMWZiYzQzMi4uNDc0ZjJkNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMKQEAgLTMzODAsOCArMzM4MCw4IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInRyaWRlbnQ6IHVuYWJsZSB0byBhbGxvY2F0ZSBUTEIgYnVmZmVyXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXRyaWRlbnQtPnRsYi5lbnRyaWVzID0gKHVuc2lnbmVkIGludCopKCgodW5zaWduZWQgbG9uZyl0cmlkZW50LT50bGIuYnVmZmVyLmFyZWEgKyBTTkRSVl9UUklERU5UX01BWF9QQUdFUyAqIDQgLSAxKSAmIH4oU05EUlZfVFJJREVOVF9NQVhfUEFHRVMgKiA0IC0gMSkpOwotCXRyaWRlbnQtPnRsYi5lbnRyaWVzX2RtYWFkZHIgPSAodHJpZGVudC0+dGxiLmJ1ZmZlci5hZGRyICsgU05EUlZfVFJJREVOVF9NQVhfUEFHRVMgKiA0IC0gMSkgJiB+KFNORFJWX1RSSURFTlRfTUFYX1BBR0VTICogNCAtIDEpOworCXRyaWRlbnQtPnRsYi5lbnRyaWVzID0gKHVuc2lnbmVkIGludCopQUxJR04oKHVuc2lnbmVkIGxvbmcpdHJpZGVudC0+dGxiLmJ1ZmZlci5hcmVhLCBTTkRSVl9UUklERU5UX01BWF9QQUdFUyAqIDQpOworCXRyaWRlbnQtPnRsYi5lbnRyaWVzX2RtYWFkZHIgPSBBTElHTih0cmlkZW50LT50bGIuYnVmZmVyLmFkZHIsIFNORFJWX1RSSURFTlRfTUFYX1BBR0VTICogNCk7CiAJLyogYWxsb2NhdGUgc2hhZG93IFRMQiBwYWdlIHRhYmxlICh2aXJ0dWFsIGFkZHJlc3NlcykgKi8KIAl0cmlkZW50LT50bGIuc2hhZG93X2VudHJpZXMgPSB2bWFsbG9jKFNORFJWX1RSSURFTlRfTUFYX1BBR0VTKnNpemVvZih1bnNpZ25lZCBsb25nKSk7CiAJaWYgKHRyaWRlbnQtPnRsYi5zaGFkb3dfZW50cmllcyA9PSBOVUxMKSB7CkBAIC0zNjA4LDcgKzM2MDgsNyBAQAogCX0KIAl0cmlkZW50LT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CiAKLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF90cmlkZW50X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF90cmlkZW50X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkiVHJpZGVudCBBdWRpbyIsIHRyaWRlbnQpKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfdHJpZGVudF9mcmVlKHRyaWRlbnQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggOTJiMDczNi4uYTU3MmIwMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0yMzA3LDcgKzIzMDcsNyBAQAogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwKIAkJCWNoaXBfdHlwZSA9PSBUWVBFX1ZJQTgyMzMgPwogCQkJc25kX3ZpYTgyMzNfaW50ZXJydXB0IDoJc25kX3ZpYTY4Nl9pbnRlcnJ1cHQsCi0JCQlJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELAorCQkJSVJRRl9TSEFSRUQsCiAJCQljYXJkLT5kcml2ZXIsIGNoaXApKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQlzbmRfdmlhODJ4eF9mcmVlKGNoaXApOwpAQCAtMjM2Niw3ICsyMzY2LDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgY2hlY2tfZHhzX2xpc3Qoc3RydWN0IHBjaV9kZXYgKnBjaSwgaW50IHJldmlzaW9uKQogewotCXN0YXRpYyBzdHJ1Y3QgZHhzX3doaXRlbGlzdCB3aGl0ZWxpc3RbXSA9IHsKKwlzdGF0aWMgc3RydWN0IGR4c193aGl0ZWxpc3Qgd2hpdGVsaXN0W10gX19kZXZpbml0ZGF0YSA9IHsKIAkJeyAuc3VidmVuZG9yID0gMHgxMDA1LCAuc3ViZGV2aWNlID0gMHg0NzEwLCAuYWN0aW9uID0gVklBX0RYU19FTkFCTEUgfSwgLyogQXZhbmNlIExvZ2ljIE1vYm8gKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxMDE5LCAuc3ViZGV2aWNlID0gMHgwOTk2LCAuYWN0aW9uID0gVklBX0RYU180OEsgfSwKIAkJeyAuc3VidmVuZG9yID0gMHgxMDE5LCAuc3ViZGV2aWNlID0gMHgwYTgxLCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogRUNTIEs3VlRBMyB2OC4wICovCkBAIC0yNDI3LDcgKzI0MjcsNyBAQAogCQl7IC5zdWJ2ZW5kb3IgPSAweDQwMDUsIC5zdWJkZXZpY2UgPSAweDQ3MTAsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LAkvKiBNU0kgSzdUMjY2IFBybzIgKE1TLTYzODAgVjIuMCkgQklPUyAzLjcgKi8KIAkJeyB9IC8qIHRlcm1pbmF0b3IgKi8KIAl9OwotCXN0cnVjdCBkeHNfd2hpdGVsaXN0ICp3OworCWNvbnN0IHN0cnVjdCBkeHNfd2hpdGVsaXN0ICp3OwogCXVuc2lnbmVkIHNob3J0IHN1YnN5c3RlbV92ZW5kb3I7CiAJdW5zaWduZWQgc2hvcnQgc3Vic3lzdGVtX2RldmljZTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKaW5kZXggZmViMjdjOS4uMTdkNmI4NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCkBAIC0xMTI0LDcgKzExMjQsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAljaGlwLT5wb3J0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7Ci0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfdmlhODJ4eF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfdmlhODJ4eF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJY2FyZC0+ZHJpdmVyLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX3ZpYTgyeHhfZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKaW5kZXggYWY0OWU4YS4uODlmNThlYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKKysrIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKQEAgLTE2OSw4ICsxNjksOCBAQAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCiAJCXZ4LT5wb3J0W2ldID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgaSArIDEpOwogCi0JaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfdnhfaXJxX2hhbmRsZXIsIElSUUZfRElTQUJMRUR8SVJRRl9TSEFSRUQsCi0JCQlDQVJEX05BTUUsICh2b2lkICopIGNoaXApKSB7CisJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfdnhfaXJxX2hhbmRsZXIsIElSUUZfU0hBUkVELAorCQkJQ0FSRF9OQU1FLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX3Z4MjIyX2ZyZWUoY2hpcCk7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwppbmRleCAxODY0NTNmLi5mZDliN2I4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKQEAgLTQ5LDcgKzQ5LDYgQEAKIHN0YXRpYyBsb25nIGpveXN0aWNrX3BvcnRbU05EUlZfQ0FSRFNdOwogI2VuZGlmCiBzdGF0aWMgaW50IHJlYXJfc3dpdGNoW1NORFJWX0NBUkRTXTsKLXN0YXRpYyBpbnQgcmVhcl9zd2FwW1NORFJWX0NBUkRTXSA9IHsgWzAgLi4uIChTTkRSVl9DQVJEUy0xKV0gPSAxIH07CiAKIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgdGhlIFlhbWFoYSBEUy0xIFBDSSBzb3VuZGNhcmQuIik7CkBAIC02Nyw4ICs2Niw2IEBACiAjZW5kaWYKIG1vZHVsZV9wYXJhbV9hcnJheShyZWFyX3N3aXRjaCwgYm9vbCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJlYXJfc3dpdGNoLCAiRW5hYmxlIHNoYXJlZCByZWFyL2xpbmUtaW4gc3dpdGNoIik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkocmVhcl9zd2FwLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocmVhcl9zd2FwLCAiU3dhcCByZWFyIGNoYW5uZWxzIChtdXN0IGJlIGVuYWJsZWQgZm9yIGNvcnJlY3QgSUVDOTU4IChTL1BESUYpKSBvdXRwdXQiKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF95bWZwY2lfaWRzW10gPSB7CiAgICAgICAgIHsgMHgxMDczLCAweDAwMDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sICAgLyogWU1GNzI0ICovCkBAIC0yOTgsNyArMjk1LDcgQEAKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfeW1mcGNpX21peGVyKGNoaXAsIHJlYXJfc3dpdGNoW2Rldl0sIHJlYXJfc3dhcFtkZXZdKSkgPCAwKSB7CisJaWYgKChlcnIgPSBzbmRfeW1mcGNpX21peGVyKGNoaXAsIHJlYXJfc3dpdGNoW2Rldl0pKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKaW5kZXggYTQwYzEwOC4uNzg4MTk0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYwpAQCAtOTEwLDcgKzkxMCw3IEBACiAJeXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAl5cGNtLT5vdXRwdXRfZnJvbnQgPSAxOwogCXlwY20tPm91dHB1dF9yZWFyID0gY2hpcC0+bW9kZV9kdXA0Y2ggPyAxIDogMDsKLQl5cGNtLT5zd2FwX3JlYXIgPSBjaGlwLT5yZWFyX3N3YXA7CisJeXBjbS0+c3dhcF9yZWFyID0gMDsKIAlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CiAJaWYgKHlwY20tPm91dHB1dF9yZWFyKSB7CiAJCXltZnBjaV9vcGVuX2V4dGVuc2lvbihjaGlwKTsKQEAgLTkzNiw2ICs5MzYsNyBAQAogCXlwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJeXBjbS0+b3V0cHV0X2Zyb250ID0gMDsKIAl5cGNtLT5vdXRwdXRfcmVhciA9IDE7CisJeXBjbS0+c3dhcF9yZWFyID0gMTsKIAlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CiAJc25kX3ltZnBjaV93cml0ZXcoY2hpcCwgWURTWEdSX1NQRElGT1VUQ1RSTCwKIAkJCSAgc25kX3ltZnBjaV9yZWFkdyhjaGlwLCBZRFNYR1JfU1BESUZPVVRDVFJMKSB8IDIpOwpAQCAtOTYzLDYgKzk2NCw3IEBACiAJeXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAl5cGNtLT5vdXRwdXRfZnJvbnQgPSAwOwogCXlwY20tPm91dHB1dF9yZWFyID0gMTsKKwl5cGNtLT5zd2FwX3JlYXIgPSAwOwogCXNwaW5fbG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKIAl5bWZwY2lfb3Blbl9leHRlbnNpb24oY2hpcCk7CiAJY2hpcC0+cmVhcl9vcGVuZWQrKzsKQEAgLTE3NTUsNyArMTc1Nyw3IEBACiAJY2hpcC0+YWM5NyA9IE5VTEw7CiB9CiAKLWludCBfX2RldmluaXQgc25kX3ltZnBjaV9taXhlcihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IHJlYXJfc3dpdGNoLCBpbnQgcmVhcl9zd2FwKQoraW50IF9fZGV2aW5pdCBzbmRfeW1mcGNpX21peGVyKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgcmVhcl9zd2l0Y2gpCiB7CiAJc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIGFjOTc7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKQEAgLTE3NjcsNyArMTc2OSw2IEBACiAJCS5yZWFkID0gc25kX3ltZnBjaV9jb2RlY19yZWFkLAogCX07CiAKLQljaGlwLT5yZWFyX3N3YXAgPSByZWFyX3N3YXA7CiAJaWYgKChlcnIgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgY2hpcCwgJmNoaXAtPmFjOTdfYnVzKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmFjOTdfYnVzLT5wcml2YXRlX2ZyZWUgPSBzbmRfeW1mcGNpX21peGVyX2ZyZWVfYWM5N19idXM7CkBAIC0yMDI1LDEwICsyMDI2LDEwIEBACiAJY2hpcC0+YmFua19zaXplX2VmZmVjdCA9IHNuZF95bWZwY2lfcmVhZGwoY2hpcCwgWURTWEdSX0VGRkNUUkxTSVpFKSA8PCAyOwogCWNoaXAtPndvcmtfc2l6ZSA9IFlEU1hHX0RFRkFVTFRfV09SS19TSVpFOwogCQotCXNpemUgPSAoKHBsYXliYWNrX2N0cmxfc2l6ZSArIDB4MDBmZikgJiB+MHgwMGZmKSArCi0JICAgICAgICgoY2hpcC0+YmFua19zaXplX3BsYXliYWNrICogMiAqIFlEU1hHX1BMQVlCQUNLX1ZPSUNFUyArIDB4MDBmZikgJiB+MHgwMGZmKSArCi0JICAgICAgICgoY2hpcC0+YmFua19zaXplX2NhcHR1cmUgKiAyICogWURTWEdfQ0FQVFVSRV9WT0lDRVMgKyAweDAwZmYpICYgfjB4MDBmZikgKwotCSAgICAgICAoKGNoaXAtPmJhbmtfc2l6ZV9lZmZlY3QgKiAyICogWURTWEdfRUZGRUNUX1ZPSUNFUyArIDB4MDBmZikgJiB+MHgwMGZmKSArCisJc2l6ZSA9IEFMSUdOKHBsYXliYWNrX2N0cmxfc2l6ZSwgMHgxMDApICsKKwkgICAgICAgQUxJR04oY2hpcC0+YmFua19zaXplX3BsYXliYWNrICogMiAqIFlEU1hHX1BMQVlCQUNLX1ZPSUNFUywgMHgxMDApICsKKwkgICAgICAgQUxJR04oY2hpcC0+YmFua19zaXplX2NhcHR1cmUgKiAyICogWURTWEdfQ0FQVFVSRV9WT0lDRVMsIDB4MTAwKSArCisJICAgICAgIEFMSUdOKGNoaXAtPmJhbmtfc2l6ZV9lZmZlY3QgKiAyICogWURTWEdfRUZGRUNUX1ZPSUNFUywgMHgxMDApICsKIAkgICAgICAgY2hpcC0+d29ya19zaXplOwogCS8qIHdvcmtfcHRyIG11c3QgYmUgYWxpZ25lZCB0byAyNTYgYnl0ZXMsIGJ1dCBpdCdzIGFscmVhZHkKIAkgICBjb3ZlcmVkIHdpdGggdGhlIGtlcm5lbCBwYWdlIGFsbG9jYXRpb24gbWVjaGFuaXNtICovCkBAIC0yMDQzLDggKzIwNDQsOCBAQAogCWNoaXAtPmJhbmtfYmFzZV9wbGF5YmFja19hZGRyID0gcHRyX2FkZHI7CiAJY2hpcC0+Y3RybF9wbGF5YmFjayA9ICh1MzIgKilwdHI7CiAJY2hpcC0+Y3RybF9wbGF5YmFja1swXSA9IGNwdV90b19sZTMyKFlEU1hHX1BMQVlCQUNLX1ZPSUNFUyk7Ci0JcHRyICs9IChwbGF5YmFja19jdHJsX3NpemUgKyAweDAwZmYpICYgfjB4MDBmZjsKLQlwdHJfYWRkciArPSAocGxheWJhY2tfY3RybF9zaXplICsgMHgwMGZmKSAmIH4weDAwZmY7CisJcHRyICs9IEFMSUdOKHBsYXliYWNrX2N0cmxfc2l6ZSwgMHgxMDApOworCXB0cl9hZGRyICs9IEFMSUdOKHBsYXliYWNrX2N0cmxfc2l6ZSwgMHgxMDApOwogCWZvciAodm9pY2UgPSAwOyB2b2ljZSA8IFlEU1hHX1BMQVlCQUNLX1ZPSUNFUzsgdm9pY2UrKykgewogCQljaGlwLT52b2ljZXNbdm9pY2VdLm51bWJlciA9IHZvaWNlOwogCQljaGlwLT52b2ljZXNbdm9pY2VdLmJhbmsgPSAoc3RydWN0IHNuZF95bWZwY2lfcGxheWJhY2tfYmFuayAqKXB0cjsKQEAgLTIwNTUsOCArMjA1Niw4IEBACiAJCQlwdHJfYWRkciArPSBjaGlwLT5iYW5rX3NpemVfcGxheWJhY2s7CiAJCX0KIAl9Ci0JcHRyID0gKGNoYXIgKikoKCh1bnNpZ25lZCBsb25nKXB0ciArIDB4MDBmZikgJiB+MHgwMGZmKTsKLQlwdHJfYWRkciA9IChwdHJfYWRkciArIDB4MDBmZikgJiB+MHgwMGZmOworCXB0ciA9IChjaGFyICopQUxJR04oKHVuc2lnbmVkIGxvbmcpcHRyLCAweDEwMCk7CisJcHRyX2FkZHIgPSBBTElHTihwdHJfYWRkciwgMHgxMDApOwogCWNoaXAtPmJhbmtfYmFzZV9jYXB0dXJlID0gcHRyOwogCWNoaXAtPmJhbmtfYmFzZV9jYXB0dXJlX2FkZHIgPSBwdHJfYWRkcjsKIAlmb3IgKHZvaWNlID0gMDsgdm9pY2UgPCBZRFNYR19DQVBUVVJFX1ZPSUNFUzsgdm9pY2UrKykKQEAgLTIwNjUsOCArMjA2Niw4IEBACiAJCQlwdHIgKz0gY2hpcC0+YmFua19zaXplX2NhcHR1cmU7CiAJCQlwdHJfYWRkciArPSBjaGlwLT5iYW5rX3NpemVfY2FwdHVyZTsKIAkJfQotCXB0ciA9IChjaGFyICopKCgodW5zaWduZWQgbG9uZylwdHIgKyAweDAwZmYpICYgfjB4MDBmZik7Ci0JcHRyX2FkZHIgPSAocHRyX2FkZHIgKyAweDAwZmYpICYgfjB4MDBmZjsKKwlwdHIgPSAoY2hhciAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKXB0ciwgMHgxMDApOworCXB0cl9hZGRyID0gQUxJR04ocHRyX2FkZHIsIDB4MTAwKTsKIAljaGlwLT5iYW5rX2Jhc2VfZWZmZWN0ID0gcHRyOwogCWNoaXAtPmJhbmtfYmFzZV9lZmZlY3RfYWRkciA9IHB0cl9hZGRyOwogCWZvciAodm9pY2UgPSAwOyB2b2ljZSA8IFlEU1hHX0VGRkVDVF9WT0lDRVM7IHZvaWNlKyspCkBAIC0yMDc1LDggKzIwNzYsOCBAQAogCQkJcHRyICs9IGNoaXAtPmJhbmtfc2l6ZV9lZmZlY3Q7CiAJCQlwdHJfYWRkciArPSBjaGlwLT5iYW5rX3NpemVfZWZmZWN0OwogCQl9Ci0JcHRyID0gKGNoYXIgKikoKCh1bnNpZ25lZCBsb25nKXB0ciArIDB4MDBmZikgJiB+MHgwMGZmKTsKLQlwdHJfYWRkciA9IChwdHJfYWRkciArIDB4MDBmZikgJiB+MHgwMGZmOworCXB0ciA9IChjaGFyICopQUxJR04oKHVuc2lnbmVkIGxvbmcpcHRyLCAweDEwMCk7CisJcHRyX2FkZHIgPSBBTElHTihwdHJfYWRkciwgMHgxMDApOwogCWNoaXAtPndvcmtfYmFzZSA9IHB0cjsKIAljaGlwLT53b3JrX2Jhc2VfYWRkciA9IHB0cl9hZGRyOwogCQpAQCAtMjE1Myw3ICsyMTU0LDcgQEAKIAkJc25kX2RtYV9mcmVlX3BhZ2VzKCZjaGlwLT53b3JrX3B0cik7CiAJCiAJaWYgKGNoaXAtPmlycSA+PSAwKQotCQlmcmVlX2lycShjaGlwLT5pcnEsICh2b2lkICopY2hpcCk7CisJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfcmVnX2FyZWEpOwogCiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGNoaXAtPnBjaSwgMHg0MCwgY2hpcC0+b2xkX2xlZ2FjeV9jdHJsKTsKQEAgLTIyOTAsNyArMjI5MSw3IEBACiAJY2hpcC0+cGNpID0gcGNpOwogCWNoaXAtPmlycSA9IC0xOwogCWNoaXAtPmRldmljZV9pZCA9IHBjaS0+ZGV2aWNlOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaSwgUENJX1JFVklTSU9OX0lELCAodTggKikmY2hpcC0+cmV2KTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2ksIFBDSV9SRVZJU0lPTl9JRCwgJmNoaXAtPnJldik7CiAJY2hpcC0+cmVnX2FyZWFfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwogCWNoaXAtPnJlZ19hcmVhX3ZpcnQgPSBpb3JlbWFwX25vY2FjaGUoY2hpcC0+cmVnX2FyZWFfcGh5cywgMHg4MDAwKTsKIAlwY2lfc2V0X21hc3RlcihwY2kpOwpAQCAtMjMwMCw3ICsyMzAxLDggQEAKIAkJc25kX3ltZnBjaV9mcmVlKGNoaXApOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF95bWZwY2lfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVEfElSUUZfU0hBUkVELCAiWU1GUENJIiwgKHZvaWQgKikgY2hpcCkpIHsKKwlpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF95bWZwY2lfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCSJZTUZQQ0kiLCBjaGlwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJc25kX3ltZnBjaV9mcmVlKGNoaXApOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjMyMiw3ICsyMzI0LDYgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JY2hpcC0+cmVhcl9zd2FwID0gMTsKIAlpZiAoKGVyciA9IHNuZF95bWZwY2lfYWMzX2luaXQoY2hpcCkpIDwgMCkgewogCQlzbmRfeW1mcGNpX2ZyZWUoY2hpcCk7CiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9zb3VuZF9maXJtd2FyZS5jIGIvc291bmQvc291bmRfZmlybXdhcmUuYwppbmRleCAzYTE4MWQ0Li4zMzA0MzQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb3VuZF9maXJtd2FyZS5jCisrKyBiL3NvdW5kL3NvdW5kX2Zpcm13YXJlLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVW5hYmxlIHRvIGxvYWQgJyVzJy5cbiIsIGZuKTsKIAkJcmV0dXJuIDA7CiAJfQotCWwgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zaXplOworCWwgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3NpemU7CiAJaWYgKGwgPD0gMCB8fCBsID4gMTMxMDcyKQogCXsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiSW52YWxpZCBmaXJtd2FyZSAnJXMnXG4iLCBmbik7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9jczQyMzEuYyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCmluZGV4IGVkZWIzZDMuLmY1OTU2ZDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2NzNDIzMS5jCisrKyBiL3NvdW5kL3NwYXJjL2NzNDIzMS5jCkBAIC0xMjY4LDcgKzEyNjgsNyBAQAogCS5jaGFubmVsc19taW4JCT0gMSwKIAkuY2hhbm5lbHNfbWF4CQk9IDIsCiAJLmJ1ZmZlcl9ieXRlc19tYXgJPSAoMzIqMTAyNCksCi0JLnBlcmlvZF9ieXRlc19taW4JPSA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gNjQsCiAJLnBlcmlvZF9ieXRlc19tYXgJPSAoMzIqMTAyNCksCiAJLnBlcmlvZHNfbWluCQk9IDEsCiAJLnBlcmlvZHNfbWF4CQk9IDEwMjQsCkBAIC0xMjg4LDcgKzEyODgsNyBAQAogCS5jaGFubmVsc19taW4JCT0gMSwKIAkuY2hhbm5lbHNfbWF4CQk9IDIsCiAJLmJ1ZmZlcl9ieXRlc19tYXgJPSAoMzIqMTAyNCksCi0JLnBlcmlvZF9ieXRlc19taW4JPSA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gNjQsCiAJLnBlcmlvZF9ieXRlc19tYXgJPSAoMzIqMTAyNCksCiAJLnBlcmlvZHNfbWluCQk9IDEsCiAJLnBlcmlvZHNfbWF4CQk9IDEwMjQsCkBAIC0xNzk2LDcgKzE3OTYsNyBAQAogCXNuZF9jczQyMzFfb3V0bShjaGlwLCBDUzQyMzFfSVJRX1NUQVRVUywgfkNTNDIzMV9BTExfSVJRUyB8IH5zdGF0dXMsIDApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyoKQEAgLTE4MjEsNyArMTgyMSw2IEBACiAJaWYgKCEoY3NyICYgdGVzdCkpCiAJCWdvdG8gb3V0OwogCWVyciA9IC1FQlVTWTsKLQljc3IgPSBzYnVzX3JlYWRsKGJhc2UtPnJlZ3MgKyBBUENDU1IpOwogCXRlc3QgPSBBUENfWElOVF9DTlZBOwogCWlmICggYmFzZS0+ZGlyID09IEFQQ19QTEFZICkKIAkJdGVzdCA9IEFQQ19YSU5UX1BOVkE7CkBAIC0xODYyLDE3ICsxODYxLDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+bG9jaywgZmxhZ3MpOwogCWlmICghb24pIHsKLQkJaWYgKGJhc2UtPmRpciA9PSBBUENfUExBWSkgeyAKLQkJCXNidXNfd3JpdGVsKDAsIGJhc2UtPnJlZ3MgKyBiYXNlLT5kaXIgKyBBUENOVkEpOyAKLQkJCXNidXNfd3JpdGVsKDEsIGJhc2UtPnJlZ3MgKyBiYXNlLT5kaXIgKyBBUENDKTsgCi0JCX0KLQkJZWxzZQotCQl7Ci0JCQlzYnVzX3dyaXRlbCgwLCBiYXNlLT5yZWdzICsgYmFzZS0+ZGlyICsgQVBDTkMpOyAKLQkJCXNidXNfd3JpdGVsKDAsIGJhc2UtPnJlZ3MgKyBiYXNlLT5kaXIgKyBBUENWQSk7IAotCQl9IAorCQlzYnVzX3dyaXRlbCgwLCBiYXNlLT5yZWdzICsgYmFzZS0+ZGlyICsgQVBDTkMpOworCQlzYnVzX3dyaXRlbCgwLCBiYXNlLT5yZWdzICsgYmFzZS0+ZGlyICsgQVBDTlZBKTsKKwkJc2J1c193cml0ZWwoMCwgYmFzZS0+cmVncyArIGJhc2UtPmRpciArIEFQQ0MpOworCQlzYnVzX3dyaXRlbCgwLCBiYXNlLT5yZWdzICsgYmFzZS0+ZGlyICsgQVBDVkEpOworCisJCS8qIEFDSyBhbnkgQVBDIGludGVycnVwdHMuICovCisJCWNzciA9IHNidXNfcmVhZGwoYmFzZS0+cmVncyArIEFQQ0NTUik7CisJCXNidXNfd3JpdGVsKGNzciwgYmFzZS0+cmVncyArIEFQQ0NTUik7CiAJfSAKLQl1ZGVsYXkoNjAwKTsgCisJdWRlbGF5KDEwMDApOwogCWNzciA9IHNidXNfcmVhZGwoYmFzZS0+cmVncyArIEFQQ0NTUik7CiAJc2hpZnQgPSAwOwogCWlmICggYmFzZS0+ZGlyID09IEFQQ19QTEFZICkKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5jIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKaW5kZXggNjcyMDJiOS4uMTliZGNjNyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKQEAgLTI0NzEsNyArMjQ3MSwxMyBAQAogCQlmcC0+bnJfcmF0ZXMgPSBucl9yYXRlczsKIAkJZnAtPnJhdGVfbWluID0gZnAtPnJhdGVfbWF4ID0gY29tYmluZV90cmlwbGUoJmZtdFs4XSk7CiAJCWZvciAociA9IDAsIGlkeCA9IG9mZnNldCArIDE7IHIgPCBucl9yYXRlczsgcisrLCBpZHggKz0gMykgewotCQkJdW5zaWduZWQgaW50IHJhdGUgPSBmcC0+cmF0ZV90YWJsZVtyXSA9IGNvbWJpbmVfdHJpcGxlKCZmbXRbaWR4XSk7CisJCQl1bnNpZ25lZCBpbnQgcmF0ZSA9IGNvbWJpbmVfdHJpcGxlKCZmbXRbaWR4XSk7CisJCQkvKiBDLU1lZGlhIENNNjUwMSBtaXNsYWJlbHMgaXRzIDk2IGtIeiBhbHRzZXR0aW5nICovCisJCQlpZiAocmF0ZSA9PSA0ODAwMCAmJiBucl9yYXRlcyA9PSAxICYmCisJCQkgICAgY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDBkOGMsIDB4MDIwMSkgJiYKKwkJCSAgICBmcC0+YWx0c2V0dGluZyA9PSA1ICYmIGZwLT5tYXhwYWNrc2l6ZSA9PSAzOTIpCisJCQkJcmF0ZSA9IDk2MDAwOworCQkJZnAtPnJhdGVfdGFibGVbcl0gPSByYXRlOwogCQkJaWYgKHJhdGUgPCBmcC0+cmF0ZV9taW4pCiAJCQkJZnAtPnJhdGVfbWluID0gcmF0ZTsKIAkJCWVsc2UgaWYgKHJhdGUgPiBmcC0+cmF0ZV9tYXgpCkBAIC0zMjgwLDYgKzMyODYsNyBAQAogCiBzdGF0aWMgaW50IHNuZF91c2JfYXVkaW9fZnJlZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCkKIHsKKwl1c2JfY2hpcFtjaGlwLT5pbmRleF0gPSBOVUxMOwogCWtmcmVlKGNoaXApOwogCXJldHVybiAwOwogfQpAQCAtMzU0MSw3ICszNTQ4LDYgQEAKIAkJbGlzdF9mb3JfZWFjaChwLCAmY2hpcC0+bWl4ZXJfbGlzdCkgewogCQkJc25kX3VzYl9taXhlcl9kaXNjb25uZWN0KHApOwogCQl9Ci0JCXVzYl9jaGlwW2NoaXAtPmluZGV4XSA9IE5VTEw7CiAJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQlzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKGNhcmQpOwogCX0gZWxzZSB7CkBAIC0zNTc3LDggKzM1ODMsNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpbnZhbGlkIG5ycGFja3MgdmFsdWUuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXVzYl9yZWdpc3RlcigmdXNiX2F1ZGlvX2RyaXZlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmdXNiX2F1ZGlvX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyLmMgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwppbmRleCBlNzRlYjFiLi43YjNiZjM1IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWl4ZXIuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwpAQCAtMTUyNiw3ICsxNTI2LDcgQEAKIAkJbmFtZWxpc3RbaV0gPSBrbWFsbG9jKE1BWF9JVEVNX05BTUVfTEVOLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCEgbmFtZWxpc3RbaV0pIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBtYWxsb2NcbiIpOwotCQkJd2hpbGUgKC0taSA+IDApCisJCQl3aGlsZSAoaS0tKQogCQkJCWtmcmVlKG5hbWVsaXN0W2ldKTsKIAkJCWtmcmVlKG5hbWVsaXN0KTsKIAkJCWtmcmVlKGN2YWwpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5YXVkaW8uYyBiL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeWF1ZGlvLmMKaW5kZXggMzY3ZjhhMy4uMGEzNTJlNCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5YXVkaW8uYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnlhdWRpby5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAkJdXNYMllfZXJyb3JfdXJiX3N0YXR1cyh1c1gyWSwgc3VicywgdXJiKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAobGlrZWx5KHVyYi0+c3RhcnRfZnJhbWUgPT0gdXNYMlktPndhaXRfaXNvX2ZyYW1lKSkKKwlpZiAobGlrZWx5KCh1cmItPnN0YXJ0X2ZyYW1lICYgMHhGRkZGKSA9PSAodXNYMlktPndhaXRfaXNvX2ZyYW1lICYgMHhGRkZGKSkpCiAJCXN1YnMtPmNvbXBsZXRlZF91cmIgPSB1cmI7CiAJZWxzZSB7CiAJCXVzWDJZX2Vycm9yX3NlcXVlbmNlKHVzWDJZLCBzdWJzLCB1cmIpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKaW5kZXggOGYzZTM1ZS4uYTVlN2JjZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJdXNYMllfZXJyb3JfdXJiX3N0YXR1cyh1c1gyWSwgc3VicywgdXJiKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAobGlrZWx5KHVyYi0+c3RhcnRfZnJhbWUgPT0gdXNYMlktPndhaXRfaXNvX2ZyYW1lKSkKKwlpZiAobGlrZWx5KCh1cmItPnN0YXJ0X2ZyYW1lICYgMHhGRkZGKSA9PSAodXNYMlktPndhaXRfaXNvX2ZyYW1lICYgMHhGRkZGKSkpCiAJCXN1YnMtPmNvbXBsZXRlZF91cmIgPSB1cmI7CiAJZWxzZSB7CiAJCXVzWDJZX2Vycm9yX3NlcXVlbmNlKHVzWDJZLCBzdWJzLCB1cmIpOwo=